{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./storefront-reference-architecture-master/cartridges/app_storefront_base/cartridge/client/default/js/product/detail.js","webpack:///./storefront-reference-architecture-master/cartridges/app_storefront_base/cartridge/client/default/js/util.js","webpack:///./storefront-reference-architecture-master/cartridges/app_storefront_base/cartridge/client/default/js/product/base.js","webpack:///./storefront-reference-architecture-master/cartridges/app_storefront_base/cartridge/client/default/js/components/focus.js","webpack:///./app_silver_sfra/cartridges/app_silver_sfra/cartridge/client/default/js/cart.js","webpack:///./app_silver_sfra/cartridges/app_silver_sfra/cartridge/client/default/js/cart/quickView.js","webpack:///./app_silver_sfra/node_modules/@splidejs/splide/dist/js/splide.cjs.js","webpack:///./app_silver_sfra/node_modules/photoswipe/dist/photoswipe-ui-default.js","webpack:///./app_silver_sfra/node_modules/photoswipe/dist/photoswipe.js","webpack:///./app_silver_sfra/cartridges/app_silver_sfra/cartridge/client/default/js/product/details.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","base","methods","updateAddToCartEnableDisableOtherElements","enableOrDisable","$","attr","availability","addToCart","updateAttributesAndDetails","on","e","data","$productContainer","id","find","empty","html","attributesHtml","shortDescription","removeClass","addClass","longDescription","showSpinner","spinner","start","updateAttribute","response","length","eq","container","product","text","updateAddToCart","readyToOrder","available","enable","toArray","every","item","updateAvailability","message","allAvailable","allReady","resources","info_selectforstock","sizeChart","preventDefault","url","this","$prodSizeChart","closest","is","ajax","type","dataType","success","append","content","toggleClass","$sizeChart","has","target","copyProductLink","event","$temp","val","select","document","execCommand","remove","setTimeout","focusChooseBonusProductModal","include","keys","forEach","focusHelper","getPidValue","$el","hasClass","getQuantitySelector","quantitySelected","quantitySelectedModal","quantitySelectedPDP","undefined","getQuantitySelected","handleVariantResponse","isVaraint","isChoiceOfBonusProducts","parents","variationAttributes","attrs","msgs","attrsWithSwatches","indexOf","values","attrValue","$attrValue","$swatchButton","parent","selected","siblings","assistiveSelectedText","removeAttr","selectable","processSwatchValues","$attr","resetUrl","processNonSwatchValues","updateAttrs","productType","imgs","carousel","carouselId","alt","parseInt","index","title","appendTo","first","detach","createCarousel","images","large","replaceWith","price","promotionsHtml","availabilityValue","availabilityMessages","messages","trigger","attributes","attributeGroup","ID","attribute","label","getAttributesHtml","attributeSelect","selectedValueUrl","method","optionsHtml","updateOptions","quantities","map","quantity","join","updateQuantities","stop","error","parseHtml","$html","parseHTML","body","footer","children","chooseBonusProducts","bonusUrl","bonusChoiceRuleBased","showProductsUrlRuleBased","showProductsUrlListBased","htmlString","maxBonusItems","uuid","pliUUID","addToCartUrl","pageSize","labels","selectprods","parsedHtml","renderedTemplate","enterDialogMessage","closeButtonText","modal","getOptions","options","$elOption","urlValue","selectedValueId","optionId","JSON","stringify","miniCartReportingUrl","editBonusProducts","focus","onClosingChooseBonusProductModal","trapChooseBonusProductModalFocus","focusParams","containerSelector","firstElementSelector","lastElementSelector","setTabNextFocus","colorAttribute","selectAttribute","currentTarget","pid","pidsObj","setPids","each","push","qty","childProducts","form","messageType","newBonusDiscountLineItem","handlePostCartAdd","reportingURL","selectBonusProduct","$choiceOfBonusProduct","maxPids","submittedQty","totalQty","optionID","valueId","selectedBonusProductHtml","removeBonusProduct","$selected","count","enableBonusProductSelection","showMoreBonusProducts","addBonusProductsToCart","$readyToOrderBonusProducts","queryString","pidsObject","bonusProducts","qtyOption","option","productId","errorMessage","msgSuccess","location","reload","keyCode","firstFocusableEl","lastFocusableEl","nextToLastElementSelector","linkElements","shiftKey","processInclude","ready","sizeChartTemplate","selectVariantAttribute","_defineProperties","props","descriptor","configurable","writable","STATES","CREATED","MOUNTED","IDLE","MOVING","SCROLLING","DRAGGING","DESTROYED","array","slice","arrayLike","end","Array","apply","func","concat","arguments","nextTick","noop","raf","requestAnimationFrame","typeOf","subject","isObject","isNull","isArray","isFunction","isString","isUndefined","isHTMLElement","ownerDocument","defaultView","window","HTMLElement","iteratee","includes","items","elm","classes","add","classList","split","appendChild","before","nodes","ref","node","parentNode","insertBefore","matches","selector","children2","filter","child","firstElementChild","ownKeys","forOwn","right","reverse","assign","source","merge","omit","removeAttribute","elms","setAttribute","value2","String","tag","createElement","style","prop","getComputedStyle","display","display2","preventScroll","getAttribute","className","contains","rect","getBoundingClientRect","removeChild","DOMParser","parseFromString","prevent","stopPropagation","stopImmediatePropagation","query","querySelector","queryAll","querySelectorAll","timeOf","timeStamp","unit","assert","condition","Error","min","Math","max","floor","ceil","abs","approximatelyEqual","x","y","epsilon","between","number","exclusive","minimum","maximum","clamp","sign","camelToKebab","string","replace","toLowerCase","format","replacements","replacement","pad","ids","uniqueId","prefix","EventBinder","listeners","forEachEvent","targets","events","events2","eventNS","fragment","callback","namespace","isEventTarget","remover","removeEventListener","addEventListener","unbind","listener","dispatch","detail","CustomEvent","bubbles","createEvent","initCustomEvent","dispatchEvent","destroy","EventInterface","Splide2","bus","createDocumentFragment","binder","off","emit","RequestInterval","interval","onInterval","onUpdate","limit","startTime","now","Date","rate","paused","update","pause","cancel","cancelAnimationFrame","resume","rewind","set","time","isPaused","State","initialState","state","states","Throttle","duration","TTB","ORIENTATION_MAP","width","left","X","Y","ArrowLeft","ARROW","ArrowRight","Direction","Components2","resolve","axisOnly","direction","match","offset","charAt","toUpperCase","orient","ROLE","ALL_ATTRIBUTES","ARIA_PREFIX","CLASS_ROOT","CLASS_CLONE","CLASS_SLIDE","CLASS_ACTIVE","STATUS_CLASS_PREFIX","STATUS_CLASSES","CLASSES","slide","CLASS_PREFIX","clone","arrows","arrow","prev","CLASS_ARROW","next","pagination","page","CLASS_PAGINATION","POINTER_UP_EVENTS","SLIDE","LOOP","Slide$1","slideIndex","destroyed","Components","root","isNavigation","updateOnMove","i18n","slideFocus","styles","isClone","initNavigation","controls","splides","Slide2","splide","Slides","getAt","slideX","onMove","curr","active","isActive","self","visible","trackRect","Elements","track","slideRect","isVisible","hidden","focusableNodes","activeElement","updateVisibility","cloneStatus","mount","slideLabel","useContainer","isWithin","from","distance","diff","PATH","SCROLL_LISTENER_OPTIONS","passive","capture","NORMALIZATION_MAP","Spacebar","Right","Left","Up","Down","normalizeKey","TRIGGER_KEYS","ComponentConstructors","freeze","__proto__","Media","breakpoints","reducedMotion","queries","completely","register","options2","queryList","matchMedia","merged","reduce","merged2","entry","refresh","opts","notify","getPrototypeOf","setup","isMin","mediaQuery","sort","list","isUsingKey","_EventInterface","elements","slides","rootClasses","trackClasses","bar","CLASS_PROGRESS","toggle","role","tagName","init","getClasses","labelledby","nodeType","parentElement","drag","POINTER_DOWN_EVENTS","_EventInterface2","_Components2$Elements","Slides2","forEach$1","Slide1","excludeClones","matcher","getIn","Controller","toIndex","hasFocus","perPage","img","getLength","isEnough","Layout","vertical","rootRect","overflow","_EventInterface3","_Components2$Elements2","styleSlides","cssPadding","resize","force","newRect","height","cssHeight","cssTrackHeight","gap","autoWidth","fixedWidth","cssSlideSize","fixedHeight","autoHeight","isOverflow","padding","heightRatio","listSize","slideSize","withoutGap","Slide","getGap","totalSize","sliderSize","parseFloat","getPadding","Clones","cloneCount","clones","remount","observe","computeCloneCount","isHead","cloneNode","cloneDeep","generate","clones2","fixedSize","Move","Transition","_EventInterface4","_Components2$Layout","_Components2$Directio","_Components2$Elements3","reposition","isBusy","Scroll","jump","translate","toPosition","position","preventLoop","destination","exceededMax","getEnd","shift","loop","backwards","excess","getLimit","size","getPosition","minDistance","Infinity","trimming","trimSpace","trim","move","dest","shifted","exceededLimit","exceededMin","endIndex","slideCount","perMove","_EventInterface5","_Components2$Slides","omitEnd","isLoop","isSlide","getNext","getAdjacent","getPrev","currIndex","prevIndex","onResized","computeDestIndex","snapPage","computeMovableDestIndex","toPage","setIndex","waitForTransition","go","control","allowSameIndex","_ref","indicator","parse","scroll","snap","getIndex","toDest","Arrows","created","wrapperClasses","placeholder","wrapper","enabled","createArrow","CLASS_ARROWS","prev2","arrowPath","nextIndex","prevLabel","last","nextLabel","disabled","Autoplay","hovered","focused","_EventInterface6","_Components2$Elements4","autoplay","stopped","play","resetProgress","autoToggle","DATA_ATTRIBUTE","pauseOnHover","pauseOnFocus","listen","Cover","cover","cover2","src","_EventInterface8","friction","onScrolled","noConstrain","clear","noDistance","onEnd","to","easingFunc","pow","Drag","basePosition","baseEvent","prevBaseEvent","isFree","dragging","clickPrevented","_EventInterface9","_Components2$Directio2","exceeded","disable","onPointerDown","isTouch","isTouchEvent","target2","noDrag","button","onPointerMove","onPointerUp","save","cancelable","diffCoord","expired","diffTime","hasExceeded","isSliderDirection","thresholds","dragMinThreshold","isObj","mouse","touch","shouldStart","velocity","computeVelocity","flickPower","flickMaxPages","computeDestination","rewindByDrag","onClick","orthogonal","coordOf","getBaseEvent","changedTouches","TouchEvent","isDragging","Keyboard","_EventInterface10","keyboard","onKeydown","_disabled","LazyLoad","_EventInterface11","isSequential","lazyLoad","entries","srcset","SRC_DATA_ATTRIBUTE","loadNext","check","preloadPages","load","onLoad","Pagination","paginationClasses","dir","getDirection","nextPage","paginationDirection","_button","li","class","pageX","paginationKeyboard","createPagination","Sync","isParent","sync","navigate","Wheel","lastTime","onWheel","deltaY","_min","wheelMinThreshold","sleep","wheelSleep","releaseWheel","shouldPrevent","wheel","Live","live","sr","textContent","DEFAULTS","speed","easing","rewindSpeed","Fade","done","endCallback","transition","getSpeed","useScroll","Splide","_Splide","_o","_E","defaults","Constructor","protoProps","staticProps","_proto","Extensions","_this","_C","_T","Component","component","_this$event","RENDERER_DEFAULT_CONFIG","listTag","slideTag","Style","_proto2","rule","breakpoint","selectors","build","_this2","css","default","buildSelectors","_this3","SplideRenderer","contents","config","clean","_proto3","parseBreakpoints","initSlides","registerRootStyles","registerTrackStyles","registerSlideStyles","registerListStyles","_this4","buildStyles","generateClones","_this5","_ref2","_this6","Style2","_ref3","_this7","_ref4","buildTranslate","cssSlideHeight","cssAspectRatio","_this8","_ref5","cssSlideWidth","_this$Direction","cssOffsetClones","cssOffsetGaps","isCenter","buildCssValue","cssOffsetCenter","Boolean","_this$Direction2","getCloneCount","isFixedWidth","_this$parseCssValue","parseCssValue","unit2","_this$Direction3","_this$parseCssValue2","_this$parseCssValue3","_value","_unit","gapOffset","_this$parseCssValue4","gaps","isVertical","_this9","buildClasses","buildAttrs","renderSlides","_this10","_content$html","background","unshift","_ref6","renderArrows","renderArrow","_this$options","ariaLabel","_this$config","rootClass","beforeTrack","afterTrack","slider","beforeSlider","afterSlider","CLASS_ARROW_NEXT","CLASS_ARROW_PREV","CLASS_CONTAINER","CLASS_FOCUS_IN","CLASS_INITIALIZED","CLASS_LIST","CLASS_LOADING","CLASS_NEXT","CLASS_OVERFLOW","CLASS_PAGINATION_PAGE","CLASS_PREV","CLASS_PROGRESS_BAR","CLASS_SPINNER","CLASS_SR","CLASS_TOGGLE","CLASS_TOGGLE_PAUSE","CLASS_TOGGLE_PLAY","CLASS_TRACK","CLASS_VISIBLE","EVENT_ACTIVE","EVENT_ARROWS_MOUNTED","EVENT_ARROWS_UPDATED","EVENT_AUTOPLAY_PAUSE","EVENT_AUTOPLAY_PLAY","EVENT_AUTOPLAY_PLAYING","EVENT_CLICK","EVENT_DESTROY","EVENT_DRAG","EVENT_DRAGGED","EVENT_DRAGGING","EVENT_END_INDEX_CHANGED","EVENT_HIDDEN","EVENT_INACTIVE","EVENT_LAZYLOAD_LOADED","EVENT_MOUNTED","EVENT_MOVE","EVENT_MOVED","EVENT_NAVIGATION_MOUNTED","EVENT_OVERFLOW","EVENT_PAGINATION_MOUNTED","EVENT_PAGINATION_UPDATED","EVENT_READY","EVENT_REFRESH","EVENT_RESIZE","EVENT_RESIZED","EVENT_SCROLL","EVENT_SCROLLED","EVENT_SHIFTED","EVENT_SLIDE_KEYDOWN","EVENT_UPDATED","EVENT_VISIBLE","FADE","LTR","RTL","pswp","framework","_fullscrenAPI","_controls","_captionContainer","_fakeCaptionContainer","_indexIndicator","_shareButton","_shareModal","_initalCloseOnScrollValue","_isIdle","_listen","_loadingIndicator","_loadingIndicatorHidden","_loadingIndicatorTimeout","_galleryHasOneSlide","_options","_blockControlsTap","_idleInterval","_idleTimer","ui","_overlayUIUpdated","_controlsVisible","_shareModalHidden","_defaultUIOptions","barsSize","top","bottom","closeElClasses","timeToIdle","timeToIdleOutside","loadingIndicatorDelay","addCaptionHTMLFn","captionEl","innerHTML","closeEl","fullscreenEl","zoomEl","shareEl","counterEl","arrowEl","preloaderEl","tapToClose","tapToToggleControls","clickToCloseNonZoomable","shareButtons","download","getImageURLForShare","currItem","getPageURLForShare","href","getTextForShare","indexIndicatorSep","fitControlsWidth","_onControlsTap","mouseUsed","_onIdleMouseMove","uiElement","found","clickedClass","srcElement","_uiElements","onTap","tapDelay","features","isOldAndroid","_togglePswpClass","el","cName","_countNumItems","hasOneSlide","getNumItemsFn","_toggleShareModalClass","_toggleShareModal","_updateShareURLs","_openWindowPopup","shout","hasAttribute","open","screen","round","shareButtonData","image_url","page_url","share_text","shareButtonOut","encodeURIComponent","parseShareButtonOut","onclick","_hasCloseClass","_idleIncrement","clearTimeout","setIdle","_onMouseLeaveWindow","relatedTarget","toElement","nodeName","_toggleLoadingIndicator","hide","_applyNavBarGaps","vGap","likelyTouchDevice","bars","createEl","captionSize","clientHeight","onInit","toggleDesktopZoom","close","isFullscreen","exit","enter","pinchControlsHidden","extend","getChildByClass","scrollWrap","hideControls","showControls","point","initialZoomLevel","getZoomLevel","zoomTo","getDoubleTapZoom","isDown","preventObj","test","onGlobalTap","onMouseOver","clearInterval","eventK","updateFullscreen","hideAnimationDuration","showAnimationDuration","classAttr","loopThroughChildElements","sChildren","a","topBar","_setupUIElements","setInterval","getFullscreenAPI","template","loading","allowProgressiveImg","naturalWidth","isIdle","updateIndexIndicator","setScrollOffset","getScrollY","getCurrentIndex","pointerType","fitRatio","releasePoint","supportsFullscreen","exitFullscreen","mozCancelFullScreen","webkitExitFullscreen","msExitFullscreen","api","dE","documentElement","tF","requestFullscreen","enterK","exitK","elementK","mozRequestFullScreen","webkitRequestFullscreen","msRequestFullscreen","closeOnScroll","Element","ALLOW_KEYBOARD_INPUT","UiClass","methodName","obj","yOffset","pageYOffset","scrollTop","reg","RegExp","parentEl","childClassName","firstChild","nextSibling","arraySearch","o1","o2","preventOverwrite","sine","out","k","sin","PI","inOut","cos","cubic","detectFeatures","helperStyle","vendor","oldIE","all","caf","pointerEvent","navigator","msPointerEnabled","ua","userAgent","platform","v","isOldIOSPhone","androidversion","androidVersion","isMobileOpera","styleCheckItem","styleName","styleChecks","vendors","fn","currTime","getTime","timeToCall","svg","createElementNS","createSVGRect","evName","_handleEv","handleEvent","allowPanToNext","spacing","bgOpacity","pinchToClose","closeOnVerticalDrag","verticalDragRange","showHideOpacity","escKey","arrowKeys","mainScrollEndFriction","panEndFriction","isClickableElement","isMouseClick","maxSpreadZoom","scaleMode","_isOpen","_isDestroying","_closedByScroll","_currentItemIndex","_containerStyle","_containerShiftIndex","_upMoveEvents","_downEvents","_globalEventHandlers","_currZoomLevel","_startZoomLevel","_translatePrefix","_translateSufix","_updateSizeInterval","_itemsNeedUpdate","_itemHolders","_prevItemIndex","_dragStartEvent","_dragMoveEvent","_dragEndEvent","_dragCancelEvent","_transformKey","_pointerEventEnabled","_likelyTouchDevice","_requestAF","_cancelAF","_initalClassName","_initalWindowScrollY","_oldIE","_currentWindowScrollY","_features","_orientationChangeTimeout","_gestureStartTime","_gestureCheckSpeedTime","_releaseAnimData","_isZoomingIn","_verticalDragInitiated","_oldAndroidTouchEndTimeout","_isDragging","_isMultitouch","_zoomStarted","_moved","_dragAnimFrame","_mainScrollShifted","_currentPoints","_isZooming","_startPointsDistance","_currPanBounds","_currZoomElementStyle","_mainScrollAnimating","_direction","_isFirstMove","_opacityChanged","_bgOpacity","_wasOverInitialZoom","_tempCounter","_currPanDist","_startPanOffset","_panOffset","_viewportSize","_currPositionIndex","_offset","_slideSize","_indexDiff","_isFixedPosition","_modules","_windowVisibleSize","_renderMaxResolution","_registerModule","publicMethods","_getLoopedId","numSlides","_getNumItems","_listeners","_shout","args","_getCurrentTime","_applyBgOpacity","opacity","bg","_applyZoomTransform","styleObj","zoom","_applyCurrentZoomPan","allowRenderResolution","_setImageSize","_applyZoomPanToItem","initialPosition","_setTranslateX","elStyle","_moveMainScroll","newSlideIndexOffset","delta","_mainScrollPos","_calculatePanOffset","axis","zoomLevel","_midZoomPoint","_equalizePoints","p1","p2","_roundPoint","_mouseMoveTimeout","_onFirstMouseMove","_calculatePanBounds","bounds","_calculateItemSize","_getMinZoomLevel","_getMaxZoomLevel","w","_modifyDestPanOffset","destPanBounds","destPanOffset","destZoomLevel","_onKeyDown","keydownAction","ctrlKey","altKey","metaKey","returnValue","_onGlobalClick","_updatePageScrollOffset","_animations","_numAnimations","_stopAnimation","_registerStartAnimation","_stopAllAnimations","_animateProp","b","endProp","easingFn","onComplete","startAnimTime","animloop","viewportSize","isMainScrollAnimating","isZooming","applyZoomPan","panX","panY","transform","itemHolders","wrap","allow3dTransform","perspective","zoomRatio","h","_setupTransforms","updateSize","orientationchange","clientWidth","keydown","click","oldPhone","animationName","isNaN","_getItemAt","mainClass","setContent","updateCurrItem","_showOrHide","_showOrHideTimeout","_stopDragUpdateLoop","panTo","goTo","updateCurrZoomItem","emulateSetContent","zoomElement","center","invalidateCurrItems","needsUpdate","beforeAnimation","tempHolder","diffAbs","NUM_HOLDERS","pop","prevItem","windowScrollY","innerWidth","innerHeight","holder","hIndex","cleanSlide","centerPoint","updateFn","initialPanOffset","_currPoint","_startPoint","_currPointers","_startMainScrollPos","_posPoints","_tempPoint","_currZoomedItemIndex","_centerPoint","_lastReleaseTime","_currCenterPoint","_calculatePointsDistance","sqrt","_dragUpdateLoop","_renderMovement","_closestElement","_preventObj","_preventDefaultEventBehaviour","_convertTouchToPoint","pageY","identifier","_findCenterOfPoints","pCenter","_calculateVerticalDragOpacityRatio","_ePoint1","_ePoint2","_tempPointsArr","_getTouchPoints","touches","_panOrMoveMainScroll","panFriction","startOverDiff","newPanPos","newMainScrollPos","newOffset","newMainScrollPosition","mainScrollDiff","_onDragStart","_initialZoomRunning","pointerIndex","pointerId","startPointsList","numPoints","_onDragMove","touchesList","_isEqualPoints","pointsDistance","_calculateZoomLevel","zoomFriction","minZoomLevel","maxZoomLevel","percent","opacityRatio","_pushPosPoint","_onDragRelease","splice","4","2","3","gestureType","touchList","releaseTimeDiff","_initDragReleaseAnimationData","calculateSwipeSpeed","initalPanY","initialBgOpacity","_finishSwipeMainScrollGesture","_completePanGesture","_completeZoomGesture","lastFlickDuration","tempReleasePos","lastFlickOffset","lastFlickDist","lastFlickSpeed","slowDownRatio","slowDownRatioReverse","speedDecelerationRatio","speedDecelerationRatioAbs","distanceOffset","backAnimDestination","backAnimStarted","calculateOverBoundsAnimOffset","pos","calculateAnimOffset","timeDiff","panAnimLoop","zoomPan","lastNow","animData","itemChanged","itemsDiff","nextCircle","totalShiftDist","isFastLastFlick","finishAnimDuration","animateToX","animateToDist","touchesDistance","initialOpacity","initGestures","addEventNames","pref","down","up","maxTouchPoints","msMaxTouchPoints","mousedown","mousemove","mouseup","_items","_initialContentSet","completeFn","thumbBounds","initialLayout","getThumbBoundsFn","closeWithRaf","fadeEverything","loadError","miniImg","webkitBackfaceVisibility","initalBgOpacity","_tempPanAreaSize","_imagesToAppendPool","_controllerDefaultOptions","errorMsg","forceProgressiveLoading","preload","isInitial","hRatio","vRatio","realPanElementW","realPanElementH","_calculateSingleItemPanBounds","_appendImage","baseDiv","preventAnimation","keepPlaceholder","imageAppended","loaded","_preloadImage","loadComplete","onload","onerror","_checkForError","cleanUp","maxRes","lastChild","_appendImagesPool","poolItem","clearPlaceholder","lazyLoadItem","initController","getItemAt","isNext","preloadBefore","preloadAfter","preloader","placeholderClassName","msrc","tapTimer","_wheelDelta","tapReleasePoint","_dispatchTapEvent","origEvent","eDetail","initTap","onTapStart","onTapRelease","touch0","touch1","p0","initDesktopZoom","setupDesktopZoom","handleMouseWheel","mouseZoomedIn","hasDraggingClass","updateZoomable","removeDraggingClass","deltaMode","deltaX","wheelDeltaX","wheelDeltaY","wheelDelta","newPanX","newPanY","doubleTapZoomLevel","zoomOut","_historyUpdateTimeout","_hashChangeTimeout","_hashAnimCheckTimeout","_hashChangedByScript","_hashChangedByHistory","_hashReseted","_initialHash","_historyChanged","_closedFromURL","_urlChangedOnce","_windowLoc","_supportsPushState","_historyDefaultOptions","history","galleryUID","_getHash","hash","substring","_cleanHistoryTimeouts","_parseItemIndexFromURL","params","vars","pair","galleryPIDs","searchfor","_updateHash","newHash","newURL","initHistory","updateURL","onHashChange","returnToOriginal","back","pushState","pathname","search","detailUpdateAddToCartEnableDisableOtherElements","PhotoSwipeDefault","PhotoSwipe","mainGallery","initGallery","thumbs","initPhotoSwipeFromDOM","gallerySelector","onThumbnailsClick","eTarget","clickedListItem","clickedGallery","childNodes","numChildNodes","nodeIndex","openPhotoSwipe","galleryElement","disableAnimation","fromURL","gallery","pswpElement","figureEl","linkEl","thumbElements","numNodes","parseThumbnailElements","thumbnail","getElementsByTagName","pageYScroll","j","galleryElements","hashData","gid","photoswipeParseHash","isDesktop","getModalHtmlElement","modalId","addToCartBtn","addToBagUrl","addToBag","mediaContainer","carouselThumbnail","isQuickView","mobile","selectedQty","updateQuantity","trueFitButton","color","swatchable","updateTrueFit","localStorage","setItem","dataLayer","exportDetails","searchPID","newHeading","createTextNode","modalTitle","headingDescription","description","modalDescription","prepend","inseamGuideTemplate"],"mappings":"aACE,IAAIA,EAAmB,GAGvB,SAASC,EAAoBC,GAG5B,GAAGF,EAAiBE,GACnB,OAAOF,EAAiBE,GAAUC,QAGnC,IAAIC,EAASJ,EAAiBE,GAAY,CACzCG,EAAGH,EACHI,GAAG,EACHH,QAAS,IAUV,OANAI,EAAQL,GAAUM,KAAKJ,EAAOD,QAASC,EAAQA,EAAOD,QAASF,GAG/DG,EAAOE,GAAI,EAGJF,EAAOD,QAKfF,EAAoBQ,EAAIF,EAGxBN,EAAoBS,EAAIV,EAGxBC,EAAoBU,EAAI,SAASR,EAASS,EAAMC,GAC3CZ,EAAoBa,EAAEX,EAASS,IAClCG,OAAOC,eAAeb,EAASS,EAAM,CAAEK,YAAY,EAAMC,IAAKL,KAKhEZ,EAAoBkB,EAAI,SAAShB,GACX,oBAAXiB,QAA0BA,OAAOC,aAC1CN,OAAOC,eAAeb,EAASiB,OAAOC,YAAa,CAAEC,MAAO,WAE7DP,OAAOC,eAAeb,EAAS,aAAc,CAAEmB,OAAO,KAQvDrB,EAAoBsB,EAAI,SAASD,EAAOE,GAEvC,GADU,EAAPA,IAAUF,EAAQrB,EAAoBqB,IAC/B,EAAPE,EAAU,OAAOF,EACpB,GAAW,EAAPE,GAA8B,iBAAVF,GAAsBA,GAASA,EAAMG,WAAY,OAAOH,EAChF,IAAII,EAAKX,OAAOY,OAAO,MAGvB,GAFA1B,EAAoBkB,EAAEO,GACtBX,OAAOC,eAAeU,EAAI,UAAW,CAAET,YAAY,EAAMK,MAAOA,IACtD,EAAPE,GAA4B,iBAATF,EAAmB,IAAI,IAAIM,KAAON,EAAOrB,EAAoBU,EAAEe,EAAIE,EAAK,SAASA,GAAO,OAAON,EAAMM,IAAQC,KAAK,KAAMD,IAC9I,OAAOF,GAIRzB,EAAoB6B,EAAI,SAAS1B,GAChC,IAAIS,EAAST,GAAUA,EAAOqB,WAC7B,WAAwB,OAAOrB,EAAgB,SAC/C,WAA8B,OAAOA,GAEtC,OADAH,EAAoBU,EAAEE,EAAQ,IAAKA,GAC5BA,GAIRZ,EAAoBa,EAAI,SAASiB,EAAQC,GAAY,OAAOjB,OAAOkB,UAAUC,eAAe1B,KAAKuB,EAAQC,IAGzG/B,EAAoBkC,EAAI,GAIjBlC,EAAoBA,EAAoBmC,EAAI,I,kCCjFrD,IAAIC,EAAO,EAAQ,GAUnBjC,EAAOD,QAAU,CACbmC,QAAS,CACLC,0CANR,SAAmDC,GAC/CC,EAAE,6BAA6BC,KAAK,WAAYF,KAQhDG,aAAcN,EAAKM,aAEnBC,UAAWP,EAAKO,UAEhBC,2BAA4B,WACxBJ,EAAE,QAAQK,GAAG,wBAAwB,SAAUC,EAAGC,GAC9C,IAAIC,EAAoBR,EAAE,6BAA+BO,EAAKE,GAAK,MAEnED,EAAkBE,KAAK,+CAClBC,QACAC,KAAKL,EAAKM,gBAEXN,EAAKO,kBACLN,EAAkBE,KAAK,wCAClBK,YAAY,kBACjBP,EAAkBE,KAAK,iDAClBC,QACAC,KAAKL,EAAKO,mBAEfN,EAAkBE,KAAK,wCAClBM,SAAS,kBAGdT,EAAKU,iBACLT,EAAkBE,KAAK,oCAClBK,YAAY,kBACjBP,EAAkBE,KAAK,6CAClBC,QACAC,KAAKL,EAAKU,kBAEfT,EAAkBE,KAAK,oCAClBM,SAAS,sBAK1BE,YAAa,WACTlB,EAAE,QAAQK,GAAG,yDAAyD,WAClEL,EAAEmB,UAAUC,YAGpBC,gBAAiB,WACbrB,EAAE,QAAQK,GAAG,gCAAgC,SAAUC,EAAGgB,GAClDtB,EAAE,iCAAiCuB,QAG5BvB,EAAE,uBAAuBwB,GAAG,IAFnCF,EAASG,UAAUlB,KAAK,MAAOe,EAASf,KAAKmB,QAAQjB,IACrDa,EAASG,UAAUf,KAAK,eAAeiB,KAAKL,EAASf,KAAKmB,QAAQjB,MAKlET,EAAE,eAAe2B,KAAKL,EAASf,KAAKmB,QAAQjB,IAC5CT,EAAE,uCAAuCO,KAAK,MAAOe,EAASf,KAAKmB,QAAQjB,SAIvFmB,gBAAiB,WACb5B,EAAE,QAAQK,GAAG,2BAA2B,SAAUC,EAAGgB,GAEjDtB,EAAE,qBAAsBsB,EAASd,mBAAmBP,KAAK,YACnDqB,EAASI,QAAQG,eAAiBP,EAASI,QAAQI,WAEzD,IAAIC,EAAS/B,EAAE,yBAAyBgC,UAAUC,OAAM,SAAUC,GAC9D,OAAOlC,EAAEkC,GAAM3B,KAAK,cAAgBP,EAAEkC,GAAM3B,KAAK,qBAErD5C,EAAOD,QAAQmC,QAAQC,2CAA2CiC,OAG1EI,mBAAoB,WAChBnC,EAAE,QAAQK,GAAG,8BAA8B,SAAUC,EAAGgB,GAQpD,GAPAtB,EAAE,mBAAoBsB,EAASd,mBAC1BD,KAAK,iBAAkBe,EAASI,QAAQG,cACxCtB,KAAK,YAAae,EAASI,QAAQI,WAExC9B,EAAE,oBAAqBsB,EAASd,mBAC3BG,QAAQC,KAAKU,EAASc,SAEvBpC,EAAE,wBAAwBuB,OAAQ,CAClC,IAAIc,EAAerC,EAAE,yBAAyBgC,UACzCC,OAAM,SAAUC,GAAQ,OAAOlC,EAAEkC,GAAM3B,KAAK,gBAE7C+B,EAAWtC,EAAE,yBAAyBgC,UACrCC,OAAM,SAAUC,GAAQ,OAAOlC,EAAEkC,GAAM3B,KAAK,qBAEjDP,EAAE,wBACGO,KAAK,iBAAkB+B,GACvB/B,KAAK,YAAa8B,GAEvBrC,EAAE,0CAA0CW,QACvCC,KAAK0B,EAAWhB,EAASc,QAAUd,EAASiB,UAAUC,0BAIvEC,UAAW,WACPzC,EAAE,iBAAiBK,GAAG,SAAS,SAAUC,GACrCA,EAAEoC,iBACF,IAAIC,EAAM3C,EAAE4C,MAAM3C,KAAK,QACnB4C,EAAiB7C,EAAE4C,MAAME,QAAQ,eAAepC,KAAK,2BACrDmC,EAAeE,GAAG,WAClB/C,EAAEgD,KAAK,CACHL,IAAKA,EACLM,KAAM,MACNC,SAAU,OACVC,QAAS,SAAU5C,GACfsC,EAAeO,OAAO7C,EAAK8C,YAIvCR,EAAeS,YAAY,aAG/B,IAAIC,EAAavD,EAAE,2BACnBA,EAAE,QAAQK,GAAG,oBAAoB,SAAUC,GACnCN,EAAE,eAAewD,IAAIlD,EAAEmD,QAAQlC,QAAU,GACzCgC,EAAWxC,YAAY,cAInC2C,gBAAiB,WACb1D,EAAE,QAAQK,GAAG,QAAS,YAAY,WAC9BsD,MAAMjB,iBACN,IAAIkB,EAAQ5D,EAAE,WACdA,EAAE,QAAQoD,OAAOQ,GACjBA,EAAMC,IAAI7D,EAAE,aAAa6D,OAAOC,SAChCC,SAASC,YAAY,QACrBJ,EAAMK,SACNjE,EAAE,sBAAsBC,KAAK,OAAQ,SACrCD,EAAE,sBAAsBe,YAAY,UACpCmD,YAAW,WACPlE,EAAE,sBAAsBgB,SAAS,YAClC,SAIXmD,6BAA8BvE,EAAKuE,iC,+BCnJvCxG,EAAOD,QAAU,SAAU0G,GACA,mBAAZA,EACPA,IAC0B,iBAAZA,GACd9F,OAAO+F,KAAKD,GAASE,SAAQ,SAAUnF,GACP,mBAAjBiF,EAAQjF,IACfiF,EAAQjF,U,+BCPxB,IAAIoF,EAAc,EAAQ,GAO1B,SAASC,EAAYC,GAWjB,OARIzE,EAAE,mBAAmB0E,SAAS,UAAY1E,EAAE,gBAAgBuB,OACtDvB,EAAEyE,GAAK3B,QAAQ,kBAAkBpC,KAAK,sBAAsBH,KAAK,OAChEP,EAAE,uBAAuBuB,QAAUvB,EAAE,gBAAgBuB,OACtDvB,EAAEyE,GAAK3B,QAAQ,mBAAmBpC,KAAK,eAAeiB,OAEtD3B,EAAE,uCAAuCO,KAAK,OAW5D,SAASoE,EAAoBF,GACzB,IAAIG,EACJ,GAAIH,GAAOzE,EAAE,cAAcuB,OACvBqD,EAAmB5E,EAAEyE,GAAK3B,QAAQ,mBAAmBpC,KAAK,yBACvD,GAAI+D,GAAOzE,EAAE,mBAAmBuB,OAAQ,CAC3C,IAAIsD,EAAwB7E,EAAEyE,GAAK3B,QAAQ,iBAAiBpC,KAAK,oBAC7DoE,EAAsB9E,EAAEyE,GAAK3B,QAAQ,kBAAkBpC,KAAK,oBAE5DkE,OADgCG,IAAhCF,EAAsBhB,MACHiB,EAEAD,OAGvBD,EAAmB5E,EAAE,oBAEzB,OAAO4E,EAQX,SAASI,EAAoBP,GACzB,OAAOE,EAAoBF,GAAKZ,MAiNpC,SAASoB,EAAsB3D,EAAUd,GACrC,IAEI0E,EAFAC,EACA3E,EAAkB4E,QAAQ,gCAAgC7D,OAAS,GAEnED,EAASI,QAAQ2D,uBAlIzB,SAAqBC,EAAO9E,EAAmB+E,GAE3C,IAAIC,EAAoB,CAAC,SAEzBF,EAAMhB,SAAQ,SAAUrE,GAChBuF,EAAkBC,QAAQxF,EAAKQ,KAAO,EAvElD,SAA6BR,EAAMO,EAAmB+E,GAClDtF,EAAKyF,OAAOpB,SAAQ,SAAUqB,GAC1B,IAAIC,EAAapF,EAAkBE,KAAK,eAAiBT,EAAKQ,GAAK,wBAC/DkF,EAAU9G,MAAQ,MAClBgH,EAAgBD,EAAWE,SAE3BH,EAAUI,UACVH,EAAW5E,SAAS,YACpB4E,EAAWI,SAAS,4BAA4BrE,KAAK4D,EAAKU,yBAE1DL,EAAW7E,YAAY,YACvB6E,EAAWI,SAAS,4BAA4BrF,SAGhDgF,EAAUhD,IACVkD,EAAc5F,KAAK,WAAY0F,EAAUhD,KAEzCkD,EAAcK,WAAW,YAI7BN,EAAW7E,YAAY,2BAEvB6E,EAAW5E,SAAS2E,EAAUQ,WAAa,aAAe,mBAiDtDC,CAAoBnG,EAAMO,EAAmB+E,GAhCzD,SAAgCtF,EAAMO,GAClC,IAAI6F,EAAQ,eAAiBpG,EAAKQ,GAAK,KAClBD,EAAkBE,KAAK2F,EAAQ,YAAcpG,EAAKQ,GAAK,iBAC7DR,KAAK,QAASA,EAAKqG,UAElCrG,EAAKyF,OAAOpB,SAAQ,SAAUqB,GAC1B,IAAIC,EAAapF,EACZE,KAAK2F,EAAQ,sBAAwBV,EAAU9G,MAAQ,MAC5D+G,EAAW3F,KAAK,QAAS0F,EAAUhD,KAC9BuD,WAAW,YAEXP,EAAUQ,YACXP,EAAW3F,KAAK,YAAY,MAsB5BsG,CAAuBtG,EAAMO,MA2HjCgG,CAAYlF,EAASI,QAAQ2D,oBAAqB7E,EAAmBc,EAASiB,WAC9E2C,EAA6C,YAAjC5D,EAASI,QAAQ+E,YACzBtB,GAA2BD,IAC3B1E,EAAkBsF,OAAO,uBACpBvF,KAAK,MAAOe,EAASI,QAAQjB,IAElCD,EAAkBsF,OAAO,uBACpBvF,KAAK,iBAAkBe,EAASI,QAAQG,gBA1CzD,SAAwB6E,EAAMlG,GAC1B,IAAImG,EAAWnG,EAAkBE,KAAK,aACtCV,EAAE2G,GAAUA,SAAS,WACrB,IAAIC,EAAa5G,EAAE2G,GAAU1G,KAAK,MAClCD,EAAE2G,GAAUhG,QAAQyC,OAAO,iIAAmIwD,EAAa,gHAAkH5G,EAAE2G,GAAUpG,KAAK,QAAU,sDAAwDqG,EAAa,gHAAkH5G,EAAE2G,GAAUpG,KAAK,QAAU,eAC1gB,IAAK,IAAI3C,EAAI,EAAGA,EAAI8I,EAAKnF,OAAQ3D,IAC7BoC,EAAE,wCAA0C0G,EAAK9I,GAAG+E,IAAM,oCAAsC+D,EAAK9I,GAAGiJ,IAAM,iBAAmBC,SAASJ,EAAK9I,GAAGmJ,MAAO,IAAM,YAAcL,EAAK9I,GAAGoJ,MAAQ,+BAA+BC,SAASjH,EAAE2G,GAAUjG,KAAK,oBACtPV,EAAE,qBAAuB4G,EAAa,oBAAsBhJ,EAAI,oBAAoBqJ,SAASjH,EAAE2G,GAAUjG,KAAK,yBAElHV,EAAEA,EAAE2G,GAAUjG,KAAK,mBAAmBwG,QAAQlG,SAAS,UACvDhB,EAAEA,EAAE2G,GAAUjG,KAAK,8BAA8BwG,QAAQlG,SAAS,UAC9C,IAAhB0F,EAAKnF,QACLvB,EAAEA,EAAE2G,GAAUjG,KAAK,wDAAwDyG,SAE/EnH,EAAE2G,GAAUA,WACZ3G,EAAEA,EAAE2G,GAAUjG,KAAK,yBAAyBT,KAAK,eAAe,GAiChEmH,CADuB9F,EAASI,QAAQ2F,OAAOC,MACd9G,GAG5B2E,KACoBnF,EAAE,iBAAkBQ,GAAmBe,OACtDvB,EAAE,iBAAkBQ,GACpBR,EAAE,mBACOuH,YAAYjG,EAASI,QAAQ8F,MAAM5G,OAItDJ,EAAkBE,KAAK,eAAeC,QAAQC,KAAKU,EAASI,QAAQ+F,gBAvIxE,SAA4BnG,EAAUd,GAClC,IAAIkH,EAAoB,GACpBC,EAAuBrG,EAASI,QAAQxB,aAAa0H,SACpDtG,EAASI,QAAQG,aAGlB8F,EAAqBrD,SAAQ,SAAUlC,GACnCsF,GAAqB,YAActF,EAAU,iBAHjDsF,EAAoB,YAAcpG,EAASiB,UAAUC,oBAAsB,cAO/ExC,EAAEQ,GAAmBqH,QAAQ,6BAA8B,CACvDnG,QAASJ,EAASI,QAClBlB,kBAAmBA,EACnB4B,QAASsF,EACTnF,UAAWjB,EAASiB,YA0HxBJ,CAAmBb,EAAUd,GAEzB2E,GACoB3E,EAAkBE,KAAK,yBAC7BmH,QAAQ,kCAAmC,CACrDnG,QAASJ,EAASI,QAASlB,kBAAmBA,IAIlDR,EAAE,oFAAoF6H,QAAQ,0BAA2B,CACrHnG,QAASJ,EAASI,QAASlB,kBAAmBA,IAC/CqH,QAAQ,uBAAwBvG,EAASI,SAIhDlB,EAAkBE,KAAK,oBAAoBC,QACtCC,KAhIT,SAA2BkH,GACvB,IAAKA,EACD,MAAO,GAGX,IAAIlH,EAAO,GAWX,OATAkH,EAAWxD,SAAQ,SAAUyD,GACC,mBAAtBA,EAAeC,IACfD,EAAeD,WAAWxD,SAAQ,SAAU2D,GACxCrH,GAAQ,iCAAmCqH,EAAUC,MAAQ,KACvDD,EAAUpJ,MAAQ,eAK7B+B,EAgHGuH,CAAkB7G,EAASI,QAAQoG,aAkCjD,SAASM,EAAgBC,EAAkB7H,GACnC6H,IACArI,EAAE,QAAQ6H,QAAQ,gCACd,CAAElF,IAAK0F,EAAkB5G,UAAWjB,IAExCR,EAAEgD,KAAK,CACHL,IAAK0F,EACLC,OAAQ,MACRnF,QAAS,SAAU5C,GACf0E,EAAsB1E,EAAMC,GAlI5C,SAAuB+H,EAAa/H,GAEhCA,EAAkBE,KAAK,oBAAoBC,QAAQC,KAAK2H,GAiI5CC,CAAcjI,EAAKmB,QAAQ6G,YAAa/H,GA3BxD,SAA0BiI,EAAYjI,GAClC,GAAIA,EAAkBsF,OAAO,uBAAuBvE,QAAU,EAAG,CAC7D,IAAIgH,EAAcE,EAAWC,KAAI,SAAUC,GACvC,IAAI5C,EAAW4C,EAAS5C,SAAW,aAAe,GAClD,MAAO,kBAAoB4C,EAAS9J,MAAQ,gBAAkB8J,EAAShG,IAAM,IACzEoD,EAAW,IAAM4C,EAAS9J,MAAQ,eACvC+J,KAAK,IACRjE,EAAoBnE,GAAmBG,QAAQC,KAAK2H,IAqB5CM,CAAiBtI,EAAKmB,QAAQ+G,WAAYjI,GAC1CR,EAAE,QAAQ6H,QAAQ,+BACd,CAAEtH,KAAMA,EAAMkB,UAAWjB,IAC7BR,EAAEmB,UAAU2H,QAEhBC,MAAO,WACH/I,EAAEmB,UAAU2H,WAqB5B,SAASE,EAAUpI,GACf,IAAIqI,EAAQjJ,EAAE,SAASoD,OAAOpD,EAAEkJ,UAAUtI,IAK1C,MAAO,CAAEuI,KAHEF,EAAMvI,KAAK,4BAGD0I,OAFRH,EAAMvI,KAAK,iBAAiB2I,YAU7C,SAASC,EAAoB/I,GAMzB,IAAIgJ,EALJvJ,EAAE,eAAemB,UAAUC,QAEkB,IAAzCpB,EAAE,4BAA4BuB,QAC9BvB,EAAE,4BAA4BiE,SAI9BsF,EADAhJ,EAAKiJ,qBACMjJ,EAAKkJ,yBAELlJ,EAAKmJ,yBAGpB,IAAIC,EAAa,0NAIUpJ,EAAKqJ,cAJf,eAKKrJ,EAAKsJ,KALV,kBAMQtJ,EAAKuJ,QANb,uBAOavJ,EAAKwJ,aAPlB,qCASSxJ,EAAKyJ,SATd,kBAUQzJ,EAAKkJ,yBAVb,+BAWqBlJ,EAAKiJ,qBAX1B,wGAeajJ,EAAK0J,OAAOC,YAfzB,0QA0BjBlK,EAAE,QAAQoD,OAAOuG,GACjB3J,EAAE,eAAemB,UAAUC,QAE3BpB,EAAEgD,KAAK,CACHL,IAAK4G,EACLjB,OAAQ,MACRpF,SAAU,OACVC,QAAS,SAAU7B,GACf,IAAI6I,EAAanB,EAAU1H,EAAS8I,kBACpCpK,EAAE,wCAAwCW,QAC1CX,EAAE,2CAA2C2B,KAAKL,EAAS+I,oBAC3DrK,EAAE,0DAA0D2B,KAAKL,EAASgJ,iBAC1EtK,EAAE,wCAAwCY,KAAKuJ,EAAWhB,MAC1DnJ,EAAE,0CAA0CY,KAAKuJ,EAAWf,QAC5DpJ,EAAE,4BAA4BuK,MAAM,QACpCvK,EAAEmB,UAAU2H,QAEhBC,MAAO,WACH/I,EAAEmB,UAAU2H,UA2DxB,SAAS0B,EAAWhK,GAChB,IAAIiK,EAAUjK,EACTE,KAAK,mBACLgI,KAAI,WACD,IAAIgC,EAAY1K,EAAE4C,MAAMlC,KAAK,mBACzBiK,EAAWD,EAAU7G,MACrB+G,EAAkBF,EAAUhK,KAAK,iBAAmBiK,EAAW,MAC9DpK,KAAK,YACV,MAAO,CACHsK,SAAU7K,EAAE4C,MAAMrC,KAAK,aACvBqK,gBAAiBA,MAEtB5I,UAEP,OAAO8I,KAAKC,UAAUN,GAQ1B,SAASO,EAAqBrI,GACtBA,GACA3C,EAAEgD,KAAK,CACHL,IAAKA,EACL2F,OAAQ,MACRnF,QAAS,aAGT4F,MAAO,eAOnBpL,EAAOD,QAAU,CACb0K,gBAAiBA,EACjBvI,QAAS,CACLoL,kBAAmB,SAAU1K,GACzB+I,EAAoB/I,KAI5B4D,6BAA8B,WAC1BnE,EAAE,QAAQK,GAAG,iBAAkB,4BAA4B,WACvDL,EAAE,4BAA4BgG,WAAW/F,KAAK,cAAe,QAC7DD,EAAE,mCAAmCkL,YAI7CC,iCAAkC,WAC9BnL,EAAE,QAAQK,GAAG,kBAAmB,4BAA4B,WACxDL,EAAE,4BAA4BgG,WAAW/F,KAAK,cAAe,aAIrEmL,iCAAkC,WAC9BpL,EAAE,QAAQK,GAAG,UAAW,4BAA4B,SAAUC,GAC1D,IAAI+K,EAAc,CACd1H,MAAOrD,EACPgL,kBAAmB,2BACnBC,qBAAsB,SACtBC,oBAAqB,uBAEzBjH,EAAYkH,gBAAgBJ,OAIpCK,eAAgB,WACZ1L,EAAE+D,UAAU1D,GAAG,QAAS,8BAA8B,SAAUC,GAG5D,GAFAA,EAAEoC,kBAEE1C,EAAE4C,MAAM3C,KAAK,YAAjB,CAGA,IAAIO,EAAoBR,EAAE4C,MAAME,QAAQ,aACnCtC,EAAkBe,SACnBf,EAAoBR,EAAE4C,MAAME,QAAQ,oBAGxCsF,EAAgBpI,EAAE4C,MAAM3C,KAAK,YAAaO,QAIlDmL,gBAAiB,WACb3L,EAAE+D,UAAU1D,GAAG,SAAU,6CAA6C,SAAUC,GAC5EA,EAAEoC,iBAEF,IAAIlC,EAAoBR,EAAE4C,MAAME,QAAQ,aACnCtC,EAAkBe,SACnBf,EAAoBR,EAAE4C,MAAME,QAAQ,oBAExCsF,EAAgB9H,EAAEsL,cAAc/M,MAAO2B,OAI/CN,aAAc,WACVF,EAAE+D,UAAU1D,GAAG,SAAU,oBAAoB,SAAUC,GACnDA,EAAEoC,iBAEF,IAAIlC,EAAoBR,EAAE4C,MAAME,QAAQ,mBACnCtC,EAAkBe,SACnBf,EAAoBR,EAAE4C,MAAME,QAAQ,kBAAkBpC,KAAK,uBAGV,IAAjDV,EAAE,gBAAiBQ,GAAmBe,QACtC6G,EAAgBpI,EAAEM,EAAEsL,eAAelL,KAAK,mBAAmBH,KAAK,OAC5DC,OAKhBL,UAAW,WACPH,EAAE+D,UAAU1D,GAAG,QAAS,iDAAiD,WACrE,IAAI0J,EACA8B,EACAC,EACAC,EAEJ/L,EAAE,QAAQ6H,QAAQ,0BAA2BjF,MAEzC5C,EAAE,cAAcuB,QAAUvB,EAAE4C,MAAM8B,SAAS,wBAC3CqH,EAAU,GAEV/L,EAAE,mBAAmBgM,MAAK,WACjBhM,EAAE4C,MAAM8B,SAAS,uBAClBqH,EAAQE,KAAK,CACTJ,IAAK7L,EAAE4C,MAAMlC,KAAK,eAAeiB,OACjCuK,IAAKlM,EAAE4C,MAAMlC,KAAK,oBAAoBmD,MACtC4G,QAASD,EAAWxK,EAAE4C,YAIlCkJ,EAAUhB,KAAKC,UAAUgB,IAG7BF,EAAMrH,EAAYxE,EAAE4C,OAEpB,IAAIpC,EAAoBR,EAAE4C,MAAME,QAAQ,mBACnCtC,EAAkBe,SACnBf,EAAoBR,EAAE4C,MAAME,QAAQ,sBAAsBpC,KAAK,oBAGnEqJ,EA5RD/J,EAAE,oBAAoB6D,MA8RrB,IApKJsI,EAoKQC,EAAO,CACPP,IAAKA,EACLC,QAASA,EACTK,eAvKRA,EAAgB,GACpBnM,EAAE,gBAAgBgM,MAAK,WACnBG,EAAcF,KAAK,CACfJ,IAAK7L,EAAE4C,MAAMlC,KAAK,eAAeiB,OACjCgH,SAAU7B,SAAS9G,EAAE4C,MAAMlC,KAAK,kBAAkBH,KAAK,YAAa,SAIrE4L,EAAc5K,OAASuJ,KAAKC,UAAUoB,GAAiB,IAgKlDxD,SAAU3D,EAAoBhF,EAAE4C,QAG/B5C,EAAE,gBAAgBuB,SACnB6K,EAAK3B,QAAUD,EAAWhK,IAG9BR,EAAE4C,MAAMiF,QAAQ,0BAA2BuE,GACvCrC,GACA/J,EAAEgD,KAAK,CACHL,IAAKoH,EACLzB,OAAQ,OACR/H,KAAM6L,EACNjJ,QAAS,SAAU5C,IAtNvC,SAA2Be,GACvBtB,EAAE,aAAa6H,QAAQ,eAAgBvG,GACvC,IAAI+K,EAAc/K,EAASyH,MAAQ,eAAiB,gBAEhDzH,EAASgL,0BACoD,IAA1DhO,OAAO+F,KAAK/C,EAASgL,0BAA0B/K,OAClD+H,EAAoBhI,EAASgL,2BAEa,IAAtCtM,EAAE,yBAAyBuB,QAC3BvB,EAAE,QAAQoD,OACN,4CAIRpD,EAAE,yBAAyBoD,OACvB,qBAAuBiJ,EAAc,kDACnC/K,EAASc,QACT,UAGN8B,YAAW,WACPlE,EAAE,wBAAwBiE,WAC3B,MAiMasI,CAAkBhM,GAClBP,EAAE,QAAQ6H,QAAQ,yBAA0BtH,GAC5CP,EAAEmB,UAAU2H,OACZkC,EAAqBzK,EAAKiM,eAE9BzD,MAAO,WACH/I,EAAEmB,UAAU2H,cAMhC2D,mBAAoB,WAChBzM,EAAE+D,UAAU1D,GAAG,QAAS,yBAAyB,WAC7C,IAAIqM,EAAwB1M,EAAE4C,MAAMwC,QAAQ,4BACxCyG,EAAM7L,EAAE4C,MAAMrC,KAAK,OACnBoM,EAAU3M,EAAE,gCAAgCO,KAAK,aACjDqM,EAAe9F,SAAS4F,EAAsBhM,KAAK,0BAA0BmD,MAAO,IACpFgJ,EAAW,EACf7M,EAAEgM,KAAKhM,EAAE,oEAAoE,WACzE6M,GAAY7M,EAAE4C,MAAMrC,KAAK,UAE7BsM,GAAYD,EACZ,IAAIE,EAAWJ,EAAsBhM,KAAK,mBAAmBH,KAAK,aAC9DwM,EAAUL,EAAsBhM,KAAK,mCAAmCH,KAAK,WACjF,GAAIsM,GAAYF,EAAS,CACrB,IAAIK,EAA2B,2CAEdnB,EAFc,cAGde,EAHc,oBAIRE,GAAY,IAJJ,iCAKKC,GAAW,IALhB,sDAQ7BL,EAAsBhM,KAAK,iBAAiBE,OARf,sFAa/BZ,EAAE,qDAAqDoD,OAAO4J,GAC9DhN,EAAE,sBAAsBY,KAAKiM,GAC7B7M,EAAE,2CAA2Ce,YAAY,qBAEzDf,EAAE,2CAA2CgB,SAAS,oBAIlEiM,mBAAoB,WAChBjN,EAAE+D,UAAU1D,GAAG,QAAS,iBAAiB,WACrCL,EAAE4C,MAAMqB,SACR,IAAIiJ,EAAYlN,EAAE,mEACdmN,EAAQ,EACRD,EAAU3L,QACV2L,EAAUlB,MAAK,WACXmB,GAASrG,SAAS9G,EAAE4C,MAAMrC,KAAK,OAAQ,OAI/CP,EAAE,sBAAsBY,KAAKuM,GAC7BnN,EAAE,2CAA2Ce,YAAY,oBAGjEqM,4BAA6B,WACzBpN,EAAE,QAAQK,GAAG,mCAAmC,SAAUC,EAAGgB,GACzDtB,EAAE,8BAA+BsB,EAASd,mBAAmBP,KAAK,YAC5DqB,EAASI,QAAQG,eAAiBP,EAASI,QAAQI,WACzD,IAAI+J,EAAMvK,EAASI,QAAQjB,GAC3BT,EAAE,8BAA+BsB,EAASd,mBAAmBD,KAAK,MAAOsL,OAGjFwB,sBAAuB,WACnBrN,EAAE+D,UAAU1D,GAAG,QAAS,6BAA6B,WACjD,IAAIsC,EAAM3C,EAAE4C,MAAMrC,KAAK,OACvBP,EAAE,kBAAkBmB,UAAUC,QAC9BpB,EAAEgD,KAAK,CACHL,IAAKA,EACL2F,OAAQ,MACRnF,QAAS,SAAUvC,GACf,IAAIuJ,EAAanB,EAAUpI,GAC3BZ,EAAE,eAAeoD,OAAO+G,EAAWhB,MACnCnJ,EAAE,mCAAmCiE,SACrCjE,EAAE,kBAAkBmB,UAAU2H,QAElCC,MAAO,WACH/I,EAAE,kBAAkBmB,UAAU2H,cAK9CwE,uBAAwB,WACpBtN,EAAE+D,UAAU1D,GAAG,QAAS,uBAAuB,WAC3C,IAAIkN,EAA6BvN,EAAE,8CAC/BwN,EAAc,SACd7K,EAAM3C,EAAE,gCAAgCO,KAAK,gBAC7CkN,EAAa,CACbC,cAAe,IAGnB1N,EAAEgM,KAAKuB,GAA4B,WAC/B,IAAII,EACA7G,SAAS9G,EAAE4C,MACNrC,KAAK,OAAQ,IAElBqN,EAAS,KACTD,EAAY,IACR3N,EAAE4C,MAAMrC,KAAK,aAAeP,EAAE4C,MAAMrC,KAAK,4BACzCqN,EAAS,IACF/C,SAAW7K,EAAE4C,MAAMrC,KAAK,YAC/BqN,EAAOC,UAAY7N,EAAE4C,MAAMrC,KAAK,OAChCqN,EAAOhD,gBAAkB5K,EAAE4C,MAAMrC,KAAK,0BAE1CkN,EAAWC,cAAczB,KAAK,CAC1BJ,IAAK7L,EAAE4C,MAAMrC,KAAK,OAClB2L,IAAKyB,EACLlD,QAAS,CAACmD,KAEdH,EAAWZ,SAAW/F,SAAS9G,EAAE,sBAAsBY,OAAQ,QAKvE4M,GADAA,GADAA,GAAe1C,KAAKC,UAAU0C,IACF,SAAWzN,EAAE,gCAAgCO,KAAK,SAClD,YAAcP,EAAE,gCAAgCO,KAAK,WACjFP,EAAEmB,UAAUC,QACZpB,EAAEgD,KAAK,CACHL,IAAKA,EAAM6K,EACXlF,OAAQ,OACRnF,QAAS,SAAU5C,GACfP,EAAEmB,UAAU2H,OACRvI,EAAKwI,OACL/I,EAAE,4BAA4BuK,MAAM,QACM,IAAtCvK,EAAE,yBAAyBuB,QAC3BvB,EAAE,QAAQoD,OAAO,4CAErBpD,EAAE,yBAAyBoD,OACvB,gFAEE7C,EAAKuN,aAAe,UAE1B5J,YAAW,WACPlE,EAAE,wBAAwBiE,WAC3B,OAEHjE,EAAE,uCAAuCY,KAAKL,GAC9CP,EAAE,yBAAyBe,YAAY,kBACvCf,EAAE,4BAA4BuK,MAAM,QAEM,IAAtCvK,EAAE,yBAAyBuB,QAC3BvB,EAAE,QAAQoD,OAAO,4CAErBpD,EAAE,sBAAsBY,KAAKL,EAAKsM,UAClC7M,EAAE,yBAAyBoD,OACvB,iFAEE7C,EAAKwN,WAAa,UAExB7J,YAAW,WACPlE,EAAE,wBAAwBiE,SACtBjE,EAAE,cAAcuB,QAChByM,SAASC,WAEd,QAGXlF,MAAO,WACH/I,EAAEmB,UAAU2H,cAM5BtE,YAAaA,EACbQ,oBAAqBA,EACrBgG,qBAAsBA,I,+BC50B1BrN,EAAOD,QAAU,CACb+N,gBAAiB,SAAUJ,GAIvB,GAF8C,QAA1BA,EAAY1H,MAAMxE,KADpB,IACqCkM,EAAY1H,MAAMuK,QAEzE,CAIA,IAAIC,EAAmBnO,EAAEqL,EAAYC,kBAAoB,IAAMD,EAAYE,sBACvE6C,EAAkBpO,EAAEqL,EAAYC,kBAAoB,IAAMD,EAAYG,qBAE1E,GAAIxL,EAAEqL,EAAYC,kBAAoB,IAAMD,EAAYG,qBAAqBzI,GAAG,eAC5EqL,EAAkBpO,EAAEqL,EAAYC,kBAAoB,IAAMD,EAAYgD,2BAClErO,EAAE,kCAAkCuB,OAAS,GAAG,CAChD,IAAI+M,EAAetO,EAAEqL,EAAYC,kBAAoB,0BACrD8C,EAAkBE,EAAaA,EAAa/M,OAAS,GAIzD8J,EAAY1H,MAAM4K,SACdvO,EAAE,UAAU+C,GAAGoL,KACfC,EAAgBlD,QAChBG,EAAY1H,MAAMjB,kBAGlB1C,EAAE,UAAU+C,GAAGqL,KACfD,EAAiBjD,QACjBG,EAAY1H,MAAMjB,sB,gCC5BlC,IAAI8L,EAAiB,EAAQ,GAE7BxO,EAAE+D,UAAU0K,OAAM,WACdD,EAAe,EAAQ,S,gCCH3B,IAAI5O,EAAO,EAAQ,GAEnBjC,EAAOD,QAAU,WACbkC,EAAK8O,oBACL9O,EAAK+O,yBACL/O,EAAK+L,kBACL/L,EAAK8L,mB;;;;;;GCAT,SAASkD,EAAkBnL,EAAQoL,GAAS,IAAK,IAAIjR,EAAI,EAAGA,EAAIiR,EAAMtN,OAAQ3D,IAAK,CAAE,IAAIkR,EAAaD,EAAMjR,GAAIkR,EAAWtQ,WAAasQ,EAAWtQ,aAAc,EAAOsQ,EAAWC,cAAe,EAAU,UAAWD,IAAYA,EAAWE,UAAW,GAAM1Q,OAAOC,eAAekF,EAAQqL,EAAW3P,IAAK2P,IAI7SxQ,OAAOC,eAAeb,EAAS,aAAc,CAC3CmB,OAAO,IAET,IAQIoQ,EAAS,CACXC,QARY,EASZC,QARY,EASZC,KARS,EASTC,OARW,EASXC,UARc,EASdC,SARa,EASbC,UARc,GAWhB,SAAS7O,EAAM8O,GACbA,EAAMlO,OAAS,EAGjB,SAASmO,EAAMC,EAAWvO,EAAOwO,GAC/B,OAAOC,MAAMrQ,UAAUkQ,MAAM3R,KAAK4R,EAAWvO,EAAOwO,GAGtD,SAASE,EAAMC,GACb,OAAOA,EAAK3Q,KAAK0Q,MAAMC,EAAM,CAAC,MAAMC,OAAON,EAAMO,UAAW,KAG9D,IAAIC,EAAWhM,WAEXiM,EAAO,aAEX,SAASC,EAAIL,GACX,OAAOM,sBAAsBN,GAG/B,SAASO,EAAOrN,EAAMsN,GACpB,cAAcA,IAAYtN,EAG5B,SAASuN,EAASD,GAChB,OAAQE,EAAOF,IAAYD,EAAO,SAAUC,GAG9C,IAAIG,EAAUb,MAAMa,QAChBC,EAAab,EAAMQ,EAAQ,YAC3BM,EAAWd,EAAMQ,EAAQ,UACzBO,EAAcf,EAAMQ,EAAQ,aAEhC,SAASG,EAAOF,GACd,OAAmB,OAAZA,EAGT,SAASO,EAAcP,GACrB,IACE,OAAOA,aAAoBA,EAAQQ,cAAcC,aAAeC,QAAQC,YACxE,MAAO5Q,GACP,OAAO,GAIX,SAAS0B,EAAQnD,GACf,OAAO6R,EAAQ7R,GAASA,EAAQ,CAACA,GAGnC,SAASyF,EAAQoB,EAAQyL,GACvBnP,EAAQ0D,GAAQpB,QAAQ6M,GAG1B,SAASC,EAAS3B,EAAO5Q,GACvB,OAAO4Q,EAAMhK,QAAQ5G,IAAU,EAGjC,SAASoN,EAAKwD,EAAO4B,GAEnB,OADA5B,EAAMxD,KAAK6D,MAAML,EAAOzN,EAAQqP,IACzB5B,EAGT,SAASnM,EAAYgO,EAAKC,EAASC,GAC7BF,GACFhN,EAAQiN,GAAS,SAAUpT,GACrBA,GACFmT,EAAIG,UAAUD,EAAM,MAAQ,UAAUrT,MAM9C,SAAS6C,EAASsQ,EAAKC,GACrBjO,EAAYgO,EAAKV,EAASW,GAAWA,EAAQG,MAAM,KAAOH,GAAS,GAGrE,SAASnO,EAAO0C,EAAQuD,GACtB/E,EAAQ+E,EAAUvD,EAAO6L,YAAYvS,KAAK0G,IAG5C,SAAS8L,EAAOC,EAAOC,GACrBxN,EAAQuN,GAAO,SAAUE,GACvB,IAAIjM,GAAUgM,GAAOC,GAAMC,WAEvBlM,GACFA,EAAOmM,aAAaF,EAAMD,MAKhC,SAASI,EAAQZ,EAAKa,GACpB,OAAOrB,EAAcQ,KAASA,EAAuB,mBAAKA,EAAIY,SAASnU,KAAKuT,EAAKa,GAGnF,SAAS9I,EAASvD,EAAQqM,GACxB,IAAIC,EAAYtM,EAAS4J,EAAM5J,EAAOuD,UAAY,GAClD,OAAO8I,EAAWC,EAAUC,QAAO,SAAUC,GAC3C,OAAOJ,EAAQI,EAAOH,MACnBC,EAGP,SAASE,EAAMxM,EAAQqM,GACrB,OAAOA,EAAW9I,EAASvD,EAAQqM,GAAU,GAAKrM,EAAOyM,kBAG3D,IAAIC,EAAUlU,OAAO+F,KAErB,SAASoO,EAAOnT,EAAQ6R,EAAUuB,GAOhC,OANIpT,IACDoT,EAAQF,EAAQlT,GAAQqT,UAAYH,EAAQlT,IAASgF,SAAQ,SAAUnF,GAC9D,cAARA,GAAuBgS,EAAS7R,EAAOH,GAAMA,MAI1CG,EAGT,SAASsT,EAAOtT,GAMd,OALAoQ,EAAMO,UAAW,GAAG3L,SAAQ,SAAUuO,GACpCJ,EAAOI,GAAQ,SAAUhU,EAAOM,GAC9BG,EAAOH,GAAO0T,EAAO1T,SAGlBG,EAGT,SAASwT,EAAMxT,GAYb,OAXAoQ,EAAMO,UAAW,GAAG3L,SAAQ,SAAUuO,GACpCJ,EAAOI,GAAQ,SAAUhU,EAAOM,GAC1BuR,EAAQ7R,GACVS,EAAOH,GAAON,EAAM6Q,QACXc,EAAS3R,GAClBS,EAAOH,GAAO2T,EAAM,GAAItC,EAASlR,EAAOH,IAAQG,EAAOH,GAAO,GAAIN,GAElES,EAAOH,GAAON,QAIbS,EAGT,SAASyT,EAAKzT,EAAQ+E,GACpBC,EAAQD,GAAQmO,EAAQlT,IAAS,SAAUH,UAClCG,EAAOH,MAIlB,SAAS6T,EAAgBC,EAAM3N,GAC7BhB,EAAQ2O,GAAM,SAAU3B,GACtBhN,EAAQgB,GAAO,SAAUrF,GACvBqR,GAAOA,EAAI0B,gBAAgB/S,SAKjC,SAASiT,EAAaD,EAAM3N,EAAOzG,GAC7B2R,EAASlL,GACXmN,EAAOnN,GAAO,SAAU6N,EAAQhV,GAC9B+U,EAAaD,EAAM9U,EAAMgV,MAG3B7O,EAAQ2O,GAAM,SAAU3B,GACtBb,EAAO5R,IAAoB,KAAVA,EAAemU,EAAgB1B,EAAKhM,GAASgM,EAAI4B,aAAa5N,EAAO8N,OAAOvU,OAKnG,SAASK,EAAOmU,EAAK/N,EAAOQ,GAC1B,IAAIwL,EAAMvN,SAASuP,cAAcD,GAOjC,OALI/N,IACFsL,EAAStL,GAAStE,EAASsQ,EAAKhM,GAAS4N,EAAa5B,EAAKhM,IAG7DQ,GAAU1C,EAAO0C,EAAQwL,GAClBA,EAGT,SAASiC,EAAMjC,EAAKkC,EAAM3U,GACxB,GAAIgS,EAAYhS,GACd,OAAO4U,iBAAiBnC,GAAKkC,GAG1B/C,EAAO5R,KACVyS,EAAIiC,MAAMC,GAAQ,GAAK3U,GAI3B,SAAS6U,EAAQpC,EAAKqC,GACpBJ,EAAMjC,EAAK,UAAWqC,GAGxB,SAASzI,EAAMoG,GACbA,EAAe,WAAKA,EAAe,aAAOA,EAAIpG,MAAM,CAClD0I,eAAe,IAInB,SAASC,EAAavC,EAAKrR,GACzB,OAAOqR,EAAIuC,aAAa5T,GAG1B,SAASyE,EAAS4M,EAAKwC,GACrB,OAAOxC,GAAOA,EAAIG,UAAUsC,SAASD,GAGvC,SAASE,EAAKvQ,GACZ,OAAOA,EAAOwQ,wBAGhB,SAAShQ,EAAO4N,GACdvN,EAAQuN,GAAO,SAAUE,GACnBA,GAAQA,EAAKC,YACfD,EAAKC,WAAWkC,YAAYnC,MAKlC,SAAS/I,EAAUpI,GACjB,OAAO0R,GAAM,IAAI6B,WAAYC,gBAAgBxT,EAAM,aAAauI,MAGlE,SAASkL,EAAQ/T,EAAGgU,GAClBhU,EAAEoC,iBAEE4R,IACFhU,EAAEgU,kBACFhU,EAAEiU,4BAIN,SAASC,EAAM1O,EAAQqM,GACrB,OAAOrM,GAAUA,EAAO2O,cAActC,GAGxC,SAASuC,EAAS5O,EAAQqM,GACxB,OAAOA,EAAWzC,EAAM5J,EAAO6O,iBAAiBxC,IAAa,GAG/D,SAASpR,EAAYuQ,EAAKC,GACxBjO,EAAYgO,EAAKC,GAAS,GAG5B,SAASqD,EAAOtU,GACd,OAAOA,EAAEuU,UAGX,SAASC,EAAKjW,GACZ,OAAO+R,EAAS/R,GAASA,EAAQA,EAAQA,EAAQ,KAAO,GAM1D,SAASkW,EAAOC,EAAW5S,GACzB,IAAK4S,EACH,MAAM,IAAIC,MAAM,aAA6B7S,GAAW,KAI5D,IAAI8S,EAAMC,KAAKD,IACXE,GAAMD,KAAKC,IACXC,GAAQF,KAAKE,MACbC,GAAOH,KAAKG,KACZC,GAAMJ,KAAKI,IAEf,SAASC,GAAmBC,EAAGC,EAAGC,GAChC,OAAOJ,GAAIE,EAAIC,GAAKC,EAGtB,SAASC,GAAQC,EAAQJ,EAAGC,EAAGI,GAC7B,IAAIC,EAAUb,EAAIO,EAAGC,GACjBM,EAAUZ,GAAIK,EAAGC,GACrB,OAAOI,EAAYC,EAAUF,GAAUA,EAASG,EAAUD,GAAWF,GAAUA,GAAUG,EAG3F,SAASC,GAAMJ,EAAQJ,EAAGC,GACxB,IAAIK,EAAUb,EAAIO,EAAGC,GACjBM,EAAUZ,GAAIK,EAAGC,GACrB,OAAOR,EAAIE,GAAIW,EAASF,GAASG,GAGnC,SAASE,GAAKT,GACZ,QAASA,EAAI,KAAOA,EAAI,GAG1B,SAASU,GAAaC,GACpB,OAAOA,EAAOC,QAAQ,qBAAsB,SAASC,cAGvD,SAASC,GAAOH,EAAQI,GAItB,OAHAlS,EAAQkS,GAAc,SAAUC,GAC9BL,EAASA,EAAOC,QAAQ,KAAM,GAAKI,MAE9BL,EAGT,SAASM,GAAIb,GACX,OAAOA,EAAS,GAAK,IAAMA,EAAS,GAAKA,EAG3C,IAAIc,GAAM,GAEV,SAASC,GAASC,GAChB,MAAO,GAAKA,EAASH,GAAIC,GAAIE,IAAWF,GAAIE,IAAW,GAAK,GAG9D,SAASC,KACP,IAAIC,EAAY,GA0ChB,SAASC,EAAaC,EAASC,EAAQ/F,GACrC7M,EAAQ2S,GAAS,SAAUxT,GACzBA,GAAUa,EAAQ4S,GAAQ,SAAUC,GAClCA,EAAQzF,MAAM,KAAKpN,SAAQ,SAAU8S,GACnC,IAAIC,EAAWD,EAAQ1F,MAAM,KAC7BP,EAAS1N,EAAQ4T,EAAS,GAAIA,EAAS,aAa/C,MAAO,CACLjY,KA3DF,SAAc6X,EAASC,EAAQI,EAAU7M,GACvCuM,EAAaC,EAASC,GAAQ,SAAUzT,EAAQE,EAAO4T,GACrD,IAAIC,EAAiB,qBAAsB/T,EACvCgU,EAAUD,EAAgB/T,EAAOiU,oBAAoBtY,KAAKqE,EAAQE,EAAO2T,EAAU7M,GAAWhH,EAAuB,eAAErE,KAAKqE,EAAQ6T,GACxIE,EAAgB/T,EAAOkU,iBAAiBhU,EAAO2T,EAAU7M,GAAWhH,EAAoB,YAAE6T,GAC1FP,EAAU9K,KAAK,CAACxI,EAAQE,EAAO4T,EAAWD,EAAUG,QAuDtDG,OAnDF,SAAgBX,EAASC,EAAQI,GAC/BN,EAAaC,EAASC,GAAQ,SAAUzT,EAAQE,EAAO4T,GACrDR,EAAYA,EAAU1E,QAAO,SAAUwF,GACrC,SAAIA,EAAS,KAAOpU,GAAUoU,EAAS,KAAOlU,GAASkU,EAAS,KAAON,GAAeD,GAAYO,EAAS,KAAOP,KAChHO,EAAS,MACF,UA+CbC,SAvCF,SAAkBrU,EAAQR,EAAM8U,GAC9B,IAAIzX,EAcJ,MAX2B,mBAAhB0X,YACT1X,EAAI,IAAI0X,YAAY/U,EAAM,CACxBgV,SAJU,EAKVF,OAAQA,KAGVzX,EAAIyD,SAASmU,YAAY,gBACvBC,gBAAgBlV,GATN,GASqB,EAAO8U,GAG1CtU,EAAO2U,cAAc9X,GACdA,GAyBP+X,QAXF,WACEtB,EAAUzS,SAAQ,SAAU/D,GAC1BA,EAAK,QAEPI,EAAMoW,KA4CV,SAASuB,GAAeC,GACtB,IAAIC,EAAMD,EAAUA,EAAQ5U,MAAM6U,IAAMzU,SAAS0U,yBAC7CC,EAAS5B,KAgBb,OAJIyB,GACFA,EAAQ5U,MAAMtD,GA7BE,UA6BgBqY,EAAOL,SAGlCzF,EAAO8F,EAAQ,CACpBF,IAAKA,EACLnY,GAhBF,SAAY6W,EAAQI,GAClBoB,EAAOtZ,KAAKoZ,EAAKxW,EAAQkV,GAAQtO,KAAK,MAAM,SAAUtI,GACpDgX,EAASxH,MAAMwH,EAAU5G,EAAQpQ,EAAEyX,QAAUzX,EAAEyX,OAAS,QAe1DY,IAAK7I,EAAM4I,EAAOd,OAAQY,GAC1BI,KAZF,SAAcjV,GACZ+U,EAAOZ,SAASU,EAAK7U,EAAO+L,EAAMO,UAAW,OAejD,SAAS4I,GAAgBC,EAAUC,EAAYC,EAAUC,GACvD,IACIC,EAEAzY,EAHA0Y,EAAMC,KAAKD,IAEXE,EAAO,EAEPC,GAAS,EACTnM,EAAQ,EAEZ,SAASoM,IACP,IAAKD,EAAQ,CAIX,GAHAD,EAAOP,EAAW5D,GAAKiE,IAAQD,GAAaJ,EAAU,GAAK,EAC3DE,GAAYA,EAASK,GAEjBA,GAAQ,IACVN,IACAG,EAAYC,IAERF,KAAW9L,GAAS8L,GACtB,OAAOO,IAIX/Y,EAAK2P,EAAImJ,IAWb,SAASC,IACPF,GAAS,EAYX,SAASG,IACPhZ,GAAMiZ,qBAAqBjZ,GAC3B4Y,EAAO,EACP5Y,EAAK,EACL6Y,GAAS,EAWX,MAAO,CACLlY,MApCF,SAAeuY,GACbA,GAAUF,IACVP,EAAYC,KAASQ,EAASN,EAAOP,EAAW,GAChDQ,GAAS,EACT7Y,EAAK2P,EAAImJ,IAiCTK,OA1BF,WACEV,EAAYC,IACZE,EAAO,EAEHL,GACFA,EAASK,IAsBXG,MAAOA,EACPC,OAAQA,EACRI,IAbF,SAAaC,GACXhB,EAAWgB,GAaXC,SAVF,WACE,OAAOT,IAaX,SAASU,GAAMC,GACb,IAAIC,EAAQD,EAUZ,MAAO,CACLJ,IATF,SAAahb,GACXqb,EAAQrb,GASRkE,GANF,SAAYoX,GACV,OAAO/I,EAASpP,EAAQmY,GAASD,KASrC,SAASE,GAASrK,EAAMsK,GACtB,IAAIvB,EAAWD,GAAgBwB,GAAY,EAAGtK,EAAM,KAAM,GAC1D,OAAO,WACL+I,EAASiB,YAAcjB,EAAS1X,SA4EpC,IAOIkZ,GAAM,MACNC,GAAkB,CACpBC,MAAO,CAAC,UACRC,KAAM,CAAC,MAAO,SACd/H,MAAO,CAAC,SAAU,QAClB+C,EAAG,CAAC,KACJiF,EAAG,CAAC,KACJC,EAAG,CAAC,KACJC,UAAW,CAZEC,UADGA,cAchBC,WAAY,CAZGD,YAHAA,cAkBjB,SAASE,GAAUxC,EAASyC,EAAavQ,GAcvC,MAAO,CACLwQ,QAdF,SAAiBzH,EAAM0H,EAAUC,GAE/B,IAAIpU,EAhBE,SAeNoU,EAAYA,GAAa1Q,EAAQ0Q,YACCD,EAAeC,IAAcb,GAAM,GAAK,EAA7B,EAC7C,OAAOC,GAAgB/G,IAAS+G,GAAgB/G,GAAMzM,IAAUyM,EAAK6C,QAAQ,qBAAqB,SAAU+E,EAAOC,GACjH,IAAI5E,EAAc8D,GAAgBa,EAAM9E,eAAevP,IAAUqU,EACjE,OAAOC,EAAS,EAAI5E,EAAY6E,OAAO,GAAGC,cAAgB9E,EAAY/G,MAAM,GAAK+G,MAUnF+E,OANF,SAAgB3c,GACd,OAAOA,GAxBD,QAwBU4L,EAAQ0Q,UAAoB,GAAK,KASrD,IAAIM,GAAO,OAePC,GAAiB,CAACD,GAdN,WACD,WAEKE,gBACDA,eAEFA,aACKA,kBACJA,cACKA,mBACIA,wBAOvBC,GAxZe,SA4ZfC,GAAcC,uBAgBdC,GAAeC,YAOfC,GAAiB,CAACF,GAJFC,aAFHA,UACAA,UAEGA,aACCA,cACAA,eAEjBE,GAAU,CACZC,MA1BgBC,gBA2BhBC,MAAOR,GACPS,OAzBiBF,iBA0BjBG,MAzBgBH,gBA0BhBI,KAzBqBC,sBA0BrBC,KAzBqBD,sBA0BrBE,WAzBqBP,qBA0BrBQ,KAzB0BC,2BA0B1B1b,QApBkBib,mBAyCpB,IAIIU,GAAoB,qCA+GxB,IAAIC,GAAQ,QACRC,GAAO,OAGX,SAASC,GAAQ1E,EAASxR,EAAOmW,EAAYf,GAC3C,IAiBIgB,EAjBAxZ,EAAQ2U,GAAeC,GACvBlY,EAAKsD,EAAMtD,GACXuY,EAAOjV,EAAMiV,KACbxZ,EAAOuE,EAAMvE,KACbge,EAAa7E,EAAQ6E,WACrBC,EAAO9E,EAAQ8E,KACf5S,EAAU8N,EAAQ9N,QAClB6S,EAAe7S,EAAQ6S,aACvBC,EAAe9S,EAAQ8S,aACvBC,EAAO/S,EAAQ+S,KACfb,EAAalS,EAAQkS,WACrBc,EAAahT,EAAQgT,WACrBxC,EAAUmC,EAAWrC,UAAUE,QAC/ByC,EAAS7J,EAAasI,EAAO,SAC7BjU,EAAQ2L,EAAasI,EA3MVR,cA4MXgC,EAAUT,GAAc,EACxBzb,EAAY6Q,EAAM6J,EAAO,6BAkC7B,SAASyB,IACP,IAAIC,EAAWtF,EAAQuF,QAAQpV,KAAI,SAAUjF,GAC3C,IAAIsa,EAASta,EAAOua,OAAOZ,WAAWa,OAAOC,MAAMnX,GACnD,OAAOgX,EAASA,EAAO5B,MAAM1b,GAAK,MACjCmI,KAAK,KACRsK,EAAaiJ,EApPAR,aAoPmBpF,GAAOiH,EAAKW,QAASR,EAAUT,EAAanW,GAAS,IACrFmM,EAAaiJ,EAxPGR,gBAwPmBkC,GACnC3K,EAAaiJ,EAAOV,GAAMgC,EAAa,SAAW,IAClDA,GAAczK,EAAgBmJ,EAnPPR,wBAsPzB,SAASyC,IACFjB,GACH5D,IAIJ,SAASA,IACP,IAAK4D,EAAW,CACd,IAAIkB,EAAO9F,EAAQxR,OASjBuX,EAASC,OAEE7Z,EAASyX,EAAOJ,MAC7BzY,EAAY6Y,EAAOJ,GAAcuC,GACjCpL,EAAaiJ,EAjRAR,eAiRqB2B,GAAgBgB,GAAU,IAC5D1F,EAAK0F,EA3hBQ,SACE,WA0hB8BE,IAIjD,WACE,IAAIC,EAiCN,WACE,GAAIlG,EAAQxV,GA7HL,QA8HL,OAAOwb,IAGT,IAAIG,EAAY1K,EAAKoJ,EAAWuB,SAASC,OACrCC,EAAY7K,EAAKmI,GACjB1B,EAAOQ,EAAQ,QAAQ,GACvBvI,EAAQuI,EAAQ,SAAS,GAC7B,OAAO5F,GAAMqJ,EAAUjE,KAAUnF,GAAKuJ,EAAUpE,KAAUpF,GAAMwJ,EAAUnM,KAAW4C,GAAKoJ,EAAUhM,IA1CtFoM,GACVC,GAAUN,KAAaF,KAAcZ,GAEpCpF,EAAQ2B,MAAMnX,GAAG,CA96Bb,EACG,KA86BVmQ,EAAaiJ,EAvRDR,cAuRqBoD,GAAU,IAG7C7L,EAAawB,EAASyH,EAAO1R,EAAQuU,gBAAkB,IAlS3C,WAkS2DD,GAAU,EAAI,IAEjFtB,GACFvK,EAAaiJ,EArSH,WAqSqB4C,GAAU,EAAI,GAG3CN,IAAY/Z,EAASyX,EAhQTH,gBAiQd1Y,EAAY6Y,EAjQEH,aAiQoByC,GAClC7F,EAAK6F,EA7iBS,UACD,SA4iBgCD,IAG/C,IAAKC,GAAW1a,SAASkb,gBAAkB9C,EAAO,CAChD,IAAI4B,EAASX,EAAWa,OAAOC,MAAM3F,EAAQxR,OAC7CgX,GAAU7S,EAAM6S,EAAO5B,QArCvB+C,GACA5b,EAAY6Y,EArODH,UAqOoBjV,IAAUsX,EAAO,GAChD/a,EAAY6Y,EArODH,UAqOoBjV,IAAUsX,EAAO,GAIpD,IACMC,EAsCN,SAASC,IACP,IAAIF,EAAO9F,EAAQxR,MACnB,OAAOsX,IAAStX,GAAS0D,EAAQ0U,aAAed,IAASnB,EAyB3D,IAAIsB,EAAO,CACTzX,MAAOA,EACPmW,WAAYA,EACZf,MAAOA,EACP1a,UAAWA,EACXkc,QAASA,EACTyB,MAlIF,WACOzB,IACHxB,EAAM1b,GAAK4c,EAAK5c,GAAK,SAAWiW,GAAI3P,EAAQ,GAC5CmM,EAAaiJ,EAAOV,GAAMkB,EAAa,WAAa,SACpDzJ,EAAaiJ,EAhNQR,uBAgNqB6B,EAAKrB,OAC/CjJ,EAAaiJ,EArNFR,aAqNqBzT,GAASqO,GAAOiH,EAAK6B,WAAY,CAACtY,EAAQ,EAAGwR,EAAQhX,WAOvFnC,EAAK+c,EAAO,QAASrM,EAAM8I,EAxeb,QAwegC4F,IAC9Cpf,EAAK+c,EAAO,UAAWrM,EAAM8I,EAhdP,KAgdkC4F,IACxDne,EAAG,CA3eW,QA2BE,KAbC,YA6dgCkZ,GACjDlZ,EAvd2B,qBAudEud,GAEzBL,GACFld,EAhfW,OAgfI+d,IAiHjB/F,QA7GF,WACE8E,GAAY,EACZxZ,EAAM0U,UACNtX,EAAYob,EAAOF,IACnBjJ,EAAgBmJ,EAAOT,IACvBxI,EAAaiJ,EAAO,QAASuB,GAC7BxK,EAAaiJ,EA5OAR,aA4OmBzT,GAAS,KAwGzCqR,OAAQA,EACRhG,MAxCF,SAAiBC,EAAM3U,EAAOygB,GAC5B/L,EAAM+L,GAAgB7d,GAAa0a,EAAO3I,EAAM3U,IAwChD0gB,SApBF,SAAkBC,EAAMC,GACtB,IAAIC,EAAOnK,GAAIiK,EAAOzY,GAMtB,OAJK4W,IAAYlT,EAAQmP,SAAUrB,EAAQxV,GAAGia,MAC5C0C,EAAOxK,EAAIwK,EAAMnH,EAAQhX,OAASme,IAG7BA,GAAQD,IAejB,OAAOjB,EA+uBT,IACImB,GAAO,wFA6VX,IAAIC,GAA0B,CAC5BC,SAAS,EACTC,SAAS,GAwNX,IAAIC,GAAoB,CACtBC,SAAU,IACVC,MA7qDgBpF,aA8qDhBqF,KA/qDerF,YAgrDfsF,GA9qDatF,UA+qDbuF,KA9qDevF,aAirDjB,SAASwF,GAAalhB,GAEpB,OADAA,EAAMyR,EAASzR,GAAOA,EAAMA,EAAIA,IACzB4gB,GAAkB5gB,IAAQA,EA+TnC,IAAImhB,GAAe,CAAC,IAAK,SAuKzB,IAAIC,GAAqCjiB,OAAOkiB,OAAO,CACrDC,UAAW,KACXC,MAvuEF,SAAenI,EAASyC,EAAavQ,GACnC,IAAIyP,EAAQ3B,EAAQ2B,MAChByG,EAAclW,EAAQkW,aAAe,GACrCC,EAAgBnW,EAAQmW,eAAiB,GACzClI,EAAS5B,KACT+J,EAAU,GAad,SAASxI,EAAQyI,GACXA,GACFpI,EAAOL,UAIX,SAAS0I,EAASC,EAAUxM,GAC1B,IAAIyM,EAAYC,WAAW1M,GAC3BkE,EAAOtZ,KAAK6hB,EAAW,SAAU1H,GACjCsH,EAAQ5U,KAAK,CAAC+U,EAAUC,IAG1B,SAAS1H,IACP,IAAI4D,EAAYjD,EAAMnX,GA5jBV,GA6jBRoY,EAAY1Q,EAAQ0Q,UACpBgG,EAASN,EAAQO,QAAO,SAAUC,EAASC,GAC7C,OAAOxO,EAAMuO,EAASC,EAAM,GAAGpP,QAAUoP,EAAM,GAAK,MACnD,IACHvO,EAAKtI,GACLoP,EAAIsH,GAEA1W,EAAQ4N,QACVE,EAAQF,QAA4B,eAApB5N,EAAQ4N,SACf8E,GACT9E,GAAQ,GACRE,EAAQ6G,SAERjE,IAAc1Q,EAAQ0Q,WAAa5C,EAAQgJ,UAU/C,SAAS1H,EAAI2H,EAAM5hB,EAAM6hB,GACvB3O,EAAMrI,EAAS+W,GACf5hB,GAAQkT,EAAMxU,OAAOojB,eAAejX,GAAU+W,IAE1CC,GAAWvH,EAAMnX,GA9lBX,IA+lBRwV,EAAQK,KA5MM,UA4McnO,GAIhC,MAAO,CACLkX,MA1DF,WACE,IAAIC,EAA+B,QAAvBnX,EAAQoX,WACpBrP,EAAQmO,GAAamB,MAAK,SAAUziB,EAAGrB,GACrC,OAAO4jB,GAASviB,GAAKrB,GAAKA,GAAKqB,KAC9BiF,SAAQ,SAAUnF,GACnB4hB,EAASJ,EAAYxhB,GAAM,KAAOyiB,EAAQ,MAAQ,OAAS,UAAYziB,EAAM,UAE/E4hB,EAASH,EAljBsB,oCAmjB/BrH,KAmDAlB,QAASA,EACT+I,OAlBF,SAAgBrf,GACVmf,WAtlB2B,oCAslBchP,UAC3CnQ,EAAS+Q,EAAMrI,EAASmW,GAAiB7N,EAAKtI,EAAS+H,EAAQoO,MAiBjE/G,IAAKA,IAoqEPkB,UAAWA,GACX4D,SAxiEF,SAAkBpG,EAASyC,EAAavQ,GACtC,IAUImU,EACAmD,EACAC,EAZAC,EAAkB3J,GAAeC,GACjClY,EAAK4hB,EAAgB5hB,GACrBjB,EAAO6iB,EAAgB7iB,KAEvBie,EAAO9E,EAAQ8E,KACfG,EAAO/S,EAAQ+S,KACf0E,EAAW,GACXC,EAAS,GACTC,EAAc,GACdC,EAAe,GAKnB,SAASV,IAyCP/C,EAAQle,EAAK,kBACbqhB,EAAOzP,EAAMsM,EAAO,iBACpB7J,EAAO6J,GAASmD,EAAM,oCACtB9V,EAAKkW,EAAQ9Y,EAAS0Y,EAAM,uBAA+BlG,GAAc,MACzEpJ,EAAO,CACL6J,OAvHaF,iBAwHbO,WApHiBP,qBAqHjBI,KAvHiBC,sBAwHjBC,KAvHiBD,sBAwHjB6F,IApHmBC,wBAqHnBC,OApHapG,mBAqHZ,SAAUtI,EAAW3U,GACtB+iB,EAAS/iB,GAAOuB,EAAK,IAAMoT,MAE7BlB,EAAOsP,EAAU,CACf7E,KAAMA,EACNuB,MAAOA,EACPmD,KAAMA,EACNI,OAAQA,IAIZ,WACE,IAAI1hB,EAAK4c,EAAK5c,IAAMmW,GAviBL,UAwiBX6L,EAAOhY,EAAQgY,KACnBpF,EAAK5c,GAAKA,EACVme,EAAMne,GAAKme,EAAMne,IAAMA,EAAK,SAC5BshB,EAAKthB,GAAKshB,EAAKthB,IAAMA,EAAK,SAErBoT,EAAawJ,EAAM5B,KAA0B,YAAjB4B,EAAKqF,SAAyBD,GAC7DvP,EAAamK,EAAM5B,GAAMgH,GAG3BvP,EAAamK,EAhKU1B,uBAgKkB6B,EAAK7W,UAC9CuM,EAAa6O,EAAMtG,GAAM,gBAzEzBkH,GACApJ,IAiBF,SAASlB,EAAQyI,GACf,IAAIxb,EAAQoW,GAAe1L,OAAO,SAClCrP,EAAMwhB,GACNphB,EAAYsc,EAAM+E,GAClBrhB,EAAY6d,EAAOyD,GACnBrP,EAAgB,CAAC4L,EAAOmD,GAAOzc,GAC/B0N,EAAgBqK,EAAMyD,EAAaxb,EAAQ,CAAC,QAhHrBqW,yBAmHzB,SAASpC,IACPxY,EAAYsc,EAAM+E,GAClBrhB,EAAY6d,EAAOyD,GACnBD,EAAcQ,EAAWhH,IACzByG,EAAeO,EA/GDxG,iBAgHdpb,EAASqc,EAAM+E,GACfphB,EAAS4d,EAAOyD,GAChBnP,EAAamK,EA9HA1B,aA8HkBlR,EAAQvC,OACvCgL,EAAamK,EA9HK1B,kBA8HkBlR,EAAQoY,YAyC9C,SAASniB,EAAKyR,GACZ,IAAIb,EAAMkD,EAAM6I,EAAMlL,GACtB,OAAOb,GAvHX,SAAiBkO,EAAMrN,GACrB,GAAIxB,EAAW6O,EAAK1c,SAClB,OAAO0c,EAAK1c,QAAQqP,GAKtB,IAFA,IAAIb,EAAMkO,EAEHlO,GAAwB,IAAjBA,EAAIwR,WACZ5Q,EAAQZ,EAAKa,IAIjBb,EAAMA,EAAIyR,cAGZ,OAAOzR,EAwGSxO,CAAQwO,EAAK,IAAMsK,MAAgByB,EAAO/L,OAAM,EAGhE,SAASsR,EAAWhjB,GAClB,MAAO,CAACA,EAAO,KAAO6K,EAAQxH,KAAMrD,EAAO,KAAO6K,EAAQ0Q,UAAW1Q,EAAQuY,MAAQpjB,EAAO,cAAe6K,EAAQ6S,cAAgB1d,EAAO,QAASA,IAASgc,IAAcG,IAG5K,OAAOnJ,EAAOsP,EAAU,CACtBP,MAAOA,EACPvC,MAnFF,WACE/e,EAxWgB,UAwWEgY,GAClBhY,EAzWgB,UAyWEshB,GAClBthB,EAzWgB,UAyWEkZ,GAClBna,EAAK2E,SAAUkf,gCAAkC,SAAU3iB,GACzD0hB,EAAwB,YAAX1hB,EAAE2C,OACd,CACD6c,SAAS,IAEX1gB,EAAKie,EAAM,WAAW,WACpB/Z,EAAY+Z,EAtEGrB,gBAsEqBgG,OA0EtC3J,QAASA,KAg8DX4F,OAzxDF,SAAgB1F,EAASyC,EAAavQ,GACpC,IAAIyY,EAAmB5K,GAAeC,GAClClY,EAAK6iB,EAAiB7iB,GACtBuY,EAAOsK,EAAiBtK,KACxBxZ,EAAO8jB,EAAiB9jB,KAExB+jB,EAAwBnI,EAAY2D,SACpCwD,EAASgB,EAAsBhB,OAC/BJ,EAAOoB,EAAsBpB,KAC7BqB,EAAU,GAQd,SAAST,IACPR,EAAO7d,SAAQ,SAAU6X,EAAOpV,GAC9Bga,EAAS5E,EAAOpV,GAAQ,MAI5B,SAASsR,IACPgL,GAAU,SAAUtF,GAClBA,EAAO1F,aAET1X,EAAMyiB,GASR,SAASrC,EAAS5E,EAAOpV,EAAOmW,GAC9B,IAAI5d,EAAS2d,GAAQ1E,EAASxR,EAAOmW,EAAYf,GACjD7c,EAAO8f,QACPgE,EAAQnX,KAAK3M,GACb8jB,EAAQtB,MAAK,SAAUwB,EAAQvF,GAC7B,OAAOuF,EAAOvc,MAAQgX,EAAOhX,SAIjC,SAAStI,EAAI8kB,GACX,OAAOA,EAAgBlR,GAAO,SAAU0L,GACtC,OAAQA,EAAOJ,WACZyF,EAuCP,SAASC,EAAUlS,EAAUoS,GAC3B9kB,EAAI8kB,GAAejf,QAAQ6M,GAG7B,SAASkB,EAAOmR,GACd,OAAOJ,EAAQ/Q,OAAO1B,EAAW6S,GAAWA,EAAU,SAAUzF,GAC9D,OAAOnN,EAAS4S,GAAWtR,EAAQ6L,EAAO5B,MAAOqH,GAAWpS,EAASpP,EAAQwhB,GAAUzF,EAAOhX,SAmClG,MAAO,CACLqY,MAtHF,WACEuD,IACAtiB,EA/mBgB,UA+mBEgY,GAClBhY,EAhnBgB,UAgnBEsiB,IAoHlBtK,QAASA,EACTkB,OArGF,WACE8J,GAAU,SAAUtF,GAClBA,EAAOxE,aAoGTwH,SAAUA,EACVtiB,IAAKA,EACLglB,MAnFF,SAAe7G,GACb,IAAI8G,EAAa1I,EAAY0I,WACzB3c,EAAQ2c,EAAWC,QAAQ/G,GAC3BxH,EAAMsO,EAAWE,WAAa,EAAInZ,EAAQoZ,QAC9C,OAAOxR,GAAO,SAAU0L,GACtB,OAAOnI,GAAQmI,EAAOhX,MAAOA,EAAOA,EAAQqO,EAAM,OA+EpD8I,MA3EF,SAAenX,GACb,OAAOsL,EAAOtL,GAAO,IA2ErByK,IAxEF,SAAaH,EAAOtK,GAClBzC,EAAQ+M,GAAO,SAAU8K,GAKvB,GAJIvL,EAASuL,KACXA,EAAQnT,EAAUmT,IAGhBrL,EAAcqL,GAAQ,CACxB,IAAIrK,EAAMqQ,EAAOpb,GACjB+K,EAAMF,EAAOuK,EAAOrK,GAAO1O,EAAO2e,EAAM5F,GACxCnb,EAASmb,EAAO1R,EAAQ8G,QAAQ4K,OA8Bf7K,EA7BH6K,EA6BQ7E,EA7BDxH,EAAM8I,EA1qBhB,UAwsBXvR,EAASqN,EAASpD,EAAK,QACvB/P,EAAS8F,EAAO9F,QAGlB8F,EAAO/C,SAAQ,SAAUwf,GACvB1kB,EAAK0kB,EAAK,cAAc,aACdviB,GACN+V,UAKNA,IAbJ,IAAuBhG,EAAKgG,EACtBjQ,EACA9F,KA5BJqX,EA/qBgB,YA2uBhB3U,OAzDF,SAAkBuf,GAChBvf,EAAOoO,EAAOmR,GAAS9a,KAAI,SAAUqV,GACnC,OAAOA,EAAO5B,UAEhBvD,EAtrBgB,YA4uBhBtU,QAAS+e,EACThR,OAAQA,EACRkB,MA3CF,SAAeC,EAAM3U,EAAOygB,GAC1B+D,GAAU,SAAUtF,GAClBA,EAAOxK,MAAMC,EAAM3U,EAAOygB,OA0C5ByE,UArBF,SAAmBR,GACjB,OAAOA,EAAgBpB,EAAO5gB,OAAS6hB,EAAQ7hB,QAqB/CyiB,SAlBF,WACE,OAAOZ,EAAQ7hB,OAASkJ,EAAQoZ,WA6pDlCI,OAxoDF,SAAgB1L,EAASyC,EAAavQ,GACpC,IAaIyZ,EACAC,EACAC,EAfAC,EAAmB/L,GAAeC,GAClClY,EAAKgkB,EAAiBhkB,GACtBjB,EAAOilB,EAAiBjlB,KACxBwZ,EAAOyL,EAAiBzL,KAExBqF,EAASjD,EAAYiD,OACrBhD,EAAUD,EAAYD,UAAUE,QAChCqJ,EAAyBtJ,EAAY2D,SACrCtB,EAAOiH,EAAuBjH,KAC9BuB,EAAQ0F,EAAuB1F,MAC/BmD,EAAOuC,EAAuBvC,KAC9B7D,EAAQD,EAAOC,MACfqG,EAActG,EAAO1K,MAYzB,SAASoP,IACPuB,EAAWzZ,EAAQ0Q,YAAcb,GACjC/G,EAAM8J,EAAM,WAAYvI,EAAKrK,EAAQ+P,QACrCjH,EAAMqL,EAAO3D,EAAQ,eAAgBuJ,GAAW,IAChDjR,EAAMqL,EAAO3D,EAAQ,gBAAiBuJ,GAAW,IACjDC,GAAO,GAGT,SAASA,EAAOC,GACd,IAAIC,EAAU3Q,EAAKqJ,IAEfqH,GAASP,EAAS3J,QAAUmK,EAAQnK,OAAS2J,EAASS,SAAWD,EAAQC,UAC3ErR,EAAMqL,EAAO,SAoBjB,WACE,IAAIgG,EAAS,GAETV,IAEFnP,EADA6P,EAASC,IACM,qCACfD,EAAS,QAAUA,EAAS,MAAQJ,GAAW,GAAS,MAAQA,GAAW,GAAQ,KAGrF,OAAOI,EA7BkBE,IACvBP,EAAYtJ,EAAQ,eAAgBnG,EAAKrK,EAAQsa,MACjDR,EAAY,QAmCP9Z,EAAQua,UAAY,KAAOlQ,EAAKrK,EAAQwa,cAAgBf,EAAW,GAAKgB,MAlC7EX,EAAY,SAsCPzP,EAAKrK,EAAQ0a,eAAiBjB,EAAWzZ,EAAQ2a,WAAa,KAAOF,IAAiBL,MAtCnD,GACxCV,EAAWQ,EACX/L,EA3xBc,WA6xBVwL,KAAcA,EAAWiB,OAC3B/hB,EAAY+Z,EArfCrB,cAqfqBoI,GAClCxL,EAzxBa,WAyxBQwL,KAK3B,SAASI,EAAW9R,GAClB,IAAI4S,EAAU7a,EAAQ6a,QAClB9R,EAAOyH,EAAQvI,EAAQ,QAAU,QACrC,OAAO4S,GAAWxQ,EAAKwQ,EAAQ9R,KAAUhD,EAAS8U,GAAW,EAAIA,KAAa,MAehF,SAAST,IACP,OAAO/P,EAAKrK,EAAQma,QAAU5Q,EAAK+N,GAAMvH,MAAQ/P,EAAQ8a,aAW3D,SAASL,IACP,IAAIH,EAAMjQ,EAAKrK,EAAQsa,KACvB,MAAO,cAAgBA,GAAO,MAAQA,GAAO,MAAQta,EAAQoZ,SAAW,IAAMkB,GAAO,MAAQA,GAAO,IAGtG,SAASS,IACP,OAAOxR,EAAK+N,GAAM9G,EAAQ,UAG5B,SAASwK,EAAU1e,EAAO2e,GACxB,IAAIC,EAAQzH,EAAMnX,GAAS,GAC3B,OAAO4e,EAAQ3R,EAAK2R,EAAMxJ,OAAOlB,EAAQ,WAAayK,EAAa,EAAIE,KAAY,EAGrF,SAASC,EAAU9e,EAAO2e,GACxB,IAAIC,EAAQzH,EAAMnX,GAElB,GAAI4e,EAAO,CACT,IAAIjT,EAAQsB,EAAK2R,EAAMxJ,OAAOlB,EAAQ,UAClCR,EAAOzG,EAAK+N,GAAM9G,EAAQ,SAC9B,OAAO1F,GAAI7C,EAAQ+H,IAASiL,EAAa,EAAIE,KAG/C,OAAO,EAGT,SAASE,EAAWJ,GAClB,OAAOG,EAAUtN,EAAQhX,OAAS,GAAKskB,EAAU,GAAKJ,EAAU,EAAGC,GAGrE,SAASE,IACP,IAAID,EAAQzH,EAAM,GAClB,OAAOyH,GAASI,WAAWxS,EAAMoS,EAAMxJ,MAAOlB,EAAQ,kBAAoB,EAO5E,SAASoK,IACP,OAAO9M,EAAQxV,GA5aR,SA4aoB+iB,GAAW,GAAQN,IAGhD,MAAO,CACLpG,MA3GF,WACEuD,IACAvjB,EAAK6R,OAAQ,cAAemJ,GAAStK,EAAM8I,EAtwB5B,YAuwBfvY,EAAG,CAxwBa,UADA,WAywBmBsiB,GACnCtiB,EAxwBe,SAwwBEokB,IAwGjBA,OAAQA,EACRe,SAAUA,EACVC,UAAWA,EACXK,WAAYA,EACZD,UAAWA,EACXG,WAfF,SAAoBtT,GAClB,OAAOqT,WAAWxS,EAAMqL,EAAO3D,EAAQ,WAAavI,EAAQ,QAAU,YAAc,GAepF2S,WAAYA,IAqgDdY,OA//CF,SAAgB1N,EAASyC,EAAavQ,GACpC,IAMIyb,EANAviB,EAAQ2U,GAAeC,GACvBlY,EAAKsD,EAAMtD,GACXse,EAAW3D,EAAY2D,SACvBV,EAASjD,EAAYiD,OACrBhD,EAAUD,EAAYD,UAAUE,QAChCkL,EAAS,GAGb,SAAS/G,IACP/e,EAx4BgB,UAw4BE+lB,GAClB/lB,EAAG,CAx4Ba,UACD,UAu4BmBgmB,IAE9BH,EAAaI,QA2BnB,SAAkBnZ,GAChB,IAAIgV,EAASlE,EAAOxf,MAAMiR,QACtBnO,EAAS4gB,EAAO5gB,OAEpB,GAAIA,EAAQ,CACV,KAAO4gB,EAAO5gB,OAAS4L,GACrBlB,EAAKkW,EAAQA,GAGflW,EAAKkW,EAAOzS,OAAOvC,GAAQgV,EAAOzS,MAAM,EAAGvC,IAAQ7I,SAAQ,SAAUqhB,EAAO5e,GAC1E,IAAIwf,EAASxf,EAAQoG,EACjBkP,EAQV,SAAmB/K,EAAKvK,GACtB,IAAIsV,EAAQ/K,EAAIkV,WAAU,GAG1B,OAFAxlB,EAASqb,EAAO5R,EAAQ8G,QAAQ8K,OAChCA,EAAM5b,GAAK8X,EAAQ8E,KAAK5c,GAAK,SAAWiW,GAAI3P,EAAQ,GAC7CsV,EAZSoK,CAAUd,EAAMxJ,MAAOpV,GACnCwf,EAAS3U,EAAOyK,EAAO8F,EAAO,GAAGhG,OAAS/Y,EAAOub,EAASoD,KAAM1F,GAChEpQ,EAAKka,EAAQ9J,GACb4B,EAAO8C,SAAS1E,EAAOtV,EAAQoG,GAASoZ,EAAS,EAAIhlB,GAASokB,EAAM5e,WAxCtE2f,CAASR,GACTlL,EAAYiJ,OAAOQ,QAAO,IAI9B,SAAS2B,IACP/N,IACA+G,IAGF,SAAS/G,IACPpU,EAAOkiB,GACPxlB,EAAMwlB,GACNxiB,EAAM0U,UAGR,SAASgO,IACP,IAAIlZ,EAAQmZ,IAERJ,IAAe/Y,IACb+Y,EAAa/Y,IAAUA,IACzBxJ,EAAMiV,KAj6BM,WAg8BlB,SAAS0N,IACP,IAAIK,EAAUlc,EAAQ0b,OAEtB,GAAK5N,EAAQxV,GAAGia,KAET,GAAInM,EAAY8V,GAAU,CAC/B,IAAIC,EAAYnc,EAAQwQ,EAAQ,gBAAkBD,EAAYiJ,OAAOwB,UAAU,GAE/EkB,EADiBC,GAAatR,GAAKtB,EAAK2K,EAASC,OAAO3D,EAAQ,UAAY2L,IACpDnc,EAAQwQ,EAAQ,eAAiB1C,EAAQhX,QA5EtD,EA4EgEkJ,EAAQoZ,cAJnF8C,EAAU,EAOZ,OAAOA,EAGT,MAAO,CACLvH,MAAOA,EACP/G,QAASA,IA86CXwO,KA16CF,SAActO,EAASyC,EAAavQ,GAClC,IAiBIqc,EAjBAC,EAAmBzO,GAAeC,GAClClY,EAAK0mB,EAAiB1mB,GACtBuY,EAAOmO,EAAiBnO,KAExBiB,EAAMtB,EAAQ2B,MAAML,IACpBmN,EAAsBhM,EAAYiJ,OAClCwB,EAAYuB,EAAoBvB,UAChCO,EAAagB,EAAoBhB,WACjCH,EAAYmB,EAAoBnB,UAChCL,EAAWwB,EAAoBxB,SAC/BM,EAAakB,EAAoBlB,WACjCmB,EAAwBjM,EAAYD,UACpCE,EAAUgM,EAAsBhM,QAChCO,EAASyL,EAAsBzL,OAC/B0L,EAAyBlM,EAAY2D,SACrCoD,EAAOmF,EAAuBnF,KAC9BnD,EAAQsI,EAAuBtI,MAQnC,SAASuI,IACFnM,EAAY0I,WAAW0D,WAC1BpM,EAAYqM,OAAO5N,SACnB6N,EAAK/O,EAAQxR,OACbiU,EAAYiD,OAAO1E,UAmBvB,SAAS+N,EAAKvgB,GACZwgB,EAAUC,EAAWzgB,GAAO,IAG9B,SAASwgB,EAAUE,EAAUC,GAC3B,IAAKnP,EAAQxV,GAxkBN,QAwkBgB,CACrB,IAAI4kB,EAAcD,EAAcD,EAMpC,SAAcA,GACZ,GAAIlP,EAAQxV,GAAGia,IAAO,CACpB,IAAIjW,EAAQ4c,EAAQ8D,GAChBG,EAAc7gB,EAAQiU,EAAY0I,WAAWmE,UAC/B9gB,EAAQ,GAEP6gB,KACjBH,EAAWK,EAAML,EAAUG,IAI/B,OAAOH,EAjBsCM,CAAKN,GAChDlU,EAAMwO,EAAM,YAAa,YAAc9G,EAAQ,KAAO,IAAM0M,EAAc,OAC1EF,IAAaE,GAAe/O,EAv/Bd,OAygClB,SAASkP,EAAML,EAAUO,GACvB,IAAIC,EAASR,EAAWS,EAASF,GAC7BG,EAAOrC,IAEX,OADA2B,GAAYjM,EAAO2M,GAAQ7S,GAAKC,GAAI0S,GAAUE,IAAS,KAAOH,EAAY,GAAK,GAIjF,SAASvO,IACP8N,EAAUa,KAAe,GACzBtB,EAAWrN,SAGb,SAASkK,EAAQ8D,GAKf,IAJA,IAAIxJ,EAASjD,EAAYiD,OAAOxf,MAC5BsI,EAAQ,EACRshB,EAAcC,IAET1qB,EAAI,EAAGA,EAAIqgB,EAAO1c,OAAQ3D,IAAK,CACtC,IAAIsf,EAAae,EAAOrgB,GAAGmJ,MACvB0Y,EAAWlK,GAAIiS,EAAWtK,GAAY,GAAQuK,GAElD,KAAIhI,GAAY4I,GAId,MAHAA,EAAc5I,EACd1Y,EAAQmW,EAMZ,OAAOnW,EAGT,SAASygB,EAAWzgB,EAAOwhB,GACzB,IAAId,EAAWjM,EAAOqK,EAAU9e,EAAQ,GAiB1C,SAAgBA,GACd,IAAImE,EAAQT,EAAQS,MACpB,MAAiB,WAAVA,GAAsBsa,IAAaC,EAAU1e,GAAO,IAAS,GAAKmE,EAAQua,EAAU1e,IAAU,EAnBxDsU,CAAOtU,IACpD,OAAOwhB,EAQT,SAAcd,GACRhd,EAAQ+d,WAAajQ,EAAQxV,GAAGga,MAClC0K,EAAWxR,GAAMwR,EAAU,EAAGjM,EAAOsK,GAAW,GAAQN,OAG1D,OAAOiC,EAbWgB,CAAKhB,GAAYA,EAGrC,SAASW,IACP,IAAI3N,EAAOQ,EAAQ,QACnB,OAAOjH,EAAK+N,GAAMtH,GAAQzG,EAAK4K,GAAOnE,GAAQe,EAAOwK,GAAW,IAgBlE,SAASkC,EAAS9S,GAChB,OAAOoS,EAAWpS,EAAM4F,EAAY0I,WAAWmE,SAAW,IAAKpd,EAAQ+d,WAezE,MAAO,CACLpJ,MA9HF,WACE0H,EAAa9L,EAAY8L,WACzBzmB,EAAG,CAn/Ba,UAYA,UAFA,UADA,WA0+BiD8mB,IA6HjEuB,KAlHF,SAAcC,EAAM5hB,EAAOyV,EAAMlF,GAoGjC,IAAkB0Q,EACZY,EApGAD,IAAS5hB,IAmGGihB,EAnGeW,EAAOnM,EAoGlCoM,EAAUpN,EAAOsM,EAAMM,IAAeJ,IACnCA,EAAYY,GAAW,EAAIA,GAAW7G,EAAK9G,EAAQ,gBAAkBjH,EAAK4K,GAAO3D,EAAQ,aApG9FxB,IACA8N,EAAUO,EAAMM,IAAeO,EAAOnM,IAAO,IAG/C3C,EA14CS,GA24CTjB,EAngCa,OAmgCI7R,EAAOyV,EAAMmM,GAC9B7B,EAAW1lB,MAAM2F,GAAO,WACtB8S,EA94CK,GA+4CLjB,EArgCY,QAqgCM7R,EAAOyV,EAAMmM,GAC/BrR,GAAYA,QAwGdgQ,KAAMA,EACNC,UAAWA,EACXO,MAAOA,EACPrO,OAAQA,EACRkK,QAASA,EACT6D,WAAYA,EACZY,YAAaA,EACbF,SAAUA,EACVW,cAlBF,SAAuBzT,EAAKqS,GAC1BA,EAAW5W,EAAY4W,GAAYW,IAAgBX,EACnD,IAAIqB,GAAsB,IAAR1T,GAAgBoG,EAAOiM,GAAYjM,EAAO0M,GAAS,IACjEN,GAAsB,IAARxS,GAAiBoG,EAAOiM,GAAYjM,EAAO0M,GAAS,IACtE,OAAOY,GAAelB,GAetBT,WAAYA,IA8wCdzD,WA1wCF,SAAoBnL,EAASyC,EAAavQ,GACxC,IAiBIse,EAEAC,EACAC,EACApF,EArBAqF,EAAmB5Q,GAAeC,GAClClY,EAAK6oB,EAAiB7oB,GACtBuY,EAAOsQ,EAAiBtQ,KAExBiO,EAAO7L,EAAY6L,KACnBuB,EAAcvB,EAAKuB,YACnBF,EAAWrB,EAAKqB,SAChBV,EAAaX,EAAKW,WAClB2B,EAAsBnO,EAAYiD,OAClC+F,EAAWmF,EAAoBnF,SAC/BD,EAAYoF,EAAoBpF,UAChCqF,EAAU3e,EAAQ2e,QAClBC,EAAS9Q,EAAQxV,GAAGia,IACpBsM,EAAU/Q,EAAQxV,GAAGga,IACrBwM,EAAUzZ,EAAM0Z,GAAa,GAC7BC,EAAU3Z,EAAM0Z,GAAa,GAC7BE,EAAYjf,EAAQrJ,OAAS,EAE7BuoB,EAAYD,EAWhB,SAAS/G,IACPqG,EAAajF,GAAU,GACvBkF,EAAUxe,EAAQwe,QAClBpF,EAAUpZ,EAAQoZ,QAClBkF,EAAWlB,IACX,IAAI9gB,EAAQkP,GAAMyT,EAAW,EAAGN,EAAUL,EAAWC,EAAa,GAE9DjiB,IAAU2iB,IACZA,EAAY3iB,EACZ8f,EAAKM,cAIT,SAASyC,IACHb,IAAalB,KACfjP,EA5oCwB,MA0rC5B,SAAS4Q,EAAYhN,EAAMmL,GACzB,IAAI9R,EAASoT,IAAYrF,IAAa,EAAIC,GACtC8E,EAAOkB,EAAiBH,EAAY7T,GAAU2G,GAAQ,EAAI,GAAIkN,IAAaT,GAAWrF,MAE1F,OAAc,IAAV+E,GAAeW,IACZ9T,GAAmB4S,IAAeF,GAAU1L,GAAO,GAC/CA,EAAO,EAAIuM,EAIfpB,EAAcgB,EAAOZ,EAAKY,GAGnC,SAASkB,EAAiBlB,EAAMnJ,EAAMsK,GACpC,GAAI9F,KAAcJ,IAAY,CAC5B,IAAI7c,EAgCR,SAAiC4hB,GAC/B,GAAIW,GAAiC,SAAtB7e,EAAQ+d,WAAwBG,IAASe,EAGtD,IAFA,IAAIjC,EAAWW,IAERX,IAAaD,EAAWmB,GAAM,IAAS/S,GAAQ+S,EAAM,EAAGpQ,EAAQhX,OAAS,GAAIkJ,EAAQmP,SAC1F+O,EAAOe,IAAcf,IAASA,EAIlC,OAAOA,EAzCOoB,CAAwBpB,GAEhC5hB,IAAU4hB,IACZnJ,EAAOmJ,EACPA,EAAO5hB,EACP+iB,GAAW,GAGTnB,EAAO,GAAKA,EAAOI,EAKjBJ,EAJCM,IAAYrT,GAAQ,EAAG+S,EAAMnJ,GAAM,KAAS5J,GAAQmT,EAAUvJ,EAAMmJ,GAAM,GAGzEU,EACKS,EAAWnB,EAAO,IAAMK,EAAanF,GAAWA,GAAWmF,EAAaL,EACtEle,EAAQmP,OACV+O,EAAO,EAAII,EAAW,GAErB,EAPHpF,EAAQqG,EAAOrB,IAWpBmB,GAAYnB,IAASnJ,IACvBmJ,EAAOhF,EAAQqG,EAAOxK,IAASmJ,EAAOnJ,GAAQ,EAAI,UAItDmJ,GAAQ,EAGV,OAAOA,EAeT,SAASZ,EAAKhhB,GACZ,OAAOsiB,GAAUtiB,EAAQiiB,GAAcA,GAAc,EAAIjiB,EAG3D,SAAS8gB,IAGP,IAFA,IAAIjY,EAAMoZ,GAAcpF,KAAcyF,GAAUJ,EAAU,EAAIpF,GAEvDuF,GAAWxZ,KAAQ,GACxB,GAAI4X,EAAWwB,EAAa,GAAG,KAAUxB,EAAW5X,GAAK,GAAO,CAC9DA,IACA,MAIJ,OAAOqG,GAAMrG,EAAK,EAAGoZ,EAAa,GAGpC,SAASrF,EAAQ/G,GACf,OAAO3G,GAAM2N,IAAahH,EAAOiH,EAAUjH,EAAM,EAAGmM,GAGtD,SAASiB,EAAOjjB,GACd,OAAO6c,IAAa1O,EAAInO,EAAOgiB,GAAY1T,IAAOtO,GAASgiB,EAAWC,EAAa,EAAIjiB,GAAS8c,GAQlG,SAASoG,EAASljB,GACZA,IAAU2iB,IACZC,EAAYD,EACZA,EAAY3iB,GAQhB,SAAS6c,IACP,OAAQ/S,EAAYpG,EAAQS,QAAUT,EAAQ6S,aAGhD,SAAS8J,IACP,OAAO7O,EAAQ2B,MAAMnX,GAAG,CAxsDf,EACG,OAusDsC0H,EAAQyf,kBAG5D,MAAO,CACL9K,MAhLF,WACEuD,IACAtiB,EAAG,CA9oCa,UADA,UAsBU,MAynCkCsiB,GAC5DtiB,EA7oCgB,UA6oCEupB,IA8KlBO,GAxJF,SAAYC,EAASC,EAAgB/S,GACnC,IAAK8P,IAAU,CACb,IAAIuB,EAkBR,SAAeyB,GACb,IAAIrjB,EAAQ2iB,EAEZ,GAAI9Y,EAASwZ,GAAU,CACrB,IAAIE,EAAOF,EAAQhP,MAAM,oBAAsB,GAC3CmP,EAAYD,EAAK,GACjBzU,EAASyU,EAAK,GAEA,MAAdC,GAAmC,MAAdA,EACvBxjB,EAAQ8iB,EAAiBH,KAAc,GAAKa,IAAc1U,GAAU,IAAK6T,GAClD,MAAda,EACTxjB,EAAQ8O,EAAS8N,GAAS9N,GAAU0T,GAAQ,GACrB,MAAdgB,IACTxjB,EAAQ0iB,GAAQ,SAGlB1iB,EAAQsiB,EAASe,EAAUnU,GAAMmU,EAAS,EAAGrB,GAG/C,OAAOhiB,EArCMyjB,CAAMJ,GACbrjB,EAAQghB,EAAKY,GAEb5hB,GAAS,IAAMsjB,GAAkBtjB,IAAU2iB,KAC7CO,EAASljB,GACT8f,EAAK6B,KAAKC,EAAM5hB,EAAO4iB,EAAWrS,MAkJtCmT,OA7IF,SAAgB9C,EAAatN,EAAUqQ,EAAMpT,GAC3C0D,EAAYqM,OAAOoD,OAAO9C,EAAatN,EAAUqQ,GAAM,WACrD,IAAI3jB,EAAQghB,EAAKlB,EAAKlD,QAAQyE,MAC9B6B,EAASb,EAAUlU,EAAInO,EAAOgiB,GAAYhiB,GAC1CuQ,GAAYA,QA0IdiS,QAASA,EACTE,QAASA,EACTD,YAAaA,EACb3B,OAAQA,EACRoC,SAAUA,EACVU,SArBF,SAAkBnO,GAChB,OAAOA,EAAOmN,EAAYD,GAqB1B/F,QAASA,EACTqG,OAAQA,EACRY,OApCF,SAAgBjD,GACd,IAAI7kB,EAAU+jB,EAAKlD,QAAQgE,GAC3B,OAAO2B,EAAUrT,GAAMnT,EAAS,EAAGimB,GAAYjmB,GAmC/C8gB,SAAUA,EACVwD,OAAQA,IAsjCVyD,OA9iCF,SAAgBtS,EAASyC,EAAavQ,GACpC,IAaIqgB,EACAC,EAdApnB,EAAQ2U,GAAeC,GACvBlY,EAAKsD,EAAMtD,GACXjB,EAAOuE,EAAMvE,KACbwZ,EAAOjV,EAAMiV,KACbrH,EAAU9G,EAAQ8G,QAClBiM,EAAO/S,EAAQ+S,KACfmB,EAAW3D,EAAY2D,SACvB+E,EAAa1I,EAAY0I,WACzBsH,EAAcrM,EAASrC,OACvBsC,EAAQD,EAASC,MACjBqM,EAAUD,EACVxO,EAAOmC,EAASnC,KAChBE,EAAOiC,EAASjC,KAGhBJ,EAAS,GAEb,SAAS8C,KAUT,WACE,IAAI8L,EAAUzgB,EAAQ6R,QAElB4O,GAAa1O,GAAQE,IA4CzBuO,EAAUD,GAAe9rB,EAAO,MAAOqS,EAAQ+K,QAC/CE,EAAO2O,GAAY,GACnBzO,EAAOyO,GAAY,GACnBL,GAAU,EACV1nB,EAAO6nB,EAAS,CAACzO,EAAME,KACtBsO,GAAepZ,EAAOqZ,EAASrM,IA7C5BpC,GAAQE,IACV9J,EAAO0J,EAAQ,CACbE,KAAMA,EACNE,KAAMA,IAERhJ,EAAQuX,EAASC,EAAU,GAAK,QAChClqB,EAASiqB,EAASF,EAAiBK,mBAAsB3gB,EAAQ0Q,WAE7D+P,IAsBN7qB,EAAG,CA55Ca,UAGF,QAME,UAQC,WAcS,MA63C+DkZ,GACzFna,EAAKsd,EAAM,QAAS5M,EAAMqa,EAAI,MAC9B/qB,EAAKod,EAAM,QAAS1M,EAAMqa,EAAI,MAtB1B5Q,IACArG,EAAa,CAACsJ,EAAME,GA5nCRf,gBA4nC8BiD,EAAMne,IAChDmY,EAt3CmB,iBAs3CQ4D,EAAME,KA5BrCiG,GACAtiB,EAr2CgB,UAq2CE+lB,GAGpB,SAASA,IACP/N,IACA+G,IA2BF,SAAS/G,IACP1U,EAAM0U,UACNtX,EAAYkqB,EAASF,GAEjBD,GACF7mB,EAAO+mB,EAAc,CAACxO,EAAME,GAAQuO,GACpCzO,EAAOE,EAAO,MAEd1J,EAAgB,CAACwJ,EAAME,GAAOhB,IAUlC,SAASyO,EAAGC,GACV1G,EAAWyG,GAAGC,GAAS,GAYzB,SAASe,EAAYE,GAEnB,OAAOriB,EADK,kBAAqBuI,EAAQgL,MAAQ,KAAO8O,EAAQ9Z,EAAQiL,KAAOjL,EAAQmL,MAA3E,kIAAyQjS,EAAQ6gB,WAAa3L,IAAQ,QAIpT,SAASpG,IACP,GAAIiD,GAAQE,EAAM,CAChB,IAAI3V,EAAQwR,EAAQxR,MAChB4iB,EAAYjG,EAAW+F,UACvB8B,EAAY7H,EAAW6F,UACvBiC,EAAY7B,GAAa,GAAK5iB,EAAQ4iB,EAAYnM,EAAKiO,KAAOjO,EAAKhB,KACnEkP,EAAYH,GAAa,GAAKxkB,EAAQwkB,EAAY/N,EAAKtW,MAAQsW,EAAKd,KACxEF,EAAKmP,SAAWhC,EAAY,EAC5BjN,EAAKiP,SAAWJ,EAAY,EAC5BrY,EAAasJ,EA5qCFb,aA4qCoB6P,GAC/BtY,EAAawJ,EA7qCFf,aA6qCoB+P,GAC/B9S,EAz6CqB,iBAy6CM4D,EAAME,EAAMiN,EAAW4B,IAItD,MAAO,CACLjP,OAAQA,EACR8C,MAAOA,EACP/G,QAASA,EACTkB,OAAQA,IAo8BVqS,SA97BF,SAAkBrT,EAASyC,EAAavQ,GACtC,IAYIohB,EACAC,EAbAC,EAAmBzT,GAAeC,GAClClY,EAAK0rB,EAAiB1rB,GACtBjB,EAAO2sB,EAAiB3sB,KACxBwZ,EAAOmT,EAAiBnT,KAExBE,EAAWD,GAAgBpO,EAAQqO,SAAUP,EAAQ4R,GAAG/qB,KAAKmZ,EAAS,MAiF1E,SAA0Bc,GACxB,IAAIiJ,EAAM3D,EAAS2D,IACnBA,GAAO/O,EAAM+O,EAAK,QAAgB,IAAPjJ,EAAa,KACxCT,EA5gDyB,mBA4gDIS,MAnF3BU,EAAWjB,EAASiB,SACpB4E,EAAW3D,EAAY2D,SACvBqN,EAAyBhR,EAAY2D,SACrCtB,EAAO2O,EAAuB3O,KAC9BmF,EAASwJ,EAAuBxJ,OAChCyJ,EAAWxhB,EAAQwhB,SAGnBC,EAAuB,UAAbD,EAoCd,SAASE,IACHpS,KAAciB,EAAYiD,OAAO+F,aACnClL,EAAS1X,OAAOqJ,EAAQ2hB,eACxBN,EAAUD,EAAUK,GAAU,EAC9B3S,IACAX,EA3+CoB,kBA++CxB,SAASY,EAAM1Q,QACA,IAATA,IACFA,GAAO,GAGTojB,IAAYpjB,EACZyQ,IAEKQ,MACHjB,EAASU,QACTZ,EAv/CqB,mBA2/CzB,SAASyT,IACFH,IACHL,GAAWC,EAAUtS,GAAM,GAAS2S,KAIxC,SAAS5S,IACHiJ,IACFlf,EAAYkf,EAAQzG,IAAemQ,GACnChZ,EAAasP,EA/wCF7G,aA+wCsBlR,EAAQ+S,KAAK0O,EAAU,OAAS,WAUrE,SAAS9N,EAAOrX,GACd,IAAI4e,EAAQ3K,EAAYiD,OAAOC,MAAMnX,GACrC+R,EAASe,IAAI8L,IAAU9R,EAAa8R,EAAMxJ,MAjGhBmQ,yBAiGmD7hB,EAAQqO,UAGvF,MAAO,CACLsG,MAlFF,WACM6M,KAQN,WACMxhB,EAAQ8hB,cACVntB,EAAKie,EAAM,yBAAyB,SAAU/c,GAC5CurB,EAAqB,eAAXvrB,EAAE2C,KACZopB,OAIA5hB,EAAQ+hB,cACVptB,EAAKie,EAAM,oBAAoB,SAAU/c,GACvCwrB,EAAqB,YAAXxrB,EAAE2C,KACZopB,OAIA7J,GACFpjB,EAAKojB,EAAQ,SAAS,WACpB0J,EAAUC,IAAS3S,GAAM,MAI7BnZ,EAAG,CAz/CU,OAcE,SAPC,WAk/C8ByY,EAASc,QACvDvZ,EA1/Ca,OA0/CE+d,GA7BbqO,GACAjK,GAAUtP,EAAasP,EAntCT7G,gBAmtCgCgD,EAASC,MAAMne,IAC7DyrB,GAAWC,IACX5S,MA8EFlB,QAASS,EAASW,OAClB0S,KAAMA,EACN3S,MAAOA,EACPO,SAAUA,IAw1BZ2S,MAp1BF,SAAenU,EAASyC,EAAavQ,GACnC,IACIpK,EADmBiY,GAAeC,GACZlY,GAS1B,SAASssB,EAAMC,GACb5R,EAAYiD,OAAO3Z,SAAQ,SAAUqhB,GACnC,IAAI7B,EAAMxR,EAAMqT,EAAMlkB,WAAakkB,EAAMxJ,MAAO,OAE5C2H,GAAOA,EAAI+I,KACbrK,EAAOoK,EAAQ9I,EAAK6B,MAK1B,SAASnD,EAAOoK,EAAQ9I,EAAK6B,GAC3BA,EAAMpS,MAAM,aAAcqZ,EAAS,+BAAkC9I,EAAI+I,IAAM,KAAQ,IAAI,GAC3FnZ,EAAQoQ,EAAK8I,EAAS,OAAS,IAGjC,MAAO,CACLxN,MAvBF,WACM3U,EAAQkiB,QACVtsB,EAjiDsB,kBAiiDIyP,EAAM0S,GAAQ,IACxCniB,EAAG,CA9jDW,UAUA,UADA,WAqjDoCyP,EAAM6c,GAAO,MAqBjEtU,QAASvI,EAAM6c,GAAO,KAyzBxBtF,OA/yBF,SAAgB9O,EAASyC,EAAavQ,GACpC,IAWIqO,EACAxB,EAZAwV,EAAmBxU,GAAeC,GAClClY,EAAKysB,EAAiBzsB,GACtBuY,EAAOkU,EAAiBlU,KAExBiB,EAAMtB,EAAQ2B,MAAML,IACpBgN,EAAO7L,EAAY6L,KACnBuB,EAAcvB,EAAKuB,YACnBF,EAAWrB,EAAKqB,SAChBW,EAAgBhC,EAAKgC,cACrBtB,EAAYV,EAAKU,UACjB+B,EAAU/Q,EAAQxV,GAAGga,IAGrBgQ,EAAW,EAOf,SAAStC,EAAO9C,EAAatN,EAAUqQ,EAAMsC,EAAYC,GACvD,IAAIzN,EAAO4I,IAGX,GAFA8E,IAEIxC,KAAUpB,IAAYT,KAAkB,CAC1C,IAAIV,EAAOnN,EAAYiJ,OAAO6B,aAC1BzK,EAASnF,GAAKyR,GAAeQ,EAAO9S,GAAME,GAAIoS,GAAeQ,IAAS,EAC1ER,EAAcd,EAAKW,WAAWxM,EAAY0I,WAAWkH,OAAOjD,EAAcQ,IAAS9M,EAGrF,IAAI8R,EAAa3X,GAAmBgK,EAAMmI,EAAa,GACvDoF,EAAW,EACX1S,EAAW8S,EAAa,EAAI9S,GAAYjF,GAAIG,GAAIoS,EAAcnI,GApC9C,IACD,KAoCflI,EAAW0V,EACXlU,EAAWD,GAAgBwB,EAAU+S,EAAOtd,EAAMyJ,EAAQiG,EAAMmI,EAAasF,GAAc,GAC3FpT,EAtgEY,GAugEZjB,EAlnDe,UAmnDfE,EAAS1X,QAGX,SAASgsB,IACPvT,EA9gEO,GA+gEPvC,GAAYA,IACZsB,EAxnDiB,YA2nDnB,SAASW,EAAOiG,EAAM6N,EAAIJ,EAAa5T,GACrC,IA2Bcva,EACVwuB,EA5BA7F,EAAWW,IAEX1I,GADSF,GAAQ6N,EAAK7N,IA0BZ1gB,EA1B2Bua,GA2BrCiU,EAAa7iB,EAAQ6iB,YACLA,EAAWxuB,GAAK,EAAIqW,KAAKoY,IAAI,EAAIzuB,EAAG,IA3BnC2oB,GAAYsF,EACjCxF,EAAUE,EAAW/H,GAEjB4J,IAAY2D,GAAepE,MAC7BkE,GA1DgB,GA4DZxX,GAAImK,GA9Dc,IA+DpB+K,EAAOvC,EAASW,GAAc,IA9DhB,KA8DyC,EAAOvR,GAAU,IAK9E,SAAS4V,IACHpU,GACFA,EAASW,SAIb,SAASA,IACHX,IAAaA,EAASiB,aACxBmT,IACAE,KASJ,MAAO,CACLhO,MAjEF,WACE/e,EA5mDa,OA4mDE6sB,GACf7sB,EAAG,CArmDa,UADA,WAsmDmBoZ,IAgEnCpB,QAAS6U,EACTzC,OAAQA,EACRhR,OAAQA,IA4tBV+T,KAntBF,SAAcjV,EAASyC,EAAavQ,GAClC,IAiBIgjB,EACAC,EACAC,EACAC,EACAC,EAEAC,EACAnC,EACAloB,EAzBAsqB,EAAmBzV,GAAeC,GAClClY,EAAK0tB,EAAiB1tB,GACtBuY,EAAOmV,EAAiBnV,KACxBxZ,EAAO2uB,EAAiB3uB,KACxBwY,EAASmW,EAAiBnW,OAE1BsC,EAAQ3B,EAAQ2B,MAChB2M,EAAO7L,EAAY6L,KACnBQ,EAASrM,EAAYqM,OACrB3D,EAAa1I,EAAY0I,WACzB9E,EAAQ5D,EAAY2D,SAASC,MAC7BwC,EAASpG,EAAY0F,MAAMU,OAC3B4M,EAAyBhT,EAAYD,UACrCE,EAAU+S,EAAuB/S,QACjCO,EAASwS,EAAuBxS,OAChC4M,EAAcvB,EAAKuB,YACnBS,EAAgBhC,EAAKgC,cAMrBoF,GAAW,EAgBf,SAAStL,IACP,IAAIK,EAAOvY,EAAQuY,KACnBkL,GAASlL,GACT4K,EAAkB,SAAT5K,EAGX,SAASmL,EAAc7tB,GAGrB,GAFAwtB,GAAiB,GAEZnC,EAAU,CACb,IAAIyC,EAAUC,EAAa/tB,GA4IVguB,EA1IDhuB,EAAEmD,OA2IhB8qB,EAAS9jB,EAAQ8jB,OACbrc,EAAQoc,EAAS,8CAAwDC,GAAWrc,EAAQoc,EAASC,KA5I7EH,GAAY9tB,EAAEkuB,SACrC9K,EAAW0D,SAUd/S,EAAQ/T,GAAG,IATXmD,EAAS2qB,EAAUxP,EAAQ3N,OAC3B4c,EAAW3T,EAAMnX,GAAG,CAtnEjB,EACG,IAsnEN4qB,EAAgB,KAChBvuB,EAAKqE,EA15CW,sBA05CkBgrB,EAAe7O,IACjDxgB,EAAKqE,EAAQqZ,GAAmB4R,EAAa9O,IAC7CiH,EAAKpN,SACL4N,EAAO5N,SACPkV,EAAKruB,KAiIb,IAAqBguB,EACfC,EA1HN,SAASE,EAAcnuB,GAMrB,GALK4Z,EAAMnX,GAnoEA,KAooETmX,EAAML,IApoEG,GAqoETjB,EApvDW,SAuvDTtY,EAAEsuB,WACJ,GAAIf,EAAU,CACZhH,EAAKU,UAAUkG,EAAyBoB,EAAUvuB,IA8GvC2tB,GAAY1V,EAAQxV,GAAGga,IA/hD3B,EA+hD+C,IA7GtD,IAAI+R,EAAUC,EAASzuB,GAj7CZ,IAk7CP0uB,EAAcf,KAAcA,EAAWpF,MAEvCiG,GAAWE,IACbL,EAAKruB,GAGPwtB,GAAiB,EACjBlV,EAjwDa,YAkwDbvE,EAAQ/T,QA+Dd,SAA2BA,GACzB,OAAOiV,GAAIsZ,EAAUvuB,IAAMiV,GAAIsZ,EAAUvuB,GAAG,KA/D/B2uB,CAAkB3uB,KAC3ButB,EAqDN,SAAqBvtB,GACnB,IAAI4uB,EAAazkB,EAAQ0kB,iBACrBC,EAAQ5e,EAAS0e,GACjBG,EAAQD,GAASF,EAAWG,OAAS,EACrCC,GAASF,EAAQF,EAAWI,OAASJ,IAAe,GACxD,OAAO3Z,GAAIsZ,EAAUvuB,KAAO+tB,EAAa/tB,GAAKgvB,EAAQD,GA1DvCE,CAAYjvB,GACvB+T,EAAQ/T,IAKd,SAASouB,EAAYpuB,GACf4Z,EAAMnX,GA7pEC,KA8pETmX,EAAML,IAjqED,GAkqELjB,EA5wDc,YA+wDZiV,KAsBN,SAAcvtB,GACZ,IAAIkvB,EA8BN,SAAyBlvB,GACvB,GAAIiY,EAAQxV,GAAGia,MAAUiR,EAAU,CACjC,IAAInU,EAAOiV,EAASzuB,GAEpB,GAAIwZ,GAAQA,EAjgDC,IAkgDX,OAAO+U,EAAUvuB,GAAKwZ,EAI1B,OAAO,EAvCQ2V,CAAgBnvB,GAC3BqnB,EAyCN,SAA4B6H,GAC1B,OAAOpH,IAAgBlS,GAAKsZ,GAAYta,EAAIK,GAAIia,IAAa/kB,EAAQilB,YAAc,KAAM9B,EAAStF,IAAWtN,EAAYiJ,OAAOuB,YAAc/a,EAAQklB,eAAiB,IA1CrJC,CAAmBJ,GACjC5V,EAASnP,EAAQmP,QAAUnP,EAAQolB,aACvCzO,GAAO,GAEHwM,EACFlK,EAAW+G,OAAO9C,EAAa,EAAGld,EAAQigB,MACjCnS,EAAQxV,GAl3CZ,QAm3CL2gB,EAAWyG,GAAG3O,EAAOtF,GAAKsZ,IAAa,EAAI5V,EAAS,IAAM,IAAMA,EAAS,IAAM,KACtErB,EAAQxV,GAAGga,KAAUkR,GAAYrU,EAC1C8J,EAAWyG,GAAGtB,GAAc,GAAQ,IAAM,KAE1CnF,EAAWyG,GAAGzG,EAAWkH,OAAOjD,IAAc,GAGhDvG,GAAO,GArCLsH,CAAKpoB,GACL+T,EAAQ/T,IAGVsX,EAAOnU,EA38Ce,sBA28CcgrB,GACpC7W,EAAOnU,EAAQqZ,GAAmB4R,GAClCb,GAAW,EAGb,SAASiC,EAAQxvB,IACVqrB,GAAYmC,GACfzZ,EAAQ/T,GAAG,GAIf,SAASquB,EAAKruB,GACZqtB,EAAgBD,EAChBA,EAAYptB,EACZmtB,EAAerF,IAkDjB,SAASyG,EAAUvuB,EAAGyvB,GACpB,OAAOC,EAAQ1vB,EAAGyvB,GAAcC,EAAQC,EAAa3vB,GAAIyvB,GAG3D,SAAShB,EAASzuB,GAChB,OAAOsU,EAAOtU,GAAKsU,EAAOqb,EAAa3vB,IAGzC,SAAS2vB,EAAa3vB,GACpB,OAAOotB,IAAcptB,GAAKqtB,GAAiBD,EAG7C,SAASsC,EAAQ1vB,EAAGyvB,GAClB,OAAQ1B,EAAa/tB,GAAKA,EAAE4vB,eAAe,GAAK5vB,GAAG,OAAS2a,EAAQ8U,EAAa,IAAM,MAYzF,SAAS1B,EAAa/tB,GACpB,MAA6B,oBAAf6vB,YAA8B7vB,aAAa6vB,WAO3D,SAASjC,EAAQrvB,GACf8sB,EAAW9sB,EAGb,MAAO,CACLugB,MAnLF,WACEhgB,EAAKwf,EA/3CiB,sBA+3CWzO,EAAMyP,IACvCxgB,EAAKwf,EAAO9B,GAAmB3M,EAAMyP,IACrCxgB,EAAKwf,EAl4CiB,uBAk4CWuP,EAAevO,IAChDxgB,EAAKwf,EAAO,QAASkR,EAAS,CAC5BhQ,SAAS,IAEX1gB,EAAKwf,EAAO,YAAavK,GACzBhU,EAAG,CA9tDa,UAUA,WAotDmBsiB,IA4KnCuL,QAASA,EACTkC,WAXF,WACE,OAAOvC,KA6gBTwC,SAhfF,SAAkB9X,EAASyC,EAAavQ,GACtC,IAOIhH,EACAkoB,EARA2E,EAAoBhY,GAAeC,GACnClY,EAAKiwB,EAAkBjwB,GACvBjB,EAAOkxB,EAAkBlxB,KACzBwY,EAAS0Y,EAAkB1Y,OAE3ByF,EAAO9E,EAAQ8E,KACfpC,EAAUD,EAAYD,UAAUE,QAWpC,SAAS0H,IACP,IAAI4N,EAAW9lB,EAAQ8lB,SAEnBA,IACF9sB,EAAsB,WAAb8sB,EAAwBtf,OAASoM,EAC1Cje,EAAKqE,EAzBU,UAyBc+sB,IAIjC,SAASnY,IACPT,EAAOnU,EA9BU,WAqCnB,SAAS2a,IACP,IAAIqS,EAAY9E,EAChBA,GAAW,EACXzb,GAAS,WACPyb,EAAW8E,KAIf,SAASD,EAAUlwB,GACjB,IAAKqrB,EAAU,CACb,IAAIxsB,EAAMkhB,GAAa/f,GAEnBnB,IAAQ8b,EA1uDDJ,aA2uDTtC,EAAQ4R,GAAG,KACFhrB,IAAQ8b,EA3uDPJ,eA4uDVtC,EAAQ4R,GAAG,MAKjB,MAAO,CACL/K,MA7CF,WACEuD,IACAtiB,EAj6DgB,UAi6DEgY,GAClBhY,EAl6DgB,UAk6DEsiB,GAClBtiB,EA36Da,OA26DE+d,IA0Cf/F,QAASA,EACT6V,QA3BF,SAAiBrvB,GACf8sB,EAAW9sB,KAidb6xB,SA/aF,SAAkBnY,EAASyC,EAAavQ,GACtC,IAAIkmB,EAAoBrY,GAAeC,GACnClY,EAAKswB,EAAkBtwB,GACvBsY,EAAMgY,EAAkBhY,IACxBvZ,EAAOuxB,EAAkBvxB,KACzBwZ,EAAO+X,EAAkB/X,KAEzBgY,EAAoC,eAArBnmB,EAAQomB,SACvB3Z,EAAS,CAr+DG,QAcG,YAw9Df4Z,EAAU,GASd,SAASnO,IACPhiB,EAAMmwB,GAaN9V,EAAYiD,OAAO3Z,SAAQ,SAAUqhB,GACnCjR,EAASiR,EAAMxJ,MAnCA,iDAmCuB7X,SAAQ,SAAUwf,GACtD,IAAI+I,EAAMhZ,EAAaiQ,EAtCNwI,oBAuCbyE,EAASld,EAAaiQ,EAtCNkN,2BAwCpB,GAAInE,IAAQ/I,EAAI+I,KAAOkE,IAAWjN,EAAIiN,OAAQ,CAC5C,IAAIjd,EAAYrJ,EAAQ8G,QAAQpQ,QAC5B2E,EAASge,EAAIf,cACb5hB,EAAUmR,EAAMxM,EAAQ,IAAMgO,IAAc5U,EAAO,OAAQ4U,EAAWhO,GAC1EgrB,EAAQ7kB,KAAK,CAAC6X,EAAK6B,EAAOxkB,IAC1B2iB,EAAI+I,KAAOnZ,EAAQoQ,EAAK,eApB1B8M,EACFK,KAEAtY,EAAIzB,GACJ7W,EAAG6W,EAAQga,GACXA,KAqBJ,SAASA,KACPJ,EAAUA,EAAQze,QAAO,SAAU9R,GACjC,IAAIkf,EAAWhV,EAAQoZ,UAAYpZ,EAAQ0mB,cAAgB,GAAK,GAAK,EACrE,OAAO5wB,EAAK,GAAGgf,SAAShH,EAAQxR,MAAO0Y,IAAY2R,EAAK7wB,OAElDgB,QAAUoX,EAAIzB,GAGxB,SAASka,EAAK7wB,GACZ,IAAIujB,EAAMvjB,EAAK,GACfS,EAAST,EAAK,GAAG4b,MAvuDDH,cAwuDhB5c,EAAK0kB,EAAK,aAAchU,EAAMuhB,EAAQ9wB,IACtC2S,EAAa4Q,EAAK,MAAOjQ,EAAaiQ,EAhEjBwI,qBAiErBpZ,EAAa4Q,EAAK,SAAUjQ,EAAaiQ,EAhEjBkN,4BAiExBhe,EAAgB8Q,EAlEKwI,oBAmErBtZ,EAAgB8Q,EAlEQkN,2BAqE1B,SAASK,EAAO9wB,EAAMD,GACpB,IAAIwjB,EAAMvjB,EAAK,GACXolB,EAAQplB,EAAK,GACjBQ,EAAY4kB,EAAMxJ,MAlvDFH,cAovDD,UAAX1b,EAAE2C,OACJgB,EAAO1D,EAAK,IACZmT,EAAQoQ,EAAK,IACblL,EA9gEsB,kBA8gEMkL,EAAK6B,GACjC/M,EAhiEa,WAmiEfgY,GAAgBK,IAGlB,SAASA,IACPH,EAAQvvB,QAAU6vB,EAAKN,EAAQhJ,SAGjC,MAAO,CACL1I,MA3EF,WACM3U,EAAQomB,WACVlO,IACAtiB,EAr+Dc,UAq+DIsiB,KAyEpBtK,QAASvI,EAAMnP,EAAOmwB,GACtBI,MAAOA,IAwVTI,WApVF,SAAoB/Y,EAASyC,EAAavQ,GACxC,IAaIsX,EACAwP,EAdA5tB,EAAQ2U,GAAeC,GACvBlY,EAAKsD,EAAMtD,GACXuY,EAAOjV,EAAMiV,KACbxZ,EAAOuE,EAAMvE,KACb6e,EAASjD,EAAYiD,OACrBU,EAAW3D,EAAY2D,SACvB+E,EAAa1I,EAAY0I,WACzBE,EAAWF,EAAWE,SACtB+G,EAAWjH,EAAWiH,SACtBR,EAAKzG,EAAWyG,GAChBlP,EAAUD,EAAYD,UAAUE,QAChC+P,EAAcrM,EAAShC,WACvBtL,EAAQ,GAqBZ,SAASgH,IACH0J,IACF9d,EAAO+mB,EAActb,EAAMqS,EAAK1Y,UAAY0Y,GAC5ChhB,EAAYghB,EAAMwP,GAClB5wB,EAAM0Q,GACN0Q,EAAO,MAGTpe,EAAM0U,UA4CR,SAASyX,EAAQlT,GACfuN,EAAG,IAAMvN,GAAM,GAGjB,SAAS4T,EAAU5T,EAAMtc,GACvB,IAAIiB,EAAS8P,EAAM9P,OACfpC,EAAMkhB,GAAa/f,GACnBkxB,EAAMC,IACNC,GAAY,EAEZvyB,IAAQ8b,EAx7DEJ,cAw7DmB,EAAO2W,GACtCE,IAAa9U,EAAOrb,EACXpC,IAAQ8b,EA37DNJ,aA27D0B,EAAO2W,GAC5CE,KAAc9U,EAAOrb,GAAUA,EACd,SAARpC,EACTuyB,EAAW,EACM,QAARvyB,IACTuyB,EAAWnwB,EAAS,GAGtB,IAAIW,EAAOmP,EAAMqgB,GAEbxvB,IACFgJ,EAAMhJ,EAAKssB,QACXrE,EAAG,IAAMuH,GACTrd,EAAQ/T,GAAG,IAIf,SAASmxB,IACP,OAAOhnB,EAAQknB,qBAAuBlnB,EAAQ0Q,UAGhD,SAAS+C,EAAMnX,GACb,OAAOsK,EAAMqS,EAAWsG,OAAOjjB,IAGjC,SAASwS,IACP,IAAIiD,EAAO0B,EAAMyM,GAAS,IACtBtM,EAAOH,EAAMyM,KAEjB,GAAInO,EAAM,CACR,IAAIgS,EAAShS,EAAKgS,OAClBztB,EAAYytB,EAAQzS,IACpB/I,EAAgBwb,EA/6DF7S,iBAg7DdzI,EAAasb,EAr7DH,YAq7DuB,GAGnC,GAAInQ,EAAM,CACR,IAAIuT,EAAUvT,EAAKmQ,OACnBxtB,EAAS4wB,EAAS7V,IAClB7I,EAAa0e,EAt7DCjW,iBAs7DuB,GACrCzI,EAAa0e,EA57DH,WA47DuB,IAGnChZ,EAlrE2B,qBAkrEI,CAC7BmJ,KAAMA,EACN1Q,MAAOA,GACNmL,EAAM6B,GAGX,MAAO,CACLhN,MAAOA,EACP+N,MApIF,SAASA,IACP/G,IACAhY,EAAG,CArkEa,UADA,UAsBU,MAgjEkC+e,GAC5D,IAAI8L,EAAUzgB,EAAQkS,WACtBqO,GAAetX,EAAQsX,EAAaE,EAAU,GAAK,QAE/CA,IACF7qB,EAAG,CAllEQ,OAcE,SACE,YAmkEgCkZ,GAqBnD,WACE,IAAIhY,EAASgX,EAAQhX,OACjBgQ,EAAU9G,EAAQ8G,QAClBiM,EAAO/S,EAAQ+S,KACfqG,EAAUpZ,EAAQoZ,QAClBzO,EAAMwO,IAAaF,EAAWmE,SAAW,EAAIvS,GAAK/T,EAASsiB,GAE/D7iB,EADA+gB,EAAOiJ,GAAe9rB,EAAO,KAAMqS,EAAQoL,WAAYgC,EAASC,MAAMmE,eACvDwO,EAAoB1U,uBAA0B4U,KAC7Dve,EAAa6O,EAAMtG,GAAM,WACzBvI,EAAa6O,EAl2DApG,aAk2DkB6B,EAAK1Z,QACpCoP,EAAa6O,EAh2DMpG,mBAg2DkB8V,MAAmBnX,GAAM,WAAa,IAE3E,IAAK,IAAI1c,EAAI,EAAGA,EAAIwX,EAAKxX,IAAK,CAC5B,IAAIi0B,EAAK3yB,EAAO,KAAM,KAAM6iB,GACxByM,EAAStvB,EAAO,SAAU,CAC5B4yB,MAAOvgB,EAAQqL,KACf3Z,KAAM,UACL4uB,GACChU,EAAWI,EAAOwF,MAAM7lB,GAAG8K,KAAI,SAAUid,GAC3C,OAAOA,EAAMxJ,MAAM1b,MAEjBkB,GAAQiiB,KAAcC,EAAU,EAAIrG,EAAKuU,MAAQvU,EAAKW,OAC1D/e,EAAKovB,EAAQ,QAAS1e,EAAMggB,EAASlyB,IAEjC6M,EAAQunB,oBACV5yB,EAAKovB,EAAQ,UAAW1e,EAAM0gB,EAAW5yB,IAG3CsV,EAAa2e,EAAIpW,GAAM,gBACvBvI,EAAasb,EAAQ/S,GAAM,OAC3BvI,EAAasb,EA13DC7S,gBA03DsBkC,EAASjV,KAAK,MAClDsK,EAAasb,EAx3DF7S,aAw3DsBpF,GAAO5U,EAAM/D,EAAI,IAClDsV,EAAasb,EA/3DH,YA+3DuB,GACjCnd,EAAMpF,KAAK,CACT4lB,GAAIA,EACJrD,OAAQA,EACR5R,KAAMhf,KAxDRq0B,GACA1Y,IACAX,EAjkEyB,qBAikEM,CAC7BmJ,KAAMA,EACN1Q,MAAOA,GACN6M,EAAM3F,EAAQxR,UAwHnBsR,QAASA,EACT6F,MAAOA,EACP3E,OAAQA,IA6LV2Y,KAvLF,SAAc3Z,EAASyC,EAAavQ,GAClC,IAAI6S,EAAe7S,EAAQ6S,aACvBG,EAAahT,EAAQgT,WACrBvG,EAAS,GAEb,SAASkI,IACP7G,EAAQuF,QAAQxZ,SAAQ,SAAUb,GAC3BA,EAAO0uB,WACVC,EAAK7Z,EAAS9U,EAAOua,QACrBoU,EAAK3uB,EAAOua,OAAQzF,OAIpB+E,GAyBN,WACE,IAAI3Z,EAAQ2U,GAAeC,GACvBlY,EAAKsD,EAAMtD,GACfA,EA/vEc,QA+vEEyvB,GAChBzvB,EAvuEsB,KAuuEEmwB,GACxBnwB,EAAG,CArwEa,UAUA,WA2vEmBkZ,GACnCrC,EAAOjL,KAAKtI,GACZA,EAAMiV,KA/uEqB,qBA+uEUL,EAAQuF,SA/B3CuU,GAIJ,SAASha,IACPnB,EAAO5S,SAAQ,SAAUX,GACvBA,EAAM0U,aAER1X,EAAMuW,GAQR,SAASkb,EAAKpU,EAAQva,GACpB,IAAIE,EAAQ2U,GAAe0F,GAC3Bra,EAAMtD,GAxvEO,QAwvEQ,SAAU0G,EAAOyV,EAAMmM,GAC1CllB,EAAO0mB,GAAG1mB,EAAOV,GAAGia,IAAQ2L,EAAO5hB,MAErCmQ,EAAOjL,KAAKtI,GAad,SAAS4V,IACPrG,EAAa8H,EAAY2D,SAASoD,KAx/DfpG,mBAw/DuClR,EAAQ0Q,YAAcb,GAAM,WAAa,IAGrG,SAASwV,EAAQnK,GACfpN,EAAQ4R,GAAGxE,EAAM5e,OAGnB,SAASypB,EAAU7K,EAAOrlB,GACpB8Q,EAASkP,GAAcD,GAAa/f,MACtCwvB,EAAQnK,GACRtR,EAAQ/T,IAIZ,MAAO,CACLqhB,MAAO7R,EAAMkL,EAAY0F,MAAM7G,IAAK,CAClC4D,WAAY5M,EAAY4M,GAAcH,EAAeG,IACpD,GACH2B,MAAOA,EACP/G,QAASA,EACT+N,QA5CF,WACE/N,IACA+G,OA6JFkT,MA/GF,SAAe/Z,EAASyC,EAAavQ,GACnC,IACIrL,EADoBkZ,GAAeC,GACVnZ,KAEzBmzB,EAAW,EAQf,SAASC,EAAQlyB,GACf,GAAIA,EAAEsuB,WAAY,CAChB,IAAI6D,EAASnyB,EAAEmyB,OACXzK,EAAYyK,EAAS,EACrB5d,EAAYD,EAAOtU,GAEnBoyB,EAAOjoB,EAAQkoB,mBAAqB,EAEpCC,EAAQnoB,EAAQooB,YAAc,EAE9Btd,GAAIkd,GAAUC,GAAQ7d,EAAY0d,EAAWK,IAC/Cra,EAAQ4R,GAAGnC,EAAY,IAAM,KAC7BuK,EAAW1d,GAOjB,SAAuBmT,GACrB,OAAQvd,EAAQqoB,cAAgBva,EAAQ2B,MAAMnX,GAzsFrC,KAysFsG,IAAnDiY,EAAY0I,WAAW8F,YAAYxB,GAL7F+K,CAAc/K,IAAc3T,EAAQ/T,IAQxC,MAAO,CACL8e,MA9BF,WACM3U,EAAQuoB,OACV5zB,EAAK4b,EAAY2D,SAASC,MAAO,QAAS4T,EAAS5S,OAwGvDqT,KAtEF,SAAc1a,EAASyC,EAAavQ,GAClC,IACIpK,EADoBiY,GAAeC,GACZlY,GAEvBue,EAAQ5D,EAAY2D,SAASC,MAC7BsM,EAAUzgB,EAAQyoB,OAASzoB,EAAQ6S,aACnC6V,EAAKj0B,EAAO,OAtiEHkd,cAuiETtD,EAAWD,GATM,GAS4B/I,EAAM0S,GAAQ,IAa/D,SAASA,EAAOlE,GACdpL,EAAa0L,EA5kEDjD,YA4kEmB2C,GAE3BA,GACFlb,EAAOwb,EAAOuU,GACdra,EAAS1X,UAET6C,EAAOkvB,GACPra,EAASW,UASb,SAASyU,EAAQvC,GACXT,GACFhY,EAAa0L,EA/lEHjD,YA+lEqBgQ,EAAW,MAAQ,UAItD,MAAO,CACLvM,MAnCF,WACM8L,IACFgD,GAASlT,EAAY4Q,SAAS7R,YAC9B7G,EAAa0L,EAlkEDjD,eAkkEqB,GACjCwX,EAAGC,YAAc,IACjB/yB,EAl0EoB,gBAk0EIyP,EAAMoe,GAAS,IACvC7tB,EAj0EqB,iBAi0EIyP,EAAMoe,GAAS,IACxC7tB,EAAG,CA11ES,QAcG,YA40EmByP,EAAM0S,GAAQ,MA6BlD0L,QAASA,EACT7V,QAdF,WACErF,EAAgB4L,EAAO,CAzlEXjD,YAEEA,cADFA,cAylEZ1X,EAAOkvB,QAoDPE,GAAW,CACbpwB,KAAM,QACNwf,KAAM,SACN6Q,MAAO,IACPzP,QAAS,EACT1E,aAAa,EACb7C,QAAQ,EACRK,YAAY,EACZqV,oBAAoB,EACpBlZ,SAAU,IACVyT,cAAc,EACdC,cAAc,EACdJ,eAAe,EACfmH,OAAQ,gCACRvQ,MAAM,EACN7H,UAAW,MACXqN,WAAW,EACXxJ,eAAgB,6CAChBkU,MAAM,EACN3hB,QAAS2K,GACTsB,KAlCS,CACThB,KAAM,iBACNE,KAAM,aACNxV,MAAO,oBACPukB,KAAM,mBACNtN,OAAQ,iBACR4T,MAAO,gBACP5F,KAAM,iBACN3S,MAAO,iBACP7S,SAAU,WACVwV,MAAO,QACPrY,OAAQ,yBACRub,WAAY,YAuBZuB,cAAe,CACb0S,MAAO,EACPE,YAAa,EACbvH,SAAU,UAId,SAASwH,GAAKlb,EAASyC,EAAavQ,GAClC,IAAIwT,EAASjD,EAAYiD,OAMzB,SAAS0E,IACP1E,EAAO3Z,SAAQ,SAAUqhB,GACvBA,EAAMpS,MAAM,YAAa,eAAiB,IAAMoS,EAAM5e,MAAQ,SASlE,MAAO,CACLqY,MAhBF,WACE9G,GAAeC,GAASlY,GAAG,CAn8EX,UASA,WA07E2CsiB,IAgB3DvhB,MAPF,SAAe2F,EAAO2sB,GACpBzV,EAAO1K,MAAM,aAAc,WAAa9I,EAAQ6oB,MAAQ,MAAQ7oB,EAAQ8oB,QACxErjB,EAASwjB,IAMTja,OAAQtJ,GAIZ,SAASwV,GAAMpN,EAASyC,EAAavQ,GACnC,IAKIkpB,EALA9M,EAAO7L,EAAY6L,KACnBnD,EAAa1I,EAAY0I,WACzB2D,EAASrM,EAAYqM,OACrBtF,EAAO/G,EAAY2D,SAASoD,KAC5B6R,EAAa9jB,EAAMyD,EAAOwO,EAAM,cA+BpC,SAAStI,IACPma,EAAW,IACXvM,EAAO5N,SAkBT,MAAO,CACL2F,MAjDF,WACE9G,GAAeC,GAASnZ,KAAK2iB,EAAM,iBAAiB,SAAUzhB,GACxDA,EAAEmD,SAAWse,GAAQ4R,IACvBla,IACAka,SA8CJvyB,MAzCF,SAAe2F,EAAO2sB,GACpB,IAAI/L,EAAcd,EAAKW,WAAWzgB,GAAO,GACrC0gB,EAAWZ,EAAKuB,cAChBkL,EAqBN,SAAkBvsB,GAChB,IAAIysB,EAAc/oB,EAAQ+oB,YAE1B,GAAIjb,EAAQxV,GAAGga,KAAUyW,EAAa,CACpC,IAAIhX,EAAOkH,EAAWiH,UAAS,GAC3B/a,EAAM8T,EAAWmE,SAErB,GAAa,IAATrL,GAAczV,GAAS6I,GAAO4M,GAAQ5M,GAAiB,IAAV7I,EAC/C,OAAOysB,EAIX,OAAO/oB,EAAQ6oB,MAjCHO,CAAS9sB,GAEjBwO,GAAIoS,EAAcF,IAAa,GAAK6L,GAAS,EAC3C7oB,EAAQqpB,UACVzM,EAAOoD,OAAO9C,EAAa2L,GAAO,EAAOI,IAEzCE,EAAW,aAAeN,EAAQ,MAAQ7oB,EAAQ8oB,QAClD1M,EAAKU,UAAUI,GAAa,GAC5BgM,EAAcD,IAGhB7M,EAAKS,KAAKvgB,GACV2sB,MA2BFja,OAAQA,GAIZ,IAoKIsa,GApKuB,WACzB,SAASC,EAAQvwB,EAAQgH,GACvB7H,KAAKe,MAAQ2U,KACb1V,KAAKwa,WAAa,GAClBxa,KAAKsX,MAAQF,GAp6FH,GAq6FVpX,KAAKkb,QAAU,GACflb,KAAKqxB,GAAK,GACVrxB,KAAKsxB,GAAK,GACV,IAAI7W,EAAOzM,EAASnN,GAAU+Q,EAAMzQ,SAAUN,GAAUA,EACxDsR,EAAOsI,EAAMA,EAAO,gBACpBza,KAAKya,KAAOA,EACZ5S,EAAUqI,EAAM,CACd5K,MAAO2L,EAAawJ,EAnxET1B,eAmxE8B,GACzCkH,WAAYhP,EAAawJ,EAnxET1B,oBAmxEmC,IAClD0X,GAAUW,EAAQG,SAAU1pB,GAAW,IAE1C,IACEqI,EAAMrI,EAASK,KAAK0f,MAAM3W,EAAawJ,EApqFxB,iBAqqFf,MAAO/c,GACPyU,GAAO,EAAO,gBAGhBnS,KAAKqxB,GAAK31B,OAAOY,OAAO4T,EAAM,GAAIrI,IAGpC,IA/7FoB2pB,EAAaC,EAAYC,EA+7FzCC,EAASP,EAAQx0B,UAwIrB,OAtIA+0B,EAAOnV,MAAQ,SAAeoV,EAAY1N,GACxC,IAAI2N,EAAQ7xB,KAERsX,EAAQtX,KAAKsX,MACbc,EAAcpY,KAAKwa,WAqBvB,OApBArI,EAAOmF,EAAMnX,GAAG,CAh8FN,EAME,IA07F2B,oBACvCmX,EAAML,IAj8FI,GAk8FVjX,KAAK8xB,GAAK1Z,EACVpY,KAAK+xB,GAAK7N,GAAclkB,KAAK+xB,KAAO/xB,KAAKG,GAhnElC,QAgnE6C0wB,GAAO9N,IAC3D/iB,KAAKsxB,GAAKM,GAAc5xB,KAAKsxB,GAI7BzhB,EAHmBG,EAAO,GAAI2N,GAAuB3d,KAAKsxB,GAAI,CAC5DpN,WAAYlkB,KAAK+xB,MAEE,SAAUC,EAAWz1B,GACxC,IAAI01B,EAAYD,EAAUH,EAAOzZ,EAAayZ,EAAMR,IACpDjZ,EAAY7b,GAAO01B,EACnBA,EAAUlT,OAASkT,EAAUlT,WAE/BlP,EAAOuI,GAAa,SAAU6Z,GAC5BA,EAAUzV,OAASyV,EAAUzV,WAE/Bxc,KAAKgW,KAvkFW,WAwkFhB5X,EAAS4B,KAAKya,KA1xEMrB,kBA2xEpB9B,EAAML,IAh9FC,GAi9FPjX,KAAKgW,KAzkFS,SA0kFPhW,MAGT2xB,EAAOnC,KAAO,SAAcpU,GAe1B,OAdApb,KAAKkb,QAAQ7R,KAAK,CAChB+R,OAAQA,IAEVA,EAAOF,QAAQ7R,KAAK,CAClB+R,OAAQpb,KACRuvB,UAAU,IAGRvvB,KAAKsX,MAAMnX,GA99FR,KA+9FLH,KAAK8xB,GAAGxC,KAAK9L,UAEbpI,EAAOZ,WAAW8U,KAAK9L,WAGlBxjB,MAGT2xB,EAAOpK,GAAK,SAAYC,GAGtB,OAFAxnB,KAAK8xB,GAAGhR,WAAWyG,GAAGC,GAEfxnB,MAGT2xB,EAAOl0B,GAAK,SAAY6W,EAAQI,GAE9B,OADA1U,KAAKe,MAAMtD,GAAG6W,EAAQI,GACf1U,MAGT2xB,EAAO5b,IAAM,SAAazB,GAExB,OADAtU,KAAKe,MAAMgV,IAAIzB,GACRtU,MAGT2xB,EAAO3b,KAAO,SAAcjV,GAC1B,IAAImxB,EAIJ,OAFCA,EAAclyB,KAAKe,OAAOiV,KAAK9I,MAAMglB,EAAa,CAACnxB,GAAOqM,OAAON,EAAMO,UAAW,KAE5ErN,MAGT2xB,EAAO/iB,IAAM,SAAa2Q,EAAQpb,GAGhC,OAFAnE,KAAK8xB,GAAGzW,OAAOzM,IAAI2Q,EAAQpb,GAEpBnE,MAGT2xB,EAAOtwB,OAAS,SAAgBuf,GAG9B,OAFA5gB,KAAK8xB,GAAGzW,OAAOha,OAAOuf,GAEf5gB,MAGT2xB,EAAOxxB,GAAK,SAAYE,GACtB,OAAOL,KAAKqxB,GAAGhxB,OAASA,GAG1BsxB,EAAOhT,QAAU,WAEf,OADA3e,KAAKgW,KAhoFW,WAioFThW,MAGT2xB,EAAOlc,QAAU,SAAiByI,QACb,IAAfA,IACFA,GAAa,GAGf,IAAInd,EAAQf,KAAKe,MACbuW,EAAQtX,KAAKsX,MAcjB,OAZIA,EAAMnX,GA9hGA,GA+hGRuV,GAAe1V,MAAMvC,GArpFT,QAqpFyBuC,KAAKyV,QAAQjZ,KAAKwD,KAAMke,KAE7DrO,EAAO7P,KAAK8xB,IAAI,SAAUG,GACxBA,EAAUxc,SAAWwc,EAAUxc,QAAQyI,MACtC,GACHnd,EAAMiV,KAxoFQ,WAyoFdjV,EAAM0U,UACNyI,GAAcngB,EAAMiC,KAAKkb,SACzB5D,EAAML,IAjiGI,IAoiGLjX,MAhjGWwxB,EAmjGPJ,GAnjGoBK,EAmjGX,CAAC,CACrBl1B,IAAK,UACLV,IAAK,WACH,OAAOmE,KAAKqxB,IAEdpa,IAAK,SAAapP,GAChB7H,KAAK8xB,GAAGhU,MAAM7G,IAAIpP,GAAS,GAAM,KAElC,CACDtL,IAAK,SACLV,IAAK,WACH,OAAOmE,KAAK8xB,GAAGzW,OAAO8F,WAAU,KAEjC,CACD5kB,IAAK,QACLV,IAAK,WACH,OAAOmE,KAAK8xB,GAAGhR,WAAWiH,gBAnkG8C/b,EAAkBwlB,EAAY50B,UAAW60B,GAAiBC,GAAa1lB,EAAkBwlB,EAAaE,GAAch2B,OAAOC,eAAe61B,EAAa,YAAa,CAAEplB,UAAU,IAukGrPglB,EAjKkB,GAqK3BD,GAAOI,SAAW,GAClBJ,GAAO9kB,OAASA,EAChB,IACI8lB,GAA0B,CAC5BC,QAAS,KACTC,SAAU,MAGRC,GAAqB,WACvB,SAASA,EAAMz0B,EAAIgK,GACjB7H,KAAK8a,OAAS,GACd9a,KAAKnC,GAAKA,EACVmC,KAAK6H,QAAUA,EAGjB,IAAI0qB,EAAUD,EAAM11B,UA+CpB,OA7CA21B,EAAQC,KAAO,SAAcjjB,EAAUqB,EAAM3U,EAAOw2B,GAClDA,EAAaA,GAAc,UAC3B,IAAIC,EAAY1yB,KAAK8a,OAAO2X,GAAczyB,KAAK8a,OAAO2X,IAAe,IACxDC,EAAUnjB,GAAYmjB,EAAUnjB,IAAa,IACnDqB,GAAQ3U,GAGjBs2B,EAAQI,MAAQ,WACd,IAAIC,EAAS5yB,KAET6yB,EAAM,GAeV,OAbI7yB,KAAK8a,OAAOgY,UACdD,GAAO7yB,KAAK+yB,eAAe/yB,KAAK8a,OAAOgY,UAGzCp3B,OAAO+F,KAAKzB,KAAK8a,QAAQoE,MAAK,SAAUziB,EAAGrB,GACzC,MAAqC,QAA9Bw3B,EAAO/qB,QAAQoX,YAAwBxiB,GAAKrB,GAAKA,GAAKqB,KAC5DiF,SAAQ,SAAU+wB,GACA,YAAfA,IACFI,GAAO,iCAAmCJ,EAAa,QACvDI,GAAOD,EAAOG,eAAeH,EAAO9X,OAAO2X,IAC3CI,GAAO,QAGJA,GAGTN,EAAQQ,eAAiB,SAAwBL,GAC/C,IAAIM,EAAShzB,KAET6yB,EAAM,GAWV,OAVAhjB,EAAO6iB,GAAW,SAAU5X,EAAQvL,GAClCA,GAAY,IAAMyjB,EAAOn1B,GAAK,IAAM0R,GAAUsW,OAC9CgN,GAAOtjB,EAAW,KAClBM,EAAOiL,GAAQ,SAAU7e,EAAO2U,IAC1B3U,GAAmB,IAAVA,KACX42B,GAAOjiB,EAAO,KAAO3U,EAAQ,QAGjC42B,GAAO,OAEFA,GAGFP,EAtDgB,GAyDrBW,GAA8B,WAChC,SAASA,EAAeC,EAAUrrB,EAASsrB,EAAQ5B,GACjDvxB,KAAKuf,OAAS,GACdvf,KAAK6H,QAAU,GACf7H,KAAK+d,YAAc,GACnB7N,EAAMugB,GAAUc,GAAY,IAC5BrhB,EAAMA,EAAMlQ,KAAK6H,QAAS4oB,IAAW5oB,GAAW,IAChD7H,KAAKkzB,SAAWA,EAChBlzB,KAAKmzB,OAASnjB,EAAO,GAAImiB,GAAyBgB,GAAU,IAC5DnzB,KAAKnC,GAAKmC,KAAKmzB,OAAOt1B,IAAMmW,GAAS,UACrChU,KAAKsyB,MAAQ,IAAIA,GAAMtyB,KAAKnC,GAAImC,KAAK6H,SACrC7H,KAAKmY,UAAYA,GAAU,EAAM,EAAMnY,KAAK6H,SAC5CsK,EAAOnS,KAAKkzB,SAASv0B,OAAQ,+BAC7BqB,KAAK+f,OAGPkT,EAAeG,MAAQ,SAAehY,GACpC,IACI3d,EADoBiY,GAAe0F,GACZ3d,GAEvBgd,EAAOW,EAAOX,KACd8I,EAASzR,EAAS2I,EAAM,IAAMxB,IAClCxb,EAnxFgB,WAmxFE,WAChB4D,EAAOqO,EAAM+K,EAAM,aAErBpZ,EAAOkiB,IAGT,IAAI8P,EAAUJ,EAAer2B,UA2a7B,OAzaAy2B,EAAQtT,KAAO,WACb/f,KAAKszB,mBACLtzB,KAAKuzB,aACLvzB,KAAKwzB,qBACLxzB,KAAKyzB,sBACLzzB,KAAK0zB,sBACL1zB,KAAK2zB,sBAGPN,EAAQE,WAAa,WACnB,IAAIK,EAAS5zB,KAEbqJ,EAAKrJ,KAAKuf,OAAQvf,KAAKkzB,SAASptB,KAAI,SAAUrF,EAAS0D,IACrD1D,EAAUuN,EAASvN,GAAW,CAC5BzC,KAAMyC,GACJA,GACIqa,OAASra,EAAQqa,QAAU,GACnCra,EAAQiC,MAAQjC,EAAQiC,OAAS,GAEjCkxB,EAAO7J,MAAMtpB,GAEb,IAAIkO,EAAUilB,EAAO/rB,QAAQ8G,QAAQ4K,MAAQ,KAAiB,IAAVpV,EAAcgV,GAAe,IAKjF,OAJAnJ,EAAOvP,EAAQiC,MAAO,CACpBwsB,OAAQvgB,EAAU,KAAOlO,EAAQiC,MAAMwsB,OAAS,KAAKrJ,OACrDlV,MAAOijB,EAAOC,YAAYpzB,EAAQqa,UAE7Bra,MAGLT,KAAKymB,UACPzmB,KAAK8zB,eAAe9zB,KAAKuf,SAI7B8T,EAAQG,mBAAqB,WAC3B,IAAIO,EAAS/zB,KAEbA,KAAK+d,YAAYrc,SAAQ,SAAUsyB,GACjC,IAAIpc,EAAQoc,EAAM,GACdnsB,EAAUmsB,EAAM,GAEpBD,EAAOzB,MAAME,KAAK,IAAK,YAAatgB,EAAKrK,EAAQ+P,OAAQA,OAI7Dyb,EAAQI,oBAAsB,WAC5B,IAAIQ,EAASj0B,KAETk0B,EAASl0B,KAAKsyB,MAElBtyB,KAAK+d,YAAYrc,SAAQ,SAAUyyB,GACjC,IAAIvc,EAAQuc,EAAM,GACdtsB,EAAUssB,EAAM,GACpBD,EAAO1B,KAJM,iBAISyB,EAAO5b,QAAQ,eAAgB4b,EAAOrS,WAAW/Z,GAAS,GAAQ+P,GACxFsc,EAAO1B,KALM,iBAKSyB,EAAO5b,QAAQ,gBAAiB4b,EAAOrS,WAAW/Z,GAAS,GAAO+P,GACxFsc,EAAO1B,KANM,iBAMS,SAAUyB,EAAO/R,eAAera,GAAU+P,OAIpEyb,EAAQM,mBAAqB,WAC3B,IAAIS,EAASp0B,KAETk0B,EAASl0B,KAAKsyB,MAElBtyB,KAAK+d,YAAYrc,SAAQ,SAAU2yB,GACjC,IAAIzc,EAAQyc,EAAM,GACdxsB,EAAUwsB,EAAM,GACpBH,EAAO1B,KAJM,gBAIS,YAAa4B,EAAOE,eAAezsB,GAAU+P,GAE9Dwc,EAAOG,eAAe1sB,IACzBqsB,EAAO1B,KAPI,gBAOW,eAAgB4B,EAAOI,eAAe3sB,GAAU+P,OAK5Eyb,EAAQK,oBAAsB,WAC5B,IAAIe,EAASz0B,KAETk0B,EAASl0B,KAAKsyB,MACd/iB,EAAW,iBACfvP,KAAK+d,YAAYrc,SAAQ,SAAUgzB,GACjC,IAAI9c,EAAQ8c,EAAM,GACd7sB,EAAU6sB,EAAM,GACpBR,EAAO1B,KAAKjjB,EAAU,QAASklB,EAAOE,cAAc9sB,GAAU+P,GAC9Dsc,EAAO1B,KAAKjjB,EAAU,SAAUklB,EAAOF,eAAe1sB,IAAY,OAAQ+P,GAC1Esc,EAAO1B,KAAKjjB,EAAUklB,EAAOpc,QAAQ,eAAgBnG,EAAKrK,EAAQsa,MAAQ,MAAOvK,GACjFsc,EAAO1B,KAAKjjB,EAAW,SAAU,UAAW1H,EAAQkiB,MAAQ,OAAS,SAAUnS,OAInFyb,EAAQiB,eAAiB,SAAwBzsB,GAC/C,IAAI+sB,EAAkB50B,KAAKmY,UACvBE,EAAUuc,EAAgBvc,QAC1BO,EAASgc,EAAgBhc,OACzB9V,EAAS,GASb,OARAA,EAAOuG,KAAKrJ,KAAK60B,gBAAgBhtB,IACjC/E,EAAOuG,KAAKrJ,KAAK80B,cAAcjtB,IAE3B7H,KAAK+0B,SAASltB,KAChB/E,EAAOuG,KAAKrJ,KAAKg1B,cAAcpc,GAAQ,IAAK,MAC5C9V,EAAOuG,KAAK6D,MAAMpK,EAAQ9C,KAAKi1B,gBAAgBptB,KAG1C/E,EAAO2M,OAAOylB,SAASpvB,KAAI,SAAU7J,GAC1C,MAAO,YAAcoc,EAAQ,KAAO,IAAMpc,EAAQ,OACjD+J,KAAK,MAGVqtB,EAAQwB,gBAAkB,SAAyBhtB,GACjD,IAAIstB,EAAmBn1B,KAAKmY,UACxBE,EAAU8c,EAAiB9c,QAC3BO,EAASuc,EAAiBvc,OAC1B0K,EAAatjB,KAAKo1B,gBAEtB,GAAIp1B,KAAKq1B,aAAaxtB,GAAU,CAC9B,IAAIytB,EAAsBt1B,KAAKu1B,cAAc1tB,EAAQwQ,EAAQ,gBACzDpc,EAAQq5B,EAAoBr5B,MAC5Bu5B,EAAQF,EAAoBpjB,KAEhC,OAAOlS,KAAKg1B,cAAcpc,EAAO3c,GAASqnB,EAAYkS,GAIxD,OAAO5c,EADO,IAAM0K,EAAazb,EAAQoZ,SAChB,KAG3BoS,EAAQ4B,gBAAkB,SAAyBptB,GACjD,IAAI4tB,EAAmBz1B,KAAKmY,UACxBE,EAAUod,EAAiBpd,QAC3BO,EAAS6c,EAAiB7c,OAE9B,GAAI5Y,KAAKq1B,aAAaxtB,GAAU,CAC9B,IAAI6tB,EAAuB11B,KAAKu1B,cAAc1tB,EAAQwQ,EAAQ,gBAC1Dpc,EAAQy5B,EAAqBz5B,MAC7Bu5B,EAAQE,EAAqBxjB,KAEjC,MAAO,CAAClS,KAAKg1B,cAAcpc,EAAO3c,EAAQ,GAAIu5B,IAGhD,IAAI1yB,EAAS,GACTme,EAAUpZ,EAAQoZ,QAClBkB,EAAMta,EAAQsa,IAGlB,GAFArf,EAAOuG,KAAKuP,EAAO,GAAKqI,GAAW,KAE/BkB,EAAK,CACP,IAAIwT,EAAuB31B,KAAKu1B,cAAcpT,GAC1CyT,EAASD,EAAqB15B,MAC9B45B,EAAQF,EAAqBzjB,KAE7B4jB,GAAaF,EAAS3U,EAAU2U,GAAU,EAC9C9yB,EAAOuG,KAAKrJ,KAAKg1B,cAAcpc,EAAOkd,GAAYD,IAGpD,OAAO/yB,GAGTuwB,EAAQyB,cAAgB,SAAuBjtB,GAC7C,IAAIyb,EAAatjB,KAAKo1B,gBAEtB,GAAI9R,GAAczb,EAAQsa,IAAK,CAC7B,IAAIvJ,EAAS5Y,KAAKmY,UAAUS,OAExBmd,EAAuB/1B,KAAKu1B,cAAc1tB,EAAQsa,KAClDlmB,EAAQ85B,EAAqB95B,MAC7Bu5B,EAAQO,EAAqB7jB,KAEjC,GAAIlS,KAAKq1B,aAAaxtB,GACpB,OAAO7H,KAAKg1B,cAAcpc,EAAO3c,EAAQqnB,GAAakS,GAGxD,IACIQ,EAAO1S,EADGzb,EAAQoZ,QAEtB,OAAOjhB,KAAKg1B,cAAcpc,EAAOod,EAAO/5B,GAAQu5B,GAGlD,MAAO,IAGTnC,EAAQhb,QAAU,SAAiBzH,GACjC,OAAO2C,GAAavT,KAAKmY,UAAUE,QAAQzH,KAG7CyiB,EAAQzR,WAAa,SAAoB/Z,EAASiI,GAChD,IAAI4S,EAAU7a,EAAQ6a,QAClB9R,EAAO5Q,KAAKmY,UAAUE,QAAQvI,EAAQ,QAAU,QAAQ,GAC5D,OAAO4S,GAAWxQ,EAAKwQ,EAAQ9R,KAAUhD,EAAS8U,GAAW,EAAIA,KAAa,OAGhF2Q,EAAQnR,eAAiB,SAAwBra,GAC/C,IAAIma,EAAS,GAQb,OANIhiB,KAAKi2B,eAEP9jB,EADA6P,EAAShiB,KAAKiiB,UAAUpa,GACT,wBACfma,EAAS,QAAUA,EAAS,MAAQhiB,KAAK4hB,WAAW/Z,GAAS,GAAS,MAAQ7H,KAAK4hB,WAAW/Z,GAAS,GAAQ,KAG1Gma,GAGTqR,EAAQpR,UAAY,SAAmBpa,GACrC,OAAOqK,EAAKrK,EAAQma,SAGtBqR,EAAQsB,cAAgB,SAAuB9sB,GAC7C,OAAOA,EAAQua,UAAY,GAAKlQ,EAAKrK,EAAQwa,cAAgBriB,KAAKi2B,aAAe,GAAKj2B,KAAKsiB,aAAaza,KAG1GwrB,EAAQkB,eAAiB,SAAwB1sB,GAC/C,OAAOqK,EAAKrK,EAAQ0a,eAAiBviB,KAAKi2B,aAAepuB,EAAQ2a,WAAa,GAAKxiB,KAAKsiB,aAAaza,GAAW7H,KAAKiiB,UAAUpa,KAGjIwrB,EAAQ/Q,aAAe,SAAsBza,GAC3C,IAAIsa,EAAMjQ,EAAKrK,EAAQsa,KACvB,MAAO,cAAgBA,GAAO,MAAQA,GAAO,MAAQta,EAAQoZ,SAAW,IAAMkB,GAAO,MAAQA,GAAO,KAGtGkR,EAAQmB,eAAiB,SAAwB3sB,GAC/C,IAAI8a,EAAc9a,EAAQ8a,YAC1B,OAAOA,EAAc,GAAK,EAAIA,EAAc,IAG9C0Q,EAAQ2B,cAAgB,SAAuB/4B,EAAOu5B,GACpD,MAAO,GAAKv5B,EAAQu5B,GAGtBnC,EAAQkC,cAAgB,SAAuBt5B,GAC7C,OAAI+R,EAAS/R,GAGJ,CACLA,MAHWknB,WAAWlnB,IAAU,EAIhCiW,KAHUjW,EAAMwX,QAAQ,cAAe,KAAO,MAO3C,CACLxX,MAAOA,EACPiW,KAAM,OAIVmhB,EAAQC,iBAAmB,WACzB,IAAI4C,EAASl2B,KAET+d,EAAc/d,KAAK6H,QAAQkW,YAC/B/d,KAAK+d,YAAY1U,KAAK,CAAC,UAAWrJ,KAAK6H,UAEnCkW,GACFlO,EAAOkO,GAAa,SAAUlW,EAAS+P,GACrCse,EAAOnY,YAAY1U,KAAK,CAACuO,EAAO1H,EAAMA,EAAM,GAAIgmB,EAAOruB,SAAUA,SAKvEwrB,EAAQgC,aAAe,SAAsBxtB,GAC3C,QAASA,EAAQ7H,KAAKmY,UAAUE,QAAQ,gBAG1Cgb,EAAQ5M,OAAS,WACf,OAAOzmB,KAAK6H,QAAQxH,OAAS+Z,IAG/BiZ,EAAQ0B,SAAW,SAAkBltB,GACnC,GAAsB,WAAlBA,EAAQS,MAAoB,CAC9B,GAAItI,KAAKymB,SACP,OAAO,EAGT,GAAIzmB,KAAK6H,QAAQxH,OAAS8Z,GACxB,OAAQna,KAAK6H,QAAQ+d,UAIzB,OAAO,GAGTyN,EAAQ4C,WAAa,WACnB,OAAOj2B,KAAK6H,QAAQ0Q,YAAcb,IAGpC2b,EAAQ8C,aAAe,WACrB,IAAItuB,EAAU7H,KAAK6H,QACnB,MAAO,CAACmR,GAAYA,GAAa,KAAOnR,EAAQxH,KAAM2Y,GAAa,KAAOnR,EAAQ0Q,UAAW1Q,EAAQuY,MAAQpH,GAAa,cAAenR,EAAQ6S,cAAgB1B,GAAa,QAASG,IAAenZ,KAAKmzB,OAAOhX,QAxXjM,eAwX2N1M,OAAOylB,SAASlvB,KAAK,MAGnQqtB,EAAQ+C,WAAa,SAAoB1zB,GACvC,IAAIrF,EAAO,GAIX,OAHAwS,EAAOnN,GAAO,SAAUzG,EAAOM,GAC7Bc,GAAQpB,EAAQ,IAAMsX,GAAahX,GAAO,KAAQN,EAAQ,IAAO,MAE5DoB,EAAKwoB,QAGdwN,EAAQQ,YAAc,SAAqB/Y,GACzC,IAAInK,EAAQ,GAIZ,OAHAd,EAAOiL,GAAQ,SAAU7e,EAAOM,GAC9BoU,GAAS,IAAM4C,GAAahX,GAAO,IAAMN,EAAQ,OAE5C0U,EAAMkV,QAGfwN,EAAQgD,aAAe,WACrB,IAAIC,EAAUt2B,KAEVyQ,EAAMzQ,KAAKmzB,OAAOd,SACtB,OAAOryB,KAAKuf,OAAOzZ,KAAI,SAAUrF,GAC/B,MAAO,IAAMgQ,EAAM,IAAM6lB,EAAQF,WAAW31B,EAAQiC,OAAS,KAAOjC,EAAQzC,MAAQ,IAAM,KAAOyS,EAAM,OACtGzK,KAAK,KAGVqtB,EAAQtJ,MAAQ,SAAetpB,GAC7B,IAAIqa,EAASra,EAAQqa,OACjByb,EAAgB91B,EAAQzC,KACxBA,OAAyB,IAAlBu4B,EAA2B,GAAKA,EAE3C,GAAIv2B,KAAK6H,QAAQkiB,QAAU/pB,KAAK6H,QAAQomB,SAAU,CAChD,IAAIhE,EAAMjsB,EAAKwa,MAAM,sCAEjByR,GAAOA,EAAI,KACbnP,EAAO0b,WAAa,+BAAiCvM,EAAI,GAAK,QAKpEoJ,EAAQS,eAAiB,SAAwBZ,GAK/C,IAJA,IAAIvkB,EAAU3O,KAAK6H,QAAQ8G,QACvBpE,EAAQvK,KAAKo1B,gBACb7V,EAAS2T,EAASpmB,QAEfyS,EAAO5gB,OAAS4L,GACrBlB,EAAKkW,EAAQA,GAGflW,EAAKkW,EAAOzS,OAAOvC,GAAOwF,UAAWwP,EAAOzS,MAAM,EAAGvC,IAAQ7I,SAAQ,SAAUjB,EAAS0D,GACtF,IAAIzB,EAAQsN,EAAO,GAAIvP,EAAQiC,MAAO,CACpCwsB,MAAOzuB,EAAQiC,MAAMwsB,MAAQ,IAAMvgB,EAAQ8K,QAEzCA,EAAQzJ,EAAO,GAAIvP,EAAS,CAC9BiC,MAAOA,IAETyB,EAAQoG,EAAQ2oB,EAASuD,QAAQhd,GAASyZ,EAAS7pB,KAAKoQ,OAI5D4Z,EAAQ+B,cAAgB,WACtB,GAAIp1B,KAAKymB,SAAU,CACjB,IAAI5e,EAAU7H,KAAK6H,QAEnB,OAAIA,EAAQ0b,OACH1b,EAAQ0b,OAGH/Q,GAAItF,WAAM,EAAQlN,KAAK+d,YAAYjY,KAAI,SAAU4wB,GAE7D,OADeA,EAAM,GACLzV,cAECpZ,EAAQklB,eAAiB,GAAK,GAGnD,OAAO,GAGTsG,EAAQsD,aAAe,WACrB,IAAI34B,EAAO,GAKX,OAJAA,GAAQ,eAAkBgC,KAAK6H,QAAQ8G,QAAQ+K,OAAS,KACxD1b,GAAQgC,KAAK42B,aAAY,GACzB54B,GAAQgC,KAAK42B,aAAY,GACzB54B,GAAQ,UAIVq1B,EAAQuD,YAAc,SAAqBhd,GACzC,IAAIid,EAAgB72B,KAAK6H,QACrB8G,EAAUkoB,EAAcloB,QACxBiM,EAAOic,EAAcjc,KACrBlY,EAAQ,CACVwsB,MAAOvgB,EAAQgL,MAAQ,KAAOC,EAAOjL,EAAQiL,KAAOjL,EAAQmL,MAC5DzZ,KAAM,SACNy2B,UAAWld,EAAOgB,EAAKhB,KAAOgB,EAAKd,MAErC,MAAO,WAAa9Z,KAAKo2B,WAAW1zB,GAA7B,iGAAsL1C,KAAK6H,QAAQ6gB,WAAa3L,IAAQ,uBAGjOsW,EAAQr1B,KAAO,WACb,IAAI+4B,EAAe/2B,KAAKmzB,OACpB6D,EAAYD,EAAaC,UACzB5E,EAAU2E,EAAa3E,QACvB1Y,EAASqd,EAAard,OACtBud,EAAcF,EAAaE,YAC3BC,EAAaH,EAAaG,WAC1BC,EAASJ,EAAaI,OACtBC,EAAeL,EAAaK,aAC5BC,EAAcN,EAAaM,YAC3Br5B,EAAO,GA4BX,OA3BAA,GAAQ,YAAegC,KAAKnC,GAAK,YAAgBmC,KAAKm2B,eAAiB,KAAOa,GAAa,IAAM,KACjGh5B,GAAQ,UAAYgC,KAAKsyB,MAAMK,QAAU,WAErCwE,IACFn5B,GAAQo5B,GAAgB,GACxBp5B,GAAQ,gCAGVA,GAAQi5B,GAAe,GAEnBvd,IACF1b,GAAQgC,KAAK22B,gBAGf34B,GAAQ,8BACRA,GAAQ,IAAMo0B,EAAU,yBACxBp0B,GAAQgC,KAAKq2B,eACbr4B,GAAQ,KAAOo0B,EAAU,IACzBp0B,GAAQ,SACRA,GAAQk5B,GAAc,GAElBC,IACFn5B,GAAQ,SACRA,GAAQq5B,GAAe,IAGzBr5B,GAAQ,SACDA,GAGFi1B,EAvcyB,GA0clCn4B,EAAQwe,QAAUA,GAClBxe,EAAQqe,aAAeA,GACvBre,EAAQ+e,YAv6FUL,gBAw6FlB1e,EAAQ0tB,aAz6FWhP,iBA06FnB1e,EAAQw8B,iBAv6Fezd,sBAw6FvB/e,EAAQy8B,iBAz6Fe1d,sBA06FvB/e,EAAQme,YAAcA,GACtBne,EAAQ08B,gBA96Fcte,2BA+6FtBpe,EAAQ28B,eA35Fare,cA45FrBte,EAAQ48B,kBAl6FgBte,iBAm6FxBte,EAAQ68B,WAp7FSne,eAq7FjB1e,EAAQ88B,cA/5FYxe,aAg6FpBte,EAAQ+8B,WAl6FSze,UAm6FjBte,EAAQg9B,eA/5Fa1e,cAg6FrBte,EAAQmf,iBAh7FeT,qBAi7FvB1e,EAAQi9B,sBAh7FoB9d,2BAi7F5Bnf,EAAQk9B,WAv6FS5e,UAw6FjBte,EAAQ6kB,eAj7FanG,mBAk7FrB1e,EAAQm9B,mBAj7FiBtY,wBAk7FzB7kB,EAAQke,WAAaA,GACrBle,EAAQoe,YA77FUM,gBA87FlB1e,EAAQo9B,cAh7FY1e,kBAi7FpB1e,EAAQq9B,SAh7FO3e,aAi7Ff1e,EAAQs9B,aAr7FW5e,iBAs7FnB1e,EAAQu9B,mBAp7FiBD,wBAq7FzBt9B,EAAQw9B,kBAt7FgBF,uBAu7FxBt9B,EAAQy9B,YAr8FU/e,gBAs8FlB1e,EAAQ09B,cAh7FYpf,aAi7FpBte,EAAQ21B,SAAWA,GACnB31B,EAAQ29B,aA/tGW,SAguGnB39B,EAAQ49B,qBAjtGmB,iBAktG3B59B,EAAQ69B,qBAjtGmB,iBAktG3B79B,EAAQ89B,qBA5sGmB,iBA6sG3B99B,EAAQ+9B,oBA/sGkB,gBAgtG1B/9B,EAAQg+B,uBA/sGqB,mBAgtG7Bh+B,EAAQi+B,YAtuGU,QAuuGlBj+B,EAAQk+B,cAxtGY,UAytGpBl+B,EAAQm+B,WA/tGS,OAguGjBn+B,EAAQo+B,cA9tGY,UA+tGpBp+B,EAAQq+B,eAhuGa,WAiuGrBr+B,EAAQs+B,wBAhtGsB,KAitG9Bt+B,EAAQu+B,aAxuGW,SAyuGnBv+B,EAAQw+B,eA3uGa,WA4uGrBx+B,EAAQy+B,sBAttGoB,kBAutG5Bz+B,EAAQ0+B,cAnvGY,UAovGpB1+B,EAAQ2+B,WAlvGS,OAmvGjB3+B,EAAQ4+B,YAlvGU,QAmvGlB5+B,EAAQ6+B,yBA9tGuB,qBA+tG/B7+B,EAAQ8+B,eAruGa,WAsuGrB9+B,EAAQ++B,yBAluGuB,qBAmuG/B/+B,EAAQg/B,yBAluGuB,qBAmuG/Bh/B,EAAQi/B,YAzvGU,QA0vGlBj/B,EAAQk/B,cAlvGY,UAmvGpBl/B,EAAQm/B,aAjvGW,SAkvGnBn/B,EAAQo/B,cAjvGY,UAkvGpBp/B,EAAQq/B,aA9uGW,SA+uGnBr/B,EAAQs/B,eA9uGa,WA+uGrBt/B,EAAQu/B,cAluGY,KAmuGpBv/B,EAAQw/B,oBApuGkB,KAquG1Bx/B,EAAQy/B,cAxvGY,UAyvGpBz/B,EAAQ0/B,cA5vGY,UA6vGpB1/B,EAAQoZ,YAAcA,GACtBpZ,EAAQ4a,eAAiBA,GACzB5a,EAAQ2/B,KA5zFG,OA6zFX3/B,EAAQsf,KAAOA,GACftf,EAAQ4/B,IAjiGE,MAkiGV5/B,EAAQ6/B,IAjiGE,MAkiGV7/B,EAAQmb,gBAAkBA,GAC1Bnb,EAAQqf,MAAQA,GAChBrf,EAAQue,eAAiBA,GACzBve,EAAQq2B,OAASA,GACjBr2B,EAAQm4B,eAAiBA,GACzBn4B,EAAQsc,MAAQA,GAChBtc,EAAQ4c,IAAMA,GACd5c,EAAQ0c,SAAWA,GACnB1c,EAAiB,QAAIq2B,I,kBC3qHrB;;;4CAWgB,0BAAd,EAMO,WAER,aAs0BD,OAj0BC,SAASyJ,EAAMC,GAEf,IAGCC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EAEAC,EACAC,EACAC,EAEAC,EACAC,EACAC,EAEAC,EAEAC,EAoDAC,EAmKAC,EACAC,EA7OGC,EAAKh8B,KACLi8B,GAAoB,EACvBC,GAAmB,EAQnBC,GAAoB,EAYpBC,EAAoB,CACnBC,SAAU,CAACC,IAAI,GAAIC,OAAO,QAC1BC,eAAgB,CAAC,OAAQ,UAAW,YAAa,KAAM,WACvDC,WAAY,IACZC,kBAAmB,IACnBC,sBAAuB,IAEvBC,iBAAkB,SAASt9B,EAAMu9B,GAChC,OAAIv9B,EAAK8E,OAITy4B,EAAUp2B,SAAS,GAAGq2B,UAAYx9B,EAAK8E,OAChC,IAJNy4B,EAAUp2B,SAAS,GAAGq2B,UAAY,IAC3B,IAMTC,SAAQ,EACRF,WAAW,EACXG,cAAc,EACdC,QAAQ,EACRC,SAAS,EACTC,WAAW,EACXC,SAAS,EACTC,aAAa,EAEbC,YAAY,EACZC,qBAAqB,EAErBC,yBAAyB,EAEzBC,aAAc,CACb,CAAC5/B,GAAG,WAAYyH,MAAM,oBAAqBvF,IAAI,wDAC/C,CAAClC,GAAG,UAAWyH,MAAM,QAASvF,IAAI,8DAClC,CAAClC,GAAG,YAAayH,MAAM,SAAUvF,IAAI,oGAErC,CAAClC,GAAG,WAAYyH,MAAM,iBAAkBvF,IAAI,oBAAqB29B,UAAS,IAE3EC,oBAAqB,WACpB,OAAO/C,EAAKgD,SAAS3T,KAAO,IAE7B4T,mBAAoB,WACnB,OAAOxvB,OAAOjD,SAAS0yB,MAExBC,gBAAiB,WAChB,OAAOnD,EAAKgD,SAASx5B,OAAS,IAG/B45B,kBAAmB,MACnBC,iBAAkB,MAQhBC,EAAiB,SAASxgC,GAC5B,GAAGm+B,EACF,OAAO,EAIRn+B,EAAIA,GAAK2Q,OAAOtN,MAEb66B,EAASa,YAAcb,EAASuC,YAAc7C,GAEhD8C,IASD,IALA,IACCC,EAEAC,EADAC,GAFY7gC,EAAEmD,QAAUnD,EAAE8gC,YAEJvtB,aAAa,UAAY,GAGxCjW,EAAI,EAAGA,EAAIyjC,EAAY9/B,OAAQ3D,KACtCqjC,EAAYI,EAAYzjC,IACX0jC,OAASH,EAAa17B,QAAQ,SAAWw7B,EAAU9iC,OAAU,IACzE8iC,EAAUK,QACVJ,GAAQ,GAKV,GAAGA,EAAO,CACN5gC,EAAEgU,iBACJhU,EAAEgU,kBAEHmqB,GAAoB,EAQpB,IAAI8C,EAAW9D,EAAU+D,SAASC,aAAe,IAAM,GAC5Bv9B,YAAW,WACrCu6B,GAAoB,IAClB8C,KAOLG,EAAmB,SAASC,EAAIC,EAAOpwB,GACtCisB,GAAYjsB,EAAM,MAAQ,UAAY,SAAUmwB,EAAI,SAAWC,IAKhEC,EAAiB,WAChB,IAAIC,EAA4C,IAA7BtD,EAASuD,gBAEzBD,IAAgBvD,IAClBmD,EAAiB/D,EAAW,gBAAiBmE,GAC7CvD,EAAsBuD,IAGxBE,EAAyB,WACxBN,EAAiB1D,EAAa,sBAAuBe,IAEtDkD,EAAoB,WAwBnB,OAtBAlD,GAAqBA,IAWpBtB,EAAU18B,YAAYi9B,EAAa,8BACnC95B,YAAW,WACP66B,GACFiD,MAEC,OAZHA,IACA99B,YAAW,WACN66B,GACHtB,EAAUz8B,SAASg9B,EAAa,gCAE/B,KAUAe,GACHmD,KAEM,GAGRC,EAAmB,SAAS7hC,GAE3B,IAAImD,GADJnD,EAAIA,GAAK2Q,OAAOtN,OACDF,QAAUnD,EAAE8gC,WAI3B,OAFA5D,EAAK4E,MAAM,iBAAkB9hC,EAAGmD,MAE5BA,EAAOi9B,OAIPj9B,EAAO4+B,aAAa,cAIxBpxB,OAAOqxB,KAAK7+B,EAAOi9B,KAAM,aAAc,2FAE/BzvB,OAAOsxB,OAASptB,KAAKqtB,MAAMD,OAAO/nB,MAAQ,EAAI,KAAO,MAEzDukB,GACHkD,IAGM,KAERC,EAAmB,WAQlB,IAPA,IACCO,EAEAC,EACAC,EACAC,EALGC,EAAiB,GAObjlC,EAAI,EAAGA,EAAI4gC,EAAS6B,aAAa9+B,OAAQ3D,IAChD6kC,EAAkBjE,EAAS6B,aAAaziC,GAExC8kC,EAAYlE,EAAS+B,oBAAoBkC,GACzCE,EAAWnE,EAASiC,mBAAmBgC,GACvCG,EAAapE,EAASmC,gBAAgB8B,GAOtCI,GAAkB,YALPJ,EAAgB9/B,IAAI0T,QAAQ,UAAWysB,mBAAmBH,IAC/DtsB,QAAQ,gBAAiBysB,mBAAmBJ,IAC5CrsB,QAAQ,oBAAqBqsB,GAC7BrsB,QAAQ,WAAYysB,mBAAmBF,IAE3B,yCACYH,EAAgBhiC,GAAK,KAC7CgiC,EAAgBnC,SAAW,WAAa,IAAM,IAC/CmC,EAAgBv6B,MAAQ,OAE1Bs2B,EAASuE,sBACXF,EAAiBrE,EAASuE,oBAAoBN,EAAiBI,IAGjE7E,EAAY30B,SAAS,GAAGq2B,UAAYmD,EACpC7E,EAAY30B,SAAS,GAAG25B,QAAUb,GAGnCc,EAAiB,SAASx/B,GACzB,IAAI,IAAK7F,EAAI,EAAGA,EAAI4gC,EAASY,eAAe79B,OAAQ3D,IACnD,GAAI6/B,EAAU/4B,SAASjB,EAAQ,SAAW+6B,EAASY,eAAexhC,IACjE,OAAO,GAMVslC,EAAiB,EACjBlC,EAAmB,WAClBmC,aAAaxE,GACbuE,EAAiB,EACdhF,GACFU,EAAGwE,SAAQ,IAGbC,EAAsB,SAAS/iC,GAE9B,IAAIkf,GADJlf,EAAIA,GAAQ2Q,OAAOtN,OACN2/B,eAAiBhjC,EAAEijC,UAC3B/jB,GAA0B,SAAlBA,EAAKgkB,WACjBL,aAAaxE,GACbA,EAAaz6B,YAAW,WACvB06B,EAAGwE,SAAQ,KACT5E,EAASc,qBAsDdmE,EAA0B,SAASC,GAC9BrF,IAA4BqF,IAC/BhC,EAAiBtD,EAAmB,qBAAsBsF,GAC1DrF,EAA0BqF,IAG5BC,EAAmB,SAASzhC,GAC3B,IAAI6iB,EAAM7iB,EAAK0hC,KAEf,IA9LQpG,EAAKqG,mBAAqBrF,EAASuC,WAAawB,OAAO/nB,MAAQgkB,EAASqC,iBA8LjD,CAE9B,IAAIiD,EAAOtF,EAASS,SACpB,GAAGT,EAASiB,WAA6B,SAAhBqE,EAAK3E,OAO7B,GANItB,KACHA,EAAwBJ,EAAUsG,SAAS,sCACrBpyB,YAAa8rB,EAAUsG,SAAS,0BACtDpG,EAAU1rB,aAAa4rB,EAAuBD,GAC9CH,EAAUz8B,SAAS28B,EAAW,kBAE3Ba,EAASgB,iBAAiBt9B,EAAM27B,GAAuB,GAAQ,CAElE,IAAImG,EAAcnG,EAAsBoG,aACxClf,EAAIoa,OAASr4B,SAASk9B,EAAY,KAAO,QAEzCjf,EAAIoa,OAAS2E,EAAK5E,SAGnBna,EAAIoa,OAAyB,SAAhB2E,EAAK3E,OAAoB,EAAI2E,EAAK3E,OAIhDpa,EAAIma,IAAM4E,EAAK5E,SAEfna,EAAIma,IAAMna,EAAIoa,OAAS,GAqDtBkC,EAAc,CACjB,CACCljC,KAAM,UACNyP,OAAQ,YACRs2B,OAAQ,SAASvC,GAChB/D,EAAoB+D,IAGtB,CACCxjC,KAAM,cACNyP,OAAQ,UACRs2B,OAAQ,SAASvC,GAChB3D,EAAc2D,GAEfL,MAAO,WACNW,MAGF,CACC9jC,KAAM,gBACNyP,OAAQ,UACRs2B,OAAQ,SAASvC,GAChB5D,EAAe4D,GAEhBL,MAAO,WACNW,MAGF,CACC9jC,KAAM,eACNyP,OAAQ,SACR0zB,MAAO9D,EAAK2G,mBAEb,CACChmC,KAAM,UACNyP,OAAQ,YACRs2B,OAAQ,SAASvC,GAChB7D,EAAkB6D,IAGpB,CACCxjC,KAAM,gBACNyP,OAAQ,UACR0zB,MAAO9D,EAAK4G,OAEb,CACCjmC,KAAM,sBACNyP,OAAQ,UACR0zB,MAAO9D,EAAKhhB,MAEb,CACCre,KAAM,uBACNyP,OAAQ,UACR0zB,MAAO9D,EAAK9gB,MAEb,CACCve,KAAM,aACNyP,OAAQ,eACR0zB,MAAO,WACH5D,EAAc2G,eAChB3G,EAAc4G,OAEd5G,EAAc6G,UAIjB,CACCpmC,KAAM,YACNyP,OAAQ,cACRs2B,OAAQ,SAASvC,GAChBvD,EAAoBuD,KAqDvB/C,EAAGjc,KAAO,WA5J4B,IAYhC6hB,EAmJL/G,EAAUgH,OAAOjH,EAAK/yB,QAASu0B,GAAmB,GAGlDR,EAAWhB,EAAK/yB,QAGhBkzB,EAAYF,EAAUiH,gBAAgBlH,EAAKmH,WAAY,aAGvDxG,EAAUX,EAAK/Q,QArKN,kBAAkB,SAAStT,GAC/B2lB,GAAoB3lB,EAAM,IAC5BylB,EAAGgG,gBACO9F,GAAoB3lB,GAAO,KACrCylB,EAAGiG,kBAML1G,EAAQ,gBAAiB,SAAShlB,GAC9B2lB,GAAoB3lB,EAAM,IAC5BylB,EAAGgG,eACHJ,GAAsB,GACbA,IAAwB1F,GAAoB3lB,EAAM,IAC3DylB,EAAGiG,kBAIL1G,EAAQ,oBAAoB,YAC3BqG,GAAsB,KACK1F,GAC1BF,EAAGiG,kBAqJN1G,EAAQ,eAAgBS,EAAGrlB,QAG3B4kB,EAAQ,aAAa,SAAS2G,GAC7B,IAAIC,EAAmBvH,EAAKgD,SAASuE,iBAClCvH,EAAKwH,iBAAmBD,EAC1BvH,EAAKyH,OAAOF,EAAkBD,EAAO,KAErCtH,EAAKyH,OAAOzG,EAAS0G,kBAAiB,EAAO1H,EAAKgD,UAAWsE,EAAO,QAKtE3G,EAAQ,oBAAoB,SAAS79B,EAAG6kC,EAAQC,GAC/C,IAAItmC,EAAIwB,EAAEmD,QAAUnD,EAAE8gC,WAErBtiC,GACAA,EAAE+U,aAAa,UAAYvT,EAAE2C,KAAKwC,QAAQ,UAAY,IACpD3G,EAAE+U,aAAa,SAASpO,QAAQ,aAAe,GAAK,qBAAuB4/B,KAAKvmC,EAAE4jB,YAEpF0iB,EAAW/wB,SAAU,MAKvB8pB,EAAQ,cAAc,WACrBV,EAAUr+B,KAAKu+B,EAAW,gBAAiBmD,GAC3CrD,EAAUr+B,KAAKo+B,EAAKmH,WAAY,UAAW/F,EAAG0G,aAE1C9H,EAAKqG,mBACRpG,EAAUr+B,KAAKo+B,EAAKmH,WAAY,YAAa/F,EAAG2G,gBAKlDpH,EAAQ,gBAAgB,WACnBY,GACHkD,IAGEvD,GACF8G,cAAc9G,GAEfjB,EAAU7lB,OAAO7T,SAAU,WAAYs/B,GACvC5F,EAAU7lB,OAAO7T,SAAU,YAAai9B,GACxCvD,EAAU7lB,OAAO+lB,EAAW,gBAAiBmD,GAC7CrD,EAAU7lB,OAAO4lB,EAAKmH,WAAY,UAAW/F,EAAG0G,aAChD7H,EAAU7lB,OAAO4lB,EAAKmH,WAAY,YAAa/F,EAAG2G,aAE/C7H,IACFD,EAAU7lB,OAAO7T,SAAU25B,EAAc+H,OAAQ7G,EAAG8G,kBACjDhI,EAAc2G,iBAChB7F,EAASmH,sBAAwB,EACjCjI,EAAc4G,QAEf5G,EAAgB,SAMlBS,EAAQ,WAAW,WACfK,EAASiB,YACR5B,GACFF,EAAUzpB,YAAY2pB,GAEvBJ,EAAU18B,YAAY68B,EAAmB,yBAGvCI,IACFA,EAAY30B,SAAS,GAAG25B,QAAU,MAEnCvF,EAAU18B,YAAY48B,EAAW,wBACjCF,EAAUz8B,SAAU28B,EAAW,oBAC/BiB,EAAGwE,SAAQ,MAIR5E,EAASoH,uBACZnI,EAAU18B,YAAa48B,EAAW,oBAEnCQ,EAAQ,iBAAiB,WACrBK,EAASoH,uBACXnI,EAAU18B,YAAa48B,EAAW,uBAGpCQ,EAAQ,kBAAkB,WACzBV,EAAUz8B,SAAU28B,EAAW,uBAGhCQ,EAAQ,sBAAuBwF,GA3JT,WACtB,IAAIzhC,EACH2jC,EACA5E,EAEG6E,EAA2B,SAASC,GACvC,GAAIA,EAKJ,IADA,IAAIloC,EAAIkoC,EAAUxkC,OACV3D,EAAI,EAAGA,EAAIC,EAAGD,IAAK,CAC1BsE,EAAO6jC,EAAUnoC,GACjBioC,EAAY3jC,EAAK4R,UAEjB,IAAI,IAAIkyB,EAAI,EAAGA,EAAI3E,EAAY9/B,OAAQykC,IACtC/E,EAAYI,EAAY2E,GAErBH,EAAUpgC,QAAQ,SAAWw7B,EAAU9iC,OAAS,IAE9CqgC,EAASyC,EAAUrzB,SAEtB6vB,EAAU18B,YAAYmB,EAAM,2BACzB++B,EAAUiD,QACZjD,EAAUiD,OAAOhiC,IAKlBu7B,EAAUz8B,SAASkB,EAAM,8BAO9B4jC,EAAyBnI,EAAUt0B,UAEnC,IAAI48B,EAAUxI,EAAUiH,gBAAgB/G,EAAW,iBAChDsI,GACFH,EAA0BG,EAAO58B,UAqHlC68B,GAEG1H,EAASsB,SAAW/B,GAAgBC,IACtCe,GAAoB,GAGrB8C,IA/RIrD,EAASa,YACXlB,EAAQ,aAAa,WAEpBV,EAAUr+B,KAAK2E,SAAU,YAAai9B,GACtCvD,EAAUr+B,KAAK2E,SAAU,WAAYs/B,GAErC3E,EAAgByH,aAAY,WAEL,KADtBjD,GAECtE,EAAGwE,SAAQ,KAEV5E,EAASa,WAAa,MAnGxBb,EAASoB,eAAiBnC,EAAU+D,SAASC,eAC3C/D,IACHA,EAAgBkB,EAAGwH,oBAEjB1I,GACFD,EAAUr+B,KAAK2E,SAAU25B,EAAc+H,OAAQ7G,EAAG8G,kBAClD9G,EAAG8G,mBACHjI,EAAUz8B,SAASw8B,EAAK6I,SAAU,sBAElC5I,EAAU18B,YAAYy8B,EAAK6I,SAAU,sBAMpC7H,EAASyB,cAEXwD,GAAwB,GAExBtF,EAAQ,gBAAgB,WAEvBgF,aAAa7E,GAGbA,EAA2Bp6B,YAAW,WAElCs5B,EAAKgD,UAAYhD,EAAKgD,SAAS8F,UAE5B9I,EAAK+I,uBAA0B/I,EAAKgD,SAAS1c,MAAQ0Z,EAAKgD,SAAS1c,IAAI0iB,eAG3E/C,GAAwB,GAKzBA,GAAwB,KAGvBjF,EAASe,0BAGbpB,EAAQ,qBAAqB,SAASp3B,EAAO7E,GACzCs7B,EAAKgD,WAAat+B,GACpBuhC,GAAwB,QAoV7B7E,EAAGwE,QAAU,SAASqD,GACrBvI,EAAUuI,EACV/E,EAAiB/D,EAAW,WAAY8I,IAGzC7H,EAAGrlB,OAAS,WAERulB,GAAoBtB,EAAKgD,UAE3B5B,EAAG8H,uBAEAlI,EAASiB,YACXjB,EAASgB,iBAAiBhC,EAAKgD,SAAU5C,GAEzC8D,EAAiB9D,EAAmB,kBAAmBJ,EAAKgD,SAASx5B,QAGtE63B,GAAoB,GAGpBA,GAAoB,EAGjBE,GACHkD,IAGDJ,KAGDjD,EAAG8G,iBAAmB,SAASplC,GAE3BA,GAGF4D,YAAW,WACVs5B,EAAKmJ,gBAAiB,EAAGlJ,EAAUmJ,gBACjC,IAIJnJ,GAAYC,EAAc2G,eAAiB,MAAQ,UAAY,SAAU7G,EAAK6I,SAAU,aAGzFzH,EAAG8H,qBAAuB,WACtBlI,EAASuB,YACXjC,EAAgB4B,UAAalC,EAAKqJ,kBAAkB,EAC7CrI,EAASoC,kBACTpC,EAASuD,kBAIlBnD,EAAG0G,YAAc,SAAShlC,GAEzB,IAAImD,GADJnD,EAAIA,GAAK2Q,OAAOtN,OACDF,QAAUnD,EAAE8gC,WAE3B,IAAG3C,EAIH,GAAGn+B,EAAEyX,QAAmC,UAAzBzX,EAAEyX,OAAO+uB,YAAyB,CAGhD,GAAG7D,EAAex/B,GAEjB,YADA+5B,EAAK4G,QAIH3G,EAAU/4B,SAASjB,EAAQ,eACF,IAAxB+5B,EAAKwH,gBAAwBxH,EAAKwH,gBAAkBxH,EAAKgD,SAASuG,SACjEvI,EAAS4B,yBACX5C,EAAK4G,QAGN5G,EAAK2G,kBAAkB7jC,EAAEyX,OAAOivB,oBAgBlC,GATGxI,EAAS2B,sBACRrB,EACFF,EAAGgG,eAEHhG,EAAGiG,gBAKFrG,EAAS0B,aAAezC,EAAU/4B,SAASjB,EAAQ,cAAgBw/B,EAAex/B,IAEpF,YADA+5B,EAAK4G,SAMRxF,EAAG2G,YAAc,SAASjlC,GAEzB,IAAImD,GADJnD,EAAIA,GAAK2Q,OAAOtN,OACDF,QAAUnD,EAAE8gC,WAG3BM,EAAiB/D,EAAW,iBAAkBsF,EAAex/B,KAG9Dm7B,EAAGgG,aAAe,WACjBnH,EAAUz8B,SAAS28B,EAAU,oBAC7BmB,GAAmB,GAGpBF,EAAGiG,aAAe,WACjB/F,GAAmB,EACfD,GACHD,EAAGrlB,SAEJkkB,EAAU18B,YAAY48B,EAAU,qBAGjCiB,EAAGqI,mBAAqB,WACvB,IAAI/oC,EAAI6F,SACR,SAAU7F,EAAEgpC,gBAAkBhpC,EAAEipC,qBAAuBjpC,EAAEkpC,sBAAwBlpC,EAAEmpC,mBAGpFzI,EAAGwH,iBAAmB,WACrB,IACCkB,EADGC,EAAKxjC,SAASyjC,gBAEjBC,EAAK,mBA0DN,OAxDIF,EAAGG,kBACNJ,EAAM,CACLK,OAAQ,oBACRC,MAAO,iBACPC,SAAU,oBACVpC,OAAQgC,GAGAF,EAAGO,qBACZR,EAAM,CACLK,OAAQ,uBACRC,MAAO,sBACPC,SAAU,uBACVpC,OAAQ,MAAQgC,GAKRF,EAAGQ,wBACZT,EAAM,CACLK,OAAQ,0BACRC,MAAO,uBACPC,SAAU,0BACVpC,OAAQ,SAAWgC,GAGXF,EAAGS,sBACZV,EAAM,CACLK,OAAQ,sBACRC,MAAO,mBACPC,SAAU,sBACVpC,OAAQ,uBAIP6B,IACFA,EAAI/C,MAAQ,WAKX,GAHAtG,EAA4BO,EAASyJ,cACrCzJ,EAASyJ,eAAgB,EAEN,4BAAhBrlC,KAAK+kC,OAGP,OAAOnK,EAAK6I,SAASzjC,KAAK+kC,UAF1BnK,EAAK6I,SAASzjC,KAAK+kC,QAASO,QAAQC,uBAKtCb,EAAIhD,KAAO,WAGV,OAFA9F,EAASyJ,cAAgBhK,EAElBl6B,SAASnB,KAAKglC,UAGtBN,EAAIjD,aAAe,WAAa,OAAOtgC,SAASnB,KAAKilC,YAG/CP,MAx0BO,mC,kBCXhB;;;4CAKgB,0BAAd,EAMO,WAER,aAuoHA,OAtoHiB,SAASjB,EAAU+B,EAAS/2B,EAAO5G,GAUrD,IAAIgzB,EAAY,CACf+D,SAAU,KACVpiC,KAAM,SAASqE,EAAQR,EAAM4U,EAAUD,GACtC,IAAIywB,GAAczwB,EAAS,SAAW,OAAS,gBAC/C3U,EAAOA,EAAKyO,MAAM,KAClB,IAAI,IAAI9T,EAAI,EAAGA,EAAIqF,EAAK1B,OAAQ3D,IAC5BqF,EAAKrF,IACP6F,EAAO4kC,GAAaplC,EAAKrF,GAAIia,GAAU,IAI1CnH,QAAS,SAAS43B,GACjB,OAAQA,aAAez4B,OAExBk0B,SAAU,SAASxyB,EAAS8B,GAC3B,IAAIsuB,EAAK59B,SAASuP,cAAcD,GAAO,OAIvC,OAHG9B,IACFowB,EAAG7tB,UAAYvC,GAETowB,GAERiF,WAAY,WACX,IAAI2B,EAAUt3B,OAAOu3B,YACrB,YAAmBzjC,IAAZwjC,EAAwBA,EAAUxkC,SAASyjC,gBAAgBiB,WAEnE7wB,OAAQ,SAASnU,EAAQR,EAAM4U,GAC9B4lB,EAAUr+B,KAAKqE,EAAOR,EAAK4U,GAAS,IAErC9W,YAAa,SAAS4gC,EAAI7tB,GACzB,IAAI40B,EAAM,IAAIC,OAAO,UAAY70B,EAAY,WAC7C6tB,EAAG7tB,UAAY6tB,EAAG7tB,UAAUuC,QAAQqyB,EAAK,KAAKryB,QAAQ,SAAU,IAAIA,QAAQ,SAAU,KAEvFrV,SAAU,SAAS2gC,EAAI7tB,GACjB2pB,EAAU/4B,SAASi9B,EAAG7tB,KAC1B6tB,EAAG7tB,YAAc6tB,EAAG7tB,UAAY,IAAM,IAAMA,IAG9CpP,SAAU,SAASi9B,EAAI7tB,GACtB,OAAO6tB,EAAG7tB,WAAa,IAAI60B,OAAO,UAAY70B,EAAY,WAAWuxB,KAAK1D,EAAG7tB,YAE9E4wB,gBAAiB,SAASkE,EAAUC,GAEnC,IADA,IAAI92B,EAAO62B,EAASE,WACd/2B,GAAM,CACX,GAAI0rB,EAAU/4B,SAASqN,EAAM82B,GAC5B,OAAO92B,EAERA,EAAOA,EAAKg3B,cAGdC,YAAa,SAASv5B,EAAO5Q,EAAOM,GAEnC,IADA,IAAIvB,EAAI6R,EAAMlO,OACR3D,KACL,GAAG6R,EAAM7R,GAAGuB,KAASN,EACpB,OAAOjB,EAGT,OAAQ,GAET6mC,OAAQ,SAASwE,EAAIC,EAAIC,GACxB,IAAK,IAAI31B,KAAQ01B,EAChB,GAAIA,EAAGzpC,eAAe+T,GAAO,CAC5B,GAAG21B,GAAoBF,EAAGxpC,eAAe+T,GACxC,SAEDy1B,EAAGz1B,GAAQ01B,EAAG11B,KAIjB+f,OAAQ,CACP6V,KAAM,CACLC,IAAK,SAASC,GACb,OAAOn0B,KAAKo0B,IAAID,GAAKn0B,KAAKq0B,GAAK,KAEhCC,MAAO,SAASH,GACf,QAAUn0B,KAAKu0B,IAAIv0B,KAAKq0B,GAAKF,GAAK,GAAK,IAGzCK,MAAO,CACNN,IAAK,SAASC,GACb,QAASA,EAAIA,EAAIA,EAAI,KAqCxBM,eAAgB,WACf,GAAGnM,EAAU+D,SACZ,OAAO/D,EAAU+D,SAElB,IACCqI,EADcpM,EAAUsG,WACDxwB,MACvBu2B,EAAS,GACTtI,EAAW,GAiBZ,GAdAA,EAASuI,MAAQhmC,SAASimC,MAAQjmC,SAAS4T,iBAE3C6pB,EAASlS,MAAQ,iBAAkBre,OAEhCA,OAAOZ,wBACTmxB,EAASpxB,IAAMa,OAAOZ,sBACtBmxB,EAASyI,IAAMh5B,OAAOyI,sBAGvB8nB,EAAS0I,eAAkBj5B,OAAmB,cAAKk5B,UAAUC,kBAKzD5I,EAAS0I,aAAc,CAE1B,IAAIG,EAAKF,UAAUG,UASnB,GAAI,cAAcjF,KAAK8E,UAAUI,UAAW,CAC3C,IAAIC,EAAKL,UAAoB,WAAE/uB,MAAM,0BAClCovB,GAAKA,EAAEjpC,OAAS,IAClBipC,EAAI1jC,SAAS0jC,EAAE,GAAI,MACX,GAAKA,EAAI,IAChBhJ,EAASiJ,eAAgB,GAS5B,IAAIrvB,EAAQivB,EAAGjvB,MAAM,uBACjBsvB,EAAkBtvB,EAAQA,EAAM,GAAK,GACzCsvB,EAAiB3kB,WAAW2kB,KACP,IACjBA,EAAiB,MACnBlJ,EAASC,cAAe,GAEzBD,EAASmJ,eAAiBD,GAE3BlJ,EAASoJ,cAAgB,yBAAyBvF,KAAKgF,GAUxD,IALA,IAECQ,EACAC,EAHGC,EAAc,CAAC,YAAa,cAAe,iBAC9CC,EAAU,CAAC,GAAI,SAAS,MAAM,KAAK,KAI5BptC,EAAI,EAAGA,EAAI,EAAGA,IAAK,CAC1BksC,EAASkB,EAAQptC,GAEjB,IAAI,IAAIooC,EAAI,EAAGA,EAAI,EAAGA,IACrB6E,EAAiBE,EAAY/E,GAG7B8E,EAAYhB,GAAUA,EAChBe,EAAevvB,OAAO,GAAGC,cAAgBsvB,EAAen7B,MAAM,GAC9Dm7B,IAEFrJ,EAASqJ,IAAmBC,KAAajB,IAC5CrI,EAASqJ,GAAkBC,GAI1BhB,IAAWtI,EAASpxB,MACtB05B,EAASA,EAAOxzB,cAChBkrB,EAASpxB,IAAMa,OAAO64B,EAAO,yBAC1BtI,EAASpxB,MACXoxB,EAASyI,IAAMh5B,OAAO64B,EAAO,yBACzB74B,OAAO64B,EAAO,iCAKrB,IAAItI,EAASpxB,IAAK,CACjB,IAAImiB,EAAW,EACfiP,EAASpxB,IAAM,SAAS66B,GACvB,IAAIC,GAAW,IAAI9xB,MAAO+xB,UACtBC,EAAaj2B,KAAKC,IAAI,EAAG,IAAM81B,EAAW3Y,IAC1C9xB,EAAKwQ,OAAO/M,YAAW,WAAa+mC,EAAGC,EAAWE,KAAgBA,GAEtE,OADA7Y,EAAW2Y,EAAWE,EACf3qC,GAER+gC,EAASyI,IAAM,SAASxpC,GAAM0iC,aAAa1iC,IAS5C,OALA+gC,EAAS6J,MAAQtnC,SAASunC,mBACpBvnC,SAASunC,gBAAgB,6BAA8B,OAAOC,cAEpE9N,EAAU+D,SAAWA,EAEdA,IAIT/D,EAAUmM,iBAGPnM,EAAU+D,SAASuI,QAErBtM,EAAUr+B,KAAO,SAASqE,EAAQR,EAAM4U,EAAUD,GAEjD3U,EAAOA,EAAKyO,MAAM,KAQlB,IANA,IACC85B,EADGnD,GAAczwB,EAAS,SAAW,UAAY,QAEjD6zB,EAAY,WACX5zB,EAAS6zB,YAAY3tC,KAAK8Z,IAGpBja,EAAI,EAAGA,EAAIqF,EAAK1B,OAAQ3D,IAE/B,GADA4tC,EAASvoC,EAAKrF,GAGb,GAAuB,iBAAbia,GAAyBA,EAAS6zB,YAAa,CACxD,GAAI9zB,GAGH,IAAIC,EAAS,QAAU2zB,GACtB,OAAO,OAHR3zB,EAAS,QAAU2zB,GAAUC,EAO9BhoC,EAAO4kC,GAAa,KAAOmD,EAAQ3zB,EAAS,QAAU2zB,SAEtD/nC,EAAO4kC,GAAa,KAAOmD,EAAQ3zB,KAcxC,IAAI2G,EAAO5b,KAWP47B,EAAW,CACdmN,gBAAe,EACfC,QAAS,IACTC,UAAW,EACX9K,WAAW,EACXhZ,MAAM,EACN+jB,cAAc,EACd7D,eAAe,EACf8D,qBAAqB,EACrBC,kBAAmB,IACnBrG,sBAAuB,IACvBC,sBAAuB,IACvBqG,iBAAiB,EACjB/gC,OAAO,EACPghC,QAAQ,EACRC,WAAW,EACXC,sBAAuB,IACvBC,eAAgB,IAChBC,mBAAoB,SAAS3K,GACtB,MAAsB,MAAfA,EAAGjf,SAEdwiB,iBAAkB,SAASqH,EAAcrqC,GACxC,OAAGqqC,GAGKrqC,EAAK6iC,iBAAmB,GAFxB,EAEkC,MAG3CyH,cAAe,KAClBjiC,OAAO,EAGPkiC,UAAW,OAEZhP,EAAUgH,OAAOjG,EAAU/zB,GAO3B,IAIIiiC,EACHC,EACAC,EACAC,EACAC,EACAC,EAIAC,EACAC,EACAC,EAEAC,EACAC,EACAC,EACAC,EACAC,EACAC,EAIAC,EACAC,EAEAC,EACAC,EACAC,EACAC,EACAC,EACAC,EAEAC,EAEAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EAGAC,EA47BGC,EACHC,EAUAC,EAIAC,EACAC,EACAC,EAIAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EAEAC,EACAC,GAEAC,GACAC,GAGAC,GACAC,GACAC,GACAC,GACAC,GAqFAC,GA/lCAC,GATQ,CAACz6B,EAAE,EAAEC,EAAE,GAUfy6B,GAVQ,CAAC16B,EAAE,EAAEC,EAAE,GAWf06B,GAXQ,CAAC36B,EAAE,EAAEC,EAAE,GAef26B,GAAgB,GAOhBC,GAAqB,EACrBC,GAAU,GACVC,GAxBQ,CAAC/6B,EAAE,EAAEC,EAAE,GA2Bf+6B,GAAa,EAObC,IAAmB,EAEnBC,GAAW,GAQXC,GAAqB,GACrBC,IAAuB,EAKvBC,GAAkB,SAAS3yC,EAAMR,GAChC8/B,EAAUgH,OAAOjmB,EAAM7gB,EAAOozC,eAC9BJ,GAAS1kC,KAAK9N,IAGf6yC,GAAe,SAASjqC,GACvB,IAAIkqC,EAAYC,KAChB,OAAGnqC,EAAQkqC,EAAY,EACflqC,EAAQkqC,EACLlqC,EAAQ,EACXkqC,EAAYlqC,EAEbA,GAIRoqC,GAAa,GACbhT,GAAU,SAAShgC,EAAM8sC,GAIxB,OAHIkG,GAAWhzC,KACdgzC,GAAWhzC,GAAQ,IAEbgzC,GAAWhzC,GAAM8N,KAAKg/B,IAE9BmG,GAAS,SAASjzC,GACjB,IAAI4Y,EAAYo6B,GAAWhzC,GAE3B,GAAG4Y,EAAW,CACb,IAAIs6B,EAAOxhC,MAAMrQ,UAAUkQ,MAAM3R,KAAKkS,WACtCohC,EAAKvpB,QAEL,IAAI,IAAIlqB,EAAI,EAAGA,EAAImZ,EAAUxV,OAAQ3D,IACpCmZ,EAAUnZ,GAAGkS,MAAM0O,EAAM6yB,KAK5BC,GAAkB,WACjB,OAAO,IAAIl4B,MAAO+xB,WAEnBoG,GAAkB,SAASC,GAC1BzB,GAAayB,EACbhzB,EAAKizB,GAAGl+B,MAAMi+B,QAAUA,EAAUhT,EAASqN,WAG5C6F,GAAsB,SAASC,EAASl8B,EAAEC,EAAEk8B,EAAK1vC,KAC5C2uC,IAAyB3uC,GAAQA,IAASsc,EAAKgiB,YAClDoR,GAAe1vC,EAAOA,EAAK6kC,SAAWvoB,EAAKgiB,SAASuG,UAGrD4K,EAAS5D,GAAiBV,EAAmB53B,EAAI,OAASC,EAAI,KAAO43B,EAAkB,UAAYsE,EAAO,KAE3GC,GAAuB,SAAUC,GAC7BpC,KAECoC,IACC3E,EAAiB3uB,EAAKgiB,SAASuG,SAC7B8J,KACHkB,GAAcvzB,EAAKgiB,UAAU,GAAO,GACpCqQ,IAAuB,GAGrBA,KACFkB,GAAcvzB,EAAKgiB,UACnBqQ,IAAuB,IAM1Ba,GAAoBhC,GAAuBU,GAAW36B,EAAG26B,GAAW16B,EAAGy3B,KAGzE6E,GAAsB,SAAS9vC,GAC3BA,EAAKT,WAEPiwC,GAAoBxvC,EAAKT,UAAU8R,MAC9BrR,EAAK+vC,gBAAgBx8B,EACrBvT,EAAK+vC,gBAAgBv8B,EACrBxT,EAAK6iC,iBACL7iC,IAGPgwC,GAAiB,SAASz8B,EAAG08B,GAC5BA,EAAQpE,GAAiBV,EAAmB53B,EAAI,UAAY63B,GAE7D8E,GAAkB,SAAS38B,EAAGoY,GAE7B,IAAI2Q,EAASzW,MAAQ8F,EAAU,CAC9B,IAAIwkB,EAAsBxF,GAAqB2D,GAAW/6B,EAAI66B,GAAqB76B,GAAK+6B,GAAW/6B,EAClG68B,EAAQn9B,KAAKqtB,MAAM/sB,EAAI88B,GAAe98B,IAElC48B,EAAsB,GAAKC,EAAQ,GACtCD,GAAuBnB,KAAiB,GAAKoB,EAAQ,KACtD78B,EAAI88B,GAAe98B,EAAI68B,EAAQ9T,EAAS4N,uBAI1CmG,GAAe98B,EAAIA,EACnBy8B,GAAez8B,EAAGq3B,IAEnB0F,GAAsB,SAASC,EAAMC,GACpC,IAAI10C,EAAI20C,GAAcF,GAAQlC,GAAQkC,GACtC,OAAOtC,GAAgBsC,GAAQvC,GAAauC,GAAQz0C,EAAIA,GAAM00C,EAAYtF,IAG3EwF,GAAkB,SAASC,EAAIC,GAC9BD,EAAGp9B,EAAIq9B,EAAGr9B,EACVo9B,EAAGn9B,EAAIo9B,EAAGp9B,EACPo9B,EAAGryC,KACLoyC,EAAGpyC,GAAKqyC,EAAGryC,KAGbsyC,GAAc,SAASrzC,GACtBA,EAAE+V,EAAIN,KAAKqtB,MAAM9iC,EAAE+V,GACnB/V,EAAEgW,EAAIP,KAAKqtB,MAAM9iC,EAAEgW,IAGpBs9B,GAAoB,KACpBC,GAAoB,WAGhBD,KACFvV,EAAU7lB,OAAO7T,SAAU,YAAakvC,IACxCxV,EAAUz8B,SAASqlC,EAAU,mBAC7B7H,EAASuC,WAAY,EACrBqQ,GAAO,cAER4B,GAAoB9uC,YAAW,WAC9B8uC,GAAoB,OAClB,MAwCJE,GAAsB,SAASR,EAAWn5B,GACzC,IAAI45B,EAASC,GAAoB50B,EAAKgiB,SAAU6P,GAAeqC,GAI/D,OAHGn5B,IACFk2B,GAAiB0D,GAEXA,GAGRE,GAAmB,SAASnxC,GAI3B,OAHIA,IACHA,EAAOsc,EAAKgiB,UAENt+B,EAAK6iC,kBAEbuO,GAAmB,SAASpxC,GAI3B,OAHIA,IACHA,EAAOsc,EAAKgiB,UAENt+B,EAAKqxC,EAAI,EAAI/U,EAASgO,cAAgB,GAI9CgH,GAAuB,SAASf,EAAMgB,EAAeC,EAAeC,GACnE,OAAGA,IAAkBn1B,EAAKgiB,SAASuE,kBAClC2O,EAAcjB,GAAQj0B,EAAKgiB,SAASyR,gBAAgBQ,IAC7C,IAEPiB,EAAcjB,GAAQD,GAAoBC,EAAMkB,GAE7CD,EAAcjB,GAAQgB,EAAcv+B,IAAIu9B,IAC1CiB,EAAcjB,GAAQgB,EAAcv+B,IAAIu9B,IACjC,GACEiB,EAAcjB,GAAQgB,EAAcr+B,IAAIq9B,KACjDiB,EAAcjB,GAAQgB,EAAcr+B,IAAIq9B,IACjC,KA0DVmB,GAAa,SAAStzC,GACrB,IAAIuzC,EAAgB,GACjBrV,EAAS0N,QAAwB,KAAd5rC,EAAE4N,QACvB2lC,EAAgB,QACPrV,EAAS2N,YACD,KAAd7rC,EAAE4N,QACJ2lC,EAAgB,OACO,KAAdvzC,EAAE4N,UACX2lC,EAAgB,SAIfA,IAGGvzC,EAAEwzC,SAAYxzC,EAAEyzC,QAAWzzC,EAAEiO,UAAajO,EAAE0zC,UAC7C1zC,EAAEoC,eACJpC,EAAEoC,iBAEFpC,EAAE2zC,aAAc,EAEjBz1B,EAAKq1B,QAKRK,GAAiB,SAAS5zC,GACrBA,IAKD6uC,GAAUD,GAAgBS,IAAwBb,KACpDxuC,EAAEoC,iBACFpC,EAAEgU,oBAIJ6/B,GAA0B,WACzB31B,EAAKmoB,gBAAgB,EAAGlJ,EAAUmJ,eAUhCwN,GAAc,GACjBC,GAAiB,EACjBC,GAAiB,SAASn2C,GACtBi2C,GAAYj2C,KACXi2C,GAAYj2C,GAAMiS,KACpB+9B,EAAWiG,GAAYj2C,GAAMiS,KAE9BikC,YACOD,GAAYj2C,KAGrBo2C,GAA0B,SAASp2C,GAC/Bi2C,GAAYj2C,IACdm2C,GAAen2C,GAEZi2C,GAAYj2C,KACfk2C,KACAD,GAAYj2C,GAAQ,KAGtBq2C,GAAqB,WACpB,IAAK,IAAIhhC,KAAQ4gC,GAEZA,GAAY30C,eAAgB+T,IAC/B8gC,GAAe9gC,IAKlBihC,GAAe,SAASt2C,EAAMu2C,EAAGC,EAASz2C,EAAG02C,EAAU57B,EAAU67B,GAChE,IAAuC/1C,EAAnCg2C,EAAgBxD,KACpBiD,GAAwBp2C,GAExB,IAAI42C,EAAW,WACd,GAAKX,GAAYj2C,GAAQ,CAMxB,IAJAW,EAAIwyC,KAAoBwD,IAId52C,EAMT,OALAo2C,GAAen2C,GACf6a,EAAS27B,QACNE,GACFA,KAIF77B,GAAW27B,EAAUD,GAAKE,EAAS91C,EAAEZ,GAAKw2C,GAE1CN,GAAYj2C,GAAMiS,IAAM89B,EAAW6G,KAGrCA,KAKEhE,GAAgB,CAGnB3O,MAAOgP,GACP3kB,OAAQ0R,GACR6W,aAAc3E,GACd5lC,QAAS+zB,EAETyW,sBAAuB,WACtB,OAAOtF,IAER3K,aAAc,WACb,OAAOmI,GAERtG,gBAAiB,WAChB,OAAOgG,GAERzc,WAAY,WACX,OAAO4e,GAERkG,UAAW,WACV,OAAO3F,GAER5I,gBAAiB,SAASlxB,EAAEC,GAC3B66B,GAAQ96B,EAAIA,EACZ84B,EAAwBgC,GAAQ76B,EAAIA,EACpC07B,GAAO,qBAAsBb,KAE9B4E,aAAc,SAASzC,EAAU0C,EAAKC,EAAKvD,GAC1C1B,GAAW36B,EAAI2/B,EACfhF,GAAW16B,EAAI2/B,EACflI,EAAiBuF,EACjBb,GAAsBC,IAGvBnvB,KAAM,WAEL,IAAG+pB,IAAWC,EAAd,CAIA,IAAI/uC,EAEJ4gB,EAAKif,UAAYA,EACjBjf,EAAK6nB,SAAWA,EAChB7nB,EAAKizB,GAAKhU,EAAUiH,gBAAgB2B,EAAU,YAE9C+H,EAAmB/H,EAASvyB,UAC5B44B,GAAU,EAEV8B,EAAY/Q,EAAUmM,iBACtBsE,EAAaM,EAAUp+B,IACvB+9B,EAAYK,EAAUvE,IACtB8D,EAAgBS,EAAU8G,UAC1BhH,EAASE,EAAUzE,MAEnBvrB,EAAKmmB,WAAalH,EAAUiH,gBAAgB2B,EAAU,qBACtD7nB,EAAK/c,UAAYg8B,EAAUiH,gBAAgBlmB,EAAKmmB,WAAY,mBAE5DmI,EAAkBtuB,EAAK/c,UAAU8R,MAGjCiL,EAAK+2B,YAAc9H,EAAe,CACjC,CAAC9L,GAAGnjB,EAAK/c,UAAU4H,SAAS,GAAKmsC,KAAK,EAAGzuC,OAAQ,GACjD,CAAC46B,GAAGnjB,EAAK/c,UAAU4H,SAAS,GAAKmsC,KAAK,EAAGzuC,OAAQ,GACjD,CAAC46B,GAAGnjB,EAAK/c,UAAU4H,SAAS,GAAKmsC,KAAK,EAAGzuC,OAAQ,IAIlD0mC,EAAa,GAAG9L,GAAGpuB,MAAMG,QAAU+5B,EAAa,GAAG9L,GAAGpuB,MAAMG,QAAU,OApOpD,WAElB,GAAGq6B,EAAe,CAEjB,IAAI0H,EAAmBjH,EAAUkH,cAAgBzH,EAGjD,OAFAZ,EAAmB,aAAeoI,EAAmB,MAAQ,UAC7DnI,EAAkBkB,EAAUkH,YAAc,SAAW,KAOtD3H,EAAgB,OAChBtQ,EAAUz8B,SAASqlC,EAAU,YAE7B6L,GAAiB,SAASz8B,EAAG08B,GAC5BA,EAAQ13B,KAAOhF,EAAI,MAEpBu8B,GAAsB,SAAS9vC,GAE9B,IAAIyzC,EAAYzzC,EAAK6kC,SAAW,EAAI,EAAI7kC,EAAK6kC,SAC5CpnC,EAAIuC,EAAKT,UAAU8R,MACnBggC,EAAIoC,EAAYzzC,EAAKqxC,EACrBqC,EAAID,EAAYzzC,EAAK0zC,EAEtBj2C,EAAE6a,MAAQ+4B,EAAI,KACd5zC,EAAEilB,OAASgxB,EAAI,KACfj2C,EAAE8a,KAAOvY,EAAK+vC,gBAAgBx8B,EAAI,KAClC9V,EAAEu/B,IAAMh9B,EAAK+vC,gBAAgBv8B,EAAI,MAGlCm8B,GAAuB,WACtB,GAAGnC,GAAuB,CAEzB,IAAI/vC,EAAI+vC,GACPxtC,EAAOsc,EAAKgiB,SACZmV,EAAYzzC,EAAK6kC,SAAW,EAAI,EAAI7kC,EAAK6kC,SACzCwM,EAAIoC,EAAYzzC,EAAKqxC,EACrBqC,EAAID,EAAYzzC,EAAK0zC,EAEtBj2C,EAAE6a,MAAQ+4B,EAAI,KACd5zC,EAAEilB,OAASgxB,EAAI,KAGfj2C,EAAE8a,KAAO21B,GAAW36B,EAAI,KACxB9V,EAAEu/B,IAAMkR,GAAW16B,EAAI,OAwLzBmgC,GAGA3I,EAAuB,CACtBzoB,OAAQjG,EAAKs3B,WAKbC,kBAAmB,WAClB5S,aAAasL,GACbA,EAA4BvqC,YAAW,WACnCmsC,GAAc56B,IAAM+I,EAAKmmB,WAAWqR,aACtCx3B,EAAKs3B,eAEJ,MAEJrrB,OAAQ0pB,GACR8B,QAASrC,GACTsC,MAAOhC,IAKR,IAAIiC,EAAW3H,EAAU/D,eAAiB+D,EAAU/M,cAAgB+M,EAAU5D,cAM9E,IALI4D,EAAU4H,eAAkB5H,EAAU8G,YAAaa,IACtD3X,EAASoH,sBAAwBpH,EAASmH,sBAAwB,GAI/D/nC,EAAI,EAAGA,EAAI+yC,GAASpvC,OAAQ3D,IAC/B4gB,EAAK,OAASmyB,GAAS/yC,MAIrBwqC,IACO5pB,EAAKogB,GAAK,IAAIwJ,EAAQ5pB,EAAMif,IAClC9a,OAGJyuB,GAAO,eACPvE,EAAoBA,GAAqBrO,EAASz3B,OAAS,GAEvDsvC,MAAMxJ,IAAsBA,EAAoB,GAAKA,GAAqBqE,QAC7ErE,EAAoB,GAErBruB,EAAKgiB,SAAW8V,GAAYzJ,IAGzB2B,EAAU/D,eAAiB+D,EAAU/M,gBACvCiP,IAAmB,GAGpBrK,EAASnzB,aAAa,cAAe,SAClCsrB,EAASj0B,QACPmmC,GAIHrK,EAAS9yB,MAAMkU,SAAW,SAH1B4e,EAAS9yB,MAAMkU,SAAW,WAC1B4e,EAAS9yB,MAAM2rB,IAAMzB,EAAUmJ,aAAe,YAMnB7hC,IAA1BwpC,IACF6C,GAAO,iBACP7C,EAAwBF,EAAuB5Q,EAAUmJ,cAI1D,IAAIxkB,EAAc,cAiBlB,IAhBGoc,EAAS+X,YACXn0B,GAAeoc,EAAS+X,UAAY,KAElC/X,EAASyN,kBACX7pB,GAAe,0BAEhBA,GAAe6rB,EAAqB,cAAgB,gBACpD7rB,GAAeosB,EAAU4H,cAAgB,uBAAyB,GAClEh0B,GAAeosB,EAAUnD,IAAM,aAAe,GAC9C5N,EAAUz8B,SAASqlC,EAAUjkB,GAE7B5D,EAAKs3B,aAGL/I,GAAwB,EACxB0D,GAAa,KACT7yC,EAAI,EAAGA,EA9mBE,EA8mBeA,IAC3Bs0C,IAAiBt0C,EAAEmvC,GAAwByD,GAAW/6B,EAAGg4B,EAAa7vC,GAAG+jC,GAAGpuB,OAGzE+6B,GACH7Q,EAAUr+B,KAAKof,EAAKmmB,WAAYsI,EAAazuB,GAG9C2f,GAAQ,oBAAoB,WAC3B3f,EAAKg4B,WAAW/I,EAAa,GAAIZ,EAAkB,GACnDruB,EAAKg4B,WAAW/I,EAAa,GAAIZ,EAAkB,GAEnDY,EAAa,GAAG9L,GAAGpuB,MAAMG,QAAU+5B,EAAa,GAAG9L,GAAGpuB,MAAMG,QAAU,QAEnE8qB,EAAStzB,OAIXm7B,EAASn7B,QA1ZXuyB,EAAUr+B,KAAK2E,SAAU,UAAWya,GAEjCgwB,EAAU8G,WAEZ7X,EAAUr+B,KAAKof,EAAKmmB,WAAY,QAASnmB,GAItCggB,EAASuC,WACZtD,EAAUr+B,KAAK2E,SAAU,YAAakvC,IAGvCxV,EAAUr+B,KAAK6R,OAAQ,kCAAmCuN,GAE1D4yB,GAAO,iBAoZP5yB,EAAKg4B,WAAW/I,EAAa,GAAIZ,GAEjCruB,EAAKi4B,iBAELrF,GAAO,aAEHV,KAWHnD,EAAsBpH,aAAY,WAC7BkO,IAAmBrF,GAAgBO,GAAepC,IAAmB3uB,EAAKgiB,SAASuE,kBACtFvmB,EAAKs3B,eAEJ,MAGJrY,EAAUz8B,SAASqlC,EAAU,mBAI9BjC,MAAO,WACFsI,IAIJA,GAAU,EACVC,GAAgB,EAChByE,GAAO,SAnbP3T,EAAU7lB,OAAO3G,OAAQ,kCAAmCuN,GAC5Dif,EAAU7lB,OAAO3G,OAAQ,SAAUi8B,EAAqBziB,QACxDgT,EAAU7lB,OAAO7T,SAAU,UAAWya,GACtCif,EAAU7lB,OAAO7T,SAAU,YAAakvC,IAErCzE,EAAU8G,WACZ7X,EAAU7lB,OAAO4G,EAAKmmB,WAAY,QAASnmB,GAGzCwwB,GACFvR,EAAU7lB,OAAO3G,OAAQ+7B,EAAexuB,GAGzC2kB,aAAasL,GAEb2C,GAAO,gBAuaPsF,GAAYl4B,EAAKgiB,SAAU,MAAM,EAAMhiB,EAAKnG,WAI7CA,QAAS,WACR+4B,GAAO,WAEJuF,IACFxT,aAAawT,IAGdtQ,EAASnzB,aAAa,cAAe,QACrCmzB,EAASvyB,UAAYs6B,EAElBb,GACF/H,cAAc+H,GAGf9P,EAAU7lB,OAAO4G,EAAKmmB,WAAYsI,EAAazuB,GAG/Cif,EAAU7lB,OAAO3G,OAAQ,SAAUuN,GAEnCo4B,KAEApC,KAEArD,GAAa,MASd0F,MAAO,SAASphC,EAAEC,EAAEgP,GACfA,IACAjP,EAAIg6B,GAAev6B,IAAIO,EACzBA,EAAIg6B,GAAev6B,IAAIO,EACdA,EAAIg6B,GAAer6B,IAAIK,IAChCA,EAAIg6B,GAAer6B,IAAIK,GAGrBC,EAAI+5B,GAAev6B,IAAIQ,EACzBA,EAAI+5B,GAAev6B,IAAIQ,EACdA,EAAI+5B,GAAer6B,IAAIM,IAChCA,EAAI+5B,GAAer6B,IAAIM,IAIzB06B,GAAW36B,EAAIA,EACf26B,GAAW16B,EAAIA,EACfm8B,MAGDnG,YAAa,SAAUprC,GACtBA,EAAIA,GAAK2Q,OAAOtN,MACbupC,EAAqB5sC,EAAE2C,OACzBiqC,EAAqB5sC,EAAE2C,MAAM3C,IAK/Bw2C,KAAM,SAAS/vC,GAId,IAAI2Y,GAFJ3Y,EAAQiqC,GAAajqC,IAEF8lC,EACnB4D,GAAa/wB,EAEbmtB,EAAoB9lC,EACpByX,EAAKgiB,SAAW8V,GAAYzJ,GAC5ByD,IAAsB5wB,EAEtB0yB,GAAgB5B,GAAW/6B,EAAI66B,IAG/BkE,KACA7E,IAAuB,EAEvBnxB,EAAKi4B,kBAEN/5B,KAAM,WACL8B,EAAKs4B,KAAMjK,EAAoB,IAEhCrwB,KAAM,WACLgC,EAAKs4B,KAAMjK,EAAoB,IAIhCkK,mBAAoB,SAASC,GAM5B,GALGA,GACF5F,GAAO,eAAgB,GAIrB3D,EAAa,GAAG9L,GAAGt4B,SAAS9H,OAAQ,CACtC,IAAI01C,EAAcxJ,EAAa,GAAG9L,GAAGt4B,SAAS,GAE7CqmC,GADGjS,EAAU/4B,SAASuyC,EAAa,mBACXA,EAAY1jC,MAEZ,UAGzBm8B,GAAwB,KAGzBD,GAAiBjxB,EAAKgiB,SAAS2S,OAC/B/F,EAAkBD,EAAiB3uB,EAAKgiB,SAASuE,iBAEjDqL,GAAW36B,EAAIg6B,GAAeyH,OAAOzhC,EACrC26B,GAAW16B,EAAI+5B,GAAeyH,OAAOxhC,EAElCshC,GACF5F,GAAO,gBAKT+F,oBAAqB,WACpB3J,GAAmB,EACnB,IAAI,IAAI5vC,EAAI,EAAGA,EAxyBF,EAwyBmBA,IAC3B6vC,EAAa7vC,GAAGsE,OACnBurC,EAAa7vC,GAAGsE,KAAKk1C,aAAc,IAKtCX,eAAgB,SAASY,GAExB,GAAkB,IAAf5G,GAAH,CAIA,IACC6G,EADGC,EAAUpiC,KAAKI,IAAIk7B,IAGvB,KAAG4G,GAAmBE,EAAU,GAAhC,CAKA/4B,EAAKgiB,SAAW8V,GAAYzJ,GAC5BgE,IAAuB,EAEvBO,GAAO,eAAgBX,IAEpB8G,GAl0BU,IAm0BZxK,GAAwB0D,IAAcA,GAAa,GAn0BvC,KAo0BZ8G,EAp0BY,GAs0Bb,IAAI,IAAI35C,EAAI,EAAGA,EAAI25C,EAAS35C,IACxB6yC,GAAa,GACf6G,EAAa7J,EAAa3lB,QAC1B2lB,EAAa+J,GAAiBF,EAE9BvK,IACAmF,IAAiBnF,EAAqB,GAAKyD,GAAW/6B,EAAG6hC,EAAW3V,GAAGpuB,OACvEiL,EAAKg4B,WAAWc,EAAYzK,EAAoB0K,EAAU35C,EAAI,EAAI,KAElE05C,EAAa7J,EAAagK,MAC1BhK,EAAapU,QAASie,GAEtBvK,IACAmF,GAAgBnF,EAAuByD,GAAW/6B,EAAG6hC,EAAW3V,GAAGpuB,OACnEiL,EAAKg4B,WAAWc,EAAYzK,EAAoB0K,EAAU35C,EAAI,EAAI,IAMpE,GAAG8xC,IAAkD,IAAzBv6B,KAAKI,IAAIk7B,IAAmB,CAEvD,IAAIiH,EAAWpB,GAAW5I,GACvBgK,EAAS3S,mBAAqBoI,IAChCiG,GAAmBsE,EAAWrH,IAC9B0B,GAAc2F,GACd1F,GAAqB0F,IAMvBjH,GAAa,EAEbjyB,EAAKu4B,qBAELrJ,EAAiBb,EAEjBuE,GAAO,kBAMR0E,WAAY,SAASpxB,GAEpB,IAAIgsB,IAAoBlS,EAASj0B,MAAO,CACvC,IAAIotC,EAAgBla,EAAUmJ,aAK9B,GAJG2H,IAA0BoJ,IAC5BtR,EAAS9yB,MAAM2rB,IAAMyY,EAAgB,KACrCpJ,EAAwBoJ,IAErBjzB,GAASksB,GAAmBn7B,IAAMxE,OAAO2mC,YAAchH,GAAmBl7B,IAAMzE,OAAO4mC,YAC1F,OAEDjH,GAAmBn7B,EAAIxE,OAAO2mC,WAC9BhH,GAAmBl7B,EAAIzE,OAAO4mC,YAG9BxR,EAAS9yB,MAAMqR,OAASgsB,GAAmBl7B,EAAI,KAmBhD,GAdA26B,GAAc56B,EAAI+I,EAAKmmB,WAAWqR,YAClC3F,GAAc36B,EAAI8I,EAAKmmB,WAAWV,aAElCkQ,KAEA3D,GAAW/6B,EAAI46B,GAAc56B,EAAIN,KAAKqtB,MAAM6N,GAAc56B,EAAI+oB,EAASoN,SACvE4E,GAAW96B,EAAI26B,GAAc36B,EAE7B08B,GAAgB5B,GAAW/6B,EAAI66B,IAE/Bc,GAAO,qBAIqBrsC,IAAzBgoC,EAAoC,CAMtC,IAJA,IAAI+K,EACH51C,EACA61C,EAEOn6C,EAAI,EAAGA,EA15BH,EA05BoBA,IAC/Bk6C,EAASrK,EAAa7vC,GACtBs0C,IAAiBt0C,EAAEmvC,GAAwByD,GAAW/6B,EAAGqiC,EAAOnW,GAAGpuB,OAEnEwkC,EAASlL,EAAkBjvC,EAAE,EAE1B4gC,EAASzW,MAAQmpB,KAAiB,IACpC6G,EAAS/G,GAAa+G,KAIvB71C,EAAOo0C,GAAYyB,MAINvK,GAAoBtrC,EAAKk1C,cAAgBl1C,EAAKixC,SAE1D30B,EAAKw5B,WAAY91C,GAEjBsc,EAAKg4B,WAAYsB,EAAQC,GAGhB,IAANn6C,IACF4gB,EAAKgiB,SAAWt+B,EAChBsc,EAAKu4B,oBAAmB,IAGzB70C,EAAKk1C,aAAc,IAEQ,IAAlBU,EAAO/wC,OAAgBgxC,GAAU,GAE1Cv5B,EAAKg4B,WAAYsB,EAAQC,GAEvB71C,GAAQA,EAAKT,YACf2xC,GAAmBlxC,EAAMmuC,IACzB0B,GAAc7vC,GACd8vC,GAAqB9vC,IAIvBsrC,GAAmB,EAGpBJ,EAAkBD,EAAiB3uB,EAAKgiB,SAASuE,kBACjD0K,GAAiBjxB,EAAKgiB,SAAS2S,UAG9B/C,GAAW36B,EAAIg6B,GAAeyH,OAAOzhC,EACrC26B,GAAW16B,EAAI+5B,GAAeyH,OAAOxhC,EACrCm8B,IAAsB,IAGvBT,GAAO,WAIRnM,OAAQ,SAAS0O,EAAesE,EAAa3kB,EAAOshB,EAAUsD,GAS1DD,IACF7K,EAAkBD,EAClBwF,GAAcl9B,EAAIN,KAAKI,IAAI0iC,EAAYxiC,GAAK26B,GAAW36B,EACvDk9B,GAAcj9B,EAAIP,KAAKI,IAAI0iC,EAAYviC,GAAK06B,GAAW16B,EACvDk9B,GAAgBzC,GAAiBC,KAGlC,IAAIqD,EAAgBP,GAAoBS,GAAe,GACtDD,EAAgB,GAEjBF,GAAqB,IAAKC,EAAeC,EAAeC,GACxDH,GAAqB,IAAKC,EAAeC,EAAeC,GAExD,IAAI5O,EAAmBoI,EACnBgL,EACA/H,GAAW36B,EADX0iC,EAEA/H,GAAW16B,EAGfq9B,GAAYW,GAEZ,IAAI16B,EAAW,SAASG,GACZ,IAARA,GACFg0B,EAAiBwG,EACjBvD,GAAW36B,EAAIi+B,EAAcj+B,EAC7B26B,GAAW16B,EAAIg+B,EAAch+B,IAE7By3B,GAAkBwG,EAAgB5O,GAAoB5rB,EAAM4rB,EAC5DqL,GAAW36B,GAAKi+B,EAAcj+B,EAAI0iC,GAAsBh/B,EAAMg/B,EAC9D/H,GAAW16B,GAAKg+B,EAAch+B,EAAIyiC,GAAsBh/B,EAAMg/B,GAG5DD,GACFA,EAAS/+B,GAGV04B,GAA8B,IAAR14B,IAGpBma,EACFmhB,GAAa,eAAgB,EAAG,EAAGnhB,EAAOshB,GAAYnX,EAAUlK,OAAO6V,KAAKK,MAAOzwB,GAEnFA,EAAS,KAwBXtZ,GAAI,GACJozC,GAAK,GACLR,GAAQ,GACR8F,GAAa,GACbC,GAAc,GACdC,GAAgB,GAChBC,GAAsB,GAEtBC,GAAa,GACbC,GAAa,GAKbC,GAAuB,EACvBC,GA7/BQ,CAACljC,EAAE,EAAEC,EAAE,GA8/BfkjC,GAAmB,EAYnBrG,GA1gCQ,CAAC98B,EAAE,EAAEC,EAAE,GA6gCfi9B,GA7gCQ,CAACl9B,EAAE,EAAEC,EAAE,GA8gCfmjC,GA9gCQ,CAACpjC,EAAE,EAAEC,EAAE,GA2hCfojC,GAA2B,SAASjG,EAAIC,GAGvC,OAFA2F,GAAWhjC,EAAIN,KAAKI,IAAKs9B,EAAGp9B,EAAIq9B,EAAGr9B,GACnCgjC,GAAW/iC,EAAIP,KAAKI,IAAKs9B,EAAGn9B,EAAIo9B,EAAGp9B,GAC5BP,KAAK4jC,KAAKN,GAAWhjC,EAAIgjC,GAAWhjC,EAAIgjC,GAAW/iC,EAAI+iC,GAAW/iC,IAE1EkhC,GAAsB,WAClBxH,IACFjB,EAAUiB,GACVA,EAAiB,OAGnB4J,GAAkB,WACdhK,IACFI,EAAiBlB,EAAW8K,IAC5BC,OAQFC,GAAkB,SAASvX,EAAIsJ,GAC5B,SAAItJ,GAAMA,IAAO59B,aAKd49B,EAAG9tB,aAAa,UAAY8tB,EAAG9tB,aAAa,SAASpO,QAAQ,sBAAwB,KAIpFwlC,EAAGtJ,GACCA,EAGDuX,GAAgBvX,EAAG3vB,WAAYi5B,KAGzCkO,GAAc,GACdC,GAAgC,SAAS94C,EAAG6kC,GAI3C,OAHGgU,GAAY9kC,SAAW6kC,GAAgB54C,EAAEmD,OAAQ+6B,EAAS8N,oBAE7D8E,GAAO,mBAAoB9wC,EAAG6kC,EAAQgU,IAC/BA,GAAY9kC,SAGpBglC,GAAuB,SAAS/pB,EAAO5vB,GAItC,OAHAA,EAAE+V,EAAI6Z,EAAMyC,MACZryB,EAAEgW,EAAI4Z,EAAMgqB,MACZ55C,EAAEe,GAAK6uB,EAAMiqB,WACN75C,GAER85C,GAAsB,SAAS3G,EAAIC,EAAI2G,GACtCA,EAAQhkC,EAAoB,IAAfo9B,EAAGp9B,EAAIq9B,EAAGr9B,GACvBgkC,EAAQ/jC,EAAoB,IAAfm9B,EAAGn9B,EAAIo9B,EAAGp9B,IAYxBgkC,GAAqC,WACpC,IAAInR,EAAU6H,GAAW16B,EAAI8I,EAAKgiB,SAASyR,gBAAgBv8B,EAC3D,OAAO,EAAKP,KAAKI,IAAKgzB,GAAW8H,GAAc36B,EAAI,KAKpDikC,GAAW,GACXC,GAAW,GACXC,GAAiB,GAEjBC,GAAkB,SAASx5C,GAE1B,KAAMu5C,GAAet4C,OAAS,GAC7Bs4C,GAAepC,MAgChB,OA7BIzJ,GAiBHiC,GAAe,EAEfqI,GAAch0C,SAAQ,SAAS5E,GACV,IAAjBuwC,GACF4J,GAAe,GAAKn6C,EACM,IAAjBuwC,KACT4J,GAAe,GAAKn6C,GAErBuwC,SAxBE3vC,EAAE2C,KAAKwC,QAAQ,UAAY,EAE1BnF,EAAEy5C,SAAWz5C,EAAEy5C,QAAQx4C,OAAS,IAClCs4C,GAAe,GAAKR,GAAqB/4C,EAAEy5C,QAAQ,GAAIJ,IACpDr5C,EAAEy5C,QAAQx4C,OAAS,IACrBs4C,GAAe,GAAKR,GAAqB/4C,EAAEy5C,QAAQ,GAAIH,OAKzDD,GAASlkC,EAAInV,EAAEyxB,MACf4nB,GAASjkC,EAAIpV,EAAEg5C,MACfK,GAASl5C,GAAK,GACdo5C,GAAe,GAAKF,IAefE,IAGRG,GAAuB,SAASvH,EAAMH,GAErC,IAAI2H,EAGHC,EAIAC,EACAC,EANAC,EAAYjK,GAAWqC,GAAQH,EAAMG,GAErCjhB,EAAM8gB,EAAMG,GAAQ,EACpB6H,EAAwB/H,GAAe98B,EAAI68B,EAAM78B,EACjD8kC,EAAiBhI,GAAe98B,EAAI8iC,GAAoB9iC,EAiBzD,GAXCwkC,EADEI,EAAY5K,GAAev6B,IAAIu9B,IAAS4H,EAAY5K,GAAer6B,IAAIq9B,GAC3DjU,EAAS6N,eAKT,EAGfgO,EAAYjK,GAAWqC,GAAQH,EAAMG,GAAQwH,GAG1Czb,EAASmN,gBAAkBwB,IAAmB3uB,EAAKgiB,SAASuE,oBAG1D2K,GAIqB,MAAfE,IAA+B,MAAT6C,GAAiBvD,IAE7C1d,GACC6oB,EAAY5K,GAAev6B,IAAIu9B,KACjCwH,EAAczb,EAAS6N,eACZoD,GAAev6B,IAAIu9B,GAC9ByH,EAAgBzK,GAAev6B,IAAIu9B,GAAQtC,GAAgBsC,KAIvDyH,GAAiB,GAAKK,EAAiB,IAAMrJ,KAAiB,GAClEkJ,EAAmBE,EAChBC,EAAiB,GAAKD,EAAwB/B,GAAoB9iC,IACpE2kC,EAAmB7B,GAAoB9iC,IAGrCg6B,GAAev6B,IAAIO,IAAMg6B,GAAer6B,IAAIK,IAC9C0kC,EAAYE,KAOXA,EAAY5K,GAAer6B,IAAIq9B,KACjCwH,EAAazb,EAAS6N,eACCoD,GAAer6B,IAAIq9B,GAC1CyH,EAAgB/J,GAAgBsC,GAAQhD,GAAer6B,IAAIq9B,KAGvDyH,GAAiB,GAAKK,EAAiB,IAAMrJ,KAAiB,GAClEkJ,EAAmBE,EAEhBC,EAAiB,GAAKD,EAAwB/B,GAAoB9iC,IACpE2kC,EAAmB7B,GAAoB9iC,IAIrCg6B,GAAev6B,IAAIO,IAAMg6B,GAAer6B,IAAIK,IAC9C0kC,EAAYE,KAzCfD,EAAmBE,EAmDR,MAAT7H,GAmBF,YAjBwB1tC,IAArBq1C,IACFhI,GAAgBgI,GAAkB,GAEjC/K,EADE+K,IAAqB7B,GAAoB9iC,GAO1Cg6B,GAAev6B,IAAIO,IAAMg6B,GAAer6B,IAAIK,SAC7B1Q,IAAdo1C,EACF/J,GAAW36B,EAAI0kC,EACL9K,IACVe,GAAW36B,GAAK68B,EAAM78B,EAAIwkC,SAIAl1C,IAArBq1C,EAKLzK,IAECN,GACAlC,EAAiB3uB,EAAKgiB,SAASuG,WACjCqJ,GAAWqC,IAASH,EAAMG,GAAQwH,IAWtCO,GAAe,SAASl6C,GAOvB,KAAc,cAAXA,EAAE2C,MAAwB3C,EAAEkuB,OAAS,GAIxC,GAAGisB,GACFn6C,EAAEoC,sBAIH,IAAGqsC,GAAyC,cAAXzuC,EAAE2C,KAAnC,CAYA,GARGm2C,GAA8B94C,GAAG,IACnCA,EAAEoC,iBAKH0uC,GAAO,eAEJpD,EAAsB,CACxB,IAAI0M,EAAejd,EAAUuL,YAAYsP,GAAeh4C,EAAEq6C,UAAW,MAClED,EAAe,IACjBA,EAAepC,GAAc/2C,QAE9B+2C,GAAcoC,GAAgB,CAACjlC,EAAEnV,EAAEyxB,MAAOrc,EAAEpV,EAAEg5C,MAAO74C,GAAIH,EAAEq6C,WAK5D,IAAIC,EAAkBd,GAAgBx5C,GACrCu6C,EAAYD,EAAgBr5C,OAE7B+tC,EAAiB,KAEjBkF,KAGIxF,GAA6B,IAAd6L,IAIlB7L,EAAca,IAAe,EAC7BpS,EAAUr+B,KAAK6R,OAAQ+7B,EAAexuB,GAEtCqwB,EACCmB,GACAF,GACAhB,EACAO,EACAF,EACAF,EACAC,GAAe,EAEhBU,GAAa,KAEbwB,GAAO,kBAAmBwJ,GAE1BhI,GAAgBzC,GAAiBC,IAEjCF,GAAaz6B,EAAIy6B,GAAax6B,EAAI,EAClCk9B,GAAgBwF,GAAYwC,EAAgB,IAC5ChI,GAAgByF,GAAaD,IAG7BG,GAAoB9iC,EAAI+6B,GAAW/6B,EAAI66B,GAEvCkI,GAAa,CAAC,CACb/iC,EAAG2iC,GAAW3iC,EACdC,EAAG0iC,GAAW1iC,IAGfi5B,EAAyBD,EAAoB4C,KAG7C4B,GAAqB/F,GAAgB,GAGrCyJ,KACAoC,OAKGzJ,GAAcsL,EAAY,IAAMlL,KAAyBN,IAC5DjC,EAAkBD,EAClB+B,GAAe,EAEfK,EAAaN,GAAgB,EAC7BiB,GAAax6B,EAAIw6B,GAAaz6B,EAAI,EAElCm9B,GAAgBzC,GAAiBC,IAEjCwC,GAAgBlzC,GAAGk7C,EAAgB,IACnChI,GAAgBE,GAAI8H,EAAgB,IAEpCpB,GAAoB95C,GAAGozC,GAAI+F,IAE3BlG,GAAcl9B,EAAIN,KAAKI,IAAIsjC,GAAiBpjC,GAAK26B,GAAW36B,EAC5Dk9B,GAAcj9B,EAAIP,KAAKI,IAAIsjC,GAAiBnjC,GAAK06B,GAAW16B,EACtC85B,EAAuBsJ,GAAyBp5C,GAAGozC,OAO3EgI,GAAc,SAASx6C,GAItB,GAFAA,EAAEoC,iBAECsrC,EAAsB,CACxB,IAAI0M,EAAejd,EAAUuL,YAAYsP,GAAeh4C,EAAEq6C,UAAW,MACrE,GAAGD,GAAgB,EAAG,CACrB,IAAIh7C,EAAI44C,GAAcoC,GACtBh7C,EAAE+V,EAAInV,EAAEyxB,MACRryB,EAAEgW,EAAIpV,EAAEg5C,OAIV,GAAGtK,EAAa,CACf,IAAI+L,EAAcjB,GAAgBx5C,GAClC,GAAIsvC,IAAeT,GAAWI,EAe7BD,EAAiByL,OAbjB,GAAGxI,GAAe98B,IAAM+6B,GAAW/6B,EAAI66B,GAEtCV,GAAa,QACP,CACN,IAAIlwB,EAAOvK,KAAKI,IAAIwlC,EAAY,GAAGtlC,EAAI2iC,GAAW3iC,GAAKN,KAAKI,IAAIwlC,EAAY,GAAGrlC,EAAI0iC,GAAW1iC,GAE3FP,KAAKI,IAAImK,IAzaS,KA0apBkwB,GAAalwB,EAAO,EAAI,IAAM,IAC9B4vB,EAAiByL,MAUtB9B,GAAmB,WAElB,GAAI3J,EAAJ,CAIA,IAAIuL,EAAYvL,EAAe/tC,OAE/B,GAAiB,IAAds5C,EASH,GALAjI,GAAgBlzC,GAAG4vC,EAAe,IAElCgD,GAAM78B,EAAI/V,GAAE+V,EAAI2iC,GAAW3iC,EAC3B68B,GAAM58B,EAAIhW,GAAEgW,EAAI0iC,GAAW1iC,EAExB65B,GAAcsL,EAAY,EAAG,CAO/B,GAJAzC,GAAW3iC,EAAI/V,GAAE+V,EACjB2iC,GAAW1iC,EAAIhW,GAAEgW,GAGZ48B,GAAM78B,IAAM68B,GAAM58B,GAhaR,SAASm9B,EAAIC,GAC7B,OAAOD,EAAGp9B,IAAMq9B,EAAGr9B,GAAKo9B,EAAGn9B,IAAMo9B,EAAGp9B,EA+ZPslC,CAAe1L,EAAe,GAAIwD,IAC7D,OAGDF,GAAgBE,GAAIxD,EAAe,IAG/BJ,IACHA,GAAe,EACfkC,GAAO,uBAIR,IAAI6J,EAAiBnC,GAAyBp5C,GAAEozC,IAE5CJ,EAAYwI,GAAoBD,GAGjCvI,EAAYl0B,EAAKgiB,SAASuE,iBAAmBvmB,EAAKgiB,SAASuE,iBAAmB,KAChFiL,IAAsB,GAIvB,IAAImL,EAAe,EAClBC,EAAe/H,KACfgI,EAAe/H,KAEhB,GAAKZ,EAAY0I,EAEhB,GAAG5c,EAASsN,eAAiBkE,IAAuB5C,GAAmB5uB,EAAKgiB,SAASuE,iBAAkB,CAEtG,IACIuW,EAAU,GADEF,EAAe1I,IACA0I,EAAe,KAE9C7J,GAAgB+J,GAChBlK,GAAO,eAAgBkK,GACvBxL,IAAkB,OAElBqL,GAAgBC,EAAe1I,GAAa0I,GAC1B,IACjBD,EAAe,GAEhBzI,EAAY0I,EAAeD,GAAgBC,EAAe,QAGhD1I,EAAY2I,KAEvBF,GAAgBzI,EAAY2I,IAAiC,EAAfD,IAC5B,IACjBD,EAAe,GAEhBzI,EAAY2I,EAAeF,EAAeC,GAGxCD,EAAe,IACjBA,EAAe,GAOhB3B,GAAoB95C,GAAGozC,GAAI6F,IAG3BzI,GAAaz6B,GAAKkjC,GAAaljC,EAAIojC,GAAiBpjC,EACpDy6B,GAAax6B,GAAKijC,GAAajjC,EAAImjC,GAAiBnjC,EACpDk9B,GAAgBiG,GAAkBF,IAElCvI,GAAW36B,EAAI+8B,GAAoB,IAAKE,GACxCtC,GAAW16B,EAAI88B,GAAoB,IAAKE,GAExC7D,EAAe6D,EAAYvF,EAC3BA,EAAiBuF,EACjBb,SAEM,CAIN,IAAIjC,GACH,OAqBD,GAlBGC,KACFA,IAAe,EAIX16B,KAAKI,IAAI+8B,GAAM78B,IAtiBG,KAuiBrB68B,GAAM78B,GAAK65B,EAAe,GAAG75B,EAAI4iC,GAAY5iC,GAG1CN,KAAKI,IAAI+8B,GAAM58B,IA1iBG,KA2iBrB48B,GAAM58B,GAAK45B,EAAe,GAAG55B,EAAI2iC,GAAY3iC,IAI/C0iC,GAAW3iC,EAAI/V,GAAE+V,EACjB2iC,GAAW1iC,EAAIhW,GAAEgW,EAGF,IAAZ48B,GAAM78B,GAAuB,IAAZ68B,GAAM58B,EACzB,OAGD,GAAkB,MAAfk6B,IAAsBpR,EAASuN,qBAlfH,QAAvBvN,EAASiO,WAAuBU,IAAoB3uB,EAAKgiB,SAASuE,iBAmf1D,CACdmL,GAAax6B,GAAK48B,GAAM58B,EACxB06B,GAAW16B,GAAK48B,GAAM58B,EAEtB,IAAI6lC,EAAe7B,KAOnB,OALA5K,GAAyB,EACzBsC,GAAO,iBAAkBmK,GAEzBhK,GAAgBgK,QAChB1J,MAtdY,SAAS/3B,EAAMrE,EAAGC,GACjC,GAAGoE,EAAO60B,EAAyB,GAAI,CACtC,IAAItwC,EAAIm6C,GAAWj3C,OAAS,EAAIi3C,GAAW1wB,QAAU,GACrDzpB,EAAEoX,EAAIA,EACNpX,EAAEqX,EAAIA,EACN8iC,GAAWvsC,KAAK5N,GAChBswC,EAAyB70B,GAqdzB0hC,CAAclK,KAAmB5xC,GAAE+V,EAAG/V,GAAEgW,GAExCy5B,GAAS,EACTM,GAAiBjxB,EAAKgiB,SAAS2S,OAEP6G,GAAqB,IAAK1H,MAEjD0H,GAAqB,IAAK1H,IAE1BS,GAAY3C,IACZyB,SAQH4J,GAAiB,SAASn7C,GAEzB,GAAGkuC,EAAU/M,aAAe,CAE3B,GAAGsN,GAAyC,YAAXzuC,EAAE2C,KAClC,OAOG3C,EAAE2C,KAAKwC,QAAQ,UAAY,IAC9B09B,aAAa4L,GACbA,EAA6B7qC,YAAW,WACvC6qC,EAA6B,IAC3B,MAWL,IAAI/H,EAEJ,GARAoK,GAAO,aAEJgI,GAA8B94C,GAAG,IACnCA,EAAEoC,iBAKAsrC,EAAsB,CACxB,IAAI0M,EAAejd,EAAUuL,YAAYsP,GAAeh4C,EAAEq6C,UAAW,MAElED,GAAgB,IAClB1T,EAAesR,GAAcoD,OAAOhB,EAAc,GAAG,GAElDvQ,UAAUC,kBAMZpD,EAAa/jC,KALS,CACrB04C,EAAG,QACHC,EAAG,QACHC,EAAG,OAEgCv7C,EAAEwmC,aAElCE,EAAa/jC,OAChB+jC,EAAa/jC,KAAO3C,EAAEwmC,aAAe,UAGtCE,EAAa/jC,KAAO3C,EAAEwmC,aAAe,SAMxC,IACCgV,EADGC,EAAYjC,GAAgBx5C,GAE/Bu6C,EAAYkB,EAAUx6C,OAOvB,GALc,YAAXjB,EAAE2C,OACJ43C,EAAY,GAII,IAAdA,EAEF,OADAvL,EAAiB,MACV,EAIS,IAAduL,GACFjI,GAAgByF,GAAa0D,EAAU,IAKvB,IAAdlB,GAAoBjL,IAAeD,KACjC3I,IACW,YAAX1mC,EAAE2C,KACJ+jC,EAAe,CAACvxB,EAAGnV,EAAEyxB,MAAOrc,EAAGpV,EAAEg5C,MAAOr2C,KAAK,SACpC3C,EAAE4vB,gBAAkB5vB,EAAE4vB,eAAe,KAC9C8W,EAAe,CAACvxB,EAAGnV,EAAE4vB,eAAe,GAAG6B,MAAOrc,EAAGpV,EAAE4vB,eAAe,GAAGopB,MAAOr2C,KAAK,WAInFmuC,GAAO,eAAgB9wC,EAAG0mC,IAI3B,IAAIgV,GAAmB,EAmCvB,GAhCiB,IAAdnB,IACF7L,GAAc,EACdvR,EAAU7lB,OAAO3G,OAAQ+7B,EAAexuB,GAExCo4B,KAEGrH,EAEFyM,EAAkB,GACa,IAAtBpD,KACToD,EAAkB1K,KAAoBsH,KAGxCA,GAAiC,IAAdiC,EAAkBvJ,MAAqB,EAGzDwK,GADuB,IAArBE,GAA0BA,EAAkB,IAChC,OAEA,QAGZzM,GAAcsL,EAAY,IAC5BtL,GAAa,EAGI,IAAdsL,IACFiB,EAAc,iBAEf1K,GAAO,qBAGR9B,EAAiB,KACbH,GAAWD,GAAiBS,IAAyBb,EAezD,GAVA0F,KAGI5F,IACHA,EAAmBqN,MAGpBrN,EAAiBsN,oBAAoB,KAGlCpN,EAIF,GAFmB4K,KAEDlb,EAASwN,kBAC1BxtB,EAAK4lB,YACC,CACN,IAAI+X,EAAa/L,GAAW16B,EAC3B0mC,EAAmBrM,GAEpB0E,GAAa,eAAgB,EAAG,EAAG,IAAKhX,EAAUlK,OAAOoW,MAAMN,KAAK,SAASlwB,GAE5Ei3B,GAAW16B,GAAK8I,EAAKgiB,SAASyR,gBAAgBv8B,EAAIymC,GAAchjC,EAAMgjC,EAEtE5K,IAAmB,EAAI6K,GAAoBjjC,EAAMijC,GACjDvK,QAGDT,GAAO,iBAAkB,OAlB3B,CA0BA,IAAM/B,GAAsBM,KAAuC,IAAdkL,EAAiB,CAErE,GADkBwB,GAA8BP,EAAalN,GAE5D,OAEDkN,EAAc,gBAIZnM,KAKgB,UAAhBmM,GAMCzM,GAAsBlC,EAAiB3uB,EAAKgiB,SAASuG,UACxDuV,GAAoB1N,GANpB2N,QAaFN,GAAiC,WAEhC,IAAIO,EACHC,EAGG98C,EAAI,CACP+8C,gBAAiB,GACjBC,cAAe,GACfC,eAAgB,GAChBC,cAAgB,GAChBC,qBAAuB,GACvBC,uBAAyB,GACzBC,0BAA4B,GAC5BC,eAAiB,GACjBC,oBAAqB,GACrBC,gBAAiB,GACjBjB,oBAAqB,SAASzJ,GAGzB+F,GAAWj3C,OAAS,GACvBi7C,EAAoBlL,KAAoB3C,EAAyB,GACjE8N,EAAiBjE,GAAWA,GAAWj3C,OAAO,GAAGkxC,KAEjD+J,EAAoBlL,KAAoB5C,EACxC+N,EAAiBpE,GAAY5F,IAE9B9yC,EAAE+8C,gBAAgBjK,GAAQ2F,GAAW3F,GAAQgK,EAC7C98C,EAAEg9C,cAAclK,GAAQt9B,KAAKI,IAAI5V,EAAE+8C,gBAAgBjK,IAChD9yC,EAAEg9C,cAAclK,GAAQ,GAC1B9yC,EAAEi9C,eAAenK,GAAQ9yC,EAAE+8C,gBAAgBjK,GAAQ+J,EAEnD78C,EAAEi9C,eAAenK,GAAQ,EAEtBt9B,KAAKI,IAAI5V,EAAEi9C,eAAenK,IAAS,KACtC9yC,EAAEi9C,eAAenK,GAAQ,GAG1B9yC,EAAEk9C,cAAcpK,GAAQ,IACxB9yC,EAAEm9C,qBAAqBrK,GAAQ,EAAI9yC,EAAEk9C,cAAcpK,GACnD9yC,EAAEo9C,uBAAuBtK,GAAQ,GAGlC2K,8BAA+B,SAAS3K,EAAMnf,GACzC3zB,EAAEw9C,gBAAgB1K,KAElBrC,GAAWqC,GAAQhD,GAAev6B,IAAIu9B,GACxC9yC,EAAEu9C,oBAAoBzK,GAAQhD,GAAev6B,IAAIu9B,GAExCrC,GAAWqC,GAAQhD,GAAer6B,IAAIq9B,KAC/C9yC,EAAEu9C,oBAAoBzK,GAAQhD,GAAer6B,IAAIq9B,SAGf1tC,IAAhCpF,EAAEu9C,oBAAoBzK,KACxB9yC,EAAEk9C,cAAcpK,GAAQ,GACxB9yC,EAAEm9C,qBAAqBrK,GAAQ,EAAI9yC,EAAEk9C,cAAcpK,GAChD9yC,EAAEq9C,0BAA0BvK,GAAQ,MAEtC9yC,EAAEi9C,eAAenK,GAAQ,EACzB9yC,EAAEw9C,gBAAgB1K,IAAQ,EAE1BgC,GAAa,gBAAgBhC,EAAKrC,GAAWqC,GAC5C9yC,EAAEu9C,oBAAoBzK,GACtBnf,GAAS,IACTmK,EAAUlK,OAAO6V,KAAKC,KACtB,SAASgU,GACRjN,GAAWqC,GAAQ4K,EACnBxL,YAUNyL,oBAAqB,SAAS7K,GACzB9yC,EAAEw9C,gBAAgB1K,KACrB9yC,EAAEo9C,uBAAuBtK,GAAQ9yC,EAAEo9C,uBAAuBtK,IAAS9yC,EAAEk9C,cAAcpK,GAC5E9yC,EAAEm9C,qBAAqBrK,GACvB9yC,EAAEm9C,qBAAqBrK,GAAQ9yC,EAAE49C,SAAW,IAEnD59C,EAAEq9C,0BAA0BvK,GAAQt9B,KAAKI,IAAI5V,EAAEi9C,eAAenK,GAAQ9yC,EAAEo9C,uBAAuBtK,IAC/F9yC,EAAEs9C,eAAexK,GAAQ9yC,EAAEi9C,eAAenK,GAAQ9yC,EAAEo9C,uBAAuBtK,GAAQ9yC,EAAE49C,SACrFnN,GAAWqC,IAAS9yC,EAAEs9C,eAAexK,KAKvC+K,YAAa,WACZ,GAAKpJ,GAAYqJ,UAChBrJ,GAAYqJ,QAAQrtC,IAAM89B,EAAWvuC,EAAE69C,aAEvC79C,EAAEwZ,IAAMm4B,KACR3xC,EAAE49C,SAAW59C,EAAEwZ,IAAMxZ,EAAE+9C,QACvB/9C,EAAE+9C,QAAU/9C,EAAEwZ,IAEdxZ,EAAE29C,oBAAoB,KACtB39C,EAAE29C,oBAAoB,KAEtBzL,KAEAlyC,EAAEy9C,8BAA8B,KAChCz9C,EAAEy9C,8BAA8B,KAG5Bz9C,EAAEq9C,0BAA0BvnC,EAAI,KAAQ9V,EAAEq9C,0BAA0BtnC,EAAI,KAQ3E,OALA06B,GAAW36B,EAAIN,KAAKqtB,MAAM4N,GAAW36B,GACrC26B,GAAW16B,EAAIP,KAAKqtB,MAAM4N,GAAW16B,GACrCm8B,UAEAyC,GAAe,aAOnB,OAAO30C,GAGR28C,GAAsB,SAASqB,GAU9B,GARAA,EAASzB,oBAAoB,KAE7BzM,GAAiBjxB,EAAKgiB,SAAS2S,OAE/BwK,EAAST,oBAAsB,GAC/BS,EAASR,gBAAkB,GAGxBhoC,KAAKI,IAAIooC,EAASf,eAAennC,IAAM,KAAQN,KAAKI,IAAIooC,EAASf,eAAelnC,IAAM,IAMxF,OALAioC,EAASX,0BAA0BvnC,EAAIkoC,EAASX,0BAA0BtnC,EAAI,EAG9EioC,EAASP,8BAA8B,KACvCO,EAASP,8BAA8B,MAChC,EAIR7I,GAAwB,WACxBoJ,EAASD,QAAUpM,KACnBqM,EAASH,eAIVnB,GAAgC,SAASP,EAAalN,GACrD,IAAIgP,EAOAC,EAmBAC,EAjBJ,GARInO,KACH+I,GAAuB7L,GAOL,UAAhBiP,EAAyB,CAC3B,IAAIiC,EAAiB3F,GAAW3iC,EAAI4iC,GAAY5iC,EAC/CuoC,EAAkBpP,EAAiB+N,cAAclnC,EAAI,GAInDsoC,EA/7BmB,KAg8BpBC,GAAmBpP,EAAiB8N,gBAAgBjnC,EAAI,IAEzDooC,GAAa,EACJE,GAn8BY,KAo8BpBC,GAAmBpP,EAAiB8N,gBAAgBjnC,GAAK,MAE1DooC,EAAY,GAMXA,KAEFhR,GAAqBgR,GAEE,GACtBhR,EAAoBrO,EAASzW,KAAOmpB,KAAe,EAAI,EACvD4M,GAAa,GACJjR,GAAqBqE,OAC9BrE,EAAoBrO,EAASzW,KAAO,EAAImpB,KAAe,EACvD4M,GAAa,GAGVA,IAActf,EAASzW,OAC1B0oB,IAAcoN,EACdvN,IAAsBuN,EACtBD,GAAc,IAOhB,IAEIK,EAFAC,EAAa1N,GAAW/6B,EAAI66B,GAC5B6N,EAAgBhpC,KAAKI,IAAK2oC,EAAa3L,GAAe98B,GA2C1D,OAvCImoC,GAAeM,EAAa3L,GAAe98B,GAAMm5B,EAAiBgO,eAAennC,EAAI,GAIxFwoC,EAAqB9oC,KAAKI,IAAIq5B,EAAiBgO,eAAennC,GAAK,EAC7D0oC,EAAgBhpC,KAAKI,IAAIq5B,EAAiBgO,eAAennC,GACzD,IAENwoC,EAAqB9oC,KAAKD,IAAI+oC,EAAoB,KAClDA,EAAqB9oC,KAAKC,IAAI6oC,EAAoB,MAPlDA,EAAqB,IAUnBvF,KAAyB7L,IAC3B+Q,GAAc,GAGfjO,IAAuB,EAEvByB,GAAO,uBAEPqD,GAAa,aAAclC,GAAe98B,EAAGyoC,EAAYD,EAAoBxgB,EAAUlK,OAAOoW,MAAMN,IACnG+I,IACA,WACCoC,KACA7E,IAAuB,EACvB+I,IAAwB,GAErBkF,GAAelF,KAAyB7L,IAC1CruB,EAAKi4B,iBAGNrF,GAAO,6BAINwM,GACFp/B,EAAKi4B,gBAAe,GAGdmH,GAGR1C,GAAsB,SAASkD,GAC9B,OAAQ,EAAI5O,EAAuB4O,EAAkBhR,GAItDmP,GAAuB,WACtB,IAAI5I,EAAgBxG,EACnBiO,EAAe/H,KACfgI,EAAe/H,KAEXnG,EAAiBiO,EACrBzH,EAAgByH,EACLjO,EAAiBkO,IAC5B1H,EAAgB0H,GAGjB,IACCriC,EACAqlC,EAAiBtO,GAElB,OAAGD,KAAoBjB,IAAiBmB,IAAuB7C,EAAiBiO,GAE/E58B,EAAK4lB,SACE,IAGL0L,KACF92B,EAAW,SAASG,GACnBo4B,IAZgB,EAYiB8M,GAAkBllC,EAAMklC,KAI3D7/B,EAAKymB,OAAO0O,EAAe,EAAG,IAAMlW,EAAUlK,OAAOoW,MAAMN,IAAKrwB,IACzD,IAIT83B,GAAgB,WAAY,CAC3BC,cAAe,CAEduN,aAAc,WAGb,IAAIC,EAAgB,SAASC,EAAMC,EAAM/1B,EAAMg2B,EAAIjlC,GAClDk0B,EAAkB6Q,EAAOC,EACzB7Q,EAAiB4Q,EAAO91B,EACxBmlB,EAAgB2Q,EAAOE,EAEtB5Q,EADEr0B,EACiB+kC,EAAO/kC,EAEP,KAIrBu0B,EAAuBQ,EAAUtE,eACNsE,EAAUlf,QAEpCkf,EAAUlf,OAAQ,GAGhB0e,EACC7D,UAAUC,iBAEZmU,EAAc,YAAa,OAAQ,OAAQ,KAAM,UAEjDA,EAAc,UAAW,OAAQ,OAAQ,KAAM,UAEvC/P,EAAUlf,OACnBivB,EAAc,QAAS,QAAS,OAAQ,MAAO,UAC/CtQ,GAAqB,GAErBsQ,EAAc,QAAS,OAAQ,OAAQ,MAGxCvR,EAAgBY,EAAiB,IAAMC,EAAiB,IAAOC,EAC/Db,EAAcU,EAEXK,IAAyBC,IAC3BA,EAAsB9D,UAAUwU,eAAiB,GAAOxU,UAAUyU,iBAAmB,GAGtFpgC,EAAKqlB,kBAAoBoK,EAEzBf,EAAqBS,GAAmB6M,GACxCtN,EAAqBU,GAAkBkN,GACvC5N,EAAqBW,GAAiB4N,GAEnC3N,IACFZ,EAAqBY,GAAoBZ,EAAqBW,IAI5DW,EAAUlf,QACZ2d,GAAe,aACfD,GAAiB,qBACjBE,EAAqB2R,UAAY3R,EAAqBS,GACtDT,EAAqB4R,UAAY5R,EAAqBU,GACtDV,EAAqB6R,QAAU7R,EAAqBW,IAGjDI,IAEHzP,EAASmN,gBAAiB,OAuB9B,IAAIgL,GAmLAqI,GAGHC,GACAxE,GAYGnE,GACHpF,GAnMAwF,GAAc,SAASx0C,EAAM4hB,EAAKulB,EAAK6V,GAWtC,IAAIC,EATDxI,IACFxT,aAAawT,IAGd8D,IAAsB,EACtBwE,IAAqB,EAKlB/8C,EAAKk9C,eACPD,EAAcj9C,EAAKk9C,cACnBl9C,EAAKk9C,cAAgB,MAErBD,EAAc3gB,EAAS6gB,kBAAoB7gB,EAAS6gB,iBAAiBxS,GAGtE,IA8CKyS,EACHC,EA/CEllC,EAAWgvB,EAAM7K,EAASmH,sBAAwBnH,EAASoH,sBAE3DiP,EAAa,WAChBP,GAAe,eACXjL,GAQH7qB,EAAK6nB,SAASrzB,gBAAgB,SAC9BwL,EAAKizB,GAAGz+B,gBAAgB,WARxBu+B,GAAgB,GACbztB,IACFA,EAAIvQ,MAAMG,QAAU,SAErB+pB,EAAUz8B,SAASqlC,EAAU,qBAC7B+K,GAAO,eAAiB/H,EAAM,SAAW,WAMvC6V,GACFA,IAEDzE,IAAsB,GAIvB,IAAIpgC,IAAa8kC,QAAiCp6C,IAAlBo6C,EAAY1pC,EAmB3C,OAjBA27B,GAAO,eAAiB/H,EAAM,MAAQ,OAEtC8D,EAAiBjrC,EAAK6iC,iBACtB6N,GAAgBxC,GAAaluC,EAAK+vC,iBAClCJ,KAEAxL,EAAS9yB,MAAMi+B,QAAUnI,EAAM,EAAI,EACnCkI,GAAgB,QAEbl3B,EACFnW,YAAW,WACV2wC,MACEx6B,GAEHw6B,KAOGyK,EAAe1S,EAClB2S,GAAkB/gC,EAAKgiB,SAAS3T,KAAOrO,EAAKgiB,SAASgf,WAAahhB,EAASyN,gBAGzE/pC,EAAKu9C,UACPv9C,EAAKu9C,QAAQlsC,MAAMmsC,yBAA2B,UAG3CrW,IACH8D,EAAiBgS,EAAY5L,EAAIrxC,EAAKqxC,EACtCnD,GAAW36B,EAAI0pC,EAAY1pC,EAC3B26B,GAAW16B,EAAIypC,EAAYzpC,EAAI24B,EAE/B7vB,EAAK+gC,EAAiB,WAAa,MAAMhsC,MAAMi+B,QAAU,KACzDK,MAGD0C,GAAwB,eAErBlL,IAAQiW,GACV7hB,EAAU18B,YAAYslC,EAAU,qBAG9BkZ,IACClW,EACF5L,GAAY6hB,EAAe,SAAW,OAAS,SAAUjZ,EAAU,yBAEnEniC,YAAW,WACVu5B,EAAUz8B,SAASqlC,EAAU,2BAC3B,KAILsQ,GAAqBzyC,YAAW,WAK/B,GAHAktC,GAAO,eAAiB/H,EAAM,MAAQ,OAGlCA,EAmBG,CAGN,IAAIsK,EAAgBwL,EAAY5L,EAAIrxC,EAAKqxC,EACxC4E,EAAmB,CAClB1iC,EAAG26B,GAAW36B,EACdC,EAAG06B,GAAW16B,GAEfqvB,EAAmBoI,EACnBwS,EAAkB5P,GAClB/2B,EAAW,SAASG,GAER,IAARA,GACFg0B,EAAiBwG,EACjBvD,GAAW36B,EAAI0pC,EAAY1pC,EAC3B26B,GAAW16B,EAAIypC,EAAYzpC,EAAK64B,IAEhCpB,GAAkBwG,EAAgB5O,GAAoB5rB,EAAM4rB,EAC5DqL,GAAW36B,GAAK0pC,EAAY1pC,EAAI0iC,EAAiB1iC,GAAK0D,EAAMg/B,EAAiB1iC,EAC7E26B,GAAW16B,GAAKypC,EAAYzpC,EAAI64B,EAAwB4J,EAAiBziC,GAAKyD,EAAMg/B,EAAiBziC,GAGtGm8B,KACG0N,EACFlZ,EAAS9yB,MAAMi+B,QAAU,EAAIr4B,EAE7Bo4B,GAAiBoO,EAAkBxmC,EAAMwmC,IAIzCL,EACF7K,GAAa,cAAe,EAAG,EAAGp6B,EAAUojB,EAAUlK,OAAOoW,MAAMN,IAAKrwB,EAAU67B,IAElF77B,EAAS,GACT29B,GAAqBzyC,WAAW2wC,EAAYx6B,EAAW,UA9CxD8yB,EAAiBjrC,EAAK6iC,iBACtB6N,GAAgBxC,GAAaluC,EAAK+vC,iBAClCJ,KACAN,GAAgB,GAEbgO,EACFlZ,EAAS9yB,MAAMi+B,QAAU,EAEzBD,GAAgB,GAGjBoF,GAAqBzyC,WAAW2wC,EAAYx6B,EAAW,MAuCtDgvB,EAAM,GAAK,KAmBhBuW,GAAmB,GACnBC,GAAsB,GAGtBC,GAA4B,CAC3B/4C,MAAO,EACPg5C,SAAU,wGACVC,yBAAyB,EACzBC,QAAS,CAAC,EAAE,GACZle,cAAe,WACd,OAAOid,GAAOz9C,SAmChB6xC,GAAqB,SAASlxC,EAAM8yC,EAActC,GAEjD,GAAIxwC,EAAK2qB,MAAQ3qB,EAAKs9C,UAAW,CAChC,IAAIU,GAAaxN,EAcjB,GAZGwN,IACEh+C,EAAK0hC,OACR1hC,EAAK0hC,KAAO,CAAC1E,IAAI,EAAEC,OAAO,IAG3BiS,GAAO,sBAAuBlvC,IAI/B09C,GAAiBnqC,EAAIu/B,EAAav/B,EAClCmqC,GAAiBlqC,EAAIs/B,EAAat/B,EAAIxT,EAAK0hC,KAAK1E,IAAMh9B,EAAK0hC,KAAKzE,OAE5D+gB,EAAW,CACd,IAAIC,EAASP,GAAiBnqC,EAAIvT,EAAKqxC,EACnC6M,EAASR,GAAiBlqC,EAAIxT,EAAK0zC,EAEvC1zC,EAAK6kC,SAAWoZ,EAASC,EAASD,EAASC,EAG3C,IAAI3T,EAAYjO,EAASiO,UAEP,SAAdA,EACHiG,EAAY,EACY,QAAdjG,IACViG,EAAYxwC,EAAK6kC,UAGd2L,EAAY,IACfA,EAAY,GAGbxwC,EAAK6iC,iBAAmB2N,EAEpBxwC,EAAKixC,SAERjxC,EAAKixC,OAlED,CACN+D,OAAO,CAACzhC,EAAE,EAAEC,EAAE,GACdN,IAAI,CAACK,EAAE,EAAEC,EAAE,GACXR,IAAI,CAACO,EAAE,EAAEC,EAAE,KAmEX,IAAIg9B,EACH,OASD,OA1E8B,SAASxwC,EAAMm+C,EAAiBC,GAC/D,IAAInN,EAASjxC,EAAKixC,OAGlBA,EAAO+D,OAAOzhC,EAAIN,KAAKqtB,OAAOod,GAAiBnqC,EAAI4qC,GAAmB,GACtElN,EAAO+D,OAAOxhC,EAAIP,KAAKqtB,OAAOod,GAAiBlqC,EAAI4qC,GAAmB,GAAKp+C,EAAK0hC,KAAK1E,IAGrFiU,EAAO/9B,IAAIK,EAAK4qC,EAAkBT,GAAiBnqC,EAC9CN,KAAKqtB,MAAMod,GAAiBnqC,EAAI4qC,GAChClN,EAAO+D,OAAOzhC,EAEnB09B,EAAO/9B,IAAIM,EAAK4qC,EAAkBV,GAAiBlqC,EAC9CP,KAAKqtB,MAAMod,GAAiBlqC,EAAI4qC,GAAmBp+C,EAAK0hC,KAAK1E,IAC7DiU,EAAO+D,OAAOxhC,EAGnBy9B,EAAOj+B,IAAIO,EAAK4qC,EAAkBT,GAAiBnqC,EAAK,EAAI09B,EAAO+D,OAAOzhC,EAC1E09B,EAAOj+B,IAAIQ,EAAK4qC,EAAkBV,GAAiBlqC,EAAKxT,EAAK0hC,KAAK1E,IAAMiU,EAAO+D,OAAOxhC,EAkDrF6qC,CAA8Br+C,EAAMA,EAAKqxC,EAAIb,EAAWxwC,EAAK0zC,EAAIlD,GAE7DwN,GAAaxN,IAAcxwC,EAAK6iC,mBACnC7iC,EAAK+vC,gBAAkB/vC,EAAKixC,OAAO+D,QAG7Bh1C,EAAKixC,OAQZ,OANAjxC,EAAKqxC,EAAIrxC,EAAK0zC,EAAI,EAClB1zC,EAAK6iC,iBAAmB7iC,EAAK6kC,SAAW,EACxC7kC,EAAKixC,OApFC,CACN+D,OAAO,CAACzhC,EAAE,EAAEC,EAAE,GACdN,IAAI,CAACK,EAAE,EAAEC,EAAE,GACXR,IAAI,CAACO,EAAE,EAAEC,EAAE,IAkFXxT,EAAK+vC,gBAAkB/vC,EAAKixC,OAAO+D,OAG5Bh1C,EAAKixC,QAQdqN,GAAe,SAASz5C,EAAO7E,EAAMu+C,EAAS38B,EAAK48B,EAAkBC,GAGjEz+C,EAAKs9C,WAIL17B,IAEF5hB,EAAK0+C,eAAgB,EACrB7O,GAAc7vC,EAAM4hB,EAAM5hB,IAASsc,EAAKgiB,UAAYqQ,IAEpD4P,EAAQ9uC,YAAYmS,GAEjB68B,GACFz8C,YAAW,WACPhC,GAAQA,EAAK2+C,QAAU3+C,EAAK8oB,cAC9B9oB,EAAK8oB,YAAYzX,MAAMG,QAAU,OACjCxR,EAAK8oB,YAAc,QAElB,OAON81B,GAAgB,SAAS5+C,GACxBA,EAAKokC,SAAU,EACfpkC,EAAK2+C,QAAS,EACd,IAAI/8B,EAAM5hB,EAAK4hB,IAAM2Z,EAAUsG,SAAS,YAAa,OACjD8Q,EAAa,WAChB3yC,EAAKokC,SAAU,EACfpkC,EAAK2+C,QAAS,EAEX3+C,EAAK6+C,aACP7+C,EAAK6+C,aAAa7+C,GAElBA,EAAK4hB,IAAM,KAEZA,EAAIk9B,OAASl9B,EAAIm9B,QAAU,KAC3Bn9B,EAAM,MAUP,OARAA,EAAIk9B,OAASnM,EACb/wB,EAAIm9B,QAAU,WACb/+C,EAAKs9C,WAAY,EACjB3K,KAGD/wB,EAAI+I,IAAM3qB,EAAK2qB,IAER/I,GAERo9B,GAAiB,SAASh/C,EAAMi/C,GAC/B,GAAGj/C,EAAK2qB,KAAO3qB,EAAKs9C,WAAat9C,EAAKT,UAOrC,OALG0/C,IACFj/C,EAAKT,UAAUi+B,UAAY,IAG5Bx9B,EAAKT,UAAUi+B,UAAYlB,EAASuhB,SAAS1pC,QAAQ,QAAUnU,EAAK2qB,MAC7D,GAITklB,GAAgB,SAAS7vC,EAAM4hB,EAAKs9B,GACnC,GAAIl/C,EAAK2qB,IAAT,CAII/I,IACHA,EAAM5hB,EAAKT,UAAU4/C,WAGtB,IAAI9N,EAAI6N,EAASl/C,EAAKqxC,EAAIp+B,KAAKqtB,MAAMtgC,EAAKqxC,EAAIrxC,EAAK6kC,UAClD6O,EAAIwL,EAASl/C,EAAK0zC,EAAIzgC,KAAKqtB,MAAMtgC,EAAK0zC,EAAI1zC,EAAK6kC,UAE7C7kC,EAAK8oB,cAAgB9oB,EAAK2+C,SAC5B3+C,EAAK8oB,YAAYzX,MAAMiH,MAAQ+4B,EAAI,KACnCrxC,EAAK8oB,YAAYzX,MAAMqR,OAASgxB,EAAI,MAGrC9xB,EAAIvQ,MAAMiH,MAAQ+4B,EAAI,KACtBzvB,EAAIvQ,MAAMqR,OAASgxB,EAAI,OAExB0L,GAAoB,WAEnB,GAAGzB,GAAoBt+C,OAAQ,CAG9B,IAFA,IAAIggD,EAEI3jD,EAAI,EAAGA,EAAIiiD,GAAoBt+C,OAAQ3D,KAC9C2jD,EAAW1B,GAAoBjiD,IAClBk6C,OAAO/wC,QAAUw6C,EAASx6C,OACtCy5C,GAAae,EAASx6C,MAAOw6C,EAASr/C,KAAMq/C,EAASd,QAASc,EAASz9B,IAAK,EAAOy9B,EAASC,kBAG9F3B,GAAsB,KAMzB/O,GAAgB,aAAc,CAE7BC,cAAe,CAEd0Q,aAAc,SAAS16C,GACtBA,EAAQiqC,GAAajqC,GACrB,IAAI7E,EAAOo0C,GAAWvvC,GAElB7E,KAAUA,EAAK2+C,SAAU3+C,EAAKokC,SAAakH,KAI/C4D,GAAO,cAAerqC,EAAO7E,GAExBA,EAAK2qB,KAIVi0B,GAAc5+C,KAEfw/C,eAAgB,WACfjkB,EAAUgH,OAAOjG,EAAUshB,IAA2B,GACtDthC,EAAKnN,MAAQ2tC,GAAS3tC,EACtBilC,GAAa93B,EAAKmjC,UAClBzQ,GAAe1S,EAASuD,cAIPvD,EAASzW,KACvBmpB,KAAiB,IACnB1S,EAASzW,MAAO,GAGjBoW,GAAQ,gBAAgB,SAASze,GAEhC,IAIC9hB,EAJG8B,EAAI8+B,EAASyhB,QAChB2B,EAAkB,OAATliC,GAAwBA,GAAQ,EACzCmiC,EAAgB1sC,KAAKD,IAAIxV,EAAE,GAAIwxC,MAC/B4Q,EAAe3sC,KAAKD,IAAIxV,EAAE,GAAIwxC,MAI/B,IAAItzC,EAAI,EAAGA,IAAMgkD,EAASE,EAAeD,GAAgBjkD,IACxD4gB,EAAKijC,aAAa5U,EAAkBjvC,GAErC,IAAIA,EAAI,EAAGA,IAAMgkD,EAASC,EAAgBC,GAAelkD,IACxD4gB,EAAKijC,aAAa5U,EAAkBjvC,MAItCugC,GAAQ,iBAAiB,WACxB3f,EAAKgiB,SAAS4e,cAAgB5gB,EAAS6gB,kBAAoB7gB,EAAS6gB,iBAAiBxS,MAGtF1O,GAAQ,yBAA0BmjB,IAClCnjB,GAAQ,mBAAoBmjB,IAI5BnjB,GAAQ,WAAW,WAElB,IADA,IAAIj8B,EACItE,EAAI,EAAGA,EAAIohD,GAAOz9C,OAAQ3D,KACjCsE,EAAO88C,GAAOphD,IAEN6D,YACPS,EAAKT,UAAY,MAEfS,EAAK8oB,cACP9oB,EAAK8oB,YAAc,MAEjB9oB,EAAK4hB,MACP5hB,EAAK4hB,IAAM,MAET5hB,EAAK6/C,YACP7/C,EAAK6/C,UAAY,MAEf7/C,EAAKs9C,YACPt9C,EAAK2+C,OAAS3+C,EAAKs9C,WAAY,GAGjCK,GAAsB,SAKxB8B,UAAW,SAAS56C,GACnB,OAAIA,GAAS,QACahC,IAAlBi6C,GAAOj4C,IAAuBi4C,GAAOj4C,IAK9Cw/B,oBAAqB,WAWpB,OAAO/H,EAASwhB,0BAA4B/R,GAAsBzP,EAASuC,WAAawB,OAAO/nB,MAAQ,MAIxGg8B,WAAY,SAASsB,EAAQ/wC,GAEzBy3B,EAASzW,OACXhhB,EAAQiqC,GAAajqC,IAGtB,IAAI2wC,EAAWl5B,EAAKmjC,UAAU7J,EAAO/wC,OAClC2wC,IACFA,EAASj2C,UAAY,MAGtB,IACCqiB,EADG5hB,EAAOsc,EAAKmjC,UAAU56C,GAG1B,GAAI7E,EAAJ,CAMAkvC,GAAO,cAAerqC,EAAO7E,GAE7B41C,EAAO/wC,MAAQA,EACf+wC,EAAO51C,KAAOA,EAGd,IAAIu+C,EAAUv+C,EAAKT,UAAYg8B,EAAUsG,SAAS,mBAgBlD,IAZI7hC,EAAK2qB,KAAO3qB,EAAKtB,OACjBsB,EAAKtB,KAAK8hB,QACZ+9B,EAAQ9uC,YAAYzP,EAAKtB,MAEzB6/C,EAAQ/gB,UAAYx9B,EAAKtB,MAI3BsgD,GAAeh/C,GAEfkxC,GAAmBlxC,EAAMmuC,KAEtBnuC,EAAK2qB,KAAQ3qB,EAAKs9C,WAAct9C,EAAK2+C,OA0F9B3+C,EAAK2qB,MAAQ3qB,EAAKs9C,aAE3B17B,EAAM2Z,EAAUsG,SAAS,YAAa,QAClCxwB,MAAMi+B,QAAU,EACpB1tB,EAAI+I,IAAM3qB,EAAK2qB,IACfklB,GAAc7vC,EAAM4hB,GACpB08B,GAAaz5C,EAAO7E,EAAMu+C,EAAS38B,QAhGY,CAkD/C,GAhDA5hB,EAAK6+C,aAAe,SAAS7+C,GAG5B,GAAIwqC,EAAJ,CAKA,GAAGoL,GAAUA,EAAO/wC,QAAUA,EAAQ,CACrC,GAAIm6C,GAAeh/C,GAAM,GASxB,OARAA,EAAK6+C,aAAe7+C,EAAK4hB,IAAM,KAC/BsvB,GAAmBlxC,EAAMmuC,IACzB2B,GAAoB9vC,QAEjB41C,EAAO/wC,QAAU8lC,GAEnBruB,EAAKu4B,sBAIF70C,EAAK0+C,eAeLnG,IAAuBv4C,EAAK8oB,cAC/B9oB,EAAK8oB,YAAYzX,MAAMG,QAAU,OACjCxR,EAAK8oB,YAAc,MAhBjBwjB,EAAU8G,YAAc3F,IAAwB8K,IAClDoF,GAAoB5zC,KAAK,CACxB/J,KAAKA,EACLu+C,QAAQA,EACR38B,IAAI5hB,EAAK4hB,IACT/c,MAAMA,EACN+wC,OAAOA,EACP0J,kBAAiB,IAGlBhB,GAAaz5C,EAAO7E,EAAMu+C,EAASv+C,EAAK4hB,IAAK6rB,GAA6C,GAW7FztC,EAAK6+C,aAAe,KACpB7+C,EAAK4hB,IAAM,KAEXstB,GAAO,oBAAqBrqC,EAAO7E,KAGjCu7B,EAAU+D,SAAS8T,UAAW,CAEhC,IAAI0M,EAAuB,mCAC3BA,GAAyB9/C,EAAK+/C,KAAO,GAAK,iCAE1C,IAAIj3B,EAAcyS,EAAUsG,SAASie,EAAsB9/C,EAAK+/C,KAAO,MAAQ,IAC5E//C,EAAK+/C,OACPj3B,EAAY6B,IAAM3qB,EAAK+/C,MAGxBlQ,GAAc7vC,EAAM8oB,GAEpBy1B,EAAQ9uC,YAAYqZ,GACpB9oB,EAAK8oB,YAAcA,EAOhB9oB,EAAKokC,SACRwa,GAAc5+C,GAIXsc,EAAK+nB,yBAEJ0Y,IAAsBzQ,EAAU8G,UACnCuK,GAAoB5zC,KAAK,CACxB/J,KAAKA,EACLu+C,QAAQA,EACR38B,IAAI5hB,EAAK4hB,IACT/c,MAAMA,EACN+wC,OAAOA,IAGR0I,GAAaz5C,EAAO7E,EAAMu+C,EAASv+C,EAAK4hB,IAAK,GAAM,IAclDm7B,IAAsBl4C,IAAU8lC,EAInCmF,GAAoB9vC,IAHpBwtC,GAAwB+Q,EAAQltC,MAChCmjC,GAAYx0C,EAAO4hB,GAAM5hB,EAAK4hB,MAK/Bg0B,EAAOnW,GAAGjC,UAAY,GACtBoY,EAAOnW,GAAGhwB,YAAY8uC,QAvIrB3I,EAAOnW,GAAGjC,UAAY,IA0IxBsY,WAAY,SAAU91C,GAClBA,EAAK4hB,MACP5hB,EAAK4hB,IAAIk9B,OAAS9+C,EAAK4hB,IAAIm9B,QAAU,MAEtC/+C,EAAK2+C,OAAS3+C,EAAKokC,QAAUpkC,EAAK4hB,IAAM5hB,EAAK0+C,eAAgB,MAgBhE,IAAIsB,GAsFAC,GArFHC,GAAkB,GAClBC,GAAoB,SAASC,EAAWtb,EAAcF,GACrD,IAAIxmC,EAAIyD,SAASmU,YAAa,eAC7BqqC,EAAU,CACTD,UAAUA,EACV7+C,OAAO6+C,EAAU7+C,OACjBujC,aAAcA,EACdF,YAAYA,GAAe,SAG7BxmC,EAAE6X,gBAAiB,WAAW,GAAM,EAAMoqC,GAC1CD,EAAU7+C,OAAO2U,cAAc9X,IAGjCwwC,GAAgB,MAAO,CACtBC,cAAe,CACdyR,QAAS,WACRrkB,GAAQ,kBAAmB3f,EAAKikC,YAChCtkB,GAAQ,eAAgB3f,EAAKkkC,cAC7BvkB,GAAQ,WAAW,WAClBikB,GAAkB,GAClBF,GAAW,SAGbO,WAAY,SAAS1G,GACjBA,EAAUx6C,OAAS,IACrB4hC,aAAa+e,IACbA,GAAW,OAGbQ,aAAc,SAASpiD,EAAG0mC,GAjyDT,IAAS2b,EAAQC,EAkyDjC,GAAI5b,IAIAmI,IAAWF,IAAkBoF,GAAgB,CAChD,IAAIwO,EAAK7b,EACT,GAAGkb,KACF/e,aAAa+e,IACbA,GAAW,KA1yDYS,EA6yDFE,EA7yDUD,EA6yDNR,GA5yDrBjtC,KAAKI,IAAIotC,EAAOltC,EAAImtC,EAAOntC,GAzkCZ,IAykCsCN,KAAKI,IAAIotC,EAAOjtC,EAAIktC,EAAOltC,GAzkCjE,IAu3FlB,YADA07B,GAAO,YAAayR,GAKtB,GAAyB,UAAtB7b,EAAa/jC,KAEf,YADAo/C,GAAkB/hD,EAAG0mC,EAAc,SAMpC,GAAsB,WAFD1mC,EAAEmD,OAAOif,QAAQnH,eAEJkiB,EAAU/4B,SAASpE,EAAEmD,OAAQ,oBAE9D,YADA4+C,GAAkB/hD,EAAG0mC,GAItB4L,GAAgBwP,GAAiBS,GAEjCX,GAAWh+C,YAAW,WACrBm+C,GAAkB/hD,EAAG0mC,GACrBkb,GAAW,OACT,UAsBPpR,GAAgB,cAAe,CAE9BC,cAAe,CAEd+R,gBAAiB,WAEbxU,IAKAL,EAGF9P,GAAQ,aAAa,WACpB3f,EAAKukC,sBAGNvkC,EAAKukC,kBAAiB,KAKxBA,iBAAkB,SAAS7e,GAE1Bie,GAAc,GAEd,IAAIjrC,EAAS,kCAEbinB,GAAQ,cAAc,WACrBV,EAAUr+B,KAAKinC,EAAUnvB,EAASsH,EAAKwkC,qBAGxC7kB,GAAQ,gBAAgB,WACpBgkB,IACF1kB,EAAU7lB,OAAOyuB,EAAUnvB,EAAQsH,EAAKwkC,qBAI1CxkC,EAAKykC,eAAgB,EAErB,IAAIC,EACHC,EAAiB,WACb3kC,EAAKykC,gBACPxlB,EAAU18B,YAAYslC,EAAU,mBAChC7nB,EAAKykC,eAAgB,GAEnB9V,EAAiB,EACnB1P,EAAUz8B,SAASqlC,EAAU,sBAE7B5I,EAAU18B,YAAYslC,EAAU,sBAEjC+c,KAEDA,EAAsB,WAClBF,IACFzlB,EAAU18B,YAAYslC,EAAU,kBAChC6c,GAAmB,IAItB/kB,GAAQ,SAAWglB,GACnBhlB,GAAQ,cAAgBglB,GACxBhlB,GAAQ,eAAe,WACnB3f,EAAKykC,gBACPC,GAAmB,EACnBzlB,EAAUz8B,SAASqlC,EAAU,sBAG/BlI,GAAQ,YAAailB,GAEjBlf,GACHif,KAKFH,iBAAkB,SAAS1iD,GAE1B,GAAG6sC,GAAkB3uB,EAAKgiB,SAASuG,SAalC,OAZIvI,EAASj0B,SAEPi0B,EAASyJ,eAAiBoM,IAAkBrF,EAChD1uC,EAAEoC,iBACOqrC,GAAiB54B,KAAKI,IAAIjV,EAAEmyB,QAAU,IAG/Cma,GAAkB,EAClBpuB,EAAK4lB,WAIA,EASR,GALA9jC,EAAEgU,kBAGF6tC,GAAY1sC,EAAI,EAEb,WAAYnV,EACK,IAAhBA,EAAE+iD,WAEJlB,GAAY1sC,EAAe,GAAXnV,EAAEgjD,OAClBnB,GAAYzsC,EAAe,GAAXpV,EAAEmyB,SAElB0vB,GAAY1sC,EAAInV,EAAEgjD,OAClBnB,GAAYzsC,EAAIpV,EAAEmyB,aAEb,GAAG,eAAgBnyB,EACtBA,EAAEijD,cACJpB,GAAY1sC,GAAK,IAAOnV,EAAEijD,aAExBjjD,EAAEkjD,YACJrB,GAAYzsC,GAAK,IAAOpV,EAAEkjD,YAE1BrB,GAAYzsC,GAAK,IAAOpV,EAAEmjD,eAErB,MAAG,WAAYnjD,GAGrB,OAFA6hD,GAAYzsC,EAAIpV,EAAEyX,OAKnBm7B,GAAoB/F,GAAgB,GAEpC,IAAIuW,EAAUtT,GAAW36B,EAAI0sC,GAAY1sC,EACxCkuC,EAAUvT,GAAW16B,EAAIysC,GAAYzsC,GAGlC8oB,EAASj0B,OAEZm5C,GAAWjU,GAAev6B,IAAIO,GAAKiuC,GAAWjU,GAAer6B,IAAIK,GACjEkuC,GAAWlU,GAAev6B,IAAIQ,GAAKiuC,GAAWlU,GAAer6B,IAAIM,IAEjEpV,EAAEoC,iBAIH8b,EAAKq4B,MAAM6M,EAASC,IAGrBxf,kBAAmB,SAAS8T,GAC3BA,EAAcA,GAAe,CAACxiC,EAAE46B,GAAc56B,EAAE,EAAI86B,GAAQ96B,EAAGC,EAAE26B,GAAc36B,EAAE,EAAI66B,GAAQ76B,GAE7F,IAAIkuC,EAAqBplB,EAAS0G,kBAAiB,EAAM1mB,EAAKgiB,UAC1DqjB,EAAU1W,IAAmByW,EAEjCplC,EAAKykC,eAAiBY,EAEtBrlC,EAAKymB,OAAO4e,EAAUrlC,EAAKgiB,SAASuE,iBAAmB6e,EAAoB3L,EAAa,KACxFxa,GAAaomB,EAAkB,SAAR,OAAoB,SAASxd,EAAU,uBAwBjE,IAKIyd,GACHC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GAEAC,GAjBGC,GAAyB,CAC5BC,SAAS,EACTC,WAAY,GAiBZC,GAAW,WACV,OAAOL,GAAWM,KAAKC,UAAU,IAElCC,GAAwB,WAEpBlB,IACF3gB,aAAa2gB,IAGXE,IACF7gB,aAAa6gB,KAMfiB,GAAyB,WACxB,IAAIH,EAAOD,KACVK,EAAS,GAEV,GAAGJ,EAAKvjD,OAAS,EAChB,OAAO2jD,EAGR,IAAItnD,EAAGunD,EAAOL,EAAKpzC,MAAM,KACzB,IAAK9T,EAAI,EAAGA,EAAIunD,EAAK5jD,OAAQ3D,IAC5B,GAAIunD,EAAKvnD,GAAT,CAGA,IAAIwnD,EAAOD,EAAKvnD,GAAG8T,MAAM,KACtB0zC,EAAK7jD,OAAS,IAGjB2jD,EAAOE,EAAK,IAAMA,EAAK,IAExB,GAAG5mB,EAAS6mB,YAAa,CAExB,IAAIC,EAAYJ,EAAOr5C,IAEvB,IADAq5C,EAAOr5C,IAAM,EACTjO,EAAI,EAAGA,EAAIohD,GAAOz9C,OAAQ3D,IAC7B,GAAGohD,GAAOphD,GAAGiO,MAAQy5C,EAAW,CAC/BJ,EAAOr5C,IAAMjO,EACb,YAIFsnD,EAAOr5C,IAAM/E,SAASo+C,EAAOr5C,IAAI,IAAI,EAKtC,OAHIq5C,EAAOr5C,IAAM,IAChBq5C,EAAOr5C,IAAM,GAEPq5C,GAERK,GAAc,WAOb,GALGvB,IACF7gB,aAAa6gB,IAIX3P,IAAkBrF,EAGpBgV,GAAwB9/C,WAAWqhD,GAAa,SAHjD,CAOGtB,GACF9gB,aAAa4gB,IAEbE,IAAuB,EAIxB,IAAIp4C,EAAOghC,EAAoB,EAC3B3qC,EAAOo0C,GAAYzJ,GACpB3qC,EAAKzC,eAAe,SAEtBoM,EAAM3J,EAAK2J,KAEZ,IAAI25C,EAAUpB,WAAgC5lB,EAASomB,WAAzCR,QAAqEv4C,EAE/Ew4C,KACsC,IAAtCG,GAAWM,KAAKr/C,QAAQ+/C,KAC1BjB,IAAkB,GAKpB,IAAIkB,EAASjB,GAAW9jB,KAAKhvB,MAAM,KAAK,GAAK,IAAO8zC,EAEhDf,GAEA,IAAMe,IAAYv0C,OAAOjD,SAAS82C,MACpCH,QAAQN,GAAkB,eAAiB,aAAa,GAAItgD,SAASiD,MAAOy+C,GAI1EpB,GACFG,GAAWnuC,QAASovC,GAEpBjB,GAAWM,KAAOU,EAMpBnB,IAAkB,EAClBN,GAAqB7/C,YAAW,WAC/B+/C,IAAuB,IACrB,MAOLnT,GAAgB,UAAW,CAI1BC,cAAe,CACd2U,YAAa,WAIZ,GAFAjoB,EAAUgH,OAAOjG,EAAUkmB,IAAwB,GAE9ClmB,EAASmmB,QAAd,CAKAH,GAAavzC,OAAOjD,SACpBu2C,IAAkB,EAClBD,IAAiB,EACjBD,IAAkB,EAClBD,GAAeS,KACfJ,GAAsB,cAAeE,QAGlCP,GAAa3+C,QAAQ,SAAW,IAElC2+C,IADAA,GAAeA,GAAa1yC,MAAM,SAAS,IACfA,MAAM,SAAS,IAI5CysB,GAAQ,cAAe3f,EAAKmnC,WAC5BxnB,GAAQ,gBAAgB,WACvBV,EAAU7lB,OAAO3G,OAAQ,aAAcuN,EAAKonC,iBAI7C,IAAIC,EAAmB,WACtB1B,IAAe,EACXG,KAEAC,GACFI,QAAQmB,OAGL1B,GACFI,GAAWM,KAAOV,GAEdK,GAGHE,QAAQoB,UAAU,GAAIhiD,SAASiD,MAAQw9C,GAAWwB,SAAWxB,GAAWyB,QAExEzB,GAAWM,KAAO,IAOtBE,MAID7mB,GAAQ,gBAAgB,WACpByO,GAGFiZ,OAGF1nB,GAAQ,WAAW,WACdgmB,IACH0B,OAGF1nB,GAAQ,eAAe,WACtB0O,EAAoBoY,KAAyBp5C,OAM9C,IAAI9E,EAAQq9C,GAAa3+C,QAAQ,QAC9BsB,GAAS,GAEmB,OAD9Bq9C,GAAeA,GAAaW,UAAU,EAAGh+C,IACzB2I,OAAO,KACtB00C,GAAeA,GAAa10C,MAAM,GAAI,IAKxCxL,YAAW,WACPwoC,GACFjP,EAAUr+B,KAAK6R,OAAQ,aAAcuN,EAAKonC,gBAEzC,MAGJA,aAAc,WAEb,GAAGf,OAAeT,GAIjB,OAFAE,IAAiB,OACjB9lC,EAAK4lB,QAGF6f,KAEHC,IAAwB,EACxB1lC,EAAKs4B,KAAMmO,KAAyBp5C,KACpCq4C,IAAwB,IAI1ByB,UAAW,WAKVX,KAGGd,KAICG,GAGHP,GAAwB5/C,WAAWqhD,GAAa,KAFhDA,UAWH9nB,EAAUgH,OAAOjmB,EAAMuyB,OA9oHR,mC,+BCHhB,IAAInxC,EAAO,EAAQ,GACfmY,EAAS,EAAQ,IACjBmuC,EAAkDnuC,EAAOlY,QAAQC,0CAEjEqmD,EAAoB,EAAQ,GAC5BC,EAAa,EAAQ,GACzB,MAAM,OAAEryB,GAAW,EAAQ,GAU3B,IAAIsyB,EAEJ,SAASC,IAEL,GADcviD,SAAS0Q,cAAc,uBACxB,CACT4xC,EAAc,IAAItyB,EAAO,sBAAuB,CAC5C9wB,KAAM,OACN0Z,YAAY,EACZkU,SAAU,WAGd,IAAI01B,EAAS,IAAIxyB,EAAO,qBAAsB,CAC1CzW,cAAc,EACdX,YAAY,EACZL,QAAQ,EACR2I,WAAY,IACZF,IAAK,KAGTwhC,EAAOnnC,QACPinC,EAAYj0B,KAAKm0B,GACjBF,EAAYjnC,SAUpB,SAASonC,EAAsBC,GAiO3B,IA9NA,IAuDIC,EAAoB,SAA2BpmD,IAC/CA,EAAIA,GAAK2Q,OAAOtN,OACdjB,eAAiBpC,EAAEoC,iBAAmBpC,EAAE2zC,aAAc,EACxD,IAAI0S,EAAUrmD,EAAEmD,QAAUnD,EAAE8gC,WAExBwlB,EAVM,SAAS9jD,EAAQ6+B,EAAIsJ,GAC/B,OAAOtJ,IAAOsJ,EAAGtJ,GAAMA,EAAK7+B,EAAQ6+B,EAAG3vB,WAAYi5B,IAS7BnoC,CAAQ6jD,GAAS,SAAUhlB,GAC7C,OAAOA,EAAGjf,SAAwC,OAA7Bif,EAAGjf,QAAQnH,iBAGpC,GAAwB,UAApBorC,EAAQjkC,SAIPkkC,EAAL,CAYA,IANA,IAII7/C,EAJA8/C,EAAiBD,EAAgB50C,WACjC80C,EAAaF,EAAgB50C,WAAW2C,iBAAiB,6CACzDoyC,EAAgBD,EAAWvlD,OAC3BylD,EAAY,EAGPppD,EAAI,EAAGA,EAAImpD,EAAenpD,IAC/B,GAA+B,IAA3BkpD,EAAWlpD,GAAGklB,SAAlB,CAIA,GAAIgkC,EAAWlpD,KAAOgpD,EAAiB,CACnC7/C,EAAQigD,EACR,MAGJA,IAQJ,OALIjgD,GAAS,GAETkgD,EAAelgD,EAAO8/C,IAGnB,IAmCPI,EAAiB,SAAwBlgD,EAAOmgD,EAAgBC,EAAkBC,GAClF,IACIC,EACA58C,EACA4G,EAHAi2C,EAAcvjD,SAAS4Q,iBAAiB,SAAS,GAyCrD,GArCAtD,EA1IyB,SAAgCswB,GASzD,IARA,IAGI4lB,EACAC,EACAr/B,EACAjmB,EANAulD,EAAgB9lB,EAAGhtB,iBAAiB,6CACpC+yC,EAAWD,EAAclmD,OACzB8P,EAAQ,GAMHzT,EAAI,EAAGA,EAAI8pD,EAAU9pD,IAIA,KAH1B2pD,EAAWE,EAAc7pD,IAGZklB,YAIb0kC,EAASD,EAASl+C,SAAS,IAEhBqZ,SAA8B,MAAnB8kC,EAAO9kC,UAGzByF,EAAOq/B,EAAO3zC,aAAa,aAAanC,MAAM,KAE9CxP,EAAO,CACH2qB,IAAK26B,EAAO3zC,aAAa,QACzB0/B,EAAGzsC,SAASqhB,EAAK,GAAI,IACrBytB,EAAG9uC,SAASqhB,EAAK,GAAI,KAGrBo/B,EAASl+C,SAAS9H,OAAS,IAE3BW,EAAK8E,MAAQugD,EAASl+C,SAAS,GAAGq2B,WAGlC8nB,EAAOn+C,SAAS9H,OAAS,IAEzBW,EAAK+/C,KAAOuF,EAAOn+C,SAAS,GAAGwK,aAAa,QAIpD3R,EAAKy/B,GAAK4lB,EAEVl2C,EAAMpF,KAAK/J,KAGf,OAAOmP,EA4FCs2C,CAAuBT,GAG/Bz8C,EAAU,CACNk6C,SAAS,EACT9Y,UAAW,GAGXI,iBAAiB,EAEjBtM,SAAS,EACTF,WAAW,EACXG,cAAc,EACdC,QAAQ,EACRC,SAAS,EACTC,WAAW,EACXC,SAAS,EACTC,aAAa,EAEb2kB,WAAYsC,EAAerzC,aAAa,iBAIxCwrC,iBAAkB,SAA0Bt4C,GAExC,IAAI6gD,EAAYv2C,EAAMtK,GAAO46B,GAAGkmB,qBAAqB,OAAO,GAExDC,EAAc72C,OAAOu3B,aAAezkC,SAASyjC,gBAAgBiB,UAC7Dz0B,EAAO4zC,EAAU3zC,wBACrB,MAAO,CACHwB,EAAGzB,EAAKyG,KACR/E,EAAG1B,EAAKkrB,IAAM4oB,EACdvU,EAAGv/B,EAAKwG,SAKhB4sC,EACA,GAAI38C,EAAQ46C,aAGR,IAAK,IAAI0C,EAAI,EAAGA,EAAI12C,EAAM9P,OAAQwmD,IAC9B,GAAI12C,EAAM02C,GAAGl8C,KAAO9E,EAAO,CACvB0D,EAAQ1D,MAAQghD,EAChB,YAKRt9C,EAAQ1D,MAAQD,SAASC,EAAO,IAAM,OAG1C0D,EAAQ1D,MAAQD,SAASC,EAAO,IAIhCsvC,MAAM5rC,EAAQ1D,SAIdogD,IACA18C,EAAQm7B,sBAAwB,IAGpCyhB,EAAU,IAAIjB,EAAWkB,EAAanB,EAAmB90C,EAAO5G,IACxDkY,OAQR0kC,EAAQ56B,OAAO,gBAAgB,WAE3B,IAAIoa,EAAkBwgB,EAAQxgB,kBAE9Bwf,EAAYl8B,GAAG0c,QAKnBmhB,EAAkBjkD,SAAS4Q,iBAAiB8xC,GAEvC7oD,EAAI,EAAGC,EAAImqD,EAAgBzmD,OAAQ3D,EAAIC,EAAGD,IAC/CoqD,EAAgBpqD,GAAGsV,aAAa,gBAAiBtV,EAAI,GACrDoqD,EAAgBpqD,GAAGolC,QAAU0jB,EAIjC,IAAIuB,EA9HsB,WACtB,IAAInD,EAAO7zC,OAAOjD,SAAS82C,KAAKC,UAAU,GACtCG,EAAS,GAEb,GAAIJ,EAAKvjD,OAAS,EACd,OAAO2jD,EAKX,IAFA,IAAIC,EAAOL,EAAKpzC,MAAM,KAEb9T,EAAI,EAAGA,EAAIunD,EAAK5jD,OAAQ3D,IAC7B,GAAKunD,EAAKvnD,GAAV,CAIA,IAAIwnD,EAAOD,EAAKvnD,GAAG8T,MAAM,KAErB0zC,EAAK7jD,OAAS,IAIlB2jD,EAAOE,EAAK,IAAMA,EAAK,IAO3B,OAJIF,EAAOgD,MACPhD,EAAOgD,IAAMphD,SAASo+C,EAAOgD,IAAK,KAG/BhD,EAkGIiD,GAEXF,EAASp8C,KAAOo8C,EAASC,KACzBjB,EAAegB,EAASp8C,IAAKm8C,EAAgBC,EAASC,IAAM,IAAI,GAAM,GAW9E,SAASE,IACL,OAAOpoD,EAAEiR,QAAQuJ,SAAW,KAOhC,SAAS6tC,EAAoBC,GACO,IAA5BtoD,EAAE,IAAMsoD,GAAS/mD,QACjBvB,EAAE,IAAMsoD,GAASrkD,SAErB,IAAI0F,EAAa,8CACe2+C,EAAU,SAAWA,EADpC,8aAejBtoD,EAAE,QAAQoD,OAAOuG,GASrB,SAASa,EAAWhK,GAChB,IAAIiK,EAAUjK,EACTE,KAAK,mBACLgI,KAAI,WACD,IAAIgC,EAAY1K,EAAE4C,MAAMlC,KAAK,mBACzBiK,EAAWD,EAAU7G,MACrB+G,EAAkBF,EAAUhK,KAAK,iBAAmBiK,EAAW,MAC9DpK,KAAK,YACV,MAAO,CACHsK,SAAU7K,EAAE4C,MAAMrC,KAAK,aACvBqK,gBAAiBA,MAEtB5I,UAEP,OAAO8I,KAAKC,UAAUN,GAsD1B,SAAS9F,EAAoBF,GACzB,IAAIG,EACJ,GAAIH,IAAQzE,EAAE,cAAcuB,QAAUvB,EAAEyE,GAAK3B,QAAQ,mBAAmBpC,KAAK,oBAAoBa,OAAS,GACtGqD,EAAmB5E,EAAEyE,GAAK3B,QAAQ,mBAAmBpC,KAAK,yBACvD,GAAI+D,GAAOzE,EAAE,mBAAmBuB,OAAQ,CAC3C,IAAIsD,EAAwB7E,EAAEyE,GAAK3B,QAAQ,iBAAiBpC,KAAK,oBAC7DoE,EAAsB9E,EAAEyE,GAAK3B,QAAQ,kBAAkBpC,KAAK,oBAE5DkE,OADgCG,IAAhCF,EAAsBhB,MACHiB,EAEAD,OAGvBD,EAAmB5E,EAAE,oBAEzB,OAAO4E,EAQX,SAASI,EAAoBP,GACzB,OAAOE,EAAoBF,GAAKZ,MA0BpC,SAASyF,EAAoB/I,GAMzB,IAAIgJ,EALJvJ,EAAE,eAAemB,UAAUC,QAEkB,IAAzCpB,EAAE,4BAA4BuB,QAC9BvB,EAAE,4BAA4BiE,SAI9BsF,EADAhJ,EAAKiJ,qBACMjJ,EAAKkJ,yBAELlJ,EAAKmJ,yBAGpB,IAAIC,EAAa,0NAIQpJ,EAAKqJ,cAJb,eAKGrJ,EAAKsJ,KALR,kBAMMtJ,EAAKuJ,QANX,uBAOWvJ,EAAKwJ,aAPhB,qCASOxJ,EAAKyJ,SATZ,kBAUMzJ,EAAKkJ,yBAVX,+BAWmBlJ,EAAKiJ,qBAXxB,wGAeWjJ,EAAK0J,OAAOC,YAfvB,0QA0BjBlK,EAAE,QAAQoD,OAAOuG,GACjB3J,EAAE,eAAemB,UAAUC,QAE3BpB,EAAEgD,KAAK,CACHL,IAAK4G,EACLjB,OAAQ,MACRpF,SAAU,OACVC,QAAS,SAAU7B,GACf,IAhEOV,EACXqI,EA+DQkB,GAhEGvJ,EAgEoBU,EAAS8I,iBA1DrC,CACHjB,MANAF,EAAQjJ,EAAE,SAASoD,OAAOpD,EAAEkJ,UAAUtI,KAEzBF,KAAK,4BAKlB0I,OAJSH,EAAMvI,KAAK,iBAAiB2I,aA6DjCrJ,EAAE,wCAAwCW,QAC1CX,EAAE,2CAA2C2B,KAAKL,EAAS+I,oBAC3DrK,EAAE,0DAA0D2B,KAAKL,EAASgJ,iBAC1EtK,EAAE,wCAAwCY,KAAKuJ,EAAWhB,MAC1DnJ,EAAE,0CAA0CY,KAAKuJ,EAAWf,QAC5DpJ,EAAE,4BAA4BuK,MAAM,QACpCvK,EAAEmB,UAAU2H,QAEhBC,MAAO,WACH/I,EAAEmB,UAAU2H,UAgCxB,SAASyD,EAAkBjL,EAAUinD,GACjCvoD,EAAE,aAAa6H,QAAQ,eAAgBvG,GACvC,IAAI+K,EAAc/K,EAASyH,MAAQ,eAAiB,gBAEhDzH,EAASgL,0BACiD,IAA1DhO,OAAO+F,KAAK/C,EAASgL,0BAA0B/K,OAC/C+H,EAAoBhI,EAASgL,2BAEa,IAAtCtM,EAAE,yBAAyBuB,QAC3BvB,EAAE,QAAQoD,OACN,4CAIRpD,EAAE,yBAAyBoD,OACvB,qBAAuBiJ,EAAc,kDACrC/K,EAASc,QACT,UAGJ8B,YAAW,WACPlE,EAAE,wBAAwBiE,WAC3B,MAGF3C,EAASyH,OAAUq/C,IAEbA,MACPpoD,EAAE,aAAa6H,QAAQ,iBACvB7H,EAAE,sBAAsBgB,SAAS,6BApDzC,SAAkBunD,GACd,IAAIC,EAAcxoD,EAAEuoD,GAAchoD,KAAK,YACnCsL,EAAM7L,EAAE,mBAAmBO,KAAK,OAChCioD,GACAxoD,EAAEgD,KAAK,CACHL,IAAK6lD,EAAc,QAAU38C,EAC7BvD,OAAQ,MACRnF,QAAS,SAAU5C,GACfP,EAAE,kBAAkBU,KAAK,eAAeC,QAAQyC,OAAO7C,GACvDP,EAAE,kBAAkBgB,SAAS,OAC7BhB,EAAE,kBAAkBuK,MAAM,SAE9BxB,MAAO,eAqCX0/C,CAASF,GA8QjB,SAAStjD,EAAsB3D,EAAUd,GACrC,IAEI0E,EAFAC,EACA3E,EAAkB4E,QAAQ,gCAAgC7D,OAAS,GAEnED,EAASI,QAAQ2D,uBA/JzB,SAAqBC,EAAO9E,EAAmB+E,GAE3C,IAAIC,EAAoB,CAAC,SAEzBF,EAAMhB,SAAQ,SAAUrE,GAChBuF,EAAkBC,QAAQxF,EAAKQ,KAAO,EA/ElD,SAA6BR,EAAMO,EAAmB+E,GAClDtF,EAAKyF,OAAOpB,SAAQ,SAAUqB,GAC1B,IAAIC,EAAapF,EAAkBE,KAAK,eAAiBT,EAAKQ,GAAK,wBAC/DkF,EAAU9G,MAAQ,MAClBgH,EAAgBD,EAAWE,SAE3BH,EAAUI,UACVH,EAAWE,SAAS9E,SAAS,YAC7B4E,EAAW5E,SAAS,YACpB4E,EAAWI,SAAS,4BAA4BrE,KAAK4D,EAAKU,yBAE1DL,EAAWE,SAAS/E,YAAY,YAChC6E,EAAW7E,YAAY,YACvB6E,EAAWI,SAAS,4BAA4BrF,SAGhDgF,EAAUhD,IACVkD,EAAc5F,KAAK,WAAY0F,EAAUhD,KAEzCkD,EAAcK,WAAW,YAI7BN,EAAW7E,YAAY,2BAEvB6E,EAAW5E,SAAS2E,EAAUQ,WAAa,aAAe,gBAErDR,EAAUQ,WAGXP,EAAWE,SAASI,WAAW,YAF/BN,EAAWE,SAAS7F,KAAK,YAAY,MAoDrCmG,CAAoBnG,EAAMO,EAAmB+E,GAhCzD,SAAgCtF,EAAMO,GAClC,IAAI6F,EAAQ,eAAiBpG,EAAKQ,GAAK,KAClBD,EAAkBE,KAAK2F,EAAQ,YAAcpG,EAAKQ,GAAK,iBAC7DR,KAAK,QAASA,EAAKqG,UAElCrG,EAAKyF,OAAOpB,SAAQ,SAAUqB,GAC1B,IAAIC,EAAapF,EACZE,KAAK2F,EAAQ,sBAAwBV,EAAU9G,MAAQ,MAC5D+G,EAAW3F,KAAK,QAAS0F,EAAUhD,KAC9BuD,WAAW,YAEXP,EAAUQ,YACXP,EAAW3F,KAAK,YAAY,MAsB5BsG,CAAuBtG,EAAMO,MAwJjCgG,CAAYlF,EAASI,QAAQ2D,oBAAqB7E,EAAmBc,EAASiB,WAC9E2C,EAA6C,YAAjC5D,EAASI,QAAQ+E,YACzBtB,GAA2BD,IAC3B1E,EAAkBsF,OAAO,uBACpBvF,KAAK,MAAOe,EAASI,QAAQjB,IAElCD,EAAkBsF,OAAO,uBACpBvF,KAAK,iBAAkBe,EAASI,QAAQG,gBA1HzD,SAAwB6E,EAAMlG,GAE1B,IAAIkoD,EAAiBloD,EAAkBE,KAAK,cAExCiG,EAAWnG,EAAkBE,KAAK,uBAElCioD,EAAoBnoD,EAAkBE,KAAK,sBAE/C,GAAIgG,EAAKnF,OAAS,GAAKmF,EAAK,IAAMA,EAAK,GAAG/D,IAAK,CAE3C3C,EAAE2G,GAAUhG,QAAQyC,OAAO,+EAC3BpD,EAAE2oD,GAAmBhoD,QAAQyC,OAAO,mEAIpC,IAFA,IAAIwlD,EAAc5oD,EAAE2G,GAAU7D,QAAQ,sBAE7BlF,EAAI,EAAGA,EAAI8I,EAAKnF,OAAQ3D,IACzBgrD,EAAYrnD,OAAS,EACrBvB,EAAE,uCAAyC0G,EAAK9I,GAAG+E,IAAM,0CAA4C+D,EAAK9I,GAAGiJ,IAAM,iBAAmBC,SAASJ,EAAK9I,GAAGmJ,MAAO,IAAM,8BAA8BE,SAASjH,EAAE2G,GAAUjG,KAAK,kBAC/M,IAAN9C,EACPoC,EAAE,4DACa0G,EAAK9I,GAAG+E,qEACA+D,EAAK9I,GAAGirD,gBAAgBniD,EAAK9I,GAAG+E,0DAA0D+D,EAAK9I,GAAG+E,6CAA6C+D,EAAK9I,GAAGiJ,oBAAoBC,SAASJ,EAAK9I,GAAGmJ,MAAO,6EAElNE,SAASjH,EAAE2G,GAAUjG,KAAK,kBAElCV,EAAE,4DACa0G,EAAK9I,GAAG+E,sFACiB+D,EAAK9I,GAAGirD,gBAAgBniD,EAAK9I,GAAG+E,yHAE5C+D,EAAK9I,GAAG+E,6CAA6C+D,EAAK9I,GAAGiJ,oBAAoBC,SAASJ,EAAK9I,GAAGmJ,MAAO,6EAE7HE,SAASjH,EAAE2G,GAAUjG,KAAK,kBAGtCV,EAAE,uCAAuC0G,EAAK9I,GAAGgqD,mDAAmDlhD,EAAK9I,GAAGiJ,oBAAoBC,SAASJ,EAAK9I,GAAGmJ,MAAO,iCAAiCE,SAASjH,EAAE2oD,GAAmBjoD,KAAK,kBAGhO4lD,SAE0B,IAAfF,GACPI,EAAsB,iBAEnB9/C,EAAK,IAAMA,EAAK,GAAG/D,MAC1B3C,EAAE0oD,GAAgB/nD,QAClBX,EAAE,aAAa0G,EAAK,GAAG/D,uCAAuC+D,EAAK,GAAGG,4BAA4BI,SAASjH,EAAE0oD,KAoFjHthD,CADuB9F,EAASI,QAAQ2F,OAAO,UACd7G,GAG5B2E,KACoBnF,EAAE,iBAAkBQ,GAAmBe,OACxDvB,EAAE,iBAAkBQ,GACpBR,EAAE,mBACSuH,YAAYjG,EAASI,QAAQ8F,MAAM5G,OAItDJ,EAAkBE,KAAK,eAAeC,QAAQC,KAAKU,EAASI,QAAQ+F,gBApFxE,SAA4BnG,EAAUd,GAClC,IAAIkH,EAAoB,GACpBC,EAAuBrG,EAASI,QAAQxB,aAAa0H,SAErDtG,EAASI,QAAQG,cACjB8F,EAAqBrD,SAAQ,SAAUlC,GACnCsF,GAAqB,8CAAgDtF,EAAU,kBAIvFpC,EAAEQ,GAAmBqH,QAAQ,6BAA8B,CACvDnG,QAASJ,EAASI,QAClBlB,kBAAmBA,EACnB4B,QAASsF,EACTnF,UAAWjB,EAASiB,YAwExBJ,CAAmBb,EAAUd,GAEzB2E,GACoB3E,EAAkBE,KAAK,yBAC7BmH,QAAQ,kCAAmC,CACrDnG,QAASJ,EAASI,QAClBlB,kBAAmBA,IAIvBR,EAAE,oFAAoF6H,QAAQ,0BAA2B,CACrHnG,QAASJ,EAASI,QAClBlB,kBAAmBA,IACpBqH,QAAQ,uBAAwBvG,EAASI,SAIhDlB,EAAkBE,KAAK,oBAAoBC,QACtCC,KAhFT,SAA2BkH,GACvB,IAAKA,EACD,MAAO,GAGX,IAAIlH,EAAO,GAWX,OATAkH,EAAWxD,SAAQ,SAAUyD,GACC,mBAAtBA,EAAeC,IACfD,EAAeD,WAAWxD,SAAQ,SAAU2D,GACxCrH,GAAQ,iCAAmCqH,EAAUC,MAAQ,KACzDD,EAAUpJ,MAAQ,eAK3B+B,EAgEGuH,CAAkB7G,EAASI,QAAQoG,aA0CjD,SAASM,EAAgBC,EAAkB7H,GACnC6H,IACArI,EAAE,QAAQ6H,QAAQ,gCAAiC,CAC/ClF,IAAK0F,EACL5G,UAAWjB,IAGfR,EAAEgD,KAAK,CACHL,IAAK0F,EACLC,OAAQ,MACRnF,QAAS,SAAU5C,GACf0E,EAAsB1E,EAAMC,GA5C5C,SAAuB+H,EAAa/H,GAEhCA,EAAkBE,KAAK,oBAAoBC,QAAQC,KAAK2H,GA2C5CC,CAAcjI,EAAKmB,QAAQ6G,YAAa/H,GAnCxD,SAA0BiI,EAAYjI,GAClC,GAAIA,EAAkBsF,OAAO,uBAAuBvE,QAAU,EAAG,CAC7D,IAAIgH,EAAcE,EAAWC,KAAI,SAAUC,GACvC,IAAI5C,EAAW4C,EAAS5C,SAAW,aAAe,GAClD,MAAO,kBAAoB4C,EAAS9J,MAAQ,gBAAkB8J,EAAShG,IAAM,IACzEoD,EAAW,IAAM4C,EAAS9J,MAAQ,eACvC+J,KAAK,IACRjE,EAAoBnE,GAAmBG,QAAQC,KAAK2H,IA6B5CM,CAAiBtI,EAAKmB,QAAQ+G,WAAYjI,GAzB1D,SAAwBsoD,EAAatoD,GAC7BA,EAAkBsF,OAAO,uBAAuBvE,QAAU,GAC1Df,EAAkBE,KAAK,eAAeT,KAAK,WAAY6oD,EAAYnmD,KAwB3DomD,CAAexoD,EAAKmB,QAAQonD,YAAatoD,GAlPzD,SAAuBc,GACnB,MAAM0nD,EAAgBjlD,SAAS0Q,cAAc,uBAE7C,IAAIw0C,EACJ3nD,EAASI,QAAQ2D,oBAAoBf,QAAS2D,IACtCA,EAAUihD,YACVjhD,EAAUvC,OAAOpB,QAASsJ,IAClBA,EAAO7H,WACPkjD,EAAQr7C,EAAO/O,WAM3BmqD,IACAA,EAAc91C,aAAa,eAAgB5R,EAASI,QAAQjB,IACxDwoD,GACAD,EAAc91C,aAAa,eAAgB+1C,IAkOvCE,CAAc5oD,GACdP,EAAE,QAAQ6H,QAAQ,+BAAgC,CAC9CtH,KAAMA,EACNkB,UAAWjB,IAEfR,EAAEmB,UAAU2H,QAEhBC,MAAO,WACH/I,EAAEmB,UAAU2H,WAz6B5BsgD,aAAaC,QAAQ,kBAAmB,sBAAwBrpD,EAAE,eAAekH,QAAQvF,OAAS,MAE9FsP,OAAOq4C,WACPtpD,EAAE,QAAQ6H,QAAQ,eAAgB,CAC9BgG,UAAW7N,EAAE,eAAekH,QAAQvF,SA6B5C3B,EAAE+D,UAAU0K,OAAM,WACdzO,EAAE,QAAQ6H,QAAQ,mBAAoB,CAClCgG,UAAW7N,EAAE,eAAekH,QAAQvF,YAmP5C3B,EAAE+D,UAAU0K,OAAM,gBACY,IAAf23C,GACPI,EAAsB,eAg3B9B,IAAI+C,EAAgBvpD,EAAEykC,OAAO,GAAI7kC,EAAMmY,EAAQ,CAC3C3X,2BAbJ,WACIJ,EAAE,QAAQK,GAAG,wBAAwB,SAAUC,EAAGC,GAC9C,IAAIC,EAAoBR,EAAE,6BAA+BO,EAAKE,GAAK,MAE/DF,EAAKU,iBACLT,EAAkBE,KAAK,8DAClBC,QACAC,KAAKL,EAAKU,qBAOvBf,aA7IJ,WACIF,EAAE+D,UAAU1D,GAAG,SAAU,oBAAoB,SAAUC,GACnDA,EAAEoC,iBAEF,IAAI8mD,EAAYxpD,EAAE4C,MAAME,QAAQ,mBAAmB7C,KAAK,YAGxD,IAAID,EAFiB,6BAA+BwpD,EAAY,KAEzC,mCAAmCzmD,GAAG,YAA7D,CAIA,IAAIvC,EAAoBR,EAAE4C,MAAME,QAAQ,mBACnCtC,EAAkBe,SACnBf,EAAoBR,EAAE4C,MAAME,QAAQ,kBAAkBpC,KAAK,uBAGV,IAAjDV,EAAE,gBAAiBQ,GAAmBe,QACtC6G,EAAgBpI,EAAEM,EAAEsL,eAAelL,KAAK,mBAAmBH,KAAK,OAC5DC,QA4HZmL,gBAnGJ,WACI3L,EAAE+D,UAAU1D,GAAG,SAAU,6CAA6C,SAAUC,GAC5EA,EAAEoC,iBACF,IAAIlC,EAAoBR,EAAE4C,MAAME,QAAQ,aACnCtC,EAAkBe,SACnBf,EAAoBR,EAAE4C,MAAME,QAAQ,oBAExCsF,EAAgB9H,EAAEsL,cAAc/M,MAAO2B,OA6F3CL,UA1NJ,WACIH,EAAE+D,UAAU1D,GAAG,QAAS,iDAAiD,WACrE,IAAI0J,EACA8B,EACAC,EACAC,EAjmBStH,EAkmBT8jD,EAAevoD,EAAE4C,MAErB5C,EAAE,QAAQ6H,QAAQ,0BAA2BjF,MAEzC5C,EAAE,cAAcuB,QAAUvB,EAAE4C,MAAM8B,SAAS,wBAC3CqH,EAAU,GAEV/L,EAAE,mBAAmBgM,MAAK,WACjBhM,EAAE4C,MAAM8B,SAAS,uBAClBqH,EAAQE,KAAK,CACTJ,IAAK7L,EAAE4C,MAAMlC,KAAK,eAAeiB,OACjCuK,IAAKlM,EAAE4C,MAAMlC,KAAK,oBAAoBmD,MACtC4G,QAASD,EAAWxK,EAAE4C,YAIlCkJ,EAAUhB,KAAKC,UAAUgB,IAlnBhBtH,EAqnBKzE,EAAE4C,MAApBiJ,EAlnBA7L,EAAE,mBAAmB0E,SAAS,UAAY1E,EAAE,gBAAgBuB,OACtDvB,EAAEyE,GAAK3B,QAAQ,kBAAkBpC,KAAK,sBAAsBH,KAAK,OAChEP,EAAE,uBAAuBuB,QAAUvB,EAAE,gBAAgBuB,OACtDvB,EAAEyE,GAAK3B,QAAQ,mBAAmBpC,KAAK,eAAeiB,OAEtD3B,EAAE,uCAAuCO,KAAK,OA+mBpD,IAAIC,EAAoBR,EAAE4C,MAAME,QAAQ,mBACnCtC,EAAkBe,SACnBf,EAAoBR,EAAE4C,MAAME,QAAQ,sBAAsBpC,KAAK,oBAGnEqJ,EAxmBG/J,EAAE,oBAAoB6D,MAymBzB,IA/lBAsI,EA+lBIC,EAAO,CACPP,IAAKA,EACLC,QAASA,EACTK,eAlmBJA,EAAgB,GACpBnM,EAAE,gBAAgBgM,MAAK,WACnBG,EAAcF,KAAK,CACfJ,IAAK7L,EAAE4C,MAAMlC,KAAK,eAAeiB,OACjCgH,SAAU7B,SAAS9G,EAAE4C,MAAMlC,KAAK,kBAAkBH,KAAK,YAAa,SAIrE4L,EAAc5K,OAASuJ,KAAKC,UAAUoB,GAAiB,IA2lBtDxD,SAAU3D,EAAoBhF,EAAE4C,QAG/B5C,EAAE,gBAAgBuB,SACnB6K,EAAK3B,QAAUD,EAAWhK,IAG9BR,EAAE4C,MAAMiF,QAAQ,0BAA2BuE,GACvCrC,GACA/J,EAAEgD,KAAK,CACHL,IAAKoH,EACLzB,OAAQ,OACR/H,KAAM6L,EACNjJ,QAAS,SAAU5C,GA/anC,IAA8BoC,EAgbV4J,EAAkBhM,EAAMgoD,GACxBvoD,EAAE,QAAQ6H,QAAQ,yBAA0BtH,GACxC0Q,OAAOq4C,WACPtpD,EAAE,QAAQ6H,QAAQ,cAAe,CAC7BtH,KAAMA,EACN6L,KAAMA,IAGdpM,EAAE,QAAQ6H,QAAQ,yBAA0BtH,GAC5CP,EAAEmB,UAAU2H,QAzbFnG,EA0bWpC,EAAKiM,eAxbtCxM,EAAEgD,KAAK,CACHL,IAAKA,EACL2F,OAAQ,MACRnF,QAAS,aAGT4F,MAAO,gBAobHA,MAAO,SAAUA,GACb/I,EAAEmB,UAAU2H,cA2J5B6F,uBA1FJ,WACI3O,EAAE+D,UAAU1D,GAAG,QAAS,oBAAoB,SAAUC,GAIlD,GAHAA,EAAEoC,iBACF1C,EAAEmB,UAAUC,QAERpB,EAAE4C,MAAM8B,SAAS,YACjB1E,EAAEmB,UAAU2H,WADhB,CAKA9I,EAAE4C,MAAMkD,SAASA,SAASpF,KAAK,oBAC1BK,YAAY,YAEjBf,EAAE4C,MAAM5B,SAAS,YACjB,IAAIR,EAAoBR,EAAE4C,MAAME,QAAQ,aACnCtC,EAAkBe,SACnBf,EAAoBR,EAAE4C,MAAME,QAAQ,oBAExCsF,EAAgBpI,EAAE4C,MAAM3C,KAAK,SAAUO,QAyE3CkL,eA1HJ,WACI1L,EAAE+D,UAAU1D,GAAG,QAAS,8BAA8B,SAAUC,GAI5D,GAHAA,EAAEoC,iBACF1C,EAAEmB,UAAUC,QAERpB,EAAE4C,MAAM3C,KAAK,aAAeD,EAAE4C,MAAM8B,SAAS,YAC7C1E,EAAEmB,UAAU2H,WADhB,CAIA9I,EAAE,qBAAqB2B,KAAK3B,EAAE4C,MAAMrC,KAAK,UACzCP,EAAE,0CAA0CC,KAAK,eAAgBD,EAAE4C,MAAMrC,KAAK,eAC9E,IAAIC,EAAoBR,EAAE4C,MAAME,QAAQ,aACnCtC,EAAkBe,SACnBf,EAAoBR,EAAE4C,MAAME,QAAQ,oBAGxCsF,EAAgBpI,EAAE4C,MAAM3C,KAAK,YAAaO,QA2G9CkO,kBArEJ,WACI1O,EAAE+D,UAAU1D,GAAG,QAAS,mBAAmB,SAAUC,GACjDA,EAAEoC,iBACF1C,EAAEmB,UAAUC,QACZpB,EAAEvB,IAAIuB,EAAE4C,MAAM3C,KAAK,SAAS,SAAUM,GAClC8nD,EAAoB,kBACpB,IAAIoB,EAAa1lD,SAASuP,cAAc,MACxCm2C,EAAWh4C,UAAUD,IAAI,KAAM,oBAC/Bi4C,EAAWv2C,aAAa,KAAM,cAC9B,IAAIlM,EAAQjD,SAAS2lD,eAAenpD,EAAKopD,YACzCF,EAAW93C,YAAY3K,GACvB,IAAI4iD,EAAqB7lD,SAASuP,cAAc,KAC5Cu2C,EAAc9lD,SAAS2lD,eAAenpD,EAAKupD,kBAC/CF,EAAmBn4C,UAAUD,IAAI,kCACjCo4C,EAAmBj4C,YAAYk4C,GAE/B,IAAIpoD,EAAYsC,SAASuP,cAAc,OACvC7R,EAAUgQ,UAAUD,IAAI,gCACxB/P,EAAUkQ,YAAY83C,GACtBhoD,EAAUkQ,YAAYi4C,GACtB5pD,EAAE,mBAAmBU,KAAK,eAAeC,QAAQyC,OAAO7C,EAAK8C,SAC7DrD,EAAE,mBAAmBU,KAAK,iBAAiBqpD,QAAQtoD,GACnDzB,EAAE,mBAAmBuK,MAAM,QAC3BvK,EAAEmB,UAAU2H,cA+CpBkhD,oBA1CJ,WACIhqD,EAAE+D,UAAU1D,GAAG,QAAS,qBAAqB,SAAUC,GACnDA,EAAEoC,iBACF1C,EAAEmB,UAAUC,QACZpB,EAAEvB,IAAIuB,EAAE4C,MAAM3C,KAAK,SAAS,SAAUM,GAClC8nD,EAAoB,oBACpBroD,EAAE,qBAAqBU,KAAK,eAAeC,QAAQyC,OAAO7C,EAAK8C,SAC/DrD,EAAE,qBAAqBuK,MAAM,QAC7BvK,EAAEmB,UAAU2H,gBAqCxBygD,EAAc1pD,QAAQC,0CA5BtB,SAAmDC,GAC/CmmD,EAAgDnoD,KAAK6E,KAAM7C,GAC3DC,EAAE,8BAA8BC,KAAK,WAAYF,IA4BrDwpD,EAAc/C,sBAAwBA,EACtC+C,EAAcjD,YAAcA,EAC5B3oD,EAAOD,QAAU6rD","file":"default/js/cart.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 = 46);\n","'use strict';\nvar base = require('./base');\n\n/**\n * Enable/disable UI elements\n * @param {boolean} enableOrDisable - true or false\n */\nfunction updateAddToCartEnableDisableOtherElements(enableOrDisable) {\n $('button.add-to-cart-global').attr('disabled', enableOrDisable);\n}\n\nmodule.exports = {\n methods: {\n updateAddToCartEnableDisableOtherElements: updateAddToCartEnableDisableOtherElements\n },\n\n availability: base.availability,\n\n addToCart: base.addToCart,\n\n updateAttributesAndDetails: function () {\n $('body').on('product:statusUpdate', function (e, data) {\n var $productContainer = $('.product-detail[data-pid=\"' + data.id + '\"]');\n\n $productContainer.find('.description-and-detail .product-attributes')\n .empty()\n .html(data.attributesHtml);\n\n if (data.shortDescription) {\n $productContainer.find('.description-and-detail .description')\n .removeClass('hidden-xl-down');\n $productContainer.find('.description-and-detail .description .content')\n .empty()\n .html(data.shortDescription);\n } else {\n $productContainer.find('.description-and-detail .description')\n .addClass('hidden-xl-down');\n }\n\n if (data.longDescription) {\n $productContainer.find('.description-and-detail .details')\n .removeClass('hidden-xl-down');\n $productContainer.find('.description-and-detail .details .content')\n .empty()\n .html(data.longDescription);\n } else {\n $productContainer.find('.description-and-detail .details')\n .addClass('hidden-xl-down');\n }\n });\n },\n\n showSpinner: function () {\n $('body').on('product:beforeAddToCart product:beforeAttributeSelect', function () {\n $.spinner().start();\n });\n },\n updateAttribute: function () {\n $('body').on('product:afterAttributeSelect', function (e, response) {\n if ($('.product-detail>.bundle-items').length) {\n response.container.data('pid', response.data.product.id);\n response.container.find('.product-id').text(response.data.product.id);\n } else if ($('.product-set-detail').eq(0)) {\n response.container.data('pid', response.data.product.id);\n response.container.find('.product-id').text(response.data.product.id);\n } else {\n $('.product-id').text(response.data.product.id);\n $('.product-detail:not(\".bundle-item\")').data('pid', response.data.product.id);\n }\n });\n },\n updateAddToCart: function () {\n $('body').on('product:updateAddToCart', function (e, response) {\n // update local add to cart (for sets)\n $('button.add-to-cart', response.$productContainer).attr('disabled',\n (!response.product.readyToOrder || !response.product.available));\n\n var enable = $('.product-availability').toArray().every(function (item) {\n return $(item).data('available') && $(item).data('ready-to-order');\n });\n module.exports.methods.updateAddToCartEnableDisableOtherElements(!enable);\n });\n },\n updateAvailability: function () {\n $('body').on('product:updateAvailability', function (e, response) {\n $('div.availability', response.$productContainer)\n .data('ready-to-order', response.product.readyToOrder)\n .data('available', response.product.available);\n\n $('.availability-msg', response.$productContainer)\n .empty().html(response.message);\n\n if ($('.global-availability').length) {\n var allAvailable = $('.product-availability').toArray()\n .every(function (item) { return $(item).data('available'); });\n\n var allReady = $('.product-availability').toArray()\n .every(function (item) { return $(item).data('ready-to-order'); });\n\n $('.global-availability')\n .data('ready-to-order', allReady)\n .data('available', allAvailable);\n\n $('.global-availability .availability-msg').empty()\n .html(allReady ? response.message : response.resources.info_selectforstock);\n }\n });\n },\n sizeChart: function () {\n $('.size-chart a').on('click', function (e) {\n e.preventDefault();\n var url = $(this).attr('href');\n var $prodSizeChart = $(this).closest('.size-chart').find('.size-chart-collapsible');\n if ($prodSizeChart.is(':empty')) {\n $.ajax({\n url: url,\n type: 'get',\n dataType: 'json',\n success: function (data) {\n $prodSizeChart.append(data.content);\n }\n });\n }\n $prodSizeChart.toggleClass('active');\n });\n\n var $sizeChart = $('.size-chart-collapsible');\n $('body').on('click touchstart', function (e) {\n if ($('.size-chart').has(e.target).length <= 0) {\n $sizeChart.removeClass('active');\n }\n });\n },\n copyProductLink: function () {\n $('body').on('click', '#fa-link', function () {\n event.preventDefault();\n var $temp = $('');\n $('body').append($temp);\n $temp.val($('#shareUrl').val()).select();\n document.execCommand('copy');\n $temp.remove();\n $('.copy-link-message').attr('role', 'alert');\n $('.copy-link-message').removeClass('d-none');\n setTimeout(function () {\n $('.copy-link-message').addClass('d-none');\n }, 3000);\n });\n },\n\n focusChooseBonusProductModal: base.focusChooseBonusProductModal()\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';\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 = '
  • ' + response.resources.info_selectforstock + '
  • ';\n } else {\n availabilityMessages.forEach(function (message) {\n availabilityValue += '
  • ' + message + '
  • ';\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 += '
    ' + attribute.label + ': '\n + attribute.value + '
    ';\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('
      ' + $(carousel).data('prev') + '' + $(carousel).data('next') + '');\n for (var i = 0; i < imgs.length; i++) {\n $('
      \"'
      ').appendTo($(carousel).find('.carousel-inner'));\n $('
    1. ').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 '';\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 = $('
      ').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 = ''\n + '
      '\n + ''\n + '
      '\n + ''\n + '
      '\n + '
      '\n + ' ' + data.labels.selectprods + ''\n + ' '\n + '
      '\n + '
      '\n + '
      '\n + '
      '\n + '
      '\n + '
      ';\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 '
      '\n );\n }\n\n $('.add-to-cart-messages').append(\n '
      '\n + response.message\n + '
      '\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 + '
      '\n + '
      '\n + $choiceOfBonusProduct.find('.product-name').html()\n + '
      '\n + '
      '\n + '
      '\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('
      ');\n }\n $('.add-to-cart-messages').append(\n '
      '\n + data.errorMessage + '
      '\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('
      ');\n }\n $('.minicart-quantity').html(data.totalQty);\n $('.add-to-cart-messages').append(\n '
      '\n + data.msgSuccess + '
      '\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","'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","'use strict';\n\nvar processInclude = require('base/util');\n\n$(document).ready(function () {\n processInclude(require('./cart/quickView'));\n});\n","'use strict';\n\nvar base = require('../product/details');\n\nmodule.exports = function () {\n base.sizeChartTemplate();\n base.selectVariantAttribute();\n base.selectAttribute();\n base.colorAttribute();\n};","/*!\n * Splide.js\n * Version : 4.1.4\n * License : MIT\n * Copyright: 2022 Naotoshi Fujita\n */\n'use strict';\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\nvar MEDIA_PREFERS_REDUCED_MOTION = \"(prefers-reduced-motion: reduce)\";\nvar CREATED = 1;\nvar MOUNTED = 2;\nvar IDLE = 3;\nvar MOVING = 4;\nvar SCROLLING = 5;\nvar DRAGGING = 6;\nvar DESTROYED = 7;\nvar STATES = {\n CREATED: CREATED,\n MOUNTED: MOUNTED,\n IDLE: IDLE,\n MOVING: MOVING,\n SCROLLING: SCROLLING,\n DRAGGING: DRAGGING,\n DESTROYED: DESTROYED\n};\n\nfunction empty(array) {\n array.length = 0;\n}\n\nfunction slice(arrayLike, start, end) {\n return Array.prototype.slice.call(arrayLike, start, end);\n}\n\nfunction apply(func) {\n return func.bind.apply(func, [null].concat(slice(arguments, 1)));\n}\n\nvar nextTick = setTimeout;\n\nvar noop = function noop() {};\n\nfunction raf(func) {\n return requestAnimationFrame(func);\n}\n\nfunction typeOf(type, subject) {\n return typeof subject === type;\n}\n\nfunction isObject(subject) {\n return !isNull(subject) && typeOf(\"object\", subject);\n}\n\nvar isArray = Array.isArray;\nvar isFunction = apply(typeOf, \"function\");\nvar isString = apply(typeOf, \"string\");\nvar isUndefined = apply(typeOf, \"undefined\");\n\nfunction isNull(subject) {\n return subject === null;\n}\n\nfunction isHTMLElement(subject) {\n try {\n return subject instanceof (subject.ownerDocument.defaultView || window).HTMLElement;\n } catch (e) {\n return false;\n }\n}\n\nfunction toArray(value) {\n return isArray(value) ? value : [value];\n}\n\nfunction forEach(values, iteratee) {\n toArray(values).forEach(iteratee);\n}\n\nfunction includes(array, value) {\n return array.indexOf(value) > -1;\n}\n\nfunction push(array, items) {\n array.push.apply(array, toArray(items));\n return array;\n}\n\nfunction toggleClass(elm, classes, add) {\n if (elm) {\n forEach(classes, function (name) {\n if (name) {\n elm.classList[add ? \"add\" : \"remove\"](name);\n }\n });\n }\n}\n\nfunction addClass(elm, classes) {\n toggleClass(elm, isString(classes) ? classes.split(\" \") : classes, true);\n}\n\nfunction append(parent, children) {\n forEach(children, parent.appendChild.bind(parent));\n}\n\nfunction before(nodes, ref) {\n forEach(nodes, function (node) {\n var parent = (ref || node).parentNode;\n\n if (parent) {\n parent.insertBefore(node, ref);\n }\n });\n}\n\nfunction matches(elm, selector) {\n return isHTMLElement(elm) && (elm[\"msMatchesSelector\"] || elm.matches).call(elm, selector);\n}\n\nfunction children(parent, selector) {\n var children2 = parent ? slice(parent.children) : [];\n return selector ? children2.filter(function (child) {\n return matches(child, selector);\n }) : children2;\n}\n\nfunction child(parent, selector) {\n return selector ? children(parent, selector)[0] : parent.firstElementChild;\n}\n\nvar ownKeys = Object.keys;\n\nfunction forOwn(object, iteratee, right) {\n if (object) {\n (right ? ownKeys(object).reverse() : ownKeys(object)).forEach(function (key) {\n key !== \"__proto__\" && iteratee(object[key], key);\n });\n }\n\n return object;\n}\n\nfunction assign(object) {\n slice(arguments, 1).forEach(function (source) {\n forOwn(source, function (value, key) {\n object[key] = source[key];\n });\n });\n return object;\n}\n\nfunction merge(object) {\n slice(arguments, 1).forEach(function (source) {\n forOwn(source, function (value, key) {\n if (isArray(value)) {\n object[key] = value.slice();\n } else if (isObject(value)) {\n object[key] = merge({}, isObject(object[key]) ? object[key] : {}, value);\n } else {\n object[key] = value;\n }\n });\n });\n return object;\n}\n\nfunction omit(object, keys) {\n forEach(keys || ownKeys(object), function (key) {\n delete object[key];\n });\n}\n\nfunction removeAttribute(elms, attrs) {\n forEach(elms, function (elm) {\n forEach(attrs, function (attr) {\n elm && elm.removeAttribute(attr);\n });\n });\n}\n\nfunction setAttribute(elms, attrs, value) {\n if (isObject(attrs)) {\n forOwn(attrs, function (value2, name) {\n setAttribute(elms, name, value2);\n });\n } else {\n forEach(elms, function (elm) {\n isNull(value) || value === \"\" ? removeAttribute(elm, attrs) : elm.setAttribute(attrs, String(value));\n });\n }\n}\n\nfunction create(tag, attrs, parent) {\n var elm = document.createElement(tag);\n\n if (attrs) {\n isString(attrs) ? addClass(elm, attrs) : setAttribute(elm, attrs);\n }\n\n parent && append(parent, elm);\n return elm;\n}\n\nfunction style(elm, prop, value) {\n if (isUndefined(value)) {\n return getComputedStyle(elm)[prop];\n }\n\n if (!isNull(value)) {\n elm.style[prop] = \"\" + value;\n }\n}\n\nfunction display(elm, display2) {\n style(elm, \"display\", display2);\n}\n\nfunction focus(elm) {\n elm[\"setActive\"] && elm[\"setActive\"]() || elm.focus({\n preventScroll: true\n });\n}\n\nfunction getAttribute(elm, attr) {\n return elm.getAttribute(attr);\n}\n\nfunction hasClass(elm, className) {\n return elm && elm.classList.contains(className);\n}\n\nfunction rect(target) {\n return target.getBoundingClientRect();\n}\n\nfunction remove(nodes) {\n forEach(nodes, function (node) {\n if (node && node.parentNode) {\n node.parentNode.removeChild(node);\n }\n });\n}\n\nfunction parseHtml(html) {\n return child(new DOMParser().parseFromString(html, \"text/html\").body);\n}\n\nfunction prevent(e, stopPropagation) {\n e.preventDefault();\n\n if (stopPropagation) {\n e.stopPropagation();\n e.stopImmediatePropagation();\n }\n}\n\nfunction query(parent, selector) {\n return parent && parent.querySelector(selector);\n}\n\nfunction queryAll(parent, selector) {\n return selector ? slice(parent.querySelectorAll(selector)) : [];\n}\n\nfunction removeClass(elm, classes) {\n toggleClass(elm, classes, false);\n}\n\nfunction timeOf(e) {\n return e.timeStamp;\n}\n\nfunction unit(value) {\n return isString(value) ? value : value ? value + \"px\" : \"\";\n}\n\nvar PROJECT_CODE = \"splide\";\nvar DATA_ATTRIBUTE = \"data-\" + PROJECT_CODE;\n\nfunction assert(condition, message) {\n if (!condition) {\n throw new Error(\"[\" + PROJECT_CODE + \"] \" + (message || \"\"));\n }\n}\n\nvar min = Math.min,\n max = Math.max,\n floor = Math.floor,\n ceil = Math.ceil,\n abs = Math.abs;\n\nfunction approximatelyEqual(x, y, epsilon) {\n return abs(x - y) < epsilon;\n}\n\nfunction between(number, x, y, exclusive) {\n var minimum = min(x, y);\n var maximum = max(x, y);\n return exclusive ? minimum < number && number < maximum : minimum <= number && number <= maximum;\n}\n\nfunction clamp(number, x, y) {\n var minimum = min(x, y);\n var maximum = max(x, y);\n return min(max(minimum, number), maximum);\n}\n\nfunction sign(x) {\n return +(x > 0) - +(x < 0);\n}\n\nfunction camelToKebab(string) {\n return string.replace(/([a-z0-9])([A-Z])/g, \"$1-$2\").toLowerCase();\n}\n\nfunction format(string, replacements) {\n forEach(replacements, function (replacement) {\n string = string.replace(\"%s\", \"\" + replacement);\n });\n return string;\n}\n\nfunction pad(number) {\n return number < 10 ? \"0\" + number : \"\" + number;\n}\n\nvar ids = {};\n\nfunction uniqueId(prefix) {\n return \"\" + prefix + pad(ids[prefix] = (ids[prefix] || 0) + 1);\n}\n\nfunction EventBinder() {\n var listeners = [];\n\n function bind(targets, events, callback, options) {\n forEachEvent(targets, events, function (target, event, namespace) {\n var isEventTarget = (\"addEventListener\" in target);\n var remover = isEventTarget ? target.removeEventListener.bind(target, event, callback, options) : target[\"removeListener\"].bind(target, callback);\n isEventTarget ? target.addEventListener(event, callback, options) : target[\"addListener\"](callback);\n listeners.push([target, event, namespace, callback, remover]);\n });\n }\n\n function unbind(targets, events, callback) {\n forEachEvent(targets, events, function (target, event, namespace) {\n listeners = listeners.filter(function (listener) {\n if (listener[0] === target && listener[1] === event && listener[2] === namespace && (!callback || listener[3] === callback)) {\n listener[4]();\n return false;\n }\n\n return true;\n });\n });\n }\n\n function dispatch(target, type, detail) {\n var e;\n var bubbles = true;\n\n if (typeof CustomEvent === \"function\") {\n e = new CustomEvent(type, {\n bubbles: bubbles,\n detail: detail\n });\n } else {\n e = document.createEvent(\"CustomEvent\");\n e.initCustomEvent(type, bubbles, false, detail);\n }\n\n target.dispatchEvent(e);\n return e;\n }\n\n function forEachEvent(targets, events, iteratee) {\n forEach(targets, function (target) {\n target && forEach(events, function (events2) {\n events2.split(\" \").forEach(function (eventNS) {\n var fragment = eventNS.split(\".\");\n iteratee(target, fragment[0], fragment[1]);\n });\n });\n });\n }\n\n function destroy() {\n listeners.forEach(function (data) {\n data[4]();\n });\n empty(listeners);\n }\n\n return {\n bind: bind,\n unbind: unbind,\n dispatch: dispatch,\n destroy: destroy\n };\n}\n\nvar EVENT_MOUNTED = \"mounted\";\nvar EVENT_READY = \"ready\";\nvar EVENT_MOVE = \"move\";\nvar EVENT_MOVED = \"moved\";\nvar EVENT_CLICK = \"click\";\nvar EVENT_ACTIVE = \"active\";\nvar EVENT_INACTIVE = \"inactive\";\nvar EVENT_VISIBLE = \"visible\";\nvar EVENT_HIDDEN = \"hidden\";\nvar EVENT_REFRESH = \"refresh\";\nvar EVENT_UPDATED = \"updated\";\nvar EVENT_RESIZE = \"resize\";\nvar EVENT_RESIZED = \"resized\";\nvar EVENT_DRAG = \"drag\";\nvar EVENT_DRAGGING = \"dragging\";\nvar EVENT_DRAGGED = \"dragged\";\nvar EVENT_SCROLL = \"scroll\";\nvar EVENT_SCROLLED = \"scrolled\";\nvar EVENT_OVERFLOW = \"overflow\";\nvar EVENT_DESTROY = \"destroy\";\nvar EVENT_ARROWS_MOUNTED = \"arrows:mounted\";\nvar EVENT_ARROWS_UPDATED = \"arrows:updated\";\nvar EVENT_PAGINATION_MOUNTED = \"pagination:mounted\";\nvar EVENT_PAGINATION_UPDATED = \"pagination:updated\";\nvar EVENT_NAVIGATION_MOUNTED = \"navigation:mounted\";\nvar EVENT_AUTOPLAY_PLAY = \"autoplay:play\";\nvar EVENT_AUTOPLAY_PLAYING = \"autoplay:playing\";\nvar EVENT_AUTOPLAY_PAUSE = \"autoplay:pause\";\nvar EVENT_LAZYLOAD_LOADED = \"lazyload:loaded\";\nvar EVENT_SLIDE_KEYDOWN = \"sk\";\nvar EVENT_SHIFTED = \"sh\";\nvar EVENT_END_INDEX_CHANGED = \"ei\";\n\nfunction EventInterface(Splide2) {\n var bus = Splide2 ? Splide2.event.bus : document.createDocumentFragment();\n var binder = EventBinder();\n\n function on(events, callback) {\n binder.bind(bus, toArray(events).join(\" \"), function (e) {\n callback.apply(callback, isArray(e.detail) ? e.detail : []);\n });\n }\n\n function emit(event) {\n binder.dispatch(bus, event, slice(arguments, 1));\n }\n\n if (Splide2) {\n Splide2.event.on(EVENT_DESTROY, binder.destroy);\n }\n\n return assign(binder, {\n bus: bus,\n on: on,\n off: apply(binder.unbind, bus),\n emit: emit\n });\n}\n\nfunction RequestInterval(interval, onInterval, onUpdate, limit) {\n var now = Date.now;\n var startTime;\n var rate = 0;\n var id;\n var paused = true;\n var count = 0;\n\n function update() {\n if (!paused) {\n rate = interval ? min((now() - startTime) / interval, 1) : 1;\n onUpdate && onUpdate(rate);\n\n if (rate >= 1) {\n onInterval();\n startTime = now();\n\n if (limit && ++count >= limit) {\n return pause();\n }\n }\n\n id = raf(update);\n }\n }\n\n function start(resume) {\n resume || cancel();\n startTime = now() - (resume ? rate * interval : 0);\n paused = false;\n id = raf(update);\n }\n\n function pause() {\n paused = true;\n }\n\n function rewind() {\n startTime = now();\n rate = 0;\n\n if (onUpdate) {\n onUpdate(rate);\n }\n }\n\n function cancel() {\n id && cancelAnimationFrame(id);\n rate = 0;\n id = 0;\n paused = true;\n }\n\n function set(time) {\n interval = time;\n }\n\n function isPaused() {\n return paused;\n }\n\n return {\n start: start,\n rewind: rewind,\n pause: pause,\n cancel: cancel,\n set: set,\n isPaused: isPaused\n };\n}\n\nfunction State(initialState) {\n var state = initialState;\n\n function set(value) {\n state = value;\n }\n\n function is(states) {\n return includes(toArray(states), state);\n }\n\n return {\n set: set,\n is: is\n };\n}\n\nfunction Throttle(func, duration) {\n var interval = RequestInterval(duration || 0, func, null, 1);\n return function () {\n interval.isPaused() && interval.start();\n };\n}\n\nfunction Media(Splide2, Components2, options) {\n var state = Splide2.state;\n var breakpoints = options.breakpoints || {};\n var reducedMotion = options.reducedMotion || {};\n var binder = EventBinder();\n var queries = [];\n\n function setup() {\n var isMin = options.mediaQuery === \"min\";\n ownKeys(breakpoints).sort(function (n, m) {\n return isMin ? +n - +m : +m - +n;\n }).forEach(function (key) {\n register(breakpoints[key], \"(\" + (isMin ? \"min\" : \"max\") + \"-width:\" + key + \"px)\");\n });\n register(reducedMotion, MEDIA_PREFERS_REDUCED_MOTION);\n update();\n }\n\n function destroy(completely) {\n if (completely) {\n binder.destroy();\n }\n }\n\n function register(options2, query) {\n var queryList = matchMedia(query);\n binder.bind(queryList, \"change\", update);\n queries.push([options2, queryList]);\n }\n\n function update() {\n var destroyed = state.is(DESTROYED);\n var direction = options.direction;\n var merged = queries.reduce(function (merged2, entry) {\n return merge(merged2, entry[1].matches ? entry[0] : {});\n }, {});\n omit(options);\n set(merged);\n\n if (options.destroy) {\n Splide2.destroy(options.destroy === \"completely\");\n } else if (destroyed) {\n destroy(true);\n Splide2.mount();\n } else {\n direction !== options.direction && Splide2.refresh();\n }\n }\n\n function reduce(enable) {\n if (matchMedia(MEDIA_PREFERS_REDUCED_MOTION).matches) {\n enable ? merge(options, reducedMotion) : omit(options, ownKeys(reducedMotion));\n }\n }\n\n function set(opts, base, notify) {\n merge(options, opts);\n base && merge(Object.getPrototypeOf(options), opts);\n\n if (notify || !state.is(CREATED)) {\n Splide2.emit(EVENT_UPDATED, options);\n }\n }\n\n return {\n setup: setup,\n destroy: destroy,\n reduce: reduce,\n set: set\n };\n}\n\nvar ARROW = \"Arrow\";\nvar ARROW_LEFT = ARROW + \"Left\";\nvar ARROW_RIGHT = ARROW + \"Right\";\nvar ARROW_UP = ARROW + \"Up\";\nvar ARROW_DOWN = ARROW + \"Down\";\nvar LTR = \"ltr\";\nvar RTL = \"rtl\";\nvar TTB = \"ttb\";\nvar ORIENTATION_MAP = {\n width: [\"height\"],\n left: [\"top\", \"right\"],\n right: [\"bottom\", \"left\"],\n x: [\"y\"],\n X: [\"Y\"],\n Y: [\"X\"],\n ArrowLeft: [ARROW_UP, ARROW_RIGHT],\n ArrowRight: [ARROW_DOWN, ARROW_LEFT]\n};\n\nfunction Direction(Splide2, Components2, options) {\n function resolve(prop, axisOnly, direction) {\n direction = direction || options.direction;\n var index = direction === RTL && !axisOnly ? 1 : direction === TTB ? 0 : -1;\n return ORIENTATION_MAP[prop] && ORIENTATION_MAP[prop][index] || prop.replace(/width|left|right/i, function (match, offset) {\n var replacement = ORIENTATION_MAP[match.toLowerCase()][index] || match;\n return offset > 0 ? replacement.charAt(0).toUpperCase() + replacement.slice(1) : replacement;\n });\n }\n\n function orient(value) {\n return value * (options.direction === RTL ? 1 : -1);\n }\n\n return {\n resolve: resolve,\n orient: orient\n };\n}\n\nvar ROLE = \"role\";\nvar TAB_INDEX = \"tabindex\";\nvar DISABLED = \"disabled\";\nvar ARIA_PREFIX = \"aria-\";\nvar ARIA_CONTROLS = ARIA_PREFIX + \"controls\";\nvar ARIA_CURRENT = ARIA_PREFIX + \"current\";\nvar ARIA_SELECTED = ARIA_PREFIX + \"selected\";\nvar ARIA_LABEL = ARIA_PREFIX + \"label\";\nvar ARIA_LABELLEDBY = ARIA_PREFIX + \"labelledby\";\nvar ARIA_HIDDEN = ARIA_PREFIX + \"hidden\";\nvar ARIA_ORIENTATION = ARIA_PREFIX + \"orientation\";\nvar ARIA_ROLEDESCRIPTION = ARIA_PREFIX + \"roledescription\";\nvar ARIA_LIVE = ARIA_PREFIX + \"live\";\nvar ARIA_BUSY = ARIA_PREFIX + \"busy\";\nvar ARIA_ATOMIC = ARIA_PREFIX + \"atomic\";\nvar ALL_ATTRIBUTES = [ROLE, TAB_INDEX, DISABLED, ARIA_CONTROLS, ARIA_CURRENT, ARIA_LABEL, ARIA_LABELLEDBY, ARIA_HIDDEN, ARIA_ORIENTATION, ARIA_ROLEDESCRIPTION];\nvar CLASS_PREFIX = PROJECT_CODE + \"__\";\nvar STATUS_CLASS_PREFIX = \"is-\";\nvar CLASS_ROOT = PROJECT_CODE;\nvar CLASS_TRACK = CLASS_PREFIX + \"track\";\nvar CLASS_LIST = CLASS_PREFIX + \"list\";\nvar CLASS_SLIDE = CLASS_PREFIX + \"slide\";\nvar CLASS_CLONE = CLASS_SLIDE + \"--clone\";\nvar CLASS_CONTAINER = CLASS_SLIDE + \"__container\";\nvar CLASS_ARROWS = CLASS_PREFIX + \"arrows\";\nvar CLASS_ARROW = CLASS_PREFIX + \"arrow\";\nvar CLASS_ARROW_PREV = CLASS_ARROW + \"--prev\";\nvar CLASS_ARROW_NEXT = CLASS_ARROW + \"--next\";\nvar CLASS_PAGINATION = CLASS_PREFIX + \"pagination\";\nvar CLASS_PAGINATION_PAGE = CLASS_PAGINATION + \"__page\";\nvar CLASS_PROGRESS = CLASS_PREFIX + \"progress\";\nvar CLASS_PROGRESS_BAR = CLASS_PROGRESS + \"__bar\";\nvar CLASS_TOGGLE = CLASS_PREFIX + \"toggle\";\nvar CLASS_TOGGLE_PLAY = CLASS_TOGGLE + \"__play\";\nvar CLASS_TOGGLE_PAUSE = CLASS_TOGGLE + \"__pause\";\nvar CLASS_SPINNER = CLASS_PREFIX + \"spinner\";\nvar CLASS_SR = CLASS_PREFIX + \"sr\";\nvar CLASS_INITIALIZED = STATUS_CLASS_PREFIX + \"initialized\";\nvar CLASS_ACTIVE = STATUS_CLASS_PREFIX + \"active\";\nvar CLASS_PREV = STATUS_CLASS_PREFIX + \"prev\";\nvar CLASS_NEXT = STATUS_CLASS_PREFIX + \"next\";\nvar CLASS_VISIBLE = STATUS_CLASS_PREFIX + \"visible\";\nvar CLASS_LOADING = STATUS_CLASS_PREFIX + \"loading\";\nvar CLASS_FOCUS_IN = STATUS_CLASS_PREFIX + \"focus-in\";\nvar CLASS_OVERFLOW = STATUS_CLASS_PREFIX + \"overflow\";\nvar STATUS_CLASSES = [CLASS_ACTIVE, CLASS_VISIBLE, CLASS_PREV, CLASS_NEXT, CLASS_LOADING, CLASS_FOCUS_IN, CLASS_OVERFLOW];\nvar CLASSES = {\n slide: CLASS_SLIDE,\n clone: CLASS_CLONE,\n arrows: CLASS_ARROWS,\n arrow: CLASS_ARROW,\n prev: CLASS_ARROW_PREV,\n next: CLASS_ARROW_NEXT,\n pagination: CLASS_PAGINATION,\n page: CLASS_PAGINATION_PAGE,\n spinner: CLASS_SPINNER\n};\n\nfunction closest(from, selector) {\n if (isFunction(from.closest)) {\n return from.closest(selector);\n }\n\n var elm = from;\n\n while (elm && elm.nodeType === 1) {\n if (matches(elm, selector)) {\n break;\n }\n\n elm = elm.parentElement;\n }\n\n return elm;\n}\n\nvar FRICTION = 5;\nvar LOG_INTERVAL = 200;\nvar POINTER_DOWN_EVENTS = \"touchstart mousedown\";\nvar POINTER_MOVE_EVENTS = \"touchmove mousemove\";\nvar POINTER_UP_EVENTS = \"touchend touchcancel mouseup click\";\n\nfunction Elements(Splide2, Components2, options) {\n var _EventInterface = EventInterface(Splide2),\n on = _EventInterface.on,\n bind = _EventInterface.bind;\n\n var root = Splide2.root;\n var i18n = options.i18n;\n var elements = {};\n var slides = [];\n var rootClasses = [];\n var trackClasses = [];\n var track;\n var list;\n var isUsingKey;\n\n function setup() {\n collect();\n init();\n update();\n }\n\n function mount() {\n on(EVENT_REFRESH, destroy);\n on(EVENT_REFRESH, setup);\n on(EVENT_UPDATED, update);\n bind(document, POINTER_DOWN_EVENTS + \" keydown\", function (e) {\n isUsingKey = e.type === \"keydown\";\n }, {\n capture: true\n });\n bind(root, \"focusin\", function () {\n toggleClass(root, CLASS_FOCUS_IN, !!isUsingKey);\n });\n }\n\n function destroy(completely) {\n var attrs = ALL_ATTRIBUTES.concat(\"style\");\n empty(slides);\n removeClass(root, rootClasses);\n removeClass(track, trackClasses);\n removeAttribute([track, list], attrs);\n removeAttribute(root, completely ? attrs : [\"style\", ARIA_ROLEDESCRIPTION]);\n }\n\n function update() {\n removeClass(root, rootClasses);\n removeClass(track, trackClasses);\n rootClasses = getClasses(CLASS_ROOT);\n trackClasses = getClasses(CLASS_TRACK);\n addClass(root, rootClasses);\n addClass(track, trackClasses);\n setAttribute(root, ARIA_LABEL, options.label);\n setAttribute(root, ARIA_LABELLEDBY, options.labelledby);\n }\n\n function collect() {\n track = find(\".\" + CLASS_TRACK);\n list = child(track, \".\" + CLASS_LIST);\n assert(track && list, \"A track/list element is missing.\");\n push(slides, children(list, \".\" + CLASS_SLIDE + \":not(.\" + CLASS_CLONE + \")\"));\n forOwn({\n arrows: CLASS_ARROWS,\n pagination: CLASS_PAGINATION,\n prev: CLASS_ARROW_PREV,\n next: CLASS_ARROW_NEXT,\n bar: CLASS_PROGRESS_BAR,\n toggle: CLASS_TOGGLE\n }, function (className, key) {\n elements[key] = find(\".\" + className);\n });\n assign(elements, {\n root: root,\n track: track,\n list: list,\n slides: slides\n });\n }\n\n function init() {\n var id = root.id || uniqueId(PROJECT_CODE);\n var role = options.role;\n root.id = id;\n track.id = track.id || id + \"-track\";\n list.id = list.id || id + \"-list\";\n\n if (!getAttribute(root, ROLE) && root.tagName !== \"SECTION\" && role) {\n setAttribute(root, ROLE, role);\n }\n\n setAttribute(root, ARIA_ROLEDESCRIPTION, i18n.carousel);\n setAttribute(list, ROLE, \"presentation\");\n }\n\n function find(selector) {\n var elm = query(root, selector);\n return elm && closest(elm, \".\" + CLASS_ROOT) === root ? elm : void 0;\n }\n\n function getClasses(base) {\n return [base + \"--\" + options.type, base + \"--\" + options.direction, options.drag && base + \"--draggable\", options.isNavigation && base + \"--nav\", base === CLASS_ROOT && CLASS_ACTIVE];\n }\n\n return assign(elements, {\n setup: setup,\n mount: mount,\n destroy: destroy\n });\n}\n\nvar SLIDE = \"slide\";\nvar LOOP = \"loop\";\nvar FADE = \"fade\";\n\nfunction Slide$1(Splide2, index, slideIndex, slide) {\n var event = EventInterface(Splide2);\n var on = event.on,\n emit = event.emit,\n bind = event.bind;\n var Components = Splide2.Components,\n root = Splide2.root,\n options = Splide2.options;\n var isNavigation = options.isNavigation,\n updateOnMove = options.updateOnMove,\n i18n = options.i18n,\n pagination = options.pagination,\n slideFocus = options.slideFocus;\n var resolve = Components.Direction.resolve;\n var styles = getAttribute(slide, \"style\");\n var label = getAttribute(slide, ARIA_LABEL);\n var isClone = slideIndex > -1;\n var container = child(slide, \".\" + CLASS_CONTAINER);\n var destroyed;\n\n function mount() {\n if (!isClone) {\n slide.id = root.id + \"-slide\" + pad(index + 1);\n setAttribute(slide, ROLE, pagination ? \"tabpanel\" : \"group\");\n setAttribute(slide, ARIA_ROLEDESCRIPTION, i18n.slide);\n setAttribute(slide, ARIA_LABEL, label || format(i18n.slideLabel, [index + 1, Splide2.length]));\n }\n\n listen();\n }\n\n function listen() {\n bind(slide, \"click\", apply(emit, EVENT_CLICK, self));\n bind(slide, \"keydown\", apply(emit, EVENT_SLIDE_KEYDOWN, self));\n on([EVENT_MOVED, EVENT_SHIFTED, EVENT_SCROLLED], update);\n on(EVENT_NAVIGATION_MOUNTED, initNavigation);\n\n if (updateOnMove) {\n on(EVENT_MOVE, onMove);\n }\n }\n\n function destroy() {\n destroyed = true;\n event.destroy();\n removeClass(slide, STATUS_CLASSES);\n removeAttribute(slide, ALL_ATTRIBUTES);\n setAttribute(slide, \"style\", styles);\n setAttribute(slide, ARIA_LABEL, label || \"\");\n }\n\n function initNavigation() {\n var controls = Splide2.splides.map(function (target) {\n var Slide2 = target.splide.Components.Slides.getAt(index);\n return Slide2 ? Slide2.slide.id : \"\";\n }).join(\" \");\n setAttribute(slide, ARIA_LABEL, format(i18n.slideX, (isClone ? slideIndex : index) + 1));\n setAttribute(slide, ARIA_CONTROLS, controls);\n setAttribute(slide, ROLE, slideFocus ? \"button\" : \"\");\n slideFocus && removeAttribute(slide, ARIA_ROLEDESCRIPTION);\n }\n\n function onMove() {\n if (!destroyed) {\n update();\n }\n }\n\n function update() {\n if (!destroyed) {\n var curr = Splide2.index;\n updateActivity();\n updateVisibility();\n toggleClass(slide, CLASS_PREV, index === curr - 1);\n toggleClass(slide, CLASS_NEXT, index === curr + 1);\n }\n }\n\n function updateActivity() {\n var active = isActive();\n\n if (active !== hasClass(slide, CLASS_ACTIVE)) {\n toggleClass(slide, CLASS_ACTIVE, active);\n setAttribute(slide, ARIA_CURRENT, isNavigation && active || \"\");\n emit(active ? EVENT_ACTIVE : EVENT_INACTIVE, self);\n }\n }\n\n function updateVisibility() {\n var visible = isVisible();\n var hidden = !visible && (!isActive() || isClone);\n\n if (!Splide2.state.is([MOVING, SCROLLING])) {\n setAttribute(slide, ARIA_HIDDEN, hidden || \"\");\n }\n\n setAttribute(queryAll(slide, options.focusableNodes || \"\"), TAB_INDEX, hidden ? -1 : \"\");\n\n if (slideFocus) {\n setAttribute(slide, TAB_INDEX, hidden ? -1 : 0);\n }\n\n if (visible !== hasClass(slide, CLASS_VISIBLE)) {\n toggleClass(slide, CLASS_VISIBLE, visible);\n emit(visible ? EVENT_VISIBLE : EVENT_HIDDEN, self);\n }\n\n if (!visible && document.activeElement === slide) {\n var Slide2 = Components.Slides.getAt(Splide2.index);\n Slide2 && focus(Slide2.slide);\n }\n }\n\n function style$1(prop, value, useContainer) {\n style(useContainer && container || slide, prop, value);\n }\n\n function isActive() {\n var curr = Splide2.index;\n return curr === index || options.cloneStatus && curr === slideIndex;\n }\n\n function isVisible() {\n if (Splide2.is(FADE)) {\n return isActive();\n }\n\n var trackRect = rect(Components.Elements.track);\n var slideRect = rect(slide);\n var left = resolve(\"left\", true);\n var right = resolve(\"right\", true);\n return floor(trackRect[left]) <= ceil(slideRect[left]) && floor(slideRect[right]) <= ceil(trackRect[right]);\n }\n\n function isWithin(from, distance) {\n var diff = abs(from - index);\n\n if (!isClone && (options.rewind || Splide2.is(LOOP))) {\n diff = min(diff, Splide2.length - diff);\n }\n\n return diff <= distance;\n }\n\n var self = {\n index: index,\n slideIndex: slideIndex,\n slide: slide,\n container: container,\n isClone: isClone,\n mount: mount,\n destroy: destroy,\n update: update,\n style: style$1,\n isWithin: isWithin\n };\n return self;\n}\n\nfunction Slides(Splide2, Components2, options) {\n var _EventInterface2 = EventInterface(Splide2),\n on = _EventInterface2.on,\n emit = _EventInterface2.emit,\n bind = _EventInterface2.bind;\n\n var _Components2$Elements = Components2.Elements,\n slides = _Components2$Elements.slides,\n list = _Components2$Elements.list;\n var Slides2 = [];\n\n function mount() {\n init();\n on(EVENT_REFRESH, destroy);\n on(EVENT_REFRESH, init);\n }\n\n function init() {\n slides.forEach(function (slide, index) {\n register(slide, index, -1);\n });\n }\n\n function destroy() {\n forEach$1(function (Slide2) {\n Slide2.destroy();\n });\n empty(Slides2);\n }\n\n function update() {\n forEach$1(function (Slide2) {\n Slide2.update();\n });\n }\n\n function register(slide, index, slideIndex) {\n var object = Slide$1(Splide2, index, slideIndex, slide);\n object.mount();\n Slides2.push(object);\n Slides2.sort(function (Slide1, Slide2) {\n return Slide1.index - Slide2.index;\n });\n }\n\n function get(excludeClones) {\n return excludeClones ? filter(function (Slide2) {\n return !Slide2.isClone;\n }) : Slides2;\n }\n\n function getIn(page) {\n var Controller = Components2.Controller;\n var index = Controller.toIndex(page);\n var max = Controller.hasFocus() ? 1 : options.perPage;\n return filter(function (Slide2) {\n return between(Slide2.index, index, index + max - 1);\n });\n }\n\n function getAt(index) {\n return filter(index)[0];\n }\n\n function add(items, index) {\n forEach(items, function (slide) {\n if (isString(slide)) {\n slide = parseHtml(slide);\n }\n\n if (isHTMLElement(slide)) {\n var ref = slides[index];\n ref ? before(slide, ref) : append(list, slide);\n addClass(slide, options.classes.slide);\n observeImages(slide, apply(emit, EVENT_RESIZE));\n }\n });\n emit(EVENT_REFRESH);\n }\n\n function remove$1(matcher) {\n remove(filter(matcher).map(function (Slide2) {\n return Slide2.slide;\n }));\n emit(EVENT_REFRESH);\n }\n\n function forEach$1(iteratee, excludeClones) {\n get(excludeClones).forEach(iteratee);\n }\n\n function filter(matcher) {\n return Slides2.filter(isFunction(matcher) ? matcher : function (Slide2) {\n return isString(matcher) ? matches(Slide2.slide, matcher) : includes(toArray(matcher), Slide2.index);\n });\n }\n\n function style(prop, value, useContainer) {\n forEach$1(function (Slide2) {\n Slide2.style(prop, value, useContainer);\n });\n }\n\n function observeImages(elm, callback) {\n var images = queryAll(elm, \"img\");\n var length = images.length;\n\n if (length) {\n images.forEach(function (img) {\n bind(img, \"load error\", function () {\n if (! --length) {\n callback();\n }\n });\n });\n } else {\n callback();\n }\n }\n\n function getLength(excludeClones) {\n return excludeClones ? slides.length : Slides2.length;\n }\n\n function isEnough() {\n return Slides2.length > options.perPage;\n }\n\n return {\n mount: mount,\n destroy: destroy,\n update: update,\n register: register,\n get: get,\n getIn: getIn,\n getAt: getAt,\n add: add,\n remove: remove$1,\n forEach: forEach$1,\n filter: filter,\n style: style,\n getLength: getLength,\n isEnough: isEnough\n };\n}\n\nfunction Layout(Splide2, Components2, options) {\n var _EventInterface3 = EventInterface(Splide2),\n on = _EventInterface3.on,\n bind = _EventInterface3.bind,\n emit = _EventInterface3.emit;\n\n var Slides = Components2.Slides;\n var resolve = Components2.Direction.resolve;\n var _Components2$Elements2 = Components2.Elements,\n root = _Components2$Elements2.root,\n track = _Components2$Elements2.track,\n list = _Components2$Elements2.list;\n var getAt = Slides.getAt,\n styleSlides = Slides.style;\n var vertical;\n var rootRect;\n var overflow;\n\n function mount() {\n init();\n bind(window, \"resize load\", Throttle(apply(emit, EVENT_RESIZE)));\n on([EVENT_UPDATED, EVENT_REFRESH], init);\n on(EVENT_RESIZE, resize);\n }\n\n function init() {\n vertical = options.direction === TTB;\n style(root, \"maxWidth\", unit(options.width));\n style(track, resolve(\"paddingLeft\"), cssPadding(false));\n style(track, resolve(\"paddingRight\"), cssPadding(true));\n resize(true);\n }\n\n function resize(force) {\n var newRect = rect(root);\n\n if (force || rootRect.width !== newRect.width || rootRect.height !== newRect.height) {\n style(track, \"height\", cssTrackHeight());\n styleSlides(resolve(\"marginRight\"), unit(options.gap));\n styleSlides(\"width\", cssSlideWidth());\n styleSlides(\"height\", cssSlideHeight(), true);\n rootRect = newRect;\n emit(EVENT_RESIZED);\n\n if (overflow !== (overflow = isOverflow())) {\n toggleClass(root, CLASS_OVERFLOW, overflow);\n emit(EVENT_OVERFLOW, overflow);\n }\n }\n }\n\n function cssPadding(right) {\n var padding = options.padding;\n var prop = resolve(right ? \"right\" : \"left\");\n return padding && unit(padding[prop] || (isObject(padding) ? 0 : padding)) || \"0px\";\n }\n\n function cssTrackHeight() {\n var height = \"\";\n\n if (vertical) {\n height = cssHeight();\n assert(height, \"height or heightRatio is missing.\");\n height = \"calc(\" + height + \" - \" + cssPadding(false) + \" - \" + cssPadding(true) + \")\";\n }\n\n return height;\n }\n\n function cssHeight() {\n return unit(options.height || rect(list).width * options.heightRatio);\n }\n\n function cssSlideWidth() {\n return options.autoWidth ? null : unit(options.fixedWidth) || (vertical ? \"\" : cssSlideSize());\n }\n\n function cssSlideHeight() {\n return unit(options.fixedHeight) || (vertical ? options.autoHeight ? null : cssSlideSize() : cssHeight());\n }\n\n function cssSlideSize() {\n var gap = unit(options.gap);\n return \"calc((100%\" + (gap && \" + \" + gap) + \")/\" + (options.perPage || 1) + (gap && \" - \" + gap) + \")\";\n }\n\n function listSize() {\n return rect(list)[resolve(\"width\")];\n }\n\n function slideSize(index, withoutGap) {\n var Slide = getAt(index || 0);\n return Slide ? rect(Slide.slide)[resolve(\"width\")] + (withoutGap ? 0 : getGap()) : 0;\n }\n\n function totalSize(index, withoutGap) {\n var Slide = getAt(index);\n\n if (Slide) {\n var right = rect(Slide.slide)[resolve(\"right\")];\n var left = rect(list)[resolve(\"left\")];\n return abs(right - left) + (withoutGap ? 0 : getGap());\n }\n\n return 0;\n }\n\n function sliderSize(withoutGap) {\n return totalSize(Splide2.length - 1) - totalSize(0) + slideSize(0, withoutGap);\n }\n\n function getGap() {\n var Slide = getAt(0);\n return Slide && parseFloat(style(Slide.slide, resolve(\"marginRight\"))) || 0;\n }\n\n function getPadding(right) {\n return parseFloat(style(track, resolve(\"padding\" + (right ? \"Right\" : \"Left\")))) || 0;\n }\n\n function isOverflow() {\n return Splide2.is(FADE) || sliderSize(true) > listSize();\n }\n\n return {\n mount: mount,\n resize: resize,\n listSize: listSize,\n slideSize: slideSize,\n sliderSize: sliderSize,\n totalSize: totalSize,\n getPadding: getPadding,\n isOverflow: isOverflow\n };\n}\n\nvar MULTIPLIER = 2;\n\nfunction Clones(Splide2, Components2, options) {\n var event = EventInterface(Splide2);\n var on = event.on;\n var Elements = Components2.Elements,\n Slides = Components2.Slides;\n var resolve = Components2.Direction.resolve;\n var clones = [];\n var cloneCount;\n\n function mount() {\n on(EVENT_REFRESH, remount);\n on([EVENT_UPDATED, EVENT_RESIZE], observe);\n\n if (cloneCount = computeCloneCount()) {\n generate(cloneCount);\n Components2.Layout.resize(true);\n }\n }\n\n function remount() {\n destroy();\n mount();\n }\n\n function destroy() {\n remove(clones);\n empty(clones);\n event.destroy();\n }\n\n function observe() {\n var count = computeCloneCount();\n\n if (cloneCount !== count) {\n if (cloneCount < count || !count) {\n event.emit(EVENT_REFRESH);\n }\n }\n }\n\n function generate(count) {\n var slides = Slides.get().slice();\n var length = slides.length;\n\n if (length) {\n while (slides.length < count) {\n push(slides, slides);\n }\n\n push(slides.slice(-count), slides.slice(0, count)).forEach(function (Slide, index) {\n var isHead = index < count;\n var clone = cloneDeep(Slide.slide, index);\n isHead ? before(clone, slides[0].slide) : append(Elements.list, clone);\n push(clones, clone);\n Slides.register(clone, index - count + (isHead ? 0 : length), Slide.index);\n });\n }\n }\n\n function cloneDeep(elm, index) {\n var clone = elm.cloneNode(true);\n addClass(clone, options.classes.clone);\n clone.id = Splide2.root.id + \"-clone\" + pad(index + 1);\n return clone;\n }\n\n function computeCloneCount() {\n var clones2 = options.clones;\n\n if (!Splide2.is(LOOP)) {\n clones2 = 0;\n } else if (isUndefined(clones2)) {\n var fixedSize = options[resolve(\"fixedWidth\")] && Components2.Layout.slideSize(0);\n var fixedCount = fixedSize && ceil(rect(Elements.track)[resolve(\"width\")] / fixedSize);\n clones2 = fixedCount || options[resolve(\"autoWidth\")] && Splide2.length || options.perPage * MULTIPLIER;\n }\n\n return clones2;\n }\n\n return {\n mount: mount,\n destroy: destroy\n };\n}\n\nfunction Move(Splide2, Components2, options) {\n var _EventInterface4 = EventInterface(Splide2),\n on = _EventInterface4.on,\n emit = _EventInterface4.emit;\n\n var set = Splide2.state.set;\n var _Components2$Layout = Components2.Layout,\n slideSize = _Components2$Layout.slideSize,\n getPadding = _Components2$Layout.getPadding,\n totalSize = _Components2$Layout.totalSize,\n listSize = _Components2$Layout.listSize,\n sliderSize = _Components2$Layout.sliderSize;\n var _Components2$Directio = Components2.Direction,\n resolve = _Components2$Directio.resolve,\n orient = _Components2$Directio.orient;\n var _Components2$Elements3 = Components2.Elements,\n list = _Components2$Elements3.list,\n track = _Components2$Elements3.track;\n var Transition;\n\n function mount() {\n Transition = Components2.Transition;\n on([EVENT_MOUNTED, EVENT_RESIZED, EVENT_UPDATED, EVENT_REFRESH], reposition);\n }\n\n function reposition() {\n if (!Components2.Controller.isBusy()) {\n Components2.Scroll.cancel();\n jump(Splide2.index);\n Components2.Slides.update();\n }\n }\n\n function move(dest, index, prev, callback) {\n if (dest !== index && canShift(dest > prev)) {\n cancel();\n translate(shift(getPosition(), dest > prev), true);\n }\n\n set(MOVING);\n emit(EVENT_MOVE, index, prev, dest);\n Transition.start(index, function () {\n set(IDLE);\n emit(EVENT_MOVED, index, prev, dest);\n callback && callback();\n });\n }\n\n function jump(index) {\n translate(toPosition(index, true));\n }\n\n function translate(position, preventLoop) {\n if (!Splide2.is(FADE)) {\n var destination = preventLoop ? position : loop(position);\n style(list, \"transform\", \"translate\" + resolve(\"X\") + \"(\" + destination + \"px)\");\n position !== destination && emit(EVENT_SHIFTED);\n }\n }\n\n function loop(position) {\n if (Splide2.is(LOOP)) {\n var index = toIndex(position);\n var exceededMax = index > Components2.Controller.getEnd();\n var exceededMin = index < 0;\n\n if (exceededMin || exceededMax) {\n position = shift(position, exceededMax);\n }\n }\n\n return position;\n }\n\n function shift(position, backwards) {\n var excess = position - getLimit(backwards);\n var size = sliderSize();\n position -= orient(size * (ceil(abs(excess) / size) || 1)) * (backwards ? 1 : -1);\n return position;\n }\n\n function cancel() {\n translate(getPosition(), true);\n Transition.cancel();\n }\n\n function toIndex(position) {\n var Slides = Components2.Slides.get();\n var index = 0;\n var minDistance = Infinity;\n\n for (var i = 0; i < Slides.length; i++) {\n var slideIndex = Slides[i].index;\n var distance = abs(toPosition(slideIndex, true) - position);\n\n if (distance <= minDistance) {\n minDistance = distance;\n index = slideIndex;\n } else {\n break;\n }\n }\n\n return index;\n }\n\n function toPosition(index, trimming) {\n var position = orient(totalSize(index - 1) - offset(index));\n return trimming ? trim(position) : position;\n }\n\n function getPosition() {\n var left = resolve(\"left\");\n return rect(list)[left] - rect(track)[left] + orient(getPadding(false));\n }\n\n function trim(position) {\n if (options.trimSpace && Splide2.is(SLIDE)) {\n position = clamp(position, 0, orient(sliderSize(true) - listSize()));\n }\n\n return position;\n }\n\n function offset(index) {\n var focus = options.focus;\n return focus === \"center\" ? (listSize() - slideSize(index, true)) / 2 : +focus * slideSize(index) || 0;\n }\n\n function getLimit(max) {\n return toPosition(max ? Components2.Controller.getEnd() : 0, !!options.trimSpace);\n }\n\n function canShift(backwards) {\n var shifted = orient(shift(getPosition(), backwards));\n return backwards ? shifted >= 0 : shifted <= list[resolve(\"scrollWidth\")] - rect(track)[resolve(\"width\")];\n }\n\n function exceededLimit(max, position) {\n position = isUndefined(position) ? getPosition() : position;\n var exceededMin = max !== true && orient(position) < orient(getLimit(false));\n var exceededMax = max !== false && orient(position) > orient(getLimit(true));\n return exceededMin || exceededMax;\n }\n\n return {\n mount: mount,\n move: move,\n jump: jump,\n translate: translate,\n shift: shift,\n cancel: cancel,\n toIndex: toIndex,\n toPosition: toPosition,\n getPosition: getPosition,\n getLimit: getLimit,\n exceededLimit: exceededLimit,\n reposition: reposition\n };\n}\n\nfunction Controller(Splide2, Components2, options) {\n var _EventInterface5 = EventInterface(Splide2),\n on = _EventInterface5.on,\n emit = _EventInterface5.emit;\n\n var Move = Components2.Move;\n var getPosition = Move.getPosition,\n getLimit = Move.getLimit,\n toPosition = Move.toPosition;\n var _Components2$Slides = Components2.Slides,\n isEnough = _Components2$Slides.isEnough,\n getLength = _Components2$Slides.getLength;\n var omitEnd = options.omitEnd;\n var isLoop = Splide2.is(LOOP);\n var isSlide = Splide2.is(SLIDE);\n var getNext = apply(getAdjacent, false);\n var getPrev = apply(getAdjacent, true);\n var currIndex = options.start || 0;\n var endIndex;\n var prevIndex = currIndex;\n var slideCount;\n var perMove;\n var perPage;\n\n function mount() {\n init();\n on([EVENT_UPDATED, EVENT_REFRESH, EVENT_END_INDEX_CHANGED], init);\n on(EVENT_RESIZED, onResized);\n }\n\n function init() {\n slideCount = getLength(true);\n perMove = options.perMove;\n perPage = options.perPage;\n endIndex = getEnd();\n var index = clamp(currIndex, 0, omitEnd ? endIndex : slideCount - 1);\n\n if (index !== currIndex) {\n currIndex = index;\n Move.reposition();\n }\n }\n\n function onResized() {\n if (endIndex !== getEnd()) {\n emit(EVENT_END_INDEX_CHANGED);\n }\n }\n\n function go(control, allowSameIndex, callback) {\n if (!isBusy()) {\n var dest = parse(control);\n var index = loop(dest);\n\n if (index > -1 && (allowSameIndex || index !== currIndex)) {\n setIndex(index);\n Move.move(dest, index, prevIndex, callback);\n }\n }\n }\n\n function scroll(destination, duration, snap, callback) {\n Components2.Scroll.scroll(destination, duration, snap, function () {\n var index = loop(Move.toIndex(getPosition()));\n setIndex(omitEnd ? min(index, endIndex) : index);\n callback && callback();\n });\n }\n\n function parse(control) {\n var index = currIndex;\n\n if (isString(control)) {\n var _ref = control.match(/([+\\-<>])(\\d+)?/) || [],\n indicator = _ref[1],\n number = _ref[2];\n\n if (indicator === \"+\" || indicator === \"-\") {\n index = computeDestIndex(currIndex + +(\"\" + indicator + (+number || 1)), currIndex);\n } else if (indicator === \">\") {\n index = number ? toIndex(+number) : getNext(true);\n } else if (indicator === \"<\") {\n index = getPrev(true);\n }\n } else {\n index = isLoop ? control : clamp(control, 0, endIndex);\n }\n\n return index;\n }\n\n function getAdjacent(prev, destination) {\n var number = perMove || (hasFocus() ? 1 : perPage);\n var dest = computeDestIndex(currIndex + number * (prev ? -1 : 1), currIndex, !(perMove || hasFocus()));\n\n if (dest === -1 && isSlide) {\n if (!approximatelyEqual(getPosition(), getLimit(!prev), 1)) {\n return prev ? 0 : endIndex;\n }\n }\n\n return destination ? dest : loop(dest);\n }\n\n function computeDestIndex(dest, from, snapPage) {\n if (isEnough() || hasFocus()) {\n var index = computeMovableDestIndex(dest);\n\n if (index !== dest) {\n from = dest;\n dest = index;\n snapPage = false;\n }\n\n if (dest < 0 || dest > endIndex) {\n if (!perMove && (between(0, dest, from, true) || between(endIndex, from, dest, true))) {\n dest = toIndex(toPage(dest));\n } else {\n if (isLoop) {\n dest = snapPage ? dest < 0 ? -(slideCount % perPage || perPage) : slideCount : dest;\n } else if (options.rewind) {\n dest = dest < 0 ? endIndex : 0;\n } else {\n dest = -1;\n }\n }\n } else {\n if (snapPage && dest !== from) {\n dest = toIndex(toPage(from) + (dest < from ? -1 : 1));\n }\n }\n } else {\n dest = -1;\n }\n\n return dest;\n }\n\n function computeMovableDestIndex(dest) {\n if (isSlide && options.trimSpace === \"move\" && dest !== currIndex) {\n var position = getPosition();\n\n while (position === toPosition(dest, true) && between(dest, 0, Splide2.length - 1, !options.rewind)) {\n dest < currIndex ? --dest : ++dest;\n }\n }\n\n return dest;\n }\n\n function loop(index) {\n return isLoop ? (index + slideCount) % slideCount || 0 : index;\n }\n\n function getEnd() {\n var end = slideCount - (hasFocus() || isLoop && perMove ? 1 : perPage);\n\n while (omitEnd && end-- > 0) {\n if (toPosition(slideCount - 1, true) !== toPosition(end, true)) {\n end++;\n break;\n }\n }\n\n return clamp(end, 0, slideCount - 1);\n }\n\n function toIndex(page) {\n return clamp(hasFocus() ? page : perPage * page, 0, endIndex);\n }\n\n function toPage(index) {\n return hasFocus() ? min(index, endIndex) : floor((index >= endIndex ? slideCount - 1 : index) / perPage);\n }\n\n function toDest(destination) {\n var closest = Move.toIndex(destination);\n return isSlide ? clamp(closest, 0, endIndex) : closest;\n }\n\n function setIndex(index) {\n if (index !== currIndex) {\n prevIndex = currIndex;\n currIndex = index;\n }\n }\n\n function getIndex(prev) {\n return prev ? prevIndex : currIndex;\n }\n\n function hasFocus() {\n return !isUndefined(options.focus) || options.isNavigation;\n }\n\n function isBusy() {\n return Splide2.state.is([MOVING, SCROLLING]) && !!options.waitForTransition;\n }\n\n return {\n mount: mount,\n go: go,\n scroll: scroll,\n getNext: getNext,\n getPrev: getPrev,\n getAdjacent: getAdjacent,\n getEnd: getEnd,\n setIndex: setIndex,\n getIndex: getIndex,\n toIndex: toIndex,\n toPage: toPage,\n toDest: toDest,\n hasFocus: hasFocus,\n isBusy: isBusy\n };\n}\n\nvar XML_NAME_SPACE = \"http://www.w3.org/2000/svg\";\nvar PATH = \"m15.5 0.932-4.3 4.38 14.5 14.6-14.5 14.5 4.3 4.4 14.6-14.6 4.4-4.3-4.4-4.4-14.6-14.6z\";\nvar SIZE = 40;\n\nfunction Arrows(Splide2, Components2, options) {\n var event = EventInterface(Splide2);\n var on = event.on,\n bind = event.bind,\n emit = event.emit;\n var classes = options.classes,\n i18n = options.i18n;\n var Elements = Components2.Elements,\n Controller = Components2.Controller;\n var placeholder = Elements.arrows,\n track = Elements.track;\n var wrapper = placeholder;\n var prev = Elements.prev;\n var next = Elements.next;\n var created;\n var wrapperClasses;\n var arrows = {};\n\n function mount() {\n init();\n on(EVENT_UPDATED, remount);\n }\n\n function remount() {\n destroy();\n mount();\n }\n\n function init() {\n var enabled = options.arrows;\n\n if (enabled && !(prev && next)) {\n createArrows();\n }\n\n if (prev && next) {\n assign(arrows, {\n prev: prev,\n next: next\n });\n display(wrapper, enabled ? \"\" : \"none\");\n addClass(wrapper, wrapperClasses = CLASS_ARROWS + \"--\" + options.direction);\n\n if (enabled) {\n listen();\n update();\n setAttribute([prev, next], ARIA_CONTROLS, track.id);\n emit(EVENT_ARROWS_MOUNTED, prev, next);\n }\n }\n }\n\n function destroy() {\n event.destroy();\n removeClass(wrapper, wrapperClasses);\n\n if (created) {\n remove(placeholder ? [prev, next] : wrapper);\n prev = next = null;\n } else {\n removeAttribute([prev, next], ALL_ATTRIBUTES);\n }\n }\n\n function listen() {\n on([EVENT_MOUNTED, EVENT_MOVED, EVENT_REFRESH, EVENT_SCROLLED, EVENT_END_INDEX_CHANGED], update);\n bind(next, \"click\", apply(go, \">\"));\n bind(prev, \"click\", apply(go, \"<\"));\n }\n\n function go(control) {\n Controller.go(control, true);\n }\n\n function createArrows() {\n wrapper = placeholder || create(\"div\", classes.arrows);\n prev = createArrow(true);\n next = createArrow(false);\n created = true;\n append(wrapper, [prev, next]);\n !placeholder && before(wrapper, track);\n }\n\n function createArrow(prev2) {\n var arrow = \"\";\n };\n\n _proto3.html = function html() {\n var _this$config = this.config,\n rootClass = _this$config.rootClass,\n listTag = _this$config.listTag,\n arrows = _this$config.arrows,\n beforeTrack = _this$config.beforeTrack,\n afterTrack = _this$config.afterTrack,\n slider = _this$config.slider,\n beforeSlider = _this$config.beforeSlider,\n afterSlider = _this$config.afterSlider;\n var html = \"\";\n html += \"
      \";\n html += \"\";\n\n if (slider) {\n html += beforeSlider || \"\";\n html += \"
      \";\n }\n\n html += beforeTrack || \"\";\n\n if (arrows) {\n html += this.renderArrows();\n }\n\n html += \"
      \";\n html += \"<\" + listTag + \" class=\\\"splide__list\\\">\";\n html += this.renderSlides();\n html += \"\";\n html += \"
      \";\n html += afterTrack || \"\";\n\n if (slider) {\n html += \"
      \";\n html += afterSlider || \"\";\n }\n\n html += \"
      \";\n return html;\n };\n\n return SplideRenderer;\n}();\n\nexports.CLASSES = CLASSES;\nexports.CLASS_ACTIVE = CLASS_ACTIVE;\nexports.CLASS_ARROW = CLASS_ARROW;\nexports.CLASS_ARROWS = CLASS_ARROWS;\nexports.CLASS_ARROW_NEXT = CLASS_ARROW_NEXT;\nexports.CLASS_ARROW_PREV = CLASS_ARROW_PREV;\nexports.CLASS_CLONE = CLASS_CLONE;\nexports.CLASS_CONTAINER = CLASS_CONTAINER;\nexports.CLASS_FOCUS_IN = CLASS_FOCUS_IN;\nexports.CLASS_INITIALIZED = CLASS_INITIALIZED;\nexports.CLASS_LIST = CLASS_LIST;\nexports.CLASS_LOADING = CLASS_LOADING;\nexports.CLASS_NEXT = CLASS_NEXT;\nexports.CLASS_OVERFLOW = CLASS_OVERFLOW;\nexports.CLASS_PAGINATION = CLASS_PAGINATION;\nexports.CLASS_PAGINATION_PAGE = CLASS_PAGINATION_PAGE;\nexports.CLASS_PREV = CLASS_PREV;\nexports.CLASS_PROGRESS = CLASS_PROGRESS;\nexports.CLASS_PROGRESS_BAR = CLASS_PROGRESS_BAR;\nexports.CLASS_ROOT = CLASS_ROOT;\nexports.CLASS_SLIDE = CLASS_SLIDE;\nexports.CLASS_SPINNER = CLASS_SPINNER;\nexports.CLASS_SR = CLASS_SR;\nexports.CLASS_TOGGLE = CLASS_TOGGLE;\nexports.CLASS_TOGGLE_PAUSE = CLASS_TOGGLE_PAUSE;\nexports.CLASS_TOGGLE_PLAY = CLASS_TOGGLE_PLAY;\nexports.CLASS_TRACK = CLASS_TRACK;\nexports.CLASS_VISIBLE = CLASS_VISIBLE;\nexports.DEFAULTS = DEFAULTS;\nexports.EVENT_ACTIVE = EVENT_ACTIVE;\nexports.EVENT_ARROWS_MOUNTED = EVENT_ARROWS_MOUNTED;\nexports.EVENT_ARROWS_UPDATED = EVENT_ARROWS_UPDATED;\nexports.EVENT_AUTOPLAY_PAUSE = EVENT_AUTOPLAY_PAUSE;\nexports.EVENT_AUTOPLAY_PLAY = EVENT_AUTOPLAY_PLAY;\nexports.EVENT_AUTOPLAY_PLAYING = EVENT_AUTOPLAY_PLAYING;\nexports.EVENT_CLICK = EVENT_CLICK;\nexports.EVENT_DESTROY = EVENT_DESTROY;\nexports.EVENT_DRAG = EVENT_DRAG;\nexports.EVENT_DRAGGED = EVENT_DRAGGED;\nexports.EVENT_DRAGGING = EVENT_DRAGGING;\nexports.EVENT_END_INDEX_CHANGED = EVENT_END_INDEX_CHANGED;\nexports.EVENT_HIDDEN = EVENT_HIDDEN;\nexports.EVENT_INACTIVE = EVENT_INACTIVE;\nexports.EVENT_LAZYLOAD_LOADED = EVENT_LAZYLOAD_LOADED;\nexports.EVENT_MOUNTED = EVENT_MOUNTED;\nexports.EVENT_MOVE = EVENT_MOVE;\nexports.EVENT_MOVED = EVENT_MOVED;\nexports.EVENT_NAVIGATION_MOUNTED = EVENT_NAVIGATION_MOUNTED;\nexports.EVENT_OVERFLOW = EVENT_OVERFLOW;\nexports.EVENT_PAGINATION_MOUNTED = EVENT_PAGINATION_MOUNTED;\nexports.EVENT_PAGINATION_UPDATED = EVENT_PAGINATION_UPDATED;\nexports.EVENT_READY = EVENT_READY;\nexports.EVENT_REFRESH = EVENT_REFRESH;\nexports.EVENT_RESIZE = EVENT_RESIZE;\nexports.EVENT_RESIZED = EVENT_RESIZED;\nexports.EVENT_SCROLL = EVENT_SCROLL;\nexports.EVENT_SCROLLED = EVENT_SCROLLED;\nexports.EVENT_SHIFTED = EVENT_SHIFTED;\nexports.EVENT_SLIDE_KEYDOWN = EVENT_SLIDE_KEYDOWN;\nexports.EVENT_UPDATED = EVENT_UPDATED;\nexports.EVENT_VISIBLE = EVENT_VISIBLE;\nexports.EventBinder = EventBinder;\nexports.EventInterface = EventInterface;\nexports.FADE = FADE;\nexports.LOOP = LOOP;\nexports.LTR = LTR;\nexports.RTL = RTL;\nexports.RequestInterval = RequestInterval;\nexports.SLIDE = SLIDE;\nexports.STATUS_CLASSES = STATUS_CLASSES;\nexports.Splide = Splide;\nexports.SplideRenderer = SplideRenderer;\nexports.State = State;\nexports.TTB = TTB;\nexports.Throttle = Throttle;\nexports[\"default\"] = Splide;\n","/*! PhotoSwipe Default UI - 4.1.3 - 2019-01-08\n* http://photoswipe.com\n* Copyright (c) 2019 Dmitry Semenov; */\n/**\n*\n* UI on top of main sliding area (caption, arrows, close button, etc.).\n* Built just using public methods/properties of PhotoSwipe.\n* \n*/\n(function (root, factory) { \n\tif (typeof define === 'function' && define.amd) {\n\t\tdefine(factory);\n\t} else if (typeof exports === 'object') {\n\t\tmodule.exports = factory();\n\t} else {\n\t\troot.PhotoSwipeUI_Default = factory();\n\t}\n})(this, function () {\n\n\t'use strict';\n\n\n\nvar PhotoSwipeUI_Default =\n function(pswp, framework) {\n\n\tvar ui = this;\n\tvar _overlayUIUpdated = false,\n\t\t_controlsVisible = true,\n\t\t_fullscrenAPI,\n\t\t_controls,\n\t\t_captionContainer,\n\t\t_fakeCaptionContainer,\n\t\t_indexIndicator,\n\t\t_shareButton,\n\t\t_shareModal,\n\t\t_shareModalHidden = true,\n\t\t_initalCloseOnScrollValue,\n\t\t_isIdle,\n\t\t_listen,\n\n\t\t_loadingIndicator,\n\t\t_loadingIndicatorHidden,\n\t\t_loadingIndicatorTimeout,\n\n\t\t_galleryHasOneSlide,\n\n\t\t_options,\n\t\t_defaultUIOptions = {\n\t\t\tbarsSize: {top:44, bottom:'auto'},\n\t\t\tcloseElClasses: ['item', 'caption', 'zoom-wrap', 'ui', 'top-bar'], \n\t\t\ttimeToIdle: 4000, \n\t\t\ttimeToIdleOutside: 1000,\n\t\t\tloadingIndicatorDelay: 1000, // 2s\n\t\t\t\n\t\t\taddCaptionHTMLFn: function(item, captionEl /*, isFake */) {\n\t\t\t\tif(!item.title) {\n\t\t\t\t\tcaptionEl.children[0].innerHTML = '';\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tcaptionEl.children[0].innerHTML = item.title;\n\t\t\t\treturn true;\n\t\t\t},\n\n\t\t\tcloseEl:true,\n\t\t\tcaptionEl: true,\n\t\t\tfullscreenEl: true,\n\t\t\tzoomEl: true,\n\t\t\tshareEl: true,\n\t\t\tcounterEl: true,\n\t\t\tarrowEl: true,\n\t\t\tpreloaderEl: true,\n\n\t\t\ttapToClose: false,\n\t\t\ttapToToggleControls: true,\n\n\t\t\tclickToCloseNonZoomable: true,\n\n\t\t\tshareButtons: [\n\t\t\t\t{id:'facebook', label:'Share on Facebook', url:'https://www.facebook.com/sharer/sharer.php?u={{url}}'},\n\t\t\t\t{id:'twitter', label:'Tweet', url:'https://twitter.com/intent/tweet?text={{text}}&url={{url}}'},\n\t\t\t\t{id:'pinterest', label:'Pin it', url:'http://www.pinterest.com/pin/create/button/'+\n\t\t\t\t\t\t\t\t\t\t\t\t\t'?url={{url}}&media={{image_url}}&description={{text}}'},\n\t\t\t\t{id:'download', label:'Download image', url:'{{raw_image_url}}', download:true}\n\t\t\t],\n\t\t\tgetImageURLForShare: function( /* shareButtonData */ ) {\n\t\t\t\treturn pswp.currItem.src || '';\n\t\t\t},\n\t\t\tgetPageURLForShare: function( /* shareButtonData */ ) {\n\t\t\t\treturn window.location.href;\n\t\t\t},\n\t\t\tgetTextForShare: function( /* shareButtonData */ ) {\n\t\t\t\treturn pswp.currItem.title || '';\n\t\t\t},\n\t\t\t\t\n\t\t\tindexIndicatorSep: ' / ',\n\t\t\tfitControlsWidth: 1200\n\n\t\t},\n\t\t_blockControlsTap,\n\t\t_blockControlsTapTimeout;\n\n\n\n\tvar _onControlsTap = function(e) {\n\t\t\tif(_blockControlsTap) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\n\t\t\te = e || window.event;\n\n\t\t\tif(_options.timeToIdle && _options.mouseUsed && !_isIdle) {\n\t\t\t\t// reset idle timer\n\t\t\t\t_onIdleMouseMove();\n\t\t\t}\n\n\n\t\t\tvar target = e.target || e.srcElement,\n\t\t\t\tuiElement,\n\t\t\t\tclickedClass = target.getAttribute('class') || '',\n\t\t\t\tfound;\n\n\t\t\tfor(var i = 0; i < _uiElements.length; i++) {\n\t\t\t\tuiElement = _uiElements[i];\n\t\t\t\tif(uiElement.onTap && clickedClass.indexOf('pswp__' + uiElement.name ) > -1 ) {\n\t\t\t\t\tuiElement.onTap();\n\t\t\t\t\tfound = true;\n\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif(found) {\n\t\t\t\tif(e.stopPropagation) {\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t}\n\t\t\t\t_blockControlsTap = true;\n\n\t\t\t\t// Some versions of Android don't prevent ghost click event \n\t\t\t\t// when preventDefault() was called on touchstart and/or touchend.\n\t\t\t\t// \n\t\t\t\t// This happens on v4.3, 4.2, 4.1, \n\t\t\t\t// older versions strangely work correctly, \n\t\t\t\t// but just in case we add delay on all of them)\t\n\t\t\t\tvar tapDelay = framework.features.isOldAndroid ? 600 : 30;\n\t\t\t\t_blockControlsTapTimeout = setTimeout(function() {\n\t\t\t\t\t_blockControlsTap = false;\n\t\t\t\t}, tapDelay);\n\t\t\t}\n\n\t\t},\n\t\t_fitControlsInViewport = function() {\n\t\t\treturn !pswp.likelyTouchDevice || _options.mouseUsed || screen.width > _options.fitControlsWidth;\n\t\t},\n\t\t_togglePswpClass = function(el, cName, add) {\n\t\t\tframework[ (add ? 'add' : 'remove') + 'Class' ](el, 'pswp__' + cName);\n\t\t},\n\n\t\t// add class when there is just one item in the gallery\n\t\t// (by default it hides left/right arrows and 1ofX counter)\n\t\t_countNumItems = function() {\n\t\t\tvar hasOneSlide = (_options.getNumItemsFn() === 1);\n\n\t\t\tif(hasOneSlide !== _galleryHasOneSlide) {\n\t\t\t\t_togglePswpClass(_controls, 'ui--one-slide', hasOneSlide);\n\t\t\t\t_galleryHasOneSlide = hasOneSlide;\n\t\t\t}\n\t\t},\n\t\t_toggleShareModalClass = function() {\n\t\t\t_togglePswpClass(_shareModal, 'share-modal--hidden', _shareModalHidden);\n\t\t},\n\t\t_toggleShareModal = function() {\n\n\t\t\t_shareModalHidden = !_shareModalHidden;\n\t\t\t\n\t\t\t\n\t\t\tif(!_shareModalHidden) {\n\t\t\t\t_toggleShareModalClass();\n\t\t\t\tsetTimeout(function() {\n\t\t\t\t\tif(!_shareModalHidden) {\n\t\t\t\t\t\tframework.addClass(_shareModal, 'pswp__share-modal--fade-in');\n\t\t\t\t\t}\n\t\t\t\t}, 30);\n\t\t\t} else {\n\t\t\t\tframework.removeClass(_shareModal, 'pswp__share-modal--fade-in');\n\t\t\t\tsetTimeout(function() {\n\t\t\t\t\tif(_shareModalHidden) {\n\t\t\t\t\t\t_toggleShareModalClass();\n\t\t\t\t\t}\n\t\t\t\t}, 300);\n\t\t\t}\n\t\t\t\n\t\t\tif(!_shareModalHidden) {\n\t\t\t\t_updateShareURLs();\n\t\t\t}\n\t\t\treturn false;\n\t\t},\n\n\t\t_openWindowPopup = function(e) {\n\t\t\te = e || window.event;\n\t\t\tvar target = e.target || e.srcElement;\n\n\t\t\tpswp.shout('shareLinkClick', e, target);\n\n\t\t\tif(!target.href) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tif( target.hasAttribute('download') ) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\twindow.open(target.href, 'pswp_share', 'scrollbars=yes,resizable=yes,toolbar=no,'+\n\t\t\t\t\t\t\t\t\t\t'location=yes,width=550,height=420,top=100,left=' + \n\t\t\t\t\t\t\t\t\t\t(window.screen ? Math.round(screen.width / 2 - 275) : 100) );\n\n\t\t\tif(!_shareModalHidden) {\n\t\t\t\t_toggleShareModal();\n\t\t\t}\n\t\t\t\n\t\t\treturn false;\n\t\t},\n\t\t_updateShareURLs = function() {\n\t\t\tvar shareButtonOut = '',\n\t\t\t\tshareButtonData,\n\t\t\t\tshareURL,\n\t\t\t\timage_url,\n\t\t\t\tpage_url,\n\t\t\t\tshare_text;\n\n\t\t\tfor(var i = 0; i < _options.shareButtons.length; i++) {\n\t\t\t\tshareButtonData = _options.shareButtons[i];\n\n\t\t\t\timage_url = _options.getImageURLForShare(shareButtonData);\n\t\t\t\tpage_url = _options.getPageURLForShare(shareButtonData);\n\t\t\t\tshare_text = _options.getTextForShare(shareButtonData);\n\n\t\t\t\tshareURL = shareButtonData.url.replace('{{url}}', encodeURIComponent(page_url) )\n\t\t\t\t\t\t\t\t\t.replace('{{image_url}}', encodeURIComponent(image_url) )\n\t\t\t\t\t\t\t\t\t.replace('{{raw_image_url}}', image_url )\n\t\t\t\t\t\t\t\t\t.replace('{{text}}', encodeURIComponent(share_text) );\n\n\t\t\t\tshareButtonOut += '' + \n\t\t\t\t\t\t\t\t\tshareButtonData.label + '';\n\n\t\t\t\tif(_options.parseShareButtonOut) {\n\t\t\t\t\tshareButtonOut = _options.parseShareButtonOut(shareButtonData, shareButtonOut);\n\t\t\t\t}\n\t\t\t}\n\t\t\t_shareModal.children[0].innerHTML = shareButtonOut;\n\t\t\t_shareModal.children[0].onclick = _openWindowPopup;\n\n\t\t},\n\t\t_hasCloseClass = function(target) {\n\t\t\tfor(var i = 0; i < _options.closeElClasses.length; i++) {\n\t\t\t\tif( framework.hasClass(target, 'pswp__' + _options.closeElClasses[i]) ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t_idleInterval,\n\t\t_idleTimer,\n\t\t_idleIncrement = 0,\n\t\t_onIdleMouseMove = function() {\n\t\t\tclearTimeout(_idleTimer);\n\t\t\t_idleIncrement = 0;\n\t\t\tif(_isIdle) {\n\t\t\t\tui.setIdle(false);\n\t\t\t}\n\t\t},\n\t\t_onMouseLeaveWindow = function(e) {\n\t\t\te = e ? e : window.event;\n\t\t\tvar from = e.relatedTarget || e.toElement;\n\t\t\tif (!from || from.nodeName === 'HTML') {\n\t\t\t\tclearTimeout(_idleTimer);\n\t\t\t\t_idleTimer = setTimeout(function() {\n\t\t\t\t\tui.setIdle(true);\n\t\t\t\t}, _options.timeToIdleOutside);\n\t\t\t}\n\t\t},\n\t\t_setupFullscreenAPI = function() {\n\t\t\tif(_options.fullscreenEl && !framework.features.isOldAndroid) {\n\t\t\t\tif(!_fullscrenAPI) {\n\t\t\t\t\t_fullscrenAPI = ui.getFullscreenAPI();\n\t\t\t\t}\n\t\t\t\tif(_fullscrenAPI) {\n\t\t\t\t\tframework.bind(document, _fullscrenAPI.eventK, ui.updateFullscreen);\n\t\t\t\t\tui.updateFullscreen();\n\t\t\t\t\tframework.addClass(pswp.template, 'pswp--supports-fs');\n\t\t\t\t} else {\n\t\t\t\t\tframework.removeClass(pswp.template, 'pswp--supports-fs');\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t_setupLoadingIndicator = function() {\n\t\t\t// Setup loading indicator\n\t\t\tif(_options.preloaderEl) {\n\t\t\t\n\t\t\t\t_toggleLoadingIndicator(true);\n\n\t\t\t\t_listen('beforeChange', function() {\n\n\t\t\t\t\tclearTimeout(_loadingIndicatorTimeout);\n\n\t\t\t\t\t// display loading indicator with delay\n\t\t\t\t\t_loadingIndicatorTimeout = setTimeout(function() {\n\n\t\t\t\t\t\tif(pswp.currItem && pswp.currItem.loading) {\n\n\t\t\t\t\t\t\tif( !pswp.allowProgressiveImg() || (pswp.currItem.img && !pswp.currItem.img.naturalWidth) ) {\n\t\t\t\t\t\t\t\t// show preloader if progressive loading is not enabled, \n\t\t\t\t\t\t\t\t// or image width is not defined yet (because of slow connection)\n\t\t\t\t\t\t\t\t_toggleLoadingIndicator(false); \n\t\t\t\t\t\t\t\t// items-controller.js function allowProgressiveImg\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t_toggleLoadingIndicator(true); // hide preloader\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}, _options.loadingIndicatorDelay);\n\t\t\t\t\t\n\t\t\t\t});\n\t\t\t\t_listen('imageLoadComplete', function(index, item) {\n\t\t\t\t\tif(pswp.currItem === item) {\n\t\t\t\t\t\t_toggleLoadingIndicator(true);\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t}\n\t\t},\n\t\t_toggleLoadingIndicator = function(hide) {\n\t\t\tif( _loadingIndicatorHidden !== hide ) {\n\t\t\t\t_togglePswpClass(_loadingIndicator, 'preloader--active', !hide);\n\t\t\t\t_loadingIndicatorHidden = hide;\n\t\t\t}\n\t\t},\n\t\t_applyNavBarGaps = function(item) {\n\t\t\tvar gap = item.vGap;\n\n\t\t\tif( _fitControlsInViewport() ) {\n\t\t\t\t\n\t\t\t\tvar bars = _options.barsSize; \n\t\t\t\tif(_options.captionEl && bars.bottom === 'auto') {\n\t\t\t\t\tif(!_fakeCaptionContainer) {\n\t\t\t\t\t\t_fakeCaptionContainer = framework.createEl('pswp__caption pswp__caption--fake');\n\t\t\t\t\t\t_fakeCaptionContainer.appendChild( framework.createEl('pswp__caption__center') );\n\t\t\t\t\t\t_controls.insertBefore(_fakeCaptionContainer, _captionContainer);\n\t\t\t\t\t\tframework.addClass(_controls, 'pswp__ui--fit');\n\t\t\t\t\t}\n\t\t\t\t\tif( _options.addCaptionHTMLFn(item, _fakeCaptionContainer, true) ) {\n\n\t\t\t\t\t\tvar captionSize = _fakeCaptionContainer.clientHeight;\n\t\t\t\t\t\tgap.bottom = parseInt(captionSize,10) || 44;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tgap.bottom = bars.top; // if no caption, set size of bottom gap to size of top\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tgap.bottom = bars.bottom === 'auto' ? 0 : bars.bottom;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t// height of top bar is static, no need to calculate it\n\t\t\t\tgap.top = bars.top;\n\t\t\t} else {\n\t\t\t\tgap.top = gap.bottom = 0;\n\t\t\t}\n\t\t},\n\t\t_setupIdle = function() {\n\t\t\t// Hide controls when mouse is used\n\t\t\tif(_options.timeToIdle) {\n\t\t\t\t_listen('mouseUsed', function() {\n\t\t\t\t\t\n\t\t\t\t\tframework.bind(document, 'mousemove', _onIdleMouseMove);\n\t\t\t\t\tframework.bind(document, 'mouseout', _onMouseLeaveWindow);\n\n\t\t\t\t\t_idleInterval = setInterval(function() {\n\t\t\t\t\t\t_idleIncrement++;\n\t\t\t\t\t\tif(_idleIncrement === 2) {\n\t\t\t\t\t\t\tui.setIdle(true);\n\t\t\t\t\t\t}\n\t\t\t\t\t}, _options.timeToIdle / 2);\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\t_setupHidingControlsDuringGestures = function() {\n\n\t\t\t// Hide controls on vertical drag\n\t\t\t_listen('onVerticalDrag', function(now) {\n\t\t\t\tif(_controlsVisible && now < 0.95) {\n\t\t\t\t\tui.hideControls();\n\t\t\t\t} else if(!_controlsVisible && now >= 0.95) {\n\t\t\t\t\tui.showControls();\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// Hide controls when pinching to close\n\t\t\tvar pinchControlsHidden;\n\t\t\t_listen('onPinchClose' , function(now) {\n\t\t\t\tif(_controlsVisible && now < 0.9) {\n\t\t\t\t\tui.hideControls();\n\t\t\t\t\tpinchControlsHidden = true;\n\t\t\t\t} else if(pinchControlsHidden && !_controlsVisible && now > 0.9) {\n\t\t\t\t\tui.showControls();\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t_listen('zoomGestureEnded', function() {\n\t\t\t\tpinchControlsHidden = false;\n\t\t\t\tif(pinchControlsHidden && !_controlsVisible) {\n\t\t\t\t\tui.showControls();\n\t\t\t\t}\n\t\t\t});\n\n\t\t};\n\n\n\n\tvar _uiElements = [\n\t\t{ \n\t\t\tname: 'caption', \n\t\t\toption: 'captionEl',\n\t\t\tonInit: function(el) { \n\t\t\t\t_captionContainer = el; \n\t\t\t} \n\t\t},\n\t\t{ \n\t\t\tname: 'share-modal', \n\t\t\toption: 'shareEl',\n\t\t\tonInit: function(el) { \n\t\t\t\t_shareModal = el;\n\t\t\t},\n\t\t\tonTap: function() {\n\t\t\t\t_toggleShareModal();\n\t\t\t} \n\t\t},\n\t\t{ \n\t\t\tname: 'button--share', \n\t\t\toption: 'shareEl',\n\t\t\tonInit: function(el) { \n\t\t\t\t_shareButton = el;\n\t\t\t},\n\t\t\tonTap: function() {\n\t\t\t\t_toggleShareModal();\n\t\t\t} \n\t\t},\n\t\t{ \n\t\t\tname: 'button--zoom', \n\t\t\toption: 'zoomEl',\n\t\t\tonTap: pswp.toggleDesktopZoom\n\t\t},\n\t\t{ \n\t\t\tname: 'counter', \n\t\t\toption: 'counterEl',\n\t\t\tonInit: function(el) { \n\t\t\t\t_indexIndicator = el;\n\t\t\t} \n\t\t},\n\t\t{ \n\t\t\tname: 'button--close', \n\t\t\toption: 'closeEl',\n\t\t\tonTap: pswp.close\n\t\t},\n\t\t{ \n\t\t\tname: 'button--arrow--left', \n\t\t\toption: 'arrowEl',\n\t\t\tonTap: pswp.prev\n\t\t},\n\t\t{ \n\t\t\tname: 'button--arrow--right', \n\t\t\toption: 'arrowEl',\n\t\t\tonTap: pswp.next\n\t\t},\n\t\t{ \n\t\t\tname: 'button--fs', \n\t\t\toption: 'fullscreenEl',\n\t\t\tonTap: function() { \n\t\t\t\tif(_fullscrenAPI.isFullscreen()) {\n\t\t\t\t\t_fullscrenAPI.exit();\n\t\t\t\t} else {\n\t\t\t\t\t_fullscrenAPI.enter();\n\t\t\t\t}\n\t\t\t} \n\t\t},\n\t\t{ \n\t\t\tname: 'preloader', \n\t\t\toption: 'preloaderEl',\n\t\t\tonInit: function(el) { \n\t\t\t\t_loadingIndicator = el;\n\t\t\t} \n\t\t}\n\n\t];\n\n\tvar _setupUIElements = function() {\n\t\tvar item,\n\t\t\tclassAttr,\n\t\t\tuiElement;\n\n\t\tvar loopThroughChildElements = function(sChildren) {\n\t\t\tif(!sChildren) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar l = sChildren.length;\n\t\t\tfor(var i = 0; i < l; i++) {\n\t\t\t\titem = sChildren[i];\n\t\t\t\tclassAttr = item.className;\n\n\t\t\t\tfor(var a = 0; a < _uiElements.length; a++) {\n\t\t\t\t\tuiElement = _uiElements[a];\n\n\t\t\t\t\tif(classAttr.indexOf('pswp__' + uiElement.name) > -1 ) {\n\n\t\t\t\t\t\tif( _options[uiElement.option] ) { // if element is not disabled from options\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tframework.removeClass(item, 'pswp__element--disabled');\n\t\t\t\t\t\t\tif(uiElement.onInit) {\n\t\t\t\t\t\t\t\tuiElement.onInit(item);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t//item.style.display = 'block';\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tframework.addClass(item, 'pswp__element--disabled');\n\t\t\t\t\t\t\t//item.style.display = 'none';\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\tloopThroughChildElements(_controls.children);\n\n\t\tvar topBar = framework.getChildByClass(_controls, 'pswp__top-bar');\n\t\tif(topBar) {\n\t\t\tloopThroughChildElements( topBar.children );\n\t\t}\n\t};\n\n\n\t\n\n\tui.init = function() {\n\n\t\t// extend options\n\t\tframework.extend(pswp.options, _defaultUIOptions, true);\n\n\t\t// create local link for fast access\n\t\t_options = pswp.options;\n\n\t\t// find pswp__ui element\n\t\t_controls = framework.getChildByClass(pswp.scrollWrap, 'pswp__ui');\n\n\t\t// create local link\n\t\t_listen = pswp.listen;\n\n\n\t\t_setupHidingControlsDuringGestures();\n\n\t\t// update controls when slides change\n\t\t_listen('beforeChange', ui.update);\n\n\t\t// toggle zoom on double-tap\n\t\t_listen('doubleTap', function(point) {\n\t\t\tvar initialZoomLevel = pswp.currItem.initialZoomLevel;\n\t\t\tif(pswp.getZoomLevel() !== initialZoomLevel) {\n\t\t\t\tpswp.zoomTo(initialZoomLevel, point, 333);\n\t\t\t} else {\n\t\t\t\tpswp.zoomTo(_options.getDoubleTapZoom(false, pswp.currItem), point, 333);\n\t\t\t}\n\t\t});\n\n\t\t// Allow text selection in caption\n\t\t_listen('preventDragEvent', function(e, isDown, preventObj) {\n\t\t\tvar t = e.target || e.srcElement;\n\t\t\tif(\n\t\t\t\tt && \n\t\t\t\tt.getAttribute('class') && e.type.indexOf('mouse') > -1 && \n\t\t\t\t( t.getAttribute('class').indexOf('__caption') > 0 || (/(SMALL|STRONG|EM)/i).test(t.tagName) ) \n\t\t\t) {\n\t\t\t\tpreventObj.prevent = false;\n\t\t\t}\n\t\t});\n\n\t\t// bind events for UI\n\t\t_listen('bindEvents', function() {\n\t\t\tframework.bind(_controls, 'pswpTap click', _onControlsTap);\n\t\t\tframework.bind(pswp.scrollWrap, 'pswpTap', ui.onGlobalTap);\n\n\t\t\tif(!pswp.likelyTouchDevice) {\n\t\t\t\tframework.bind(pswp.scrollWrap, 'mouseover', ui.onMouseOver);\n\t\t\t}\n\t\t});\n\n\t\t// unbind events for UI\n\t\t_listen('unbindEvents', function() {\n\t\t\tif(!_shareModalHidden) {\n\t\t\t\t_toggleShareModal();\n\t\t\t}\n\n\t\t\tif(_idleInterval) {\n\t\t\t\tclearInterval(_idleInterval);\n\t\t\t}\n\t\t\tframework.unbind(document, 'mouseout', _onMouseLeaveWindow);\n\t\t\tframework.unbind(document, 'mousemove', _onIdleMouseMove);\n\t\t\tframework.unbind(_controls, 'pswpTap click', _onControlsTap);\n\t\t\tframework.unbind(pswp.scrollWrap, 'pswpTap', ui.onGlobalTap);\n\t\t\tframework.unbind(pswp.scrollWrap, 'mouseover', ui.onMouseOver);\n\n\t\t\tif(_fullscrenAPI) {\n\t\t\t\tframework.unbind(document, _fullscrenAPI.eventK, ui.updateFullscreen);\n\t\t\t\tif(_fullscrenAPI.isFullscreen()) {\n\t\t\t\t\t_options.hideAnimationDuration = 0;\n\t\t\t\t\t_fullscrenAPI.exit();\n\t\t\t\t}\n\t\t\t\t_fullscrenAPI = null;\n\t\t\t}\n\t\t});\n\n\n\t\t// clean up things when gallery is destroyed\n\t\t_listen('destroy', function() {\n\t\t\tif(_options.captionEl) {\n\t\t\t\tif(_fakeCaptionContainer) {\n\t\t\t\t\t_controls.removeChild(_fakeCaptionContainer);\n\t\t\t\t}\n\t\t\t\tframework.removeClass(_captionContainer, 'pswp__caption--empty');\n\t\t\t}\n\n\t\t\tif(_shareModal) {\n\t\t\t\t_shareModal.children[0].onclick = null;\n\t\t\t}\n\t\t\tframework.removeClass(_controls, 'pswp__ui--over-close');\n\t\t\tframework.addClass( _controls, 'pswp__ui--hidden');\n\t\t\tui.setIdle(false);\n\t\t});\n\t\t\n\n\t\tif(!_options.showAnimationDuration) {\n\t\t\tframework.removeClass( _controls, 'pswp__ui--hidden');\n\t\t}\n\t\t_listen('initialZoomIn', function() {\n\t\t\tif(_options.showAnimationDuration) {\n\t\t\t\tframework.removeClass( _controls, 'pswp__ui--hidden');\n\t\t\t}\n\t\t});\n\t\t_listen('initialZoomOut', function() {\n\t\t\tframework.addClass( _controls, 'pswp__ui--hidden');\n\t\t});\n\n\t\t_listen('parseVerticalMargin', _applyNavBarGaps);\n\t\t\n\t\t_setupUIElements();\n\n\t\tif(_options.shareEl && _shareButton && _shareModal) {\n\t\t\t_shareModalHidden = true;\n\t\t}\n\n\t\t_countNumItems();\n\n\t\t_setupIdle();\n\n\t\t_setupFullscreenAPI();\n\n\t\t_setupLoadingIndicator();\n\t};\n\n\tui.setIdle = function(isIdle) {\n\t\t_isIdle = isIdle;\n\t\t_togglePswpClass(_controls, 'ui--idle', isIdle);\n\t};\n\n\tui.update = function() {\n\t\t// Don't update UI if it's hidden\n\t\tif(_controlsVisible && pswp.currItem) {\n\t\t\t\n\t\t\tui.updateIndexIndicator();\n\n\t\t\tif(_options.captionEl) {\n\t\t\t\t_options.addCaptionHTMLFn(pswp.currItem, _captionContainer);\n\n\t\t\t\t_togglePswpClass(_captionContainer, 'caption--empty', !pswp.currItem.title);\n\t\t\t}\n\n\t\t\t_overlayUIUpdated = true;\n\n\t\t} else {\n\t\t\t_overlayUIUpdated = false;\n\t\t}\n\n\t\tif(!_shareModalHidden) {\n\t\t\t_toggleShareModal();\n\t\t}\n\n\t\t_countNumItems();\n\t};\n\n\tui.updateFullscreen = function(e) {\n\n\t\tif(e) {\n\t\t\t// some browsers change window scroll position during the fullscreen\n\t\t\t// so PhotoSwipe updates it just in case\n\t\t\tsetTimeout(function() {\n\t\t\t\tpswp.setScrollOffset( 0, framework.getScrollY() );\n\t\t\t}, 50);\n\t\t}\n\t\t\n\t\t// toogle pswp--fs class on root element\n\t\tframework[ (_fullscrenAPI.isFullscreen() ? 'add' : 'remove') + 'Class' ](pswp.template, 'pswp--fs');\n\t};\n\n\tui.updateIndexIndicator = function() {\n\t\tif(_options.counterEl) {\n\t\t\t_indexIndicator.innerHTML = (pswp.getCurrentIndex()+1) + \n\t\t\t\t\t\t\t\t\t\t_options.indexIndicatorSep + \n\t\t\t\t\t\t\t\t\t\t_options.getNumItemsFn();\n\t\t}\n\t};\n\t\n\tui.onGlobalTap = function(e) {\n\t\te = e || window.event;\n\t\tvar target = e.target || e.srcElement;\n\n\t\tif(_blockControlsTap) {\n\t\t\treturn;\n\t\t}\n\n\t\tif(e.detail && e.detail.pointerType === 'mouse') {\n\n\t\t\t// close gallery if clicked outside of the image\n\t\t\tif(_hasCloseClass(target)) {\n\t\t\t\tpswp.close();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif(framework.hasClass(target, 'pswp__img')) {\n\t\t\t\tif(pswp.getZoomLevel() === 1 && pswp.getZoomLevel() <= pswp.currItem.fitRatio) {\n\t\t\t\t\tif(_options.clickToCloseNonZoomable) {\n\t\t\t\t\t\tpswp.close();\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tpswp.toggleDesktopZoom(e.detail.releasePoint);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t} else {\n\n\t\t\t// tap anywhere (except buttons) to toggle visibility of controls\n\t\t\tif(_options.tapToToggleControls) {\n\t\t\t\tif(_controlsVisible) {\n\t\t\t\t\tui.hideControls();\n\t\t\t\t} else {\n\t\t\t\t\tui.showControls();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// tap to close gallery\n\t\t\tif(_options.tapToClose && (framework.hasClass(target, 'pswp__img') || _hasCloseClass(target)) ) {\n\t\t\t\tpswp.close();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t\n\t\t}\n\t};\n\tui.onMouseOver = function(e) {\n\t\te = e || window.event;\n\t\tvar target = e.target || e.srcElement;\n\n\t\t// add class when mouse is over an element that should close the gallery\n\t\t_togglePswpClass(_controls, 'ui--over-close', _hasCloseClass(target));\n\t};\n\n\tui.hideControls = function() {\n\t\tframework.addClass(_controls,'pswp__ui--hidden');\n\t\t_controlsVisible = false;\n\t};\n\n\tui.showControls = function() {\n\t\t_controlsVisible = true;\n\t\tif(!_overlayUIUpdated) {\n\t\t\tui.update();\n\t\t}\n\t\tframework.removeClass(_controls,'pswp__ui--hidden');\n\t};\n\n\tui.supportsFullscreen = function() {\n\t\tvar d = document;\n\t\treturn !!(d.exitFullscreen || d.mozCancelFullScreen || d.webkitExitFullscreen || d.msExitFullscreen);\n\t};\n\n\tui.getFullscreenAPI = function() {\n\t\tvar dE = document.documentElement,\n\t\t\tapi,\n\t\t\ttF = 'fullscreenchange';\n\n\t\tif (dE.requestFullscreen) {\n\t\t\tapi = {\n\t\t\t\tenterK: 'requestFullscreen',\n\t\t\t\texitK: 'exitFullscreen',\n\t\t\t\telementK: 'fullscreenElement',\n\t\t\t\teventK: tF\n\t\t\t};\n\n\t\t} else if(dE.mozRequestFullScreen ) {\n\t\t\tapi = {\n\t\t\t\tenterK: 'mozRequestFullScreen',\n\t\t\t\texitK: 'mozCancelFullScreen',\n\t\t\t\telementK: 'mozFullScreenElement',\n\t\t\t\teventK: 'moz' + tF\n\t\t\t};\n\n\t\t\t\n\n\t\t} else if(dE.webkitRequestFullscreen) {\n\t\t\tapi = {\n\t\t\t\tenterK: 'webkitRequestFullscreen',\n\t\t\t\texitK: 'webkitExitFullscreen',\n\t\t\t\telementK: 'webkitFullscreenElement',\n\t\t\t\teventK: 'webkit' + tF\n\t\t\t};\n\n\t\t} else if(dE.msRequestFullscreen) {\n\t\t\tapi = {\n\t\t\t\tenterK: 'msRequestFullscreen',\n\t\t\t\texitK: 'msExitFullscreen',\n\t\t\t\telementK: 'msFullscreenElement',\n\t\t\t\teventK: 'MSFullscreenChange'\n\t\t\t};\n\t\t}\n\n\t\tif(api) {\n\t\t\tapi.enter = function() { \n\t\t\t\t// disable close-on-scroll in fullscreen\n\t\t\t\t_initalCloseOnScrollValue = _options.closeOnScroll; \n\t\t\t\t_options.closeOnScroll = false; \n\n\t\t\t\tif(this.enterK === 'webkitRequestFullscreen') {\n\t\t\t\t\tpswp.template[this.enterK]( Element.ALLOW_KEYBOARD_INPUT );\n\t\t\t\t} else {\n\t\t\t\t\treturn pswp.template[this.enterK](); \n\t\t\t\t}\n\t\t\t};\n\t\t\tapi.exit = function() { \n\t\t\t\t_options.closeOnScroll = _initalCloseOnScrollValue;\n\n\t\t\t\treturn document[this.exitK](); \n\n\t\t\t};\n\t\t\tapi.isFullscreen = function() { return document[this.elementK]; };\n\t\t}\n\n\t\treturn api;\n\t};\n\n\n\n};\nreturn PhotoSwipeUI_Default;\n\n\n});\n","/*! PhotoSwipe - v4.1.3 - 2019-01-08\n* http://photoswipe.com\n* Copyright (c) 2019 Dmitry Semenov; */\n(function (root, factory) { \n\tif (typeof define === 'function' && define.amd) {\n\t\tdefine(factory);\n\t} else if (typeof exports === 'object') {\n\t\tmodule.exports = factory();\n\t} else {\n\t\troot.PhotoSwipe = factory();\n\t}\n})(this, function () {\n\n\t'use strict';\n\tvar PhotoSwipe = function(template, UiClass, items, options){\n\n/*>>framework-bridge*/\n/**\n *\n * Set of generic functions used by gallery.\n * \n * You're free to modify anything here as long as functionality is kept.\n * \n */\nvar framework = {\n\tfeatures: null,\n\tbind: function(target, type, listener, unbind) {\n\t\tvar methodName = (unbind ? 'remove' : 'add') + 'EventListener';\n\t\ttype = type.split(' ');\n\t\tfor(var i = 0; i < type.length; i++) {\n\t\t\tif(type[i]) {\n\t\t\t\ttarget[methodName]( type[i], listener, false);\n\t\t\t}\n\t\t}\n\t},\n\tisArray: function(obj) {\n\t\treturn (obj instanceof Array);\n\t},\n\tcreateEl: function(classes, tag) {\n\t\tvar el = document.createElement(tag || 'div');\n\t\tif(classes) {\n\t\t\tel.className = classes;\n\t\t}\n\t\treturn el;\n\t},\n\tgetScrollY: function() {\n\t\tvar yOffset = window.pageYOffset;\n\t\treturn yOffset !== undefined ? yOffset : document.documentElement.scrollTop;\n\t},\n\tunbind: function(target, type, listener) {\n\t\tframework.bind(target,type,listener,true);\n\t},\n\tremoveClass: function(el, className) {\n\t\tvar reg = new RegExp('(\\\\s|^)' + className + '(\\\\s|$)');\n\t\tel.className = el.className.replace(reg, ' ').replace(/^\\s\\s*/, '').replace(/\\s\\s*$/, ''); \n\t},\n\taddClass: function(el, className) {\n\t\tif( !framework.hasClass(el,className) ) {\n\t\t\tel.className += (el.className ? ' ' : '') + className;\n\t\t}\n\t},\n\thasClass: function(el, className) {\n\t\treturn el.className && new RegExp('(^|\\\\s)' + className + '(\\\\s|$)').test(el.className);\n\t},\n\tgetChildByClass: function(parentEl, childClassName) {\n\t\tvar node = parentEl.firstChild;\n\t\twhile(node) {\n\t\t\tif( framework.hasClass(node, childClassName) ) {\n\t\t\t\treturn node;\n\t\t\t}\n\t\t\tnode = node.nextSibling;\n\t\t}\n\t},\n\tarraySearch: function(array, value, key) {\n\t\tvar i = array.length;\n\t\twhile(i--) {\n\t\t\tif(array[i][key] === value) {\n\t\t\t\treturn i;\n\t\t\t} \n\t\t}\n\t\treturn -1;\n\t},\n\textend: function(o1, o2, preventOverwrite) {\n\t\tfor (var prop in o2) {\n\t\t\tif (o2.hasOwnProperty(prop)) {\n\t\t\t\tif(preventOverwrite && o1.hasOwnProperty(prop)) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\to1[prop] = o2[prop];\n\t\t\t}\n\t\t}\n\t},\n\teasing: {\n\t\tsine: {\n\t\t\tout: function(k) {\n\t\t\t\treturn Math.sin(k * (Math.PI / 2));\n\t\t\t},\n\t\t\tinOut: function(k) {\n\t\t\t\treturn - (Math.cos(Math.PI * k) - 1) / 2;\n\t\t\t}\n\t\t},\n\t\tcubic: {\n\t\t\tout: function(k) {\n\t\t\t\treturn --k * k * k + 1;\n\t\t\t}\n\t\t}\n\t\t/*\n\t\t\telastic: {\n\t\t\t\tout: function ( k ) {\n\n\t\t\t\t\tvar s, a = 0.1, p = 0.4;\n\t\t\t\t\tif ( k === 0 ) return 0;\n\t\t\t\t\tif ( k === 1 ) return 1;\n\t\t\t\t\tif ( !a || a < 1 ) { a = 1; s = p / 4; }\n\t\t\t\t\telse s = p * Math.asin( 1 / a ) / ( 2 * Math.PI );\n\t\t\t\t\treturn ( a * Math.pow( 2, - 10 * k) * Math.sin( ( k - s ) * ( 2 * Math.PI ) / p ) + 1 );\n\n\t\t\t\t},\n\t\t\t},\n\t\t\tback: {\n\t\t\t\tout: function ( k ) {\n\t\t\t\t\tvar s = 1.70158;\n\t\t\t\t\treturn --k * k * ( ( s + 1 ) * k + s ) + 1;\n\t\t\t\t}\n\t\t\t}\n\t\t*/\n\t},\n\n\t/**\n\t * \n\t * @return {object}\n\t * \n\t * {\n\t * raf : request animation frame function\n\t * caf : cancel animation frame function\n\t * transfrom : transform property key (with vendor), or null if not supported\n\t * oldIE : IE8 or below\n\t * }\n\t * \n\t */\n\tdetectFeatures: function() {\n\t\tif(framework.features) {\n\t\t\treturn framework.features;\n\t\t}\n\t\tvar helperEl = framework.createEl(),\n\t\t\thelperStyle = helperEl.style,\n\t\t\tvendor = '',\n\t\t\tfeatures = {};\n\n\t\t// IE8 and below\n\t\tfeatures.oldIE = document.all && !document.addEventListener;\n\n\t\tfeatures.touch = 'ontouchstart' in window;\n\n\t\tif(window.requestAnimationFrame) {\n\t\t\tfeatures.raf = window.requestAnimationFrame;\n\t\t\tfeatures.caf = window.cancelAnimationFrame;\n\t\t}\n\n\t\tfeatures.pointerEvent = !!(window.PointerEvent) || navigator.msPointerEnabled;\n\n\t\t// fix false-positive detection of old Android in new IE\n\t\t// (IE11 ua string contains \"Android 4.0\")\n\t\t\n\t\tif(!features.pointerEvent) { \n\n\t\t\tvar ua = navigator.userAgent;\n\n\t\t\t// Detect if device is iPhone or iPod and if it's older than iOS 8\n\t\t\t// http://stackoverflow.com/a/14223920\n\t\t\t// \n\t\t\t// This detection is made because of buggy top/bottom toolbars\n\t\t\t// that don't trigger window.resize event.\n\t\t\t// For more info refer to _isFixedPosition variable in core.js\n\n\t\t\tif (/iP(hone|od)/.test(navigator.platform)) {\n\t\t\t\tvar v = (navigator.appVersion).match(/OS (\\d+)_(\\d+)_?(\\d+)?/);\n\t\t\t\tif(v && v.length > 0) {\n\t\t\t\t\tv = parseInt(v[1], 10);\n\t\t\t\t\tif(v >= 1 && v < 8 ) {\n\t\t\t\t\t\tfeatures.isOldIOSPhone = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Detect old Android (before KitKat)\n\t\t\t// due to bugs related to position:fixed\n\t\t\t// http://stackoverflow.com/questions/7184573/pick-up-the-android-version-in-the-browser-by-javascript\n\t\t\t\n\t\t\tvar match = ua.match(/Android\\s([0-9\\.]*)/);\n\t\t\tvar androidversion = match ? match[1] : 0;\n\t\t\tandroidversion = parseFloat(androidversion);\n\t\t\tif(androidversion >= 1 ) {\n\t\t\t\tif(androidversion < 4.4) {\n\t\t\t\t\tfeatures.isOldAndroid = true; // for fixed position bug & performance\n\t\t\t\t}\n\t\t\t\tfeatures.androidVersion = androidversion; // for touchend bug\n\t\t\t}\t\n\t\t\tfeatures.isMobileOpera = /opera mini|opera mobi/i.test(ua);\n\n\t\t\t// p.s. yes, yes, UA sniffing is bad, propose your solution for above bugs.\n\t\t}\n\t\t\n\t\tvar styleChecks = ['transform', 'perspective', 'animationName'],\n\t\t\tvendors = ['', 'webkit','Moz','ms','O'],\n\t\t\tstyleCheckItem,\n\t\t\tstyleName;\n\n\t\tfor(var i = 0; i < 4; i++) {\n\t\t\tvendor = vendors[i];\n\n\t\t\tfor(var a = 0; a < 3; a++) {\n\t\t\t\tstyleCheckItem = styleChecks[a];\n\n\t\t\t\t// uppercase first letter of property name, if vendor is present\n\t\t\t\tstyleName = vendor + (vendor ? \n\t\t\t\t\t\t\t\t\t\tstyleCheckItem.charAt(0).toUpperCase() + styleCheckItem.slice(1) : \n\t\t\t\t\t\t\t\t\t\tstyleCheckItem);\n\t\t\t\n\t\t\t\tif(!features[styleCheckItem] && styleName in helperStyle ) {\n\t\t\t\t\tfeatures[styleCheckItem] = styleName;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif(vendor && !features.raf) {\n\t\t\t\tvendor = vendor.toLowerCase();\n\t\t\t\tfeatures.raf = window[vendor+'RequestAnimationFrame'];\n\t\t\t\tif(features.raf) {\n\t\t\t\t\tfeatures.caf = window[vendor+'CancelAnimationFrame'] || \n\t\t\t\t\t\t\t\t\twindow[vendor+'CancelRequestAnimationFrame'];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\t\n\t\tif(!features.raf) {\n\t\t\tvar lastTime = 0;\n\t\t\tfeatures.raf = function(fn) {\n\t\t\t\tvar currTime = new Date().getTime();\n\t\t\t\tvar timeToCall = Math.max(0, 16 - (currTime - lastTime));\n\t\t\t\tvar id = window.setTimeout(function() { fn(currTime + timeToCall); }, timeToCall);\n\t\t\t\tlastTime = currTime + timeToCall;\n\t\t\t\treturn id;\n\t\t\t};\n\t\t\tfeatures.caf = function(id) { clearTimeout(id); };\n\t\t}\n\n\t\t// Detect SVG support\n\t\tfeatures.svg = !!document.createElementNS && \n\t\t\t\t\t\t!!document.createElementNS('http://www.w3.org/2000/svg', 'svg').createSVGRect;\n\n\t\tframework.features = features;\n\n\t\treturn features;\n\t}\n};\n\nframework.detectFeatures();\n\n// Override addEventListener for old versions of IE\nif(framework.features.oldIE) {\n\n\tframework.bind = function(target, type, listener, unbind) {\n\t\t\n\t\ttype = type.split(' ');\n\n\t\tvar methodName = (unbind ? 'detach' : 'attach') + 'Event',\n\t\t\tevName,\n\t\t\t_handleEv = function() {\n\t\t\t\tlistener.handleEvent.call(listener);\n\t\t\t};\n\n\t\tfor(var i = 0; i < type.length; i++) {\n\t\t\tevName = type[i];\n\t\t\tif(evName) {\n\n\t\t\t\tif(typeof listener === 'object' && listener.handleEvent) {\n\t\t\t\t\tif(!unbind) {\n\t\t\t\t\t\tlistener['oldIE' + evName] = _handleEv;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif(!listener['oldIE' + evName]) {\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\ttarget[methodName]( 'on' + evName, listener['oldIE' + evName]);\n\t\t\t\t} else {\n\t\t\t\t\ttarget[methodName]( 'on' + evName, listener);\n\t\t\t\t}\n\n\t\t\t}\n\t\t}\n\t};\n\t\n}\n\n/*>>framework-bridge*/\n\n/*>>core*/\n//function(template, UiClass, items, options)\n\nvar self = this;\n\n/**\n * Static vars, don't change unless you know what you're doing.\n */\nvar DOUBLE_TAP_RADIUS = 25, \n\tNUM_HOLDERS = 3;\n\n/**\n * Options\n */\nvar _options = {\n\tallowPanToNext:true,\n\tspacing: 0.12,\n\tbgOpacity: 1,\n\tmouseUsed: false,\n\tloop: true,\n\tpinchToClose: true,\n\tcloseOnScroll: true,\n\tcloseOnVerticalDrag: true,\n\tverticalDragRange: 0.75,\n\thideAnimationDuration: 333,\n\tshowAnimationDuration: 333,\n\tshowHideOpacity: false,\n\tfocus: true,\n\tescKey: true,\n\tarrowKeys: true,\n\tmainScrollEndFriction: 0.35,\n\tpanEndFriction: 0.35,\n\tisClickableElement: function(el) {\n return el.tagName === 'A';\n },\n getDoubleTapZoom: function(isMouseClick, item) {\n \tif(isMouseClick) {\n \t\treturn 1;\n \t} else {\n \t\treturn item.initialZoomLevel < 0.7 ? 1 : 1.33;\n \t}\n },\n maxSpreadZoom: 1.33,\n\tmodal: true,\n\n\t// not fully implemented yet\n\tscaleMode: 'fit' // TODO\n};\nframework.extend(_options, options);\n\n\n/**\n * Private helper variables & functions\n */\n\nvar _getEmptyPoint = function() { \n\t\treturn {x:0,y:0}; \n\t};\n\nvar _isOpen,\n\t_isDestroying,\n\t_closedByScroll,\n\t_currentItemIndex,\n\t_containerStyle,\n\t_containerShiftIndex,\n\t_currPanDist = _getEmptyPoint(),\n\t_startPanOffset = _getEmptyPoint(),\n\t_panOffset = _getEmptyPoint(),\n\t_upMoveEvents, // drag move, drag end & drag cancel events array\n\t_downEvents, // drag start events array\n\t_globalEventHandlers,\n\t_viewportSize = {},\n\t_currZoomLevel,\n\t_startZoomLevel,\n\t_translatePrefix,\n\t_translateSufix,\n\t_updateSizeInterval,\n\t_itemsNeedUpdate,\n\t_currPositionIndex = 0,\n\t_offset = {},\n\t_slideSize = _getEmptyPoint(), // size of slide area, including spacing\n\t_itemHolders,\n\t_prevItemIndex,\n\t_indexDiff = 0, // difference of indexes since last content update\n\t_dragStartEvent,\n\t_dragMoveEvent,\n\t_dragEndEvent,\n\t_dragCancelEvent,\n\t_transformKey,\n\t_pointerEventEnabled,\n\t_isFixedPosition = true,\n\t_likelyTouchDevice,\n\t_modules = [],\n\t_requestAF,\n\t_cancelAF,\n\t_initalClassName,\n\t_initalWindowScrollY,\n\t_oldIE,\n\t_currentWindowScrollY,\n\t_features,\n\t_windowVisibleSize = {},\n\t_renderMaxResolution = false,\n\t_orientationChangeTimeout,\n\n\n\t// Registers PhotoSWipe module (History, Controller ...)\n\t_registerModule = function(name, module) {\n\t\tframework.extend(self, module.publicMethods);\n\t\t_modules.push(name);\n\t},\n\n\t_getLoopedId = function(index) {\n\t\tvar numSlides = _getNumItems();\n\t\tif(index > numSlides - 1) {\n\t\t\treturn index - numSlides;\n\t\t} else if(index < 0) {\n\t\t\treturn numSlides + index;\n\t\t}\n\t\treturn index;\n\t},\n\t\n\t// Micro bind/trigger\n\t_listeners = {},\n\t_listen = function(name, fn) {\n\t\tif(!_listeners[name]) {\n\t\t\t_listeners[name] = [];\n\t\t}\n\t\treturn _listeners[name].push(fn);\n\t},\n\t_shout = function(name) {\n\t\tvar listeners = _listeners[name];\n\n\t\tif(listeners) {\n\t\t\tvar args = Array.prototype.slice.call(arguments);\n\t\t\targs.shift();\n\n\t\t\tfor(var i = 0; i < listeners.length; i++) {\n\t\t\t\tlisteners[i].apply(self, args);\n\t\t\t}\n\t\t}\n\t},\n\n\t_getCurrentTime = function() {\n\t\treturn new Date().getTime();\n\t},\n\t_applyBgOpacity = function(opacity) {\n\t\t_bgOpacity = opacity;\n\t\tself.bg.style.opacity = opacity * _options.bgOpacity;\n\t},\n\n\t_applyZoomTransform = function(styleObj,x,y,zoom,item) {\n\t\tif(!_renderMaxResolution || (item && item !== self.currItem) ) {\n\t\t\tzoom = zoom / (item ? item.fitRatio : self.currItem.fitRatio);\t\n\t\t}\n\t\t\t\n\t\tstyleObj[_transformKey] = _translatePrefix + x + 'px, ' + y + 'px' + _translateSufix + ' scale(' + zoom + ')';\n\t},\n\t_applyCurrentZoomPan = function( allowRenderResolution ) {\n\t\tif(_currZoomElementStyle) {\n\n\t\t\tif(allowRenderResolution) {\n\t\t\t\tif(_currZoomLevel > self.currItem.fitRatio) {\n\t\t\t\t\tif(!_renderMaxResolution) {\n\t\t\t\t\t\t_setImageSize(self.currItem, false, true);\n\t\t\t\t\t\t_renderMaxResolution = true;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tif(_renderMaxResolution) {\n\t\t\t\t\t\t_setImageSize(self.currItem);\n\t\t\t\t\t\t_renderMaxResolution = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\n\t\t\t_applyZoomTransform(_currZoomElementStyle, _panOffset.x, _panOffset.y, _currZoomLevel);\n\t\t}\n\t},\n\t_applyZoomPanToItem = function(item) {\n\t\tif(item.container) {\n\n\t\t\t_applyZoomTransform(item.container.style, \n\t\t\t\t\t\t\t\titem.initialPosition.x, \n\t\t\t\t\t\t\t\titem.initialPosition.y, \n\t\t\t\t\t\t\t\titem.initialZoomLevel,\n\t\t\t\t\t\t\t\titem);\n\t\t}\n\t},\n\t_setTranslateX = function(x, elStyle) {\n\t\telStyle[_transformKey] = _translatePrefix + x + 'px, 0px' + _translateSufix;\n\t},\n\t_moveMainScroll = function(x, dragging) {\n\n\t\tif(!_options.loop && dragging) {\n\t\t\tvar newSlideIndexOffset = _currentItemIndex + (_slideSize.x * _currPositionIndex - x) / _slideSize.x,\n\t\t\t\tdelta = Math.round(x - _mainScrollPos.x);\n\n\t\t\tif( (newSlideIndexOffset < 0 && delta > 0) || \n\t\t\t\t(newSlideIndexOffset >= _getNumItems() - 1 && delta < 0) ) {\n\t\t\t\tx = _mainScrollPos.x + delta * _options.mainScrollEndFriction;\n\t\t\t} \n\t\t}\n\t\t\n\t\t_mainScrollPos.x = x;\n\t\t_setTranslateX(x, _containerStyle);\n\t},\n\t_calculatePanOffset = function(axis, zoomLevel) {\n\t\tvar m = _midZoomPoint[axis] - _offset[axis];\n\t\treturn _startPanOffset[axis] + _currPanDist[axis] + m - m * ( zoomLevel / _startZoomLevel );\n\t},\n\t\n\t_equalizePoints = function(p1, p2) {\n\t\tp1.x = p2.x;\n\t\tp1.y = p2.y;\n\t\tif(p2.id) {\n\t\t\tp1.id = p2.id;\n\t\t}\n\t},\n\t_roundPoint = function(p) {\n\t\tp.x = Math.round(p.x);\n\t\tp.y = Math.round(p.y);\n\t},\n\n\t_mouseMoveTimeout = null,\n\t_onFirstMouseMove = function() {\n\t\t// Wait until mouse move event is fired at least twice during 100ms\n\t\t// We do this, because some mobile browsers trigger it on touchstart\n\t\tif(_mouseMoveTimeout ) { \n\t\t\tframework.unbind(document, 'mousemove', _onFirstMouseMove);\n\t\t\tframework.addClass(template, 'pswp--has_mouse');\n\t\t\t_options.mouseUsed = true;\n\t\t\t_shout('mouseUsed');\n\t\t}\n\t\t_mouseMoveTimeout = setTimeout(function() {\n\t\t\t_mouseMoveTimeout = null;\n\t\t}, 100);\n\t},\n\n\t_bindEvents = function() {\n\t\tframework.bind(document, 'keydown', self);\n\n\t\tif(_features.transform) {\n\t\t\t// don't bind click event in browsers that don't support transform (mostly IE8)\n\t\t\tframework.bind(self.scrollWrap, 'click', self);\n\t\t}\n\t\t\n\n\t\tif(!_options.mouseUsed) {\n\t\t\tframework.bind(document, 'mousemove', _onFirstMouseMove);\n\t\t}\n\n\t\tframework.bind(window, 'resize scroll orientationchange', self);\n\n\t\t_shout('bindEvents');\n\t},\n\n\t_unbindEvents = function() {\n\t\tframework.unbind(window, 'resize scroll orientationchange', self);\n\t\tframework.unbind(window, 'scroll', _globalEventHandlers.scroll);\n\t\tframework.unbind(document, 'keydown', self);\n\t\tframework.unbind(document, 'mousemove', _onFirstMouseMove);\n\n\t\tif(_features.transform) {\n\t\t\tframework.unbind(self.scrollWrap, 'click', self);\n\t\t}\n\n\t\tif(_isDragging) {\n\t\t\tframework.unbind(window, _upMoveEvents, self);\n\t\t}\n\n\t\tclearTimeout(_orientationChangeTimeout);\n\n\t\t_shout('unbindEvents');\n\t},\n\t\n\t_calculatePanBounds = function(zoomLevel, update) {\n\t\tvar bounds = _calculateItemSize( self.currItem, _viewportSize, zoomLevel );\n\t\tif(update) {\n\t\t\t_currPanBounds = bounds;\n\t\t}\n\t\treturn bounds;\n\t},\n\t\n\t_getMinZoomLevel = function(item) {\n\t\tif(!item) {\n\t\t\titem = self.currItem;\n\t\t}\n\t\treturn item.initialZoomLevel;\n\t},\n\t_getMaxZoomLevel = function(item) {\n\t\tif(!item) {\n\t\t\titem = self.currItem;\n\t\t}\n\t\treturn item.w > 0 ? _options.maxSpreadZoom : 1;\n\t},\n\n\t// Return true if offset is out of the bounds\n\t_modifyDestPanOffset = function(axis, destPanBounds, destPanOffset, destZoomLevel) {\n\t\tif(destZoomLevel === self.currItem.initialZoomLevel) {\n\t\t\tdestPanOffset[axis] = self.currItem.initialPosition[axis];\n\t\t\treturn true;\n\t\t} else {\n\t\t\tdestPanOffset[axis] = _calculatePanOffset(axis, destZoomLevel); \n\n\t\t\tif(destPanOffset[axis] > destPanBounds.min[axis]) {\n\t\t\t\tdestPanOffset[axis] = destPanBounds.min[axis];\n\t\t\t\treturn true;\n\t\t\t} else if(destPanOffset[axis] < destPanBounds.max[axis] ) {\n\t\t\t\tdestPanOffset[axis] = destPanBounds.max[axis];\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t},\n\n\t_setupTransforms = function() {\n\n\t\tif(_transformKey) {\n\t\t\t// setup 3d transforms\n\t\t\tvar allow3dTransform = _features.perspective && !_likelyTouchDevice;\n\t\t\t_translatePrefix = 'translate' + (allow3dTransform ? '3d(' : '(');\n\t\t\t_translateSufix = _features.perspective ? ', 0px)' : ')';\t\n\t\t\treturn;\n\t\t}\n\n\t\t// Override zoom/pan/move functions in case old browser is used (most likely IE)\n\t\t// (so they use left/top/width/height, instead of CSS transform)\n\t\n\t\t_transformKey = 'left';\n\t\tframework.addClass(template, 'pswp--ie');\n\n\t\t_setTranslateX = function(x, elStyle) {\n\t\t\telStyle.left = x + 'px';\n\t\t};\n\t\t_applyZoomPanToItem = function(item) {\n\n\t\t\tvar zoomRatio = item.fitRatio > 1 ? 1 : item.fitRatio,\n\t\t\t\ts = item.container.style,\n\t\t\t\tw = zoomRatio * item.w,\n\t\t\t\th = zoomRatio * item.h;\n\n\t\t\ts.width = w + 'px';\n\t\t\ts.height = h + 'px';\n\t\t\ts.left = item.initialPosition.x + 'px';\n\t\t\ts.top = item.initialPosition.y + 'px';\n\n\t\t};\n\t\t_applyCurrentZoomPan = function() {\n\t\t\tif(_currZoomElementStyle) {\n\n\t\t\t\tvar s = _currZoomElementStyle,\n\t\t\t\t\titem = self.currItem,\n\t\t\t\t\tzoomRatio = item.fitRatio > 1 ? 1 : item.fitRatio,\n\t\t\t\t\tw = zoomRatio * item.w,\n\t\t\t\t\th = zoomRatio * item.h;\n\n\t\t\t\ts.width = w + 'px';\n\t\t\t\ts.height = h + 'px';\n\n\n\t\t\t\ts.left = _panOffset.x + 'px';\n\t\t\t\ts.top = _panOffset.y + 'px';\n\t\t\t}\n\t\t\t\n\t\t};\n\t},\n\n\t_onKeyDown = function(e) {\n\t\tvar keydownAction = '';\n\t\tif(_options.escKey && e.keyCode === 27) { \n\t\t\tkeydownAction = 'close';\n\t\t} else if(_options.arrowKeys) {\n\t\t\tif(e.keyCode === 37) {\n\t\t\t\tkeydownAction = 'prev';\n\t\t\t} else if(e.keyCode === 39) { \n\t\t\t\tkeydownAction = 'next';\n\t\t\t}\n\t\t}\n\n\t\tif(keydownAction) {\n\t\t\t// don't do anything if special key pressed to prevent from overriding default browser actions\n\t\t\t// e.g. in Chrome on Mac cmd+arrow-left returns to previous page\n\t\t\tif( !e.ctrlKey && !e.altKey && !e.shiftKey && !e.metaKey ) {\n\t\t\t\tif(e.preventDefault) {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t} else {\n\t\t\t\t\te.returnValue = false;\n\t\t\t\t} \n\t\t\t\tself[keydownAction]();\n\t\t\t}\n\t\t}\n\t},\n\n\t_onGlobalClick = function(e) {\n\t\tif(!e) {\n\t\t\treturn;\n\t\t}\n\n\t\t// don't allow click event to pass through when triggering after drag or some other gesture\n\t\tif(_moved || _zoomStarted || _mainScrollAnimating || _verticalDragInitiated) {\n\t\t\te.preventDefault();\n\t\t\te.stopPropagation();\n\t\t}\n\t},\n\n\t_updatePageScrollOffset = function() {\n\t\tself.setScrollOffset(0, framework.getScrollY());\t\t\n\t};\n\t\n\n\n\t\n\n\n\n// Micro animation engine\nvar _animations = {},\n\t_numAnimations = 0,\n\t_stopAnimation = function(name) {\n\t\tif(_animations[name]) {\n\t\t\tif(_animations[name].raf) {\n\t\t\t\t_cancelAF( _animations[name].raf );\n\t\t\t}\n\t\t\t_numAnimations--;\n\t\t\tdelete _animations[name];\n\t\t}\n\t},\n\t_registerStartAnimation = function(name) {\n\t\tif(_animations[name]) {\n\t\t\t_stopAnimation(name);\n\t\t}\n\t\tif(!_animations[name]) {\n\t\t\t_numAnimations++;\n\t\t\t_animations[name] = {};\n\t\t}\n\t},\n\t_stopAllAnimations = function() {\n\t\tfor (var prop in _animations) {\n\n\t\t\tif( _animations.hasOwnProperty( prop ) ) {\n\t\t\t\t_stopAnimation(prop);\n\t\t\t} \n\t\t\t\n\t\t}\n\t},\n\t_animateProp = function(name, b, endProp, d, easingFn, onUpdate, onComplete) {\n\t\tvar startAnimTime = _getCurrentTime(), t;\n\t\t_registerStartAnimation(name);\n\n\t\tvar animloop = function(){\n\t\t\tif ( _animations[name] ) {\n\t\t\t\t\n\t\t\t\tt = _getCurrentTime() - startAnimTime; // time diff\n\t\t\t\t//b - beginning (start prop)\n\t\t\t\t//d - anim duration\n\n\t\t\t\tif ( t >= d ) {\n\t\t\t\t\t_stopAnimation(name);\n\t\t\t\t\tonUpdate(endProp);\n\t\t\t\t\tif(onComplete) {\n\t\t\t\t\t\tonComplete();\n\t\t\t\t\t}\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tonUpdate( (endProp - b) * easingFn(t/d) + b );\n\n\t\t\t\t_animations[name].raf = _requestAF(animloop);\n\t\t\t}\n\t\t};\n\t\tanimloop();\n\t};\n\t\n\n\nvar publicMethods = {\n\n\t// make a few local variables and functions public\n\tshout: _shout,\n\tlisten: _listen,\n\tviewportSize: _viewportSize,\n\toptions: _options,\n\n\tisMainScrollAnimating: function() {\n\t\treturn _mainScrollAnimating;\n\t},\n\tgetZoomLevel: function() {\n\t\treturn _currZoomLevel;\n\t},\n\tgetCurrentIndex: function() {\n\t\treturn _currentItemIndex;\n\t},\n\tisDragging: function() {\n\t\treturn _isDragging;\n\t},\t\n\tisZooming: function() {\n\t\treturn _isZooming;\n\t},\n\tsetScrollOffset: function(x,y) {\n\t\t_offset.x = x;\n\t\t_currentWindowScrollY = _offset.y = y;\n\t\t_shout('updateScrollOffset', _offset);\n\t},\n\tapplyZoomPan: function(zoomLevel,panX,panY,allowRenderResolution) {\n\t\t_panOffset.x = panX;\n\t\t_panOffset.y = panY;\n\t\t_currZoomLevel = zoomLevel;\n\t\t_applyCurrentZoomPan( allowRenderResolution );\n\t},\n\n\tinit: function() {\n\n\t\tif(_isOpen || _isDestroying) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar i;\n\n\t\tself.framework = framework; // basic functionality\n\t\tself.template = template; // root DOM element of PhotoSwipe\n\t\tself.bg = framework.getChildByClass(template, 'pswp__bg');\n\n\t\t_initalClassName = template.className;\n\t\t_isOpen = true;\n\t\t\t\t\n\t\t_features = framework.detectFeatures();\n\t\t_requestAF = _features.raf;\n\t\t_cancelAF = _features.caf;\n\t\t_transformKey = _features.transform;\n\t\t_oldIE = _features.oldIE;\n\t\t\n\t\tself.scrollWrap = framework.getChildByClass(template, 'pswp__scroll-wrap');\n\t\tself.container = framework.getChildByClass(self.scrollWrap, 'pswp__container');\n\n\t\t_containerStyle = self.container.style; // for fast access\n\n\t\t// Objects that hold slides (there are only 3 in DOM)\n\t\tself.itemHolders = _itemHolders = [\n\t\t\t{el:self.container.children[0] , wrap:0, index: -1},\n\t\t\t{el:self.container.children[1] , wrap:0, index: -1},\n\t\t\t{el:self.container.children[2] , wrap:0, index: -1}\n\t\t];\n\n\t\t// hide nearby item holders until initial zoom animation finishes (to avoid extra Paints)\n\t\t_itemHolders[0].el.style.display = _itemHolders[2].el.style.display = 'none';\n\n\t\t_setupTransforms();\n\n\t\t// Setup global events\n\t\t_globalEventHandlers = {\n\t\t\tresize: self.updateSize,\n\n\t\t\t// Fixes: iOS 10.3 resize event\n\t\t\t// does not update scrollWrap.clientWidth instantly after resize\n\t\t\t// https://github.com/dimsemenov/PhotoSwipe/issues/1315\n\t\t\torientationchange: function() {\n\t\t\t\tclearTimeout(_orientationChangeTimeout);\n\t\t\t\t_orientationChangeTimeout = setTimeout(function() {\n\t\t\t\t\tif(_viewportSize.x !== self.scrollWrap.clientWidth) {\n\t\t\t\t\t\tself.updateSize();\n\t\t\t\t\t}\n\t\t\t\t}, 500);\n\t\t\t},\n\t\t\tscroll: _updatePageScrollOffset,\n\t\t\tkeydown: _onKeyDown,\n\t\t\tclick: _onGlobalClick\n\t\t};\n\n\t\t// disable show/hide effects on old browsers that don't support CSS animations or transforms, \n\t\t// old IOS, Android and Opera mobile. Blackberry seems to work fine, even older models.\n\t\tvar oldPhone = _features.isOldIOSPhone || _features.isOldAndroid || _features.isMobileOpera;\n\t\tif(!_features.animationName || !_features.transform || oldPhone) {\n\t\t\t_options.showAnimationDuration = _options.hideAnimationDuration = 0;\n\t\t}\n\n\t\t// init modules\n\t\tfor(i = 0; i < _modules.length; i++) {\n\t\t\tself['init' + _modules[i]]();\n\t\t}\n\t\t\n\t\t// init\n\t\tif(UiClass) {\n\t\t\tvar ui = self.ui = new UiClass(self, framework);\n\t\t\tui.init();\n\t\t}\n\n\t\t_shout('firstUpdate');\n\t\t_currentItemIndex = _currentItemIndex || _options.index || 0;\n\t\t// validate index\n\t\tif( isNaN(_currentItemIndex) || _currentItemIndex < 0 || _currentItemIndex >= _getNumItems() ) {\n\t\t\t_currentItemIndex = 0;\n\t\t}\n\t\tself.currItem = _getItemAt( _currentItemIndex );\n\n\t\t\n\t\tif(_features.isOldIOSPhone || _features.isOldAndroid) {\n\t\t\t_isFixedPosition = false;\n\t\t}\n\t\t\n\t\ttemplate.setAttribute('aria-hidden', 'false');\n\t\tif(_options.modal) {\n\t\t\tif(!_isFixedPosition) {\n\t\t\t\ttemplate.style.position = 'absolute';\n\t\t\t\ttemplate.style.top = framework.getScrollY() + 'px';\n\t\t\t} else {\n\t\t\t\ttemplate.style.position = 'fixed';\n\t\t\t}\n\t\t}\n\n\t\tif(_currentWindowScrollY === undefined) {\n\t\t\t_shout('initialLayout');\n\t\t\t_currentWindowScrollY = _initalWindowScrollY = framework.getScrollY();\n\t\t}\n\t\t\n\t\t// add classes to root element of PhotoSwipe\n\t\tvar rootClasses = 'pswp--open ';\n\t\tif(_options.mainClass) {\n\t\t\trootClasses += _options.mainClass + ' ';\n\t\t}\n\t\tif(_options.showHideOpacity) {\n\t\t\trootClasses += 'pswp--animate_opacity ';\n\t\t}\n\t\trootClasses += _likelyTouchDevice ? 'pswp--touch' : 'pswp--notouch';\n\t\trootClasses += _features.animationName ? ' pswp--css_animation' : '';\n\t\trootClasses += _features.svg ? ' pswp--svg' : '';\n\t\tframework.addClass(template, rootClasses);\n\n\t\tself.updateSize();\n\n\t\t// initial update\n\t\t_containerShiftIndex = -1;\n\t\t_indexDiff = null;\n\t\tfor(i = 0; i < NUM_HOLDERS; i++) {\n\t\t\t_setTranslateX( (i+_containerShiftIndex) * _slideSize.x, _itemHolders[i].el.style);\n\t\t}\n\n\t\tif(!_oldIE) {\n\t\t\tframework.bind(self.scrollWrap, _downEvents, self); // no dragging for old IE\n\t\t}\t\n\n\t\t_listen('initialZoomInEnd', function() {\n\t\t\tself.setContent(_itemHolders[0], _currentItemIndex-1);\n\t\t\tself.setContent(_itemHolders[2], _currentItemIndex+1);\n\n\t\t\t_itemHolders[0].el.style.display = _itemHolders[2].el.style.display = 'block';\n\n\t\t\tif(_options.focus) {\n\t\t\t\t// focus causes layout, \n\t\t\t\t// which causes lag during the animation, \n\t\t\t\t// that's why we delay it untill the initial zoom transition ends\n\t\t\t\ttemplate.focus();\n\t\t\t}\n\t\t\t \n\n\t\t\t_bindEvents();\n\t\t});\n\n\t\t// set content for center slide (first time)\n\t\tself.setContent(_itemHolders[1], _currentItemIndex);\n\t\t\n\t\tself.updateCurrItem();\n\n\t\t_shout('afterInit');\n\n\t\tif(!_isFixedPosition) {\n\n\t\t\t// On all versions of iOS lower than 8.0, we check size of viewport every second.\n\t\t\t// \n\t\t\t// This is done to detect when Safari top & bottom bars appear, \n\t\t\t// as this action doesn't trigger any events (like resize). \n\t\t\t// \n\t\t\t// On iOS8 they fixed this.\n\t\t\t// \n\t\t\t// 10 Nov 2014: iOS 7 usage ~40%. iOS 8 usage 56%.\n\t\t\t\n\t\t\t_updateSizeInterval = setInterval(function() {\n\t\t\t\tif(!_numAnimations && !_isDragging && !_isZooming && (_currZoomLevel === self.currItem.initialZoomLevel) ) {\n\t\t\t\t\tself.updateSize();\n\t\t\t\t}\n\t\t\t}, 1000);\n\t\t}\n\n\t\tframework.addClass(template, 'pswp--visible');\n\t},\n\n\t// Close the gallery, then destroy it\n\tclose: function() {\n\t\tif(!_isOpen) {\n\t\t\treturn;\n\t\t}\n\n\t\t_isOpen = false;\n\t\t_isDestroying = true;\n\t\t_shout('close');\n\t\t_unbindEvents();\n\n\t\t_showOrHide(self.currItem, null, true, self.destroy);\n\t},\n\n\t// destroys the gallery (unbinds events, cleans up intervals and timeouts to avoid memory leaks)\n\tdestroy: function() {\n\t\t_shout('destroy');\n\n\t\tif(_showOrHideTimeout) {\n\t\t\tclearTimeout(_showOrHideTimeout);\n\t\t}\n\t\t\n\t\ttemplate.setAttribute('aria-hidden', 'true');\n\t\ttemplate.className = _initalClassName;\n\n\t\tif(_updateSizeInterval) {\n\t\t\tclearInterval(_updateSizeInterval);\n\t\t}\n\n\t\tframework.unbind(self.scrollWrap, _downEvents, self);\n\n\t\t// we unbind scroll event at the end, as closing animation may depend on it\n\t\tframework.unbind(window, 'scroll', self);\n\n\t\t_stopDragUpdateLoop();\n\n\t\t_stopAllAnimations();\n\n\t\t_listeners = null;\n\t},\n\n\t/**\n\t * Pan image to position\n\t * @param {Number} x \n\t * @param {Number} y \n\t * @param {Boolean} force Will ignore bounds if set to true.\n\t */\n\tpanTo: function(x,y,force) {\n\t\tif(!force) {\n\t\t\tif(x > _currPanBounds.min.x) {\n\t\t\t\tx = _currPanBounds.min.x;\n\t\t\t} else if(x < _currPanBounds.max.x) {\n\t\t\t\tx = _currPanBounds.max.x;\n\t\t\t}\n\n\t\t\tif(y > _currPanBounds.min.y) {\n\t\t\t\ty = _currPanBounds.min.y;\n\t\t\t} else if(y < _currPanBounds.max.y) {\n\t\t\t\ty = _currPanBounds.max.y;\n\t\t\t}\n\t\t}\n\t\t\n\t\t_panOffset.x = x;\n\t\t_panOffset.y = y;\n\t\t_applyCurrentZoomPan();\n\t},\n\t\n\thandleEvent: function (e) {\n\t\te = e || window.event;\n\t\tif(_globalEventHandlers[e.type]) {\n\t\t\t_globalEventHandlers[e.type](e);\n\t\t}\n\t},\n\n\n\tgoTo: function(index) {\n\n\t\tindex = _getLoopedId(index);\n\n\t\tvar diff = index - _currentItemIndex;\n\t\t_indexDiff = diff;\n\n\t\t_currentItemIndex = index;\n\t\tself.currItem = _getItemAt( _currentItemIndex );\n\t\t_currPositionIndex -= diff;\n\t\t\n\t\t_moveMainScroll(_slideSize.x * _currPositionIndex);\n\t\t\n\n\t\t_stopAllAnimations();\n\t\t_mainScrollAnimating = false;\n\n\t\tself.updateCurrItem();\n\t},\n\tnext: function() {\n\t\tself.goTo( _currentItemIndex + 1);\n\t},\n\tprev: function() {\n\t\tself.goTo( _currentItemIndex - 1);\n\t},\n\n\t// update current zoom/pan objects\n\tupdateCurrZoomItem: function(emulateSetContent) {\n\t\tif(emulateSetContent) {\n\t\t\t_shout('beforeChange', 0);\n\t\t}\n\n\t\t// itemHolder[1] is middle (current) item\n\t\tif(_itemHolders[1].el.children.length) {\n\t\t\tvar zoomElement = _itemHolders[1].el.children[0];\n\t\t\tif( framework.hasClass(zoomElement, 'pswp__zoom-wrap') ) {\n\t\t\t\t_currZoomElementStyle = zoomElement.style;\n\t\t\t} else {\n\t\t\t\t_currZoomElementStyle = null;\n\t\t\t}\n\t\t} else {\n\t\t\t_currZoomElementStyle = null;\n\t\t}\n\t\t\n\t\t_currPanBounds = self.currItem.bounds;\t\n\t\t_startZoomLevel = _currZoomLevel = self.currItem.initialZoomLevel;\n\n\t\t_panOffset.x = _currPanBounds.center.x;\n\t\t_panOffset.y = _currPanBounds.center.y;\n\n\t\tif(emulateSetContent) {\n\t\t\t_shout('afterChange');\n\t\t}\n\t},\n\n\n\tinvalidateCurrItems: function() {\n\t\t_itemsNeedUpdate = true;\n\t\tfor(var i = 0; i < NUM_HOLDERS; i++) {\n\t\t\tif( _itemHolders[i].item ) {\n\t\t\t\t_itemHolders[i].item.needsUpdate = true;\n\t\t\t}\n\t\t}\n\t},\n\n\tupdateCurrItem: function(beforeAnimation) {\n\n\t\tif(_indexDiff === 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar diffAbs = Math.abs(_indexDiff),\n\t\t\ttempHolder;\n\n\t\tif(beforeAnimation && diffAbs < 2) {\n\t\t\treturn;\n\t\t}\n\n\n\t\tself.currItem = _getItemAt( _currentItemIndex );\n\t\t_renderMaxResolution = false;\n\t\t\n\t\t_shout('beforeChange', _indexDiff);\n\n\t\tif(diffAbs >= NUM_HOLDERS) {\n\t\t\t_containerShiftIndex += _indexDiff + (_indexDiff > 0 ? -NUM_HOLDERS : NUM_HOLDERS);\n\t\t\tdiffAbs = NUM_HOLDERS;\n\t\t}\n\t\tfor(var i = 0; i < diffAbs; i++) {\n\t\t\tif(_indexDiff > 0) {\n\t\t\t\ttempHolder = _itemHolders.shift();\n\t\t\t\t_itemHolders[NUM_HOLDERS-1] = tempHolder; // move first to last\n\n\t\t\t\t_containerShiftIndex++;\n\t\t\t\t_setTranslateX( (_containerShiftIndex+2) * _slideSize.x, tempHolder.el.style);\n\t\t\t\tself.setContent(tempHolder, _currentItemIndex - diffAbs + i + 1 + 1);\n\t\t\t} else {\n\t\t\t\ttempHolder = _itemHolders.pop();\n\t\t\t\t_itemHolders.unshift( tempHolder ); // move last to first\n\n\t\t\t\t_containerShiftIndex--;\n\t\t\t\t_setTranslateX( _containerShiftIndex * _slideSize.x, tempHolder.el.style);\n\t\t\t\tself.setContent(tempHolder, _currentItemIndex + diffAbs - i - 1 - 1);\n\t\t\t}\n\t\t\t\n\t\t}\n\n\t\t// reset zoom/pan on previous item\n\t\tif(_currZoomElementStyle && Math.abs(_indexDiff) === 1) {\n\n\t\t\tvar prevItem = _getItemAt(_prevItemIndex);\n\t\t\tif(prevItem.initialZoomLevel !== _currZoomLevel) {\n\t\t\t\t_calculateItemSize(prevItem , _viewportSize );\n\t\t\t\t_setImageSize(prevItem);\n\t\t\t\t_applyZoomPanToItem( prevItem ); \t\t\t\t\n\t\t\t}\n\n\t\t}\n\n\t\t// reset diff after update\n\t\t_indexDiff = 0;\n\n\t\tself.updateCurrZoomItem();\n\n\t\t_prevItemIndex = _currentItemIndex;\n\n\t\t_shout('afterChange');\n\t\t\n\t},\n\n\n\n\tupdateSize: function(force) {\n\t\t\n\t\tif(!_isFixedPosition && _options.modal) {\n\t\t\tvar windowScrollY = framework.getScrollY();\n\t\t\tif(_currentWindowScrollY !== windowScrollY) {\n\t\t\t\ttemplate.style.top = windowScrollY + 'px';\n\t\t\t\t_currentWindowScrollY = windowScrollY;\n\t\t\t}\n\t\t\tif(!force && _windowVisibleSize.x === window.innerWidth && _windowVisibleSize.y === window.innerHeight) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t_windowVisibleSize.x = window.innerWidth;\n\t\t\t_windowVisibleSize.y = window.innerHeight;\n\n\t\t\t//template.style.width = _windowVisibleSize.x + 'px';\n\t\t\ttemplate.style.height = _windowVisibleSize.y + 'px';\n\t\t}\n\n\n\n\t\t_viewportSize.x = self.scrollWrap.clientWidth;\n\t\t_viewportSize.y = self.scrollWrap.clientHeight;\n\n\t\t_updatePageScrollOffset();\n\n\t\t_slideSize.x = _viewportSize.x + Math.round(_viewportSize.x * _options.spacing);\n\t\t_slideSize.y = _viewportSize.y;\n\n\t\t_moveMainScroll(_slideSize.x * _currPositionIndex);\n\n\t\t_shout('beforeResize'); // even may be used for example to switch image sources\n\n\n\t\t// don't re-calculate size on inital size update\n\t\tif(_containerShiftIndex !== undefined) {\n\n\t\t\tvar holder,\n\t\t\t\titem,\n\t\t\t\thIndex;\n\n\t\t\tfor(var i = 0; i < NUM_HOLDERS; i++) {\n\t\t\t\tholder = _itemHolders[i];\n\t\t\t\t_setTranslateX( (i+_containerShiftIndex) * _slideSize.x, holder.el.style);\n\n\t\t\t\thIndex = _currentItemIndex+i-1;\n\n\t\t\t\tif(_options.loop && _getNumItems() > 2) {\n\t\t\t\t\thIndex = _getLoopedId(hIndex);\n\t\t\t\t}\n\n\t\t\t\t// update zoom level on items and refresh source (if needsUpdate)\n\t\t\t\titem = _getItemAt( hIndex );\n\n\t\t\t\t// re-render gallery item if `needsUpdate`,\n\t\t\t\t// or doesn't have `bounds` (entirely new slide object)\n\t\t\t\tif( item && (_itemsNeedUpdate || item.needsUpdate || !item.bounds) ) {\n\n\t\t\t\t\tself.cleanSlide( item );\n\t\t\t\t\t\n\t\t\t\t\tself.setContent( holder, hIndex );\n\n\t\t\t\t\t// if \"center\" slide\n\t\t\t\t\tif(i === 1) {\n\t\t\t\t\t\tself.currItem = item;\n\t\t\t\t\t\tself.updateCurrZoomItem(true);\n\t\t\t\t\t}\n\n\t\t\t\t\titem.needsUpdate = false;\n\n\t\t\t\t} else if(holder.index === -1 && hIndex >= 0) {\n\t\t\t\t\t// add content first time\n\t\t\t\t\tself.setContent( holder, hIndex );\n\t\t\t\t}\n\t\t\t\tif(item && item.container) {\n\t\t\t\t\t_calculateItemSize(item, _viewportSize);\n\t\t\t\t\t_setImageSize(item);\n\t\t\t\t\t_applyZoomPanToItem( item );\n\t\t\t\t}\n\t\t\t\t\n\t\t\t}\n\t\t\t_itemsNeedUpdate = false;\n\t\t}\t\n\n\t\t_startZoomLevel = _currZoomLevel = self.currItem.initialZoomLevel;\n\t\t_currPanBounds = self.currItem.bounds;\n\n\t\tif(_currPanBounds) {\n\t\t\t_panOffset.x = _currPanBounds.center.x;\n\t\t\t_panOffset.y = _currPanBounds.center.y;\n\t\t\t_applyCurrentZoomPan( true );\n\t\t}\n\t\t\n\t\t_shout('resize');\n\t},\n\t\n\t// Zoom current item to\n\tzoomTo: function(destZoomLevel, centerPoint, speed, easingFn, updateFn) {\n\t\t/*\n\t\t\tif(destZoomLevel === 'fit') {\n\t\t\t\tdestZoomLevel = self.currItem.fitRatio;\n\t\t\t} else if(destZoomLevel === 'fill') {\n\t\t\t\tdestZoomLevel = self.currItem.fillRatio;\n\t\t\t}\n\t\t*/\n\n\t\tif(centerPoint) {\n\t\t\t_startZoomLevel = _currZoomLevel;\n\t\t\t_midZoomPoint.x = Math.abs(centerPoint.x) - _panOffset.x ;\n\t\t\t_midZoomPoint.y = Math.abs(centerPoint.y) - _panOffset.y ;\n\t\t\t_equalizePoints(_startPanOffset, _panOffset);\n\t\t}\n\n\t\tvar destPanBounds = _calculatePanBounds(destZoomLevel, false),\n\t\t\tdestPanOffset = {};\n\n\t\t_modifyDestPanOffset('x', destPanBounds, destPanOffset, destZoomLevel);\n\t\t_modifyDestPanOffset('y', destPanBounds, destPanOffset, destZoomLevel);\n\n\t\tvar initialZoomLevel = _currZoomLevel;\n\t\tvar initialPanOffset = {\n\t\t\tx: _panOffset.x,\n\t\t\ty: _panOffset.y\n\t\t};\n\n\t\t_roundPoint(destPanOffset);\n\n\t\tvar onUpdate = function(now) {\n\t\t\tif(now === 1) {\n\t\t\t\t_currZoomLevel = destZoomLevel;\n\t\t\t\t_panOffset.x = destPanOffset.x;\n\t\t\t\t_panOffset.y = destPanOffset.y;\n\t\t\t} else {\n\t\t\t\t_currZoomLevel = (destZoomLevel - initialZoomLevel) * now + initialZoomLevel;\n\t\t\t\t_panOffset.x = (destPanOffset.x - initialPanOffset.x) * now + initialPanOffset.x;\n\t\t\t\t_panOffset.y = (destPanOffset.y - initialPanOffset.y) * now + initialPanOffset.y;\n\t\t\t}\n\n\t\t\tif(updateFn) {\n\t\t\t\tupdateFn(now);\n\t\t\t}\n\n\t\t\t_applyCurrentZoomPan( now === 1 );\n\t\t};\n\n\t\tif(speed) {\n\t\t\t_animateProp('customZoomTo', 0, 1, speed, easingFn || framework.easing.sine.inOut, onUpdate);\n\t\t} else {\n\t\t\tonUpdate(1);\n\t\t}\n\t}\n\n\n};\n\n\n/*>>core*/\n\n/*>>gestures*/\n/**\n * Mouse/touch/pointer event handlers.\n * \n * separated from @core.js for readability\n */\n\nvar MIN_SWIPE_DISTANCE = 30,\n\tDIRECTION_CHECK_OFFSET = 10; // amount of pixels to drag to determine direction of swipe\n\nvar _gestureStartTime,\n\t_gestureCheckSpeedTime,\n\n\t// pool of objects that are used during dragging of zooming\n\tp = {}, // first point\n\tp2 = {}, // second point (for zoom gesture)\n\tdelta = {},\n\t_currPoint = {},\n\t_startPoint = {},\n\t_currPointers = [],\n\t_startMainScrollPos = {},\n\t_releaseAnimData,\n\t_posPoints = [], // array of points during dragging, used to determine type of gesture\n\t_tempPoint = {},\n\n\t_isZoomingIn,\n\t_verticalDragInitiated,\n\t_oldAndroidTouchEndTimeout,\n\t_currZoomedItemIndex = 0,\n\t_centerPoint = _getEmptyPoint(),\n\t_lastReleaseTime = 0,\n\t_isDragging, // at least one pointer is down\n\t_isMultitouch, // at least two _pointers are down\n\t_zoomStarted, // zoom level changed during zoom gesture\n\t_moved,\n\t_dragAnimFrame,\n\t_mainScrollShifted,\n\t_currentPoints, // array of current touch points\n\t_isZooming,\n\t_currPointsDistance,\n\t_startPointsDistance,\n\t_currPanBounds,\n\t_mainScrollPos = _getEmptyPoint(),\n\t_currZoomElementStyle,\n\t_mainScrollAnimating, // true, if animation after swipe gesture is running\n\t_midZoomPoint = _getEmptyPoint(),\n\t_currCenterPoint = _getEmptyPoint(),\n\t_direction,\n\t_isFirstMove,\n\t_opacityChanged,\n\t_bgOpacity,\n\t_wasOverInitialZoom,\n\n\t_isEqualPoints = function(p1, p2) {\n\t\treturn p1.x === p2.x && p1.y === p2.y;\n\t},\n\t_isNearbyPoints = function(touch0, touch1) {\n\t\treturn Math.abs(touch0.x - touch1.x) < DOUBLE_TAP_RADIUS && Math.abs(touch0.y - touch1.y) < DOUBLE_TAP_RADIUS;\n\t},\n\t_calculatePointsDistance = function(p1, p2) {\n\t\t_tempPoint.x = Math.abs( p1.x - p2.x );\n\t\t_tempPoint.y = Math.abs( p1.y - p2.y );\n\t\treturn Math.sqrt(_tempPoint.x * _tempPoint.x + _tempPoint.y * _tempPoint.y);\n\t},\n\t_stopDragUpdateLoop = function() {\n\t\tif(_dragAnimFrame) {\n\t\t\t_cancelAF(_dragAnimFrame);\n\t\t\t_dragAnimFrame = null;\n\t\t}\n\t},\n\t_dragUpdateLoop = function() {\n\t\tif(_isDragging) {\n\t\t\t_dragAnimFrame = _requestAF(_dragUpdateLoop);\n\t\t\t_renderMovement();\n\t\t}\n\t},\n\t_canPan = function() {\n\t\treturn !(_options.scaleMode === 'fit' && _currZoomLevel === self.currItem.initialZoomLevel);\n\t},\n\t\n\t// find the closest parent DOM element\n\t_closestElement = function(el, fn) {\n\t \tif(!el || el === document) {\n\t \t\treturn false;\n\t \t}\n\n\t \t// don't search elements above pswp__scroll-wrap\n\t \tif(el.getAttribute('class') && el.getAttribute('class').indexOf('pswp__scroll-wrap') > -1 ) {\n\t \t\treturn false;\n\t \t}\n\n\t \tif( fn(el) ) {\n\t \t\treturn el;\n\t \t}\n\n\t \treturn _closestElement(el.parentNode, fn);\n\t},\n\n\t_preventObj = {},\n\t_preventDefaultEventBehaviour = function(e, isDown) {\n\t _preventObj.prevent = !_closestElement(e.target, _options.isClickableElement);\n\n\t\t_shout('preventDragEvent', e, isDown, _preventObj);\n\t\treturn _preventObj.prevent;\n\n\t},\n\t_convertTouchToPoint = function(touch, p) {\n\t\tp.x = touch.pageX;\n\t\tp.y = touch.pageY;\n\t\tp.id = touch.identifier;\n\t\treturn p;\n\t},\n\t_findCenterOfPoints = function(p1, p2, pCenter) {\n\t\tpCenter.x = (p1.x + p2.x) * 0.5;\n\t\tpCenter.y = (p1.y + p2.y) * 0.5;\n\t},\n\t_pushPosPoint = function(time, x, y) {\n\t\tif(time - _gestureCheckSpeedTime > 50) {\n\t\t\tvar o = _posPoints.length > 2 ? _posPoints.shift() : {};\n\t\t\to.x = x;\n\t\t\to.y = y; \n\t\t\t_posPoints.push(o);\n\t\t\t_gestureCheckSpeedTime = time;\n\t\t}\n\t},\n\n\t_calculateVerticalDragOpacityRatio = function() {\n\t\tvar yOffset = _panOffset.y - self.currItem.initialPosition.y; // difference between initial and current position\n\t\treturn 1 - Math.abs( yOffset / (_viewportSize.y / 2) );\n\t},\n\n\t\n\t// points pool, reused during touch events\n\t_ePoint1 = {},\n\t_ePoint2 = {},\n\t_tempPointsArr = [],\n\t_tempCounter,\n\t_getTouchPoints = function(e) {\n\t\t// clean up previous points, without recreating array\n\t\twhile(_tempPointsArr.length > 0) {\n\t\t\t_tempPointsArr.pop();\n\t\t}\n\n\t\tif(!_pointerEventEnabled) {\n\t\t\tif(e.type.indexOf('touch') > -1) {\n\n\t\t\t\tif(e.touches && e.touches.length > 0) {\n\t\t\t\t\t_tempPointsArr[0] = _convertTouchToPoint(e.touches[0], _ePoint1);\n\t\t\t\t\tif(e.touches.length > 1) {\n\t\t\t\t\t\t_tempPointsArr[1] = _convertTouchToPoint(e.touches[1], _ePoint2);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t} else {\n\t\t\t\t_ePoint1.x = e.pageX;\n\t\t\t\t_ePoint1.y = e.pageY;\n\t\t\t\t_ePoint1.id = '';\n\t\t\t\t_tempPointsArr[0] = _ePoint1;//_ePoint1;\n\t\t\t}\n\t\t} else {\n\t\t\t_tempCounter = 0;\n\t\t\t// we can use forEach, as pointer events are supported only in modern browsers\n\t\t\t_currPointers.forEach(function(p) {\n\t\t\t\tif(_tempCounter === 0) {\n\t\t\t\t\t_tempPointsArr[0] = p;\n\t\t\t\t} else if(_tempCounter === 1) {\n\t\t\t\t\t_tempPointsArr[1] = p;\n\t\t\t\t}\n\t\t\t\t_tempCounter++;\n\n\t\t\t});\n\t\t}\n\t\treturn _tempPointsArr;\n\t},\n\n\t_panOrMoveMainScroll = function(axis, delta) {\n\n\t\tvar panFriction,\n\t\t\toverDiff = 0,\n\t\t\tnewOffset = _panOffset[axis] + delta[axis],\n\t\t\tstartOverDiff,\n\t\t\tdir = delta[axis] > 0,\n\t\t\tnewMainScrollPosition = _mainScrollPos.x + delta.x,\n\t\t\tmainScrollDiff = _mainScrollPos.x - _startMainScrollPos.x,\n\t\t\tnewPanPos,\n\t\t\tnewMainScrollPos;\n\n\t\t// calculate fdistance over the bounds and friction\n\t\tif(newOffset > _currPanBounds.min[axis] || newOffset < _currPanBounds.max[axis]) {\n\t\t\tpanFriction = _options.panEndFriction;\n\t\t\t// Linear increasing of friction, so at 1/4 of viewport it's at max value. \n\t\t\t// Looks not as nice as was expected. Left for history.\n\t\t\t// panFriction = (1 - (_panOffset[axis] + delta[axis] + panBounds.min[axis]) / (_viewportSize[axis] / 4) );\n\t\t} else {\n\t\t\tpanFriction = 1;\n\t\t}\n\t\t\n\t\tnewOffset = _panOffset[axis] + delta[axis] * panFriction;\n\n\t\t// move main scroll or start panning\n\t\tif(_options.allowPanToNext || _currZoomLevel === self.currItem.initialZoomLevel) {\n\n\n\t\t\tif(!_currZoomElementStyle) {\n\t\t\t\t\n\t\t\t\tnewMainScrollPos = newMainScrollPosition;\n\n\t\t\t} else if(_direction === 'h' && axis === 'x' && !_zoomStarted ) {\n\t\t\t\t\n\t\t\t\tif(dir) {\n\t\t\t\t\tif(newOffset > _currPanBounds.min[axis]) {\n\t\t\t\t\t\tpanFriction = _options.panEndFriction;\n\t\t\t\t\t\toverDiff = _currPanBounds.min[axis] - newOffset;\n\t\t\t\t\t\tstartOverDiff = _currPanBounds.min[axis] - _startPanOffset[axis];\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\t// drag right\n\t\t\t\t\tif( (startOverDiff <= 0 || mainScrollDiff < 0) && _getNumItems() > 1 ) {\n\t\t\t\t\t\tnewMainScrollPos = newMainScrollPosition;\n\t\t\t\t\t\tif(mainScrollDiff < 0 && newMainScrollPosition > _startMainScrollPos.x) {\n\t\t\t\t\t\t\tnewMainScrollPos = _startMainScrollPos.x;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif(_currPanBounds.min.x !== _currPanBounds.max.x) {\n\t\t\t\t\t\t\tnewPanPos = newOffset;\n\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} else {\n\n\t\t\t\t\tif(newOffset < _currPanBounds.max[axis] ) {\n\t\t\t\t\t\tpanFriction =_options.panEndFriction;\n\t\t\t\t\t\toverDiff = newOffset - _currPanBounds.max[axis];\n\t\t\t\t\t\tstartOverDiff = _startPanOffset[axis] - _currPanBounds.max[axis];\n\t\t\t\t\t}\n\n\t\t\t\t\tif( (startOverDiff <= 0 || mainScrollDiff > 0) && _getNumItems() > 1 ) {\n\t\t\t\t\t\tnewMainScrollPos = newMainScrollPosition;\n\n\t\t\t\t\t\tif(mainScrollDiff > 0 && newMainScrollPosition < _startMainScrollPos.x) {\n\t\t\t\t\t\t\tnewMainScrollPos = _startMainScrollPos.x;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif(_currPanBounds.min.x !== _currPanBounds.max.x) {\n\t\t\t\t\t\t\tnewPanPos = newOffset;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\n\t\t\t\t//\n\t\t\t}\n\n\t\t\tif(axis === 'x') {\n\n\t\t\t\tif(newMainScrollPos !== undefined) {\n\t\t\t\t\t_moveMainScroll(newMainScrollPos, true);\n\t\t\t\t\tif(newMainScrollPos === _startMainScrollPos.x) {\n\t\t\t\t\t\t_mainScrollShifted = false;\n\t\t\t\t\t} else {\n\t\t\t\t\t\t_mainScrollShifted = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif(_currPanBounds.min.x !== _currPanBounds.max.x) {\n\t\t\t\t\tif(newPanPos !== undefined) {\n\t\t\t\t\t\t_panOffset.x = newPanPos;\n\t\t\t\t\t} else if(!_mainScrollShifted) {\n\t\t\t\t\t\t_panOffset.x += delta.x * panFriction;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn newMainScrollPos !== undefined;\n\t\t\t}\n\n\t\t}\n\n\t\tif(!_mainScrollAnimating) {\n\t\t\t\n\t\t\tif(!_mainScrollShifted) {\n\t\t\t\tif(_currZoomLevel > self.currItem.fitRatio) {\n\t\t\t\t\t_panOffset[axis] += delta[axis] * panFriction;\n\t\t\t\t\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t\n\t\t}\n\t\t\n\t},\n\n\t// Pointerdown/touchstart/mousedown handler\n\t_onDragStart = function(e) {\n\n\t\t// Allow dragging only via left mouse button.\n\t\t// As this handler is not added in IE8 - we ignore e.which\n\t\t// \n\t\t// http://www.quirksmode.org/js/events_properties.html\n\t\t// https://developer.mozilla.org/en-US/docs/Web/API/event.button\n\t\tif(e.type === 'mousedown' && e.button > 0 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif(_initialZoomRunning) {\n\t\t\te.preventDefault();\n\t\t\treturn;\n\t\t}\n\n\t\tif(_oldAndroidTouchEndTimeout && e.type === 'mousedown') {\n\t\t\treturn;\n\t\t}\n\n\t\tif(_preventDefaultEventBehaviour(e, true)) {\n\t\t\te.preventDefault();\n\t\t}\n\n\n\n\t\t_shout('pointerDown');\n\n\t\tif(_pointerEventEnabled) {\n\t\t\tvar pointerIndex = framework.arraySearch(_currPointers, e.pointerId, 'id');\n\t\t\tif(pointerIndex < 0) {\n\t\t\t\tpointerIndex = _currPointers.length;\n\t\t\t}\n\t\t\t_currPointers[pointerIndex] = {x:e.pageX, y:e.pageY, id: e.pointerId};\n\t\t}\n\t\t\n\n\n\t\tvar startPointsList = _getTouchPoints(e),\n\t\t\tnumPoints = startPointsList.length;\n\n\t\t_currentPoints = null;\n\n\t\t_stopAllAnimations();\n\n\t\t// init drag\n\t\tif(!_isDragging || numPoints === 1) {\n\n\t\t\t\n\n\t\t\t_isDragging = _isFirstMove = true;\n\t\t\tframework.bind(window, _upMoveEvents, self);\n\n\t\t\t_isZoomingIn = \n\t\t\t\t_wasOverInitialZoom = \n\t\t\t\t_opacityChanged = \n\t\t\t\t_verticalDragInitiated = \n\t\t\t\t_mainScrollShifted = \n\t\t\t\t_moved = \n\t\t\t\t_isMultitouch = \n\t\t\t\t_zoomStarted = false;\n\n\t\t\t_direction = null;\n\n\t\t\t_shout('firstTouchStart', startPointsList);\n\n\t\t\t_equalizePoints(_startPanOffset, _panOffset);\n\n\t\t\t_currPanDist.x = _currPanDist.y = 0;\n\t\t\t_equalizePoints(_currPoint, startPointsList[0]);\n\t\t\t_equalizePoints(_startPoint, _currPoint);\n\n\t\t\t//_equalizePoints(_startMainScrollPos, _mainScrollPos);\n\t\t\t_startMainScrollPos.x = _slideSize.x * _currPositionIndex;\n\n\t\t\t_posPoints = [{\n\t\t\t\tx: _currPoint.x,\n\t\t\t\ty: _currPoint.y\n\t\t\t}];\n\n\t\t\t_gestureCheckSpeedTime = _gestureStartTime = _getCurrentTime();\n\n\t\t\t//_mainScrollAnimationEnd(true);\n\t\t\t_calculatePanBounds( _currZoomLevel, true );\n\t\t\t\n\t\t\t// Start rendering\n\t\t\t_stopDragUpdateLoop();\n\t\t\t_dragUpdateLoop();\n\t\t\t\n\t\t}\n\n\t\t// init zoom\n\t\tif(!_isZooming && numPoints > 1 && !_mainScrollAnimating && !_mainScrollShifted) {\n\t\t\t_startZoomLevel = _currZoomLevel;\n\t\t\t_zoomStarted = false; // true if zoom changed at least once\n\n\t\t\t_isZooming = _isMultitouch = true;\n\t\t\t_currPanDist.y = _currPanDist.x = 0;\n\n\t\t\t_equalizePoints(_startPanOffset, _panOffset);\n\n\t\t\t_equalizePoints(p, startPointsList[0]);\n\t\t\t_equalizePoints(p2, startPointsList[1]);\n\n\t\t\t_findCenterOfPoints(p, p2, _currCenterPoint);\n\n\t\t\t_midZoomPoint.x = Math.abs(_currCenterPoint.x) - _panOffset.x;\n\t\t\t_midZoomPoint.y = Math.abs(_currCenterPoint.y) - _panOffset.y;\n\t\t\t_currPointsDistance = _startPointsDistance = _calculatePointsDistance(p, p2);\n\t\t}\n\n\n\t},\n\n\t// Pointermove/touchmove/mousemove handler\n\t_onDragMove = function(e) {\n\n\t\te.preventDefault();\n\n\t\tif(_pointerEventEnabled) {\n\t\t\tvar pointerIndex = framework.arraySearch(_currPointers, e.pointerId, 'id');\n\t\t\tif(pointerIndex > -1) {\n\t\t\t\tvar p = _currPointers[pointerIndex];\n\t\t\t\tp.x = e.pageX;\n\t\t\t\tp.y = e.pageY; \n\t\t\t}\n\t\t}\n\n\t\tif(_isDragging) {\n\t\t\tvar touchesList = _getTouchPoints(e);\n\t\t\tif(!_direction && !_moved && !_isZooming) {\n\n\t\t\t\tif(_mainScrollPos.x !== _slideSize.x * _currPositionIndex) {\n\t\t\t\t\t// if main scroll position is shifted – direction is always horizontal\n\t\t\t\t\t_direction = 'h';\n\t\t\t\t} else {\n\t\t\t\t\tvar diff = Math.abs(touchesList[0].x - _currPoint.x) - Math.abs(touchesList[0].y - _currPoint.y);\n\t\t\t\t\t// check the direction of movement\n\t\t\t\t\tif(Math.abs(diff) >= DIRECTION_CHECK_OFFSET) {\n\t\t\t\t\t\t_direction = diff > 0 ? 'h' : 'v';\n\t\t\t\t\t\t_currentPoints = touchesList;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t} else {\n\t\t\t\t_currentPoints = touchesList;\n\t\t\t}\n\t\t}\t\n\t},\n\t// \n\t_renderMovement = function() {\n\n\t\tif(!_currentPoints) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar numPoints = _currentPoints.length;\n\n\t\tif(numPoints === 0) {\n\t\t\treturn;\n\t\t}\n\n\t\t_equalizePoints(p, _currentPoints[0]);\n\n\t\tdelta.x = p.x - _currPoint.x;\n\t\tdelta.y = p.y - _currPoint.y;\n\n\t\tif(_isZooming && numPoints > 1) {\n\t\t\t// Handle behaviour for more than 1 point\n\n\t\t\t_currPoint.x = p.x;\n\t\t\t_currPoint.y = p.y;\n\t\t\n\t\t\t// check if one of two points changed\n\t\t\tif( !delta.x && !delta.y && _isEqualPoints(_currentPoints[1], p2) ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t_equalizePoints(p2, _currentPoints[1]);\n\n\n\t\t\tif(!_zoomStarted) {\n\t\t\t\t_zoomStarted = true;\n\t\t\t\t_shout('zoomGestureStarted');\n\t\t\t}\n\t\t\t\n\t\t\t// Distance between two points\n\t\t\tvar pointsDistance = _calculatePointsDistance(p,p2);\n\n\t\t\tvar zoomLevel = _calculateZoomLevel(pointsDistance);\n\n\t\t\t// slightly over the of initial zoom level\n\t\t\tif(zoomLevel > self.currItem.initialZoomLevel + self.currItem.initialZoomLevel / 15) {\n\t\t\t\t_wasOverInitialZoom = true;\n\t\t\t}\n\n\t\t\t// Apply the friction if zoom level is out of the bounds\n\t\t\tvar zoomFriction = 1,\n\t\t\t\tminZoomLevel = _getMinZoomLevel(),\n\t\t\t\tmaxZoomLevel = _getMaxZoomLevel();\n\n\t\t\tif ( zoomLevel < minZoomLevel ) {\n\t\t\t\t\n\t\t\t\tif(_options.pinchToClose && !_wasOverInitialZoom && _startZoomLevel <= self.currItem.initialZoomLevel) {\n\t\t\t\t\t// fade out background if zooming out\n\t\t\t\t\tvar minusDiff = minZoomLevel - zoomLevel;\n\t\t\t\t\tvar percent = 1 - minusDiff / (minZoomLevel / 1.2);\n\n\t\t\t\t\t_applyBgOpacity(percent);\n\t\t\t\t\t_shout('onPinchClose', percent);\n\t\t\t\t\t_opacityChanged = true;\n\t\t\t\t} else {\n\t\t\t\t\tzoomFriction = (minZoomLevel - zoomLevel) / minZoomLevel;\n\t\t\t\t\tif(zoomFriction > 1) {\n\t\t\t\t\t\tzoomFriction = 1;\n\t\t\t\t\t}\n\t\t\t\t\tzoomLevel = minZoomLevel - zoomFriction * (minZoomLevel / 3);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t} else if ( zoomLevel > maxZoomLevel ) {\n\t\t\t\t// 1.5 - extra zoom level above the max. E.g. if max is x6, real max 6 + 1.5 = 7.5\n\t\t\t\tzoomFriction = (zoomLevel - maxZoomLevel) / ( minZoomLevel * 6 );\n\t\t\t\tif(zoomFriction > 1) {\n\t\t\t\t\tzoomFriction = 1;\n\t\t\t\t}\n\t\t\t\tzoomLevel = maxZoomLevel + zoomFriction * minZoomLevel;\n\t\t\t}\n\n\t\t\tif(zoomFriction < 0) {\n\t\t\t\tzoomFriction = 0;\n\t\t\t}\n\n\t\t\t// distance between touch points after friction is applied\n\t\t\t_currPointsDistance = pointsDistance;\n\n\t\t\t// _centerPoint - The point in the middle of two pointers\n\t\t\t_findCenterOfPoints(p, p2, _centerPoint);\n\t\t\n\t\t\t// paning with two pointers pressed\n\t\t\t_currPanDist.x += _centerPoint.x - _currCenterPoint.x;\n\t\t\t_currPanDist.y += _centerPoint.y - _currCenterPoint.y;\n\t\t\t_equalizePoints(_currCenterPoint, _centerPoint);\n\n\t\t\t_panOffset.x = _calculatePanOffset('x', zoomLevel);\n\t\t\t_panOffset.y = _calculatePanOffset('y', zoomLevel);\n\n\t\t\t_isZoomingIn = zoomLevel > _currZoomLevel;\n\t\t\t_currZoomLevel = zoomLevel;\n\t\t\t_applyCurrentZoomPan();\n\n\t\t} else {\n\n\t\t\t// handle behaviour for one point (dragging or panning)\n\n\t\t\tif(!_direction) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif(_isFirstMove) {\n\t\t\t\t_isFirstMove = false;\n\n\t\t\t\t// subtract drag distance that was used during the detection direction \n\n\t\t\t\tif( Math.abs(delta.x) >= DIRECTION_CHECK_OFFSET) {\n\t\t\t\t\tdelta.x -= _currentPoints[0].x - _startPoint.x;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif( Math.abs(delta.y) >= DIRECTION_CHECK_OFFSET) {\n\t\t\t\t\tdelta.y -= _currentPoints[0].y - _startPoint.y;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t_currPoint.x = p.x;\n\t\t\t_currPoint.y = p.y;\n\n\t\t\t// do nothing if pointers position hasn't changed\n\t\t\tif(delta.x === 0 && delta.y === 0) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif(_direction === 'v' && _options.closeOnVerticalDrag) {\n\t\t\t\tif(!_canPan()) {\n\t\t\t\t\t_currPanDist.y += delta.y;\n\t\t\t\t\t_panOffset.y += delta.y;\n\n\t\t\t\t\tvar opacityRatio = _calculateVerticalDragOpacityRatio();\n\n\t\t\t\t\t_verticalDragInitiated = true;\n\t\t\t\t\t_shout('onVerticalDrag', opacityRatio);\n\n\t\t\t\t\t_applyBgOpacity(opacityRatio);\n\t\t\t\t\t_applyCurrentZoomPan();\n\t\t\t\t\treturn ;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t_pushPosPoint(_getCurrentTime(), p.x, p.y);\n\n\t\t\t_moved = true;\n\t\t\t_currPanBounds = self.currItem.bounds;\n\t\t\t\n\t\t\tvar mainScrollChanged = _panOrMoveMainScroll('x', delta);\n\t\t\tif(!mainScrollChanged) {\n\t\t\t\t_panOrMoveMainScroll('y', delta);\n\n\t\t\t\t_roundPoint(_panOffset);\n\t\t\t\t_applyCurrentZoomPan();\n\t\t\t}\n\n\t\t}\n\n\t},\n\t\n\t// Pointerup/pointercancel/touchend/touchcancel/mouseup event handler\n\t_onDragRelease = function(e) {\n\n\t\tif(_features.isOldAndroid ) {\n\n\t\t\tif(_oldAndroidTouchEndTimeout && e.type === 'mouseup') {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// on Android (v4.1, 4.2, 4.3 & possibly older) \n\t\t\t// ghost mousedown/up event isn't preventable via e.preventDefault,\n\t\t\t// which causes fake mousedown event\n\t\t\t// so we block mousedown/up for 600ms\n\t\t\tif( e.type.indexOf('touch') > -1 ) {\n\t\t\t\tclearTimeout(_oldAndroidTouchEndTimeout);\n\t\t\t\t_oldAndroidTouchEndTimeout = setTimeout(function() {\n\t\t\t\t\t_oldAndroidTouchEndTimeout = 0;\n\t\t\t\t}, 600);\n\t\t\t}\n\t\t\t\n\t\t}\n\n\t\t_shout('pointerUp');\n\n\t\tif(_preventDefaultEventBehaviour(e, false)) {\n\t\t\te.preventDefault();\n\t\t}\n\n\t\tvar releasePoint;\n\n\t\tif(_pointerEventEnabled) {\n\t\t\tvar pointerIndex = framework.arraySearch(_currPointers, e.pointerId, 'id');\n\t\t\t\n\t\t\tif(pointerIndex > -1) {\n\t\t\t\treleasePoint = _currPointers.splice(pointerIndex, 1)[0];\n\n\t\t\t\tif(navigator.msPointerEnabled) {\n\t\t\t\t\tvar MSPOINTER_TYPES = {\n\t\t\t\t\t\t4: 'mouse', // event.MSPOINTER_TYPE_MOUSE\n\t\t\t\t\t\t2: 'touch', // event.MSPOINTER_TYPE_TOUCH \n\t\t\t\t\t\t3: 'pen' // event.MSPOINTER_TYPE_PEN\n\t\t\t\t\t};\n\t\t\t\t\treleasePoint.type = MSPOINTER_TYPES[e.pointerType];\n\n\t\t\t\t\tif(!releasePoint.type) {\n\t\t\t\t\t\treleasePoint.type = e.pointerType || 'mouse';\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\treleasePoint.type = e.pointerType || 'mouse';\n\t\t\t\t}\n\n\t\t\t}\n\t\t}\n\n\t\tvar touchList = _getTouchPoints(e),\n\t\t\tgestureType,\n\t\t\tnumPoints = touchList.length;\n\n\t\tif(e.type === 'mouseup') {\n\t\t\tnumPoints = 0;\n\t\t}\n\n\t\t// Do nothing if there were 3 touch points or more\n\t\tif(numPoints === 2) {\n\t\t\t_currentPoints = null;\n\t\t\treturn true;\n\t\t}\n\n\t\t// if second pointer released\n\t\tif(numPoints === 1) {\n\t\t\t_equalizePoints(_startPoint, touchList[0]);\n\t\t}\t\t\t\t\n\n\n\t\t// pointer hasn't moved, send \"tap release\" point\n\t\tif(numPoints === 0 && !_direction && !_mainScrollAnimating) {\n\t\t\tif(!releasePoint) {\n\t\t\t\tif(e.type === 'mouseup') {\n\t\t\t\t\treleasePoint = {x: e.pageX, y: e.pageY, type:'mouse'};\n\t\t\t\t} else if(e.changedTouches && e.changedTouches[0]) {\n\t\t\t\t\treleasePoint = {x: e.changedTouches[0].pageX, y: e.changedTouches[0].pageY, type:'touch'};\n\t\t\t\t}\t\t\n\t\t\t}\n\n\t\t\t_shout('touchRelease', e, releasePoint);\n\t\t}\n\n\t\t// Difference in time between releasing of two last touch points (zoom gesture)\n\t\tvar releaseTimeDiff = -1;\n\n\t\t// Gesture completed, no pointers left\n\t\tif(numPoints === 0) {\n\t\t\t_isDragging = false;\n\t\t\tframework.unbind(window, _upMoveEvents, self);\n\n\t\t\t_stopDragUpdateLoop();\n\n\t\t\tif(_isZooming) {\n\t\t\t\t// Two points released at the same time\n\t\t\t\treleaseTimeDiff = 0;\n\t\t\t} else if(_lastReleaseTime !== -1) {\n\t\t\t\treleaseTimeDiff = _getCurrentTime() - _lastReleaseTime;\n\t\t\t}\n\t\t}\n\t\t_lastReleaseTime = numPoints === 1 ? _getCurrentTime() : -1;\n\t\t\n\t\tif(releaseTimeDiff !== -1 && releaseTimeDiff < 150) {\n\t\t\tgestureType = 'zoom';\n\t\t} else {\n\t\t\tgestureType = 'swipe';\n\t\t}\n\n\t\tif(_isZooming && numPoints < 2) {\n\t\t\t_isZooming = false;\n\n\t\t\t// Only second point released\n\t\t\tif(numPoints === 1) {\n\t\t\t\tgestureType = 'zoomPointerUp';\n\t\t\t}\n\t\t\t_shout('zoomGestureEnded');\n\t\t}\n\n\t\t_currentPoints = null;\n\t\tif(!_moved && !_zoomStarted && !_mainScrollAnimating && !_verticalDragInitiated) {\n\t\t\t// nothing to animate\n\t\t\treturn;\n\t\t}\n\t\n\t\t_stopAllAnimations();\n\n\t\t\n\t\tif(!_releaseAnimData) {\n\t\t\t_releaseAnimData = _initDragReleaseAnimationData();\n\t\t}\n\t\t\n\t\t_releaseAnimData.calculateSwipeSpeed('x');\n\n\n\t\tif(_verticalDragInitiated) {\n\n\t\t\tvar opacityRatio = _calculateVerticalDragOpacityRatio();\n\n\t\t\tif(opacityRatio < _options.verticalDragRange) {\n\t\t\t\tself.close();\n\t\t\t} else {\n\t\t\t\tvar initalPanY = _panOffset.y,\n\t\t\t\t\tinitialBgOpacity = _bgOpacity;\n\n\t\t\t\t_animateProp('verticalDrag', 0, 1, 300, framework.easing.cubic.out, function(now) {\n\t\t\t\t\t\n\t\t\t\t\t_panOffset.y = (self.currItem.initialPosition.y - initalPanY) * now + initalPanY;\n\n\t\t\t\t\t_applyBgOpacity( (1 - initialBgOpacity) * now + initialBgOpacity );\n\t\t\t\t\t_applyCurrentZoomPan();\n\t\t\t\t});\n\n\t\t\t\t_shout('onVerticalDrag', 1);\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\n\t\t// main scroll \n\t\tif( (_mainScrollShifted || _mainScrollAnimating) && numPoints === 0) {\n\t\t\tvar itemChanged = _finishSwipeMainScrollGesture(gestureType, _releaseAnimData);\n\t\t\tif(itemChanged) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tgestureType = 'zoomPointerUp';\n\t\t}\n\n\t\t// prevent zoom/pan animation when main scroll animation runs\n\t\tif(_mainScrollAnimating) {\n\t\t\treturn;\n\t\t}\n\t\t\n\t\t// Complete simple zoom gesture (reset zoom level if it's out of the bounds) \n\t\tif(gestureType !== 'swipe') {\n\t\t\t_completeZoomGesture();\n\t\t\treturn;\n\t\t}\n\t\n\t\t// Complete pan gesture if main scroll is not shifted, and it's possible to pan current image\n\t\tif(!_mainScrollShifted && _currZoomLevel > self.currItem.fitRatio) {\n\t\t\t_completePanGesture(_releaseAnimData);\n\t\t}\n\t},\n\n\n\t// Returns object with data about gesture\n\t// It's created only once and then reused\n\t_initDragReleaseAnimationData = function() {\n\t\t// temp local vars\n\t\tvar lastFlickDuration,\n\t\t\ttempReleasePos;\n\n\t\t// s = this\n\t\tvar s = {\n\t\t\tlastFlickOffset: {},\n\t\t\tlastFlickDist: {},\n\t\t\tlastFlickSpeed: {},\n\t\t\tslowDownRatio: {},\n\t\t\tslowDownRatioReverse: {},\n\t\t\tspeedDecelerationRatio: {},\n\t\t\tspeedDecelerationRatioAbs: {},\n\t\t\tdistanceOffset: {},\n\t\t\tbackAnimDestination: {},\n\t\t\tbackAnimStarted: {},\n\t\t\tcalculateSwipeSpeed: function(axis) {\n\t\t\t\t\n\n\t\t\t\tif( _posPoints.length > 1) {\n\t\t\t\t\tlastFlickDuration = _getCurrentTime() - _gestureCheckSpeedTime + 50;\n\t\t\t\t\ttempReleasePos = _posPoints[_posPoints.length-2][axis];\n\t\t\t\t} else {\n\t\t\t\t\tlastFlickDuration = _getCurrentTime() - _gestureStartTime; // total gesture duration\n\t\t\t\t\ttempReleasePos = _startPoint[axis];\n\t\t\t\t}\n\t\t\t\ts.lastFlickOffset[axis] = _currPoint[axis] - tempReleasePos;\n\t\t\t\ts.lastFlickDist[axis] = Math.abs(s.lastFlickOffset[axis]);\n\t\t\t\tif(s.lastFlickDist[axis] > 20) {\n\t\t\t\t\ts.lastFlickSpeed[axis] = s.lastFlickOffset[axis] / lastFlickDuration;\n\t\t\t\t} else {\n\t\t\t\t\ts.lastFlickSpeed[axis] = 0;\n\t\t\t\t}\n\t\t\t\tif( Math.abs(s.lastFlickSpeed[axis]) < 0.1 ) {\n\t\t\t\t\ts.lastFlickSpeed[axis] = 0;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\ts.slowDownRatio[axis] = 0.95;\n\t\t\t\ts.slowDownRatioReverse[axis] = 1 - s.slowDownRatio[axis];\n\t\t\t\ts.speedDecelerationRatio[axis] = 1;\n\t\t\t},\n\n\t\t\tcalculateOverBoundsAnimOffset: function(axis, speed) {\n\t\t\t\tif(!s.backAnimStarted[axis]) {\n\n\t\t\t\t\tif(_panOffset[axis] > _currPanBounds.min[axis]) {\n\t\t\t\t\t\ts.backAnimDestination[axis] = _currPanBounds.min[axis];\n\t\t\t\t\t\t\n\t\t\t\t\t} else if(_panOffset[axis] < _currPanBounds.max[axis]) {\n\t\t\t\t\t\ts.backAnimDestination[axis] = _currPanBounds.max[axis];\n\t\t\t\t\t}\n\n\t\t\t\t\tif(s.backAnimDestination[axis] !== undefined) {\n\t\t\t\t\t\ts.slowDownRatio[axis] = 0.7;\n\t\t\t\t\t\ts.slowDownRatioReverse[axis] = 1 - s.slowDownRatio[axis];\n\t\t\t\t\t\tif(s.speedDecelerationRatioAbs[axis] < 0.05) {\n\n\t\t\t\t\t\t\ts.lastFlickSpeed[axis] = 0;\n\t\t\t\t\t\t\ts.backAnimStarted[axis] = true;\n\n\t\t\t\t\t\t\t_animateProp('bounceZoomPan'+axis,_panOffset[axis], \n\t\t\t\t\t\t\t\ts.backAnimDestination[axis], \n\t\t\t\t\t\t\t\tspeed || 300, \n\t\t\t\t\t\t\t\tframework.easing.sine.out, \n\t\t\t\t\t\t\t\tfunction(pos) {\n\t\t\t\t\t\t\t\t\t_panOffset[axis] = pos;\n\t\t\t\t\t\t\t\t\t_applyCurrentZoomPan();\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}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// Reduces the speed by slowDownRatio (per 10ms)\n\t\t\tcalculateAnimOffset: function(axis) {\n\t\t\t\tif(!s.backAnimStarted[axis]) {\n\t\t\t\t\ts.speedDecelerationRatio[axis] = s.speedDecelerationRatio[axis] * (s.slowDownRatio[axis] + \n\t\t\t\t\t\t\t\t\t\t\t\ts.slowDownRatioReverse[axis] - \n\t\t\t\t\t\t\t\t\t\t\t\ts.slowDownRatioReverse[axis] * s.timeDiff / 10);\n\n\t\t\t\t\ts.speedDecelerationRatioAbs[axis] = Math.abs(s.lastFlickSpeed[axis] * s.speedDecelerationRatio[axis]);\n\t\t\t\t\ts.distanceOffset[axis] = s.lastFlickSpeed[axis] * s.speedDecelerationRatio[axis] * s.timeDiff;\n\t\t\t\t\t_panOffset[axis] += s.distanceOffset[axis];\n\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tpanAnimLoop: function() {\n\t\t\t\tif ( _animations.zoomPan ) {\n\t\t\t\t\t_animations.zoomPan.raf = _requestAF(s.panAnimLoop);\n\n\t\t\t\t\ts.now = _getCurrentTime();\n\t\t\t\t\ts.timeDiff = s.now - s.lastNow;\n\t\t\t\t\ts.lastNow = s.now;\n\t\t\t\t\t\n\t\t\t\t\ts.calculateAnimOffset('x');\n\t\t\t\t\ts.calculateAnimOffset('y');\n\n\t\t\t\t\t_applyCurrentZoomPan();\n\t\t\t\t\t\n\t\t\t\t\ts.calculateOverBoundsAnimOffset('x');\n\t\t\t\t\ts.calculateOverBoundsAnimOffset('y');\n\n\n\t\t\t\t\tif (s.speedDecelerationRatioAbs.x < 0.05 && s.speedDecelerationRatioAbs.y < 0.05) {\n\n\t\t\t\t\t\t// round pan position\n\t\t\t\t\t\t_panOffset.x = Math.round(_panOffset.x);\n\t\t\t\t\t\t_panOffset.y = Math.round(_panOffset.y);\n\t\t\t\t\t\t_applyCurrentZoomPan();\n\t\t\t\t\t\t\n\t\t\t\t\t\t_stopAnimation('zoomPan');\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t}\n\t\t};\n\t\treturn s;\n\t},\n\n\t_completePanGesture = function(animData) {\n\t\t// calculate swipe speed for Y axis (paanning)\n\t\tanimData.calculateSwipeSpeed('y');\n\n\t\t_currPanBounds = self.currItem.bounds;\n\t\t\n\t\tanimData.backAnimDestination = {};\n\t\tanimData.backAnimStarted = {};\n\n\t\t// Avoid acceleration animation if speed is too low\n\t\tif(Math.abs(animData.lastFlickSpeed.x) <= 0.05 && Math.abs(animData.lastFlickSpeed.y) <= 0.05 ) {\n\t\t\tanimData.speedDecelerationRatioAbs.x = animData.speedDecelerationRatioAbs.y = 0;\n\n\t\t\t// Run pan drag release animation. E.g. if you drag image and release finger without momentum.\n\t\t\tanimData.calculateOverBoundsAnimOffset('x');\n\t\t\tanimData.calculateOverBoundsAnimOffset('y');\n\t\t\treturn true;\n\t\t}\n\n\t\t// Animation loop that controls the acceleration after pan gesture ends\n\t\t_registerStartAnimation('zoomPan');\n\t\tanimData.lastNow = _getCurrentTime();\n\t\tanimData.panAnimLoop();\n\t},\n\n\n\t_finishSwipeMainScrollGesture = function(gestureType, _releaseAnimData) {\n\t\tvar itemChanged;\n\t\tif(!_mainScrollAnimating) {\n\t\t\t_currZoomedItemIndex = _currentItemIndex;\n\t\t}\n\n\n\t\t\n\t\tvar itemsDiff;\n\n\t\tif(gestureType === 'swipe') {\n\t\t\tvar totalShiftDist = _currPoint.x - _startPoint.x,\n\t\t\t\tisFastLastFlick = _releaseAnimData.lastFlickDist.x < 10;\n\n\t\t\t// if container is shifted for more than MIN_SWIPE_DISTANCE, \n\t\t\t// and last flick gesture was in right direction\n\t\t\tif(totalShiftDist > MIN_SWIPE_DISTANCE && \n\t\t\t\t(isFastLastFlick || _releaseAnimData.lastFlickOffset.x > 20) ) {\n\t\t\t\t// go to prev item\n\t\t\t\titemsDiff = -1;\n\t\t\t} else if(totalShiftDist < -MIN_SWIPE_DISTANCE && \n\t\t\t\t(isFastLastFlick || _releaseAnimData.lastFlickOffset.x < -20) ) {\n\t\t\t\t// go to next item\n\t\t\t\titemsDiff = 1;\n\t\t\t}\n\t\t}\n\n\t\tvar nextCircle;\n\n\t\tif(itemsDiff) {\n\t\t\t\n\t\t\t_currentItemIndex += itemsDiff;\n\n\t\t\tif(_currentItemIndex < 0) {\n\t\t\t\t_currentItemIndex = _options.loop ? _getNumItems()-1 : 0;\n\t\t\t\tnextCircle = true;\n\t\t\t} else if(_currentItemIndex >= _getNumItems()) {\n\t\t\t\t_currentItemIndex = _options.loop ? 0 : _getNumItems()-1;\n\t\t\t\tnextCircle = true;\n\t\t\t}\n\n\t\t\tif(!nextCircle || _options.loop) {\n\t\t\t\t_indexDiff += itemsDiff;\n\t\t\t\t_currPositionIndex -= itemsDiff;\n\t\t\t\titemChanged = true;\n\t\t\t}\n\t\t\t\n\n\t\t\t\n\t\t}\n\n\t\tvar animateToX = _slideSize.x * _currPositionIndex;\n\t\tvar animateToDist = Math.abs( animateToX - _mainScrollPos.x );\n\t\tvar finishAnimDuration;\n\n\n\t\tif(!itemChanged && animateToX > _mainScrollPos.x !== _releaseAnimData.lastFlickSpeed.x > 0) {\n\t\t\t// \"return to current\" duration, e.g. when dragging from slide 0 to -1\n\t\t\tfinishAnimDuration = 333; \n\t\t} else {\n\t\t\tfinishAnimDuration = Math.abs(_releaseAnimData.lastFlickSpeed.x) > 0 ? \n\t\t\t\t\t\t\t\t\tanimateToDist / Math.abs(_releaseAnimData.lastFlickSpeed.x) : \n\t\t\t\t\t\t\t\t\t333;\n\n\t\t\tfinishAnimDuration = Math.min(finishAnimDuration, 400);\n\t\t\tfinishAnimDuration = Math.max(finishAnimDuration, 250);\n\t\t}\n\n\t\tif(_currZoomedItemIndex === _currentItemIndex) {\n\t\t\titemChanged = false;\n\t\t}\n\t\t\n\t\t_mainScrollAnimating = true;\n\t\t\n\t\t_shout('mainScrollAnimStart');\n\n\t\t_animateProp('mainScroll', _mainScrollPos.x, animateToX, finishAnimDuration, framework.easing.cubic.out, \n\t\t\t_moveMainScroll,\n\t\t\tfunction() {\n\t\t\t\t_stopAllAnimations();\n\t\t\t\t_mainScrollAnimating = false;\n\t\t\t\t_currZoomedItemIndex = -1;\n\t\t\t\t\n\t\t\t\tif(itemChanged || _currZoomedItemIndex !== _currentItemIndex) {\n\t\t\t\t\tself.updateCurrItem();\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t_shout('mainScrollAnimComplete');\n\t\t\t}\n\t\t);\n\n\t\tif(itemChanged) {\n\t\t\tself.updateCurrItem(true);\n\t\t}\n\n\t\treturn itemChanged;\n\t},\n\n\t_calculateZoomLevel = function(touchesDistance) {\n\t\treturn 1 / _startPointsDistance * touchesDistance * _startZoomLevel;\n\t},\n\n\t// Resets zoom if it's out of bounds\n\t_completeZoomGesture = function() {\n\t\tvar destZoomLevel = _currZoomLevel,\n\t\t\tminZoomLevel = _getMinZoomLevel(),\n\t\t\tmaxZoomLevel = _getMaxZoomLevel();\n\n\t\tif ( _currZoomLevel < minZoomLevel ) {\n\t\t\tdestZoomLevel = minZoomLevel;\n\t\t} else if ( _currZoomLevel > maxZoomLevel ) {\n\t\t\tdestZoomLevel = maxZoomLevel;\n\t\t}\n\n\t\tvar destOpacity = 1,\n\t\t\tonUpdate,\n\t\t\tinitialOpacity = _bgOpacity;\n\n\t\tif(_opacityChanged && !_isZoomingIn && !_wasOverInitialZoom && _currZoomLevel < minZoomLevel) {\n\t\t\t//_closedByScroll = true;\n\t\t\tself.close();\n\t\t\treturn true;\n\t\t}\n\n\t\tif(_opacityChanged) {\n\t\t\tonUpdate = function(now) {\n\t\t\t\t_applyBgOpacity( (destOpacity - initialOpacity) * now + initialOpacity );\n\t\t\t};\n\t\t}\n\n\t\tself.zoomTo(destZoomLevel, 0, 200, framework.easing.cubic.out, onUpdate);\n\t\treturn true;\n\t};\n\n\n_registerModule('Gestures', {\n\tpublicMethods: {\n\n\t\tinitGestures: function() {\n\n\t\t\t// helper function that builds touch/pointer/mouse events\n\t\t\tvar addEventNames = function(pref, down, move, up, cancel) {\n\t\t\t\t_dragStartEvent = pref + down;\n\t\t\t\t_dragMoveEvent = pref + move;\n\t\t\t\t_dragEndEvent = pref + up;\n\t\t\t\tif(cancel) {\n\t\t\t\t\t_dragCancelEvent = pref + cancel;\n\t\t\t\t} else {\n\t\t\t\t\t_dragCancelEvent = '';\n\t\t\t\t}\n\t\t\t};\n\n\t\t\t_pointerEventEnabled = _features.pointerEvent;\n\t\t\tif(_pointerEventEnabled && _features.touch) {\n\t\t\t\t// we don't need touch events, if browser supports pointer events\n\t\t\t\t_features.touch = false;\n\t\t\t}\n\n\t\t\tif(_pointerEventEnabled) {\n\t\t\t\tif(navigator.msPointerEnabled) {\n\t\t\t\t\t// IE10 pointer events are case-sensitive\n\t\t\t\t\taddEventNames('MSPointer', 'Down', 'Move', 'Up', 'Cancel');\n\t\t\t\t} else {\n\t\t\t\t\taddEventNames('pointer', 'down', 'move', 'up', 'cancel');\n\t\t\t\t}\n\t\t\t} else if(_features.touch) {\n\t\t\t\taddEventNames('touch', 'start', 'move', 'end', 'cancel');\n\t\t\t\t_likelyTouchDevice = true;\n\t\t\t} else {\n\t\t\t\taddEventNames('mouse', 'down', 'move', 'up');\t\n\t\t\t}\n\n\t\t\t_upMoveEvents = _dragMoveEvent + ' ' + _dragEndEvent + ' ' + _dragCancelEvent;\n\t\t\t_downEvents = _dragStartEvent;\n\n\t\t\tif(_pointerEventEnabled && !_likelyTouchDevice) {\n\t\t\t\t_likelyTouchDevice = (navigator.maxTouchPoints > 1) || (navigator.msMaxTouchPoints > 1);\n\t\t\t}\n\t\t\t// make variable public\n\t\t\tself.likelyTouchDevice = _likelyTouchDevice; \n\t\t\t\n\t\t\t_globalEventHandlers[_dragStartEvent] = _onDragStart;\n\t\t\t_globalEventHandlers[_dragMoveEvent] = _onDragMove;\n\t\t\t_globalEventHandlers[_dragEndEvent] = _onDragRelease; // the Kraken\n\n\t\t\tif(_dragCancelEvent) {\n\t\t\t\t_globalEventHandlers[_dragCancelEvent] = _globalEventHandlers[_dragEndEvent];\n\t\t\t}\n\n\t\t\t// Bind mouse events on device with detected hardware touch support, in case it supports multiple types of input.\n\t\t\tif(_features.touch) {\n\t\t\t\t_downEvents += ' mousedown';\n\t\t\t\t_upMoveEvents += ' mousemove mouseup';\n\t\t\t\t_globalEventHandlers.mousedown = _globalEventHandlers[_dragStartEvent];\n\t\t\t\t_globalEventHandlers.mousemove = _globalEventHandlers[_dragMoveEvent];\n\t\t\t\t_globalEventHandlers.mouseup = _globalEventHandlers[_dragEndEvent];\n\t\t\t}\n\n\t\t\tif(!_likelyTouchDevice) {\n\t\t\t\t// don't allow pan to next slide from zoomed state on Desktop\n\t\t\t\t_options.allowPanToNext = false;\n\t\t\t}\n\t\t}\n\n\t}\n});\n\n\n/*>>gestures*/\n\n/*>>show-hide-transition*/\n/**\n * show-hide-transition.js:\n *\n * Manages initial opening or closing transition.\n *\n * If you're not planning to use transition for gallery at all,\n * you may set options hideAnimationDuration and showAnimationDuration to 0,\n * and just delete startAnimation function.\n * \n */\n\n\nvar _showOrHideTimeout,\n\t_showOrHide = function(item, img, out, completeFn) {\n\n\t\tif(_showOrHideTimeout) {\n\t\t\tclearTimeout(_showOrHideTimeout);\n\t\t}\n\n\t\t_initialZoomRunning = true;\n\t\t_initialContentSet = true;\n\t\t\n\t\t// dimensions of small thumbnail {x:,y:,w:}.\n\t\t// Height is optional, as calculated based on large image.\n\t\tvar thumbBounds; \n\t\tif(item.initialLayout) {\n\t\t\tthumbBounds = item.initialLayout;\n\t\t\titem.initialLayout = null;\n\t\t} else {\n\t\t\tthumbBounds = _options.getThumbBoundsFn && _options.getThumbBoundsFn(_currentItemIndex);\n\t\t}\n\n\t\tvar duration = out ? _options.hideAnimationDuration : _options.showAnimationDuration;\n\n\t\tvar onComplete = function() {\n\t\t\t_stopAnimation('initialZoom');\n\t\t\tif(!out) {\n\t\t\t\t_applyBgOpacity(1);\n\t\t\t\tif(img) {\n\t\t\t\t\timg.style.display = 'block';\n\t\t\t\t}\n\t\t\t\tframework.addClass(template, 'pswp--animated-in');\n\t\t\t\t_shout('initialZoom' + (out ? 'OutEnd' : 'InEnd'));\n\t\t\t} else {\n\t\t\t\tself.template.removeAttribute('style');\n\t\t\t\tself.bg.removeAttribute('style');\n\t\t\t}\n\n\t\t\tif(completeFn) {\n\t\t\t\tcompleteFn();\n\t\t\t}\n\t\t\t_initialZoomRunning = false;\n\t\t};\n\n\t\t// if bounds aren't provided, just open gallery without animation\n\t\tif(!duration || !thumbBounds || thumbBounds.x === undefined) {\n\n\t\t\t_shout('initialZoom' + (out ? 'Out' : 'In') );\n\n\t\t\t_currZoomLevel = item.initialZoomLevel;\n\t\t\t_equalizePoints(_panOffset, item.initialPosition );\n\t\t\t_applyCurrentZoomPan();\n\n\t\t\ttemplate.style.opacity = out ? 0 : 1;\n\t\t\t_applyBgOpacity(1);\n\n\t\t\tif(duration) {\n\t\t\t\tsetTimeout(function() {\n\t\t\t\t\tonComplete();\n\t\t\t\t}, duration);\n\t\t\t} else {\n\t\t\t\tonComplete();\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tvar startAnimation = function() {\n\t\t\tvar closeWithRaf = _closedByScroll,\n\t\t\t\tfadeEverything = !self.currItem.src || self.currItem.loadError || _options.showHideOpacity;\n\t\t\t\n\t\t\t// apply hw-acceleration to image\n\t\t\tif(item.miniImg) {\n\t\t\t\titem.miniImg.style.webkitBackfaceVisibility = 'hidden';\n\t\t\t}\n\n\t\t\tif(!out) {\n\t\t\t\t_currZoomLevel = thumbBounds.w / item.w;\n\t\t\t\t_panOffset.x = thumbBounds.x;\n\t\t\t\t_panOffset.y = thumbBounds.y - _initalWindowScrollY;\n\n\t\t\t\tself[fadeEverything ? 'template' : 'bg'].style.opacity = 0.001;\n\t\t\t\t_applyCurrentZoomPan();\n\t\t\t}\n\n\t\t\t_registerStartAnimation('initialZoom');\n\t\t\t\n\t\t\tif(out && !closeWithRaf) {\n\t\t\t\tframework.removeClass(template, 'pswp--animated-in');\n\t\t\t}\n\n\t\t\tif(fadeEverything) {\n\t\t\t\tif(out) {\n\t\t\t\t\tframework[ (closeWithRaf ? 'remove' : 'add') + 'Class' ](template, 'pswp--animate_opacity');\n\t\t\t\t} else {\n\t\t\t\t\tsetTimeout(function() {\n\t\t\t\t\t\tframework.addClass(template, 'pswp--animate_opacity');\n\t\t\t\t\t}, 30);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t_showOrHideTimeout = setTimeout(function() {\n\n\t\t\t\t_shout('initialZoom' + (out ? 'Out' : 'In') );\n\t\t\t\t\n\n\t\t\t\tif(!out) {\n\n\t\t\t\t\t// \"in\" animation always uses CSS transitions (instead of rAF).\n\t\t\t\t\t// CSS transition work faster here, \n\t\t\t\t\t// as developer may also want to animate other things, \n\t\t\t\t\t// like ui on top of sliding area, which can be animated just via CSS\n\t\t\t\t\t\n\t\t\t\t\t_currZoomLevel = item.initialZoomLevel;\n\t\t\t\t\t_equalizePoints(_panOffset, item.initialPosition );\n\t\t\t\t\t_applyCurrentZoomPan();\n\t\t\t\t\t_applyBgOpacity(1);\n\n\t\t\t\t\tif(fadeEverything) {\n\t\t\t\t\t\ttemplate.style.opacity = 1;\n\t\t\t\t\t} else {\n\t\t\t\t\t\t_applyBgOpacity(1);\n\t\t\t\t\t}\n\n\t\t\t\t\t_showOrHideTimeout = setTimeout(onComplete, duration + 20);\n\t\t\t\t} else {\n\n\t\t\t\t\t// \"out\" animation uses rAF only when PhotoSwipe is closed by browser scroll, to recalculate position\n\t\t\t\t\tvar destZoomLevel = thumbBounds.w / item.w,\n\t\t\t\t\t\tinitialPanOffset = {\n\t\t\t\t\t\t\tx: _panOffset.x,\n\t\t\t\t\t\t\ty: _panOffset.y\n\t\t\t\t\t\t},\n\t\t\t\t\t\tinitialZoomLevel = _currZoomLevel,\n\t\t\t\t\t\tinitalBgOpacity = _bgOpacity,\n\t\t\t\t\t\tonUpdate = function(now) {\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tif(now === 1) {\n\t\t\t\t\t\t\t\t_currZoomLevel = destZoomLevel;\n\t\t\t\t\t\t\t\t_panOffset.x = thumbBounds.x;\n\t\t\t\t\t\t\t\t_panOffset.y = thumbBounds.y - _currentWindowScrollY;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t_currZoomLevel = (destZoomLevel - initialZoomLevel) * now + initialZoomLevel;\n\t\t\t\t\t\t\t\t_panOffset.x = (thumbBounds.x - initialPanOffset.x) * now + initialPanOffset.x;\n\t\t\t\t\t\t\t\t_panOffset.y = (thumbBounds.y - _currentWindowScrollY - initialPanOffset.y) * now + initialPanOffset.y;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t_applyCurrentZoomPan();\n\t\t\t\t\t\t\tif(fadeEverything) {\n\t\t\t\t\t\t\t\ttemplate.style.opacity = 1 - now;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t_applyBgOpacity( initalBgOpacity - now * initalBgOpacity );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\n\t\t\t\t\tif(closeWithRaf) {\n\t\t\t\t\t\t_animateProp('initialZoom', 0, 1, duration, framework.easing.cubic.out, onUpdate, onComplete);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tonUpdate(1);\n\t\t\t\t\t\t_showOrHideTimeout = setTimeout(onComplete, duration + 20);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\n\t\t\t}, out ? 25 : 90); // Main purpose of this delay is to give browser time to paint and\n\t\t\t\t\t// create composite layers of PhotoSwipe UI parts (background, controls, caption, arrows).\n\t\t\t\t\t// Which avoids lag at the beginning of scale transition.\n\t\t};\n\t\tstartAnimation();\n\n\t\t\n\t};\n\n/*>>show-hide-transition*/\n\n/*>>items-controller*/\n/**\n*\n* Controller manages gallery items, their dimensions, and their content.\n* \n*/\n\nvar _items,\n\t_tempPanAreaSize = {},\n\t_imagesToAppendPool = [],\n\t_initialContentSet,\n\t_initialZoomRunning,\n\t_controllerDefaultOptions = {\n\t\tindex: 0,\n\t\terrorMsg: '
      The image could not be loaded.
      ',\n\t\tforceProgressiveLoading: false, // TODO\n\t\tpreload: [1,1],\n\t\tgetNumItemsFn: function() {\n\t\t\treturn _items.length;\n\t\t}\n\t};\n\n\nvar _getItemAt,\n\t_getNumItems,\n\t_initialIsLoop,\n\t_getZeroBounds = function() {\n\t\treturn {\n\t\t\tcenter:{x:0,y:0}, \n\t\t\tmax:{x:0,y:0}, \n\t\t\tmin:{x:0,y:0}\n\t\t};\n\t},\n\t_calculateSingleItemPanBounds = function(item, realPanElementW, realPanElementH ) {\n\t\tvar bounds = item.bounds;\n\n\t\t// position of element when it's centered\n\t\tbounds.center.x = Math.round((_tempPanAreaSize.x - realPanElementW) / 2);\n\t\tbounds.center.y = Math.round((_tempPanAreaSize.y - realPanElementH) / 2) + item.vGap.top;\n\n\t\t// maximum pan position\n\t\tbounds.max.x = (realPanElementW > _tempPanAreaSize.x) ? \n\t\t\t\t\t\t\tMath.round(_tempPanAreaSize.x - realPanElementW) : \n\t\t\t\t\t\t\tbounds.center.x;\n\t\t\n\t\tbounds.max.y = (realPanElementH > _tempPanAreaSize.y) ? \n\t\t\t\t\t\t\tMath.round(_tempPanAreaSize.y - realPanElementH) + item.vGap.top : \n\t\t\t\t\t\t\tbounds.center.y;\n\t\t\n\t\t// minimum pan position\n\t\tbounds.min.x = (realPanElementW > _tempPanAreaSize.x) ? 0 : bounds.center.x;\n\t\tbounds.min.y = (realPanElementH > _tempPanAreaSize.y) ? item.vGap.top : bounds.center.y;\n\t},\n\t_calculateItemSize = function(item, viewportSize, zoomLevel) {\n\n\t\tif (item.src && !item.loadError) {\n\t\t\tvar isInitial = !zoomLevel;\n\t\t\t\n\t\t\tif(isInitial) {\n\t\t\t\tif(!item.vGap) {\n\t\t\t\t\titem.vGap = {top:0,bottom:0};\n\t\t\t\t}\n\t\t\t\t// allows overriding vertical margin for individual items\n\t\t\t\t_shout('parseVerticalMargin', item);\n\t\t\t}\n\n\n\t\t\t_tempPanAreaSize.x = viewportSize.x;\n\t\t\t_tempPanAreaSize.y = viewportSize.y - item.vGap.top - item.vGap.bottom;\n\n\t\t\tif (isInitial) {\n\t\t\t\tvar hRatio = _tempPanAreaSize.x / item.w;\n\t\t\t\tvar vRatio = _tempPanAreaSize.y / item.h;\n\n\t\t\t\titem.fitRatio = hRatio < vRatio ? hRatio : vRatio;\n\t\t\t\t//item.fillRatio = hRatio > vRatio ? hRatio : vRatio;\n\n\t\t\t\tvar scaleMode = _options.scaleMode;\n\n\t\t\t\tif (scaleMode === 'orig') {\n\t\t\t\t\tzoomLevel = 1;\n\t\t\t\t} else if (scaleMode === 'fit') {\n\t\t\t\t\tzoomLevel = item.fitRatio;\n\t\t\t\t}\n\n\t\t\t\tif (zoomLevel > 1) {\n\t\t\t\t\tzoomLevel = 1;\n\t\t\t\t}\n\n\t\t\t\titem.initialZoomLevel = zoomLevel;\n\t\t\t\t\n\t\t\t\tif(!item.bounds) {\n\t\t\t\t\t// reuse bounds object\n\t\t\t\t\titem.bounds = _getZeroBounds(); \n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif(!zoomLevel) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t_calculateSingleItemPanBounds(item, item.w * zoomLevel, item.h * zoomLevel);\n\n\t\t\tif (isInitial && zoomLevel === item.initialZoomLevel) {\n\t\t\t\titem.initialPosition = item.bounds.center;\n\t\t\t}\n\n\t\t\treturn item.bounds;\n\t\t} else {\n\t\t\titem.w = item.h = 0;\n\t\t\titem.initialZoomLevel = item.fitRatio = 1;\n\t\t\titem.bounds = _getZeroBounds();\n\t\t\titem.initialPosition = item.bounds.center;\n\n\t\t\t// if it's not image, we return zero bounds (content is not zoomable)\n\t\t\treturn item.bounds;\n\t\t}\n\t\t\n\t},\n\n\t\n\n\n\t_appendImage = function(index, item, baseDiv, img, preventAnimation, keepPlaceholder) {\n\t\t\n\n\t\tif(item.loadError) {\n\t\t\treturn;\n\t\t}\n\n\t\tif(img) {\n\n\t\t\titem.imageAppended = true;\n\t\t\t_setImageSize(item, img, (item === self.currItem && _renderMaxResolution) );\n\t\t\t\n\t\t\tbaseDiv.appendChild(img);\n\n\t\t\tif(keepPlaceholder) {\n\t\t\t\tsetTimeout(function() {\n\t\t\t\t\tif(item && item.loaded && item.placeholder) {\n\t\t\t\t\t\titem.placeholder.style.display = 'none';\n\t\t\t\t\t\titem.placeholder = null;\n\t\t\t\t\t}\n\t\t\t\t}, 500);\n\t\t\t}\n\t\t}\n\t},\n\t\n\n\n\t_preloadImage = function(item) {\n\t\titem.loading = true;\n\t\titem.loaded = false;\n\t\tvar img = item.img = framework.createEl('pswp__img', 'img');\n\t\tvar onComplete = function() {\n\t\t\titem.loading = false;\n\t\t\titem.loaded = true;\n\n\t\t\tif(item.loadComplete) {\n\t\t\t\titem.loadComplete(item);\n\t\t\t} else {\n\t\t\t\titem.img = null; // no need to store image object\n\t\t\t}\n\t\t\timg.onload = img.onerror = null;\n\t\t\timg = null;\n\t\t};\n\t\timg.onload = onComplete;\n\t\timg.onerror = function() {\n\t\t\titem.loadError = true;\n\t\t\tonComplete();\n\t\t};\t\t\n\n\t\timg.src = item.src;// + '?a=' + Math.random();\n\n\t\treturn img;\n\t},\n\t_checkForError = function(item, cleanUp) {\n\t\tif(item.src && item.loadError && item.container) {\n\n\t\t\tif(cleanUp) {\n\t\t\t\titem.container.innerHTML = '';\n\t\t\t}\n\n\t\t\titem.container.innerHTML = _options.errorMsg.replace('%url%', item.src );\n\t\t\treturn true;\n\t\t\t\n\t\t}\n\t},\n\t_setImageSize = function(item, img, maxRes) {\n\t\tif(!item.src) {\n\t\t\treturn;\n\t\t}\n\n\t\tif(!img) {\n\t\t\timg = item.container.lastChild;\n\t\t}\n\n\t\tvar w = maxRes ? item.w : Math.round(item.w * item.fitRatio),\n\t\t\th = maxRes ? item.h : Math.round(item.h * item.fitRatio);\n\t\t\n\t\tif(item.placeholder && !item.loaded) {\n\t\t\titem.placeholder.style.width = w + 'px';\n\t\t\titem.placeholder.style.height = h + 'px';\n\t\t}\n\n\t\timg.style.width = w + 'px';\n\t\timg.style.height = h + 'px';\n\t},\n\t_appendImagesPool = function() {\n\n\t\tif(_imagesToAppendPool.length) {\n\t\t\tvar poolItem;\n\n\t\t\tfor(var i = 0; i < _imagesToAppendPool.length; i++) {\n\t\t\t\tpoolItem = _imagesToAppendPool[i];\n\t\t\t\tif( poolItem.holder.index === poolItem.index ) {\n\t\t\t\t\t_appendImage(poolItem.index, poolItem.item, poolItem.baseDiv, poolItem.img, false, poolItem.clearPlaceholder);\n\t\t\t\t}\n\t\t\t}\n\t\t\t_imagesToAppendPool = [];\n\t\t}\n\t};\n\t\n\n\n_registerModule('Controller', {\n\n\tpublicMethods: {\n\n\t\tlazyLoadItem: function(index) {\n\t\t\tindex = _getLoopedId(index);\n\t\t\tvar item = _getItemAt(index);\n\n\t\t\tif(!item || ((item.loaded || item.loading) && !_itemsNeedUpdate)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t_shout('gettingData', index, item);\n\n\t\t\tif (!item.src) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t_preloadImage(item);\n\t\t},\n\t\tinitController: function() {\n\t\t\tframework.extend(_options, _controllerDefaultOptions, true);\n\t\t\tself.items = _items = items;\n\t\t\t_getItemAt = self.getItemAt;\n\t\t\t_getNumItems = _options.getNumItemsFn; //self.getNumItems;\n\n\n\n\t\t\t_initialIsLoop = _options.loop;\n\t\t\tif(_getNumItems() < 3) {\n\t\t\t\t_options.loop = false; // disable loop if less then 3 items\n\t\t\t}\n\n\t\t\t_listen('beforeChange', function(diff) {\n\n\t\t\t\tvar p = _options.preload,\n\t\t\t\t\tisNext = diff === null ? true : (diff >= 0),\n\t\t\t\t\tpreloadBefore = Math.min(p[0], _getNumItems() ),\n\t\t\t\t\tpreloadAfter = Math.min(p[1], _getNumItems() ),\n\t\t\t\t\ti;\n\n\n\t\t\t\tfor(i = 1; i <= (isNext ? preloadAfter : preloadBefore); i++) {\n\t\t\t\t\tself.lazyLoadItem(_currentItemIndex+i);\n\t\t\t\t}\n\t\t\t\tfor(i = 1; i <= (isNext ? preloadBefore : preloadAfter); i++) {\n\t\t\t\t\tself.lazyLoadItem(_currentItemIndex-i);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t_listen('initialLayout', function() {\n\t\t\t\tself.currItem.initialLayout = _options.getThumbBoundsFn && _options.getThumbBoundsFn(_currentItemIndex);\n\t\t\t});\n\n\t\t\t_listen('mainScrollAnimComplete', _appendImagesPool);\n\t\t\t_listen('initialZoomInEnd', _appendImagesPool);\n\n\n\n\t\t\t_listen('destroy', function() {\n\t\t\t\tvar item;\n\t\t\t\tfor(var i = 0; i < _items.length; i++) {\n\t\t\t\t\titem = _items[i];\n\t\t\t\t\t// remove reference to DOM elements, for GC\n\t\t\t\t\tif(item.container) {\n\t\t\t\t\t\titem.container = null; \n\t\t\t\t\t}\n\t\t\t\t\tif(item.placeholder) {\n\t\t\t\t\t\titem.placeholder = null;\n\t\t\t\t\t}\n\t\t\t\t\tif(item.img) {\n\t\t\t\t\t\titem.img = null;\n\t\t\t\t\t}\n\t\t\t\t\tif(item.preloader) {\n\t\t\t\t\t\titem.preloader = null;\n\t\t\t\t\t}\n\t\t\t\t\tif(item.loadError) {\n\t\t\t\t\t\titem.loaded = item.loadError = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t_imagesToAppendPool = null;\n\t\t\t});\n\t\t},\n\n\n\t\tgetItemAt: function(index) {\n\t\t\tif (index >= 0) {\n\t\t\t\treturn _items[index] !== undefined ? _items[index] : false;\n\t\t\t}\n\t\t\treturn false;\n\t\t},\n\n\t\tallowProgressiveImg: function() {\n\t\t\t// 1. Progressive image loading isn't working on webkit/blink \n\t\t\t// when hw-acceleration (e.g. translateZ) is applied to IMG element.\n\t\t\t// That's why in PhotoSwipe parent element gets zoom transform, not image itself.\n\t\t\t// \n\t\t\t// 2. Progressive image loading sometimes blinks in webkit/blink when applying animation to parent element.\n\t\t\t// That's why it's disabled on touch devices (mainly because of swipe transition)\n\t\t\t// \n\t\t\t// 3. Progressive image loading sometimes doesn't work in IE (up to 11).\n\n\t\t\t// Don't allow progressive loading on non-large touch devices\n\t\t\treturn _options.forceProgressiveLoading || !_likelyTouchDevice || _options.mouseUsed || screen.width > 1200; \n\t\t\t// 1200 - to eliminate touch devices with large screen (like Chromebook Pixel)\n\t\t},\n\n\t\tsetContent: function(holder, index) {\n\n\t\t\tif(_options.loop) {\n\t\t\t\tindex = _getLoopedId(index);\n\t\t\t}\n\n\t\t\tvar prevItem = self.getItemAt(holder.index);\n\t\t\tif(prevItem) {\n\t\t\t\tprevItem.container = null;\n\t\t\t}\n\t\n\t\t\tvar item = self.getItemAt(index),\n\t\t\t\timg;\n\t\t\t\n\t\t\tif(!item) {\n\t\t\t\tholder.el.innerHTML = '';\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// allow to override data\n\t\t\t_shout('gettingData', index, item);\n\n\t\t\tholder.index = index;\n\t\t\tholder.item = item;\n\n\t\t\t// base container DIV is created only once for each of 3 holders\n\t\t\tvar baseDiv = item.container = framework.createEl('pswp__zoom-wrap'); \n\n\t\t\t\n\n\t\t\tif(!item.src && item.html) {\n\t\t\t\tif(item.html.tagName) {\n\t\t\t\t\tbaseDiv.appendChild(item.html);\n\t\t\t\t} else {\n\t\t\t\t\tbaseDiv.innerHTML = item.html;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t_checkForError(item);\n\n\t\t\t_calculateItemSize(item, _viewportSize);\n\t\t\t\n\t\t\tif(item.src && !item.loadError && !item.loaded) {\n\n\t\t\t\titem.loadComplete = function(item) {\n\n\t\t\t\t\t// gallery closed before image finished loading\n\t\t\t\t\tif(!_isOpen) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\t// check if holder hasn't changed while image was loading\n\t\t\t\t\tif(holder && holder.index === index ) {\n\t\t\t\t\t\tif( _checkForError(item, true) ) {\n\t\t\t\t\t\t\titem.loadComplete = item.img = null;\n\t\t\t\t\t\t\t_calculateItemSize(item, _viewportSize);\n\t\t\t\t\t\t\t_applyZoomPanToItem(item);\n\n\t\t\t\t\t\t\tif(holder.index === _currentItemIndex) {\n\t\t\t\t\t\t\t\t// recalculate dimensions\n\t\t\t\t\t\t\t\tself.updateCurrZoomItem();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif( !item.imageAppended ) {\n\t\t\t\t\t\t\tif(_features.transform && (_mainScrollAnimating || _initialZoomRunning) ) {\n\t\t\t\t\t\t\t\t_imagesToAppendPool.push({\n\t\t\t\t\t\t\t\t\titem:item,\n\t\t\t\t\t\t\t\t\tbaseDiv:baseDiv,\n\t\t\t\t\t\t\t\t\timg:item.img,\n\t\t\t\t\t\t\t\t\tindex:index,\n\t\t\t\t\t\t\t\t\tholder:holder,\n\t\t\t\t\t\t\t\t\tclearPlaceholder:true\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\t_appendImage(index, item, baseDiv, item.img, _mainScrollAnimating || _initialZoomRunning, true);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// remove preloader & mini-img\n\t\t\t\t\t\t\tif(!_initialZoomRunning && item.placeholder) {\n\t\t\t\t\t\t\t\titem.placeholder.style.display = 'none';\n\t\t\t\t\t\t\t\titem.placeholder = null;\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\titem.loadComplete = null;\n\t\t\t\t\titem.img = null; // no need to store image element after it's added\n\n\t\t\t\t\t_shout('imageLoadComplete', index, item);\n\t\t\t\t};\n\n\t\t\t\tif(framework.features.transform) {\n\t\t\t\t\t\n\t\t\t\t\tvar placeholderClassName = 'pswp__img pswp__img--placeholder'; \n\t\t\t\t\tplaceholderClassName += (item.msrc ? '' : ' pswp__img--placeholder--blank');\n\n\t\t\t\t\tvar placeholder = framework.createEl(placeholderClassName, item.msrc ? 'img' : '');\n\t\t\t\t\tif(item.msrc) {\n\t\t\t\t\t\tplaceholder.src = item.msrc;\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\t_setImageSize(item, placeholder);\n\n\t\t\t\t\tbaseDiv.appendChild(placeholder);\n\t\t\t\t\titem.placeholder = placeholder;\n\n\t\t\t\t}\n\t\t\t\t\n\n\t\t\t\t\n\n\t\t\t\tif(!item.loading) {\n\t\t\t\t\t_preloadImage(item);\n\t\t\t\t}\n\n\n\t\t\t\tif( self.allowProgressiveImg() ) {\n\t\t\t\t\t// just append image\n\t\t\t\t\tif(!_initialContentSet && _features.transform) {\n\t\t\t\t\t\t_imagesToAppendPool.push({\n\t\t\t\t\t\t\titem:item, \n\t\t\t\t\t\t\tbaseDiv:baseDiv, \n\t\t\t\t\t\t\timg:item.img, \n\t\t\t\t\t\t\tindex:index, \n\t\t\t\t\t\t\tholder:holder\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\t_appendImage(index, item, baseDiv, item.img, true, true);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t} else if(item.src && !item.loadError) {\n\t\t\t\t// image object is created every time, due to bugs of image loading & delay when switching images\n\t\t\t\timg = framework.createEl('pswp__img', 'img');\n\t\t\t\timg.style.opacity = 1;\n\t\t\t\timg.src = item.src;\n\t\t\t\t_setImageSize(item, img);\n\t\t\t\t_appendImage(index, item, baseDiv, img, true);\n\t\t\t}\n\t\t\t\n\n\t\t\tif(!_initialContentSet && index === _currentItemIndex) {\n\t\t\t\t_currZoomElementStyle = baseDiv.style;\n\t\t\t\t_showOrHide(item, (img ||item.img) );\n\t\t\t} else {\n\t\t\t\t_applyZoomPanToItem(item);\n\t\t\t}\n\n\t\t\tholder.el.innerHTML = '';\n\t\t\tholder.el.appendChild(baseDiv);\n\t\t},\n\n\t\tcleanSlide: function( item ) {\n\t\t\tif(item.img ) {\n\t\t\t\titem.img.onload = item.img.onerror = null;\n\t\t\t}\n\t\t\titem.loaded = item.loading = item.img = item.imageAppended = false;\n\t\t}\n\n\t}\n});\n\n/*>>items-controller*/\n\n/*>>tap*/\n/**\n * tap.js:\n *\n * Displatches tap and double-tap events.\n * \n */\n\nvar tapTimer,\n\ttapReleasePoint = {},\n\t_dispatchTapEvent = function(origEvent, releasePoint, pointerType) {\t\t\n\t\tvar e = document.createEvent( 'CustomEvent' ),\n\t\t\teDetail = {\n\t\t\t\torigEvent:origEvent, \n\t\t\t\ttarget:origEvent.target, \n\t\t\t\treleasePoint: releasePoint, \n\t\t\t\tpointerType:pointerType || 'touch'\n\t\t\t};\n\n\t\te.initCustomEvent( 'pswpTap', true, true, eDetail );\n\t\torigEvent.target.dispatchEvent(e);\n\t};\n\n_registerModule('Tap', {\n\tpublicMethods: {\n\t\tinitTap: function() {\n\t\t\t_listen('firstTouchStart', self.onTapStart);\n\t\t\t_listen('touchRelease', self.onTapRelease);\n\t\t\t_listen('destroy', function() {\n\t\t\t\ttapReleasePoint = {};\n\t\t\t\ttapTimer = null;\n\t\t\t});\n\t\t},\n\t\tonTapStart: function(touchList) {\n\t\t\tif(touchList.length > 1) {\n\t\t\t\tclearTimeout(tapTimer);\n\t\t\t\ttapTimer = null;\n\t\t\t}\n\t\t},\n\t\tonTapRelease: function(e, releasePoint) {\n\t\t\tif(!releasePoint) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif(!_moved && !_isMultitouch && !_numAnimations) {\n\t\t\t\tvar p0 = releasePoint;\n\t\t\t\tif(tapTimer) {\n\t\t\t\t\tclearTimeout(tapTimer);\n\t\t\t\t\ttapTimer = null;\n\n\t\t\t\t\t// Check if taped on the same place\n\t\t\t\t\tif ( _isNearbyPoints(p0, tapReleasePoint) ) {\n\t\t\t\t\t\t_shout('doubleTap', p0);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif(releasePoint.type === 'mouse') {\n\t\t\t\t\t_dispatchTapEvent(e, releasePoint, 'mouse');\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tvar clickedTagName = e.target.tagName.toUpperCase();\n\t\t\t\t// avoid double tap delay on buttons and elements that have class pswp__single-tap\n\t\t\t\tif(clickedTagName === 'BUTTON' || framework.hasClass(e.target, 'pswp__single-tap') ) {\n\t\t\t\t\t_dispatchTapEvent(e, releasePoint);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t_equalizePoints(tapReleasePoint, p0);\n\n\t\t\t\ttapTimer = setTimeout(function() {\n\t\t\t\t\t_dispatchTapEvent(e, releasePoint);\n\t\t\t\t\ttapTimer = null;\n\t\t\t\t}, 300);\n\t\t\t}\n\t\t}\n\t}\n});\n\n/*>>tap*/\n\n/*>>desktop-zoom*/\n/**\n *\n * desktop-zoom.js:\n *\n * - Binds mousewheel event for paning zoomed image.\n * - Manages \"dragging\", \"zoomed-in\", \"zoom-out\" classes.\n * (which are used for cursors and zoom icon)\n * - Adds toggleDesktopZoom function.\n * \n */\n\nvar _wheelDelta;\n\t\n_registerModule('DesktopZoom', {\n\n\tpublicMethods: {\n\n\t\tinitDesktopZoom: function() {\n\n\t\t\tif(_oldIE) {\n\t\t\t\t// no zoom for old IE (<=8)\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif(_likelyTouchDevice) {\n\t\t\t\t// if detected hardware touch support, we wait until mouse is used,\n\t\t\t\t// and only then apply desktop-zoom features\n\t\t\t\t_listen('mouseUsed', function() {\n\t\t\t\t\tself.setupDesktopZoom();\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tself.setupDesktopZoom(true);\n\t\t\t}\n\n\t\t},\n\n\t\tsetupDesktopZoom: function(onInit) {\n\n\t\t\t_wheelDelta = {};\n\n\t\t\tvar events = 'wheel mousewheel DOMMouseScroll';\n\t\t\t\n\t\t\t_listen('bindEvents', function() {\n\t\t\t\tframework.bind(template, events, self.handleMouseWheel);\n\t\t\t});\n\n\t\t\t_listen('unbindEvents', function() {\n\t\t\t\tif(_wheelDelta) {\n\t\t\t\t\tframework.unbind(template, events, self.handleMouseWheel);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tself.mouseZoomedIn = false;\n\n\t\t\tvar hasDraggingClass,\n\t\t\t\tupdateZoomable = function() {\n\t\t\t\t\tif(self.mouseZoomedIn) {\n\t\t\t\t\t\tframework.removeClass(template, 'pswp--zoomed-in');\n\t\t\t\t\t\tself.mouseZoomedIn = false;\n\t\t\t\t\t}\n\t\t\t\t\tif(_currZoomLevel < 1) {\n\t\t\t\t\t\tframework.addClass(template, 'pswp--zoom-allowed');\n\t\t\t\t\t} else {\n\t\t\t\t\t\tframework.removeClass(template, 'pswp--zoom-allowed');\n\t\t\t\t\t}\n\t\t\t\t\tremoveDraggingClass();\n\t\t\t\t},\n\t\t\t\tremoveDraggingClass = function() {\n\t\t\t\t\tif(hasDraggingClass) {\n\t\t\t\t\t\tframework.removeClass(template, 'pswp--dragging');\n\t\t\t\t\t\thasDraggingClass = false;\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t_listen('resize' , updateZoomable);\n\t\t\t_listen('afterChange' , updateZoomable);\n\t\t\t_listen('pointerDown', function() {\n\t\t\t\tif(self.mouseZoomedIn) {\n\t\t\t\t\thasDraggingClass = true;\n\t\t\t\t\tframework.addClass(template, 'pswp--dragging');\n\t\t\t\t}\n\t\t\t});\n\t\t\t_listen('pointerUp', removeDraggingClass);\n\n\t\t\tif(!onInit) {\n\t\t\t\tupdateZoomable();\n\t\t\t}\n\t\t\t\n\t\t},\n\n\t\thandleMouseWheel: function(e) {\n\n\t\t\tif(_currZoomLevel <= self.currItem.fitRatio) {\n\t\t\t\tif( _options.modal ) {\n\n\t\t\t\t\tif (!_options.closeOnScroll || _numAnimations || _isDragging) {\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t} else if(_transformKey && Math.abs(e.deltaY) > 2) {\n\t\t\t\t\t\t// close PhotoSwipe\n\t\t\t\t\t\t// if browser supports transforms & scroll changed enough\n\t\t\t\t\t\t_closedByScroll = true;\n\t\t\t\t\t\tself.close();\n\t\t\t\t\t}\n\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\t// allow just one event to fire\n\t\t\te.stopPropagation();\n\n\t\t\t// https://developer.mozilla.org/en-US/docs/Web/Events/wheel\n\t\t\t_wheelDelta.x = 0;\n\n\t\t\tif('deltaX' in e) {\n\t\t\t\tif(e.deltaMode === 1 /* DOM_DELTA_LINE */) {\n\t\t\t\t\t// 18 - average line height\n\t\t\t\t\t_wheelDelta.x = e.deltaX * 18;\n\t\t\t\t\t_wheelDelta.y = e.deltaY * 18;\n\t\t\t\t} else {\n\t\t\t\t\t_wheelDelta.x = e.deltaX;\n\t\t\t\t\t_wheelDelta.y = e.deltaY;\n\t\t\t\t}\n\t\t\t} else if('wheelDelta' in e) {\n\t\t\t\tif(e.wheelDeltaX) {\n\t\t\t\t\t_wheelDelta.x = -0.16 * e.wheelDeltaX;\n\t\t\t\t}\n\t\t\t\tif(e.wheelDeltaY) {\n\t\t\t\t\t_wheelDelta.y = -0.16 * e.wheelDeltaY;\n\t\t\t\t} else {\n\t\t\t\t\t_wheelDelta.y = -0.16 * e.wheelDelta;\n\t\t\t\t}\n\t\t\t} else if('detail' in e) {\n\t\t\t\t_wheelDelta.y = e.detail;\n\t\t\t} else {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t_calculatePanBounds(_currZoomLevel, true);\n\n\t\t\tvar newPanX = _panOffset.x - _wheelDelta.x,\n\t\t\t\tnewPanY = _panOffset.y - _wheelDelta.y;\n\n\t\t\t// only prevent scrolling in nonmodal mode when not at edges\n\t\t\tif (_options.modal ||\n\t\t\t\t(\n\t\t\t\tnewPanX <= _currPanBounds.min.x && newPanX >= _currPanBounds.max.x &&\n\t\t\t\tnewPanY <= _currPanBounds.min.y && newPanY >= _currPanBounds.max.y\n\t\t\t\t) ) {\n\t\t\t\te.preventDefault();\n\t\t\t}\n\n\t\t\t// TODO: use rAF instead of mousewheel?\n\t\t\tself.panTo(newPanX, newPanY);\n\t\t},\n\n\t\ttoggleDesktopZoom: function(centerPoint) {\n\t\t\tcenterPoint = centerPoint || {x:_viewportSize.x/2 + _offset.x, y:_viewportSize.y/2 + _offset.y };\n\n\t\t\tvar doubleTapZoomLevel = _options.getDoubleTapZoom(true, self.currItem);\n\t\t\tvar zoomOut = _currZoomLevel === doubleTapZoomLevel;\n\t\t\t\n\t\t\tself.mouseZoomedIn = !zoomOut;\n\n\t\t\tself.zoomTo(zoomOut ? self.currItem.initialZoomLevel : doubleTapZoomLevel, centerPoint, 333);\n\t\t\tframework[ (!zoomOut ? 'add' : 'remove') + 'Class'](template, 'pswp--zoomed-in');\n\t\t}\n\n\t}\n});\n\n\n/*>>desktop-zoom*/\n\n/*>>history*/\n/**\n *\n * history.js:\n *\n * - Back button to close gallery.\n * \n * - Unique URL for each slide: example.com/&pid=1&gid=3\n * (where PID is picture index, and GID and gallery index)\n * \n * - Switch URL when slides change.\n * \n */\n\n\nvar _historyDefaultOptions = {\n\thistory: true,\n\tgalleryUID: 1\n};\n\nvar _historyUpdateTimeout,\n\t_hashChangeTimeout,\n\t_hashAnimCheckTimeout,\n\t_hashChangedByScript,\n\t_hashChangedByHistory,\n\t_hashReseted,\n\t_initialHash,\n\t_historyChanged,\n\t_closedFromURL,\n\t_urlChangedOnce,\n\t_windowLoc,\n\n\t_supportsPushState,\n\n\t_getHash = function() {\n\t\treturn _windowLoc.hash.substring(1);\n\t},\n\t_cleanHistoryTimeouts = function() {\n\n\t\tif(_historyUpdateTimeout) {\n\t\t\tclearTimeout(_historyUpdateTimeout);\n\t\t}\n\n\t\tif(_hashAnimCheckTimeout) {\n\t\t\tclearTimeout(_hashAnimCheckTimeout);\n\t\t}\n\t},\n\n\t// pid - Picture index\n\t// gid - Gallery index\n\t_parseItemIndexFromURL = function() {\n\t\tvar hash = _getHash(),\n\t\t\tparams = {};\n\n\t\tif(hash.length < 5) { // pid=1\n\t\t\treturn params;\n\t\t}\n\n\t\tvar i, vars = hash.split('&');\n\t\tfor (i = 0; i < vars.length; i++) {\n\t\t\tif(!vars[i]) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tvar pair = vars[i].split('=');\t\n\t\t\tif(pair.length < 2) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tparams[pair[0]] = pair[1];\n\t\t}\n\t\tif(_options.galleryPIDs) {\n\t\t\t// detect custom pid in hash and search for it among the items collection\n\t\t\tvar searchfor = params.pid;\n\t\t\tparams.pid = 0; // if custom pid cannot be found, fallback to the first item\n\t\t\tfor(i = 0; i < _items.length; i++) {\n\t\t\t\tif(_items[i].pid === searchfor) {\n\t\t\t\t\tparams.pid = i;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tparams.pid = parseInt(params.pid,10)-1;\n\t\t}\n\t\tif( params.pid < 0 ) {\n\t\t\tparams.pid = 0;\n\t\t}\n\t\treturn params;\n\t},\n\t_updateHash = function() {\n\n\t\tif(_hashAnimCheckTimeout) {\n\t\t\tclearTimeout(_hashAnimCheckTimeout);\n\t\t}\n\n\n\t\tif(_numAnimations || _isDragging) {\n\t\t\t// changing browser URL forces layout/paint in some browsers, which causes noticable lag during animation\n\t\t\t// that's why we update hash only when no animations running\n\t\t\t_hashAnimCheckTimeout = setTimeout(_updateHash, 500);\n\t\t\treturn;\n\t\t}\n\t\t\n\t\tif(_hashChangedByScript) {\n\t\t\tclearTimeout(_hashChangeTimeout);\n\t\t} else {\n\t\t\t_hashChangedByScript = true;\n\t\t}\n\n\n\t\tvar pid = (_currentItemIndex + 1);\n\t\tvar item = _getItemAt( _currentItemIndex );\n\t\tif(item.hasOwnProperty('pid')) {\n\t\t\t// carry forward any custom pid assigned to the item\n\t\t\tpid = item.pid;\n\t\t}\n\t\tvar newHash = _initialHash + '&' + 'gid=' + _options.galleryUID + '&' + 'pid=' + pid;\n\n\t\tif(!_historyChanged) {\n\t\t\tif(_windowLoc.hash.indexOf(newHash) === -1) {\n\t\t\t\t_urlChangedOnce = true;\n\t\t\t}\n\t\t\t// first time - add new hisory record, then just replace\n\t\t}\n\n\t\tvar newURL = _windowLoc.href.split('#')[0] + '#' + newHash;\n\n\t\tif( _supportsPushState ) {\n\n\t\t\tif('#' + newHash !== window.location.hash) {\n\t\t\t\thistory[_historyChanged ? 'replaceState' : 'pushState']('', document.title, newURL);\n\t\t\t}\n\n\t\t} else {\n\t\t\tif(_historyChanged) {\n\t\t\t\t_windowLoc.replace( newURL );\n\t\t\t} else {\n\t\t\t\t_windowLoc.hash = newHash;\n\t\t\t}\n\t\t}\n\t\t\n\t\t\n\n\t\t_historyChanged = true;\n\t\t_hashChangeTimeout = setTimeout(function() {\n\t\t\t_hashChangedByScript = false;\n\t\t}, 60);\n\t};\n\n\n\n\t\n\n_registerModule('History', {\n\n\t\n\n\tpublicMethods: {\n\t\tinitHistory: function() {\n\n\t\t\tframework.extend(_options, _historyDefaultOptions, true);\n\n\t\t\tif( !_options.history ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\n\t\t\t_windowLoc = window.location;\n\t\t\t_urlChangedOnce = false;\n\t\t\t_closedFromURL = false;\n\t\t\t_historyChanged = false;\n\t\t\t_initialHash = _getHash();\n\t\t\t_supportsPushState = ('pushState' in history);\n\n\n\t\t\tif(_initialHash.indexOf('gid=') > -1) {\n\t\t\t\t_initialHash = _initialHash.split('&gid=')[0];\n\t\t\t\t_initialHash = _initialHash.split('?gid=')[0];\n\t\t\t}\n\t\t\t\n\n\t\t\t_listen('afterChange', self.updateURL);\n\t\t\t_listen('unbindEvents', function() {\n\t\t\t\tframework.unbind(window, 'hashchange', self.onHashChange);\n\t\t\t});\n\n\n\t\t\tvar returnToOriginal = function() {\n\t\t\t\t_hashReseted = true;\n\t\t\t\tif(!_closedFromURL) {\n\n\t\t\t\t\tif(_urlChangedOnce) {\n\t\t\t\t\t\thistory.back();\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tif(_initialHash) {\n\t\t\t\t\t\t\t_windowLoc.hash = _initialHash;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif (_supportsPushState) {\n\n\t\t\t\t\t\t\t\t// remove hash from url without refreshing it or scrolling to top\n\t\t\t\t\t\t\t\thistory.pushState('', document.title, _windowLoc.pathname + _windowLoc.search );\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t_windowLoc.hash = '';\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\t\n\t\t\t\t}\n\n\t\t\t\t_cleanHistoryTimeouts();\n\t\t\t};\n\n\n\t\t\t_listen('unbindEvents', function() {\n\t\t\t\tif(_closedByScroll) {\n\t\t\t\t\t// if PhotoSwipe is closed by scroll, we go \"back\" before the closing animation starts\n\t\t\t\t\t// this is done to keep the scroll position\n\t\t\t\t\treturnToOriginal();\n\t\t\t\t}\n\t\t\t});\n\t\t\t_listen('destroy', function() {\n\t\t\t\tif(!_hashReseted) {\n\t\t\t\t\treturnToOriginal();\n\t\t\t\t}\n\t\t\t});\n\t\t\t_listen('firstUpdate', function() {\n\t\t\t\t_currentItemIndex = _parseItemIndexFromURL().pid;\n\t\t\t});\n\n\t\t\t\n\n\t\t\t\n\t\t\tvar index = _initialHash.indexOf('pid=');\n\t\t\tif(index > -1) {\n\t\t\t\t_initialHash = _initialHash.substring(0, index);\n\t\t\t\tif(_initialHash.slice(-1) === '&') {\n\t\t\t\t\t_initialHash = _initialHash.slice(0, -1);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\n\t\t\tsetTimeout(function() {\n\t\t\t\tif(_isOpen) { // hasn't destroyed yet\n\t\t\t\t\tframework.bind(window, 'hashchange', self.onHashChange);\n\t\t\t\t}\n\t\t\t}, 40);\n\t\t\t\n\t\t},\n\t\tonHashChange: function() {\n\n\t\t\tif(_getHash() === _initialHash) {\n\n\t\t\t\t_closedFromURL = true;\n\t\t\t\tself.close();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif(!_hashChangedByScript) {\n\n\t\t\t\t_hashChangedByHistory = true;\n\t\t\t\tself.goTo( _parseItemIndexFromURL().pid );\n\t\t\t\t_hashChangedByHistory = false;\n\t\t\t}\n\t\t\t\n\t\t},\n\t\tupdateURL: function() {\n\n\t\t\t// Delay the update of URL, to avoid lag during transition, \n\t\t\t// and to not to trigger actions like \"refresh page sound\" or \"blinking favicon\" to often\n\t\t\t\n\t\t\t_cleanHistoryTimeouts();\n\t\t\t\n\n\t\t\tif(_hashChangedByHistory) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif(!_historyChanged) {\n\t\t\t\t_updateHash(); // first time\n\t\t\t} else {\n\t\t\t\t_historyUpdateTimeout = setTimeout(_updateHash, 800);\n\t\t\t}\n\t\t}\n\t\n\t}\n});\n\n\n/*>>history*/\n\tframework.extend(self, publicMethods); };\n\treturn PhotoSwipe;\n});","'use strict';\n\nvar base = require('base/product/base');\nvar detail = require('base/product/detail');\nvar detailUpdateAddToCartEnableDisableOtherElements = detail.methods.updateAddToCartEnableDisableOtherElements;\n\nvar PhotoSwipeDefault = require('photoswipe/dist/photoswipe-ui-default.js');\nvar PhotoSwipe = require('photoswipe/dist/photoswipe.js');\nconst { Splide } = require('@splidejs/splide/dist/js/splide.cjs.js');\n\nlocalStorage.setItem('productIdViewed', '.product[data-pid=\"' + $('.product-id').first().text() + '\"]');\n\nif (window.dataLayer) {\n $('body').trigger('gtm:pdp:view', {\n productId: $('.product-id').first().text()\n });\n}\n\nlet mainGallery;\n\nfunction initGallery() {\n let gallery = document.querySelector('.pdp-media__gallery');\n if (gallery) {\n mainGallery = new Splide('.pdp-media__gallery', {\n type: 'loop',\n pagination: false,\n lazyLoad: 'nearby'\n });\n\n let thumbs = new Splide('.pdp-media__thumbs', {\n isNavigation: true,\n pagination: false,\n arrows: false,\n fixedWidth: 100,\n gap: 16\n });\n\n thumbs.mount();\n mainGallery.sync(thumbs);\n mainGallery.mount();\n }\n}\n\n$(document).ready(function () {\n $('body').trigger('collect:pdp:view', {\n productId: $('.product-id').first().text()\n });\n});\n\nfunction initPhotoSwipeFromDOM(gallerySelector) {\n // parse slide data (url, title, size ...) from DOM elements\n // (children of gallerySelector)\n var parseThumbnailElements = function parseThumbnailElements(el) {\n var thumbElements = el.querySelectorAll('.splide__slide:not(.splide__slide--clone)'),\n numNodes = thumbElements.length,\n items = [],\n figureEl,\n linkEl,\n size,\n item;\n\n for (var i = 0; i < numNodes; i++) {\n figureEl = thumbElements[i]; //
      element\n // include only element nodes\n\n if (figureEl.nodeType !== 1) {\n continue;\n }\n\n linkEl = figureEl.children[0]; // element\n\n if (linkEl.tagName && linkEl.tagName !== 'A') {\n continue;\n } else {\n size = linkEl.getAttribute('data-size').split('x'); // create slide object\n\n item = {\n src: linkEl.getAttribute('href'),\n w: parseInt(size[0], 10),\n h: parseInt(size[1], 10)\n };\n \n if (figureEl.children.length > 1) {\n //
      content\n item.title = figureEl.children[1].innerHTML;\n }\n \n if (linkEl.children.length > 0) {\n // thumbnail element, retrieving thumbnail url\n item.msrc = linkEl.children[0].getAttribute('src');\n }\n }\n\n item.el = figureEl; // save link to element for getThumbBoundsFn\n\n items.push(item);\n }\n\n return items;\n }; // find nearest parent element\n\n\n var closest = function closest(el, fn) {\n return el && (fn(el) ? el : closest(el.parentNode, fn));\n }; // triggers when user clicks on thumbnail\n\n\n var onThumbnailsClick = function onThumbnailsClick(e) {\n e = e || window.event;\n e.preventDefault ? e.preventDefault() : e.returnValue = false;\n var eTarget = e.target || e.srcElement; // find root element of slide\n\n var clickedListItem = closest(eTarget, function (el) {\n return el.tagName && el.tagName.toUpperCase() === 'LI';\n });\n\n if (eTarget.tagName === 'VIDEO') {\n return;\n }\n\n if (!clickedListItem) {\n return;\n } // find index of clicked item by looping through all child nodes\n // alternatively, you may define index via data- attribute\n\n\n var clickedGallery = clickedListItem.parentNode,\n childNodes = clickedListItem.parentNode.querySelectorAll('.splide__slide:not(.splide__slide--clone)'),\n numChildNodes = childNodes.length,\n nodeIndex = 0,\n index;\n\n for (var i = 0; i < numChildNodes; i++) {\n if (childNodes[i].nodeType !== 1) {\n continue;\n }\n\n if (childNodes[i] === clickedListItem) {\n index = nodeIndex;\n break;\n }\n\n nodeIndex++;\n }\n\n if (index >= 0) {\n // open PhotoSwipe if valid index found\n openPhotoSwipe(index, clickedGallery);\n }\n\n return false;\n }; // parse picture index and gallery index from URL (#&pid=1&gid=2)\n\n\n var photoswipeParseHash = function photoswipeParseHash() {\n var hash = window.location.hash.substring(1),\n params = {};\n\n if (hash.length < 5) {\n return params;\n }\n\n var vars = hash.split('&');\n\n for (var i = 0; i < vars.length; i++) {\n if (!vars[i]) {\n continue;\n }\n\n var pair = vars[i].split('=');\n\n if (pair.length < 2) {\n continue;\n }\n\n params[pair[0]] = pair[1];\n }\n\n if (params.gid) {\n params.gid = parseInt(params.gid, 10);\n }\n\n return params;\n };\n\n var openPhotoSwipe = function openPhotoSwipe(index, galleryElement, disableAnimation, fromURL) {\n var pswpElement = document.querySelectorAll('.pswp')[0],\n gallery,\n options,\n items;\n items = parseThumbnailElements(galleryElement); // #################### 3/4 define photoswipe options (if needed) #################### \n // https://photoswipe.com/documentation/options.html //\n\n options = {\n history: false,\n bgOpacity: 0.9,\n\n /* 'showHideOpacity' uncomment this If dimensions of your small thumbnail don't match dimensions of large image */\n showHideOpacity: true,\n // Buttons/elements\n closeEl: true,\n captionEl: true,\n fullscreenEl: true,\n zoomEl: true,\n shareEl: false,\n counterEl: false,\n arrowEl: true,\n preloaderEl: true,\n // define gallery index (for URL)\n galleryUID: galleryElement.getAttribute('data-pswp-uid'),\n // getDoubleTapZoom: function(isMouseClick, item) {\n // \treturn 4;\n // },\n getThumbBoundsFn: function getThumbBoundsFn(index) {\n // See Options -> getThumbBoundsFn section of documentation for more info\n var thumbnail = items[index].el.getElementsByTagName('img')[0],\n // find thumbnail\n pageYScroll = window.pageYOffset || document.documentElement.scrollTop,\n rect = thumbnail.getBoundingClientRect();\n return {\n x: rect.left,\n y: rect.top + pageYScroll,\n w: rect.width\n };\n }\n }; // PhotoSwipe opened from URL\n\n if (fromURL) {\n if (options.galleryPIDs) {\n // parse real index when custom PIDs are used\n // http://photoswipe.com/documentation/faq.html#custom-pid-in-url\n for (var j = 0; j < items.length; j++) {\n if (items[j].pid == index) {\n options.index = j;\n break;\n }\n }\n } else {\n // in URL indexes start from 1\n options.index = parseInt(index, 10) - 1;\n }\n } else {\n options.index = parseInt(index, 10);\n } // exit if index not found\n\n\n if (isNaN(options.index)) {\n return;\n }\n\n if (disableAnimation) {\n options.showAnimationDuration = 0;\n } // Pass data to PhotoSwipe and initialize it\n\n gallery = new PhotoSwipe(pswpElement, PhotoSwipeDefault, items, options);\n gallery.init();\n /* ########### PART 4 - EXTRA CODE ########### */\n\n /* EXTRA CODE (NOT FROM photoswipe CORE) - \n 1/2. UPDATE GALLERY POSITION TO THE 'CURRENT' ZOOM_IN IMAGE (BETTER UI) */\n // photoswipe event: Gallery unbinds events\n // (triggers before closing animation)\n\n gallery.listen('unbindEvents', function () {\n // The index of the current photoswipe slide\n var getCurrentIndex = gallery.getCurrentIndex(); // Update position of the slider\n\n mainGallery.go(getCurrentIndex);\n });\n }; // loop through all gallery elements and bind events\n\n\n var galleryElements = document.querySelectorAll(gallerySelector);\n\n for (var i = 0, l = galleryElements.length; i < l; i++) {\n galleryElements[i].setAttribute('data-pswp-uid', i + 1);\n galleryElements[i].onclick = onThumbnailsClick;\n } // Parse URL and open gallery if it contains #&pid=3&gid=1\n\n\n var hashData = photoswipeParseHash();\n\n if (hashData.pid && hashData.gid) {\n openPhotoSwipe(hashData.pid, galleryElements[hashData.gid - 1], true, true);\n }\n}; // execute above function\n\n\n$(document).ready(function () {\n if (typeof PhotoSwipe !== 'undefined') {\n initPhotoSwipeFromDOM('.gallery');\n }\n});\n\nfunction isDesktop() {\n return $(window).width() >= 1220;\n}\n\n/**\n * Generates the modal window on the first call.\n *\n */\nfunction getModalHtmlElement(modalId) {\n if ($('.' + modalId).length !== 0) {\n $('.' + modalId).remove();\n }\n var htmlString = '' +\n '
      ' +\n '
      ' +\n '' +\n '
      ' +\n '
      ' +\n ' ' +\n '
      ' +\n '
      ' +\n '
      ' +\n '
      ' +\n '
      ';\n $('body').append(htmlString);\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 * 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 * 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 * 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 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 || $($el).closest('.product-detail').find('.quantity-select').length > 0)) {\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 * 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 = $('
      ').append($.parseHTML(html));\n\n var body = $html.find('.choice-of-bonus-product');\n var footer = $html.find('.modal-footer').children();\n\n return {\n body: body,\n footer: footer\n };\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 = '' +\n '
      ' +\n '' +\n '
      ' +\n '' +\n '
      ' +\n '
      ' +\n ' ' + data.labels.selectprods + '' +\n ' ' +\n '
      ' +\n '
      ' +\n '
      ' +\n '
      ' +\n '
      ' +\n '
      ';\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 * Call Cart-AddCartBag that will show the current basket with the lasted added product\n * @param {element} addToCartBtn - Element that triggered the add to cart click event\n */\nfunction addToBag(addToCartBtn) {\n var addToBagUrl = $(addToCartBtn).data('addtobag');\n var pid = $('.product-detail').data('pid');\n if (addToBagUrl) {\n $.ajax({\n url: addToBagUrl + '?pid=' + pid,\n method: 'GET',\n success: function (data) {\n $('#addToBagModal').find('.add-to-bag').empty().append(data);\n $('#addToBagModal').addClass('p-0');\n $('#addToBagModal').modal('show');\n },\n error: function () {\n // no reporting urls hit on the server\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 * @param {element} addToCartBtn - Element that triggered the add to cart click event\n */\nfunction handlePostCartAdd(response, addToCartBtn) {\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 '
      '\n );\n }\n\n $('.add-to-cart-messages').append(\n '
      ' +\n response.message +\n '
      '\n );\n\n setTimeout(function () {\n $('.add-to-basket-alert').remove();\n }, 5000);\n }\n\n if (!response.error && !isDesktop()) {\n addToBag(addToCartBtn);\n } else if (isDesktop()) {\n $('.minicart').trigger('minicart:show');\n $('.minicart .popover').addClass('minicart__custom-popover');\n }\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\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.parent().addClass('selected');\n $attrValue.addClass('selected');\n $attrValue.siblings('.selected-assistive-text').text(msgs.assistiveSelectedText);\n } else {\n $attrValue.parent().removeClass('selected');\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 if (!attrValue.selectable) {\n $attrValue.parent().attr('disabled', true);\n } else {\n $attrValue.parent().removeAttr('disabled');\n }\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* Process TrueFit button with updated product id and color swatches\n*\n* @param {Object} response - Response from Ajax call\n*/\nfunction updateTrueFit(response) {\n const trueFitButton = document.querySelector('.tfc-fitrec-product');\n\n let color;\n response.product.variationAttributes.forEach((attribute) => {\n if (attribute.swatchable) {\n attribute.values.forEach((option) => {\n if (option.selected) {\n color = option.value;\n }\n });\n }\n });\n\n if (trueFitButton) {\n trueFitButton.setAttribute('data-styleid', response.product.id);\n if (color) {\n trueFitButton.setAttribute('data-colorid', color);\n }\n }\n}\n\n/**\n * Dynamically creates swipper 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 /* Main media container */\n var mediaContainer = $productContainer.find('.pdp-media');\n /* Main carousel */\n var carousel = $productContainer.find('.pdp-media__gallery');\n /* Thumbnail carousel */\n var carouselThumbnail = $productContainer.find('.pdp-media__thumbs');\n\n if (imgs.length > 1 && imgs[0] && imgs[0].url) {\n /* Create main content: next, prev, ul, ol */\n $(carousel).empty().append('
        ');\n $(carouselThumbnail).empty().append('
          ');\n\n var isQuickView = $(carousel).closest('.product-quickview');\n /* Create images */\n for (var i = 0; i < imgs.length; i++) {\n if (isQuickView.length > 0) {\n $('
        • \"'
        • ').appendTo($(carousel).find('.splide__list'));\n } else if (i === 0) {\n $(`
        • \n \n \"${imgs[i].alt}\n \n
        • `).appendTo($(carousel).find('.splide__list'));\n } else {\n $(`
        • \n \n \"${imgs[i].alt}\n \n
        • `).appendTo($(carousel).find('.splide__list'));\n }\n\n $(`
        • \"${imgs[i].alt}
        • `).appendTo($(carouselThumbnail).find('.splide__list'));\n }\n\n initGallery();\n\n if (typeof PhotoSwipe !== 'undefined') {\n initPhotoSwipeFromDOM('.gallery');\n }\n } else if (imgs[0] && imgs[0].url) {\n $(mediaContainer).empty();\n $(`\"${imgs[0].alt}\"`).appendTo($(mediaContainer));\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\n if (response.product.readyToOrder) {\n availabilityMessages.forEach(function (message) {\n availabilityValue += '
        • ' + message + '
        • ';\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 += '
          ' + attribute.label + ': ' +\n attribute.value + '
          ';\n });\n }\n });\n\n return html;\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['hi-res'];\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,\n $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,\n $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 * 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 // Update options\n $productContainer.find('.product-options').empty().html(optionsHtml);\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 '';\n }).join('');\n getQuantitySelector($productContainer).empty().html(optionsHtml);\n }\n}\n\nfunction updateQuantity(selectedQty, $productContainer) {\n if ($productContainer.parent('.bonus-product-item').length <= 0) {\n $productContainer.find('quantity-js').attr('data-url', selectedQty.url);\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,\n container: $productContainer\n });\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 updateQuantity(data.product.selectedQty, $productContainer);\n updateTrueFit(data);\n $('body').trigger('product:afterAttributeSelect', {\n data: data,\n container: $productContainer\n });\n $.spinner().stop();\n },\n error: function () {\n $.spinner().stop();\n }\n });\n }\n}\n\n/**\n * Add to cart on click event. This can only be triggered if the product has stock.\n */\nfunction addToCart() {\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 var addToCartBtn = $(this);\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 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, addToCartBtn);\n $('body').trigger('product:afterAddToCart', data);\n if (window.dataLayer) {\n $('body').trigger('gtm:pdp:add', {\n data: data,\n form: form\n });\n }\n $('body').trigger('collect:cart:addToCart', data);\n $.spinner().stop();\n miniCartReportingUrl(data.reportingURL);\n },\n error: function (error) {\n $.spinner().stop();\n }\n });\n }\n });\n}\n\n/**\n * Registering on change event on quantity selector. If store has been selected, exist function,\n * otherwise proceed to update attributes.\n */\nfunction availability() {\n $(document).on('change', '.quantity-select', function (e) {\n e.preventDefault();\n\n var searchPID = $(this).closest('.product-detail').attr('data-pid');\n var selectorPrefix = '.product-detail[data-pid=\"' + searchPID + '\"]';\n\n if ($(selectorPrefix + ' .selected-store-with-inventory').is(':visible')) {\n return;\n }\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\nfunction colorAttribute() {\n $(document).on('click', '[data-attr=\"color\"] button', function (e) {\n e.preventDefault();\n $.spinner().start();\n\n if ($(this).attr('disabled') || $(this).hasClass('selected')) {\n $.spinner().stop();\n return;\n }\n $('.color .color-val').text($(this).data('label'));\n $('.size-chart__wrapper .true-fit__button').attr('data-colorid', $(this).data('attr-value'));\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\nfunction selectAttribute() {\n $(document).on('change', 'select[class*=\"select-\"], .options-select', function (e) {\n e.preventDefault();\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\nfunction selectVariantAttribute() {\n $(document).on('click', '.product-attr-js', function (e) {\n e.preventDefault();\n $.spinner().start();\n\n if ($(this).hasClass('selected')) {\n $.spinner().stop();\n return;\n }\n\n $(this).parent().parent().find('.product-attr-js')\n .removeClass('selected');\n\n $(this).addClass('selected');\n var $productContainer = $(this).closest('.set-item');\n if (!$productContainer.length) {\n $productContainer = $(this).closest('.product-detail');\n }\n attributeSelect($(this).attr('value'), $productContainer);\n });\n}\n\n\nfunction sizeChartTemplate() {\n $(document).on('click', '.size-chart__js', function (e) {\n e.preventDefault();\n $.spinner().start();\n $.get($(this).attr('href'), function (data) {\n getModalHtmlElement('sizeChartModal');\n let newHeading = document.createElement('h2');\n newHeading.classList.add('h5', 'font-weight-bold');\n newHeading.setAttribute('id', 'modalTitle');\n let title = document.createTextNode(data.modalTitle);\n newHeading.appendChild(title);\n let headingDescription = document.createElement('p');\n let description = document.createTextNode(data.modalDescription);\n headingDescription.classList.add('size-chart__header-description');\n headingDescription.appendChild(description);\n\n let container = document.createElement('div');\n container.classList.add('size-chart__header-container');\n container.appendChild(newHeading);\n container.appendChild(headingDescription);\n $('#sizeChartModal').find('.modal-body').empty().append(data.content);\n $('#sizeChartModal').find('.modal-header').prepend(container);\n $('#sizeChartModal').modal('show');\n $.spinner().stop();\n });\n });\n}\n\nfunction inseamGuideTemplate() {\n $(document).on('click', '.inseam-guide__js', function (e) {\n e.preventDefault();\n $.spinner().start();\n $.get($(this).attr('href'), function (data) {\n getModalHtmlElement('inseamGuideModal');\n $('#inseamGuideModal').find('.modal-body').empty().append(data.content);\n $('#inseamGuideModal').modal('show');\n $.spinner().stop();\n });\n });\n}\n\n/**\n * Enable/disable Buy Now buttons based on product availability\n * @param {boolean} enableOrDisable - true or false\n */\nfunction updateAddToCartEnableDisableOtherElements(enableOrDisable) {\n detailUpdateAddToCartEnableDisableOtherElements.call(this, enableOrDisable);\n $('.salesforce-buynow-element').attr('disabled', enableOrDisable);\n}\n\nfunction updateAttributesAndDetails() {\n $('body').on('product:statusUpdate', function (e, data) {\n var $productContainer = $('.product-detail[data-pid=\"' + data.id + '\"]');\n\n if (data.longDescription) {\n $productContainer.find('.description-and-detail #productLongDescription .card-body')\n .empty()\n .html(data.longDescription);\n }\n });\n}\n\nvar exportDetails = $.extend({}, base, detail, {\n updateAttributesAndDetails: updateAttributesAndDetails,\n availability: availability,\n selectAttribute: selectAttribute,\n addToCart: addToCart,\n selectVariantAttribute: selectVariantAttribute,\n colorAttribute: colorAttribute,\n sizeChartTemplate: sizeChartTemplate,\n inseamGuideTemplate: inseamGuideTemplate\n});\n\nexportDetails.methods.updateAddToCartEnableDisableOtherElements = updateAddToCartEnableDisableOtherElements;\n\nexportDetails.initPhotoSwipeFromDOM = initPhotoSwipeFromDOM;\nexportDetails.initGallery = initGallery;\nmodule.exports = exportDetails;\n"],"sourceRoot":""}