{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./node_modules/moveto/dist/moveTo.js","webpack:///./node_modules/photoswipe/dist/photoswipe.esm.js","webpack:///./node_modules/prismjs/prism.js","webpack:///(webpack)/buildin/global.js","webpack:///./node_modules/ssr-window/ssr-window.esm.js","webpack:///./node_modules/dom7/dom7.esm.js","webpack:///./node_modules/swiper/shared/dom.js","webpack:///./node_modules/swiper/shared/utils.js","webpack:///./node_modules/swiper/shared/get-support.js","webpack:///./node_modules/swiper/shared/get-device.js","webpack:///./node_modules/swiper/shared/get-browser.js","webpack:///./node_modules/swiper/core/events-emitter.js","webpack:///./node_modules/swiper/core/update/index.js","webpack:///./node_modules/swiper/core/update/updateSize.js","webpack:///./node_modules/swiper/core/update/updateSlides.js","webpack:///./node_modules/swiper/core/update/updateAutoHeight.js","webpack:///./node_modules/swiper/core/update/updateSlidesOffset.js","webpack:///./node_modules/swiper/core/update/updateSlidesProgress.js","webpack:///./node_modules/swiper/core/update/updateProgress.js","webpack:///./node_modules/swiper/core/update/updateSlidesClasses.js","webpack:///./node_modules/swiper/core/update/updateActiveIndex.js","webpack:///./node_modules/swiper/core/update/updateClickedSlide.js","webpack:///./node_modules/swiper/core/transition/transitionEmit.js","webpack:///./node_modules/swiper/core/slide/index.js","webpack:///./node_modules/swiper/core/slide/slideTo.js","webpack:///./node_modules/swiper/core/slide/slideToLoop.js","webpack:///./node_modules/swiper/core/slide/slideNext.js","webpack:///./node_modules/swiper/core/slide/slidePrev.js","webpack:///./node_modules/swiper/core/slide/slideReset.js","webpack:///./node_modules/swiper/core/slide/slideToClosest.js","webpack:///./node_modules/swiper/core/slide/slideToClickedSlide.js","webpack:///./node_modules/swiper/core/events/onTouchStart.js","webpack:///./node_modules/swiper/core/events/onTouchMove.js","webpack:///./node_modules/swiper/core/events/onTouchEnd.js","webpack:///./node_modules/swiper/core/events/onResize.js","webpack:///./node_modules/swiper/core/events/onClick.js","webpack:///./node_modules/swiper/core/events/onScroll.js","webpack:///./node_modules/swiper/core/events/index.js","webpack:///./node_modules/swiper/core/breakpoints/setBreakpoint.js","webpack:///./node_modules/swiper/core/check-overflow/index.js","webpack:///./node_modules/swiper/core/defaults.js","webpack:///./node_modules/swiper/core/moduleExtendParams.js","webpack:///./node_modules/swiper/core/core.js","webpack:///./node_modules/swiper/core/translate/index.js","webpack:///./node_modules/swiper/core/translate/getTranslate.js","webpack:///./node_modules/swiper/core/translate/setTranslate.js","webpack:///./node_modules/swiper/core/translate/minTranslate.js","webpack:///./node_modules/swiper/core/translate/maxTranslate.js","webpack:///./node_modules/swiper/core/translate/translateTo.js","webpack:///./node_modules/swiper/core/transition/index.js","webpack:///./node_modules/swiper/core/transition/setTransition.js","webpack:///./node_modules/swiper/core/transition/transitionStart.js","webpack:///./node_modules/swiper/core/transition/transitionEnd.js","webpack:///./node_modules/swiper/core/loop/index.js","webpack:///./node_modules/swiper/core/loop/loopCreate.js","webpack:///./node_modules/swiper/core/loop/loopFix.js","webpack:///./node_modules/swiper/core/loop/loopDestroy.js","webpack:///./node_modules/swiper/core/grab-cursor/index.js","webpack:///./node_modules/swiper/core/grab-cursor/setGrabCursor.js","webpack:///./node_modules/swiper/core/grab-cursor/unsetGrabCursor.js","webpack:///./node_modules/swiper/core/breakpoints/index.js","webpack:///./node_modules/swiper/core/breakpoints/getBreakpoint.js","webpack:///./node_modules/swiper/core/classes/index.js","webpack:///./node_modules/swiper/core/classes/addClasses.js","webpack:///./node_modules/swiper/core/classes/removeClasses.js","webpack:///./node_modules/swiper/core/images/index.js","webpack:///./node_modules/swiper/core/images/loadImage.js","webpack:///./node_modules/swiper/core/images/preloadImages.js","webpack:///./node_modules/swiper/core/modules/resize/resize.js","webpack:///./node_modules/swiper/core/modules/observer/observer.js","webpack:///./node_modules/photoswipe/dist/photoswipe-lightbox.esm.js","webpack:///./node_modules/animejs/lib/anime.es.js","webpack:///./app/javascript/packs/plugins.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","MoveTo","defaults","tolerance","duration","easing","container","window","callback","easeOutQuart","b","mergeObject","obj1","obj2","obj3","keys","forEach","propertyName","countScrollTop","HTMLElement","scrollTop","pageYOffset","options","arguments","length","undefined","easeFunctions","this","registerTrigger","dom","_this","href","getAttribute","target","document","getElementById","substring","body","domOptions","concat","replace","$1","toLowerCase","isNaN","parseInt","_getOptionsFromTriggerDom","listener","e","preventDefault","move","addEventListener","removeEventListener","_this2","lastYOffset","distance","getBoundingClientRect","top","from","startTime","loop","currentTime","currentYOffset","timeElapsed","val","scroll","requestAnimationFrame","addEaseFunction","fn","createElement","className","tagName","appendToEl","el","appendChild","equalizePoints","p1","p2","x","y","id","roundPoint","Math","round","getDistanceBetween","abs","sqrt","pointsEqual","clamp","min","max","toTransformString","scale","propValue","setTransform","style","transform","setTransitionStyle","prop","ease","transition","setWidthHeight","w","h","width","height","LOAD_STATE","supportsPassive","DOMEvents","constructor","_pool","add","type","passive","_toggleListener","remove","removeAll","poolItem","unbind","skipPool","methodName","split","eType","filter","push","eventOptions","getViewportSize","pswp","getViewportSizeFn","newViewportSize","documentElement","clientWidth","innerHeight","parsePaddingOption","viewportSize","itemData","index","paddingValue","paddingFn","padding","legacyPropName","toUpperCase","slice","getPanAreaSize","PanBounds","slide","currZoomLevel","center","reset","update","_updateAxis","dispatch","axis","elSize","data","panAreaSize","correctPan","panOffset","ZoomLevel","maxWidth","maxHeight","elementSize","hRatio","vRatio","fit","fill","vFill","initial","_getInitial","secondary","_getSecondary","_getMax","zoomLevels","slideData","_parseZoomLevelOption","optionPrefix","optionValue","Number","Slide","isActive","currIndex","currentResolution","isFirstSlide","opener","isOpen","pan","content","contentLoader","getContentBySlide","bounds","prevDisplayedWidth","prevDisplayedHeight","setIsActive","activate","deactivate","append","holderElement","calculateSize","transformOrigin","load","appendHeavy","updateContentSize","innerHTML","zoomAndPanToInitial","applyCurrentZoomPan","heavyAppended","mainScroll","isShifted","defaultPrevented","destroy","hasSlide","resize","panTo","force","scaleMultiplier","sizeChanged","setDisplayedSize","getPlaceholderElement","placeholder","element","zoomTo","destZoomLevel","centerPoint","transitionDuration","ignoreBounds","isZoomable","animations","stopAllPan","prevZoomLevel","setZoomLevel","calculateZoomToPanOffset","finishTransition","_setResolution","startTransition","isPan","getCurrentTransform","onComplete","toggleZoom","zoomAnimationDuration","point","getViewportCenterPoint","zoomFactor","panX","panY","isPannable","_applyZoomTransform","currSlide","zoom","newResolution","DragHandler","gestures","startPan","start","stopAll","change","prevP1","dragAxis","closeOnVerticalDrag","isMultitouch","_setPanWithFriction","bgOpacity","_getVerticalDragRatio","applyBgOpacity","_panOrMoveMainScroll","end","velocity","indexDiff","currentSlideVisibilityRatio","getCurrSlideX","moveIndexBy","correctZoomPan","_finishPanGestureForAxis","panPos","restoreBgOpacity","projectedPosition","initialVelocity","decelerationRate","project","vDragRatio","projectedVDragRatio","close","correctedPanPosition","dampingRatio","initialBgOpacity","totalPanDist","startSpring","onUpdate","pos","animationProgressRatio","floor","delta","newMainScrollX","moveTo","newPan","allowPanToNext","currSlideMainScrollX","mainScrollShiftDiff","isLeftToRight","isRightToLeft","potentialPan","customFriction","getZoomPointsCenter","ZoomHandler","_startPan","_startZoomPoint","_zoomPoint","_startZoomLevel","_wasOverFitZoomLevel","startP1","startP2","minZoomLevel","maxZoomLevel","pinchToClose","_calculatePanForZoomLevel","ignoreGesture","destinationZoomLevel","currZoomLevelNeedsChange","initialPan","destinationPan","panNeedsChange","naturalFrequency","now","newZoomLevel","didTapOnMainContent","event","closest","TapHandler","click","originalEvent","targetClassList","classList","isImageClick","contains","isBackgroundClick","_doClickOrTapAction","tap","doubleTap","actionName","clickToCloseNonZoomable","toggle","Gestures","prevP2","_lastStartP1","_intervalP1","_numActivePoints","_ongoingPointers","_touchEventEnabled","_pointerEventEnabled","supportsTouch","navigator","maxTouchPoints","drag","tapHandler","on","events","scrollWrap","_onClick","_bindEvents","ontouchmove","ontouchend","pref","down","up","cancel","cancelEvent","onPointerDown","onPointerMove","onPointerUp","isMousePointer","pointerType","button","mouseDetected","_preventPointerEventBehaviour","_updatePoints","pointerDown","_clearTapTimer","isDragging","isZooming","_finishDrag","_updateStartPoints","_rafStopLoop","_rafRenderLoop","_calculateDragDirection","_intervalTime","Date","_velocityCalculated","_updateVelocity","_finishTap","_updatePrevPoints","raf","time","_getVelocity","indexOf","tapDelay","doubleTapAction","_tapTimer","setTimeout","clearTimeout","displacement","cancelAnimationFrame","pointerIndex","findIndex","ongoingPoiner","pointerId","splice","_convertEventPosToPoint","touches","diff","axisToCheck","pageX","offset","pageY","identifier","stopPropagation","MainScroll","resetPosition","resizeSlides","newSlideWidth","spacing","slideWidthChanged","slideWidth","itemHolders","itemHolder","_containerShiftIndex","_currPositionIndex","_prevPositionIndex","appendHolders","display","canBeSwiped","getNumItems","animate","velocityX","newIndex","potentialIndex","numSlides","canLoop","getLoopedIndex","stopMainScroll","destinationX","isMainScroll","updateCurrItem","currDiff","currDistance","positionDifference","tempHolder","diffAbs","shift","setContent","pop","unshift","updateLazy","dragging","newSlideIndexOffset","Keyboard","initialPointerPos","_focusRoot","_onFocusIn","_onKeyDown","lastActiveElement","activeElement","returnFocus","_wasFocused","focus","which","ctrlKey","metaKey","altKey","shiftKey","specialKeyUsed","keydownAction","isForward","keyCode","escKey","arrowKeys","template","CSSAnimation","props","_target","_onComplete","_onTransitionEnd","_firstFrameTimeout","_finalizeAnimation","_finished","onFinish","SpringEaser","_dampingRatio","_naturalFrequency","_dampedFrequency","easeFrame","deltaPosition","deltaTime","coeff","naturalDumpingPow","E","dumpedFCos","cos","dumpedFSin","sin","SpringAnimation","easer","prevTime","_onFinish","animationLoop","_raf","Animations","activeAnimations","_start","isSpring","animation","stop","isPanRunning","some","ScrollWheel","_onWheel","deltaX","deltaY","wheelToZoom","deltaMode","clientX","clientY","UIElement","elementHTML","html","isButton","title","ariaLabel","setAttribute","htmlData","isCustomSVG","svgData","out","join","size","outlineID","inner","addElementHTML","onInit","onClick","onclick","appendTo","topBar","applyFilters","initArrowButton","isNextButton","disabled","arrowPrev","order","arrowNext","closeButton","zoomButton","loadingIndicator","indicatorElement","isVisible","delayTimeout","setIndicatorVisibility","visible","updatePreloaderVisibility","isLoading","preloaderDelay","ui","counterIndicator","counterElement","innerText","indexIndicatorSep","setZoomedIn","isZoomedIn","UI","init","isRegistered","uiElementsData","sort","a","items","uiElementData","registerElement","_onZoomPanUpdate","elementData","isClosing","_lastUpdatedZoomLevel","currZoomLevelDiff","secondaryIsHigher","imageClickAction","PhotoSwipeEvent","details","assign","Placeholder","imageSrc","decoding","alt","src","parentNode","Content","instance","isAttached","state","removePlaceholder","keepPlaceholder","isLazy","reload","usePlaceholder","placeholderSrc","msrc","isImageContent","loadImage","srcset","complete","onLoaded","onload","onerror","onError","setSlide","displayError","isError","image","dataset","largestUsedSize","sizes","lazyLoad","errorMsgEl","errorMsg","isDecoding","decode","then","appendImage","catch","MIN_OPACITY","Opener","isClosed","_prepareOpen","open","isOpening","_duration","hideAnimationDuration","maxWidthToAnimate","_applyStartProps","_croppedZoom","off","showAnimationDuration","showHideAnimationType","showHideOpacity","_thumbBounds","_initialThumbBounds","getThumbBounds","_placeholder","_useAnimation","_animateZoom","Boolean","_animateRootOpacity","_animateBgOpacity","_opacityElement","bg","opacity","innerRect","_cropContainer1","_cropContainer2","overflow","_setClosedStateZoomPan","willChange","Promise","resolve","decoded","isDelaying","img","reject","finally","_initiate","setProperty","_animateToOpenState","_animateToClosedState","_onAnimationComplete","_animateTo","containerOnePanX","containerOnePanY","containerTwoPanX","containerTwoPanY","animProps","lazyLoadSlide","getItemData","createContentFromData","zoomLevel","ceil","lazyLoadData","ContentLoader","limit","preload","_cachedItems","loadSlideByIndex","getContentByIndex","addToCache","removeByIndex","indexToRemove","item","find","defaultOptions","bgClickAction","tapAction","_listeners","_filters","addFilter","priority","f1","f2","removeFilter","args","apply","numItems","dataSource","gallery","_getGalleryDOMElements","dataSourceItem","Array","isArray","Element","_domElementToItemData","galleryElement","children","childSelector","option","legacySelector","parent","elements","NodeList","selector","querySelectorAll","getElementsFromOption","linkEl","querySelector","pswpSrc","pswpSrcset","pswpWidth","pswpHeight","pswpType","thumbnailEl","currentSrc","pswpCropped","cropped","thumbCropped","super","_prepareOptions","_prevViewportSize","keyboard","isDestroying","_createMainStructure","rootClasses","mainClass","scrollWheel","updateSize","_initialItemData","_handlePageResize","_updatePageScrollOffset","goTo","next","prev","listeners","refreshSlideContent","slideIndex","potentialHolderIndex","holder","hasMouse","matchMedia","matches","test","userAgent","setScrollOffset","thumbBounds","thumbnail","thumbSelector","imageWidth","imageHeight","thumbAreaRect","fillZoomLevel","offsetX","offsetY","left","getCroppedBoundsByElement","getBoundsByElement","Prism","_self","lang","uniqueId","plainTextGrammar","_","manual","disableWorkerMessageHandler","util","encode","tokens","Token","alias","map","toString","objId","obj","clone","deepClone","visited","v","getLanguage","exec","parentElement","setLanguage","language","RegExp","currentScript","Error","err","stack","scripts","getElementsByTagName","defaultActivation","no","languages","plain","plaintext","text","txt","extend","redef","insertBefore","inside","before","insert","root","grammar","ret","token","newToken","old","DFS","propertyType","plugins","highlightAll","async","highlightAllUnder","env","hooks","run","highlightElement","nodeName","code","textContent","insertHighlightedCode","highlightedCode","hasAttribute","Worker","worker","filename","onmessage","evt","postMessage","JSON","stringify","immediateClose","highlight","tokenize","rest","tokenList","LinkedList","addAfter","head","matchGrammar","list","array","node","tail","toArray","all","callbacks","matchedStr","matchPattern","pattern","lookbehind","lastIndex","match","lookbehindLength","startNode","startPos","rematch","patterns","j","cause","patternObj","greedy","global","flags","source","currentNode","reach","str","removeCount","to","k","matchStr","after","removeFrom","removeRange","nestedRematch","newNode","count","tag","classes","attributes","aliases","message","parse","script","highlightAutomaticallyCallback","readyState","defer","WorkerGlobalScope","self","markup","includedCdataInside","def","attrName","mathml","svg","xml","ssml","atom","rss","string","css","addInlined","addAttribute","clike","javascript","regex","js","msMatchesSelector","webkitMatchesSelector","EXTENSIONS","STATUS_ATTR","STATUS_LOADING","STATUS_LOADED","SELECTOR","pre","extension","autoloader","loadLanguages","success","error","xhr","XMLHttpRequest","onreadystatechange","status","responseText","statusText","send","loadFile","range","comma","parseRange","lines","String","fileHighlight","logged","console","warn","g","Function","isObject","ssrDocument","blur","createEvent","initEvent","childNodes","createElementNS","importNode","location","hash","host","hostname","origin","pathname","protocol","search","getDocument","doc","ssrWindow","history","replaceState","pushState","go","back","CustomEvent","getComputedStyle","getPropertyValue","Image","screen","getWindow","win","Dom7","proto","__proto__","set","makeReactive","arrayFlat","arr","res","arrayFilter","$","context","trim","toCreate","tempParent","qsa","nodeType","uniqueArray","arrayUnique","noTrigger","shortcut","trigger","Methods","addClass","classNames","removeClass","hasClass","toggleClass","attr","attrs","removeAttr","removeAttribute","eventType","targetSelector","capture","handleLiveEvent","eventData","dom7EventData","is","parents","handleEvent","dom7LiveListeners","proxyListener","dom7Listeners","handlers","handler","dom7proxy","detail","bubbles","cancelable","dataIndex","dispatchEvent","transitionEnd","fireCallBack","outerWidth","includeMargins","styles","offsetWidth","parseFloat","outerHeight","offsetHeight","box","clientTop","clientLeft","scrollY","scrollLeft","scrollX","each","compareWith","child","previousSibling","eq","returnIndex","els","newChild","tempDiv","firstChild","prepend","nextElementSibling","nextAll","nextEls","previousElementSibling","prevAll","prevEls","foundElements","found","removeChild","writable","nextTick","delay","getTranslate","matrix","curTransform","transformMatrix","curStyle","currentStyle","WebKitCSSMatrix","webkitTransform","MozTransform","OTransform","MsTransform","msTransform","m41","m42","isNode","noExtend","nextSource","keysArray","nextIndex","len","nextKey","desc","getOwnPropertyDescriptor","__swiper__","setCSSProperty","varName","varValue","animateCSSModeScroll","_ref","swiper","targetPosition","side","startPosition","translate","params","speed","wrapperEl","scrollSnapType","cssModeFrameID","dir","isOutOfBound","current","getTime","progress","easeProgress","PI","currentPosition","scrollTo","deviceCached","getSupport","smoothScroll","touch","DocumentTouch","passiveListener","opts","calcSupport","getDevice","overrides","_temp","support","platform","ua","device","ios","android","screenWidth","screenHeight","ipad","ipod","iphone","windows","macos","os","calcDevice","getBrowser","isSafari","isWebView","calcBrowser","eventsListeners","destroyed","method","once","onceHandler","__emitterProxy","_len","_key","onAny","eventsAnyListeners","offAny","eventHandler","emit","_len2","_key2","$el","clientHeight","isHorizontal","isVertical","updateSlides","getDirectionLabel","getDirectionPropertyValue","label","$wrapperEl","swiperSize","rtlTranslate","rtl","wrongRTL","isVirtual","virtual","enabled","previousSlidesLength","slides","slideClass","slidesLength","snapGrid","slidesGrid","slidesSizesGrid","offsetBefore","slidesOffsetBefore","offsetAfter","slidesOffsetAfter","previousSnapGridLength","previousSlidesGridLength","spaceBetween","slidePosition","prevSlideSize","virtualSize","marginLeft","marginBottom","marginTop","marginRight","centeredSlides","cssMode","gridEnabled","grid","rows","slideSize","initSlides","shouldResetSlideSize","slidesPerView","breakpoints","updateSlide","slideStyles","currentTransform","currentWebKitTransform","roundLengths","paddingLeft","paddingRight","boxSizing","swiperSlideSize","slidesPerGroup","slidesPerGroupSkip","effect","setWrapperSize","updateWrapperSize","newSlidesGrid","slidesGridItem","centeredSlidesBounds","allSlidesSize","slideSizeValue","maxSnap","snap","centerInsufficientSlides","allSlidesOffset","snapIndex","addToSnapGrid","addToSlidesGrid","watchOverflow","checkOverflow","watchSlidesProgress","updateSlidesOffset","backFaceHiddenClass","containerModifierClass","hasClassBackfaceClassAdded","maxBackfaceHiddenSlides","updateAutoHeight","activeSlides","newHeight","setTransition","getSlideByIndex","visibleSlides","activeIndex","swiperSlideOffset","offsetLeft","offsetTop","updateSlidesProgress","offsetCenter","slideVisibleClass","visibleSlidesIndexes","slideOffset","slideProgress","minTranslate","originalSlideProgress","slideBefore","slideAfter","originalProgress","updateProgress","multiplier","translatesDiff","maxTranslate","isBeginning","isEnd","wasBeginning","wasEnd","autoHeight","updateSlidesClasses","realIndex","activeSlide","slideActiveClass","slideNextClass","slidePrevClass","slideDuplicateActiveClass","slideDuplicateNextClass","slideDuplicatePrevClass","slideDuplicateClass","nextSlide","prevSlide","emitSlidesClasses","updateActiveIndex","newActiveIndex","previousIndex","previousRealIndex","previousSnapIndex","normalizeSlideIndex","skip","initialized","runCallbacksOnInit","updateClickedSlide","slideFound","clickedSlide","clickedIndex","slideToClickedSlide","transitionEmit","runCallbacks","direction","step","slideTo","internal","indexAsNumber","isFinite","animating","preventInteractionOnTransition","initialSlide","normalizedTranslate","normalizedGrid","normalizedGridNext","allowSlideNext","allowSlidePrev","setTranslate","transitionStart","isH","_immediateVirtual","_swiperImmediateVirtual","behavior","onSlideToWrapperTransitionEnd","slideToLoop","loopedSlides","slideNext","perGroup","slidesPerGroupAuto","slidesPerViewDynamic","increment","loopPreventsSlide","loopFix","_clientLeft","rewind","slidePrev","normalize","normalizedSnapGrid","prevSnap","prevSnapIndex","prevIndex","slideReset","slideToClosest","threshold","currentSnap","slideToIndex","touchEventsData","$targetEl","touchEventsTarget","isTouchEvent","isTouched","isMoved","noSwipingClass","shadowRoot","path","noSwipingSelector","isTargetShadow","noSwiping","base","__closestFrom","assignedSlot","getRootNode","closestElement","allowClick","swipeHandler","currentX","targetTouches","currentY","startX","startY","edgeSwipeDetection","iOSEdgeSwipeDetection","edgeSwipeThreshold","iOSEdgeSwipeThreshold","innerWidth","allowTouchCallbacks","isScrolling","startMoving","touchStartTime","swipeDirection","allowThresholdMove","focusableElements","shouldPreventDefault","allowTouchMove","touchStartPreventDefault","touchStartForcePreventDefault","isContentEditable","freeMode","onTouchStart","targetTouch","changedTouches","preventedByNestedSwiper","touchReleaseOnEdges","diffX","diffY","touchAngle","atan2","touchMoveStopPropagation","nested","startTranslate","allowMomentumBounce","grabCursor","setGrabCursor","touchRatio","currentTranslate","disableParentSwiper","resistanceRatio","resistance","followFinger","onTouchMove","touchEndTime","timeDiff","pathTree","composedPath","lastClickTime","currentPos","onTouchEnd","stopIndex","groupSize","rewindFirstIndex","rewindLastIndex","ratio","longSwipesMs","longSwipes","longSwipesRatio","shortSwipes","navigation","nextEl","prevEl","onResize","setBreakpoint","autoplay","running","paused","preventClicks","preventClicksPropagation","stopImmediatePropagation","onScroll","newProgress","previousTranslate","dummyEventAttached","dummyEventListener","touchEvents","domMethod","swiperMethod","passiveListeners","updateOnWindowResize","isGridEnabled","resizeObserver","createElements","url","virtualTranslate","breakpointsBase","simulateTouch","uniqueNavElements","preloadImages","updateOnImagesReady","loopAdditionalSlides","loopFillGroupWithBlank","slideBlankClass","wrapperClass","_emitClasses","moduleExtendParams","allModulesParams","moduleParamName","moduleParams","auto","prototypes","eventsEmitter","byController","translateTo","translateBounds","newTranslate","onTranslateToWrapperTransitionEnd","loopCreate","$selector","blankSlidesNum","blankNode","prependSlides","appendSlides","cloneNode","loopDestroy","moving","isLocked","cursor","unsetGrabCursor","attachEvents","detachEvents","breakpoint","getBreakpoint","currentBreakpoint","breakpointParams","originalParams","wasMultiRow","isMultiRow","wasEnabled","emitContainerClasses","directionChanged","needsReLoop","changeDirection","isEnabled","disable","enable","containerEl","currentHeight","points","minRatio","substr","wasLocked","lastSlideIndex","lastSlideRightEdge","addClasses","suffixes","entries","prefix","resultClasses","prepareClasses","removeClasses","images","imageEl","checkForComplete","onReady","imagesLoaded","imagesToLoad","extendedDefaults","swipers","newParams","browser","__modules__","mod","extendParams","swiperParams","passedParams","eventName","desktop","touchEventsTouch","touchEventsDesktop","clickTimeout","velocities","setProgress","cls","getSlideClasses","slideEl","updates","view","exact","spv","breakLoop","translateValue","translated","newDirection","needUpdate","currentDirection","mount","mounted","getWrapperSelector","getWrapper","wrapper","deleteInstance","cleanStyles","deleteProps","static","newDefaults","installModule","prototypeGroup","protoMethod","use","observer","animationFrame","resizeHandler","orientationChangeHandler","ResizeObserver","newWidth","_ref2","contentBoxSize","contentRect","inlineSize","blockSize","observe","unobserve","observers","attach","MutationObserver","WebkitMutationObserver","mutations","observerUpdate","childList","characterData","observeParents","observeSlideChildren","containerParents","disconnect","_uid","onThumbnailsClick","gallerySelector","onLine","initialPoint","getClickedIndex","currentTarget","loadAndOpen","getClickedIndexFn","clickedTarget","clickedChildIndex","shouldOpen","promiseArray","pswpModuleType","pswpModule","openPromise","preloadFirstSlide","_preloadedContent","uid","iterableModules","mainModule","_openPhotoswipe","default","defaultInstanceSettings","begin","loopBegin","changeBegin","changeComplete","loopComplete","timelineOffset","defaultTweenSettings","endDelay","validTransforms","cache","CSS","springs","minMax","stringContains","applyArguments","func","pth","SVGElement","inp","HTMLInputElement","fnc","und","nil","hex","rgb","hsl","col","parseEasingParameters","spring","mass","stiffness","damping","w0","zeta","wd","solver","exp","cached","frame","elapsed","steps","eases","functionEasings","bezier","kSampleStepSize","A","aA1","aA2","B","C","calcBezier","aT","getSlope","mX1","mY1","mX2","mY2","sampleValues","Float32Array","getTForX","aX","intervalStart","currentSample","kSplineTableSize","guessForT","initialSlope","aGuessT","currentSlope","newtonRaphsonIterate","aA","aB","currentT","binarySubdivide","penner","linear","Sine","Circ","Back","Bounce","pow2","pow","Elastic","amplitude","period","asin","easeIn","parseEasings","selectString","filterArray","thisArg","result","flattenArray","reduce","HTMLCollection","arrayContains","cloneObject","replaceObjectProps","o1","o2","mergeObjects","colorToRgb","rgbValue","hexValue","hexToRgba","hslValue","hue2rgb","q","hslToRgba","getUnit","getFunctionValue","animatable","total","convertPxToUnit","unit","tempEl","parentEl","position","factor","convertedUnit","getCSSValue","uppercasePropName","getAnimationType","getElementTransforms","reg","transforms","Map","getTransformValue","propName","defaultVal","getTransformUnit","getOriginalTargetValue","getRelativeValue","operator","u","validateValue","originalUnit","unitLess","getDistance","getPolylineLength","previousPos","totalLength","numberOfItems","getItem","getTotalLength","getCircleLength","getRectLength","getLineLength","getPolygonLength","getParentSvg","pathEl","parentSvgEl","getParentSvgEl","rect","viewBoxAttr","viewBox","vW","vH","getPathProgress","isPathTargetInsideSVG","getPointAtLength","p0","scaleX","scaleY","decomposeValue","rgx","original","numbers","strings","parseTargets","targets","getAnimatables","parsed","normalizePropertyTweens","tweenSettings","settings","propArray","getProperties","properties","keyframes","propertyNames","newKey","flattenKeyframes","tweens","normalizeTweens","previousTween","tween","normalizeTweenValues","tweenValue","toUnit","originalValue","previousValue","fromUnit","isPath","isColor","setProgressValue","attribute","last","setTargetsValue","valueUnit","animType","getAnimations","animatables","lastTween","createAnimation","getInstanceTimings","animLength","getTlOffset","anim","timings","instanceID","activeInstances","engine","activeInstancesLength","activeInstance","tick","anime","suspendWhenDocumentHidden","isDocumentHidden","_onDocumentVisibility","hidden","lastTime","childrenLength","makePromise","promise","_resolve","finished","instanceSettings","createNewInstance","toggleInstanceDirection","reversed","adjustTime","resetTime","seekChild","seek","setAnimationsProgress","insTime","animationsLength","tweenLength","eased","toNumbersLength","toNumber","fromNumber","stringsLength","n$1","currentValue","setCallback","cb","passThrough","setInstanceProgress","engineTime","insDuration","insDelay","insEndDelay","reversePlayback","i$1","syncInstanceChildren","began","loopBegan","changeBegan","changeCompleted","remaining","completed","pause","play","reverse","restart","removeTargetsFromInstance","removeTargetsFromAnimations","targetsArray","childAnimations","version","convertPx","percent","setDashoffset","pathLength","stagger","fromIndex","fromFirst","fromCenter","fromLast","isRange","val1","val2","values","maxValue","fromX","fromY","distanceX","distanceY","timeline","tl","instanceParams","tlIndex","ins","insParams","tlDuration","random","toggleButton","mainNavWrap","siteBody","hdr","folioItems","blocks","goTopButton","triggers","PhotoSwipeLightbox","visibility","translateY","link","folioItem","folio","thumbLink","caption","titleText","captionText","PhotoSwipe","PhotoSwipeUI_Default","viewportHeight","triggerTop","blockHeight","inView","isAnimated","Swiper","pagination","clickable","easeInQuad","easeOutQuad","easeInOutQuad","easeInOutCubic"],"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,qBAAXiB,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,kBAAVF,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,UAIjBlC,EAAoBA,EAAoBmC,EAAI,I,kCCzErD,IAAIC,EAAS,WAKX,IAAIC,EAAW,CACbC,UAAW,EACXC,SAAU,IACVC,OAAQ,eACRC,UAAWC,OACXC,SAAU,cAWZ,SAASC,EAAatB,EAAGuB,EAAGpC,EAAGC,GAG7B,OAFAY,GAAKZ,GAEGD,KADRa,EACiBA,EAAIA,EAAIA,EAAI,GAAKuB,EAWpC,SAASC,EAAYC,EAAMC,GACzB,IAAIC,EAAO,GAOX,OANAnC,OAAOoC,KAAKH,GAAMI,SAAQ,SAAUC,GAClCH,EAAKG,GAAgBL,EAAKK,MAE5BtC,OAAOoC,KAAKF,GAAMG,SAAQ,SAAUC,GAClCH,EAAKG,GAAgBJ,EAAKI,MAErBH,EAuBT,SAASI,EAAeZ,GACtB,OAAIA,aAAqBa,YAChBb,EAAUc,UAGZd,EAAUe,YAUnB,SAASpB,IACP,IAAIqB,EAAUC,UAAUC,OAAS,QAAsBC,IAAjBF,UAAU,GAAmBA,UAAU,GAAK,GAC9EG,EAAgBH,UAAUC,OAAS,QAAsBC,IAAjBF,UAAU,GAAmBA,UAAU,GAAK,GACxFI,KAAKL,QAAUX,EAAYT,EAAUoB,GACrCK,KAAKD,cAAgBf,EAAY,CAC/BF,aAAcA,GACbiB,GA6HL,OAnHAzB,EAAOJ,UAAU+B,gBAAkB,SAAUC,EAAKrB,GAChD,IAAIsB,EAAQH,KAEZ,GAAKE,EAAL,CAIA,IAAIE,EAAOF,EAAIG,aAAa,SAAWH,EAAIG,aAAa,eAEpDC,EAASF,GAAiB,MAATA,EAAeG,SAASC,eAAeJ,EAAKK,UAAU,IAAMF,SAASG,KACtFf,EAAUX,EAAYgB,KAAKL,QA6FjC,SAAmCO,EAAKP,GACtC,IAAIgB,EAAa,GAQjB,OAPA3D,OAAOoC,KAAKO,GAASN,SAAQ,SAAUxB,GACrC,IAAIN,EAAQ2C,EAAIG,aAAa,WAAWO,OAAiB/C,EArJhDgD,QAAQ,YAAY,SAAUC,GACvC,MAAO,IAAMA,EAAGC,mBAsJZxD,IACFoD,EAAW9C,GAAOmD,MAAMzD,GAASA,EAAQ0D,SAAS1D,EAAO,QAGtDoD,EAtGiCO,CAA0BhB,EAAKF,KAAKL,UAEpD,oBAAbd,IACTc,EAAQd,SAAWA,GAGrB,IAAIsC,EAAW,SAAkBC,GAC/BA,EAAEC,iBAEFlB,EAAMmB,KAAKhB,EAAQX,IAIrB,OADAO,EAAIqB,iBAAiB,QAASJ,GAAU,GACjC,WACL,OAAOjB,EAAIsB,oBAAoB,QAASL,GAAU,MAWtD7C,EAAOJ,UAAUoD,KAAO,SAAUhB,GAChC,IAAImB,EAASzB,KAETL,EAAUC,UAAUC,OAAS,QAAsBC,IAAjBF,UAAU,GAAmBA,UAAU,GAAK,GAElF,GAAe,IAAXU,GAAiBA,EAArB,CAIAX,EAAUX,EAAYgB,KAAKL,QAASA,GACpC,IAGI+B,EAHAC,EAA6B,kBAAXrB,EAAsBA,EAASA,EAAOsB,wBAAwBC,IAChFC,EAAOvC,EAAeI,EAAQhB,WAC9BoD,EAAY,KAEhBJ,GAAYhC,EAAQnB,UAEpB,IAAIwD,EAAO,SAASA,EAAKC,GACvB,IAAIC,EAAiB3C,EAAekC,EAAO9B,QAAQhB,WAE9CoD,IAIHA,EAAYE,EAAc,GAG5B,IAAIE,EAAcF,EAAcF,EAEhC,GAAIL,IACEC,EAAW,GAAKD,EAAcQ,GAAkBP,EAAW,GAAKD,EAAcQ,GAChF,OAAOvC,EAAQd,SAASyB,GAI5BoB,EAAcQ,EAEd,IAAIE,EAAMX,EAAO1B,cAAcJ,EAAQjB,QAAQyD,EAAaL,EAAMH,EAAUhC,EAAQlB,UAEpFkB,EAAQhB,UAAU0D,OAAO,EAAGD,GAExBD,EAAcxC,EAAQlB,SACxBG,OAAO0D,sBAAsBN,IAE7BrC,EAAQhB,UAAU0D,OAAO,EAAGV,EAAWG,GACvCnC,EAAQd,SAASyB,KAIrB1B,OAAO0D,sBAAsBN,KAS/B1D,EAAOJ,UAAUqE,gBAAkB,SAAU1F,EAAM2F,GACjDxC,KAAKD,cAAclD,GAAQ2F,GAsBtBlE,EApNI,GAwNXjC,EAAOD,QAAUkC,G,6BCtNnB,SAASmE,EAAcC,EAAWC,EAASC,GACzC,MAAMC,EAAKtC,SAASkC,cAAcE,GAAW,OAO7C,OANID,IACFG,EAAGH,UAAYA,GAEbE,GACFA,EAAWE,YAAYD,GAElBA,EAGT,SAASE,EAAeC,EAAIC,GAM1B,OALAD,EAAGE,EAAID,EAAGC,EACVF,EAAGG,EAAIF,EAAGE,OACIrD,IAAVmD,EAAGG,KACLJ,EAAGI,GAAKH,EAAGG,IAENJ,EAIT,SAASK,EAAWjF,GAClBA,EAAE8E,EAAII,KAAKC,MAAMnF,EAAE8E,GACnB9E,EAAE+E,EAAIG,KAAKC,MAAMnF,EAAE+E,GASrB,SAASK,EAAmBR,EAAIC,GAC9B,MAAMC,EAAII,KAAKG,IAAIT,EAAGE,EAAID,EAAGC,GACvBC,EAAIG,KAAKG,IAAIT,EAAGG,EAAIF,EAAGE,GAC7B,OAAOG,KAAKI,KAAMR,EAAIA,EAAMC,EAAIA,GASlC,SAASQ,EAAYX,EAAIC,GACvB,OAAOD,EAAGE,IAAMD,EAAGC,GAAKF,EAAGG,IAAMF,EAAGE,EAUtC,SAASS,EAAMxB,EAAKyB,EAAKC,GACvB,OAAOR,KAAKO,IAAIP,KAAKQ,IAAI1B,EAAKyB,GAAMC,GAUtC,SAASC,EAAkBb,EAAGC,EAAGa,GAC/B,IAAIC,EAAY,eACZf,EAAI,OAASC,GAAK,GADN,QAUhB,YANcrD,IAAVkE,IACFC,GAAa,YACTD,EAAQ,IAAMA,EACd,OAGCC,EAWT,SAASC,EAAarB,EAAIK,EAAGC,EAAGa,GAC9BnB,EAAGsB,MAAMC,UAAYL,EAAkBb,EAAGC,EAAGa,GApG/C,OAiHA,SAASK,EAAmBxB,EAAIyB,EAAM7F,EAAU8F,GAI9C1B,EAAGsB,MAAMK,WAAaF,EACjBA,EAAO,IAAM7F,EAAW,OAAS8F,GAff,4BAgBnB,OAMN,SAASE,EAAe5B,EAAI6B,EAAGC,GAC7B9B,EAAGsB,MAAMS,MAAsB,kBAANF,EAAmBA,EAAI,KAAQA,EACxD7B,EAAGsB,MAAMU,OAAuB,kBAANF,EAAmBA,EAAI,KAAQA,EAsB3D,MAAMG,EACE,OADFA,EAEK,UAFLA,EAGI,SAHJA,EAIG,QA0CT,IAAIC,GAAkB,EAEtB,IACEnG,OAAO2C,iBAAiB,OAAQ,KAAMvE,OAAOC,eAAe,GAAI,UAAW,CACzEE,IAAK,KACH4H,GAAkB,MAGtB,MAAO3D,KAGT,MAAM4D,EACJC,cACEjF,KAAKkF,MAAQ,GAWfC,IAAI7E,EAAQ8E,EAAMjE,EAAUkE,GAC1BrF,KAAKsF,gBAAgBhF,EAAQ8E,EAAMjE,EAAUkE,GAW/CE,OAAOjF,EAAQ8E,EAAMjE,EAAUkE,GAC7BrF,KAAKsF,gBAAgBhF,EAAQ8E,EAAMjE,EAAUkE,GAAS,GAMxDG,YACExF,KAAKkF,MAAM7F,SAASoG,IAClBzF,KAAKsF,gBACHG,EAASnF,OACTmF,EAASL,KACTK,EAAStE,SACTsE,EAASJ,SACT,GACA,MAGJrF,KAAKkF,MAAQ,GAafI,gBAAgBhF,EAAQ8E,EAAMjE,EAAUkE,EAASK,EAAQC,GACvD,IAAKrF,EACH,OAGF,MAAMsF,GAAcF,EAAS,SAAW,OAAS,iBACjDN,EAAOA,EAAKS,MAAM,MACbxG,SAASyG,IACZ,GAAIA,EAAO,CAGJH,IACCD,EAEF1F,KAAKkF,MAAQlF,KAAKkF,MAAMa,QAAQN,GACvBA,EAASL,OAASU,GACpBL,EAAStE,WAAaA,GACtBsE,EAASnF,SAAWA,IAI3BN,KAAKkF,MAAMc,KAAK,CACd1F,SACA8E,KAAMU,EACN3E,WACAkE,aAQN,MAAMY,IAAelB,GAAkB,CAAEM,QAAUA,IAAW,GAE9D/E,EAAOsF,GACLE,EACA3E,EACA8E,QAOV,SAASC,EAAgBvG,EAASwG,GAChC,GAAIxG,EAAQyG,kBAAmB,CAC7B,MAAMC,EAAkB1G,EAAQyG,kBAAkBzG,EAASwG,GAC3D,GAAIE,EACF,OAAOA,EAIX,MAAO,CACLnD,EAAG3C,SAAS+F,gBAAgBC,YAM5BpD,EAAGvE,OAAO4H,aAuCd,SAASC,EAAmBnC,EAAM3E,EAAS+G,EAAcC,EAAUC,GACjE,IAAIC,EAEJ,GAAIlH,EAAQmH,UACVD,EAAelH,EAAQmH,UAAUJ,EAAcC,EAAUC,GAAOtC,QAC3D,GAAI3E,EAAQoH,QACjBF,EAAelH,EAAQoH,QAAQzC,OAC1B,CACL,MAAM0C,EAAiB,UAAY1C,EAAK,GAAG2C,cAAgB3C,EAAK4C,MAAM,GAClEvH,EAAQqH,KACVH,EAAelH,EAAQqH,IAI3B,OAAOH,GAAgB,EAIzB,SAASM,EAAexH,EAAS+G,EAAcC,EAAUC,GACvD,MAAO,CACL1D,EAAGwD,EAAaxD,EACZuD,EAAmB,OAAQ9G,EAAS+G,EAAcC,EAAUC,GAC5DH,EAAmB,QAAS9G,EAAS+G,EAAcC,EAAUC,GACjEzD,EAAGuD,EAAavD,EACZsD,EAAmB,MAAO9G,EAAS+G,EAAcC,EAAUC,GAC3DH,EAAmB,SAAU9G,EAAS+G,EAAcC,EAAUC,IAQtE,MAAMQ,EACJnC,YAAYoC,GACVrH,KAAKqH,MAAQA,EAEbrH,KAAKsH,cAAgB,EAErBtH,KAAKuH,OAAS,GACdvH,KAAK8D,IAAM,GACX9D,KAAK6D,IAAM,GAEX7D,KAAKwH,QAIPC,OAAOH,GACLtH,KAAKsH,cAAgBA,EAEhBtH,KAAKqH,MAAMzC,OAGd5E,KAAK0H,YAAY,KACjB1H,KAAK0H,YAAY,KACjB1H,KAAKqH,MAAMlB,KAAKwB,SAAS,aAAc,CAAEN,MAAOrH,KAAKqH,SAJrDrH,KAAKwH,QASTE,YAAYE,GACV,MAAM,KAAEzB,GAASnG,KAAKqH,MAChBQ,EAAS7H,KAAKqH,MAAe,MAATO,EAAe,QAAU,UAAY5H,KAAKsH,cAE9DP,EAAUN,EADa,MAATmB,EAAe,OAAS,MAG1CzB,EAAKxG,QACLwG,EAAKO,aACL1G,KAAKqH,MAAMS,KACX9H,KAAKqH,MAAMT,OAGPmB,EAAc/H,KAAKqH,MAAMU,YAAYH,GAI3C5H,KAAKuH,OAAOK,GAAQtE,KAAKC,OAAOwE,EAAcF,GAAU,GAAKd,EAG7D/G,KAAK8D,IAAI8D,GAASC,EAASE,EACvBzE,KAAKC,MAAMwE,EAAcF,GAAUd,EACnC/G,KAAKuH,OAAOK,GAGhB5H,KAAK6D,IAAI+D,GAASC,EAASE,EACvBhB,EACA/G,KAAKuH,OAAOK,GAIlBJ,QACExH,KAAKuH,OAAOrE,EAAI,EAChBlD,KAAKuH,OAAOpE,EAAI,EAChBnD,KAAK8D,IAAIZ,EAAI,EACblD,KAAK8D,IAAIX,EAAI,EACbnD,KAAK6D,IAAIX,EAAI,EACblD,KAAK6D,IAAIV,EAAI,EASf6E,WAAWJ,EAAMK,GACf,OAAOrE,EAAMqE,EAAWjI,KAAK8D,IAAI8D,GAAO5H,KAAK6D,IAAI+D,KAWrD,MAAMM,EAOJjD,YAAYtF,EAASgH,EAAUC,EAAOT,GACpCnG,KAAKmG,KAAOA,EACZnG,KAAKL,QAAUA,EACfK,KAAK2G,SAAWA,EAChB3G,KAAK4G,MAAQA,EAUfa,OAAOU,EAAUC,EAAWL,GAC1B/H,KAAKqI,YAAc,CACjBnF,EAAGiF,EACHhF,EAAGiF,GAGLpI,KAAK+H,YAAcA,EAEnB,MAAMO,EAAStI,KAAK+H,YAAY7E,EAAIlD,KAAKqI,YAAYnF,EAC/CqF,EAASvI,KAAK+H,YAAY5E,EAAInD,KAAKqI,YAAYlF,EAErDnD,KAAKwI,IAAMlF,KAAKO,IAAI,EAAGyE,EAASC,EAASD,EAASC,GAClDvI,KAAKyI,KAAOnF,KAAKO,IAAI,EAAGyE,EAASC,EAASD,EAASC,GAInDvI,KAAK0I,MAAQpF,KAAKO,IAAI,EAAG0E,GAEzBvI,KAAK2I,QAAU3I,KAAK4I,cACpB5I,KAAK6I,UAAY7I,KAAK8I,gBACtB9I,KAAK8D,IAAMR,KAAKQ,IACd9D,KAAK2I,QACL3I,KAAK6I,UACL7I,KAAK+I,WAGP/I,KAAK6D,IAAMP,KAAKO,IACd7D,KAAKwI,IACLxI,KAAK2I,QACL3I,KAAK6I,WAGH7I,KAAKmG,MACPnG,KAAKmG,KAAKwB,SAAS,mBAAoB,CAAEqB,WAAYhJ,KAAMiJ,UAAWjJ,KAAK2G,WAS/EuC,sBAAsBC,GAIpB,MAAMC,EAAcpJ,KAAKL,QAAQwJ,EAAe,aAEhD,GAAKC,EAIL,MAA2B,oBAAhBA,EACFA,EAAYpJ,MAGD,SAAhBoJ,EACKpJ,KAAKyI,KAGM,QAAhBW,EACKpJ,KAAKwI,IAGPa,OAAOD,GAWhBN,gBACE,IAAIxB,EAAgBtH,KAAKkJ,sBAAsB,aAE/C,OAAI5B,IAKJA,EAAgBhE,KAAKO,IAAI,EAAc,EAAX7D,KAAKwI,KAE7BlB,EAAgBtH,KAAKqI,YAAYnF,EA5GjB,MA6GlBoE,EA7GkB,IA6GgBtH,KAAKqI,YAAYnF,GAG9CoE,GAQTsB,cACE,OAAO5I,KAAKkJ,sBAAsB,YAAclJ,KAAKwI,IAUvDO,UACE,MAAMzB,EAAgBtH,KAAKkJ,sBAAsB,OAEjD,OAAI5B,GAMGhE,KAAKQ,IAAI,EAAc,EAAX9D,KAAKwI,MAQ5B,MAAMc,EACJrE,YAAY6C,EAAMlB,EAAOT,GACvBnG,KAAK8H,KAAOA,EACZ9H,KAAK4G,MAAQA,EACb5G,KAAKmG,KAAOA,EACZnG,KAAKuJ,SAAY3C,IAAUT,EAAKqD,UAChCxJ,KAAKyJ,kBAAoB,EACzBzJ,KAAK+H,YAAc,GAEnB/H,KAAK0J,aAAgB1J,KAAKuJ,WAAapD,EAAKwD,OAAOC,OAEnD5J,KAAKgJ,WAAa,IAAId,EAAU/B,EAAKxG,QAASmI,EAAMlB,EAAOT,GAE3DnG,KAAKmG,KAAKwB,SAAS,cAAe,CAChCN,MAAOrH,KACP8H,KAAM9H,KAAK8H,KACXlB,UAGF5G,KAAK6J,IAAM,CACT3G,EAAG,EACHC,EAAG,GAGLnD,KAAK8J,QAAU9J,KAAKmG,KAAK4D,cAAcC,kBAAkBhK,MACzDA,KAAKrB,UAAY8D,EAAc,mBAE/BzC,KAAKsH,cAAgB,EACrBtH,KAAK4E,MAAQ5E,KAAK8J,QAAQlF,MAC1B5E,KAAK6E,OAAS7E,KAAK8J,QAAQjF,OAE3B7E,KAAKiK,OAAS,IAAI7C,EAAUpH,MAE5BA,KAAKkK,oBAAsB,EAC3BlK,KAAKmK,qBAAuB,EAE5BnK,KAAKmG,KAAKwB,SAAS,YAAa,CAAEN,MAAOrH,OAQ3CoK,YAAYb,GACNA,IAAavJ,KAAKuJ,SAEpBvJ,KAAKqK,YACKd,GAAYvJ,KAAKuJ,UAE3BvJ,KAAKsK,aAOTC,OAAOC,GACLxK,KAAKwK,cAAgBA,EAGhBxK,KAAK8H,MAKV9H,KAAKyK,gBAELzK,KAAKrB,UAAU+L,gBAAkB,MAEjC1K,KAAK2K,OACL3K,KAAK4K,cACL5K,KAAK6K,oBAEL7K,KAAKwK,cAAcM,UAAY,GAC/B9K,KAAKwK,cAAc1H,YAAY9C,KAAKrB,WAEpCqB,KAAK+K,sBAEL/K,KAAKmG,KAAKwB,SAAS,eAAgB,CAAEN,MAAOrH,OAE5CA,KAAKgL,sBAELhL,KAAKmG,KAAKwB,SAAS,kBAAmB,CAAEN,MAAOrH,OAE3CA,KAAKuJ,UACPvJ,KAAKqK,YAxBLrK,KAAKwK,cAAcM,UAAY,GA4BnCH,OACE3K,KAAK8J,QAAQa,OACb3K,KAAKmG,KAAKwB,SAAS,YAAa,CAAEN,MAAOrH,OAS3C4K,cACE,MAAM,KAAEzE,GAASnG,MAIbA,KAAKiL,eACD9E,EAAKwD,OAAOC,SACbzD,EAAK+E,WAAWC,cACdnL,KAAKuJ,SAAP,KAIHvJ,KAAKmG,KAAKwB,SAAS,cAAe,CAAEN,MAAOrH,OAAQoL,mBAIvDpL,KAAKiL,eAAgB,EAErBjL,KAAK8J,QAAQS,SAEbvK,KAAKmG,KAAKwB,SAAS,qBAAsB,CAAEN,MAAOrH,SASpDqK,WACErK,KAAKuJ,UAAW,EAChBvJ,KAAK4K,cACL5K,KAAK8J,QAAQO,WACbrK,KAAKmG,KAAKwB,SAAS,gBAAiB,CAAEN,MAAOrH,OAQ/CsK,aACEtK,KAAKuJ,UAAW,EAChBvJ,KAAK8J,QAAQQ,aAGbtK,KAAKyJ,kBAAoB,EACzBzJ,KAAK+K,sBACL/K,KAAKgL,sBACLhL,KAAK6K,oBAEL7K,KAAKmG,KAAKwB,SAAS,kBAAmB,CAAEN,MAAOrH,OAOjDqL,UACErL,KAAK8J,QAAQwB,UAAW,EACxBtL,KAAK8J,QAAQvE,SACbvF,KAAKmG,KAAKwB,SAAS,eAAgB,CAAEN,MAAOrH,OAG9CuL,SACMvL,KAAKsH,gBAAkBtH,KAAKgJ,WAAWL,SAAY3I,KAAKuJ,UAY1DvJ,KAAKyK,gBACLzK,KAAKiK,OAAOxC,OAAOzH,KAAKsH,eACxBtH,KAAKwL,MAAMxL,KAAK6J,IAAI3G,EAAGlD,KAAK6J,IAAI1G,KAThCnD,KAAKyK,gBACLzK,KAAKyJ,kBAAoB,EACzBzJ,KAAK+K,sBACL/K,KAAKgL,sBACLhL,KAAK6K,qBAgBTA,kBAAkBY,GAGhB,MAAMC,EAAkB1L,KAAKyJ,mBAAqBzJ,KAAKgJ,WAAWL,QAElE,IAAK+C,EACH,OAGF,MAAM9G,EAAQtB,KAAKC,MAAMvD,KAAK4E,MAAQ8G,IAAoB1L,KAAKmG,KAAKO,aAAaxD,EAC3E2B,EAASvB,KAAKC,MAAMvD,KAAK6E,OAAS6G,IAAoB1L,KAAKmG,KAAKO,aAAavD,GAE9EnD,KAAK2L,YAAY/G,EAAOC,IAAY4G,IAGzCzL,KAAK8J,QAAQ8B,iBAAiBhH,EAAOC,GAGvC8G,YAAY/G,EAAOC,GACjB,OAAID,IAAU5E,KAAKkK,oBACZrF,IAAW7E,KAAKmK,uBACrBnK,KAAKkK,mBAAqBtF,EAC1B5E,KAAKmK,oBAAsBtF,GACpB,GAMXgH,wBACE,GAAI7L,KAAK8J,QAAQgC,YACf,OAAO9L,KAAK8J,QAAQgC,YAAYC,QAcpCC,OAAOC,EAAeC,EAAaC,EAAoBC,GACrD,MAAM,KAAEjG,GAASnG,KACjB,IAAKA,KAAKqM,cACHlG,EAAK+E,WAAWC,YACrB,OAGFhF,EAAKwB,SAAS,eAAgB,CAC5BsE,gBAAeC,cAAaC,uBAI9BhG,EAAKmG,WAAWC,aAMhB,MAAMC,EAAgBxM,KAAKsH,cAEtB8E,IACHH,EAAgBrI,EAAMqI,EAAejM,KAAKgJ,WAAWnF,IAAK7D,KAAKgJ,WAAWlF,MAO5E9D,KAAKyM,aAAaR,GAClBjM,KAAK6J,IAAI3G,EAAIlD,KAAK0M,yBAAyB,IAAKR,EAAaM,GAC7DxM,KAAK6J,IAAI1G,EAAInD,KAAK0M,yBAAyB,IAAKR,EAAaM,GAC7DnJ,EAAWrD,KAAK6J,KAEhB,MAAM8C,EAAmB,KACvB3M,KAAK4M,eAAeX,GACpBjM,KAAKgL,uBAGFmB,EAGHhG,EAAKmG,WAAWO,gBAAgB,CAC9BC,OAAO,EACPjQ,KAAM,SACNyD,OAAQN,KAAKrB,UACbyF,UAAWpE,KAAK+M,sBAChBC,WAAYL,EACZlO,SAAU0N,EACVzN,OAAQyH,EAAKxG,QAAQjB,SATvBiO,IAcJM,WAAWf,GACTlM,KAAKgM,OACHhM,KAAKsH,gBAAkBtH,KAAKgJ,WAAWL,QACnC3I,KAAKgJ,WAAWH,UAAY7I,KAAKgJ,WAAWL,QAChDuD,EACAlM,KAAKmG,KAAKxG,QAAQuN,uBAUtBT,aAAanF,GACXtH,KAAKsH,cAAgBA,EACrBtH,KAAKiK,OAAOxC,OAAOzH,KAAKsH,eAe1BoF,yBAAyB9E,EAAMuF,EAAOX,GAEpC,GAAyB,IADAxM,KAAKiK,OAAOnG,IAAI8D,GAAQ5H,KAAKiK,OAAOpG,IAAI+D,GAE/D,OAAO5H,KAAKiK,OAAO1C,OAAOK,GAGvBuF,IACHA,EAAQnN,KAAKmG,KAAKiH,0BAGpB,MAAMC,EAAarN,KAAKsH,cAAgBkF,EACxC,OAAOxM,KAAKiK,OAAOjC,WACjBJ,GACC5H,KAAK6J,IAAIjC,GAAQuF,EAAMvF,IAASyF,EAAaF,EAAMvF,IAUxD4D,MAAM8B,EAAMC,GACVvN,KAAK6J,IAAI3G,EAAIlD,KAAKiK,OAAOjC,WAAW,IAAKsF,GACzCtN,KAAK6J,IAAI1G,EAAInD,KAAKiK,OAAOjC,WAAW,IAAKuF,GACzCvN,KAAKgL,sBAMPwC,aACE,OAAOxN,KAAK4E,OAAU5E,KAAKsH,cAAgBtH,KAAKgJ,WAAWR,IAM7D6D,aACE,OAAOrM,KAAK4E,OAAS5E,KAAK8J,QAAQuC,aAOpCrB,sBACEhL,KAAKyN,oBAAoBzN,KAAK6J,IAAI3G,EAAGlD,KAAK6J,IAAI1G,EAAGnD,KAAKsH,eAClDtH,OAASA,KAAKmG,KAAKuH,WACrB1N,KAAKmG,KAAKwB,SAAS,gBAAiB,CAAEN,MAAOrH,OAIjD+K,sBACE/K,KAAKsH,cAAgBtH,KAAKgJ,WAAWL,QAGrC3I,KAAKiK,OAAOxC,OAAOzH,KAAKsH,eACxBvE,EAAe/C,KAAK6J,IAAK7J,KAAKiK,OAAO1C,QACrCvH,KAAKmG,KAAKwB,SAAS,iBAAkB,CAAEN,MAAOrH,OAUhDyN,oBAAoBvK,EAAGC,EAAGwK,GACxBA,GAAQ3N,KAAKyJ,mBAAqBzJ,KAAKgJ,WAAWL,QAClDzE,EAAalE,KAAKrB,UAAWuE,EAAGC,EAAGwK,GAGrClD,gBACE,MAAM,KAAEtE,GAASnG,KAEjB+C,EACE/C,KAAK+H,YACLZ,EAAehB,EAAKxG,QAASwG,EAAKO,aAAc1G,KAAK8H,KAAM9H,KAAK4G,QAGlE5G,KAAKgJ,WAAWvB,OAAOzH,KAAK4E,MAAO5E,KAAK6E,OAAQ7E,KAAK+H,aAErD5B,EAAKwB,SAAS,gBAAiB,CAC7BN,MAAOrH,OAIX+M,sBACE,MAAM/I,EAAQhE,KAAKsH,eAAiBtH,KAAKyJ,mBAAqBzJ,KAAKgJ,WAAWL,SAC9E,OAAO5E,EAAkB/D,KAAK6J,IAAI3G,EAAGlD,KAAK6J,IAAI1G,EAAGa,GAkBnD4I,eAAegB,GACTA,IAAkB5N,KAAKyJ,oBAI3BzJ,KAAKyJ,kBAAoBmE,EACzB5N,KAAK6K,oBAEL7K,KAAKmG,KAAKwB,SAAS,uBAsBvB,MAAMkG,EACJ5I,YAAY6I,GACV9N,KAAK8N,SAAWA,EAChB9N,KAAKmG,KAAO2H,EAAS3H,KACrBnG,KAAK+N,SAAW,GAGlBC,QACEjL,EAAe/C,KAAK+N,SAAU/N,KAAKmG,KAAKuH,UAAU7D,KAClD7J,KAAKmG,KAAKmG,WAAW2B,UAGvBC,SACE,MAAM,GAAElL,EAAE,OAAEmL,EAAM,SAAEC,EAAQ,KAAEjI,GAASnG,KAAK8N,UACtC,UAAEJ,GAAcvH,EAEtB,GAAiB,MAAbiI,GACGjI,EAAKxG,QAAQ0O,qBACbX,EAAUpG,eAAiBoG,EAAU1E,WAAWR,MAC/CxI,KAAK8N,SAASQ,aAAc,CAElC,MAAMf,EAAOG,EAAU7D,IAAI1G,GAAKH,EAAGG,EAAIgL,EAAOhL,GAC9C,IAAKgD,EAAKwB,SAAS,eAAgB,CAAE4F,SAAQnC,iBAAkB,CAC7DpL,KAAKuO,oBAAoB,IAAKhB,EApCP,IAqCvB,MAAMiB,EAAY,EAAIlL,KAAKG,IAAIzD,KAAKyO,sBAAsBf,EAAU7D,IAAI1G,IACxEgD,EAAKuI,eAAeF,GACpBd,EAAU1C,2BAEP,CACqBhL,KAAK2O,qBAAqB,OAElD3O,KAAK2O,qBAAqB,KAE1BtL,EAAWqK,EAAU7D,KACrB6D,EAAU1C,wBAKhB4D,MACE,MAAM,KAAEzI,EAAI,SAAE0I,GAAa7O,KAAK8N,UAC1B,WAAE5C,GAAe/E,EACvB,IAAI2I,EAAY,EAKhB,GAHA3I,EAAKmG,WAAW2B,UAGZ/C,EAAWC,YAAa,CAE1B,MAMM4D,GANsB7D,EAAWhI,EAAIgI,EAAW8D,iBAMK7I,EAAKO,aAAaxD,EAUxE2L,EAAS3L,GAvES,IAuEoB6L,EAA8B,GACjEF,EAAS3L,EAAI,IAAO6L,GAA+B,IAEzDD,EAAY,EACZD,EAAS3L,EAAII,KAAKO,IAAIgL,EAAS3L,EAAG,KACxB2L,EAAS3L,EA5EE,IA4E0B6L,EAA8B,GACvEF,EAAS3L,GAAK,IAAO6L,EAA8B,MAEzDD,GAAa,EACbD,EAAS3L,EAAII,KAAKQ,IAAI+K,EAAS3L,EAAG,IAGpCgI,EAAW+D,YAAYH,GAAW,EAAMD,EAAS3L,GAI/CiD,EAAKuH,UAAUpG,cAAgBnB,EAAKuH,UAAU1E,WAAWlF,KACtD9D,KAAK8N,SAASQ,aACnBtO,KAAK8N,SAAS9E,WAAWkG,gBAAe,IAMxClP,KAAKmP,yBAAyB,KAC9BnP,KAAKmP,yBAAyB,MAIlCA,yBAAyBvH,GACvB,MAAM,KAAEzB,GAASnG,MACX,UAAE0N,GAAcvH,GAChB,SAAE0I,GAAa7O,KAAK8N,UACpB,IAAEjE,EAAG,OAAEI,GAAWyD,EAClB0B,EAASvF,EAAIjC,GACbyH,EAAoBlJ,EAAKqI,UAAY,GAAc,MAAT5G,EAO1C0H,EAAoBF,EA/G9B,SAAiBG,EAAiBC,GAChC,OAAOD,EAAkBC,GAAoB,EAAIA,GA8GZC,CAAQZ,EAASjH,GAH3B,MAKzB,GAAIyH,EAAkB,CACpB,MAAMK,EAAa1P,KAAKyO,sBAAsBW,GACxCO,EAAsB3P,KAAKyO,sBAAsBa,GAIvD,GAAKI,EAAa,GAAKC,GA7HF,IA8HbD,EAAa,GAAKC,EA9HL,GAgInB,YADAxJ,EAAKyJ,QAMT,MAAMC,EAAuB5F,EAAOjC,WAAWJ,EAAM0H,GAIrD,GAAIF,IAAWS,EACb,OAIF,MAAMC,EAAgBD,IAAyBP,EAAqB,EAAI,IAElES,EAAmB5J,EAAKqI,UACxBwB,EAAeH,EAAuBT,EAE5CjJ,EAAKmG,WAAW2D,YAAY,CAC1BpT,KAAM,aAAe+K,EACrBkF,OAAO,EACPkB,MAAOoB,EACPR,IAAKiB,EACLhB,SAAUA,EAASjH,GACnBkI,eACAI,SAAWC,IAET,GAAId,GAAoBlJ,EAAKqI,UAAY,EAAG,CAE1C,MAAM4B,EAAyB,GAAKP,EAAuBM,GAAOH,EAKlE7J,EAAKuI,eAAe9K,EAClBmM,GAAoB,EAAIA,GAAoBK,EAC5C,EACA,IAIJvG,EAAIjC,GAAQtE,KAAK+M,MAAMF,GACvBzC,EAAU1C,yBAahB2D,qBAAqB/G,GACnB,MAAM,GAAE5E,EAAE,KAAEmD,EAAI,SAAEiI,EAAQ,OAAED,EAAM,aAAEG,GAAiBtO,KAAK8N,UACpD,UAAEJ,EAAS,WAAExC,GAAe/E,EAC5BmK,EAAStN,EAAG4E,GAAQuG,EAAOvG,GAC3B2I,EAAiBrF,EAAWhI,EAAIoN,EAEtC,IAAKA,EACH,OAIF,GAAa,MAAT1I,IAAiB8F,EAAUF,eAAiBc,EAE9C,OADApD,EAAWsF,OAAOD,GAAgB,IAC3B,EAGT,MAAM,OAAEtG,GAAWyD,EACb+C,EAAS/C,EAAU7D,IAAIjC,GAAQ0I,EAErC,GAAInK,EAAKxG,QAAQ+Q,gBACG,MAAbtC,GACS,MAATxG,IACC0G,EAAc,CACpB,MAAMqC,EAAuBzF,EAAW8D,gBAGlC4B,EAAsB1F,EAAWhI,EAAIyN,EAErCE,EAAgBP,EAAQ,EACxBQ,GAAiBD,EAEvB,GAAIJ,EAASxG,EAAOpG,IAAI+D,IAASiJ,EAAe,CAQ9C,GAF6B5G,EAAOpG,IAAI+D,IAAS5H,KAAK+N,SAASnG,GAI7D,OADAsD,EAAWsF,OAAOD,GAAgB,IAC3B,EAEPvQ,KAAKuO,oBAAoB3G,EAAM6I,QAG5B,GAAIA,EAASxG,EAAOnG,IAAI8D,IAASkJ,EAAe,CAMrD,GAF6B9Q,KAAK+N,SAASnG,IAASqC,EAAOnG,IAAI8D,GAI7D,OADAsD,EAAWsF,OAAOD,GAAgB,IAC3B,EAEPvQ,KAAKuO,oBAAoB3G,EAAM6I,QAKjC,GAA4B,IAAxBG,EAA2B,CAE7B,GAAIA,EAAsB,EAExB,OADA1F,EAAWsF,OAAOlN,KAAKQ,IAAIyM,EAAgBI,IAAuB,IAC3D,EACF,GAAIC,EAAsB,EAG/B,OADA1F,EAAWsF,OAAOlN,KAAKO,IAAI0M,EAAgBI,IAAuB,IAC3D,OAIT3Q,KAAKuO,oBAAoB3G,EAAM6I,OAItB,MAAT7I,IAEGsD,EAAWC,aAAelB,EAAOpG,IAAIV,IAAM8G,EAAOnG,IAAIX,IAI3DnD,KAAKuO,oBAAoB3G,EAAM6I,GAiBrChC,sBAAsBlB,GACpB,OAAQA,EAAOvN,KAAKmG,KAAKuH,UAAUzD,OAAO1C,OAAOpE,IACtCnD,KAAKmG,KAAKO,aAAavD,EAAI,GAYxCoL,oBAAoB3G,EAAMmJ,EAAcC,GACtC,MAAM,IAAEnH,EAAG,OAAEI,GAAWjK,KAAKmG,KAAKuH,UAGlC,GAFqBzD,EAAOjC,WAAWJ,EAAMmJ,KAExBA,GAAgBC,EAAgB,CACnD,MAAMV,EAAQhN,KAAKC,MAAMwN,EAAelH,EAAIjC,IAC5CiC,EAAIjC,IAAS0I,GAASU,GApTH,UAsTnBnH,EAAIjC,GAAQmJ,GAgBlB,SAASE,EAAoB7S,EAAG4E,EAAIC,GAGlC,OAFA7E,EAAE8E,GAAKF,EAAGE,EAAID,EAAGC,GAAK,EACtB9E,EAAE+E,GAAKH,EAAGG,EAAIF,EAAGE,GAAK,EACf/E,EAGT,MAAM8S,EACJjM,YAAY6I,GACV9N,KAAK8N,SAAWA,EAChB9N,KAAKmG,KAAOnG,KAAK8N,SAAS3H,KAC1BnG,KAAKmR,UAAY,GAEjBnR,KAAKoR,gBAAkB,GACvBpR,KAAKqR,WAAa,GAGpBrD,QACEhO,KAAKsR,gBAAkBtR,KAAKmG,KAAKuH,UAAUpG,cAC3CvE,EAAe/C,KAAKmR,UAAWnR,KAAKmG,KAAKuH,UAAU7D,KACnD7J,KAAKmG,KAAKmG,WAAWC,aACrBvM,KAAKuR,sBAAuB,EAG9BrD,SACE,MAAM,GAAElL,EAAE,QAAEwO,EAAO,GAAEvO,EAAE,QAAEwO,EAAO,KAAEtL,GAASnG,KAAK8N,UAC1C,UAAEJ,GAAcvH,EAChBuL,EAAehE,EAAU1E,WAAWnF,IACpC8N,EAAejE,EAAU1E,WAAWlF,IAE1C,IAAK4J,EAAUrB,cAAgBlG,EAAK+E,WAAWC,YAC7C,OAGF8F,EAAoBjR,KAAKoR,gBAAiBI,EAASC,GACnDR,EAAoBjR,KAAKqR,WAAYrO,EAAIC,GAEzC,IAAIqE,EAAiB,EAAI9D,EAAmBgO,EAASC,GACjCjO,EAAmBR,EAAIC,GACvBjD,KAAKsR,gBAOzB,GAJIhK,EAAgBoG,EAAU1E,WAAWL,QAAW+E,EAAU1E,WAAWL,QAAU,KACjF3I,KAAKuR,sBAAuB,GAG1BjK,EAAgBoK,EAClB,GAAIvL,EAAKxG,QAAQiS,eACT5R,KAAKuR,sBACNvR,KAAKsR,iBAAmB5D,EAAU1E,WAAWL,QAAS,CAE3D,MAAM6F,EAAY,GAAMkD,EAAepK,IAAkBoK,EAAe,KACnEvL,EAAKwB,SAAS,aAAc,CAAE6G,cAAapD,kBAC9CjF,EAAKuI,eAAeF,QAItBlH,EAAgBoK,EAlEI,KAkEYA,EAAepK,QAExCA,EAAgBqK,IAEzBrK,EAAgBqK,EAvEM,KAuEUrK,EAAgBqK,IAGlDjE,EAAU7D,IAAI3G,EAAIlD,KAAK6R,0BAA0B,IAAKvK,GACtDoG,EAAU7D,IAAI1G,EAAInD,KAAK6R,0BAA0B,IAAKvK,GAEtDoG,EAAUjB,aAAanF,GACvBoG,EAAU1C,sBAGZ4D,MACE,MAAM,KAAEzI,GAASnG,MACX,UAAE0N,GAAcvH,EAClBuH,EAAUpG,cAAgBoG,EAAU1E,WAAWL,UAC3C3I,KAAKuR,sBACNpL,EAAKxG,QAAQiS,aAClBzL,EAAKyJ,QAEL5P,KAAKkP,iBAIT2C,0BAA0BjK,EAAMN,GAC9B,MAAM+F,EAAa/F,EAAgBtH,KAAKsR,gBACxC,OAAOtR,KAAKqR,WAAWzJ,IACX5H,KAAKoR,gBAAgBxJ,GAAQ5H,KAAKmR,UAAUvJ,IAASyF,EAWnE6B,eAAe4C,GACb,MAAM,KAAE3L,GAASnG,MACX,UAAE0N,GAAcvH,EAEtB,IAAKuH,EAAUrB,aACb,YAGwBvM,IAAtBE,KAAKqR,WAAWnO,IAClB4O,GAAgB,GAGlB,MAAMtF,EAAgBkB,EAAUpG,cAEhC,IAAIyK,EACAC,GAA2B,EAE3BxF,EAAgBkB,EAAU1E,WAAWL,QACvCoJ,EAAuBrE,EAAU1E,WAAWL,QAEnC6D,EAAgBkB,EAAU1E,WAAWlF,IAC9CiO,EAAuBrE,EAAU1E,WAAWlF,KAG5CkO,GAA2B,EAC3BD,EAAuBvF,GAGzB,MAAMuD,EAAmB5J,EAAKqI,UACxBa,EAAmBlJ,EAAKqI,UAAY,EAEpCyD,EAAalP,EAAe,GAAI2K,EAAU7D,KAChD,IAAIqI,EAAiBnP,EAAe,GAAIkP,GAEpCH,IACF9R,KAAKqR,WAAWnO,EAAI,EACpBlD,KAAKqR,WAAWlO,EAAI,EACpBnD,KAAKoR,gBAAgBlO,EAAI,EACzBlD,KAAKoR,gBAAgBjO,EAAI,EACzBnD,KAAKsR,gBAAkB9E,EACvBzJ,EAAe/C,KAAKmR,UAAWc,IAG7BD,IACFE,EAAiB,CACfhP,EAAGlD,KAAK6R,0BAA0B,IAAKE,GACvC5O,EAAGnD,KAAK6R,0BAA0B,IAAKE,KAK3CrE,EAAUjB,aAAasF,GAEvBG,EAAiB,CACfhP,EAAGwK,EAAUzD,OAAOjC,WAAW,IAAKkK,EAAehP,GACnDC,EAAGuK,EAAUzD,OAAOjC,WAAW,IAAKkK,EAAe/O,IAIrDuK,EAAUjB,aAAaD,GAEvB,IAAI2F,GAAiB,EAKrB,GAJIxO,EAAYuO,EAAgBD,KAC9BE,GAAiB,IAGdA,IAAmBH,IAA6B3C,EAMnD,OAJA3B,EAAUd,eAAemF,QACzBrE,EAAU1C,sBAMZ7E,EAAKmG,WAAWC,aAEhBpG,EAAKmG,WAAW2D,YAAY,CAC1BnD,OAAO,EACPkB,MAAO,EACPY,IAAK,IACLC,SAAU,EACViB,aAAc,EACdsC,iBAAkB,GAClBlC,SAAWmC,IAGT,GAFAA,GAAO,IAEHF,GAAkBH,EAA0B,CAM9C,GALIG,IACFzE,EAAU7D,IAAI3G,EAAI+O,EAAW/O,GAAKgP,EAAehP,EAAI+O,EAAW/O,GAAKmP,EACrE3E,EAAU7D,IAAI1G,EAAI8O,EAAW9O,GAAK+O,EAAe/O,EAAI8O,EAAW9O,GAAKkP,GAGnEL,EAA0B,CAC5B,MAAMM,EAAe9F,GACNuF,EAAuBvF,GAAiB6F,EACvD3E,EAAUjB,aAAa6F,GAGzB5E,EAAU1C,sBAIRqE,GAAoBlJ,EAAKqI,UAAY,GAIvCrI,EAAKuI,eAAe9K,EAClBmM,GAAoB,EAAIA,GAAoBsC,EAAK,EAAG,KAI1DrF,WAAY,KAEVU,EAAUd,eAAemF,GACzBrE,EAAU1C,0BAgBlB,SAASuH,EAAoBC,GAC3B,QAAUA,EAAMlS,OAAOmS,QAAQ,oBAGjC,MAAMC,EACJzN,YAAY6I,GACV9N,KAAK8N,SAAWA,EAIlB6E,MAAMxF,EAAOyF,GACX,MAAMC,EAAkBD,EAActS,OAAOwS,UACvCC,EAAeF,EAAgBG,SAAS,aACxCC,EAAoBJ,EAAgBG,SAAS,eACtBH,EAAgBG,SAAS,mBAElDD,EACF/S,KAAKkT,oBAAoB,aAAc/F,EAAOyF,GACrCK,GACTjT,KAAKkT,oBAAoB,UAAW/F,EAAOyF,GAI/CO,IAAIhG,EAAOyF,GACLL,EAAoBK,IACtB5S,KAAKkT,oBAAoB,MAAO/F,EAAOyF,GAI3CQ,UAAUjG,EAAOyF,GACXL,EAAoBK,IACtB5S,KAAKkT,oBAAoB,YAAa/F,EAAOyF,GAIjDM,oBAAoBG,EAAYlG,EAAOyF,GACrC,MAAM,KAAEzM,GAASnG,KAAK8N,UAChB,UAAEJ,GAAcvH,EAChBiD,EAAcjD,EAAKxG,QAAQ0T,EAAa,UAE9C,IAAIlN,EAAKwB,SAAS0L,EAAa,SAAU,CAAElG,QAAOyF,kBAAiBxH,iBAInE,GAA2B,oBAAhBhC,EAKX,OAAQA,GACN,IAAK,QACL,IAAK,OACHjD,EAAKiD,KACL,MACF,IAAK,OACHsE,EAAUT,WAAWE,GACrB,MACF,IAAK,gBAGCO,EAAUrB,cACPqB,EAAU1E,WAAWH,YAAc6E,EAAU1E,WAAWL,QAC7D+E,EAAUT,WAAWE,GACZhH,EAAKxG,QAAQ2T,yBACtBnN,EAAKyJ,QAEP,MACF,IAAK,kBACH5P,KAAK8N,SAAS3H,KAAK4F,QAAQ+G,UAAUS,OAAO,yBAvB9CnK,EAAY3M,KAAK0J,EAAMgH,EAAOyF,IAkDpC,MAAMY,EACJvO,YAAYkB,GACVnG,KAAKmG,KAAOA,EAKZnG,KAAKgD,GAAK,GACVhD,KAAKiD,GAAK,GACVjD,KAAKmO,OAAS,GACdnO,KAAKyT,OAAS,GACdzT,KAAKwR,QAAU,GACfxR,KAAKyR,QAAU,GACfzR,KAAK6O,SAAW,GAEhB7O,KAAK0T,aAAe,GACpB1T,KAAK2T,YAAc,GACnB3T,KAAK4T,iBAAmB,EACxB5T,KAAK6T,iBAAmB,GAExB7T,KAAK8T,mBAAqB,iBAAkBlV,OAC5CoB,KAAK+T,uBAA0BnV,OAAmB,aAClDoB,KAAKgU,cAAgBhU,KAAK8T,oBACA9T,KAAK+T,sBAAwBE,UAAUC,eAAiB,EAE7ElU,KAAKgU,gBAER7N,EAAKxG,QAAQ+Q,gBAAiB,GAGhC1Q,KAAKmU,KAAO,IAAItG,EAAY7N,MAC5BA,KAAKgJ,WAAa,IAAIkI,EAAYlR,MAClCA,KAAKoU,WAAa,IAAI1B,EAAW1S,MAEjCmG,EAAKkO,GAAG,cAAc,KACpBlO,EAAKmO,OAAOnP,IAAIgB,EAAKoO,WAAY,SAASnT,GAAKpB,KAAKwU,SAASpT,KAEzDpB,KAAK+T,qBACP/T,KAAKyU,YAAY,UAAW,OAAQ,KAAM,UACjCzU,KAAK8T,oBACd9T,KAAKyU,YAAY,QAAS,QAAS,MAAO,UAU1CtO,EAAKoO,WAAWG,YAAc,OAC9BvO,EAAKoO,WAAWI,WAAa,QAE7B3U,KAAKyU,YAAY,QAAS,OAAQ,SAKxCA,YAAYG,EAAMC,EAAMC,EAAIC,GAC1B,MAAM,KAAE5O,GAASnG,MACX,OAAEsU,GAAWnO,EAEb6O,EAAcD,EAASH,EAAOG,EAAS,GAE7CT,EAAOnP,IAAIgB,EAAKoO,WAAYK,EAAOC,EAAM7U,KAAKiV,cAAcnX,KAAKkC,OACjEsU,EAAOnP,IAAIvG,OAAQgW,EAAO,OAAQ5U,KAAKkV,cAAcpX,KAAKkC,OAC1DsU,EAAOnP,IAAIvG,OAAQgW,EAAOE,EAAI9U,KAAKmV,YAAYrX,KAAKkC,OAChDgV,GACFV,EAAOnP,IAAIgB,EAAKoO,WAAYS,EAAahV,KAAKmV,YAAYrX,KAAKkC,OAKnEiV,cAAc7T,GAOZ,IAAIgU,EAQJ,GAPe,cAAXhU,EAAEgE,MAA0C,UAAlBhE,EAAEiU,cAC9BD,GAAiB,GAMfA,GAAkBhU,EAAEkU,OAAS,EAC/B,OAGF,MAAM,KAAEnP,GAASnG,KAGZmG,EAAKwD,OAAOC,OAKbzD,EAAKwB,SAAS,cAAe,CAAEiL,cAAexR,IAAKgK,mBAInDgK,IACFjP,EAAKoP,gBAILvV,KAAKwV,8BAA8BpU,IAGrC+E,EAAKmG,WAAW2B,UAEhBjO,KAAKyV,cAAcrU,EAAG,QAEtBpB,KAAK0V,aAAc,EAEW,IAA1B1V,KAAK4T,mBACP5T,KAAKoO,SAAW,KAGhBrL,EAAe/C,KAAKwR,QAASxR,KAAKgD,KAGhChD,KAAK4T,iBAAmB,GAE1B5T,KAAK2V,iBACL3V,KAAKsO,cAAe,GAEpBtO,KAAKsO,cAAe,GAlCpBlN,EAAEC,iBAsCN6T,cAAc9T,GACZA,EAAEC,iBAEGrB,KAAK4T,mBAIV5T,KAAKyV,cAAcrU,EAAG,QAElBpB,KAAKmG,KAAKwB,SAAS,cAAe,CAAEiL,cAAexR,IAAKgK,mBAI9B,IAA1BpL,KAAK4T,kBAA2B5T,KAAK4V,WA4B9B5V,KAAK4T,iBAAmB,IAAM5T,KAAK6V,YAC5C7V,KAAK8V,cAEL9V,KAAK6V,WAAY,EAGjB7V,KAAK+V,qBAEL/V,KAAKgJ,WAAWgF,QAEhBhO,KAAKgW,eACLhW,KAAKiW,mBAtCAjW,KAAKoO,UACRpO,KAAKkW,0BAIHlW,KAAKoO,WAAapO,KAAK4V,aACrB5V,KAAK6V,YACP7V,KAAK6V,WAAY,EACjB7V,KAAKgJ,WAAW4F,OAGlB5O,KAAK4V,YAAa,EAClB5V,KAAK2V,iBAGL3V,KAAK+V,qBACL/V,KAAKmW,cAAgBC,KAAK/D,MAE1BrS,KAAKqW,qBAAsB,EAC3BtT,EAAe/C,KAAK2T,YAAa3T,KAAKgD,IACtChD,KAAK6O,SAAS3L,EAAI,EAClBlD,KAAK6O,SAAS1L,EAAI,EAClBnD,KAAKmU,KAAKnG,QAEVhO,KAAKgW,eACLhW,KAAKiW,qBAiBXH,cACM9V,KAAK4V,aACP5V,KAAK4V,YAAa,EAIb5V,KAAKqW,qBACRrW,KAAKsW,iBAAgB,GAGvBtW,KAAKmU,KAAKvF,MACV5O,KAAKoO,SAAW,MAKpB+G,YAAY/T,GACLpB,KAAK4T,mBAIV5T,KAAKyV,cAAcrU,EAAG,MAElBpB,KAAKmG,KAAKwB,SAAS,YAAa,CAAEiL,cAAexR,IAAKgK,mBAI5B,IAA1BpL,KAAK4T,mBACP5T,KAAK0V,aAAc,EACnB1V,KAAKgW,eAEDhW,KAAK4V,WACP5V,KAAK8V,cACK9V,KAAK6V,WAAc7V,KAAKsO,cAElCtO,KAAKuW,WAAWnV,IAIhBpB,KAAK4T,iBAAmB,GAAK5T,KAAK6V,YACpC7V,KAAK6V,WAAY,EACjB7V,KAAKgJ,WAAW4F,MAEc,IAA1B5O,KAAK4T,mBAEP5T,KAAKoO,SAAW,KAChBpO,KAAK+V,yBAMXE,kBACMjW,KAAK4V,YAAc5V,KAAK6V,aAC1B7V,KAAKsW,kBAEDtW,KAAK4V,WAEFjS,EAAY3D,KAAKgD,GAAIhD,KAAKmO,SAC7BnO,KAAKmU,KAAKjG,SAGPvK,EAAY3D,KAAKgD,GAAIhD,KAAKmO,SACvBxK,EAAY3D,KAAKiD,GAAIjD,KAAKyT,SAChCzT,KAAKgJ,WAAWkF,SAIpBlO,KAAKwW,oBACLxW,KAAKyW,IAAMnU,sBAAsBtC,KAAKiW,eAAenY,KAAKkC,QAO9DsW,gBAAgB7K,GACd,MAAMiL,EAAON,KAAK/D,MACZ5T,EAAWiY,EAAO1W,KAAKmW,cAEzB1X,EAAW,KAAOgN,IAKtBzL,KAAK6O,SAAS3L,EAAIlD,KAAK2W,aAAa,IAAKlY,GACzCuB,KAAK6O,SAAS1L,EAAInD,KAAK2W,aAAa,IAAKlY,GAEzCuB,KAAKmW,cAAgBO,EACrB3T,EAAe/C,KAAK2T,YAAa3T,KAAKgD,IACtChD,KAAKqW,qBAAsB,GAG7BE,WAAWnV,GACT,MAAM,WAAE8J,GAAelL,KAAKmG,KAG5B,GAAI+E,EAAWC,YAIb,YADAD,EAAW+D,YAAY,GAAG,GAK5B,GAAI7N,EAAEgE,KAAKwR,QAAQ,UAAY,EAC7B,OAIF,GAAe,YAAXxV,EAAEgE,MAAwC,UAAlBhE,EAAEiU,YAE5B,YADArV,KAAKoU,WAAWzB,MAAM3S,KAAKwR,QAASpQ,GAKtC,MAAMyV,EAAW7W,KAAKmG,KAAKxG,QAAQmX,gBArTd,IAqTmD,EAKpE9W,KAAK+W,WACP/W,KAAK2V,iBAEDnS,EAAmBxD,KAAK0T,aAAc1T,KAAKwR,SA5T5B,IA6TjBxR,KAAKoU,WAAWhB,UAAUpT,KAAKwR,QAASpQ,KAG1C2B,EAAe/C,KAAK0T,aAAc1T,KAAKwR,SACvCxR,KAAK+W,UAAYC,YAAW,KAC1BhX,KAAKoU,WAAWjB,IAAInT,KAAKwR,QAASpQ,GAClCpB,KAAK2V,mBACJkB,IAIPlB,iBACM3V,KAAK+W,YACPE,aAAajX,KAAK+W,WAClB/W,KAAK+W,UAAY,MAUrBJ,aAAa/O,EAAMnJ,GAEjB,MAAMyY,EAAelX,KAAKgD,GAAG4E,GAAQ5H,KAAK2T,YAAY/L,GAEtD,OAAItE,KAAKG,IAAIyT,GAAgB,GAAKzY,EAAW,EACpCyY,EAAezY,EAGjB,EAGTuX,eACMhW,KAAKyW,MACPU,qBAAqBnX,KAAKyW,KAC1BzW,KAAKyW,IAAM,MAKfjB,8BAA8BpU,GAI5B,OADAA,EAAEC,kBACK,EAUToU,cAAcrU,EAAGiU,GACf,GAAIrV,KAAK+T,qBAAsB,CAE7B,MAAMqD,EAAepX,KAAK6T,iBAAiBwD,WAAWC,GAC7CA,EAAclU,KAAOhC,EAAEmW,YAGZ,OAAhBlC,GAAwB+B,GAAgB,EAE1CpX,KAAK6T,iBAAiB2D,OAAOJ,EAAc,GAClB,SAAhB/B,IAA4C,IAAlB+B,EAEnCpX,KAAK6T,iBAAiB7N,KAAKhG,KAAKyX,wBAAwBrW,EAAG,KAClDgW,GAAgB,GAEzBpX,KAAKyX,wBAAwBrW,EAAGpB,KAAK6T,iBAAiBuD,IAGxDpX,KAAK4T,iBAAmB5T,KAAK6T,iBAAiBhU,OAI1CG,KAAK4T,iBAAmB,GAC1B7Q,EAAe/C,KAAKgD,GAAIhD,KAAK6T,iBAAiB,IAG5C7T,KAAK4T,iBAAmB,GAC1B7Q,EAAe/C,KAAKiD,GAAIjD,KAAK6T,iBAAiB,SAGhD7T,KAAK4T,iBAAmB,EACpBxS,EAAEgE,KAAKwR,QAAQ,UAAY,EAGzBxV,EAAEsW,SAAWtW,EAAEsW,QAAQ7X,OAAS,IAClCG,KAAKyX,wBAAwBrW,EAAEsW,QAAQ,GAAI1X,KAAKgD,IAChDhD,KAAK4T,mBACDxS,EAAEsW,QAAQ7X,OAAS,IACrBG,KAAKyX,wBAAwBrW,EAAEsW,QAAQ,GAAI1X,KAAKiD,IAChDjD,KAAK4T,sBAKT5T,KAAKyX,wBAAwBrW,EAAGpB,KAAKgD,IACjB,OAAhBqS,EAEFrV,KAAK4T,iBAAmB,EAExB5T,KAAK4T,oBAOb4C,oBACEzT,EAAe/C,KAAKmO,OAAQnO,KAAKgD,IACjCD,EAAe/C,KAAKyT,OAAQzT,KAAKiD,IAInC8S,qBACEhT,EAAe/C,KAAKwR,QAASxR,KAAKgD,IAClCD,EAAe/C,KAAKyR,QAASzR,KAAKiD,IAClCjD,KAAKwW,oBAGPN,0BACE,GAAIlW,KAAKmG,KAAK+E,WAAWC,YAEvBnL,KAAKoO,SAAW,QACX,CAEL,MAAMuJ,EAAOrU,KAAKG,IAAIzD,KAAKgD,GAAGE,EAAIlD,KAAKwR,QAAQtO,GAAKI,KAAKG,IAAIzD,KAAKgD,GAAGG,EAAInD,KAAKwR,QAAQrO,GAEtF,GAAa,IAATwU,EAAY,CAEd,MAAMC,EAAcD,EAAO,EAAI,IAAM,IAEjCrU,KAAKG,IAAIzD,KAAKgD,GAAG4U,GAAe5X,KAAKwR,QAAQoG,KA1c3B,KA2cpB5X,KAAKoO,SAAWwJ,KAaxBH,wBAAwBrW,EAAGhD,GAWzB,OAVAA,EAAE8E,EAAI9B,EAAEyW,MAAQ7X,KAAKmG,KAAK2R,OAAO5U,EACjC9E,EAAE+E,EAAI/B,EAAE2W,MAAQ/X,KAAKmG,KAAK2R,OAAO3U,OAGbrD,IAAhBsB,EAAEmW,UACJnZ,EAAEgF,GAAKhC,EAAEmW,eACiBzX,IAAjBsB,EAAE4W,aACX5Z,EAAEgF,GAAKhC,EAAE4W,YAGJ5Z,EAGToW,SAASpT,GAEHpB,KAAKmG,KAAK+E,WAAWC,cACvB/J,EAAEC,iBACFD,EAAE6W,oBAmBR,MAAMC,EAIJjT,YAAYkB,GACVnG,KAAKmG,KAAOA,EACZnG,KAAKkD,EAAI,EAETlD,KAAKmY,gBASP5M,OAAO6M,GACL,MAAM,KAAEjS,GAASnG,KACXqY,EAAgB/U,KAAKC,MACzB4C,EAAKO,aAAaxD,EAAIiD,EAAKO,aAAaxD,EAAIiD,EAAKxG,QAAQ2Y,SAKrDC,EAAqBF,IAAkBrY,KAAKwY,WAE9CD,IACFvY,KAAKwY,WAAaH,EAClBrY,KAAKwQ,OAAOxQ,KAAKgP,kBAGnBhP,KAAKyY,YAAYpZ,SAAQ,CAACqZ,EAAY9R,KAChC2R,GACFrU,EAAawU,EAAW7V,IAAK+D,EAAQ5G,KAAK2Y,sBACZ3Y,KAAKwY,YAGjCJ,GAAgBM,EAAWrR,OAC7BqR,EAAWrR,MAAMkE,YAQvB4M,gBAGEnY,KAAK4Y,mBAAqB,EAC1B5Y,KAAK6Y,mBAAqB,EAG1B7Y,KAAKwY,WAAa,EAGlBxY,KAAK2Y,sBAAwB,EAO/BG,gBACE9Y,KAAKyY,YAAc,GAInB,IAAK,IAAInc,EAAI,EAAGA,EAAI,EAAGA,IAAK,CAC1B,MAAMuG,EAAKJ,EAAc,cAAc,EAAOzC,KAAKmG,KAAKxH,WAGxDkE,EAAGsB,MAAM4U,QAAiB,IAANzc,EAAW,QAAU,OAEzC0D,KAAKyY,YAAYzS,KAAK,CACpBnD,QASNmW,cACE,OAAOhZ,KAAKmG,KAAK8S,cAAgB,EAgBnChK,YAAY0I,EAAMuB,EAASC,GACzB,MAAM,KAAEhT,GAASnG,KACjB,IAAIoZ,EAAWjT,EAAKkT,eAAiB1B,EACrC,MAAM2B,EAAYnT,EAAK8S,cAEvB,GAAI9S,EAAKoT,UAAW,CAClBH,EAAWjT,EAAKqT,eAAeJ,GAC/B,MAAMzX,GAAYgW,EAAO2B,GAAaA,EAGpC3B,EAFEhW,GAAY2X,EAAY,EAEnB3X,EAGAA,EAAW2X,OAGhBF,EAAW,EACbA,EAAW,EACFA,GAAYE,IACrBF,EAAWE,EAAY,GAEzB3B,EAAOyB,EAAWjT,EAAKkT,eAGzBlT,EAAKkT,eAAiBD,EACtBpZ,KAAK4Y,oBAAsBjB,EAE3BxR,EAAKmG,WAAWmN,iBAEhB,MAAMC,EAAe1Z,KAAKgP,gBAC1B,GAAKkK,EAGE,CACL/S,EAAKmG,WAAW2D,YAAY,CAC1B0J,cAAc,EACd3L,MAAOhO,KAAKkD,EACZ0L,IAAK8K,EACL7K,SAAUsK,GAAa,EACvB/G,iBAAkB,GAClBtC,aAAc,EACdI,SAAWhN,IACTlD,KAAKwQ,OAAOtN,IAEd8J,WAAY,KACVhN,KAAK4Z,iBACLzT,EAAKyE,iBAIT,IAAIiP,EAAW1T,EAAKkT,eAAiBlT,EAAKqD,UAC1C,GAAIrD,EAAKoT,UAAW,CAClB,MAAMO,GAAgBD,EAAWP,GAAaA,EAG5CO,EAFEC,GAAgBR,EAAY,EAEnBQ,EAGAA,EAAeR,EAM1BhW,KAAKG,IAAIoW,GAAY,GACvB7Z,KAAK4Z,sBAlCP5Z,KAAKwQ,OAAOkJ,GACZ1Z,KAAK4Z,iBAqCP,GAAIjC,EACF,OAAO,EAQX3I,gBACE,OAAOhP,KAAKwY,WAAaxY,KAAK4Y,mBAOhCzN,YACE,OAAOnL,KAAKkD,IAAMlD,KAAKgP,gBAMzB4K,iBACE,MAAM,KAAEzT,GAASnG,KACX+Z,EAAqB/Z,KAAK6Y,mBAAqB7Y,KAAK4Y,mBAE1D,IAAKmB,EACH,OAGF/Z,KAAK6Y,mBAAqB7Y,KAAK4Y,mBAE/BzS,EAAKqD,UAAYrD,EAAKkT,eAEtB,IACIW,EADAC,EAAU3W,KAAKG,IAAIsW,GAGnBE,GAAW,IACbja,KAAK2Y,sBAAwBoB,GAAsBA,EAAqB,GAAK,EAAI,GACjFE,EAAU,GAGZ,IAAK,IAAI3d,EAAI,EAAGA,EAAI2d,EAAS3d,IACvByd,EAAqB,GACvBC,EAAaha,KAAKyY,YAAYyB,QAC9Bla,KAAKyY,YAAY,GAAKuB,EAEtBha,KAAK2Y,uBAELzU,EAAa8V,EAAWnX,IAAK7C,KAAK2Y,qBAAuB,GAAK3Y,KAAKwY,YAEnErS,EAAKgU,WAAWH,EAAa7T,EAAKqD,UAAYyQ,EAAW3d,EAAI,KAE7D0d,EAAaha,KAAKyY,YAAY2B,MAC9Bpa,KAAKyY,YAAY4B,QAAQL,GAEzBha,KAAK2Y,uBAELzU,EAAa8V,EAAWnX,GAAI7C,KAAK2Y,qBAAuB3Y,KAAKwY,YAE7DrS,EAAKgU,WAAWH,EAAa7T,EAAKqD,UAAYyQ,EAAW3d,EAAI,IAU7DgH,KAAKG,IAAIzD,KAAK2Y,sBAAwB,KAAO3Y,KAAKmL,cACpDnL,KAAKmY,gBACLnY,KAAKuL,UAIPpF,EAAKmG,WAAWC,aAEhBvM,KAAKyY,YAAYpZ,SAAQ,CAACqZ,EAAYpc,KAChCoc,EAAWrR,OAEbqR,EAAWrR,MAAM+C,YAAkB,IAAN9N,MAIjC6J,EAAKuH,UAAY1N,KAAKyY,YAAY,GAAGpR,MACrClB,EAAK4D,cAAcuQ,WAAWP,GAE9B5T,EAAKuH,UAAU1C,sBACf7E,EAAKwB,SAAS,UAShB6I,OAAOtN,EAAGqX,GACR,IAAIC,EACAlK,GAECtQ,KAAKmG,KAAKoT,WAAagB,IAE1BC,GAAwBxa,KAAKwY,WAAaxY,KAAK4Y,mBAAsB1V,GAAKlD,KAAKwY,WAC/EgC,GAAuBxa,KAAKmG,KAAKqD,UACjC8G,EAAQhN,KAAKC,MAAML,EAAIlD,KAAKkD,IAEvBsX,EAAsB,GAAKlK,EAAQ,GAChCkK,GAAuBxa,KAAKmG,KAAK8S,cAAgB,GAAK3I,EAAQ,KACpEpN,EAAIlD,KAAKkD,EAlSgB,IAkSXoN,IAIlBtQ,KAAKkD,EAAIA,EACTgB,EAAalE,KAAKmG,KAAKxH,UAAWuE,GAElClD,KAAKmG,KAAKwB,SAAS,iBAAkB,CAAEzE,IAAGqX,cAa9C,MAAME,EACJxV,YAAYkB,GACVnG,KAAKmG,KAAOA,EAEZA,EAAKkO,GAAG,cAAc,KAEflO,EAAKxG,QAAQ+a,mBAIhB1a,KAAK2a,aAGPxU,EAAKmO,OAAOnP,IAAI5E,SAAU,UAAWP,KAAK4a,WAAW9c,KAAKkC,OAC1DmG,EAAKmO,OAAOnP,IAAI5E,SAAU,UAAWP,KAAK6a,WAAW/c,KAAKkC,UAG5D,MAAM8a,EAAoBva,SAASwa,cACnC5U,EAAKkO,GAAG,WAAW,KACblO,EAAKxG,QAAQqb,aACVF,GACA9a,KAAKib,aACVH,EAAkBI,WAKxBP,aACO3a,KAAKib,cACRjb,KAAKmG,KAAK4F,QAAQmP,QAClBlb,KAAKib,aAAc,GAIvBJ,WAAWzZ,GACT,MAAM,KAAE+E,GAASnG,KAEjB,GAAImG,EAAKwB,SAAS,UAAW,CAAEiL,cAAexR,IAAKgK,iBACjD,OAGF,GAn2EJ,SAAwBhK,GACtB,GAAgB,IAAZA,EAAE+Z,OAAe/Z,EAAEga,SAAWha,EAAEia,SAAWja,EAAEka,QAAUla,EAAEma,SAC3D,OAAO,EAi2EHC,CAAepa,GAIjB,OAGF,IAAIqa,EACA7T,EACA8T,EAEJ,OAAQta,EAAEua,SACR,KAAK,GACCxV,EAAKxG,QAAQic,SACfH,EAAgB,SAElB,MACF,KAAK,GACHA,EAAgB,aAChB,MACF,KAAK,GACH7T,EAAO,IACP,MACF,KAAK,GACHA,EAAO,IACP,MACF,KAAK,GACHA,EAAO,IACP8T,GAAY,EACZ,MACF,KAAK,GACHA,GAAY,EACZ9T,EAAO,IACP,MACF,KAAK,EACH5H,KAAK2a,aAKT,GAAI/S,EAAM,CAERxG,EAAEC,iBAEF,MAAM,UAAEqM,GAAcvH,EAElBA,EAAKxG,QAAQkc,WACD,MAATjU,GACAzB,EAAK8S,cAAgB,EAC1BwC,EAAgBC,EAAY,OAAS,OAC5BhO,GAAaA,EAAUpG,cAAgBoG,EAAU1E,WAAWR,MAKrEkF,EAAU7D,IAAIjC,IAAS8T,GAAa,GAAK,GACzChO,EAAUlC,MAAMkC,EAAU7D,IAAI3G,EAAGwK,EAAU7D,IAAI1G,IAI/CsY,IACFra,EAAEC,iBACF8E,EAAKsV,MASTb,WAAWxZ,GACT,MAAM,SAAE0a,GAAa9b,KAAKmG,KACtB5F,WAAaa,EAAEd,QACZwb,IAAa1a,EAAEd,QACdwb,EAAS9I,SAAS5R,EAAEd,SAE1Bwb,EAASZ,SAWf,MAAMa,EAEJ9W,YAAY+W,GACVhc,KAAKgc,MAAQA,EACb,MAAM,OACJ1b,EAAM,WACN0M,EAAU,UACV5I,GAEE4X,EAEJ,IAAI,SACFvd,EAAQ,OACRC,GACEsd,EAGJ,MAAM1X,EAAOF,EAAY,YAAc,UACjCH,EAAY+X,EAAM1X,GAExBtE,KAAKic,QAAU3b,EACfN,KAAKkc,YAAclP,EAEnBvO,EAAWA,GAAY,IACvBC,EAASA,GA1BU,2BA4BnBsB,KAAKmc,iBAAmBnc,KAAKmc,iBAAiBre,KAAKkC,MAQnDA,KAAKoc,mBAAqBpF,YAAW,KACnC3S,EAAmB/D,EAAQgE,EAAM7F,EAAUC,GAC3CsB,KAAKoc,mBAAqBpF,YAAW,KACnC1W,EAAOiB,iBAAiB,gBAAiBvB,KAAKmc,kBAAkB,GAChE7b,EAAOiB,iBAAiB,mBAAoBvB,KAAKmc,kBAAkB,GACnE7b,EAAO6D,MAAMG,GAAQL,IACpB,MACF,GAGLkY,iBAAiB/a,GACXA,EAAEd,SAAWN,KAAKic,SACpBjc,KAAKqc,qBAITA,qBACOrc,KAAKsc,YACRtc,KAAKsc,WAAY,EACjBtc,KAAKuc,WACDvc,KAAKkc,aACPlc,KAAKkc,eAMX7Q,UACMrL,KAAKoc,oBACPnF,aAAajX,KAAKoc,oBA1hFtB/X,EA4hFwBrE,KAAKic,SAC3Bjc,KAAKic,QAAQza,oBAAoB,gBAAiBxB,KAAKmc,kBAAkB,GACzEnc,KAAKic,QAAQza,oBAAoB,mBAAoBxB,KAAKmc,kBAAkB,GACvEnc,KAAKsc,WACRtc,KAAKqc,sBAYX,MAAMG,EAcJvX,YAAYsK,EAAiBO,EAAcsC,GACzCpS,KAAK6O,SAA6B,IAAlBU,EAGhBvP,KAAKyc,cAAgB3M,GApBK,IAuB1B9P,KAAK0c,kBAAoBtK,GAxBK,GA0B1BpS,KAAKyc,cAAgB,IACvBzc,KAAK2c,iBAAmB3c,KAAK0c,kBACRpZ,KAAKI,KAAK,EAAI1D,KAAKyc,cAAgBzc,KAAKyc,gBAUjEG,UAAUC,EAAeC,GAMvB,IACIC,EADA7F,EAAe,EAGnB4F,GAAa,IAEb,MAAME,EAAoB1Z,KAAK2Z,KAAOjd,KAAKyc,cAAgBzc,KAAK0c,kBAAoBI,GAEpF,GAA2B,IAAvB9c,KAAKyc,cACPM,EAAQ/c,KAAK6O,SAAW7O,KAAK0c,kBAAoBG,EAEjD3F,GAAgB2F,EAAgBE,EAAQD,GAAaE,EAErDhd,KAAK6O,SAAWqI,GACMlX,KAAK0c,kBAAqBK,EAC5BC,OACf,GAAIhd,KAAKyc,cAAgB,EAAG,CACjCM,EAAS,EAAI/c,KAAK2c,kBACL3c,KAAKyc,cAAgBzc,KAAK0c,kBAAoBG,EAAgB7c,KAAK6O,UAEhF,MAAMqO,EAAa5Z,KAAK6Z,IAAInd,KAAK2c,iBAAmBG,GAC9CM,EAAa9Z,KAAK+Z,IAAIrd,KAAK2c,iBAAmBG,GAEpD5F,EAAe8F,GACKH,EAAgBK,EAAaH,EAAQK,GAEzDpd,KAAK6O,SAAWqI,GACMlX,KAAK0c,kBACP1c,KAAKyc,cACLO,IACEhd,KAAK2c,iBAAmBE,EAAgBO,EAC1Cpd,KAAK2c,iBAAmBI,EAAQG,GAKtD,OAAOhG,GAIX,MAAMoG,EACJrY,YAAY+W,GACVhc,KAAKgc,MAAQA,EAEb,MAAM,MACJhO,EAAK,IACLY,EAAG,SACHC,EAAQ,SACRqB,EAAQ,WACRlD,EAAU,SACVuP,EAAQ,aACRzM,EAAY,iBACZsC,GACE4J,EAEEuB,EAAQ,IAAIf,EAAY3N,EAAUiB,EAAcsC,GACtD,IAAIoL,EAAWpH,KAAK/D,MAChBwK,EAAgB7O,EAAQY,EAE5B5O,KAAKyd,UAAYlB,EAEjB,MAAMmB,EAAgB,KAChB1d,KAAK2d,OACPd,EAAgBU,EAAMX,UAAUC,EAAezG,KAAK/D,MAAQmL,GAGxDla,KAAKG,IAAIoZ,GAAiB,GAAKvZ,KAAKG,IAAI8Z,EAAM1O,UAAY,IAE5DqB,EAAStB,GACL5B,GACFA,IAEFhN,KAAKuc,aAELiB,EAAWpH,KAAK/D,MAChBnC,EAAS2M,EAAgBjO,GACzB5O,KAAK2d,KAAOrb,sBAAsBob,MAKxC1d,KAAK2d,KAAOrb,sBAAsBob,GAIpCrS,UACMrL,KAAK2d,MAAQ,GACfxG,qBAAqBnX,KAAK2d,MAE5B3d,KAAK2d,KAAO,MAQhB,MAAMC,EACJ3Y,cACEjF,KAAK6d,iBAAmB,GAG1B5N,YAAY+L,GACVhc,KAAK8d,OAAO9B,GAAO,GAGrBnP,gBAAgBmP,GACdhc,KAAK8d,OAAO9B,GAGd8B,OAAO9B,EAAO+B,GACZ,IAAIC,EAUJ,OAREA,EADED,EACU,IAAIT,EAAgBtB,GAEpB,IAAID,EAAaC,GAG/Bhc,KAAK6d,iBAAiB7X,KAAKgY,GAC3BA,EAAUzB,SAAW,IAAMvc,KAAKie,KAAKD,GAE9BA,EAGTC,KAAKD,GACHA,EAAU3S,UACV,MAAMzE,EAAQ5G,KAAK6d,iBAAiBjH,QAAQoH,GACxCpX,GAAS,GACX5G,KAAK6d,iBAAiBrG,OAAO5Q,EAAO,GAIxCqH,UACEjO,KAAK6d,iBAAiBxe,SAAS2e,IAC7BA,EAAU3S,aAEZrL,KAAK6d,iBAAmB,GAM1BtR,aACEvM,KAAK6d,iBAAmB7d,KAAK6d,iBAAiB9X,QAAQiY,IAChDA,EAAUhC,MAAMlP,QAClBkR,EAAU3S,WACH,KAOboO,iBACEzZ,KAAK6d,iBAAmB7d,KAAK6d,iBAAiB9X,QAAQiY,IAChDA,EAAUhC,MAAMrC,eAClBqE,EAAU3S,WACH,KAmBb6S,eACE,OAAOle,KAAK6d,iBAAiBM,MAAMH,GAC1BA,EAAUhC,MAAMlP,SAS7B,MAAMsR,EACJnZ,YAAYkB,GACVnG,KAAKmG,KAAOA,EACZA,EAAKmO,OAAOnP,IAAIgB,EAAK4F,QAAS,QAAS/L,KAAKqe,SAASvgB,KAAKkC,OAG5Dqe,SAASjd,GACPA,EAAEC,iBACF,MAAM,UAAEqM,GAAc1N,KAAKmG,KAC3B,IAAI,OAAEmY,EAAM,OAAEC,GAAWnd,EAEzB,GAAKsM,IAID1N,KAAKmG,KAAKwB,SAAS,QAAS,CAAEiL,cAAexR,IAAKgK,iBAItD,GAAIhK,EAAEga,SAAWpb,KAAKmG,KAAKxG,QAAQ6e,aAEjC,GAAI9Q,EAAUrB,aAAc,CAC1B,IAAIgB,GAAckR,EACE,IAAhBnd,EAAEqd,UACJpR,GAAc,IAEdA,GAAcjM,EAAEqd,UAAY,EAAI,KAElCpR,EAAa,GAAKA,EAElB,MAAMpB,EAAgByB,EAAUpG,cAAgB+F,EAChDK,EAAU1B,OAAOC,EAAe,CAC9B/I,EAAG9B,EAAEsd,QACLvb,EAAG/B,EAAEud,gBAKLjR,EAAUF,eACQ,IAAhBpM,EAAEqd,YAEJH,GAAU,GACVC,GAAU,IAGZ7Q,EAAUlC,MACRkC,EAAU7D,IAAI3G,EAAIob,EAClB5Q,EAAU7D,IAAI1G,EAAIob,KA2C5B,MAAMK,EACJ3Z,YAAYkB,EAAM2B,GAChB,MAAMjL,EAAOiL,EAAKjL,MAAQiL,EAAKpF,UAC/B,IAAImc,EAAc/W,EAAKgX,KAEvB,IAA2B,IAAvB3Y,EAAKxG,QAAQ9C,GAEf,OAIwC,kBAA/BsJ,EAAKxG,QAAQ9C,EAAO,SAK7BgiB,EAAc1Y,EAAKxG,QAAQ9C,EAAO,QAGpCsJ,EAAKwB,SAAS,kBAAmB,CAAEG,SAEnC,IAQIiE,EARArJ,EAAY,GACZoF,EAAKiX,UACPrc,GAAa,gBACbA,GAAcoF,EAAKpF,WAAa,iBAAiBoF,EAAKjL,QAEtD6F,GAAcoF,EAAKpF,WAAa,SAASoF,EAAKjL,OAIhD,IAAI8F,EAAUmF,EAAKiX,SAAYjX,EAAKnF,SAAW,SAAamF,EAAKnF,SAAW,MAI5E,GAHAA,EAAUA,EAAQ5B,cAClBgL,EAAUtJ,EAAcC,EAAWC,GAE/BmF,EAAKiX,SAAU,CAEjBhT,EAAUtJ,EAAcC,EAAWC,GACnB,WAAZA,IACFoJ,EAAQ3G,KAAO,UAGjB,IAAI,MAAE4Z,GAAUlX,EAChB,MAAM,UAAEmX,GAAcnX,EAEsB,kBAAjC3B,EAAKxG,QAAQ9C,EAAO,WAC7BmiB,EAAQ7Y,EAAKxG,QAAQ9C,EAAO,UAG1BmiB,IACFjT,EAAQiT,MAAQA,IAGdC,GAAaD,IACfjT,EAAQmT,aAAa,aAAcD,GAAaD,GAIpDjT,EAAQjB,UA7FZ,SAAwBqU,GACtB,GAAwB,kBAAbA,EAQT,OAAOA,EAGT,IAAKA,IAAaA,EAASC,YACzB,MAAO,GAGT,MAAMC,EAAUF,EAChB,IAAIG,EAAM,wFAgBV,OAfAA,EAAMA,EAAIzZ,MAAM,MAAM0Z,KAAKF,EAAQG,MAAQ,IAOvCH,EAAQI,YACVH,GAAO,8CAAgDD,EAAQI,UAAY,OAG7EH,GAAOD,EAAQK,MAEfJ,GAAO,SAEAA,EA4DeK,CAAed,GAE/B/W,EAAK8X,QACP9X,EAAK8X,OAAO7T,EAAS5F,GAGnB2B,EAAK+X,UACP9T,EAAQ+T,QAAW1e,IACW,kBAAjB0G,EAAK+X,QACd1Z,EAAK2B,EAAK+X,WAEV/X,EAAK+X,QAAQze,EAAG2K,EAAS5F,KAM/B,MAAM4Z,EAAWjY,EAAKiY,UAAY,MAClC,IAAIphB,EACa,QAAbohB,GACG5Z,EAAK6Z,SACR7Z,EAAK6Z,OAASvd,EAAc,qCAAqC,EAAO0D,EAAKoO,aAE/E5V,EAAYwH,EAAK6Z,SAIjBjU,EAAQ+G,UAAU3N,IAAI,uBAGpBxG,EADe,YAAbohB,EACU5Z,EAAKoO,WAGLpO,EAAK4F,SAIrBpN,EAAUmE,YAAYqD,EAAK8Z,aAAa,YAAalU,EAASjE,KAQlE,SAASoY,EAAgBnU,EAAS5F,EAAMga,GACtCpU,EAAQ+G,UAAU3N,IAAI,uBACtBgB,EAAKkO,GAAG,UAAU,KACXlO,EAAKxG,QAAQqC,OAEd+J,EAAQqU,SADND,IACmBha,EAAKqD,UAAYrD,EAAK8S,cAAgB,KAEtC9S,EAAKqD,UAAY,OAM9C,MAAM6W,EAAY,CAChBxjB,KAAM,YACN6F,UAAW,4BACXsc,MAAO,WACPsB,MAAO,GACPvB,UAAU,EACVgB,SAAU,UACVjB,KAAM,CACJM,aAAa,EACbI,KAAM,GACNE,MAAO,4EACPD,UAAW,mBAEbI,QAAS,OACTD,OAAQM,GAGJK,EAAY,CAChB1jB,KAAM,YACN6F,UAAW,4BACXsc,MAAO,OACPsB,MAAO,GACPvB,UAAU,EACVgB,SAAU,UACVjB,KAAM,CACJM,aAAa,EACbI,KAAM,GACNE,MAAO,uCACPD,UAAW,mBAEbI,QAAS,OACTD,OAAQ,CAAC/c,EAAIsD,KACX+Z,EAAgBrd,EAAIsD,GAAM,KAIxBqa,EAAc,CAClB3jB,KAAM,QACNmiB,MAAO,QACPsB,MAAO,GACPvB,UAAU,EACVD,KAAM,CACJM,aAAa,EACbM,MAAO,wFACPD,UAAW,mBAEbI,QAAS,SAGLY,EAAa,CACjB5jB,KAAM,OACNmiB,MAAO,OACPsB,MAAO,GACPvB,UAAU,EACVD,KAAM,CACJM,aAAa,EACbM,MAAO,uPAGPD,UAAW,kBAEbI,QAAS,cAGLa,EAAmB,CACvB7jB,KAAM,YACNkjB,SAAU,MACVO,MAAO,EACPxB,KAAM,CACJM,aAAa,EACbM,MAAO,kIACPD,UAAW,qBAEbG,OAAQ,CAACe,EAAkBxa,KACzB,IAAIya,EACAC,EAEJ,MAIMC,EAA0BC,IAJH,IAACre,EAAWyC,EAKnCyb,IAAcG,IAChBH,EAAYG,EANcre,EAOL,SAPgByC,EAON4b,EANjCJ,EAAiB7N,UAAU3N,EAAM,MAAQ,UAAU,oBAAsBzC,KAUrEse,EAA4B,KAChC,IAAK7a,EAAKuH,UAAU5D,QAAQmX,YAM1B,OALAH,GAAuB,QACnBD,IACF5J,aAAa4J,GACbA,EAAe,OAKdA,IAEHA,EAAe7J,YAAW,KACxB8J,EAAuB3a,EAAKuH,UAAU5D,QAAQmX,aAC9CJ,EAAe,OACd1a,EAAKxG,QAAQuhB,kBAIpB/a,EAAKkO,GAAG,SAAU2M,GAElB7a,EAAKkO,GAAG,gBAAiBjT,IACnB+E,EAAKuH,YAActM,EAAEiG,OACvB2Z,OAKJ7a,EAAKgb,GAAGH,0BAA4BA,IAIlCI,EAAmB,CACvBvkB,KAAM,UACNyjB,MAAO,EACPV,OAAQ,CAACyB,EAAgBlb,KACvBA,EAAKkO,GAAG,UAAU,KAChBgN,EAAeC,UAAanb,EAAKqD,UAAY,EACfrD,EAAKxG,QAAQ4hB,kBACbpb,EAAK8S,mBAazC,SAASuI,EAAY3e,EAAI4e,GACvB5e,EAAGiQ,UAAU2O,EAAa,MAAQ,UAAU,mBAG9C,MAAMC,EACJzc,YAAYkB,GACVnG,KAAKmG,KAAOA,EAGdwb,OACE,MAAM,KAAExb,GAASnG,KACjBA,KAAK4hB,cAAe,EACpB5hB,KAAK6hB,eAAiB,CACpBrB,EACAH,EACAE,EACAE,EACAC,EACAU,GAGFjb,EAAKwB,SAAS,cAGd3H,KAAK6hB,eAAeC,MAAK,CAACC,EAAGhjB,KAEnBgjB,EAAEzB,OAAS,IAAMvhB,EAAEuhB,OAAS,KAGtCtgB,KAAKgiB,MAAQ,GAEbhiB,KAAK4hB,cAAe,EACpB5hB,KAAK6hB,eAAexiB,SAAS4iB,IAC3BjiB,KAAKkiB,gBAAgBD,MAGvB9b,EAAKkO,GAAG,UAAU,KAChBlO,EAAK4F,QAAQ+G,UAAiC,IAAvB3M,EAAK8S,cAAsB,MAAQ,UAAU,sBAGtE9S,EAAKkO,GAAG,iBAAiB,IAAMrU,KAAKmiB,qBAGtCD,gBAAgBE,GACVpiB,KAAK4hB,aACP5hB,KAAKgiB,MAAMhc,KACT,IAAI4Y,EAAU5e,KAAKmG,KAAMic,IAG3BpiB,KAAK6hB,eAAe7b,KAAKoc,GAQ7BD,mBACE,MAAM,SAAErG,EAAQ,UAAEpO,EAAS,QAAE/N,GAAYK,KAAKmG,KAC9C,IAAI,cAAEmB,GAAkBoG,EAExB,GAAI1N,KAAKmG,KAAKwD,OAAO0Y,UACnB,OAQF,GAJKriB,KAAKmG,KAAKwD,OAAOC,SACpBtC,EAAgBoG,EAAU1E,WAAWL,SAGnCrB,IAAkBtH,KAAKsiB,sBACzB,OAEFtiB,KAAKsiB,sBAAwBhb,EAE7B,MAAMib,EAAoB7U,EAAU1E,WAAWL,QAAU+E,EAAU1E,WAAWH,UAG9E,GAAIvF,KAAKG,IAAI8e,GAAqB,MAAS7U,EAAUrB,aAInD,OAFAmV,EAAY1F,GAAU,QACtBA,EAAShJ,UAAUvN,OAAO,sBAI5BuW,EAAShJ,UAAU3N,IAAI,sBACvB,MAAMqd,EAAqBD,EAAoB,EAE3Cjb,IAAkBoG,EAAU1E,WAAWH,UACzC2Y,EAAY1F,EAAU0G,GACblb,EAAgBoG,EAAU1E,WAAWH,UAC9C2Y,EAAY1F,GAAU,GAGtB0F,EAAY1F,GAAU,GAGS,SAA7Bnc,EAAQ8iB,kBACwB,kBAA7B9iB,EAAQ8iB,kBACb3G,EAAShJ,UAAU3N,IAAI,wBAiG7B,MAAMud,EACJzd,YAAYG,EAAMud,GAChB3iB,KAAKoF,KAAOA,EACRud,GACF3lB,OAAO4lB,OAAO5iB,KAAM2iB,GAIxBthB,iBACErB,KAAKoL,kBAAmB,GA2F5B,MAAMyX,EAKJ5d,YAAY6d,EAAUnkB,GAGpBqB,KAAK+L,QAAUtJ,EACb,mCACAqgB,EAAW,MAAQ,GACnBnkB,GAGEmkB,IACF9iB,KAAK+L,QAAQgX,SAAW,QACxB/iB,KAAK+L,QAAQiX,IAAM,GACnBhjB,KAAK+L,QAAQkX,IAAMH,EACnB9iB,KAAK+L,QAAQmT,aAAa,OAAQ,iBAGpClf,KAAK+L,QAAQmT,aAAa,aAAc,QAG1CtT,iBAAiBhH,EAAOC,GACjB7E,KAAK+L,UAImB,QAAzB/L,KAAK+L,QAAQpJ,SAIf8B,EAAezE,KAAK+L,QAAS,IAAK,QAClC/L,KAAK+L,QAAQ5H,MAAMuG,gBAAkB,MACrC1K,KAAK+L,QAAQ5H,MAAMC,UAAYL,EAAkB,EAAG,EAAGa,EAAQ,MAE/DH,EAAezE,KAAK+L,QAASnH,EAAOC,IAIxCwG,UACMrL,KAAK+L,QAAQmX,YACfljB,KAAK+L,QAAQxG,SAEfvF,KAAK+L,QAAU,MAInB,MAAMoX,EAQJle,YAAY0B,EAAUyc,EAAUxc,GAC9B5G,KAAKojB,SAAWA,EAChBpjB,KAAK8H,KAAOnB,EACZ3G,KAAK4G,MAAQA,EAEb5G,KAAK4E,MAAQyE,OAAOrJ,KAAK8H,KAAKpD,IAAM2E,OAAOrJ,KAAK8H,KAAKlD,QAAU,EAC/D5E,KAAK6E,OAASwE,OAAOrJ,KAAK8H,KAAKnD,IAAM0E,OAAOrJ,KAAK8H,KAAKjD,SAAW,EAEjE7E,KAAKqjB,YAAa,EAClBrjB,KAAKsL,UAAW,EAChBtL,KAAKsjB,MAAQxe,EAET9E,KAAK8H,KAAK1C,KACZpF,KAAKoF,KAAOpF,KAAK8H,KAAK1C,KACbpF,KAAK8H,KAAKmb,IACnBjjB,KAAKoF,KAAO,QAEZpF,KAAKoF,KAAO,OAGdpF,KAAKojB,SAASzb,SAAS,cAAe,CAAEmC,QAAS9J,OAGnDujB,oBACMvjB,KAAK8L,cAAgB9L,KAAKwjB,mBAE5BxM,YAAW,KACLhX,KAAK8L,cACP9L,KAAK8L,YAAYT,UACjBrL,KAAK8L,YAAc,QAEpB,KASPnB,KAAK8Y,EAAQC,GACX,IAAK1jB,KAAK8L,aAAe9L,KAAKqH,OAASrH,KAAK2jB,iBAAkB,CAG5D,MAAMC,EAAiB5jB,KAAKojB,SAASnD,aACnC,oBACCjgB,KAAK8H,KAAK+b,OAAQ7jB,KAAKqH,MAAMqC,eAAgB1J,KAAK8H,KAAK+b,KACxD7jB,MAEFA,KAAK8L,YAAc,IAAI+W,EACrBe,EACA5jB,KAAKqH,MAAM1I,WAIXqB,KAAK+L,UAAY2X,GAIjB1jB,KAAKojB,SAASzb,SAAS,cAAe,CAAEmC,QAAS9J,KAAMyjB,WAAUrY,mBAIjEpL,KAAK8jB,iBACP9jB,KAAK+jB,UAAUN,IAEfzjB,KAAK+L,QAAUtJ,EAAc,iBAC7BzC,KAAK+L,QAAQjB,UAAY9K,KAAK8H,KAAKgX,MAAQ,IAGzC4E,GAAU1jB,KAAKqH,OACjBrH,KAAKqH,MAAMwD,mBAAkB,IASjCkZ,UAAUN,GACRzjB,KAAK+L,QAAUtJ,EAAc,YAAa,OAEtCzC,KAAKojB,SAASzb,SAAS,mBAAoB,CAAEmC,QAAS9J,KAAMyjB,WAAUrY,mBAItEpL,KAAK8H,KAAKkc,SACZhkB,KAAK+L,QAAQiY,OAAShkB,KAAK8H,KAAKkc,QAGlChkB,KAAK+L,QAAQkX,IAAMjjB,KAAK8H,KAAKmb,IAE7BjjB,KAAK+L,QAAQiX,IAAMhjB,KAAK8H,KAAKkb,KAAO,GAEpChjB,KAAKsjB,MAAQxe,EAET9E,KAAK+L,QAAQkY,SACfjkB,KAAKkkB,YAELlkB,KAAK+L,QAAQoY,OAAS,KACpBnkB,KAAKkkB,YAGPlkB,KAAK+L,QAAQqY,QAAU,KACrBpkB,KAAKqkB,aAUXC,SAASjd,GACPrH,KAAKqH,MAAQA,EACbrH,KAAKsL,UAAW,EAChBtL,KAAKojB,SAAW/b,EAAMlB,KAQxB+d,WACElkB,KAAKsjB,MAAQxe,EAET9E,KAAKqH,QACPrH,KAAKojB,SAASzb,SAAS,eAAgB,CAAEN,MAAOrH,KAAKqH,MAAOyC,QAAS9J,OAGjEA,KAAKqH,MAAMkC,UACRvJ,KAAKqH,MAAM4D,gBACVjL,KAAK+L,QAAQmX,aACnBljB,KAAKqH,MAAM1I,UAAUmM,UAAY,GACjC9K,KAAKuK,SACLvK,KAAKqH,MAAMwD,mBAAkB,KAQnCwZ,UACErkB,KAAKsjB,MAAQxe,EAET9E,KAAKqH,QACPrH,KAAKukB,eACLvkB,KAAKojB,SAASzb,SAAS,eAAgB,CAAEN,MAAOrH,KAAKqH,MAAOmd,SAAS,EAAM1a,QAAS9J,OACpFA,KAAKojB,SAASzb,SAAS,YAAa,CAAEN,MAAOrH,KAAKqH,MAAOyC,QAAS9J,QAOtEihB,YACE,OAAOjhB,KAAKojB,SAASnD,aACnB,mBACAjgB,KAAKsjB,QAAUxe,EACf9E,MAIJwkB,UACE,OAAOxkB,KAAKsjB,QAAUxe,EAMxBgf,iBACE,MAAqB,UAAd9jB,KAAKoF,KASdwG,iBAAiBhH,EAAOC,GACtB,GAAK7E,KAAK+L,UAIN/L,KAAK8L,aACP9L,KAAK8L,YAAYF,iBAAiBhH,EAAOC,IAGvC7E,KAAKojB,SAASzb,SAAS,gBAAiB,CAAEmC,QAAS9J,KAAM4E,QAAOC,WAAUuG,mBAI9E3G,EAAezE,KAAK+L,QAASnH,EAAOC,GAEhC7E,KAAK8jB,mBAAqB9jB,KAAKwkB,YAAW,CAC5C,MAAMC,EAAQzkB,KAAK+L,QAMf0Y,EAAMT,UACDS,EAAMC,QAAQC,iBAAmB/f,EAAQ6f,EAAMC,QAAQC,mBAC9DF,EAAMG,MAAQhgB,EAAQ,KACtB6f,EAAMC,QAAQC,gBAAkB/f,GAG9B5E,KAAKqH,OACPrH,KAAKojB,SAASzb,SAAS,kBAAmB,CAAEN,MAAOrH,KAAKqH,MAAOzC,QAAOC,SAAQiF,QAAS9J,QAQ7FqM,aACE,OAAOrM,KAAKojB,SAASnD,aACnB,oBACAjgB,KAAK8jB,kBAAqB9jB,KAAKsjB,QAAUxe,EACzC9E,MAOJ2jB,iBACE,OAAO3jB,KAAKojB,SAASnD,aACnB,wBACAjgB,KAAK8jB,iBACL9jB,MASJ6kB,WACM7kB,KAAKojB,SAASzb,SAAS,kBAAmB,CAAEmC,QAAS9J,OAAQoL,kBAIjEpL,KAAK2K,MAAK,GAMZ6Y,kBACE,OAAOxjB,KAAKojB,SAASnD,aACnB,uBACAjgB,KAAKihB,YACLjhB,MAOJqL,UACErL,KAAKsL,UAAW,EAChBtL,KAAKqH,MAAQ,KAETrH,KAAKojB,SAASzb,SAAS,iBAAkB,CAAEmC,QAAS9J,OAAQoL,mBAIhEpL,KAAKuF,SAEDvF,KAAK8jB,kBAAoB9jB,KAAK+L,UAChC/L,KAAK+L,QAAQoY,OAAS,KACtBnkB,KAAK+L,QAAQqY,QAAU,KACvBpkB,KAAK+L,QAAU,OAOnBwY,eACE,GAAIvkB,KAAKqH,MAAO,CACd,IAAIyd,EAAariB,EAAc,mBAC/BqiB,EAAWxD,UAAYthB,KAAKojB,SAASzjB,QAAQolB,SAC7CD,EAAa9kB,KAAKojB,SAASnD,aACzB,sBACA6E,EACA9kB,MAEFA,KAAK+L,QAAUtJ,EAAc,2CAC7BzC,KAAK+L,QAAQjJ,YAAYgiB,GACzB9kB,KAAKqH,MAAM1I,UAAUmM,UAAY,GACjC9K,KAAKqH,MAAM1I,UAAUmE,YAAY9C,KAAK+L,SACtC/L,KAAKqH,MAAMwD,mBAAkB,GAC7B7K,KAAKujB,qBAOThZ,SACEvK,KAAKqjB,YAAa,EAEdrjB,KAAKsjB,QAAUxe,EAKf9E,KAAKojB,SAASzb,SAAS,gBAAiB,CAAEmC,QAAS9J,OAAQoL,mBAI3DpL,KAAK8jB,iBAYH9jB,KAAKqH,QACDrH,KAAKqH,MAAMkC,UACX,WAAYvJ,KAAK+L,SACvB/L,KAAKglB,YAAa,EAElB1iB,uBAAsB,KAEhBtC,KAAK+L,SAAoC,QAAzB/L,KAAK+L,QAAQpJ,SAC/B3C,KAAK+L,QAAQkZ,SAASC,MAAK,KACzBllB,KAAKglB,YAAa,EAClB1iB,uBAAsB,KACpBtC,KAAKmlB,oBAENC,OAAM,KACPplB,KAAKglB,YAAa,WAKpBhlB,KAAK8L,aACH9L,KAAKsjB,QAAUxe,GAAqB9E,KAAKsjB,QAAUxe,GACvD9E,KAAKujB,oBAEPvjB,KAAKmlB,eAEEnlB,KAAK+L,UAAY/L,KAAK+L,QAAQmX,YACvCljB,KAAKqH,MAAM1I,UAAUmE,YAAY9C,KAAK+L,UA9CtC/L,KAAKukB,eAuDTla,WACMrK,KAAKojB,SAASzb,SAAS,kBAAmB,CAAEmC,QAAS9J,OAAQoL,kBAI7DpL,KAAKqH,QACHrH,KAAK8jB,kBAAoB9jB,KAAKglB,WAGhChlB,KAAKmlB,cACInlB,KAAKwkB,WACdxkB,KAAK2K,MAAK,GAAO,IAQvBL,aACEtK,KAAKojB,SAASzb,SAAS,oBAAqB,CAAEmC,QAAS9J,OAOzDuF,SACEvF,KAAKqjB,YAAa,EAEdrjB,KAAKojB,SAASzb,SAAS,gBAAiB,CAAEmC,QAAS9J,OAAQoL,kBAI3DpL,KAAK+L,SAAW/L,KAAK+L,QAAQmX,YAC/BljB,KAAK+L,QAAQxG,SAOjB4f,cACOnlB,KAAKqjB,aAINrjB,KAAKojB,SAASzb,SAAS,qBAAsB,CAAEmC,QAAS9J,OAAQoL,kBAKhEpL,KAAKqH,OAASrH,KAAK+L,UAAY/L,KAAK+L,QAAQmX,aAC9CljB,KAAKqH,MAAM1I,UAAUmE,YAAY9C,KAAK+L,UAElC/L,KAAK8L,aACH9L,KAAKsjB,QAAUxe,GAAqB9E,KAAKsjB,QAAUxe,GACvD9E,KAAKujB,uBA4Kb,MAAM8B,EAAc,KAEpB,MAAMC,EACJrgB,YAAYkB,GACVnG,KAAKmG,KAAOA,EACZnG,KAAKulB,UAAW,EAChBvlB,KAAKwlB,aAAexlB,KAAKwlB,aAAa1nB,KAAKkC,MAG3CmG,EAAKkO,GAAG,eAAgBrU,KAAKwlB,cAG/BC,OACEzlB,KAAKwlB,eACLxlB,KAAK8d,SAGPlO,QACE,GAAI5P,KAAKulB,UAAYvlB,KAAKqiB,WAAariB,KAAK0lB,UAI1C,OAAO,EAGT,MAAMre,EAAQrH,KAAKmG,KAAKuH,UAgBxB,OAdA1N,KAAK4J,QAAS,EACd5J,KAAK0lB,WAAY,EACjB1lB,KAAKqiB,WAAY,EACjBriB,KAAK2lB,UAAY3lB,KAAKmG,KAAKxG,QAAQimB,sBAE/Bve,GAASA,EAAMC,cAAgBD,EAAMzC,OAAS5E,KAAKmG,KAAKxG,QAAQkmB,oBAClE7lB,KAAK2lB,UAAY,GAGnB3lB,KAAK8lB,mBACL9O,YAAW,KACThX,KAAK8d,WACJ9d,KAAK+lB,aAAe,GAAK,IAErB,EAGTP,eAEE,GADAxlB,KAAKmG,KAAK6f,IAAI,eAAgBhmB,KAAKwlB,eAC9BxlB,KAAK0lB,UAAW,CACnB,MAAMre,EAAQrH,KAAKmG,KAAKuH,UACxB1N,KAAK0lB,WAAY,EACjB1lB,KAAKqiB,WAAY,EACjBriB,KAAK2lB,UAAY3lB,KAAKmG,KAAKxG,QAAQsmB,sBAC/B5e,GAASA,EAAM2B,WAAWL,QAAUtB,EAAMzC,OAAS5E,KAAKmG,KAAKxG,QAAQkmB,oBACvE7lB,KAAK2lB,UAAY,GAEnB3lB,KAAK8lB,oBAITA,mBACE,MAAM,KAAE3f,GAASnG,KACXqH,EAAQrH,KAAKmG,KAAKuH,WAClB,QAAE/N,GAAYwG,EAsCpB,GApCsC,SAAlCxG,EAAQumB,uBACVvmB,EAAQwmB,iBAAkB,EAC1BnmB,KAAKomB,cAAe,GACuB,SAAlCzmB,EAAQumB,uBACjBvmB,EAAQwmB,iBAAkB,EAC1BnmB,KAAK2lB,UAAY,EACjB3lB,KAAKomB,cAAe,GACXpmB,KAAK0lB,WAAavf,EAAKkgB,oBAEhCrmB,KAAKomB,aAAejgB,EAAKkgB,oBAEzBrmB,KAAKomB,aAAepmB,KAAKmG,KAAKmgB,iBAGhCtmB,KAAKumB,aAAelf,EAAMwE,wBAE1B1F,EAAKmG,WAAW2B,UAGhBjO,KAAKwmB,cAAiBxmB,KAAK2lB,UAAY,GACvC3lB,KAAKymB,aAAeC,QAAQ1mB,KAAKomB,eACT/e,EAAMyC,SAAWzC,EAAMyC,QAAQ6Z,oBAC9B3jB,KAAKqiB,YAAclc,EAAK+E,WAAWC,aACvDnL,KAAKymB,aAQRzmB,KAAK2mB,oBAAsBhnB,EAAQwmB,iBAPnCnmB,KAAK2mB,qBAAsB,EAEvB3mB,KAAK0lB,YACPre,EAAM0D,sBACN1D,EAAM2D,wBAKVhL,KAAK4mB,mBAAqB5mB,KAAK2mB,qBAAuB3mB,KAAKmG,KAAKxG,QAAQ6O,UAAY6W,EACpFrlB,KAAK6mB,gBAAkB7mB,KAAK2mB,oBAAsBxgB,EAAK4F,QAAU5F,EAAK2gB,IAEjE9mB,KAAKwmB,cASR,OARAxmB,KAAK2lB,UAAY,EACjB3lB,KAAKymB,cAAe,EACpBzmB,KAAK4mB,mBAAoB,EACzB5mB,KAAK2mB,qBAAsB,OACvB3mB,KAAK0lB,YACPvf,EAAK4F,QAAQ5H,MAAM4iB,QAAU1B,EAC7Blf,EAAKuI,eAAe,KAKpB1O,KAAKymB,cAAgBzmB,KAAKomB,aAAaY,WAEzChnB,KAAK+lB,cAAe,EACpB/lB,KAAKinB,gBAAkBjnB,KAAKmG,KAAKxH,UACjCqB,KAAKknB,gBAAkBlnB,KAAKmG,KAAKuH,UAAUlD,cAE3CrE,EAAKxH,UAAUwF,MAAMgjB,SAAW,SAChChhB,EAAKxH,UAAUwF,MAAMS,MAAQuB,EAAKO,aAAaxD,EAAI,MAEnDlD,KAAK+lB,cAAe,EAGlB/lB,KAAK0lB,WAEH1lB,KAAK2mB,qBACPxgB,EAAK4F,QAAQ5H,MAAM4iB,QAAU1B,EAC7Blf,EAAKuI,eAAe,KAEhB1O,KAAK4mB,oBACPzgB,EAAK2gB,GAAG3iB,MAAM4iB,QAAU1B,GAE1Blf,EAAK4F,QAAQ5H,MAAM4iB,QAAU,GAG3B/mB,KAAKymB,eACPzmB,KAAKonB,yBACDpnB,KAAKumB,eAEPvmB,KAAKumB,aAAac,WAAa,YAI/BrnB,KAAKumB,aAAapiB,MAAM4iB,QAAU1B,KAG7BrlB,KAAKqiB,YAGdlc,EAAK+E,WAAWuN,YAAY,GAAG5V,GAAGsB,MAAM4U,QAAU,OAClD5S,EAAK+E,WAAWuN,YAAY,GAAG5V,GAAGsB,MAAM4U,QAAU,OAE9C/Y,KAAK+lB,cACmB,IAAtB5f,EAAK+E,WAAWhI,IAElBiD,EAAK+E,WAAWiN,gBAChBhS,EAAK+E,WAAWK,WAMxBuS,SACM9d,KAAK0lB,WACF1lB,KAAKwmB,eACLxmB,KAAKumB,cACyB,QAA9BvmB,KAAKumB,aAAa5jB,QAOvB,IAAI2kB,SAASC,IACX,IAAIC,GAAU,EACVC,GAAa,EAzsIzB,IAAqBC,KA0sID1nB,KAAKumB,aAzsInB,WAAYmB,EACPA,EAAIzC,SAGTyC,EAAIzD,SACCqD,QAAQC,QAAQG,GAGlB,IAAIJ,SAAQ,CAACC,EAASI,KAC3BD,EAAIvD,OAAS,IAAMoD,EAAQG,GAC3BA,EAAItD,QAAUuD,MA+rIqBC,SAAQ,KACrCJ,GAAU,EACLC,GACHF,OAGJvQ,YAAW,KACTyQ,GAAa,EACTD,GACFD,MAED,IACHvQ,WAAWuQ,EAAS,QACnBK,SAAQ,IAAM5nB,KAAK6nB,cAEtB7nB,KAAK6nB,YAITA,YACE7nB,KAAKmG,KAAK4F,QAAQ5H,MAAM2jB,YAAY,6BAA8B9nB,KAAK2lB,UAAY,MAEnF3lB,KAAKmG,KAAKwB,SACR3H,KAAK0lB,UAAY,wBAA0B,yBAI7C1lB,KAAKmG,KAAKwB,SAAS,eAAiB3H,KAAK0lB,UAAY,KAAO,QAE5D1lB,KAAKmG,KAAK4F,QAAQ+G,UAAU9S,KAAK0lB,UAAY,MAAQ,UAAU,oBAE3D1lB,KAAK0lB,WACH1lB,KAAKumB,eAEPvmB,KAAKumB,aAAapiB,MAAM4iB,QAAU,GAEpC/mB,KAAK+nB,uBACI/nB,KAAKqiB,WACdriB,KAAKgoB,wBAGFhoB,KAAKwmB,eACRxmB,KAAKioB,uBAITA,uBACE,MAAM,KAAE9hB,GAASnG,KACjBA,KAAK4J,OAAS5J,KAAK0lB,UACnB1lB,KAAKulB,SAAWvlB,KAAKqiB,UACrBriB,KAAK0lB,WAAY,EACjB1lB,KAAKqiB,WAAY,EAEjBlc,EAAKwB,SACH3H,KAAK4J,OAAS,sBAAwB,uBAIxCzD,EAAKwB,SAAS,eAAiB3H,KAAK4J,OAAS,QAAU,WAEnD5J,KAAKulB,SACPpf,EAAKkF,UACIrL,KAAK4J,SACV5J,KAAKymB,eACPtgB,EAAKxH,UAAUwF,MAAMgjB,SAAW,UAChChhB,EAAKxH,UAAUwF,MAAMS,MAAQ,QAE/BuB,EAAKuH,UAAU1C,uBAInB+c,sBACE,MAAM,KAAE5hB,GAASnG,KACbA,KAAKymB,eACHzmB,KAAK+lB,eACP/lB,KAAKkoB,WAAWloB,KAAKinB,gBAAiB,YAAa,sBACnDjnB,KAAKkoB,WAAWloB,KAAKknB,gBAAiB,YAAa,SAGrD/gB,EAAKuH,UAAU3C,sBACf/K,KAAKkoB,WACH/hB,EAAKuH,UAAU/O,UACf,YACAwH,EAAKuH,UAAUX,wBAIf/M,KAAK4mB,mBACP5mB,KAAKkoB,WAAW/hB,EAAK2gB,GAAI,UAAW3gB,EAAKxG,QAAQ6O,WAG/CxO,KAAK2mB,qBACP3mB,KAAKkoB,WAAW/hB,EAAK4F,QAAS,UAAW,GAI7Cic,wBACE,MAAM,KAAE7hB,GAASnG,KAEbA,KAAKymB,cACPzmB,KAAKonB,wBAAuB,GAG1BpnB,KAAK4mB,mBACFzgB,EAAKqI,UAAY,KACtBxO,KAAKkoB,WAAW/hB,EAAK2gB,GAAI,UAAW,GAGlC9mB,KAAK2mB,qBACP3mB,KAAKkoB,WAAW/hB,EAAK4F,QAAS,UAAW,GAI7Cqb,uBAAuBlO,GACrB,MAAM,KAAE/S,GAASnG,MACX,UAAEgnB,GAAchnB,KAAKomB,cACrB,UAAE1Y,EAAS,aAAEhH,GAAiBP,EAEpC,GAAInG,KAAK+lB,aAAc,CACrB,MAAMoC,GAAoBzhB,EAAaxD,GAAKlD,KAAKomB,aAAaljB,EAAI8jB,EAAU9jB,GAAK8jB,EAAUtiB,EACrF0jB,GAAoB1hB,EAAavD,GAAKnD,KAAKomB,aAAajjB,EAAI6jB,EAAU7jB,GAAK6jB,EAAUriB,EACrF0jB,EAAmB3hB,EAAaxD,EAAI8jB,EAAUtiB,EAC9C4jB,EAAmB5hB,EAAavD,EAAI6jB,EAAUriB,EAGhDuU,GACFlZ,KAAKkoB,WACHloB,KAAKinB,gBACL,YACAljB,EAAkBokB,EAAkBC,IAGtCpoB,KAAKkoB,WACHloB,KAAKknB,gBACL,YACAnjB,EAAkBskB,EAAkBC,MAGtCpkB,EAAalE,KAAKinB,gBAAiBkB,EAAkBC,GACrDlkB,EAAalE,KAAKknB,gBAAiBmB,EAAkBC,IAIzDvlB,EAAe2K,EAAU7D,IAAKmd,GAAahnB,KAAKomB,cAChD1Y,EAAUpG,cAAgBtH,KAAKomB,aAAa1hB,EAAIgJ,EAAU9I,MAEtDsU,EACFlZ,KAAKkoB,WAAWxa,EAAU/O,UAAW,YAAa+O,EAAUX,uBAE5DW,EAAU1C,sBASdkd,WAAW5nB,EAAQgE,EAAML,GACvB,IAAKjE,KAAK2lB,UAER,YADArlB,EAAO6D,MAAMG,GAAQL,GAIvB,MAAM,WAAEqI,GAAetM,KAAKmG,KACtBoiB,EAAY,CAChB9pB,SAAUuB,KAAK2lB,UACfjnB,OAAQsB,KAAKmG,KAAKxG,QAAQjB,OAC1BsO,WAAY,KACLV,EAAWuR,iBAAiBhe,QAC/BG,KAAKioB,wBAGT3nB,UAEFioB,EAAUjkB,GAAQL,EAClBqI,EAAWO,gBAAgB0b,IAsD/B,SAASC,EAAc5hB,EAAOwc,GAC5B,MAAMzc,EAAWyc,EAASqF,YAAY7hB,GAEtC,IAAIwc,EAASzb,SAAS,gBAAiB,CAAEf,QAAOD,aAAYyE,iBAI5D,OA7CF,SAAsBzE,EAAUyc,EAAUxc,GAExC,MAAMkD,EAAUsZ,EAASsF,sBAAsB/hB,EAAUC,GAEzD,IAAKkD,IAAYA,EAAQ+a,SACvB,OAGF,MAAM,QAAEllB,GAAYyjB,EAKdrb,EAAcZ,EAAexH,EADdyjB,EAAS1c,cAAgBR,EAAgBvG,GACJgH,EAAUC,GAE9D+hB,EAAY,IAAIzgB,EAAUvI,EAASgH,GAAW,GASpD,OARAgiB,EAAUlhB,OAAOqC,EAAQlF,MAAOkF,EAAQjF,OAAQkD,GAEhD+B,EAAQ+a,WACR/a,EAAQ8B,iBACNtI,KAAKslB,KAAK9e,EAAQlF,MAAQ+jB,EAAUhgB,SACpCrF,KAAKslB,KAAK9e,EAAQjF,OAAS8jB,EAAUhgB,UAGhCmB,EAqBA+e,CAAaliB,EAAUyc,EAAUxc,GAI1C,MAAMkiB,GACJ7jB,YAAYkB,GACVnG,KAAKmG,KAAOA,EAEZnG,KAAK+oB,MAAQzlB,KAAKQ,IAChBqC,EAAKxG,QAAQqpB,QAAQ,GAAK7iB,EAAKxG,QAAQqpB,QAAQ,GAAK,EAlE9B,GAqExBhpB,KAAKipB,aAAe,GAQtB3O,WAAW3C,GACT,MAAM,KAAExR,GAASnG,KAEjB,GAAImG,EAAKwB,SAAS,YAAYyD,iBAC5B,OAGF,MAAM,QAAE4d,GAAY7iB,EAAKxG,QACnB+b,OAAqB5b,IAAT6X,GAA6BA,GAAQ,EACvD,IAAIrb,EAGJ,IAAKA,EAAI,EAAGA,GAAK0sB,EAAQ,GAAI1sB,IAC3B0D,KAAKkpB,iBAAiB/iB,EAAKqD,WAAakS,EAAYpf,GAAMA,IAI5D,IAAKA,EAAI,EAAGA,GAAK0sB,EAAQ,GAAI1sB,IAC3B0D,KAAKkpB,iBAAiB/iB,EAAKqD,WAAakS,GAAcpf,EAAKA,IAI/D4sB,iBAAiBtiB,GACfA,EAAQ5G,KAAKmG,KAAKqT,eAAe5S,GAEjC,IAAIkD,EAAU9J,KAAKmpB,kBAAkBviB,GAChCkD,IAEHA,EAAU0e,EAAc5hB,EAAO5G,KAAKmG,MAEhC2D,GACF9J,KAAKopB,WAAWtf,IAKtBE,kBAAkB3C,GAChB,IAAIyC,EAAU9J,KAAKmpB,kBAAkB9hB,EAAMT,OAa3C,OAZKkD,IAEHA,EAAU9J,KAAKmG,KAAKuiB,sBAAsBrhB,EAAMS,KAAMT,EAAMT,OACxDkD,GACF9J,KAAKopB,WAAWtf,IAIhBA,GAEFA,EAAQwa,SAASjd,GAEZyC,EAMTsf,WAAWtf,GAKT,GAHA9J,KAAKqpB,cAAcvf,EAAQlD,OAC3B5G,KAAKipB,aAAajjB,KAAK8D,GAEnB9J,KAAKipB,aAAappB,OAASG,KAAK+oB,MAAO,CAEzC,MAAMO,EAAgBtpB,KAAKipB,aAAa5R,WAAWkS,IACzCA,EAAKlG,aAAekG,EAAKje,WAEnC,IAAuB,IAAnBge,EAAsB,CACJtpB,KAAKipB,aAAazR,OAAO8R,EAAe,GAAG,GACnDje,YAUlBge,cAAcziB,GACZ,MAAM0iB,EAAgBtpB,KAAKipB,aAAa5R,WAAUkS,GAAQA,EAAK3iB,QAAUA,KAClD,IAAnB0iB,GACFtpB,KAAKipB,aAAazR,OAAO8R,EAAe,GAI5CH,kBAAkBviB,GAChB,OAAO5G,KAAKipB,aAAaO,MAAK1f,GAAWA,EAAQlD,QAAUA,IAG7DyE,UACErL,KAAKipB,aAAa5pB,SAAQyK,GAAWA,EAAQuB,YAC7CrL,KAAKipB,aAAe,MAIxB,MAAMQ,GAAiB,CACrB/Y,gBAAgB,EAChB4H,QAAS,GACTtW,MAAM,EACN4P,cAAc,EACdvD,qBAAqB,EACrBuX,sBAAuB,IACvBK,sBAAuB,IACvB/Y,sBAAuB,IACvB0O,QAAQ,EACRC,WAAW,EACXb,aAAa,EACb6K,kBAAmB,IACnBvS,yBAAyB,EACzBmP,iBAAkB,gBAClBiH,cAAe,QACfC,UAAW,kBACX7S,gBAAiB,OACjByK,kBAAmB,MACnBL,eAAgB,IAChB1S,UAAW,GAEX5H,MAAO,EACPme,SAAU,6BACViE,QAAS,CAAC,EAAG,GACbtqB,OAAQ,4BAodK,UAjdf,cA5sBA,cAhkBA,MACEuG,cACEjF,KAAK4pB,WAAa,GAClB5pB,KAAK6pB,SAAW,GAGlBC,UAAUjtB,EAAM2F,EAAIunB,EAAW,KACxB/pB,KAAK6pB,SAAShtB,KACjBmD,KAAK6pB,SAAShtB,GAAQ,IAGxBmD,KAAK6pB,SAAShtB,GAAMmJ,KAAK,CAAExD,KAAIunB,aAC/B/pB,KAAK6pB,SAAShtB,GAAMilB,MAAK,CAACkI,EAAIC,IAAOD,EAAGD,SAAWE,EAAGF,WAElD/pB,KAAKmG,MACPnG,KAAKmG,KAAK2jB,UAAUjtB,EAAM2F,EAAIunB,GAIlCG,aAAartB,EAAM2F,GACbxC,KAAK6pB,SAAShtB,KAChBmD,KAAK6pB,SAAShtB,GAAQmD,KAAK6pB,SAAShtB,GAAMkJ,QAAOA,GAAWA,EAAOvD,KAAOA,KAGxExC,KAAKmG,MACPnG,KAAKmG,KAAK+jB,aAAartB,EAAM2F,GAIjCyd,aAAapjB,KAASstB,GAMpB,OALInqB,KAAK6pB,SAAShtB,IAChBmD,KAAK6pB,SAAShtB,GAAMwC,SAAS0G,IAC3BokB,EAAK,GAAKpkB,EAAOvD,GAAG4nB,MAAMpqB,KAAMmqB,MAG7BA,EAAK,GAGd9V,GAAGxX,EAAM2F,GACFxC,KAAK4pB,WAAW/sB,KACnBmD,KAAK4pB,WAAW/sB,GAAQ,IAE1BmD,KAAK4pB,WAAW/sB,GAAMmJ,KAAKxD,GAKvBxC,KAAKmG,MACPnG,KAAKmG,KAAKkO,GAAGxX,EAAM2F,GAIvBwjB,IAAInpB,EAAM2F,GACJxC,KAAK4pB,WAAW/sB,KAClBmD,KAAK4pB,WAAW/sB,GAAQmD,KAAK4pB,WAAW/sB,GAAMkJ,QAAO5E,GAAaqB,IAAOrB,KAGvEnB,KAAKmG,MACPnG,KAAKmG,KAAK6f,IAAInpB,EAAM2F,GAIxBmF,SAAS9K,EAAM8lB,GACb,GAAI3iB,KAAKmG,KACP,OAAOnG,KAAKmG,KAAKwB,SAAS9K,EAAM8lB,GAGlC,MAAMnQ,EAAQ,IAAIkQ,EAAgB7lB,EAAM8lB,GAExC,OAAK3iB,KAAK4pB,YAIN5pB,KAAK4pB,WAAW/sB,IAClBmD,KAAK4pB,WAAW/sB,GAAMwC,SAAS8B,IAC7BA,EAAS1E,KAAKuD,KAAMwS,MAIjBA,GATEA,IA8fXyG,cACE,IAAIoR,EACJ,MAAM,WAAEC,GAAetqB,KAAKL,QACvB2qB,EAEMA,EAAWzqB,OAEpBwqB,EAAWC,EAAWzqB,OACbyqB,EAAWC,UAEfD,EAAWtI,QACdsI,EAAWtI,MAAQhiB,KAAKwqB,uBAAuBF,EAAWC,UAGxDD,EAAWtI,QACbqI,EAAWC,EAAWtI,MAAMniB,SAX9BwqB,EAAW,EAgBb,MAAM7X,EAAQxS,KAAK2H,SAAS,WAAY,CACtC2iB,aACAD,aAEF,OAAOrqB,KAAKigB,aAAa,WAAYzN,EAAM6X,SAAUC,GAGvD5B,sBAAsBzf,EAAWrC,GAC/B,OAAO,IAAIuc,EAAQla,EAAWjJ,KAAM4G,GAYtC6hB,YAAY7hB,GACV,MAAM,WAAE0jB,GAAetqB,KAAKL,QAC5B,IAAI8qB,EACAC,MAAMC,QAAQL,GAEhBG,EAAiBH,EAAW1jB,GACnB0jB,GAAcA,EAAWC,UAM7BD,EAAWtI,QACdsI,EAAWtI,MAAQhiB,KAAKwqB,uBAAuBF,EAAWC,UAG5DE,EAAiBH,EAAWtI,MAAMpb,IAGpC,IAAID,EAAW8jB,EAEX9jB,aAAoBikB,UACtBjkB,EAAW3G,KAAK6qB,sBAAsBlkB,IAKxC,MAAM6L,EAAQxS,KAAK2H,SAAS,WAAY,CACtChB,SAAUA,GAAY,GACtBC,UAGF,OAAO5G,KAAKigB,aAAa,WAAYzN,EAAM7L,SAAUC,GASvD4jB,uBAAuBM,GACrB,OAAI9qB,KAAKL,QAAQorB,UAAY/qB,KAAKL,QAAQqrB,cAr6H9C,SAA+BC,EAAQC,EAAgBC,EAAS5qB,UAC9D,IAAI6qB,EAAW,GAEf,GAAIH,aAAkBL,QACpBQ,EAAW,CAACH,QACP,GAAIA,aAAkBI,UAAYX,MAAMC,QAAQM,GACrDG,EAAWV,MAAM5oB,KAAKmpB,OACjB,CACL,MAAMK,EAA6B,kBAAXL,EAAsBA,EAASC,EACnDI,IACFF,EAAWV,MAAM5oB,KAAKqpB,EAAOI,iBAAiBD,KAIlD,OAAOF,EAw5HII,CACLxrB,KAAKL,QAAQorB,SACb/qB,KAAKL,QAAQqrB,cACbF,IACG,GAGA,CAACA,GASVD,sBAAsB9e,GACpB,MAAMpF,EAAW,CACfoF,WAGI0f,EAA6B,MAApB1f,EAAQpJ,QAAkBoJ,EAAUA,EAAQ2f,cAAc,KAEzE,GAAID,EAAQ,CAGV9kB,EAASsc,IAAMwI,EAAO/G,QAAQiH,SAAWF,EAAOrrB,KAE5CqrB,EAAO/G,QAAQkH,aACjBjlB,EAASqd,OAASyH,EAAO/G,QAAQkH,YAGnCjlB,EAAS/B,MAAQ3D,SAASwqB,EAAO/G,QAAQmH,UAAW,IACpDllB,EAAS9B,OAAS5D,SAASwqB,EAAO/G,QAAQoH,WAAY,IAGtDnlB,EAASjC,EAAIiC,EAAS/B,MACtB+B,EAAShC,EAAIgC,EAAS9B,OAElB4mB,EAAO/G,QAAQqH,WACjBplB,EAASvB,KAAOqmB,EAAO/G,QAAQqH,UAGjC,MAAMC,EAAcjgB,EAAQ2f,cAAc,OAEtCM,IAGFrlB,EAASkd,KAAOmI,EAAYC,YAAcD,EAAY/I,IACtDtc,EAASqc,IAAMgJ,EAAY3rB,aAAa,SAGtCorB,EAAO/G,QAAQwH,aAAeT,EAAO/G,QAAQyH,WAC/CxlB,EAASylB,cAAe,GAM5B,OAFApsB,KAAKigB,aAAa,cAAetZ,EAAUoF,EAAS0f,GAE7C9kB,IA2jBT1B,YAAYtF,GACV0sB,QAEArsB,KAAKssB,gBAAgB3sB,GAGrBK,KAAK8X,OAAS,GAEd9X,KAAKusB,kBAAoB,GAGzBvsB,KAAK0G,aAAe,GAGpB1G,KAAKwO,UAAY,EAEjBxO,KAAKsU,OAAS,IAAItP,EAGlBhF,KAAKsM,WAAa,IAAIsR,EAEtB5d,KAAKkL,WAAa,IAAIgN,EAAWlY,MACjCA,KAAK8N,SAAW,IAAI0F,EAASxT,MAC7BA,KAAK2J,OAAS,IAAI2b,EAAOtlB,MACzBA,KAAKwsB,SAAW,IAAI/R,EAASza,MAC7BA,KAAK+J,cAAgB,IAAI+e,GAAc9oB,MAGzC2hB,OACE,GAAI3hB,KAAK4J,QAAU5J,KAAKysB,aACtB,OAGFzsB,KAAK4J,QAAS,EACd5J,KAAK2H,SAAS,QACd3H,KAAK2H,SAAS,cAEd3H,KAAK0sB,uBAGL,IAAIC,EAAc,aAiElB,OAhEI3sB,KAAK8N,SAASkG,gBAChB2Y,GAAe,gBAEb3sB,KAAKL,QAAQitB,YACfD,GAAe,IAAM3sB,KAAKL,QAAQitB,WAEpC5sB,KAAK+L,QAAQrJ,WAAa,IAAMiqB,EAEhC3sB,KAAKwJ,UAAYxJ,KAAKL,QAAQiH,OAAS,EACvC5G,KAAKqZ,eAAiBrZ,KAAKwJ,UAC3BxJ,KAAK2H,SAAS,eAGd3H,KAAK6sB,YAAc,IAAIzO,EAAYpe,OAG/BqJ,OAAOrI,MAAMhB,KAAKwJ,YACfxJ,KAAKwJ,UAAY,GACjBxJ,KAAKwJ,WAAaxJ,KAAKiZ,iBAC5BjZ,KAAKwJ,UAAY,GAGdxJ,KAAK8N,SAASkG,eAEjBhU,KAAKuV,gBAIPvV,KAAK8sB,aAEL9sB,KAAK8X,OAAO3U,EAAIvE,OAAOc,YAEvBM,KAAK+sB,iBAAmB/sB,KAAKyoB,YAAYzoB,KAAKwJ,WAC9CxJ,KAAK2H,SAAS,cAAe3H,KAAKwJ,UAAWxJ,KAAK+sB,kBAAkB,GAGpE/sB,KAAKqmB,oBAAsBrmB,KAAKsmB,iBAChCtmB,KAAK2H,SAAS,iBAEd3H,KAAKqU,GAAG,uBAAuB,KAE7BrU,KAAKma,WAAWna,KAAKkL,WAAWuN,YAAY,GAAIzY,KAAKwJ,UAAY,GACjExJ,KAAKma,WAAWna,KAAKkL,WAAWuN,YAAY,GAAIzY,KAAKwJ,UAAY,GAEjExJ,KAAKkL,WAAWuN,YAAY,GAAG5V,GAAGsB,MAAM4U,QAAU,QAClD/Y,KAAKkL,WAAWuN,YAAY,GAAG5V,GAAGsB,MAAM4U,QAAU,QAElD/Y,KAAK4K,cAEL5K,KAAK+J,cAAcuQ,aAEnBta,KAAKsU,OAAOnP,IAAIvG,OAAQ,SAAUoB,KAAKgtB,kBAAkBlvB,KAAKkC,OAC9DA,KAAKsU,OAAOnP,IAAIvG,OAAQ,SAAUoB,KAAKitB,wBAAwBnvB,KAAKkC,OACpEA,KAAK2H,SAAS,iBAIhB3H,KAAKma,WAAWna,KAAKkL,WAAWuN,YAAY,GAAIzY,KAAKwJ,WACrDxJ,KAAK2H,SAAS,UAEd3H,KAAK2J,OAAO8b,OAEZzlB,KAAK2H,SAAS,cAEP,EAST6R,eAAe5S,GACb,MAAM0S,EAAYtZ,KAAKiZ,cAcvB,OAZIjZ,KAAKL,QAAQqC,OACX4E,EAAQ0S,EAAY,IACtB1S,GAAS0S,GAGP1S,EAAQ,IACVA,GAAS0S,IAIb1S,EAAQhD,EAAMgD,EAAO,EAAG0S,EAAY,GAKtC1O,cACE5K,KAAKkL,WAAWuN,YAAYpZ,SAASqZ,IAC/BA,EAAWrR,OACbqR,EAAWrR,MAAMuD,iBASvBsiB,KAAKtmB,GACH5G,KAAKkL,WAAW+D,YACdjP,KAAKwZ,eAAe5S,GAAS5G,KAAKqZ,gBAOtC8T,OACEntB,KAAKktB,KAAKltB,KAAKqZ,eAAiB,GAMlC+T,OACEptB,KAAKktB,KAAKltB,KAAKqZ,eAAiB,GAMlCrN,UAAUme,GACRnqB,KAAK0N,UAAU1B,UAAUme,GAM3Bld,aACEjN,KAAK0N,UAAUT,aAOjB2C,QACO5P,KAAK2J,OAAOC,SAAU5J,KAAKysB,eAIhCzsB,KAAKysB,cAAe,EAEpBzsB,KAAK2H,SAAS,SAEd3H,KAAKsU,OAAO9O,YACZxF,KAAK2J,OAAOiG,SAUdvE,UACE,IAAKrL,KAAKysB,aAGR,OAFAzsB,KAAKL,QAAQumB,sBAAwB,YACrClmB,KAAK4P,QAIP5P,KAAK2H,SAAS,WAEd3H,KAAKqtB,UAAY,KAEjBrtB,KAAKuU,WAAWG,YAAc,KAC9B1U,KAAKuU,WAAWI,WAAa,KAE7B3U,KAAK+L,QAAQxG,SAEbvF,KAAKkL,WAAWuN,YAAYpZ,SAASqZ,IAC/BA,EAAWrR,OACbqR,EAAWrR,MAAMgE,aAIrBrL,KAAK+J,cAAcsB,UACnBrL,KAAKsU,OAAO9O,YAQd8nB,oBAAoBC,GAClBvtB,KAAK+J,cAAcsf,cAAckE,GACjCvtB,KAAKkL,WAAWuN,YAAYpZ,SAAQ,CAACqZ,EAAYpc,KAC/C,IAAIkxB,EAAuBxtB,KAAK0N,UAAU9G,MAAQ,EAAItK,EAClD0D,KAAKuZ,YACPiU,EAAuBxtB,KAAKwZ,eAAegU,IAEzCA,IAAyBD,IAE3BvtB,KAAKma,WAAWzB,EAAY6U,GAAY,GAG9B,IAANjxB,IACF0D,KAAK0N,UAAYgL,EAAWrR,MAC5BqR,EAAWrR,MAAM+C,aAAY,QAKnCpK,KAAK2H,SAAS,UAWhBwS,WAAWsT,EAAQ7mB,EAAO6E,GAKxB,GAJIzL,KAAKuZ,YACP3S,EAAQ5G,KAAKwZ,eAAe5S,IAG1B6mB,EAAOpmB,MAAO,CAChB,GAAIomB,EAAOpmB,MAAMT,QAAUA,IAAU6E,EAGnC,OAIFgiB,EAAOpmB,MAAMgE,UACboiB,EAAOpmB,MAAQ,KAIjB,IAAKrH,KAAKuZ,YAAc3S,EAAQ,GAAKA,GAAS5G,KAAKiZ,eACjD,OAGF,MAAMtS,EAAW3G,KAAKyoB,YAAY7hB,GAClC6mB,EAAOpmB,MAAQ,IAAIiC,EAAM3C,EAAUC,EAAO5G,MAGtC4G,IAAU5G,KAAKwJ,YACjBxJ,KAAK0N,UAAY+f,EAAOpmB,OAG1BomB,EAAOpmB,MAAMkD,OAAOkjB,EAAO5qB,IAG7BuK,yBACE,MAAO,CACLlK,EAAGlD,KAAK0G,aAAaxD,EAAI,EACzBC,EAAGnD,KAAK0G,aAAavD,EAAI,GAU7B2pB,WAAWrhB,GAIT,GAAIzL,KAAKysB,aAGP,OAMF,MAAMpmB,EAAkBH,EAAgBlG,KAAKL,QAASK,OAEjDyL,GAAS9H,EAAY0C,EAAiBrG,KAAKusB,qBAOhDxpB,EAAe/C,KAAKusB,kBAAmBlmB,GAEvCrG,KAAK2H,SAAS,gBAEd5E,EAAe/C,KAAK0G,aAAc1G,KAAKusB,mBAEvCvsB,KAAKitB,0BAELjtB,KAAK2H,SAAS,gBAId3H,KAAKkL,WAAWK,OAAOvL,KAAK2J,OAAOC,SAE9B5J,KAAK0tB,UAAY9uB,OAAO+uB,WAAW,sBAAsBC,SAC5D5tB,KAAKuV,gBAGPvV,KAAK2H,SAAS,WAGhB+G,eAAeqY,GACb/mB,KAAKwO,UAAYlL,KAAKQ,IAAIijB,EAAS,GACnC/mB,KAAK8mB,GAAG3iB,MAAM4iB,QAAU/mB,KAAKwO,UAAYxO,KAAKL,QAAQ6O,UAMxD+G,gBACOvV,KAAK0tB,WACR1tB,KAAK0tB,UAAW,EAChB1tB,KAAK+L,QAAQ+G,UAAU3N,IAAI,oBAO/B6nB,oBACEhtB,KAAK8sB,aAOD,oBAAoBe,KAAKjvB,OAAOqV,UAAU6Z,YAC5C9W,YAAW,KACThX,KAAK8sB,eACJ,KASPG,0BACEjtB,KAAK+tB,gBAAgB,EAAGnvB,OAAOc,aAGjCquB,gBAAgB7qB,EAAGC,GACjBnD,KAAK8X,OAAO5U,EAAIA,EAChBlD,KAAK8X,OAAO3U,EAAIA,EAChBnD,KAAK2H,SAAS,sBAOhB+kB,uBAEE1sB,KAAK+L,QAAUtJ,EAAc,QAC7BzC,KAAK+L,QAAQmT,aAAa,YAAa,GACvClf,KAAK+L,QAAQmT,aAAa,OAAQ,UAGlClf,KAAK8b,SAAW9b,KAAK+L,QAIrB/L,KAAK8mB,GAAKrkB,EAAc,YAAY,EAAOzC,KAAK+L,SAChD/L,KAAKuU,WAAa9R,EAAc,qBAAqB,EAAOzC,KAAK+L,SACjE/L,KAAKrB,UAAY8D,EAAc,mBAAmB,EAAOzC,KAAKuU,YAE9DvU,KAAKkL,WAAW4N,gBAEhB9Y,KAAKmhB,GAAK,IAAIO,EAAG1hB,MACjBA,KAAKmhB,GAAGQ,QAGP3hB,KAAKL,QAAQiD,YAAcrC,SAASG,MAAMoC,YAAY9C,KAAK+L,SAU9Dua,iBACE,OA3vDJ,SAAwB1f,EAAOD,EAAUyc,GAEvC,MAAM5Q,EAAQ4Q,EAASzb,SAAS,cAAe,CAC7Cf,QACAD,WACAyc,aAEF,GAAI5Q,EAAMwb,YACR,OAAOxb,EAAMwb,YAGf,MAAM,QAAEjiB,GAAYpF,EACpB,IAAIqnB,EACAC,EAEJ,GAAIliB,IAA8C,IAAnCqX,EAASzjB,QAAQuuB,cAAyB,CACvD,MAAMA,EAAgB9K,EAASzjB,QAAQuuB,eAAiB,MACxDD,EAAYliB,EAAQ6hB,QAAQM,GACxBniB,EAAUA,EAAQ2f,cAAcwC,GAiBtC,OAdAD,EAAY7K,EAASnD,aAAa,UAAWgO,EAAWtnB,EAAUC,GAE9DqnB,IAIAD,EAHGrnB,EAASylB,aAlElB,SAAmCvpB,EAAIsrB,EAAYC,GACjD,MAAMC,EAAgBxrB,EAAGjB,wBAInB0G,EAAS+lB,EAAczpB,MAAQupB,EAC/B5lB,EAAS8lB,EAAcxpB,OAASupB,EAChCE,EAAgBhmB,EAASC,EAASD,EAASC,EAE3CgmB,GAAWF,EAAczpB,MAAQupB,EAAaG,GAAiB,EAC/DE,GAAWH,EAAcxpB,OAASupB,EAAcE,GAAiB,EAKjErkB,EAAS,CACb/G,EAAGmrB,EAAcI,KAAOF,EACxBprB,EAAGkrB,EAAcxsB,IAAM2sB,EACvB9pB,EAAGypB,EAAaG,GAYlB,OAPArkB,EAAO+c,UAAY,CACjBtiB,EAAG2pB,EAAczpB,MACjBD,EAAG0pB,EAAcxpB,OACjB3B,EAAGqrB,EACHprB,EAAGqrB,GAGEvkB,EAuCWykB,CACZT,EACAtnB,EAASjC,EACTiC,EAAShC,GAjFjB,SAA4B9B,GAC1B,MAAMwrB,EAAgBxrB,EAAGjB,wBACzB,MAAO,CACLsB,EAAGmrB,EAAcI,KACjBtrB,EAAGkrB,EAAcxsB,IACjB6C,EAAG2pB,EAAczpB,OAuED+pB,CAAmBV,IAU9B7K,EAASnD,aAAa,cAAe+N,EAAarnB,EAAUC,GAwtD1D0f,CACLtmB,KAAKwJ,UACLxJ,KAAK0N,UAAY1N,KAAK0N,UAAU5F,KAAO9H,KAAK+sB,iBAC5C/sB,MAQJuZ,UACE,OAAQvZ,KAAKL,QAAQqC,MAAQhC,KAAKiZ,cAAgB,EAGpDqT,gBAAgB3sB,GACVf,OAAO+uB,WAAW,4CAA4CC,UAChEjuB,EAAQumB,sBAAwB,OAChCvmB,EAAQuN,sBAAwB,GAGlClN,KAAKL,QAAU,IACV8pB,MACA9pB,M,iCCjpKT,IAgBIivB,EAAS,SAAUC,GAGtB,IAAIC,EAAO,0CACPC,EAAW,EAGXC,EAAmB,GAGnBC,EAAI,CAsBPC,OAAQL,EAAMD,OAASC,EAAMD,MAAMM,OAsBnCC,4BAA6BN,EAAMD,OAASC,EAAMD,MAAMO,4BAWxDC,KAAM,CACLC,OAAQ,SAASA,EAAOC,GACvB,OAAIA,aAAkBC,EACd,IAAIA,EAAMD,EAAOlqB,KAAMiqB,EAAOC,EAAOxlB,SAAUwlB,EAAOE,OACnD9E,MAAMC,QAAQ2E,GACjBA,EAAOG,IAAIJ,GAEXC,EAAOzuB,QAAQ,KAAM,SAASA,QAAQ,KAAM,QAAQA,QAAQ,UAAW,MAoBhFuE,KAAM,SAAUrI,GACf,OAAOC,OAAOkB,UAAUwxB,SAASjzB,KAAKM,GAAGmK,MAAM,GAAI,IASpDyoB,MAAO,SAAUC,GAIhB,OAHKA,EAAU,MACd5yB,OAAOC,eAAe2yB,EAAK,OAAQ,CAAEryB,QAASwxB,IAExCa,EAAU,MAalBC,MAAO,SAASC,EAAU/yB,EAAGgzB,GAG5B,IAAIF,EAAWzsB,EACf,OAHA2sB,EAAUA,GAAW,GAGbd,EAAEG,KAAKhqB,KAAKrI,IACnB,IAAK,SAEJ,GADAqG,EAAK6rB,EAAEG,KAAKO,MAAM5yB,GACdgzB,EAAQ3sB,GACX,OAAO2sB,EAAQ3sB,GAKhB,IAAK,IAAIvF,KAHTgyB,EAA2C,GAC3CE,EAAQ3sB,GAAMysB,EAEE9yB,EACXA,EAAEoB,eAAeN,KACpBgyB,EAAMhyB,GAAOiyB,EAAU/yB,EAAEc,GAAMkyB,IAIjC,OAA0B,EAE3B,IAAK,QAEJ,OADA3sB,EAAK6rB,EAAEG,KAAKO,MAAM5yB,GACdgzB,EAAQ3sB,GACJ2sB,EAAQ3sB,IAEhBysB,EAAQ,GACRE,EAAQ3sB,GAAMysB,EAEd,EAA8CxwB,SAAQ,SAAU2wB,EAAG1zB,GAClEuzB,EAAMvzB,GAAKwzB,EAAUE,EAAGD,MAGC,GAE3B,QACC,OAAOhzB,IAYVkzB,YAAa,SAAUlkB,GACtB,KAAOA,GAAS,CACf,IAAIrP,EAAIoyB,EAAKoB,KAAKnkB,EAAQrJ,WAC1B,GAAIhG,EACH,OAAOA,EAAE,GAAGqE,cAEbgL,EAAUA,EAAQokB,cAEnB,MAAO,QAURC,YAAa,SAAUrkB,EAASskB,GAG/BtkB,EAAQrJ,UAAYqJ,EAAQrJ,UAAU7B,QAAQyvB,OAAOxB,EAAM,MAAO,IAIlE/iB,EAAQ+G,UAAU3N,IAAI,YAAckrB,IAUrCE,cAAe,WACd,GAAwB,qBAAbhwB,SACV,OAAO,KAER,GAAI,kBAAmBA,SACtB,OAA2BA,SAAsB,cAOlD,IACC,MAAM,IAAIiwB,MACT,MAAOC,GAQR,IAAIxN,GAAO,qCAAqCiN,KAAKO,EAAIC,QAAU,IAAI,GACvE,GAAIzN,EAAK,CACR,IAAI0N,EAAUpwB,SAASqwB,qBAAqB,UAC5C,IAAK,IAAIt0B,KAAKq0B,EACb,GAAIA,EAAQr0B,GAAG2mB,KAAOA,EACrB,OAAO0N,EAAQr0B,GAIlB,OAAO,OAuBTiN,SAAU,SAAUwC,EAASrJ,EAAWmuB,GAGvC,IAFA,IAAIC,EAAK,MAAQpuB,EAEVqJ,GAAS,CACf,IAAI+G,EAAY/G,EAAQ+G,UACxB,GAAIA,EAAUE,SAAStQ,GACtB,OAAO,EAER,GAAIoQ,EAAUE,SAAS8d,GACtB,OAAO,EAER/kB,EAAUA,EAAQokB,cAEnB,QAASU,IAWXE,UAAW,CAIVC,MAAOhC,EACPiC,UAAWjC,EACXkC,KAAMlC,EACNmC,IAAKnC,EA8BLoC,OAAQ,SAAUhuB,EAAIiuB,GACrB,IAAIvC,EAAOG,EAAEG,KAAKS,MAAMZ,EAAE8B,UAAU3tB,IAEpC,IAAK,IAAIvF,KAAOwzB,EACfvC,EAAKjxB,GAAOwzB,EAAMxzB,GAGnB,OAAOixB,GA8ERwC,aAAc,SAAUC,EAAQC,EAAQC,EAAQC,GAE/C,IAAIC,GADJD,EAAOA,GAA4BzC,EAAW,WAC3BsC,GAEfK,EAAM,GAEV,IAAK,IAAIC,KAASF,EACjB,GAAIA,EAAQxzB,eAAe0zB,GAAQ,CAElC,GAAIA,GAASL,EACZ,IAAK,IAAIM,KAAYL,EAChBA,EAAOtzB,eAAe2zB,KACzBF,EAAIE,GAAYL,EAAOK,IAMrBL,EAAOtzB,eAAe0zB,KAC1BD,EAAIC,GAASF,EAAQE,IAKxB,IAAIE,EAAML,EAAKH,GAUf,OATAG,EAAKH,GAAUK,EAGf3C,EAAE8B,UAAUiB,IAAI/C,EAAE8B,WAAW,SAAUlzB,EAAKN,GACvCA,IAAUw0B,GAAOl0B,GAAO0zB,IAC3BvxB,KAAKnC,GAAO+zB,MAIPA,GAIRI,IAAK,SAASA,EAAIj1B,EAAG8B,EAAUuG,EAAM2qB,GACpCA,EAAUA,GAAW,GAErB,IAAIJ,EAAQV,EAAEG,KAAKO,MAEnB,IAAK,IAAIrzB,KAAKS,EACb,GAAIA,EAAEoB,eAAe7B,GAAI,CACxBuC,EAASpC,KAAKM,EAAGT,EAAGS,EAAET,GAAI8I,GAAQ9I,GAElC,IAAI2B,EAAWlB,EAAET,GACb21B,EAAehD,EAAEG,KAAKhqB,KAAKnH,GAEV,WAAjBg0B,GAA8BlC,EAAQJ,EAAM1xB,IAGpB,UAAjBg0B,GAA6BlC,EAAQJ,EAAM1xB,MACrD8xB,EAAQJ,EAAM1xB,KAAa,EAC3B+zB,EAAI/zB,EAAUY,EAAUvC,EAAGyzB,KAJ3BA,EAAQJ,EAAM1xB,KAAa,EAC3B+zB,EAAI/zB,EAAUY,EAAU,KAAMkxB,OAUnCmC,QAAS,GAcTC,aAAc,SAAUC,EAAOvzB,GAC9BowB,EAAEoD,kBAAkB9xB,SAAU6xB,EAAOvzB,IAkBtCwzB,kBAAmB,SAAU1zB,EAAWyzB,EAAOvzB,GAC9C,IAAIyzB,EAAM,CACTzzB,SAAUA,EACVF,UAAWA,EACX2sB,SAAU,oGAGX2D,EAAEsD,MAAMC,IAAI,sBAAuBF,GAEnCA,EAAIlH,SAAWV,MAAMxsB,UAAUgJ,MAAMkjB,MAAMkI,EAAI3zB,UAAU4sB,iBAAiB+G,EAAIhH,WAE9E2D,EAAEsD,MAAMC,IAAI,gCAAiCF,GAE7C,IAAK,IAAWvmB,EAAPzP,EAAI,EAAayP,EAAUumB,EAAIlH,SAAS9uB,MAChD2yB,EAAEwD,iBAAiB1mB,GAAmB,IAAVqmB,EAAgBE,EAAIzzB,WAgClD4zB,iBAAkB,SAAU1mB,EAASqmB,EAAOvzB,GAE3C,IAAIwxB,EAAWpB,EAAEG,KAAKa,YAAYlkB,GAC9B4lB,EAAU1C,EAAE8B,UAAUV,GAG1BpB,EAAEG,KAAKgB,YAAYrkB,EAASskB,GAG5B,IAAIlF,EAASpf,EAAQokB,cACjBhF,GAA4C,QAAlCA,EAAOuH,SAAS3xB,eAC7BkuB,EAAEG,KAAKgB,YAAYjF,EAAQkF,GAG5B,IAEIiC,EAAM,CACTvmB,QAASA,EACTskB,SAAUA,EACVsB,QAASA,EACTgB,KANU5mB,EAAQ6mB,aASnB,SAASC,EAAsBC,GAC9BR,EAAIQ,gBAAkBA,EAEtB7D,EAAEsD,MAAMC,IAAI,gBAAiBF,GAE7BA,EAAIvmB,QAAQjB,UAAYwnB,EAAIQ,gBAE5B7D,EAAEsD,MAAMC,IAAI,kBAAmBF,GAC/BrD,EAAEsD,MAAMC,IAAI,WAAYF,GACxBzzB,GAAYA,EAASpC,KAAK61B,EAAIvmB,SAW/B,GARAkjB,EAAEsD,MAAMC,IAAI,sBAAuBF,IAGnCnH,EAASmH,EAAIvmB,QAAQokB,gBAC2B,QAAlChF,EAAOuH,SAAS3xB,gBAA4BoqB,EAAO4H,aAAa,aAC7E5H,EAAOjM,aAAa,WAAY,MAG5BoT,EAAIK,KAGR,OAFA1D,EAAEsD,MAAMC,IAAI,WAAYF,QACxBzzB,GAAYA,EAASpC,KAAK61B,EAAIvmB,UAM/B,GAFAkjB,EAAEsD,MAAMC,IAAI,mBAAoBF,GAE3BA,EAAIX,QAKT,GAAIS,GAASvD,EAAMmE,OAAQ,CAC1B,IAAIC,EAAS,IAAID,OAAO/D,EAAEiE,UAE1BD,EAAOE,UAAY,SAAUC,GAC5BP,EAAsBO,EAAItrB,OAG3BmrB,EAAOI,YAAYC,KAAKC,UAAU,CACjClD,SAAUiC,EAAIjC,SACdsC,KAAML,EAAIK,KACVa,gBAAgB,UAGjBX,EAAsB5D,EAAEwE,UAAUnB,EAAIK,KAAML,EAAIX,QAASW,EAAIjC,gBAjB7DwC,EAAsB5D,EAAEG,KAAKC,OAAOiD,EAAIK,QAyC1Cc,UAAW,SAAUvC,EAAMS,EAAStB,GACnC,IAAIiC,EAAM,CACTK,KAAMzB,EACNS,QAASA,EACTtB,SAAUA,GAGX,GADApB,EAAEsD,MAAMC,IAAI,kBAAmBF,IAC1BA,EAAIX,QACR,MAAM,IAAInB,MAAM,iBAAmB8B,EAAIjC,SAAW,qBAInD,OAFAiC,EAAIhD,OAASL,EAAEyE,SAASpB,EAAIK,KAAML,EAAIX,SACtC1C,EAAEsD,MAAMC,IAAI,iBAAkBF,GACvB/C,EAAMgE,UAAUtE,EAAEG,KAAKC,OAAOiD,EAAIhD,QAASgD,EAAIjC,WA2BvDqD,SAAU,SAAUxC,EAAMS,GACzB,IAAIgC,EAAOhC,EAAQgC,KACnB,GAAIA,EAAM,CACT,IAAK,IAAI9B,KAAS8B,EACjBhC,EAAQE,GAAS8B,EAAK9B,UAGhBF,EAAQgC,KAGhB,IAAIC,EAAY,IAAIC,EAKpB,OAJAC,EAASF,EAAWA,EAAUG,KAAM7C,GAEpC8C,EAAa9C,EAAM0C,EAAWjC,EAASiC,EAAUG,KAAM,GAyazD,SAAiBE,GAChB,IAAIC,EAAQ,GACRC,EAAOF,EAAKF,KAAK5G,KACrB,KAAOgH,IAASF,EAAKG,MACpBF,EAAMluB,KAAKmuB,EAAK52B,OAChB42B,EAAOA,EAAKhH,KAEb,OAAO+G,EA9aCG,CAAQT,IAQhBrB,MAAO,CACN+B,IAAK,GAcLnvB,IAAK,SAAUtI,EAAMgC,GACpB,IAAI0zB,EAAQtD,EAAEsD,MAAM+B,IAEpB/B,EAAM11B,GAAQ01B,EAAM11B,IAAS,GAE7B01B,EAAM11B,GAAMmJ,KAAKnH,IAYlB2zB,IAAK,SAAU31B,EAAMy1B,GACpB,IAAIiC,EAAYtF,EAAEsD,MAAM+B,IAAIz3B,GAE5B,GAAK03B,GAAcA,EAAU10B,OAI7B,IAAK,IAAWhB,EAAPvC,EAAI,EAAcuC,EAAW01B,EAAUj4B,MAC/CuC,EAASyzB,KAKZ/C,MAAOA,GAqBR,SAASA,EAAMnqB,EAAM0E,EAAS0lB,EAAOgF,GAUpCx0B,KAAKoF,KAAOA,EASZpF,KAAK8J,QAAUA,EAQf9J,KAAKwvB,MAAQA,EAEbxvB,KAAKH,OAAqC,GAA3B20B,GAAc,IAAI30B,OA8ElC,SAAS40B,EAAaC,EAASvkB,EAAK+gB,EAAMyD,GACzCD,EAAQE,UAAYzkB,EACpB,IAAI0kB,EAAQH,EAAQxE,KAAKgB,GACzB,GAAI2D,GAASF,GAAcE,EAAM,GAAI,CAEpC,IAAIC,EAAmBD,EAAM,GAAGh1B,OAChCg1B,EAAMjuB,OAASkuB,EACfD,EAAM,GAAKA,EAAM,GAAG3tB,MAAM4tB,GAE3B,OAAOD,EAiBR,SAASb,EAAa9C,EAAM0C,EAAWjC,EAASoD,EAAWC,EAAUC,GACpE,IAAK,IAAIpD,KAASF,EACjB,GAAKA,EAAQxzB,eAAe0zB,IAAWF,EAAQE,GAA/C,CAIA,IAAIqD,EAAWvD,EAAQE,GACvBqD,EAAWxK,MAAMC,QAAQuK,GAAYA,EAAW,CAACA,GAEjD,IAAK,IAAIC,EAAI,EAAGA,EAAID,EAASr1B,SAAUs1B,EAAG,CACzC,GAAIF,GAAWA,EAAQG,OAASvD,EAAQ,IAAMsD,EAC7C,OAGD,IAAIE,EAAaH,EAASC,GACtB5D,EAAS8D,EAAW9D,OACpBoD,IAAeU,EAAWV,WAC1BW,IAAWD,EAAWC,OACtB9F,EAAQ6F,EAAW7F,MAEvB,GAAI8F,IAAWD,EAAWX,QAAQa,OAAQ,CAEzC,IAAIC,EAAQH,EAAWX,QAAQhF,WAAWmF,MAAM,aAAa,GAC7DQ,EAAWX,QAAUpE,OAAO+E,EAAWX,QAAQe,OAAQD,EAAQ,KAMhE,IAFA,IAAId,EAAUW,EAAWX,SAAWW,EAG/BK,EAAcX,EAAU5H,KAAMhd,EAAM6kB,EACxCU,IAAgB9B,EAAUQ,QAItBa,GAAW9kB,GAAO8kB,EAAQU,OAH9BxlB,GAAOulB,EAAYn4B,MAAMsC,OAAQ61B,EAAcA,EAAYvI,KAC1D,CAMD,IAAIyI,EAAMF,EAAYn4B,MAEtB,GAAIq2B,EAAU/zB,OAASqxB,EAAKrxB,OAE3B,OAGD,KAAI+1B,aAAerG,GAAnB,CAIA,IACIsF,EADAgB,EAAc,EAGlB,GAAIP,EAAQ,CAEX,KADAT,EAAQJ,EAAaC,EAASvkB,EAAK+gB,EAAMyD,KAC3BE,EAAMjuB,OAASsqB,EAAKrxB,OACjC,MAGD,IAAIiC,EAAO+yB,EAAMjuB,MACbkvB,EAAKjB,EAAMjuB,MAAQiuB,EAAM,GAAGh1B,OAC5BzB,EAAI+R,EAIR,IADA/R,GAAKs3B,EAAYn4B,MAAMsC,OAChBiC,GAAQ1D,GAEdA,IADAs3B,EAAcA,EAAYvI,MACT5vB,MAAMsC,OAOxB,GAHAsQ,EADA/R,GAAKs3B,EAAYn4B,MAAMsC,OAInB61B,EAAYn4B,iBAAiBgyB,EAChC,SAID,IACC,IAAIwG,EAAIL,EACRK,IAAMnC,EAAUQ,OAASh2B,EAAI03B,GAAyB,kBAAZC,EAAEx4B,OAC5Cw4B,EAAIA,EAAE5I,KAEN0I,IACAz3B,GAAK23B,EAAEx4B,MAAMsC,OAEdg2B,IAGAD,EAAM1E,EAAKhqB,MAAMiJ,EAAK/R,GACtBy2B,EAAMjuB,OAASuJ,OAGf,KADA0kB,EAAQJ,EAAaC,EAAS,EAAGkB,EAAKjB,IAErC,SAKE7yB,EAAO+yB,EAAMjuB,MAAjB,IACIovB,EAAWnB,EAAM,GACjBrD,EAASoE,EAAI1uB,MAAM,EAAGpF,GACtBm0B,EAAQL,EAAI1uB,MAAMpF,EAAOk0B,EAASn2B,QAElC81B,EAAQxlB,EAAMylB,EAAI/1B,OAClBo1B,GAAWU,EAAQV,EAAQU,QAC9BV,EAAQU,MAAQA,GAGjB,IAAIO,EAAaR,EAAYtI,KAgB7B,GAdIoE,IACH0E,EAAapC,EAASF,EAAWsC,EAAY1E,GAC7CrhB,GAAOqhB,EAAO3xB,QAGfs2B,EAAYvC,EAAWsC,EAAYL,GAGnCH,EAAc5B,EAASF,EAAWsC,EADpB,IAAI3G,EAAMsC,EAAON,EAAStC,EAAEyE,SAASsC,EAAUzE,GAAUyE,EAAUxG,EAAOwG,IAGpFC,GACHnC,EAASF,EAAW8B,EAAaO,GAG9BJ,EAAc,EAAG,CAKpB,IAAIO,EAAgB,CACnBhB,MAAOvD,EAAQ,IAAMsD,EACrBQ,MAAOA,GAER3B,EAAa9C,EAAM0C,EAAWjC,EAAS+D,EAAYtI,KAAMjd,EAAKimB,GAG1DnB,GAAWmB,EAAcT,MAAQV,EAAQU,QAC5CV,EAAQU,MAAQS,EAAcT,YAqBpC,SAAS9B,IAER,IAAIE,EAAO,CAAEx2B,MAAO,KAAM6vB,KAAM,KAAMD,KAAM,MAExCiH,EAAO,CAAE72B,MAAO,KAAM6vB,KAAM2G,EAAM5G,KAAM,MAC5C4G,EAAK5G,KAAOiH,EAGZp0B,KAAK+zB,KAAOA,EAEZ/zB,KAAKo0B,KAAOA,EACZp0B,KAAKH,OAAS,EAYf,SAASi0B,EAASG,EAAME,EAAM52B,GAE7B,IAAI4vB,EAAOgH,EAAKhH,KAEZkJ,EAAU,CAAE94B,MAAOA,EAAO6vB,KAAM+G,EAAMhH,KAAMA,GAKhD,OAJAgH,EAAKhH,KAAOkJ,EACZlJ,EAAKC,KAAOiJ,EACZpC,EAAKp0B,SAEEw2B,EAUR,SAASF,EAAYlC,EAAME,EAAMmC,GAEhC,IADA,IAAInJ,EAAOgH,EAAKhH,KACP7wB,EAAI,EAAGA,EAAIg6B,GAASnJ,IAAS8G,EAAKG,KAAM93B,IAChD6wB,EAAOA,EAAKA,KAEbgH,EAAKhH,KAAOA,EACZA,EAAKC,KAAO+G,EACZF,EAAKp0B,QAAUvD,EAkBhB,GA3XAuyB,EAAMD,MAAQK,EA+EdM,EAAMgE,UAAY,SAASA,EAAUx2B,EAAGszB,GACvC,GAAgB,iBAALtzB,EACV,OAAOA,EAER,GAAI2tB,MAAMC,QAAQ5tB,GAAI,CACrB,IAAIsB,EAAI,GAIR,OAHAtB,EAAEsC,SAAQ,SAAU+B,GACnB/C,GAAKk1B,EAAUnyB,EAAGivB,MAEZhyB,EAGR,IAAIi0B,EAAM,CACTltB,KAAMrI,EAAEqI,KACR0E,QAASypB,EAAUx2B,EAAE+M,QAASumB,GAC9BkG,IAAK,OACLC,QAAS,CAAC,QAASz5B,EAAEqI,MACrBqxB,WAAY,GACZpG,SAAUA,GAGPqG,EAAU35B,EAAEyyB,MACZkH,IACChM,MAAMC,QAAQ+L,GACjBhM,MAAMxsB,UAAU8H,KAAKokB,MAAMkI,EAAIkE,QAASE,GAExCpE,EAAIkE,QAAQxwB,KAAK0wB,IAInBzH,EAAEsD,MAAMC,IAAI,OAAQF,GAEpB,IAAImE,EAAa,GACjB,IAAK,IAAI55B,KAAQy1B,EAAImE,WACpBA,GAAc,IAAM55B,EAAO,MAAQy1B,EAAImE,WAAW55B,IAAS,IAAIgE,QAAQ,KAAM,UAAY,IAG1F,MAAO,IAAMyxB,EAAIiE,IAAM,WAAajE,EAAIkE,QAAQjX,KAAK,KAAO,IAAMkX,EAAa,IAAMnE,EAAIxoB,QAAU,KAAOwoB,EAAIiE,IAAM,MAuQhH1H,EAAMtuB,SACV,OAAKsuB,EAAMttB,kBAKN0tB,EAAEE,6BAENN,EAAMttB,iBAAiB,WAAW,SAAU6xB,GAC3C,IAAIuD,EAAUrD,KAAKsD,MAAMxD,EAAItrB,MACzBgnB,EAAO6H,EAAQtG,SACfsC,EAAOgE,EAAQhE,KACfa,EAAiBmD,EAAQnD,eAE7B3E,EAAMwE,YAAYpE,EAAEwE,UAAUd,EAAM1D,EAAE8B,UAAUjC,GAAOA,IACnD0E,GACH3E,EAAMjf,WAEL,GAGGqf,GAlBCA,EAsBT,IAAI4H,EAAS5H,EAAEG,KAAKmB,gBAUpB,SAASuG,IACH7H,EAAEC,QACND,EAAEkD,eAIJ,GAdI0E,IACH5H,EAAEiE,SAAW2D,EAAO5T,IAEhB4T,EAAO9D,aAAa,iBACvB9D,EAAEC,QAAS,KAURD,EAAEC,OAAQ,CAOd,IAAI6H,EAAax2B,SAASw2B,WACP,YAAfA,GAA2C,gBAAfA,GAAgCF,GAAUA,EAAOG,MAChFz2B,SAASgB,iBAAiB,mBAAoBu1B,GAE1Cl4B,OAAO0D,sBACV1D,OAAO0D,sBAAsBw0B,GAE7Bl4B,OAAOoY,WAAW8f,EAAgC,IAKrD,OAAO7H,EAhqCI,CAhBmB,qBAAXrwB,OACjBA,OAE6B,qBAAtBq4B,mBAAqCC,gBAAgBD,kBAC1DC,KACA,IA+qCgC76B,EAAOD,UAC3CC,EAAOD,QAAUwyB,GAII,qBAAX2G,IACVA,EAAO3G,MAAQA,GAyDhBA,EAAMmC,UAAUoG,OAAS,CACxB,QAAW,CACVzC,QAAS,8BACTY,QAAQ,GAET,OAAU,CACTZ,QAAS,iBACTY,QAAQ,GAET,QAAW,CAEVZ,QAAS,uHACTY,QAAQ,EACR/D,OAAQ,CACP,kBAAmB,CAClBmD,QAAS,6BACTC,YAAY,EACZW,QAAQ,EACR/D,OAAQ,MAET,OAAU,CACTmD,QAAS,kBACTY,QAAQ,GAET,YAAe,eACf,cAAe,YACf,KAAQ,eAGV,MAAS,CACRZ,QAAS,4BACTY,QAAQ,GAET,IAAO,CACNZ,QAAS,uHACTY,QAAQ,EACR/D,OAAQ,CACP,IAAO,CACNmD,QAAS,iBACTnD,OAAQ,CACP,YAAe,QACf,UAAa,iBAGf,eAAgB,GAChB,aAAc,CACbmD,QAAS,qCACTnD,OAAQ,CACP,YAAe,CACd,CACCmD,QAAS,KACTlF,MAAO,eAER,SAIH,YAAe,OACf,YAAa,CACZkF,QAAS,YACTnD,OAAQ,CACP,UAAa,mBAMjB,OAAU,CACT,CACCmD,QAAS,kBACTlF,MAAO,gBAER,uBAIFZ,EAAMmC,UAAUoG,OAAY,IAAE5F,OAAO,cAAcA,OAAe,OACjE3C,EAAMmC,UAAUoG,OAAe,OAChCvI,EAAMmC,UAAUoG,OAAgB,QAAE5F,OAAO,mBAAmBA,OAAS3C,EAAMmC,UAAUoG,OAGrFvI,EAAM2D,MAAMptB,IAAI,QAAQ,SAAUmtB,GAEhB,WAAbA,EAAIltB,OACPktB,EAAImE,WAAkB,MAAInE,EAAIxoB,QAAQjJ,QAAQ,QAAS,SAIzD7D,OAAOC,eAAe2xB,EAAMmC,UAAUoG,OAAOZ,IAAK,aAAc,CAY/Dh5B,MAAO,SAAoBoF,EAASmsB,GACnC,IAAIsI,EAAsB,GAC1BA,EAAoB,YAActI,GAAQ,CACzC4F,QAAS,oCACTC,YAAY,EACZpD,OAAQ3C,EAAMmC,UAAUjC,IAEzBsI,EAA2B,MAAI,uBAE/B,IAAI7F,EAAS,CACZ,iBAAkB,CACjBmD,QAAS,4BACTnD,OAAQ6F,IAGV7F,EAAO,YAAczC,GAAQ,CAC5B4F,QAAS,UACTnD,OAAQ3C,EAAMmC,UAAUjC,IAGzB,IAAIuI,EAAM,GACVA,EAAI10B,GAAW,CACd+xB,QAASpE,OAAO,wFAAwFmF,OAAO50B,QAAQ,OAAO,WAAc,OAAO8B,KAAa,KAChKgyB,YAAY,EACZW,QAAQ,EACR/D,OAAQA,GAGT3C,EAAMmC,UAAUO,aAAa,SAAU,QAAS+F,MAGlDr6B,OAAOC,eAAe2xB,EAAMmC,UAAUoG,OAAOZ,IAAK,eAAgB,CAYjEh5B,MAAO,SAAU+5B,EAAUxI,GAC1BF,EAAMmC,UAAUoG,OAAOZ,IAAIhF,OAAO,gBAAgBvrB,KAAK,CACtD0uB,QAASpE,OACR,aAAamF,OAAS,MAAQ6B,EAAW,IAAM,iDAAiD7B,OAChG,KAEDd,YAAY,EACZpD,OAAQ,CACP,YAAa,WACb,aAAc,CACbmD,QAAS,WACTnD,OAAQ,CACP,MAAS,CACRmD,QAAS,yCACTC,YAAY,EACZnF,MAAO,CAACV,EAAM,YAAcA,GAC5ByC,OAAQ3C,EAAMmC,UAAUjC,IAEzB,YAAe,CACd,CACC4F,QAAS,KACTlF,MAAO,eAER,eASPZ,EAAMmC,UAAUjS,KAAO8P,EAAMmC,UAAUoG,OACvCvI,EAAMmC,UAAUwG,OAAS3I,EAAMmC,UAAUoG,OACzCvI,EAAMmC,UAAUyG,IAAM5I,EAAMmC,UAAUoG,OAEtCvI,EAAMmC,UAAU0G,IAAM7I,EAAMmC,UAAUK,OAAO,SAAU,IACvDxC,EAAMmC,UAAU2G,KAAO9I,EAAMmC,UAAU0G,IACvC7I,EAAMmC,UAAU4G,KAAO/I,EAAMmC,UAAU0G,IACvC7I,EAAMmC,UAAU6G,IAAMhJ,EAAMmC,UAAU0G,IAOrC,SAAU7I,GAEV,IAAIiJ,EAAS,8EAEbjJ,EAAMmC,UAAU+G,IAAM,CACrB,QAAW,mBACX,OAAU,CACTpD,QAAS,iDACTnD,OAAQ,CACP,KAAQ,WACR,6BAA8B,CAC7BmD,QAAS,4FACTC,YAAY,EACZnF,MAAO,YAER,QAAW,CACVkF,QAAS,yCACTC,YAAY,KAKf,IAAO,CAEND,QAASpE,OAAO,eAAiBuH,EAAOpC,OAAS,IAAM,8BAA8BA,OAAS,OAAQ,KACtGH,QAAQ,EACR/D,OAAQ,CACP,SAAY,QACZ,YAAe,UACf,OAAU,CACTmD,QAASpE,OAAO,IAAMuH,EAAOpC,OAAS,KACtCjG,MAAO,SAIV,SAAY,CACXkF,QAASpE,OAAO,qDAAuDuH,EAAOpC,OAAS,iBACvFd,YAAY,GAEb,OAAU,CACTD,QAASmD,EACTvC,QAAQ,GAET,SAAY,CACXZ,QAAS,oFACTC,YAAY,GAEb,UAAa,gBACb,SAAY,CACXD,QAAS,kCACTC,YAAY,GAEb,YAAe,aAGhB/F,EAAMmC,UAAU+G,IAAY,OAAEvG,OAAOoC,KAAO/E,EAAMmC,UAAU+G,IAE5D,IAAIX,EAASvI,EAAMmC,UAAUoG,OACzBA,IACHA,EAAOZ,IAAIwB,WAAW,QAAS,OAC/BZ,EAAOZ,IAAIyB,aAAa,QAAS,QA5DnC,CA+DEpJ,GAOFA,EAAMmC,UAAUkH,MAAQ,CACvB,QAAW,CACV,CACCvD,QAAS,kCACTC,YAAY,EACZW,QAAQ,GAET,CACCZ,QAAS,mBACTC,YAAY,EACZW,QAAQ,IAGV,OAAU,CACTZ,QAAS,iDACTY,QAAQ,GAET,aAAc,CACbZ,QAAS,2FACTC,YAAY,EACZpD,OAAQ,CACP,YAAe,UAGjB,QAAW,6GACX,QAAW,qBACX,SAAY,cACZ,OAAU,4DACV,SAAY,+CACZ,YAAe,iBAQhB3C,EAAMmC,UAAUmH,WAAatJ,EAAMmC,UAAUK,OAAO,QAAS,CAC5D,aAAc,CACbxC,EAAMmC,UAAUkH,MAAM,cACtB,CACCvD,QAAS,0GACTC,YAAY,IAGd,QAAW,CACV,CACCD,QAAS,uBACTC,YAAY,GAEb,CACCD,QAAS,mdACTC,YAAY,IAId,SAAY,oGACZ,OAAU,CACTD,QAASpE,OACR,aAAamF,OACb,MAGC,eAAeA,OACf,IAEA,0BAA0BA,OAC1B,IAEA,4BAA4BA,OAC5B,IAEA,sCAAsCA,OACtC,IAEA,gBAAgBA,OAChB,IAEA,oFAAoFA,OAErF,IACA,YAAYA,QAEbd,YAAY,GAEb,SAAY,8FAGb/F,EAAMmC,UAAUmH,WAAW,cAAc,GAAGxD,QAAU,uEAEtD9F,EAAMmC,UAAUO,aAAa,aAAc,UAAW,CACrD,MAAS,CACRoD,QAASpE,OAGR,0DAA0DmF,OAK1D,KAAKA,OACL,MACA,iEAAiEA,OACjE,IAEA,qIAAqIA,OACrI,IAEA,kEAAkEA,QAEnEd,YAAY,EACZW,QAAQ,EACR/D,OAAQ,CACP,eAAgB,CACfmD,QAAS,4BACTC,YAAY,EACZnF,MAAO,iBACP+B,OAAQ3C,EAAMmC,UAAUoH,OAEzB,kBAAmB,UACnB,cAAe,aAIjB,oBAAqB,CACpBzD,QAAS,gMACTlF,MAAO,YAER,UAAa,CACZ,CACCkF,QAAS,sIACTC,YAAY,EACZpD,OAAQ3C,EAAMmC,UAAUmH,YAEzB,CACCxD,QAAS,qFACTC,YAAY,EACZpD,OAAQ3C,EAAMmC,UAAUmH,YAEzB,CACCxD,QAAS,kEACTC,YAAY,EACZpD,OAAQ3C,EAAMmC,UAAUmH,YAEzB,CACCxD,QAAS,8eACTC,YAAY,EACZpD,OAAQ3C,EAAMmC,UAAUmH,aAG1B,SAAY,8BAGbtJ,EAAMmC,UAAUO,aAAa,aAAc,SAAU,CACpD,SAAY,CACXoD,QAAS,QACTY,QAAQ,EACR9F,MAAO,WAER,kBAAmB,CAClBkF,QAAS,2EACTY,QAAQ,EACR/D,OAAQ,CACP,uBAAwB,CACvBmD,QAAS,QACTlF,MAAO,UAER,cAAiB,CAChBkF,QAAS,mEACTC,YAAY,EACZpD,OAAQ,CACP,4BAA6B,CAC5BmD,QAAS,YACTlF,MAAO,eAERmE,KAAM/E,EAAMmC,UAAUmH,aAGxB,OAAU,YAGZ,kBAAmB,CAClBxD,QAAS,4EACTC,YAAY,EACZW,QAAQ,EACR9F,MAAO,cAITZ,EAAMmC,UAAUO,aAAa,aAAc,WAAY,CACtD,mBAAoB,CACnBoD,QAAS,oFACTC,YAAY,EACZnF,MAAO,cAILZ,EAAMmC,UAAUoG,SACnBvI,EAAMmC,UAAUoG,OAAOZ,IAAIwB,WAAW,SAAU,cAIhDnJ,EAAMmC,UAAUoG,OAAOZ,IAAIyB,aAC1B,yNAAyNvC,OACzN,eAIF7G,EAAMmC,UAAUqH,GAAKxJ,EAAMmC,UAAUmH,WAOpC,WAEA,GAAqB,qBAAVtJ,GAA6C,qBAAbruB,SAA3C,CAKKqqB,QAAQ1sB,UAAU0vB,UACtBhD,QAAQ1sB,UAAU0vB,QAAUhD,QAAQ1sB,UAAUm6B,mBAAqBzN,QAAQ1sB,UAAUo6B,uBAGtF,IAMIC,EAAa,CAChB,GAAM,aACN,GAAM,SACN,GAAM,OACN,IAAO,aACP,KAAQ,aACR,GAAM,OACN,IAAO,QACP,EAAK,IACL,IAAO,SAGJC,EAAc,kBACdC,EAAiB,UACjBC,EAAgB,SAGhBC,EAAW,iFAuDf/J,EAAM2D,MAAMptB,IAAI,uBAAuB,SAAUmtB,GAChDA,EAAIhH,UAAY,KAAOqN,KAGxB/J,EAAM2D,MAAMptB,IAAI,uBAAuB,SAAUmtB,GAChD,IAAIsG,EAAqCtG,EAAW,QACpD,GAAIsG,EAAIhL,QAAQ+K,GAAW,CAC1BrG,EAAIK,KAAO,GAEXiG,EAAI1Z,aAAasZ,EAAaC,GAG9B,IAAI9F,EAAOiG,EAAI91B,YAAYvC,SAASkC,cAAc,SAClDkwB,EAAKC,YA3Fe,gBA6FpB,IAAI3P,EAAM2V,EAAIv4B,aAAa,YAEvBgwB,EAAWiC,EAAIjC,SACnB,GAAiB,SAAbA,EAAqB,CAGxB,IAAIwI,GAAa,WAAW3I,KAAKjN,IAAQ,CAAC,CAAE,SAAS,GACrDoN,EAAWkI,EAAWM,IAAcA,EAIrCjK,EAAMQ,KAAKgB,YAAYuC,EAAMtC,GAC7BzB,EAAMQ,KAAKgB,YAAYwI,EAAKvI,GAG5B,IAAIyI,EAAalK,EAAMsD,QAAQ4G,WAC3BA,GACHA,EAAWC,cAAc1I,GA7E5B,SAAkBpN,EAAK+V,EAASC,GAC/B,IAAIC,EAAM,IAAIC,eACdD,EAAIzT,KAAK,MAAOxC,GAAK,GACrBiW,EAAIE,mBAAqB,WACF,GAAlBF,EAAInC,aACHmC,EAAIG,OAAS,KAAOH,EAAII,aAC3BN,EAAQE,EAAII,cAERJ,EAAIG,QAAU,IACjBJ,EAxCG,gBAwCmBC,EAAIG,OAxCD,yBAwCSH,EAAIK,YAEtCN,EAxCuB,mDA6C3BC,EAAIM,KAAK,MAiERC,CACCxW,GACA,SAAUiO,GAET0H,EAAI1Z,aAAasZ,EAAaE,GAG9B,IAAIgB,EA7DR,SAAoBA,GACnB,IAAIh9B,EAAI,wCAAwCwzB,KAAKwJ,GAAS,IAC9D,GAAIh9B,EAAG,CACN,IAAIsR,EAAQ3E,OAAO3M,EAAE,IACjBi9B,EAAQj9B,EAAE,GACVkS,EAAMlS,EAAE,GAEZ,OAAKi9B,EAGA/qB,EAGE,CAACZ,EAAO3E,OAAOuF,IAFd,CAACZ,OAAOlO,GAHR,CAACkO,EAAOA,IAqDF4rB,CAAWhB,EAAIv4B,aAAa,eACxC,GAAIq5B,EAAO,CACV,IAAIG,EAAQ3I,EAAKrrB,MAAM,aAGnBmI,EAAQ0rB,EAAM,GACd9qB,EAAkB,MAAZ8qB,EAAM,GAAaG,EAAMh6B,OAAS65B,EAAM,GAE9C1rB,EAAQ,IAAKA,GAAS6rB,EAAMh6B,QAChCmO,EAAQ1K,KAAKQ,IAAI,EAAGR,KAAKO,IAAImK,EAAQ,EAAG6rB,EAAMh6B,SAC1C+O,EAAM,IAAKA,GAAOirB,EAAMh6B,QAC5B+O,EAAMtL,KAAKQ,IAAI,EAAGR,KAAKO,IAAI+K,EAAKirB,EAAMh6B,SAEtCqxB,EAAO2I,EAAM3yB,MAAM8G,EAAOY,GAAK2Q,KAAK,MAG/BqZ,EAAI7F,aAAa,eACrB6F,EAAI1Z,aAAa,aAAc4a,OAAO9rB,EAAQ,IAKhD2kB,EAAKC,YAAc1B,EACnBtC,EAAM6D,iBAAiBE,MAExB,SAAUsG,GAETL,EAAI1Z,aAAasZ,EA/HD,UAiIhB7F,EAAKC,YAAcqG,SAMvBrK,EAAMsD,QAAQ6H,cAAgB,CAQ7BtG,UAAW,SAAmB90B,GAG7B,IAFA,IAEgBoN,EAFZqf,GAAYzsB,GAAa4B,UAAUgrB,iBAAiBoN,GAE/Cr8B,EAAI,EAAayP,EAAUqf,EAAS9uB,MAC5CsyB,EAAM6D,iBAAiB1mB,KAK1B,IAAIiuB,GAAS,EAEbpL,EAAMmL,cAAgB,WAChBC,IACJC,QAAQC,KAAK,2FACbF,GAAS,GAEVpL,EAAMsD,QAAQ6H,cAActG,UAAUrJ,MAAMpqB,KAAMJ,aA/LpD,K,gCCptDA,IAAIu6B,EAGJA,EAAI,WACH,OAAOn6B,KADJ,GAIJ,IAECm6B,EAAIA,GAAK,IAAIC,SAAS,cAAb,GACR,MAAOh5B,GAEc,kBAAXxC,SAAqBu7B,EAAIv7B,QAOrCvC,EAAOD,QAAU+9B,G,yCCPjB,SAASE,EAASzK,GACd,OAAgB,OAARA,GACW,kBAARA,GACP,gBAAiBA,GACjBA,EAAI3qB,cAAgBjI,OAE5B,SAASo0B,EAAO9wB,EAAS,GAAI2iB,EAAM,IAC/BjmB,OAAOoC,KAAK6jB,GAAK5jB,SAASxB,IACK,qBAAhByC,EAAOzC,GACdyC,EAAOzC,GAAOolB,EAAIplB,GACbw8B,EAASpX,EAAIplB,KAClBw8B,EAAS/5B,EAAOzC,KAChBb,OAAOoC,KAAK6jB,EAAIplB,IAAMgC,OAAS,GAC/BuxB,EAAO9wB,EAAOzC,GAAMolB,EAAIplB,OAKpC,MAAMy8B,EAAc,CAChB55B,KAAM,GACNa,qBACAC,wBACAuZ,cAAe,CACXwf,SACA7H,SAAU,IAEdhH,cAAa,IACF,KAEXH,iBAAgB,IACL,GAEX/qB,eAAc,IACH,KAEXg6B,YAAW,KACA,CACHC,gBAGRh4B,cAAa,KACF,CACHsoB,SAAU,GACV2P,WAAY,GACZv2B,MAAO,GACP+a,iBACA0R,qBAAoB,IACT,KAInB+J,gBAAe,KACJ,IAEXC,WAAU,IACC,KAEXC,SAAU,CACNC,KAAM,GACNC,KAAM,GACNC,SAAU,GACV56B,KAAM,GACN66B,OAAQ,GACRC,SAAU,GACVC,SAAU,GACVC,OAAQ,KAGhB,SAASC,IACL,MAAMC,EAA0B,qBAAb/6B,SAA2BA,SAAW,GAEzD,OADA6wB,EAAOkK,EAAKhB,GACLgB,EAGX,MAAMC,EAAY,CACdh7B,SAAU+5B,EACVrmB,UAAW,CACP6Z,UAAW,IAEf+M,SAAU,CACNC,KAAM,GACNC,KAAM,GACNC,SAAU,GACV56B,KAAM,GACN66B,OAAQ,GACRC,SAAU,GACVC,SAAU,GACVC,OAAQ,IAEZI,QAAS,CACLC,iBACAC,cACAC,OACAC,UAEJC,YAAa,WACT,OAAO77B,MAEXuB,qBACAC,wBACAs6B,iBAAgB,KACL,CACHC,iBAAgB,IACL,KAInBC,UACA5lB,SACA6lB,OAAQ,GACRjlB,eACAC,iBACA0W,WAAU,KACC,IAEXrrB,sBAAsBzD,GACQ,qBAAfmY,YACPnY,IACO,MAEJmY,WAAWnY,EAAU,GAEhCsY,qBAAqB/T,GACS,qBAAf4T,YAGXC,aAAa7T,KAGrB,SAAS84B,IACL,MAAMC,EAAwB,qBAAXv9B,OAAyBA,OAAS,GAErD,OADAwyB,EAAO+K,EAAKZ,GACLY,ECpHX,MAAMC,UAAa1R,MACjBzlB,YAAY+c,GACW,kBAAVA,EACTqK,MAAMrK,IAENqK,SAAUrK,GAAS,IAnBzB,SAAsB4N,GACpB,MAAMyM,EAAQzM,EAAI0M,UAClBt/B,OAAOC,eAAe2yB,EAAK,YAAa,CACtCzyB,IAAG,IACMk/B,EAGTE,IAAIh/B,GACF8+B,EAAMC,UAAY/+B,KAYlBi/B,CAAax8B,QAMnB,SAASy8B,EAAUC,EAAM,IACvB,MAAMC,EAAM,GAQZ,OAPAD,EAAIr9B,SAAQwD,IACN6nB,MAAMC,QAAQ9nB,GAChB85B,EAAI32B,QAAQy2B,EAAU55B,IAEtB85B,EAAI32B,KAAKnD,MAGN85B,EAET,SAASC,EAAYF,EAAK79B,GACxB,OAAO6rB,MAAMxsB,UAAU6H,OAAOtJ,KAAKigC,EAAK79B,GAgC1C,SAASg+B,EAAEvR,EAAUwR,GACnB,MAAMl+B,EAASs9B,IACT37B,EAAW86B,IACjB,IAAIqB,EAAM,GAEV,IAAKI,GAAWxR,aAAoB8Q,EAClC,OAAO9Q,EAGT,IAAKA,EACH,OAAO,IAAI8Q,EAAKM,GAGlB,GAAwB,kBAAbpR,EAAuB,CAChC,MAAMxM,EAAOwM,EAASyR,OAEtB,GAAIje,EAAKlI,QAAQ,MAAQ,GAAKkI,EAAKlI,QAAQ,MAAQ,EAAG,CACpD,IAAIomB,EAAW,MACa,IAAxBle,EAAKlI,QAAQ,SAAcomB,EAAW,MACd,IAAxBle,EAAKlI,QAAQ,SAAcomB,EAAW,SACd,IAAxBle,EAAKlI,QAAQ,QAAwC,IAAxBkI,EAAKlI,QAAQ,SAAcomB,EAAW,MACxC,IAA3Ble,EAAKlI,QAAQ,YAAiBomB,EAAW,SACb,IAA5Ble,EAAKlI,QAAQ,aAAkBomB,EAAW,UAC9C,MAAMC,EAAa18B,EAASkC,cAAcu6B,GAC1CC,EAAWnyB,UAAYgU,EAEvB,IAAK,IAAIxiB,EAAI,EAAGA,EAAI2gC,EAAWvC,WAAW76B,OAAQvD,GAAK,EACrDogC,EAAI12B,KAAKi3B,EAAWvC,WAAWp+B,SAGjCogC,EA7CN,SAAapR,EAAUwR,GACrB,GAAwB,kBAAbxR,EACT,MAAO,CAACA,GAGV,MAAMvJ,EAAI,GACJ4a,EAAMG,EAAQvR,iBAAiBD,GAErC,IAAK,IAAIhvB,EAAI,EAAGA,EAAIqgC,EAAI98B,OAAQvD,GAAK,EACnCylB,EAAE/b,KAAK22B,EAAIrgC,IAGb,OAAOylB,EAiCGmb,CAAI5R,EAASyR,OAAQD,GAAWv8B,QAGnC,GAAI+qB,EAAS6R,UAAY7R,IAAa1sB,GAAU0sB,IAAa/qB,EAClEm8B,EAAI12B,KAAKslB,QACJ,GAAIZ,MAAMC,QAAQW,GAAW,CAClC,GAAIA,aAAoB8Q,EAAM,OAAO9Q,EACrCoR,EAAMpR,EAGR,OAAO,IAAI8Q,EAtEb,SAAqBM,GACnB,MAAMU,EAAc,GAEpB,IAAK,IAAI9gC,EAAI,EAAGA,EAAIogC,EAAI78B,OAAQvD,GAAK,GACE,IAAjC8gC,EAAYxmB,QAAQ8lB,EAAIpgC,KAAY8gC,EAAYp3B,KAAK02B,EAAIpgC,IAG/D,OAAO8gC,EA+DSC,CAAYX,IAG9BG,EAAEr6B,GAAK45B,EAAKl+B,UA4xCZ,MAAMo/B,EAAY,gBAAgBz3B,MAAM,KAExC,SAAS03B,EAAS1gC,GAiBhB,OAhBA,YAAyBstB,GACvB,GAAuB,qBAAZA,EAAK,GAAoB,CAClC,IAAK,IAAI7tB,EAAI,EAAGA,EAAI0D,KAAKH,OAAQvD,GAAK,EAChCghC,EAAU1mB,QAAQ/Z,GAAQ,IACxBA,KAAQmD,KAAK1D,GAAI0D,KAAK1D,GAAGO,KAC3BggC,EAAE78B,KAAK1D,IAAIkhC,QAAQ3gC,IAKzB,OAAOmD,KAGT,OAAOA,KAAKqU,GAAGxX,KAASstB,IAMdoT,EAAS,SACVA,EAAS,QACRA,EAAS,SACPA,EAAS,WACRA,EAAS,YACZA,EAAS,SACPA,EAAS,WACRA,EAAS,YACXA,EAAS,UACTA,EAAS,UACNA,EAAS,aACTA,EAAS,aACXA,EAAS,WACNA,EAAS,cACTA,EAAS,cACXA,EAAS,YACRA,EAAS,aACRA,EAAS,cACXA,EAAS,YACRA,EAAS,aACZA,EAAS,UACTA,EAAS,UCr8CxB,MAAME,EAAU,CACdC,SDiIF,YAAqBlH,GACnB,MAAMmH,EAAalB,EAAUjG,EAAQ/G,KAAI9yB,GAAKA,EAAEkJ,MAAM,QAItD,OAHA7F,KAAKX,SAAQwD,IACXA,EAAGiQ,UAAU3N,OAAOw4B,MAEf39B,MCrIP49B,YDwIF,YAAwBpH,GACtB,MAAMmH,EAAalB,EAAUjG,EAAQ/G,KAAI9yB,GAAKA,EAAEkJ,MAAM,QAItD,OAHA7F,KAAKX,SAAQwD,IACXA,EAAGiQ,UAAUvN,UAAUo4B,MAElB39B,MC5IP69B,SDwJF,YAAqBrH,GACnB,MAAMmH,EAAalB,EAAUjG,EAAQ/G,KAAI9yB,GAAKA,EAAEkJ,MAAM,QACtD,OAAO+2B,EAAY58B,MAAM6C,GAChB86B,EAAW53B,QAAOrD,GAAaG,EAAGiQ,UAAUE,SAAStQ,KAAY7C,OAAS,IAChFA,OAAS,GC3JZi+B,YD8IF,YAAwBtH,GACtB,MAAMmH,EAAalB,EAAUjG,EAAQ/G,KAAI9yB,GAAKA,EAAEkJ,MAAM,QACtD7F,KAAKX,SAAQwD,IACX86B,EAAWt+B,SAAQqD,IACjBG,EAAGiQ,UAAUS,OAAO7Q,UCjJxBq7B,KD6JF,SAAcC,EAAOzgC,GACnB,GAAyB,IAArBqC,UAAUC,QAAiC,kBAAVm+B,EAEnC,OAAIh+B,KAAK,GAAWA,KAAK,GAAGK,aAAa29B,QACzC,EAIF,IAAK,IAAI1hC,EAAI,EAAGA,EAAI0D,KAAKH,OAAQvD,GAAK,EACpC,GAAyB,IAArBsD,UAAUC,OAEZG,KAAK1D,GAAG4iB,aAAa8e,EAAOzgC,QAG5B,IAAK,MAAM+5B,KAAY0G,EACrBh+B,KAAK1D,GAAGg7B,GAAY0G,EAAM1G,GAC1Bt3B,KAAK1D,GAAG4iB,aAAaoY,EAAU0G,EAAM1G,IAK3C,OAAOt3B,MCjLPi+B,WDoLF,SAAoBF,GAClB,IAAK,IAAIzhC,EAAI,EAAGA,EAAI0D,KAAKH,OAAQvD,GAAK,EACpC0D,KAAK1D,GAAG4hC,gBAAgBH,GAG1B,OAAO/9B,MCxLPoE,UD6TF,SAAmBA,GACjB,IAAK,IAAI9H,EAAI,EAAGA,EAAI0D,KAAKH,OAAQvD,GAAK,EACpC0D,KAAK1D,GAAG6H,MAAMC,UAAYA,EAG5B,OAAOpE,MCjUPwE,WDoUF,SAAoB/F,GAClB,IAAK,IAAInC,EAAI,EAAGA,EAAI0D,KAAKH,OAAQvD,GAAK,EACpC0D,KAAK1D,GAAG6H,MAAMgI,mBAAyC,kBAAb1N,EAAwB,GAAGA,MAAeA,EAGtF,OAAOuB,MCxUPqU,GD2UF,YAAe8V,GACb,IAAKgU,EAAWC,EAAgBj9B,EAAUk9B,GAAWlU,EASrD,SAASmU,EAAgBl9B,GACvB,MAAMd,EAASc,EAAEd,OACjB,IAAKA,EAAQ,OACb,MAAMi+B,EAAYn9B,EAAEd,OAAOk+B,eAAiB,GAM5C,GAJID,EAAU3nB,QAAQxV,GAAK,GACzBm9B,EAAUlkB,QAAQjZ,GAGhBy7B,EAAEv8B,GAAQm+B,GAAGL,GAAiBj9B,EAASipB,MAAM9pB,EAAQi+B,OAAgB,CACvE,MAAMG,EAAU7B,EAAEv8B,GAAQo+B,UAE1B,IAAK,IAAI3I,EAAI,EAAGA,EAAI2I,EAAQ7+B,OAAQk2B,GAAK,EACnC8G,EAAE6B,EAAQ3I,IAAI0I,GAAGL,IAAiBj9B,EAASipB,MAAMsU,EAAQ3I,GAAIwI,IAKvE,SAASI,EAAYv9B,GACnB,MAAMm9B,EAAYn9B,GAAKA,EAAEd,QAASc,EAAEd,OAAOk+B,eAAsB,GAE7DD,EAAU3nB,QAAQxV,GAAK,GACzBm9B,EAAUlkB,QAAQjZ,GAGpBD,EAASipB,MAAMpqB,KAAMu+B,GAhCA,oBAAZpU,EAAK,MACbgU,EAAWh9B,EAAUk9B,GAAWlU,EACjCiU,OAAiBt+B,GAGdu+B,IAASA,GAAU,GA8BxB,MAAM/pB,EAAS6pB,EAAUt4B,MAAM,KAC/B,IAAIsvB,EAEJ,IAAK,IAAI74B,EAAI,EAAGA,EAAI0D,KAAKH,OAAQvD,GAAK,EAAG,CACvC,MAAMuG,EAAK7C,KAAK1D,GAEhB,GAAK8hC,EAaH,IAAKjJ,EAAI,EAAGA,EAAI7gB,EAAOzU,OAAQs1B,GAAK,EAAG,CACrC,MAAM3iB,EAAQ8B,EAAO6gB,GAChBtyB,EAAG+7B,oBAAmB/7B,EAAG+7B,kBAAoB,IAC7C/7B,EAAG+7B,kBAAkBpsB,KAAQ3P,EAAG+7B,kBAAkBpsB,GAAS,IAChE3P,EAAG+7B,kBAAkBpsB,GAAOxM,KAAK,CAC/B7E,WACA09B,cAAeP,IAEjBz7B,EAAGtB,iBAAiBiR,EAAO8rB,EAAiBD,QApB9C,IAAKlJ,EAAI,EAAGA,EAAI7gB,EAAOzU,OAAQs1B,GAAK,EAAG,CACrC,MAAM3iB,EAAQ8B,EAAO6gB,GAChBtyB,EAAGi8B,gBAAej8B,EAAGi8B,cAAgB,IACrCj8B,EAAGi8B,cAActsB,KAAQ3P,EAAGi8B,cAActsB,GAAS,IACxD3P,EAAGi8B,cAActsB,GAAOxM,KAAK,CAC3B7E,WACA09B,cAAeF,IAEjB97B,EAAGtB,iBAAiBiR,EAAOmsB,EAAaN,IAiB9C,OAAOr+B,MChZPgmB,IDmZF,YAAgBmE,GACd,IAAKgU,EAAWC,EAAgBj9B,EAAUk9B,GAAWlU,EAE9B,oBAAZA,EAAK,MACbgU,EAAWh9B,EAAUk9B,GAAWlU,EACjCiU,OAAiBt+B,GAGdu+B,IAASA,GAAU,GACxB,MAAM/pB,EAAS6pB,EAAUt4B,MAAM,KAE/B,IAAK,IAAIvJ,EAAI,EAAGA,EAAIgY,EAAOzU,OAAQvD,GAAK,EAAG,CACzC,MAAMkW,EAAQ8B,EAAOhY,GAErB,IAAK,IAAI64B,EAAI,EAAGA,EAAIn1B,KAAKH,OAAQs1B,GAAK,EAAG,CACvC,MAAMtyB,EAAK7C,KAAKm1B,GAChB,IAAI4J,EAQJ,IANKX,GAAkBv7B,EAAGi8B,cACxBC,EAAWl8B,EAAGi8B,cAActsB,GACnB4rB,GAAkBv7B,EAAG+7B,oBAC9BG,EAAWl8B,EAAG+7B,kBAAkBpsB,IAG9BusB,GAAYA,EAASl/B,OACvB,IAAK,IAAIk2B,EAAIgJ,EAASl/B,OAAS,EAAGk2B,GAAK,EAAGA,GAAK,EAAG,CAChD,MAAMiJ,EAAUD,EAAShJ,GAErB50B,GAAY69B,EAAQ79B,WAAaA,GAG1BA,GAAY69B,EAAQ79B,UAAY69B,EAAQ79B,SAAS89B,WAAaD,EAAQ79B,SAAS89B,YAAc99B,GAFtG0B,EAAGrB,oBAAoBgR,EAAOwsB,EAAQH,cAAeR,GACrDU,EAASvnB,OAAOue,EAAG,IAIT50B,IACV0B,EAAGrB,oBAAoBgR,EAAOwsB,EAAQH,cAAeR,GACrDU,EAASvnB,OAAOue,EAAG,MAO7B,OAAO/1B,MC7bPw9B,QDsdF,YAAoBrT,GAClB,MAAMvrB,EAASs9B,IACT5nB,EAAS6V,EAAK,GAAGtkB,MAAM,KACvB04B,EAAYpU,EAAK,GAEvB,IAAK,IAAI7tB,EAAI,EAAGA,EAAIgY,EAAOzU,OAAQvD,GAAK,EAAG,CACzC,MAAMkW,EAAQ8B,EAAOhY,GAErB,IAAK,IAAI64B,EAAI,EAAGA,EAAIn1B,KAAKH,OAAQs1B,GAAK,EAAG,CACvC,MAAMtyB,EAAK7C,KAAKm1B,GAEhB,GAAIv2B,EAAOi9B,YAAa,CACtB,MAAMzI,EAAM,IAAIx0B,EAAOi9B,YAAYrpB,EAAO,CACxC0sB,OAAQX,EACRY,SAAS,EACTC,YAAY,IAEdv8B,EAAG27B,cAAgBrU,EAAKpkB,QAAO,CAAC+B,EAAMu3B,IAAcA,EAAY,IAChEx8B,EAAGy8B,cAAclM,GACjBvwB,EAAG27B,cAAgB,UACZ37B,EAAG27B,gBAKhB,OAAOx+B,MC9ePu/B,cDifF,SAAuB1gC,GACrB,MAAMqB,EAAMF,KAYZ,OAJInB,GACFqB,EAAImU,GAAG,iBAPT,SAASmrB,EAAap+B,GAChBA,EAAEd,SAAWN,OACjBnB,EAASpC,KAAKuD,KAAMoB,GACpBlB,EAAI8lB,IAAI,gBAAiBwZ,OAOpBx/B,MC7fPy/B,WD8hBF,SAAoBC,GAClB,GAAI1/B,KAAKH,OAAS,EAAG,CACnB,GAAI6/B,EAAgB,CAClB,MAAMC,EAAS3/B,KAAK2/B,SACpB,OAAO3/B,KAAK,GAAG4/B,YAAcC,WAAWF,EAAO5D,iBAAiB,iBAAmB8D,WAAWF,EAAO5D,iBAAiB,gBAGxH,OAAO/7B,KAAK,GAAG4/B,YAGjB,OAAO,MCviBPE,YDwjBF,SAAqBJ,GACnB,GAAI1/B,KAAKH,OAAS,EAAG,CACnB,GAAI6/B,EAAgB,CAClB,MAAMC,EAAS3/B,KAAK2/B,SACpB,OAAO3/B,KAAK,GAAG+/B,aAAeF,WAAWF,EAAO5D,iBAAiB,eAAiB8D,WAAWF,EAAO5D,iBAAiB,kBAGvH,OAAO/7B,KAAK,GAAG+/B,aAGjB,OAAO,MCjkBPJ,ODmnBF,WACE,MAAM/gC,EAASs9B,IACf,OAAIl8B,KAAK,GAAWpB,EAAOk9B,iBAAiB97B,KAAK,GAAI,MAC9C,ICrnBP8X,ODmkBF,WACE,GAAI9X,KAAKH,OAAS,EAAG,CACnB,MAAMjB,EAASs9B,IACT37B,EAAW86B,IACXx4B,EAAK7C,KAAK,GACVggC,EAAMn9B,EAAGjB,wBACTlB,EAAOH,EAASG,KAChBu/B,EAAYp9B,EAAGo9B,WAAav/B,EAAKu/B,WAAa,EAC9CC,EAAar9B,EAAGq9B,YAAcx/B,EAAKw/B,YAAc,EACjDzgC,EAAYoD,IAAOjE,EAASA,EAAOuhC,QAAUt9B,EAAGpD,UAChD2gC,EAAav9B,IAAOjE,EAASA,EAAOyhC,QAAUx9B,EAAGu9B,WACvD,MAAO,CACLv+B,IAAKm+B,EAAIn+B,IAAMpC,EAAYwgC,EAC3BxR,KAAMuR,EAAIvR,KAAO2R,EAAaF,GAIlC,OAAO,MCnlBPpI,IDunBF,SAAa9b,EAAOze,GAClB,MAAMqB,EAASs9B,IACf,IAAI5/B,EAEJ,GAAyB,IAArBsD,UAAUC,OAAc,CAC1B,GAAqB,kBAAVmc,EAGJ,CAEL,IAAK1f,EAAI,EAAGA,EAAI0D,KAAKH,OAAQvD,GAAK,EAChC,IAAK,MAAMgI,KAAQ0X,EACjBhc,KAAK1D,GAAG6H,MAAMG,GAAQ0X,EAAM1X,GAIhC,OAAOtE,KATP,GAAIA,KAAK,GAAI,OAAOpB,EAAOk9B,iBAAiB97B,KAAK,GAAI,MAAM+7B,iBAAiB/f,GAahF,GAAyB,IAArBpc,UAAUC,QAAiC,kBAAVmc,EAAoB,CAEvD,IAAK1f,EAAI,EAAGA,EAAI0D,KAAKH,OAAQvD,GAAK,EAChC0D,KAAK1D,GAAG6H,MAAM6X,GAASze,EAGzB,OAAOyC,KAGT,OAAOA,MCnpBPsgC,KDspBF,SAAczhC,GACZ,OAAKA,GACLmB,KAAKX,SAAQ,CAACwD,EAAI+D,KAChB/H,EAASurB,MAAMvnB,EAAI,CAACA,EAAI+D,OAEnB5G,MAJeA,MCtpBtB8e,KDkqBF,SAAcA,GACZ,GAAoB,qBAATA,EACT,OAAO9e,KAAK,GAAKA,KAAK,GAAG8K,UAAY,KAGvC,IAAK,IAAIxO,EAAI,EAAGA,EAAI0D,KAAKH,OAAQvD,GAAK,EACpC0D,KAAK1D,GAAGwO,UAAYgU,EAGtB,OAAO9e,MC1qBPkxB,KD6qBF,SAAcA,GACZ,GAAoB,qBAATA,EACT,OAAOlxB,KAAK,GAAKA,KAAK,GAAG4yB,YAAYmK,OAAS,KAGhD,IAAK,IAAIzgC,EAAI,EAAGA,EAAI0D,KAAKH,OAAQvD,GAAK,EACpC0D,KAAK1D,GAAGs2B,YAAc1B,EAGxB,OAAOlxB,MCrrBPy+B,GDwrBF,SAAYnT,GACV,MAAM1sB,EAASs9B,IACT37B,EAAW86B,IACXx4B,EAAK7C,KAAK,GAChB,IAAIugC,EACAjkC,EACJ,IAAKuG,GAA0B,qBAAbyoB,EAA0B,OAAO,EAEnD,GAAwB,kBAAbA,EAAuB,CAChC,GAAIzoB,EAAG+qB,QAAS,OAAO/qB,EAAG+qB,QAAQtC,GAClC,GAAIzoB,EAAGy1B,sBAAuB,OAAOz1B,EAAGy1B,sBAAsBhN,GAC9D,GAAIzoB,EAAGw1B,kBAAmB,OAAOx1B,EAAGw1B,kBAAkB/M,GAGtD,IAFAiV,EAAc1D,EAAEvR,GAEXhvB,EAAI,EAAGA,EAAIikC,EAAY1gC,OAAQvD,GAAK,EACvC,GAAIikC,EAAYjkC,KAAOuG,EAAI,OAAO,EAGpC,OAAO,EAGT,GAAIyoB,IAAa/qB,EACf,OAAOsC,IAAOtC,EAGhB,GAAI+qB,IAAa1sB,EACf,OAAOiE,IAAOjE,EAGhB,GAAI0sB,EAAS6R,UAAY7R,aAAoB8Q,EAAM,CAGjD,IAFAmE,EAAcjV,EAAS6R,SAAW,CAAC7R,GAAYA,EAE1ChvB,EAAI,EAAGA,EAAIikC,EAAY1gC,OAAQvD,GAAK,EACvC,GAAIikC,EAAYjkC,KAAOuG,EAAI,OAAO,EAGpC,OAAO,EAGT,OAAO,GC9tBP+D,MDiuBF,WACE,IACItK,EADAkkC,EAAQxgC,KAAK,GAGjB,GAAIwgC,EAAO,CAGT,IAFAlkC,EAAI,EAEuC,QAAnCkkC,EAAQA,EAAMC,kBACG,IAAnBD,EAAMrD,WAAgB7gC,GAAK,GAGjC,OAAOA,IC3uBTokC,GDivBF,SAAY95B,GACV,GAAqB,qBAAVA,EAAuB,OAAO5G,KACzC,MAAMH,EAASG,KAAKH,OAEpB,GAAI+G,EAAQ/G,EAAS,EACnB,OAAOg9B,EAAE,IAGX,GAAIj2B,EAAQ,EAAG,CACb,MAAM+5B,EAAc9gC,EAAS+G,EAC7B,OAA4Bi2B,EAAxB8D,EAAc,EAAY,GACrB,CAAC3gC,KAAK2gC,KAGjB,OAAO9D,EAAE,CAAC78B,KAAK4G,MC9vBf2D,ODiwBF,YAAmBq2B,GACjB,IAAIC,EACJ,MAAMtgC,EAAW86B,IAEjB,IAAK,IAAItF,EAAI,EAAGA,EAAI6K,EAAI/gC,OAAQk2B,GAAK,EAAG,CACtC8K,EAAWD,EAAI7K,GAEf,IAAK,IAAIz5B,EAAI,EAAGA,EAAI0D,KAAKH,OAAQvD,GAAK,EACpC,GAAwB,kBAAbukC,EAAuB,CAChC,MAAMC,EAAUvgC,EAASkC,cAAc,OAGvC,IAFAq+B,EAAQh2B,UAAY+1B,EAEbC,EAAQC,YACb/gC,KAAK1D,GAAGwG,YAAYg+B,EAAQC,iBAEzB,GAAIF,aAAoBzE,EAC7B,IAAK,IAAIjH,EAAI,EAAGA,EAAI0L,EAAShhC,OAAQs1B,GAAK,EACxCn1B,KAAK1D,GAAGwG,YAAY+9B,EAAS1L,SAG/Bn1B,KAAK1D,GAAGwG,YAAY+9B,GAK1B,OAAO7gC,MCzxBPghC,QDiyBF,SAAiBH,GACf,MAAMtgC,EAAW86B,IACjB,IAAI/+B,EACA64B,EAEJ,IAAK74B,EAAI,EAAGA,EAAI0D,KAAKH,OAAQvD,GAAK,EAChC,GAAwB,kBAAbukC,EAAuB,CAChC,MAAMC,EAAUvgC,EAASkC,cAAc,OAGvC,IAFAq+B,EAAQh2B,UAAY+1B,EAEf1L,EAAI2L,EAAQpG,WAAW76B,OAAS,EAAGs1B,GAAK,EAAGA,GAAK,EACnDn1B,KAAK1D,GAAGg1B,aAAawP,EAAQpG,WAAWvF,GAAIn1B,KAAK1D,GAAGo+B,WAAW,SAE5D,GAAImG,aAAoBzE,EAC7B,IAAKjH,EAAI,EAAGA,EAAI0L,EAAShhC,OAAQs1B,GAAK,EACpCn1B,KAAK1D,GAAGg1B,aAAauP,EAAS1L,GAAIn1B,KAAK1D,GAAGo+B,WAAW,SAGvD16B,KAAK1D,GAAGg1B,aAAauP,EAAU7gC,KAAK1D,GAAGo+B,WAAW,IAItD,OAAO16B,MCtzBPmtB,KD01BF,SAAc7B,GACZ,OAAItrB,KAAKH,OAAS,EACZyrB,EACEtrB,KAAK,GAAGihC,oBAAsBpE,EAAE78B,KAAK,GAAGihC,oBAAoBxC,GAAGnT,GAC1DuR,EAAE,CAAC78B,KAAK,GAAGihC,qBAGbpE,EAAE,IAGP78B,KAAK,GAAGihC,mBAA2BpE,EAAE,CAAC78B,KAAK,GAAGihC,qBAC3CpE,EAAE,IAGJA,EAAE,KCv2BTqE,QD02BF,SAAiB5V,GACf,MAAM6V,EAAU,GAChB,IAAIt+B,EAAK7C,KAAK,GACd,IAAK6C,EAAI,OAAOg6B,EAAE,IAElB,KAAOh6B,EAAGo+B,oBAAoB,CAC5B,MAAM9T,EAAOtqB,EAAGo+B,mBAEZ3V,EACEuR,EAAE1P,GAAMsR,GAAGnT,IAAW6V,EAAQn7B,KAAKmnB,GAClCgU,EAAQn7B,KAAKmnB,GAEpBtqB,EAAKsqB,EAGP,OAAO0P,EAAEsE,ICx3BT/T,KD23BF,SAAc9B,GACZ,GAAItrB,KAAKH,OAAS,EAAG,CACnB,MAAMgD,EAAK7C,KAAK,GAEhB,OAAIsrB,EACEzoB,EAAGu+B,wBAA0BvE,EAAEh6B,EAAGu+B,wBAAwB3C,GAAGnT,GACxDuR,EAAE,CAACh6B,EAAGu+B,yBAGRvE,EAAE,IAGPh6B,EAAGu+B,uBAA+BvE,EAAE,CAACh6B,EAAGu+B,yBACrCvE,EAAE,IAGX,OAAOA,EAAE,KC14BTwE,QD64BF,SAAiB/V,GACf,MAAMgW,EAAU,GAChB,IAAIz+B,EAAK7C,KAAK,GACd,IAAK6C,EAAI,OAAOg6B,EAAE,IAElB,KAAOh6B,EAAGu+B,wBAAwB,CAChC,MAAMhU,EAAOvqB,EAAGu+B,uBAEZ9V,EACEuR,EAAEzP,GAAMqR,GAAGnT,IAAWgW,EAAQt7B,KAAKonB,GAClCkU,EAAQt7B,KAAKonB,GAEpBvqB,EAAKuqB,EAGP,OAAOyP,EAAEyE,IC35BTnW,ODk6BF,SAAgBG,GACd,MAAMoT,EAAU,GAEhB,IAAK,IAAIpiC,EAAI,EAAGA,EAAI0D,KAAKH,OAAQvD,GAAK,EACT,OAAvB0D,KAAK1D,GAAG4mB,aACNoI,EACEuR,EAAE78B,KAAK1D,GAAG4mB,YAAYub,GAAGnT,IAAWoT,EAAQ14B,KAAKhG,KAAK1D,GAAG4mB,YAE7Dwb,EAAQ14B,KAAKhG,KAAK1D,GAAG4mB,aAK3B,OAAO2Z,EAAE6B,IC96BTA,QDi7BF,SAAiBpT,GACf,MAAMoT,EAAU,GAEhB,IAAK,IAAIpiC,EAAI,EAAGA,EAAI0D,KAAKH,OAAQvD,GAAK,EAAG,CACvC,IAAI6uB,EAASnrB,KAAK1D,GAAG4mB,WAErB,KAAOiI,GACDG,EACEuR,EAAE1R,GAAQsT,GAAGnT,IAAWoT,EAAQ14B,KAAKmlB,GAEzCuT,EAAQ14B,KAAKmlB,GAGfA,EAASA,EAAOjI,WAIpB,OAAO2Z,EAAE6B,ICj8BTjsB,QDo8BF,SAAiB6Y,GACf,IAAI7Y,EAAUzS,KAEd,MAAwB,qBAAbsrB,EACFuR,EAAE,KAGNpqB,EAAQgsB,GAAGnT,KACd7Y,EAAUA,EAAQisB,QAAQpT,GAAUoV,GAAG,IAGlCjuB,IC98BP+W,KDi9BF,SAAc8B,GACZ,MAAMiW,EAAgB,GAEtB,IAAK,IAAIjlC,EAAI,EAAGA,EAAI0D,KAAKH,OAAQvD,GAAK,EAAG,CACvC,MAAMklC,EAAQxhC,KAAK1D,GAAGivB,iBAAiBD,GAEvC,IAAK,IAAI6J,EAAI,EAAGA,EAAIqM,EAAM3hC,OAAQs1B,GAAK,EACrCoM,EAAcv7B,KAAKw7B,EAAMrM,IAI7B,OAAO0H,EAAE0E,IC39BTxW,SD89BF,SAAkBO,GAChB,MAAMP,EAAW,GAEjB,IAAK,IAAIzuB,EAAI,EAAGA,EAAI0D,KAAKH,OAAQvD,GAAK,EAAG,CACvC,MAAMo+B,EAAa16B,KAAK1D,GAAGyuB,SAE3B,IAAK,IAAIoK,EAAI,EAAGA,EAAIuF,EAAW76B,OAAQs1B,GAAK,EACrC7J,IAAYuR,EAAEnC,EAAWvF,IAAIsJ,GAAGnT,IACnCP,EAAS/kB,KAAK00B,EAAWvF,IAK/B,OAAO0H,EAAE9R,IC1+BThlB,OD6oBF,SAAgBlH,GAEd,OAAOg+B,EADQD,EAAY58B,KAAMnB,KC7oBjC0G,OD4+BF,WACE,IAAK,IAAIjJ,EAAI,EAAGA,EAAI0D,KAAKH,OAAQvD,GAAK,EAChC0D,KAAK1D,GAAG4mB,YAAYljB,KAAK1D,GAAG4mB,WAAWue,YAAYzhC,KAAK1D,IAG9D,OAAO0D,OC/+BThD,OAAOoC,KAAKq+B,GAASp+B,SAAQuG,IAC3B5I,OAAOC,eAAe4/B,EAAEr6B,GAAIoD,EAAY,CACtCrI,MAAOkgC,EAAQ73B,GACf87B,UAAU,OAGC,QC5Bf,SAASC,EAAS9iC,EAAU+iC,GAK1B,YAJc,IAAVA,IACFA,EAAQ,GAGH5qB,WAAWnY,EAAU+iC,GAG9B,SAASvvB,IACP,OAAO+D,KAAK/D,MAsBd,SAASwvB,EAAah/B,EAAI+E,QACX,IAATA,IACFA,EAAO,KAGT,MAAMhJ,EAASs9B,IACf,IAAI4F,EACAC,EACAC,EACJ,MAAMC,EA5BR,SAA0Bp/B,GACxB,MAAMjE,EAASs9B,IACf,IAAI/3B,EAcJ,OAZIvF,EAAOk9B,mBACT33B,EAAQvF,EAAOk9B,iBAAiBj5B,EAAI,QAGjCsB,GAAStB,EAAGq/B,eACf/9B,EAAQtB,EAAGq/B,cAGR/9B,IACHA,EAAQtB,EAAGsB,OAGNA,EAYU,CAAiBtB,GA+BlC,OA7BIjE,EAAOujC,iBACTJ,EAAeE,EAAS79B,WAAa69B,EAASG,gBAE1CL,EAAal8B,MAAM,KAAKhG,OAAS,IACnCkiC,EAAeA,EAAal8B,MAAM,MAAM4pB,KAAI1N,GAAKA,EAAElhB,QAAQ,IAAK,OAAM0e,KAAK,OAK7EyiB,EAAkB,IAAIpjC,EAAOujC,gBAAiC,SAAjBJ,EAA0B,GAAKA,KAE5EC,EAAkBC,EAASI,cAAgBJ,EAASK,YAAcL,EAASM,aAAeN,EAASO,aAAeP,EAAS79B,WAAa69B,EAASlG,iBAAiB,aAAal7B,QAAQ,aAAc,sBACrMihC,EAASE,EAAgBtS,WAAW7pB,MAAM,MAG/B,MAAT+B,IAE0Bm6B,EAAxBnjC,EAAOujC,gBAAgCH,EAAgBS,IAChC,KAAlBX,EAAOjiC,OAA8BggC,WAAWiC,EAAO,KAC5CjC,WAAWiC,EAAO,KAG3B,MAATl6B,IAE0Bm6B,EAAxBnjC,EAAOujC,gBAAgCH,EAAgBU,IAChC,KAAlBZ,EAAOjiC,OAA8BggC,WAAWiC,EAAO,KAC5CjC,WAAWiC,EAAO,KAGjCC,GAAgB,EAGzB,SAAS,EAAShlC,GAChB,MAAoB,kBAANA,GAAwB,OAANA,GAAcA,EAAEkI,aAAkE,WAAnDjI,OAAOkB,UAAUwxB,SAASjzB,KAAKM,GAAGmK,MAAM,GAAI,GAG7G,SAASy7B,EAAOxO,GAEd,MAAsB,qBAAXv1B,QAAwD,qBAAvBA,OAAOY,YAC1C20B,aAAgB30B,YAGlB20B,IAA2B,IAAlBA,EAAKgJ,UAAoC,KAAlBhJ,EAAKgJ,UAG9C,SAAS,IACP,MAAMrH,EAAK94B,OAAO4C,UAAUC,QAAU,OAAIC,EAAYF,UAAU,IAC1DgjC,EAAW,CAAC,YAAa,cAAe,aAE9C,IAAK,IAAItmC,EAAI,EAAGA,EAAIsD,UAAUC,OAAQvD,GAAK,EAAG,CAC5C,MAAMumC,EAAavmC,EAAI,GAAKsD,UAAUC,QAAUvD,OAAIwD,EAAYF,UAAUtD,GAE1E,QAAmBwD,IAAf+iC,GAA2C,OAAfA,IAAwBF,EAAOE,GAAa,CAC1E,MAAMC,EAAY9lC,OAAOoC,KAAKpC,OAAO6lC,IAAa98B,QAAOlI,GAAO+kC,EAAShsB,QAAQ/Y,GAAO,IAExF,IAAK,IAAIklC,EAAY,EAAGC,EAAMF,EAAUjjC,OAAQkjC,EAAYC,EAAKD,GAAa,EAAG,CAC/E,MAAME,EAAUH,EAAUC,GACpBG,EAAOlmC,OAAOmmC,yBAAyBN,EAAYI,QAE5CnjC,IAATojC,GAAsBA,EAAKhmC,aACzB,EAAS44B,EAAGmN,KAAa,EAASJ,EAAWI,IAC3CJ,EAAWI,GAASG,WACtBtN,EAAGmN,GAAWJ,EAAWI,GAEzB,EAAOnN,EAAGmN,GAAUJ,EAAWI,KAEvB,EAASnN,EAAGmN,KAAa,EAASJ,EAAWI,KACvDnN,EAAGmN,GAAW,GAEVJ,EAAWI,GAASG,WACtBtN,EAAGmN,GAAWJ,EAAWI,GAEzB,EAAOnN,EAAGmN,GAAUJ,EAAWI,KAGjCnN,EAAGmN,GAAWJ,EAAWI,MAOnC,OAAOnN,EAGT,SAASuN,EAAexgC,EAAIygC,EAASC,GACnC1gC,EAAGsB,MAAM2jB,YAAYwb,EAASC,GAGhC,SAASC,EAAqBC,GAC5B,IAAI,OACFC,EAAM,eACNC,EAAc,KACdC,GACEH,EACJ,MAAM7kC,EAASs9B,IACT2H,GAAiBH,EAAOI,UAC9B,IACIptB,EADA3U,EAAY,KAEhB,MAAMtD,EAAWilC,EAAOK,OAAOC,MAC/BN,EAAOO,UAAU9/B,MAAM+/B,eAAiB,OACxCtlC,EAAOuY,qBAAqBusB,EAAOS,gBACnC,MAAMC,EAAMT,EAAiBE,EAAgB,OAAS,OAEhDQ,EAAe,CAACC,EAAShkC,IACd,SAAR8jC,GAAkBE,GAAWhkC,GAAkB,SAAR8jC,GAAkBE,GAAWhkC,EAGvE4Y,EAAU,KACdxC,GAAO,IAAIN,MAAOmuB,UAEA,OAAdxiC,IACFA,EAAY2U,GAGd,MAAM8tB,EAAWlhC,KAAKQ,IAAIR,KAAKO,KAAK6S,EAAO3U,GAAatD,EAAU,GAAI,GAChEgmC,EAAe,GAAMnhC,KAAK6Z,IAAIqnB,EAAWlhC,KAAKohC,IAAM,EAC1D,IAAIC,EAAkBd,EAAgBY,GAAgBd,EAAiBE,GAUvE,GARIQ,EAAaM,EAAiBhB,KAChCgB,EAAkBhB,GAGpBD,EAAOO,UAAUW,SAAS,CACxB,CAAChB,GAAOe,IAGNN,EAAaM,EAAiBhB,GAUhC,OATAD,EAAOO,UAAU9/B,MAAMgjB,SAAW,SAClCuc,EAAOO,UAAU9/B,MAAM+/B,eAAiB,GACxCltB,YAAW,KACT0sB,EAAOO,UAAU9/B,MAAMgjB,SAAW,GAClCuc,EAAOO,UAAUW,SAAS,CACxB,CAAChB,GAAOe,YAGZ/lC,EAAOuY,qBAAqBusB,EAAOS,gBAIrCT,EAAOS,eAAiBvlC,EAAO0D,sBAAsB4W,IAGvDA,ICzMF,IAAI,ECCA2rB,ECDA,EF+BJ,SAASC,IAKP,OAJK,IACH,EA/BJ,WACE,MAAMlmC,EAASs9B,IACT37B,EAAW86B,IACjB,MAAO,CACL0J,aAAcxkC,EAAS+F,iBAAmB,mBAAoB/F,EAAS+F,gBAAgBnC,MACvF6gC,SAAU,iBAAkBpmC,GAAUA,EAAOqmC,eAAiB1kC,aAAoB3B,EAAOqmC,eACzFC,gBAAiB,WACf,IAAIngC,GAAkB,EAEtB,IACE,MAAMogC,EAAOnoC,OAAOC,eAAe,GAAI,UAAW,CAEhDE,MACE4H,GAAkB,KAItBnG,EAAO2C,iBAAiB,sBAAuB,KAAM4jC,GACrD,MAAO/jC,IAGT,OAAO2D,EAfQ,GAiBjB+I,SACS,mBAAoBlP,GAOnBwmC,IAGL,ECYT,SAASC,EAAUC,GASjB,YARkB,IAAdA,IACFA,EAAY,IAGTT,IACHA,EAnDJ,SAAoBU,GAClB,IAAI,UACFzX,QACY,IAAVyX,EAAmB,GAAKA,EAC5B,MAAMC,EAAUV,IACVlmC,EAASs9B,IACTuJ,EAAW7mC,EAAOqV,UAAUwxB,SAC5BC,EAAK5X,GAAalvB,EAAOqV,UAAU6Z,UACnC6X,EAAS,CACbC,KAAK,EACLC,SAAS,GAELC,EAAclnC,EAAOq9B,OAAOr3B,MAC5BmhC,EAAennC,EAAOq9B,OAAOp3B,OAC7BghC,EAAUH,EAAG7Q,MAAM,+BAEzB,IAAImR,EAAON,EAAG7Q,MAAM,wBACpB,MAAMoR,EAAOP,EAAG7Q,MAAM,2BAChBqR,GAAUF,GAAQN,EAAG7Q,MAAM,8BAC3BsR,EAAuB,UAAbV,EAChB,IAAIW,EAAqB,aAAbX,EAsBZ,OAlBKO,GAAQI,GAASZ,EAAQR,OAFV,CAAC,YAAa,YAAa,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,YAExGpuB,QAAQ,GAAGkvB,KAAeC,MAAmB,IAC9FC,EAAON,EAAG7Q,MAAM,uBACXmR,IAAMA,EAAO,CAAC,EAAG,EAAG,WACzBI,GAAQ,GAINP,IAAYM,IACdR,EAAOU,GAAK,UACZV,EAAOE,SAAU,IAGfG,GAAQE,GAAUD,KACpBN,EAAOU,GAAK,MACZV,EAAOC,KAAM,GAIRD,EASUW,CAAWhB,IAGrBT,ECzCT,SAAS0B,IAKP,OAJK,IACH,EAhBJ,WACE,MAAM3nC,EAASs9B,IAOf,MAAO,CACLsK,SANF,WACE,MAAMd,EAAK9mC,EAAOqV,UAAU6Z,UAAU/sB,cACtC,OAAO2kC,EAAG9uB,QAAQ,WAAa,GAAK8uB,EAAG9uB,QAAQ,UAAY,GAAK8uB,EAAG9uB,QAAQ,WAAa,EAI9E4vB,GACVC,UAAW,+CAA+C5Y,KAAKjvB,EAAOqV,UAAU6Z,YAMtE4Y,IAGL,ECrBM,OACbryB,GAAGC,EAAQ0qB,EAASjV,GAClB,MAAMmN,EAAOl3B,KACb,IAAKk3B,EAAKyP,iBAAmBzP,EAAK0P,UAAW,OAAO1P,EACpD,GAAuB,oBAAZ8H,EAAwB,OAAO9H,EAC1C,MAAM2P,EAAS9c,EAAW,UAAY,OAKtC,OAJAzV,EAAOzO,MAAM,KAAKxG,SAAQmT,IACnB0kB,EAAKyP,gBAAgBn0B,KAAQ0kB,EAAKyP,gBAAgBn0B,GAAS,IAChE0kB,EAAKyP,gBAAgBn0B,GAAOq0B,GAAQ7H,MAE/B9H,GAGT4P,KAAKxyB,EAAQ0qB,EAASjV,GACpB,MAAMmN,EAAOl3B,KACb,IAAKk3B,EAAKyP,iBAAmBzP,EAAK0P,UAAW,OAAO1P,EACpD,GAAuB,oBAAZ8H,EAAwB,OAAO9H,EAE1C,SAAS6P,IACP7P,EAAKlR,IAAI1R,EAAQyyB,GAEbA,EAAYC,uBACPD,EAAYC,eAGrB,IAAK,IAAIC,EAAOrnC,UAAUC,OAAQsqB,EAAO,IAAIO,MAAMuc,GAAOC,EAAO,EAAGA,EAAOD,EAAMC,IAC/E/c,EAAK+c,GAAQtnC,UAAUsnC,GAGzBlI,EAAQ5U,MAAM8M,EAAM/M,GAItB,OADA4c,EAAYC,eAAiBhI,EACtB9H,EAAK7iB,GAAGC,EAAQyyB,EAAahd,IAGtCod,MAAMnI,EAASjV,GACb,MAAMmN,EAAOl3B,KACb,IAAKk3B,EAAKyP,iBAAmBzP,EAAK0P,UAAW,OAAO1P,EACpD,GAAuB,oBAAZ8H,EAAwB,OAAO9H,EAC1C,MAAM2P,EAAS9c,EAAW,UAAY,OAMtC,OAJImN,EAAKkQ,mBAAmBxwB,QAAQooB,GAAW,GAC7C9H,EAAKkQ,mBAAmBP,GAAQ7H,GAG3B9H,GAGTmQ,OAAOrI,GACL,MAAM9H,EAAOl3B,KACb,IAAKk3B,EAAKyP,iBAAmBzP,EAAK0P,UAAW,OAAO1P,EACpD,IAAKA,EAAKkQ,mBAAoB,OAAOlQ,EACrC,MAAMtwB,EAAQswB,EAAKkQ,mBAAmBxwB,QAAQooB,GAM9C,OAJIp4B,GAAS,GACXswB,EAAKkQ,mBAAmB5vB,OAAO5Q,EAAO,GAGjCswB,GAGTlR,IAAI1R,EAAQ0qB,GACV,MAAM9H,EAAOl3B,KACb,OAAKk3B,EAAKyP,iBAAmBzP,EAAK0P,UAAkB1P,EAC/CA,EAAKyP,iBACVryB,EAAOzO,MAAM,KAAKxG,SAAQmT,IACD,qBAAZwsB,EACT9H,EAAKyP,gBAAgBn0B,GAAS,GACrB0kB,EAAKyP,gBAAgBn0B,IAC9B0kB,EAAKyP,gBAAgBn0B,GAAOnT,SAAQ,CAACioC,EAAc1gC,MAC7C0gC,IAAiBtI,GAAWsI,EAAaN,gBAAkBM,EAAaN,iBAAmBhI,IAC7F9H,EAAKyP,gBAAgBn0B,GAAOgF,OAAO5Q,EAAO,SAK3CswB,GAZ2BA,GAepCqQ,OACE,MAAMrQ,EAAOl3B,KACb,IAAKk3B,EAAKyP,iBAAmBzP,EAAK0P,UAAW,OAAO1P,EACpD,IAAKA,EAAKyP,gBAAiB,OAAOzP,EAClC,IAAI5iB,EACAxM,EACAg1B,EAEJ,IAAK,IAAI0K,EAAQ5nC,UAAUC,OAAQsqB,EAAO,IAAIO,MAAM8c,GAAQC,EAAQ,EAAGA,EAAQD,EAAOC,IACpFtd,EAAKsd,GAAS7nC,UAAU6nC,GAGH,kBAAZtd,EAAK,IAAmBO,MAAMC,QAAQR,EAAK,KACpD7V,EAAS6V,EAAK,GACdriB,EAAOqiB,EAAKjjB,MAAM,EAAGijB,EAAKtqB,QAC1Bi9B,EAAU5F,IAEV5iB,EAAS6V,EAAK,GAAG7V,OACjBxM,EAAOqiB,EAAK,GAAGriB,KACfg1B,EAAU3S,EAAK,GAAG2S,SAAW5F,GAG/BpvB,EAAKuS,QAAQyiB,GAeb,OAdoBpS,MAAMC,QAAQrW,GAAUA,EAASA,EAAOzO,MAAM,MACtDxG,SAAQmT,IACd0kB,EAAKkQ,oBAAsBlQ,EAAKkQ,mBAAmBvnC,QACrDq3B,EAAKkQ,mBAAmB/nC,SAAQioC,IAC9BA,EAAald,MAAM0S,EAAS,CAACtqB,KAAU1K,OAIvCovB,EAAKyP,iBAAmBzP,EAAKyP,gBAAgBn0B,IAC/C0kB,EAAKyP,gBAAgBn0B,GAAOnT,SAAQioC,IAClCA,EAAald,MAAM0S,EAASh1B,SAI3BovB,IC7GI,OACbpK,WCVa,WACb,MAAM4W,EAAS1jC,KACf,IAAI4E,EACAC,EACJ,MAAM6iC,EAAMhE,EAAOgE,IAGjB9iC,EADiC,qBAAxB8+B,EAAOK,OAAOn/B,OAAiD,OAAxB8+B,EAAOK,OAAOn/B,MACtD8+B,EAAOK,OAAOn/B,MAEd8iC,EAAI,GAAGnhC,YAIf1B,EADkC,qBAAzB6+B,EAAOK,OAAOl/B,QAAmD,OAAzB6+B,EAAOK,OAAOl/B,OACtD6+B,EAAOK,OAAOl/B,OAEd6iC,EAAI,GAAGC,aAGJ,IAAV/iC,GAAe8+B,EAAOkE,gBAA6B,IAAX/iC,GAAgB6+B,EAAOmE,eAKnEjjC,EAAQA,EAAQ3D,SAASymC,EAAI5P,IAAI,iBAAmB,EAAG,IAAM72B,SAASymC,EAAI5P,IAAI,kBAAoB,EAAG,IACrGjzB,EAASA,EAAS5D,SAASymC,EAAI5P,IAAI,gBAAkB,EAAG,IAAM72B,SAASymC,EAAI5P,IAAI,mBAAqB,EAAG,IACnGzuB,OAAOrI,MAAM4D,KAAQA,EAAQ,GAC7ByE,OAAOrI,MAAM6D,KAASA,EAAS,GACnC7H,OAAO4lB,OAAO8gB,EAAQ,CACpB9+B,QACAC,SACA2a,KAAMkkB,EAAOkE,eAAiBhjC,EAAQC,MDnBxCijC,aEVa,WACb,MAAMpE,EAAS1jC,KAEf,SAAS+nC,EAAkB9pC,GACzB,OAAIylC,EAAOkE,eACF3pC,EAIF,CACL,MAAS,SACT,aAAc,cACd,iBAAkB,eAClB,cAAe,aACf,eAAgB,gBAChB,eAAgB,cAChB,gBAAiB,iBACjB,YAAe,gBACfA,GAGJ,SAAS+pC,EAA0B7T,EAAM8T,GACvC,OAAOpI,WAAW1L,EAAK4H,iBAAiBgM,EAAkBE,KAAW,GAGvE,MAAMlE,EAASL,EAAOK,QAChB,WACJmE,EACA1oB,KAAM2oB,EACNC,aAAcC,EAAG,SACjBC,GACE5E,EACE6E,EAAY7E,EAAO8E,SAAWzE,EAAOyE,QAAQC,QAC7CC,EAAuBH,EAAY7E,EAAO8E,QAAQG,OAAO9oC,OAAS6jC,EAAOiF,OAAO9oC,OAChF8oC,EAAST,EAAWnd,SAAS,IAAI2Y,EAAOK,OAAO6E,cAC/CC,EAAeN,EAAY7E,EAAO8E,QAAQG,OAAO9oC,OAAS8oC,EAAO9oC,OACvE,IAAIipC,EAAW,GACf,MAAMC,EAAa,GACbC,EAAkB,GACxB,IAAIC,EAAelF,EAAOmF,mBAEE,oBAAjBD,IACTA,EAAelF,EAAOmF,mBAAmBzsC,KAAKinC,IAGhD,IAAIyF,EAAcpF,EAAOqF,kBAEE,oBAAhBD,IACTA,EAAcpF,EAAOqF,kBAAkB3sC,KAAKinC,IAG9C,MAAM2F,EAAyB3F,EAAOoF,SAASjpC,OACzCypC,EAA2B5F,EAAOqF,WAAWlpC,OACnD,IAAI0pC,EAAexF,EAAOwF,aACtBC,GAAiBP,EACjBQ,EAAgB,EAChB7iC,EAAQ,EAEZ,GAA0B,qBAAfuhC,EACT,OAG0B,kBAAjBoB,GAA6BA,EAAa3yB,QAAQ,MAAQ,IACnE2yB,EAAe1J,WAAW0J,EAAa1oC,QAAQ,IAAK,KAAO,IAAMsnC,GAGnEzE,EAAOgG,aAAeH,EAElBlB,EAAKM,EAAO7Q,IAAI,CAClB6R,WAAY,GACZC,aAAc,GACdC,UAAW,KACLlB,EAAO7Q,IAAI,CACjBgS,YAAa,GACbF,aAAc,GACdC,UAAW,KAGT9F,EAAOgG,gBAAkBhG,EAAOiG,UAClC3G,EAAeK,EAAOO,UAAW,kCAAmC,IACpEZ,EAAeK,EAAOO,UAAW,iCAAkC,KAGrE,MAAMgG,EAAclG,EAAOmG,MAAQnG,EAAOmG,KAAKC,KAAO,GAAKzG,EAAOwG,KAOlE,IAAIE,EALAH,GACFvG,EAAOwG,KAAKG,WAAWxB,GAKzB,MAAMyB,EAAgD,SAAzBvG,EAAOwG,eAA4BxG,EAAOyG,aAAextC,OAAOoC,KAAK2kC,EAAOyG,aAAazkC,QAAOlI,GACnE,qBAA1CkmC,EAAOyG,YAAY3sC,GAAK0sC,gBACrC1qC,OAAS,EAEZ,IAAK,IAAIvD,EAAI,EAAGA,EAAIusC,EAAcvsC,GAAK,EAAG,CACxC8tC,EAAY,EACZ,MAAM/iC,EAAQshC,EAAOjI,GAAGpkC,GAMxB,GAJI2tC,GACFvG,EAAOwG,KAAKO,YAAYnuC,EAAG+K,EAAOwhC,EAAcd,GAGrB,SAAzB1gC,EAAMywB,IAAI,WAAd,CAEA,GAA6B,SAAzBiM,EAAOwG,cAA0B,CAC/BD,IACF3B,EAAOrsC,GAAG6H,MAAM4jC,EAAkB,UAAY,IAGhD,MAAM2C,EAAc5O,iBAAiBz0B,EAAM,IACrCsjC,EAAmBtjC,EAAM,GAAGlD,MAAMC,UAClCwmC,EAAyBvjC,EAAM,GAAGlD,MAAMi+B,gBAU9C,GARIuI,IACFtjC,EAAM,GAAGlD,MAAMC,UAAY,QAGzBwmC,IACFvjC,EAAM,GAAGlD,MAAMi+B,gBAAkB,QAG/B2B,EAAO8G,aACTT,EAAY1G,EAAOkE,eAAiBvgC,EAAMo4B,YAAW,GAAQp4B,EAAMy4B,aAAY,OAC1E,CAEL,MAAMl7B,EAAQojC,EAA0B0C,EAAa,SAC/CI,EAAc9C,EAA0B0C,EAAa,gBACrDK,EAAe/C,EAA0B0C,EAAa,iBACtDf,EAAa3B,EAA0B0C,EAAa,eACpDZ,EAAc9B,EAA0B0C,EAAa,gBACrDM,EAAYN,EAAY3O,iBAAiB,cAE/C,GAAIiP,GAA2B,eAAdA,EACfZ,EAAYxlC,EAAQ+kC,EAAaG,MAC5B,CACL,MAAM,YACJvjC,EAAW,YACXq5B,GACEv4B,EAAM,GACV+iC,EAAYxlC,EAAQkmC,EAAcC,EAAepB,EAAaG,GAAelK,EAAcr5B,IAI3FokC,IACFtjC,EAAM,GAAGlD,MAAMC,UAAYumC,GAGzBC,IACFvjC,EAAM,GAAGlD,MAAMi+B,gBAAkBwI,GAG/B7G,EAAO8G,eAAcT,EAAY9mC,KAAK+M,MAAM+5B,SAEhDA,GAAajC,GAAcpE,EAAOwG,cAAgB,GAAKhB,GAAgBxF,EAAOwG,cAC1ExG,EAAO8G,eAAcT,EAAY9mC,KAAK+M,MAAM+5B,IAE5CzB,EAAOrsC,KACTqsC,EAAOrsC,GAAG6H,MAAM4jC,EAAkB,UAAY,GAAGqC,OAIjDzB,EAAOrsC,KACTqsC,EAAOrsC,GAAG2uC,gBAAkBb,GAG9BpB,EAAgBhjC,KAAKokC,GAEjBrG,EAAOgG,gBACTP,EAAgBA,EAAgBY,EAAY,EAAIX,EAAgB,EAAIF,EAC9C,IAAlBE,GAA6B,IAANntC,IAASktC,EAAgBA,EAAgBrB,EAAa,EAAIoB,GAC3E,IAANjtC,IAASktC,EAAgBA,EAAgBrB,EAAa,EAAIoB,GAC1DjmC,KAAKG,IAAI+lC,GAAiB,OAAUA,EAAgB,GACpDzF,EAAO8G,eAAcrB,EAAgBlmC,KAAK+M,MAAMm5B,IAChD5iC,EAAQm9B,EAAOmH,iBAAmB,GAAGpC,EAAS9iC,KAAKwjC,GACvDT,EAAW/iC,KAAKwjC,KAEZzF,EAAO8G,eAAcrB,EAAgBlmC,KAAK+M,MAAMm5B,KAC/C5iC,EAAQtD,KAAKO,IAAI6/B,EAAOK,OAAOoH,mBAAoBvkC,IAAU88B,EAAOK,OAAOmH,iBAAmB,GAAGpC,EAAS9iC,KAAKwjC,GACpHT,EAAW/iC,KAAKwjC,GAChBA,EAAgBA,EAAgBY,EAAYb,GAG9C7F,EAAOgG,aAAeU,EAAYb,EAClCE,EAAgBW,EAChBxjC,GAAS,GAsBX,GAnBA88B,EAAOgG,YAAcpmC,KAAKQ,IAAI4/B,EAAOgG,YAAavB,GAAcgB,EAE5Dd,GAAOC,IAA+B,UAAlBvE,EAAOqH,QAAwC,cAAlBrH,EAAOqH,SAC1DlD,EAAWpQ,IAAI,CACblzB,MAAO,GAAG8+B,EAAOgG,YAAc3F,EAAOwF,mBAItCxF,EAAOsH,gBACTnD,EAAWpQ,IAAI,CACb,CAACiQ,EAAkB,UAAW,GAAGrE,EAAOgG,YAAc3F,EAAOwF,mBAI7DU,GACFvG,EAAOwG,KAAKoB,kBAAkBlB,EAAWtB,EAAUf,IAIhDhE,EAAOgG,eAAgB,CAC1B,MAAMwB,EAAgB,GAEtB,IAAK,IAAIjvC,EAAI,EAAGA,EAAIwsC,EAASjpC,OAAQvD,GAAK,EAAG,CAC3C,IAAIkvC,EAAiB1C,EAASxsC,GAC1BynC,EAAO8G,eAAcW,EAAiBloC,KAAK+M,MAAMm7B,IAEjD1C,EAASxsC,IAAMonC,EAAOgG,YAAcvB,GACtCoD,EAAcvlC,KAAKwlC,GAIvB1C,EAAWyC,EAEPjoC,KAAK+M,MAAMqzB,EAAOgG,YAAcvB,GAAc7kC,KAAK+M,MAAMy4B,EAASA,EAASjpC,OAAS,IAAM,GAC5FipC,EAAS9iC,KAAK09B,EAAOgG,YAAcvB,GAMvC,GAFwB,IAApBW,EAASjpC,SAAcipC,EAAW,CAAC,IAEX,IAAxB/E,EAAOwF,aAAoB,CAC7B,MAAM1rC,EAAM6lC,EAAOkE,gBAAkBS,EAAM,aAAeN,EAAkB,eAC5EY,EAAO5iC,QAAO,CAACkpB,EAAG1B,KACXwW,EAAOiG,SAERzc,IAAeob,EAAO9oC,OAAS,IAKlCi4B,IAAI,CACL,CAACj6B,GAAM,GAAG0rC,QAId,GAAIxF,EAAOgG,gBAAkBhG,EAAO0H,qBAAsB,CACxD,IAAIC,EAAgB,EACpB1C,EAAgB3pC,SAAQssC,IACtBD,GAAiBC,GAAkB5H,EAAOwF,aAAexF,EAAOwF,aAAe,MAEjFmC,GAAiB3H,EAAOwF,aACxB,MAAMqC,EAAUF,EAAgBvD,EAChCW,EAAWA,EAASrZ,KAAIoc,GAClBA,EAAO,GAAW5C,EAClB4C,EAAOD,EAAgBA,EAAUzC,EAC9B0C,IAIX,GAAI9H,EAAO+H,yBAA0B,CACnC,IAAIJ,EAAgB,EAMpB,GALA1C,EAAgB3pC,SAAQssC,IACtBD,GAAiBC,GAAkB5H,EAAOwF,aAAexF,EAAOwF,aAAe,MAEjFmC,GAAiB3H,EAAOwF,aAEpBmC,EAAgBvD,EAAY,CAC9B,MAAM4D,GAAmB5D,EAAauD,GAAiB,EACvD5C,EAASzpC,SAAQ,CAACwsC,EAAMG,KACtBlD,EAASkD,GAAaH,EAAOE,KAE/BhD,EAAW1pC,SAAQ,CAACwsC,EAAMG,KACxBjD,EAAWiD,GAAaH,EAAOE,MAYrC,GAPA/uC,OAAO4lB,OAAO8gB,EAAQ,CACpBiF,SACAG,WACAC,aACAC,oBAGEjF,EAAOgG,gBAAkBhG,EAAOiG,UAAYjG,EAAO0H,qBAAsB,CAC3EpI,EAAeK,EAAOO,UAAW,mCAAuC6E,EAAS,GAAb,MACpEzF,EAAeK,EAAOO,UAAW,iCAAqCP,EAAOlkB,KAAO,EAAIwpB,EAAgBA,EAAgBnpC,OAAS,GAAK,EAAnE,MACnE,MAAMosC,GAAiBvI,EAAOoF,SAAS,GACjCoD,GAAmBxI,EAAOqF,WAAW,GAC3CrF,EAAOoF,SAAWpF,EAAOoF,SAASrZ,KAAIO,GAAKA,EAAIic,IAC/CvI,EAAOqF,WAAarF,EAAOqF,WAAWtZ,KAAIO,GAAKA,EAAIkc,IAoBrD,GAjBIrD,IAAiBH,GACnBhF,EAAO6D,KAAK,sBAGVuB,EAASjpC,SAAWwpC,IAClB3F,EAAOK,OAAOoI,eAAezI,EAAO0I,gBACxC1I,EAAO6D,KAAK,yBAGVwB,EAAWlpC,SAAWypC,GACxB5F,EAAO6D,KAAK,0BAGVxD,EAAOsI,qBACT3I,EAAO4I,sBAGJ/D,IAAcxE,EAAOiG,UAA8B,UAAlBjG,EAAOqH,QAAwC,SAAlBrH,EAAOqH,QAAoB,CAC5F,MAAMmB,EAAsB,GAAGxI,EAAOyI,wCAChCC,EAA6B/I,EAAOgE,IAAI7J,SAAS0O,GAEnD1D,GAAgB9E,EAAO2I,wBACpBD,GAA4B/I,EAAOgE,IAAIhK,SAAS6O,GAC5CE,GACT/I,EAAOgE,IAAI9J,YAAY2O,KFhT3BI,iBGZa,SAA0B3I,GACvC,MAAMN,EAAS1jC,KACT4sC,EAAe,GACfrE,EAAY7E,EAAO8E,SAAW9E,EAAOK,OAAOyE,QAAQC,QAC1D,IACInsC,EADAuwC,EAAY,EAGK,kBAAV7I,EACTN,EAAOoJ,cAAc9I,IACF,IAAVA,GACTN,EAAOoJ,cAAcpJ,EAAOK,OAAOC,OAGrC,MAAM+I,EAAkBnmC,GAClB2hC,EACK7E,EAAOiF,OAAO5iC,QAAOlD,GAAM5B,SAAS4B,EAAGxC,aAAa,2BAA4B,MAAQuG,IAAO,GAGjG88B,EAAOiF,OAAOjI,GAAG95B,GAAO,GAIjC,GAAoC,SAAhC88B,EAAOK,OAAOwG,eAA4B7G,EAAOK,OAAOwG,cAAgB,EAC1E,GAAI7G,EAAOK,OAAOgG,eAChBrG,EAAOsJ,cAAc1M,MAAKj5B,IACxBulC,EAAa5mC,KAAKqB,WAGpB,IAAK/K,EAAI,EAAGA,EAAIgH,KAAKslB,KAAK8a,EAAOK,OAAOwG,eAAgBjuC,GAAK,EAAG,CAC9D,MAAMsK,EAAQ88B,EAAOuJ,YAAc3wC,EACnC,GAAIsK,EAAQ88B,EAAOiF,OAAO9oC,SAAW0oC,EAAW,MAChDqE,EAAa5mC,KAAK+mC,EAAgBnmC,SAItCgmC,EAAa5mC,KAAK+mC,EAAgBrJ,EAAOuJ,cAI3C,IAAK3wC,EAAI,EAAGA,EAAIswC,EAAa/sC,OAAQvD,GAAK,EACxC,GAA+B,qBAApBswC,EAAatwC,GAAoB,CAC1C,MAAMuI,EAAS+nC,EAAatwC,GAAGyjC,aAC/B8M,EAAYhoC,EAASgoC,EAAYhoC,EAASgoC,GAK1CA,GAA2B,IAAdA,IAAiBnJ,EAAOwE,WAAWpQ,IAAI,SAAU,GAAG+U,QHlCrEP,mBIba,WACb,MAAM5I,EAAS1jC,KACT2oC,EAASjF,EAAOiF,OAEtB,IAAK,IAAIrsC,EAAI,EAAGA,EAAIqsC,EAAO9oC,OAAQvD,GAAK,EACtCqsC,EAAOrsC,GAAG4wC,kBAAoBxJ,EAAOkE,eAAiBe,EAAOrsC,GAAG6wC,WAAaxE,EAAOrsC,GAAG8wC,WJSzFC,qBKba,SAA8BvJ,QACzB,IAAdA,IACFA,EAAY9jC,MAAQA,KAAK8jC,WAAa,GAGxC,MAAMJ,EAAS1jC,KACT+jC,EAASL,EAAOK,QAChB,OACJ4E,EACAP,aAAcC,EAAG,SACjBS,GACEpF,EACJ,GAAsB,IAAlBiF,EAAO9oC,OAAc,OACkB,qBAAhC8oC,EAAO,GAAGuE,mBAAmCxJ,EAAO4I,qBAC/D,IAAIgB,GAAgBxJ,EAChBuE,IAAKiF,EAAexJ,GAExB6E,EAAO/K,YAAYmG,EAAOwJ,mBAC1B7J,EAAO8J,qBAAuB,GAC9B9J,EAAOsJ,cAAgB,GAEvB,IAAK,IAAI1wC,EAAI,EAAGA,EAAIqsC,EAAO9oC,OAAQvD,GAAK,EAAG,CACzC,MAAM+K,EAAQshC,EAAOrsC,GACrB,IAAImxC,EAAcpmC,EAAM6lC,kBAEpBnJ,EAAOiG,SAAWjG,EAAOgG,iBAC3B0D,GAAe9E,EAAO,GAAGuE,mBAG3B,MAAMQ,GAAiBJ,GAAgBvJ,EAAOgG,eAAiBrG,EAAOiK,eAAiB,GAAKF,IAAgBpmC,EAAM4jC,gBAAkBlH,EAAOwF,cACrIqE,GAAyBN,EAAexE,EAAS,IAAM/E,EAAOgG,eAAiBrG,EAAOiK,eAAiB,GAAKF,IAAgBpmC,EAAM4jC,gBAAkBlH,EAAOwF,cAC3JsE,IAAgBP,EAAeG,GAC/BK,EAAaD,EAAcnK,EAAOsF,gBAAgB1sC,IACtCuxC,GAAe,GAAKA,EAAcnK,EAAOlkB,KAAO,GAAKsuB,EAAa,GAAKA,GAAcpK,EAAOlkB,MAAQquB,GAAe,GAAKC,GAAcpK,EAAOlkB,QAG7JkkB,EAAOsJ,cAAchnC,KAAKqB,GAC1Bq8B,EAAO8J,qBAAqBxnC,KAAK1J,GACjCqsC,EAAOjI,GAAGpkC,GAAGohC,SAASqG,EAAOwJ,oBAG/BlmC,EAAMm9B,SAAW6D,GAAOqF,EAAgBA,EACxCrmC,EAAM0mC,iBAAmB1F,GAAOuF,EAAwBA,EAG1DlK,EAAOsJ,cAAgB,EAAEtJ,EAAOsJ,gBL/BhCgB,eMfa,SAAwBlK,GACrC,MAAMJ,EAAS1jC,KAEf,GAAyB,qBAAd8jC,EAA2B,CACpC,MAAMmK,EAAavK,EAAO0E,cAAgB,EAAI,EAE9CtE,EAAYJ,GAAUA,EAAOI,WAAaJ,EAAOI,UAAYmK,GAAc,EAG7E,MAAMlK,EAASL,EAAOK,OAChBmK,EAAiBxK,EAAOyK,eAAiBzK,EAAOiK,eACtD,IAAI,SACFnJ,EAAQ,YACR4J,EAAW,MACXC,GACE3K,EACJ,MAAM4K,EAAeF,EACfG,EAASF,EAEQ,IAAnBH,GACF1J,EAAW,EACX4J,GAAc,EACdC,GAAQ,IAER7J,GAAYV,EAAYJ,EAAOiK,gBAAkBO,EACjDE,EAAc5J,GAAY,EAC1B6J,EAAQ7J,GAAY,GAGtBxnC,OAAO4lB,OAAO8gB,EAAQ,CACpBc,WACA4J,cACAC,WAEEtK,EAAOsI,qBAAuBtI,EAAOgG,gBAAkBhG,EAAOyK,aAAY9K,EAAO2J,qBAAqBvJ,GAEtGsK,IAAgBE,GAClB5K,EAAO6D,KAAK,yBAGV8G,IAAUE,GACZ7K,EAAO6D,KAAK,oBAGV+G,IAAiBF,GAAeG,IAAWF,IAC7C3K,EAAO6D,KAAK,YAGd7D,EAAO6D,KAAK,WAAY/C,INhCxBiK,oBOhBa,WACb,MAAM/K,EAAS1jC,MACT,OACJ2oC,EAAM,OACN5E,EAAM,WACNmE,EAAU,YACV+E,EAAW,UACXyB,GACEhL,EACE6E,EAAY7E,EAAO8E,SAAWzE,EAAOyE,QAAQC,QAEnD,IAAIkG,EADJhG,EAAO/K,YAAY,GAAGmG,EAAO6K,oBAAoB7K,EAAO8K,kBAAkB9K,EAAO+K,kBAAkB/K,EAAOgL,6BAA6BhL,EAAOiL,2BAA2BjL,EAAOkL,2BAI9KN,EADEpG,EACY7E,EAAOwE,WAAW1e,KAAK,IAAIua,EAAO6E,uCAAuCqE,OAEzEtE,EAAOjI,GAAGuM,GAI1B0B,EAAYjR,SAASqG,EAAO6K,kBAExB7K,EAAO/hC,OAEL2sC,EAAY9Q,SAASkG,EAAOmL,qBAC9BhH,EAAWnd,SAAS,IAAIgZ,EAAO6E,mBAAmB7E,EAAOmL,iDAAiDR,OAAehR,SAASqG,EAAOgL,2BAEzI7G,EAAWnd,SAAS,IAAIgZ,EAAO6E,cAAc7E,EAAOmL,gDAAgDR,OAAehR,SAASqG,EAAOgL,4BAKvI,IAAII,EAAYR,EAAYzN,QAAQ,IAAI6C,EAAO6E,cAAclI,GAAG,GAAGhD,SAASqG,EAAO8K,gBAE/E9K,EAAO/hC,MAA6B,IAArBmtC,EAAUtvC,SAC3BsvC,EAAYxG,EAAOjI,GAAG,GACtByO,EAAUzR,SAASqG,EAAO8K,iBAI5B,IAAIO,EAAYT,EAAYtN,QAAQ,IAAI0C,EAAO6E,cAAclI,GAAG,GAAGhD,SAASqG,EAAO+K,gBAE/E/K,EAAO/hC,MAA6B,IAArBotC,EAAUvvC,SAC3BuvC,EAAYzG,EAAOjI,IAAI,GACvB0O,EAAU1R,SAASqG,EAAO+K,iBAGxB/K,EAAO/hC,OAELmtC,EAAUtR,SAASkG,EAAOmL,qBAC5BhH,EAAWnd,SAAS,IAAIgZ,EAAO6E,mBAAmB7E,EAAOmL,iDAAiDC,EAAUpR,KAAK,gCAAgCL,SAASqG,EAAOiL,yBAEzK9G,EAAWnd,SAAS,IAAIgZ,EAAO6E,cAAc7E,EAAOmL,gDAAgDC,EAAUpR,KAAK,gCAAgCL,SAASqG,EAAOiL,yBAGjKI,EAAUvR,SAASkG,EAAOmL,qBAC5BhH,EAAWnd,SAAS,IAAIgZ,EAAO6E,mBAAmB7E,EAAOmL,iDAAiDE,EAAUrR,KAAK,gCAAgCL,SAASqG,EAAOkL,yBAEzK/G,EAAWnd,SAAS,IAAIgZ,EAAO6E,cAAc7E,EAAOmL,gDAAgDE,EAAUrR,KAAK,gCAAgCL,SAASqG,EAAOkL,0BAIvKvL,EAAO2L,qBP7CPC,kBQjBa,SAA2BC,GACxC,MAAM7L,EAAS1jC,KACT8jC,EAAYJ,EAAO0E,aAAe1E,EAAOI,WAAaJ,EAAOI,WAC7D,WACJiF,EAAU,SACVD,EAAQ,OACR/E,EACAkJ,YAAauC,EACbd,UAAWe,EACXzD,UAAW0D,GACThM,EACJ,IACIsI,EADAiB,EAAcsC,EAGlB,GAA2B,qBAAhBtC,EAA6B,CACtC,IAAK,IAAI3wC,EAAI,EAAGA,EAAIysC,EAAWlpC,OAAQvD,GAAK,EACT,qBAAtBysC,EAAWzsC,EAAI,GACpBwnC,GAAaiF,EAAWzsC,IAAMwnC,EAAYiF,EAAWzsC,EAAI,IAAMysC,EAAWzsC,EAAI,GAAKysC,EAAWzsC,IAAM,EACtG2wC,EAAc3wC,EACLwnC,GAAaiF,EAAWzsC,IAAMwnC,EAAYiF,EAAWzsC,EAAI,KAClE2wC,EAAc3wC,EAAI,GAEXwnC,GAAaiF,EAAWzsC,KACjC2wC,EAAc3wC,GAKdynC,EAAO4L,sBACL1C,EAAc,GAA4B,qBAAhBA,KAA6BA,EAAc,GAI7E,GAAInE,EAASlyB,QAAQktB,IAAc,EACjCkI,EAAYlD,EAASlyB,QAAQktB,OACxB,CACL,MAAM8L,EAAOtsC,KAAKO,IAAIkgC,EAAOoH,mBAAoB8B,GACjDjB,EAAY4D,EAAOtsC,KAAK+M,OAAO48B,EAAc2C,GAAQ7L,EAAOmH,gBAK9D,GAFIc,GAAalD,EAASjpC,SAAQmsC,EAAYlD,EAASjpC,OAAS,GAE5DotC,IAAgBuC,EAMlB,YALIxD,IAAc0D,IAChBhM,EAAOsI,UAAYA,EACnBtI,EAAO6D,KAAK,qBAOhB,MAAMmH,EAAYztC,SAASyiC,EAAOiF,OAAOjI,GAAGuM,GAAalP,KAAK,4BAA8BkP,EAAa,IACzGjwC,OAAO4lB,OAAO8gB,EAAQ,CACpBsI,YACA0C,YACAc,gBACAvC,gBAEFvJ,EAAO6D,KAAK,qBACZ7D,EAAO6D,KAAK,mBAERkI,IAAsBf,GACxBhL,EAAO6D,KAAK,oBAGV7D,EAAOmM,aAAenM,EAAOK,OAAO+L,qBACtCpM,EAAO6D,KAAK,gBRjDdwI,mBSjBa,SAA4B3uC,GACzC,MAAMsiC,EAAS1jC,KACT+jC,EAASL,EAAOK,OAChB18B,EAAQ,EAAEjG,GAAGqR,QAAQ,IAAIsxB,EAAO6E,cAAc,GACpD,IACIrb,EADAyiB,GAAa,EAGjB,GAAI3oC,EACF,IAAK,IAAI/K,EAAI,EAAGA,EAAIonC,EAAOiF,OAAO9oC,OAAQvD,GAAK,EAC7C,GAAIonC,EAAOiF,OAAOrsC,KAAO+K,EAAO,CAC9B2oC,GAAa,EACbziB,EAAajxB,EACb,MAKN,IAAI+K,IAAS2oC,EAWX,OAFAtM,EAAOuM,kBAAenwC,OACtB4jC,EAAOwM,kBAAepwC,GATtB4jC,EAAOuM,aAAe5oC,EAElBq8B,EAAO8E,SAAW9E,EAAOK,OAAOyE,QAAQC,QAC1C/E,EAAOwM,aAAejvC,SAAS,EAAEoG,GAAO02B,KAAK,2BAA4B,IAEzE2F,EAAOwM,aAAe3iB,EAQtBwW,EAAOoM,0BAA+CrwC,IAAxB4jC,EAAOwM,cAA8BxM,EAAOwM,eAAiBxM,EAAOuJ,aACpGvJ,EAAOyM,wBCjCI,SAASC,EAAe3M,GACrC,IAAI,OACFC,EAAM,aACN2M,EAAY,UACZC,EAAS,KACTC,GACE9M,EACJ,MAAM,YACJwJ,EAAW,cACXuC,GACE9L,EACJ,IAAIU,EAAMkM,EAQV,GANKlM,IAC8BA,EAA7B6I,EAAcuC,EAAqB,OAAgBvC,EAAcuC,EAAqB,OAAkB,SAG9G9L,EAAO6D,KAAK,aAAagJ,KAErBF,GAAgBpD,IAAgBuC,EAAe,CACjD,GAAY,UAARpL,EAEF,YADAV,EAAO6D,KAAK,uBAAuBgJ,KAIrC7M,EAAO6D,KAAK,wBAAwBgJ,KAExB,SAARnM,EACFV,EAAO6D,KAAK,sBAAsBgJ,KAElC7M,EAAO6D,KAAK,sBAAsBgJ,MCvBzB,OACbC,QCPa,SAAiB5pC,EAAOo9B,EAAOqM,EAAcI,EAAU9nC,GAapE,QAZc,IAAV/B,IACFA,EAAQ,QAGI,IAAVo9B,IACFA,EAAQhkC,KAAK+jC,OAAOC,YAGD,IAAjBqM,IACFA,GAAe,GAGI,kBAAVzpC,GAAuC,kBAAVA,EACtC,MAAM,IAAI4pB,MAAM,kFAAkF5pB,aAGpG,GAAqB,kBAAVA,EAAoB,CAK7B,MAAM8pC,EAAgBzvC,SAAS2F,EAAO,IAStC,IAFsB+pC,SAASD,GAG7B,MAAM,IAAIlgB,MAAM,sEAAsE5pB,aAKxFA,EAAQ8pC,EAGV,MAAMhN,EAAS1jC,KACf,IAAIutB,EAAa3mB,EACb2mB,EAAa,IAAGA,EAAa,GACjC,MAAM,OACJwW,EAAM,SACN+E,EAAQ,WACRC,EAAU,cACVyG,EAAa,YACbvC,EACA7E,aAAcC,EAAG,UACjBpE,EAAS,QACTwE,GACE/E,EAEJ,GAAIA,EAAOkN,WAAa7M,EAAO8M,iCAAmCpI,IAAYgI,IAAa9nC,EACzF,OAAO,EAGT,MAAMinC,EAAOtsC,KAAKO,IAAI6/B,EAAOK,OAAOoH,mBAAoB5d,GACxD,IAAIye,EAAY4D,EAAOtsC,KAAK+M,OAAOkd,EAAaqiB,GAAQlM,EAAOK,OAAOmH,gBAClEc,GAAalD,EAASjpC,SAAQmsC,EAAYlD,EAASjpC,OAAS,IAE3DotC,GAAelJ,EAAO+M,cAAgB,MAAQtB,GAAiB,IAAMa,GACxE3M,EAAO6D,KAAK,0BAGd,MAAMzD,GAAagF,EAASkD,GAI5B,GAFAtI,EAAOsK,eAAelK,GAElBC,EAAO4L,oBACT,IAAK,IAAIrzC,EAAI,EAAGA,EAAIysC,EAAWlpC,OAAQvD,GAAK,EAAG,CAC7C,MAAMy0C,GAAuBztC,KAAK+M,MAAkB,IAAZyzB,GAClCkN,EAAiB1tC,KAAK+M,MAAsB,IAAhB04B,EAAWzsC,IACvC20C,EAAqB3tC,KAAK+M,MAA0B,IAApB04B,EAAWzsC,EAAI,IAEpB,qBAAtBysC,EAAWzsC,EAAI,GACpBy0C,GAAuBC,GAAkBD,EAAsBE,GAAsBA,EAAqBD,GAAkB,EAC9HzjB,EAAajxB,EACJy0C,GAAuBC,GAAkBD,EAAsBE,IACxE1jB,EAAajxB,EAAI,GAEVy0C,GAAuBC,IAChCzjB,EAAajxB,GAMnB,GAAIonC,EAAOmM,aAAetiB,IAAe0f,EAAa,CACpD,IAAKvJ,EAAOwN,gBAAkBpN,EAAYJ,EAAOI,WAAaA,EAAYJ,EAAOiK,eAC/E,OAAO,EAGT,IAAKjK,EAAOyN,gBAAkBrN,EAAYJ,EAAOI,WAAaA,EAAYJ,EAAOyK,iBAC1ElB,GAAe,KAAO1f,EAAY,OAAO,EAIlD,IAAI+iB,EAGJ,GAF8BA,EAA1B/iB,EAAa0f,EAAyB,OAAgB1f,EAAa0f,EAAyB,OAAwB,QAEpH5E,IAAQvE,IAAcJ,EAAOI,YAAcuE,GAAOvE,IAAcJ,EAAOI,UAkBzE,OAjBAJ,EAAO4L,kBAAkB/hB,GAErBwW,EAAOyK,YACT9K,EAAOiJ,mBAGTjJ,EAAO+K,sBAEe,UAAlB1K,EAAOqH,QACT1H,EAAO0N,aAAatN,GAGJ,UAAdwM,IACF5M,EAAO2N,gBAAgBhB,EAAcC,GACrC5M,EAAOnE,cAAc8Q,EAAcC,KAG9B,EAGT,GAAIvM,EAAOiG,QAAS,CAClB,MAAMsH,EAAM5N,EAAOkE,eACbpqC,EAAI6qC,EAAMvE,GAAaA,EAE7B,GAAc,IAAVE,EAAa,CACf,MAAMuE,EAAY7E,EAAO8E,SAAW9E,EAAOK,OAAOyE,QAAQC,QAEtDF,IACF7E,EAAOO,UAAU9/B,MAAM+/B,eAAiB,OACxCR,EAAO6N,mBAAoB,GAG7BtN,EAAUqN,EAAM,aAAe,aAAe9zC,EAE1C+qC,GACFjmC,uBAAsB,KACpBohC,EAAOO,UAAU9/B,MAAM+/B,eAAiB,GACxCR,EAAO8N,yBAA0B,SAGhC,CACL,IAAK9N,EAAO8B,QAAQT,aAMlB,OALAvB,EAAqB,CACnBE,SACAC,eAAgBnmC,EAChBomC,KAAM0N,EAAM,OAAS,SAEhB,EAGTrN,EAAUW,SAAS,CACjB,CAAC0M,EAAM,OAAS,OAAQ9zC,EACxBi0C,SAAU,WAId,OAAO,EA+BT,OA5BA/N,EAAOoJ,cAAc9I,GACrBN,EAAO0N,aAAatN,GACpBJ,EAAO4L,kBAAkB/hB,GACzBmW,EAAO+K,sBACP/K,EAAO6D,KAAK,wBAAyBvD,EAAOyM,GAC5C/M,EAAO2N,gBAAgBhB,EAAcC,GAEvB,IAAVtM,EACFN,EAAOnE,cAAc8Q,EAAcC,GACzB5M,EAAOkN,YACjBlN,EAAOkN,WAAY,EAEdlN,EAAOgO,gCACVhO,EAAOgO,8BAAgC,SAAuBtwC,GACvDsiC,IAAUA,EAAOkD,WAClBxlC,EAAEd,SAAWN,OACjB0jC,EAAOwE,WAAW,GAAG1mC,oBAAoB,gBAAiBkiC,EAAOgO,+BACjEhO,EAAOwE,WAAW,GAAG1mC,oBAAoB,sBAAuBkiC,EAAOgO,+BACvEhO,EAAOgO,8BAAgC,YAChChO,EAAOgO,8BACdhO,EAAOnE,cAAc8Q,EAAcC,MAIvC5M,EAAOwE,WAAW,GAAG3mC,iBAAiB,gBAAiBmiC,EAAOgO,+BAC9DhO,EAAOwE,WAAW,GAAG3mC,iBAAiB,sBAAuBmiC,EAAOgO,iCAG/D,GDtLPC,YETa,SAAqB/qC,EAAOo9B,EAAOqM,EAAcI,QAChD,IAAV7pC,IACFA,EAAQ,QAGI,IAAVo9B,IACFA,EAAQhkC,KAAK+jC,OAAOC,YAGD,IAAjBqM,IACFA,GAAe,GAGjB,MAAM3M,EAAS1jC,KACf,IAAIoZ,EAAWxS,EAMf,OAJI88B,EAAOK,OAAO/hC,OAChBoX,GAAYsqB,EAAOkO,cAGdlO,EAAO8M,QAAQp3B,EAAU4qB,EAAOqM,EAAcI,IFVrDoB,UGTa,SAAmB7N,EAAOqM,EAAcI,QACvC,IAAVzM,IACFA,EAAQhkC,KAAK+jC,OAAOC,YAGD,IAAjBqM,IACFA,GAAe,GAGjB,MAAM3M,EAAS1jC,MACT,UACJ4wC,EAAS,QACTnI,EAAO,OACP1E,GACEL,EACJ,IAAK+E,EAAS,OAAO/E,EACrB,IAAIoO,EAAW/N,EAAOmH,eAEO,SAAzBnH,EAAOwG,eAAsD,IAA1BxG,EAAOmH,gBAAwBnH,EAAOgO,qBAC3ED,EAAWxuC,KAAKQ,IAAI4/B,EAAOsO,qBAAqB,WAAW,GAAO,IAGpE,MAAMC,EAAYvO,EAAOuJ,YAAclJ,EAAOoH,mBAAqB,EAAI2G,EAEvE,GAAI/N,EAAO/hC,KAAM,CACf,GAAI4uC,GAAa7M,EAAOmO,kBAAmB,OAAO,EAClDxO,EAAOyO,UAEPzO,EAAO0O,YAAc1O,EAAOwE,WAAW,GAAGhI,WAG5C,OAAI6D,EAAOsO,QAAU3O,EAAO2K,MACnB3K,EAAO8M,QAAQ,EAAGxM,EAAOqM,EAAcI,GAGzC/M,EAAO8M,QAAQ9M,EAAOuJ,YAAcgF,EAAWjO,EAAOqM,EAAcI,IHzB3E6B,UIVa,SAAmBtO,EAAOqM,EAAcI,QACvC,IAAVzM,IACFA,EAAQhkC,KAAK+jC,OAAOC,YAGD,IAAjBqM,IACFA,GAAe,GAGjB,MAAM3M,EAAS1jC,MACT,OACJ+jC,EAAM,UACN6M,EAAS,SACT9H,EAAQ,WACRC,EAAU,aACVX,EAAY,QACZK,GACE/E,EACJ,IAAK+E,EAAS,OAAO/E,EAErB,GAAIK,EAAO/hC,KAAM,CACf,GAAI4uC,GAAa7M,EAAOmO,kBAAmB,OAAO,EAClDxO,EAAOyO,UAEPzO,EAAO0O,YAAc1O,EAAOwE,WAAW,GAAGhI,WAK5C,SAASqS,EAAUnwC,GACjB,OAAIA,EAAM,GAAWkB,KAAK+M,MAAM/M,KAAKG,IAAIrB,IAClCkB,KAAK+M,MAAMjO,GAGpB,MAAM2uC,EAAsBwB,EAPVnK,EAAe1E,EAAOI,WAAaJ,EAAOI,WAQtD0O,EAAqB1J,EAASrZ,KAAIrtB,GAAOmwC,EAAUnwC,KACzD,IAAIqwC,EAAW3J,EAAS0J,EAAmB57B,QAAQm6B,GAAuB,GAE1E,GAAwB,qBAAb0B,GAA4B1O,EAAOiG,QAAS,CACrD,IAAI0I,EACJ5J,EAASzpC,SAAQ,CAACwsC,EAAMG,KAClB+E,GAAuBlF,IAEzB6G,EAAgB1G,MAIS,qBAAlB0G,IACTD,EAAW3J,EAAS4J,EAAgB,EAAIA,EAAgB,EAAIA,IAIhE,IAAIC,EAAY,EAYhB,GAVwB,qBAAbF,IACTE,EAAY5J,EAAWnyB,QAAQ67B,GAC3BE,EAAY,IAAGA,EAAYjP,EAAOuJ,YAAc,GAEvB,SAAzBlJ,EAAOwG,eAAsD,IAA1BxG,EAAOmH,gBAAwBnH,EAAOgO,qBAC3EY,EAAYA,EAAYjP,EAAOsO,qBAAqB,YAAY,GAAQ,EACxEW,EAAYrvC,KAAKQ,IAAI6uC,EAAW,KAIhC5O,EAAOsO,QAAU3O,EAAO0K,YAAa,CACvC,MAAMxZ,EAAY8O,EAAOK,OAAOyE,SAAW9E,EAAOK,OAAOyE,QAAQC,SAAW/E,EAAO8E,QAAU9E,EAAO8E,QAAQG,OAAO9oC,OAAS,EAAI6jC,EAAOiF,OAAO9oC,OAAS,EACvJ,OAAO6jC,EAAO8M,QAAQ5b,EAAWoP,EAAOqM,EAAcI,GAGxD,OAAO/M,EAAO8M,QAAQmC,EAAW3O,EAAOqM,EAAcI,IJ1DtDmC,WKXa,SAAoB5O,EAAOqM,EAAcI,GAUtD,YATc,IAAVzM,IACFA,EAAQhkC,KAAK+jC,OAAOC,YAGD,IAAjBqM,IACFA,GAAe,GAGFrwC,KACDwwC,QADCxwC,KACcitC,YAAajJ,EAAOqM,EAAcI,ILE/DoC,eMZa,SAAwB7O,EAAOqM,EAAcI,EAAUqC,QACtD,IAAV9O,IACFA,EAAQhkC,KAAK+jC,OAAOC,YAGD,IAAjBqM,IACFA,GAAe,QAGC,IAAdyC,IACFA,EAAY,IAGd,MAAMpP,EAAS1jC,KACf,IAAI4G,EAAQ88B,EAAOuJ,YACnB,MAAM2C,EAAOtsC,KAAKO,IAAI6/B,EAAOK,OAAOoH,mBAAoBvkC,GAClDolC,EAAY4D,EAAOtsC,KAAK+M,OAAOzJ,EAAQgpC,GAAQlM,EAAOK,OAAOmH,gBAC7DpH,EAAYJ,EAAO0E,aAAe1E,EAAOI,WAAaJ,EAAOI,UAEnE,GAAIA,GAAaJ,EAAOoF,SAASkD,GAAY,CAG3C,MAAM+G,EAAcrP,EAAOoF,SAASkD,GAGhClI,EAAYiP,GAFCrP,EAAOoF,SAASkD,EAAY,GAEH+G,GAAeD,IACvDlsC,GAAS88B,EAAOK,OAAOmH,oBAEpB,CAGL,MAAMuH,EAAW/O,EAAOoF,SAASkD,EAAY,GAGzClI,EAAY2O,IAFI/O,EAAOoF,SAASkD,GAEOyG,GAAYK,IACrDlsC,GAAS88B,EAAOK,OAAOmH,gBAM3B,OAFAtkC,EAAQtD,KAAKQ,IAAI8C,EAAO,GACxBA,EAAQtD,KAAKO,IAAI+C,EAAO88B,EAAOqF,WAAWlpC,OAAS,GAC5C6jC,EAAO8M,QAAQ5pC,EAAOo9B,EAAOqM,EAAcI,IN5BlDN,oBOZa,WACb,MAAMzM,EAAS1jC,MACT,OACJ+jC,EAAM,WACNmE,GACExE,EACE6G,EAAyC,SAAzBxG,EAAOwG,cAA2B7G,EAAOsO,uBAAyBjO,EAAOwG,cAC/F,IACImE,EADAsE,EAAetP,EAAOwM,aAG1B,GAAInM,EAAO/hC,KAAM,CACf,GAAI0hC,EAAOkN,UAAW,OACtBlC,EAAYztC,SAAS,EAAEyiC,EAAOuM,cAAclS,KAAK,2BAA4B,IAEzEgG,EAAOgG,eACLiJ,EAAetP,EAAOkO,aAAerH,EAAgB,GAAKyI,EAAetP,EAAOiF,OAAO9oC,OAAS6jC,EAAOkO,aAAerH,EAAgB,GACxI7G,EAAOyO,UACPa,EAAe9K,EAAWnd,SAAS,IAAIgZ,EAAO6E,uCAAuC8F,YAAoB3K,EAAOmL,wBAAwBxO,GAAG,GAAG95B,QAC9I+6B,GAAS,KACP+B,EAAO8M,QAAQwC,OAGjBtP,EAAO8M,QAAQwC,GAERA,EAAetP,EAAOiF,OAAO9oC,OAAS0qC,GAC/C7G,EAAOyO,UACPa,EAAe9K,EAAWnd,SAAS,IAAIgZ,EAAO6E,uCAAuC8F,YAAoB3K,EAAOmL,wBAAwBxO,GAAG,GAAG95B,QAC9I+6B,GAAS,KACP+B,EAAO8M,QAAQwC,OAGjBtP,EAAO8M,QAAQwC,QAGjBtP,EAAO8M,QAAQwC,KCjBJ,SAAS,EAAaxgC,GACnC,MAAMkxB,EAAS1jC,KACTO,EAAW86B,IACXz8B,EAASs9B,IACTp0B,EAAO47B,EAAOuP,iBACd,OACJlP,EAAM,QACNrsB,EAAO,QACP+wB,GACE/E,EACJ,IAAK+E,EAAS,OAEd,GAAI/E,EAAOkN,WAAa7M,EAAO8M,+BAC7B,QAGGnN,EAAOkN,WAAa7M,EAAOiG,SAAWjG,EAAO/hC,MAChD0hC,EAAOyO,UAGT,IAAI/wC,EAAIoR,EACJpR,EAAEwR,gBAAexR,EAAIA,EAAEwR,eAC3B,IAAIsgC,EAAY,EAAE9xC,EAAEd,QAEpB,GAAiC,YAA7ByjC,EAAOoP,oBACJD,EAAUzgC,QAAQixB,EAAOO,WAAWpkC,OAAQ,OAInD,GADAiI,EAAKsrC,aAA0B,eAAXhyC,EAAEgE,MACjB0C,EAAKsrC,cAAgB,UAAWhyC,GAAiB,IAAZA,EAAE+Z,MAAa,OACzD,IAAKrT,EAAKsrC,cAAgB,WAAYhyC,GAAKA,EAAEkU,OAAS,EAAG,OACzD,GAAIxN,EAAKurC,WAAavrC,EAAKwrC,QAAS,SAELvP,EAAOwP,gBAA4C,KAA1BxP,EAAOwP,gBAEnCnyC,EAAEd,QAAUc,EAAEd,OAAOkzC,YAAchhC,EAAMihC,MAAQjhC,EAAMihC,KAAK,KACtFP,EAAY,EAAE1gC,EAAMihC,KAAK,KAG3B,MAAMC,EAAoB3P,EAAO2P,kBAAoB3P,EAAO2P,kBAAoB,IAAI3P,EAAOwP,iBACrFI,KAAoBvyC,EAAEd,SAAUc,EAAEd,OAAOkzC,YAE/C,GAAIzP,EAAO6P,YAAcD,EAzD3B,SAAwBroB,EAAUuoB,GAYhC,YAXa,IAATA,IACFA,EAAO7zC,MAGT,SAAS8zC,EAAcjxC,GACrB,OAAKA,GAAMA,IAAOw4B,KAAiBx4B,IAAOq5B,KACtCr5B,EAAGkxC,eAAclxC,EAAKA,EAAGkxC,cACflxC,EAAG4P,QAAQ6Y,IACTwoB,EAAcjxC,EAAGmxC,cAAcjZ,OAHe,KAMzD+Y,CAAcD,GA6CqBI,CAAeP,EAAmBtyC,EAAEd,QAAU4yC,EAAUzgC,QAAQihC,GAAmB,IAE3H,YADAhQ,EAAOwQ,YAAa,GAItB,GAAInQ,EAAOoQ,eACJjB,EAAUzgC,QAAQsxB,EAAOoQ,cAAc,GAAI,OAGlDz8B,EAAQ08B,SAAsB,eAAXhzC,EAAEgE,KAAwBhE,EAAEizC,cAAc,GAAGx8B,MAAQzW,EAAEyW,MAC1EH,EAAQ48B,SAAsB,eAAXlzC,EAAEgE,KAAwBhE,EAAEizC,cAAc,GAAGt8B,MAAQ3W,EAAE2W,MAC1E,MAAMw8B,EAAS78B,EAAQ08B,SACjBI,EAAS98B,EAAQ48B,SAEjBG,EAAqB1Q,EAAO0Q,oBAAsB1Q,EAAO2Q,sBACzDC,EAAqB5Q,EAAO4Q,oBAAsB5Q,EAAO6Q,sBAE/D,GAAIH,IAAuBF,GAAUI,GAAsBJ,GAAU31C,EAAOi2C,WAAaF,GAAqB,CAC5G,GAA2B,YAAvBF,EAGF,OAFAjiC,EAAMnR,iBAqBV,GAfArE,OAAO4lB,OAAO9a,EAAM,CAClBurC,WAAW,EACXC,SAAS,EACTwB,qBAAqB,EACrBC,iBAAaj1C,EACbk1C,iBAAal1C,IAEf4X,EAAQ68B,OAASA,EACjB78B,EAAQ88B,OAASA,EACjB1sC,EAAKmtC,eAAiB5iC,IACtBqxB,EAAOwQ,YAAa,EACpBxQ,EAAO5W,aACP4W,EAAOwR,oBAAiBp1C,EACpBikC,EAAO+O,UAAY,IAAGhrC,EAAKqtC,oBAAqB,GAErC,eAAX/zC,EAAEgE,KAAuB,CAC3B,IAAI/D,GAAiB,EAEjB6xC,EAAUzU,GAAG32B,EAAKstC,qBACpB/zC,GAAiB,EAEa,WAA1B6xC,EAAU,GAAGxgB,WACf5qB,EAAKurC,WAAY,IAIjB9yC,EAASwa,eAAiB,EAAExa,EAASwa,eAAe0jB,GAAG32B,EAAKstC,oBAAsB70C,EAASwa,gBAAkBm4B,EAAU,IACzH3yC,EAASwa,cAAcwf,OAGzB,MAAM8a,EAAuBh0C,GAAkBqiC,EAAO4R,gBAAkBvR,EAAOwR,0BAE1ExR,EAAOyR,gCAAiCH,GAA0BnC,EAAU,GAAGuC,mBAClFr0C,EAAEC,iBAIFqiC,EAAOK,OAAO2R,UAAYhS,EAAOK,OAAO2R,SAASjN,SAAW/E,EAAOgS,UAAYhS,EAAOkN,YAAc7M,EAAOiG,SAC7GtG,EAAOgS,SAASC,eAGlBjS,EAAO6D,KAAK,aAAcnmC,GC5Hb,SAAS,EAAYoR,GAClC,MAAMjS,EAAW86B,IACXqI,EAAS1jC,KACT8H,EAAO47B,EAAOuP,iBACd,OACJlP,EAAM,QACNrsB,EACA0wB,aAAcC,EAAG,QACjBI,GACE/E,EACJ,IAAK+E,EAAS,OACd,IAAIrnC,EAAIoR,EAGR,GAFIpR,EAAEwR,gBAAexR,EAAIA,EAAEwR,gBAEtB9K,EAAKurC,UAKR,YAJIvrC,EAAKktC,aAAeltC,EAAKitC,aAC3BrR,EAAO6D,KAAK,oBAAqBnmC,IAMrC,GAAI0G,EAAKsrC,cAA2B,cAAXhyC,EAAEgE,KAAsB,OACjD,MAAMwwC,EAAyB,cAAXx0C,EAAEgE,MAAwBhE,EAAEizC,gBAAkBjzC,EAAEizC,cAAc,IAAMjzC,EAAEy0C,eAAe,IACnGh+B,EAAmB,cAAXzW,EAAEgE,KAAuBwwC,EAAY/9B,MAAQzW,EAAEyW,MACvDE,EAAmB,cAAX3W,EAAEgE,KAAuBwwC,EAAY79B,MAAQ3W,EAAE2W,MAE7D,GAAI3W,EAAE00C,wBAGJ,OAFAp+B,EAAQ68B,OAAS18B,OACjBH,EAAQ88B,OAASz8B,GAInB,IAAK2rB,EAAO4R,eAeV,OAdK,EAAEl0C,EAAEd,QAAQm+B,GAAG32B,EAAKstC,qBACvB1R,EAAOwQ,YAAa,QAGlBpsC,EAAKurC,YACPr2C,OAAO4lB,OAAOlL,EAAS,CACrB68B,OAAQ18B,EACR28B,OAAQz8B,EACRq8B,SAAUv8B,EACVy8B,SAAUv8B,IAEZjQ,EAAKmtC,eAAiB5iC,MAM1B,GAAIvK,EAAKsrC,cAAgBrP,EAAOgS,sBAAwBhS,EAAO/hC,KAC7D,GAAI0hC,EAAOmE,cAET,GAAI9vB,EAAQL,EAAQ88B,QAAU9Q,EAAOI,WAAaJ,EAAOyK,gBAAkBp2B,EAAQL,EAAQ88B,QAAU9Q,EAAOI,WAAaJ,EAAOiK,eAG9H,OAFA7lC,EAAKurC,WAAY,OACjBvrC,EAAKwrC,SAAU,QAGZ,GAAIz7B,EAAQH,EAAQ68B,QAAU7Q,EAAOI,WAAaJ,EAAOyK,gBAAkBt2B,EAAQH,EAAQ68B,QAAU7Q,EAAOI,WAAaJ,EAAOiK,eACrI,OAIJ,GAAI7lC,EAAKsrC,cAAgB7yC,EAASwa,eAC5B3Z,EAAEd,SAAWC,EAASwa,eAAiB,EAAE3Z,EAAEd,QAAQm+B,GAAG32B,EAAKstC,mBAG7D,OAFAttC,EAAKwrC,SAAU,OACf5P,EAAOwQ,YAAa,GASxB,GAJIpsC,EAAKgtC,qBACPpR,EAAO6D,KAAK,YAAanmC,GAGvBA,EAAEizC,eAAiBjzC,EAAEizC,cAAcx0C,OAAS,EAAG,OACnD6X,EAAQ08B,SAAWv8B,EACnBH,EAAQ48B,SAAWv8B,EACnB,MAAMi+B,EAAQt+B,EAAQ08B,SAAW18B,EAAQ68B,OACnC0B,EAAQv+B,EAAQ48B,SAAW58B,EAAQ88B,OACzC,GAAI9Q,EAAOK,OAAO+O,WAAaxvC,KAAKI,KAAKsyC,GAAS,EAAIC,GAAS,GAAKvS,EAAOK,OAAO+O,UAAW,OAE7F,GAAgC,qBAArBhrC,EAAKitC,YAA6B,CAC3C,IAAImB,EAEAxS,EAAOkE,gBAAkBlwB,EAAQ48B,WAAa58B,EAAQ88B,QAAU9Q,EAAOmE,cAAgBnwB,EAAQ08B,WAAa18B,EAAQ68B,OACtHzsC,EAAKitC,aAAc,EAGfiB,EAAQA,EAAQC,EAAQA,GAAS,KACnCC,EAA4D,IAA/C5yC,KAAK6yC,MAAM7yC,KAAKG,IAAIwyC,GAAQ3yC,KAAKG,IAAIuyC,IAAgB1yC,KAAKohC,GACvE58B,EAAKitC,YAAcrR,EAAOkE,eAAiBsO,EAAanS,EAAOmS,WAAa,GAAKA,EAAanS,EAAOmS,YAe3G,GAVIpuC,EAAKitC,aACPrR,EAAO6D,KAAK,oBAAqBnmC,GAGH,qBAArB0G,EAAKktC,cACVt9B,EAAQ08B,WAAa18B,EAAQ68B,QAAU78B,EAAQ48B,WAAa58B,EAAQ88B,SACtE1sC,EAAKktC,aAAc,IAInBltC,EAAKitC,YAEP,YADAjtC,EAAKurC,WAAY,GAInB,IAAKvrC,EAAKktC,YACR,OAGFtR,EAAOwQ,YAAa,GAEfnQ,EAAOiG,SAAW5oC,EAAEg+B,YACvBh+B,EAAEC,iBAGA0iC,EAAOqS,2BAA6BrS,EAAOsS,QAC7Cj1C,EAAE6W,kBAGCnQ,EAAKwrC,UACJvP,EAAO/hC,OAAS+hC,EAAOiG,SACzBtG,EAAOyO,UAGTrqC,EAAKwuC,eAAiB5S,EAAO7B,eAC7B6B,EAAOoJ,cAAc,GAEjBpJ,EAAOkN,WACTlN,EAAOwE,WAAW1K,QAAQ,qCAG5B11B,EAAKyuC,qBAAsB,GAEvBxS,EAAOyS,aAAyC,IAA1B9S,EAAOwN,iBAAqD,IAA1BxN,EAAOyN,gBACjEzN,EAAO+S,eAAc,GAGvB/S,EAAO6D,KAAK,kBAAmBnmC,IAGjCsiC,EAAO6D,KAAK,aAAcnmC,GAC1B0G,EAAKwrC,SAAU,EACf,IAAI37B,EAAO+rB,EAAOkE,eAAiBoO,EAAQC,EAC3Cv+B,EAAQC,KAAOA,EACfA,GAAQosB,EAAO2S,WACXrO,IAAK1wB,GAAQA,GACjB+rB,EAAOwR,eAAiBv9B,EAAO,EAAI,OAAS,OAC5C7P,EAAK6uC,iBAAmBh/B,EAAO7P,EAAKwuC,eACpC,IAAIM,GAAsB,EACtBC,EAAkB9S,EAAO8S,gBAgC7B,GA9BI9S,EAAOgS,sBACTc,EAAkB,GAGhBl/B,EAAO,GAAK7P,EAAK6uC,iBAAmBjT,EAAOiK,gBAC7CiJ,GAAsB,EAClB7S,EAAO+S,aAAYhvC,EAAK6uC,iBAAmBjT,EAAOiK,eAAiB,IAAMjK,EAAOiK,eAAiB7lC,EAAKwuC,eAAiB3+B,IAASk/B,IAC3Hl/B,EAAO,GAAK7P,EAAK6uC,iBAAmBjT,EAAOyK,iBACpDyI,GAAsB,EAClB7S,EAAO+S,aAAYhvC,EAAK6uC,iBAAmBjT,EAAOyK,eAAiB,GAAKzK,EAAOyK,eAAiBrmC,EAAKwuC,eAAiB3+B,IAASk/B,IAGjID,IACFx1C,EAAE00C,yBAA0B,IAIzBpS,EAAOwN,gBAA4C,SAA1BxN,EAAOwR,gBAA6BptC,EAAK6uC,iBAAmB7uC,EAAKwuC,iBAC7FxuC,EAAK6uC,iBAAmB7uC,EAAKwuC,iBAG1B5S,EAAOyN,gBAA4C,SAA1BzN,EAAOwR,gBAA6BptC,EAAK6uC,iBAAmB7uC,EAAKwuC,iBAC7FxuC,EAAK6uC,iBAAmB7uC,EAAKwuC,gBAG1B5S,EAAOyN,gBAAmBzN,EAAOwN,iBACpCppC,EAAK6uC,iBAAmB7uC,EAAKwuC,gBAI3BvS,EAAO+O,UAAY,EAAG,CACxB,KAAIxvC,KAAKG,IAAIkU,GAAQosB,EAAO+O,WAAahrC,EAAKqtC,oBAW5C,YADArtC,EAAK6uC,iBAAmB7uC,EAAKwuC,gBAT7B,IAAKxuC,EAAKqtC,mBAMR,OALArtC,EAAKqtC,oBAAqB,EAC1Bz9B,EAAQ68B,OAAS78B,EAAQ08B,SACzB18B,EAAQ88B,OAAS98B,EAAQ48B,SACzBxsC,EAAK6uC,iBAAmB7uC,EAAKwuC,oBAC7B5+B,EAAQC,KAAO+rB,EAAOkE,eAAiBlwB,EAAQ08B,SAAW18B,EAAQ68B,OAAS78B,EAAQ48B,SAAW58B,EAAQ88B,QASvGzQ,EAAOgT,eAAgBhT,EAAOiG,WAE/BjG,EAAO2R,UAAY3R,EAAO2R,SAASjN,SAAW/E,EAAOgS,UAAY3R,EAAOsI,uBAC1E3I,EAAO4L,oBACP5L,EAAO+K,uBAGL/K,EAAOK,OAAO2R,UAAY3R,EAAO2R,SAASjN,SAAW/E,EAAOgS,UAC9DhS,EAAOgS,SAASsB,cAIlBtT,EAAOsK,eAAelmC,EAAK6uC,kBAE3BjT,EAAO0N,aAAatpC,EAAK6uC,mBC5NZ,SAAS,EAAWnkC,GACjC,MAAMkxB,EAAS1jC,KACT8H,EAAO47B,EAAOuP,iBACd,OACJlP,EAAM,QACNrsB,EACA0wB,aAAcC,EAAG,WACjBU,EAAU,QACVN,GACE/E,EACJ,IAAK+E,EAAS,OACd,IAAIrnC,EAAIoR,EASR,GARIpR,EAAEwR,gBAAexR,EAAIA,EAAEwR,eAEvB9K,EAAKgtC,qBACPpR,EAAO6D,KAAK,WAAYnmC,GAG1B0G,EAAKgtC,qBAAsB,GAEtBhtC,EAAKurC,UAOR,OANIvrC,EAAKwrC,SAAWvP,EAAOyS,YACzB9S,EAAO+S,eAAc,GAGvB3uC,EAAKwrC,SAAU,OACfxrC,EAAKktC,aAAc,GAKjBjR,EAAOyS,YAAc1uC,EAAKwrC,SAAWxrC,EAAKurC,aAAwC,IAA1B3P,EAAOwN,iBAAqD,IAA1BxN,EAAOyN,iBACnGzN,EAAO+S,eAAc,GAIvB,MAAMQ,EAAe5kC,IACf6kC,EAAWD,EAAenvC,EAAKmtC,eAErC,GAAIvR,EAAOwQ,WAAY,CACrB,MAAMiD,EAAW/1C,EAAEqyC,MAAQryC,EAAEg2C,cAAgBh2C,EAAEg2C,eAC/C1T,EAAOqM,mBAAmBoH,GAAYA,EAAS,IAAM/1C,EAAEd,QACvDojC,EAAO6D,KAAK,YAAanmC,GAErB81C,EAAW,KAAOD,EAAenvC,EAAKuvC,cAAgB,KACxD3T,EAAO6D,KAAK,wBAAyBnmC,GASzC,GALA0G,EAAKuvC,cAAgBhlC,IACrBsvB,GAAS,KACF+B,EAAOkD,YAAWlD,EAAOwQ,YAAa,OAGxCpsC,EAAKurC,YAAcvrC,EAAKwrC,UAAY5P,EAAOwR,gBAAmC,IAAjBx9B,EAAQC,MAAc7P,EAAK6uC,mBAAqB7uC,EAAKwuC,eAIrH,OAHAxuC,EAAKurC,WAAY,EACjBvrC,EAAKwrC,SAAU,OACfxrC,EAAKktC,aAAc,GAOrB,IAAIsC,EAQJ,GAXAxvC,EAAKurC,WAAY,EACjBvrC,EAAKwrC,SAAU,EACfxrC,EAAKktC,aAAc,EAIjBsC,EADEvT,EAAOgT,aACI1O,EAAM3E,EAAOI,WAAaJ,EAAOI,WAEhCh8B,EAAK6uC,iBAGjB5S,EAAOiG,QACT,OAGF,GAAItG,EAAOK,OAAO2R,UAAY3R,EAAO2R,SAASjN,QAI5C,YAHA/E,EAAOgS,SAAS6B,WAAW,CACzBD,eAMJ,IAAIE,EAAY,EACZC,EAAY/T,EAAOsF,gBAAgB,GAEvC,IAAK,IAAI1sC,EAAI,EAAGA,EAAIysC,EAAWlpC,OAAQvD,GAAKA,EAAIynC,EAAOoH,mBAAqB,EAAIpH,EAAOmH,eAAgB,CACrG,MAAM+G,EAAY31C,EAAIynC,EAAOoH,mBAAqB,EAAI,EAAIpH,EAAOmH,eAExB,qBAA9BnC,EAAWzsC,EAAI21C,GACpBqF,GAAcvO,EAAWzsC,IAAMg7C,EAAavO,EAAWzsC,EAAI21C,KAC7DuF,EAAYl7C,EACZm7C,EAAY1O,EAAWzsC,EAAI21C,GAAalJ,EAAWzsC,IAE5Cg7C,GAAcvO,EAAWzsC,KAClCk7C,EAAYl7C,EACZm7C,EAAY1O,EAAWA,EAAWlpC,OAAS,GAAKkpC,EAAWA,EAAWlpC,OAAS,IAInF,IAAI63C,EAAmB,KACnBC,EAAkB,KAElB5T,EAAOsO,SACL3O,EAAO0K,YACTuJ,EAAkBjU,EAAOK,OAAOyE,SAAW9E,EAAOK,OAAOyE,QAAQC,SAAW/E,EAAO8E,QAAU9E,EAAO8E,QAAQG,OAAO9oC,OAAS,EAAI6jC,EAAOiF,OAAO9oC,OAAS,EAC9I6jC,EAAO2K,QAChBqJ,EAAmB,IAKvB,MAAME,GAASN,EAAavO,EAAWyO,IAAcC,EAC/CxF,EAAYuF,EAAYzT,EAAOoH,mBAAqB,EAAI,EAAIpH,EAAOmH,eAEzE,GAAIgM,EAAWnT,EAAO8T,aAAc,CAElC,IAAK9T,EAAO+T,WAEV,YADApU,EAAO8M,QAAQ9M,EAAOuJ,aAIM,SAA1BvJ,EAAOwR,iBACL0C,GAAS7T,EAAOgU,gBAAiBrU,EAAO8M,QAAQzM,EAAOsO,QAAU3O,EAAO2K,MAAQqJ,EAAmBF,EAAYvF,GAAgBvO,EAAO8M,QAAQgH,IAGtH,SAA1B9T,EAAOwR,iBACL0C,EAAQ,EAAI7T,EAAOgU,gBACrBrU,EAAO8M,QAAQgH,EAAYvF,GACE,OAApB0F,GAA4BC,EAAQ,GAAKt0C,KAAKG,IAAIm0C,GAAS7T,EAAOgU,gBAC3ErU,EAAO8M,QAAQmH,GAEfjU,EAAO8M,QAAQgH,QAGd,CAEL,IAAKzT,EAAOiU,YAEV,YADAtU,EAAO8M,QAAQ9M,EAAOuJ,aAIEvJ,EAAOuU,aAAe72C,EAAEd,SAAWojC,EAAOuU,WAAWC,QAAU92C,EAAEd,SAAWojC,EAAOuU,WAAWE,QAU7G/2C,EAAEd,SAAWojC,EAAOuU,WAAWC,OACxCxU,EAAO8M,QAAQgH,EAAYvF,GAE3BvO,EAAO8M,QAAQgH,IAVe,SAA1B9T,EAAOwR,gBACTxR,EAAO8M,QAA6B,OAArBkH,EAA4BA,EAAmBF,EAAYvF,GAG9C,SAA1BvO,EAAOwR,gBACTxR,EAAO8M,QAA4B,OAApBmH,EAA2BA,EAAkBH,KCxJrD,SAASY,IACtB,MAAM1U,EAAS1jC,MACT,OACJ+jC,EAAM,GACNlhC,GACE6gC,EACJ,GAAI7gC,GAAyB,IAAnBA,EAAG+8B,YAAmB,OAE5BmE,EAAOyG,aACT9G,EAAO2U,gBAIT,MAAM,eACJnH,EAAc,eACdC,EAAc,SACdrI,GACEpF,EAEJA,EAAOwN,gBAAiB,EACxBxN,EAAOyN,gBAAiB,EACxBzN,EAAO5W,aACP4W,EAAOoE,eACPpE,EAAO+K,uBAEuB,SAAzB1K,EAAOwG,eAA4BxG,EAAOwG,cAAgB,IAAM7G,EAAO2K,QAAU3K,EAAO0K,cAAgB1K,EAAOK,OAAOgG,eACzHrG,EAAO8M,QAAQ9M,EAAOiF,OAAO9oC,OAAS,EAAG,GAAG,GAAO,GAEnD6jC,EAAO8M,QAAQ9M,EAAOuJ,YAAa,GAAG,GAAO,GAG3CvJ,EAAO4U,UAAY5U,EAAO4U,SAASC,SAAW7U,EAAO4U,SAASE,QAChE9U,EAAO4U,SAAS9lB,MAIlBkR,EAAOyN,eAAiBA,EACxBzN,EAAOwN,eAAiBA,EAEpBxN,EAAOK,OAAOoI,eAAiBrD,IAAapF,EAAOoF,UACrDpF,EAAO0I,gBCxCI,SAAS,EAAQhrC,GAC9B,MAAMsiC,EAAS1jC,KACV0jC,EAAO+E,UAEP/E,EAAOwQ,aACNxQ,EAAOK,OAAO0U,eAAer3C,EAAEC,iBAE/BqiC,EAAOK,OAAO2U,0BAA4BhV,EAAOkN,YACnDxvC,EAAE6W,kBACF7W,EAAEu3C,8BCTO,SAASC,IACtB,MAAMlV,EAAS1jC,MACT,UACJikC,EAAS,aACTmE,EAAY,QACZK,GACE/E,EACJ,IAAK+E,EAAS,OAad,IAAIoQ,EAZJnV,EAAOoV,kBAAoBpV,EAAOI,UAE9BJ,EAAOkE,eACTlE,EAAOI,WAAaG,EAAU7D,WAE9BsD,EAAOI,WAAaG,EAAUxkC,UAIP,IAArBikC,EAAOI,YAAiBJ,EAAOI,UAAY,GAC/CJ,EAAO4L,oBACP5L,EAAO+K,sBAEP,MAAMP,EAAiBxK,EAAOyK,eAAiBzK,EAAOiK,eAGpDkL,EADqB,IAAnB3K,EACY,GAECxK,EAAOI,UAAYJ,EAAOiK,gBAAkBO,EAGzD2K,IAAgBnV,EAAOc,UACzBd,EAAOsK,eAAe5F,GAAgB1E,EAAOI,UAAYJ,EAAOI,WAGlEJ,EAAO6D,KAAK,eAAgB7D,EAAOI,WAAW,GC1BhD,IAAIiV,GAAqB,EAEzB,SAASC,KAET,MAAM,EAAS,CAACtV,EAAQmD,KACtB,MAAMtmC,EAAW86B,KACX,OACJ0I,EAAM,YACNkV,EAAW,GACXp2C,EAAE,UACFohC,EAAS,OACT0B,EAAM,QACNH,GACE9B,EACErF,IAAY0F,EAAOsS,OACnB6C,EAAuB,OAAXrS,EAAkB,mBAAqB,sBACnDsS,EAAetS,EAErB,GAAKrB,EAAQR,MAIN,CACL,MAAME,IAAwC,eAAtB+T,EAAYjrC,QAA0Bw3B,EAAQN,kBAAmBnB,EAAOqV,mBAAmB,CACjH/zC,SAAS,EACTg5B,SAAS,GAEXx7B,EAAGq2C,GAAWD,EAAYjrC,MAAO01B,EAAOiS,aAAczQ,GACtDriC,EAAGq2C,GAAWD,EAAY33C,KAAMoiC,EAAOsT,YAAaxR,EAAQN,gBAAkB,CAC5E7/B,SAAS,EACTg5B,WACEA,GACJx7B,EAAGq2C,GAAWD,EAAYrqC,IAAK80B,EAAO6T,WAAYrS,GAE9C+T,EAAYlkC,QACdlS,EAAGq2C,GAAWD,EAAYlkC,OAAQ2uB,EAAO6T,WAAYrS,QAhBvDriC,EAAGq2C,GAAWD,EAAYjrC,MAAO01B,EAAOiS,cAAc,GACtDp1C,EAAS24C,GAAWD,EAAY33C,KAAMoiC,EAAOsT,YAAa3Y,GAC1D99B,EAAS24C,GAAWD,EAAYrqC,IAAK80B,EAAO6T,YAAY,IAmBtDxT,EAAO0U,eAAiB1U,EAAO2U,2BACjC71C,EAAGq2C,GAAW,QAASxV,EAAO7jB,SAAS,GAGrCkkB,EAAOiG,SACT/F,EAAUiV,GAAW,SAAUxV,EAAOkV,UAIpC7U,EAAOsV,qBACT3V,EAAOyV,GAAcxT,EAAOC,KAAOD,EAAOE,QAAU,0CAA4C,wBAAyBuS,GAAU,GAEnI1U,EAAOyV,GAAc,iBAAkBf,GAAU,ICzDrD,MAAMkB,EAAgB,CAAC5V,EAAQK,IACtBL,EAAOwG,MAAQnG,EAAOmG,MAAQnG,EAAOmG,KAAKC,KAAO,ECgC3C,ICnCA,GACbxoB,MAAM,EACN2uB,UAAW,aACX6C,kBAAmB,UACnBrC,aAAc,EACd9M,MAAO,IACPgG,SAAS,EACTqP,sBAAsB,EACtBE,gBAAgB,EAChBlD,QAAQ,EACRmD,gBAAgB,EAChB/Q,SAAS,EACT2M,kBAAmB,wDAEnBxwC,MAAO,KACPC,OAAQ,KAERgsC,gCAAgC,EAEhC/iB,UAAW,KACX2rB,IAAK,KAELhF,oBAAoB,EACpBE,mBAAoB,GAEpBnG,YAAY,EAEZnD,gBAAgB,EAEhBqO,kBAAkB,EAElBtO,OAAQ,QAGRZ,iBAAa1qC,EACb65C,gBAAiB,SAEjBpQ,aAAc,EACdgB,cAAe,EACfW,eAAgB,EAChBC,mBAAoB,EACpB4G,oBAAoB,EACpBhI,gBAAgB,EAChB0B,sBAAsB,EACtBvC,mBAAoB,EAEpBE,kBAAmB,EAEnBuG,qBAAqB,EACrB7D,0BAA0B,EAE1BK,eAAe,EAEftB,cAAc,EAEd6L,WAAY,EACZR,WAAY,GACZ0D,eAAe,EACf5B,aAAa,EACbF,YAAY,EACZC,gBAAiB,GACjBF,aAAc,IACdd,cAAc,EACdzB,gBAAgB,EAChBxC,UAAW,EACXsD,0BAA0B,EAC1Bb,0BAA0B,EAC1BC,+BAA+B,EAC/BO,qBAAqB,EAErB8D,mBAAmB,EAEnB/C,YAAY,EACZD,gBAAiB,IAEjBxK,qBAAqB,EAErBmK,YAAY,EAEZiC,eAAe,EACfC,0BAA0B,EAC1BvI,qBAAqB,EAErB2J,eAAe,EACfC,qBAAqB,EAErB/3C,MAAM,EACNg4C,qBAAsB,EACtBpI,aAAc,KACdqI,wBAAwB,EACxB/H,mBAAmB,EAEnBG,QAAQ,EAERlB,gBAAgB,EAChBD,gBAAgB,EAChBiD,aAAc,KAEdP,WAAW,EACXL,eAAgB,oBAChBG,kBAAmB,KAEnB0F,kBAAkB,EAClB1M,wBAAyB,GAEzBF,uBAAwB,UAExB5D,WAAY,eACZsR,gBAAiB,+BACjBtL,iBAAkB,sBAClBG,0BAA2B,gCAC3BxB,kBAAmB,uBACnB2B,oBAAqB,yBACrBL,eAAgB,oBAChBG,wBAAyB,8BACzBF,eAAgB,oBAChBG,wBAAyB,8BACzBkL,aAAc,iBAEdrK,oBAAoB,EAEpBsK,cAAc,GCxHD,SAASC,EAAmBtW,EAAQuW,GACjD,OAAO,SAAsB1qB,QACf,IAARA,IACFA,EAAM,IAGR,MAAM2qB,EAAkBv9C,OAAOoC,KAAKwwB,GAAK,GACnC4qB,EAAe5qB,EAAI2qB,GAEG,kBAAjBC,GAA8C,OAAjBA,GAKpC,CAAC,aAAc,aAAc,aAAa5jC,QAAQ2jC,IAAoB,IAAiC,IAA5BxW,EAAOwW,KACpFxW,EAAOwW,GAAmB,CACxBE,MAAM,IAIJF,KAAmBxW,GAAU,YAAayW,IAKhB,IAA5BzW,EAAOwW,KACTxW,EAAOwW,GAAmB,CACxB9R,SAAS,IAI0B,kBAA5B1E,EAAOwW,IAAmC,YAAaxW,EAAOwW,KACvExW,EAAOwW,GAAiB9R,SAAU,GAG/B1E,EAAOwW,KAAkBxW,EAAOwW,GAAmB,CACtD9R,SAAS,IAEX,EAAO6R,EAAkB1qB,IAjBvB,EAAO0qB,EAAkB1qB,IAXzB,EAAO0qB,EAAkB1qB,ICY/B,MAAM8qB,EAAa,CACjBC,cAAA,EACAlzC,OAAA,EACAq8B,UCrBa,CACbjC,aCLa,SAA4Bj6B,QAC5B,IAATA,IACFA,EAAO5H,KAAK4nC,eAAiB,IAAM,KAGrC,MACM,OACJ7D,EACAqE,aAAcC,EAAG,UACjBvE,EAAS,WACToE,GALaloC,KAQf,GAAI+jC,EAAO2V,iBACT,OAAOrR,GAAOvE,EAAYA,EAG5B,GAAIC,EAAOiG,QACT,OAAOlG,EAGT,IAAI6S,EAAmB9U,EAAaqG,EAAW,GAAItgC,GAEnD,OADIygC,IAAKsO,GAAoBA,GACtBA,GAAoB,GDjB3BvF,aEPa,SAAsBtN,EAAW8W,GAC9C,MAAMlX,EAAS1jC,MAEbooC,aAAcC,EAAG,OACjBtE,EAAM,WACNmE,EAAU,UACVjE,EAAS,SACTO,GACEd,EACJ,IAwBImV,EAxBA31C,EAAI,EACJC,EAAI,EAGJugC,EAAOkE,eACT1kC,EAAImlC,GAAOvE,EAAYA,EAEvB3gC,EAAI2gC,EAGFC,EAAO8G,eACT3nC,EAAII,KAAK+M,MAAMnN,GACfC,EAAIG,KAAK+M,MAAMlN,IAGb4gC,EAAOiG,QACT/F,EAAUP,EAAOkE,eAAiB,aAAe,aAAelE,EAAOkE,gBAAkB1kC,GAAKC,EACpF4gC,EAAO2V,kBACjBxR,EAAW9jC,UAAU,eAAelB,QAAQC,aAG9CugC,EAAOoV,kBAAoBpV,EAAOI,UAClCJ,EAAOI,UAAYJ,EAAOkE,eAAiB1kC,EAAIC,EAG/C,MAAM+qC,EAAiBxK,EAAOyK,eAAiBzK,EAAOiK,eAGpDkL,EADqB,IAAnB3K,EACY,GAECpK,EAAYJ,EAAOiK,gBAAkBO,EAGlD2K,IAAgBrU,GAClBd,EAAOsK,eAAelK,GAGxBJ,EAAO6D,KAAK,eAAgB7D,EAAOI,UAAW8W,IFtC9CjN,aGRa,WACb,OAAQ3tC,KAAK8oC,SAAS,IHQtBqF,aITa,WACb,OAAQnuC,KAAK8oC,SAAS9oC,KAAK8oC,SAASjpC,OAAS,IJS7Cg7C,YKTa,SAAqB/W,EAAWE,EAAOqM,EAAcyK,EAAiBrK,QACjE,IAAd3M,IACFA,EAAY,QAGA,IAAVE,IACFA,EAAQhkC,KAAK+jC,OAAOC,YAGD,IAAjBqM,IACFA,GAAe,QAGO,IAApByK,IACFA,GAAkB,GAGpB,MAAMpX,EAAS1jC,MACT,OACJ+jC,EAAM,UACNE,GACEP,EAEJ,GAAIA,EAAOkN,WAAa7M,EAAO8M,+BAC7B,OAAO,EAGT,MAAMlD,EAAejK,EAAOiK,eACtBQ,EAAezK,EAAOyK,eAC5B,IAAI4M,EAKJ,GAJiDA,EAA7CD,GAAmBhX,EAAY6J,EAA6BA,EAAsBmN,GAAmBhX,EAAYqK,EAA6BA,EAAiCrK,EAEnLJ,EAAOsK,eAAe+M,GAElBhX,EAAOiG,QAAS,CAClB,MAAMsH,EAAM5N,EAAOkE,eAEnB,GAAc,IAAV5D,EACFC,EAAUqN,EAAM,aAAe,cAAgByJ,MAC1C,CACL,IAAKrX,EAAO8B,QAAQT,aAMlB,OALAvB,EAAqB,CACnBE,SACAC,gBAAiBoX,EACjBnX,KAAM0N,EAAM,OAAS,SAEhB,EAGTrN,EAAUW,SAAS,CACjB,CAAC0M,EAAM,OAAS,QAASyJ,EACzBtJ,SAAU,WAId,OAAO,EA2CT,OAxCc,IAAVzN,GACFN,EAAOoJ,cAAc,GACrBpJ,EAAO0N,aAAa2J,GAEhB1K,IACF3M,EAAO6D,KAAK,wBAAyBvD,EAAOyM,GAC5C/M,EAAO6D,KAAK,oBAGd7D,EAAOoJ,cAAc9I,GACrBN,EAAO0N,aAAa2J,GAEhB1K,IACF3M,EAAO6D,KAAK,wBAAyBvD,EAAOyM,GAC5C/M,EAAO6D,KAAK,oBAGT7D,EAAOkN,YACVlN,EAAOkN,WAAY,EAEdlN,EAAOsX,oCACVtX,EAAOsX,kCAAoC,SAAuB55C,GAC3DsiC,IAAUA,EAAOkD,WAClBxlC,EAAEd,SAAWN,OACjB0jC,EAAOwE,WAAW,GAAG1mC,oBAAoB,gBAAiBkiC,EAAOsX,mCACjEtX,EAAOwE,WAAW,GAAG1mC,oBAAoB,sBAAuBkiC,EAAOsX,mCACvEtX,EAAOsX,kCAAoC,YACpCtX,EAAOsX,kCAEV3K,GACF3M,EAAO6D,KAAK,oBAKlB7D,EAAOwE,WAAW,GAAG3mC,iBAAiB,gBAAiBmiC,EAAOsX,mCAC9DtX,EAAOwE,WAAW,GAAG3mC,iBAAiB,sBAAuBmiC,EAAOsX,sCAIjE,INxEPx2C,WOxBa,CACbsoC,cCJa,SAAuBruC,EAAUm8C,GAC9C,MAAMlX,EAAS1jC,KAEV0jC,EAAOK,OAAOiG,SACjBtG,EAAOwE,WAAW1jC,WAAW/F,GAG/BilC,EAAO6D,KAAK,gBAAiB9oC,EAAUm8C,IDFvCvJ,gBEJa,SAAyBhB,EAAcC,QAC/B,IAAjBD,IACFA,GAAe,GAGjB,MAAM3M,EAAS1jC,MACT,OACJ+jC,GACEL,EACAK,EAAOiG,UAEPjG,EAAOyK,YACT9K,EAAOiJ,mBAGTyD,EAAe,CACb1M,SACA2M,eACAC,YACAC,KAAM,YFdRhR,cGLa,SAAuB8Q,EAAcC,QAC7B,IAAjBD,IACFA,GAAe,GAGjB,MAAM3M,EAAS1jC,MACT,OACJ+jC,GACEL,EACJA,EAAOkN,WAAY,EACf7M,EAAOiG,UACXtG,EAAOoJ,cAAc,GACrBsD,EAAe,CACb1M,SACA2M,eACAC,YACAC,KAAM,WVWRlpC,MAAA,EACArF,KW1Ba,CACbi5C,WCFa,WACb,MAAMvX,EAAS1jC,KACTO,EAAW86B,KACX,OACJ0I,EAAM,WACNmE,GACExE,EAEEwX,EAAYhT,EAAWnd,WAAWlrB,OAAS,EAAI,EAAEqoC,EAAWnd,WAAW,GAAG7H,YAAcglB,EAC9FgT,EAAUnwB,SAAS,IAAIgZ,EAAO6E,cAAc7E,EAAOmL,uBAAuB3pC,SAC1E,IAAIojC,EAASuS,EAAUnwB,SAAS,IAAIgZ,EAAO6E,cAE3C,GAAI7E,EAAOkW,uBAAwB,CACjC,MAAMkB,EAAiBpX,EAAOmH,eAAiBvC,EAAO9oC,OAASkkC,EAAOmH,eAEtE,GAAIiQ,IAAmBpX,EAAOmH,eAAgB,CAC5C,IAAK,IAAI5uC,EAAI,EAAGA,EAAI6+C,EAAgB7+C,GAAK,EAAG,CAC1C,MAAM8+C,EAAY,EAAE76C,EAASkC,cAAc,QAAQi7B,SAAS,GAAGqG,EAAO6E,cAAc7E,EAAOmW,mBAC3FgB,EAAU3wC,OAAO6wC,GAGnBzS,EAASuS,EAAUnwB,SAAS,IAAIgZ,EAAO6E,eAId,SAAzB7E,EAAOwG,eAA6BxG,EAAO6N,eAAc7N,EAAO6N,aAAejJ,EAAO9oC,QAC1F6jC,EAAOkO,aAAetuC,KAAKslB,KAAKiX,WAAWkE,EAAO6N,cAAgB7N,EAAOwG,cAAe,KACxF7G,EAAOkO,cAAgB7N,EAAOiW,qBAE1BtW,EAAOkO,aAAejJ,EAAO9oC,SAC/B6jC,EAAOkO,aAAejJ,EAAO9oC,QAG/B,MAAMw7C,EAAgB,GAChBC,EAAe,GACrB3S,EAAOrI,MAAK,CAACz9B,EAAI+D,KACf,MAAMS,EAAQ,EAAExE,GAEZ+D,EAAQ88B,EAAOkO,cACjB0J,EAAat1C,KAAKnD,GAGhB+D,EAAQ+hC,EAAO9oC,QAAU+G,GAAS+hC,EAAO9oC,OAAS6jC,EAAOkO,cAC3DyJ,EAAcr1C,KAAKnD,GAGrBwE,EAAM02B,KAAK,0BAA2Bn3B,MAGxC,IAAK,IAAItK,EAAI,EAAGA,EAAIg/C,EAAaz7C,OAAQvD,GAAK,EAC5C4+C,EAAU3wC,OAAO,EAAE+wC,EAAah/C,GAAGi/C,WAAU,IAAO7d,SAASqG,EAAOmL,sBAGtE,IAAK,IAAI5yC,EAAI++C,EAAcx7C,OAAS,EAAGvD,GAAK,EAAGA,GAAK,EAClD4+C,EAAUla,QAAQ,EAAEqa,EAAc/+C,GAAGi/C,WAAU,IAAO7d,SAASqG,EAAOmL,uBDnDxEiD,QELa,WACb,MAAMzO,EAAS1jC,KACf0jC,EAAO6D,KAAK,iBACZ,MAAM,YACJ0F,EAAW,OACXtE,EAAM,aACNiJ,EAAY,eACZT,EAAc,eACdD,EAAc,SACdpI,EACAV,aAAcC,GACZ3E,EACJ,IAAItqB,EACJsqB,EAAOyN,gBAAiB,EACxBzN,EAAOwN,gBAAiB,EACxB,MACMv5B,GADiBmxB,EAASmE,GACHvJ,EAAO7B,eAEpC,GAAIoL,EAAc2E,EAAc,CAC9Bx4B,EAAWuvB,EAAO9oC,OAAwB,EAAf+xC,EAAmB3E,EAC9C7zB,GAAYw4B,EACSlO,EAAO8M,QAAQp3B,EAAU,GAAG,GAAO,IAE3B,IAATzB,GAClB+rB,EAAO0N,cAAc/I,GAAO3E,EAAOI,UAAYJ,EAAOI,WAAansB,QAEhE,GAAIs1B,GAAetE,EAAO9oC,OAAS+xC,EAAc,CAEtDx4B,GAAYuvB,EAAO9oC,OAASotC,EAAc2E,EAC1Cx4B,GAAYw4B,EACSlO,EAAO8M,QAAQp3B,EAAU,GAAG,GAAO,IAE3B,IAATzB,GAClB+rB,EAAO0N,cAAc/I,GAAO3E,EAAOI,UAAYJ,EAAOI,WAAansB,GAIvE+rB,EAAOyN,eAAiBA,EACxBzN,EAAOwN,eAAiBA,EACxBxN,EAAO6D,KAAK,YFjCZiU,YGNa,WACb,MACM,WACJtT,EAAU,OACVnE,EAAM,OACN4E,GAJa3oC,KAMfkoC,EAAWnd,SAAS,IAAIgZ,EAAO6E,cAAc7E,EAAOmL,wBAAwBnL,EAAO6E,cAAc7E,EAAOmW,mBAAmB30C,SAC3HojC,EAAO1K,WAAW,6BdsBlBuY,We5Ba,CACbC,cCHa,SAAuBgF,GACpC,MAAM/X,EAAS1jC,KACf,GAAI0jC,EAAO8B,QAAQR,QAAUtB,EAAOK,OAAO6V,eAAiBlW,EAAOK,OAAOoI,eAAiBzI,EAAOgY,UAAYhY,EAAOK,OAAOiG,QAAS,OACrI,MAAMnnC,EAAyC,cAApC6gC,EAAOK,OAAOoP,kBAAoCzP,EAAO7gC,GAAK6gC,EAAOO,UAChFphC,EAAGsB,MAAMw3C,OAAS,OAClB94C,EAAGsB,MAAMw3C,OAASF,EAAS,WAAa,QDDxCG,gBEJa,WACb,MAAMlY,EAAS1jC,KAEX0jC,EAAO8B,QAAQR,OAAStB,EAAOK,OAAOoI,eAAiBzI,EAAOgY,UAAYhY,EAAOK,OAAOiG,UAI5FtG,EAA2C,cAApCA,EAAOK,OAAOoP,kBAAoC,KAAO,aAAahvC,MAAMw3C,OAAS,MjBwB5FrnC,OL8Da,CACbunC,aA/BF,WACE,MAAMnY,EAAS1jC,KACTO,EAAW86B,KACX,OACJ0I,EAAM,QACNyB,GACE9B,EACJA,EAAOiS,aAAe,EAAa73C,KAAK4lC,GACxCA,EAAOsT,YAAc,EAAYl5C,KAAK4lC,GACtCA,EAAO6T,WAAa,EAAWz5C,KAAK4lC,GAEhCK,EAAOiG,UACTtG,EAAOkV,SAAWA,EAAS96C,KAAK4lC,IAGlCA,EAAO7jB,QAAU,EAAQ/hB,KAAK4lC,GAE1B8B,EAAQR,QAAU+T,IACpBx4C,EAASgB,iBAAiB,aAAcy3C,GACxCD,GAAqB,GAGvB,EAAOrV,EAAQ,OAUfoY,aAPF,WAEE,EADe97C,KACA,SK1DfwqC,YkB9Ba,CACb6N,ctBGa,WACb,MAAM3U,EAAS1jC,MACT,YACJitC,EAAW,YACX4C,EAAW,aACX+B,EAAe,EAAC,OAChB7N,EAAM,IACN2D,GACEhE,EACE8G,EAAczG,EAAOyG,YAC3B,IAAKA,GAAeA,GAAmD,IAApCxtC,OAAOoC,KAAKorC,GAAa3qC,OAAc,OAE1E,MAAMk8C,EAAarY,EAAOsY,cAAcxR,EAAa9G,EAAOK,OAAO4V,gBAAiBjW,EAAO7gC,IAC3F,IAAKk5C,GAAcrY,EAAOuY,oBAAsBF,EAAY,OAC5D,MACMG,GADuBH,KAAcvR,EAAcA,EAAYuR,QAAcj8C,IAClC4jC,EAAOyY,eAClDC,EAAc9C,EAAc5V,EAAQK,GACpCsY,EAAa/C,EAAc5V,EAAQwY,GACnCI,EAAavY,EAAO0E,QAEtB2T,IAAgBC,GAClB3U,EAAI9J,YAAY,GAAGmG,EAAOyI,8BAA8BzI,EAAOyI,qCAC/D9I,EAAO6Y,yBACGH,GAAeC,IACzB3U,EAAIhK,SAAS,GAAGqG,EAAOyI,+BAEnB0P,EAAiBhS,KAAKzhC,MAAuC,WAA/ByzC,EAAiBhS,KAAKzhC,OAAsByzC,EAAiBhS,KAAKzhC,MAA6B,WAArBs7B,EAAOmG,KAAKzhC,OACtHi/B,EAAIhK,SAAS,GAAGqG,EAAOyI,qCAGzB9I,EAAO6Y,wBAGT,MAAMC,EAAmBN,EAAiB5L,WAAa4L,EAAiB5L,YAAcvM,EAAOuM,UACvFmM,EAAc1Y,EAAO/hC,OAASk6C,EAAiB3R,gBAAkBxG,EAAOwG,eAAiBiS,GAE3FA,GAAoB3M,GACtBnM,EAAOgZ,kBAGT,EAAOhZ,EAAOK,OAAQmY,GACtB,MAAMS,EAAYjZ,EAAOK,OAAO0E,QAChCzrC,OAAO4lB,OAAO8gB,EAAQ,CACpB4R,eAAgB5R,EAAOK,OAAOuR,eAC9BpE,eAAgBxN,EAAOK,OAAOmN,eAC9BC,eAAgBzN,EAAOK,OAAOoN,iBAG5BmL,IAAeK,EACjBjZ,EAAOkZ,WACGN,GAAcK,GACxBjZ,EAAOmZ,SAGTnZ,EAAOuY,kBAAoBF,EAC3BrY,EAAO6D,KAAK,oBAAqB2U,GAE7BO,GAAe5M,IACjBnM,EAAO8X,cACP9X,EAAOuX,aACPvX,EAAOoE,eACPpE,EAAO8M,QAAQvD,EAAc2E,EAAelO,EAAOkO,aAAc,GAAG,IAGtElO,EAAO6D,KAAK,aAAc2U,IsBlE1BF,cCHa,SAAuBxR,EAAaqJ,EAAMiJ,GAKvD,QAJa,IAATjJ,IACFA,EAAO,WAGJrJ,GAAwB,cAATqJ,IAAyBiJ,EAAa,OAC1D,IAAIf,GAAa,EACjB,MAAMn9C,EAASs9B,IACT6gB,EAAyB,WAATlJ,EAAoBj1C,EAAO4H,YAAcs2C,EAAYnV,aACrEqV,EAAShgD,OAAOoC,KAAKorC,GAAa/a,KAAItiB,IAC1C,GAAqB,kBAAVA,GAA6C,IAAvBA,EAAMyJ,QAAQ,KAAY,CACzD,MAAMqmC,EAAWpd,WAAW1yB,EAAM+vC,OAAO,IAEzC,MAAO,CACL3/C,MAFYw/C,EAAgBE,EAG5B9vC,SAIJ,MAAO,CACL5P,MAAO4P,EACPA,YAGJ6vC,EAAOl7B,MAAK,CAACC,EAAGhjB,IAAMkC,SAAS8gB,EAAExkB,MAAO,IAAM0D,SAASlC,EAAExB,MAAO,MAEhE,IAAK,IAAIjB,EAAI,EAAGA,EAAI0gD,EAAOn9C,OAAQvD,GAAK,EAAG,CACzC,MAAM,MACJ6Q,EAAK,MACL5P,GACEy/C,EAAO1gD,GAEE,WAATu3C,EACEj1C,EAAO+uB,WAAW,eAAepwB,QAAYqwB,UAC/CmuB,EAAa5uC,GAEN5P,GAASu/C,EAAYv2C,cAC9Bw1C,EAAa5uC,GAIjB,OAAO4uC,GAAc,QnBTrB3P,cHEa,CACbA,cApCF,WACE,MAAM1I,EAAS1jC,MAEb07C,SAAUyB,EAAS,OACnBpZ,GACEL,GACE,mBACJwF,GACEnF,EAEJ,GAAImF,EAAoB,CACtB,MAAMkU,EAAiB1Z,EAAOiF,OAAO9oC,OAAS,EACxCw9C,EAAqB3Z,EAAOqF,WAAWqU,GAAkB1Z,EAAOsF,gBAAgBoU,GAAuC,EAArBlU,EACxGxF,EAAOgY,SAAWhY,EAAOlkB,KAAO69B,OAEhC3Z,EAAOgY,SAAsC,IAA3BhY,EAAOoF,SAASjpC,QAGN,IAA1BkkC,EAAOmN,iBACTxN,EAAOwN,gBAAkBxN,EAAOgY,WAGJ,IAA1B3X,EAAOoN,iBACTzN,EAAOyN,gBAAkBzN,EAAOgY,UAG9ByB,GAAaA,IAAczZ,EAAOgY,WACpChY,EAAO2K,OAAQ,GAGb8O,IAAczZ,EAAOgY,UACvBhY,EAAO6D,KAAK7D,EAAOgY,SAAW,OAAS,YGGzCllB,QoBhCa,CACb8mB,WCaa,WACb,MAAM5Z,EAAS1jC,MACT,WACJ29B,EAAU,OACVoG,EAAM,IACNsE,EAAG,IACHX,EAAG,OACH/B,EAAM,QACNH,GACE9B,EAEE6Z,EA3BR,SAAwBC,EAASC,GAC/B,MAAMC,EAAgB,GAYtB,OAXAF,EAAQn+C,SAAQkqB,IACM,kBAATA,EACTvsB,OAAOoC,KAAKmqB,GAAMlqB,SAAQs+B,IACpBpU,EAAKoU,IACP+f,EAAc13C,KAAKy3C,EAAS9f,MAGP,kBAATpU,GAChBm0B,EAAc13C,KAAKy3C,EAASl0B,MAGzBm0B,EAcUC,CAAe,CAAC,cAAe5Z,EAAOuM,UAAW,CAChE,kBAAmB9K,EAAQR,OAC1B,CACD,YAAatB,EAAOK,OAAO2R,UAAY3R,EAAO2R,SAASjN,SACtD,CACD,WAAc1E,EAAOyK,YACpB,CACD,IAAOnG,GACN,CACD,KAAQtE,EAAOmG,MAAQnG,EAAOmG,KAAKC,KAAO,GACzC,CACD,cAAepG,EAAOmG,MAAQnG,EAAOmG,KAAKC,KAAO,GAA0B,WAArBpG,EAAOmG,KAAKzhC,MACjE,CACD,QAAWk9B,EAAOE,SACjB,CACD,IAAOF,EAAOC,KACb,CACD,WAAY7B,EAAOiG,SAClB,CACD,SAAYjG,EAAOiG,SAAWjG,EAAOgG,gBACpC,CACD,iBAAkBhG,EAAOsI,sBACvBtI,EAAOyI,wBACX7O,EAAW33B,QAAQu3C,GACnB7V,EAAIhK,SAAS,IAAIC,GAAYpe,KAAK,MAClCmkB,EAAO6Y,wBDhDPqB,cEJa,WACb,MACM,IACJlW,EAAG,WACH/J,GAHa39B,KAKf0nC,EAAI9J,YAAYD,EAAWpe,KAAK,MALjBvf,KAMRu8C,yBtB4BPsB,OuBjCa,CACb95B,UCDa,SAAmB+5B,EAAS76B,EAAKe,EAAQY,EAAOm5B,EAAkBl/C,GAC/E,MAAMD,EAASs9B,IACf,IAAIzX,EAEJ,SAASu5B,IACHn/C,GAAUA,IAGE,EAAEi/C,GAAS3yB,OAAO,WAAW,IAE3B2yB,EAAQ75B,UAAa85B,EAsBvCC,IArBI/6B,GACFwB,EAAQ,IAAI7lB,EAAOo9B,MACnBvX,EAAMN,OAAS65B,EACfv5B,EAAML,QAAU45B,EAEZp5B,IACFH,EAAMG,MAAQA,GAGZZ,IACFS,EAAMT,OAASA,GAGbf,IACFwB,EAAMxB,IAAMA,IAGd+6B,KD1BJlE,cEJa,WACb,MAAMpW,EAAS1jC,KAGf,SAASg+C,IACe,qBAAXta,GAAqC,OAAXA,GAAoBA,IAAUA,EAAOkD,iBAC9C9mC,IAAxB4jC,EAAOua,eAA4Bva,EAAOua,cAAgB,GAE1Dva,EAAOua,eAAiBva,EAAOwa,aAAar+C,SAC1C6jC,EAAOK,OAAOgW,qBAAqBrW,EAAOj8B,SAC9Ci8B,EAAO6D,KAAK,iBARhB7D,EAAOwa,aAAexa,EAAOgE,IAAIle,KAAK,OAYtC,IAAK,IAAIltB,EAAI,EAAGA,EAAIonC,EAAOwa,aAAar+C,OAAQvD,GAAK,EAAG,CACtD,MAAMwhD,EAAUpa,EAAOwa,aAAa5hD,GACpConC,EAAO3f,UAAU+5B,EAASA,EAAQ7xB,YAAc6xB,EAAQz9C,aAAa,OAAQy9C,EAAQ95B,QAAU85B,EAAQz9C,aAAa,UAAWy9C,EAAQl5B,OAASk5B,EAAQz9C,aAAa,UAAU,EAAM29C,OzBqBnLG,EAAmB,GAEzB,MAAM,EACJl5C,cACE,IAAIpC,EACAkhC,EAEJ,IAAK,IAAIkD,EAAOrnC,UAAUC,OAAQsqB,EAAO,IAAIO,MAAMuc,GAAOC,EAAO,EAAGA,EAAOD,EAAMC,IAC/E/c,EAAK+c,GAAQtnC,UAAUsnC,GAazB,GAVoB,IAAhB/c,EAAKtqB,QAAgBsqB,EAAK,GAAGllB,aAAwE,WAAzDjI,OAAOkB,UAAUwxB,SAASjzB,KAAK0tB,EAAK,IAAIjjB,MAAM,GAAI,GAChG68B,EAAS5Z,EAAK,IAEbtnB,EAAIkhC,GAAU5Z,EAGZ4Z,IAAQA,EAAS,IACtBA,EAAS,EAAO,GAAIA,GAChBlhC,IAAOkhC,EAAOlhC,KAAIkhC,EAAOlhC,GAAKA,GAE9BkhC,EAAOlhC,IAAM,EAAEkhC,EAAOlhC,IAAIhD,OAAS,EAAG,CACxC,MAAMu+C,EAAU,GAOhB,OANA,EAAEra,EAAOlhC,IAAIy9B,MAAKwc,IAChB,MAAMuB,EAAY,EAAO,GAAIta,EAAQ,CACnClhC,GAAIi6C,IAENsB,EAAQp4C,KAAK,IAAI,EAAOq4C,OAEnBD,EAIT,MAAM1a,EAAS1jC,KACf0jC,EAAON,YAAa,EACpBM,EAAO8B,QAAUV,IACjBpB,EAAOiC,OAASN,EAAU,CACxBvX,UAAWiW,EAAOjW,YAEpB4V,EAAO4a,QAAU/X,IACjB7C,EAAOiD,gBAAkB,GACzBjD,EAAO0D,mBAAqB,GAC5B1D,EAAOlnC,QAAU,IAAIknC,EAAO6a,aAExBxa,EAAOvnC,SAAWkuB,MAAMC,QAAQoZ,EAAOvnC,UACzCknC,EAAOlnC,QAAQwJ,QAAQ+9B,EAAOvnC,SAGhC,MAAM89C,EAAmB,GACzB5W,EAAOlnC,QAAQ6C,SAAQm/C,IACrBA,EAAI,CACF9a,SACA+a,aAAcpE,EAAmBtW,EAAQuW,GACzCjmC,GAAIqvB,EAAOrvB,GAAGvW,KAAK4lC,GACnBoD,KAAMpD,EAAOoD,KAAKhpC,KAAK4lC,GACvB1d,IAAK0d,EAAO1d,IAAIloB,KAAK4lC,GACrB6D,KAAM7D,EAAO6D,KAAKzpC,KAAK4lC,QAI3B,MAAMgb,EAAe,EAAO,GAAIngD,EAAU+7C,GAiH1C,OA/GA5W,EAAOK,OAAS,EAAO,GAAI2a,EAAcP,EAAkBpa,GAC3DL,EAAOyY,eAAiB,EAAO,GAAIzY,EAAOK,QAC1CL,EAAOib,aAAe,EAAO,GAAI5a,GAE7BL,EAAOK,QAAUL,EAAOK,OAAO1vB,IACjCrX,OAAOoC,KAAKskC,EAAOK,OAAO1vB,IAAIhV,SAAQu/C,IACpClb,EAAOrvB,GAAGuqC,EAAWlb,EAAOK,OAAO1vB,GAAGuqC,OAItClb,EAAOK,QAAUL,EAAOK,OAAOoD,OACjCzD,EAAOyD,MAAMzD,EAAOK,OAAOoD,OAI7BzD,EAAO7G,EAAI,EAEX7/B,OAAO4lB,OAAO8gB,EAAQ,CACpB+E,QAAS/E,EAAOK,OAAO0E,QACvB5lC,KAEA86B,WAAY,GAEZgL,OAAQ,IACRI,WAAY,GACZD,SAAU,GACVE,gBAAiB,GAGjBpB,aAAY,IACyB,eAA5BlE,EAAOK,OAAOuM,UAGvBzI,WAAU,IAC2B,aAA5BnE,EAAOK,OAAOuM,UAIvBrD,YAAa,EACbyB,UAAW,EAEXN,aAAa,EACbC,OAAO,EAEPvK,UAAW,EACXgV,kBAAmB,EACnBtU,SAAU,EACV31B,SAAU,EACV+hC,WAAW,EAEXM,eAAgBxN,EAAOK,OAAOmN,eAC9BC,eAAgBzN,EAAOK,OAAOoN,eAE9B8H,YAAa,WACX,MAAMjU,EAAQ,CAAC,aAAc,YAAa,WAAY,eAChD6Z,EAAU,CAAC,cAAe,cAAe,aAY/C,OAXAnb,EAAOob,iBAAmB,CACxB9wC,MAAOg3B,EAAM,GACb1jC,KAAM0jC,EAAM,GACZp2B,IAAKo2B,EAAM,GACXjwB,OAAQiwB,EAAM,IAEhBtB,EAAOqb,mBAAqB,CAC1B/wC,MAAO6wC,EAAQ,GACfv9C,KAAMu9C,EAAQ,GACdjwC,IAAKiwC,EAAQ,IAERnb,EAAO8B,QAAQR,QAAUtB,EAAOK,OAAO6V,cAAgBlW,EAAOob,iBAAmBpb,EAAOqb,mBAdpF,GAgBb9L,gBAAiB,CACfI,eAAWvzC,EACXwzC,aAASxzC,EACTg1C,yBAAqBh1C,EACrBm1C,oBAAgBn1C,EAChBi1C,iBAAaj1C,EACb62C,sBAAkB72C,EAClBw2C,oBAAgBx2C,EAChBq1C,wBAAoBr1C,EAEpBs1C,kBAAmB1R,EAAOK,OAAOqR,kBAEjCiC,cAAehlC,IACf2sC,kBAAcl/C,EAEdm/C,WAAY,GACZ1I,yBAAqBz2C,EACrBszC,kBAActzC,EACdk1C,iBAAal1C,GAGfo0C,YAAY,EAEZoB,eAAgB5R,EAAOK,OAAOuR,eAC9B59B,QAAS,CACP68B,OAAQ,EACRC,OAAQ,EACRJ,SAAU,EACVE,SAAU,EACV38B,KAAM,GAGRumC,aAAc,GACdD,aAAc,IAEhBva,EAAO6D,KAAK,WAER7D,EAAOK,OAAOpiB,MAChB+hB,EAAO/hB,OAIF+hB,EAGTmZ,SACE,MAAMnZ,EAAS1jC,KACX0jC,EAAO+E,UACX/E,EAAO+E,SAAU,EAEb/E,EAAOK,OAAOyS,YAChB9S,EAAO+S,gBAGT/S,EAAO6D,KAAK,WAGdqV,UACE,MAAMlZ,EAAS1jC,KACV0jC,EAAO+E,UACZ/E,EAAO+E,SAAU,EAEb/E,EAAOK,OAAOyS,YAChB9S,EAAOkY,kBAGTlY,EAAO6D,KAAK,YAGd2X,YAAY1a,EAAUR,GACpB,MAAMN,EAAS1jC,KACfwkC,EAAWlhC,KAAKO,IAAIP,KAAKQ,IAAI0gC,EAAU,GAAI,GAC3C,MAAM3gC,EAAM6/B,EAAOiK,eAEbrJ,GADMZ,EAAOyK,eACItqC,GAAO2gC,EAAW3gC,EACzC6/B,EAAOmX,YAAYvW,EAA0B,qBAAVN,EAAwB,EAAIA,GAC/DN,EAAO4L,oBACP5L,EAAO+K,sBAGT8N,uBACE,MAAM7Y,EAAS1jC,KACf,IAAK0jC,EAAOK,OAAOqW,eAAiB1W,EAAO7gC,GAAI,OAC/C,MAAMs8C,EAAMzb,EAAO7gC,GAAGH,UAAUmD,MAAM,KAAKE,QAAOrD,GACT,IAAhCA,EAAUkU,QAAQ,WAA+E,IAA5DlU,EAAUkU,QAAQ8sB,EAAOK,OAAOyI,0BAE9E9I,EAAO6D,KAAK,oBAAqB4X,EAAI5/B,KAAK,MAG5C6/B,gBAAgBC,GACd,MAAM3b,EAAS1jC,KACf,OAAI0jC,EAAOkD,UAAkB,GACtByY,EAAQ38C,UAAUmD,MAAM,KAAKE,QAAOrD,GACI,IAAtCA,EAAUkU,QAAQ,iBAAyE,IAAhDlU,EAAUkU,QAAQ8sB,EAAOK,OAAO6E,cACjFrpB,KAAK,KAGV8vB,oBACE,MAAM3L,EAAS1jC,KACf,IAAK0jC,EAAOK,OAAOqW,eAAiB1W,EAAO7gC,GAAI,OAC/C,MAAMy8C,EAAU,GAChB5b,EAAOiF,OAAOrI,MAAK+e,IACjB,MAAM1hB,EAAa+F,EAAO0b,gBAAgBC,GAC1CC,EAAQt5C,KAAK,CACXq5C,UACA1hB,eAEF+F,EAAO6D,KAAK,cAAe8X,EAAS1hB,MAEtC+F,EAAO6D,KAAK,gBAAiB+X,GAG/BtN,qBAAqBuN,EAAMC,QACZ,IAATD,IACFA,EAAO,gBAGK,IAAVC,IACFA,GAAQ,GAGV,MACM,OACJzb,EAAM,OACN4E,EAAM,WACNI,EAAU,gBACVC,EACAxpB,KAAM2oB,EAAU,YAChB8E,GAPajtC,KASf,IAAIy/C,EAAM,EAEV,GAAI1b,EAAOgG,eAAgB,CACzB,IACI2V,EADAtV,EAAYzB,EAAOsE,GAAahC,gBAGpC,IAAK,IAAI3uC,EAAI2wC,EAAc,EAAG3wC,EAAIqsC,EAAO9oC,OAAQvD,GAAK,EAChDqsC,EAAOrsC,KAAOojD,IAChBtV,GAAazB,EAAOrsC,GAAG2uC,gBACvBwU,GAAO,EACHrV,EAAYjC,IAAYuX,GAAY,IAI5C,IAAK,IAAIpjD,EAAI2wC,EAAc,EAAG3wC,GAAK,EAAGA,GAAK,EACrCqsC,EAAOrsC,KAAOojD,IAChBtV,GAAazB,EAAOrsC,GAAG2uC,gBACvBwU,GAAO,EACHrV,EAAYjC,IAAYuX,GAAY,SAK5C,GAAa,YAATH,EACF,IAAK,IAAIjjD,EAAI2wC,EAAc,EAAG3wC,EAAIqsC,EAAO9oC,OAAQvD,GAAK,EAAG,EACnCkjD,EAAQzW,EAAWzsC,GAAK0sC,EAAgB1sC,GAAKysC,EAAWkE,GAAe9E,EAAaY,EAAWzsC,GAAKysC,EAAWkE,GAAe9E,KAGhJsX,GAAO,QAKX,IAAK,IAAInjD,EAAI2wC,EAAc,EAAG3wC,GAAK,EAAGA,GAAK,EAAG,CACxBysC,EAAWkE,GAAelE,EAAWzsC,GAAK6rC,IAG5DsX,GAAO,GAMf,OAAOA,EAGTh4C,SACE,MAAMi8B,EAAS1jC,KACf,IAAK0jC,GAAUA,EAAOkD,UAAW,OACjC,MAAM,SACJkC,EAAQ,OACR/E,GACEL,EAWJ,SAAS0N,IACP,MAAMuO,EAAiBjc,EAAO0E,cAAmC,EAApB1E,EAAOI,UAAiBJ,EAAOI,UACtEiX,EAAez3C,KAAKO,IAAIP,KAAKQ,IAAI67C,EAAgBjc,EAAOyK,gBAAiBzK,EAAOiK,gBACtFjK,EAAO0N,aAAa2J,GACpBrX,EAAO4L,oBACP5L,EAAO+K,sBAGT,IAAImR,EAjBA7b,EAAOyG,aACT9G,EAAO2U,gBAGT3U,EAAO5W,aACP4W,EAAOoE,eACPpE,EAAOsK,iBACPtK,EAAO+K,sBAYH/K,EAAOK,OAAO2R,UAAYhS,EAAOK,OAAO2R,SAASjN,SACnD2I,IAEI1N,EAAOK,OAAOyK,YAChB9K,EAAOiJ,qBAIPiT,GADmC,SAAhClc,EAAOK,OAAOwG,eAA4B7G,EAAOK,OAAOwG,cAAgB,IAAM7G,EAAO2K,QAAU3K,EAAOK,OAAOgG,eACnGrG,EAAO8M,QAAQ9M,EAAOiF,OAAO9oC,OAAS,EAAG,GAAG,GAAO,GAEnD6jC,EAAO8M,QAAQ9M,EAAOuJ,YAAa,GAAG,GAAO,GAGvD2S,GACHxO,KAIArN,EAAOoI,eAAiBrD,IAAapF,EAAOoF,UAC9CpF,EAAO0I,gBAGT1I,EAAO6D,KAAK,UAGdmV,gBAAgBmD,EAAcC,QACT,IAAfA,IACFA,GAAa,GAGf,MAAMpc,EAAS1jC,KACT+/C,EAAmBrc,EAAOK,OAAOuM,UAOvC,OALKuP,IAEHA,EAAoC,eAArBE,EAAoC,WAAa,cAG9DF,IAAiBE,GAAqC,eAAjBF,GAAkD,aAAjBA,IAI1Enc,EAAOgE,IAAI9J,YAAY,GAAG8F,EAAOK,OAAOyI,yBAAyBuT,KAAoBriB,SAAS,GAAGgG,EAAOK,OAAOyI,yBAAyBqT,KACxInc,EAAO6Y,uBACP7Y,EAAOK,OAAOuM,UAAYuP,EAC1Bnc,EAAOiF,OAAOrI,MAAK+e,IACI,aAAjBQ,EACFR,EAAQl7C,MAAMS,MAAQ,GAEtBy6C,EAAQl7C,MAAMU,OAAS,MAG3B6+B,EAAO6D,KAAK,mBACRuY,GAAYpc,EAAOj8B,UAddi8B,EAkBXsc,MAAMn9C,GACJ,MAAM6gC,EAAS1jC,KACf,GAAI0jC,EAAOuc,QAAS,OAAO,EAE3B,MAAMvY,EAAM,EAAE7kC,GAAM6gC,EAAOK,OAAOlhC,IAGlC,KAFAA,EAAK6kC,EAAI,IAGP,OAAO,EAGT7kC,EAAG6gC,OAASA,EAEZ,MAAMwc,EAAqB,IAClB,KAAKxc,EAAOK,OAAOoW,cAAgB,IAAIpd,OAAOl3B,MAAM,KAAK0Z,KAAK,OAgBvE,IAAI2oB,EAbe,MACjB,GAAIrlC,GAAMA,EAAG2wC,YAAc3wC,EAAG2wC,WAAW9nB,cAAe,CACtD,MAAMiR,EAAM,EAAE95B,EAAG2wC,WAAW9nB,cAAcw0B,MAI1C,OAFAvjB,EAAI5R,SAAWprB,GAAW+nC,EAAI3c,SAASprB,GAEhCg9B,EAGT,OAAO+K,EAAI3c,SAASm1B,MAILC,GAEjB,GAA0B,IAAtBjY,EAAWroC,QAAgB6jC,EAAOK,OAAOyV,eAAgB,CAC3D,MACM4G,EADW/kB,IACQ54B,cAAc,OACvCylC,EAAa,EAAEkY,GACfA,EAAQ19C,UAAYghC,EAAOK,OAAOoW,aAClCzS,EAAIn9B,OAAO61C,GACX1Y,EAAI3c,SAAS,IAAI2Y,EAAOK,OAAO6E,cAActI,MAAK+e,IAChDnX,EAAW39B,OAAO80C,MAetB,OAXAriD,OAAO4lB,OAAO8gB,EAAQ,CACpBgE,MACA7kC,KACAqlC,aACAjE,UAAWiE,EAAW,GACtB+X,SAAS,EAET5X,IAA8B,QAAzBxlC,EAAGuhC,IAAIrjC,eAAoD,QAAzB2mC,EAAI5P,IAAI,aAC/CsQ,aAA0C,eAA5B1E,EAAOK,OAAOuM,YAAwD,QAAzBztC,EAAGuhC,IAAIrjC,eAAoD,QAAzB2mC,EAAI5P,IAAI,cACrGwQ,SAAwC,gBAA9BJ,EAAWpQ,IAAI,cAEpB,EAGTnW,KAAK9e,GACH,MAAM6gC,EAAS1jC,KACf,GAAI0jC,EAAOmM,YAAa,OAAOnM,EAE/B,OAAgB,IADAA,EAAOsc,MAAMn9C,KAE7B6gC,EAAO6D,KAAK,cAER7D,EAAOK,OAAOyG,aAChB9G,EAAO2U,gBAIT3U,EAAO4Z,aAEH5Z,EAAOK,OAAO/hC,MAChB0hC,EAAOuX,aAITvX,EAAO5W,aAEP4W,EAAOoE,eAEHpE,EAAOK,OAAOoI,eAChBzI,EAAO0I,gBAIL1I,EAAOK,OAAOyS,YAAc9S,EAAO+E,SACrC/E,EAAO+S,gBAGL/S,EAAOK,OAAO+V,eAChBpW,EAAOoW,gBAILpW,EAAOK,OAAO/hC,KAChB0hC,EAAO8M,QAAQ9M,EAAOK,OAAO+M,aAAepN,EAAOkO,aAAc,EAAGlO,EAAOK,OAAO+L,oBAAoB,GAAO,GAE7GpM,EAAO8M,QAAQ9M,EAAOK,OAAO+M,aAAc,EAAGpN,EAAOK,OAAO+L,oBAAoB,GAAO,GAIzFpM,EAAOmY,eAEPnY,EAAOmM,aAAc,EAErBnM,EAAO6D,KAAK,QACZ7D,EAAO6D,KAAK,cA7CkB7D,EAiDhCr4B,QAAQg1C,EAAgBC,QACC,IAAnBD,IACFA,GAAiB,QAGC,IAAhBC,IACFA,GAAc,GAGhB,MAAM5c,EAAS1jC,MACT,OACJ+jC,EAAM,IACN2D,EAAG,WACHQ,EAAU,OACVS,GACEjF,EAEJ,MAA6B,qBAAlBA,EAAOK,QAA0BL,EAAOkD,YAInDlD,EAAO6D,KAAK,iBAEZ7D,EAAOmM,aAAc,EAErBnM,EAAOoY,eAEH/X,EAAO/hC,MACT0hC,EAAO8X,cAIL8E,IACF5c,EAAOka,gBACPlW,EAAIzJ,WAAW,SACfiK,EAAWjK,WAAW,SAElB0K,GAAUA,EAAO9oC,QACnB8oC,EAAO/K,YAAY,CAACmG,EAAOwJ,kBAAmBxJ,EAAO6K,iBAAkB7K,EAAO8K,eAAgB9K,EAAO+K,gBAAgBvvB,KAAK,MAAM0e,WAAW,SAASA,WAAW,4BAInKyF,EAAO6D,KAAK,WAEZvqC,OAAOoC,KAAKskC,EAAOiD,iBAAiBtnC,SAAQu/C,IAC1Clb,EAAO1d,IAAI44B,OAGU,IAAnByB,IACF3c,EAAOgE,IAAI,GAAGhE,OAAS,KnCzkB7B,SAAqB9T,GACnB,MAAM5xB,EAAS4xB,EACf5yB,OAAOoC,KAAKpB,GAAQqB,SAAQxB,IAC1B,IACEG,EAAOH,GAAO,KACd,MAAOuD,IAGT,WACSpD,EAAOH,GACd,MAAOuD,QmCgkBPm/C,CAAY7c,IAGdA,EAAOkD,WAAY,GAnCV,KAuCX4Z,sBAAsBC,GACpB,EAAOtC,EAAkBsC,GAGhBtC,8BACT,OAAOA,EAGE5/C,sBACT,OAAOA,EAGTiiD,qBAAqBhC,GACd,EAAOtgD,UAAUqgD,cAAa,EAAOrgD,UAAUqgD,YAAc,IAClE,MAAM/hD,EAAU,EAAO0B,UAAUqgD,YAEd,oBAARC,GAAsBhiD,EAAQoa,QAAQ4nC,GAAO,GACtDhiD,EAAQwJ,KAAKw4C,GAIjBgC,WAAWnkD,GACT,OAAIquB,MAAMC,QAAQtuB,IAChBA,EAAOgD,SAAQ3C,GAAK,EAAOgkD,cAAchkD,KAClC,IAGT,EAAOgkD,cAAcrkD,GACd,IAKXW,OAAOoC,KAAKs7C,GAAYr7C,SAAQshD,IAC9B3jD,OAAOoC,KAAKs7C,EAAWiG,IAAiBthD,SAAQuhD,IAC9C,EAAO1iD,UAAU0iD,GAAelG,EAAWiG,GAAgBC,SAG/D,EAAOC,IAAI,C0BxnBI,SAAgBpd,GAC7B,IAAI,OACFC,EAAM,GACNrvB,EAAE,KACFkzB,GACE9D,EACJ,MAAM7kC,EAASs9B,IACf,IAAI4kB,EAAW,KACXC,EAAiB,KAErB,MAAMC,EAAgB,KACftd,IAAUA,EAAOkD,WAAclD,EAAOmM,cAC3CtI,EAAK,gBACLA,EAAK,YA2CD0Z,EAA2B,KAC1Bvd,IAAUA,EAAOkD,WAAclD,EAAOmM,aAC3CtI,EAAK,sBAGPlzB,EAAG,QAAQ,KACLqvB,EAAOK,OAAOwV,gBAAmD,qBAA1B36C,EAAOsiD,eA7C7Cxd,IAAUA,EAAOkD,WAAclD,EAAOmM,cAC3CiR,EAAW,IAAII,gBAAe1D,IAC5BuD,EAAiBniD,EAAO0D,uBAAsB,KAC5C,MAAM,MACJsC,EAAK,OACLC,GACE6+B,EACJ,IAAIyd,EAAWv8C,EACXioC,EAAYhoC,EAChB24C,EAAQn+C,SAAQ+hD,IACd,IAAI,eACFC,EAAc,YACdC,EAAW,OACXhhD,GACE8gD,EACA9gD,GAAUA,IAAWojC,EAAO7gC,KAChCs+C,EAAWG,EAAcA,EAAY18C,OAASy8C,EAAe,IAAMA,GAAgBE,WACnF1U,EAAYyU,EAAcA,EAAYz8C,QAAUw8C,EAAe,IAAMA,GAAgBG,cAGnFL,IAAav8C,GAASioC,IAAchoC,GACtCm8C,UAINF,EAASW,QAAQ/d,EAAO7gC,MAyBxBjE,EAAO2C,iBAAiB,SAAUy/C,GAClCpiD,EAAO2C,iBAAiB,oBAAqB0/C,OAE/C5sC,EAAG,WAAW,KAxBR0sC,GACFniD,EAAOuY,qBAAqB4pC,GAG1BD,GAAYA,EAASY,WAAahe,EAAO7gC,KAC3Ci+C,EAASY,UAAUhe,EAAO7gC,IAC1Bi+C,EAAW,MAoBbliD,EAAO4C,oBAAoB,SAAUw/C,GACrCpiD,EAAO4C,oBAAoB,oBAAqBy/C,OCzErC,SAAkBxd,GAC/B,IAAI,OACFC,EAAM,aACN+a,EAAY,GACZpqC,EAAE,KACFkzB,GACE9D,EACJ,MAAMke,EAAY,GACZ/iD,EAASs9B,IAET0lB,EAAS,SAAUthD,EAAQX,QACf,IAAZA,IACFA,EAAU,IAGZ,MACMmhD,EAAW,IADIliD,EAAOijD,kBAAoBjjD,EAAOkjD,yBACrBC,IAIhC,GAAyB,IAArBA,EAAUliD,OAEZ,YADA0nC,EAAK,iBAAkBwa,EAAU,IAInC,MAAMC,EAAiB,WACrBza,EAAK,iBAAkBwa,EAAU,KAG/BnjD,EAAO0D,sBACT1D,EAAO0D,sBAAsB0/C,GAE7BpjD,EAAOoY,WAAWgrC,EAAgB,MAGtClB,EAASW,QAAQnhD,EAAQ,CACvBm2B,WAA0C,qBAAvB92B,EAAQ82B,YAAoC92B,EAAQ82B,WACvEwrB,UAAwC,qBAAtBtiD,EAAQsiD,WAAmCtiD,EAAQsiD,UACrEC,cAAgD,qBAA1BviD,EAAQuiD,eAAuCviD,EAAQuiD,gBAE/EP,EAAU37C,KAAK86C,IA+BjBrC,EAAa,CACXqC,UAAU,EACVqB,gBAAgB,EAChBC,sBAAsB,IAExB/tC,EAAG,QAjCU,KACX,GAAKqvB,EAAOK,OAAO+c,SAAnB,CAEA,GAAIpd,EAAOK,OAAOoe,eAAgB,CAChC,MAAME,EAAmB3e,EAAOgE,IAAIhJ,UAEpC,IAAK,IAAIpiC,EAAI,EAAGA,EAAI+lD,EAAiBxiD,OAAQvD,GAAK,EAChDslD,EAAOS,EAAiB/lD,IAK5BslD,EAAOle,EAAOgE,IAAI,GAAI,CACpBua,UAAWve,EAAOK,OAAOqe,uBAG3BR,EAAOle,EAAOwE,WAAW,GAAI,CAC3BzR,YAAY,QAiBhBpiB,EAAG,WAba,KACdstC,EAAUtiD,SAAQyhD,IAChBA,EAASwB,gBAEXX,EAAUnqC,OAAO,EAAGmqC,EAAU9hD,c3BqjBnB,Q,2B4B/mBf,SAAS4C,GAAcC,EAAWC,EAASC,GACzC,MAAMC,EAAKtC,SAASkC,cAAcE,GAAW,OAO7C,OANID,IACFG,EAAGH,UAAYA,GAEbE,GACFA,EAAWE,YAAYD,GAElBA,EA2BT,SAAS4B,GAAe5B,EAAI6B,EAAGC,GAC7B9B,EAAGsB,MAAMS,MAAsB,kBAANF,EAAmBA,EAAI,KAAQA,EACxD7B,EAAGsB,MAAMU,OAAuB,kBAANF,EAAmBA,EAAI,KAAQA,EAG3D,MAAMG,GACE,OADFA,GAEK,UAFLA,GAGI,SAHJA,GAIG,QAwBT,SAAS0mB,GAAsBP,EAAQC,EAAgBC,EAAS5qB,UAC9D,IAAI6qB,EAAW,GAEf,GAAIH,aAAkBL,QACpBQ,EAAW,CAACH,QACP,GAAIA,aAAkBI,UAAYX,MAAMC,QAAQM,GACrDG,EAAWV,MAAM5oB,KAAKmpB,OACjB,CACL,MAAMK,EAA6B,kBAAXL,EAAsBA,EAASC,EACnDI,IACFF,EAAWV,MAAM5oB,KAAKqpB,EAAOI,iBAAiBD,KAIlD,OAAOF,EAkBT,MAAM1I,GACJzd,YAAYG,EAAMud,GAChB3iB,KAAKoF,KAAOA,EACRud,GACF3lB,OAAO4lB,OAAO5iB,KAAM2iB,GAIxBthB,iBACErB,KAAKoL,kBAAmB,GA2F5B,MAAMyX,GAKJ5d,YAAY6d,EAAUnkB,GAGpBqB,KAAK+L,QAAUtJ,GACb,mCACAqgB,EAAW,MAAQ,GACnBnkB,GAGEmkB,IACF9iB,KAAK+L,QAAQgX,SAAW,QACxB/iB,KAAK+L,QAAQiX,IAAM,GACnBhjB,KAAK+L,QAAQkX,IAAMH,EACnB9iB,KAAK+L,QAAQmT,aAAa,OAAQ,iBAGpClf,KAAK+L,QAAQmT,aAAa,aAAc,QAG1CtT,iBAAiBhH,EAAOC,GACjB7E,KAAK+L,UAImB,QAAzB/L,KAAK+L,QAAQpJ,SAIf8B,GAAezE,KAAK+L,QAAS,IAAK,QAClC/L,KAAK+L,QAAQ5H,MAAMuG,gBAAkB,MACrC1K,KAAK+L,QAAQ5H,MAAMC,UAzNzB,SAA2BlB,EAAGC,EAAGa,GAC/B,IAAIC,EAAY,eACZf,EAAI,OAASC,GAAK,GADN,QAUhB,YANcrD,IAAVkE,IACFC,GAAa,YACTD,EAAQ,IAAMA,EACd,OAGCC,EA8M4BF,CAAkB,EAAG,EAAGa,EAAQ,MAE/DH,GAAezE,KAAK+L,QAASnH,EAAOC,IAIxCwG,UACMrL,KAAK+L,QAAQmX,YACfljB,KAAK+L,QAAQxG,SAEfvF,KAAK+L,QAAU,MAInB,MAAMoX,GAQJle,YAAY0B,EAAUyc,EAAUxc,GAC9B5G,KAAKojB,SAAWA,EAChBpjB,KAAK8H,KAAOnB,EACZ3G,KAAK4G,MAAQA,EAEb5G,KAAK4E,MAAQyE,OAAOrJ,KAAK8H,KAAKpD,IAAM2E,OAAOrJ,KAAK8H,KAAKlD,QAAU,EAC/D5E,KAAK6E,OAASwE,OAAOrJ,KAAK8H,KAAKnD,IAAM0E,OAAOrJ,KAAK8H,KAAKjD,SAAW,EAEjE7E,KAAKqjB,YAAa,EAClBrjB,KAAKsL,UAAW,EAChBtL,KAAKsjB,MAAQxe,GAET9E,KAAK8H,KAAK1C,KACZpF,KAAKoF,KAAOpF,KAAK8H,KAAK1C,KACbpF,KAAK8H,KAAKmb,IACnBjjB,KAAKoF,KAAO,QAEZpF,KAAKoF,KAAO,OAGdpF,KAAKojB,SAASzb,SAAS,cAAe,CAAEmC,QAAS9J,OAGnDujB,oBACMvjB,KAAK8L,cAAgB9L,KAAKwjB,mBAE5BxM,YAAW,KACLhX,KAAK8L,cACP9L,KAAK8L,YAAYT,UACjBrL,KAAK8L,YAAc,QAEpB,KASPnB,KAAK8Y,EAAQC,GACX,IAAK1jB,KAAK8L,aAAe9L,KAAKqH,OAASrH,KAAK2jB,iBAAkB,CAG5D,MAAMC,EAAiB5jB,KAAKojB,SAASnD,aACnC,oBACCjgB,KAAK8H,KAAK+b,OAAQ7jB,KAAKqH,MAAMqC,eAAgB1J,KAAK8H,KAAK+b,KACxD7jB,MAEFA,KAAK8L,YAAc,IAAI+W,GACrBe,EACA5jB,KAAKqH,MAAM1I,WAIXqB,KAAK+L,UAAY2X,GAIjB1jB,KAAKojB,SAASzb,SAAS,cAAe,CAAEmC,QAAS9J,KAAMyjB,WAAUrY,mBAIjEpL,KAAK8jB,iBACP9jB,KAAK+jB,UAAUN,IAEfzjB,KAAK+L,QAAUtJ,GAAc,iBAC7BzC,KAAK+L,QAAQjB,UAAY9K,KAAK8H,KAAKgX,MAAQ,IAGzC4E,GAAU1jB,KAAKqH,OACjBrH,KAAKqH,MAAMwD,mBAAkB,IASjCkZ,UAAUN,GACRzjB,KAAK+L,QAAUtJ,GAAc,YAAa,OAEtCzC,KAAKojB,SAASzb,SAAS,mBAAoB,CAAEmC,QAAS9J,KAAMyjB,WAAUrY,mBAItEpL,KAAK8H,KAAKkc,SACZhkB,KAAK+L,QAAQiY,OAAShkB,KAAK8H,KAAKkc,QAGlChkB,KAAK+L,QAAQkX,IAAMjjB,KAAK8H,KAAKmb,IAE7BjjB,KAAK+L,QAAQiX,IAAMhjB,KAAK8H,KAAKkb,KAAO,GAEpChjB,KAAKsjB,MAAQxe,GAET9E,KAAK+L,QAAQkY,SACfjkB,KAAKkkB,YAELlkB,KAAK+L,QAAQoY,OAAS,KACpBnkB,KAAKkkB,YAGPlkB,KAAK+L,QAAQqY,QAAU,KACrBpkB,KAAKqkB,aAUXC,SAASjd,GACPrH,KAAKqH,MAAQA,EACbrH,KAAKsL,UAAW,EAChBtL,KAAKojB,SAAW/b,EAAMlB,KAQxB+d,WACElkB,KAAKsjB,MAAQxe,GAET9E,KAAKqH,QACPrH,KAAKojB,SAASzb,SAAS,eAAgB,CAAEN,MAAOrH,KAAKqH,MAAOyC,QAAS9J,OAGjEA,KAAKqH,MAAMkC,UACRvJ,KAAKqH,MAAM4D,gBACVjL,KAAK+L,QAAQmX,aACnBljB,KAAKqH,MAAM1I,UAAUmM,UAAY,GACjC9K,KAAKuK,SACLvK,KAAKqH,MAAMwD,mBAAkB,KAQnCwZ,UACErkB,KAAKsjB,MAAQxe,GAET9E,KAAKqH,QACPrH,KAAKukB,eACLvkB,KAAKojB,SAASzb,SAAS,eAAgB,CAAEN,MAAOrH,KAAKqH,MAAOmd,SAAS,EAAM1a,QAAS9J,OACpFA,KAAKojB,SAASzb,SAAS,YAAa,CAAEN,MAAOrH,KAAKqH,MAAOyC,QAAS9J,QAOtEihB,YACE,OAAOjhB,KAAKojB,SAASnD,aACnB,mBACAjgB,KAAKsjB,QAAUxe,GACf9E,MAIJwkB,UACE,OAAOxkB,KAAKsjB,QAAUxe,GAMxBgf,iBACE,MAAqB,UAAd9jB,KAAKoF,KASdwG,iBAAiBhH,EAAOC,GACtB,GAAK7E,KAAK+L,UAIN/L,KAAK8L,aACP9L,KAAK8L,YAAYF,iBAAiBhH,EAAOC,IAGvC7E,KAAKojB,SAASzb,SAAS,gBAAiB,CAAEmC,QAAS9J,KAAM4E,QAAOC,WAAUuG,mBAI9E3G,GAAezE,KAAK+L,QAASnH,EAAOC,GAEhC7E,KAAK8jB,mBAAqB9jB,KAAKwkB,YAAW,CAC5C,MAAMC,EAAQzkB,KAAK+L,QAMf0Y,EAAMT,UACDS,EAAMC,QAAQC,iBAAmB/f,EAAQ6f,EAAMC,QAAQC,mBAC9DF,EAAMG,MAAQhgB,EAAQ,KACtB6f,EAAMC,QAAQC,gBAAkB/f,GAG9B5E,KAAKqH,OACPrH,KAAKojB,SAASzb,SAAS,kBAAmB,CAAEN,MAAOrH,KAAKqH,MAAOzC,QAAOC,SAAQiF,QAAS9J,QAQ7FqM,aACE,OAAOrM,KAAKojB,SAASnD,aACnB,oBACAjgB,KAAK8jB,kBAAqB9jB,KAAKsjB,QAAUxe,GACzC9E,MAOJ2jB,iBACE,OAAO3jB,KAAKojB,SAASnD,aACnB,wBACAjgB,KAAK8jB,iBACL9jB,MASJ6kB,WACM7kB,KAAKojB,SAASzb,SAAS,kBAAmB,CAAEmC,QAAS9J,OAAQoL,kBAIjEpL,KAAK2K,MAAK,GAMZ6Y,kBACE,OAAOxjB,KAAKojB,SAASnD,aACnB,uBACAjgB,KAAKihB,YACLjhB,MAOJqL,UACErL,KAAKsL,UAAW,EAChBtL,KAAKqH,MAAQ,KAETrH,KAAKojB,SAASzb,SAAS,iBAAkB,CAAEmC,QAAS9J,OAAQoL,mBAIhEpL,KAAKuF,SAEDvF,KAAK8jB,kBAAoB9jB,KAAK+L,UAChC/L,KAAK+L,QAAQoY,OAAS,KACtBnkB,KAAK+L,QAAQqY,QAAU,KACvBpkB,KAAK+L,QAAU,OAOnBwY,eACE,GAAIvkB,KAAKqH,MAAO,CACd,IAAIyd,EAAariB,GAAc,mBAC/BqiB,EAAWxD,UAAYthB,KAAKojB,SAASzjB,QAAQolB,SAC7CD,EAAa9kB,KAAKojB,SAASnD,aACzB,sBACA6E,EACA9kB,MAEFA,KAAK+L,QAAUtJ,GAAc,2CAC7BzC,KAAK+L,QAAQjJ,YAAYgiB,GACzB9kB,KAAKqH,MAAM1I,UAAUmM,UAAY,GACjC9K,KAAKqH,MAAM1I,UAAUmE,YAAY9C,KAAK+L,SACtC/L,KAAKqH,MAAMwD,mBAAkB,GAC7B7K,KAAKujB,qBAOThZ,SACEvK,KAAKqjB,YAAa,EAEdrjB,KAAKsjB,QAAUxe,GAKf9E,KAAKojB,SAASzb,SAAS,gBAAiB,CAAEmC,QAAS9J,OAAQoL,mBAI3DpL,KAAK8jB,iBAYH9jB,KAAKqH,QACDrH,KAAKqH,MAAMkC,UACX,WAAYvJ,KAAK+L,SACvB/L,KAAKglB,YAAa,EAElB1iB,uBAAsB,KAEhBtC,KAAK+L,SAAoC,QAAzB/L,KAAK+L,QAAQpJ,SAC/B3C,KAAK+L,QAAQkZ,SAASC,MAAK,KACzBllB,KAAKglB,YAAa,EAClB1iB,uBAAsB,KACpBtC,KAAKmlB,oBAENC,OAAM,KACPplB,KAAKglB,YAAa,WAKpBhlB,KAAK8L,aACH9L,KAAKsjB,QAAUxe,IAAqB9E,KAAKsjB,QAAUxe,IACvD9E,KAAKujB,oBAEPvjB,KAAKmlB,eAEEnlB,KAAK+L,UAAY/L,KAAK+L,QAAQmX,YACvCljB,KAAKqH,MAAM1I,UAAUmE,YAAY9C,KAAK+L,UA9CtC/L,KAAKukB,eAuDTla,WACMrK,KAAKojB,SAASzb,SAAS,kBAAmB,CAAEmC,QAAS9J,OAAQoL,kBAI7DpL,KAAKqH,QACHrH,KAAK8jB,kBAAoB9jB,KAAKglB,WAGhChlB,KAAKmlB,cACInlB,KAAKwkB,WACdxkB,KAAK2K,MAAK,GAAO,IAQvBL,aACEtK,KAAKojB,SAASzb,SAAS,oBAAqB,CAAEmC,QAAS9J,OAOzDuF,SACEvF,KAAKqjB,YAAa,EAEdrjB,KAAKojB,SAASzb,SAAS,gBAAiB,CAAEmC,QAAS9J,OAAQoL,kBAI3DpL,KAAK+L,SAAW/L,KAAK+L,QAAQmX,YAC/BljB,KAAK+L,QAAQxG,SAOjB4f,cACOnlB,KAAKqjB,aAINrjB,KAAKojB,SAASzb,SAAS,qBAAsB,CAAEmC,QAAS9J,OAAQoL,kBAKhEpL,KAAKqH,OAASrH,KAAK+L,UAAY/L,KAAK+L,QAAQmX,aAC9CljB,KAAKqH,MAAM1I,UAAUmE,YAAY9C,KAAK+L,UAElC/L,KAAK8L,aACH9L,KAAKsjB,QAAUxe,IAAqB9E,KAAKsjB,QAAUxe,IACvD9E,KAAKujB,uBAwNb,SAAS9c,GAAmBnC,EAAM3E,EAAS+G,EAAcC,EAAUC,GACjE,IAAIC,EAEJ,GAAIlH,EAAQmH,UACVD,EAAelH,EAAQmH,UAAUJ,EAAcC,EAAUC,GAAOtC,QAC3D,GAAI3E,EAAQoH,QACjBF,EAAelH,EAAQoH,QAAQzC,OAC1B,CACL,MAAM0C,EAAiB,UAAY1C,EAAK,GAAG2C,cAAgB3C,EAAK4C,MAAM,GAClEvH,EAAQqH,KACVH,EAAelH,EAAQqH,IAI3B,OAAOH,GAAgB,EAsBzB,MAAMqB,GAOJjD,YAAYtF,EAASgH,EAAUC,EAAOT,GACpCnG,KAAKmG,KAAOA,EACZnG,KAAKL,QAAUA,EACfK,KAAK2G,SAAWA,EAChB3G,KAAK4G,MAAQA,EAUfa,OAAOU,EAAUC,EAAWL,GAC1B/H,KAAKqI,YAAc,CACjBnF,EAAGiF,EACHhF,EAAGiF,GAGLpI,KAAK+H,YAAcA,EAEnB,MAAMO,EAAStI,KAAK+H,YAAY7E,EAAIlD,KAAKqI,YAAYnF,EAC/CqF,EAASvI,KAAK+H,YAAY5E,EAAInD,KAAKqI,YAAYlF,EAErDnD,KAAKwI,IAAMlF,KAAKO,IAAI,EAAGyE,EAASC,EAASD,EAASC,GAClDvI,KAAKyI,KAAOnF,KAAKO,IAAI,EAAGyE,EAASC,EAASD,EAASC,GAInDvI,KAAK0I,MAAQpF,KAAKO,IAAI,EAAG0E,GAEzBvI,KAAK2I,QAAU3I,KAAK4I,cACpB5I,KAAK6I,UAAY7I,KAAK8I,gBACtB9I,KAAK8D,IAAMR,KAAKQ,IACd9D,KAAK2I,QACL3I,KAAK6I,UACL7I,KAAK+I,WAGP/I,KAAK6D,IAAMP,KAAKO,IACd7D,KAAKwI,IACLxI,KAAK2I,QACL3I,KAAK6I,WAGH7I,KAAKmG,MACPnG,KAAKmG,KAAKwB,SAAS,mBAAoB,CAAEqB,WAAYhJ,KAAMiJ,UAAWjJ,KAAK2G,WAS/EuC,sBAAsBC,GAIpB,MAAMC,EAAcpJ,KAAKL,QAAQwJ,EAAe,aAEhD,GAAKC,EAIL,MAA2B,oBAAhBA,EACFA,EAAYpJ,MAGD,SAAhBoJ,EACKpJ,KAAKyI,KAGM,QAAhBW,EACKpJ,KAAKwI,IAGPa,OAAOD,GAWhBN,gBACE,IAAIxB,EAAgBtH,KAAKkJ,sBAAsB,aAE/C,OAAI5B,IAKJA,EAAgBhE,KAAKO,IAAI,EAAc,EAAX7D,KAAKwI,KAE7BlB,EAAgBtH,KAAKqI,YAAYnF,EA5GjB,MA6GlBoE,EA7GkB,IA6GgBtH,KAAKqI,YAAYnF,GAG9CoE,GAQTsB,cACE,OAAO5I,KAAKkJ,sBAAsB,YAAclJ,KAAKwI,IAUvDO,UACE,MAAMzB,EAAgBtH,KAAKkJ,sBAAsB,OAEjD,OAAI5B,GAMGhE,KAAKQ,IAAI,EAAc,EAAX9D,KAAKwI,MAc5B,SAASqgB,GAAaliB,EAAUyc,EAAUxc,GAExC,MAAMkD,EAAUsZ,EAASsF,sBAAsB/hB,EAAUC,GAEzD,IAAKkD,IAAYA,EAAQ+a,SACvB,OAGF,MAAM,QAAEllB,GAAYyjB,EAId1c,EAAe0c,EAAS1c,cA9PhC,SAAyB/G,EAASwG,GAChC,GAAIxG,EAAQyG,kBAAmB,CAC7B,MAAMC,EAAkB1G,EAAQyG,kBAAkBzG,EAASwG,GAC3D,GAAIE,EACF,OAAOA,EAIX,MAAO,CACLnD,EAAG3C,SAAS+F,gBAAgBC,YAM5BpD,EAAGvE,OAAO4H,aA+OkCN,CAAgBvG,GACxDoI,EAvLR,SAAwBpI,EAAS+G,EAAcC,EAAUC,GACvD,MAAO,CACL1D,EAAGwD,EAAaxD,EACZuD,GAAmB,OAAQ9G,EAAS+G,EAAcC,EAAUC,GAC5DH,GAAmB,QAAS9G,EAAS+G,EAAcC,EAAUC,GACjEzD,EAAGuD,EAAavD,EACZsD,GAAmB,MAAO9G,EAAS+G,EAAcC,EAAUC,GAC3DH,GAAmB,SAAU9G,EAAS+G,EAAcC,EAAUC,IAgLhDO,CAAexH,EAAS+G,EAAcC,EAAUC,GAE9D+hB,EAAY,IAAIzgB,GAAUvI,EAASgH,GAAW,GASpD,OARAgiB,EAAUlhB,OAAOqC,EAAQlF,MAAOkF,EAAQjF,OAAQkD,GAEhD+B,EAAQ+a,WACR/a,EAAQ8B,iBACNtI,KAAKslB,KAAK9e,EAAQlF,MAAQ+jB,EAAUhgB,SACpCrF,KAAKslB,KAAK9e,EAAQjF,OAAS8jB,EAAUhgB,UAGhCmB,EAoQM,OA5Nf,cAxcA,cAhkBA,MACE7E,cACEjF,KAAK4pB,WAAa,GAClB5pB,KAAK6pB,SAAW,GAGlBC,UAAUjtB,EAAM2F,EAAIunB,EAAW,KACxB/pB,KAAK6pB,SAAShtB,KACjBmD,KAAK6pB,SAAShtB,GAAQ,IAGxBmD,KAAK6pB,SAAShtB,GAAMmJ,KAAK,CAAExD,KAAIunB,aAC/B/pB,KAAK6pB,SAAShtB,GAAMilB,MAAK,CAACkI,EAAIC,IAAOD,EAAGD,SAAWE,EAAGF,WAElD/pB,KAAKmG,MACPnG,KAAKmG,KAAK2jB,UAAUjtB,EAAM2F,EAAIunB,GAIlCG,aAAartB,EAAM2F,GACbxC,KAAK6pB,SAAShtB,KAChBmD,KAAK6pB,SAAShtB,GAAQmD,KAAK6pB,SAAShtB,GAAMkJ,QAAOA,GAAWA,EAAOvD,KAAOA,KAGxExC,KAAKmG,MACPnG,KAAKmG,KAAK+jB,aAAartB,EAAM2F,GAIjCyd,aAAapjB,KAASstB,GAMpB,OALInqB,KAAK6pB,SAAShtB,IAChBmD,KAAK6pB,SAAShtB,GAAMwC,SAAS0G,IAC3BokB,EAAK,GAAKpkB,EAAOvD,GAAG4nB,MAAMpqB,KAAMmqB,MAG7BA,EAAK,GAGd9V,GAAGxX,EAAM2F,GACFxC,KAAK4pB,WAAW/sB,KACnBmD,KAAK4pB,WAAW/sB,GAAQ,IAE1BmD,KAAK4pB,WAAW/sB,GAAMmJ,KAAKxD,GAKvBxC,KAAKmG,MACPnG,KAAKmG,KAAKkO,GAAGxX,EAAM2F,GAIvBwjB,IAAInpB,EAAM2F,GACJxC,KAAK4pB,WAAW/sB,KAClBmD,KAAK4pB,WAAW/sB,GAAQmD,KAAK4pB,WAAW/sB,GAAMkJ,QAAO5E,GAAaqB,IAAOrB,KAGvEnB,KAAKmG,MACPnG,KAAKmG,KAAK6f,IAAInpB,EAAM2F,GAIxBmF,SAAS9K,EAAM8lB,GACb,GAAI3iB,KAAKmG,KACP,OAAOnG,KAAKmG,KAAKwB,SAAS9K,EAAM8lB,GAGlC,MAAMnQ,EAAQ,IAAIkQ,GAAgB7lB,EAAM8lB,GAExC,OAAK3iB,KAAK4pB,YAIN5pB,KAAK4pB,WAAW/sB,IAClBmD,KAAK4pB,WAAW/sB,GAAMwC,SAAS8B,IAC7BA,EAAS1E,KAAKuD,KAAMwS,MAIjBA,GATEA,IA8fXyG,cACE,IAAIoR,EACJ,MAAM,WAAEC,GAAetqB,KAAKL,QACvB2qB,EAEMA,EAAWzqB,OAEpBwqB,EAAWC,EAAWzqB,OACbyqB,EAAWC,UAEfD,EAAWtI,QACdsI,EAAWtI,MAAQhiB,KAAKwqB,uBAAuBF,EAAWC,UAGxDD,EAAWtI,QACbqI,EAAWC,EAAWtI,MAAMniB,SAX9BwqB,EAAW,EAgBb,MAAM7X,EAAQxS,KAAK2H,SAAS,WAAY,CACtC2iB,aACAD,aAEF,OAAOrqB,KAAKigB,aAAa,WAAYzN,EAAM6X,SAAUC,GAGvD5B,sBAAsBzf,EAAWrC,GAC/B,OAAO,IAAIuc,GAAQla,EAAWjJ,KAAM4G,GAYtC6hB,YAAY7hB,GACV,MAAM,WAAE0jB,GAAetqB,KAAKL,QAC5B,IAAI8qB,EACAC,MAAMC,QAAQL,GAEhBG,EAAiBH,EAAW1jB,GACnB0jB,GAAcA,EAAWC,UAM7BD,EAAWtI,QACdsI,EAAWtI,MAAQhiB,KAAKwqB,uBAAuBF,EAAWC,UAG5DE,EAAiBH,EAAWtI,MAAMpb,IAGpC,IAAID,EAAW8jB,EAEX9jB,aAAoBikB,UACtBjkB,EAAW3G,KAAK6qB,sBAAsBlkB,IAKxC,MAAM6L,EAAQxS,KAAK2H,SAAS,WAAY,CACtChB,SAAUA,GAAY,GACtBC,UAGF,OAAO5G,KAAKigB,aAAa,WAAYzN,EAAM7L,SAAUC,GASvD4jB,uBAAuBM,GACrB,OAAI9qB,KAAKL,QAAQorB,UAAY/qB,KAAKL,QAAQqrB,cACjCQ,GACLxrB,KAAKL,QAAQorB,SACb/qB,KAAKL,QAAQqrB,cACbF,IACG,GAGA,CAACA,GASVD,sBAAsB9e,GACpB,MAAMpF,EAAW,CACfoF,WAGI0f,EAA6B,MAApB1f,EAAQpJ,QAAkBoJ,EAAUA,EAAQ2f,cAAc,KAEzE,GAAID,EAAQ,CAGV9kB,EAASsc,IAAMwI,EAAO/G,QAAQiH,SAAWF,EAAOrrB,KAE5CqrB,EAAO/G,QAAQkH,aACjBjlB,EAASqd,OAASyH,EAAO/G,QAAQkH,YAGnCjlB,EAAS/B,MAAQ3D,SAASwqB,EAAO/G,QAAQmH,UAAW,IACpDllB,EAAS9B,OAAS5D,SAASwqB,EAAO/G,QAAQoH,WAAY,IAGtDnlB,EAASjC,EAAIiC,EAAS/B,MACtB+B,EAAShC,EAAIgC,EAAS9B,OAElB4mB,EAAO/G,QAAQqH,WACjBplB,EAASvB,KAAOqmB,EAAO/G,QAAQqH,UAGjC,MAAMC,EAAcjgB,EAAQ2f,cAAc,OAEtCM,IAGFrlB,EAASkd,KAAOmI,EAAYC,YAAcD,EAAY/I,IACtDtc,EAASqc,IAAMgJ,EAAY3rB,aAAa,SAGtCorB,EAAO/G,QAAQwH,aAAeT,EAAO/G,QAAQyH,WAC/CxlB,EAASylB,cAAe,GAM5B,OAFApsB,KAAKigB,aAAa,cAAetZ,EAAUoF,EAAS0f,GAE7C9kB,IAuTT1B,YAAYtF,GACV0sB,QACArsB,KAAKL,QAAUA,GAAW,GAC1BK,KAAKuiD,KAAO,EAGd5gC,OACE3hB,KAAKwiD,kBAAoBxiD,KAAKwiD,kBAAkB1kD,KAAKkC,MAGrDwrB,GAAsBxrB,KAAKL,QAAQ4qB,QAASvqB,KAAKL,QAAQ8iD,iBACtDpjD,SAASyrB,IACRA,EAAevpB,iBAAiB,QAASvB,KAAKwiD,mBAAmB,MAIvEA,kBAAkBphD,GAEhB,GA1lCJ,SAAwBA,GACtB,GAAgB,IAAZA,EAAE+Z,OAAe/Z,EAAEga,SAAWha,EAAEia,SAAWja,EAAEka,QAAUla,EAAEma,SAC3D,OAAO,EAwlCHC,CAAepa,IACZxC,OAAOuH,OACqB,IAA5BvH,OAAOqV,UAAUyuC,OACtB,OAUF,IAAIC,EAAe,CAAEz/C,EAAG9B,EAAEsd,QAASvb,EAAG/B,EAAEud,SAEnCgkC,EAAaz/C,GAAMy/C,EAAax/C,IACnCw/C,EAAe,MAGjB,IAAIzS,EAAelwC,KAAK4iD,gBAAgBxhD,GACxC8uC,EAAelwC,KAAKigB,aAAa,eAAgBiwB,EAAc9uC,EAAGpB,MAClE,MAAMsqB,EAAa,CACjBC,QAASnpB,EAAEyhD,eAGT3S,GAAgB,IAClB9uC,EAAEC,iBACFrB,KAAK8iD,YAAY5S,EAAc5lB,EAAYq4B,IAS/CC,gBAAgBxhD,GAEd,GAAIpB,KAAKL,QAAQojD,kBACf,OAAO/iD,KAAKL,QAAQojD,kBAAkBtmD,KAAKuD,KAAMoB,GAGnD,MAAM4hD,EAAgB5hD,EAAEd,OAMlB2iD,EALgBz3B,GACpBxrB,KAAKL,QAAQorB,SACb/qB,KAAKL,QAAQqrB,cACb5pB,EAAEyhD,eAEoCxrC,WACtCmpB,GAASA,IAAUwiB,GAAiBxiB,EAAMxtB,SAASgwC,KAGrD,OAA2B,IAAvBC,EACKA,EACEjjD,KAAKL,QAAQorB,UAAY/qB,KAAKL,QAAQqrB,eAEvC,EAIH,EAUT83B,YAAYl8C,EAAO0jB,EAAYq4B,GAE7B,OAAI/jD,OAAOuH,OAKXnG,KAAKL,QAAQiH,MAAQA,EAGrB5G,KAAKL,QAAQ+a,kBAAoBioC,EAEjC3iD,KAAKkjD,YAAa,EAClBljD,KAAKgpB,QAAQpiB,EAAO0jB,IACb,GAQTtB,QAAQpiB,EAAO0jB,GACb,MAAM,QAAE3qB,GAAYK,KAEhBsqB,IACF3qB,EAAQ2qB,WAAaA,GAIvB,MAAM64B,EAAe,GAEfC,SAAwBzjD,EAAQ0jD,WACtC,GA3pCmB,oBADF7gD,EA4pCD7C,EAAQ0jD,aA1pCrB7gD,EAAGtE,WACHsE,EAAGtE,UAAUgvB,KA0pCdi2B,EAAan9C,KAAKrG,EAAQ0jD,gBACrB,IAAuB,WAAnBD,EACT,MAAM,IAAI5yB,MAAM,+CACX,GAAuB,aAAnB4yB,EAGT,MAAM,IAAI5yB,MAAM,2BAFhB2yB,EAAan9C,KAAKrG,EAAQ0jD,cAjqChC,IAAqB7gD,EAuqCkB,oBAAxB7C,EAAQ2jD,aAEjBH,EAAan9C,KAAKrG,EAAQ2jD,gBAGM,IAA9B3jD,EAAQ4jD,mBAA+B38C,GAAS,IAClD5G,KAAKwjD,kBArKX,SAAuB58C,EAAOwc,GAC5B,MAAMzc,EAAWyc,EAASqF,YAAY7hB,GAEtC,IAAIwc,EAASzb,SAAS,gBAAiB,CAAEf,QAAOD,aAAYyE,iBAI5D,OAAOyd,GAAaliB,EAAUyc,EAAUxc,GA8JX4hB,CAAc5hB,EAAO5G,OAIhD,MAAMyjD,IAAQzjD,KAAKuiD,KACnBj7B,QAAQgN,IAAI6uB,GAAcj+B,MAAMw+B,IAC9B,GAAI1jD,KAAKkjD,WAAY,CACnB,MAAMS,EAAaD,EAAgB,GACnC1jD,KAAK4jD,gBAAgBD,EAAYF,OAKvCG,gBAAgBvnD,EAAQonD,GAMtB,GAAIA,IAAQzjD,KAAKuiD,MAAQviD,KAAKkjD,WAC5B,OAMF,GAHAljD,KAAKkjD,YAAa,EAGdtkD,OAAOuH,KACT,OAIF,MAAMA,EAAyB,kBAAX9J,EACd,IAAIA,EAAOwnD,QAAQ7jD,KAAKL,SACxB,IAAItD,EAAO2D,KAAKL,SAEtBK,KAAKmG,KAAOA,EACZvH,OAAOuH,KAAOA,EAGdnJ,OAAOoC,KAAKY,KAAK4pB,YAAYvqB,SAASxC,IACpCmD,KAAK4pB,WAAW/sB,GAAMwC,SAASmD,IAC7B2D,EAAKkO,GAAGxX,EAAM2F,SAKlBxF,OAAOoC,KAAKY,KAAK6pB,UAAUxqB,SAASxC,IAClCmD,KAAK6pB,SAAShtB,GAAMwC,SAAS0G,IAC3BI,EAAK2jB,UAAUjtB,EAAMkJ,EAAOvD,GAAIuD,EAAOgkB,gBAIvC/pB,KAAKwjD,oBACPr9C,EAAK4D,cAAcqf,WAAWppB,KAAKwjD,mBACnCxjD,KAAKwjD,kBAAoB,MAG3Br9C,EAAKkO,GAAG,WAAW,KAEjBrU,KAAKmG,KAAO,KACZvH,OAAOuH,KAAO,QAGhBA,EAAKwb,OAGPtW,UACMrL,KAAKmG,MACPnG,KAAKmG,KAAKkF,UAGZrL,KAAKkjD,YAAa,EAClBljD,KAAK4pB,WAAa,KAElB4B,GAAsBxrB,KAAKL,QAAQ4qB,QAASvqB,KAAKL,QAAQ8iD,iBACtDpjD,SAASyrB,IACRA,EAAetpB,oBAAoB,QAASxB,KAAKwiD,mBAAmB,QCt1CxEsB,GAA0B,CAC5Br8C,OAAQ,KACRs8C,MAAO,KACPC,UAAW,KACXC,YAAa,KACb/1C,OAAQ,KACRg2C,eAAgB,KAChBC,aAAc,KACdlgC,SAAU,KACVjiB,KAAM,EACNsuC,UAAW,SACXgI,UAAU,EACV8L,eAAgB,GAGdC,GAAuB,CACzB5lD,SAAU,IACVmjC,MAAO,EACP0iB,SAAU,EACV5lD,OAAQ,wBACR6E,MAAO,GAGLghD,GAAkB,CAAC,aAAc,aAAc,aAAc,SAAU,UAAW,UAAW,UAAW,QAAS,SAAU,SAAU,SAAU,OAAQ,QAAS,QAAS,cAAe,SAAU,YAIlMC,GAAQ,CACVC,IAAK,GACLC,QAAS,IAKX,SAASC,GAAOviD,EAAKyB,EAAKC,GACxB,OAAOR,KAAKO,IAAIP,KAAKQ,IAAI1B,EAAKyB,GAAMC,GAGtC,SAAS8gD,GAAehvB,EAAK1E,GAC3B,OAAO0E,EAAIhf,QAAQsa,IAAS,EAG9B,SAAS2zB,GAAeC,EAAM36B,GAC5B,OAAO26B,EAAK16B,MAAM,KAAMD,GAG1B,IAAI,GAAK,CACPuS,IAAK,SAAU3a,GAAK,OAAO2I,MAAMC,QAAQ5I,IACzC6N,IAAK,SAAU7N,GAAK,OAAO6iC,GAAe5nD,OAAOkB,UAAUwxB,SAASjzB,KAAKslB,GAAI,WAC7EgjC,IAAK,SAAUhjC,GAAK,OAAO,GAAG6N,IAAI7N,IAAMA,EAAE5jB,eAAe,gBACzDq5B,IAAK,SAAUzV,GAAK,OAAOA,aAAaijC,YACxCC,IAAK,SAAUljC,GAAK,OAAOA,aAAamjC,kBACxChlD,IAAK,SAAU6hB,GAAK,OAAOA,EAAEob,UAAY,GAAG3F,IAAIzV,IAChD6T,IAAK,SAAU7T,GAAK,MAAoB,kBAANA,GAClCojC,IAAK,SAAUpjC,GAAK,MAAoB,oBAANA,GAClCqjC,IAAK,SAAUrjC,GAAK,MAAoB,qBAANA,GAClCsjC,IAAK,SAAUtjC,GAAK,OAAO,GAAGqjC,IAAIrjC,IAAY,OAANA,GACxCujC,IAAK,SAAUvjC,GAAK,MAAO,qCAAqC8L,KAAK9L,IACrEwjC,IAAK,SAAUxjC,GAAK,MAAO,OAAO8L,KAAK9L,IACvCyjC,IAAK,SAAUzjC,GAAK,MAAO,OAAO8L,KAAK9L,IACvC0jC,IAAK,SAAU1jC,GAAK,OAAQ,GAAGujC,IAAIvjC,IAAM,GAAGwjC,IAAIxjC,IAAM,GAAGyjC,IAAIzjC,IAC7DlkB,IAAK,SAAUkkB,GAAK,OAAQ+hC,GAAwB3lD,eAAe4jB,KAAOsiC,GAAqBlmD,eAAe4jB,IAAY,YAANA,GAAyB,cAANA,IAKzI,SAAS2jC,GAAsB7tB,GAC7B,IAAIhD,EAAQ,cAAc3E,KAAK2H,GAC/B,OAAOhD,EAAQA,EAAM,GAAGhvB,MAAM,KAAK4pB,KAAI,SAAUrxB,GAAK,OAAOyhC,WAAWzhC,MAAS,GAKnF,SAASunD,GAAO9tB,EAAQp5B,GAEtB,IAAIslC,EAAS2hB,GAAsB7tB,GAC/B+tB,EAAOjB,GAAO,GAAGS,IAAIrhB,EAAO,IAAM,EAAIA,EAAO,GAAI,GAAI,KACrD8hB,EAAYlB,GAAO,GAAGS,IAAIrhB,EAAO,IAAM,IAAMA,EAAO,GAAI,GAAI,KAC5D+hB,EAAUnB,GAAO,GAAGS,IAAIrhB,EAAO,IAAM,GAAKA,EAAO,GAAI,GAAI,KACzDl1B,EAAY81C,GAAO,GAAGS,IAAIrhB,EAAO,IAAM,EAAIA,EAAO,GAAI,GAAI,KAC1DgiB,EAAKziD,KAAKI,KAAKmiD,EAAYD,GAC3BI,EAAOF,GAAW,EAAIxiD,KAAKI,KAAKmiD,EAAYD,IAC5CK,EAAKD,EAAO,EAAID,EAAKziD,KAAKI,KAAK,EAAIsiD,EAAOA,GAAQ,EAElDjnD,EAAIinD,EAAO,GAAKA,EAAOD,EAAMl3C,GAAYo3C,GAAMp3C,EAAWk3C,EAE9D,SAASG,EAAO1oD,GACd,IAAIgnC,EAAW/lC,EAAYA,EAAWjB,EAAK,IAAOA,EAMlD,OAJEgnC,EADEwhB,EAAO,EACE1iD,KAAK6iD,KAAK3hB,EAAWwhB,EAAOD,IANnC,EAM8CziD,KAAK6Z,IAAI8oC,EAAKzhB,GAAYzlC,EAAIuE,KAAK+Z,IAAI4oC,EAAKzhB,KAN1F,EAQYzlC,EAAIylC,GAAYlhC,KAAK6iD,KAAK3hB,EAAWuhB,GAE7C,IAANvoD,GAAiB,IAANA,EAAkBA,EAC1B,EAAIgnC,EAuBb,OAAO/lC,EAAWynD,EApBlB,WACE,IAAIE,EAAS5B,GAAME,QAAQ7sB,GAC3B,GAAIuuB,EAAU,OAAOA,EAIrB,IAHA,IAAIC,EAAQ,EAAE,EACVC,EAAU,EACV3yB,EAAO,IAGT,GAAwB,IAApBuyB,EADJI,GAAWD,IAGT,KADA1yB,GACY,GAAM,WAElBA,EAAO,EAGX,IAAIl1B,EAAW6nD,EAAUD,EAAQ,IAEjC,OADA7B,GAAME,QAAQ7sB,GAAUp5B,EACjBA,GASX,SAAS8nD,GAAMA,GAGb,YAFe,IAAVA,IAAmBA,EAAQ,IAEzB,SAAU/oD,GAAK,OAAO8F,KAAKslB,KAAM+7B,GAAOnnD,EAAG,KAAU,GAAM+oD,IAAU,EAAIA,IAKlF,IAqFMC,GAEAC,GAvFFC,GAAS,WAEX,IACIC,EAAkB,GAEtB,SAASC,EAAEC,EAAKC,GAAO,OAAO,EAAM,EAAMA,EAAM,EAAMD,EACtD,SAASE,EAAEF,EAAKC,GAAO,OAAO,EAAMA,EAAM,EAAMD,EAChD,SAASG,EAAEH,GAAY,OAAO,EAAMA,EAEpC,SAASI,EAAWC,EAAIL,EAAKC,GAAO,QAASF,EAAEC,EAAKC,GAAOI,EAAKH,EAAEF,EAAKC,IAAQI,EAAKF,EAAEH,IAAQK,EAC9F,SAASC,EAASD,EAAIL,EAAKC,GAAO,OAAO,EAAMF,EAAEC,EAAKC,GAAOI,EAAKA,EAAK,EAAMH,EAAEF,EAAKC,GAAOI,EAAKF,EAAEH,GAmElG,OA7CA,SAAgBO,EAAKC,EAAKC,EAAKC,GAE7B,GAAM,GAAKH,GAAOA,GAAO,GAAK,GAAKE,GAAOA,GAAO,EAAjD,CACA,IAAIE,EAAe,IAAIC,aAjCF,IAmCrB,GAAIL,IAAQC,GAAOC,IAAQC,EACzB,IAAK,IAAIjrD,EAAI,EAAGA,EApCG,KAoCqBA,EACtCkrD,EAAalrD,GAAK2qD,EAAW3qD,EAAIqqD,EAAiBS,EAAKE,GA8B3D,OAAO,SAAUpkD,GACf,OAAIkkD,IAAQC,GAAOC,IAAQC,GACjB,IAANrkD,GAAiB,IAANA,EAD0BA,EAElC+jD,EAAWS,EAASxkD,GAAImkD,EAAKE,IA7BtC,SAASG,EAASC,GAMhB,IAJA,IAAIC,EAAgB,EAChBC,EAAgB,EACHC,KAEVD,GAAgCL,EAAaK,IAAkBF,IAAME,EAC1ED,GAAiBjB,IAGjBkB,EAEF,IACIE,EAAYH,GADJD,EAAKH,EAAaK,KAAmBL,EAAaK,EAAgB,GAAKL,EAAaK,IACzDlB,EACnCqB,EAAeb,EAASY,EAAWX,EAAKE,GAE5C,OAAIU,GAAgB,KArCxB,SAA8BL,EAAIM,EAASb,EAAKE,GAC9C,IAAK,IAAIhrD,EAAI,EAAGA,EAAI,IAAKA,EAAG,CAC1B,IAAI4rD,EAAef,EAASc,EAASb,EAAKE,GAC1C,GAAqB,IAAjBY,EAAwB,OAAOD,EAEnCA,IADehB,EAAWgB,EAASb,EAAKE,GAAOK,GACzBO,EAExB,OAAOD,EA+BIE,CAAqBR,EAAII,EAAWX,EAAKE,GACtB,IAAjBU,EACFD,EAlDb,SAAyBJ,EAAIS,EAAIC,EAAIjB,EAAKE,GACxC,IAAIlT,EAAUkU,EAAUhsD,EAAI,EAC5B,IAEE83C,EAAW6S,EADXqB,EAAWF,GAAMC,EAAKD,GAAM,EACIhB,EAAKE,GAAOK,GAC7B,EAAOU,EAAKC,EAAmBF,EAAKE,QAC5ChlD,KAAKG,IAAI2wC,GAAY,QAAe93C,EAAI,IACjD,OAAOgsD,EA6CIC,CAAgBZ,EAAIC,EAAeA,EAAgBjB,EAAiBS,EAAKE,KAhE3E,GAiFTkB,IAIEhC,GAAQ,CAAEiC,OAAQ,WAAc,OAAO,SAAUjrD,GAAK,OAAOA,KAE7DipD,GAAkB,CACpBiC,KAAM,WAAc,OAAO,SAAUlrD,GAAK,OAAO,EAAI8F,KAAK6Z,IAAI3f,EAAI8F,KAAKohC,GAAK,KAC5EikB,KAAM,WAAc,OAAO,SAAUnrD,GAAK,OAAO,EAAI8F,KAAKI,KAAK,EAAIlG,EAAIA,KACvEorD,KAAM,WAAc,OAAO,SAAUprD,GAAK,OAAOA,EAAIA,GAAK,EAAIA,EAAI,KAClEqrD,OAAQ,WAAc,OAAO,SAAUrrD,GAErC,IADA,IAAIsrD,EAAM/pD,EAAI,EACPvB,IAAOsrD,EAAOxlD,KAAKylD,IAAI,IAAKhqD,IAAM,GAAK,KAC9C,OAAO,EAAIuE,KAAKylD,IAAI,EAAG,EAAIhqD,GAAK,OAASuE,KAAKylD,KAAa,EAAPD,EAAW,GAAM,GAAKtrD,EAAG,KAE/EwrD,QAAS,SAAUC,EAAWC,QACT,IAAdD,IAAuBA,EAAY,QACxB,IAAXC,IAAoBA,EAAS,IAElC,IAAInnC,EAAI4iC,GAAOsE,EAAW,EAAG,IACzB7qD,EAAIumD,GAAOuE,EAAQ,GAAI,GAC3B,OAAO,SAAU1rD,GACf,OAAc,IAANA,GAAiB,IAANA,EAAWA,GAC3BukB,EAAIze,KAAKylD,IAAI,EAAG,IAAMvrD,EAAI,IAAM8F,KAAK+Z,KAAO7f,EAAI,EAAMY,GAAe,EAAVkF,KAAKohC,IAAUphC,KAAK6lD,KAAK,EAAIpnC,KAAkB,EAAVze,KAAKohC,IAAWtmC,MAKvG,CAAC,OAAQ,QAAS,QAAS,QAAS,QAE1CiB,SAAQ,SAAUxC,EAAMP,GAClCmqD,GAAgB5pD,GAAQ,WAAc,OAAO,SAAUW,GAAK,OAAO8F,KAAKylD,IAAIvrD,EAAGlB,EAAI,QAGrFU,OAAOoC,KAAKqnD,IAAiBpnD,SAAQ,SAAUxC,GAC7C,IAAIusD,EAAS3C,GAAgB5pD,GAC7B2pD,GAAM,SAAW3pD,GAAQusD,EACzB5C,GAAM,UAAY3pD,GAAQ,SAAUklB,EAAGhjB,GAAK,OAAO,SAAUvB,GAAK,OAAO,EAAI4rD,EAAOrnC,EAAGhjB,EAAVqqD,CAAa,EAAI5rD,KAC9FgpD,GAAM,YAAc3pD,GAAQ,SAAUklB,EAAGhjB,GAAK,OAAO,SAAUvB,GAAK,OAAOA,EAAI,GAAM4rD,EAAOrnC,EAAGhjB,EAAVqqD,CAAiB,EAAJ5rD,GAAS,EACzG,EAAI4rD,EAAOrnC,EAAGhjB,EAAVqqD,EAAkB,EAAL5rD,EAAS,GAAK,IACjCgpD,GAAM,YAAc3pD,GAAQ,SAAUklB,EAAGhjB,GAAK,OAAO,SAAUvB,GAAK,OAAOA,EAAI,IAAO,EAAI4rD,EAAOrnC,EAAGhjB,EAAVqqD,CAAa,EAAQ,EAAJ5rD,IAAU,GAClH4rD,EAAOrnC,EAAGhjB,EAAVqqD,CAAiB,EAAJ5rD,EAAQ,GAAK,GAAK,OAG7BgpD,IAIT,SAAS6C,GAAa3qD,EAAQD,GAC5B,GAAI,GAAG0mD,IAAIzmD,GAAW,OAAOA,EAC7B,IAAI7B,EAAO6B,EAAOmH,MAAM,KAAK,GACzBtB,EAAOikD,GAAO3rD,GACdstB,EAAOu7B,GAAsBhnD,GACjC,OAAQ7B,GACN,IAAK,SAAW,OAAO8oD,GAAOjnD,EAAQD,GACtC,IAAK,cAAgB,OAAOomD,GAAe6B,GAAQv8B,GACnD,IAAK,QAAU,OAAO06B,GAAe0B,GAAOp8B,GAC5C,QAAU,OAAO06B,GAAetgD,EAAM4lB,IAM1C,SAASm/B,GAAa1zB,GACpB,IAEE,OADYr1B,SAASgrB,iBAAiBqK,GAEtC,MAAMx0B,GACN,QAMJ,SAASmoD,GAAY7sB,EAAK79B,GAIxB,IAHA,IAAImkC,EAAMtG,EAAI78B,OACV2pD,EAAU5pD,UAAUC,QAAU,EAAID,UAAU,QAAK,EACjD6pD,EAAS,GACJntD,EAAI,EAAGA,EAAI0mC,EAAK1mC,IACvB,GAAIA,KAAKogC,EAAK,CACZ,IAAIt6B,EAAMs6B,EAAIpgC,GACVuC,EAASpC,KAAK+sD,EAASpnD,EAAK9F,EAAGogC,IACjC+sB,EAAOzjD,KAAK5D,GAIlB,OAAOqnD,EAGT,SAASC,GAAahtB,GACpB,OAAOA,EAAIitB,QAAO,SAAU5nC,EAAGhjB,GAAK,OAAOgjB,EAAEnhB,OAAO,GAAG87B,IAAI39B,GAAK2qD,GAAa3qD,GAAKA,KAAO,IAG3F,SAASs1B,GAAQt3B,GACf,OAAI,GAAG2/B,IAAI3/B,GAAaA,GACpB,GAAG64B,IAAI74B,KAAMA,EAAIusD,GAAavsD,IAAMA,GACpCA,aAAasuB,UAAYtuB,aAAa6sD,eAAyB,GAAG1iD,MAAMzK,KAAKM,GAC1E,CAACA,IAGV,SAAS8sD,GAAcntB,EAAKt6B,GAC1B,OAAOs6B,EAAIve,MAAK,SAAU4D,GAAK,OAAOA,IAAM3f,KAK9C,SAAS0nD,GAAY/sD,GACnB,IAAI8yB,EAAQ,GACZ,IAAK,IAAIzxB,KAAKrB,EAAK8yB,EAAMzxB,GAAKrB,EAAEqB,GAChC,OAAOyxB,EAGT,SAASk6B,GAAmBC,EAAIC,GAC9B,IAAIltD,EAAI+sD,GAAYE,GACpB,IAAK,IAAI5rD,KAAK4rD,EAAMjtD,EAAEqB,GAAK6rD,EAAG9rD,eAAeC,GAAK6rD,EAAG7rD,GAAK4rD,EAAG5rD,GAC7D,OAAOrB,EAGT,SAASmtD,GAAaF,EAAIC,GACxB,IAAIltD,EAAI+sD,GAAYE,GACpB,IAAK,IAAI5rD,KAAK6rD,EAAMltD,EAAEqB,GAAK,GAAGgnD,IAAI4E,EAAG5rD,IAAM6rD,EAAG7rD,GAAK4rD,EAAG5rD,GACtD,OAAOrB,EA+CT,SAASotD,GAAW/nD,GAClB,OAAI,GAAGmjD,IAAInjD,IA1CPmjD,EAAM,kCAAkCr1B,KAD3Bk6B,EA2CmBhoD,IAzCtB,QAAWmjD,EAAI,GAAM,MAAS6E,EA0CxC,GAAG9E,IAAIljD,GAvCb,SAAmBioD,GACjB,IACI/E,EAAM+E,EAASxpD,QADT,oCACsB,SAAUnE,EAAGU,EAAG+8B,EAAGp7B,GAAK,OAAO3B,EAAIA,EAAI+8B,EAAIA,EAAIp7B,EAAIA,KAC/EwmD,EAAM,4CAA4Cr1B,KAAKo1B,GAI3D,MAAQ,QAHArkD,SAASskD,EAAI,GAAI,IAGH,IAFdtkD,SAASskD,EAAI,GAAI,IAEO,IADxBtkD,SAASskD,EAAI,GAAI,IACiB,MAgChB+E,CAAUloD,GAChC,GAAGojD,IAAIpjD,GA9Bb,SAAmBmoD,GACjB,IAaIntD,EAAG+8B,EAAGp7B,EAbNymD,EAAM,0CAA0Ct1B,KAAKq6B,IAAa,uDAAuDr6B,KAAKq6B,GAC9H5lD,EAAI1D,SAASukD,EAAI,GAAI,IAAM,IAC3BnnD,EAAI4C,SAASukD,EAAI,GAAI,IAAM,IAC3BjpD,EAAI0E,SAASukD,EAAI,GAAI,IAAM,IAC3BzjC,EAAIyjC,EAAI,IAAM,EAClB,SAASgF,EAAQpsD,EAAGqsD,EAAGjtD,GAGrB,OAFIA,EAAI,IAAKA,GAAK,GACdA,EAAI,IAAKA,GAAK,GACdA,EAAI,EAAE,EAAYY,EAAc,GAATqsD,EAAIrsD,GAASZ,EACpCA,EAAI,GAAcitD,EAClBjtD,EAAI,EAAE,EAAYY,GAAKqsD,EAAIrsD,IAAM,EAAE,EAAIZ,GAAK,EACzCY,EAGT,GAAS,GAALC,EACFjB,EAAI+8B,EAAIp7B,EAAIxC,MACP,CACL,IAAIkuD,EAAIluD,EAAI,GAAMA,GAAK,EAAI8B,GAAK9B,EAAI8B,EAAI9B,EAAI8B,EACxCD,EAAI,EAAI7B,EAAIkuD,EAChBrtD,EAAIotD,EAAQpsD,EAAGqsD,EAAG9lD,EAAI,EAAE,GACxBw1B,EAAIqwB,EAAQpsD,EAAGqsD,EAAG9lD,GAClB5F,EAAIyrD,EAAQpsD,EAAGqsD,EAAG9lD,EAAI,EAAE,GAE1B,MAAQ,QAAe,IAAJvH,EAAW,IAAW,IAAJ+8B,EAAW,IAAW,IAAJp7B,EAAW,IAAMgjB,EAAI,IAMlD2oC,CAAUtoD,QAApC,EA7CF,IAAmBgoD,EACb7E,EAiDN,SAASoF,GAAQvoD,GACf,IAAIyD,EAAQ,6GAA6GqqB,KAAK9tB,GAC9H,GAAIyD,EAAS,OAAOA,EAAM,GAU5B,SAAS+kD,GAAiBxoD,EAAKyoD,GAC7B,OAAK,GAAG1F,IAAI/iD,GACLA,EAAIyoD,EAAWvqD,OAAQuqD,EAAWznD,GAAIynD,EAAWC,OAD7B1oD,EAI7B,SAAS/B,GAAawC,EAAIyB,GACxB,OAAOzB,EAAGxC,aAAaiE,GAGzB,SAASymD,GAAgBloD,EAAItF,EAAOytD,GAElC,GAAInB,GAAc,CAACmB,EAAM,MAAO,MAAO,QADvBL,GAAQptD,IACsC,OAAOA,EACrE,IAAI6oD,EAAS5B,GAAMC,IAAIlnD,EAAQytD,GAC/B,IAAK,GAAG5F,IAAIgB,GAAW,OAAOA,EAC9B,IACI6E,EAAS1qD,SAASkC,cAAcI,EAAGF,SACnCuoD,EAAYroD,EAAGqgB,YAAergB,EAAGqgB,aAAe3iB,SAAasC,EAAGqgB,WAAa3iB,SAASG,KAC1FwqD,EAASpoD,YAAYmoD,GACrBA,EAAO9mD,MAAMgnD,SAAW,WACxBF,EAAO9mD,MAAMS,MALE,IAKiBomD,EAChC,IAAII,EANW,IAMSH,EAAOrrB,YAC/BsrB,EAASzpB,YAAYwpB,GACrB,IAAII,EAAgBD,EAASvrB,WAAWtiC,GAExC,OADAinD,GAAMC,IAAIlnD,EAAQytD,GAAQK,EACnBA,EAGT,SAASC,GAAYzoD,EAAIyB,EAAM0mD,GAC7B,GAAI1mD,KAAQzB,EAAGsB,MAAO,CACpB,IAAIonD,EAAoBjnD,EAAKzD,QAAQ,kBAAmB,SAASE,cAC7DxD,EAAQsF,EAAGsB,MAAMG,IAASw3B,iBAAiBj5B,GAAIk5B,iBAAiBwvB,IAAsB,IAC1F,OAAOP,EAAOD,GAAgBloD,EAAItF,EAAOytD,GAAQztD,GAIrD,SAASiuD,GAAiB3oD,EAAIyB,GAC5B,OAAI,GAAGpE,IAAI2C,KAAQ,GAAGoiD,IAAIpiD,MAAS,GAAGwiD,IAAIhlD,GAAawC,EAAIyB,KAAW,GAAGkzB,IAAI30B,IAAOA,EAAGyB,IAAkB,YACrG,GAAGpE,IAAI2C,IAAOgnD,GAActF,GAAiBjgD,GAAgB,YAC7D,GAAGpE,IAAI2C,IAAiB,cAATyB,GAAwBgnD,GAAYzoD,EAAIyB,GAAiB,MAC5D,MAAZzB,EAAGyB,GAAwB,cAA/B,EAGF,SAASmnD,GAAqB5oD,GAC5B,GAAK,GAAG3C,IAAI2C,GAAZ,CAIO,IAHP,IAGInG,EAHAk5B,EAAM/yB,EAAGsB,MAAMC,WAAa,GAC5BsnD,EAAO,oBACPC,EAAa,IAAIC,IACPlvD,EAAIgvD,EAAIx7B,KAAK0F,IAAQ+1B,EAAWpvB,IAAI7/B,EAAE,GAAIA,EAAE,IAC1D,OAAOivD,GAGT,SAASE,GAAkBhpD,EAAIipD,EAAUjB,EAAYG,GACnD,IAAIe,EAAanH,GAAekH,EAAU,SAAW,EAAI,EA3D3D,SAA0BA,GACxB,OAAIlH,GAAekH,EAAU,cAA6B,gBAAbA,EAAqC,KAC9ElH,GAAekH,EAAU,WAAalH,GAAekH,EAAU,QAAkB,WAArF,EAyD6DE,CAAiBF,GAC1EvuD,EAAQkuD,GAAqB5oD,GAAI1F,IAAI2uD,IAAaC,EAKtD,OAJIlB,IACFA,EAAWc,WAAW13B,KAAKsI,IAAIuvB,EAAUvuD,GACzCstD,EAAWc,WAAiB,KAAIG,GAE3Bd,EAAOD,GAAgBloD,EAAItF,EAAOytD,GAAQztD,EAGnD,SAAS0uD,GAAuB3rD,EAAQwrD,EAAUd,EAAMH,GACtD,OAAQW,GAAiBlrD,EAAQwrD,IAC/B,IAAK,YAAa,OAAOD,GAAkBvrD,EAAQwrD,EAAUjB,EAAYG,GACzE,IAAK,MAAO,OAAOM,GAAYhrD,EAAQwrD,EAAUd,GACjD,IAAK,YAAa,OAAO3qD,GAAaC,EAAQwrD,GAC9C,QAAS,OAAOxrD,EAAOwrD,IAAa,GAIxC,SAASI,GAAiBp2B,EAAIh0B,GAC5B,IAAIqqD,EAAW,gBAAgBj8B,KAAK4F,GACpC,IAAKq2B,EAAY,OAAOr2B,EACxB,IAAIs2B,EAAIzB,GAAQ70B,IAAO,EACnB5yB,EAAI28B,WAAW/9B,GACfqB,EAAI08B,WAAW/J,EAAGj1B,QAAQsrD,EAAS,GAAI,KAC3C,OAAQA,EAAS,GAAG,IAClB,IAAK,IAAK,OAAOjpD,EAAIC,EAAIipD,EACzB,IAAK,IAAK,OAAOlpD,EAAIC,EAAIipD,EACzB,IAAK,IAAK,OAAOlpD,EAAIC,EAAIipD,GAI7B,SAASC,GAAcjqD,EAAK4oD,GAC1B,GAAI,GAAGvF,IAAIrjD,GAAQ,OAAO+nD,GAAW/nD,GACrC,GAAI,MAAMyrB,KAAKzrB,GAAQ,OAAOA,EAC9B,IAAIkqD,EAAe3B,GAAQvoD,GACvBmqD,EAAWD,EAAelqD,EAAI86C,OAAO,EAAG96C,EAAIvC,OAASysD,EAAazsD,QAAUuC,EAChF,OAAI4oD,EAAeuB,EAAWvB,EACvBuB,EAMT,SAASC,GAAYxpD,EAAIC,GACvB,OAAOK,KAAKI,KAAKJ,KAAKylD,IAAI9lD,EAAGC,EAAIF,EAAGE,EAAG,GAAKI,KAAKylD,IAAI9lD,EAAGE,EAAIH,EAAGG,EAAG,IAkBpE,SAASspD,GAAkB5pD,GAIzB,IAHA,IAEI6pD,EAFA1P,EAASn6C,EAAGm6C,OACZ2P,EAAc,EAETrwD,EAAI,EAAIA,EAAI0gD,EAAO4P,cAAetwD,IAAK,CAC9C,IAAIg7C,EAAa0F,EAAO6P,QAAQvwD,GAC5BA,EAAI,IAAKqwD,GAAeH,GAAYE,EAAapV,IACrDoV,EAAcpV,EAEhB,OAAOqV,EAUT,SAASG,GAAejqD,GACtB,GAAIA,EAAGiqD,eAAkB,OAAOjqD,EAAGiqD,iBACnC,OAAOjqD,EAAGF,QAAQ5B,eAChB,IAAK,SAAU,OArCnB,SAAyB8B,GACvB,OAAiB,EAAVS,KAAKohC,GAASrkC,GAAawC,EAAI,KAoCdkqD,CAAgBlqD,GACtC,IAAK,OAAQ,OAlCjB,SAAuBA,GACrB,OAAoC,EAA5BxC,GAAawC,EAAI,SAA8C,EAA7BxC,GAAawC,EAAI,UAiCrCmqD,CAAcnqD,GAClC,IAAK,OAAQ,OA/BjB,SAAuBA,GACrB,OAAO2pD,GACL,CAACtpD,EAAG7C,GAAawC,EAAI,MAAOM,EAAG9C,GAAawC,EAAI,OAChD,CAACK,EAAG7C,GAAawC,EAAI,MAAOM,EAAG9C,GAAawC,EAAI,QA4B5BoqD,CAAcpqD,GAClC,IAAK,WAAY,OAAO4pD,GAAkB5pD,GAC1C,IAAK,UAAW,OAdpB,SAA0BA,GACxB,IAAIm6C,EAASn6C,EAAGm6C,OAChB,OAAOyP,GAAkB5pD,GAAM2pD,GAAYxP,EAAO6P,QAAQ7P,EAAO4P,cAAgB,GAAI5P,EAAO6P,QAAQ,IAY3EK,CAAiBrqD,IAqB5C,SAASsqD,GAAaC,EAAQ/tC,GAC5B,IAAImY,EAAMnY,GAAW,GACjBguC,EAAc71B,EAAI30B,IAXxB,SAAwBA,GAEtB,IADA,IAAIqoD,EAAWroD,EAAGqgB,WACX,GAAGsU,IAAI0zB,IACP,GAAG1zB,IAAI0zB,EAAShoC,aACrBgoC,EAAWA,EAAShoC,WAEtB,OAAOgoC,EAKqBoC,CAAeF,GACvCG,EAAOF,EAAYzrD,wBACnB4rD,EAAcntD,GAAagtD,EAAa,WACxCzoD,EAAQ2oD,EAAK3oD,MACbC,EAAS0oD,EAAK1oD,OACd4oD,EAAUj2B,EAAIi2B,UAAYD,EAAcA,EAAY3nD,MAAM,KAAO,CAAC,EAAG,EAAGjB,EAAOC,IACnF,MAAO,CACLhC,GAAIwqD,EACJI,QAASA,EACTvqD,EAAGuqD,EAAQ,GAAK,EAChBtqD,EAAGsqD,EAAQ,GAAK,EAChB/oD,EAAGE,EACHD,EAAGE,EACH6oD,GAAID,EAAQ,GACZE,GAAIF,EAAQ,IAiBhB,SAASG,GAAgBna,EAAMjP,EAAUqpB,GACvC,SAAS1gD,EAAM2K,QACG,IAAXA,IAAoBA,EAAS,GAElC,IAAIvb,EAAIioC,EAAW1sB,GAAU,EAAI0sB,EAAW1sB,EAAS,EACrD,OAAO27B,EAAK5wC,GAAGirD,iBAAiBvxD,GAElC,IAAIi7B,EAAM21B,GAAa1Z,EAAK5wC,GAAI4wC,EAAKjc,KACjCp5B,EAAI+O,IACJ4gD,EAAK5gD,GAAO,GACZnK,EAAKmK,EAAM,GACX6gD,EAASH,EAAwB,EAAIr2B,EAAI9yB,EAAI8yB,EAAIk2B,GACjDO,EAASJ,EAAwB,EAAIr2B,EAAI7yB,EAAI6yB,EAAIm2B,GACrD,OAAQla,EAAKx1C,UACX,IAAK,IAAK,OAAQG,EAAE8E,EAAIs0B,EAAIt0B,GAAK8qD,EACjC,IAAK,IAAK,OAAQ5vD,EAAE+E,EAAIq0B,EAAIr0B,GAAK8qD,EACjC,IAAK,QAAS,OAA8C,IAAvC3qD,KAAK6yC,MAAMnzC,EAAGG,EAAI4qD,EAAG5qD,EAAGH,EAAGE,EAAI6qD,EAAG7qD,GAAWI,KAAKohC,IAM3E,SAASwpB,GAAe9rD,EAAK4oD,GAG3B,IAAImD,EAAM,6CACN5wD,EAAQ8uD,GAAe,GAAGtH,IAAI3iD,GAAOA,EAAIuqD,YAAcvqD,EAAM4oD,GAAQ,GACzE,MAAO,CACLoD,SAAU7wD,EACV8wD,QAAS9wD,EAAMs3B,MAAMs5B,GAAO5wD,EAAMs3B,MAAMs5B,GAAK1+B,IAAIpmB,QAAU,CAAC,GAC5DilD,QAAU,GAAG14B,IAAIxzB,IAAQ4oD,EAAQztD,EAAMsI,MAAMsoD,GAAO,IAMxD,SAASI,GAAaC,GAEpB,OAAOjF,GADYiF,EAAW9E,GAAa,GAAGhtB,IAAI8xB,GAAWA,EAAQ/+B,IAAI4E,IAAWA,GAAQm6B,IAAa,IACxE,SAAUjlC,EAAMpZ,EAAK+mB,GAAQ,OAAOA,EAAKtgB,QAAQ2S,KAAUpZ,KAG9F,SAASs+C,GAAeD,GACtB,IAAIE,EAASH,GAAaC,GAC1B,OAAOE,EAAOj/B,KAAI,SAAUjyB,EAAGlB,GAC7B,MAAO,CAACgE,OAAQ9C,EAAG4F,GAAI9G,EAAGwuD,MAAO4D,EAAO7uD,OAAQ8rD,WAAY,CAAE13B,KAAMw3B,GAAqBjuD,QAM7F,SAASmxD,GAAwBrqD,EAAMsqD,GACrC,IAAIC,EAAW/E,GAAY8E,GAG3B,GADI,UAAU/gC,KAAKghC,EAASnwD,UAAWmwD,EAASpwD,SAAWknD,GAAOkJ,EAASnwD,SACvE,GAAGg+B,IAAIp4B,GAAO,CAChB,IAAI/H,EAAI+H,EAAKzE,OACS,IAANtD,IAAY,GAAGqzB,IAAItrB,EAAK,IAMtCA,EAAO,CAAC/G,MAAO+G,GAHV,GAAG6gD,IAAIyJ,EAAcnwD,YAAaowD,EAASpwD,SAAWmwD,EAAcnwD,SAAWlC,GAMxF,IAAIuyD,EAAY,GAAGpyB,IAAIp4B,GAAQA,EAAO,CAACA,GACvC,OAAOwqD,EAAUr/B,KAAI,SAAUO,EAAG1zB,GAChC,IAAIszB,EAAO,GAAGA,IAAII,KAAO,GAAG+0B,IAAI/0B,GAAMA,EAAI,CAACzyB,MAAOyyB,GAKlD,OAHI,GAAGo1B,IAAIx1B,EAAIgS,SAAUhS,EAAIgS,MAAStlC,EAA0B,EAAtBsyD,EAAchtB,OAEpD,GAAGwjB,IAAIx1B,EAAI00B,YAAa10B,EAAI00B,SAAWhoD,IAAMwyD,EAAUjvD,OAAS,EAAI+uD,EAActK,SAAW,GAC1F10B,KACNH,KAAI,SAAUsG,GAAK,OAAOm0B,GAAan0B,EAAG84B,MA2B/C,SAASE,GAAcH,EAAe7qB,GACpC,IAAIirB,EAAa,GACbC,EAAYlrB,EAAOkrB,UAEvB,IAAK,IAAI7wD,KADL6wD,IAAalrB,EAASmmB,GA1B5B,SAA0B+E,GAmBxB,IAlBA,IAAIC,EAAgB3F,GAAYG,GAAauF,EAAUx/B,KAAI,SAAU5xB,GAAO,OAAOb,OAAOoC,KAAKvB,QAAW,SAAUO,GAAK,OAAO,GAAGP,IAAIO,MACtIurD,QAAO,SAAU5nC,EAAEhjB,GAA0C,OAAjCgjB,EAAEnL,QAAQ7X,GAAK,GAAKgjB,EAAE/b,KAAKjH,GAAagjB,IAAM,IACvEitC,EAAa,GACbhtD,EAAO,SAAW1F,GACpB,IAAIwvD,EAAWoD,EAAc5yD,GAC7B0yD,EAAWlD,GAAYmD,EAAUx/B,KAAI,SAAU5xB,GAC7C,IAAIsxD,EAAS,GACb,IAAK,IAAI/wD,KAAKP,EACR,GAAGA,IAAIO,GACLA,GAAK0tD,IAAYqD,EAAO5xD,MAAQM,EAAIO,IAExC+wD,EAAO/wD,GAAKP,EAAIO,GAGpB,OAAO+wD,MAIF7yD,EAAI,EAAGA,EAAI4yD,EAAcrvD,OAAQvD,IAAK0F,EAAM1F,GACrD,OAAO0yD,EAMgCI,CAAiBH,GAAYlrB,IACtDA,EACR,GAAGlmC,IAAIO,IACT4wD,EAAWhpD,KAAK,CACdnJ,KAAMuB,EACNixD,OAAQV,GAAwB5qB,EAAO3lC,GAAIwwD,KAIjD,OAAOI,EAoBT,SAASM,GAAgBhrD,EAAMumD,GAC7B,IAAI0E,EACJ,OAAOjrD,EAAK+qD,OAAO5/B,KAAI,SAAUjyB,GAC/B,IAAIgyD,EAlBR,SAA8BA,EAAO3E,GACnC,IAAIrtD,EAAI,GACR,IAAK,IAAIY,KAAKoxD,EAAO,CACnB,IAAIjyD,EAAQqtD,GAAiB4E,EAAMpxD,GAAIysD,GACnC,GAAGnuB,IAAIn/B,IAEY,KADrBA,EAAQA,EAAMkyB,KAAI,SAAUO,GAAK,OAAO46B,GAAiB56B,EAAG66B,OAClDhrD,SAAgBtC,EAAQA,EAAM,IAE1CC,EAAEY,GAAKb,EAIT,OAFAC,EAAEiB,SAAWohC,WAAWriC,EAAEiB,UAC1BjB,EAAEokC,MAAQ/B,WAAWriC,EAAEokC,OAChBpkC,EAMOiyD,CAAqBjyD,EAAGqtD,GAChC6E,EAAaF,EAAMjyD,MACnBu4B,EAAK,GAAG4G,IAAIgzB,GAAcA,EAAW,GAAKA,EAC1CC,EAAShF,GAAQ70B,GACjB85B,EAAgB3D,GAAuBpB,EAAWvqD,OAAQgE,EAAKzH,KAAM8yD,EAAQ9E,GAC7EgF,EAAgBN,EAAgBA,EAAcz5B,GAAGs4B,SAAWwB,EAC5D9tD,EAAO,GAAG46B,IAAIgzB,GAAcA,EAAW,GAAKG,EAC5CC,EAAWnF,GAAQ7oD,IAAS6oD,GAAQiF,GACpC5E,EAAO2E,GAAUG,EAYrB,OAXI,GAAG1K,IAAItvB,KAAOA,EAAK+5B,GACvBL,EAAM1tD,KAAOosD,GAAepsD,EAAMkpD,GAClCwE,EAAM15B,GAAKo4B,GAAehC,GAAiBp2B,EAAIh0B,GAAOkpD,GACtDwE,EAAMxhD,MAAQuhD,EAAgBA,EAAc3gD,IAAM,EAClD4gD,EAAM5gD,IAAM4gD,EAAMxhD,MAAQwhD,EAAM5tB,MAAQ4tB,EAAM/wD,SAAW+wD,EAAMlL,SAC/DkL,EAAM9wD,OAAS2qD,GAAamG,EAAM9wD,OAAQ8wD,EAAM/wD,UAChD+wD,EAAMO,OAAS,GAAGhL,IAAI2K,GACtBF,EAAM3B,sBAAwB2B,EAAMO,QAAU,GAAGv4B,IAAIqzB,EAAWvqD,QAChEkvD,EAAMQ,QAAU,GAAGvK,IAAI+J,EAAM1tD,KAAKssD,UAC9BoB,EAAMQ,UAAWR,EAAMjsD,MAAQ,GACnCgsD,EAAgBC,EACTA,KAMX,IAAIS,GAAmB,CACrBn4B,IAAK,SAAUt6B,EAAGY,EAAG4xB,GAAK,OAAOxyB,EAAE2G,MAAM/F,GAAK4xB,GAC9CkgC,UAAW,SAAU1yD,EAAGY,EAAG4xB,GAAK,OAAOxyB,EAAE0hB,aAAa9gB,EAAG4xB,IACzDhyB,OAAQ,SAAUR,EAAGY,EAAG4xB,GAAK,OAAOxyB,EAAEY,GAAK4xB,GAC3C5rB,UAAW,SAAU5G,EAAGY,EAAG4xB,EAAG27B,EAAYz8B,GAExC,GADAy8B,EAAW13B,KAAKsI,IAAIn+B,EAAG4xB,GACnB5xB,IAAMutD,EAAWwE,MAAQjhC,EAAQ,CACnC,IAAI0G,EAAM,GACV+1B,EAAW13B,KAAK50B,SAAQ,SAAU9B,EAAO+G,GAAQsxB,GAAOtxB,EAAO,IAAM/G,EAAQ,QAC7EC,EAAE2G,MAAMC,UAAYwxB,KAO1B,SAASw6B,GAAgB5B,EAASQ,GACdP,GAAeD,GACrBnvD,SAAQ,SAAUwrD,GAC5B,IAAK,IAAI5sD,KAAY+wD,EAAY,CAC/B,IAAIzxD,EAAQqtD,GAAiBoE,EAAW/wD,GAAW4sD,GAC/CvqD,EAASuqD,EAAWvqD,OACpB+vD,EAAY1F,GAAQptD,GACpBqyD,EAAgB3D,GAAuB3rD,EAAQrC,EAAUoyD,EAAWxF,GAEpE/0B,EAAKo2B,GAAiBG,GAAc9uD,EAD7B8yD,GAAa1F,GAAQiF,IACsBA,GAClDU,EAAW9E,GAAiBlrD,EAAQrC,GACxCgyD,GAAiBK,GAAUhwD,EAAQrC,EAAU63B,EAAI+0B,EAAWc,YAAY,OAwB9E,SAAS4E,GAAcC,EAAaxB,GAClC,OAAOzF,GAAYG,GAAa8G,EAAY/gC,KAAI,SAAUo7B,GACxD,OAAOmE,EAAWv/B,KAAI,SAAUnrB,GAC9B,OApBN,SAAyBumD,EAAYvmD,GACnC,IAAIgsD,EAAW9E,GAAiBX,EAAWvqD,OAAQgE,EAAKzH,MACxD,GAAIyzD,EAAU,CACZ,IAAIjB,EAASC,GAAgBhrD,EAAMumD,GAC/B4F,EAAYpB,EAAOA,EAAOxvD,OAAS,GACvC,MAAO,CACLuF,KAAMkrD,EACNryD,SAAUqG,EAAKzH,KACfguD,WAAYA,EACZwE,OAAQA,EACR5wD,SAAUgyD,EAAU7hD,IACpBgzB,MAAOytB,EAAO,GAAGztB,MACjB0iB,SAAUmM,EAAUnM,WAQboM,CAAgB7F,EAAYvmD,WAElC,SAAUyd,GAAK,OAAQ,GAAGqjC,IAAIrjC,MAKrC,SAAS4uC,GAAmBrkD,EAAYsiD,GACtC,IAAIgC,EAAatkD,EAAWzM,OACxBgxD,EAAc,SAAUC,GAAQ,OAAOA,EAAK1M,eAAiB0M,EAAK1M,eAAiB,GACnF2M,EAAU,GAId,OAHAA,EAAQtyD,SAAWmyD,EAAattD,KAAKQ,IAAIsmB,MAAM9mB,KAAMgJ,EAAWmjB,KAAI,SAAUqhC,GAAQ,OAAOD,EAAYC,GAAQA,EAAKryD,aAAgBmwD,EAAcnwD,SACpJsyD,EAAQnvB,MAAQgvB,EAAattD,KAAKO,IAAIumB,MAAM9mB,KAAMgJ,EAAWmjB,KAAI,SAAUqhC,GAAQ,OAAOD,EAAYC,GAAQA,EAAKlvB,UAAagtB,EAAchtB,MAC9ImvB,EAAQzM,SAAWsM,EAAaG,EAAQtyD,SAAW6E,KAAKQ,IAAIsmB,MAAM9mB,KAAMgJ,EAAWmjB,KAAI,SAAUqhC,GAAQ,OAAOD,EAAYC,GAAQA,EAAKryD,SAAWqyD,EAAKxM,aAAgBsK,EAActK,SAChLyM,EAGT,IAAIC,GAAa,EAwBjB,IAAIC,GAAkB,GAElBC,GAAS,WACX,IAAIz6C,EAOJ,SAAS85B,EAAK/yC,GAMZ,IAFA,IAAI2zD,EAAwBF,GAAgBpxD,OACxCvD,EAAI,EACDA,EAAI60D,GAAuB,CAChC,IAAIC,EAAiBH,GAAgB30D,GAChC80D,EAAe5Y,QAIlByY,GAAgBz5C,OAAOlb,EAAG,GAC1B60D,MAJAC,EAAeC,KAAK7zD,GACpBlB,KAMJma,EAAMna,EAAI,EAAIgG,sBAAsBiuC,QAAQzwC,EAqB9C,MAJwB,qBAAbS,UACTA,SAASgB,iBAAiB,oBAf5B,WACO+vD,GAAMC,4BAEPC,KAEF/6C,EAAMU,qBAAqBV,IAG3Bw6C,GAAgB5xD,SACd,SAAU+jB,GAAY,OAAOA,EAAUquC,2BAEzCP,UAnCJ,WACOz6C,GAAS+6C,MAAuBF,GAAMC,6BAA8BN,GAAgBpxD,OAAS,KAChG4W,EAAMnU,sBAAsBiuC,KALrB,GAgDb,SAASihB,KACP,QAASjxD,UAAYA,SAASmxD,OAKhC,SAASJ,GAAMvtB,QACG,IAAXA,IAAoBA,EAAS,IAGlC,IACIhZ,EADAhpB,EAAY,EAAG4vD,EAAW,EAAGt/C,EAAM,EACzBu/C,EAAiB,EAC3BrqC,EAAU,KAEd,SAASsqC,EAAYzuC,GACnB,IAAI0uC,EAAUlzD,OAAO0oB,SAAW,IAAIA,SAAQ,SAAUyqC,GAAY,OAAOxqC,EAAUwqC,KAEnF,OADA3uC,EAAS4uC,SAAWF,EACbA,EAGT,IAAI1uC,EA5FN,SAA2B2gB,GACzB,IAAIkuB,EAAmBlI,GAAmBjG,GAAyB/f,GAC/D6qB,EAAgB7E,GAAmB1F,GAAsBtgB,GACzDirB,EAAaD,GAAcH,EAAe7qB,GAC1CysB,EAAc/B,GAAe1qB,EAAOyqB,SACpCliD,EAAaikD,GAAcC,EAAaxB,GACxC+B,EAAUJ,GAAmBrkD,EAAYsiD,GACzCxrD,EAAK4tD,GAET,OADAA,KACO9G,GAAa+H,EAAkB,CACpC7uD,GAAIA,EACJ2nB,SAAU,GACVylC,YAAaA,EACblkD,WAAYA,EACZ7N,SAAUsyD,EAAQtyD,SAClBmjC,MAAOmvB,EAAQnvB,MACf0iB,SAAUyM,EAAQzM,WA4EL4N,CAAkBnuB,GACnB8tB,EAAYzuC,GAE1B,SAAS+uC,IACP,IAAI7hB,EAAYltB,EAASktB,UACP,cAAdA,IACFltB,EAASktB,UAA0B,WAAdA,EAAyB,SAAW,WAE3DltB,EAASgvC,UAAYhvC,EAASgvC,SAC9BrnC,EAAS1rB,SAAQ,SAAUmhC,GAAS,OAAOA,EAAM4xB,SAAWhvC,EAASgvC,YAGvE,SAASC,EAAW37C,GAClB,OAAO0M,EAASgvC,SAAWhvC,EAAS3kB,SAAWiY,EAAOA,EAGxD,SAAS47C,IACPvwD,EAAY,EACZ4vD,EAAWU,EAAWjvC,EAASnhB,cAAgB,EAAIqvD,GAAMttB,OAG3D,SAASuuB,EAAU77C,EAAM8pB,GACnBA,GAASA,EAAMgyB,KAAK97C,EAAO8pB,EAAM4jB,gBAWvC,SAASqO,EAAsBC,GAI7B,IAHA,IAAIp2D,EAAI,EACJgQ,EAAa8W,EAAS9W,WACtBqmD,EAAmBrmD,EAAWzM,OAC3BvD,EAAIq2D,GAAkB,CAC3B,IAAI7B,EAAOxkD,EAAWhQ,GAClBuuD,EAAaiG,EAAKjG,WAClBwE,EAASyB,EAAKzB,OACduD,EAAcvD,EAAOxvD,OAAS,EAC9B2vD,EAAQH,EAAOuD,GAEfA,IAAepD,EAAQjG,GAAY8F,GAAQ,SAAU7xD,GAAK,OAAQk1D,EAAUl1D,EAAEoR,OAAS,IAAM4gD,GAQjG,IAPA,IAAIlJ,EAAU3B,GAAO+N,EAAUlD,EAAMxhD,MAAQwhD,EAAM5tB,MAAO,EAAG4tB,EAAM/wD,UAAY+wD,EAAM/wD,SACjFo0D,EAAQ7xD,MAAMslD,GAAW,EAAIkJ,EAAM9wD,OAAO4nD,GAC1CgI,EAAUkB,EAAM15B,GAAGw4B,QACnB/qD,EAAQisD,EAAMjsD,MACd8qD,EAAU,GACVyE,EAAkBtD,EAAM15B,GAAGu4B,QAAQxuD,OACnC2kC,OAAW,EACNzmC,EAAI,EAAGA,EAAI+0D,EAAiB/0D,IAAK,CACxC,IAAIR,OAAQ,EACRw1D,EAAWvD,EAAM15B,GAAGu4B,QAAQtwD,GAC5Bi1D,EAAaxD,EAAM1tD,KAAKusD,QAAQtwD,IAAM,EAIxCR,EAHGiyD,EAAMO,OAGDnC,GAAgB4B,EAAMjyD,MAAOs1D,EAAQE,EAAUvD,EAAM3B,uBAFrDmF,EAAcH,GAASE,EAAWC,GAIxCzvD,IACIisD,EAAMQ,SAAWjyD,EAAI,IACzBR,EAAQ+F,KAAKC,MAAMhG,EAAQgG,GAASA,IAGxC8qD,EAAQroD,KAAKzI,GAGf,IAAI01D,EAAgB3E,EAAQzuD,OAC5B,GAAKozD,EAEE,CACLzuB,EAAW8pB,EAAQ,GACnB,IAAK,IAAIjwD,EAAI,EAAGA,EAAI40D,EAAe50D,IAAK,CAC9BiwD,EAAQjwD,GAAhB,IACIU,EAAIuvD,EAAQjwD,EAAI,GAChB60D,EAAM7E,EAAQhwD,GACb2C,MAAMkyD,KAIP1uB,GAHGzlC,EAGSm0D,EAAMn0D,EAFNm0D,EAAM,WATxB1uB,EAAW6pB,EAAQ,GAgBrB4B,GAAiBa,EAAK1rD,MAAMylD,EAAWvqD,OAAQwwD,EAAK7yD,SAAUumC,EAAUqmB,EAAWc,YACnFmF,EAAKqC,aAAe3uB,EACpBloC,KAIJ,SAAS82D,EAAYC,GACfjwC,EAASiwC,KAAQjwC,EAASkwC,aAAelwC,EAASiwC,GAAIjwC,GAS5D,SAASmwC,EAAoBC,GAC3B,IAAIC,EAAcrwC,EAAS3kB,SACvBi1D,EAAWtwC,EAASwe,MACpB+xB,EAAcF,EAAcrwC,EAASkhC,SACrCoO,EAAUL,EAAWmB,GACzBpwC,EAASohB,SAAWmgB,GAAQ+N,EAAUe,EAAe,IAAK,EAAG,KAC7DrwC,EAASwwC,gBAAkBlB,EAAUtvC,EAASnhB,YAC1C8oB,GArFN,SAA8BrU,GAC5B,GAAK0M,EAASwwC,gBAGZ,IAAK,IAAIC,EAAMjC,EAAgBiC,KAAUtB,EAAU77C,EAAMqU,EAAS8oC,SAFlE,IAAK,IAAIv3D,EAAI,EAAGA,EAAIs1D,EAAgBt1D,IAAOi2D,EAAU77C,EAAMqU,EAASzuB,IAmFtDw3D,CAAqBpB,IAChCtvC,EAAS2wC,OAAS3wC,EAASnhB,YAAc,IAC5CmhB,EAAS2wC,OAAQ,EACjBX,EAAY,WAEThwC,EAAS4wC,WAAa5wC,EAASnhB,YAAc,IAChDmhB,EAAS4wC,WAAY,EACrBZ,EAAY,cAEVV,GAAWgB,GAAqC,IAAzBtwC,EAASnhB,aAClCwwD,EAAsB,IAEnBC,GAAWiB,GAAevwC,EAASnhB,cAAgBwxD,IAAiBA,IACvEhB,EAAsBgB,GAEpBf,EAAUgB,GAAYhB,EAAUiB,GAC7BvwC,EAAS6wC,cACZ7wC,EAAS6wC,aAAc,EACvB7wC,EAAS8wC,iBAAkB,EAC3Bd,EAAY,gBAEdA,EAAY,UACZX,EAAsBC,IAElBtvC,EAAS6wC,cACX7wC,EAAS8wC,iBAAkB,EAC3B9wC,EAAS6wC,aAAc,EACvBb,EAAY,mBAGhBhwC,EAASnhB,YAAc0iD,GAAO+N,EAAS,EAAGe,GACtCrwC,EAAS2wC,OAASX,EAAY,UAC9BI,GAAcC,IAChB9B,EAAW,EA7CTvuC,EAAS+wC,YAAoC,IAAvB/wC,EAAS+wC,WACjC/wC,EAAS+wC,YA8CJ/wC,EAAS+wC,WAYZpyD,EAAYsQ,EACZ+gD,EAAY,gBACZhwC,EAAS4wC,WAAY,EACM,cAAvB5wC,EAASktB,WACX6hB,MAfF/uC,EAASo1B,QAAS,EACbp1B,EAASgxC,YACZhxC,EAASgxC,WAAY,EACrBhB,EAAY,gBACZA,EAAY,aACPhwC,EAASkwC,aAAe,YAAa10D,SACxC2oB,IACUsqC,EAAYzuC,OAyFhC,OA3EAA,EAAS5b,MAAQ,WACf,IAAI8oC,EAAYltB,EAASktB,UACzBltB,EAASkwC,aAAc,EACvBlwC,EAASnhB,YAAc,EACvBmhB,EAASohB,SAAW,EACpBphB,EAASo1B,QAAS,EAClBp1B,EAAS2wC,OAAQ,EACjB3wC,EAAS4wC,WAAY,EACrB5wC,EAAS6wC,aAAc,EACvB7wC,EAASgxC,WAAY,EACrBhxC,EAAS8wC,iBAAkB,EAC3B9wC,EAASwwC,iBAAkB,EAC3BxwC,EAASgvC,SAAyB,YAAd9hB,EACpBltB,EAAS+wC,UAAY/wC,EAASphB,KAC9B+oB,EAAW3H,EAAS2H,SAEpB,IAAK,IAAIzuB,EADTs1D,EAAiB7mC,EAASlrB,OACGvD,KAAQ8mB,EAAS2H,SAASzuB,GAAGkL,SACtD4b,EAASgvC,WAA8B,IAAlBhvC,EAASphB,MAAgC,cAAdsuC,GAA+C,IAAlBltB,EAASphB,OAAeohB,EAAS+wC,YAClH1B,EAAsBrvC,EAASgvC,SAAWhvC,EAAS3kB,SAAW,IAIhE2kB,EAASquC,sBAAwBa,EAIjClvC,EAASmZ,IAAM,SAASiyB,EAASQ,GAE/B,OADAoB,GAAgB5B,EAASQ,GAClB5rC,GAGTA,EAASiuC,KAAO,SAAS7zD,GACvB6U,EAAM7U,EACDuE,IAAaA,EAAYsQ,GAC9BkhD,GAAqBlhD,GAAOs/C,EAAW5vD,IAAcuvD,GAAMttB,QAG7D5gB,EAASovC,KAAO,SAAS97C,GACvB68C,EAAoBlB,EAAW37C,KAGjC0M,EAASixC,MAAQ,WACfjxC,EAASo1B,QAAS,EAClB8Z,KAGFlvC,EAASkxC,KAAO,WACTlxC,EAASo1B,SACVp1B,EAASgxC,WAAahxC,EAAS5b,QACnC4b,EAASo1B,QAAS,EAClByY,GAAgBjrD,KAAKod,GACrBkvC,IACApB,OAGF9tC,EAASmxC,QAAU,WACjBpC,IACA/uC,EAASgxC,WAAYhxC,EAASgvC,SAC9BE,KAGFlvC,EAASoxC,QAAU,WACjBpxC,EAAS5b,QACT4b,EAASkxC,QAGXlxC,EAAS7d,OAAS,SAASipD,GAEzBiG,GADmBlG,GAAaC,GACQprC,IAG1CA,EAAS5b,QAEL4b,EAASk1B,UAAYl1B,EAASkxC,OAE3BlxC,EAMT,SAASsxC,GAA4BC,EAAcroD,GACjD,IAAK,IAAIyV,EAAIzV,EAAWzM,OAAQkiB,KAC1B8nC,GAAc8K,EAAcroD,EAAWyV,GAAG8oC,WAAWvqD,SACvDgM,EAAWkL,OAAOuK,EAAG,GAK3B,SAAS0yC,GAA0BE,EAAcvxC,GAC/C,IAAI9W,EAAa8W,EAAS9W,WACtBye,EAAW3H,EAAS2H,SACxB2pC,GAA4BC,EAAcroD,GAC1C,IAAK,IAAI3P,EAAIouB,EAASlrB,OAAQlD,KAAM,CAClC,IAAI6jC,EAAQzV,EAASpuB,GACjBi4D,EAAkBp0B,EAAMl0B,WAC5BooD,GAA4BC,EAAcC,GACrCA,EAAgB/0D,QAAW2gC,EAAMzV,SAASlrB,QAAUkrB,EAASvT,OAAO7a,EAAG,GAEzE2P,EAAWzM,QAAWkrB,EAASlrB,QAAUujB,EAASixC,QAiGzD/C,GAAMuD,QAAU,QAChBvD,GAAMttB,MAAQ,EAEdstB,GAAMC,2BAA4B,EAClCD,GAAM/Y,QAAU0Y,GAChBK,GAAM/rD,OAnGN,SAA0CipD,GAExC,IADA,IAAImG,EAAepG,GAAaC,GACvBlyD,EAAI20D,GAAgBpxD,OAAQvD,KAAM,CAEzCm4D,GAA0BE,EADX1D,GAAgB30D,MAiGnCg1D,GAAMn0D,IAAM8uD,GACZqF,GAAM/0B,IAAM6zB,GACZkB,GAAMwD,UAAY/J,GAClBuG,GAAM7d,KAvsBN,SAAiBA,EAAMshB,GACrB,IAAI3H,EAAS,GAAGx3B,IAAI6d,GAAQ6V,GAAa7V,GAAM,GAAKA,EAChDr1C,EAAI22D,GAAW,IACnB,OAAO,SAAS92D,GACd,MAAO,CACLA,SAAUA,EACV4E,GAAIuqD,EACJ51B,IAAK21B,GAAaC,GAClBT,YAAaG,GAAeM,IAAWhvD,EAAI,QAgsBjDkzD,GAAM0D,cA7uBN,SAAuBnyD,GACrB,IAAIoyD,EAAanI,GAAejqD,GAEhC,OADAA,EAAGqc,aAAa,mBAAoB+1C,GAC7BA,GA2uBT3D,GAAM4D,QA/FN,SAAiB9yD,EAAK2hC,QACJ,IAAXA,IAAoBA,EAAS,IAElC,IAAIuM,EAAYvM,EAAOuM,WAAa,SAChC5xC,EAASqlC,EAAOrlC,OAAS2qD,GAAatlB,EAAOrlC,QAAU,KACvDwrC,EAAOnG,EAAOmG,KACdtiC,EAAOm8B,EAAOn8B,KACdutD,EAAYpxB,EAAOjiC,MAAQ,EAC3BszD,EAA0B,UAAdD,EACZE,EAA2B,WAAdF,EACbG,EAAyB,SAAdH,EACXI,EAAU,GAAG74B,IAAIt6B,GACjBozD,EAAOD,EAAU11B,WAAWz9B,EAAI,IAAMy9B,WAAWz9B,GACjDqzD,EAAOF,EAAU11B,WAAWz9B,EAAI,IAAM,EACtC4oD,EAAOL,GAAQ4K,EAAUnzD,EAAI,GAAKA,IAAQ,EAC1C4L,EAAQ+1B,EAAO/1B,OAAS,GAAKunD,EAAUC,EAAO,GAC9CE,EAAS,GACTC,EAAW,EACf,OAAO,SAAU9yD,EAAIvG,EAAGkB,GAItB,GAHI43D,IAAaD,EAAY,GACzBE,IAAcF,GAAa33D,EAAI,GAAK,GACpC83D,IAAYH,EAAY33D,EAAI,IAC3Bk4D,EAAO71D,OAAQ,CAClB,IAAK,IAAI+G,EAAQ,EAAGA,EAAQpJ,EAAGoJ,IAAS,CACtC,GAAKsjC,EAEE,CACL,IAAI0rB,EAASP,GAAkCnrB,EAAK,GAAG,GAAG,EAAhCirB,EAAUjrB,EAAK,GACrC2rB,EAASR,GAA8CnrB,EAAK,GAAG,GAAG,EAA5C5mC,KAAK+M,MAAM8kD,EAAUjrB,EAAK,IAGhD4rB,EAAYF,EAFNhvD,EAAMsjC,EAAK,GAGjB6rB,EAAYF,EAFNvyD,KAAK+M,MAAMzJ,EAAMsjC,EAAK,IAG5B3sC,EAAQ+F,KAAKI,KAAKoyD,EAAYA,EAAYC,EAAYA,GAC7C,MAATnuD,IAAgBrK,GAASu4D,GAChB,MAATluD,IAAgBrK,GAASw4D,GAC7BL,EAAO1vD,KAAKzI,QAXZm4D,EAAO1vD,KAAK1C,KAAKG,IAAI0xD,EAAYvuD,IAanC+uD,EAAWryD,KAAKQ,IAAIsmB,MAAM9mB,KAAMoyD,GAE9Bh3D,IAAUg3D,EAASA,EAAOjmC,KAAI,SAAUrtB,GAAO,OAAO1D,EAAO0D,EAAMuzD,GAAYA,MACjE,YAAdrlB,IAA2BolB,EAASA,EAAOjmC,KAAI,SAAUrtB,GAAO,OAAOwF,EAAQxF,EAAM,GAAY,EAAPA,GAAYA,EAAMkB,KAAKG,IAAIkyD,EAAWvzD,OAGtI,OAAO4L,GADOunD,GAAWE,EAAOD,GAAQG,EAAWH,IACxBlyD,KAAKC,MAAkB,IAAZmyD,EAAOp5D,IAAY,KAAQ0uD,IAoDrEsG,GAAM0E,SA9CN,SAAkBjyB,QACA,IAAXA,IAAoBA,EAAS,IAElC,IAAIkyB,EAAK3E,GAAMvtB,GA4Bf,OA3BAkyB,EAAGx3D,SAAW,EACdw3D,EAAG9wD,IAAM,SAAS+wD,EAAgB9R,GAChC,IAAI+R,EAAUlF,GAAgBr6C,QAAQq/C,GAClClrC,EAAWkrC,EAAGlrC,SAElB,SAASuoC,EAAY8C,GAAOA,EAAI9C,aAAc,EAD1C6C,GAAW,GAAKlF,GAAgBz5C,OAAO2+C,EAAS,GAEpD,IAAK,IAAI75D,EAAI,EAAGA,EAAIyuB,EAASlrB,OAAQvD,IAAOg3D,EAAYvoC,EAASzuB,IACjE,IAAI+5D,EAAYnM,GAAagM,EAAgBnM,GAAmB1F,GAAsBtgB,IACtFsyB,EAAU7H,QAAU6H,EAAU7H,SAAWzqB,EAAOyqB,QAChD,IAAI8H,EAAaL,EAAGx3D,SACpB43D,EAAU/d,UAAW,EACrB+d,EAAU/lB,UAAY2lB,EAAG3lB,UACzB+lB,EAAUjS,eAAiB,GAAGgB,IAAIhB,GAAkBkS,EAAapK,GAAiB9H,EAAgBkS,GAClGhD,EAAY2C,GACZA,EAAGzD,KAAK6D,EAAUjS,gBAClB,IAAIgS,EAAM9E,GAAM+E,GAChB/C,EAAY8C,GACZrrC,EAAS/kB,KAAKowD,GACd,IAAIrF,EAAUJ,GAAmB5lC,EAAUgZ,GAO3C,OANAkyB,EAAGr0B,MAAQmvB,EAAQnvB,MACnBq0B,EAAG3R,SAAWyM,EAAQzM,SACtB2R,EAAGx3D,SAAWsyD,EAAQtyD,SACtBw3D,EAAGzD,KAAK,GACRyD,EAAGzuD,QACCyuD,EAAG3d,UAAY2d,EAAG3B,OACf2B,GAEFA,GAgBT3E,GAAM5yD,OAAS2qD,GACfiI,GAAM9I,OAASA,GACf8I,GAAMiF,OAAS,SAAU1yD,EAAKC,GAAO,OAAOR,KAAK+M,MAAM/M,KAAKizD,UAAYzyD,EAAMD,EAAM,IAAMA,GAE3E,IC3vCLib,GAsEI03C,GACAC,GACAC,GAuCAC,GA0BA30C,GACA7b,GACAywD,GA4DAC,GA6FAC,GA8CAC,GAEAvmD,GA7UJylD,GDovCK,MClwCE,IAAIe,GAAmB,CACtCzsC,QAAS,qBACTQ,SAAU,MACVs4B,WAAY,kBAAM,0CAEX1hC,OAEC7C,GAmXPve,SAAS+F,gBA5WF2vD,GAAK3E,GAAM0E,SAAU,CACvBt3D,OAAQ,iBACRD,SAAU,IACV65C,UAAU,IAEbnzC,IAAI,CACDqpD,QAAS,UACTznC,QAAS,EACTtoB,SAAU,IACVslD,MAAO,SAAS+M,GACZlyD,OAAOgmC,SAAS,EAAG,MAG1Bz/B,IAAI,CACDqpD,QAAS,aACTznC,QAAS,EACT9C,SAAU,SAAS6sC,GACfvwD,SAASmrB,cAAc,cAAcvnB,MAAM8yD,WAAa,SACxD12D,SAASmrB,cAAc,cAAcvnB,MAAM4U,QAAU,UAG5D5T,IAAI,CACDqpD,QAAS,YACT0I,WAAY,EAAE,IAAK,GACnBnwC,QAAS,CAAC,EAAG,IACd,SACF5hB,IAAI,CACDqpD,QAAS,eACTznC,QAAS,CAAC,EAAG,GACbtoB,SAAU,MAEb0G,IAAI,CACDqpD,QAAS,CAAC,oBACV0I,WAAY,CAAC,IAAK,GAClBnwC,QAAS,CAAC,EAAG,GACb6a,MAAO0vB,GAAM4D,QAAQ,OASH30D,SAASmrB,cAAc,gBAGzC5M,GAAKhM,UAAU3N,IAAI,cAEnBvG,OAAO2C,iBAAiB,QAAQ,WAC5Bud,GAAKhM,UAAUvN,OAAO,cACtBuZ,GAAKhM,UAAU3N,IAAI,aACnB8wD,GAAG3B,WAWDkC,GAAej2D,SAASmrB,cAAc,0BACtC+qC,GAAcl2D,SAASmrB,cAAc,uBACrCgrC,GAAWn2D,SAASmrB,cAAc,QAElC8qC,IAAgBC,KAEtBD,GAAaj1D,iBAAiB,SAAS,SAASH,GAC5CA,EAAEC,iBACFm1D,GAAa1jD,UAAUS,OAAO,cAC9BmjD,GAAS5jD,UAAUS,OAAO,mBAG9BkjD,GAAYlrC,iBAAiB,oBAAoBlsB,SAAQ,SAAS83D,GAE9DA,EAAK51D,iBAAiB,SAAS,SAASH,GAGhCxC,OAAO+uB,WAAW,sBAAsBC,UACxC4oC,GAAa1jD,UAAUS,OAAO,cAC9BmjD,GAAS5jD,UAAUS,OAAO,uBAKtC3U,OAAO2C,iBAAiB,UAAU,WAG1B3C,OAAO+uB,WAAW,sBAAsBC,UACpC8oC,GAAS5jD,UAAUE,SAAS,iBAAiB0jD,GAAS5jD,UAAUvN,OAAO,gBACvEixD,GAAa1jD,UAAUE,SAAS,eAAewjD,GAAa1jD,UAAUvN,OAAO,oBAYnFoxD,GAAMp2D,SAASmrB,cAAc,eAMnC9sB,OAAO2C,iBAAiB,UAAU,WAEpB3C,OAAOuhC,QAJC,EAOdw2B,GAAI7jD,UAAU3N,IAAI,UAElBwxD,GAAI7jD,UAAUvN,OAAO,aAavByc,GAAQ,GACR7b,GAAO5F,SAASgrB,iBAAiB,SAAS,GAC1CqrC,GAAar2D,SAASgrB,iBAAiB,eAEvCplB,IAAQywD,KAEdA,GAAWv3D,SAAQ,SAAS+3D,GAExB,IAAIC,EAAQD,EACRE,EAAYD,EAAM3rC,cAAc,2BAChC1M,EAAQq4C,EAAM3rC,cAAc,sBAC5B6rC,EAAUF,EAAM3rC,cAAc,wBAC9B8rC,EAAY,OAASx4C,EAAMlU,UAAY,QACvC2sD,EAAcF,EAAQzsD,UACtB1K,EAAOk3D,EAAUj3D,aAAa,QAC9Bmf,EAAO83C,EAAU5yC,QAAQlF,KAAK3Z,MAAM,KAIpC0jB,EAAO,CACPtG,IAAO7iB,EACPsE,EALS8a,EAAK,GAMd7a,EALS6a,EAAK,IAQd+3C,IACAhuC,EAAKvK,MAAQw4C,EAAUz6B,OAAS06B,EAAY16B,QAGhD/a,GAAMhc,KAAKujB,MAKfqtC,GAAWv3D,SAAQ,SAAS+3D,EAAW96D,GAEnB86D,EAAU1rC,cAAc,2BAE9BnqB,iBAAiB,SAAS,SAASH,GAEzCA,EAAEC,iBAEF,IAAI1B,EAAU,CACViH,MAAOtK,EACP6pB,iBAAiB,GAIN,IAAIuxC,UAAWvxD,GAAMwxD,qBAAsB31C,GAAOriB,GACxDgiB,cAaXk1C,GAASt2D,SAASgrB,iBAAiB,wBAEzC3sB,OAAO2C,iBAAiB,UAExB,WAEI,IAAI4+B,EAAUvhC,OAAOc,YAErBm3D,GAAOx3D,SAAQ,SAASilC,GAEpB,IAAMszB,EAAiBh5D,OAAO4H,YACxBqxD,EAAcvzB,EAAQ8I,UAA8B,GAAjBwqB,EAAwBA,EAC3DE,EAAcxzB,EAAQvE,aAEtBg4B,EAAS53B,EAAU03B,GAAc13B,GADpB03B,EAAaC,EAE1BE,EAAa1zB,EAAQxxB,UAAUE,SAAS,eAE1C+kD,IAAYC,GAEZ1G,GAAM,CACF9C,QAASlqB,EAAQ/Y,iBAAiB,qBAClCxE,QAAS,CAAC,EAAG,GACbmwC,WAAY,CAAC,IAAK,GAClBt1B,MAAO0vB,GAAM4D,QAAQ,IAAK,CAAClnD,MAAO,MAClCvP,SAAU,IACVC,OAAQ,iBACRqlD,MAAO,SAAS+M,GACZxsB,EAAQxxB,UAAU3N,IAAI,wBAezB,IAAI8yD,EAAO,UAAW,CAEnC1tB,cAAe,EACfa,OAAQ,QACR7B,aAAc,IACdQ,gBAAgB,EAChB/F,MAAO,IACPiU,WAAY,CACRC,OAAQ,4BACRC,OAAQ,6BAEZ+f,WAAY,CACRr1D,GAAI,qBACJs1D,WAAW,KAaL53D,SAASgrB,iBAAiB,cAElClsB,SAAQ,SAAS2gC,GAEnBA,EAAIz+B,iBAAiB,SAAS,SAASH,GAC/BA,EAAEd,OAAOstB,QAAQ,uBACjBxsB,EAAE6W,kBACF7W,EAAEd,OAAO6vB,cAAcrd,UAAU3N,IAAI,UAErC6R,YAAW,WACPgpB,EAAI77B,MAAM4U,QAAU,SACrB,aAcT+9C,GAAcv2D,SAASmrB,cAAc,iBAKvC9sB,OAAOuhC,SANI,KAMe22B,GAAYhkD,UAAU3N,IAAI,mBAExDvG,OAAO2C,iBAAiB,UAAU,WAC1B3C,OAAOuhC,SATA,IAUH22B,GAAYhkD,UAAUE,SAAS,oBAAoB8jD,GAAYhkD,UAAU3N,IAAI,mBAEjF2xD,GAAYhkD,UAAUvN,OAAO,uBAmC/BwxD,GAAWx2D,SAASgrB,iBAAiB,iBAErC/a,GAAS,IAAIlS,IAAO,CACtBE,UAAW,EACXC,SAAU,KACVC,OAAQ,iBACRC,UAAWC,QA7BO,CAClBw5D,WAAY,SAAU56D,EAAGuB,EAAGpC,EAAGC,GAE3B,OAAOD,GADPa,GAAKZ,GACUY,EAAIuB,GAEvBs5D,YAAa,SAAU76D,EAAGuB,EAAGpC,EAAGC,GAE5B,OAAQD,GADRa,GAAKZ,IACWY,EAAI,GAAKuB,GAE7Bu5D,cAAe,SAAU96D,EAAGuB,EAAGpC,EAAGC,GAE9B,OADAY,GAAKZ,EAAE,GACC,EAAUD,EAAE,EAAEa,EAAEA,EAAIuB,GAEpBpC,EAAE,KADVa,GACkBA,EAAE,GAAK,GAAKuB,GAElCw5D,eAAgB,SAAU/6D,EAAGuB,EAAGpC,EAAGC,GAE/B,OADAY,GAAKZ,EAAE,GACC,EAAUD,EAAE,EAAEa,EAAEA,EAAEA,EAAIuB,EAEvBpC,EAAE,IADTa,GAAK,GACSA,EAAEA,EAAI,GAAKuB,KAajCg4D,GAAS13D,SAAQ,SAASm+B,GACtBhtB,GAAOvQ,gBAAgBu9B","file":"js/plugins-2e744226b39ef42e7f58.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 = \"/packs/\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 11);\n","/*!\n * MoveTo - A lightweight scroll animation javascript library without any dependency.\n * Version 1.8.2 (28-06-2019 14:30)\n * Licensed under MIT\n * Copyright 2019 Hasan Aydoğdu \n */\n\n\"use strict\";\n\nvar MoveTo = function () {\n /**\n * Defaults\n * @type {object}\n */\n var defaults = {\n tolerance: 0,\n duration: 800,\n easing: 'easeOutQuart',\n container: window,\n callback: function callback() {}\n };\n /**\n * easeOutQuart Easing Function\n * @param {number} t - current time\n * @param {number} b - start value\n * @param {number} c - change in value\n * @param {number} d - duration\n * @return {number} - calculated value\n */\n\n function easeOutQuart(t, b, c, d) {\n t /= d;\n t--;\n return -c * (t * t * t * t - 1) + b;\n }\n /**\n * Merge two object\n *\n * @param {object} obj1\n * @param {object} obj2\n * @return {object} merged object\n */\n\n\n function mergeObject(obj1, obj2) {\n var obj3 = {};\n Object.keys(obj1).forEach(function (propertyName) {\n obj3[propertyName] = obj1[propertyName];\n });\n Object.keys(obj2).forEach(function (propertyName) {\n obj3[propertyName] = obj2[propertyName];\n });\n return obj3;\n }\n\n ;\n /**\n * Converts camel case to kebab case\n * @param {string} val the value to be converted\n * @return {string} the converted value\n */\n\n function kebabCase(val) {\n return val.replace(/([A-Z])/g, function ($1) {\n return '-' + $1.toLowerCase();\n });\n }\n\n ;\n /**\n * Count a number of item scrolled top\n * @param {Window|HTMLElement} container\n * @return {number}\n */\n\n function countScrollTop(container) {\n if (container instanceof HTMLElement) {\n return container.scrollTop;\n }\n\n return container.pageYOffset;\n }\n\n ;\n /**\n * MoveTo Constructor\n * @param {object} options Options\n * @param {object} easeFunctions Custom ease functions\n */\n\n function MoveTo() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var easeFunctions = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n this.options = mergeObject(defaults, options);\n this.easeFunctions = mergeObject({\n easeOutQuart: easeOutQuart\n }, easeFunctions);\n }\n /**\n * Register a dom element as trigger\n * @param {HTMLElement} dom Dom trigger element\n * @param {function} callback Callback function\n * @return {function|void} unregister function\n */\n\n\n MoveTo.prototype.registerTrigger = function (dom, callback) {\n var _this = this;\n\n if (!dom) {\n return;\n }\n\n var href = dom.getAttribute('href') || dom.getAttribute('data-target'); // The element to be scrolled\n\n var target = href && href !== '#' ? document.getElementById(href.substring(1)) : document.body;\n var options = mergeObject(this.options, _getOptionsFromTriggerDom(dom, this.options));\n\n if (typeof callback === 'function') {\n options.callback = callback;\n }\n\n var listener = function listener(e) {\n e.preventDefault();\n\n _this.move(target, options);\n };\n\n dom.addEventListener('click', listener, false);\n return function () {\n return dom.removeEventListener('click', listener, false);\n };\n };\n /**\n * Move\n * Scrolls to given element by using easeOutQuart function\n * @param {HTMLElement|number} target Target element to be scrolled or target position\n * @param {object} options Custom options\n */\n\n\n MoveTo.prototype.move = function (target) {\n var _this2 = this;\n\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n if (target !== 0 && !target) {\n return;\n }\n\n options = mergeObject(this.options, options);\n var distance = typeof target === 'number' ? target : target.getBoundingClientRect().top;\n var from = countScrollTop(options.container);\n var startTime = null;\n var lastYOffset;\n distance -= options.tolerance; // rAF loop\n\n var loop = function loop(currentTime) {\n var currentYOffset = countScrollTop(_this2.options.container);\n\n if (!startTime) {\n // To starts time from 1, we subtracted 1 from current time\n // If time starts from 1 The first loop will not do anything,\n // because easing value will be zero\n startTime = currentTime - 1;\n }\n\n var timeElapsed = currentTime - startTime;\n\n if (lastYOffset) {\n if (distance > 0 && lastYOffset > currentYOffset || distance < 0 && lastYOffset < currentYOffset) {\n return options.callback(target);\n }\n }\n\n lastYOffset = currentYOffset;\n\n var val = _this2.easeFunctions[options.easing](timeElapsed, from, distance, options.duration);\n\n options.container.scroll(0, val);\n\n if (timeElapsed < options.duration) {\n window.requestAnimationFrame(loop);\n } else {\n options.container.scroll(0, distance + from);\n options.callback(target);\n }\n };\n\n window.requestAnimationFrame(loop);\n };\n /**\n * Adds custom ease function\n * @param {string} name Ease function name\n * @param {function} fn Ease function\n */\n\n\n MoveTo.prototype.addEaseFunction = function (name, fn) {\n this.easeFunctions[name] = fn;\n };\n /**\n * Returns options which created from trigger dom element\n * @param {HTMLElement} dom Trigger dom element\n * @param {object} options The instance's options\n * @return {object} The options which created from trigger dom element\n */\n\n\n function _getOptionsFromTriggerDom(dom, options) {\n var domOptions = {};\n Object.keys(options).forEach(function (key) {\n var value = dom.getAttribute(\"data-mt-\".concat(kebabCase(key)));\n\n if (value) {\n domOptions[key] = isNaN(value) ? value : parseInt(value, 10);\n }\n });\n return domOptions;\n }\n\n return MoveTo;\n}();\n\nif (typeof module !== 'undefined') {\n module.exports = MoveTo;\n} else {\n window.MoveTo = MoveTo;\n}","/*!\n * PhotoSwipe 5.2.4 - https://photoswipe.com\n * (c) 2022 Dmytro Semenov\n */\n/**\r\n * Creates element and optionally appends it to another.\r\n *\r\n * @param {String} className\r\n * @param {String|NULL} tagName\r\n * @param {Element|NULL} appendToEl\r\n */\r\nfunction createElement(className, tagName, appendToEl) {\r\n const el = document.createElement(tagName || 'div');\r\n if (className) {\r\n el.className = className;\r\n }\r\n if (appendToEl) {\r\n appendToEl.appendChild(el);\r\n }\r\n return el;\r\n}\r\n\r\nfunction equalizePoints(p1, p2) {\r\n p1.x = p2.x;\r\n p1.y = p2.y;\r\n if (p2.id !== undefined) {\r\n p1.id = p2.id;\r\n }\r\n return p1;\r\n}\r\n\r\n\r\nfunction roundPoint(p) {\r\n p.x = Math.round(p.x);\r\n p.y = Math.round(p.y);\r\n}\r\n\r\n/**\r\n * Returns distance between two points.\r\n *\r\n * @param {Object} p1 Point\r\n * @param {Object} p2 Point\r\n */\r\nfunction getDistanceBetween(p1, p2) {\r\n const x = Math.abs(p1.x - p2.x);\r\n const y = Math.abs(p1.y - p2.y);\r\n return Math.sqrt((x * x) + (y * y));\r\n}\r\n\r\n/**\r\n * Whether X and Y positions of points are qual\r\n *\r\n * @param {Object} p1\r\n * @param {Object} p2\r\n */\r\nfunction pointsEqual(p1, p2) {\r\n return p1.x === p2.x && p1.y === p2.y;\r\n}\r\n\r\n/**\r\n * The float result between the min and max values.\r\n *\r\n * @param {Number} val\r\n * @param {Number} min\r\n * @param {Number} max\r\n */\r\nfunction clamp(val, min, max) {\r\n return Math.min(Math.max(val, min), max);\r\n}\r\n\r\n/**\r\n * Get transform string\r\n *\r\n * @param {Number} x\r\n * @param {Number|null} y\r\n * @param {Number|null} scale\r\n */\r\nfunction toTransformString(x, y, scale) {\r\n let propValue = 'translate3d('\r\n + x + 'px,' + (y || 0) + 'px'\r\n + ',0)';\r\n\r\n if (scale !== undefined) {\r\n propValue += ' scale3d('\r\n + scale + ',' + scale\r\n + ',1)';\r\n }\r\n\r\n return propValue;\r\n}\r\n\r\n/**\r\n * Apply transform:translate(x, y) scale(scale) to element\r\n *\r\n * @param {DOMElement} el\r\n * @param {Number} x\r\n * @param {Number|null} y\r\n * @param {Number|null} scale\r\n */\r\nfunction setTransform(el, x, y, scale) {\r\n el.style.transform = toTransformString(x, y, scale);\r\n}\r\n\r\nconst defaultCSSEasing = 'cubic-bezier(.4,0,.22,1)';\r\n\r\n/**\r\n * Apply CSS transition to element\r\n *\r\n * @param {Element} el\r\n * @param {String} prop CSS property to animate\r\n * @param {Number} duration in ms\r\n * @param {String|NULL} ease CSS easing function\r\n */\r\nfunction setTransitionStyle(el, prop, duration, ease) {\r\n // inOut: 'cubic-bezier(.4, 0, .22, 1)', // for \"toggle state\" transitions\r\n // out: 'cubic-bezier(0, 0, .22, 1)', // for \"show\" transitions\r\n // in: 'cubic-bezier(.4, 0, 1, 1)'// for \"hide\" transitions\r\n el.style.transition = prop\r\n ? (prop + ' ' + duration + 'ms ' + (ease || defaultCSSEasing))\r\n : 'none';\r\n}\r\n\r\n/**\r\n * Apply width and height CSS properties to element\r\n */\r\nfunction setWidthHeight(el, w, h) {\r\n el.style.width = (typeof w === 'number') ? (w + 'px') : w;\r\n el.style.height = (typeof h === 'number') ? (h + 'px') : h;\r\n}\r\n\r\nfunction removeTransitionStyle(el) {\r\n setTransitionStyle(el);\r\n}\r\n\r\nfunction decodeImage(img) {\r\n if ('decode' in img) {\r\n return img.decode();\r\n }\r\n\r\n if (img.complete) {\r\n return Promise.resolve(img);\r\n }\r\n\r\n return new Promise((resolve, reject) => {\r\n img.onload = () => resolve(img);\r\n img.onerror = reject;\r\n });\r\n}\r\n\r\nconst LOAD_STATE = {\r\n IDLE: 'idle',\r\n LOADING: 'loading',\r\n LOADED: 'loaded',\r\n ERROR: 'error',\r\n};\r\n\r\n\r\n/**\r\n * Check if click or keydown event was dispatched\r\n * with a special key or via mouse wheel.\r\n *\r\n * @param {Event} e\r\n */\r\nfunction specialKeyUsed(e) {\r\n if (e.which === 2 || e.ctrlKey || e.metaKey || e.altKey || e.shiftKey) {\r\n return true;\r\n }\r\n}\r\n\r\n/**\r\n * Parse `gallery` or `children` options.\r\n *\r\n * @param {Element|NodeList|String} option\r\n * @param {String|null} legacySelector\r\n * @param {Element|null} parent\r\n * @returns Element[]\r\n */\r\nfunction getElementsFromOption(option, legacySelector, parent = document) {\r\n let elements = [];\r\n\r\n if (option instanceof Element) {\r\n elements = [option];\r\n } else if (option instanceof NodeList || Array.isArray(option)) {\r\n elements = Array.from(option);\r\n } else {\r\n const selector = typeof option === 'string' ? option : legacySelector;\r\n if (selector) {\r\n elements = Array.from(parent.querySelectorAll(selector));\r\n }\r\n }\r\n\r\n return elements;\r\n}\n\n// Detect passive event listener support\r\nlet supportsPassive = false;\r\n/* eslint-disable */\r\ntry {\r\n window.addEventListener('test', null, Object.defineProperty({}, 'passive', {\r\n get: () => {\r\n supportsPassive = true;\r\n }\r\n }));\r\n} catch (e) {}\r\n/* eslint-enable */\r\n\r\nclass DOMEvents {\r\n constructor() {\r\n this._pool = [];\r\n }\r\n\r\n /**\r\n * Adds event listeners\r\n *\r\n * @param {DOMElement} target\r\n * @param {String} type Can be multiple, separated by space.\r\n * @param {Function} listener\r\n * @param {Boolean} passive\r\n */\r\n add(target, type, listener, passive) {\r\n this._toggleListener(target, type, listener, passive);\r\n }\r\n\r\n /**\r\n * Removes event listeners\r\n *\r\n * @param {DOMElement} target\r\n * @param {String} type\r\n * @param {Function} listener\r\n * @param {Boolean} passive\r\n */\r\n remove(target, type, listener, passive) {\r\n this._toggleListener(target, type, listener, passive, true);\r\n }\r\n\r\n /**\r\n * Removes all bound events\r\n */\r\n removeAll() {\r\n this._pool.forEach((poolItem) => {\r\n this._toggleListener(\r\n poolItem.target,\r\n poolItem.type,\r\n poolItem.listener,\r\n poolItem.passive,\r\n true,\r\n true\r\n );\r\n });\r\n this._pool = [];\r\n }\r\n\r\n /**\r\n * Adds or removes event\r\n *\r\n * @param {DOMElement} target\r\n * @param {String} type\r\n * @param {Function} listener\r\n * @param {Boolean} passive\r\n * @param {Boolean} unbind Whether the event should be added or removed\r\n * @param {Boolean} skipPool Whether events pool should be skipped\r\n */\r\n _toggleListener(target, type, listener, passive, unbind, skipPool) {\r\n if (!target) {\r\n return;\r\n }\r\n\r\n const methodName = (unbind ? 'remove' : 'add') + 'EventListener';\r\n type = type.split(' ');\r\n type.forEach((eType) => {\r\n if (eType) {\r\n // Events pool is used to easily unbind all events when PhotoSwipe is closed,\r\n // so developer doesn't need to do this manually\r\n if (!skipPool) {\r\n if (unbind) {\r\n // Remove from the events pool\r\n this._pool = this._pool.filter((poolItem) => {\r\n return poolItem.type !== eType\r\n || poolItem.listener !== listener\r\n || poolItem.target !== target;\r\n });\r\n } else {\r\n // Add to the events pool\r\n this._pool.push({\r\n target,\r\n type: eType,\r\n listener,\r\n passive\r\n });\r\n }\r\n }\r\n\r\n\r\n // most PhotoSwipe events call preventDefault,\r\n // and we do not need browser to scroll the page\r\n const eventOptions = supportsPassive ? { passive: (passive || false) } : false;\r\n\r\n target[methodName](\r\n eType,\r\n listener,\r\n eventOptions\r\n );\r\n }\r\n });\r\n }\r\n}\n\nfunction getViewportSize(options, pswp) {\r\n if (options.getViewportSizeFn) {\r\n const newViewportSize = options.getViewportSizeFn(options, pswp);\r\n if (newViewportSize) {\r\n return newViewportSize;\r\n }\r\n }\r\n\r\n return {\r\n x: document.documentElement.clientWidth,\r\n\r\n // TODO: height on mobile is very incosistent due to toolbar\r\n // find a way to improve this\r\n //\r\n // document.documentElement.clientHeight - doesn't seem to work well\r\n y: window.innerHeight\r\n };\r\n}\r\n\r\n/**\r\n * Parses padding option.\r\n * Supported formats:\r\n *\r\n * // Object\r\n * padding: {\r\n * top: 0,\r\n * bottom: 0,\r\n * left: 0,\r\n * right: 0\r\n * }\r\n *\r\n * // A function that returns the object\r\n * paddingFn: (viewportSize, itemData, index) => {\r\n * return {\r\n * top: 0,\r\n * bottom: 0,\r\n * left: 0,\r\n * right: 0\r\n * };\r\n * }\r\n *\r\n * // Legacy variant\r\n * paddingLeft: 0,\r\n * paddingRight: 0,\r\n * paddingTop: 0,\r\n * paddingBottom: 0,\r\n *\r\n * @param {String} prop 'left', 'top', 'bottom', 'right'\r\n * @param {Object} options PhotoSwipe options\r\n * @param {Object} viewportSize PhotoSwipe viewport size, for example: { x:800, y:600 }\r\n * @param {Object} itemData Data about the slide\r\n * @param {Integer} index Slide index\r\n * @returns {Number}\r\n */\r\nfunction parsePaddingOption(prop, options, viewportSize, itemData, index) {\r\n let paddingValue;\r\n\r\n if (options.paddingFn) {\r\n paddingValue = options.paddingFn(viewportSize, itemData, index)[prop];\r\n } else if (options.padding) {\r\n paddingValue = options.padding[prop];\r\n } else {\r\n const legacyPropName = 'padding' + prop[0].toUpperCase() + prop.slice(1);\r\n if (options[legacyPropName]) {\r\n paddingValue = options[legacyPropName];\r\n }\r\n }\r\n\r\n return paddingValue || 0;\r\n}\r\n\r\n\r\nfunction getPanAreaSize(options, viewportSize, itemData, index) {\r\n return {\r\n x: viewportSize.x\r\n - parsePaddingOption('left', options, viewportSize, itemData, index)\r\n - parsePaddingOption('right', options, viewportSize, itemData, index),\r\n y: viewportSize.y\r\n - parsePaddingOption('top', options, viewportSize, itemData, index)\r\n - parsePaddingOption('bottom', options, viewportSize, itemData, index)\r\n };\r\n}\n\n/**\r\n * Calculates minimum, maximum and initial (center) bounds of a slide\r\n */\r\n\r\nclass PanBounds {\r\n constructor(slide) {\r\n this.slide = slide;\r\n\r\n this.currZoomLevel = 1;\r\n\r\n this.center = {};\r\n this.max = {};\r\n this.min = {};\r\n\r\n this.reset();\r\n }\r\n\r\n // _getItemBounds\r\n update(currZoomLevel) {\r\n this.currZoomLevel = currZoomLevel;\r\n\r\n if (!this.slide.width) {\r\n this.reset();\r\n } else {\r\n this._updateAxis('x');\r\n this._updateAxis('y');\r\n this.slide.pswp.dispatch('calcBounds', { slide: this.slide });\r\n }\r\n }\r\n\r\n // _calculateItemBoundsForAxis\r\n _updateAxis(axis) {\r\n const { pswp } = this.slide;\r\n const elSize = this.slide[axis === 'x' ? 'width' : 'height'] * this.currZoomLevel;\r\n const paddingProp = axis === 'x' ? 'left' : 'top';\r\n const padding = parsePaddingOption(\r\n paddingProp,\r\n pswp.options,\r\n pswp.viewportSize,\r\n this.slide.data,\r\n this.slide.index\r\n );\r\n\r\n const panAreaSize = this.slide.panAreaSize[axis];\r\n\r\n // Default position of element.\r\n // By defaul it is center of viewport:\r\n this.center[axis] = Math.round((panAreaSize - elSize) / 2) + padding;\r\n\r\n // maximum pan position\r\n this.max[axis] = (elSize > panAreaSize)\r\n ? Math.round(panAreaSize - elSize) + padding\r\n : this.center[axis];\r\n\r\n // minimum pan position\r\n this.min[axis] = (elSize > panAreaSize)\r\n ? padding\r\n : this.center[axis];\r\n }\r\n\r\n // _getZeroBounds\r\n reset() {\r\n this.center.x = 0;\r\n this.center.y = 0;\r\n this.max.x = 0;\r\n this.max.y = 0;\r\n this.min.x = 0;\r\n this.min.y = 0;\r\n }\r\n\r\n /**\r\n * Correct pan position if it's beyond the bounds\r\n *\r\n * @param {String} axis x or y\r\n * @param {Object} panOffset\r\n */\r\n correctPan(axis, panOffset) { // checkPanBounds\r\n return clamp(panOffset, this.max[axis], this.min[axis]);\r\n }\r\n}\n\n/**\r\n * Calculates zoom levels for specific slide.\r\n * Depends on viewport size and image size.\r\n */\r\n\r\nconst MAX_IMAGE_WIDTH = 4000;\r\n\r\nclass ZoomLevel {\r\n /**\r\n * @param {Object} options PhotoSwipe options\r\n * @param {Object} itemData Slide data\r\n * @param {Integer} index Slide index\r\n * @param {PhotoSwipe|undefined} pswp PhotoSwipe instance, can be undefined if not initialized yet\r\n */\r\n constructor(options, itemData, index, pswp) {\r\n this.pswp = pswp;\r\n this.options = options;\r\n this.itemData = itemData;\r\n this.index = index;\r\n }\r\n\r\n /**\r\n * Calculate initial, secondary and maximum zoom level for the specified slide.\r\n *\r\n * It should be called when either image or viewport size changes.\r\n *\r\n * @param {Slide} slide\r\n */\r\n update(maxWidth, maxHeight, panAreaSize) {\r\n this.elementSize = {\r\n x: maxWidth,\r\n y: maxHeight\r\n };\r\n\r\n this.panAreaSize = panAreaSize;\r\n\r\n const hRatio = this.panAreaSize.x / this.elementSize.x;\r\n const vRatio = this.panAreaSize.y / this.elementSize.y;\r\n\r\n this.fit = Math.min(1, hRatio < vRatio ? hRatio : vRatio);\r\n this.fill = Math.min(1, hRatio > vRatio ? hRatio : vRatio);\r\n\r\n // zoom.vFill defines zoom level of the image\r\n // when it has 100% of viewport vertical space (height)\r\n this.vFill = Math.min(1, vRatio);\r\n\r\n this.initial = this._getInitial();\r\n this.secondary = this._getSecondary();\r\n this.max = Math.max(\r\n this.initial,\r\n this.secondary,\r\n this._getMax()\r\n );\r\n\r\n this.min = Math.min(\r\n this.fit,\r\n this.initial,\r\n this.secondary\r\n );\r\n\r\n if (this.pswp) {\r\n this.pswp.dispatch('zoomLevelsUpdate', { zoomLevels: this, slideData: this.itemData });\r\n }\r\n }\r\n\r\n /**\r\n * Parses user-defined zoom option.\r\n *\r\n * @param {Mixed} optionPrefix Zoom level option prefix (initial, secondary, max)\r\n */\r\n _parseZoomLevelOption(optionPrefix) {\r\n // zoom.initial\r\n // zoom.secondary\r\n // zoom.max\r\n const optionValue = this.options[optionPrefix + 'ZoomLevel'];\r\n\r\n if (!optionValue) {\r\n return;\r\n }\r\n\r\n if (typeof optionValue === 'function') {\r\n return optionValue(this);\r\n }\r\n\r\n if (optionValue === 'fill') {\r\n return this.fill;\r\n }\r\n\r\n if (optionValue === 'fit') {\r\n return this.fit;\r\n }\r\n\r\n return Number(optionValue);\r\n }\r\n\r\n /**\r\n * Get zoom level to which image will be zoomed after double-tap gesture,\r\n * or when user clicks on zoom icon,\r\n * or mouse-click on image itself.\r\n * If you return 1 image will be zoomed to its original size.\r\n *\r\n * @return {Number}\r\n */\r\n _getSecondary() {\r\n let currZoomLevel = this._parseZoomLevelOption('secondary');\r\n\r\n if (currZoomLevel) {\r\n return currZoomLevel;\r\n }\r\n\r\n // 3x of \"fit\" state, but not larger than original\r\n currZoomLevel = Math.min(1, this.fit * 3);\r\n\r\n if (currZoomLevel * this.elementSize.x > MAX_IMAGE_WIDTH) {\r\n currZoomLevel = MAX_IMAGE_WIDTH / this.elementSize.x;\r\n }\r\n\r\n return currZoomLevel;\r\n }\r\n\r\n /**\r\n * Get initial image zoom level.\r\n *\r\n * @return {Number}\r\n */\r\n _getInitial() {\r\n return this._parseZoomLevelOption('initial') || this.fit;\r\n }\r\n\r\n /**\r\n * Maximum zoom level when user zooms\r\n * via zoom/pinch gesture,\r\n * via cmd/ctrl-wheel or via trackpad.\r\n *\r\n * @return {Number}\r\n */\r\n _getMax() {\r\n const currZoomLevel = this._parseZoomLevelOption('max');\r\n\r\n if (currZoomLevel) {\r\n return currZoomLevel;\r\n }\r\n\r\n // max zoom level is x4 from \"fit state\",\r\n // used for zoom gesture and ctrl/trackpad zoom\r\n return Math.max(1, this.fit * 4);\r\n }\r\n}\n\n/**\r\n * Renders and allows to control a single slide\r\n */\r\n\r\nclass Slide {\r\n constructor(data, index, pswp) {\r\n this.data = data;\r\n this.index = index;\r\n this.pswp = pswp;\r\n this.isActive = (index === pswp.currIndex);\r\n this.currentResolution = 0;\r\n this.panAreaSize = {};\r\n\r\n this.isFirstSlide = (this.isActive && !pswp.opener.isOpen);\r\n\r\n this.zoomLevels = new ZoomLevel(pswp.options, data, index, pswp);\r\n\r\n this.pswp.dispatch('gettingData', {\r\n slide: this,\r\n data: this.data,\r\n index\r\n });\r\n\r\n this.pan = {\r\n x: 0,\r\n y: 0\r\n };\r\n\r\n this.content = this.pswp.contentLoader.getContentBySlide(this);\r\n this.container = createElement('pswp__zoom-wrap');\r\n\r\n this.currZoomLevel = 1;\r\n this.width = this.content.width;\r\n this.height = this.content.height;\r\n\r\n this.bounds = new PanBounds(this);\r\n\r\n this.prevDisplayedWidth = -1;\r\n this.prevDisplayedHeight = -1;\r\n\r\n this.pswp.dispatch('slideInit', { slide: this });\r\n }\r\n\r\n /**\r\n * If this slide is active/current/visible\r\n *\r\n * @param {Boolean} isActive\r\n */\r\n setIsActive(isActive) {\r\n if (isActive && !this.isActive) {\r\n // slide just became active\r\n this.activate();\r\n } else if (!isActive && this.isActive) {\r\n // slide just became non-active\r\n this.deactivate();\r\n }\r\n }\r\n\r\n /**\r\n * Appends slide content to DOM\r\n */\r\n append(holderElement) {\r\n this.holderElement = holderElement;\r\n\r\n // Slide appended to DOM\r\n if (!this.data) {\r\n this.holderElement.innerHTML = '';\r\n return;\r\n }\r\n\r\n this.calculateSize();\r\n\r\n this.container.transformOrigin = '0 0';\r\n\r\n this.load();\r\n this.appendHeavy();\r\n this.updateContentSize();\r\n\r\n this.holderElement.innerHTML = '';\r\n this.holderElement.appendChild(this.container);\r\n\r\n this.zoomAndPanToInitial();\r\n\r\n this.pswp.dispatch('firstZoomPan', { slide: this });\r\n\r\n this.applyCurrentZoomPan();\r\n\r\n this.pswp.dispatch('afterSetContent', { slide: this });\r\n\r\n if (this.isActive) {\r\n this.activate();\r\n }\r\n }\r\n\r\n load() {\r\n this.content.load();\r\n this.pswp.dispatch('slideLoad', { slide: this });\r\n }\r\n\r\n /**\r\n * Append \"heavy\" DOM elements\r\n *\r\n * This may depend on a type of slide,\r\n * but generally these are large images.\r\n */\r\n appendHeavy() {\r\n const { pswp } = this;\r\n const appendHeavyNearby = true; // todo\r\n\r\n // Avoid appending heavy elements during animations\r\n if (this.heavyAppended\r\n || !pswp.opener.isOpen\r\n || pswp.mainScroll.isShifted()\r\n || (!this.isActive && !appendHeavyNearby)) {\r\n return;\r\n }\r\n\r\n if (this.pswp.dispatch('appendHeavy', { slide: this }).defaultPrevented) {\r\n return;\r\n }\r\n\r\n this.heavyAppended = true;\r\n\r\n this.content.append();\r\n\r\n this.pswp.dispatch('appendHeavyContent', { slide: this });\r\n }\r\n\r\n /**\r\n * Triggered when this slide is active (selected).\r\n *\r\n * If it's part of opening/closing transition -\r\n * activate() will trigger after the transition is ended.\r\n */\r\n activate() {\r\n this.isActive = true;\r\n this.appendHeavy();\r\n this.content.activate();\r\n this.pswp.dispatch('slideActivate', { slide: this });\r\n }\r\n\r\n /**\r\n * Triggered when this slide becomes inactive.\r\n *\r\n * Slide can become inactive only after it was active.\r\n */\r\n deactivate() {\r\n this.isActive = false;\r\n this.content.deactivate();\r\n\r\n // reset zoom level\r\n this.currentResolution = 0;\r\n this.zoomAndPanToInitial();\r\n this.applyCurrentZoomPan();\r\n this.updateContentSize();\r\n\r\n this.pswp.dispatch('slideDeactivate', { slide: this });\r\n }\r\n\r\n /**\r\n * The slide should destroy itself, it will never be used again.\r\n * (unbind all events and destroy internal components)\r\n */\r\n destroy() {\r\n this.content.hasSlide = false;\r\n this.content.remove();\r\n this.pswp.dispatch('slideDestroy', { slide: this });\r\n }\r\n\r\n resize() {\r\n if (this.currZoomLevel === this.zoomLevels.initial || !this.isActive) {\r\n // Keep initial zoom level if it was before the resize,\r\n // as well as when this slide is not active\r\n\r\n // Reset position and scale to original state\r\n this.calculateSize();\r\n this.currentResolution = 0;\r\n this.zoomAndPanToInitial();\r\n this.applyCurrentZoomPan();\r\n this.updateContentSize();\r\n } else {\r\n // readjust pan position if it's beyond the bounds\r\n this.calculateSize();\r\n this.bounds.update(this.currZoomLevel);\r\n this.panTo(this.pan.x, this.pan.y);\r\n }\r\n }\r\n\r\n\r\n /**\r\n * Apply size to current slide content,\r\n * based on the current resolution and scale.\r\n *\r\n * @param {Boolean} force if size should be updated even if dimensions weren't changed\r\n */\r\n updateContentSize(force) {\r\n // Use initial zoom level\r\n // if resolution is not defined (user didn't zoom yet)\r\n const scaleMultiplier = this.currentResolution || this.zoomLevels.initial;\r\n\r\n if (!scaleMultiplier) {\r\n return;\r\n }\r\n\r\n const width = Math.round(this.width * scaleMultiplier) || this.pswp.viewportSize.x;\r\n const height = Math.round(this.height * scaleMultiplier) || this.pswp.viewportSize.y;\r\n\r\n if (!this.sizeChanged(width, height) && !force) {\r\n return;\r\n }\r\n this.content.setDisplayedSize(width, height);\r\n }\r\n\r\n sizeChanged(width, height) {\r\n if (width !== this.prevDisplayedWidth\r\n || height !== this.prevDisplayedHeight) {\r\n this.prevDisplayedWidth = width;\r\n this.prevDisplayedHeight = height;\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n getPlaceholderElement() {\r\n if (this.content.placeholder) {\r\n return this.content.placeholder.element;\r\n }\r\n }\r\n\r\n /**\r\n * Zoom current slide image to...\r\n *\r\n * @param {Number} destZoomLevel Destination zoom level.\r\n * @param {Object|false} centerPoint Transform origin center point,\r\n * or false if viewport center should be used.\r\n * @param {Number} transitionDuration Transition duration, may be set to 0.\r\n * @param {Boolean|null} ignoreBounds Minimum and maximum zoom levels will be ignored.\r\n * @return {Boolean|null} Returns true if animated.\r\n */\r\n zoomTo(destZoomLevel, centerPoint, transitionDuration, ignoreBounds) {\r\n const { pswp } = this;\r\n if (!this.isZoomable()\r\n || pswp.mainScroll.isShifted()) {\r\n return;\r\n }\r\n\r\n pswp.dispatch('beforeZoomTo', {\r\n destZoomLevel, centerPoint, transitionDuration\r\n });\r\n\r\n // stop all pan and zoom transitions\r\n pswp.animations.stopAllPan();\r\n\r\n // if (!centerPoint) {\r\n // centerPoint = pswp.getViewportCenterPoint();\r\n // }\r\n\r\n const prevZoomLevel = this.currZoomLevel;\r\n\r\n if (!ignoreBounds) {\r\n destZoomLevel = clamp(destZoomLevel, this.zoomLevels.min, this.zoomLevels.max);\r\n }\r\n\r\n // if (transitionDuration === undefined) {\r\n // transitionDuration = this.pswp.options.zoomAnimationDuration;\r\n // }\r\n\r\n this.setZoomLevel(destZoomLevel);\r\n this.pan.x = this.calculateZoomToPanOffset('x', centerPoint, prevZoomLevel);\r\n this.pan.y = this.calculateZoomToPanOffset('y', centerPoint, prevZoomLevel);\r\n roundPoint(this.pan);\r\n\r\n const finishTransition = () => {\r\n this._setResolution(destZoomLevel);\r\n this.applyCurrentZoomPan();\r\n };\r\n\r\n if (!transitionDuration) {\r\n finishTransition();\r\n } else {\r\n pswp.animations.startTransition({\r\n isPan: true,\r\n name: 'zoomTo',\r\n target: this.container,\r\n transform: this.getCurrentTransform(),\r\n onComplete: finishTransition,\r\n duration: transitionDuration,\r\n easing: pswp.options.easing\r\n });\r\n }\r\n }\r\n\r\n toggleZoom(centerPoint) {\r\n this.zoomTo(\r\n this.currZoomLevel === this.zoomLevels.initial\r\n ? this.zoomLevels.secondary : this.zoomLevels.initial,\r\n centerPoint,\r\n this.pswp.options.zoomAnimationDuration\r\n );\r\n }\r\n\r\n /**\r\n * Updates zoom level property and recalculates new pan bounds,\r\n * unlike zoomTo it does not apply transform (use applyCurrentZoomPan)\r\n *\r\n * @param {Number} currZoomLevel\r\n */\r\n setZoomLevel(currZoomLevel) {\r\n this.currZoomLevel = currZoomLevel;\r\n this.bounds.update(this.currZoomLevel);\r\n }\r\n\r\n /**\r\n * Get pan position after zoom at a given `point`.\r\n *\r\n * Always call setZoomLevel(newZoomLevel) beforehand to recalculate\r\n * pan bounds according to the new zoom level.\r\n *\r\n * @param {String} axis\r\n * @param {Object|null} centerPoint point based on which zoom is performed,\r\n * usually refers to the current mouse position,\r\n * if false - viewport center will be used.\r\n * @param {Number|null} prevZoomLevel Zoom level before new zoom was applied.\r\n */\r\n calculateZoomToPanOffset(axis, point, prevZoomLevel) {\r\n const totalPanDistance = this.bounds.max[axis] - this.bounds.min[axis];\r\n if (totalPanDistance === 0) {\r\n return this.bounds.center[axis];\r\n }\r\n\r\n if (!point) {\r\n point = this.pswp.getViewportCenterPoint();\r\n }\r\n\r\n const zoomFactor = this.currZoomLevel / prevZoomLevel;\r\n return this.bounds.correctPan(\r\n axis,\r\n (this.pan[axis] - point[axis]) * zoomFactor + point[axis]\r\n );\r\n }\r\n\r\n /**\r\n * Apply pan and keep it within bounds.\r\n *\r\n * @param {Number} panX\r\n * @param {Number} panY\r\n */\r\n panTo(panX, panY) {\r\n this.pan.x = this.bounds.correctPan('x', panX);\r\n this.pan.y = this.bounds.correctPan('y', panY);\r\n this.applyCurrentZoomPan();\r\n }\r\n\r\n /**\r\n * If the slide in the current state can be panned by the user\r\n */\r\n isPannable() {\r\n return this.width && (this.currZoomLevel > this.zoomLevels.fit);\r\n }\r\n\r\n /**\r\n * If the slide can be zoomed\r\n */\r\n isZoomable() {\r\n return this.width && this.content.isZoomable();\r\n }\r\n\r\n /**\r\n * Apply transform and scale based on\r\n * the current pan position (this.pan) and zoom level (this.currZoomLevel)\r\n */\r\n applyCurrentZoomPan() {\r\n this._applyZoomTransform(this.pan.x, this.pan.y, this.currZoomLevel);\r\n if (this === this.pswp.currSlide) {\r\n this.pswp.dispatch('zoomPanUpdate', { slide: this });\r\n }\r\n }\r\n\r\n zoomAndPanToInitial() {\r\n this.currZoomLevel = this.zoomLevels.initial;\r\n\r\n // pan according to the zoom level\r\n this.bounds.update(this.currZoomLevel);\r\n equalizePoints(this.pan, this.bounds.center);\r\n this.pswp.dispatch('initialZoomPan', { slide: this });\r\n }\r\n\r\n /**\r\n * Set translate and scale based on current resolution\r\n *\r\n * @param {Number} x\r\n * @param {Number} y\r\n * @param {Number} zoom\r\n */\r\n _applyZoomTransform(x, y, zoom) {\r\n zoom /= this.currentResolution || this.zoomLevels.initial;\r\n setTransform(this.container, x, y, zoom);\r\n }\r\n\r\n calculateSize() {\r\n const { pswp } = this;\r\n\r\n equalizePoints(\r\n this.panAreaSize,\r\n getPanAreaSize(pswp.options, pswp.viewportSize, this.data, this.index)\r\n );\r\n\r\n this.zoomLevels.update(this.width, this.height, this.panAreaSize);\r\n\r\n pswp.dispatch('calcSlideSize', {\r\n slide: this\r\n });\r\n }\r\n\r\n getCurrentTransform() {\r\n const scale = this.currZoomLevel / (this.currentResolution || this.zoomLevels.initial);\r\n return toTransformString(this.pan.x, this.pan.y, scale);\r\n }\r\n\r\n /**\r\n * Set resolution and re-render the image.\r\n *\r\n * For example, if the real image size is 2000x1500,\r\n * and resolution is 0.5 - it will be rendered as 1000x750.\r\n *\r\n * Image with zoom level 2 and resolution 0.5 is\r\n * the same as image with zoom level 1 and resolution 1.\r\n *\r\n * Used to optimize animations and make\r\n * sure that browser renders image in highest quality.\r\n * Also used by responsive images to load the correct one.\r\n *\r\n * @param {Number} newResolution\r\n */\r\n _setResolution(newResolution) {\r\n if (newResolution === this.currentResolution) {\r\n return;\r\n }\r\n\r\n this.currentResolution = newResolution;\r\n this.updateContentSize();\r\n\r\n this.pswp.dispatch('resolutionChanged');\r\n }\r\n}\n\n/**\r\n * Handles single pointer dragging\r\n */\r\n\r\nconst PAN_END_FRICTION = 0.35;\r\nconst VERTICAL_DRAG_FRICTION = 0.6;\r\n\r\n// 1 corresponds to the third of viewport height\r\nconst MIN_RATIO_TO_CLOSE = 0.4;\r\n\r\n// Minimum speed required to navigate\r\n// to next or previous slide\r\nconst MIN_NEXT_SLIDE_SPEED = 0.5;\r\n\r\nfunction project(initialVelocity, decelerationRate) {\r\n return initialVelocity * decelerationRate / (1 - decelerationRate);\r\n}\r\n\r\nclass DragHandler {\r\n constructor(gestures) {\r\n this.gestures = gestures;\r\n this.pswp = gestures.pswp;\r\n this.startPan = {};\r\n }\r\n\r\n start() {\r\n equalizePoints(this.startPan, this.pswp.currSlide.pan);\r\n this.pswp.animations.stopAll();\r\n }\r\n\r\n change() {\r\n const { p1, prevP1, dragAxis, pswp } = this.gestures;\r\n const { currSlide } = pswp;\r\n\r\n if (dragAxis === 'y'\r\n && pswp.options.closeOnVerticalDrag\r\n && currSlide.currZoomLevel <= currSlide.zoomLevels.fit\r\n && !this.gestures.isMultitouch) {\r\n // Handle vertical drag to close\r\n const panY = currSlide.pan.y + (p1.y - prevP1.y);\r\n if (!pswp.dispatch('verticalDrag', { panY }).defaultPrevented) {\r\n this._setPanWithFriction('y', panY, VERTICAL_DRAG_FRICTION);\r\n const bgOpacity = 1 - Math.abs(this._getVerticalDragRatio(currSlide.pan.y));\r\n pswp.applyBgOpacity(bgOpacity);\r\n currSlide.applyCurrentZoomPan();\r\n }\r\n } else {\r\n const mainScrollChanged = this._panOrMoveMainScroll('x');\r\n if (!mainScrollChanged) {\r\n this._panOrMoveMainScroll('y');\r\n\r\n roundPoint(currSlide.pan);\r\n currSlide.applyCurrentZoomPan();\r\n }\r\n }\r\n }\r\n\r\n end() {\r\n const { pswp, velocity } = this.gestures;\r\n const { mainScroll } = pswp;\r\n let indexDiff = 0;\r\n\r\n pswp.animations.stopAll();\r\n\r\n // Handle main scroll if it's shifted\r\n if (mainScroll.isShifted()) {\r\n // Position of the main scroll relative to the viewport\r\n const mainScrollShiftDiff = mainScroll.x - mainScroll.getCurrSlideX();\r\n\r\n // Ratio between 0 and 1:\r\n // 0 - slide is not visible at all,\r\n // 0.5 - half of the slide is vicible\r\n // 1 - slide is fully visible\r\n const currentSlideVisibilityRatio = (mainScrollShiftDiff / pswp.viewportSize.x);\r\n\r\n // Go next slide.\r\n //\r\n // - if velocity and its direction is matched\r\n // and we see at least tiny part of the next slide\r\n //\r\n // - or if we see less than 50% of the current slide\r\n // and velocity is close to 0\r\n //\r\n if ((velocity.x < -MIN_NEXT_SLIDE_SPEED && currentSlideVisibilityRatio < 0)\r\n || (velocity.x < 0.1 && currentSlideVisibilityRatio < -0.5)) {\r\n // Go to next slide\r\n indexDiff = 1;\r\n velocity.x = Math.min(velocity.x, 0);\r\n } else if ((velocity.x > MIN_NEXT_SLIDE_SPEED && currentSlideVisibilityRatio > 0)\r\n || (velocity.x > -0.1 && currentSlideVisibilityRatio > 0.5)) {\r\n // Go to prev slide\r\n indexDiff = -1;\r\n velocity.x = Math.max(velocity.x, 0);\r\n }\r\n\r\n mainScroll.moveIndexBy(indexDiff, true, velocity.x);\r\n }\r\n\r\n // Restore zoom level\r\n if (pswp.currSlide.currZoomLevel > pswp.currSlide.zoomLevels.max\r\n || this.gestures.isMultitouch) {\r\n this.gestures.zoomLevels.correctZoomPan(true);\r\n } else {\r\n // we run two animations instead of one,\r\n // as each axis has own pan boundaries and thus different spring function\r\n // (correctZoomPan does not have this functionality,\r\n // it animates all properties with single timing function)\r\n this._finishPanGestureForAxis('x');\r\n this._finishPanGestureForAxis('y');\r\n }\r\n }\r\n\r\n _finishPanGestureForAxis(axis) {\r\n const { pswp } = this;\r\n const { currSlide } = pswp;\r\n const { velocity } = this.gestures;\r\n const { pan, bounds } = currSlide;\r\n const panPos = pan[axis];\r\n const restoreBgOpacity = (pswp.bgOpacity < 1 && axis === 'y');\r\n\r\n // 0.995 means - scroll view loses 0.5% of its velocity per millisecond\r\n // Inceasing this number will reduce travel distance\r\n const decelerationRate = 0.995; // 0.99\r\n\r\n // Pan position if there is no bounds\r\n const projectedPosition = panPos + project(velocity[axis], decelerationRate);\r\n\r\n if (restoreBgOpacity) {\r\n const vDragRatio = this._getVerticalDragRatio(panPos);\r\n const projectedVDragRatio = this._getVerticalDragRatio(projectedPosition);\r\n\r\n // If we are above and moving upwards,\r\n // or if we are below and moving downwards\r\n if ((vDragRatio < 0 && projectedVDragRatio < -MIN_RATIO_TO_CLOSE)\r\n || (vDragRatio > 0 && projectedVDragRatio > MIN_RATIO_TO_CLOSE)) {\r\n pswp.close();\r\n return;\r\n }\r\n }\r\n\r\n // Pan position with corrected bounds\r\n const correctedPanPosition = bounds.correctPan(axis, projectedPosition);\r\n\r\n // Exit if pan position should not be changed\r\n // or if speed it too low\r\n if (panPos === correctedPanPosition) {\r\n return;\r\n }\r\n\r\n // Overshoot if the final position is out of pan bounds\r\n const dampingRatio = (correctedPanPosition === projectedPosition) ? 1 : 0.82;\r\n\r\n const initialBgOpacity = pswp.bgOpacity;\r\n const totalPanDist = correctedPanPosition - panPos;\r\n\r\n pswp.animations.startSpring({\r\n name: 'panGesture' + axis,\r\n isPan: true,\r\n start: panPos,\r\n end: correctedPanPosition,\r\n velocity: velocity[axis],\r\n dampingRatio,\r\n onUpdate: (pos) => {\r\n // Animate opacity of background relative to Y pan position of an image\r\n if (restoreBgOpacity && pswp.bgOpacity < 1) {\r\n // 0 - start of animation, 1 - end of animation\r\n const animationProgressRatio = 1 - (correctedPanPosition - pos) / totalPanDist;\r\n\r\n // We clamp opacity to keep it between 0 and 1.\r\n // As progress ratio can be larger than 1 due to overshoot,\r\n // and we do not want to bounce opacity.\r\n pswp.applyBgOpacity(clamp(\r\n initialBgOpacity + (1 - initialBgOpacity) * animationProgressRatio,\r\n 0,\r\n 1\r\n ));\r\n }\r\n\r\n pan[axis] = Math.floor(pos);\r\n currSlide.applyCurrentZoomPan();\r\n },\r\n });\r\n }\r\n\r\n /**\r\n * Update position of the main scroll,\r\n * or/and update pan position of the current slide.\r\n *\r\n * Should return true if it changes (or can change) main scroll.\r\n *\r\n * @param {String} axis\r\n */\r\n _panOrMoveMainScroll(axis) {\r\n const { p1, pswp, dragAxis, prevP1, isMultitouch } = this.gestures;\r\n const { currSlide, mainScroll } = pswp;\r\n const delta = (p1[axis] - prevP1[axis]);\r\n const newMainScrollX = mainScroll.x + delta;\r\n\r\n if (!delta) {\r\n return;\r\n }\r\n\r\n // Always move main scroll if image can not be panned\r\n if (axis === 'x' && !currSlide.isPannable() && !isMultitouch) {\r\n mainScroll.moveTo(newMainScrollX, true);\r\n return true; // changed main scroll\r\n }\r\n\r\n const { bounds } = currSlide;\r\n const newPan = currSlide.pan[axis] + delta;\r\n\r\n if (pswp.options.allowPanToNext\r\n && dragAxis === 'x'\r\n && axis === 'x'\r\n && !isMultitouch) {\r\n const currSlideMainScrollX = mainScroll.getCurrSlideX();\r\n\r\n // Position of the main scroll relative to the viewport\r\n const mainScrollShiftDiff = mainScroll.x - currSlideMainScrollX;\r\n\r\n const isLeftToRight = delta > 0;\r\n const isRightToLeft = !isLeftToRight;\r\n\r\n if (newPan > bounds.min[axis] && isLeftToRight) {\r\n // Panning from left to right, beyond the left edge\r\n\r\n // Wether the image was at minimum pan position (or less)\r\n // when this drag gesture started.\r\n // Minimum pan position refers to the left edge of the image.\r\n const wasAtMinPanPosition = (bounds.min[axis] <= this.startPan[axis]);\r\n\r\n if (wasAtMinPanPosition) {\r\n mainScroll.moveTo(newMainScrollX, true);\r\n return true;\r\n } else {\r\n this._setPanWithFriction(axis, newPan);\r\n //currSlide.pan[axis] = newPan;\r\n }\r\n } else if (newPan < bounds.max[axis] && isRightToLeft) {\r\n // Paning from right to left, beyond the right edge\r\n\r\n // Maximum pan position refers to the right edge of the image.\r\n const wasAtMaxPanPosition = (this.startPan[axis] <= bounds.max[axis]);\r\n\r\n if (wasAtMaxPanPosition) {\r\n mainScroll.moveTo(newMainScrollX, true);\r\n return true;\r\n } else {\r\n this._setPanWithFriction(axis, newPan);\r\n //currSlide.pan[axis] = newPan;\r\n }\r\n } else {\r\n // If main scroll is shifted\r\n if (mainScrollShiftDiff !== 0) {\r\n // If main scroll is shifted right\r\n if (mainScrollShiftDiff > 0 /*&& isRightToLeft*/) {\r\n mainScroll.moveTo(Math.max(newMainScrollX, currSlideMainScrollX), true);\r\n return true;\r\n } else if (mainScrollShiftDiff < 0 /*&& isLeftToRight*/) {\r\n // Main scroll is shifted left (Position is less than 0 comparing to the viewport 0)\r\n mainScroll.moveTo(Math.min(newMainScrollX, currSlideMainScrollX), true);\r\n return true;\r\n }\r\n } else {\r\n // We are within pan bounds, so just pan\r\n this._setPanWithFriction(axis, newPan);\r\n }\r\n }\r\n } else {\r\n if (axis === 'y') {\r\n // Do not pan vertically if main scroll is shifted o\r\n if (!mainScroll.isShifted() && bounds.min.y !== bounds.max.y) {\r\n this._setPanWithFriction(axis, newPan);\r\n }\r\n } else {\r\n this._setPanWithFriction(axis, newPan);\r\n }\r\n }\r\n }\r\n //\r\n // If we move above - the ratio is negative\r\n // If we move below the ratio is positive\r\n\r\n /**\r\n * Relation between pan Y position and third of viewport height.\r\n *\r\n * When we are at initial position (center bounds) - the ratio is 0,\r\n * if position is shifted upwards - the ratio is negative,\r\n * if position is shifted downwards - the ratio is positive.\r\n *\r\n * @param {Number} panY The current pan Y position.\r\n */\r\n _getVerticalDragRatio(panY) {\r\n return (panY - this.pswp.currSlide.bounds.center.y)\r\n / (this.pswp.viewportSize.y / 3);\r\n }\r\n\r\n /**\r\n * Set pan position of the current slide.\r\n * Apply friction if the position is beyond the pan bounds,\r\n * or if custom friction is defined.\r\n *\r\n * @param {String} axis\r\n * @param {Number} potentialPan\r\n * @param {Number|null} customFriction (0.1 - 1)\r\n */\r\n _setPanWithFriction(axis, potentialPan, customFriction) {\r\n const { pan, bounds } = this.pswp.currSlide;\r\n const correctedPan = bounds.correctPan(axis, potentialPan);\r\n // If we are out of pan bounds\r\n if (correctedPan !== potentialPan || customFriction) {\r\n const delta = Math.round(potentialPan - pan[axis]);\r\n pan[axis] += delta * (customFriction || PAN_END_FRICTION);\r\n } else {\r\n pan[axis] = potentialPan;\r\n }\r\n }\r\n}\n\nconst UPPER_ZOOM_FRICTION = 0.05;\r\nconst LOWER_ZOOM_FRICTION = 0.15;\r\n\r\n\r\n/**\r\n * Get center point between two points\r\n *\r\n * @param {Point} p\r\n * @param {Point} p1\r\n * @param {Point} p2\r\n */\r\nfunction getZoomPointsCenter(p, p1, p2) {\r\n p.x = (p1.x + p2.x) / 2;\r\n p.y = (p1.y + p2.y) / 2;\r\n return p;\r\n}\r\n\r\nclass ZoomHandler {\r\n constructor(gestures) {\r\n this.gestures = gestures;\r\n this.pswp = this.gestures.pswp;\r\n this._startPan = {};\r\n\r\n this._startZoomPoint = {};\r\n this._zoomPoint = {};\r\n }\r\n\r\n start() {\r\n this._startZoomLevel = this.pswp.currSlide.currZoomLevel;\r\n equalizePoints(this._startPan, this.pswp.currSlide.pan);\r\n this.pswp.animations.stopAllPan();\r\n this._wasOverFitZoomLevel = false;\r\n }\r\n\r\n change() {\r\n const { p1, startP1, p2, startP2, pswp } = this.gestures;\r\n const { currSlide } = pswp;\r\n const minZoomLevel = currSlide.zoomLevels.min;\r\n const maxZoomLevel = currSlide.zoomLevels.max;\r\n\r\n if (!currSlide.isZoomable() || pswp.mainScroll.isShifted()) {\r\n return;\r\n }\r\n\r\n getZoomPointsCenter(this._startZoomPoint, startP1, startP2);\r\n getZoomPointsCenter(this._zoomPoint, p1, p2);\r\n\r\n let currZoomLevel = (1 / getDistanceBetween(startP1, startP2))\r\n * getDistanceBetween(p1, p2)\r\n * this._startZoomLevel;\r\n\r\n // slightly over the zoom.fit\r\n if (currZoomLevel > currSlide.zoomLevels.initial + (currSlide.zoomLevels.initial / 15)) {\r\n this._wasOverFitZoomLevel = true;\r\n }\r\n\r\n if (currZoomLevel < minZoomLevel) {\r\n if (pswp.options.pinchToClose\r\n && !this._wasOverFitZoomLevel\r\n && this._startZoomLevel <= currSlide.zoomLevels.initial) {\r\n // fade out background if zooming out\r\n const bgOpacity = 1 - ((minZoomLevel - currZoomLevel) / (minZoomLevel / 1.2));\r\n if (!pswp.dispatch('pinchClose', { bgOpacity }).defaultPrevented) {\r\n pswp.applyBgOpacity(bgOpacity);\r\n }\r\n } else {\r\n // Apply the friction if zoom level is below the min\r\n currZoomLevel = minZoomLevel - (minZoomLevel - currZoomLevel) * LOWER_ZOOM_FRICTION;\r\n }\r\n } else if (currZoomLevel > maxZoomLevel) {\r\n // Apply the friction if zoom level is above the max\r\n currZoomLevel = maxZoomLevel + (currZoomLevel - maxZoomLevel) * UPPER_ZOOM_FRICTION;\r\n }\r\n\r\n currSlide.pan.x = this._calculatePanForZoomLevel('x', currZoomLevel);\r\n currSlide.pan.y = this._calculatePanForZoomLevel('y', currZoomLevel);\r\n\r\n currSlide.setZoomLevel(currZoomLevel);\r\n currSlide.applyCurrentZoomPan();\r\n }\r\n\r\n end() {\r\n const { pswp } = this;\r\n const { currSlide } = pswp;\r\n if (currSlide.currZoomLevel < currSlide.zoomLevels.initial\r\n && !this._wasOverFitZoomLevel\r\n && pswp.options.pinchToClose) {\r\n pswp.close();\r\n } else {\r\n this.correctZoomPan();\r\n }\r\n }\r\n\r\n _calculatePanForZoomLevel(axis, currZoomLevel) {\r\n const zoomFactor = currZoomLevel / this._startZoomLevel;\r\n return this._zoomPoint[axis]\r\n - ((this._startZoomPoint[axis] - this._startPan[axis]) * zoomFactor);\r\n }\r\n\r\n /**\r\n * Correct currZoomLevel and pan if they are\r\n * beyond minimum or maximum values.\r\n * With animation.\r\n *\r\n * @param {Boolean} ignoreGesture Wether gesture coordinates should be ignored\r\n * when calculating destination pan position.\r\n */\r\n correctZoomPan(ignoreGesture) {\r\n const { pswp } = this;\r\n const { currSlide } = pswp;\r\n\r\n if (!currSlide.isZoomable()) {\r\n return;\r\n }\r\n\r\n if (this._zoomPoint.x === undefined) {\r\n ignoreGesture = true;\r\n }\r\n\r\n const prevZoomLevel = currSlide.currZoomLevel;\r\n\r\n let destinationZoomLevel;\r\n let currZoomLevelNeedsChange = true;\r\n\r\n if (prevZoomLevel < currSlide.zoomLevels.initial) {\r\n destinationZoomLevel = currSlide.zoomLevels.initial;\r\n // zoom to min\r\n } else if (prevZoomLevel > currSlide.zoomLevels.max) {\r\n destinationZoomLevel = currSlide.zoomLevels.max;\r\n // zoom to max\r\n } else {\r\n currZoomLevelNeedsChange = false;\r\n destinationZoomLevel = prevZoomLevel;\r\n }\r\n\r\n const initialBgOpacity = pswp.bgOpacity;\r\n const restoreBgOpacity = pswp.bgOpacity < 1;\r\n\r\n const initialPan = equalizePoints({}, currSlide.pan);\r\n let destinationPan = equalizePoints({}, initialPan);\r\n\r\n if (ignoreGesture) {\r\n this._zoomPoint.x = 0;\r\n this._zoomPoint.y = 0;\r\n this._startZoomPoint.x = 0;\r\n this._startZoomPoint.y = 0;\r\n this._startZoomLevel = prevZoomLevel;\r\n equalizePoints(this._startPan, initialPan);\r\n }\r\n\r\n if (currZoomLevelNeedsChange) {\r\n destinationPan = {\r\n x: this._calculatePanForZoomLevel('x', destinationZoomLevel),\r\n y: this._calculatePanForZoomLevel('y', destinationZoomLevel)\r\n };\r\n }\r\n\r\n // set zoom level, so pan bounds are updated according to it\r\n currSlide.setZoomLevel(destinationZoomLevel);\r\n\r\n destinationPan = {\r\n x: currSlide.bounds.correctPan('x', destinationPan.x),\r\n y: currSlide.bounds.correctPan('y', destinationPan.y)\r\n };\r\n\r\n // return zoom level and its bounds to initial\r\n currSlide.setZoomLevel(prevZoomLevel);\r\n\r\n let panNeedsChange = true;\r\n if (pointsEqual(destinationPan, initialPan)) {\r\n panNeedsChange = false;\r\n }\r\n\r\n if (!panNeedsChange && !currZoomLevelNeedsChange && !restoreBgOpacity) {\r\n // update resolution after gesture\r\n currSlide._setResolution(destinationZoomLevel);\r\n currSlide.applyCurrentZoomPan();\r\n\r\n // nothing to animate\r\n return;\r\n }\r\n\r\n pswp.animations.stopAllPan();\r\n\r\n pswp.animations.startSpring({\r\n isPan: true,\r\n start: 0,\r\n end: 1000,\r\n velocity: 0,\r\n dampingRatio: 1,\r\n naturalFrequency: 40,\r\n onUpdate: (now) => {\r\n now /= 1000; // 0 - start, 1 - end\r\n\r\n if (panNeedsChange || currZoomLevelNeedsChange) {\r\n if (panNeedsChange) {\r\n currSlide.pan.x = initialPan.x + (destinationPan.x - initialPan.x) * now;\r\n currSlide.pan.y = initialPan.y + (destinationPan.y - initialPan.y) * now;\r\n }\r\n\r\n if (currZoomLevelNeedsChange) {\r\n const newZoomLevel = prevZoomLevel\r\n + (destinationZoomLevel - prevZoomLevel) * now;\r\n currSlide.setZoomLevel(newZoomLevel);\r\n }\r\n\r\n currSlide.applyCurrentZoomPan();\r\n }\r\n\r\n // Restore background opacity\r\n if (restoreBgOpacity && pswp.bgOpacity < 1) {\r\n // We clamp opacity to keep it between 0 and 1.\r\n // As progress ratio can be larger than 1 due to overshoot,\r\n // and we do not want to bounce opacity.\r\n pswp.applyBgOpacity(clamp(\r\n initialBgOpacity + (1 - initialBgOpacity) * now, 0, 1\r\n ));\r\n }\r\n },\r\n onComplete: () => {\r\n // update resolution after transition ends\r\n currSlide._setResolution(destinationZoomLevel);\r\n currSlide.applyCurrentZoomPan();\r\n }\r\n });\r\n }\r\n}\n\n/**\r\n * Tap, double-tap handler.\r\n */\r\n\r\n/**\r\n * Whether the tap was performed on the main slide\r\n * (rather than controls or caption).\r\n *\r\n * @param {Event} event\r\n */\r\nfunction didTapOnMainContent(event) {\r\n return !!(event.target.closest('.pswp__container'));\r\n}\r\n\r\nclass TapHandler {\r\n constructor(gestures) {\r\n this.gestures = gestures;\r\n }\r\n\r\n\r\n click(point, originalEvent) {\r\n const targetClassList = originalEvent.target.classList;\r\n const isImageClick = targetClassList.contains('pswp__img');\r\n const isBackgroundClick = targetClassList.contains('pswp__item')\r\n || targetClassList.contains('pswp__zoom-wrap');\r\n\r\n if (isImageClick) {\r\n this._doClickOrTapAction('imageClick', point, originalEvent);\r\n } else if (isBackgroundClick) {\r\n this._doClickOrTapAction('bgClick', point, originalEvent);\r\n }\r\n }\r\n\r\n tap(point, originalEvent) {\r\n if (didTapOnMainContent(originalEvent)) {\r\n this._doClickOrTapAction('tap', point, originalEvent);\r\n }\r\n }\r\n\r\n doubleTap(point, originalEvent) {\r\n if (didTapOnMainContent(originalEvent)) {\r\n this._doClickOrTapAction('doubleTap', point, originalEvent);\r\n }\r\n }\r\n\r\n _doClickOrTapAction(actionName, point, originalEvent) {\r\n const { pswp } = this.gestures;\r\n const { currSlide } = pswp;\r\n const optionValue = pswp.options[actionName + 'Action'];\r\n\r\n if (pswp.dispatch(actionName + 'Action', { point, originalEvent }).defaultPrevented) {\r\n return;\r\n }\r\n\r\n if (typeof optionValue === 'function') {\r\n optionValue.call(pswp, point, originalEvent);\r\n return;\r\n }\r\n\r\n switch (optionValue) {\r\n case 'close':\r\n case 'next':\r\n pswp[optionValue]();\r\n break;\r\n case 'zoom':\r\n currSlide.toggleZoom(point);\r\n break;\r\n case 'zoom-or-close':\r\n // by default click zooms current image,\r\n // if it can not be zoomed - gallery will be closed\r\n if (currSlide.isZoomable()\r\n && currSlide.zoomLevels.secondary !== currSlide.zoomLevels.initial) {\r\n currSlide.toggleZoom(point);\r\n } else if (pswp.options.clickToCloseNonZoomable) {\r\n pswp.close();\r\n }\r\n break;\r\n case 'toggle-controls':\r\n this.gestures.pswp.element.classList.toggle('pswp--ui-visible');\r\n // if (_controlsVisible) {\r\n // _ui.hideControls();\r\n // } else {\r\n // _ui.showControls();\r\n // }\r\n break;\r\n }\r\n }\r\n}\n\n/**\r\n * Gestures class bind touch, pointer or mouse events\r\n * and emits drag to drag-handler and zoom events zoom-handler.\r\n *\r\n * Drag and zoom events are emited in requestAnimationFrame,\r\n * and only when one of pointers was actually changed.\r\n */\r\n\r\n// How far should user should drag\r\n// until we can determine that the gesture is swipe and its direction\r\nconst AXIS_SWIPE_HYSTERISIS = 10;\r\n//const PAN_END_FRICTION = 0.35;\r\n\r\nconst DOUBLE_TAP_DELAY = 300; // ms\r\nconst MIN_TAP_DISTANCE = 25; // px\r\n\r\nclass Gestures {\r\n constructor(pswp) {\r\n this.pswp = pswp;\r\n\r\n\r\n // point objects are defined once and reused\r\n // PhotoSwipe keeps track only of two pointers, others are ignored\r\n this.p1 = {}; // the first pressed pointer\r\n this.p2 = {}; // the second pressed pointer\r\n this.prevP1 = {};\r\n this.prevP2 = {};\r\n this.startP1 = {};\r\n this.startP2 = {};\r\n this.velocity = {};\r\n\r\n this._lastStartP1 = {};\r\n this._intervalP1 = {};\r\n this._numActivePoints = 0;\r\n this._ongoingPointers = [];\r\n\r\n this._touchEventEnabled = 'ontouchstart' in window;\r\n this._pointerEventEnabled = !!(window.PointerEvent);\r\n this.supportsTouch = this._touchEventEnabled\r\n || (this._pointerEventEnabled && navigator.maxTouchPoints > 1);\r\n\r\n if (!this.supportsTouch) {\r\n // disable pan to next slide for non-touch devices\r\n pswp.options.allowPanToNext = false;\r\n }\r\n\r\n this.drag = new DragHandler(this);\r\n this.zoomLevels = new ZoomHandler(this);\r\n this.tapHandler = new TapHandler(this);\r\n\r\n pswp.on('bindEvents', () => {\r\n pswp.events.add(pswp.scrollWrap, 'click', e => this._onClick(e));\r\n\r\n if (this._pointerEventEnabled) {\r\n this._bindEvents('pointer', 'down', 'up', 'cancel');\r\n } else if (this._touchEventEnabled) {\r\n this._bindEvents('touch', 'start', 'end', 'cancel');\r\n\r\n // In previous versions we also bound mouse event here,\r\n // in case device supports both touch and mouse events,\r\n // but newer versions of browsers now support PointerEvent.\r\n\r\n // on iOS10 if you bind touchmove/end after touchstart,\r\n // and you don't preventDefault touchstart (which PhotoSwipe does),\r\n // preventDefault will have no effect on touchmove and touchend.\r\n // Unless you bind it previously.\r\n pswp.scrollWrap.ontouchmove = () => {}; // eslint-disable-line\r\n pswp.scrollWrap.ontouchend = () => {}; // eslint-disable-line\r\n } else {\r\n this._bindEvents('mouse', 'down', 'up');\r\n }\r\n });\r\n }\r\n\r\n _bindEvents(pref, down, up, cancel) {\r\n const { pswp } = this;\r\n const { events } = pswp;\r\n\r\n const cancelEvent = cancel ? pref + cancel : '';\r\n\r\n events.add(pswp.scrollWrap, pref + down, this.onPointerDown.bind(this));\r\n events.add(window, pref + 'move', this.onPointerMove.bind(this));\r\n events.add(window, pref + up, this.onPointerUp.bind(this));\r\n if (cancelEvent) {\r\n events.add(pswp.scrollWrap, cancelEvent, this.onPointerUp.bind(this));\r\n }\r\n }\r\n\r\n\r\n onPointerDown(e) {\r\n // We do not call preventDefault for touch events\r\n // to allow browser to show native dialog on longpress\r\n // (the one that allows to save image or open it in new tab).\r\n //\r\n // Desktop Safari allows to drag images when preventDefault isn't called on mousedown,\r\n // even though preventDefault IS called on mousemove. That's why we preventDefault mousedown.\r\n let isMousePointer;\r\n if (e.type === 'mousedown' || e.pointerType === 'mouse') {\r\n isMousePointer = true;\r\n }\r\n\r\n // Allow dragging only via left mouse button.\r\n // http://www.quirksmode.org/js/events_properties.html\r\n // https://developer.mozilla.org/en-US/docs/Web/API/event.button\r\n if (isMousePointer && e.button > 0) {\r\n return;\r\n }\r\n\r\n const { pswp } = this;\r\n\r\n // if PhotoSwipe is opening or closing\r\n if (!pswp.opener.isOpen) {\r\n e.preventDefault();\r\n return;\r\n }\r\n\r\n if (pswp.dispatch('pointerDown', { originalEvent: e }).defaultPrevented) {\r\n return;\r\n }\r\n\r\n if (isMousePointer) {\r\n pswp.mouseDetected();\r\n\r\n // preventDefault mouse event to prevent\r\n // browser image drag feature\r\n this._preventPointerEventBehaviour(e);\r\n }\r\n\r\n pswp.animations.stopAll();\r\n\r\n this._updatePoints(e, 'down');\r\n\r\n this.pointerDown = true;\r\n\r\n if (this._numActivePoints === 1) {\r\n this.dragAxis = null;\r\n // we need to store initial point to determine the main axis,\r\n // drag is activated only after the axis is determined\r\n equalizePoints(this.startP1, this.p1);\r\n }\r\n\r\n if (this._numActivePoints > 1) {\r\n // Tap or double tap should not trigger if more than one pointer\r\n this._clearTapTimer();\r\n this.isMultitouch = true;\r\n } else {\r\n this.isMultitouch = false;\r\n }\r\n }\r\n\r\n onPointerMove(e) {\r\n e.preventDefault(); // always preventDefault move event\r\n\r\n if (!this._numActivePoints) {\r\n return;\r\n }\r\n\r\n this._updatePoints(e, 'move');\r\n\r\n if (this.pswp.dispatch('pointerMove', { originalEvent: e }).defaultPrevented) {\r\n return;\r\n }\r\n\r\n if (this._numActivePoints === 1 && !this.isDragging) {\r\n if (!this.dragAxis) {\r\n this._calculateDragDirection();\r\n }\r\n\r\n // Drag axis was detected, emit drag.start\r\n if (this.dragAxis && !this.isDragging) {\r\n if (this.isZooming) {\r\n this.isZooming = false;\r\n this.zoomLevels.end();\r\n }\r\n\r\n this.isDragging = true;\r\n this._clearTapTimer(); // Tap can not trigger after drag\r\n\r\n // Adjust starting point\r\n this._updateStartPoints();\r\n this._intervalTime = Date.now();\r\n //this._startTime = this._intervalTime;\r\n this._velocityCalculated = false;\r\n equalizePoints(this._intervalP1, this.p1);\r\n this.velocity.x = 0;\r\n this.velocity.y = 0;\r\n this.drag.start();\r\n\r\n this._rafStopLoop();\r\n this._rafRenderLoop();\r\n }\r\n } else if (this._numActivePoints > 1 && !this.isZooming) {\r\n this._finishDrag();\r\n\r\n this.isZooming = true;\r\n\r\n // Adjust starting points\r\n this._updateStartPoints();\r\n\r\n this.zoomLevels.start();\r\n\r\n this._rafStopLoop();\r\n this._rafRenderLoop();\r\n }\r\n }\r\n\r\n _finishDrag() {\r\n if (this.isDragging) {\r\n this.isDragging = false;\r\n\r\n // Try to calculate velocity,\r\n // if it wasn't calculated yet in drag.change\r\n if (!this._velocityCalculated) {\r\n this._updateVelocity(true);\r\n }\r\n\r\n this.drag.end();\r\n this.dragAxis = null;\r\n }\r\n }\r\n\r\n\r\n onPointerUp(e) {\r\n if (!this._numActivePoints) {\r\n return;\r\n }\r\n\r\n this._updatePoints(e, 'up');\r\n\r\n if (this.pswp.dispatch('pointerUp', { originalEvent: e }).defaultPrevented) {\r\n return;\r\n }\r\n\r\n if (this._numActivePoints === 0) {\r\n this.pointerDown = false;\r\n this._rafStopLoop();\r\n\r\n if (this.isDragging) {\r\n this._finishDrag();\r\n } else if (!this.isZooming && !this.isMultitouch) {\r\n //this.zoomLevels.correctZoomPan();\r\n this._finishTap(e);\r\n }\r\n }\r\n\r\n if (this._numActivePoints < 2 && this.isZooming) {\r\n this.isZooming = false;\r\n this.zoomLevels.end();\r\n\r\n if (this._numActivePoints === 1) {\r\n // Since we have 1 point left, we need to reinitiate drag\r\n this.dragAxis = null;\r\n this._updateStartPoints();\r\n }\r\n }\r\n }\r\n\r\n\r\n _rafRenderLoop() {\r\n if (this.isDragging || this.isZooming) {\r\n this._updateVelocity();\r\n\r\n if (this.isDragging) {\r\n // make sure that pointer moved since the last update\r\n if (!pointsEqual(this.p1, this.prevP1)) {\r\n this.drag.change();\r\n }\r\n } else /* if (this.isZooming) */ {\r\n if (!pointsEqual(this.p1, this.prevP1)\r\n || !pointsEqual(this.p2, this.prevP2)) {\r\n this.zoomLevels.change();\r\n }\r\n }\r\n\r\n this._updatePrevPoints();\r\n this.raf = requestAnimationFrame(this._rafRenderLoop.bind(this));\r\n }\r\n }\r\n\r\n /**\r\n * Update velocity at 50ms interval\r\n */\r\n _updateVelocity(force) {\r\n const time = Date.now();\r\n const duration = time - this._intervalTime;\r\n\r\n if (duration < 50 && !force) {\r\n return;\r\n }\r\n\r\n\r\n this.velocity.x = this._getVelocity('x', duration);\r\n this.velocity.y = this._getVelocity('y', duration);\r\n\r\n this._intervalTime = time;\r\n equalizePoints(this._intervalP1, this.p1);\r\n this._velocityCalculated = true;\r\n }\r\n\r\n _finishTap(e) {\r\n const { mainScroll } = this.pswp;\r\n\r\n // Do not trigger tap events if main scroll is shifted\r\n if (mainScroll.isShifted()) {\r\n // restore main scroll position\r\n // (usually happens if stopped in the middle of animation)\r\n mainScroll.moveIndexBy(0, true);\r\n return;\r\n }\r\n\r\n // Do not trigger tap for touchcancel or pointercancel\r\n if (e.type.indexOf('cancel') > 0) {\r\n return;\r\n }\r\n\r\n // Trigger click instead of tap for mouse events\r\n if (e.type === 'mouseup' || e.pointerType === 'mouse') {\r\n this.tapHandler.click(this.startP1, e);\r\n return;\r\n }\r\n\r\n // Disable delay if there is no doubleTapAction\r\n const tapDelay = this.pswp.options.doubleTapAction ? DOUBLE_TAP_DELAY : 0;\r\n\r\n // If tapTimer is defined - we tapped recently,\r\n // check if the current tap is close to the previous one,\r\n // if yes - trigger double tap\r\n if (this._tapTimer) {\r\n this._clearTapTimer();\r\n // Check if two taps were more or less on the same place\r\n if (getDistanceBetween(this._lastStartP1, this.startP1) < MIN_TAP_DISTANCE) {\r\n this.tapHandler.doubleTap(this.startP1, e);\r\n }\r\n } else {\r\n equalizePoints(this._lastStartP1, this.startP1);\r\n this._tapTimer = setTimeout(() => {\r\n this.tapHandler.tap(this.startP1, e);\r\n this._clearTapTimer();\r\n }, tapDelay);\r\n }\r\n }\r\n\r\n _clearTapTimer() {\r\n if (this._tapTimer) {\r\n clearTimeout(this._tapTimer);\r\n this._tapTimer = null;\r\n }\r\n }\r\n\r\n /**\r\n * Get velocity for axis\r\n *\r\n * @param {Number} axis\r\n * @param {Number} duration\r\n */\r\n _getVelocity(axis, duration) {\r\n // displacement is like distance, but can be negative.\r\n const displacement = this.p1[axis] - this._intervalP1[axis];\r\n\r\n if (Math.abs(displacement) > 1 && duration > 5) {\r\n return displacement / duration;\r\n }\r\n\r\n return 0;\r\n }\r\n\r\n _rafStopLoop() {\r\n if (this.raf) {\r\n cancelAnimationFrame(this.raf);\r\n this.raf = null;\r\n }\r\n }\r\n\r\n // eslint-disable-next-line class-methods-use-this\r\n _preventPointerEventBehaviour(e) {\r\n // TODO find a way to disable e.preventDefault on some elements\r\n // via event or some class or something\r\n e.preventDefault();\r\n return true;\r\n }\r\n\r\n /**\r\n * Parses and normalizes points from the touch, mouse or pointer event.\r\n * Updates p1 and p2.\r\n *\r\n * @param {Event} e\r\n * @param {String} pointerType Normalized pointer type ('up', 'down' or 'move')\r\n */\r\n _updatePoints(e, pointerType) {\r\n if (this._pointerEventEnabled) {\r\n // Try to find the current pointer in ongoing pointers by its ID\r\n const pointerIndex = this._ongoingPointers.findIndex((ongoingPoiner) => {\r\n return ongoingPoiner.id === e.pointerId;\r\n });\r\n\r\n if (pointerType === 'up' && pointerIndex > -1) {\r\n // release the pointer - remove it from ongoing\r\n this._ongoingPointers.splice(pointerIndex, 1);\r\n } else if (pointerType === 'down' && pointerIndex === -1) {\r\n // add new pointer\r\n this._ongoingPointers.push(this._convertEventPosToPoint(e, {}));\r\n } else if (pointerIndex > -1) {\r\n // update existing pointer\r\n this._convertEventPosToPoint(e, this._ongoingPointers[pointerIndex]);\r\n }\r\n\r\n this._numActivePoints = this._ongoingPointers.length;\r\n\r\n // update points that PhotoSwipe uses\r\n // to calculate position and scale\r\n if (this._numActivePoints > 0) {\r\n equalizePoints(this.p1, this._ongoingPointers[0]);\r\n }\r\n\r\n if (this._numActivePoints > 1) {\r\n equalizePoints(this.p2, this._ongoingPointers[1]);\r\n }\r\n } else {\r\n this._numActivePoints = 0;\r\n if (e.type.indexOf('touch') > -1) {\r\n // Touch Event\r\n // https://developer.mozilla.org/en-US/docs/Web/API/TouchEvent\r\n if (e.touches && e.touches.length > 0) {\r\n this._convertEventPosToPoint(e.touches[0], this.p1);\r\n this._numActivePoints++;\r\n if (e.touches.length > 1) {\r\n this._convertEventPosToPoint(e.touches[1], this.p2);\r\n this._numActivePoints++;\r\n }\r\n }\r\n } else {\r\n // Mouse Event\r\n this._convertEventPosToPoint(e, this.p1);\r\n if (pointerType === 'up') {\r\n // clear all points on mouseup\r\n this._numActivePoints = 0;\r\n } else {\r\n this._numActivePoints++;\r\n }\r\n }\r\n }\r\n }\r\n\r\n // update points that were used during previous rAF tick\r\n _updatePrevPoints() {\r\n equalizePoints(this.prevP1, this.p1);\r\n equalizePoints(this.prevP2, this.p2);\r\n }\r\n\r\n // update points at the start of gesture\r\n _updateStartPoints() {\r\n equalizePoints(this.startP1, this.p1);\r\n equalizePoints(this.startP2, this.p2);\r\n this._updatePrevPoints();\r\n }\r\n\r\n _calculateDragDirection() {\r\n if (this.pswp.mainScroll.isShifted()) {\r\n // if main scroll position is shifted – direction is always horizontal\r\n this.dragAxis = 'x';\r\n } else {\r\n // calculate delta of the last touchmove tick\r\n const diff = Math.abs(this.p1.x - this.startP1.x) - Math.abs(this.p1.y - this.startP1.y);\r\n\r\n if (diff !== 0) {\r\n // check if pointer was shifted horizontally or vertically\r\n const axisToCheck = diff > 0 ? 'x' : 'y';\r\n\r\n if (Math.abs(this.p1[axisToCheck] - this.startP1[axisToCheck]) >= AXIS_SWIPE_HYSTERISIS) {\r\n this.dragAxis = axisToCheck;\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Converts touch, pointer or mouse event\r\n * to PhotoSwipe point.\r\n *\r\n * @param {Event} e\r\n * @param {Point} p\r\n */\r\n _convertEventPosToPoint(e, p) {\r\n p.x = e.pageX - this.pswp.offset.x;\r\n p.y = e.pageY - this.pswp.offset.y;\r\n\r\n // e.pointerId can be zero\r\n if (e.pointerId !== undefined) {\r\n p.id = e.pointerId;\r\n } else if (e.identifier !== undefined) {\r\n p.id = e.identifier;\r\n }\r\n\r\n return p;\r\n }\r\n\r\n _onClick(e) {\r\n // Do not allow click event to pass through after drag\r\n if (this.pswp.mainScroll.isShifted()) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n }\r\n }\r\n}\n\n/**\r\n * Handles movement of the main scrolling container\r\n * (for example, it repositions when user swipes left or right).\r\n *\r\n * Also stores its state.\r\n */\r\n\r\nconst MAIN_SCROLL_END_FRICTION = 0.35;\r\n\r\n\r\n// const MIN_SWIPE_TRANSITION_DURATION = 250;\r\n// const MAX_SWIPE_TRABSITION_DURATION = 500;\r\n// const DEFAULT_SWIPE_TRANSITION_DURATION = 333;\r\n\r\nclass MainScroll {\r\n /**\r\n * @param {PhotoSwipe} pswp\r\n */\r\n constructor(pswp) {\r\n this.pswp = pswp;\r\n this.x = 0;\r\n\r\n this.resetPosition();\r\n }\r\n\r\n /**\r\n * Position the scroller and slide containers\r\n * according to viewport size.\r\n *\r\n * @param {Boolean} resizeSlides Whether slides content should resized\r\n */\r\n resize(resizeSlides) {\r\n const { pswp } = this;\r\n const newSlideWidth = Math.round(\r\n pswp.viewportSize.x + pswp.viewportSize.x * pswp.options.spacing\r\n );\r\n // Mobile browsers might trigger a resize event during a gesture.\r\n // (due to toolbar appearing or hiding).\r\n // Avoid re-adjusting main scroll position if width wasn't changed\r\n const slideWidthChanged = (newSlideWidth !== this.slideWidth);\r\n\r\n if (slideWidthChanged) {\r\n this.slideWidth = newSlideWidth;\r\n this.moveTo(this.getCurrSlideX());\r\n }\r\n\r\n this.itemHolders.forEach((itemHolder, index) => {\r\n if (slideWidthChanged) {\r\n setTransform(itemHolder.el, (index + this._containerShiftIndex)\r\n * this.slideWidth);\r\n }\r\n\r\n if (resizeSlides && itemHolder.slide) {\r\n itemHolder.slide.resize();\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Reset X position of the main scroller to zero\r\n */\r\n resetPosition() {\r\n // Position on the main scroller (offset)\r\n // it is independent from slide index\r\n this._currPositionIndex = 0;\r\n this._prevPositionIndex = 0;\r\n\r\n // This will force recalculation of size on next resize()\r\n this.slideWidth = 0;\r\n\r\n // _containerShiftIndex*viewportSize will give you amount of transform of the current slide\r\n this._containerShiftIndex = -1;\r\n }\r\n\r\n /**\r\n * Create and append array of three items\r\n * that hold data about slides in DOM\r\n */\r\n appendHolders() {\r\n this.itemHolders = [];\r\n\r\n // append our three slide holders -\r\n // previous, current, and next\r\n for (let i = 0; i < 3; i++) {\r\n const el = createElement('pswp__item', false, this.pswp.container);\r\n\r\n // hide nearby item holders until initial zoom animation finishes (to avoid extra Paints)\r\n el.style.display = (i === 1) ? 'block' : 'none';\r\n\r\n this.itemHolders.push({\r\n el,\r\n //index: -1\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Whether the main scroll can be horizontally swiped to the next or previous slide.\r\n */\r\n canBeSwiped() {\r\n return this.pswp.getNumItems() > 1;\r\n }\r\n\r\n /**\r\n * Move main scroll by X amount of slides.\r\n * For example:\r\n * `-1` will move to the previous slide,\r\n * `0` will reset the scroll position of the current slide,\r\n * `3` will move three slides forward\r\n *\r\n * If loop option is enabled - index will be automatically looped too,\r\n * (for example `-1` will move to the last slide of the gallery).\r\n *\r\n * @param {Integer} diff\r\n * @returns {Boolean} whether index was changed or not\r\n */\r\n moveIndexBy(diff, animate, velocityX) {\r\n const { pswp } = this;\r\n let newIndex = pswp.potentialIndex + diff;\r\n const numSlides = pswp.getNumItems();\r\n\r\n if (pswp.canLoop()) {\r\n newIndex = pswp.getLoopedIndex(newIndex);\r\n const distance = (diff + numSlides) % numSlides;\r\n if (distance <= numSlides / 2) {\r\n // go forward\r\n diff = distance;\r\n } else {\r\n // go backwards\r\n diff = distance - numSlides;\r\n }\r\n } else {\r\n if (newIndex < 0) {\r\n newIndex = 0;\r\n } else if (newIndex >= numSlides) {\r\n newIndex = numSlides - 1;\r\n }\r\n diff = newIndex - pswp.potentialIndex;\r\n }\r\n\r\n pswp.potentialIndex = newIndex;\r\n this._currPositionIndex -= diff;\r\n\r\n pswp.animations.stopMainScroll();\r\n\r\n const destinationX = this.getCurrSlideX();\r\n if (!animate) {\r\n this.moveTo(destinationX);\r\n this.updateCurrItem();\r\n } else {\r\n pswp.animations.startSpring({\r\n isMainScroll: true,\r\n start: this.x,\r\n end: destinationX,\r\n velocity: velocityX || 0,\r\n naturalFrequency: 30,\r\n dampingRatio: 1, //0.7,\r\n onUpdate: (x) => {\r\n this.moveTo(x);\r\n },\r\n onComplete: () => {\r\n this.updateCurrItem();\r\n pswp.appendHeavy();\r\n }\r\n });\r\n\r\n let currDiff = pswp.potentialIndex - pswp.currIndex;\r\n if (pswp.canLoop()) {\r\n const currDistance = (currDiff + numSlides) % numSlides;\r\n if (currDistance <= numSlides / 2) {\r\n // go forward\r\n currDiff = currDistance;\r\n } else {\r\n // go backwards\r\n currDiff = currDistance - numSlides;\r\n }\r\n }\r\n\r\n // Force-append new slides during transition\r\n // if difference between slides is more than 1\r\n if (Math.abs(currDiff) > 1) {\r\n this.updateCurrItem();\r\n }\r\n }\r\n\r\n if (diff) {\r\n return true;\r\n }\r\n }\r\n\r\n /**\r\n * X position of the main scroll for the current slide\r\n * (ignores position during dragging)\r\n */\r\n getCurrSlideX() {\r\n return this.slideWidth * this._currPositionIndex;\r\n }\r\n\r\n /**\r\n * Whether scroll position is shifted.\r\n * For example, it will return true if the scroll is being dragged or animated.\r\n */\r\n isShifted() {\r\n return this.x !== this.getCurrSlideX();\r\n }\r\n\r\n /**\r\n * Update slides X positions and set their content\r\n */\r\n updateCurrItem() {\r\n const { pswp } = this;\r\n const positionDifference = this._prevPositionIndex - this._currPositionIndex;\r\n\r\n if (!positionDifference) {\r\n return;\r\n }\r\n\r\n this._prevPositionIndex = this._currPositionIndex;\r\n\r\n pswp.currIndex = pswp.potentialIndex;\r\n\r\n let diffAbs = Math.abs(positionDifference);\r\n let tempHolder;\r\n\r\n if (diffAbs >= 3) {\r\n this._containerShiftIndex += positionDifference + (positionDifference > 0 ? -3 : 3);\r\n diffAbs = 3;\r\n }\r\n\r\n for (let i = 0; i < diffAbs; i++) {\r\n if (positionDifference > 0) {\r\n tempHolder = this.itemHolders.shift();\r\n this.itemHolders[2] = tempHolder; // move first to last\r\n\r\n this._containerShiftIndex++;\r\n\r\n setTransform(tempHolder.el, (this._containerShiftIndex + 2) * this.slideWidth);\r\n\r\n pswp.setContent(tempHolder, (pswp.currIndex - diffAbs) + i + 2);\r\n } else {\r\n tempHolder = this.itemHolders.pop();\r\n this.itemHolders.unshift(tempHolder); // move last to first\r\n\r\n this._containerShiftIndex--;\r\n\r\n setTransform(tempHolder.el, this._containerShiftIndex * this.slideWidth);\r\n\r\n pswp.setContent(tempHolder, (pswp.currIndex + diffAbs) - i - 2);\r\n }\r\n }\r\n\r\n // Reset transfrom every 50ish navigations in one direction.\r\n //\r\n // Otherwise transform will keep growing indefinitely,\r\n // which might cause issues as browsers have a maximum transform limit.\r\n // I wasn't able to reach it, but just to be safe.\r\n // This should not cause noticable lag.\r\n if (Math.abs(this._containerShiftIndex) > 50 && !this.isShifted()) {\r\n this.resetPosition();\r\n this.resize();\r\n }\r\n\r\n // Pan transition might be running (and consntantly updating pan position)\r\n pswp.animations.stopAllPan();\r\n\r\n this.itemHolders.forEach((itemHolder, i) => {\r\n if (itemHolder.slide) {\r\n // Slide in the 2nd holder is always active\r\n itemHolder.slide.setIsActive(i === 1);\r\n }\r\n });\r\n\r\n pswp.currSlide = this.itemHolders[1].slide;\r\n pswp.contentLoader.updateLazy(positionDifference);\r\n\r\n pswp.currSlide.applyCurrentZoomPan();\r\n pswp.dispatch('change');\r\n }\r\n\r\n /**\r\n * Move the X position of the main scroll container\r\n *\r\n * @param {Number} x\r\n * @param {Boolean} dragging\r\n */\r\n moveTo(x, dragging) {\r\n let newSlideIndexOffset;\r\n let delta;\r\n\r\n if (!this.pswp.canLoop() && dragging) {\r\n // Apply friction\r\n newSlideIndexOffset = ((this.slideWidth * this._currPositionIndex) - x) / this.slideWidth;\r\n newSlideIndexOffset += this.pswp.currIndex;\r\n delta = Math.round(x - this.x);\r\n\r\n if ((newSlideIndexOffset < 0 && delta > 0)\r\n || (newSlideIndexOffset >= this.pswp.getNumItems() - 1 && delta < 0)) {\r\n x = this.x + (delta * MAIN_SCROLL_END_FRICTION);\r\n }\r\n }\r\n\r\n this.x = x;\r\n setTransform(this.pswp.container, x);\r\n\r\n this.pswp.dispatch('moveMainScroll', { x, dragging });\r\n }\r\n}\n\n/**\r\n *\r\n * keyboard.js\r\n *\r\n * - Manages keyboard shortcuts.\r\n * - Heps trap focus within photoswipe.\r\n *\r\n */\r\n\r\nclass Keyboard {\r\n constructor(pswp) {\r\n this.pswp = pswp;\r\n\r\n pswp.on('bindEvents', () => {\r\n // Dialog was likely opened by keyboard if initial point is not defined\r\n if (!pswp.options.initialPointerPos) {\r\n // focus causes layout,\r\n // which causes lag during the animation,\r\n // that's why we delay it until the opener transition ends\r\n this._focusRoot();\r\n }\r\n\r\n pswp.events.add(document, 'focusin', this._onFocusIn.bind(this));\r\n pswp.events.add(document, 'keydown', this._onKeyDown.bind(this));\r\n });\r\n\r\n const lastActiveElement = document.activeElement;\r\n pswp.on('destroy', () => {\r\n if (pswp.options.returnFocus\r\n && lastActiveElement\r\n && this._wasFocused) {\r\n lastActiveElement.focus();\r\n }\r\n });\r\n }\r\n\r\n _focusRoot() {\r\n if (!this._wasFocused) {\r\n this.pswp.element.focus();\r\n this._wasFocused = true;\r\n }\r\n }\r\n\r\n _onKeyDown(e) {\r\n const { pswp } = this;\r\n\r\n if (pswp.dispatch('keydown', { originalEvent: e }).defaultPrevented) {\r\n return;\r\n }\r\n\r\n if (specialKeyUsed(e)) {\r\n // don't do anything if special key pressed\r\n // to prevent from overriding default browser actions\r\n // for example, in Chrome on Mac cmd+arrow-left returns to previous page\r\n return;\r\n }\r\n\r\n let keydownAction;\r\n let axis;\r\n let isForward;\r\n\r\n switch (e.keyCode) {\r\n case 27: // esc\r\n if (pswp.options.escKey) {\r\n keydownAction = 'close';\r\n }\r\n break;\r\n case 90: // z key\r\n keydownAction = 'toggleZoom';\r\n break;\r\n case 37: // left\r\n axis = 'x';\r\n break;\r\n case 38: // top\r\n axis = 'y';\r\n break;\r\n case 39: // right\r\n axis = 'x';\r\n isForward = true;\r\n break;\r\n case 40: // bottom\r\n isForward = true;\r\n axis = 'y';\r\n break;\r\n case 9: // tab\r\n this._focusRoot();\r\n break;\r\n }\r\n\r\n // if left/right/top/bottom key\r\n if (axis) {\r\n // prevent page scroll\r\n e.preventDefault();\r\n\r\n const { currSlide } = pswp;\r\n\r\n if (pswp.options.arrowKeys\r\n && axis === 'x'\r\n && pswp.getNumItems() > 1) {\r\n keydownAction = isForward ? 'next' : 'prev';\r\n } else if (currSlide && currSlide.currZoomLevel > currSlide.zoomLevels.fit) {\r\n // up/down arrow keys pan the image vertically\r\n // left/right arrow keys pan horizontally.\r\n // Unless there is only one image,\r\n // or arrowKeys option is disabled\r\n currSlide.pan[axis] += isForward ? -80 : 80;\r\n currSlide.panTo(currSlide.pan.x, currSlide.pan.y);\r\n }\r\n }\r\n\r\n if (keydownAction) {\r\n e.preventDefault();\r\n pswp[keydownAction]();\r\n }\r\n }\r\n\r\n /**\r\n * Trap focus inside photoswipe\r\n *\r\n * @param {Event} e\r\n */\r\n _onFocusIn(e) {\r\n const { template } = this.pswp;\r\n if (document !== e.target\r\n && template !== e.target\r\n && !template.contains(e.target)) {\r\n // focus root element\r\n template.focus();\r\n }\r\n }\r\n}\n\n/**\r\n * Runs CSS transition.\r\n */\r\n\r\nconst DEFAULT_EASING = 'cubic-bezier(.4,0,.22,1)';\r\n\r\nclass CSSAnimation {\r\n // onComplete can be unpredictable, be careful about current state\r\n constructor(props) {\r\n this.props = props;\r\n const {\r\n target,\r\n onComplete,\r\n transform,\r\n // opacity\r\n } = props;\r\n\r\n let {\r\n duration,\r\n easing,\r\n } = props;\r\n\r\n // support only transform and opacity\r\n const prop = transform ? 'transform' : 'opacity';\r\n const propValue = props[prop];\r\n\r\n this._target = target;\r\n this._onComplete = onComplete;\r\n\r\n duration = duration || 333;\r\n easing = easing || DEFAULT_EASING;\r\n\r\n this._onTransitionEnd = this._onTransitionEnd.bind(this);\r\n\r\n // Using timeout hack to make sure that animation\r\n // starts even if the animated property was changed recently,\r\n // otherwise transitionend might not fire or transiton won't start.\r\n // https://drafts.csswg.org/css-transitions/#starting\r\n //\r\n // ¯\\_(ツ)_/¯\r\n this._firstFrameTimeout = setTimeout(() => {\r\n setTransitionStyle(target, prop, duration, easing);\r\n this._firstFrameTimeout = setTimeout(() => {\r\n target.addEventListener('transitionend', this._onTransitionEnd, false);\r\n target.addEventListener('transitioncancel', this._onTransitionEnd, false);\r\n target.style[prop] = propValue;\r\n }, 30); // Do not reduce this number\r\n }, 0);\r\n }\r\n\r\n _onTransitionEnd(e) {\r\n if (e.target === this._target) {\r\n this._finalizeAnimation();\r\n }\r\n }\r\n\r\n _finalizeAnimation() {\r\n if (!this._finished) {\r\n this._finished = true;\r\n this.onFinish();\r\n if (this._onComplete) {\r\n this._onComplete();\r\n }\r\n }\r\n }\r\n\r\n // Destroy is called automatically onFinish\r\n destroy() {\r\n if (this._firstFrameTimeout) {\r\n clearTimeout(this._firstFrameTimeout);\r\n }\r\n removeTransitionStyle(this._target);\r\n this._target.removeEventListener('transitionend', this._onTransitionEnd, false);\r\n this._target.removeEventListener('transitioncancel', this._onTransitionEnd, false);\r\n if (!this._finished) {\r\n this._finalizeAnimation();\r\n }\r\n }\r\n}\n\n/**\r\n * Spring easing helper\r\n */\r\n\r\nconst DEFAULT_NATURAL_FREQUENCY = 12;\r\nconst DEFAULT_DAMPING_RATIO = 0.75;\r\n\r\nclass SpringEaser {\r\n /**\r\n * @param {Number} initialVelocity Initial velocity, px per ms.\r\n *\r\n * @param {Number} dampingRatio Determines how bouncy animation will be.\r\n * From 0 to 1, 0 - always overshoot, 1 - do not overshoot.\r\n * \"overshoot\" refers to part of animation that\r\n * goes beyond the final value.\r\n *\r\n * @param {Number} naturalFrequency Determines how fast animation will slow down.\r\n * The higher value - the stiffer the transition will be,\r\n * and the faster it will slow down.\r\n * Recommended value from 10 to 50\r\n */\r\n constructor(initialVelocity, dampingRatio, naturalFrequency) {\r\n this.velocity = initialVelocity * 1000; // convert to \"pixels per second\"\r\n\r\n // https://en.wikipedia.org/wiki/Damping_ratio\r\n this._dampingRatio = dampingRatio || DEFAULT_DAMPING_RATIO;\r\n\r\n // https://en.wikipedia.org/wiki/Natural_frequency\r\n this._naturalFrequency = naturalFrequency || DEFAULT_NATURAL_FREQUENCY;\r\n\r\n if (this._dampingRatio < 1) {\r\n this._dampedFrequency = this._naturalFrequency\r\n * Math.sqrt(1 - this._dampingRatio * this._dampingRatio);\r\n }\r\n }\r\n\r\n /**\r\n * @param {Number} deltaPosition Difference between current and end position of the animation\r\n * @param {Number} deltaTime Frame duration in milliseconds\r\n *\r\n * @returns {Number} Displacement, relative to the end position.\r\n */\r\n easeFrame(deltaPosition, deltaTime) {\r\n // Inspired by Apple Webkit and Android spring function implementation\r\n // https://en.wikipedia.org/wiki/Oscillation\r\n // https://en.wikipedia.org/wiki/Damping_ratio\r\n // we ignore mass (assume that it's 1kg)\r\n\r\n let displacement = 0;\r\n let coeff;\r\n\r\n deltaTime /= 1000;\r\n\r\n const naturalDumpingPow = Math.E ** (-this._dampingRatio * this._naturalFrequency * deltaTime);\r\n\r\n if (this._dampingRatio === 1) {\r\n coeff = this.velocity + this._naturalFrequency * deltaPosition;\r\n\r\n displacement = (deltaPosition + coeff * deltaTime) * naturalDumpingPow;\r\n\r\n this.velocity = displacement\r\n * (-this._naturalFrequency) + coeff\r\n * naturalDumpingPow;\r\n } else if (this._dampingRatio < 1) {\r\n coeff = (1 / this._dampedFrequency)\r\n * (this._dampingRatio * this._naturalFrequency * deltaPosition + this.velocity);\r\n\r\n const dumpedFCos = Math.cos(this._dampedFrequency * deltaTime);\r\n const dumpedFSin = Math.sin(this._dampedFrequency * deltaTime);\r\n\r\n displacement = naturalDumpingPow\r\n * (deltaPosition * dumpedFCos + coeff * dumpedFSin);\r\n\r\n this.velocity = displacement\r\n * (-this._naturalFrequency)\r\n * this._dampingRatio\r\n + naturalDumpingPow\r\n * (-this._dampedFrequency * deltaPosition * dumpedFSin\r\n + this._dampedFrequency * coeff * dumpedFCos);\r\n }\r\n\r\n // Overdamped (>1) damping ratio is not supported\r\n\r\n return displacement;\r\n }\r\n}\n\nclass SpringAnimation {\r\n constructor(props) {\r\n this.props = props;\r\n\r\n const {\r\n start,\r\n end,\r\n velocity,\r\n onUpdate,\r\n onComplete,\r\n onFinish,\r\n dampingRatio,\r\n naturalFrequency\r\n } = props;\r\n\r\n const easer = new SpringEaser(velocity, dampingRatio, naturalFrequency);\r\n let prevTime = Date.now();\r\n let deltaPosition = start - end;\r\n\r\n this._onFinish = onFinish;\r\n\r\n const animationLoop = () => {\r\n if (this._raf) {\r\n deltaPosition = easer.easeFrame(deltaPosition, Date.now() - prevTime);\r\n\r\n // Stop the animation if velocity is low and position is close to end\r\n if (Math.abs(deltaPosition) < 1 && Math.abs(easer.velocity) < 50) {\r\n // Finalize the animation\r\n onUpdate(end);\r\n if (onComplete) {\r\n onComplete();\r\n }\r\n this.onFinish();\r\n } else {\r\n prevTime = Date.now();\r\n onUpdate(deltaPosition + end);\r\n this._raf = requestAnimationFrame(animationLoop);\r\n }\r\n }\r\n };\r\n\r\n this._raf = requestAnimationFrame(animationLoop);\r\n }\r\n\r\n // Destroy is called automatically onFinish\r\n destroy() {\r\n if (this._raf >= 0) {\r\n cancelAnimationFrame(this._raf);\r\n }\r\n this._raf = null;\r\n }\r\n}\n\n/**\r\n * Manages animations\r\n */\r\n\r\nclass Animations {\r\n constructor() {\r\n this.activeAnimations = [];\r\n }\r\n\r\n startSpring(props) {\r\n this._start(props, true);\r\n }\r\n\r\n startTransition(props) {\r\n this._start(props);\r\n }\r\n\r\n _start(props, isSpring) {\r\n let animation;\r\n if (isSpring) {\r\n animation = new SpringAnimation(props);\r\n } else {\r\n animation = new CSSAnimation(props);\r\n }\r\n\r\n this.activeAnimations.push(animation);\r\n animation.onFinish = () => this.stop(animation);\r\n\r\n return animation;\r\n }\r\n\r\n stop(animation) {\r\n animation.destroy();\r\n const index = this.activeAnimations.indexOf(animation);\r\n if (index > -1) {\r\n this.activeAnimations.splice(index, 1);\r\n }\r\n }\r\n\r\n stopAll() { // _stopAllAnimations\r\n this.activeAnimations.forEach((animation) => {\r\n animation.destroy();\r\n });\r\n this.activeAnimations = [];\r\n }\r\n\r\n /**\r\n * Stop all pan or zoom transitions\r\n */\r\n stopAllPan() {\r\n this.activeAnimations = this.activeAnimations.filter((animation) => {\r\n if (animation.props.isPan) {\r\n animation.destroy();\r\n return false;\r\n }\r\n\r\n return true;\r\n });\r\n }\r\n\r\n stopMainScroll() {\r\n this.activeAnimations = this.activeAnimations.filter((animation) => {\r\n if (animation.props.isMainScroll) {\r\n animation.destroy();\r\n return false;\r\n }\r\n\r\n return true;\r\n });\r\n }\r\n\r\n /**\r\n * Returns true if main scroll transition is running\r\n */\r\n // isMainScrollRunning() {\r\n // return this.activeAnimations.some((animation) => {\r\n // return animation.props.isMainScroll;\r\n // });\r\n // }\r\n\r\n /**\r\n * Returns true if any pan or zoom transition is running\r\n */\r\n isPanRunning() {\r\n return this.activeAnimations.some((animation) => {\r\n return animation.props.isPan;\r\n });\r\n }\r\n}\n\n/**\r\n * Handles scroll wheel.\r\n * Can pan and zoom current slide image.\r\n */\r\nclass ScrollWheel {\r\n constructor(pswp) {\r\n this.pswp = pswp;\r\n pswp.events.add(pswp.element, 'wheel', this._onWheel.bind(this));\r\n }\r\n\r\n _onWheel(e) {\r\n e.preventDefault();\r\n const { currSlide } = this.pswp;\r\n let { deltaX, deltaY } = e;\r\n\r\n if (!currSlide) {\r\n return;\r\n }\r\n\r\n if (this.pswp.dispatch('wheel', { originalEvent: e }).defaultPrevented) {\r\n return;\r\n }\r\n\r\n if (e.ctrlKey || this.pswp.options.wheelToZoom) {\r\n // zoom\r\n if (currSlide.isZoomable()) {\r\n let zoomFactor = -deltaY;\r\n if (e.deltaMode === 1 /* DOM_DELTA_LINE */) {\r\n zoomFactor *= 0.05;\r\n } else {\r\n zoomFactor *= e.deltaMode ? 1 : 0.002;\r\n }\r\n zoomFactor = 2 ** zoomFactor;\r\n\r\n const destZoomLevel = currSlide.currZoomLevel * zoomFactor;\r\n currSlide.zoomTo(destZoomLevel, {\r\n x: e.clientX,\r\n y: e.clientY\r\n });\r\n }\r\n } else {\r\n // pan\r\n if (currSlide.isPannable()) {\r\n if (e.deltaMode === 1 /* DOM_DELTA_LINE */) {\r\n // 18 - average line height\r\n deltaX *= 18;\r\n deltaY *= 18;\r\n }\r\n\r\n currSlide.panTo(\r\n currSlide.pan.x - deltaX,\r\n currSlide.pan.y - deltaY\r\n );\r\n }\r\n }\r\n }\r\n}\n\nfunction addElementHTML(htmlData) {\r\n if (typeof htmlData === 'string') {\r\n // Allow developers to provide full svg,\r\n // For example:\r\n // \r\n // \r\n // \r\n // \r\n // Can also be any HTML string.\r\n return htmlData;\r\n }\r\n\r\n if (!htmlData || !htmlData.isCustomSVG) {\r\n return '';\r\n }\r\n\r\n const svgData = htmlData;\r\n let out = '';\r\n out = out.split('%d').join(svgData.size || 32); // replace all %d with size\r\n\r\n // Icons may contain outline/shadow,\r\n // to make it we \"clone\" base icon shape and add border to it.\r\n // Icon itself and border are styled via CSS.\r\n //\r\n // Property shadowID defines ID of element that should be cloned.\r\n if (svgData.outlineID) {\r\n out += '';\r\n }\r\n\r\n out += svgData.inner;\r\n\r\n out += '';\r\n\r\n return out;\r\n}\r\n\r\nclass UIElement {\r\n constructor(pswp, data) {\r\n const name = data.name || data.className;\r\n let elementHTML = data.html;\r\n\r\n if (pswp.options[name] === false) {\r\n // exit if element is disabled from options\r\n return;\r\n }\r\n\r\n // Allow to override SVG icons from options\r\n if (typeof pswp.options[name + 'SVG'] === 'string') {\r\n // arrowPrevSVG\r\n // arrowNextSVG\r\n // closeSVG\r\n // zoomSVG\r\n elementHTML = pswp.options[name + 'SVG'];\r\n }\r\n\r\n pswp.dispatch('uiElementCreate', { data });\r\n\r\n let className = '';\r\n if (data.isButton) {\r\n className += 'pswp__button ';\r\n className += (data.className || `pswp__button--${data.name}`);\r\n } else {\r\n className += (data.className || `pswp__${data.name}`);\r\n }\r\n\r\n let element;\r\n let tagName = data.isButton ? (data.tagName || 'button') : (data.tagName || 'div');\r\n tagName = tagName.toLowerCase();\r\n element = createElement(className, tagName);\r\n\r\n if (data.isButton) {\r\n // create button element\r\n element = createElement(className, tagName);\r\n if (tagName === 'button') {\r\n element.type = 'button';\r\n }\r\n\r\n let { title } = data;\r\n const { ariaLabel } = data;\r\n\r\n if (typeof pswp.options[name + 'Title'] === 'string') {\r\n title = pswp.options[name + 'Title'];\r\n }\r\n\r\n if (title) {\r\n element.title = title;\r\n }\r\n\r\n if (ariaLabel || title) {\r\n element.setAttribute('aria-label', ariaLabel || title);\r\n }\r\n }\r\n\r\n element.innerHTML = addElementHTML(elementHTML);\r\n\r\n if (data.onInit) {\r\n data.onInit(element, pswp);\r\n }\r\n\r\n if (data.onClick) {\r\n element.onclick = (e) => {\r\n if (typeof data.onClick === 'string') {\r\n pswp[data.onClick]();\r\n } else {\r\n data.onClick(e, element, pswp);\r\n }\r\n };\r\n }\r\n\r\n // Top bar is default position\r\n const appendTo = data.appendTo || 'bar';\r\n let container;\r\n if (appendTo === 'bar') {\r\n if (!pswp.topBar) {\r\n pswp.topBar = createElement('pswp__top-bar pswp__hide-on-close', false, pswp.scrollWrap);\r\n }\r\n container = pswp.topBar;\r\n } else {\r\n // element outside of top bar gets a secondary class\r\n // that makes element fade out on close\r\n element.classList.add('pswp__hide-on-close');\r\n\r\n if (appendTo === 'wrapper') {\r\n container = pswp.scrollWrap;\r\n } else {\r\n // root element\r\n container = pswp.element;\r\n }\r\n }\r\n\r\n container.appendChild(pswp.applyFilters('uiElement', element, data));\r\n }\r\n}\n\n/*\r\n Backward and forward arrow buttons\r\n */\r\n\r\nfunction initArrowButton(element, pswp, isNextButton) {\r\n element.classList.add('pswp__button--arrow');\r\n pswp.on('change', () => {\r\n if (!pswp.options.loop) {\r\n if (isNextButton) {\r\n element.disabled = !(pswp.currIndex < pswp.getNumItems() - 1);\r\n } else {\r\n element.disabled = !(pswp.currIndex > 0);\r\n }\r\n }\r\n });\r\n}\r\n\r\nconst arrowPrev = {\r\n name: 'arrowPrev',\r\n className: 'pswp__button--arrow--prev',\r\n title: 'Previous',\r\n order: 10,\r\n isButton: true,\r\n appendTo: 'wrapper',\r\n html: {\r\n isCustomSVG: true,\r\n size: 60,\r\n inner: '',\r\n outlineID: 'pswp__icn-arrow'\r\n },\r\n onClick: 'prev',\r\n onInit: initArrowButton\r\n};\r\n\r\nconst arrowNext = {\r\n name: 'arrowNext',\r\n className: 'pswp__button--arrow--next',\r\n title: 'Next',\r\n order: 11,\r\n isButton: true,\r\n appendTo: 'wrapper',\r\n html: {\r\n isCustomSVG: true,\r\n size: 60,\r\n inner: '',\r\n outlineID: 'pswp__icn-arrow'\r\n },\r\n onClick: 'next',\r\n onInit: (el, pswp) => {\r\n initArrowButton(el, pswp, true);\r\n }\r\n};\n\nconst closeButton = {\r\n name: 'close',\r\n title: 'Close',\r\n order: 20,\r\n isButton: true,\r\n html: {\r\n isCustomSVG: true,\r\n inner: '',\r\n outlineID: 'pswp__icn-close'\r\n },\r\n onClick: 'close'\r\n};\n\nconst zoomButton = {\r\n name: 'zoom',\r\n title: 'Zoom',\r\n order: 10,\r\n isButton: true,\r\n html: {\r\n isCustomSVG: true,\r\n inner: ''\r\n + ''\r\n + '',\r\n outlineID: 'pswp__icn-zoom'\r\n },\r\n onClick: 'toggleZoom'\r\n};\n\nconst loadingIndicator = {\r\n name: 'preloader',\r\n appendTo: 'bar',\r\n order: 7,\r\n html: {\r\n isCustomSVG: true,\r\n inner: '',\r\n outlineID: 'pswp__icn-loading'\r\n },\r\n onInit: (indicatorElement, pswp) => {\r\n let isVisible;\r\n let delayTimeout;\r\n\r\n const toggleIndicatorClass = (className, add) => {\r\n indicatorElement.classList[add ? 'add' : 'remove']('pswp__preloader--' + className);\r\n };\r\n\r\n const setIndicatorVisibility = (visible) => {\r\n if (isVisible !== visible) {\r\n isVisible = visible;\r\n toggleIndicatorClass('active', visible);\r\n }\r\n };\r\n\r\n const updatePreloaderVisibility = () => {\r\n if (!pswp.currSlide.content.isLoading()) {\r\n setIndicatorVisibility(false);\r\n if (delayTimeout) {\r\n clearTimeout(delayTimeout);\r\n delayTimeout = null;\r\n }\r\n return;\r\n }\r\n\r\n if (!delayTimeout) {\r\n // display loading indicator with delay\r\n delayTimeout = setTimeout(() => {\r\n setIndicatorVisibility(pswp.currSlide.content.isLoading());\r\n delayTimeout = null;\r\n }, pswp.options.preloaderDelay);\r\n }\r\n };\r\n\r\n pswp.on('change', updatePreloaderVisibility);\r\n\r\n pswp.on('loadComplete', (e) => {\r\n if (pswp.currSlide === e.slide) {\r\n updatePreloaderVisibility();\r\n }\r\n });\r\n\r\n // expose the method\r\n pswp.ui.updatePreloaderVisibility = updatePreloaderVisibility;\r\n }\r\n};\n\nconst counterIndicator = {\r\n name: 'counter',\r\n order: 5,\r\n onInit: (counterElement, pswp) => {\r\n pswp.on('change', () => {\r\n counterElement.innerText = (pswp.currIndex + 1)\r\n + pswp.options.indexIndicatorSep\r\n + pswp.getNumItems();\r\n });\r\n }\r\n};\n\n/**\r\n * Set special class on element when image is zoomed.\r\n *\r\n * By default it is used to adjust\r\n * zoom icon and zoom cursor via CSS.\r\n *\r\n * @param {Boolean} isZoomedIn\r\n */\r\nfunction setZoomedIn(el, isZoomedIn) {\r\n el.classList[isZoomedIn ? 'add' : 'remove']('pswp--zoomed-in');\r\n}\r\n\r\nclass UI {\r\n constructor(pswp) {\r\n this.pswp = pswp;\r\n }\r\n\r\n init() {\r\n const { pswp } = this;\r\n this.isRegistered = false;\r\n this.uiElementsData = [\r\n closeButton,\r\n arrowPrev,\r\n arrowNext,\r\n zoomButton,\r\n loadingIndicator,\r\n counterIndicator\r\n ];\r\n\r\n pswp.dispatch('uiRegister');\r\n\r\n // sort by order\r\n this.uiElementsData.sort((a, b) => {\r\n // default order is 0\r\n return (a.order || 0) - (b.order || 0);\r\n });\r\n\r\n this.items = [];\r\n\r\n this.isRegistered = true;\r\n this.uiElementsData.forEach((uiElementData) => {\r\n this.registerElement(uiElementData);\r\n });\r\n\r\n pswp.on('change', () => {\r\n pswp.element.classList[pswp.getNumItems() === 1 ? 'add' : 'remove']('pswp--one-slide');\r\n });\r\n\r\n pswp.on('zoomPanUpdate', () => this._onZoomPanUpdate());\r\n }\r\n\r\n registerElement(elementData) {\r\n if (this.isRegistered) {\r\n this.items.push(\r\n new UIElement(this.pswp, elementData)\r\n );\r\n } else {\r\n this.uiElementsData.push(elementData);\r\n }\r\n }\r\n\r\n /**\r\n * Fired each time zoom or pan position is changed.\r\n * Update classes that control visibility of zoom button and cursor icon.\r\n */\r\n _onZoomPanUpdate() {\r\n const { template, currSlide, options } = this.pswp;\r\n let { currZoomLevel } = currSlide;\r\n\r\n if (this.pswp.opener.isClosing) {\r\n return;\r\n }\r\n\r\n // if not open yet - check against initial zoom level\r\n if (!this.pswp.opener.isOpen) {\r\n currZoomLevel = currSlide.zoomLevels.initial;\r\n }\r\n\r\n if (currZoomLevel === this._lastUpdatedZoomLevel) {\r\n return;\r\n }\r\n this._lastUpdatedZoomLevel = currZoomLevel;\r\n\r\n const currZoomLevelDiff = currSlide.zoomLevels.initial - currSlide.zoomLevels.secondary;\r\n\r\n // Initial and secondary zoom levels are almost equal\r\n if (Math.abs(currZoomLevelDiff) < 0.01 || !currSlide.isZoomable()) {\r\n // disable zoom\r\n setZoomedIn(template, false);\r\n template.classList.remove('pswp--zoom-allowed');\r\n return;\r\n }\r\n\r\n template.classList.add('pswp--zoom-allowed');\r\n const secondaryIsHigher = (currZoomLevelDiff < 0);\r\n\r\n if (currZoomLevel === currSlide.zoomLevels.secondary) {\r\n setZoomedIn(template, secondaryIsHigher);\r\n } else if (currZoomLevel > currSlide.zoomLevels.secondary) {\r\n setZoomedIn(template, true);\r\n } else {\r\n // if (currZoomLevel < currSlide.zoomLevels.secondary)\r\n setZoomedIn(template, false);\r\n }\r\n\r\n if (options.imageClickAction === 'zoom'\r\n || options.imageClickAction === 'zoom-or-close') {\r\n template.classList.add('pswp--click-to-zoom');\r\n }\r\n }\r\n}\n\nfunction getBoundsByElement(el) {\r\n const thumbAreaRect = el.getBoundingClientRect();\r\n return {\r\n x: thumbAreaRect.left,\r\n y: thumbAreaRect.top,\r\n w: thumbAreaRect.width\r\n };\r\n}\r\n\r\nfunction getCroppedBoundsByElement(el, imageWidth, imageHeight) {\r\n const thumbAreaRect = el.getBoundingClientRect();\r\n\r\n // fill image into the area\r\n // (do they same as object-fit:cover does to retrieve coordinates)\r\n const hRatio = thumbAreaRect.width / imageWidth;\r\n const vRatio = thumbAreaRect.height / imageHeight;\r\n const fillZoomLevel = hRatio > vRatio ? hRatio : vRatio;\r\n\r\n const offsetX = (thumbAreaRect.width - imageWidth * fillZoomLevel) / 2;\r\n const offsetY = (thumbAreaRect.height - imageHeight * fillZoomLevel) / 2;\r\n\r\n // Coordinates of the image,\r\n // as if it was not cropped,\r\n // height is calculated automatically\r\n const bounds = {\r\n x: thumbAreaRect.left + offsetX,\r\n y: thumbAreaRect.top + offsetY,\r\n w: imageWidth * fillZoomLevel\r\n };\r\n\r\n // Coordinates of inner crop area\r\n // relative to the image\r\n bounds.innerRect = {\r\n w: thumbAreaRect.width,\r\n h: thumbAreaRect.height,\r\n x: offsetX,\r\n y: offsetY\r\n };\r\n\r\n return bounds;\r\n}\r\n\r\n/**\r\n * Get dimensions of thumbnail image\r\n * (click on which opens photoswipe or closes photoswipe to)\r\n *\r\n * @param {Integer} index\r\n * @param {Object} itemData\r\n * @param {PhotoSwipe} instance PhotoSwipe instance\r\n * @returns Object|undefined\r\n */\r\nfunction getThumbBounds(index, itemData, instance) {\r\n // legacy event, before filters were introduced\r\n const event = instance.dispatch('thumbBounds', {\r\n index,\r\n itemData,\r\n instance\r\n });\r\n if (event.thumbBounds) {\r\n return event.thumbBounds;\r\n }\r\n\r\n const { element } = itemData;\r\n let thumbBounds;\r\n let thumbnail;\r\n\r\n if (element && instance.options.thumbSelector !== false) {\r\n const thumbSelector = instance.options.thumbSelector || 'img';\r\n thumbnail = element.matches(thumbSelector)\r\n ? element : element.querySelector(thumbSelector);\r\n }\r\n\r\n thumbnail = instance.applyFilters('thumbEl', thumbnail, itemData, index);\r\n\r\n if (thumbnail) {\r\n if (!itemData.thumbCropped) {\r\n thumbBounds = getBoundsByElement(thumbnail);\r\n } else {\r\n thumbBounds = getCroppedBoundsByElement(\r\n thumbnail,\r\n itemData.w,\r\n itemData.h\r\n );\r\n }\r\n }\r\n\r\n return instance.applyFilters('thumbBounds', thumbBounds, itemData, index);\r\n}\n\n/**\r\n * Base PhotoSwipe event object\r\n */\r\nclass PhotoSwipeEvent {\r\n constructor(type, details) {\r\n this.type = type;\r\n if (details) {\r\n Object.assign(this, details);\r\n }\r\n }\r\n\r\n preventDefault() {\r\n this.defaultPrevented = true;\r\n }\r\n}\r\n\r\n/**\r\n * PhotoSwipe base class that can listen and dispatch for events.\r\n * Shared by PhotoSwipe Core and PhotoSwipe Lightbox, extended by base.js\r\n */\r\nclass Eventable {\r\n constructor() {\r\n this._listeners = {};\r\n this._filters = {};\r\n }\r\n\r\n addFilter(name, fn, priority = 100) {\r\n if (!this._filters[name]) {\r\n this._filters[name] = [];\r\n }\r\n\r\n this._filters[name].push({ fn, priority });\r\n this._filters[name].sort((f1, f2) => f1.priority - f2.priority);\r\n\r\n if (this.pswp) {\r\n this.pswp.addFilter(name, fn, priority);\r\n }\r\n }\r\n\r\n removeFilter(name, fn) {\r\n if (this._filters[name]) {\r\n this._filters[name] = this._filters[name].filter(filter => (filter.fn !== fn));\r\n }\r\n\r\n if (this.pswp) {\r\n this.pswp.removeFilter(name, fn);\r\n }\r\n }\r\n\r\n applyFilters(name, ...args) {\r\n if (this._filters[name]) {\r\n this._filters[name].forEach((filter) => {\r\n args[0] = filter.fn.apply(this, args);\r\n });\r\n }\r\n return args[0];\r\n }\r\n\r\n on(name, fn) {\r\n if (!this._listeners[name]) {\r\n this._listeners[name] = [];\r\n }\r\n this._listeners[name].push(fn);\r\n\r\n // When binding events to lightbox,\r\n // also bind events to PhotoSwipe Core,\r\n // if it's open.\r\n if (this.pswp) {\r\n this.pswp.on(name, fn);\r\n }\r\n }\r\n\r\n off(name, fn) {\r\n if (this._listeners[name]) {\r\n this._listeners[name] = this._listeners[name].filter(listener => (fn !== listener));\r\n }\r\n\r\n if (this.pswp) {\r\n this.pswp.off(name, fn);\r\n }\r\n }\r\n\r\n dispatch(name, details) {\r\n if (this.pswp) {\r\n return this.pswp.dispatch(name, details);\r\n }\r\n\r\n const event = new PhotoSwipeEvent(name, details);\r\n\r\n if (!this._listeners) {\r\n return event;\r\n }\r\n\r\n if (this._listeners[name]) {\r\n this._listeners[name].forEach((listener) => {\r\n listener.call(this, event);\r\n });\r\n }\r\n\r\n return event;\r\n }\r\n}\n\nclass Placeholder {\r\n /**\r\n * @param {String|false} imageSrc\r\n * @param {Element} container\r\n */\r\n constructor(imageSrc, container) {\r\n // Create placeholder\r\n // (stretched thumbnail or simple div behind the main image)\r\n this.element = createElement(\r\n 'pswp__img pswp__img--placeholder',\r\n imageSrc ? 'img' : '',\r\n container\r\n );\r\n\r\n if (imageSrc) {\r\n this.element.decoding = 'async';\r\n this.element.alt = '';\r\n this.element.src = imageSrc;\r\n this.element.setAttribute('role', 'presentation');\r\n }\r\n\r\n this.element.setAttribute('aria-hiden', 'true');\r\n }\r\n\r\n setDisplayedSize(width, height) {\r\n if (!this.element) {\r\n return;\r\n }\r\n\r\n if (this.element.tagName === 'IMG') {\r\n // Use transform scale() to modify img placeholder size\r\n // (instead of changing width/height directly).\r\n // This helps with performance, specifically in iOS15 Safari.\r\n setWidthHeight(this.element, 250, 'auto');\r\n this.element.style.transformOrigin = '0 0';\r\n this.element.style.transform = toTransformString(0, 0, width / 250);\r\n } else {\r\n setWidthHeight(this.element, width, height);\r\n }\r\n }\r\n\r\n destroy() {\r\n if (this.element.parentNode) {\r\n this.element.remove();\r\n }\r\n this.element = null;\r\n }\r\n}\n\nclass Content {\r\n /**\r\n * @param {Object} itemData Slide data\r\n * @param {PhotoSwipeBase} instance PhotoSwipe or PhotoSwipeLightbox instance\r\n * @param {Slide|undefined} slide Slide that requested the image,\r\n * can be undefined if image was requested by something else\r\n * (for example by lazy-loader)\r\n */\r\n constructor(itemData, instance, index) {\r\n this.instance = instance;\r\n this.data = itemData;\r\n this.index = index;\r\n\r\n this.width = Number(this.data.w) || Number(this.data.width) || 0;\r\n this.height = Number(this.data.h) || Number(this.data.height) || 0;\r\n\r\n this.isAttached = false;\r\n this.hasSlide = false;\r\n this.state = LOAD_STATE.IDLE;\r\n\r\n if (this.data.type) {\r\n this.type = this.data.type;\r\n } else if (this.data.src) {\r\n this.type = 'image';\r\n } else {\r\n this.type = 'html';\r\n }\r\n\r\n this.instance.dispatch('contentInit', { content: this });\r\n }\r\n\r\n removePlaceholder() {\r\n if (this.placeholder && !this.keepPlaceholder()) {\r\n // With delay, as image might be loaded, but not rendered\r\n setTimeout(() => {\r\n if (this.placeholder) {\r\n this.placeholder.destroy();\r\n this.placeholder = null;\r\n }\r\n }, 500);\r\n }\r\n }\r\n\r\n /**\r\n * Preload content\r\n *\r\n * @param {Boolean} isLazy\r\n */\r\n load(isLazy, reload) {\r\n if (!this.placeholder && this.slide && this.usePlaceholder()) {\r\n // use -based placeholder only for the first slide,\r\n // as rendering (even small stretched thumbnail) is an expensive operation\r\n const placeholderSrc = this.instance.applyFilters(\r\n 'placeholderSrc',\r\n (this.data.msrc && this.slide.isFirstSlide) ? this.data.msrc : false,\r\n this\r\n );\r\n this.placeholder = new Placeholder(\r\n placeholderSrc,\r\n this.slide.container\r\n );\r\n }\r\n\r\n if (this.element && !reload) {\r\n return;\r\n }\r\n\r\n if (this.instance.dispatch('contentLoad', { content: this, isLazy }).defaultPrevented) {\r\n return;\r\n }\r\n\r\n if (this.isImageContent()) {\r\n this.loadImage(isLazy);\r\n } else {\r\n this.element = createElement('pswp__content');\r\n this.element.innerHTML = this.data.html || '';\r\n }\r\n\r\n if (reload && this.slide) {\r\n this.slide.updateContentSize(true);\r\n }\r\n }\r\n\r\n /**\r\n * Preload image\r\n *\r\n * @param {Boolean} isLazy\r\n */\r\n loadImage(isLazy) {\r\n this.element = createElement('pswp__img', 'img');\r\n\r\n if (this.instance.dispatch('contentLoadImage', { content: this, isLazy }).defaultPrevented) {\r\n return;\r\n }\r\n\r\n if (this.data.srcset) {\r\n this.element.srcset = this.data.srcset;\r\n }\r\n\r\n this.element.src = this.data.src;\r\n\r\n this.element.alt = this.data.alt || '';\r\n\r\n this.state = LOAD_STATE.LOADING;\r\n\r\n if (this.element.complete) {\r\n this.onLoaded();\r\n } else {\r\n this.element.onload = () => {\r\n this.onLoaded();\r\n };\r\n\r\n this.element.onerror = () => {\r\n this.onError();\r\n };\r\n }\r\n }\r\n\r\n /**\r\n * Assign slide to content\r\n *\r\n * @param {Slide} slide\r\n */\r\n setSlide(slide) {\r\n this.slide = slide;\r\n this.hasSlide = true;\r\n this.instance = slide.pswp;\r\n\r\n // todo: do we need to unset slide?\r\n }\r\n\r\n /**\r\n * Content load success handler\r\n */\r\n onLoaded() {\r\n this.state = LOAD_STATE.LOADED;\r\n\r\n if (this.slide) {\r\n this.instance.dispatch('loadComplete', { slide: this.slide, content: this });\r\n\r\n // if content is reloaded\r\n if (this.slide.isActive\r\n && this.slide.heavyAppended\r\n && !this.element.parentNode) {\r\n this.slide.container.innerHTML = '';\r\n this.append();\r\n this.slide.updateContentSize(true);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Content load error handler\r\n */\r\n onError() {\r\n this.state = LOAD_STATE.ERROR;\r\n\r\n if (this.slide) {\r\n this.displayError();\r\n this.instance.dispatch('loadComplete', { slide: this.slide, isError: true, content: this });\r\n this.instance.dispatch('loadError', { slide: this.slide, content: this });\r\n }\r\n }\r\n\r\n /**\r\n * @returns {Boolean} If the content is currently loading\r\n */\r\n isLoading() {\r\n return this.instance.applyFilters(\r\n 'isContentLoading',\r\n this.state === LOAD_STATE.LOADING,\r\n this\r\n );\r\n }\r\n\r\n isError() {\r\n return this.state === LOAD_STATE.ERROR;\r\n }\r\n\r\n /**\r\n * @returns {Boolean} If the content is image\r\n */\r\n isImageContent() {\r\n return this.type === 'image';\r\n }\r\n\r\n /**\r\n * Update content size\r\n *\r\n * @param {Number} width\r\n * @param {Number} height\r\n */\r\n setDisplayedSize(width, height) {\r\n if (!this.element) {\r\n return;\r\n }\r\n\r\n if (this.placeholder) {\r\n this.placeholder.setDisplayedSize(width, height);\r\n }\r\n\r\n if (this.instance.dispatch('contentResize', { content: this, width, height }).defaultPrevented) {\r\n return;\r\n }\r\n\r\n setWidthHeight(this.element, width, height);\r\n\r\n if (this.isImageContent() && !this.isError()) {\r\n const image = this.element;\r\n // Handle srcset sizes attribute.\r\n //\r\n // Never lower quality, if it was increased previously.\r\n // Chrome does this automatically, Firefox and Safari do not,\r\n // so we store largest used size in dataset.\r\n if (image.srcset\r\n && (!image.dataset.largestUsedSize || width > image.dataset.largestUsedSize)) {\r\n image.sizes = width + 'px';\r\n image.dataset.largestUsedSize = width;\r\n }\r\n\r\n if (this.slide) {\r\n this.instance.dispatch('imageSizeChange', { slide: this.slide, width, height, content: this });\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * @returns {Boolean} If the content can be zoomed\r\n */\r\n isZoomable() {\r\n return this.instance.applyFilters(\r\n 'isContentZoomable',\r\n this.isImageContent() && (this.state !== LOAD_STATE.ERROR),\r\n this\r\n );\r\n }\r\n\r\n /**\r\n * @returns {Boolean} If content should use a placeholder (from msrc by default)\r\n */\r\n usePlaceholder() {\r\n return this.instance.applyFilters(\r\n 'useContentPlaceholder',\r\n this.isImageContent(),\r\n this\r\n );\r\n }\r\n\r\n /**\r\n * Preload content with lazy-loading param\r\n *\r\n * @param {Boolean} isLazy\r\n */\r\n lazyLoad() {\r\n if (this.instance.dispatch('contentLazyLoad', { content: this }).defaultPrevented) {\r\n return;\r\n }\r\n\r\n this.load(true);\r\n }\r\n\r\n /**\r\n * @returns {Boolean} If placeholder should be kept after content is loaded\r\n */\r\n keepPlaceholder() {\r\n return this.instance.applyFilters(\r\n 'isKeepingPlaceholder',\r\n this.isLoading(),\r\n this\r\n );\r\n }\r\n\r\n /**\r\n * Destroy the content\r\n */\r\n destroy() {\r\n this.hasSlide = false;\r\n this.slide = null;\r\n\r\n if (this.instance.dispatch('contentDestroy', { content: this }).defaultPrevented) {\r\n return;\r\n }\r\n\r\n this.remove();\r\n\r\n if (this.isImageContent() && this.element) {\r\n this.element.onload = null;\r\n this.element.onerror = null;\r\n this.element = null;\r\n }\r\n }\r\n\r\n /**\r\n * Display error message\r\n */\r\n displayError() {\r\n if (this.slide) {\r\n let errorMsgEl = createElement('pswp__error-msg');\r\n errorMsgEl.innerText = this.instance.options.errorMsg;\r\n errorMsgEl = this.instance.applyFilters(\r\n 'contentErrorElement',\r\n errorMsgEl,\r\n this\r\n );\r\n this.element = createElement('pswp__content pswp__error-msg-container');\r\n this.element.appendChild(errorMsgEl);\r\n this.slide.container.innerHTML = '';\r\n this.slide.container.appendChild(this.element);\r\n this.slide.updateContentSize(true);\r\n this.removePlaceholder();\r\n }\r\n }\r\n\r\n /**\r\n * Append the content\r\n */\r\n append() {\r\n this.isAttached = true;\r\n\r\n if (this.state === LOAD_STATE.ERROR) {\r\n this.displayError();\r\n return;\r\n }\r\n\r\n if (this.instance.dispatch('contentAppend', { content: this }).defaultPrevented) {\r\n return;\r\n }\r\n\r\n if (this.isImageContent()) {\r\n // Use decode() on nearby slides\r\n //\r\n // Nearby slide images are in DOM and not hidden via display:none.\r\n // However, they are placed offscreen (to the left and right side).\r\n //\r\n // Some browsers do not composite the image until it's actually visible,\r\n // using decode() helps.\r\n //\r\n // You might ask \"why dont you just decode() and then append all images\",\r\n // that's because I want to show image before it's fully loaded,\r\n // as browser can render parts of image while it is loading.\r\n if (this.slide\r\n && !this.slide.isActive\r\n && ('decode' in this.element)) {\r\n this.isDecoding = true;\r\n // Make sure that we start decoding on the next frame\r\n requestAnimationFrame(() => {\r\n // element might change\r\n if (this.element && this.element.tagName === 'IMG') {\r\n this.element.decode().then(() => {\r\n this.isDecoding = false;\r\n requestAnimationFrame(() => {\r\n this.appendImage();\r\n });\r\n }).catch(() => {\r\n this.isDecoding = false;\r\n });\r\n }\r\n });\r\n } else {\r\n if (this.placeholder\r\n && (this.state === LOAD_STATE.LOADED || this.state === LOAD_STATE.ERROR)) {\r\n this.removePlaceholder();\r\n }\r\n this.appendImage();\r\n }\r\n } else if (this.element && !this.element.parentNode) {\r\n this.slide.container.appendChild(this.element);\r\n }\r\n }\r\n\r\n /**\r\n * Activate the slide,\r\n * active slide is generally the current one,\r\n * meaning the user can see it.\r\n */\r\n activate() {\r\n if (this.instance.dispatch('contentActivate', { content: this }).defaultPrevented) {\r\n return;\r\n }\r\n\r\n if (this.slide) {\r\n if (this.isImageContent() && this.isDecoding) {\r\n // add image to slide when it becomes active,\r\n // even if it's not finished decoding\r\n this.appendImage();\r\n } else if (this.isError()) {\r\n this.load(false, true); // try to reload\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Deactivate the content\r\n */\r\n deactivate() {\r\n this.instance.dispatch('contentDeactivate', { content: this });\r\n }\r\n\r\n\r\n /**\r\n * Remove the content from DOM\r\n */\r\n remove() {\r\n this.isAttached = false;\r\n\r\n if (this.instance.dispatch('contentRemove', { content: this }).defaultPrevented) {\r\n return;\r\n }\r\n\r\n if (this.element && this.element.parentNode) {\r\n this.element.remove();\r\n }\r\n }\r\n\r\n /**\r\n * Append the image content to slide container\r\n */\r\n appendImage() {\r\n if (!this.isAttached) {\r\n return;\r\n }\r\n\r\n if (this.instance.dispatch('contentAppendImage', { content: this }).defaultPrevented) {\r\n return;\r\n }\r\n\r\n // ensure that element exists and is not already appended\r\n if (this.slide && this.element && !this.element.parentNode) {\r\n this.slide.container.appendChild(this.element);\r\n\r\n if (this.placeholder\r\n && (this.state === LOAD_STATE.LOADED || this.state === LOAD_STATE.ERROR)) {\r\n this.removePlaceholder();\r\n }\r\n }\r\n }\r\n}\n\n/**\r\n * PhotoSwipe base class that can retrieve data about every slide.\r\n * Shared by PhotoSwipe Core and PhotoSwipe Lightbox\r\n */\r\n\r\n\r\nclass PhotoSwipeBase extends Eventable {\r\n /**\r\n * Get total number of slides\r\n */\r\n getNumItems() {\r\n let numItems;\r\n const { dataSource } = this.options;\r\n if (!dataSource) {\r\n numItems = 0;\r\n } else if (dataSource.length) {\r\n // may be an array or just object with length property\r\n numItems = dataSource.length;\r\n } else if (dataSource.gallery) {\r\n // query DOM elements\r\n if (!dataSource.items) {\r\n dataSource.items = this._getGalleryDOMElements(dataSource.gallery);\r\n }\r\n\r\n if (dataSource.items) {\r\n numItems = dataSource.items.length;\r\n }\r\n }\r\n\r\n // legacy event, before filters were introduced\r\n const event = this.dispatch('numItems', {\r\n dataSource,\r\n numItems\r\n });\r\n return this.applyFilters('numItems', event.numItems, dataSource);\r\n }\r\n\r\n createContentFromData(slideData, index) {\r\n return new Content(slideData, this, index);\r\n }\r\n\r\n /**\r\n * Get item data by index.\r\n *\r\n * \"item data\" should contain normalized information that PhotoSwipe needs to generate a slide.\r\n * For example, it may contain properties like\r\n * `src`, `srcset`, `w`, `h`, which will be used to generate a slide with image.\r\n *\r\n * @param {Integer} index\r\n */\r\n getItemData(index) {\r\n const { dataSource } = this.options;\r\n let dataSourceItem;\r\n if (Array.isArray(dataSource)) {\r\n // Datasource is an array of elements\r\n dataSourceItem = dataSource[index];\r\n } else if (dataSource && dataSource.gallery) {\r\n // dataSource has gallery property,\r\n // thus it was created by Lightbox, based on\r\n // gallerySelecor and childSelector options\r\n\r\n // query DOM elements\r\n if (!dataSource.items) {\r\n dataSource.items = this._getGalleryDOMElements(dataSource.gallery);\r\n }\r\n\r\n dataSourceItem = dataSource.items[index];\r\n }\r\n\r\n let itemData = dataSourceItem;\r\n\r\n if (itemData instanceof Element) {\r\n itemData = this._domElementToItemData(itemData);\r\n }\r\n\r\n // Dispatching the itemData event,\r\n // it's a legacy verion before filters were introduced\r\n const event = this.dispatch('itemData', {\r\n itemData: itemData || {},\r\n index\r\n });\r\n\r\n return this.applyFilters('itemData', event.itemData, index);\r\n }\r\n\r\n /**\r\n * Get array of gallery DOM elements,\r\n * based on childSelector and gallery element.\r\n *\r\n * @param {Element} galleryElement\r\n */\r\n _getGalleryDOMElements(galleryElement) {\r\n if (this.options.children || this.options.childSelector) {\r\n return getElementsFromOption(\r\n this.options.children,\r\n this.options.childSelector,\r\n galleryElement\r\n ) || [];\r\n }\r\n\r\n return [galleryElement];\r\n }\r\n\r\n /**\r\n * Converts DOM element to item data object.\r\n *\r\n * @param {Element} element DOM element\r\n */\r\n // eslint-disable-next-line class-methods-use-this\r\n _domElementToItemData(element) {\r\n const itemData = {\r\n element\r\n };\r\n\r\n const linkEl = element.tagName === 'A' ? element : element.querySelector('a');\r\n\r\n if (linkEl) {\r\n // src comes from data-pswp-src attribute,\r\n // if it's empty link href is used\r\n itemData.src = linkEl.dataset.pswpSrc || linkEl.href;\r\n\r\n if (linkEl.dataset.pswpSrcset) {\r\n itemData.srcset = linkEl.dataset.pswpSrcset;\r\n }\r\n\r\n itemData.width = parseInt(linkEl.dataset.pswpWidth, 10);\r\n itemData.height = parseInt(linkEl.dataset.pswpHeight, 10);\r\n\r\n // support legacy w & h properties\r\n itemData.w = itemData.width;\r\n itemData.h = itemData.height;\r\n\r\n if (linkEl.dataset.pswpType) {\r\n itemData.type = linkEl.dataset.pswpType;\r\n }\r\n\r\n const thumbnailEl = element.querySelector('img');\r\n\r\n if (thumbnailEl) {\r\n // msrc is URL to placeholder image that's displayed before large image is loaded\r\n // by default it's displayed only for the first slide\r\n itemData.msrc = thumbnailEl.currentSrc || thumbnailEl.src;\r\n itemData.alt = thumbnailEl.getAttribute('alt');\r\n }\r\n\r\n if (linkEl.dataset.pswpCropped || linkEl.dataset.cropped) {\r\n itemData.thumbCropped = true;\r\n }\r\n }\r\n\r\n this.applyFilters('domItemData', itemData, element, linkEl);\r\n\r\n return itemData;\r\n }\r\n}\n\n/**\r\n * Manages opening and closing transitions of the PhotoSwipe.\r\n *\r\n * It can perform zoom, fade or no transition.\r\n */\r\n\r\n// some browsers do not paint\r\n// elements which opacity is set to 0,\r\n// since we need to pre-render elements for the animation -\r\n// we set it to the minimum amount\r\nconst MIN_OPACITY = 0.003;\r\n\r\nclass Opener {\r\n constructor(pswp) {\r\n this.pswp = pswp;\r\n this.isClosed = true;\r\n this._prepareOpen = this._prepareOpen.bind(this);\r\n\r\n // Override initial zoom and pan position\r\n pswp.on('firstZoomPan', this._prepareOpen);\r\n }\r\n\r\n open() {\r\n this._prepareOpen();\r\n this._start();\r\n }\r\n\r\n close() {\r\n if (this.isClosed || this.isClosing || this.isOpening) {\r\n // if we close during opening animation\r\n // for now do nothing,\r\n // browsers aren't good at changing the direction of the CSS transition\r\n return false;\r\n }\r\n\r\n const slide = this.pswp.currSlide;\r\n\r\n this.isOpen = false;\r\n this.isOpening = false;\r\n this.isClosing = true;\r\n this._duration = this.pswp.options.hideAnimationDuration;\r\n\r\n if (slide && slide.currZoomLevel * slide.width >= this.pswp.options.maxWidthToAnimate) {\r\n this._duration = 0;\r\n }\r\n\r\n this._applyStartProps();\r\n setTimeout(() => {\r\n this._start();\r\n }, this._croppedZoom ? 30 : 0);\r\n\r\n return true;\r\n }\r\n\r\n _prepareOpen() {\r\n this.pswp.off('firstZoomPan', this._prepareOpen);\r\n if (!this.isOpening) {\r\n const slide = this.pswp.currSlide;\r\n this.isOpening = true;\r\n this.isClosing = false;\r\n this._duration = this.pswp.options.showAnimationDuration;\r\n if (slide && slide.zoomLevels.initial * slide.width >= this.pswp.options.maxWidthToAnimate) {\r\n this._duration = 0;\r\n }\r\n this._applyStartProps();\r\n }\r\n }\r\n\r\n _applyStartProps() {\r\n const { pswp } = this;\r\n const slide = this.pswp.currSlide;\r\n const { options } = pswp;\r\n\r\n if (options.showHideAnimationType === 'fade') {\r\n options.showHideOpacity = true;\r\n this._thumbBounds = false;\r\n } else if (options.showHideAnimationType === 'none') {\r\n options.showHideOpacity = false;\r\n this._duration = 0;\r\n this._thumbBounds = false;\r\n } else if (this.isOpening && pswp._initialThumbBounds) {\r\n // Use initial bounds if defined\r\n this._thumbBounds = pswp._initialThumbBounds;\r\n } else {\r\n this._thumbBounds = this.pswp.getThumbBounds();\r\n }\r\n\r\n this._placeholder = slide.getPlaceholderElement();\r\n\r\n pswp.animations.stopAll();\r\n\r\n // Discard animations when duration is less than 50ms\r\n this._useAnimation = (this._duration > 50);\r\n this._animateZoom = Boolean(this._thumbBounds)\r\n && (slide.content && slide.content.usePlaceholder())\r\n && (!this.isClosing || !pswp.mainScroll.isShifted());\r\n if (!this._animateZoom) {\r\n this._animateRootOpacity = true;\r\n\r\n if (this.isOpening) {\r\n slide.zoomAndPanToInitial();\r\n slide.applyCurrentZoomPan();\r\n }\r\n } else {\r\n this._animateRootOpacity = options.showHideOpacity;\r\n }\r\n this._animateBgOpacity = !this._animateRootOpacity && this.pswp.options.bgOpacity > MIN_OPACITY;\r\n this._opacityElement = this._animateRootOpacity ? pswp.element : pswp.bg;\r\n\r\n if (!this._useAnimation) {\r\n this._duration = 0;\r\n this._animateZoom = false;\r\n this._animateBgOpacity = false;\r\n this._animateRootOpacity = true;\r\n if (this.isOpening) {\r\n pswp.element.style.opacity = MIN_OPACITY;\r\n pswp.applyBgOpacity(1);\r\n }\r\n return;\r\n }\r\n\r\n if (this._animateZoom && this._thumbBounds.innerRect) {\r\n // Properties are used when animation from cropped thumbnail\r\n this._croppedZoom = true;\r\n this._cropContainer1 = this.pswp.container;\r\n this._cropContainer2 = this.pswp.currSlide.holderElement;\r\n\r\n pswp.container.style.overflow = 'hidden';\r\n pswp.container.style.width = pswp.viewportSize.x + 'px';\r\n } else {\r\n this._croppedZoom = false;\r\n }\r\n\r\n if (this.isOpening) {\r\n // Apply styles before opening transition\r\n if (this._animateRootOpacity) {\r\n pswp.element.style.opacity = MIN_OPACITY;\r\n pswp.applyBgOpacity(1);\r\n } else {\r\n if (this._animateBgOpacity) {\r\n pswp.bg.style.opacity = MIN_OPACITY;\r\n }\r\n pswp.element.style.opacity = 1;\r\n }\r\n\r\n if (this._animateZoom) {\r\n this._setClosedStateZoomPan();\r\n if (this._placeholder) {\r\n // tell browser that we plan to animate the placeholder\r\n this._placeholder.willChange = 'transform';\r\n\r\n // hide placeholder to allow hiding of\r\n // elements that overlap it (such as icons over the thumbnail)\r\n this._placeholder.style.opacity = MIN_OPACITY;\r\n }\r\n }\r\n } else if (this.isClosing) {\r\n // hide nearby slides to make sure that\r\n // they are not painted during the transition\r\n pswp.mainScroll.itemHolders[0].el.style.display = 'none';\r\n pswp.mainScroll.itemHolders[2].el.style.display = 'none';\r\n\r\n if (this._croppedZoom) {\r\n if (pswp.mainScroll.x !== 0) {\r\n // shift the main scroller to zero position\r\n pswp.mainScroll.resetPosition();\r\n pswp.mainScroll.resize();\r\n }\r\n }\r\n }\r\n }\r\n\r\n _start() {\r\n if (this.isOpening\r\n && this._useAnimation\r\n && this._placeholder\r\n && this._placeholder.tagName === 'IMG') {\r\n // To ensure smooth animation\r\n // we wait till the current slide image placeholder is decoded,\r\n // but no longer than 250ms,\r\n // and no shorter than 50ms\r\n // (just using requestanimationframe is not enough in Firefox,\r\n // for some reason)\r\n new Promise((resolve) => {\r\n let decoded = false;\r\n let isDelaying = true;\r\n decodeImage(this._placeholder).finally(() => {\r\n decoded = true;\r\n if (!isDelaying) {\r\n resolve();\r\n }\r\n });\r\n setTimeout(() => {\r\n isDelaying = false;\r\n if (decoded) {\r\n resolve();\r\n }\r\n }, 50);\r\n setTimeout(resolve, 250);\r\n }).finally(() => this._initiate());\r\n } else {\r\n this._initiate();\r\n }\r\n }\r\n\r\n _initiate() {\r\n this.pswp.element.style.setProperty('--pswp-transition-duration', this._duration + 'ms');\r\n\r\n this.pswp.dispatch(\r\n this.isOpening ? 'openingAnimationStart' : 'closingAnimationStart'\r\n );\r\n\r\n // legacy event\r\n this.pswp.dispatch('initialZoom' + (this.isOpening ? 'In' : 'Out'));\r\n\r\n this.pswp.element.classList[this.isOpening ? 'add' : 'remove']('pswp--ui-visible');\r\n\r\n if (this.isOpening) {\r\n if (this._placeholder) {\r\n // unhide the placeholder\r\n this._placeholder.style.opacity = 1;\r\n }\r\n this._animateToOpenState();\r\n } else if (this.isClosing) {\r\n this._animateToClosedState();\r\n }\r\n\r\n if (!this._useAnimation) {\r\n this._onAnimationComplete();\r\n }\r\n }\r\n\r\n _onAnimationComplete() {\r\n const { pswp } = this;\r\n this.isOpen = this.isOpening;\r\n this.isClosed = this.isClosing;\r\n this.isOpening = false;\r\n this.isClosing = false;\r\n\r\n pswp.dispatch(\r\n this.isOpen ? 'openingAnimationEnd' : 'closingAnimationEnd'\r\n );\r\n\r\n // legacy event\r\n pswp.dispatch('initialZoom' + (this.isOpen ? 'InEnd' : 'OutEnd'));\r\n\r\n if (this.isClosed) {\r\n pswp.destroy();\r\n } else if (this.isOpen) {\r\n if (this._animateZoom) {\r\n pswp.container.style.overflow = 'visible';\r\n pswp.container.style.width = '100%';\r\n }\r\n pswp.currSlide.applyCurrentZoomPan();\r\n }\r\n }\r\n\r\n _animateToOpenState() {\r\n const { pswp } = this;\r\n if (this._animateZoom) {\r\n if (this._croppedZoom) {\r\n this._animateTo(this._cropContainer1, 'transform', 'translate3d(0,0,0)');\r\n this._animateTo(this._cropContainer2, 'transform', 'none');\r\n }\r\n\r\n pswp.currSlide.zoomAndPanToInitial();\r\n this._animateTo(\r\n pswp.currSlide.container,\r\n 'transform',\r\n pswp.currSlide.getCurrentTransform()\r\n );\r\n }\r\n\r\n if (this._animateBgOpacity) {\r\n this._animateTo(pswp.bg, 'opacity', pswp.options.bgOpacity);\r\n }\r\n\r\n if (this._animateRootOpacity) {\r\n this._animateTo(pswp.element, 'opacity', 1);\r\n }\r\n }\r\n\r\n _animateToClosedState() {\r\n const { pswp } = this;\r\n\r\n if (this._animateZoom) {\r\n this._setClosedStateZoomPan(true);\r\n }\r\n\r\n if (this._animateBgOpacity\r\n && pswp.bgOpacity > 0.01) { // do not animate opacity if it's already at 0\r\n this._animateTo(pswp.bg, 'opacity', 0);\r\n }\r\n\r\n if (this._animateRootOpacity) {\r\n this._animateTo(pswp.element, 'opacity', 0);\r\n }\r\n }\r\n\r\n _setClosedStateZoomPan(animate) {\r\n const { pswp } = this;\r\n const { innerRect } = this._thumbBounds;\r\n const { currSlide, viewportSize } = pswp;\r\n\r\n if (this._croppedZoom) {\r\n const containerOnePanX = -viewportSize.x + (this._thumbBounds.x - innerRect.x) + innerRect.w;\r\n const containerOnePanY = -viewportSize.y + (this._thumbBounds.y - innerRect.y) + innerRect.h;\r\n const containerTwoPanX = viewportSize.x - innerRect.w;\r\n const containerTwoPanY = viewportSize.y - innerRect.h;\r\n\r\n\r\n if (animate) {\r\n this._animateTo(\r\n this._cropContainer1,\r\n 'transform',\r\n toTransformString(containerOnePanX, containerOnePanY)\r\n );\r\n\r\n this._animateTo(\r\n this._cropContainer2,\r\n 'transform',\r\n toTransformString(containerTwoPanX, containerTwoPanY)\r\n );\r\n } else {\r\n setTransform(this._cropContainer1, containerOnePanX, containerOnePanY);\r\n setTransform(this._cropContainer2, containerTwoPanX, containerTwoPanY);\r\n }\r\n }\r\n\r\n equalizePoints(currSlide.pan, innerRect || this._thumbBounds);\r\n currSlide.currZoomLevel = this._thumbBounds.w / currSlide.width;\r\n\r\n if (animate) {\r\n this._animateTo(currSlide.container, 'transform', currSlide.getCurrentTransform());\r\n } else {\r\n currSlide.applyCurrentZoomPan();\r\n }\r\n }\r\n\r\n /**\r\n * @param {Element} target\r\n * @param {String} prop\r\n * @param {String} propValue\r\n */\r\n _animateTo(target, prop, propValue) {\r\n if (!this._duration) {\r\n target.style[prop] = propValue;\r\n return;\r\n }\r\n\r\n const { animations } = this.pswp;\r\n const animProps = {\r\n duration: this._duration,\r\n easing: this.pswp.options.easing,\r\n onComplete: () => {\r\n if (!animations.activeAnimations.length) {\r\n this._onAnimationComplete();\r\n }\r\n },\r\n target,\r\n };\r\n animProps[prop] = propValue;\r\n animations.startTransition(animProps);\r\n }\r\n}\n\nconst MIN_SLIDES_TO_CACHE = 5;\r\n\r\n/**\r\n * Lazy-load an image\r\n * This function is used both by Lightbox and PhotoSwipe core,\r\n * thus it can be called before dialog is opened.\r\n *\r\n * @param {Object} itemData Data about the slide\r\n * @param {PhotoSwipeBase} instance PhotoSwipe or PhotoSwipeLightbox\r\n * @param {Integer} index\r\n * @returns {Object|Boolean} Image that is being decoded or false.\r\n */\r\nfunction lazyLoadData(itemData, instance, index) {\r\n // src/slide/content/content.js\r\n const content = instance.createContentFromData(itemData, index);\r\n\r\n if (!content || !content.lazyLoad) {\r\n return;\r\n }\r\n\r\n const { options } = instance;\r\n\r\n // We need to know dimensions of the image to preload it,\r\n // as it might use srcset and we need to define sizes\r\n const viewportSize = instance.viewportSize || getViewportSize(options);\r\n const panAreaSize = getPanAreaSize(options, viewportSize, itemData, index);\r\n\r\n const zoomLevel = new ZoomLevel(options, itemData, -1);\r\n zoomLevel.update(content.width, content.height, panAreaSize);\r\n\r\n content.lazyLoad();\r\n content.setDisplayedSize(\r\n Math.ceil(content.width * zoomLevel.initial),\r\n Math.ceil(content.height * zoomLevel.initial)\r\n );\r\n\r\n return content;\r\n}\r\n\r\n\r\n/**\r\n * Lazy-loads specific slide.\r\n * This function is used both by Lightbox and PhotoSwipe core,\r\n * thus it can be called before dialog is opened.\r\n *\r\n * By default it loads image based on viewport size and initial zoom level.\r\n *\r\n * @param {Integer} index Slide index\r\n * @param {Object} instance PhotoSwipe or PhotoSwipeLightbox eventable instance\r\n */\r\nfunction lazyLoadSlide(index, instance) {\r\n const itemData = instance.getItemData(index);\r\n\r\n if (instance.dispatch('lazyLoadSlide', { index, itemData }).defaultPrevented) {\r\n return;\r\n }\r\n\r\n return lazyLoadData(itemData, instance, index);\r\n}\r\n\r\n\r\nclass ContentLoader {\r\n constructor(pswp) {\r\n this.pswp = pswp;\r\n // Total amount of cached images\r\n this.limit = Math.max(\r\n pswp.options.preload[0] + pswp.options.preload[1] + 1,\r\n MIN_SLIDES_TO_CACHE\r\n );\r\n this._cachedItems = [];\r\n }\r\n\r\n /**\r\n * Lazy load nearby slides based on `preload` option.\r\n *\r\n * @param {Integer} diff Difference between slide indexes that was changed recently, or 0.\r\n */\r\n updateLazy(diff) {\r\n const { pswp } = this;\r\n\r\n if (pswp.dispatch('lazyLoad').defaultPrevented) {\r\n return;\r\n }\r\n\r\n const { preload } = pswp.options;\r\n const isForward = diff === undefined ? true : (diff >= 0);\r\n let i;\r\n\r\n // preload[1] - num items to preload in forward direction\r\n for (i = 0; i <= preload[1]; i++) {\r\n this.loadSlideByIndex(pswp.currIndex + (isForward ? i : (-i)));\r\n }\r\n\r\n // preload[0] - num items to preload in backward direction\r\n for (i = 1; i <= preload[0]; i++) {\r\n this.loadSlideByIndex(pswp.currIndex + (isForward ? (-i) : i));\r\n }\r\n }\r\n\r\n loadSlideByIndex(index) {\r\n index = this.pswp.getLoopedIndex(index);\r\n // try to get cached content\r\n let content = this.getContentByIndex(index);\r\n if (!content) {\r\n // no cached content, so try to load from scratch:\r\n content = lazyLoadSlide(index, this.pswp);\r\n // if content can be loaded, add it to cache:\r\n if (content) {\r\n this.addToCache(content);\r\n }\r\n }\r\n }\r\n\r\n getContentBySlide(slide) {\r\n let content = this.getContentByIndex(slide.index);\r\n if (!content) {\r\n // create content if not found in cache\r\n content = this.pswp.createContentFromData(slide.data, slide.index);\r\n if (content) {\r\n this.addToCache(content);\r\n }\r\n }\r\n\r\n if (content) {\r\n // assign slide to content\r\n content.setSlide(slide);\r\n }\r\n return content;\r\n }\r\n\r\n /**\r\n * @param {Content} content\r\n */\r\n addToCache(content) {\r\n // move to the end of array\r\n this.removeByIndex(content.index);\r\n this._cachedItems.push(content);\r\n\r\n if (this._cachedItems.length > this.limit) {\r\n // Destroy the first content that's not attached\r\n const indexToRemove = this._cachedItems.findIndex((item) => {\r\n return !item.isAttached && !item.hasSlide;\r\n });\r\n if (indexToRemove !== -1) {\r\n const removedItem = this._cachedItems.splice(indexToRemove, 1)[0];\r\n removedItem.destroy();\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Removes an image from cache, does not destroy() it, just removes.\r\n *\r\n * @param {Integer} index\r\n */\r\n removeByIndex(index) {\r\n const indexToRemove = this._cachedItems.findIndex(item => item.index === index);\r\n if (indexToRemove !== -1) {\r\n this._cachedItems.splice(indexToRemove, 1);\r\n }\r\n }\r\n\r\n getContentByIndex(index) {\r\n return this._cachedItems.find(content => content.index === index);\r\n }\r\n\r\n destroy() {\r\n this._cachedItems.forEach(content => content.destroy());\r\n this._cachedItems = null;\r\n }\r\n}\n\nconst defaultOptions = {\r\n allowPanToNext: true,\r\n spacing: 0.1,\r\n loop: true,\r\n pinchToClose: true,\r\n closeOnVerticalDrag: true,\r\n hideAnimationDuration: 333,\r\n showAnimationDuration: 333,\r\n zoomAnimationDuration: 333,\r\n escKey: true,\r\n arrowKeys: true,\r\n returnFocus: true,\r\n maxWidthToAnimate: 4000,\r\n clickToCloseNonZoomable: true,\r\n imageClickAction: 'zoom-or-close',\r\n bgClickAction: 'close',\r\n tapAction: 'toggle-controls',\r\n doubleTapAction: 'zoom',\r\n indexIndicatorSep: ' / ',\r\n preloaderDelay: 2000,\r\n bgOpacity: 0.8,\r\n\r\n index: 0,\r\n errorMsg: 'The image cannot be loaded',\r\n preload: [1, 2],\r\n easing: 'cubic-bezier(.4,0,.22,1)'\r\n};\r\n\r\nclass PhotoSwipe extends PhotoSwipeBase {\r\n constructor(options) {\r\n super();\r\n\r\n this._prepareOptions(options);\r\n\r\n // offset of viewport relative to document\r\n this.offset = {};\r\n\r\n this._prevViewportSize = {};\r\n\r\n // Size of scrollable PhotoSwipe viewport\r\n this.viewportSize = {};\r\n\r\n // background (backdrop) opacity\r\n this.bgOpacity = 1;\r\n\r\n this.events = new DOMEvents();\r\n\r\n /** @type {Animations} */\r\n this.animations = new Animations();\r\n\r\n this.mainScroll = new MainScroll(this);\r\n this.gestures = new Gestures(this);\r\n this.opener = new Opener(this);\r\n this.keyboard = new Keyboard(this);\r\n this.contentLoader = new ContentLoader(this);\r\n }\r\n\r\n init() {\r\n if (this.isOpen || this.isDestroying) {\r\n return;\r\n }\r\n\r\n this.isOpen = true;\r\n this.dispatch('init'); // legacy\r\n this.dispatch('beforeOpen');\r\n\r\n this._createMainStructure();\r\n\r\n // add classes to the root element of PhotoSwipe\r\n let rootClasses = 'pswp--open';\r\n if (this.gestures.supportsTouch) {\r\n rootClasses += ' pswp--touch';\r\n }\r\n if (this.options.mainClass) {\r\n rootClasses += ' ' + this.options.mainClass;\r\n }\r\n this.element.className += ' ' + rootClasses;\r\n\r\n this.currIndex = this.options.index || 0;\r\n this.potentialIndex = this.currIndex;\r\n this.dispatch('firstUpdate'); // starting index can be modified here\r\n\r\n // initialize scroll wheel handler to block the scroll\r\n this.scrollWheel = new ScrollWheel(this);\r\n\r\n // sanitize index\r\n if (Number.isNaN(this.currIndex)\r\n || this.currIndex < 0\r\n || this.currIndex >= this.getNumItems()) {\r\n this.currIndex = 0;\r\n }\r\n\r\n if (!this.gestures.supportsTouch) {\r\n // enable mouse features if no touch support detected\r\n this.mouseDetected();\r\n }\r\n\r\n // causes forced synchronous layout\r\n this.updateSize();\r\n\r\n this.offset.y = window.pageYOffset;\r\n\r\n this._initialItemData = this.getItemData(this.currIndex);\r\n this.dispatch('gettingData', this.currIndex, this._initialItemData, true);\r\n\r\n // *Layout* - calculate size and position of elements here\r\n this._initialThumbBounds = this.getThumbBounds();\r\n this.dispatch('initialLayout');\r\n\r\n this.on('openingAnimationEnd', () => {\r\n // Add content to the previous and next slide\r\n this.setContent(this.mainScroll.itemHolders[0], this.currIndex - 1);\r\n this.setContent(this.mainScroll.itemHolders[2], this.currIndex + 1);\r\n\r\n this.mainScroll.itemHolders[0].el.style.display = 'block';\r\n this.mainScroll.itemHolders[2].el.style.display = 'block';\r\n\r\n this.appendHeavy();\r\n\r\n this.contentLoader.updateLazy();\r\n\r\n this.events.add(window, 'resize', this._handlePageResize.bind(this));\r\n this.events.add(window, 'scroll', this._updatePageScrollOffset.bind(this));\r\n this.dispatch('bindEvents');\r\n });\r\n\r\n // set content for center slide (first time)\r\n this.setContent(this.mainScroll.itemHolders[1], this.currIndex);\r\n this.dispatch('change');\r\n\r\n this.opener.open();\r\n\r\n this.dispatch('afterInit');\r\n\r\n return true;\r\n }\r\n\r\n /**\r\n * Get looped slide index\r\n * (for example, -1 will return the last slide)\r\n *\r\n * @param {Integer} index\r\n */\r\n getLoopedIndex(index) {\r\n const numSlides = this.getNumItems();\r\n\r\n if (this.options.loop) {\r\n if (index > numSlides - 1) {\r\n index -= numSlides;\r\n }\r\n\r\n if (index < 0) {\r\n index += numSlides;\r\n }\r\n }\r\n\r\n index = clamp(index, 0, numSlides - 1);\r\n\r\n return index;\r\n }\r\n\r\n appendHeavy() {\r\n this.mainScroll.itemHolders.forEach((itemHolder) => {\r\n if (itemHolder.slide) {\r\n itemHolder.slide.appendHeavy();\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Change the slide\r\n * @param {Integer} New index\r\n */\r\n goTo(index) {\r\n this.mainScroll.moveIndexBy(\r\n this.getLoopedIndex(index) - this.potentialIndex\r\n );\r\n }\r\n\r\n /**\r\n * Go to the next slide.\r\n */\r\n next() {\r\n this.goTo(this.potentialIndex + 1);\r\n }\r\n\r\n /**\r\n * Go to the previous slide.\r\n */\r\n prev() {\r\n this.goTo(this.potentialIndex - 1);\r\n }\r\n\r\n /**\r\n * @see slide/slide.js zoomTo\r\n */\r\n zoomTo(...args) {\r\n this.currSlide.zoomTo(...args);\r\n }\r\n\r\n /**\r\n * @see slide/slide.js toggleZoom\r\n */\r\n toggleZoom() {\r\n this.currSlide.toggleZoom();\r\n }\r\n\r\n /**\r\n * Close the gallery.\r\n * After closing transition ends - destroy it\r\n */\r\n close() {\r\n if (!this.opener.isOpen || this.isDestroying) {\r\n return;\r\n }\r\n\r\n this.isDestroying = true;\r\n\r\n this.dispatch('close');\r\n\r\n this.events.removeAll();\r\n this.opener.close();\r\n }\r\n\r\n /**\r\n * Destroys the gallery:\r\n * - instantly closes the gallery\r\n * - unbinds events,\r\n * - cleans intervals and timeouts\r\n * - removes elements from DOM\r\n */\r\n destroy() {\r\n if (!this.isDestroying) {\r\n this.options.showHideAnimationType = 'none';\r\n this.close();\r\n return;\r\n }\r\n\r\n this.dispatch('destroy');\r\n\r\n this.listeners = null;\r\n\r\n this.scrollWrap.ontouchmove = null;\r\n this.scrollWrap.ontouchend = null;\r\n\r\n this.element.remove();\r\n\r\n this.mainScroll.itemHolders.forEach((itemHolder) => {\r\n if (itemHolder.slide) {\r\n itemHolder.slide.destroy();\r\n }\r\n });\r\n\r\n this.contentLoader.destroy();\r\n this.events.removeAll();\r\n }\r\n\r\n /**\r\n * Refresh/reload content of a slide by its index\r\n *\r\n * @param {Integer} slideIndex\r\n */\r\n refreshSlideContent(slideIndex) {\r\n this.contentLoader.removeByIndex(slideIndex);\r\n this.mainScroll.itemHolders.forEach((itemHolder, i) => {\r\n let potentialHolderIndex = this.currSlide.index - 1 + i;\r\n if (this.canLoop()) {\r\n potentialHolderIndex = this.getLoopedIndex(potentialHolderIndex);\r\n }\r\n if (potentialHolderIndex === slideIndex) {\r\n // set the new slide content\r\n this.setContent(itemHolder, slideIndex, true);\r\n\r\n // activate the new slide if it's current\r\n if (i === 1) {\r\n this.currSlide = itemHolder.slide;\r\n itemHolder.slide.setIsActive(true);\r\n }\r\n }\r\n });\r\n\r\n this.dispatch('change');\r\n }\r\n\r\n\r\n /**\r\n * Set slide content\r\n *\r\n * @param {Object} holder mainScroll.itemHolders array item\r\n * @param {Integer} index Slide index\r\n * @param {Boolean} force If content should be set even if index wasn't changed\r\n */\r\n setContent(holder, index, force) {\r\n if (this.canLoop()) {\r\n index = this.getLoopedIndex(index);\r\n }\r\n\r\n if (holder.slide) {\r\n if (holder.slide.index === index && !force) {\r\n // exit if holder already contains this slide\r\n // this could be common when just three slides are used\r\n return;\r\n }\r\n\r\n // destroy previous slide\r\n holder.slide.destroy();\r\n holder.slide = null;\r\n }\r\n\r\n // exit if no loop and index is out of bounds\r\n if (!this.canLoop() && (index < 0 || index >= this.getNumItems())) {\r\n return;\r\n }\r\n\r\n const itemData = this.getItemData(index);\r\n holder.slide = new Slide(itemData, index, this);\r\n\r\n // set current slide\r\n if (index === this.currIndex) {\r\n this.currSlide = holder.slide;\r\n }\r\n\r\n holder.slide.append(holder.el);\r\n }\r\n\r\n getViewportCenterPoint() {\r\n return {\r\n x: this.viewportSize.x / 2,\r\n y: this.viewportSize.y / 2\r\n };\r\n }\r\n\r\n /**\r\n * Update size of all elements.\r\n * Executed on init and on page resize.\r\n *\r\n * @param {Boolean} force Update size even if size of viewport was not changed.\r\n */\r\n updateSize(force) {\r\n // let item;\r\n // let itemIndex;\r\n\r\n if (this.isDestroying) {\r\n // exit if PhotoSwipe is closed or closing\r\n // (to avoid errors, as resize event might be delayed)\r\n return;\r\n }\r\n\r\n //const newWidth = this.scrollWrap.clientWidth;\r\n //const newHeight = this.scrollWrap.clientHeight;\r\n\r\n const newViewportSize = getViewportSize(this.options, this);\r\n\r\n if (!force && pointsEqual(newViewportSize, this._prevViewportSize)) {\r\n // Exit if dimensions were not changed\r\n return;\r\n }\r\n\r\n //this._prevViewportSize.x = newWidth;\r\n //this._prevViewportSize.y = newHeight;\r\n equalizePoints(this._prevViewportSize, newViewportSize);\r\n\r\n this.dispatch('beforeResize');\r\n\r\n equalizePoints(this.viewportSize, this._prevViewportSize);\r\n\r\n this._updatePageScrollOffset();\r\n\r\n this.dispatch('viewportSize');\r\n\r\n // Resize slides only after opener animation is finished\r\n // and don't re-calculate size on inital size update\r\n this.mainScroll.resize(this.opener.isOpen);\r\n\r\n if (!this.hasMouse && window.matchMedia('(any-hover: hover)').matches) {\r\n this.mouseDetected();\r\n }\r\n\r\n this.dispatch('resize');\r\n }\r\n\r\n applyBgOpacity(opacity) {\r\n this.bgOpacity = Math.max(opacity, 0);\r\n this.bg.style.opacity = this.bgOpacity * this.options.bgOpacity;\r\n }\r\n\r\n /**\r\n * Whether mouse is detected\r\n */\r\n mouseDetected() {\r\n if (!this.hasMouse) {\r\n this.hasMouse = true;\r\n this.element.classList.add('pswp--has_mouse');\r\n }\r\n }\r\n\r\n /**\r\n * Page resize event handler\r\n */\r\n _handlePageResize() {\r\n this.updateSize();\r\n\r\n // In iOS webview, if element size depends on document size,\r\n // it'll be measured incorrectly in resize event\r\n //\r\n // https://bugs.webkit.org/show_bug.cgi?id=170595\r\n // https://hackernoon.com/onresize-event-broken-in-mobile-safari-d8469027bf4d\r\n if (/iPhone|iPad|iPod/i.test(window.navigator.userAgent)) {\r\n setTimeout(() => {\r\n this.updateSize();\r\n }, 500);\r\n }\r\n }\r\n\r\n /**\r\n * Page scroll offset is used\r\n * to get correct coordinates\r\n * relative to PhotoSwipe viewport.\r\n */\r\n _updatePageScrollOffset() {\r\n this.setScrollOffset(0, window.pageYOffset);\r\n }\r\n\r\n setScrollOffset(x, y) {\r\n this.offset.x = x;\r\n this.offset.y = y;\r\n this.dispatch('updateScrollOffset');\r\n }\r\n\r\n /**\r\n * Create main HTML structure of PhotoSwipe,\r\n * and add it to DOM\r\n */\r\n _createMainStructure() {\r\n // root DOM element of PhotoSwipe (.pswp)\r\n this.element = createElement('pswp');\r\n this.element.setAttribute('tabindex', -1);\r\n this.element.setAttribute('role', 'dialog');\r\n\r\n // template is legacy prop\r\n this.template = this.element;\r\n\r\n // Background is added as a separate element,\r\n // as animating opacity is faster than animating rgba()\r\n this.bg = createElement('pswp__bg', false, this.element);\r\n this.scrollWrap = createElement('pswp__scroll-wrap', false, this.element);\r\n this.container = createElement('pswp__container', false, this.scrollWrap);\r\n\r\n this.mainScroll.appendHolders();\r\n\r\n this.ui = new UI(this);\r\n this.ui.init();\r\n\r\n // append to DOM\r\n (this.options.appendToEl || document.body).appendChild(this.element);\r\n }\r\n\r\n\r\n /**\r\n * Get position and dimensions of small thumbnail\r\n * {x:,y:,w:}\r\n *\r\n * Height is optional (calculated based on the large image)\r\n */\r\n getThumbBounds() {\r\n return getThumbBounds(\r\n this.currIndex,\r\n this.currSlide ? this.currSlide.data : this._initialItemData,\r\n this\r\n );\r\n }\r\n\r\n /**\r\n * If the PhotoSwipe can have continious loop\r\n * @returns Boolean\r\n */\r\n canLoop() {\r\n return (this.options.loop && this.getNumItems() > 2);\r\n }\r\n\r\n _prepareOptions(options) {\r\n if (window.matchMedia('(prefers-reduced-motion), (update: slow)').matches) {\r\n options.showHideAnimationType = 'none';\r\n options.zoomAnimationDuration = 0;\r\n }\r\n\r\n this.options = {\r\n ...defaultOptions,\r\n ...options\r\n };\r\n }\r\n}\n\nexport default PhotoSwipe;\n//# sourceMappingURL=photoswipe.esm.js.map\n","\n/* **********************************************\n Begin prism-core.js\n********************************************** */\n\n/// \n\nvar _self = (typeof window !== 'undefined')\n\t? window // if in browser\n\t: (\n\t\t(typeof WorkerGlobalScope !== 'undefined' && self instanceof WorkerGlobalScope)\n\t\t\t? self // if in worker\n\t\t\t: {} // if in node js\n\t);\n\n/**\n * Prism: Lightweight, robust, elegant syntax highlighting\n *\n * @license MIT \n * @author Lea Verou \n * @namespace\n * @public\n */\nvar Prism = (function (_self) {\n\n\t// Private helper vars\n\tvar lang = /(?:^|\\s)lang(?:uage)?-([\\w-]+)(?=\\s|$)/i;\n\tvar uniqueId = 0;\n\n\t// The grammar object for plaintext\n\tvar plainTextGrammar = {};\n\n\n\tvar _ = {\n\t\t/**\n\t\t * By default, Prism will attempt to highlight all code elements (by calling {@link Prism.highlightAll}) on the\n\t\t * current page after the page finished loading. This might be a problem if e.g. you wanted to asynchronously load\n\t\t * additional languages or plugins yourself.\n\t\t *\n\t\t * By setting this value to `true`, Prism will not automatically highlight all code elements on the page.\n\t\t *\n\t\t * You obviously have to change this value before the automatic highlighting started. To do this, you can add an\n\t\t * empty Prism object into the global scope before loading the Prism script like this:\n\t\t *\n\t\t * ```js\n\t\t * window.Prism = window.Prism || {};\n\t\t * Prism.manual = true;\n\t\t * // add a new