{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./node_modules/jquery/dist/jquery.js","webpack:///./cartridges/app_storefront_base/cartridge/client/default/js/thirdParty/bootstrap.js","webpack:///./node_modules/bootstrap/js/src/alert.js","webpack:///./node_modules/bootstrap/js/src/carousel.js","webpack:///./node_modules/bootstrap/js/src/collapse.js","webpack:///./node_modules/bootstrap/js/src/modal.js","webpack:///./node_modules/bootstrap/js/src/scrollspy.js","webpack:///./node_modules/bootstrap/js/src/tab.js","webpack:///(webpack)/buildin/global.js","webpack:///./cartridges/app_project/cartridge/client/default/js/components/spinner.js","webpack:///./cartridges/app_project/cartridge/client/default/js/login.js","webpack:///(webpack)/buildin/module.js","webpack:///./cartridges/app_project/cartridge/client/default/js/components/wishlist.js","webpack:///./cartridges/app_project/cartridge/client/default/js/components/formValidation.js","webpack:///./cartridges/int_mf_tealium/cartridge/client/default/js/tealiumEvents.js","webpack:///./cartridges/app_project_margiela/cartridge/client/default/js/banner-notification.js","webpack:///./cartridges/app_storefront_base/cartridge/client/default/js/components/focus.js","webpack:///./cartridges/app_project_margiela/cartridge/client/default/js/countrySelectorHelper.js","webpack:///./cartridges/app_project_margiela/cartridge/client/default/js/forms.js","webpack:///./node_modules/swiper8/swiper-bundle.js","webpack:///./cartridges/app_project_margiela/cartridge/client/default/js/utils.js","webpack:///./cartridges/app_project_margiela/cartridge/client/default/js/videoUtils.js","webpack:///./cartridges/app_project_margiela/cartridge/client/default/js/miniCart.js","webpack:///./cartridges/app_project_margiela/cartridge/client/default/js/selectElement.js","webpack:///./cartridges/app_project_margiela/cartridge/client/default/js/menuHelper.js","webpack:///./node_modules/lodash/lodash.js","webpack:///./cartridges/app_project/cartridge/client/default/js/components/clientSideValidation.js","webpack:///./cartridges/app_storefront_base/cartridge/client/default/js/product/base.js","webpack:///./node_modules/bootstrap/js/src/util.js","webpack:///./cartridges/app_project/cartridge/client/default/js/product/addToCartValidation.js","webpack:///./cartridges/app_project/cartridge/client/default/js/login/login.js","webpack:///./cartridges/app_project/cartridge/client/default/js/product/fitguide.js","webpack:///./cartridges/app_storefront_base/cartridge/client/default/js/util.js","webpack:///./cartridges/app_project/cartridge/client/default/js/util.js","webpack:///./cartridges/app_project_margiela/cartridge/client/default/js/main.js","webpack:///./cartridges/app_project_margiela/cartridge/client/default/js/search/search-suggestions.js","webpack:///./cartridges/app_project_marni/cartridge/client/default/js/components/customSelect.js","webpack:///./node_modules/lodash/isObject.js","webpack:///./node_modules/lodash/_root.js","webpack:///./node_modules/lodash/_Symbol.js","webpack:///./cartridges/app_project/cartridge/client/default/js/product/notifyWhenAvailable.js","webpack:///./cartridges/app_project/cartridge/client/default/js/components/errorNotification.js","webpack:///./node_modules/lodash/debounce.js","webpack:///./node_modules/lodash/now.js","webpack:///./node_modules/lodash/_freeGlobal.js","webpack:///./node_modules/lodash/toNumber.js","webpack:///./node_modules/lodash/_baseTrim.js","webpack:///./node_modules/lodash/_trimmedEndIndex.js","webpack:///./node_modules/lodash/isSymbol.js","webpack:///./node_modules/lodash/_baseGetTag.js","webpack:///./node_modules/lodash/_getRawTag.js","webpack:///./node_modules/lodash/_objectToString.js","webpack:///./node_modules/lodash/isObjectLike.js","webpack:///./cartridges/app_storefront_base/cartridge/client/default/js/components/keyboardAccessibility.js"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","global","factory","document","w","Error","window","this","noGlobal","arr","getProto","getPrototypeOf","slice","flat","array","concat","apply","push","indexOf","class2type","toString","hasOwn","fnToString","ObjectFunctionString","support","isFunction","obj","nodeType","item","isWindow","preservedScriptAttributes","type","src","nonce","noModule","DOMEval","code","node","doc","val","script","createElement","text","getAttribute","setAttribute","head","appendChild","parentNode","removeChild","toType","jQuery","selector","context","fn","init","isArrayLike","length","jquery","constructor","toArray","num","pushStack","elems","ret","merge","prevObject","each","callback","map","elem","arguments","first","eq","last","even","grep","_elem","odd","len","j","end","sort","splice","extend","options","copy","copyIsArray","clone","target","deep","isPlainObject","Array","isArray","undefined","expando","Math","random","replace","isReady","error","msg","noop","proto","Ctor","isEmptyObject","globalEval","makeArray","results","inArray","second","invert","matches","callbackExpect","arg","guid","iterator","split","_i","toLowerCase","Sizzle","Expr","getText","isXML","tokenize","compile","select","outermostContext","sortInput","hasDuplicate","setDocument","docElem","documentIsHTML","rbuggyQSA","rbuggyMatches","contains","Date","preferredDoc","dirruns","done","classCache","createCache","tokenCache","compilerCache","nonnativeSelectorCache","sortOrder","a","b","pop","pushNative","list","booleans","whitespace","identifier","attributes","pseudos","rwhitespace","RegExp","rtrim","rcomma","rcombinators","rdescend","rpseudo","ridentifier","matchExpr","rhtml","rinputs","rheader","rnative","rquickExpr","rsibling","runescape","funescape","escape","nonHex","high","String","fromCharCode","rcssescape","fcssescape","ch","asCodePoint","charCodeAt","unloadHandler","inDisabledFieldset","addCombinator","disabled","nodeName","dir","next","childNodes","e","els","seed","nid","match","groups","newSelector","newContext","ownerDocument","exec","getElementById","id","getElementsByTagName","getElementsByClassName","qsa","test","testContext","scope","toSelector","join","querySelectorAll","qsaError","removeAttribute","keys","cache","cacheLength","shift","markFunction","assert","el","addHandle","attrs","handler","attrHandle","siblingCheck","cur","diff","sourceIndex","nextSibling","createInputPseudo","createButtonPseudo","createDisabledPseudo","isDisabled","createPositionalPseudo","argument","matchIndexes","namespace","namespaceURI","documentElement","hasCompare","subWindow","defaultView","top","addEventListener","attachEvent","className","createComment","getById","getElementsByName","filter","attrId","find","getAttributeNode","tag","tmp","input","innerHTML","matchesSelector","webkitMatchesSelector","mozMatchesSelector","oMatchesSelector","msMatchesSelector","disconnectedMatch","compareDocumentPosition","adown","bup","compare","sortDetached","aup","ap","bp","unshift","expr","elements","attr","specified","sel","uniqueSort","duplicates","detectDuplicates","sortStable","textContent","firstChild","nodeValue","selectors","createPseudo","relative","preFilter","excess","unquoted","nodeNameSelector","pattern","operator","check","result","what","_argument","simple","forward","ofType","_context","xml","uniqueCache","outerCache","nodeIndex","start","parent","useCache","lastChild","uniqueID","pseudo","args","setFilters","idx","matched","matcher","unmatched","lang","elemLang","hash","location","activeElement","hasFocus","href","tabIndex","checked","selected","selectedIndex","_matchIndexes","radio","checkbox","file","password","image","submit","reset","tokens","combinator","base","skip","checkNonElements","doneName","oldCache","newCache","elementMatcher","matchers","condense","newUnmatched","mapped","setMatcher","postFilter","postFinder","postSelector","temp","preMap","postMap","preexisting","contexts","multipleContexts","matcherIn","matcherOut","matcherFromTokens","checkContext","leadingRelative","implicitRelative","matchContext","matchAnyContext","filters","parseOnly","soFar","preFilters","cached","setMatchers","elementMatchers","bySet","byElement","superMatcher","outermost","matchedCount","setMatched","contextBackup","dirrunsUnique","matcherFromGroupMatchers","token","compiled","_name","defaultValue","unique","isXMLDoc","escapeSelector","until","truncate","is","siblings","rneedsContext","needsContext","rsingleTag","winnow","qualifier","not","self","rootjQuery","root","parseHTML","ready","rparentsprev","guaranteedUnique","children","contents","prev","sibling","has","targets","closest","index","prevAll","add","addBack","parents","parentsUntil","nextAll","nextUntil","prevUntil","contentDocument","content","reverse","rnothtmlwhite","Identity","v","Thrower","ex","adoptValue","resolve","reject","noValue","method","promise","fail","then","Callbacks","_","flag","createOptions","firing","memory","fired","locked","queue","firingIndex","fire","once","stopOnFalse","remove","empty","disable","lock","fireWith","Deferred","func","tuples","state","always","deferred","pipe","fns","newDefer","tuple","returned","progress","notify","onFulfilled","onRejected","onProgress","maxDepth","depth","special","that","mightThrow","TypeError","notifyWith","resolveWith","process","exceptionHook","stackTrace","rejectWith","getStackHook","setTimeout","stateString","when","singleValue","remaining","resolveContexts","resolveValues","primary","updateFunc","rerrorNames","stack","console","warn","message","readyException","readyList","completed","removeEventListener","catch","readyWait","wait","readyState","doScroll","access","chainable","emptyGet","raw","bulk","_key","rmsPrefix","rdashAlpha","fcamelCase","_all","letter","toUpperCase","camelCase","string","acceptData","owner","Data","uid","configurable","set","data","prop","hasData","dataPriv","dataUser","rbrace","rmultiDash","dataAttr","JSON","parse","getData","removeData","_data","_removeData","dequeue","startLength","hooks","_queueHooks","stop","setter","clearQueue","count","defer","pnum","source","rcssNum","cssExpand","isAttached","composed","getRootNode","isHiddenWithinTree","style","display","css","adjustCSS","valueParts","tween","adjusted","scale","maxIterations","currentValue","initial","unit","cssNumber","initialInUnit","defaultDisplayMap","getDefaultDisplay","body","showHide","show","values","hide","toggle","div","rcheckableType","rtagName","rscriptType","createDocumentFragment","checkClone","cloneNode","noCloneChecked","option","wrapMap","thead","col","tr","td","_default","getAll","setGlobalEval","refElements","tbody","tfoot","colgroup","caption","th","optgroup","buildFragment","scripts","selection","ignored","wrap","attached","fragment","nodes","htmlPrefilter","createTextNode","rtypenamespace","returnTrue","returnFalse","expectSync","err","safeActiveElement","on","types","one","origFn","event","off","leverageNative","notAsync","saved","isTrigger","delegateType","stopPropagation","stopImmediatePropagation","preventDefault","trigger","Event","handleObjIn","eventHandle","events","handleObj","handlers","namespaces","origType","elemData","handle","triggered","dispatch","bindType","delegateCount","setup","mappedTypes","origCount","teardown","removeEvent","nativeEvent","handlerQueue","fix","delegateTarget","preDispatch","isPropagationStopped","currentTarget","isImmediatePropagationStopped","rnamespace","postDispatch","matchedHandlers","matchedSelectors","button","addProp","hook","originalEvent","writable","load","noBubble","click","beforeunload","returnValue","props","isDefaultPrevented","defaultPrevented","relatedTarget","timeStamp","now","isSimulated","altKey","bubbles","cancelable","changedTouches","ctrlKey","detail","eventPhase","metaKey","pageX","pageY","shiftKey","view","charCode","keyCode","buttons","clientX","clientY","offsetX","offsetY","pointerId","pointerType","screenX","screenY","targetTouches","toElement","touches","which","focus","blur","mouseenter","mouseleave","pointerenter","pointerleave","orig","related","rnoInnerhtml","rchecked","rcleanScript","manipulationTarget","disableScript","restoreScript","cloneCopyEvent","dest","udataOld","udataCur","fixInput","domManip","collection","hasScripts","iNoClone","valueIsFunction","html","_evalUrl","keepData","cleanData","dataAndEvents","deepDataAndEvents","srcElements","destElements","inPage","detach","append","prepend","insertBefore","before","after","replaceWith","replaceChild","appendTo","prependTo","insertAfter","replaceAll","original","insert","rnumnonpx","getStyles","opener","getComputedStyle","swap","old","rboxStyle","curCSS","computed","width","minWidth","maxWidth","getPropertyValue","pixelBoxStyles","addGetHookIf","conditionFn","hookFn","computeStyleTests","container","cssText","divStyle","pixelPositionVal","reliableMarginLeftVal","roundPixelMeasures","marginLeft","right","pixelBoxStylesVal","boxSizingReliableVal","position","scrollboxSizeVal","offsetWidth","measure","round","parseFloat","reliableTrDimensionsVal","backgroundClip","clearCloneStyle","boxSizingReliable","pixelPosition","reliableMarginLeft","scrollboxSize","reliableTrDimensions","table","trChild","trStyle","height","parseInt","borderTopWidth","borderBottomWidth","offsetHeight","cssPrefixes","emptyStyle","vendorProps","finalPropName","final","cssProps","capName","vendorPropName","rdisplayswap","rcustomProp","cssShow","visibility","cssNormalTransform","letterSpacing","fontWeight","setPositiveNumber","subtract","max","boxModelAdjustment","dimension","box","isBorderBox","styles","computedVal","extra","delta","ceil","getWidthOrHeight","valueIsBorderBox","offsetProp","getClientRects","Tween","easing","cssHooks","opacity","origName","isCustomProp","setProperty","isFinite","getBoundingClientRect","scrollboxSizeBuggy","left","margin","padding","border","prefix","suffix","expand","expanded","parts","propHooks","run","percent","eased","duration","pos","step","fx","scrollTop","scrollLeft","linear","swing","cos","PI","fxNow","inProgress","rfxtypes","rrun","schedule","hidden","requestAnimationFrame","interval","tick","createFxNow","genFx","includeWidth","createTween","animation","Animation","tweeners","properties","stopped","prefilters","currentTime","startTime","tweens","opts","specialEasing","originalProperties","originalOptions","gotoEnd","propFilter","complete","timer","anim","tweener","oldfire","propTween","restoreDisplay","isBox","dataShow","unqueued","overflow","overflowX","overflowY","prefilter","speed","opt","speeds","fadeTo","to","animate","optall","doAnimation","finish","stopQueue","timers","cssFn","slideDown","slideUp","slideToggle","fadeIn","fadeOut","fadeToggle","slow","fast","delay","time","timeout","clearTimeout","checkOn","optSelected","radioValue","boolHook","removeAttr","nType","attrHooks","bool","attrNames","lowercaseName","rfocusable","rclickable","stripAndCollapse","getClass","classesToArray","removeProp","propFix","tabindex","addClass","classes","curValue","clazz","finalValue","removeClass","toggleClass","stateVal","isValidValue","classNames","hasClass","rreturn","valHooks","optionSet","focusin","rfocusMorph","stopPropagationCallback","onlyHandlers","bubbleType","ontype","lastElement","eventPath","parentWindow","simulate","triggerHandler","attaches","rquery","parseXML","parserErrorElem","DOMParser","parseFromString","rbracket","rCRLF","rsubmitterTypes","rsubmittable","buildParams","traditional","param","valueOrFunction","encodeURIComponent","serialize","serializeArray","r20","rhash","rantiCache","rheaders","rnoContent","rprotocol","transports","allTypes","originAnchor","addToPrefiltersOrTransports","structure","dataTypeExpression","dataType","dataTypes","inspectPrefiltersOrTransports","jqXHR","inspected","seekingTransport","inspect","prefilterOrFactory","dataTypeOrTransport","ajaxExtend","flatOptions","ajaxSettings","active","lastModified","etag","url","isLocal","protocol","processData","async","contentType","accepts","json","responseFields","converters","ajaxSetup","settings","ajaxPrefilter","ajaxTransport","ajax","transport","cacheURL","responseHeadersString","responseHeaders","timeoutTimer","urlAnchor","fireGlobals","uncached","callbackContext","globalEventContext","completeDeferred","statusCode","requestHeaders","requestHeadersNames","strAbort","getResponseHeader","getAllResponseHeaders","setRequestHeader","overrideMimeType","mimeType","status","abort","statusText","finalText","crossDomain","host","hasContent","ifModified","headers","beforeSend","success","send","nativeStatusText","responses","isSuccess","response","modified","ct","finalDataType","firstDataType","ajaxHandleResponses","conv2","current","conv","dataFilter","throws","ajaxConvert","getJSON","getScript","wrapAll","firstElementChild","wrapInner","htmlIsFunction","unwrap","visible","xhr","XMLHttpRequest","xhrSuccessStatus","0","1223","xhrSupported","cors","errorCallback","open","username","xhrFields","onload","onerror","onabort","ontimeout","onreadystatechange","responseType","responseText","binary","scriptAttrs","charset","scriptCharset","evt","oldCallbacks","rjsonp","jsonp","jsonpCallback","originalSettings","callbackName","overwritten","responseContainer","jsonProp","createHTMLDocument","implementation","keepScripts","parsed","params","animated","offset","setOffset","curPosition","curLeft","curCSSTop","curTop","curOffset","curCSSLeft","curElem","using","rect","win","pageYOffset","pageXOffset","offsetParent","parentOffset","scrollTo","Height","Width","defaultExtra","funcName","unbind","delegate","undelegate","hover","fnOver","fnOut","proxy","holdReady","hold","parseJSON","isNumeric","isNaN","trim","_jQuery","_$","$","noConflict","require","NAME","EVENT_KEY","JQUERY_NO_CONFLICT","CLOSE","CLOSED","CLICK_DATA_API","ClassName","Alert","element","_classCallCheck","_element","config","$element","alertInstance","close","rootElement","_getRootElement","_triggerCloseEvent","_removeElement","Util","getSelectorFromElement","querySelector","closeEvent","_this","transitionDuration","getTransitionDurationFromElement","TRANSITION_END","_destroyElement","emulateTransitionEnd","_handleDismiss","_jQueryInterface","Constructor","DATA_KEY","Default","keyboard","slide","pause","touch","DefaultType","Direction","SLIDE","SLID","KEYDOWN","MOUSEENTER","MOUSELEAVE","TOUCHSTART","TOUCHMOVE","TOUCHEND","POINTERDOWN","POINTERUP","DRAG_START","LOAD_DATA_API","Selector","PointerType","TOUCH","PEN","Carousel","_items","_interval","_activeElement","_isPaused","_isSliding","touchTimeout","touchStartX","touchDeltaX","_config","_getConfig","_indicatorsElement","_touchSupported","navigator","maxTouchPoints","_pointerEvent","Boolean","PointerEvent","MSPointerEvent","_addEventListeners","_objectSpread","_typeof","action","ride","cycle","slideIndex","_slide","triggerTransitionEnd","clearInterval","setInterval","visibilityState","nextWhenVisible","activeIndex","_getItemIndex","direction","typeCheckConfig","absDeltax","abs","_this2","_keydown","_addTouchEventListeners","_this3","_handleSwipe","classList","move","tagName","isNextDirection","isPrevDirection","lastItemIndex","itemIndex","eventDirectionName","targetIndex","fromIndex","slideEvent","from","indicators","nextIndicator","directionalClassName","orderClassName","_this4","activeElementIndex","nextElement","_getItemByDirection","nextElementIndex","isCycling","_triggerSlideEvent","_setActiveIndicatorElement","slidEvent","reflow","nextElementInterval","defaultInterval","_dataApiClickHandler","carousels","$carousel","SHOW","SHOWN","HIDE","HIDDEN","Dimension","Collapse","_isTransitioning","_triggerArray","toggleList","filterElement","foundElem","_selector","_parent","_getParent","_addAriaAndCollapsedClass","$this","actives","activesData","startEvent","_getDimension","setTransitioning","capitalizedDimension","scrollSize","triggerArrayLength","isTransitioning","isElement","_getTargetFromElement","triggerArray","isOpen","$trigger","$target","backdrop","FOCUSIN","RESIZE","CLICK_DISMISS","KEYDOWN_DISMISS","MOUSEUP_DISMISS","MOUSEDOWN_DISMISS","Modal","_dialog","_backdrop","_isShown","_isBodyOverflowing","_ignoreBackdropClick","_scrollbarWidth","showEvent","_checkScrollbar","_setScrollbar","_adjustDialog","_setEscapeEvent","_setResizeEvent","_showBackdrop","_showElement","hideEvent","transition","_hideModal","forEach","htmlElement","Node","ELEMENT_NODE","_enforceFocus","shownEvent","transitionComplete","_this5","_this6","handleUpdate","_this7","_resetAdjustments","_resetScrollbar","_this8","backdropTransitionDuration","callbackRemove","_removeBackdrop","isModalOverflowing","scrollHeight","clientHeight","paddingLeft","paddingRight","innerWidth","_getScrollbarWidth","_this9","fixedContent","stickyContent","actualPadding","calculatedPadding","actualMargin","marginRight","calculatedMargin","scrollDiv","scrollbarWidth","clientWidth","_this10","ACTIVATE","SCROLL","OffsetMethod","ScrollSpy","_scrollElement","_offsets","_targets","_activeTarget","_scrollHeight","_process","refresh","autoMethod","offsetMethod","offsetBase","_getScrollTop","_getScrollHeight","targetSelector","targetBCR","getUID","innerHeight","maxScroll","_getOffsetHeight","_activate","_clear","queries","$link","scrollSpys","$spy","Tab","previous","listElement","itemSelector","hiddenEvent","_transitionComplete","dropdownChild","dropdownElement","dropdownToggleList","g","Function","spinner","processInclude","isMargiela","dataset","sitebrand","searchParams","URLSearchParams","search","journey","response2","status2","xhr2","webpackPolyfill","deprecate","paths","addToCartValidation","isJilSander","isMarni","customSelect","handleResponse","nonvisualHint","showAriaHint","$quantity","listIsEmpty","modalpid","pid","CustomEvent","icon","linkCart","linkWishlist","dispatchEvent","hideErrorMessage","form","errorContainer","addToCartFromWishlist","globalAddToCartURL","pidInput","quantity","responseData","privateSalesError","isMobile","showErrorMessage","quantityTotal","reload","removeItem","bindAddToCart","wishlistSelectChange","parentForm","btnVal","ariaSelected","checkValidity","product","masterID","targetForm","productTile","tileImage","swipeableImages","large","images","urlLarge","modelFabricColorProductURl","wishlistProductNameForTile","tileBody","price","info","insertAdjacentHTML","price2","variationGroupPrice","variationAttributes","attribute","attributeId","colorsBox","color","HEXColor","backgroudColor","displayValue","ws","attributeSelect","outerHTML","selectable","notavailable","updateDisabledOptions","privateSalesSpan","isPrivateSalesProduct","userCustomerGroupsUrl","checkPrivateSales","isUserAuthenticated","customerGroups","log","addToCartText","notifyAndAddToCart","available","showBackInStockNotification","$container","notifyWhenAvailableHtml","isSelectedSize","isOrderable","populateTile","decreaseWishlistCounter","qty","displayErrorMessage","$elementAppendTo","renderNewPageOfItems","pageNumber","publicView","listUUID","account","scrollPosition","newPageNumber","loadScript","$privateSales","privateSalesCustomerGroups","privateSalesText","privateSalesTextLoggedIn","isCustomerAllowed","productKey","productValue","entries","customerKey","customerValue","loginRemoteContent","bindCartRecommendations","actionPid","addToWishlist","isActiveWishList","$button","shouldValidate","$alertContainer","$wrapperPdp","resetWrapperStyles","dismissalTimeout","$productContainer","optionId","optionVal","wishlistErrorMessage","addToWishListError","addToWishListErrorText","addToWishListErrorMessage","wishlistCountOfItems","innerText","label","removeFromWishlist","$elToAppend","backToAccountLink","products","$elToAppendWL","addAllToCart","addToCartUrl","pidsObj","stringify","currentQty","addAllProductsFromWishList","updateSelectAttr","formElement","payload","fields","feedbackElement","$body","$document","utagExists","utag","refreshCartData","sfcc_urls","refresh_utag_basket","copyResponseData","getParameterByName","paramName","decodeURIComponent","getVariationValue","variation","addProductData","page_type","product_id","utag_data","product_name","product_season","product_newin","product_category","product_color","product_waist","product_length","product_size","product_unit_price","product_old_price","product_sale_price","product_net_price","addCartData","product_quantity","product_shipping_type","order_currency","order_track_id","utagData","newsletterEventTrigger","gender","page_name","store_country","event_name","link","loadMoreProduct","nodeList","arrayValue","mergedArray","concatUtagValues","pageNewsletter","genders","isMultipleGender","footerNewsletter","video","$video","video_title","video_time","track","PLPUpdateData","activePLP","active_plp","PDPUpdateData","activePDP","active_pdp","product_sku","addToCart","page_context_type","backInStock","PDPAddToWishlist","productSetIDs","storeLocatorFind","storeLocatorMyLocation","pmin","pmax","subArray","checkoutStages","stage","page_name_onload","login","register","fastCheckout","cartType","buttonPosition","cart_type","cartModifyModalOpen","cartModifyModalConfirm","cartRemoveProduct","cartMoveToPickup","cartShipItem","cartStoreDialogOpen","cartStoreChanged","helpOrderDetails","createReturnSteps","product_return_type","orderID","URL","updateCustomerAttributes","customerProfileAttributes","updateCartAndWishlist","persist_wishlist","total_with_vat","currency","persist_cart","total_without_vat","setListViewType","viewType","list_view_type","searchOpen","searchTypeKeyword","names","skus","suggestions","productName","searchProductClick","ariaLabel","sku","searchSend","searchResultsPage","Swiper","cssMode","navigation","nextEl","prevEl","pagination","mousewheel","setTabNextFocus","focusParams","firstFocusableEl","containerSelector","firstElementSelector","lastFocusableEl","lastElementSelector","nextToLastElementSelector","linkElements","countries","li","txtValue","continents","charAt","parentElement","accordionItems","showPasswordButtons","formInput","isObject$1","extend$1","ssrDocument","createEvent","createElementNS","importNode","hostname","origin","pathname","getDocument","ssrWindow","userAgent","history","screen","matchMedia","getWindow","Dom7","items","super","__proto__","makeReactive","arrayFlat","res","arrayFilter","toCreate","tempParent","uniqueArray","arrayUnique","Methods","_len","_len2","_key2","_len4","_key4","_len3","_key3","attrName","transform","_len5","_key5","eventType","listener","capture","handleLiveEvent","eventData","dom7EventData","k","handleEvent","dom7LiveListeners","proxyListener","dom7Listeners","_len6","_key6","dom7proxy","_len9","_key9","dataIndex","transitionEnd","dom","fireCallBack","outerWidth","includeMargins","outerHeight","clientTop","clientLeft","scrollY","scrollX","compareWith","child","previousSibling","returnIndex","newChild","tempDiv","nextElementSibling","nextEls","previousElementSibling","prevEls","foundElements","found","nextTick","getTranslate","axis","matrix","curTransform","transformMatrix","curStyle","currentStyle","getComputedStyle$1","WebKitCSSMatrix","webkitTransform","MozTransform","OTransform","MsTransform","msTransform","m41","m42","isObject","isNode","HTMLElement","noExtend","nextSource","keysArray","nextIndex","nextKey","desc","getOwnPropertyDescriptor","__swiper__","setCSSProperty","varName","varValue","animateCSSModeScroll","_ref","swiper","targetPosition","side","startPosition","translate","wrapperEl","scrollSnapType","cancelAnimationFrame","cssModeFrameID","isOutOfBound","getTime","min","easeProgress","currentPosition","deviceCached","browser","getSupport","smoothScroll","DocumentTouch","passiveListener","supportsPassive","gestures","calcSupport","getDevice","overrides","_temp","platform","ua","device","ios","android","screenWidth","screenHeight","ipad","ipod","iphone","windows","macos","os","calcDevice","getBrowser","isSafari","isWebView","calcBrowser","methodName","eventsEmitter","priority","eventsListeners","destroyed","onceHandler","__emitterProxy","eventsAnyListeners","eventHandler","transitionEmit","runCallbacks","previousIndex","emit","onTouchStart","touchEventsData","enabled","animating","preventInteractionOnTransition","loop","loopFix","$targetEl","touchEventsTarget","isTouchEvent","isTouched","isMoved","noSwipingClass","shadowRoot","path","noSwipingSelector","isTargetShadow","noSwiping","__closestFrom","assignedSlot","closestElement","allowClick","swipeHandler","currentX","currentY","startX","startY","edgeSwipeDetection","iOSEdgeSwipeDetection","edgeSwipeThreshold","iOSEdgeSwipeThreshold","assign","allowTouchCallbacks","isScrolling","startMoving","touchStartTime","updateSize","swipeDirection","threshold","allowThresholdMove","focusableElements","shouldPreventDefault","allowTouchMove","touchStartPreventDefault","touchStartForcePreventDefault","isContentEditable","freeMode","onTouchMove","rtlTranslate","rtl","targetTouch","preventedByNestedSwiper","touchReleaseOnEdges","isVertical","maxTranslate","minTranslate","diffX","diffY","sqrt","touchAngle","isHorizontal","atan2","touchMoveStopPropagation","nested","startTranslate","setTransition","$wrapperEl","allowMomentumBounce","grabCursor","allowSlideNext","allowSlidePrev","setGrabCursor","touchRatio","currentTranslate","disableParentSwiper","resistanceRatio","resistance","followFinger","watchSlidesProgress","updateActiveIndex","updateSlidesClasses","updateProgress","setTranslate","onTouchEnd","slidesGrid","touchEndTime","timeDiff","pathTree","composedPath","updateClickedSlide","lastClickTime","currentPos","stopIndex","groupSize","slidesSizesGrid","slidesPerGroupSkip","slidesPerGroup","increment","rewindFirstIndex","rewindLastIndex","rewind","isBeginning","virtual","slides","isEnd","ratio","longSwipesMs","longSwipes","slideTo","longSwipesRatio","shortSwipes","onResize","breakpoints","setBreakpoint","snapGrid","updateSlides","slidesPerView","centeredSlides","autoplay","running","paused","watchOverflow","checkOverflow","onClick","preventClicks","preventClicksPropagation","onScroll","newProgress","previousTranslate","translatesDiff","dummyEventAttached","dummyEventListener","touchEvents","domMethod","swiperMethod","passiveListeners","passive","cancel","updateOnWindowResize","isGridEnabled","grid","rows","defaults","initialSlide","resizeObserver","createElements","autoHeight","setWrapperSize","virtualTranslate","effect","breakpointsBase","spaceBetween","slidesPerGroupAuto","centeredSlidesBounds","slidesOffsetBefore","slidesOffsetAfter","normalizeSlideIndex","centerInsufficientSlides","roundLengths","simulateTouch","uniqueNavElements","slideToClickedSlide","preloadImages","updateOnImagesReady","loopAdditionalSlides","loopedSlides","loopFillGroupWithBlank","loopPreventsSlide","maxBackfaceHiddenSlides","containerModifierClass","slideClass","slideBlankClass","slideActiveClass","slideDuplicateActiveClass","slideVisibleClass","slideDuplicateClass","slideNextClass","slideDuplicateNextClass","slidePrevClass","slideDuplicatePrevClass","wrapperClass","runCallbacksOnInit","_emitClasses","moduleExtendParams","allModulesParams","moduleParamName","moduleParams","auto","prototypes","update","$el","Number","size","getDirectionLabel","getDirectionPropertyValue","swiperSize","wrongRTL","isVirtual","previousSlidesLength","slidesLength","offsetBefore","offsetAfter","previousSnapGridLength","previousSlidesGridLength","slidePosition","prevSlideSize","virtualSize","marginBottom","marginTop","gridEnabled","slideSize","initSlides","shouldResetSlideSize","updateSlide","slideStyles","currentTransform","currentWebKitTransform","boxSizing","floor","swiperSlideSize","updateWrapperSize","newSlidesGrid","slidesGridItem","allSlidesSize","slideSizeValue","maxSnap","snap","allSlidesOffset","snapIndex","addToSnapGrid","addToSlidesGrid","updateSlidesOffset","backFaceHiddenClass","hasClassBackfaceClassAdded","updateAutoHeight","activeSlides","newHeight","getSlideByIndex","visibleSlides","swiperSlideOffset","offsetLeft","offsetTop","updateSlidesProgress","offsetCenter","visibleSlidesIndexes","slideOffset","slideProgress","originalSlideProgress","slideBefore","slideAfter","originalProgress","multiplier","wasBeginning","wasEnd","realIndex","activeSlide","nextSlide","prevSlide","emitSlidesClasses","newActiveIndex","previousRealIndex","previousSnapIndex","initialized","slideFound","clickedSlide","clickedIndex","byController","x","y","translateTo","translateBounds","internal","newTranslate","isH","behavior","onTranslateToWrapperTransitionEnd","transitionStart","indexAsNumber","normalizedTranslate","normalizedGrid","normalizedGridNext","_immediateVirtual","_swiperImmediateVirtual","onSlideToWrapperTransitionEnd","slideToLoop","newIndex","slideNext","perGroup","slidesPerViewDynamic","_clientLeft","slidePrev","normalize","normalizedSnapGrid","prevSnap","prevSnapIndex","prevIndex","lastIndex","slideReset","slideToClosest","currentSnap","slideToIndex","loopCreate","$selector","blankSlidesNum","blankNode","prependSlides","appendSlides","loopDestroy","moving","isLocked","cursor","unsetGrabCursor","attachEvents","detachEvents","breakpoint","getBreakpoint","currentBreakpoint","breakpointParams","originalParams","wasMultiRow","isMultiRow","wasEnabled","emitContainerClasses","fill","directionChanged","needsReLoop","changeDirection","isEnabled","enable","containerEl","currentHeight","points","point","minRatio","substr","wasLocked","lastSlideIndex","lastSlideRightEdge","addClasses","suffixes","resultClasses","prepareClasses","removeClasses","loadImage","imageEl","srcset","sizes","checkForComplete","onReady","Image","imagesLoaded","imagesToLoad","currentSrc","extendedDefaults","swipers","newParams","__modules__","mod","extendParams","swiperParams","passedParams","eventName","onAny","velocity","desktop","touchEventsTouch","touchEventsDesktop","clickTimeout","velocities","cls","slideEl","updates","getSlideClasses","exact","spv","breakLoop","translateValue","translated","newDirection","needUpdate","currentDirection","mounted","getWrapperSelector","getWrapper","wrapper","mount","deleteInstance","cleanStyles","deleteProps","newDefaults","installModule","createElementIfNotDefined","checkProps","classesToSelector","appendSlide","observer","prependSlide","addSlide","activeIndexBuffer","baseLength","slidesBuffer","currentSlide","removeSlide","slidesIndexes","indexToRemove","removeAllSlides","effectInit","overwriteParams","perspective","recreateShadows","getEffectParams","requireUpdateOnVirtual","overwriteParamsResult","_s","slideShadows","effectTarget","effectParams","$slideEl","transformEl","effectVirtualTransitionEnd","allSlides","$transitionEndTarget","eventTriggered","triggerEvents","createShadow","shadowClass","$shadowContainer","$shadowEl","prototypeGroup","protoMethod","use","animationFrame","resizeHandler","orientationChangeHandler","ResizeObserver","newWidth","_ref2","contentBoxSize","contentRect","inlineSize","blockSize","observe","unobserve","observers","attach","MutationObserver","WebkitMutationObserver","mutations","observerUpdate","childList","characterData","observeParents","observeSlideChildren","containerParents","disconnect","cssModeTimeout","renderSlide","force","addSlidesBefore","addSlidesAfter","previousFrom","previousTo","previousSlidesGrid","previousOffset","slidesAfter","slidesBefore","onRendered","lazy","renderExternal","slidesToRender","renderExternalUpdate","prependIndexes","appendIndexes","numberOfNewSlides","cachedIndex","$cachedEl","cachedElIndex","kc","pageUpDown","isPageUp","isPageDown","isArrowLeft","isArrowRight","isArrowUp","isArrowDown","onlyInViewport","inView","swiperWidth","swiperHeight","windowWidth","windowHeight","swiperOffset","swiperCoord","releaseOnEdges","forceToAxis","sensitivity","eventsTarget","thresholdDelta","thresholdTime","lastEventBeforeSnap","lastScrollTime","recentWheelEvents","handleMouseEnter","mouseEntered","handleMouseLeave","animateSlider","newEvent","rtlFactor","sX","sY","pX","pY","wheelDelta","wheelDeltaY","wheelDeltaX","HORIZONTAL_AXIS","deltaY","deltaX","deltaMode","spinX","spinY","pixelX","pixelY","positions","sign","ignoreWheelEvents","sticky","prevEvent","firstEvent","snapToThreshold","autoplayDisableOnInteraction","releaseScroll","getEl","toggleEl","disabledClass","lockClass","$nextEl","$prevEl","onPrevClick","onNextClick","destroy","hideOnClick","hiddenClass","targetEl","clickable","isHidden","pfx","bulletSize","bulletElement","renderBullet","renderProgressbar","renderFraction","renderCustom","progressbarOpposite","dynamicBullets","dynamicMainBullets","formatFractionCurrent","number","formatFractionTotal","bulletClass","bulletActiveClass","modifierClass","currentClass","totalClass","progressbarFillClass","progressbarOppositeClass","clickableClass","horizontalClass","verticalClass","bullets","dynamicBulletIndex","isPaginationDisabled","setSideBullets","$bulletEl","total","paginationType","firstIndex","midIndex","bullet","$bullet","bulletIndex","$firstDisplayedBullet","$lastDisplayedBullet","dynamicBulletsLength","bulletsOffset","progressbarDirection","scaleX","scaleY","render","paginationHTML","numberOfBullets","dragStartPos","dragSize","trackSize","divider","dragTimeout","scrollbar","$dragEl","newSize","newPos","getPointerPosition","setDragPosition","positionRatio","onDragStart","onDragMove","onDragEnd","snapOnRelease","activeListener","eventMethod","$swiperEl","dragClass","dragEl","draggable","parallax","setTransform","currentOpacity","currentScale","_swiper","parallaxEl","$parallaxEl","parallaxDuration","zoom","maxRatio","containerClass","zoomedSlideClass","gesturesEnabled","fakeGestureTouched","fakeGestureMoved","isScaling","gesture","slideWidth","slideHeight","$imageEl","$imageWrapEl","minX","minY","maxX","maxY","touchesStart","touchesCurrent","prevPositionX","prevPositionY","prevTime","getDistanceBetweenTouches","x1","y1","x2","y2","onGestureStart","scaleStart","onGestureChange","scaleMove","onGestureEnd","scaledWidth","scaledHeight","onTransitionEnd","zoomIn","touchX","touchY","translateX","translateY","imageWidth","imageHeight","translateMinX","translateMinY","translateMaxX","translateMaxY","touchAction","zoomOut","zoomToggle","getListeners","activeListenerWithCapture","getSlideSelector","toggleGestures","slideSelector","enableGestures","disableGestures","momentumDurationX","momentumDurationY","momentumDistanceX","newPositionX","momentumDistanceY","newPositionY","momentumDuration","in","out","checkInView","loadPrevNext","loadPrevNextAmount","loadOnTransitionStart","scrollingElement","elementClass","loadingClass","loadedClass","preloaderClass","scrollHandlerAttached","initialImageLoaded","loadInSlide","loadInDuplicate","$images","background","$pictureEl","sourceEl","$source","slideOriginalIndex","slideExist","amount","maxIndex","minIndex","checkInViewOnLoad","$scrollElement","scrollElementWidth","scrollElementHeight","LinearSpline","binarySearch","guess","i1","i3","interpolate","removeSpline","controller","control","spline","inverse","by","_t","controlled","controlledTranslate","setControlledTranslate","getInterpolateFunction","setControlledTransition","a11y","notificationClass","prevSlideMessage","nextSlideMessage","firstSlideMessage","lastSlideMessage","paginationBulletMessage","slideLabelMessage","containerMessage","containerRoleDescriptionMessage","itemRoleDescriptionMessage","slideRole","liveRegion","notification","makeElFocusable","makeElNotFocusable","addElRole","role","addElRoleDescription","description","addElLabel","disableEl","enableEl","onEnterOrSpaceKey","hasPagination","hasClickablePagination","initNavEl","wrapperId","controls","addElControls","handleFocus","includes","isActive","isVisible","$containerEl","repeat","live","addElLive","updateNavigation","bulletEl","updatePagination","replaceState","slugify","getPathValues","urlOverride","pathArray","part","setHistory","currentState","pushState","scrollToSlide","setHistoryPopState","hashNavigation","watchState","onHashChange","newHash","setHash","$activeSlideEl","autoplayResult","reverseDirection","stopOnLastSlide","waitForTransition","onVisibilityChange","onMouseEnter","disableOnInteraction","onMouseLeave","pauseOnMouseEnter","thumbs","multipleActiveThumbs","autoScrollOffset","slideThumbActiveClass","thumbsContainerClass","swiperCreated","onThumbClick","thumbsSwiper","currentIndex","thumbsParams","SwiperClass","thumbsSwiperParams","useOffset","newThumbsIndex","currentThumbsIndex","prevThumbsIndex","nextThumbsIndex","thumbsToActivate","thumbActiveClass","momentum","momentumRatio","momentumBounce","momentumBounceRatio","momentumVelocityRatio","minimumVelocity","lastMoveEvent","velocityEvent","distance","momentumDistance","newPosition","afterBouncePosition","doBounce","bounceAmount","needsLoopFix","moveDistance","currentSlideSize","slidesNumberEvenToRows","slidesPerRow","numFullColumns","newSlideOrderIndex","column","row","groupIndex","slideIndexInGroup","columnsInGroup","order","fadeEffect","crossFade","tx","ty","slideOpacity","cubeEffect","shadow","shadowOffset","shadowScale","createSlideShadows","shadowBefore","shadowAfter","$cubeShadowEl","wrapperRotate","slideAngle","tz","shadowAngle","sin","scale1","scale2","zFactor","flipEffect","limitRotation","rotateY","rotateX","zIndex","coverflowEffect","rotate","stretch","modifier","center","centerOffset","offsetMultiplier","translateZ","slideTransform","$shadowBeforeEl","$shadowAfterEl","creativeEffect","limitProgress","shadowPerProgress","progressMultiplier","getTranslateValue","isCenteredSlides","custom","translateString","rotateString","scaleString","opacityString","shadowOpacity","cardsEffect","tX","tY","tZ","tXAdd","isSwipeToNext","isSwipeToPrev","subProgress","prevY","header","mainContentSpacer","initialHeight","vhInitial","vh","videoAmpObserver","IntersectionObserver","entry","isIntersecting","shaka","play","videoElement","pageDesignerMobileVideoCheck","isIOS","initShaka","observeUninitializedVideos","vt","einsteinObserver","mutationList","mutation","videoContainer","mobileVideo","muted","player","Player","onError","configure","mediaSource","forceTransmux","streaming","preferNativeHls","videoInit","videoElements","polyfill","installAll","isBrowserSupported","rs","subtree","idDesktop","showOrHide","op","fastCheckoutUrl","fastCheckoutData","fastPayment","isMiniCartOpen","selects","keyboardAccessibility","prevent","firstLevel","thirdLevel","parentcategoryselector","toClose","menuSelectorPrevious","previousparent","menuSelector","selectorParent","parentcategory","categoryId","rootMargin","elemClass","targetClass","MouseEvent","parentID","keydown","40","menuItem","38","27","FUNC_ERROR_TEXT","PLACEHOLDER","wrapFlags","argsTag","arrayTag","boolTag","dateTag","errorTag","funcTag","genTag","mapTag","numberTag","objectTag","regexpTag","setTag","stringTag","symbolTag","weakMapTag","arrayBufferTag","dataViewTag","float32Tag","float64Tag","int8Tag","int16Tag","int32Tag","uint8Tag","uint16Tag","uint32Tag","reEmptyStringLeading","reEmptyStringMiddle","reEmptyStringTrailing","reEscapedHtml","reUnescapedHtml","reHasEscapedHtml","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","rsComboRange","rsComboMarksRange","rsBreakRange","rsMathOpRange","rsAstral","rsBreak","rsCombo","rsDigits","rsDingbat","rsLower","rsMisc","rsFitz","rsNonAstral","rsRegional","rsSurrPair","rsUpper","rsMiscLower","rsMiscUpper","reOptMod","rsSeq","rsEmoji","rsSymbol","reApos","reComboMark","reUnicode","reUnicodeWord","reHasUnicode","reHasUnicodeWord","contextProps","templateCounter","typedArrayTags","cloneableTags","stringEscapes","freeParseFloat","freeParseInt","freeGlobal","freeSelf","freeExports","freeModule","moduleExports","freeProcess","nodeUtil","binding","nodeIsArrayBuffer","isArrayBuffer","nodeIsDate","isDate","nodeIsMap","isMap","nodeIsRegExp","isRegExp","nodeIsSet","isSet","nodeIsTypedArray","isTypedArray","thisArg","arrayAggregator","iteratee","accumulator","arrayEach","arrayEachRight","arrayEvery","predicate","resIndex","arrayIncludes","baseIndexOf","arrayIncludesWith","comparator","arrayMap","arrayPush","arrayReduce","initAccum","arrayReduceRight","arraySome","asciiSize","baseProperty","baseFindKey","eachFunc","baseFindIndex","fromRight","strictIndexOf","baseIsNaN","baseIndexOfWith","baseMean","baseSum","basePropertyOf","baseReduce","baseTimes","baseTrim","trimmedEndIndex","baseUnary","baseValues","cacheHas","charsStartIndex","strSymbols","chrSymbols","charsEndIndex","countHolders","placeholder","deburrLetter","escapeHtmlChar","escapeStringChar","chr","hasUnicode","mapToArray","overArg","replaceHolders","setToArray","setToPairs","stringSize","unicodeSize","stringToArray","unicodeToArray","asciiToArray","unescapeHtmlChar","runInContext","pick","arrayProto","funcProto","objectProto","coreJsData","funcToString","idCounter","maskSrcKey","IE_PROTO","nativeObjectToString","objectCtorString","oldDash","reIsNative","Buffer","Uint8Array","allocUnsafe","getPrototype","objectCreate","propertyIsEnumerable","spreadableSymbol","isConcatSpreadable","symIterator","symToStringTag","getNative","ctxClearTimeout","ctxNow","ctxSetTimeout","nativeCeil","nativeFloor","nativeGetSymbols","getOwnPropertySymbols","nativeIsBuffer","isBuffer","nativeIsFinite","nativeJoin","nativeKeys","nativeMax","nativeMin","nativeNow","nativeParseInt","nativeRandom","nativeReverse","DataView","Map","Promise","Set","WeakMap","nativeCreate","metaMap","realNames","dataViewCtorString","toSource","mapCtorString","promiseCtorString","setCtorString","weakMapCtorString","symbolProto","symbolValueOf","valueOf","symbolToString","lodash","isObjectLike","LazyWrapper","LodashWrapper","wrapperClone","baseCreate","baseLodash","chainAll","__wrapped__","__actions__","__chain__","__index__","__values__","__dir__","__filtered__","__iteratees__","__takeCount__","__views__","Hash","clear","ListCache","MapCache","SetCache","__data__","Stack","arrayLikeKeys","inherited","isArr","isArg","isArguments","isBuff","isType","skipIndexes","isIndex","arraySample","baseRandom","arraySampleSize","shuffleSelf","copyArray","baseClamp","arrayShuffle","assignMergeValue","baseAssignValue","assignValue","objValue","assocIndexOf","baseAggregator","baseEach","baseAssign","copyObject","baseAt","lower","upper","baseClone","bitmask","customizer","isDeep","isFlat","isFull","initCloneArray","getTag","isFunc","cloneBuffer","initCloneObject","getSymbolsIn","copySymbolsIn","keysIn","baseAssignIn","getSymbols","copySymbols","cloneArrayBuffer","dataView","buffer","byteOffset","byteLength","cloneDataView","cloneTypedArray","regexp","cloneRegExp","symbol","initCloneByTag","stacked","subValue","getAllKeysIn","getAllKeys","baseConformsTo","baseDelay","baseDifference","isCommon","valuesLength","outer","valuesIndex","templateSettings","getMapData","pairs","LARGE_ARRAY_SIZE","createBaseEach","baseForOwn","baseEachRight","baseForOwnRight","baseEvery","baseExtremum","isSymbol","baseFilter","baseFlatten","isStrict","isFlattenable","baseFor","createBaseFor","baseForRight","baseFunctions","baseGet","castPath","toKey","baseGetAllKeys","keysFunc","symbolsFunc","baseGetTag","isOwn","unmasked","getRawTag","objectToString","baseGt","other","baseHas","baseHasIn","baseIntersection","arrays","othLength","othIndex","caches","maxLength","Infinity","seen","baseInvoke","baseIsArguments","baseIsEqual","equalFunc","objIsArr","othIsArr","objTag","othTag","objIsObj","othIsObj","isSameTag","equalArrays","convert","isPartial","equalByTag","objIsWrapped","othIsWrapped","objUnwrapped","othUnwrapped","objProps","objLength","objStacked","othStacked","skipCtor","othValue","compared","objCtor","othCtor","equalObjects","baseIsEqualDeep","baseIsMatch","matchData","noCustomizer","srcValue","COMPARE_PARTIAL_FLAG","baseIsNative","baseIteratee","identity","baseMatchesProperty","baseMatches","baseKeys","isPrototype","baseKeysIn","nativeKeysIn","isProto","baseLt","baseMap","getMatchData","matchesStrictComparable","isKey","isStrictComparable","hasIn","baseMerge","srcIndex","mergeFunc","safeGet","newValue","isTyped","isArrayLikeObject","toPlainObject","baseMergeDeep","baseNth","baseOrderBy","iteratees","orders","getIteratee","comparer","baseSortBy","objCriteria","criteria","othCriteria","ordersLength","compareAscending","compareMultiple","basePickBy","baseSet","basePullAll","basePullAt","indexes","baseUnset","baseRepeat","baseRest","setToString","overRest","baseSample","baseSampleSize","baseSetData","baseSetToString","constant","baseShuffle","baseSlice","baseSome","baseSortedIndex","retHighest","low","MAX_ARRAY_LENGTH","mid","baseSortedIndexBy","valIsNaN","valIsNull","valIsSymbol","valIsUndefined","othIsDefined","othIsNull","othIsReflexive","othIsSymbol","setLow","baseSortedUniq","baseToNumber","baseToString","baseUniq","createSet","seenIndex","baseUpdate","updater","baseWhile","isDrop","baseWrapperValue","actions","baseXor","baseZipObject","assignFunc","valsLength","castArrayLikeObject","castFunction","stringToPath","castRest","castSlice","arrayBuffer","typedArray","valIsDefined","valIsReflexive","composeArgs","partials","holders","isCurried","argsIndex","argsLength","holdersLength","leftIndex","leftLength","rangeLength","isUncurried","composeArgsRight","holdersIndex","rightIndex","rightLength","isNew","createAggregator","initializer","createAssigner","assigner","sources","guard","isIterateeCall","iterable","createCaseFirst","trailing","createCompounder","words","deburr","createCtor","thisBinding","createFind","findIndexFunc","createFlow","flatRest","funcs","prereq","thru","getFuncName","isLaziable","plant","createHybrid","partialsRight","holdersRight","argPos","ary","arity","isAry","isBind","isBindKey","isFlip","getHolder","holdersCount","newHolders","createRecurry","reorder","createInverter","toIteratee","baseInverter","createMathOperation","createOver","arrayFunc","createPadding","chars","charsLength","createRange","toFinite","baseRange","createRelationalOperation","toNumber","wrapFunc","isCurry","newData","setData","setWrapToString","createRound","precision","toInteger","pair","createToPairs","baseToPairs","createWrap","srcBitmask","newBitmask","isCombo","mergeData","createCurry","createPartial","createBind","customDefaultsAssignIn","customDefaultsMerge","customOmitClone","arrLength","arrStacked","arrValue","flatten","otherFunc","getValue","stubArray","hasPath","hasFunc","isLength","ArrayBuffer","ctorString","isMaskable","stubFalse","otherArgs","oldArray","shortOut","reference","details","insertWrapDetails","updateWrapDetails","getWrapDetails","lastCalled","stamp","rand","memoize","memoizeCapped","quote","subString","difference","differenceBy","differenceWith","findIndex","findLastIndex","intersection","intersectionBy","intersectionWith","pull","pullAll","pullAt","union","unionBy","unionWith","unzip","group","unzipWith","without","xor","xorBy","xorWith","zip","zipWith","chain","interceptor","wrapperAt","countBy","findLast","forEachRight","groupBy","invokeMap","keyBy","partition","sortBy","bindKey","WRAP_BIND_FLAG","debounce","lastArgs","lastThis","maxWait","timerId","lastCallTime","lastInvokeTime","leading","maxing","invokeFunc","leadingEdge","timerExpired","shouldInvoke","timeSinceLastCall","trailingEdge","timeWaiting","remainingWait","debounced","isInvoking","flush","resolver","memoized","Cache","negate","overArgs","transforms","funcsLength","partial","partialRight","rearg","gt","gte","isError","isInteger","isNumber","isString","lt","lte","iteratorToArray","remainder","toLength","isBinary","assignIn","assignInWith","assignWith","at","propsIndex","propsLength","defaultsDeep","mergeWith","invertBy","invoke","omit","CLONE_DEEP_FLAG","basePick","pickBy","toPairs","toPairsIn","word","capitalize","upperFirst","kebabCase","lowerCase","lowerFirst","snakeCase","startCase","upperCase","hasUnicodeWord","unicodeWords","asciiWords","attempt","bindAll","methodNames","flow","flowRight","methodOf","mixin","over","overEvery","overSome","basePropertyDeep","range","rangeRight","augend","addend","divide","dividend","divisor","multiply","multiplicand","minuend","subtrahend","castArray","chunk","compact","cond","conforms","baseConforms","curry","curryRight","drop","dropRight","dropRightWhile","dropWhile","baseFill","flatMap","flatMapDeep","flatMapDepth","flattenDeep","flattenDepth","flip","fromPairs","functions","functionsIn","mapKeys","mapValues","matchesProperty","nthArg","omitBy","orderBy","propertyOf","pullAllBy","pullAllWith","rest","sampleSize","setWith","shuffle","sortedUniq","sortedUniqBy","separator","limit","spread","tail","take","takeRight","takeRightWhile","takeWhile","tap","throttle","toPath","isArrLike","unary","uniq","uniqBy","uniqWith","unset","updateWith","valuesIn","zipObject","zipObjectDeep","entriesIn","extendWith","clamp","cloneDeep","cloneDeepWith","cloneWith","conformsTo","defaultTo","endsWith","escapeRegExp","every","findKey","findLastKey","forIn","forInRight","forOwn","forOwnRight","inRange","baseInRange","isBoolean","isEmpty","isEqual","isEqualWith","isMatch","isMatchWith","isNative","isNil","isNull","isSafeInteger","isUndefined","isWeakMap","isWeakSet","lastIndexOf","strictLastIndexOf","maxBy","mean","meanBy","minBy","stubObject","stubString","stubTrue","nth","pad","strLength","padEnd","padStart","radix","floating","reduce","reduceRight","sample","some","sortedIndex","sortedIndexBy","sortedIndexOf","sortedLastIndex","sortedLastIndexBy","sortedLastIndexOf","startsWith","sum","sumBy","template","isEscaping","isEvaluating","imports","importsKeys","importsValues","reDelimiters","evaluate","sourceURL","escapeValue","interpolateValue","esTemplateValue","evaluateValue","variable","times","toLower","toSafeInteger","toUpper","trimEnd","trimStart","omission","substring","newEnd","unescape","uniqueId","eachRight","VERSION","isFilter","takeName","dropName","checkIteratee","isTaker","lodashFunc","retUnwrapped","isLazy","useLazy","isHybrid","isUnwrapped","onlyLazy","chainName","isRight","getView","iterLength","takeCount","iterIndex","commit","wrapped","toJSON","formCleared","triggerEdgeValidation","scrollToError","$form","validateReCaptcha","$response","valid","validateForm","validity","clearFormErrors","attachNoBubbleEvents","attachTimeout","setCustomValidity","fieldMessages","formValidationMessages","validationMessage","clearFormFieldErrors","noBubbleEvents","additionalMessagesStr","additionalMessages","$formMessages","buttonClick","focusOut","cleanString","onChange","handleDateChange","scrollOnError","updatePostalCodePattern","postalCodeElementID","$postalCode","postalCodeRegexp","be","bg","dk","gr","hu","lv","lu","nl","no","pl","pt","ro","ru","sk","si","es","se","gb","us","ca","cz","countryCode","reCaptchaOnChange","reAttachNoBubbleEvents","focusHelper","getPidValue","getQuantitySelector","quantitySelected","quantitySelectedModal","quantitySelectedPDP","getQuantitySelected","handleVariantResponse","isVaraint","isChoiceOfBonusProducts","msgs","attrsWithSwatches","attrValue","$attrValue","$swatchButton","assistiveSelectedText","processSwatchValues","$attr","resetUrl","processNonSwatchValues","updateAttrs","resources","productType","readyToOrder","imgs","carousel","carouselId","alt","title","createCarousel","promotionsHtml","availabilityValue","availabilityMessages","availability","messages","info_selectforstock","updateAvailability","attributeGroup","ID","getAttributesHtml","selectedValueUrl","optionsHtml","updateOptions","quantities","updateQuantities","parseHtml","$html","footer","chooseBonusProducts","bonusUrl","bonusChoiceRuleBased","showProductsUrlRuleBased","showProductsUrlListBased","htmlString","maxBonusItems","uuid","pliUUID","pageSize","labels","selectprods","parsedHtml","renderedTemplate","enterDialogMessage","closeButtonText","modal","getOptions","$elOption","urlValue","selectedValueId","miniCartReportingUrl","methods","editBonusProducts","focusChooseBonusProductModal","onClosingChooseBonusProductModal","trapChooseBonusProductModalFocus","colorAttribute","selectAttribute","setPids","childProducts","messageType","newBonusDiscountLineItem","handlePostCartAdd","reportingURL","selectBonusProduct","$choiceOfBonusProduct","maxPids","submittedQty","totalQty","optionID","valueId","selectedBonusProductHtml","removeBonusProduct","$selected","enableBonusProductSelection","showMoreBonusProducts","addBonusProductsToCart","$readyToOrderBonusProducts","queryString","pidsObject","bonusProducts","qtyOption","productId","errorMessage","msgSuccess","transitionEndEmulator","called","hrefAttr","transitionDelay","floatTransitionDuration","floatTransitionDelay","supportsTransitionEnd","componentName","configTypes","expectedTypes","valueType","findShadowRoot","attachShadow","ShadowRoot","$attributes","invalidAttributesSelect","isNewPDP","isPrivateSales","isLogged","availableAttributes","optionSelected","formValidation","createErrorNotification","divId","journeyMsg","redirectUrl","responseJSON","guestlogin","resetPassword","resetPasswordAjax","grecaptcha","execute","clearResetForm","changePassword","bodyMeasurementSwitchButtons","productMeasurementSwitchButtons","addRemoveTbodyLightedCellClass","tbodyHighLightedCells","act","cell","hideShowUnits","sizeUnitToggler","muTogglers","toggler","ref","thisItem","lengthValue","lenghtSelect","initUnitSizeChangeBehaviour","unitSizeInputs","toggleActiveButton","toggleButtonClick","btn","selectedUnitMeasure","selectedFitGuideSection","isBodyMeasurementSection","isProductMeasurementSection","cms","ins","sizeChart","layerBody","triggerButton","enhancedMeasuringGuide","updateFitGuideUnit","sizeMeasures","updateFitGuideSize","openFitGuide","sizeConversionAccordion","bodyMeasuresAccordion","productMeasuresAccordion","productCategorySizechart","genderSizeConversionAccordion","isDynamicFitguideElement","sizeListImageUrl","sizeListOptions","tableDetails","selectedSizePDP","fitGuideContentAsset","productCategorySizeChartContentAsset","genderlessGuideContentAsset","bodyMeasurementsData","bodyMeasurementContent","bodyMeasurement","changeUnitMeasureLabel","measurementsDescriptionLabel","headings","buildTableHeader","convertedMeasurements","cm","buildSingleRowContent","buildTableBody","bodyMeasurementTemplate","fitGuide","productMeasureInput","currentRow","currentRowHeight","alert","include","utils","videoUtils","currentPage","chatbotEntryPoint","chatbotEntryPointBalloon","endpoint","getSuggestionsWrapper","handleContainerSize","heightMobile","menuWrapper","leftContainerElement","menu","leftContainer","suggestionsWrapper","heightMobileNoResults","maxHeight","paddingBottom","processResponse","$suggestionsWrapper","suggestionsList","getSuggestions","gcat","handleArrow","debounceSuggestions","country","linkText","handleEnter","setDisabledElement","selectElement","customOptions","specialChars","tmpCustomOption","clientSideValidation","showOnModal","post","email","updateForm","notifyWhenAvailablePopUpHtml","errorHtml","keyFunctions","preFunction","returnedScope"],"mappings":"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","file":"app_project_margiela/cartridge/static/default/js/main.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 537);\n","/*!\n * jQuery JavaScript Library v3.6.0\n * https://jquery.com/\n *\n * Includes Sizzle.js\n * https://sizzlejs.com/\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license\n * https://jquery.org/license\n *\n * Date: 2021-03-02T17:08Z\n */\n( function( global, factory ) {\n\n\t\"use strict\";\n\n\tif ( typeof module === \"object\" && typeof module.exports === \"object\" ) {\n\n\t\t// For CommonJS and CommonJS-like environments where a proper `window`\n\t\t// is present, execute the factory and get jQuery.\n\t\t// For environments that do not have a `window` with a `document`\n\t\t// (such as Node.js), expose a factory as module.exports.\n\t\t// This accentuates the need for the creation of a real `window`.\n\t\t// e.g. var jQuery = require(\"jquery\")(window);\n\t\t// See ticket #14549 for more info.\n\t\tmodule.exports = global.document ?\n\t\t\tfactory( global, true ) :\n\t\t\tfunction( w ) {\n\t\t\t\tif ( !w.document ) {\n\t\t\t\t\tthrow new Error( \"jQuery requires a window with a document\" );\n\t\t\t\t}\n\t\t\t\treturn factory( w );\n\t\t\t};\n\t} else {\n\t\tfactory( global );\n\t}\n\n// Pass this if window is not defined yet\n} )( typeof window !== \"undefined\" ? window : this, function( window, noGlobal ) {\n\n// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1\n// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode\n// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common\n// enough that all such attempts are guarded in a try block.\n\"use strict\";\n\nvar arr = [];\n\nvar getProto = Object.getPrototypeOf;\n\nvar slice = arr.slice;\n\nvar flat = arr.flat ? function( array ) {\n\treturn arr.flat.call( array );\n} : function( array ) {\n\treturn arr.concat.apply( [], array );\n};\n\n\nvar push = arr.push;\n\nvar indexOf = arr.indexOf;\n\nvar class2type = {};\n\nvar toString = class2type.toString;\n\nvar hasOwn = class2type.hasOwnProperty;\n\nvar fnToString = hasOwn.toString;\n\nvar ObjectFunctionString = fnToString.call( Object );\n\nvar support = {};\n\nvar isFunction = function isFunction( obj ) {\n\n\t\t// Support: Chrome <=57, Firefox <=52\n\t\t// In some browsers, typeof returns \"function\" for HTML <object> elements\n\t\t// (i.e., `typeof document.createElement( \"object\" ) === \"function\"`).\n\t\t// We don't want to classify *any* DOM node as a function.\n\t\t// Support: QtWeb <=3.8.5, WebKit <=534.34, wkhtmltopdf tool <=0.12.5\n\t\t// Plus for old WebKit, typeof returns \"function\" for HTML collections\n\t\t// (e.g., `typeof document.getElementsByTagName(\"div\") === \"function\"`). (gh-4756)\n\t\treturn typeof obj === \"function\" && typeof obj.nodeType !== \"number\" &&\n\t\t\ttypeof obj.item !== \"function\";\n\t};\n\n\nvar isWindow = function isWindow( obj ) {\n\t\treturn obj != null && obj === obj.window;\n\t};\n\n\nvar document = window.document;\n\n\n\n\tvar preservedScriptAttributes = {\n\t\ttype: true,\n\t\tsrc: true,\n\t\tnonce: true,\n\t\tnoModule: true\n\t};\n\n\tfunction DOMEval( code, node, doc ) {\n\t\tdoc = doc || document;\n\n\t\tvar i, val,\n\t\t\tscript = doc.createElement( \"script\" );\n\n\t\tscript.text = code;\n\t\tif ( node ) {\n\t\t\tfor ( i in preservedScriptAttributes ) {\n\n\t\t\t\t// Support: Firefox 64+, Edge 18+\n\t\t\t\t// Some browsers don't support the \"nonce\" property on scripts.\n\t\t\t\t// On the other hand, just using `getAttribute` is not enough as\n\t\t\t\t// the `nonce` attribute is reset to an empty string whenever it\n\t\t\t\t// becomes browsing-context connected.\n\t\t\t\t// See https://github.com/whatwg/html/issues/2369\n\t\t\t\t// See https://html.spec.whatwg.org/#nonce-attributes\n\t\t\t\t// The `node.getAttribute` check was added for the sake of\n\t\t\t\t// `jQuery.globalEval` so that it can fake a nonce-containing node\n\t\t\t\t// via an object.\n\t\t\t\tval = node[ i ] || node.getAttribute && node.getAttribute( i );\n\t\t\t\tif ( val ) {\n\t\t\t\t\tscript.setAttribute( i, val );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tdoc.head.appendChild( script ).parentNode.removeChild( script );\n\t}\n\n\nfunction toType( obj ) {\n\tif ( obj == null ) {\n\t\treturn obj + \"\";\n\t}\n\n\t// Support: Android <=2.3 only (functionish RegExp)\n\treturn typeof obj === \"object\" || typeof obj === \"function\" ?\n\t\tclass2type[ toString.call( obj ) ] || \"object\" :\n\t\ttypeof obj;\n}\n/* global Symbol */\n// Defining this global in .eslintrc.json would create a danger of using the global\n// unguarded in another place, it seems safer to define global only for this module\n\n\n\nvar\n\tversion = \"3.6.0\",\n\n\t// Define a local copy of jQuery\n\tjQuery = function( selector, context ) {\n\n\t\t// The jQuery object is actually just the init constructor 'enhanced'\n\t\t// Need init if jQuery is called (just allow error to be thrown if not included)\n\t\treturn new jQuery.fn.init( selector, context );\n\t};\n\njQuery.fn = jQuery.prototype = {\n\n\t// The current version of jQuery being used\n\tjquery: version,\n\n\tconstructor: jQuery,\n\n\t// The default length of a jQuery object is 0\n\tlength: 0,\n\n\ttoArray: function() {\n\t\treturn slice.call( this );\n\t},\n\n\t// Get the Nth element in the matched element set OR\n\t// Get the whole matched element set as a clean array\n\tget: function( num ) {\n\n\t\t// Return all the elements in a clean array\n\t\tif ( num == null ) {\n\t\t\treturn slice.call( this );\n\t\t}\n\n\t\t// Return just the one element from the set\n\t\treturn num < 0 ? this[ num + this.length ] : this[ num ];\n\t},\n\n\t// Take an array of elements and push it onto the stack\n\t// (returning the new matched element set)\n\tpushStack: function( elems ) {\n\n\t\t// Build a new jQuery matched element set\n\t\tvar ret = jQuery.merge( this.constructor(), elems );\n\n\t\t// Add the old object onto the stack (as a reference)\n\t\tret.prevObject = this;\n\n\t\t// Return the newly-formed element set\n\t\treturn ret;\n\t},\n\n\t// Execute a callback for every element in the matched set.\n\teach: function( callback ) {\n\t\treturn jQuery.each( this, callback );\n\t},\n\n\tmap: function( callback ) {\n\t\treturn this.pushStack( jQuery.map( this, function( elem, i ) {\n\t\t\treturn callback.call( elem, i, elem );\n\t\t} ) );\n\t},\n\n\tslice: function() {\n\t\treturn this.pushStack( slice.apply( this, arguments ) );\n\t},\n\n\tfirst: function() {\n\t\treturn this.eq( 0 );\n\t},\n\n\tlast: function() {\n\t\treturn this.eq( -1 );\n\t},\n\n\teven: function() {\n\t\treturn this.pushStack( jQuery.grep( this, function( _elem, i ) {\n\t\t\treturn ( i + 1 ) % 2;\n\t\t} ) );\n\t},\n\n\todd: function() {\n\t\treturn this.pushStack( jQuery.grep( this, function( _elem, i ) {\n\t\t\treturn i % 2;\n\t\t} ) );\n\t},\n\n\teq: function( i ) {\n\t\tvar len = this.length,\n\t\t\tj = +i + ( i < 0 ? len : 0 );\n\t\treturn this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );\n\t},\n\n\tend: function() {\n\t\treturn this.prevObject || this.constructor();\n\t},\n\n\t// For internal use only.\n\t// Behaves like an Array's method, not like a jQuery method.\n\tpush: push,\n\tsort: arr.sort,\n\tsplice: arr.splice\n};\n\njQuery.extend = jQuery.fn.extend = function() {\n\tvar options, name, src, copy, copyIsArray, clone,\n\t\ttarget = arguments[ 0 ] || {},\n\t\ti = 1,\n\t\tlength = arguments.length,\n\t\tdeep = false;\n\n\t// Handle a deep copy situation\n\tif ( typeof target === \"boolean\" ) {\n\t\tdeep = target;\n\n\t\t// Skip the boolean and the target\n\t\ttarget = arguments[ i ] || {};\n\t\ti++;\n\t}\n\n\t// Handle case when target is a string or something (possible in deep copy)\n\tif ( typeof target !== \"object\" && !isFunction( target ) ) {\n\t\ttarget = {};\n\t}\n\n\t// Extend jQuery itself if only one argument is passed\n\tif ( i === length ) {\n\t\ttarget = this;\n\t\ti--;\n\t}\n\n\tfor ( ; i < length; i++ ) {\n\n\t\t// Only deal with non-null/undefined values\n\t\tif ( ( options = arguments[ i ] ) != null ) {\n\n\t\t\t// Extend the base object\n\t\t\tfor ( name in options ) {\n\t\t\t\tcopy = options[ name ];\n\n\t\t\t\t// Prevent Object.prototype pollution\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif ( name === \"__proto__\" || target === copy ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\tif ( deep && copy && ( jQuery.isPlainObject( copy ) ||\n\t\t\t\t\t( copyIsArray = Array.isArray( copy ) ) ) ) {\n\t\t\t\t\tsrc = target[ name ];\n\n\t\t\t\t\t// Ensure proper type for the source value\n\t\t\t\t\tif ( copyIsArray && !Array.isArray( src ) ) {\n\t\t\t\t\t\tclone = [];\n\t\t\t\t\t} else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) {\n\t\t\t\t\t\tclone = {};\n\t\t\t\t\t} else {\n\t\t\t\t\t\tclone = src;\n\t\t\t\t\t}\n\t\t\t\t\tcopyIsArray = false;\n\n\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\ttarget[ name ] = jQuery.extend( deep, clone, copy );\n\n\t\t\t\t// Don't bring in undefined values\n\t\t\t\t} else if ( copy !== undefined ) {\n\t\t\t\t\ttarget[ name ] = copy;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n\njQuery.extend( {\n\n\t// Unique for each copy of jQuery on the page\n\texpando: \"jQuery\" + ( version + Math.random() ).replace( /\\D/g, \"\" ),\n\n\t// Assume jQuery is ready without the ready module\n\tisReady: true,\n\n\terror: function( msg ) {\n\t\tthrow new Error( msg );\n\t},\n\n\tnoop: function() {},\n\n\tisPlainObject: function( obj ) {\n\t\tvar proto, Ctor;\n\n\t\t// Detect obvious negatives\n\t\t// Use toString instead of jQuery.type to catch host objects\n\t\tif ( !obj || toString.call( obj ) !== \"[object Object]\" ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tproto = getProto( obj );\n\n\t\t// Objects with no prototype (e.g., `Object.create( null )`) are plain\n\t\tif ( !proto ) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Objects with prototype are plain iff they were constructed by a global Object function\n\t\tCtor = hasOwn.call( proto, \"constructor\" ) && proto.constructor;\n\t\treturn typeof Ctor === \"function\" && fnToString.call( Ctor ) === ObjectFunctionString;\n\t},\n\n\tisEmptyObject: function( obj ) {\n\t\tvar name;\n\n\t\tfor ( name in obj ) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t},\n\n\t// Evaluates a script in a provided context; falls back to the global one\n\t// if not specified.\n\tglobalEval: function( code, options, doc ) {\n\t\tDOMEval( code, { nonce: options && options.nonce }, doc );\n\t},\n\n\teach: function( obj, callback ) {\n\t\tvar length, i = 0;\n\n\t\tif ( isArrayLike( obj ) ) {\n\t\t\tlength = obj.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tfor ( i in obj ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn obj;\n\t},\n\n\t// results is for internal usage only\n\tmakeArray: function( arr, results ) {\n\t\tvar ret = results || [];\n\n\t\tif ( arr != null ) {\n\t\t\tif ( isArrayLike( Object( arr ) ) ) {\n\t\t\t\tjQuery.merge( ret,\n\t\t\t\t\ttypeof arr === \"string\" ?\n\t\t\t\t\t\t[ arr ] : arr\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tpush.call( ret, arr );\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\tinArray: function( elem, arr, i ) {\n\t\treturn arr == null ? -1 : indexOf.call( arr, elem, i );\n\t},\n\n\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t// push.apply(_, arraylike) throws on ancient WebKit\n\tmerge: function( first, second ) {\n\t\tvar len = +second.length,\n\t\t\tj = 0,\n\t\t\ti = first.length;\n\n\t\tfor ( ; j < len; j++ ) {\n\t\t\tfirst[ i++ ] = second[ j ];\n\t\t}\n\n\t\tfirst.length = i;\n\n\t\treturn first;\n\t},\n\n\tgrep: function( elems, callback, invert ) {\n\t\tvar callbackInverse,\n\t\t\tmatches = [],\n\t\t\ti = 0,\n\t\t\tlength = elems.length,\n\t\t\tcallbackExpect = !invert;\n\n\t\t// Go through the array, only saving the items\n\t\t// that pass the validator function\n\t\tfor ( ; i < length; i++ ) {\n\t\t\tcallbackInverse = !callback( elems[ i ], i );\n\t\t\tif ( callbackInverse !== callbackExpect ) {\n\t\t\t\tmatches.push( elems[ i ] );\n\t\t\t}\n\t\t}\n\n\t\treturn matches;\n\t},\n\n\t// arg is for internal usage only\n\tmap: function( elems, callback, arg ) {\n\t\tvar length, value,\n\t\t\ti = 0,\n\t\t\tret = [];\n\n\t\t// Go through the array, translating each of the items to their new values\n\t\tif ( isArrayLike( elems ) ) {\n\t\t\tlength = elems.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Go through every key on the object,\n\t\t} else {\n\t\t\tfor ( i in elems ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Flatten any nested arrays\n\t\treturn flat( ret );\n\t},\n\n\t// A global GUID counter for objects\n\tguid: 1,\n\n\t// jQuery.support is not used in Core but other projects attach their\n\t// properties to it so it needs to exist.\n\tsupport: support\n} );\n\nif ( typeof Symbol === \"function\" ) {\n\tjQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];\n}\n\n// Populate the class2type map\njQuery.each( \"Boolean Number String Function Array Date RegExp Object Error Symbol\".split( \" \" ),\n\tfunction( _i, name ) {\n\t\tclass2type[ \"[object \" + name + \"]\" ] = name.toLowerCase();\n\t} );\n\nfunction isArrayLike( obj ) {\n\n\t// Support: real iOS 8.2 only (not reproducible in simulator)\n\t// `in` check used to prevent JIT error (gh-2145)\n\t// hasOwn isn't used here due to false negatives\n\t// regarding Nodelist length in IE\n\tvar length = !!obj && \"length\" in obj && obj.length,\n\t\ttype = toType( obj );\n\n\tif ( isFunction( obj ) || isWindow( obj ) ) {\n\t\treturn false;\n\t}\n\n\treturn type === \"array\" || length === 0 ||\n\t\ttypeof length === \"number\" && length > 0 && ( length - 1 ) in obj;\n}\nvar Sizzle =\n/*!\n * Sizzle CSS Selector Engine v2.3.6\n * https://sizzlejs.com/\n *\n * Copyright JS Foundation and other contributors\n * Released under the MIT license\n * https://js.foundation/\n *\n * Date: 2021-02-16\n */\n( function( window ) {\nvar i,\n\tsupport,\n\tExpr,\n\tgetText,\n\tisXML,\n\ttokenize,\n\tcompile,\n\tselect,\n\toutermostContext,\n\tsortInput,\n\thasDuplicate,\n\n\t// Local document vars\n\tsetDocument,\n\tdocument,\n\tdocElem,\n\tdocumentIsHTML,\n\trbuggyQSA,\n\trbuggyMatches,\n\tmatches,\n\tcontains,\n\n\t// Instance-specific data\n\texpando = \"sizzle\" + 1 * new Date(),\n\tpreferredDoc = window.document,\n\tdirruns = 0,\n\tdone = 0,\n\tclassCache = createCache(),\n\ttokenCache = createCache(),\n\tcompilerCache = createCache(),\n\tnonnativeSelectorCache = createCache(),\n\tsortOrder = function( a, b ) {\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t}\n\t\treturn 0;\n\t},\n\n\t// Instance methods\n\thasOwn = ( {} ).hasOwnProperty,\n\tarr = [],\n\tpop = arr.pop,\n\tpushNative = arr.push,\n\tpush = arr.push,\n\tslice = arr.slice,\n\n\t// Use a stripped-down indexOf as it's faster than native\n\t// https://jsperf.com/thor-indexof-vs-for/5\n\tindexOf = function( list, elem ) {\n\t\tvar i = 0,\n\t\t\tlen = list.length;\n\t\tfor ( ; i < len; i++ ) {\n\t\t\tif ( list[ i ] === elem ) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t},\n\n\tbooleans = \"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|\" +\n\t\t\"ismap|loop|multiple|open|readonly|required|scoped\",\n\n\t// Regular expressions\n\n\t// http://www.w3.org/TR/css3-selectors/#whitespace\n\twhitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",\n\n\t// https://www.w3.org/TR/css-syntax-3/#ident-token-diagram\n\tidentifier = \"(?:\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace +\n\t\t\"?|\\\\\\\\[^\\\\r\\\\n\\\\f]|[\\\\w-]|[^\\0-\\\\x7f])+\",\n\n\t// Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors\n\tattributes = \"\\\\[\" + whitespace + \"*(\" + identifier + \")(?:\" + whitespace +\n\n\t\t// Operator (capture 2)\n\t\t\"*([*^$|!~]?=)\" + whitespace +\n\n\t\t// \"Attribute values must be CSS identifiers [capture 5]\n\t\t// or strings [capture 3 or capture 4]\"\n\t\t\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" + identifier + \"))|)\" +\n\t\twhitespace + \"*\\\\]\",\n\n\tpseudos = \":(\" + identifier + \")(?:\\\\((\" +\n\n\t\t// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\n\t\t// 1. quoted (capture 3; capture 4 or capture 5)\n\t\t\"('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|\" +\n\n\t\t// 2. simple (capture 6)\n\t\t\"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes + \")*)|\" +\n\n\t\t// 3. anything else (capture 2)\n\t\t\".*\" +\n\t\t\")\\\\)|)\",\n\n\t// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n\trwhitespace = new RegExp( whitespace + \"+\", \"g\" ),\n\trtrim = new RegExp( \"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" +\n\t\twhitespace + \"+$\", \"g\" ),\n\n\trcomma = new RegExp( \"^\" + whitespace + \"*,\" + whitespace + \"*\" ),\n\trcombinators = new RegExp( \"^\" + whitespace + \"*([>+~]|\" + whitespace + \")\" + whitespace +\n\t\t\"*\" ),\n\trdescend = new RegExp( whitespace + \"|>\" ),\n\n\trpseudo = new RegExp( pseudos ),\n\tridentifier = new RegExp( \"^\" + identifier + \"$\" ),\n\n\tmatchExpr = {\n\t\t\"ID\": new RegExp( \"^#(\" + identifier + \")\" ),\n\t\t\"CLASS\": new RegExp( \"^\\\\.(\" + identifier + \")\" ),\n\t\t\"TAG\": new RegExp( \"^(\" + identifier + \"|[*])\" ),\n\t\t\"ATTR\": new RegExp( \"^\" + attributes ),\n\t\t\"PSEUDO\": new RegExp( \"^\" + pseudos ),\n\t\t\"CHILD\": new RegExp( \"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" +\n\t\t\twhitespace + \"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" +\n\t\t\twhitespace + \"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\" ),\n\t\t\"bool\": new RegExp( \"^(?:\" + booleans + \")$\", \"i\" ),\n\n\t\t// For use in libraries implementing .is()\n\t\t// We use this for POS matching in `select`\n\t\t\"needsContext\": new RegExp( \"^\" + whitespace +\n\t\t\t\"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" + whitespace +\n\t\t\t\"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\" )\n\t},\n\n\trhtml = /HTML$/i,\n\trinputs = /^(?:input|select|textarea|button)$/i,\n\trheader = /^h\\d$/i,\n\n\trnative = /^[^{]+\\{\\s*\\[native \\w/,\n\n\t// Easily-parseable/retrievable ID or TAG or CLASS selectors\n\trquickExpr = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n\n\trsibling = /[+~]/,\n\n\t// CSS escapes\n\t// http://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n\trunescape = new RegExp( \"\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace + \"?|\\\\\\\\([^\\\\r\\\\n\\\\f])\", \"g\" ),\n\tfunescape = function( escape, nonHex ) {\n\t\tvar high = \"0x\" + escape.slice( 1 ) - 0x10000;\n\n\t\treturn nonHex ?\n\n\t\t\t// Strip the backslash prefix from a non-hex escape sequence\n\t\t\tnonHex :\n\n\t\t\t// Replace a hexadecimal escape sequence with the encoded Unicode code point\n\t\t\t// Support: IE <=11+\n\t\t\t// For values outside the Basic Multilingual Plane (BMP), manually construct a\n\t\t\t// surrogate pair\n\t\t\thigh < 0 ?\n\t\t\t\tString.fromCharCode( high + 0x10000 ) :\n\t\t\t\tString.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );\n\t},\n\n\t// CSS string/identifier serialization\n\t// https://drafts.csswg.org/cssom/#common-serializing-idioms\n\trcssescape = /([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\0-\\x1f\\x7f-\\uFFFF\\w-]/g,\n\tfcssescape = function( ch, asCodePoint ) {\n\t\tif ( asCodePoint ) {\n\n\t\t\t// U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER\n\t\t\tif ( ch === \"\\0\" ) {\n\t\t\t\treturn \"\\uFFFD\";\n\t\t\t}\n\n\t\t\t// Control characters and (dependent upon position) numbers get escaped as code points\n\t\t\treturn ch.slice( 0, -1 ) + \"\\\\\" +\n\t\t\t\tch.charCodeAt( ch.length - 1 ).toString( 16 ) + \" \";\n\t\t}\n\n\t\t// Other potentially-special ASCII characters get backslash-escaped\n\t\treturn \"\\\\\" + ch;\n\t},\n\n\t// Used for iframes\n\t// See setDocument()\n\t// Removing the function wrapper causes a \"Permission Denied\"\n\t// error in IE\n\tunloadHandler = function() {\n\t\tsetDocument();\n\t},\n\n\tinDisabledFieldset = addCombinator(\n\t\tfunction( elem ) {\n\t\t\treturn elem.disabled === true && elem.nodeName.toLowerCase() === \"fieldset\";\n\t\t},\n\t\t{ dir: \"parentNode\", next: \"legend\" }\n\t);\n\n// Optimize for push.apply( _, NodeList )\ntry {\n\tpush.apply(\n\t\t( arr = slice.call( preferredDoc.childNodes ) ),\n\t\tpreferredDoc.childNodes\n\t);\n\n\t// Support: Android<4.0\n\t// Detect silently failing push.apply\n\t// eslint-disable-next-line no-unused-expressions\n\tarr[ preferredDoc.childNodes.length ].nodeType;\n} catch ( e ) {\n\tpush = { apply: arr.length ?\n\n\t\t// Leverage slice if possible\n\t\tfunction( target, els ) {\n\t\t\tpushNative.apply( target, slice.call( els ) );\n\t\t} :\n\n\t\t// Support: IE<9\n\t\t// Otherwise append directly\n\t\tfunction( target, els ) {\n\t\t\tvar j = target.length,\n\t\t\t\ti = 0;\n\n\t\t\t// Can't trust NodeList.length\n\t\t\twhile ( ( target[ j++ ] = els[ i++ ] ) ) {}\n\t\t\ttarget.length = j - 1;\n\t\t}\n\t};\n}\n\nfunction Sizzle( selector, context, results, seed ) {\n\tvar m, i, elem, nid, match, groups, newSelector,\n\t\tnewContext = context && context.ownerDocument,\n\n\t\t// nodeType defaults to 9, since context defaults to document\n\t\tnodeType = context ? context.nodeType : 9;\n\n\tresults = results || [];\n\n\t// Return early from calls with invalid selector or context\n\tif ( typeof selector !== \"string\" || !selector ||\n\t\tnodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {\n\n\t\treturn results;\n\t}\n\n\t// Try to shortcut find operations (as opposed to filters) in HTML documents\n\tif ( !seed ) {\n\t\tsetDocument( context );\n\t\tcontext = context || document;\n\n\t\tif ( documentIsHTML ) {\n\n\t\t\t// If the selector is sufficiently simple, try using a \"get*By*\" DOM method\n\t\t\t// (excepting DocumentFragment context, where the methods don't exist)\n\t\t\tif ( nodeType !== 11 && ( match = rquickExpr.exec( selector ) ) ) {\n\n\t\t\t\t// ID selector\n\t\t\t\tif ( ( m = match[ 1 ] ) ) {\n\n\t\t\t\t\t// Document context\n\t\t\t\t\tif ( nodeType === 9 ) {\n\t\t\t\t\t\tif ( ( elem = context.getElementById( m ) ) ) {\n\n\t\t\t\t\t\t\t// Support: IE, Opera, Webkit\n\t\t\t\t\t\t\t// TODO: identify versions\n\t\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\t\tif ( elem.id === m ) {\n\t\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t// Element context\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// Support: IE, Opera, Webkit\n\t\t\t\t\t\t// TODO: identify versions\n\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\tif ( newContext && ( elem = newContext.getElementById( m ) ) &&\n\t\t\t\t\t\t\tcontains( context, elem ) &&\n\t\t\t\t\t\t\telem.id === m ) {\n\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t// Type selector\n\t\t\t\t} else if ( match[ 2 ] ) {\n\t\t\t\t\tpush.apply( results, context.getElementsByTagName( selector ) );\n\t\t\t\t\treturn results;\n\n\t\t\t\t// Class selector\n\t\t\t\t} else if ( ( m = match[ 3 ] ) && support.getElementsByClassName &&\n\t\t\t\t\tcontext.getElementsByClassName ) {\n\n\t\t\t\t\tpush.apply( results, context.getElementsByClassName( m ) );\n\t\t\t\t\treturn results;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Take advantage of querySelectorAll\n\t\t\tif ( support.qsa &&\n\t\t\t\t!nonnativeSelectorCache[ selector + \" \" ] &&\n\t\t\t\t( !rbuggyQSA || !rbuggyQSA.test( selector ) ) &&\n\n\t\t\t\t// Support: IE 8 only\n\t\t\t\t// Exclude object elements\n\t\t\t\t( nodeType !== 1 || context.nodeName.toLowerCase() !== \"object\" ) ) {\n\n\t\t\t\tnewSelector = selector;\n\t\t\t\tnewContext = context;\n\n\t\t\t\t// qSA considers elements outside a scoping root when evaluating child or\n\t\t\t\t// descendant combinators, which is not what we want.\n\t\t\t\t// In such cases, we work around the behavior by prefixing every selector in the\n\t\t\t\t// list with an ID selector referencing the scope context.\n\t\t\t\t// The technique has to be used as well when a leading combinator is used\n\t\t\t\t// as such selectors are not recognized by querySelectorAll.\n\t\t\t\t// Thanks to Andrew Dupont for this technique.\n\t\t\t\tif ( nodeType === 1 &&\n\t\t\t\t\t( rdescend.test( selector ) || rcombinators.test( selector ) ) ) {\n\n\t\t\t\t\t// Expand context for sibling selectors\n\t\t\t\t\tnewContext = rsibling.test( selector ) && testContext( context.parentNode ) ||\n\t\t\t\t\t\tcontext;\n\n\t\t\t\t\t// We can use :scope instead of the ID hack if the browser\n\t\t\t\t\t// supports it & if we're not changing the context.\n\t\t\t\t\tif ( newContext !== context || !support.scope ) {\n\n\t\t\t\t\t\t// Capture the context ID, setting it first if necessary\n\t\t\t\t\t\tif ( ( nid = context.getAttribute( \"id\" ) ) ) {\n\t\t\t\t\t\t\tnid = nid.replace( rcssescape, fcssescape );\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcontext.setAttribute( \"id\", ( nid = expando ) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prefix every selector in the list\n\t\t\t\t\tgroups = tokenize( selector );\n\t\t\t\t\ti = groups.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tgroups[ i ] = ( nid ? \"#\" + nid : \":scope\" ) + \" \" +\n\t\t\t\t\t\t\ttoSelector( groups[ i ] );\n\t\t\t\t\t}\n\t\t\t\t\tnewSelector = groups.join( \",\" );\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tpush.apply( results,\n\t\t\t\t\t\tnewContext.querySelectorAll( newSelector )\n\t\t\t\t\t);\n\t\t\t\t\treturn results;\n\t\t\t\t} catch ( qsaError ) {\n\t\t\t\t\tnonnativeSelectorCache( selector, true );\n\t\t\t\t} finally {\n\t\t\t\t\tif ( nid === expando ) {\n\t\t\t\t\t\tcontext.removeAttribute( \"id\" );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// All others\n\treturn select( selector.replace( rtrim, \"$1\" ), context, results, seed );\n}\n\n/**\n * Create key-value caches of limited size\n * @returns {function(string, object)} Returns the Object data after storing it on itself with\n *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\n *\tdeleting the oldest entry\n */\nfunction createCache() {\n\tvar keys = [];\n\n\tfunction cache( key, value ) {\n\n\t\t// Use (key + \" \") to avoid collision with native prototype properties (see Issue #157)\n\t\tif ( keys.push( key + \" \" ) > Expr.cacheLength ) {\n\n\t\t\t// Only keep the most recent entries\n\t\t\tdelete cache[ keys.shift() ];\n\t\t}\n\t\treturn ( cache[ key + \" \" ] = value );\n\t}\n\treturn cache;\n}\n\n/**\n * Mark a function for special use by Sizzle\n * @param {Function} fn The function to mark\n */\nfunction markFunction( fn ) {\n\tfn[ expando ] = true;\n\treturn fn;\n}\n\n/**\n * Support testing using an element\n * @param {Function} fn Passed the created element and returns a boolean result\n */\nfunction assert( fn ) {\n\tvar el = document.createElement( \"fieldset\" );\n\n\ttry {\n\t\treturn !!fn( el );\n\t} catch ( e ) {\n\t\treturn false;\n\t} finally {\n\n\t\t// Remove from its parent by default\n\t\tif ( el.parentNode ) {\n\t\t\tel.parentNode.removeChild( el );\n\t\t}\n\n\t\t// release memory in IE\n\t\tel = null;\n\t}\n}\n\n/**\n * Adds the same handler for all of the specified attrs\n * @param {String} attrs Pipe-separated list of attributes\n * @param {Function} handler The method that will be applied\n */\nfunction addHandle( attrs, handler ) {\n\tvar arr = attrs.split( \"|\" ),\n\t\ti = arr.length;\n\n\twhile ( i-- ) {\n\t\tExpr.attrHandle[ arr[ i ] ] = handler;\n\t}\n}\n\n/**\n * Checks document order of two siblings\n * @param {Element} a\n * @param {Element} b\n * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b\n */\nfunction siblingCheck( a, b ) {\n\tvar cur = b && a,\n\t\tdiff = cur && a.nodeType === 1 && b.nodeType === 1 &&\n\t\t\ta.sourceIndex - b.sourceIndex;\n\n\t// Use IE sourceIndex if available on both nodes\n\tif ( diff ) {\n\t\treturn diff;\n\t}\n\n\t// Check if b follows a\n\tif ( cur ) {\n\t\twhile ( ( cur = cur.nextSibling ) ) {\n\t\t\tif ( cur === b ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn a ? 1 : -1;\n}\n\n/**\n * Returns a function to use in pseudos for input types\n * @param {String} type\n */\nfunction createInputPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn name === \"input\" && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for buttons\n * @param {String} type\n */\nfunction createButtonPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn ( name === \"input\" || name === \"button\" ) && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for :enabled/:disabled\n * @param {Boolean} disabled true for :disabled; false for :enabled\n */\nfunction createDisabledPseudo( disabled ) {\n\n\t// Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable\n\treturn function( elem ) {\n\n\t\t// Only certain elements can match :enabled or :disabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled\n\t\tif ( \"form\" in elem ) {\n\n\t\t\t// Check for inherited disabledness on relevant non-disabled elements:\n\t\t\t// * listed form-associated elements in a disabled fieldset\n\t\t\t// https://html.spec.whatwg.org/multipage/forms.html#category-listed\n\t\t\t// https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled\n\t\t\t// * option elements in a disabled optgroup\n\t\t\t// https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled\n\t\t\t// All such elements have a \"form\" property.\n\t\t\tif ( elem.parentNode && elem.disabled === false ) {\n\n\t\t\t\t// Option elements defer to a parent optgroup if present\n\t\t\t\tif ( \"label\" in elem ) {\n\t\t\t\t\tif ( \"label\" in elem.parentNode ) {\n\t\t\t\t\t\treturn elem.parentNode.disabled === disabled;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn elem.disabled === disabled;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Support: IE 6 - 11\n\t\t\t\t// Use the isDisabled shortcut property to check for disabled fieldset ancestors\n\t\t\t\treturn elem.isDisabled === disabled ||\n\n\t\t\t\t\t// Where there is no isDisabled, check manually\n\t\t\t\t\t/* jshint -W018 */\n\t\t\t\t\telem.isDisabled !== !disabled &&\n\t\t\t\t\tinDisabledFieldset( elem ) === disabled;\n\t\t\t}\n\n\t\t\treturn elem.disabled === disabled;\n\n\t\t// Try to winnow out elements that can't be disabled before trusting the disabled property.\n\t\t// Some victims get caught in our net (label, legend, menu, track), but it shouldn't\n\t\t// even exist on them, let alone have a boolean value.\n\t\t} else if ( \"label\" in elem ) {\n\t\t\treturn elem.disabled === disabled;\n\t\t}\n\n\t\t// Remaining elements are neither :enabled nor :disabled\n\t\treturn false;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for positionals\n * @param {Function} fn\n */\nfunction createPositionalPseudo( fn ) {\n\treturn markFunction( function( argument ) {\n\t\targument = +argument;\n\t\treturn markFunction( function( seed, matches ) {\n\t\t\tvar j,\n\t\t\t\tmatchIndexes = fn( [], seed.length, argument ),\n\t\t\t\ti = matchIndexes.length;\n\n\t\t\t// Match elements found at the specified indexes\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( seed[ ( j = matchIndexes[ i ] ) ] ) {\n\t\t\t\t\tseed[ j ] = !( matches[ j ] = seed[ j ] );\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t} );\n}\n\n/**\n * Checks a node for validity as a Sizzle context\n * @param {Element|Object=} context\n * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value\n */\nfunction testContext( context ) {\n\treturn context && typeof context.getElementsByTagName !== \"undefined\" && context;\n}\n\n// Expose support vars for convenience\nsupport = Sizzle.support = {};\n\n/**\n * Detects XML nodes\n * @param {Element|Object} elem An element or a document\n * @returns {Boolean} True iff elem is a non-HTML XML node\n */\nisXML = Sizzle.isXML = function( elem ) {\n\tvar namespace = elem && elem.namespaceURI,\n\t\tdocElem = elem && ( elem.ownerDocument || elem ).documentElement;\n\n\t// Support: IE <=8\n\t// Assume HTML when documentElement doesn't yet exist, such as inside loading iframes\n\t// https://bugs.jquery.com/ticket/4833\n\treturn !rhtml.test( namespace || docElem && docElem.nodeName || \"HTML\" );\n};\n\n/**\n * Sets document-related variables once based on the current document\n * @param {Element|Object} [doc] An element or document object to use to set the document\n * @returns {Object} Returns the current document\n */\nsetDocument = Sizzle.setDocument = function( node ) {\n\tvar hasCompare, subWindow,\n\t\tdoc = node ? node.ownerDocument || node : preferredDoc;\n\n\t// Return early if doc is invalid or already selected\n\t// Support: IE 11+, Edge 17 - 18+\n\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( doc == document || doc.nodeType !== 9 || !doc.documentElement ) {\n\t\treturn document;\n\t}\n\n\t// Update global variables\n\tdocument = doc;\n\tdocElem = document.documentElement;\n\tdocumentIsHTML = !isXML( document );\n\n\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t// Accessing iframe documents after unload throws \"permission denied\" errors (jQuery #13936)\n\t// Support: IE 11+, Edge 17 - 18+\n\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( preferredDoc != document &&\n\t\t( subWindow = document.defaultView ) && subWindow.top !== subWindow ) {\n\n\t\t// Support: IE 11, Edge\n\t\tif ( subWindow.addEventListener ) {\n\t\t\tsubWindow.addEventListener( \"unload\", unloadHandler, false );\n\n\t\t// Support: IE 9 - 10 only\n\t\t} else if ( subWindow.attachEvent ) {\n\t\t\tsubWindow.attachEvent( \"onunload\", unloadHandler );\n\t\t}\n\t}\n\n\t// Support: IE 8 - 11+, Edge 12 - 18+, Chrome <=16 - 25 only, Firefox <=3.6 - 31 only,\n\t// Safari 4 - 5 only, Opera <=11.6 - 12.x only\n\t// IE/Edge & older browsers don't support the :scope pseudo-class.\n\t// Support: Safari 6.0 only\n\t// Safari 6.0 supports :scope but it's an alias of :root there.\n\tsupport.scope = assert( function( el ) {\n\t\tdocElem.appendChild( el ).appendChild( document.createElement( \"div\" ) );\n\t\treturn typeof el.querySelectorAll !== \"undefined\" &&\n\t\t\t!el.querySelectorAll( \":scope fieldset div\" ).length;\n\t} );\n\n\t/* Attributes\n\t---------------------------------------------------------------------- */\n\n\t// Support: IE<8\n\t// Verify that getAttribute really returns attributes and not properties\n\t// (excepting IE8 booleans)\n\tsupport.attributes = assert( function( el ) {\n\t\tel.className = \"i\";\n\t\treturn !el.getAttribute( \"className\" );\n\t} );\n\n\t/* getElement(s)By*\n\t---------------------------------------------------------------------- */\n\n\t// Check if getElementsByTagName(\"*\") returns only elements\n\tsupport.getElementsByTagName = assert( function( el ) {\n\t\tel.appendChild( document.createComment( \"\" ) );\n\t\treturn !el.getElementsByTagName( \"*\" ).length;\n\t} );\n\n\t// Support: IE<9\n\tsupport.getElementsByClassName = rnative.test( document.getElementsByClassName );\n\n\t// Support: IE<10\n\t// Check if getElementById returns elements by name\n\t// The broken getElementById methods don't pick up programmatically-set names,\n\t// so use a roundabout getElementsByName test\n\tsupport.getById = assert( function( el ) {\n\t\tdocElem.appendChild( el ).id = expando;\n\t\treturn !document.getElementsByName || !document.getElementsByName( expando ).length;\n\t} );\n\n\t// ID filter and find\n\tif ( support.getById ) {\n\t\tExpr.filter[ \"ID\" ] = function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn elem.getAttribute( \"id\" ) === attrId;\n\t\t\t};\n\t\t};\n\t\tExpr.find[ \"ID\" ] = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar elem = context.getElementById( id );\n\t\t\t\treturn elem ? [ elem ] : [];\n\t\t\t}\n\t\t};\n\t} else {\n\t\tExpr.filter[ \"ID\" ] = function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\tvar node = typeof elem.getAttributeNode !== \"undefined\" &&\n\t\t\t\t\telem.getAttributeNode( \"id\" );\n\t\t\t\treturn node && node.value === attrId;\n\t\t\t};\n\t\t};\n\n\t\t// Support: IE 6 - 7 only\n\t\t// getElementById is not reliable as a find shortcut\n\t\tExpr.find[ \"ID\" ] = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar node, i, elems,\n\t\t\t\t\telem = context.getElementById( id );\n\n\t\t\t\tif ( elem ) {\n\n\t\t\t\t\t// Verify the id attribute\n\t\t\t\t\tnode = elem.getAttributeNode( \"id\" );\n\t\t\t\t\tif ( node && node.value === id ) {\n\t\t\t\t\t\treturn [ elem ];\n\t\t\t\t\t}\n\n\t\t\t\t\t// Fall back on getElementsByName\n\t\t\t\t\telems = context.getElementsByName( id );\n\t\t\t\t\ti = 0;\n\t\t\t\t\twhile ( ( elem = elems[ i++ ] ) ) {\n\t\t\t\t\t\tnode = elem.getAttributeNode( \"id\" );\n\t\t\t\t\t\tif ( node && node.value === id ) {\n\t\t\t\t\t\t\treturn [ elem ];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn [];\n\t\t\t}\n\t\t};\n\t}\n\n\t// Tag\n\tExpr.find[ \"TAG\" ] = support.getElementsByTagName ?\n\t\tfunction( tag, context ) {\n\t\t\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\t\t\treturn context.getElementsByTagName( tag );\n\n\t\t\t// DocumentFragment nodes don't have gEBTN\n\t\t\t} else if ( support.qsa ) {\n\t\t\t\treturn context.querySelectorAll( tag );\n\t\t\t}\n\t\t} :\n\n\t\tfunction( tag, context ) {\n\t\t\tvar elem,\n\t\t\t\ttmp = [],\n\t\t\t\ti = 0,\n\n\t\t\t\t// By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too\n\t\t\t\tresults = context.getElementsByTagName( tag );\n\n\t\t\t// Filter out possible comments\n\t\t\tif ( tag === \"*\" ) {\n\t\t\t\twhile ( ( elem = results[ i++ ] ) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\ttmp.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn tmp;\n\t\t\t}\n\t\t\treturn results;\n\t\t};\n\n\t// Class\n\tExpr.find[ \"CLASS\" ] = support.getElementsByClassName && function( className, context ) {\n\t\tif ( typeof context.getElementsByClassName !== \"undefined\" && documentIsHTML ) {\n\t\t\treturn context.getElementsByClassName( className );\n\t\t}\n\t};\n\n\t/* QSA/matchesSelector\n\t---------------------------------------------------------------------- */\n\n\t// QSA and matchesSelector support\n\n\t// matchesSelector(:active) reports false when true (IE9/Opera 11.5)\n\trbuggyMatches = [];\n\n\t// qSa(:focus) reports false when true (Chrome 21)\n\t// We allow this because of a bug in IE8/9 that throws an error\n\t// whenever `document.activeElement` is accessed on an iframe\n\t// So, we allow :focus to pass through QSA all the time to avoid the IE error\n\t// See https://bugs.jquery.com/ticket/13378\n\trbuggyQSA = [];\n\n\tif ( ( support.qsa = rnative.test( document.querySelectorAll ) ) ) {\n\n\t\t// Build QSA regex\n\t\t// Regex strategy adopted from Diego Perini\n\t\tassert( function( el ) {\n\n\t\t\tvar input;\n\n\t\t\t// Select is set to empty string on purpose\n\t\t\t// This is to test IE's treatment of not explicitly\n\t\t\t// setting a boolean content attribute,\n\t\t\t// since its presence should be enough\n\t\t\t// https://bugs.jquery.com/ticket/12359\n\t\t\tdocElem.appendChild( el ).innerHTML = \"<a id='\" + expando + \"'></a>\" +\n\t\t\t\t\"<select id='\" + expando + \"-\\r\\\\' msallowcapture=''>\" +\n\t\t\t\t\"<option selected=''></option></select>\";\n\n\t\t\t// Support: IE8, Opera 11-12.16\n\t\t\t// Nothing should be selected when empty strings follow ^= or $= or *=\n\t\t\t// The test attribute must be unknown in Opera but \"safe\" for WinRT\n\t\t\t// https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section\n\t\t\tif ( el.querySelectorAll( \"[msallowcapture^='']\" ).length ) {\n\t\t\t\trbuggyQSA.push( \"[*^$]=\" + whitespace + \"*(?:''|\\\"\\\")\" );\n\t\t\t}\n\n\t\t\t// Support: IE8\n\t\t\t// Boolean attributes and \"value\" are not treated correctly\n\t\t\tif ( !el.querySelectorAll( \"[selected]\" ).length ) {\n\t\t\t\trbuggyQSA.push( \"\\\\[\" + whitespace + \"*(?:value|\" + booleans + \")\" );\n\t\t\t}\n\n\t\t\t// Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+\n\t\t\tif ( !el.querySelectorAll( \"[id~=\" + expando + \"-]\" ).length ) {\n\t\t\t\trbuggyQSA.push( \"~=\" );\n\t\t\t}\n\n\t\t\t// Support: IE 11+, Edge 15 - 18+\n\t\t\t// IE 11/Edge don't find elements on a `[name='']` query in some cases.\n\t\t\t// Adding a temporary attribute to the document before the selection works\n\t\t\t// around the issue.\n\t\t\t// Interestingly, IE 10 & older don't seem to have the issue.\n\t\t\tinput = document.createElement( \"input\" );\n\t\t\tinput.setAttribute( \"name\", \"\" );\n\t\t\tel.appendChild( input );\n\t\t\tif ( !el.querySelectorAll( \"[name='']\" ).length ) {\n\t\t\t\trbuggyQSA.push( \"\\\\[\" + whitespace + \"*name\" + whitespace + \"*=\" +\n\t\t\t\t\twhitespace + \"*(?:''|\\\"\\\")\" );\n\t\t\t}\n\n\t\t\t// Webkit/Opera - :checked should return selected option elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( !el.querySelectorAll( \":checked\" ).length ) {\n\t\t\t\trbuggyQSA.push( \":checked\" );\n\t\t\t}\n\n\t\t\t// Support: Safari 8+, iOS 8+\n\t\t\t// https://bugs.webkit.org/show_bug.cgi?id=136851\n\t\t\t// In-page `selector#id sibling-combinator selector` fails\n\t\t\tif ( !el.querySelectorAll( \"a#\" + expando + \"+*\" ).length ) {\n\t\t\t\trbuggyQSA.push( \".#.+[+~]\" );\n\t\t\t}\n\n\t\t\t// Support: Firefox <=3.6 - 5 only\n\t\t\t// Old Firefox doesn't throw on a badly-escaped identifier.\n\t\t\tel.querySelectorAll( \"\\\\\\f\" );\n\t\t\trbuggyQSA.push( \"[\\\\r\\\\n\\\\f]\" );\n\t\t} );\n\n\t\tassert( function( el ) {\n\t\t\tel.innerHTML = \"<a href='' disabled='disabled'></a>\" +\n\t\t\t\t\"<select disabled='disabled'><option/></select>\";\n\n\t\t\t// Support: Windows 8 Native Apps\n\t\t\t// The type and name attributes are restricted during .innerHTML assignment\n\t\t\tvar input = document.createElement( \"input\" );\n\t\t\tinput.setAttribute( \"type\", \"hidden\" );\n\t\t\tel.appendChild( input ).setAttribute( \"name\", \"D\" );\n\n\t\t\t// Support: IE8\n\t\t\t// Enforce case-sensitivity of name attribute\n\t\t\tif ( el.querySelectorAll( \"[name=d]\" ).length ) {\n\t\t\t\trbuggyQSA.push( \"name\" + whitespace + \"*[*^$|!~]?=\" );\n\t\t\t}\n\n\t\t\t// FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( el.querySelectorAll( \":enabled\" ).length !== 2 ) {\n\t\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t\t}\n\n\t\t\t// Support: IE9-11+\n\t\t\t// IE's :disabled selector does not pick up the children of disabled fieldsets\n\t\t\tdocElem.appendChild( el ).disabled = true;\n\t\t\tif ( el.querySelectorAll( \":disabled\" ).length !== 2 ) {\n\t\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t\t}\n\n\t\t\t// Support: Opera 10 - 11 only\n\t\t\t// Opera 10-11 does not throw on post-comma invalid pseudos\n\t\t\tel.querySelectorAll( \"*,:x\" );\n\t\t\trbuggyQSA.push( \",.*:\" );\n\t\t} );\n\t}\n\n\tif ( ( support.matchesSelector = rnative.test( ( matches = docElem.matches ||\n\t\tdocElem.webkitMatchesSelector ||\n\t\tdocElem.mozMatchesSelector ||\n\t\tdocElem.oMatchesSelector ||\n\t\tdocElem.msMatchesSelector ) ) ) ) {\n\n\t\tassert( function( el ) {\n\n\t\t\t// Check to see if it's possible to do matchesSelector\n\t\t\t// on a disconnected node (IE 9)\n\t\t\tsupport.disconnectedMatch = matches.call( el, \"*\" );\n\n\t\t\t// This should fail with an exception\n\t\t\t// Gecko does not error, returns false instead\n\t\t\tmatches.call( el, \"[s!='']:x\" );\n\t\t\trbuggyMatches.push( \"!=\", pseudos );\n\t\t} );\n\t}\n\n\trbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join( \"|\" ) );\n\trbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join( \"|\" ) );\n\n\t/* Contains\n\t---------------------------------------------------------------------- */\n\thasCompare = rnative.test( docElem.compareDocumentPosition );\n\n\t// Element contains another\n\t// Purposefully self-exclusive\n\t// As in, an element does not contain itself\n\tcontains = hasCompare || rnative.test( docElem.contains ) ?\n\t\tfunction( a, b ) {\n\t\t\tvar adown = a.nodeType === 9 ? a.documentElement : a,\n\t\t\t\tbup = b && b.parentNode;\n\t\t\treturn a === bup || !!( bup && bup.nodeType === 1 && (\n\t\t\t\tadown.contains ?\n\t\t\t\t\tadown.contains( bup ) :\n\t\t\t\t\ta.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16\n\t\t\t) );\n\t\t} :\n\t\tfunction( a, b ) {\n\t\t\tif ( b ) {\n\t\t\t\twhile ( ( b = b.parentNode ) ) {\n\t\t\t\t\tif ( b === a ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\n\t/* Sorting\n\t---------------------------------------------------------------------- */\n\n\t// Document order sorting\n\tsortOrder = hasCompare ?\n\tfunction( a, b ) {\n\n\t\t// Flag for duplicate removal\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\t// Sort on method existence if only one input has compareDocumentPosition\n\t\tvar compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\n\t\tif ( compare ) {\n\t\t\treturn compare;\n\t\t}\n\n\t\t// Calculate position if both inputs belong to the same document\n\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t// two documents; shallow comparisons work.\n\t\t// eslint-disable-next-line eqeqeq\n\t\tcompare = ( a.ownerDocument || a ) == ( b.ownerDocument || b ) ?\n\t\t\ta.compareDocumentPosition( b ) :\n\n\t\t\t// Otherwise we know they are disconnected\n\t\t\t1;\n\n\t\t// Disconnected nodes\n\t\tif ( compare & 1 ||\n\t\t\t( !support.sortDetached && b.compareDocumentPosition( a ) === compare ) ) {\n\n\t\t\t// Choose the first element that is related to our preferred document\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tif ( a == document || a.ownerDocument == preferredDoc &&\n\t\t\t\tcontains( preferredDoc, a ) ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tif ( b == document || b.ownerDocument == preferredDoc &&\n\t\t\t\tcontains( preferredDoc, b ) ) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\t// Maintain original order\n\t\t\treturn sortInput ?\n\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t0;\n\t\t}\n\n\t\treturn compare & 4 ? -1 : 1;\n\t} :\n\tfunction( a, b ) {\n\n\t\t// Exit early if the nodes are identical\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\taup = a.parentNode,\n\t\t\tbup = b.parentNode,\n\t\t\tap = [ a ],\n\t\t\tbp = [ b ];\n\n\t\t// Parentless nodes are either documents or disconnected\n\t\tif ( !aup || !bup ) {\n\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t/* eslint-disable eqeqeq */\n\t\t\treturn a == document ? -1 :\n\t\t\t\tb == document ? 1 :\n\t\t\t\t/* eslint-enable eqeqeq */\n\t\t\t\taup ? -1 :\n\t\t\t\tbup ? 1 :\n\t\t\t\tsortInput ?\n\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t0;\n\n\t\t// If the nodes are siblings, we can do a quick check\n\t\t} else if ( aup === bup ) {\n\t\t\treturn siblingCheck( a, b );\n\t\t}\n\n\t\t// Otherwise we need full lists of their ancestors for comparison\n\t\tcur = a;\n\t\twhile ( ( cur = cur.parentNode ) ) {\n\t\t\tap.unshift( cur );\n\t\t}\n\t\tcur = b;\n\t\twhile ( ( cur = cur.parentNode ) ) {\n\t\t\tbp.unshift( cur );\n\t\t}\n\n\t\t// Walk down the tree looking for a discrepancy\n\t\twhile ( ap[ i ] === bp[ i ] ) {\n\t\t\ti++;\n\t\t}\n\n\t\treturn i ?\n\n\t\t\t// Do a sibling check if the nodes have a common ancestor\n\t\t\tsiblingCheck( ap[ i ], bp[ i ] ) :\n\n\t\t\t// Otherwise nodes in our document sort first\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t/* eslint-disable eqeqeq */\n\t\t\tap[ i ] == preferredDoc ? -1 :\n\t\t\tbp[ i ] == preferredDoc ? 1 :\n\t\t\t/* eslint-enable eqeqeq */\n\t\t\t0;\n\t};\n\n\treturn document;\n};\n\nSizzle.matches = function( expr, elements ) {\n\treturn Sizzle( expr, null, null, elements );\n};\n\nSizzle.matchesSelector = function( elem, expr ) {\n\tsetDocument( elem );\n\n\tif ( support.matchesSelector && documentIsHTML &&\n\t\t!nonnativeSelectorCache[ expr + \" \" ] &&\n\t\t( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&\n\t\t( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) {\n\n\t\ttry {\n\t\t\tvar ret = matches.call( elem, expr );\n\n\t\t\t// IE 9's matchesSelector returns false on disconnected nodes\n\t\t\tif ( ret || support.disconnectedMatch ||\n\n\t\t\t\t// As well, disconnected nodes are said to be in a document\n\t\t\t\t// fragment in IE 9\n\t\t\t\telem.document && elem.document.nodeType !== 11 ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\t\t} catch ( e ) {\n\t\t\tnonnativeSelectorCache( expr, true );\n\t\t}\n\t}\n\n\treturn Sizzle( expr, document, null, [ elem ] ).length > 0;\n};\n\nSizzle.contains = function( context, elem ) {\n\n\t// Set document vars if needed\n\t// Support: IE 11+, Edge 17 - 18+\n\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( ( context.ownerDocument || context ) != document ) {\n\t\tsetDocument( context );\n\t}\n\treturn contains( context, elem );\n};\n\nSizzle.attr = function( elem, name ) {\n\n\t// Set document vars if needed\n\t// Support: IE 11+, Edge 17 - 18+\n\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( ( elem.ownerDocument || elem ) != document ) {\n\t\tsetDocument( elem );\n\t}\n\n\tvar fn = Expr.attrHandle[ name.toLowerCase() ],\n\n\t\t// Don't get fooled by Object.prototype properties (jQuery #13807)\n\t\tval = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?\n\t\t\tfn( elem, name, !documentIsHTML ) :\n\t\t\tundefined;\n\n\treturn val !== undefined ?\n\t\tval :\n\t\tsupport.attributes || !documentIsHTML ?\n\t\t\telem.getAttribute( name ) :\n\t\t\t( val = elem.getAttributeNode( name ) ) && val.specified ?\n\t\t\t\tval.value :\n\t\t\t\tnull;\n};\n\nSizzle.escape = function( sel ) {\n\treturn ( sel + \"\" ).replace( rcssescape, fcssescape );\n};\n\nSizzle.error = function( msg ) {\n\tthrow new Error( \"Syntax error, unrecognized expression: \" + msg );\n};\n\n/**\n * Document sorting and removing duplicates\n * @param {ArrayLike} results\n */\nSizzle.uniqueSort = function( results ) {\n\tvar elem,\n\t\tduplicates = [],\n\t\tj = 0,\n\t\ti = 0;\n\n\t// Unless we *know* we can detect duplicates, assume their presence\n\thasDuplicate = !support.detectDuplicates;\n\tsortInput = !support.sortStable && results.slice( 0 );\n\tresults.sort( sortOrder );\n\n\tif ( hasDuplicate ) {\n\t\twhile ( ( elem = results[ i++ ] ) ) {\n\t\t\tif ( elem === results[ i ] ) {\n\t\t\t\tj = duplicates.push( i );\n\t\t\t}\n\t\t}\n\t\twhile ( j-- ) {\n\t\t\tresults.splice( duplicates[ j ], 1 );\n\t\t}\n\t}\n\n\t// Clear input after sorting to release objects\n\t// See https://github.com/jquery/sizzle/pull/225\n\tsortInput = null;\n\n\treturn results;\n};\n\n/**\n * Utility function for retrieving the text value of an array of DOM nodes\n * @param {Array|Element} elem\n */\ngetText = Sizzle.getText = function( elem ) {\n\tvar node,\n\t\tret = \"\",\n\t\ti = 0,\n\t\tnodeType = elem.nodeType;\n\n\tif ( !nodeType ) {\n\n\t\t// If no nodeType, this is expected to be an array\n\t\twhile ( ( node = elem[ i++ ] ) ) {\n\n\t\t\t// Do not traverse comment nodes\n\t\t\tret += getText( node );\n\t\t}\n\t} else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {\n\n\t\t// Use textContent for elements\n\t\t// innerText usage removed for consistency of new lines (jQuery #11153)\n\t\tif ( typeof elem.textContent === \"string\" ) {\n\t\t\treturn elem.textContent;\n\t\t} else {\n\n\t\t\t// Traverse its children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tret += getText( elem );\n\t\t\t}\n\t\t}\n\t} else if ( nodeType === 3 || nodeType === 4 ) {\n\t\treturn elem.nodeValue;\n\t}\n\n\t// Do not include comment or processing instruction nodes\n\n\treturn ret;\n};\n\nExpr = Sizzle.selectors = {\n\n\t// Can be adjusted by the user\n\tcacheLength: 50,\n\n\tcreatePseudo: markFunction,\n\n\tmatch: matchExpr,\n\n\tattrHandle: {},\n\n\tfind: {},\n\n\trelative: {\n\t\t\">\": { dir: \"parentNode\", first: true },\n\t\t\" \": { dir: \"parentNode\" },\n\t\t\"+\": { dir: \"previousSibling\", first: true },\n\t\t\"~\": { dir: \"previousSibling\" }\n\t},\n\n\tpreFilter: {\n\t\t\"ATTR\": function( match ) {\n\t\t\tmatch[ 1 ] = match[ 1 ].replace( runescape, funescape );\n\n\t\t\t// Move the given value to match[3] whether quoted or unquoted\n\t\t\tmatch[ 3 ] = ( match[ 3 ] || match[ 4 ] ||\n\t\t\t\tmatch[ 5 ] || \"\" ).replace( runescape, funescape );\n\n\t\t\tif ( match[ 2 ] === \"~=\" ) {\n\t\t\t\tmatch[ 3 ] = \" \" + match[ 3 ] + \" \";\n\t\t\t}\n\n\t\t\treturn match.slice( 0, 4 );\n\t\t},\n\n\t\t\"CHILD\": function( match ) {\n\n\t\t\t/* matches from matchExpr[\"CHILD\"]\n\t\t\t\t1 type (only|nth|...)\n\t\t\t\t2 what (child|of-type)\n\t\t\t\t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\n\t\t\t\t4 xn-component of xn+y argument ([+-]?\\d*n|)\n\t\t\t\t5 sign of xn-component\n\t\t\t\t6 x of xn-component\n\t\t\t\t7 sign of y-component\n\t\t\t\t8 y of y-component\n\t\t\t*/\n\t\t\tmatch[ 1 ] = match[ 1 ].toLowerCase();\n\n\t\t\tif ( match[ 1 ].slice( 0, 3 ) === \"nth\" ) {\n\n\t\t\t\t// nth-* requires argument\n\t\t\t\tif ( !match[ 3 ] ) {\n\t\t\t\t\tSizzle.error( match[ 0 ] );\n\t\t\t\t}\n\n\t\t\t\t// numeric x and y parameters for Expr.filter.CHILD\n\t\t\t\t// remember that false/true cast respectively to 0/1\n\t\t\t\tmatch[ 4 ] = +( match[ 4 ] ?\n\t\t\t\t\tmatch[ 5 ] + ( match[ 6 ] || 1 ) :\n\t\t\t\t\t2 * ( match[ 3 ] === \"even\" || match[ 3 ] === \"odd\" ) );\n\t\t\t\tmatch[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === \"odd\" );\n\n\t\t\t\t// other types prohibit arguments\n\t\t\t} else if ( match[ 3 ] ) {\n\t\t\t\tSizzle.error( match[ 0 ] );\n\t\t\t}\n\n\t\t\treturn match;\n\t\t},\n\n\t\t\"PSEUDO\": function( match ) {\n\t\t\tvar excess,\n\t\t\t\tunquoted = !match[ 6 ] && match[ 2 ];\n\n\t\t\tif ( matchExpr[ \"CHILD\" ].test( match[ 0 ] ) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\t// Accept quoted arguments as-is\n\t\t\tif ( match[ 3 ] ) {\n\t\t\t\tmatch[ 2 ] = match[ 4 ] || match[ 5 ] || \"\";\n\n\t\t\t// Strip excess characters from unquoted arguments\n\t\t\t} else if ( unquoted && rpseudo.test( unquoted ) &&\n\n\t\t\t\t// Get excess from tokenize (recursively)\n\t\t\t\t( excess = tokenize( unquoted, true ) ) &&\n\n\t\t\t\t// advance to the next closing parenthesis\n\t\t\t\t( excess = unquoted.indexOf( \")\", unquoted.length - excess ) - unquoted.length ) ) {\n\n\t\t\t\t// excess is a negative index\n\t\t\t\tmatch[ 0 ] = match[ 0 ].slice( 0, excess );\n\t\t\t\tmatch[ 2 ] = unquoted.slice( 0, excess );\n\t\t\t}\n\n\t\t\t// Return only captures needed by the pseudo filter method (type and argument)\n\t\t\treturn match.slice( 0, 3 );\n\t\t}\n\t},\n\n\tfilter: {\n\n\t\t\"TAG\": function( nodeNameSelector ) {\n\t\t\tvar nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn nodeNameSelector === \"*\" ?\n\t\t\t\tfunction() {\n\t\t\t\t\treturn true;\n\t\t\t\t} :\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === nodeName;\n\t\t\t\t};\n\t\t},\n\n\t\t\"CLASS\": function( className ) {\n\t\t\tvar pattern = classCache[ className + \" \" ];\n\n\t\t\treturn pattern ||\n\t\t\t\t( pattern = new RegExp( \"(^|\" + whitespace +\n\t\t\t\t\t\")\" + className + \"(\" + whitespace + \"|$)\" ) ) && classCache(\n\t\t\t\t\t\tclassName, function( elem ) {\n\t\t\t\t\t\t\treturn pattern.test(\n\t\t\t\t\t\t\t\ttypeof elem.className === \"string\" && elem.className ||\n\t\t\t\t\t\t\t\ttypeof elem.getAttribute !== \"undefined\" &&\n\t\t\t\t\t\t\t\t\telem.getAttribute( \"class\" ) ||\n\t\t\t\t\t\t\t\t\"\"\n\t\t\t\t\t\t\t);\n\t\t\t\t} );\n\t\t},\n\n\t\t\"ATTR\": function( name, operator, check ) {\n\t\t\treturn function( elem ) {\n\t\t\t\tvar result = Sizzle.attr( elem, name );\n\n\t\t\t\tif ( result == null ) {\n\t\t\t\t\treturn operator === \"!=\";\n\t\t\t\t}\n\t\t\t\tif ( !operator ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tresult += \"\";\n\n\t\t\t\t/* eslint-disable max-len */\n\n\t\t\t\treturn operator === \"=\" ? result === check :\n\t\t\t\t\toperator === \"!=\" ? result !== check :\n\t\t\t\t\toperator === \"^=\" ? check && result.indexOf( check ) === 0 :\n\t\t\t\t\toperator === \"*=\" ? check && result.indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"$=\" ? check && result.slice( -check.length ) === check :\n\t\t\t\t\toperator === \"~=\" ? ( \" \" + result.replace( rwhitespace, \" \" ) + \" \" ).indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"|=\" ? result === check || result.slice( 0, check.length + 1 ) === check + \"-\" :\n\t\t\t\t\tfalse;\n\t\t\t\t/* eslint-enable max-len */\n\n\t\t\t};\n\t\t},\n\n\t\t\"CHILD\": function( type, what, _argument, first, last ) {\n\t\t\tvar simple = type.slice( 0, 3 ) !== \"nth\",\n\t\t\t\tforward = type.slice( -4 ) !== \"last\",\n\t\t\t\tofType = what === \"of-type\";\n\n\t\t\treturn first === 1 && last === 0 ?\n\n\t\t\t\t// Shortcut for :nth-*(n)\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn !!elem.parentNode;\n\t\t\t\t} :\n\n\t\t\t\tfunction( elem, _context, xml ) {\n\t\t\t\t\tvar cache, uniqueCache, outerCache, node, nodeIndex, start,\n\t\t\t\t\t\tdir = simple !== forward ? \"nextSibling\" : \"previousSibling\",\n\t\t\t\t\t\tparent = elem.parentNode,\n\t\t\t\t\t\tname = ofType && elem.nodeName.toLowerCase(),\n\t\t\t\t\t\tuseCache = !xml && !ofType,\n\t\t\t\t\t\tdiff = false;\n\n\t\t\t\t\tif ( parent ) {\n\n\t\t\t\t\t\t// :(first|last|only)-(child|of-type)\n\t\t\t\t\t\tif ( simple ) {\n\t\t\t\t\t\t\twhile ( dir ) {\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\twhile ( ( node = node[ dir ] ) ) {\n\t\t\t\t\t\t\t\t\tif ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnode.nodeName.toLowerCase() === name :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) {\n\n\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// Reverse direction for :only-* (if we haven't yet done so)\n\t\t\t\t\t\t\t\tstart = dir = type === \"only\" && !start && \"nextSibling\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tstart = [ forward ? parent.firstChild : parent.lastChild ];\n\n\t\t\t\t\t\t// non-xml :nth-child(...) stores cache data on `parent`\n\t\t\t\t\t\tif ( forward && useCache ) {\n\n\t\t\t\t\t\t\t// Seek `elem` from a previously-cached index\n\n\t\t\t\t\t\t\t// ...in a gzip-friendly way\n\t\t\t\t\t\t\tnode = parent;\n\t\t\t\t\t\t\touterCache = node[ expando ] || ( node[ expando ] = {} );\n\n\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t( outerCache[ node.uniqueID ] = {} );\n\n\t\t\t\t\t\t\tcache = uniqueCache[ type ] || [];\n\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\tdiff = nodeIndex && cache[ 2 ];\n\t\t\t\t\t\t\tnode = nodeIndex && parent.childNodes[ nodeIndex ];\n\n\t\t\t\t\t\t\twhile ( ( node = ++nodeIndex && node && node[ dir ] ||\n\n\t\t\t\t\t\t\t\t// Fallback to seeking `elem` from the start\n\t\t\t\t\t\t\t\t( diff = nodeIndex = 0 ) || start.pop() ) ) {\n\n\t\t\t\t\t\t\t\t// When found, cache indexes on `parent` and break\n\t\t\t\t\t\t\t\tif ( node.nodeType === 1 && ++diff && node === elem ) {\n\t\t\t\t\t\t\t\t\tuniqueCache[ type ] = [ dirruns, nodeIndex, diff ];\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Use previously-cached element index if available\n\t\t\t\t\t\t\tif ( useCache ) {\n\n\t\t\t\t\t\t\t\t// ...in a gzip-friendly way\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\touterCache = node[ expando ] || ( node[ expando ] = {} );\n\n\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t( outerCache[ node.uniqueID ] = {} );\n\n\t\t\t\t\t\t\t\tcache = uniqueCache[ type ] || [];\n\t\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\t\tdiff = nodeIndex;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// xml :nth-child(...)\n\t\t\t\t\t\t\t// or :nth-last-child(...) or :nth(-last)?-of-type(...)\n\t\t\t\t\t\t\tif ( diff === false ) {\n\n\t\t\t\t\t\t\t\t// Use the same loop as above to seek `elem` from the start\n\t\t\t\t\t\t\t\twhile ( ( node = ++nodeIndex && node && node[ dir ] ||\n\t\t\t\t\t\t\t\t\t( diff = nodeIndex = 0 ) || start.pop() ) ) {\n\n\t\t\t\t\t\t\t\t\tif ( ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnode.nodeName.toLowerCase() === name :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) &&\n\t\t\t\t\t\t\t\t\t\t++diff ) {\n\n\t\t\t\t\t\t\t\t\t\t// Cache the index of each encountered element\n\t\t\t\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t\t\t\touterCache = node[ expando ] ||\n\t\t\t\t\t\t\t\t\t\t\t\t( node[ expando ] = {} );\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t\t\t\t( outerCache[ node.uniqueID ] = {} );\n\n\t\t\t\t\t\t\t\t\t\t\tuniqueCache[ type ] = [ dirruns, diff ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tif ( node === elem ) {\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Incorporate the offset, then check against cycle size\n\t\t\t\t\t\tdiff -= last;\n\t\t\t\t\t\treturn diff === first || ( diff % first === 0 && diff / first >= 0 );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t},\n\n\t\t\"PSEUDO\": function( pseudo, argument ) {\n\n\t\t\t// pseudo-class names are case-insensitive\n\t\t\t// http://www.w3.org/TR/selectors/#pseudo-classes\n\t\t\t// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n\t\t\t// Remember that setFilters inherits from pseudos\n\t\t\tvar args,\n\t\t\t\tfn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||\n\t\t\t\t\tSizzle.error( \"unsupported pseudo: \" + pseudo );\n\n\t\t\t// The user may use createPseudo to indicate that\n\t\t\t// arguments are needed to create the filter function\n\t\t\t// just as Sizzle does\n\t\t\tif ( fn[ expando ] ) {\n\t\t\t\treturn fn( argument );\n\t\t\t}\n\n\t\t\t// But maintain support for old signatures\n\t\t\tif ( fn.length > 1 ) {\n\t\t\t\targs = [ pseudo, pseudo, \"\", argument ];\n\t\t\t\treturn Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?\n\t\t\t\t\tmarkFunction( function( seed, matches ) {\n\t\t\t\t\t\tvar idx,\n\t\t\t\t\t\t\tmatched = fn( seed, argument ),\n\t\t\t\t\t\t\ti = matched.length;\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tidx = indexOf( seed, matched[ i ] );\n\t\t\t\t\t\t\tseed[ idx ] = !( matches[ idx ] = matched[ i ] );\n\t\t\t\t\t\t}\n\t\t\t\t\t} ) :\n\t\t\t\t\tfunction( elem ) {\n\t\t\t\t\t\treturn fn( elem, 0, args );\n\t\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn fn;\n\t\t}\n\t},\n\n\tpseudos: {\n\n\t\t// Potentially complex pseudos\n\t\t\"not\": markFunction( function( selector ) {\n\n\t\t\t// Trim the selector passed to compile\n\t\t\t// to avoid treating leading and trailing\n\t\t\t// spaces as combinators\n\t\t\tvar input = [],\n\t\t\t\tresults = [],\n\t\t\t\tmatcher = compile( selector.replace( rtrim, \"$1\" ) );\n\n\t\t\treturn matcher[ expando ] ?\n\t\t\t\tmarkFunction( function( seed, matches, _context, xml ) {\n\t\t\t\t\tvar elem,\n\t\t\t\t\t\tunmatched = matcher( seed, null, xml, [] ),\n\t\t\t\t\t\ti = seed.length;\n\n\t\t\t\t\t// Match elements unmatched by `matcher`\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( ( elem = unmatched[ i ] ) ) {\n\t\t\t\t\t\t\tseed[ i ] = !( matches[ i ] = elem );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} ) :\n\t\t\t\tfunction( elem, _context, xml ) {\n\t\t\t\t\tinput[ 0 ] = elem;\n\t\t\t\t\tmatcher( input, null, xml, results );\n\n\t\t\t\t\t// Don't keep the element (issue #299)\n\t\t\t\t\tinput[ 0 ] = null;\n\t\t\t\t\treturn !results.pop();\n\t\t\t\t};\n\t\t} ),\n\n\t\t\"has\": markFunction( function( selector ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn Sizzle( selector, elem ).length > 0;\n\t\t\t};\n\t\t} ),\n\n\t\t\"contains\": markFunction( function( text ) {\n\t\t\ttext = text.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn ( elem.textContent || getText( elem ) ).indexOf( text ) > -1;\n\t\t\t};\n\t\t} ),\n\n\t\t// \"Whether an element is represented by a :lang() selector\n\t\t// is based solely on the element's language value\n\t\t// being equal to the identifier C,\n\t\t// or beginning with the identifier C immediately followed by \"-\".\n\t\t// The matching of C against the element's language value is performed case-insensitively.\n\t\t// The identifier C does not have to be a valid language name.\"\n\t\t// http://www.w3.org/TR/selectors/#lang-pseudo\n\t\t\"lang\": markFunction( function( lang ) {\n\n\t\t\t// lang value must be a valid identifier\n\t\t\tif ( !ridentifier.test( lang || \"\" ) ) {\n\t\t\t\tSizzle.error( \"unsupported lang: \" + lang );\n\t\t\t}\n\t\t\tlang = lang.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn function( elem ) {\n\t\t\t\tvar elemLang;\n\t\t\t\tdo {\n\t\t\t\t\tif ( ( elemLang = documentIsHTML ?\n\t\t\t\t\t\telem.lang :\n\t\t\t\t\t\telem.getAttribute( \"xml:lang\" ) || elem.getAttribute( \"lang\" ) ) ) {\n\n\t\t\t\t\t\telemLang = elemLang.toLowerCase();\n\t\t\t\t\t\treturn elemLang === lang || elemLang.indexOf( lang + \"-\" ) === 0;\n\t\t\t\t\t}\n\t\t\t\t} while ( ( elem = elem.parentNode ) && elem.nodeType === 1 );\n\t\t\t\treturn false;\n\t\t\t};\n\t\t} ),\n\n\t\t// Miscellaneous\n\t\t\"target\": function( elem ) {\n\t\t\tvar hash = window.location && window.location.hash;\n\t\t\treturn hash && hash.slice( 1 ) === elem.id;\n\t\t},\n\n\t\t\"root\": function( elem ) {\n\t\t\treturn elem === docElem;\n\t\t},\n\n\t\t\"focus\": function( elem ) {\n\t\t\treturn elem === document.activeElement &&\n\t\t\t\t( !document.hasFocus || document.hasFocus() ) &&\n\t\t\t\t!!( elem.type || elem.href || ~elem.tabIndex );\n\t\t},\n\n\t\t// Boolean properties\n\t\t\"enabled\": createDisabledPseudo( false ),\n\t\t\"disabled\": createDisabledPseudo( true ),\n\n\t\t\"checked\": function( elem ) {\n\n\t\t\t// In CSS3, :checked should return both checked and selected elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\tvar nodeName = elem.nodeName.toLowerCase();\n\t\t\treturn ( nodeName === \"input\" && !!elem.checked ) ||\n\t\t\t\t( nodeName === \"option\" && !!elem.selected );\n\t\t},\n\n\t\t\"selected\": function( elem ) {\n\n\t\t\t// Accessing this property makes selected-by-default\n\t\t\t// options in Safari work properly\n\t\t\tif ( elem.parentNode ) {\n\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\telem.parentNode.selectedIndex;\n\t\t\t}\n\n\t\t\treturn elem.selected === true;\n\t\t},\n\n\t\t// Contents\n\t\t\"empty\": function( elem ) {\n\n\t\t\t// http://www.w3.org/TR/selectors/#empty-pseudo\n\t\t\t// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),\n\t\t\t// but not by others (comment: 8; processing instruction: 7; etc.)\n\t\t\t// nodeType < 6 works because attributes (2) do not appear as children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tif ( elem.nodeType < 6 ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\t\"parent\": function( elem ) {\n\t\t\treturn !Expr.pseudos[ \"empty\" ]( elem );\n\t\t},\n\n\t\t// Element/input types\n\t\t\"header\": function( elem ) {\n\t\t\treturn rheader.test( elem.nodeName );\n\t\t},\n\n\t\t\"input\": function( elem ) {\n\t\t\treturn rinputs.test( elem.nodeName );\n\t\t},\n\n\t\t\"button\": function( elem ) {\n\t\t\tvar name = elem.nodeName.toLowerCase();\n\t\t\treturn name === \"input\" && elem.type === \"button\" || name === \"button\";\n\t\t},\n\n\t\t\"text\": function( elem ) {\n\t\t\tvar attr;\n\t\t\treturn elem.nodeName.toLowerCase() === \"input\" &&\n\t\t\t\telem.type === \"text\" &&\n\n\t\t\t\t// Support: IE<8\n\t\t\t\t// New HTML5 attribute values (e.g., \"search\") appear with elem.type === \"text\"\n\t\t\t\t( ( attr = elem.getAttribute( \"type\" ) ) == null ||\n\t\t\t\t\tattr.toLowerCase() === \"text\" );\n\t\t},\n\n\t\t// Position-in-collection\n\t\t\"first\": createPositionalPseudo( function() {\n\t\t\treturn [ 0 ];\n\t\t} ),\n\n\t\t\"last\": createPositionalPseudo( function( _matchIndexes, length ) {\n\t\t\treturn [ length - 1 ];\n\t\t} ),\n\n\t\t\"eq\": createPositionalPseudo( function( _matchIndexes, length, argument ) {\n\t\t\treturn [ argument < 0 ? argument + length : argument ];\n\t\t} ),\n\n\t\t\"even\": createPositionalPseudo( function( matchIndexes, length ) {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\t\"odd\": createPositionalPseudo( function( matchIndexes, length ) {\n\t\t\tvar i = 1;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\t\"lt\": createPositionalPseudo( function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ?\n\t\t\t\targument + length :\n\t\t\t\targument > length ?\n\t\t\t\t\tlength :\n\t\t\t\t\targument;\n\t\t\tfor ( ; --i >= 0; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\t\"gt\": createPositionalPseudo( function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; ++i < length; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} )\n\t}\n};\n\nExpr.pseudos[ \"nth\" ] = Expr.pseudos[ \"eq\" ];\n\n// Add button/input type pseudos\nfor ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {\n\tExpr.pseudos[ i ] = createInputPseudo( i );\n}\nfor ( i in { submit: true, reset: true } ) {\n\tExpr.pseudos[ i ] = createButtonPseudo( i );\n}\n\n// Easy API for creating new setFilters\nfunction setFilters() {}\nsetFilters.prototype = Expr.filters = Expr.pseudos;\nExpr.setFilters = new setFilters();\n\ntokenize = Sizzle.tokenize = function( selector, parseOnly ) {\n\tvar matched, match, tokens, type,\n\t\tsoFar, groups, preFilters,\n\t\tcached = tokenCache[ selector + \" \" ];\n\n\tif ( cached ) {\n\t\treturn parseOnly ? 0 : cached.slice( 0 );\n\t}\n\n\tsoFar = selector;\n\tgroups = [];\n\tpreFilters = Expr.preFilter;\n\n\twhile ( soFar ) {\n\n\t\t// Comma and first run\n\t\tif ( !matched || ( match = rcomma.exec( soFar ) ) ) {\n\t\t\tif ( match ) {\n\n\t\t\t\t// Don't consume trailing commas as valid\n\t\t\t\tsoFar = soFar.slice( match[ 0 ].length ) || soFar;\n\t\t\t}\n\t\t\tgroups.push( ( tokens = [] ) );\n\t\t}\n\n\t\tmatched = false;\n\n\t\t// Combinators\n\t\tif ( ( match = rcombinators.exec( soFar ) ) ) {\n\t\t\tmatched = match.shift();\n\t\t\ttokens.push( {\n\t\t\t\tvalue: matched,\n\n\t\t\t\t// Cast descendant combinators to space\n\t\t\t\ttype: match[ 0 ].replace( rtrim, \" \" )\n\t\t\t} );\n\t\t\tsoFar = soFar.slice( matched.length );\n\t\t}\n\n\t\t// Filters\n\t\tfor ( type in Expr.filter ) {\n\t\t\tif ( ( match = matchExpr[ type ].exec( soFar ) ) && ( !preFilters[ type ] ||\n\t\t\t\t( match = preFilters[ type ]( match ) ) ) ) {\n\t\t\t\tmatched = match.shift();\n\t\t\t\ttokens.push( {\n\t\t\t\t\tvalue: matched,\n\t\t\t\t\ttype: type,\n\t\t\t\t\tmatches: match\n\t\t\t\t} );\n\t\t\t\tsoFar = soFar.slice( matched.length );\n\t\t\t}\n\t\t}\n\n\t\tif ( !matched ) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\t// Return the length of the invalid excess\n\t// if we're just parsing\n\t// Otherwise, throw an error or return tokens\n\treturn parseOnly ?\n\t\tsoFar.length :\n\t\tsoFar ?\n\t\t\tSizzle.error( selector ) :\n\n\t\t\t// Cache the tokens\n\t\t\ttokenCache( selector, groups ).slice( 0 );\n};\n\nfunction toSelector( tokens ) {\n\tvar i = 0,\n\t\tlen = tokens.length,\n\t\tselector = \"\";\n\tfor ( ; i < len; i++ ) {\n\t\tselector += tokens[ i ].value;\n\t}\n\treturn selector;\n}\n\nfunction addCombinator( matcher, combinator, base ) {\n\tvar dir = combinator.dir,\n\t\tskip = combinator.next,\n\t\tkey = skip || dir,\n\t\tcheckNonElements = base && key === \"parentNode\",\n\t\tdoneName = done++;\n\n\treturn combinator.first ?\n\n\t\t// Check against closest ancestor/preceding element\n\t\tfunction( elem, context, xml ) {\n\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\treturn matcher( elem, context, xml );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t} :\n\n\t\t// Check against all ancestor/preceding elements\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar oldCache, uniqueCache, outerCache,\n\t\t\t\tnewCache = [ dirruns, doneName ];\n\n\t\t\t// We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching\n\t\t\tif ( xml ) {\n\t\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\tif ( matcher( elem, context, xml ) ) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\touterCache = elem[ expando ] || ( elem[ expando ] = {} );\n\n\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\tuniqueCache = outerCache[ elem.uniqueID ] ||\n\t\t\t\t\t\t\t( outerCache[ elem.uniqueID ] = {} );\n\n\t\t\t\t\t\tif ( skip && skip === elem.nodeName.toLowerCase() ) {\n\t\t\t\t\t\t\telem = elem[ dir ] || elem;\n\t\t\t\t\t\t} else if ( ( oldCache = uniqueCache[ key ] ) &&\n\t\t\t\t\t\t\toldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {\n\n\t\t\t\t\t\t\t// Assign to newCache so results back-propagate to previous elements\n\t\t\t\t\t\t\treturn ( newCache[ 2 ] = oldCache[ 2 ] );\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Reuse newcache so results back-propagate to previous elements\n\t\t\t\t\t\t\tuniqueCache[ key ] = newCache;\n\n\t\t\t\t\t\t\t// A match means we're done; a fail means we have to keep checking\n\t\t\t\t\t\t\tif ( ( newCache[ 2 ] = matcher( elem, context, xml ) ) ) {\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n}\n\nfunction elementMatcher( matchers ) {\n\treturn matchers.length > 1 ?\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar i = matchers.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( !matchers[ i ]( elem, context, xml ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t} :\n\t\tmatchers[ 0 ];\n}\n\nfunction multipleContexts( selector, contexts, results ) {\n\tvar i = 0,\n\t\tlen = contexts.length;\n\tfor ( ; i < len; i++ ) {\n\t\tSizzle( selector, contexts[ i ], results );\n\t}\n\treturn results;\n}\n\nfunction condense( unmatched, map, filter, context, xml ) {\n\tvar elem,\n\t\tnewUnmatched = [],\n\t\ti = 0,\n\t\tlen = unmatched.length,\n\t\tmapped = map != null;\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( ( elem = unmatched[ i ] ) ) {\n\t\t\tif ( !filter || filter( elem, context, xml ) ) {\n\t\t\t\tnewUnmatched.push( elem );\n\t\t\t\tif ( mapped ) {\n\t\t\t\t\tmap.push( i );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn newUnmatched;\n}\n\nfunction setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {\n\tif ( postFilter && !postFilter[ expando ] ) {\n\t\tpostFilter = setMatcher( postFilter );\n\t}\n\tif ( postFinder && !postFinder[ expando ] ) {\n\t\tpostFinder = setMatcher( postFinder, postSelector );\n\t}\n\treturn markFunction( function( seed, results, context, xml ) {\n\t\tvar temp, i, elem,\n\t\t\tpreMap = [],\n\t\t\tpostMap = [],\n\t\t\tpreexisting = results.length,\n\n\t\t\t// Get initial elements from seed or context\n\t\t\telems = seed || multipleContexts(\n\t\t\t\tselector || \"*\",\n\t\t\t\tcontext.nodeType ? [ context ] : context,\n\t\t\t\t[]\n\t\t\t),\n\n\t\t\t// Prefilter to get matcher input, preserving a map for seed-results synchronization\n\t\t\tmatcherIn = preFilter && ( seed || !selector ) ?\n\t\t\t\tcondense( elems, preMap, preFilter, context, xml ) :\n\t\t\t\telems,\n\n\t\t\tmatcherOut = matcher ?\n\n\t\t\t\t// If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,\n\t\t\t\tpostFinder || ( seed ? preFilter : preexisting || postFilter ) ?\n\n\t\t\t\t\t// ...intermediate processing is necessary\n\t\t\t\t\t[] :\n\n\t\t\t\t\t// ...otherwise use results directly\n\t\t\t\t\tresults :\n\t\t\t\tmatcherIn;\n\n\t\t// Find primary matches\n\t\tif ( matcher ) {\n\t\t\tmatcher( matcherIn, matcherOut, context, xml );\n\t\t}\n\n\t\t// Apply postFilter\n\t\tif ( postFilter ) {\n\t\t\ttemp = condense( matcherOut, postMap );\n\t\t\tpostFilter( temp, [], context, xml );\n\n\t\t\t// Un-match failing elements by moving them back to matcherIn\n\t\t\ti = temp.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( ( elem = temp[ i ] ) ) {\n\t\t\t\t\tmatcherOut[ postMap[ i ] ] = !( matcherIn[ postMap[ i ] ] = elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( seed ) {\n\t\t\tif ( postFinder || preFilter ) {\n\t\t\t\tif ( postFinder ) {\n\n\t\t\t\t\t// Get the final matcherOut by condensing this intermediate into postFinder contexts\n\t\t\t\t\ttemp = [];\n\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( ( elem = matcherOut[ i ] ) ) {\n\n\t\t\t\t\t\t\t// Restore matcherIn since elem is not yet a final match\n\t\t\t\t\t\t\ttemp.push( ( matcherIn[ i ] = elem ) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tpostFinder( null, ( matcherOut = [] ), temp, xml );\n\t\t\t\t}\n\n\t\t\t\t// Move matched elements from seed to results to keep them synchronized\n\t\t\t\ti = matcherOut.length;\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\tif ( ( elem = matcherOut[ i ] ) &&\n\t\t\t\t\t\t( temp = postFinder ? indexOf( seed, elem ) : preMap[ i ] ) > -1 ) {\n\n\t\t\t\t\t\tseed[ temp ] = !( results[ temp ] = elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Add elements to results, through postFinder if defined\n\t\t} else {\n\t\t\tmatcherOut = condense(\n\t\t\t\tmatcherOut === results ?\n\t\t\t\t\tmatcherOut.splice( preexisting, matcherOut.length ) :\n\t\t\t\t\tmatcherOut\n\t\t\t);\n\t\t\tif ( postFinder ) {\n\t\t\t\tpostFinder( null, results, matcherOut, xml );\n\t\t\t} else {\n\t\t\t\tpush.apply( results, matcherOut );\n\t\t\t}\n\t\t}\n\t} );\n}\n\nfunction matcherFromTokens( tokens ) {\n\tvar checkContext, matcher, j,\n\t\tlen = tokens.length,\n\t\tleadingRelative = Expr.relative[ tokens[ 0 ].type ],\n\t\timplicitRelative = leadingRelative || Expr.relative[ \" \" ],\n\t\ti = leadingRelative ? 1 : 0,\n\n\t\t// The foundational matcher ensures that elements are reachable from top-level context(s)\n\t\tmatchContext = addCombinator( function( elem ) {\n\t\t\treturn elem === checkContext;\n\t\t}, implicitRelative, true ),\n\t\tmatchAnyContext = addCombinator( function( elem ) {\n\t\t\treturn indexOf( checkContext, elem ) > -1;\n\t\t}, implicitRelative, true ),\n\t\tmatchers = [ function( elem, context, xml ) {\n\t\t\tvar ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || (\n\t\t\t\t( checkContext = context ).nodeType ?\n\t\t\t\t\tmatchContext( elem, context, xml ) :\n\t\t\t\t\tmatchAnyContext( elem, context, xml ) );\n\n\t\t\t// Avoid hanging onto element (issue #299)\n\t\t\tcheckContext = null;\n\t\t\treturn ret;\n\t\t} ];\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( ( matcher = Expr.relative[ tokens[ i ].type ] ) ) {\n\t\t\tmatchers = [ addCombinator( elementMatcher( matchers ), matcher ) ];\n\t\t} else {\n\t\t\tmatcher = Expr.filter[ tokens[ i ].type ].apply( null, tokens[ i ].matches );\n\n\t\t\t// Return special upon seeing a positional matcher\n\t\t\tif ( matcher[ expando ] ) {\n\n\t\t\t\t// Find the next relative operator (if any) for proper handling\n\t\t\t\tj = ++i;\n\t\t\t\tfor ( ; j < len; j++ ) {\n\t\t\t\t\tif ( Expr.relative[ tokens[ j ].type ] ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn setMatcher(\n\t\t\t\t\ti > 1 && elementMatcher( matchers ),\n\t\t\t\t\ti > 1 && toSelector(\n\n\t\t\t\t\t// If the preceding token was a descendant combinator, insert an implicit any-element `*`\n\t\t\t\t\ttokens\n\t\t\t\t\t\t.slice( 0, i - 1 )\n\t\t\t\t\t\t.concat( { value: tokens[ i - 2 ].type === \" \" ? \"*\" : \"\" } )\n\t\t\t\t\t).replace( rtrim, \"$1\" ),\n\t\t\t\t\tmatcher,\n\t\t\t\t\ti < j && matcherFromTokens( tokens.slice( i, j ) ),\n\t\t\t\t\tj < len && matcherFromTokens( ( tokens = tokens.slice( j ) ) ),\n\t\t\t\t\tj < len && toSelector( tokens )\n\t\t\t\t);\n\t\t\t}\n\t\t\tmatchers.push( matcher );\n\t\t}\n\t}\n\n\treturn elementMatcher( matchers );\n}\n\nfunction matcherFromGroupMatchers( elementMatchers, setMatchers ) {\n\tvar bySet = setMatchers.length > 0,\n\t\tbyElement = elementMatchers.length > 0,\n\t\tsuperMatcher = function( seed, context, xml, results, outermost ) {\n\t\t\tvar elem, j, matcher,\n\t\t\t\tmatchedCount = 0,\n\t\t\t\ti = \"0\",\n\t\t\t\tunmatched = seed && [],\n\t\t\t\tsetMatched = [],\n\t\t\t\tcontextBackup = outermostContext,\n\n\t\t\t\t// We must always have either seed elements or outermost context\n\t\t\t\telems = seed || byElement && Expr.find[ \"TAG\" ]( \"*\", outermost ),\n\n\t\t\t\t// Use integer dirruns iff this is the outermost matcher\n\t\t\t\tdirrunsUnique = ( dirruns += contextBackup == null ? 1 : Math.random() || 0.1 ),\n\t\t\t\tlen = elems.length;\n\n\t\t\tif ( outermost ) {\n\n\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\toutermostContext = context == document || context || outermost;\n\t\t\t}\n\n\t\t\t// Add elements passing elementMatchers directly to results\n\t\t\t// Support: IE<9, Safari\n\t\t\t// Tolerate NodeList properties (IE: \"length\"; Safari: <number>) matching elements by id\n\t\t\tfor ( ; i !== len && ( elem = elems[ i ] ) != null; i++ ) {\n\t\t\t\tif ( byElement && elem ) {\n\t\t\t\t\tj = 0;\n\n\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\tif ( !context && elem.ownerDocument != document ) {\n\t\t\t\t\t\tsetDocument( elem );\n\t\t\t\t\t\txml = !documentIsHTML;\n\t\t\t\t\t}\n\t\t\t\t\twhile ( ( matcher = elementMatchers[ j++ ] ) ) {\n\t\t\t\t\t\tif ( matcher( elem, context || document, xml ) ) {\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( outermost ) {\n\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Track unmatched elements for set filters\n\t\t\t\tif ( bySet ) {\n\n\t\t\t\t\t// They will have gone through all possible matchers\n\t\t\t\t\tif ( ( elem = !matcher && elem ) ) {\n\t\t\t\t\t\tmatchedCount--;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Lengthen the array for every element, matched or not\n\t\t\t\t\tif ( seed ) {\n\t\t\t\t\t\tunmatched.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// `i` is now the count of elements visited above, and adding it to `matchedCount`\n\t\t\t// makes the latter nonnegative.\n\t\t\tmatchedCount += i;\n\n\t\t\t// Apply set filters to unmatched elements\n\t\t\t// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`\n\t\t\t// equals `i`), unless we didn't visit _any_ elements in the above loop because we have\n\t\t\t// no element matchers and no seed.\n\t\t\t// Incrementing an initially-string \"0\" `i` allows `i` to remain a string only in that\n\t\t\t// case, which will result in a \"00\" `matchedCount` that differs from `i` but is also\n\t\t\t// numerically zero.\n\t\t\tif ( bySet && i !== matchedCount ) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ( ( matcher = setMatchers[ j++ ] ) ) {\n\t\t\t\t\tmatcher( unmatched, setMatched, context, xml );\n\t\t\t\t}\n\n\t\t\t\tif ( seed ) {\n\n\t\t\t\t\t// Reintegrate element matches to eliminate the need for sorting\n\t\t\t\t\tif ( matchedCount > 0 ) {\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tif ( !( unmatched[ i ] || setMatched[ i ] ) ) {\n\t\t\t\t\t\t\t\tsetMatched[ i ] = pop.call( results );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Discard index placeholder values to get only actual matches\n\t\t\t\t\tsetMatched = condense( setMatched );\n\t\t\t\t}\n\n\t\t\t\t// Add matches to results\n\t\t\t\tpush.apply( results, setMatched );\n\n\t\t\t\t// Seedless set matches succeeding multiple successful matchers stipulate sorting\n\t\t\t\tif ( outermost && !seed && setMatched.length > 0 &&\n\t\t\t\t\t( matchedCount + setMatchers.length ) > 1 ) {\n\n\t\t\t\t\tSizzle.uniqueSort( results );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Override manipulation of globals by nested matchers\n\t\t\tif ( outermost ) {\n\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\toutermostContext = contextBackup;\n\t\t\t}\n\n\t\t\treturn unmatched;\n\t\t};\n\n\treturn bySet ?\n\t\tmarkFunction( superMatcher ) :\n\t\tsuperMatcher;\n}\n\ncompile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {\n\tvar i,\n\t\tsetMatchers = [],\n\t\telementMatchers = [],\n\t\tcached = compilerCache[ selector + \" \" ];\n\n\tif ( !cached ) {\n\n\t\t// Generate a function of recursive functions that can be used to check each element\n\t\tif ( !match ) {\n\t\t\tmatch = tokenize( selector );\n\t\t}\n\t\ti = match.length;\n\t\twhile ( i-- ) {\n\t\t\tcached = matcherFromTokens( match[ i ] );\n\t\t\tif ( cached[ expando ] ) {\n\t\t\t\tsetMatchers.push( cached );\n\t\t\t} else {\n\t\t\t\telementMatchers.push( cached );\n\t\t\t}\n\t\t}\n\n\t\t// Cache the compiled function\n\t\tcached = compilerCache(\n\t\t\tselector,\n\t\t\tmatcherFromGroupMatchers( elementMatchers, setMatchers )\n\t\t);\n\n\t\t// Save selector and tokenization\n\t\tcached.selector = selector;\n\t}\n\treturn cached;\n};\n\n/**\n * A low-level selection function that works with Sizzle's compiled\n * selector functions\n * @param {String|Function} selector A selector or a pre-compiled\n * selector function built with Sizzle.compile\n * @param {Element} context\n * @param {Array} [results]\n * @param {Array} [seed] A set of elements to match against\n */\nselect = Sizzle.select = function( selector, context, results, seed ) {\n\tvar i, tokens, token, type, find,\n\t\tcompiled = typeof selector === \"function\" && selector,\n\t\tmatch = !seed && tokenize( ( selector = compiled.selector || selector ) );\n\n\tresults = results || [];\n\n\t// Try to minimize operations if there is only one selector in the list and no seed\n\t// (the latter of which guarantees us context)\n\tif ( match.length === 1 ) {\n\n\t\t// Reduce context if the leading compound selector is an ID\n\t\ttokens = match[ 0 ] = match[ 0 ].slice( 0 );\n\t\tif ( tokens.length > 2 && ( token = tokens[ 0 ] ).type === \"ID\" &&\n\t\t\tcontext.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[ 1 ].type ] ) {\n\n\t\t\tcontext = ( Expr.find[ \"ID\" ]( token.matches[ 0 ]\n\t\t\t\t.replace( runescape, funescape ), context ) || [] )[ 0 ];\n\t\t\tif ( !context ) {\n\t\t\t\treturn results;\n\n\t\t\t// Precompiled matchers will still verify ancestry, so step up a level\n\t\t\t} else if ( compiled ) {\n\t\t\t\tcontext = context.parentNode;\n\t\t\t}\n\n\t\t\tselector = selector.slice( tokens.shift().value.length );\n\t\t}\n\n\t\t// Fetch a seed set for right-to-left matching\n\t\ti = matchExpr[ \"needsContext\" ].test( selector ) ? 0 : tokens.length;\n\t\twhile ( i-- ) {\n\t\t\ttoken = tokens[ i ];\n\n\t\t\t// Abort if we hit a combinator\n\t\t\tif ( Expr.relative[ ( type = token.type ) ] ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( ( find = Expr.find[ type ] ) ) {\n\n\t\t\t\t// Search, expanding context for leading sibling combinators\n\t\t\t\tif ( ( seed = find(\n\t\t\t\t\ttoken.matches[ 0 ].replace( runescape, funescape ),\n\t\t\t\t\trsibling.test( tokens[ 0 ].type ) && testContext( context.parentNode ) ||\n\t\t\t\t\t\tcontext\n\t\t\t\t) ) ) {\n\n\t\t\t\t\t// If seed is empty or no tokens remain, we can return early\n\t\t\t\t\ttokens.splice( i, 1 );\n\t\t\t\t\tselector = seed.length && toSelector( tokens );\n\t\t\t\t\tif ( !selector ) {\n\t\t\t\t\t\tpush.apply( results, seed );\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Compile and execute a filtering function if one is not provided\n\t// Provide `match` to avoid retokenization if we modified the selector above\n\t( compiled || compile( selector, match ) )(\n\t\tseed,\n\t\tcontext,\n\t\t!documentIsHTML,\n\t\tresults,\n\t\t!context || rsibling.test( selector ) && testContext( context.parentNode ) || context\n\t);\n\treturn results;\n};\n\n// One-time assignments\n\n// Sort stability\nsupport.sortStable = expando.split( \"\" ).sort( sortOrder ).join( \"\" ) === expando;\n\n// Support: Chrome 14-35+\n// Always assume duplicates if they aren't passed to the comparison function\nsupport.detectDuplicates = !!hasDuplicate;\n\n// Initialize against the default document\nsetDocument();\n\n// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)\n// Detached nodes confoundingly follow *each other*\nsupport.sortDetached = assert( function( el ) {\n\n\t// Should return 1, but returns 4 (following)\n\treturn el.compareDocumentPosition( document.createElement( \"fieldset\" ) ) & 1;\n} );\n\n// Support: IE<8\n// Prevent attribute/property \"interpolation\"\n// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx\nif ( !assert( function( el ) {\n\tel.innerHTML = \"<a href='#'></a>\";\n\treturn el.firstChild.getAttribute( \"href\" ) === \"#\";\n} ) ) {\n\taddHandle( \"type|href|height|width\", function( elem, name, isXML ) {\n\t\tif ( !isXML ) {\n\t\t\treturn elem.getAttribute( name, name.toLowerCase() === \"type\" ? 1 : 2 );\n\t\t}\n\t} );\n}\n\n// Support: IE<9\n// Use defaultValue in place of getAttribute(\"value\")\nif ( !support.attributes || !assert( function( el ) {\n\tel.innerHTML = \"<input/>\";\n\tel.firstChild.setAttribute( \"value\", \"\" );\n\treturn el.firstChild.getAttribute( \"value\" ) === \"\";\n} ) ) {\n\taddHandle( \"value\", function( elem, _name, isXML ) {\n\t\tif ( !isXML && elem.nodeName.toLowerCase() === \"input\" ) {\n\t\t\treturn elem.defaultValue;\n\t\t}\n\t} );\n}\n\n// Support: IE<9\n// Use getAttributeNode to fetch booleans when getAttribute lies\nif ( !assert( function( el ) {\n\treturn el.getAttribute( \"disabled\" ) == null;\n} ) ) {\n\taddHandle( booleans, function( elem, name, isXML ) {\n\t\tvar val;\n\t\tif ( !isXML ) {\n\t\t\treturn elem[ name ] === true ? name.toLowerCase() :\n\t\t\t\t( val = elem.getAttributeNode( name ) ) && val.specified ?\n\t\t\t\t\tval.value :\n\t\t\t\t\tnull;\n\t\t}\n\t} );\n}\n\nreturn Sizzle;\n\n} )( window );\n\n\n\njQuery.find = Sizzle;\njQuery.expr = Sizzle.selectors;\n\n// Deprecated\njQuery.expr[ \":\" ] = jQuery.expr.pseudos;\njQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort;\njQuery.text = Sizzle.getText;\njQuery.isXMLDoc = Sizzle.isXML;\njQuery.contains = Sizzle.contains;\njQuery.escapeSelector = Sizzle.escape;\n\n\n\n\nvar dir = function( elem, dir, until ) {\n\tvar matched = [],\n\t\ttruncate = until !== undefined;\n\n\twhile ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {\n\t\tif ( elem.nodeType === 1 ) {\n\t\t\tif ( truncate && jQuery( elem ).is( until ) ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tmatched.push( elem );\n\t\t}\n\t}\n\treturn matched;\n};\n\n\nvar siblings = function( n, elem ) {\n\tvar matched = [];\n\n\tfor ( ; n; n = n.nextSibling ) {\n\t\tif ( n.nodeType === 1 && n !== elem ) {\n\t\t\tmatched.push( n );\n\t\t}\n\t}\n\n\treturn matched;\n};\n\n\nvar rneedsContext = jQuery.expr.match.needsContext;\n\n\n\nfunction nodeName( elem, name ) {\n\n\treturn elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n\n}\nvar rsingleTag = ( /^<([a-z][^\\/\\0>:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i );\n\n\n\n// Implement the identical functionality for filter and not\nfunction winnow( elements, qualifier, not ) {\n\tif ( isFunction( qualifier ) ) {\n\t\treturn jQuery.grep( elements, function( elem, i ) {\n\t\t\treturn !!qualifier.call( elem, i, elem ) !== not;\n\t\t} );\n\t}\n\n\t// Single element\n\tif ( qualifier.nodeType ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( elem === qualifier ) !== not;\n\t\t} );\n\t}\n\n\t// Arraylike of elements (jQuery, arguments, Array)\n\tif ( typeof qualifier !== \"string\" ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( indexOf.call( qualifier, elem ) > -1 ) !== not;\n\t\t} );\n\t}\n\n\t// Filtered directly for both simple and complex selectors\n\treturn jQuery.filter( qualifier, elements, not );\n}\n\njQuery.filter = function( expr, elems, not ) {\n\tvar elem = elems[ 0 ];\n\n\tif ( not ) {\n\t\texpr = \":not(\" + expr + \")\";\n\t}\n\n\tif ( elems.length === 1 && elem.nodeType === 1 ) {\n\t\treturn jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [];\n\t}\n\n\treturn jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {\n\t\treturn elem.nodeType === 1;\n\t} ) );\n};\n\njQuery.fn.extend( {\n\tfind: function( selector ) {\n\t\tvar i, ret,\n\t\t\tlen = this.length,\n\t\t\tself = this;\n\n\t\tif ( typeof selector !== \"string\" ) {\n\t\t\treturn this.pushStack( jQuery( selector ).filter( function() {\n\t\t\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\t\t\tif ( jQuery.contains( self[ i ], this ) ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} ) );\n\t\t}\n\n\t\tret = this.pushStack( [] );\n\n\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\tjQuery.find( selector, self[ i ], ret );\n\t\t}\n\n\t\treturn len > 1 ? jQuery.uniqueSort( ret ) : ret;\n\t},\n\tfilter: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], false ) );\n\t},\n\tnot: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], true ) );\n\t},\n\tis: function( selector ) {\n\t\treturn !!winnow(\n\t\t\tthis,\n\n\t\t\t// If this is a positional/relative selector, check membership in the returned set\n\t\t\t// so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\n\t\t\ttypeof selector === \"string\" && rneedsContext.test( selector ) ?\n\t\t\t\tjQuery( selector ) :\n\t\t\t\tselector || [],\n\t\t\tfalse\n\t\t).length;\n\t}\n} );\n\n\n// Initialize a jQuery object\n\n\n// A central reference to the root jQuery(document)\nvar rootjQuery,\n\n\t// A simple way to check for HTML strings\n\t// Prioritize #id over <tag> to avoid XSS via location.hash (#9521)\n\t// Strict HTML recognition (#11290: must start with <)\n\t// Shortcut simple #id case for speed\n\trquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]+))$/,\n\n\tinit = jQuery.fn.init = function( selector, context, root ) {\n\t\tvar match, elem;\n\n\t\t// HANDLE: $(\"\"), $(null), $(undefined), $(false)\n\t\tif ( !selector ) {\n\t\t\treturn this;\n\t\t}\n\n\t\t// Method init() accepts an alternate rootjQuery\n\t\t// so migrate can support jQuery.sub (gh-2101)\n\t\troot = root || rootjQuery;\n\n\t\t// Handle HTML strings\n\t\tif ( typeof selector === \"string\" ) {\n\t\t\tif ( selector[ 0 ] === \"<\" &&\n\t\t\t\tselector[ selector.length - 1 ] === \">\" &&\n\t\t\t\tselector.length >= 3 ) {\n\n\t\t\t\t// Assume that strings that start and end with <> are HTML and skip the regex check\n\t\t\t\tmatch = [ null, selector, null ];\n\n\t\t\t} else {\n\t\t\t\tmatch = rquickExpr.exec( selector );\n\t\t\t}\n\n\t\t\t// Match html or make sure no context is specified for #id\n\t\t\tif ( match && ( match[ 1 ] || !context ) ) {\n\n\t\t\t\t// HANDLE: $(html) -> $(array)\n\t\t\t\tif ( match[ 1 ] ) {\n\t\t\t\t\tcontext = context instanceof jQuery ? context[ 0 ] : context;\n\n\t\t\t\t\t// Option to run scripts is true for back-compat\n\t\t\t\t\t// Intentionally let the error be thrown if parseHTML is not present\n\t\t\t\t\tjQuery.merge( this, jQuery.parseHTML(\n\t\t\t\t\t\tmatch[ 1 ],\n\t\t\t\t\t\tcontext && context.nodeType ? context.ownerDocument || context : document,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t) );\n\n\t\t\t\t\t// HANDLE: $(html, props)\n\t\t\t\t\tif ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {\n\t\t\t\t\t\tfor ( match in context ) {\n\n\t\t\t\t\t\t\t// Properties of context are called as methods if possible\n\t\t\t\t\t\t\tif ( isFunction( this[ match ] ) ) {\n\t\t\t\t\t\t\t\tthis[ match ]( context[ match ] );\n\n\t\t\t\t\t\t\t// ...and otherwise set as attributes\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.attr( match, context[ match ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn this;\n\n\t\t\t\t// HANDLE: $(#id)\n\t\t\t\t} else {\n\t\t\t\t\telem = document.getElementById( match[ 2 ] );\n\n\t\t\t\t\tif ( elem ) {\n\n\t\t\t\t\t\t// Inject the element directly into the jQuery object\n\t\t\t\t\t\tthis[ 0 ] = elem;\n\t\t\t\t\t\tthis.length = 1;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\n\t\t\t// HANDLE: $(expr, $(...))\n\t\t\t} else if ( !context || context.jquery ) {\n\t\t\t\treturn ( context || root ).find( selector );\n\n\t\t\t// HANDLE: $(expr, context)\n\t\t\t// (which is just equivalent to: $(context).find(expr)\n\t\t\t} else {\n\t\t\t\treturn this.constructor( context ).find( selector );\n\t\t\t}\n\n\t\t// HANDLE: $(DOMElement)\n\t\t} else if ( selector.nodeType ) {\n\t\t\tthis[ 0 ] = selector;\n\t\t\tthis.length = 1;\n\t\t\treturn this;\n\n\t\t// HANDLE: $(function)\n\t\t// Shortcut for document ready\n\t\t} else if ( isFunction( selector ) ) {\n\t\t\treturn root.ready !== undefined ?\n\t\t\t\troot.ready( selector ) :\n\n\t\t\t\t// Execute immediately if ready is not present\n\t\t\t\tselector( jQuery );\n\t\t}\n\n\t\treturn jQuery.makeArray( selector, this );\n\t};\n\n// Give the init function the jQuery prototype for later instantiation\ninit.prototype = jQuery.fn;\n\n// Initialize central reference\nrootjQuery = jQuery( document );\n\n\nvar rparentsprev = /^(?:parents|prev(?:Until|All))/,\n\n\t// Methods guaranteed to produce a unique set when starting from a unique set\n\tguaranteedUnique = {\n\t\tchildren: true,\n\t\tcontents: true,\n\t\tnext: true,\n\t\tprev: true\n\t};\n\njQuery.fn.extend( {\n\thas: function( target ) {\n\t\tvar targets = jQuery( target, this ),\n\t\t\tl = targets.length;\n\n\t\treturn this.filter( function() {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tif ( jQuery.contains( this, targets[ i ] ) ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\tclosest: function( selectors, context ) {\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\tl = this.length,\n\t\t\tmatched = [],\n\t\t\ttargets = typeof selectors !== \"string\" && jQuery( selectors );\n\n\t\t// Positional selectors never match, since there's no _selection_ context\n\t\tif ( !rneedsContext.test( selectors ) ) {\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tfor ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {\n\n\t\t\t\t\t// Always skip document fragments\n\t\t\t\t\tif ( cur.nodeType < 11 && ( targets ?\n\t\t\t\t\t\ttargets.index( cur ) > -1 :\n\n\t\t\t\t\t\t// Don't pass non-elements to Sizzle\n\t\t\t\t\t\tcur.nodeType === 1 &&\n\t\t\t\t\t\t\tjQuery.find.matchesSelector( cur, selectors ) ) ) {\n\n\t\t\t\t\t\tmatched.push( cur );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );\n\t},\n\n\t// Determine the position of an element within the set\n\tindex: function( elem ) {\n\n\t\t// No argument, return index in parent\n\t\tif ( !elem ) {\n\t\t\treturn ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;\n\t\t}\n\n\t\t// Index in selector\n\t\tif ( typeof elem === \"string\" ) {\n\t\t\treturn indexOf.call( jQuery( elem ), this[ 0 ] );\n\t\t}\n\n\t\t// Locate the position of the desired element\n\t\treturn indexOf.call( this,\n\n\t\t\t// If it receives a jQuery object, the first element is used\n\t\t\telem.jquery ? elem[ 0 ] : elem\n\t\t);\n\t},\n\n\tadd: function( selector, context ) {\n\t\treturn this.pushStack(\n\t\t\tjQuery.uniqueSort(\n\t\t\t\tjQuery.merge( this.get(), jQuery( selector, context ) )\n\t\t\t)\n\t\t);\n\t},\n\n\taddBack: function( selector ) {\n\t\treturn this.add( selector == null ?\n\t\t\tthis.prevObject : this.prevObject.filter( selector )\n\t\t);\n\t}\n} );\n\nfunction sibling( cur, dir ) {\n\twhile ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {}\n\treturn cur;\n}\n\njQuery.each( {\n\tparent: function( elem ) {\n\t\tvar parent = elem.parentNode;\n\t\treturn parent && parent.nodeType !== 11 ? parent : null;\n\t},\n\tparents: function( elem ) {\n\t\treturn dir( elem, \"parentNode\" );\n\t},\n\tparentsUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"parentNode\", until );\n\t},\n\tnext: function( elem ) {\n\t\treturn sibling( elem, \"nextSibling\" );\n\t},\n\tprev: function( elem ) {\n\t\treturn sibling( elem, \"previousSibling\" );\n\t},\n\tnextAll: function( elem ) {\n\t\treturn dir( elem, \"nextSibling\" );\n\t},\n\tprevAll: function( elem ) {\n\t\treturn dir( elem, \"previousSibling\" );\n\t},\n\tnextUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"nextSibling\", until );\n\t},\n\tprevUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"previousSibling\", until );\n\t},\n\tsiblings: function( elem ) {\n\t\treturn siblings( ( elem.parentNode || {} ).firstChild, elem );\n\t},\n\tchildren: function( elem ) {\n\t\treturn siblings( elem.firstChild );\n\t},\n\tcontents: function( elem ) {\n\t\tif ( elem.contentDocument != null &&\n\n\t\t\t// Support: IE 11+\n\t\t\t// <object> elements with no `data` attribute has an object\n\t\t\t// `contentDocument` with a `null` prototype.\n\t\t\tgetProto( elem.contentDocument ) ) {\n\n\t\t\treturn elem.contentDocument;\n\t\t}\n\n\t\t// Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only\n\t\t// Treat the template element as a regular one in browsers that\n\t\t// don't support it.\n\t\tif ( nodeName( elem, \"template\" ) ) {\n\t\t\telem = elem.content || elem;\n\t\t}\n\n\t\treturn jQuery.merge( [], elem.childNodes );\n\t}\n}, function( name, fn ) {\n\tjQuery.fn[ name ] = function( until, selector ) {\n\t\tvar matched = jQuery.map( this, fn, until );\n\n\t\tif ( name.slice( -5 ) !== \"Until\" ) {\n\t\t\tselector = until;\n\t\t}\n\n\t\tif ( selector && typeof selector === \"string\" ) {\n\t\t\tmatched = jQuery.filter( selector, matched );\n\t\t}\n\n\t\tif ( this.length > 1 ) {\n\n\t\t\t// Remove duplicates\n\t\t\tif ( !guaranteedUnique[ name ] ) {\n\t\t\t\tjQuery.uniqueSort( matched );\n\t\t\t}\n\n\t\t\t// Reverse order for parents* and prev-derivatives\n\t\t\tif ( rparentsprev.test( name ) ) {\n\t\t\t\tmatched.reverse();\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched );\n\t};\n} );\nvar rnothtmlwhite = ( /[^\\x20\\t\\r\\n\\f]+/g );\n\n\n\n// Convert String-formatted options into Object-formatted ones\nfunction createOptions( options ) {\n\tvar object = {};\n\tjQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) {\n\t\tobject[ flag ] = true;\n\t} );\n\treturn object;\n}\n\n/*\n * Create a callback list using the following parameters:\n *\n *\toptions: an optional list of space-separated options that will change how\n *\t\t\tthe callback list behaves or a more traditional option object\n *\n * By default a callback list will act like an event callback list and can be\n * \"fired\" multiple times.\n *\n * Possible options:\n *\n *\tonce:\t\t\twill ensure the callback list can only be fired once (like a Deferred)\n *\n *\tmemory:\t\t\twill keep track of previous values and will call any callback added\n *\t\t\t\t\tafter the list has been fired right away with the latest \"memorized\"\n *\t\t\t\t\tvalues (like a Deferred)\n *\n *\tunique:\t\t\twill ensure a callback can only be added once (no duplicate in the list)\n *\n *\tstopOnFalse:\tinterrupt callings when a callback returns false\n *\n */\njQuery.Callbacks = function( options ) {\n\n\t// Convert options from String-formatted to Object-formatted if needed\n\t// (we check in cache first)\n\toptions = typeof options === \"string\" ?\n\t\tcreateOptions( options ) :\n\t\tjQuery.extend( {}, options );\n\n\tvar // Flag to know if list is currently firing\n\t\tfiring,\n\n\t\t// Last fire value for non-forgettable lists\n\t\tmemory,\n\n\t\t// Flag to know if list was already fired\n\t\tfired,\n\n\t\t// Flag to prevent firing\n\t\tlocked,\n\n\t\t// Actual callback list\n\t\tlist = [],\n\n\t\t// Queue of execution data for repeatable lists\n\t\tqueue = [],\n\n\t\t// Index of currently firing callback (modified by add/remove as needed)\n\t\tfiringIndex = -1,\n\n\t\t// Fire callbacks\n\t\tfire = function() {\n\n\t\t\t// Enforce single-firing\n\t\t\tlocked = locked || options.once;\n\n\t\t\t// Execute callbacks for all pending executions,\n\t\t\t// respecting firingIndex overrides and runtime changes\n\t\t\tfired = firing = true;\n\t\t\tfor ( ; queue.length; firingIndex = -1 ) {\n\t\t\t\tmemory = queue.shift();\n\t\t\t\twhile ( ++firingIndex < list.length ) {\n\n\t\t\t\t\t// Run callback and check for early termination\n\t\t\t\t\tif ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&\n\t\t\t\t\t\toptions.stopOnFalse ) {\n\n\t\t\t\t\t\t// Jump to end and forget the data so .add doesn't re-fire\n\t\t\t\t\t\tfiringIndex = list.length;\n\t\t\t\t\t\tmemory = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Forget the data if we're done with it\n\t\t\tif ( !options.memory ) {\n\t\t\t\tmemory = false;\n\t\t\t}\n\n\t\t\tfiring = false;\n\n\t\t\t// Clean up if we're done firing for good\n\t\t\tif ( locked ) {\n\n\t\t\t\t// Keep an empty list if we have data for future add calls\n\t\t\t\tif ( memory ) {\n\t\t\t\t\tlist = [];\n\n\t\t\t\t// Otherwise, this object is spent\n\t\t\t\t} else {\n\t\t\t\t\tlist = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t// Actual Callbacks object\n\t\tself = {\n\n\t\t\t// Add a callback or a collection of callbacks to the list\n\t\t\tadd: function() {\n\t\t\t\tif ( list ) {\n\n\t\t\t\t\t// If we have memory from a past run, we should fire after adding\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfiringIndex = list.length - 1;\n\t\t\t\t\t\tqueue.push( memory );\n\t\t\t\t\t}\n\n\t\t\t\t\t( function add( args ) {\n\t\t\t\t\t\tjQuery.each( args, function( _, arg ) {\n\t\t\t\t\t\t\tif ( isFunction( arg ) ) {\n\t\t\t\t\t\t\t\tif ( !options.unique || !self.has( arg ) ) {\n\t\t\t\t\t\t\t\t\tlist.push( arg );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if ( arg && arg.length && toType( arg ) !== \"string\" ) {\n\n\t\t\t\t\t\t\t\t// Inspect recursively\n\t\t\t\t\t\t\t\tadd( arg );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} );\n\t\t\t\t\t} )( arguments );\n\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Remove a callback from the list\n\t\t\tremove: function() {\n\t\t\t\tjQuery.each( arguments, function( _, arg ) {\n\t\t\t\t\tvar index;\n\t\t\t\t\twhile ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {\n\t\t\t\t\t\tlist.splice( index, 1 );\n\n\t\t\t\t\t\t// Handle firing indexes\n\t\t\t\t\t\tif ( index <= firingIndex ) {\n\t\t\t\t\t\t\tfiringIndex--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Check if a given callback is in the list.\n\t\t\t// If no argument is given, return whether or not list has callbacks attached.\n\t\t\thas: function( fn ) {\n\t\t\t\treturn fn ?\n\t\t\t\t\tjQuery.inArray( fn, list ) > -1 :\n\t\t\t\t\tlist.length > 0;\n\t\t\t},\n\n\t\t\t// Remove all callbacks from the list\n\t\t\tempty: function() {\n\t\t\t\tif ( list ) {\n\t\t\t\t\tlist = [];\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Disable .fire and .add\n\t\t\t// Abort any current/pending executions\n\t\t\t// Clear all callbacks and values\n\t\t\tdisable: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tlist = memory = \"\";\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tdisabled: function() {\n\t\t\t\treturn !list;\n\t\t\t},\n\n\t\t\t// Disable .fire\n\t\t\t// Also disable .add unless we have memory (since it would have no effect)\n\t\t\t// Abort any pending executions\n\t\t\tlock: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tif ( !memory && !firing ) {\n\t\t\t\t\tlist = memory = \"\";\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tlocked: function() {\n\t\t\t\treturn !!locked;\n\t\t\t},\n\n\t\t\t// Call all callbacks with the given context and arguments\n\t\t\tfireWith: function( context, args ) {\n\t\t\t\tif ( !locked ) {\n\t\t\t\t\targs = args || [];\n\t\t\t\t\targs = [ context, args.slice ? args.slice() : args ];\n\t\t\t\t\tqueue.push( args );\n\t\t\t\t\tif ( !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Call all the callbacks with the given arguments\n\t\t\tfire: function() {\n\t\t\t\tself.fireWith( this, arguments );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// To know if the callbacks have already been called at least once\n\t\t\tfired: function() {\n\t\t\t\treturn !!fired;\n\t\t\t}\n\t\t};\n\n\treturn self;\n};\n\n\nfunction Identity( v ) {\n\treturn v;\n}\nfunction Thrower( ex ) {\n\tthrow ex;\n}\n\nfunction adoptValue( value, resolve, reject, noValue ) {\n\tvar method;\n\n\ttry {\n\n\t\t// Check for promise aspect first to privilege synchronous behavior\n\t\tif ( value && isFunction( ( method = value.promise ) ) ) {\n\t\t\tmethod.call( value ).done( resolve ).fail( reject );\n\n\t\t// Other thenables\n\t\t} else if ( value && isFunction( ( method = value.then ) ) ) {\n\t\t\tmethod.call( value, resolve, reject );\n\n\t\t// Other non-thenables\n\t\t} else {\n\n\t\t\t// Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:\n\t\t\t// * false: [ value ].slice( 0 ) => resolve( value )\n\t\t\t// * true: [ value ].slice( 1 ) => resolve()\n\t\t\tresolve.apply( undefined, [ value ].slice( noValue ) );\n\t\t}\n\n\t// For Promises/A+, convert exceptions into rejections\n\t// Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in\n\t// Deferred#then to conditionally suppress rejection.\n\t} catch ( value ) {\n\n\t\t// Support: Android 4.0 only\n\t\t// Strict mode functions invoked without .call/.apply get global-object context\n\t\treject.apply( undefined, [ value ] );\n\t}\n}\n\njQuery.extend( {\n\n\tDeferred: function( func ) {\n\t\tvar tuples = [\n\n\t\t\t\t// action, add listener, callbacks,\n\t\t\t\t// ... .then handlers, argument index, [final state]\n\t\t\t\t[ \"notify\", \"progress\", jQuery.Callbacks( \"memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"memory\" ), 2 ],\n\t\t\t\t[ \"resolve\", \"done\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 0, \"resolved\" ],\n\t\t\t\t[ \"reject\", \"fail\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 1, \"rejected\" ]\n\t\t\t],\n\t\t\tstate = \"pending\",\n\t\t\tpromise = {\n\t\t\t\tstate: function() {\n\t\t\t\t\treturn state;\n\t\t\t\t},\n\t\t\t\talways: function() {\n\t\t\t\t\tdeferred.done( arguments ).fail( arguments );\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\t\"catch\": function( fn ) {\n\t\t\t\t\treturn promise.then( null, fn );\n\t\t\t\t},\n\n\t\t\t\t// Keep pipe for back-compat\n\t\t\t\tpipe: function( /* fnDone, fnFail, fnProgress */ ) {\n\t\t\t\t\tvar fns = arguments;\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\t\t\t\t\t\tjQuery.each( tuples, function( _i, tuple ) {\n\n\t\t\t\t\t\t\t// Map tuples (progress, done, fail) to arguments (done, fail, progress)\n\t\t\t\t\t\t\tvar fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ];\n\n\t\t\t\t\t\t\t// deferred.progress(function() { bind to newDefer or newDefer.notify })\n\t\t\t\t\t\t\t// deferred.done(function() { bind to newDefer or newDefer.resolve })\n\t\t\t\t\t\t\t// deferred.fail(function() { bind to newDefer or newDefer.reject })\n\t\t\t\t\t\t\tdeferred[ tuple[ 1 ] ]( function() {\n\t\t\t\t\t\t\t\tvar returned = fn && fn.apply( this, arguments );\n\t\t\t\t\t\t\t\tif ( returned && isFunction( returned.promise ) ) {\n\t\t\t\t\t\t\t\t\treturned.promise()\n\t\t\t\t\t\t\t\t\t\t.progress( newDefer.notify )\n\t\t\t\t\t\t\t\t\t\t.done( newDefer.resolve )\n\t\t\t\t\t\t\t\t\t\t.fail( newDefer.reject );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tnewDefer[ tuple[ 0 ] + \"With\" ](\n\t\t\t\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t\t\t\tfn ? [ returned ] : arguments\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t} );\n\t\t\t\t\t\tfns = null;\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\t\t\t\tthen: function( onFulfilled, onRejected, onProgress ) {\n\t\t\t\t\tvar maxDepth = 0;\n\t\t\t\t\tfunction resolve( depth, deferred, handler, special ) {\n\t\t\t\t\t\treturn function() {\n\t\t\t\t\t\t\tvar that = this,\n\t\t\t\t\t\t\t\targs = arguments,\n\t\t\t\t\t\t\t\tmightThrow = function() {\n\t\t\t\t\t\t\t\t\tvar returned, then;\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.3\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-59\n\t\t\t\t\t\t\t\t\t// Ignore double-resolution attempts\n\t\t\t\t\t\t\t\t\tif ( depth < maxDepth ) {\n\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\treturned = handler.apply( that, args );\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.1\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-48\n\t\t\t\t\t\t\t\t\tif ( returned === deferred.promise() ) {\n\t\t\t\t\t\t\t\t\t\tthrow new TypeError( \"Thenable self-resolution\" );\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ sections 2.3.3.1, 3.5\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-54\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-75\n\t\t\t\t\t\t\t\t\t// Retrieve `then` only once\n\t\t\t\t\t\t\t\t\tthen = returned &&\n\n\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.4\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-64\n\t\t\t\t\t\t\t\t\t\t// Only check objects and functions for thenability\n\t\t\t\t\t\t\t\t\t\t( typeof returned === \"object\" ||\n\t\t\t\t\t\t\t\t\t\t\ttypeof returned === \"function\" ) &&\n\t\t\t\t\t\t\t\t\t\treturned.then;\n\n\t\t\t\t\t\t\t\t\t// Handle a returned thenable\n\t\t\t\t\t\t\t\t\tif ( isFunction( then ) ) {\n\n\t\t\t\t\t\t\t\t\t\t// Special processors (notify) just wait for resolution\n\t\t\t\t\t\t\t\t\t\tif ( special ) {\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special )\n\t\t\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\t\t// Normal processors (resolve) also hook into progress\n\t\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t\t// ...and disregard older resolution values\n\t\t\t\t\t\t\t\t\t\t\tmaxDepth++;\n\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity,\n\t\t\t\t\t\t\t\t\t\t\t\t\tdeferred.notifyWith )\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Handle all other returned values\n\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\tif ( handler !== Identity ) {\n\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\targs = [ returned ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t// Process the value(s)\n\t\t\t\t\t\t\t\t\t\t// Default process is resolve\n\t\t\t\t\t\t\t\t\t\t( special || deferred.resolveWith )( that, args );\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\n\t\t\t\t\t\t\t\t// Only normal processors (resolve) catch and reject exceptions\n\t\t\t\t\t\t\t\tprocess = special ?\n\t\t\t\t\t\t\t\t\tmightThrow :\n\t\t\t\t\t\t\t\t\tfunction() {\n\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\tmightThrow();\n\t\t\t\t\t\t\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t\t\t\t\t\t\tif ( jQuery.Deferred.exceptionHook ) {\n\t\t\t\t\t\t\t\t\t\t\t\tjQuery.Deferred.exceptionHook( e,\n\t\t\t\t\t\t\t\t\t\t\t\t\tprocess.stackTrace );\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.4.1\n\t\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-61\n\t\t\t\t\t\t\t\t\t\t\t// Ignore post-resolution exceptions\n\t\t\t\t\t\t\t\t\t\t\tif ( depth + 1 >= maxDepth ) {\n\n\t\t\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\t\t\tif ( handler !== Thrower ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\t\t\targs = [ e ];\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\tdeferred.rejectWith( that, args );\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.1\n\t\t\t\t\t\t\t// https://promisesaplus.com/#point-57\n\t\t\t\t\t\t\t// Re-resolve promises immediately to dodge false rejection from\n\t\t\t\t\t\t\t// subsequent errors\n\t\t\t\t\t\t\tif ( depth ) {\n\t\t\t\t\t\t\t\tprocess();\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// Call an optional hook to record the stack, in case of exception\n\t\t\t\t\t\t\t\t// since it's otherwise lost when execution goes async\n\t\t\t\t\t\t\t\tif ( jQuery.Deferred.getStackHook ) {\n\t\t\t\t\t\t\t\t\tprocess.stackTrace = jQuery.Deferred.getStackHook();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\twindow.setTimeout( process );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\n\t\t\t\t\t\t// progress_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 0 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onProgress ) ?\n\t\t\t\t\t\t\t\t\tonProgress :\n\t\t\t\t\t\t\t\t\tIdentity,\n\t\t\t\t\t\t\t\tnewDefer.notifyWith\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// fulfilled_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 1 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onFulfilled ) ?\n\t\t\t\t\t\t\t\t\tonFulfilled :\n\t\t\t\t\t\t\t\t\tIdentity\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// rejected_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 2 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onRejected ) ?\n\t\t\t\t\t\t\t\t\tonRejected :\n\t\t\t\t\t\t\t\t\tThrower\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\n\t\t\t\t// Get a promise for this deferred\n\t\t\t\t// If obj is provided, the promise aspect is added to the object\n\t\t\t\tpromise: function( obj ) {\n\t\t\t\t\treturn obj != null ? jQuery.extend( obj, promise ) : promise;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdeferred = {};\n\n\t\t// Add list-specific methods\n\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\tvar list = tuple[ 2 ],\n\t\t\t\tstateString = tuple[ 5 ];\n\n\t\t\t// promise.progress = list.add\n\t\t\t// promise.done = list.add\n\t\t\t// promise.fail = list.add\n\t\t\tpromise[ tuple[ 1 ] ] = list.add;\n\n\t\t\t// Handle state\n\t\t\tif ( stateString ) {\n\t\t\t\tlist.add(\n\t\t\t\t\tfunction() {\n\n\t\t\t\t\t\t// state = \"resolved\" (i.e., fulfilled)\n\t\t\t\t\t\t// state = \"rejected\"\n\t\t\t\t\t\tstate = stateString;\n\t\t\t\t\t},\n\n\t\t\t\t\t// rejected_callbacks.disable\n\t\t\t\t\t// fulfilled_callbacks.disable\n\t\t\t\t\ttuples[ 3 - i ][ 2 ].disable,\n\n\t\t\t\t\t// rejected_handlers.disable\n\t\t\t\t\t// fulfilled_handlers.disable\n\t\t\t\t\ttuples[ 3 - i ][ 3 ].disable,\n\n\t\t\t\t\t// progress_callbacks.lock\n\t\t\t\t\ttuples[ 0 ][ 2 ].lock,\n\n\t\t\t\t\t// progress_handlers.lock\n\t\t\t\t\ttuples[ 0 ][ 3 ].lock\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// progress_handlers.fire\n\t\t\t// fulfilled_handlers.fire\n\t\t\t// rejected_handlers.fire\n\t\t\tlist.add( tuple[ 3 ].fire );\n\n\t\t\t// deferred.notify = function() { deferred.notifyWith(...) }\n\t\t\t// deferred.resolve = function() { deferred.resolveWith(...) }\n\t\t\t// deferred.reject = function() { deferred.rejectWith(...) }\n\t\t\tdeferred[ tuple[ 0 ] ] = function() {\n\t\t\t\tdeferred[ tuple[ 0 ] + \"With\" ]( this === deferred ? undefined : this, arguments );\n\t\t\t\treturn this;\n\t\t\t};\n\n\t\t\t// deferred.notifyWith = list.fireWith\n\t\t\t// deferred.resolveWith = list.fireWith\n\t\t\t// deferred.rejectWith = list.fireWith\n\t\t\tdeferred[ tuple[ 0 ] + \"With\" ] = list.fireWith;\n\t\t} );\n\n\t\t// Make the deferred a promise\n\t\tpromise.promise( deferred );\n\n\t\t// Call given func if any\n\t\tif ( func ) {\n\t\t\tfunc.call( deferred, deferred );\n\t\t}\n\n\t\t// All done!\n\t\treturn deferred;\n\t},\n\n\t// Deferred helper\n\twhen: function( singleValue ) {\n\t\tvar\n\n\t\t\t// count of uncompleted subordinates\n\t\t\tremaining = arguments.length,\n\n\t\t\t// count of unprocessed arguments\n\t\t\ti = remaining,\n\n\t\t\t// subordinate fulfillment data\n\t\t\tresolveContexts = Array( i ),\n\t\t\tresolveValues = slice.call( arguments ),\n\n\t\t\t// the primary Deferred\n\t\t\tprimary = jQuery.Deferred(),\n\n\t\t\t// subordinate callback factory\n\t\t\tupdateFunc = function( i ) {\n\t\t\t\treturn function( value ) {\n\t\t\t\t\tresolveContexts[ i ] = this;\n\t\t\t\t\tresolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;\n\t\t\t\t\tif ( !( --remaining ) ) {\n\t\t\t\t\t\tprimary.resolveWith( resolveContexts, resolveValues );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t};\n\n\t\t// Single- and empty arguments are adopted like Promise.resolve\n\t\tif ( remaining <= 1 ) {\n\t\t\tadoptValue( singleValue, primary.done( updateFunc( i ) ).resolve, primary.reject,\n\t\t\t\t!remaining );\n\n\t\t\t// Use .then() to unwrap secondary thenables (cf. gh-3000)\n\t\t\tif ( primary.state() === \"pending\" ||\n\t\t\t\tisFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) {\n\n\t\t\t\treturn primary.then();\n\t\t\t}\n\t\t}\n\n\t\t// Multiple arguments are aggregated like Promise.all array elements\n\t\twhile ( i-- ) {\n\t\t\tadoptValue( resolveValues[ i ], updateFunc( i ), primary.reject );\n\t\t}\n\n\t\treturn primary.promise();\n\t}\n} );\n\n\n// These usually indicate a programmer mistake during development,\n// warn about them ASAP rather than swallowing them by default.\nvar rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;\n\njQuery.Deferred.exceptionHook = function( error, stack ) {\n\n\t// Support: IE 8 - 9 only\n\t// Console exists when dev tools are open, which can happen at any time\n\tif ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) {\n\t\twindow.console.warn( \"jQuery.Deferred exception: \" + error.message, error.stack, stack );\n\t}\n};\n\n\n\n\njQuery.readyException = function( error ) {\n\twindow.setTimeout( function() {\n\t\tthrow error;\n\t} );\n};\n\n\n\n\n// The deferred used on DOM ready\nvar readyList = jQuery.Deferred();\n\njQuery.fn.ready = function( fn ) {\n\n\treadyList\n\t\t.then( fn )\n\n\t\t// Wrap jQuery.readyException in a function so that the lookup\n\t\t// happens at the time of error handling instead of callback\n\t\t// registration.\n\t\t.catch( function( error ) {\n\t\t\tjQuery.readyException( error );\n\t\t} );\n\n\treturn this;\n};\n\njQuery.extend( {\n\n\t// Is the DOM ready to be used? Set to true once it occurs.\n\tisReady: false,\n\n\t// A counter to track how many items to wait for before\n\t// the ready event fires. See #6781\n\treadyWait: 1,\n\n\t// Handle when the DOM is ready\n\tready: function( wait ) {\n\n\t\t// Abort if there are pending holds or we're already ready\n\t\tif ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Remember that the DOM is ready\n\t\tjQuery.isReady = true;\n\n\t\t// If a normal DOM Ready event fired, decrement, and wait if need be\n\t\tif ( wait !== true && --jQuery.readyWait > 0 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If there are functions bound, to execute\n\t\treadyList.resolveWith( document, [ jQuery ] );\n\t}\n} );\n\njQuery.ready.then = readyList.then;\n\n// The ready event handler and self cleanup method\nfunction completed() {\n\tdocument.removeEventListener( \"DOMContentLoaded\", completed );\n\twindow.removeEventListener( \"load\", completed );\n\tjQuery.ready();\n}\n\n// Catch cases where $(document).ready() is called\n// after the browser event has already occurred.\n// Support: IE <=9 - 10 only\n// Older IE sometimes signals \"interactive\" too soon\nif ( document.readyState === \"complete\" ||\n\t( document.readyState !== \"loading\" && !document.documentElement.doScroll ) ) {\n\n\t// Handle it asynchronously to allow scripts the opportunity to delay ready\n\twindow.setTimeout( jQuery.ready );\n\n} else {\n\n\t// Use the handy event callback\n\tdocument.addEventListener( \"DOMContentLoaded\", completed );\n\n\t// A fallback to window.onload, that will always work\n\twindow.addEventListener( \"load\", completed );\n}\n\n\n\n\n// Multifunctional method to get and set values of a collection\n// The value/s can optionally be executed if it's a function\nvar access = function( elems, fn, key, value, chainable, emptyGet, raw ) {\n\tvar i = 0,\n\t\tlen = elems.length,\n\t\tbulk = key == null;\n\n\t// Sets many values\n\tif ( toType( key ) === \"object\" ) {\n\t\tchainable = true;\n\t\tfor ( i in key ) {\n\t\t\taccess( elems, fn, i, key[ i ], true, emptyGet, raw );\n\t\t}\n\n\t// Sets one value\n\t} else if ( value !== undefined ) {\n\t\tchainable = true;\n\n\t\tif ( !isFunction( value ) ) {\n\t\t\traw = true;\n\t\t}\n\n\t\tif ( bulk ) {\n\n\t\t\t// Bulk operations run against the entire set\n\t\t\tif ( raw ) {\n\t\t\t\tfn.call( elems, value );\n\t\t\t\tfn = null;\n\n\t\t\t// ...except when executing function values\n\t\t\t} else {\n\t\t\t\tbulk = fn;\n\t\t\t\tfn = function( elem, _key, value ) {\n\t\t\t\t\treturn bulk.call( jQuery( elem ), value );\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tif ( fn ) {\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\tfn(\n\t\t\t\t\telems[ i ], key, raw ?\n\t\t\t\t\t\tvalue :\n\t\t\t\t\t\tvalue.call( elems[ i ], i, fn( elems[ i ], key ) )\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( chainable ) {\n\t\treturn elems;\n\t}\n\n\t// Gets\n\tif ( bulk ) {\n\t\treturn fn.call( elems );\n\t}\n\n\treturn len ? fn( elems[ 0 ], key ) : emptyGet;\n};\n\n\n// Matches dashed string for camelizing\nvar rmsPrefix = /^-ms-/,\n\trdashAlpha = /-([a-z])/g;\n\n// Used by camelCase as callback to replace()\nfunction fcamelCase( _all, letter ) {\n\treturn letter.toUpperCase();\n}\n\n// Convert dashed to camelCase; used by the css and data modules\n// Support: IE <=9 - 11, Edge 12 - 15\n// Microsoft forgot to hump their vendor prefix (#9572)\nfunction camelCase( string ) {\n\treturn string.replace( rmsPrefix, \"ms-\" ).replace( rdashAlpha, fcamelCase );\n}\nvar acceptData = function( owner ) {\n\n\t// Accepts only:\n\t// - Node\n\t// - Node.ELEMENT_NODE\n\t// - Node.DOCUMENT_NODE\n\t// - Object\n\t// - Any\n\treturn owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );\n};\n\n\n\n\nfunction Data() {\n\tthis.expando = jQuery.expando + Data.uid++;\n}\n\nData.uid = 1;\n\nData.prototype = {\n\n\tcache: function( owner ) {\n\n\t\t// Check if the owner object already has a cache\n\t\tvar value = owner[ this.expando ];\n\n\t\t// If not, create one\n\t\tif ( !value ) {\n\t\t\tvalue = {};\n\n\t\t\t// We can accept data for non-element nodes in modern browsers,\n\t\t\t// but we should not, see #8335.\n\t\t\t// Always return an empty object.\n\t\t\tif ( acceptData( owner ) ) {\n\n\t\t\t\t// If it is a node unlikely to be stringify-ed or looped over\n\t\t\t\t// use plain assignment\n\t\t\t\tif ( owner.nodeType ) {\n\t\t\t\t\towner[ this.expando ] = value;\n\n\t\t\t\t// Otherwise secure it in a non-enumerable property\n\t\t\t\t// configurable must be true to allow the property to be\n\t\t\t\t// deleted when data is removed\n\t\t\t\t} else {\n\t\t\t\t\tObject.defineProperty( owner, this.expando, {\n\t\t\t\t\t\tvalue: value,\n\t\t\t\t\t\tconfigurable: true\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn value;\n\t},\n\tset: function( owner, data, value ) {\n\t\tvar prop,\n\t\t\tcache = this.cache( owner );\n\n\t\t// Handle: [ owner, key, value ] args\n\t\t// Always use camelCase key (gh-2257)\n\t\tif ( typeof data === \"string\" ) {\n\t\t\tcache[ camelCase( data ) ] = value;\n\n\t\t// Handle: [ owner, { properties } ] args\n\t\t} else {\n\n\t\t\t// Copy the properties one-by-one to the cache object\n\t\t\tfor ( prop in data ) {\n\t\t\t\tcache[ camelCase( prop ) ] = data[ prop ];\n\t\t\t}\n\t\t}\n\t\treturn cache;\n\t},\n\tget: function( owner, key ) {\n\t\treturn key === undefined ?\n\t\t\tthis.cache( owner ) :\n\n\t\t\t// Always use camelCase key (gh-2257)\n\t\t\towner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ];\n\t},\n\taccess: function( owner, key, value ) {\n\n\t\t// In cases where either:\n\t\t//\n\t\t// 1. No key was specified\n\t\t// 2. A string key was specified, but no value provided\n\t\t//\n\t\t// Take the \"read\" path and allow the get method to determine\n\t\t// which value to return, respectively either:\n\t\t//\n\t\t// 1. The entire cache object\n\t\t// 2. The data stored at the key\n\t\t//\n\t\tif ( key === undefined ||\n\t\t\t\t( ( key && typeof key === \"string\" ) && value === undefined ) ) {\n\n\t\t\treturn this.get( owner, key );\n\t\t}\n\n\t\t// When the key is not a string, or both a key and value\n\t\t// are specified, set or extend (existing objects) with either:\n\t\t//\n\t\t// 1. An object of properties\n\t\t// 2. A key and value\n\t\t//\n\t\tthis.set( owner, key, value );\n\n\t\t// Since the \"set\" path can have two possible entry points\n\t\t// return the expected data based on which path was taken[*]\n\t\treturn value !== undefined ? value : key;\n\t},\n\tremove: function( owner, key ) {\n\t\tvar i,\n\t\t\tcache = owner[ this.expando ];\n\n\t\tif ( cache === undefined ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( key !== undefined ) {\n\n\t\t\t// Support array or space separated string of keys\n\t\t\tif ( Array.isArray( key ) ) {\n\n\t\t\t\t// If key is an array of keys...\n\t\t\t\t// We always set camelCase keys, so remove that.\n\t\t\t\tkey = key.map( camelCase );\n\t\t\t} else {\n\t\t\t\tkey = camelCase( key );\n\n\t\t\t\t// If a key with the spaces exists, use it.\n\t\t\t\t// Otherwise, create an array by matching non-whitespace\n\t\t\t\tkey = key in cache ?\n\t\t\t\t\t[ key ] :\n\t\t\t\t\t( key.match( rnothtmlwhite ) || [] );\n\t\t\t}\n\n\t\t\ti = key.length;\n\n\t\t\twhile ( i-- ) {\n\t\t\t\tdelete cache[ key[ i ] ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove the expando if there's no more data\n\t\tif ( key === undefined || jQuery.isEmptyObject( cache ) ) {\n\n\t\t\t// Support: Chrome <=35 - 45\n\t\t\t// Webkit & Blink performance suffers when deleting properties\n\t\t\t// from DOM nodes, so set to undefined instead\n\t\t\t// https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)\n\t\t\tif ( owner.nodeType ) {\n\t\t\t\towner[ this.expando ] = undefined;\n\t\t\t} else {\n\t\t\t\tdelete owner[ this.expando ];\n\t\t\t}\n\t\t}\n\t},\n\thasData: function( owner ) {\n\t\tvar cache = owner[ this.expando ];\n\t\treturn cache !== undefined && !jQuery.isEmptyObject( cache );\n\t}\n};\nvar dataPriv = new Data();\n\nvar dataUser = new Data();\n\n\n\n//\tImplementation Summary\n//\n//\t1. Enforce API surface and semantic compatibility with 1.9.x branch\n//\t2. Improve the module's maintainability by reducing the storage\n//\t\tpaths to a single mechanism.\n//\t3. Use the same single mechanism to support \"private\" and \"user\" data.\n//\t4. _Never_ expose \"private\" data to user code (TODO: Drop _data, _removeData)\n//\t5. Avoid exposing implementation details on user objects (eg. expando properties)\n//\t6. Provide a clear path for implementation upgrade to WeakMap in 2014\n\nvar rbrace = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,\n\trmultiDash = /[A-Z]/g;\n\nfunction getData( data ) {\n\tif ( data === \"true\" ) {\n\t\treturn true;\n\t}\n\n\tif ( data === \"false\" ) {\n\t\treturn false;\n\t}\n\n\tif ( data === \"null\" ) {\n\t\treturn null;\n\t}\n\n\t// Only convert to a number if it doesn't change the string\n\tif ( data === +data + \"\" ) {\n\t\treturn +data;\n\t}\n\n\tif ( rbrace.test( data ) ) {\n\t\treturn JSON.parse( data );\n\t}\n\n\treturn data;\n}\n\nfunction dataAttr( elem, key, data ) {\n\tvar name;\n\n\t// If nothing was found internally, try to fetch any\n\t// data from the HTML5 data-* attribute\n\tif ( data === undefined && elem.nodeType === 1 ) {\n\t\tname = \"data-\" + key.replace( rmultiDash, \"-$&\" ).toLowerCase();\n\t\tdata = elem.getAttribute( name );\n\n\t\tif ( typeof data === \"string\" ) {\n\t\t\ttry {\n\t\t\t\tdata = getData( data );\n\t\t\t} catch ( e ) {}\n\n\t\t\t// Make sure we set the data so it isn't changed later\n\t\t\tdataUser.set( elem, key, data );\n\t\t} else {\n\t\t\tdata = undefined;\n\t\t}\n\t}\n\treturn data;\n}\n\njQuery.extend( {\n\thasData: function( elem ) {\n\t\treturn dataUser.hasData( elem ) || dataPriv.hasData( elem );\n\t},\n\n\tdata: function( elem, name, data ) {\n\t\treturn dataUser.access( elem, name, data );\n\t},\n\n\tremoveData: function( elem, name ) {\n\t\tdataUser.remove( elem, name );\n\t},\n\n\t// TODO: Now that all calls to _data and _removeData have been replaced\n\t// with direct calls to dataPriv methods, these can be deprecated.\n\t_data: function( elem, name, data ) {\n\t\treturn dataPriv.access( elem, name, data );\n\t},\n\n\t_removeData: function( elem, name ) {\n\t\tdataPriv.remove( elem, name );\n\t}\n} );\n\njQuery.fn.extend( {\n\tdata: function( key, value ) {\n\t\tvar i, name, data,\n\t\t\telem = this[ 0 ],\n\t\t\tattrs = elem && elem.attributes;\n\n\t\t// Gets all values\n\t\tif ( key === undefined ) {\n\t\t\tif ( this.length ) {\n\t\t\t\tdata = dataUser.get( elem );\n\n\t\t\t\tif ( elem.nodeType === 1 && !dataPriv.get( elem, \"hasDataAttrs\" ) ) {\n\t\t\t\t\ti = attrs.length;\n\t\t\t\t\twhile ( i-- ) {\n\n\t\t\t\t\t\t// Support: IE 11 only\n\t\t\t\t\t\t// The attrs elements can be null (#14894)\n\t\t\t\t\t\tif ( attrs[ i ] ) {\n\t\t\t\t\t\t\tname = attrs[ i ].name;\n\t\t\t\t\t\t\tif ( name.indexOf( \"data-\" ) === 0 ) {\n\t\t\t\t\t\t\t\tname = camelCase( name.slice( 5 ) );\n\t\t\t\t\t\t\t\tdataAttr( elem, name, data[ name ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.set( elem, \"hasDataAttrs\", true );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn data;\n\t\t}\n\n\t\t// Sets multiple values\n\t\tif ( typeof key === \"object\" ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tdataUser.set( this, key );\n\t\t\t} );\n\t\t}\n\n\t\treturn access( this, function( value ) {\n\t\t\tvar data;\n\n\t\t\t// The calling jQuery object (element matches) is not empty\n\t\t\t// (and therefore has an element appears at this[ 0 ]) and the\n\t\t\t// `value` parameter was not undefined. An empty jQuery object\n\t\t\t// will result in `undefined` for elem = this[ 0 ] which will\n\t\t\t// throw an exception if an attempt to read a data cache is made.\n\t\t\tif ( elem && value === undefined ) {\n\n\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t// The key will always be camelCased in Data\n\t\t\t\tdata = dataUser.get( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// Attempt to \"discover\" the data in\n\t\t\t\t// HTML5 custom data-* attrs\n\t\t\t\tdata = dataAttr( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// We tried really hard, but the data doesn't exist.\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Set the data...\n\t\t\tthis.each( function() {\n\n\t\t\t\t// We always store the camelCased key\n\t\t\t\tdataUser.set( this, key, value );\n\t\t\t} );\n\t\t}, null, value, arguments.length > 1, null, true );\n\t},\n\n\tremoveData: function( key ) {\n\t\treturn this.each( function() {\n\t\t\tdataUser.remove( this, key );\n\t\t} );\n\t}\n} );\n\n\njQuery.extend( {\n\tqueue: function( elem, type, data ) {\n\t\tvar queue;\n\n\t\tif ( elem ) {\n\t\t\ttype = ( type || \"fx\" ) + \"queue\";\n\t\t\tqueue = dataPriv.get( elem, type );\n\n\t\t\t// Speed up dequeue by getting out quickly if this is just a lookup\n\t\t\tif ( data ) {\n\t\t\t\tif ( !queue || Array.isArray( data ) ) {\n\t\t\t\t\tqueue = dataPriv.access( elem, type, jQuery.makeArray( data ) );\n\t\t\t\t} else {\n\t\t\t\t\tqueue.push( data );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn queue || [];\n\t\t}\n\t},\n\n\tdequeue: function( elem, type ) {\n\t\ttype = type || \"fx\";\n\n\t\tvar queue = jQuery.queue( elem, type ),\n\t\t\tstartLength = queue.length,\n\t\t\tfn = queue.shift(),\n\t\t\thooks = jQuery._queueHooks( elem, type ),\n\t\t\tnext = function() {\n\t\t\t\tjQuery.dequeue( elem, type );\n\t\t\t};\n\n\t\t// If the fx queue is dequeued, always remove the progress sentinel\n\t\tif ( fn === \"inprogress\" ) {\n\t\t\tfn = queue.shift();\n\t\t\tstartLength--;\n\t\t}\n\n\t\tif ( fn ) {\n\n\t\t\t// Add a progress sentinel to prevent the fx queue from being\n\t\t\t// automatically dequeued\n\t\t\tif ( type === \"fx\" ) {\n\t\t\t\tqueue.unshift( \"inprogress\" );\n\t\t\t}\n\n\t\t\t// Clear up the last queue stop function\n\t\t\tdelete hooks.stop;\n\t\t\tfn.call( elem, next, hooks );\n\t\t}\n\n\t\tif ( !startLength && hooks ) {\n\t\t\thooks.empty.fire();\n\t\t}\n\t},\n\n\t// Not public - generate a queueHooks object, or return the current one\n\t_queueHooks: function( elem, type ) {\n\t\tvar key = type + \"queueHooks\";\n\t\treturn dataPriv.get( elem, key ) || dataPriv.access( elem, key, {\n\t\t\tempty: jQuery.Callbacks( \"once memory\" ).add( function() {\n\t\t\t\tdataPriv.remove( elem, [ type + \"queue\", key ] );\n\t\t\t} )\n\t\t} );\n\t}\n} );\n\njQuery.fn.extend( {\n\tqueue: function( type, data ) {\n\t\tvar setter = 2;\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tdata = type;\n\t\t\ttype = \"fx\";\n\t\t\tsetter--;\n\t\t}\n\n\t\tif ( arguments.length < setter ) {\n\t\t\treturn jQuery.queue( this[ 0 ], type );\n\t\t}\n\n\t\treturn data === undefined ?\n\t\t\tthis :\n\t\t\tthis.each( function() {\n\t\t\t\tvar queue = jQuery.queue( this, type, data );\n\n\t\t\t\t// Ensure a hooks for this queue\n\t\t\t\tjQuery._queueHooks( this, type );\n\n\t\t\t\tif ( type === \"fx\" && queue[ 0 ] !== \"inprogress\" ) {\n\t\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t\t}\n\t\t\t} );\n\t},\n\tdequeue: function( type ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.dequeue( this, type );\n\t\t} );\n\t},\n\tclearQueue: function( type ) {\n\t\treturn this.queue( type || \"fx\", [] );\n\t},\n\n\t// Get a promise resolved when queues of a certain type\n\t// are emptied (fx is the type by default)\n\tpromise: function( type, obj ) {\n\t\tvar tmp,\n\t\t\tcount = 1,\n\t\t\tdefer = jQuery.Deferred(),\n\t\t\telements = this,\n\t\t\ti = this.length,\n\t\t\tresolve = function() {\n\t\t\t\tif ( !( --count ) ) {\n\t\t\t\t\tdefer.resolveWith( elements, [ elements ] );\n\t\t\t\t}\n\t\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tobj = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\ttype = type || \"fx\";\n\n\t\twhile ( i-- ) {\n\t\t\ttmp = dataPriv.get( elements[ i ], type + \"queueHooks\" );\n\t\t\tif ( tmp && tmp.empty ) {\n\t\t\t\tcount++;\n\t\t\t\ttmp.empty.add( resolve );\n\t\t\t}\n\t\t}\n\t\tresolve();\n\t\treturn defer.promise( obj );\n\t}\n} );\nvar pnum = ( /[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/ ).source;\n\nvar rcssNum = new RegExp( \"^(?:([+-])=|)(\" + pnum + \")([a-z%]*)$\", \"i\" );\n\n\nvar cssExpand = [ \"Top\", \"Right\", \"Bottom\", \"Left\" ];\n\nvar documentElement = document.documentElement;\n\n\n\n\tvar isAttached = function( elem ) {\n\t\t\treturn jQuery.contains( elem.ownerDocument, elem );\n\t\t},\n\t\tcomposed = { composed: true };\n\n\t// Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only\n\t// Check attachment across shadow DOM boundaries when possible (gh-3504)\n\t// Support: iOS 10.0-10.2 only\n\t// Early iOS 10 versions support `attachShadow` but not `getRootNode`,\n\t// leading to errors. We need to check for `getRootNode`.\n\tif ( documentElement.getRootNode ) {\n\t\tisAttached = function( elem ) {\n\t\t\treturn jQuery.contains( elem.ownerDocument, elem ) ||\n\t\t\t\telem.getRootNode( composed ) === elem.ownerDocument;\n\t\t};\n\t}\nvar isHiddenWithinTree = function( elem, el ) {\n\n\t\t// isHiddenWithinTree might be called from jQuery#filter function;\n\t\t// in that case, element will be second argument\n\t\telem = el || elem;\n\n\t\t// Inline style trumps all\n\t\treturn elem.style.display === \"none\" ||\n\t\t\telem.style.display === \"\" &&\n\n\t\t\t// Otherwise, check computed style\n\t\t\t// Support: Firefox <=43 - 45\n\t\t\t// Disconnected elements can have computed display: none, so first confirm that elem is\n\t\t\t// in the document.\n\t\t\tisAttached( elem ) &&\n\n\t\t\tjQuery.css( elem, \"display\" ) === \"none\";\n\t};\n\n\n\nfunction adjustCSS( elem, prop, valueParts, tween ) {\n\tvar adjusted, scale,\n\t\tmaxIterations = 20,\n\t\tcurrentValue = tween ?\n\t\t\tfunction() {\n\t\t\t\treturn tween.cur();\n\t\t\t} :\n\t\t\tfunction() {\n\t\t\t\treturn jQuery.css( elem, prop, \"\" );\n\t\t\t},\n\t\tinitial = currentValue(),\n\t\tunit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" ),\n\n\t\t// Starting value computation is required for potential unit mismatches\n\t\tinitialInUnit = elem.nodeType &&\n\t\t\t( jQuery.cssNumber[ prop ] || unit !== \"px\" && +initial ) &&\n\t\t\trcssNum.exec( jQuery.css( elem, prop ) );\n\n\tif ( initialInUnit && initialInUnit[ 3 ] !== unit ) {\n\n\t\t// Support: Firefox <=54\n\t\t// Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144)\n\t\tinitial = initial / 2;\n\n\t\t// Trust units reported by jQuery.css\n\t\tunit = unit || initialInUnit[ 3 ];\n\n\t\t// Iteratively approximate from a nonzero starting point\n\t\tinitialInUnit = +initial || 1;\n\n\t\twhile ( maxIterations-- ) {\n\n\t\t\t// Evaluate and update our best guess (doubling guesses that zero out).\n\t\t\t// Finish if the scale equals or crosses 1 (making the old*new product non-positive).\n\t\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\t\t\tif ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) {\n\t\t\t\tmaxIterations = 0;\n\t\t\t}\n\t\t\tinitialInUnit = initialInUnit / scale;\n\n\t\t}\n\n\t\tinitialInUnit = initialInUnit * 2;\n\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\n\t\t// Make sure we update the tween properties later on\n\t\tvalueParts = valueParts || [];\n\t}\n\n\tif ( valueParts ) {\n\t\tinitialInUnit = +initialInUnit || +initial || 0;\n\n\t\t// Apply relative offset (+=/-=) if specified\n\t\tadjusted = valueParts[ 1 ] ?\n\t\t\tinitialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :\n\t\t\t+valueParts[ 2 ];\n\t\tif ( tween ) {\n\t\t\ttween.unit = unit;\n\t\t\ttween.start = initialInUnit;\n\t\t\ttween.end = adjusted;\n\t\t}\n\t}\n\treturn adjusted;\n}\n\n\nvar defaultDisplayMap = {};\n\nfunction getDefaultDisplay( elem ) {\n\tvar temp,\n\t\tdoc = elem.ownerDocument,\n\t\tnodeName = elem.nodeName,\n\t\tdisplay = defaultDisplayMap[ nodeName ];\n\n\tif ( display ) {\n\t\treturn display;\n\t}\n\n\ttemp = doc.body.appendChild( doc.createElement( nodeName ) );\n\tdisplay = jQuery.css( temp, \"display\" );\n\n\ttemp.parentNode.removeChild( temp );\n\n\tif ( display === \"none\" ) {\n\t\tdisplay = \"block\";\n\t}\n\tdefaultDisplayMap[ nodeName ] = display;\n\n\treturn display;\n}\n\nfunction showHide( elements, show ) {\n\tvar display, elem,\n\t\tvalues = [],\n\t\tindex = 0,\n\t\tlength = elements.length;\n\n\t// Determine new display value for elements that need to change\n\tfor ( ; index < length; index++ ) {\n\t\telem = elements[ index ];\n\t\tif ( !elem.style ) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tdisplay = elem.style.display;\n\t\tif ( show ) {\n\n\t\t\t// Since we force visibility upon cascade-hidden elements, an immediate (and slow)\n\t\t\t// check is required in this first loop unless we have a nonempty display value (either\n\t\t\t// inline or about-to-be-restored)\n\t\t\tif ( display === \"none\" ) {\n\t\t\t\tvalues[ index ] = dataPriv.get( elem, \"display\" ) || null;\n\t\t\t\tif ( !values[ index ] ) {\n\t\t\t\t\telem.style.display = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( elem.style.display === \"\" && isHiddenWithinTree( elem ) ) {\n\t\t\t\tvalues[ index ] = getDefaultDisplay( elem );\n\t\t\t}\n\t\t} else {\n\t\t\tif ( display !== \"none\" ) {\n\t\t\t\tvalues[ index ] = \"none\";\n\n\t\t\t\t// Remember what we're overwriting\n\t\t\t\tdataPriv.set( elem, \"display\", display );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Set the display of the elements in a second loop to avoid constant reflow\n\tfor ( index = 0; index < length; index++ ) {\n\t\tif ( values[ index ] != null ) {\n\t\t\telements[ index ].style.display = values[ index ];\n\t\t}\n\t}\n\n\treturn elements;\n}\n\njQuery.fn.extend( {\n\tshow: function() {\n\t\treturn showHide( this, true );\n\t},\n\thide: function() {\n\t\treturn showHide( this );\n\t},\n\ttoggle: function( state ) {\n\t\tif ( typeof state === \"boolean\" ) {\n\t\t\treturn state ? this.show() : this.hide();\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tif ( isHiddenWithinTree( this ) ) {\n\t\t\t\tjQuery( this ).show();\n\t\t\t} else {\n\t\t\t\tjQuery( this ).hide();\n\t\t\t}\n\t\t} );\n\t}\n} );\nvar rcheckableType = ( /^(?:checkbox|radio)$/i );\n\nvar rtagName = ( /<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)/i );\n\nvar rscriptType = ( /^$|^module$|\\/(?:java|ecma)script/i );\n\n\n\n( function() {\n\tvar fragment = document.createDocumentFragment(),\n\t\tdiv = fragment.appendChild( document.createElement( \"div\" ) ),\n\t\tinput = document.createElement( \"input\" );\n\n\t// Support: Android 4.0 - 4.3 only\n\t// Check state lost if the name is set (#11217)\n\t// Support: Windows Web Apps (WWA)\n\t// `name` and `type` must use .setAttribute for WWA (#14901)\n\tinput.setAttribute( \"type\", \"radio\" );\n\tinput.setAttribute( \"checked\", \"checked\" );\n\tinput.setAttribute( \"name\", \"t\" );\n\n\tdiv.appendChild( input );\n\n\t// Support: Android <=4.1 only\n\t// Older WebKit doesn't clone checked state correctly in fragments\n\tsupport.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;\n\n\t// Support: IE <=11 only\n\t// Make sure textarea (and checkbox) defaultValue is properly cloned\n\tdiv.innerHTML = \"<textarea>x</textarea>\";\n\tsupport.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;\n\n\t// Support: IE <=9 only\n\t// IE <=9 replaces <option> tags with their contents when inserted outside of\n\t// the select element.\n\tdiv.innerHTML = \"<option></option>\";\n\tsupport.option = !!div.lastChild;\n} )();\n\n\n// We have to close these tags to support XHTML (#13200)\nvar wrapMap = {\n\n\t// XHTML parsers do not magically insert elements in the\n\t// same way that tag soup parsers do. So we cannot shorten\n\t// this by omitting <tbody> or other required elements.\n\tthead: [ 1, \"<table>\", \"</table>\" ],\n\tcol: [ 2, \"<table><colgroup>\", \"</colgroup></table>\" ],\n\ttr: [ 2, \"<table><tbody>\", \"</tbody></table>\" ],\n\ttd: [ 3, \"<table><tbody><tr>\", \"</tr></tbody></table>\" ],\n\n\t_default: [ 0, \"\", \"\" ]\n};\n\nwrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\nwrapMap.th = wrapMap.td;\n\n// Support: IE <=9 only\nif ( !support.option ) {\n\twrapMap.optgroup = wrapMap.option = [ 1, \"<select multiple='multiple'>\", \"</select>\" ];\n}\n\n\nfunction getAll( context, tag ) {\n\n\t// Support: IE <=9 - 11 only\n\t// Use typeof to avoid zero-argument method invocation on host objects (#15151)\n\tvar ret;\n\n\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\tret = context.getElementsByTagName( tag || \"*\" );\n\n\t} else if ( typeof context.querySelectorAll !== \"undefined\" ) {\n\t\tret = context.querySelectorAll( tag || \"*\" );\n\n\t} else {\n\t\tret = [];\n\t}\n\n\tif ( tag === undefined || tag && nodeName( context, tag ) ) {\n\t\treturn jQuery.merge( [ context ], ret );\n\t}\n\n\treturn ret;\n}\n\n\n// Mark scripts as having already been evaluated\nfunction setGlobalEval( elems, refElements ) {\n\tvar i = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\tdataPriv.set(\n\t\t\telems[ i ],\n\t\t\t\"globalEval\",\n\t\t\t!refElements || dataPriv.get( refElements[ i ], \"globalEval\" )\n\t\t);\n\t}\n}\n\n\nvar rhtml = /<|&#?\\w+;/;\n\nfunction buildFragment( elems, context, scripts, selection, ignored ) {\n\tvar elem, tmp, tag, wrap, attached, j,\n\t\tfragment = context.createDocumentFragment(),\n\t\tnodes = [],\n\t\ti = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\telem = elems[ i ];\n\n\t\tif ( elem || elem === 0 ) {\n\n\t\t\t// Add nodes directly\n\t\t\tif ( toType( elem ) === \"object\" ) {\n\n\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );\n\n\t\t\t// Convert non-html into a text node\n\t\t\t} else if ( !rhtml.test( elem ) ) {\n\t\t\t\tnodes.push( context.createTextNode( elem ) );\n\n\t\t\t// Convert html into DOM nodes\n\t\t\t} else {\n\t\t\t\ttmp = tmp || fragment.appendChild( context.createElement( \"div\" ) );\n\n\t\t\t\t// Deserialize a standard representation\n\t\t\t\ttag = ( rtagName.exec( elem ) || [ \"\", \"\" ] )[ 1 ].toLowerCase();\n\t\t\t\twrap = wrapMap[ tag ] || wrapMap._default;\n\t\t\t\ttmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ];\n\n\t\t\t\t// Descend through wrappers to the right content\n\t\t\t\tj = wrap[ 0 ];\n\t\t\t\twhile ( j-- ) {\n\t\t\t\t\ttmp = tmp.lastChild;\n\t\t\t\t}\n\n\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, tmp.childNodes );\n\n\t\t\t\t// Remember the top-level container\n\t\t\t\ttmp = fragment.firstChild;\n\n\t\t\t\t// Ensure the created nodes are orphaned (#12392)\n\t\t\t\ttmp.textContent = \"\";\n\t\t\t}\n\t\t}\n\t}\n\n\t// Remove wrapper from fragment\n\tfragment.textContent = \"\";\n\n\ti = 0;\n\twhile ( ( elem = nodes[ i++ ] ) ) {\n\n\t\t// Skip elements already in the context collection (trac-4087)\n\t\tif ( selection && jQuery.inArray( elem, selection ) > -1 ) {\n\t\t\tif ( ignored ) {\n\t\t\t\tignored.push( elem );\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tattached = isAttached( elem );\n\n\t\t// Append to fragment\n\t\ttmp = getAll( fragment.appendChild( elem ), \"script\" );\n\n\t\t// Preserve script evaluation history\n\t\tif ( attached ) {\n\t\t\tsetGlobalEval( tmp );\n\t\t}\n\n\t\t// Capture executables\n\t\tif ( scripts ) {\n\t\t\tj = 0;\n\t\t\twhile ( ( elem = tmp[ j++ ] ) ) {\n\t\t\t\tif ( rscriptType.test( elem.type || \"\" ) ) {\n\t\t\t\t\tscripts.push( elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn fragment;\n}\n\n\nvar rtypenamespace = /^([^.]*)(?:\\.(.+)|)/;\n\nfunction returnTrue() {\n\treturn true;\n}\n\nfunction returnFalse() {\n\treturn false;\n}\n\n// Support: IE <=9 - 11+\n// focus() and blur() are asynchronous, except when they are no-op.\n// So expect focus to be synchronous when the element is already active,\n// and blur to be synchronous when the element is not already active.\n// (focus and blur are always synchronous in other supported browsers,\n// this just defines when we can count on it).\nfunction expectSync( elem, type ) {\n\treturn ( elem === safeActiveElement() ) === ( type === \"focus\" );\n}\n\n// Support: IE <=9 only\n// Accessing document.activeElement can throw unexpectedly\n// https://bugs.jquery.com/ticket/13393\nfunction safeActiveElement() {\n\ttry {\n\t\treturn document.activeElement;\n\t} catch ( err ) { }\n}\n\nfunction on( elem, types, selector, data, fn, one ) {\n\tvar origFn, type;\n\n\t// Types can be a map of types/handlers\n\tif ( typeof types === \"object\" ) {\n\n\t\t// ( types-Object, selector, data )\n\t\tif ( typeof selector !== \"string\" ) {\n\n\t\t\t// ( types-Object, data )\n\t\t\tdata = data || selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tfor ( type in types ) {\n\t\t\ton( elem, type, selector, data, types[ type ], one );\n\t\t}\n\t\treturn elem;\n\t}\n\n\tif ( data == null && fn == null ) {\n\n\t\t// ( types, fn )\n\t\tfn = selector;\n\t\tdata = selector = undefined;\n\t} else if ( fn == null ) {\n\t\tif ( typeof selector === \"string\" ) {\n\n\t\t\t// ( types, selector, fn )\n\t\t\tfn = data;\n\t\t\tdata = undefined;\n\t\t} else {\n\n\t\t\t// ( types, data, fn )\n\t\t\tfn = data;\n\t\t\tdata = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t}\n\tif ( fn === false ) {\n\t\tfn = returnFalse;\n\t} else if ( !fn ) {\n\t\treturn elem;\n\t}\n\n\tif ( one === 1 ) {\n\t\torigFn = fn;\n\t\tfn = function( event ) {\n\n\t\t\t// Can use an empty set, since event contains the info\n\t\t\tjQuery().off( event );\n\t\t\treturn origFn.apply( this, arguments );\n\t\t};\n\n\t\t// Use same guid so caller can remove using origFn\n\t\tfn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );\n\t}\n\treturn elem.each( function() {\n\t\tjQuery.event.add( this, types, fn, data, selector );\n\t} );\n}\n\n/*\n * Helper functions for managing events -- not part of the public interface.\n * Props to Dean Edwards' addEvent library for many of the ideas.\n */\njQuery.event = {\n\n\tglobal: {},\n\n\tadd: function( elem, types, handler, data, selector ) {\n\n\t\tvar handleObjIn, eventHandle, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.get( elem );\n\n\t\t// Only attach events to objects that accept data\n\t\tif ( !acceptData( elem ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Caller can pass in an object of custom data in lieu of the handler\n\t\tif ( handler.handler ) {\n\t\t\thandleObjIn = handler;\n\t\t\thandler = handleObjIn.handler;\n\t\t\tselector = handleObjIn.selector;\n\t\t}\n\n\t\t// Ensure that invalid selectors throw exceptions at attach time\n\t\t// Evaluate against documentElement in case elem is a non-element node (e.g., document)\n\t\tif ( selector ) {\n\t\t\tjQuery.find.matchesSelector( documentElement, selector );\n\t\t}\n\n\t\t// Make sure that the handler has a unique ID, used to find/remove it later\n\t\tif ( !handler.guid ) {\n\t\t\thandler.guid = jQuery.guid++;\n\t\t}\n\n\t\t// Init the element's event structure and main handler, if this is the first\n\t\tif ( !( events = elemData.events ) ) {\n\t\t\tevents = elemData.events = Object.create( null );\n\t\t}\n\t\tif ( !( eventHandle = elemData.handle ) ) {\n\t\t\teventHandle = elemData.handle = function( e ) {\n\n\t\t\t\t// Discard the second event of a jQuery.event.trigger() and\n\t\t\t\t// when an event is called after a page has unloaded\n\t\t\t\treturn typeof jQuery !== \"undefined\" && jQuery.event.triggered !== e.type ?\n\t\t\t\t\tjQuery.event.dispatch.apply( elem, arguments ) : undefined;\n\t\t\t};\n\t\t}\n\n\t\t// Handle multiple events separated by a space\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// There *must* be a type, no attaching namespace-only handlers\n\t\t\tif ( !type ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// If event changes its type, use the special event handlers for the changed type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// If selector defined, determine special event api type, otherwise given type\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\n\t\t\t// Update special based on newly reset type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// handleObj is passed to all event handlers\n\t\t\thandleObj = jQuery.extend( {\n\t\t\t\ttype: type,\n\t\t\t\torigType: origType,\n\t\t\t\tdata: data,\n\t\t\t\thandler: handler,\n\t\t\t\tguid: handler.guid,\n\t\t\t\tselector: selector,\n\t\t\t\tneedsContext: selector && jQuery.expr.match.needsContext.test( selector ),\n\t\t\t\tnamespace: namespaces.join( \".\" )\n\t\t\t}, handleObjIn );\n\n\t\t\t// Init the event handler queue if we're the first\n\t\t\tif ( !( handlers = events[ type ] ) ) {\n\t\t\t\thandlers = events[ type ] = [];\n\t\t\t\thandlers.delegateCount = 0;\n\n\t\t\t\t// Only use addEventListener if the special events handler returns false\n\t\t\t\tif ( !special.setup ||\n\t\t\t\t\tspecial.setup.call( elem, data, namespaces, eventHandle ) === false ) {\n\n\t\t\t\t\tif ( elem.addEventListener ) {\n\t\t\t\t\t\telem.addEventListener( type, eventHandle );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( special.add ) {\n\t\t\t\tspecial.add.call( elem, handleObj );\n\n\t\t\t\tif ( !handleObj.handler.guid ) {\n\t\t\t\t\thandleObj.handler.guid = handler.guid;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add to the element's handler list, delegates in front\n\t\t\tif ( selector ) {\n\t\t\t\thandlers.splice( handlers.delegateCount++, 0, handleObj );\n\t\t\t} else {\n\t\t\t\thandlers.push( handleObj );\n\t\t\t}\n\n\t\t\t// Keep track of which events have ever been used, for event optimization\n\t\t\tjQuery.event.global[ type ] = true;\n\t\t}\n\n\t},\n\n\t// Detach an event or set of events from an element\n\tremove: function( elem, types, handler, selector, mappedTypes ) {\n\n\t\tvar j, origCount, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.hasData( elem ) && dataPriv.get( elem );\n\n\t\tif ( !elemData || !( events = elemData.events ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Once for each type.namespace in types; type may be omitted\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// Unbind all events (on this namespace, if provided) for the element\n\t\t\tif ( !type ) {\n\t\t\t\tfor ( type in events ) {\n\t\t\t\t\tjQuery.event.remove( elem, type + types[ t ], handler, selector, true );\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\t\t\thandlers = events[ type ] || [];\n\t\t\ttmp = tmp[ 2 ] &&\n\t\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" );\n\n\t\t\t// Remove matching events\n\t\t\torigCount = j = handlers.length;\n\t\t\twhile ( j-- ) {\n\t\t\t\thandleObj = handlers[ j ];\n\n\t\t\t\tif ( ( mappedTypes || origType === handleObj.origType ) &&\n\t\t\t\t\t( !handler || handler.guid === handleObj.guid ) &&\n\t\t\t\t\t( !tmp || tmp.test( handleObj.namespace ) ) &&\n\t\t\t\t\t( !selector || selector === handleObj.selector ||\n\t\t\t\t\t\tselector === \"**\" && handleObj.selector ) ) {\n\t\t\t\t\thandlers.splice( j, 1 );\n\n\t\t\t\t\tif ( handleObj.selector ) {\n\t\t\t\t\t\thandlers.delegateCount--;\n\t\t\t\t\t}\n\t\t\t\t\tif ( special.remove ) {\n\t\t\t\t\t\tspecial.remove.call( elem, handleObj );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove generic event handler if we removed something and no more handlers exist\n\t\t\t// (avoids potential for endless recursion during removal of special event handlers)\n\t\t\tif ( origCount && !handlers.length ) {\n\t\t\t\tif ( !special.teardown ||\n\t\t\t\t\tspecial.teardown.call( elem, namespaces, elemData.handle ) === false ) {\n\n\t\t\t\t\tjQuery.removeEvent( elem, type, elemData.handle );\n\t\t\t\t}\n\n\t\t\t\tdelete events[ type ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove data and the expando if it's no longer used\n\t\tif ( jQuery.isEmptyObject( events ) ) {\n\t\t\tdataPriv.remove( elem, \"handle events\" );\n\t\t}\n\t},\n\n\tdispatch: function( nativeEvent ) {\n\n\t\tvar i, j, ret, matched, handleObj, handlerQueue,\n\t\t\targs = new Array( arguments.length ),\n\n\t\t\t// Make a writable jQuery.Event from the native event object\n\t\t\tevent = jQuery.event.fix( nativeEvent ),\n\n\t\t\thandlers = (\n\t\t\t\tdataPriv.get( this, \"events\" ) || Object.create( null )\n\t\t\t)[ event.type ] || [],\n\t\t\tspecial = jQuery.event.special[ event.type ] || {};\n\n\t\t// Use the fix-ed jQuery.Event rather than the (read-only) native event\n\t\targs[ 0 ] = event;\n\n\t\tfor ( i = 1; i < arguments.length; i++ ) {\n\t\t\targs[ i ] = arguments[ i ];\n\t\t}\n\n\t\tevent.delegateTarget = this;\n\n\t\t// Call the preDispatch hook for the mapped type, and let it bail if desired\n\t\tif ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine handlers\n\t\thandlerQueue = jQuery.event.handlers.call( this, event, handlers );\n\n\t\t// Run delegates first; they may want to stop propagation beneath us\n\t\ti = 0;\n\t\twhile ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tevent.currentTarget = matched.elem;\n\n\t\t\tj = 0;\n\t\t\twhile ( ( handleObj = matched.handlers[ j++ ] ) &&\n\t\t\t\t!event.isImmediatePropagationStopped() ) {\n\n\t\t\t\t// If the event is namespaced, then each handler is only invoked if it is\n\t\t\t\t// specially universal or its namespaces are a superset of the event's.\n\t\t\t\tif ( !event.rnamespace || handleObj.namespace === false ||\n\t\t\t\t\tevent.rnamespace.test( handleObj.namespace ) ) {\n\n\t\t\t\t\tevent.handleObj = handleObj;\n\t\t\t\t\tevent.data = handleObj.data;\n\n\t\t\t\t\tret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||\n\t\t\t\t\t\thandleObj.handler ).apply( matched.elem, args );\n\n\t\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\t\tif ( ( event.result = ret ) === false ) {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Call the postDispatch hook for the mapped type\n\t\tif ( special.postDispatch ) {\n\t\t\tspecial.postDispatch.call( this, event );\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\thandlers: function( event, handlers ) {\n\t\tvar i, handleObj, sel, matchedHandlers, matchedSelectors,\n\t\t\thandlerQueue = [],\n\t\t\tdelegateCount = handlers.delegateCount,\n\t\t\tcur = event.target;\n\n\t\t// Find delegate handlers\n\t\tif ( delegateCount &&\n\n\t\t\t// Support: IE <=9\n\t\t\t// Black-hole SVG <use> instance trees (trac-13180)\n\t\t\tcur.nodeType &&\n\n\t\t\t// Support: Firefox <=42\n\t\t\t// Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)\n\t\t\t// https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click\n\t\t\t// Support: IE 11 only\n\t\t\t// ...but not arrow key \"clicks\" of radio inputs, which can have `button` -1 (gh-2343)\n\t\t\t!( event.type === \"click\" && event.button >= 1 ) ) {\n\n\t\t\tfor ( ; cur !== this; cur = cur.parentNode || this ) {\n\n\t\t\t\t// Don't check non-elements (#13208)\n\t\t\t\t// Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)\n\t\t\t\tif ( cur.nodeType === 1 && !( event.type === \"click\" && cur.disabled === true ) ) {\n\t\t\t\t\tmatchedHandlers = [];\n\t\t\t\t\tmatchedSelectors = {};\n\t\t\t\t\tfor ( i = 0; i < delegateCount; i++ ) {\n\t\t\t\t\t\thandleObj = handlers[ i ];\n\n\t\t\t\t\t\t// Don't conflict with Object.prototype properties (#13203)\n\t\t\t\t\t\tsel = handleObj.selector + \" \";\n\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] === undefined ) {\n\t\t\t\t\t\t\tmatchedSelectors[ sel ] = handleObj.needsContext ?\n\t\t\t\t\t\t\t\tjQuery( sel, this ).index( cur ) > -1 :\n\t\t\t\t\t\t\t\tjQuery.find( sel, this, null, [ cur ] ).length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] ) {\n\t\t\t\t\t\t\tmatchedHandlers.push( handleObj );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( matchedHandlers.length ) {\n\t\t\t\t\t\thandlerQueue.push( { elem: cur, handlers: matchedHandlers } );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Add the remaining (directly-bound) handlers\n\t\tcur = this;\n\t\tif ( delegateCount < handlers.length ) {\n\t\t\thandlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } );\n\t\t}\n\n\t\treturn handlerQueue;\n\t},\n\n\taddProp: function( name, hook ) {\n\t\tObject.defineProperty( jQuery.Event.prototype, name, {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: true,\n\n\t\t\tget: isFunction( hook ) ?\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\treturn hook( this.originalEvent );\n\t\t\t\t\t}\n\t\t\t\t} :\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\treturn this.originalEvent[ name ];\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\tset: function( value ) {\n\t\t\t\tObject.defineProperty( this, name, {\n\t\t\t\t\tenumerable: true,\n\t\t\t\t\tconfigurable: true,\n\t\t\t\t\twritable: true,\n\t\t\t\t\tvalue: value\n\t\t\t\t} );\n\t\t\t}\n\t\t} );\n\t},\n\n\tfix: function( originalEvent ) {\n\t\treturn originalEvent[ jQuery.expando ] ?\n\t\t\toriginalEvent :\n\t\t\tnew jQuery.Event( originalEvent );\n\t},\n\n\tspecial: {\n\t\tload: {\n\n\t\t\t// Prevent triggered image.load events from bubbling to window.load\n\t\t\tnoBubble: true\n\t\t},\n\t\tclick: {\n\n\t\t\t// Utilize native event to ensure correct state for checkable inputs\n\t\t\tsetup: function( data ) {\n\n\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\tvar el = this || data;\n\n\t\t\t\t// Claim the first handler\n\t\t\t\tif ( rcheckableType.test( el.type ) &&\n\t\t\t\t\tel.click && nodeName( el, \"input\" ) ) {\n\n\t\t\t\t\t// dataPriv.set( el, \"click\", ... )\n\t\t\t\t\tleverageNative( el, \"click\", returnTrue );\n\t\t\t\t}\n\n\t\t\t\t// Return false to allow normal processing in the caller\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\ttrigger: function( data ) {\n\n\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\tvar el = this || data;\n\n\t\t\t\t// Force setup before triggering a click\n\t\t\t\tif ( rcheckableType.test( el.type ) &&\n\t\t\t\t\tel.click && nodeName( el, \"input\" ) ) {\n\n\t\t\t\t\tleverageNative( el, \"click\" );\n\t\t\t\t}\n\n\t\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\t\treturn true;\n\t\t\t},\n\n\t\t\t// For cross-browser consistency, suppress native .click() on links\n\t\t\t// Also prevent it if we're currently inside a leveraged native-event stack\n\t\t\t_default: function( event ) {\n\t\t\t\tvar target = event.target;\n\t\t\t\treturn rcheckableType.test( target.type ) &&\n\t\t\t\t\ttarget.click && nodeName( target, \"input\" ) &&\n\t\t\t\t\tdataPriv.get( target, \"click\" ) ||\n\t\t\t\t\tnodeName( target, \"a\" );\n\t\t\t}\n\t\t},\n\n\t\tbeforeunload: {\n\t\t\tpostDispatch: function( event ) {\n\n\t\t\t\t// Support: Firefox 20+\n\t\t\t\t// Firefox doesn't alert if the returnValue field is not set.\n\t\t\t\tif ( event.result !== undefined && event.originalEvent ) {\n\t\t\t\t\tevent.originalEvent.returnValue = event.result;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n};\n\n// Ensure the presence of an event listener that handles manually-triggered\n// synthetic events by interrupting progress until reinvoked in response to\n// *native* events that it fires directly, ensuring that state changes have\n// already occurred before other listeners are invoked.\nfunction leverageNative( el, type, expectSync ) {\n\n\t// Missing expectSync indicates a trigger call, which must force setup through jQuery.event.add\n\tif ( !expectSync ) {\n\t\tif ( dataPriv.get( el, type ) === undefined ) {\n\t\t\tjQuery.event.add( el, type, returnTrue );\n\t\t}\n\t\treturn;\n\t}\n\n\t// Register the controller as a special universal handler for all event namespaces\n\tdataPriv.set( el, type, false );\n\tjQuery.event.add( el, type, {\n\t\tnamespace: false,\n\t\thandler: function( event ) {\n\t\t\tvar notAsync, result,\n\t\t\t\tsaved = dataPriv.get( this, type );\n\n\t\t\tif ( ( event.isTrigger & 1 ) && this[ type ] ) {\n\n\t\t\t\t// Interrupt processing of the outer synthetic .trigger()ed event\n\t\t\t\t// Saved data should be false in such cases, but might be a leftover capture object\n\t\t\t\t// from an async native handler (gh-4350)\n\t\t\t\tif ( !saved.length ) {\n\n\t\t\t\t\t// Store arguments for use when handling the inner native event\n\t\t\t\t\t// There will always be at least one argument (an event object), so this array\n\t\t\t\t\t// will not be confused with a leftover capture object.\n\t\t\t\t\tsaved = slice.call( arguments );\n\t\t\t\t\tdataPriv.set( this, type, saved );\n\n\t\t\t\t\t// Trigger the native event and capture its result\n\t\t\t\t\t// Support: IE <=9 - 11+\n\t\t\t\t\t// focus() and blur() are asynchronous\n\t\t\t\t\tnotAsync = expectSync( this, type );\n\t\t\t\t\tthis[ type ]();\n\t\t\t\t\tresult = dataPriv.get( this, type );\n\t\t\t\t\tif ( saved !== result || notAsync ) {\n\t\t\t\t\t\tdataPriv.set( this, type, false );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tresult = {};\n\t\t\t\t\t}\n\t\t\t\t\tif ( saved !== result ) {\n\n\t\t\t\t\t\t// Cancel the outer synthetic event\n\t\t\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t\t\t\tevent.preventDefault();\n\n\t\t\t\t\t\t// Support: Chrome 86+\n\t\t\t\t\t\t// In Chrome, if an element having a focusout handler is blurred by\n\t\t\t\t\t\t// clicking outside of it, it invokes the handler synchronously. If\n\t\t\t\t\t\t// that handler calls `.remove()` on the element, the data is cleared,\n\t\t\t\t\t\t// leaving `result` undefined. We need to guard against this.\n\t\t\t\t\t\treturn result && result.value;\n\t\t\t\t\t}\n\n\t\t\t\t// If this is an inner synthetic event for an event with a bubbling surrogate\n\t\t\t\t// (focus or blur), assume that the surrogate already propagated from triggering the\n\t\t\t\t// native event and prevent that from happening again here.\n\t\t\t\t// This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the\n\t\t\t\t// bubbling surrogate propagates *after* the non-bubbling base), but that seems\n\t\t\t\t// less bad than duplication.\n\t\t\t\t} else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) {\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t}\n\n\t\t\t// If this is a native event triggered above, everything is now in order\n\t\t\t// Fire an inner synthetic event with the original arguments\n\t\t\t} else if ( saved.length ) {\n\n\t\t\t\t// ...and capture the result\n\t\t\t\tdataPriv.set( this, type, {\n\t\t\t\t\tvalue: jQuery.event.trigger(\n\n\t\t\t\t\t\t// Support: IE <=9 - 11+\n\t\t\t\t\t\t// Extend with the prototype to reset the above stopImmediatePropagation()\n\t\t\t\t\t\tjQuery.extend( saved[ 0 ], jQuery.Event.prototype ),\n\t\t\t\t\t\tsaved.slice( 1 ),\n\t\t\t\t\t\tthis\n\t\t\t\t\t)\n\t\t\t\t} );\n\n\t\t\t\t// Abort handling of the native event\n\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t}\n\t\t}\n\t} );\n}\n\njQuery.removeEvent = function( elem, type, handle ) {\n\n\t// This \"if\" is needed for plain objects\n\tif ( elem.removeEventListener ) {\n\t\telem.removeEventListener( type, handle );\n\t}\n};\n\njQuery.Event = function( src, props ) {\n\n\t// Allow instantiation without the 'new' keyword\n\tif ( !( this instanceof jQuery.Event ) ) {\n\t\treturn new jQuery.Event( src, props );\n\t}\n\n\t// Event object\n\tif ( src && src.type ) {\n\t\tthis.originalEvent = src;\n\t\tthis.type = src.type;\n\n\t\t// Events bubbling up the document may have been marked as prevented\n\t\t// by a handler lower down the tree; reflect the correct value.\n\t\tthis.isDefaultPrevented = src.defaultPrevented ||\n\t\t\t\tsrc.defaultPrevented === undefined &&\n\n\t\t\t\t// Support: Android <=2.3 only\n\t\t\t\tsrc.returnValue === false ?\n\t\t\treturnTrue :\n\t\t\treturnFalse;\n\n\t\t// Create target properties\n\t\t// Support: Safari <=6 - 7 only\n\t\t// Target should not be a text node (#504, #13143)\n\t\tthis.target = ( src.target && src.target.nodeType === 3 ) ?\n\t\t\tsrc.target.parentNode :\n\t\t\tsrc.target;\n\n\t\tthis.currentTarget = src.currentTarget;\n\t\tthis.relatedTarget = src.relatedTarget;\n\n\t// Event type\n\t} else {\n\t\tthis.type = src;\n\t}\n\n\t// Put explicitly provided properties onto the event object\n\tif ( props ) {\n\t\tjQuery.extend( this, props );\n\t}\n\n\t// Create a timestamp if incoming event doesn't have one\n\tthis.timeStamp = src && src.timeStamp || Date.now();\n\n\t// Mark it as fixed\n\tthis[ jQuery.expando ] = true;\n};\n\n// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\n// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\njQuery.Event.prototype = {\n\tconstructor: jQuery.Event,\n\tisDefaultPrevented: returnFalse,\n\tisPropagationStopped: returnFalse,\n\tisImmediatePropagationStopped: returnFalse,\n\tisSimulated: false,\n\n\tpreventDefault: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isDefaultPrevented = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.preventDefault();\n\t\t}\n\t},\n\tstopPropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isPropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopPropagation();\n\t\t}\n\t},\n\tstopImmediatePropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isImmediatePropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopImmediatePropagation();\n\t\t}\n\n\t\tthis.stopPropagation();\n\t}\n};\n\n// Includes all common event props including KeyEvent and MouseEvent specific props\njQuery.each( {\n\taltKey: true,\n\tbubbles: true,\n\tcancelable: true,\n\tchangedTouches: true,\n\tctrlKey: true,\n\tdetail: true,\n\teventPhase: true,\n\tmetaKey: true,\n\tpageX: true,\n\tpageY: true,\n\tshiftKey: true,\n\tview: true,\n\t\"char\": true,\n\tcode: true,\n\tcharCode: true,\n\tkey: true,\n\tkeyCode: true,\n\tbutton: true,\n\tbuttons: true,\n\tclientX: true,\n\tclientY: true,\n\toffsetX: true,\n\toffsetY: true,\n\tpointerId: true,\n\tpointerType: true,\n\tscreenX: true,\n\tscreenY: true,\n\ttargetTouches: true,\n\ttoElement: true,\n\ttouches: true,\n\twhich: true\n}, jQuery.event.addProp );\n\njQuery.each( { focus: \"focusin\", blur: \"focusout\" }, function( type, delegateType ) {\n\tjQuery.event.special[ type ] = {\n\n\t\t// Utilize native event if possible so blur/focus sequence is correct\n\t\tsetup: function() {\n\n\t\t\t// Claim the first handler\n\t\t\t// dataPriv.set( this, \"focus\", ... )\n\t\t\t// dataPriv.set( this, \"blur\", ... )\n\t\t\tleverageNative( this, type, expectSync );\n\n\t\t\t// Return false to allow normal processing in the caller\n\t\t\treturn false;\n\t\t},\n\t\ttrigger: function() {\n\n\t\t\t// Force setup before trigger\n\t\t\tleverageNative( this, type );\n\n\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\treturn true;\n\t\t},\n\n\t\t// Suppress native focus or blur as it's already being fired\n\t\t// in leverageNative.\n\t\t_default: function() {\n\t\t\treturn true;\n\t\t},\n\n\t\tdelegateType: delegateType\n\t};\n} );\n\n// Create mouseenter/leave events using mouseover/out and event-time checks\n// so that event delegation works in jQuery.\n// Do the same for pointerenter/pointerleave and pointerover/pointerout\n//\n// Support: Safari 7 only\n// Safari sends mouseenter too often; see:\n// https://bugs.chromium.org/p/chromium/issues/detail?id=470258\n// for the description of the bug (it existed in older Chrome versions as well).\njQuery.each( {\n\tmouseenter: \"mouseover\",\n\tmouseleave: \"mouseout\",\n\tpointerenter: \"pointerover\",\n\tpointerleave: \"pointerout\"\n}, function( orig, fix ) {\n\tjQuery.event.special[ orig ] = {\n\t\tdelegateType: fix,\n\t\tbindType: fix,\n\n\t\thandle: function( event ) {\n\t\t\tvar ret,\n\t\t\t\ttarget = this,\n\t\t\t\trelated = event.relatedTarget,\n\t\t\t\thandleObj = event.handleObj;\n\n\t\t\t// For mouseenter/leave call the handler if related is outside the target.\n\t\t\t// NB: No relatedTarget if the mouse left/entered the browser window\n\t\t\tif ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {\n\t\t\t\tevent.type = handleObj.origType;\n\t\t\t\tret = handleObj.handler.apply( this, arguments );\n\t\t\t\tevent.type = fix;\n\t\t\t}\n\t\t\treturn ret;\n\t\t}\n\t};\n} );\n\njQuery.fn.extend( {\n\n\ton: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn );\n\t},\n\tone: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn, 1 );\n\t},\n\toff: function( types, selector, fn ) {\n\t\tvar handleObj, type;\n\t\tif ( types && types.preventDefault && types.handleObj ) {\n\n\t\t\t// ( event ) dispatched jQuery.Event\n\t\t\thandleObj = types.handleObj;\n\t\t\tjQuery( types.delegateTarget ).off(\n\t\t\t\thandleObj.namespace ?\n\t\t\t\t\thandleObj.origType + \".\" + handleObj.namespace :\n\t\t\t\t\thandleObj.origType,\n\t\t\t\thandleObj.selector,\n\t\t\t\thandleObj.handler\n\t\t\t);\n\t\t\treturn this;\n\t\t}\n\t\tif ( typeof types === \"object\" ) {\n\n\t\t\t// ( types-object [, selector] )\n\t\t\tfor ( type in types ) {\n\t\t\t\tthis.off( type, selector, types[ type ] );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\tif ( selector === false || typeof selector === \"function\" ) {\n\n\t\t\t// ( types [, fn] )\n\t\t\tfn = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tif ( fn === false ) {\n\t\t\tfn = returnFalse;\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.remove( this, types, fn, selector );\n\t\t} );\n\t}\n} );\n\n\nvar\n\n\t// Support: IE <=10 - 11, Edge 12 - 13 only\n\t// In IE/Edge using regex groups here causes severe slowdowns.\n\t// See https://connect.microsoft.com/IE/feedback/details/1736512/\n\trnoInnerhtml = /<script|<style|<link/i,\n\n\t// checked=\"checked\" or checked\n\trchecked = /checked\\s*(?:[^=]|=\\s*.checked.)/i,\n\trcleanScript = /^\\s*<!(?:\\[CDATA\\[|--)|(?:\\]\\]|--)>\\s*$/g;\n\n// Prefer a tbody over its parent table for containing new rows\nfunction manipulationTarget( elem, content ) {\n\tif ( nodeName( elem, \"table\" ) &&\n\t\tnodeName( content.nodeType !== 11 ? content : content.firstChild, \"tr\" ) ) {\n\n\t\treturn jQuery( elem ).children( \"tbody\" )[ 0 ] || elem;\n\t}\n\n\treturn elem;\n}\n\n// Replace/restore the type attribute of script elements for safe DOM manipulation\nfunction disableScript( elem ) {\n\telem.type = ( elem.getAttribute( \"type\" ) !== null ) + \"/\" + elem.type;\n\treturn elem;\n}\nfunction restoreScript( elem ) {\n\tif ( ( elem.type || \"\" ).slice( 0, 5 ) === \"true/\" ) {\n\t\telem.type = elem.type.slice( 5 );\n\t} else {\n\t\telem.removeAttribute( \"type\" );\n\t}\n\n\treturn elem;\n}\n\nfunction cloneCopyEvent( src, dest ) {\n\tvar i, l, type, pdataOld, udataOld, udataCur, events;\n\n\tif ( dest.nodeType !== 1 ) {\n\t\treturn;\n\t}\n\n\t// 1. Copy private data: events, handlers, etc.\n\tif ( dataPriv.hasData( src ) ) {\n\t\tpdataOld = dataPriv.get( src );\n\t\tevents = pdataOld.events;\n\n\t\tif ( events ) {\n\t\t\tdataPriv.remove( dest, \"handle events\" );\n\n\t\t\tfor ( type in events ) {\n\t\t\t\tfor ( i = 0, l = events[ type ].length; i < l; i++ ) {\n\t\t\t\t\tjQuery.event.add( dest, type, events[ type ][ i ] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// 2. Copy user data\n\tif ( dataUser.hasData( src ) ) {\n\t\tudataOld = dataUser.access( src );\n\t\tudataCur = jQuery.extend( {}, udataOld );\n\n\t\tdataUser.set( dest, udataCur );\n\t}\n}\n\n// Fix IE bugs, see support tests\nfunction fixInput( src, dest ) {\n\tvar nodeName = dest.nodeName.toLowerCase();\n\n\t// Fails to persist the checked state of a cloned checkbox or radio button.\n\tif ( nodeName === \"input\" && rcheckableType.test( src.type ) ) {\n\t\tdest.checked = src.checked;\n\n\t// Fails to return the selected option to the default selected state when cloning options\n\t} else if ( nodeName === \"input\" || nodeName === \"textarea\" ) {\n\t\tdest.defaultValue = src.defaultValue;\n\t}\n}\n\nfunction domManip( collection, args, callback, ignored ) {\n\n\t// Flatten any nested arrays\n\targs = flat( args );\n\n\tvar fragment, first, scripts, hasScripts, node, doc,\n\t\ti = 0,\n\t\tl = collection.length,\n\t\tiNoClone = l - 1,\n\t\tvalue = args[ 0 ],\n\t\tvalueIsFunction = isFunction( value );\n\n\t// We can't cloneNode fragments that contain checked, in WebKit\n\tif ( valueIsFunction ||\n\t\t\t( l > 1 && typeof value === \"string\" &&\n\t\t\t\t!support.checkClone && rchecked.test( value ) ) ) {\n\t\treturn collection.each( function( index ) {\n\t\t\tvar self = collection.eq( index );\n\t\t\tif ( valueIsFunction ) {\n\t\t\t\targs[ 0 ] = value.call( this, index, self.html() );\n\t\t\t}\n\t\t\tdomManip( self, args, callback, ignored );\n\t\t} );\n\t}\n\n\tif ( l ) {\n\t\tfragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );\n\t\tfirst = fragment.firstChild;\n\n\t\tif ( fragment.childNodes.length === 1 ) {\n\t\t\tfragment = first;\n\t\t}\n\n\t\t// Require either new content or an interest in ignored elements to invoke the callback\n\t\tif ( first || ignored ) {\n\t\t\tscripts = jQuery.map( getAll( fragment, \"script\" ), disableScript );\n\t\t\thasScripts = scripts.length;\n\n\t\t\t// Use the original fragment for the last item\n\t\t\t// instead of the first because it can end up\n\t\t\t// being emptied incorrectly in certain situations (#8070).\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tnode = fragment;\n\n\t\t\t\tif ( i !== iNoClone ) {\n\t\t\t\t\tnode = jQuery.clone( node, true, true );\n\n\t\t\t\t\t// Keep references to cloned scripts for later restoration\n\t\t\t\t\tif ( hasScripts ) {\n\n\t\t\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\t\tjQuery.merge( scripts, getAll( node, \"script\" ) );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcallback.call( collection[ i ], node, i );\n\t\t\t}\n\n\t\t\tif ( hasScripts ) {\n\t\t\t\tdoc = scripts[ scripts.length - 1 ].ownerDocument;\n\n\t\t\t\t// Reenable scripts\n\t\t\t\tjQuery.map( scripts, restoreScript );\n\n\t\t\t\t// Evaluate executable scripts on first document insertion\n\t\t\t\tfor ( i = 0; i < hasScripts; i++ ) {\n\t\t\t\t\tnode = scripts[ i ];\n\t\t\t\t\tif ( rscriptType.test( node.type || \"\" ) &&\n\t\t\t\t\t\t!dataPriv.access( node, \"globalEval\" ) &&\n\t\t\t\t\t\tjQuery.contains( doc, node ) ) {\n\n\t\t\t\t\t\tif ( node.src && ( node.type || \"\" ).toLowerCase() !== \"module\" ) {\n\n\t\t\t\t\t\t\t// Optional AJAX dependency, but won't run scripts if not present\n\t\t\t\t\t\t\tif ( jQuery._evalUrl && !node.noModule ) {\n\t\t\t\t\t\t\t\tjQuery._evalUrl( node.src, {\n\t\t\t\t\t\t\t\t\tnonce: node.nonce || node.getAttribute( \"nonce\" )\n\t\t\t\t\t\t\t\t}, doc );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tDOMEval( node.textContent.replace( rcleanScript, \"\" ), node, doc );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn collection;\n}\n\nfunction remove( elem, selector, keepData ) {\n\tvar node,\n\t\tnodes = selector ? jQuery.filter( selector, elem ) : elem,\n\t\ti = 0;\n\n\tfor ( ; ( node = nodes[ i ] ) != null; i++ ) {\n\t\tif ( !keepData && node.nodeType === 1 ) {\n\t\t\tjQuery.cleanData( getAll( node ) );\n\t\t}\n\n\t\tif ( node.parentNode ) {\n\t\t\tif ( keepData && isAttached( node ) ) {\n\t\t\t\tsetGlobalEval( getAll( node, \"script\" ) );\n\t\t\t}\n\t\t\tnode.parentNode.removeChild( node );\n\t\t}\n\t}\n\n\treturn elem;\n}\n\njQuery.extend( {\n\thtmlPrefilter: function( html ) {\n\t\treturn html;\n\t},\n\n\tclone: function( elem, dataAndEvents, deepDataAndEvents ) {\n\t\tvar i, l, srcElements, destElements,\n\t\t\tclone = elem.cloneNode( true ),\n\t\t\tinPage = isAttached( elem );\n\n\t\t// Fix IE cloning issues\n\t\tif ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) &&\n\t\t\t\t!jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2\n\t\t\tdestElements = getAll( clone );\n\t\t\tsrcElements = getAll( elem );\n\n\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\tfixInput( srcElements[ i ], destElements[ i ] );\n\t\t\t}\n\t\t}\n\n\t\t// Copy the events from the original to the clone\n\t\tif ( dataAndEvents ) {\n\t\t\tif ( deepDataAndEvents ) {\n\t\t\t\tsrcElements = srcElements || getAll( elem );\n\t\t\t\tdestElements = destElements || getAll( clone );\n\n\t\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\t\tcloneCopyEvent( srcElements[ i ], destElements[ i ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcloneCopyEvent( elem, clone );\n\t\t\t}\n\t\t}\n\n\t\t// Preserve script evaluation history\n\t\tdestElements = getAll( clone, \"script\" );\n\t\tif ( destElements.length > 0 ) {\n\t\t\tsetGlobalEval( destElements, !inPage && getAll( elem, \"script\" ) );\n\t\t}\n\n\t\t// Return the cloned set\n\t\treturn clone;\n\t},\n\n\tcleanData: function( elems ) {\n\t\tvar data, elem, type,\n\t\t\tspecial = jQuery.event.special,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = elems[ i ] ) !== undefined; i++ ) {\n\t\t\tif ( acceptData( elem ) ) {\n\t\t\t\tif ( ( data = elem[ dataPriv.expando ] ) ) {\n\t\t\t\t\tif ( data.events ) {\n\t\t\t\t\t\tfor ( type in data.events ) {\n\t\t\t\t\t\t\tif ( special[ type ] ) {\n\t\t\t\t\t\t\t\tjQuery.event.remove( elem, type );\n\n\t\t\t\t\t\t\t// This is a shortcut to avoid jQuery.event.remove's overhead\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tjQuery.removeEvent( elem, type, data.handle );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataPriv.expando ] = undefined;\n\t\t\t\t}\n\t\t\t\tif ( elem[ dataUser.expando ] ) {\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataUser.expando ] = undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n} );\n\njQuery.fn.extend( {\n\tdetach: function( selector ) {\n\t\treturn remove( this, selector, true );\n\t},\n\n\tremove: function( selector ) {\n\t\treturn remove( this, selector );\n\t},\n\n\ttext: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\treturn value === undefined ?\n\t\t\t\tjQuery.text( this ) :\n\t\t\t\tthis.empty().each( function() {\n\t\t\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\t\t\tthis.textContent = value;\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t}, null, value, arguments.length );\n\t},\n\n\tappend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.appendChild( elem );\n\t\t\t}\n\t\t} );\n\t},\n\n\tprepend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.insertBefore( elem, target.firstChild );\n\t\t\t}\n\t\t} );\n\t},\n\n\tbefore: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this );\n\t\t\t}\n\t\t} );\n\t},\n\n\tafter: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this.nextSibling );\n\t\t\t}\n\t\t} );\n\t},\n\n\tempty: function() {\n\t\tvar elem,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = this[ i ] ) != null; i++ ) {\n\t\t\tif ( elem.nodeType === 1 ) {\n\n\t\t\t\t// Prevent memory leaks\n\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\n\t\t\t\t// Remove any remaining nodes\n\t\t\t\telem.textContent = \"\";\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tclone: function( dataAndEvents, deepDataAndEvents ) {\n\t\tdataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n\t\tdeepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n\n\t\treturn this.map( function() {\n\t\t\treturn jQuery.clone( this, dataAndEvents, deepDataAndEvents );\n\t\t} );\n\t},\n\n\thtml: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\tvar elem = this[ 0 ] || {},\n\t\t\t\ti = 0,\n\t\t\t\tl = this.length;\n\n\t\t\tif ( value === undefined && elem.nodeType === 1 ) {\n\t\t\t\treturn elem.innerHTML;\n\t\t\t}\n\n\t\t\t// See if we can take a shortcut and just use innerHTML\n\t\t\tif ( typeof value === \"string\" && !rnoInnerhtml.test( value ) &&\n\t\t\t\t!wrapMap[ ( rtagName.exec( value ) || [ \"\", \"\" ] )[ 1 ].toLowerCase() ] ) {\n\n\t\t\t\tvalue = jQuery.htmlPrefilter( value );\n\n\t\t\t\ttry {\n\t\t\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\t\t\telem = this[ i ] || {};\n\n\t\t\t\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\t\t\t\t\t\t\telem.innerHTML = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\telem = 0;\n\n\t\t\t\t// If using innerHTML throws an exception, use the fallback method\n\t\t\t\t} catch ( e ) {}\n\t\t\t}\n\n\t\t\tif ( elem ) {\n\t\t\t\tthis.empty().append( value );\n\t\t\t}\n\t\t}, null, value, arguments.length );\n\t},\n\n\treplaceWith: function() {\n\t\tvar ignored = [];\n\n\t\t// Make the changes, replacing each non-ignored context element with the new content\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tvar parent = this.parentNode;\n\n\t\t\tif ( jQuery.inArray( this, ignored ) < 0 ) {\n\t\t\t\tjQuery.cleanData( getAll( this ) );\n\t\t\t\tif ( parent ) {\n\t\t\t\t\tparent.replaceChild( elem, this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Force callback invocation\n\t\t}, ignored );\n\t}\n} );\n\njQuery.each( {\n\tappendTo: \"append\",\n\tprependTo: \"prepend\",\n\tinsertBefore: \"before\",\n\tinsertAfter: \"after\",\n\treplaceAll: \"replaceWith\"\n}, function( name, original ) {\n\tjQuery.fn[ name ] = function( selector ) {\n\t\tvar elems,\n\t\t\tret = [],\n\t\t\tinsert = jQuery( selector ),\n\t\t\tlast = insert.length - 1,\n\t\t\ti = 0;\n\n\t\tfor ( ; i <= last; i++ ) {\n\t\t\telems = i === last ? this : this.clone( true );\n\t\t\tjQuery( insert[ i ] )[ original ]( elems );\n\n\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t// .get() because push.apply(_, arraylike) throws on ancient WebKit\n\t\t\tpush.apply( ret, elems.get() );\n\t\t}\n\n\t\treturn this.pushStack( ret );\n\t};\n} );\nvar rnumnonpx = new RegExp( \"^(\" + pnum + \")(?!px)[a-z%]+$\", \"i\" );\n\nvar getStyles = function( elem ) {\n\n\t\t// Support: IE <=11 only, Firefox <=30 (#15098, #14150)\n\t\t// IE throws on elements created in popups\n\t\t// FF meanwhile throws on frame elements through \"defaultView.getComputedStyle\"\n\t\tvar view = elem.ownerDocument.defaultView;\n\n\t\tif ( !view || !view.opener ) {\n\t\t\tview = window;\n\t\t}\n\n\t\treturn view.getComputedStyle( elem );\n\t};\n\nvar swap = function( elem, options, callback ) {\n\tvar ret, name,\n\t\told = {};\n\n\t// Remember the old values, and insert the new ones\n\tfor ( name in options ) {\n\t\told[ name ] = elem.style[ name ];\n\t\telem.style[ name ] = options[ name ];\n\t}\n\n\tret = callback.call( elem );\n\n\t// Revert the old values\n\tfor ( name in options ) {\n\t\telem.style[ name ] = old[ name ];\n\t}\n\n\treturn ret;\n};\n\n\nvar rboxStyle = new RegExp( cssExpand.join( \"|\" ), \"i\" );\n\n\n\n( function() {\n\n\t// Executing both pixelPosition & boxSizingReliable tests require only one layout\n\t// so they're executed at the same time to save the second computation.\n\tfunction computeStyleTests() {\n\n\t\t// This is a singleton, we need to execute it only once\n\t\tif ( !div ) {\n\t\t\treturn;\n\t\t}\n\n\t\tcontainer.style.cssText = \"position:absolute;left:-11111px;width:60px;\" +\n\t\t\t\"margin-top:1px;padding:0;border:0\";\n\t\tdiv.style.cssText =\n\t\t\t\"position:relative;display:block;box-sizing:border-box;overflow:scroll;\" +\n\t\t\t\"margin:auto;border:1px;padding:1px;\" +\n\t\t\t\"width:60%;top:1%\";\n\t\tdocumentElement.appendChild( container ).appendChild( div );\n\n\t\tvar divStyle = window.getComputedStyle( div );\n\t\tpixelPositionVal = divStyle.top !== \"1%\";\n\n\t\t// Support: Android 4.0 - 4.3 only, Firefox <=3 - 44\n\t\treliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12;\n\n\t\t// Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3\n\t\t// Some styles come back with percentage values, even though they shouldn't\n\t\tdiv.style.right = \"60%\";\n\t\tpixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36;\n\n\t\t// Support: IE 9 - 11 only\n\t\t// Detect misreporting of content dimensions for box-sizing:border-box elements\n\t\tboxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36;\n\n\t\t// Support: IE 9 only\n\t\t// Detect overflow:scroll screwiness (gh-3699)\n\t\t// Support: Chrome <=64\n\t\t// Don't get tricked when zoom affects offsetWidth (gh-4029)\n\t\tdiv.style.position = \"absolute\";\n\t\tscrollboxSizeVal = roundPixelMeasures( div.offsetWidth / 3 ) === 12;\n\n\t\tdocumentElement.removeChild( container );\n\n\t\t// Nullify the div so it wouldn't be stored in the memory and\n\t\t// it will also be a sign that checks already performed\n\t\tdiv = null;\n\t}\n\n\tfunction roundPixelMeasures( measure ) {\n\t\treturn Math.round( parseFloat( measure ) );\n\t}\n\n\tvar pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal,\n\t\treliableTrDimensionsVal, reliableMarginLeftVal,\n\t\tcontainer = document.createElement( \"div\" ),\n\t\tdiv = document.createElement( \"div\" );\n\n\t// Finish early in limited (non-browser) environments\n\tif ( !div.style ) {\n\t\treturn;\n\t}\n\n\t// Support: IE <=9 - 11 only\n\t// Style of cloned element affects source element cloned (#8908)\n\tdiv.style.backgroundClip = \"content-box\";\n\tdiv.cloneNode( true ).style.backgroundClip = \"\";\n\tsupport.clearCloneStyle = div.style.backgroundClip === \"content-box\";\n\n\tjQuery.extend( support, {\n\t\tboxSizingReliable: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn boxSizingReliableVal;\n\t\t},\n\t\tpixelBoxStyles: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn pixelBoxStylesVal;\n\t\t},\n\t\tpixelPosition: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn pixelPositionVal;\n\t\t},\n\t\treliableMarginLeft: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn reliableMarginLeftVal;\n\t\t},\n\t\tscrollboxSize: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn scrollboxSizeVal;\n\t\t},\n\n\t\t// Support: IE 9 - 11+, Edge 15 - 18+\n\t\t// IE/Edge misreport `getComputedStyle` of table rows with width/height\n\t\t// set in CSS while `offset*` properties report correct values.\n\t\t// Behavior in IE 9 is more subtle than in newer versions & it passes\n\t\t// some versions of this test; make sure not to make it pass there!\n\t\t//\n\t\t// Support: Firefox 70+\n\t\t// Only Firefox includes border widths\n\t\t// in computed dimensions. (gh-4529)\n\t\treliableTrDimensions: function() {\n\t\t\tvar table, tr, trChild, trStyle;\n\t\t\tif ( reliableTrDimensionsVal == null ) {\n\t\t\t\ttable = document.createElement( \"table\" );\n\t\t\t\ttr = document.createElement( \"tr\" );\n\t\t\t\ttrChild = document.createElement( \"div\" );\n\n\t\t\t\ttable.style.cssText = \"position:absolute;left:-11111px;border-collapse:separate\";\n\t\t\t\ttr.style.cssText = \"border:1px solid\";\n\n\t\t\t\t// Support: Chrome 86+\n\t\t\t\t// Height set through cssText does not get applied.\n\t\t\t\t// Computed height then comes back as 0.\n\t\t\t\ttr.style.height = \"1px\";\n\t\t\t\ttrChild.style.height = \"9px\";\n\n\t\t\t\t// Support: Android 8 Chrome 86+\n\t\t\t\t// In our bodyBackground.html iframe,\n\t\t\t\t// display for all div elements is set to \"inline\",\n\t\t\t\t// which causes a problem only in Android 8 Chrome 86.\n\t\t\t\t// Ensuring the div is display: block\n\t\t\t\t// gets around this issue.\n\t\t\t\ttrChild.style.display = \"block\";\n\n\t\t\t\tdocumentElement\n\t\t\t\t\t.appendChild( table )\n\t\t\t\t\t.appendChild( tr )\n\t\t\t\t\t.appendChild( trChild );\n\n\t\t\t\ttrStyle = window.getComputedStyle( tr );\n\t\t\t\treliableTrDimensionsVal = ( parseInt( trStyle.height, 10 ) +\n\t\t\t\t\tparseInt( trStyle.borderTopWidth, 10 ) +\n\t\t\t\t\tparseInt( trStyle.borderBottomWidth, 10 ) ) === tr.offsetHeight;\n\n\t\t\t\tdocumentElement.removeChild( table );\n\t\t\t}\n\t\t\treturn reliableTrDimensionsVal;\n\t\t}\n\t} );\n} )();\n\n\nfunction curCSS( elem, name, computed ) {\n\tvar width, minWidth, maxWidth, ret,\n\n\t\t// Support: Firefox 51+\n\t\t// Retrieving style before computed somehow\n\t\t// fixes an issue with getting wrong values\n\t\t// on detached elements\n\t\tstyle = elem.style;\n\n\tcomputed = computed || getStyles( elem );\n\n\t// getPropertyValue is needed for:\n\t// .css('filter') (IE 9 only, #12537)\n\t// .css('--customProperty) (#3144)\n\tif ( computed ) {\n\t\tret = computed.getPropertyValue( name ) || computed[ name ];\n\n\t\tif ( ret === \"\" && !isAttached( elem ) ) {\n\t\t\tret = jQuery.style( elem, name );\n\t\t}\n\n\t\t// A tribute to the \"awesome hack by Dean Edwards\"\n\t\t// Android Browser returns percentage for some values,\n\t\t// but width seems to be reliably pixels.\n\t\t// This is against the CSSOM draft spec:\n\t\t// https://drafts.csswg.org/cssom/#resolved-values\n\t\tif ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) {\n\n\t\t\t// Remember the original values\n\t\t\twidth = style.width;\n\t\t\tminWidth = style.minWidth;\n\t\t\tmaxWidth = style.maxWidth;\n\n\t\t\t// Put in the new values to get a computed value out\n\t\t\tstyle.minWidth = style.maxWidth = style.width = ret;\n\t\t\tret = computed.width;\n\n\t\t\t// Revert the changed values\n\t\t\tstyle.width = width;\n\t\t\tstyle.minWidth = minWidth;\n\t\t\tstyle.maxWidth = maxWidth;\n\t\t}\n\t}\n\n\treturn ret !== undefined ?\n\n\t\t// Support: IE <=9 - 11 only\n\t\t// IE returns zIndex value as an integer.\n\t\tret + \"\" :\n\t\tret;\n}\n\n\nfunction addGetHookIf( conditionFn, hookFn ) {\n\n\t// Define the hook, we'll check on the first run if it's really needed.\n\treturn {\n\t\tget: function() {\n\t\t\tif ( conditionFn() ) {\n\n\t\t\t\t// Hook not needed (or it's not possible to use it due\n\t\t\t\t// to missing dependency), remove it.\n\t\t\t\tdelete this.get;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Hook needed; redefine it so that the support test is not executed again.\n\t\t\treturn ( this.get = hookFn ).apply( this, arguments );\n\t\t}\n\t};\n}\n\n\nvar cssPrefixes = [ \"Webkit\", \"Moz\", \"ms\" ],\n\temptyStyle = document.createElement( \"div\" ).style,\n\tvendorProps = {};\n\n// Return a vendor-prefixed property or undefined\nfunction vendorPropName( name ) {\n\n\t// Check for vendor prefixed names\n\tvar capName = name[ 0 ].toUpperCase() + name.slice( 1 ),\n\t\ti = cssPrefixes.length;\n\n\twhile ( i-- ) {\n\t\tname = cssPrefixes[ i ] + capName;\n\t\tif ( name in emptyStyle ) {\n\t\t\treturn name;\n\t\t}\n\t}\n}\n\n// Return a potentially-mapped jQuery.cssProps or vendor prefixed property\nfunction finalPropName( name ) {\n\tvar final = jQuery.cssProps[ name ] || vendorProps[ name ];\n\n\tif ( final ) {\n\t\treturn final;\n\t}\n\tif ( name in emptyStyle ) {\n\t\treturn name;\n\t}\n\treturn vendorProps[ name ] = vendorPropName( name ) || name;\n}\n\n\nvar\n\n\t// Swappable if display is none or starts with table\n\t// except \"table\", \"table-cell\", or \"table-caption\"\n\t// See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display\n\trdisplayswap = /^(none|table(?!-c[ea]).+)/,\n\trcustomProp = /^--/,\n\tcssShow = { position: \"absolute\", visibility: \"hidden\", display: \"block\" },\n\tcssNormalTransform = {\n\t\tletterSpacing: \"0\",\n\t\tfontWeight: \"400\"\n\t};\n\nfunction setPositiveNumber( _elem, value, subtract ) {\n\n\t// Any relative (+/-) values have already been\n\t// normalized at this point\n\tvar matches = rcssNum.exec( value );\n\treturn matches ?\n\n\t\t// Guard against undefined \"subtract\", e.g., when used as in cssHooks\n\t\tMath.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || \"px\" ) :\n\t\tvalue;\n}\n\nfunction boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) {\n\tvar i = dimension === \"width\" ? 1 : 0,\n\t\textra = 0,\n\t\tdelta = 0;\n\n\t// Adjustment may not be necessary\n\tif ( box === ( isBorderBox ? \"border\" : \"content\" ) ) {\n\t\treturn 0;\n\t}\n\n\tfor ( ; i < 4; i += 2 ) {\n\n\t\t// Both box models exclude margin\n\t\tif ( box === \"margin\" ) {\n\t\t\tdelta += jQuery.css( elem, box + cssExpand[ i ], true, styles );\n\t\t}\n\n\t\t// If we get here with a content-box, we're seeking \"padding\" or \"border\" or \"margin\"\n\t\tif ( !isBorderBox ) {\n\n\t\t\t// Add padding\n\t\t\tdelta += jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\n\t\t\t// For \"border\" or \"margin\", add border\n\t\t\tif ( box !== \"padding\" ) {\n\t\t\t\tdelta += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\n\t\t\t// But still keep track of it otherwise\n\t\t\t} else {\n\t\t\t\textra += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\n\t\t// If we get here with a border-box (content + padding + border), we're seeking \"content\" or\n\t\t// \"padding\" or \"margin\"\n\t\t} else {\n\n\t\t\t// For \"content\", subtract padding\n\t\t\tif ( box === \"content\" ) {\n\t\t\t\tdelta -= jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\t\t\t}\n\n\t\t\t// For \"content\" or \"padding\", subtract border\n\t\t\tif ( box !== \"margin\" ) {\n\t\t\t\tdelta -= jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Account for positive content-box scroll gutter when requested by providing computedVal\n\tif ( !isBorderBox && computedVal >= 0 ) {\n\n\t\t// offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border\n\t\t// Assuming integer scroll gutter, subtract the rest and round down\n\t\tdelta += Math.max( 0, Math.ceil(\n\t\t\telem[ \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -\n\t\t\tcomputedVal -\n\t\t\tdelta -\n\t\t\textra -\n\t\t\t0.5\n\n\t\t// If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter\n\t\t// Use an explicit zero to avoid NaN (gh-3964)\n\t\t) ) || 0;\n\t}\n\n\treturn delta;\n}\n\nfunction getWidthOrHeight( elem, dimension, extra ) {\n\n\t// Start with computed style\n\tvar styles = getStyles( elem ),\n\n\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322).\n\t\t// Fake content-box until we know it's needed to know the true value.\n\t\tboxSizingNeeded = !support.boxSizingReliable() || extra,\n\t\tisBorderBox = boxSizingNeeded &&\n\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\tvalueIsBorderBox = isBorderBox,\n\n\t\tval = curCSS( elem, dimension, styles ),\n\t\toffsetProp = \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 );\n\n\t// Support: Firefox <=54\n\t// Return a confounding non-pixel value or feign ignorance, as appropriate.\n\tif ( rnumnonpx.test( val ) ) {\n\t\tif ( !extra ) {\n\t\t\treturn val;\n\t\t}\n\t\tval = \"auto\";\n\t}\n\n\n\t// Support: IE 9 - 11 only\n\t// Use offsetWidth/offsetHeight for when box sizing is unreliable.\n\t// In those cases, the computed value can be trusted to be border-box.\n\tif ( ( !support.boxSizingReliable() && isBorderBox ||\n\n\t\t// Support: IE 10 - 11+, Edge 15 - 18+\n\t\t// IE/Edge misreport `getComputedStyle` of table rows with width/height\n\t\t// set in CSS while `offset*` properties report correct values.\n\t\t// Interestingly, in some cases IE 9 doesn't suffer from this issue.\n\t\t!support.reliableTrDimensions() && nodeName( elem, \"tr\" ) ||\n\n\t\t// Fall back to offsetWidth/offsetHeight when value is \"auto\"\n\t\t// This happens for inline elements with no explicit setting (gh-3571)\n\t\tval === \"auto\" ||\n\n\t\t// Support: Android <=4.1 - 4.3 only\n\t\t// Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602)\n\t\t!parseFloat( val ) && jQuery.css( elem, \"display\", false, styles ) === \"inline\" ) &&\n\n\t\t// Make sure the element is visible & connected\n\t\telem.getClientRects().length ) {\n\n\t\tisBorderBox = jQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\";\n\n\t\t// Where available, offsetWidth/offsetHeight approximate border box dimensions.\n\t\t// Where not available (e.g., SVG), assume unreliable box-sizing and interpret the\n\t\t// retrieved value as a content box dimension.\n\t\tvalueIsBorderBox = offsetProp in elem;\n\t\tif ( valueIsBorderBox ) {\n\t\t\tval = elem[ offsetProp ];\n\t\t}\n\t}\n\n\t// Normalize \"\" and auto\n\tval = parseFloat( val ) || 0;\n\n\t// Adjust for the element's box model\n\treturn ( val +\n\t\tboxModelAdjustment(\n\t\t\telem,\n\t\t\tdimension,\n\t\t\textra || ( isBorderBox ? \"border\" : \"content\" ),\n\t\t\tvalueIsBorderBox,\n\t\t\tstyles,\n\n\t\t\t// Provide the current computed size to request scroll gutter calculation (gh-3589)\n\t\t\tval\n\t\t)\n\t) + \"px\";\n}\n\njQuery.extend( {\n\n\t// Add in style property hooks for overriding the default\n\t// behavior of getting and setting a style property\n\tcssHooks: {\n\t\topacity: {\n\t\t\tget: function( elem, computed ) {\n\t\t\t\tif ( computed ) {\n\n\t\t\t\t\t// We should always get a number back from opacity\n\t\t\t\t\tvar ret = curCSS( elem, \"opacity\" );\n\t\t\t\t\treturn ret === \"\" ? \"1\" : ret;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t// Don't automatically add \"px\" to these possibly-unitless properties\n\tcssNumber: {\n\t\t\"animationIterationCount\": true,\n\t\t\"columnCount\": true,\n\t\t\"fillOpacity\": true,\n\t\t\"flexGrow\": true,\n\t\t\"flexShrink\": true,\n\t\t\"fontWeight\": true,\n\t\t\"gridArea\": true,\n\t\t\"gridColumn\": true,\n\t\t\"gridColumnEnd\": true,\n\t\t\"gridColumnStart\": true,\n\t\t\"gridRow\": true,\n\t\t\"gridRowEnd\": true,\n\t\t\"gridRowStart\": true,\n\t\t\"lineHeight\": true,\n\t\t\"opacity\": true,\n\t\t\"order\": true,\n\t\t\"orphans\": true,\n\t\t\"widows\": true,\n\t\t\"zIndex\": true,\n\t\t\"zoom\": true\n\t},\n\n\t// Add in properties whose names you wish to fix before\n\t// setting or getting the value\n\tcssProps: {},\n\n\t// Get and set the style property on a DOM Node\n\tstyle: function( elem, name, value, extra ) {\n\n\t\t// Don't set styles on text and comment nodes\n\t\tif ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Make sure that we're working with the right name\n\t\tvar ret, type, hooks,\n\t\t\torigName = camelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name ),\n\t\t\tstyle = elem.style;\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to query the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Gets hook for the prefixed version, then unprefixed version\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// Check if we're setting a value\n\t\tif ( value !== undefined ) {\n\t\t\ttype = typeof value;\n\n\t\t\t// Convert \"+=\" or \"-=\" to relative numbers (#7345)\n\t\t\tif ( type === \"string\" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {\n\t\t\t\tvalue = adjustCSS( elem, name, ret );\n\n\t\t\t\t// Fixes bug #9237\n\t\t\t\ttype = \"number\";\n\t\t\t}\n\n\t\t\t// Make sure that null and NaN values aren't set (#7116)\n\t\t\tif ( value == null || value !== value ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If a number was passed in, add the unit (except for certain CSS properties)\n\t\t\t// The isCustomProp check can be removed in jQuery 4.0 when we only auto-append\n\t\t\t// \"px\" to a few hardcoded values.\n\t\t\tif ( type === \"number\" && !isCustomProp ) {\n\t\t\t\tvalue += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? \"\" : \"px\" );\n\t\t\t}\n\n\t\t\t// background-* props affect original clone's values\n\t\t\tif ( !support.clearCloneStyle && value === \"\" && name.indexOf( \"background\" ) === 0 ) {\n\t\t\t\tstyle[ name ] = \"inherit\";\n\t\t\t}\n\n\t\t\t// If a hook was provided, use that value, otherwise just set the specified value\n\t\t\tif ( !hooks || !( \"set\" in hooks ) ||\n\t\t\t\t( value = hooks.set( elem, value, extra ) ) !== undefined ) {\n\n\t\t\t\tif ( isCustomProp ) {\n\t\t\t\t\tstyle.setProperty( name, value );\n\t\t\t\t} else {\n\t\t\t\t\tstyle[ name ] = value;\n\t\t\t\t}\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// If a hook was provided get the non-computed value from there\n\t\t\tif ( hooks && \"get\" in hooks &&\n\t\t\t\t( ret = hooks.get( elem, false, extra ) ) !== undefined ) {\n\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\t// Otherwise just get the value from the style object\n\t\t\treturn style[ name ];\n\t\t}\n\t},\n\n\tcss: function( elem, name, extra, styles ) {\n\t\tvar val, num, hooks,\n\t\t\torigName = camelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name );\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to modify the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Try prefixed name followed by the unprefixed name\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// If a hook was provided get the computed value from there\n\t\tif ( hooks && \"get\" in hooks ) {\n\t\t\tval = hooks.get( elem, true, extra );\n\t\t}\n\n\t\t// Otherwise, if a way to get the computed value exists, use that\n\t\tif ( val === undefined ) {\n\t\t\tval = curCSS( elem, name, styles );\n\t\t}\n\n\t\t// Convert \"normal\" to computed value\n\t\tif ( val === \"normal\" && name in cssNormalTransform ) {\n\t\t\tval = cssNormalTransform[ name ];\n\t\t}\n\n\t\t// Make numeric if forced or a qualifier was provided and val looks numeric\n\t\tif ( extra === \"\" || extra ) {\n\t\t\tnum = parseFloat( val );\n\t\t\treturn extra === true || isFinite( num ) ? num || 0 : val;\n\t\t}\n\n\t\treturn val;\n\t}\n} );\n\njQuery.each( [ \"height\", \"width\" ], function( _i, dimension ) {\n\tjQuery.cssHooks[ dimension ] = {\n\t\tget: function( elem, computed, extra ) {\n\t\t\tif ( computed ) {\n\n\t\t\t\t// Certain elements can have dimension info if we invisibly show them\n\t\t\t\t// but it must have a current display style that would benefit\n\t\t\t\treturn rdisplayswap.test( jQuery.css( elem, \"display\" ) ) &&\n\n\t\t\t\t\t// Support: Safari 8+\n\t\t\t\t\t// Table columns in Safari have non-zero offsetWidth & zero\n\t\t\t\t\t// getBoundingClientRect().width unless display is changed.\n\t\t\t\t\t// Support: IE <=11 only\n\t\t\t\t\t// Running getBoundingClientRect on a disconnected node\n\t\t\t\t\t// in IE throws an error.\n\t\t\t\t\t( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ?\n\t\t\t\t\tswap( elem, cssShow, function() {\n\t\t\t\t\t\treturn getWidthOrHeight( elem, dimension, extra );\n\t\t\t\t\t} ) :\n\t\t\t\t\tgetWidthOrHeight( elem, dimension, extra );\n\t\t\t}\n\t\t},\n\n\t\tset: function( elem, value, extra ) {\n\t\t\tvar matches,\n\t\t\t\tstyles = getStyles( elem ),\n\n\t\t\t\t// Only read styles.position if the test has a chance to fail\n\t\t\t\t// to avoid forcing a reflow.\n\t\t\t\tscrollboxSizeBuggy = !support.scrollboxSize() &&\n\t\t\t\t\tstyles.position === \"absolute\",\n\n\t\t\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991)\n\t\t\t\tboxSizingNeeded = scrollboxSizeBuggy || extra,\n\t\t\t\tisBorderBox = boxSizingNeeded &&\n\t\t\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\t\t\tsubtract = extra ?\n\t\t\t\t\tboxModelAdjustment(\n\t\t\t\t\t\telem,\n\t\t\t\t\t\tdimension,\n\t\t\t\t\t\textra,\n\t\t\t\t\t\tisBorderBox,\n\t\t\t\t\t\tstyles\n\t\t\t\t\t) :\n\t\t\t\t\t0;\n\n\t\t\t// Account for unreliable border-box dimensions by comparing offset* to computed and\n\t\t\t// faking a content-box to get border and padding (gh-3699)\n\t\t\tif ( isBorderBox && scrollboxSizeBuggy ) {\n\t\t\t\tsubtract -= Math.ceil(\n\t\t\t\t\telem[ \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -\n\t\t\t\t\tparseFloat( styles[ dimension ] ) -\n\t\t\t\t\tboxModelAdjustment( elem, dimension, \"border\", false, styles ) -\n\t\t\t\t\t0.5\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// Convert to pixels if value adjustment is needed\n\t\t\tif ( subtract && ( matches = rcssNum.exec( value ) ) &&\n\t\t\t\t( matches[ 3 ] || \"px\" ) !== \"px\" ) {\n\n\t\t\t\telem.style[ dimension ] = value;\n\t\t\t\tvalue = jQuery.css( elem, dimension );\n\t\t\t}\n\n\t\t\treturn setPositiveNumber( elem, value, subtract );\n\t\t}\n\t};\n} );\n\njQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft,\n\tfunction( elem, computed ) {\n\t\tif ( computed ) {\n\t\t\treturn ( parseFloat( curCSS( elem, \"marginLeft\" ) ) ||\n\t\t\t\telem.getBoundingClientRect().left -\n\t\t\t\t\tswap( elem, { marginLeft: 0 }, function() {\n\t\t\t\t\t\treturn elem.getBoundingClientRect().left;\n\t\t\t\t\t} )\n\t\t\t) + \"px\";\n\t\t}\n\t}\n);\n\n// These hooks are used by animate to expand properties\njQuery.each( {\n\tmargin: \"\",\n\tpadding: \"\",\n\tborder: \"Width\"\n}, function( prefix, suffix ) {\n\tjQuery.cssHooks[ prefix + suffix ] = {\n\t\texpand: function( value ) {\n\t\t\tvar i = 0,\n\t\t\t\texpanded = {},\n\n\t\t\t\t// Assumes a single number if not a string\n\t\t\t\tparts = typeof value === \"string\" ? value.split( \" \" ) : [ value ];\n\n\t\t\tfor ( ; i < 4; i++ ) {\n\t\t\t\texpanded[ prefix + cssExpand[ i ] + suffix ] =\n\t\t\t\t\tparts[ i ] || parts[ i - 2 ] || parts[ 0 ];\n\t\t\t}\n\n\t\t\treturn expanded;\n\t\t}\n\t};\n\n\tif ( prefix !== \"margin\" ) {\n\t\tjQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;\n\t}\n} );\n\njQuery.fn.extend( {\n\tcss: function( name, value ) {\n\t\treturn access( this, function( elem, name, value ) {\n\t\t\tvar styles, len,\n\t\t\t\tmap = {},\n\t\t\t\ti = 0;\n\n\t\t\tif ( Array.isArray( name ) ) {\n\t\t\t\tstyles = getStyles( elem );\n\t\t\t\tlen = name.length;\n\n\t\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\t\tmap[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );\n\t\t\t\t}\n\n\t\t\t\treturn map;\n\t\t\t}\n\n\t\t\treturn value !== undefined ?\n\t\t\t\tjQuery.style( elem, name, value ) :\n\t\t\t\tjQuery.css( elem, name );\n\t\t}, name, value, arguments.length > 1 );\n\t}\n} );\n\n\nfunction Tween( elem, options, prop, end, easing ) {\n\treturn new Tween.prototype.init( elem, options, prop, end, easing );\n}\njQuery.Tween = Tween;\n\nTween.prototype = {\n\tconstructor: Tween,\n\tinit: function( elem, options, prop, end, easing, unit ) {\n\t\tthis.elem = elem;\n\t\tthis.prop = prop;\n\t\tthis.easing = easing || jQuery.easing._default;\n\t\tthis.options = options;\n\t\tthis.start = this.now = this.cur();\n\t\tthis.end = end;\n\t\tthis.unit = unit || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" );\n\t},\n\tcur: function() {\n\t\tvar hooks = Tween.propHooks[ this.prop ];\n\n\t\treturn hooks && hooks.get ?\n\t\t\thooks.get( this ) :\n\t\t\tTween.propHooks._default.get( this );\n\t},\n\trun: function( percent ) {\n\t\tvar eased,\n\t\t\thooks = Tween.propHooks[ this.prop ];\n\n\t\tif ( this.options.duration ) {\n\t\t\tthis.pos = eased = jQuery.easing[ this.easing ](\n\t\t\t\tpercent, this.options.duration * percent, 0, 1, this.options.duration\n\t\t\t);\n\t\t} else {\n\t\t\tthis.pos = eased = percent;\n\t\t}\n\t\tthis.now = ( this.end - this.start ) * eased + this.start;\n\n\t\tif ( this.options.step ) {\n\t\t\tthis.options.step.call( this.elem, this.now, this );\n\t\t}\n\n\t\tif ( hooks && hooks.set ) {\n\t\t\thooks.set( this );\n\t\t} else {\n\t\t\tTween.propHooks._default.set( this );\n\t\t}\n\t\treturn this;\n\t}\n};\n\nTween.prototype.init.prototype = Tween.prototype;\n\nTween.propHooks = {\n\t_default: {\n\t\tget: function( tween ) {\n\t\t\tvar result;\n\n\t\t\t// Use a property on the element directly when it is not a DOM element,\n\t\t\t// or when there is no matching style property that exists.\n\t\t\tif ( tween.elem.nodeType !== 1 ||\n\t\t\t\ttween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) {\n\t\t\t\treturn tween.elem[ tween.prop ];\n\t\t\t}\n\n\t\t\t// Passing an empty string as a 3rd parameter to .css will automatically\n\t\t\t// attempt a parseFloat and fallback to a string if the parse fails.\n\t\t\t// Simple values such as \"10px\" are parsed to Float;\n\t\t\t// complex values such as \"rotate(1rad)\" are returned as-is.\n\t\t\tresult = jQuery.css( tween.elem, tween.prop, \"\" );\n\n\t\t\t// Empty strings, null, undefined and \"auto\" are converted to 0.\n\t\t\treturn !result || result === \"auto\" ? 0 : result;\n\t\t},\n\t\tset: function( tween ) {\n\n\t\t\t// Use step hook for back compat.\n\t\t\t// Use cssHook if its there.\n\t\t\t// Use .style if available and use plain properties where available.\n\t\t\tif ( jQuery.fx.step[ tween.prop ] ) {\n\t\t\t\tjQuery.fx.step[ tween.prop ]( tween );\n\t\t\t} else if ( tween.elem.nodeType === 1 && (\n\t\t\t\tjQuery.cssHooks[ tween.prop ] ||\n\t\t\t\t\ttween.elem.style[ finalPropName( tween.prop ) ] != null ) ) {\n\t\t\t\tjQuery.style( tween.elem, tween.prop, tween.now + tween.unit );\n\t\t\t} else {\n\t\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t\t}\n\t\t}\n\t}\n};\n\n// Support: IE <=9 only\n// Panic based approach to setting things on disconnected nodes\nTween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {\n\tset: function( tween ) {\n\t\tif ( tween.elem.nodeType && tween.elem.parentNode ) {\n\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t}\n\t}\n};\n\njQuery.easing = {\n\tlinear: function( p ) {\n\t\treturn p;\n\t},\n\tswing: function( p ) {\n\t\treturn 0.5 - Math.cos( p * Math.PI ) / 2;\n\t},\n\t_default: \"swing\"\n};\n\njQuery.fx = Tween.prototype.init;\n\n// Back compat <1.8 extension point\njQuery.fx.step = {};\n\n\n\n\nvar\n\tfxNow, inProgress,\n\trfxtypes = /^(?:toggle|show|hide)$/,\n\trrun = /queueHooks$/;\n\nfunction schedule() {\n\tif ( inProgress ) {\n\t\tif ( document.hidden === false && window.requestAnimationFrame ) {\n\t\t\twindow.requestAnimationFrame( schedule );\n\t\t} else {\n\t\t\twindow.setTimeout( schedule, jQuery.fx.interval );\n\t\t}\n\n\t\tjQuery.fx.tick();\n\t}\n}\n\n// Animations created synchronously will run synchronously\nfunction createFxNow() {\n\twindow.setTimeout( function() {\n\t\tfxNow = undefined;\n\t} );\n\treturn ( fxNow = Date.now() );\n}\n\n// Generate parameters to create a standard animation\nfunction genFx( type, includeWidth ) {\n\tvar which,\n\t\ti = 0,\n\t\tattrs = { height: type };\n\n\t// If we include width, step value is 1 to do all cssExpand values,\n\t// otherwise step value is 2 to skip over Left and Right\n\tincludeWidth = includeWidth ? 1 : 0;\n\tfor ( ; i < 4; i += 2 - includeWidth ) {\n\t\twhich = cssExpand[ i ];\n\t\tattrs[ \"margin\" + which ] = attrs[ \"padding\" + which ] = type;\n\t}\n\n\tif ( includeWidth ) {\n\t\tattrs.opacity = attrs.width = type;\n\t}\n\n\treturn attrs;\n}\n\nfunction createTween( value, prop, animation ) {\n\tvar tween,\n\t\tcollection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ \"*\" ] ),\n\t\tindex = 0,\n\t\tlength = collection.length;\n\tfor ( ; index < length; index++ ) {\n\t\tif ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {\n\n\t\t\t// We're done with this property\n\t\t\treturn tween;\n\t\t}\n\t}\n}\n\nfunction defaultPrefilter( elem, props, opts ) {\n\tvar prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display,\n\t\tisBox = \"width\" in props || \"height\" in props,\n\t\tanim = this,\n\t\torig = {},\n\t\tstyle = elem.style,\n\t\thidden = elem.nodeType && isHiddenWithinTree( elem ),\n\t\tdataShow = dataPriv.get( elem, \"fxshow\" );\n\n\t// Queue-skipping animations hijack the fx hooks\n\tif ( !opts.queue ) {\n\t\thooks = jQuery._queueHooks( elem, \"fx\" );\n\t\tif ( hooks.unqueued == null ) {\n\t\t\thooks.unqueued = 0;\n\t\t\toldfire = hooks.empty.fire;\n\t\t\thooks.empty.fire = function() {\n\t\t\t\tif ( !hooks.unqueued ) {\n\t\t\t\t\toldfire();\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t\thooks.unqueued++;\n\n\t\tanim.always( function() {\n\n\t\t\t// Ensure the complete handler is called before this completes\n\t\t\tanim.always( function() {\n\t\t\t\thooks.unqueued--;\n\t\t\t\tif ( !jQuery.queue( elem, \"fx\" ).length ) {\n\t\t\t\t\thooks.empty.fire();\n\t\t\t\t}\n\t\t\t} );\n\t\t} );\n\t}\n\n\t// Detect show/hide animations\n\tfor ( prop in props ) {\n\t\tvalue = props[ prop ];\n\t\tif ( rfxtypes.test( value ) ) {\n\t\t\tdelete props[ prop ];\n\t\t\ttoggle = toggle || value === \"toggle\";\n\t\t\tif ( value === ( hidden ? \"hide\" : \"show\" ) ) {\n\n\t\t\t\t// Pretend to be hidden if this is a \"show\" and\n\t\t\t\t// there is still data from a stopped show/hide\n\t\t\t\tif ( value === \"show\" && dataShow && dataShow[ prop ] !== undefined ) {\n\t\t\t\t\thidden = true;\n\n\t\t\t\t// Ignore all other no-op show/hide data\n\t\t\t\t} else {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\torig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );\n\t\t}\n\t}\n\n\t// Bail out if this is a no-op like .hide().hide()\n\tpropTween = !jQuery.isEmptyObject( props );\n\tif ( !propTween && jQuery.isEmptyObject( orig ) ) {\n\t\treturn;\n\t}\n\n\t// Restrict \"overflow\" and \"display\" styles during box animations\n\tif ( isBox && elem.nodeType === 1 ) {\n\n\t\t// Support: IE <=9 - 11, Edge 12 - 15\n\t\t// Record all 3 overflow attributes because IE does not infer the shorthand\n\t\t// from identically-valued overflowX and overflowY and Edge just mirrors\n\t\t// the overflowX value there.\n\t\topts.overflow = [ style.overflow, style.overflowX, style.overflowY ];\n\n\t\t// Identify a display type, preferring old show/hide data over the CSS cascade\n\t\trestoreDisplay = dataShow && dataShow.display;\n\t\tif ( restoreDisplay == null ) {\n\t\t\trestoreDisplay = dataPriv.get( elem, \"display\" );\n\t\t}\n\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\tif ( display === \"none\" ) {\n\t\t\tif ( restoreDisplay ) {\n\t\t\t\tdisplay = restoreDisplay;\n\t\t\t} else {\n\n\t\t\t\t// Get nonempty value(s) by temporarily forcing visibility\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t\trestoreDisplay = elem.style.display || restoreDisplay;\n\t\t\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\t\t\tshowHide( [ elem ] );\n\t\t\t}\n\t\t}\n\n\t\t// Animate inline elements as inline-block\n\t\tif ( display === \"inline\" || display === \"inline-block\" && restoreDisplay != null ) {\n\t\t\tif ( jQuery.css( elem, \"float\" ) === \"none\" ) {\n\n\t\t\t\t// Restore the original display value at the end of pure show/hide animations\n\t\t\t\tif ( !propTween ) {\n\t\t\t\t\tanim.done( function() {\n\t\t\t\t\t\tstyle.display = restoreDisplay;\n\t\t\t\t\t} );\n\t\t\t\t\tif ( restoreDisplay == null ) {\n\t\t\t\t\t\tdisplay = style.display;\n\t\t\t\t\t\trestoreDisplay = display === \"none\" ? \"\" : display;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tstyle.display = \"inline-block\";\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( opts.overflow ) {\n\t\tstyle.overflow = \"hidden\";\n\t\tanim.always( function() {\n\t\t\tstyle.overflow = opts.overflow[ 0 ];\n\t\t\tstyle.overflowX = opts.overflow[ 1 ];\n\t\t\tstyle.overflowY = opts.overflow[ 2 ];\n\t\t} );\n\t}\n\n\t// Implement show/hide animations\n\tpropTween = false;\n\tfor ( prop in orig ) {\n\n\t\t// General show/hide setup for this element animation\n\t\tif ( !propTween ) {\n\t\t\tif ( dataShow ) {\n\t\t\t\tif ( \"hidden\" in dataShow ) {\n\t\t\t\t\thidden = dataShow.hidden;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tdataShow = dataPriv.access( elem, \"fxshow\", { display: restoreDisplay } );\n\t\t\t}\n\n\t\t\t// Store hidden/visible for toggle so `.stop().toggle()` \"reverses\"\n\t\t\tif ( toggle ) {\n\t\t\t\tdataShow.hidden = !hidden;\n\t\t\t}\n\n\t\t\t// Show elements before animating them\n\t\t\tif ( hidden ) {\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t}\n\n\t\t\t/* eslint-disable no-loop-func */\n\n\t\t\tanim.done( function() {\n\n\t\t\t\t/* eslint-enable no-loop-func */\n\n\t\t\t\t// The final step of a \"hide\" animation is actually hiding the element\n\t\t\t\tif ( !hidden ) {\n\t\t\t\t\tshowHide( [ elem ] );\n\t\t\t\t}\n\t\t\t\tdataPriv.remove( elem, \"fxshow\" );\n\t\t\t\tfor ( prop in orig ) {\n\t\t\t\t\tjQuery.style( elem, prop, orig[ prop ] );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\t// Per-property setup\n\t\tpropTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );\n\t\tif ( !( prop in dataShow ) ) {\n\t\t\tdataShow[ prop ] = propTween.start;\n\t\t\tif ( hidden ) {\n\t\t\t\tpropTween.end = propTween.start;\n\t\t\t\tpropTween.start = 0;\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction propFilter( props, specialEasing ) {\n\tvar index, name, easing, value, hooks;\n\n\t// camelCase, specialEasing and expand cssHook pass\n\tfor ( index in props ) {\n\t\tname = camelCase( index );\n\t\teasing = specialEasing[ name ];\n\t\tvalue = props[ index ];\n\t\tif ( Array.isArray( value ) ) {\n\t\t\teasing = value[ 1 ];\n\t\t\tvalue = props[ index ] = value[ 0 ];\n\t\t}\n\n\t\tif ( index !== name ) {\n\t\t\tprops[ name ] = value;\n\t\t\tdelete props[ index ];\n\t\t}\n\n\t\thooks = jQuery.cssHooks[ name ];\n\t\tif ( hooks && \"expand\" in hooks ) {\n\t\t\tvalue = hooks.expand( value );\n\t\t\tdelete props[ name ];\n\n\t\t\t// Not quite $.extend, this won't overwrite existing keys.\n\t\t\t// Reusing 'index' because we have the correct \"name\"\n\t\t\tfor ( index in value ) {\n\t\t\t\tif ( !( index in props ) ) {\n\t\t\t\t\tprops[ index ] = value[ index ];\n\t\t\t\t\tspecialEasing[ index ] = easing;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tspecialEasing[ name ] = easing;\n\t\t}\n\t}\n}\n\nfunction Animation( elem, properties, options ) {\n\tvar result,\n\t\tstopped,\n\t\tindex = 0,\n\t\tlength = Animation.prefilters.length,\n\t\tdeferred = jQuery.Deferred().always( function() {\n\n\t\t\t// Don't match elem in the :animated selector\n\t\t\tdelete tick.elem;\n\t\t} ),\n\t\ttick = function() {\n\t\t\tif ( stopped ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tvar currentTime = fxNow || createFxNow(),\n\t\t\t\tremaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),\n\n\t\t\t\t// Support: Android 2.3 only\n\t\t\t\t// Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497)\n\t\t\t\ttemp = remaining / animation.duration || 0,\n\t\t\t\tpercent = 1 - temp,\n\t\t\t\tindex = 0,\n\t\t\t\tlength = animation.tweens.length;\n\n\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\tanimation.tweens[ index ].run( percent );\n\t\t\t}\n\n\t\t\tdeferred.notifyWith( elem, [ animation, percent, remaining ] );\n\n\t\t\t// If there's more to do, yield\n\t\t\tif ( percent < 1 && length ) {\n\t\t\t\treturn remaining;\n\t\t\t}\n\n\t\t\t// If this was an empty animation, synthesize a final progress notification\n\t\t\tif ( !length ) {\n\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t}\n\n\t\t\t// Resolve the animation and report its conclusion\n\t\t\tdeferred.resolveWith( elem, [ animation ] );\n\t\t\treturn false;\n\t\t},\n\t\tanimation = deferred.promise( {\n\t\t\telem: elem,\n\t\t\tprops: jQuery.extend( {}, properties ),\n\t\t\topts: jQuery.extend( true, {\n\t\t\t\tspecialEasing: {},\n\t\t\t\teasing: jQuery.easing._default\n\t\t\t}, options ),\n\t\t\toriginalProperties: properties,\n\t\t\toriginalOptions: options,\n\t\t\tstartTime: fxNow || createFxNow(),\n\t\t\tduration: options.duration,\n\t\t\ttweens: [],\n\t\t\tcreateTween: function( prop, end ) {\n\t\t\t\tvar tween = jQuery.Tween( elem, animation.opts, prop, end,\n\t\t\t\t\tanimation.opts.specialEasing[ prop ] || animation.opts.easing );\n\t\t\t\tanimation.tweens.push( tween );\n\t\t\t\treturn tween;\n\t\t\t},\n\t\t\tstop: function( gotoEnd ) {\n\t\t\t\tvar index = 0,\n\n\t\t\t\t\t// If we are going to the end, we want to run all the tweens\n\t\t\t\t\t// otherwise we skip this part\n\t\t\t\t\tlength = gotoEnd ? animation.tweens.length : 0;\n\t\t\t\tif ( stopped ) {\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t\tstopped = true;\n\t\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\t\tanimation.tweens[ index ].run( 1 );\n\t\t\t\t}\n\n\t\t\t\t// Resolve when we played the last frame; otherwise, reject\n\t\t\t\tif ( gotoEnd ) {\n\t\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t\t\tdeferred.resolveWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t} else {\n\t\t\t\t\tdeferred.rejectWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} ),\n\t\tprops = animation.props;\n\n\tpropFilter( props, animation.opts.specialEasing );\n\n\tfor ( ; index < length; index++ ) {\n\t\tresult = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );\n\t\tif ( result ) {\n\t\t\tif ( isFunction( result.stop ) ) {\n\t\t\t\tjQuery._queueHooks( animation.elem, animation.opts.queue ).stop =\n\t\t\t\t\tresult.stop.bind( result );\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\t}\n\n\tjQuery.map( props, createTween, animation );\n\n\tif ( isFunction( animation.opts.start ) ) {\n\t\tanimation.opts.start.call( elem, animation );\n\t}\n\n\t// Attach callbacks from options\n\tanimation\n\t\t.progress( animation.opts.progress )\n\t\t.done( animation.opts.done, animation.opts.complete )\n\t\t.fail( animation.opts.fail )\n\t\t.always( animation.opts.always );\n\n\tjQuery.fx.timer(\n\t\tjQuery.extend( tick, {\n\t\t\telem: elem,\n\t\t\tanim: animation,\n\t\t\tqueue: animation.opts.queue\n\t\t} )\n\t);\n\n\treturn animation;\n}\n\njQuery.Animation = jQuery.extend( Animation, {\n\n\ttweeners: {\n\t\t\"*\": [ function( prop, value ) {\n\t\t\tvar tween = this.createTween( prop, value );\n\t\t\tadjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );\n\t\t\treturn tween;\n\t\t} ]\n\t},\n\n\ttweener: function( props, callback ) {\n\t\tif ( isFunction( props ) ) {\n\t\t\tcallback = props;\n\t\t\tprops = [ \"*\" ];\n\t\t} else {\n\t\t\tprops = props.match( rnothtmlwhite );\n\t\t}\n\n\t\tvar prop,\n\t\t\tindex = 0,\n\t\t\tlength = props.length;\n\n\t\tfor ( ; index < length; index++ ) {\n\t\t\tprop = props[ index ];\n\t\t\tAnimation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];\n\t\t\tAnimation.tweeners[ prop ].unshift( callback );\n\t\t}\n\t},\n\n\tprefilters: [ defaultPrefilter ],\n\n\tprefilter: function( callback, prepend ) {\n\t\tif ( prepend ) {\n\t\t\tAnimation.prefilters.unshift( callback );\n\t\t} else {\n\t\t\tAnimation.prefilters.push( callback );\n\t\t}\n\t}\n} );\n\njQuery.speed = function( speed, easing, fn ) {\n\tvar opt = speed && typeof speed === \"object\" ? jQuery.extend( {}, speed ) : {\n\t\tcomplete: fn || !fn && easing ||\n\t\t\tisFunction( speed ) && speed,\n\t\tduration: speed,\n\t\teasing: fn && easing || easing && !isFunction( easing ) && easing\n\t};\n\n\t// Go to the end state if fx are off\n\tif ( jQuery.fx.off ) {\n\t\topt.duration = 0;\n\n\t} else {\n\t\tif ( typeof opt.duration !== \"number\" ) {\n\t\t\tif ( opt.duration in jQuery.fx.speeds ) {\n\t\t\t\topt.duration = jQuery.fx.speeds[ opt.duration ];\n\n\t\t\t} else {\n\t\t\t\topt.duration = jQuery.fx.speeds._default;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Normalize opt.queue - true/undefined/null -> \"fx\"\n\tif ( opt.queue == null || opt.queue === true ) {\n\t\topt.queue = \"fx\";\n\t}\n\n\t// Queueing\n\topt.old = opt.complete;\n\n\topt.complete = function() {\n\t\tif ( isFunction( opt.old ) ) {\n\t\t\topt.old.call( this );\n\t\t}\n\n\t\tif ( opt.queue ) {\n\t\t\tjQuery.dequeue( this, opt.queue );\n\t\t}\n\t};\n\n\treturn opt;\n};\n\njQuery.fn.extend( {\n\tfadeTo: function( speed, to, easing, callback ) {\n\n\t\t// Show any hidden elements after setting opacity to 0\n\t\treturn this.filter( isHiddenWithinTree ).css( \"opacity\", 0 ).show()\n\n\t\t\t// Animate to the value specified\n\t\t\t.end().animate( { opacity: to }, speed, easing, callback );\n\t},\n\tanimate: function( prop, speed, easing, callback ) {\n\t\tvar empty = jQuery.isEmptyObject( prop ),\n\t\t\toptall = jQuery.speed( speed, easing, callback ),\n\t\t\tdoAnimation = function() {\n\n\t\t\t\t// Operate on a copy of prop so per-property easing won't be lost\n\t\t\t\tvar anim = Animation( this, jQuery.extend( {}, prop ), optall );\n\n\t\t\t\t// Empty animations, or finishing resolves immediately\n\t\t\t\tif ( empty || dataPriv.get( this, \"finish\" ) ) {\n\t\t\t\t\tanim.stop( true );\n\t\t\t\t}\n\t\t\t};\n\n\t\tdoAnimation.finish = doAnimation;\n\n\t\treturn empty || optall.queue === false ?\n\t\t\tthis.each( doAnimation ) :\n\t\t\tthis.queue( optall.queue, doAnimation );\n\t},\n\tstop: function( type, clearQueue, gotoEnd ) {\n\t\tvar stopQueue = function( hooks ) {\n\t\t\tvar stop = hooks.stop;\n\t\t\tdelete hooks.stop;\n\t\t\tstop( gotoEnd );\n\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tgotoEnd = clearQueue;\n\t\t\tclearQueue = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\tif ( clearQueue ) {\n\t\t\tthis.queue( type || \"fx\", [] );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar dequeue = true,\n\t\t\t\tindex = type != null && type + \"queueHooks\",\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tdata = dataPriv.get( this );\n\n\t\t\tif ( index ) {\n\t\t\t\tif ( data[ index ] && data[ index ].stop ) {\n\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( index in data ) {\n\t\t\t\t\tif ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {\n\t\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this &&\n\t\t\t\t\t( type == null || timers[ index ].queue === type ) ) {\n\n\t\t\t\t\ttimers[ index ].anim.stop( gotoEnd );\n\t\t\t\t\tdequeue = false;\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Start the next in the queue if the last step wasn't forced.\n\t\t\t// Timers currently will call their complete callbacks, which\n\t\t\t// will dequeue but only if they were gotoEnd.\n\t\t\tif ( dequeue || !gotoEnd ) {\n\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t}\n\t\t} );\n\t},\n\tfinish: function( type ) {\n\t\tif ( type !== false ) {\n\t\t\ttype = type || \"fx\";\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tvar index,\n\t\t\t\tdata = dataPriv.get( this ),\n\t\t\t\tqueue = data[ type + \"queue\" ],\n\t\t\t\thooks = data[ type + \"queueHooks\" ],\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tlength = queue ? queue.length : 0;\n\n\t\t\t// Enable finishing flag on private data\n\t\t\tdata.finish = true;\n\n\t\t\t// Empty the queue first\n\t\t\tjQuery.queue( this, type, [] );\n\n\t\t\tif ( hooks && hooks.stop ) {\n\t\t\t\thooks.stop.call( this, true );\n\t\t\t}\n\n\t\t\t// Look for any active animations, and finish them\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this && timers[ index ].queue === type ) {\n\t\t\t\t\ttimers[ index ].anim.stop( true );\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Look for any animations in the old queue and finish them\n\t\t\tfor ( index = 0; index < length; index++ ) {\n\t\t\t\tif ( queue[ index ] && queue[ index ].finish ) {\n\t\t\t\t\tqueue[ index ].finish.call( this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Turn off finishing flag\n\t\t\tdelete data.finish;\n\t\t} );\n\t}\n} );\n\njQuery.each( [ \"toggle\", \"show\", \"hide\" ], function( _i, name ) {\n\tvar cssFn = jQuery.fn[ name ];\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn speed == null || typeof speed === \"boolean\" ?\n\t\t\tcssFn.apply( this, arguments ) :\n\t\t\tthis.animate( genFx( name, true ), speed, easing, callback );\n\t};\n} );\n\n// Generate shortcuts for custom animations\njQuery.each( {\n\tslideDown: genFx( \"show\" ),\n\tslideUp: genFx( \"hide\" ),\n\tslideToggle: genFx( \"toggle\" ),\n\tfadeIn: { opacity: \"show\" },\n\tfadeOut: { opacity: \"hide\" },\n\tfadeToggle: { opacity: \"toggle\" }\n}, function( name, props ) {\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn this.animate( props, speed, easing, callback );\n\t};\n} );\n\njQuery.timers = [];\njQuery.fx.tick = function() {\n\tvar timer,\n\t\ti = 0,\n\t\ttimers = jQuery.timers;\n\n\tfxNow = Date.now();\n\n\tfor ( ; i < timers.length; i++ ) {\n\t\ttimer = timers[ i ];\n\n\t\t// Run the timer and safely remove it when done (allowing for external removal)\n\t\tif ( !timer() && timers[ i ] === timer ) {\n\t\t\ttimers.splice( i--, 1 );\n\t\t}\n\t}\n\n\tif ( !timers.length ) {\n\t\tjQuery.fx.stop();\n\t}\n\tfxNow = undefined;\n};\n\njQuery.fx.timer = function( timer ) {\n\tjQuery.timers.push( timer );\n\tjQuery.fx.start();\n};\n\njQuery.fx.interval = 13;\njQuery.fx.start = function() {\n\tif ( inProgress ) {\n\t\treturn;\n\t}\n\n\tinProgress = true;\n\tschedule();\n};\n\njQuery.fx.stop = function() {\n\tinProgress = null;\n};\n\njQuery.fx.speeds = {\n\tslow: 600,\n\tfast: 200,\n\n\t// Default speed\n\t_default: 400\n};\n\n\n// Based off of the plugin by Clint Helfers, with permission.\n// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/\njQuery.fn.delay = function( time, type ) {\n\ttime = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;\n\ttype = type || \"fx\";\n\n\treturn this.queue( type, function( next, hooks ) {\n\t\tvar timeout = window.setTimeout( next, time );\n\t\thooks.stop = function() {\n\t\t\twindow.clearTimeout( timeout );\n\t\t};\n\t} );\n};\n\n\n( function() {\n\tvar input = document.createElement( \"input\" ),\n\t\tselect = document.createElement( \"select\" ),\n\t\topt = select.appendChild( document.createElement( \"option\" ) );\n\n\tinput.type = \"checkbox\";\n\n\t// Support: Android <=4.3 only\n\t// Default value for a checkbox should be \"on\"\n\tsupport.checkOn = input.value !== \"\";\n\n\t// Support: IE <=11 only\n\t// Must access selectedIndex to make default options select\n\tsupport.optSelected = opt.selected;\n\n\t// Support: IE <=11 only\n\t// An input loses its value after becoming a radio\n\tinput = document.createElement( \"input\" );\n\tinput.value = \"t\";\n\tinput.type = \"radio\";\n\tsupport.radioValue = input.value === \"t\";\n} )();\n\n\nvar boolHook,\n\tattrHandle = jQuery.expr.attrHandle;\n\njQuery.fn.extend( {\n\tattr: function( name, value ) {\n\t\treturn access( this, jQuery.attr, name, value, arguments.length > 1 );\n\t},\n\n\tremoveAttr: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.removeAttr( this, name );\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tattr: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set attributes on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Fallback to prop when attributes are not supported\n\t\tif ( typeof elem.getAttribute === \"undefined\" ) {\n\t\t\treturn jQuery.prop( elem, name, value );\n\t\t}\n\n\t\t// Attribute hooks are determined by the lowercase version\n\t\t// Grab necessary hook if one is defined\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\t\t\thooks = jQuery.attrHooks[ name.toLowerCase() ] ||\n\t\t\t\t( jQuery.expr.match.bool.test( name ) ? boolHook : undefined );\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( value === null ) {\n\t\t\t\tjQuery.removeAttr( elem, name );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\telem.setAttribute( name, value + \"\" );\n\t\t\treturn value;\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\tret = jQuery.find.attr( elem, name );\n\n\t\t// Non-existent attributes return null, we normalize to undefined\n\t\treturn ret == null ? undefined : ret;\n\t},\n\n\tattrHooks: {\n\t\ttype: {\n\t\t\tset: function( elem, value ) {\n\t\t\t\tif ( !support.radioValue && value === \"radio\" &&\n\t\t\t\t\tnodeName( elem, \"input\" ) ) {\n\t\t\t\t\tvar val = elem.value;\n\t\t\t\t\telem.setAttribute( \"type\", value );\n\t\t\t\t\tif ( val ) {\n\t\t\t\t\t\telem.value = val;\n\t\t\t\t\t}\n\t\t\t\t\treturn value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\tremoveAttr: function( elem, value ) {\n\t\tvar name,\n\t\t\ti = 0,\n\n\t\t\t// Attribute names can contain non-HTML whitespace characters\n\t\t\t// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2\n\t\t\tattrNames = value && value.match( rnothtmlwhite );\n\n\t\tif ( attrNames && elem.nodeType === 1 ) {\n\t\t\twhile ( ( name = attrNames[ i++ ] ) ) {\n\t\t\t\telem.removeAttribute( name );\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Hooks for boolean attributes\nboolHook = {\n\tset: function( elem, value, name ) {\n\t\tif ( value === false ) {\n\n\t\t\t// Remove boolean attributes when set to false\n\t\t\tjQuery.removeAttr( elem, name );\n\t\t} else {\n\t\t\telem.setAttribute( name, name );\n\t\t}\n\t\treturn name;\n\t}\n};\n\njQuery.each( jQuery.expr.match.bool.source.match( /\\w+/g ), function( _i, name ) {\n\tvar getter = attrHandle[ name ] || jQuery.find.attr;\n\n\tattrHandle[ name ] = function( elem, name, isXML ) {\n\t\tvar ret, handle,\n\t\t\tlowercaseName = name.toLowerCase();\n\n\t\tif ( !isXML ) {\n\n\t\t\t// Avoid an infinite loop by temporarily removing this function from the getter\n\t\t\thandle = attrHandle[ lowercaseName ];\n\t\t\tattrHandle[ lowercaseName ] = ret;\n\t\t\tret = getter( elem, name, isXML ) != null ?\n\t\t\t\tlowercaseName :\n\t\t\t\tnull;\n\t\t\tattrHandle[ lowercaseName ] = handle;\n\t\t}\n\t\treturn ret;\n\t};\n} );\n\n\n\n\nvar rfocusable = /^(?:input|select|textarea|button)$/i,\n\trclickable = /^(?:a|area)$/i;\n\njQuery.fn.extend( {\n\tprop: function( name, value ) {\n\t\treturn access( this, jQuery.prop, name, value, arguments.length > 1 );\n\t},\n\n\tremoveProp: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tdelete this[ jQuery.propFix[ name ] || name ];\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tprop: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set properties on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// Fix name and attach hooks\n\t\t\tname = jQuery.propFix[ name ] || name;\n\t\t\thooks = jQuery.propHooks[ name ];\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\treturn ( elem[ name ] = value );\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\treturn elem[ name ];\n\t},\n\n\tpropHooks: {\n\t\ttabIndex: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\t// Support: IE <=9 - 11 only\n\t\t\t\t// elem.tabIndex doesn't always return the\n\t\t\t\t// correct value when it hasn't been explicitly set\n\t\t\t\t// https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/\n\t\t\t\t// Use proper attribute retrieval(#12072)\n\t\t\t\tvar tabindex = jQuery.find.attr( elem, \"tabindex\" );\n\n\t\t\t\tif ( tabindex ) {\n\t\t\t\t\treturn parseInt( tabindex, 10 );\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\trfocusable.test( elem.nodeName ) ||\n\t\t\t\t\trclickable.test( elem.nodeName ) &&\n\t\t\t\t\telem.href\n\t\t\t\t) {\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t},\n\n\tpropFix: {\n\t\t\"for\": \"htmlFor\",\n\t\t\"class\": \"className\"\n\t}\n} );\n\n// Support: IE <=11 only\n// Accessing the selectedIndex property\n// forces the browser to respect setting selected\n// on the option\n// The getter ensures a default option is selected\n// when in an optgroup\n// eslint rule \"no-unused-expressions\" is disabled for this code\n// since it considers such accessions noop\nif ( !support.optSelected ) {\n\tjQuery.propHooks.selected = {\n\t\tget: function( elem ) {\n\n\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent && parent.parentNode ) {\n\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t\tset: function( elem ) {\n\n\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent ) {\n\t\t\t\tparent.selectedIndex;\n\n\t\t\t\tif ( parent.parentNode ) {\n\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\njQuery.each( [\n\t\"tabIndex\",\n\t\"readOnly\",\n\t\"maxLength\",\n\t\"cellSpacing\",\n\t\"cellPadding\",\n\t\"rowSpan\",\n\t\"colSpan\",\n\t\"useMap\",\n\t\"frameBorder\",\n\t\"contentEditable\"\n], function() {\n\tjQuery.propFix[ this.toLowerCase() ] = this;\n} );\n\n\n\n\n\t// Strip and collapse whitespace according to HTML spec\n\t// https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace\n\tfunction stripAndCollapse( value ) {\n\t\tvar tokens = value.match( rnothtmlwhite ) || [];\n\t\treturn tokens.join( \" \" );\n\t}\n\n\nfunction getClass( elem ) {\n\treturn elem.getAttribute && elem.getAttribute( \"class\" ) || \"\";\n}\n\nfunction classesToArray( value ) {\n\tif ( Array.isArray( value ) ) {\n\t\treturn value;\n\t}\n\tif ( typeof value === \"string\" ) {\n\t\treturn value.match( rnothtmlwhite ) || [];\n\t}\n\treturn [];\n}\n\njQuery.fn.extend( {\n\taddClass: function( value ) {\n\t\tvar classes, elem, cur, curValue, clazz, j, finalValue,\n\t\t\ti = 0;\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).addClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tclasses = classesToArray( value );\n\n\t\tif ( classes.length ) {\n\t\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\t\tcurValue = getClass( elem );\n\t\t\t\tcur = elem.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( ( clazz = classes[ j++ ] ) ) {\n\t\t\t\t\t\tif ( cur.indexOf( \" \" + clazz + \" \" ) < 0 ) {\n\t\t\t\t\t\t\tcur += clazz + \" \";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\telem.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tremoveClass: function( value ) {\n\t\tvar classes, elem, cur, curValue, clazz, j, finalValue,\n\t\t\ti = 0;\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tif ( !arguments.length ) {\n\t\t\treturn this.attr( \"class\", \"\" );\n\t\t}\n\n\t\tclasses = classesToArray( value );\n\n\t\tif ( classes.length ) {\n\t\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\t\tcurValue = getClass( elem );\n\n\t\t\t\t// This expression is here for better compressibility (see addClass)\n\t\t\t\tcur = elem.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( ( clazz = classes[ j++ ] ) ) {\n\n\t\t\t\t\t\t// Remove *all* instances\n\t\t\t\t\t\twhile ( cur.indexOf( \" \" + clazz + \" \" ) > -1 ) {\n\t\t\t\t\t\t\tcur = cur.replace( \" \" + clazz + \" \", \" \" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\telem.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\ttoggleClass: function( value, stateVal ) {\n\t\tvar type = typeof value,\n\t\t\tisValidValue = type === \"string\" || Array.isArray( value );\n\n\t\tif ( typeof stateVal === \"boolean\" && isValidValue ) {\n\t\t\treturn stateVal ? this.addClass( value ) : this.removeClass( value );\n\t\t}\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).toggleClass(\n\t\t\t\t\tvalue.call( this, i, getClass( this ), stateVal ),\n\t\t\t\t\tstateVal\n\t\t\t\t);\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar className, i, self, classNames;\n\n\t\t\tif ( isValidValue ) {\n\n\t\t\t\t// Toggle individual class names\n\t\t\t\ti = 0;\n\t\t\t\tself = jQuery( this );\n\t\t\t\tclassNames = classesToArray( value );\n\n\t\t\t\twhile ( ( className = classNames[ i++ ] ) ) {\n\n\t\t\t\t\t// Check each className given, space separated list\n\t\t\t\t\tif ( self.hasClass( className ) ) {\n\t\t\t\t\t\tself.removeClass( className );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tself.addClass( className );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t// Toggle whole class name\n\t\t\t} else if ( value === undefined || type === \"boolean\" ) {\n\t\t\t\tclassName = getClass( this );\n\t\t\t\tif ( className ) {\n\n\t\t\t\t\t// Store className if set\n\t\t\t\t\tdataPriv.set( this, \"__className__\", className );\n\t\t\t\t}\n\n\t\t\t\t// If the element has a class name or if we're passed `false`,\n\t\t\t\t// then remove the whole classname (if there was one, the above saved it).\n\t\t\t\t// Otherwise bring back whatever was previously saved (if anything),\n\t\t\t\t// falling back to the empty string if nothing was stored.\n\t\t\t\tif ( this.setAttribute ) {\n\t\t\t\t\tthis.setAttribute( \"class\",\n\t\t\t\t\t\tclassName || value === false ?\n\t\t\t\t\t\t\t\"\" :\n\t\t\t\t\t\t\tdataPriv.get( this, \"__className__\" ) || \"\"\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\thasClass: function( selector ) {\n\t\tvar className, elem,\n\t\t\ti = 0;\n\n\t\tclassName = \" \" + selector + \" \";\n\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\tif ( elem.nodeType === 1 &&\n\t\t\t\t( \" \" + stripAndCollapse( getClass( elem ) ) + \" \" ).indexOf( className ) > -1 ) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n} );\n\n\n\n\nvar rreturn = /\\r/g;\n\njQuery.fn.extend( {\n\tval: function( value ) {\n\t\tvar hooks, ret, valueIsFunction,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !arguments.length ) {\n\t\t\tif ( elem ) {\n\t\t\t\thooks = jQuery.valHooks[ elem.type ] ||\n\t\t\t\t\tjQuery.valHooks[ elem.nodeName.toLowerCase() ];\n\n\t\t\t\tif ( hooks &&\n\t\t\t\t\t\"get\" in hooks &&\n\t\t\t\t\t( ret = hooks.get( elem, \"value\" ) ) !== undefined\n\t\t\t\t) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\tret = elem.value;\n\n\t\t\t\t// Handle most common string cases\n\t\t\t\tif ( typeof ret === \"string\" ) {\n\t\t\t\t\treturn ret.replace( rreturn, \"\" );\n\t\t\t\t}\n\n\t\t\t\t// Handle cases where value is null/undef or number\n\t\t\t\treturn ret == null ? \"\" : ret;\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tvalueIsFunction = isFunction( value );\n\n\t\treturn this.each( function( i ) {\n\t\t\tvar val;\n\n\t\t\tif ( this.nodeType !== 1 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( valueIsFunction ) {\n\t\t\t\tval = value.call( this, i, jQuery( this ).val() );\n\t\t\t} else {\n\t\t\t\tval = value;\n\t\t\t}\n\n\t\t\t// Treat null/undefined as \"\"; convert numbers to string\n\t\t\tif ( val == null ) {\n\t\t\t\tval = \"\";\n\n\t\t\t} else if ( typeof val === \"number\" ) {\n\t\t\t\tval += \"\";\n\n\t\t\t} else if ( Array.isArray( val ) ) {\n\t\t\t\tval = jQuery.map( val, function( value ) {\n\t\t\t\t\treturn value == null ? \"\" : value + \"\";\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\thooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];\n\n\t\t\t// If set returns undefined, fall back to normal setting\n\t\t\tif ( !hooks || !( \"set\" in hooks ) || hooks.set( this, val, \"value\" ) === undefined ) {\n\t\t\t\tthis.value = val;\n\t\t\t}\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tvalHooks: {\n\t\toption: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\tvar val = jQuery.find.attr( elem, \"value\" );\n\t\t\t\treturn val != null ?\n\t\t\t\t\tval :\n\n\t\t\t\t\t// Support: IE <=10 - 11 only\n\t\t\t\t\t// option.text throws exceptions (#14686, #14858)\n\t\t\t\t\t// Strip and collapse whitespace\n\t\t\t\t\t// https://html.spec.whatwg.org/#strip-and-collapse-whitespace\n\t\t\t\t\tstripAndCollapse( jQuery.text( elem ) );\n\t\t\t}\n\t\t},\n\t\tselect: {\n\t\t\tget: function( elem ) {\n\t\t\t\tvar value, option, i,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tindex = elem.selectedIndex,\n\t\t\t\t\tone = elem.type === \"select-one\",\n\t\t\t\t\tvalues = one ? null : [],\n\t\t\t\t\tmax = one ? index + 1 : options.length;\n\n\t\t\t\tif ( index < 0 ) {\n\t\t\t\t\ti = max;\n\n\t\t\t\t} else {\n\t\t\t\t\ti = one ? index : 0;\n\t\t\t\t}\n\n\t\t\t\t// Loop through all the selected options\n\t\t\t\tfor ( ; i < max; i++ ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t// IE8-9 doesn't update selected after form reset (#2551)\n\t\t\t\t\tif ( ( option.selected || i === index ) &&\n\n\t\t\t\t\t\t\t// Don't return options that are disabled or in a disabled optgroup\n\t\t\t\t\t\t\t!option.disabled &&\n\t\t\t\t\t\t\t( !option.parentNode.disabled ||\n\t\t\t\t\t\t\t\t!nodeName( option.parentNode, \"optgroup\" ) ) ) {\n\n\t\t\t\t\t\t// Get the specific value for the option\n\t\t\t\t\t\tvalue = jQuery( option ).val();\n\n\t\t\t\t\t\t// We don't need an array for one selects\n\t\t\t\t\t\tif ( one ) {\n\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Multi-Selects return an array\n\t\t\t\t\t\tvalues.push( value );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn values;\n\t\t\t},\n\n\t\t\tset: function( elem, value ) {\n\t\t\t\tvar optionSet, option,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tvalues = jQuery.makeArray( value ),\n\t\t\t\t\ti = options.length;\n\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t/* eslint-disable no-cond-assign */\n\n\t\t\t\t\tif ( option.selected =\n\t\t\t\t\t\tjQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1\n\t\t\t\t\t) {\n\t\t\t\t\t\toptionSet = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t/* eslint-enable no-cond-assign */\n\t\t\t\t}\n\n\t\t\t\t// Force browsers to behave consistently when non-matching value is set\n\t\t\t\tif ( !optionSet ) {\n\t\t\t\t\telem.selectedIndex = -1;\n\t\t\t\t}\n\t\t\t\treturn values;\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Radios and checkboxes getter/setter\njQuery.each( [ \"radio\", \"checkbox\" ], function() {\n\tjQuery.valHooks[ this ] = {\n\t\tset: function( elem, value ) {\n\t\t\tif ( Array.isArray( value ) ) {\n\t\t\t\treturn ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );\n\t\t\t}\n\t\t}\n\t};\n\tif ( !support.checkOn ) {\n\t\tjQuery.valHooks[ this ].get = function( elem ) {\n\t\t\treturn elem.getAttribute( \"value\" ) === null ? \"on\" : elem.value;\n\t\t};\n\t}\n} );\n\n\n\n\n// Return jQuery for attributes-only inclusion\n\n\nsupport.focusin = \"onfocusin\" in window;\n\n\nvar rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,\n\tstopPropagationCallback = function( e ) {\n\t\te.stopPropagation();\n\t};\n\njQuery.extend( jQuery.event, {\n\n\ttrigger: function( event, data, elem, onlyHandlers ) {\n\n\t\tvar i, cur, tmp, bubbleType, ontype, handle, special, lastElement,\n\t\t\teventPath = [ elem || document ],\n\t\t\ttype = hasOwn.call( event, \"type\" ) ? event.type : event,\n\t\t\tnamespaces = hasOwn.call( event, \"namespace\" ) ? event.namespace.split( \".\" ) : [];\n\n\t\tcur = lastElement = tmp = elem = elem || document;\n\n\t\t// Don't do events on text and comment nodes\n\t\tif ( elem.nodeType === 3 || elem.nodeType === 8 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// focus/blur morphs to focusin/out; ensure we're not firing them right now\n\t\tif ( rfocusMorph.test( type + jQuery.event.triggered ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( type.indexOf( \".\" ) > -1 ) {\n\n\t\t\t// Namespaced trigger; create a regexp to match event type in handle()\n\t\t\tnamespaces = type.split( \".\" );\n\t\t\ttype = namespaces.shift();\n\t\t\tnamespaces.sort();\n\t\t}\n\t\tontype = type.indexOf( \":\" ) < 0 && \"on\" + type;\n\n\t\t// Caller can pass in a jQuery.Event object, Object, or just an event type string\n\t\tevent = event[ jQuery.expando ] ?\n\t\t\tevent :\n\t\t\tnew jQuery.Event( type, typeof event === \"object\" && event );\n\n\t\t// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)\n\t\tevent.isTrigger = onlyHandlers ? 2 : 3;\n\t\tevent.namespace = namespaces.join( \".\" );\n\t\tevent.rnamespace = event.namespace ?\n\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" ) :\n\t\t\tnull;\n\n\t\t// Clean up the event in case it is being reused\n\t\tevent.result = undefined;\n\t\tif ( !event.target ) {\n\t\t\tevent.target = elem;\n\t\t}\n\n\t\t// Clone any incoming data and prepend the event, creating the handler arg list\n\t\tdata = data == null ?\n\t\t\t[ event ] :\n\t\t\tjQuery.makeArray( data, [ event ] );\n\n\t\t// Allow special events to draw outside the lines\n\t\tspecial = jQuery.event.special[ type ] || {};\n\t\tif ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine event propagation path in advance, per W3C events spec (#9951)\n\t\t// Bubble up to document, then to window; watch for a global ownerDocument var (#9724)\n\t\tif ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) {\n\n\t\t\tbubbleType = special.delegateType || type;\n\t\t\tif ( !rfocusMorph.test( bubbleType + type ) ) {\n\t\t\t\tcur = cur.parentNode;\n\t\t\t}\n\t\t\tfor ( ; cur; cur = cur.parentNode ) {\n\t\t\t\teventPath.push( cur );\n\t\t\t\ttmp = cur;\n\t\t\t}\n\n\t\t\t// Only add window if we got to document (e.g., not plain obj or detached DOM)\n\t\t\tif ( tmp === ( elem.ownerDocument || document ) ) {\n\t\t\t\teventPath.push( tmp.defaultView || tmp.parentWindow || window );\n\t\t\t}\n\t\t}\n\n\t\t// Fire handlers on the event path\n\t\ti = 0;\n\t\twhile ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tlastElement = cur;\n\t\t\tevent.type = i > 1 ?\n\t\t\t\tbubbleType :\n\t\t\t\tspecial.bindType || type;\n\n\t\t\t// jQuery handler\n\t\t\thandle = ( dataPriv.get( cur, \"events\" ) || Object.create( null ) )[ event.type ] &&\n\t\t\t\tdataPriv.get( cur, \"handle\" );\n\t\t\tif ( handle ) {\n\t\t\t\thandle.apply( cur, data );\n\t\t\t}\n\n\t\t\t// Native handler\n\t\t\thandle = ontype && cur[ ontype ];\n\t\t\tif ( handle && handle.apply && acceptData( cur ) ) {\n\t\t\t\tevent.result = handle.apply( cur, data );\n\t\t\t\tif ( event.result === false ) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tevent.type = type;\n\n\t\t// If nobody prevented the default action, do it now\n\t\tif ( !onlyHandlers && !event.isDefaultPrevented() ) {\n\n\t\t\tif ( ( !special._default ||\n\t\t\t\tspecial._default.apply( eventPath.pop(), data ) === false ) &&\n\t\t\t\tacceptData( elem ) ) {\n\n\t\t\t\t// Call a native DOM method on the target with the same name as the event.\n\t\t\t\t// Don't do default actions on window, that's where global variables be (#6170)\n\t\t\t\tif ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) {\n\n\t\t\t\t\t// Don't re-trigger an onFOO event when we call its FOO() method\n\t\t\t\t\ttmp = elem[ ontype ];\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = null;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prevent re-triggering of the same event, since we already bubbled it above\n\t\t\t\t\tjQuery.event.triggered = type;\n\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.addEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\n\t\t\t\t\telem[ type ]();\n\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.removeEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\n\t\t\t\t\tjQuery.event.triggered = undefined;\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = tmp;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\t// Piggyback on a donor event to simulate a different one\n\t// Used only for `focus(in | out)` events\n\tsimulate: function( type, elem, event ) {\n\t\tvar e = jQuery.extend(\n\t\t\tnew jQuery.Event(),\n\t\t\tevent,\n\t\t\t{\n\t\t\t\ttype: type,\n\t\t\t\tisSimulated: true\n\t\t\t}\n\t\t);\n\n\t\tjQuery.event.trigger( e, null, elem );\n\t}\n\n} );\n\njQuery.fn.extend( {\n\n\ttrigger: function( type, data ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.trigger( type, data, this );\n\t\t} );\n\t},\n\ttriggerHandler: function( type, data ) {\n\t\tvar elem = this[ 0 ];\n\t\tif ( elem ) {\n\t\t\treturn jQuery.event.trigger( type, data, elem, true );\n\t\t}\n\t}\n} );\n\n\n// Support: Firefox <=44\n// Firefox doesn't have focus(in | out) events\n// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787\n//\n// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1\n// focus(in | out) events fire after focus & blur events,\n// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order\n// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857\nif ( !support.focusin ) {\n\tjQuery.each( { focus: \"focusin\", blur: \"focusout\" }, function( orig, fix ) {\n\n\t\t// Attach a single capturing handler on the document while someone wants focusin/focusout\n\t\tvar handler = function( event ) {\n\t\t\tjQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) );\n\t\t};\n\n\t\tjQuery.event.special[ fix ] = {\n\t\t\tsetup: function() {\n\n\t\t\t\t// Handle: regular nodes (via `this.ownerDocument`), window\n\t\t\t\t// (via `this.document`) & document (via `this`).\n\t\t\t\tvar doc = this.ownerDocument || this.document || this,\n\t\t\t\t\tattaches = dataPriv.access( doc, fix );\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.addEventListener( orig, handler, true );\n\t\t\t\t}\n\t\t\t\tdataPriv.access( doc, fix, ( attaches || 0 ) + 1 );\n\t\t\t},\n\t\t\tteardown: function() {\n\t\t\t\tvar doc = this.ownerDocument || this.document || this,\n\t\t\t\t\tattaches = dataPriv.access( doc, fix ) - 1;\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.removeEventListener( orig, handler, true );\n\t\t\t\t\tdataPriv.remove( doc, fix );\n\n\t\t\t\t} else {\n\t\t\t\t\tdataPriv.access( doc, fix, attaches );\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t} );\n}\nvar location = window.location;\n\nvar nonce = { guid: Date.now() };\n\nvar rquery = ( /\\?/ );\n\n\n\n// Cross-browser xml parsing\njQuery.parseXML = function( data ) {\n\tvar xml, parserErrorElem;\n\tif ( !data || typeof data !== \"string\" ) {\n\t\treturn null;\n\t}\n\n\t// Support: IE 9 - 11 only\n\t// IE throws on parseFromString with invalid input.\n\ttry {\n\t\txml = ( new window.DOMParser() ).parseFromString( data, \"text/xml\" );\n\t} catch ( e ) {}\n\n\tparserErrorElem = xml && xml.getElementsByTagName( \"parsererror\" )[ 0 ];\n\tif ( !xml || parserErrorElem ) {\n\t\tjQuery.error( \"Invalid XML: \" + (\n\t\t\tparserErrorElem ?\n\t\t\t\tjQuery.map( parserErrorElem.childNodes, function( el ) {\n\t\t\t\t\treturn el.textContent;\n\t\t\t\t} ).join( \"\\n\" ) :\n\t\t\t\tdata\n\t\t) );\n\t}\n\treturn xml;\n};\n\n\nvar\n\trbracket = /\\[\\]$/,\n\trCRLF = /\\r?\\n/g,\n\trsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,\n\trsubmittable = /^(?:input|select|textarea|keygen)/i;\n\nfunction buildParams( prefix, obj, traditional, add ) {\n\tvar name;\n\n\tif ( Array.isArray( obj ) ) {\n\n\t\t// Serialize array item.\n\t\tjQuery.each( obj, function( i, v ) {\n\t\t\tif ( traditional || rbracket.test( prefix ) ) {\n\n\t\t\t\t// Treat each array item as a scalar.\n\t\t\t\tadd( prefix, v );\n\n\t\t\t} else {\n\n\t\t\t\t// Item is non-scalar (array or object), encode its numeric index.\n\t\t\t\tbuildParams(\n\t\t\t\t\tprefix + \"[\" + ( typeof v === \"object\" && v != null ? i : \"\" ) + \"]\",\n\t\t\t\t\tv,\n\t\t\t\t\ttraditional,\n\t\t\t\t\tadd\n\t\t\t\t);\n\t\t\t}\n\t\t} );\n\n\t} else if ( !traditional && toType( obj ) === \"object\" ) {\n\n\t\t// Serialize object item.\n\t\tfor ( name in obj ) {\n\t\t\tbuildParams( prefix + \"[\" + name + \"]\", obj[ name ], traditional, add );\n\t\t}\n\n\t} else {\n\n\t\t// Serialize scalar item.\n\t\tadd( prefix, obj );\n\t}\n}\n\n// Serialize an array of form elements or a set of\n// key/values into a query string\njQuery.param = function( a, traditional ) {\n\tvar prefix,\n\t\ts = [],\n\t\tadd = function( key, valueOrFunction ) {\n\n\t\t\t// If value is a function, invoke it and use its return value\n\t\t\tvar value = isFunction( valueOrFunction ) ?\n\t\t\t\tvalueOrFunction() :\n\t\t\t\tvalueOrFunction;\n\n\t\t\ts[ s.length ] = encodeURIComponent( key ) + \"=\" +\n\t\t\t\tencodeURIComponent( value == null ? \"\" : value );\n\t\t};\n\n\tif ( a == null ) {\n\t\treturn \"\";\n\t}\n\n\t// If an array was passed in, assume that it is an array of form elements.\n\tif ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {\n\n\t\t// Serialize the form elements\n\t\tjQuery.each( a, function() {\n\t\t\tadd( this.name, this.value );\n\t\t} );\n\n\t} else {\n\n\t\t// If traditional, encode the \"old\" way (the way 1.3.2 or older\n\t\t// did it), otherwise encode params recursively.\n\t\tfor ( prefix in a ) {\n\t\t\tbuildParams( prefix, a[ prefix ], traditional, add );\n\t\t}\n\t}\n\n\t// Return the resulting serialization\n\treturn s.join( \"&\" );\n};\n\njQuery.fn.extend( {\n\tserialize: function() {\n\t\treturn jQuery.param( this.serializeArray() );\n\t},\n\tserializeArray: function() {\n\t\treturn this.map( function() {\n\n\t\t\t// Can add propHook for \"elements\" to filter or add form elements\n\t\t\tvar elements = jQuery.prop( this, \"elements\" );\n\t\t\treturn elements ? jQuery.makeArray( elements ) : this;\n\t\t} ).filter( function() {\n\t\t\tvar type = this.type;\n\n\t\t\t// Use .is( \":disabled\" ) so that fieldset[disabled] works\n\t\t\treturn this.name && !jQuery( this ).is( \":disabled\" ) &&\n\t\t\t\trsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&\n\t\t\t\t( this.checked || !rcheckableType.test( type ) );\n\t\t} ).map( function( _i, elem ) {\n\t\t\tvar val = jQuery( this ).val();\n\n\t\t\tif ( val == null ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tif ( Array.isArray( val ) ) {\n\t\t\t\treturn jQuery.map( val, function( val ) {\n\t\t\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t} ).get();\n\t}\n} );\n\n\nvar\n\tr20 = /%20/g,\n\trhash = /#.*$/,\n\trantiCache = /([?&])_=[^&]*/,\n\trheaders = /^(.*?):[ \\t]*([^\\r\\n]*)$/mg,\n\n\t// #7653, #8125, #8152: local protocol detection\n\trlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,\n\trnoContent = /^(?:GET|HEAD)$/,\n\trprotocol = /^\\/\\//,\n\n\t/* Prefilters\n\t * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)\n\t * 2) These are called:\n\t * - BEFORE asking for a transport\n\t * - AFTER param serialization (s.data is a string if s.processData is true)\n\t * 3) key is the dataType\n\t * 4) the catchall symbol \"*\" can be used\n\t * 5) execution will start with transport dataType and THEN continue down to \"*\" if needed\n\t */\n\tprefilters = {},\n\n\t/* Transports bindings\n\t * 1) key is the dataType\n\t * 2) the catchall symbol \"*\" can be used\n\t * 3) selection will start with transport dataType and THEN go to \"*\" if needed\n\t */\n\ttransports = {},\n\n\t// Avoid comment-prolog char sequence (#10098); must appease lint and evade compression\n\tallTypes = \"*/\".concat( \"*\" ),\n\n\t// Anchor tag for parsing the document origin\n\toriginAnchor = document.createElement( \"a\" );\n\noriginAnchor.href = location.href;\n\n// Base \"constructor\" for jQuery.ajaxPrefilter and jQuery.ajaxTransport\nfunction addToPrefiltersOrTransports( structure ) {\n\n\t// dataTypeExpression is optional and defaults to \"*\"\n\treturn function( dataTypeExpression, func ) {\n\n\t\tif ( typeof dataTypeExpression !== \"string\" ) {\n\t\t\tfunc = dataTypeExpression;\n\t\t\tdataTypeExpression = \"*\";\n\t\t}\n\n\t\tvar dataType,\n\t\t\ti = 0,\n\t\t\tdataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || [];\n\n\t\tif ( isFunction( func ) ) {\n\n\t\t\t// For each dataType in the dataTypeExpression\n\t\t\twhile ( ( dataType = dataTypes[ i++ ] ) ) {\n\n\t\t\t\t// Prepend if requested\n\t\t\t\tif ( dataType[ 0 ] === \"+\" ) {\n\t\t\t\t\tdataType = dataType.slice( 1 ) || \"*\";\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func );\n\n\t\t\t\t// Otherwise append\n\t\t\t\t} else {\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).push( func );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\n// Base inspection function for prefilters and transports\nfunction inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {\n\n\tvar inspected = {},\n\t\tseekingTransport = ( structure === transports );\n\n\tfunction inspect( dataType ) {\n\t\tvar selected;\n\t\tinspected[ dataType ] = true;\n\t\tjQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {\n\t\t\tvar dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );\n\t\t\tif ( typeof dataTypeOrTransport === \"string\" &&\n\t\t\t\t!seekingTransport && !inspected[ dataTypeOrTransport ] ) {\n\n\t\t\t\toptions.dataTypes.unshift( dataTypeOrTransport );\n\t\t\t\tinspect( dataTypeOrTransport );\n\t\t\t\treturn false;\n\t\t\t} else if ( seekingTransport ) {\n\t\t\t\treturn !( selected = dataTypeOrTransport );\n\t\t\t}\n\t\t} );\n\t\treturn selected;\n\t}\n\n\treturn inspect( options.dataTypes[ 0 ] ) || !inspected[ \"*\" ] && inspect( \"*\" );\n}\n\n// A special extend for ajax options\n// that takes \"flat\" options (not to be deep extended)\n// Fixes #9887\nfunction ajaxExtend( target, src ) {\n\tvar key, deep,\n\t\tflatOptions = jQuery.ajaxSettings.flatOptions || {};\n\n\tfor ( key in src ) {\n\t\tif ( src[ key ] !== undefined ) {\n\t\t\t( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];\n\t\t}\n\t}\n\tif ( deep ) {\n\t\tjQuery.extend( true, target, deep );\n\t}\n\n\treturn target;\n}\n\n/* Handles responses to an ajax request:\n * - finds the right dataType (mediates between content-type and expected dataType)\n * - returns the corresponding response\n */\nfunction ajaxHandleResponses( s, jqXHR, responses ) {\n\n\tvar ct, type, finalDataType, firstDataType,\n\t\tcontents = s.contents,\n\t\tdataTypes = s.dataTypes;\n\n\t// Remove auto dataType and get content-type in the process\n\twhile ( dataTypes[ 0 ] === \"*\" ) {\n\t\tdataTypes.shift();\n\t\tif ( ct === undefined ) {\n\t\t\tct = s.mimeType || jqXHR.getResponseHeader( \"Content-Type\" );\n\t\t}\n\t}\n\n\t// Check if we're dealing with a known content-type\n\tif ( ct ) {\n\t\tfor ( type in contents ) {\n\t\t\tif ( contents[ type ] && contents[ type ].test( ct ) ) {\n\t\t\t\tdataTypes.unshift( type );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Check to see if we have a response for the expected dataType\n\tif ( dataTypes[ 0 ] in responses ) {\n\t\tfinalDataType = dataTypes[ 0 ];\n\t} else {\n\n\t\t// Try convertible dataTypes\n\t\tfor ( type in responses ) {\n\t\t\tif ( !dataTypes[ 0 ] || s.converters[ type + \" \" + dataTypes[ 0 ] ] ) {\n\t\t\t\tfinalDataType = type;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( !firstDataType ) {\n\t\t\t\tfirstDataType = type;\n\t\t\t}\n\t\t}\n\n\t\t// Or just use first one\n\t\tfinalDataType = finalDataType || firstDataType;\n\t}\n\n\t// If we found a dataType\n\t// We add the dataType to the list if needed\n\t// and return the corresponding response\n\tif ( finalDataType ) {\n\t\tif ( finalDataType !== dataTypes[ 0 ] ) {\n\t\t\tdataTypes.unshift( finalDataType );\n\t\t}\n\t\treturn responses[ finalDataType ];\n\t}\n}\n\n/* Chain conversions given the request and the original response\n * Also sets the responseXXX fields on the jqXHR instance\n */\nfunction ajaxConvert( s, response, jqXHR, isSuccess ) {\n\tvar conv2, current, conv, tmp, prev,\n\t\tconverters = {},\n\n\t\t// Work with a copy of dataTypes in case we need to modify it for conversion\n\t\tdataTypes = s.dataTypes.slice();\n\n\t// Create converters map with lowercased keys\n\tif ( dataTypes[ 1 ] ) {\n\t\tfor ( conv in s.converters ) {\n\t\t\tconverters[ conv.toLowerCase() ] = s.converters[ conv ];\n\t\t}\n\t}\n\n\tcurrent = dataTypes.shift();\n\n\t// Convert to each sequential dataType\n\twhile ( current ) {\n\n\t\tif ( s.responseFields[ current ] ) {\n\t\t\tjqXHR[ s.responseFields[ current ] ] = response;\n\t\t}\n\n\t\t// Apply the dataFilter if provided\n\t\tif ( !prev && isSuccess && s.dataFilter ) {\n\t\t\tresponse = s.dataFilter( response, s.dataType );\n\t\t}\n\n\t\tprev = current;\n\t\tcurrent = dataTypes.shift();\n\n\t\tif ( current ) {\n\n\t\t\t// There's only work to do if current dataType is non-auto\n\t\t\tif ( current === \"*\" ) {\n\n\t\t\t\tcurrent = prev;\n\n\t\t\t// Convert response if prev dataType is non-auto and differs from current\n\t\t\t} else if ( prev !== \"*\" && prev !== current ) {\n\n\t\t\t\t// Seek a direct converter\n\t\t\t\tconv = converters[ prev + \" \" + current ] || converters[ \"* \" + current ];\n\n\t\t\t\t// If none found, seek a pair\n\t\t\t\tif ( !conv ) {\n\t\t\t\t\tfor ( conv2 in converters ) {\n\n\t\t\t\t\t\t// If conv2 outputs current\n\t\t\t\t\t\ttmp = conv2.split( \" \" );\n\t\t\t\t\t\tif ( tmp[ 1 ] === current ) {\n\n\t\t\t\t\t\t\t// If prev can be converted to accepted input\n\t\t\t\t\t\t\tconv = converters[ prev + \" \" + tmp[ 0 ] ] ||\n\t\t\t\t\t\t\t\tconverters[ \"* \" + tmp[ 0 ] ];\n\t\t\t\t\t\t\tif ( conv ) {\n\n\t\t\t\t\t\t\t\t// Condense equivalence converters\n\t\t\t\t\t\t\t\tif ( conv === true ) {\n\t\t\t\t\t\t\t\t\tconv = converters[ conv2 ];\n\n\t\t\t\t\t\t\t\t// Otherwise, insert the intermediate dataType\n\t\t\t\t\t\t\t\t} else if ( converters[ conv2 ] !== true ) {\n\t\t\t\t\t\t\t\t\tcurrent = tmp[ 0 ];\n\t\t\t\t\t\t\t\t\tdataTypes.unshift( tmp[ 1 ] );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Apply converter (if not an equivalence)\n\t\t\t\tif ( conv !== true ) {\n\n\t\t\t\t\t// Unless errors are allowed to bubble, catch and return them\n\t\t\t\t\tif ( conv && s.throws ) {\n\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tstate: \"parsererror\",\n\t\t\t\t\t\t\t\terror: conv ? e : \"No conversion from \" + prev + \" to \" + current\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn { state: \"success\", data: response };\n}\n\njQuery.extend( {\n\n\t// Counter for holding the number of active queries\n\tactive: 0,\n\n\t// Last-Modified header cache for next request\n\tlastModified: {},\n\tetag: {},\n\n\tajaxSettings: {\n\t\turl: location.href,\n\t\ttype: \"GET\",\n\t\tisLocal: rlocalProtocol.test( location.protocol ),\n\t\tglobal: true,\n\t\tprocessData: true,\n\t\tasync: true,\n\t\tcontentType: \"application/x-www-form-urlencoded; charset=UTF-8\",\n\n\t\t/*\n\t\ttimeout: 0,\n\t\tdata: null,\n\t\tdataType: null,\n\t\tusername: null,\n\t\tpassword: null,\n\t\tcache: null,\n\t\tthrows: false,\n\t\ttraditional: false,\n\t\theaders: {},\n\t\t*/\n\n\t\taccepts: {\n\t\t\t\"*\": allTypes,\n\t\t\ttext: \"text/plain\",\n\t\t\thtml: \"text/html\",\n\t\t\txml: \"application/xml, text/xml\",\n\t\t\tjson: \"application/json, text/javascript\"\n\t\t},\n\n\t\tcontents: {\n\t\t\txml: /\\bxml\\b/,\n\t\t\thtml: /\\bhtml/,\n\t\t\tjson: /\\bjson\\b/\n\t\t},\n\n\t\tresponseFields: {\n\t\t\txml: \"responseXML\",\n\t\t\ttext: \"responseText\",\n\t\t\tjson: \"responseJSON\"\n\t\t},\n\n\t\t// Data converters\n\t\t// Keys separate source (or catchall \"*\") and destination types with a single space\n\t\tconverters: {\n\n\t\t\t// Convert anything to text\n\t\t\t\"* text\": String,\n\n\t\t\t// Text to html (true = no transformation)\n\t\t\t\"text html\": true,\n\n\t\t\t// Evaluate text as a json expression\n\t\t\t\"text json\": JSON.parse,\n\n\t\t\t// Parse text as xml\n\t\t\t\"text xml\": jQuery.parseXML\n\t\t},\n\n\t\t// For options that shouldn't be deep extended:\n\t\t// you can add your own custom options here if\n\t\t// and when you create one that shouldn't be\n\t\t// deep extended (see ajaxExtend)\n\t\tflatOptions: {\n\t\t\turl: true,\n\t\t\tcontext: true\n\t\t}\n\t},\n\n\t// Creates a full fledged settings object into target\n\t// with both ajaxSettings and settings fields.\n\t// If target is omitted, writes into ajaxSettings.\n\tajaxSetup: function( target, settings ) {\n\t\treturn settings ?\n\n\t\t\t// Building a settings object\n\t\t\tajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :\n\n\t\t\t// Extending ajaxSettings\n\t\t\tajaxExtend( jQuery.ajaxSettings, target );\n\t},\n\n\tajaxPrefilter: addToPrefiltersOrTransports( prefilters ),\n\tajaxTransport: addToPrefiltersOrTransports( transports ),\n\n\t// Main method\n\tajax: function( url, options ) {\n\n\t\t// If url is an object, simulate pre-1.5 signature\n\t\tif ( typeof url === \"object\" ) {\n\t\t\toptions = url;\n\t\t\turl = undefined;\n\t\t}\n\n\t\t// Force options to be an object\n\t\toptions = options || {};\n\n\t\tvar transport,\n\n\t\t\t// URL without anti-cache param\n\t\t\tcacheURL,\n\n\t\t\t// Response headers\n\t\t\tresponseHeadersString,\n\t\t\tresponseHeaders,\n\n\t\t\t// timeout handle\n\t\t\ttimeoutTimer,\n\n\t\t\t// Url cleanup var\n\t\t\turlAnchor,\n\n\t\t\t// Request state (becomes false upon send and true upon completion)\n\t\t\tcompleted,\n\n\t\t\t// To know if global events are to be dispatched\n\t\t\tfireGlobals,\n\n\t\t\t// Loop variable\n\t\t\ti,\n\n\t\t\t// uncached part of the url\n\t\t\tuncached,\n\n\t\t\t// Create the final options object\n\t\t\ts = jQuery.ajaxSetup( {}, options ),\n\n\t\t\t// Callbacks context\n\t\t\tcallbackContext = s.context || s,\n\n\t\t\t// Context for global events is callbackContext if it is a DOM node or jQuery collection\n\t\t\tglobalEventContext = s.context &&\n\t\t\t\t( callbackContext.nodeType || callbackContext.jquery ) ?\n\t\t\t\tjQuery( callbackContext ) :\n\t\t\t\tjQuery.event,\n\n\t\t\t// Deferreds\n\t\t\tdeferred = jQuery.Deferred(),\n\t\t\tcompleteDeferred = jQuery.Callbacks( \"once memory\" ),\n\n\t\t\t// Status-dependent callbacks\n\t\t\tstatusCode = s.statusCode || {},\n\n\t\t\t// Headers (they are sent all at once)\n\t\t\trequestHeaders = {},\n\t\t\trequestHeadersNames = {},\n\n\t\t\t// Default abort message\n\t\t\tstrAbort = \"canceled\",\n\n\t\t\t// Fake xhr\n\t\t\tjqXHR = {\n\t\t\t\treadyState: 0,\n\n\t\t\t\t// Builds headers hashtable if needed\n\t\t\t\tgetResponseHeader: function( key ) {\n\t\t\t\t\tvar match;\n\t\t\t\t\tif ( completed ) {\n\t\t\t\t\t\tif ( !responseHeaders ) {\n\t\t\t\t\t\t\tresponseHeaders = {};\n\t\t\t\t\t\t\twhile ( ( match = rheaders.exec( responseHeadersString ) ) ) {\n\t\t\t\t\t\t\t\tresponseHeaders[ match[ 1 ].toLowerCase() + \" \" ] =\n\t\t\t\t\t\t\t\t\t( responseHeaders[ match[ 1 ].toLowerCase() + \" \" ] || [] )\n\t\t\t\t\t\t\t\t\t\t.concat( match[ 2 ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmatch = responseHeaders[ key.toLowerCase() + \" \" ];\n\t\t\t\t\t}\n\t\t\t\t\treturn match == null ? null : match.join( \", \" );\n\t\t\t\t},\n\n\t\t\t\t// Raw string\n\t\t\t\tgetAllResponseHeaders: function() {\n\t\t\t\t\treturn completed ? responseHeadersString : null;\n\t\t\t\t},\n\n\t\t\t\t// Caches the header\n\t\t\t\tsetRequestHeader: function( name, value ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\tname = requestHeadersNames[ name.toLowerCase() ] =\n\t\t\t\t\t\t\trequestHeadersNames[ name.toLowerCase() ] || name;\n\t\t\t\t\t\trequestHeaders[ name ] = value;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Overrides response content-type header\n\t\t\t\toverrideMimeType: function( type ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\ts.mimeType = type;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Status-dependent callbacks\n\t\t\t\tstatusCode: function( map ) {\n\t\t\t\t\tvar code;\n\t\t\t\t\tif ( map ) {\n\t\t\t\t\t\tif ( completed ) {\n\n\t\t\t\t\t\t\t// Execute the appropriate callbacks\n\t\t\t\t\t\t\tjqXHR.always( map[ jqXHR.status ] );\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Lazy-add the new callbacks in a way that preserves old ones\n\t\t\t\t\t\t\tfor ( code in map ) {\n\t\t\t\t\t\t\t\tstatusCode[ code ] = [ statusCode[ code ], map[ code ] ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Cancel the request\n\t\t\t\tabort: function( statusText ) {\n\t\t\t\t\tvar finalText = statusText || strAbort;\n\t\t\t\t\tif ( transport ) {\n\t\t\t\t\t\ttransport.abort( finalText );\n\t\t\t\t\t}\n\t\t\t\t\tdone( 0, finalText );\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t};\n\n\t\t// Attach deferreds\n\t\tdeferred.promise( jqXHR );\n\n\t\t// Add protocol if not provided (prefilters might expect it)\n\t\t// Handle falsy url in the settings object (#10093: consistency with old signature)\n\t\t// We also use the url parameter if available\n\t\ts.url = ( ( url || s.url || location.href ) + \"\" )\n\t\t\t.replace( rprotocol, location.protocol + \"//\" );\n\n\t\t// Alias method option to type as per ticket #12004\n\t\ts.type = options.method || options.type || s.method || s.type;\n\n\t\t// Extract dataTypes list\n\t\ts.dataTypes = ( s.dataType || \"*\" ).toLowerCase().match( rnothtmlwhite ) || [ \"\" ];\n\n\t\t// A cross-domain request is in order when the origin doesn't match the current origin.\n\t\tif ( s.crossDomain == null ) {\n\t\t\turlAnchor = document.createElement( \"a\" );\n\n\t\t\t// Support: IE <=8 - 11, Edge 12 - 15\n\t\t\t// IE throws exception on accessing the href property if url is malformed,\n\t\t\t// e.g. http://example.com:80x/\n\t\t\ttry {\n\t\t\t\turlAnchor.href = s.url;\n\n\t\t\t\t// Support: IE <=8 - 11 only\n\t\t\t\t// Anchor's host property isn't correctly set when s.url is relative\n\t\t\t\turlAnchor.href = urlAnchor.href;\n\t\t\t\ts.crossDomain = originAnchor.protocol + \"//\" + originAnchor.host !==\n\t\t\t\t\turlAnchor.protocol + \"//\" + urlAnchor.host;\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// If there is an error parsing the URL, assume it is crossDomain,\n\t\t\t\t// it can be rejected by the transport if it is invalid\n\t\t\t\ts.crossDomain = true;\n\t\t\t}\n\t\t}\n\n\t\t// Convert data if not already a string\n\t\tif ( s.data && s.processData && typeof s.data !== \"string\" ) {\n\t\t\ts.data = jQuery.param( s.data, s.traditional );\n\t\t}\n\n\t\t// Apply prefilters\n\t\tinspectPrefiltersOrTransports( prefilters, s, options, jqXHR );\n\n\t\t// If request was aborted inside a prefilter, stop there\n\t\tif ( completed ) {\n\t\t\treturn jqXHR;\n\t\t}\n\n\t\t// We can fire global events as of now if asked to\n\t\t// Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118)\n\t\tfireGlobals = jQuery.event && s.global;\n\n\t\t// Watch for a new set of requests\n\t\tif ( fireGlobals && jQuery.active++ === 0 ) {\n\t\t\tjQuery.event.trigger( \"ajaxStart\" );\n\t\t}\n\n\t\t// Uppercase the type\n\t\ts.type = s.type.toUpperCase();\n\n\t\t// Determine if request has content\n\t\ts.hasContent = !rnoContent.test( s.type );\n\n\t\t// Save the URL in case we're toying with the If-Modified-Since\n\t\t// and/or If-None-Match header later on\n\t\t// Remove hash to simplify url manipulation\n\t\tcacheURL = s.url.replace( rhash, \"\" );\n\n\t\t// More options handling for requests with no content\n\t\tif ( !s.hasContent ) {\n\n\t\t\t// Remember the hash so we can put it back\n\t\t\tuncached = s.url.slice( cacheURL.length );\n\n\t\t\t// If data is available and should be processed, append data to url\n\t\t\tif ( s.data && ( s.processData || typeof s.data === \"string\" ) ) {\n\t\t\t\tcacheURL += ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + s.data;\n\n\t\t\t\t// #9682: remove data so that it's not used in an eventual retry\n\t\t\t\tdelete s.data;\n\t\t\t}\n\n\t\t\t// Add or update anti-cache param if needed\n\t\t\tif ( s.cache === false ) {\n\t\t\t\tcacheURL = cacheURL.replace( rantiCache, \"$1\" );\n\t\t\t\tuncached = ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + \"_=\" + ( nonce.guid++ ) +\n\t\t\t\t\tuncached;\n\t\t\t}\n\n\t\t\t// Put hash and anti-cache on the URL that will be requested (gh-1732)\n\t\t\ts.url = cacheURL + uncached;\n\n\t\t// Change '%20' to '+' if this is encoded form body content (gh-2658)\n\t\t} else if ( s.data && s.processData &&\n\t\t\t( s.contentType || \"\" ).indexOf( \"application/x-www-form-urlencoded\" ) === 0 ) {\n\t\t\ts.data = s.data.replace( r20, \"+\" );\n\t\t}\n\n\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\tif ( s.ifModified ) {\n\t\t\tif ( jQuery.lastModified[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-Modified-Since\", jQuery.lastModified[ cacheURL ] );\n\t\t\t}\n\t\t\tif ( jQuery.etag[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-None-Match\", jQuery.etag[ cacheURL ] );\n\t\t\t}\n\t\t}\n\n\t\t// Set the correct header, if data is being sent\n\t\tif ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {\n\t\t\tjqXHR.setRequestHeader( \"Content-Type\", s.contentType );\n\t\t}\n\n\t\t// Set the Accepts header for the server, depending on the dataType\n\t\tjqXHR.setRequestHeader(\n\t\t\t\"Accept\",\n\t\t\ts.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ?\n\t\t\t\ts.accepts[ s.dataTypes[ 0 ] ] +\n\t\t\t\t\t( s.dataTypes[ 0 ] !== \"*\" ? \", \" + allTypes + \"; q=0.01\" : \"\" ) :\n\t\t\t\ts.accepts[ \"*\" ]\n\t\t);\n\n\t\t// Check for headers option\n\t\tfor ( i in s.headers ) {\n\t\t\tjqXHR.setRequestHeader( i, s.headers[ i ] );\n\t\t}\n\n\t\t// Allow custom headers/mimetypes and early abort\n\t\tif ( s.beforeSend &&\n\t\t\t( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) {\n\n\t\t\t// Abort if not done already and return\n\t\t\treturn jqXHR.abort();\n\t\t}\n\n\t\t// Aborting is no longer a cancellation\n\t\tstrAbort = \"abort\";\n\n\t\t// Install callbacks on deferreds\n\t\tcompleteDeferred.add( s.complete );\n\t\tjqXHR.done( s.success );\n\t\tjqXHR.fail( s.error );\n\n\t\t// Get transport\n\t\ttransport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );\n\n\t\t// If no transport, we auto-abort\n\t\tif ( !transport ) {\n\t\t\tdone( -1, \"No Transport\" );\n\t\t} else {\n\t\t\tjqXHR.readyState = 1;\n\n\t\t\t// Send global event\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxSend\", [ jqXHR, s ] );\n\t\t\t}\n\n\t\t\t// If request was aborted inside ajaxSend, stop there\n\t\t\tif ( completed ) {\n\t\t\t\treturn jqXHR;\n\t\t\t}\n\n\t\t\t// Timeout\n\t\t\tif ( s.async && s.timeout > 0 ) {\n\t\t\t\ttimeoutTimer = window.setTimeout( function() {\n\t\t\t\t\tjqXHR.abort( \"timeout\" );\n\t\t\t\t}, s.timeout );\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tcompleted = false;\n\t\t\t\ttransport.send( requestHeaders, done );\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// Rethrow post-completion exceptions\n\t\t\t\tif ( completed ) {\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\n\t\t\t\t// Propagate others as results\n\t\t\t\tdone( -1, e );\n\t\t\t}\n\t\t}\n\n\t\t// Callback for when everything is done\n\t\tfunction done( status, nativeStatusText, responses, headers ) {\n\t\t\tvar isSuccess, success, error, response, modified,\n\t\t\t\tstatusText = nativeStatusText;\n\n\t\t\t// Ignore repeat invocations\n\t\t\tif ( completed ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tcompleted = true;\n\n\t\t\t// Clear timeout if it exists\n\t\t\tif ( timeoutTimer ) {\n\t\t\t\twindow.clearTimeout( timeoutTimer );\n\t\t\t}\n\n\t\t\t// Dereference transport for early garbage collection\n\t\t\t// (no matter how long the jqXHR object will be used)\n\t\t\ttransport = undefined;\n\n\t\t\t// Cache response headers\n\t\t\tresponseHeadersString = headers || \"\";\n\n\t\t\t// Set readyState\n\t\t\tjqXHR.readyState = status > 0 ? 4 : 0;\n\n\t\t\t// Determine if successful\n\t\t\tisSuccess = status >= 200 && status < 300 || status === 304;\n\n\t\t\t// Get response data\n\t\t\tif ( responses ) {\n\t\t\t\tresponse = ajaxHandleResponses( s, jqXHR, responses );\n\t\t\t}\n\n\t\t\t// Use a noop converter for missing script but not if jsonp\n\t\t\tif ( !isSuccess &&\n\t\t\t\tjQuery.inArray( \"script\", s.dataTypes ) > -1 &&\n\t\t\t\tjQuery.inArray( \"json\", s.dataTypes ) < 0 ) {\n\t\t\t\ts.converters[ \"text script\" ] = function() {};\n\t\t\t}\n\n\t\t\t// Convert no matter what (that way responseXXX fields are always set)\n\t\t\tresponse = ajaxConvert( s, response, jqXHR, isSuccess );\n\n\t\t\t// If successful, handle type chaining\n\t\t\tif ( isSuccess ) {\n\n\t\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\t\tif ( s.ifModified ) {\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"Last-Modified\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.lastModified[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"etag\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.etag[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// if no content\n\t\t\t\tif ( status === 204 || s.type === \"HEAD\" ) {\n\t\t\t\t\tstatusText = \"nocontent\";\n\n\t\t\t\t// if not modified\n\t\t\t\t} else if ( status === 304 ) {\n\t\t\t\t\tstatusText = \"notmodified\";\n\n\t\t\t\t// If we have data, let's convert it\n\t\t\t\t} else {\n\t\t\t\t\tstatusText = response.state;\n\t\t\t\t\tsuccess = response.data;\n\t\t\t\t\terror = response.error;\n\t\t\t\t\tisSuccess = !error;\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// Extract error from statusText and normalize for non-aborts\n\t\t\t\terror = statusText;\n\t\t\t\tif ( status || !statusText ) {\n\t\t\t\t\tstatusText = \"error\";\n\t\t\t\t\tif ( status < 0 ) {\n\t\t\t\t\t\tstatus = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Set data for the fake xhr object\n\t\t\tjqXHR.status = status;\n\t\t\tjqXHR.statusText = ( nativeStatusText || statusText ) + \"\";\n\n\t\t\t// Success/Error\n\t\t\tif ( isSuccess ) {\n\t\t\t\tdeferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );\n\t\t\t} else {\n\t\t\t\tdeferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );\n\t\t\t}\n\n\t\t\t// Status-dependent callbacks\n\t\t\tjqXHR.statusCode( statusCode );\n\t\t\tstatusCode = undefined;\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( isSuccess ? \"ajaxSuccess\" : \"ajaxError\",\n\t\t\t\t\t[ jqXHR, s, isSuccess ? success : error ] );\n\t\t\t}\n\n\t\t\t// Complete\n\t\t\tcompleteDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxComplete\", [ jqXHR, s ] );\n\n\t\t\t\t// Handle the global AJAX counter\n\t\t\t\tif ( !( --jQuery.active ) ) {\n\t\t\t\t\tjQuery.event.trigger( \"ajaxStop\" );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn jqXHR;\n\t},\n\n\tgetJSON: function( url, data, callback ) {\n\t\treturn jQuery.get( url, data, callback, \"json\" );\n\t},\n\n\tgetScript: function( url, callback ) {\n\t\treturn jQuery.get( url, undefined, callback, \"script\" );\n\t}\n} );\n\njQuery.each( [ \"get\", \"post\" ], function( _i, method ) {\n\tjQuery[ method ] = function( url, data, callback, type ) {\n\n\t\t// Shift arguments if data argument was omitted\n\t\tif ( isFunction( data ) ) {\n\t\t\ttype = type || callback;\n\t\t\tcallback = data;\n\t\t\tdata = undefined;\n\t\t}\n\n\t\t// The url can be an options object (which then must have .url)\n\t\treturn jQuery.ajax( jQuery.extend( {\n\t\t\turl: url,\n\t\t\ttype: method,\n\t\t\tdataType: type,\n\t\t\tdata: data,\n\t\t\tsuccess: callback\n\t\t}, jQuery.isPlainObject( url ) && url ) );\n\t};\n} );\n\njQuery.ajaxPrefilter( function( s ) {\n\tvar i;\n\tfor ( i in s.headers ) {\n\t\tif ( i.toLowerCase() === \"content-type\" ) {\n\t\t\ts.contentType = s.headers[ i ] || \"\";\n\t\t}\n\t}\n} );\n\n\njQuery._evalUrl = function( url, options, doc ) {\n\treturn jQuery.ajax( {\n\t\turl: url,\n\n\t\t// Make this explicit, since user can override this through ajaxSetup (#11264)\n\t\ttype: \"GET\",\n\t\tdataType: \"script\",\n\t\tcache: true,\n\t\tasync: false,\n\t\tglobal: false,\n\n\t\t// Only evaluate the response if it is successful (gh-4126)\n\t\t// dataFilter is not invoked for failure responses, so using it instead\n\t\t// of the default converter is kludgy but it works.\n\t\tconverters: {\n\t\t\t\"text script\": function() {}\n\t\t},\n\t\tdataFilter: function( response ) {\n\t\t\tjQuery.globalEval( response, options, doc );\n\t\t}\n\t} );\n};\n\n\njQuery.fn.extend( {\n\twrapAll: function( html ) {\n\t\tvar wrap;\n\n\t\tif ( this[ 0 ] ) {\n\t\t\tif ( isFunction( html ) ) {\n\t\t\t\thtml = html.call( this[ 0 ] );\n\t\t\t}\n\n\t\t\t// The elements to wrap the target around\n\t\t\twrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );\n\n\t\t\tif ( this[ 0 ].parentNode ) {\n\t\t\t\twrap.insertBefore( this[ 0 ] );\n\t\t\t}\n\n\t\t\twrap.map( function() {\n\t\t\t\tvar elem = this;\n\n\t\t\t\twhile ( elem.firstElementChild ) {\n\t\t\t\t\telem = elem.firstElementChild;\n\t\t\t\t}\n\n\t\t\t\treturn elem;\n\t\t\t} ).append( this );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\twrapInner: function( html ) {\n\t\tif ( isFunction( html ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).wrapInner( html.call( this, i ) );\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar self = jQuery( this ),\n\t\t\t\tcontents = self.contents();\n\n\t\t\tif ( contents.length ) {\n\t\t\t\tcontents.wrapAll( html );\n\n\t\t\t} else {\n\t\t\t\tself.append( html );\n\t\t\t}\n\t\t} );\n\t},\n\n\twrap: function( html ) {\n\t\tvar htmlIsFunction = isFunction( html );\n\n\t\treturn this.each( function( i ) {\n\t\t\tjQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html );\n\t\t} );\n\t},\n\n\tunwrap: function( selector ) {\n\t\tthis.parent( selector ).not( \"body\" ).each( function() {\n\t\t\tjQuery( this ).replaceWith( this.childNodes );\n\t\t} );\n\t\treturn this;\n\t}\n} );\n\n\njQuery.expr.pseudos.hidden = function( elem ) {\n\treturn !jQuery.expr.pseudos.visible( elem );\n};\njQuery.expr.pseudos.visible = function( elem ) {\n\treturn !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length );\n};\n\n\n\n\njQuery.ajaxSettings.xhr = function() {\n\ttry {\n\t\treturn new window.XMLHttpRequest();\n\t} catch ( e ) {}\n};\n\nvar xhrSuccessStatus = {\n\n\t\t// File protocol always yields status code 0, assume 200\n\t\t0: 200,\n\n\t\t// Support: IE <=9 only\n\t\t// #1450: sometimes IE returns 1223 when it should be 204\n\t\t1223: 204\n\t},\n\txhrSupported = jQuery.ajaxSettings.xhr();\n\nsupport.cors = !!xhrSupported && ( \"withCredentials\" in xhrSupported );\nsupport.ajax = xhrSupported = !!xhrSupported;\n\njQuery.ajaxTransport( function( options ) {\n\tvar callback, errorCallback;\n\n\t// Cross domain only allowed if supported through XMLHttpRequest\n\tif ( support.cors || xhrSupported && !options.crossDomain ) {\n\t\treturn {\n\t\t\tsend: function( headers, complete ) {\n\t\t\t\tvar i,\n\t\t\t\t\txhr = options.xhr();\n\n\t\t\t\txhr.open(\n\t\t\t\t\toptions.type,\n\t\t\t\t\toptions.url,\n\t\t\t\t\toptions.async,\n\t\t\t\t\toptions.username,\n\t\t\t\t\toptions.password\n\t\t\t\t);\n\n\t\t\t\t// Apply custom fields if provided\n\t\t\t\tif ( options.xhrFields ) {\n\t\t\t\t\tfor ( i in options.xhrFields ) {\n\t\t\t\t\t\txhr[ i ] = options.xhrFields[ i ];\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Override mime type if needed\n\t\t\t\tif ( options.mimeType && xhr.overrideMimeType ) {\n\t\t\t\t\txhr.overrideMimeType( options.mimeType );\n\t\t\t\t}\n\n\t\t\t\t// X-Requested-With header\n\t\t\t\t// For cross-domain requests, seeing as conditions for a preflight are\n\t\t\t\t// akin to a jigsaw puzzle, we simply never set it to be sure.\n\t\t\t\t// (it can always be set on a per-request basis or even using ajaxSetup)\n\t\t\t\t// For same-domain requests, won't change header if already provided.\n\t\t\t\tif ( !options.crossDomain && !headers[ \"X-Requested-With\" ] ) {\n\t\t\t\t\theaders[ \"X-Requested-With\" ] = \"XMLHttpRequest\";\n\t\t\t\t}\n\n\t\t\t\t// Set headers\n\t\t\t\tfor ( i in headers ) {\n\t\t\t\t\txhr.setRequestHeader( i, headers[ i ] );\n\t\t\t\t}\n\n\t\t\t\t// Callback\n\t\t\t\tcallback = function( type ) {\n\t\t\t\t\treturn function() {\n\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\tcallback = errorCallback = xhr.onload =\n\t\t\t\t\t\t\t\txhr.onerror = xhr.onabort = xhr.ontimeout =\n\t\t\t\t\t\t\t\t\txhr.onreadystatechange = null;\n\n\t\t\t\t\t\t\tif ( type === \"abort\" ) {\n\t\t\t\t\t\t\t\txhr.abort();\n\t\t\t\t\t\t\t} else if ( type === \"error\" ) {\n\n\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t// On a manual native abort, IE9 throws\n\t\t\t\t\t\t\t\t// errors on any property access that is not readyState\n\t\t\t\t\t\t\t\tif ( typeof xhr.status !== \"number\" ) {\n\t\t\t\t\t\t\t\t\tcomplete( 0, \"error\" );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tcomplete(\n\n\t\t\t\t\t\t\t\t\t\t// File: protocol always yields status 0; see #8605, #14207\n\t\t\t\t\t\t\t\t\t\txhr.status,\n\t\t\t\t\t\t\t\t\t\txhr.statusText\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tcomplete(\n\t\t\t\t\t\t\t\t\txhrSuccessStatus[ xhr.status ] || xhr.status,\n\t\t\t\t\t\t\t\t\txhr.statusText,\n\n\t\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t\t// IE9 has no XHR2 but throws on binary (trac-11426)\n\t\t\t\t\t\t\t\t\t// For XHR2 non-text, let the caller handle it (gh-2498)\n\t\t\t\t\t\t\t\t\t( xhr.responseType || \"text\" ) !== \"text\" ||\n\t\t\t\t\t\t\t\t\ttypeof xhr.responseText !== \"string\" ?\n\t\t\t\t\t\t\t\t\t\t{ binary: xhr.response } :\n\t\t\t\t\t\t\t\t\t\t{ text: xhr.responseText },\n\t\t\t\t\t\t\t\t\txhr.getAllResponseHeaders()\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t};\n\n\t\t\t\t// Listen to events\n\t\t\t\txhr.onload = callback();\n\t\t\t\terrorCallback = xhr.onerror = xhr.ontimeout = callback( \"error\" );\n\n\t\t\t\t// Support: IE 9 only\n\t\t\t\t// Use onreadystatechange to replace onabort\n\t\t\t\t// to handle uncaught aborts\n\t\t\t\tif ( xhr.onabort !== undefined ) {\n\t\t\t\t\txhr.onabort = errorCallback;\n\t\t\t\t} else {\n\t\t\t\t\txhr.onreadystatechange = function() {\n\n\t\t\t\t\t\t// Check readyState before timeout as it changes\n\t\t\t\t\t\tif ( xhr.readyState === 4 ) {\n\n\t\t\t\t\t\t\t// Allow onerror to be called first,\n\t\t\t\t\t\t\t// but that will not handle a native abort\n\t\t\t\t\t\t\t// Also, save errorCallback to a variable\n\t\t\t\t\t\t\t// as xhr.onerror cannot be accessed\n\t\t\t\t\t\t\twindow.setTimeout( function() {\n\t\t\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\t\t\terrorCallback();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\t// Create the abort callback\n\t\t\t\tcallback = callback( \"abort\" );\n\n\t\t\t\ttry {\n\n\t\t\t\t\t// Do send the request (this may raise an exception)\n\t\t\t\t\txhr.send( options.hasContent && options.data || null );\n\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t// #14683: Only rethrow if this hasn't been notified as an error yet\n\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\tthrow e;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n} );\n\n\n\n\n// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432)\njQuery.ajaxPrefilter( function( s ) {\n\tif ( s.crossDomain ) {\n\t\ts.contents.script = false;\n\t}\n} );\n\n// Install script dataType\njQuery.ajaxSetup( {\n\taccepts: {\n\t\tscript: \"text/javascript, application/javascript, \" +\n\t\t\t\"application/ecmascript, application/x-ecmascript\"\n\t},\n\tcontents: {\n\t\tscript: /\\b(?:java|ecma)script\\b/\n\t},\n\tconverters: {\n\t\t\"text script\": function( text ) {\n\t\t\tjQuery.globalEval( text );\n\t\t\treturn text;\n\t\t}\n\t}\n} );\n\n// Handle cache's special case and crossDomain\njQuery.ajaxPrefilter( \"script\", function( s ) {\n\tif ( s.cache === undefined ) {\n\t\ts.cache = false;\n\t}\n\tif ( s.crossDomain ) {\n\t\ts.type = \"GET\";\n\t}\n} );\n\n// Bind script tag hack transport\njQuery.ajaxTransport( \"script\", function( s ) {\n\n\t// This transport only deals with cross domain or forced-by-attrs requests\n\tif ( s.crossDomain || s.scriptAttrs ) {\n\t\tvar script, callback;\n\t\treturn {\n\t\t\tsend: function( _, complete ) {\n\t\t\t\tscript = jQuery( \"<script>\" )\n\t\t\t\t\t.attr( s.scriptAttrs || {} )\n\t\t\t\t\t.prop( { charset: s.scriptCharset, src: s.url } )\n\t\t\t\t\t.on( \"load error\", callback = function( evt ) {\n\t\t\t\t\t\tscript.remove();\n\t\t\t\t\t\tcallback = null;\n\t\t\t\t\t\tif ( evt ) {\n\t\t\t\t\t\t\tcomplete( evt.type === \"error\" ? 404 : 200, evt.type );\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\n\t\t\t\t// Use native DOM manipulation to avoid our domManip AJAX trickery\n\t\t\t\tdocument.head.appendChild( script[ 0 ] );\n\t\t\t},\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n} );\n\n\n\n\nvar oldCallbacks = [],\n\trjsonp = /(=)\\?(?=&|$)|\\?\\?/;\n\n// Default jsonp settings\njQuery.ajaxSetup( {\n\tjsonp: \"callback\",\n\tjsonpCallback: function() {\n\t\tvar callback = oldCallbacks.pop() || ( jQuery.expando + \"_\" + ( nonce.guid++ ) );\n\t\tthis[ callback ] = true;\n\t\treturn callback;\n\t}\n} );\n\n// Detect, normalize options and install callbacks for jsonp requests\njQuery.ajaxPrefilter( \"json jsonp\", function( s, originalSettings, jqXHR ) {\n\n\tvar callbackName, overwritten, responseContainer,\n\t\tjsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?\n\t\t\t\"url\" :\n\t\t\ttypeof s.data === \"string\" &&\n\t\t\t\t( s.contentType || \"\" )\n\t\t\t\t\t.indexOf( \"application/x-www-form-urlencoded\" ) === 0 &&\n\t\t\t\trjsonp.test( s.data ) && \"data\"\n\t\t);\n\n\t// Handle iff the expected data type is \"jsonp\" or we have a parameter to set\n\tif ( jsonProp || s.dataTypes[ 0 ] === \"jsonp\" ) {\n\n\t\t// Get callback name, remembering preexisting value associated with it\n\t\tcallbackName = s.jsonpCallback = isFunction( s.jsonpCallback ) ?\n\t\t\ts.jsonpCallback() :\n\t\t\ts.jsonpCallback;\n\n\t\t// Insert callback into url or form data\n\t\tif ( jsonProp ) {\n\t\t\ts[ jsonProp ] = s[ jsonProp ].replace( rjsonp, \"$1\" + callbackName );\n\t\t} else if ( s.jsonp !== false ) {\n\t\t\ts.url += ( rquery.test( s.url ) ? \"&\" : \"?\" ) + s.jsonp + \"=\" + callbackName;\n\t\t}\n\n\t\t// Use data converter to retrieve json after script execution\n\t\ts.converters[ \"script json\" ] = function() {\n\t\t\tif ( !responseContainer ) {\n\t\t\t\tjQuery.error( callbackName + \" was not called\" );\n\t\t\t}\n\t\t\treturn responseContainer[ 0 ];\n\t\t};\n\n\t\t// Force json dataType\n\t\ts.dataTypes[ 0 ] = \"json\";\n\n\t\t// Install callback\n\t\toverwritten = window[ callbackName ];\n\t\twindow[ callbackName ] = function() {\n\t\t\tresponseContainer = arguments;\n\t\t};\n\n\t\t// Clean-up function (fires after converters)\n\t\tjqXHR.always( function() {\n\n\t\t\t// If previous value didn't exist - remove it\n\t\t\tif ( overwritten === undefined ) {\n\t\t\t\tjQuery( window ).removeProp( callbackName );\n\n\t\t\t// Otherwise restore preexisting value\n\t\t\t} else {\n\t\t\t\twindow[ callbackName ] = overwritten;\n\t\t\t}\n\n\t\t\t// Save back as free\n\t\t\tif ( s[ callbackName ] ) {\n\n\t\t\t\t// Make sure that re-using the options doesn't screw things around\n\t\t\t\ts.jsonpCallback = originalSettings.jsonpCallback;\n\n\t\t\t\t// Save the callback name for future use\n\t\t\t\toldCallbacks.push( callbackName );\n\t\t\t}\n\n\t\t\t// Call if it was a function and we have a response\n\t\t\tif ( responseContainer && isFunction( overwritten ) ) {\n\t\t\t\toverwritten( responseContainer[ 0 ] );\n\t\t\t}\n\n\t\t\tresponseContainer = overwritten = undefined;\n\t\t} );\n\n\t\t// Delegate to script\n\t\treturn \"script\";\n\t}\n} );\n\n\n\n\n// Support: Safari 8 only\n// In Safari 8 documents created via document.implementation.createHTMLDocument\n// collapse sibling forms: the second one becomes a child of the first one.\n// Because of that, this security measure has to be disabled in Safari 8.\n// https://bugs.webkit.org/show_bug.cgi?id=137337\nsupport.createHTMLDocument = ( function() {\n\tvar body = document.implementation.createHTMLDocument( \"\" ).body;\n\tbody.innerHTML = \"<form></form><form></form>\";\n\treturn body.childNodes.length === 2;\n} )();\n\n\n// Argument \"data\" should be string of html\n// context (optional): If specified, the fragment will be created in this context,\n// defaults to document\n// keepScripts (optional): If true, will include scripts passed in the html string\njQuery.parseHTML = function( data, context, keepScripts ) {\n\tif ( typeof data !== \"string\" ) {\n\t\treturn [];\n\t}\n\tif ( typeof context === \"boolean\" ) {\n\t\tkeepScripts = context;\n\t\tcontext = false;\n\t}\n\n\tvar base, parsed, scripts;\n\n\tif ( !context ) {\n\n\t\t// Stop scripts or inline event handlers from being executed immediately\n\t\t// by using document.implementation\n\t\tif ( support.createHTMLDocument ) {\n\t\t\tcontext = document.implementation.createHTMLDocument( \"\" );\n\n\t\t\t// Set the base href for the created document\n\t\t\t// so any parsed elements with URLs\n\t\t\t// are based on the document's URL (gh-2965)\n\t\t\tbase = context.createElement( \"base\" );\n\t\t\tbase.href = document.location.href;\n\t\t\tcontext.head.appendChild( base );\n\t\t} else {\n\t\t\tcontext = document;\n\t\t}\n\t}\n\n\tparsed = rsingleTag.exec( data );\n\tscripts = !keepScripts && [];\n\n\t// Single tag\n\tif ( parsed ) {\n\t\treturn [ context.createElement( parsed[ 1 ] ) ];\n\t}\n\n\tparsed = buildFragment( [ data ], context, scripts );\n\n\tif ( scripts && scripts.length ) {\n\t\tjQuery( scripts ).remove();\n\t}\n\n\treturn jQuery.merge( [], parsed.childNodes );\n};\n\n\n/**\n * Load a url into a page\n */\njQuery.fn.load = function( url, params, callback ) {\n\tvar selector, type, response,\n\t\tself = this,\n\t\toff = url.indexOf( \" \" );\n\n\tif ( off > -1 ) {\n\t\tselector = stripAndCollapse( url.slice( off ) );\n\t\turl = url.slice( 0, off );\n\t}\n\n\t// If it's a function\n\tif ( isFunction( params ) ) {\n\n\t\t// We assume that it's the callback\n\t\tcallback = params;\n\t\tparams = undefined;\n\n\t// Otherwise, build a param string\n\t} else if ( params && typeof params === \"object\" ) {\n\t\ttype = \"POST\";\n\t}\n\n\t// If we have elements to modify, make the request\n\tif ( self.length > 0 ) {\n\t\tjQuery.ajax( {\n\t\t\turl: url,\n\n\t\t\t// If \"type\" variable is undefined, then \"GET\" method will be used.\n\t\t\t// Make value of this field explicit since\n\t\t\t// user can override it through ajaxSetup method\n\t\t\ttype: type || \"GET\",\n\t\t\tdataType: \"html\",\n\t\t\tdata: params\n\t\t} ).done( function( responseText ) {\n\n\t\t\t// Save response for use in complete callback\n\t\t\tresponse = arguments;\n\n\t\t\tself.html( selector ?\n\n\t\t\t\t// If a selector was specified, locate the right elements in a dummy div\n\t\t\t\t// Exclude scripts to avoid IE 'Permission Denied' errors\n\t\t\t\tjQuery( \"<div>\" ).append( jQuery.parseHTML( responseText ) ).find( selector ) :\n\n\t\t\t\t// Otherwise use the full result\n\t\t\t\tresponseText );\n\n\t\t// If the request succeeds, this function gets \"data\", \"status\", \"jqXHR\"\n\t\t// but they are ignored because response was set above.\n\t\t// If it fails, this function gets \"jqXHR\", \"status\", \"error\"\n\t\t} ).always( callback && function( jqXHR, status ) {\n\t\t\tself.each( function() {\n\t\t\t\tcallback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] );\n\t\t\t} );\n\t\t} );\n\t}\n\n\treturn this;\n};\n\n\n\n\njQuery.expr.pseudos.animated = function( elem ) {\n\treturn jQuery.grep( jQuery.timers, function( fn ) {\n\t\treturn elem === fn.elem;\n\t} ).length;\n};\n\n\n\n\njQuery.offset = {\n\tsetOffset: function( elem, options, i ) {\n\t\tvar curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,\n\t\t\tposition = jQuery.css( elem, \"position\" ),\n\t\t\tcurElem = jQuery( elem ),\n\t\t\tprops = {};\n\n\t\t// Set position first, in-case top/left are set even on static elem\n\t\tif ( position === \"static\" ) {\n\t\t\telem.style.position = \"relative\";\n\t\t}\n\n\t\tcurOffset = curElem.offset();\n\t\tcurCSSTop = jQuery.css( elem, \"top\" );\n\t\tcurCSSLeft = jQuery.css( elem, \"left\" );\n\t\tcalculatePosition = ( position === \"absolute\" || position === \"fixed\" ) &&\n\t\t\t( curCSSTop + curCSSLeft ).indexOf( \"auto\" ) > -1;\n\n\t\t// Need to be able to calculate position if either\n\t\t// top or left is auto and position is either absolute or fixed\n\t\tif ( calculatePosition ) {\n\t\t\tcurPosition = curElem.position();\n\t\t\tcurTop = curPosition.top;\n\t\t\tcurLeft = curPosition.left;\n\n\t\t} else {\n\t\t\tcurTop = parseFloat( curCSSTop ) || 0;\n\t\t\tcurLeft = parseFloat( curCSSLeft ) || 0;\n\t\t}\n\n\t\tif ( isFunction( options ) ) {\n\n\t\t\t// Use jQuery.extend here to allow modification of coordinates argument (gh-1848)\n\t\t\toptions = options.call( elem, i, jQuery.extend( {}, curOffset ) );\n\t\t}\n\n\t\tif ( options.top != null ) {\n\t\t\tprops.top = ( options.top - curOffset.top ) + curTop;\n\t\t}\n\t\tif ( options.left != null ) {\n\t\t\tprops.left = ( options.left - curOffset.left ) + curLeft;\n\t\t}\n\n\t\tif ( \"using\" in options ) {\n\t\t\toptions.using.call( elem, props );\n\n\t\t} else {\n\t\t\tcurElem.css( props );\n\t\t}\n\t}\n};\n\njQuery.fn.extend( {\n\n\t// offset() relates an element's border box to the document origin\n\toffset: function( options ) {\n\n\t\t// Preserve chaining for setter\n\t\tif ( arguments.length ) {\n\t\t\treturn options === undefined ?\n\t\t\t\tthis :\n\t\t\t\tthis.each( function( i ) {\n\t\t\t\t\tjQuery.offset.setOffset( this, options, i );\n\t\t\t\t} );\n\t\t}\n\n\t\tvar rect, win,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !elem ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Return zeros for disconnected and hidden (display: none) elements (gh-2310)\n\t\t// Support: IE <=11 only\n\t\t// Running getBoundingClientRect on a\n\t\t// disconnected node in IE throws an error\n\t\tif ( !elem.getClientRects().length ) {\n\t\t\treturn { top: 0, left: 0 };\n\t\t}\n\n\t\t// Get document-relative position by adding viewport scroll to viewport-relative gBCR\n\t\trect = elem.getBoundingClientRect();\n\t\twin = elem.ownerDocument.defaultView;\n\t\treturn {\n\t\t\ttop: rect.top + win.pageYOffset,\n\t\t\tleft: rect.left + win.pageXOffset\n\t\t};\n\t},\n\n\t// position() relates an element's margin box to its offset parent's padding box\n\t// This corresponds to the behavior of CSS absolute positioning\n\tposition: function() {\n\t\tif ( !this[ 0 ] ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar offsetParent, offset, doc,\n\t\t\telem = this[ 0 ],\n\t\t\tparentOffset = { top: 0, left: 0 };\n\n\t\t// position:fixed elements are offset from the viewport, which itself always has zero offset\n\t\tif ( jQuery.css( elem, \"position\" ) === \"fixed\" ) {\n\n\t\t\t// Assume position:fixed implies availability of getBoundingClientRect\n\t\t\toffset = elem.getBoundingClientRect();\n\n\t\t} else {\n\t\t\toffset = this.offset();\n\n\t\t\t// Account for the *real* offset parent, which can be the document or its root element\n\t\t\t// when a statically positioned element is identified\n\t\t\tdoc = elem.ownerDocument;\n\t\t\toffsetParent = elem.offsetParent || doc.documentElement;\n\t\t\twhile ( offsetParent &&\n\t\t\t\t( offsetParent === doc.body || offsetParent === doc.documentElement ) &&\n\t\t\t\tjQuery.css( offsetParent, \"position\" ) === \"static\" ) {\n\n\t\t\t\toffsetParent = offsetParent.parentNode;\n\t\t\t}\n\t\t\tif ( offsetParent && offsetParent !== elem && offsetParent.nodeType === 1 ) {\n\n\t\t\t\t// Incorporate borders into its offset, since they are outside its content origin\n\t\t\t\tparentOffset = jQuery( offsetParent ).offset();\n\t\t\t\tparentOffset.top += jQuery.css( offsetParent, \"borderTopWidth\", true );\n\t\t\t\tparentOffset.left += jQuery.css( offsetParent, \"borderLeftWidth\", true );\n\t\t\t}\n\t\t}\n\n\t\t// Subtract parent offsets and element margins\n\t\treturn {\n\t\t\ttop: offset.top - parentOffset.top - jQuery.css( elem, \"marginTop\", true ),\n\t\t\tleft: offset.left - parentOffset.left - jQuery.css( elem, \"marginLeft\", true )\n\t\t};\n\t},\n\n\t// This method will return documentElement in the following cases:\n\t// 1) For the element inside the iframe without offsetParent, this method will return\n\t// documentElement of the parent window\n\t// 2) For the hidden or detached element\n\t// 3) For body or html element, i.e. in case of the html node - it will return itself\n\t//\n\t// but those exceptions were never presented as a real life use-cases\n\t// and might be considered as more preferable results.\n\t//\n\t// This logic, however, is not guaranteed and can change at any point in the future\n\toffsetParent: function() {\n\t\treturn this.map( function() {\n\t\t\tvar offsetParent = this.offsetParent;\n\n\t\t\twhile ( offsetParent && jQuery.css( offsetParent, \"position\" ) === \"static\" ) {\n\t\t\t\toffsetParent = offsetParent.offsetParent;\n\t\t\t}\n\n\t\t\treturn offsetParent || documentElement;\n\t\t} );\n\t}\n} );\n\n// Create scrollLeft and scrollTop methods\njQuery.each( { scrollLeft: \"pageXOffset\", scrollTop: \"pageYOffset\" }, function( method, prop ) {\n\tvar top = \"pageYOffset\" === prop;\n\n\tjQuery.fn[ method ] = function( val ) {\n\t\treturn access( this, function( elem, method, val ) {\n\n\t\t\t// Coalesce documents and windows\n\t\t\tvar win;\n\t\t\tif ( isWindow( elem ) ) {\n\t\t\t\twin = elem;\n\t\t\t} else if ( elem.nodeType === 9 ) {\n\t\t\t\twin = elem.defaultView;\n\t\t\t}\n\n\t\t\tif ( val === undefined ) {\n\t\t\t\treturn win ? win[ prop ] : elem[ method ];\n\t\t\t}\n\n\t\t\tif ( win ) {\n\t\t\t\twin.scrollTo(\n\t\t\t\t\t!top ? val : win.pageXOffset,\n\t\t\t\t\ttop ? val : win.pageYOffset\n\t\t\t\t);\n\n\t\t\t} else {\n\t\t\t\telem[ method ] = val;\n\t\t\t}\n\t\t}, method, val, arguments.length );\n\t};\n} );\n\n// Support: Safari <=7 - 9.1, Chrome <=37 - 49\n// Add the top/left cssHooks using jQuery.fn.position\n// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084\n// Blink bug: https://bugs.chromium.org/p/chromium/issues/detail?id=589347\n// getComputedStyle returns percent when specified for top/left/bottom/right;\n// rather than make the css module depend on the offset module, just check for it here\njQuery.each( [ \"top\", \"left\" ], function( _i, prop ) {\n\tjQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,\n\t\tfunction( elem, computed ) {\n\t\t\tif ( computed ) {\n\t\t\t\tcomputed = curCSS( elem, prop );\n\n\t\t\t\t// If curCSS returns percentage, fallback to offset\n\t\t\t\treturn rnumnonpx.test( computed ) ?\n\t\t\t\t\tjQuery( elem ).position()[ prop ] + \"px\" :\n\t\t\t\t\tcomputed;\n\t\t\t}\n\t\t}\n\t);\n} );\n\n\n// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods\njQuery.each( { Height: \"height\", Width: \"width\" }, function( name, type ) {\n\tjQuery.each( {\n\t\tpadding: \"inner\" + name,\n\t\tcontent: type,\n\t\t\"\": \"outer\" + name\n\t}, function( defaultExtra, funcName ) {\n\n\t\t// Margin is only for outerHeight, outerWidth\n\t\tjQuery.fn[ funcName ] = function( margin, value ) {\n\t\t\tvar chainable = arguments.length && ( defaultExtra || typeof margin !== \"boolean\" ),\n\t\t\t\textra = defaultExtra || ( margin === true || value === true ? \"margin\" : \"border\" );\n\n\t\t\treturn access( this, function( elem, type, value ) {\n\t\t\t\tvar doc;\n\n\t\t\t\tif ( isWindow( elem ) ) {\n\n\t\t\t\t\t// $( window ).outerWidth/Height return w/h including scrollbars (gh-1729)\n\t\t\t\t\treturn funcName.indexOf( \"outer\" ) === 0 ?\n\t\t\t\t\t\telem[ \"inner\" + name ] :\n\t\t\t\t\t\telem.document.documentElement[ \"client\" + name ];\n\t\t\t\t}\n\n\t\t\t\t// Get document width or height\n\t\t\t\tif ( elem.nodeType === 9 ) {\n\t\t\t\t\tdoc = elem.documentElement;\n\n\t\t\t\t\t// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],\n\t\t\t\t\t// whichever is greatest\n\t\t\t\t\treturn Math.max(\n\t\t\t\t\t\telem.body[ \"scroll\" + name ], doc[ \"scroll\" + name ],\n\t\t\t\t\t\telem.body[ \"offset\" + name ], doc[ \"offset\" + name ],\n\t\t\t\t\t\tdoc[ \"client\" + name ]\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\treturn value === undefined ?\n\n\t\t\t\t\t// Get width or height on the element, requesting but not forcing parseFloat\n\t\t\t\t\tjQuery.css( elem, type, extra ) :\n\n\t\t\t\t\t// Set width or height on the element\n\t\t\t\t\tjQuery.style( elem, type, value, extra );\n\t\t\t}, type, chainable ? margin : undefined, chainable );\n\t\t};\n\t} );\n} );\n\n\njQuery.each( [\n\t\"ajaxStart\",\n\t\"ajaxStop\",\n\t\"ajaxComplete\",\n\t\"ajaxError\",\n\t\"ajaxSuccess\",\n\t\"ajaxSend\"\n], function( _i, type ) {\n\tjQuery.fn[ type ] = function( fn ) {\n\t\treturn this.on( type, fn );\n\t};\n} );\n\n\n\n\njQuery.fn.extend( {\n\n\tbind: function( types, data, fn ) {\n\t\treturn this.on( types, null, data, fn );\n\t},\n\tunbind: function( types, fn ) {\n\t\treturn this.off( types, null, fn );\n\t},\n\n\tdelegate: function( selector, types, data, fn ) {\n\t\treturn this.on( types, selector, data, fn );\n\t},\n\tundelegate: function( selector, types, fn ) {\n\n\t\t// ( namespace ) or ( selector, types [, fn] )\n\t\treturn arguments.length === 1 ?\n\t\t\tthis.off( selector, \"**\" ) :\n\t\t\tthis.off( types, selector || \"**\", fn );\n\t},\n\n\thover: function( fnOver, fnOut ) {\n\t\treturn this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );\n\t}\n} );\n\njQuery.each(\n\t( \"blur focus focusin focusout resize scroll click dblclick \" +\n\t\"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave \" +\n\t\"change select submit keydown keypress keyup contextmenu\" ).split( \" \" ),\n\tfunction( _i, name ) {\n\n\t\t// Handle event binding\n\t\tjQuery.fn[ name ] = function( data, fn ) {\n\t\t\treturn arguments.length > 0 ?\n\t\t\t\tthis.on( name, null, data, fn ) :\n\t\t\t\tthis.trigger( name );\n\t\t};\n\t}\n);\n\n\n\n\n// Support: Android <=4.0 only\n// Make sure we trim BOM and NBSP\nvar rtrim = /^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g;\n\n// Bind a function to a context, optionally partially applying any\n// arguments.\n// jQuery.proxy is deprecated to promote standards (specifically Function#bind)\n// However, it is not slated for removal any time soon\njQuery.proxy = function( fn, context ) {\n\tvar tmp, args, proxy;\n\n\tif ( typeof context === \"string\" ) {\n\t\ttmp = fn[ context ];\n\t\tcontext = fn;\n\t\tfn = tmp;\n\t}\n\n\t// Quick check to determine if target is callable, in the spec\n\t// this throws a TypeError, but we will just return undefined.\n\tif ( !isFunction( fn ) ) {\n\t\treturn undefined;\n\t}\n\n\t// Simulated bind\n\targs = slice.call( arguments, 2 );\n\tproxy = function() {\n\t\treturn fn.apply( context || this, args.concat( slice.call( arguments ) ) );\n\t};\n\n\t// Set the guid of unique handler to the same of original handler, so it can be removed\n\tproxy.guid = fn.guid = fn.guid || jQuery.guid++;\n\n\treturn proxy;\n};\n\njQuery.holdReady = function( hold ) {\n\tif ( hold ) {\n\t\tjQuery.readyWait++;\n\t} else {\n\t\tjQuery.ready( true );\n\t}\n};\njQuery.isArray = Array.isArray;\njQuery.parseJSON = JSON.parse;\njQuery.nodeName = nodeName;\njQuery.isFunction = isFunction;\njQuery.isWindow = isWindow;\njQuery.camelCase = camelCase;\njQuery.type = toType;\n\njQuery.now = Date.now;\n\njQuery.isNumeric = function( obj ) {\n\n\t// As of jQuery 3.0, isNumeric is limited to\n\t// strings and numbers (primitives or objects)\n\t// that can be coerced to finite numbers (gh-2662)\n\tvar type = jQuery.type( obj );\n\treturn ( type === \"number\" || type === \"string\" ) &&\n\n\t\t// parseFloat NaNs numeric-cast false positives (\"\")\n\t\t// ...but misinterprets leading-number strings, particularly hex literals (\"0x...\")\n\t\t// subtraction forces infinities to NaN\n\t\t!isNaN( obj - parseFloat( obj ) );\n};\n\njQuery.trim = function( text ) {\n\treturn text == null ?\n\t\t\"\" :\n\t\t( text + \"\" ).replace( rtrim, \"\" );\n};\n\n\n\n// Register as a named AMD module, since jQuery can be concatenated with other\n// files that may use define, but not via a proper concatenation script that\n// understands anonymous AMD modules. A named AMD is safest and most robust\n// way to register. Lowercase jquery is used because AMD module names are\n// derived from file names, and jQuery is normally delivered in a lowercase\n// file name. Do this after creating the global so that if an AMD module wants\n// to call noConflict to hide this version of jQuery, it will work.\n\n// Note that for maximum portability, libraries that are not jQuery should\n// declare themselves as anonymous modules, and avoid setting a global if an\n// AMD loader is present. jQuery is a special case. For more information, see\n// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon\n\nif ( typeof define === \"function\" && define.amd ) {\n\tdefine( \"jquery\", [], function() {\n\t\treturn jQuery;\n\t} );\n}\n\n\n\n\nvar\n\n\t// Map over jQuery in case of overwrite\n\t_jQuery = window.jQuery,\n\n\t// Map over the $ in case of overwrite\n\t_$ = window.$;\n\njQuery.noConflict = function( deep ) {\n\tif ( window.$ === jQuery ) {\n\t\twindow.$ = _$;\n\t}\n\n\tif ( deep && window.jQuery === jQuery ) {\n\t\twindow.jQuery = _jQuery;\n\t}\n\n\treturn jQuery;\n};\n\n// Expose jQuery and $ identifiers, even in AMD\n// (#7102#comment:10, https://github.com/jquery/jquery/pull/557)\n// and CommonJS for browser emulators (#13566)\nif ( typeof noGlobal === \"undefined\" ) {\n\twindow.jQuery = window.$ = jQuery;\n}\n\n\n\n\nreturn jQuery;\n} );\n","require('bootstrap/js/src/util.js');\nrequire('bootstrap/js/src/alert.js');\n// require('bootstrap/js/src/button.js');\nrequire('bootstrap/js/src/carousel.js');\nrequire('bootstrap/js/src/collapse.js');\n// require('bootstrap/js/src/dropdown.js');\nrequire('bootstrap/js/src/modal.js');\nrequire('bootstrap/js/src/scrollspy.js');\nrequire('bootstrap/js/src/tab.js');\n// require('bootstrap/js/src/tooltip.js');\n// require('bootstrap/js/src/popover.js');\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.3.1): alert.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Util from './util'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'alert'\nconst VERSION = '4.3.1'\nconst DATA_KEY = 'bs.alert'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\n\nconst Selector = {\n DISMISS : '[data-dismiss=\"alert\"]'\n}\n\nconst Event = {\n CLOSE : `close${EVENT_KEY}`,\n CLOSED : `closed${EVENT_KEY}`,\n CLICK_DATA_API : `click${EVENT_KEY}${DATA_API_KEY}`\n}\n\nconst ClassName = {\n ALERT : 'alert',\n FADE : 'fade',\n SHOW : 'show'\n}\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Alert {\n constructor(element) {\n this._element = element\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n // Public\n\n close(element) {\n let rootElement = this._element\n if (element) {\n rootElement = this._getRootElement(element)\n }\n\n const customEvent = this._triggerCloseEvent(rootElement)\n\n if (customEvent.isDefaultPrevented()) {\n return\n }\n\n this._removeElement(rootElement)\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n this._element = null\n }\n\n // Private\n\n _getRootElement(element) {\n const selector = Util.getSelectorFromElement(element)\n let parent = false\n\n if (selector) {\n parent = document.querySelector(selector)\n }\n\n if (!parent) {\n parent = $(element).closest(`.${ClassName.ALERT}`)[0]\n }\n\n return parent\n }\n\n _triggerCloseEvent(element) {\n const closeEvent = $.Event(Event.CLOSE)\n\n $(element).trigger(closeEvent)\n return closeEvent\n }\n\n _removeElement(element) {\n $(element).removeClass(ClassName.SHOW)\n\n if (!$(element).hasClass(ClassName.FADE)) {\n this._destroyElement(element)\n return\n }\n\n const transitionDuration = Util.getTransitionDurationFromElement(element)\n\n $(element)\n .one(Util.TRANSITION_END, (event) => this._destroyElement(element, event))\n .emulateTransitionEnd(transitionDuration)\n }\n\n _destroyElement(element) {\n $(element)\n .detach()\n .trigger(Event.CLOSED)\n .remove()\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n const $element = $(this)\n let data = $element.data(DATA_KEY)\n\n if (!data) {\n data = new Alert(this)\n $element.data(DATA_KEY, data)\n }\n\n if (config === 'close') {\n data[config](this)\n }\n })\n }\n\n static _handleDismiss(alertInstance) {\n return function (event) {\n if (event) {\n event.preventDefault()\n }\n\n alertInstance.close(this)\n }\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n$(document).on(\n Event.CLICK_DATA_API,\n Selector.DISMISS,\n Alert._handleDismiss(new Alert())\n)\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Alert._jQueryInterface\n$.fn[NAME].Constructor = Alert\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Alert._jQueryInterface\n}\n\nexport default Alert\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.3.1): carousel.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Util from './util'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'carousel'\nconst VERSION = '4.3.1'\nconst DATA_KEY = 'bs.carousel'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\nconst ARROW_LEFT_KEYCODE = 37 // KeyboardEvent.which value for left arrow key\nconst ARROW_RIGHT_KEYCODE = 39 // KeyboardEvent.which value for right arrow key\nconst TOUCHEVENT_COMPAT_WAIT = 500 // Time for mouse compat events to fire after touch\nconst SWIPE_THRESHOLD = 40\n\nconst Default = {\n interval : 5000,\n keyboard : true,\n slide : false,\n pause : 'hover',\n wrap : true,\n touch : true\n}\n\nconst DefaultType = {\n interval : '(number|boolean)',\n keyboard : 'boolean',\n slide : '(boolean|string)',\n pause : '(string|boolean)',\n wrap : 'boolean',\n touch : 'boolean'\n}\n\nconst Direction = {\n NEXT : 'next',\n PREV : 'prev',\n LEFT : 'left',\n RIGHT : 'right'\n}\n\nconst Event = {\n SLIDE : `slide${EVENT_KEY}`,\n SLID : `slid${EVENT_KEY}`,\n KEYDOWN : `keydown${EVENT_KEY}`,\n MOUSEENTER : `mouseenter${EVENT_KEY}`,\n MOUSELEAVE : `mouseleave${EVENT_KEY}`,\n TOUCHSTART : `touchstart${EVENT_KEY}`,\n TOUCHMOVE : `touchmove${EVENT_KEY}`,\n TOUCHEND : `touchend${EVENT_KEY}`,\n POINTERDOWN : `pointerdown${EVENT_KEY}`,\n POINTERUP : `pointerup${EVENT_KEY}`,\n DRAG_START : `dragstart${EVENT_KEY}`,\n LOAD_DATA_API : `load${EVENT_KEY}${DATA_API_KEY}`,\n CLICK_DATA_API : `click${EVENT_KEY}${DATA_API_KEY}`\n}\n\nconst ClassName = {\n CAROUSEL : 'carousel',\n ACTIVE : 'active',\n SLIDE : 'slide',\n RIGHT : 'carousel-item-right',\n LEFT : 'carousel-item-left',\n NEXT : 'carousel-item-next',\n PREV : 'carousel-item-prev',\n ITEM : 'carousel-item',\n POINTER_EVENT : 'pointer-event'\n}\n\nconst Selector = {\n ACTIVE : '.active',\n ACTIVE_ITEM : '.active.carousel-item',\n ITEM : '.carousel-item',\n ITEM_IMG : '.carousel-item img',\n NEXT_PREV : '.carousel-item-next, .carousel-item-prev',\n INDICATORS : '.carousel-indicators',\n DATA_SLIDE : '[data-slide], [data-slide-to]',\n DATA_RIDE : '[data-ride=\"carousel\"]'\n}\n\nconst PointerType = {\n TOUCH : 'touch',\n PEN : 'pen'\n}\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\nclass Carousel {\n constructor(element, config) {\n this._items = null\n this._interval = null\n this._activeElement = null\n this._isPaused = false\n this._isSliding = false\n this.touchTimeout = null\n this.touchStartX = 0\n this.touchDeltaX = 0\n\n this._config = this._getConfig(config)\n this._element = element\n this._indicatorsElement = this._element.querySelector(Selector.INDICATORS)\n this._touchSupported = 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0\n this._pointerEvent = Boolean(window.PointerEvent || window.MSPointerEvent)\n\n this._addEventListeners()\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n // Public\n\n next() {\n if (!this._isSliding) {\n this._slide(Direction.NEXT)\n }\n }\n\n nextWhenVisible() {\n // Don't call next when the page isn't visible\n // or the carousel or its parent isn't visible\n if (!document.hidden &&\n ($(this._element).is(':visible') && $(this._element).css('visibility') !== 'hidden')) {\n this.next()\n }\n }\n\n prev() {\n if (!this._isSliding) {\n this._slide(Direction.PREV)\n }\n }\n\n pause(event) {\n if (!event) {\n this._isPaused = true\n }\n\n if (this._element.querySelector(Selector.NEXT_PREV)) {\n Util.triggerTransitionEnd(this._element)\n this.cycle(true)\n }\n\n clearInterval(this._interval)\n this._interval = null\n }\n\n cycle(event) {\n if (!event) {\n this._isPaused = false\n }\n\n if (this._interval) {\n clearInterval(this._interval)\n this._interval = null\n }\n\n if (this._config.interval && !this._isPaused) {\n this._interval = setInterval(\n (document.visibilityState ? this.nextWhenVisible : this.next).bind(this),\n this._config.interval\n )\n }\n }\n\n to(index) {\n this._activeElement = this._element.querySelector(Selector.ACTIVE_ITEM)\n\n const activeIndex = this._getItemIndex(this._activeElement)\n\n if (index > this._items.length - 1 || index < 0) {\n return\n }\n\n if (this._isSliding) {\n $(this._element).one(Event.SLID, () => this.to(index))\n return\n }\n\n if (activeIndex === index) {\n this.pause()\n this.cycle()\n return\n }\n\n const direction = index > activeIndex\n ? Direction.NEXT\n : Direction.PREV\n\n this._slide(direction, this._items[index])\n }\n\n dispose() {\n $(this._element).off(EVENT_KEY)\n $.removeData(this._element, DATA_KEY)\n\n this._items = null\n this._config = null\n this._element = null\n this._interval = null\n this._isPaused = null\n this._isSliding = null\n this._activeElement = null\n this._indicatorsElement = null\n }\n\n // Private\n\n _getConfig(config) {\n config = {\n ...Default,\n ...config\n }\n Util.typeCheckConfig(NAME, config, DefaultType)\n return config\n }\n\n _handleSwipe() {\n const absDeltax = Math.abs(this.touchDeltaX)\n\n if (absDeltax <= SWIPE_THRESHOLD) {\n return\n }\n\n const direction = absDeltax / this.touchDeltaX\n\n // swipe left\n if (direction > 0) {\n this.prev()\n }\n\n // swipe right\n if (direction < 0) {\n this.next()\n }\n }\n\n _addEventListeners() {\n if (this._config.keyboard) {\n $(this._element)\n .on(Event.KEYDOWN, (event) => this._keydown(event))\n }\n\n if (this._config.pause === 'hover') {\n $(this._element)\n .on(Event.MOUSEENTER, (event) => this.pause(event))\n .on(Event.MOUSELEAVE, (event) => this.cycle(event))\n }\n\n if (this._config.touch) {\n this._addTouchEventListeners()\n }\n }\n\n _addTouchEventListeners() {\n if (!this._touchSupported) {\n return\n }\n\n const start = (event) => {\n if (this._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) {\n this.touchStartX = event.originalEvent.clientX\n } else if (!this._pointerEvent) {\n this.touchStartX = event.originalEvent.touches[0].clientX\n }\n }\n\n const move = (event) => {\n // ensure swiping with one touch and not pinching\n if (event.originalEvent.touches && event.originalEvent.touches.length > 1) {\n this.touchDeltaX = 0\n } else {\n this.touchDeltaX = event.originalEvent.touches[0].clientX - this.touchStartX\n }\n }\n\n const end = (event) => {\n if (this._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) {\n this.touchDeltaX = event.originalEvent.clientX - this.touchStartX\n }\n\n this._handleSwipe()\n if (this._config.pause === 'hover') {\n // If it's a touch-enabled device, mouseenter/leave are fired as\n // part of the mouse compatibility events on first tap - the carousel\n // would stop cycling until user tapped out of it;\n // here, we listen for touchend, explicitly pause the carousel\n // (as if it's the second time we tap on it, mouseenter compat event\n // is NOT fired) and after a timeout (to allow for mouse compatibility\n // events to fire) we explicitly restart cycling\n\n this.pause()\n if (this.touchTimeout) {\n clearTimeout(this.touchTimeout)\n }\n this.touchTimeout = setTimeout((event) => this.cycle(event), TOUCHEVENT_COMPAT_WAIT + this._config.interval)\n }\n }\n\n $(this._element.querySelectorAll(Selector.ITEM_IMG)).on(Event.DRAG_START, (e) => e.preventDefault())\n if (this._pointerEvent) {\n $(this._element).on(Event.POINTERDOWN, (event) => start(event))\n $(this._element).on(Event.POINTERUP, (event) => end(event))\n\n this._element.classList.add(ClassName.POINTER_EVENT)\n } else {\n $(this._element).on(Event.TOUCHSTART, (event) => start(event))\n $(this._element).on(Event.TOUCHMOVE, (event) => move(event))\n $(this._element).on(Event.TOUCHEND, (event) => end(event))\n }\n }\n\n _keydown(event) {\n if (/input|textarea/i.test(event.target.tagName)) {\n return\n }\n\n switch (event.which) {\n case ARROW_LEFT_KEYCODE:\n event.preventDefault()\n this.prev()\n break\n case ARROW_RIGHT_KEYCODE:\n event.preventDefault()\n this.next()\n break\n default:\n }\n }\n\n _getItemIndex(element) {\n this._items = element && element.parentNode\n ? [].slice.call(element.parentNode.querySelectorAll(Selector.ITEM))\n : []\n return this._items.indexOf(element)\n }\n\n _getItemByDirection(direction, activeElement) {\n const isNextDirection = direction === Direction.NEXT\n const isPrevDirection = direction === Direction.PREV\n const activeIndex = this._getItemIndex(activeElement)\n const lastItemIndex = this._items.length - 1\n const isGoingToWrap = isPrevDirection && activeIndex === 0 ||\n isNextDirection && activeIndex === lastItemIndex\n\n if (isGoingToWrap && !this._config.wrap) {\n return activeElement\n }\n\n const delta = direction === Direction.PREV ? -1 : 1\n const itemIndex = (activeIndex + delta) % this._items.length\n\n return itemIndex === -1\n ? this._items[this._items.length - 1] : this._items[itemIndex]\n }\n\n _triggerSlideEvent(relatedTarget, eventDirectionName) {\n const targetIndex = this._getItemIndex(relatedTarget)\n const fromIndex = this._getItemIndex(this._element.querySelector(Selector.ACTIVE_ITEM))\n const slideEvent = $.Event(Event.SLIDE, {\n relatedTarget,\n direction: eventDirectionName,\n from: fromIndex,\n to: targetIndex\n })\n\n $(this._element).trigger(slideEvent)\n\n return slideEvent\n }\n\n _setActiveIndicatorElement(element) {\n if (this._indicatorsElement) {\n const indicators = [].slice.call(this._indicatorsElement.querySelectorAll(Selector.ACTIVE))\n $(indicators)\n .removeClass(ClassName.ACTIVE)\n\n const nextIndicator = this._indicatorsElement.children[\n this._getItemIndex(element)\n ]\n\n if (nextIndicator) {\n $(nextIndicator).addClass(ClassName.ACTIVE)\n }\n }\n }\n\n _slide(direction, element) {\n const activeElement = this._element.querySelector(Selector.ACTIVE_ITEM)\n const activeElementIndex = this._getItemIndex(activeElement)\n const nextElement = element || activeElement &&\n this._getItemByDirection(direction, activeElement)\n const nextElementIndex = this._getItemIndex(nextElement)\n const isCycling = Boolean(this._interval)\n\n let directionalClassName\n let orderClassName\n let eventDirectionName\n\n if (direction === Direction.NEXT) {\n directionalClassName = ClassName.LEFT\n orderClassName = ClassName.NEXT\n eventDirectionName = Direction.LEFT\n } else {\n directionalClassName = ClassName.RIGHT\n orderClassName = ClassName.PREV\n eventDirectionName = Direction.RIGHT\n }\n\n if (nextElement && $(nextElement).hasClass(ClassName.ACTIVE)) {\n this._isSliding = false\n return\n }\n\n const slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName)\n if (slideEvent.isDefaultPrevented()) {\n return\n }\n\n if (!activeElement || !nextElement) {\n // Some weirdness is happening, so we bail\n return\n }\n\n this._isSliding = true\n\n if (isCycling) {\n this.pause()\n }\n\n this._setActiveIndicatorElement(nextElement)\n\n const slidEvent = $.Event(Event.SLID, {\n relatedTarget: nextElement,\n direction: eventDirectionName,\n from: activeElementIndex,\n to: nextElementIndex\n })\n\n if ($(this._element).hasClass(ClassName.SLIDE)) {\n $(nextElement).addClass(orderClassName)\n\n Util.reflow(nextElement)\n\n $(activeElement).addClass(directionalClassName)\n $(nextElement).addClass(directionalClassName)\n\n const nextElementInterval = parseInt(nextElement.getAttribute('data-interval'), 10)\n if (nextElementInterval) {\n this._config.defaultInterval = this._config.defaultInterval || this._config.interval\n this._config.interval = nextElementInterval\n } else {\n this._config.interval = this._config.defaultInterval || this._config.interval\n }\n\n const transitionDuration = Util.getTransitionDurationFromElement(activeElement)\n\n $(activeElement)\n .one(Util.TRANSITION_END, () => {\n $(nextElement)\n .removeClass(`${directionalClassName} ${orderClassName}`)\n .addClass(ClassName.ACTIVE)\n\n $(activeElement).removeClass(`${ClassName.ACTIVE} ${orderClassName} ${directionalClassName}`)\n\n this._isSliding = false\n\n setTimeout(() => $(this._element).trigger(slidEvent), 0)\n })\n .emulateTransitionEnd(transitionDuration)\n } else {\n $(activeElement).removeClass(ClassName.ACTIVE)\n $(nextElement).addClass(ClassName.ACTIVE)\n\n this._isSliding = false\n $(this._element).trigger(slidEvent)\n }\n\n if (isCycling) {\n this.cycle()\n }\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n let _config = {\n ...Default,\n ...$(this).data()\n }\n\n if (typeof config === 'object') {\n _config = {\n ..._config,\n ...config\n }\n }\n\n const action = typeof config === 'string' ? config : _config.slide\n\n if (!data) {\n data = new Carousel(this, _config)\n $(this).data(DATA_KEY, data)\n }\n\n if (typeof config === 'number') {\n data.to(config)\n } else if (typeof action === 'string') {\n if (typeof data[action] === 'undefined') {\n throw new TypeError(`No method named \"${action}\"`)\n }\n data[action]()\n } else if (_config.interval && _config.ride) {\n data.pause()\n data.cycle()\n }\n })\n }\n\n static _dataApiClickHandler(event) {\n const selector = Util.getSelectorFromElement(this)\n\n if (!selector) {\n return\n }\n\n const target = $(selector)[0]\n\n if (!target || !$(target).hasClass(ClassName.CAROUSEL)) {\n return\n }\n\n const config = {\n ...$(target).data(),\n ...$(this).data()\n }\n const slideIndex = this.getAttribute('data-slide-to')\n\n if (slideIndex) {\n config.interval = false\n }\n\n Carousel._jQueryInterface.call($(target), config)\n\n if (slideIndex) {\n $(target).data(DATA_KEY).to(slideIndex)\n }\n\n event.preventDefault()\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n$(document)\n .on(Event.CLICK_DATA_API, Selector.DATA_SLIDE, Carousel._dataApiClickHandler)\n\n$(window).on(Event.LOAD_DATA_API, () => {\n const carousels = [].slice.call(document.querySelectorAll(Selector.DATA_RIDE))\n for (let i = 0, len = carousels.length; i < len; i++) {\n const $carousel = $(carousels[i])\n Carousel._jQueryInterface.call($carousel, $carousel.data())\n }\n})\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Carousel._jQueryInterface\n$.fn[NAME].Constructor = Carousel\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Carousel._jQueryInterface\n}\n\nexport default Carousel\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.3.1): collapse.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Util from './util'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'collapse'\nconst VERSION = '4.3.1'\nconst DATA_KEY = 'bs.collapse'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\n\nconst Default = {\n toggle : true,\n parent : ''\n}\n\nconst DefaultType = {\n toggle : 'boolean',\n parent : '(string|element)'\n}\n\nconst Event = {\n SHOW : `show${EVENT_KEY}`,\n SHOWN : `shown${EVENT_KEY}`,\n HIDE : `hide${EVENT_KEY}`,\n HIDDEN : `hidden${EVENT_KEY}`,\n CLICK_DATA_API : `click${EVENT_KEY}${DATA_API_KEY}`\n}\n\nconst ClassName = {\n SHOW : 'show',\n COLLAPSE : 'collapse',\n COLLAPSING : 'collapsing',\n COLLAPSED : 'collapsed'\n}\n\nconst Dimension = {\n WIDTH : 'width',\n HEIGHT : 'height'\n}\n\nconst Selector = {\n ACTIVES : '.show, .collapsing',\n DATA_TOGGLE : '[data-toggle=\"collapse\"]'\n}\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Collapse {\n constructor(element, config) {\n this._isTransitioning = false\n this._element = element\n this._config = this._getConfig(config)\n this._triggerArray = [].slice.call(document.querySelectorAll(\n `[data-toggle=\"collapse\"][href=\"#${element.id}\"],` +\n `[data-toggle=\"collapse\"][data-target=\"#${element.id}\"]`\n ))\n\n const toggleList = [].slice.call(document.querySelectorAll(Selector.DATA_TOGGLE))\n for (let i = 0, len = toggleList.length; i < len; i++) {\n const elem = toggleList[i]\n const selector = Util.getSelectorFromElement(elem)\n const filterElement = [].slice.call(document.querySelectorAll(selector))\n .filter((foundElem) => foundElem === element)\n\n if (selector !== null && filterElement.length > 0) {\n this._selector = selector\n this._triggerArray.push(elem)\n }\n }\n\n this._parent = this._config.parent ? this._getParent() : null\n\n if (!this._config.parent) {\n this._addAriaAndCollapsedClass(this._element, this._triggerArray)\n }\n\n if (this._config.toggle) {\n this.toggle()\n }\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n // Public\n\n toggle() {\n if ($(this._element).hasClass(ClassName.SHOW)) {\n this.hide()\n } else {\n this.show()\n }\n }\n\n show() {\n if (this._isTransitioning ||\n $(this._element).hasClass(ClassName.SHOW)) {\n return\n }\n\n let actives\n let activesData\n\n if (this._parent) {\n actives = [].slice.call(this._parent.querySelectorAll(Selector.ACTIVES))\n .filter((elem) => {\n if (typeof this._config.parent === 'string') {\n return elem.getAttribute('data-parent') === this._config.parent\n }\n\n return elem.classList.contains(ClassName.COLLAPSE)\n })\n\n if (actives.length === 0) {\n actives = null\n }\n }\n\n if (actives) {\n activesData = $(actives).not(this._selector).data(DATA_KEY)\n if (activesData && activesData._isTransitioning) {\n return\n }\n }\n\n const startEvent = $.Event(Event.SHOW)\n $(this._element).trigger(startEvent)\n if (startEvent.isDefaultPrevented()) {\n return\n }\n\n if (actives) {\n Collapse._jQueryInterface.call($(actives).not(this._selector), 'hide')\n if (!activesData) {\n $(actives).data(DATA_KEY, null)\n }\n }\n\n const dimension = this._getDimension()\n\n $(this._element)\n .removeClass(ClassName.COLLAPSE)\n .addClass(ClassName.COLLAPSING)\n\n this._element.style[dimension] = 0\n\n if (this._triggerArray.length) {\n $(this._triggerArray)\n .removeClass(ClassName.COLLAPSED)\n .attr('aria-expanded', true)\n }\n\n this.setTransitioning(true)\n\n const complete = () => {\n $(this._element)\n .removeClass(ClassName.COLLAPSING)\n .addClass(ClassName.COLLAPSE)\n .addClass(ClassName.SHOW)\n\n this._element.style[dimension] = ''\n\n this.setTransitioning(false)\n\n $(this._element).trigger(Event.SHOWN)\n }\n\n const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1)\n const scrollSize = `scroll${capitalizedDimension}`\n const transitionDuration = Util.getTransitionDurationFromElement(this._element)\n\n $(this._element)\n .one(Util.TRANSITION_END, complete)\n .emulateTransitionEnd(transitionDuration)\n\n this._element.style[dimension] = `${this._element[scrollSize]}px`\n }\n\n hide() {\n if (this._isTransitioning ||\n !$(this._element).hasClass(ClassName.SHOW)) {\n return\n }\n\n const startEvent = $.Event(Event.HIDE)\n $(this._element).trigger(startEvent)\n if (startEvent.isDefaultPrevented()) {\n return\n }\n\n const dimension = this._getDimension()\n\n this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`\n\n Util.reflow(this._element)\n\n $(this._element)\n .addClass(ClassName.COLLAPSING)\n .removeClass(ClassName.COLLAPSE)\n .removeClass(ClassName.SHOW)\n\n const triggerArrayLength = this._triggerArray.length\n if (triggerArrayLength > 0) {\n for (let i = 0; i < triggerArrayLength; i++) {\n const trigger = this._triggerArray[i]\n const selector = Util.getSelectorFromElement(trigger)\n\n if (selector !== null) {\n const $elem = $([].slice.call(document.querySelectorAll(selector)))\n if (!$elem.hasClass(ClassName.SHOW)) {\n $(trigger).addClass(ClassName.COLLAPSED)\n .attr('aria-expanded', false)\n }\n }\n }\n }\n\n this.setTransitioning(true)\n\n const complete = () => {\n this.setTransitioning(false)\n $(this._element)\n .removeClass(ClassName.COLLAPSING)\n .addClass(ClassName.COLLAPSE)\n .trigger(Event.HIDDEN)\n }\n\n this._element.style[dimension] = ''\n const transitionDuration = Util.getTransitionDurationFromElement(this._element)\n\n $(this._element)\n .one(Util.TRANSITION_END, complete)\n .emulateTransitionEnd(transitionDuration)\n }\n\n setTransitioning(isTransitioning) {\n this._isTransitioning = isTransitioning\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n\n this._config = null\n this._parent = null\n this._element = null\n this._triggerArray = null\n this._isTransitioning = null\n }\n\n // Private\n\n _getConfig(config) {\n config = {\n ...Default,\n ...config\n }\n config.toggle = Boolean(config.toggle) // Coerce string values\n Util.typeCheckConfig(NAME, config, DefaultType)\n return config\n }\n\n _getDimension() {\n const hasWidth = $(this._element).hasClass(Dimension.WIDTH)\n return hasWidth ? Dimension.WIDTH : Dimension.HEIGHT\n }\n\n _getParent() {\n let parent\n\n if (Util.isElement(this._config.parent)) {\n parent = this._config.parent\n\n // It's a jQuery object\n if (typeof this._config.parent.jquery !== 'undefined') {\n parent = this._config.parent[0]\n }\n } else {\n parent = document.querySelector(this._config.parent)\n }\n\n const selector =\n `[data-toggle=\"collapse\"][data-parent=\"${this._config.parent}\"]`\n\n const children = [].slice.call(parent.querySelectorAll(selector))\n $(children).each((i, element) => {\n this._addAriaAndCollapsedClass(\n Collapse._getTargetFromElement(element),\n [element]\n )\n })\n\n return parent\n }\n\n _addAriaAndCollapsedClass(element, triggerArray) {\n const isOpen = $(element).hasClass(ClassName.SHOW)\n\n if (triggerArray.length) {\n $(triggerArray)\n .toggleClass(ClassName.COLLAPSED, !isOpen)\n .attr('aria-expanded', isOpen)\n }\n }\n\n // Static\n\n static _getTargetFromElement(element) {\n const selector = Util.getSelectorFromElement(element)\n return selector ? document.querySelector(selector) : null\n }\n\n static _jQueryInterface(config) {\n return this.each(function () {\n const $this = $(this)\n let data = $this.data(DATA_KEY)\n const _config = {\n ...Default,\n ...$this.data(),\n ...typeof config === 'object' && config ? config : {}\n }\n\n if (!data && _config.toggle && /show|hide/.test(config)) {\n _config.toggle = false\n }\n\n if (!data) {\n data = new Collapse(this, _config)\n $this.data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n data[config]()\n }\n })\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n$(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) {\n // preventDefault only for <a> elements (which change the URL) not inside the collapsible element\n if (event.currentTarget.tagName === 'A') {\n event.preventDefault()\n }\n\n const $trigger = $(this)\n const selector = Util.getSelectorFromElement(this)\n const selectors = [].slice.call(document.querySelectorAll(selector))\n\n $(selectors).each(function () {\n const $target = $(this)\n const data = $target.data(DATA_KEY)\n const config = data ? 'toggle' : $trigger.data()\n Collapse._jQueryInterface.call($target, config)\n })\n})\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Collapse._jQueryInterface\n$.fn[NAME].Constructor = Collapse\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Collapse._jQueryInterface\n}\n\nexport default Collapse\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.3.1): modal.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Util from './util'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'modal'\nconst VERSION = '4.3.1'\nconst DATA_KEY = 'bs.modal'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\nconst ESCAPE_KEYCODE = 27 // KeyboardEvent.which value for Escape (Esc) key\n\nconst Default = {\n backdrop : true,\n keyboard : true,\n focus : true,\n show : true\n}\n\nconst DefaultType = {\n backdrop : '(boolean|string)',\n keyboard : 'boolean',\n focus : 'boolean',\n show : 'boolean'\n}\n\nconst Event = {\n HIDE : `hide${EVENT_KEY}`,\n HIDDEN : `hidden${EVENT_KEY}`,\n SHOW : `show${EVENT_KEY}`,\n SHOWN : `shown${EVENT_KEY}`,\n FOCUSIN : `focusin${EVENT_KEY}`,\n RESIZE : `resize${EVENT_KEY}`,\n CLICK_DISMISS : `click.dismiss${EVENT_KEY}`,\n KEYDOWN_DISMISS : `keydown.dismiss${EVENT_KEY}`,\n MOUSEUP_DISMISS : `mouseup.dismiss${EVENT_KEY}`,\n MOUSEDOWN_DISMISS : `mousedown.dismiss${EVENT_KEY}`,\n CLICK_DATA_API : `click${EVENT_KEY}${DATA_API_KEY}`\n}\n\nconst ClassName = {\n SCROLLABLE : 'modal-dialog-scrollable',\n SCROLLBAR_MEASURER : 'modal-scrollbar-measure',\n BACKDROP : 'modal-backdrop',\n OPEN : 'modal-open',\n FADE : 'fade',\n SHOW : 'show'\n}\n\nconst Selector = {\n DIALOG : '.modal-dialog',\n MODAL_BODY : '.modal-body',\n DATA_TOGGLE : '[data-toggle=\"modal\"]',\n DATA_DISMISS : '[data-dismiss=\"modal\"]',\n FIXED_CONTENT : '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top',\n STICKY_CONTENT : '.sticky-top'\n}\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Modal {\n constructor(element, config) {\n this._config = this._getConfig(config)\n this._element = element\n this._dialog = element.querySelector(Selector.DIALOG)\n this._backdrop = null\n this._isShown = false\n this._isBodyOverflowing = false\n this._ignoreBackdropClick = false\n this._isTransitioning = false\n this._scrollbarWidth = 0\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n // Public\n\n toggle(relatedTarget) {\n return this._isShown ? this.hide() : this.show(relatedTarget)\n }\n\n show(relatedTarget) {\n if (this._isShown || this._isTransitioning) {\n return\n }\n\n if ($(this._element).hasClass(ClassName.FADE)) {\n this._isTransitioning = true\n }\n\n const showEvent = $.Event(Event.SHOW, {\n relatedTarget\n })\n\n $(this._element).trigger(showEvent)\n\n if (this._isShown || showEvent.isDefaultPrevented()) {\n return\n }\n\n this._isShown = true\n\n this._checkScrollbar()\n this._setScrollbar()\n\n this._adjustDialog()\n\n this._setEscapeEvent()\n this._setResizeEvent()\n\n $(this._element).on(\n Event.CLICK_DISMISS,\n Selector.DATA_DISMISS,\n (event) => this.hide(event)\n )\n\n $(this._dialog).on(Event.MOUSEDOWN_DISMISS, () => {\n $(this._element).one(Event.MOUSEUP_DISMISS, (event) => {\n if ($(event.target).is(this._element)) {\n this._ignoreBackdropClick = true\n }\n })\n })\n\n this._showBackdrop(() => this._showElement(relatedTarget))\n }\n\n hide(event) {\n if (event) {\n event.preventDefault()\n }\n\n if (!this._isShown || this._isTransitioning) {\n return\n }\n\n const hideEvent = $.Event(Event.HIDE)\n\n $(this._element).trigger(hideEvent)\n\n if (!this._isShown || hideEvent.isDefaultPrevented()) {\n return\n }\n\n this._isShown = false\n const transition = $(this._element).hasClass(ClassName.FADE)\n\n if (transition) {\n this._isTransitioning = true\n }\n\n this._setEscapeEvent()\n this._setResizeEvent()\n\n $(document).off(Event.FOCUSIN)\n\n $(this._element).removeClass(ClassName.SHOW)\n\n $(this._element).off(Event.CLICK_DISMISS)\n $(this._dialog).off(Event.MOUSEDOWN_DISMISS)\n\n\n if (transition) {\n const transitionDuration = Util.getTransitionDurationFromElement(this._element)\n\n $(this._element)\n .one(Util.TRANSITION_END, (event) => this._hideModal(event))\n .emulateTransitionEnd(transitionDuration)\n } else {\n this._hideModal()\n }\n }\n\n dispose() {\n [window, this._element, this._dialog]\n .forEach((htmlElement) => $(htmlElement).off(EVENT_KEY))\n\n /**\n * `document` has 2 events `Event.FOCUSIN` and `Event.CLICK_DATA_API`\n * Do not move `document` in `htmlElements` array\n * It will remove `Event.CLICK_DATA_API` event that should remain\n */\n $(document).off(Event.FOCUSIN)\n\n $.removeData(this._element, DATA_KEY)\n\n this._config = null\n this._element = null\n this._dialog = null\n this._backdrop = null\n this._isShown = null\n this._isBodyOverflowing = null\n this._ignoreBackdropClick = null\n this._isTransitioning = null\n this._scrollbarWidth = null\n }\n\n handleUpdate() {\n this._adjustDialog()\n }\n\n // Private\n\n _getConfig(config) {\n config = {\n ...Default,\n ...config\n }\n Util.typeCheckConfig(NAME, config, DefaultType)\n return config\n }\n\n _showElement(relatedTarget) {\n const transition = $(this._element).hasClass(ClassName.FADE)\n\n if (!this._element.parentNode ||\n this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {\n // Don't move modal's DOM position\n document.body.appendChild(this._element)\n }\n\n this._element.style.display = 'block'\n this._element.removeAttribute('aria-hidden')\n this._element.setAttribute('aria-modal', true)\n\n if ($(this._dialog).hasClass(ClassName.SCROLLABLE)) {\n this._dialog.querySelector(Selector.MODAL_BODY).scrollTop = 0\n } else {\n this._element.scrollTop = 0\n }\n\n if (transition) {\n Util.reflow(this._element)\n }\n\n $(this._element).addClass(ClassName.SHOW)\n\n if (this._config.focus) {\n this._enforceFocus()\n }\n\n const shownEvent = $.Event(Event.SHOWN, {\n relatedTarget\n })\n\n const transitionComplete = () => {\n if (this._config.focus) {\n this._element.focus()\n }\n this._isTransitioning = false\n $(this._element).trigger(shownEvent)\n }\n\n if (transition) {\n const transitionDuration = Util.getTransitionDurationFromElement(this._dialog)\n\n $(this._dialog)\n .one(Util.TRANSITION_END, transitionComplete)\n .emulateTransitionEnd(transitionDuration)\n } else {\n transitionComplete()\n }\n }\n\n _enforceFocus() {\n $(document)\n .off(Event.FOCUSIN) // Guard against infinite focus loop\n .on(Event.FOCUSIN, (event) => {\n if (document !== event.target &&\n this._element !== event.target &&\n $(this._element).has(event.target).length === 0) {\n this._element.focus()\n }\n })\n }\n\n _setEscapeEvent() {\n if (this._isShown && this._config.keyboard) {\n $(this._element).on(Event.KEYDOWN_DISMISS, (event) => {\n if (event.which === ESCAPE_KEYCODE) {\n event.preventDefault()\n this.hide()\n }\n })\n } else if (!this._isShown) {\n $(this._element).off(Event.KEYDOWN_DISMISS)\n }\n }\n\n _setResizeEvent() {\n if (this._isShown) {\n $(window).on(Event.RESIZE, (event) => this.handleUpdate(event))\n } else {\n $(window).off(Event.RESIZE)\n }\n }\n\n _hideModal() {\n this._element.style.display = 'none'\n this._element.setAttribute('aria-hidden', true)\n this._element.removeAttribute('aria-modal')\n this._isTransitioning = false\n this._showBackdrop(() => {\n $(document.body).removeClass(ClassName.OPEN)\n this._resetAdjustments()\n this._resetScrollbar()\n $(this._element).trigger(Event.HIDDEN)\n })\n }\n\n _removeBackdrop() {\n if (this._backdrop) {\n $(this._backdrop).remove()\n this._backdrop = null\n }\n }\n\n _showBackdrop(callback) {\n const animate = $(this._element).hasClass(ClassName.FADE)\n ? ClassName.FADE : ''\n\n if (this._isShown && this._config.backdrop) {\n this._backdrop = document.createElement('div')\n this._backdrop.className = ClassName.BACKDROP\n\n if (animate) {\n this._backdrop.classList.add(animate)\n }\n\n $(this._backdrop).appendTo(document.body)\n\n $(this._element).on(Event.CLICK_DISMISS, (event) => {\n if (this._ignoreBackdropClick) {\n this._ignoreBackdropClick = false\n return\n }\n if (event.target !== event.currentTarget) {\n return\n }\n if (this._config.backdrop === 'static') {\n this._element.focus()\n } else {\n this.hide()\n }\n })\n\n if (animate) {\n Util.reflow(this._backdrop)\n }\n\n $(this._backdrop).addClass(ClassName.SHOW)\n\n if (!callback) {\n return\n }\n\n if (!animate) {\n callback()\n return\n }\n\n const backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop)\n\n $(this._backdrop)\n .one(Util.TRANSITION_END, callback)\n .emulateTransitionEnd(backdropTransitionDuration)\n } else if (!this._isShown && this._backdrop) {\n $(this._backdrop).removeClass(ClassName.SHOW)\n\n const callbackRemove = () => {\n this._removeBackdrop()\n if (callback) {\n callback()\n }\n }\n\n if ($(this._element).hasClass(ClassName.FADE)) {\n const backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop)\n\n $(this._backdrop)\n .one(Util.TRANSITION_END, callbackRemove)\n .emulateTransitionEnd(backdropTransitionDuration)\n } else {\n callbackRemove()\n }\n } else if (callback) {\n callback()\n }\n }\n\n // ----------------------------------------------------------------------\n // the following methods are used to handle overflowing modals\n // todo (fat): these should probably be refactored out of modal.js\n // ----------------------------------------------------------------------\n\n _adjustDialog() {\n const isModalOverflowing =\n this._element.scrollHeight > document.documentElement.clientHeight\n\n if (!this._isBodyOverflowing && isModalOverflowing) {\n this._element.style.paddingLeft = `${this._scrollbarWidth}px`\n }\n\n if (this._isBodyOverflowing && !isModalOverflowing) {\n this._element.style.paddingRight = `${this._scrollbarWidth}px`\n }\n }\n\n _resetAdjustments() {\n this._element.style.paddingLeft = ''\n this._element.style.paddingRight = ''\n }\n\n _checkScrollbar() {\n const rect = document.body.getBoundingClientRect()\n this._isBodyOverflowing = rect.left + rect.right < window.innerWidth\n this._scrollbarWidth = this._getScrollbarWidth()\n }\n\n _setScrollbar() {\n if (this._isBodyOverflowing) {\n // Note: DOMNode.style.paddingRight returns the actual value or '' if not set\n // while $(DOMNode).css('padding-right') returns the calculated value or 0 if not set\n const fixedContent = [].slice.call(document.querySelectorAll(Selector.FIXED_CONTENT))\n const stickyContent = [].slice.call(document.querySelectorAll(Selector.STICKY_CONTENT))\n\n // Adjust fixed content padding\n $(fixedContent).each((index, element) => {\n const actualPadding = element.style.paddingRight\n const calculatedPadding = $(element).css('padding-right')\n $(element)\n .data('padding-right', actualPadding)\n .css('padding-right', `${parseFloat(calculatedPadding) + this._scrollbarWidth}px`)\n })\n\n // Adjust sticky content margin\n $(stickyContent).each((index, element) => {\n const actualMargin = element.style.marginRight\n const calculatedMargin = $(element).css('margin-right')\n $(element)\n .data('margin-right', actualMargin)\n .css('margin-right', `${parseFloat(calculatedMargin) - this._scrollbarWidth}px`)\n })\n\n // Adjust body padding\n const actualPadding = document.body.style.paddingRight\n const calculatedPadding = $(document.body).css('padding-right')\n $(document.body)\n .data('padding-right', actualPadding)\n .css('padding-right', `${parseFloat(calculatedPadding) + this._scrollbarWidth}px`)\n }\n\n $(document.body).addClass(ClassName.OPEN)\n }\n\n _resetScrollbar() {\n // Restore fixed content padding\n const fixedContent = [].slice.call(document.querySelectorAll(Selector.FIXED_CONTENT))\n $(fixedContent).each((index, element) => {\n const padding = $(element).data('padding-right')\n $(element).removeData('padding-right')\n element.style.paddingRight = padding ? padding : ''\n })\n\n // Restore sticky content\n const elements = [].slice.call(document.querySelectorAll(`${Selector.STICKY_CONTENT}`))\n $(elements).each((index, element) => {\n const margin = $(element).data('margin-right')\n if (typeof margin !== 'undefined') {\n $(element).css('margin-right', margin).removeData('margin-right')\n }\n })\n\n // Restore body padding\n const padding = $(document.body).data('padding-right')\n $(document.body).removeData('padding-right')\n document.body.style.paddingRight = padding ? padding : ''\n }\n\n _getScrollbarWidth() { // thx d.walsh\n const scrollDiv = document.createElement('div')\n scrollDiv.className = ClassName.SCROLLBAR_MEASURER\n document.body.appendChild(scrollDiv)\n const scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth\n document.body.removeChild(scrollDiv)\n return scrollbarWidth\n }\n\n // Static\n\n static _jQueryInterface(config, relatedTarget) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n const _config = {\n ...Default,\n ...$(this).data(),\n ...typeof config === 'object' && config ? config : {}\n }\n\n if (!data) {\n data = new Modal(this, _config)\n $(this).data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n data[config](relatedTarget)\n } else if (_config.show) {\n data.show(relatedTarget)\n }\n })\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n$(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) {\n let target\n const selector = Util.getSelectorFromElement(this)\n\n if (selector) {\n target = document.querySelector(selector)\n }\n\n const config = $(target).data(DATA_KEY)\n ? 'toggle' : {\n ...$(target).data(),\n ...$(this).data()\n }\n\n if (this.tagName === 'A' || this.tagName === 'AREA') {\n event.preventDefault()\n }\n\n const $target = $(target).one(Event.SHOW, (showEvent) => {\n if (showEvent.isDefaultPrevented()) {\n // Only register focus restorer if modal will actually get shown\n return\n }\n\n $target.one(Event.HIDDEN, () => {\n if ($(this).is(':visible')) {\n this.focus()\n }\n })\n })\n\n Modal._jQueryInterface.call($(target), config, this)\n})\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Modal._jQueryInterface\n$.fn[NAME].Constructor = Modal\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Modal._jQueryInterface\n}\n\nexport default Modal\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.3.1): scrollspy.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Util from './util'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'scrollspy'\nconst VERSION = '4.3.1'\nconst DATA_KEY = 'bs.scrollspy'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\n\nconst Default = {\n offset : 10,\n method : 'auto',\n target : ''\n}\n\nconst DefaultType = {\n offset : 'number',\n method : 'string',\n target : '(string|element)'\n}\n\nconst Event = {\n ACTIVATE : `activate${EVENT_KEY}`,\n SCROLL : `scroll${EVENT_KEY}`,\n LOAD_DATA_API : `load${EVENT_KEY}${DATA_API_KEY}`\n}\n\nconst ClassName = {\n DROPDOWN_ITEM : 'dropdown-item',\n DROPDOWN_MENU : 'dropdown-menu',\n ACTIVE : 'active'\n}\n\nconst Selector = {\n DATA_SPY : '[data-spy=\"scroll\"]',\n ACTIVE : '.active',\n NAV_LIST_GROUP : '.nav, .list-group',\n NAV_LINKS : '.nav-link',\n NAV_ITEMS : '.nav-item',\n LIST_ITEMS : '.list-group-item',\n DROPDOWN : '.dropdown',\n DROPDOWN_ITEMS : '.dropdown-item',\n DROPDOWN_TOGGLE : '.dropdown-toggle'\n}\n\nconst OffsetMethod = {\n OFFSET : 'offset',\n POSITION : 'position'\n}\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass ScrollSpy {\n constructor(element, config) {\n this._element = element\n this._scrollElement = element.tagName === 'BODY' ? window : element\n this._config = this._getConfig(config)\n this._selector = `${this._config.target} ${Selector.NAV_LINKS},` +\n `${this._config.target} ${Selector.LIST_ITEMS},` +\n `${this._config.target} ${Selector.DROPDOWN_ITEMS}`\n this._offsets = []\n this._targets = []\n this._activeTarget = null\n this._scrollHeight = 0\n\n $(this._scrollElement).on(Event.SCROLL, (event) => this._process(event))\n\n this.refresh()\n this._process()\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n // Public\n\n refresh() {\n const autoMethod = this._scrollElement === this._scrollElement.window\n ? OffsetMethod.OFFSET : OffsetMethod.POSITION\n\n const offsetMethod = this._config.method === 'auto'\n ? autoMethod : this._config.method\n\n const offsetBase = offsetMethod === OffsetMethod.POSITION\n ? this._getScrollTop() : 0\n\n this._offsets = []\n this._targets = []\n\n this._scrollHeight = this._getScrollHeight()\n\n const targets = [].slice.call(document.querySelectorAll(this._selector))\n\n targets\n .map((element) => {\n let target\n const targetSelector = Util.getSelectorFromElement(element)\n\n if (targetSelector) {\n target = document.querySelector(targetSelector)\n }\n\n if (target) {\n const targetBCR = target.getBoundingClientRect()\n if (targetBCR.width || targetBCR.height) {\n // TODO (fat): remove sketch reliance on jQuery position/offset\n return [\n $(target)[offsetMethod]().top + offsetBase,\n targetSelector\n ]\n }\n }\n return null\n })\n .filter((item) => item)\n .sort((a, b) => a[0] - b[0])\n .forEach((item) => {\n this._offsets.push(item[0])\n this._targets.push(item[1])\n })\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n $(this._scrollElement).off(EVENT_KEY)\n\n this._element = null\n this._scrollElement = null\n this._config = null\n this._selector = null\n this._offsets = null\n this._targets = null\n this._activeTarget = null\n this._scrollHeight = null\n }\n\n // Private\n\n _getConfig(config) {\n config = {\n ...Default,\n ...typeof config === 'object' && config ? config : {}\n }\n\n if (typeof config.target !== 'string') {\n let id = $(config.target).attr('id')\n if (!id) {\n id = Util.getUID(NAME)\n $(config.target).attr('id', id)\n }\n config.target = `#${id}`\n }\n\n Util.typeCheckConfig(NAME, config, DefaultType)\n\n return config\n }\n\n _getScrollTop() {\n return this._scrollElement === window\n ? this._scrollElement.pageYOffset : this._scrollElement.scrollTop\n }\n\n _getScrollHeight() {\n return this._scrollElement.scrollHeight || Math.max(\n document.body.scrollHeight,\n document.documentElement.scrollHeight\n )\n }\n\n _getOffsetHeight() {\n return this._scrollElement === window\n ? window.innerHeight : this._scrollElement.getBoundingClientRect().height\n }\n\n _process() {\n const scrollTop = this._getScrollTop() + this._config.offset\n const scrollHeight = this._getScrollHeight()\n const maxScroll = this._config.offset +\n scrollHeight -\n this._getOffsetHeight()\n\n if (this._scrollHeight !== scrollHeight) {\n this.refresh()\n }\n\n if (scrollTop >= maxScroll) {\n const target = this._targets[this._targets.length - 1]\n\n if (this._activeTarget !== target) {\n this._activate(target)\n }\n return\n }\n\n if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) {\n this._activeTarget = null\n this._clear()\n return\n }\n\n const offsetLength = this._offsets.length\n for (let i = offsetLength; i--;) {\n const isActiveTarget = this._activeTarget !== this._targets[i] &&\n scrollTop >= this._offsets[i] &&\n (typeof this._offsets[i + 1] === 'undefined' ||\n scrollTop < this._offsets[i + 1])\n\n if (isActiveTarget) {\n this._activate(this._targets[i])\n }\n }\n }\n\n _activate(target) {\n this._activeTarget = target\n\n this._clear()\n\n const queries = this._selector\n .split(',')\n .map((selector) => `${selector}[data-target=\"${target}\"],${selector}[href=\"${target}\"]`)\n\n const $link = $([].slice.call(document.querySelectorAll(queries.join(','))))\n\n if ($link.hasClass(ClassName.DROPDOWN_ITEM)) {\n $link.closest(Selector.DROPDOWN).find(Selector.DROPDOWN_TOGGLE).addClass(ClassName.ACTIVE)\n $link.addClass(ClassName.ACTIVE)\n } else {\n // Set triggered link as active\n $link.addClass(ClassName.ACTIVE)\n // Set triggered links parents as active\n // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor\n $link.parents(Selector.NAV_LIST_GROUP).prev(`${Selector.NAV_LINKS}, ${Selector.LIST_ITEMS}`).addClass(ClassName.ACTIVE)\n // Handle special case when .nav-link is inside .nav-item\n $link.parents(Selector.NAV_LIST_GROUP).prev(Selector.NAV_ITEMS).children(Selector.NAV_LINKS).addClass(ClassName.ACTIVE)\n }\n\n $(this._scrollElement).trigger(Event.ACTIVATE, {\n relatedTarget: target\n })\n }\n\n _clear() {\n [].slice.call(document.querySelectorAll(this._selector))\n .filter((node) => node.classList.contains(ClassName.ACTIVE))\n .forEach((node) => node.classList.remove(ClassName.ACTIVE))\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n const _config = typeof config === 'object' && config\n\n if (!data) {\n data = new ScrollSpy(this, _config)\n $(this).data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n data[config]()\n }\n })\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n$(window).on(Event.LOAD_DATA_API, () => {\n const scrollSpys = [].slice.call(document.querySelectorAll(Selector.DATA_SPY))\n const scrollSpysLength = scrollSpys.length\n\n for (let i = scrollSpysLength; i--;) {\n const $spy = $(scrollSpys[i])\n ScrollSpy._jQueryInterface.call($spy, $spy.data())\n }\n})\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = ScrollSpy._jQueryInterface\n$.fn[NAME].Constructor = ScrollSpy\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return ScrollSpy._jQueryInterface\n}\n\nexport default ScrollSpy\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.3.1): tab.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Util from './util'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'tab'\nconst VERSION = '4.3.1'\nconst DATA_KEY = 'bs.tab'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\n\nconst Event = {\n HIDE : `hide${EVENT_KEY}`,\n HIDDEN : `hidden${EVENT_KEY}`,\n SHOW : `show${EVENT_KEY}`,\n SHOWN : `shown${EVENT_KEY}`,\n CLICK_DATA_API : `click${EVENT_KEY}${DATA_API_KEY}`\n}\n\nconst ClassName = {\n DROPDOWN_MENU : 'dropdown-menu',\n ACTIVE : 'active',\n DISABLED : 'disabled',\n FADE : 'fade',\n SHOW : 'show'\n}\n\nconst Selector = {\n DROPDOWN : '.dropdown',\n NAV_LIST_GROUP : '.nav, .list-group',\n ACTIVE : '.active',\n ACTIVE_UL : '> li > .active',\n DATA_TOGGLE : '[data-toggle=\"tab\"], [data-toggle=\"pill\"], [data-toggle=\"list\"]',\n DROPDOWN_TOGGLE : '.dropdown-toggle',\n DROPDOWN_ACTIVE_CHILD : '> .dropdown-menu .active'\n}\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Tab {\n constructor(element) {\n this._element = element\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n // Public\n\n show() {\n if (this._element.parentNode &&\n this._element.parentNode.nodeType === Node.ELEMENT_NODE &&\n $(this._element).hasClass(ClassName.ACTIVE) ||\n $(this._element).hasClass(ClassName.DISABLED)) {\n return\n }\n\n let target\n let previous\n const listElement = $(this._element).closest(Selector.NAV_LIST_GROUP)[0]\n const selector = Util.getSelectorFromElement(this._element)\n\n if (listElement) {\n const itemSelector = listElement.nodeName === 'UL' || listElement.nodeName === 'OL' ? Selector.ACTIVE_UL : Selector.ACTIVE\n previous = $.makeArray($(listElement).find(itemSelector))\n previous = previous[previous.length - 1]\n }\n\n const hideEvent = $.Event(Event.HIDE, {\n relatedTarget: this._element\n })\n\n const showEvent = $.Event(Event.SHOW, {\n relatedTarget: previous\n })\n\n if (previous) {\n $(previous).trigger(hideEvent)\n }\n\n $(this._element).trigger(showEvent)\n\n if (showEvent.isDefaultPrevented() ||\n hideEvent.isDefaultPrevented()) {\n return\n }\n\n if (selector) {\n target = document.querySelector(selector)\n }\n\n this._activate(\n this._element,\n listElement\n )\n\n const complete = () => {\n const hiddenEvent = $.Event(Event.HIDDEN, {\n relatedTarget: this._element\n })\n\n const shownEvent = $.Event(Event.SHOWN, {\n relatedTarget: previous\n })\n\n $(previous).trigger(hiddenEvent)\n $(this._element).trigger(shownEvent)\n }\n\n if (target) {\n this._activate(target, target.parentNode, complete)\n } else {\n complete()\n }\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n this._element = null\n }\n\n // Private\n\n _activate(element, container, callback) {\n const activeElements = container && (container.nodeName === 'UL' || container.nodeName === 'OL')\n ? $(container).find(Selector.ACTIVE_UL)\n : $(container).children(Selector.ACTIVE)\n\n const active = activeElements[0]\n const isTransitioning = callback && (active && $(active).hasClass(ClassName.FADE))\n const complete = () => this._transitionComplete(\n element,\n active,\n callback\n )\n\n if (active && isTransitioning) {\n const transitionDuration = Util.getTransitionDurationFromElement(active)\n\n $(active)\n .removeClass(ClassName.SHOW)\n .one(Util.TRANSITION_END, complete)\n .emulateTransitionEnd(transitionDuration)\n } else {\n complete()\n }\n }\n\n _transitionComplete(element, active, callback) {\n if (active) {\n $(active).removeClass(ClassName.ACTIVE)\n\n const dropdownChild = $(active.parentNode).find(\n Selector.DROPDOWN_ACTIVE_CHILD\n )[0]\n\n if (dropdownChild) {\n $(dropdownChild).removeClass(ClassName.ACTIVE)\n }\n\n if (active.getAttribute('role') === 'tab') {\n active.setAttribute('aria-selected', false)\n }\n }\n\n $(element).addClass(ClassName.ACTIVE)\n if (element.getAttribute('role') === 'tab') {\n element.setAttribute('aria-selected', true)\n }\n\n Util.reflow(element)\n\n if (element.classList.contains(ClassName.FADE)) {\n element.classList.add(ClassName.SHOW)\n }\n\n if (element.parentNode && $(element.parentNode).hasClass(ClassName.DROPDOWN_MENU)) {\n const dropdownElement = $(element).closest(Selector.DROPDOWN)[0]\n\n if (dropdownElement) {\n const dropdownToggleList = [].slice.call(dropdownElement.querySelectorAll(Selector.DROPDOWN_TOGGLE))\n\n $(dropdownToggleList).addClass(ClassName.ACTIVE)\n }\n\n element.setAttribute('aria-expanded', true)\n }\n\n if (callback) {\n callback()\n }\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n const $this = $(this)\n let data = $this.data(DATA_KEY)\n\n if (!data) {\n data = new Tab(this)\n $this.data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n data[config]()\n }\n })\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n$(document)\n .on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) {\n event.preventDefault()\n Tab._jQueryInterface.call($(this), 'show')\n })\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Tab._jQueryInterface\n$.fn[NAME].Constructor = Tab\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Tab._jQueryInterface\n}\n\nexport default Tab\n","var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function(\"return this\")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n","'use strict';\n\n/**\n * Show a spinner inside a given element\n * @param {element} $target - Element to block by the veil and spinner.\n * Pass body to block the whole page.\n */\nfunction addSpinner($target) {\n let $veil = $('<div class=\"veil\"><div class=\"underlay\"></div></div>');\n $veil.append('<div class=\"spinner\"><div class=\"dot1\"></div><div class=\"dot2\"></div></div>');\n if ($target.get(0).tagName === 'IMG') {\n $target.after($veil);\n $veil.css({ width: $target.width(), height: $target.height() });\n if ($target.parent().css('position') === 'static') {\n $target.parent().css('position', 'relative');\n }\n } else {\n $target.append($veil);\n if ($target.css('position') === 'static') {\n $target.parent().css('position', 'relative');\n $target.parent().addClass('veiled');\n }\n if ($target.get(0).tagName === 'BODY') {\n $veil.find('.spinner').css('position', 'fixed');\n }\n }\n $veil.click(function (e) {\n e.stopPropagation();\n });\n}\n\n/**\n * Remove existing spinner\n * @param {element} $veil - jQuery pointer to the veil element\n */\nfunction removeSpinner($veil) {\n if ($veil.parent().hasClass('veiled')) {\n $veil.parent().css('position', '');\n $veil.parent().removeClass('veiled');\n }\n $veil.off('click');\n $veil.remove();\n}\n\n// element level spinner:\n$.fn.spinner = function () {\n let $element = $(this);\n let Fn = function () {\n this.start = function () {\n if ($element.length) {\n // remove default spinner test IBT-1180\n // addSpinner($element);\n }\n };\n this.stop = function () {\n if ($element.length) {\n // remove default spinner test IBT-1180\n // let $veil = $('.veil');\n // removeSpinner($veil);\n }\n };\n };\n return new Fn();\n};\n\n// page-level spinner:\n$.spinner = function () {\n let Fn = function () {\n this.start = function () {\n // remove default spinner test IBT-1180\n // addSpinner($('body'));\n };\n this.stop = function () {\n // remove default spinner test IBT-1180\n // removeSpinner($('.veil'));\n };\n };\n return new Fn();\n};\n","'use strict';\n\nlet processInclude = require('core/util');\n\n$(document).ready(function () {\n const isMargiela = document.body.dataset.sitebrand === \"Margiela\";\n\n // MARG-841 MARG-774\n const selector = isMargiela\n ? '#login-page, #guest-login-page, #account-passwordreset, #account-setnewpassword, #account-passwordupdatejourneyfrompm, #account-passwordupdatejourneyfromcampaign, #login-show'\n : '#login-page, #guest-login-page';\n if ($(selector).length > 0) {\n processInclude(require('core/login/login'));\n }\n\n // MARG-772\n if (isMargiela) {\n const searchParams = new URLSearchParams(window.location.search);\n if (searchParams.has('password-reset-token')) {\n $.spinner().start();\n const result = $('<div></div>');\n const selector = '[data-option-modalopenid=\"new-password\"],[data-option-modalopenid=\"forgot-password\"]';\n result.load($('.mm-menu-logo > a').attr('href') + 'account-setnewpassword?'\n + $.param({ token: searchParams.get('password-reset-token'), journey: searchParams.get('journey') })\n + ' ' + selector, (response, status, xhr) => {\n $.spinner().stop();\n\n // console.log('status', status, 'xhr', xhr);\n // console.log('xhr.statusCode', xhr.statusCode, \"xhr.getResponseHeader('Location')\", xhr.getResponseHeader('Location'));\n \n if (status === 'error') return; // TODO\n\n if (xhr.statusCode === 302) {\n $.spinner().start();\n result.load(xhr.getResponseHeader('Location') + '?'\n + $.param({ journey: searchParams.get('journey') })\n + ' ' + selector, (response2, status2, xhr2) => {\n $.spinner().stop();\n\n // console.log('status2', status2, 'xhr2', xhr2);\n\n if (status === 'error') return; // TODO\n\n result.find(selector).attr({ 'data-option-immediate': 'true', 'data-option-delay': '10' });\n $(document.body).append(result); // .contents());\n processInclude(require('core/login/login'));\n });\n return;\n }\n\n result.find(selector).attr({ 'data-option-immediate': 'true', 'data-option-delay': '10' });\n $(document.body).append(result); // .contents());\n processInclude(require('core/login/login'));\n });\n }\n }\n});\n\n$(document).on('login-dropdown:openRemote login-modal:openRemote', function (e) {\n processInclude(require('core/login/login'));\n});\n","module.exports = function(module) {\n\tif (!module.webpackPolyfill) {\n\t\tmodule.deprecate = function() {};\n\t\tmodule.paths = [];\n\t\t// module.parent = undefined by default\n\t\tif (!module.children) module.children = [];\n\t\tObject.defineProperty(module, \"loaded\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.l;\n\t\t\t}\n\t\t});\n\t\tObject.defineProperty(module, \"id\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.i;\n\t\t\t}\n\t\t});\n\t\tmodule.webpackPolyfill = 1;\n\t}\n\treturn module;\n};\n","'use strict';\n\nconst addToCartValidation = require('../product/addToCartValidation');\nconst base = require('base/product/base');\nconst isMargiela = document.querySelector('body').classList.contains('Margiela');\nconst isJilSander = document.body.dataset.sitebrand === \"JilSander\";\nconst isMarni = document.body.dataset.sitebrand === \"Marni\";\nconst processInclude = require('core/util');\nlet customSelect;\n\n\n\n$(document).ready(function () {\n\n if(isMargiela) {\n processInclude(require('core/product/fitguide'));\n }\n\n if(isMarni) {\n customSelect = require('marni/components/customSelect').updateDisabledOptions();\n }\n\n if($('.product-notify .modal-content').length > 0) {\n const notify = processInclude(require('core/product/notifyWhenAvailable'));\n\n $('.notify-me-modal-button').on('click', function(e) {\n \n if(!isMargiela && ($(e.target).closest('form').find('.single-val-size.selected').length > 0 || $(e.target).closest('form').find('.notify-me-content-url').length > 0)) {\n let url = $(e.target).closest('form').find('.single-val-size.selected').data('notifyme-url');\n $(e.target).closest('form').find('.notify-me-content-url').length > 0 ? url = $(e.target).closest('form').find('.notify-me-content-url').data('notifyme-url') : '';\n $.ajax({\n url: url,\n method: 'GET',\n success: function (responseData) {\n const $container = $('.product-notify .modal-content');\n if ($container.length > 0) {\n $container.empty().append(responseData.notifyWhenAvailableHtml);\n }\n },\n error: function () {\n console.log('Error while getting notify content');\n },\n });\n }\n });\n\n }\n\n \n\n const userCustomerGroupsUrl = $('.private-sales').data('userCustomerGroupsUrl');\n if(userCustomerGroupsUrl) {\n $.ajax({\n url: userCustomerGroupsUrl,\n method: 'GET',\n success: function (responseData) {\n if (!responseData.error) {\n $('.private-sales').each(function() {\n checkPrivateSales($(this), responseData.isUserAuthenticated, responseData.customerGroups);\n });\n }\n },\n error: function () {\n console.log('Error while getting customer groups');\n },\n });\n }\n \n});\n\n/**\n * appends params to a url\n * @param {string} data - data returned from the server's ajax call\n * @param {Object} button - button that was clicked to add a product to the wishlist\n * @param {string} action - button that was clicked to add a product to the wishlist\n */\nfunction handleResponse(data, button, action = 'add') {\n $.spinner().stop();\n\n if (data.success) {\n showAriaHint(button,data.msg,action);\n\n const $quantity = $('.wishlist-quantity');\n (isMargiela ? $quantity : $('header .wishlist-quantity'))[data.listIsEmpty ? 'addClass' : 'removeClass']('d-none');\n\n if (action === 'remove') {\n button.removeClass('active');\n\n for (let i = 0; i < $quantity.length; i++) {\n $quantity[i].innerHTML = data.listIsEmpty ? 0 : parseInt($quantity[i].innerHTML, 10) - 1;\n }\n } else {\n button.addClass('active');\n\n for (let i = 0; i < $quantity.length; i++) {\n $quantity[i].innerHTML = parseInt($quantity[i].innerHTML, 10) + 1;\n }\n\n const modalpid = data.pid;\n $('.js_add-to-wish-list-cart[data-pid=\"' + modalpid + '\"]').addClass('active');\n $('body').trigger('product:afterAddToWishlist', this);\n }\n\n if (isMargiela && action !== 'remove') {\n const event = new CustomEvent('notification:show', {\n detail: {\n message: data.msg,\n icon: true,\n linkCart: false,\n linkWishlist: true\n }\n });\n document.body.dispatchEvent(event);\n }\n\n isMargiela && $('.js-button-wishlist')[data.listIsEmpty ? 'removeClass' : 'addClass']('-dot-info');\n }\n\n setTimeout(function () {\n button.removeClass('disabled-click');\n button.attr('tabindex' , 0);\n }, 5000);\n}\n\nfunction showAriaHint(button,message,action) {\n let nonvisualHint = button.next('.visually-hidden');\n $(nonvisualHint).text(message);\n if (action === 'add') {\n button.attr('aria-pressed', 'true');\n } else {\n button.attr('aria-pressed', 'false');\n }\n}\n\nfunction showErrorMessage(form, message) {\n const errorContainer = $(form).closest('.product-tile--wishlist').find('.invalid-feedback');\n $(errorContainer).html(message);\n const button = $(form).find('.add-to-cart--wishlist');\n $(button).addClass('disabled');\n $(button).prop('disabled', true);\n}\n\nfunction hideErrorMessage(form) {\n const errorContainer = $(form).closest('.product-tile--wishlist').find('.invalid-feedback');\n $(errorContainer).html('');\n const button = $(form).find('.add-to-cart--wishlist');\n $(button).removeClass('disabled');\n $(button).prop('disabled', false);\n}\n\nfunction addToCartFromWishlist(form, e) {\n const globalAddToCartURL = document.querySelector('input[name=\"global-add-to-cart-url\"]');\n const pidInput = form.getAttribute('data-pid');\n\n hideErrorMessage(form);\n if (globalAddToCartURL && pidInput) {\n $.ajax({\n url: globalAddToCartURL.value,\n method: 'POST',\n data: {\n quantity: 1,\n pid: pidInput,\n },\n success: function (responseData) {\n if (!responseData.error) {\n $('body').trigger('product:afterAddToCart', responseData); // eslint-disable-line no-undef\n $('.minicart-action').trigger('click');\n $('.js-quantity.quantity.counter').text(responseData.quantityTotal);\n \n if (isMargiela) {\n $('.js-button-minicart').addClass('-dot-info');\n $('.js-cart-header-numitems').text(responseData.quantityTotal).removeClass('d-none');\n document.body.dispatchEvent(new CustomEvent('notification:show', {\n detail: {\n message: responseData.message,\n icon: true,\n linkCart: true,\n linkWishlist: false\n }\n }));\n if ($('.cart-page').length > 0) {\n location.reload();\n }\n }\n if(isJilSander) {\n $('.js-cart-header-numitems').text(responseData.quantityTotal).removeClass('d-none');\n const removeItem = e.target && e.target.querySelector('.remove-from-wishlist');\n removeItem && removeItem.click();\n $(\".minicart\").trigger(\"count:update\", responseData);\n if(window.isMobile()) {\n document.body.dispatchEvent(new CustomEvent('notification:show', {\n detail: {\n message: responseData.message,\n icon: true,\n linkCart: true,\n linkWishlist: false\n }\n }));\n } else {\n $('.mini-cart-content, .minicart-backdrop').addClass('show');\n $('body').trigger('minicart:load');\n }\n $('.minicart-backdrop, .continue-shopping-btn').on('click', () => {\n $('.mini-cart-content, .minicart-backdrop').removeClass('show').hide();\n });\n }\n } else {\n if (responseData.privateSalesError) {\n const errorContainer = $(form).closest('.product-tile--wishlist').find('.invalid-feedback');\n $(errorContainer).html(responseData.message);\n if (window.isMobile()) {\n window.location.href = $('.private-sales').data('loginRedirectUrl');\n } else {\n if ($('#login-dropdown[data-remote-content]').data('remoteContent').indexOf('rurl') < 0) {\n $('#login-dropdown[data-remote-content]').attr('data-remote-content', $('#login-dropdown[data-remote-content]').data('remoteContent') + '?rurl=7');\n }\n $('.login-dropdown .js-dropdown-trigger').trigger('click');\n $('body').one('user:loggedIn', function(e) {\n e.preventDefault();\n $('form.private-sales-product button.add-to-cart').trigger('click');\n });\n $('html, body').animate({ scrollTop: 0, }, 500 );\n }\n } else {\n showErrorMessage(form, responseData.message);\n }\n }\n\n $.spinner().stop();\n },\n error: function () {\n $.spinner().stop();\n },\n });\n }\n}\n\nfunction populateTile(product, masterID, targetForm) {\n let productTile;\n if(!isMargiela && !isMarni){\n productTile = targetForm.closest(`.product[data-pid=\"${masterID}\"]`);\n } else {\n productTile = targetForm.closest(`.product-tile--wishlist[data-master-id=\"${masterID}\"]`).closest(`.product`);\n }\n const tileImage = productTile.querySelector('.tile-image');\n\n // MARG-661\n isMargiela && tileImage && tileImage.removeAttribute('srcset');\n\n tileImage && isMarni ? tileImage.setAttribute('src', product.swipeableImages.large[0].url) : tileImage.setAttribute('src', product.images.large[0].urlLarge);\n isMarni ? productTile.querySelector('.single-element-content-image').href = product.modelFabricColorProductURl : '';\n isMarni ? productTile.querySelector('.single-element-content-detail-description .product-link').href = product.modelFabricColorProductURl : '';\n isMarni && product.wishlistProductNameForTile ? productTile.querySelector('.single-element-content-detail-description .product-link').innerHTML = product.wishlistProductNameForTile : '';\n const tileBody = productTile.querySelector('.tile-body');\n const price = productTile.querySelector('.price');\n price && (isMargiela ? price.parentNode : price).remove();\n\n if (isMargiela) {\n const info = tileBody.querySelector('.mm-product-card__info__default');\n info.insertAdjacentHTML('beforeend', product.price.html);\n const price2 = info.querySelector('.price');\n price && price2 && price.querySelectorAll(':scope > :not(.default-price-container)').forEach(e => price2.append(e));\n } else if(isMarni) {\n product.variationGroupPrice && product.variationGroupPrice.html ? tileBody.insertAdjacentHTML('beforeend', product.variationGroupPrice.html) : tileBody.insertAdjacentHTML('beforeend', product.price.html);\n } else {\n tileBody.insertAdjacentHTML('beforeend', product.price.html);\n }\n\n [...productTile.querySelectorAll('[data-pid]')].forEach((item) => {\n item.setAttribute('data-pid', product.id);\n });\n product.variationAttributes.forEach((attribute) => {\n if (isMargiela && attribute.attributeId === 'color') {\n const colorsBox = productTile.querySelector('.colors-box');\n colorsBox.innerHTML = attribute.values.map(color => {\n // app_project_margiela/cartridge/templates/default/product/components/productTileColors.isml\n const code = color.HEXColor ? color.HEXColor.split('|') : [];\n const backgroudColor = code.length == 0 ? '' : code.length > 1 ? `background: linear-gradient(90deg, ${code[0]} 50%, ${code[1]} 50%)` : `background-color: ${code[0]}`;\n return `<li class=\"mm-color-swatch ${code.length > 1 ? 'doubled-color' : ''}\">\n <input\n type=\"radio\"\n name=\"dwvar_${masterID}_color\"\n data-name=\"variant_${color.displayValue}\"\n value=\"${color.value}\"\n data-display-value=\"${color.displayValue}\"\n ${color.selected ? 'checked' : ''}\n class=\"value-${color.id} mm-color-swatch__inner ${color.selected ? 'selected-color' : ''} ${code.length > 1 ? 'doubled-color' : ''} wishlist__select\"\n data-value-id=\"value-${color.id}\"\n style='${backgroudColor}'\n form=\"${targetForm.id}\" />\n <span class=\"visually-hidden\">${color.displayValue}</span>\n</li>`;\n }).join('');\n colorsBox.querySelectorAll('.wishlist__select').forEach(ws => ws.addEventListener('change', wishlistSelectChange));\n return;\n }\n const attributeSelect = productTile.querySelector(`[name=\"dwvar_${masterID}_${attribute.attributeId}\"]`);\n if (!attributeSelect) {\n return;\n }\n attributeSelect.innerHTML = isMarni && attributeSelect.options[0].value === '' ? attributeSelect.options[0].outerHTML : '';\n attribute.values.forEach((value) => {\n const option = `<option class=\"${!value.selectable && isMarni ? 'disabled' : ''}\" value=\"${value.value}\" ${value.selected ? 'selected' : ''}\n ${'data-attr-value=\"' + value.value + '\"'} ${!value.selectable && !isMargiela ? 'disabled' : ''}>\n ${value.displayValue}\n ${isMargiela && !value.selectable ? attributeSelect.dataset.notavailable : ''}\n</option>`;\n attributeSelect.insertAdjacentHTML('beforeend', option);\n });\n });\n\n\n if(isMarni) {\n customSelect = require('marni/components/customSelect').updateDisabledOptions();\n var privateSalesSpan = productTile.querySelector('span.private-sales');\n product.isPrivateSalesProduct ? $(privateSalesSpan).data('isPrivateSalesProduct', true) : $(privateSalesSpan).data('isPrivateSalesProduct', false);\n \n if(product.isPrivateSalesProduct) {\n const userCustomerGroupsUrl = $(privateSalesSpan).data('userCustomerGroupsUrl');\n $.ajax({\n url: userCustomerGroupsUrl,\n method: 'GET',\n success: function (responseData) {\n if (!responseData.error) {\n $('.private-sales').each(function() {\n checkPrivateSales($(this), responseData.isUserAuthenticated, responseData.customerGroups);\n });\n }\n },\n error: function () {\n console.log('Error while getting customer groups');\n },\n });\n } else {\n const addToCartText = $(privateSalesSpan).data('addToCartText');\n $(privateSalesSpan).parent().find('span.add-to-cart--wishlist-text').html(addToCartText);\n }\n }\n\n\n if (isMargiela) {\n const notifyAndAddToCart = productTile.querySelector('.add-to-cart-switch');\n productTile.querySelector('.notify-me-content-url') ? productTile.querySelector('.notify-me-content-url').remove() : '';\n if (product.available) {\n notifyAndAddToCart.classList.remove('show-notify-me');\n } else if (!product.available && product.showBackInStockNotification) {\n notifyAndAddToCart.classList.add('show-notify-me');\n }\n const $container = $('.product-notify .modal-content');\n if ($container.length > 0) {\n $container.empty().append(product.notifyWhenAvailableHtml);\n }\n\n var isSelectedSize = productTile.querySelector('.select-size').value ? true : false;\n\n productTile.querySelector('.add-to-cart-switch').classList.toggle('-active', isSelectedSize);\n productTile.querySelector('.size-switch').classList.toggle('-active', !isSelectedSize);\n\n } else {\n if (product.isOrderable) {\n productTile.querySelector('.add-to-cart--wishlist').removeAttribute('disabled');\n productTile.querySelector('.add-to-cart--wishlist').classList.remove('inactive-btn');\n } else {\n productTile.querySelector('.add-to-cart--wishlist').setAttribute('disabled', 'disabled');\n productTile.querySelector('.add-to-cart--wishlist').classList.add('inactive-btn');\n }\n }\n\n $.spinner().stop();\n}\n\nfunction bindAddToCart() {\n const wishlistItemAttributeSelect = [...document.querySelectorAll('.wishlist__select')];\n wishlistItemAttributeSelect.forEach((select) => {\n select.addEventListener('change', wishlistSelectChange);\n const options = [...select.querySelectorAll('option')];\n });\n\n const addToCartForm = [...document.querySelectorAll('form[name=\"add-to-cart-from-wishlist\"]')];\n addToCartForm.forEach((form) => {\n form.addEventListener('submit', (e) => {\n e.preventDefault();\n if (addToCartValidation($(form))) {\n addToCartFromWishlist(form, e);\n }\n });\n });\n}\n\nfunction wishlistSelectChange(e) {\n const target = e.currentTarget;\n const parentForm = target.form;\n $(e.target).parent().removeClass('invalid');\n hideErrorMessage(parentForm);\n \n if(isMarni) {\n $('select.select-color option').prop('disabled', false);\n if(!isMobile()) {\n const btnVal = $(e.target).parent().find('.fsb-select .fsb-button span').text();\n const ariaSelected = $(e.target).parent().find(\"span.fsb-list\").find(\"[aria-selected='true']\").attr('value');\n ariaSelected ? $(e.target).val(ariaSelected) : $(e.target).parent().find('.fsb-original-select option').filter(function() { return $.trim($(this).text()) == btnVal;}).prop('selected', true);\n }\n }\n\n if (parentForm.checkValidity()) {\n $.ajax({\n url: parentForm.getAttribute('action'),\n method: 'GET',\n data: $(parentForm).serialize(),\n beforeSend: () => {\n $.spinner().start();\n },\n success: function (responseData) {\n target.dispatchEvent(new Event('blur'));\n parentForm.setAttribute('data-pid', responseData.product.id);\n parentForm.querySelector('input[name=\"ean\"]').value = responseData.product.id;\n populateTile(responseData.product, parentForm.querySelector('input[name=\"pid\"]').value, parentForm);\n },\n error: function () {\n $.spinner().stop();\n },\n });\n }\n}\n\n/**\n * Decrease the number in the wishlist counter in header when an item is deleted,\n * or hide the wishlist icon if there are no more items after the deletion.\n */\nfunction decreaseWishlistCounter() {\n const $quantity = $('body').find('.wishlist-quantity');\n if (!$quantity.length) return;\n\n let qty = parseInt($quantity[0].innerHTML, 10);\n\n qty = qty > 1 ? qty - 1 : 0;\n for (let i = 0; i < $quantity.length; i++) {\n $quantity[i].innerHTML = qty;\n }\n \n if (isMargiela) {\n $('.js-button-wishlist')[qty > 0 ? 'addClass' : 'removeClass']('-dot-info');\n $quantity[qty > 0 ? 'removeClass' : 'addClass']('d-none');\n }\n}\n\n/**\n * @param {Object} $elementAppendTo - The element to append error html to\n * @param {string} msg - The error message\n * display error message if remove item from wishlist failed\n */\nfunction displayErrorMessage($elementAppendTo, msg) {\n if ($('.remove-from-wishlist-messages').length === 0) {\n $elementAppendTo.append('<div class=\"remove-from-wishlist-messages \"></div>');\n }\n\n $('.remove-from-wishlist-messages').append(\n '<div class=\"remove-from-wishlist-alert text-center alert-danger\">' + msg + '</div>'\n );\n\n setTimeout(function () {\n $('.remove-from-wishlist-messages').remove();\n }, 3000);\n}\n\n/**\n * renders the list up to a given page number\n * @param {number} pageNumber - current page number\n * @param {boolean} spinner - if the spinner has already started\n */\nfunction renderNewPageOfItems(pageNumber, spinner) {\n const publicView = $('.wishlistItemCardsData').data('public-view');\n const listUUID = $('.wishlistItemCardsData').data('uuid');\n const url = $('.wishlistItemCardsData').data('href');\n const account = $('.wishlistItemCardsData').data('account');\n\n if (spinner) {\n $.spinner().start();\n }\n\n const scrollPosition = document.documentElement.scrollTop;\n let newPageNumber = pageNumber;\n $.ajax({\n url: url,\n method: 'get',\n data: {\n pageNumber: ++newPageNumber,\n publicView: publicView,\n id: listUUID,\n account: account,\n },\n })\n .done(function (data) {\n $('.wishlistItemCards').empty();\n $('body .wishlistItemCards').replaceWith(data);\n bindAddToCart();\n document.documentElement.scrollTop = scrollPosition;\n if(document.querySelector('.mm-video-card:not(.observed)')) {\n $('body').trigger('wishlist:update-plp-cards');\n }\n if(isMarni) {\n loadScript('https://cdn.jsdelivr.net/gh/mdbassit/FancySelect@latest/dist/fancyselect.min.js');\n }\n \n })\n .fail(function () {\n $('.more-wl-items').remove();\n });\n $.spinner().stop();\n}\n\nfunction loadScript(url) {\n document.querySelector('script[src$=\"'+ url +'\"]') ? document.querySelector('script[src$=\"'+ url +'\"]').remove() : '' ;\n let script = document.createElement('script');\n script.src = url;\n document.body.appendChild(script);\n}\n\nfunction bindRemoveFromWishlist(){\n $('body').on('click', '.remove-from-wishlist', function (e) {\n e.preventDefault();\n const url = $(this).data('url');\n const elMyAccount = $('.account-wishlist-item').length;\n\n // If user is in my account page, call removeWishlistAccount() end point, re-render wishlist cards\n if (elMyAccount > 0) {\n $('.wishlist-account-card').spinner().start();\n $.ajax({\n url: url,\n type: 'post',\n dataType: 'html',\n data: {},\n success: function (html) {\n $('.wishlist-account-card>.card').remove();\n $('.wishlist-account-card').append(html);\n decreaseWishlistCounter();\n bindAddToCart();\n $('.wishlist-account-card').spinner().stop();\n },\n error: function () {\n const $elToAppend = $('.wishlist-account-card');\n $elToAppend.spinner().stop();\n const msg = $elToAppend.data('error-msg');\n displayErrorMessage($elToAppend, msg);\n },\n });\n // else user is in wishlist landing page, call removeProduct() end point, then remove this card\n } else {\n $.spinner().start();\n $.ajax({\n url: url,\n type: 'post',\n dataType: 'json',\n data: {},\n success: function () {\n decreaseWishlistCounter();\n const pageNumber = $('.wishlistItemCardsData').data('page-number') - 1;\n renderNewPageOfItems(pageNumber, false);\n const backToAccountLink = document.querySelector('.wishlist-page .back-to-account-link');\n const products = document.querySelectorAll('.wishlistItemCards ul li');\n if(isJilSander && backToAccountLink && (products && products.length === 1)) {\n backToAccountLink.classList.add('d-none');\n }\n },\n error: function () {\n $.spinner().stop();\n const $elToAppendWL = $('.wishlistItemCards');\n const msg = $elToAppendWL.data('error-msg');\n displayErrorMessage($elToAppendWL, msg);\n },\n });\n }\n });\n}\n\nfunction checkPrivateSales($privateSales, isUserAuthenticated, customerGroups) {\n const isPrivateSalesProduct = $privateSales.data('isPrivateSalesProduct');\n if (isPrivateSalesProduct) {\n const privateSalesCustomerGroups = $privateSales.data('privateSalesCustomerGroups');\n const privateSalesText = $privateSales.data('privateSalesText');\n const privateSalesTextLoggedIn = $privateSales.data('privateSalesTextLoggedIn');\n\n let isCustomerAllowed = false;\n for (const [productKey, productValue] of Object.entries(privateSalesCustomerGroups)) {\n for (const [customerKey, customerValue] of Object.entries(customerGroups)) {\n if (productValue === customerValue) {\n isCustomerAllowed = true;\n break;\n }\n }\n if (isCustomerAllowed) {\n break;\n }\n }\n\n if (!isCustomerAllowed) {\n if (!isUserAuthenticated) {\n $privateSales.closest('.form-add-to-cart-from-wishlist').addClass('private-sales-product');\n $privateSales.parent().find('span.add-to-cart--wishlist-text').html(privateSalesText);\n\n let loginRemoteContent = $('.login-dropdown [data-remote-content]');\n if (loginRemoteContent.data('remoteContent').indexOf('rurl') < 0) {\n loginRemoteContent.attr('data-remote-content', loginRemoteContent.data('remoteContent') + '?rurl=7');\n }\n } else {\n $privateSales.closest('.form-add-to-cart-from-wishlist').addClass('private-sales-product');\n $privateSales.parent().find('span.add-to-cart--wishlist-text').html(privateSalesTextLoggedIn);\n }\n }\n }\n}\n\nmodule.exports = {\n addToCartFromWishlist: () => {\n bindAddToCart();\n },\n bindCartRecommendations: function () {\n $('body').on('click', '.mm-button.cart-lineitem-recommendation', function(e) {\n var selector = '.' + e.currentTarget.dataset.actionPid;\n if ($(selector)[0].classList.contains('visually-hidden')) {\n $(selector)[0].classList.remove('visually-hidden');\n } else {\n $(selector)[0].classList.add('visually-hidden');\n }\n bindAddToCart();\n });\n },\n addToWishlist: function () {\n $(document).on('click', '.js_add-to-wish-list', function (e) {\n const isActiveWishList = e.currentTarget && e.currentTarget.classList.contains('active');\n if(!isJilSander || (isJilSander && !isActiveWishList)) {\n e.preventDefault();\n }\n const $button = $(this);\n const shouldValidate = $button.data('validateProduct');\n let url = $button.data('add');\n let action = 'add';\n const $alertContainer = $('.js_wishlist-alert-container');\n const $wrapperPdp = $('.product-detail.pdp-new .wrapper-pdp');\n\n function setWrapperStyles() {\n $wrapperPdp.css({\n 'overflow': 'visible',\n 'position': 'relative'\n });\n }\n\n function resetWrapperStyles() {\n $wrapperPdp.css({\n 'overflow': '',\n 'position': ''\n });\n }\n\n if ($button.hasClass('active')) {\n url = $button.data('remove');\n action = 'remove';\n \n if ($alertContainer.hasClass('fade-in')) {\n $alertContainer.addClass('fade-out').removeClass('fade-in');\n \n setTimeout(() => {\n $alertContainer.removeClass('fade-out');\n resetWrapperStyles();\n }, 300);\n }\n } else {\n $alertContainer.removeClass('fade-out').addClass('fade-in');\n setWrapperStyles();\n \n let dismissalTimeout = setTimeout(function () {\n $alertContainer.addClass('fade-out').removeClass('fade-in');\n setTimeout(() => {\n $alertContainer.removeClass('fade-out');\n resetWrapperStyles();\n }, 300);\n }, 3000);\n \n $alertContainer.on('mouseenter', function () {\n clearTimeout(dismissalTimeout);\n }).on('mouseleave', function () {\n dismissalTimeout = setTimeout(function () {\n $alertContainer.addClass('fade-out').removeClass('fade-in');\n setTimeout(() => {\n $alertContainer.removeClass('fade-out');\n resetWrapperStyles();\n }, 300);\n }, 3000);\n });\n }\n\n let $productContainer = $button.closest('.set-item');\n\n if (!$productContainer.length) {\n $productContainer = $button.closest('.product-detail');\n }\n\n if ($(this).parent().hasClass('sticky-button') && shouldValidate && addToCartValidation($productContainer) === false) {\n $('html, body').animate(\n {\n scrollTop: $('#sticky-error-scroll-to').offset().top,\n },\n 300\n );\n }\n\n if (shouldValidate && addToCartValidation($productContainer) === false) return;\n\n let pid = e.currentTarget.dataset.pid;\n\n // // Check if the product is a shop the look item\n // let isShopTheLookProduct = $button.closest('.product-detail').hasClass('stl-product-wrapper');\n\n // // Check if the product is a recommender item\n // let isShopTheLookRecommendation = $button.closest('.recommendations-tile').hasClass('stl-recommendation');\n\n // if (isShopTheLookRecommendation) {\n // pid = $button.closest('.recommendations-tile').find('.product').data('pid');\n // } else if (isShopTheLookProduct) {\n // pid = $button.data('pid');\n // } else if ($button.closest('#editWishlistProductModal').length > 0) {\n // pid = base.getPidValue($(this));\n // } else if ($button.closest('#editProductModal').length > 0) {\n // pid = this.dataset.pid;\n // } else if ($button.closest('.product-detail').find('.add-to-cart').length > 0 && $button.closest('.product-detail').find('.add-to-cart').attr('data-pid')) {\n // pid = $button.closest('.product-detail').find('.add-to-cart').attr('data-pid');\n // } else {\n // pid = $button.data('pid');\n // }\n\n let optionId = $button.closest('.product-detail').find('.product-option').attr('data-option-id');\n let optionVal = $button.closest('.product-detail').find('.options-select option:selected').attr('data-value-id');\n optionId = optionId || null;\n optionVal = optionVal || null;\n\n if (!url || !pid) {\n return;\n }\n\n $.spinner().start();\n const wishlistErrorMessage = document.querySelector('.wishlist-error-message');\n $button.addClass('disabled-click');\n $button.attr({'tabindex':-1, 'aria-pressed':true})\n\n const addToWishListError = $('.js-addtowishlist-error');\n const addToWishListErrorText = addToWishListError && addToWishListError.data('addtowishlist-alert');\n const addToWishListErrorMessage = $('.js-addtowishlist-error-message');\n \n if(isJilSander && addToWishListErrorText && addToWishListErrorMessage) {\n if ($('.selected-color').length>0 && $('.do_selectsize.selected').length>0) {\n addToWishListError.addClass('is-hidden');\n } else {\n addToWishListError.removeClass('is-hidden');\n addToWishListErrorMessage.empty().append(addToWishListErrorText);\n return;\n }\n }\n\n $.ajax({\n url: url,\n type: 'post',\n dataType: 'json',\n data: {\n pid: pid,\n optionId: optionId,\n optionVal: optionVal,\n },\n success: function (data) {\n handleResponse(data, $button, action);\n if (isMarni) {\n if (data.wishlistCountOfItems == 'wishlist.count') {\n $('.action.wishlist-icon-selector')[0].classList.remove('icon--heart-new');\n $('.action.wishlist-icon-selector')[0].classList.add('icon--heart-new-red');\n } else {\n $('.action.wishlist-icon-selector')[0].classList.remove('icon--heart-new-red');\n $('.action.wishlist-icon-selector')[0].classList.add('icon--heart-new');\n }\n }\n if(isJilSander && wishlistErrorMessage) {\n if(data.error) {\n wishlistErrorMessage.innerText = data.msg;\n wishlistErrorMessage.classList.remove('d-none');\n } else {\n !wishlistErrorMessage.classList.contains('d-none') && wishlistErrorMessage.classList.remove('d-none');\n }\n }\n if (isMargiela & $('#edit-product-modal.is-open').length > 0) {\n $('#edit-product-modal.is-open .add-to-wish-list-icon')[0].innerHTML = data.label;\n $('#edit-product-modal.is-open .add-to-wish-list-icon')[1].innerHTML = data.label;\n }\n },\n error: function (err) {\n handleResponse(err, $button, action);\n },\n });\n });\n\n $(document).on('click', '.js_add-to-wish-list-cart', function (e) {\n e.preventDefault();\n const $button = $(this);\n\n if ($button.hasClass('active')) {\n return;\n }\n\n const url = $button.data('href');\n const pid = $button.data('pid');\n\n if (!url || !pid) {\n return;\n }\n \n $.ajax({\n url: url,\n type: 'post',\n dataType: 'json',\n data: {\n pid: pid,\n },\n success: function (data) {\n $button.addClass('active');\n handleResponse(data, $button);\n },\n error: function (err) {\n handleResponse(err, $button);\n },\n });\n });\n },\n removeFromWishlist: function () {\n bindRemoveFromWishlist();\n },\n addAllToCart: function () {\n $('body').on('click', '.js_add-all-to-cart', function () {\n $('body').trigger('product:beforeAddToCart', this);\n const addToCartUrl = document.querySelector('input[name=\"global-add-to-cart-url\"]')\n ? document.querySelector('input[name=\"global-add-to-cart-url\"]').value\n : null;\n const pidsObj = [];\n [\n ...document.querySelectorAll(\n '.wishlistItemCards .product-grid-container .product-tile__actions form[name=\"add-to-cart-from-wishlist\"]'\n ),\n ].forEach((item) => {\n if (addToCartValidation($(item))) {\n if (item.querySelector('input[name=\"ean\"]') && !item.classList.contains('private-sales-product')) {\n const pid = item.querySelector('input[name=\"ean\"]').value;\n pidsObj.push({\n pid: pid,\n qty: 1,\n });\n }\n }\n });\n\n if (addToCartUrl && pidsObj.length > 0) {\n const form = {\n pidsObj: JSON.stringify(pidsObj),\n };\n\n $.ajax({\n url: addToCartUrl,\n method: 'POST',\n data: form,\n beforeSend: () => {\n $.spinner().start();\n },\n success: function (data) {\n let currentQty = 0;\n $('.js-quantity.quantity.counter').each(function(i,e){\n currentQty = parseInt($(e).text());\n });\n if (data.quantityTotal > currentQty) {\n // Tealium event \"Cart Add Full List\"\n data.addAllProductsFromWishList = true;\n $('body').trigger('product:afterAddToCart', data);\n $('.minicart-action').trigger('click');\n $('.js-quantity.quantity.counter').text(data.quantityTotal);\n }\n\n $.spinner().stop();\n },\n complete: function () {\n $.spinner().stop();\n },\n });\n }\n });\n },\n updateSelectAttr : function () {\n $('body').on('click', '.wishlist-container_select button.fsb-button' ,function(){\n if(isMarni) {\n customSelect = require('marni/components/customSelect').updateDisabledOptions();\n }\n })\n },\n};\n","'use strict';\n\nconst isMargiela = document.body.dataset.sitebrand === \"Margiela\";\n\n/**\n * Remove all validation. Should be called every time before revalidating form\n * @param {element} form - Form to be cleared\n * @returns {void}\n */\nfunction clearFormErrors(form) {\n $(form).find('.form-control.is-invalid').removeClass('is-invalid');\n}\n\nmodule.exports = function (formElement, payload) {\n // clear form validation first\n clearFormErrors(formElement);\n $('.alert', formElement).remove();\n\n if (typeof payload === 'object' && payload.fields) {\n Object.keys(payload.fields).forEach(function (key) {\n if (payload.fields[key]) {\n let feedbackElement = $(formElement)\n .find('[name=\"' + key + '\"]')\n .parent()\n .children('.invalid-feedback');\n\n if (feedbackElement.length > 0) {\n if (Array.isArray(payload[key])) {\n feedbackElement.html(payload.fields[key].join('<br/>'));\n } else {\n feedbackElement.html(payload.fields[key]);\n }\n feedbackElement.siblings('.form-control').addClass('is-invalid');\n }\n }\n });\n }\n if (payload && payload.error) {\n let form = $(formElement).prop('tagName') === 'FORM' ? $(formElement) : $(formElement).parents('form');\n const content = '<div class=\"alert alert-danger invalid-feedback\" role=\"alert\">' + payload.error.join('<br/>') + '</div>';\n if (isMargiela && form.attr('name') === 'login-form') {\n form.find('.remember-me-section').before(content);\n } else {\n form.prepend(content);\n }\n }\n};\n","'use strict';\n\nconst delimiter = ':';\nconst $body = $('body');\nconst $document = $(document);\n\n$document.ready(function(){\n $body.trigger('tealiumEvents:loaded');\n});\n\nfunction utagExists(){\n return typeof utag !== 'undefined';\n}\n\n/**\n* Gets a parameter from a link or from [window.location.href]\n*/\nfunction refreshCartData() {\n const url = window.sfcc_urls.refresh_utag_basket;\n\n if (window.location.href.indexOf('Order-ReturnConfirmation') > 0) {\n return;\n }\n\n $.ajax({\n url: url,\n method: 'GET',\n dataType: 'json',\n success: function(data) {\n copyResponseData(data);\n },\n error: function(err) {\n console.log('error refreshing utag', err);\n }\n });\n}\n\n/**\n* Gets a parameter from a link or from [window.location.href]\n* @param {string} paramName - the parameter name\n* @param {string} url - [window.location.href] or equivalent\n* @returns {string} the parameter value or [null]\n*/\nfunction getParameterByName(paramName, url = window.location.href) {\n const name = paramName.replace(/[[\\]]/g, '\\\\$&');\n const regex = new RegExp('[?&]' + name + '(=([^&#]*)|&|#|$)');\n const results = regex.exec(url);\n if (!results) return null;\n if (!results[2]) return '';\n return decodeURIComponent(results[2].replace(/\\+/g, ' '));\n}\n\n/**\n* Get selected variation value by variation id\n* @param {Object} variationAttributes - variation attributes model from backend\n* @param {string} id - variation id\n* @returns {string} the id of the variation value or empty string\n*/\nfunction getVariationValue(variationAttributes, id) {\n let result = '';\n\n if (variationAttributes instanceof Array) {\n const variation = variationAttributes.filter((i) => i.attributeId === id);\n\n if (variation && variation.length) {\n const selected = variation[0].values.filter((i) => i.selected === true);\n if (selected && selected.length) result = selected[0].id;\n }\n }\n\n return result;\n}\n\n/**\n* Use the existing data from the [utag_data] object to fill [utag.data] with product data on PDP\n*/\nfunction addProductData() {\n utag.data.page_type = 'product';\n utag.data.product_id = utag_data.product_id;\n utag.data.product_name = utag_data.product_name;\n utag.data.product_season = utag_data.product_season;\n utag.data.product_newin = utag_data.product_newin;\n utag.data.product_category = utag_data.product_category;\n utag.data.product_color = utag_data.product_color;\n utag.data.product_waist = utag_data.product_waist;\n utag.data.product_length = utag_data.product_length;\n utag.data.product_size = utag_data.product_size;\n utag.data.product_unit_price = utag_data.product_unit_price;\n utag.data.product_old_price = utag_data.product_old_price;\n utag.data.product_sale_price = utag_data.product_sale_price;\n utag.data.product_net_price = utag_data.product_net_price;\n}\n\n/**\n* Use the existing data from the [utag_data] object to fill [utag.data] with product data on Cart/Checkout\n*/\nfunction addCartData() {\n utag.data.page_type = 'checkout';\n utag.data.product_id = utag_data.product_id;\n utag.data.product_name = utag_data.product_name;\n utag.data.product_season = utag_data.product_season;\n utag.data.product_newin = utag_data.product_newin;\n utag.data.product_category = utag_data.product_category;\n utag.data.product_color = utag_data.product_color;\n utag.data.product_waist = utag_data.product_waist;\n utag.data.product_length = utag_data.product_length;\n utag.data.product_size = utag_data.product_size;\n utag.data.product_unit_price = utag_data.product_unit_price;\n utag.data.product_old_price = utag_data.product_old_price;\n utag.data.product_sale_price = utag_data.product_sale_price;\n utag.data.product_net_price = utag_data.product_net_price;\n utag.data.product_quantity = utag_data.product_quantity;\n utag.data.product_shipping_type = utag_data.product_shipping_type;\n utag.data.order_currency = utag_data.order_currency;\n\n if (utag_data.order_track_id) {\n utag.data.order_track_id = utag_data.order_track_id;\n }\n}\n\n/**\n * Copies the `utagData` object values to the current utag data object\n * @param {Object} response - the response object from the server that contains a `utagData` object\n */\nfunction copyResponseData(response) {\n if (!response) return;\n\n for (const key in response.utagData) { // eslint-disable-line no-restricted-syntax\n if (response.utagData.hasOwnProperty(key)) { // eslint-disable-line no-prototype-builtins\n utag.data[key] = response.utagData[key];\n }\n }\n}\n\nfunction concatUtagValues(nodeList, key){\n for (let i = 0; i < nodeList.length; i++) {\n var value = nodeList[i].value;\n var arrayValue = value.replaceAll('[','').replaceAll(']','').replaceAll(' ','').split(',');\n var original = utag.data[key];\n\n if(original) {\n let mergedArray = original.concat(arrayValue);\n mergedArray = mergedArray.filter((item,index) => {\n return (mergedArray.indexOf(item) == index);\n }); \n utag.data[key] = mergedArray;\n }\n }\n}\n\nfunction newsletterEventTrigger(gender) {\n\n if (!gender) gender = '';\n\n utag.data.page_type = 'newsletter';\n utag.data.page_name = utag_data.store_country + delimiter + 'myaccount' + delimiter + 'newsletter_subscription';\n utag.data.event_name = 'newsletter_subscription_' + gender;\n utag.link(utag.data);\n}\n\nmodule.exports = {\n loadMoreProduct: function(){\n $body.on('product:listing-show-more', function(){\n var utag_product_id = document.querySelectorAll('[name=\"utag_product_id\"]');\n \n concatUtagValues(utag_product_id, 'product_id');\n });\n },\n\n pageNewsletter: function() {\n $body.on('newsletter:submit', function() {\n if (typeof utag === 'undefined' || !utag) return;\n const $form = $('.page-newsletter .form-newsletter');\n \n $form.find('.gender-check:checked +.checkbox-label').text().trim();\n let genders = [];\n let gender;\n let isMultipleGender = false;\n document.querySelectorAll('.gender-check:checked + .checkbox-label').forEach(g => {\n genders.push(g.innerText);\n isMultipleGender = genders.length > 1;\n });\n gender = isMultipleGender ? 'Both' : genders[0];\n newsletterEventTrigger(gender);\n });\n },\n\n footerNewsletter: function() {\n $body.on('click', 'footer .form-newsletter [type=\"submit\"]', function() {\n if (typeof utag === 'undefined' || !utag) return;\n const $form = $('footer .form-newsletter');\n const gender = $form.find('[name=\"gender-radio\"]:checked').val(); \n newsletterEventTrigger(gender);\n });\n },\n\n video: function() {\n const $video = $('video');\n\n $video.on('pause', function() {\n if (typeof utag === 'undefined' || !utag) return;\n\n utag.data.video_title = $(this).find('source').attr('src');\n utag.data.video_time = this.currentTime;\n utag.data.event_name = 'video_pause';\n utag.track('video', utag.data);\n });\n\n $video.on('loadeddata', function() {\n if (typeof utag === 'undefined' || !utag) return;\n\n utag.data.video_title = $(this).find('source').attr('src');\n utag.data.video_time = this.duration;\n utag.data.event_name = 'video_open';\n utag.track('video', utag.data);\n });\n\n $video.on('play', function() {\n if (typeof utag === 'undefined' || !utag) return;\n\n utag.data.video_title = $(this).find('source').attr('src');\n utag.data.video_time = this.currentTime;\n\n if (this.currentTime > 0) {\n utag.data.event_name = 'video_play';\n } else {\n utag.data.event_name = 'video_start';\n }\n\n utag.track('video', utag.data);\n });\n },\n\n PLPUpdateData: function() {\n // Update data for future events\n $body.on('plp:plpPageLoad', function(e, response) {\n if (typeof utag === 'undefined' || !utag) return;\n\n\n\n var activePLP = 'old';\n\n if ($('.new-page-search-result').length > 0) {\n activePLP = 'new';\n }\n\n utag_data.active_plp = activePLP;\n });\n },\n\n PDPUpdateData: function() {\n // Update data for future events\n $body.on('product:afterAttributeSelect', function(e, response) {\n if (typeof utag === 'undefined' || !utag) return;\n\n\n\n var activePDP = 'old';\n\n if ($('.pdp-new').length > 0) {\n activePDP = 'new';\n }\n\n const product = response.data.product;\n utag_data.active_pdp = activePDP;\n utag_data.product_sku = [product.id];\n utag_data.product_color = [getVariationValue(product.variationAttributes, 'color')];\n utag_data.product_waist = [getVariationValue(product.variationAttributes, 'waist')];\n utag_data.product_length = [getVariationValue(product.variationAttributes, 'length')];\n utag_data.product_size = [getVariationValue(product.variationAttributes, 'size')];\n });\n },\n\n addToCart: function() {\n $body.on('product:afterAddToCart', function(e, response) {\n if (typeof utag === 'undefined' || !utag) return;\n\n addProductData();\n\n\n\n var activePDP = 'old';\n\n if ($('.pdp-new').length > 0) {\n activePDP = 'new';\n }\n utag_data.active_pdp = activePDP;\n\n if (utag_data.page_context_type === 'product') {\n utag.data.event_name = 'pdp_cart_add';\n } else if (response.addAllProductsFromWishList) {\n utag.data.event_name = 'cart_add_wishlist_full';\n } else if (utag_data.page_context_type === 'myaccount') {\n utag.data.event_name = 'cart_add_wishlist_prod';\n } else {\n utag.data.event_name = utag_data.page_type + 'pdp_cart_add';\n }\n\n utag.link(utag.data);\n });\n },\n\n backInStock: function() {\n $body.on('product:afterBackInStock', function() {\n if (typeof utag === 'undefined' || !utag) return;\n\n addProductData();\n var activePDP = 'old';\n\n if ($('.pdp-new').length > 0) {\n activePDP = 'new';\n }\n utag_data.active_pdp = activePDP;\n\n utag.data.event_name = 'pdp_backinstock';\n\n utag.link(utag.data);\n });\n },\n\n PDPAddToWishlist: function() {\n $body.on('product:afterAddToWishlist', function() {\n if (typeof utag === 'undefined' || !utag || !utag_data.page_context_type === 'product') return;\n\n addProductData();\n var activePDP = 'old';\n if (utag_data.page_context_type == \"product set\") {\n var productSetIDs = [''];\n for (i = 0 ; i < $('.product-set-item').length; i++) {\n if (i +1 < $('.product-set-item').length) {\n productSetIDs[0] += $('.product-set-item')[i].dataset.pid + ', ';\n } else {\n productSetIDs[0] += $('.product-set-item')[i].dataset.pid;\n }\n }\n utag.data.product_id = productSetIDs;\n utag.data.page_type = 'product set';\n }\n if ($('.pdp-new').length > 0) {\n activePDP = 'new';\n }\n utag_data.active_pdp = activePDP;\n utag.data.event_name = 'pdp_wishlist_add';\n utag.link(utag.data);\n });\n },\n\n storeLocatorFind: function() {\n $body.on('store:MyLocation', function() {\n if (typeof utag === 'undefined' || !utag) return;\n\n utag.data.page_type = 'store locator';\n utag.data.page_name = utag.data.page_name + ':my location';\n utag.data.event_name = 'storelocator_mylocation';\n utag.link(utag.data);\n });\n },\n\n storeLocatorMyLocation: function() {\n $body.on('store:Search', function() {\n if (typeof utag === 'undefined' || !utag) return;\n\n utag.data.page_type = 'store locator';\n utag.data.page_name = utag.data.page_name + ':search location';\n utag.data.event_name = 'storelocator_search';\n utag.link(utag.data);\n });\n },\n\n filters: function() {\n $document.on('appliedFilter', function(e) {\n\n var url;\n if (typeof utag === 'undefined' || !utag) {return;} \n \n if (typeof e.url !== 'undefined' && e.url) {\n url = e.url;\n };\n\n if (!url) {\n url = (e.detail && e.detail.url) ? e.detail.url : null; \n }\n\n if (!url){\n return;\n }\n\n const result = [];\n\n const pmin = getParameterByName('pmin', url);\n const pmax = getParameterByName('pmax', url);\n\n if (pmin && pmax) {\n result.push('price' + delimiter + pmin + ' to ' + pmax);\n }\n\n let i = 1;\n let name = getParameterByName('prefn' + i, url);\n let value;\n let subArray;\n\n while (name) {\n value = getParameterByName('prefv' + i, url);\n name = name.replace('refinement', '');\n\n if (value.indexOf('|') > -1) { // Multiple values for this preference\n subArray = value.split('|');\n\n for (let j = 0; j < subArray.length; j++) {\n result.push(name + delimiter + subArray[j]);\n }\n } else { // Single value for this preference\n result.push(name + delimiter + value);\n }\n\n i++;\n name = getParameterByName('prefn' + i, e.url);\n }\n\n if (result.length > 0) {\n utag.data.filter = result;\n utag.data.event_name = 'filter_usage';\n utag.link(utag.data);\n }\n });\n },\n\n checkoutStages: function() {\n $body.on('checkout:stageGoTo checkout:updatedCheckoutView', function() {\n if (typeof utag === 'undefined' || !utag) return;\n\n let step = '';\n const stage = $('#checkout-main').attr('data-checkout-stage');\n\n if (stage === 'shipping') {\n step = 'step1';\n } else if (stage === 'payment') {\n step = 'step2';\n } else if (stage === 'placeOrder') {\n step = 'step3';\n }\n\n utag.data.page_name = utag_data.page_name_onload.replace(/step\\d/gi, step);\n utag.link(utag.data);\n });\n },\n\n login: function() {\n $body.on('user:loggedIn', function() {\n if (typeof utag === 'undefined' || !utag) return;\n utag.data.event_name = 'login_ok';\n utag.link(utag.data);\n });\n },\n\n register: function() {\n $body.on('user:registered', function() {\n if (typeof utag === 'undefined' || !utag) return;\n\n utag.data.event_name = 'registration_ok';\n utag.link(utag.data);\n });\n },\n\n fastCheckout: function() {\n $body.on('checkout:fastCheckoutStart', function(event, cartType, buttonPosition) {\n if (typeof utag === 'undefined' || !utag) return;\n\n if(typeof cartType !== 'undefined' && typeof buttonPosition !== 'undefined') {\n utag.data.cart_type = cartType + ':' + buttonPosition;\n }\n utag.data.event_name = 'fastcheckout_start';\n utag.link(utag.data);\n });\n },\n\n cartModifyModalOpen: function() {\n $body.on('cart:modifyProductOpen', function() {\n if (typeof utag === 'undefined' || !utag) return;\n\n addCartData();\n utag.data.event_name = 'cart_prod_update_popup';\n utag.link(utag.data);\n });\n },\n\n cartModifyModalConfirm: function() {\n $body.on('cart:productModified', function(e, response) {\n if (typeof utag === 'undefined' || !utag) return;\n\n copyResponseData(response);\n\n utag.data.page_type = 'checkout';\n utag.data.event_name = 'cart_prod_update_confirm';\n utag.link(utag.data);\n\n refreshCartData();\n });\n },\n\n cartRemoveProduct: function() {\n $body.on('cart:productRemoved', function(e, response) {\n if (typeof utag === 'undefined' || !utag) return;\n\n copyResponseData(response);\n\n utag.data.page_type = 'checkout';\n utag.data.event_name = 'cart_prod_update';\n utag.link(utag.data);\n\n refreshCartData();\n });\n },\n\n cartMoveToPickup: function() {\n $body.on('cart:pickUpItem', function(e, response) {\n if (typeof utag === 'undefined' || !utag) return;\n\n copyResponseData(response);\n\n utag.data.page_type = 'checkout';\n utag.data.event_name = 'cart_moveto_pickup';\n utag.link(utag.data);\n\n refreshCartData();\n });\n },\n\n cartShipItem: function() {\n $body.on('cart:shipItem', function(e, response) {\n if (typeof utag === 'undefined' || !utag) return;\n\n copyResponseData(response);\n\n utag.data.page_type = 'checkout';\n utag.data.event_name = 'cart_moveto_shipping';\n utag.link(utag.data);\n\n refreshCartData();\n });\n },\n\n cartStoreDialogOpen: function() {\n $body.on('findInStore:open', function() {\n if (typeof utag === 'undefined' || !utag) return;\n if ($('.page').data('action') !== 'Cart-Show') return;\n\n addCartData();\n\n utag.data.page_type = 'checkout';\n utag.data.event_name = 'cart_store_detail_popup';\n utag.link(utag.data);\n });\n },\n\n cartStoreChanged: function() {\n $body.on('cart:storeChanged', function(e, response) {\n if (typeof utag === 'undefined' || !utag) return;\n\n copyResponseData(response);\n\n utag.data.page_type = 'checkout';\n utag.data.event_name = 'cart_store_detail_change';\n utag.link(utag.data);\n });\n },\n\n helpOrderDetails: function() {\n $body.on('help:orderDetailsOpened', function(e, response) {\n if (typeof utag === 'undefined' || !utag) return;\n\n copyResponseData(response);\n\n utag.data.page_name = `${utag.data.store_country}:order_track:detail ${utag.data.order_track_id}`;\n utag.data.page_type = 'order track';\n utag.view(utag.data);\n });\n },\n\n createReturnSteps: function() {\n $body.on('order:createReturn:step2', function() {\n if (typeof utag === 'undefined' || !utag) return;\n\n addCartData();\n\n utag.data.page_name = `${utag.data.store_country}:order_track:return_exchange:step2`;\n utag.data.page_type = 'return-exchange funnel';\n utag.data.event_name = 'return_exchange:step2';\n utag.view(utag.data);\n });\n $body.on('order:createReturn:step3', function(e, params) {\n if (typeof utag === 'undefined' || !utag) return;\n\n addCartData();\n \n utag.data.product_return_type = params.types;\n\n utag.data.page_name = `${utag.data.store_country}:order_track:return_exchange:step3`;\n utag.data.page_type = 'return-exchange funnel';\n utag.data.event_name = 'return_exchange:step3';\n utag.view(utag.data);\n });\n $body.on('order:createReturn:thank-you', function(e, params) {\n if (typeof utag === 'undefined' || !utag) return;\n\n addCartData();\n utag.data.product_return_type = params.types;\n\n if (!utag.data.order_track_id){\n let searchParams = (new URL(document.location)).searchParams;\n let orderID = searchParams.get('orderID');\n utag.data.order_track_id = orderID;\n }\n\n utag.data.page_name = `${utag.data.store_country}:order_track:return_exchange:thank you`;\n utag.data.page_type = 'return-exchange funnel';\n utag.data.event_name = 'return_exchange:thank you';\n });\n },\n\n /**\n * Method to track events and collect information about customers\n */\n updateCustomerAttributes: function() {\n if (utagExists()) {\n $body.on('customer:updateAttributes', function() {\n const url = $('.get-customer-profile-url').attr('data-get-customer-profile');\n\n if (url) {\n $.ajax({\n url: url,\n method: 'GET',\n success: function(data) {\n if (typeof utag === 'undefined' || !utag || !data.success) return;\n\n for (const key in data.customerProfileAttributes) {\n if (data.customerProfileAttributes.hasOwnProperty(key)) {\n utag.data[key] = data.customerProfileAttributes[key];\n }\n }\n\n utag.link(utag.data);\n $body.trigger('datalayer:redirectUrl');\n },\n error: function(data) {\n console.error(data);\n }\n });\n }\n });\n }\n },\n /**\n * Method to track events and collect information about cart and wishlist\n */\n updateCartAndWishlist: function() {\n if (utagExists()) {\n $(document).ready(function() {\n /* Persist wishlist variable */\n\n var url = $('.get-datalayer-wishlist-url').attr('data-datalayer-wishlist');\n\n if (url) {\n $.ajax({\n url: url,\n method: 'GET',\n success: function(data) {\n var persist_wishlist = {\n item: data.item,\n total_with_vat: data.total_with_vat,\n currency: data.currency\n };\n utag.data['persist_wishlist'] = persist_wishlist;\n },\n error: function(data) {\n console.error(data);\n }\n });\n }\n\n /* Persist cart variable */\n url = $('.get-datalayer-cart-url').attr('data-datalayer-cart');\n\n if (url) {\n $.ajax({\n url: url,\n method: 'GET',\n success: function(data) {\n var persist_cart = {\n item: data.item,\n total_without_vat: data.total_without_vat,\n total_with_vat: data.total_with_vat,\n currency: data.currency\n };\n utag.data['persist_cart'] = persist_cart;\n\n jQuery('body').trigger('cart_wishlist_updated');\n\n },\n error: function(data) {\n console.error(data);\n }\n });\n }\n });\n }\n },\n\n setListViewType: function() {\n $(\".js-change-view-toggle\").click(function() {\n let viewType = $(\".js-change-view-toggle.active\").attr('data-layout');\n\n if (viewType == 'single') {\n utag.data.list_view_type = 'outfit view';\n } else {\n utag.data.list_view_type = 'product view';\n }\n utag.link(utag.data);\n });\n },\n\n\n searchOpen: function() {\n $body.on('search:open', function() {\n if (utagExists()) {\n utag.data.page_name = utag.data.store_country + ':search:open';\n // utag.data.page_type = 'search';\n // utag.data.event_name = 'search_open';\n // utag.link(utag.data);\n let page_name = utag.data.store_country + ':search:open';\n \n utag.view({\n 'page_name' : page_name,\n 'view_name': utag.data.store_country + ':search:open',\n 'page_type' : 'search',\n \"tealium_event\" : 'search',\n 'event_name' : 'search_open',\n 'event_category' : 'searchOpen',\n 'event_action' : 'click'\n });\n }\n });\n },\n\n\n searchTypeKeyword: function() {\n $body.on('search:searchKeyword', function(e, response) {\n if (utagExists()) {\n let names = [];\n let skus = [];\n for (let i = 0; i < response.suggestions.length; i++) {\n if (response.suggestions[i].dataset.productName) {\n names.push(response.suggestions[i].dataset.productName);\n }\n if (response.suggestions[i].dataset.pid) {\n skus.push(response.suggestions[i].dataset.pid);\n }\n }\n if (typeof utag === 'undefined' || !utag) return;\n utag.data.page_name = `${utag.data.store_country}:search:inline result`;\n // utag.data.page_type = 'search';\n // utag.data.search_results = response.suggestions.length;\n // utag.data.search_term = $('.search-field').val();\n // utag.data.product_impression_name = names.toString();\n // utag.data.product_impression_sku = skus.toString();\n // utag.data.event_name = 'search_inline';\n // utag.view(utag.data);\n\n\n utag.view({\n 'page_name' : utag.data.store_country + ':search:inline result',\n 'view_name': utag.data.store_country + ':search:inline result',\n 'page_type' : 'search',\n \"tealium_event\" : 'search',\n 'search_results' : response.suggestions.length,\n 'search_term' : $('.search-field').val(),\n 'product_name' : names,\n 'product_sku' : skus,\n 'event_name' : 'search_inline',\n 'event_category' : 'searchInline',\n 'event_action' : 'typeKeywords'\n });\n }\n });\n },\n\n searchProductClick: function() {\n $body.on('click', '.search-suggestion-list-item', function(e) {\n if (utagExists()) {\n utag.data.page_name = `${utag.data.store_country}:search:inline result`;\n // utag.data.page_type = 'search';\n // utag.data.search_term = $('.search-field').val();\n // utag.data.search_result_type = e.currentTarget.dataset.type;\n // utag.data.search_result_value = e.currentTarget.ariaLabel;\n // utag.data.product_impression_name = e.currentTarget.ariaLabel;\n // utag.data.product_impression_sku = e.currentTarget.dataset.pid;\n // utag.data.event_name = 'search_inline_click';\n // utag.view(utag.data);\n let page_name = utag.data.store_country + ':search:inline result';\n let name = [e.currentTarget.ariaLabel];\n let sku = [e.currentTarget.dataset.pid];\n\n\n utag.view({\n 'page_name' : page_name,\n 'view_name': utag.data.store_country + ':search:inline result',\n \"tealium_event\" : 'search',\n 'page_type' : 'search',\n 'search_term' : $('.search-field').val(),\n 'search_result_type' : e.currentTarget.dataset.type,\n 'search_result_value' : e.currentTarget.ariaLabel,\n 'product_name' : name,\n 'product_sku' : sku,\n 'event_name' : 'search_inline_click',\n 'event_category' : 'searchInlineClick',\n 'event_action' : 'searchClick'\n });\n }\n });\n },\n\n\n searchSend: function() {\n $body.on('search:send', function() {\n if (utagExists()) {\n utag.view({\n 'page_name' : utag.data.store_country + ':search send',\n 'page_section' : 'search',\n 'page_type' : 'search',\n 'search_term' : $('.search-field').val(),\n 'event_name' : 'search_ok',\n });\n utag.link(utag.data);\n }\n });\n },\n\n searchResultsPage: function() {\n if (utagExists()) {\n $body.on('search:searchResultsPage', function() {\n let names = [];\n let skus = [];\n let product = $('.product');\n for (let i = 0; i < product.length; i++) {\n if (product[i].dataset.productName) {\n names.push(product[i].dataset.productName);\n }\n if (product[i].dataset.pid) {\n skus.push(product[i].dataset.pid);\n }\n }\n utag.data.page_name = utag.data.store_country + ':search';\n // utag.data.page_type = 'search';\n // utag.data.list_view_type = 'product view';\n // utag.data.product_impression_name = names.toString();\n // utag.data.product_impression_sku = skus.toString();\n\n\n utag.view({\n 'page_name' : utag.data.store_country + ':search',\n 'view_name': utag.data.store_country + ':search', \n \"tealium_event\" : 'search',\n 'page_type' : 'search',\n 'list_view_type' : 'product view',\n 'search_term' : $('.search-field').val(),\n 'product_name' : names,\n 'product_sku' : skus,\n 'event_name' : 'search_results_page',\n 'event_category' : 'searchResults',\n 'event_action' : 'resultsLoad'\n });\n });\n }\n }\n};\n","\nif ($('.notificationSwiper')) {\n var swiper = new Swiper(\".notificationSwiper\", {\n cssMode: false,\n navigation: {\n nextEl: \".swiper-button-next\",\n prevEl: \".swiper-button-prev\",\n },\n pagination: {\n el: \".swiper-pagination-banner\",\n },\n mousewheel: true,\n keyboard: true,\n });\n}\n","'use strict';\n\nmodule.exports = {\n setTabNextFocus: function (focusParams) {\n var KEYCODE_TAB = 9;\n var isTabPressed = (focusParams.event.key === 'Tab' || focusParams.event.keyCode === KEYCODE_TAB);\n\n if (!isTabPressed) {\n return;\n }\n\n var firstFocusableEl = $(focusParams.containerSelector + ' ' + focusParams.firstElementSelector);\n var lastFocusableEl = $(focusParams.containerSelector + ' ' + focusParams.lastElementSelector);\n\n if ($(focusParams.containerSelector + ' ' + focusParams.lastElementSelector).is(':disabled')) {\n lastFocusableEl = $(focusParams.containerSelector + ' ' + focusParams.nextToLastElementSelector);\n if ($('.product-quickview.product-set').length > 0) {\n var linkElements = $(focusParams.containerSelector + ' a#fa-link.share-icons');\n lastFocusableEl = linkElements[linkElements.length - 1];\n }\n }\n\n if (focusParams.event.shiftKey) /* shift + tab */ {\n if ($(':focus').is(firstFocusableEl)) {\n lastFocusableEl.focus();\n focusParams.event.preventDefault();\n }\n } else /* tab */ {\n if ($(':focus').is(lastFocusableEl)) { // eslint-disable-line\n firstFocusableEl.focus();\n focusParams.event.preventDefault();\n }\n }\n }\n};\n","function countries(value) {\n var continents = {'europe': 0, 'asia': 0, 'america': 0, 'africa': 0, 'oceania': 0, 'worldwide': 0};\n // Declare variables\n var input, filter, ul, li, a, i, txtValue;\n input = document.getElementById('search-countries');\n filter = input.value.toUpperCase();\n ul = document.getElementById(\"country-list-wrapper\");\n li = ul.getElementsByTagName('li');\n\n // Loop through all list items, and hide those who don't match the search query\n for (i = 0; i < li.length; i++) {\n if (value && filter != '') {\n a = li[i];\n txtValue = a.textContent || a.innerText;\n if (txtValue.toUpperCase().indexOf(filter) > -1 && txtValue.toUpperCase().charAt(txtValue.toUpperCase().indexOf(filter) - 1) == ' ') {\n var parent = li[i].parentElement.parentElement.id;\n ++continents[parent];\n li[i].style.display = \"\";\n } else {\n li[i].style.display = \"none\";\n }\n } else {\n li[i].style.display = \"\";\n }\n }\n\n var continentsAvailable = ['europe', 'asia', 'america', 'africa', 'oceania', 'worldwide'];\n continentsAvailable.forEach( name => {\n if ($('#' + name)[0]) {\n if (continents[name] > 0 && filter != '') {\n $('#' + name)[0].classList.add('is-active');\n $('#' + name)[0].classList.add('is-visible');\n } else {\n $('#' + name)[0].classList.remove('is-active');\n $('#' + name)[0].classList.remove('is-visible');\n }\n }\n });\n}\n\n// clear country search\n$('body').on('click', '.js-country-clear', function(){\n $('#search-countries')[0].value = '';\n var value = false;\n var accordionItems = $('.accordion-group-list-item');\n countries(value);\n for (i = 0; i < accordionItems.length; i++) {\n accordionItems[i].classList.remove('is-active');\n accordionItems[i].classList.remove('is-visible');\n }\n});\n\n$('body').on('keyup change', '.search-countries', function (){\n var value = true;\n countries(value);\n});\n","const showPasswordButtons = document.querySelectorAll('.toggle-password.js-toggle-password');\n\nconst preventDefaultBehavior = (elements) => elements.forEach(el => el.addEventListener('click', (e) => e.preventDefault()));\n\nconst showFloatingLabelBehavior = () => {\n const formInputFields = document.querySelectorAll('.mm-form-input.-floating-label input:not(:placeholder-shown)');\n formInputFields.forEach((formInput) => {\n if(formInput) {\n formInput.classList.add('valid-input');\n }\n });\n}\n\npreventDefaultBehavior(showPasswordButtons);\n\nshowFloatingLabelBehavior();\n","/**\n * Swiper 8.1.4\n * Most modern mobile touch slider and framework with hardware accelerated transitions\n * https://swiperjs.com\n *\n * Copyright 2014-2022 Vladimir Kharlampidi\n *\n * Released under the MIT License\n *\n * Released on: April 24, 2022\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 = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Swiper = factory());\n})(this, (function () { 'use strict';\n\n /**\n * SSR Window 4.0.2\n * Better handling for window object in SSR environment\n * https://github.com/nolimits4web/ssr-window\n *\n * Copyright 2021, Vladimir Kharlampidi\n *\n * Licensed under MIT\n *\n * Released on: December 13, 2021\n */\n\n /* eslint-disable no-param-reassign */\n function isObject$1(obj) {\n return obj !== null && typeof obj === 'object' && 'constructor' in obj && obj.constructor === Object;\n }\n\n function extend$1(target, src) {\n if (target === void 0) {\n target = {};\n }\n\n if (src === void 0) {\n src = {};\n }\n\n Object.keys(src).forEach(key => {\n if (typeof target[key] === 'undefined') target[key] = src[key];else if (isObject$1(src[key]) && isObject$1(target[key]) && Object.keys(src[key]).length > 0) {\n extend$1(target[key], src[key]);\n }\n });\n }\n\n const ssrDocument = {\n body: {},\n\n addEventListener() {},\n\n removeEventListener() {},\n\n activeElement: {\n blur() {},\n\n nodeName: ''\n },\n\n querySelector() {\n return null;\n },\n\n querySelectorAll() {\n return [];\n },\n\n getElementById() {\n return null;\n },\n\n createEvent() {\n return {\n initEvent() {}\n\n };\n },\n\n createElement() {\n return {\n children: [],\n childNodes: [],\n style: {},\n\n setAttribute() {},\n\n getElementsByTagName() {\n return [];\n }\n\n };\n },\n\n createElementNS() {\n return {};\n },\n\n importNode() {\n return null;\n },\n\n location: {\n hash: '',\n host: '',\n hostname: '',\n href: '',\n origin: '',\n pathname: '',\n protocol: '',\n search: ''\n }\n };\n\n function getDocument() {\n const doc = typeof document !== 'undefined' ? document : {};\n extend$1(doc, ssrDocument);\n return doc;\n }\n\n const ssrWindow = {\n document: ssrDocument,\n navigator: {\n userAgent: ''\n },\n location: {\n hash: '',\n host: '',\n hostname: '',\n href: '',\n origin: '',\n pathname: '',\n protocol: '',\n search: ''\n },\n history: {\n replaceState() {},\n\n pushState() {},\n\n go() {},\n\n back() {}\n\n },\n CustomEvent: function CustomEvent() {\n return this;\n },\n\n addEventListener() {},\n\n removeEventListener() {},\n\n getComputedStyle() {\n return {\n getPropertyValue() {\n return '';\n }\n\n };\n },\n\n Image() {},\n\n Date() {},\n\n screen: {},\n\n setTimeout() {},\n\n clearTimeout() {},\n\n matchMedia() {\n return {};\n },\n\n requestAnimationFrame(callback) {\n if (typeof setTimeout === 'undefined') {\n callback();\n return null;\n }\n\n return setTimeout(callback, 0);\n },\n\n cancelAnimationFrame(id) {\n if (typeof setTimeout === 'undefined') {\n return;\n }\n\n clearTimeout(id);\n }\n\n };\n\n function getWindow() {\n const win = typeof window !== 'undefined' ? window : {};\n extend$1(win, ssrWindow);\n return win;\n }\n\n /**\n * Dom7 4.0.4\n * Minimalistic JavaScript library for DOM manipulation, with a jQuery-compatible API\n * https://framework7.io/docs/dom7.html\n *\n * Copyright 2022, Vladimir Kharlampidi\n *\n * Licensed under MIT\n *\n * Released on: January 11, 2022\n */\n /* eslint-disable no-proto */\n\n function makeReactive(obj) {\n const proto = obj.__proto__;\n Object.defineProperty(obj, '__proto__', {\n get() {\n return proto;\n },\n\n set(value) {\n proto.__proto__ = value;\n }\n\n });\n }\n\n class Dom7 extends Array {\n constructor(items) {\n if (typeof items === 'number') {\n super(items);\n } else {\n super(...(items || []));\n makeReactive(this);\n }\n }\n\n }\n\n function arrayFlat(arr) {\n if (arr === void 0) {\n arr = [];\n }\n\n const res = [];\n arr.forEach(el => {\n if (Array.isArray(el)) {\n res.push(...arrayFlat(el));\n } else {\n res.push(el);\n }\n });\n return res;\n }\n\n function arrayFilter(arr, callback) {\n return Array.prototype.filter.call(arr, callback);\n }\n\n function arrayUnique(arr) {\n const uniqueArray = [];\n\n for (let i = 0; i < arr.length; i += 1) {\n if (uniqueArray.indexOf(arr[i]) === -1) uniqueArray.push(arr[i]);\n }\n\n return uniqueArray;\n }\n\n\n function qsa(selector, context) {\n if (typeof selector !== 'string') {\n return [selector];\n }\n\n const a = [];\n const res = context.querySelectorAll(selector);\n\n for (let i = 0; i < res.length; i += 1) {\n a.push(res[i]);\n }\n\n return a;\n }\n\n function $(selector, context) {\n const window = getWindow();\n const document = getDocument();\n let arr = [];\n\n if (!context && selector instanceof Dom7) {\n return selector;\n }\n\n if (!selector) {\n return new Dom7(arr);\n }\n\n if (typeof selector === 'string') {\n const html = selector.trim();\n\n if (html.indexOf('<') >= 0 && html.indexOf('>') >= 0) {\n let toCreate = 'div';\n if (html.indexOf('<li') === 0) toCreate = 'ul';\n if (html.indexOf('<tr') === 0) toCreate = 'tbody';\n if (html.indexOf('<td') === 0 || html.indexOf('<th') === 0) toCreate = 'tr';\n if (html.indexOf('<tbody') === 0) toCreate = 'table';\n if (html.indexOf('<option') === 0) toCreate = 'select';\n const tempParent = document.createElement(toCreate);\n tempParent.innerHTML = html;\n\n for (let i = 0; i < tempParent.childNodes.length; i += 1) {\n arr.push(tempParent.childNodes[i]);\n }\n } else {\n arr = qsa(selector.trim(), context || document);\n } // arr = qsa(selector, document);\n\n } else if (selector.nodeType || selector === window || selector === document) {\n arr.push(selector);\n } else if (Array.isArray(selector)) {\n if (selector instanceof Dom7) return selector;\n arr = selector;\n }\n\n return new Dom7(arrayUnique(arr));\n }\n\n $.fn = Dom7.prototype; // eslint-disable-next-line\n\n function addClass() {\n for (var _len = arguments.length, classes = new Array(_len), _key = 0; _key < _len; _key++) {\n classes[_key] = arguments[_key];\n }\n\n const classNames = arrayFlat(classes.map(c => c.split(' ')));\n this.forEach(el => {\n el.classList.add(...classNames);\n });\n return this;\n }\n\n function removeClass() {\n for (var _len2 = arguments.length, classes = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n classes[_key2] = arguments[_key2];\n }\n\n const classNames = arrayFlat(classes.map(c => c.split(' ')));\n this.forEach(el => {\n el.classList.remove(...classNames);\n });\n return this;\n }\n\n function toggleClass() {\n for (var _len3 = arguments.length, classes = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n classes[_key3] = arguments[_key3];\n }\n\n const classNames = arrayFlat(classes.map(c => c.split(' ')));\n this.forEach(el => {\n classNames.forEach(className => {\n el.classList.toggle(className);\n });\n });\n }\n\n function hasClass() {\n for (var _len4 = arguments.length, classes = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {\n classes[_key4] = arguments[_key4];\n }\n\n const classNames = arrayFlat(classes.map(c => c.split(' ')));\n return arrayFilter(this, el => {\n return classNames.filter(className => el.classList.contains(className)).length > 0;\n }).length > 0;\n }\n\n function attr(attrs, value) {\n if (arguments.length === 1 && typeof attrs === 'string') {\n // Get attr\n if (this[0]) return this[0].getAttribute(attrs);\n return undefined;\n } // Set attrs\n\n\n for (let i = 0; i < this.length; i += 1) {\n if (arguments.length === 2) {\n // String\n this[i].setAttribute(attrs, value);\n } else {\n // Object\n for (const attrName in attrs) {\n this[i][attrName] = attrs[attrName];\n this[i].setAttribute(attrName, attrs[attrName]);\n }\n }\n }\n\n return this;\n }\n\n function removeAttr(attr) {\n for (let i = 0; i < this.length; i += 1) {\n this[i].removeAttribute(attr);\n }\n\n return this;\n }\n\n function transform(transform) {\n for (let i = 0; i < this.length; i += 1) {\n this[i].style.transform = transform;\n }\n\n return this;\n }\n\n function transition$1(duration) {\n for (let i = 0; i < this.length; i += 1) {\n this[i].style.transitionDuration = typeof duration !== 'string' ? `${duration}ms` : duration;\n }\n\n return this;\n }\n\n function on() {\n for (var _len5 = arguments.length, args = new Array(_len5), _key5 = 0; _key5 < _len5; _key5++) {\n args[_key5] = arguments[_key5];\n }\n\n let [eventType, targetSelector, listener, capture] = args;\n\n if (typeof args[1] === 'function') {\n [eventType, listener, capture] = args;\n targetSelector = undefined;\n }\n\n if (!capture) capture = false;\n\n function handleLiveEvent(e) {\n const target = e.target;\n if (!target) return;\n const eventData = e.target.dom7EventData || [];\n\n if (eventData.indexOf(e) < 0) {\n eventData.unshift(e);\n }\n\n if ($(target).is(targetSelector)) listener.apply(target, eventData);else {\n const parents = $(target).parents(); // eslint-disable-line\n\n for (let k = 0; k < parents.length; k += 1) {\n if ($(parents[k]).is(targetSelector)) listener.apply(parents[k], eventData);\n }\n }\n }\n\n function handleEvent(e) {\n const eventData = e && e.target ? e.target.dom7EventData || [] : [];\n\n if (eventData.indexOf(e) < 0) {\n eventData.unshift(e);\n }\n\n listener.apply(this, eventData);\n }\n\n const events = eventType.split(' ');\n let j;\n\n for (let i = 0; i < this.length; i += 1) {\n const el = this[i];\n\n if (!targetSelector) {\n for (j = 0; j < events.length; j += 1) {\n const event = events[j];\n if (!el.dom7Listeners) el.dom7Listeners = {};\n if (!el.dom7Listeners[event]) el.dom7Listeners[event] = [];\n el.dom7Listeners[event].push({\n 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 const event = events[j];\n if (!el.dom7LiveListeners) el.dom7LiveListeners = {};\n if (!el.dom7LiveListeners[event]) el.dom7LiveListeners[event] = [];\n el.dom7LiveListeners[event].push({\n listener,\n proxyListener: handleLiveEvent\n });\n el.addEventListener(event, handleLiveEvent, capture);\n }\n }\n }\n\n return this;\n }\n\n function off() {\n for (var _len6 = arguments.length, args = new Array(_len6), _key6 = 0; _key6 < _len6; _key6++) {\n args[_key6] = arguments[_key6];\n }\n\n let [eventType, targetSelector, listener, capture] = args;\n\n if (typeof args[1] === 'function') {\n [eventType, listener, capture] = args;\n targetSelector = undefined;\n }\n\n if (!capture) capture = false;\n const events = eventType.split(' ');\n\n for (let i = 0; i < events.length; i += 1) {\n const event = events[i];\n\n for (let j = 0; j < this.length; j += 1) {\n const el = this[j];\n let handlers;\n\n if (!targetSelector && el.dom7Listeners) {\n handlers = el.dom7Listeners[event];\n } else if (targetSelector && el.dom7LiveListeners) {\n handlers = el.dom7LiveListeners[event];\n }\n\n if (handlers && handlers.length) {\n for (let k = handlers.length - 1; k >= 0; k -= 1) {\n const handler = handlers[k];\n\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\n return this;\n }\n\n function trigger() {\n const window = getWindow();\n\n for (var _len9 = arguments.length, args = new Array(_len9), _key9 = 0; _key9 < _len9; _key9++) {\n args[_key9] = arguments[_key9];\n }\n\n const events = args[0].split(' ');\n const eventData = args[1];\n\n for (let i = 0; i < events.length; i += 1) {\n const event = events[i];\n\n for (let j = 0; j < this.length; j += 1) {\n const el = this[j];\n\n if (window.CustomEvent) {\n const evt = new window.CustomEvent(event, {\n detail: eventData,\n bubbles: true,\n cancelable: true\n });\n el.dom7EventData = args.filter((data, dataIndex) => dataIndex > 0);\n el.dispatchEvent(evt);\n el.dom7EventData = [];\n delete el.dom7EventData;\n }\n }\n }\n\n return this;\n }\n\n function transitionEnd$1(callback) {\n const dom = this;\n\n function fireCallBack(e) {\n if (e.target !== this) return;\n callback.call(this, e);\n dom.off('transitionend', fireCallBack);\n }\n\n if (callback) {\n dom.on('transitionend', fireCallBack);\n }\n\n return this;\n }\n\n function outerWidth(includeMargins) {\n if (this.length > 0) {\n if (includeMargins) {\n const styles = this.styles();\n return this[0].offsetWidth + parseFloat(styles.getPropertyValue('margin-right')) + parseFloat(styles.getPropertyValue('margin-left'));\n }\n\n return this[0].offsetWidth;\n }\n\n return null;\n }\n\n function outerHeight(includeMargins) {\n if (this.length > 0) {\n if (includeMargins) {\n const styles = this.styles();\n return this[0].offsetHeight + parseFloat(styles.getPropertyValue('margin-top')) + parseFloat(styles.getPropertyValue('margin-bottom'));\n }\n\n return this[0].offsetHeight;\n }\n\n return null;\n }\n\n function offset() {\n if (this.length > 0) {\n const window = getWindow();\n const document = getDocument();\n const el = this[0];\n const box = el.getBoundingClientRect();\n const body = document.body;\n const clientTop = el.clientTop || body.clientTop || 0;\n const clientLeft = el.clientLeft || body.clientLeft || 0;\n const scrollTop = el === window ? window.scrollY : el.scrollTop;\n const scrollLeft = el === window ? window.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\n function styles() {\n const window = getWindow();\n if (this[0]) return window.getComputedStyle(this[0], null);\n return {};\n }\n\n function css(props, value) {\n const window = getWindow();\n let i;\n\n if (arguments.length === 1) {\n if (typeof props === 'string') {\n // .css('width')\n if (this[0]) return window.getComputedStyle(this[0], null).getPropertyValue(props);\n } else {\n // .css({ width: '100px' })\n for (i = 0; i < this.length; i += 1) {\n for (const prop in props) {\n this[i].style[prop] = props[prop];\n }\n }\n\n return this;\n }\n }\n\n if (arguments.length === 2 && typeof props === 'string') {\n // .css('width', '100px')\n for (i = 0; i < this.length; i += 1) {\n this[i].style[props] = value;\n }\n\n return this;\n }\n\n return this;\n }\n\n function each(callback) {\n if (!callback) return this;\n this.forEach((el, index) => {\n callback.apply(el, [el, index]);\n });\n return this;\n }\n\n function filter(callback) {\n const result = arrayFilter(this, callback);\n return $(result);\n }\n\n function html(html) {\n if (typeof html === 'undefined') {\n return this[0] ? this[0].innerHTML : null;\n }\n\n for (let i = 0; i < this.length; i += 1) {\n this[i].innerHTML = html;\n }\n\n return this;\n }\n\n function text(text) {\n if (typeof text === 'undefined') {\n return this[0] ? this[0].textContent.trim() : null;\n }\n\n for (let i = 0; i < this.length; i += 1) {\n this[i].textContent = text;\n }\n\n return this;\n }\n\n function is(selector) {\n const window = getWindow();\n const document = getDocument();\n const el = this[0];\n let compareWith;\n let i;\n if (!el || typeof selector === 'undefined') return false;\n\n if (typeof selector === 'string') {\n if (el.matches) return el.matches(selector);\n if (el.webkitMatchesSelector) return el.webkitMatchesSelector(selector);\n if (el.msMatchesSelector) return el.msMatchesSelector(selector);\n compareWith = $(selector);\n\n for (i = 0; i < compareWith.length; i += 1) {\n if (compareWith[i] === el) return true;\n }\n\n return false;\n }\n\n if (selector === document) {\n return el === document;\n }\n\n if (selector === window) {\n return el === window;\n }\n\n if (selector.nodeType || selector instanceof Dom7) {\n compareWith = selector.nodeType ? [selector] : selector;\n\n for (i = 0; i < compareWith.length; i += 1) {\n if (compareWith[i] === el) return true;\n }\n\n return false;\n }\n\n return false;\n }\n\n function index() {\n let child = this[0];\n let i;\n\n if (child) {\n i = 0; // eslint-disable-next-line\n\n while ((child = child.previousSibling) !== null) {\n if (child.nodeType === 1) i += 1;\n }\n\n return i;\n }\n\n return undefined;\n }\n\n function eq(index) {\n if (typeof index === 'undefined') return this;\n const length = this.length;\n\n if (index > length - 1) {\n return $([]);\n }\n\n if (index < 0) {\n const returnIndex = length + index;\n if (returnIndex < 0) return $([]);\n return $([this[returnIndex]]);\n }\n\n return $([this[index]]);\n }\n\n function append() {\n let newChild;\n const document = getDocument();\n\n for (let k = 0; k < arguments.length; k += 1) {\n newChild = k < 0 || arguments.length <= k ? undefined : arguments[k];\n\n for (let i = 0; i < this.length; i += 1) {\n if (typeof newChild === 'string') {\n const tempDiv = document.createElement('div');\n tempDiv.innerHTML = newChild;\n\n while (tempDiv.firstChild) {\n this[i].appendChild(tempDiv.firstChild);\n }\n } else if (newChild instanceof Dom7) {\n for (let 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\n function prepend(newChild) {\n const document = getDocument();\n let i;\n let j;\n\n for (i = 0; i < this.length; i += 1) {\n if (typeof newChild === 'string') {\n const tempDiv = document.createElement('div');\n tempDiv.innerHTML = newChild;\n\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\n return this;\n }\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 $([this[0].nextElementSibling]);\n }\n\n return $([]);\n }\n\n if (this[0].nextElementSibling) return $([this[0].nextElementSibling]);\n return $([]);\n }\n\n return $([]);\n }\n\n function nextAll(selector) {\n const nextEls = [];\n let el = this[0];\n if (!el) return $([]);\n\n while (el.nextElementSibling) {\n const next = el.nextElementSibling; // eslint-disable-line\n\n if (selector) {\n if ($(next).is(selector)) nextEls.push(next);\n } else nextEls.push(next);\n\n el = next;\n }\n\n return $(nextEls);\n }\n\n function prev(selector) {\n if (this.length > 0) {\n const el = this[0];\n\n if (selector) {\n if (el.previousElementSibling && $(el.previousElementSibling).is(selector)) {\n return $([el.previousElementSibling]);\n }\n\n return $([]);\n }\n\n if (el.previousElementSibling) return $([el.previousElementSibling]);\n return $([]);\n }\n\n return $([]);\n }\n\n function prevAll(selector) {\n const prevEls = [];\n let el = this[0];\n if (!el) return $([]);\n\n while (el.previousElementSibling) {\n const prev = el.previousElementSibling; // eslint-disable-line\n\n if (selector) {\n if ($(prev).is(selector)) prevEls.push(prev);\n } else prevEls.push(prev);\n\n el = prev;\n }\n\n return $(prevEls);\n }\n\n function parent(selector) {\n const parents = []; // eslint-disable-line\n\n for (let 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\n return $(parents);\n }\n\n function parents(selector) {\n const parents = []; // eslint-disable-line\n\n for (let i = 0; i < this.length; i += 1) {\n let parent = this[i].parentNode; // eslint-disable-line\n\n while (parent) {\n if (selector) {\n if ($(parent).is(selector)) parents.push(parent);\n } else {\n parents.push(parent);\n }\n\n parent = parent.parentNode;\n }\n }\n\n return $(parents);\n }\n\n function closest(selector) {\n let closest = this; // eslint-disable-line\n\n if (typeof selector === 'undefined') {\n return $([]);\n }\n\n if (!closest.is(selector)) {\n closest = closest.parents(selector).eq(0);\n }\n\n return closest;\n }\n\n function find(selector) {\n const foundElements = [];\n\n for (let i = 0; i < this.length; i += 1) {\n const found = this[i].querySelectorAll(selector);\n\n for (let j = 0; j < found.length; j += 1) {\n foundElements.push(found[j]);\n }\n }\n\n return $(foundElements);\n }\n\n function children(selector) {\n const children = []; // eslint-disable-line\n\n for (let i = 0; i < this.length; i += 1) {\n const childNodes = this[i].children;\n\n for (let j = 0; j < childNodes.length; j += 1) {\n if (!selector || $(childNodes[j]).is(selector)) {\n children.push(childNodes[j]);\n }\n }\n }\n\n return $(children);\n }\n\n function remove() {\n for (let i = 0; i < this.length; i += 1) {\n if (this[i].parentNode) this[i].parentNode.removeChild(this[i]);\n }\n\n return this;\n }\n\n const Methods = {\n addClass,\n removeClass,\n hasClass,\n toggleClass,\n attr,\n removeAttr,\n transform,\n transition: transition$1,\n on,\n off,\n trigger,\n transitionEnd: transitionEnd$1,\n outerWidth,\n outerHeight,\n styles,\n offset,\n css,\n each,\n html,\n text,\n is,\n index,\n eq,\n append,\n prepend,\n next,\n nextAll,\n prev,\n prevAll,\n parent,\n parents,\n closest,\n find,\n children,\n filter,\n remove\n };\n Object.keys(Methods).forEach(methodName => {\n Object.defineProperty($.fn, methodName, {\n value: Methods[methodName],\n writable: true\n });\n });\n\n function deleteProps(obj) {\n const object = obj;\n Object.keys(object).forEach(key => {\n try {\n object[key] = null;\n } catch (e) {// no getter for object\n }\n\n try {\n delete object[key];\n } catch (e) {// something got wrong\n }\n });\n }\n\n function nextTick(callback, delay) {\n if (delay === void 0) {\n delay = 0;\n }\n\n return setTimeout(callback, delay);\n }\n\n function now() {\n return Date.now();\n }\n\n function getComputedStyle$1(el) {\n const window = getWindow();\n let style;\n\n if (window.getComputedStyle) {\n style = window.getComputedStyle(el, null);\n }\n\n if (!style && el.currentStyle) {\n style = el.currentStyle;\n }\n\n if (!style) {\n style = el.style;\n }\n\n return style;\n }\n\n function getTranslate(el, axis) {\n if (axis === void 0) {\n axis = 'x';\n }\n\n const window = getWindow();\n let matrix;\n let curTransform;\n let transformMatrix;\n const curStyle = getComputedStyle$1(el);\n\n if (window.WebKitCSSMatrix) {\n curTransform = curStyle.transform || curStyle.webkitTransform;\n\n if (curTransform.split(',').length > 6) {\n curTransform = curTransform.split(', ').map(a => a.replace(',', '.')).join(', ');\n } // Some old versions of Webkit choke when 'none' is passed; pass\n // empty string instead in this case\n\n\n transformMatrix = new window.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 (window.WebKitCSSMatrix) curTransform = transformMatrix.m41; // Crazy IE10 Matrix\n else if (matrix.length === 16) curTransform = parseFloat(matrix[12]); // Normal Browsers\n else curTransform = parseFloat(matrix[4]);\n }\n\n if (axis === 'y') {\n // Latest Chrome and webkits Fix\n if (window.WebKitCSSMatrix) curTransform = transformMatrix.m42; // Crazy IE10 Matrix\n else if (matrix.length === 16) curTransform = parseFloat(matrix[13]); // Normal Browsers\n else curTransform = parseFloat(matrix[5]);\n }\n\n return curTransform || 0;\n }\n\n function isObject(o) {\n return typeof o === 'object' && o !== null && o.constructor && Object.prototype.toString.call(o).slice(8, -1) === 'Object';\n }\n\n function isNode(node) {\n // eslint-disable-next-line\n if (typeof window !== 'undefined' && typeof window.HTMLElement !== 'undefined') {\n return node instanceof HTMLElement;\n }\n\n return node && (node.nodeType === 1 || node.nodeType === 11);\n }\n\n function extend() {\n const to = Object(arguments.length <= 0 ? undefined : arguments[0]);\n const noExtend = ['__proto__', 'constructor', 'prototype'];\n\n for (let i = 1; i < arguments.length; i += 1) {\n const nextSource = i < 0 || arguments.length <= i ? undefined : arguments[i];\n\n if (nextSource !== undefined && nextSource !== null && !isNode(nextSource)) {\n const keysArray = Object.keys(Object(nextSource)).filter(key => noExtend.indexOf(key) < 0);\n\n for (let nextIndex = 0, len = keysArray.length; nextIndex < len; nextIndex += 1) {\n const nextKey = keysArray[nextIndex];\n const desc = Object.getOwnPropertyDescriptor(nextSource, nextKey);\n\n if (desc !== undefined && desc.enumerable) {\n if (isObject(to[nextKey]) && isObject(nextSource[nextKey])) {\n if (nextSource[nextKey].__swiper__) {\n to[nextKey] = nextSource[nextKey];\n } else {\n extend(to[nextKey], nextSource[nextKey]);\n }\n } else if (!isObject(to[nextKey]) && isObject(nextSource[nextKey])) {\n to[nextKey] = {};\n\n if (nextSource[nextKey].__swiper__) {\n to[nextKey] = nextSource[nextKey];\n } else {\n extend(to[nextKey], nextSource[nextKey]);\n }\n } else {\n to[nextKey] = nextSource[nextKey];\n }\n }\n }\n }\n }\n\n return to;\n }\n\n function setCSSProperty(el, varName, varValue) {\n el.style.setProperty(varName, varValue);\n }\n\n function animateCSSModeScroll(_ref) {\n let {\n swiper,\n targetPosition,\n side\n } = _ref;\n const window = getWindow();\n const startPosition = -swiper.translate;\n let startTime = null;\n let time;\n const duration = swiper.params.speed;\n swiper.wrapperEl.style.scrollSnapType = 'none';\n window.cancelAnimationFrame(swiper.cssModeFrameID);\n const dir = targetPosition > startPosition ? 'next' : 'prev';\n\n const isOutOfBound = (current, target) => {\n return dir === 'next' && current >= target || dir === 'prev' && current <= target;\n };\n\n const animate = () => {\n time = new Date().getTime();\n\n if (startTime === null) {\n startTime = time;\n }\n\n const progress = Math.max(Math.min((time - startTime) / duration, 1), 0);\n const easeProgress = 0.5 - Math.cos(progress * Math.PI) / 2;\n let currentPosition = startPosition + easeProgress * (targetPosition - startPosition);\n\n if (isOutOfBound(currentPosition, targetPosition)) {\n currentPosition = targetPosition;\n }\n\n swiper.wrapperEl.scrollTo({\n [side]: currentPosition\n });\n\n if (isOutOfBound(currentPosition, targetPosition)) {\n swiper.wrapperEl.style.overflow = 'hidden';\n swiper.wrapperEl.style.scrollSnapType = '';\n setTimeout(() => {\n swiper.wrapperEl.style.overflow = '';\n swiper.wrapperEl.scrollTo({\n [side]: currentPosition\n });\n });\n window.cancelAnimationFrame(swiper.cssModeFrameID);\n return;\n }\n\n swiper.cssModeFrameID = window.requestAnimationFrame(animate);\n };\n\n animate();\n }\n\n let support;\n\n function calcSupport() {\n const window = getWindow();\n const document = getDocument();\n return {\n smoothScroll: document.documentElement && 'scrollBehavior' in document.documentElement.style,\n touch: !!('ontouchstart' in window || window.DocumentTouch && document instanceof window.DocumentTouch),\n passiveListener: function checkPassiveListener() {\n let supportsPassive = false;\n\n try {\n const opts = Object.defineProperty({}, 'passive', {\n // eslint-disable-next-line\n get() {\n supportsPassive = true;\n }\n\n });\n window.addEventListener('testPassiveListener', null, opts);\n } catch (e) {// No support\n }\n\n return supportsPassive;\n }(),\n gestures: function checkGestures() {\n return 'ongesturestart' in window;\n }()\n };\n }\n\n function getSupport() {\n if (!support) {\n support = calcSupport();\n }\n\n return support;\n }\n\n let deviceCached;\n\n function calcDevice(_temp) {\n let {\n userAgent\n } = _temp === void 0 ? {} : _temp;\n const support = getSupport();\n const window = getWindow();\n const platform = window.navigator.platform;\n const ua = userAgent || window.navigator.userAgent;\n const device = {\n ios: false,\n android: false\n };\n const screenWidth = window.screen.width;\n const screenHeight = window.screen.height;\n const android = ua.match(/(Android);?[\\s\\/]+([\\d.]+)?/); // eslint-disable-line\n\n let ipad = ua.match(/(iPad).*OS\\s([\\d_]+)/);\n const ipod = ua.match(/(iPod)(.*OS\\s([\\d_]+))?/);\n const iphone = !ipad && ua.match(/(iPhone\\sOS|iOS)\\s([\\d_]+)/);\n const windows = platform === 'Win32';\n let macos = platform === 'MacIntel'; // iPadOs 13 fix\n\n const iPadScreens = ['1024x1366', '1366x1024', '834x1194', '1194x834', '834x1112', '1112x834', '768x1024', '1024x768', '820x1180', '1180x820', '810x1080', '1080x810'];\n\n if (!ipad && macos && support.touch && iPadScreens.indexOf(`${screenWidth}x${screenHeight}`) >= 0) {\n ipad = ua.match(/(Version)\\/([\\d.]+)/);\n if (!ipad) ipad = [0, 1, '13_0_0'];\n macos = false;\n } // Android\n\n\n if (android && !windows) {\n device.os = 'android';\n device.android = true;\n }\n\n if (ipad || iphone || ipod) {\n device.os = 'ios';\n device.ios = true;\n } // Export object\n\n\n return device;\n }\n\n function getDevice(overrides) {\n if (overrides === void 0) {\n overrides = {};\n }\n\n if (!deviceCached) {\n deviceCached = calcDevice(overrides);\n }\n\n return deviceCached;\n }\n\n let browser;\n\n function calcBrowser() {\n const window = getWindow();\n\n function isSafari() {\n const ua = window.navigator.userAgent.toLowerCase();\n return ua.indexOf('safari') >= 0 && ua.indexOf('chrome') < 0 && ua.indexOf('android') < 0;\n }\n\n return {\n isSafari: isSafari(),\n isWebView: /(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(window.navigator.userAgent)\n };\n }\n\n function getBrowser() {\n if (!browser) {\n browser = calcBrowser();\n }\n\n return browser;\n }\n\n function Resize(_ref) {\n let {\n swiper,\n on,\n emit\n } = _ref;\n const window = getWindow();\n let observer = null;\n let animationFrame = null;\n\n const resizeHandler = () => {\n if (!swiper || swiper.destroyed || !swiper.initialized) return;\n emit('beforeResize');\n emit('resize');\n };\n\n const createObserver = () => {\n if (!swiper || swiper.destroyed || !swiper.initialized) return;\n observer = new ResizeObserver(entries => {\n animationFrame = window.requestAnimationFrame(() => {\n const {\n width,\n height\n } = swiper;\n let newWidth = width;\n let newHeight = height;\n entries.forEach(_ref2 => {\n let {\n contentBoxSize,\n contentRect,\n target\n } = _ref2;\n if (target && target !== swiper.el) return;\n newWidth = contentRect ? contentRect.width : (contentBoxSize[0] || contentBoxSize).inlineSize;\n newHeight = contentRect ? contentRect.height : (contentBoxSize[0] || contentBoxSize).blockSize;\n });\n\n if (newWidth !== width || newHeight !== height) {\n resizeHandler();\n }\n });\n });\n observer.observe(swiper.el);\n };\n\n const removeObserver = () => {\n if (animationFrame) {\n window.cancelAnimationFrame(animationFrame);\n }\n\n if (observer && observer.unobserve && swiper.el) {\n observer.unobserve(swiper.el);\n observer = null;\n }\n };\n\n const orientationChangeHandler = () => {\n if (!swiper || swiper.destroyed || !swiper.initialized) return;\n emit('orientationchange');\n };\n\n on('init', () => {\n if (swiper.params.resizeObserver && typeof window.ResizeObserver !== 'undefined') {\n createObserver();\n return;\n }\n\n window.addEventListener('resize', resizeHandler);\n window.addEventListener('orientationchange', orientationChangeHandler);\n });\n on('destroy', () => {\n removeObserver();\n window.removeEventListener('resize', resizeHandler);\n window.removeEventListener('orientationchange', orientationChangeHandler);\n });\n }\n\n function Observer(_ref) {\n let {\n swiper,\n extendParams,\n on,\n emit\n } = _ref;\n const observers = [];\n const window = getWindow();\n\n const attach = function (target, options) {\n if (options === void 0) {\n options = {};\n }\n\n const ObserverFunc = window.MutationObserver || window.WebkitMutationObserver;\n const observer = new ObserverFunc(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 emit('observerUpdate', mutations[0]);\n return;\n }\n\n const observerUpdate = function observerUpdate() {\n emit('observerUpdate', mutations[0]);\n };\n\n if (window.requestAnimationFrame) {\n window.requestAnimationFrame(observerUpdate);\n } else {\n window.setTimeout(observerUpdate, 0);\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 observers.push(observer);\n };\n\n const init = () => {\n if (!swiper.params.observer) return;\n\n if (swiper.params.observeParents) {\n const containerParents = swiper.$el.parents();\n\n for (let i = 0; i < containerParents.length; i += 1) {\n attach(containerParents[i]);\n }\n } // Observe container\n\n\n attach(swiper.$el[0], {\n childList: swiper.params.observeSlideChildren\n }); // Observe wrapper\n\n attach(swiper.$wrapperEl[0], {\n attributes: false\n });\n };\n\n const destroy = () => {\n observers.forEach(observer => {\n observer.disconnect();\n });\n observers.splice(0, observers.length);\n };\n\n extendParams({\n observer: false,\n observeParents: false,\n observeSlideChildren: false\n });\n on('init', init);\n on('destroy', destroy);\n }\n\n /* eslint-disable no-underscore-dangle */\n var eventsEmitter = {\n on(events, handler, priority) {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (typeof handler !== 'function') return self;\n const method = priority ? 'unshift' : 'push';\n events.split(' ').forEach(event => {\n if (!self.eventsListeners[event]) self.eventsListeners[event] = [];\n self.eventsListeners[event][method](handler);\n });\n return self;\n },\n\n once(events, handler, priority) {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (typeof handler !== 'function') return self;\n\n function onceHandler() {\n self.off(events, onceHandler);\n\n if (onceHandler.__emitterProxy) {\n delete onceHandler.__emitterProxy;\n }\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n handler.apply(self, args);\n }\n\n onceHandler.__emitterProxy = handler;\n return self.on(events, onceHandler, priority);\n },\n\n onAny(handler, priority) {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (typeof handler !== 'function') return self;\n const method = priority ? 'unshift' : 'push';\n\n if (self.eventsAnyListeners.indexOf(handler) < 0) {\n self.eventsAnyListeners[method](handler);\n }\n\n return self;\n },\n\n offAny(handler) {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (!self.eventsAnyListeners) return self;\n const index = self.eventsAnyListeners.indexOf(handler);\n\n if (index >= 0) {\n self.eventsAnyListeners.splice(index, 1);\n }\n\n return self;\n },\n\n off(events, handler) {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (!self.eventsListeners) return self;\n events.split(' ').forEach(event => {\n if (typeof handler === 'undefined') {\n self.eventsListeners[event] = [];\n } else if (self.eventsListeners[event]) {\n self.eventsListeners[event].forEach((eventHandler, index) => {\n if (eventHandler === handler || eventHandler.__emitterProxy && eventHandler.__emitterProxy === handler) {\n self.eventsListeners[event].splice(index, 1);\n }\n });\n }\n });\n return self;\n },\n\n emit() {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (!self.eventsListeners) return self;\n let events;\n let data;\n let context;\n\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\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\n data.unshift(context);\n const eventsArray = Array.isArray(events) ? events : events.split(' ');\n eventsArray.forEach(event => {\n if (self.eventsAnyListeners && self.eventsAnyListeners.length) {\n self.eventsAnyListeners.forEach(eventHandler => {\n eventHandler.apply(context, [event, ...data]);\n });\n }\n\n if (self.eventsListeners && self.eventsListeners[event]) {\n self.eventsListeners[event].forEach(eventHandler => {\n eventHandler.apply(context, data);\n });\n }\n });\n return self;\n }\n\n };\n\n function updateSize() {\n const swiper = this;\n let width;\n let height;\n const $el = swiper.$el;\n\n if (typeof swiper.params.width !== 'undefined' && swiper.params.width !== null) {\n width = swiper.params.width;\n } else {\n width = $el[0].clientWidth;\n }\n\n if (typeof swiper.params.height !== 'undefined' && swiper.params.height !== null) {\n height = swiper.params.height;\n } else {\n height = $el[0].clientHeight;\n }\n\n if (width === 0 && swiper.isHorizontal() || height === 0 && swiper.isVertical()) {\n return;\n } // Subtract paddings\n\n\n width = width - parseInt($el.css('padding-left') || 0, 10) - parseInt($el.css('padding-right') || 0, 10);\n height = height - parseInt($el.css('padding-top') || 0, 10) - parseInt($el.css('padding-bottom') || 0, 10);\n if (Number.isNaN(width)) width = 0;\n if (Number.isNaN(height)) height = 0;\n Object.assign(swiper, {\n width,\n height,\n size: swiper.isHorizontal() ? width : height\n });\n }\n\n function updateSlides() {\n const swiper = this;\n\n function getDirectionLabel(property) {\n if (swiper.isHorizontal()) {\n return property;\n } // prettier-ignore\n\n\n return {\n 'width': 'height',\n 'margin-top': 'margin-left',\n 'margin-bottom ': 'margin-right',\n 'margin-left': 'margin-top',\n 'margin-right': 'margin-bottom',\n 'padding-left': 'padding-top',\n 'padding-right': 'padding-bottom',\n 'marginRight': 'marginBottom'\n }[property];\n }\n\n function getDirectionPropertyValue(node, label) {\n return parseFloat(node.getPropertyValue(getDirectionLabel(label)) || 0);\n }\n\n const params = swiper.params;\n const {\n $wrapperEl,\n size: swiperSize,\n rtlTranslate: rtl,\n wrongRTL\n } = swiper;\n const isVirtual = swiper.virtual && params.virtual.enabled;\n const previousSlidesLength = isVirtual ? swiper.virtual.slides.length : swiper.slides.length;\n const slides = $wrapperEl.children(`.${swiper.params.slideClass}`);\n const slidesLength = isVirtual ? swiper.virtual.slides.length : slides.length;\n let snapGrid = [];\n const slidesGrid = [];\n const slidesSizesGrid = [];\n let offsetBefore = params.slidesOffsetBefore;\n\n if (typeof offsetBefore === 'function') {\n offsetBefore = params.slidesOffsetBefore.call(swiper);\n }\n\n let offsetAfter = params.slidesOffsetAfter;\n\n if (typeof offsetAfter === 'function') {\n offsetAfter = params.slidesOffsetAfter.call(swiper);\n }\n\n const previousSnapGridLength = swiper.snapGrid.length;\n const previousSlidesGridLength = swiper.slidesGrid.length;\n let spaceBetween = params.spaceBetween;\n let slidePosition = -offsetBefore;\n let prevSlideSize = 0;\n let index = 0;\n\n if (typeof swiperSize === 'undefined') {\n return;\n }\n\n if (typeof spaceBetween === 'string' && spaceBetween.indexOf('%') >= 0) {\n spaceBetween = parseFloat(spaceBetween.replace('%', '')) / 100 * swiperSize;\n }\n\n swiper.virtualSize = -spaceBetween; // reset margins\n\n if (rtl) slides.css({\n marginLeft: '',\n marginBottom: '',\n marginTop: ''\n });else slides.css({\n marginRight: '',\n marginBottom: '',\n marginTop: ''\n }); // reset cssMode offsets\n\n if (params.centeredSlides && params.cssMode) {\n setCSSProperty(swiper.wrapperEl, '--swiper-centered-offset-before', '');\n setCSSProperty(swiper.wrapperEl, '--swiper-centered-offset-after', '');\n }\n\n const gridEnabled = params.grid && params.grid.rows > 1 && swiper.grid;\n\n if (gridEnabled) {\n swiper.grid.initSlides(slidesLength);\n } // Calc slides\n\n\n let slideSize;\n const shouldResetSlideSize = params.slidesPerView === 'auto' && params.breakpoints && Object.keys(params.breakpoints).filter(key => {\n return typeof params.breakpoints[key].slidesPerView !== 'undefined';\n }).length > 0;\n\n for (let i = 0; i < slidesLength; i += 1) {\n slideSize = 0;\n const slide = slides.eq(i);\n\n if (gridEnabled) {\n swiper.grid.updateSlide(i, slide, slidesLength, getDirectionLabel);\n }\n\n if (slide.css('display') === 'none') continue; // eslint-disable-line\n\n if (params.slidesPerView === 'auto') {\n if (shouldResetSlideSize) {\n slides[i].style[getDirectionLabel('width')] = ``;\n }\n\n const slideStyles = getComputedStyle(slide[0]);\n const currentTransform = slide[0].style.transform;\n const currentWebKitTransform = slide[0].style.webkitTransform;\n\n if (currentTransform) {\n slide[0].style.transform = 'none';\n }\n\n if (currentWebKitTransform) {\n slide[0].style.webkitTransform = 'none';\n }\n\n if (params.roundLengths) {\n slideSize = swiper.isHorizontal() ? slide.outerWidth(true) : slide.outerHeight(true);\n } else {\n // eslint-disable-next-line\n const width = getDirectionPropertyValue(slideStyles, 'width');\n const paddingLeft = getDirectionPropertyValue(slideStyles, 'padding-left');\n const paddingRight = getDirectionPropertyValue(slideStyles, 'padding-right');\n const marginLeft = getDirectionPropertyValue(slideStyles, 'margin-left');\n const marginRight = getDirectionPropertyValue(slideStyles, 'margin-right');\n const boxSizing = slideStyles.getPropertyValue('box-sizing');\n\n if (boxSizing && boxSizing === 'border-box') {\n slideSize = width + marginLeft + marginRight;\n } else {\n const {\n clientWidth,\n offsetWidth\n } = slide[0];\n slideSize = width + paddingLeft + paddingRight + marginLeft + marginRight + (offsetWidth - clientWidth);\n }\n }\n\n if (currentTransform) {\n slide[0].style.transform = currentTransform;\n }\n\n if (currentWebKitTransform) {\n slide[0].style.webkitTransform = currentWebKitTransform;\n }\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 slides[i].style[getDirectionLabel('width')] = `${slideSize}px`;\n }\n }\n\n if (slides[i]) {\n slides[i].swiperSlideSize = slideSize;\n }\n\n slidesSizesGrid.push(slideSize);\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 - Math.min(swiper.params.slidesPerGroupSkip, index)) % swiper.params.slidesPerGroup === 0) snapGrid.push(slidePosition);\n slidesGrid.push(slidePosition);\n slidePosition = slidePosition + slideSize + spaceBetween;\n }\n\n swiper.virtualSize += slideSize + spaceBetween;\n prevSlideSize = slideSize;\n index += 1;\n }\n\n swiper.virtualSize = Math.max(swiper.virtualSize, swiperSize) + offsetAfter;\n\n if (rtl && wrongRTL && (params.effect === 'slide' || params.effect === 'coverflow')) {\n $wrapperEl.css({\n width: `${swiper.virtualSize + params.spaceBetween}px`\n });\n }\n\n if (params.setWrapperSize) {\n $wrapperEl.css({\n [getDirectionLabel('width')]: `${swiper.virtualSize + params.spaceBetween}px`\n });\n }\n\n if (gridEnabled) {\n swiper.grid.updateWrapperSize(slideSize, snapGrid, getDirectionLabel);\n } // Remove last grid elements depending on width\n\n\n if (!params.centeredSlides) {\n const newSlidesGrid = [];\n\n for (let i = 0; i < snapGrid.length; i += 1) {\n let slidesGridItem = snapGrid[i];\n if (params.roundLengths) slidesGridItem = Math.floor(slidesGridItem);\n\n if (snapGrid[i] <= swiper.virtualSize - swiperSize) {\n newSlidesGrid.push(slidesGridItem);\n }\n }\n\n snapGrid = newSlidesGrid;\n\n if (Math.floor(swiper.virtualSize - swiperSize) - Math.floor(snapGrid[snapGrid.length - 1]) > 1) {\n snapGrid.push(swiper.virtualSize - swiperSize);\n }\n }\n\n if (snapGrid.length === 0) snapGrid = [0];\n\n if (params.spaceBetween !== 0) {\n const key = swiper.isHorizontal() && rtl ? 'marginLeft' : getDirectionLabel('marginRight');\n slides.filter((_, slideIndex) => {\n if (!params.cssMode) return true;\n\n if (slideIndex === slides.length - 1) {\n return false;\n }\n\n return true;\n }).css({\n [key]: `${spaceBetween}px`\n });\n }\n\n if (params.centeredSlides && params.centeredSlidesBounds) {\n let allSlidesSize = 0;\n slidesSizesGrid.forEach(slideSizeValue => {\n allSlidesSize += slideSizeValue + (params.spaceBetween ? params.spaceBetween : 0);\n });\n allSlidesSize -= params.spaceBetween;\n const maxSnap = allSlidesSize - swiperSize;\n snapGrid = snapGrid.map(snap => {\n if (snap < 0) return -offsetBefore;\n if (snap > maxSnap) return maxSnap + offsetAfter;\n return snap;\n });\n }\n\n if (params.centerInsufficientSlides) {\n let allSlidesSize = 0;\n slidesSizesGrid.forEach(slideSizeValue => {\n allSlidesSize += slideSizeValue + (params.spaceBetween ? params.spaceBetween : 0);\n });\n allSlidesSize -= params.spaceBetween;\n\n if (allSlidesSize < swiperSize) {\n const allSlidesOffset = (swiperSize - allSlidesSize) / 2;\n snapGrid.forEach((snap, snapIndex) => {\n snapGrid[snapIndex] = snap - allSlidesOffset;\n });\n slidesGrid.forEach((snap, snapIndex) => {\n slidesGrid[snapIndex] = snap + allSlidesOffset;\n });\n }\n }\n\n Object.assign(swiper, {\n slides,\n snapGrid,\n slidesGrid,\n slidesSizesGrid\n });\n\n if (params.centeredSlides && params.cssMode && !params.centeredSlidesBounds) {\n setCSSProperty(swiper.wrapperEl, '--swiper-centered-offset-before', `${-snapGrid[0]}px`);\n setCSSProperty(swiper.wrapperEl, '--swiper-centered-offset-after', `${swiper.size / 2 - slidesSizesGrid[slidesSizesGrid.length - 1] / 2}px`);\n const addToSnapGrid = -swiper.snapGrid[0];\n const addToSlidesGrid = -swiper.slidesGrid[0];\n swiper.snapGrid = swiper.snapGrid.map(v => v + addToSnapGrid);\n swiper.slidesGrid = swiper.slidesGrid.map(v => v + addToSlidesGrid);\n }\n\n if (slidesLength !== previousSlidesLength) {\n swiper.emit('slidesLengthChange');\n }\n\n if (snapGrid.length !== previousSnapGridLength) {\n if (swiper.params.watchOverflow) swiper.checkOverflow();\n swiper.emit('snapGridLengthChange');\n }\n\n if (slidesGrid.length !== previousSlidesGridLength) {\n swiper.emit('slidesGridLengthChange');\n }\n\n if (params.watchSlidesProgress) {\n swiper.updateSlidesOffset();\n }\n\n if (!isVirtual && !params.cssMode && (params.effect === 'slide' || params.effect === 'fade')) {\n const backFaceHiddenClass = `${params.containerModifierClass}backface-hidden`;\n const hasClassBackfaceClassAdded = swiper.$el.hasClass(backFaceHiddenClass);\n\n if (slidesLength <= params.maxBackfaceHiddenSlides) {\n if (!hasClassBackfaceClassAdded) swiper.$el.addClass(backFaceHiddenClass);\n } else if (hasClassBackfaceClassAdded) {\n swiper.$el.removeClass(backFaceHiddenClass);\n }\n }\n }\n\n function updateAutoHeight(speed) {\n const swiper = this;\n const activeSlides = [];\n const isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n let newHeight = 0;\n let i;\n\n if (typeof speed === 'number') {\n swiper.setTransition(speed);\n } else if (speed === true) {\n swiper.setTransition(swiper.params.speed);\n }\n\n const getSlideByIndex = index => {\n if (isVirtual) {\n return swiper.slides.filter(el => parseInt(el.getAttribute('data-swiper-slide-index'), 10) === index)[0];\n }\n\n return swiper.slides.eq(index)[0];\n }; // Find slides currently in view\n\n\n if (swiper.params.slidesPerView !== 'auto' && swiper.params.slidesPerView > 1) {\n if (swiper.params.centeredSlides) {\n swiper.visibleSlides.each(slide => {\n activeSlides.push(slide);\n });\n } else {\n for (i = 0; i < Math.ceil(swiper.params.slidesPerView); i += 1) {\n const index = swiper.activeIndex + i;\n if (index > swiper.slides.length && !isVirtual) break;\n activeSlides.push(getSlideByIndex(index));\n }\n }\n } else {\n activeSlides.push(getSlideByIndex(swiper.activeIndex));\n } // Find new height from highest slide in view\n\n\n for (i = 0; i < activeSlides.length; i += 1) {\n if (typeof activeSlides[i] !== 'undefined') {\n const height = activeSlides[i].offsetHeight;\n newHeight = height > newHeight ? height : newHeight;\n }\n } // Update Height\n\n\n if (newHeight || newHeight === 0) swiper.$wrapperEl.css('height', `${newHeight}px`);\n }\n\n function updateSlidesOffset() {\n const swiper = this;\n const slides = swiper.slides;\n\n for (let 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) {\n translate = this && this.translate || 0;\n }\n\n const swiper = this;\n const params = swiper.params;\n const {\n slides,\n rtlTranslate: rtl,\n snapGrid\n } = swiper;\n if (slides.length === 0) return;\n if (typeof slides[0].swiperSlideOffset === 'undefined') swiper.updateSlidesOffset();\n let offsetCenter = -translate;\n if (rtl) offsetCenter = translate; // Visible Slides\n\n slides.removeClass(params.slideVisibleClass);\n swiper.visibleSlidesIndexes = [];\n swiper.visibleSlides = [];\n\n for (let i = 0; i < slides.length; i += 1) {\n const slide = slides[i];\n let slideOffset = slide.swiperSlideOffset;\n\n if (params.cssMode && params.centeredSlides) {\n slideOffset -= slides[0].swiperSlideOffset;\n }\n\n const slideProgress = (offsetCenter + (params.centeredSlides ? swiper.minTranslate() : 0) - slideOffset) / (slide.swiperSlideSize + params.spaceBetween);\n const originalSlideProgress = (offsetCenter - snapGrid[0] + (params.centeredSlides ? swiper.minTranslate() : 0) - slideOffset) / (slide.swiperSlideSize + params.spaceBetween);\n const slideBefore = -(offsetCenter - slideOffset);\n const slideAfter = slideBefore + swiper.slidesSizesGrid[i];\n const isVisible = slideBefore >= 0 && slideBefore < swiper.size - 1 || slideAfter > 1 && slideAfter <= swiper.size || slideBefore <= 0 && slideAfter >= swiper.size;\n\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 slide.originalProgress = rtl ? -originalSlideProgress : originalSlideProgress;\n }\n\n swiper.visibleSlides = $(swiper.visibleSlides);\n }\n\n function updateProgress(translate) {\n const swiper = this;\n\n if (typeof translate === 'undefined') {\n const multiplier = swiper.rtlTranslate ? -1 : 1; // eslint-disable-next-line\n\n translate = swiper && swiper.translate && swiper.translate * multiplier || 0;\n }\n\n const params = swiper.params;\n const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n let {\n progress,\n isBeginning,\n isEnd\n } = swiper;\n const wasBeginning = isBeginning;\n const wasEnd = isEnd;\n\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\n Object.assign(swiper, {\n progress,\n isBeginning,\n isEnd\n });\n if (params.watchSlidesProgress || params.centeredSlides && params.autoHeight) swiper.updateSlidesProgress(translate);\n\n if (isBeginning && !wasBeginning) {\n swiper.emit('reachBeginning toEdge');\n }\n\n if (isEnd && !wasEnd) {\n swiper.emit('reachEnd toEdge');\n }\n\n if (wasBeginning && !isBeginning || wasEnd && !isEnd) {\n swiper.emit('fromEdge');\n }\n\n swiper.emit('progress', progress);\n }\n\n function updateSlidesClasses() {\n const swiper = this;\n const {\n slides,\n params,\n $wrapperEl,\n activeIndex,\n realIndex\n } = swiper;\n const isVirtual = swiper.virtual && params.virtual.enabled;\n slides.removeClass(`${params.slideActiveClass} ${params.slideNextClass} ${params.slidePrevClass} ${params.slideDuplicateActiveClass} ${params.slideDuplicateNextClass} ${params.slideDuplicatePrevClass}`);\n let activeSlide;\n\n if (isVirtual) {\n activeSlide = swiper.$wrapperEl.find(`.${params.slideClass}[data-swiper-slide-index=\"${activeIndex}\"]`);\n } else {\n activeSlide = slides.eq(activeIndex);\n } // Active classes\n\n\n activeSlide.addClass(params.slideActiveClass);\n\n if (params.loop) {\n // Duplicate to all looped slides\n if (activeSlide.hasClass(params.slideDuplicateClass)) {\n $wrapperEl.children(`.${params.slideClass}:not(.${params.slideDuplicateClass})[data-swiper-slide-index=\"${realIndex}\"]`).addClass(params.slideDuplicateActiveClass);\n } else {\n $wrapperEl.children(`.${params.slideClass}.${params.slideDuplicateClass}[data-swiper-slide-index=\"${realIndex}\"]`).addClass(params.slideDuplicateActiveClass);\n }\n } // Next Slide\n\n\n let nextSlide = activeSlide.nextAll(`.${params.slideClass}`).eq(0).addClass(params.slideNextClass);\n\n if (params.loop && nextSlide.length === 0) {\n nextSlide = slides.eq(0);\n nextSlide.addClass(params.slideNextClass);\n } // Prev Slide\n\n\n let prevSlide = activeSlide.prevAll(`.${params.slideClass}`).eq(0).addClass(params.slidePrevClass);\n\n if (params.loop && prevSlide.length === 0) {\n prevSlide = slides.eq(-1);\n prevSlide.addClass(params.slidePrevClass);\n }\n\n if (params.loop) {\n // Duplicate to all looped slides\n if (nextSlide.hasClass(params.slideDuplicateClass)) {\n $wrapperEl.children(`.${params.slideClass}:not(.${params.slideDuplicateClass})[data-swiper-slide-index=\"${nextSlide.attr('data-swiper-slide-index')}\"]`).addClass(params.slideDuplicateNextClass);\n } else {\n $wrapperEl.children(`.${params.slideClass}.${params.slideDuplicateClass}[data-swiper-slide-index=\"${nextSlide.attr('data-swiper-slide-index')}\"]`).addClass(params.slideDuplicateNextClass);\n }\n\n if (prevSlide.hasClass(params.slideDuplicateClass)) {\n $wrapperEl.children(`.${params.slideClass}:not(.${params.slideDuplicateClass})[data-swiper-slide-index=\"${prevSlide.attr('data-swiper-slide-index')}\"]`).addClass(params.slideDuplicatePrevClass);\n } else {\n $wrapperEl.children(`.${params.slideClass}.${params.slideDuplicateClass}[data-swiper-slide-index=\"${prevSlide.attr('data-swiper-slide-index')}\"]`).addClass(params.slideDuplicatePrevClass);\n }\n }\n\n swiper.emitSlidesClasses();\n }\n\n function updateActiveIndex(newActiveIndex) {\n const swiper = this;\n const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;\n const {\n slidesGrid,\n snapGrid,\n params,\n activeIndex: previousIndex,\n realIndex: previousRealIndex,\n snapIndex: previousSnapIndex\n } = swiper;\n let activeIndex = newActiveIndex;\n let snapIndex;\n\n if (typeof activeIndex === 'undefined') {\n for (let 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 } // Normalize slideIndex\n\n\n if (params.normalizeSlideIndex) {\n if (activeIndex < 0 || typeof activeIndex === 'undefined') activeIndex = 0;\n }\n }\n\n if (snapGrid.indexOf(translate) >= 0) {\n snapIndex = snapGrid.indexOf(translate);\n } else {\n const skip = Math.min(params.slidesPerGroupSkip, activeIndex);\n snapIndex = skip + Math.floor((activeIndex - skip) / params.slidesPerGroup);\n }\n\n if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1;\n\n if (activeIndex === previousIndex) {\n if (snapIndex !== previousSnapIndex) {\n swiper.snapIndex = snapIndex;\n swiper.emit('snapIndexChange');\n }\n\n return;\n } // Get real index\n\n\n const realIndex = parseInt(swiper.slides.eq(activeIndex).attr('data-swiper-slide-index') || activeIndex, 10);\n Object.assign(swiper, {\n snapIndex,\n realIndex,\n previousIndex,\n activeIndex\n });\n swiper.emit('activeIndexChange');\n swiper.emit('snapIndexChange');\n\n if (previousRealIndex !== realIndex) {\n swiper.emit('realIndexChange');\n }\n\n if (swiper.initialized || swiper.params.runCallbacksOnInit) {\n swiper.emit('slideChange');\n }\n }\n\n function updateClickedSlide(e) {\n const swiper = this;\n const params = swiper.params;\n const slide = $(e).closest(`.${params.slideClass}`)[0];\n let slideFound = false;\n let slideIndex;\n\n if (slide) {\n for (let i = 0; i < swiper.slides.length; i += 1) {\n if (swiper.slides[i] === slide) {\n slideFound = true;\n slideIndex = i;\n break;\n }\n }\n }\n\n if (slide && slideFound) {\n swiper.clickedSlide = slide;\n\n if (swiper.virtual && swiper.params.virtual.enabled) {\n swiper.clickedIndex = parseInt($(slide).attr('data-swiper-slide-index'), 10);\n } else {\n swiper.clickedIndex = slideIndex;\n }\n } else {\n swiper.clickedSlide = undefined;\n swiper.clickedIndex = undefined;\n return;\n }\n\n if (params.slideToClickedSlide && swiper.clickedIndex !== undefined && swiper.clickedIndex !== swiper.activeIndex) {\n swiper.slideToClickedSlide();\n }\n }\n\n var update = {\n updateSize,\n updateSlides,\n updateAutoHeight,\n updateSlidesOffset,\n updateSlidesProgress,\n updateProgress,\n updateSlidesClasses,\n updateActiveIndex,\n updateClickedSlide\n };\n\n function getSwiperTranslate(axis) {\n if (axis === void 0) {\n axis = this.isHorizontal() ? 'x' : 'y';\n }\n\n const swiper = this;\n const {\n params,\n rtlTranslate: rtl,\n translate,\n $wrapperEl\n } = swiper;\n\n if (params.virtualTranslate) {\n return rtl ? -translate : translate;\n }\n\n if (params.cssMode) {\n return translate;\n }\n\n let currentTranslate = getTranslate($wrapperEl[0], axis);\n if (rtl) currentTranslate = -currentTranslate;\n return currentTranslate || 0;\n }\n\n function setTranslate(translate, byController) {\n const swiper = this;\n const {\n rtlTranslate: rtl,\n params,\n $wrapperEl,\n wrapperEl,\n progress\n } = swiper;\n let x = 0;\n let y = 0;\n const 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.cssMode) {\n wrapperEl[swiper.isHorizontal() ? 'scrollLeft' : 'scrollTop'] = swiper.isHorizontal() ? -x : -y;\n } else if (!params.virtualTranslate) {\n $wrapperEl.transform(`translate3d(${x}px, ${y}px, ${z}px)`);\n }\n\n swiper.previousTranslate = swiper.translate;\n swiper.translate = swiper.isHorizontal() ? x : y; // Check if we need to update progress\n\n let newProgress;\n const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n\n if (translatesDiff === 0) {\n newProgress = 0;\n } else {\n newProgress = (translate - swiper.minTranslate()) / translatesDiff;\n }\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 function translateTo(translate, speed, runCallbacks, translateBounds, internal) {\n if (translate === void 0) {\n translate = 0;\n }\n\n if (speed === void 0) {\n speed = this.params.speed;\n }\n\n if (runCallbacks === void 0) {\n runCallbacks = true;\n }\n\n if (translateBounds === void 0) {\n translateBounds = true;\n }\n\n const swiper = this;\n const {\n params,\n wrapperEl\n } = swiper;\n\n if (swiper.animating && params.preventInteractionOnTransition) {\n return false;\n }\n\n const minTranslate = swiper.minTranslate();\n const maxTranslate = swiper.maxTranslate();\n let newTranslate;\n if (translateBounds && translate > minTranslate) newTranslate = minTranslate;else if (translateBounds && translate < maxTranslate) newTranslate = maxTranslate;else newTranslate = translate; // Update progress\n\n swiper.updateProgress(newTranslate);\n\n if (params.cssMode) {\n const isH = swiper.isHorizontal();\n\n if (speed === 0) {\n wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = -newTranslate;\n } else {\n if (!swiper.support.smoothScroll) {\n animateCSSModeScroll({\n swiper,\n targetPosition: -newTranslate,\n side: isH ? 'left' : 'top'\n });\n return true;\n }\n\n wrapperEl.scrollTo({\n [isH ? 'left' : 'top']: -newTranslate,\n behavior: 'smooth'\n });\n }\n\n return true;\n }\n\n if (speed === 0) {\n swiper.setTransition(0);\n swiper.setTranslate(newTranslate);\n\n if (runCallbacks) {\n swiper.emit('beforeTransitionStart', speed, internal);\n swiper.emit('transitionEnd');\n }\n } else {\n swiper.setTransition(speed);\n swiper.setTranslate(newTranslate);\n\n if (runCallbacks) {\n swiper.emit('beforeTransitionStart', speed, internal);\n swiper.emit('transitionStart');\n }\n\n if (!swiper.animating) {\n swiper.animating = true;\n\n if (!swiper.onTranslateToWrapperTransitionEnd) {\n swiper.onTranslateToWrapperTransitionEnd = function transitionEnd(e) {\n if (!swiper || swiper.destroyed) return;\n if (e.target !== this) return;\n swiper.$wrapperEl[0].removeEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd);\n swiper.$wrapperEl[0].removeEventListener('webkitTransitionEnd', swiper.onTranslateToWrapperTransitionEnd);\n swiper.onTranslateToWrapperTransitionEnd = null;\n delete swiper.onTranslateToWrapperTransitionEnd;\n\n if (runCallbacks) {\n swiper.emit('transitionEnd');\n }\n };\n }\n\n swiper.$wrapperEl[0].addEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd);\n swiper.$wrapperEl[0].addEventListener('webkitTransitionEnd', swiper.onTranslateToWrapperTransitionEnd);\n }\n }\n\n return true;\n }\n\n var translate = {\n getTranslate: getSwiperTranslate,\n setTranslate,\n minTranslate,\n maxTranslate,\n translateTo\n };\n\n function setTransition(duration, byController) {\n const swiper = this;\n\n if (!swiper.params.cssMode) {\n swiper.$wrapperEl.transition(duration);\n }\n\n swiper.emit('setTransition', duration, byController);\n }\n\n function transitionEmit(_ref) {\n let {\n swiper,\n runCallbacks,\n direction,\n step\n } = _ref;\n const {\n activeIndex,\n previousIndex\n } = swiper;\n let dir = direction;\n\n if (!dir) {\n if (activeIndex > previousIndex) dir = 'next';else if (activeIndex < previousIndex) dir = 'prev';else dir = 'reset';\n }\n\n swiper.emit(`transition${step}`);\n\n if (runCallbacks && activeIndex !== previousIndex) {\n if (dir === 'reset') {\n swiper.emit(`slideResetTransition${step}`);\n return;\n }\n\n swiper.emit(`slideChangeTransition${step}`);\n\n if (dir === 'next') {\n swiper.emit(`slideNextTransition${step}`);\n } else {\n swiper.emit(`slidePrevTransition${step}`);\n }\n }\n }\n\n function transitionStart(runCallbacks, direction) {\n if (runCallbacks === void 0) {\n runCallbacks = true;\n }\n\n const swiper = this;\n const {\n params\n } = swiper;\n if (params.cssMode) return;\n\n if (params.autoHeight) {\n swiper.updateAutoHeight();\n }\n\n transitionEmit({\n swiper,\n runCallbacks,\n direction,\n step: 'Start'\n });\n }\n\n function transitionEnd(runCallbacks, direction) {\n if (runCallbacks === void 0) {\n runCallbacks = true;\n }\n\n const swiper = this;\n const {\n params\n } = swiper;\n swiper.animating = false;\n if (params.cssMode) return;\n swiper.setTransition(0);\n transitionEmit({\n swiper,\n runCallbacks,\n direction,\n step: 'End'\n });\n }\n\n var transition = {\n setTransition,\n transitionStart,\n transitionEnd\n };\n\n function slideTo(index, speed, runCallbacks, internal, initial) {\n if (index === void 0) {\n index = 0;\n }\n\n if (speed === void 0) {\n speed = this.params.speed;\n }\n\n if (runCallbacks === void 0) {\n runCallbacks = true;\n }\n\n if (typeof index !== 'number' && typeof index !== 'string') {\n throw new Error(`The 'index' argument cannot have type other than 'number' or 'string'. [${typeof index}] given.`);\n }\n\n if (typeof index === 'string') {\n /**\n * The `index` argument converted from `string` to `number`.\n * @type {number}\n */\n const indexAsNumber = parseInt(index, 10);\n /**\n * Determines whether the `index` argument is a valid `number`\n * after being converted from the `string` type.\n * @type {boolean}\n */\n\n const isValidNumber = isFinite(indexAsNumber);\n\n if (!isValidNumber) {\n throw new Error(`The passed-in 'index' (string) couldn't be converted to 'number'. [${index}] given.`);\n } // Knowing that the converted `index` is a valid number,\n // we can update the original argument's value.\n\n\n index = indexAsNumber;\n }\n\n const swiper = this;\n let slideIndex = index;\n if (slideIndex < 0) slideIndex = 0;\n const {\n params,\n snapGrid,\n slidesGrid,\n previousIndex,\n activeIndex,\n rtlTranslate: rtl,\n wrapperEl,\n enabled\n } = swiper;\n\n if (swiper.animating && params.preventInteractionOnTransition || !enabled && !internal && !initial) {\n return false;\n }\n\n const skip = Math.min(swiper.params.slidesPerGroupSkip, slideIndex);\n let snapIndex = skip + Math.floor((slideIndex - skip) / swiper.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 const translate = -snapGrid[snapIndex]; // Update progress\n\n swiper.updateProgress(translate); // Normalize slideIndex\n\n if (params.normalizeSlideIndex) {\n for (let i = 0; i < slidesGrid.length; i += 1) {\n const normalizedTranslate = -Math.floor(translate * 100);\n const normalizedGrid = Math.floor(slidesGrid[i] * 100);\n const normalizedGridNext = Math.floor(slidesGrid[i + 1] * 100);\n\n if (typeof slidesGrid[i + 1] !== 'undefined') {\n if (normalizedTranslate >= normalizedGrid && normalizedTranslate < normalizedGridNext - (normalizedGridNext - normalizedGrid) / 2) {\n slideIndex = i;\n } else if (normalizedTranslate >= normalizedGrid && normalizedTranslate < normalizedGridNext) {\n slideIndex = i + 1;\n }\n } else if (normalizedTranslate >= normalizedGrid) {\n slideIndex = i;\n }\n }\n } // Directions locks\n\n\n if (swiper.initialized && slideIndex !== activeIndex) {\n if (!swiper.allowSlideNext && translate < swiper.translate && translate < swiper.minTranslate()) {\n return false;\n }\n\n if (!swiper.allowSlidePrev && translate > swiper.translate && translate > swiper.maxTranslate()) {\n if ((activeIndex || 0) !== slideIndex) return false;\n }\n }\n\n let direction;\n if (slideIndex > activeIndex) direction = 'next';else if (slideIndex < activeIndex) direction = 'prev';else direction = 'reset'; // Update Index\n\n if (rtl && -translate === swiper.translate || !rtl && translate === swiper.translate) {\n swiper.updateActiveIndex(slideIndex); // Update Height\n\n if (params.autoHeight) {\n swiper.updateAutoHeight();\n }\n\n swiper.updateSlidesClasses();\n\n if (params.effect !== 'slide') {\n swiper.setTranslate(translate);\n }\n\n if (direction !== 'reset') {\n swiper.transitionStart(runCallbacks, direction);\n swiper.transitionEnd(runCallbacks, direction);\n }\n\n return false;\n }\n\n if (params.cssMode) {\n const isH = swiper.isHorizontal();\n const t = rtl ? translate : -translate;\n\n if (speed === 0) {\n const isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n\n if (isVirtual) {\n swiper.wrapperEl.style.scrollSnapType = 'none';\n swiper._immediateVirtual = true;\n }\n\n wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = t;\n\n if (isVirtual) {\n requestAnimationFrame(() => {\n swiper.wrapperEl.style.scrollSnapType = '';\n swiper._swiperImmediateVirtual = false;\n });\n }\n } else {\n if (!swiper.support.smoothScroll) {\n animateCSSModeScroll({\n swiper,\n targetPosition: t,\n side: isH ? 'left' : 'top'\n });\n return true;\n }\n\n wrapperEl.scrollTo({\n [isH ? 'left' : 'top']: t,\n behavior: 'smooth'\n });\n }\n\n return true;\n }\n\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\n if (speed === 0) {\n swiper.transitionEnd(runCallbacks, direction);\n } else if (!swiper.animating) {\n swiper.animating = true;\n\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\n swiper.$wrapperEl[0].addEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd);\n swiper.$wrapperEl[0].addEventListener('webkitTransitionEnd', swiper.onSlideToWrapperTransitionEnd);\n }\n\n return true;\n }\n\n function slideToLoop(index, speed, runCallbacks, internal) {\n if (index === void 0) {\n index = 0;\n }\n\n if (speed === void 0) {\n speed = this.params.speed;\n }\n\n if (runCallbacks === void 0) {\n runCallbacks = true;\n }\n\n const swiper = this;\n let newIndex = index;\n\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) {\n speed = this.params.speed;\n }\n\n if (runCallbacks === void 0) {\n runCallbacks = true;\n }\n\n const swiper = this;\n const {\n animating,\n enabled,\n params\n } = swiper;\n if (!enabled) return swiper;\n let perGroup = params.slidesPerGroup;\n\n if (params.slidesPerView === 'auto' && params.slidesPerGroup === 1 && params.slidesPerGroupAuto) {\n perGroup = Math.max(swiper.slidesPerViewDynamic('current', true), 1);\n }\n\n const increment = swiper.activeIndex < params.slidesPerGroupSkip ? 1 : perGroup;\n\n if (params.loop) {\n if (animating && params.loopPreventsSlide) return false;\n swiper.loopFix(); // eslint-disable-next-line\n\n swiper._clientLeft = swiper.$wrapperEl[0].clientLeft;\n }\n\n if (params.rewind && swiper.isEnd) {\n return swiper.slideTo(0, speed, runCallbacks, internal);\n }\n\n return swiper.slideTo(swiper.activeIndex + increment, speed, runCallbacks, internal);\n }\n\n /* eslint no-unused-vars: \"off\" */\n function slidePrev(speed, runCallbacks, internal) {\n if (speed === void 0) {\n speed = this.params.speed;\n }\n\n if (runCallbacks === void 0) {\n runCallbacks = true;\n }\n\n const swiper = this;\n const {\n params,\n animating,\n snapGrid,\n slidesGrid,\n rtlTranslate,\n enabled\n } = swiper;\n if (!enabled) return swiper;\n\n if (params.loop) {\n if (animating && params.loopPreventsSlide) return false;\n swiper.loopFix(); // eslint-disable-next-line\n\n swiper._clientLeft = swiper.$wrapperEl[0].clientLeft;\n }\n\n const translate = rtlTranslate ? swiper.translate : -swiper.translate;\n\n function normalize(val) {\n if (val < 0) return -Math.floor(Math.abs(val));\n return Math.floor(val);\n }\n\n const normalizedTranslate = normalize(translate);\n const normalizedSnapGrid = snapGrid.map(val => normalize(val));\n let prevSnap = snapGrid[normalizedSnapGrid.indexOf(normalizedTranslate) - 1];\n\n if (typeof prevSnap === 'undefined' && params.cssMode) {\n let prevSnapIndex;\n snapGrid.forEach((snap, snapIndex) => {\n if (normalizedTranslate >= snap) {\n // prevSnap = snap;\n prevSnapIndex = snapIndex;\n }\n });\n\n if (typeof prevSnapIndex !== 'undefined') {\n prevSnap = snapGrid[prevSnapIndex > 0 ? prevSnapIndex - 1 : prevSnapIndex];\n }\n }\n\n let prevIndex = 0;\n\n if (typeof prevSnap !== 'undefined') {\n prevIndex = slidesGrid.indexOf(prevSnap);\n if (prevIndex < 0) prevIndex = swiper.activeIndex - 1;\n\n if (params.slidesPerView === 'auto' && params.slidesPerGroup === 1 && params.slidesPerGroupAuto) {\n prevIndex = prevIndex - swiper.slidesPerViewDynamic('previous', true) + 1;\n prevIndex = Math.max(prevIndex, 0);\n }\n }\n\n if (params.rewind && swiper.isBeginning) {\n const lastIndex = swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual ? swiper.virtual.slides.length - 1 : swiper.slides.length - 1;\n return swiper.slideTo(lastIndex, speed, runCallbacks, internal);\n }\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) {\n speed = this.params.speed;\n }\n\n if (runCallbacks === void 0) {\n runCallbacks = true;\n }\n\n const 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, threshold) {\n if (speed === void 0) {\n speed = this.params.speed;\n }\n\n if (runCallbacks === void 0) {\n runCallbacks = true;\n }\n\n if (threshold === void 0) {\n threshold = 0.5;\n }\n\n const swiper = this;\n let index = swiper.activeIndex;\n const skip = Math.min(swiper.params.slidesPerGroupSkip, index);\n const snapIndex = skip + Math.floor((index - skip) / swiper.params.slidesPerGroup);\n const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;\n\n if (translate >= swiper.snapGrid[snapIndex]) {\n // The current translate is on or after the current snap index, so the choice\n // is between the current index and the one after it.\n const currentSnap = swiper.snapGrid[snapIndex];\n const nextSnap = swiper.snapGrid[snapIndex + 1];\n\n if (translate - currentSnap > (nextSnap - currentSnap) * threshold) {\n index += swiper.params.slidesPerGroup;\n }\n } else {\n // The current translate is before the current snap index, so the choice\n // is between the current index and the one before it.\n const prevSnap = swiper.snapGrid[snapIndex - 1];\n const currentSnap = swiper.snapGrid[snapIndex];\n\n if (translate - prevSnap <= (currentSnap - prevSnap) * threshold) {\n index -= swiper.params.slidesPerGroup;\n }\n }\n\n index = Math.max(index, 0);\n index = Math.min(index, swiper.slidesGrid.length - 1);\n return swiper.slideTo(index, speed, runCallbacks, internal);\n }\n\n function slideToClickedSlide() {\n const swiper = this;\n const {\n params,\n $wrapperEl\n } = swiper;\n const slidesPerView = params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : params.slidesPerView;\n let slideToIndex = swiper.clickedIndex;\n let realIndex;\n\n if (params.loop) {\n if (swiper.animating) return;\n realIndex = parseInt($(swiper.clickedSlide).attr('data-swiper-slide-index'), 10);\n\n if (params.centeredSlides) {\n if (slideToIndex < swiper.loopedSlides - slidesPerView / 2 || slideToIndex > swiper.slides.length - swiper.loopedSlides + slidesPerView / 2) {\n swiper.loopFix();\n slideToIndex = $wrapperEl.children(`.${params.slideClass}[data-swiper-slide-index=\"${realIndex}\"]:not(.${params.slideDuplicateClass})`).eq(0).index();\n nextTick(() => {\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.children(`.${params.slideClass}[data-swiper-slide-index=\"${realIndex}\"]:not(.${params.slideDuplicateClass})`).eq(0).index();\n nextTick(() => {\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,\n slideToLoop,\n slideNext,\n slidePrev,\n slideReset,\n slideToClosest,\n slideToClickedSlide\n };\n\n function loopCreate() {\n const swiper = this;\n const document = getDocument();\n const {\n params,\n $wrapperEl\n } = swiper; // Remove duplicated slides\n\n const $selector = $wrapperEl.children().length > 0 ? $($wrapperEl.children()[0].parentNode) : $wrapperEl;\n $selector.children(`.${params.slideClass}.${params.slideDuplicateClass}`).remove();\n let slides = $selector.children(`.${params.slideClass}`);\n\n if (params.loopFillGroupWithBlank) {\n const blankSlidesNum = params.slidesPerGroup - slides.length % params.slidesPerGroup;\n\n if (blankSlidesNum !== params.slidesPerGroup) {\n for (let i = 0; i < blankSlidesNum; i += 1) {\n const blankNode = $(document.createElement('div')).addClass(`${params.slideClass} ${params.slideBlankClass}`);\n $selector.append(blankNode);\n }\n\n slides = $selector.children(`.${params.slideClass}`);\n }\n }\n\n if (params.slidesPerView === 'auto' && !params.loopedSlides) params.loopedSlides = slides.length;\n swiper.loopedSlides = Math.ceil(parseFloat(params.loopedSlides || params.slidesPerView, 10));\n swiper.loopedSlides += params.loopAdditionalSlides;\n\n if (swiper.loopedSlides > slides.length) {\n swiper.loopedSlides = slides.length;\n }\n\n const prependSlides = [];\n const appendSlides = [];\n slides.each((el, index) => {\n const slide = $(el);\n\n if (index < swiper.loopedSlides) {\n appendSlides.push(el);\n }\n\n if (index < slides.length && index >= slides.length - swiper.loopedSlides) {\n prependSlides.push(el);\n }\n\n slide.attr('data-swiper-slide-index', index);\n });\n\n for (let i = 0; i < appendSlides.length; i += 1) {\n $selector.append($(appendSlides[i].cloneNode(true)).addClass(params.slideDuplicateClass));\n }\n\n for (let i = prependSlides.length - 1; i >= 0; i -= 1) {\n $selector.prepend($(prependSlides[i].cloneNode(true)).addClass(params.slideDuplicateClass));\n }\n }\n\n function loopFix() {\n const swiper = this;\n swiper.emit('beforeLoopFix');\n const {\n activeIndex,\n slides,\n loopedSlides,\n allowSlidePrev,\n allowSlideNext,\n snapGrid,\n rtlTranslate: rtl\n } = swiper;\n let newIndex;\n swiper.allowSlidePrev = true;\n swiper.allowSlideNext = true;\n const snapTranslate = -snapGrid[activeIndex];\n const diff = snapTranslate - swiper.getTranslate(); // Fix For Negative Oversliding\n\n if (activeIndex < loopedSlides) {\n newIndex = slides.length - loopedSlides * 3 + activeIndex;\n newIndex += loopedSlides;\n const slideChanged = swiper.slideTo(newIndex, 0, false, true);\n\n if (slideChanged && diff !== 0) {\n swiper.setTranslate((rtl ? -swiper.translate : swiper.translate) - diff);\n }\n } else if (activeIndex >= slides.length - loopedSlides) {\n // Fix For Positive Oversliding\n newIndex = -slides.length + activeIndex + loopedSlides;\n newIndex += loopedSlides;\n const slideChanged = swiper.slideTo(newIndex, 0, false, true);\n\n if (slideChanged && diff !== 0) {\n swiper.setTranslate((rtl ? -swiper.translate : swiper.translate) - diff);\n }\n }\n\n swiper.allowSlidePrev = allowSlidePrev;\n swiper.allowSlideNext = allowSlideNext;\n swiper.emit('loopFix');\n }\n\n function loopDestroy() {\n const swiper = this;\n const {\n $wrapperEl,\n params,\n slides\n } = swiper;\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,\n loopFix,\n loopDestroy\n };\n\n function setGrabCursor(moving) {\n const swiper = this;\n if (swiper.support.touch || !swiper.params.simulateTouch || swiper.params.watchOverflow && swiper.isLocked || swiper.params.cssMode) return;\n const el = swiper.params.touchEventsTarget === 'container' ? swiper.el : swiper.wrapperEl;\n el.style.cursor = 'move';\n el.style.cursor = moving ? 'grabbing' : 'grab';\n }\n\n function unsetGrabCursor() {\n const swiper = this;\n\n if (swiper.support.touch || swiper.params.watchOverflow && swiper.isLocked || swiper.params.cssMode) {\n return;\n }\n\n swiper[swiper.params.touchEventsTarget === 'container' ? 'el' : 'wrapperEl'].style.cursor = '';\n }\n\n var grabCursor = {\n setGrabCursor,\n unsetGrabCursor\n };\n\n function closestElement(selector, base) {\n if (base === void 0) {\n base = this;\n }\n\n function __closestFrom(el) {\n if (!el || el === getDocument() || el === getWindow()) return null;\n if (el.assignedSlot) el = el.assignedSlot;\n const found = el.closest(selector);\n return found || __closestFrom(el.getRootNode().host);\n }\n\n return __closestFrom(base);\n }\n\n function onTouchStart(event) {\n const swiper = this;\n const document = getDocument();\n const window = getWindow();\n const data = swiper.touchEventsData;\n const {\n params,\n touches,\n enabled\n } = swiper;\n if (!enabled) return;\n\n if (swiper.animating && params.preventInteractionOnTransition) {\n return;\n }\n\n if (!swiper.animating && params.cssMode && params.loop) {\n swiper.loopFix();\n }\n\n let e = event;\n if (e.originalEvent) e = e.originalEvent;\n let $targetEl = $(e.target);\n\n if (params.touchEventsTarget === 'wrapper') {\n if (!$targetEl.closest(swiper.wrapperEl).length) return;\n }\n\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; // change target el for shadow root component\n\n const swipingClassHasValue = !!params.noSwipingClass && params.noSwipingClass !== '';\n\n if (swipingClassHasValue && e.target && e.target.shadowRoot && event.path && event.path[0]) {\n $targetEl = $(event.path[0]);\n }\n\n const noSwipingSelector = params.noSwipingSelector ? params.noSwipingSelector : `.${params.noSwipingClass}`;\n const isTargetShadow = !!(e.target && e.target.shadowRoot); // use closestElement for shadow root element to get the actual closest for nested shadow root element\n\n if (params.noSwiping && (isTargetShadow ? closestElement(noSwipingSelector, e.target) : $targetEl.closest(noSwipingSelector)[0])) {\n swiper.allowClick = true;\n return;\n }\n\n if (params.swipeHandler) {\n if (!$targetEl.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 const startX = touches.currentX;\n const startY = touches.currentY; // Do NOT start if iOS edge swipe is detected. Otherwise iOS app cannot swipe-to-go-back anymore\n\n const edgeSwipeDetection = params.edgeSwipeDetection || params.iOSEdgeSwipeDetection;\n const edgeSwipeThreshold = params.edgeSwipeThreshold || params.iOSEdgeSwipeThreshold;\n\n if (edgeSwipeDetection && (startX <= edgeSwipeThreshold || startX >= window.innerWidth - edgeSwipeThreshold)) {\n if (edgeSwipeDetection === 'prevent') {\n event.preventDefault();\n } else {\n return;\n }\n }\n\n Object.assign(data, {\n isTouched: true,\n isMoved: false,\n allowTouchCallbacks: true,\n isScrolling: undefined,\n startMoving: undefined\n });\n touches.startX = startX;\n touches.startY = startY;\n data.touchStartTime = now();\n swiper.allowClick = true;\n swiper.updateSize();\n swiper.swipeDirection = undefined;\n if (params.threshold > 0) data.allowThresholdMove = false;\n\n if (e.type !== 'touchstart') {\n let preventDefault = true;\n\n if ($targetEl.is(data.focusableElements)) {\n preventDefault = false;\n\n if ($targetEl[0].nodeName === 'SELECT') {\n data.isTouched = false;\n }\n }\n\n if (document.activeElement && $(document.activeElement).is(data.focusableElements) && document.activeElement !== $targetEl[0]) {\n document.activeElement.blur();\n }\n\n const shouldPreventDefault = preventDefault && swiper.allowTouchMove && params.touchStartPreventDefault;\n\n if ((params.touchStartForcePreventDefault || shouldPreventDefault) && !$targetEl[0].isContentEditable) {\n e.preventDefault();\n }\n }\n\n if (swiper.params.freeMode && swiper.params.freeMode.enabled && swiper.freeMode && swiper.animating && !params.cssMode) {\n swiper.freeMode.onTouchStart();\n }\n\n swiper.emit('touchStart', e);\n }\n\n function onTouchMove(event) {\n const document = getDocument();\n const swiper = this;\n const data = swiper.touchEventsData;\n const {\n params,\n touches,\n rtlTranslate: rtl,\n enabled\n } = swiper;\n if (!enabled) return;\n let e = event;\n if (e.originalEvent) e = e.originalEvent;\n\n if (!data.isTouched) {\n if (data.startMoving && data.isScrolling) {\n swiper.emit('touchMoveOpposite', e);\n }\n\n return;\n }\n\n if (data.isTouchEvent && e.type !== 'touchmove') return;\n const targetTouch = e.type === 'touchmove' && e.targetTouches && (e.targetTouches[0] || e.changedTouches[0]);\n const pageX = e.type === 'touchmove' ? targetTouch.pageX : e.pageX;\n const pageY = e.type === 'touchmove' ? targetTouch.pageY : e.pageY;\n\n if (e.preventedByNestedSwiper) {\n touches.startX = pageX;\n touches.startY = pageY;\n return;\n }\n\n if (!swiper.allowTouchMove) {\n if (!$(e.target).is(data.focusableElements)) {\n swiper.allowClick = false;\n }\n\n if (data.isTouched) {\n Object.assign(touches, {\n startX: pageX,\n startY: pageY,\n currentX: pageX,\n currentY: pageY\n });\n data.touchStartTime = now();\n }\n\n return;\n }\n\n if (data.isTouchEvent && params.touchReleaseOnEdges && !params.loop) {\n if (swiper.isVertical()) {\n // Vertical\n if (pageY < touches.startY && swiper.translate <= swiper.maxTranslate() || pageY > touches.startY && swiper.translate >= swiper.minTranslate()) {\n data.isTouched = false;\n data.isMoved = false;\n return;\n }\n } else if (pageX < touches.startX && swiper.translate <= swiper.maxTranslate() || pageX > touches.startX && swiper.translate >= swiper.minTranslate()) {\n return;\n }\n }\n\n if (data.isTouchEvent && document.activeElement) {\n if (e.target === document.activeElement && $(e.target).is(data.focusableElements)) {\n data.isMoved = true;\n swiper.allowClick = false;\n return;\n }\n }\n\n if (data.allowTouchCallbacks) {\n swiper.emit('touchMove', e);\n }\n\n if (e.targetTouches && e.targetTouches.length > 1) return;\n touches.currentX = pageX;\n touches.currentY = pageY;\n const diffX = touches.currentX - touches.startX;\n const diffY = touches.currentY - touches.startY;\n if (swiper.params.threshold && Math.sqrt(diffX ** 2 + diffY ** 2) < swiper.params.threshold) return;\n\n if (typeof data.isScrolling === 'undefined') {\n let touchAngle;\n\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\n if (data.isScrolling) {\n swiper.emit('touchMoveOpposite', e);\n }\n\n if (typeof data.startMoving === 'undefined') {\n if (touches.currentX !== touches.startX || touches.currentY !== touches.startY) {\n data.startMoving = true;\n }\n }\n\n if (data.isScrolling) {\n data.isTouched = false;\n return;\n }\n\n if (!data.startMoving) {\n return;\n }\n\n swiper.allowClick = false;\n\n if (!params.cssMode && e.cancelable) {\n e.preventDefault();\n }\n\n if (params.touchMoveStopPropagation && !params.nested) {\n e.stopPropagation();\n }\n\n if (!data.isMoved) {\n if (params.loop && !params.cssMode) {\n swiper.loopFix();\n }\n\n data.startTranslate = swiper.getTranslate();\n swiper.setTransition(0);\n\n if (swiper.animating) {\n swiper.$wrapperEl.trigger('webkitTransitionEnd transitionend');\n }\n\n data.allowMomentumBounce = false; // Grab Cursor\n\n if (params.grabCursor && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {\n swiper.setGrabCursor(true);\n }\n\n swiper.emit('sliderFirstMove', e);\n }\n\n swiper.emit('sliderMove', e);\n data.isMoved = true;\n let diff = swiper.isHorizontal() ? diffX : diffY;\n touches.diff = diff;\n diff *= params.touchRatio;\n if (rtl) diff = -diff;\n swiper.swipeDirection = diff > 0 ? 'prev' : 'next';\n data.currentTranslate = diff + data.startTranslate;\n let disableParentSwiper = true;\n let resistanceRatio = params.resistanceRatio;\n\n if (params.touchReleaseOnEdges) {\n resistanceRatio = 0;\n }\n\n if (diff > 0 && data.currentTranslate > swiper.minTranslate()) {\n disableParentSwiper = false;\n if (params.resistance) data.currentTranslate = swiper.minTranslate() - 1 + (-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 - (swiper.maxTranslate() - data.startTranslate - diff) ** resistanceRatio;\n }\n\n if (disableParentSwiper) {\n e.preventedByNestedSwiper = true;\n } // Directions locks\n\n\n if (!swiper.allowSlideNext && swiper.swipeDirection === 'next' && data.currentTranslate < data.startTranslate) {\n data.currentTranslate = data.startTranslate;\n }\n\n if (!swiper.allowSlidePrev && swiper.swipeDirection === 'prev' && data.currentTranslate > data.startTranslate) {\n data.currentTranslate = data.startTranslate;\n }\n\n if (!swiper.allowSlidePrev && !swiper.allowSlideNext) {\n data.currentTranslate = data.startTranslate;\n } // Threshold\n\n\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 || params.cssMode) return; // Update active index in free mode\n\n if (params.freeMode && params.freeMode.enabled && swiper.freeMode || params.watchSlidesProgress) {\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n\n if (swiper.params.freeMode && params.freeMode.enabled && swiper.freeMode) {\n swiper.freeMode.onTouchMove();\n } // Update progress\n\n\n swiper.updateProgress(data.currentTranslate); // Update translate\n\n swiper.setTranslate(data.currentTranslate);\n }\n\n function onTouchEnd(event) {\n const swiper = this;\n const data = swiper.touchEventsData;\n const {\n params,\n touches,\n rtlTranslate: rtl,\n slidesGrid,\n enabled\n } = swiper;\n if (!enabled) return;\n let e = event;\n if (e.originalEvent) e = e.originalEvent;\n\n if (data.allowTouchCallbacks) {\n swiper.emit('touchEnd', e);\n }\n\n data.allowTouchCallbacks = false;\n\n if (!data.isTouched) {\n if (data.isMoved && params.grabCursor) {\n swiper.setGrabCursor(false);\n }\n\n data.isMoved = false;\n data.startMoving = false;\n return;\n } // Return Grab Cursor\n\n\n if (params.grabCursor && data.isMoved && data.isTouched && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {\n swiper.setGrabCursor(false);\n } // Time diff\n\n\n const touchEndTime = now();\n const timeDiff = touchEndTime - data.touchStartTime; // Tap, doubleTap, Click\n\n if (swiper.allowClick) {\n const pathTree = e.path || e.composedPath && e.composedPath();\n swiper.updateClickedSlide(pathTree && pathTree[0] || e.target);\n swiper.emit('tap click', e);\n\n if (timeDiff < 300 && touchEndTime - data.lastClickTime < 300) {\n swiper.emit('doubleTap doubleClick', e);\n }\n }\n\n data.lastClickTime = now();\n nextTick(() => {\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\n data.isTouched = false;\n data.isMoved = false;\n data.startMoving = false;\n let currentPos;\n\n if (params.followFinger) {\n currentPos = rtl ? swiper.translate : -swiper.translate;\n } else {\n currentPos = -data.currentTranslate;\n }\n\n if (params.cssMode) {\n return;\n }\n\n if (swiper.params.freeMode && params.freeMode.enabled) {\n swiper.freeMode.onTouchEnd({\n currentPos\n });\n return;\n } // Find current slide\n\n\n let stopIndex = 0;\n let groupSize = swiper.slidesSizesGrid[0];\n\n for (let i = 0; i < slidesGrid.length; i += i < params.slidesPerGroupSkip ? 1 : params.slidesPerGroup) {\n const increment = i < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup;\n\n if (typeof slidesGrid[i + increment] !== 'undefined') {\n if (currentPos >= slidesGrid[i] && currentPos < slidesGrid[i + increment]) {\n stopIndex = i;\n groupSize = slidesGrid[i + increment] - 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 let rewindFirstIndex = null;\n let rewindLastIndex = null;\n\n if (params.rewind) {\n if (swiper.isBeginning) {\n rewindLastIndex = swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual ? swiper.virtual.slides.length - 1 : swiper.slides.length - 1;\n } else if (swiper.isEnd) {\n rewindFirstIndex = 0;\n }\n } // Find current slide size\n\n\n const ratio = (currentPos - slidesGrid[stopIndex]) / groupSize;\n const increment = stopIndex < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup;\n\n if (timeDiff > params.longSwipesMs) {\n // Long touches\n if (!params.longSwipes) {\n swiper.slideTo(swiper.activeIndex);\n return;\n }\n\n if (swiper.swipeDirection === 'next') {\n if (ratio >= params.longSwipesRatio) swiper.slideTo(params.rewind && swiper.isEnd ? rewindFirstIndex : stopIndex + increment);else swiper.slideTo(stopIndex);\n }\n\n if (swiper.swipeDirection === 'prev') {\n if (ratio > 1 - params.longSwipesRatio) {\n swiper.slideTo(stopIndex + increment);\n } else if (rewindLastIndex !== null && ratio < 0 && Math.abs(ratio) > params.longSwipesRatio) {\n swiper.slideTo(rewindLastIndex);\n } else {\n swiper.slideTo(stopIndex);\n }\n }\n } else {\n // Short swipes\n if (!params.shortSwipes) {\n swiper.slideTo(swiper.activeIndex);\n return;\n }\n\n const isNavButtonTarget = swiper.navigation && (e.target === swiper.navigation.nextEl || e.target === swiper.navigation.prevEl);\n\n if (!isNavButtonTarget) {\n if (swiper.swipeDirection === 'next') {\n swiper.slideTo(rewindFirstIndex !== null ? rewindFirstIndex : stopIndex + increment);\n }\n\n if (swiper.swipeDirection === 'prev') {\n swiper.slideTo(rewindLastIndex !== null ? rewindLastIndex : stopIndex);\n }\n } else if (e.target === swiper.navigation.nextEl) {\n swiper.slideTo(stopIndex + increment);\n } else {\n swiper.slideTo(stopIndex);\n }\n }\n }\n\n function onResize() {\n const swiper = this;\n const {\n params,\n el\n } = swiper;\n if (el && el.offsetWidth === 0) return; // Breakpoints\n\n if (params.breakpoints) {\n swiper.setBreakpoint();\n } // Save locks\n\n\n const {\n allowSlideNext,\n allowSlidePrev,\n snapGrid\n } = swiper; // Disable locks on resize\n\n swiper.allowSlideNext = true;\n swiper.allowSlidePrev = true;\n swiper.updateSize();\n swiper.updateSlides();\n swiper.updateSlidesClasses();\n\n if ((params.slidesPerView === 'auto' || params.slidesPerView > 1) && swiper.isEnd && !swiper.isBeginning && !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 } // Return locks after resize\n\n\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 const swiper = this;\n if (!swiper.enabled) return;\n\n if (!swiper.allowClick) {\n if (swiper.params.preventClicks) e.preventDefault();\n\n if (swiper.params.preventClicksPropagation && swiper.animating) {\n e.stopPropagation();\n e.stopImmediatePropagation();\n }\n }\n }\n\n function onScroll() {\n const swiper = this;\n const {\n wrapperEl,\n rtlTranslate,\n enabled\n } = swiper;\n if (!enabled) return;\n swiper.previousTranslate = swiper.translate;\n\n if (swiper.isHorizontal()) {\n swiper.translate = -wrapperEl.scrollLeft;\n } else {\n swiper.translate = -wrapperEl.scrollTop;\n } // eslint-disable-next-line\n\n\n if (swiper.translate === 0) swiper.translate = 0;\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n let newProgress;\n const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n\n if (translatesDiff === 0) {\n newProgress = 0;\n } else {\n newProgress = (swiper.translate - swiper.minTranslate()) / translatesDiff;\n }\n\n if (newProgress !== swiper.progress) {\n swiper.updateProgress(rtlTranslate ? -swiper.translate : swiper.translate);\n }\n\n swiper.emit('setTranslate', swiper.translate, false);\n }\n\n let dummyEventAttached = false;\n\n function dummyEventListener() {}\n\n const events = (swiper, method) => {\n const document = getDocument();\n const {\n params,\n touchEvents,\n el,\n wrapperEl,\n device,\n support\n } = swiper;\n const capture = !!params.nested;\n const domMethod = method === 'on' ? 'addEventListener' : 'removeEventListener';\n const swiperMethod = method; // Touch Events\n\n if (!support.touch) {\n el[domMethod](touchEvents.start, swiper.onTouchStart, false);\n document[domMethod](touchEvents.move, swiper.onTouchMove, capture);\n document[domMethod](touchEvents.end, swiper.onTouchEnd, false);\n } else {\n const passiveListener = touchEvents.start === 'touchstart' && support.passiveListener && params.passiveListeners ? {\n passive: true,\n capture: false\n } : false;\n el[domMethod](touchEvents.start, swiper.onTouchStart, passiveListener);\n el[domMethod](touchEvents.move, swiper.onTouchMove, support.passiveListener ? {\n passive: false,\n capture\n } : capture);\n el[domMethod](touchEvents.end, swiper.onTouchEnd, passiveListener);\n\n if (touchEvents.cancel) {\n el[domMethod](touchEvents.cancel, swiper.onTouchEnd, passiveListener);\n }\n } // Prevent Links Clicks\n\n\n if (params.preventClicks || params.preventClicksPropagation) {\n el[domMethod]('click', swiper.onClick, true);\n }\n\n if (params.cssMode) {\n wrapperEl[domMethod]('scroll', swiper.onScroll);\n } // Resize handler\n\n\n if (params.updateOnWindowResize) {\n swiper[swiperMethod](device.ios || device.android ? 'resize orientationchange observerUpdate' : 'resize observerUpdate', onResize, true);\n } else {\n swiper[swiperMethod]('observerUpdate', onResize, true);\n }\n };\n\n function attachEvents() {\n const swiper = this;\n const document = getDocument();\n const {\n params,\n support\n } = swiper;\n swiper.onTouchStart = onTouchStart.bind(swiper);\n swiper.onTouchMove = onTouchMove.bind(swiper);\n swiper.onTouchEnd = onTouchEnd.bind(swiper);\n\n if (params.cssMode) {\n swiper.onScroll = onScroll.bind(swiper);\n }\n\n swiper.onClick = onClick.bind(swiper);\n\n if (support.touch && !dummyEventAttached) {\n document.addEventListener('touchstart', dummyEventListener);\n dummyEventAttached = true;\n }\n\n events(swiper, 'on');\n }\n\n function detachEvents() {\n const swiper = this;\n events(swiper, 'off');\n }\n\n var events$1 = {\n attachEvents,\n detachEvents\n };\n\n const isGridEnabled = (swiper, params) => {\n return swiper.grid && params.grid && params.grid.rows > 1;\n };\n\n function setBreakpoint() {\n const swiper = this;\n const {\n activeIndex,\n initialized,\n loopedSlides = 0,\n params,\n $el\n } = swiper;\n const breakpoints = params.breakpoints;\n if (!breakpoints || breakpoints && Object.keys(breakpoints).length === 0) return; // Get breakpoint for window width and update parameters\n\n const breakpoint = swiper.getBreakpoint(breakpoints, swiper.params.breakpointsBase, swiper.el);\n if (!breakpoint || swiper.currentBreakpoint === breakpoint) return;\n const breakpointOnlyParams = breakpoint in breakpoints ? breakpoints[breakpoint] : undefined;\n const breakpointParams = breakpointOnlyParams || swiper.originalParams;\n const wasMultiRow = isGridEnabled(swiper, params);\n const isMultiRow = isGridEnabled(swiper, breakpointParams);\n const wasEnabled = params.enabled;\n\n if (wasMultiRow && !isMultiRow) {\n $el.removeClass(`${params.containerModifierClass}grid ${params.containerModifierClass}grid-column`);\n swiper.emitContainerClasses();\n } else if (!wasMultiRow && isMultiRow) {\n $el.addClass(`${params.containerModifierClass}grid`);\n\n if (breakpointParams.grid.fill && breakpointParams.grid.fill === 'column' || !breakpointParams.grid.fill && params.grid.fill === 'column') {\n $el.addClass(`${params.containerModifierClass}grid-column`);\n }\n\n swiper.emitContainerClasses();\n }\n\n const directionChanged = breakpointParams.direction && breakpointParams.direction !== params.direction;\n const needsReLoop = params.loop && (breakpointParams.slidesPerView !== params.slidesPerView || directionChanged);\n\n if (directionChanged && initialized) {\n swiper.changeDirection();\n }\n\n extend(swiper.params, breakpointParams);\n const isEnabled = swiper.params.enabled;\n Object.assign(swiper, {\n allowTouchMove: swiper.params.allowTouchMove,\n allowSlideNext: swiper.params.allowSlideNext,\n allowSlidePrev: swiper.params.allowSlidePrev\n });\n\n if (wasEnabled && !isEnabled) {\n swiper.disable();\n } else if (!wasEnabled && isEnabled) {\n swiper.enable();\n }\n\n swiper.currentBreakpoint = breakpoint;\n swiper.emit('_beforeBreakpoint', breakpointParams);\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 function getBreakpoint(breakpoints, base, containerEl) {\n if (base === void 0) {\n base = 'window';\n }\n\n if (!breakpoints || base === 'container' && !containerEl) return undefined;\n let breakpoint = false;\n const window = getWindow();\n const currentHeight = base === 'window' ? window.innerHeight : containerEl.clientHeight;\n const points = Object.keys(breakpoints).map(point => {\n if (typeof point === 'string' && point.indexOf('@') === 0) {\n const minRatio = parseFloat(point.substr(1));\n const value = currentHeight * minRatio;\n return {\n value,\n point\n };\n }\n\n return {\n value: point,\n point\n };\n });\n points.sort((a, b) => parseInt(a.value, 10) - parseInt(b.value, 10));\n\n for (let i = 0; i < points.length; i += 1) {\n const {\n point,\n value\n } = points[i];\n\n if (base === 'window') {\n if (window.matchMedia(`(min-width: ${value}px)`).matches) {\n breakpoint = point;\n }\n } else if (value <= containerEl.clientWidth) {\n breakpoint = point;\n }\n }\n\n return breakpoint || 'max';\n }\n\n var breakpoints = {\n setBreakpoint,\n getBreakpoint\n };\n\n function prepareClasses(entries, prefix) {\n const resultClasses = [];\n entries.forEach(item => {\n if (typeof item === 'object') {\n Object.keys(item).forEach(classNames => {\n if (item[classNames]) {\n resultClasses.push(prefix + classNames);\n }\n });\n } else if (typeof item === 'string') {\n resultClasses.push(prefix + item);\n }\n });\n return resultClasses;\n }\n\n function addClasses() {\n const swiper = this;\n const {\n classNames,\n params,\n rtl,\n $el,\n device,\n support\n } = swiper; // prettier-ignore\n\n const suffixes = prepareClasses(['initialized', params.direction, {\n 'pointer-events': !support.touch\n }, {\n 'free-mode': swiper.params.freeMode && params.freeMode.enabled\n }, {\n 'autoheight': params.autoHeight\n }, {\n 'rtl': rtl\n }, {\n 'grid': params.grid && params.grid.rows > 1\n }, {\n 'grid-column': params.grid && params.grid.rows > 1 && params.grid.fill === 'column'\n }, {\n 'android': device.android\n }, {\n 'ios': device.ios\n }, {\n 'css-mode': params.cssMode\n }, {\n 'centered': params.cssMode && params.centeredSlides\n }, {\n 'watch-progress': params.watchSlidesProgress\n }], params.containerModifierClass);\n classNames.push(...suffixes);\n $el.addClass([...classNames].join(' '));\n swiper.emitContainerClasses();\n }\n\n function removeClasses() {\n const swiper = this;\n const {\n $el,\n classNames\n } = swiper;\n $el.removeClass(classNames.join(' '));\n swiper.emitContainerClasses();\n }\n\n var classes = {\n addClasses,\n removeClasses\n };\n\n function loadImage(imageEl, src, srcset, sizes, checkForComplete, callback) {\n const window = getWindow();\n let image;\n\n function onReady() {\n if (callback) callback();\n }\n\n const isPicture = $(imageEl).parent('picture')[0];\n\n if (!isPicture && (!imageEl.complete || !checkForComplete)) {\n if (src) {\n image = new window.Image();\n image.onload = onReady;\n image.onerror = onReady;\n\n if (sizes) {\n image.sizes = sizes;\n }\n\n if (srcset) {\n image.srcset = srcset;\n }\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 const swiper = this;\n swiper.imagesToLoad = swiper.$el.find('img');\n\n function onReady() {\n if (typeof swiper === 'undefined' || swiper === null || !swiper || swiper.destroyed) return;\n if (swiper.imagesLoaded !== undefined) swiper.imagesLoaded += 1;\n\n if (swiper.imagesLoaded === swiper.imagesToLoad.length) {\n if (swiper.params.updateOnImagesReady) swiper.update();\n swiper.emit('imagesReady');\n }\n }\n\n for (let i = 0; i < swiper.imagesToLoad.length; i += 1) {\n const imageEl = swiper.imagesToLoad[i];\n swiper.loadImage(imageEl, imageEl.currentSrc || imageEl.getAttribute('src'), imageEl.srcset || imageEl.getAttribute('srcset'), imageEl.sizes || imageEl.getAttribute('sizes'), true, onReady);\n }\n }\n\n var images = {\n loadImage,\n preloadImages\n };\n\n function checkOverflow() {\n const swiper = this;\n const {\n isLocked: wasLocked,\n params\n } = swiper;\n const {\n slidesOffsetBefore\n } = params;\n\n if (slidesOffsetBefore) {\n const lastSlideIndex = swiper.slides.length - 1;\n const lastSlideRightEdge = swiper.slidesGrid[lastSlideIndex] + swiper.slidesSizesGrid[lastSlideIndex] + slidesOffsetBefore * 2;\n swiper.isLocked = swiper.size > lastSlideRightEdge;\n } else {\n swiper.isLocked = swiper.snapGrid.length === 1;\n }\n\n if (params.allowSlideNext === true) {\n swiper.allowSlideNext = !swiper.isLocked;\n }\n\n if (params.allowSlidePrev === true) {\n swiper.allowSlidePrev = !swiper.isLocked;\n }\n\n if (wasLocked && wasLocked !== swiper.isLocked) {\n swiper.isEnd = false;\n }\n\n if (wasLocked !== swiper.isLocked) {\n swiper.emit(swiper.isLocked ? 'lock' : 'unlock');\n }\n }\n\n var checkOverflow$1 = {\n checkOverflow\n };\n\n var defaults = {\n init: true,\n direction: 'horizontal',\n touchEventsTarget: 'wrapper',\n initialSlide: 0,\n speed: 300,\n cssMode: false,\n updateOnWindowResize: true,\n resizeObserver: true,\n nested: false,\n createElements: false,\n enabled: true,\n focusableElements: 'input, select, option, textarea, button, video, label',\n // Overrides\n width: null,\n height: null,\n //\n preventInteractionOnTransition: false,\n // ssr\n userAgent: null,\n url: null,\n // To support iOS's swipe-to-go-back gesture (when being used in-app).\n edgeSwipeDetection: false,\n edgeSwipeThreshold: 20,\n // Autoheight\n autoHeight: false,\n // Set wrapper width\n setWrapperSize: false,\n // Virtual Translate\n virtualTranslate: false,\n // Effects\n effect: 'slide',\n // 'slide' or 'fade' or 'cube' or 'coverflow' or 'flip'\n // Breakpoints\n breakpoints: undefined,\n breakpointsBase: 'window',\n // Slides grid\n spaceBetween: 0,\n slidesPerView: 1,\n slidesPerGroup: 1,\n slidesPerGroupSkip: 0,\n slidesPerGroupAuto: false,\n centeredSlides: false,\n centeredSlidesBounds: false,\n slidesOffsetBefore: 0,\n // in px\n slidesOffsetAfter: 0,\n // in px\n normalizeSlideIndex: true,\n centerInsufficientSlides: false,\n // Disable swiper and hide navigation when container not overflow\n watchOverflow: true,\n // Round length\n roundLengths: false,\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: false,\n touchStartPreventDefault: true,\n touchStartForcePreventDefault: false,\n touchReleaseOnEdges: false,\n // Unique Navigation Elements\n uniqueNavElements: true,\n // Resistance\n resistance: true,\n resistanceRatio: 0.85,\n // Progress\n watchSlidesProgress: false,\n // Cursor\n grabCursor: false,\n // Clicks\n preventClicks: true,\n preventClicksPropagation: true,\n slideToClickedSlide: false,\n // Images\n preloadImages: true,\n updateOnImagesReady: true,\n // loop\n loop: false,\n loopAdditionalSlides: 0,\n loopedSlides: null,\n loopFillGroupWithBlank: false,\n loopPreventsSlide: true,\n // rewind\n rewind: false,\n // Swiping/no swiping\n allowSlidePrev: true,\n allowSlideNext: true,\n swipeHandler: null,\n // '.swipe-handler',\n noSwiping: true,\n noSwipingClass: 'swiper-no-swiping',\n noSwipingSelector: null,\n // Passive Listeners\n passiveListeners: true,\n maxBackfaceHiddenSlides: 10,\n // NS\n containerModifierClass: 'swiper-',\n // 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 // Callbacks\n runCallbacksOnInit: true,\n // Internals\n _emitClasses: false\n };\n\n function moduleExtendParams(params, allModulesParams) {\n return function extendParams(obj) {\n if (obj === void 0) {\n obj = {};\n }\n\n const moduleParamName = Object.keys(obj)[0];\n const moduleParams = obj[moduleParamName];\n\n if (typeof moduleParams !== 'object' || moduleParams === null) {\n extend(allModulesParams, obj);\n return;\n }\n\n if (['navigation', 'pagination', 'scrollbar'].indexOf(moduleParamName) >= 0 && params[moduleParamName] === true) {\n params[moduleParamName] = {\n auto: true\n };\n }\n\n if (!(moduleParamName in params && 'enabled' in moduleParams)) {\n extend(allModulesParams, obj);\n return;\n }\n\n if (params[moduleParamName] === true) {\n params[moduleParamName] = {\n enabled: true\n };\n }\n\n if (typeof params[moduleParamName] === 'object' && !('enabled' in params[moduleParamName])) {\n params[moduleParamName].enabled = true;\n }\n\n if (!params[moduleParamName]) params[moduleParamName] = {\n enabled: false\n };\n extend(allModulesParams, obj);\n };\n }\n\n /* eslint no-param-reassign: \"off\" */\n const prototypes = {\n eventsEmitter,\n update,\n translate,\n transition,\n slide,\n loop,\n grabCursor,\n events: events$1,\n breakpoints,\n checkOverflow: checkOverflow$1,\n classes,\n images\n };\n const extendedDefaults = {};\n\n class Swiper {\n constructor() {\n let el;\n let params;\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n if (args.length === 1 && args[0].constructor && Object.prototype.toString.call(args[0]).slice(8, -1) === 'Object') {\n params = args[0];\n } else {\n [el, params] = args;\n }\n\n if (!params) params = {};\n params = extend({}, params);\n if (el && !params.el) params.el = el;\n\n if (params.el && $(params.el).length > 1) {\n const swipers = [];\n $(params.el).each(containerEl => {\n const newParams = extend({}, params, {\n el: containerEl\n });\n swipers.push(new Swiper(newParams));\n });\n return swipers;\n } // Swiper Instance\n\n\n const swiper = this;\n swiper.__swiper__ = true;\n swiper.support = getSupport();\n swiper.device = getDevice({\n userAgent: params.userAgent\n });\n swiper.browser = getBrowser();\n swiper.eventsListeners = {};\n swiper.eventsAnyListeners = [];\n swiper.modules = [...swiper.__modules__];\n\n if (params.modules && Array.isArray(params.modules)) {\n swiper.modules.push(...params.modules);\n }\n\n const allModulesParams = {};\n swiper.modules.forEach(mod => {\n mod({\n swiper,\n extendParams: moduleExtendParams(params, allModulesParams),\n on: swiper.on.bind(swiper),\n once: swiper.once.bind(swiper),\n off: swiper.off.bind(swiper),\n emit: swiper.emit.bind(swiper)\n });\n }); // Extend defaults with modules params\n\n const swiperParams = extend({}, defaults, allModulesParams); // Extend defaults with passed params\n\n swiper.params = extend({}, swiperParams, extendedDefaults, params);\n swiper.originalParams = extend({}, swiper.params);\n swiper.passedParams = extend({}, params); // add event listeners\n\n if (swiper.params && swiper.params.on) {\n Object.keys(swiper.params.on).forEach(eventName => {\n swiper.on(eventName, swiper.params.on[eventName]);\n });\n }\n\n if (swiper.params && swiper.params.onAny) {\n swiper.onAny(swiper.params.onAny);\n } // Save Dom lib\n\n\n swiper.$ = $; // Extend Swiper\n\n Object.assign(swiper, {\n enabled: swiper.params.enabled,\n el,\n // Classes\n classNames: [],\n // Slides\n slides: $(),\n slidesGrid: [],\n snapGrid: [],\n slidesSizesGrid: [],\n\n // isDirection\n isHorizontal() {\n return swiper.params.direction === 'horizontal';\n },\n\n isVertical() {\n return swiper.params.direction === 'vertical';\n },\n\n // Indexes\n activeIndex: 0,\n realIndex: 0,\n //\n isBeginning: true,\n isEnd: false,\n // Props\n translate: 0,\n previousTranslate: 0,\n progress: 0,\n velocity: 0,\n animating: false,\n // Locks\n allowSlideNext: swiper.params.allowSlideNext,\n allowSlidePrev: swiper.params.allowSlidePrev,\n // Touch Events\n touchEvents: function touchEvents() {\n const touch = ['touchstart', 'touchmove', 'touchend', 'touchcancel'];\n const desktop = ['pointerdown', 'pointermove', 'pointerup'];\n swiper.touchEventsTouch = {\n start: touch[0],\n move: touch[1],\n end: touch[2],\n cancel: touch[3]\n };\n swiper.touchEventsDesktop = {\n start: desktop[0],\n move: desktop[1],\n end: desktop[2]\n };\n return swiper.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 focusableElements: swiper.params.focusableElements,\n // Last click time\n lastClickTime: now(),\n clickTimeout: undefined,\n // Velocities\n velocities: [],\n allowMomentumBounce: undefined,\n isTouchEvent: undefined,\n startMoving: undefined\n },\n // Clicks\n allowClick: true,\n // Touches\n allowTouchMove: swiper.params.allowTouchMove,\n touches: {\n startX: 0,\n startY: 0,\n currentX: 0,\n currentY: 0,\n diff: 0\n },\n // Images\n imagesToLoad: [],\n imagesLoaded: 0\n });\n swiper.emit('_swiper'); // Init\n\n if (swiper.params.init) {\n swiper.init();\n } // Return app instance\n\n\n return swiper;\n }\n\n enable() {\n const swiper = this;\n if (swiper.enabled) return;\n swiper.enabled = true;\n\n if (swiper.params.grabCursor) {\n swiper.setGrabCursor();\n }\n\n swiper.emit('enable');\n }\n\n disable() {\n const swiper = this;\n if (!swiper.enabled) return;\n swiper.enabled = false;\n\n if (swiper.params.grabCursor) {\n swiper.unsetGrabCursor();\n }\n\n swiper.emit('disable');\n }\n\n setProgress(progress, speed) {\n const swiper = this;\n progress = Math.min(Math.max(progress, 0), 1);\n const min = swiper.minTranslate();\n const max = swiper.maxTranslate();\n const current = (max - min) * progress + min;\n swiper.translateTo(current, typeof speed === 'undefined' ? 0 : speed);\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n\n emitContainerClasses() {\n const swiper = this;\n if (!swiper.params._emitClasses || !swiper.el) return;\n const cls = swiper.el.className.split(' ').filter(className => {\n return className.indexOf('swiper') === 0 || className.indexOf(swiper.params.containerModifierClass) === 0;\n });\n swiper.emit('_containerClasses', cls.join(' '));\n }\n\n getSlideClasses(slideEl) {\n const swiper = this;\n if (swiper.destroyed) return '';\n return slideEl.className.split(' ').filter(className => {\n return className.indexOf('swiper-slide') === 0 || className.indexOf(swiper.params.slideClass) === 0;\n }).join(' ');\n }\n\n emitSlidesClasses() {\n const swiper = this;\n if (!swiper.params._emitClasses || !swiper.el) return;\n const updates = [];\n swiper.slides.each(slideEl => {\n const classNames = swiper.getSlideClasses(slideEl);\n updates.push({\n slideEl,\n classNames\n });\n swiper.emit('_slideClass', slideEl, classNames);\n });\n swiper.emit('_slideClasses', updates);\n }\n\n slidesPerViewDynamic(view, exact) {\n if (view === void 0) {\n view = 'current';\n }\n\n if (exact === void 0) {\n exact = false;\n }\n\n const swiper = this;\n const {\n params,\n slides,\n slidesGrid,\n slidesSizesGrid,\n size: swiperSize,\n activeIndex\n } = swiper;\n let spv = 1;\n\n if (params.centeredSlides) {\n let slideSize = slides[activeIndex].swiperSlideSize;\n let breakLoop;\n\n for (let 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\n for (let i = activeIndex - 1; i >= 0; i -= 1) {\n if (slides[i] && !breakLoop) {\n slideSize += slides[i].swiperSlideSize;\n spv += 1;\n if (slideSize > swiperSize) breakLoop = true;\n }\n }\n } else {\n // eslint-disable-next-line\n if (view === 'current') {\n for (let i = activeIndex + 1; i < slides.length; i += 1) {\n const slideInView = exact ? slidesGrid[i] + slidesSizesGrid[i] - slidesGrid[activeIndex] < swiperSize : slidesGrid[i] - slidesGrid[activeIndex] < swiperSize;\n\n if (slideInView) {\n spv += 1;\n }\n }\n } else {\n // previous\n for (let i = activeIndex - 1; i >= 0; i -= 1) {\n const slideInView = slidesGrid[activeIndex] - slidesGrid[i] < swiperSize;\n\n if (slideInView) {\n spv += 1;\n }\n }\n }\n }\n\n return spv;\n }\n\n update() {\n const swiper = this;\n if (!swiper || swiper.destroyed) return;\n const {\n snapGrid,\n params\n } = swiper; // Breakpoints\n\n if (params.breakpoints) {\n swiper.setBreakpoint();\n }\n\n swiper.updateSize();\n swiper.updateSlides();\n swiper.updateProgress();\n swiper.updateSlidesClasses();\n\n function setTranslate() {\n const translateValue = swiper.rtlTranslate ? swiper.translate * -1 : swiper.translate;\n const newTranslate = Math.min(Math.max(translateValue, swiper.maxTranslate()), swiper.minTranslate());\n swiper.setTranslate(newTranslate);\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n\n let translated;\n\n if (swiper.params.freeMode && swiper.params.freeMode.enabled) {\n setTranslate();\n\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\n if (!translated) {\n setTranslate();\n }\n }\n\n if (params.watchOverflow && snapGrid !== swiper.snapGrid) {\n swiper.checkOverflow();\n }\n\n swiper.emit('update');\n }\n\n changeDirection(newDirection, needUpdate) {\n if (needUpdate === void 0) {\n needUpdate = true;\n }\n\n const swiper = this;\n const currentDirection = swiper.params.direction;\n\n if (!newDirection) {\n // eslint-disable-next-line\n newDirection = currentDirection === 'horizontal' ? 'vertical' : 'horizontal';\n }\n\n if (newDirection === currentDirection || newDirection !== 'horizontal' && newDirection !== 'vertical') {\n return swiper;\n }\n\n swiper.$el.removeClass(`${swiper.params.containerModifierClass}${currentDirection}`).addClass(`${swiper.params.containerModifierClass}${newDirection}`);\n swiper.emitContainerClasses();\n swiper.params.direction = newDirection;\n swiper.slides.each(slideEl => {\n if (newDirection === 'vertical') {\n slideEl.style.width = '';\n } else {\n slideEl.style.height = '';\n }\n });\n swiper.emit('changeDirection');\n if (needUpdate) swiper.update();\n return swiper;\n }\n\n mount(el) {\n const swiper = this;\n if (swiper.mounted) return true; // Find el\n\n const $el = $(el || swiper.params.el);\n el = $el[0];\n\n if (!el) {\n return false;\n }\n\n el.swiper = swiper;\n\n const getWrapperSelector = () => {\n return `.${(swiper.params.wrapperClass || '').trim().split(' ').join('.')}`;\n };\n\n const getWrapper = () => {\n if (el && el.shadowRoot && el.shadowRoot.querySelector) {\n const res = $(el.shadowRoot.querySelector(getWrapperSelector())); // Children needs to return slot items\n\n res.children = options => $el.children(options);\n\n return res;\n }\n\n return $el.children(getWrapperSelector());\n }; // Find Wrapper\n\n\n let $wrapperEl = getWrapper();\n\n if ($wrapperEl.length === 0 && swiper.params.createElements) {\n const document = getDocument();\n const wrapper = document.createElement('div');\n $wrapperEl = $(wrapper);\n wrapper.className = swiper.params.wrapperClass;\n $el.append(wrapper);\n $el.children(`.${swiper.params.slideClass}`).each(slideEl => {\n $wrapperEl.append(slideEl);\n });\n }\n\n Object.assign(swiper, {\n $el,\n el,\n $wrapperEl,\n wrapperEl: $wrapperEl[0],\n mounted: true,\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 return true;\n }\n\n init(el) {\n const swiper = this;\n if (swiper.initialized) return swiper;\n const mounted = swiper.mount(el);\n if (mounted === false) return swiper;\n swiper.emit('beforeInit'); // Set breakpoint\n\n if (swiper.params.breakpoints) {\n swiper.setBreakpoint();\n } // Add Classes\n\n\n swiper.addClasses(); // Create loop\n\n if (swiper.params.loop) {\n swiper.loopCreate();\n } // Update size\n\n\n swiper.updateSize(); // Update slides\n\n swiper.updateSlides();\n\n if (swiper.params.watchOverflow) {\n swiper.checkOverflow();\n } // Set Grab Cursor\n\n\n if (swiper.params.grabCursor && swiper.enabled) {\n swiper.setGrabCursor();\n }\n\n if (swiper.params.preloadImages) {\n swiper.preloadImages();\n } // Slide To Initial Slide\n\n\n if (swiper.params.loop) {\n swiper.slideTo(swiper.params.initialSlide + swiper.loopedSlides, 0, swiper.params.runCallbacksOnInit, false, true);\n } else {\n swiper.slideTo(swiper.params.initialSlide, 0, swiper.params.runCallbacksOnInit, false, true);\n } // Attach events\n\n\n swiper.attachEvents(); // Init Flag\n\n swiper.initialized = true; // Emit\n\n swiper.emit('init');\n swiper.emit('afterInit');\n return swiper;\n }\n\n destroy(deleteInstance, cleanStyles) {\n if (deleteInstance === void 0) {\n deleteInstance = true;\n }\n\n if (cleanStyles === void 0) {\n cleanStyles = true;\n }\n\n const swiper = this;\n const {\n params,\n $el,\n $wrapperEl,\n slides\n } = swiper;\n\n if (typeof swiper.params === 'undefined' || swiper.destroyed) {\n return null;\n }\n\n swiper.emit('beforeDestroy'); // Init Flag\n\n swiper.initialized = false; // Detach events\n\n swiper.detachEvents(); // Destroy loop\n\n if (params.loop) {\n swiper.loopDestroy();\n } // Cleanup styles\n\n\n if (cleanStyles) {\n swiper.removeClasses();\n $el.removeAttr('style');\n $wrapperEl.removeAttr('style');\n\n if (slides && slides.length) {\n slides.removeClass([params.slideVisibleClass, params.slideActiveClass, params.slideNextClass, params.slidePrevClass].join(' ')).removeAttr('style').removeAttr('data-swiper-slide-index');\n }\n }\n\n swiper.emit('destroy'); // Detach emitter events\n\n Object.keys(swiper.eventsListeners).forEach(eventName => {\n swiper.off(eventName);\n });\n\n if (deleteInstance !== false) {\n swiper.$el[0].swiper = null;\n deleteProps(swiper);\n }\n\n swiper.destroyed = true;\n return null;\n }\n\n static extendDefaults(newDefaults) {\n extend(extendedDefaults, newDefaults);\n }\n\n static get extendedDefaults() {\n return extendedDefaults;\n }\n\n static get defaults() {\n return defaults;\n }\n\n static installModule(mod) {\n if (!Swiper.prototype.__modules__) Swiper.prototype.__modules__ = [];\n const modules = Swiper.prototype.__modules__;\n\n if (typeof mod === 'function' && modules.indexOf(mod) < 0) {\n modules.push(mod);\n }\n }\n\n static use(module) {\n if (Array.isArray(module)) {\n module.forEach(m => Swiper.installModule(m));\n return Swiper;\n }\n\n Swiper.installModule(module);\n return Swiper;\n }\n\n }\n\n Object.keys(prototypes).forEach(prototypeGroup => {\n Object.keys(prototypes[prototypeGroup]).forEach(protoMethod => {\n Swiper.prototype[protoMethod] = prototypes[prototypeGroup][protoMethod];\n });\n });\n Swiper.use([Resize, Observer]);\n\n function Virtual(_ref) {\n let {\n swiper,\n extendParams,\n on,\n emit\n } = _ref;\n extendParams({\n virtual: {\n enabled: false,\n slides: [],\n cache: true,\n renderSlide: null,\n renderExternal: null,\n renderExternalUpdate: true,\n addSlidesBefore: 0,\n addSlidesAfter: 0\n }\n });\n let cssModeTimeout;\n swiper.virtual = {\n cache: {},\n from: undefined,\n to: undefined,\n slides: [],\n offset: 0,\n slidesGrid: []\n };\n\n function renderSlide(slide, index) {\n const params = swiper.params.virtual;\n\n if (params.cache && swiper.virtual.cache[index]) {\n return swiper.virtual.cache[index];\n }\n\n const $slideEl = params.renderSlide ? $(params.renderSlide.call(swiper, slide, index)) : $(`<div class=\"${swiper.params.slideClass}\" data-swiper-slide-index=\"${index}\">${slide}</div>`);\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\n function update(force) {\n const {\n slidesPerView,\n slidesPerGroup,\n centeredSlides\n } = swiper.params;\n const {\n addSlidesBefore,\n addSlidesAfter\n } = swiper.params.virtual;\n const {\n from: previousFrom,\n to: previousTo,\n slides,\n slidesGrid: previousSlidesGrid,\n offset: previousOffset\n } = swiper.virtual;\n\n if (!swiper.params.cssMode) {\n swiper.updateActiveIndex();\n }\n\n const activeIndex = swiper.activeIndex || 0;\n let offsetProp;\n if (swiper.rtlTranslate) offsetProp = 'right';else offsetProp = swiper.isHorizontal() ? 'left' : 'top';\n let slidesAfter;\n let slidesBefore;\n\n if (centeredSlides) {\n slidesAfter = Math.floor(slidesPerView / 2) + slidesPerGroup + addSlidesAfter;\n slidesBefore = Math.floor(slidesPerView / 2) + slidesPerGroup + addSlidesBefore;\n } else {\n slidesAfter = slidesPerView + (slidesPerGroup - 1) + addSlidesAfter;\n slidesBefore = slidesPerGroup + addSlidesBefore;\n }\n\n const from = Math.max((activeIndex || 0) - slidesBefore, 0);\n const to = Math.min((activeIndex || 0) + slidesAfter, slides.length - 1);\n const offset = (swiper.slidesGrid[from] || 0) - (swiper.slidesGrid[0] || 0);\n Object.assign(swiper.virtual, {\n from,\n to,\n offset,\n slidesGrid: swiper.slidesGrid\n });\n\n function onRendered() {\n swiper.updateSlides();\n swiper.updateProgress();\n swiper.updateSlidesClasses();\n\n if (swiper.lazy && swiper.params.lazy.enabled) {\n swiper.lazy.load();\n }\n\n emit('virtualUpdate');\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\n swiper.updateProgress();\n emit('virtualUpdate');\n return;\n }\n\n if (swiper.params.virtual.renderExternal) {\n swiper.params.virtual.renderExternal.call(swiper, {\n offset,\n from,\n to,\n slides: function getSlides() {\n const slidesToRender = [];\n\n for (let i = from; i <= to; i += 1) {\n slidesToRender.push(slides[i]);\n }\n\n return slidesToRender;\n }()\n });\n\n if (swiper.params.virtual.renderExternalUpdate) {\n onRendered();\n } else {\n emit('virtualUpdate');\n }\n\n return;\n }\n\n const prependIndexes = [];\n const appendIndexes = [];\n\n if (force) {\n swiper.$wrapperEl.find(`.${swiper.params.slideClass}`).remove();\n } else {\n for (let 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\n for (let i = 0; i < slides.length; i += 1) {\n if (i >= from && i <= to) {\n if (typeof previousTo === 'undefined' || force) {\n appendIndexes.push(i);\n } else {\n if (i > previousTo) appendIndexes.push(i);\n if (i < previousFrom) prependIndexes.push(i);\n }\n }\n }\n\n appendIndexes.forEach(index => {\n swiper.$wrapperEl.append(renderSlide(slides[index], index));\n });\n prependIndexes.sort((a, b) => b - a).forEach(index => {\n swiper.$wrapperEl.prepend(renderSlide(slides[index], index));\n });\n swiper.$wrapperEl.children('.swiper-slide').css(offsetProp, `${offset}px`);\n onRendered();\n }\n\n function appendSlide(slides) {\n if (typeof slides === 'object' && 'length' in slides) {\n for (let 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\n update(true);\n }\n\n function prependSlide(slides) {\n const activeIndex = swiper.activeIndex;\n let newActiveIndex = activeIndex + 1;\n let numberOfNewSlides = 1;\n\n if (Array.isArray(slides)) {\n for (let i = 0; i < slides.length; i += 1) {\n if (slides[i]) swiper.virtual.slides.unshift(slides[i]);\n }\n\n newActiveIndex = activeIndex + slides.length;\n numberOfNewSlides = slides.length;\n } else {\n swiper.virtual.slides.unshift(slides);\n }\n\n if (swiper.params.virtual.cache) {\n const cache = swiper.virtual.cache;\n const newCache = {};\n Object.keys(cache).forEach(cachedIndex => {\n const $cachedEl = cache[cachedIndex];\n const cachedElIndex = $cachedEl.attr('data-swiper-slide-index');\n\n if (cachedElIndex) {\n $cachedEl.attr('data-swiper-slide-index', parseInt(cachedElIndex, 10) + numberOfNewSlides);\n }\n\n newCache[parseInt(cachedIndex, 10) + numberOfNewSlides] = $cachedEl;\n });\n swiper.virtual.cache = newCache;\n }\n\n update(true);\n swiper.slideTo(newActiveIndex, 0);\n }\n\n function removeSlide(slidesIndexes) {\n if (typeof slidesIndexes === 'undefined' || slidesIndexes === null) return;\n let activeIndex = swiper.activeIndex;\n\n if (Array.isArray(slidesIndexes)) {\n for (let i = slidesIndexes.length - 1; i >= 0; i -= 1) {\n swiper.virtual.slides.splice(slidesIndexes[i], 1);\n\n if (swiper.params.virtual.cache) {\n delete swiper.virtual.cache[slidesIndexes[i]];\n }\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\n if (swiper.params.virtual.cache) {\n delete swiper.virtual.cache[slidesIndexes];\n }\n\n if (slidesIndexes < activeIndex) activeIndex -= 1;\n activeIndex = Math.max(activeIndex, 0);\n }\n\n update(true);\n swiper.slideTo(activeIndex, 0);\n }\n\n function removeAllSlides() {\n swiper.virtual.slides = [];\n\n if (swiper.params.virtual.cache) {\n swiper.virtual.cache = {};\n }\n\n update(true);\n swiper.slideTo(0, 0);\n }\n\n on('beforeInit', () => {\n if (!swiper.params.virtual.enabled) return;\n swiper.virtual.slides = swiper.params.virtual.slides;\n swiper.classNames.push(`${swiper.params.containerModifierClass}virtual`);\n swiper.params.watchSlidesProgress = true;\n swiper.originalParams.watchSlidesProgress = true;\n\n if (!swiper.params.initialSlide) {\n update();\n }\n });\n on('setTranslate', () => {\n if (!swiper.params.virtual.enabled) return;\n\n if (swiper.params.cssMode && !swiper._immediateVirtual) {\n clearTimeout(cssModeTimeout);\n cssModeTimeout = setTimeout(() => {\n update();\n }, 100);\n } else {\n update();\n }\n });\n on('init update resize', () => {\n if (!swiper.params.virtual.enabled) return;\n\n if (swiper.params.cssMode) {\n setCSSProperty(swiper.wrapperEl, '--swiper-virtual-size', `${swiper.virtualSize}px`);\n }\n });\n Object.assign(swiper.virtual, {\n appendSlide,\n prependSlide,\n removeSlide,\n removeAllSlides,\n update\n });\n }\n\n /* eslint-disable consistent-return */\n function Keyboard(_ref) {\n let {\n swiper,\n extendParams,\n on,\n emit\n } = _ref;\n const document = getDocument();\n const window = getWindow();\n swiper.keyboard = {\n enabled: false\n };\n extendParams({\n keyboard: {\n enabled: false,\n onlyInViewport: true,\n pageUpDown: true\n }\n });\n\n function handle(event) {\n if (!swiper.enabled) return;\n const {\n rtlTranslate: rtl\n } = swiper;\n let e = event;\n if (e.originalEvent) e = e.originalEvent; // jquery fix\n\n const kc = e.keyCode || e.charCode;\n const pageUpDown = swiper.params.keyboard.pageUpDown;\n const isPageUp = pageUpDown && kc === 33;\n const isPageDown = pageUpDown && kc === 34;\n const isArrowLeft = kc === 37;\n const isArrowRight = kc === 39;\n const isArrowUp = kc === 38;\n const isArrowDown = kc === 40; // Directions locks\n\n if (!swiper.allowSlideNext && (swiper.isHorizontal() && isArrowRight || swiper.isVertical() && isArrowDown || isPageDown)) {\n return false;\n }\n\n if (!swiper.allowSlidePrev && (swiper.isHorizontal() && isArrowLeft || swiper.isVertical() && isArrowUp || isPageUp)) {\n return false;\n }\n\n if (e.shiftKey || e.altKey || e.ctrlKey || e.metaKey) {\n return undefined;\n }\n\n if (document.activeElement && document.activeElement.nodeName && (document.activeElement.nodeName.toLowerCase() === 'input' || document.activeElement.nodeName.toLowerCase() === 'textarea')) {\n return undefined;\n }\n\n if (swiper.params.keyboard.onlyInViewport && (isPageUp || isPageDown || isArrowLeft || isArrowRight || isArrowUp || isArrowDown)) {\n let inView = false; // Check that swiper should be inside of visible area of window\n\n if (swiper.$el.parents(`.${swiper.params.slideClass}`).length > 0 && swiper.$el.parents(`.${swiper.params.slideActiveClass}`).length === 0) {\n return undefined;\n }\n\n const $el = swiper.$el;\n const swiperWidth = $el[0].clientWidth;\n const swiperHeight = $el[0].clientHeight;\n const windowWidth = window.innerWidth;\n const windowHeight = window.innerHeight;\n const swiperOffset = swiper.$el.offset();\n if (rtl) swiperOffset.left -= swiper.$el[0].scrollLeft;\n const swiperCoord = [[swiperOffset.left, swiperOffset.top], [swiperOffset.left + swiperWidth, swiperOffset.top], [swiperOffset.left, swiperOffset.top + swiperHeight], [swiperOffset.left + swiperWidth, swiperOffset.top + swiperHeight]];\n\n for (let i = 0; i < swiperCoord.length; i += 1) {\n const point = swiperCoord[i];\n\n if (point[0] >= 0 && point[0] <= windowWidth && point[1] >= 0 && point[1] <= windowHeight) {\n if (point[0] === 0 && point[1] === 0) continue; // eslint-disable-line\n\n inView = true;\n }\n }\n\n if (!inView) return undefined;\n }\n\n if (swiper.isHorizontal()) {\n if (isPageUp || isPageDown || isArrowLeft || isArrowRight) {\n if (e.preventDefault) e.preventDefault();else e.returnValue = false;\n }\n\n if ((isPageDown || isArrowRight) && !rtl || (isPageUp || isArrowLeft) && rtl) swiper.slideNext();\n if ((isPageUp || isArrowLeft) && !rtl || (isPageDown || isArrowRight) && rtl) swiper.slidePrev();\n } else {\n if (isPageUp || isPageDown || isArrowUp || isArrowDown) {\n if (e.preventDefault) e.preventDefault();else e.returnValue = false;\n }\n\n if (isPageDown || isArrowDown) swiper.slideNext();\n if (isPageUp || isArrowUp) swiper.slidePrev();\n }\n\n emit('keyPress', kc);\n return undefined;\n }\n\n function enable() {\n if (swiper.keyboard.enabled) return;\n $(document).on('keydown', handle);\n swiper.keyboard.enabled = true;\n }\n\n function disable() {\n if (!swiper.keyboard.enabled) return;\n $(document).off('keydown', handle);\n swiper.keyboard.enabled = false;\n }\n\n on('init', () => {\n if (swiper.params.keyboard.enabled) {\n enable();\n }\n });\n on('destroy', () => {\n if (swiper.keyboard.enabled) {\n disable();\n }\n });\n Object.assign(swiper.keyboard, {\n enable,\n disable\n });\n }\n\n /* eslint-disable consistent-return */\n function Mousewheel(_ref) {\n let {\n swiper,\n extendParams,\n on,\n emit\n } = _ref;\n const window = getWindow();\n extendParams({\n mousewheel: {\n enabled: false,\n releaseOnEdges: false,\n invert: false,\n forceToAxis: false,\n sensitivity: 1,\n eventsTarget: 'container',\n thresholdDelta: null,\n thresholdTime: null\n }\n });\n swiper.mousewheel = {\n enabled: false\n };\n let timeout;\n let lastScrollTime = now();\n let lastEventBeforeSnap;\n const recentWheelEvents = [];\n\n function normalize(e) {\n // Reasonable defaults\n const PIXEL_STEP = 10;\n const LINE_HEIGHT = 40;\n const PAGE_HEIGHT = 800;\n let sX = 0;\n let sY = 0; // spinX, spinY\n\n let pX = 0;\n let pY = 0; // pixelX, pixelY\n // Legacy\n\n if ('detail' in e) {\n sY = e.detail;\n }\n\n if ('wheelDelta' in e) {\n sY = -e.wheelDelta / 120;\n }\n\n if ('wheelDeltaY' in e) {\n sY = -e.wheelDeltaY / 120;\n }\n\n if ('wheelDeltaX' in e) {\n sX = -e.wheelDeltaX / 120;\n } // side scrolling on FF with DOMMouseScroll\n\n\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\n if ('deltaX' in e) {\n pX = e.deltaX;\n }\n\n if (e.shiftKey && !pX) {\n // if user scrolls with shift he wants horizontal scroll\n pX = pY;\n pY = 0;\n }\n\n if ((pX || pY) && e.deltaMode) {\n if (e.deltaMode === 1) {\n // delta in LINE units\n pX *= LINE_HEIGHT;\n pY *= LINE_HEIGHT;\n } else {\n // delta in PAGE units\n pX *= PAGE_HEIGHT;\n pY *= PAGE_HEIGHT;\n }\n } // Fall-back if spin cannot be determined\n\n\n if (pX && !sX) {\n sX = pX < 1 ? -1 : 1;\n }\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\n function handleMouseEnter() {\n if (!swiper.enabled) return;\n swiper.mouseEntered = true;\n }\n\n function handleMouseLeave() {\n if (!swiper.enabled) return;\n swiper.mouseEntered = false;\n }\n\n function animateSlider(newEvent) {\n if (swiper.params.mousewheel.thresholdDelta && newEvent.delta < swiper.params.mousewheel.thresholdDelta) {\n // Prevent if delta of wheel scroll delta is below configured threshold\n return false;\n }\n\n if (swiper.params.mousewheel.thresholdTime && now() - lastScrollTime < swiper.params.mousewheel.thresholdTime) {\n // Prevent if time between scrolls is below configured threshold\n return false;\n } // If the movement is NOT big enough and\n // if the last time the user scrolled was too close to the current one (avoid continuously triggering the slider):\n // Don't go any further (avoid insignificant scroll movement).\n\n\n if (newEvent.delta >= 6 && now() - lastScrollTime < 60) {\n // Return false as a default\n return true;\n } // If user is scrolling towards the end:\n // If the slider hasn't hit the latest slide or\n // if the slider is a loop and\n // if the slider isn't moving right now:\n // Go to next slide and\n // emit a scroll event.\n // Else (the user is scrolling towards the beginning) and\n // if the slider hasn't hit the first slide or\n // if the slider is a loop and\n // if the slider isn't moving right now:\n // Go to prev slide and\n // emit a scroll event.\n\n\n if (newEvent.direction < 0) {\n if ((!swiper.isEnd || swiper.params.loop) && !swiper.animating) {\n swiper.slideNext();\n emit('scroll', newEvent.raw);\n }\n } else if ((!swiper.isBeginning || swiper.params.loop) && !swiper.animating) {\n swiper.slidePrev();\n emit('scroll', newEvent.raw);\n } // If you got here is because an animation has been triggered so store the current time\n\n\n lastScrollTime = new window.Date().getTime(); // Return false as a default\n\n return false;\n }\n\n function releaseScroll(newEvent) {\n const params = swiper.params.mousewheel;\n\n if (newEvent.direction < 0) {\n if (swiper.isEnd && !swiper.params.loop && params.releaseOnEdges) {\n // Return true to animate scroll on edges\n return true;\n }\n } else if (swiper.isBeginning && !swiper.params.loop && params.releaseOnEdges) {\n // Return true to animate scroll on edges\n return true;\n }\n\n return false;\n }\n\n function handle(event) {\n let e = event;\n let disableParentSwiper = true;\n if (!swiper.enabled) return;\n const params = swiper.params.mousewheel;\n\n if (swiper.params.cssMode) {\n e.preventDefault();\n }\n\n let target = swiper.$el;\n\n if (swiper.params.mousewheel.eventsTarget !== 'container') {\n target = $(swiper.params.mousewheel.eventsTarget);\n }\n\n if (!swiper.mouseEntered && !target[0].contains(e.target) && !params.releaseOnEdges) return true;\n if (e.originalEvent) e = e.originalEvent; // jquery fix\n\n let delta = 0;\n const rtlFactor = swiper.rtlTranslate ? -1 : 1;\n const data = 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;else return true;\n } else if (Math.abs(data.pixelY) > Math.abs(data.pixelX)) delta = -data.pixelY;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 if (params.invert) delta = -delta; // Get the scroll positions\n\n let positions = swiper.getTranslate() + delta * params.sensitivity;\n if (positions >= swiper.minTranslate()) positions = swiper.minTranslate();\n if (positions <= swiper.maxTranslate()) positions = swiper.maxTranslate(); // When loop is true:\n // the disableParentSwiper will be true.\n // When loop is false:\n // if the scroll positions is not on edge,\n // then the disableParentSwiper will be true.\n // if the scroll on edge positions,\n // then the disableParentSwiper will be false.\n\n disableParentSwiper = swiper.params.loop ? true : !(positions === swiper.minTranslate() || positions === swiper.maxTranslate());\n if (disableParentSwiper && swiper.params.nested) e.stopPropagation();\n\n if (!swiper.params.freeMode || !swiper.params.freeMode.enabled) {\n // Register the new event in a variable which stores the relevant data\n const newEvent = {\n time: now(),\n delta: Math.abs(delta),\n direction: Math.sign(delta),\n raw: event\n }; // Keep the most recent events\n\n if (recentWheelEvents.length >= 2) {\n recentWheelEvents.shift(); // only store the last N events\n }\n\n const prevEvent = recentWheelEvents.length ? recentWheelEvents[recentWheelEvents.length - 1] : undefined;\n recentWheelEvents.push(newEvent); // If there is at least one previous recorded event:\n // If direction has changed or\n // if the scroll is quicker than the previous one:\n // Animate the slider.\n // Else (this is the first time the wheel is moved):\n // Animate the slider.\n\n if (prevEvent) {\n if (newEvent.direction !== prevEvent.direction || newEvent.delta > prevEvent.delta || newEvent.time > prevEvent.time + 150) {\n animateSlider(newEvent);\n }\n } else {\n animateSlider(newEvent);\n } // If it's time to release the scroll:\n // Return now so you don't hit the preventDefault.\n\n\n if (releaseScroll(newEvent)) {\n return true;\n }\n } else {\n // Freemode or scrollContainer:\n // If we recently snapped after a momentum scroll, then ignore wheel events\n // to give time for the deceleration to finish. Stop ignoring after 500 msecs\n // or if it's a new scroll (larger delta or inverse sign as last event before\n // an end-of-momentum snap).\n const newEvent = {\n time: now(),\n delta: Math.abs(delta),\n direction: Math.sign(delta)\n };\n const ignoreWheelEvents = lastEventBeforeSnap && newEvent.time < lastEventBeforeSnap.time + 500 && newEvent.delta <= lastEventBeforeSnap.delta && newEvent.direction === lastEventBeforeSnap.direction;\n\n if (!ignoreWheelEvents) {\n lastEventBeforeSnap = undefined;\n\n if (swiper.params.loop) {\n swiper.loopFix();\n }\n\n let position = swiper.getTranslate() + delta * params.sensitivity;\n const wasBeginning = swiper.isBeginning;\n const wasEnd = swiper.isEnd;\n if (position >= swiper.minTranslate()) position = swiper.minTranslate();\n if (position <= swiper.maxTranslate()) position = swiper.maxTranslate();\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.freeMode.sticky) {\n // When wheel scrolling starts with sticky (aka snap) enabled, then detect\n // the end of a momentum scroll by storing recent (N=15?) wheel events.\n // 1. do all N events have decreasing or same (absolute value) delta?\n // 2. did all N events arrive in the last M (M=500?) msecs?\n // 3. does the earliest event have an (absolute value) delta that's\n // at least P (P=1?) larger than the most recent event's delta?\n // 4. does the latest event have a delta that's smaller than Q (Q=6?) pixels?\n // If 1-4 are \"yes\" then we're near the end of a momentum scroll deceleration.\n // Snap immediately and ignore remaining wheel events in this scroll.\n // See comment above for \"remaining wheel events in this scroll\" determination.\n // If 1-4 aren't satisfied, then wait to snap until 500ms after the last event.\n clearTimeout(timeout);\n timeout = undefined;\n\n if (recentWheelEvents.length >= 15) {\n recentWheelEvents.shift(); // only store the last N events\n }\n\n const prevEvent = recentWheelEvents.length ? recentWheelEvents[recentWheelEvents.length - 1] : undefined;\n const firstEvent = recentWheelEvents[0];\n recentWheelEvents.push(newEvent);\n\n if (prevEvent && (newEvent.delta > prevEvent.delta || newEvent.direction !== prevEvent.direction)) {\n // Increasing or reverse-sign delta means the user started scrolling again. Clear the wheel event log.\n recentWheelEvents.splice(0);\n } else if (recentWheelEvents.length >= 15 && newEvent.time - firstEvent.time < 500 && firstEvent.delta - newEvent.delta >= 1 && newEvent.delta <= 6) {\n // We're at the end of the deceleration of a momentum scroll, so there's no need\n // to wait for more events. Snap ASAP on the next tick.\n // Also, because there's some remaining momentum we'll bias the snap in the\n // direction of the ongoing scroll because it's better UX for the scroll to snap\n // in the same direction as the scroll instead of reversing to snap. Therefore,\n // if it's already scrolled more than 20% in the current direction, keep going.\n const snapToThreshold = delta > 0 ? 0.8 : 0.2;\n lastEventBeforeSnap = newEvent;\n recentWheelEvents.splice(0);\n timeout = nextTick(() => {\n swiper.slideToClosest(swiper.params.speed, true, undefined, snapToThreshold);\n }, 0); // no delay; move on next tick\n }\n\n if (!timeout) {\n // if we get here, then we haven't detected the end of a momentum scroll, so\n // we'll consider a scroll \"complete\" when there haven't been any wheel events\n // for 500ms.\n timeout = nextTick(() => {\n const snapToThreshold = 0.5;\n lastEventBeforeSnap = newEvent;\n recentWheelEvents.splice(0);\n swiper.slideToClosest(swiper.params.speed, true, undefined, snapToThreshold);\n }, 500);\n }\n } // Emit event\n\n\n if (!ignoreWheelEvents) emit('scroll', e); // Stop autoplay\n\n if (swiper.params.autoplay && swiper.params.autoplayDisableOnInteraction) swiper.autoplay.stop(); // Return page scroll on edge positions\n\n if (position === swiper.minTranslate() || position === swiper.maxTranslate()) return true;\n }\n }\n\n if (e.preventDefault) e.preventDefault();else e.returnValue = false;\n return false;\n }\n\n function events(method) {\n let target = swiper.$el;\n\n if (swiper.params.mousewheel.eventsTarget !== 'container') {\n target = $(swiper.params.mousewheel.eventsTarget);\n }\n\n target[method]('mouseenter', handleMouseEnter);\n target[method]('mouseleave', handleMouseLeave);\n target[method]('wheel', handle);\n }\n\n function enable() {\n if (swiper.params.cssMode) {\n swiper.wrapperEl.removeEventListener('wheel', handle);\n return true;\n }\n\n if (swiper.mousewheel.enabled) return false;\n events('on');\n swiper.mousewheel.enabled = true;\n return true;\n }\n\n function disable() {\n if (swiper.params.cssMode) {\n swiper.wrapperEl.addEventListener(event, handle);\n return true;\n }\n\n if (!swiper.mousewheel.enabled) return false;\n events('off');\n swiper.mousewheel.enabled = false;\n return true;\n }\n\n on('init', () => {\n if (!swiper.params.mousewheel.enabled && swiper.params.cssMode) {\n disable();\n }\n\n if (swiper.params.mousewheel.enabled) enable();\n });\n on('destroy', () => {\n if (swiper.params.cssMode) {\n enable();\n }\n\n if (swiper.mousewheel.enabled) disable();\n });\n Object.assign(swiper.mousewheel, {\n enable,\n disable\n });\n }\n\n function createElementIfNotDefined(swiper, originalParams, params, checkProps) {\n const document = getDocument();\n\n if (swiper.params.createElements) {\n Object.keys(checkProps).forEach(key => {\n if (!params[key] && params.auto === true) {\n let element = swiper.$el.children(`.${checkProps[key]}`)[0];\n\n if (!element) {\n element = document.createElement('div');\n element.className = checkProps[key];\n swiper.$el.append(element);\n }\n\n params[key] = element;\n originalParams[key] = element;\n }\n });\n }\n\n return params;\n }\n\n function Navigation(_ref) {\n let {\n swiper,\n extendParams,\n on,\n emit\n } = _ref;\n extendParams({\n navigation: {\n nextEl: null,\n prevEl: null,\n hideOnClick: false,\n disabledClass: 'swiper-button-disabled',\n hiddenClass: 'swiper-button-hidden',\n lockClass: 'swiper-button-lock'\n }\n });\n swiper.navigation = {\n nextEl: null,\n $nextEl: null,\n prevEl: null,\n $prevEl: null\n };\n\n function getEl(el) {\n let $el;\n\n if (el) {\n $el = $(el);\n\n if (swiper.params.uniqueNavElements && typeof el === 'string' && $el.length > 1 && swiper.$el.find(el).length === 1) {\n $el = swiper.$el.find(el);\n }\n }\n\n return $el;\n }\n\n function toggleEl($el, disabled) {\n const params = swiper.params.navigation;\n\n if ($el && $el.length > 0) {\n $el[disabled ? 'addClass' : 'removeClass'](params.disabledClass);\n if ($el[0] && $el[0].tagName === 'BUTTON') $el[0].disabled = disabled;\n\n if (swiper.params.watchOverflow && swiper.enabled) {\n $el[swiper.isLocked ? 'addClass' : 'removeClass'](params.lockClass);\n }\n }\n }\n\n function update() {\n // Update Navigation Buttons\n if (swiper.params.loop) return;\n const {\n $nextEl,\n $prevEl\n } = swiper.navigation;\n toggleEl($prevEl, swiper.isBeginning && !swiper.params.rewind);\n toggleEl($nextEl, swiper.isEnd && !swiper.params.rewind);\n }\n\n function onPrevClick(e) {\n e.preventDefault();\n if (swiper.isBeginning && !swiper.params.loop && !swiper.params.rewind) return;\n swiper.slidePrev();\n }\n\n function onNextClick(e) {\n e.preventDefault();\n if (swiper.isEnd && !swiper.params.loop && !swiper.params.rewind) return;\n swiper.slideNext();\n }\n\n function init() {\n const params = swiper.params.navigation;\n swiper.params.navigation = createElementIfNotDefined(swiper, swiper.originalParams.navigation, swiper.params.navigation, {\n nextEl: 'swiper-button-next',\n prevEl: 'swiper-button-prev'\n });\n if (!(params.nextEl || params.prevEl)) return;\n const $nextEl = getEl(params.nextEl);\n const $prevEl = getEl(params.prevEl);\n\n if ($nextEl && $nextEl.length > 0) {\n $nextEl.on('click', onNextClick);\n }\n\n if ($prevEl && $prevEl.length > 0) {\n $prevEl.on('click', onPrevClick);\n }\n\n Object.assign(swiper.navigation, {\n $nextEl,\n nextEl: $nextEl && $nextEl[0],\n $prevEl,\n prevEl: $prevEl && $prevEl[0]\n });\n\n if (!swiper.enabled) {\n if ($nextEl) $nextEl.addClass(params.lockClass);\n if ($prevEl) $prevEl.addClass(params.lockClass);\n }\n }\n\n function destroy() {\n const {\n $nextEl,\n $prevEl\n } = swiper.navigation;\n\n if ($nextEl && $nextEl.length) {\n $nextEl.off('click', onNextClick);\n $nextEl.removeClass(swiper.params.navigation.disabledClass);\n }\n\n if ($prevEl && $prevEl.length) {\n $prevEl.off('click', onPrevClick);\n $prevEl.removeClass(swiper.params.navigation.disabledClass);\n }\n }\n\n on('init', () => {\n init();\n update();\n });\n on('toEdge fromEdge lock unlock', () => {\n update();\n });\n on('destroy', () => {\n destroy();\n });\n on('enable disable', () => {\n const {\n $nextEl,\n $prevEl\n } = swiper.navigation;\n\n if ($nextEl) {\n $nextEl[swiper.enabled ? 'removeClass' : 'addClass'](swiper.params.navigation.lockClass);\n }\n\n if ($prevEl) {\n $prevEl[swiper.enabled ? 'removeClass' : 'addClass'](swiper.params.navigation.lockClass);\n }\n });\n on('click', (_s, e) => {\n const {\n $nextEl,\n $prevEl\n } = swiper.navigation;\n const targetEl = e.target;\n\n if (swiper.params.navigation.hideOnClick && !$(targetEl).is($prevEl) && !$(targetEl).is($nextEl)) {\n if (swiper.pagination && swiper.params.pagination && swiper.params.pagination.clickable && (swiper.pagination.el === targetEl || swiper.pagination.el.contains(targetEl))) return;\n let isHidden;\n\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\n if (isHidden === true) {\n emit('navigationShow');\n } else {\n emit('navigationHide');\n }\n\n if ($nextEl) {\n $nextEl.toggleClass(swiper.params.navigation.hiddenClass);\n }\n\n if ($prevEl) {\n $prevEl.toggleClass(swiper.params.navigation.hiddenClass);\n }\n }\n });\n Object.assign(swiper.navigation, {\n update,\n init,\n destroy\n });\n }\n\n function classesToSelector(classes) {\n if (classes === void 0) {\n classes = '';\n }\n\n return `.${classes.trim().replace(/([\\.:!\\/])/g, '\\\\$1') // eslint-disable-line\n .replace(/ /g, '.')}`;\n }\n\n function Pagination(_ref) {\n let {\n swiper,\n extendParams,\n on,\n emit\n } = _ref;\n const pfx = 'swiper-pagination';\n extendParams({\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',\n // 'bullets' or 'progressbar' or 'fraction' or 'custom'\n dynamicBullets: false,\n dynamicMainBullets: 1,\n formatFractionCurrent: number => number,\n formatFractionTotal: number => number,\n bulletClass: `${pfx}-bullet`,\n bulletActiveClass: `${pfx}-bullet-active`,\n modifierClass: `${pfx}-`,\n currentClass: `${pfx}-current`,\n totalClass: `${pfx}-total`,\n hiddenClass: `${pfx}-hidden`,\n progressbarFillClass: `${pfx}-progressbar-fill`,\n progressbarOppositeClass: `${pfx}-progressbar-opposite`,\n clickableClass: `${pfx}-clickable`,\n lockClass: `${pfx}-lock`,\n horizontalClass: `${pfx}-horizontal`,\n verticalClass: `${pfx}-vertical`\n }\n });\n swiper.pagination = {\n el: null,\n $el: null,\n bullets: []\n };\n let bulletSize;\n let dynamicBulletIndex = 0;\n\n function isPaginationDisabled() {\n return !swiper.params.pagination.el || !swiper.pagination.el || !swiper.pagination.$el || swiper.pagination.$el.length === 0;\n }\n\n function setSideBullets($bulletEl, position) {\n const {\n bulletActiveClass\n } = swiper.params.pagination;\n $bulletEl[position]().addClass(`${bulletActiveClass}-${position}`)[position]().addClass(`${bulletActiveClass}-${position}-${position}`);\n }\n\n function update() {\n // Render || Update Pagination bullets/items\n const rtl = swiper.rtl;\n const params = swiper.params.pagination;\n if (isPaginationDisabled()) return;\n const slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.slides.length;\n const $el = swiper.pagination.$el; // Current/Total\n\n let current;\n const total = swiper.params.loop ? Math.ceil((slidesLength - swiper.loopedSlides * 2) / swiper.params.slidesPerGroup) : swiper.snapGrid.length;\n\n if (swiper.params.loop) {\n current = Math.ceil((swiper.activeIndex - swiper.loopedSlides) / swiper.params.slidesPerGroup);\n\n if (current > slidesLength - 1 - swiper.loopedSlides * 2) {\n current -= slidesLength - swiper.loopedSlides * 2;\n }\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 } // Types\n\n\n if (params.type === 'bullets' && swiper.pagination.bullets && swiper.pagination.bullets.length > 0) {\n const bullets = swiper.pagination.bullets;\n let firstIndex;\n let lastIndex;\n let midIndex;\n\n if (params.dynamicBullets) {\n bulletSize = bullets.eq(0)[swiper.isHorizontal() ? 'outerWidth' : 'outerHeight'](true);\n $el.css(swiper.isHorizontal() ? 'width' : 'height', `${bulletSize * (params.dynamicMainBullets + 4)}px`);\n\n if (params.dynamicMainBullets > 1 && swiper.previousIndex !== undefined) {\n dynamicBulletIndex += current - (swiper.previousIndex - swiper.loopedSlides || 0);\n\n if (dynamicBulletIndex > params.dynamicMainBullets - 1) {\n dynamicBulletIndex = params.dynamicMainBullets - 1;\n } else if (dynamicBulletIndex < 0) {\n dynamicBulletIndex = 0;\n }\n }\n\n firstIndex = Math.max(current - dynamicBulletIndex, 0);\n lastIndex = firstIndex + (Math.min(bullets.length, params.dynamicMainBullets) - 1);\n midIndex = (lastIndex + firstIndex) / 2;\n }\n\n bullets.removeClass(['', '-next', '-next-next', '-prev', '-prev-prev', '-main'].map(suffix => `${params.bulletActiveClass}${suffix}`).join(' '));\n\n if ($el.length > 1) {\n bullets.each(bullet => {\n const $bullet = $(bullet);\n const bulletIndex = $bullet.index();\n\n if (bulletIndex === current) {\n $bullet.addClass(params.bulletActiveClass);\n }\n\n if (params.dynamicBullets) {\n if (bulletIndex >= firstIndex && bulletIndex <= lastIndex) {\n $bullet.addClass(`${params.bulletActiveClass}-main`);\n }\n\n if (bulletIndex === firstIndex) {\n setSideBullets($bullet, 'prev');\n }\n\n if (bulletIndex === lastIndex) {\n setSideBullets($bullet, 'next');\n }\n }\n });\n } else {\n const $bullet = bullets.eq(current);\n const bulletIndex = $bullet.index();\n $bullet.addClass(params.bulletActiveClass);\n\n if (params.dynamicBullets) {\n const $firstDisplayedBullet = bullets.eq(firstIndex);\n const $lastDisplayedBullet = bullets.eq(lastIndex);\n\n for (let i = firstIndex; i <= lastIndex; i += 1) {\n bullets.eq(i).addClass(`${params.bulletActiveClass}-main`);\n }\n\n if (swiper.params.loop) {\n if (bulletIndex >= bullets.length) {\n for (let i = params.dynamicMainBullets; i >= 0; i -= 1) {\n bullets.eq(bullets.length - i).addClass(`${params.bulletActiveClass}-main`);\n }\n\n bullets.eq(bullets.length - params.dynamicMainBullets - 1).addClass(`${params.bulletActiveClass}-prev`);\n } else {\n setSideBullets($firstDisplayedBullet, 'prev');\n setSideBullets($lastDisplayedBullet, 'next');\n }\n } else {\n setSideBullets($firstDisplayedBullet, 'prev');\n setSideBullets($lastDisplayedBullet, 'next');\n }\n }\n }\n\n if (params.dynamicBullets) {\n const dynamicBulletsLength = Math.min(bullets.length, params.dynamicMainBullets + 4);\n const bulletsOffset = (bulletSize * dynamicBulletsLength - bulletSize) / 2 - midIndex * bulletSize;\n const offsetProp = rtl ? 'right' : 'left';\n bullets.css(swiper.isHorizontal() ? offsetProp : 'top', `${bulletsOffset}px`);\n }\n }\n\n if (params.type === 'fraction') {\n $el.find(classesToSelector(params.currentClass)).text(params.formatFractionCurrent(current + 1));\n $el.find(classesToSelector(params.totalClass)).text(params.formatFractionTotal(total));\n }\n\n if (params.type === 'progressbar') {\n let progressbarDirection;\n\n if (params.progressbarOpposite) {\n progressbarDirection = swiper.isHorizontal() ? 'vertical' : 'horizontal';\n } else {\n progressbarDirection = swiper.isHorizontal() ? 'horizontal' : 'vertical';\n }\n\n const scale = (current + 1) / total;\n let scaleX = 1;\n let scaleY = 1;\n\n if (progressbarDirection === 'horizontal') {\n scaleX = scale;\n } else {\n scaleY = scale;\n }\n\n $el.find(classesToSelector(params.progressbarFillClass)).transform(`translate3d(0,0,0) scaleX(${scaleX}) scaleY(${scaleY})`).transition(swiper.params.speed);\n }\n\n if (params.type === 'custom' && params.renderCustom) {\n $el.html(params.renderCustom(swiper, current + 1, total));\n emit('paginationRender', $el[0]);\n } else {\n emit('paginationUpdate', $el[0]);\n }\n\n if (swiper.params.watchOverflow && swiper.enabled) {\n $el[swiper.isLocked ? 'addClass' : 'removeClass'](params.lockClass);\n }\n }\n\n function render() {\n // Render Container\n const params = swiper.params.pagination;\n if (isPaginationDisabled()) return;\n const slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.slides.length;\n const $el = swiper.pagination.$el;\n let paginationHTML = '';\n\n if (params.type === 'bullets') {\n let numberOfBullets = swiper.params.loop ? Math.ceil((slidesLength - swiper.loopedSlides * 2) / swiper.params.slidesPerGroup) : swiper.snapGrid.length;\n\n if (swiper.params.freeMode && swiper.params.freeMode.enabled && !swiper.params.loop && numberOfBullets > slidesLength) {\n numberOfBullets = slidesLength;\n }\n\n for (let 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}\"></${params.bulletElement}>`;\n }\n }\n\n $el.html(paginationHTML);\n swiper.pagination.bullets = $el.find(classesToSelector(params.bulletClass));\n }\n\n if (params.type === 'fraction') {\n if (params.renderFraction) {\n paginationHTML = params.renderFraction.call(swiper, params.currentClass, params.totalClass);\n } else {\n paginationHTML = `<span class=\"${params.currentClass}\"></span>` + ' / ' + `<span class=\"${params.totalClass}\"></span>`;\n }\n\n $el.html(paginationHTML);\n }\n\n if (params.type === 'progressbar') {\n if (params.renderProgressbar) {\n paginationHTML = params.renderProgressbar.call(swiper, params.progressbarFillClass);\n } else {\n paginationHTML = `<span class=\"${params.progressbarFillClass}\"></span>`;\n }\n\n $el.html(paginationHTML);\n }\n\n if (params.type !== 'custom') {\n emit('paginationRender', swiper.pagination.$el[0]);\n }\n }\n\n function init() {\n swiper.params.pagination = createElementIfNotDefined(swiper, swiper.originalParams.pagination, swiper.params.pagination, {\n el: 'swiper-pagination'\n });\n const params = swiper.params.pagination;\n if (!params.el) return;\n let $el = $(params.el);\n if ($el.length === 0) return;\n\n if (swiper.params.uniqueNavElements && typeof params.el === 'string' && $el.length > 1) {\n $el = swiper.$el.find(params.el); // check if it belongs to another nested Swiper\n\n if ($el.length > 1) {\n $el = $el.filter(el => {\n if ($(el).parents('.swiper')[0] !== swiper.el) return false;\n return true;\n });\n }\n }\n\n if (params.type === 'bullets' && params.clickable) {\n $el.addClass(params.clickableClass);\n }\n\n $el.addClass(params.modifierClass + params.type);\n $el.addClass(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass);\n\n if (params.type === 'bullets' && params.dynamicBullets) {\n $el.addClass(`${params.modifierClass}${params.type}-dynamic`);\n dynamicBulletIndex = 0;\n\n if (params.dynamicMainBullets < 1) {\n params.dynamicMainBullets = 1;\n }\n }\n\n if (params.type === 'progressbar' && params.progressbarOpposite) {\n $el.addClass(params.progressbarOppositeClass);\n }\n\n if (params.clickable) {\n $el.on('click', classesToSelector(params.bulletClass), function onClick(e) {\n e.preventDefault();\n let index = $(this).index() * swiper.params.slidesPerGroup;\n if (swiper.params.loop) index += swiper.loopedSlides;\n swiper.slideTo(index);\n });\n }\n\n Object.assign(swiper.pagination, {\n $el,\n el: $el[0]\n });\n\n if (!swiper.enabled) {\n $el.addClass(params.lockClass);\n }\n }\n\n function destroy() {\n const params = swiper.params.pagination;\n if (isPaginationDisabled()) return;\n const $el = swiper.pagination.$el;\n $el.removeClass(params.hiddenClass);\n $el.removeClass(params.modifierClass + params.type);\n $el.removeClass(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass);\n if (swiper.pagination.bullets && swiper.pagination.bullets.removeClass) swiper.pagination.bullets.removeClass(params.bulletActiveClass);\n\n if (params.clickable) {\n $el.off('click', classesToSelector(params.bulletClass));\n }\n }\n\n on('init', () => {\n init();\n render();\n update();\n });\n on('activeIndexChange', () => {\n if (swiper.params.loop) {\n update();\n } else if (typeof swiper.snapIndex === 'undefined') {\n update();\n }\n });\n on('snapIndexChange', () => {\n if (!swiper.params.loop) {\n update();\n }\n });\n on('slidesLengthChange', () => {\n if (swiper.params.loop) {\n render();\n update();\n }\n });\n on('snapGridLengthChange', () => {\n if (!swiper.params.loop) {\n render();\n update();\n }\n });\n on('destroy', () => {\n destroy();\n });\n on('enable disable', () => {\n const {\n $el\n } = swiper.pagination;\n\n if ($el) {\n $el[swiper.enabled ? 'removeClass' : 'addClass'](swiper.params.pagination.lockClass);\n }\n });\n on('lock unlock', () => {\n update();\n });\n on('click', (_s, e) => {\n const targetEl = e.target;\n const {\n $el\n } = swiper.pagination;\n\n if (swiper.params.pagination.el && swiper.params.pagination.hideOnClick && $el.length > 0 && !$(targetEl).hasClass(swiper.params.pagination.bulletClass)) {\n if (swiper.navigation && (swiper.navigation.nextEl && targetEl === swiper.navigation.nextEl || swiper.navigation.prevEl && targetEl === swiper.navigation.prevEl)) return;\n const isHidden = $el.hasClass(swiper.params.pagination.hiddenClass);\n\n if (isHidden === true) {\n emit('paginationShow');\n } else {\n emit('paginationHide');\n }\n\n $el.toggleClass(swiper.params.pagination.hiddenClass);\n }\n });\n Object.assign(swiper.pagination, {\n render,\n update,\n init,\n destroy\n });\n }\n\n function Scrollbar(_ref) {\n let {\n swiper,\n extendParams,\n on,\n emit\n } = _ref;\n const document = getDocument();\n let isTouched = false;\n let timeout = null;\n let dragTimeout = null;\n let dragStartPos;\n let dragSize;\n let trackSize;\n let divider;\n extendParams({\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 swiper.scrollbar = {\n el: null,\n dragEl: null,\n $el: null,\n $dragEl: null\n };\n\n function setTranslate() {\n if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;\n const {\n scrollbar,\n rtlTranslate: rtl,\n progress\n } = swiper;\n const {\n $dragEl,\n $el\n } = scrollbar;\n const params = swiper.params.scrollbar;\n let newSize = dragSize;\n let newPos = (trackSize - dragSize) * progress;\n\n if (rtl) {\n newPos = -newPos;\n\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\n if (swiper.isHorizontal()) {\n $dragEl.transform(`translate3d(${newPos}px, 0, 0)`);\n $dragEl[0].style.width = `${newSize}px`;\n } else {\n $dragEl.transform(`translate3d(0px, ${newPos}px, 0)`);\n $dragEl[0].style.height = `${newSize}px`;\n }\n\n if (params.hide) {\n clearTimeout(timeout);\n $el[0].style.opacity = 1;\n timeout = setTimeout(() => {\n $el[0].style.opacity = 0;\n $el.transition(400);\n }, 1000);\n }\n }\n\n function setTransition(duration) {\n if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;\n swiper.scrollbar.$dragEl.transition(duration);\n }\n\n function updateSize() {\n if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;\n const {\n scrollbar\n } = swiper;\n const {\n $dragEl,\n $el\n } = scrollbar;\n $dragEl[0].style.width = '';\n $dragEl[0].style.height = '';\n trackSize = swiper.isHorizontal() ? $el[0].offsetWidth : $el[0].offsetHeight;\n divider = swiper.size / (swiper.virtualSize + swiper.params.slidesOffsetBefore - (swiper.params.centeredSlides ? swiper.snapGrid[0] : 0));\n\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\n if (swiper.params.scrollbar.hide) {\n $el[0].style.opacity = 0;\n }\n\n if (swiper.params.watchOverflow && swiper.enabled) {\n scrollbar.$el[swiper.isLocked ? 'addClass' : 'removeClass'](swiper.params.scrollbar.lockClass);\n }\n }\n\n function getPointerPosition(e) {\n if (swiper.isHorizontal()) {\n return e.type === 'touchstart' || e.type === 'touchmove' ? e.targetTouches[0].clientX : e.clientX;\n }\n\n return e.type === 'touchstart' || e.type === 'touchmove' ? e.targetTouches[0].clientY : e.clientY;\n }\n\n function setDragPosition(e) {\n const {\n scrollbar,\n rtlTranslate: rtl\n } = swiper;\n const {\n $el\n } = scrollbar;\n let positionRatio;\n positionRatio = (getPointerPosition(e) - $el.offset()[swiper.isHorizontal() ? 'left' : 'top'] - (dragStartPos !== null ? dragStartPos : dragSize / 2)) / (trackSize - dragSize);\n positionRatio = Math.max(Math.min(positionRatio, 1), 0);\n\n if (rtl) {\n positionRatio = 1 - positionRatio;\n }\n\n const position = swiper.minTranslate() + (swiper.maxTranslate() - swiper.minTranslate()) * positionRatio;\n swiper.updateProgress(position);\n swiper.setTranslate(position);\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n\n function onDragStart(e) {\n const params = swiper.params.scrollbar;\n const {\n scrollbar,\n $wrapperEl\n } = swiper;\n const {\n $el,\n $dragEl\n } = scrollbar;\n isTouched = true;\n dragStartPos = e.target === $dragEl[0] || e.target === $dragEl ? getPointerPosition(e) - e.target.getBoundingClientRect()[swiper.isHorizontal() ? 'left' : 'top'] : null;\n e.preventDefault();\n e.stopPropagation();\n $wrapperEl.transition(100);\n $dragEl.transition(100);\n setDragPosition(e);\n clearTimeout(dragTimeout);\n $el.transition(0);\n\n if (params.hide) {\n $el.css('opacity', 1);\n }\n\n if (swiper.params.cssMode) {\n swiper.$wrapperEl.css('scroll-snap-type', 'none');\n }\n\n emit('scrollbarDragStart', e);\n }\n\n function onDragMove(e) {\n const {\n scrollbar,\n $wrapperEl\n } = swiper;\n const {\n $el,\n $dragEl\n } = scrollbar;\n if (!isTouched) return;\n if (e.preventDefault) e.preventDefault();else e.returnValue = false;\n setDragPosition(e);\n $wrapperEl.transition(0);\n $el.transition(0);\n $dragEl.transition(0);\n emit('scrollbarDragMove', e);\n }\n\n function onDragEnd(e) {\n const params = swiper.params.scrollbar;\n const {\n scrollbar,\n $wrapperEl\n } = swiper;\n const {\n $el\n } = scrollbar;\n if (!isTouched) return;\n isTouched = false;\n\n if (swiper.params.cssMode) {\n swiper.$wrapperEl.css('scroll-snap-type', '');\n $wrapperEl.transition('');\n }\n\n if (params.hide) {\n clearTimeout(dragTimeout);\n dragTimeout = nextTick(() => {\n $el.css('opacity', 0);\n $el.transition(400);\n }, 1000);\n }\n\n emit('scrollbarDragEnd', e);\n\n if (params.snapOnRelease) {\n swiper.slideToClosest();\n }\n }\n\n function events(method) {\n const {\n scrollbar,\n touchEventsTouch,\n touchEventsDesktop,\n params,\n support\n } = swiper;\n const $el = scrollbar.$el;\n const target = $el[0];\n const activeListener = support.passiveListener && params.passiveListeners ? {\n passive: false,\n capture: false\n } : false;\n const passiveListener = support.passiveListener && params.passiveListeners ? {\n passive: true,\n capture: false\n } : false;\n if (!target) return;\n const eventMethod = method === 'on' ? 'addEventListener' : 'removeEventListener';\n\n if (!support.touch) {\n target[eventMethod](touchEventsDesktop.start, onDragStart, activeListener);\n document[eventMethod](touchEventsDesktop.move, onDragMove, activeListener);\n document[eventMethod](touchEventsDesktop.end, onDragEnd, passiveListener);\n } else {\n target[eventMethod](touchEventsTouch.start, onDragStart, activeListener);\n target[eventMethod](touchEventsTouch.move, onDragMove, activeListener);\n target[eventMethod](touchEventsTouch.end, onDragEnd, passiveListener);\n }\n }\n\n function enableDraggable() {\n if (!swiper.params.scrollbar.el) return;\n events('on');\n }\n\n function disableDraggable() {\n if (!swiper.params.scrollbar.el) return;\n events('off');\n }\n\n function init() {\n const {\n scrollbar,\n $el: $swiperEl\n } = swiper;\n swiper.params.scrollbar = createElementIfNotDefined(swiper, swiper.originalParams.scrollbar, swiper.params.scrollbar, {\n el: 'swiper-scrollbar'\n });\n const params = swiper.params.scrollbar;\n if (!params.el) return;\n let $el = $(params.el);\n\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 let $dragEl = $el.find(`.${swiper.params.scrollbar.dragClass}`);\n\n if ($dragEl.length === 0) {\n $dragEl = $(`<div class=\"${swiper.params.scrollbar.dragClass}\"></div>`);\n $el.append($dragEl);\n }\n\n Object.assign(scrollbar, {\n $el,\n el: $el[0],\n $dragEl,\n dragEl: $dragEl[0]\n });\n\n if (params.draggable) {\n enableDraggable();\n }\n\n if ($el) {\n $el[swiper.enabled ? 'removeClass' : 'addClass'](swiper.params.scrollbar.lockClass);\n }\n }\n\n function destroy() {\n disableDraggable();\n }\n\n on('init', () => {\n init();\n updateSize();\n setTranslate();\n });\n on('update resize observerUpdate lock unlock', () => {\n updateSize();\n });\n on('setTranslate', () => {\n setTranslate();\n });\n on('setTransition', (_s, duration) => {\n setTransition(duration);\n });\n on('enable disable', () => {\n const {\n $el\n } = swiper.scrollbar;\n\n if ($el) {\n $el[swiper.enabled ? 'removeClass' : 'addClass'](swiper.params.scrollbar.lockClass);\n }\n });\n on('destroy', () => {\n destroy();\n });\n Object.assign(swiper.scrollbar, {\n updateSize,\n setTranslate,\n init,\n destroy\n });\n }\n\n function Parallax(_ref) {\n let {\n swiper,\n extendParams,\n on\n } = _ref;\n extendParams({\n parallax: {\n enabled: false\n }\n });\n\n const setTransform = (el, progress) => {\n const {\n rtl\n } = swiper;\n const $el = $(el);\n const rtlFactor = rtl ? -1 : 1;\n const p = $el.attr('data-swiper-parallax') || '0';\n let x = $el.attr('data-swiper-parallax-x');\n let y = $el.attr('data-swiper-parallax-y');\n const scale = $el.attr('data-swiper-parallax-scale');\n const 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\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 const currentOpacity = opacity - (opacity - 1) * (1 - Math.abs(progress));\n $el[0].style.opacity = currentOpacity;\n }\n\n if (typeof scale === 'undefined' || scale === null) {\n $el.transform(`translate3d(${x}, ${y}, 0px)`);\n } else {\n const currentScale = scale - (scale - 1) * (1 - Math.abs(progress));\n $el.transform(`translate3d(${x}, ${y}, 0px) scale(${currentScale})`);\n }\n };\n\n const setTranslate = () => {\n const {\n $el,\n slides,\n progress,\n snapGrid\n } = swiper;\n $el.children('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]').each(el => {\n setTransform(el, progress);\n });\n slides.each((slideEl, slideIndex) => {\n let slideProgress = slideEl.progress;\n\n if (swiper.params.slidesPerGroup > 1 && swiper.params.slidesPerView !== 'auto') {\n slideProgress += Math.ceil(slideIndex / 2) - progress * (snapGrid.length - 1);\n }\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]').each(el => {\n setTransform(el, slideProgress);\n });\n });\n };\n\n const setTransition = function (duration) {\n if (duration === void 0) {\n duration = swiper.params.speed;\n }\n\n const {\n $el\n } = swiper;\n $el.find('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]').each(parallaxEl => {\n const $parallaxEl = $(parallaxEl);\n let parallaxDuration = parseInt($parallaxEl.attr('data-swiper-parallax-duration'), 10) || duration;\n if (duration === 0) parallaxDuration = 0;\n $parallaxEl.transition(parallaxDuration);\n });\n };\n\n on('beforeInit', () => {\n if (!swiper.params.parallax.enabled) return;\n swiper.params.watchSlidesProgress = true;\n swiper.originalParams.watchSlidesProgress = true;\n });\n on('init', () => {\n if (!swiper.params.parallax.enabled) return;\n setTranslate();\n });\n on('setTranslate', () => {\n if (!swiper.params.parallax.enabled) return;\n setTranslate();\n });\n on('setTransition', (_swiper, duration) => {\n if (!swiper.params.parallax.enabled) return;\n setTransition(duration);\n });\n }\n\n function Zoom(_ref) {\n let {\n swiper,\n extendParams,\n on,\n emit\n } = _ref;\n const window = getWindow();\n extendParams({\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 swiper.zoom = {\n enabled: false\n };\n let currentScale = 1;\n let isScaling = false;\n let gesturesEnabled;\n let fakeGestureTouched;\n let fakeGestureMoved;\n const gesture = {\n $slideEl: undefined,\n slideWidth: undefined,\n slideHeight: undefined,\n $imageEl: undefined,\n $imageWrapEl: undefined,\n maxRatio: 3\n };\n const 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 const velocity = {\n x: undefined,\n y: undefined,\n prevPositionX: undefined,\n prevPositionY: undefined,\n prevTime: undefined\n };\n let scale = 1;\n Object.defineProperty(swiper.zoom, 'scale', {\n get() {\n return scale;\n },\n\n set(value) {\n if (scale !== value) {\n const imageEl = gesture.$imageEl ? gesture.$imageEl[0] : undefined;\n const slideEl = gesture.$slideEl ? gesture.$slideEl[0] : undefined;\n emit('zoomChange', value, imageEl, slideEl);\n }\n\n scale = value;\n }\n\n });\n\n function getDistanceBetweenTouches(e) {\n if (e.targetTouches.length < 2) return 1;\n const x1 = e.targetTouches[0].pageX;\n const y1 = e.targetTouches[0].pageY;\n const x2 = e.targetTouches[1].pageX;\n const y2 = e.targetTouches[1].pageY;\n const distance = Math.sqrt((x2 - x1) ** 2 + (y2 - y1) ** 2);\n return distance;\n } // Events\n\n\n function onGestureStart(e) {\n const support = swiper.support;\n const params = swiper.params.zoom;\n fakeGestureTouched = false;\n fakeGestureMoved = false;\n\n if (!support.gestures) {\n if (e.type !== 'touchstart' || e.type === 'touchstart' && e.targetTouches.length < 2) {\n return;\n }\n\n fakeGestureTouched = true;\n gesture.scaleStart = getDistanceBetweenTouches(e);\n }\n\n if (!gesture.$slideEl || !gesture.$slideEl.length) {\n gesture.$slideEl = $(e.target).closest(`.${swiper.params.slideClass}`);\n if (gesture.$slideEl.length === 0) gesture.$slideEl = swiper.slides.eq(swiper.activeIndex);\n gesture.$imageEl = gesture.$slideEl.find(`.${params.containerClass}`).eq(0).find('picture, img, svg, canvas, .swiper-zoom-target').eq(0);\n gesture.$imageWrapEl = gesture.$imageEl.parent(`.${params.containerClass}`);\n gesture.maxRatio = gesture.$imageWrapEl.attr('data-swiper-zoom') || params.maxRatio;\n\n if (gesture.$imageWrapEl.length === 0) {\n gesture.$imageEl = undefined;\n return;\n }\n }\n\n if (gesture.$imageEl) {\n gesture.$imageEl.transition(0);\n }\n\n isScaling = true;\n }\n\n function onGestureChange(e) {\n const support = swiper.support;\n const params = swiper.params.zoom;\n const zoom = swiper.zoom;\n\n if (!support.gestures) {\n if (e.type !== 'touchmove' || e.type === 'touchmove' && e.targetTouches.length < 2) {\n return;\n }\n\n fakeGestureMoved = true;\n gesture.scaleMove = getDistanceBetweenTouches(e);\n }\n\n if (!gesture.$imageEl || gesture.$imageEl.length === 0) {\n if (e.type === 'gesturechange') onGestureStart(e);\n return;\n }\n\n if (support.gestures) {\n zoom.scale = e.scale * currentScale;\n } else {\n zoom.scale = gesture.scaleMove / gesture.scaleStart * currentScale;\n }\n\n if (zoom.scale > gesture.maxRatio) {\n zoom.scale = gesture.maxRatio - 1 + (zoom.scale - gesture.maxRatio + 1) ** 0.5;\n }\n\n if (zoom.scale < params.minRatio) {\n zoom.scale = params.minRatio + 1 - (params.minRatio - zoom.scale + 1) ** 0.5;\n }\n\n gesture.$imageEl.transform(`translate3d(0,0,0) scale(${zoom.scale})`);\n }\n\n function onGestureEnd(e) {\n const device = swiper.device;\n const support = swiper.support;\n const params = swiper.params.zoom;\n const zoom = swiper.zoom;\n\n if (!support.gestures) {\n if (!fakeGestureTouched || !fakeGestureMoved) {\n return;\n }\n\n if (e.type !== 'touchend' || e.type === 'touchend' && e.changedTouches.length < 2 && !device.android) {\n return;\n }\n\n fakeGestureTouched = false;\n fakeGestureMoved = false;\n }\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 currentScale = zoom.scale;\n isScaling = false;\n if (zoom.scale === 1) gesture.$slideEl = undefined;\n }\n\n function onTouchStart(e) {\n const device = swiper.device;\n if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;\n if (image.isTouched) return;\n if (device.android && e.cancelable) 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\n function onTouchMove(e) {\n const zoom = swiper.zoom;\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 = getTranslate(gesture.$imageWrapEl[0], 'x') || 0;\n image.startY = 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 } // Define if we need image drag\n\n\n const scaledWidth = image.width * zoom.scale;\n const scaledHeight = image.height * zoom.scale;\n if (scaledWidth < gesture.slideWidth && scaledHeight < gesture.slideHeight) return;\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.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 && !isScaling) {\n if (swiper.isHorizontal() && (Math.floor(image.minX) === Math.floor(image.startX) && image.touchesCurrent.x < image.touchesStart.x || Math.floor(image.maxX) === Math.floor(image.startX) && image.touchesCurrent.x > image.touchesStart.x)) {\n image.isTouched = false;\n return;\n }\n\n if (!swiper.isHorizontal() && (Math.floor(image.minY) === Math.floor(image.startY) && image.touchesCurrent.y < image.touchesStart.y || Math.floor(image.maxY) === Math.floor(image.startY) && image.touchesCurrent.y > image.touchesStart.y)) {\n image.isTouched = false;\n return;\n }\n }\n\n if (e.cancelable) {\n e.preventDefault();\n }\n\n e.stopPropagation();\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 - (image.minX - image.currentX + 1) ** 0.8;\n }\n\n if (image.currentX > image.maxX) {\n image.currentX = image.maxX - 1 + (image.currentX - image.maxX + 1) ** 0.8;\n }\n\n if (image.currentY < image.minY) {\n image.currentY = image.minY + 1 - (image.minY - image.currentY + 1) ** 0.8;\n }\n\n if (image.currentY > image.maxY) {\n image.currentY = image.maxY - 1 + (image.currentY - image.maxY + 1) ** 0.8;\n } // Velocity\n\n\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 gesture.$imageWrapEl.transform(`translate3d(${image.currentX}px, ${image.currentY}px,0)`);\n }\n\n function onTouchEnd() {\n const zoom = swiper.zoom;\n if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;\n\n if (!image.isTouched || !image.isMoved) {\n image.isTouched = false;\n image.isMoved = false;\n return;\n }\n\n image.isTouched = false;\n image.isMoved = false;\n let momentumDurationX = 300;\n let momentumDurationY = 300;\n const momentumDistanceX = velocity.x * momentumDurationX;\n const newPositionX = image.currentX + momentumDistanceX;\n const momentumDistanceY = velocity.y * momentumDurationY;\n const newPositionY = image.currentY + momentumDistanceY; // Fix duration\n\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 const momentumDuration = Math.max(momentumDurationX, momentumDurationY);\n image.currentX = newPositionX;\n image.currentY = newPositionY; // Define if we need image drag\n\n const scaledWidth = image.width * zoom.scale;\n const 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 gesture.$imageWrapEl.transition(momentumDuration).transform(`translate3d(${image.currentX}px, ${image.currentY}px,0)`);\n }\n\n function onTransitionEnd() {\n const zoom = swiper.zoom;\n\n if (gesture.$slideEl && swiper.previousIndex !== swiper.activeIndex) {\n if (gesture.$imageEl) {\n gesture.$imageEl.transform('translate3d(0,0,0) scale(1)');\n }\n\n if (gesture.$imageWrapEl) {\n gesture.$imageWrapEl.transform('translate3d(0,0,0)');\n }\n\n zoom.scale = 1;\n currentScale = 1;\n gesture.$slideEl = undefined;\n gesture.$imageEl = undefined;\n gesture.$imageWrapEl = undefined;\n }\n }\n\n function zoomIn(e) {\n const zoom = swiper.zoom;\n const params = swiper.params.zoom;\n\n if (!gesture.$slideEl) {\n if (e && e.target) {\n gesture.$slideEl = $(e.target).closest(`.${swiper.params.slideClass}`);\n }\n\n if (!gesture.$slideEl) {\n if (swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual) {\n gesture.$slideEl = swiper.$wrapperEl.children(`.${swiper.params.slideActiveClass}`);\n } else {\n gesture.$slideEl = swiper.slides.eq(swiper.activeIndex);\n }\n }\n\n gesture.$imageEl = gesture.$slideEl.find(`.${params.containerClass}`).eq(0).find('picture, img, svg, canvas, .swiper-zoom-target').eq(0);\n gesture.$imageWrapEl = gesture.$imageEl.parent(`.${params.containerClass}`);\n }\n\n if (!gesture.$imageEl || gesture.$imageEl.length === 0 || !gesture.$imageWrapEl || gesture.$imageWrapEl.length === 0) return;\n\n if (swiper.params.cssMode) {\n swiper.wrapperEl.style.overflow = 'hidden';\n swiper.wrapperEl.style.touchAction = 'none';\n }\n\n gesture.$slideEl.addClass(`${params.zoomedSlideClass}`);\n let touchX;\n let touchY;\n let offsetX;\n let offsetY;\n let diffX;\n let diffY;\n let translateX;\n let translateY;\n let imageWidth;\n let imageHeight;\n let scaledWidth;\n let scaledHeight;\n let translateMinX;\n let translateMinY;\n let translateMaxX;\n let translateMaxY;\n let slideWidth;\n let 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 currentScale = gesture.$imageWrapEl.attr('data-swiper-zoom') || params.maxRatio;\n\n if (e) {\n slideWidth = gesture.$slideEl[0].offsetWidth;\n slideHeight = gesture.$slideEl[0].offsetHeight;\n offsetX = gesture.$slideEl.offset().left + window.scrollX;\n offsetY = gesture.$slideEl.offset().top + window.scrollY;\n diffX = offsetX + slideWidth / 2 - touchX;\n diffY = offsetY + slideHeight / 2 - touchY;\n imageWidth = gesture.$imageEl[0].offsetWidth;\n imageHeight = gesture.$imageEl[0].offsetHeight;\n scaledWidth = imageWidth * zoom.scale;\n scaledHeight = imageHeight * zoom.scale;\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 translateX = diffX * zoom.scale;\n translateY = diffY * zoom.scale;\n\n if (translateX < translateMinX) {\n translateX = translateMinX;\n }\n\n if (translateX > translateMaxX) {\n translateX = translateMaxX;\n }\n\n if (translateY < translateMinY) {\n translateY = translateMinY;\n }\n\n if (translateY > translateMaxY) {\n translateY = translateMaxY;\n }\n } else {\n translateX = 0;\n translateY = 0;\n }\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\n function zoomOut() {\n const zoom = swiper.zoom;\n const params = swiper.params.zoom;\n\n if (!gesture.$slideEl) {\n if (swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual) {\n gesture.$slideEl = swiper.$wrapperEl.children(`.${swiper.params.slideActiveClass}`);\n } else {\n gesture.$slideEl = swiper.slides.eq(swiper.activeIndex);\n }\n\n gesture.$imageEl = gesture.$slideEl.find(`.${params.containerClass}`).eq(0).find('picture, img, svg, canvas, .swiper-zoom-target').eq(0);\n gesture.$imageWrapEl = gesture.$imageEl.parent(`.${params.containerClass}`);\n }\n\n if (!gesture.$imageEl || gesture.$imageEl.length === 0 || !gesture.$imageWrapEl || gesture.$imageWrapEl.length === 0) return;\n\n if (swiper.params.cssMode) {\n swiper.wrapperEl.style.overflow = '';\n swiper.wrapperEl.style.touchAction = '';\n }\n\n zoom.scale = 1;\n 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 } // Toggle Zoom\n\n\n function zoomToggle(e) {\n const zoom = swiper.zoom;\n\n if (zoom.scale && zoom.scale !== 1) {\n // Zoom Out\n zoomOut();\n } else {\n // Zoom In\n zoomIn(e);\n }\n }\n\n function getListeners() {\n const support = swiper.support;\n const passiveListener = swiper.touchEvents.start === 'touchstart' && support.passiveListener && swiper.params.passiveListeners ? {\n passive: true,\n capture: false\n } : false;\n const activeListenerWithCapture = support.passiveListener ? {\n passive: false,\n capture: true\n } : true;\n return {\n passiveListener,\n activeListenerWithCapture\n };\n }\n\n function getSlideSelector() {\n return `.${swiper.params.slideClass}`;\n }\n\n function toggleGestures(method) {\n const {\n passiveListener\n } = getListeners();\n const slideSelector = getSlideSelector();\n swiper.$wrapperEl[method]('gesturestart', slideSelector, onGestureStart, passiveListener);\n swiper.$wrapperEl[method]('gesturechange', slideSelector, onGestureChange, passiveListener);\n swiper.$wrapperEl[method]('gestureend', slideSelector, onGestureEnd, passiveListener);\n }\n\n function enableGestures() {\n if (gesturesEnabled) return;\n gesturesEnabled = true;\n toggleGestures('on');\n }\n\n function disableGestures() {\n if (!gesturesEnabled) return;\n gesturesEnabled = false;\n toggleGestures('off');\n } // Attach/Detach Events\n\n\n function enable() {\n const zoom = swiper.zoom;\n if (zoom.enabled) return;\n zoom.enabled = true;\n const support = swiper.support;\n const {\n passiveListener,\n activeListenerWithCapture\n } = getListeners();\n const slideSelector = getSlideSelector(); // Scale image\n\n if (support.gestures) {\n swiper.$wrapperEl.on(swiper.touchEvents.start, enableGestures, passiveListener);\n swiper.$wrapperEl.on(swiper.touchEvents.end, disableGestures, passiveListener);\n } else if (swiper.touchEvents.start === 'touchstart') {\n swiper.$wrapperEl.on(swiper.touchEvents.start, slideSelector, onGestureStart, passiveListener);\n swiper.$wrapperEl.on(swiper.touchEvents.move, slideSelector, onGestureChange, activeListenerWithCapture);\n swiper.$wrapperEl.on(swiper.touchEvents.end, slideSelector, onGestureEnd, passiveListener);\n\n if (swiper.touchEvents.cancel) {\n swiper.$wrapperEl.on(swiper.touchEvents.cancel, slideSelector, onGestureEnd, passiveListener);\n }\n } // Move image\n\n\n swiper.$wrapperEl.on(swiper.touchEvents.move, `.${swiper.params.zoom.containerClass}`, onTouchMove, activeListenerWithCapture);\n }\n\n function disable() {\n const zoom = swiper.zoom;\n if (!zoom.enabled) return;\n const support = swiper.support;\n zoom.enabled = false;\n const {\n passiveListener,\n activeListenerWithCapture\n } = getListeners();\n const slideSelector = getSlideSelector(); // Scale image\n\n if (support.gestures) {\n swiper.$wrapperEl.off(swiper.touchEvents.start, enableGestures, passiveListener);\n swiper.$wrapperEl.off(swiper.touchEvents.end, disableGestures, passiveListener);\n } else if (swiper.touchEvents.start === 'touchstart') {\n swiper.$wrapperEl.off(swiper.touchEvents.start, slideSelector, onGestureStart, passiveListener);\n swiper.$wrapperEl.off(swiper.touchEvents.move, slideSelector, onGestureChange, activeListenerWithCapture);\n swiper.$wrapperEl.off(swiper.touchEvents.end, slideSelector, onGestureEnd, passiveListener);\n\n if (swiper.touchEvents.cancel) {\n swiper.$wrapperEl.off(swiper.touchEvents.cancel, slideSelector, onGestureEnd, passiveListener);\n }\n } // Move image\n\n\n swiper.$wrapperEl.off(swiper.touchEvents.move, `.${swiper.params.zoom.containerClass}`, onTouchMove, activeListenerWithCapture);\n }\n\n on('init', () => {\n if (swiper.params.zoom.enabled) {\n enable();\n }\n });\n on('destroy', () => {\n disable();\n });\n on('touchStart', (_s, e) => {\n if (!swiper.zoom.enabled) return;\n onTouchStart(e);\n });\n on('touchEnd', (_s, e) => {\n if (!swiper.zoom.enabled) return;\n onTouchEnd();\n });\n on('doubleTap', (_s, e) => {\n if (!swiper.animating && swiper.params.zoom.enabled && swiper.zoom.enabled && swiper.params.zoom.toggle) {\n zoomToggle(e);\n }\n });\n on('transitionEnd', () => {\n if (swiper.zoom.enabled && swiper.params.zoom.enabled) {\n onTransitionEnd();\n }\n });\n on('slideChange', () => {\n if (swiper.zoom.enabled && swiper.params.zoom.enabled && swiper.params.cssMode) {\n onTransitionEnd();\n }\n });\n Object.assign(swiper.zoom, {\n enable,\n disable,\n in: zoomIn,\n out: zoomOut,\n toggle: zoomToggle\n });\n }\n\n function Lazy(_ref) {\n let {\n swiper,\n extendParams,\n on,\n emit\n } = _ref;\n extendParams({\n lazy: {\n checkInView: false,\n enabled: false,\n loadPrevNext: false,\n loadPrevNextAmount: 1,\n loadOnTransitionStart: false,\n scrollingElement: '',\n elementClass: 'swiper-lazy',\n loadingClass: 'swiper-lazy-loading',\n loadedClass: 'swiper-lazy-loaded',\n preloaderClass: 'swiper-lazy-preloader'\n }\n });\n swiper.lazy = {};\n let scrollHandlerAttached = false;\n let initialImageLoaded = false;\n\n function loadInSlide(index, loadInDuplicate) {\n if (loadInDuplicate === void 0) {\n loadInDuplicate = true;\n }\n\n const params = swiper.params.lazy;\n if (typeof index === 'undefined') return;\n if (swiper.slides.length === 0) return;\n const isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n const $slideEl = isVirtual ? swiper.$wrapperEl.children(`.${swiper.params.slideClass}[data-swiper-slide-index=\"${index}\"]`) : swiper.slides.eq(index);\n const $images = $slideEl.find(`.${params.elementClass}:not(.${params.loadedClass}):not(.${params.loadingClass})`);\n\n if ($slideEl.hasClass(params.elementClass) && !$slideEl.hasClass(params.loadedClass) && !$slideEl.hasClass(params.loadingClass)) {\n $images.push($slideEl[0]);\n }\n\n if ($images.length === 0) return;\n $images.each(imageEl => {\n const $imageEl = $(imageEl);\n $imageEl.addClass(params.loadingClass);\n const background = $imageEl.attr('data-background');\n const src = $imageEl.attr('data-src');\n const srcset = $imageEl.attr('data-srcset');\n const sizes = $imageEl.attr('data-sizes');\n const $pictureEl = $imageEl.parent('picture');\n swiper.loadImage($imageEl[0], src || background, srcset, sizes, false, () => {\n if (typeof swiper === 'undefined' || swiper === null || !swiper || swiper && !swiper.params || swiper.destroyed) return;\n\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\n if (sizes) {\n $imageEl.attr('sizes', sizes);\n $imageEl.removeAttr('data-sizes');\n }\n\n if ($pictureEl.length) {\n $pictureEl.children('source').each(sourceEl => {\n const $source = $(sourceEl);\n\n if ($source.attr('data-srcset')) {\n $source.attr('srcset', $source.attr('data-srcset'));\n $source.removeAttr('data-srcset');\n }\n });\n }\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\n if (swiper.params.loop && loadInDuplicate) {\n const slideOriginalIndex = $slideEl.attr('data-swiper-slide-index');\n\n if ($slideEl.hasClass(swiper.params.slideDuplicateClass)) {\n const originalSlide = swiper.$wrapperEl.children(`[data-swiper-slide-index=\"${slideOriginalIndex}\"]:not(.${swiper.params.slideDuplicateClass})`);\n loadInSlide(originalSlide.index(), false);\n } else {\n const duplicatedSlide = swiper.$wrapperEl.children(`.${swiper.params.slideDuplicateClass}[data-swiper-slide-index=\"${slideOriginalIndex}\"]`);\n loadInSlide(duplicatedSlide.index(), false);\n }\n }\n\n emit('lazyImageReady', $slideEl[0], $imageEl[0]);\n\n if (swiper.params.autoHeight) {\n swiper.updateAutoHeight();\n }\n });\n emit('lazyImageLoad', $slideEl[0], $imageEl[0]);\n });\n }\n\n function load() {\n const {\n $wrapperEl,\n params: swiperParams,\n slides,\n activeIndex\n } = swiper;\n const isVirtual = swiper.virtual && swiperParams.virtual.enabled;\n const params = swiperParams.lazy;\n let slidesPerView = swiperParams.slidesPerView;\n\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\n return false;\n }\n\n function slideIndex(slideEl) {\n if (isVirtual) {\n return $(slideEl).attr('data-swiper-slide-index');\n }\n\n return $(slideEl).index();\n }\n\n if (!initialImageLoaded) initialImageLoaded = true;\n\n if (swiper.params.watchSlidesProgress) {\n $wrapperEl.children(`.${swiperParams.slideVisibleClass}`).each(slideEl => {\n const index = isVirtual ? $(slideEl).attr('data-swiper-slide-index') : $(slideEl).index();\n loadInSlide(index);\n });\n } else if (slidesPerView > 1) {\n for (let i = activeIndex; i < activeIndex + slidesPerView; i += 1) {\n if (slideExist(i)) loadInSlide(i);\n }\n } else {\n loadInSlide(activeIndex);\n }\n\n if (params.loadPrevNext) {\n if (slidesPerView > 1 || params.loadPrevNextAmount && params.loadPrevNextAmount > 1) {\n const amount = params.loadPrevNextAmount;\n const spv = slidesPerView;\n const maxIndex = Math.min(activeIndex + spv + Math.max(amount, spv), slides.length);\n const minIndex = Math.max(activeIndex - Math.max(spv, amount), 0); // Next Slides\n\n for (let i = activeIndex + slidesPerView; i < maxIndex; i += 1) {\n if (slideExist(i)) loadInSlide(i);\n } // Prev Slides\n\n\n for (let i = minIndex; i < activeIndex; i += 1) {\n if (slideExist(i)) loadInSlide(i);\n }\n } else {\n const nextSlide = $wrapperEl.children(`.${swiperParams.slideNextClass}`);\n if (nextSlide.length > 0) loadInSlide(slideIndex(nextSlide));\n const prevSlide = $wrapperEl.children(`.${swiperParams.slidePrevClass}`);\n if (prevSlide.length > 0) loadInSlide(slideIndex(prevSlide));\n }\n }\n }\n\n function checkInViewOnLoad() {\n const window = getWindow();\n if (!swiper || swiper.destroyed) return;\n const $scrollElement = swiper.params.lazy.scrollingElement ? $(swiper.params.lazy.scrollingElement) : $(window);\n const isWindow = $scrollElement[0] === window;\n const scrollElementWidth = isWindow ? window.innerWidth : $scrollElement[0].offsetWidth;\n const scrollElementHeight = isWindow ? window.innerHeight : $scrollElement[0].offsetHeight;\n const swiperOffset = swiper.$el.offset();\n const {\n rtlTranslate: rtl\n } = swiper;\n let inView = false;\n if (rtl) swiperOffset.left -= swiper.$el[0].scrollLeft;\n const swiperCoord = [[swiperOffset.left, swiperOffset.top], [swiperOffset.left + swiper.width, swiperOffset.top], [swiperOffset.left, swiperOffset.top + swiper.height], [swiperOffset.left + swiper.width, swiperOffset.top + swiper.height]];\n\n for (let i = 0; i < swiperCoord.length; i += 1) {\n const point = swiperCoord[i];\n\n if (point[0] >= 0 && point[0] <= scrollElementWidth && point[1] >= 0 && point[1] <= scrollElementHeight) {\n if (point[0] === 0 && point[1] === 0) continue; // eslint-disable-line\n\n inView = true;\n }\n }\n\n const passiveListener = swiper.touchEvents.start === 'touchstart' && swiper.support.passiveListener && swiper.params.passiveListeners ? {\n passive: true,\n capture: false\n } : false;\n\n if (inView) {\n load();\n $scrollElement.off('scroll', checkInViewOnLoad, passiveListener);\n } else if (!scrollHandlerAttached) {\n scrollHandlerAttached = true;\n $scrollElement.on('scroll', checkInViewOnLoad, passiveListener);\n }\n }\n\n on('beforeInit', () => {\n if (swiper.params.lazy.enabled && swiper.params.preloadImages) {\n swiper.params.preloadImages = false;\n }\n });\n on('init', () => {\n if (swiper.params.lazy.enabled) {\n if (swiper.params.lazy.checkInView) {\n checkInViewOnLoad();\n } else {\n load();\n }\n }\n });\n on('scroll', () => {\n if (swiper.params.freeMode && swiper.params.freeMode.enabled && !swiper.params.freeMode.sticky) {\n load();\n }\n });\n on('scrollbarDragMove resize _freeModeNoMomentumRelease', () => {\n if (swiper.params.lazy.enabled) {\n if (swiper.params.lazy.checkInView) {\n checkInViewOnLoad();\n } else {\n load();\n }\n }\n });\n on('transitionStart', () => {\n if (swiper.params.lazy.enabled) {\n if (swiper.params.lazy.loadOnTransitionStart || !swiper.params.lazy.loadOnTransitionStart && !initialImageLoaded) {\n if (swiper.params.lazy.checkInView) {\n checkInViewOnLoad();\n } else {\n load();\n }\n }\n }\n });\n on('transitionEnd', () => {\n if (swiper.params.lazy.enabled && !swiper.params.lazy.loadOnTransitionStart) {\n if (swiper.params.lazy.checkInView) {\n checkInViewOnLoad();\n } else {\n load();\n }\n }\n });\n on('slideChange', () => {\n const {\n lazy,\n cssMode,\n watchSlidesProgress,\n touchReleaseOnEdges,\n resistanceRatio\n } = swiper.params;\n\n if (lazy.enabled && (cssMode || watchSlidesProgress && (touchReleaseOnEdges || resistanceRatio === 0))) {\n load();\n }\n });\n Object.assign(swiper.lazy, {\n load,\n loadInSlide\n });\n }\n\n /* eslint no-bitwise: [\"error\", { \"allow\": [\">>\"] }] */\n function Controller(_ref) {\n let {\n swiper,\n extendParams,\n on\n } = _ref;\n extendParams({\n controller: {\n control: undefined,\n inverse: false,\n by: 'slide' // or 'container'\n\n }\n });\n swiper.controller = {\n control: undefined\n };\n\n function LinearSpline(x, y) {\n const binarySearch = function search() {\n let maxIndex;\n let minIndex;\n let guess;\n return (array, val) => {\n minIndex = -1;\n maxIndex = array.length;\n\n while (maxIndex - minIndex > 1) {\n guess = maxIndex + minIndex >> 1;\n\n if (array[guess] <= val) {\n minIndex = guess;\n } else {\n maxIndex = guess;\n }\n }\n\n return maxIndex;\n };\n }();\n\n this.x = x;\n this.y = y;\n this.lastIndex = x.length - 1; // 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\n let i1;\n let i3;\n\n this.interpolate = function interpolate(x2) {\n if (!x2) return 0; // Get the indexes of x1 and x3 (the array indexes before and after given x2):\n\n i3 = binarySearch(this.x, x2);\n i1 = i3 - 1; // We have our indexes i1 & i3, so we can calculate already:\n // y2 := ((x2−x1) × (y3−y1)) ÷ (x3−x1) + y1\n\n return (x2 - this.x[i1]) * (this.y[i3] - this.y[i1]) / (this.x[i3] - this.x[i1]) + this.y[i1];\n };\n\n return this;\n } // xxx: for now i will just save one spline function to to\n\n\n function getInterpolateFunction(c) {\n if (!swiper.controller.spline) {\n swiper.controller.spline = swiper.params.loop ? new LinearSpline(swiper.slidesGrid, c.slidesGrid) : new LinearSpline(swiper.snapGrid, c.snapGrid);\n }\n }\n\n function setTranslate(_t, byController) {\n const controlled = swiper.controller.control;\n let multiplier;\n let controlledTranslate;\n const Swiper = swiper.constructor;\n\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 const translate = swiper.rtlTranslate ? -swiper.translate : swiper.translate;\n\n if (swiper.params.controller.by === 'slide') {\n getInterpolateFunction(c); // 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\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\n c.updateProgress(controlledTranslate);\n c.setTranslate(controlledTranslate, swiper);\n c.updateActiveIndex();\n c.updateSlidesClasses();\n }\n\n if (Array.isArray(controlled)) {\n for (let 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\n function setTransition(duration, byController) {\n const Swiper = swiper.constructor;\n const controlled = swiper.controller.control;\n let i;\n\n function setControlledTransition(c) {\n c.setTransition(duration, swiper);\n\n if (duration !== 0) {\n c.transitionStart();\n\n if (c.params.autoHeight) {\n nextTick(() => {\n c.updateAutoHeight();\n });\n }\n\n c.$wrapperEl.transitionEnd(() => {\n if (!controlled) return;\n\n if (c.params.loop && swiper.params.controller.by === 'slide') {\n c.loopFix();\n }\n\n c.transitionEnd();\n });\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 function removeSpline() {\n if (!swiper.controller.control) return;\n\n if (swiper.controller.spline) {\n swiper.controller.spline = undefined;\n delete swiper.controller.spline;\n }\n }\n\n on('beforeInit', () => {\n swiper.controller.control = swiper.params.controller.control;\n });\n on('update', () => {\n removeSpline();\n });\n on('resize', () => {\n removeSpline();\n });\n on('observerUpdate', () => {\n removeSpline();\n });\n on('setTranslate', (_s, translate, byController) => {\n if (!swiper.controller.control) return;\n swiper.controller.setTranslate(translate, byController);\n });\n on('setTransition', (_s, duration, byController) => {\n if (!swiper.controller.control) return;\n swiper.controller.setTransition(duration, byController);\n });\n Object.assign(swiper.controller, {\n setTranslate,\n setTransition\n });\n }\n\n function A11y(_ref) {\n let {\n swiper,\n extendParams,\n on\n } = _ref;\n extendParams({\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 slideLabelMessage: '{{index}} / {{slidesLength}}',\n containerMessage: null,\n containerRoleDescriptionMessage: null,\n itemRoleDescriptionMessage: null,\n slideRole: 'group',\n id: null\n }\n });\n let liveRegion = null;\n\n function notify(message) {\n const notification = liveRegion;\n if (notification.length === 0) return;\n notification.html('');\n notification.html(message);\n }\n\n function getRandomNumber(size) {\n if (size === void 0) {\n size = 16;\n }\n\n const randomChar = () => Math.round(16 * Math.random()).toString(16);\n\n return 'x'.repeat(size).replace(/x/g, randomChar);\n }\n\n function makeElFocusable($el) {\n $el.attr('tabIndex', '0');\n }\n\n function makeElNotFocusable($el) {\n $el.attr('tabIndex', '-1');\n }\n\n function addElRole($el, role) {\n $el.attr('role', role);\n }\n\n function addElRoleDescription($el, description) {\n $el.attr('aria-roledescription', description);\n }\n\n function addElControls($el, controls) {\n $el.attr('aria-controls', controls);\n }\n\n function addElLabel($el, label) {\n $el.attr('aria-label', label);\n }\n\n function addElId($el, id) {\n $el.attr('id', id);\n }\n\n function addElLive($el, live) {\n $el.attr('aria-live', live);\n }\n\n function disableEl($el) {\n $el.attr('aria-disabled', true);\n }\n\n function enableEl($el) {\n $el.attr('aria-disabled', false);\n }\n\n function onEnterOrSpaceKey(e) {\n if (e.keyCode !== 13 && e.keyCode !== 32) return;\n const params = swiper.params.a11y;\n const $targetEl = $(e.target);\n\n if (swiper.navigation && swiper.navigation.$nextEl && $targetEl.is(swiper.navigation.$nextEl)) {\n if (!(swiper.isEnd && !swiper.params.loop)) {\n swiper.slideNext();\n }\n\n if (swiper.isEnd) {\n notify(params.lastSlideMessage);\n } else {\n notify(params.nextSlideMessage);\n }\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\n if (swiper.isBeginning) {\n notify(params.firstSlideMessage);\n } else {\n notify(params.prevSlideMessage);\n }\n }\n\n if (swiper.pagination && $targetEl.is(classesToSelector(swiper.params.pagination.bulletClass))) {\n $targetEl[0].click();\n }\n }\n\n function updateNavigation() {\n if (swiper.params.loop || swiper.params.rewind || !swiper.navigation) return;\n const {\n $nextEl,\n $prevEl\n } = swiper.navigation;\n\n if ($prevEl && $prevEl.length > 0) {\n if (swiper.isBeginning) {\n disableEl($prevEl);\n makeElNotFocusable($prevEl);\n } else {\n enableEl($prevEl);\n makeElFocusable($prevEl);\n }\n }\n\n if ($nextEl && $nextEl.length > 0) {\n if (swiper.isEnd) {\n disableEl($nextEl);\n makeElNotFocusable($nextEl);\n } else {\n enableEl($nextEl);\n makeElFocusable($nextEl);\n }\n }\n }\n\n function hasPagination() {\n return swiper.pagination && swiper.pagination.bullets && swiper.pagination.bullets.length;\n }\n\n function hasClickablePagination() {\n return hasPagination() && swiper.params.pagination.clickable;\n }\n\n function updatePagination() {\n const params = swiper.params.a11y;\n if (!hasPagination()) return;\n swiper.pagination.bullets.each(bulletEl => {\n const $bulletEl = $(bulletEl);\n\n if (swiper.params.pagination.clickable) {\n makeElFocusable($bulletEl);\n\n if (!swiper.params.pagination.renderBullet) {\n addElRole($bulletEl, 'button');\n addElLabel($bulletEl, params.paginationBulletMessage.replace(/\\{\\{index\\}\\}/, $bulletEl.index() + 1));\n }\n }\n\n if ($bulletEl.is(`.${swiper.params.pagination.bulletActiveClass}`)) {\n $bulletEl.attr('aria-current', 'true');\n } else {\n $bulletEl.removeAttr('aria-current');\n }\n });\n }\n\n const initNavEl = ($el, wrapperId, message) => {\n makeElFocusable($el);\n\n if ($el[0].tagName !== 'BUTTON') {\n addElRole($el, 'button');\n $el.on('keydown', onEnterOrSpaceKey);\n }\n\n addElLabel($el, message);\n addElControls($el, wrapperId);\n };\n\n const handleFocus = e => {\n const slideEl = e.target.closest(`.${swiper.params.slideClass}`);\n if (!slideEl || !swiper.slides.includes(slideEl)) return;\n const isActive = swiper.slides.indexOf(slideEl) === swiper.activeIndex;\n const isVisible = swiper.params.watchSlidesProgress && swiper.visibleSlides && swiper.visibleSlides.includes(slideEl);\n if (isActive || isVisible) return;\n swiper.slideTo(swiper.slides.indexOf(slideEl), 0);\n };\n\n function init() {\n const params = swiper.params.a11y;\n swiper.$el.append(liveRegion); // Container\n\n const $containerEl = swiper.$el;\n\n if (params.containerRoleDescriptionMessage) {\n addElRoleDescription($containerEl, params.containerRoleDescriptionMessage);\n }\n\n if (params.containerMessage) {\n addElLabel($containerEl, params.containerMessage);\n } // Wrapper\n\n\n const $wrapperEl = swiper.$wrapperEl;\n const wrapperId = params.id || $wrapperEl.attr('id') || `swiper-wrapper-${getRandomNumber(16)}`;\n const live = swiper.params.autoplay && swiper.params.autoplay.enabled ? 'off' : 'polite';\n addElId($wrapperEl, wrapperId);\n addElLive($wrapperEl, live); // Slide\n\n if (params.itemRoleDescriptionMessage) {\n addElRoleDescription($(swiper.slides), params.itemRoleDescriptionMessage);\n }\n\n addElRole($(swiper.slides), params.slideRole);\n const slidesLength = swiper.params.loop ? swiper.slides.filter(el => !el.classList.contains(swiper.params.slideDuplicateClass)).length : swiper.slides.length;\n swiper.slides.each((slideEl, index) => {\n const $slideEl = $(slideEl);\n const slideIndex = swiper.params.loop ? parseInt($slideEl.attr('data-swiper-slide-index'), 10) : index;\n const ariaLabelMessage = params.slideLabelMessage.replace(/\\{\\{index\\}\\}/, slideIndex + 1).replace(/\\{\\{slidesLength\\}\\}/, slidesLength);\n addElLabel($slideEl, ariaLabelMessage);\n }); // Navigation\n\n let $nextEl;\n let $prevEl;\n\n if (swiper.navigation && swiper.navigation.$nextEl) {\n $nextEl = swiper.navigation.$nextEl;\n }\n\n if (swiper.navigation && swiper.navigation.$prevEl) {\n $prevEl = swiper.navigation.$prevEl;\n }\n\n if ($nextEl && $nextEl.length) {\n initNavEl($nextEl, wrapperId, params.nextSlideMessage);\n }\n\n if ($prevEl && $prevEl.length) {\n initNavEl($prevEl, wrapperId, params.prevSlideMessage);\n } // Pagination\n\n\n if (hasClickablePagination()) {\n swiper.pagination.$el.on('keydown', classesToSelector(swiper.params.pagination.bulletClass), onEnterOrSpaceKey);\n } // Tab focus\n\n\n swiper.$el.on('focus', handleFocus, true);\n }\n\n function destroy() {\n if (liveRegion && liveRegion.length > 0) liveRegion.remove();\n let $nextEl;\n let $prevEl;\n\n if (swiper.navigation && swiper.navigation.$nextEl) {\n $nextEl = swiper.navigation.$nextEl;\n }\n\n if (swiper.navigation && swiper.navigation.$prevEl) {\n $prevEl = swiper.navigation.$prevEl;\n }\n\n if ($nextEl) {\n $nextEl.off('keydown', onEnterOrSpaceKey);\n }\n\n if ($prevEl) {\n $prevEl.off('keydown', onEnterOrSpaceKey);\n } // Pagination\n\n\n if (hasClickablePagination()) {\n swiper.pagination.$el.off('keydown', classesToSelector(swiper.params.pagination.bulletClass), onEnterOrSpaceKey);\n } // Tab focus\n\n\n swiper.$el.off('focus', handleFocus, true);\n }\n\n on('beforeInit', () => {\n liveRegion = $(`<span class=\"${swiper.params.a11y.notificationClass}\" aria-live=\"assertive\" aria-atomic=\"true\"></span>`);\n });\n on('afterInit', () => {\n if (!swiper.params.a11y.enabled) return;\n init();\n });\n on('fromEdge toEdge afterInit lock unlock', () => {\n if (!swiper.params.a11y.enabled) return;\n updateNavigation();\n });\n on('paginationUpdate', () => {\n if (!swiper.params.a11y.enabled) return;\n updatePagination();\n });\n on('destroy', () => {\n if (!swiper.params.a11y.enabled) return;\n destroy();\n });\n }\n\n function History(_ref) {\n let {\n swiper,\n extendParams,\n on\n } = _ref;\n extendParams({\n history: {\n enabled: false,\n root: '',\n replaceState: false,\n key: 'slides'\n }\n });\n let initialized = false;\n let paths = {};\n\n const slugify = text => {\n return text.toString().replace(/\\s+/g, '-').replace(/[^\\w-]+/g, '').replace(/--+/g, '-').replace(/^-+/, '').replace(/-+$/, '');\n };\n\n const getPathValues = urlOverride => {\n const window = getWindow();\n let location;\n\n if (urlOverride) {\n location = new URL(urlOverride);\n } else {\n location = window.location;\n }\n\n const pathArray = location.pathname.slice(1).split('/').filter(part => part !== '');\n const total = pathArray.length;\n const key = pathArray[total - 2];\n const value = pathArray[total - 1];\n return {\n key,\n value\n };\n };\n\n const setHistory = (key, index) => {\n const window = getWindow();\n if (!initialized || !swiper.params.history.enabled) return;\n let location;\n\n if (swiper.params.url) {\n location = new URL(swiper.params.url);\n } else {\n location = window.location;\n }\n\n const slide = swiper.slides.eq(index);\n let value = slugify(slide.attr('data-history'));\n\n if (swiper.params.history.root.length > 0) {\n let root = swiper.params.history.root;\n if (root[root.length - 1] === '/') root = root.slice(0, root.length - 1);\n value = `${root}/${key}/${value}`;\n } else if (!location.pathname.includes(key)) {\n value = `${key}/${value}`;\n }\n\n const currentState = window.history.state;\n\n if (currentState && currentState.value === value) {\n return;\n }\n\n if (swiper.params.history.replaceState) {\n window.history.replaceState({\n value\n }, null, value);\n } else {\n window.history.pushState({\n value\n }, null, value);\n }\n };\n\n const scrollToSlide = (speed, value, runCallbacks) => {\n if (value) {\n for (let i = 0, length = swiper.slides.length; i < length; i += 1) {\n const slide = swiper.slides.eq(i);\n const slideHistory = slugify(slide.attr('data-history'));\n\n if (slideHistory === value && !slide.hasClass(swiper.params.slideDuplicateClass)) {\n const index = slide.index();\n swiper.slideTo(index, speed, runCallbacks);\n }\n }\n } else {\n swiper.slideTo(0, speed, runCallbacks);\n }\n };\n\n const setHistoryPopState = () => {\n paths = getPathValues(swiper.params.url);\n scrollToSlide(swiper.params.speed, swiper.paths.value, false);\n };\n\n const init = () => {\n const window = getWindow();\n if (!swiper.params.history) return;\n\n if (!window.history || !window.history.pushState) {\n swiper.params.history.enabled = false;\n swiper.params.hashNavigation.enabled = true;\n return;\n }\n\n initialized = true;\n paths = getPathValues(swiper.params.url);\n if (!paths.key && !paths.value) return;\n scrollToSlide(0, paths.value, swiper.params.runCallbacksOnInit);\n\n if (!swiper.params.history.replaceState) {\n window.addEventListener('popstate', setHistoryPopState);\n }\n };\n\n const destroy = () => {\n const window = getWindow();\n\n if (!swiper.params.history.replaceState) {\n window.removeEventListener('popstate', setHistoryPopState);\n }\n };\n\n on('init', () => {\n if (swiper.params.history.enabled) {\n init();\n }\n });\n on('destroy', () => {\n if (swiper.params.history.enabled) {\n destroy();\n }\n });\n on('transitionEnd _freeModeNoMomentumRelease', () => {\n if (initialized) {\n setHistory(swiper.params.history.key, swiper.activeIndex);\n }\n });\n on('slideChange', () => {\n if (initialized && swiper.params.cssMode) {\n setHistory(swiper.params.history.key, swiper.activeIndex);\n }\n });\n }\n\n function HashNavigation(_ref) {\n let {\n swiper,\n extendParams,\n emit,\n on\n } = _ref;\n let initialized = false;\n const document = getDocument();\n const window = getWindow();\n extendParams({\n hashNavigation: {\n enabled: false,\n replaceState: false,\n watchState: false\n }\n });\n\n const onHashChange = () => {\n emit('hashChange');\n const newHash = document.location.hash.replace('#', '');\n const activeSlideHash = swiper.slides.eq(swiper.activeIndex).attr('data-hash');\n\n if (newHash !== activeSlideHash) {\n const newIndex = swiper.$wrapperEl.children(`.${swiper.params.slideClass}[data-hash=\"${newHash}\"]`).index();\n if (typeof newIndex === 'undefined') return;\n swiper.slideTo(newIndex);\n }\n };\n\n const setHash = () => {\n if (!initialized || !swiper.params.hashNavigation.enabled) return;\n\n if (swiper.params.hashNavigation.replaceState && window.history && window.history.replaceState) {\n window.history.replaceState(null, null, `#${swiper.slides.eq(swiper.activeIndex).attr('data-hash')}` || '');\n emit('hashSet');\n } else {\n const slide = swiper.slides.eq(swiper.activeIndex);\n const hash = slide.attr('data-hash') || slide.attr('data-history');\n document.location.hash = hash || '';\n emit('hashSet');\n }\n };\n\n const init = () => {\n if (!swiper.params.hashNavigation.enabled || swiper.params.history && swiper.params.history.enabled) return;\n initialized = true;\n const hash = document.location.hash.replace('#', '');\n\n if (hash) {\n const speed = 0;\n\n for (let i = 0, length = swiper.slides.length; i < length; i += 1) {\n const slide = swiper.slides.eq(i);\n const slideHash = slide.attr('data-hash') || slide.attr('data-history');\n\n if (slideHash === hash && !slide.hasClass(swiper.params.slideDuplicateClass)) {\n const index = slide.index();\n swiper.slideTo(index, speed, swiper.params.runCallbacksOnInit, true);\n }\n }\n }\n\n if (swiper.params.hashNavigation.watchState) {\n $(window).on('hashchange', onHashChange);\n }\n };\n\n const destroy = () => {\n if (swiper.params.hashNavigation.watchState) {\n $(window).off('hashchange', onHashChange);\n }\n };\n\n on('init', () => {\n if (swiper.params.hashNavigation.enabled) {\n init();\n }\n });\n on('destroy', () => {\n if (swiper.params.hashNavigation.enabled) {\n destroy();\n }\n });\n on('transitionEnd _freeModeNoMomentumRelease', () => {\n if (initialized) {\n setHash();\n }\n });\n on('slideChange', () => {\n if (initialized && swiper.params.cssMode) {\n setHash();\n }\n });\n }\n\n /* eslint no-underscore-dangle: \"off\" */\n function Autoplay(_ref) {\n let {\n swiper,\n extendParams,\n on,\n emit\n } = _ref;\n let timeout;\n swiper.autoplay = {\n running: false,\n paused: false\n };\n extendParams({\n autoplay: {\n enabled: false,\n delay: 3000,\n waitForTransition: true,\n disableOnInteraction: true,\n stopOnLastSlide: false,\n reverseDirection: false,\n pauseOnMouseEnter: false\n }\n });\n\n function run() {\n const $activeSlideEl = swiper.slides.eq(swiper.activeIndex);\n let delay = swiper.params.autoplay.delay;\n\n if ($activeSlideEl.attr('data-swiper-autoplay')) {\n delay = $activeSlideEl.attr('data-swiper-autoplay') || swiper.params.autoplay.delay;\n }\n\n clearTimeout(timeout);\n timeout = nextTick(() => {\n let autoplayResult;\n\n if (swiper.params.autoplay.reverseDirection) {\n if (swiper.params.loop) {\n swiper.loopFix();\n autoplayResult = swiper.slidePrev(swiper.params.speed, true, true);\n emit('autoplay');\n } else if (!swiper.isBeginning) {\n autoplayResult = swiper.slidePrev(swiper.params.speed, true, true);\n emit('autoplay');\n } else if (!swiper.params.autoplay.stopOnLastSlide) {\n autoplayResult = swiper.slideTo(swiper.slides.length - 1, swiper.params.speed, true, true);\n emit('autoplay');\n } else {\n stop();\n }\n } else if (swiper.params.loop) {\n swiper.loopFix();\n autoplayResult = swiper.slideNext(swiper.params.speed, true, true);\n emit('autoplay');\n } else if (!swiper.isEnd) {\n autoplayResult = swiper.slideNext(swiper.params.speed, true, true);\n emit('autoplay');\n } else if (!swiper.params.autoplay.stopOnLastSlide) {\n autoplayResult = swiper.slideTo(0, swiper.params.speed, true, true);\n emit('autoplay');\n } else {\n stop();\n }\n\n if (swiper.params.cssMode && swiper.autoplay.running) run();else if (autoplayResult === false) {\n run();\n }\n }, delay);\n }\n\n function start() {\n if (typeof timeout !== 'undefined') return false;\n if (swiper.autoplay.running) return false;\n swiper.autoplay.running = true;\n emit('autoplayStart');\n run();\n return true;\n }\n\n function stop() {\n if (!swiper.autoplay.running) return false;\n if (typeof timeout === 'undefined') return false;\n\n if (timeout) {\n clearTimeout(timeout);\n timeout = undefined;\n }\n\n swiper.autoplay.running = false;\n emit('autoplayStop');\n return true;\n }\n\n function pause(speed) {\n if (!swiper.autoplay.running) return;\n if (swiper.autoplay.paused) return;\n if (timeout) clearTimeout(timeout);\n swiper.autoplay.paused = true;\n\n if (speed === 0 || !swiper.params.autoplay.waitForTransition) {\n swiper.autoplay.paused = false;\n run();\n } else {\n ['transitionend', 'webkitTransitionEnd'].forEach(event => {\n swiper.$wrapperEl[0].addEventListener(event, onTransitionEnd);\n });\n }\n }\n\n function onVisibilityChange() {\n const document = getDocument();\n\n if (document.visibilityState === 'hidden' && swiper.autoplay.running) {\n pause();\n }\n\n if (document.visibilityState === 'visible' && swiper.autoplay.paused) {\n run();\n swiper.autoplay.paused = false;\n }\n }\n\n function onTransitionEnd(e) {\n if (!swiper || swiper.destroyed || !swiper.$wrapperEl) return;\n if (e.target !== swiper.$wrapperEl[0]) return;\n ['transitionend', 'webkitTransitionEnd'].forEach(event => {\n swiper.$wrapperEl[0].removeEventListener(event, onTransitionEnd);\n });\n swiper.autoplay.paused = false;\n\n if (!swiper.autoplay.running) {\n stop();\n } else {\n run();\n }\n }\n\n function onMouseEnter() {\n if (swiper.params.autoplay.disableOnInteraction) {\n stop();\n } else {\n emit('autoplayPause');\n pause();\n }\n\n ['transitionend', 'webkitTransitionEnd'].forEach(event => {\n swiper.$wrapperEl[0].removeEventListener(event, onTransitionEnd);\n });\n }\n\n function onMouseLeave() {\n if (swiper.params.autoplay.disableOnInteraction) {\n return;\n }\n\n swiper.autoplay.paused = false;\n emit('autoplayResume');\n run();\n }\n\n function attachMouseEvents() {\n if (swiper.params.autoplay.pauseOnMouseEnter) {\n swiper.$el.on('mouseenter', onMouseEnter);\n swiper.$el.on('mouseleave', onMouseLeave);\n }\n }\n\n function detachMouseEvents() {\n swiper.$el.off('mouseenter', onMouseEnter);\n swiper.$el.off('mouseleave', onMouseLeave);\n }\n\n on('init', () => {\n if (swiper.params.autoplay.enabled) {\n start();\n const document = getDocument();\n document.addEventListener('visibilitychange', onVisibilityChange);\n attachMouseEvents();\n }\n });\n on('beforeTransitionStart', (_s, speed, internal) => {\n if (swiper.autoplay.running) {\n if (internal || !swiper.params.autoplay.disableOnInteraction) {\n swiper.autoplay.pause(speed);\n } else {\n stop();\n }\n }\n });\n on('sliderFirstMove', () => {\n if (swiper.autoplay.running) {\n if (swiper.params.autoplay.disableOnInteraction) {\n stop();\n } else {\n pause();\n }\n }\n });\n on('touchEnd', () => {\n if (swiper.params.cssMode && swiper.autoplay.paused && !swiper.params.autoplay.disableOnInteraction) {\n run();\n }\n });\n on('destroy', () => {\n detachMouseEvents();\n\n if (swiper.autoplay.running) {\n stop();\n }\n\n const document = getDocument();\n document.removeEventListener('visibilitychange', onVisibilityChange);\n });\n Object.assign(swiper.autoplay, {\n pause,\n run,\n start,\n stop\n });\n }\n\n function Thumb(_ref) {\n let {\n swiper,\n extendParams,\n on\n } = _ref;\n extendParams({\n thumbs: {\n swiper: null,\n multipleActiveThumbs: true,\n autoScrollOffset: 0,\n slideThumbActiveClass: 'swiper-slide-thumb-active',\n thumbsContainerClass: 'swiper-thumbs'\n }\n });\n let initialized = false;\n let swiperCreated = false;\n swiper.thumbs = {\n swiper: null\n };\n\n function onThumbClick() {\n const thumbsSwiper = swiper.thumbs.swiper;\n if (!thumbsSwiper || thumbsSwiper.destroyed) return;\n const clickedIndex = thumbsSwiper.clickedIndex;\n const clickedSlide = thumbsSwiper.clickedSlide;\n if (clickedSlide && $(clickedSlide).hasClass(swiper.params.thumbs.slideThumbActiveClass)) return;\n if (typeof clickedIndex === 'undefined' || clickedIndex === null) return;\n let slideToIndex;\n\n if (thumbsSwiper.params.loop) {\n slideToIndex = parseInt($(thumbsSwiper.clickedSlide).attr('data-swiper-slide-index'), 10);\n } else {\n slideToIndex = clickedIndex;\n }\n\n if (swiper.params.loop) {\n let currentIndex = swiper.activeIndex;\n\n if (swiper.slides.eq(currentIndex).hasClass(swiper.params.slideDuplicateClass)) {\n swiper.loopFix(); // eslint-disable-next-line\n\n swiper._clientLeft = swiper.$wrapperEl[0].clientLeft;\n currentIndex = swiper.activeIndex;\n }\n\n const prevIndex = swiper.slides.eq(currentIndex).prevAll(`[data-swiper-slide-index=\"${slideToIndex}\"]`).eq(0).index();\n const nextIndex = swiper.slides.eq(currentIndex).nextAll(`[data-swiper-slide-index=\"${slideToIndex}\"]`).eq(0).index();\n if (typeof prevIndex === 'undefined') slideToIndex = nextIndex;else if (typeof nextIndex === 'undefined') slideToIndex = prevIndex;else if (nextIndex - currentIndex < currentIndex - prevIndex) slideToIndex = nextIndex;else slideToIndex = prevIndex;\n }\n\n swiper.slideTo(slideToIndex);\n }\n\n function init() {\n const {\n thumbs: thumbsParams\n } = swiper.params;\n if (initialized) return false;\n initialized = true;\n const SwiperClass = swiper.constructor;\n\n if (thumbsParams.swiper instanceof SwiperClass) {\n swiper.thumbs.swiper = thumbsParams.swiper;\n Object.assign(swiper.thumbs.swiper.originalParams, {\n watchSlidesProgress: true,\n slideToClickedSlide: false\n });\n Object.assign(swiper.thumbs.swiper.params, {\n watchSlidesProgress: true,\n slideToClickedSlide: false\n });\n } else if (isObject(thumbsParams.swiper)) {\n const thumbsSwiperParams = Object.assign({}, thumbsParams.swiper);\n Object.assign(thumbsSwiperParams, {\n watchSlidesProgress: true,\n slideToClickedSlide: false\n });\n swiper.thumbs.swiper = new SwiperClass(thumbsSwiperParams);\n swiperCreated = true;\n }\n\n swiper.thumbs.swiper.$el.addClass(swiper.params.thumbs.thumbsContainerClass);\n swiper.thumbs.swiper.on('tap', onThumbClick);\n return true;\n }\n\n function update(initial) {\n const thumbsSwiper = swiper.thumbs.swiper;\n if (!thumbsSwiper || thumbsSwiper.destroyed) return;\n const slidesPerView = thumbsSwiper.params.slidesPerView === 'auto' ? thumbsSwiper.slidesPerViewDynamic() : thumbsSwiper.params.slidesPerView;\n const autoScrollOffset = swiper.params.thumbs.autoScrollOffset;\n const useOffset = autoScrollOffset && !thumbsSwiper.params.loop;\n\n if (swiper.realIndex !== thumbsSwiper.realIndex || useOffset) {\n let currentThumbsIndex = thumbsSwiper.activeIndex;\n let newThumbsIndex;\n let direction;\n\n if (thumbsSwiper.params.loop) {\n if (thumbsSwiper.slides.eq(currentThumbsIndex).hasClass(thumbsSwiper.params.slideDuplicateClass)) {\n thumbsSwiper.loopFix(); // eslint-disable-next-line\n\n thumbsSwiper._clientLeft = thumbsSwiper.$wrapperEl[0].clientLeft;\n currentThumbsIndex = thumbsSwiper.activeIndex;\n } // Find actual thumbs index to slide to\n\n\n const prevThumbsIndex = thumbsSwiper.slides.eq(currentThumbsIndex).prevAll(`[data-swiper-slide-index=\"${swiper.realIndex}\"]`).eq(0).index();\n const nextThumbsIndex = thumbsSwiper.slides.eq(currentThumbsIndex).nextAll(`[data-swiper-slide-index=\"${swiper.realIndex}\"]`).eq(0).index();\n\n if (typeof prevThumbsIndex === 'undefined') {\n newThumbsIndex = nextThumbsIndex;\n } else if (typeof nextThumbsIndex === 'undefined') {\n newThumbsIndex = prevThumbsIndex;\n } else if (nextThumbsIndex - currentThumbsIndex === currentThumbsIndex - prevThumbsIndex) {\n newThumbsIndex = thumbsSwiper.params.slidesPerGroup > 1 ? nextThumbsIndex : currentThumbsIndex;\n } else if (nextThumbsIndex - currentThumbsIndex < currentThumbsIndex - prevThumbsIndex) {\n newThumbsIndex = nextThumbsIndex;\n } else {\n newThumbsIndex = prevThumbsIndex;\n }\n\n direction = swiper.activeIndex > swiper.previousIndex ? 'next' : 'prev';\n } else {\n newThumbsIndex = swiper.realIndex;\n direction = newThumbsIndex > swiper.previousIndex ? 'next' : 'prev';\n }\n\n if (useOffset) {\n newThumbsIndex += direction === 'next' ? autoScrollOffset : -1 * autoScrollOffset;\n }\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 && thumbsSwiper.params.slidesPerGroup === 1) ;\n\n thumbsSwiper.slideTo(newThumbsIndex, initial ? 0 : undefined);\n }\n } // Activate thumbs\n\n\n let thumbsToActivate = 1;\n const thumbActiveClass = swiper.params.thumbs.slideThumbActiveClass;\n\n if (swiper.params.slidesPerView > 1 && !swiper.params.centeredSlides) {\n thumbsToActivate = swiper.params.slidesPerView;\n }\n\n if (!swiper.params.thumbs.multipleActiveThumbs) {\n thumbsToActivate = 1;\n }\n\n thumbsToActivate = Math.floor(thumbsToActivate);\n thumbsSwiper.slides.removeClass(thumbActiveClass);\n\n if (thumbsSwiper.params.loop || thumbsSwiper.params.virtual && thumbsSwiper.params.virtual.enabled) {\n for (let i = 0; i < thumbsToActivate; i += 1) {\n thumbsSwiper.$wrapperEl.children(`[data-swiper-slide-index=\"${swiper.realIndex + i}\"]`).addClass(thumbActiveClass);\n }\n } else {\n for (let i = 0; i < thumbsToActivate; i += 1) {\n thumbsSwiper.slides.eq(swiper.realIndex + i).addClass(thumbActiveClass);\n }\n }\n }\n\n on('beforeInit', () => {\n const {\n thumbs\n } = swiper.params;\n if (!thumbs || !thumbs.swiper) return;\n init();\n update(true);\n });\n on('slideChange update resize observerUpdate', () => {\n update();\n });\n on('setTransition', (_s, duration) => {\n const thumbsSwiper = swiper.thumbs.swiper;\n if (!thumbsSwiper || thumbsSwiper.destroyed) return;\n thumbsSwiper.setTransition(duration);\n });\n on('beforeDestroy', () => {\n const thumbsSwiper = swiper.thumbs.swiper;\n if (!thumbsSwiper || thumbsSwiper.destroyed) return;\n\n if (swiperCreated) {\n thumbsSwiper.destroy();\n }\n });\n Object.assign(swiper.thumbs, {\n init,\n update\n });\n }\n\n function freeMode(_ref) {\n let {\n swiper,\n extendParams,\n emit,\n once\n } = _ref;\n extendParams({\n freeMode: {\n enabled: false,\n momentum: true,\n momentumRatio: 1,\n momentumBounce: true,\n momentumBounceRatio: 1,\n momentumVelocityRatio: 1,\n sticky: false,\n minimumVelocity: 0.02\n }\n });\n\n function onTouchStart() {\n const translate = swiper.getTranslate();\n swiper.setTranslate(translate);\n swiper.setTransition(0);\n swiper.touchEventsData.velocities.length = 0;\n swiper.freeMode.onTouchEnd({\n currentPos: swiper.rtl ? swiper.translate : -swiper.translate\n });\n }\n\n function onTouchMove() {\n const {\n touchEventsData: data,\n touches\n } = swiper; // Velocity\n\n if (data.velocities.length === 0) {\n data.velocities.push({\n position: touches[swiper.isHorizontal() ? 'startX' : 'startY'],\n time: data.touchStartTime\n });\n }\n\n data.velocities.push({\n position: touches[swiper.isHorizontal() ? 'currentX' : 'currentY'],\n time: now()\n });\n }\n\n function onTouchEnd(_ref2) {\n let {\n currentPos\n } = _ref2;\n const {\n params,\n $wrapperEl,\n rtlTranslate: rtl,\n snapGrid,\n touchEventsData: data\n } = swiper; // Time diff\n\n const touchEndTime = now();\n const timeDiff = touchEndTime - data.touchStartTime;\n\n if (currentPos < -swiper.minTranslate()) {\n swiper.slideTo(swiper.activeIndex);\n return;\n }\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\n return;\n }\n\n if (params.freeMode.momentum) {\n if (data.velocities.length > 1) {\n const lastMoveEvent = data.velocities.pop();\n const velocityEvent = data.velocities.pop();\n const distance = lastMoveEvent.position - velocityEvent.position;\n const time = lastMoveEvent.time - velocityEvent.time;\n swiper.velocity = distance / time;\n swiper.velocity /= 2;\n\n if (Math.abs(swiper.velocity) < params.freeMode.minimumVelocity) {\n swiper.velocity = 0;\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\n\n if (time > 150 || now() - lastMoveEvent.time > 300) {\n swiper.velocity = 0;\n }\n } else {\n swiper.velocity = 0;\n }\n\n swiper.velocity *= params.freeMode.momentumVelocityRatio;\n data.velocities.length = 0;\n let momentumDuration = 1000 * params.freeMode.momentumRatio;\n const momentumDistance = swiper.velocity * momentumDuration;\n let newPosition = swiper.translate + momentumDistance;\n if (rtl) newPosition = -newPosition;\n let doBounce = false;\n let afterBouncePosition;\n const bounceAmount = Math.abs(swiper.velocity) * 20 * params.freeMode.momentumBounceRatio;\n let needsLoopFix;\n\n if (newPosition < swiper.maxTranslate()) {\n if (params.freeMode.momentumBounce) {\n if (newPosition + swiper.maxTranslate() < -bounceAmount) {\n newPosition = swiper.maxTranslate() - bounceAmount;\n }\n\n afterBouncePosition = swiper.maxTranslate();\n doBounce = true;\n data.allowMomentumBounce = true;\n } else {\n newPosition = swiper.maxTranslate();\n }\n\n if (params.loop && params.centeredSlides) needsLoopFix = true;\n } else if (newPosition > swiper.minTranslate()) {\n if (params.freeMode.momentumBounce) {\n if (newPosition - swiper.minTranslate() > bounceAmount) {\n newPosition = swiper.minTranslate() + bounceAmount;\n }\n\n afterBouncePosition = swiper.minTranslate();\n doBounce = true;\n data.allowMomentumBounce = true;\n } else {\n newPosition = swiper.minTranslate();\n }\n\n if (params.loop && params.centeredSlides) needsLoopFix = true;\n } else if (params.freeMode.sticky) {\n let nextSlide;\n\n for (let 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\n newPosition = -newPosition;\n }\n\n if (needsLoopFix) {\n once('transitionEnd', () => {\n swiper.loopFix();\n });\n } // Fix duration\n\n\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\n if (params.freeMode.sticky) {\n // If freeMode.sticky is active and the user ends a swipe with a slow-velocity\n // event, then durations can be 20+ seconds to slide one (or zero!) slides.\n // It's easy to see this when simulating touch with mouse events. To fix this,\n // limit single-slide swipes to the default slide duration. This also has the\n // nice side effect of matching slide speed if the user stopped moving before\n // lifting finger or mouse vs. moving slowly before lifting the finger/mouse.\n // For faster swipes, also apply limits (albeit higher ones).\n const moveDistance = Math.abs((rtl ? -newPosition : newPosition) - swiper.translate);\n const currentSlideSize = swiper.slidesSizesGrid[swiper.activeIndex];\n\n if (moveDistance < currentSlideSize) {\n momentumDuration = params.speed;\n } else if (moveDistance < 2 * currentSlideSize) {\n momentumDuration = params.speed * 1.5;\n } else {\n momentumDuration = params.speed * 2.5;\n }\n }\n } else if (params.freeMode.sticky) {\n swiper.slideToClosest();\n return;\n }\n\n if (params.freeMode.momentumBounce && 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(() => {\n if (!swiper || swiper.destroyed || !data.allowMomentumBounce) return;\n emit('momentumBounce');\n swiper.setTransition(params.speed);\n setTimeout(() => {\n swiper.setTranslate(afterBouncePosition);\n $wrapperEl.transitionEnd(() => {\n if (!swiper || swiper.destroyed) return;\n swiper.transitionEnd();\n });\n }, 0);\n });\n } else if (swiper.velocity) {\n emit('_freeModeNoMomentumRelease');\n swiper.updateProgress(newPosition);\n swiper.setTransition(momentumDuration);\n swiper.setTranslate(newPosition);\n swiper.transitionStart(true, swiper.swipeDirection);\n\n if (!swiper.animating) {\n swiper.animating = true;\n $wrapperEl.transitionEnd(() => {\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.freeMode.sticky) {\n swiper.slideToClosest();\n return;\n } else if (params.freeMode) {\n emit('_freeModeNoMomentumRelease');\n }\n\n if (!params.freeMode.momentum || timeDiff >= params.longSwipesMs) {\n swiper.updateProgress();\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n }\n\n Object.assign(swiper, {\n freeMode: {\n onTouchStart,\n onTouchMove,\n onTouchEnd\n }\n });\n }\n\n function Grid(_ref) {\n let {\n swiper,\n extendParams\n } = _ref;\n extendParams({\n grid: {\n rows: 1,\n fill: 'column'\n }\n });\n let slidesNumberEvenToRows;\n let slidesPerRow;\n let numFullColumns;\n\n const initSlides = slidesLength => {\n const {\n slidesPerView\n } = swiper.params;\n const {\n rows,\n fill\n } = swiper.params.grid;\n slidesPerRow = slidesNumberEvenToRows / rows;\n numFullColumns = Math.floor(slidesLength / rows);\n\n if (Math.floor(slidesLength / rows) === slidesLength / rows) {\n slidesNumberEvenToRows = slidesLength;\n } else {\n slidesNumberEvenToRows = Math.ceil(slidesLength / rows) * rows;\n }\n\n if (slidesPerView !== 'auto' && fill === 'row') {\n slidesNumberEvenToRows = Math.max(slidesNumberEvenToRows, slidesPerView * rows);\n }\n };\n\n const updateSlide = (i, slide, slidesLength, getDirectionLabel) => {\n const {\n slidesPerGroup,\n spaceBetween\n } = swiper.params;\n const {\n rows,\n fill\n } = swiper.params.grid; // Set slides order\n\n let newSlideOrderIndex;\n let column;\n let row;\n\n if (fill === 'row' && slidesPerGroup > 1) {\n const groupIndex = Math.floor(i / (slidesPerGroup * rows));\n const slideIndexInGroup = i - rows * slidesPerGroup * groupIndex;\n const columnsInGroup = groupIndex === 0 ? slidesPerGroup : Math.min(Math.ceil((slidesLength - groupIndex * rows * slidesPerGroup) / rows), slidesPerGroup);\n row = Math.floor(slideIndexInGroup / columnsInGroup);\n column = slideIndexInGroup - row * columnsInGroup + groupIndex * slidesPerGroup;\n newSlideOrderIndex = column + row * slidesNumberEvenToRows / rows;\n slide.css({\n '-webkit-order': newSlideOrderIndex,\n order: newSlideOrderIndex\n });\n } else if (fill === 'column') {\n column = Math.floor(i / rows);\n row = i - column * rows;\n\n if (column > numFullColumns || column === numFullColumns && row === rows - 1) {\n row += 1;\n\n if (row >= rows) {\n row = 0;\n column += 1;\n }\n }\n } else {\n row = Math.floor(i / slidesPerRow);\n column = i - row * slidesPerRow;\n }\n\n slide.css(getDirectionLabel('margin-top'), row !== 0 ? spaceBetween && `${spaceBetween}px` : '');\n };\n\n const updateWrapperSize = (slideSize, snapGrid, getDirectionLabel) => {\n const {\n spaceBetween,\n centeredSlides,\n roundLengths\n } = swiper.params;\n const {\n rows\n } = swiper.params.grid;\n swiper.virtualSize = (slideSize + spaceBetween) * slidesNumberEvenToRows;\n swiper.virtualSize = Math.ceil(swiper.virtualSize / rows) - spaceBetween;\n swiper.$wrapperEl.css({\n [getDirectionLabel('width')]: `${swiper.virtualSize + spaceBetween}px`\n });\n\n if (centeredSlides) {\n snapGrid.splice(0, snapGrid.length);\n const newSlidesGrid = [];\n\n for (let i = 0; i < snapGrid.length; i += 1) {\n let slidesGridItem = snapGrid[i];\n if (roundLengths) slidesGridItem = Math.floor(slidesGridItem);\n if (snapGrid[i] < swiper.virtualSize + snapGrid[0]) newSlidesGrid.push(slidesGridItem);\n }\n\n snapGrid.push(...newSlidesGrid);\n }\n };\n\n swiper.grid = {\n initSlides,\n updateSlide,\n updateWrapperSize\n };\n }\n\n function appendSlide(slides) {\n const swiper = this;\n const {\n $wrapperEl,\n params\n } = swiper;\n\n if (params.loop) {\n swiper.loopDestroy();\n }\n\n if (typeof slides === 'object' && 'length' in slides) {\n for (let i = 0; i < slides.length; i += 1) {\n if (slides[i]) $wrapperEl.append(slides[i]);\n }\n } else {\n $wrapperEl.append(slides);\n }\n\n if (params.loop) {\n swiper.loopCreate();\n }\n\n if (!params.observer) {\n swiper.update();\n }\n }\n\n function prependSlide(slides) {\n const swiper = this;\n const {\n params,\n $wrapperEl,\n activeIndex\n } = swiper;\n\n if (params.loop) {\n swiper.loopDestroy();\n }\n\n let newActiveIndex = activeIndex + 1;\n\n if (typeof slides === 'object' && 'length' in slides) {\n for (let i = 0; i < slides.length; i += 1) {\n if (slides[i]) $wrapperEl.prepend(slides[i]);\n }\n\n newActiveIndex = activeIndex + slides.length;\n } else {\n $wrapperEl.prepend(slides);\n }\n\n if (params.loop) {\n swiper.loopCreate();\n }\n\n if (!params.observer) {\n swiper.update();\n }\n\n swiper.slideTo(newActiveIndex, 0, false);\n }\n\n function addSlide(index, slides) {\n const swiper = this;\n const {\n $wrapperEl,\n params,\n activeIndex\n } = swiper;\n let activeIndexBuffer = activeIndex;\n\n if (params.loop) {\n activeIndexBuffer -= swiper.loopedSlides;\n swiper.loopDestroy();\n swiper.slides = $wrapperEl.children(`.${params.slideClass}`);\n }\n\n const baseLength = swiper.slides.length;\n\n if (index <= 0) {\n swiper.prependSlide(slides);\n return;\n }\n\n if (index >= baseLength) {\n swiper.appendSlide(slides);\n return;\n }\n\n let newActiveIndex = activeIndexBuffer > index ? activeIndexBuffer + 1 : activeIndexBuffer;\n const slidesBuffer = [];\n\n for (let i = baseLength - 1; i >= index; i -= 1) {\n const currentSlide = swiper.slides.eq(i);\n currentSlide.remove();\n slidesBuffer.unshift(currentSlide);\n }\n\n if (typeof slides === 'object' && 'length' in slides) {\n for (let i = 0; i < slides.length; i += 1) {\n if (slides[i]) $wrapperEl.append(slides[i]);\n }\n\n newActiveIndex = activeIndexBuffer > index ? activeIndexBuffer + slides.length : activeIndexBuffer;\n } else {\n $wrapperEl.append(slides);\n }\n\n for (let i = 0; i < slidesBuffer.length; i += 1) {\n $wrapperEl.append(slidesBuffer[i]);\n }\n\n if (params.loop) {\n swiper.loopCreate();\n }\n\n if (!params.observer) {\n swiper.update();\n }\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 const swiper = this;\n const {\n params,\n $wrapperEl,\n activeIndex\n } = swiper;\n let activeIndexBuffer = activeIndex;\n\n if (params.loop) {\n activeIndexBuffer -= swiper.loopedSlides;\n swiper.loopDestroy();\n swiper.slides = $wrapperEl.children(`.${params.slideClass}`);\n }\n\n let newActiveIndex = activeIndexBuffer;\n let indexToRemove;\n\n if (typeof slidesIndexes === 'object' && 'length' in slidesIndexes) {\n for (let 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\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) {\n swiper.update();\n }\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 const swiper = this;\n const slidesIndexes = [];\n\n for (let i = 0; i < swiper.slides.length; i += 1) {\n slidesIndexes.push(i);\n }\n\n swiper.removeSlide(slidesIndexes);\n }\n\n function Manipulation(_ref) {\n let {\n swiper\n } = _ref;\n Object.assign(swiper, {\n appendSlide: appendSlide.bind(swiper),\n prependSlide: prependSlide.bind(swiper),\n addSlide: addSlide.bind(swiper),\n removeSlide: removeSlide.bind(swiper),\n removeAllSlides: removeAllSlides.bind(swiper)\n });\n }\n\n function effectInit(params) {\n const {\n effect,\n swiper,\n on,\n setTranslate,\n setTransition,\n overwriteParams,\n perspective,\n recreateShadows,\n getEffectParams\n } = params;\n on('beforeInit', () => {\n if (swiper.params.effect !== effect) return;\n swiper.classNames.push(`${swiper.params.containerModifierClass}${effect}`);\n\n if (perspective && perspective()) {\n swiper.classNames.push(`${swiper.params.containerModifierClass}3d`);\n }\n\n const overwriteParamsResult = overwriteParams ? overwriteParams() : {};\n Object.assign(swiper.params, overwriteParamsResult);\n Object.assign(swiper.originalParams, overwriteParamsResult);\n });\n on('setTranslate', () => {\n if (swiper.params.effect !== effect) return;\n setTranslate();\n });\n on('setTransition', (_s, duration) => {\n if (swiper.params.effect !== effect) return;\n setTransition(duration);\n });\n on('transitionEnd', () => {\n if (swiper.params.effect !== effect) return;\n\n if (recreateShadows) {\n if (!getEffectParams || !getEffectParams().slideShadows) return; // remove shadows\n\n swiper.slides.each(slideEl => {\n const $slideEl = swiper.$(slideEl);\n $slideEl.find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').remove();\n }); // create new one\n\n recreateShadows();\n }\n });\n let requireUpdateOnVirtual;\n on('virtualUpdate', () => {\n if (swiper.params.effect !== effect) return;\n\n if (!swiper.slides.length) {\n requireUpdateOnVirtual = true;\n }\n\n requestAnimationFrame(() => {\n if (requireUpdateOnVirtual && swiper.slides && swiper.slides.length) {\n setTranslate();\n requireUpdateOnVirtual = false;\n }\n });\n });\n }\n\n function effectTarget(effectParams, $slideEl) {\n if (effectParams.transformEl) {\n return $slideEl.find(effectParams.transformEl).css({\n 'backface-visibility': 'hidden',\n '-webkit-backface-visibility': 'hidden'\n });\n }\n\n return $slideEl;\n }\n\n function effectVirtualTransitionEnd(_ref) {\n let {\n swiper,\n duration,\n transformEl,\n allSlides\n } = _ref;\n const {\n slides,\n activeIndex,\n $wrapperEl\n } = swiper;\n\n if (swiper.params.virtualTranslate && duration !== 0) {\n let eventTriggered = false;\n let $transitionEndTarget;\n\n if (allSlides) {\n $transitionEndTarget = transformEl ? slides.find(transformEl) : slides;\n } else {\n $transitionEndTarget = transformEl ? slides.eq(activeIndex).find(transformEl) : slides.eq(activeIndex);\n }\n\n $transitionEndTarget.transitionEnd(() => {\n if (eventTriggered) return;\n if (!swiper || swiper.destroyed) return;\n eventTriggered = true;\n swiper.animating = false;\n const triggerEvents = ['webkitTransitionEnd', 'transitionend'];\n\n for (let i = 0; i < triggerEvents.length; i += 1) {\n $wrapperEl.trigger(triggerEvents[i]);\n }\n });\n }\n }\n\n function EffectFade(_ref) {\n let {\n swiper,\n extendParams,\n on\n } = _ref;\n extendParams({\n fadeEffect: {\n crossFade: false,\n transformEl: null\n }\n });\n\n const setTranslate = () => {\n const {\n slides\n } = swiper;\n const params = swiper.params.fadeEffect;\n\n for (let i = 0; i < slides.length; i += 1) {\n const $slideEl = swiper.slides.eq(i);\n const offset = $slideEl[0].swiperSlideOffset;\n let tx = -offset;\n if (!swiper.params.virtualTranslate) tx -= swiper.translate;\n let ty = 0;\n\n if (!swiper.isHorizontal()) {\n ty = tx;\n tx = 0;\n }\n\n const slideOpacity = swiper.params.fadeEffect.crossFade ? Math.max(1 - Math.abs($slideEl[0].progress), 0) : 1 + Math.min(Math.max($slideEl[0].progress, -1), 0);\n const $targetEl = effectTarget(params, $slideEl);\n $targetEl.css({\n opacity: slideOpacity\n }).transform(`translate3d(${tx}px, ${ty}px, 0px)`);\n }\n };\n\n const setTransition = duration => {\n const {\n transformEl\n } = swiper.params.fadeEffect;\n const $transitionElements = transformEl ? swiper.slides.find(transformEl) : swiper.slides;\n $transitionElements.transition(duration);\n effectVirtualTransitionEnd({\n swiper,\n duration,\n transformEl,\n allSlides: true\n });\n };\n\n effectInit({\n effect: 'fade',\n swiper,\n on,\n setTranslate,\n setTransition,\n overwriteParams: () => ({\n slidesPerView: 1,\n slidesPerGroup: 1,\n watchSlidesProgress: true,\n spaceBetween: 0,\n virtualTranslate: !swiper.params.cssMode\n })\n });\n }\n\n function EffectCube(_ref) {\n let {\n swiper,\n extendParams,\n on\n } = _ref;\n extendParams({\n cubeEffect: {\n slideShadows: true,\n shadow: true,\n shadowOffset: 20,\n shadowScale: 0.94\n }\n });\n\n const createSlideShadows = ($slideEl, progress, isHorizontal) => {\n let shadowBefore = isHorizontal ? $slideEl.find('.swiper-slide-shadow-left') : $slideEl.find('.swiper-slide-shadow-top');\n let shadowAfter = isHorizontal ? $slideEl.find('.swiper-slide-shadow-right') : $slideEl.find('.swiper-slide-shadow-bottom');\n\n if (shadowBefore.length === 0) {\n shadowBefore = $(`<div class=\"swiper-slide-shadow-${isHorizontal ? 'left' : 'top'}\"></div>`);\n $slideEl.append(shadowBefore);\n }\n\n if (shadowAfter.length === 0) {\n shadowAfter = $(`<div class=\"swiper-slide-shadow-${isHorizontal ? 'right' : 'bottom'}\"></div>`);\n $slideEl.append(shadowAfter);\n }\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 const recreateShadows = () => {\n // create new ones\n const isHorizontal = swiper.isHorizontal();\n swiper.slides.each(slideEl => {\n const progress = Math.max(Math.min(slideEl.progress, 1), -1);\n createSlideShadows($(slideEl), progress, isHorizontal);\n });\n };\n\n const setTranslate = () => {\n const {\n $el,\n $wrapperEl,\n slides,\n width: swiperWidth,\n height: swiperHeight,\n rtlTranslate: rtl,\n size: swiperSize,\n browser\n } = swiper;\n const params = swiper.params.cubeEffect;\n const isHorizontal = swiper.isHorizontal();\n const isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n let wrapperRotate = 0;\n let $cubeShadowEl;\n\n if (params.shadow) {\n if (isHorizontal) {\n $cubeShadowEl = $wrapperEl.find('.swiper-cube-shadow');\n\n if ($cubeShadowEl.length === 0) {\n $cubeShadowEl = $('<div class=\"swiper-cube-shadow\"></div>');\n $wrapperEl.append($cubeShadowEl);\n }\n\n $cubeShadowEl.css({\n height: `${swiperWidth}px`\n });\n } else {\n $cubeShadowEl = $el.find('.swiper-cube-shadow');\n\n if ($cubeShadowEl.length === 0) {\n $cubeShadowEl = $('<div class=\"swiper-cube-shadow\"></div>');\n $el.append($cubeShadowEl);\n }\n }\n }\n\n for (let i = 0; i < slides.length; i += 1) {\n const $slideEl = slides.eq(i);\n let slideIndex = i;\n\n if (isVirtual) {\n slideIndex = parseInt($slideEl.attr('data-swiper-slide-index'), 10);\n }\n\n let slideAngle = slideIndex * 90;\n let round = Math.floor(slideAngle / 360);\n\n if (rtl) {\n slideAngle = -slideAngle;\n round = Math.floor(-slideAngle / 360);\n }\n\n const progress = Math.max(Math.min($slideEl[0].progress, 1), -1);\n let tx = 0;\n let ty = 0;\n let tz = 0;\n\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\n if (rtl) {\n tx = -tx;\n }\n\n if (!isHorizontal) {\n ty = tx;\n tx = 0;\n }\n\n const transform = `rotateX(${isHorizontal ? 0 : -slideAngle}deg) rotateY(${isHorizontal ? slideAngle : 0}deg) translate3d(${tx}px, ${ty}px, ${tz}px)`;\n\n if (progress <= 1 && progress > -1) {\n wrapperRotate = slideIndex * 90 + progress * 90;\n if (rtl) wrapperRotate = -slideIndex * 90 - progress * 90;\n }\n\n $slideEl.transform(transform);\n\n if (params.slideShadows) {\n createSlideShadows($slideEl, progress, isHorizontal);\n }\n }\n\n $wrapperEl.css({\n '-webkit-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 const shadowAngle = Math.abs(wrapperRotate) - Math.floor(Math.abs(wrapperRotate) / 90) * 90;\n const multiplier = 1.5 - (Math.sin(shadowAngle * 2 * Math.PI / 360) / 2 + Math.cos(shadowAngle * 2 * Math.PI / 360) / 2);\n const scale1 = params.shadowScale;\n const scale2 = params.shadowScale / multiplier;\n const 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\n const zFactor = browser.isSafari || browser.isWebView ? -swiperSize / 2 : 0;\n $wrapperEl.transform(`translate3d(0px,0,${zFactor}px) rotateX(${swiper.isHorizontal() ? 0 : wrapperRotate}deg) rotateY(${swiper.isHorizontal() ? -wrapperRotate : 0}deg)`);\n $wrapperEl[0].style.setProperty('--swiper-cube-translate-z', `${zFactor}px`);\n };\n\n const setTransition = duration => {\n const {\n $el,\n slides\n } = swiper;\n slides.transition(duration).find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').transition(duration);\n\n if (swiper.params.cubeEffect.shadow && !swiper.isHorizontal()) {\n $el.find('.swiper-cube-shadow').transition(duration);\n }\n };\n\n effectInit({\n effect: 'cube',\n swiper,\n on,\n setTranslate,\n setTransition,\n recreateShadows,\n getEffectParams: () => swiper.params.cubeEffect,\n perspective: () => true,\n overwriteParams: () => ({\n slidesPerView: 1,\n slidesPerGroup: 1,\n watchSlidesProgress: true,\n resistanceRatio: 0,\n spaceBetween: 0,\n centeredSlides: false,\n virtualTranslate: true\n })\n });\n }\n\n function createShadow(params, $slideEl, side) {\n const shadowClass = `swiper-slide-shadow${side ? `-${side}` : ''}`;\n const $shadowContainer = params.transformEl ? $slideEl.find(params.transformEl) : $slideEl;\n let $shadowEl = $shadowContainer.children(`.${shadowClass}`);\n\n if (!$shadowEl.length) {\n $shadowEl = $(`<div class=\"swiper-slide-shadow${side ? `-${side}` : ''}\"></div>`);\n $shadowContainer.append($shadowEl);\n }\n\n return $shadowEl;\n }\n\n function EffectFlip(_ref) {\n let {\n swiper,\n extendParams,\n on\n } = _ref;\n extendParams({\n flipEffect: {\n slideShadows: true,\n limitRotation: true,\n transformEl: null\n }\n });\n\n const createSlideShadows = ($slideEl, progress, params) => {\n let shadowBefore = swiper.isHorizontal() ? $slideEl.find('.swiper-slide-shadow-left') : $slideEl.find('.swiper-slide-shadow-top');\n let shadowAfter = swiper.isHorizontal() ? $slideEl.find('.swiper-slide-shadow-right') : $slideEl.find('.swiper-slide-shadow-bottom');\n\n if (shadowBefore.length === 0) {\n shadowBefore = createShadow(params, $slideEl, swiper.isHorizontal() ? 'left' : 'top');\n }\n\n if (shadowAfter.length === 0) {\n shadowAfter = createShadow(params, $slideEl, swiper.isHorizontal() ? 'right' : 'bottom');\n }\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 const recreateShadows = () => {\n // Set shadows\n const params = swiper.params.flipEffect;\n swiper.slides.each(slideEl => {\n const $slideEl = $(slideEl);\n let progress = $slideEl[0].progress;\n\n if (swiper.params.flipEffect.limitRotation) {\n progress = Math.max(Math.min(slideEl.progress, 1), -1);\n }\n\n createSlideShadows($slideEl, progress, params);\n });\n };\n\n const setTranslate = () => {\n const {\n slides,\n rtlTranslate: rtl\n } = swiper;\n const params = swiper.params.flipEffect;\n\n for (let i = 0; i < slides.length; i += 1) {\n const $slideEl = slides.eq(i);\n let progress = $slideEl[0].progress;\n\n if (swiper.params.flipEffect.limitRotation) {\n progress = Math.max(Math.min($slideEl[0].progress, 1), -1);\n }\n\n const offset = $slideEl[0].swiperSlideOffset;\n const rotate = -180 * progress;\n let rotateY = rotate;\n let rotateX = 0;\n let tx = swiper.params.cssMode ? -offset - swiper.translate : -offset;\n let ty = 0;\n\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 (params.slideShadows) {\n createSlideShadows($slideEl, progress, params);\n }\n\n const transform = `translate3d(${tx}px, ${ty}px, 0px) rotateX(${rotateX}deg) rotateY(${rotateY}deg)`;\n const $targetEl = effectTarget(params, $slideEl);\n $targetEl.transform(transform);\n }\n };\n\n const setTransition = duration => {\n const {\n transformEl\n } = swiper.params.flipEffect;\n const $transitionElements = transformEl ? swiper.slides.find(transformEl) : swiper.slides;\n $transitionElements.transition(duration).find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').transition(duration);\n effectVirtualTransitionEnd({\n swiper,\n duration,\n transformEl\n });\n };\n\n effectInit({\n effect: 'flip',\n swiper,\n on,\n setTranslate,\n setTransition,\n recreateShadows,\n getEffectParams: () => swiper.params.flipEffect,\n perspective: () => true,\n overwriteParams: () => ({\n slidesPerView: 1,\n slidesPerGroup: 1,\n watchSlidesProgress: true,\n spaceBetween: 0,\n virtualTranslate: !swiper.params.cssMode\n })\n });\n }\n\n function EffectCoverflow(_ref) {\n let {\n swiper,\n extendParams,\n on\n } = _ref;\n extendParams({\n coverflowEffect: {\n rotate: 50,\n stretch: 0,\n depth: 100,\n scale: 1,\n modifier: 1,\n slideShadows: true,\n transformEl: null\n }\n });\n\n const setTranslate = () => {\n const {\n width: swiperWidth,\n height: swiperHeight,\n slides,\n slidesSizesGrid\n } = swiper;\n const params = swiper.params.coverflowEffect;\n const isHorizontal = swiper.isHorizontal();\n const transform = swiper.translate;\n const center = isHorizontal ? -transform + swiperWidth / 2 : -transform + swiperHeight / 2;\n const rotate = isHorizontal ? params.rotate : -params.rotate;\n const translate = params.depth; // Each slide offset from center\n\n for (let i = 0, length = slides.length; i < length; i += 1) {\n const $slideEl = slides.eq(i);\n const slideSize = slidesSizesGrid[i];\n const slideOffset = $slideEl[0].swiperSlideOffset;\n const centerOffset = (center - slideOffset - slideSize / 2) / slideSize;\n const offsetMultiplier = typeof params.modifier === 'function' ? params.modifier(centerOffset) : centerOffset * params.modifier;\n let rotateY = isHorizontal ? rotate * offsetMultiplier : 0;\n let rotateX = isHorizontal ? 0 : rotate * offsetMultiplier; // var rotateZ = 0\n\n let translateZ = -translate * Math.abs(offsetMultiplier);\n let stretch = params.stretch; // Allow percentage to make a relative stretch for responsive sliders\n\n if (typeof stretch === 'string' && stretch.indexOf('%') !== -1) {\n stretch = parseFloat(params.stretch) / 100 * slideSize;\n }\n\n let translateY = isHorizontal ? 0 : stretch * offsetMultiplier;\n let translateX = isHorizontal ? stretch * offsetMultiplier : 0;\n let scale = 1 - (1 - params.scale) * Math.abs(offsetMultiplier); // Fix for ultra small values\n\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 if (Math.abs(scale) < 0.001) scale = 0;\n const slideTransform = `translate3d(${translateX}px,${translateY}px,${translateZ}px) rotateX(${rotateX}deg) rotateY(${rotateY}deg) scale(${scale})`;\n const $targetEl = effectTarget(params, $slideEl);\n $targetEl.transform(slideTransform);\n $slideEl[0].style.zIndex = -Math.abs(Math.round(offsetMultiplier)) + 1;\n\n if (params.slideShadows) {\n // Set shadows\n let $shadowBeforeEl = isHorizontal ? $slideEl.find('.swiper-slide-shadow-left') : $slideEl.find('.swiper-slide-shadow-top');\n let $shadowAfterEl = isHorizontal ? $slideEl.find('.swiper-slide-shadow-right') : $slideEl.find('.swiper-slide-shadow-bottom');\n\n if ($shadowBeforeEl.length === 0) {\n $shadowBeforeEl = createShadow(params, $slideEl, isHorizontal ? 'left' : 'top');\n }\n\n if ($shadowAfterEl.length === 0) {\n $shadowAfterEl = createShadow(params, $slideEl, isHorizontal ? 'right' : 'bottom');\n }\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\n const setTransition = duration => {\n const {\n transformEl\n } = swiper.params.coverflowEffect;\n const $transitionElements = transformEl ? swiper.slides.find(transformEl) : swiper.slides;\n $transitionElements.transition(duration).find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').transition(duration);\n };\n\n effectInit({\n effect: 'coverflow',\n swiper,\n on,\n setTranslate,\n setTransition,\n perspective: () => true,\n overwriteParams: () => ({\n watchSlidesProgress: true\n })\n });\n }\n\n function EffectCreative(_ref) {\n let {\n swiper,\n extendParams,\n on\n } = _ref;\n extendParams({\n creativeEffect: {\n transformEl: null,\n limitProgress: 1,\n shadowPerProgress: false,\n progressMultiplier: 1,\n perspective: true,\n prev: {\n translate: [0, 0, 0],\n rotate: [0, 0, 0],\n opacity: 1,\n scale: 1\n },\n next: {\n translate: [0, 0, 0],\n rotate: [0, 0, 0],\n opacity: 1,\n scale: 1\n }\n }\n });\n\n const getTranslateValue = value => {\n if (typeof value === 'string') return value;\n return `${value}px`;\n };\n\n const setTranslate = () => {\n const {\n slides,\n $wrapperEl,\n slidesSizesGrid\n } = swiper;\n const params = swiper.params.creativeEffect;\n const {\n progressMultiplier: multiplier\n } = params;\n const isCenteredSlides = swiper.params.centeredSlides;\n\n if (isCenteredSlides) {\n const margin = slidesSizesGrid[0] / 2 - swiper.params.slidesOffsetBefore || 0;\n $wrapperEl.transform(`translateX(calc(50% - ${margin}px))`);\n }\n\n for (let i = 0; i < slides.length; i += 1) {\n const $slideEl = slides.eq(i);\n const slideProgress = $slideEl[0].progress;\n const progress = Math.min(Math.max($slideEl[0].progress, -params.limitProgress), params.limitProgress);\n let originalProgress = progress;\n\n if (!isCenteredSlides) {\n originalProgress = Math.min(Math.max($slideEl[0].originalProgress, -params.limitProgress), params.limitProgress);\n }\n\n const offset = $slideEl[0].swiperSlideOffset;\n const t = [swiper.params.cssMode ? -offset - swiper.translate : -offset, 0, 0];\n const r = [0, 0, 0];\n let custom = false;\n\n if (!swiper.isHorizontal()) {\n t[1] = t[0];\n t[0] = 0;\n }\n\n let data = {\n translate: [0, 0, 0],\n rotate: [0, 0, 0],\n scale: 1,\n opacity: 1\n };\n\n if (progress < 0) {\n data = params.next;\n custom = true;\n } else if (progress > 0) {\n data = params.prev;\n custom = true;\n } // set translate\n\n\n t.forEach((value, index) => {\n t[index] = `calc(${value}px + (${getTranslateValue(data.translate[index])} * ${Math.abs(progress * multiplier)}))`;\n }); // set rotates\n\n r.forEach((value, index) => {\n r[index] = data.rotate[index] * Math.abs(progress * multiplier);\n });\n $slideEl[0].style.zIndex = -Math.abs(Math.round(slideProgress)) + slides.length;\n const translateString = t.join(', ');\n const rotateString = `rotateX(${r[0]}deg) rotateY(${r[1]}deg) rotateZ(${r[2]}deg)`;\n const scaleString = originalProgress < 0 ? `scale(${1 + (1 - data.scale) * originalProgress * multiplier})` : `scale(${1 - (1 - data.scale) * originalProgress * multiplier})`;\n const opacityString = originalProgress < 0 ? 1 + (1 - data.opacity) * originalProgress * multiplier : 1 - (1 - data.opacity) * originalProgress * multiplier;\n const transform = `translate3d(${translateString}) ${rotateString} ${scaleString}`; // Set shadows\n\n if (custom && data.shadow || !custom) {\n let $shadowEl = $slideEl.children('.swiper-slide-shadow');\n\n if ($shadowEl.length === 0 && data.shadow) {\n $shadowEl = createShadow(params, $slideEl);\n }\n\n if ($shadowEl.length) {\n const shadowOpacity = params.shadowPerProgress ? progress * (1 / params.limitProgress) : progress;\n $shadowEl[0].style.opacity = Math.min(Math.max(Math.abs(shadowOpacity), 0), 1);\n }\n }\n\n const $targetEl = effectTarget(params, $slideEl);\n $targetEl.transform(transform).css({\n opacity: opacityString\n });\n\n if (data.origin) {\n $targetEl.css('transform-origin', data.origin);\n }\n }\n };\n\n const setTransition = duration => {\n const {\n transformEl\n } = swiper.params.creativeEffect;\n const $transitionElements = transformEl ? swiper.slides.find(transformEl) : swiper.slides;\n $transitionElements.transition(duration).find('.swiper-slide-shadow').transition(duration);\n effectVirtualTransitionEnd({\n swiper,\n duration,\n transformEl,\n allSlides: true\n });\n };\n\n effectInit({\n effect: 'creative',\n swiper,\n on,\n setTranslate,\n setTransition,\n perspective: () => swiper.params.creativeEffect.perspective,\n overwriteParams: () => ({\n watchSlidesProgress: true,\n virtualTranslate: !swiper.params.cssMode\n })\n });\n }\n\n function EffectCards(_ref) {\n let {\n swiper,\n extendParams,\n on\n } = _ref;\n extendParams({\n cardsEffect: {\n slideShadows: true,\n transformEl: null,\n rotate: true\n }\n });\n\n const setTranslate = () => {\n const {\n slides,\n activeIndex\n } = swiper;\n const params = swiper.params.cardsEffect;\n const {\n startTranslate,\n isTouched\n } = swiper.touchEventsData;\n const currentTranslate = swiper.translate;\n\n for (let i = 0; i < slides.length; i += 1) {\n const $slideEl = slides.eq(i);\n const slideProgress = $slideEl[0].progress;\n const progress = Math.min(Math.max(slideProgress, -4), 4);\n let offset = $slideEl[0].swiperSlideOffset;\n\n if (swiper.params.centeredSlides && !swiper.params.cssMode) {\n swiper.$wrapperEl.transform(`translateX(${swiper.minTranslate()}px)`);\n }\n\n if (swiper.params.centeredSlides && swiper.params.cssMode) {\n offset -= slides[0].swiperSlideOffset;\n }\n\n let tX = swiper.params.cssMode ? -offset - swiper.translate : -offset;\n let tY = 0;\n const tZ = -100 * Math.abs(progress);\n let scale = 1;\n let rotate = -2 * progress;\n let tXAdd = 8 - Math.abs(progress) * 0.75;\n const slideIndex = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.from + i : i;\n const isSwipeToNext = (slideIndex === activeIndex || slideIndex === activeIndex - 1) && progress > 0 && progress < 1 && (isTouched || swiper.params.cssMode) && currentTranslate < startTranslate;\n const isSwipeToPrev = (slideIndex === activeIndex || slideIndex === activeIndex + 1) && progress < 0 && progress > -1 && (isTouched || swiper.params.cssMode) && currentTranslate > startTranslate;\n\n if (isSwipeToNext || isSwipeToPrev) {\n const subProgress = (1 - Math.abs((Math.abs(progress) - 0.5) / 0.5)) ** 0.5;\n rotate += -28 * progress * subProgress;\n scale += -0.5 * subProgress;\n tXAdd += 96 * subProgress;\n tY = `${-25 * subProgress * Math.abs(progress)}%`;\n }\n\n if (progress < 0) {\n // next\n tX = `calc(${tX}px + (${tXAdd * Math.abs(progress)}%))`;\n } else if (progress > 0) {\n // prev\n tX = `calc(${tX}px + (-${tXAdd * Math.abs(progress)}%))`;\n } else {\n tX = `${tX}px`;\n }\n\n if (!swiper.isHorizontal()) {\n const prevY = tY;\n tY = tX;\n tX = prevY;\n }\n\n const scaleString = progress < 0 ? `${1 + (1 - scale) * progress}` : `${1 - (1 - scale) * progress}`;\n const transform = `\n translate3d(${tX}, ${tY}, ${tZ}px)\n rotateZ(${params.rotate ? rotate : 0}deg)\n scale(${scaleString})\n `;\n\n if (params.slideShadows) {\n // Set shadows\n let $shadowEl = $slideEl.find('.swiper-slide-shadow');\n\n if ($shadowEl.length === 0) {\n $shadowEl = createShadow(params, $slideEl);\n }\n\n if ($shadowEl.length) $shadowEl[0].style.opacity = Math.min(Math.max((Math.abs(progress) - 0.5) / 0.5, 0), 1);\n }\n\n $slideEl[0].style.zIndex = -Math.abs(Math.round(slideProgress)) + slides.length;\n const $targetEl = effectTarget(params, $slideEl);\n $targetEl.transform(transform);\n }\n };\n\n const setTransition = duration => {\n const {\n transformEl\n } = swiper.params.cardsEffect;\n const $transitionElements = transformEl ? swiper.slides.find(transformEl) : swiper.slides;\n $transitionElements.transition(duration).find('.swiper-slide-shadow').transition(duration);\n effectVirtualTransitionEnd({\n swiper,\n duration,\n transformEl\n });\n };\n\n effectInit({\n effect: 'cards',\n swiper,\n on,\n setTranslate,\n setTransition,\n perspective: () => true,\n overwriteParams: () => ({\n watchSlidesProgress: true,\n virtualTranslate: !swiper.params.cssMode\n })\n });\n }\n\n // Swiper Class\n const modules = [Virtual, Keyboard, Mousewheel, Navigation, Pagination, Scrollbar, Parallax, Zoom, Lazy, Controller, A11y, History, HashNavigation, Autoplay, Thumb, freeMode, Grid, Manipulation, EffectFade, EffectCube, EffectFlip, EffectCoverflow, EffectCreative, EffectCards];\n Swiper.use(modules);\n\n return Swiper;\n\n}));\n//# sourceMappingURL=swiper-bundle.js.map\n","const header = document.querySelector('header.mm-menu.js-main-nav');\n\n// Add as much padding top as header height to main element in order to menu and page title avoid overlap\nconst mainContentSpacer = () => {\n //TODO: fix when menu will be there??\n if(header){\n document.documentElement.style.setProperty('--header-height', header.clientHeight + 'px');\n }\n}\n\nconst videoButtonsHide =() =>{\n let videos = document.querySelectorAll('video');\n\n setTimeout(() => {\n videos.forEach(function (video) {\n const ampElement = video.closest('.azuremediaplayer');\n ampElement && ampElement.classList.add('hide-buttons');\n });\n }, 1000);\n \n}\n\n\nconst initialHeight = () =>{\n let el = document.querySelector(\"html\");\n const vhInitial = .01 * window.innerHeight;\n el.style.setProperty(\"--vh-initial\", vhInitial + \"px\");\n let vh = vhInitial\n , set = !1;\n window.addEventListener(\"resize\", ()=>{\n var e = .01 * window.innerHeight;\n e === vh || set || (set = !0,\n vh = e,\n el.style.setProperty(\"--vh\", vh + \"px\"))\n }\n )\n}\n \nmodule.exports = {\n mainContentSpacer: mainContentSpacer,\n initialHeight: initialHeight,\n // videoButtonsHide:videoButtonsHide\n}","const videoAmpObserver = new IntersectionObserver((entries) => {\n entries.forEach( entry => {\n if (entry.isIntersecting) {\n if(!entry.target.classList.contains('initialized')){\n if (typeof shaka !== 'undefined'){\n const videoElement = entry.target.querySelector('video.shakamediaplayer');\n\n if (videoElement.classList.contains('pagedesigner')) {\n pageDesignerMobileVideoCheck(videoElement);\n }\n\n if (!videoElement.classList.contains('initialized')) {\n const url = isIOS() ? videoElement.getAttribute('data-ios-src') : videoElement.getAttribute('src');\n videoElement.closest('.mm-video-card').classList.add('initialized');\n initShaka(videoElement, url);\n }\n };\n } else {\n if (typeof shaka !== 'undefined'){\n const videoElement = entry.target.querySelector('video.shakamediaplayer');\n videoElement.play();\n };\n }\n } else {\n if(entry.target.classList.contains('initialized')){\n if (typeof shaka !== 'undefined'){\n const videoElement = entry.target.querySelector('video.shakamediaplayer');\n videoElement.pause();\n };\n }\n }\n });\n});\n\nconst observeUninitializedVideos = function(){\n const videoTiles = document.querySelectorAll('.mm-video-card:not(.observed)');\n videoTiles.forEach((vt) => {\n vt.classList.add('observed');\n vt.addEventListener('mousewheel', function (e) {\n e.stopPropagation();\n }, true);\n videoAmpObserver.observe(vt)\n });\n};\n\nconst einsteinObserver = new MutationObserver((mutationList, observer) => {\n // Use traditional 'for loops' for IE 11\n for (const mutation of mutationList) {\n if (mutation.type === 'childList') {\n observeUninitializedVideos();\n }\n }\n});\n\nconst observeEinsteinCarousels = function(){\n const recommendSection = document.querySelectorAll('.recommendations');\n recommendSection.forEach(rs => einsteinObserver.observe(rs, {childList: true, subtree: true }));\n\n}\n\nconst videoInit = () => {\n if (window.shaka) {\n var videoElements = document.querySelectorAll('.shakamediaplayer:not(.mm-tile-video-shaka)');\n shaka.polyfill.installAll();\n\n if (shaka.Player.isBrowserSupported()) {\n // Everything looks good!\n if (videoElements && videoElements.length) {\n videoElements.forEach((videoElement) => {\n if (videoElement.classList.contains('pagedesigner')) {\n pageDesignerMobileVideoCheck(videoElement);\n }\n\n if (!videoElement.classList.contains('initialized')) {\n let url = isIOS() ? videoElement.getAttribute('data-ios-src') : videoElement.getAttribute('src');\n if(!url){\n url = isIOS() ? videoElement.querySelector('source').getAttribute('data-ios-src') : videoElement.querySelector('source').getAttribute('src');\n }\n\n videoElement.classList.add('initialized');\n if (videoElement.closest('.mm-video-card')) {\n videoElement.closest('.mm-video-card').classList.add('initialized');\n }\n\n initShaka(videoElement, url);\n }\n });\n }\n } else {\n // This browser does not have the minimum set of APIs we need.\n console.error('Browser not supported!');\n }\n }\n\n observeUninitializedVideos();\n observeEinsteinCarousels();\n $('body').on('product:update-plp-cards wishlist:update-plp-cards', function() {\n observeUninitializedVideos();\n })\n};\n\nconst pageDesignerMobileVideoCheck = (videoElement) => {\n const videoContainer = videoElement.closest('.mm-video-card');\n if (videoContainer) {\n var mobileVideo = videoContainer.querySelector(\".mobile-video\");\n if (window.innerWidth < 768 && mobileVideo) {\n if (mobileVideo.nextElementSibling) {\n if (mobileVideo.nextElementSibling.querySelector('video source')) {\n if (isIOS()) {\n mobileVideo.nextElementSibling.querySelector('video source').setAttribute(\"data-ios-src\", mobileVideo.getAttribute(\"data-ios-src\"));\n } else {\n mobileVideo.nextElementSibling.querySelector('video source').setAttribute(\"src\", mobileVideo.getAttribute(\"data-src\"));\n }\n } else {\n if (isIOS()) {\n mobileVideo.nextElementSibling.querySelector('video').setAttribute(\"src\", mobileVideo.getAttribute(\"data-ios-src\"));\n } else {\n mobileVideo.nextElementSibling.querySelector('video').setAttribute(\"src\", mobileVideo.getAttribute(\"data-src\"));\n }\n }\n\n if (window.innerWidth/window.innerHeight > 0.56) {\n mobileVideo.nextElementSibling.classList.toggle('resize');\n }\n }\n }\n }\n}\n\nconst isIOS = () => {\n return [\n 'iPad Simulator',\n 'iPhone Simulator',\n 'iPod Simulator',\n 'iPad',\n 'iPhone',\n 'iPod'\n ].includes(navigator.platform)\n // iPad on iOS 13 detection\n || (navigator.userAgent.includes(\"Mac\") && \"ontouchend\" in document)\n};\n\nasync function initShaka(video, url) {\n\n try{\n if(video){\n video.muted=true;\n }\n const player = new shaka.Player();\n\n await player.attach(video);\n\n // Attach player to the window to make it easy to access in the JS console.\n window.player = player;\n\n // Listen for error events.\n player.addEventListener('error', onErrorEvent);\n\n }catch(e){\n console.log('error on attach video: '+url)\n console.log(e.detail)\n }\n // Try to load a manifest.\n // This is an asynchronous process.\n try {\n player.configure({\n mediaSource: {\n forceTransmux: true\n },\n streaming: {\n preferNativeHls : true\n }\n });\n await player.load(url);\n console.log(url);\n // This runs if the asynchronous load is successful.\n console.log('The video has now been loaded!');\n } catch (e) {\n video.classList.remove('initialized');\n video.classList.add('uninitialized');\n // onError is executed if the asynchronous load fails.\n console.error('Error on video initialize for video: '+url)\n onError(e);\n }\n\n function onErrorEvent(event) {\n // Extract the shaka.util.Error object from the event.\n onError(event.detail);\n }\n\n function onError(error) {\n // Log the error.\n console.error('Error code', error.code, 'object', error);\n }\n}\n\nmodule.exports = {\n videoInit: videoInit,\n}\n","const idDesktop = window.innerWidth >= 1024;\nconst showOrHide = (el, op) => {\n if(op === 'show') {\n document.querySelector(el).classList.add('is-open');\n document.querySelector('.dropdown.layer-minicart') ? document.querySelector('.dropdown.layer-minicart').classList.remove('animate-minicart-closure') : null;\n } else {\n // document.querySelector('.dropdown.layer-minicart.is-open') ? document.querySelector('.dropdown.layer-minicart.is-open').classList.add('animate-minicart-closure') : null;\n if(document.querySelector(el)){\n document.querySelector(el).classList.remove('is-open');\n }\n // setTimeout(() => {\n // document.querySelector('.dropdown.layer-minicart') ? document.querySelector('.dropdown.layer-minicart').classList.remove('animate-minicart-closure') : null;\n // }, 2000);\n }\n}\n\nif(idDesktop) {\n $('.desktop-minicart-button').on('click', () => {\n const isMiniCartOpen = document.querySelector('.dropdown.layer-minicart.is-open');\n showOrHide('.layer-minicart #layer-minicart', isMiniCartOpen ? 'hide' : 'show');\n });\n $(document).on('click', (e) => {\n e.target.classList.contains('minicart-close') ? $('desktop-minicart-button').trigger('click') : null;\n if(!e.target.closest('#layer-minicart')) {\n showOrHide('.layer-minicart #layer-minicart', 'hide');\n }\n });\n}\n\n\n$(document).on('DOMNodeInserted', function(e) { \n if($(e.target).hasClass('paypal-checkout-sandbox')){\n if(document.activeElement.parentElement.parentElement.classList.contains('paypal-cart-button-minicart')){\n fastCheckout('paypal', 'minicart');\n }\n }\n});\n\n\n$('body').on('click', '.apple-pay-minicart-button', function() {\n fastCheckout('applepay', 'minicart');\n});\n\n\nfunction fastCheckout(cartType, buttonPosition) {\n var fastCheckoutUrl = $(\".track-fast-checkout-url\").val();\n var fastCheckoutData = cartType + '_fast_' + buttonPosition;\n\n if(fastCheckoutUrl) {\n $.ajax({\n url: fastCheckoutUrl,\n method: 'GET',\n dataType: 'json',\n data: { fastPayment: fastCheckoutData},\n success: function (data) {\n $('body').trigger('checkout:fastCheckoutStart', [cartType, buttonPosition]);\n }\n });\n }\n}\n","const selects = document.querySelectorAll('.mm-form-select select');\n\nif(selects) {\n selects.forEach(s => {\n if(s.querySelector('option[value=\"\"]') && s.querySelector('option[selected]') && s.querySelector('option[disabled]')) {\n s.closest('.mm-form-select').classList.add('-hidden-floating-label');\n s.addEventListener('change', () => {\n s.closest('.mm-form-select').classList.remove('-hidden-floating-label')\n });\n }\n });\n}\n\n","const { forEach } = require(\"lodash\");\nvar keyboardAccessibility = require('base/components/keyboardAccessibility');\n\nvar prevent = false;\n\n$(document).on({\n mouseenter: function(e) {\n const isMobile = /iPhone|iPad|iPod|Android/i.test(navigator.userAgent);\n if (isMobile && $('.menu-open').length == 0) {\n prevent = true;\n e.preventDefault();\n }\n //do not open menu if it is already opened by keyboard\n if(!isMobile && $('.menu-open').length) {\n return;\n }\n $('.sub-06').removeClass('hidden');\n $('.other-menu').removeClass('hidden');\n var firstLevel;\n var secondLevel;\n var thirdLevel;\n\n if ($('.breadcrumb-first').length > 0) {\n firstLevel = $('.breadcrumb-first')[0].dataset.parentcategoryselector;\n if ($('.levelSelector-'+ firstLevel + ' .submenu').length > 0) {\n if ($('.breadcrumb-second').length > 0) {\n secondLevel = $('.breadcrumb-second')[0].dataset.parentcategoryselector;\n }\n if ($('.breadcrumb-third').length > 0) {\n thirdLevel = $('.breadcrumb-third')[0].dataset.parentcategoryselector;\n }\n\n $('.levelSelector-'+ firstLevel).removeClass('closed');\n \n $('.levelSelector-'+ firstLevel + ' .submenu').removeClass('hidden');\n if (thirdLevel) {\n $('.levelSelector-'+ firstLevel + ' .thirdLevelCatSelector-'+thirdLevel).addClass('-active');\n }\n } else {\n $('.menu06-selector').removeClass('closed');\n }\n } else {\n $('.menu06-selector').removeClass('closed');\n }\n \n $('.menu-item-container').addClass('menu-open');\n $('.menu-item-container').addClass('animate');\n $('.js-menu-wrapper')[0].style.height = `48px`;\n $('.js-menu-wrapper')[0].style.overflow = 'visible';\n\n if(!isMobile && document.querySelector('.pageIncludePrivateSalesParentMenu')) {\n var pageIncludePrivateSalesParentMenu = document.querySelectorAll('.pageIncludePrivateSalesParentMenu');\n pageIncludePrivateSalesParentMenu.forEach((el) => {\n var url = el.dataset.url;\n $.ajax({\n url: url,\n method: \"get\",\n success: function(data) {\n $(el).replaceWith(data);\n }\n });\n });\n }\n\n if (prevent) {\n e.preventDefault();\n }\n },\n mouseleave: function(e) {\n $('.submenu').addClass('hidden');\n $('.menu-item-container').removeClass('animate');\n $('.other-menu').addClass('hidden');\n $('.menu1-selector').remove('closed');\n var toClose =$('.mm-menu__primary__start')[0].dataset.toClose;\n $( '.sub-' + toClose).addClass('hidden');\n var menuSelector = '.menu' + toClose + '-selector';\n $(menuSelector).addClass('closed');\n $('.menu-item-container').removeClass('menu-open');\n }\n}, \".mm-menu__primary__start\");\n\n$(document).on({\n click: function(e) {\n e.currentTarget.querySelector('.image-video-component').classList.add('-focus');\n }\n}, \".pd-page__content .circular-banners .experience-component\");\n\n$(document).on({\n click: function(e) {\n if (prevent) {\n e.preventDefault();\n prevent = false;\n }\n }\n}, \".mm-menu__primary__start\");\n\n$(document).on({\n click: function(e) {\n if (this.classList.contains('-unclickable')) {\n e.preventDefault();\n var id = this.id;\n var selector = '.sub-' + id;\n var menuSelectorPrevious = '.menu' + this.parentNode.parentNode.dataset.previousparent + '-selector';\n var menuSelector = '.menu' + id + '-selector';\n var selectorParent = '.sub-' + this.parentNode.parentNode.dataset.previousparent;\n var container = $('.mm-menu__primary__start');\n container[0].dataset.toClose = id;\n $(selectorParent).addClass('hidden');\n $(menuSelectorPrevious).addClass('closed');\n $(menuSelector).removeClass('closed');\n\n $(selector).removeClass('hidden');\n }\n }\n}, \".main-section\");\n\n$(document).ready(function() {\n if($('.breadcrumb-item.first-element').length > 0) {\n var first = $('.breadcrumb-item.first-element')[0].children[0].dataset.parentcategory;\n var selector = $('.mm-menu__primary__item');\n\n for (var i = 0; i < selector.length; i++) {\n if (selector[i].dataset && selector[i].dataset.categoryId == first) {\n selector[i].classList.add('-active');\n }\n }\n }\n\n\n\n\n\nconst isMobile = /iPhone|iPad|iPod|Android/i.test(navigator.userAgent);\n if (!isMobile) {\n let options = {\n root: document.querySelector('.mm-menu__container'),\n rootMargin: \"0px\",\n threshold: 1.0,\n };\n \n let observer = new IntersectionObserver((entries) => {\n entries.forEach(entry => {\n var url = entry.target.dataset.url;\n $.ajax({\n url: url,\n method: \"get\",\n success: function(data) {\n \n var classList = entry.target.classList;\n var elemClass = '';\n classList.forEach((targetClass) => {\n elemClass = elemClass + '.' + targetClass;\n });\n \n var allElem = document.querySelectorAll(elemClass);\n allElem.forEach((el) => {\n $(el).replaceWith(data);\n });\n }\n });\n });\n }, options);\n\n \n\n document.querySelector(\".includePrivateHeaderMenuMM\") ? observer.observe(document.querySelector(\".includePrivateHeaderMenuMM\")) : '';\n document.querySelector(\".includePrivateHeaderMenuMM6\") ? observer.observe(document.querySelector(\".includePrivateHeaderMenuMM6\")) : ''; \n document.querySelector(\".pageIncludePrivateSalesParentMenuMM\") ? observer.observe(document.querySelector(\".pageIncludePrivateSalesParentMenuMM\")) : '';\n document.querySelector(\".pageIncludePrivateSalesParentMenuMM6\") ? observer.observe(document.querySelector(\".pageIncludePrivateSalesParentMenuMM6\")) : '';\n\n \n }\n //trriger hover event\n $('.visually-hidden-focusable.-navigation-a11y.js-primary-button').on('click', function() {\n // CREATING AN EVENT FOR HOVER\n var event = new MouseEvent('mouseover', {\n 'view': window,\n 'bubbles': true,\n 'cancelable': true\n });\n\n document.querySelector(\".mm-menu__primary__start\").dispatchEvent(event);\n $('.brand-item.brand1 a').focus();\n\n var parentID = $(this).next('div').data('previousparent');\n $('.categories-menu.menu-item:not(.closed)').find('#'+parentID).trigger('click');\n \n }); \n\n\n //click on parent category\n $(\".mm-button.-unclickable.js-primary-link.main-section\").keydown(function(event) {\n if (event.keyCode === 13) {\n $(this).click();\n $('.categories-menu.menu-item:not(.closed) .mm-button.-unclickable.js-primary-link.main-section.-active').focus();\n }\n });\n\n //lost focus\n const container = document.querySelector('.mm-menu__primary__start');\n $('.mm-menu__primary').on('keyup', (event) => {\n //keyboard user left menu \n if (event.keyCode === 9 && !container.contains(document.activeElement)) {\n $('.mm-menu__primary__start').trigger('mouseleave');\n }\n });\n\n keyboardAccessibility('.mm-menu-item, .mm-button.js-primary-link, .mm-menu__secondary__list__title',\n {\n 40: function (menuItem) { // down\n if($(this).hasClass('mm-menu-item') && $(this).hasClass('js-primary-link')) {\n if($(this).parent().next().length > 0) {\n $(this).parent().next().find('a').first().focus();\n } else {\n $('.menu-open ul:not(.d-none) .categories-menu:not(.closed) .parent-menu div:first-child')\n .first()\n .focus();\n }\n \n } else if ($(this).hasClass('main-section') && $(this).hasClass('js-primary-link')) {\n $(this).next().length > 0 ? $(this).next().focus() : $(this).parent().parent().find('.submenu-content').find('.mm-menu-item a').first().focus();\n } else if($(this).hasClass('mm-menu-item')) {\n if($(this).next().length > 0) {\n $(this).next().find('a').focus();\n } else {\n if($(this).parent().parent().next().find('a').first().length > 0) {\n $(this).parent().parent().next().find('a').first().focus();\n } else {\n $(this).focus();\n }\n }\n } else if($(this).parent().next().length > 0) {\n $(this).parent().find('.mm-menu-item a').first().focus();\n }\n \n },\n 38: function (menuItem) { // up\n if ($(this).hasClass('main-section') && $(this).hasClass('js-primary-link')) {\n $(this).prev().length > 0 ? $(this).prev().focus() : $(\".js-header-menu-goto-brand-mm6\").focus();\n } else if($(this).hasClass('mm-menu-item') && !$(this).hasClass('js-header-menu-goto-brand-mm')) {\n if($(this).prev().length > 0) { \n if($(this).prev().find('a').length > 0) {\n $(this).prev().find('a').focus();\n } \n } \n else {\n if($(this).parent().prev().find('a').length > 0) {\n $(this).parent().prev().find('a').last().focus();\n } \n else {\n $('.menu-open ul:not(.d-none) .categories-menu:not(.closed) .parent-menu div')\n .last()\n .focus();\n }\n }\n } else if($(this).hasClass('mm-menu__secondary__list__title')){ \n $(this).parent().prev().find('a').last().focus();\n }\n\n },\n 27: function () { // escape\n $('.mm-menu__primary__start').trigger('mouseleave');\n }\n },\n function () {\n if(event.shiftKey && event.keyCode == 9) {\n if($(this).hasClass('js-header-menu-goto-brand-mm')) {\n $('.mm-menu__primary__start').trigger('mouseleave');\n }\n if($(this).prev().length === 0) {\n if($(this).hasClass('js-primary-link') && $(this).hasClass('main-section')) {\n event.preventDefault();\n $(\".js-header-menu-goto-brand-mm6\").focus();\n }\n }\n } else if (event.keyCode === 9) {\n if($(this).hasClass('js-header-menu-goto-brand-mm6')) {\n event.preventDefault();\n $('.menu-open ul:not(.d-none) .categories-menu:not(.closed) .parent-menu div:first-child')\n .first()\n .focus();\n }\n } else {\n return $(this).parent();\n } \n }\n);\n \n});","/**\n * @license\n * Lodash <https://lodash.com/>\n * Copyright OpenJS Foundation and other contributors <https://openjsf.org/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n;(function() {\n\n /** Used as a safe reference for `undefined` in pre-ES5 environments. */\n var undefined;\n\n /** Used as the semantic version number. */\n var VERSION = '4.17.21';\n\n /** Used as the size to enable large array optimizations. */\n var LARGE_ARRAY_SIZE = 200;\n\n /** Error message constants. */\n var CORE_ERROR_TEXT = 'Unsupported core-js use. Try https://npms.io/search?q=ponyfill.',\n FUNC_ERROR_TEXT = 'Expected a function',\n INVALID_TEMPL_VAR_ERROR_TEXT = 'Invalid `variable` option passed into `_.template`';\n\n /** Used to stand-in for `undefined` hash values. */\n var HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n /** Used as the maximum memoize cache size. */\n var MAX_MEMOIZE_SIZE = 500;\n\n /** Used as the internal argument placeholder. */\n var PLACEHOLDER = '__lodash_placeholder__';\n\n /** Used to compose bitmasks for cloning. */\n var CLONE_DEEP_FLAG = 1,\n CLONE_FLAT_FLAG = 2,\n CLONE_SYMBOLS_FLAG = 4;\n\n /** Used to compose bitmasks for value comparisons. */\n var COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n /** Used to compose bitmasks for function metadata. */\n var WRAP_BIND_FLAG = 1,\n WRAP_BIND_KEY_FLAG = 2,\n WRAP_CURRY_BOUND_FLAG = 4,\n WRAP_CURRY_FLAG = 8,\n WRAP_CURRY_RIGHT_FLAG = 16,\n WRAP_PARTIAL_FLAG = 32,\n WRAP_PARTIAL_RIGHT_FLAG = 64,\n WRAP_ARY_FLAG = 128,\n WRAP_REARG_FLAG = 256,\n WRAP_FLIP_FLAG = 512;\n\n /** Used as default options for `_.truncate`. */\n var DEFAULT_TRUNC_LENGTH = 30,\n DEFAULT_TRUNC_OMISSION = '...';\n\n /** Used to detect hot functions by number of calls within a span of milliseconds. */\n var HOT_COUNT = 800,\n HOT_SPAN = 16;\n\n /** Used to indicate the type of lazy iteratees. */\n var LAZY_FILTER_FLAG = 1,\n LAZY_MAP_FLAG = 2,\n LAZY_WHILE_FLAG = 3;\n\n /** Used as references for various `Number` constants. */\n var INFINITY = 1 / 0,\n MAX_SAFE_INTEGER = 9007199254740991,\n MAX_INTEGER = 1.7976931348623157e+308,\n NAN = 0 / 0;\n\n /** Used as references for the maximum length and index of an array. */\n var MAX_ARRAY_LENGTH = 4294967295,\n MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1,\n HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1;\n\n /** Used to associate wrap methods with their bit flags. */\n var wrapFlags = [\n ['ary', WRAP_ARY_FLAG],\n ['bind', WRAP_BIND_FLAG],\n ['bindKey', WRAP_BIND_KEY_FLAG],\n ['curry', WRAP_CURRY_FLAG],\n ['curryRight', WRAP_CURRY_RIGHT_FLAG],\n ['flip', WRAP_FLIP_FLAG],\n ['partial', WRAP_PARTIAL_FLAG],\n ['partialRight', WRAP_PARTIAL_RIGHT_FLAG],\n ['rearg', WRAP_REARG_FLAG]\n ];\n\n /** `Object#toString` result references. */\n var argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n asyncTag = '[object AsyncFunction]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n domExcTag = '[object DOMException]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n nullTag = '[object Null]',\n objectTag = '[object Object]',\n promiseTag = '[object Promise]',\n proxyTag = '[object Proxy]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]',\n undefinedTag = '[object Undefined]',\n weakMapTag = '[object WeakMap]',\n weakSetTag = '[object WeakSet]';\n\n var arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n /** Used to match empty string literals in compiled template source. */\n var reEmptyStringLeading = /\\b__p \\+= '';/g,\n reEmptyStringMiddle = /\\b(__p \\+=) '' \\+/g,\n reEmptyStringTrailing = /(__e\\(.*?\\)|\\b__t\\)) \\+\\n'';/g;\n\n /** Used to match HTML entities and HTML characters. */\n var reEscapedHtml = /&(?:amp|lt|gt|quot|#39);/g,\n reUnescapedHtml = /[&<>\"']/g,\n reHasEscapedHtml = RegExp(reEscapedHtml.source),\n reHasUnescapedHtml = RegExp(reUnescapedHtml.source);\n\n /** Used to match template delimiters. */\n var reEscape = /<%-([\\s\\S]+?)%>/g,\n reEvaluate = /<%([\\s\\S]+?)%>/g,\n reInterpolate = /<%=([\\s\\S]+?)%>/g;\n\n /** Used to match property names within property paths. */\n var reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n reIsPlainProp = /^\\w*$/,\n rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n /**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\n var reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g,\n reHasRegExpChar = RegExp(reRegExpChar.source);\n\n /** Used to match leading whitespace. */\n var reTrimStart = /^\\s+/;\n\n /** Used to match a single whitespace character. */\n var reWhitespace = /\\s/;\n\n /** Used to match wrap detail comments. */\n var reWrapComment = /\\{(?:\\n\\/\\* \\[wrapped with .+\\] \\*\\/)?\\n?/,\n reWrapDetails = /\\{\\n\\/\\* \\[wrapped with (.+)\\] \\*/,\n reSplitDetails = /,? & /;\n\n /** Used to match words composed of alphanumeric characters. */\n var reAsciiWord = /[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g;\n\n /**\n * Used to validate the `validate` option in `_.template` variable.\n *\n * Forbids characters which could potentially change the meaning of the function argument definition:\n * - \"(),\" (modification of function parameters)\n * - \"=\" (default value)\n * - \"[]{}\" (destructuring of function parameters)\n * - \"/\" (beginning of a comment)\n * - whitespace\n */\n var reForbiddenIdentifierChars = /[()=,{}\\[\\]\\/\\s]/;\n\n /** Used to match backslashes in property paths. */\n var reEscapeChar = /\\\\(\\\\)?/g;\n\n /**\n * Used to match\n * [ES template delimiters](http://ecma-international.org/ecma-262/7.0/#sec-template-literal-lexical-components).\n */\n var reEsTemplate = /\\$\\{([^\\\\}]*(?:\\\\.[^\\\\}]*)*)\\}/g;\n\n /** Used to match `RegExp` flags from their coerced string values. */\n var reFlags = /\\w*$/;\n\n /** Used to detect bad signed hexadecimal string values. */\n var reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n /** Used to detect binary string values. */\n var reIsBinary = /^0b[01]+$/i;\n\n /** Used to detect host constructors (Safari). */\n var reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n /** Used to detect octal string values. */\n var reIsOctal = /^0o[0-7]+$/i;\n\n /** Used to detect unsigned integer values. */\n var reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n /** Used to match Latin Unicode letters (excluding mathematical operators). */\n var reLatin = /[\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\u0100-\\u017f]/g;\n\n /** Used to ensure capturing order of template delimiters. */\n var reNoMatch = /($^)/;\n\n /** Used to match unescaped characters in compiled string literals. */\n var reUnescapedString = /['\\n\\r\\u2028\\u2029\\\\]/g;\n\n /** Used to compose unicode character classes. */\n var rsAstralRange = '\\\\ud800-\\\\udfff',\n rsComboMarksRange = '\\\\u0300-\\\\u036f',\n reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,\n rsDingbatRange = '\\\\u2700-\\\\u27bf',\n rsLowerRange = 'a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff',\n rsMathOpRange = '\\\\xac\\\\xb1\\\\xd7\\\\xf7',\n rsNonCharRange = '\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf',\n rsPunctuationRange = '\\\\u2000-\\\\u206f',\n rsSpaceRange = ' \\\\t\\\\x0b\\\\f\\\\xa0\\\\ufeff\\\\n\\\\r\\\\u2028\\\\u2029\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000',\n rsUpperRange = 'A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde',\n rsVarRange = '\\\\ufe0e\\\\ufe0f',\n rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange;\n\n /** Used to compose unicode capture groups. */\n var rsApos = \"['\\u2019]\",\n rsAstral = '[' + rsAstralRange + ']',\n rsBreak = '[' + rsBreakRange + ']',\n rsCombo = '[' + rsComboRange + ']',\n rsDigits = '\\\\d+',\n rsDingbat = '[' + rsDingbatRange + ']',\n rsLower = '[' + rsLowerRange + ']',\n rsMisc = '[^' + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + ']',\n rsFitz = '\\\\ud83c[\\\\udffb-\\\\udfff]',\n rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',\n rsNonAstral = '[^' + rsAstralRange + ']',\n rsRegional = '(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}',\n rsSurrPair = '[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]',\n rsUpper = '[' + rsUpperRange + ']',\n rsZWJ = '\\\\u200d';\n\n /** Used to compose unicode regexes. */\n var rsMiscLower = '(?:' + rsLower + '|' + rsMisc + ')',\n rsMiscUpper = '(?:' + rsUpper + '|' + rsMisc + ')',\n rsOptContrLower = '(?:' + rsApos + '(?:d|ll|m|re|s|t|ve))?',\n rsOptContrUpper = '(?:' + rsApos + '(?:D|LL|M|RE|S|T|VE))?',\n reOptMod = rsModifier + '?',\n rsOptVar = '[' + rsVarRange + ']?',\n rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',\n rsOrdLower = '\\\\d*(?:1st|2nd|3rd|(?![123])\\\\dth)(?=\\\\b|[A-Z_])',\n rsOrdUpper = '\\\\d*(?:1ST|2ND|3RD|(?![123])\\\\dTH)(?=\\\\b|[a-z_])',\n rsSeq = rsOptVar + reOptMod + rsOptJoin,\n rsEmoji = '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq,\n rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')';\n\n /** Used to match apostrophes. */\n var reApos = RegExp(rsApos, 'g');\n\n /**\n * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and\n * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols).\n */\n var reComboMark = RegExp(rsCombo, 'g');\n\n /** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */\n var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g');\n\n /** Used to match complex or compound words. */\n var reUnicodeWord = RegExp([\n rsUpper + '?' + rsLower + '+' + rsOptContrLower + '(?=' + [rsBreak, rsUpper, '$'].join('|') + ')',\n rsMiscUpper + '+' + rsOptContrUpper + '(?=' + [rsBreak, rsUpper + rsMiscLower, '$'].join('|') + ')',\n rsUpper + '?' + rsMiscLower + '+' + rsOptContrLower,\n rsUpper + '+' + rsOptContrUpper,\n rsOrdUpper,\n rsOrdLower,\n rsDigits,\n rsEmoji\n ].join('|'), 'g');\n\n /** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */\n var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + ']');\n\n /** Used to detect strings that need a more robust regexp to match words. */\n var reHasUnicodeWord = /[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/;\n\n /** Used to assign default `context` object properties. */\n var contextProps = [\n 'Array', 'Buffer', 'DataView', 'Date', 'Error', 'Float32Array', 'Float64Array',\n 'Function', 'Int8Array', 'Int16Array', 'Int32Array', 'Map', 'Math', 'Object',\n 'Promise', 'RegExp', 'Set', 'String', 'Symbol', 'TypeError', 'Uint8Array',\n 'Uint8ClampedArray', 'Uint16Array', 'Uint32Array', 'WeakMap',\n '_', 'clearTimeout', 'isFinite', 'parseInt', 'setTimeout'\n ];\n\n /** Used to make template sourceURLs easier to identify. */\n var templateCounter = -1;\n\n /** Used to identify `toStringTag` values of typed arrays. */\n var typedArrayTags = {};\n typedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\n typedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\n typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\n typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\n typedArrayTags[uint32Tag] = true;\n typedArrayTags[argsTag] = typedArrayTags[arrayTag] =\n typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\n typedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\n typedArrayTags[errorTag] = typedArrayTags[funcTag] =\n typedArrayTags[mapTag] = typedArrayTags[numberTag] =\n typedArrayTags[objectTag] = typedArrayTags[regexpTag] =\n typedArrayTags[setTag] = typedArrayTags[stringTag] =\n typedArrayTags[weakMapTag] = false;\n\n /** Used to identify `toStringTag` values supported by `_.clone`. */\n var cloneableTags = {};\n cloneableTags[argsTag] = cloneableTags[arrayTag] =\n cloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =\n cloneableTags[boolTag] = cloneableTags[dateTag] =\n cloneableTags[float32Tag] = cloneableTags[float64Tag] =\n cloneableTags[int8Tag] = cloneableTags[int16Tag] =\n cloneableTags[int32Tag] = cloneableTags[mapTag] =\n cloneableTags[numberTag] = cloneableTags[objectTag] =\n cloneableTags[regexpTag] = cloneableTags[setTag] =\n cloneableTags[stringTag] = cloneableTags[symbolTag] =\n cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =\n cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;\n cloneableTags[errorTag] = cloneableTags[funcTag] =\n cloneableTags[weakMapTag] = false;\n\n /** Used to map Latin Unicode letters to basic Latin letters. */\n var deburredLetters = {\n // Latin-1 Supplement block.\n '\\xc0': 'A', '\\xc1': 'A', '\\xc2': 'A', '\\xc3': 'A', '\\xc4': 'A', '\\xc5': 'A',\n '\\xe0': 'a', '\\xe1': 'a', '\\xe2': 'a', '\\xe3': 'a', '\\xe4': 'a', '\\xe5': 'a',\n '\\xc7': 'C', '\\xe7': 'c',\n '\\xd0': 'D', '\\xf0': 'd',\n '\\xc8': 'E', '\\xc9': 'E', '\\xca': 'E', '\\xcb': 'E',\n '\\xe8': 'e', '\\xe9': 'e', '\\xea': 'e', '\\xeb': 'e',\n '\\xcc': 'I', '\\xcd': 'I', '\\xce': 'I', '\\xcf': 'I',\n '\\xec': 'i', '\\xed': 'i', '\\xee': 'i', '\\xef': 'i',\n '\\xd1': 'N', '\\xf1': 'n',\n '\\xd2': 'O', '\\xd3': 'O', '\\xd4': 'O', '\\xd5': 'O', '\\xd6': 'O', '\\xd8': 'O',\n '\\xf2': 'o', '\\xf3': 'o', '\\xf4': 'o', '\\xf5': 'o', '\\xf6': 'o', '\\xf8': 'o',\n '\\xd9': 'U', '\\xda': 'U', '\\xdb': 'U', '\\xdc': 'U',\n '\\xf9': 'u', '\\xfa': 'u', '\\xfb': 'u', '\\xfc': 'u',\n '\\xdd': 'Y', '\\xfd': 'y', '\\xff': 'y',\n '\\xc6': 'Ae', '\\xe6': 'ae',\n '\\xde': 'Th', '\\xfe': 'th',\n '\\xdf': 'ss',\n // Latin Extended-A block.\n '\\u0100': 'A', '\\u0102': 'A', '\\u0104': 'A',\n '\\u0101': 'a', '\\u0103': 'a', '\\u0105': 'a',\n '\\u0106': 'C', '\\u0108': 'C', '\\u010a': 'C', '\\u010c': 'C',\n '\\u0107': 'c', '\\u0109': 'c', '\\u010b': 'c', '\\u010d': 'c',\n '\\u010e': 'D', '\\u0110': 'D', '\\u010f': 'd', '\\u0111': 'd',\n '\\u0112': 'E', '\\u0114': 'E', '\\u0116': 'E', '\\u0118': 'E', '\\u011a': 'E',\n '\\u0113': 'e', '\\u0115': 'e', '\\u0117': 'e', '\\u0119': 'e', '\\u011b': 'e',\n '\\u011c': 'G', '\\u011e': 'G', '\\u0120': 'G', '\\u0122': 'G',\n '\\u011d': 'g', '\\u011f': 'g', '\\u0121': 'g', '\\u0123': 'g',\n '\\u0124': 'H', '\\u0126': 'H', '\\u0125': 'h', '\\u0127': 'h',\n '\\u0128': 'I', '\\u012a': 'I', '\\u012c': 'I', '\\u012e': 'I', '\\u0130': 'I',\n '\\u0129': 'i', '\\u012b': 'i', '\\u012d': 'i', '\\u012f': 'i', '\\u0131': 'i',\n '\\u0134': 'J', '\\u0135': 'j',\n '\\u0136': 'K', '\\u0137': 'k', '\\u0138': 'k',\n '\\u0139': 'L', '\\u013b': 'L', '\\u013d': 'L', '\\u013f': 'L', '\\u0141': 'L',\n '\\u013a': 'l', '\\u013c': 'l', '\\u013e': 'l', '\\u0140': 'l', '\\u0142': 'l',\n '\\u0143': 'N', '\\u0145': 'N', '\\u0147': 'N', '\\u014a': 'N',\n '\\u0144': 'n', '\\u0146': 'n', '\\u0148': 'n', '\\u014b': 'n',\n '\\u014c': 'O', '\\u014e': 'O', '\\u0150': 'O',\n '\\u014d': 'o', '\\u014f': 'o', '\\u0151': 'o',\n '\\u0154': 'R', '\\u0156': 'R', '\\u0158': 'R',\n '\\u0155': 'r', '\\u0157': 'r', '\\u0159': 'r',\n '\\u015a': 'S', '\\u015c': 'S', '\\u015e': 'S', '\\u0160': 'S',\n '\\u015b': 's', '\\u015d': 's', '\\u015f': 's', '\\u0161': 's',\n '\\u0162': 'T', '\\u0164': 'T', '\\u0166': 'T',\n '\\u0163': 't', '\\u0165': 't', '\\u0167': 't',\n '\\u0168': 'U', '\\u016a': 'U', '\\u016c': 'U', '\\u016e': 'U', '\\u0170': 'U', '\\u0172': 'U',\n '\\u0169': 'u', '\\u016b': 'u', '\\u016d': 'u', '\\u016f': 'u', '\\u0171': 'u', '\\u0173': 'u',\n '\\u0174': 'W', '\\u0175': 'w',\n '\\u0176': 'Y', '\\u0177': 'y', '\\u0178': 'Y',\n '\\u0179': 'Z', '\\u017b': 'Z', '\\u017d': 'Z',\n '\\u017a': 'z', '\\u017c': 'z', '\\u017e': 'z',\n '\\u0132': 'IJ', '\\u0133': 'ij',\n '\\u0152': 'Oe', '\\u0153': 'oe',\n '\\u0149': \"'n\", '\\u017f': 's'\n };\n\n /** Used to map characters to HTML entities. */\n var htmlEscapes = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": '''\n };\n\n /** Used to map HTML entities to characters. */\n var htmlUnescapes = {\n '&': '&',\n '<': '<',\n '>': '>',\n '"': '\"',\n ''': \"'\"\n };\n\n /** Used to escape characters for inclusion in compiled string literals. */\n var stringEscapes = {\n '\\\\': '\\\\',\n \"'\": \"'\",\n '\\n': 'n',\n '\\r': 'r',\n '\\u2028': 'u2028',\n '\\u2029': 'u2029'\n };\n\n /** Built-in method references without a dependency on `root`. */\n var freeParseFloat = parseFloat,\n freeParseInt = parseInt;\n\n /** Detect free variable `global` from Node.js. */\n var freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n /** Detect free variable `self`. */\n var freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n /** Used as a reference to the global object. */\n var root = freeGlobal || freeSelf || Function('return this')();\n\n /** Detect free variable `exports`. */\n var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n /** Detect free variable `module`. */\n var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n /** Detect the popular CommonJS extension `module.exports`. */\n var moduleExports = freeModule && freeModule.exports === freeExports;\n\n /** Detect free variable `process` from Node.js. */\n var freeProcess = moduleExports && freeGlobal.process;\n\n /** Used to access faster Node.js helpers. */\n var nodeUtil = (function() {\n try {\n // Use `util.types` for Node.js 10+.\n var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n if (types) {\n return types;\n }\n\n // Legacy `process.binding('util')` for Node.js < 10.\n return freeProcess && freeProcess.binding && freeProcess.binding('util');\n } catch (e) {}\n }());\n\n /* Node.js helper references. */\n var nodeIsArrayBuffer = nodeUtil && nodeUtil.isArrayBuffer,\n nodeIsDate = nodeUtil && nodeUtil.isDate,\n nodeIsMap = nodeUtil && nodeUtil.isMap,\n nodeIsRegExp = nodeUtil && nodeUtil.isRegExp,\n nodeIsSet = nodeUtil && nodeUtil.isSet,\n nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n /*--------------------------------------------------------------------------*/\n\n /**\n * A faster alternative to `Function#apply`, this function invokes `func`\n * with the `this` binding of `thisArg` and the arguments of `args`.\n *\n * @private\n * @param {Function} func The function to invoke.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} args The arguments to invoke `func` with.\n * @returns {*} Returns the result of `func`.\n */\n function apply(func, thisArg, args) {\n switch (args.length) {\n case 0: return func.call(thisArg);\n case 1: return func.call(thisArg, args[0]);\n case 2: return func.call(thisArg, args[0], args[1]);\n case 3: return func.call(thisArg, args[0], args[1], args[2]);\n }\n return func.apply(thisArg, args);\n }\n\n /**\n * A specialized version of `baseAggregator` for arrays.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} setter The function to set `accumulator` values.\n * @param {Function} iteratee The iteratee to transform keys.\n * @param {Object} accumulator The initial aggregated object.\n * @returns {Function} Returns `accumulator`.\n */\n function arrayAggregator(array, setter, iteratee, accumulator) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n var value = array[index];\n setter(accumulator, value, iteratee(value), array);\n }\n return accumulator;\n }\n\n /**\n * A specialized version of `_.forEach` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\n function arrayEach(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (iteratee(array[index], index, array) === false) {\n break;\n }\n }\n return array;\n }\n\n /**\n * A specialized version of `_.forEachRight` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\n function arrayEachRight(array, iteratee) {\n var length = array == null ? 0 : array.length;\n\n while (length--) {\n if (iteratee(array[length], length, array) === false) {\n break;\n }\n }\n return array;\n }\n\n /**\n * A specialized version of `_.every` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if all elements pass the predicate check,\n * else `false`.\n */\n function arrayEvery(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (!predicate(array[index], index, array)) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * A specialized version of `_.filter` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\n function arrayFilter(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (predicate(value, index, array)) {\n result[resIndex++] = value;\n }\n }\n return result;\n }\n\n /**\n * A specialized version of `_.includes` for arrays without support for\n * specifying an index to search from.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\n function arrayIncludes(array, value) {\n var length = array == null ? 0 : array.length;\n return !!length && baseIndexOf(array, value, 0) > -1;\n }\n\n /**\n * This function is like `arrayIncludes` except that it accepts a comparator.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @param {Function} comparator The comparator invoked per element.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\n function arrayIncludesWith(array, value, comparator) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (comparator(value, array[index])) {\n return true;\n }\n }\n return false;\n }\n\n /**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\n function arrayMap(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length,\n result = Array(length);\n\n while (++index < length) {\n result[index] = iteratee(array[index], index, array);\n }\n return result;\n }\n\n /**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\n function arrayPush(array, values) {\n var index = -1,\n length = values.length,\n offset = array.length;\n\n while (++index < length) {\n array[offset + index] = values[index];\n }\n return array;\n }\n\n /**\n * A specialized version of `_.reduce` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @param {boolean} [initAccum] Specify using the first element of `array` as\n * the initial value.\n * @returns {*} Returns the accumulated value.\n */\n function arrayReduce(array, iteratee, accumulator, initAccum) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n if (initAccum && length) {\n accumulator = array[++index];\n }\n while (++index < length) {\n accumulator = iteratee(accumulator, array[index], index, array);\n }\n return accumulator;\n }\n\n /**\n * A specialized version of `_.reduceRight` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @param {boolean} [initAccum] Specify using the last element of `array` as\n * the initial value.\n * @returns {*} Returns the accumulated value.\n */\n function arrayReduceRight(array, iteratee, accumulator, initAccum) {\n var length = array == null ? 0 : array.length;\n if (initAccum && length) {\n accumulator = array[--length];\n }\n while (length--) {\n accumulator = iteratee(accumulator, array[length], length, array);\n }\n return accumulator;\n }\n\n /**\n * A specialized version of `_.some` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\n function arraySome(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (predicate(array[index], index, array)) {\n return true;\n }\n }\n return false;\n }\n\n /**\n * Gets the size of an ASCII `string`.\n *\n * @private\n * @param {string} string The string inspect.\n * @returns {number} Returns the string size.\n */\n var asciiSize = baseProperty('length');\n\n /**\n * Converts an ASCII `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\n function asciiToArray(string) {\n return string.split('');\n }\n\n /**\n * Splits an ASCII `string` into an array of its words.\n *\n * @private\n * @param {string} The string to inspect.\n * @returns {Array} Returns the words of `string`.\n */\n function asciiWords(string) {\n return string.match(reAsciiWord) || [];\n }\n\n /**\n * The base implementation of methods like `_.findKey` and `_.findLastKey`,\n * without support for iteratee shorthands, which iterates over `collection`\n * using `eachFunc`.\n *\n * @private\n * @param {Array|Object} collection The collection to inspect.\n * @param {Function} predicate The function invoked per iteration.\n * @param {Function} eachFunc The function to iterate over `collection`.\n * @returns {*} Returns the found element or its key, else `undefined`.\n */\n function baseFindKey(collection, predicate, eachFunc) {\n var result;\n eachFunc(collection, function(value, key, collection) {\n if (predicate(value, key, collection)) {\n result = key;\n return false;\n }\n });\n return result;\n }\n\n /**\n * The base implementation of `_.findIndex` and `_.findLastIndex` without\n * support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} predicate The function invoked per iteration.\n * @param {number} fromIndex The index to search from.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function baseFindIndex(array, predicate, fromIndex, fromRight) {\n var length = array.length,\n index = fromIndex + (fromRight ? 1 : -1);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (predicate(array[index], index, array)) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * The base implementation of `_.indexOf` without `fromIndex` bounds checks.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function baseIndexOf(array, value, fromIndex) {\n return value === value\n ? strictIndexOf(array, value, fromIndex)\n : baseFindIndex(array, baseIsNaN, fromIndex);\n }\n\n /**\n * This function is like `baseIndexOf` except that it accepts a comparator.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @param {Function} comparator The comparator invoked per element.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function baseIndexOfWith(array, value, fromIndex, comparator) {\n var index = fromIndex - 1,\n length = array.length;\n\n while (++index < length) {\n if (comparator(array[index], value)) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * The base implementation of `_.isNaN` without support for number objects.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n */\n function baseIsNaN(value) {\n return value !== value;\n }\n\n /**\n * The base implementation of `_.mean` and `_.meanBy` without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {number} Returns the mean.\n */\n function baseMean(array, iteratee) {\n var length = array == null ? 0 : array.length;\n return length ? (baseSum(array, iteratee) / length) : NAN;\n }\n\n /**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\n function baseProperty(key) {\n return function(object) {\n return object == null ? undefined : object[key];\n };\n }\n\n /**\n * The base implementation of `_.propertyOf` without support for deep paths.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Function} Returns the new accessor function.\n */\n function basePropertyOf(object) {\n return function(key) {\n return object == null ? undefined : object[key];\n };\n }\n\n /**\n * The base implementation of `_.reduce` and `_.reduceRight`, without support\n * for iteratee shorthands, which iterates over `collection` using `eachFunc`.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} accumulator The initial value.\n * @param {boolean} initAccum Specify using the first or last element of\n * `collection` as the initial value.\n * @param {Function} eachFunc The function to iterate over `collection`.\n * @returns {*} Returns the accumulated value.\n */\n function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) {\n eachFunc(collection, function(value, index, collection) {\n accumulator = initAccum\n ? (initAccum = false, value)\n : iteratee(accumulator, value, index, collection);\n });\n return accumulator;\n }\n\n /**\n * The base implementation of `_.sortBy` which uses `comparer` to define the\n * sort order of `array` and replaces criteria objects with their corresponding\n * values.\n *\n * @private\n * @param {Array} array The array to sort.\n * @param {Function} comparer The function to define sort order.\n * @returns {Array} Returns `array`.\n */\n function baseSortBy(array, comparer) {\n var length = array.length;\n\n array.sort(comparer);\n while (length--) {\n array[length] = array[length].value;\n }\n return array;\n }\n\n /**\n * The base implementation of `_.sum` and `_.sumBy` without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {number} Returns the sum.\n */\n function baseSum(array, iteratee) {\n var result,\n index = -1,\n length = array.length;\n\n while (++index < length) {\n var current = iteratee(array[index]);\n if (current !== undefined) {\n result = result === undefined ? current : (result + current);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\n function baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n return result;\n }\n\n /**\n * The base implementation of `_.toPairs` and `_.toPairsIn` which creates an array\n * of key-value pairs for `object` corresponding to the property names of `props`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} props The property names to get values for.\n * @returns {Object} Returns the key-value pairs.\n */\n function baseToPairs(object, props) {\n return arrayMap(props, function(key) {\n return [key, object[key]];\n });\n }\n\n /**\n * The base implementation of `_.trim`.\n *\n * @private\n * @param {string} string The string to trim.\n * @returns {string} Returns the trimmed string.\n */\n function baseTrim(string) {\n return string\n ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')\n : string;\n }\n\n /**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\n function baseUnary(func) {\n return function(value) {\n return func(value);\n };\n }\n\n /**\n * The base implementation of `_.values` and `_.valuesIn` which creates an\n * array of `object` property values corresponding to the property names\n * of `props`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} props The property names to get values for.\n * @returns {Object} Returns the array of property values.\n */\n function baseValues(object, props) {\n return arrayMap(props, function(key) {\n return object[key];\n });\n }\n\n /**\n * Checks if a `cache` value for `key` exists.\n *\n * @private\n * @param {Object} cache The cache to query.\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function cacheHas(cache, key) {\n return cache.has(key);\n }\n\n /**\n * Used by `_.trim` and `_.trimStart` to get the index of the first string symbol\n * that is not found in the character symbols.\n *\n * @private\n * @param {Array} strSymbols The string symbols to inspect.\n * @param {Array} chrSymbols The character symbols to find.\n * @returns {number} Returns the index of the first unmatched string symbol.\n */\n function charsStartIndex(strSymbols, chrSymbols) {\n var index = -1,\n length = strSymbols.length;\n\n while (++index < length && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}\n return index;\n }\n\n /**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last string symbol\n * that is not found in the character symbols.\n *\n * @private\n * @param {Array} strSymbols The string symbols to inspect.\n * @param {Array} chrSymbols The character symbols to find.\n * @returns {number} Returns the index of the last unmatched string symbol.\n */\n function charsEndIndex(strSymbols, chrSymbols) {\n var index = strSymbols.length;\n\n while (index-- && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}\n return index;\n }\n\n /**\n * Gets the number of `placeholder` occurrences in `array`.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} placeholder The placeholder to search for.\n * @returns {number} Returns the placeholder count.\n */\n function countHolders(array, placeholder) {\n var length = array.length,\n result = 0;\n\n while (length--) {\n if (array[length] === placeholder) {\n ++result;\n }\n }\n return result;\n }\n\n /**\n * Used by `_.deburr` to convert Latin-1 Supplement and Latin Extended-A\n * letters to basic Latin letters.\n *\n * @private\n * @param {string} letter The matched letter to deburr.\n * @returns {string} Returns the deburred letter.\n */\n var deburrLetter = basePropertyOf(deburredLetters);\n\n /**\n * Used by `_.escape` to convert characters to HTML entities.\n *\n * @private\n * @param {string} chr The matched character to escape.\n * @returns {string} Returns the escaped character.\n */\n var escapeHtmlChar = basePropertyOf(htmlEscapes);\n\n /**\n * Used by `_.template` to escape characters for inclusion in compiled string literals.\n *\n * @private\n * @param {string} chr The matched character to escape.\n * @returns {string} Returns the escaped character.\n */\n function escapeStringChar(chr) {\n return '\\\\' + stringEscapes[chr];\n }\n\n /**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\n function getValue(object, key) {\n return object == null ? undefined : object[key];\n }\n\n /**\n * Checks if `string` contains Unicode symbols.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {boolean} Returns `true` if a symbol is found, else `false`.\n */\n function hasUnicode(string) {\n return reHasUnicode.test(string);\n }\n\n /**\n * Checks if `string` contains a word composed of Unicode symbols.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {boolean} Returns `true` if a word is found, else `false`.\n */\n function hasUnicodeWord(string) {\n return reHasUnicodeWord.test(string);\n }\n\n /**\n * Converts `iterator` to an array.\n *\n * @private\n * @param {Object} iterator The iterator to convert.\n * @returns {Array} Returns the converted array.\n */\n function iteratorToArray(iterator) {\n var data,\n result = [];\n\n while (!(data = iterator.next()).done) {\n result.push(data.value);\n }\n return result;\n }\n\n /**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\n function mapToArray(map) {\n var index = -1,\n result = Array(map.size);\n\n map.forEach(function(value, key) {\n result[++index] = [key, value];\n });\n return result;\n }\n\n /**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\n function overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n }\n\n /**\n * Replaces all `placeholder` elements in `array` with an internal placeholder\n * and returns an array of their indexes.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {*} placeholder The placeholder to replace.\n * @returns {Array} Returns the new array of placeholder indexes.\n */\n function replaceHolders(array, placeholder) {\n var index = -1,\n length = array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (value === placeholder || value === PLACEHOLDER) {\n array[index] = PLACEHOLDER;\n result[resIndex++] = index;\n }\n }\n return result;\n }\n\n /**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\n function setToArray(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = value;\n });\n return result;\n }\n\n /**\n * Converts `set` to its value-value pairs.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the value-value pairs.\n */\n function setToPairs(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = [value, value];\n });\n return result;\n }\n\n /**\n * A specialized version of `_.indexOf` which performs strict equality\n * comparisons of values, i.e. `===`.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function strictIndexOf(array, value, fromIndex) {\n var index = fromIndex - 1,\n length = array.length;\n\n while (++index < length) {\n if (array[index] === value) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * A specialized version of `_.lastIndexOf` which performs strict equality\n * comparisons of values, i.e. `===`.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function strictLastIndexOf(array, value, fromIndex) {\n var index = fromIndex + 1;\n while (index--) {\n if (array[index] === value) {\n return index;\n }\n }\n return index;\n }\n\n /**\n * Gets the number of symbols in `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the string size.\n */\n function stringSize(string) {\n return hasUnicode(string)\n ? unicodeSize(string)\n : asciiSize(string);\n }\n\n /**\n * Converts `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\n function stringToArray(string) {\n return hasUnicode(string)\n ? unicodeToArray(string)\n : asciiToArray(string);\n }\n\n /**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n * character of `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the index of the last non-whitespace character.\n */\n function trimmedEndIndex(string) {\n var index = string.length;\n\n while (index-- && reWhitespace.test(string.charAt(index))) {}\n return index;\n }\n\n /**\n * Used by `_.unescape` to convert HTML entities to characters.\n *\n * @private\n * @param {string} chr The matched character to unescape.\n * @returns {string} Returns the unescaped character.\n */\n var unescapeHtmlChar = basePropertyOf(htmlUnescapes);\n\n /**\n * Gets the size of a Unicode `string`.\n *\n * @private\n * @param {string} string The string inspect.\n * @returns {number} Returns the string size.\n */\n function unicodeSize(string) {\n var result = reUnicode.lastIndex = 0;\n while (reUnicode.test(string)) {\n ++result;\n }\n return result;\n }\n\n /**\n * Converts a Unicode `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\n function unicodeToArray(string) {\n return string.match(reUnicode) || [];\n }\n\n /**\n * Splits a Unicode `string` into an array of its words.\n *\n * @private\n * @param {string} The string to inspect.\n * @returns {Array} Returns the words of `string`.\n */\n function unicodeWords(string) {\n return string.match(reUnicodeWord) || [];\n }\n\n /*--------------------------------------------------------------------------*/\n\n /**\n * Create a new pristine `lodash` function using the `context` object.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category Util\n * @param {Object} [context=root] The context object.\n * @returns {Function} Returns a new `lodash` function.\n * @example\n *\n * _.mixin({ 'foo': _.constant('foo') });\n *\n * var lodash = _.runInContext();\n * lodash.mixin({ 'bar': lodash.constant('bar') });\n *\n * _.isFunction(_.foo);\n * // => true\n * _.isFunction(_.bar);\n * // => false\n *\n * lodash.isFunction(lodash.foo);\n * // => false\n * lodash.isFunction(lodash.bar);\n * // => true\n *\n * // Create a suped-up `defer` in Node.js.\n * var defer = _.runInContext({ 'setTimeout': setImmediate }).defer;\n */\n var runInContext = (function runInContext(context) {\n context = context == null ? root : _.defaults(root.Object(), context, _.pick(root, contextProps));\n\n /** Built-in constructor references. */\n var Array = context.Array,\n Date = context.Date,\n Error = context.Error,\n Function = context.Function,\n Math = context.Math,\n Object = context.Object,\n RegExp = context.RegExp,\n String = context.String,\n TypeError = context.TypeError;\n\n /** Used for built-in method references. */\n var arrayProto = Array.prototype,\n funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n /** Used to detect overreaching core-js shims. */\n var coreJsData = context['__core-js_shared__'];\n\n /** Used to resolve the decompiled source of functions. */\n var funcToString = funcProto.toString;\n\n /** Used to check objects for own properties. */\n var hasOwnProperty = objectProto.hasOwnProperty;\n\n /** Used to generate unique IDs. */\n var idCounter = 0;\n\n /** Used to detect methods masquerading as native. */\n var maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n }());\n\n /**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\n var nativeObjectToString = objectProto.toString;\n\n /** Used to infer the `Object` constructor. */\n var objectCtorString = funcToString.call(Object);\n\n /** Used to restore the original `_` reference in `_.noConflict`. */\n var oldDash = root._;\n\n /** Used to detect if a method is native. */\n var reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n );\n\n /** Built-in value references. */\n var Buffer = moduleExports ? context.Buffer : undefined,\n Symbol = context.Symbol,\n Uint8Array = context.Uint8Array,\n allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined,\n getPrototype = overArg(Object.getPrototypeOf, Object),\n objectCreate = Object.create,\n propertyIsEnumerable = objectProto.propertyIsEnumerable,\n splice = arrayProto.splice,\n spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined,\n symIterator = Symbol ? Symbol.iterator : undefined,\n symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n var defineProperty = (function() {\n try {\n var func = getNative(Object, 'defineProperty');\n func({}, '', {});\n return func;\n } catch (e) {}\n }());\n\n /** Mocked built-ins. */\n var ctxClearTimeout = context.clearTimeout !== root.clearTimeout && context.clearTimeout,\n ctxNow = Date && Date.now !== root.Date.now && Date.now,\n ctxSetTimeout = context.setTimeout !== root.setTimeout && context.setTimeout;\n\n /* Built-in method references for those with the same name as other `lodash` methods. */\n var nativeCeil = Math.ceil,\n nativeFloor = Math.floor,\n nativeGetSymbols = Object.getOwnPropertySymbols,\n nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined,\n nativeIsFinite = context.isFinite,\n nativeJoin = arrayProto.join,\n nativeKeys = overArg(Object.keys, Object),\n nativeMax = Math.max,\n nativeMin = Math.min,\n nativeNow = Date.now,\n nativeParseInt = context.parseInt,\n nativeRandom = Math.random,\n nativeReverse = arrayProto.reverse;\n\n /* Built-in method references that are verified to be native. */\n var DataView = getNative(context, 'DataView'),\n Map = getNative(context, 'Map'),\n Promise = getNative(context, 'Promise'),\n Set = getNative(context, 'Set'),\n WeakMap = getNative(context, 'WeakMap'),\n nativeCreate = getNative(Object, 'create');\n\n /** Used to store function metadata. */\n var metaMap = WeakMap && new WeakMap;\n\n /** Used to lookup unminified function names. */\n var realNames = {};\n\n /** Used to detect maps, sets, and weakmaps. */\n var dataViewCtorString = toSource(DataView),\n mapCtorString = toSource(Map),\n promiseCtorString = toSource(Promise),\n setCtorString = toSource(Set),\n weakMapCtorString = toSource(WeakMap);\n\n /** Used to convert symbols to primitives and strings. */\n var symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined,\n symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a `lodash` object which wraps `value` to enable implicit method\n * chain sequences. Methods that operate on and return arrays, collections,\n * and functions can be chained together. Methods that retrieve a single value\n * or may return a primitive value will automatically end the chain sequence\n * and return the unwrapped value. Otherwise, the value must be unwrapped\n * with `_#value`.\n *\n * Explicit chain sequences, which must be unwrapped with `_#value`, may be\n * enabled using `_.chain`.\n *\n * The execution of chained methods is lazy, that is, it's deferred until\n * `_#value` is implicitly or explicitly called.\n *\n * Lazy evaluation allows several methods to support shortcut fusion.\n * Shortcut fusion is an optimization to merge iteratee calls; this avoids\n * the creation of intermediate arrays and can greatly reduce the number of\n * iteratee executions. Sections of a chain sequence qualify for shortcut\n * fusion if the section is applied to an array and iteratees accept only\n * one argument. The heuristic for whether a section qualifies for shortcut\n * fusion is subject to change.\n *\n * Chaining is supported in custom builds as long as the `_#value` method is\n * directly or indirectly included in the build.\n *\n * In addition to lodash methods, wrappers have `Array` and `String` methods.\n *\n * The wrapper `Array` methods are:\n * `concat`, `join`, `pop`, `push`, `shift`, `sort`, `splice`, and `unshift`\n *\n * The wrapper `String` methods are:\n * `replace` and `split`\n *\n * The wrapper methods that support shortcut fusion are:\n * `at`, `compact`, `drop`, `dropRight`, `dropWhile`, `filter`, `find`,\n * `findLast`, `head`, `initial`, `last`, `map`, `reject`, `reverse`, `slice`,\n * `tail`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, and `toArray`\n *\n * The chainable wrapper methods are:\n * `after`, `ary`, `assign`, `assignIn`, `assignInWith`, `assignWith`, `at`,\n * `before`, `bind`, `bindAll`, `bindKey`, `castArray`, `chain`, `chunk`,\n * `commit`, `compact`, `concat`, `conforms`, `constant`, `countBy`, `create`,\n * `curry`, `debounce`, `defaults`, `defaultsDeep`, `defer`, `delay`,\n * `difference`, `differenceBy`, `differenceWith`, `drop`, `dropRight`,\n * `dropRightWhile`, `dropWhile`, `extend`, `extendWith`, `fill`, `filter`,\n * `flatMap`, `flatMapDeep`, `flatMapDepth`, `flatten`, `flattenDeep`,\n * `flattenDepth`, `flip`, `flow`, `flowRight`, `fromPairs`, `functions`,\n * `functionsIn`, `groupBy`, `initial`, `intersection`, `intersectionBy`,\n * `intersectionWith`, `invert`, `invertBy`, `invokeMap`, `iteratee`, `keyBy`,\n * `keys`, `keysIn`, `map`, `mapKeys`, `mapValues`, `matches`, `matchesProperty`,\n * `memoize`, `merge`, `mergeWith`, `method`, `methodOf`, `mixin`, `negate`,\n * `nthArg`, `omit`, `omitBy`, `once`, `orderBy`, `over`, `overArgs`,\n * `overEvery`, `overSome`, `partial`, `partialRight`, `partition`, `pick`,\n * `pickBy`, `plant`, `property`, `propertyOf`, `pull`, `pullAll`, `pullAllBy`,\n * `pullAllWith`, `pullAt`, `push`, `range`, `rangeRight`, `rearg`, `reject`,\n * `remove`, `rest`, `reverse`, `sampleSize`, `set`, `setWith`, `shuffle`,\n * `slice`, `sort`, `sortBy`, `splice`, `spread`, `tail`, `take`, `takeRight`,\n * `takeRightWhile`, `takeWhile`, `tap`, `throttle`, `thru`, `toArray`,\n * `toPairs`, `toPairsIn`, `toPath`, `toPlainObject`, `transform`, `unary`,\n * `union`, `unionBy`, `unionWith`, `uniq`, `uniqBy`, `uniqWith`, `unset`,\n * `unshift`, `unzip`, `unzipWith`, `update`, `updateWith`, `values`,\n * `valuesIn`, `without`, `wrap`, `xor`, `xorBy`, `xorWith`, `zip`,\n * `zipObject`, `zipObjectDeep`, and `zipWith`\n *\n * The wrapper methods that are **not** chainable by default are:\n * `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clamp`, `clone`,\n * `cloneDeep`, `cloneDeepWith`, `cloneWith`, `conformsTo`, `deburr`,\n * `defaultTo`, `divide`, `each`, `eachRight`, `endsWith`, `eq`, `escape`,\n * `escapeRegExp`, `every`, `find`, `findIndex`, `findKey`, `findLast`,\n * `findLastIndex`, `findLastKey`, `first`, `floor`, `forEach`, `forEachRight`,\n * `forIn`, `forInRight`, `forOwn`, `forOwnRight`, `get`, `gt`, `gte`, `has`,\n * `hasIn`, `head`, `identity`, `includes`, `indexOf`, `inRange`, `invoke`,\n * `isArguments`, `isArray`, `isArrayBuffer`, `isArrayLike`, `isArrayLikeObject`,\n * `isBoolean`, `isBuffer`, `isDate`, `isElement`, `isEmpty`, `isEqual`,\n * `isEqualWith`, `isError`, `isFinite`, `isFunction`, `isInteger`, `isLength`,\n * `isMap`, `isMatch`, `isMatchWith`, `isNaN`, `isNative`, `isNil`, `isNull`,\n * `isNumber`, `isObject`, `isObjectLike`, `isPlainObject`, `isRegExp`,\n * `isSafeInteger`, `isSet`, `isString`, `isUndefined`, `isTypedArray`,\n * `isWeakMap`, `isWeakSet`, `join`, `kebabCase`, `last`, `lastIndexOf`,\n * `lowerCase`, `lowerFirst`, `lt`, `lte`, `max`, `maxBy`, `mean`, `meanBy`,\n * `min`, `minBy`, `multiply`, `noConflict`, `noop`, `now`, `nth`, `pad`,\n * `padEnd`, `padStart`, `parseInt`, `pop`, `random`, `reduce`, `reduceRight`,\n * `repeat`, `result`, `round`, `runInContext`, `sample`, `shift`, `size`,\n * `snakeCase`, `some`, `sortedIndex`, `sortedIndexBy`, `sortedLastIndex`,\n * `sortedLastIndexBy`, `startCase`, `startsWith`, `stubArray`, `stubFalse`,\n * `stubObject`, `stubString`, `stubTrue`, `subtract`, `sum`, `sumBy`,\n * `template`, `times`, `toFinite`, `toInteger`, `toJSON`, `toLength`,\n * `toLower`, `toNumber`, `toSafeInteger`, `toString`, `toUpper`, `trim`,\n * `trimEnd`, `trimStart`, `truncate`, `unescape`, `uniqueId`, `upperCase`,\n * `upperFirst`, `value`, and `words`\n *\n * @name _\n * @constructor\n * @category Seq\n * @param {*} value The value to wrap in a `lodash` instance.\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * var wrapped = _([1, 2, 3]);\n *\n * // Returns an unwrapped value.\n * wrapped.reduce(_.add);\n * // => 6\n *\n * // Returns a wrapped value.\n * var squares = wrapped.map(square);\n *\n * _.isArray(squares);\n * // => false\n *\n * _.isArray(squares.value());\n * // => true\n */\n function lodash(value) {\n if (isObjectLike(value) && !isArray(value) && !(value instanceof LazyWrapper)) {\n if (value instanceof LodashWrapper) {\n return value;\n }\n if (hasOwnProperty.call(value, '__wrapped__')) {\n return wrapperClone(value);\n }\n }\n return new LodashWrapper(value);\n }\n\n /**\n * The base implementation of `_.create` without support for assigning\n * properties to the created object.\n *\n * @private\n * @param {Object} proto The object to inherit from.\n * @returns {Object} Returns the new object.\n */\n var baseCreate = (function() {\n function object() {}\n return function(proto) {\n if (!isObject(proto)) {\n return {};\n }\n if (objectCreate) {\n return objectCreate(proto);\n }\n object.prototype = proto;\n var result = new object;\n object.prototype = undefined;\n return result;\n };\n }());\n\n /**\n * The function whose prototype chain sequence wrappers inherit from.\n *\n * @private\n */\n function baseLodash() {\n // No operation performed.\n }\n\n /**\n * The base constructor for creating `lodash` wrapper objects.\n *\n * @private\n * @param {*} value The value to wrap.\n * @param {boolean} [chainAll] Enable explicit method chain sequences.\n */\n function LodashWrapper(value, chainAll) {\n this.__wrapped__ = value;\n this.__actions__ = [];\n this.__chain__ = !!chainAll;\n this.__index__ = 0;\n this.__values__ = undefined;\n }\n\n /**\n * By default, the template delimiters used by lodash are like those in\n * embedded Ruby (ERB) as well as ES2015 template strings. Change the\n * following template settings to use alternative delimiters.\n *\n * @static\n * @memberOf _\n * @type {Object}\n */\n lodash.templateSettings = {\n\n /**\n * Used to detect `data` property values to be HTML-escaped.\n *\n * @memberOf _.templateSettings\n * @type {RegExp}\n */\n 'escape': reEscape,\n\n /**\n * Used to detect code to be evaluated.\n *\n * @memberOf _.templateSettings\n * @type {RegExp}\n */\n 'evaluate': reEvaluate,\n\n /**\n * Used to detect `data` property values to inject.\n *\n * @memberOf _.templateSettings\n * @type {RegExp}\n */\n 'interpolate': reInterpolate,\n\n /**\n * Used to reference the data object in the template text.\n *\n * @memberOf _.templateSettings\n * @type {string}\n */\n 'variable': '',\n\n /**\n * Used to import variables into the compiled template.\n *\n * @memberOf _.templateSettings\n * @type {Object}\n */\n 'imports': {\n\n /**\n * A reference to the `lodash` function.\n *\n * @memberOf _.templateSettings.imports\n * @type {Function}\n */\n '_': lodash\n }\n };\n\n // Ensure wrappers are instances of `baseLodash`.\n lodash.prototype = baseLodash.prototype;\n lodash.prototype.constructor = lodash;\n\n LodashWrapper.prototype = baseCreate(baseLodash.prototype);\n LodashWrapper.prototype.constructor = LodashWrapper;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a lazy wrapper object which wraps `value` to enable lazy evaluation.\n *\n * @private\n * @constructor\n * @param {*} value The value to wrap.\n */\n function LazyWrapper(value) {\n this.__wrapped__ = value;\n this.__actions__ = [];\n this.__dir__ = 1;\n this.__filtered__ = false;\n this.__iteratees__ = [];\n this.__takeCount__ = MAX_ARRAY_LENGTH;\n this.__views__ = [];\n }\n\n /**\n * Creates a clone of the lazy wrapper object.\n *\n * @private\n * @name clone\n * @memberOf LazyWrapper\n * @returns {Object} Returns the cloned `LazyWrapper` object.\n */\n function lazyClone() {\n var result = new LazyWrapper(this.__wrapped__);\n result.__actions__ = copyArray(this.__actions__);\n result.__dir__ = this.__dir__;\n result.__filtered__ = this.__filtered__;\n result.__iteratees__ = copyArray(this.__iteratees__);\n result.__takeCount__ = this.__takeCount__;\n result.__views__ = copyArray(this.__views__);\n return result;\n }\n\n /**\n * Reverses the direction of lazy iteration.\n *\n * @private\n * @name reverse\n * @memberOf LazyWrapper\n * @returns {Object} Returns the new reversed `LazyWrapper` object.\n */\n function lazyReverse() {\n if (this.__filtered__) {\n var result = new LazyWrapper(this);\n result.__dir__ = -1;\n result.__filtered__ = true;\n } else {\n result = this.clone();\n result.__dir__ *= -1;\n }\n return result;\n }\n\n /**\n * Extracts the unwrapped value from its lazy wrapper.\n *\n * @private\n * @name value\n * @memberOf LazyWrapper\n * @returns {*} Returns the unwrapped value.\n */\n function lazyValue() {\n var array = this.__wrapped__.value(),\n dir = this.__dir__,\n isArr = isArray(array),\n isRight = dir < 0,\n arrLength = isArr ? array.length : 0,\n view = getView(0, arrLength, this.__views__),\n start = view.start,\n end = view.end,\n length = end - start,\n index = isRight ? end : (start - 1),\n iteratees = this.__iteratees__,\n iterLength = iteratees.length,\n resIndex = 0,\n takeCount = nativeMin(length, this.__takeCount__);\n\n if (!isArr || (!isRight && arrLength == length && takeCount == length)) {\n return baseWrapperValue(array, this.__actions__);\n }\n var result = [];\n\n outer:\n while (length-- && resIndex < takeCount) {\n index += dir;\n\n var iterIndex = -1,\n value = array[index];\n\n while (++iterIndex < iterLength) {\n var data = iteratees[iterIndex],\n iteratee = data.iteratee,\n type = data.type,\n computed = iteratee(value);\n\n if (type == LAZY_MAP_FLAG) {\n value = computed;\n } else if (!computed) {\n if (type == LAZY_FILTER_FLAG) {\n continue outer;\n } else {\n break outer;\n }\n }\n }\n result[resIndex++] = value;\n }\n return result;\n }\n\n // Ensure `LazyWrapper` is an instance of `baseLodash`.\n LazyWrapper.prototype = baseCreate(baseLodash.prototype);\n LazyWrapper.prototype.constructor = LazyWrapper;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n function Hash(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n }\n\n /**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\n function hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n this.size = 0;\n }\n\n /**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n function hashDelete(key) {\n var result = this.has(key) && delete this.__data__[key];\n this.size -= result ? 1 : 0;\n return result;\n }\n\n /**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n function hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n }\n\n /**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n }\n\n /**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\n function hashSet(key, value) {\n var data = this.__data__;\n this.size += this.has(key) ? 0 : 1;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n }\n\n // Add methods to `Hash`.\n Hash.prototype.clear = hashClear;\n Hash.prototype['delete'] = hashDelete;\n Hash.prototype.get = hashGet;\n Hash.prototype.has = hashHas;\n Hash.prototype.set = hashSet;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n function ListCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n }\n\n /**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\n function listCacheClear() {\n this.__data__ = [];\n this.size = 0;\n }\n\n /**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n function listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n --this.size;\n return true;\n }\n\n /**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n function listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n }\n\n /**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n }\n\n /**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\n function listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n ++this.size;\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n }\n\n // Add methods to `ListCache`.\n ListCache.prototype.clear = listCacheClear;\n ListCache.prototype['delete'] = listCacheDelete;\n ListCache.prototype.get = listCacheGet;\n ListCache.prototype.has = listCacheHas;\n ListCache.prototype.set = listCacheSet;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n function MapCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n }\n\n /**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\n function mapCacheClear() {\n this.size = 0;\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n }\n\n /**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n function mapCacheDelete(key) {\n var result = getMapData(this, key)['delete'](key);\n this.size -= result ? 1 : 0;\n return result;\n }\n\n /**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n function mapCacheGet(key) {\n return getMapData(this, key).get(key);\n }\n\n /**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function mapCacheHas(key) {\n return getMapData(this, key).has(key);\n }\n\n /**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\n function mapCacheSet(key, value) {\n var data = getMapData(this, key),\n size = data.size;\n\n data.set(key, value);\n this.size += data.size == size ? 0 : 1;\n return this;\n }\n\n // Add methods to `MapCache`.\n MapCache.prototype.clear = mapCacheClear;\n MapCache.prototype['delete'] = mapCacheDelete;\n MapCache.prototype.get = mapCacheGet;\n MapCache.prototype.has = mapCacheHas;\n MapCache.prototype.set = mapCacheSet;\n\n /*------------------------------------------------------------------------*/\n\n /**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\n function SetCache(values) {\n var index = -1,\n length = values == null ? 0 : values.length;\n\n this.__data__ = new MapCache;\n while (++index < length) {\n this.add(values[index]);\n }\n }\n\n /**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\n function setCacheAdd(value) {\n this.__data__.set(value, HASH_UNDEFINED);\n return this;\n }\n\n /**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */\n function setCacheHas(value) {\n return this.__data__.has(value);\n }\n\n // Add methods to `SetCache`.\n SetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\n SetCache.prototype.has = setCacheHas;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n function Stack(entries) {\n var data = this.__data__ = new ListCache(entries);\n this.size = data.size;\n }\n\n /**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\n function stackClear() {\n this.__data__ = new ListCache;\n this.size = 0;\n }\n\n /**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n function stackDelete(key) {\n var data = this.__data__,\n result = data['delete'](key);\n\n this.size = data.size;\n return result;\n }\n\n /**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n function stackGet(key) {\n return this.__data__.get(key);\n }\n\n /**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function stackHas(key) {\n return this.__data__.has(key);\n }\n\n /**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\n function stackSet(key, value) {\n var data = this.__data__;\n if (data instanceof ListCache) {\n var pairs = data.__data__;\n if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n pairs.push([key, value]);\n this.size = ++data.size;\n return this;\n }\n data = this.__data__ = new MapCache(pairs);\n }\n data.set(key, value);\n this.size = data.size;\n return this;\n }\n\n // Add methods to `Stack`.\n Stack.prototype.clear = stackClear;\n Stack.prototype['delete'] = stackDelete;\n Stack.prototype.get = stackGet;\n Stack.prototype.has = stackHas;\n Stack.prototype.set = stackSet;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\n function arrayLikeKeys(value, inherited) {\n var isArr = isArray(value),\n isArg = !isArr && isArguments(value),\n isBuff = !isArr && !isArg && isBuffer(value),\n isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n skipIndexes = isArr || isArg || isBuff || isType,\n result = skipIndexes ? baseTimes(value.length, String) : [],\n length = result.length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) &&\n !(skipIndexes && (\n // Safari 9 has enumerable `arguments.length` in strict mode.\n key == 'length' ||\n // Node.js 0.10 has enumerable non-index properties on buffers.\n (isBuff && (key == 'offset' || key == 'parent')) ||\n // PhantomJS 2 has enumerable non-index properties on typed arrays.\n (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n // Skip index properties.\n isIndex(key, length)\n ))) {\n result.push(key);\n }\n }\n return result;\n }\n\n /**\n * A specialized version of `_.sample` for arrays.\n *\n * @private\n * @param {Array} array The array to sample.\n * @returns {*} Returns the random element.\n */\n function arraySample(array) {\n var length = array.length;\n return length ? array[baseRandom(0, length - 1)] : undefined;\n }\n\n /**\n * A specialized version of `_.sampleSize` for arrays.\n *\n * @private\n * @param {Array} array The array to sample.\n * @param {number} n The number of elements to sample.\n * @returns {Array} Returns the random elements.\n */\n function arraySampleSize(array, n) {\n return shuffleSelf(copyArray(array), baseClamp(n, 0, array.length));\n }\n\n /**\n * A specialized version of `_.shuffle` for arrays.\n *\n * @private\n * @param {Array} array The array to shuffle.\n * @returns {Array} Returns the new shuffled array.\n */\n function arrayShuffle(array) {\n return shuffleSelf(copyArray(array));\n }\n\n /**\n * This function is like `assignValue` except that it doesn't assign\n * `undefined` values.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\n function assignMergeValue(object, key, value) {\n if ((value !== undefined && !eq(object[key], value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n }\n\n /**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\n function assignValue(object, key, value) {\n var objValue = object[key];\n if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n }\n\n /**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n }\n\n /**\n * Aggregates elements of `collection` on `accumulator` with keys transformed\n * by `iteratee` and values set by `setter`.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} setter The function to set `accumulator` values.\n * @param {Function} iteratee The iteratee to transform keys.\n * @param {Object} accumulator The initial aggregated object.\n * @returns {Function} Returns `accumulator`.\n */\n function baseAggregator(collection, setter, iteratee, accumulator) {\n baseEach(collection, function(value, key, collection) {\n setter(accumulator, value, iteratee(value), collection);\n });\n return accumulator;\n }\n\n /**\n * The base implementation of `_.assign` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\n function baseAssign(object, source) {\n return object && copyObject(source, keys(source), object);\n }\n\n /**\n * The base implementation of `_.assignIn` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\n function baseAssignIn(object, source) {\n return object && copyObject(source, keysIn(source), object);\n }\n\n /**\n * The base implementation of `assignValue` and `assignMergeValue` without\n * value checks.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\n function baseAssignValue(object, key, value) {\n if (key == '__proto__' && defineProperty) {\n defineProperty(object, key, {\n 'configurable': true,\n 'enumerable': true,\n 'value': value,\n 'writable': true\n });\n } else {\n object[key] = value;\n }\n }\n\n /**\n * The base implementation of `_.at` without support for individual paths.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {string[]} paths The property paths to pick.\n * @returns {Array} Returns the picked elements.\n */\n function baseAt(object, paths) {\n var index = -1,\n length = paths.length,\n result = Array(length),\n skip = object == null;\n\n while (++index < length) {\n result[index] = skip ? undefined : get(object, paths[index]);\n }\n return result;\n }\n\n /**\n * The base implementation of `_.clamp` which doesn't coerce arguments.\n *\n * @private\n * @param {number} number The number to clamp.\n * @param {number} [lower] The lower bound.\n * @param {number} upper The upper bound.\n * @returns {number} Returns the clamped number.\n */\n function baseClamp(number, lower, upper) {\n if (number === number) {\n if (upper !== undefined) {\n number = number <= upper ? number : upper;\n }\n if (lower !== undefined) {\n number = number >= lower ? number : lower;\n }\n }\n return number;\n }\n\n /**\n * The base implementation of `_.clone` and `_.cloneDeep` which tracks\n * traversed objects.\n *\n * @private\n * @param {*} value The value to clone.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Deep clone\n * 2 - Flatten inherited properties\n * 4 - Clone symbols\n * @param {Function} [customizer] The function to customize cloning.\n * @param {string} [key] The key of `value`.\n * @param {Object} [object] The parent object of `value`.\n * @param {Object} [stack] Tracks traversed objects and their clone counterparts.\n * @returns {*} Returns the cloned value.\n */\n function baseClone(value, bitmask, customizer, key, object, stack) {\n var result,\n isDeep = bitmask & CLONE_DEEP_FLAG,\n isFlat = bitmask & CLONE_FLAT_FLAG,\n isFull = bitmask & CLONE_SYMBOLS_FLAG;\n\n if (customizer) {\n result = object ? customizer(value, key, object, stack) : customizer(value);\n }\n if (result !== undefined) {\n return result;\n }\n if (!isObject(value)) {\n return value;\n }\n var isArr = isArray(value);\n if (isArr) {\n result = initCloneArray(value);\n if (!isDeep) {\n return copyArray(value, result);\n }\n } else {\n var tag = getTag(value),\n isFunc = tag == funcTag || tag == genTag;\n\n if (isBuffer(value)) {\n return cloneBuffer(value, isDeep);\n }\n if (tag == objectTag || tag == argsTag || (isFunc && !object)) {\n result = (isFlat || isFunc) ? {} : initCloneObject(value);\n if (!isDeep) {\n return isFlat\n ? copySymbolsIn(value, baseAssignIn(result, value))\n : copySymbols(value, baseAssign(result, value));\n }\n } else {\n if (!cloneableTags[tag]) {\n return object ? value : {};\n }\n result = initCloneByTag(value, tag, isDeep);\n }\n }\n // Check for circular references and return its corresponding clone.\n stack || (stack = new Stack);\n var stacked = stack.get(value);\n if (stacked) {\n return stacked;\n }\n stack.set(value, result);\n\n if (isSet(value)) {\n value.forEach(function(subValue) {\n result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack));\n });\n } else if (isMap(value)) {\n value.forEach(function(subValue, key) {\n result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack));\n });\n }\n\n var keysFunc = isFull\n ? (isFlat ? getAllKeysIn : getAllKeys)\n : (isFlat ? keysIn : keys);\n\n var props = isArr ? undefined : keysFunc(value);\n arrayEach(props || value, function(subValue, key) {\n if (props) {\n key = subValue;\n subValue = value[key];\n }\n // Recursively populate clone (susceptible to call stack limits).\n assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack));\n });\n return result;\n }\n\n /**\n * The base implementation of `_.conforms` which doesn't clone `source`.\n *\n * @private\n * @param {Object} source The object of property predicates to conform to.\n * @returns {Function} Returns the new spec function.\n */\n function baseConforms(source) {\n var props = keys(source);\n return function(object) {\n return baseConformsTo(object, source, props);\n };\n }\n\n /**\n * The base implementation of `_.conformsTo` which accepts `props` to check.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property predicates to conform to.\n * @returns {boolean} Returns `true` if `object` conforms, else `false`.\n */\n function baseConformsTo(object, source, props) {\n var length = props.length;\n if (object == null) {\n return !length;\n }\n object = Object(object);\n while (length--) {\n var key = props[length],\n predicate = source[key],\n value = object[key];\n\n if ((value === undefined && !(key in object)) || !predicate(value)) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * The base implementation of `_.delay` and `_.defer` which accepts `args`\n * to provide to `func`.\n *\n * @private\n * @param {Function} func The function to delay.\n * @param {number} wait The number of milliseconds to delay invocation.\n * @param {Array} args The arguments to provide to `func`.\n * @returns {number|Object} Returns the timer id or timeout object.\n */\n function baseDelay(func, wait, args) {\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n return setTimeout(function() { func.apply(undefined, args); }, wait);\n }\n\n /**\n * The base implementation of methods like `_.difference` without support\n * for excluding multiple arrays or iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Array} values The values to exclude.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n */\n function baseDifference(array, values, iteratee, comparator) {\n var index = -1,\n includes = arrayIncludes,\n isCommon = true,\n length = array.length,\n result = [],\n valuesLength = values.length;\n\n if (!length) {\n return result;\n }\n if (iteratee) {\n values = arrayMap(values, baseUnary(iteratee));\n }\n if (comparator) {\n includes = arrayIncludesWith;\n isCommon = false;\n }\n else if (values.length >= LARGE_ARRAY_SIZE) {\n includes = cacheHas;\n isCommon = false;\n values = new SetCache(values);\n }\n outer:\n while (++index < length) {\n var value = array[index],\n computed = iteratee == null ? value : iteratee(value);\n\n value = (comparator || value !== 0) ? value : 0;\n if (isCommon && computed === computed) {\n var valuesIndex = valuesLength;\n while (valuesIndex--) {\n if (values[valuesIndex] === computed) {\n continue outer;\n }\n }\n result.push(value);\n }\n else if (!includes(values, computed, comparator)) {\n result.push(value);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.forEach` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n */\n var baseEach = createBaseEach(baseForOwn);\n\n /**\n * The base implementation of `_.forEachRight` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n */\n var baseEachRight = createBaseEach(baseForOwnRight, true);\n\n /**\n * The base implementation of `_.every` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if all elements pass the predicate check,\n * else `false`\n */\n function baseEvery(collection, predicate) {\n var result = true;\n baseEach(collection, function(value, index, collection) {\n result = !!predicate(value, index, collection);\n return result;\n });\n return result;\n }\n\n /**\n * The base implementation of methods like `_.max` and `_.min` which accepts a\n * `comparator` to determine the extremum value.\n *\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} iteratee The iteratee invoked per iteration.\n * @param {Function} comparator The comparator used to compare values.\n * @returns {*} Returns the extremum value.\n */\n function baseExtremum(array, iteratee, comparator) {\n var index = -1,\n length = array.length;\n\n while (++index < length) {\n var value = array[index],\n current = iteratee(value);\n\n if (current != null && (computed === undefined\n ? (current === current && !isSymbol(current))\n : comparator(current, computed)\n )) {\n var computed = current,\n result = value;\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.fill` without an iteratee call guard.\n *\n * @private\n * @param {Array} array The array to fill.\n * @param {*} value The value to fill `array` with.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns `array`.\n */\n function baseFill(array, value, start, end) {\n var length = array.length;\n\n start = toInteger(start);\n if (start < 0) {\n start = -start > length ? 0 : (length + start);\n }\n end = (end === undefined || end > length) ? length : toInteger(end);\n if (end < 0) {\n end += length;\n }\n end = start > end ? 0 : toLength(end);\n while (start < end) {\n array[start++] = value;\n }\n return array;\n }\n\n /**\n * The base implementation of `_.filter` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\n function baseFilter(collection, predicate) {\n var result = [];\n baseEach(collection, function(value, index, collection) {\n if (predicate(value, index, collection)) {\n result.push(value);\n }\n });\n return result;\n }\n\n /**\n * The base implementation of `_.flatten` with support for restricting flattening.\n *\n * @private\n * @param {Array} array The array to flatten.\n * @param {number} depth The maximum recursion depth.\n * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.\n * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.\n * @param {Array} [result=[]] The initial result value.\n * @returns {Array} Returns the new flattened array.\n */\n function baseFlatten(array, depth, predicate, isStrict, result) {\n var index = -1,\n length = array.length;\n\n predicate || (predicate = isFlattenable);\n result || (result = []);\n\n while (++index < length) {\n var value = array[index];\n if (depth > 0 && predicate(value)) {\n if (depth > 1) {\n // Recursively flatten arrays (susceptible to call stack limits).\n baseFlatten(value, depth - 1, predicate, isStrict, result);\n } else {\n arrayPush(result, value);\n }\n } else if (!isStrict) {\n result[result.length] = value;\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `baseForOwn` which iterates over `object`\n * properties returned by `keysFunc` and invokes `iteratee` for each property.\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\n var baseFor = createBaseFor();\n\n /**\n * This function is like `baseFor` except that it iterates over properties\n * in the opposite order.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\n var baseForRight = createBaseFor(true);\n\n /**\n * The base implementation of `_.forOwn` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Object} Returns `object`.\n */\n function baseForOwn(object, iteratee) {\n return object && baseFor(object, iteratee, keys);\n }\n\n /**\n * The base implementation of `_.forOwnRight` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Object} Returns `object`.\n */\n function baseForOwnRight(object, iteratee) {\n return object && baseForRight(object, iteratee, keys);\n }\n\n /**\n * The base implementation of `_.functions` which creates an array of\n * `object` function property names filtered from `props`.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Array} props The property names to filter.\n * @returns {Array} Returns the function names.\n */\n function baseFunctions(object, props) {\n return arrayFilter(props, function(key) {\n return isFunction(object[key]);\n });\n }\n\n /**\n * The base implementation of `_.get` without support for default values.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @returns {*} Returns the resolved value.\n */\n function baseGet(object, path) {\n path = castPath(path, object);\n\n var index = 0,\n length = path.length;\n\n while (object != null && index < length) {\n object = object[toKey(path[index++])];\n }\n return (index && index == length) ? object : undefined;\n }\n\n /**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */\n function baseGetAllKeys(object, keysFunc, symbolsFunc) {\n var result = keysFunc(object);\n return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n }\n\n /**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\n function baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n }\n\n /**\n * The base implementation of `_.gt` which doesn't coerce arguments.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is greater than `other`,\n * else `false`.\n */\n function baseGt(value, other) {\n return value > other;\n }\n\n /**\n * The base implementation of `_.has` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\n function baseHas(object, key) {\n return object != null && hasOwnProperty.call(object, key);\n }\n\n /**\n * The base implementation of `_.hasIn` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\n function baseHasIn(object, key) {\n return object != null && key in Object(object);\n }\n\n /**\n * The base implementation of `_.inRange` which doesn't coerce arguments.\n *\n * @private\n * @param {number} number The number to check.\n * @param {number} start The start of the range.\n * @param {number} end The end of the range.\n * @returns {boolean} Returns `true` if `number` is in the range, else `false`.\n */\n function baseInRange(number, start, end) {\n return number >= nativeMin(start, end) && number < nativeMax(start, end);\n }\n\n /**\n * The base implementation of methods like `_.intersection`, without support\n * for iteratee shorthands, that accepts an array of arrays to inspect.\n *\n * @private\n * @param {Array} arrays The arrays to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of shared values.\n */\n function baseIntersection(arrays, iteratee, comparator) {\n var includes = comparator ? arrayIncludesWith : arrayIncludes,\n length = arrays[0].length,\n othLength = arrays.length,\n othIndex = othLength,\n caches = Array(othLength),\n maxLength = Infinity,\n result = [];\n\n while (othIndex--) {\n var array = arrays[othIndex];\n if (othIndex && iteratee) {\n array = arrayMap(array, baseUnary(iteratee));\n }\n maxLength = nativeMin(array.length, maxLength);\n caches[othIndex] = !comparator && (iteratee || (length >= 120 && array.length >= 120))\n ? new SetCache(othIndex && array)\n : undefined;\n }\n array = arrays[0];\n\n var index = -1,\n seen = caches[0];\n\n outer:\n while (++index < length && result.length < maxLength) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value;\n\n value = (comparator || value !== 0) ? value : 0;\n if (!(seen\n ? cacheHas(seen, computed)\n : includes(result, computed, comparator)\n )) {\n othIndex = othLength;\n while (--othIndex) {\n var cache = caches[othIndex];\n if (!(cache\n ? cacheHas(cache, computed)\n : includes(arrays[othIndex], computed, comparator))\n ) {\n continue outer;\n }\n }\n if (seen) {\n seen.push(computed);\n }\n result.push(value);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.invert` and `_.invertBy` which inverts\n * `object` with values transformed by `iteratee` and set by `setter`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} setter The function to set `accumulator` values.\n * @param {Function} iteratee The iteratee to transform values.\n * @param {Object} accumulator The initial inverted object.\n * @returns {Function} Returns `accumulator`.\n */\n function baseInverter(object, setter, iteratee, accumulator) {\n baseForOwn(object, function(value, key, object) {\n setter(accumulator, iteratee(value), key, object);\n });\n return accumulator;\n }\n\n /**\n * The base implementation of `_.invoke` without support for individual\n * method arguments.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the method to invoke.\n * @param {Array} args The arguments to invoke the method with.\n * @returns {*} Returns the result of the invoked method.\n */\n function baseInvoke(object, path, args) {\n path = castPath(path, object);\n object = parent(object, path);\n var func = object == null ? object : object[toKey(last(path))];\n return func == null ? undefined : apply(func, object, args);\n }\n\n /**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\n function baseIsArguments(value) {\n return isObjectLike(value) && baseGetTag(value) == argsTag;\n }\n\n /**\n * The base implementation of `_.isArrayBuffer` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`.\n */\n function baseIsArrayBuffer(value) {\n return isObjectLike(value) && baseGetTag(value) == arrayBufferTag;\n }\n\n /**\n * The base implementation of `_.isDate` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a date object, else `false`.\n */\n function baseIsDate(value) {\n return isObjectLike(value) && baseGetTag(value) == dateTag;\n }\n\n /**\n * The base implementation of `_.isEqual` which supports partial comparisons\n * and tracks traversed objects.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Unordered comparison\n * 2 - Partial comparison\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n */\n function baseIsEqual(value, other, bitmask, customizer, stack) {\n if (value === other) {\n return true;\n }\n if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {\n return value !== value && other !== other;\n }\n return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);\n }\n\n /**\n * A specialized version of `baseIsEqual` for arrays and objects which performs\n * deep comparisons and tracks traversed objects enabling objects with circular\n * references to be compared.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\n function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n var objIsArr = isArray(object),\n othIsArr = isArray(other),\n objTag = objIsArr ? arrayTag : getTag(object),\n othTag = othIsArr ? arrayTag : getTag(other);\n\n objTag = objTag == argsTag ? objectTag : objTag;\n othTag = othTag == argsTag ? objectTag : othTag;\n\n var objIsObj = objTag == objectTag,\n othIsObj = othTag == objectTag,\n isSameTag = objTag == othTag;\n\n if (isSameTag && isBuffer(object)) {\n if (!isBuffer(other)) {\n return false;\n }\n objIsArr = true;\n objIsObj = false;\n }\n if (isSameTag && !objIsObj) {\n stack || (stack = new Stack);\n return (objIsArr || isTypedArray(object))\n ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)\n : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\n }\n if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\n var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n if (objIsWrapped || othIsWrapped) {\n var objUnwrapped = objIsWrapped ? object.value() : object,\n othUnwrapped = othIsWrapped ? other.value() : other;\n\n stack || (stack = new Stack);\n return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n }\n }\n if (!isSameTag) {\n return false;\n }\n stack || (stack = new Stack);\n return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\n }\n\n /**\n * The base implementation of `_.isMap` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n */\n function baseIsMap(value) {\n return isObjectLike(value) && getTag(value) == mapTag;\n }\n\n /**\n * The base implementation of `_.isMatch` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @param {Array} matchData The property names, values, and compare flags to match.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n */\n function baseIsMatch(object, source, matchData, customizer) {\n var index = matchData.length,\n length = index,\n noCustomizer = !customizer;\n\n if (object == null) {\n return !length;\n }\n object = Object(object);\n while (index--) {\n var data = matchData[index];\n if ((noCustomizer && data[2])\n ? data[1] !== object[data[0]]\n : !(data[0] in object)\n ) {\n return false;\n }\n }\n while (++index < length) {\n data = matchData[index];\n var key = data[0],\n objValue = object[key],\n srcValue = data[1];\n\n if (noCustomizer && data[2]) {\n if (objValue === undefined && !(key in object)) {\n return false;\n }\n } else {\n var stack = new Stack;\n if (customizer) {\n var result = customizer(objValue, srcValue, key, object, source, stack);\n }\n if (!(result === undefined\n ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack)\n : result\n )) {\n return false;\n }\n }\n }\n return true;\n }\n\n /**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\n function baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n }\n\n /**\n * The base implementation of `_.isRegExp` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.\n */\n function baseIsRegExp(value) {\n return isObjectLike(value) && baseGetTag(value) == regexpTag;\n }\n\n /**\n * The base implementation of `_.isSet` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n */\n function baseIsSet(value) {\n return isObjectLike(value) && getTag(value) == setTag;\n }\n\n /**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\n function baseIsTypedArray(value) {\n return isObjectLike(value) &&\n isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n }\n\n /**\n * The base implementation of `_.iteratee`.\n *\n * @private\n * @param {*} [value=_.identity] The value to convert to an iteratee.\n * @returns {Function} Returns the iteratee.\n */\n function baseIteratee(value) {\n // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.\n // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.\n if (typeof value == 'function') {\n return value;\n }\n if (value == null) {\n return identity;\n }\n if (typeof value == 'object') {\n return isArray(value)\n ? baseMatchesProperty(value[0], value[1])\n : baseMatches(value);\n }\n return property(value);\n }\n\n /**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\n function baseKeys(object) {\n if (!isPrototype(object)) {\n return nativeKeys(object);\n }\n var result = [];\n for (var key in Object(object)) {\n if (hasOwnProperty.call(object, key) && key != 'constructor') {\n result.push(key);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\n function baseKeysIn(object) {\n if (!isObject(object)) {\n return nativeKeysIn(object);\n }\n var isProto = isPrototype(object),\n result = [];\n\n for (var key in object) {\n if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n result.push(key);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.lt` which doesn't coerce arguments.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is less than `other`,\n * else `false`.\n */\n function baseLt(value, other) {\n return value < other;\n }\n\n /**\n * The base implementation of `_.map` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\n function baseMap(collection, iteratee) {\n var index = -1,\n result = isArrayLike(collection) ? Array(collection.length) : [];\n\n baseEach(collection, function(value, key, collection) {\n result[++index] = iteratee(value, key, collection);\n });\n return result;\n }\n\n /**\n * The base implementation of `_.matches` which doesn't clone `source`.\n *\n * @private\n * @param {Object} source The object of property values to match.\n * @returns {Function} Returns the new spec function.\n */\n function baseMatches(source) {\n var matchData = getMatchData(source);\n if (matchData.length == 1 && matchData[0][2]) {\n return matchesStrictComparable(matchData[0][0], matchData[0][1]);\n }\n return function(object) {\n return object === source || baseIsMatch(object, source, matchData);\n };\n }\n\n /**\n * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.\n *\n * @private\n * @param {string} path The path of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\n function baseMatchesProperty(path, srcValue) {\n if (isKey(path) && isStrictComparable(srcValue)) {\n return matchesStrictComparable(toKey(path), srcValue);\n }\n return function(object) {\n var objValue = get(object, path);\n return (objValue === undefined && objValue === srcValue)\n ? hasIn(object, path)\n : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);\n };\n }\n\n /**\n * The base implementation of `_.merge` without support for multiple sources.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} [customizer] The function to customize merged values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n */\n function baseMerge(object, source, srcIndex, customizer, stack) {\n if (object === source) {\n return;\n }\n baseFor(source, function(srcValue, key) {\n stack || (stack = new Stack);\n if (isObject(srcValue)) {\n baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack);\n }\n else {\n var newValue = customizer\n ? customizer(safeGet(object, key), srcValue, (key + ''), object, source, stack)\n : undefined;\n\n if (newValue === undefined) {\n newValue = srcValue;\n }\n assignMergeValue(object, key, newValue);\n }\n }, keysIn);\n }\n\n /**\n * A specialized version of `baseMerge` for arrays and objects which performs\n * deep merges and tracks traversed objects enabling objects with circular\n * references to be merged.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {string} key The key of the value to merge.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} mergeFunc The function to merge values.\n * @param {Function} [customizer] The function to customize assigned values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n */\n function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) {\n var objValue = safeGet(object, key),\n srcValue = safeGet(source, key),\n stacked = stack.get(srcValue);\n\n if (stacked) {\n assignMergeValue(object, key, stacked);\n return;\n }\n var newValue = customizer\n ? customizer(objValue, srcValue, (key + ''), object, source, stack)\n : undefined;\n\n var isCommon = newValue === undefined;\n\n if (isCommon) {\n var isArr = isArray(srcValue),\n isBuff = !isArr && isBuffer(srcValue),\n isTyped = !isArr && !isBuff && isTypedArray(srcValue);\n\n newValue = srcValue;\n if (isArr || isBuff || isTyped) {\n if (isArray(objValue)) {\n newValue = objValue;\n }\n else if (isArrayLikeObject(objValue)) {\n newValue = copyArray(objValue);\n }\n else if (isBuff) {\n isCommon = false;\n newValue = cloneBuffer(srcValue, true);\n }\n else if (isTyped) {\n isCommon = false;\n newValue = cloneTypedArray(srcValue, true);\n }\n else {\n newValue = [];\n }\n }\n else if (isPlainObject(srcValue) || isArguments(srcValue)) {\n newValue = objValue;\n if (isArguments(objValue)) {\n newValue = toPlainObject(objValue);\n }\n else if (!isObject(objValue) || isFunction(objValue)) {\n newValue = initCloneObject(srcValue);\n }\n }\n else {\n isCommon = false;\n }\n }\n if (isCommon) {\n // Recursively merge objects and arrays (susceptible to call stack limits).\n stack.set(srcValue, newValue);\n mergeFunc(newValue, srcValue, srcIndex, customizer, stack);\n stack['delete'](srcValue);\n }\n assignMergeValue(object, key, newValue);\n }\n\n /**\n * The base implementation of `_.nth` which doesn't coerce arguments.\n *\n * @private\n * @param {Array} array The array to query.\n * @param {number} n The index of the element to return.\n * @returns {*} Returns the nth element of `array`.\n */\n function baseNth(array, n) {\n var length = array.length;\n if (!length) {\n return;\n }\n n += n < 0 ? length : 0;\n return isIndex(n, length) ? array[n] : undefined;\n }\n\n /**\n * The base implementation of `_.orderBy` without param guards.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by.\n * @param {string[]} orders The sort orders of `iteratees`.\n * @returns {Array} Returns the new sorted array.\n */\n function baseOrderBy(collection, iteratees, orders) {\n if (iteratees.length) {\n iteratees = arrayMap(iteratees, function(iteratee) {\n if (isArray(iteratee)) {\n return function(value) {\n return baseGet(value, iteratee.length === 1 ? iteratee[0] : iteratee);\n }\n }\n return iteratee;\n });\n } else {\n iteratees = [identity];\n }\n\n var index = -1;\n iteratees = arrayMap(iteratees, baseUnary(getIteratee()));\n\n var result = baseMap(collection, function(value, key, collection) {\n var criteria = arrayMap(iteratees, function(iteratee) {\n return iteratee(value);\n });\n return { 'criteria': criteria, 'index': ++index, 'value': value };\n });\n\n return baseSortBy(result, function(object, other) {\n return compareMultiple(object, other, orders);\n });\n }\n\n /**\n * The base implementation of `_.pick` without support for individual\n * property identifiers.\n *\n * @private\n * @param {Object} object The source object.\n * @param {string[]} paths The property paths to pick.\n * @returns {Object} Returns the new object.\n */\n function basePick(object, paths) {\n return basePickBy(object, paths, function(value, path) {\n return hasIn(object, path);\n });\n }\n\n /**\n * The base implementation of `_.pickBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The source object.\n * @param {string[]} paths The property paths to pick.\n * @param {Function} predicate The function invoked per property.\n * @returns {Object} Returns the new object.\n */\n function basePickBy(object, paths, predicate) {\n var index = -1,\n length = paths.length,\n result = {};\n\n while (++index < length) {\n var path = paths[index],\n value = baseGet(object, path);\n\n if (predicate(value, path)) {\n baseSet(result, castPath(path, object), value);\n }\n }\n return result;\n }\n\n /**\n * A specialized version of `baseProperty` which supports deep paths.\n *\n * @private\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\n function basePropertyDeep(path) {\n return function(object) {\n return baseGet(object, path);\n };\n }\n\n /**\n * The base implementation of `_.pullAllBy` without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to remove.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns `array`.\n */\n function basePullAll(array, values, iteratee, comparator) {\n var indexOf = comparator ? baseIndexOfWith : baseIndexOf,\n index = -1,\n length = values.length,\n seen = array;\n\n if (array === values) {\n values = copyArray(values);\n }\n if (iteratee) {\n seen = arrayMap(array, baseUnary(iteratee));\n }\n while (++index < length) {\n var fromIndex = 0,\n value = values[index],\n computed = iteratee ? iteratee(value) : value;\n\n while ((fromIndex = indexOf(seen, computed, fromIndex, comparator)) > -1) {\n if (seen !== array) {\n splice.call(seen, fromIndex, 1);\n }\n splice.call(array, fromIndex, 1);\n }\n }\n return array;\n }\n\n /**\n * The base implementation of `_.pullAt` without support for individual\n * indexes or capturing the removed elements.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {number[]} indexes The indexes of elements to remove.\n * @returns {Array} Returns `array`.\n */\n function basePullAt(array, indexes) {\n var length = array ? indexes.length : 0,\n lastIndex = length - 1;\n\n while (length--) {\n var index = indexes[length];\n if (length == lastIndex || index !== previous) {\n var previous = index;\n if (isIndex(index)) {\n splice.call(array, index, 1);\n } else {\n baseUnset(array, index);\n }\n }\n }\n return array;\n }\n\n /**\n * The base implementation of `_.random` without support for returning\n * floating-point numbers.\n *\n * @private\n * @param {number} lower The lower bound.\n * @param {number} upper The upper bound.\n * @returns {number} Returns the random number.\n */\n function baseRandom(lower, upper) {\n return lower + nativeFloor(nativeRandom() * (upper - lower + 1));\n }\n\n /**\n * The base implementation of `_.range` and `_.rangeRight` which doesn't\n * coerce arguments.\n *\n * @private\n * @param {number} start The start of the range.\n * @param {number} end The end of the range.\n * @param {number} step The value to increment or decrement by.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Array} Returns the range of numbers.\n */\n function baseRange(start, end, step, fromRight) {\n var index = -1,\n length = nativeMax(nativeCeil((end - start) / (step || 1)), 0),\n result = Array(length);\n\n while (length--) {\n result[fromRight ? length : ++index] = start;\n start += step;\n }\n return result;\n }\n\n /**\n * The base implementation of `_.repeat` which doesn't coerce arguments.\n *\n * @private\n * @param {string} string The string to repeat.\n * @param {number} n The number of times to repeat the string.\n * @returns {string} Returns the repeated string.\n */\n function baseRepeat(string, n) {\n var result = '';\n if (!string || n < 1 || n > MAX_SAFE_INTEGER) {\n return result;\n }\n // Leverage the exponentiation by squaring algorithm for a faster repeat.\n // See https://en.wikipedia.org/wiki/Exponentiation_by_squaring for more details.\n do {\n if (n % 2) {\n result += string;\n }\n n = nativeFloor(n / 2);\n if (n) {\n string += string;\n }\n } while (n);\n\n return result;\n }\n\n /**\n * The base implementation of `_.rest` which doesn't validate or coerce arguments.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n */\n function baseRest(func, start) {\n return setToString(overRest(func, start, identity), func + '');\n }\n\n /**\n * The base implementation of `_.sample`.\n *\n * @private\n * @param {Array|Object} collection The collection to sample.\n * @returns {*} Returns the random element.\n */\n function baseSample(collection) {\n return arraySample(values(collection));\n }\n\n /**\n * The base implementation of `_.sampleSize` without param guards.\n *\n * @private\n * @param {Array|Object} collection The collection to sample.\n * @param {number} n The number of elements to sample.\n * @returns {Array} Returns the random elements.\n */\n function baseSampleSize(collection, n) {\n var array = values(collection);\n return shuffleSelf(array, baseClamp(n, 0, array.length));\n }\n\n /**\n * The base implementation of `_.set`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @param {Function} [customizer] The function to customize path creation.\n * @returns {Object} Returns `object`.\n */\n function baseSet(object, path, value, customizer) {\n if (!isObject(object)) {\n return object;\n }\n path = castPath(path, object);\n\n var index = -1,\n length = path.length,\n lastIndex = length - 1,\n nested = object;\n\n while (nested != null && ++index < length) {\n var key = toKey(path[index]),\n newValue = value;\n\n if (key === '__proto__' || key === 'constructor' || key === 'prototype') {\n return object;\n }\n\n if (index != lastIndex) {\n var objValue = nested[key];\n newValue = customizer ? customizer(objValue, key, nested) : undefined;\n if (newValue === undefined) {\n newValue = isObject(objValue)\n ? objValue\n : (isIndex(path[index + 1]) ? [] : {});\n }\n }\n assignValue(nested, key, newValue);\n nested = nested[key];\n }\n return object;\n }\n\n /**\n * The base implementation of `setData` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to associate metadata with.\n * @param {*} data The metadata.\n * @returns {Function} Returns `func`.\n */\n var baseSetData = !metaMap ? identity : function(func, data) {\n metaMap.set(func, data);\n return func;\n };\n\n /**\n * The base implementation of `setToString` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\n var baseSetToString = !defineProperty ? identity : function(func, string) {\n return defineProperty(func, 'toString', {\n 'configurable': true,\n 'enumerable': false,\n 'value': constant(string),\n 'writable': true\n });\n };\n\n /**\n * The base implementation of `_.shuffle`.\n *\n * @private\n * @param {Array|Object} collection The collection to shuffle.\n * @returns {Array} Returns the new shuffled array.\n */\n function baseShuffle(collection) {\n return shuffleSelf(values(collection));\n }\n\n /**\n * The base implementation of `_.slice` without an iteratee call guard.\n *\n * @private\n * @param {Array} array The array to slice.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the slice of `array`.\n */\n function baseSlice(array, start, end) {\n var index = -1,\n length = array.length;\n\n if (start < 0) {\n start = -start > length ? 0 : (length + start);\n }\n end = end > length ? length : end;\n if (end < 0) {\n end += length;\n }\n length = start > end ? 0 : ((end - start) >>> 0);\n start >>>= 0;\n\n var result = Array(length);\n while (++index < length) {\n result[index] = array[index + start];\n }\n return result;\n }\n\n /**\n * The base implementation of `_.some` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\n function baseSome(collection, predicate) {\n var result;\n\n baseEach(collection, function(value, index, collection) {\n result = predicate(value, index, collection);\n return !result;\n });\n return !!result;\n }\n\n /**\n * The base implementation of `_.sortedIndex` and `_.sortedLastIndex` which\n * performs a binary search of `array` to determine the index at which `value`\n * should be inserted into `array` in order to maintain its sort order.\n *\n * @private\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @param {boolean} [retHighest] Specify returning the highest qualified index.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n */\n function baseSortedIndex(array, value, retHighest) {\n var low = 0,\n high = array == null ? low : array.length;\n\n if (typeof value == 'number' && value === value && high <= HALF_MAX_ARRAY_LENGTH) {\n while (low < high) {\n var mid = (low + high) >>> 1,\n computed = array[mid];\n\n if (computed !== null && !isSymbol(computed) &&\n (retHighest ? (computed <= value) : (computed < value))) {\n low = mid + 1;\n } else {\n high = mid;\n }\n }\n return high;\n }\n return baseSortedIndexBy(array, value, identity, retHighest);\n }\n\n /**\n * The base implementation of `_.sortedIndexBy` and `_.sortedLastIndexBy`\n * which invokes `iteratee` for `value` and each element of `array` to compute\n * their sort ranking. The iteratee is invoked with one argument; (value).\n *\n * @private\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @param {Function} iteratee The iteratee invoked per element.\n * @param {boolean} [retHighest] Specify returning the highest qualified index.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n */\n function baseSortedIndexBy(array, value, iteratee, retHighest) {\n var low = 0,\n high = array == null ? 0 : array.length;\n if (high === 0) {\n return 0;\n }\n\n value = iteratee(value);\n var valIsNaN = value !== value,\n valIsNull = value === null,\n valIsSymbol = isSymbol(value),\n valIsUndefined = value === undefined;\n\n while (low < high) {\n var mid = nativeFloor((low + high) / 2),\n computed = iteratee(array[mid]),\n othIsDefined = computed !== undefined,\n othIsNull = computed === null,\n othIsReflexive = computed === computed,\n othIsSymbol = isSymbol(computed);\n\n if (valIsNaN) {\n var setLow = retHighest || othIsReflexive;\n } else if (valIsUndefined) {\n setLow = othIsReflexive && (retHighest || othIsDefined);\n } else if (valIsNull) {\n setLow = othIsReflexive && othIsDefined && (retHighest || !othIsNull);\n } else if (valIsSymbol) {\n setLow = othIsReflexive && othIsDefined && !othIsNull && (retHighest || !othIsSymbol);\n } else if (othIsNull || othIsSymbol) {\n setLow = false;\n } else {\n setLow = retHighest ? (computed <= value) : (computed < value);\n }\n if (setLow) {\n low = mid + 1;\n } else {\n high = mid;\n }\n }\n return nativeMin(high, MAX_ARRAY_INDEX);\n }\n\n /**\n * The base implementation of `_.sortedUniq` and `_.sortedUniqBy` without\n * support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n */\n function baseSortedUniq(array, iteratee) {\n var index = -1,\n length = array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value;\n\n if (!index || !eq(computed, seen)) {\n var seen = computed;\n result[resIndex++] = value === 0 ? 0 : value;\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.toNumber` which doesn't ensure correct\n * conversions of binary, hexadecimal, or octal string values.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n */\n function baseToNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n return +value;\n }\n\n /**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\n function baseToString(value) {\n // Exit early for strings to avoid a performance hit in some environments.\n if (typeof value == 'string') {\n return value;\n }\n if (isArray(value)) {\n // Recursively convert values (susceptible to call stack limits).\n return arrayMap(value, baseToString) + '';\n }\n if (isSymbol(value)) {\n return symbolToString ? symbolToString.call(value) : '';\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n }\n\n /**\n * The base implementation of `_.uniqBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n */\n function baseUniq(array, iteratee, comparator) {\n var index = -1,\n includes = arrayIncludes,\n length = array.length,\n isCommon = true,\n result = [],\n seen = result;\n\n if (comparator) {\n isCommon = false;\n includes = arrayIncludesWith;\n }\n else if (length >= LARGE_ARRAY_SIZE) {\n var set = iteratee ? null : createSet(array);\n if (set) {\n return setToArray(set);\n }\n isCommon = false;\n includes = cacheHas;\n seen = new SetCache;\n }\n else {\n seen = iteratee ? [] : result;\n }\n outer:\n while (++index < length) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value;\n\n value = (comparator || value !== 0) ? value : 0;\n if (isCommon && computed === computed) {\n var seenIndex = seen.length;\n while (seenIndex--) {\n if (seen[seenIndex] === computed) {\n continue outer;\n }\n }\n if (iteratee) {\n seen.push(computed);\n }\n result.push(value);\n }\n else if (!includes(seen, computed, comparator)) {\n if (seen !== result) {\n seen.push(computed);\n }\n result.push(value);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.unset`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The property path to unset.\n * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n */\n function baseUnset(object, path) {\n path = castPath(path, object);\n object = parent(object, path);\n return object == null || delete object[toKey(last(path))];\n }\n\n /**\n * The base implementation of `_.update`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to update.\n * @param {Function} updater The function to produce the updated value.\n * @param {Function} [customizer] The function to customize path creation.\n * @returns {Object} Returns `object`.\n */\n function baseUpdate(object, path, updater, customizer) {\n return baseSet(object, path, updater(baseGet(object, path)), customizer);\n }\n\n /**\n * The base implementation of methods like `_.dropWhile` and `_.takeWhile`\n * without support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to query.\n * @param {Function} predicate The function invoked per iteration.\n * @param {boolean} [isDrop] Specify dropping elements instead of taking them.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Array} Returns the slice of `array`.\n */\n function baseWhile(array, predicate, isDrop, fromRight) {\n var length = array.length,\n index = fromRight ? length : -1;\n\n while ((fromRight ? index-- : ++index < length) &&\n predicate(array[index], index, array)) {}\n\n return isDrop\n ? baseSlice(array, (fromRight ? 0 : index), (fromRight ? index + 1 : length))\n : baseSlice(array, (fromRight ? index + 1 : 0), (fromRight ? length : index));\n }\n\n /**\n * The base implementation of `wrapperValue` which returns the result of\n * performing a sequence of actions on the unwrapped `value`, where each\n * successive action is supplied the return value of the previous.\n *\n * @private\n * @param {*} value The unwrapped value.\n * @param {Array} actions Actions to perform to resolve the unwrapped value.\n * @returns {*} Returns the resolved value.\n */\n function baseWrapperValue(value, actions) {\n var result = value;\n if (result instanceof LazyWrapper) {\n result = result.value();\n }\n return arrayReduce(actions, function(result, action) {\n return action.func.apply(action.thisArg, arrayPush([result], action.args));\n }, result);\n }\n\n /**\n * The base implementation of methods like `_.xor`, without support for\n * iteratee shorthands, that accepts an array of arrays to inspect.\n *\n * @private\n * @param {Array} arrays The arrays to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of values.\n */\n function baseXor(arrays, iteratee, comparator) {\n var length = arrays.length;\n if (length < 2) {\n return length ? baseUniq(arrays[0]) : [];\n }\n var index = -1,\n result = Array(length);\n\n while (++index < length) {\n var array = arrays[index],\n othIndex = -1;\n\n while (++othIndex < length) {\n if (othIndex != index) {\n result[index] = baseDifference(result[index] || array, arrays[othIndex], iteratee, comparator);\n }\n }\n }\n return baseUniq(baseFlatten(result, 1), iteratee, comparator);\n }\n\n /**\n * This base implementation of `_.zipObject` which assigns values using `assignFunc`.\n *\n * @private\n * @param {Array} props The property identifiers.\n * @param {Array} values The property values.\n * @param {Function} assignFunc The function to assign values.\n * @returns {Object} Returns the new object.\n */\n function baseZipObject(props, values, assignFunc) {\n var index = -1,\n length = props.length,\n valsLength = values.length,\n result = {};\n\n while (++index < length) {\n var value = index < valsLength ? values[index] : undefined;\n assignFunc(result, props[index], value);\n }\n return result;\n }\n\n /**\n * Casts `value` to an empty array if it's not an array like object.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {Array|Object} Returns the cast array-like object.\n */\n function castArrayLikeObject(value) {\n return isArrayLikeObject(value) ? value : [];\n }\n\n /**\n * Casts `value` to `identity` if it's not a function.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {Function} Returns cast function.\n */\n function castFunction(value) {\n return typeof value == 'function' ? value : identity;\n }\n\n /**\n * Casts `value` to a path array if it's not one.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {Object} [object] The object to query keys on.\n * @returns {Array} Returns the cast property path array.\n */\n function castPath(value, object) {\n if (isArray(value)) {\n return value;\n }\n return isKey(value, object) ? [value] : stringToPath(toString(value));\n }\n\n /**\n * A `baseRest` alias which can be replaced with `identity` by module\n * replacement plugins.\n *\n * @private\n * @type {Function}\n * @param {Function} func The function to apply a rest parameter to.\n * @returns {Function} Returns the new function.\n */\n var castRest = baseRest;\n\n /**\n * Casts `array` to a slice if it's needed.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {number} start The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the cast slice.\n */\n function castSlice(array, start, end) {\n var length = array.length;\n end = end === undefined ? length : end;\n return (!start && end >= length) ? array : baseSlice(array, start, end);\n }\n\n /**\n * A simple wrapper around the global [`clearTimeout`](https://mdn.io/clearTimeout).\n *\n * @private\n * @param {number|Object} id The timer id or timeout object of the timer to clear.\n */\n var clearTimeout = ctxClearTimeout || function(id) {\n return root.clearTimeout(id);\n };\n\n /**\n * Creates a clone of `buffer`.\n *\n * @private\n * @param {Buffer} buffer The buffer to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Buffer} Returns the cloned buffer.\n */\n function cloneBuffer(buffer, isDeep) {\n if (isDeep) {\n return buffer.slice();\n }\n var length = buffer.length,\n result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);\n\n buffer.copy(result);\n return result;\n }\n\n /**\n * Creates a clone of `arrayBuffer`.\n *\n * @private\n * @param {ArrayBuffer} arrayBuffer The array buffer to clone.\n * @returns {ArrayBuffer} Returns the cloned array buffer.\n */\n function cloneArrayBuffer(arrayBuffer) {\n var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n new Uint8Array(result).set(new Uint8Array(arrayBuffer));\n return result;\n }\n\n /**\n * Creates a clone of `dataView`.\n *\n * @private\n * @param {Object} dataView The data view to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned data view.\n */\n function cloneDataView(dataView, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;\n return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);\n }\n\n /**\n * Creates a clone of `regexp`.\n *\n * @private\n * @param {Object} regexp The regexp to clone.\n * @returns {Object} Returns the cloned regexp.\n */\n function cloneRegExp(regexp) {\n var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));\n result.lastIndex = regexp.lastIndex;\n return result;\n }\n\n /**\n * Creates a clone of the `symbol` object.\n *\n * @private\n * @param {Object} symbol The symbol object to clone.\n * @returns {Object} Returns the cloned symbol object.\n */\n function cloneSymbol(symbol) {\n return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};\n }\n\n /**\n * Creates a clone of `typedArray`.\n *\n * @private\n * @param {Object} typedArray The typed array to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned typed array.\n */\n function cloneTypedArray(typedArray, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\n return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n }\n\n /**\n * Compares values to sort them in ascending order.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {number} Returns the sort order indicator for `value`.\n */\n function compareAscending(value, other) {\n if (value !== other) {\n var valIsDefined = value !== undefined,\n valIsNull = value === null,\n valIsReflexive = value === value,\n valIsSymbol = isSymbol(value);\n\n var othIsDefined = other !== undefined,\n othIsNull = other === null,\n othIsReflexive = other === other,\n othIsSymbol = isSymbol(other);\n\n if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) ||\n (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) ||\n (valIsNull && othIsDefined && othIsReflexive) ||\n (!valIsDefined && othIsReflexive) ||\n !valIsReflexive) {\n return 1;\n }\n if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) ||\n (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) ||\n (othIsNull && valIsDefined && valIsReflexive) ||\n (!othIsDefined && valIsReflexive) ||\n !othIsReflexive) {\n return -1;\n }\n }\n return 0;\n }\n\n /**\n * Used by `_.orderBy` to compare multiple properties of a value to another\n * and stable sort them.\n *\n * If `orders` is unspecified, all values are sorted in ascending order. Otherwise,\n * specify an order of \"desc\" for descending or \"asc\" for ascending sort order\n * of corresponding values.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {boolean[]|string[]} orders The order to sort by for each property.\n * @returns {number} Returns the sort order indicator for `object`.\n */\n function compareMultiple(object, other, orders) {\n var index = -1,\n objCriteria = object.criteria,\n othCriteria = other.criteria,\n length = objCriteria.length,\n ordersLength = orders.length;\n\n while (++index < length) {\n var result = compareAscending(objCriteria[index], othCriteria[index]);\n if (result) {\n if (index >= ordersLength) {\n return result;\n }\n var order = orders[index];\n return result * (order == 'desc' ? -1 : 1);\n }\n }\n // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications\n // that causes it, under certain circumstances, to provide the same value for\n // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247\n // for more details.\n //\n // This also ensures a stable sort in V8 and other engines.\n // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details.\n return object.index - other.index;\n }\n\n /**\n * Creates an array that is the composition of partially applied arguments,\n * placeholders, and provided arguments into a single array of arguments.\n *\n * @private\n * @param {Array} args The provided arguments.\n * @param {Array} partials The arguments to prepend to those provided.\n * @param {Array} holders The `partials` placeholder indexes.\n * @params {boolean} [isCurried] Specify composing for a curried function.\n * @returns {Array} Returns the new array of composed arguments.\n */\n function composeArgs(args, partials, holders, isCurried) {\n var argsIndex = -1,\n argsLength = args.length,\n holdersLength = holders.length,\n leftIndex = -1,\n leftLength = partials.length,\n rangeLength = nativeMax(argsLength - holdersLength, 0),\n result = Array(leftLength + rangeLength),\n isUncurried = !isCurried;\n\n while (++leftIndex < leftLength) {\n result[leftIndex] = partials[leftIndex];\n }\n while (++argsIndex < holdersLength) {\n if (isUncurried || argsIndex < argsLength) {\n result[holders[argsIndex]] = args[argsIndex];\n }\n }\n while (rangeLength--) {\n result[leftIndex++] = args[argsIndex++];\n }\n return result;\n }\n\n /**\n * This function is like `composeArgs` except that the arguments composition\n * is tailored for `_.partialRight`.\n *\n * @private\n * @param {Array} args The provided arguments.\n * @param {Array} partials The arguments to append to those provided.\n * @param {Array} holders The `partials` placeholder indexes.\n * @params {boolean} [isCurried] Specify composing for a curried function.\n * @returns {Array} Returns the new array of composed arguments.\n */\n function composeArgsRight(args, partials, holders, isCurried) {\n var argsIndex = -1,\n argsLength = args.length,\n holdersIndex = -1,\n holdersLength = holders.length,\n rightIndex = -1,\n rightLength = partials.length,\n rangeLength = nativeMax(argsLength - holdersLength, 0),\n result = Array(rangeLength + rightLength),\n isUncurried = !isCurried;\n\n while (++argsIndex < rangeLength) {\n result[argsIndex] = args[argsIndex];\n }\n var offset = argsIndex;\n while (++rightIndex < rightLength) {\n result[offset + rightIndex] = partials[rightIndex];\n }\n while (++holdersIndex < holdersLength) {\n if (isUncurried || argsIndex < argsLength) {\n result[offset + holders[holdersIndex]] = args[argsIndex++];\n }\n }\n return result;\n }\n\n /**\n * Copies the values of `source` to `array`.\n *\n * @private\n * @param {Array} source The array to copy values from.\n * @param {Array} [array=[]] The array to copy values to.\n * @returns {Array} Returns `array`.\n */\n function copyArray(source, array) {\n var index = -1,\n length = source.length;\n\n array || (array = Array(length));\n while (++index < length) {\n array[index] = source[index];\n }\n return array;\n }\n\n /**\n * Copies properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy properties from.\n * @param {Array} props The property identifiers to copy.\n * @param {Object} [object={}] The object to copy properties to.\n * @param {Function} [customizer] The function to customize copied values.\n * @returns {Object} Returns `object`.\n */\n function copyObject(source, props, object, customizer) {\n var isNew = !object;\n object || (object = {});\n\n var index = -1,\n length = props.length;\n\n while (++index < length) {\n var key = props[index];\n\n var newValue = customizer\n ? customizer(object[key], source[key], key, object, source)\n : undefined;\n\n if (newValue === undefined) {\n newValue = source[key];\n }\n if (isNew) {\n baseAssignValue(object, key, newValue);\n } else {\n assignValue(object, key, newValue);\n }\n }\n return object;\n }\n\n /**\n * Copies own symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\n function copySymbols(source, object) {\n return copyObject(source, getSymbols(source), object);\n }\n\n /**\n * Copies own and inherited symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\n function copySymbolsIn(source, object) {\n return copyObject(source, getSymbolsIn(source), object);\n }\n\n /**\n * Creates a function like `_.groupBy`.\n *\n * @private\n * @param {Function} setter The function to set accumulator values.\n * @param {Function} [initializer] The accumulator object initializer.\n * @returns {Function} Returns the new aggregator function.\n */\n function createAggregator(setter, initializer) {\n return function(collection, iteratee) {\n var func = isArray(collection) ? arrayAggregator : baseAggregator,\n accumulator = initializer ? initializer() : {};\n\n return func(collection, setter, getIteratee(iteratee, 2), accumulator);\n };\n }\n\n /**\n * Creates a function like `_.assign`.\n *\n * @private\n * @param {Function} assigner The function to assign values.\n * @returns {Function} Returns the new assigner function.\n */\n function createAssigner(assigner) {\n return baseRest(function(object, sources) {\n var index = -1,\n length = sources.length,\n customizer = length > 1 ? sources[length - 1] : undefined,\n guard = length > 2 ? sources[2] : undefined;\n\n customizer = (assigner.length > 3 && typeof customizer == 'function')\n ? (length--, customizer)\n : undefined;\n\n if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n customizer = length < 3 ? undefined : customizer;\n length = 1;\n }\n object = Object(object);\n while (++index < length) {\n var source = sources[index];\n if (source) {\n assigner(object, source, index, customizer);\n }\n }\n return object;\n });\n }\n\n /**\n * Creates a `baseEach` or `baseEachRight` function.\n *\n * @private\n * @param {Function} eachFunc The function to iterate over a collection.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\n function createBaseEach(eachFunc, fromRight) {\n return function(collection, iteratee) {\n if (collection == null) {\n return collection;\n }\n if (!isArrayLike(collection)) {\n return eachFunc(collection, iteratee);\n }\n var length = collection.length,\n index = fromRight ? length : -1,\n iterable = Object(collection);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (iteratee(iterable[index], index, iterable) === false) {\n break;\n }\n }\n return collection;\n };\n }\n\n /**\n * Creates a base function for methods like `_.forIn` and `_.forOwn`.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\n function createBaseFor(fromRight) {\n return function(object, iteratee, keysFunc) {\n var index = -1,\n iterable = Object(object),\n props = keysFunc(object),\n length = props.length;\n\n while (length--) {\n var key = props[fromRight ? length : ++index];\n if (iteratee(iterable[key], key, iterable) === false) {\n break;\n }\n }\n return object;\n };\n }\n\n /**\n * Creates a function that wraps `func` to invoke it with the optional `this`\n * binding of `thisArg`.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {*} [thisArg] The `this` binding of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createBind(func, bitmask, thisArg) {\n var isBind = bitmask & WRAP_BIND_FLAG,\n Ctor = createCtor(func);\n\n function wrapper() {\n var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n return fn.apply(isBind ? thisArg : this, arguments);\n }\n return wrapper;\n }\n\n /**\n * Creates a function like `_.lowerFirst`.\n *\n * @private\n * @param {string} methodName The name of the `String` case method to use.\n * @returns {Function} Returns the new case function.\n */\n function createCaseFirst(methodName) {\n return function(string) {\n string = toString(string);\n\n var strSymbols = hasUnicode(string)\n ? stringToArray(string)\n : undefined;\n\n var chr = strSymbols\n ? strSymbols[0]\n : string.charAt(0);\n\n var trailing = strSymbols\n ? castSlice(strSymbols, 1).join('')\n : string.slice(1);\n\n return chr[methodName]() + trailing;\n };\n }\n\n /**\n * Creates a function like `_.camelCase`.\n *\n * @private\n * @param {Function} callback The function to combine each word.\n * @returns {Function} Returns the new compounder function.\n */\n function createCompounder(callback) {\n return function(string) {\n return arrayReduce(words(deburr(string).replace(reApos, '')), callback, '');\n };\n }\n\n /**\n * Creates a function that produces an instance of `Ctor` regardless of\n * whether it was invoked as part of a `new` expression or by `call` or `apply`.\n *\n * @private\n * @param {Function} Ctor The constructor to wrap.\n * @returns {Function} Returns the new wrapped function.\n */\n function createCtor(Ctor) {\n return function() {\n // Use a `switch` statement to work with class constructors. See\n // http://ecma-international.org/ecma-262/7.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist\n // for more details.\n var args = arguments;\n switch (args.length) {\n case 0: return new Ctor;\n case 1: return new Ctor(args[0]);\n case 2: return new Ctor(args[0], args[1]);\n case 3: return new Ctor(args[0], args[1], args[2]);\n case 4: return new Ctor(args[0], args[1], args[2], args[3]);\n case 5: return new Ctor(args[0], args[1], args[2], args[3], args[4]);\n case 6: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5]);\n case 7: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5], args[6]);\n }\n var thisBinding = baseCreate(Ctor.prototype),\n result = Ctor.apply(thisBinding, args);\n\n // Mimic the constructor's `return` behavior.\n // See https://es5.github.io/#x13.2.2 for more details.\n return isObject(result) ? result : thisBinding;\n };\n }\n\n /**\n * Creates a function that wraps `func` to enable currying.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {number} arity The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createCurry(func, bitmask, arity) {\n var Ctor = createCtor(func);\n\n function wrapper() {\n var length = arguments.length,\n args = Array(length),\n index = length,\n placeholder = getHolder(wrapper);\n\n while (index--) {\n args[index] = arguments[index];\n }\n var holders = (length < 3 && args[0] !== placeholder && args[length - 1] !== placeholder)\n ? []\n : replaceHolders(args, placeholder);\n\n length -= holders.length;\n if (length < arity) {\n return createRecurry(\n func, bitmask, createHybrid, wrapper.placeholder, undefined,\n args, holders, undefined, undefined, arity - length);\n }\n var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n return apply(fn, this, args);\n }\n return wrapper;\n }\n\n /**\n * Creates a `_.find` or `_.findLast` function.\n *\n * @private\n * @param {Function} findIndexFunc The function to find the collection index.\n * @returns {Function} Returns the new find function.\n */\n function createFind(findIndexFunc) {\n return function(collection, predicate, fromIndex) {\n var iterable = Object(collection);\n if (!isArrayLike(collection)) {\n var iteratee = getIteratee(predicate, 3);\n collection = keys(collection);\n predicate = function(key) { return iteratee(iterable[key], key, iterable); };\n }\n var index = findIndexFunc(collection, predicate, fromIndex);\n return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined;\n };\n }\n\n /**\n * Creates a `_.flow` or `_.flowRight` function.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new flow function.\n */\n function createFlow(fromRight) {\n return flatRest(function(funcs) {\n var length = funcs.length,\n index = length,\n prereq = LodashWrapper.prototype.thru;\n\n if (fromRight) {\n funcs.reverse();\n }\n while (index--) {\n var func = funcs[index];\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n if (prereq && !wrapper && getFuncName(func) == 'wrapper') {\n var wrapper = new LodashWrapper([], true);\n }\n }\n index = wrapper ? index : length;\n while (++index < length) {\n func = funcs[index];\n\n var funcName = getFuncName(func),\n data = funcName == 'wrapper' ? getData(func) : undefined;\n\n if (data && isLaziable(data[0]) &&\n data[1] == (WRAP_ARY_FLAG | WRAP_CURRY_FLAG | WRAP_PARTIAL_FLAG | WRAP_REARG_FLAG) &&\n !data[4].length && data[9] == 1\n ) {\n wrapper = wrapper[getFuncName(data[0])].apply(wrapper, data[3]);\n } else {\n wrapper = (func.length == 1 && isLaziable(func))\n ? wrapper[funcName]()\n : wrapper.thru(func);\n }\n }\n return function() {\n var args = arguments,\n value = args[0];\n\n if (wrapper && args.length == 1 && isArray(value)) {\n return wrapper.plant(value).value();\n }\n var index = 0,\n result = length ? funcs[index].apply(this, args) : value;\n\n while (++index < length) {\n result = funcs[index].call(this, result);\n }\n return result;\n };\n });\n }\n\n /**\n * Creates a function that wraps `func` to invoke it with optional `this`\n * binding of `thisArg`, partial application, and currying.\n *\n * @private\n * @param {Function|string} func The function or method name to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {*} [thisArg] The `this` binding of `func`.\n * @param {Array} [partials] The arguments to prepend to those provided to\n * the new function.\n * @param {Array} [holders] The `partials` placeholder indexes.\n * @param {Array} [partialsRight] The arguments to append to those provided\n * to the new function.\n * @param {Array} [holdersRight] The `partialsRight` placeholder indexes.\n * @param {Array} [argPos] The argument positions of the new function.\n * @param {number} [ary] The arity cap of `func`.\n * @param {number} [arity] The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createHybrid(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) {\n var isAry = bitmask & WRAP_ARY_FLAG,\n isBind = bitmask & WRAP_BIND_FLAG,\n isBindKey = bitmask & WRAP_BIND_KEY_FLAG,\n isCurried = bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG),\n isFlip = bitmask & WRAP_FLIP_FLAG,\n Ctor = isBindKey ? undefined : createCtor(func);\n\n function wrapper() {\n var length = arguments.length,\n args = Array(length),\n index = length;\n\n while (index--) {\n args[index] = arguments[index];\n }\n if (isCurried) {\n var placeholder = getHolder(wrapper),\n holdersCount = countHolders(args, placeholder);\n }\n if (partials) {\n args = composeArgs(args, partials, holders, isCurried);\n }\n if (partialsRight) {\n args = composeArgsRight(args, partialsRight, holdersRight, isCurried);\n }\n length -= holdersCount;\n if (isCurried && length < arity) {\n var newHolders = replaceHolders(args, placeholder);\n return createRecurry(\n func, bitmask, createHybrid, wrapper.placeholder, thisArg,\n args, newHolders, argPos, ary, arity - length\n );\n }\n var thisBinding = isBind ? thisArg : this,\n fn = isBindKey ? thisBinding[func] : func;\n\n length = args.length;\n if (argPos) {\n args = reorder(args, argPos);\n } else if (isFlip && length > 1) {\n args.reverse();\n }\n if (isAry && ary < length) {\n args.length = ary;\n }\n if (this && this !== root && this instanceof wrapper) {\n fn = Ctor || createCtor(fn);\n }\n return fn.apply(thisBinding, args);\n }\n return wrapper;\n }\n\n /**\n * Creates a function like `_.invertBy`.\n *\n * @private\n * @param {Function} setter The function to set accumulator values.\n * @param {Function} toIteratee The function to resolve iteratees.\n * @returns {Function} Returns the new inverter function.\n */\n function createInverter(setter, toIteratee) {\n return function(object, iteratee) {\n return baseInverter(object, setter, toIteratee(iteratee), {});\n };\n }\n\n /**\n * Creates a function that performs a mathematical operation on two values.\n *\n * @private\n * @param {Function} operator The function to perform the operation.\n * @param {number} [defaultValue] The value used for `undefined` arguments.\n * @returns {Function} Returns the new mathematical operation function.\n */\n function createMathOperation(operator, defaultValue) {\n return function(value, other) {\n var result;\n if (value === undefined && other === undefined) {\n return defaultValue;\n }\n if (value !== undefined) {\n result = value;\n }\n if (other !== undefined) {\n if (result === undefined) {\n return other;\n }\n if (typeof value == 'string' || typeof other == 'string') {\n value = baseToString(value);\n other = baseToString(other);\n } else {\n value = baseToNumber(value);\n other = baseToNumber(other);\n }\n result = operator(value, other);\n }\n return result;\n };\n }\n\n /**\n * Creates a function like `_.over`.\n *\n * @private\n * @param {Function} arrayFunc The function to iterate over iteratees.\n * @returns {Function} Returns the new over function.\n */\n function createOver(arrayFunc) {\n return flatRest(function(iteratees) {\n iteratees = arrayMap(iteratees, baseUnary(getIteratee()));\n return baseRest(function(args) {\n var thisArg = this;\n return arrayFunc(iteratees, function(iteratee) {\n return apply(iteratee, thisArg, args);\n });\n });\n });\n }\n\n /**\n * Creates the padding for `string` based on `length`. The `chars` string\n * is truncated if the number of characters exceeds `length`.\n *\n * @private\n * @param {number} length The padding length.\n * @param {string} [chars=' '] The string used as padding.\n * @returns {string} Returns the padding for `string`.\n */\n function createPadding(length, chars) {\n chars = chars === undefined ? ' ' : baseToString(chars);\n\n var charsLength = chars.length;\n if (charsLength < 2) {\n return charsLength ? baseRepeat(chars, length) : chars;\n }\n var result = baseRepeat(chars, nativeCeil(length / stringSize(chars)));\n return hasUnicode(chars)\n ? castSlice(stringToArray(result), 0, length).join('')\n : result.slice(0, length);\n }\n\n /**\n * Creates a function that wraps `func` to invoke it with the `this` binding\n * of `thisArg` and `partials` prepended to the arguments it receives.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} partials The arguments to prepend to those provided to\n * the new function.\n * @returns {Function} Returns the new wrapped function.\n */\n function createPartial(func, bitmask, thisArg, partials) {\n var isBind = bitmask & WRAP_BIND_FLAG,\n Ctor = createCtor(func);\n\n function wrapper() {\n var argsIndex = -1,\n argsLength = arguments.length,\n leftIndex = -1,\n leftLength = partials.length,\n args = Array(leftLength + argsLength),\n fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n\n while (++leftIndex < leftLength) {\n args[leftIndex] = partials[leftIndex];\n }\n while (argsLength--) {\n args[leftIndex++] = arguments[++argsIndex];\n }\n return apply(fn, isBind ? thisArg : this, args);\n }\n return wrapper;\n }\n\n /**\n * Creates a `_.range` or `_.rangeRight` function.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new range function.\n */\n function createRange(fromRight) {\n return function(start, end, step) {\n if (step && typeof step != 'number' && isIterateeCall(start, end, step)) {\n end = step = undefined;\n }\n // Ensure the sign of `-0` is preserved.\n start = toFinite(start);\n if (end === undefined) {\n end = start;\n start = 0;\n } else {\n end = toFinite(end);\n }\n step = step === undefined ? (start < end ? 1 : -1) : toFinite(step);\n return baseRange(start, end, step, fromRight);\n };\n }\n\n /**\n * Creates a function that performs a relational operation on two values.\n *\n * @private\n * @param {Function} operator The function to perform the operation.\n * @returns {Function} Returns the new relational operation function.\n */\n function createRelationalOperation(operator) {\n return function(value, other) {\n if (!(typeof value == 'string' && typeof other == 'string')) {\n value = toNumber(value);\n other = toNumber(other);\n }\n return operator(value, other);\n };\n }\n\n /**\n * Creates a function that wraps `func` to continue currying.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {Function} wrapFunc The function to create the `func` wrapper.\n * @param {*} placeholder The placeholder value.\n * @param {*} [thisArg] The `this` binding of `func`.\n * @param {Array} [partials] The arguments to prepend to those provided to\n * the new function.\n * @param {Array} [holders] The `partials` placeholder indexes.\n * @param {Array} [argPos] The argument positions of the new function.\n * @param {number} [ary] The arity cap of `func`.\n * @param {number} [arity] The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createRecurry(func, bitmask, wrapFunc, placeholder, thisArg, partials, holders, argPos, ary, arity) {\n var isCurry = bitmask & WRAP_CURRY_FLAG,\n newHolders = isCurry ? holders : undefined,\n newHoldersRight = isCurry ? undefined : holders,\n newPartials = isCurry ? partials : undefined,\n newPartialsRight = isCurry ? undefined : partials;\n\n bitmask |= (isCurry ? WRAP_PARTIAL_FLAG : WRAP_PARTIAL_RIGHT_FLAG);\n bitmask &= ~(isCurry ? WRAP_PARTIAL_RIGHT_FLAG : WRAP_PARTIAL_FLAG);\n\n if (!(bitmask & WRAP_CURRY_BOUND_FLAG)) {\n bitmask &= ~(WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG);\n }\n var newData = [\n func, bitmask, thisArg, newPartials, newHolders, newPartialsRight,\n newHoldersRight, argPos, ary, arity\n ];\n\n var result = wrapFunc.apply(undefined, newData);\n if (isLaziable(func)) {\n setData(result, newData);\n }\n result.placeholder = placeholder;\n return setWrapToString(result, func, bitmask);\n }\n\n /**\n * Creates a function like `_.round`.\n *\n * @private\n * @param {string} methodName The name of the `Math` method to use when rounding.\n * @returns {Function} Returns the new round function.\n */\n function createRound(methodName) {\n var func = Math[methodName];\n return function(number, precision) {\n number = toNumber(number);\n precision = precision == null ? 0 : nativeMin(toInteger(precision), 292);\n if (precision && nativeIsFinite(number)) {\n // Shift with exponential notation to avoid floating-point issues.\n // See [MDN](https://mdn.io/round#Examples) for more details.\n var pair = (toString(number) + 'e').split('e'),\n value = func(pair[0] + 'e' + (+pair[1] + precision));\n\n pair = (toString(value) + 'e').split('e');\n return +(pair[0] + 'e' + (+pair[1] - precision));\n }\n return func(number);\n };\n }\n\n /**\n * Creates a set object of `values`.\n *\n * @private\n * @param {Array} values The values to add to the set.\n * @returns {Object} Returns the new set.\n */\n var createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) {\n return new Set(values);\n };\n\n /**\n * Creates a `_.toPairs` or `_.toPairsIn` function.\n *\n * @private\n * @param {Function} keysFunc The function to get the keys of a given object.\n * @returns {Function} Returns the new pairs function.\n */\n function createToPairs(keysFunc) {\n return function(object) {\n var tag = getTag(object);\n if (tag == mapTag) {\n return mapToArray(object);\n }\n if (tag == setTag) {\n return setToPairs(object);\n }\n return baseToPairs(object, keysFunc(object));\n };\n }\n\n /**\n * Creates a function that either curries or invokes `func` with optional\n * `this` binding and partially applied arguments.\n *\n * @private\n * @param {Function|string} func The function or method name to wrap.\n * @param {number} bitmask The bitmask flags.\n * 1 - `_.bind`\n * 2 - `_.bindKey`\n * 4 - `_.curry` or `_.curryRight` of a bound function\n * 8 - `_.curry`\n * 16 - `_.curryRight`\n * 32 - `_.partial`\n * 64 - `_.partialRight`\n * 128 - `_.rearg`\n * 256 - `_.ary`\n * 512 - `_.flip`\n * @param {*} [thisArg] The `this` binding of `func`.\n * @param {Array} [partials] The arguments to be partially applied.\n * @param {Array} [holders] The `partials` placeholder indexes.\n * @param {Array} [argPos] The argument positions of the new function.\n * @param {number} [ary] The arity cap of `func`.\n * @param {number} [arity] The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createWrap(func, bitmask, thisArg, partials, holders, argPos, ary, arity) {\n var isBindKey = bitmask & WRAP_BIND_KEY_FLAG;\n if (!isBindKey && typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n var length = partials ? partials.length : 0;\n if (!length) {\n bitmask &= ~(WRAP_PARTIAL_FLAG | WRAP_PARTIAL_RIGHT_FLAG);\n partials = holders = undefined;\n }\n ary = ary === undefined ? ary : nativeMax(toInteger(ary), 0);\n arity = arity === undefined ? arity : toInteger(arity);\n length -= holders ? holders.length : 0;\n\n if (bitmask & WRAP_PARTIAL_RIGHT_FLAG) {\n var partialsRight = partials,\n holdersRight = holders;\n\n partials = holders = undefined;\n }\n var data = isBindKey ? undefined : getData(func);\n\n var newData = [\n func, bitmask, thisArg, partials, holders, partialsRight, holdersRight,\n argPos, ary, arity\n ];\n\n if (data) {\n mergeData(newData, data);\n }\n func = newData[0];\n bitmask = newData[1];\n thisArg = newData[2];\n partials = newData[3];\n holders = newData[4];\n arity = newData[9] = newData[9] === undefined\n ? (isBindKey ? 0 : func.length)\n : nativeMax(newData[9] - length, 0);\n\n if (!arity && bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG)) {\n bitmask &= ~(WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG);\n }\n if (!bitmask || bitmask == WRAP_BIND_FLAG) {\n var result = createBind(func, bitmask, thisArg);\n } else if (bitmask == WRAP_CURRY_FLAG || bitmask == WRAP_CURRY_RIGHT_FLAG) {\n result = createCurry(func, bitmask, arity);\n } else if ((bitmask == WRAP_PARTIAL_FLAG || bitmask == (WRAP_BIND_FLAG | WRAP_PARTIAL_FLAG)) && !holders.length) {\n result = createPartial(func, bitmask, thisArg, partials);\n } else {\n result = createHybrid.apply(undefined, newData);\n }\n var setter = data ? baseSetData : setData;\n return setWrapToString(setter(result, newData), func, bitmask);\n }\n\n /**\n * Used by `_.defaults` to customize its `_.assignIn` use to assign properties\n * of source objects to the destination object for all destination properties\n * that resolve to `undefined`.\n *\n * @private\n * @param {*} objValue The destination value.\n * @param {*} srcValue The source value.\n * @param {string} key The key of the property to assign.\n * @param {Object} object The parent object of `objValue`.\n * @returns {*} Returns the value to assign.\n */\n function customDefaultsAssignIn(objValue, srcValue, key, object) {\n if (objValue === undefined ||\n (eq(objValue, objectProto[key]) && !hasOwnProperty.call(object, key))) {\n return srcValue;\n }\n return objValue;\n }\n\n /**\n * Used by `_.defaultsDeep` to customize its `_.merge` use to merge source\n * objects into destination objects that are passed thru.\n *\n * @private\n * @param {*} objValue The destination value.\n * @param {*} srcValue The source value.\n * @param {string} key The key of the property to merge.\n * @param {Object} object The parent object of `objValue`.\n * @param {Object} source The parent object of `srcValue`.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n * @returns {*} Returns the value to assign.\n */\n function customDefaultsMerge(objValue, srcValue, key, object, source, stack) {\n if (isObject(objValue) && isObject(srcValue)) {\n // Recursively merge objects and arrays (susceptible to call stack limits).\n stack.set(srcValue, objValue);\n baseMerge(objValue, srcValue, undefined, customDefaultsMerge, stack);\n stack['delete'](srcValue);\n }\n return objValue;\n }\n\n /**\n * Used by `_.omit` to customize its `_.cloneDeep` use to only clone plain\n * objects.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {string} key The key of the property to inspect.\n * @returns {*} Returns the uncloned value or `undefined` to defer cloning to `_.cloneDeep`.\n */\n function customOmitClone(value) {\n return isPlainObject(value) ? undefined : value;\n }\n\n /**\n * A specialized version of `baseIsEqualDeep` for arrays with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Array} array The array to compare.\n * @param {Array} other The other array to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `array` and `other` objects.\n * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n */\n function equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n arrLength = array.length,\n othLength = other.length;\n\n if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n return false;\n }\n // Check that cyclic values are equal.\n var arrStacked = stack.get(array);\n var othStacked = stack.get(other);\n if (arrStacked && othStacked) {\n return arrStacked == other && othStacked == array;\n }\n var index = -1,\n result = true,\n seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;\n\n stack.set(array, other);\n stack.set(other, array);\n\n // Ignore non-index properties.\n while (++index < arrLength) {\n var arrValue = array[index],\n othValue = other[index];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, arrValue, index, other, array, stack)\n : customizer(arrValue, othValue, index, array, other, stack);\n }\n if (compared !== undefined) {\n if (compared) {\n continue;\n }\n result = false;\n break;\n }\n // Recursively compare arrays (susceptible to call stack limits).\n if (seen) {\n if (!arraySome(other, function(othValue, othIndex) {\n if (!cacheHas(seen, othIndex) &&\n (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n return seen.push(othIndex);\n }\n })) {\n result = false;\n break;\n }\n } else if (!(\n arrValue === othValue ||\n equalFunc(arrValue, othValue, bitmask, customizer, stack)\n )) {\n result = false;\n break;\n }\n }\n stack['delete'](array);\n stack['delete'](other);\n return result;\n }\n\n /**\n * A specialized version of `baseIsEqualDeep` for comparing objects of\n * the same `toStringTag`.\n *\n * **Note:** This function only supports comparing values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {string} tag The `toStringTag` of the objects to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\n function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n switch (tag) {\n case dataViewTag:\n if ((object.byteLength != other.byteLength) ||\n (object.byteOffset != other.byteOffset)) {\n return false;\n }\n object = object.buffer;\n other = other.buffer;\n\n case arrayBufferTag:\n if ((object.byteLength != other.byteLength) ||\n !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n return false;\n }\n return true;\n\n case boolTag:\n case dateTag:\n case numberTag:\n // Coerce booleans to `1` or `0` and dates to milliseconds.\n // Invalid dates are coerced to `NaN`.\n return eq(+object, +other);\n\n case errorTag:\n return object.name == other.name && object.message == other.message;\n\n case regexpTag:\n case stringTag:\n // Coerce regexes to strings and treat strings, primitives and objects,\n // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n // for more details.\n return object == (other + '');\n\n case mapTag:\n var convert = mapToArray;\n\n case setTag:\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG;\n convert || (convert = setToArray);\n\n if (object.size != other.size && !isPartial) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked) {\n return stacked == other;\n }\n bitmask |= COMPARE_UNORDERED_FLAG;\n\n // Recursively compare objects (susceptible to call stack limits).\n stack.set(object, other);\n var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n stack['delete'](object);\n return result;\n\n case symbolTag:\n if (symbolValueOf) {\n return symbolValueOf.call(object) == symbolValueOf.call(other);\n }\n }\n return false;\n }\n\n /**\n * A specialized version of `baseIsEqualDeep` for objects with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\n function equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n objProps = getAllKeys(object),\n objLength = objProps.length,\n othProps = getAllKeys(other),\n othLength = othProps.length;\n\n if (objLength != othLength && !isPartial) {\n return false;\n }\n var index = objLength;\n while (index--) {\n var key = objProps[index];\n if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n return false;\n }\n }\n // Check that cyclic values are equal.\n var objStacked = stack.get(object);\n var othStacked = stack.get(other);\n if (objStacked && othStacked) {\n return objStacked == other && othStacked == object;\n }\n var result = true;\n stack.set(object, other);\n stack.set(other, object);\n\n var skipCtor = isPartial;\n while (++index < objLength) {\n key = objProps[index];\n var objValue = object[key],\n othValue = other[key];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, objValue, key, other, object, stack)\n : customizer(objValue, othValue, key, object, other, stack);\n }\n // Recursively compare objects (susceptible to call stack limits).\n if (!(compared === undefined\n ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))\n : compared\n )) {\n result = false;\n break;\n }\n skipCtor || (skipCtor = key == 'constructor');\n }\n if (result && !skipCtor) {\n var objCtor = object.constructor,\n othCtor = other.constructor;\n\n // Non `Object` object instances with different constructors are not equal.\n if (objCtor != othCtor &&\n ('constructor' in object && 'constructor' in other) &&\n !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n result = false;\n }\n }\n stack['delete'](object);\n stack['delete'](other);\n return result;\n }\n\n /**\n * A specialized version of `baseRest` which flattens the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @returns {Function} Returns the new function.\n */\n function flatRest(func) {\n return setToString(overRest(func, undefined, flatten), func + '');\n }\n\n /**\n * Creates an array of own enumerable property names and symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\n function getAllKeys(object) {\n return baseGetAllKeys(object, keys, getSymbols);\n }\n\n /**\n * Creates an array of own and inherited enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\n function getAllKeysIn(object) {\n return baseGetAllKeys(object, keysIn, getSymbolsIn);\n }\n\n /**\n * Gets metadata for `func`.\n *\n * @private\n * @param {Function} func The function to query.\n * @returns {*} Returns the metadata for `func`.\n */\n var getData = !metaMap ? noop : function(func) {\n return metaMap.get(func);\n };\n\n /**\n * Gets the name of `func`.\n *\n * @private\n * @param {Function} func The function to query.\n * @returns {string} Returns the function name.\n */\n function getFuncName(func) {\n var result = (func.name + ''),\n array = realNames[result],\n length = hasOwnProperty.call(realNames, result) ? array.length : 0;\n\n while (length--) {\n var data = array[length],\n otherFunc = data.func;\n if (otherFunc == null || otherFunc == func) {\n return data.name;\n }\n }\n return result;\n }\n\n /**\n * Gets the argument placeholder value for `func`.\n *\n * @private\n * @param {Function} func The function to inspect.\n * @returns {*} Returns the placeholder value.\n */\n function getHolder(func) {\n var object = hasOwnProperty.call(lodash, 'placeholder') ? lodash : func;\n return object.placeholder;\n }\n\n /**\n * Gets the appropriate \"iteratee\" function. If `_.iteratee` is customized,\n * this function returns the custom method, otherwise it returns `baseIteratee`.\n * If arguments are provided, the chosen function is invoked with them and\n * its result is returned.\n *\n * @private\n * @param {*} [value] The value to convert to an iteratee.\n * @param {number} [arity] The arity of the created iteratee.\n * @returns {Function} Returns the chosen function or its result.\n */\n function getIteratee() {\n var result = lodash.iteratee || iteratee;\n result = result === iteratee ? baseIteratee : result;\n return arguments.length ? result(arguments[0], arguments[1]) : result;\n }\n\n /**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\n function getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n }\n\n /**\n * Gets the property names, values, and compare flags of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the match data of `object`.\n */\n function getMatchData(object) {\n var result = keys(object),\n length = result.length;\n\n while (length--) {\n var key = result[length],\n value = object[key];\n\n result[length] = [key, value, isStrictComparable(value)];\n }\n return result;\n }\n\n /**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\n function getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n }\n\n /**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\n function getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n }\n\n /**\n * Creates an array of the own enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\n var getSymbols = !nativeGetSymbols ? stubArray : function(object) {\n if (object == null) {\n return [];\n }\n object = Object(object);\n return arrayFilter(nativeGetSymbols(object), function(symbol) {\n return propertyIsEnumerable.call(object, symbol);\n });\n };\n\n /**\n * Creates an array of the own and inherited enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\n var getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) {\n var result = [];\n while (object) {\n arrayPush(result, getSymbols(object));\n object = getPrototype(object);\n }\n return result;\n };\n\n /**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\n var getTag = baseGetTag;\n\n // Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\n if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n (Map && getTag(new Map) != mapTag) ||\n (Promise && getTag(Promise.resolve()) != promiseTag) ||\n (Set && getTag(new Set) != setTag) ||\n (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n getTag = function(value) {\n var result = baseGetTag(value),\n Ctor = result == objectTag ? value.constructor : undefined,\n ctorString = Ctor ? toSource(Ctor) : '';\n\n if (ctorString) {\n switch (ctorString) {\n case dataViewCtorString: return dataViewTag;\n case mapCtorString: return mapTag;\n case promiseCtorString: return promiseTag;\n case setCtorString: return setTag;\n case weakMapCtorString: return weakMapTag;\n }\n }\n return result;\n };\n }\n\n /**\n * Gets the view, applying any `transforms` to the `start` and `end` positions.\n *\n * @private\n * @param {number} start The start of the view.\n * @param {number} end The end of the view.\n * @param {Array} transforms The transformations to apply to the view.\n * @returns {Object} Returns an object containing the `start` and `end`\n * positions of the view.\n */\n function getView(start, end, transforms) {\n var index = -1,\n length = transforms.length;\n\n while (++index < length) {\n var data = transforms[index],\n size = data.size;\n\n switch (data.type) {\n case 'drop': start += size; break;\n case 'dropRight': end -= size; break;\n case 'take': end = nativeMin(end, start + size); break;\n case 'takeRight': start = nativeMax(start, end - size); break;\n }\n }\n return { 'start': start, 'end': end };\n }\n\n /**\n * Extracts wrapper details from the `source` body comment.\n *\n * @private\n * @param {string} source The source to inspect.\n * @returns {Array} Returns the wrapper details.\n */\n function getWrapDetails(source) {\n var match = source.match(reWrapDetails);\n return match ? match[1].split(reSplitDetails) : [];\n }\n\n /**\n * Checks if `path` exists on `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @param {Function} hasFunc The function to check properties.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n */\n function hasPath(object, path, hasFunc) {\n path = castPath(path, object);\n\n var index = -1,\n length = path.length,\n result = false;\n\n while (++index < length) {\n var key = toKey(path[index]);\n if (!(result = object != null && hasFunc(object, key))) {\n break;\n }\n object = object[key];\n }\n if (result || ++index != length) {\n return result;\n }\n length = object == null ? 0 : object.length;\n return !!length && isLength(length) && isIndex(key, length) &&\n (isArray(object) || isArguments(object));\n }\n\n /**\n * Initializes an array clone.\n *\n * @private\n * @param {Array} array The array to clone.\n * @returns {Array} Returns the initialized clone.\n */\n function initCloneArray(array) {\n var length = array.length,\n result = new array.constructor(length);\n\n // Add properties assigned by `RegExp#exec`.\n if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {\n result.index = array.index;\n result.input = array.input;\n }\n return result;\n }\n\n /**\n * Initializes an object clone.\n *\n * @private\n * @param {Object} object The object to clone.\n * @returns {Object} Returns the initialized clone.\n */\n function initCloneObject(object) {\n return (typeof object.constructor == 'function' && !isPrototype(object))\n ? baseCreate(getPrototype(object))\n : {};\n }\n\n /**\n * Initializes an object clone based on its `toStringTag`.\n *\n * **Note:** This function only supports cloning values with tags of\n * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`.\n *\n * @private\n * @param {Object} object The object to clone.\n * @param {string} tag The `toStringTag` of the object to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the initialized clone.\n */\n function initCloneByTag(object, tag, isDeep) {\n var Ctor = object.constructor;\n switch (tag) {\n case arrayBufferTag:\n return cloneArrayBuffer(object);\n\n case boolTag:\n case dateTag:\n return new Ctor(+object);\n\n case dataViewTag:\n return cloneDataView(object, isDeep);\n\n case float32Tag: case float64Tag:\n case int8Tag: case int16Tag: case int32Tag:\n case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:\n return cloneTypedArray(object, isDeep);\n\n case mapTag:\n return new Ctor;\n\n case numberTag:\n case stringTag:\n return new Ctor(object);\n\n case regexpTag:\n return cloneRegExp(object);\n\n case setTag:\n return new Ctor;\n\n case symbolTag:\n return cloneSymbol(object);\n }\n }\n\n /**\n * Inserts wrapper `details` in a comment at the top of the `source` body.\n *\n * @private\n * @param {string} source The source to modify.\n * @returns {Array} details The details to insert.\n * @returns {string} Returns the modified source.\n */\n function insertWrapDetails(source, details) {\n var length = details.length;\n if (!length) {\n return source;\n }\n var lastIndex = length - 1;\n details[lastIndex] = (length > 1 ? '& ' : '') + details[lastIndex];\n details = details.join(length > 2 ? ', ' : ' ');\n return source.replace(reWrapComment, '{\\n/* [wrapped with ' + details + '] */\\n');\n }\n\n /**\n * Checks if `value` is a flattenable `arguments` object or array.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.\n */\n function isFlattenable(value) {\n return isArray(value) || isArguments(value) ||\n !!(spreadableSymbol && value && value[spreadableSymbol]);\n }\n\n /**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\n function isIndex(value, length) {\n var type = typeof value;\n length = length == null ? MAX_SAFE_INTEGER : length;\n\n return !!length &&\n (type == 'number' ||\n (type != 'symbol' && reIsUint.test(value))) &&\n (value > -1 && value % 1 == 0 && value < length);\n }\n\n /**\n * Checks if the given arguments are from an iteratee call.\n *\n * @private\n * @param {*} value The potential iteratee value argument.\n * @param {*} index The potential iteratee index or key argument.\n * @param {*} object The potential iteratee object argument.\n * @returns {boolean} Returns `true` if the arguments are from an iteratee call,\n * else `false`.\n */\n function isIterateeCall(value, index, object) {\n if (!isObject(object)) {\n return false;\n }\n var type = typeof index;\n if (type == 'number'\n ? (isArrayLike(object) && isIndex(index, object.length))\n : (type == 'string' && index in object)\n ) {\n return eq(object[index], value);\n }\n return false;\n }\n\n /**\n * Checks if `value` is a property name and not a property path.\n *\n * @private\n * @param {*} value The value to check.\n * @param {Object} [object] The object to query keys on.\n * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n */\n function isKey(value, object) {\n if (isArray(value)) {\n return false;\n }\n var type = typeof value;\n if (type == 'number' || type == 'symbol' || type == 'boolean' ||\n value == null || isSymbol(value)) {\n return true;\n }\n return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\n (object != null && value in Object(object));\n }\n\n /**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\n function isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n }\n\n /**\n * Checks if `func` has a lazy counterpart.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` has a lazy counterpart,\n * else `false`.\n */\n function isLaziable(func) {\n var funcName = getFuncName(func),\n other = lodash[funcName];\n\n if (typeof other != 'function' || !(funcName in LazyWrapper.prototype)) {\n return false;\n }\n if (func === other) {\n return true;\n }\n var data = getData(other);\n return !!data && func === data[0];\n }\n\n /**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\n function isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n }\n\n /**\n * Checks if `func` is capable of being masked.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `func` is maskable, else `false`.\n */\n var isMaskable = coreJsData ? isFunction : stubFalse;\n\n /**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\n function isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n }\n\n /**\n * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` if suitable for strict\n * equality comparisons, else `false`.\n */\n function isStrictComparable(value) {\n return value === value && !isObject(value);\n }\n\n /**\n * A specialized version of `matchesProperty` for source values suitable\n * for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\n function matchesStrictComparable(key, srcValue) {\n return function(object) {\n if (object == null) {\n return false;\n }\n return object[key] === srcValue &&\n (srcValue !== undefined || (key in Object(object)));\n };\n }\n\n /**\n * A specialized version of `_.memoize` which clears the memoized function's\n * cache when it exceeds `MAX_MEMOIZE_SIZE`.\n *\n * @private\n * @param {Function} func The function to have its output memoized.\n * @returns {Function} Returns the new memoized function.\n */\n function memoizeCapped(func) {\n var result = memoize(func, function(key) {\n if (cache.size === MAX_MEMOIZE_SIZE) {\n cache.clear();\n }\n return key;\n });\n\n var cache = result.cache;\n return result;\n }\n\n /**\n * Merges the function metadata of `source` into `data`.\n *\n * Merging metadata reduces the number of wrappers used to invoke a function.\n * This is possible because methods like `_.bind`, `_.curry`, and `_.partial`\n * may be applied regardless of execution order. Methods like `_.ary` and\n * `_.rearg` modify function arguments, making the order in which they are\n * executed important, preventing the merging of metadata. However, we make\n * an exception for a safe combined case where curried functions have `_.ary`\n * and or `_.rearg` applied.\n *\n * @private\n * @param {Array} data The destination metadata.\n * @param {Array} source The source metadata.\n * @returns {Array} Returns `data`.\n */\n function mergeData(data, source) {\n var bitmask = data[1],\n srcBitmask = source[1],\n newBitmask = bitmask | srcBitmask,\n isCommon = newBitmask < (WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG | WRAP_ARY_FLAG);\n\n var isCombo =\n ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_CURRY_FLAG)) ||\n ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_REARG_FLAG) && (data[7].length <= source[8])) ||\n ((srcBitmask == (WRAP_ARY_FLAG | WRAP_REARG_FLAG)) && (source[7].length <= source[8]) && (bitmask == WRAP_CURRY_FLAG));\n\n // Exit early if metadata can't be merged.\n if (!(isCommon || isCombo)) {\n return data;\n }\n // Use source `thisArg` if available.\n if (srcBitmask & WRAP_BIND_FLAG) {\n data[2] = source[2];\n // Set when currying a bound function.\n newBitmask |= bitmask & WRAP_BIND_FLAG ? 0 : WRAP_CURRY_BOUND_FLAG;\n }\n // Compose partial arguments.\n var value = source[3];\n if (value) {\n var partials = data[3];\n data[3] = partials ? composeArgs(partials, value, source[4]) : value;\n data[4] = partials ? replaceHolders(data[3], PLACEHOLDER) : source[4];\n }\n // Compose partial right arguments.\n value = source[5];\n if (value) {\n partials = data[5];\n data[5] = partials ? composeArgsRight(partials, value, source[6]) : value;\n data[6] = partials ? replaceHolders(data[5], PLACEHOLDER) : source[6];\n }\n // Use source `argPos` if available.\n value = source[7];\n if (value) {\n data[7] = value;\n }\n // Use source `ary` if it's smaller.\n if (srcBitmask & WRAP_ARY_FLAG) {\n data[8] = data[8] == null ? source[8] : nativeMin(data[8], source[8]);\n }\n // Use source `arity` if one is not provided.\n if (data[9] == null) {\n data[9] = source[9];\n }\n // Use source `func` and merge bitmasks.\n data[0] = source[0];\n data[1] = newBitmask;\n\n return data;\n }\n\n /**\n * This function is like\n * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * except that it includes inherited enumerable properties.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\n function nativeKeysIn(object) {\n var result = [];\n if (object != null) {\n for (var key in Object(object)) {\n result.push(key);\n }\n }\n return result;\n }\n\n /**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\n function objectToString(value) {\n return nativeObjectToString.call(value);\n }\n\n /**\n * A specialized version of `baseRest` which transforms the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @param {Function} transform The rest array transform.\n * @returns {Function} Returns the new function.\n */\n function overRest(func, start, transform) {\n start = nativeMax(start === undefined ? (func.length - 1) : start, 0);\n return function() {\n var args = arguments,\n index = -1,\n length = nativeMax(args.length - start, 0),\n array = Array(length);\n\n while (++index < length) {\n array[index] = args[start + index];\n }\n index = -1;\n var otherArgs = Array(start + 1);\n while (++index < start) {\n otherArgs[index] = args[index];\n }\n otherArgs[start] = transform(array);\n return apply(func, this, otherArgs);\n };\n }\n\n /**\n * Gets the parent value at `path` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} path The path to get the parent value of.\n * @returns {*} Returns the parent value.\n */\n function parent(object, path) {\n return path.length < 2 ? object : baseGet(object, baseSlice(path, 0, -1));\n }\n\n /**\n * Reorder `array` according to the specified indexes where the element at\n * the first index is assigned as the first element, the element at\n * the second index is assigned as the second element, and so on.\n *\n * @private\n * @param {Array} array The array to reorder.\n * @param {Array} indexes The arranged array indexes.\n * @returns {Array} Returns `array`.\n */\n function reorder(array, indexes) {\n var arrLength = array.length,\n length = nativeMin(indexes.length, arrLength),\n oldArray = copyArray(array);\n\n while (length--) {\n var index = indexes[length];\n array[length] = isIndex(index, arrLength) ? oldArray[index] : undefined;\n }\n return array;\n }\n\n /**\n * Gets the value at `key`, unless `key` is \"__proto__\" or \"constructor\".\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\n function safeGet(object, key) {\n if (key === 'constructor' && typeof object[key] === 'function') {\n return;\n }\n\n if (key == '__proto__') {\n return;\n }\n\n return object[key];\n }\n\n /**\n * Sets metadata for `func`.\n *\n * **Note:** If this function becomes hot, i.e. is invoked a lot in a short\n * period of time, it will trip its breaker and transition to an identity\n * function to avoid garbage collection pauses in V8. See\n * [V8 issue 2070](https://bugs.chromium.org/p/v8/issues/detail?id=2070)\n * for more details.\n *\n * @private\n * @param {Function} func The function to associate metadata with.\n * @param {*} data The metadata.\n * @returns {Function} Returns `func`.\n */\n var setData = shortOut(baseSetData);\n\n /**\n * A simple wrapper around the global [`setTimeout`](https://mdn.io/setTimeout).\n *\n * @private\n * @param {Function} func The function to delay.\n * @param {number} wait The number of milliseconds to delay invocation.\n * @returns {number|Object} Returns the timer id or timeout object.\n */\n var setTimeout = ctxSetTimeout || function(func, wait) {\n return root.setTimeout(func, wait);\n };\n\n /**\n * Sets the `toString` method of `func` to return `string`.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\n var setToString = shortOut(baseSetToString);\n\n /**\n * Sets the `toString` method of `wrapper` to mimic the source of `reference`\n * with wrapper details in a comment at the top of the source body.\n *\n * @private\n * @param {Function} wrapper The function to modify.\n * @param {Function} reference The reference function.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @returns {Function} Returns `wrapper`.\n */\n function setWrapToString(wrapper, reference, bitmask) {\n var source = (reference + '');\n return setToString(wrapper, insertWrapDetails(source, updateWrapDetails(getWrapDetails(source), bitmask)));\n }\n\n /**\n * Creates a function that'll short out and invoke `identity` instead\n * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`\n * milliseconds.\n *\n * @private\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new shortable function.\n */\n function shortOut(func) {\n var count = 0,\n lastCalled = 0;\n\n return function() {\n var stamp = nativeNow(),\n remaining = HOT_SPAN - (stamp - lastCalled);\n\n lastCalled = stamp;\n if (remaining > 0) {\n if (++count >= HOT_COUNT) {\n return arguments[0];\n }\n } else {\n count = 0;\n }\n return func.apply(undefined, arguments);\n };\n }\n\n /**\n * A specialized version of `_.shuffle` which mutates and sets the size of `array`.\n *\n * @private\n * @param {Array} array The array to shuffle.\n * @param {number} [size=array.length] The size of `array`.\n * @returns {Array} Returns `array`.\n */\n function shuffleSelf(array, size) {\n var index = -1,\n length = array.length,\n lastIndex = length - 1;\n\n size = size === undefined ? length : size;\n while (++index < size) {\n var rand = baseRandom(index, lastIndex),\n value = array[rand];\n\n array[rand] = array[index];\n array[index] = value;\n }\n array.length = size;\n return array;\n }\n\n /**\n * Converts `string` to a property path array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the property path array.\n */\n var stringToPath = memoizeCapped(function(string) {\n var result = [];\n if (string.charCodeAt(0) === 46 /* . */) {\n result.push('');\n }\n string.replace(rePropName, function(match, number, quote, subString) {\n result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));\n });\n return result;\n });\n\n /**\n * Converts `value` to a string key if it's not a string or symbol.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {string|symbol} Returns the key.\n */\n function toKey(value) {\n if (typeof value == 'string' || isSymbol(value)) {\n return value;\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n }\n\n /**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\n function toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n }\n\n /**\n * Updates wrapper `details` based on `bitmask` flags.\n *\n * @private\n * @returns {Array} details The details to modify.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @returns {Array} Returns `details`.\n */\n function updateWrapDetails(details, bitmask) {\n arrayEach(wrapFlags, function(pair) {\n var value = '_.' + pair[0];\n if ((bitmask & pair[1]) && !arrayIncludes(details, value)) {\n details.push(value);\n }\n });\n return details.sort();\n }\n\n /**\n * Creates a clone of `wrapper`.\n *\n * @private\n * @param {Object} wrapper The wrapper to clone.\n * @returns {Object} Returns the cloned wrapper.\n */\n function wrapperClone(wrapper) {\n if (wrapper instanceof LazyWrapper) {\n return wrapper.clone();\n }\n var result = new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__);\n result.__actions__ = copyArray(wrapper.__actions__);\n result.__index__ = wrapper.__index__;\n result.__values__ = wrapper.__values__;\n return result;\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates an array of elements split into groups the length of `size`.\n * If `array` can't be split evenly, the final chunk will be the remaining\n * elements.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to process.\n * @param {number} [size=1] The length of each chunk\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the new array of chunks.\n * @example\n *\n * _.chunk(['a', 'b', 'c', 'd'], 2);\n * // => [['a', 'b'], ['c', 'd']]\n *\n * _.chunk(['a', 'b', 'c', 'd'], 3);\n * // => [['a', 'b', 'c'], ['d']]\n */\n function chunk(array, size, guard) {\n if ((guard ? isIterateeCall(array, size, guard) : size === undefined)) {\n size = 1;\n } else {\n size = nativeMax(toInteger(size), 0);\n }\n var length = array == null ? 0 : array.length;\n if (!length || size < 1) {\n return [];\n }\n var index = 0,\n resIndex = 0,\n result = Array(nativeCeil(length / size));\n\n while (index < length) {\n result[resIndex++] = baseSlice(array, index, (index += size));\n }\n return result;\n }\n\n /**\n * Creates an array with all falsey values removed. The values `false`, `null`,\n * `0`, `\"\"`, `undefined`, and `NaN` are falsey.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to compact.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * _.compact([0, 1, false, 2, '', 3]);\n * // => [1, 2, 3]\n */\n function compact(array) {\n var index = -1,\n length = array == null ? 0 : array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (value) {\n result[resIndex++] = value;\n }\n }\n return result;\n }\n\n /**\n * Creates a new array concatenating `array` with any additional arrays\n * and/or values.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to concatenate.\n * @param {...*} [values] The values to concatenate.\n * @returns {Array} Returns the new concatenated array.\n * @example\n *\n * var array = [1];\n * var other = _.concat(array, 2, [3], [[4]]);\n *\n * console.log(other);\n * // => [1, 2, 3, [4]]\n *\n * console.log(array);\n * // => [1]\n */\n function concat() {\n var length = arguments.length;\n if (!length) {\n return [];\n }\n var args = Array(length - 1),\n array = arguments[0],\n index = length;\n\n while (index--) {\n args[index - 1] = arguments[index];\n }\n return arrayPush(isArray(array) ? copyArray(array) : [array], baseFlatten(args, 1));\n }\n\n /**\n * Creates an array of `array` values not included in the other given arrays\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons. The order and references of result values are\n * determined by the first array.\n *\n * **Note:** Unlike `_.pullAll`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...Array} [values] The values to exclude.\n * @returns {Array} Returns the new array of filtered values.\n * @see _.without, _.xor\n * @example\n *\n * _.difference([2, 1], [2, 3]);\n * // => [1]\n */\n var difference = baseRest(function(array, values) {\n return isArrayLikeObject(array)\n ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true))\n : [];\n });\n\n /**\n * This method is like `_.difference` except that it accepts `iteratee` which\n * is invoked for each element of `array` and `values` to generate the criterion\n * by which they're compared. The order and references of result values are\n * determined by the first array. The iteratee is invoked with one argument:\n * (value).\n *\n * **Note:** Unlike `_.pullAllBy`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...Array} [values] The values to exclude.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * _.differenceBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n * // => [1.2]\n *\n * // The `_.property` iteratee shorthand.\n * _.differenceBy([{ 'x': 2 }, { 'x': 1 }], [{ 'x': 1 }], 'x');\n * // => [{ 'x': 2 }]\n */\n var differenceBy = baseRest(function(array, values) {\n var iteratee = last(values);\n if (isArrayLikeObject(iteratee)) {\n iteratee = undefined;\n }\n return isArrayLikeObject(array)\n ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), getIteratee(iteratee, 2))\n : [];\n });\n\n /**\n * This method is like `_.difference` except that it accepts `comparator`\n * which is invoked to compare elements of `array` to `values`. The order and\n * references of result values are determined by the first array. The comparator\n * is invoked with two arguments: (arrVal, othVal).\n *\n * **Note:** Unlike `_.pullAllWith`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...Array} [values] The values to exclude.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n *\n * _.differenceWith(objects, [{ 'x': 1, 'y': 2 }], _.isEqual);\n * // => [{ 'x': 2, 'y': 1 }]\n */\n var differenceWith = baseRest(function(array, values) {\n var comparator = last(values);\n if (isArrayLikeObject(comparator)) {\n comparator = undefined;\n }\n return isArrayLikeObject(array)\n ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), undefined, comparator)\n : [];\n });\n\n /**\n * Creates a slice of `array` with `n` elements dropped from the beginning.\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=1] The number of elements to drop.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.drop([1, 2, 3]);\n * // => [2, 3]\n *\n * _.drop([1, 2, 3], 2);\n * // => [3]\n *\n * _.drop([1, 2, 3], 5);\n * // => []\n *\n * _.drop([1, 2, 3], 0);\n * // => [1, 2, 3]\n */\n function drop(array, n, guard) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n n = (guard || n === undefined) ? 1 : toInteger(n);\n return baseSlice(array, n < 0 ? 0 : n, length);\n }\n\n /**\n * Creates a slice of `array` with `n` elements dropped from the end.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=1] The number of elements to drop.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.dropRight([1, 2, 3]);\n * // => [1, 2]\n *\n * _.dropRight([1, 2, 3], 2);\n * // => [1]\n *\n * _.dropRight([1, 2, 3], 5);\n * // => []\n *\n * _.dropRight([1, 2, 3], 0);\n * // => [1, 2, 3]\n */\n function dropRight(array, n, guard) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n n = (guard || n === undefined) ? 1 : toInteger(n);\n n = length - n;\n return baseSlice(array, 0, n < 0 ? 0 : n);\n }\n\n /**\n * Creates a slice of `array` excluding elements dropped from the end.\n * Elements are dropped until `predicate` returns falsey. The predicate is\n * invoked with three arguments: (value, index, array).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': true },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': false }\n * ];\n *\n * _.dropRightWhile(users, function(o) { return !o.active; });\n * // => objects for ['barney']\n *\n * // The `_.matches` iteratee shorthand.\n * _.dropRightWhile(users, { 'user': 'pebbles', 'active': false });\n * // => objects for ['barney', 'fred']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.dropRightWhile(users, ['active', false]);\n * // => objects for ['barney']\n *\n * // The `_.property` iteratee shorthand.\n * _.dropRightWhile(users, 'active');\n * // => objects for ['barney', 'fred', 'pebbles']\n */\n function dropRightWhile(array, predicate) {\n return (array && array.length)\n ? baseWhile(array, getIteratee(predicate, 3), true, true)\n : [];\n }\n\n /**\n * Creates a slice of `array` excluding elements dropped from the beginning.\n * Elements are dropped until `predicate` returns falsey. The predicate is\n * invoked with three arguments: (value, index, array).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': false },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': true }\n * ];\n *\n * _.dropWhile(users, function(o) { return !o.active; });\n * // => objects for ['pebbles']\n *\n * // The `_.matches` iteratee shorthand.\n * _.dropWhile(users, { 'user': 'barney', 'active': false });\n * // => objects for ['fred', 'pebbles']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.dropWhile(users, ['active', false]);\n * // => objects for ['pebbles']\n *\n * // The `_.property` iteratee shorthand.\n * _.dropWhile(users, 'active');\n * // => objects for ['barney', 'fred', 'pebbles']\n */\n function dropWhile(array, predicate) {\n return (array && array.length)\n ? baseWhile(array, getIteratee(predicate, 3), true)\n : [];\n }\n\n /**\n * Fills elements of `array` with `value` from `start` up to, but not\n * including, `end`.\n *\n * **Note:** This method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 3.2.0\n * @category Array\n * @param {Array} array The array to fill.\n * @param {*} value The value to fill `array` with.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = [1, 2, 3];\n *\n * _.fill(array, 'a');\n * console.log(array);\n * // => ['a', 'a', 'a']\n *\n * _.fill(Array(3), 2);\n * // => [2, 2, 2]\n *\n * _.fill([4, 6, 8, 10], '*', 1, 3);\n * // => [4, '*', '*', 10]\n */\n function fill(array, value, start, end) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n if (start && typeof start != 'number' && isIterateeCall(array, value, start)) {\n start = 0;\n end = length;\n }\n return baseFill(array, value, start, end);\n }\n\n /**\n * This method is like `_.find` except that it returns the index of the first\n * element `predicate` returns truthy for instead of the element itself.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {number} Returns the index of the found element, else `-1`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': false },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': true }\n * ];\n *\n * _.findIndex(users, function(o) { return o.user == 'barney'; });\n * // => 0\n *\n * // The `_.matches` iteratee shorthand.\n * _.findIndex(users, { 'user': 'fred', 'active': false });\n * // => 1\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findIndex(users, ['active', false]);\n * // => 0\n *\n * // The `_.property` iteratee shorthand.\n * _.findIndex(users, 'active');\n * // => 2\n */\n function findIndex(array, predicate, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = fromIndex == null ? 0 : toInteger(fromIndex);\n if (index < 0) {\n index = nativeMax(length + index, 0);\n }\n return baseFindIndex(array, getIteratee(predicate, 3), index);\n }\n\n /**\n * This method is like `_.findIndex` except that it iterates over elements\n * of `collection` from right to left.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=array.length-1] The index to search from.\n * @returns {number} Returns the index of the found element, else `-1`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': true },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': false }\n * ];\n *\n * _.findLastIndex(users, function(o) { return o.user == 'pebbles'; });\n * // => 2\n *\n * // The `_.matches` iteratee shorthand.\n * _.findLastIndex(users, { 'user': 'barney', 'active': true });\n * // => 0\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findLastIndex(users, ['active', false]);\n * // => 2\n *\n * // The `_.property` iteratee shorthand.\n * _.findLastIndex(users, 'active');\n * // => 0\n */\n function findLastIndex(array, predicate, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = length - 1;\n if (fromIndex !== undefined) {\n index = toInteger(fromIndex);\n index = fromIndex < 0\n ? nativeMax(length + index, 0)\n : nativeMin(index, length - 1);\n }\n return baseFindIndex(array, getIteratee(predicate, 3), index, true);\n }\n\n /**\n * Flattens `array` a single level deep.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * _.flatten([1, [2, [3, [4]], 5]]);\n * // => [1, 2, [3, [4]], 5]\n */\n function flatten(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseFlatten(array, 1) : [];\n }\n\n /**\n * Recursively flattens `array`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * _.flattenDeep([1, [2, [3, [4]], 5]]);\n * // => [1, 2, 3, 4, 5]\n */\n function flattenDeep(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseFlatten(array, INFINITY) : [];\n }\n\n /**\n * Recursively flatten `array` up to `depth` times.\n *\n * @static\n * @memberOf _\n * @since 4.4.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @param {number} [depth=1] The maximum recursion depth.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * var array = [1, [2, [3, [4]], 5]];\n *\n * _.flattenDepth(array, 1);\n * // => [1, 2, [3, [4]], 5]\n *\n * _.flattenDepth(array, 2);\n * // => [1, 2, 3, [4], 5]\n */\n function flattenDepth(array, depth) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n depth = depth === undefined ? 1 : toInteger(depth);\n return baseFlatten(array, depth);\n }\n\n /**\n * The inverse of `_.toPairs`; this method returns an object composed\n * from key-value `pairs`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} pairs The key-value pairs.\n * @returns {Object} Returns the new object.\n * @example\n *\n * _.fromPairs([['a', 1], ['b', 2]]);\n * // => { 'a': 1, 'b': 2 }\n */\n function fromPairs(pairs) {\n var index = -1,\n length = pairs == null ? 0 : pairs.length,\n result = {};\n\n while (++index < length) {\n var pair = pairs[index];\n result[pair[0]] = pair[1];\n }\n return result;\n }\n\n /**\n * Gets the first element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @alias first\n * @category Array\n * @param {Array} array The array to query.\n * @returns {*} Returns the first element of `array`.\n * @example\n *\n * _.head([1, 2, 3]);\n * // => 1\n *\n * _.head([]);\n * // => undefined\n */\n function head(array) {\n return (array && array.length) ? array[0] : undefined;\n }\n\n /**\n * Gets the index at which the first occurrence of `value` is found in `array`\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons. If `fromIndex` is negative, it's used as the\n * offset from the end of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n * @example\n *\n * _.indexOf([1, 2, 1, 2], 2);\n * // => 1\n *\n * // Search from the `fromIndex`.\n * _.indexOf([1, 2, 1, 2], 2, 2);\n * // => 3\n */\n function indexOf(array, value, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = fromIndex == null ? 0 : toInteger(fromIndex);\n if (index < 0) {\n index = nativeMax(length + index, 0);\n }\n return baseIndexOf(array, value, index);\n }\n\n /**\n * Gets all but the last element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.initial([1, 2, 3]);\n * // => [1, 2]\n */\n function initial(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseSlice(array, 0, -1) : [];\n }\n\n /**\n * Creates an array of unique values that are included in all given arrays\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons. The order and references of result values are\n * determined by the first array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @returns {Array} Returns the new array of intersecting values.\n * @example\n *\n * _.intersection([2, 1], [2, 3]);\n * // => [2]\n */\n var intersection = baseRest(function(arrays) {\n var mapped = arrayMap(arrays, castArrayLikeObject);\n return (mapped.length && mapped[0] === arrays[0])\n ? baseIntersection(mapped)\n : [];\n });\n\n /**\n * This method is like `_.intersection` except that it accepts `iteratee`\n * which is invoked for each element of each `arrays` to generate the criterion\n * by which they're compared. The order and references of result values are\n * determined by the first array. The iteratee is invoked with one argument:\n * (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new array of intersecting values.\n * @example\n *\n * _.intersectionBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n * // => [2.1]\n *\n * // The `_.property` iteratee shorthand.\n * _.intersectionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 1 }]\n */\n var intersectionBy = baseRest(function(arrays) {\n var iteratee = last(arrays),\n mapped = arrayMap(arrays, castArrayLikeObject);\n\n if (iteratee === last(mapped)) {\n iteratee = undefined;\n } else {\n mapped.pop();\n }\n return (mapped.length && mapped[0] === arrays[0])\n ? baseIntersection(mapped, getIteratee(iteratee, 2))\n : [];\n });\n\n /**\n * This method is like `_.intersection` except that it accepts `comparator`\n * which is invoked to compare elements of `arrays`. The order and references\n * of result values are determined by the first array. The comparator is\n * invoked with two arguments: (arrVal, othVal).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of intersecting values.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n *\n * _.intersectionWith(objects, others, _.isEqual);\n * // => [{ 'x': 1, 'y': 2 }]\n */\n var intersectionWith = baseRest(function(arrays) {\n var comparator = last(arrays),\n mapped = arrayMap(arrays, castArrayLikeObject);\n\n comparator = typeof comparator == 'function' ? comparator : undefined;\n if (comparator) {\n mapped.pop();\n }\n return (mapped.length && mapped[0] === arrays[0])\n ? baseIntersection(mapped, undefined, comparator)\n : [];\n });\n\n /**\n * Converts all elements in `array` into a string separated by `separator`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to convert.\n * @param {string} [separator=','] The element separator.\n * @returns {string} Returns the joined string.\n * @example\n *\n * _.join(['a', 'b', 'c'], '~');\n * // => 'a~b~c'\n */\n function join(array, separator) {\n return array == null ? '' : nativeJoin.call(array, separator);\n }\n\n /**\n * Gets the last element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {*} Returns the last element of `array`.\n * @example\n *\n * _.last([1, 2, 3]);\n * // => 3\n */\n function last(array) {\n var length = array == null ? 0 : array.length;\n return length ? array[length - 1] : undefined;\n }\n\n /**\n * This method is like `_.indexOf` except that it iterates over elements of\n * `array` from right to left.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} [fromIndex=array.length-1] The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n * @example\n *\n * _.lastIndexOf([1, 2, 1, 2], 2);\n * // => 3\n *\n * // Search from the `fromIndex`.\n * _.lastIndexOf([1, 2, 1, 2], 2, 2);\n * // => 1\n */\n function lastIndexOf(array, value, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = length;\n if (fromIndex !== undefined) {\n index = toInteger(fromIndex);\n index = index < 0 ? nativeMax(length + index, 0) : nativeMin(index, length - 1);\n }\n return value === value\n ? strictLastIndexOf(array, value, index)\n : baseFindIndex(array, baseIsNaN, index, true);\n }\n\n /**\n * Gets the element at index `n` of `array`. If `n` is negative, the nth\n * element from the end is returned.\n *\n * @static\n * @memberOf _\n * @since 4.11.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=0] The index of the element to return.\n * @returns {*} Returns the nth element of `array`.\n * @example\n *\n * var array = ['a', 'b', 'c', 'd'];\n *\n * _.nth(array, 1);\n * // => 'b'\n *\n * _.nth(array, -2);\n * // => 'c';\n */\n function nth(array, n) {\n return (array && array.length) ? baseNth(array, toInteger(n)) : undefined;\n }\n\n /**\n * Removes all given values from `array` using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * **Note:** Unlike `_.without`, this method mutates `array`. Use `_.remove`\n * to remove elements from an array by predicate.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {...*} [values] The values to remove.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = ['a', 'b', 'c', 'a', 'b', 'c'];\n *\n * _.pull(array, 'a', 'c');\n * console.log(array);\n * // => ['b', 'b']\n */\n var pull = baseRest(pullAll);\n\n /**\n * This method is like `_.pull` except that it accepts an array of values to remove.\n *\n * **Note:** Unlike `_.difference`, this method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {Array} values The values to remove.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = ['a', 'b', 'c', 'a', 'b', 'c'];\n *\n * _.pullAll(array, ['a', 'c']);\n * console.log(array);\n * // => ['b', 'b']\n */\n function pullAll(array, values) {\n return (array && array.length && values && values.length)\n ? basePullAll(array, values)\n : array;\n }\n\n /**\n * This method is like `_.pullAll` except that it accepts `iteratee` which is\n * invoked for each element of `array` and `values` to generate the criterion\n * by which they're compared. The iteratee is invoked with one argument: (value).\n *\n * **Note:** Unlike `_.differenceBy`, this method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {Array} values The values to remove.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = [{ 'x': 1 }, { 'x': 2 }, { 'x': 3 }, { 'x': 1 }];\n *\n * _.pullAllBy(array, [{ 'x': 1 }, { 'x': 3 }], 'x');\n * console.log(array);\n * // => [{ 'x': 2 }]\n */\n function pullAllBy(array, values, iteratee) {\n return (array && array.length && values && values.length)\n ? basePullAll(array, values, getIteratee(iteratee, 2))\n : array;\n }\n\n /**\n * This method is like `_.pullAll` except that it accepts `comparator` which\n * is invoked to compare elements of `array` to `values`. The comparator is\n * invoked with two arguments: (arrVal, othVal).\n *\n * **Note:** Unlike `_.differenceWith`, this method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 4.6.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {Array} values The values to remove.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = [{ 'x': 1, 'y': 2 }, { 'x': 3, 'y': 4 }, { 'x': 5, 'y': 6 }];\n *\n * _.pullAllWith(array, [{ 'x': 3, 'y': 4 }], _.isEqual);\n * console.log(array);\n * // => [{ 'x': 1, 'y': 2 }, { 'x': 5, 'y': 6 }]\n */\n function pullAllWith(array, values, comparator) {\n return (array && array.length && values && values.length)\n ? basePullAll(array, values, undefined, comparator)\n : array;\n }\n\n /**\n * Removes elements from `array` corresponding to `indexes` and returns an\n * array of removed elements.\n *\n * **Note:** Unlike `_.at`, this method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {...(number|number[])} [indexes] The indexes of elements to remove.\n * @returns {Array} Returns the new array of removed elements.\n * @example\n *\n * var array = ['a', 'b', 'c', 'd'];\n * var pulled = _.pullAt(array, [1, 3]);\n *\n * console.log(array);\n * // => ['a', 'c']\n *\n * console.log(pulled);\n * // => ['b', 'd']\n */\n var pullAt = flatRest(function(array, indexes) {\n var length = array == null ? 0 : array.length,\n result = baseAt(array, indexes);\n\n basePullAt(array, arrayMap(indexes, function(index) {\n return isIndex(index, length) ? +index : index;\n }).sort(compareAscending));\n\n return result;\n });\n\n /**\n * Removes all elements from `array` that `predicate` returns truthy for\n * and returns an array of the removed elements. The predicate is invoked\n * with three arguments: (value, index, array).\n *\n * **Note:** Unlike `_.filter`, this method mutates `array`. Use `_.pull`\n * to pull elements from an array by value.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new array of removed elements.\n * @example\n *\n * var array = [1, 2, 3, 4];\n * var evens = _.remove(array, function(n) {\n * return n % 2 == 0;\n * });\n *\n * console.log(array);\n * // => [1, 3]\n *\n * console.log(evens);\n * // => [2, 4]\n */\n function remove(array, predicate) {\n var result = [];\n if (!(array && array.length)) {\n return result;\n }\n var index = -1,\n indexes = [],\n length = array.length;\n\n predicate = getIteratee(predicate, 3);\n while (++index < length) {\n var value = array[index];\n if (predicate(value, index, array)) {\n result.push(value);\n indexes.push(index);\n }\n }\n basePullAt(array, indexes);\n return result;\n }\n\n /**\n * Reverses `array` so that the first element becomes the last, the second\n * element becomes the second to last, and so on.\n *\n * **Note:** This method mutates `array` and is based on\n * [`Array#reverse`](https://mdn.io/Array/reverse).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = [1, 2, 3];\n *\n * _.reverse(array);\n * // => [3, 2, 1]\n *\n * console.log(array);\n * // => [3, 2, 1]\n */\n function reverse(array) {\n return array == null ? array : nativeReverse.call(array);\n }\n\n /**\n * Creates a slice of `array` from `start` up to, but not including, `end`.\n *\n * **Note:** This method is used instead of\n * [`Array#slice`](https://mdn.io/Array/slice) to ensure dense arrays are\n * returned.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to slice.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the slice of `array`.\n */\n function slice(array, start, end) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n if (end && typeof end != 'number' && isIterateeCall(array, start, end)) {\n start = 0;\n end = length;\n }\n else {\n start = start == null ? 0 : toInteger(start);\n end = end === undefined ? length : toInteger(end);\n }\n return baseSlice(array, start, end);\n }\n\n /**\n * Uses a binary search to determine the lowest index at which `value`\n * should be inserted into `array` in order to maintain its sort order.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n * @example\n *\n * _.sortedIndex([30, 50], 40);\n * // => 1\n */\n function sortedIndex(array, value) {\n return baseSortedIndex(array, value);\n }\n\n /**\n * This method is like `_.sortedIndex` except that it accepts `iteratee`\n * which is invoked for `value` and each element of `array` to compute their\n * sort ranking. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n * @example\n *\n * var objects = [{ 'x': 4 }, { 'x': 5 }];\n *\n * _.sortedIndexBy(objects, { 'x': 4 }, function(o) { return o.x; });\n * // => 0\n *\n * // The `_.property` iteratee shorthand.\n * _.sortedIndexBy(objects, { 'x': 4 }, 'x');\n * // => 0\n */\n function sortedIndexBy(array, value, iteratee) {\n return baseSortedIndexBy(array, value, getIteratee(iteratee, 2));\n }\n\n /**\n * This method is like `_.indexOf` except that it performs a binary\n * search on a sorted `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n * @example\n *\n * _.sortedIndexOf([4, 5, 5, 5, 6], 5);\n * // => 1\n */\n function sortedIndexOf(array, value) {\n var length = array == null ? 0 : array.length;\n if (length) {\n var index = baseSortedIndex(array, value);\n if (index < length && eq(array[index], value)) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * This method is like `_.sortedIndex` except that it returns the highest\n * index at which `value` should be inserted into `array` in order to\n * maintain its sort order.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n * @example\n *\n * _.sortedLastIndex([4, 5, 5, 5, 6], 5);\n * // => 4\n */\n function sortedLastIndex(array, value) {\n return baseSortedIndex(array, value, true);\n }\n\n /**\n * This method is like `_.sortedLastIndex` except that it accepts `iteratee`\n * which is invoked for `value` and each element of `array` to compute their\n * sort ranking. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n * @example\n *\n * var objects = [{ 'x': 4 }, { 'x': 5 }];\n *\n * _.sortedLastIndexBy(objects, { 'x': 4 }, function(o) { return o.x; });\n * // => 1\n *\n * // The `_.property` iteratee shorthand.\n * _.sortedLastIndexBy(objects, { 'x': 4 }, 'x');\n * // => 1\n */\n function sortedLastIndexBy(array, value, iteratee) {\n return baseSortedIndexBy(array, value, getIteratee(iteratee, 2), true);\n }\n\n /**\n * This method is like `_.lastIndexOf` except that it performs a binary\n * search on a sorted `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n * @example\n *\n * _.sortedLastIndexOf([4, 5, 5, 5, 6], 5);\n * // => 3\n */\n function sortedLastIndexOf(array, value) {\n var length = array == null ? 0 : array.length;\n if (length) {\n var index = baseSortedIndex(array, value, true) - 1;\n if (eq(array[index], value)) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * This method is like `_.uniq` except that it's designed and optimized\n * for sorted arrays.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.sortedUniq([1, 1, 2]);\n * // => [1, 2]\n */\n function sortedUniq(array) {\n return (array && array.length)\n ? baseSortedUniq(array)\n : [];\n }\n\n /**\n * This method is like `_.uniqBy` except that it's designed and optimized\n * for sorted arrays.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.sortedUniqBy([1.1, 1.2, 2.3, 2.4], Math.floor);\n * // => [1.1, 2.3]\n */\n function sortedUniqBy(array, iteratee) {\n return (array && array.length)\n ? baseSortedUniq(array, getIteratee(iteratee, 2))\n : [];\n }\n\n /**\n * Gets all but the first element of `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.tail([1, 2, 3]);\n * // => [2, 3]\n */\n function tail(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseSlice(array, 1, length) : [];\n }\n\n /**\n * Creates a slice of `array` with `n` elements taken from the beginning.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=1] The number of elements to take.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.take([1, 2, 3]);\n * // => [1]\n *\n * _.take([1, 2, 3], 2);\n * // => [1, 2]\n *\n * _.take([1, 2, 3], 5);\n * // => [1, 2, 3]\n *\n * _.take([1, 2, 3], 0);\n * // => []\n */\n function take(array, n, guard) {\n if (!(array && array.length)) {\n return [];\n }\n n = (guard || n === undefined) ? 1 : toInteger(n);\n return baseSlice(array, 0, n < 0 ? 0 : n);\n }\n\n /**\n * Creates a slice of `array` with `n` elements taken from the end.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=1] The number of elements to take.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.takeRight([1, 2, 3]);\n * // => [3]\n *\n * _.takeRight([1, 2, 3], 2);\n * // => [2, 3]\n *\n * _.takeRight([1, 2, 3], 5);\n * // => [1, 2, 3]\n *\n * _.takeRight([1, 2, 3], 0);\n * // => []\n */\n function takeRight(array, n, guard) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n n = (guard || n === undefined) ? 1 : toInteger(n);\n n = length - n;\n return baseSlice(array, n < 0 ? 0 : n, length);\n }\n\n /**\n * Creates a slice of `array` with elements taken from the end. Elements are\n * taken until `predicate` returns falsey. The predicate is invoked with\n * three arguments: (value, index, array).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': true },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': false }\n * ];\n *\n * _.takeRightWhile(users, function(o) { return !o.active; });\n * // => objects for ['fred', 'pebbles']\n *\n * // The `_.matches` iteratee shorthand.\n * _.takeRightWhile(users, { 'user': 'pebbles', 'active': false });\n * // => objects for ['pebbles']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.takeRightWhile(users, ['active', false]);\n * // => objects for ['fred', 'pebbles']\n *\n * // The `_.property` iteratee shorthand.\n * _.takeRightWhile(users, 'active');\n * // => []\n */\n function takeRightWhile(array, predicate) {\n return (array && array.length)\n ? baseWhile(array, getIteratee(predicate, 3), false, true)\n : [];\n }\n\n /**\n * Creates a slice of `array` with elements taken from the beginning. Elements\n * are taken until `predicate` returns falsey. The predicate is invoked with\n * three arguments: (value, index, array).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': false },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': true }\n * ];\n *\n * _.takeWhile(users, function(o) { return !o.active; });\n * // => objects for ['barney', 'fred']\n *\n * // The `_.matches` iteratee shorthand.\n * _.takeWhile(users, { 'user': 'barney', 'active': false });\n * // => objects for ['barney']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.takeWhile(users, ['active', false]);\n * // => objects for ['barney', 'fred']\n *\n * // The `_.property` iteratee shorthand.\n * _.takeWhile(users, 'active');\n * // => []\n */\n function takeWhile(array, predicate) {\n return (array && array.length)\n ? baseWhile(array, getIteratee(predicate, 3))\n : [];\n }\n\n /**\n * Creates an array of unique values, in order, from all given arrays using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @returns {Array} Returns the new array of combined values.\n * @example\n *\n * _.union([2], [1, 2]);\n * // => [2, 1]\n */\n var union = baseRest(function(arrays) {\n return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true));\n });\n\n /**\n * This method is like `_.union` except that it accepts `iteratee` which is\n * invoked for each element of each `arrays` to generate the criterion by\n * which uniqueness is computed. Result values are chosen from the first\n * array in which the value occurs. The iteratee is invoked with one argument:\n * (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new array of combined values.\n * @example\n *\n * _.unionBy([2.1], [1.2, 2.3], Math.floor);\n * // => [2.1, 1.2]\n *\n * // The `_.property` iteratee shorthand.\n * _.unionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 1 }, { 'x': 2 }]\n */\n var unionBy = baseRest(function(arrays) {\n var iteratee = last(arrays);\n if (isArrayLikeObject(iteratee)) {\n iteratee = undefined;\n }\n return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), getIteratee(iteratee, 2));\n });\n\n /**\n * This method is like `_.union` except that it accepts `comparator` which\n * is invoked to compare elements of `arrays`. Result values are chosen from\n * the first array in which the value occurs. The comparator is invoked\n * with two arguments: (arrVal, othVal).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of combined values.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n *\n * _.unionWith(objects, others, _.isEqual);\n * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]\n */\n var unionWith = baseRest(function(arrays) {\n var comparator = last(arrays);\n comparator = typeof comparator == 'function' ? comparator : undefined;\n return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), undefined, comparator);\n });\n\n /**\n * Creates a duplicate-free version of an array, using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons, in which only the first occurrence of each element\n * is kept. The order of result values is determined by the order they occur\n * in the array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.uniq([2, 1, 2]);\n * // => [2, 1]\n */\n function uniq(array) {\n return (array && array.length) ? baseUniq(array) : [];\n }\n\n /**\n * This method is like `_.uniq` except that it accepts `iteratee` which is\n * invoked for each element in `array` to generate the criterion by which\n * uniqueness is computed. The order of result values is determined by the\n * order they occur in the array. The iteratee is invoked with one argument:\n * (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.uniqBy([2.1, 1.2, 2.3], Math.floor);\n * // => [2.1, 1.2]\n *\n * // The `_.property` iteratee shorthand.\n * _.uniqBy([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 1 }, { 'x': 2 }]\n */\n function uniqBy(array, iteratee) {\n return (array && array.length) ? baseUniq(array, getIteratee(iteratee, 2)) : [];\n }\n\n /**\n * This method is like `_.uniq` except that it accepts `comparator` which\n * is invoked to compare elements of `array`. The order of result values is\n * determined by the order they occur in the array.The comparator is invoked\n * with two arguments: (arrVal, othVal).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 2 }];\n *\n * _.uniqWith(objects, _.isEqual);\n * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]\n */\n function uniqWith(array, comparator) {\n comparator = typeof comparator == 'function' ? comparator : undefined;\n return (array && array.length) ? baseUniq(array, undefined, comparator) : [];\n }\n\n /**\n * This method is like `_.zip` except that it accepts an array of grouped\n * elements and creates an array regrouping the elements to their pre-zip\n * configuration.\n *\n * @static\n * @memberOf _\n * @since 1.2.0\n * @category Array\n * @param {Array} array The array of grouped elements to process.\n * @returns {Array} Returns the new array of regrouped elements.\n * @example\n *\n * var zipped = _.zip(['a', 'b'], [1, 2], [true, false]);\n * // => [['a', 1, true], ['b', 2, false]]\n *\n * _.unzip(zipped);\n * // => [['a', 'b'], [1, 2], [true, false]]\n */\n function unzip(array) {\n if (!(array && array.length)) {\n return [];\n }\n var length = 0;\n array = arrayFilter(array, function(group) {\n if (isArrayLikeObject(group)) {\n length = nativeMax(group.length, length);\n return true;\n }\n });\n return baseTimes(length, function(index) {\n return arrayMap(array, baseProperty(index));\n });\n }\n\n /**\n * This method is like `_.unzip` except that it accepts `iteratee` to specify\n * how regrouped values should be combined. The iteratee is invoked with the\n * elements of each group: (...group).\n *\n * @static\n * @memberOf _\n * @since 3.8.0\n * @category Array\n * @param {Array} array The array of grouped elements to process.\n * @param {Function} [iteratee=_.identity] The function to combine\n * regrouped values.\n * @returns {Array} Returns the new array of regrouped elements.\n * @example\n *\n * var zipped = _.zip([1, 2], [10, 20], [100, 200]);\n * // => [[1, 10, 100], [2, 20, 200]]\n *\n * _.unzipWith(zipped, _.add);\n * // => [3, 30, 300]\n */\n function unzipWith(array, iteratee) {\n if (!(array && array.length)) {\n return [];\n }\n var result = unzip(array);\n if (iteratee == null) {\n return result;\n }\n return arrayMap(result, function(group) {\n return apply(iteratee, undefined, group);\n });\n }\n\n /**\n * Creates an array excluding all given values using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * **Note:** Unlike `_.pull`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...*} [values] The values to exclude.\n * @returns {Array} Returns the new array of filtered values.\n * @see _.difference, _.xor\n * @example\n *\n * _.without([2, 1, 2, 3], 1, 2);\n * // => [3]\n */\n var without = baseRest(function(array, values) {\n return isArrayLikeObject(array)\n ? baseDifference(array, values)\n : [];\n });\n\n /**\n * Creates an array of unique values that is the\n * [symmetric difference](https://en.wikipedia.org/wiki/Symmetric_difference)\n * of the given arrays. The order of result values is determined by the order\n * they occur in the arrays.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @returns {Array} Returns the new array of filtered values.\n * @see _.difference, _.without\n * @example\n *\n * _.xor([2, 1], [2, 3]);\n * // => [1, 3]\n */\n var xor = baseRest(function(arrays) {\n return baseXor(arrayFilter(arrays, isArrayLikeObject));\n });\n\n /**\n * This method is like `_.xor` except that it accepts `iteratee` which is\n * invoked for each element of each `arrays` to generate the criterion by\n * which by which they're compared. The order of result values is determined\n * by the order they occur in the arrays. The iteratee is invoked with one\n * argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * _.xorBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n * // => [1.2, 3.4]\n *\n * // The `_.property` iteratee shorthand.\n * _.xorBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 2 }]\n */\n var xorBy = baseRest(function(arrays) {\n var iteratee = last(arrays);\n if (isArrayLikeObject(iteratee)) {\n iteratee = undefined;\n }\n return baseXor(arrayFilter(arrays, isArrayLikeObject), getIteratee(iteratee, 2));\n });\n\n /**\n * This method is like `_.xor` except that it accepts `comparator` which is\n * invoked to compare elements of `arrays`. The order of result values is\n * determined by the order they occur in the arrays. The comparator is invoked\n * with two arguments: (arrVal, othVal).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n *\n * _.xorWith(objects, others, _.isEqual);\n * // => [{ 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]\n */\n var xorWith = baseRest(function(arrays) {\n var comparator = last(arrays);\n comparator = typeof comparator == 'function' ? comparator : undefined;\n return baseXor(arrayFilter(arrays, isArrayLikeObject), undefined, comparator);\n });\n\n /**\n * Creates an array of grouped elements, the first of which contains the\n * first elements of the given arrays, the second of which contains the\n * second elements of the given arrays, and so on.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {...Array} [arrays] The arrays to process.\n * @returns {Array} Returns the new array of grouped elements.\n * @example\n *\n * _.zip(['a', 'b'], [1, 2], [true, false]);\n * // => [['a', 1, true], ['b', 2, false]]\n */\n var zip = baseRest(unzip);\n\n /**\n * This method is like `_.fromPairs` except that it accepts two arrays,\n * one of property identifiers and one of corresponding values.\n *\n * @static\n * @memberOf _\n * @since 0.4.0\n * @category Array\n * @param {Array} [props=[]] The property identifiers.\n * @param {Array} [values=[]] The property values.\n * @returns {Object} Returns the new object.\n * @example\n *\n * _.zipObject(['a', 'b'], [1, 2]);\n * // => { 'a': 1, 'b': 2 }\n */\n function zipObject(props, values) {\n return baseZipObject(props || [], values || [], assignValue);\n }\n\n /**\n * This method is like `_.zipObject` except that it supports property paths.\n *\n * @static\n * @memberOf _\n * @since 4.1.0\n * @category Array\n * @param {Array} [props=[]] The property identifiers.\n * @param {Array} [values=[]] The property values.\n * @returns {Object} Returns the new object.\n * @example\n *\n * _.zipObjectDeep(['a.b[0].c', 'a.b[1].d'], [1, 2]);\n * // => { 'a': { 'b': [{ 'c': 1 }, { 'd': 2 }] } }\n */\n function zipObjectDeep(props, values) {\n return baseZipObject(props || [], values || [], baseSet);\n }\n\n /**\n * This method is like `_.zip` except that it accepts `iteratee` to specify\n * how grouped values should be combined. The iteratee is invoked with the\n * elements of each group: (...group).\n *\n * @static\n * @memberOf _\n * @since 3.8.0\n * @category Array\n * @param {...Array} [arrays] The arrays to process.\n * @param {Function} [iteratee=_.identity] The function to combine\n * grouped values.\n * @returns {Array} Returns the new array of grouped elements.\n * @example\n *\n * _.zipWith([1, 2], [10, 20], [100, 200], function(a, b, c) {\n * return a + b + c;\n * });\n * // => [111, 222]\n */\n var zipWith = baseRest(function(arrays) {\n var length = arrays.length,\n iteratee = length > 1 ? arrays[length - 1] : undefined;\n\n iteratee = typeof iteratee == 'function' ? (arrays.pop(), iteratee) : undefined;\n return unzipWith(arrays, iteratee);\n });\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a `lodash` wrapper instance that wraps `value` with explicit method\n * chain sequences enabled. The result of such sequences must be unwrapped\n * with `_#value`.\n *\n * @static\n * @memberOf _\n * @since 1.3.0\n * @category Seq\n * @param {*} value The value to wrap.\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36 },\n * { 'user': 'fred', 'age': 40 },\n * { 'user': 'pebbles', 'age': 1 }\n * ];\n *\n * var youngest = _\n * .chain(users)\n * .sortBy('age')\n * .map(function(o) {\n * return o.user + ' is ' + o.age;\n * })\n * .head()\n * .value();\n * // => 'pebbles is 1'\n */\n function chain(value) {\n var result = lodash(value);\n result.__chain__ = true;\n return result;\n }\n\n /**\n * This method invokes `interceptor` and returns `value`. The interceptor\n * is invoked with one argument; (value). The purpose of this method is to\n * \"tap into\" a method chain sequence in order to modify intermediate results.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Seq\n * @param {*} value The value to provide to `interceptor`.\n * @param {Function} interceptor The function to invoke.\n * @returns {*} Returns `value`.\n * @example\n *\n * _([1, 2, 3])\n * .tap(function(array) {\n * // Mutate input array.\n * array.pop();\n * })\n * .reverse()\n * .value();\n * // => [2, 1]\n */\n function tap(value, interceptor) {\n interceptor(value);\n return value;\n }\n\n /**\n * This method is like `_.tap` except that it returns the result of `interceptor`.\n * The purpose of this method is to \"pass thru\" values replacing intermediate\n * results in a method chain sequence.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Seq\n * @param {*} value The value to provide to `interceptor`.\n * @param {Function} interceptor The function to invoke.\n * @returns {*} Returns the result of `interceptor`.\n * @example\n *\n * _(' abc ')\n * .chain()\n * .trim()\n * .thru(function(value) {\n * return [value];\n * })\n * .value();\n * // => ['abc']\n */\n function thru(value, interceptor) {\n return interceptor(value);\n }\n\n /**\n * This method is the wrapper version of `_.at`.\n *\n * @name at\n * @memberOf _\n * @since 1.0.0\n * @category Seq\n * @param {...(string|string[])} [paths] The property paths to pick.\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };\n *\n * _(object).at(['a[0].b.c', 'a[1]']).value();\n * // => [3, 4]\n */\n var wrapperAt = flatRest(function(paths) {\n var length = paths.length,\n start = length ? paths[0] : 0,\n value = this.__wrapped__,\n interceptor = function(object) { return baseAt(object, paths); };\n\n if (length > 1 || this.__actions__.length ||\n !(value instanceof LazyWrapper) || !isIndex(start)) {\n return this.thru(interceptor);\n }\n value = value.slice(start, +start + (length ? 1 : 0));\n value.__actions__.push({\n 'func': thru,\n 'args': [interceptor],\n 'thisArg': undefined\n });\n return new LodashWrapper(value, this.__chain__).thru(function(array) {\n if (length && !array.length) {\n array.push(undefined);\n }\n return array;\n });\n });\n\n /**\n * Creates a `lodash` wrapper instance with explicit method chain sequences enabled.\n *\n * @name chain\n * @memberOf _\n * @since 0.1.0\n * @category Seq\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36 },\n * { 'user': 'fred', 'age': 40 }\n * ];\n *\n * // A sequence without explicit chaining.\n * _(users).head();\n * // => { 'user': 'barney', 'age': 36 }\n *\n * // A sequence with explicit chaining.\n * _(users)\n * .chain()\n * .head()\n * .pick('user')\n * .value();\n * // => { 'user': 'barney' }\n */\n function wrapperChain() {\n return chain(this);\n }\n\n /**\n * Executes the chain sequence and returns the wrapped result.\n *\n * @name commit\n * @memberOf _\n * @since 3.2.0\n * @category Seq\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var array = [1, 2];\n * var wrapped = _(array).push(3);\n *\n * console.log(array);\n * // => [1, 2]\n *\n * wrapped = wrapped.commit();\n * console.log(array);\n * // => [1, 2, 3]\n *\n * wrapped.last();\n * // => 3\n *\n * console.log(array);\n * // => [1, 2, 3]\n */\n function wrapperCommit() {\n return new LodashWrapper(this.value(), this.__chain__);\n }\n\n /**\n * Gets the next value on a wrapped object following the\n * [iterator protocol](https://mdn.io/iteration_protocols#iterator).\n *\n * @name next\n * @memberOf _\n * @since 4.0.0\n * @category Seq\n * @returns {Object} Returns the next iterator value.\n * @example\n *\n * var wrapped = _([1, 2]);\n *\n * wrapped.next();\n * // => { 'done': false, 'value': 1 }\n *\n * wrapped.next();\n * // => { 'done': false, 'value': 2 }\n *\n * wrapped.next();\n * // => { 'done': true, 'value': undefined }\n */\n function wrapperNext() {\n if (this.__values__ === undefined) {\n this.__values__ = toArray(this.value());\n }\n var done = this.__index__ >= this.__values__.length,\n value = done ? undefined : this.__values__[this.__index__++];\n\n return { 'done': done, 'value': value };\n }\n\n /**\n * Enables the wrapper to be iterable.\n *\n * @name Symbol.iterator\n * @memberOf _\n * @since 4.0.0\n * @category Seq\n * @returns {Object} Returns the wrapper object.\n * @example\n *\n * var wrapped = _([1, 2]);\n *\n * wrapped[Symbol.iterator]() === wrapped;\n * // => true\n *\n * Array.from(wrapped);\n * // => [1, 2]\n */\n function wrapperToIterator() {\n return this;\n }\n\n /**\n * Creates a clone of the chain sequence planting `value` as the wrapped value.\n *\n * @name plant\n * @memberOf _\n * @since 3.2.0\n * @category Seq\n * @param {*} value The value to plant.\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * var wrapped = _([1, 2]).map(square);\n * var other = wrapped.plant([3, 4]);\n *\n * other.value();\n * // => [9, 16]\n *\n * wrapped.value();\n * // => [1, 4]\n */\n function wrapperPlant(value) {\n var result,\n parent = this;\n\n while (parent instanceof baseLodash) {\n var clone = wrapperClone(parent);\n clone.__index__ = 0;\n clone.__values__ = undefined;\n if (result) {\n previous.__wrapped__ = clone;\n } else {\n result = clone;\n }\n var previous = clone;\n parent = parent.__wrapped__;\n }\n previous.__wrapped__ = value;\n return result;\n }\n\n /**\n * This method is the wrapper version of `_.reverse`.\n *\n * **Note:** This method mutates the wrapped array.\n *\n * @name reverse\n * @memberOf _\n * @since 0.1.0\n * @category Seq\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var array = [1, 2, 3];\n *\n * _(array).reverse().value()\n * // => [3, 2, 1]\n *\n * console.log(array);\n * // => [3, 2, 1]\n */\n function wrapperReverse() {\n var value = this.__wrapped__;\n if (value instanceof LazyWrapper) {\n var wrapped = value;\n if (this.__actions__.length) {\n wrapped = new LazyWrapper(this);\n }\n wrapped = wrapped.reverse();\n wrapped.__actions__.push({\n 'func': thru,\n 'args': [reverse],\n 'thisArg': undefined\n });\n return new LodashWrapper(wrapped, this.__chain__);\n }\n return this.thru(reverse);\n }\n\n /**\n * Executes the chain sequence to resolve the unwrapped value.\n *\n * @name value\n * @memberOf _\n * @since 0.1.0\n * @alias toJSON, valueOf\n * @category Seq\n * @returns {*} Returns the resolved unwrapped value.\n * @example\n *\n * _([1, 2, 3]).value();\n * // => [1, 2, 3]\n */\n function wrapperValue() {\n return baseWrapperValue(this.__wrapped__, this.__actions__);\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates an object composed of keys generated from the results of running\n * each element of `collection` thru `iteratee`. The corresponding value of\n * each key is the number of times the key was returned by `iteratee`. The\n * iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n * @returns {Object} Returns the composed aggregate object.\n * @example\n *\n * _.countBy([6.1, 4.2, 6.3], Math.floor);\n * // => { '4': 1, '6': 2 }\n *\n * // The `_.property` iteratee shorthand.\n * _.countBy(['one', 'two', 'three'], 'length');\n * // => { '3': 2, '5': 1 }\n */\n var countBy = createAggregator(function(result, value, key) {\n if (hasOwnProperty.call(result, key)) {\n ++result[key];\n } else {\n baseAssignValue(result, key, 1);\n }\n });\n\n /**\n * Checks if `predicate` returns truthy for **all** elements of `collection`.\n * Iteration is stopped once `predicate` returns falsey. The predicate is\n * invoked with three arguments: (value, index|key, collection).\n *\n * **Note:** This method returns `true` for\n * [empty collections](https://en.wikipedia.org/wiki/Empty_set) because\n * [everything is true](https://en.wikipedia.org/wiki/Vacuous_truth) of\n * elements of empty collections.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {boolean} Returns `true` if all elements pass the predicate check,\n * else `false`.\n * @example\n *\n * _.every([true, 1, null, 'yes'], Boolean);\n * // => false\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': false },\n * { 'user': 'fred', 'age': 40, 'active': false }\n * ];\n *\n * // The `_.matches` iteratee shorthand.\n * _.every(users, { 'user': 'barney', 'active': false });\n * // => false\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.every(users, ['active', false]);\n * // => true\n *\n * // The `_.property` iteratee shorthand.\n * _.every(users, 'active');\n * // => false\n */\n function every(collection, predicate, guard) {\n var func = isArray(collection) ? arrayEvery : baseEvery;\n if (guard && isIterateeCall(collection, predicate, guard)) {\n predicate = undefined;\n }\n return func(collection, getIteratee(predicate, 3));\n }\n\n /**\n * Iterates over elements of `collection`, returning an array of all elements\n * `predicate` returns truthy for. The predicate is invoked with three\n * arguments: (value, index|key, collection).\n *\n * **Note:** Unlike `_.remove`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n * @see _.reject\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': true },\n * { 'user': 'fred', 'age': 40, 'active': false }\n * ];\n *\n * _.filter(users, function(o) { return !o.active; });\n * // => objects for ['fred']\n *\n * // The `_.matches` iteratee shorthand.\n * _.filter(users, { 'age': 36, 'active': true });\n * // => objects for ['barney']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.filter(users, ['active', false]);\n * // => objects for ['fred']\n *\n * // The `_.property` iteratee shorthand.\n * _.filter(users, 'active');\n * // => objects for ['barney']\n *\n * // Combining several predicates using `_.overEvery` or `_.overSome`.\n * _.filter(users, _.overSome([{ 'age': 36 }, ['age', 40]]));\n * // => objects for ['fred', 'barney']\n */\n function filter(collection, predicate) {\n var func = isArray(collection) ? arrayFilter : baseFilter;\n return func(collection, getIteratee(predicate, 3));\n }\n\n /**\n * Iterates over elements of `collection`, returning the first element\n * `predicate` returns truthy for. The predicate is invoked with three\n * arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {*} Returns the matched element, else `undefined`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': true },\n * { 'user': 'fred', 'age': 40, 'active': false },\n * { 'user': 'pebbles', 'age': 1, 'active': true }\n * ];\n *\n * _.find(users, function(o) { return o.age < 40; });\n * // => object for 'barney'\n *\n * // The `_.matches` iteratee shorthand.\n * _.find(users, { 'age': 1, 'active': true });\n * // => object for 'pebbles'\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.find(users, ['active', false]);\n * // => object for 'fred'\n *\n * // The `_.property` iteratee shorthand.\n * _.find(users, 'active');\n * // => object for 'barney'\n */\n var find = createFind(findIndex);\n\n /**\n * This method is like `_.find` except that it iterates over elements of\n * `collection` from right to left.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=collection.length-1] The index to search from.\n * @returns {*} Returns the matched element, else `undefined`.\n * @example\n *\n * _.findLast([1, 2, 3, 4], function(n) {\n * return n % 2 == 1;\n * });\n * // => 3\n */\n var findLast = createFind(findLastIndex);\n\n /**\n * Creates a flattened array of values by running each element in `collection`\n * thru `iteratee` and flattening the mapped results. The iteratee is invoked\n * with three arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * function duplicate(n) {\n * return [n, n];\n * }\n *\n * _.flatMap([1, 2], duplicate);\n * // => [1, 1, 2, 2]\n */\n function flatMap(collection, iteratee) {\n return baseFlatten(map(collection, iteratee), 1);\n }\n\n /**\n * This method is like `_.flatMap` except that it recursively flattens the\n * mapped results.\n *\n * @static\n * @memberOf _\n * @since 4.7.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * function duplicate(n) {\n * return [[[n, n]]];\n * }\n *\n * _.flatMapDeep([1, 2], duplicate);\n * // => [1, 1, 2, 2]\n */\n function flatMapDeep(collection, iteratee) {\n return baseFlatten(map(collection, iteratee), INFINITY);\n }\n\n /**\n * This method is like `_.flatMap` except that it recursively flattens the\n * mapped results up to `depth` times.\n *\n * @static\n * @memberOf _\n * @since 4.7.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {number} [depth=1] The maximum recursion depth.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * function duplicate(n) {\n * return [[[n, n]]];\n * }\n *\n * _.flatMapDepth([1, 2], duplicate, 2);\n * // => [[1, 1], [2, 2]]\n */\n function flatMapDepth(collection, iteratee, depth) {\n depth = depth === undefined ? 1 : toInteger(depth);\n return baseFlatten(map(collection, iteratee), depth);\n }\n\n /**\n * Iterates over elements of `collection` and invokes `iteratee` for each element.\n * The iteratee is invoked with three arguments: (value, index|key, collection).\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * **Note:** As with other \"Collections\" methods, objects with a \"length\"\n * property are iterated like arrays. To avoid this behavior use `_.forIn`\n * or `_.forOwn` for object iteration.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @alias each\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n * @see _.forEachRight\n * @example\n *\n * _.forEach([1, 2], function(value) {\n * console.log(value);\n * });\n * // => Logs `1` then `2`.\n *\n * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n */\n function forEach(collection, iteratee) {\n var func = isArray(collection) ? arrayEach : baseEach;\n return func(collection, getIteratee(iteratee, 3));\n }\n\n /**\n * This method is like `_.forEach` except that it iterates over elements of\n * `collection` from right to left.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @alias eachRight\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n * @see _.forEach\n * @example\n *\n * _.forEachRight([1, 2], function(value) {\n * console.log(value);\n * });\n * // => Logs `2` then `1`.\n */\n function forEachRight(collection, iteratee) {\n var func = isArray(collection) ? arrayEachRight : baseEachRight;\n return func(collection, getIteratee(iteratee, 3));\n }\n\n /**\n * Creates an object composed of keys generated from the results of running\n * each element of `collection` thru `iteratee`. The order of grouped values\n * is determined by the order they occur in `collection`. The corresponding\n * value of each key is an array of elements responsible for generating the\n * key. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n * @returns {Object} Returns the composed aggregate object.\n * @example\n *\n * _.groupBy([6.1, 4.2, 6.3], Math.floor);\n * // => { '4': [4.2], '6': [6.1, 6.3] }\n *\n * // The `_.property` iteratee shorthand.\n * _.groupBy(['one', 'two', 'three'], 'length');\n * // => { '3': ['one', 'two'], '5': ['three'] }\n */\n var groupBy = createAggregator(function(result, value, key) {\n if (hasOwnProperty.call(result, key)) {\n result[key].push(value);\n } else {\n baseAssignValue(result, key, [value]);\n }\n });\n\n /**\n * Checks if `value` is in `collection`. If `collection` is a string, it's\n * checked for a substring of `value`, otherwise\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * is used for equality comparisons. If `fromIndex` is negative, it's used as\n * the offset from the end of `collection`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object|string} collection The collection to inspect.\n * @param {*} value The value to search for.\n * @param {number} [fromIndex=0] The index to search from.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.\n * @returns {boolean} Returns `true` if `value` is found, else `false`.\n * @example\n *\n * _.includes([1, 2, 3], 1);\n * // => true\n *\n * _.includes([1, 2, 3], 1, 2);\n * // => false\n *\n * _.includes({ 'a': 1, 'b': 2 }, 1);\n * // => true\n *\n * _.includes('abcd', 'bc');\n * // => true\n */\n function includes(collection, value, fromIndex, guard) {\n collection = isArrayLike(collection) ? collection : values(collection);\n fromIndex = (fromIndex && !guard) ? toInteger(fromIndex) : 0;\n\n var length = collection.length;\n if (fromIndex < 0) {\n fromIndex = nativeMax(length + fromIndex, 0);\n }\n return isString(collection)\n ? (fromIndex <= length && collection.indexOf(value, fromIndex) > -1)\n : (!!length && baseIndexOf(collection, value, fromIndex) > -1);\n }\n\n /**\n * Invokes the method at `path` of each element in `collection`, returning\n * an array of the results of each invoked method. Any additional arguments\n * are provided to each invoked method. If `path` is a function, it's invoked\n * for, and `this` bound to, each element in `collection`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Array|Function|string} path The path of the method to invoke or\n * the function invoked per iteration.\n * @param {...*} [args] The arguments to invoke each method with.\n * @returns {Array} Returns the array of results.\n * @example\n *\n * _.invokeMap([[5, 1, 7], [3, 2, 1]], 'sort');\n * // => [[1, 5, 7], [1, 2, 3]]\n *\n * _.invokeMap([123, 456], String.prototype.split, '');\n * // => [['1', '2', '3'], ['4', '5', '6']]\n */\n var invokeMap = baseRest(function(collection, path, args) {\n var index = -1,\n isFunc = typeof path == 'function',\n result = isArrayLike(collection) ? Array(collection.length) : [];\n\n baseEach(collection, function(value) {\n result[++index] = isFunc ? apply(path, value, args) : baseInvoke(value, path, args);\n });\n return result;\n });\n\n /**\n * Creates an object composed of keys generated from the results of running\n * each element of `collection` thru `iteratee`. The corresponding value of\n * each key is the last element responsible for generating the key. The\n * iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n * @returns {Object} Returns the composed aggregate object.\n * @example\n *\n * var array = [\n * { 'dir': 'left', 'code': 97 },\n * { 'dir': 'right', 'code': 100 }\n * ];\n *\n * _.keyBy(array, function(o) {\n * return String.fromCharCode(o.code);\n * });\n * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } }\n *\n * _.keyBy(array, 'dir');\n * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } }\n */\n var keyBy = createAggregator(function(result, value, key) {\n baseAssignValue(result, key, value);\n });\n\n /**\n * Creates an array of values by running each element in `collection` thru\n * `iteratee`. The iteratee is invoked with three arguments:\n * (value, index|key, collection).\n *\n * Many lodash methods are guarded to work as iteratees for methods like\n * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`.\n *\n * The guarded methods are:\n * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`,\n * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`,\n * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`,\n * `template`, `trim`, `trimEnd`, `trimStart`, and `words`\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * _.map([4, 8], square);\n * // => [16, 64]\n *\n * _.map({ 'a': 4, 'b': 8 }, square);\n * // => [16, 64] (iteration order is not guaranteed)\n *\n * var users = [\n * { 'user': 'barney' },\n * { 'user': 'fred' }\n * ];\n *\n * // The `_.property` iteratee shorthand.\n * _.map(users, 'user');\n * // => ['barney', 'fred']\n */\n function map(collection, iteratee) {\n var func = isArray(collection) ? arrayMap : baseMap;\n return func(collection, getIteratee(iteratee, 3));\n }\n\n /**\n * This method is like `_.sortBy` except that it allows specifying the sort\n * orders of the iteratees to sort by. If `orders` is unspecified, all values\n * are sorted in ascending order. Otherwise, specify an order of \"desc\" for\n * descending or \"asc\" for ascending sort order of corresponding values.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Array[]|Function[]|Object[]|string[]} [iteratees=[_.identity]]\n * The iteratees to sort by.\n * @param {string[]} [orders] The sort orders of `iteratees`.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.\n * @returns {Array} Returns the new sorted array.\n * @example\n *\n * var users = [\n * { 'user': 'fred', 'age': 48 },\n * { 'user': 'barney', 'age': 34 },\n * { 'user': 'fred', 'age': 40 },\n * { 'user': 'barney', 'age': 36 }\n * ];\n *\n * // Sort by `user` in ascending order and by `age` in descending order.\n * _.orderBy(users, ['user', 'age'], ['asc', 'desc']);\n * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]]\n */\n function orderBy(collection, iteratees, orders, guard) {\n if (collection == null) {\n return [];\n }\n if (!isArray(iteratees)) {\n iteratees = iteratees == null ? [] : [iteratees];\n }\n orders = guard ? undefined : orders;\n if (!isArray(orders)) {\n orders = orders == null ? [] : [orders];\n }\n return baseOrderBy(collection, iteratees, orders);\n }\n\n /**\n * Creates an array of elements split into two groups, the first of which\n * contains elements `predicate` returns truthy for, the second of which\n * contains elements `predicate` returns falsey for. The predicate is\n * invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the array of grouped elements.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': false },\n * { 'user': 'fred', 'age': 40, 'active': true },\n * { 'user': 'pebbles', 'age': 1, 'active': false }\n * ];\n *\n * _.partition(users, function(o) { return o.active; });\n * // => objects for [['fred'], ['barney', 'pebbles']]\n *\n * // The `_.matches` iteratee shorthand.\n * _.partition(users, { 'age': 1, 'active': false });\n * // => objects for [['pebbles'], ['barney', 'fred']]\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.partition(users, ['active', false]);\n * // => objects for [['barney', 'pebbles'], ['fred']]\n *\n * // The `_.property` iteratee shorthand.\n * _.partition(users, 'active');\n * // => objects for [['fred'], ['barney', 'pebbles']]\n */\n var partition = createAggregator(function(result, value, key) {\n result[key ? 0 : 1].push(value);\n }, function() { return [[], []]; });\n\n /**\n * Reduces `collection` to a value which is the accumulated result of running\n * each element in `collection` thru `iteratee`, where each successive\n * invocation is supplied the return value of the previous. If `accumulator`\n * is not given, the first element of `collection` is used as the initial\n * value. The iteratee is invoked with four arguments:\n * (accumulator, value, index|key, collection).\n *\n * Many lodash methods are guarded to work as iteratees for methods like\n * `_.reduce`, `_.reduceRight`, and `_.transform`.\n *\n * The guarded methods are:\n * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`,\n * and `sortBy`\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @returns {*} Returns the accumulated value.\n * @see _.reduceRight\n * @example\n *\n * _.reduce([1, 2], function(sum, n) {\n * return sum + n;\n * }, 0);\n * // => 3\n *\n * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {\n * (result[value] || (result[value] = [])).push(key);\n * return result;\n * }, {});\n * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed)\n */\n function reduce(collection, iteratee, accumulator) {\n var func = isArray(collection) ? arrayReduce : baseReduce,\n initAccum = arguments.length < 3;\n\n return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEach);\n }\n\n /**\n * This method is like `_.reduce` except that it iterates over elements of\n * `collection` from right to left.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @returns {*} Returns the accumulated value.\n * @see _.reduce\n * @example\n *\n * var array = [[0, 1], [2, 3], [4, 5]];\n *\n * _.reduceRight(array, function(flattened, other) {\n * return flattened.concat(other);\n * }, []);\n * // => [4, 5, 2, 3, 0, 1]\n */\n function reduceRight(collection, iteratee, accumulator) {\n var func = isArray(collection) ? arrayReduceRight : baseReduce,\n initAccum = arguments.length < 3;\n\n return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEachRight);\n }\n\n /**\n * The opposite of `_.filter`; this method returns the elements of `collection`\n * that `predicate` does **not** return truthy for.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n * @see _.filter\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': false },\n * { 'user': 'fred', 'age': 40, 'active': true }\n * ];\n *\n * _.reject(users, function(o) { return !o.active; });\n * // => objects for ['fred']\n *\n * // The `_.matches` iteratee shorthand.\n * _.reject(users, { 'age': 40, 'active': true });\n * // => objects for ['barney']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.reject(users, ['active', false]);\n * // => objects for ['fred']\n *\n * // The `_.property` iteratee shorthand.\n * _.reject(users, 'active');\n * // => objects for ['barney']\n */\n function reject(collection, predicate) {\n var func = isArray(collection) ? arrayFilter : baseFilter;\n return func(collection, negate(getIteratee(predicate, 3)));\n }\n\n /**\n * Gets a random element from `collection`.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to sample.\n * @returns {*} Returns the random element.\n * @example\n *\n * _.sample([1, 2, 3, 4]);\n * // => 2\n */\n function sample(collection) {\n var func = isArray(collection) ? arraySample : baseSample;\n return func(collection);\n }\n\n /**\n * Gets `n` random elements at unique keys from `collection` up to the\n * size of `collection`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to sample.\n * @param {number} [n=1] The number of elements to sample.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the random elements.\n * @example\n *\n * _.sampleSize([1, 2, 3], 2);\n * // => [3, 1]\n *\n * _.sampleSize([1, 2, 3], 4);\n * // => [2, 3, 1]\n */\n function sampleSize(collection, n, guard) {\n if ((guard ? isIterateeCall(collection, n, guard) : n === undefined)) {\n n = 1;\n } else {\n n = toInteger(n);\n }\n var func = isArray(collection) ? arraySampleSize : baseSampleSize;\n return func(collection, n);\n }\n\n /**\n * Creates an array of shuffled values, using a version of the\n * [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher-Yates_shuffle).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to shuffle.\n * @returns {Array} Returns the new shuffled array.\n * @example\n *\n * _.shuffle([1, 2, 3, 4]);\n * // => [4, 1, 3, 2]\n */\n function shuffle(collection) {\n var func = isArray(collection) ? arrayShuffle : baseShuffle;\n return func(collection);\n }\n\n /**\n * Gets the size of `collection` by returning its length for array-like\n * values or the number of own enumerable string keyed properties for objects.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object|string} collection The collection to inspect.\n * @returns {number} Returns the collection size.\n * @example\n *\n * _.size([1, 2, 3]);\n * // => 3\n *\n * _.size({ 'a': 1, 'b': 2 });\n * // => 2\n *\n * _.size('pebbles');\n * // => 7\n */\n function size(collection) {\n if (collection == null) {\n return 0;\n }\n if (isArrayLike(collection)) {\n return isString(collection) ? stringSize(collection) : collection.length;\n }\n var tag = getTag(collection);\n if (tag == mapTag || tag == setTag) {\n return collection.size;\n }\n return baseKeys(collection).length;\n }\n\n /**\n * Checks if `predicate` returns truthy for **any** element of `collection`.\n * Iteration is stopped once `predicate` returns truthy. The predicate is\n * invoked with three arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n * @example\n *\n * _.some([null, 0, 'yes', false], Boolean);\n * // => true\n *\n * var users = [\n * { 'user': 'barney', 'active': true },\n * { 'user': 'fred', 'active': false }\n * ];\n *\n * // The `_.matches` iteratee shorthand.\n * _.some(users, { 'user': 'barney', 'active': false });\n * // => false\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.some(users, ['active', false]);\n * // => true\n *\n * // The `_.property` iteratee shorthand.\n * _.some(users, 'active');\n * // => true\n */\n function some(collection, predicate, guard) {\n var func = isArray(collection) ? arraySome : baseSome;\n if (guard && isIterateeCall(collection, predicate, guard)) {\n predicate = undefined;\n }\n return func(collection, getIteratee(predicate, 3));\n }\n\n /**\n * Creates an array of elements, sorted in ascending order by the results of\n * running each element in a collection thru each iteratee. This method\n * performs a stable sort, that is, it preserves the original sort order of\n * equal elements. The iteratees are invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {...(Function|Function[])} [iteratees=[_.identity]]\n * The iteratees to sort by.\n * @returns {Array} Returns the new sorted array.\n * @example\n *\n * var users = [\n * { 'user': 'fred', 'age': 48 },\n * { 'user': 'barney', 'age': 36 },\n * { 'user': 'fred', 'age': 30 },\n * { 'user': 'barney', 'age': 34 }\n * ];\n *\n * _.sortBy(users, [function(o) { return o.user; }]);\n * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 30]]\n *\n * _.sortBy(users, ['user', 'age']);\n * // => objects for [['barney', 34], ['barney', 36], ['fred', 30], ['fred', 48]]\n */\n var sortBy = baseRest(function(collection, iteratees) {\n if (collection == null) {\n return [];\n }\n var length = iteratees.length;\n if (length > 1 && isIterateeCall(collection, iteratees[0], iteratees[1])) {\n iteratees = [];\n } else if (length > 2 && isIterateeCall(iteratees[0], iteratees[1], iteratees[2])) {\n iteratees = [iteratees[0]];\n }\n return baseOrderBy(collection, baseFlatten(iteratees, 1), []);\n });\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\n var now = ctxNow || function() {\n return root.Date.now();\n };\n\n /*------------------------------------------------------------------------*/\n\n /**\n * The opposite of `_.before`; this method creates a function that invokes\n * `func` once it's called `n` or more times.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {number} n The number of calls before `func` is invoked.\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new restricted function.\n * @example\n *\n * var saves = ['profile', 'settings'];\n *\n * var done = _.after(saves.length, function() {\n * console.log('done saving!');\n * });\n *\n * _.forEach(saves, function(type) {\n * asyncSave({ 'type': type, 'complete': done });\n * });\n * // => Logs 'done saving!' after the two async saves have completed.\n */\n function after(n, func) {\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n n = toInteger(n);\n return function() {\n if (--n < 1) {\n return func.apply(this, arguments);\n }\n };\n }\n\n /**\n * Creates a function that invokes `func`, with up to `n` arguments,\n * ignoring any additional arguments.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {Function} func The function to cap arguments for.\n * @param {number} [n=func.length] The arity cap.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Function} Returns the new capped function.\n * @example\n *\n * _.map(['6', '8', '10'], _.ary(parseInt, 1));\n * // => [6, 8, 10]\n */\n function ary(func, n, guard) {\n n = guard ? undefined : n;\n n = (func && n == null) ? func.length : n;\n return createWrap(func, WRAP_ARY_FLAG, undefined, undefined, undefined, undefined, n);\n }\n\n /**\n * Creates a function that invokes `func`, with the `this` binding and arguments\n * of the created function, while it's called less than `n` times. Subsequent\n * calls to the created function return the result of the last `func` invocation.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {number} n The number of calls at which `func` is no longer invoked.\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new restricted function.\n * @example\n *\n * jQuery(element).on('click', _.before(5, addContactToList));\n * // => Allows adding up to 4 contacts to the list.\n */\n function before(n, func) {\n var result;\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n n = toInteger(n);\n return function() {\n if (--n > 0) {\n result = func.apply(this, arguments);\n }\n if (n <= 1) {\n func = undefined;\n }\n return result;\n };\n }\n\n /**\n * Creates a function that invokes `func` with the `this` binding of `thisArg`\n * and `partials` prepended to the arguments it receives.\n *\n * The `_.bind.placeholder` value, which defaults to `_` in monolithic builds,\n * may be used as a placeholder for partially applied arguments.\n *\n * **Note:** Unlike native `Function#bind`, this method doesn't set the \"length\"\n * property of bound functions.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to bind.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {...*} [partials] The arguments to be partially applied.\n * @returns {Function} Returns the new bound function.\n * @example\n *\n * function greet(greeting, punctuation) {\n * return greeting + ' ' + this.user + punctuation;\n * }\n *\n * var object = { 'user': 'fred' };\n *\n * var bound = _.bind(greet, object, 'hi');\n * bound('!');\n * // => 'hi fred!'\n *\n * // Bound with placeholders.\n * var bound = _.bind(greet, object, _, '!');\n * bound('hi');\n * // => 'hi fred!'\n */\n var bind = baseRest(function(func, thisArg, partials) {\n var bitmask = WRAP_BIND_FLAG;\n if (partials.length) {\n var holders = replaceHolders(partials, getHolder(bind));\n bitmask |= WRAP_PARTIAL_FLAG;\n }\n return createWrap(func, bitmask, thisArg, partials, holders);\n });\n\n /**\n * Creates a function that invokes the method at `object[key]` with `partials`\n * prepended to the arguments it receives.\n *\n * This method differs from `_.bind` by allowing bound functions to reference\n * methods that may be redefined or don't yet exist. See\n * [Peter Michaux's article](http://peter.michaux.ca/articles/lazy-function-definition-pattern)\n * for more details.\n *\n * The `_.bindKey.placeholder` value, which defaults to `_` in monolithic\n * builds, may be used as a placeholder for partially applied arguments.\n *\n * @static\n * @memberOf _\n * @since 0.10.0\n * @category Function\n * @param {Object} object The object to invoke the method on.\n * @param {string} key The key of the method.\n * @param {...*} [partials] The arguments to be partially applied.\n * @returns {Function} Returns the new bound function.\n * @example\n *\n * var object = {\n * 'user': 'fred',\n * 'greet': function(greeting, punctuation) {\n * return greeting + ' ' + this.user + punctuation;\n * }\n * };\n *\n * var bound = _.bindKey(object, 'greet', 'hi');\n * bound('!');\n * // => 'hi fred!'\n *\n * object.greet = function(greeting, punctuation) {\n * return greeting + 'ya ' + this.user + punctuation;\n * };\n *\n * bound('!');\n * // => 'hiya fred!'\n *\n * // Bound with placeholders.\n * var bound = _.bindKey(object, 'greet', _, '!');\n * bound('hi');\n * // => 'hiya fred!'\n */\n var bindKey = baseRest(function(object, key, partials) {\n var bitmask = WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG;\n if (partials.length) {\n var holders = replaceHolders(partials, getHolder(bindKey));\n bitmask |= WRAP_PARTIAL_FLAG;\n }\n return createWrap(key, bitmask, object, partials, holders);\n });\n\n /**\n * Creates a function that accepts arguments of `func` and either invokes\n * `func` returning its result, if at least `arity` number of arguments have\n * been provided, or returns a function that accepts the remaining `func`\n * arguments, and so on. The arity of `func` may be specified if `func.length`\n * is not sufficient.\n *\n * The `_.curry.placeholder` value, which defaults to `_` in monolithic builds,\n * may be used as a placeholder for provided arguments.\n *\n * **Note:** This method doesn't set the \"length\" property of curried functions.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Function\n * @param {Function} func The function to curry.\n * @param {number} [arity=func.length] The arity of `func`.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Function} Returns the new curried function.\n * @example\n *\n * var abc = function(a, b, c) {\n * return [a, b, c];\n * };\n *\n * var curried = _.curry(abc);\n *\n * curried(1)(2)(3);\n * // => [1, 2, 3]\n *\n * curried(1, 2)(3);\n * // => [1, 2, 3]\n *\n * curried(1, 2, 3);\n * // => [1, 2, 3]\n *\n * // Curried with placeholders.\n * curried(1)(_, 3)(2);\n * // => [1, 2, 3]\n */\n function curry(func, arity, guard) {\n arity = guard ? undefined : arity;\n var result = createWrap(func, WRAP_CURRY_FLAG, undefined, undefined, undefined, undefined, undefined, arity);\n result.placeholder = curry.placeholder;\n return result;\n }\n\n /**\n * This method is like `_.curry` except that arguments are applied to `func`\n * in the manner of `_.partialRight` instead of `_.partial`.\n *\n * The `_.curryRight.placeholder` value, which defaults to `_` in monolithic\n * builds, may be used as a placeholder for provided arguments.\n *\n * **Note:** This method doesn't set the \"length\" property of curried functions.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {Function} func The function to curry.\n * @param {number} [arity=func.length] The arity of `func`.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Function} Returns the new curried function.\n * @example\n *\n * var abc = function(a, b, c) {\n * return [a, b, c];\n * };\n *\n * var curried = _.curryRight(abc);\n *\n * curried(3)(2)(1);\n * // => [1, 2, 3]\n *\n * curried(2, 3)(1);\n * // => [1, 2, 3]\n *\n * curried(1, 2, 3);\n * // => [1, 2, 3]\n *\n * // Curried with placeholders.\n * curried(3)(1, _)(2);\n * // => [1, 2, 3]\n */\n function curryRight(func, arity, guard) {\n arity = guard ? undefined : arity;\n var result = createWrap(func, WRAP_CURRY_RIGHT_FLAG, undefined, undefined, undefined, undefined, undefined, arity);\n result.placeholder = curryRight.placeholder;\n return result;\n }\n\n /**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\n function debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n timeWaiting = wait - timeSinceLastCall;\n\n return maxing\n ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n : timeWaiting;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n clearTimeout(timerId);\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n }\n\n /**\n * Defers invoking the `func` until the current call stack has cleared. Any\n * additional arguments are provided to `func` when it's invoked.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to defer.\n * @param {...*} [args] The arguments to invoke `func` with.\n * @returns {number} Returns the timer id.\n * @example\n *\n * _.defer(function(text) {\n * console.log(text);\n * }, 'deferred');\n * // => Logs 'deferred' after one millisecond.\n */\n var defer = baseRest(function(func, args) {\n return baseDelay(func, 1, args);\n });\n\n /**\n * Invokes `func` after `wait` milliseconds. Any additional arguments are\n * provided to `func` when it's invoked.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to delay.\n * @param {number} wait The number of milliseconds to delay invocation.\n * @param {...*} [args] The arguments to invoke `func` with.\n * @returns {number} Returns the timer id.\n * @example\n *\n * _.delay(function(text) {\n * console.log(text);\n * }, 1000, 'later');\n * // => Logs 'later' after one second.\n */\n var delay = baseRest(function(func, wait, args) {\n return baseDelay(func, toNumber(wait) || 0, args);\n });\n\n /**\n * Creates a function that invokes `func` with arguments reversed.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Function\n * @param {Function} func The function to flip arguments for.\n * @returns {Function} Returns the new flipped function.\n * @example\n *\n * var flipped = _.flip(function() {\n * return _.toArray(arguments);\n * });\n *\n * flipped('a', 'b', 'c', 'd');\n * // => ['d', 'c', 'b', 'a']\n */\n function flip(func) {\n return createWrap(func, WRAP_FLIP_FLAG);\n }\n\n /**\n * Creates a function that memoizes the result of `func`. If `resolver` is\n * provided, it determines the cache key for storing the result based on the\n * arguments provided to the memoized function. By default, the first argument\n * provided to the memoized function is used as the map cache key. The `func`\n * is invoked with the `this` binding of the memoized function.\n *\n * **Note:** The cache is exposed as the `cache` property on the memoized\n * function. Its creation may be customized by replacing the `_.memoize.Cache`\n * constructor with one whose instances implement the\n * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n * method interface of `clear`, `delete`, `get`, `has`, and `set`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to have its output memoized.\n * @param {Function} [resolver] The function to resolve the cache key.\n * @returns {Function} Returns the new memoized function.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n * var other = { 'c': 3, 'd': 4 };\n *\n * var values = _.memoize(_.values);\n * values(object);\n * // => [1, 2]\n *\n * values(other);\n * // => [3, 4]\n *\n * object.a = 2;\n * values(object);\n * // => [1, 2]\n *\n * // Modify the result cache.\n * values.cache.set(object, ['a', 'b']);\n * values(object);\n * // => ['a', 'b']\n *\n * // Replace `_.memoize.Cache`.\n * _.memoize.Cache = WeakMap;\n */\n function memoize(func, resolver) {\n if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n var memoized = function() {\n var args = arguments,\n key = resolver ? resolver.apply(this, args) : args[0],\n cache = memoized.cache;\n\n if (cache.has(key)) {\n return cache.get(key);\n }\n var result = func.apply(this, args);\n memoized.cache = cache.set(key, result) || cache;\n return result;\n };\n memoized.cache = new (memoize.Cache || MapCache);\n return memoized;\n }\n\n // Expose `MapCache`.\n memoize.Cache = MapCache;\n\n /**\n * Creates a function that negates the result of the predicate `func`. The\n * `func` predicate is invoked with the `this` binding and arguments of the\n * created function.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {Function} predicate The predicate to negate.\n * @returns {Function} Returns the new negated function.\n * @example\n *\n * function isEven(n) {\n * return n % 2 == 0;\n * }\n *\n * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven));\n * // => [1, 3, 5]\n */\n function negate(predicate) {\n if (typeof predicate != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n return function() {\n var args = arguments;\n switch (args.length) {\n case 0: return !predicate.call(this);\n case 1: return !predicate.call(this, args[0]);\n case 2: return !predicate.call(this, args[0], args[1]);\n case 3: return !predicate.call(this, args[0], args[1], args[2]);\n }\n return !predicate.apply(this, args);\n };\n }\n\n /**\n * Creates a function that is restricted to invoking `func` once. Repeat calls\n * to the function return the value of the first invocation. The `func` is\n * invoked with the `this` binding and arguments of the created function.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new restricted function.\n * @example\n *\n * var initialize = _.once(createApplication);\n * initialize();\n * initialize();\n * // => `createApplication` is invoked once\n */\n function once(func) {\n return before(2, func);\n }\n\n /**\n * Creates a function that invokes `func` with its arguments transformed.\n *\n * @static\n * @since 4.0.0\n * @memberOf _\n * @category Function\n * @param {Function} func The function to wrap.\n * @param {...(Function|Function[])} [transforms=[_.identity]]\n * The argument transforms.\n * @returns {Function} Returns the new function.\n * @example\n *\n * function doubled(n) {\n * return n * 2;\n * }\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * var func = _.overArgs(function(x, y) {\n * return [x, y];\n * }, [square, doubled]);\n *\n * func(9, 3);\n * // => [81, 6]\n *\n * func(10, 5);\n * // => [100, 10]\n */\n var overArgs = castRest(function(func, transforms) {\n transforms = (transforms.length == 1 && isArray(transforms[0]))\n ? arrayMap(transforms[0], baseUnary(getIteratee()))\n : arrayMap(baseFlatten(transforms, 1), baseUnary(getIteratee()));\n\n var funcsLength = transforms.length;\n return baseRest(function(args) {\n var index = -1,\n length = nativeMin(args.length, funcsLength);\n\n while (++index < length) {\n args[index] = transforms[index].call(this, args[index]);\n }\n return apply(func, this, args);\n });\n });\n\n /**\n * Creates a function that invokes `func` with `partials` prepended to the\n * arguments it receives. This method is like `_.bind` except it does **not**\n * alter the `this` binding.\n *\n * The `_.partial.placeholder` value, which defaults to `_` in monolithic\n * builds, may be used as a placeholder for partially applied arguments.\n *\n * **Note:** This method doesn't set the \"length\" property of partially\n * applied functions.\n *\n * @static\n * @memberOf _\n * @since 0.2.0\n * @category Function\n * @param {Function} func The function to partially apply arguments to.\n * @param {...*} [partials] The arguments to be partially applied.\n * @returns {Function} Returns the new partially applied function.\n * @example\n *\n * function greet(greeting, name) {\n * return greeting + ' ' + name;\n * }\n *\n * var sayHelloTo = _.partial(greet, 'hello');\n * sayHelloTo('fred');\n * // => 'hello fred'\n *\n * // Partially applied with placeholders.\n * var greetFred = _.partial(greet, _, 'fred');\n * greetFred('hi');\n * // => 'hi fred'\n */\n var partial = baseRest(function(func, partials) {\n var holders = replaceHolders(partials, getHolder(partial));\n return createWrap(func, WRAP_PARTIAL_FLAG, undefined, partials, holders);\n });\n\n /**\n * This method is like `_.partial` except that partially applied arguments\n * are appended to the arguments it receives.\n *\n * The `_.partialRight.placeholder` value, which defaults to `_` in monolithic\n * builds, may be used as a placeholder for partially applied arguments.\n *\n * **Note:** This method doesn't set the \"length\" property of partially\n * applied functions.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Function\n * @param {Function} func The function to partially apply arguments to.\n * @param {...*} [partials] The arguments to be partially applied.\n * @returns {Function} Returns the new partially applied function.\n * @example\n *\n * function greet(greeting, name) {\n * return greeting + ' ' + name;\n * }\n *\n * var greetFred = _.partialRight(greet, 'fred');\n * greetFred('hi');\n * // => 'hi fred'\n *\n * // Partially applied with placeholders.\n * var sayHelloTo = _.partialRight(greet, 'hello', _);\n * sayHelloTo('fred');\n * // => 'hello fred'\n */\n var partialRight = baseRest(function(func, partials) {\n var holders = replaceHolders(partials, getHolder(partialRight));\n return createWrap(func, WRAP_PARTIAL_RIGHT_FLAG, undefined, partials, holders);\n });\n\n /**\n * Creates a function that invokes `func` with arguments arranged according\n * to the specified `indexes` where the argument value at the first index is\n * provided as the first argument, the argument value at the second index is\n * provided as the second argument, and so on.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {Function} func The function to rearrange arguments for.\n * @param {...(number|number[])} indexes The arranged argument indexes.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var rearged = _.rearg(function(a, b, c) {\n * return [a, b, c];\n * }, [2, 0, 1]);\n *\n * rearged('b', 'c', 'a')\n * // => ['a', 'b', 'c']\n */\n var rearg = flatRest(function(func, indexes) {\n return createWrap(func, WRAP_REARG_FLAG, undefined, undefined, undefined, indexes);\n });\n\n /**\n * Creates a function that invokes `func` with the `this` binding of the\n * created function and arguments from `start` and beyond provided as\n * an array.\n *\n * **Note:** This method is based on the\n * [rest parameter](https://mdn.io/rest_parameters).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Function\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var say = _.rest(function(what, names) {\n * return what + ' ' + _.initial(names).join(', ') +\n * (_.size(names) > 1 ? ', & ' : '') + _.last(names);\n * });\n *\n * say('hello', 'fred', 'barney', 'pebbles');\n * // => 'hello fred, barney, & pebbles'\n */\n function rest(func, start) {\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n start = start === undefined ? start : toInteger(start);\n return baseRest(func, start);\n }\n\n /**\n * Creates a function that invokes `func` with the `this` binding of the\n * create function and an array of arguments much like\n * [`Function#apply`](http://www.ecma-international.org/ecma-262/7.0/#sec-function.prototype.apply).\n *\n * **Note:** This method is based on the\n * [spread operator](https://mdn.io/spread_operator).\n *\n * @static\n * @memberOf _\n * @since 3.2.0\n * @category Function\n * @param {Function} func The function to spread arguments over.\n * @param {number} [start=0] The start position of the spread.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var say = _.spread(function(who, what) {\n * return who + ' says ' + what;\n * });\n *\n * say(['fred', 'hello']);\n * // => 'fred says hello'\n *\n * var numbers = Promise.all([\n * Promise.resolve(40),\n * Promise.resolve(36)\n * ]);\n *\n * numbers.then(_.spread(function(x, y) {\n * return x + y;\n * }));\n * // => a Promise of 76\n */\n function spread(func, start) {\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n start = start == null ? 0 : nativeMax(toInteger(start), 0);\n return baseRest(function(args) {\n var array = args[start],\n otherArgs = castSlice(args, 0, start);\n\n if (array) {\n arrayPush(otherArgs, array);\n }\n return apply(func, this, otherArgs);\n });\n }\n\n /**\n * Creates a throttled function that only invokes `func` at most once per\n * every `wait` milliseconds. The throttled function comes with a `cancel`\n * method to cancel delayed `func` invocations and a `flush` method to\n * immediately invoke them. Provide `options` to indicate whether `func`\n * should be invoked on the leading and/or trailing edge of the `wait`\n * timeout. The `func` is invoked with the last arguments provided to the\n * throttled function. Subsequent calls to the throttled function return the\n * result of the last `func` invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the throttled function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.throttle` and `_.debounce`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to throttle.\n * @param {number} [wait=0] The number of milliseconds to throttle invocations to.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=true]\n * Specify invoking on the leading edge of the timeout.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new throttled function.\n * @example\n *\n * // Avoid excessively updating the position while scrolling.\n * jQuery(window).on('scroll', _.throttle(updatePosition, 100));\n *\n * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.\n * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });\n * jQuery(element).on('click', throttled);\n *\n * // Cancel the trailing throttled invocation.\n * jQuery(window).on('popstate', throttled.cancel);\n */\n function throttle(func, wait, options) {\n var leading = true,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n if (isObject(options)) {\n leading = 'leading' in options ? !!options.leading : leading;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n return debounce(func, wait, {\n 'leading': leading,\n 'maxWait': wait,\n 'trailing': trailing\n });\n }\n\n /**\n * Creates a function that accepts up to one argument, ignoring any\n * additional arguments.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Function\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n * @example\n *\n * _.map(['6', '8', '10'], _.unary(parseInt));\n * // => [6, 8, 10]\n */\n function unary(func) {\n return ary(func, 1);\n }\n\n /**\n * Creates a function that provides `value` to `wrapper` as its first\n * argument. Any additional arguments provided to the function are appended\n * to those provided to the `wrapper`. The wrapper is invoked with the `this`\n * binding of the created function.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {*} value The value to wrap.\n * @param {Function} [wrapper=identity] The wrapper function.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var p = _.wrap(_.escape, function(func, text) {\n * return '<p>' + func(text) + '</p>';\n * });\n *\n * p('fred, barney, & pebbles');\n * // => '<p>fred, barney, & pebbles</p>'\n */\n function wrap(value, wrapper) {\n return partial(castFunction(wrapper), value);\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Casts `value` as an array if it's not one.\n *\n * @static\n * @memberOf _\n * @since 4.4.0\n * @category Lang\n * @param {*} value The value to inspect.\n * @returns {Array} Returns the cast array.\n * @example\n *\n * _.castArray(1);\n * // => [1]\n *\n * _.castArray({ 'a': 1 });\n * // => [{ 'a': 1 }]\n *\n * _.castArray('abc');\n * // => ['abc']\n *\n * _.castArray(null);\n * // => [null]\n *\n * _.castArray(undefined);\n * // => [undefined]\n *\n * _.castArray();\n * // => []\n *\n * var array = [1, 2, 3];\n * console.log(_.castArray(array) === array);\n * // => true\n */\n function castArray() {\n if (!arguments.length) {\n return [];\n }\n var value = arguments[0];\n return isArray(value) ? value : [value];\n }\n\n /**\n * Creates a shallow clone of `value`.\n *\n * **Note:** This method is loosely based on the\n * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm)\n * and supports cloning arrays, array buffers, booleans, date objects, maps,\n * numbers, `Object` objects, regexes, sets, strings, symbols, and typed\n * arrays. The own enumerable properties of `arguments` objects are cloned\n * as plain objects. An empty object is returned for uncloneable values such\n * as error objects, functions, DOM nodes, and WeakMaps.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to clone.\n * @returns {*} Returns the cloned value.\n * @see _.cloneDeep\n * @example\n *\n * var objects = [{ 'a': 1 }, { 'b': 2 }];\n *\n * var shallow = _.clone(objects);\n * console.log(shallow[0] === objects[0]);\n * // => true\n */\n function clone(value) {\n return baseClone(value, CLONE_SYMBOLS_FLAG);\n }\n\n /**\n * This method is like `_.clone` except that it accepts `customizer` which\n * is invoked to produce the cloned value. If `customizer` returns `undefined`,\n * cloning is handled by the method instead. The `customizer` is invoked with\n * up to four arguments; (value [, index|key, object, stack]).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to clone.\n * @param {Function} [customizer] The function to customize cloning.\n * @returns {*} Returns the cloned value.\n * @see _.cloneDeepWith\n * @example\n *\n * function customizer(value) {\n * if (_.isElement(value)) {\n * return value.cloneNode(false);\n * }\n * }\n *\n * var el = _.cloneWith(document.body, customizer);\n *\n * console.log(el === document.body);\n * // => false\n * console.log(el.nodeName);\n * // => 'BODY'\n * console.log(el.childNodes.length);\n * // => 0\n */\n function cloneWith(value, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return baseClone(value, CLONE_SYMBOLS_FLAG, customizer);\n }\n\n /**\n * This method is like `_.clone` except that it recursively clones `value`.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Lang\n * @param {*} value The value to recursively clone.\n * @returns {*} Returns the deep cloned value.\n * @see _.clone\n * @example\n *\n * var objects = [{ 'a': 1 }, { 'b': 2 }];\n *\n * var deep = _.cloneDeep(objects);\n * console.log(deep[0] === objects[0]);\n * // => false\n */\n function cloneDeep(value) {\n return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG);\n }\n\n /**\n * This method is like `_.cloneWith` except that it recursively clones `value`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to recursively clone.\n * @param {Function} [customizer] The function to customize cloning.\n * @returns {*} Returns the deep cloned value.\n * @see _.cloneWith\n * @example\n *\n * function customizer(value) {\n * if (_.isElement(value)) {\n * return value.cloneNode(true);\n * }\n * }\n *\n * var el = _.cloneDeepWith(document.body, customizer);\n *\n * console.log(el === document.body);\n * // => false\n * console.log(el.nodeName);\n * // => 'BODY'\n * console.log(el.childNodes.length);\n * // => 20\n */\n function cloneDeepWith(value, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG, customizer);\n }\n\n /**\n * Checks if `object` conforms to `source` by invoking the predicate\n * properties of `source` with the corresponding property values of `object`.\n *\n * **Note:** This method is equivalent to `_.conforms` when `source` is\n * partially applied.\n *\n * @static\n * @memberOf _\n * @since 4.14.0\n * @category Lang\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property predicates to conform to.\n * @returns {boolean} Returns `true` if `object` conforms, else `false`.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n *\n * _.conformsTo(object, { 'b': function(n) { return n > 1; } });\n * // => true\n *\n * _.conformsTo(object, { 'b': function(n) { return n > 2; } });\n * // => false\n */\n function conformsTo(object, source) {\n return source == null || baseConformsTo(object, source, keys(source));\n }\n\n /**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\n function eq(value, other) {\n return value === other || (value !== value && other !== other);\n }\n\n /**\n * Checks if `value` is greater than `other`.\n *\n * @static\n * @memberOf _\n * @since 3.9.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is greater than `other`,\n * else `false`.\n * @see _.lt\n * @example\n *\n * _.gt(3, 1);\n * // => true\n *\n * _.gt(3, 3);\n * // => false\n *\n * _.gt(1, 3);\n * // => false\n */\n var gt = createRelationalOperation(baseGt);\n\n /**\n * Checks if `value` is greater than or equal to `other`.\n *\n * @static\n * @memberOf _\n * @since 3.9.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is greater than or equal to\n * `other`, else `false`.\n * @see _.lte\n * @example\n *\n * _.gte(3, 1);\n * // => true\n *\n * _.gte(3, 3);\n * // => true\n *\n * _.gte(1, 3);\n * // => false\n */\n var gte = createRelationalOperation(function(value, other) {\n return value >= other;\n });\n\n /**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\n var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n !propertyIsEnumerable.call(value, 'callee');\n };\n\n /**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\n var isArray = Array.isArray;\n\n /**\n * Checks if `value` is classified as an `ArrayBuffer` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`.\n * @example\n *\n * _.isArrayBuffer(new ArrayBuffer(2));\n * // => true\n *\n * _.isArrayBuffer(new Array(2));\n * // => false\n */\n var isArrayBuffer = nodeIsArrayBuffer ? baseUnary(nodeIsArrayBuffer) : baseIsArrayBuffer;\n\n /**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\n function isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n }\n\n /**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array-like object,\n * else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\n function isArrayLikeObject(value) {\n return isObjectLike(value) && isArrayLike(value);\n }\n\n /**\n * Checks if `value` is classified as a boolean primitive or object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a boolean, else `false`.\n * @example\n *\n * _.isBoolean(false);\n * // => true\n *\n * _.isBoolean(null);\n * // => false\n */\n function isBoolean(value) {\n return value === true || value === false ||\n (isObjectLike(value) && baseGetTag(value) == boolTag);\n }\n\n /**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\n var isBuffer = nativeIsBuffer || stubFalse;\n\n /**\n * Checks if `value` is classified as a `Date` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a date object, else `false`.\n * @example\n *\n * _.isDate(new Date);\n * // => true\n *\n * _.isDate('Mon April 23 2012');\n * // => false\n */\n var isDate = nodeIsDate ? baseUnary(nodeIsDate) : baseIsDate;\n\n /**\n * Checks if `value` is likely a DOM element.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a DOM element, else `false`.\n * @example\n *\n * _.isElement(document.body);\n * // => true\n *\n * _.isElement('<body>');\n * // => false\n */\n function isElement(value) {\n return isObjectLike(value) && value.nodeType === 1 && !isPlainObject(value);\n }\n\n /**\n * Checks if `value` is an empty object, collection, map, or set.\n *\n * Objects are considered empty if they have no own enumerable string keyed\n * properties.\n *\n * Array-like values such as `arguments` objects, arrays, buffers, strings, or\n * jQuery-like collections are considered empty if they have a `length` of `0`.\n * Similarly, maps and sets are considered empty if they have a `size` of `0`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is empty, else `false`.\n * @example\n *\n * _.isEmpty(null);\n * // => true\n *\n * _.isEmpty(true);\n * // => true\n *\n * _.isEmpty(1);\n * // => true\n *\n * _.isEmpty([1, 2, 3]);\n * // => false\n *\n * _.isEmpty({ 'a': 1 });\n * // => false\n */\n function isEmpty(value) {\n if (value == null) {\n return true;\n }\n if (isArrayLike(value) &&\n (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' ||\n isBuffer(value) || isTypedArray(value) || isArguments(value))) {\n return !value.length;\n }\n var tag = getTag(value);\n if (tag == mapTag || tag == setTag) {\n return !value.size;\n }\n if (isPrototype(value)) {\n return !baseKeys(value).length;\n }\n for (var key in value) {\n if (hasOwnProperty.call(value, key)) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * Performs a deep comparison between two values to determine if they are\n * equivalent.\n *\n * **Note:** This method supports comparing arrays, array buffers, booleans,\n * date objects, error objects, maps, numbers, `Object` objects, regexes,\n * sets, strings, symbols, and typed arrays. `Object` objects are compared\n * by their own, not inherited, enumerable properties. Functions and DOM\n * nodes are compared by strict equality, i.e. `===`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.isEqual(object, other);\n * // => true\n *\n * object === other;\n * // => false\n */\n function isEqual(value, other) {\n return baseIsEqual(value, other);\n }\n\n /**\n * This method is like `_.isEqual` except that it accepts `customizer` which\n * is invoked to compare values. If `customizer` returns `undefined`, comparisons\n * are handled by the method instead. The `customizer` is invoked with up to\n * six arguments: (objValue, othValue [, index|key, object, other, stack]).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * function isGreeting(value) {\n * return /^h(?:i|ello)$/.test(value);\n * }\n *\n * function customizer(objValue, othValue) {\n * if (isGreeting(objValue) && isGreeting(othValue)) {\n * return true;\n * }\n * }\n *\n * var array = ['hello', 'goodbye'];\n * var other = ['hi', 'goodbye'];\n *\n * _.isEqualWith(array, other, customizer);\n * // => true\n */\n function isEqualWith(value, other, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n var result = customizer ? customizer(value, other) : undefined;\n return result === undefined ? baseIsEqual(value, other, undefined, customizer) : !!result;\n }\n\n /**\n * Checks if `value` is an `Error`, `EvalError`, `RangeError`, `ReferenceError`,\n * `SyntaxError`, `TypeError`, or `URIError` object.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an error object, else `false`.\n * @example\n *\n * _.isError(new Error);\n * // => true\n *\n * _.isError(Error);\n * // => false\n */\n function isError(value) {\n if (!isObjectLike(value)) {\n return false;\n }\n var tag = baseGetTag(value);\n return tag == errorTag || tag == domExcTag ||\n (typeof value.message == 'string' && typeof value.name == 'string' && !isPlainObject(value));\n }\n\n /**\n * Checks if `value` is a finite primitive number.\n *\n * **Note:** This method is based on\n * [`Number.isFinite`](https://mdn.io/Number/isFinite).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a finite number, else `false`.\n * @example\n *\n * _.isFinite(3);\n * // => true\n *\n * _.isFinite(Number.MIN_VALUE);\n * // => true\n *\n * _.isFinite(Infinity);\n * // => false\n *\n * _.isFinite('3');\n * // => false\n */\n function isFinite(value) {\n return typeof value == 'number' && nativeIsFinite(value);\n }\n\n /**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\n function isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n }\n\n /**\n * Checks if `value` is an integer.\n *\n * **Note:** This method is based on\n * [`Number.isInteger`](https://mdn.io/Number/isInteger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an integer, else `false`.\n * @example\n *\n * _.isInteger(3);\n * // => true\n *\n * _.isInteger(Number.MIN_VALUE);\n * // => false\n *\n * _.isInteger(Infinity);\n * // => false\n *\n * _.isInteger('3');\n * // => false\n */\n function isInteger(value) {\n return typeof value == 'number' && value == toInteger(value);\n }\n\n /**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\n function isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n }\n\n /**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\n function isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n }\n\n /**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\n function isObjectLike(value) {\n return value != null && typeof value == 'object';\n }\n\n /**\n * Checks if `value` is classified as a `Map` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n * @example\n *\n * _.isMap(new Map);\n * // => true\n *\n * _.isMap(new WeakMap);\n * // => false\n */\n var isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap;\n\n /**\n * Performs a partial deep comparison between `object` and `source` to\n * determine if `object` contains equivalent property values.\n *\n * **Note:** This method is equivalent to `_.matches` when `source` is\n * partially applied.\n *\n * Partial comparisons will match empty array and empty object `source`\n * values against any array or object value, respectively. See `_.isEqual`\n * for a list of supported value comparisons.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n *\n * _.isMatch(object, { 'b': 2 });\n * // => true\n *\n * _.isMatch(object, { 'b': 1 });\n * // => false\n */\n function isMatch(object, source) {\n return object === source || baseIsMatch(object, source, getMatchData(source));\n }\n\n /**\n * This method is like `_.isMatch` except that it accepts `customizer` which\n * is invoked to compare values. If `customizer` returns `undefined`, comparisons\n * are handled by the method instead. The `customizer` is invoked with five\n * arguments: (objValue, srcValue, index|key, object, source).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n * @example\n *\n * function isGreeting(value) {\n * return /^h(?:i|ello)$/.test(value);\n * }\n *\n * function customizer(objValue, srcValue) {\n * if (isGreeting(objValue) && isGreeting(srcValue)) {\n * return true;\n * }\n * }\n *\n * var object = { 'greeting': 'hello' };\n * var source = { 'greeting': 'hi' };\n *\n * _.isMatchWith(object, source, customizer);\n * // => true\n */\n function isMatchWith(object, source, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return baseIsMatch(object, source, getMatchData(source), customizer);\n }\n\n /**\n * Checks if `value` is `NaN`.\n *\n * **Note:** This method is based on\n * [`Number.isNaN`](https://mdn.io/Number/isNaN) and is not the same as\n * global [`isNaN`](https://mdn.io/isNaN) which returns `true` for\n * `undefined` and other non-number values.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n * @example\n *\n * _.isNaN(NaN);\n * // => true\n *\n * _.isNaN(new Number(NaN));\n * // => true\n *\n * isNaN(undefined);\n * // => true\n *\n * _.isNaN(undefined);\n * // => false\n */\n function isNaN(value) {\n // An `NaN` primitive is the only value that is not equal to itself.\n // Perform the `toStringTag` check first to avoid errors with some\n // ActiveX objects in IE.\n return isNumber(value) && value != +value;\n }\n\n /**\n * Checks if `value` is a pristine native function.\n *\n * **Note:** This method can't reliably detect native functions in the presence\n * of the core-js package because core-js circumvents this kind of detection.\n * Despite multiple requests, the core-js maintainer has made it clear: any\n * attempt to fix the detection will be obstructed. As a result, we're left\n * with little choice but to throw an error. Unfortunately, this also affects\n * packages, like [babel-polyfill](https://www.npmjs.com/package/babel-polyfill),\n * which rely on core-js.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n * @example\n *\n * _.isNative(Array.prototype.push);\n * // => true\n *\n * _.isNative(_);\n * // => false\n */\n function isNative(value) {\n if (isMaskable(value)) {\n throw new Error(CORE_ERROR_TEXT);\n }\n return baseIsNative(value);\n }\n\n /**\n * Checks if `value` is `null`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `null`, else `false`.\n * @example\n *\n * _.isNull(null);\n * // => true\n *\n * _.isNull(void 0);\n * // => false\n */\n function isNull(value) {\n return value === null;\n }\n\n /**\n * Checks if `value` is `null` or `undefined`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is nullish, else `false`.\n * @example\n *\n * _.isNil(null);\n * // => true\n *\n * _.isNil(void 0);\n * // => true\n *\n * _.isNil(NaN);\n * // => false\n */\n function isNil(value) {\n return value == null;\n }\n\n /**\n * Checks if `value` is classified as a `Number` primitive or object.\n *\n * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are\n * classified as numbers, use the `_.isFinite` method.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a number, else `false`.\n * @example\n *\n * _.isNumber(3);\n * // => true\n *\n * _.isNumber(Number.MIN_VALUE);\n * // => true\n *\n * _.isNumber(Infinity);\n * // => true\n *\n * _.isNumber('3');\n * // => false\n */\n function isNumber(value) {\n return typeof value == 'number' ||\n (isObjectLike(value) && baseGetTag(value) == numberTag);\n }\n\n /**\n * Checks if `value` is a plain object, that is, an object created by the\n * `Object` constructor or one with a `[[Prototype]]` of `null`.\n *\n * @static\n * @memberOf _\n * @since 0.8.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * _.isPlainObject(new Foo);\n * // => false\n *\n * _.isPlainObject([1, 2, 3]);\n * // => false\n *\n * _.isPlainObject({ 'x': 0, 'y': 0 });\n * // => true\n *\n * _.isPlainObject(Object.create(null));\n * // => true\n */\n function isPlainObject(value) {\n if (!isObjectLike(value) || baseGetTag(value) != objectTag) {\n return false;\n }\n var proto = getPrototype(value);\n if (proto === null) {\n return true;\n }\n var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n return typeof Ctor == 'function' && Ctor instanceof Ctor &&\n funcToString.call(Ctor) == objectCtorString;\n }\n\n /**\n * Checks if `value` is classified as a `RegExp` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.\n * @example\n *\n * _.isRegExp(/abc/);\n * // => true\n *\n * _.isRegExp('/abc/');\n * // => false\n */\n var isRegExp = nodeIsRegExp ? baseUnary(nodeIsRegExp) : baseIsRegExp;\n\n /**\n * Checks if `value` is a safe integer. An integer is safe if it's an IEEE-754\n * double precision number which isn't the result of a rounded unsafe integer.\n *\n * **Note:** This method is based on\n * [`Number.isSafeInteger`](https://mdn.io/Number/isSafeInteger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a safe integer, else `false`.\n * @example\n *\n * _.isSafeInteger(3);\n * // => true\n *\n * _.isSafeInteger(Number.MIN_VALUE);\n * // => false\n *\n * _.isSafeInteger(Infinity);\n * // => false\n *\n * _.isSafeInteger('3');\n * // => false\n */\n function isSafeInteger(value) {\n return isInteger(value) && value >= -MAX_SAFE_INTEGER && value <= MAX_SAFE_INTEGER;\n }\n\n /**\n * Checks if `value` is classified as a `Set` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n * @example\n *\n * _.isSet(new Set);\n * // => true\n *\n * _.isSet(new WeakSet);\n * // => false\n */\n var isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet;\n\n /**\n * Checks if `value` is classified as a `String` primitive or object.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a string, else `false`.\n * @example\n *\n * _.isString('abc');\n * // => true\n *\n * _.isString(1);\n * // => false\n */\n function isString(value) {\n return typeof value == 'string' ||\n (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag);\n }\n\n /**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\n function isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n }\n\n /**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\n var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\n /**\n * Checks if `value` is `undefined`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`.\n * @example\n *\n * _.isUndefined(void 0);\n * // => true\n *\n * _.isUndefined(null);\n * // => false\n */\n function isUndefined(value) {\n return value === undefined;\n }\n\n /**\n * Checks if `value` is classified as a `WeakMap` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a weak map, else `false`.\n * @example\n *\n * _.isWeakMap(new WeakMap);\n * // => true\n *\n * _.isWeakMap(new Map);\n * // => false\n */\n function isWeakMap(value) {\n return isObjectLike(value) && getTag(value) == weakMapTag;\n }\n\n /**\n * Checks if `value` is classified as a `WeakSet` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a weak set, else `false`.\n * @example\n *\n * _.isWeakSet(new WeakSet);\n * // => true\n *\n * _.isWeakSet(new Set);\n * // => false\n */\n function isWeakSet(value) {\n return isObjectLike(value) && baseGetTag(value) == weakSetTag;\n }\n\n /**\n * Checks if `value` is less than `other`.\n *\n * @static\n * @memberOf _\n * @since 3.9.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is less than `other`,\n * else `false`.\n * @see _.gt\n * @example\n *\n * _.lt(1, 3);\n * // => true\n *\n * _.lt(3, 3);\n * // => false\n *\n * _.lt(3, 1);\n * // => false\n */\n var lt = createRelationalOperation(baseLt);\n\n /**\n * Checks if `value` is less than or equal to `other`.\n *\n * @static\n * @memberOf _\n * @since 3.9.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is less than or equal to\n * `other`, else `false`.\n * @see _.gte\n * @example\n *\n * _.lte(1, 3);\n * // => true\n *\n * _.lte(3, 3);\n * // => true\n *\n * _.lte(3, 1);\n * // => false\n */\n var lte = createRelationalOperation(function(value, other) {\n return value <= other;\n });\n\n /**\n * Converts `value` to an array.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {Array} Returns the converted array.\n * @example\n *\n * _.toArray({ 'a': 1, 'b': 2 });\n * // => [1, 2]\n *\n * _.toArray('abc');\n * // => ['a', 'b', 'c']\n *\n * _.toArray(1);\n * // => []\n *\n * _.toArray(null);\n * // => []\n */\n function toArray(value) {\n if (!value) {\n return [];\n }\n if (isArrayLike(value)) {\n return isString(value) ? stringToArray(value) : copyArray(value);\n }\n if (symIterator && value[symIterator]) {\n return iteratorToArray(value[symIterator]());\n }\n var tag = getTag(value),\n func = tag == mapTag ? mapToArray : (tag == setTag ? setToArray : values);\n\n return func(value);\n }\n\n /**\n * Converts `value` to a finite number.\n *\n * @static\n * @memberOf _\n * @since 4.12.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted number.\n * @example\n *\n * _.toFinite(3.2);\n * // => 3.2\n *\n * _.toFinite(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toFinite(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toFinite('3.2');\n * // => 3.2\n */\n function toFinite(value) {\n if (!value) {\n return value === 0 ? value : 0;\n }\n value = toNumber(value);\n if (value === INFINITY || value === -INFINITY) {\n var sign = (value < 0 ? -1 : 1);\n return sign * MAX_INTEGER;\n }\n return value === value ? value : 0;\n }\n\n /**\n * Converts `value` to an integer.\n *\n * **Note:** This method is loosely based on\n * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toInteger(3.2);\n * // => 3\n *\n * _.toInteger(Number.MIN_VALUE);\n * // => 0\n *\n * _.toInteger(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toInteger('3.2');\n * // => 3\n */\n function toInteger(value) {\n var result = toFinite(value),\n remainder = result % 1;\n\n return result === result ? (remainder ? result - remainder : result) : 0;\n }\n\n /**\n * Converts `value` to an integer suitable for use as the length of an\n * array-like object.\n *\n * **Note:** This method is based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toLength(3.2);\n * // => 3\n *\n * _.toLength(Number.MIN_VALUE);\n * // => 0\n *\n * _.toLength(Infinity);\n * // => 4294967295\n *\n * _.toLength('3.2');\n * // => 3\n */\n function toLength(value) {\n return value ? baseClamp(toInteger(value), 0, MAX_ARRAY_LENGTH) : 0;\n }\n\n /**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\n function toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = baseTrim(value);\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n }\n\n /**\n * Converts `value` to a plain object flattening inherited enumerable string\n * keyed properties of `value` to own properties of the plain object.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {Object} Returns the converted plain object.\n * @example\n *\n * function Foo() {\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.assign({ 'a': 1 }, new Foo);\n * // => { 'a': 1, 'b': 2 }\n *\n * _.assign({ 'a': 1 }, _.toPlainObject(new Foo));\n * // => { 'a': 1, 'b': 2, 'c': 3 }\n */\n function toPlainObject(value) {\n return copyObject(value, keysIn(value));\n }\n\n /**\n * Converts `value` to a safe integer. A safe integer can be compared and\n * represented correctly.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toSafeInteger(3.2);\n * // => 3\n *\n * _.toSafeInteger(Number.MIN_VALUE);\n * // => 0\n *\n * _.toSafeInteger(Infinity);\n * // => 9007199254740991\n *\n * _.toSafeInteger('3.2');\n * // => 3\n */\n function toSafeInteger(value) {\n return value\n ? baseClamp(toInteger(value), -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER)\n : (value === 0 ? value : 0);\n }\n\n /**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\n function toString(value) {\n return value == null ? '' : baseToString(value);\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Assigns own enumerable string keyed properties of source objects to the\n * destination object. Source objects are applied from left to right.\n * Subsequent sources overwrite property assignments of previous sources.\n *\n * **Note:** This method mutates `object` and is loosely based on\n * [`Object.assign`](https://mdn.io/Object/assign).\n *\n * @static\n * @memberOf _\n * @since 0.10.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.assignIn\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * function Bar() {\n * this.c = 3;\n * }\n *\n * Foo.prototype.b = 2;\n * Bar.prototype.d = 4;\n *\n * _.assign({ 'a': 0 }, new Foo, new Bar);\n * // => { 'a': 1, 'c': 3 }\n */\n var assign = createAssigner(function(object, source) {\n if (isPrototype(source) || isArrayLike(source)) {\n copyObject(source, keys(source), object);\n return;\n }\n for (var key in source) {\n if (hasOwnProperty.call(source, key)) {\n assignValue(object, key, source[key]);\n }\n }\n });\n\n /**\n * This method is like `_.assign` except that it iterates over own and\n * inherited source properties.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias extend\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.assign\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * function Bar() {\n * this.c = 3;\n * }\n *\n * Foo.prototype.b = 2;\n * Bar.prototype.d = 4;\n *\n * _.assignIn({ 'a': 0 }, new Foo, new Bar);\n * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4 }\n */\n var assignIn = createAssigner(function(object, source) {\n copyObject(source, keysIn(source), object);\n });\n\n /**\n * This method is like `_.assignIn` except that it accepts `customizer`\n * which is invoked to produce the assigned values. If `customizer` returns\n * `undefined`, assignment is handled by the method instead. The `customizer`\n * is invoked with five arguments: (objValue, srcValue, key, object, source).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias extendWith\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} sources The source objects.\n * @param {Function} [customizer] The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @see _.assignWith\n * @example\n *\n * function customizer(objValue, srcValue) {\n * return _.isUndefined(objValue) ? srcValue : objValue;\n * }\n *\n * var defaults = _.partialRight(_.assignInWith, customizer);\n *\n * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n * // => { 'a': 1, 'b': 2 }\n */\n var assignInWith = createAssigner(function(object, source, srcIndex, customizer) {\n copyObject(source, keysIn(source), object, customizer);\n });\n\n /**\n * This method is like `_.assign` except that it accepts `customizer`\n * which is invoked to produce the assigned values. If `customizer` returns\n * `undefined`, assignment is handled by the method instead. The `customizer`\n * is invoked with five arguments: (objValue, srcValue, key, object, source).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} sources The source objects.\n * @param {Function} [customizer] The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @see _.assignInWith\n * @example\n *\n * function customizer(objValue, srcValue) {\n * return _.isUndefined(objValue) ? srcValue : objValue;\n * }\n *\n * var defaults = _.partialRight(_.assignWith, customizer);\n *\n * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n * // => { 'a': 1, 'b': 2 }\n */\n var assignWith = createAssigner(function(object, source, srcIndex, customizer) {\n copyObject(source, keys(source), object, customizer);\n });\n\n /**\n * Creates an array of values corresponding to `paths` of `object`.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {...(string|string[])} [paths] The property paths to pick.\n * @returns {Array} Returns the picked values.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };\n *\n * _.at(object, ['a[0].b.c', 'a[1]']);\n * // => [3, 4]\n */\n var at = flatRest(baseAt);\n\n /**\n * Creates an object that inherits from the `prototype` object. If a\n * `properties` object is given, its own enumerable string keyed properties\n * are assigned to the created object.\n *\n * @static\n * @memberOf _\n * @since 2.3.0\n * @category Object\n * @param {Object} prototype The object to inherit from.\n * @param {Object} [properties] The properties to assign to the object.\n * @returns {Object} Returns the new object.\n * @example\n *\n * function Shape() {\n * this.x = 0;\n * this.y = 0;\n * }\n *\n * function Circle() {\n * Shape.call(this);\n * }\n *\n * Circle.prototype = _.create(Shape.prototype, {\n * 'constructor': Circle\n * });\n *\n * var circle = new Circle;\n * circle instanceof Circle;\n * // => true\n *\n * circle instanceof Shape;\n * // => true\n */\n function create(prototype, properties) {\n var result = baseCreate(prototype);\n return properties == null ? result : baseAssign(result, properties);\n }\n\n /**\n * Assigns own and inherited enumerable string keyed properties of source\n * objects to the destination object for all destination properties that\n * resolve to `undefined`. Source objects are applied from left to right.\n * Once a property is set, additional values of the same property are ignored.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.defaultsDeep\n * @example\n *\n * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n * // => { 'a': 1, 'b': 2 }\n */\n var defaults = baseRest(function(object, sources) {\n object = Object(object);\n\n var index = -1;\n var length = sources.length;\n var guard = length > 2 ? sources[2] : undefined;\n\n if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n length = 1;\n }\n\n while (++index < length) {\n var source = sources[index];\n var props = keysIn(source);\n var propsIndex = -1;\n var propsLength = props.length;\n\n while (++propsIndex < propsLength) {\n var key = props[propsIndex];\n var value = object[key];\n\n if (value === undefined ||\n (eq(value, objectProto[key]) && !hasOwnProperty.call(object, key))) {\n object[key] = source[key];\n }\n }\n }\n\n return object;\n });\n\n /**\n * This method is like `_.defaults` except that it recursively assigns\n * default properties.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 3.10.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.defaults\n * @example\n *\n * _.defaultsDeep({ 'a': { 'b': 2 } }, { 'a': { 'b': 1, 'c': 3 } });\n * // => { 'a': { 'b': 2, 'c': 3 } }\n */\n var defaultsDeep = baseRest(function(args) {\n args.push(undefined, customDefaultsMerge);\n return apply(mergeWith, undefined, args);\n });\n\n /**\n * This method is like `_.find` except that it returns the key of the first\n * element `predicate` returns truthy for instead of the element itself.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category Object\n * @param {Object} object The object to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {string|undefined} Returns the key of the matched element,\n * else `undefined`.\n * @example\n *\n * var users = {\n * 'barney': { 'age': 36, 'active': true },\n * 'fred': { 'age': 40, 'active': false },\n * 'pebbles': { 'age': 1, 'active': true }\n * };\n *\n * _.findKey(users, function(o) { return o.age < 40; });\n * // => 'barney' (iteration order is not guaranteed)\n *\n * // The `_.matches` iteratee shorthand.\n * _.findKey(users, { 'age': 1, 'active': true });\n * // => 'pebbles'\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findKey(users, ['active', false]);\n * // => 'fred'\n *\n * // The `_.property` iteratee shorthand.\n * _.findKey(users, 'active');\n * // => 'barney'\n */\n function findKey(object, predicate) {\n return baseFindKey(object, getIteratee(predicate, 3), baseForOwn);\n }\n\n /**\n * This method is like `_.findKey` except that it iterates over elements of\n * a collection in the opposite order.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Object\n * @param {Object} object The object to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {string|undefined} Returns the key of the matched element,\n * else `undefined`.\n * @example\n *\n * var users = {\n * 'barney': { 'age': 36, 'active': true },\n * 'fred': { 'age': 40, 'active': false },\n * 'pebbles': { 'age': 1, 'active': true }\n * };\n *\n * _.findLastKey(users, function(o) { return o.age < 40; });\n * // => returns 'pebbles' assuming `_.findKey` returns 'barney'\n *\n * // The `_.matches` iteratee shorthand.\n * _.findLastKey(users, { 'age': 36, 'active': true });\n * // => 'barney'\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findLastKey(users, ['active', false]);\n * // => 'fred'\n *\n * // The `_.property` iteratee shorthand.\n * _.findLastKey(users, 'active');\n * // => 'pebbles'\n */\n function findLastKey(object, predicate) {\n return baseFindKey(object, getIteratee(predicate, 3), baseForOwnRight);\n }\n\n /**\n * Iterates over own and inherited enumerable string keyed properties of an\n * object and invokes `iteratee` for each property. The iteratee is invoked\n * with three arguments: (value, key, object). Iteratee functions may exit\n * iteration early by explicitly returning `false`.\n *\n * @static\n * @memberOf _\n * @since 0.3.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forInRight\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forIn(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed).\n */\n function forIn(object, iteratee) {\n return object == null\n ? object\n : baseFor(object, getIteratee(iteratee, 3), keysIn);\n }\n\n /**\n * This method is like `_.forIn` except that it iterates over properties of\n * `object` in the opposite order.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forIn\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forInRight(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'c', 'b', then 'a' assuming `_.forIn` logs 'a', 'b', then 'c'.\n */\n function forInRight(object, iteratee) {\n return object == null\n ? object\n : baseForRight(object, getIteratee(iteratee, 3), keysIn);\n }\n\n /**\n * Iterates over own enumerable string keyed properties of an object and\n * invokes `iteratee` for each property. The iteratee is invoked with three\n * arguments: (value, key, object). Iteratee functions may exit iteration\n * early by explicitly returning `false`.\n *\n * @static\n * @memberOf _\n * @since 0.3.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forOwnRight\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forOwn(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n */\n function forOwn(object, iteratee) {\n return object && baseForOwn(object, getIteratee(iteratee, 3));\n }\n\n /**\n * This method is like `_.forOwn` except that it iterates over properties of\n * `object` in the opposite order.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forOwn\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forOwnRight(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'b' then 'a' assuming `_.forOwn` logs 'a' then 'b'.\n */\n function forOwnRight(object, iteratee) {\n return object && baseForOwnRight(object, getIteratee(iteratee, 3));\n }\n\n /**\n * Creates an array of function property names from own enumerable properties\n * of `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to inspect.\n * @returns {Array} Returns the function names.\n * @see _.functionsIn\n * @example\n *\n * function Foo() {\n * this.a = _.constant('a');\n * this.b = _.constant('b');\n * }\n *\n * Foo.prototype.c = _.constant('c');\n *\n * _.functions(new Foo);\n * // => ['a', 'b']\n */\n function functions(object) {\n return object == null ? [] : baseFunctions(object, keys(object));\n }\n\n /**\n * Creates an array of function property names from own and inherited\n * enumerable properties of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to inspect.\n * @returns {Array} Returns the function names.\n * @see _.functions\n * @example\n *\n * function Foo() {\n * this.a = _.constant('a');\n * this.b = _.constant('b');\n * }\n *\n * Foo.prototype.c = _.constant('c');\n *\n * _.functionsIn(new Foo);\n * // => ['a', 'b', 'c']\n */\n function functionsIn(object) {\n return object == null ? [] : baseFunctions(object, keysIn(object));\n }\n\n /**\n * Gets the value at `path` of `object`. If the resolved value is\n * `undefined`, the `defaultValue` is returned in its place.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.get(object, 'a[0].b.c');\n * // => 3\n *\n * _.get(object, ['a', '0', 'b', 'c']);\n * // => 3\n *\n * _.get(object, 'a.b.c', 'default');\n * // => 'default'\n */\n function get(object, path, defaultValue) {\n var result = object == null ? undefined : baseGet(object, path);\n return result === undefined ? defaultValue : result;\n }\n\n /**\n * Checks if `path` is a direct property of `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = { 'a': { 'b': 2 } };\n * var other = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.has(object, 'a');\n * // => true\n *\n * _.has(object, 'a.b');\n * // => true\n *\n * _.has(object, ['a', 'b']);\n * // => true\n *\n * _.has(other, 'a');\n * // => false\n */\n function has(object, path) {\n return object != null && hasPath(object, path, baseHas);\n }\n\n /**\n * Checks if `path` is a direct or inherited property of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.hasIn(object, 'a');\n * // => true\n *\n * _.hasIn(object, 'a.b');\n * // => true\n *\n * _.hasIn(object, ['a', 'b']);\n * // => true\n *\n * _.hasIn(object, 'b');\n * // => false\n */\n function hasIn(object, path) {\n return object != null && hasPath(object, path, baseHasIn);\n }\n\n /**\n * Creates an object composed of the inverted keys and values of `object`.\n * If `object` contains duplicate values, subsequent values overwrite\n * property assignments of previous values.\n *\n * @static\n * @memberOf _\n * @since 0.7.0\n * @category Object\n * @param {Object} object The object to invert.\n * @returns {Object} Returns the new inverted object.\n * @example\n *\n * var object = { 'a': 1, 'b': 2, 'c': 1 };\n *\n * _.invert(object);\n * // => { '1': 'c', '2': 'b' }\n */\n var invert = createInverter(function(result, value, key) {\n if (value != null &&\n typeof value.toString != 'function') {\n value = nativeObjectToString.call(value);\n }\n\n result[value] = key;\n }, constant(identity));\n\n /**\n * This method is like `_.invert` except that the inverted object is generated\n * from the results of running each element of `object` thru `iteratee`. The\n * corresponding inverted value of each inverted key is an array of keys\n * responsible for generating the inverted value. The iteratee is invoked\n * with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.1.0\n * @category Object\n * @param {Object} object The object to invert.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Object} Returns the new inverted object.\n * @example\n *\n * var object = { 'a': 1, 'b': 2, 'c': 1 };\n *\n * _.invertBy(object);\n * // => { '1': ['a', 'c'], '2': ['b'] }\n *\n * _.invertBy(object, function(value) {\n * return 'group' + value;\n * });\n * // => { 'group1': ['a', 'c'], 'group2': ['b'] }\n */\n var invertBy = createInverter(function(result, value, key) {\n if (value != null &&\n typeof value.toString != 'function') {\n value = nativeObjectToString.call(value);\n }\n\n if (hasOwnProperty.call(result, value)) {\n result[value].push(key);\n } else {\n result[value] = [key];\n }\n }, getIteratee);\n\n /**\n * Invokes the method at `path` of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the method to invoke.\n * @param {...*} [args] The arguments to invoke the method with.\n * @returns {*} Returns the result of the invoked method.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': [1, 2, 3, 4] } }] };\n *\n * _.invoke(object, 'a[0].b.c.slice', 1, 3);\n * // => [2, 3]\n */\n var invoke = baseRest(baseInvoke);\n\n /**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\n function keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n }\n\n /**\n * Creates an array of the own and inherited enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keysIn(new Foo);\n * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n */\n function keysIn(object) {\n return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\n }\n\n /**\n * The opposite of `_.mapValues`; this method creates an object with the\n * same values as `object` and keys generated by running each own enumerable\n * string keyed property of `object` thru `iteratee`. The iteratee is invoked\n * with three arguments: (value, key, object).\n *\n * @static\n * @memberOf _\n * @since 3.8.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns the new mapped object.\n * @see _.mapValues\n * @example\n *\n * _.mapKeys({ 'a': 1, 'b': 2 }, function(value, key) {\n * return key + value;\n * });\n * // => { 'a1': 1, 'b2': 2 }\n */\n function mapKeys(object, iteratee) {\n var result = {};\n iteratee = getIteratee(iteratee, 3);\n\n baseForOwn(object, function(value, key, object) {\n baseAssignValue(result, iteratee(value, key, object), value);\n });\n return result;\n }\n\n /**\n * Creates an object with the same keys as `object` and values generated\n * by running each own enumerable string keyed property of `object` thru\n * `iteratee`. The iteratee is invoked with three arguments:\n * (value, key, object).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns the new mapped object.\n * @see _.mapKeys\n * @example\n *\n * var users = {\n * 'fred': { 'user': 'fred', 'age': 40 },\n * 'pebbles': { 'user': 'pebbles', 'age': 1 }\n * };\n *\n * _.mapValues(users, function(o) { return o.age; });\n * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n *\n * // The `_.property` iteratee shorthand.\n * _.mapValues(users, 'age');\n * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n */\n function mapValues(object, iteratee) {\n var result = {};\n iteratee = getIteratee(iteratee, 3);\n\n baseForOwn(object, function(value, key, object) {\n baseAssignValue(result, key, iteratee(value, key, object));\n });\n return result;\n }\n\n /**\n * This method is like `_.assign` except that it recursively merges own and\n * inherited enumerable string keyed properties of source objects into the\n * destination object. Source properties that resolve to `undefined` are\n * skipped if a destination value exists. Array and plain object properties\n * are merged recursively. Other objects and value types are overridden by\n * assignment. Source objects are applied from left to right. Subsequent\n * sources overwrite property assignments of previous sources.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {\n * 'a': [{ 'b': 2 }, { 'd': 4 }]\n * };\n *\n * var other = {\n * 'a': [{ 'c': 3 }, { 'e': 5 }]\n * };\n *\n * _.merge(object, other);\n * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] }\n */\n var merge = createAssigner(function(object, source, srcIndex) {\n baseMerge(object, source, srcIndex);\n });\n\n /**\n * This method is like `_.merge` except that it accepts `customizer` which\n * is invoked to produce the merged values of the destination and source\n * properties. If `customizer` returns `undefined`, merging is handled by the\n * method instead. The `customizer` is invoked with six arguments:\n * (objValue, srcValue, key, object, source, stack).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} sources The source objects.\n * @param {Function} customizer The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @example\n *\n * function customizer(objValue, srcValue) {\n * if (_.isArray(objValue)) {\n * return objValue.concat(srcValue);\n * }\n * }\n *\n * var object = { 'a': [1], 'b': [2] };\n * var other = { 'a': [3], 'b': [4] };\n *\n * _.mergeWith(object, other, customizer);\n * // => { 'a': [1, 3], 'b': [2, 4] }\n */\n var mergeWith = createAssigner(function(object, source, srcIndex, customizer) {\n baseMerge(object, source, srcIndex, customizer);\n });\n\n /**\n * The opposite of `_.pick`; this method creates an object composed of the\n * own and inherited enumerable property paths of `object` that are not omitted.\n *\n * **Note:** This method is considerably slower than `_.pick`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The source object.\n * @param {...(string|string[])} [paths] The property paths to omit.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.omit(object, ['a', 'c']);\n * // => { 'b': '2' }\n */\n var omit = flatRest(function(object, paths) {\n var result = {};\n if (object == null) {\n return result;\n }\n var isDeep = false;\n paths = arrayMap(paths, function(path) {\n path = castPath(path, object);\n isDeep || (isDeep = path.length > 1);\n return path;\n });\n copyObject(object, getAllKeysIn(object), result);\n if (isDeep) {\n result = baseClone(result, CLONE_DEEP_FLAG | CLONE_FLAT_FLAG | CLONE_SYMBOLS_FLAG, customOmitClone);\n }\n var length = paths.length;\n while (length--) {\n baseUnset(result, paths[length]);\n }\n return result;\n });\n\n /**\n * The opposite of `_.pickBy`; this method creates an object composed of\n * the own and inherited enumerable string keyed properties of `object` that\n * `predicate` doesn't return truthy for. The predicate is invoked with two\n * arguments: (value, key).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The source object.\n * @param {Function} [predicate=_.identity] The function invoked per property.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.omitBy(object, _.isNumber);\n * // => { 'b': '2' }\n */\n function omitBy(object, predicate) {\n return pickBy(object, negate(getIteratee(predicate)));\n }\n\n /**\n * Creates an object composed of the picked `object` properties.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The source object.\n * @param {...(string|string[])} [paths] The property paths to pick.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.pick(object, ['a', 'c']);\n * // => { 'a': 1, 'c': 3 }\n */\n var pick = flatRest(function(object, paths) {\n return object == null ? {} : basePick(object, paths);\n });\n\n /**\n * Creates an object composed of the `object` properties `predicate` returns\n * truthy for. The predicate is invoked with two arguments: (value, key).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The source object.\n * @param {Function} [predicate=_.identity] The function invoked per property.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.pickBy(object, _.isNumber);\n * // => { 'a': 1, 'c': 3 }\n */\n function pickBy(object, predicate) {\n if (object == null) {\n return {};\n }\n var props = arrayMap(getAllKeysIn(object), function(prop) {\n return [prop];\n });\n predicate = getIteratee(predicate);\n return basePickBy(object, props, function(value, path) {\n return predicate(value, path[0]);\n });\n }\n\n /**\n * This method is like `_.get` except that if the resolved value is a\n * function it's invoked with the `this` binding of its parent object and\n * its result is returned.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to resolve.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c1': 3, 'c2': _.constant(4) } }] };\n *\n * _.result(object, 'a[0].b.c1');\n * // => 3\n *\n * _.result(object, 'a[0].b.c2');\n * // => 4\n *\n * _.result(object, 'a[0].b.c3', 'default');\n * // => 'default'\n *\n * _.result(object, 'a[0].b.c3', _.constant('default'));\n * // => 'default'\n */\n function result(object, path, defaultValue) {\n path = castPath(path, object);\n\n var index = -1,\n length = path.length;\n\n // Ensure the loop is entered when path is empty.\n if (!length) {\n length = 1;\n object = undefined;\n }\n while (++index < length) {\n var value = object == null ? undefined : object[toKey(path[index])];\n if (value === undefined) {\n index = length;\n value = defaultValue;\n }\n object = isFunction(value) ? value.call(object) : value;\n }\n return object;\n }\n\n /**\n * Sets the value at `path` of `object`. If a portion of `path` doesn't exist,\n * it's created. Arrays are created for missing index properties while objects\n * are created for all other missing properties. Use `_.setWith` to customize\n * `path` creation.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.set(object, 'a[0].b.c', 4);\n * console.log(object.a[0].b.c);\n * // => 4\n *\n * _.set(object, ['x', '0', 'y', 'z'], 5);\n * console.log(object.x[0].y.z);\n * // => 5\n */\n function set(object, path, value) {\n return object == null ? object : baseSet(object, path, value);\n }\n\n /**\n * This method is like `_.set` except that it accepts `customizer` which is\n * invoked to produce the objects of `path`. If `customizer` returns `undefined`\n * path creation is handled by the method instead. The `customizer` is invoked\n * with three arguments: (nsValue, key, nsObject).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @param {Function} [customizer] The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {};\n *\n * _.setWith(object, '[0][1]', 'a', Object);\n * // => { '0': { '1': 'a' } }\n */\n function setWith(object, path, value, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return object == null ? object : baseSet(object, path, value, customizer);\n }\n\n /**\n * Creates an array of own enumerable string keyed-value pairs for `object`\n * which can be consumed by `_.fromPairs`. If `object` is a map or set, its\n * entries are returned.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias entries\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the key-value pairs.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.toPairs(new Foo);\n * // => [['a', 1], ['b', 2]] (iteration order is not guaranteed)\n */\n var toPairs = createToPairs(keys);\n\n /**\n * Creates an array of own and inherited enumerable string keyed-value pairs\n * for `object` which can be consumed by `_.fromPairs`. If `object` is a map\n * or set, its entries are returned.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias entriesIn\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the key-value pairs.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.toPairsIn(new Foo);\n * // => [['a', 1], ['b', 2], ['c', 3]] (iteration order is not guaranteed)\n */\n var toPairsIn = createToPairs(keysIn);\n\n /**\n * An alternative to `_.reduce`; this method transforms `object` to a new\n * `accumulator` object which is the result of running each of its own\n * enumerable string keyed properties thru `iteratee`, with each invocation\n * potentially mutating the `accumulator` object. If `accumulator` is not\n * provided, a new object with the same `[[Prototype]]` will be used. The\n * iteratee is invoked with four arguments: (accumulator, value, key, object).\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @static\n * @memberOf _\n * @since 1.3.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {*} [accumulator] The custom accumulator value.\n * @returns {*} Returns the accumulated value.\n * @example\n *\n * _.transform([2, 3, 4], function(result, n) {\n * result.push(n *= n);\n * return n % 2 == 0;\n * }, []);\n * // => [4, 9]\n *\n * _.transform({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {\n * (result[value] || (result[value] = [])).push(key);\n * }, {});\n * // => { '1': ['a', 'c'], '2': ['b'] }\n */\n function transform(object, iteratee, accumulator) {\n var isArr = isArray(object),\n isArrLike = isArr || isBuffer(object) || isTypedArray(object);\n\n iteratee = getIteratee(iteratee, 4);\n if (accumulator == null) {\n var Ctor = object && object.constructor;\n if (isArrLike) {\n accumulator = isArr ? new Ctor : [];\n }\n else if (isObject(object)) {\n accumulator = isFunction(Ctor) ? baseCreate(getPrototype(object)) : {};\n }\n else {\n accumulator = {};\n }\n }\n (isArrLike ? arrayEach : baseForOwn)(object, function(value, index, object) {\n return iteratee(accumulator, value, index, object);\n });\n return accumulator;\n }\n\n /**\n * Removes the property at `path` of `object`.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to unset.\n * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 7 } }] };\n * _.unset(object, 'a[0].b.c');\n * // => true\n *\n * console.log(object);\n * // => { 'a': [{ 'b': {} }] };\n *\n * _.unset(object, ['a', '0', 'b', 'c']);\n * // => true\n *\n * console.log(object);\n * // => { 'a': [{ 'b': {} }] };\n */\n function unset(object, path) {\n return object == null ? true : baseUnset(object, path);\n }\n\n /**\n * This method is like `_.set` except that accepts `updater` to produce the\n * value to set. Use `_.updateWith` to customize `path` creation. The `updater`\n * is invoked with one argument: (value).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.6.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {Function} updater The function to produce the updated value.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.update(object, 'a[0].b.c', function(n) { return n * n; });\n * console.log(object.a[0].b.c);\n * // => 9\n *\n * _.update(object, 'x[0].y.z', function(n) { return n ? n + 1 : 0; });\n * console.log(object.x[0].y.z);\n * // => 0\n */\n function update(object, path, updater) {\n return object == null ? object : baseUpdate(object, path, castFunction(updater));\n }\n\n /**\n * This method is like `_.update` except that it accepts `customizer` which is\n * invoked to produce the objects of `path`. If `customizer` returns `undefined`\n * path creation is handled by the method instead. The `customizer` is invoked\n * with three arguments: (nsValue, key, nsObject).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.6.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {Function} updater The function to produce the updated value.\n * @param {Function} [customizer] The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {};\n *\n * _.updateWith(object, '[0][1]', _.constant('a'), Object);\n * // => { '0': { '1': 'a' } }\n */\n function updateWith(object, path, updater, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return object == null ? object : baseUpdate(object, path, castFunction(updater), customizer);\n }\n\n /**\n * Creates an array of the own enumerable string keyed property values of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property values.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.values(new Foo);\n * // => [1, 2] (iteration order is not guaranteed)\n *\n * _.values('hi');\n * // => ['h', 'i']\n */\n function values(object) {\n return object == null ? [] : baseValues(object, keys(object));\n }\n\n /**\n * Creates an array of the own and inherited enumerable string keyed property\n * values of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property values.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.valuesIn(new Foo);\n * // => [1, 2, 3] (iteration order is not guaranteed)\n */\n function valuesIn(object) {\n return object == null ? [] : baseValues(object, keysIn(object));\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Clamps `number` within the inclusive `lower` and `upper` bounds.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Number\n * @param {number} number The number to clamp.\n * @param {number} [lower] The lower bound.\n * @param {number} upper The upper bound.\n * @returns {number} Returns the clamped number.\n * @example\n *\n * _.clamp(-10, -5, 5);\n * // => -5\n *\n * _.clamp(10, -5, 5);\n * // => 5\n */\n function clamp(number, lower, upper) {\n if (upper === undefined) {\n upper = lower;\n lower = undefined;\n }\n if (upper !== undefined) {\n upper = toNumber(upper);\n upper = upper === upper ? upper : 0;\n }\n if (lower !== undefined) {\n lower = toNumber(lower);\n lower = lower === lower ? lower : 0;\n }\n return baseClamp(toNumber(number), lower, upper);\n }\n\n /**\n * Checks if `n` is between `start` and up to, but not including, `end`. If\n * `end` is not specified, it's set to `start` with `start` then set to `0`.\n * If `start` is greater than `end` the params are swapped to support\n * negative ranges.\n *\n * @static\n * @memberOf _\n * @since 3.3.0\n * @category Number\n * @param {number} number The number to check.\n * @param {number} [start=0] The start of the range.\n * @param {number} end The end of the range.\n * @returns {boolean} Returns `true` if `number` is in the range, else `false`.\n * @see _.range, _.rangeRight\n * @example\n *\n * _.inRange(3, 2, 4);\n * // => true\n *\n * _.inRange(4, 8);\n * // => true\n *\n * _.inRange(4, 2);\n * // => false\n *\n * _.inRange(2, 2);\n * // => false\n *\n * _.inRange(1.2, 2);\n * // => true\n *\n * _.inRange(5.2, 4);\n * // => false\n *\n * _.inRange(-3, -2, -6);\n * // => true\n */\n function inRange(number, start, end) {\n start = toFinite(start);\n if (end === undefined) {\n end = start;\n start = 0;\n } else {\n end = toFinite(end);\n }\n number = toNumber(number);\n return baseInRange(number, start, end);\n }\n\n /**\n * Produces a random number between the inclusive `lower` and `upper` bounds.\n * If only one argument is provided a number between `0` and the given number\n * is returned. If `floating` is `true`, or either `lower` or `upper` are\n * floats, a floating-point number is returned instead of an integer.\n *\n * **Note:** JavaScript follows the IEEE-754 standard for resolving\n * floating-point values which can produce unexpected results.\n *\n * @static\n * @memberOf _\n * @since 0.7.0\n * @category Number\n * @param {number} [lower=0] The lower bound.\n * @param {number} [upper=1] The upper bound.\n * @param {boolean} [floating] Specify returning a floating-point number.\n * @returns {number} Returns the random number.\n * @example\n *\n * _.random(0, 5);\n * // => an integer between 0 and 5\n *\n * _.random(5);\n * // => also an integer between 0 and 5\n *\n * _.random(5, true);\n * // => a floating-point number between 0 and 5\n *\n * _.random(1.2, 5.2);\n * // => a floating-point number between 1.2 and 5.2\n */\n function random(lower, upper, floating) {\n if (floating && typeof floating != 'boolean' && isIterateeCall(lower, upper, floating)) {\n upper = floating = undefined;\n }\n if (floating === undefined) {\n if (typeof upper == 'boolean') {\n floating = upper;\n upper = undefined;\n }\n else if (typeof lower == 'boolean') {\n floating = lower;\n lower = undefined;\n }\n }\n if (lower === undefined && upper === undefined) {\n lower = 0;\n upper = 1;\n }\n else {\n lower = toFinite(lower);\n if (upper === undefined) {\n upper = lower;\n lower = 0;\n } else {\n upper = toFinite(upper);\n }\n }\n if (lower > upper) {\n var temp = lower;\n lower = upper;\n upper = temp;\n }\n if (floating || lower % 1 || upper % 1) {\n var rand = nativeRandom();\n return nativeMin(lower + (rand * (upper - lower + freeParseFloat('1e-' + ((rand + '').length - 1)))), upper);\n }\n return baseRandom(lower, upper);\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the camel cased string.\n * @example\n *\n * _.camelCase('Foo Bar');\n * // => 'fooBar'\n *\n * _.camelCase('--foo-bar--');\n * // => 'fooBar'\n *\n * _.camelCase('__FOO_BAR__');\n * // => 'fooBar'\n */\n var camelCase = createCompounder(function(result, word, index) {\n word = word.toLowerCase();\n return result + (index ? capitalize(word) : word);\n });\n\n /**\n * Converts the first character of `string` to upper case and the remaining\n * to lower case.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to capitalize.\n * @returns {string} Returns the capitalized string.\n * @example\n *\n * _.capitalize('FRED');\n * // => 'Fred'\n */\n function capitalize(string) {\n return upperFirst(toString(string).toLowerCase());\n }\n\n /**\n * Deburrs `string` by converting\n * [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table)\n * and [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A)\n * letters to basic Latin letters and removing\n * [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to deburr.\n * @returns {string} Returns the deburred string.\n * @example\n *\n * _.deburr('déjà vu');\n * // => 'deja vu'\n */\n function deburr(string) {\n string = toString(string);\n return string && string.replace(reLatin, deburrLetter).replace(reComboMark, '');\n }\n\n /**\n * Checks if `string` ends with the given target string.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to inspect.\n * @param {string} [target] The string to search for.\n * @param {number} [position=string.length] The position to search up to.\n * @returns {boolean} Returns `true` if `string` ends with `target`,\n * else `false`.\n * @example\n *\n * _.endsWith('abc', 'c');\n * // => true\n *\n * _.endsWith('abc', 'b');\n * // => false\n *\n * _.endsWith('abc', 'b', 2);\n * // => true\n */\n function endsWith(string, target, position) {\n string = toString(string);\n target = baseToString(target);\n\n var length = string.length;\n position = position === undefined\n ? length\n : baseClamp(toInteger(position), 0, length);\n\n var end = position;\n position -= target.length;\n return position >= 0 && string.slice(position, end) == target;\n }\n\n /**\n * Converts the characters \"&\", \"<\", \">\", '\"', and \"'\" in `string` to their\n * corresponding HTML entities.\n *\n * **Note:** No other characters are escaped. To escape additional\n * characters use a third-party library like [_he_](https://mths.be/he).\n *\n * Though the \">\" character is escaped for symmetry, characters like\n * \">\" and \"/\" don't need escaping in HTML and have no special meaning\n * unless they're part of a tag or unquoted attribute value. See\n * [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands)\n * (under \"semi-related fun fact\") for more details.\n *\n * When working with HTML you should always\n * [quote attribute values](http://wonko.com/post/html-escaping) to reduce\n * XSS vectors.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category String\n * @param {string} [string=''] The string to escape.\n * @returns {string} Returns the escaped string.\n * @example\n *\n * _.escape('fred, barney, & pebbles');\n * // => 'fred, barney, & pebbles'\n */\n function escape(string) {\n string = toString(string);\n return (string && reHasUnescapedHtml.test(string))\n ? string.replace(reUnescapedHtml, escapeHtmlChar)\n : string;\n }\n\n /**\n * Escapes the `RegExp` special characters \"^\", \"$\", \"\\\", \".\", \"*\", \"+\",\n * \"?\", \"(\", \")\", \"[\", \"]\", \"{\", \"}\", and \"|\" in `string`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to escape.\n * @returns {string} Returns the escaped string.\n * @example\n *\n * _.escapeRegExp('[lodash](https://lodash.com/)');\n * // => '\\[lodash\\]\\(https://lodash\\.com/\\)'\n */\n function escapeRegExp(string) {\n string = toString(string);\n return (string && reHasRegExpChar.test(string))\n ? string.replace(reRegExpChar, '\\\\$&')\n : string;\n }\n\n /**\n * Converts `string` to\n * [kebab case](https://en.wikipedia.org/wiki/Letter_case#Special_case_styles).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the kebab cased string.\n * @example\n *\n * _.kebabCase('Foo Bar');\n * // => 'foo-bar'\n *\n * _.kebabCase('fooBar');\n * // => 'foo-bar'\n *\n * _.kebabCase('__FOO_BAR__');\n * // => 'foo-bar'\n */\n var kebabCase = createCompounder(function(result, word, index) {\n return result + (index ? '-' : '') + word.toLowerCase();\n });\n\n /**\n * Converts `string`, as space separated words, to lower case.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the lower cased string.\n * @example\n *\n * _.lowerCase('--Foo-Bar--');\n * // => 'foo bar'\n *\n * _.lowerCase('fooBar');\n * // => 'foo bar'\n *\n * _.lowerCase('__FOO_BAR__');\n * // => 'foo bar'\n */\n var lowerCase = createCompounder(function(result, word, index) {\n return result + (index ? ' ' : '') + word.toLowerCase();\n });\n\n /**\n * Converts the first character of `string` to lower case.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.lowerFirst('Fred');\n * // => 'fred'\n *\n * _.lowerFirst('FRED');\n * // => 'fRED'\n */\n var lowerFirst = createCaseFirst('toLowerCase');\n\n /**\n * Pads `string` on the left and right sides if it's shorter than `length`.\n * Padding characters are truncated if they can't be evenly divided by `length`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to pad.\n * @param {number} [length=0] The padding length.\n * @param {string} [chars=' '] The string used as padding.\n * @returns {string} Returns the padded string.\n * @example\n *\n * _.pad('abc', 8);\n * // => ' abc '\n *\n * _.pad('abc', 8, '_-');\n * // => '_-abc_-_'\n *\n * _.pad('abc', 3);\n * // => 'abc'\n */\n function pad(string, length, chars) {\n string = toString(string);\n length = toInteger(length);\n\n var strLength = length ? stringSize(string) : 0;\n if (!length || strLength >= length) {\n return string;\n }\n var mid = (length - strLength) / 2;\n return (\n createPadding(nativeFloor(mid), chars) +\n string +\n createPadding(nativeCeil(mid), chars)\n );\n }\n\n /**\n * Pads `string` on the right side if it's shorter than `length`. Padding\n * characters are truncated if they exceed `length`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to pad.\n * @param {number} [length=0] The padding length.\n * @param {string} [chars=' '] The string used as padding.\n * @returns {string} Returns the padded string.\n * @example\n *\n * _.padEnd('abc', 6);\n * // => 'abc '\n *\n * _.padEnd('abc', 6, '_-');\n * // => 'abc_-_'\n *\n * _.padEnd('abc', 3);\n * // => 'abc'\n */\n function padEnd(string, length, chars) {\n string = toString(string);\n length = toInteger(length);\n\n var strLength = length ? stringSize(string) : 0;\n return (length && strLength < length)\n ? (string + createPadding(length - strLength, chars))\n : string;\n }\n\n /**\n * Pads `string` on the left side if it's shorter than `length`. Padding\n * characters are truncated if they exceed `length`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to pad.\n * @param {number} [length=0] The padding length.\n * @param {string} [chars=' '] The string used as padding.\n * @returns {string} Returns the padded string.\n * @example\n *\n * _.padStart('abc', 6);\n * // => ' abc'\n *\n * _.padStart('abc', 6, '_-');\n * // => '_-_abc'\n *\n * _.padStart('abc', 3);\n * // => 'abc'\n */\n function padStart(string, length, chars) {\n string = toString(string);\n length = toInteger(length);\n\n var strLength = length ? stringSize(string) : 0;\n return (length && strLength < length)\n ? (createPadding(length - strLength, chars) + string)\n : string;\n }\n\n /**\n * Converts `string` to an integer of the specified radix. If `radix` is\n * `undefined` or `0`, a `radix` of `10` is used unless `value` is a\n * hexadecimal, in which case a `radix` of `16` is used.\n *\n * **Note:** This method aligns with the\n * [ES5 implementation](https://es5.github.io/#x15.1.2.2) of `parseInt`.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category String\n * @param {string} string The string to convert.\n * @param {number} [radix=10] The radix to interpret `value` by.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.parseInt('08');\n * // => 8\n *\n * _.map(['6', '08', '10'], _.parseInt);\n * // => [6, 8, 10]\n */\n function parseInt(string, radix, guard) {\n if (guard || radix == null) {\n radix = 0;\n } else if (radix) {\n radix = +radix;\n }\n return nativeParseInt(toString(string).replace(reTrimStart, ''), radix || 0);\n }\n\n /**\n * Repeats the given string `n` times.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to repeat.\n * @param {number} [n=1] The number of times to repeat the string.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {string} Returns the repeated string.\n * @example\n *\n * _.repeat('*', 3);\n * // => '***'\n *\n * _.repeat('abc', 2);\n * // => 'abcabc'\n *\n * _.repeat('abc', 0);\n * // => ''\n */\n function repeat(string, n, guard) {\n if ((guard ? isIterateeCall(string, n, guard) : n === undefined)) {\n n = 1;\n } else {\n n = toInteger(n);\n }\n return baseRepeat(toString(string), n);\n }\n\n /**\n * Replaces matches for `pattern` in `string` with `replacement`.\n *\n * **Note:** This method is based on\n * [`String#replace`](https://mdn.io/String/replace).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to modify.\n * @param {RegExp|string} pattern The pattern to replace.\n * @param {Function|string} replacement The match replacement.\n * @returns {string} Returns the modified string.\n * @example\n *\n * _.replace('Hi Fred', 'Fred', 'Barney');\n * // => 'Hi Barney'\n */\n function replace() {\n var args = arguments,\n string = toString(args[0]);\n\n return args.length < 3 ? string : string.replace(args[1], args[2]);\n }\n\n /**\n * Converts `string` to\n * [snake case](https://en.wikipedia.org/wiki/Snake_case).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the snake cased string.\n * @example\n *\n * _.snakeCase('Foo Bar');\n * // => 'foo_bar'\n *\n * _.snakeCase('fooBar');\n * // => 'foo_bar'\n *\n * _.snakeCase('--FOO-BAR--');\n * // => 'foo_bar'\n */\n var snakeCase = createCompounder(function(result, word, index) {\n return result + (index ? '_' : '') + word.toLowerCase();\n });\n\n /**\n * Splits `string` by `separator`.\n *\n * **Note:** This method is based on\n * [`String#split`](https://mdn.io/String/split).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to split.\n * @param {RegExp|string} separator The separator pattern to split by.\n * @param {number} [limit] The length to truncate results to.\n * @returns {Array} Returns the string segments.\n * @example\n *\n * _.split('a-b-c', '-', 2);\n * // => ['a', 'b']\n */\n function split(string, separator, limit) {\n if (limit && typeof limit != 'number' && isIterateeCall(string, separator, limit)) {\n separator = limit = undefined;\n }\n limit = limit === undefined ? MAX_ARRAY_LENGTH : limit >>> 0;\n if (!limit) {\n return [];\n }\n string = toString(string);\n if (string && (\n typeof separator == 'string' ||\n (separator != null && !isRegExp(separator))\n )) {\n separator = baseToString(separator);\n if (!separator && hasUnicode(string)) {\n return castSlice(stringToArray(string), 0, limit);\n }\n }\n return string.split(separator, limit);\n }\n\n /**\n * Converts `string` to\n * [start case](https://en.wikipedia.org/wiki/Letter_case#Stylistic_or_specialised_usage).\n *\n * @static\n * @memberOf _\n * @since 3.1.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the start cased string.\n * @example\n *\n * _.startCase('--foo-bar--');\n * // => 'Foo Bar'\n *\n * _.startCase('fooBar');\n * // => 'Foo Bar'\n *\n * _.startCase('__FOO_BAR__');\n * // => 'FOO BAR'\n */\n var startCase = createCompounder(function(result, word, index) {\n return result + (index ? ' ' : '') + upperFirst(word);\n });\n\n /**\n * Checks if `string` starts with the given target string.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to inspect.\n * @param {string} [target] The string to search for.\n * @param {number} [position=0] The position to search from.\n * @returns {boolean} Returns `true` if `string` starts with `target`,\n * else `false`.\n * @example\n *\n * _.startsWith('abc', 'a');\n * // => true\n *\n * _.startsWith('abc', 'b');\n * // => false\n *\n * _.startsWith('abc', 'b', 1);\n * // => true\n */\n function startsWith(string, target, position) {\n string = toString(string);\n position = position == null\n ? 0\n : baseClamp(toInteger(position), 0, string.length);\n\n target = baseToString(target);\n return string.slice(position, position + target.length) == target;\n }\n\n /**\n * Creates a compiled template function that can interpolate data properties\n * in \"interpolate\" delimiters, HTML-escape interpolated data properties in\n * \"escape\" delimiters, and execute JavaScript in \"evaluate\" delimiters. Data\n * properties may be accessed as free variables in the template. If a setting\n * object is given, it takes precedence over `_.templateSettings` values.\n *\n * **Note:** In the development build `_.template` utilizes\n * [sourceURLs](http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl)\n * for easier debugging.\n *\n * For more information on precompiling templates see\n * [lodash's custom builds documentation](https://lodash.com/custom-builds).\n *\n * For more information on Chrome extension sandboxes see\n * [Chrome's extensions documentation](https://developer.chrome.com/extensions/sandboxingEval).\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category String\n * @param {string} [string=''] The template string.\n * @param {Object} [options={}] The options object.\n * @param {RegExp} [options.escape=_.templateSettings.escape]\n * The HTML \"escape\" delimiter.\n * @param {RegExp} [options.evaluate=_.templateSettings.evaluate]\n * The \"evaluate\" delimiter.\n * @param {Object} [options.imports=_.templateSettings.imports]\n * An object to import into the template as free variables.\n * @param {RegExp} [options.interpolate=_.templateSettings.interpolate]\n * The \"interpolate\" delimiter.\n * @param {string} [options.sourceURL='lodash.templateSources[n]']\n * The sourceURL of the compiled template.\n * @param {string} [options.variable='obj']\n * The data object variable name.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Function} Returns the compiled template function.\n * @example\n *\n * // Use the \"interpolate\" delimiter to create a compiled template.\n * var compiled = _.template('hello <%= user %>!');\n * compiled({ 'user': 'fred' });\n * // => 'hello fred!'\n *\n * // Use the HTML \"escape\" delimiter to escape data property values.\n * var compiled = _.template('<b><%- value %></b>');\n * compiled({ 'value': '<script>' });\n * // => '<b><script></b>'\n *\n * // Use the \"evaluate\" delimiter to execute JavaScript and generate HTML.\n * var compiled = _.template('<% _.forEach(users, function(user) { %><li><%- user %></li><% }); %>');\n * compiled({ 'users': ['fred', 'barney'] });\n * // => '<li>fred</li><li>barney</li>'\n *\n * // Use the internal `print` function in \"evaluate\" delimiters.\n * var compiled = _.template('<% print(\"hello \" + user); %>!');\n * compiled({ 'user': 'barney' });\n * // => 'hello barney!'\n *\n * // Use the ES template literal delimiter as an \"interpolate\" delimiter.\n * // Disable support by replacing the \"interpolate\" delimiter.\n * var compiled = _.template('hello ${ user }!');\n * compiled({ 'user': 'pebbles' });\n * // => 'hello pebbles!'\n *\n * // Use backslashes to treat delimiters as plain text.\n * var compiled = _.template('<%= \"\\\\<%- value %\\\\>\" %>');\n * compiled({ 'value': 'ignored' });\n * // => '<%- value %>'\n *\n * // Use the `imports` option to import `jQuery` as `jq`.\n * var text = '<% jq.each(users, function(user) { %><li><%- user %></li><% }); %>';\n * var compiled = _.template(text, { 'imports': { 'jq': jQuery } });\n * compiled({ 'users': ['fred', 'barney'] });\n * // => '<li>fred</li><li>barney</li>'\n *\n * // Use the `sourceURL` option to specify a custom sourceURL for the template.\n * var compiled = _.template('hello <%= user %>!', { 'sourceURL': '/basic/greeting.jst' });\n * compiled(data);\n * // => Find the source of \"greeting.jst\" under the Sources tab or Resources panel of the web inspector.\n *\n * // Use the `variable` option to ensure a with-statement isn't used in the compiled template.\n * var compiled = _.template('hi <%= data.user %>!', { 'variable': 'data' });\n * compiled.source;\n * // => function(data) {\n * // var __t, __p = '';\n * // __p += 'hi ' + ((__t = ( data.user )) == null ? '' : __t) + '!';\n * // return __p;\n * // }\n *\n * // Use custom template delimiters.\n * _.templateSettings.interpolate = /{{([\\s\\S]+?)}}/g;\n * var compiled = _.template('hello {{ user }}!');\n * compiled({ 'user': 'mustache' });\n * // => 'hello mustache!'\n *\n * // Use the `source` property to inline compiled templates for meaningful\n * // line numbers in error messages and stack traces.\n * fs.writeFileSync(path.join(process.cwd(), 'jst.js'), '\\\n * var JST = {\\\n * \"main\": ' + _.template(mainText).source + '\\\n * };\\\n * ');\n */\n function template(string, options, guard) {\n // Based on John Resig's `tmpl` implementation\n // (http://ejohn.org/blog/javascript-micro-templating/)\n // and Laura Doktorova's doT.js (https://github.com/olado/doT).\n var settings = lodash.templateSettings;\n\n if (guard && isIterateeCall(string, options, guard)) {\n options = undefined;\n }\n string = toString(string);\n options = assignInWith({}, options, settings, customDefaultsAssignIn);\n\n var imports = assignInWith({}, options.imports, settings.imports, customDefaultsAssignIn),\n importsKeys = keys(imports),\n importsValues = baseValues(imports, importsKeys);\n\n var isEscaping,\n isEvaluating,\n index = 0,\n interpolate = options.interpolate || reNoMatch,\n source = \"__p += '\";\n\n // Compile the regexp to match each delimiter.\n var reDelimiters = RegExp(\n (options.escape || reNoMatch).source + '|' +\n interpolate.source + '|' +\n (interpolate === reInterpolate ? reEsTemplate : reNoMatch).source + '|' +\n (options.evaluate || reNoMatch).source + '|$'\n , 'g');\n\n // Use a sourceURL for easier debugging.\n // The sourceURL gets injected into the source that's eval-ed, so be careful\n // to normalize all kinds of whitespace, so e.g. newlines (and unicode versions of it) can't sneak in\n // and escape the comment, thus injecting code that gets evaled.\n var sourceURL = '//# sourceURL=' +\n (hasOwnProperty.call(options, 'sourceURL')\n ? (options.sourceURL + '').replace(/\\s/g, ' ')\n : ('lodash.templateSources[' + (++templateCounter) + ']')\n ) + '\\n';\n\n string.replace(reDelimiters, function(match, escapeValue, interpolateValue, esTemplateValue, evaluateValue, offset) {\n interpolateValue || (interpolateValue = esTemplateValue);\n\n // Escape characters that can't be included in string literals.\n source += string.slice(index, offset).replace(reUnescapedString, escapeStringChar);\n\n // Replace delimiters with snippets.\n if (escapeValue) {\n isEscaping = true;\n source += \"' +\\n__e(\" + escapeValue + \") +\\n'\";\n }\n if (evaluateValue) {\n isEvaluating = true;\n source += \"';\\n\" + evaluateValue + \";\\n__p += '\";\n }\n if (interpolateValue) {\n source += \"' +\\n((__t = (\" + interpolateValue + \")) == null ? '' : __t) +\\n'\";\n }\n index = offset + match.length;\n\n // The JS engine embedded in Adobe products needs `match` returned in\n // order to produce the correct `offset` value.\n return match;\n });\n\n source += \"';\\n\";\n\n // If `variable` is not specified wrap a with-statement around the generated\n // code to add the data object to the top of the scope chain.\n var variable = hasOwnProperty.call(options, 'variable') && options.variable;\n if (!variable) {\n source = 'with (obj) {\\n' + source + '\\n}\\n';\n }\n // Throw an error if a forbidden character was found in `variable`, to prevent\n // potential command injection attacks.\n else if (reForbiddenIdentifierChars.test(variable)) {\n throw new Error(INVALID_TEMPL_VAR_ERROR_TEXT);\n }\n\n // Cleanup code by stripping empty strings.\n source = (isEvaluating ? source.replace(reEmptyStringLeading, '') : source)\n .replace(reEmptyStringMiddle, '$1')\n .replace(reEmptyStringTrailing, '$1;');\n\n // Frame code as the function body.\n source = 'function(' + (variable || 'obj') + ') {\\n' +\n (variable\n ? ''\n : 'obj || (obj = {});\\n'\n ) +\n \"var __t, __p = ''\" +\n (isEscaping\n ? ', __e = _.escape'\n : ''\n ) +\n (isEvaluating\n ? ', __j = Array.prototype.join;\\n' +\n \"function print() { __p += __j.call(arguments, '') }\\n\"\n : ';\\n'\n ) +\n source +\n 'return __p\\n}';\n\n var result = attempt(function() {\n return Function(importsKeys, sourceURL + 'return ' + source)\n .apply(undefined, importsValues);\n });\n\n // Provide the compiled function's source by its `toString` method or\n // the `source` property as a convenience for inlining compiled templates.\n result.source = source;\n if (isError(result)) {\n throw result;\n }\n return result;\n }\n\n /**\n * Converts `string`, as a whole, to lower case just like\n * [String#toLowerCase](https://mdn.io/toLowerCase).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the lower cased string.\n * @example\n *\n * _.toLower('--Foo-Bar--');\n * // => '--foo-bar--'\n *\n * _.toLower('fooBar');\n * // => 'foobar'\n *\n * _.toLower('__FOO_BAR__');\n * // => '__foo_bar__'\n */\n function toLower(value) {\n return toString(value).toLowerCase();\n }\n\n /**\n * Converts `string`, as a whole, to upper case just like\n * [String#toUpperCase](https://mdn.io/toUpperCase).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the upper cased string.\n * @example\n *\n * _.toUpper('--foo-bar--');\n * // => '--FOO-BAR--'\n *\n * _.toUpper('fooBar');\n * // => 'FOOBAR'\n *\n * _.toUpper('__foo_bar__');\n * // => '__FOO_BAR__'\n */\n function toUpper(value) {\n return toString(value).toUpperCase();\n }\n\n /**\n * Removes leading and trailing whitespace or specified characters from `string`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to trim.\n * @param {string} [chars=whitespace] The characters to trim.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {string} Returns the trimmed string.\n * @example\n *\n * _.trim(' abc ');\n * // => 'abc'\n *\n * _.trim('-_-abc-_-', '_-');\n * // => 'abc'\n *\n * _.map([' foo ', ' bar '], _.trim);\n * // => ['foo', 'bar']\n */\n function trim(string, chars, guard) {\n string = toString(string);\n if (string && (guard || chars === undefined)) {\n return baseTrim(string);\n }\n if (!string || !(chars = baseToString(chars))) {\n return string;\n }\n var strSymbols = stringToArray(string),\n chrSymbols = stringToArray(chars),\n start = charsStartIndex(strSymbols, chrSymbols),\n end = charsEndIndex(strSymbols, chrSymbols) + 1;\n\n return castSlice(strSymbols, start, end).join('');\n }\n\n /**\n * Removes trailing whitespace or specified characters from `string`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to trim.\n * @param {string} [chars=whitespace] The characters to trim.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {string} Returns the trimmed string.\n * @example\n *\n * _.trimEnd(' abc ');\n * // => ' abc'\n *\n * _.trimEnd('-_-abc-_-', '_-');\n * // => '-_-abc'\n */\n function trimEnd(string, chars, guard) {\n string = toString(string);\n if (string && (guard || chars === undefined)) {\n return string.slice(0, trimmedEndIndex(string) + 1);\n }\n if (!string || !(chars = baseToString(chars))) {\n return string;\n }\n var strSymbols = stringToArray(string),\n end = charsEndIndex(strSymbols, stringToArray(chars)) + 1;\n\n return castSlice(strSymbols, 0, end).join('');\n }\n\n /**\n * Removes leading whitespace or specified characters from `string`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to trim.\n * @param {string} [chars=whitespace] The characters to trim.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {string} Returns the trimmed string.\n * @example\n *\n * _.trimStart(' abc ');\n * // => 'abc '\n *\n * _.trimStart('-_-abc-_-', '_-');\n * // => 'abc-_-'\n */\n function trimStart(string, chars, guard) {\n string = toString(string);\n if (string && (guard || chars === undefined)) {\n return string.replace(reTrimStart, '');\n }\n if (!string || !(chars = baseToString(chars))) {\n return string;\n }\n var strSymbols = stringToArray(string),\n start = charsStartIndex(strSymbols, stringToArray(chars));\n\n return castSlice(strSymbols, start).join('');\n }\n\n /**\n * Truncates `string` if it's longer than the given maximum string length.\n * The last characters of the truncated string are replaced with the omission\n * string which defaults to \"...\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to truncate.\n * @param {Object} [options={}] The options object.\n * @param {number} [options.length=30] The maximum string length.\n * @param {string} [options.omission='...'] The string to indicate text is omitted.\n * @param {RegExp|string} [options.separator] The separator pattern to truncate to.\n * @returns {string} Returns the truncated string.\n * @example\n *\n * _.truncate('hi-diddly-ho there, neighborino');\n * // => 'hi-diddly-ho there, neighbo...'\n *\n * _.truncate('hi-diddly-ho there, neighborino', {\n * 'length': 24,\n * 'separator': ' '\n * });\n * // => 'hi-diddly-ho there,...'\n *\n * _.truncate('hi-diddly-ho there, neighborino', {\n * 'length': 24,\n * 'separator': /,? +/\n * });\n * // => 'hi-diddly-ho there...'\n *\n * _.truncate('hi-diddly-ho there, neighborino', {\n * 'omission': ' [...]'\n * });\n * // => 'hi-diddly-ho there, neig [...]'\n */\n function truncate(string, options) {\n var length = DEFAULT_TRUNC_LENGTH,\n omission = DEFAULT_TRUNC_OMISSION;\n\n if (isObject(options)) {\n var separator = 'separator' in options ? options.separator : separator;\n length = 'length' in options ? toInteger(options.length) : length;\n omission = 'omission' in options ? baseToString(options.omission) : omission;\n }\n string = toString(string);\n\n var strLength = string.length;\n if (hasUnicode(string)) {\n var strSymbols = stringToArray(string);\n strLength = strSymbols.length;\n }\n if (length >= strLength) {\n return string;\n }\n var end = length - stringSize(omission);\n if (end < 1) {\n return omission;\n }\n var result = strSymbols\n ? castSlice(strSymbols, 0, end).join('')\n : string.slice(0, end);\n\n if (separator === undefined) {\n return result + omission;\n }\n if (strSymbols) {\n end += (result.length - end);\n }\n if (isRegExp(separator)) {\n if (string.slice(end).search(separator)) {\n var match,\n substring = result;\n\n if (!separator.global) {\n separator = RegExp(separator.source, toString(reFlags.exec(separator)) + 'g');\n }\n separator.lastIndex = 0;\n while ((match = separator.exec(substring))) {\n var newEnd = match.index;\n }\n result = result.slice(0, newEnd === undefined ? end : newEnd);\n }\n } else if (string.indexOf(baseToString(separator), end) != end) {\n var index = result.lastIndexOf(separator);\n if (index > -1) {\n result = result.slice(0, index);\n }\n }\n return result + omission;\n }\n\n /**\n * The inverse of `_.escape`; this method converts the HTML entities\n * `&`, `<`, `>`, `"`, and `'` in `string` to\n * their corresponding characters.\n *\n * **Note:** No other HTML entities are unescaped. To unescape additional\n * HTML entities use a third-party library like [_he_](https://mths.be/he).\n *\n * @static\n * @memberOf _\n * @since 0.6.0\n * @category String\n * @param {string} [string=''] The string to unescape.\n * @returns {string} Returns the unescaped string.\n * @example\n *\n * _.unescape('fred, barney, & pebbles');\n * // => 'fred, barney, & pebbles'\n */\n function unescape(string) {\n string = toString(string);\n return (string && reHasEscapedHtml.test(string))\n ? string.replace(reEscapedHtml, unescapeHtmlChar)\n : string;\n }\n\n /**\n * Converts `string`, as space separated words, to upper case.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the upper cased string.\n * @example\n *\n * _.upperCase('--foo-bar');\n * // => 'FOO BAR'\n *\n * _.upperCase('fooBar');\n * // => 'FOO BAR'\n *\n * _.upperCase('__foo_bar__');\n * // => 'FOO BAR'\n */\n var upperCase = createCompounder(function(result, word, index) {\n return result + (index ? ' ' : '') + word.toUpperCase();\n });\n\n /**\n * Converts the first character of `string` to upper case.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.upperFirst('fred');\n * // => 'Fred'\n *\n * _.upperFirst('FRED');\n * // => 'FRED'\n */\n var upperFirst = createCaseFirst('toUpperCase');\n\n /**\n * Splits `string` into an array of its words.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to inspect.\n * @param {RegExp|string} [pattern] The pattern to match words.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the words of `string`.\n * @example\n *\n * _.words('fred, barney, & pebbles');\n * // => ['fred', 'barney', 'pebbles']\n *\n * _.words('fred, barney, & pebbles', /[^, ]+/g);\n * // => ['fred', 'barney', '&', 'pebbles']\n */\n function words(string, pattern, guard) {\n string = toString(string);\n pattern = guard ? undefined : pattern;\n\n if (pattern === undefined) {\n return hasUnicodeWord(string) ? unicodeWords(string) : asciiWords(string);\n }\n return string.match(pattern) || [];\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Attempts to invoke `func`, returning either the result or the caught error\n * object. Any additional arguments are provided to `func` when it's invoked.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Util\n * @param {Function} func The function to attempt.\n * @param {...*} [args] The arguments to invoke `func` with.\n * @returns {*} Returns the `func` result or error object.\n * @example\n *\n * // Avoid throwing errors for invalid selectors.\n * var elements = _.attempt(function(selector) {\n * return document.querySelectorAll(selector);\n * }, '>_>');\n *\n * if (_.isError(elements)) {\n * elements = [];\n * }\n */\n var attempt = baseRest(function(func, args) {\n try {\n return apply(func, undefined, args);\n } catch (e) {\n return isError(e) ? e : new Error(e);\n }\n });\n\n /**\n * Binds methods of an object to the object itself, overwriting the existing\n * method.\n *\n * **Note:** This method doesn't set the \"length\" property of bound functions.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {Object} object The object to bind and assign the bound methods to.\n * @param {...(string|string[])} methodNames The object method names to bind.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var view = {\n * 'label': 'docs',\n * 'click': function() {\n * console.log('clicked ' + this.label);\n * }\n * };\n *\n * _.bindAll(view, ['click']);\n * jQuery(element).on('click', view.click);\n * // => Logs 'clicked docs' when clicked.\n */\n var bindAll = flatRest(function(object, methodNames) {\n arrayEach(methodNames, function(key) {\n key = toKey(key);\n baseAssignValue(object, key, bind(object[key], object));\n });\n return object;\n });\n\n /**\n * Creates a function that iterates over `pairs` and invokes the corresponding\n * function of the first predicate to return truthy. The predicate-function\n * pairs are invoked with the `this` binding and arguments of the created\n * function.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Util\n * @param {Array} pairs The predicate-function pairs.\n * @returns {Function} Returns the new composite function.\n * @example\n *\n * var func = _.cond([\n * [_.matches({ 'a': 1 }), _.constant('matches A')],\n * [_.conforms({ 'b': _.isNumber }), _.constant('matches B')],\n * [_.stubTrue, _.constant('no match')]\n * ]);\n *\n * func({ 'a': 1, 'b': 2 });\n * // => 'matches A'\n *\n * func({ 'a': 0, 'b': 1 });\n * // => 'matches B'\n *\n * func({ 'a': '1', 'b': '2' });\n * // => 'no match'\n */\n function cond(pairs) {\n var length = pairs == null ? 0 : pairs.length,\n toIteratee = getIteratee();\n\n pairs = !length ? [] : arrayMap(pairs, function(pair) {\n if (typeof pair[1] != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n return [toIteratee(pair[0]), pair[1]];\n });\n\n return baseRest(function(args) {\n var index = -1;\n while (++index < length) {\n var pair = pairs[index];\n if (apply(pair[0], this, args)) {\n return apply(pair[1], this, args);\n }\n }\n });\n }\n\n /**\n * Creates a function that invokes the predicate properties of `source` with\n * the corresponding property values of a given object, returning `true` if\n * all predicates return truthy, else `false`.\n *\n * **Note:** The created function is equivalent to `_.conformsTo` with\n * `source` partially applied.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Util\n * @param {Object} source The object of property predicates to conform to.\n * @returns {Function} Returns the new spec function.\n * @example\n *\n * var objects = [\n * { 'a': 2, 'b': 1 },\n * { 'a': 1, 'b': 2 }\n * ];\n *\n * _.filter(objects, _.conforms({ 'b': function(n) { return n > 1; } }));\n * // => [{ 'a': 1, 'b': 2 }]\n */\n function conforms(source) {\n return baseConforms(baseClone(source, CLONE_DEEP_FLAG));\n }\n\n /**\n * Creates a function that returns `value`.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {*} value The value to return from the new function.\n * @returns {Function} Returns the new constant function.\n * @example\n *\n * var objects = _.times(2, _.constant({ 'a': 1 }));\n *\n * console.log(objects);\n * // => [{ 'a': 1 }, { 'a': 1 }]\n *\n * console.log(objects[0] === objects[1]);\n * // => true\n */\n function constant(value) {\n return function() {\n return value;\n };\n }\n\n /**\n * Checks `value` to determine whether a default value should be returned in\n * its place. The `defaultValue` is returned if `value` is `NaN`, `null`,\n * or `undefined`.\n *\n * @static\n * @memberOf _\n * @since 4.14.0\n * @category Util\n * @param {*} value The value to check.\n * @param {*} defaultValue The default value.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * _.defaultTo(1, 10);\n * // => 1\n *\n * _.defaultTo(undefined, 10);\n * // => 10\n */\n function defaultTo(value, defaultValue) {\n return (value == null || value !== value) ? defaultValue : value;\n }\n\n /**\n * Creates a function that returns the result of invoking the given functions\n * with the `this` binding of the created function, where each successive\n * invocation is supplied the return value of the previous.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Util\n * @param {...(Function|Function[])} [funcs] The functions to invoke.\n * @returns {Function} Returns the new composite function.\n * @see _.flowRight\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * var addSquare = _.flow([_.add, square]);\n * addSquare(1, 2);\n * // => 9\n */\n var flow = createFlow();\n\n /**\n * This method is like `_.flow` except that it creates a function that\n * invokes the given functions from right to left.\n *\n * @static\n * @since 3.0.0\n * @memberOf _\n * @category Util\n * @param {...(Function|Function[])} [funcs] The functions to invoke.\n * @returns {Function} Returns the new composite function.\n * @see _.flow\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * var addSquare = _.flowRight([square, _.add]);\n * addSquare(1, 2);\n * // => 9\n */\n var flowRight = createFlow(true);\n\n /**\n * This method returns the first argument it receives.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {*} value Any value.\n * @returns {*} Returns `value`.\n * @example\n *\n * var object = { 'a': 1 };\n *\n * console.log(_.identity(object) === object);\n * // => true\n */\n function identity(value) {\n return value;\n }\n\n /**\n * Creates a function that invokes `func` with the arguments of the created\n * function. If `func` is a property name, the created function returns the\n * property value for a given element. If `func` is an array or object, the\n * created function returns `true` for elements that contain the equivalent\n * source properties, otherwise it returns `false`.\n *\n * @static\n * @since 4.0.0\n * @memberOf _\n * @category Util\n * @param {*} [func=_.identity] The value to convert to a callback.\n * @returns {Function} Returns the callback.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': true },\n * { 'user': 'fred', 'age': 40, 'active': false }\n * ];\n *\n * // The `_.matches` iteratee shorthand.\n * _.filter(users, _.iteratee({ 'user': 'barney', 'active': true }));\n * // => [{ 'user': 'barney', 'age': 36, 'active': true }]\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.filter(users, _.iteratee(['user', 'fred']));\n * // => [{ 'user': 'fred', 'age': 40 }]\n *\n * // The `_.property` iteratee shorthand.\n * _.map(users, _.iteratee('user'));\n * // => ['barney', 'fred']\n *\n * // Create custom iteratee shorthands.\n * _.iteratee = _.wrap(_.iteratee, function(iteratee, func) {\n * return !_.isRegExp(func) ? iteratee(func) : function(string) {\n * return func.test(string);\n * };\n * });\n *\n * _.filter(['abc', 'def'], /ef/);\n * // => ['def']\n */\n function iteratee(func) {\n return baseIteratee(typeof func == 'function' ? func : baseClone(func, CLONE_DEEP_FLAG));\n }\n\n /**\n * Creates a function that performs a partial deep comparison between a given\n * object and `source`, returning `true` if the given object has equivalent\n * property values, else `false`.\n *\n * **Note:** The created function is equivalent to `_.isMatch` with `source`\n * partially applied.\n *\n * Partial comparisons will match empty array and empty object `source`\n * values against any array or object value, respectively. See `_.isEqual`\n * for a list of supported value comparisons.\n *\n * **Note:** Multiple values can be checked by combining several matchers\n * using `_.overSome`\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Util\n * @param {Object} source The object of property values to match.\n * @returns {Function} Returns the new spec function.\n * @example\n *\n * var objects = [\n * { 'a': 1, 'b': 2, 'c': 3 },\n * { 'a': 4, 'b': 5, 'c': 6 }\n * ];\n *\n * _.filter(objects, _.matches({ 'a': 4, 'c': 6 }));\n * // => [{ 'a': 4, 'b': 5, 'c': 6 }]\n *\n * // Checking for several possible values\n * _.filter(objects, _.overSome([_.matches({ 'a': 1 }), _.matches({ 'a': 4 })]));\n * // => [{ 'a': 1, 'b': 2, 'c': 3 }, { 'a': 4, 'b': 5, 'c': 6 }]\n */\n function matches(source) {\n return baseMatches(baseClone(source, CLONE_DEEP_FLAG));\n }\n\n /**\n * Creates a function that performs a partial deep comparison between the\n * value at `path` of a given object to `srcValue`, returning `true` if the\n * object value is equivalent, else `false`.\n *\n * **Note:** Partial comparisons will match empty array and empty object\n * `srcValue` values against any array or object value, respectively. See\n * `_.isEqual` for a list of supported value comparisons.\n *\n * **Note:** Multiple values can be checked by combining several matchers\n * using `_.overSome`\n *\n * @static\n * @memberOf _\n * @since 3.2.0\n * @category Util\n * @param {Array|string} path The path of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n * @example\n *\n * var objects = [\n * { 'a': 1, 'b': 2, 'c': 3 },\n * { 'a': 4, 'b': 5, 'c': 6 }\n * ];\n *\n * _.find(objects, _.matchesProperty('a', 4));\n * // => { 'a': 4, 'b': 5, 'c': 6 }\n *\n * // Checking for several possible values\n * _.filter(objects, _.overSome([_.matchesProperty('a', 1), _.matchesProperty('a', 4)]));\n * // => [{ 'a': 1, 'b': 2, 'c': 3 }, { 'a': 4, 'b': 5, 'c': 6 }]\n */\n function matchesProperty(path, srcValue) {\n return baseMatchesProperty(path, baseClone(srcValue, CLONE_DEEP_FLAG));\n }\n\n /**\n * Creates a function that invokes the method at `path` of a given object.\n * Any additional arguments are provided to the invoked method.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Util\n * @param {Array|string} path The path of the method to invoke.\n * @param {...*} [args] The arguments to invoke the method with.\n * @returns {Function} Returns the new invoker function.\n * @example\n *\n * var objects = [\n * { 'a': { 'b': _.constant(2) } },\n * { 'a': { 'b': _.constant(1) } }\n * ];\n *\n * _.map(objects, _.method('a.b'));\n * // => [2, 1]\n *\n * _.map(objects, _.method(['a', 'b']));\n * // => [2, 1]\n */\n var method = baseRest(function(path, args) {\n return function(object) {\n return baseInvoke(object, path, args);\n };\n });\n\n /**\n * The opposite of `_.method`; this method creates a function that invokes\n * the method at a given path of `object`. Any additional arguments are\n * provided to the invoked method.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Util\n * @param {Object} object The object to query.\n * @param {...*} [args] The arguments to invoke the method with.\n * @returns {Function} Returns the new invoker function.\n * @example\n *\n * var array = _.times(3, _.constant),\n * object = { 'a': array, 'b': array, 'c': array };\n *\n * _.map(['a[2]', 'c[0]'], _.methodOf(object));\n * // => [2, 0]\n *\n * _.map([['a', '2'], ['c', '0']], _.methodOf(object));\n * // => [2, 0]\n */\n var methodOf = baseRest(function(object, args) {\n return function(path) {\n return baseInvoke(object, path, args);\n };\n });\n\n /**\n * Adds all own enumerable string keyed function properties of a source\n * object to the destination object. If `object` is a function, then methods\n * are added to its prototype as well.\n *\n * **Note:** Use `_.runInContext` to create a pristine `lodash` function to\n * avoid conflicts caused by modifying the original.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {Function|Object} [object=lodash] The destination object.\n * @param {Object} source The object of functions to add.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.chain=true] Specify whether mixins are chainable.\n * @returns {Function|Object} Returns `object`.\n * @example\n *\n * function vowels(string) {\n * return _.filter(string, function(v) {\n * return /[aeiou]/i.test(v);\n * });\n * }\n *\n * _.mixin({ 'vowels': vowels });\n * _.vowels('fred');\n * // => ['e']\n *\n * _('fred').vowels().value();\n * // => ['e']\n *\n * _.mixin({ 'vowels': vowels }, { 'chain': false });\n * _('fred').vowels();\n * // => ['e']\n */\n function mixin(object, source, options) {\n var props = keys(source),\n methodNames = baseFunctions(source, props);\n\n if (options == null &&\n !(isObject(source) && (methodNames.length || !props.length))) {\n options = source;\n source = object;\n object = this;\n methodNames = baseFunctions(source, keys(source));\n }\n var chain = !(isObject(options) && 'chain' in options) || !!options.chain,\n isFunc = isFunction(object);\n\n arrayEach(methodNames, function(methodName) {\n var func = source[methodName];\n object[methodName] = func;\n if (isFunc) {\n object.prototype[methodName] = function() {\n var chainAll = this.__chain__;\n if (chain || chainAll) {\n var result = object(this.__wrapped__),\n actions = result.__actions__ = copyArray(this.__actions__);\n\n actions.push({ 'func': func, 'args': arguments, 'thisArg': object });\n result.__chain__ = chainAll;\n return result;\n }\n return func.apply(object, arrayPush([this.value()], arguments));\n };\n }\n });\n\n return object;\n }\n\n /**\n * Reverts the `_` variable to its previous value and returns a reference to\n * the `lodash` function.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @returns {Function} Returns the `lodash` function.\n * @example\n *\n * var lodash = _.noConflict();\n */\n function noConflict() {\n if (root._ === this) {\n root._ = oldDash;\n }\n return this;\n }\n\n /**\n * This method returns `undefined`.\n *\n * @static\n * @memberOf _\n * @since 2.3.0\n * @category Util\n * @example\n *\n * _.times(2, _.noop);\n * // => [undefined, undefined]\n */\n function noop() {\n // No operation performed.\n }\n\n /**\n * Creates a function that gets the argument at index `n`. If `n` is negative,\n * the nth argument from the end is returned.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Util\n * @param {number} [n=0] The index of the argument to return.\n * @returns {Function} Returns the new pass-thru function.\n * @example\n *\n * var func = _.nthArg(1);\n * func('a', 'b', 'c', 'd');\n * // => 'b'\n *\n * var func = _.nthArg(-2);\n * func('a', 'b', 'c', 'd');\n * // => 'c'\n */\n function nthArg(n) {\n n = toInteger(n);\n return baseRest(function(args) {\n return baseNth(args, n);\n });\n }\n\n /**\n * Creates a function that invokes `iteratees` with the arguments it receives\n * and returns their results.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Util\n * @param {...(Function|Function[])} [iteratees=[_.identity]]\n * The iteratees to invoke.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var func = _.over([Math.max, Math.min]);\n *\n * func(1, 2, 3, 4);\n * // => [4, 1]\n */\n var over = createOver(arrayMap);\n\n /**\n * Creates a function that checks if **all** of the `predicates` return\n * truthy when invoked with the arguments it receives.\n *\n * Following shorthands are possible for providing predicates.\n * Pass an `Object` and it will be used as an parameter for `_.matches` to create the predicate.\n * Pass an `Array` of parameters for `_.matchesProperty` and the predicate will be created using them.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Util\n * @param {...(Function|Function[])} [predicates=[_.identity]]\n * The predicates to check.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var func = _.overEvery([Boolean, isFinite]);\n *\n * func('1');\n * // => true\n *\n * func(null);\n * // => false\n *\n * func(NaN);\n * // => false\n */\n var overEvery = createOver(arrayEvery);\n\n /**\n * Creates a function that checks if **any** of the `predicates` return\n * truthy when invoked with the arguments it receives.\n *\n * Following shorthands are possible for providing predicates.\n * Pass an `Object` and it will be used as an parameter for `_.matches` to create the predicate.\n * Pass an `Array` of parameters for `_.matchesProperty` and the predicate will be created using them.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Util\n * @param {...(Function|Function[])} [predicates=[_.identity]]\n * The predicates to check.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var func = _.overSome([Boolean, isFinite]);\n *\n * func('1');\n * // => true\n *\n * func(null);\n * // => true\n *\n * func(NaN);\n * // => false\n *\n * var matchesFunc = _.overSome([{ 'a': 1 }, { 'a': 2 }])\n * var matchesPropertyFunc = _.overSome([['a', 1], ['a', 2]])\n */\n var overSome = createOver(arraySome);\n\n /**\n * Creates a function that returns the value at `path` of a given object.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n * @example\n *\n * var objects = [\n * { 'a': { 'b': 2 } },\n * { 'a': { 'b': 1 } }\n * ];\n *\n * _.map(objects, _.property('a.b'));\n * // => [2, 1]\n *\n * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b');\n * // => [1, 2]\n */\n function property(path) {\n return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path);\n }\n\n /**\n * The opposite of `_.property`; this method creates a function that returns\n * the value at a given path of `object`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Util\n * @param {Object} object The object to query.\n * @returns {Function} Returns the new accessor function.\n * @example\n *\n * var array = [0, 1, 2],\n * object = { 'a': array, 'b': array, 'c': array };\n *\n * _.map(['a[2]', 'c[0]'], _.propertyOf(object));\n * // => [2, 0]\n *\n * _.map([['a', '2'], ['c', '0']], _.propertyOf(object));\n * // => [2, 0]\n */\n function propertyOf(object) {\n return function(path) {\n return object == null ? undefined : baseGet(object, path);\n };\n }\n\n /**\n * Creates an array of numbers (positive and/or negative) progressing from\n * `start` up to, but not including, `end`. A step of `-1` is used if a negative\n * `start` is specified without an `end` or `step`. If `end` is not specified,\n * it's set to `start` with `start` then set to `0`.\n *\n * **Note:** JavaScript follows the IEEE-754 standard for resolving\n * floating-point values which can produce unexpected results.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {number} [start=0] The start of the range.\n * @param {number} end The end of the range.\n * @param {number} [step=1] The value to increment or decrement by.\n * @returns {Array} Returns the range of numbers.\n * @see _.inRange, _.rangeRight\n * @example\n *\n * _.range(4);\n * // => [0, 1, 2, 3]\n *\n * _.range(-4);\n * // => [0, -1, -2, -3]\n *\n * _.range(1, 5);\n * // => [1, 2, 3, 4]\n *\n * _.range(0, 20, 5);\n * // => [0, 5, 10, 15]\n *\n * _.range(0, -4, -1);\n * // => [0, -1, -2, -3]\n *\n * _.range(1, 4, 0);\n * // => [1, 1, 1]\n *\n * _.range(0);\n * // => []\n */\n var range = createRange();\n\n /**\n * This method is like `_.range` except that it populates values in\n * descending order.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Util\n * @param {number} [start=0] The start of the range.\n * @param {number} end The end of the range.\n * @param {number} [step=1] The value to increment or decrement by.\n * @returns {Array} Returns the range of numbers.\n * @see _.inRange, _.range\n * @example\n *\n * _.rangeRight(4);\n * // => [3, 2, 1, 0]\n *\n * _.rangeRight(-4);\n * // => [-3, -2, -1, 0]\n *\n * _.rangeRight(1, 5);\n * // => [4, 3, 2, 1]\n *\n * _.rangeRight(0, 20, 5);\n * // => [15, 10, 5, 0]\n *\n * _.rangeRight(0, -4, -1);\n * // => [-3, -2, -1, 0]\n *\n * _.rangeRight(1, 4, 0);\n * // => [1, 1, 1]\n *\n * _.rangeRight(0);\n * // => []\n */\n var rangeRight = createRange(true);\n\n /**\n * This method returns a new empty array.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Array} Returns the new empty array.\n * @example\n *\n * var arrays = _.times(2, _.stubArray);\n *\n * console.log(arrays);\n * // => [[], []]\n *\n * console.log(arrays[0] === arrays[1]);\n * // => false\n */\n function stubArray() {\n return [];\n }\n\n /**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\n function stubFalse() {\n return false;\n }\n\n /**\n * This method returns a new empty object.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Object} Returns the new empty object.\n * @example\n *\n * var objects = _.times(2, _.stubObject);\n *\n * console.log(objects);\n * // => [{}, {}]\n *\n * console.log(objects[0] === objects[1]);\n * // => false\n */\n function stubObject() {\n return {};\n }\n\n /**\n * This method returns an empty string.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {string} Returns the empty string.\n * @example\n *\n * _.times(2, _.stubString);\n * // => ['', '']\n */\n function stubString() {\n return '';\n }\n\n /**\n * This method returns `true`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `true`.\n * @example\n *\n * _.times(2, _.stubTrue);\n * // => [true, true]\n */\n function stubTrue() {\n return true;\n }\n\n /**\n * Invokes the iteratee `n` times, returning an array of the results of\n * each invocation. The iteratee is invoked with one argument; (index).\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n * @example\n *\n * _.times(3, String);\n * // => ['0', '1', '2']\n *\n * _.times(4, _.constant(0));\n * // => [0, 0, 0, 0]\n */\n function times(n, iteratee) {\n n = toInteger(n);\n if (n < 1 || n > MAX_SAFE_INTEGER) {\n return [];\n }\n var index = MAX_ARRAY_LENGTH,\n length = nativeMin(n, MAX_ARRAY_LENGTH);\n\n iteratee = getIteratee(iteratee);\n n -= MAX_ARRAY_LENGTH;\n\n var result = baseTimes(length, iteratee);\n while (++index < n) {\n iteratee(index);\n }\n return result;\n }\n\n /**\n * Converts `value` to a property path array.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Util\n * @param {*} value The value to convert.\n * @returns {Array} Returns the new property path array.\n * @example\n *\n * _.toPath('a.b.c');\n * // => ['a', 'b', 'c']\n *\n * _.toPath('a[0].b.c');\n * // => ['a', '0', 'b', 'c']\n */\n function toPath(value) {\n if (isArray(value)) {\n return arrayMap(value, toKey);\n }\n return isSymbol(value) ? [value] : copyArray(stringToPath(toString(value)));\n }\n\n /**\n * Generates a unique ID. If `prefix` is given, the ID is appended to it.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {string} [prefix=''] The value to prefix the ID with.\n * @returns {string} Returns the unique ID.\n * @example\n *\n * _.uniqueId('contact_');\n * // => 'contact_104'\n *\n * _.uniqueId();\n * // => '105'\n */\n function uniqueId(prefix) {\n var id = ++idCounter;\n return toString(prefix) + id;\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Adds two numbers.\n *\n * @static\n * @memberOf _\n * @since 3.4.0\n * @category Math\n * @param {number} augend The first number in an addition.\n * @param {number} addend The second number in an addition.\n * @returns {number} Returns the total.\n * @example\n *\n * _.add(6, 4);\n * // => 10\n */\n var add = createMathOperation(function(augend, addend) {\n return augend + addend;\n }, 0);\n\n /**\n * Computes `number` rounded up to `precision`.\n *\n * @static\n * @memberOf _\n * @since 3.10.0\n * @category Math\n * @param {number} number The number to round up.\n * @param {number} [precision=0] The precision to round up to.\n * @returns {number} Returns the rounded up number.\n * @example\n *\n * _.ceil(4.006);\n * // => 5\n *\n * _.ceil(6.004, 2);\n * // => 6.01\n *\n * _.ceil(6040, -2);\n * // => 6100\n */\n var ceil = createRound('ceil');\n\n /**\n * Divide two numbers.\n *\n * @static\n * @memberOf _\n * @since 4.7.0\n * @category Math\n * @param {number} dividend The first number in a division.\n * @param {number} divisor The second number in a division.\n * @returns {number} Returns the quotient.\n * @example\n *\n * _.divide(6, 4);\n * // => 1.5\n */\n var divide = createMathOperation(function(dividend, divisor) {\n return dividend / divisor;\n }, 1);\n\n /**\n * Computes `number` rounded down to `precision`.\n *\n * @static\n * @memberOf _\n * @since 3.10.0\n * @category Math\n * @param {number} number The number to round down.\n * @param {number} [precision=0] The precision to round down to.\n * @returns {number} Returns the rounded down number.\n * @example\n *\n * _.floor(4.006);\n * // => 4\n *\n * _.floor(0.046, 2);\n * // => 0.04\n *\n * _.floor(4060, -2);\n * // => 4000\n */\n var floor = createRound('floor');\n\n /**\n * Computes the maximum value of `array`. If `array` is empty or falsey,\n * `undefined` is returned.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Math\n * @param {Array} array The array to iterate over.\n * @returns {*} Returns the maximum value.\n * @example\n *\n * _.max([4, 2, 8, 6]);\n * // => 8\n *\n * _.max([]);\n * // => undefined\n */\n function max(array) {\n return (array && array.length)\n ? baseExtremum(array, identity, baseGt)\n : undefined;\n }\n\n /**\n * This method is like `_.max` except that it accepts `iteratee` which is\n * invoked for each element in `array` to generate the criterion by which\n * the value is ranked. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Math\n * @param {Array} array The array to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {*} Returns the maximum value.\n * @example\n *\n * var objects = [{ 'n': 1 }, { 'n': 2 }];\n *\n * _.maxBy(objects, function(o) { return o.n; });\n * // => { 'n': 2 }\n *\n * // The `_.property` iteratee shorthand.\n * _.maxBy(objects, 'n');\n * // => { 'n': 2 }\n */\n function maxBy(array, iteratee) {\n return (array && array.length)\n ? baseExtremum(array, getIteratee(iteratee, 2), baseGt)\n : undefined;\n }\n\n /**\n * Computes the mean of the values in `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Math\n * @param {Array} array The array to iterate over.\n * @returns {number} Returns the mean.\n * @example\n *\n * _.mean([4, 2, 8, 6]);\n * // => 5\n */\n function mean(array) {\n return baseMean(array, identity);\n }\n\n /**\n * This method is like `_.mean` except that it accepts `iteratee` which is\n * invoked for each element in `array` to generate the value to be averaged.\n * The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.7.0\n * @category Math\n * @param {Array} array The array to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {number} Returns the mean.\n * @example\n *\n * var objects = [{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }];\n *\n * _.meanBy(objects, function(o) { return o.n; });\n * // => 5\n *\n * // The `_.property` iteratee shorthand.\n * _.meanBy(objects, 'n');\n * // => 5\n */\n function meanBy(array, iteratee) {\n return baseMean(array, getIteratee(iteratee, 2));\n }\n\n /**\n * Computes the minimum value of `array`. If `array` is empty or falsey,\n * `undefined` is returned.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Math\n * @param {Array} array The array to iterate over.\n * @returns {*} Returns the minimum value.\n * @example\n *\n * _.min([4, 2, 8, 6]);\n * // => 2\n *\n * _.min([]);\n * // => undefined\n */\n function min(array) {\n return (array && array.length)\n ? baseExtremum(array, identity, baseLt)\n : undefined;\n }\n\n /**\n * This method is like `_.min` except that it accepts `iteratee` which is\n * invoked for each element in `array` to generate the criterion by which\n * the value is ranked. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Math\n * @param {Array} array The array to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {*} Returns the minimum value.\n * @example\n *\n * var objects = [{ 'n': 1 }, { 'n': 2 }];\n *\n * _.minBy(objects, function(o) { return o.n; });\n * // => { 'n': 1 }\n *\n * // The `_.property` iteratee shorthand.\n * _.minBy(objects, 'n');\n * // => { 'n': 1 }\n */\n function minBy(array, iteratee) {\n return (array && array.length)\n ? baseExtremum(array, getIteratee(iteratee, 2), baseLt)\n : undefined;\n }\n\n /**\n * Multiply two numbers.\n *\n * @static\n * @memberOf _\n * @since 4.7.0\n * @category Math\n * @param {number} multiplier The first number in a multiplication.\n * @param {number} multiplicand The second number in a multiplication.\n * @returns {number} Returns the product.\n * @example\n *\n * _.multiply(6, 4);\n * // => 24\n */\n var multiply = createMathOperation(function(multiplier, multiplicand) {\n return multiplier * multiplicand;\n }, 1);\n\n /**\n * Computes `number` rounded to `precision`.\n *\n * @static\n * @memberOf _\n * @since 3.10.0\n * @category Math\n * @param {number} number The number to round.\n * @param {number} [precision=0] The precision to round to.\n * @returns {number} Returns the rounded number.\n * @example\n *\n * _.round(4.006);\n * // => 4\n *\n * _.round(4.006, 2);\n * // => 4.01\n *\n * _.round(4060, -2);\n * // => 4100\n */\n var round = createRound('round');\n\n /**\n * Subtract two numbers.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Math\n * @param {number} minuend The first number in a subtraction.\n * @param {number} subtrahend The second number in a subtraction.\n * @returns {number} Returns the difference.\n * @example\n *\n * _.subtract(6, 4);\n * // => 2\n */\n var subtract = createMathOperation(function(minuend, subtrahend) {\n return minuend - subtrahend;\n }, 0);\n\n /**\n * Computes the sum of the values in `array`.\n *\n * @static\n * @memberOf _\n * @since 3.4.0\n * @category Math\n * @param {Array} array The array to iterate over.\n * @returns {number} Returns the sum.\n * @example\n *\n * _.sum([4, 2, 8, 6]);\n * // => 20\n */\n function sum(array) {\n return (array && array.length)\n ? baseSum(array, identity)\n : 0;\n }\n\n /**\n * This method is like `_.sum` except that it accepts `iteratee` which is\n * invoked for each element in `array` to generate the value to be summed.\n * The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Math\n * @param {Array} array The array to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {number} Returns the sum.\n * @example\n *\n * var objects = [{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }];\n *\n * _.sumBy(objects, function(o) { return o.n; });\n * // => 20\n *\n * // The `_.property` iteratee shorthand.\n * _.sumBy(objects, 'n');\n * // => 20\n */\n function sumBy(array, iteratee) {\n return (array && array.length)\n ? baseSum(array, getIteratee(iteratee, 2))\n : 0;\n }\n\n /*------------------------------------------------------------------------*/\n\n // Add methods that return wrapped values in chain sequences.\n lodash.after = after;\n lodash.ary = ary;\n lodash.assign = assign;\n lodash.assignIn = assignIn;\n lodash.assignInWith = assignInWith;\n lodash.assignWith = assignWith;\n lodash.at = at;\n lodash.before = before;\n lodash.bind = bind;\n lodash.bindAll = bindAll;\n lodash.bindKey = bindKey;\n lodash.castArray = castArray;\n lodash.chain = chain;\n lodash.chunk = chunk;\n lodash.compact = compact;\n lodash.concat = concat;\n lodash.cond = cond;\n lodash.conforms = conforms;\n lodash.constant = constant;\n lodash.countBy = countBy;\n lodash.create = create;\n lodash.curry = curry;\n lodash.curryRight = curryRight;\n lodash.debounce = debounce;\n lodash.defaults = defaults;\n lodash.defaultsDeep = defaultsDeep;\n lodash.defer = defer;\n lodash.delay = delay;\n lodash.difference = difference;\n lodash.differenceBy = differenceBy;\n lodash.differenceWith = differenceWith;\n lodash.drop = drop;\n lodash.dropRight = dropRight;\n lodash.dropRightWhile = dropRightWhile;\n lodash.dropWhile = dropWhile;\n lodash.fill = fill;\n lodash.filter = filter;\n lodash.flatMap = flatMap;\n lodash.flatMapDeep = flatMapDeep;\n lodash.flatMapDepth = flatMapDepth;\n lodash.flatten = flatten;\n lodash.flattenDeep = flattenDeep;\n lodash.flattenDepth = flattenDepth;\n lodash.flip = flip;\n lodash.flow = flow;\n lodash.flowRight = flowRight;\n lodash.fromPairs = fromPairs;\n lodash.functions = functions;\n lodash.functionsIn = functionsIn;\n lodash.groupBy = groupBy;\n lodash.initial = initial;\n lodash.intersection = intersection;\n lodash.intersectionBy = intersectionBy;\n lodash.intersectionWith = intersectionWith;\n lodash.invert = invert;\n lodash.invertBy = invertBy;\n lodash.invokeMap = invokeMap;\n lodash.iteratee = iteratee;\n lodash.keyBy = keyBy;\n lodash.keys = keys;\n lodash.keysIn = keysIn;\n lodash.map = map;\n lodash.mapKeys = mapKeys;\n lodash.mapValues = mapValues;\n lodash.matches = matches;\n lodash.matchesProperty = matchesProperty;\n lodash.memoize = memoize;\n lodash.merge = merge;\n lodash.mergeWith = mergeWith;\n lodash.method = method;\n lodash.methodOf = methodOf;\n lodash.mixin = mixin;\n lodash.negate = negate;\n lodash.nthArg = nthArg;\n lodash.omit = omit;\n lodash.omitBy = omitBy;\n lodash.once = once;\n lodash.orderBy = orderBy;\n lodash.over = over;\n lodash.overArgs = overArgs;\n lodash.overEvery = overEvery;\n lodash.overSome = overSome;\n lodash.partial = partial;\n lodash.partialRight = partialRight;\n lodash.partition = partition;\n lodash.pick = pick;\n lodash.pickBy = pickBy;\n lodash.property = property;\n lodash.propertyOf = propertyOf;\n lodash.pull = pull;\n lodash.pullAll = pullAll;\n lodash.pullAllBy = pullAllBy;\n lodash.pullAllWith = pullAllWith;\n lodash.pullAt = pullAt;\n lodash.range = range;\n lodash.rangeRight = rangeRight;\n lodash.rearg = rearg;\n lodash.reject = reject;\n lodash.remove = remove;\n lodash.rest = rest;\n lodash.reverse = reverse;\n lodash.sampleSize = sampleSize;\n lodash.set = set;\n lodash.setWith = setWith;\n lodash.shuffle = shuffle;\n lodash.slice = slice;\n lodash.sortBy = sortBy;\n lodash.sortedUniq = sortedUniq;\n lodash.sortedUniqBy = sortedUniqBy;\n lodash.split = split;\n lodash.spread = spread;\n lodash.tail = tail;\n lodash.take = take;\n lodash.takeRight = takeRight;\n lodash.takeRightWhile = takeRightWhile;\n lodash.takeWhile = takeWhile;\n lodash.tap = tap;\n lodash.throttle = throttle;\n lodash.thru = thru;\n lodash.toArray = toArray;\n lodash.toPairs = toPairs;\n lodash.toPairsIn = toPairsIn;\n lodash.toPath = toPath;\n lodash.toPlainObject = toPlainObject;\n lodash.transform = transform;\n lodash.unary = unary;\n lodash.union = union;\n lodash.unionBy = unionBy;\n lodash.unionWith = unionWith;\n lodash.uniq = uniq;\n lodash.uniqBy = uniqBy;\n lodash.uniqWith = uniqWith;\n lodash.unset = unset;\n lodash.unzip = unzip;\n lodash.unzipWith = unzipWith;\n lodash.update = update;\n lodash.updateWith = updateWith;\n lodash.values = values;\n lodash.valuesIn = valuesIn;\n lodash.without = without;\n lodash.words = words;\n lodash.wrap = wrap;\n lodash.xor = xor;\n lodash.xorBy = xorBy;\n lodash.xorWith = xorWith;\n lodash.zip = zip;\n lodash.zipObject = zipObject;\n lodash.zipObjectDeep = zipObjectDeep;\n lodash.zipWith = zipWith;\n\n // Add aliases.\n lodash.entries = toPairs;\n lodash.entriesIn = toPairsIn;\n lodash.extend = assignIn;\n lodash.extendWith = assignInWith;\n\n // Add methods to `lodash.prototype`.\n mixin(lodash, lodash);\n\n /*------------------------------------------------------------------------*/\n\n // Add methods that return unwrapped values in chain sequences.\n lodash.add = add;\n lodash.attempt = attempt;\n lodash.camelCase = camelCase;\n lodash.capitalize = capitalize;\n lodash.ceil = ceil;\n lodash.clamp = clamp;\n lodash.clone = clone;\n lodash.cloneDeep = cloneDeep;\n lodash.cloneDeepWith = cloneDeepWith;\n lodash.cloneWith = cloneWith;\n lodash.conformsTo = conformsTo;\n lodash.deburr = deburr;\n lodash.defaultTo = defaultTo;\n lodash.divide = divide;\n lodash.endsWith = endsWith;\n lodash.eq = eq;\n lodash.escape = escape;\n lodash.escapeRegExp = escapeRegExp;\n lodash.every = every;\n lodash.find = find;\n lodash.findIndex = findIndex;\n lodash.findKey = findKey;\n lodash.findLast = findLast;\n lodash.findLastIndex = findLastIndex;\n lodash.findLastKey = findLastKey;\n lodash.floor = floor;\n lodash.forEach = forEach;\n lodash.forEachRight = forEachRight;\n lodash.forIn = forIn;\n lodash.forInRight = forInRight;\n lodash.forOwn = forOwn;\n lodash.forOwnRight = forOwnRight;\n lodash.get = get;\n lodash.gt = gt;\n lodash.gte = gte;\n lodash.has = has;\n lodash.hasIn = hasIn;\n lodash.head = head;\n lodash.identity = identity;\n lodash.includes = includes;\n lodash.indexOf = indexOf;\n lodash.inRange = inRange;\n lodash.invoke = invoke;\n lodash.isArguments = isArguments;\n lodash.isArray = isArray;\n lodash.isArrayBuffer = isArrayBuffer;\n lodash.isArrayLike = isArrayLike;\n lodash.isArrayLikeObject = isArrayLikeObject;\n lodash.isBoolean = isBoolean;\n lodash.isBuffer = isBuffer;\n lodash.isDate = isDate;\n lodash.isElement = isElement;\n lodash.isEmpty = isEmpty;\n lodash.isEqual = isEqual;\n lodash.isEqualWith = isEqualWith;\n lodash.isError = isError;\n lodash.isFinite = isFinite;\n lodash.isFunction = isFunction;\n lodash.isInteger = isInteger;\n lodash.isLength = isLength;\n lodash.isMap = isMap;\n lodash.isMatch = isMatch;\n lodash.isMatchWith = isMatchWith;\n lodash.isNaN = isNaN;\n lodash.isNative = isNative;\n lodash.isNil = isNil;\n lodash.isNull = isNull;\n lodash.isNumber = isNumber;\n lodash.isObject = isObject;\n lodash.isObjectLike = isObjectLike;\n lodash.isPlainObject = isPlainObject;\n lodash.isRegExp = isRegExp;\n lodash.isSafeInteger = isSafeInteger;\n lodash.isSet = isSet;\n lodash.isString = isString;\n lodash.isSymbol = isSymbol;\n lodash.isTypedArray = isTypedArray;\n lodash.isUndefined = isUndefined;\n lodash.isWeakMap = isWeakMap;\n lodash.isWeakSet = isWeakSet;\n lodash.join = join;\n lodash.kebabCase = kebabCase;\n lodash.last = last;\n lodash.lastIndexOf = lastIndexOf;\n lodash.lowerCase = lowerCase;\n lodash.lowerFirst = lowerFirst;\n lodash.lt = lt;\n lodash.lte = lte;\n lodash.max = max;\n lodash.maxBy = maxBy;\n lodash.mean = mean;\n lodash.meanBy = meanBy;\n lodash.min = min;\n lodash.minBy = minBy;\n lodash.stubArray = stubArray;\n lodash.stubFalse = stubFalse;\n lodash.stubObject = stubObject;\n lodash.stubString = stubString;\n lodash.stubTrue = stubTrue;\n lodash.multiply = multiply;\n lodash.nth = nth;\n lodash.noConflict = noConflict;\n lodash.noop = noop;\n lodash.now = now;\n lodash.pad = pad;\n lodash.padEnd = padEnd;\n lodash.padStart = padStart;\n lodash.parseInt = parseInt;\n lodash.random = random;\n lodash.reduce = reduce;\n lodash.reduceRight = reduceRight;\n lodash.repeat = repeat;\n lodash.replace = replace;\n lodash.result = result;\n lodash.round = round;\n lodash.runInContext = runInContext;\n lodash.sample = sample;\n lodash.size = size;\n lodash.snakeCase = snakeCase;\n lodash.some = some;\n lodash.sortedIndex = sortedIndex;\n lodash.sortedIndexBy = sortedIndexBy;\n lodash.sortedIndexOf = sortedIndexOf;\n lodash.sortedLastIndex = sortedLastIndex;\n lodash.sortedLastIndexBy = sortedLastIndexBy;\n lodash.sortedLastIndexOf = sortedLastIndexOf;\n lodash.startCase = startCase;\n lodash.startsWith = startsWith;\n lodash.subtract = subtract;\n lodash.sum = sum;\n lodash.sumBy = sumBy;\n lodash.template = template;\n lodash.times = times;\n lodash.toFinite = toFinite;\n lodash.toInteger = toInteger;\n lodash.toLength = toLength;\n lodash.toLower = toLower;\n lodash.toNumber = toNumber;\n lodash.toSafeInteger = toSafeInteger;\n lodash.toString = toString;\n lodash.toUpper = toUpper;\n lodash.trim = trim;\n lodash.trimEnd = trimEnd;\n lodash.trimStart = trimStart;\n lodash.truncate = truncate;\n lodash.unescape = unescape;\n lodash.uniqueId = uniqueId;\n lodash.upperCase = upperCase;\n lodash.upperFirst = upperFirst;\n\n // Add aliases.\n lodash.each = forEach;\n lodash.eachRight = forEachRight;\n lodash.first = head;\n\n mixin(lodash, (function() {\n var source = {};\n baseForOwn(lodash, function(func, methodName) {\n if (!hasOwnProperty.call(lodash.prototype, methodName)) {\n source[methodName] = func;\n }\n });\n return source;\n }()), { 'chain': false });\n\n /*------------------------------------------------------------------------*/\n\n /**\n * The semantic version number.\n *\n * @static\n * @memberOf _\n * @type {string}\n */\n lodash.VERSION = VERSION;\n\n // Assign default placeholders.\n arrayEach(['bind', 'bindKey', 'curry', 'curryRight', 'partial', 'partialRight'], function(methodName) {\n lodash[methodName].placeholder = lodash;\n });\n\n // Add `LazyWrapper` methods for `_.drop` and `_.take` variants.\n arrayEach(['drop', 'take'], function(methodName, index) {\n LazyWrapper.prototype[methodName] = function(n) {\n n = n === undefined ? 1 : nativeMax(toInteger(n), 0);\n\n var result = (this.__filtered__ && !index)\n ? new LazyWrapper(this)\n : this.clone();\n\n if (result.__filtered__) {\n result.__takeCount__ = nativeMin(n, result.__takeCount__);\n } else {\n result.__views__.push({\n 'size': nativeMin(n, MAX_ARRAY_LENGTH),\n 'type': methodName + (result.__dir__ < 0 ? 'Right' : '')\n });\n }\n return result;\n };\n\n LazyWrapper.prototype[methodName + 'Right'] = function(n) {\n return this.reverse()[methodName](n).reverse();\n };\n });\n\n // Add `LazyWrapper` methods that accept an `iteratee` value.\n arrayEach(['filter', 'map', 'takeWhile'], function(methodName, index) {\n var type = index + 1,\n isFilter = type == LAZY_FILTER_FLAG || type == LAZY_WHILE_FLAG;\n\n LazyWrapper.prototype[methodName] = function(iteratee) {\n var result = this.clone();\n result.__iteratees__.push({\n 'iteratee': getIteratee(iteratee, 3),\n 'type': type\n });\n result.__filtered__ = result.__filtered__ || isFilter;\n return result;\n };\n });\n\n // Add `LazyWrapper` methods for `_.head` and `_.last`.\n arrayEach(['head', 'last'], function(methodName, index) {\n var takeName = 'take' + (index ? 'Right' : '');\n\n LazyWrapper.prototype[methodName] = function() {\n return this[takeName](1).value()[0];\n };\n });\n\n // Add `LazyWrapper` methods for `_.initial` and `_.tail`.\n arrayEach(['initial', 'tail'], function(methodName, index) {\n var dropName = 'drop' + (index ? '' : 'Right');\n\n LazyWrapper.prototype[methodName] = function() {\n return this.__filtered__ ? new LazyWrapper(this) : this[dropName](1);\n };\n });\n\n LazyWrapper.prototype.compact = function() {\n return this.filter(identity);\n };\n\n LazyWrapper.prototype.find = function(predicate) {\n return this.filter(predicate).head();\n };\n\n LazyWrapper.prototype.findLast = function(predicate) {\n return this.reverse().find(predicate);\n };\n\n LazyWrapper.prototype.invokeMap = baseRest(function(path, args) {\n if (typeof path == 'function') {\n return new LazyWrapper(this);\n }\n return this.map(function(value) {\n return baseInvoke(value, path, args);\n });\n });\n\n LazyWrapper.prototype.reject = function(predicate) {\n return this.filter(negate(getIteratee(predicate)));\n };\n\n LazyWrapper.prototype.slice = function(start, end) {\n start = toInteger(start);\n\n var result = this;\n if (result.__filtered__ && (start > 0 || end < 0)) {\n return new LazyWrapper(result);\n }\n if (start < 0) {\n result = result.takeRight(-start);\n } else if (start) {\n result = result.drop(start);\n }\n if (end !== undefined) {\n end = toInteger(end);\n result = end < 0 ? result.dropRight(-end) : result.take(end - start);\n }\n return result;\n };\n\n LazyWrapper.prototype.takeRightWhile = function(predicate) {\n return this.reverse().takeWhile(predicate).reverse();\n };\n\n LazyWrapper.prototype.toArray = function() {\n return this.take(MAX_ARRAY_LENGTH);\n };\n\n // Add `LazyWrapper` methods to `lodash.prototype`.\n baseForOwn(LazyWrapper.prototype, function(func, methodName) {\n var checkIteratee = /^(?:filter|find|map|reject)|While$/.test(methodName),\n isTaker = /^(?:head|last)$/.test(methodName),\n lodashFunc = lodash[isTaker ? ('take' + (methodName == 'last' ? 'Right' : '')) : methodName],\n retUnwrapped = isTaker || /^find/.test(methodName);\n\n if (!lodashFunc) {\n return;\n }\n lodash.prototype[methodName] = function() {\n var value = this.__wrapped__,\n args = isTaker ? [1] : arguments,\n isLazy = value instanceof LazyWrapper,\n iteratee = args[0],\n useLazy = isLazy || isArray(value);\n\n var interceptor = function(value) {\n var result = lodashFunc.apply(lodash, arrayPush([value], args));\n return (isTaker && chainAll) ? result[0] : result;\n };\n\n if (useLazy && checkIteratee && typeof iteratee == 'function' && iteratee.length != 1) {\n // Avoid lazy use if the iteratee has a \"length\" value other than `1`.\n isLazy = useLazy = false;\n }\n var chainAll = this.__chain__,\n isHybrid = !!this.__actions__.length,\n isUnwrapped = retUnwrapped && !chainAll,\n onlyLazy = isLazy && !isHybrid;\n\n if (!retUnwrapped && useLazy) {\n value = onlyLazy ? value : new LazyWrapper(this);\n var result = func.apply(value, args);\n result.__actions__.push({ 'func': thru, 'args': [interceptor], 'thisArg': undefined });\n return new LodashWrapper(result, chainAll);\n }\n if (isUnwrapped && onlyLazy) {\n return func.apply(this, args);\n }\n result = this.thru(interceptor);\n return isUnwrapped ? (isTaker ? result.value()[0] : result.value()) : result;\n };\n });\n\n // Add `Array` methods to `lodash.prototype`.\n arrayEach(['pop', 'push', 'shift', 'sort', 'splice', 'unshift'], function(methodName) {\n var func = arrayProto[methodName],\n chainName = /^(?:push|sort|unshift)$/.test(methodName) ? 'tap' : 'thru',\n retUnwrapped = /^(?:pop|shift)$/.test(methodName);\n\n lodash.prototype[methodName] = function() {\n var args = arguments;\n if (retUnwrapped && !this.__chain__) {\n var value = this.value();\n return func.apply(isArray(value) ? value : [], args);\n }\n return this[chainName](function(value) {\n return func.apply(isArray(value) ? value : [], args);\n });\n };\n });\n\n // Map minified method names to their real names.\n baseForOwn(LazyWrapper.prototype, function(func, methodName) {\n var lodashFunc = lodash[methodName];\n if (lodashFunc) {\n var key = lodashFunc.name + '';\n if (!hasOwnProperty.call(realNames, key)) {\n realNames[key] = [];\n }\n realNames[key].push({ 'name': methodName, 'func': lodashFunc });\n }\n });\n\n realNames[createHybrid(undefined, WRAP_BIND_KEY_FLAG).name] = [{\n 'name': 'wrapper',\n 'func': undefined\n }];\n\n // Add methods to `LazyWrapper`.\n LazyWrapper.prototype.clone = lazyClone;\n LazyWrapper.prototype.reverse = lazyReverse;\n LazyWrapper.prototype.value = lazyValue;\n\n // Add chain sequence methods to the `lodash` wrapper.\n lodash.prototype.at = wrapperAt;\n lodash.prototype.chain = wrapperChain;\n lodash.prototype.commit = wrapperCommit;\n lodash.prototype.next = wrapperNext;\n lodash.prototype.plant = wrapperPlant;\n lodash.prototype.reverse = wrapperReverse;\n lodash.prototype.toJSON = lodash.prototype.valueOf = lodash.prototype.value = wrapperValue;\n\n // Add lazy aliases.\n lodash.prototype.first = lodash.prototype.head;\n\n if (symIterator) {\n lodash.prototype[symIterator] = wrapperToIterator;\n }\n return lodash;\n });\n\n /*--------------------------------------------------------------------------*/\n\n // Export lodash.\n var _ = runInContext();\n\n // Some AMD build optimizers, like r.js, check for condition patterns like:\n if (typeof define == 'function' && typeof define.amd == 'object' && define.amd) {\n // Expose Lodash on the global object to prevent errors when Lodash is\n // loaded by a script tag in the presence of an AMD loader.\n // See http://requirejs.org/docs/errors.html#mismatch for more details.\n // Use `_.noConflict` to remove Lodash from the global object.\n root._ = _;\n\n // Define as an anonymous module so, through path mapping, it can be\n // referenced as the \"underscore\" module.\n define(function() {\n return _;\n });\n }\n // Check for `exports` after `define` in case a build optimizer adds it.\n else if (freeModule) {\n // Export for Node.js.\n (freeModule.exports = _)._ = _;\n // Export for CommonJS support.\n freeExports._ = _;\n }\n else {\n // Export to the global object.\n root._ = _;\n }\n}.call(this));\n","'use strict';\n\nlet formCleared = false;\n\n/**\n * Additional class to invalid-feed back when input field is changed\n * @param {HTMLElement} input input field\n */\nfunction triggerEdgeValidation(input) {\n if (!input || !input.nextElementSibling) return;\n if (!input.nextElementSibling.classList.contains('invalid-feedback')) return;\n\n const invalidFeedback = input.nextElementSibling;\n invalidFeedback.classList.toggle('edge-validation-fix');\n}\n\n/**\n * Scroll to first error in given form (if there is any)\n * @param {JQuery} $form - jQuery object containing form\n */\nfunction scrollToError($form) {\n if ($form.find('.is-invalid,.-invalid').length && !$form.parents('.modal').length) {\n $('html, body').animate(\n {\n scrollTop: $form.find('.is-invalid,.-invalid').first().offset().top - 25,\n },\n 500\n );\n $form.find('.is-invalid:first,.-invalid:first').focus();\n }\n}\n\n/**\n * Check if the user has done the reCaptcha and return true if so\n * @param {jQuery} $form - the from which contains the reCaptcha\n * @returns {boolean} whether the reCaptcha is entered or not\n */\nfunction validateReCaptcha($form) {\n const $response = $form.find('[name=g-recaptcha-response]');\n let valid;\n\n if ($response.length && $response.val()) {\n // ReCaptcha found and valid\n valid = true;\n } else if ($response.length) {\n // ReCaptcha found but not valid\n valid = false;\n } else {\n // ReCaptcha not found\n valid = true;\n }\n\n $response.parent().toggleClass('highlight-recaptcha', !valid);\n return valid;\n}\n\n/**\n * Validate whole form. Requires `this` to be set to form object\n * @param {jQuery.event} event - Event to be canceled if form is invalid.\n * @returns {boolean} - Flag to indicate if form is valid\n */\nfunction validateForm(event) {\n let valid = true;\n\n if (!validateReCaptcha($(this)) || (this.checkValidity && !this.checkValidity())) {\n // safari\n valid = false;\n\n if (event) {\n event.preventDefault();\n event.stopPropagation();\n event.stopImmediatePropagation();\n }\n\n $(this)\n .find('input, select, textarea')\n .each(function () {\n if (!this.validity.valid) {\n $(this).trigger('invalid', this.validity);\n }\n });\n }\n\n return valid;\n}\n\n/**\n * Remove all validation. Should be called every time before revalidating form\n * @param {element|jQuery} form - Form to be cleared. Could be plain JS object or jQuery object\n * @returns {void}\n */\nfunction clearFormErrors(form) {\n let $form = form;\n\n // Transform to jQuery object if plain JS object is passed.\n if (!form.jquery) {\n $form = $(form);\n }\n\n $form.find('.form-control.is-invalid').removeClass('is-invalid');\n $form.find('.form-control.is-valid').removeClass('is-valid');\n // margiela\n $form.find('.-invalid').removeClass('-invalid');\n $form.find('-valid').removeClass('-valid');\n \n $form.find('.invalid-feedback').empty();\n}\n\n/**\n * Init the handlers for events which doesn't bubble.\n * No bubbling means that body, document or element's container cannot be used for that event\n * and the exact element should be selected instead.\n * This is not a problem on initial load but doesn't work on html loaded with Ajax\n * and this is why this method is needed so we can re-attach the event handlers.\n * @returns {void}\n */\nfunction attachNoBubbleEvents() {\n let attachTimeout;\n $('form input, form select, form textarea')\n .off('invalid')\n .on('invalid', function (e) {\n e.preventDefault();\n this.setCustomValidity('');\n const $form = $(this).parents('form');\n triggerEdgeValidation(this);\n\n if (!this.validity.valid) {\n $(this).removeClass('is-valid -valid');\n $(this).addClass('is-invalid -invalid');\n\n const id = $(this).attr('id');\n const fieldMessages = window.formValidationMessages[id];\n\n if (fieldMessages) {\n // Important:\n // for-in statement was the only possible solution in this case.\n // ValidityState has no enumerable properties hence Object.keys() wouldn't work.\n let key;\n\n for (key in this.validity) {\n // eslint-disable-line no-restricted-syntax, guard-for-in\n if (key !== 'valid') {\n if (this.validity[key] && fieldMessages[key]) {\n this.setCustomValidity(fieldMessages[key]);\n break;\n }\n }\n }\n }\n\n $(this).parents('.form-group').find('.invalid-feedback').text(this.validationMessage);\n $(this).parents('[class^=\"mm-form\"]').find('.invalid-feedback').text(this.validationMessage);\n\n clearTimeout(attachTimeout);\n attachTimeout = setTimeout(function () {\n $body.trigger('validation:afterReattachInvalid', { $form });\n }, 50);\n }\n });\n}\n\n/**\n * Clear errors from form fields (includes messeges and visual feedback)\n * @param {JQuery} $form - jquery form object\n */\nfunction clearFormFieldErrors($form) {\n $form.siblings('.invalid-feedback').empty();\n $form.removeClass('is-invalid -inalid');\n $form.addClass('is-valid -valid');\n\n $form.find('input').each((i, e) => {\n triggerEdgeValidation(e);\n });\n}\n\nmodule.exports = {\n noBubbleEvents: attachNoBubbleEvents,\n\n init: function (additionalMessagesStr) {\n window.formValidationMessages = {};\n\n let additionalMessages;\n\n if (additionalMessagesStr) {\n try {\n additionalMessages = JSON.parse(additionalMessagesStr);\n } catch (e) {\n window.console.warn(e);\n }\n }\n\n const $formMessages = $('.js-form-messages');\n\n if ($formMessages.length) {\n try {\n window.formValidationMessages = JSON.parse($formMessages.text());\n } catch (e) {\n window.console.warn(e);\n }\n }\n\n if (additionalMessages) {\n $.extend(window.formValidationMessages, additionalMessages);\n }\n\n },\n\n submit: function () {\n $body.on('submit', 'form', function (e) {\n return validateForm.call(this, e);\n });\n },\n\n buttonClick: function () {\n $body.on('click', 'form button[type=\"submit\"], form input[type=\"submit\"]', function () {\n // clear all errors when trying to submit the form\n const $form = $(this).parents('form');\n clearFormErrors($form);\n validateReCaptcha($form);\n formCleared = true;\n });\n },\n\n focusOut: function () {\n $body.on('focusout', 'form input:not(.validate-on-change), form select:not(.validate-on-change), form textarea', function (e) {\n const $this = $(e.target);\n $this.siblings('.field-description').remove();\n\n if (!this.checkValidity()) {\n $this.trigger('invalid', this.validity);\n } else {\n clearFormFieldErrors($this);\n }\n });\n },\n\n blur: function () {\n $body.on('blur', 'form input:not(.validate-on-change), form select:not(.validate-on-change), form textarea', function (e) {\n const $this = $(e.target);\n\n const removeWhitespaces = $($this).val();\n const cleanString = removeWhitespaces.replace(/^\\s+|\\s+$/g, '');\n $($this).val(cleanString);\n $this.siblings('.field-description').remove();\n\n if (!this.checkValidity()) {\n $this.trigger('invalid', this.validity);\n } else {\n clearFormFieldErrors($this);\n }\n });\n },\n\n onChange: function () {\n $body.on('change', 'input.validate-on-change, select.validate-on-change', function (e) {\n const $this = $(e.target);\n\n if (!this.checkValidity()) {\n $this.trigger('invalid', this.validity);\n } else {\n clearFormFieldErrors($this);\n }\n });\n },\n\n handleDateChange: function () {\n $body.on('changeDate', '[data-provide=datepicker]', function () {\n $(this).trigger('change');\n $(this).trigger('focusout');\n });\n },\n\n scrollOnError: function () {\n $body.on('validation:afterReattachInvalid', function (e, data) {\n if (formCleared) {\n formCleared = false;\n scrollToError(data.$form);\n }\n });\n },\n\n updatePostalCodePattern: function () {\n $body.on('change', '[data-update-postal-code-pattern]', function () {\n const $this = $(this);\n const postalCodeElementID = $this.data('update-postal-code-pattern');\n const $postalCode = $this.closest('form').find('#' + postalCodeElementID);\n\n if ($postalCode.length > 0) {\n const postalCodeRegexp = {\n defaults: /^[0-9]{5}$/,\n at: /^(?!0)([0-9]{4})$/,\n be: /^(?!0)([0-9]{4})$/,\n bg: /^(?!0)([0-9]{4})$/,\n dk: /^(?!0)([0-9]{4})$/,\n gr: /^([0-9]{3}\\s[0-9]{2}|[0-9]{5})$/,\n hu: /^[0-9]{4}$/,\n lv: /^([Ll][Vv])[-]([0-9]){4}$/,\n lt: /^([Ll][Tt])[-]([0-9]){5}$/,\n lu: /^(?!0)([0-9]{4})$/,\n nl: /^[1-9][0-9]{3}\\s[A-Z]{2}$/,\n no: /^[0-9]{4}$/,\n pl: /^[0-9]{2}[-][0-9]{3}$/,\n pt: /^(?!0)([0-9]{4}-?[0-9]{3})$/,\n ro: /^[0-9]{6}$/,\n ru: /^[0-9]{6}$/,\n sk: /^(?=0|8|9)([0-9]{3}\\s?[0-9]{2})$/,\n si: /^(?!0)([0-9]{4}$)/,\n es: /^((0[1-9]|5[0-2])|[1-4][0-9])[0-9]{3}$/,\n se: /^([0-9]{3}\\s[0-9]{2}|[0-9]{5})$/,\n ch: /^[0-9]{4}$/,\n gb: /^([Gg][Ii][Rr] 0[Aa]{2})|((([A-Za-z][0-9]{1,2})|(([A-Za-z][A-Ha-hJ-Yj-y][0-9]{1,2})|(([A-Za-z][0-9][A-Za-z])|([A-Za-z][A-Ha-hJ-Yj-y][0-9][A-Za-z]?))))\\s?[0-9][A-Za-z]{2})$/,\n us: /^\\d{5}(-\\d{4})?$/,\n ca: /^[ABCEGHJKLMNPRSTVXYabceghjklmnprstvxy]{1}\\d{1}[ABCEGHJKLMNPRSTVWXYZabceghjklmnprstvwxyz]{1} *\\d{1}[ABCEGHJKLMNPRSTVWXYZabceghjklmnprstvwxyz]{1}\\d{1}$/,\n cz: /^[0-9]{3}\\s[0-9]{2}$/,\n };\n const countryCode = ($this.val() || '').toLowerCase();\n const regexp = countryCode in postalCodeRegexp ? postalCodeRegexp[countryCode] : postalCodeRegexp.defaults;\n\n $postalCode.attr('pattern', regexp.toString().slice(1, -1));\n }\n });\n\n $('[data-update-postal-code-pattern]').trigger('change');\n },\n\n reCaptchaOnChange: function () {\n $body.on('focusin', '.g-recaptcha iframe', function () {\n validateReCaptcha($(event.target).parents('form'));\n });\n },\n\n functions: {\n validateForm: function (form, event) {\n return validateForm.call(form, event || null);\n },\n clearFormErrors: clearFormErrors,\n reAttachNoBubbleEvents: attachNoBubbleEvents,\n scrollToError: scrollToError,\n },\n};\n","'use strict';\nvar focusHelper = require('../components/focus');\n\n/**\n * Retrieves the relevant pid value\n * @param {jquery} $el - DOM container for a given add to cart button\n * @return {string} - value to be used when adding product to cart\n */\nfunction getPidValue($el) {\n var pid;\n\n if ($('#quickViewModal').hasClass('show') && !$('.product-set').length) {\n pid = $($el).closest('.modal-content').find('.product-quickview').data('pid');\n } else if ($('.product-set-detail').length || $('.product-set').length) {\n pid = $($el).closest('.product-detail').find('.product-id').text();\n } else {\n pid = $('.product-detail:not(\".bundle-item\")').data('pid');\n }\n\n return pid;\n}\n\n/**\n * Retrieve contextual quantity selector\n * @param {jquery} $el - DOM container for the relevant quantity\n * @return {jquery} - quantity selector DOM container\n */\nfunction getQuantitySelector($el) {\n var quantitySelected;\n if ($el && $('.set-items').length) {\n quantitySelected = $($el).closest('.product-detail').find('.quantity-select');\n } else if ($el && $('.product-bundle').length) {\n var quantitySelectedModal = $($el).closest('.modal-footer').find('.quantity-select');\n var quantitySelectedPDP = $($el).closest('.bundle-footer').find('.quantity-select');\n if (quantitySelectedModal.val() === undefined) {\n quantitySelected = quantitySelectedPDP;\n } else {\n quantitySelected = quantitySelectedModal;\n }\n } else {\n quantitySelected = $('.quantity-select');\n }\n return quantitySelected;\n}\n\n/**\n * Retrieves the value associated with the Quantity pull-down menu\n * @param {jquery} $el - DOM container for the relevant quantity\n * @return {string} - value found in the quantity input\n */\nfunction getQuantitySelected($el) {\n return getQuantitySelector($el).val();\n}\n\n/**\n * Process the attribute values for an attribute that has image swatches\n *\n * @param {Object} attr - Attribute\n * @param {string} attr.id - Attribute ID\n * @param {Object[]} attr.values - Array of attribute value objects\n * @param {string} attr.values.value - Attribute coded value\n * @param {string} attr.values.url - URL to de/select an attribute value of the product\n * @param {boolean} attr.values.isSelectable - Flag as to whether an attribute value can be\n * selected. If there is no variant that corresponds to a specific combination of attribute\n * values, an attribute may be disabled in the Product Detail Page\n * @param {jQuery} $productContainer - DOM container for a given product\n * @param {Object} msgs - object containing resource messages\n */\nfunction processSwatchValues(attr, $productContainer, msgs) {\n attr.values.forEach(function (attrValue) {\n var $attrValue = $productContainer.find('[data-attr=\"' + attr.id + '\"] [data-attr-value=\"' +\n attrValue.value + '\"]');\n var $swatchButton = $attrValue.parent();\n\n if (attrValue.selected) {\n $attrValue.addClass('selected');\n $attrValue.siblings('.selected-assistive-text').text(msgs.assistiveSelectedText);\n } else {\n $attrValue.removeClass('selected');\n $attrValue.siblings('.selected-assistive-text').empty();\n }\n\n if (attrValue.url) {\n $swatchButton.attr('data-url', attrValue.url);\n } else {\n $swatchButton.removeAttr('data-url');\n }\n\n // Disable if not selectable\n $attrValue.removeClass('selectable unselectable');\n\n $attrValue.addClass(attrValue.selectable ? 'selectable' : 'unselectable');\n });\n}\n\n/**\n * Process attribute values associated with an attribute that does not have image swatches\n *\n * @param {Object} attr - Attribute\n * @param {string} attr.id - Attribute ID\n * @param {Object[]} attr.values - Array of attribute value objects\n * @param {string} attr.values.value - Attribute coded value\n * @param {string} attr.values.url - URL to de/select an attribute value of the product\n * @param {boolean} attr.values.isSelectable - Flag as to whether an attribute value can be\n * selected. If there is no variant that corresponds to a specific combination of attribute\n * values, an attribute may be disabled in the Product Detail Page\n * @param {jQuery} $productContainer - DOM container for a given product\n */\nfunction processNonSwatchValues(attr, $productContainer) {\n var $attr = '[data-attr=\"' + attr.id + '\"]';\n var $defaultOption = $productContainer.find($attr + ' .select-' + attr.id + ' option:first');\n $defaultOption.attr('value', attr.resetUrl);\n\n attr.values.forEach(function (attrValue) {\n var $attrValue = $productContainer\n .find($attr + ' [data-attr-value=\"' + attrValue.value + '\"]');\n $attrValue.attr('value', attrValue.url)\n .removeAttr('disabled');\n\n if (!attrValue.selectable) {\n $attrValue.attr('disabled', true);\n }\n });\n}\n\n/**\n * Routes the handling of attribute processing depending on whether the attribute has image\n * swatches or not\n *\n * @param {Object} attrs - Attribute\n * @param {string} attr.id - Attribute ID\n * @param {jQuery} $productContainer - DOM element for a given product\n * @param {Object} msgs - object containing resource messages\n */\nfunction updateAttrs(attrs, $productContainer, msgs) {\n // Currently, the only attribute type that has image swatches is Color.\n var attrsWithSwatches = ['color'];\n\n attrs.forEach(function (attr) {\n if (attrsWithSwatches.indexOf(attr.id) > -1) {\n processSwatchValues(attr, $productContainer, msgs);\n } else {\n processNonSwatchValues(attr, $productContainer);\n }\n });\n}\n\n/**\n * Updates the availability status in the Product Detail Page\n *\n * @param {Object} response - Ajax response object after an\n * attribute value has been [de]selected\n * @param {jQuery} $productContainer - DOM element for a given product\n */\nfunction updateAvailability(response, $productContainer) {\n var availabilityValue = '';\n var availabilityMessages = response.product.availability.messages;\n if (!response.product.readyToOrder) {\n availabilityValue = '<li><div>' + response.resources.info_selectforstock + '</div></li>';\n } else {\n availabilityMessages.forEach(function (message) {\n availabilityValue += '<li><div>' + message + '</div></li>';\n });\n }\n\n $($productContainer).trigger('product:updateAvailability', {\n product: response.product,\n $productContainer: $productContainer,\n message: availabilityValue,\n resources: response.resources\n });\n}\n\n/**\n * Generates html for product attributes section\n *\n * @param {array} attributes - list of attributes\n * @return {string} - Compiled HTML\n */\nfunction getAttributesHtml(attributes) {\n if (!attributes) {\n return '';\n }\n\n var html = '';\n\n attributes.forEach(function (attributeGroup) {\n if (attributeGroup.ID === 'mainAttributes') {\n attributeGroup.attributes.forEach(function (attribute) {\n html += '<div class=\"attribute-values\">' + attribute.label + ': '\n + attribute.value + '</div>';\n });\n }\n });\n\n return html;\n}\n\n/**\n * @typedef UpdatedOptionValue\n * @type Object\n * @property {string} id - Option value ID for look up\n * @property {string} url - Updated option value selection URL\n */\n\n/**\n * @typedef OptionSelectionResponse\n * @type Object\n * @property {string} priceHtml - Updated price HTML code\n * @property {Object} options - Updated Options\n * @property {string} options.id - Option ID\n * @property {UpdatedOptionValue[]} options.values - Option values\n */\n\n/**\n * Updates DOM using post-option selection Ajax response\n *\n * @param {OptionSelectionResponse} optionsHtml - Ajax response optionsHtml from selecting a product option\n * @param {jQuery} $productContainer - DOM element for current product\n */\nfunction updateOptions(optionsHtml, $productContainer) {\n\t// Update options\n $productContainer.find('.product-options').empty().html(optionsHtml);\n}\n\n/**\n * Dynamically creates Bootstrap carousel from response containing images\n * @param {Object[]} imgs - Array of large product images,along with related information\n * @param {jQuery} $productContainer - DOM element for a given product\n */\nfunction createCarousel(imgs, $productContainer) {\n var carousel = $productContainer.find('.carousel');\n $(carousel).carousel('dispose');\n var carouselId = $(carousel).attr('id');\n $(carousel).empty().append('<ol class=\"carousel-indicators\"></ol><div class=\"carousel-inner\" role=\"listbox\"></div><a class=\"carousel-control-prev\" href=\"#' + carouselId + '\" role=\"button\" data-slide=\"prev\"><span class=\"fa icon-prev\" aria-hidden=\"true\"></span><span class=\"sr-only\">' + $(carousel).data('prev') + '</span></a><a class=\"carousel-control-next\" href=\"#' + carouselId + '\" role=\"button\" data-slide=\"next\"><span class=\"fa icon-next\" aria-hidden=\"true\"></span><span class=\"sr-only\">' + $(carousel).data('next') + '</span></a>');\n for (var i = 0; i < imgs.length; i++) {\n $('<div class=\"carousel-item\"><img src=\"' + imgs[i].url + '\" class=\"d-block img-fluid\" alt=\"' + imgs[i].alt + ' image number ' + parseInt(imgs[i].index, 10) + '\" title=\"' + imgs[i].title + '\" itemprop=\"image\" /></div>').appendTo($(carousel).find('.carousel-inner'));\n $('<li data-target=\"#' + carouselId + '\" data-slide-to=\"' + i + '\" class=\"\"></li>').appendTo($(carousel).find('.carousel-indicators'));\n }\n $($(carousel).find('.carousel-item')).first().addClass('active');\n $($(carousel).find('.carousel-indicators > li')).first().addClass('active');\n if (imgs.length === 1) {\n $($(carousel).find('.carousel-indicators, a[class^=\"carousel-control-\"]')).detach();\n }\n $(carousel).carousel();\n $($(carousel).find('.carousel-indicators')).attr('aria-hidden', true);\n}\n\n/**\n * Parses JSON from Ajax call made whenever an attribute value is [de]selected\n * @param {Object} response - response from Ajax call\n * @param {Object} response.product - Product object\n * @param {string} response.product.id - Product ID\n * @param {Object[]} response.product.variationAttributes - Product attributes\n * @param {Object[]} response.product.images - Product images\n * @param {boolean} response.product.hasRequiredAttrsSelected - Flag as to whether all required\n * attributes have been selected. Used partially to\n * determine whether the Add to Cart button can be enabled\n * @param {jQuery} $productContainer - DOM element for a given product.\n */\nfunction handleVariantResponse(response, $productContainer) {\n var isChoiceOfBonusProducts =\n $productContainer.parents('.choose-bonus-product-dialog').length > 0;\n var isVaraint;\n if (response.product.variationAttributes) {\n updateAttrs(response.product.variationAttributes, $productContainer, response.resources);\n isVaraint = response.product.productType === 'variant';\n if (isChoiceOfBonusProducts && isVaraint) {\n $productContainer.parent('.bonus-product-item')\n .data('pid', response.product.id);\n\n $productContainer.parent('.bonus-product-item')\n .data('ready-to-order', response.product.readyToOrder);\n }\n }\n\n // Update primary images\n var primaryImageUrls = response.product.images.large;\n createCarousel(primaryImageUrls, $productContainer);\n\n // Update pricing\n if (!isChoiceOfBonusProducts) {\n var $priceSelector = $('.prices .price', $productContainer).length\n ? $('.prices .price', $productContainer)\n : $('.prices .price');\n $priceSelector.replaceWith(response.product.price.html);\n }\n\n // Update promotions\n $productContainer.find('.promotions').empty().html(response.product.promotionsHtml);\n\n updateAvailability(response, $productContainer);\n\n if (isChoiceOfBonusProducts) {\n var $selectButton = $productContainer.find('.select-bonus-product');\n $selectButton.trigger('bonusproduct:updateSelectButton', {\n product: response.product, $productContainer: $productContainer\n });\n } else {\n // Enable \"Add to Cart\" button if all required attributes have been selected\n $('button.add-to-cart, button.add-to-cart-global, button.update-cart-product-global').trigger('product:updateAddToCart', {\n product: response.product, $productContainer: $productContainer\n }).trigger('product:statusUpdate', response.product);\n }\n\n // Update attributes\n $productContainer.find('.main-attributes').empty()\n .html(getAttributesHtml(response.product.attributes));\n}\n\n/**\n * @typespec UpdatedQuantity\n * @type Object\n * @property {boolean} selected - Whether the quantity has been selected\n * @property {string} value - The number of products to purchase\n * @property {string} url - Compiled URL that specifies variation attributes, product ID, options,\n * etc.\n */\n\n/**\n * Updates the quantity DOM elements post Ajax call\n * @param {UpdatedQuantity[]} quantities -\n * @param {jQuery} $productContainer - DOM container for a given product\n */\nfunction updateQuantities(quantities, $productContainer) {\n if ($productContainer.parent('.bonus-product-item').length <= 0) {\n var optionsHtml = quantities.map(function (quantity) {\n var selected = quantity.selected ? ' selected ' : '';\n return '<option value=\"' + quantity.value + '\" data-url=\"' + quantity.url + '\"' +\n selected + '>' + quantity.value + '</option>';\n }).join('');\n getQuantitySelector($productContainer).empty().html(optionsHtml);\n }\n}\n\n/**\n * updates the product view when a product attribute is selected or deselected or when\n * changing quantity\n * @param {string} selectedValueUrl - the Url for the selected variation value\n * @param {jQuery} $productContainer - DOM element for current product\n */\nfunction attributeSelect(selectedValueUrl, $productContainer) {\n if (selectedValueUrl) {\n $('body').trigger('product:beforeAttributeSelect',\n { url: selectedValueUrl, container: $productContainer });\n\n $.ajax({\n url: selectedValueUrl,\n method: 'GET',\n success: function (data) {\n handleVariantResponse(data, $productContainer);\n updateOptions(data.product.optionsHtml, $productContainer);\n updateQuantities(data.product.quantities, $productContainer);\n $('body').trigger('product:afterAttributeSelect',\n { data: data, container: $productContainer });\n $.spinner().stop();\n },\n error: function () {\n $.spinner().stop();\n }\n });\n }\n}\n\n/**\n * Retrieves url to use when adding a product to the cart\n *\n * @return {string} - The provided URL to use when adding a product to the cart\n */\nfunction getAddToCartUrl() {\n return $('.add-to-cart-url').val();\n}\n\n/**\n * Parses the html for a modal window\n * @param {string} html - representing the body and footer of the modal window\n *\n * @return {Object} - Object with properties body and footer.\n */\nfunction parseHtml(html) {\n var $html = $('<div>').append($.parseHTML(html));\n\n var body = $html.find('.choice-of-bonus-product');\n var footer = $html.find('.modal-footer').children();\n\n return { body: body, footer: footer };\n}\n\n/**\n * Retrieves url to use when adding a product to the cart\n *\n * @param {Object} data - data object used to fill in dynamic portions of the html\n */\nfunction chooseBonusProducts(data) {\n $('.modal-body').spinner().start();\n\n if ($('#chooseBonusProductModal').length !== 0) {\n $('#chooseBonusProductModal').remove();\n }\n var bonusUrl;\n if (data.bonusChoiceRuleBased) {\n bonusUrl = data.showProductsUrlRuleBased;\n } else {\n bonusUrl = data.showProductsUrlListBased;\n }\n\n var htmlString = '<!-- Modal -->'\n + '<div class=\"modal fade\" id=\"chooseBonusProductModal\" tabindex=\"-1\" role=\"dialog\">'\n + '<span class=\"enter-message sr-only\" ></span>'\n + '<div class=\"modal-dialog choose-bonus-product-dialog\" '\n + 'data-total-qty=\"' + data.maxBonusItems + '\"'\n + 'data-UUID=\"' + data.uuid + '\"'\n + 'data-pliUUID=\"' + data.pliUUID + '\"'\n + 'data-addToCartUrl=\"' + data.addToCartUrl + '\"'\n + 'data-pageStart=\"0\"'\n + 'data-pageSize=\"' + data.pageSize + '\"'\n + 'data-moreURL=\"' + data.showProductsUrlRuleBased + '\"'\n + 'data-bonusChoiceRuleBased=\"' + data.bonusChoiceRuleBased + '\">'\n + '<!-- Modal content-->'\n + '<div class=\"modal-content\">'\n + '<div class=\"modal-header\">'\n + ' <span class=\"\">' + data.labels.selectprods + '</span>'\n + ' <button type=\"button\" class=\"close pull-right\" data-dismiss=\"modal\">'\n + ' <span aria-hidden=\"true\">×</span>'\n + ' <span class=\"sr-only\"> </span>'\n + ' </button>'\n + '</div>'\n + '<div class=\"modal-body\"></div>'\n + '<div class=\"modal-footer\"></div>'\n + '</div>'\n + '</div>'\n + '</div>';\n $('body').append(htmlString);\n $('.modal-body').spinner().start();\n\n $.ajax({\n url: bonusUrl,\n method: 'GET',\n dataType: 'json',\n success: function (response) {\n var parsedHtml = parseHtml(response.renderedTemplate);\n $('#chooseBonusProductModal .modal-body').empty();\n $('#chooseBonusProductModal .enter-message').text(response.enterDialogMessage);\n $('#chooseBonusProductModal .modal-header .close .sr-only').text(response.closeButtonText);\n $('#chooseBonusProductModal .modal-body').html(parsedHtml.body);\n $('#chooseBonusProductModal .modal-footer').html(parsedHtml.footer);\n $('#chooseBonusProductModal').modal('show');\n $.spinner().stop();\n },\n error: function () {\n $.spinner().stop();\n }\n });\n}\n\n/**\n * Updates the Mini-Cart quantity value after the customer has pressed the \"Add to Cart\" button\n * @param {string} response - ajax response from clicking the add to cart button\n */\nfunction handlePostCartAdd(response) {\n $('.minicart').trigger('count:update', response);\n var messageType = response.error ? 'alert-danger' : 'alert-success';\n // show add to cart toast\n if (response.newBonusDiscountLineItem\n && Object.keys(response.newBonusDiscountLineItem).length !== 0) {\n chooseBonusProducts(response.newBonusDiscountLineItem);\n } else {\n if ($('.add-to-cart-messages').length === 0) {\n $('body').append(\n '<div class=\"add-to-cart-messages\"></div>'\n );\n }\n\n $('.add-to-cart-messages').append(\n '<div class=\"alert ' + messageType + ' add-to-basket-alert text-center\" role=\"alert\">'\n + response.message\n + '</div>'\n );\n\n setTimeout(function () {\n $('.add-to-basket-alert').remove();\n }, 5000);\n }\n}\n\n/**\n * Retrieves the bundle product item ID's for the Controller to replace bundle master product\n * items with their selected variants\n *\n * @return {string[]} - List of selected bundle product item ID's\n */\nfunction getChildProducts() {\n var childProducts = [];\n $('.bundle-item').each(function () {\n childProducts.push({\n pid: $(this).find('.product-id').text(),\n quantity: parseInt($(this).find('label.quantity').data('quantity'), 10)\n });\n });\n\n return childProducts.length ? JSON.stringify(childProducts) : [];\n}\n\n/**\n * Retrieve product options\n *\n * @param {jQuery} $productContainer - DOM element for current product\n * @return {string} - Product options and their selected values\n */\nfunction getOptions($productContainer) {\n var options = $productContainer\n .find('.product-option')\n .map(function () {\n var $elOption = $(this).find('.options-select');\n var urlValue = $elOption.val();\n var selectedValueId = $elOption.find('option[value=\"' + urlValue + '\"]')\n .data('value-id');\n return {\n optionId: $(this).data('option-id'),\n selectedValueId: selectedValueId\n };\n }).toArray();\n\n return JSON.stringify(options);\n}\n\n/**\n * Makes a call to the server to report the event of adding an item to the cart\n *\n * @param {string | boolean} url - a string representing the end point to hit so that the event can be recorded, or false\n */\nfunction miniCartReportingUrl(url) {\n if (url) {\n $.ajax({\n url: url,\n method: 'GET',\n success: function () {\n // reporting urls hit on the server\n },\n error: function () {\n // no reporting urls hit on the server\n }\n });\n }\n}\n\nmodule.exports = {\n attributeSelect: attributeSelect,\n methods: {\n editBonusProducts: function (data) {\n chooseBonusProducts(data);\n }\n },\n\n focusChooseBonusProductModal: function () {\n $('body').on('shown.bs.modal', '#chooseBonusProductModal', function () {\n $('#chooseBonusProductModal').siblings().attr('aria-hidden', 'true');\n $('#chooseBonusProductModal .close').focus();\n });\n },\n\n onClosingChooseBonusProductModal: function () {\n $('body').on('hidden.bs.modal', '#chooseBonusProductModal', function () {\n $('#chooseBonusProductModal').siblings().attr('aria-hidden', 'false');\n });\n },\n\n trapChooseBonusProductModalFocus: function () {\n $('body').on('keydown', '#chooseBonusProductModal', function (e) {\n var focusParams = {\n event: e,\n containerSelector: '#chooseBonusProductModal',\n firstElementSelector: '.close',\n lastElementSelector: '.add-bonus-products'\n };\n focusHelper.setTabNextFocus(focusParams);\n });\n },\n\n colorAttribute: function () {\n $(document).on('click', '[data-attr=\"color\"] button', function (e) {\n e.preventDefault();\n\n if ($(this).attr('disabled')) {\n return;\n }\n var $productContainer = $(this).closest('.set-item');\n if (!$productContainer.length) {\n $productContainer = $(this).closest('.product-detail');\n }\n\n attributeSelect($(this).attr('data-url'), $productContainer);\n });\n },\n\n selectAttribute: function () {\n $(document).on('change', 'select[class*=\"select-\"], .options-select', function (e) {\n e.preventDefault();\n\n var $productContainer = $(this).closest('.set-item');\n if (!$productContainer.length) {\n $productContainer = $(this).closest('.product-detail');\n }\n attributeSelect(e.currentTarget.value, $productContainer);\n });\n },\n\n availability: function () {\n $(document).on('change', '.quantity-select', function (e) {\n e.preventDefault();\n\n var $productContainer = $(this).closest('.product-detail');\n if (!$productContainer.length) {\n $productContainer = $(this).closest('.modal-content').find('.product-quickview');\n }\n\n if ($('.bundle-items', $productContainer).length === 0) {\n attributeSelect($(e.currentTarget).find('option:selected').data('url'),\n $productContainer);\n }\n });\n },\n\n addToCart: function () {\n $(document).on('click', 'button.add-to-cart, button.add-to-cart-global', function () {\n var addToCartUrl;\n var pid;\n var pidsObj;\n var setPids;\n\n $('body').trigger('product:beforeAddToCart', this);\n\n if ($('.set-items').length && $(this).hasClass('add-to-cart-global')) {\n setPids = [];\n\n $('.product-detail').each(function () {\n if (!$(this).hasClass('product-set-detail')) {\n setPids.push({\n pid: $(this).find('.product-id').text(),\n qty: $(this).find('.quantity-select').val(),\n options: getOptions($(this))\n });\n }\n });\n pidsObj = JSON.stringify(setPids);\n }\n\n pid = getPidValue($(this));\n\n var $productContainer = $(this).closest('.product-detail');\n if (!$productContainer.length) {\n $productContainer = $(this).closest('.quick-view-dialog').find('.product-detail');\n }\n\n addToCartUrl = getAddToCartUrl();\n\n var form = {\n pid: pid,\n pidsObj: pidsObj,\n childProducts: getChildProducts(),\n quantity: getQuantitySelected($(this))\n };\n\n if (!$('.bundle-item').length) {\n form.options = getOptions($productContainer);\n }\n\n $(this).trigger('updateAddToCartFormData', form);\n if (addToCartUrl) {\n $.ajax({\n url: addToCartUrl,\n method: 'POST',\n data: form,\n success: function (data) {\n handlePostCartAdd(data);\n $('body').trigger('product:afterAddToCart', data);\n $.spinner().stop();\n miniCartReportingUrl(data.reportingURL);\n },\n error: function () {\n $.spinner().stop();\n }\n });\n }\n });\n },\n selectBonusProduct: function () {\n $(document).on('click', '.select-bonus-product', function () {\n var $choiceOfBonusProduct = $(this).parents('.choice-of-bonus-product');\n var pid = $(this).data('pid');\n var maxPids = $('.choose-bonus-product-dialog').data('total-qty');\n var submittedQty = parseInt($choiceOfBonusProduct.find('.bonus-quantity-select').val(), 10);\n var totalQty = 0;\n $.each($('#chooseBonusProductModal .selected-bonus-products .selected-pid'), function () {\n totalQty += $(this).data('qty');\n });\n totalQty += submittedQty;\n var optionID = $choiceOfBonusProduct.find('.product-option').data('option-id');\n var valueId = $choiceOfBonusProduct.find('.options-select option:selected').data('valueId');\n if (totalQty <= maxPids) {\n var selectedBonusProductHtml = ''\n + '<div class=\"selected-pid row\" '\n + 'data-pid=\"' + pid + '\"'\n + 'data-qty=\"' + submittedQty + '\"'\n + 'data-optionID=\"' + (optionID || '') + '\"'\n + 'data-option-selected-value=\"' + (valueId || '') + '\"'\n + '>'\n + '<div class=\"col-sm-11 col-9 bonus-product-name\" >'\n + $choiceOfBonusProduct.find('.product-name').html()\n + '</div>'\n + '<div class=\"col-1\"><i class=\"fa fa-times\" aria-hidden=\"true\"></i></div>'\n + '</div>'\n ;\n $('#chooseBonusProductModal .selected-bonus-products').append(selectedBonusProductHtml);\n $('.pre-cart-products').html(totalQty);\n $('.selected-bonus-products .bonus-summary').removeClass('alert-danger');\n } else {\n $('.selected-bonus-products .bonus-summary').addClass('alert-danger');\n }\n });\n },\n removeBonusProduct: function () {\n $(document).on('click', '.selected-pid', function () {\n $(this).remove();\n var $selected = $('#chooseBonusProductModal .selected-bonus-products .selected-pid');\n var count = 0;\n if ($selected.length) {\n $selected.each(function () {\n count += parseInt($(this).data('qty'), 10);\n });\n }\n\n $('.pre-cart-products').html(count);\n $('.selected-bonus-products .bonus-summary').removeClass('alert-danger');\n });\n },\n enableBonusProductSelection: function () {\n $('body').on('bonusproduct:updateSelectButton', function (e, response) {\n $('button.select-bonus-product', response.$productContainer).attr('disabled',\n (!response.product.readyToOrder || !response.product.available));\n var pid = response.product.id;\n $('button.select-bonus-product', response.$productContainer).data('pid', pid);\n });\n },\n showMoreBonusProducts: function () {\n $(document).on('click', '.show-more-bonus-products', function () {\n var url = $(this).data('url');\n $('.modal-content').spinner().start();\n $.ajax({\n url: url,\n method: 'GET',\n success: function (html) {\n var parsedHtml = parseHtml(html);\n $('.modal-body').append(parsedHtml.body);\n $('.show-more-bonus-products:first').remove();\n $('.modal-content').spinner().stop();\n },\n error: function () {\n $('.modal-content').spinner().stop();\n }\n });\n });\n },\n addBonusProductsToCart: function () {\n $(document).on('click', '.add-bonus-products', function () {\n var $readyToOrderBonusProducts = $('.choose-bonus-product-dialog .selected-pid');\n var queryString = '?pids=';\n var url = $('.choose-bonus-product-dialog').data('addtocarturl');\n var pidsObject = {\n bonusProducts: []\n };\n\n $.each($readyToOrderBonusProducts, function () {\n var qtyOption =\n parseInt($(this)\n .data('qty'), 10);\n\n var option = null;\n if (qtyOption > 0) {\n if ($(this).data('optionid') && $(this).data('option-selected-value')) {\n option = {};\n option.optionId = $(this).data('optionid');\n option.productId = $(this).data('pid');\n option.selectedValueId = $(this).data('option-selected-value');\n }\n pidsObject.bonusProducts.push({\n pid: $(this).data('pid'),\n qty: qtyOption,\n options: [option]\n });\n pidsObject.totalQty = parseInt($('.pre-cart-products').html(), 10);\n }\n });\n queryString += JSON.stringify(pidsObject);\n queryString = queryString + '&uuid=' + $('.choose-bonus-product-dialog').data('uuid');\n queryString = queryString + '&pliuuid=' + $('.choose-bonus-product-dialog').data('pliuuid');\n $.spinner().start();\n $.ajax({\n url: url + queryString,\n method: 'POST',\n success: function (data) {\n $.spinner().stop();\n if (data.error) {\n $('#chooseBonusProductModal').modal('hide');\n if ($('.add-to-cart-messages').length === 0) {\n $('body').append('<div class=\"add-to-cart-messages\"></div>');\n }\n $('.add-to-cart-messages').append(\n '<div class=\"alert alert-danger add-to-basket-alert text-center\"'\n + ' role=\"alert\">'\n + data.errorMessage + '</div>'\n );\n setTimeout(function () {\n $('.add-to-basket-alert').remove();\n }, 3000);\n } else {\n $('.configure-bonus-product-attributes').html(data);\n $('.bonus-products-step2').removeClass('hidden-xl-down');\n $('#chooseBonusProductModal').modal('hide');\n\n if ($('.add-to-cart-messages').length === 0) {\n $('body').append('<div class=\"add-to-cart-messages\"></div>');\n }\n $('.minicart-quantity').html(data.totalQty);\n $('.add-to-cart-messages').append(\n '<div class=\"alert alert-success add-to-basket-alert text-center\"'\n + ' role=\"alert\">'\n + data.msgSuccess + '</div>'\n );\n setTimeout(function () {\n $('.add-to-basket-alert').remove();\n if ($('.cart-page').length) {\n location.reload();\n }\n }, 1500);\n }\n },\n error: function () {\n $.spinner().stop();\n }\n });\n });\n },\n\n getPidValue: getPidValue,\n getQuantitySelected: getQuantitySelected,\n miniCartReportingUrl: miniCartReportingUrl\n};\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.3.1): util.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\n\n/**\n * ------------------------------------------------------------------------\n * Private TransitionEnd Helpers\n * ------------------------------------------------------------------------\n */\n\nconst TRANSITION_END = 'transitionend'\nconst MAX_UID = 1000000\nconst MILLISECONDS_MULTIPLIER = 1000\n\n// Shoutout AngusCroll (https://goo.gl/pxwQGp)\nfunction toType(obj) {\n return {}.toString.call(obj).match(/\\s([a-z]+)/i)[1].toLowerCase()\n}\n\nfunction getSpecialTransitionEndEvent() {\n return {\n bindType: TRANSITION_END,\n delegateType: TRANSITION_END,\n handle(event) {\n if ($(event.target).is(this)) {\n return event.handleObj.handler.apply(this, arguments) // eslint-disable-line prefer-rest-params\n }\n return undefined // eslint-disable-line no-undefined\n }\n }\n}\n\nfunction transitionEndEmulator(duration) {\n let called = false\n\n $(this).one(Util.TRANSITION_END, () => {\n called = true\n })\n\n setTimeout(() => {\n if (!called) {\n Util.triggerTransitionEnd(this)\n }\n }, duration)\n\n return this\n}\n\nfunction setTransitionEndSupport() {\n $.fn.emulateTransitionEnd = transitionEndEmulator\n $.event.special[Util.TRANSITION_END] = getSpecialTransitionEndEvent()\n}\n\n/**\n * --------------------------------------------------------------------------\n * Public Util Api\n * --------------------------------------------------------------------------\n */\n\nconst Util = {\n\n TRANSITION_END: 'bsTransitionEnd',\n\n getUID(prefix) {\n do {\n // eslint-disable-next-line no-bitwise\n prefix += ~~(Math.random() * MAX_UID) // \"~~\" acts like a faster Math.floor() here\n } while (document.getElementById(prefix))\n return prefix\n },\n\n getSelectorFromElement(element) {\n let selector = element.getAttribute('data-target')\n\n if (!selector || selector === '#') {\n const hrefAttr = element.getAttribute('href')\n selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : ''\n }\n\n try {\n return document.querySelector(selector) ? selector : null\n } catch (err) {\n return null\n }\n },\n\n getTransitionDurationFromElement(element) {\n if (!element) {\n return 0\n }\n\n // Get transition-duration of the element\n let transitionDuration = $(element).css('transition-duration')\n let transitionDelay = $(element).css('transition-delay')\n\n const floatTransitionDuration = parseFloat(transitionDuration)\n const floatTransitionDelay = parseFloat(transitionDelay)\n\n // Return 0 if element or transition duration is not found\n if (!floatTransitionDuration && !floatTransitionDelay) {\n return 0\n }\n\n // If multiple durations are defined, take the first\n transitionDuration = transitionDuration.split(',')[0]\n transitionDelay = transitionDelay.split(',')[0]\n\n return (parseFloat(transitionDuration) + parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER\n },\n\n reflow(element) {\n return element.offsetHeight\n },\n\n triggerTransitionEnd(element) {\n $(element).trigger(TRANSITION_END)\n },\n\n // TODO: Remove in v5\n supportsTransitionEnd() {\n return Boolean(TRANSITION_END)\n },\n\n isElement(obj) {\n return (obj[0] || obj).nodeType\n },\n\n typeCheckConfig(componentName, config, configTypes) {\n for (const property in configTypes) {\n if (Object.prototype.hasOwnProperty.call(configTypes, property)) {\n const expectedTypes = configTypes[property]\n const value = config[property]\n const valueType = value && Util.isElement(value)\n ? 'element' : toType(value)\n\n if (!new RegExp(expectedTypes).test(valueType)) {\n throw new Error(\n `${componentName.toUpperCase()}: ` +\n `Option \"${property}\" provided type \"${valueType}\" ` +\n `but expected type \"${expectedTypes}\".`)\n }\n }\n }\n },\n\n findShadowRoot(element) {\n if (!document.documentElement.attachShadow) {\n return null\n }\n\n // Can find the shadow root otherwise it'll return the document\n if (typeof element.getRootNode === 'function') {\n const root = element.getRootNode()\n return root instanceof ShadowRoot ? root : null\n }\n\n if (element instanceof ShadowRoot) {\n return element\n }\n\n // when we don't find a shadow root\n if (!element.parentNode) {\n return null\n }\n\n return Util.findShadowRoot(element.parentNode)\n }\n}\n\nsetTransitionEndSupport()\n\nexport default Util\n","const isMargiela = document.querySelector('body').classList.contains('Margiela');\n/**\n * Validates the attributes\n * @param {jQuery} $productContainer - DOM container for a given product\n * @returns {boolean} - [true] when valid, [false] when invalid\n */\nfunction validation($productContainer, trigger) {\n var $attributes;\n let invalidAttributesSelect = [];\n var isNewPDP = false;\n var isPrivateSales = $('.private-sales').data('isPrivateSalesProduct');\n var isLogged = $('.private-sales').data('isloggedin');\n\n if ($('.pdp-new').length > 0) {\n isNewPDP = true;\n }\n\n if (isNewPDP & isPrivateSales && !isLogged) {\n return true;\n }\n\n if (!isNewPDP) {\n $attributes = $productContainer.find('.variation-attribute select[class*=\"select-\"]');\n $attributes.each(function (a) {\n let optionSelected = $(this).find('option:selected');\n if (!optionSelected || !optionSelected.data('attrValue') || optionSelected.prop('disabled')) {\n invalidAttributesSelect.push($(this).parent());\n }\n });\n } else {\n $attributes = $productContainer.find('.variation-attribute');\n $attributes.each(function (a) {\n let availableAttributes = $(this).find('.attribute-selector-new');\n availableAttributes.each(function (a) {\n if (!availableAttributes.hasClass('selected')) {\n invalidAttributesSelect.push($(this));\n }\n });\n });\n }\n\n if (invalidAttributesSelect.length > 0) {\n invalidAttributesSelect.forEach(function (a) {\n\n if(isMargiela){\n a.find('select').focus();\n } else if (!isNewPDP){\n a.addClass('invalid');\n }\n\n \n });\n\n if (isNewPDP && $('.layer-product-notify.is-open').length < 1 && $('.layer-product-coming-soon.is-open').length < 1) {\n $('.variation-size-action').click();\n }\n\n return false;\n }\n\n $attributes.removeClass('invalid');\n return true;\n}\n\nmodule.exports = validation;\n","'use strict';\n\nlet formValidation = require('../components/formValidation');\nlet createErrorNotification = require('../components/errorNotification');\n/* This var is used as workaround to prevent multiple submit in login page */\nlet divId = 'loginSubmitInProgress';\n\nconst isMargiela = document.body.dataset.sitebrand === \"Margiela\";\nconst isJilSander = document.body.dataset.sitebrand === \"JilSander\";\n\nmodule.exports = {\n login: function () {\n // console.log('login');\n $('form.login').on('bouncerFormValid', function (e) {\n // console.log('login bouncerFormValid');\n e.preventDefault();\n\n let myEle = document.getElementById(divId);\n if (myEle) {\n return false;\n }\n\n /* workaround to prevent multiple submit in login page */\n let div = document.createElement('div');\n div.id = divId;\n document.body.appendChild(div);\n\n let form = $(this);\n e.preventDefault();\n let url = form.attr('action');\n $.spinner().start();\n $('form.login').trigger('login:submit', e);\n $.ajax({\n url: url,\n type: 'post',\n dataType: 'json',\n data: form.serialize(),\n success: function (data) {\n // console.log('login bouncerFormValid success', data);\n $.spinner().stop();\n document.getElementById(divId).remove();\n if (!data.success && data.journeyMsg) {\n if(document.querySelectorAll('.journey-start.js_journey-start').length < 1) {\n\n if(isJilSander){\n $(data.journeyMsg).insertAfter('.js-login-box');\n } else{\n $(data.journeyMsg).insertAfter('.login-content .alert-danger');\n }\n }\n $('form.login').trigger('login:error', data);\n } else if (!data.success) {\n formValidation(form, data);\n $.spinner().stop();\n } else {\n $('form.login').trigger('login:success', data);\n\n //Tealium event \"When the user correctly login\"\n $('body').trigger('user:loggedIn');\n location.href = data.redirectUrl;\n }\n },\n error: function (data) {\n document.getElementById(divId).remove();\n if (data.responseJSON.redirectUrl) {\n window.location.href = data.responseJSON.redirectUrl;\n } else {\n $('form.login').trigger('login:error', data);\n $.spinner().stop();\n }\n },\n });\n return false;\n });\n },\n\n guestlogin: function () {\n $('form.guest-login').on('bouncerFormValid', function (e) {\n e.preventDefault();\n\n let myEle = document.getElementById(divId);\n if (myEle) {\n return false;\n }\n\n /* workaround to prevent multiple submit in login page */\n let div = document.createElement('div');\n div.id = divId;\n document.body.appendChild(div);\n\n let form = $(this);\n e.preventDefault();\n let url = form.attr('action');\n $.spinner().start();\n $('form.guest-login').trigger('login:submit', e);\n $.ajax({\n url: url,\n type: 'post',\n dataType: 'json',\n data: form.serialize(),\n success: function (data) {\n $.spinner().stop();\n document.getElementById(divId).remove();\n if (!data.status) {\n formValidation(form, data);\n //$('form.guest-login').trigger('login:error', data);\n } else {\n //$('form.guest-login').trigger('login:success', data);\n location.href = data.redirectUrl;\n }\n },\n error: function (data) {\n document.getElementById(divId).remove();\n if (data.responseJSON.redirectUrl) {\n window.location.href = data.responseJSON.redirectUrl;\n } else {\n $('form.guest-login').trigger('login:error', data);\n $.spinner().stop();\n }\n },\n });\n return false;\n });\n },\n\n register: function () {\n // console.log('register');\n $('form.registration').on('bouncerFormValid', function (e) {\n // console.log('register bouncerFormValid');\n let form = $(this);\n e.preventDefault();\n let url = form.attr('action');\n $.spinner().start();\n $('form.registration').trigger('login:register', e);\n $.ajax({\n url: url,\n type: 'post',\n dataType: 'json',\n data: form.serialize(),\n success: function (data) {\n $.spinner().stop();\n if (!data.success) {\n $('form.registration').trigger('login:register:error', data);\n formValidation(form, data);\n } else {\n $('form.registration').trigger('login:register:success', data);\n location.href = data.redirectUrl;\n }\n },\n error: function (err) {\n if (err.responseJSON.redirectUrl) {\n window.location.href = err.responseJSON.redirectUrl;\n } else {\n createErrorNotification($('.error-messaging'), err.responseJSON.errorMessage);\n }\n\n $.spinner().stop();\n },\n });\n return false;\n });\n },\n\n resetPassword: function () {\n // console.log('resetPassword');\n $('.reset-password-form').on('bouncerFormValid', function (e) {\n console.log('reset-password-form bouncerFormValid');\n let form = $(this);\n e.preventDefault();\n $.spinner().start();\n $('.reset-password-form').trigger('login:register', e);\n\n var resetPasswordAjax = function (form) {\n let url = form.attr('action');\n $.ajax({\n url: url,\n type: 'post',\n dataType: 'json',\n data: form.serialize(),\n success: function (data) {\n $.spinner().stop();\n if (!data.success) {\n formValidation(form, data);\n } else {\n if (isMargiela) {\n $('#forgot-password #modal-forgot-password').addClass('d-none');\n $('#forgot-password #modal-forgot-password-confirm').removeClass('d-none');\n // MARG-791\n if (form.closest('.modal.is-open').length === 0) {\n $('#forgot-password').closest('[data-component=\"ModalTriggerComponent\"]').trigger('click');\n }\n } else if(isJilSander){\n $('.js-reset-password-wrapper').addClass('d-none');\n $('.js-recover-password-confirm').removeClass('d-none');\n } else{\n document.getElementById('modal-forgot-password').style.display = 'none';\n document.getElementById('modal-forgot-password-confirm').style.display = 'block';\n }\n\n // $('.request-password-title').text(data.receivedMsgHeading);\n // $('.request-password-body')\n // .empty()\n // .append('<p>' + data.receivedMsgBody + '</p>');\n\n // if (!data.mobile) {\n // $('#submitEmailButton').text(data.buttonText).attr('data-dismiss', 'modal');\n // }\n // else {\n // $('.send-email-btn')\n // .empty()\n // .html('<a href=\"' + data.returnUrl + '\" class=\"btn btn-primary btn-block\">' + data.buttonText + '</a>');\n // }\n }\n },\n error: function () {\n $.spinner().stop();\n },\n });\n };\n\n if ($('.g-recaptcha').length > 0) {\n grecaptcha.ready(function() {\n grecaptcha.execute($('[id^=\"gReCaptchaResetPassword\"]').data('sitekey'), {action:'submit'}).then(function(token) {\n $('[id^=\"gReCaptchaResetPassword\"]').val(token);\n resetPasswordAjax(form);\n });\n });\n } else {\n resetPasswordAjax(form);\n }\n return false;\n });\n },\n\n clearResetForm: function () {\n $('#login .modal').on('hidden.bs.modal', function () {\n $('#reset-password-email').val('');\n $('.modal-dialog .form-control.is-invalid').removeClass('is-invalid');\n });\n },\n\n changePassword: function () {\n // console.log('changePassword');\n $('.change-password-form').on('bouncerFormValid', function (e) {\n // console.log('change-password-form bouncerFormValid');\n let form = $(this);\n e.preventDefault();\n let url = form.attr('action');\n $.spinner().start();\n // $('.reset-password-form').trigger('login:register', e);\n $.ajax({\n url: url,\n type: 'post',\n dataType: 'json',\n data: form.serialize(),\n success: function (data) {\n // console.log('change-password-form bouncerFormValid success', data);\n $.spinner().stop();\n if (!data.success) {\n formValidation(form, data);\n } else {\n if (isMargiela) {\n document.getElementById('modal-new-password').classList.add('d-none');\n document.getElementById('modal-new-password-confirm').classList.remove('d-none');\n } else if(isJilSander){\n window.location.href = data.redirectUrl;\n // document.querySelector('.js-reset-password-form').classList.add('d-none');\n // document.querySelector('.js-reset-password-confirm').classList.remove('d-none');\n } else {\n document.getElementById('modal-new-password').style.display = 'none';\n document.getElementById('modal-new-password-confirm').style.display = 'block';\n }\n }\n },\n error: function () {\n $.spinner().stop();\n },\n });\n return false;\n });\n },\n};\n","const isMargiela = document.querySelector('body').classList.contains('Margiela');\nconst isJilSander = document.body.dataset.sitebrand === \"JilSander\";\nconst isMarni = document.body.dataset.sitebrand === \"Marni\";\n\nlet bodyMeasurementSwitchButtons;\nlet productMeasurementSwitchButtons;\n\nfunction columnAndRowHighlight () {\n const tds = document.querySelectorAll('.modal-content-gudielines .size-guidelines-types-item .table tbody tr td');\n // const trs = document.querySelectorAll('.modal-content-gudielines .size-guidelines-types-item .table tbody tr');\n const ths = document.querySelectorAll('.modal-content-gudielines .size-guidelines-types-item .table thead tr th');\n [...tds, ...ths].forEach((td, i) => {\n td.addEventListener('mouseover', (e) => {\n const currentRow = e.target.closest('tr');\n currentRow.classList.add('hightlighet-table-element');\n const currentRowHeight = currentRow.offsetHeight;\n currentRow.style.height = currentRowHeight + 'px';\n const newIndex = [...e.target.parentElement.children].indexOf(e.target);\n const trsToBeHighLighted = e.target.closest('table').querySelectorAll(`tr > :nth-child(${newIndex + 1})`);\n trsToBeHighLighted.forEach(el => el.classList.add('hightlighet-table-element'));\n const tbodyHighLightedCells = document.querySelectorAll('.modal-content-gudielines tr .hightlighet-table-element');\n addRemoveTbodyLightedCellClass(tbodyHighLightedCells, 'add');\n });\n td.addEventListener('mouseleave', (e) => {\n const currentRow = e.target.closest('tr');\n currentRow.classList.remove('hightlighet-table-element');\n const newIndex = [...e.target.parentElement.children].indexOf(e.target);\n const trsToBeHighLighted = e.target.closest('table').querySelectorAll(`tr > :nth-child(${newIndex + 1})`);\n trsToBeHighLighted.forEach(el => el.classList.remove('hightlighet-table-element'));\n const tbodyHighLightedCells = document.querySelectorAll('.modal-content-gudielines tr .hightlighet-table-element');\n addRemoveTbodyLightedCellClass(tbodyHighLightedCells, 'remove');\n });\n });\n}\n\n\n// get first and last elements from tbody\nfunction addRemoveTbodyLightedCellClass(tbodyHighLightedCells, act) {\n tbodyHighLightedCells.forEach((cell, index) => {\n if(act === 'remove') {\n document.querySelectorAll('.first-highlighted') && document.querySelectorAll('.first-highlighted').forEach(el => {\n el.classList.remove('first-highlighted');\n });\n document.querySelectorAll('.last-highlighted') && document.querySelectorAll('.last-highlighted').forEach(el => {\n el.classList.remove('last-highlighted');\n });\n } else {\n if(index === 0){\n cell.classList.add('first-highlighted');\n } else if(index === tbodyHighLightedCells.length -1) {\n cell.classList.add('last-highlighted');\n }\n }\n });\n}\n\nfunction hideShowUnits(unit) {\n const modal = document.querySelector('#size-guidelines-modal');\n const displayValues = [...modal.querySelectorAll('.js-value')];\n displayValues.forEach((item) => {\n if (item.classList.contains(`js-${unit}`)) {\n item.classList.remove('d-none');\n } else {\n item.classList.add('d-none');\n }\n });\n}\n\nfunction sizeUnitToggler() {\n const modal = document.querySelector('#size-guidelines-modal');\n if (modal) {\n const muTogglers = [...modal.querySelectorAll('input[name=\"measuringguide_mu\"]')];\n muTogglers.forEach((item) => {\n let unit = item.checked ? 'in' : 'cm';\n hideShowUnits(unit);\n item.addEventListener('change', (e) => {\n unit = e.currentTarget.checked ? 'in' : 'cm';\n hideShowUnits(unit);\n muTogglers.forEach((toggler) => {\n toggler.checked = e.currentTarget.checked;\n });\n });\n });\n }\n}\n\ndocument.querySelectorAll('.fitguide__tab-button').forEach((item) => {\n item.addEventListener('click', (event) => {\n if (item.dataset.ref === 'fitguide-content-01') {\n document.getElementById('fitguide-content-01').style.display = 'block';\n document.getElementById('fitguide-content-02').style.display = 'none';\n }\n if (item.dataset.ref === 'fitguide-content-02') {\n document.getElementById('fitguide-content-01').style.display = 'none';\n document.getElementById('fitguide-content-02').style.display = 'block';\n }\n });\n});\n\nif (document.querySelector('.click-to-convert-sizes-text')) {\n document.querySelector('.click-to-convert-sizes-text').addEventListener('click', (event) => {\n document.getElementById('fitguide-content-01').style.display = 'none';\n document.getElementById('fitguide-content-02').style.display = 'block';\n document.getElementById('fitguide-measurement-button').classList.remove('fitguide__tab-button--active');\n document.getElementById('fitguide-sizes-button').classList.add('fitguide__tab-button--active');\n });\n}\n\n\nif (document.querySelector('.container-size-guidelines .modal-header .back-button')) {\n document.querySelector('.container-size-guidelines .modal-header .back-button').addEventListener('click', (event) => {\n document.getElementById('fitguide-content-01').style.display = 'block';\n document.querySelector('.container-size-guidelines .modal-header .title').style.display = 'block';\n document.querySelector('.container-size-guidelines .modal-header .back-button').style.display = 'none';\n document.getElementById('fitguide-content-02').style.display = 'none';\n document.getElementById('fitguide-measurement-button').classList.add('fitguide__tab-button--active');\n document.getElementById('fitguide-sizes-button').classList.remove('fitguide__tab-button--active');\n });\n}\n\nif (document.querySelector('.container-size-guidelines .switch-to-table')) {\n document.querySelector('.container-size-guidelines .switch-to-table').addEventListener('click', (event) => {\n document.getElementById('fitguide-content-01').style.display = 'none';\n document.querySelector('.container-size-guidelines .modal-header .title').style.display = 'none';\n document.querySelector('.container-size-guidelines .modal-header .back-button').style.display = 'block';\n document.getElementById('fitguide-content-02').style.display = 'block';\n document.getElementById('fitguide-measurement-button').classList.remove('fitguide__tab-button--active');\n document.getElementById('fitguide-sizes-button').classList.add('fitguide__tab-button--active');\n });\n}\n\nif (document.querySelector('.click-to-convert-sizes-text')) {\n document.querySelector('.click-to-convert-sizes-text').addEventListener('click', (event) => {\n document.getElementById('fitguide-content-01').style.display = 'none';\n document.getElementById('fitguide-content-02').style.display = 'block';\n document.querySelector('.container-size-guidelines .modal-header .title').style.display = 'none';\n document.querySelector('.container-size-guidelines .modal-header .back-button').style.display = 'block';\n document.getElementById('fitguide-measurement-button').classList.remove('fitguide__tab-button--active');\n document.getElementById('fitguide-sizes-button').classList.add('fitguide__tab-button--active');\n });\n}\n\ndocument.querySelectorAll('.fitguide__tab-button').forEach((item) => {\n const container = document.querySelector('#size-guidelines-modal .modal-content');\n if (container) {\n let tabs = [...container.querySelectorAll('.fitguide__tab-button')];\n tabs.forEach((items) => {\n items.addEventListener('click', (event) => {\n const thisItem = event.currentTarget;\n if (!thisItem.classList.contains('fitguide__tab-button--active')) {\n [...container.querySelectorAll('.fitguide__tab-button--active')].forEach((item) => {\n item.classList.remove('fitguide__tab-button--active');\n });\n [...container.querySelectorAll('.fitguide__content')].forEach((item) => {\n item.classList.remove('fitguide__content--active');\n });\n thisItem.classList.add('fitguide__tab-button--active');\n if(!isMargiela) {\n container.querySelector(`#${thisItem.dataset.ref}`) && container.querySelector(`#${thisItem.dataset.ref}`).classList.add('fitguide__content--active');\n }\n [...container.querySelectorAll(`[data-ref=\"${thisItem.dataset.ref}\"]`)].forEach((item) => {\n item.classList.add('fitguide__tab-button--active');\n });\n }\n });\n });\n const sizeSelectors = [...container.querySelectorAll('.measuring-guide__size-selector select')];\n sizeSelectors.forEach((item) => {\n item.addEventListener('change', (e) => {\n const [type, size] = e.currentTarget.value.split('_');\n let lengthValue = size;\n if (type === 'size') {\n container.querySelector(`.measuring-guide__interactive-table[data-measure=\"${type}\"]:not(.d-none)`).classList.add('d-none');\n container.querySelector(`[data-measure=\"${type}\"][data-size=\"${size}\"]`).classList.remove('d-none');\n const lenghtSelect = container.querySelector('.measuring-guide__size-selector select[name=\"length\"]');\n if (lenghtSelect) {\n lengthValue = lenghtSelect.value.split('_')[1];\n }\n }\n [...container.querySelectorAll(`.measuring-guide__interactive-table:not(.d-none) [data-length]:not([data-length=\"${lengthValue}\"])`)].forEach((item) => {\n item.classList.add('d-none');\n });\n container.querySelector(`.measuring-guide__interactive-table:not(.d-none) [data-length=\"${lengthValue}\"]`).classList.remove('d-none');\n });\n });\n }\n});\n\nfunction enhancedMeasuringGuide() {\n sizeUnitToggler();\n const container = document.querySelector('#size-guidelines-modal .modal-content');\n if (container) {\n let tabs = [...container.querySelectorAll('.fitguide__tab-button')];\n tabs.forEach((items) => {\n items.addEventListener('click', (event) => {\n const thisItem = event.currentTarget;\n if (!thisItem.classList.contains('fitguide__tab-button--active')) {\n [...container.querySelectorAll('.fitguide__tab-button--active')].forEach((item) => {\n item.classList.remove('fitguide__tab-button--active');\n });\n [...container.querySelectorAll('.fitguide__content')].forEach((item) => {\n item.classList.remove('fitguide__content--active');\n });\n thisItem.classList.add('fitguide__tab-button--active');\n if(!isMargiela) {\n container.querySelector(`#${thisItem.dataset.ref}`) && container.querySelector(`#${thisItem.dataset.ref}`).classList.add('fitguide__content--active');\n }\n [...container.querySelectorAll(`[data-ref=\"${thisItem.dataset.ref}\"]`)].forEach((item) => {\n item.classList.add('fitguide__tab-button--active');\n });\n }\n });\n });\n const sizeSelectors = [...container.querySelectorAll('.measuring-guide__size-selector select')];\n sizeSelectors.forEach((item) => {\n item.addEventListener('change', (e) => {\n const [type, size] = e.currentTarget.value.split('_');\n let lengthValue = size;\n if (type === 'size') {\n container.querySelector(`.measuring-guide__interactive-table[data-measure=\"${type}\"]:not(.d-none)`).classList.add('d-none');\n container.querySelector(`[data-measure=\"${type}\"][data-size=\"${size}\"]`).classList.remove('d-none');\n const lenghtSelect = container.querySelector('.measuring-guide__size-selector select[name=\"length\"]');\n if (lenghtSelect) {\n lengthValue = lenghtSelect.value.split('_')[1];\n }\n }\n [...container.querySelectorAll(`.measuring-guide__interactive-table:not(.d-none) [data-length]:not([data-length=\"${lengthValue}\"])`)].forEach((item) => {\n item.classList.add('d-none');\n });\n container.querySelector(`.measuring-guide__interactive-table:not(.d-none) [data-length=\"${lengthValue}\"]`).classList.remove('d-none');\n });\n });\n }\n}\n\nfunction basicMeasuringGuide() {\n sizeUnitToggler();\n}\n\nfunction buildSingleRowContent(measure) {\n let content = '';\n if(measure && measure.values) {\n measure.values.forEach( val => {\n content += `\n <td class=\"js-values\">\n ${val.cm ? `<span class=\"js-value js-cm\">${val.cm}</span>` : null}\n ${val.in ? `<span class=\"js-value js-in d-none\">${val.in}</span>` : null}\n </td>\n `\n })\n }\n return content;\n}\n\nconst calcDynamicPercentWidth = (ref, length) => ``;\n\nfunction buildTableHeader(bodyMeasurement) {\n let headings = '';\n if(bodyMeasurement && bodyMeasurement.headings) {\n bodyMeasurement.headings.forEach((el, index) => {\n headings += `<th style=\"width: ${calcDynamicPercentWidth(100, bodyMeasurement.headings.length)}\" class=\"${index === 1 ? 'fixed-side' : ''}\">${el}</th>`;\n });\n }\n return headings;\n}\n\nfunction buildTableBody(bodyMeasurement) {\n let content = '';\n if(bodyMeasurement && bodyMeasurement.convertedMeasurements) {\n bodyMeasurement.convertedMeasurements.forEach((measure) => {\n content += `\n <tr>\n <td class=\"measure-label label fixed-side\">${measure.label}</td>\n ${buildSingleRowContent(measure)}\n </tr>\n `\n })\n }\n return content;\n}\n\nconst initUnitSizeChangeBehaviour = (unitSizeInputs) => {\n const toggleActiveButton = (input) => {\n unitSizeInputs && unitSizeInputs.forEach(b => b.classList.remove('-active'));\n input.target.closest('.jils-change-unit-measure').classList.add('-active');\n }\n unitSizeInputs ? unitSizeInputs.forEach(b => b.addEventListener('click', (e) => toggleActiveButton(e))) : null;\n}\n\n\nconst bodyMeasurementTemplate = (bodyMeasurement) => {\n const changeUnitMeasureLabel = `<div class=\"change-unit-measure-label\">${bodyMeasurement && bodyMeasurement.measurementsDescriptionLabel}</div>`;\n const changeUnitMeasureSeparator = `<div class=\"change-unit-measure-separator\">/</div>`;\n return `\n <header class=\"measuring-guide__header\">\n <div class=\"measuring-guide__header-content\">\n <p class=\"text-measurements-guide\">${bodyMeasurement.description}</p> \n </div>\n <div class=\"measuring-guide__toggler\">\n <div class=\"col\">\n <div class=\"row choose-size-radio-input-row\">\n <div class=\"col-auto measuring-guide__radio-input -jils-measuring-guide-input\">\n <div class=\"form-group mm-switch -md\" id=\"body-measurements-switch\">\n ${isJilSander ? changeUnitMeasureLabel : ''}\n <div class=\"radio mm-switch__toggle jils-change-unit-measure -active\">\n <label for=\"unit-measure_0\">cm\n <input name=\"unit-measure\" class=\"body-unit-measure unit-measure\" id=\"unit-measure_0\" type=\"radio\" value=\"cm\" checked=\"\">\n </label>\n </div>\n ${isJilSander ? changeUnitMeasureSeparator : ''}\n <div class=\"radio mm-switch__toggle jils-change-unit-measure\">\n <label for=\"unit-measure_1\">inches\n <input name=\"unit-measure\" class=\"body-unit-measure unit-measure\" id=\"unit-measure_1\" type=\"radio\" value=\"in\">\n </label>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </header>\n <div class=\"measuring-guide-content row\">\n <div class=\"col-12\">\n <div class=\"table table-wrapper\">\n <table class=\"table table-striped body-measure-table\">\n <thead>\n ${buildTableHeader(bodyMeasurement)}\n </thead>\n <tbody>\n ${buildTableBody(bodyMeasurement)}\n </tbody>\n </table>\n </div>\n </div>\n </div>\n `\n}\n\nconst toggleButtonClick = (btn) => {\n if(btn) {\n btn.addEventListener('click', (e) => {\n e.preventDefault();\n\n let selectedUnitMeasure = e.target && e.target.classList.contains('unit-measure') ? e.target.value : e.target.querySelector('.unit-measure').value;\n let selectedFitGuideSection = e.target.closest('.form-group.mm-switch').getAttribute('id');\n const isBodyMeasurementSection = selectedFitGuideSection === 'body-measurements-switch';\n const isProductMeasurementSection = selectedFitGuideSection === 'product-measurements-switch';\n\n if(isProductMeasurementSection) {\n productMeasurementSwitchButtons.forEach(b => b.classList.remove('-active'));\n } else if(isBodyMeasurementSection) {\n bodyMeasurementSwitchButtons.forEach(b => b.classList.remove('-active'));\n }\n \n e.target.closest('.mm-switch__toggle').classList.add('-active');\n\n if(selectedUnitMeasure) {\n if(selectedUnitMeasure == 'in') {\n if(isBodyMeasurementSection) {\n document.querySelectorAll('.body-measure-table tbody .js-values .js-cm').forEach(cms => {\n cms.classList.contains('d-none') ? null : cms.classList.add('d-none');\n });\n document.querySelectorAll('.body-measure-table tbody .js-values .js-in').forEach(ins => {\n ins.classList.remove('d-none');\n });\n } else if (isProductMeasurementSection) {\n document.querySelectorAll('.single-detail-content .table-details-value ._measures-cm').forEach(cms => {\n cms.classList.contains('d-none') ? null : cms.classList.add('d-none');\n });\n document.querySelectorAll('.single-detail-content .table-details-value ._measures-in').forEach(ins => {\n ins.classList.remove('d-none');\n });\n }\n } else {\n if(isBodyMeasurementSection) {\n document.querySelectorAll('.body-measure-table tbody .js-values .js-in').forEach(ins => {\n ins.classList.contains('d-none') ? null : ins.classList.add('d-none');\n });\n document.querySelectorAll('.body-measure-table tbody .js-values .js-cm').forEach(cms => {\n cms.classList.remove('d-none');\n });\n } else if (isProductMeasurementSection) {\n document.querySelectorAll('.single-detail-content .table-details-value ._measures-in').forEach(ins => {\n ins.classList.contains('d-none') ? null : ins.classList.add('d-none');\n });\n document.querySelectorAll('.single-detail-content .table-details-value ._measures-cm').forEach(cms => {\n cms.classList.remove('d-none');\n });\n }\n }\n }\n })\n }\n\n}\n\n\nmodule.exports = {\n sizeChart: function () {\n $('#size-guidelines-modal').on('show.bs.modal', function (e) {\n const layerBody = e.currentTarget.querySelector('.modal-content');\n const triggerButton = document.querySelector('[data-target=\"#size-guidelines-modal\"]');\n layerBody.innerHTML = '';\n $.ajax({\n url: triggerButton.getAttribute('href'),\n type: 'get',\n dataType: 'json',\n beforeSend: () => {\n $.spinner().start();\n },\n success: function (data) {\n if (data.success) {\n layerBody.innerHTML = data.content;\n if (layerBody.querySelector('.fitguide__title')) {\n enhancedMeasuringGuide();\n } else {\n basicMeasuringGuide();\n }\n }\n $.spinner().stop();\n },\n error: (error) => {\n $.spinner().stop();\n layerBody.innerHTML = `<p class=\"error\">${error.responseJSON.message}</p>`;\n },\n });\n });\n $('#sizeChartModal').on('show.bs.modal', function (e) {\n const layerBody = e.currentTarget.querySelector('.modal-content');\n const triggerButton = document.querySelector('[data-target=\"#sizeChartModal\"]');\n layerBody.innerHTML = '';\n $.ajax({\n url: triggerButton.getAttribute('href'),\n type: 'get',\n dataType: 'json',\n beforeSend: () => {\n $.spinner().start();\n },\n success: function (data) {\n if (data.success) {\n layerBody.innerHTML = data.content;\n }\n $.spinner().stop();\n },\n error: (error) => {\n $.spinner().stop();\n layerBody.innerHTML = `<p class=\"error\">${error.responseJSON.message}</p>`;\n },\n });\n });\n },\n updateFitGuideUnit: function () {\n $(\"input[name='unit-measure']\").on('click', function (e) {\n let sizes = $('.measuring-guide__size-table').find('.table-details-value');\n $('span[class^=\"_measures-\"]').addClass('d-none');\n for (let i = 0; i < sizes.length; i++) {\n let sizeMeasures = $(sizes[i]).find('span[class^=\"_measures-\"]');\n for (let el = 0; el < sizeMeasures.length; el++) {\n if ($(sizeMeasures[el]).hasClass('_measures-' + e.currentTarget.value.toLowerCase())) {\n $(sizeMeasures[el]).removeClass('d-none');\n }\n }\n }\n });\n },\n updateFitGuideSize: function () {\n $(\"select[name='choose-your-size']\").on('change', function (e) {\n let sizes = $('.measuring-guide__size-table').find('.table-details-value');\n for (let i = 0; i < sizes.length; i++) {\n if ($(sizes[i]).hasClass('fitguide-size-' + e.currentTarget.value.toLowerCase())) {\n $(sizes[i]).removeClass('d-none');\n } else {\n $(sizes[i]).addClass('d-none');\n }\n }\n });\n },\n openFitGuide: function () {\n $('.size-guidelines-button').on('click', function (e) {\n let url = e.currentTarget.dataset['getcontent'];\n if (url) {\n $.ajax({\n url: url,\n type: 'get',\n dataType: 'json',\n success: function (data) {\n const sizeConversionAccordion = document.querySelector('.accordion.size-conversion-accordion');\n const bodyMeasuresAccordion = document.querySelector('.accordion.body-measures-accordion');\n const productMeasuresAccordion = document.querySelector('.accordion.product-measures-accordion');\n const productCategorySizechart = document.querySelector('.accordion.product-category-sizechart-accordion');\n const genderSizeConversionAccordion = document.querySelector('.accordion.gender-size-conversion-accordion');\n const isDynamicFitguideElement = isMargiela || isJilSander;\n if(isMargiela) {\n $('ul.size-guidelines-types li').addClass('d-none');\n }\n\n if (data) {\n $('#unit-measure_0').trigger('click');\n if (data.sizeListImageUrl) {\n $('.measuring-img__sketches')\n .empty()\n .append('<img src=\"' + data.sizeListImageUrl + '\" alt=\"img\" class=\"single-image-product\" />');\n }\n if (data.sizeListOptions == \"<option value=\\\"uni\\\">UNI</option>\") {\n $('.fitguide__container--desktop').addClass('size-uni-active');\n }\n if (data.sizeListOptions) {\n $(\"select[name='choose-your-size']\")\n .empty()\n .append(data.sizeListOptions);\n }\n if (data.tableDetails) {\n $('.measuring-guide__size-table .row')\n .empty()\n .append(data.tableDetails);\n $('#fitguide-content-01')\n .css('display' , 'block');\n if(isMarni && $('#fitguide-measurement-button').length > 0) {\n $('#fitguide-measurement-button')\n .trigger('click');\n }\n $('#fitguide-measurement-button')\n .addClass('fitguide__tab-button--active')\n .closest('.tab-button')\n .css('display' , 'flex');\n\n let selectedSizePDP = $('.attribute-size .fsb-button').length ? $('.attribute-size .fsb-button').text().replace(/ /g, '').toLowerCase() : '';\n if(window.isMobile() && isMarni) {\n selectedSizePDP = $('select.select-size').length ? $('select.select-size').find(\":selected\").text().replace(/\\s+/g, '').toLowerCase() : '';\n } \n if(selectedSizePDP !== '' && $(\"#choose-your-size option[value='\" + selectedSizePDP + \"']\").length > 0) {\n $(\"select[name='choose-your-size']\")\n .val(selectedSizePDP)\n .trigger('change');\n }\n \n if (!data.fitGuideContentAsset) {\n $('#fitguide-measurement-button')\n .closest('.tab-button')\n .siblings('.empty-col')\n .addClass('col-md-12')\n .css('border-left' , '0');\n $('.click-to-convert-sizes')\n .css('display' , 'none');\n }\n }\n if (data.fitGuideContentAsset) {\n isDynamicFitguideElement && sizeConversionAccordion ? sizeConversionAccordion.classList.remove('d-none') : null;\n if(isMargiela) {\n $('.size-conversion-accordion .measuring-guide-container')\n .empty()\n .append(data.fitGuideContentAsset);\n } else {\n $('.measuring-guide-container')\n .empty()\n .append(data.fitGuideContentAsset);\n }\n $('#fitguide-sizes-button')\n .closest('.tab-button') \n .css('display' , 'flex');\n if (!data.tableDetails) {\n $('#fitguide-sizes-button')\n .addClass('fitguide__tab-button--active')\n .closest('.tab-button')\n .siblings('.empty-col')\n .addClass('col-md-10');\n $('#fitguide-content-02')\n .css('display' , 'block');\n } \n }\n if (data.productCategorySizeChartContentAsset) {\n if(isDynamicFitguideElement) {\n productCategorySizechart ? productCategorySizechart.classList.remove('d-none') : null;\n } \n $('.product-category-sizechart .measuring-guide-container')\n .empty()\n .append(data.productCategorySizeChartContentAsset);\n }\n\n if (data.genderlessGuideContentAsset) {\n if(isDynamicFitguideElement) {\n genderSizeConversionAccordion ? genderSizeConversionAccordion.classList.remove('d-none') : null;\n } \n $('.fitguige-sizes .measuring-guide-container')\n .empty()\n .append(data.genderlessGuideContentAsset);\n }\n if(data.bodyMeasurementsData && Object.keys(data.bodyMeasurementsData).length > 0) {\n const bodyMeasurementContent = bodyMeasurementTemplate(data.bodyMeasurementsData);\n if(bodyMeasuresAccordion) {\n bodyMeasuresAccordion.classList.remove('d-none');\n }\n $('#body-measures .measuring-guide-container').empty()\n .append(bodyMeasurementContent);\n\n bodyMeasurementSwitchButtons = document.querySelectorAll('.body-measures-accordion .mm-switch .mm-switch__toggle');\n if(isJilSander) {\n bodyMeasurementSwitchButtons = document.querySelectorAll('.fitguide__content .jils-change-unit-measure');\n initUnitSizeChangeBehaviour(bodyMeasurementSwitchButtons);\n }\n productMeasurementSwitchButtons = document.querySelectorAll('.product-measures-accordion .mm-switch .mm-switch__toggle');\n bodyMeasurementSwitchButtons.forEach(btn => toggleButtonClick(btn));\n productMeasurementSwitchButtons.forEach(btn => toggleButtonClick(btn));\n }\n if(isDynamicFitguideElement) {\n if (!data.fitGuideContentAsset && !data.genderlessGuideContentAsset && !data.productCategorySizeChartContentAsset && (!data.bodyMeasurementsData || Object.keys(data.bodyMeasurementsData).length == 0)){\n $('.measuring-guide-container').empty()\n }\n if(Object.keys(data.fitGuide).length > 0) {\n productMeasuresAccordion ? productMeasuresAccordion.classList.remove('d-none') : null;\n if(isJilSander) {\n if(document.querySelectorAll('.fitguide__titles .tab-button:not(.d-none)').length == 1 && productMeasuresAccordion){\n productMeasuresAccordion.querySelector('button').click();\n }\n const productMeasureInput = document.querySelector('#product-measures #interactive-unit-measure_0');\n productMeasureInput ? productMeasureInput.setAttribute('checked', true) : null;\n }\n }\n columnAndRowHighlight();\n }\n }\n },\n error: (error) => {\n alert('error');\n },\n });\n }\n });\n },\n};\n\n","'use strict';\n\nmodule.exports = function (include) {\n if (typeof include === 'function') {\n include();\n } else if (typeof include === 'object') {\n Object.keys(include).forEach(function (key) {\n if (typeof include[key] === 'function') {\n include[key]();\n }\n });\n }\n};\n","'use strict';\n\nmodule.exports = function (include) {\n if (typeof include === 'function') {\n include();\n } else if (typeof include === 'object') {\n Object.keys(include).forEach(function (key) {\n if (typeof include[key] === 'function') {\n include[key]();\n }\n });\n }\n};\n","window.jQuery = window.$ = require('jquery');\nwindow.Swiper = require('swiper8/swiper-bundle');\n\nlet processInclude = require('base/util');\nconst utils = require('./utils');\nconst videoUtils = require('./videoUtils');\n\nwindow.isMargiela = true;\n\n$(document).ready(function() {\n const currentPage = document.querySelector('body').getAttribute('id');\n processInclude(require('core/login'));\n processInclude(require('./forms'));\n processInclude(require('./banner-notification'));\n processInclude(require('./miniCart'));\n\n processInclude(require('./search/search-suggestions'));\n processInclude(require('./selectElement'));\n processInclude(require('./menuHelper'));\n processInclude(require('./countrySelectorHelper'));\n processInclude(require('core/components/wishlist'));\n\n videoUtils.videoInit();\n // utils.mainContentSpacer();\n // utils.videoButtonsHide();\n utils.initialHeight();\n utils.mainContentSpacer();\n if(currentPage === 'wishlist-show' || currentPage === 'home-show') {\n processInclude(require('tealium/tealiumEvents'));\n }\n\n const chatbotEntryPoint = document.getElementById('chatbot-entry-point-bubble');\n const chatbotEntryPointBalloon = document.getElementById('chatbot-entry-point-balloon');\n\n if (chatbotEntryPoint && chatbotEntryPointBalloon) {\n setTimeout(() => {\n chatbotEntryPointBalloon.classList.add('active');\n chatbotEntryPointBalloon.querySelector('.close-balloon').addEventListener('click', (e) => {\n e.preventDefault();\n\n chatbotEntryPointBalloon.addEventListener('transitionend', () => {\n chatbotEntryPointBalloon.classList.add('d-none');\n }, { once: true }); \n\n chatbotEntryPointBalloon.classList.remove('active');\n })\n }, 3000)\n }\n\n document.documentElement.style.setProperty('--header-height', $('.mm-menu.js-main-nav')[0].clientHeight + 'px');\n $('#maincontent')[0].style = 'padding-top: ' + $('.mm-menu.js-main-nav')[0].clientHeight + 'px';\n\n});\nrequire('base/thirdParty/bootstrap');\nrequire('core/components/spinner');\n\n","'use strict';\n\nvar debounce = require('lodash/debounce');\nvar endpoint = $('.suggestions-wrapper').data('url');\nvar minChars = 3;\nvar ENTER = 13;\nvar UP_KEY = 38;\nvar DOWN_KEY = 40;\nvar DIRECTION_DOWN = 1;\nvar DIRECTION_UP = -1;\nvar ESC = 27;\nvar isMobile = window.innerWidth <= 1024;\n/**\n * Retrieves Suggestions element relative to scope\n *\n * @param {Object} scope - Search input field DOM element\n * @return {JQuery} - .suggestions-wrapper element\n */\nfunction getSuggestionsWrapper(scope) {\n return $(scope).siblings('.suggestions-wrapper-container').children('.left-container').children('.search-results').children('.suggestions-wrapper');\n}\n\n/**\n * Changes Search Container Size\n *\n */\nfunction handleContainerSize(results) {\n var heightMobile;\n const menuWrapper = $('.mm-menu__wrapper')[0];\n const suggestions = $('.recommendations-container')[0];\n const leftContainerElement = $('.search-results')[0];\n var menu;\n var search;\n var leftContainer;\n var suggestionsWrapper;\n var heightMobileNoResults;\n leftContainer = $('.left-container')[0].offsetHeight;\n search = $('.mm-menu-search')[0].offsetHeight;\n var height = search + suggestions.offsetHeight + 60;\n var maxHeight = height - 48;\n if (isMobile) {\n menu = $('.mm-menu__primary')[0].offsetHeight;\n heightMobile = menu + search + leftContainer;\n heightMobileNoResults = menu + search + suggestions.offsetHeight + leftContainer + 60;\n }\n suggestionsWrapper = $('.suggestions-wrapper-container .page-search-result-container')[0].offsetHeight;\n var root = document.documentElement;\n if (maxHeight < 250) {\n root.style.setProperty('--search-results-max', \"unset\");\n } else {\n root.style.setProperty('--search-results-max', maxHeight + \"px\");\n }\n if (isMobile && results) {\n menuWrapper.style.paddingBottom = `clamp(350px, ${heightMobile}px, ${heightMobile}px)`;\n } else if (isMobile && !results) {\n menuWrapper.style.paddingBottom = `clamp(350px, ${heightMobileNoResults}px, ${heightMobileNoResults}px)`;\n } else {\n if ($('.search-is-open').length > 0) {\n menuWrapper.style.paddingBottom = `clamp(400px, ${height}px, ${height}px)`;\n } else {\n menuWrapper.style.paddingBottom = '';\n menuWrapper.style.height = '';\n }\n }\n\n var top = $('.search-recommendations-top')[0].offsetHeight + 24;\n if (!isMobile) {\n leftContainerElement.style.height = `clamp(300px, ${suggestionsWrapper - 60 - top}px, ${suggestionsWrapper - 60 - top}px)`;\n }\n}\n\n/**\n * Process Ajax response for SearchServices-GetSuggestions\n *\n * @param {Object|string} response - Empty object literal if null response or string with rendered\n * suggestions template contents\n */\nfunction processResponse(response) {\n var $suggestionsWrapper = getSuggestionsWrapper(this).empty();\n\n $.spinner().stop();\n\n if (!(typeof (response) === 'object')) {\n $suggestionsWrapper.append(response).show();\n \n // Trigger screen reader by setting aria-describedby with the new suggestion message.\n var suggestionsList = $('.suggestions .item');\n if ($(suggestionsList).length) {\n $('input.search-field').attr('aria-describedby', 'search-result-count');\n } else {\n $('input.search-field').removeAttr('aria-describedby');\n }\n } else {\n $suggestionsWrapper.hide();\n }\n\n $('.search-results').removeClass('d-none');\n\n if (isMobile) {\n $('.suggestions-wrapper-container .page-search-result-container').addClass('d-none');\n }\n\n handleContainerSize(true);\n}\n\n/**\n * Retrieve suggestions\n *\n * @param {Object} scope - Search field DOM element\n */\nfunction getSuggestions(scope) {\n if ($(scope).val().length >= minChars) {\n $('.trigger-search-link').attr('href', '');\n $(scope).attr('aria-activedescendant', '');\n $('.input-reset').removeClass('d-none');\n $('.recent-searches').addClass('d-none');\n var gcat = document.body.dataset.gcat;\n $.spinner().start();\n $.ajax({\n context: scope,\n url: endpoint + encodeURIComponent($(scope).val()) + '&qbrand=' + encodeURIComponent(gcat),\n method: 'GET',\n success: processResponse,\n error: function () {\n $.spinner().stop();\n }\n });\n } else {\n getSuggestionsWrapper(scope).empty();\n $('.search-results').addClass('d-none');\n $('.recent-searches').removeClass('d-none');\n if (isMobile) {\n $('.suggestions-wrapper-container .page-search-result-container').removeClass('d-none');\n $('.input-reset').addClass('d-none');\n }\n handleContainerSize(false);\n }\n}\n\n/**\n * Handle Search Suggestion Keyboard Arrow Keys\n *\n * @param {Integer} direction takes positive or negative number constant, DIRECTION_UP (-1) or DIRECTION_DOWN (+1)\n */\nfunction handleArrow(scope,direction) {\n // get all li elements in the suggestions list\n var suggestionsList = $('.suggestions .item');\n if (suggestionsList.filter('.selected').length === 0) {\n suggestionsList.first().addClass('selected');\n $(scope).each(function () {\n $(this).attr('aria-activedescendant', suggestionsList.first()[0].id);\n });\n } else {\n suggestionsList.each(function (index) {\n var idx = index + direction;\n if ($(this).hasClass('selected')) {\n $(this).removeClass('selected');\n $(this).removeAttr('aria-selected');\n if (suggestionsList.eq(idx).length !== 0) {\n suggestionsList.eq(idx).addClass('selected');\n suggestionsList.eq(idx).attr('aria-selected', true);\n $(this).removeProp('aria-selected');\n $(scope).each(function () {\n $(this).attr('aria-activedescendant', suggestionsList.eq(idx)[0].id);\n });\n } else {\n suggestionsList.first().addClass('selected');\n suggestionsList.first().attr('aria-selected', true);\n $(scope).each(function () {\n $(this).attr('aria-activedescendant', suggestionsList.first()[0].id);\n });\n }\n return false;\n }\n return true;\n });\n }\n}\n\nfunction handleEnter(scope) {\n if($(scope).attr('aria-activedescendant').length === 0 && getSuggestionsWrapper(scope).html() !== \"\" ) {\n getSuggestionsWrapper(scope).empty();\n $('.trigger-search-link').attr('href', '');\n } else if(getSuggestionsWrapper(scope).html() !== \"\" ) {\n var linkText = $('#'+$(scope).attr('aria-activedescendant') + ' a div div span.type-global-control-productive-3').html().trim();\n var link = $('#'+$(scope).attr('aria-activedescendant') + ' a').attr('href');\n $('.trigger-search-link').attr('href', link);\n $(scope).val(linkText);\n getSuggestionsWrapper(scope).empty();\n } \n \n return false;\n}\n\nmodule.exports = function () {\n \n\n $('form[name=\"simpleSearch\"]').on('submit',function (e) {\n var suggestionsList = $('.suggestions .item');\n if (suggestionsList.filter('.selected').length !== 0) {\n e.preventDefault();\n suggestionsList.filter('.selected').find('a')[0].click();\n } else{\n if( $('.mm-menu-search__results__end').length>0){\n $('.mm-menu-search__results__end').find('a')[0].click();\n }\n \n }\n \n });\n\n $('.input-reset').on('click',function (e) {\n $('input.search-field')[0].value = '';\n getSuggestions('input.search-field');\n });\n\n $('input.search-field').each(function () {\n /**\n * Use debounce to avoid making an Ajax call on every single key press by waiting a few\n * hundred milliseconds before making the request. Without debounce, the user sees the\n * browser blink with every key press.\n */\n var debounceSuggestions = debounce(getSuggestions, 300);\n $(this).on('keyup', function (e) {\n // Capture Down/Up Arrow Key Events\n switch (e.which) {\n case DOWN_KEY:\n handleArrow(this, DIRECTION_DOWN);\n e.preventDefault(); // prevent moving the cursor\n break;\n case UP_KEY:\n handleArrow(this, DIRECTION_UP);\n e.preventDefault(); // prevent moving the cursor\n break;\n case ESC:\n if($(this).hasClass('accessibility-search-input')) {\n $('.js-search-close').trigger('click');\n e.preventDefault();\n break;\n }\n default:\n if(e.which !== ENTER) {\n debounceSuggestions(this, e.which);\n } \n }\n });\n\n $(this).on('keypress', function (e) {\n switch (e.which) {\n case ENTER:\n if(!window.isMobile() && (window.country === 'US' || window.country === 'CA') && $(this).attr('aria-activedescendant') !== 'show-all' && $(this).hasClass('accessibility-search-input')) {\n try {\n e.preventDefault()\n if(getSuggestionsWrapper(this).html() === \"\" ) {\n debounceSuggestions(this, e);\n } else {\n handleEnter(this);\n }\n } catch(err) {\n console.log(err.message); \n }\n } else {\n if($(this).attr('aria-activedescendant').length === 0) {\n $(this).closest('form').submit();\n } else {\n e.preventDefault();\n $('#'+$(this).attr('aria-activedescendant') + ' a')[0].click();\n } \n }\n break;\n }\n });\n });\n\n $('.mm-btn-accessibility-search').on('keyup', function(e) {\n if(e.which === ENTER) {\n if($('.trigger-search-link').attr('href').length > 0) {\n location.href = $('.trigger-search-link').attr('href') ;\n } else {\n $('.mm-menu-search__bar').submit();\n }\n }\n });\n\n $('.mm-btn-accessibility-search').on('click', function(e) {\n if($('.trigger-search-link').attr('href').length > 0) {\n location.href = $('.trigger-search-link').attr('href');\n } else {\n $('.mm-menu-search__bar').submit();\n }\n });\n\n $('body').on('keyup', function(e) {\n if($('.mm-menu__wrapper.js-menu-wrapper').hasClass('search-is-open') && e.which === ESC) {\n $('.js-search-close').trigger('click');\n }\n });\n \n\n};\n","module.exports = {\n updateDisabledOptions: function () {\n const isMobile = window.innerWidth <= 991;\n const selects = [...document.querySelectorAll('select')].filter(sel => {\n // sel.nextSibling && sel.nextSibling.matches('.fsb-select')\n return sel.nextSibling && sel.nextSibling.classList && sel.nextSibling.classList.contains('fsb-select');\n });\n\n const setDisabledElement = (selectElement) => {\n const options = selectElement.querySelectorAll(':scope > option');\n const customOptions = selectElement.nextSibling.querySelectorAll(':scope > .fsb-list > .fsb-option');\n const specialChars = /[|]/;\n for(let index = 0; index < options.length; index++) {\n options[index].value && customOptions[index] ? customOptions[index].setAttribute('value', options[index].value) : null;\n if((options[index].classList.contains('disabled') || options[index].getAttribute('disabled') !== null) && specialChars.test(options[index].innerHTML)) {\n let tmpCustomOption = customOptions[index].innerHTML.split('|')[0].replaceAll(' ', '');\n customOptions[index].innerHTML = tmpCustomOption;\n customOptions[index].classList.add('disabled-element');\n } else if(options[index].classList.contains('disabled') || options[index].getAttribute('disabled') !== null) {\n if(options[index].innerHTML.replaceAll(' ', '').replaceAll('\\n', '') === customOptions[index].textContent) {\n customOptions[index].classList.add('disabled-element');\n } else {\n customOptions[index].classList.remove('disabled-element');\n }\n } else {\n customOptions[index] ? customOptions[index].classList.remove('disabled-element') : null;\n }\n }\n }\n\n if(selects){\n selects.forEach(sel => {\n if(isMobile) {\n sel.classList.add('fsb-ignore', 'mobile-version');\n sel.style.display = 'flex';\n sel.nextSibling.classList.add('hidden-field');\n setDisabledElement(sel);\n } else {\n sel.classList.remove('fsb-ignore', 'mobile-version');\n sel.style.display = 'none';\n sel.nextSibling.classList.remove('hidden-field');\n setDisabledElement(sel);\n }\n });\n }\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 */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\nmodule.exports = isObject;\n","var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nmodule.exports = root;\n","var root = require('./_root');\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nmodule.exports = Symbol;\n","'use strict';\n\nconst formValidation = require('core/components/formValidation');\nconst clientSideValidation = require('core/components/clientSideValidation');\nconst addToCartValidation = require('core/product/addToCartValidation');\nconst $body = $('body');\nconst showOnModal = document.querySelector('body').classList.contains('Margiela') || document.querySelector('body').classList.contains('JilSander');\n\nmodule.exports = {\n init: function () {\n clientSideValidation.init();\n\n $body.on('click', '.js_product-notify-open', function () {\n $(this).parent().remove();\n $('.product-notify-body').show();\n });\n\n $body.on('submit', '.js_notify-when-available', function (e) {\n const $form = $(this);\n e.preventDefault();\n $.spinner().start();\n clientSideValidation.functions.clearFormErrors($form);\n $('.product-notify-content .success-message').removeClass('success');\n\n if(showOnModal && !$form.find('[type=\"checkbox\"][required=\"required\"]').prop('checked')) {\n $form.find('[type=\"checkbox\"][required=\"required\"]').addClass('-invalid');\n return;\n }\n \n var isNewPDP = false;\n \n if ($('.pdp-new').length > 0) {\n isNewPDP = true;\n }\n\n // Check if all variation attribute selected\n let $productContainer = $(this).closest('.product-detail');\n if (addToCartValidation($productContainer) || isNewPDP) {\n $.post({\n url: $form.attr('action'),\n dataType: 'json',\n data: $form.serialize(),\n success: function (data) {\n if (!data.success) {\n formValidation($form, data);\n } else {\n if (!isNewPDP) {\n $('.product-notify-content .success-message').addClass('success');\n } else {\n\n $('.product-notify-header .title').addClass('d-none');\n $('.product-notify-header .title-success').removeClass('d-none');\n $('.product-notify-content .product-coming-soon').addClass('d-none');\n $('.notify-message-success .user-email').text(data.email + ' ');\n $('.product-notify-content .product-notify-content-success').addClass('success');\n }\n \n //Tealium trigger \"Back In Stock\"\n $('body').trigger('product:afterBackInStock');\n if(showOnModal) {\n $('body').trigger('product:backInStockComplete');\n document.querySelector('#notify-me-modal .modal-close').click();\n\n // show notification\n const event = new CustomEvent('notification:show', {\n detail: { \n message: data.message,\n icon: true,\n link: false\n }\n });\n document.body.dispatchEvent(event);\n }\n }; \n },\n complete: function () {\n $.spinner().stop();\n },\n });\n } else {\n $.spinner().stop();\n }\n\n return false;\n });\n },\n updateForm: function () {\n $('body').on('product:updateAvailability', function (e, response) {\n var $container;\n \n var isNewPDP = false;\n \n if ($('.pdp-new').length > 0) {\n isNewPDP = true;\n }\n\n if (!isNewPDP) {\n $container = showOnModal ? $('.product-notify .modal-content') : $('.product-notify');\n } else if (isNewPDP && $('.notify-size.is-open').length > 0) {\n $container = $('.notify-size.is-open .product-notify-content .product-coming-soon.coming-soon');\n } else {\n $container = $('.product-notify');\n }\n if ($container.length > 0) {\n \n if (isNewPDP && $('.notify-size.is-open').length > 0) {\n $container.empty().append(response.product.notifyWhenAvailableHtml);\n $('.notify-size.is-open .product-notify-content .product-coming-soon').removeClass('d-none');\n $('.notify-size.is-open .product-notify-header .title').removeClass('d-none');\n $('.notify-size.is-open .product-notify-header .title-success').addClass('d-none');\n $('.notify-size.is-open .product-notify-content .product-notify-content-success').removeClass('success');\n } else if (isNewPDP && $('.notify-size.is-open').length == 0) {\n $container.empty().append(response.product.notifyWhenAvailablePopUpHtml);\n $('.product-notify .product-notify-content .product-coming-soon').removeClass('d-none');\n $('.product-notify .product-notify-header .title').removeClass('d-none');\n $('.product-notify .product-notify-header .title-success').addClass('d-none');\n $('.product-notify .product-notify-content .product-notify-content-success').removeClass('success');\n } else {\n $container.empty().append(response.product.notifyWhenAvailableHtml);\n }\n const $form = $container.find('form');\n if(!showOnModal) {\n if ($('.layer-product-notify.notify-size.is-open').length < 1) {\n if ($form.length > 0) {\n $('#add-to-cart-wishlist-wrapper').hide();\n clientSideValidation.functions.reAttachNoBubbleEvents();\n } else {\n $('#add-to-cart-wishlist-wrapper').show();\n }\n }\n }\n }\n });\n },\n};\n","'use strict';\n\nmodule.exports = function (element, message) {\n var errorHtml = '<div class=\"alert alert-danger alert-dismissible ' +\n 'fade show\" role=\"alert\">' +\n '<button type=\"button\" class=\"close\" data-dismiss=\"alert\" aria-label=\"Close\">' +\n '<span aria-hidden=\"true\">×</span>' +\n '</button>' + message + '</div>';\n\n $(element).append(errorHtml);\n};\n","var isObject = require('./isObject'),\n now = require('./now'),\n toNumber = require('./toNumber');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n nativeMin = Math.min;\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 */\nfunction 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\nmodule.exports = debounce;\n","var root = require('./_root');\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 */\nvar now = function() {\n return root.Date.now();\n};\n\nmodule.exports = now;\n","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nmodule.exports = freeGlobal;\n","var baseTrim = require('./_baseTrim'),\n isObject = require('./isObject'),\n isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\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 */\nfunction 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\nmodule.exports = toNumber;\n","var trimmedEndIndex = require('./_trimmedEndIndex');\n\n/** Used to match leading whitespace. */\nvar reTrimStart = /^\\s+/;\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 */\nfunction baseTrim(string) {\n return string\n ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')\n : string;\n}\n\nmodule.exports = baseTrim;\n","/** Used to match a single whitespace character. */\nvar reWhitespace = /\\s/;\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 */\nfunction trimmedEndIndex(string) {\n var index = string.length;\n\n while (index-- && reWhitespace.test(string.charAt(index))) {}\n return index;\n}\n\nmodule.exports = trimmedEndIndex;\n","var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\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 */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nmodule.exports = isSymbol;\n","var Symbol = require('./_Symbol'),\n getRawTag = require('./_getRawTag'),\n objectToString = require('./_objectToString');\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\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 */\nfunction 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\nmodule.exports = baseGetTag;\n","var Symbol = require('./_Symbol');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\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 */\nfunction 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\nmodule.exports = getRawTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\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 */\nvar nativeObjectToString = objectProto.toString;\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 */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nmodule.exports = objectToString;\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 */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nmodule.exports = isObjectLike;\n","'use strict';\n\nmodule.exports = function (selector, keyFunctions, preFunction) {\n $(selector).on('keydown', function (e) {\n var key = e.which;\n var supportedKeyCodes = [37, 38, 39, 40, 27];\n if (supportedKeyCodes.indexOf(key) >= 0) {\n e.preventDefault();\n }\n var returnedScope = preFunction.call(this);\n if (keyFunctions[key]) {\n keyFunctions[key].call(this, returnedScope);\n }\n });\n};\n"],"sourceRoot":""}