{"version":3,"sources":["webpack:///./node_modules/@egjs/component/dist/component.esm.js","webpack:///./node_modules/@egjs/hammerjs/dist/hammer.esm.js","webpack:///./node_modules/@egjs/agent/dist/agent.esm.js","webpack:///./node_modules/@egjs/axes/node_modules/@egjs/component/dist/component.esm.js","webpack:///./node_modules/@egjs/axes/dist/axes.esm.js","webpack:///./node_modules/@egjs/flicking/dist/flicking.esm.js","webpack:///./node_modules/@egjs/list-differ/dist/list-differ.esm.js","webpack:///./node_modules/@egjs/react-flicking/dist/flicking.esm.js","webpack:///./node_modules/@egjs/react-flicking/dist/flicking.css","webpack:///./node_modules/@egjs/react-flicking/node_modules/react-is/index.js","webpack:///./node_modules/@egjs/react-flicking/node_modules/react-is/cjs/react-is.production.min.js"],"names":["__values","o","s","Symbol","iterator","m","i","call","length","next","value","done","TypeError","__read","n","r","e","ar","push","error","__spread","arguments","concat","isUndefined","ComponentEvent","eventType","props","e_1","_a","this","_canceled","_b","Object","keys","_c","key","e_1_1","return","__proto","prototype","stop","isCanceled","ComponentEvent$1","Component","_eventHandler","trigger","event","params","_i","eventName","handlers","currentTarget","forEach","handler","apply","once","handlerToAttach","_this","eventHash","listener_1","args","off","on","hasOn","name","handlerList","handlerToDetach","idx","handlerList_1","handlerList_1_1","splice","VERSION","_extends","assign","target","source","hasOwnProperty","_inheritsLoose","subClass","superClass","create","constructor","__proto__","_assertThisInitialized","self","ReferenceError","win","assign$1","output","index","nextKey","VENDOR_PREFIXES","TEST_ELEMENT","document","style","createElement","round","Math","abs","now","Date","prefixed","obj","property","prefix","prop","camelProp","toUpperCase","slice","window","PREFIXED_TOUCH_ACTION","NATIVE_TOUCH_ACTION","undefined","TOUCH_ACTION_MAP","touchMap","cssSupports","CSS","supports","val","getTouchActionProps","SUPPORT_TOUCH","SUPPORT_POINTER_EVENTS","SUPPORT_ONLY_TOUCH","test","navigator","userAgent","PROPS_XY","PROPS_CLIENT_XY","each","context","boolOrFn","inStr","str","find","indexOf","TouchAction","manager","set","_proto","compute","element","actions","toLowerCase","trim","update","options","touchAction","recognizers","recognizer","enable","getTouchAction","hasPanX","hasPanY","cleanTouchActions","join","preventDefaults","input","srcEvent","direction","offsetDirection","session","prevented","preventDefault","hasNone","isTapPointer","pointers","isTapMovement","distance","isTapTouchTime","deltaTime","DIRECTION_LEFT","DIRECTION_UP","preventSrc","hasParent","node","parent","parentNode","getCenter","pointersLength","x","clientX","y","clientY","simpleCloneInputData","timeStamp","center","deltaX","deltaY","getDistance","p1","p2","sqrt","getAngle","atan2","PI","getDirection","getVelocity","computeInputData","firstInput","firstMultiple","offsetCenter","angle","offset","offsetDelta","prevDelta","prevInput","computeDeltaXY","start","end","overallVelocity","overallVelocityX","overallVelocityY","scale","rotation","getRotation","maxPointers","velocity","velocityX","velocityY","last","lastInterval","v","computeIntervalInputData","srcEventTarget","composedPath","path","inputHandler","pointersLen","changedPointersLen","changedPointers","isFirst","isFinal","emit","recognize","splitStr","split","addEventListeners","types","type","addEventListener","removeEventListeners","removeEventListener","getWindowForElement","doc","ownerDocument","defaultView","parentWindow","Input","callback","inputTarget","domHandler","ev","init","evEl","evTarget","evWin","destroy","inArray","src","findByKey","POINTER_INPUT_MAP","pointerdown","pointermove","pointerup","pointercancel","pointerout","IE10_POINTER_TYPE_ENUM","2","3","4","5","POINTER_ELEMENT_EVENTS","POINTER_WINDOW_EVENTS","MSPointerEvent","PointerEvent","PointerEventInput","_Input","proto","store","pointerEvents","removePointer","eventTypeNormalized","replace","pointerType","isTouch","storeIndex","pointerId","button","toArray","Array","uniqueArray","sort","results","values","a","b","TOUCH_INPUT_MAP","touchstart","touchmove","touchend","touchcancel","TouchInput","targetIds","touches","getTouches","targetTouches","allTouches","identifier","changedTouches","changedTargetTouches","filter","touch","MOUSE_INPUT_MAP","mousedown","mousemove","mouseup","MouseInput","pressed","which","setLastTouch","eventData","primaryTouch","lastTouch","lts","lastTouches","setTimeout","recordTouches","isSyntheticEvent","t","dx","dy","TouchMouseInput","_manager","inputEvent","inputData","isMouse","sourceCapabilities","firesTouchEvents","mouse","invokeArrayArg","arg","fn","isArray","_uniqueId","getRecognizerByNameIfManager","otherRecognizer","get","stateStr","state","Recognizer","id","simultaneous","requireFail","recognizeWith","dropRecognizeWith","requireFailure","dropRequireFailure","hasRequireFailures","canRecognizeWith","additionalEvent","tryEmit","canEmit","inputDataClone","reset","process","TapRecognizer","_Recognizer","taps","interval","time","threshold","posThreshold","pTime","pCenter","_timer","_input","count","_this2","validPointers","validMovement","validTouchTime","failTimeout","validInterval","validMultiTap","_this3","clearTimeout","tapCount","AttrRecognizer","attrTest","optionPointers","isRecognized","isValid","directionStr","PanRecognizer","_AttrRecognizer","DIRECTION_HORIZONTAL","pX","pY","directionTest","hasMoved","SwipeRecognizer","PinchRecognizer","inOut","RotateRecognizer","PressRecognizer","validTime","defaults","domEvents","inputClass","cssProps","userSelect","touchSelect","touchCallout","contentZooming","userDrag","tapHighlightColor","preset","toggleCssProps","add","oldCssProps","Manager","item","force","stopped","curRecognizer","existing","remove","targetRecognizer","events","data","gestureEvent","createEvent","initEvent","gesture","dispatchEvent","triggerDomEvent","SINGLE_TOUCH_INPUT_MAP","SingleTouchInput","started","normalizeSingleTouches","all","changed","deprecate","method","message","deprecationMessage","Error","stack","log","console","warn","extend","dest","merge","inherit","child","base","properties","childP","baseP","_super","bindFn","Hammer","DIRECTION_ALL","DIRECTION_DOWN","DIRECTION_RIGHT","DIRECTION_VERTICAL","DIRECTION_NONE","INPUT_START","INPUT_MOVE","INPUT_END","INPUT_CANCEL","STATE_POSSIBLE","STATE_BEGAN","STATE_CHANGED","STATE_ENDED","STATE_RECOGNIZED","STATE_CANCELLED","STATE_FAILED","Tap","Pan","Swipe","Pinch","Rotate","Press","some","arr","execRegExp","pattern","text","RegExp","exec","hasUserAgentData","userAgentData","brands","uaList","convertVersion","findPreset","presets","userPreset","version","result","brand","versionAlias","versionTest","findVersion","findPresetBrand","brandInfo","findBrand","BROWSER_PRESETS","CHROMIUM_PRESETS","WEBKIT_PRESETS","WEBVIEW_PRESETS","OS_PRESETS","parseUserAgentData","osData","isMobile","mobile","firstBrand","browser","majorVersion","webkit","webkitVersion","chromium","chromiumVersion","webview","os","chromiumBrand","webkitBrand","platform_1","platform","platformVersion","browserBrand","uaFullVersion","parseInt","isHints","parseUserAgent","nextAgent","agent","getUserAgent","browserPreset","browserVersion","osPreset","osVersion","chromiumPreset","webkitPreset","hasHandlerList","customEvent","restParams","extendStatics","d","setPrototypeOf","p","__extends","__","__assign","getInsidePosition","destPos","range","circular","bounce","toDestPos","targetRange","max","min","isOutside","pos","isCircularable","getCirculatedPos","toPos","nodes","el","len","$","param","multi","match","dummy","innerHTML","childNodes","querySelectorAll","nodeName","nodeType","jQuery","jquery","map","raf","requestAnimationFrame","webkitRequestAnimationFrame","caf","cancelAnimationFrame","webkitCancelAnimationFrame","keyInfo_1","oldraf_1","timestamp","performance","getTime","tranformed","k","filtered","every","equal","roundNumFunc","roundNumber","num","roundUnit","pow","getDecimalPlace","roundNumbers","isNumber","isFinite","minMax","AnimationManager","itm","em","axm","animationEnd","bind","getDuration","depaPos","wishDuration","duration","durations_1","deceleration","reduce","Infinity","minimumDuration","maximumDuration","createAnimationParam","option","delta","getDelta","isTrusted","grab","axes","_animateParam","orgPos_1","opt","triggerChange","_raf","triggerAnimationEnd","getEventInfo","restore","animateTo","beforeParam","circularTargets","setTo","setInterrupt","finish","triggerFinish","animateLoop","complete","info_1","self_1","destPos_1","prevPos_1","prevEasingPer_1","directions_1","originalIntendedPos_1","prevTime_1","startTime","loop","currentTime","ratio","easingPer","easing","nextPos","circulatedPos","rangeOffset","getFinalPos","originalIntendedPos","getRoundUnit","minRoundUnit","getAxisOptions","getUserControll","userWish","retTrigger","triggerAnimationStart","orgPos","movedPos","setBy","EventManager","triggerHold","roundPos","getRoundPos","triggerRelease","roundDepa","createUserControll","isAccurate","holding","am","eventInfo","moveTo","userControl","userDuration","setAnimationManager","InterruptManager","_prevented","isInterrupting","interruptable","isInterrupted","AxisManager","axis","_complementOptions","_pos","acc","axisOption","fullDepaPos","axisOptions","InputObserver","moveDistance","isStopped","atOutside","tn","tx","initSlope_1","out","hold","changeOption","change","release","inputDuration","isEqual","IS_IOS_SAFARI","TRANSFORM","bodyStyle","head","getElementsByTagName","Axes","startPos","_inputs","io","connect","inputType","mapped","disconnect","targets","hammer","mapAxes","isBounceArea","UNIQUEKEY","toAxis","createHammer","convertInputType","hasTouch","hasMouse","hasPointer","useDirection","checkType","userDirection","PanInput","panRecognizer","isRightEdge","rightEdgeTimer","panFlag","thresholdAngle","iOSEdgeSwipeThreshold","releaseOnScroll","hammerManagerOptions","onHammerInput","onPanmove","onPanend","useHorizontal","useVertical","_direction","observer","hammerOption","removeRecognizer","dettachEvent","keyValue","String","random","attachEvent","disable","isEnable","cancelable","edgeThreshold","innerWidth","toAngle","getDirectionByAngle","offsetX","offsetY","getOffset","prevent","stopPropagation","preventSystemEvent","speeds","normalSpeed","__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","step","rejected","then","__generator","body","f","g","_","label","sent","trys","ops","verb","op","pop","__spreadArray","to","from","il","j","STATE_TYPE","FlickingError","code","CODE","MESSAGE","wrongVal","correctTypes","selector","optionName","position","EVENTS","READY","BEFORE_RESIZE","AFTER_RESIZE","HOLD_START","HOLD_END","MOVE_START","MOVE","MOVE_END","WILL_CHANGE","CHANGED","WILL_RESTORE","RESTORED","SELECT","NEED_PANEL","VISIBLE_CHANGE","REACH_EDGE","PANEL_CHANGE","ALIGN","PREV","CENTER","NEXT","DIRECTION","NONE","MOVE_TYPE","SNAP","FREE_SCROLL","STRICT","clamp","getFlickingAttached","nameToThrowOnError","iterable","parseAlign$1","align","size","alignPoint","isString","parseArithmeticSize","cssValue","parsed","parseArithmeticExpression","percentage","absolute","cssRegex","matchResult","sign","unit","parsedValue","parseFloat","signMultiplier","parseElement","elements","tempDiv","children","firstChild","removeChild","Node","ELEMENT_NODE","getMinusCompensatedIndex","includes","array","array_1","array_1_1","circulatePosition","findIndex","checker","getProgress","prev","getStyle","getComputedStyle","currentStyle","isBetween","Viewport","_el","_width","_height","_padding","left","right","top","bottom","_isBorderBoxSizing","defineProperty","enumerable","configurable","setSize","width","height","padding","isBorderBoxSizing","newWidth","newHeight","resize","elStyle","clientWidth","clientHeight","paddingLeft","paddingRight","paddingTop","paddingBottom","boxSizing","EVENT","HOLD","CHANGE","RELEASE","ANIMATION_END","FINISH","State","_delta","onEnter","prevState","onHold","ctx","onChange","onRelease","onAnimationEnd","onFinish","_moveToChangedPosition","flicking","axesEvent","transitTo","camera","prevPosition","newPosition","circularEnabled","lookAt","moveEvent","DISABLED","IdleState","animating","renderer","panelCount","holdStartEvent","HOLDING","animatingContext","control","controller","moveStartEvent","ANIMATING","HoldingState","_releaseEvent","horizontal","DRAGGING","flick","IDLE","clickedElement","elementFromPoint","panels","clickedPanel","panels_1","panels_1_1","panel","contains","cameraPosition","clickedPanelPosition","DraggingState","moveToPosition","AnimatingState","updateInput","DisabledState","StateMachine","nextStateType","nextState","_state","fire","externalCtx","currentState","AxesController","_onAxesHold","_dragged","_onAxesChange","_preventClickWhenDragged","_resetInternalValues","_stateMachine","_axes","_animatingContext","_panInput","_flicking","viewport","_loop_1","removePreventClickHandler","controlParams","parsedBounce","parsedVal","parseBounce","addPreventClickHandler","cameraEl","animate","newPos","animationFinishHandler","interruptionHandler","Control","_controller","_activePanel","updatePosition","_progressInPanel","activePanel","clampToReachablePosition","resetActive","moveToPanel","nearestAnchor","camPos_1","camRangeDiff","possiblePositions","findNearestAnchor","removed","canReach","rangeDiff","nearestPosition","_triggerIndexChangeEvent","_animateToPosition","newActivePanel","triggeringEvent","currentPanel","animation","_setActive","render","catch","err","prevActivePanel","updateAdaptiveHeight","prevIndex","prevPanel","AnchorPoint","_index","_panel","SnapControl","_count","activeAnchor","anchorAtCamera","snapThreshold","posDelta","absPosDelta","snapDelta","targetAnchor","findActiveAnchor","_calcSnapThreshold","_findSnappedAnchor","_findAdjacentAnchor","currentPos","clampedPosition","anchorAtPosition","findAnchorIncludePosition","anchors","anchorPoints","loopCount","floor","circularIndexOffset","anchorAtPositionIndex","anchor","getNextAnchor","getPrevAnchor","isNextDirection","panelSize","alignPos","alignPosition","margin","FreeControl","stopAtEdge","_stopAtEdge","progressInPanel","panelRange","targetPos","targetPanel","StrictControl","_resetIndexRange","cameraRange","currentIndex","prevPanelIndex","nextPanelIndex","nextPanel","prevPos","_indexRange","axesRange","indexRange","isOverThreshold","adjacentAnchor","firstAnchor","lastAnchor","shouldBounceToFirst","shouldBounceToLast","Camera","_checkTranslateSupport","supportedStyle","documentElement","transformName","transforms_1","transforms_1_1","prefixedTransform","_transform","_align","_position","_alignPos","_offset","_range","_visiblePanels","_anchors","NaN","nearestPanel","panelPos","bounceSize","prevRange","nextRange","nextPosition","viewportEl","nameOnErrMsg","checkExistence","firstElementChild","_refreshVisiblePanels","_checkNeedPanel","_checkReachEnd","_applyTransform","getProgressInPanel","includePosition","nearest","prevDist","anchorIdx","dist","activeIndex","e_2","array_2","array_2_1","e_2_1","canSee","visibleRange","includeRange","updateAlignPos","alignVal","updateAnchors","adaptive","updateOffset","unRenderedPanels","rendered","sizeIncludingMargin","resetNeedPanelHistory","_needPanelTriggered","newVisiblePanels","prevVisiblePanels","added","visiblePanels","needPanelTriggered","cameraSize","needPanelThreshold","cameraPrev","cameraNext","firstPanel","lastPanel","wasBetweenRange","isBetweenRange","actualPosition","LinearCamera","updateRange","getPanel","CircularCamera","_circularOffset","_circularEnabled","positionInRange","anchorInRange","visibleInCurrentRange","firstPanelPrev","lastPanelNext","visibleSize","panelSizeSum","canSetCircularMode","updateCircularToggleDirection","_updateCircularOffset","toggled","toggle","isToggled","_calcPanelAreaSum","sum","toggledPrev","toggledNext","toggleDirection","BoundCamera","viewportSize","canSetBoundMode","reachablePanels","shouldPrependBoundAnchor","shouldAppendBoundAnchor","indexOffset_1","newAnchors","nearestPanelAtMin","_findNearestPanel","panelAtMin","panelAtMax","panelIdx","RawRenderingStrategy","updateRenderingPanels","markForShow","Renderer","_d","strategy","_renderingStrategy","_panels","panelAlign","_getPanelAlign","_collectPanels","updatePanelSize","batchInsert","items","allPanelsInserted","addedPanels","insertingIdx","panelsPushed","panelsInserted","_createPanel","insertedSize","_getPanelSizeSum","increaseIndex","increasePosition","_insertPanelElements","_updateCameraAndControl","batchRemove","allPanelsRemoved","deleteCount","removingIdx","panelsPulled","panelsRemoved","removedSize","decreaseIndex","decreasePosition","_removePanelElements","marginDiff","Panel","_removed","_resetInternalStates","_size","_margin","_toggled","_toggleDirection","cameraRangeDiff","progress","camPos","disappearPosNext","disappearPosPrev","checkingRange","offsetWidth","offsetHeight","marginLeft","marginRight","marginTop","marginBottom","_updateAlignPos","includeMargin","focus","_moveBy","togglePosition","_togglePosition","prevToggled","camRange","camAlignPosition","camVisibleRange","camVisibleSize","minimumVisible","maximumVisible","shouldBeVisibleAtMin","shouldBeVisibleAtMax","ElementPanel","_rendered","markForHide","VanillaRenderer","wasRenderedPanels","renderingPanels","parentElement","_getRenderingPanelsByOrder","_resetPanelElementOrder","forceRenderAllPanels","cameraElement","fragment","createDocumentFragment","appendChild","_removeAllChildsFromCamera","TEXT_NODE","cameraChilds","nextSibling","nextSiblingElement","insertBefore","reversedPanels","reverse","nextPanelEl","nextElementSibling","ExternalRenderer","VisibleRenderingStrategy","visibleIndexes","visibles","Flicking","root","defaultIndex","_e","_f","_g","bound","_h","_j","_k","preventEventsBeforeInit","_l","_m","_o","_p","_q","moveType","_r","_s","_t","_u","_v","preventClickOnDrag","_w","disableOnInit","_x","renderOnlyVisible","_y","autoInit","_z","autoResize","_0","renderExternal","_initialized","_plugins","_defaultIndex","_horizontal","_circular","_bound","_adaptive","_needPanelThreshold","_preventEventsBeforeInit","_deceleration","_duration","_easing","_inputType","_moveType","_threshold","_interruptable","_bounce","_iOSEdgeSwipeThreshold","_preventClickOnDrag","_disableOnInit","_renderOnlyVisible","_autoResize","_autoInit","_renderExternal","_viewport","targetEl","queryResult","querySelector","getElement","_renderer","_createRenderer","_camera","_createCamera","_control","_createControl","originalTrigger","_moveToInitialPanel","disableInput","plugin","enableInput","getStatus","includePanelHTML","visiblePanelsOnly","status","panelInfo","html","outerHTML","visibleOffset","setStatus","panelIndex","newCameraPos","addPlugins","plugins","removePlugins","foundIndex","prevWidth","prevHeight","prevProgressInPanel","sizeChanged","append","insert","prepend","moveTypes","moveTypeStr","moveTypeOptions","JSON","stringify","cameraOption","renderingStrategy","rendererOptions","initialPanel","ExternalPanel","_externalComponent","externalComponent","withFlickingMethods","flickingName","getOwnPropertyNames","startsWith","descriptor","getOwnPropertyDescriptor","getterDescriptor","sync","diffResult","startIdx_1","prevIdx_1","removedIdx","ordered","prevIdx","newIdx","indexDiff","startIdx_2","prevIdx_2","addedIdx","startIdx","endIdx","elIdx","prevList","getRenderingPanels","removedPanels","panel1","panel2","list","getDefaultCameraTransform","firstPanelSize","cameraAlign","getCameraAlign","getPanelAlign","camPosition","parseAlign","PolyMap","HashMap","object","SUPPORT_MAP","Map","Link","prevLink","nextLink","getIndex","link","Result","maintained","changedBeforeAdded","fixed","cacheOrdered","caculateOrdered","cachePureChanged","fromLinks","toLinks","fromLink","toLink","fromIndex","orderChanged","pureChanged","fromBefore","toBefore","ListDiffer","findKeyCallback","newData","mapClass","prevKeys","prevKeyMap","keyMap","removedMap","addedCount","removedCount","prevListIndex","listIndex","diff","DEFAULT_PROPS","viewportTag","cameraTag","useFindDOMNode","hideBeforeInit","onReady","onBeforeResize","onAfterResize","onHoldStart","onHoldEnd","onMoveStart","onMove","onMoveEnd","onWillChange","onChanged","onWillRestore","onRestored","onSelect","onNeedPanel","onVisibleChange","onReachEdge","onPanelChange","ReactPanel","hide","ReactRenderer","_reactFlicking","reactFlicking","mounted","setRenderCallback","setState","reactPanels","panelComponent","NonStrictPanelComponent","StrictPanelComponent","_elRef","current","_getElement","only","ref","ViewportSlot","Fragment","_getChildren","_mounted","_renderCallback","componentDidMount","_viewportElement","_vanillaFlicking","_bindEvents","_jsxDiffer","_pluginsDiffer","_checkPlugins","componentWillUnmount","shouldComponentUpdate","nextProps","_diffResult","componentDidUpdate","initialized","attributes","viewportClasses","className","cameraProps","transform","_getViewportSlot","eventKey","propName","charAt","forceUpdate","_unpackFragment","allChilds","fragChild","defaultProps","decorators","desc","c","Reflect","decorate","__decorate","module","exports","h","l","q","u","w","for","$$typeof","z","A","B","C","D","E","F","G","H","I","ContextConsumer","ContextProvider","Element","ForwardRef","Lazy","Memo","Portal","Profiler","StrictMode","Suspense","isAsyncMode","isConcurrentMode","isContextConsumer","isContextProvider","isElement","isForwardRef","isFragment","isLazy","isMemo","isPortal","isProfiler","isStrictMode","isSuspense","isValidElementType","typeOf"],"mappings":";;;;;;;;;;;;;;;AAsBA,SAASA,EAASC,GAChB,IAAIC,EAAsB,mBAAXC,QAAyBA,OAAOC,SAC3CC,EAAIH,GAAKD,EAAEC,GACXI,EAAI,EACR,GAAID,EAAG,OAAOA,EAAEE,KAAKN,GACrB,GAAIA,GAAyB,iBAAbA,EAAEO,OAAqB,MAAO,CAC5CC,KAAM,WAEJ,OADIR,GAAKK,GAAKL,EAAEO,SAAQP,OAAI,GACrB,CACLS,MAAOT,GAAKA,EAAEK,KACdK,MAAOV,KAIb,MAAM,IAAIW,UAAUV,EAAI,0BAA4B,mCAEtD,SAASW,EAAOZ,EAAGa,GACjB,IAAIT,EAAsB,mBAAXF,QAAyBF,EAAEE,OAAOC,UACjD,IAAKC,EAAG,OAAOJ,EACf,IACIc,EAEAC,EAHAV,EAAID,EAAEE,KAAKN,GAEXgB,EAAK,GAGT,IACE,WAAc,IAANH,GAAgBA,KAAM,MAAQC,EAAIT,EAAEG,QAAQE,MAAMM,EAAGC,KAAKH,EAAEL,OACpE,MAAOS,GACPH,EAAI,CACFG,MAAOA,GAET,QACA,IACMJ,IAAMA,EAAEJ,OAASN,EAAIC,EAAU,SAAID,EAAEE,KAAKD,GAC9C,QACA,GAAIU,EAAG,MAAMA,EAAEG,OAInB,OAAOF,EAET,SAASG,IACP,IAAK,IAAIH,EAAK,GAAIX,EAAI,EAAGA,EAAIe,UAAUb,OAAQF,IAAKW,EAAKA,EAAGK,OAAOT,EAAOQ,UAAUf,KAEpF,OAAOW,E,2TAOT,IAAIM,EAAc,SAAUb,GAC1B,YAAwB,IAAVA,GAQZc,EAEJ,WAOE,SAASA,EAAeC,EAAWC,GACjC,IAAIC,EAAKC,EAIT,GAFAC,KAAKJ,UAAYA,EACjBI,KAAKC,WAAY,EACZJ,EAEL,IACE,IAAK,IAAIK,EAAK/B,EAASgC,OAAOC,KAAKP,IAASQ,EAAKH,EAAGtB,QAASyB,EAAGvB,KAAMuB,EAAKH,EAAGtB,OAAQ,CACpF,IAAI0B,EAAMD,EAAGxB,MAEbmB,KAAKM,GAAOT,EAAMS,IAEpB,MAAOC,GACPT,EAAM,CACJR,MAAOiB,GAET,QACA,IACMF,IAAOA,EAAGvB,OAASiB,EAAKG,EAAGM,SAAST,EAAGrB,KAAKwB,GAChD,QACA,GAAIJ,EAAK,MAAMA,EAAIR,QAUzB,IAAImB,EAAUd,EAAee,UAgB7B,OAdAD,EAAQE,KAAO,WACbX,KAAKC,WAAY,GASnBQ,EAAQG,WAAa,WACnB,OAAOZ,KAAKC,WAGPN,EAtDT,GA6XIkB,EAAmBlB,EAOR,EApUf,WAIE,SAASmB,IACPd,KAAKe,cAAgB,GA6CvB,IAAIN,EAAUK,EAAUJ,UAmQxB,OAjQAD,EAAQO,QAAU,SAAUC,GAG1B,IAFA,IAAIC,EAAS,GAEJC,EAAK,EAAGA,EAAK3B,UAAUb,OAAQwC,IACtCD,EAAOC,EAAK,GAAK3B,UAAU2B,GAG7B,IAAIC,EAAYH,aAAiBtB,EAAiBsB,EAAMrB,UAAYqB,EAEhEI,EAAW9B,EAASS,KAAKe,cAAcK,IAAc,IAEzD,OAAIC,EAAS1C,QAAU,IAInBsC,aAAiBtB,GACnBsB,EAAMK,cAAgBtB,KACtBqB,EAASE,SAAQ,SAAUC,GACzBA,EAAQP,OAGVI,EAASE,SAAQ,SAAUC,GAEzBA,EAAQC,WAAM,EAAQlC,EAAS2B,QAX1BlB,MAgDXS,EAAQiB,KAAO,SAAUN,EAAWO,GAClC,IAAIC,EAAQ5B,KAEZ,GAAyB,iBAAdoB,GAA0B1B,EAAYiC,GAAkB,CACjE,IAAIE,EAAYT,EAEhB,IAAK,IAAId,KAAOuB,EACd7B,KAAK0B,KAAKpB,EAAKuB,EAAUvB,IAG3B,OAAON,KACF,GAAyB,iBAAdoB,GAAqD,mBAApBO,EAAgC,CACjF,IAAIG,EAAa,WAGf,IAFA,IAAIC,EAAO,GAEFZ,EAAK,EAAGA,EAAK3B,UAAUb,OAAQwC,IACtCY,EAAKZ,GAAM3B,UAAU2B,GAIvBQ,EAAgBF,WAAM,EAAQlC,EAASwC,IAEvCH,EAAMI,IAAIZ,EAAWU,IAGvB9B,KAAKiC,GAAGb,EAAWU,GAGrB,OAAO9B,MAsBTS,EAAQyB,MAAQ,SAAUd,GACxB,QAASpB,KAAKe,cAAcK,IA0B9BX,EAAQwB,GAAK,SAAUb,EAAWO,GAChC,GAAyB,iBAAdP,GAA0B1B,EAAYiC,GAAkB,CACjE,IAAIE,EAAYT,EAEhB,IAAK,IAAIe,KAAQN,EACf7B,KAAKiC,GAAGE,EAAMN,EAAUM,IAG1B,OAAOnC,KACF,GAAyB,iBAAdoB,GAAqD,mBAApBO,EAAgC,CACjF,IAAIS,EAAcpC,KAAKe,cAAcK,GAEjC1B,EAAY0C,KACdpC,KAAKe,cAAcK,GAAa,GAChCgB,EAAcpC,KAAKe,cAAcK,IAGnCgB,EAAY/C,KAAKsC,GAGnB,OAAO3B,MA0BTS,EAAQuB,IAAM,SAAUZ,EAAWiB,GACjC,IAAIvC,EAAKC,EAGT,GAAIL,EAAY0B,GAEd,OADApB,KAAKe,cAAgB,GACdf,KAIT,GAAIN,EAAY2C,GAAkB,CAChC,GAAyB,iBAAdjB,EAET,cADOpB,KAAKe,cAAcK,GACnBpB,KAEP,IAAI6B,EAAYT,EAEhB,IAAK,IAAIe,KAAQN,EACf7B,KAAKgC,IAAIG,EAAMN,EAAUM,IAG3B,OAAOnC,KAKX,IAAIoC,EAAcpC,KAAKe,cAAcK,GAErC,GAAIgB,EAAa,CACf,IAAIE,EAAM,EAEV,IACE,IAAK,IAAIC,EAAgBpE,EAASiE,GAAcI,EAAkBD,EAAc3D,QAAS4D,EAAgB1D,KAAM0D,EAAkBD,EAAc3D,OAAQ,CAGrJ,GAFsB4D,EAAgB3D,QAEdwD,EAAiB,CACvCD,EAAYK,OAAOH,EAAK,GAEpBF,EAAYzD,QAAU,UACjBqB,KAAKe,cAAcK,GAG5B,MAGFkB,KAEF,MAAO/B,GACPT,EAAM,CACJR,MAAOiB,GAET,QACA,IACMiC,IAAoBA,EAAgB1D,OAASiB,EAAKwC,EAAc/B,SAAST,EAAGrB,KAAK6D,GACrF,QACA,GAAIzC,EAAK,MAAMA,EAAIR,QAKzB,OAAOU,MAaTc,EAAU4B,QAAU,QACb5B,EArTT;;;;;;;AC7IA,SAAS6B,IAeP,OAdAA,EAAWxC,OAAOyC,QAAU,SAAUC,GACpC,IAAK,IAAIpE,EAAI,EAAGA,EAAIe,UAAUb,OAAQF,IAAK,CACzC,IAAIqE,EAAStD,UAAUf,GAEvB,IAAK,IAAI6B,KAAOwC,EACV3C,OAAOO,UAAUqC,eAAerE,KAAKoE,EAAQxC,KAC/CuC,EAAOvC,GAAOwC,EAAOxC,IAK3B,OAAOuC,IAGOpB,MAAMzB,KAAMR,WAG9B,SAASwD,EAAeC,EAAUC,GAChCD,EAASvC,UAAYP,OAAOgD,OAAOD,EAAWxC,WAC9CuC,EAASvC,UAAU0C,YAAcH,EACjCA,EAASI,UAAYH,EAGvB,SAASI,EAAuBC,GAC9B,QAAa,IAATA,EACF,MAAM,IAAIC,eAAe,6DAG3B,OAAOD,EAuCT,IAwCIE,EAxCAC,EA1ByB,mBAAlBvD,OAAOyC,OACP,SAAgBC,GACvB,GAAIA,QACF,MAAM,IAAI9D,UAAU,8CAKtB,IAFA,IAAI4E,EAASxD,OAAO0C,GAEXe,EAAQ,EAAGA,EAAQpE,UAAUb,OAAQiF,IAAS,CACrD,IAAId,EAAStD,UAAUoE,GAEvB,GAAId,QACF,IAAK,IAAIe,KAAWf,EACdA,EAAOC,eAAec,KACxBF,EAAOE,GAAWf,EAAOe,IAMjC,OAAOF,GAGAxD,OAAOyC,OAKdkB,EAAkB,CAAC,GAAI,SAAU,MAAO,KAAM,KAAM,KACpDC,EAAmC,oBAAbC,SAA2B,CACnDC,MAAO,IACLD,SAASE,cAAc,OAEvBC,EAAQC,KAAKD,MACbE,EAAMD,KAAKC,IACXC,EAAMC,KAAKD,IAUf,SAASE,EAASC,EAAKC,GAMrB,IALA,IAAIC,EACAC,EACAC,EAAYH,EAAS,GAAGI,cAAgBJ,EAASK,MAAM,GACvDtG,EAAI,EAEDA,EAAIqF,EAAgBnF,QAAQ,CAIjC,IAFAiG,GADAD,EAASb,EAAgBrF,IACTkG,EAASE,EAAYH,KAEzBD,EACV,OAAOG,EAGTnG,KAWFgF,EAFoB,oBAAXuB,OAEH,GAEAA,OAGR,IAAIC,EAAwBT,EAAST,EAAaE,MAAO,eACrDiB,OAAgDC,IAA1BF,EAgB1B,IAOIG,EAtBJ,WACE,IAAKF,EACH,OAAO,EAGT,IAAIG,EAAW,GACXC,EAAc7B,EAAI8B,KAAO9B,EAAI8B,IAAIC,SAMrC,MALA,CAAC,OAAQ,eAAgB,QAAS,QAAS,cAAe,QAAQjE,SAAQ,SAAUkE,GAGlF,OAAOJ,EAASI,IAAOH,GAAc7B,EAAI8B,IAAIC,SAAS,eAAgBC,MAEjEJ,EAUcK,GAGnBC,EAAgB,iBAAkBlC,EAClCmC,OAA2DT,IAAlCX,EAASf,EAAK,gBACvCoC,EAAqBF,GAHN,wCAGoCG,KAAKC,UAAUC,WAkBlEC,EAAW,CAAC,IAAK,KACjBC,EAAkB,CAAC,UAAW,WASlC,SAASC,EAAK1B,EAAKlG,EAAU6H,GAC3B,IAAI3H,EAEJ,GAAKgG,EAIL,GAAIA,EAAIlD,QACNkD,EAAIlD,QAAQhD,EAAU6H,QACjB,QAAmBjB,IAAfV,EAAI9F,OAGb,IAFAF,EAAI,EAEGA,EAAIgG,EAAI9F,QACbJ,EAASG,KAAK0H,EAAS3B,EAAIhG,GAAIA,EAAGgG,GAClChG,SAGF,IAAKA,KAAKgG,EACRA,EAAI1B,eAAetE,IAAMF,EAASG,KAAK0H,EAAS3B,EAAIhG,GAAIA,EAAGgG,GAcjE,SAAS4B,EAASZ,EAAK1D,GACrB,MArIkB,mBAqIP0D,EACFA,EAAIhE,MAAMM,GAAOA,EAAK,SAAkBoD,EAAWpD,GAGrD0D,EAUT,SAASa,EAAMC,EAAKC,GAClB,OAAOD,EAAIE,QAAQD,IAAS,EAgD9B,IAAIE,EAEJ,WACE,SAASA,EAAYC,EAAS9H,GAC5BmB,KAAK2G,QAAUA,EACf3G,KAAK4G,IAAI/H,GASX,IAAIgI,EAASH,EAAYhG,UA4FzB,OA1FAmG,EAAOD,IAAM,SAAa/H,GAxJD,YA0JnBA,IACFA,EAAQmB,KAAK8G,WAGX5B,GAAuBlF,KAAK2G,QAAQI,QAAQ9C,OAASmB,EAAiBvG,KACxEmB,KAAK2G,QAAQI,QAAQ9C,MAAMgB,GAAyBpG,GAGtDmB,KAAKgH,QAAUnI,EAAMoI,cAAcC,QAQrCL,EAAOM,OAAS,WACdnH,KAAK4G,IAAI5G,KAAK2G,QAAQS,QAAQC,cAShCR,EAAOC,QAAU,WACf,IAAIE,EAAU,GAMd,OALAb,EAAKnG,KAAK2G,QAAQW,aAAa,SAAUC,GACnClB,EAASkB,EAAWH,QAAQI,OAAQ,CAACD,MACvCP,EAAUA,EAAQvH,OAAO8H,EAAWE,sBAtF5C,SAA2BT,GAEzB,GAAIV,EAAMU,EAhGY,QAiGpB,MAjGoB,OAoGtB,IAAIU,EAAUpB,EAAMU,EAnGG,SAoGnBW,EAAUrB,EAAMU,EAnGG,SAwGvB,OAAIU,GAAWC,EA1GO,OA+GlBD,GAAWC,EACND,EA/Gc,QACA,QAkHnBpB,EAAMU,EAtHoB,+BADR,OA0LbY,CAAkBZ,EAAQa,KAAK,OASxChB,EAAOiB,gBAAkB,SAAyBC,GAChD,IAAIC,EAAWD,EAAMC,SACjBC,EAAYF,EAAMG,gBAEtB,GAAIlI,KAAK2G,QAAQwB,QAAQC,UACvBJ,EAASK,qBADX,CAKA,IAAIrB,EAAUhH,KAAKgH,QACfsB,EAAUhC,EAAMU,EA1MA,UA0MgC5B,EAAkC,KAClFuC,EAAUrB,EAAMU,EAzMC,WAyMgC5B,EAzMhC,SA0MjBsC,EAAUpB,EAAMU,EA3MC,WA2MgC5B,EA3MhC,SA6MrB,GAAIkD,EAAS,CAEX,IAAIC,EAAyC,IAA1BR,EAAMS,SAAS7J,OAC9B8J,EAAgBV,EAAMW,SAAW,EACjCC,EAAiBZ,EAAMa,UAAY,IAEvC,GAAIL,GAAgBE,GAAiBE,EACnC,OAIJ,IAAIjB,IAAWC,EAKf,OAAIW,GAAWX,GAvMQkB,EAuMGZ,GAAoCP,GAtMzCoB,GAsMoDb,EAChEjI,KAAK+I,WAAWf,QADzB,IAWFnB,EAAOkC,WAAa,SAAoBf,GACtChI,KAAK2G,QAAQwB,QAAQC,WAAY,EACjCJ,EAASK,kBAGJ3B,EAxGT,GAmHA,SAASsC,EAAUC,EAAMC,GACvB,KAAOD,GAAM,CACX,GAAIA,IAASC,EACX,OAAO,EAGTD,EAAOA,EAAKE,WAGd,OAAO,EAUT,SAASC,EAAUZ,GACjB,IAAIa,EAAiBb,EAAS7J,OAE9B,GAAuB,IAAnB0K,EACF,MAAO,CACLC,EAAGnF,EAAMqE,EAAS,GAAGe,SACrBC,EAAGrF,EAAMqE,EAAS,GAAGiB,UAQzB,IAJA,IAAIH,EAAI,EACJE,EAAI,EACJ/K,EAAI,EAEDA,EAAI4K,GACTC,GAAKd,EAAS/J,GAAG8K,QACjBC,GAAKhB,EAAS/J,GAAGgL,QACjBhL,IAGF,MAAO,CACL6K,EAAGnF,EAAMmF,EAAID,GACbG,EAAGrF,EAAMqF,EAAIH,IAWjB,SAASK,EAAqB3B,GAM5B,IAHA,IAAIS,EAAW,GACX/J,EAAI,EAEDA,EAAIsJ,EAAMS,SAAS7J,QACxB6J,EAAS/J,GAAK,CACZ8K,QAASpF,EAAM4D,EAAMS,SAAS/J,GAAG8K,SACjCE,QAAStF,EAAM4D,EAAMS,SAAS/J,GAAGgL,UAEnChL,IAGF,MAAO,CACLkL,UAAWrF,IACXkE,SAAUA,EACVoB,OAAQR,EAAUZ,GAClBqB,OAAQ9B,EAAM8B,OACdC,OAAQ/B,EAAM+B,QAalB,SAASC,EAAYC,EAAIC,EAAIpK,GACtBA,IACHA,EAAQoG,GAGV,IAAIqD,EAAIW,EAAGpK,EAAM,IAAMmK,EAAGnK,EAAM,IAC5B2J,EAAIS,EAAGpK,EAAM,IAAMmK,EAAGnK,EAAM,IAChC,OAAOuE,KAAK8F,KAAKZ,EAAIA,EAAIE,EAAIA,GAY/B,SAASW,EAASH,EAAIC,EAAIpK,GACnBA,IACHA,EAAQoG,GAGV,IAAIqD,EAAIW,EAAGpK,EAAM,IAAMmK,EAAGnK,EAAM,IAC5B2J,EAAIS,EAAGpK,EAAM,IAAMmK,EAAGnK,EAAM,IAChC,OAA0B,IAAnBuE,KAAKgG,MAAMZ,EAAGF,GAAWlF,KAAKiG,GAWvC,SAASC,EAAahB,EAAGE,GACvB,OAAIF,IAAME,EAjWS,EAqWfnF,EAAIiF,IAAMjF,EAAImF,GACTF,EAAI,EArWM,EACC,EAuWbE,EAAI,EAtWM,EACE,GAuYrB,SAASe,EAAY3B,EAAWU,EAAGE,GACjC,MAAO,CACLF,EAAGA,EAAIV,GAAa,EACpBY,EAAGA,EAAIZ,GAAa,GA0ExB,SAAS4B,EAAiB7D,EAASoB,GACjC,IAAII,EAAUxB,EAAQwB,QAClBK,EAAWT,EAAMS,SACjBa,EAAiBb,EAAS7J,OAEzBwJ,EAAQsC,aACXtC,EAAQsC,WAAaf,EAAqB3B,IAIxCsB,EAAiB,IAAMlB,EAAQuC,cACjCvC,EAAQuC,cAAgBhB,EAAqB3B,GACjB,IAAnBsB,IACTlB,EAAQuC,eAAgB,GAG1B,IAAID,EAAatC,EAAQsC,WACrBC,EAAgBvC,EAAQuC,cACxBC,EAAeD,EAAgBA,EAAcd,OAASa,EAAWb,OACjEA,EAAS7B,EAAM6B,OAASR,EAAUZ,GACtCT,EAAM4B,UAAYrF,IAClByD,EAAMa,UAAYb,EAAM4B,UAAYc,EAAWd,UAC/C5B,EAAM6C,MAAQT,EAASQ,EAAcf,GACrC7B,EAAMW,SAAWqB,EAAYY,EAAcf,GAnI7C,SAAwBzB,EAASJ,GAC/B,IAAI6B,EAAS7B,EAAM6B,OAGfiB,EAAS1C,EAAQ2C,aAAe,GAChCC,EAAY5C,EAAQ4C,WAAa,GACjCC,EAAY7C,EAAQ6C,WAAa,GAtXrB,IAwXZjD,EAAMnI,WAtXI,IAsXyBoL,EAAUpL,YAC/CmL,EAAY5C,EAAQ4C,UAAY,CAC9BzB,EAAG0B,EAAUnB,QAAU,EACvBL,EAAGwB,EAAUlB,QAAU,GAEzBe,EAAS1C,EAAQ2C,YAAc,CAC7BxB,EAAGM,EAAON,EACVE,EAAGI,EAAOJ,IAIdzB,EAAM8B,OAASkB,EAAUzB,GAAKM,EAAON,EAAIuB,EAAOvB,GAChDvB,EAAM+B,OAASiB,EAAUvB,GAAKI,EAAOJ,EAAIqB,EAAOrB,GAgHhDyB,CAAe9C,EAASJ,GACxBA,EAAMG,gBAAkBoC,EAAavC,EAAM8B,OAAQ9B,EAAM+B,QACzD,IAvFgBoB,EAAOC,EAuFnBC,EAAkBb,EAAYxC,EAAMa,UAAWb,EAAM8B,OAAQ9B,EAAM+B,QACvE/B,EAAMsD,iBAAmBD,EAAgB9B,EACzCvB,EAAMuD,iBAAmBF,EAAgB5B,EACzCzB,EAAMqD,gBAAkB/G,EAAI+G,EAAgB9B,GAAKjF,EAAI+G,EAAgB5B,GAAK4B,EAAgB9B,EAAI8B,EAAgB5B,EAC9GzB,EAAMwD,MAAQb,GA3FEQ,EA2FuBR,EAAclC,SA1F9CuB,GADgBoB,EA2FwC3C,GA1FxC,GAAI2C,EAAI,GAAIjF,GAAmB6D,EAAYmB,EAAM,GAAIA,EAAM,GAAIhF,IA0FX,EAC3E6B,EAAMyD,SAAWd,EAhFnB,SAAqBQ,EAAOC,GAC1B,OAAOhB,EAASgB,EAAI,GAAIA,EAAI,GAAIjF,GAAmBiE,EAASe,EAAM,GAAIA,EAAM,GAAIhF,GA+E/CuF,CAAYf,EAAclC,SAAUA,GAAY,EACjFT,EAAM2D,YAAevD,EAAQ6C,UAAoCjD,EAAMS,SAAS7J,OAASwJ,EAAQ6C,UAAUU,YAAc3D,EAAMS,SAAS7J,OAASwJ,EAAQ6C,UAAUU,YAA1H3D,EAAMS,SAAS7J,OAtE1D,SAAkCwJ,EAASJ,GACzC,IAEI4D,EACAC,EACAC,EACA5D,EALA6D,EAAO3D,EAAQ4D,cAAgBhE,EAC/Ba,EAAYb,EAAM4B,UAAYmC,EAAKnC,UAMvC,GA3biB,IA2bb5B,EAAMnI,YAA+BgJ,EA/bpB,SA+bsEzD,IAAlB2G,EAAKH,UAAyB,CACrG,IAAI9B,EAAS9B,EAAM8B,OAASiC,EAAKjC,OAC7BC,EAAS/B,EAAM+B,OAASgC,EAAKhC,OAC7BkC,EAAIzB,EAAY3B,EAAWiB,EAAQC,GACvC8B,EAAYI,EAAE1C,EACduC,EAAYG,EAAExC,EACdmC,EAAWtH,EAAI2H,EAAE1C,GAAKjF,EAAI2H,EAAExC,GAAKwC,EAAE1C,EAAI0C,EAAExC,EACzCvB,EAAYqC,EAAaT,EAAQC,GACjC3B,EAAQ4D,aAAehE,OAGvB4D,EAAWG,EAAKH,SAChBC,EAAYE,EAAKF,UACjBC,EAAYC,EAAKD,UACjB5D,EAAY6D,EAAK7D,UAGnBF,EAAM4D,SAAWA,EACjB5D,EAAM6D,UAAYA,EAClB7D,EAAM8D,UAAYA,EAClB9D,EAAME,UAAYA,EA2ClBgE,CAAyB9D,EAASJ,GAElC,IAEImE,EAFArJ,EAAS8D,EAAQI,QACjBiB,EAAWD,EAAMC,SAWjBgB,EAPFkD,EADElE,EAASmE,aACMnE,EAASmE,eAAe,GAChCnE,EAASoE,KACDpE,EAASoE,KAAK,GAEdpE,EAASnF,OAGEA,KAC5BA,EAASqJ,GAGXnE,EAAMlF,OAASA,EAWjB,SAASwJ,EAAa1F,EAAS/G,EAAWmI,GACxC,IAAIuE,EAAcvE,EAAMS,SAAS7J,OAC7B4N,EAAqBxE,EAAMyE,gBAAgB7N,OAC3C8N,EA7hBY,EA6hBF7M,GAA2B0M,EAAcC,GAAuB,EAC1EG,EAAsB,GAAZ9M,GAA0C0M,EAAcC,GAAuB,EAC7FxE,EAAM0E,UAAYA,EAClB1E,EAAM2E,UAAYA,EAEdD,IACF9F,EAAQwB,QAAU,IAKpBJ,EAAMnI,UAAYA,EAElB4K,EAAiB7D,EAASoB,GAE1BpB,EAAQgG,KAAK,eAAgB5E,GAC7BpB,EAAQiG,UAAU7E,GAClBpB,EAAQwB,QAAQ6C,UAAYjD,EAS9B,SAAS8E,EAAStG,GAChB,OAAOA,EAAIW,OAAO4F,MAAM,QAW1B,SAASC,EAAkBlK,EAAQmK,EAAOxL,GACxC2E,EAAK0G,EAASG,IAAQ,SAAUC,GAC9BpK,EAAOqK,iBAAiBD,EAAMzL,GAAS,MAY3C,SAAS2L,EAAqBtK,EAAQmK,EAAOxL,GAC3C2E,EAAK0G,EAASG,IAAQ,SAAUC,GAC9BpK,EAAOuK,oBAAoBH,EAAMzL,GAAS,MAU9C,SAAS6L,EAAoBtG,GAC3B,IAAIuG,EAAMvG,EAAQwG,eAAiBxG,EACnC,OAAOuG,EAAIE,aAAeF,EAAIG,cAAgBzI,OAYhD,IAAI0I,EAEJ,WACE,SAASA,EAAM/G,EAASgH,GACtB,IAAIpK,EAAOvD,KACXA,KAAK2G,QAAUA,EACf3G,KAAK2N,SAAWA,EAChB3N,KAAK+G,QAAUJ,EAAQI,QACvB/G,KAAK6C,OAAS8D,EAAQS,QAAQwG,YAG9B5N,KAAK6N,WAAa,SAAUC,GACtBzH,EAASM,EAAQS,QAAQI,OAAQ,CAACb,KACpCpD,EAAK/B,QAAQsM,IAIjB9N,KAAK+N,OASP,IAAIlH,EAAS6G,EAAMhN,UA0BnB,OAxBAmG,EAAOrF,QAAU,aAOjBqF,EAAOkH,KAAO,WACZ/N,KAAKgO,MAAQjB,EAAkB/M,KAAK+G,QAAS/G,KAAKgO,KAAMhO,KAAK6N,YAC7D7N,KAAKiO,UAAYlB,EAAkB/M,KAAK6C,OAAQ7C,KAAKiO,SAAUjO,KAAK6N,YACpE7N,KAAKkO,OAASnB,EAAkBM,EAAoBrN,KAAK+G,SAAU/G,KAAKkO,MAAOlO,KAAK6N,aAQtFhH,EAAOsH,QAAU,WACfnO,KAAKgO,MAAQb,EAAqBnN,KAAK+G,QAAS/G,KAAKgO,KAAMhO,KAAK6N,YAChE7N,KAAKiO,UAAYd,EAAqBnN,KAAK6C,OAAQ7C,KAAKiO,SAAUjO,KAAK6N,YACvE7N,KAAKkO,OAASf,EAAqBE,EAAoBrN,KAAK+G,SAAU/G,KAAKkO,MAAOlO,KAAK6N,aAGlFH,EAlDT,GA6DA,SAASU,EAAQC,EAAK7H,EAAM8H,GAC1B,GAAID,EAAI5H,UAAY6H,EAClB,OAAOD,EAAI5H,QAAQD,GAInB,IAFA,IAAI/H,EAAI,EAEDA,EAAI4P,EAAI1P,QAAQ,CACrB,GAAI2P,GAAaD,EAAI5P,GAAG6P,IAAc9H,IAAS8H,GAAaD,EAAI5P,KAAO+H,EAErE,OAAO/H,EAGTA,IAGF,OAAQ,EAIZ,IAAI8P,EAAoB,CACtBC,YA9rBgB,EA+rBhBC,YA9rBe,EA+rBfC,UA9rBc,EA+rBdC,cA9rBiB,EA+rBjBC,WA/rBiB,GAksBfC,EAAyB,CAC3BC,EA3sBqB,QA4sBrBC,EA3sBmB,MA4sBnBC,EA3sBqB,QA4sBrBC,EA3sBsB,UA8sBpBC,EAAyB,cACzBC,EAAwB,sCAExB1L,EAAI2L,iBAAmB3L,EAAI4L,eAC7BH,EAAyB,gBACzBC,EAAwB,6CAU1B,IAAIG,EAEJ,SAAUC,GAGR,SAASD,IACP,IAAI1N,EAEA4N,EAAQF,EAAkB5O,UAK9B,OAJA8O,EAAMxB,KAAOkB,EACbM,EAAMtB,MAAQiB,GACdvN,EAAQ2N,EAAO9N,MAAMzB,KAAMR,YAAcQ,MACnCyP,MAAQ7N,EAAM+E,QAAQwB,QAAQuH,cAAgB,GAC7C9N,EAkDT,OA5DAoB,EAAesM,EAAmBC,GAmBrBD,EAAkB5O,UAExBc,QAAU,SAAiBsM,GAChC,IAAI2B,EAAQzP,KAAKyP,MACbE,GAAgB,EAChBC,EAAsB9B,EAAGb,KAAKhG,cAAc4I,QAAQ,KAAM,IAC1DjQ,EAAY2O,EAAkBqB,GAC9BE,EAAcjB,EAAuBf,EAAGgC,cAAgBhC,EAAGgC,YAC3DC,EA9vBe,UA8vBLD,EAEVE,EAAa5B,EAAQqB,EAAO3B,EAAGmC,UAAW,aA3vBhC,EA6vBVrQ,IAA0C,IAAdkO,EAAGoC,QAAgBH,GAC7CC,EAAa,IACfP,EAAMpQ,KAAKyO,GACXkC,EAAaP,EAAM9Q,OAAS,GAET,GAAZiB,IACT+P,GAAgB,GAIdK,EAAa,IAKjBP,EAAMO,GAAclC,EACpB9N,KAAK2N,SAAS3N,KAAK2G,QAAS/G,EAAW,CACrC4I,SAAUiH,EACVjD,gBAAiB,CAACsB,GAClBgC,YAAaA,EACb9H,SAAU8F,IAGR6B,GAEFF,EAAMhN,OAAOuN,EAAY,KAItBV,EA7DT,CA8DE5B,GAQF,SAASyC,EAAQ1L,GACf,OAAO2L,MAAM1P,UAAUqE,MAAMrG,KAAK+F,EAAK,GAYzC,SAAS4L,GAAYhC,EAAK/N,EAAKgQ,GAK7B,IAJA,IAAIC,EAAU,GACVC,EAAS,GACT/R,EAAI,EAEDA,EAAI4P,EAAI1P,QAAQ,CACrB,IAAI8G,EAAMnF,EAAM+N,EAAI5P,GAAG6B,GAAO+N,EAAI5P,GAE9B2P,EAAQoC,EAAQ/K,GAAO,GACzB8K,EAAQlR,KAAKgP,EAAI5P,IAGnB+R,EAAO/R,GAAKgH,EACZhH,IAaF,OAVI6R,IAIAC,EAHGjQ,EAGOiQ,EAAQD,MAAK,SAAUG,EAAGC,GAClC,OAAOD,EAAEnQ,GAAOoQ,EAAEpQ,MAHViQ,EAAQD,QAQfC,EAGT,IAAII,GAAkB,CACpBC,WA90BgB,EA+0BhBC,UA90Be,EA+0BfC,SA90Bc,EA+0BdC,YA90BiB,GAw1BfC,GAEJ,SAAUzB,GAGR,SAASyB,IACP,IAAIpP,EAMJ,OAJAoP,EAAWtQ,UAAUuN,SAhBC,6CAiBtBrM,EAAQ2N,EAAO9N,MAAMzB,KAAMR,YAAcQ,MACnCiR,UAAY,GAEXrP,EAqBT,OA9BAoB,EAAegO,EAAYzB,GAYdyB,EAAWtQ,UAEjBc,QAAU,SAAiBsM,GAChC,IAAIb,EAAO0D,GAAgB7C,EAAGb,MAC1BiE,EAAUC,GAAWzS,KAAKsB,KAAM8N,EAAIb,GAEnCiE,GAILlR,KAAK2N,SAAS3N,KAAK2G,QAASsG,EAAM,CAChCzE,SAAU0I,EAAQ,GAClB1E,gBAAiB0E,EAAQ,GACzBpB,YA53BiB,QA63BjB9H,SAAU8F,KAIPkD,EA/BT,CAgCEtD,GAEF,SAASyD,GAAWrD,EAAIb,GACtB,IAQIxO,EACA2S,EATAC,EAAalB,EAAQrC,EAAGoD,SACxBD,EAAYjR,KAAKiR,UAErB,GAAW,EAAPhE,GAA2D,IAAtBoE,EAAW1S,OAElD,OADAsS,EAAUI,EAAW,GAAGC,aAAc,EAC/B,CAACD,EAAYA,GAKtB,IAAIE,EAAiBpB,EAAQrC,EAAGyD,gBAC5BC,EAAuB,GACvB3O,EAAS7C,KAAK6C,OAMlB,GAJAuO,EAAgBC,EAAWI,QAAO,SAAUC,GAC1C,OAAO1I,EAAU0I,EAAM7O,OAAQA,MA/4BjB,IAk5BZoK,EAGF,IAFAxO,EAAI,EAEGA,EAAI2S,EAAczS,QACvBsS,EAAUG,EAAc3S,GAAG6S,aAAc,EACzC7S,IAOJ,IAFAA,EAAI,EAEGA,EAAI8S,EAAe5S,QACpBsS,EAAUM,EAAe9S,GAAG6S,aAC9BE,EAAqBnS,KAAKkS,EAAe9S,IAIhC,GAAPwO,UACKgE,EAAUM,EAAe9S,GAAG6S,YAGrC7S,IAGF,OAAK+S,EAAqB7S,OAInB,CACP0R,GAAYe,EAAc3R,OAAO+R,GAAuB,cAAc,GAAOA,QAL7E,EAQF,IAAIG,GAAkB,CACpBC,UAp7BgB,EAq7BhBC,UAp7Be,EAq7BfC,QAp7Bc,GA+7BZC,GAEJ,SAAUxC,GAGR,SAASwC,IACP,IAAInQ,EAEA4N,EAAQuC,EAAWrR,UAMvB,OALA8O,EAAMxB,KAlBiB,YAmBvBwB,EAAMtB,MAlBgB,qBAmBtBtM,EAAQ2N,EAAO9N,MAAMzB,KAAMR,YAAcQ,MACnCgS,SAAU,EAETpQ,EAuCT,OAlDAoB,EAAe+O,EAAYxC,GAoBdwC,EAAWrR,UAEjBc,QAAU,SAAiBsM,GAChC,IAAIlO,EAAY+R,GAAgB7D,EAAGb,MA39BrB,EA69BVrN,GAAyC,IAAdkO,EAAGoC,SAChClQ,KAAKgS,SAAU,GA79BJ,EAg+BTpS,GAAuC,IAAbkO,EAAGmE,QAC/BrS,EAh+BU,GAo+BPI,KAAKgS,UAp+BE,EAw+BRpS,IACFI,KAAKgS,SAAU,GAGjBhS,KAAK2N,SAAS3N,KAAK2G,QAAS/G,EAAW,CACrC4I,SAAU,CAACsF,GACXtB,gBAAiB,CAACsB,GAClBgC,YAp/BiB,QAq/BjB9H,SAAU8F,MAIPiE,EAnDT,CAoDErE,GAgBF,SAASwE,GAAaC,GACpB,IACIT,EADwBS,EAAU3F,gBACJ,GAElC,GAAIkF,EAAMJ,aAAetR,KAAKoS,aAAc,CAC1C,IAAIC,EAAY,CACd/I,EAAGoI,EAAMnI,QACTC,EAAGkI,EAAMjI,SAEP6I,EAAMtS,KAAKuS,YACfvS,KAAKuS,YAAYlT,KAAKgT,GAUtBG,YARsB,WACpB,IAAI/T,EAAI6T,EAAI7L,QAAQ4L,GAEhB5T,GAAK,GACP6T,EAAI7P,OAAOhE,EAAG,KAnBF,OA2BpB,SAASgU,GAAc7S,EAAWuS,GA/hChB,EAgiCZvS,GACFI,KAAKoS,aAAeD,EAAU3F,gBAAgB,GAAG8E,WACjDY,GAAaxT,KAAKsB,KAAMmS,IACH,GAAZvS,GACTsS,GAAaxT,KAAKsB,KAAMmS,GAI5B,SAASO,GAAiBP,GAIxB,IAHA,IAAI7I,EAAI6I,EAAUnK,SAASuB,QACvBC,EAAI2I,EAAUnK,SAASyB,QAElBhL,EAAI,EAAGA,EAAIuB,KAAKuS,YAAY5T,OAAQF,IAAK,CAChD,IAAIkU,EAAI3S,KAAKuS,YAAY9T,GACrBmU,EAAKxO,KAAKC,IAAIiF,EAAIqJ,EAAErJ,GACpBuJ,EAAKzO,KAAKC,IAAImF,EAAImJ,EAAEnJ,GAExB,GAAIoJ,GA5Ca,IA4CWC,GA5CX,GA6Cf,OAAO,EAIX,OAAO,EAGT,IAAIC,GAEJ,WA0DE,OAvDA,SAAUvD,GAGR,SAASuD,EAAgBC,EAAUpF,GACjC,IAAI/L,EA0BJ,OAxBAA,EAAQ2N,EAAO7Q,KAAKsB,KAAM+S,EAAUpF,IAAa3N,MAE3CwB,QAAU,SAAUmF,EAASqM,EAAYC,GAC7C,IAAIlD,EA5kCW,UA4kCDkD,EAAUnD,YACpBoD,EA3kCW,UA2kCDD,EAAUnD,YAExB,KAAIoD,GAAWD,EAAUE,oBAAsBF,EAAUE,mBAAmBC,kBAA5E,CAKA,GAAIrD,EACF0C,GAAc/T,KAAK4E,EAAuBA,EAAuB1B,IAASoR,EAAYC,QACjF,GAAIC,GAAWR,GAAiBhU,KAAK4E,EAAuBA,EAAuB1B,IAASqR,GACjG,OAGFrR,EAAM+L,SAAShH,EAASqM,EAAYC,KAGtCrR,EAAM8P,MAAQ,IAAIV,GAAWpP,EAAM+E,QAAS/E,EAAMJ,SAClDI,EAAMyR,MAAQ,IAAItB,GAAWnQ,EAAM+E,QAAS/E,EAAMJ,SAClDI,EAAMwQ,aAAe,KACrBxQ,EAAM2Q,YAAc,GACb3Q,EAsBT,OAnDAoB,EAAe8P,EAAiBvD,GAwCnBuD,EAAgBpS,UAMtByN,QAAU,WACfnO,KAAK0R,MAAMvD,UACXnO,KAAKqT,MAAMlF,WAGN2E,EApDT,CAqDEpF,GAxDJ,GAoGA,SAAS4F,GAAeC,EAAKC,EAAIpN,GAC/B,QAAIgK,MAAMqD,QAAQF,KAChBpN,EAAKoN,EAAKnN,EAAQoN,GAAKpN,IAChB,GAMX,IAaIsN,GAAY,EAYhB,SAASC,GAA6BC,EAAiBrM,GACrD,IAAIZ,EAAUY,EAAWZ,QAEzB,OAAIA,EACKA,EAAQkN,IAAID,GAGdA,EAUT,SAASE,GAASC,GAChB,OAtCoB,GAsChBA,EACK,SAzCO,EA0CLA,EACF,MA5CS,EA6CPA,EACF,OA/CO,EAgDLA,EACF,QAGF,GAwCT,IAAIC,GAEJ,WACE,SAASA,EAAW5M,QACF,IAAZA,IACFA,EAAU,IAGZpH,KAAKoH,QAAUzE,EAAS,CACtB6E,QAAQ,GACPJ,GACHpH,KAAKiU,GAzFAP,KA0FL1T,KAAK2G,QAAU,KAEf3G,KAAK+T,MA3GY,EA4GjB/T,KAAKkU,aAAe,GACpBlU,KAAKmU,YAAc,GAUrB,IAAItN,EAASmN,EAAWtT,UAwPxB,OAtPAmG,EAAOD,IAAM,SAAaQ,GAIxB,OAHA1D,EAAS1D,KAAKoH,QAASA,GAEvBpH,KAAK2G,SAAW3G,KAAK2G,QAAQU,YAAYF,SAClCnH,MAUT6G,EAAOuN,cAAgB,SAAuBR,GAC5C,GAAIN,GAAeM,EAAiB,gBAAiB5T,MACnD,OAAOA,KAGT,IAAIkU,EAAelU,KAAKkU,aAQxB,OALKA,GAFLN,EAAkBD,GAA6BC,EAAiB5T,OAE9BiU,MAChCC,EAAaN,EAAgBK,IAAML,EACnCA,EAAgBQ,cAAcpU,OAGzBA,MAUT6G,EAAOwN,kBAAoB,SAA2BT,GACpD,OAAIN,GAAeM,EAAiB,oBAAqB5T,QAIzD4T,EAAkBD,GAA6BC,EAAiB5T,aACzDA,KAAKkU,aAAaN,EAAgBK,KAJhCjU,MAeX6G,EAAOyN,eAAiB,SAAwBV,GAC9C,GAAIN,GAAeM,EAAiB,iBAAkB5T,MACpD,OAAOA,KAGT,IAAImU,EAAcnU,KAAKmU,YAQvB,OAL+C,IAA3C/F,EAAQ+F,EAFZP,EAAkBD,GAA6BC,EAAiB5T,SAG9DmU,EAAY9U,KAAKuU,GACjBA,EAAgBU,eAAetU,OAG1BA,MAUT6G,EAAO0N,mBAAqB,SAA4BX,GACtD,GAAIN,GAAeM,EAAiB,qBAAsB5T,MACxD,OAAOA,KAGT4T,EAAkBD,GAA6BC,EAAiB5T,MAChE,IAAI4D,EAAQwK,EAAQpO,KAAKmU,YAAaP,GAMtC,OAJIhQ,GAAS,GACX5D,KAAKmU,YAAY1R,OAAOmB,EAAO,GAG1B5D,MAST6G,EAAO2N,mBAAqB,WAC1B,OAAOxU,KAAKmU,YAAYxV,OAAS,GAUnCkI,EAAO4N,iBAAmB,SAA0Bb,GAClD,QAAS5T,KAAKkU,aAAaN,EAAgBK,KAU7CpN,EAAO8F,KAAO,SAAc5E,GAC1B,IAAIxE,EAAOvD,KACP+T,EAAQ/T,KAAK+T,MAEjB,SAASpH,EAAK1L,GACZsC,EAAKoD,QAAQgG,KAAK1L,EAAO8G,GAIvBgM,EAvPU,GAwPZpH,EAAKpJ,EAAK6D,QAAQnG,MAAQ6S,GAASC,IAGrCpH,EAAKpJ,EAAK6D,QAAQnG,OAEd8G,EAAM2M,iBAER/H,EAAK5E,EAAM2M,iBAITX,GAnQU,GAoQZpH,EAAKpJ,EAAK6D,QAAQnG,MAAQ6S,GAASC,KAYvClN,EAAO8N,QAAU,SAAiB5M,GAChC,GAAI/H,KAAK4U,UACP,OAAO5U,KAAK2M,KAAK5E,GAInB/H,KAAK+T,MAnRU,IA4RjBlN,EAAO+N,QAAU,WAGf,IAFA,IAAInW,EAAI,EAEDA,EAAIuB,KAAKmU,YAAYxV,QAAQ,CAClC,KAAkC,GAA5BqB,KAAKmU,YAAY1V,GAAGsV,OACxB,OAAO,EAGTtV,IAGF,OAAO,GASToI,EAAO+F,UAAY,SAAmBqG,GAGpC,IAAI4B,EAAiBnR,EAAS,GAAIuP,GAElC,IAAK5M,EAASrG,KAAKoH,QAAQI,OAAQ,CAACxH,KAAM6U,IAGxC,OAFA7U,KAAK8U,aACL9U,KAAK+T,MAvTQ,IA4TE,GAAb/T,KAAK+T,QACP/T,KAAK+T,MAnUU,GAsUjB/T,KAAK+T,MAAQ/T,KAAK+U,QAAQF,GAGT,GAAb7U,KAAK+T,OACP/T,KAAK2U,QAAQE,IAejBhO,EAAOkO,QAAU,SAAiB9B,KAWlCpM,EAAOY,eAAiB,aASxBZ,EAAOiO,MAAQ,aAERd,EAhRT,GA+RIgB,GAEJ,SAAUC,GAGR,SAASD,EAAc5N,GACrB,IAAIxF,EAyBJ,YAvBgB,IAAZwF,IACFA,EAAU,KAGZxF,EAAQqT,EAAYvW,KAAKsB,KAAM2C,EAAS,CACtC1B,MAAO,MACPuH,SAAU,EACV0M,KAAM,EACNC,SAAU,IAEVC,KAAM,IAENC,UAAW,EAEXC,aAAc,IACblO,KAAapH,MAGVuV,OAAQ,EACd3T,EAAM4T,SAAU,EAChB5T,EAAM6T,OAAS,KACf7T,EAAM8T,OAAS,KACf9T,EAAM+T,MAAQ,EACP/T,EA5BToB,EAAegS,EAAeC,GA+B9B,IAAIpO,EAASmO,EAActU,UAiF3B,OA/EAmG,EAAOY,eAAiB,WACtB,MAAO,CA3lDqB,iBA8lD9BZ,EAAOkO,QAAU,SAAiBhN,GAChC,IAAI6N,EAAS5V,KAEToH,EAAUpH,KAAKoH,QACfyO,EAAgB9N,EAAMS,SAAS7J,SAAWyI,EAAQoB,SAClDsN,EAAgB/N,EAAMW,SAAWtB,EAAQiO,UACzCU,EAAiBhO,EAAMa,UAAYxB,EAAQgO,KAG/C,GAFApV,KAAK8U,QArlDS,EAulDV/M,EAAMnI,WAA0C,IAAfI,KAAK2V,MACxC,OAAO3V,KAAKgW,cAKd,GAAIF,GAAiBC,GAAkBF,EAAe,CACpD,GA5lDU,IA4lDN9N,EAAMnI,UACR,OAAOI,KAAKgW,cAGd,IAAIC,GAAgBjW,KAAKuV,OAAQxN,EAAM4B,UAAY3J,KAAKuV,MAAQnO,EAAQ+N,SACpEe,GAAiBlW,KAAKwV,SAAWzL,EAAY/J,KAAKwV,QAASzN,EAAM6B,QAAUxC,EAAQkO,aAevF,GAdAtV,KAAKuV,MAAQxN,EAAM4B,UACnB3J,KAAKwV,QAAUzN,EAAM6B,OAEhBsM,GAAkBD,EAGrBjW,KAAK2V,OAAS,EAFd3V,KAAK2V,MAAQ,EAKf3V,KAAK0V,OAAS3N,EAKG,IAFF/H,KAAK2V,MAAQvO,EAAQ8N,KAKlC,OAAKlV,KAAKwU,sBAGRxU,KAAKyV,OAASjD,YAAW,WACvBoD,EAAO7B,MA9cD,EAgdN6B,EAAOjB,YACNvN,EAAQ+N,UAndH,GAEA,EAudd,OApde,IAudjBtO,EAAOmP,YAAc,WACnB,IAAIG,EAASnW,KAKb,OAHAA,KAAKyV,OAASjD,YAAW,WACvB2D,EAAOpC,MA3dM,KA4dZ/T,KAAKoH,QAAQ+N,UA5dD,IAgejBtO,EAAOiO,MAAQ,WACbsB,aAAapW,KAAKyV,SAGpB5O,EAAO8F,KAAO,WAveE,IAweV3M,KAAK+T,QACP/T,KAAK0V,OAAOW,SAAWrW,KAAK2V,MAC5B3V,KAAK2G,QAAQgG,KAAK3M,KAAKoH,QAAQnG,MAAOjB,KAAK0V,UAIxCV,EAjHT,CAkHEhB,IASEsC,GAEJ,SAAUrB,GAGR,SAASqB,EAAelP,GAKtB,YAJgB,IAAZA,IACFA,EAAU,IAGL6N,EAAYvW,KAAKsB,KAAM2C,EAAS,CACrC6F,SAAU,GACTpB,KAAapH,KATlBgD,EAAesT,EAAgBrB,GAoB/B,IAAIpO,EAASyP,EAAe5V,UAoC5B,OAlCAmG,EAAO0P,SAAW,SAAkBxO,GAClC,IAAIyO,EAAiBxW,KAAKoH,QAAQoB,SAClC,OAA0B,IAAnBgO,GAAwBzO,EAAMS,SAAS7J,SAAW6X,GAW3D3P,EAAOkO,QAAU,SAAiBhN,GAChC,IAAIgM,EAAQ/T,KAAK+T,MACbnU,EAAYmI,EAAMnI,UAClB6W,EAAuB,EAAR1C,EACf2C,EAAU1W,KAAKuW,SAASxO,GAE5B,OAAI0O,IA5sDW,EA4sDM7W,IAA6B8W,GAliBhC,GAmiBT3C,EACE0C,GAAgBC,EA/sDf,EAgtDN9W,EAviBQ,EAwiBHmU,EA1iBG,EA2iBCA,EA1iBC,EA8iBPA,EA/iBK,EAKC,IAgjBVuC,EAzDT,CA0DEtC,IASF,SAAS2C,GAAa1O,GACpB,OAjuDmB,KAiuDfA,EACK,OAnuDQ,IAouDNA,EACF,KAvuDU,IAwuDRA,EACF,OAxuDW,IAyuDTA,EACF,QAGF,GAWT,IAAI2O,GAEJ,SAAUC,GAGR,SAASD,EAAcxP,GACrB,IAAIxF,EAcJ,YAZgB,IAAZwF,IACFA,EAAU,KAGZxF,EAAQiV,EAAgBnY,KAAKsB,KAAM2C,EAAS,CAC1C1B,MAAO,MACPoU,UAAW,GACX7M,SAAU,EACVP,UAnwDc6O,IAowDb1P,KAAapH,MACV+W,GAAK,KACXnV,EAAMoV,GAAK,KACJpV,EAjBToB,EAAe4T,EAAeC,GAoB9B,IAAIhQ,EAAS+P,EAAclW,UA0D3B,OAxDAmG,EAAOY,eAAiB,WACtB,IAAIQ,EAAYjI,KAAKoH,QAAQa,UACzBjB,EAAU,GAUd,OA1xDuB6B,EAkxDnBZ,GACFjB,EAAQ3H,KAxyDW,SAsBAyJ,GAqxDjBb,GACFjB,EAAQ3H,KA7yDW,SAgzDd2H,GAGTH,EAAOoQ,cAAgB,SAAuBlP,GAC5C,IAAIX,EAAUpH,KAAKoH,QACf8P,GAAW,EACXxO,EAAWX,EAAMW,SACjBT,EAAYF,EAAME,UAClBqB,EAAIvB,EAAM8B,OACVL,EAAIzB,EAAM+B,OAed,OAbM7B,EAAYb,EAAQa,YAryDHY,EAsyDjBzB,EAAQa,WACVA,EAAkB,IAANqB,EA5yDC,EA4yD0BA,EAAI,EA3yD9B,EACC,EA2yDd4N,EAAW5N,IAAMtJ,KAAK+W,GACtBrO,EAAWtE,KAAKC,IAAI0D,EAAM8B,UAE1B5B,EAAkB,IAANuB,EAhzDC,EAgzD0BA,EAAI,EA7yDhC,EACE,GA6yDb0N,EAAW1N,IAAMxJ,KAAKgX,GACtBtO,EAAWtE,KAAKC,IAAI0D,EAAM+B,UAI9B/B,EAAME,UAAYA,EACXiP,GAAYxO,EAAWtB,EAAQiO,WAAapN,EAAYb,EAAQa,WAGzEpB,EAAO0P,SAAW,SAAkBxO,GAClC,OAAOuO,GAAe5V,UAAU6V,SAAS7X,KAAKsB,KAAM+H,KAtpBtC,EAupBd/H,KAAK+T,SAvpBS,EAupBgB/T,KAAK+T,QAAwB/T,KAAKiX,cAAclP,KAGhFlB,EAAO8F,KAAO,SAAc5E,GAC1B/H,KAAK+W,GAAKhP,EAAM8B,OAChB7J,KAAKgX,GAAKjP,EAAM+B,OAChB,IAAI7B,EAAY0O,GAAa5O,EAAME,WAE/BA,IACFF,EAAM2M,gBAAkB1U,KAAKoH,QAAQnG,MAAQgH,GAG/C4O,EAAgBnW,UAAUiM,KAAKjO,KAAKsB,KAAM+H,IAGrC6O,EA/ET,CAgFEN,IAUEa,GAEJ,SAAUN,GAGR,SAASM,EAAgB/P,GAKvB,YAJgB,IAAZA,IACFA,EAAU,IAGLyP,EAAgBnY,KAAKsB,KAAM2C,EAAS,CACzC1B,MAAO,QACPoU,UAAW,GACX1J,SAAU,GACV1D,UAAW6O,GACXtO,SAAU,GACTpB,KAAapH,KAblBgD,EAAemU,EAAiBN,GAgBhC,IAAIhQ,EAASsQ,EAAgBzW,UA+B7B,OA7BAmG,EAAOY,eAAiB,WACtB,OAAOmP,GAAclW,UAAU+G,eAAe/I,KAAKsB,OAGrD6G,EAAO0P,SAAW,SAAkBxO,GAClC,IACI4D,EADA1D,EAAYjI,KAAKoH,QAAQa,UAW7B,OARgB,GAAZA,EACF0D,EAAW5D,EAAMqD,gBA/2DIvC,EAg3DZZ,EACT0D,EAAW5D,EAAMsD,iBAh3DEvC,GAi3DVb,IACT0D,EAAW5D,EAAMuD,kBAGZuL,EAAgBnW,UAAU6V,SAAS7X,KAAKsB,KAAM+H,IAAUE,EAAYF,EAAMG,iBAAmBH,EAAMW,SAAW1I,KAAKoH,QAAQiO,WAAatN,EAAM2D,cAAgB1L,KAAKoH,QAAQoB,UAAYnE,EAAIsH,GAAY3L,KAAKoH,QAAQuE,UA73D/M,EA63D2N5D,EAAMnI,WAG/OiH,EAAO8F,KAAO,SAAc5E,GAC1B,IAAIE,EAAY0O,GAAa5O,EAAMG,iBAE/BD,GACFjI,KAAK2G,QAAQgG,KAAK3M,KAAKoH,QAAQnG,MAAQgH,EAAWF,GAGpD/H,KAAK2G,QAAQgG,KAAK3M,KAAKoH,QAAQnG,MAAO8G,IAGjCoP,EAhDT,CAiDEb,IAUEc,GAEJ,SAAUP,GAGR,SAASO,EAAgBhQ,GAKvB,YAJgB,IAAZA,IACFA,EAAU,IAGLyP,EAAgBnY,KAAKsB,KAAM2C,EAAS,CACzC1B,MAAO,QACPoU,UAAW,EACX7M,SAAU,GACTpB,KAAapH,KAXlBgD,EAAeoU,EAAiBP,GAchC,IAAIhQ,EAASuQ,EAAgB1W,UAmB7B,OAjBAmG,EAAOY,eAAiB,WACtB,MAAO,CAz7Da,SA47DtBZ,EAAO0P,SAAW,SAAkBxO,GAClC,OAAO8O,EAAgBnW,UAAU6V,SAAS7X,KAAKsB,KAAM+H,KAAW3D,KAAKC,IAAI0D,EAAMwD,MAAQ,GAAKvL,KAAKoH,QAAQiO,WAtwB3F,EAswBwGrV,KAAK+T,QAG7HlN,EAAO8F,KAAO,SAAc5E,GAC1B,GAAoB,IAAhBA,EAAMwD,MAAa,CACrB,IAAI8L,EAAQtP,EAAMwD,MAAQ,EAAI,KAAO,MACrCxD,EAAM2M,gBAAkB1U,KAAKoH,QAAQnG,MAAQoW,EAG/CR,EAAgBnW,UAAUiM,KAAKjO,KAAKsB,KAAM+H,IAGrCqP,EAlCT,CAmCEd,IAUEgB,GAEJ,SAAUT,GAGR,SAASS,EAAiBlQ,GAKxB,YAJgB,IAAZA,IACFA,EAAU,IAGLyP,EAAgBnY,KAAKsB,KAAM2C,EAAS,CACzC1B,MAAO,SACPoU,UAAW,EACX7M,SAAU,GACTpB,KAAapH,KAXlBgD,EAAesU,EAAkBT,GAcjC,IAAIhQ,EAASyQ,EAAiB5W,UAU9B,OARAmG,EAAOY,eAAiB,WACtB,MAAO,CAx+Da,SA2+DtBZ,EAAO0P,SAAW,SAAkBxO,GAClC,OAAO8O,EAAgBnW,UAAU6V,SAAS7X,KAAKsB,KAAM+H,KAAW3D,KAAKC,IAAI0D,EAAMyD,UAAYxL,KAAKoH,QAAQiO,WArzB1F,EAqzBuGrV,KAAK+T,QAGrHuD,EAzBT,CA0BEhB,IAUEiB,GAEJ,SAAUtC,GAGR,SAASsC,EAAgBnQ,GACvB,IAAIxF,EAeJ,YAbgB,IAAZwF,IACFA,EAAU,KAGZxF,EAAQqT,EAAYvW,KAAKsB,KAAM2C,EAAS,CACtC1B,MAAO,QACPuH,SAAU,EACV4M,KAAM,IAENC,UAAW,GACVjO,KAAapH,MACVyV,OAAS,KACf7T,EAAM8T,OAAS,KACR9T,EAlBToB,EAAeuU,EAAiBtC,GAqBhC,IAAIpO,EAAS0Q,EAAgB7W,UAiD7B,OA/CAmG,EAAOY,eAAiB,WACtB,MAAO,CAxhEa,SA2hEtBZ,EAAOkO,QAAU,SAAiBhN,GAChC,IAAI6N,EAAS5V,KAEToH,EAAUpH,KAAKoH,QACfyO,EAAgB9N,EAAMS,SAAS7J,SAAWyI,EAAQoB,SAClDsN,EAAgB/N,EAAMW,SAAWtB,EAAQiO,UACzCmC,EAAYzP,EAAMa,UAAYxB,EAAQgO,KAI1C,GAHApV,KAAK0V,OAAS3N,GAGT+N,IAAkBD,GAAmC,GAAlB9N,EAAMnI,YAA2C4X,EACvFxX,KAAK8U,aACA,GAthEO,EAshEH/M,EAAMnI,UACfI,KAAK8U,QACL9U,KAAKyV,OAASjD,YAAW,WACvBoD,EAAO7B,MA92BG,EAg3BV6B,EAAOjB,YACNvN,EAAQgO,WACN,GA3hEK,EA2hEDrN,EAAMnI,UACf,OAn3BY,EAs3Bd,OAn3Be,IAs3BjBiH,EAAOiO,MAAQ,WACbsB,aAAapW,KAAKyV,SAGpB5O,EAAO8F,KAAO,SAAc5E,GA73BZ,IA83BV/H,KAAK+T,QAILhM,GA3iEQ,EA2iECA,EAAMnI,UACjBI,KAAK2G,QAAQgG,KAAK3M,KAAKoH,QAAQnG,MAAQ,KAAM8G,IAE7C/H,KAAK0V,OAAO/L,UAAYrF,IACxBtE,KAAK2G,QAAQgG,KAAK3M,KAAKoH,QAAQnG,MAAOjB,KAAK0V,WAIxC6B,EAvET,CAwEEvD,IAEEyD,GAAW,CAQbC,WAAW,EASXrQ,YA3lEyB,UAkmEzBG,QAAQ,EAURoG,YAAa,KAQb+J,WAAY,KAQZC,SAAU,CAORC,WAAY,OAQZC,YAAa,OAUbC,aAAc,OAQdC,eAAgB,OAQhBC,SAAU,OASVC,kBAAmB,kBAWnBC,GAAS,CAAC,CAACb,GAAkB,CAC/B9P,QAAQ,IACN,CAAC4P,GAAiB,CACpB5P,QAAQ,GACP,CAAC,WAAY,CAAC2P,GAAiB,CAChClP,UAnqEyBY,IAoqEvB,CAAC+N,GAAe,CAClB3O,UArqEyBY,GAsqExB,CAAC,UAAW,CAACmM,IAAgB,CAACA,GAAe,CAC9C/T,MAAO,YACPiU,KAAM,GACL,CAAC,QAAS,CAACqC,KAWd,SAASa,GAAezR,EAAS0R,GAC/B,IAMIzT,EANAmC,EAAUJ,EAAQI,QAEjBA,EAAQ9C,QAKbkC,EAAKQ,EAAQS,QAAQwQ,UAAU,SAAU/Y,EAAOsD,GAC9CyC,EAAOJ,EAASuC,EAAQ9C,MAAO9B,GAE3BkW,GACF1R,EAAQ2R,YAAY1T,GAAQmC,EAAQ9C,MAAMW,GAC1CmC,EAAQ9C,MAAMW,GAAQ/F,GAEtBkI,EAAQ9C,MAAMW,GAAQ+B,EAAQ2R,YAAY1T,IAAS,MAIlDyT,IACH1R,EAAQ2R,YAAc,KA0B1B,IAAIC,GAEJ,WACE,SAASA,EAAQxR,EAASK,GACxB,IA/mCyBT,EA+mCrB/E,EAAQ5B,KAEZA,KAAKoH,QAAU1D,EAAS,GAAI+T,GAAUrQ,GAAW,IACjDpH,KAAKoH,QAAQwG,YAAc5N,KAAKoH,QAAQwG,aAAe7G,EACvD/G,KAAKqB,SAAW,GAChBrB,KAAKmI,QAAU,GACfnI,KAAKsH,YAAc,GACnBtH,KAAKsY,YAAc,GACnBtY,KAAK+G,QAAUA,EACf/G,KAAK+H,MAvmCA,KAjBoBpB,EAwnCQ3G,MArnCVoH,QAAQuQ,aAItB/R,EACF0J,EACEzJ,EACFmL,GACGrL,EAGHmN,GAFAf,KAKOpL,EAAS0F,GAwmCvBrM,KAAKqH,YAAc,IAAIX,EAAY1G,KAAMA,KAAKoH,QAAQC,aACtD+Q,GAAepY,MAAM,GACrBmG,EAAKnG,KAAKoH,QAAQE,aAAa,SAAUkR,GACvC,IAAIjR,EAAa3F,EAAMyW,IAAI,IAAIG,EAAK,GAAGA,EAAK,KAE5CA,EAAK,IAAMjR,EAAW6M,cAAcoE,EAAK,IACzCA,EAAK,IAAMjR,EAAW+M,eAAekE,EAAK,MACzCxY,MAUL,IAAI6G,EAAS0R,EAAQ7X,UAiQrB,OA/PAmG,EAAOD,IAAM,SAAaQ,GAcxB,OAbA1D,EAAS1D,KAAKoH,QAASA,GAEnBA,EAAQC,aACVrH,KAAKqH,YAAYF,SAGfC,EAAQwG,cAEV5N,KAAK+H,MAAMoG,UACXnO,KAAK+H,MAAMlF,OAASuE,EAAQwG,YAC5B5N,KAAK+H,MAAMgG,QAGN/N,MAWT6G,EAAOlG,KAAO,SAAc8X,GAC1BzY,KAAKmI,QAAQuQ,QAAUD,EAjHT,EADP,GA6HT5R,EAAO+F,UAAY,SAAmBqG,GACpC,IAAI9K,EAAUnI,KAAKmI,QAEnB,IAAIA,EAAQuQ,QAAZ,CAMA,IAAInR,EADJvH,KAAKqH,YAAYS,gBAAgBmL,GAEjC,IAAI3L,EAActH,KAAKsH,YAInBqR,EAAgBxQ,EAAQwQ,gBAGvBA,GAAiBA,GAvpCR,EAupCyBA,EAAc5E,SACnD5L,EAAQwQ,cAAgB,KACxBA,EAAgB,MAKlB,IAFA,IAAIla,EAAI,EAEDA,EAAI6I,EAAY3I,QACrB4I,EAAaD,EAAY7I,GArJb,IA4JR0J,EAAQuQ,SACXC,GAAiBpR,IAAeoR,IACjCpR,EAAWkN,iBAAiBkE,GAI1BpR,EAAWuN,QAFXvN,EAAWqF,UAAUqG,IAOlB0F,GAAoC,GAAnBpR,EAAWwM,QAC/B5L,EAAQwQ,cAAgBpR,EACxBoR,EAAgBpR,GAGlB9I,MAWJoI,EAAOgN,IAAM,SAAatM,GACxB,GAAIA,aAAsByM,GACxB,OAAOzM,EAKT,IAFA,IAAID,EAActH,KAAKsH,YAEd7I,EAAI,EAAGA,EAAI6I,EAAY3I,OAAQF,IACtC,GAAI6I,EAAY7I,GAAG2I,QAAQnG,QAAUsG,EACnC,OAAOD,EAAY7I,GAIvB,OAAO,MAUToI,EAAOwR,IAAM,SAAa9Q,GACxB,GAAI+L,GAAe/L,EAAY,MAAOvH,MACpC,OAAOA,KAIT,IAAI4Y,EAAW5Y,KAAK6T,IAAItM,EAAWH,QAAQnG,OAS3C,OAPI2X,GACF5Y,KAAK6Y,OAAOD,GAGd5Y,KAAKsH,YAAYjI,KAAKkI,GACtBA,EAAWZ,QAAU3G,KACrBA,KAAKqH,YAAYF,SACVI,GAUTV,EAAOgS,OAAS,SAAgBtR,GAC9B,GAAI+L,GAAe/L,EAAY,SAAUvH,MACvC,OAAOA,KAGT,IAAI8Y,EAAmB9Y,KAAK6T,IAAItM,GAEhC,GAAIA,EAAY,CACd,IAAID,EAActH,KAAKsH,YACnB1D,EAAQwK,EAAQ9G,EAAawR,IAElB,IAAXlV,IACF0D,EAAY7E,OAAOmB,EAAO,GAC1B5D,KAAKqH,YAAYF,UAIrB,OAAOnH,MAWT6G,EAAO5E,GAAK,SAAY8W,EAAQvX,GAC9B,QAAe2D,IAAX4T,QAAoC5T,IAAZ3D,EAC1B,OAAOxB,KAGT,IAAIqB,EAAWrB,KAAKqB,SAKpB,OAJA8E,EAAK0G,EAASkM,IAAS,SAAU9X,GAC/BI,EAASJ,GAASI,EAASJ,IAAU,GACrCI,EAASJ,GAAO5B,KAAKmC,MAEhBxB,MAUT6G,EAAO7E,IAAM,SAAa+W,EAAQvX,GAChC,QAAe2D,IAAX4T,EACF,OAAO/Y,KAGT,IAAIqB,EAAWrB,KAAKqB,SAQpB,OAPA8E,EAAK0G,EAASkM,IAAS,SAAU9X,GAC1BO,EAGHH,EAASJ,IAAUI,EAASJ,GAAOwB,OAAO2L,EAAQ/M,EAASJ,GAAQO,GAAU,UAFtEH,EAASJ,MAKbjB,MAST6G,EAAO8F,KAAO,SAAc1L,EAAO+X,GAE7BhZ,KAAKoH,QAAQsQ,WAxQrB,SAAyBzW,EAAO+X,GAC9B,IAAIC,EAAejV,SAASkV,YAAY,SACxCD,EAAaE,UAAUlY,GAAO,GAAM,GACpCgY,EAAaG,QAAUJ,EACvBA,EAAKnW,OAAOwW,cAAcJ,GAqQtBK,CAAgBrY,EAAO+X,GAIzB,IAAI3X,EAAWrB,KAAKqB,SAASJ,IAAUjB,KAAKqB,SAASJ,GAAO8D,QAE5D,GAAK1D,GAAaA,EAAS1C,OAA3B,CAIAqa,EAAK/L,KAAOhM,EAEZ+X,EAAK3Q,eAAiB,WACpB2Q,EAAKhR,SAASK,kBAKhB,IAFA,IAAI5J,EAAI,EAEDA,EAAI4C,EAAS1C,QAClB0C,EAAS5C,GAAGua,GACZva,MAUJoI,EAAOsH,QAAU,WACfnO,KAAK+G,SAAWqR,GAAepY,MAAM,GACrCA,KAAKqB,SAAW,GAChBrB,KAAKmI,QAAU,GACfnI,KAAK+H,MAAMoG,UACXnO,KAAK+G,QAAU,MAGVwR,EA9RT,GAiSIgB,GAAyB,CAC3B3I,WA/gFgB,EAghFhBC,UA/gFe,EAghFfC,SA/gFc,EAghFdC,YA/gFiB,GA0hFfyI,GAEJ,SAAUjK,GAGR,SAASiK,IACP,IAAI5X,EAEA4N,EAAQgK,EAAiB9Y,UAK7B,OAJA8O,EAAMvB,SAlBuB,aAmB7BuB,EAAMtB,MAlBuB,6CAmB7BtM,EAAQ2N,EAAO9N,MAAMzB,KAAMR,YAAcQ,MACnCyZ,SAAU,EACT7X,EA8BT,OAxCAoB,EAAewW,EAAkBjK,GAapBiK,EAAiB9Y,UAEvBc,QAAU,SAAiBsM,GAChC,IAAIb,EAAOsM,GAAuBzL,EAAGb,MAMrC,GAtjFc,IAkjFVA,IACFjN,KAAKyZ,SAAU,GAGZzZ,KAAKyZ,QAAV,CAIA,IAAIvI,EAAUwI,GAAuBhb,KAAKsB,KAAM8N,EAAIb,GAEzC,GAAPA,GAAqCiE,EAAQ,GAAGvS,OAASuS,EAAQ,GAAGvS,QAAW,IACjFqB,KAAKyZ,SAAU,GAGjBzZ,KAAK2N,SAAS3N,KAAK2G,QAASsG,EAAM,CAChCzE,SAAU0I,EAAQ,GAClB1E,gBAAiB0E,EAAQ,GACzBpB,YAxkFiB,QAykFjB9H,SAAU8F,MAIP0L,EAzCT,CA0CE9L,GAEF,SAASgM,GAAuB5L,EAAIb,GAClC,IAAI0M,EAAMxJ,EAAQrC,EAAGoD,SACjB0I,EAAUzJ,EAAQrC,EAAGyD,gBAMzB,OAJW,GAAPtE,IACF0M,EAAMtJ,GAAYsJ,EAAIla,OAAOma,GAAU,cAAc,IAGhD,CAACD,EAAKC,GAWf,SAASC,GAAUC,EAAQ3X,EAAM4X,GAC/B,IAAIC,EAAqB,sBAAwB7X,EAAO,KAAO4X,EAAU,SACzE,OAAO,WACL,IAAI5a,EAAI,IAAI8a,MAAM,mBACdC,EAAQ/a,GAAKA,EAAE+a,MAAQ/a,EAAE+a,MAAMrK,QAAQ,kBAAmB,IAAIA,QAAQ,cAAe,IAAIA,QAAQ,6BAA8B,kBAAoB,sBACnJsK,EAAMnV,OAAOoV,UAAYpV,OAAOoV,QAAQC,MAAQrV,OAAOoV,QAAQD,KAMnE,OAJIA,GACFA,EAAIzb,KAAKsG,OAAOoV,QAASJ,EAAoBE,GAGxCJ,EAAOrY,MAAMzB,KAAMR,YAc9B,IAAI8a,GAAST,IAAU,SAAUU,EAAMlM,EAAKmM,GAI1C,IAHA,IAAIpa,EAAOD,OAAOC,KAAKiO,GACnB5P,EAAI,EAEDA,EAAI2B,EAAKzB,UACT6b,GAASA,QAA2BrV,IAAlBoV,EAAKna,EAAK3B,OAC/B8b,EAAKna,EAAK3B,IAAM4P,EAAIjO,EAAK3B,KAG3BA,IAGF,OAAO8b,IACN,SAAU,iBAWTC,GAAQX,IAAU,SAAUU,EAAMlM,GACpC,OAAOiM,GAAOC,EAAMlM,GAAK,KACxB,QAAS,iBAUZ,SAASoM,GAAQC,EAAOC,EAAMC,GAC5B,IACIC,EADAC,EAAQH,EAAKja,WAEjBma,EAASH,EAAMha,UAAYP,OAAOgD,OAAO2X,IAClC1X,YAAcsX,EACrBG,EAAOE,OAASD,EAEZF,GACFlX,EAASmX,EAAQD,GAWrB,SAASI,GAAOxH,EAAIpN,GAClB,OAAO,WACL,OAAOoN,EAAG/R,MAAM2E,EAAS5G,YAY7B,IAAIyb,GAEJ,WACE,IAAIA,EAKJ,SAAgBlU,EAASK,GAKvB,YAJgB,IAAZA,IACFA,EAAU,IAGL,IAAImR,GAAQxR,EAASpE,EAAS,CACnC2E,YAAa6Q,GAAO1Y,UACnB2H,KA6DL,OA1DA6T,EAAOvY,QAAU,YACjBuY,EAAOC,cApsFWpE,GAqsFlBmE,EAAOE,eAxsFY,GAysFnBF,EAAOpS,eA5sFY,EA6sFnBoS,EAAOG,gBA5sFa,EA6sFpBH,EAAOnS,aA5sFU,EA6sFjBmS,EAAOnE,qBA3sFkBjO,EA4sFzBoS,EAAOI,mBA3sFgBvS,GA4sFvBmS,EAAOK,eAltFY,EAmtFnBL,EAAOE,eA/sFY,GAgtFnBF,EAAOM,YAxtFS,EAytFhBN,EAAOO,WAxtFQ,EAytFfP,EAAOQ,UAxtFO,EAytFdR,EAAOS,aAxtFU,EAytFjBT,EAAOU,eApjDY,EAqjDnBV,EAAOW,YApjDS,EAqjDhBX,EAAOY,cApjDW,EAqjDlBZ,EAAOa,YApjDS,EAqjDhBb,EAAOc,iBArjDS,EAsjDhBd,EAAOe,gBApjDa,GAqjDpBf,EAAOgB,aApjDU,GAqjDjBhB,EAAO1C,QAAUA,GACjB0C,EAAOvN,MAAQA,EACfuN,EAAOvU,YAAcA,EACrBuU,EAAOjK,WAAaA,GACpBiK,EAAOlJ,WAAaA,GACpBkJ,EAAO3L,kBAAoBA,EAC3B2L,EAAOnI,gBAAkBA,GACzBmI,EAAOzB,iBAAmBA,GAC1ByB,EAAOjH,WAAaA,GACpBiH,EAAO3E,eAAiBA,GACxB2E,EAAOiB,IAAMlH,GACbiG,EAAOkB,IAAMvF,GACbqE,EAAOmB,MAAQjF,GACf8D,EAAOoB,MAAQjF,GACf6D,EAAOqB,OAAShF,GAChB2D,EAAOsB,MAAQhF,GACf0D,EAAOhZ,GAAK8K,EACZkO,EAAOjZ,IAAMmL,EACb8N,EAAO9U,KAAOA,EACd8U,EAAOT,MAAQA,GACfS,EAAOX,OAASA,GAChBW,EAAOD,OAASA,GAChBC,EAAOrY,OAASc,EAChBuX,EAAOR,QAAUA,GACjBQ,EAAOD,OAASA,GAChBC,EAAOzW,SAAWA,EAClByW,EAAO9K,QAAUA,EACjB8K,EAAO7M,QAAUA,EACjB6M,EAAO5K,YAAcA,GACrB4K,EAAOpO,SAAWA,EAClBoO,EAAO5U,SAAWA,EAClB4U,EAAOjS,UAAYA,EACnBiS,EAAOlO,kBAAoBA,EAC3BkO,EAAO9N,qBAAuBA,EAC9B8N,EAAOxD,SAAW/T,EAAS,GAAI+T,GAAU,CACvCU,OAAQA,KAEH8C,EA1ET,GA+EiBA,GAAOxD,SCn6FxB,SAAS+E,GAAKC,EAAK9O,GAGjB,IAFA,IAAIhP,EAAS8d,EAAI9d,OAERF,EAAI,EAAGA,EAAIE,IAAUF,EAC5B,GAAIkP,EAAS8O,EAAIhe,GAAIA,GACnB,OAAO,EAIX,OAAO,EAET,SAAS+H,GAAKiW,EAAK9O,GAGjB,IAFA,IAAIhP,EAAS8d,EAAI9d,OAERF,EAAI,EAAGA,EAAIE,IAAUF,EAC5B,GAAIkP,EAAS8O,EAAIhe,GAAIA,GACnB,OAAOge,EAAIhe,GAIf,OAAO,KAeT,SAASie,GAAWC,EAASC,GAC3B,IACE,OAAO,IAAIC,OAAOF,EAAS,KAAKG,KAAKF,GACrC,MAAOzd,GACP,OAAO,MAGX,SAAS4d,KACP,GAAyB,oBAAdhX,YAA8BA,YAAcA,UAAUiX,cAC/D,OAAO,EAGT,IAAIA,EAAgBjX,UAAUiX,cAC1BC,EAASD,EAAcC,QAAUD,EAAcE,OACnD,SAAUD,IAAUA,EAAOte,QAM7B,SAASwe,GAAeP,GACtB,OAAOA,EAAK/M,QAAQ,KAAM,KAE5B,SAASuN,GAAWC,EAASrX,GAC3B,IAAIsX,EAAa,KACbC,EAAU,KAoBd,OAnBAf,GAAKa,GAAS,SAAUlF,GACtB,IAAIqF,EAASd,GAAW,IAAMvE,EAAOrS,KAAO,kCAAmCE,GAE/E,SAAKwX,GAAUrF,EAAOsF,SAItBH,EAAanF,EACboF,EAAUC,EAAO,IAAM,KAEnBrF,EAAOuF,aACTH,EAAUpF,EAAOuF,aACRvF,EAAOwF,cAChBJ,EAvBN,SAAqBI,EAAa3X,GAChC,IAAIwX,EAASd,GAAW,IAAMiB,EAAc,iCAAkC3X,GAC9E,OAAOwX,EAASA,EAAO,GAAK,GAqBdI,CAAYzF,EAAOwF,YAAY1W,cAAejB,IAAcuX,GAGxEA,EAAUJ,GAAeI,IAClB,MAEF,CACLpF,OAAQmF,EACRC,QAASA,GAGb,SAASM,GAAgBR,EAASJ,GAChC,IAAIa,EAAY,CACdL,MAAO,GACPF,QAAS,MAaX,OAXAf,GAAKa,GAAS,SAAUlF,GACtB,IAAIqF,EAASO,GAAUd,EAAQ9E,GAE/B,QAAKqF,IAILM,EAAUL,MAAQtF,EAAOlE,GACzB6J,EAAUP,QAAUpF,EAAOuF,cAAgBF,EAAOD,QACrB,OAAtBO,EAAUP,YAEZO,EAET,SAASC,GAAUd,EAAQ9E,GACzB,OAAO3R,GAAKyW,GAAQ,SAAUld,GAC5B,IAAI0d,EAAQ1d,EAAG0d,MACf,OAAOf,GAAW,GAAKvE,EAAOrS,KAAM2X,EAAMxW,kBAI9C,IAAI+W,GAAkB,CAAC,CACrBlY,KAAM,YACNmO,GAAI,aACH,CACDnO,KAAM,QACNmO,GAAI,SACH,CACDnO,KAAM,kBACNmO,GAAI,QACH,CACDnO,KAAM,6BACNmO,GAAI,KACJ0J,YAAa,oBACZ,CACD7X,KAAM,cACNmO,GAAI,gBACH,CACDnO,KAAM,iBACNmO,GAAI,oBACH,CACDnO,KAAM,UACNmO,GAAI,mBACJ0J,YAAa,WACZ,CACD7X,KAAM,eACNmO,GAAI,UACH,CACDnO,KAAM,gBACNmO,GAAI,WACH,CACDnO,KAAM,UACNmO,GAAI,kBACJ0J,YAAa,WACZ,CACD7X,KAAM,0BACNmO,GAAI,SACJ0J,YAAa,YAGXM,GAAmB,CAAC,CACtBnY,KAAM,0DACNmO,GAAI,SACJ0J,YAAa,UACZ,CACD7X,KAAM,WACNmO,GAAI,UACH,CACDnO,KAAM,QACNmO,GAAI,SACJyJ,aAAc,KACdD,OAAO,IAELS,GAAiB,CAAC,CACpBpY,KAAM,cACNmO,GAAI,SACJ0J,YAAa,uBAEXQ,GAAkB,CAAC,CACrBrY,KAAM,mCACNmO,GAAI,WACH,CACDnO,KAAM,mDACNmO,GAAI,WACH,CAEDnO,KAAM,UACNmO,GAAI,YAEFmK,GAAa,CAAC,CAChBtY,KAAM,gBACNmO,GAAI,iBACH,CACDnO,KAAM,eACNmO,GAAI,SACJyJ,aAAc,OACb,CACD5X,KAAM,aACNmO,GAAI,UACH,CACDnO,KAAM,mBACNmO,GAAI,MACJ0J,YAAa,oBACZ,CACD7X,KAAM,WACNmO,GAAI,OACH,CACDnO,KAAM,UACNmO,GAAI,WACH,CACDnO,KAAM,QACNmO,GAAI,SACH,CACDnO,KAAM,cACNmO,GAAI,UAGN,SAASoK,GAAmBC,GAC1B,IAAItB,EAAgBjX,UAAUiX,cAC1BC,GAAUD,EAAcE,QAAUF,EAAcC,QAAQlY,QACxDwZ,EAAWvB,EAAcwB,SAAU,EACnCC,EAAaxB,EAAO,GACpByB,EAAU,CACZvc,KAAMsc,EAAWhB,MACjBF,QAASkB,EAAWlB,QACpBoB,cAAe,EACfC,QAAQ,EACRC,cAAe,KACfC,UAAU,EACVC,gBAAiB,KACjBC,UAAWnB,GAAgBM,GAAiBlB,GAAQQ,OAElDwB,EAAK,CACP9c,KAAM,UACNob,QAAS,KACToB,cAAe,GAEjBD,EAAQE,QAAUF,EAAQI,UAAYtC,GAAK0B,IAAgB,SAAU/F,GACnE,OAAO4F,GAAUd,EAAQ9E,MAE3B,IAAI+G,EAAgBrB,GAAgBI,GAAkBhB,GAItD,GAHAyB,EAAQI,WAAaI,EAAczB,MACnCiB,EAAQK,gBAAkBG,EAAc3B,SAEnCmB,EAAQI,SAAU,CACrB,IAAIK,EAActB,GAAgBK,GAAgBjB,GAClDyB,EAAQE,SAAWO,EAAY1B,MAC/BiB,EAAQG,cAAgBM,EAAY5B,QAGtC,GAAIe,EAAQ,CACV,IAAIc,EAAad,EAAOe,SAASpY,cAC7BuW,EAAShX,GAAK4X,IAAY,SAAUjG,GACtC,OAAO,IAAI0E,OAAO,GAAK1E,EAAOrS,KAAM,KAAKgX,KAAKsC,MAEhDH,EAAG9c,KAAOqb,EAASA,EAAOvJ,GAAKmL,EAC/BH,EAAG1B,QAAUe,EAAOgB,gBAGtB,IAAIC,EAAe1B,GAAgBG,GAAiBf,GAqBpD,OAnBIsC,EAAa9B,QACfiB,EAAQvc,KAAOod,EAAa9B,MAC5BiB,EAAQnB,QAAUe,EAASA,EAAOkB,cAAgBD,EAAahC,SAGtC,iBAAvBxX,UAAUsZ,SACZJ,EAAG9c,KAAO,UACDuc,EAAQE,SACjBK,EAAG9c,KAAOoc,EAAW,MAAQ,OAGf,QAAZU,EAAG9c,MAAkBuc,EAAQM,UAC/BN,EAAQnB,QAAU,MAGpB0B,EAAG1B,QAAUJ,GAAe8B,EAAG1B,SAC/BmB,EAAQnB,QAAUJ,GAAeuB,EAAQnB,SACzC0B,EAAGN,aAAec,SAASR,EAAG1B,QAAS,IACvCmB,EAAQC,aAAec,SAASf,EAAQnB,QAAS,IAC1C,CACLmB,QAASA,EACTO,GAAIA,EACJV,SAAUA,EACVmB,SAAS,GAIb,SAASC,GAAe3Z,GACtB,IAAI4Z,EAhQN,SAAsBC,GACpB,IAAI7Z,EAAY6Z,EAEhB,QAAyB,IAAd7Z,EAA2B,CACpC,GAAyB,oBAAdD,YAA8BA,UACvC,MAAO,GAGTC,EAAYD,UAAUC,WAAa,GAGrC,OAAOA,EAAUiB,cAqPD6Y,CAAa9Z,GACzBuY,IAAa,QAAQzB,KAAK8C,GAC1BlB,EAAU,CACZvc,KAAM,UACNob,QAAS,KACToB,cAAe,EACfK,UAAW5B,GAAWe,GAAiByB,GAAWzH,OAClD2G,UAAU,EACVC,gBAAiB,KACjBH,QAAQ,EACRC,cAAe,MAEbI,EAAK,CACP9c,KAAM,UACNob,QAAS,KACToB,cAAe,GAGb5e,EAAKqd,GAAWY,GAAiB4B,GACjCG,EAAgBhgB,EAAGoY,OACnB6H,EAAiBjgB,EAAGwd,QAEpBrd,EAAKkd,GAAWgB,GAAYwB,GAC5BK,EAAW/f,EAAGiY,OACd+H,EAAYhgB,EAAGqd,QAEf4C,EAAiB/C,GAAWa,GAAkB2B,GAIlD,GAHAlB,EAAQI,WAAaqB,EAAehI,OACpCuG,EAAQK,gBAAkBoB,EAAe5C,SAEpCmB,EAAQI,SAAU,CACrB,IAAIsB,EAAehD,GAAWc,GAAgB0B,GAC9ClB,EAAQE,SAAWwB,EAAajI,OAChCuG,EAAQG,cAAgBuB,EAAa7C,QAmBvC,OAhBI0C,IACFhB,EAAG9c,KAAO8d,EAAShM,GACnBgL,EAAG1B,QAAU2C,EACbjB,EAAGN,aAAec,SAASS,EAAW,KAGpCH,IACFrB,EAAQvc,KAAO4d,EAAc9L,GAC7ByK,EAAQnB,QAAUyC,EAEdtB,EAAQM,SAAuB,QAAZC,EAAG9c,MAAmC,WAAjBuc,EAAQvc,OAClDuc,EAAQM,SAAU,IAItBN,EAAQC,aAAec,SAASf,EAAQnB,QAAS,IAC1C,CACLmB,QAASA,EACTO,GAAIA,EACJV,SAAUA,EACVmB,SAAS,GAsDb,SAASG,GAAM7Z,GACb,YAAyB,IAAdA,GAA6B+W,KAC/BsB,KAEAsB,GAAe3Z,GAIX;;;;;;;;;;;;;;gFCxWf,SAAS,GAAYnH,GACnB,YAAwB,IAAVA,EAShB,IAySe,GAvSf,WAIE,SAASiC,IAKPd,KAAKoH,QAAU,GACfpH,KAAKe,cAAgB,GAmCvB,IAAIN,EAAUK,EAAUJ,UAuPxB,OArPAD,EAAQO,QAAU,SAAUI,GAK1B,IAJA,IAAIQ,EAAQ5B,KAERkB,EAAS,GAEJC,EAAK,EAAGA,EAAK3B,UAAUb,OAAQwC,IACtCD,EAAOC,EAAK,GAAK3B,UAAU2B,GAG7B,IAAIiB,EAAcpC,KAAKe,cAAcK,IAAc,GAC/Cif,EAAiBje,EAAYzD,OAAS,EAE1C,IAAK0hB,EACH,OAAO,EAGT,IAAIC,EAAcpf,EAAO,IAAM,GAC3Bqf,EAAarf,EAAO6D,MAAM,GAE9B3C,EAAcA,EAAY3C,SAC1B,IAAImB,GAAa,EAEjB0f,EAAY1gB,UAAYwB,EAExBkf,EAAY3f,KAAO,WACjBC,GAAa,GAGf0f,EAAYhf,cAAgBtB,KAC5B,IAAIuT,EAAM,CAAC+M,GASX,OAPIC,EAAW5hB,QAAU,IACvB4U,EAAMA,EAAI9T,OAAO8gB,IAGnBne,EAAYb,SAAQ,SAAUC,GAC5BA,EAAQC,MAAMG,EAAO2R,OAEf3S,GA4BVH,EAAQiB,KAAO,SAAUN,EAAWO,GAClC,IAAIC,EAAQ5B,KAEZ,GAAyB,iBAAdoB,GAA0B,GAAYO,GAAkB,CACjE,IAAIE,EAAYT,EAEhB,IAAK,IAAId,KAAOuB,EACd7B,KAAK0B,KAAKpB,EAAKuB,EAAUvB,IAG3B,OAAON,KACF,GAAyB,iBAAdoB,GAAqD,mBAApBO,EAAgC,CACjF,IAAIG,EAAa,WAGf,IAFA,IAAIC,EAAO,GAEFZ,EAAK,EAAGA,EAAK3B,UAAUb,OAAQwC,IACtCY,EAAKZ,GAAM3B,UAAU2B,GAGvBQ,EAAgBF,MAAMG,EAAOG,GAE7BH,EAAMI,IAAIZ,EAAWU,IAGvB9B,KAAKiC,GAAGb,EAAWU,GAGrB,OAAO9B,MAkBTS,EAAQyB,MAAQ,SAAUd,GACxB,QAASpB,KAAKe,cAAcK,IAsB9BX,EAAQwB,GAAK,SAAUb,EAAWO,GAChC,GAAyB,iBAAdP,GAA0B,GAAYO,GAAkB,CACjE,IAAIE,EAAYT,EAEhB,IAAK,IAAIe,KAAQN,EACf7B,KAAKiC,GAAGE,EAAMN,EAAUM,IAG1B,OAAOnC,KACF,GAAyB,iBAAdoB,GAAqD,mBAApBO,EAAgC,CACjF,IAAIS,EAAcpC,KAAKe,cAAcK,GAEjC,GAAYgB,KACdpC,KAAKe,cAAcK,GAAa,GAChCgB,EAAcpC,KAAKe,cAAcK,IAGnCgB,EAAY/C,KAAKsC,GAGnB,OAAO3B,MAsBTS,EAAQuB,IAAM,SAAUZ,EAAWiB,GACjC,IAAIvC,EAAKC,EAGT,GAAI,GAAYqB,GAEd,OADApB,KAAKe,cAAgB,GACdf,KAIT,GAAI,GAAYqC,GAAkB,CAChC,GAAyB,iBAAdjB,EAET,cADOpB,KAAKe,cAAcK,GACnBpB,KAEP,IAAI6B,EAAYT,EAEhB,IAAK,IAAIe,KAAQN,EACf7B,KAAKgC,IAAIG,EAAMN,EAAUM,IAG3B,OAAOnC,KAKX,IAAIoC,EAAcpC,KAAKe,cAAcK,GAErC,GAAIgB,EAAa,CACf,IAAIE,EAAM,EAEV,IACE,IAAK,IAAIC,EAjSjB,SAAkBnE,GAChB,IAAIC,EAAsB,mBAAXC,QAAyBA,OAAOC,SAC3CC,EAAIH,GAAKD,EAAEC,GACXI,EAAI,EACR,GAAID,EAAG,OAAOA,EAAEE,KAAKN,GACrB,GAAIA,GAAyB,iBAAbA,EAAEO,OAAqB,MAAO,CAC5CC,KAAM,WAEJ,OADIR,GAAKK,GAAKL,EAAEO,SAAQP,OAAI,GACrB,CACLS,MAAOT,GAAKA,EAAEK,KACdK,MAAOV,KAIb,MAAM,IAAIW,UAAUV,EAAI,0BAA4B,mCAmRrB,CAAS+D,GAAcI,EAAkBD,EAAc3D,QAAS4D,EAAgB1D,KAAM0D,EAAkBD,EAAc3D,OAAQ,CAGrJ,GAFsB4D,EAAgB3D,QAEdwD,EAAiB,CACvCD,EAAYK,OAAOH,EAAK,GACxB,MAGFA,KAEF,MAAO/B,GACPT,EAAM,CACJR,MAAOiB,GAET,QACA,IACMiC,IAAoBA,EAAgB1D,OAASiB,EAAKwC,EAAc/B,SAAST,EAAGrB,KAAK6D,GACrF,QACA,GAAIzC,EAAK,MAAMA,EAAIR,QAKzB,OAAOU,MAaTc,EAAU4B,QAAU,QACb5B,EApST,GC5BI0f,GAAgB,SAAUC,EAAG/P,GAS/B,OARA8P,GAAgBrgB,OAAOugB,gBAAkB,CACvCrd,UAAW,cACA+M,OAAS,SAAUqQ,EAAG/P,GACjC+P,EAAEpd,UAAYqN,IACX,SAAU+P,EAAG/P,GAChB,IAAK,IAAIiQ,KAAKjQ,EAAOA,EAAE3N,eAAe4d,KAAIF,EAAEE,GAAKjQ,EAAEiQ,MAGhCF,EAAG/P,IAG1B,SAASkQ,GAAUH,EAAG/P,GAGpB,SAASmQ,IACP7gB,KAAKoD,YAAcqd,EAHrBD,GAAcC,EAAG/P,GAMjB+P,EAAE/f,UAAkB,OAANgQ,EAAavQ,OAAOgD,OAAOuN,IAAMmQ,EAAGngB,UAAYgQ,EAAEhQ,UAAW,IAAImgB,GAEjF,IAqDI,GArDAC,GAAW,WAWb,OAVAA,GAAW3gB,OAAOyC,QAAU,SAAkB+P,GAC5C,IAAK,IAAItU,EAAGI,EAAI,EAAGQ,EAAIO,UAAUb,OAAQF,EAAIQ,EAAGR,IAG9C,IAAK,IAAIkiB,KAFTtiB,EAAImB,UAAUf,GAEO0B,OAAOO,UAAUqC,eAAerE,KAAKL,EAAGsiB,KAAIhO,EAAEgO,GAAKtiB,EAAEsiB,IAG5E,OAAOhO,IAGOlR,MAAMzB,KAAMR,YAG9B,SAASuhB,GAAkBC,EAASC,EAAOC,EAAUC,GACnD,IAAIC,EAAYJ,EACZK,EAAc,CAACH,EAAS,GAAKD,EAAM,GAAKE,EAASF,EAAM,GAAKE,EAAO,GAAKF,EAAM,GAAIC,EAAS,GAAKD,EAAM,GAAKE,EAASF,EAAM,GAAKE,EAAO,GAAKF,EAAM,IAGrJ,OAFAG,EAAYhd,KAAKkd,IAAID,EAAY,GAAID,GACrCA,EAAYhd,KAAKmd,IAAIF,EAAY,GAAID,GAIvC,SAASI,GAAUC,EAAKR,GACtB,OAAOQ,EAAMR,EAAM,IAAMQ,EAAMR,EAAM,GAOvC,SAASS,GAAeV,EAASC,EAAOC,GACtC,OAAOA,EAAS,IAAMF,EAAUC,EAAM,IAAMC,EAAS,IAAMF,EAAUC,EAAM,GAE7E,SAASU,GAAiBF,EAAKR,EAAOC,GACpC,IAAIU,EAAQH,EACRF,EAAMN,EAAM,GACZK,EAAML,EAAM,GACZtiB,EAAS2iB,EAAMC,EAYnB,OAVIL,EAAS,IAAMO,EAAMH,IAEvBM,GAASA,EAAQN,GAAO3iB,EAAS4iB,GAG/BL,EAAS,IAAMO,EAAMF,IAEvBK,GAASA,EAAQL,GAAO5iB,EAAS2iB,GAG5BM,EAiBT,SAAS,GAAQC,GAKf,IAFA,IAAIC,EAAK,GAEArjB,EAAI,EAAGsjB,EAAMF,EAAMljB,OAAQF,EAAIsjB,EAAKtjB,IAC3CqjB,EAAGziB,KAAKwiB,EAAMpjB,IAGhB,OAAOqjB,EAET,SAASE,GAAEC,EAAOC,GAKhB,IAAIJ,EAEJ,QANc,IAAVI,IACFA,GAAQ,GAKW,iBAAVD,EAAoB,CAK7B,GAFYA,EAAME,MAAM,yBAEb,CAET,IAAIC,EAAQpe,SAASE,cAAc,OACnCke,EAAMC,UAAYJ,EAClBH,EAAK,GAAQM,EAAME,iBAGnBR,EAAK,GAAQ9d,SAASue,iBAAiBN,IAGpCC,IACHJ,EAAKA,EAAGnjB,QAAU,EAAImjB,EAAG,QAAK3c,QAEvB8c,IAAU,GAEnBH,EAAKG,GACIA,EAAMO,UAAgC,IAAnBP,EAAMQ,UAAqC,IAAnBR,EAAMQ,SAGjD,WAAY,IAAOR,aAAiBS,QAAUT,EAAM7e,YAAY1C,UAAUiiB,OAEnFb,EAAKI,EAAQD,EAAM9R,UAAY8R,EAAMpO,IAAI,GAChCzD,MAAMqD,QAAQwO,KACvBH,EAAKG,EAAMW,KAAI,SAAU5W,GACvB,OAAOgW,GAAEhW,MAGNkW,IACHJ,EAAKA,EAAGnjB,QAAU,EAAImjB,EAAG,QAAK3c,IAVhC2c,EAAKG,EAcP,OAAOH,EAET,IAAIe,IAlEF,GAFoB,oBAAX7d,OAEH,CACJe,UAAW,CACTC,UAAW,KAIThB,QA4DM8d,uBAAyB,GAAIC,4BACvCC,GAAM,GAAIC,sBAAwB,GAAIC,2BAE1C,GAAIL,KAAQG,GAAK,CACf,IAAIG,GAAY,GACZC,GAAWP,GAEfA,GAAM,SAAUlV,GAOd,IAAIrN,EAAM8iB,IANV,SAAsBC,GAChBF,GAAU7iB,IACZqN,EAAS0V,MAMb,OADAF,GAAU7iB,IAAO,EACVA,GAGT0iB,GAAM,SAAU1iB,UACP6iB,GAAU7iB,SAERuiB,IAAOG,KAClBH,GAAM,SAAUlV,GACd,OAAO,GAAI6E,YAAW,WACpB7E,EAAS,GAAI2V,aAAe,GAAIA,YAAYhf,KAAO,GAAIgf,YAAYhf,QAAS,IAAIC,MAAOgf,aACtF,KAGLP,GAAM,GAAI5M,cAsBZ,SAASwM,GAAIne,EAAKkJ,GAChB,IAAI6V,EAAa,GAEjB,IAAK,IAAIC,KAAKhf,EACZgf,IAAMD,EAAWC,GAAK9V,EAASlJ,EAAIgf,GAAIA,IAGzC,OAAOD,EAET,SAAS/R,GAAOhN,EAAKkJ,GACnB,IAAI+V,EAAW,GAEf,IAAK,IAAID,KAAKhf,EACZgf,GAAK9V,EAASlJ,EAAIgf,GAAIA,KAAOC,EAASD,GAAKhf,EAAIgf,IAGjD,OAAOC,EAET,SAASC,GAAMlf,EAAKkJ,GAClB,IAAK,IAAI8V,KAAKhf,EACZ,GAAIgf,IAAM9V,EAASlJ,EAAIgf,GAAIA,GACzB,OAAO,EAIX,OAAO,EAET,SAASG,GAAM/gB,EAAQ8X,GACrB,OAAOgJ,GAAM9gB,GAAQ,SAAUmJ,EAAGyX,GAChC,OAAOzX,IAAM2O,EAAK8I,MAGtB,IAAII,GAAe,GACnB,SAASC,GAAYC,EAAKC,GAgD1B,IAAsBhY,EAChB2U,EA3CJ,OAJKkD,GAAaG,KAChBH,GAAaG,IA8CXrD,GADgB3U,EA7CqBgY,GA8C7B,EAAI5f,KAAK6f,IAAI,GAAIC,GAAgBlY,IAAM,EAC5C,SAAU/M,GACf,OAAU,IAAN+M,EACK,EAGF5H,KAAKD,MAAMC,KAAKD,MAAMlF,EAAI+M,GAAKA,EAAI2U,GAAKA,KAjD1CkD,GAAaG,GAAWD,GAEjC,SAASI,GAAaJ,EAAKC,GACzB,IAAKD,IAAQC,EACX,OAAOD,EAGT,IAAIK,EAAgC,iBAAdJ,EACtB,OAAOpB,GAAImB,GAAK,SAAUllB,EAAOyB,GAC/B,OAAOwjB,GAAYjlB,EAAOulB,EAAWJ,EAAYA,EAAU1jB,OAG/D,SAAS4jB,GAAgBze,GACvB,IAAK4e,SAAS5e,GACZ,OAAO,EAGT,IAAIuG,EAAIvG,EAAM,GAEd,GAAIuG,EAAEvF,QAAQ,MAAQ,EAAG,CAMvB,IAHA,IAAIka,EAAI,EACJxhB,EAAI,EAEDiF,KAAKD,MAAMsB,EAAMtG,GAAKA,IAAMsG,GACjCtG,GAAK,GACLwhB,IAGF,OAAOA,EAKT,OAAO3U,EAAEvF,QAAQ,MAAQ,EAAIuF,EAAErN,OAASqN,EAAEvF,QAAQ,KAAO,EAAI,EAkB/D,SAAS6d,GAAOzlB,EAAO0iB,EAAKD,GAC1B,OAAOld,KAAKkd,IAAIld,KAAKmd,IAAI1iB,EAAOyiB,GAAMC,GAGxC,IAAIgD,GAEJ,WACE,SAASA,EAAiBxkB,GACxB,IAAIqH,EAAUrH,EAAGqH,QACbod,EAAMzkB,EAAGykB,IACTC,EAAK1kB,EAAG0kB,GACRC,EAAM3kB,EAAG2kB,IACb1kB,KAAKoH,QAAUA,EACfpH,KAAKwkB,IAAMA,EACXxkB,KAAKykB,GAAKA,EACVzkB,KAAK0kB,IAAMA,EACX1kB,KAAK2kB,aAAe3kB,KAAK2kB,aAAaC,KAAK5kB,MAG7C,IAAIS,EAAU8jB,EAAiB7jB,UA2T/B,OAzTAD,EAAQokB,YAAc,SAAUC,EAAS9D,EAAS+D,GAChD,IAEIC,EAFApjB,EAAQ5B,KAIZ,QAA4B,IAAjB+kB,EACTC,EAAWD,MACN,CACL,IAAIE,EAAcrC,GAAI5B,GAAS,SAAUhV,EAAGyX,GAC1C,OA/QR,SAAqB/a,EAAUwc,GAC7B,IAAIF,EAAW5gB,KAAK8F,KAAKxB,EAAWwc,EAAe,GAEnD,OAAOF,EAAW,IAAM,EAAIA,EA4QfH,CAAYzgB,KAAKC,IAAI2H,EAAI8Y,EAAQrB,IAAK7hB,EAAMwF,QAAQ8d,iBAE7DF,EAAW7kB,OAAOC,KAAK6kB,GAAaE,QAAO,SAAU7D,EAAKtV,GACxD,OAAO5H,KAAKkd,IAAIA,EAAK2D,EAAYjZ,OAC/BoZ,KAGN,OAAOd,GAAOU,EAAUhlB,KAAKoH,QAAQie,gBAAiBrlB,KAAKoH,QAAQke,kBAGrE7kB,EAAQ8kB,qBAAuB,SAAU9D,EAAKuD,EAAUQ,GACtD,IAAIV,EAAU9kB,KAAK0kB,IAAI7Q,MACnBmN,EAAUS,EACVzO,EAAawS,GAAUA,EAAOvkB,OAAS,KAC3C,MAAO,CACL6jB,QAASA,EACT9D,QAASA,EACTgE,SAAUV,GAAOU,EAAUhlB,KAAKoH,QAAQie,gBAAiBrlB,KAAKoH,QAAQke,iBACtEG,MAAOzlB,KAAK0kB,IAAIgB,SAASZ,EAAS9D,GAClChO,WAAYA,EACZjL,MAAOyd,GAAUA,EAAOzd,OAAS,KACjC4d,YAAa3S,EACblU,KAAMkB,KAAK2kB,eAIflkB,EAAQmlB,KAAO,SAAUC,EAAML,GAC7B,GAAIxlB,KAAK8lB,eAAiBD,EAAKlnB,OAAQ,CACrC,IAAIonB,EAAW/lB,KAAK0kB,IAAI7Q,IAAIgS,GACxBpE,EAAMzhB,KAAK0kB,IAAI9B,IAAImD,GAAU,SAAU/Z,EAAGga,GAC5C,OAAOrE,GAAiB3V,EAAGga,EAAI/E,MAAO+E,EAAI9E,aAGvCyC,GAAMlC,GAAK,SAAUzV,EAAGyX,GAC3B,OAAOsC,EAAStC,KAAOzX,MAEvBhM,KAAKykB,GAAGwB,cAAcxE,GAAK,EAAOsE,EAAUP,IAAUA,GAGxDxlB,KAAK8lB,cAAgB,KACrB9lB,KAAKkmB,OArKmB5lB,EAqKUN,KAAKkmB,KApK3ClD,GAAI1iB,IAqKAN,KAAKkmB,KAAO,KACZlmB,KAAKykB,GAAG0B,uBAAuBX,IAAUA,EAAOvkB,QAvKtD,IAA8BX,GA2K5BG,EAAQ2lB,aAAe,WACrB,OAAIpmB,KAAK8lB,eAAiB9lB,KAAK8lB,cAAc/d,OAAS/H,KAAK8lB,cAAc9S,WAChE,CACLjL,MAAO/H,KAAK8lB,cAAc/d,MAC1B9G,MAAOjB,KAAK8lB,cAAc9S,YAGrB,MAIXvS,EAAQ4lB,QAAU,SAAUb,GAC1B,IAAI/D,EAAMzhB,KAAK0kB,IAAI7Q,MACfmN,EAAUhhB,KAAK0kB,IAAI9B,IAAInB,GAAK,SAAUzV,EAAGga,GAC3C,OAAO5hB,KAAKmd,IAAIyE,EAAI/E,MAAM,GAAI7c,KAAKkd,IAAI0E,EAAI/E,MAAM,GAAIjV,OAEvDhM,KAAKsmB,UAAUtF,EAAShhB,KAAK6kB,YAAYpD,EAAKT,GAAUwE,IAG1D/kB,EAAQkkB,aAAe,WACrB,IAAI4B,EAAcvmB,KAAKomB,eACvBpmB,KAAK8lB,cAAgB,KAErB,IAAIU,EAAkBxmB,KAAK0kB,IAAIjT,OAAOzR,KAAK0kB,IAAI7Q,OAAO,SAAU7H,EAAGga,GACjE,OAAOtE,GAAe1V,EAAGga,EAAI/E,MAAO+E,EAAI9E,aAE1C/gB,OAAOC,KAAKomB,GAAiB7nB,OAAS,GAAKqB,KAAKymB,MAAMzmB,KAAK0kB,IAAI9B,IAAI4D,GAAiB,SAAUxa,EAAGga,GAC/F,OAAOrE,GAAiB3V,EAAGga,EAAI/E,MAAO+E,EAAI9E,cAE5ClhB,KAAKwkB,IAAIkC,cAAa,GACtB1mB,KAAKykB,GAAG0B,sBAAsBI,GAE1BvmB,KAAK0kB,IAAIlD,YACXxhB,KAAKqmB,QAAQE,GAEbvmB,KAAK2mB,SAASJ,IAIlB9lB,EAAQkmB,OAAS,SAAUhB,GACzB3lB,KAAK8lB,cAAgB,KACrB9lB,KAAKwkB,IAAIkC,cAAa,GACtB1mB,KAAKykB,GAAGmC,cAAcjB,IAGxBllB,EAAQomB,YAAc,SAAU5E,EAAO6E,GACrC,GAAI7E,EAAM+C,SAAU,CAClBhlB,KAAK8lB,cAAgBhF,GAAS,GAAImB,GAClC,IAAI8E,EAAS/mB,KAAK8lB,cACdkB,EAAShnB,KACTinB,EAAYF,EAAO/F,QACnBkG,EAAYH,EAAOjC,QACnBqC,EAAkB,EAClBC,EAAexE,GAAIsE,GAAW,SAAUroB,EAAOyB,GACjD,OAAOzB,GAASooB,EAAU3mB,GAAO,GAAK,KAEpC+mB,EAAwBzE,GAAIqE,GAAW,SAAUjb,GACnD,OAAOA,KAELsb,GAAa,IAAI/iB,MAAOgf,UAC5BwD,EAAOQ,UAAYD,EAEnB,SAAUE,IACRR,EAAOd,KAAO,KACd,IAAIuB,GAAc,IAAIljB,MAAOgf,UACzBmE,GAASD,EAAcV,EAAOQ,WAAatF,EAAM+C,SACjD2C,EAAYX,EAAOY,OAAOF,GAC1B9F,EAAQoF,EAAOtC,IAAI9B,IAAIsE,GAAW,SAAUzF,EAAKra,EAAS9G,GAC5D,IAAIunB,EAAUH,GAAS,EAAIT,EAAU3mB,GAAOmhB,EAAMsF,EAAOtB,MAAMnlB,IAAQqnB,EAAYR,GAI/EW,EAAgBnG,GAAiBkG,EAASzgB,EAAQ6Z,MAAO7Z,EAAQ8Z,UAErE,GAAI2G,IAAYC,EAAe,CAE7B,IAAIC,EAAcX,EAAa9mB,IAAQ8G,EAAQ6Z,MAAM,GAAK7Z,EAAQ6Z,MAAM,IACxEgG,EAAU3mB,IAAQynB,EAClBb,EAAU5mB,IAAQynB,EAGpB,OAAOD,KAELlnB,GAAcomB,EAAOvC,GAAGwB,cAAcrE,GAAO,EAAOsF,GAKxD,GAJAA,EAAYtF,EACZ0F,EAAaG,EACbN,EAAkBQ,EAEdA,GAAa,EAQf,OALK/D,GAFLqD,EAAYD,EAAOgB,YAAYf,EAAWI,GAEpBL,EAAOtC,IAAI7Q,IAAI1T,OAAOC,KAAK6mB,MAC/CD,EAAOvC,GAAGwB,cAAcgB,GAAW,EAAMC,QAG3CJ,IAESlmB,EACTomB,EAAOL,QAAO,GAGdK,EAAOd,KAzRRrD,GAyRqC2E,GAvCxC,QA2CAxnB,KAAKykB,GAAGwB,cAAchE,EAAMjB,SAAS,GACrC8F,KAgBJrmB,EAAQunB,YAAc,SAAUhH,EAASiH,GACvC,IAAIrmB,EAAQ5B,KAgBZ,OAZe4iB,GAAI5B,GAAS,SAAUniB,EAAOyB,GAC3C,OAAIzB,GAASopB,EAAoB3nB,GAFjB,MAEuCzB,GAASopB,EAAoB3nB,GAFpE,KAIP2nB,EAAoB3nB,GAKdwjB,GAAYjlB,EAFT+C,EAAMsmB,aAAarpB,EAAOyB,QAShDG,EAAQynB,aAAe,SAAUziB,EAAKnF,GACpC,IA3OgBrB,EA2OZ+kB,EAAYhkB,KAAKoH,QAAQjD,MAEzBgkB,EAAe,KAGnB,IAAKnE,EAAW,CAEd,IAAI5c,EAAUpH,KAAK0kB,IAAI0D,eAAe9nB,GAlPxBrB,EAmPYmF,KAAKkd,IAAI4C,GAAgB9c,EAAQ6Z,MAAM,IAAKiD,GAAgB9c,EAAQ6Z,MAAM,IAAKiD,GAAgBze,IAAzH0iB,EAhPG,EAAI/jB,KAAK6f,IAAI,GAAIhlB,GAmPtB,OAAOkpB,GAAgBnE,GAGzBvjB,EAAQ4nB,gBAAkB,SAAUpG,GAClC,IAAIqG,EAAWrG,EAAMwE,QAGrB,OAFA6B,EAAStH,QAAUhhB,KAAK0kB,IAAI7Q,IAAIyU,EAAStH,SACzCsH,EAAStD,SAAWV,GAAOgE,EAAStD,SAAUhlB,KAAKoH,QAAQie,gBAAiBrlB,KAAKoH,QAAQke,iBAClFgD,GAGT7nB,EAAQ6lB,UAAY,SAAUtF,EAASgE,EAAUQ,GAC/C,IAAI5jB,EAAQ5B,KAERiiB,EAAQjiB,KAAKulB,qBAAqBvE,EAASgE,EAAUQ,GAErDV,EAAUhE,GAAS,GAAImB,EAAM6C,SAE7ByD,EAAavoB,KAAKykB,GAAG+D,sBAAsBvG,GAE3CqG,EAAWtoB,KAAKqoB,gBAAgBpG,GAQpC,IANKsG,GAAcvoB,KAAK0kB,IAAIf,MAAM2E,EAAStH,SAAS,SAAUhV,EAAGga,GAC/D,OAAOtE,GAAe1V,EAAGga,EAAI/E,MAAO+E,EAAI9E,cAExC9G,QAAQC,KAAK,iEAGXkO,IAAe3E,GAAM0E,EAAStH,QAAS8D,GAAU,CACnD,IAAI9R,EAAawS,GAAUA,EAAOvkB,OAAS,KAC3CjB,KAAK6mB,YAAY,CACf/B,QAASA,EACT9D,QAASsH,EAAStH,QAClBgE,SAAUsD,EAAStD,SACnBS,MAAOzlB,KAAK0kB,IAAIgB,SAASZ,EAASwD,EAAStH,SAC3C2E,YAAa3S,EACbA,WAAYA,EACZjL,MAAOyd,GAAUA,EAAOzd,OAAS,OAChC,WACD,OAAOnG,EAAM+iB,oBAKnBlkB,EAAQmnB,OAAS,SAAUjH,GACzB,OAAOA,EAAI,EAAI,EAAI3gB,KAAKoH,QAAQwgB,OAAOjH,IAGzClgB,EAAQgmB,MAAQ,SAAUhF,EAAKuD,QACZ,IAAbA,IACFA,EAAW,GAGb,IAAIa,EAAO1lB,OAAOC,KAAKqhB,GACvBzhB,KAAK4lB,KAAKC,GACV,IAAI4C,EAASzoB,KAAK0kB,IAAI7Q,IAAIgS,GAE1B,GAAIjC,GAAMnC,EAAKgH,GACb,OAAOzoB,KAGTA,KAAKwkB,IAAIkC,cAAa,GACtB,IAAIgC,EAAWjX,GAAOgQ,GAAK,SAAUzV,EAAGyX,GACtC,OAAOgF,EAAOhF,KAAOzX,KAGvB,OAAK7L,OAAOC,KAAKsoB,GAAU/pB,QAevBilB,GAXJ8E,EAAW1oB,KAAK0kB,IAAI9B,IAAI8F,GAAU,SAAU1c,EAAGga,GAC7C,IAAI/E,EAAQ+E,EAAI/E,MACZC,EAAW8E,EAAI9E,SAEnB,OAAIA,IAAaA,EAAS,IAAMA,EAAS,IAChClV,EAEA+U,GAAkB/U,EAAGiV,EAAOC,MAInBuH,KAIhBzD,EAAW,EACbhlB,KAAKsmB,UAAUoC,EAAU1D,IAEzBhlB,KAAKykB,GAAGwB,cAAcyC,GACtB1oB,KAAK2mB,QAAO,KAPL3mB,MAfAA,MA4BXS,EAAQkoB,MAAQ,SAAUlH,EAAKuD,GAK7B,YAJiB,IAAbA,IACFA,EAAW,GAGNhlB,KAAKymB,MAAM7D,GAAI5iB,KAAK0kB,IAAI7Q,IAAI1T,OAAOC,KAAKqhB,KAAO,SAAUzV,EAAGyX,GACjE,OAAOzX,EAAIyV,EAAIgC,MACbuB,IAGCT,EAxUT,GA2UIqE,GAEJ,WACE,SAASA,EAAa/C,GACpB7lB,KAAK6lB,KAAOA,EA8Bd,IAAIplB,EAAUmoB,EAAaloB,UAsT3B,OApTAD,EAAQooB,YAAc,SAAUpH,EAAK+D,GACnC,IAAIsD,EAAW9oB,KAAK+oB,YAAYtH,GAAKqH,SACrC9oB,KAAK6lB,KAAK7kB,QAAQ,OAAQ,CACxBygB,IAAKqH,EACL/gB,MAAOyd,EAAOzd,OAAS,KACvBiL,WAAYwS,EAAOvkB,OAAS,KAC5B0kB,WAAW,KA8EfllB,EAAQuoB,eAAiB,SAAU/G,GACjC,IAAIliB,EAAKC,KAAK+oB,YAAY9G,EAAMjB,QAASiB,EAAM6C,SAC3CgE,EAAW/oB,EAAG+oB,SACdG,EAAYlpB,EAAGkpB,UAEnBhH,EAAMjB,QAAU8H,EAChB7G,EAAM6C,QAAUmE,EAChBhH,EAAMwE,MAAQzmB,KAAKkpB,mBAAmBjH,EAAMjB,QAASiB,EAAM+C,UAC3DhlB,KAAK6lB,KAAK7kB,QAAQ,UAAWihB,IAwC/BxhB,EAAQwlB,cAAgB,SAAUxE,EAAK0H,EAAYrE,EAASU,EAAQ4D,QAClD,IAAZA,IACFA,GAAU,GAGZ,IAAIC,EAAKrpB,KAAKqpB,GACV3E,EAAM2E,EAAG3E,IACT4E,EAAYD,EAAGjD,eAEfrmB,EAAKC,KAAK+oB,YAAYtH,EAAKqD,GAC3BgE,EAAW/oB,EAAG+oB,SACdG,EAAYlpB,EAAGkpB,UAEfM,EAAS7E,EAAI6E,OAAOT,EAAUG,GAC9BjW,EAAawS,GAAUA,EAAOvkB,OAASqoB,GAAaA,EAAUroB,OAAS,KACvEghB,EAAQ,CACVR,IAAK8H,EAAO9H,IACZgE,MAAO8D,EAAO9D,MACd2D,QAASA,EACTpW,WAAYA,EACZ2S,YAAa3S,EACbjL,MAAOyd,GAAUA,EAAOzd,OAASuhB,GAAaA,EAAUvhB,OAAS,KACjEnB,IAAKoM,EAAahT,KAAKkpB,mBAAmBK,EAAO9H,KAAO,cAEtDjE,EAASxd,KAAK6lB,KAAK7kB,QAAQ,SAAUihB,GAEzC,OADAjP,GAAc0R,EAAI9d,IAAIqb,EAAMrb,MAAe,SACpC4W,GAwCT/c,EAAQ+nB,sBAAwB,SAAUvG,GACxC,IAAIliB,EAAKC,KAAK+oB,YAAY9G,EAAMjB,QAASiB,EAAM6C,SAC3CgE,EAAW/oB,EAAG+oB,SACdG,EAAYlpB,EAAGkpB,UAKnB,OAHAhH,EAAMjB,QAAU8H,EAChB7G,EAAM6C,QAAUmE,EAChBhH,EAAMwE,MAAQzmB,KAAKkpB,mBAAmBjH,EAAMjB,QAASiB,EAAM+C,UACpDhlB,KAAK6lB,KAAK7kB,QAAQ,iBAAkBihB,IAwB7CxhB,EAAQ0lB,oBAAsB,SAAUR,QACpB,IAAdA,IACFA,GAAY,GAGd3lB,KAAK6lB,KAAK7kB,QAAQ,eAAgB,CAChC2kB,UAAWA,KAyBfllB,EAAQmmB,cAAgB,SAAUjB,QACd,IAAdA,IACFA,GAAY,GAGd3lB,KAAK6lB,KAAK7kB,QAAQ,SAAU,CAC1B2kB,UAAWA,KAIfllB,EAAQyoB,mBAAqB,SAAUzH,EAAKuD,QACzB,IAAbA,IACFA,EAAW,GAIb,IAAIwE,EAAc,CAChBxI,QAASF,GAAS,GAAIW,GACtBuD,SAAUA,GAEZ,OAAO,SAAUpD,EAAO6H,GAGtB,OAFA7H,IAAU4H,EAAYxI,QAAUF,GAAS,GAAIc,SAC5Bzc,IAAjBskB,IAA+BD,EAAYxE,SAAWyE,GAC/CD,IAIX/oB,EAAQipB,oBAAsB,SAAUL,GACtCrpB,KAAKqpB,GAAKA,GAGZ5oB,EAAQ0N,QAAU,WAChBnO,KAAK6lB,KAAK7jB,OAGZvB,EAAQsoB,YAAc,SAAUtH,EAAKqD,GAEnC,IAAId,EAAYhkB,KAAK6lB,KAAKze,QAAQjD,MAIlC,MAAO,CACL2kB,SAAU3E,GAAa1C,EAAKuC,GAC5BiF,UAAW9E,GAAaW,EAASd,KAI9B4E,EAtVT,GAyVIe,GAEJ,WACE,SAASA,EAAiBviB,GACxBpH,KAAKoH,QAAUA,EACfpH,KAAK4pB,YAAa,EAGpB,IAAInpB,EAAUkpB,EAAiBjpB,UAe/B,OAbAD,EAAQopB,eAAiB,WAEvB,OAAO7pB,KAAKoH,QAAQ0iB,eAAiB9pB,KAAK4pB,YAG5CnpB,EAAQspB,cAAgB,WACtB,OAAQ/pB,KAAKoH,QAAQ0iB,eAAiB9pB,KAAK4pB,YAG7CnpB,EAAQimB,aAAe,SAAUte,IAC9BpI,KAAKoH,QAAQ0iB,gBAAkB9pB,KAAK4pB,WAAaxhB,IAG7CuhB,EArBT,GAwBIK,GAEJ,WACE,SAASA,EAAYC,EAAM7iB,GACzB,IAAIxF,EAAQ5B,KAEZA,KAAKiqB,KAAOA,EACZjqB,KAAKoH,QAAUA,EAEfpH,KAAKkqB,qBAELlqB,KAAKmqB,KAAOhqB,OAAOC,KAAKJ,KAAKiqB,MAAM9E,QAAO,SAAUiF,EAAKpe,GAEvD,OADAoe,EAAIpe,GAAKpK,EAAMqoB,KAAKje,GAAGiV,MAAM,GACtBmJ,IACN,IAQL,IAAI3pB,EAAUupB,EAAYtpB,UAqG1B,OAnGAD,EAAQypB,mBAAqB,WAC3B,IAAItoB,EAAQ5B,KAEZG,OAAOC,KAAKJ,KAAKiqB,MAAM1oB,SAAQ,SAAU0oB,GACvCroB,EAAMqoB,KAAKA,GAAQnJ,GAAS,CAC1BG,MAAO,CAAC,EAAG,KACXE,OAAQ,CAAC,EAAG,GACZD,SAAU,EAAC,GAAO,IACjBtf,EAAMqoB,KAAKA,IACd,CAAC,SAAU,YAAY1oB,SAAQ,SAAUyK,GACvC,IAAIqe,EAAazoB,EAAMqoB,KACnB3pB,EAAM+pB,EAAWJ,GAAMje,GAEvB,wBAAwBlG,YAAYxF,KACtC+pB,EAAWJ,GAAMje,GAAK,CAAC1L,EAAKA,WAMpCG,EAAQilB,SAAW,SAAUZ,EAAS9D,GACpC,IAAIsJ,EAActqB,KAAK6T,IAAIiR,GAC3B,OAAOlC,GAAI5iB,KAAK6T,IAAImN,IAAU,SAAUhV,EAAGyX,GACzC,OAAOzX,EAAIse,EAAY7G,OAI3BhjB,EAAQoT,IAAM,SAAUgS,GACtB,IAAIjkB,EAAQ5B,KAEZ,OAAI6lB,GAAQzV,MAAMqD,QAAQoS,GACjBA,EAAKV,QAAO,SAAUiF,EAAKpe,GAKhC,OAJIA,GAAKA,KAAKpK,EAAMuoB,OAClBC,EAAIpe,GAAKpK,EAAMuoB,KAAKne,IAGfoe,IACN,IAEItJ,GAASA,GAAS,GAAI9gB,KAAKmqB,MAAOtE,GAAQ,KAIrDplB,EAAQ8oB,OAAS,SAAU9H,EAAKqD,QACd,IAAZA,IACFA,EAAU9kB,KAAKmqB,MAGjB,IAAI1E,EAAQ7C,GAAI5iB,KAAKmqB,MAAM,SAAUne,EAAG1L,GACtC,OAAOA,KAAOmhB,GAAOnhB,KAAOwkB,EAAUrD,EAAInhB,GAAOwkB,EAAQxkB,GAAO,KAKlE,OAHAN,KAAK4G,IAAI5G,KAAK4iB,IAAInB,GAAK,SAAUzV,EAAGga,GAClC,OAAOA,EAAMrE,GAAiB3V,EAAGga,EAAI/E,MAAO+E,EAAI9E,UAAY,MAEvD,CACLO,IAAKX,GAAS,GAAI9gB,KAAKmqB,MACvB1E,MAAOA,IAIXhlB,EAAQmG,IAAM,SAAU6a,GACtB,IAAK,IAAIgC,KAAKhC,EACRgC,GAAKA,KAAKzjB,KAAKmqB,OACjBnqB,KAAKmqB,KAAK1G,GAAKhC,EAAIgC,KAKzBhjB,EAAQkjB,MAAQ,SAAUlC,EAAK9T,GAC7B,IAAI4c,EAAcvqB,KAAKiqB,KACvB,OAAOtG,GAAMlC,GAAK,SAAU5iB,EAAOyB,GACjC,OAAOqN,EAAS9O,EAAO0rB,EAAYjqB,GAAMA,OAI7CG,EAAQgR,OAAS,SAAUgQ,EAAK9T,GAC9B,IAAI4c,EAAcvqB,KAAKiqB,KACvB,OAAOxY,GAAOgQ,GAAK,SAAU5iB,EAAOyB,GAClC,OAAOqN,EAAS9O,EAAO0rB,EAAYjqB,GAAMA,OAI7CG,EAAQmiB,IAAM,SAAUnB,EAAK9T,GAC3B,IAAI4c,EAAcvqB,KAAKiqB,KACvB,OAAOrH,GAAInB,GAAK,SAAU5iB,EAAOyB,GAC/B,OAAOqN,EAAS9O,EAAO0rB,EAAYjqB,GAAMA,OAI7CG,EAAQ+gB,UAAY,SAAUqE,GAC5B,OAAQ7lB,KAAK2jB,MAAMkC,EAAO7lB,KAAK6T,IAAIgS,GAAQ7lB,KAAKmqB,MAAM,SAAUne,EAAGga,GACjE,OAAQxE,GAAUxV,EAAGga,EAAI/E,WAI7BxgB,EAAQ2nB,eAAiB,SAAU9nB,GACjC,OAAON,KAAKiqB,KAAK3pB,IAGZ0pB,EAzHT,GA4HIQ,GAEJ,WACE,SAASA,EAAczqB,GACrB,IAAIqH,EAAUrH,EAAGqH,QACbod,EAAMzkB,EAAGykB,IACTC,EAAK1kB,EAAG0kB,GACRC,EAAM3kB,EAAG2kB,IACT2E,EAAKtpB,EAAGspB,GACZrpB,KAAKwhB,WAAY,EACjBxhB,KAAKyqB,aAAe,KACpBzqB,KAAK0qB,WAAY,EACjB1qB,KAAKoH,QAAUA,EACfpH,KAAKwkB,IAAMA,EACXxkB,KAAKykB,GAAKA,EACVzkB,KAAK0kB,IAAMA,EACX1kB,KAAKqpB,GAAKA,EAIZ,IAAI5oB,EAAU+pB,EAAc9pB,UAkJ5B,OAhJAD,EAAQkqB,UAAY,SAAUlJ,GAC5B,IAAI7f,EAAQ5B,KAEZ,GAAIA,KAAKwhB,UACP,OAAOxhB,KAAK0kB,IAAI9B,IAAInB,GAAK,SAAUzV,EAAGga,GACpC,IAAI4E,EAAK5E,EAAI/E,MAAM,GAAK+E,EAAI7E,OAAO,GAC/B0J,EAAK7E,EAAI/E,MAAM,GAAK+E,EAAI7E,OAAO,GACnC,OAAOnV,EAAI6e,EAAKA,EAAK7e,EAAI4e,EAAKA,EAAK5e,KAKrC,IAAI8e,EAAc9qB,KAAKqpB,GAAGzB,OAAO,MAAW,KAC5C,OAAO5nB,KAAK0kB,IAAI9B,IAAInB,GAAK,SAAUzV,EAAGga,GACpC,IAAIzE,EAAMyE,EAAI/E,MAAM,GAChBK,EAAM0E,EAAI/E,MAAM,GAChB8J,EAAM/E,EAAI7E,OACVD,EAAW8E,EAAI9E,SAEnB,OAAIA,IAAaA,EAAS,IAAMA,EAAS,IAChClV,EACEA,EAAIuV,EAENA,EAAM3f,EAAMynB,GAAGzB,QAAQrG,EAAMvV,IAAM+e,EAAI,GAAKD,IAAgBC,EAAI,GAC9D/e,EAAIsV,EAENA,EAAM1f,EAAMynB,GAAGzB,QAAQ5b,EAAIsV,IAAQyJ,EAAI,GAAKD,IAAgBC,EAAI,GAGlE/e,MAKbvL,EAAQoT,IAAM,SAAU9L,GACtB,OAAO/H,KAAK0kB,IAAI7Q,IAAI9L,EAAM8d,OAG5BplB,EAAQuqB,KAAO,SAAUjjB,EAAO9G,GAC9B,IAAIjB,KAAKwkB,IAAIuF,iBAAoBhiB,EAAM8d,KAAKlnB,OAA5C,CAIA,IAAIssB,EAAe,CACjBljB,MAAOA,EACP9G,MAAOA,GAETjB,KAAK0qB,WAAY,EACjB1qB,KAAKwkB,IAAIkC,cAAa,GACtB1mB,KAAKqpB,GAAGzD,KAAK7d,EAAM8d,KAAMoF,IACxBjrB,KAAKyqB,cAAgBzqB,KAAKykB,GAAGoE,YAAY7oB,KAAK0kB,IAAI7Q,MAAOoX,GAC1DjrB,KAAKwhB,UAAYxhB,KAAK0kB,IAAIlD,UAAUzZ,EAAM8d,MAC1C7lB,KAAKyqB,aAAezqB,KAAK0kB,IAAI7Q,IAAI9L,EAAM8d,QAGzCplB,EAAQyqB,OAAS,SAAUnjB,EAAO9G,EAAO4J,GACvC,IAAI7K,KAAK0qB,WAAc1qB,KAAKwkB,IAAIqF,mBAAoB7pB,KAAK0kB,IAAIf,MAAM9Y,GAAQ,SAAUmB,GACnF,OAAa,IAANA,KADT,CAMA,IACIgV,EADA8D,EAAU9kB,KAAKyqB,cAAgBzqB,KAAK0kB,IAAI7Q,IAAI9L,EAAM8d,MAGtD7E,EAAU4B,GAAIkC,GAAS,SAAU9Y,EAAGyX,GAClC,OAAOzX,GAAKnB,EAAO4Y,IAAM,MAE3BzjB,KAAKyqB,eAAiBzqB,KAAKyqB,aAAezJ,GAEtChhB,KAAKwhB,WAAaxhB,KAAK0kB,IAAIf,MAAMmB,GAAS,SAAU9Y,EAAGga,GACzD,OAAQxE,GAAUxV,EAAGga,EAAI/E,YAEzBjhB,KAAKwhB,WAAY,GAGnBsD,EAAU9kB,KAAK2qB,UAAU7F,GACzB9D,EAAUhhB,KAAK2qB,UAAU3J,IACPhhB,KAAKykB,GAAGwB,cAAcjF,GAAS,EAAO8D,EAAS,CAC/D/c,MAAOA,EACP9G,MAAOA,IACN,KAGDjB,KAAK0qB,WAAY,EACjB1qB,KAAKyqB,aAAe,KACpBzqB,KAAKqpB,GAAG1C,QAAO,MAInBlmB,EAAQ0qB,QAAU,SAAUpjB,EAAO9G,EAAO4J,EAAQugB,GAChD,IAAIprB,KAAK0qB,WAAc1qB,KAAKwkB,IAAIqF,kBAAqB7pB,KAAKyqB,aAA1D,CAIA,IAAIhJ,EAAMzhB,KAAK0kB,IAAI7Q,IAAI9L,EAAM8d,MACzBf,EAAU9kB,KAAK0kB,IAAI7Q,MACnBmN,EAAUhhB,KAAK0kB,IAAI7Q,IAAI7T,KAAK0kB,IAAI9B,IAAI/X,GAAQ,SAAUmB,EAAGga,EAAKvC,GAChE,OAAIuC,EAAI9E,WAAa8E,EAAI9E,SAAS,IAAM8E,EAAI9E,SAAS,IAC5CO,EAAIgC,GAAKzX,EAET+U,GAAkBU,EAAIgC,GAAKzX,EAAGga,EAAI/E,MAAO+E,EAAI9E,SAAU8E,EAAI7E,YAGlE6D,EAAWhlB,KAAKqpB,GAAGxE,YAAY7D,EAASS,EAAK2J,GAEhC,IAAbpG,IACFhE,EAAUF,GAAS,GAAIgE,IAIzB,IAAI7C,EAAQ,CACV6C,QAASA,EACT9D,QAASA,EACTgE,SAAUA,EACVS,MAAOzlB,KAAK0kB,IAAIgB,SAASZ,EAAS9D,GAClChO,WAAY/R,EACZ8G,MAAOA,EACP4d,WAAW,GAEb3lB,KAAKykB,GAAGuE,eAAe/G,GACvBjiB,KAAKyqB,aAAe,KAEpB,IAAInC,EAAWtoB,KAAKqpB,GAAGhB,gBAAgBpG,GACnCoJ,EAAUzH,GAAM0E,EAAStH,QAAS8D,GAClCmG,EAAe,CACjBljB,MAAOA,EACP9G,MAAOA,GAGLoqB,GAAiC,IAAtB/C,EAAStD,WACrBqG,GAAWrrB,KAAKykB,GAAGwB,cAAcqC,EAAStH,SAAS,EAAO8D,EAASmG,GAAc,GAClFjrB,KAAKwkB,IAAIkC,cAAa,GAElB1mB,KAAK0kB,IAAIlD,YACXxhB,KAAKqpB,GAAGhD,QAAQ4E,GAEhBjrB,KAAKykB,GAAGmC,eAAc,IAGxB5mB,KAAKqpB,GAAG/C,UAAUgC,EAAStH,QAASsH,EAAStD,SAAUiG,KAIpDT,EApKT,GAyKIc,GAAgB,iBAAkB,IAAmC,WAA5B,KAAW5M,QAAQvc,KAC5DopB,GAAY,WACd,GAAwB,oBAAbvnB,SACT,MAAO,GAMT,IAHA,IAAIwnB,GAAaxnB,SAASynB,MAAQznB,SAAS0nB,qBAAqB,QAAQ,IAAIznB,MACxEpB,EAAS,CAAC,YAAa,kBAAmB,cAAe,gBAEpDpE,EAAI,EAAGsjB,EAAMlf,EAAOlE,OAAQF,EAAIsjB,EAAKtjB,IAC5C,GAAIoE,EAAOpE,KAAM+sB,EACf,OAAO3oB,EAAOpE,GAIlB,MAAO,GAdO,GAgHZ,GAEJ,SAAUsc,GAGR,SAAS4Q,EAAK1B,EAAM7iB,EAASwkB,QACd,IAAT3B,IACFA,EAAO,SAGO,IAAZ7iB,IACFA,EAAU,IAGZ,IAAIxF,EAAQmZ,EAAOrc,KAAKsB,OAASA,KAuBjC,OArBA4B,EAAMqoB,KAAOA,EACbroB,EAAMiqB,QAAU,GAChBjqB,EAAMwF,QAAU0Z,GAAS,CACvB8G,OAAQ,SAAsBte,GAC5B,OAAO,EAAIlF,KAAK6f,IAAI,EAAI3a,EAAG,IAE7BwgB,eAAe,EACfxE,gBAAiBF,IACjBC,gBAAiB,EACjBH,aAAc,KACd/gB,MAAO,MACNiD,GACHxF,EAAM4iB,IAAM,IAAImF,GAAiB/nB,EAAMwF,SACvCxF,EAAM8iB,IAAM,IAAIsF,GAAYpoB,EAAMqoB,KAAMroB,EAAMwF,SAC9CxF,EAAM6iB,GAAK,IAAImE,GAAahnB,GAC5BA,EAAMynB,GAAK,IAAI9E,GAAiB3iB,GAChCA,EAAMkqB,GAAK,IAAItB,GAAc5oB,GAE7BA,EAAM6iB,GAAGiF,oBAAoB9nB,EAAMynB,IAEnCuC,GAAYhqB,EAAM6iB,GAAGwB,cAAc2F,GAC5BhqB,EAlCTgf,GAAU+K,EAAM5Q,GA8DhB,IAAIta,EAAUkrB,EAAKjrB,UAiTnB,OA/SAD,EAAQsrB,QAAU,SAAUlG,EAAMmG,GAChC,IAAIC,EAcJ,GAXEA,EADkB,iBAATpG,EACAA,EAAK/Y,MAAM,KAEX+Y,EAAKpmB,UAIXO,KAAK6rB,QAAQplB,QAAQulB,IACxBhsB,KAAKksB,WAAWF,GAId,WAAYA,EAAW,CACzB,IAAIG,EAAUnsB,KAAK6rB,QAAQpa,QAAO,SAAUzF,GAC1C,OAAOA,EAAEogB,QAAUpgB,EAAEjF,UAAYilB,EAAUjlB,WAGzColB,EAAQxtB,SACVqtB,EAAUI,OAASD,EAAQ,GAAGC,QASlC,OALAJ,EAAUK,QAAQJ,GAClBD,EAAUD,QAAQ/rB,KAAK8rB,IAEvB9rB,KAAK6rB,QAAQxsB,KAAK2sB,GAEXhsB,MA+BTS,EAAQyrB,WAAa,SAAUF,GAC7B,GAAIA,EAAW,CACb,IAAIpoB,EAAQ5D,KAAK6rB,QAAQplB,QAAQulB,GAE7BpoB,GAAS,IACX5D,KAAK6rB,QAAQjoB,GAAOsoB,aAEpBlsB,KAAK6rB,QAAQppB,OAAOmB,EAAO,SAG7B5D,KAAK6rB,QAAQtqB,SAAQ,SAAUyK,GAC7B,OAAOA,EAAEkgB,gBAGXlsB,KAAK6rB,QAAU,GAGjB,OAAO7rB,MA0BTS,EAAQoT,IAAM,SAAUgS,GACtB,OAAO7lB,KAAK0kB,IAAI7Q,IAAIgS,IAgCtBplB,EAAQgmB,MAAQ,SAAUhF,EAAKuD,GAM7B,YALiB,IAAbA,IACFA,EAAW,GAGbhlB,KAAKqpB,GAAG5C,MAAMhF,EAAKuD,GACZhlB,MAgCTS,EAAQkoB,MAAQ,SAAUlH,EAAKuD,GAM7B,YALiB,IAAbA,IACFA,EAAW,GAGbhlB,KAAKqpB,GAAGV,MAAMlH,EAAKuD,GACZhlB,MA2BTS,EAAQ6rB,aAAe,SAAUzG,GAC/B,OAAO7lB,KAAK0kB,IAAIlD,UAAUqE,IAS5BplB,EAAQ0N,QAAU,WAChBnO,KAAKksB,aACLlsB,KAAKykB,GAAGtW,WAcVwd,EAAKjpB,QAAU,QAYfipB,EAAKJ,UAAYA,GAOjBI,EAAKrQ,eHzjDc,EGgkDnBqQ,EAAK9iB,eH/jDc,EGskDnB8iB,EAAKvQ,gBHrkDe,EG4kDpBuQ,EAAK7iB,aH3kDY,EGklDjB6iB,EAAKxQ,eHjlDc,GGwlDnBwQ,EAAK7U,qBHvlDoBjO,EG8lDzB8iB,EAAKtQ,mBH7lDkBvS,GGomDvB6iB,EAAKzQ,cHnmDapE,GGomDX6U,EAhXT,CAiXE,IAEE,GAAyB,iBAAkB,IAAO,mBAAoB,GACtE,GAAiB,iBAAkB,GACnCY,GAAY,wBAChB,SAASC,GAAO1pB,EAAQ+H,GACtB,OAAOA,EAAOsa,QAAO,SAAUiF,EAAKpe,EAAGvN,GAKrC,OAJIqE,EAAOrE,KACT2rB,EAAItnB,EAAOrE,IAAMuN,GAGZoe,IACN,IAEL,SAASqC,GAAa1lB,EAASK,GAC7B,IAEE,OAAO,IAAImR,GAAQxR,EAAS+Z,GAAS,GAAI1Z,IACzC,MAAOjI,GACP,OAAO,MAGX,SAASutB,GAAiBV,QACN,IAAdA,IACFA,EAAY,IAGd,IAAIW,GAAW,EACXC,GAAW,EACXC,GAAa,EAiBjB,OAhBAb,EAAUzqB,SAAQ,SAAUyK,GAC1B,OAAQA,GACN,IAAK,QACH4gB,GAAW,EACX,MAEF,IAAK,QACHD,EAAW,GACX,MAEF,IAAK,UACHE,EAAa,OAKfA,EACKvd,EACEqd,GAAYC,EACd9Z,GACE6Z,EACF3b,GACE4b,EACF7a,GAGF,KAgBT,SAAS+a,GAAaC,EAAW9kB,EAAW+kB,GAC1C,OAAIA,KH9qDclW,KG+qDN7O,GAA+BA,EAAY8kB,GAAaC,EAAgBD,MAExE9kB,EAAY8kB,GAyC1B,IAAI,GAEJ,WACE,SAASE,EAASnL,EAAI1a,GAiBpB,GAhBApH,KAAK6lB,KAAO,GACZ7lB,KAAKosB,OAAS,KACdpsB,KAAK+G,QAAU,KACf/G,KAAKktB,cAAgB,KACrBltB,KAAKmtB,aAAc,EACnBntB,KAAKotB,eAAiB,EACtBptB,KAAKqtB,SAAU,OAUQ,IAAZ9U,GACT,MAAM,IAAI0B,MAAM,oFAGlBja,KAAK+G,QAAUib,GAAEF,GACjB9hB,KAAKoH,QAAU0Z,GAAS,CACtBkL,UAAW,CAAC,QAAS,QAAS,WAC9BzgB,MAAO,CAAC,EAAG,GACX+hB,eAAgB,GAChBjY,UAAW,EACXkY,sBAxnBmB,GAynBnBC,iBAAiB,EACjBC,qBAAsB,CAGpB7V,SAAU,CACRC,WAAY,OACZC,YAAa,OACbC,aAAc,OACdE,SAAU,UAGb7Q,GACHpH,KAAK0tB,cAAgB1tB,KAAK0tB,cAAc9I,KAAK5kB,MAC7CA,KAAK2tB,UAAY3tB,KAAK2tB,UAAU/I,KAAK5kB,MACrCA,KAAK4tB,SAAW5tB,KAAK4tB,SAAShJ,KAAK5kB,MAGrC,IAAIS,EAAUwsB,EAASvsB,UA0QvB,OAxQAD,EAAQ4rB,QAAU,SAAUxG,GAC1B,IAAIgI,IAAkBhI,EAAK,GACvBiI,IAAgBjI,EAAK,GAGvB7lB,KAAK+tB,WADHF,GAAiBC,EHhxDLhX,GGkxDL+W,EHpxDYhlB,EGsxDZilB,EHrxDUhlB,GANJ,EGiyDjB9I,KAAK6lB,KAAOA,GAGdplB,EAAQsrB,QAAU,SAAUiC,GAC1B,IAAIC,EAAe,CACjBhmB,UAAWjI,KAAK+tB,WAChB1Y,UAAWrV,KAAKoH,QAAQiO,WAG1B,GAAIrV,KAAKosB,OAGPpsB,KAAKkuB,mBACLluB,KAAKmuB,mBACA,CACL,IAAIC,EAAWpuB,KAAK+G,QAAQwlB,IAEvB6B,IACHA,EAAWC,OAAOjqB,KAAKD,MAAMC,KAAKkqB,UAAW,IAAI/pB,MAAOgf,aAG1D,IAAI5L,EAAa+U,GAAiB1sB,KAAKoH,QAAQ4kB,WAE/C,IAAKrU,EACH,MAAM,IAAIsC,MAAM,8BAGlBja,KAAKosB,OAASK,GAAazsB,KAAK+G,QAAS+Z,GAAS,CAChDnJ,WAAYA,GACX3X,KAAKoH,QAAQqmB,uBAChBztB,KAAK+G,QAAQwlB,IAAa6B,EAM5B,OAHApuB,KAAKktB,cAAgB,IAAI,GAAIe,GAC7BjuB,KAAKosB,OAAO/T,IAAIrY,KAAKktB,eACrBltB,KAAKuuB,YAAYP,GACVhuB,MAGTS,EAAQyrB,WAAa,WAQnB,OAPAlsB,KAAKkuB,mBAEDluB,KAAKosB,QACPpsB,KAAKmuB,eAGPnuB,KAAK+tB,WH/0DY,EGg1DV/tB,MASTS,EAAQ0N,QAAU,WAChBnO,KAAKksB,aAEDlsB,KAAKosB,QAA6C,IAAnCpsB,KAAKosB,OAAO9kB,YAAY3I,QACzCqB,KAAKosB,OAAOje,iBAGPnO,KAAK+G,QAAQwlB,IACpBvsB,KAAK+G,QAAU,KACf/G,KAAKosB,OAAS,MAUhB3rB,EAAQ+G,OAAS,WAEf,OADAxH,KAAKosB,SAAWpsB,KAAKosB,OAAOvY,IAAI,OAAOzM,QAAQI,QAAS,GACjDxH,MAUTS,EAAQ+tB,QAAU,WAEhB,OADAxuB,KAAKosB,SAAWpsB,KAAKosB,OAAOvY,IAAI,OAAOzM,QAAQI,QAAS,GACjDxH,MAUTS,EAAQguB,SAAW,WACjB,SAAUzuB,KAAKosB,SAAUpsB,KAAKosB,OAAOvY,IAAI,OAAOzM,QAAQI,SAG1D/G,EAAQytB,iBAAmB,WACrBluB,KAAKosB,QAAUpsB,KAAKktB,gBACtBltB,KAAKosB,OAAOvT,OAAO7Y,KAAKktB,eACxBltB,KAAKktB,cAAgB,OAIzBzsB,EAAQitB,cAAgB,SAAUzsB,GAChC,GAAIjB,KAAKyuB,WACP,GAAIxtB,EAAMwL,SAGR,GAFAzM,KAAKqtB,SAAU,GAEmB,IAA9BpsB,EAAM+G,SAAS0mB,WAAsB,CACvC,IAAIC,EAAgB3uB,KAAKoH,QAAQmmB,sBACjCvtB,KAAKguB,SAAShD,KAAKhrB,KAAMiB,GACzBjB,KAAKmtB,YAAc7B,IAAiBrqB,EAAM2I,OAAON,EAAItE,OAAO4pB,WAAaD,EACzE3uB,KAAKqtB,SAAU,QAERpsB,EAAMyL,SACf1M,KAAK4tB,SAAS3sB,IAKpBR,EAAQktB,UAAY,SAAU1sB,GAC5B,IAAIW,EAAQ5B,KAEZ,GAAKA,KAAKqtB,QAAV,CAIA,IAAIttB,EAAKC,KAAKoH,QACVmmB,EAAwBxtB,EAAGwtB,sBAC3BC,EAAkBztB,EAAGytB,gBACrBR,EAnQR,SAA6BpiB,EAAO0iB,GAClC,GAAIA,EAAiB,GAAKA,EAAiB,GACzC,OHzqDiB,EG4qDnB,IAAIuB,EAAUzqB,KAAKC,IAAIuG,GACvB,OAAOikB,EAAUvB,GAAkBuB,EAAU,IAAMvB,EHvqD5BxkB,GADED,EGq6DHimB,CAAoB7tB,EAAM2J,MAAO5K,KAAKoH,QAAQkmB,gBAE9DtiB,EAAYhL,KAAKosB,OAAOjkB,QAAQ6C,UAEpC,IAAIwiB,GAAoBvsB,EAAM+G,SAAS0mB,WAAvC,CAUA,GAAI1jB,GAAasgB,GAAe,CAG9B,GAFuBrqB,EAAM2I,OAAON,EAAI,EAUtC,YANAtJ,KAAK4tB,SAAS9M,GAASA,GAAS,GAAI9V,GAAY,CAC9CY,UAAW,EACXC,UAAW,EACXkjB,QAAS,EACTC,QAAS,KAGFhvB,KAAKmtB,cACd/W,aAAapW,KAAKotB,gBAEKnsB,EAAM4I,QAAU0jB,EAGrCvtB,KAAKmtB,aAAc,EAGnBntB,KAAKotB,eAAiBpoB,OAAOwN,YAAW,WACtC5Q,EAAMgsB,SAAS9M,GAASA,GAAS,GAAI9V,GAAY,CAC/CY,UAAW,EACXC,UAAW,EACXkjB,QAAS,EACTC,QAAS,OAEV,MAOLhkB,GACF/J,EAAM8tB,QAAU9tB,EAAM4I,OAASmB,EAAUnB,OACzC5I,EAAM+tB,QAAU/tB,EAAM6I,OAASkB,EAAUlB,SAEzC7I,EAAM8tB,QAAU,EAChB9tB,EAAM+tB,QAAU,GAGlB,IAAInkB,EAAS7K,KAAKivB,UAAU,CAAChuB,EAAM8tB,QAAS9tB,EAAM+tB,SAAU,CAAClC,GH99DtCjkB,EG89DyE7I,KAAK+tB,WAAYf,GAAgBF,GH79D5GhkB,GG69D6I9I,KAAK+tB,WAAYf,KAC/KkC,EAAUrkB,EAAO2R,MAAK,SAAUxQ,GAClC,OAAa,IAANA,KAGT,GAAIkjB,EAAS,CACX,IAAIlnB,EAAW/G,EAAM+G,UAEO,IAAxBA,EAAS0mB,YACX1mB,EAASK,iBAGXL,EAASmnB,kBAGXluB,EAAMmuB,mBAAqBF,EAC3BA,GAAWlvB,KAAKguB,SAAS9C,OAAOlrB,KAAMiB,EAAOurB,GAAOxsB,KAAK6lB,KAAMhb,SApE7D7K,KAAK4tB,SAAS9M,GAASA,GAAS,GAAI7f,GAAQ,CAC1C2K,UAAW,EACXC,UAAW,EACXkjB,QAAS,EACTC,QAAS,OAmEfvuB,EAAQmtB,SAAW,SAAU3sB,GAC3B,GAAKjB,KAAKqtB,QAAV,CAIAjX,aAAapW,KAAKotB,gBAClBptB,KAAKqtB,SAAU,EACf,IA9UmBgC,EAAQnK,EACzBoK,EACAtK,EA4UEna,EAAS7K,KAAKivB,UAAU,CAAC7qB,KAAKC,IAAIpD,EAAM2K,YAAc3K,EAAM4I,OAAS,GAAK,EAAI,GAAIzF,KAAKC,IAAIpD,EAAM4K,YAAc5K,EAAM6I,OAAS,GAAK,EAAI,IAAK,CAACgjB,GHx/D1HjkB,EGw/D6J7I,KAAK+tB,YAAajB,GHv/DjLhkB,GGu/DkN9I,KAAK+tB,cA9UzNsB,EA+UIxkB,EA/UIqa,EA+UIllB,KAAKguB,SAAS5mB,QAAQ8d,aA9UnDoK,EAAclrB,KAAK8F,KAAKmlB,EAAO,GAAKA,EAAO,GAAKA,EAAO,GAAKA,EAAO,IACnErK,EAAW5gB,KAAKC,IAAIirB,GAAepK,GA6UrCra,EA5UK,CAACwkB,EAAO,GAAK,EAAIrK,EAAUqK,EAAO,GAAK,EAAIrK,GA6UhDhlB,KAAKguB,SAAS7C,QAAQnrB,KAAMiB,EAAOurB,GAAOxsB,KAAK6lB,KAAMhb,MAGvDpK,EAAQ8tB,YAAc,SAAUP,GAC9BhuB,KAAKguB,SAAWA,EAChBhuB,KAAKosB,OAAOnqB,GAAG,eAAgBjC,KAAK0tB,eAAezrB,GAAG,mBAAoBjC,KAAK2tB,YAGjFltB,EAAQ0tB,aAAe,WACrBnuB,KAAKosB,OAAOpqB,IAAI,eAAgBhC,KAAK0tB,eAAe1rB,IAAI,mBAAoBhC,KAAK2tB,WACjF3tB,KAAKguB,SAAW,MAGlBvtB,EAAQwuB,UAAY,SAAUrU,EAAY3S,GACxC,IAAI4C,EAAS,CAAC,EAAG,GACbU,EAAQvL,KAAKoH,QAAQmE,MAUzB,OARItD,EAAU,KACZ4C,EAAO,GAAK+P,EAAW,GAAKrP,EAAM,IAGhCtD,EAAU,KACZ4C,EAAO,GAAK+P,EAAW,GAAKrP,EAAM,IAG7BV,GAGFoiB,EAxTT,GAgjCe,MC15FX,GAAgB,SAAUxM,EAAG/P,GAS/B,OARA,GAAgBvQ,OAAOugB,gBAAkB,CACvCrd,UAAW,cACA+M,OAAS,SAAUqQ,EAAG/P,GACjC+P,EAAEpd,UAAYqN,IACX,SAAU+P,EAAG/P,GAChB,IAAK,IAAIiQ,KAAKjQ,EAAOvQ,OAAOO,UAAUqC,eAAerE,KAAKgS,EAAGiQ,KAAIF,EAAEE,GAAKjQ,EAAEiQ,MAGvDF,EAAG/P,IAG1B,SAAS,GAAU+P,EAAG/P,GACpB,GAAiB,mBAANA,GAA0B,OAANA,EAAY,MAAM,IAAI3R,UAAU,uBAAyBsvB,OAAO3d,GAAK,iCAGpG,SAASmQ,IACP7gB,KAAKoD,YAAcqd,EAHrB,GAAcA,EAAG/P,GAMjB+P,EAAE/f,UAAkB,OAANgQ,EAAavQ,OAAOgD,OAAOuN,IAAMmQ,EAAGngB,UAAYgQ,EAAEhQ,UAAW,IAAImgB,GAEjF,IAAI,GAAW,WAWb,OAVA,GAAW1gB,OAAOyC,QAAU,SAAkB+P,GAC5C,IAAK,IAAItU,EAAGI,EAAI,EAAGQ,EAAIO,UAAUb,OAAQF,EAAIQ,EAAGR,IAG9C,IAAK,IAAIkiB,KAFTtiB,EAAImB,UAAUf,GAEO0B,OAAOO,UAAUqC,eAAerE,KAAKL,EAAGsiB,KAAIhO,EAAEgO,GAAKtiB,EAAEsiB,IAG5E,OAAOhO,IAGOlR,MAAMzB,KAAMR,YAE9B,SAAS+vB,GAAUC,EAASC,EAAYC,EAAGC,GAOzC,OAAO,IAAKD,IAAMA,EAAIE,WAAU,SAAUC,EAASC,GACjD,SAASC,EAAUlxB,GACjB,IACEmxB,EAAKL,EAAU/wB,KAAKC,IACpB,MAAOM,GACP2wB,EAAO3wB,IAIX,SAAS8wB,EAASpxB,GAChB,IACEmxB,EAAKL,EAAiB,MAAE9wB,IACxB,MAAOM,GACP2wB,EAAO3wB,IAIX,SAAS6wB,EAAKxS,GAvBhB,IAAe3e,EAwBX2e,EAAO1e,KAAO+wB,EAAQrS,EAAO3e,QAxBlBA,EAwBiC2e,EAAO3e,MAvB9CA,aAAiB6wB,EAAI7wB,EAAQ,IAAI6wB,GAAE,SAAUG,GAClDA,EAAQhxB,OAsBkDqxB,KAAKH,EAAWE,GAG5ED,GAAML,EAAYA,EAAUluB,MAAM+tB,EAASC,GAAc,KAAK7wB,WAGlE,SAASuxB,GAAYX,EAASY,GAC5B,IASIC,EACA7mB,EACAmJ,EACA2d,EAZAC,EAAI,CACNC,MAAO,EACPC,KAAM,WACJ,GAAW,EAAP9d,EAAE,GAAQ,MAAMA,EAAE,GACtB,OAAOA,EAAE,IAEX+d,KAAM,GACNC,IAAK,IAMP,OAAOL,EAAI,CACT1xB,KAAMgyB,EAAK,GACX,MAASA,EAAK,GACd,OAAUA,EAAK,IACI,mBAAXtyB,SAA0BgyB,EAAEhyB,OAAOC,UAAY,WACvD,OAAOyB,OACLswB,EAEJ,SAASM,EAAK3xB,GACZ,OAAO,SAAU+M,GACf,OAIJ,SAAc6kB,GACZ,GAAIR,EAAG,MAAM,IAAItxB,UAAU,mCAE3B,KAAOwxB,GAAG,IACR,GAAIF,EAAI,EAAG7mB,IAAMmJ,EAAY,EAARke,EAAG,GAASrnB,EAAU,OAAIqnB,EAAG,GAAKrnB,EAAS,SAAOmJ,EAAInJ,EAAU,SAAMmJ,EAAEjU,KAAK8K,GAAI,GAAKA,EAAE5K,SAAW+T,EAAIA,EAAEjU,KAAK8K,EAAGqnB,EAAG,KAAK/xB,KAAM,OAAO6T,EAG3J,OAFInJ,EAAI,EAAGmJ,IAAGke,EAAK,CAAS,EAARA,EAAG,GAAQle,EAAE9T,QAEzBgyB,EAAG,IACT,KAAK,EACL,KAAK,EACHle,EAAIke,EACJ,MAEF,KAAK,EAEH,OADAN,EAAEC,QACK,CACL3xB,MAAOgyB,EAAG,GACV/xB,MAAM,GAGV,KAAK,EACHyxB,EAAEC,QACFhnB,EAAIqnB,EAAG,GACPA,EAAK,CAAC,GACN,SAEF,KAAK,EACHA,EAAKN,EAAEI,IAAIG,MAEXP,EAAEG,KAAKI,MAEP,SAEF,QACE,KAAMne,EAAI4d,EAAEG,MAAM/d,EAAIA,EAAEhU,OAAS,GAAKgU,EAAEA,EAAEhU,OAAS,KAAkB,IAAVkyB,EAAG,IAAsB,IAAVA,EAAG,IAAW,CACtFN,EAAI,EACJ,SAGF,GAAc,IAAVM,EAAG,MAAcle,GAAKke,EAAG,GAAKle,EAAE,IAAMke,EAAG,GAAKle,EAAE,IAAK,CACvD4d,EAAEC,MAAQK,EAAG,GACb,MAGF,GAAc,IAAVA,EAAG,IAAYN,EAAEC,MAAQ7d,EAAE,GAAI,CACjC4d,EAAEC,MAAQ7d,EAAE,GACZA,EAAIke,EACJ,MAGF,GAAIle,GAAK4d,EAAEC,MAAQ7d,EAAE,GAAI,CACvB4d,EAAEC,MAAQ7d,EAAE,GAEZ4d,EAAEI,IAAItxB,KAAKwxB,GAEX,MAGEle,EAAE,IAAI4d,EAAEI,IAAIG,MAEhBP,EAAEG,KAAKI,MAEP,SAGJD,EAAKT,EAAK1xB,KAAK8wB,EAASe,GACxB,MAAOpxB,GACP0xB,EAAK,CAAC,EAAG1xB,GACTqK,EAAI,EACJ,QACA6mB,EAAI1d,EAAI,EAGV,GAAY,EAARke,EAAG,GAAQ,MAAMA,EAAG,GACxB,MAAO,CACLhyB,MAAOgyB,EAAG,GAAKA,EAAG,QAAK,EACvB/xB,MAAM,GAhFCkxB,CAAK,CAAC/wB,EAAG+M,MAoFtB,SAAS,GAAS5N,GAChB,IAAIC,EAAsB,mBAAXC,QAAyBA,OAAOC,SAC3CC,EAAIH,GAAKD,EAAEC,GACXI,EAAI,EACR,GAAID,EAAG,OAAOA,EAAEE,KAAKN,GACrB,GAAIA,GAAyB,iBAAbA,EAAEO,OAAqB,MAAO,CAC5CC,KAAM,WAEJ,OADIR,GAAKK,GAAKL,EAAEO,SAAQP,OAAI,GACrB,CACLS,MAAOT,GAAKA,EAAEK,KACdK,MAAOV,KAIb,MAAM,IAAIW,UAAUV,EAAI,0BAA4B,mCAEtD,SAAS,GAAOD,EAAGa,GACjB,IAAIT,EAAsB,mBAAXF,QAAyBF,EAAEE,OAAOC,UACjD,IAAKC,EAAG,OAAOJ,EACf,IACIc,EAEAC,EAHAV,EAAID,EAAEE,KAAKN,GAEXgB,EAAK,GAGT,IACE,WAAc,IAANH,GAAgBA,KAAM,MAAQC,EAAIT,EAAEG,QAAQE,MAAMM,EAAGC,KAAKH,EAAEL,OACpE,MAAOS,GACPH,EAAI,CACFG,MAAOA,GAET,QACA,IACMJ,IAAMA,EAAEJ,OAASN,EAAIC,EAAU,SAAID,EAAEE,KAAKD,GAC9C,QACA,GAAIU,EAAG,MAAMA,EAAEG,OAInB,OAAOF,EAET,SAAS2xB,GAAcC,EAAIC,GACzB,IAAK,IAAIxyB,EAAI,EAAGyyB,EAAKD,EAAKtyB,OAAQwyB,EAAIH,EAAGryB,OAAQF,EAAIyyB,EAAIzyB,IAAK0yB,IAAKH,EAAGG,GAAKF,EAAKxyB,GAEhF,OAAOuyB,EA0BT,IAonBII,GApnBAC,GAEJ,SAAUtW,GAQR,SAASsW,EAActX,EAASuX,GAC9B,IAAI1vB,EAAQmZ,EAAOrc,KAAKsB,KAAM+Z,IAAY/Z,KAM1C,OAJA4B,EAAMmY,QAAUA,EAChBnY,EAAM0vB,KAAOA,EACbnxB,OAAOugB,eAAe9e,EAAOyvB,EAAc3wB,WAC3CkB,EAAMO,KAAO,gBACNP,EAGT,OAjBA,GAAUyvB,EAAetW,GAiBlBsW,EAlBT,CAmBEpX,OA+BEsX,GACU,EADVA,GAEiB,EAFjBA,GAGiB,EAHjBA,GAIwB,EAJxBA,GAKY,EALZA,GAMkB,EANlBA,GAOsB,EAPtBA,GAQuB,EARvBA,GASmB,EATnBA,GAUqB,EAVrBA,GAWyB,GAXzBA,GAYwB,GAZxBA,GAae,GAGfC,GACU,SAAUC,EAAUC,GAC9B,OAAOD,EAAW,WAAaA,EAAW,cAAgBC,EAAa9O,KAAI,SAAU3V,GACnF,MAAO,IAAOA,EAAO,OACpBpF,KAAK,QAAU,KAJlB2pB,GAMiB,SAAUG,GAC3B,MAAO,0BAA6BA,EAAW,gBAP/CH,GASiB,SAAU/rB,EAAKtD,GAChC,OAAOA,EAAO,+BAAiCsD,GAV/C+rB,GAYwB,SAAUrvB,GAClC,OAAOA,EAAO,+EAbdqvB,GAeY,SAAUI,EAAYnsB,GAClC,MAAO,WAAcmsB,EAAa,sCAAyCnsB,GAhB3E+rB,GAkBkB,SAAU/rB,EAAK8b,EAAKD,GACtC,MAAO,UAAa7b,EAAM,wCAA2C8b,EAAM,QAAUD,EAAM,KAnB3FkQ,GAqBsB,SAAUK,GAChC,MAAO,aAAgBA,EAAW,uBAtBlCL,GAwBuB,0CAxBvBA,GAyBmB,kCAzBnBA,GA0BqB,0CA1BrBA,GA2ByB,gCA3BzBA,GA4BwB,8EA5BxBA,GA6Be,sDA+BfM,GAAS,CACXC,MAAO,QACPC,cAAe,eACfC,aAAc,cACdC,WAAY,YACZC,SAAU,UACVC,WAAY,YACZC,KAAM,OACNC,SAAU,UACVC,YAAa,aACbC,QAAS,UACTC,aAAc,cACdC,SAAU,WACVC,OAAQ,SACRC,WAAY,YACZC,eAAgB,gBAChBC,WAAY,YACZC,aAAc,eAWZC,GAAQ,CACVC,KAAM,OACNC,OAAQ,SACRC,KAAM,QAaJC,GAAY,CACdH,KAAM,OACNE,KAAM,OACNE,KAAM,MAcJC,GAAY,CACdC,KAAM,OACNC,YAAa,aACbC,OAAQ,UA8BNC,GAAQ,SAAUpqB,EAAGiY,EAAKD,GAC5B,OAAOld,KAAKkd,IAAIld,KAAKmd,IAAIjY,EAAGgY,GAAMC,IAEhCoS,GAAsB,SAAUluB,EAAKmuB,GACvC,IAAKnuB,EACH,MAAM,IAAI4rB,GAAcG,GAAiCoC,GAAqBrC,IAGhF,OAAO9rB,GAEL,GAAU,SAAUouB,GACtB,MAAO,GAAG9uB,MAAMrG,KAAKm1B,IAEnBC,GAAe,SAAUC,EAAOC,GAClC,IAAIC,EAEJ,GAAIC,GAASH,GACX,OAAQA,GACN,KAAKf,GAAMC,KACTgB,EAAa,EACb,MAEF,KAAKjB,GAAME,OACTe,EAAa,GAAMD,EACnB,MAEF,KAAKhB,GAAMG,KACTc,EAAaD,EACb,MAEF,QAGE,GAAkB,OAFlBC,EAAaE,GAAoBJ,EAAOC,IAGtC,MAAM,IAAI3C,GAAcG,GAAqB,QAASuC,GAAQxC,SAKpE0C,EAAaF,EAGf,OAAOE,GAsBLE,GAAsB,SAAUC,EAAUzZ,GAC5C,IAAI0Z,EAASC,GAA0BF,GACvC,OAAc,MAAVC,EAAuB,KACpBA,EAAOE,WAAa5Z,EAAO0Z,EAAOG,UAEvCF,GAA4B,SAAUF,GACxC,IAAIK,EAAW,yCAEf,GAAwB,iBAAbL,EACT,MAAO,CACLG,WAAY,EACZC,SAAUJ,GAWd,IAPA,IAAIC,EAAS,CACXE,WAAY,EACZC,SAAU,GAERlyB,EAAM,EACNoyB,EAAcD,EAAS3X,KAAKsX,GAEV,MAAfM,GAAqB,CAC1B,IAAIC,EAAOD,EAAY,GACnB71B,EAAQ61B,EAAY,GACpBE,EAAOF,EAAY,GACnBG,EAAcC,WAAWj2B,GAO7B,GALIyD,GAAO,IACTqyB,EAAOA,GAAQ,MAIZA,EACH,OAAO,KAGT,IAAII,EAA0B,MAATJ,EAAe,GAAK,EAE5B,MAATC,EACFP,EAAOE,YAAcQ,GAAkBF,EAAc,KAErDR,EAAOG,UAAYO,EAAiBF,IAIpCvyB,EACFoyB,EAAcD,EAAS3X,KAAKsX,GAI9B,OAAY,IAAR9xB,EACK,KAGF+xB,GAEL,GAAe,SAAUnpB,EAAOC,GAClC,OAAID,IAAUC,EAAYioB,GAAUC,KAC7BnoB,EAAQC,EAAMioB,GAAUD,KAAOC,GAAUH,MAE9C+B,GAAe,SAAUjuB,GACtBqJ,MAAMqD,QAAQ1M,KACjBA,EAAU,CAACA,IAGb,IAAIkuB,EAAW,GAgBf,OAfAluB,EAAQxF,SAAQ,SAAUugB,GACxB,GAAIoS,GAASpS,GAAK,CAChB,IAAIoT,EAAUlxB,SAASE,cAAc,OAIrC,IAHAgxB,EAAQ7S,UAAYP,EACpBmT,EAAS51B,KAAKoC,MAAMwzB,EAAUlE,GAAc,GAAI,GAAO,GAAQmE,EAAQC,aAEhED,EAAQE,YACbF,EAAQG,YAAYH,EAAQE,gBAEzB,KAAItT,GAAMA,EAAGW,WAAa6S,KAAKC,aAGpC,MAAM,IAAIlE,GAAcG,GAAmB1P,EAAI,CAAC,cAAe,WAAYyP,IAF3E0D,EAAS51B,KAAKyiB,OAKXmT,GAELO,GAA2B,SAAUlzB,EAAKgf,GAC5C,OAAiBoS,GAAVpxB,EAAM,EAAUA,EAAMgf,EAAqBhf,EAAhB,EAAGgf,IAEnCmU,GAAW,SAAUC,EAAO7yB,GAC9B,IAAI/C,EAAKC,EAET,IACE,IAAK,IAAI41B,EAAU,GAASD,GAAQE,EAAYD,EAAQ/2B,QAASg3B,EAAU92B,KAAM82B,EAAYD,EAAQ/2B,OAAQ,CAE3G,GADUg3B,EAAU/2B,QACRgE,EAAQ,OAAO,GAE7B,MAAOtC,GACPT,EAAM,CACJR,MAAOiB,GAET,QACA,IACMq1B,IAAcA,EAAU92B,OAASiB,EAAK41B,EAAQn1B,SAAST,EAAGrB,KAAKi3B,GACnE,QACA,GAAI71B,EAAK,MAAMA,EAAIR,OAIvB,OAAO,GAEL40B,GAAW,SAAUzuB,GACvB,MAAsB,iBAARA,GAEZowB,GAAoB,SAAUpU,EAAKF,EAAKD,GAC1C,IAAI0S,EAAO1S,EAAMC,EAEjB,GAAIE,EAAMF,EAERE,EAAMH,GADQC,EAAME,GAAOuS,OAEtB,GAAIvS,EAAMH,EAAK,CAEpBG,EAAMF,GADQE,EAAMH,GAAO0S,EAI7B,OAAOvS,GA2BLqU,GAAY,SAAUJ,EAAOK,GAC/B,IAAK,IAAIzzB,EAAM,EAAGA,EAAMozB,EAAM/2B,OAAQ2D,IACpC,GAAIyzB,EAAQL,EAAMpzB,IAChB,OAAOA,EAIX,OAAQ,GAEN0zB,GAAc,SAAUvU,EAAKwU,EAAMr3B,GACrC,OAAQ6iB,EAAMwU,IAASr3B,EAAOq3B,IAG5BC,GAAW,SAAUpU,GACvB,OAAO9c,OAAOmxB,iBAAiBrU,IAAOA,EAAGsU,cAEvCC,GAAY,SAAU5wB,EAAK8b,EAAKD,GAClC,OAAO7b,GAAO8b,GAAO9b,GAAO6b,GAqB1BgV,GAEJ,WAIE,SAASA,EAASxU,GAChB9hB,KAAKu2B,IAAMzU,EACX9hB,KAAKw2B,OAAS,EACdx2B,KAAKy2B,QAAU,EACfz2B,KAAK02B,SAAW,CACdC,KAAM,EACNC,MAAO,EACPC,IAAK,EACLC,OAAQ,GAEV92B,KAAK+2B,oBAAqB,EAG5B,IAAIt2B,EAAU61B,EAAS51B,UAkHvB,OAjHAP,OAAO62B,eAAev2B,EAAS,UAAW,CAOxCoT,IAAK,WACH,OAAO7T,KAAKu2B,KAEdU,YAAY,EACZC,cAAc,IAEhB/2B,OAAO62B,eAAev2B,EAAS,QAAS,CAOtCoT,IAAK,WACH,OAAO7T,KAAKw2B,OAASx2B,KAAK02B,SAASC,KAAO32B,KAAK02B,SAASE,OAE1DK,YAAY,EACZC,cAAc,IAEhB/2B,OAAO62B,eAAev2B,EAAS,SAAU,CAOvCoT,IAAK,WACH,OAAO7T,KAAKy2B,QAAUz2B,KAAK02B,SAASG,IAAM72B,KAAK02B,SAASI,QAE1DG,YAAY,EACZC,cAAc,IAEhB/2B,OAAO62B,eAAev2B,EAAS,UAAW,CAWxCoT,IAAK,WACH,OAAO7T,KAAK02B,UAEdO,YAAY,EACZC,cAAc,IAYhBz2B,EAAQ02B,QAAU,SAAUp3B,GAC1B,IAAIq3B,EAAQr3B,EAAGq3B,MACXC,EAASt3B,EAAGs3B,OACZvV,EAAK9hB,KAAKu2B,IACVe,EAAUt3B,KAAK02B,SACfa,EAAoBv3B,KAAK+2B,mBAE7B,GAAa,MAATK,EACF,GAAIlD,GAASkD,GACXtV,EAAG7d,MAAMmzB,MAAQA,MACZ,CACL,IAAII,EAAWD,EAAoBH,EAAQE,EAAQX,KAAOW,EAAQV,MAAQQ,EAC1EtV,EAAG7d,MAAMmzB,MAAQI,EAAW,KAIhC,GAAc,MAAVH,EACF,GAAInD,GAASmD,GACXvV,EAAG7d,MAAMozB,OAASA,MACb,CACL,IAAII,EAAYF,EAAoBF,EAASC,EAAQT,IAAMS,EAAQR,OAASO,EAC5EvV,EAAG7d,MAAMozB,OAASI,EAAY,KAIlCz3B,KAAK03B,UAQPj3B,EAAQi3B,OAAS,WACf,IAAI5V,EAAK9hB,KAAKu2B,IACVoB,EAAUzB,GAASpU,GACvB9hB,KAAKw2B,OAAS1U,EAAG8V,YACjB53B,KAAKy2B,QAAU3U,EAAG+V,aAClB73B,KAAK02B,SAAW,CACdC,KAAM7B,WAAW6C,EAAQG,aACzBlB,MAAO9B,WAAW6C,EAAQI,cAC1BlB,IAAK/B,WAAW6C,EAAQK,YACxBlB,OAAQhC,WAAW6C,EAAQM,gBAE7Bj4B,KAAK+2B,mBAA2C,eAAtBY,EAAQO,WAG7B5B,EAnIT,GA0II6B,GAAQ,CACVC,KAAM,OACNC,OAAQ,SACRC,QAAS,UACTC,cAAe,eACfC,OAAQ,WAWV,SAAWpH,GACTA,EAAWA,EAAiB,KAAI,GAAK,OACrCA,EAAWA,EAAoB,QAAI,GAAK,UACxCA,EAAWA,EAAqB,SAAI,GAAK,WACzCA,EAAWA,EAAsB,UAAI,GAAK,YAC1CA,EAAWA,EAAqB,SAAI,GAAK,WAL3C,CAMGA,KAAeA,GAAa,KAQ/B,IAAI,GAEJ,WACE,SAASqH,IACPz4B,KAAK04B,OAAS,EAGhB,IAAIj4B,EAAUg4B,EAAM/3B,UA6HpB,OA5HAP,OAAO62B,eAAev2B,EAAS,QAAS,CAOtCoT,IAAK,WACH,OAAO7T,KAAK04B,QAEdzB,YAAY,EACZC,cAAc,IAShBz2B,EAAQk4B,QAAU,SAAUC,GAC1B54B,KAAK04B,OAASE,EAAUF,QAc1Bj4B,EAAQo4B,OAAS,SAAUC,KAc3Br4B,EAAQs4B,SAAW,SAAUD,KAc7Br4B,EAAQu4B,UAAY,SAAUF,KAc9Br4B,EAAQw4B,eAAiB,SAAUH,KAanCr4B,EAAQy4B,SAAW,SAAUJ,KAG7Br4B,EAAQ04B,uBAAyB,SAAUL,GACzC,IAAIM,EAAWN,EAAIM,SACfC,EAAYP,EAAIO,UAChBC,EAAYR,EAAIQ,UAChB7T,EAAQ4T,EAAU5T,MAAkB,MAExC,GAAKA,EAAL,CAIAzlB,KAAK04B,QAAUjT,EACf,IAAI8T,EAASH,EAASG,OAClBC,EAAeD,EAAO1H,SACtBA,EAAWwH,EAAU5X,IAAgB,MACrCgY,EAAcL,EAASM,gBAAkB7D,GAAkBhE,EAAU0H,EAAOtY,MAAMM,IAAKgY,EAAOtY,MAAMK,KAAOuQ,EAC1G0H,EAAOI,OAAOF,GACnB,IAAIG,EAAY,IAAI,EAAe9H,GAAOO,KAAM,CAC9C1M,UAAW0T,EAAU1T,UACrByD,QAASppB,KAAKopB,QACdnhB,UAAW,GAAa,EAAGoxB,EAAU5T,MAAkB,OACvD4T,UAAWA,IAEbD,EAASp4B,QAAQ44B,GAEbA,EAAUh5B,eAEP24B,EAAOI,OAAOH,GACnBF,EAAUlI,GAAWyI,aAIlBpB,EAlIT,GA2II,GAEJ,SAAU1d,GAGR,SAAS+e,IACP,IAAIl4B,EAAmB,OAAXmZ,GAAmBA,EAAOtZ,MAAMzB,KAAMR,YAAcQ,KAkBhE,OATA4B,EAAMwnB,SAAU,EAQhBxnB,EAAMm4B,WAAY,EACXn4B,EArBT,GAAUk4B,EAAW/e,GAwBrB,IAAIta,EAAUq5B,EAAUp5B,UAoDxB,OAlDAD,EAAQk4B,QAAU,WAChB34B,KAAK04B,OAAS,GAGhBj4B,EAAQo4B,OAAS,SAAUC,GAEzB,IAAIM,EAAWN,EAAIM,SACfC,EAAYP,EAAIO,UAChBC,EAAYR,EAAIQ,UAEpB,GAAIF,EAASY,SAASC,YAAc,EAClCX,EAAUlI,GAAWyI,cADvB,CAKA,IAAIK,EAAiB,IAAI,EAAepI,GAAOI,WAAY,CACzDmH,UAAWA,IAEbD,EAASp4B,QAAQk5B,GAEbA,EAAet5B,aACjB04B,EAAUlI,GAAWyI,UAErBP,EAAUlI,GAAW+I,WAKzB15B,EAAQs4B,SAAW,SAAUD,GAC3B,IAAIM,EAAWN,EAAIM,SACfC,EAAYP,EAAIO,UAChBC,EAAYR,EAAIQ,UAEhBc,EADahB,EAASiB,QAAQC,WACAF,iBAC9BG,EAAiB,IAAI,EAAezI,GAAOM,WAAY,CACzDzM,UAAW0T,EAAU1T,UACrByD,QAASppB,KAAKopB,QACdnhB,UAAW,GAAamyB,EAAiBlvB,MAAOkvB,EAAiBjvB,KACjEkuB,UAAWA,IAEbD,EAASp4B,QAAQu5B,GAEbA,EAAe35B,aACjB04B,EAAUlI,GAAWyI,UAGrBP,EAAUlI,GAAWoJ,WAAWzB,SAASD,IAItCgB,EA7ET,CA8EE,IAQE,GAEJ,SAAU/e,GAGR,SAAS0f,IACP,IAAI74B,EAAmB,OAAXmZ,GAAmBA,EAAOtZ,MAAMzB,KAAMR,YAAcQ,KAmBhE,OAVA4B,EAAMwnB,SAAU,EAQhBxnB,EAAMm4B,WAAY,EAClBn4B,EAAM84B,cAAgB,KACf94B,EAtBT,GAAU64B,EAAc1f,GAyBxB,IAAIta,EAAUg6B,EAAa/5B,UAsH3B,OApHAD,EAAQs4B,SAAW,SAAUD,GAC3B,IAAIM,EAAWN,EAAIM,SACfC,EAAYP,EAAIO,UAChBC,EAAYR,EAAIQ,UAChBtmB,EAAaqmB,EAAUrmB,WACvBnI,EAASuuB,EAASuB,WAAa3nB,EAAW+b,QAAU/b,EAAWgc,QAC/DuL,EAAiB,IAAI,EAAezI,GAAOM,WAAY,CACzDzM,UAAW0T,EAAU1T,UACrByD,QAASppB,KAAKopB,QACdnhB,UAAW,GAAa,GAAI4C,GAC5BwuB,UAAWA,IAEbD,EAASp4B,QAAQu5B,GAEbA,EAAe35B,aACjB04B,EAAUlI,GAAWyI,UAGrBP,EAAUlI,GAAWwJ,UAAU7B,SAASD,IAI5Cr4B,EAAQu4B,UAAY,SAAUF,GAC5B,IAAIM,EAAWN,EAAIM,SACfC,EAAYP,EAAIO,UAChBC,EAAYR,EAAIQ,UAKpB,GAJAF,EAASp4B,QAAQ,IAAI,EAAe8wB,GAAOK,SAAU,CACnDkH,UAAWA,KAGiB,IAA1BA,EAAU5T,MAAMoV,MAUlB,OAJAxB,EAAU5S,MAAM,CACdoU,MAAOzB,EAASG,OAAO1H,UACtB,QACHyH,EAAUlI,GAAW0J,MAMvB96B,KAAK06B,cAAgBrB,GAGvB54B,EAAQy4B,SAAW,SAAUJ,GAC3B,IAAIh5B,EAAKC,EAELq5B,EAAWN,EAAIM,SAMnB,IAFAE,EAHgBR,EAAIQ,WAGVlI,GAAW0J,MAEhB96B,KAAK06B,cAAV,CAMA,IAKIK,EADA/yB,EAJehI,KAAK06B,cAII1nB,WAAWhL,SAGvC,GAAsB,aAAlBA,EAASiF,KAAqB,CAChC,IACIyE,EADa1J,EACMuJ,eAAe,GACtCwpB,EAAiB/2B,SAASg3B,iBAAiBtpB,EAAMnI,QAASmI,EAAMjI,cAEhEsxB,EAAiB/yB,EAASnF,OAK5B,IAAIo4B,EAAS7B,EAASY,SAASiB,OAC3BC,EAAe,KAEnB,IACE,IAAK,IAAIC,EAAW,GAASF,GAASG,EAAaD,EAASv8B,QAASw8B,EAAWt8B,KAAMs8B,EAAaD,EAASv8B,OAAQ,CAClH,IAAIy8B,EAAQD,EAAWv8B,MAEvB,GAAIw8B,EAAMC,SAASP,GAAiB,CAClCG,EAAeG,EACf,QAGJ,MAAO96B,GACPT,EAAM,CACJR,MAAOiB,GAET,QACA,IACM66B,IAAeA,EAAWt8B,OAASiB,EAAKo7B,EAAS36B,SAAST,EAAGrB,KAAKy8B,GACtE,QACA,GAAIr7B,EAAK,MAAMA,EAAIR,OAIvB,GAAI47B,EAAc,CAChB,IAAIK,EAAiBnC,EAASG,OAAO1H,SACjC2J,EAAuBN,EAAarJ,SACxCuH,EAASp4B,QAAQ,IAAI,EAAe8wB,GAAOa,OAAQ,CACjD/uB,MAAOs3B,EAAat3B,MACpBy3B,MAAOH,EAEPjzB,UAAW,GAAaszB,EAAgBC,SAKvCf,EAhJT,CAiJE,IAQE,GAEJ,SAAU1f,GAGR,SAAS0gB,IACP,IAAI75B,EAAmB,OAAXmZ,GAAmBA,EAAOtZ,MAAMzB,KAAMR,YAAcQ,KAkBhE,OATA4B,EAAMwnB,SAAU,EAQhBxnB,EAAMm4B,WAAY,EACXn4B,EArBT,GAAU65B,EAAe1gB,GAwBzB,IAAIta,EAAUg7B,EAAc/6B,UA6B5B,OA3BAD,EAAQs4B,SAAW,SAAUD,GAC3B94B,KAAKm5B,uBAAuBL,IAG9Br4B,EAAQu4B,UAAY,SAAUF,GAC5B,IAAIM,EAAWN,EAAIM,SACfC,EAAYP,EAAIO,UAChBC,EAAYR,EAAIQ,UAOpB,GAJAF,EAASp4B,QAAQ,IAAI,EAAe8wB,GAAOK,SAAU,CACnDkH,UAAWA,KAGTD,EAASY,SAASC,YAAc,EAElCX,EAAUlI,GAAW0J,UAFvB,CAMAxB,EAAUlI,GAAWoJ,WACrB,IAAIH,EAAUjB,EAASiB,QACnBxI,EAAWwH,EAAUrY,QAAoB,MACzCgE,EAAW5gB,KAAKkd,IAAI+X,EAAUrU,SAAUoU,EAASpU,UAChDqV,EAAQqB,eAAe7J,EAAU7M,EAAUqU,KAG3CoC,EAtDT,CAuDE,IAQE,GAEJ,SAAU1gB,GAGR,SAAS4gB,IACP,IAAI/5B,EAAmB,OAAXmZ,GAAmBA,EAAOtZ,MAAMzB,KAAMR,YAAcQ,KAkBhE,OATA4B,EAAMwnB,SAAU,EAQhBxnB,EAAMm4B,WAAY,EACXn4B,EArBT,GAAU+5B,EAAgB5gB,GAwB1B,IAAIta,EAAUk7B,EAAej7B,UAsC7B,OApCAD,EAAQo4B,OAAS,SAAUC,GACzB,IAAIM,EAAWN,EAAIM,SACfC,EAAYP,EAAIO,UAChBC,EAAYR,EAAIQ,UACpBt5B,KAAK04B,OAAS,EACdU,EAASiB,QAAQuB,cACjB,IAAI1B,EAAiB,IAAI,EAAepI,GAAOI,WAAY,CACzDmH,UAAWA,IAEbD,EAASp4B,QAAQk5B,GAEbA,EAAet5B,aACjB04B,EAAUlI,GAAWyI,UAErBP,EAAUlI,GAAWwJ,WAIzBn6B,EAAQs4B,SAAW,SAAUD,GAC3B94B,KAAKm5B,uBAAuBL,IAG9Br4B,EAAQy4B,SAAW,SAAUJ,GAC3B,IAAIM,EAAWN,EAAIM,SACfC,EAAYP,EAAIO,WAEpBC,EADgBR,EAAIQ,WACVlI,GAAW0J,MACrB,IACIV,EADahB,EAASiB,QAAQC,WACAF,iBAClChB,EAASp4B,QAAQ,IAAI,EAAe8wB,GAAOQ,SAAU,CACnD3M,UAAW0T,EAAU1T,UACrB1d,UAAW,GAAamyB,EAAiBlvB,MAAOkvB,EAAiBjvB,KACjEkuB,UAAWA,MAIRsC,EA/DT,CAgEE,IAQEE,GAEJ,SAAU9gB,GAGR,SAAS8gB,IACP,IAAIj6B,EAAmB,OAAXmZ,GAAmBA,EAAOtZ,MAAMzB,KAAMR,YAAcQ,KAkBhE,OATA4B,EAAMwnB,SAAU,EAQhBxnB,EAAMm4B,WAAY,EACXn4B,EArBT,GAAUi6B,EAAe9gB,GAwBzB,IAAIta,EAAUo7B,EAAcn7B,UAwB5B,OAtBAD,EAAQw4B,eAAiB,SAAUH,IAEjCQ,EADgBR,EAAIQ,WACVlI,GAAW0J,OAGvBr6B,EAAQs4B,SAAW,SAAUD,GAC3B,IAAIO,EAAYP,EAAIO,UAChBC,EAAYR,EAAIQ,UAEpBD,EAAU14B,OACV24B,EAAUlI,GAAW0J,OAGvBr6B,EAAQu4B,UAAY,SAAUF,GAC5B,IAAIO,EAAYP,EAAIO,UAChBC,EAAYR,EAAIQ,UAEU,IAA1BD,EAAU5T,MAAMoV,OAClBvB,EAAUlI,GAAW0J,OAIlBe,EAjDT,CAkDE,IAMEC,GAEJ,WACE,SAASA,IACP,IAAIl6B,EAAQ5B,KAEZA,KAAKs5B,UAAY,SAAUyC,GACzB,IAAIC,EAEJ,OAAQD,GACN,KAAK3K,GAAW0J,KACdkB,EAAY,IAAI,GAChB,MAEF,KAAK5K,GAAW+I,QACd6B,EAAY,IAAI,GAChB,MAEF,KAAK5K,GAAWwJ,SACdoB,EAAY,IAAI,GAChB,MAEF,KAAK5K,GAAWoJ,UACdwB,EAAY,IAAI,GAChB,MAEF,KAAK5K,GAAWyI,SACdmC,EAAY,IAAIH,GAMpB,OAFAG,EAAUrD,QAAQ/2B,EAAMq6B,QACxBr6B,EAAMq6B,OAASD,EACRp6B,EAAMq6B,QAGfj8B,KAAKi8B,OAAS,IAAI,GAGpB,IAAIx7B,EAAUq7B,EAAap7B,UAuC3B,OAtCAP,OAAO62B,eAAev2B,EAAS,QAAS,CACtCoT,IAAK,WACH,OAAO7T,KAAKi8B,QAEdhF,YAAY,EACZC,cAAc,IAGhBz2B,EAAQy7B,KAAO,SAAUt8B,EAAWu8B,GAClC,IAAIC,EAAep8B,KAAKi8B,OAEpBnD,EAAM,GAAS,GAAS,GAAIqD,GAAc,CAC5C7C,UAAWt5B,KAAKs5B,YAGlB,OAAQ15B,GACN,KAAKu4B,GAAMC,KACTgE,EAAavD,OAAOC,GACpB,MAEF,KAAKX,GAAME,OACT+D,EAAarD,SAASD,GACtB,MAEF,KAAKX,GAAMG,QACT8D,EAAapD,UAAUF,GACvB,MAEF,KAAKX,GAAMI,cACT6D,EAAanD,eAAeH,GAC5B,MAEF,KAAKX,GAAMK,OACT4D,EAAalD,SAASJ,KAKrBgD,EA5ET,GAyFI,GAEJ,WAEE,SAASO,IACP,IAAIz6B,EAAQ5B,KAEZA,KAAKs8B,YAAc,WACjB16B,EAAM26B,UAAW,GAGnBv8B,KAAKw8B,cAAgB,WACnB56B,EAAM26B,UAAW,GAGnBv8B,KAAKy8B,yBAA2B,SAAUt9B,GACpCyC,EAAM26B,WACRp9B,EAAEkJ,iBACFlJ,EAAEgwB,mBAGJvtB,EAAM26B,UAAW,GAGnBv8B,KAAK08B,uBAEL18B,KAAK28B,cAAgB,IAAIb,GAG3B,IAAIr7B,EAAU47B,EAAe37B,UAqY7B,OApYAP,OAAO62B,eAAev2B,EAAS,OAAQ,CAQrCoT,IAAK,WACH,OAAO7T,KAAK48B,OAEd3F,YAAY,EACZC,cAAc,IAEhB/2B,OAAO62B,eAAev2B,EAAS,QAAS,CAMtCoT,IAAK,WACH,OAAO7T,KAAK28B,cAAc5oB,OAE5BkjB,YAAY,EACZC,cAAc,IAEhB/2B,OAAO62B,eAAev2B,EAAS,mBAAoB,CAUjDoT,IAAK,WACH,OAAO7T,KAAK68B,mBAEd5F,YAAY,EACZC,cAAc,IAEhB/2B,OAAO62B,eAAev2B,EAAS,gBAAiB,CAM9CoT,IAAK,WACH,IAAIgS,EAAO7lB,KAAK48B,MAEhB,IAAK/W,EACH,MAAO,CACL5E,MAAO,CACLM,IAAK,EACLD,IAAK,GAEPuQ,SAAU,EACV3Q,UAAU,GAId,IAAI+I,EAAOpE,EAAKoE,KAAiB,MACjC,MAAO,CACLhJ,MAAO,CACLM,IAAK0I,EAAKhJ,MAAM,GAChBK,IAAK2I,EAAKhJ,MAAM,IAElBC,SAAU+I,EAAK/I,SAAS,GACxB2Q,SAAU7xB,KAAK6xB,WAGnBoF,YAAY,EACZC,cAAc,IAEhB/2B,OAAO62B,eAAev2B,EAAS,UAAW,CAOxCoT,IAAK,WACH,IAAI9T,EAAIG,EAER,OAA2F,QAAnFA,EAA+B,QAAzBH,EAAKC,KAAK88B,iBAA8B,IAAP/8B,OAAgB,EAASA,EAAG0uB,kBAA+B,IAAPvuB,GAAgBA,GAErH+2B,YAAY,EACZC,cAAc,IAEhB/2B,OAAO62B,eAAev2B,EAAS,WAAY,CAOzCoT,IAAK,WACH,IAAI9T,EAAIG,EAER,OAA8G,QAAtGA,EAA2B,QAArBH,EAAKC,KAAK48B,aAA0B,IAAP78B,OAAgB,EAASA,EAAG8T,IAAI,CApzB9D,UAozB0F,aAAsB,IAAP3T,EAAgBA,EAAK,GAE7I+2B,YAAY,EACZC,cAAc,IAEhB/2B,OAAO62B,eAAev2B,EAAS,QAAS,CAOtCoT,IAAK,WACH,IAAI9T,EAAIG,EAER,OAAqG,QAA7FA,EAA2B,QAArBH,EAAKC,KAAK48B,aAA0B,IAAP78B,OAAgB,EAASA,EAAGkqB,KAAiB,MAAEhJ,aAA0B,IAAP/gB,EAAgBA,EAAK,CAAC,EAAG,IAExI+2B,YAAY,EACZC,cAAc,IAEhB/2B,OAAO62B,eAAev2B,EAAS,SAAU,CAOvCoT,IAAK,WACH,IAAI9T,EAEJ,OAA6B,QAArBA,EAAKC,KAAK48B,aAA0B,IAAP78B,OAAgB,EAASA,EAAGkqB,KAAiB,MAAE9I,QAEtF8V,YAAY,EACZC,cAAc,IAUhBz2B,EAAQsN,KAAO,SAAUqrB,GACvB,IAAIr5B,EAEA6B,EAAQ5B,KAEZA,KAAK+8B,UAAY3D,EACjBp5B,KAAK48B,MAAQ,IAAI,KAAM78B,EAAK,IAAmB,MAAI,CACjDkhB,MAAO,CAAC,EAAG,GACXC,UAAU,EACVC,OAAQ,CAAC,EAAG,IACXphB,GAAK,CACNmlB,aAAckU,EAASlU,aACvB4E,cAAesP,EAAStP,cACxBlC,OAAQwR,EAASxR,SAEnB5nB,KAAK88B,UAAY,IAAI,GAAS1D,EAAS4D,SAASj2B,QAAS,CACvDilB,UAAWoN,EAASpN,UACpBuB,sBAAuB6L,EAAS7L,sBAChChiB,MAAO6tB,EAASuB,WAAa,EAAE,EAAG,GAAK,CAAC,GAAI,GAC5CnN,iBAAiB,IAEnB,IAAI3H,EAAO7lB,KAAK48B,MAChB/W,EAAKkG,QAAQqN,EAASuB,WAAa,CAr3BpB,QAq3BmC,IAAM,CAAC,GAr3B1C,SAq3B6D36B,KAAK88B,WAEjF,IAAIG,EAAU,SAAU38B,GACtB,IAAIV,EAAYu4B,GAAM73B,GACtBulB,EAAK5jB,GAAGrC,GAAW,SAAUT,GAC3ByC,EAAM+6B,cAAcT,KAAKt8B,EAAW,CAClCw5B,SAAUA,EACVC,UAAWl6B,QAKjB,IAAK,IAAImB,KAAO63B,GACd8E,EAAQ38B,GAGV,OAAON,MASTS,EAAQ0N,QAAU,WAChB,IAAIpO,EAAIG,EAERF,KAAKk9B,4BACiB,QAArBn9B,EAAKC,KAAK48B,aAA0B,IAAP78B,GAAyBA,EAAGoO,UAChC,QAAzBjO,EAAKF,KAAK88B,iBAA8B,IAAP58B,GAAyBA,EAAGiO,UAE9DnO,KAAK08B,wBAUPj8B,EAAQ+G,OAAS,WACf,IAAIzH,EAGJ,OAD0B,QAAzBA,EAAKC,KAAK88B,iBAA8B,IAAP/8B,GAAyBA,EAAGyH,SACvDxH,MAUTS,EAAQ+tB,QAAU,WAChB,IAAIzuB,EAGJ,OAD0B,QAAzBA,EAAKC,KAAK88B,iBAA8B,IAAP/8B,GAAyBA,EAAGyuB,UACvDxuB,MAaTS,EAAQ0G,OAAS,SAAUg2B,GACzB,IAAIp9B,EAEAq5B,EAAWzF,GAAoB3zB,KAAK+8B,UAAW,WAC/CxD,EAASH,EAASG,OAClB1T,EAAO7lB,KAAK48B,MACZ3S,EAAOpE,EAAKoE,KAAiB,MAKjC,OAJAA,EAAK/I,SAAW,CAACic,EAAcjc,SAAUic,EAAcjc,UACvD+I,EAAKhJ,MAAQ,CAACkc,EAAclc,MAAMM,IAAK4b,EAAclc,MAAMK,KAC3D2I,EAAK9I,OA/yCS,SAAUA,EAAQ6S,GAClC,IAAIoJ,EAEJ,GAAIhtB,MAAMqD,QAAQ0N,GAChBic,EAAejc,EAAOyB,KAAI,SAAUnd,GAClC,OAAO0uB,GAAoB1uB,EAAKuuB,UAE7B,CACL,IAAIqJ,EAAYlJ,GAAoBhT,EAAQ6S,GAC5CoJ,EAAe,CAACC,EAAWA,GAG7B,OAAOD,EAAaxa,KAAI,SAAUnd,GAChC,GAAW,MAAPA,EACF,MAAM,IAAI4rB,GAAcG,GAAqB,SAAUrQ,GAASoQ,IAGlE,OAAO9rB,KA8xCO63B,CAAYlE,EAASjY,OAAQoY,EAAOvF,MAClDnO,EAAKnB,IAAI9d,MAAK7G,EAAK,IAAmB,MAAIo9B,EAActL,SAAU9xB,IAC3DC,MASTS,EAAQ88B,uBAAyB,WAC/B,IAAInE,EAAWzF,GAAoB3zB,KAAK+8B,UAAW,WAC/ClX,EAAO7lB,KAAK48B,MACZY,EAAWpE,EAASG,OAAOxyB,QAI/B,OAHA8e,EAAK5jB,GAAGk2B,GAAMC,KAAMp4B,KAAKs8B,aACzBzW,EAAK5jB,GAAGk2B,GAAME,OAAQr4B,KAAKw8B,eAC3BgB,EAAStwB,iBAAiB,QAASlN,KAAKy8B,0BAA0B,GAC3Dz8B,MASTS,EAAQy8B,0BAA4B,WAClC,IAAI9D,EAAWzF,GAAoB3zB,KAAK+8B,UAAW,WAC/ClX,EAAO7lB,KAAK48B,MACZY,EAAWpE,EAASG,OAAOxyB,QAI/B,OAHA8e,EAAK7jB,IAAIm2B,GAAMC,KAAMp4B,KAAKs8B,aAC1BzW,EAAK7jB,IAAIm2B,GAAME,OAAQr4B,KAAKw8B,eAC5BgB,EAASpwB,oBAAoB,QAASpN,KAAKy8B,0BAA0B,GAC9Dz8B,MAyBTS,EAAQ6lB,UAAY,SAAUuL,EAAU7M,EAAUqU,GAChD,IAAIt5B,EAEA6B,EAAQ5B,KAER6lB,EAAO7lB,KAAK48B,MAEhB,IAAK/W,EACH,OAAO+J,QAAQE,OAAO,IAAIuB,GAAcG,GAAiC,WAAYD,KAGvF,IAAI3F,EAAW/F,EAAKhS,IAAI,CA7gCT,UA6gCqC,MAEpD,GAAI+X,IAAaiG,EAEf,OADIuH,EAAWzF,GAAoB3zB,KAAK+8B,UAAW,YACnCxD,OAAOI,OAAO9H,GAGhC7xB,KAAK68B,kBAAoB,CACvB3xB,MAAO0gB,EACPzgB,IAAK0mB,EACLhnB,OAAQ,GAGV,IAAI4yB,EAAU,WACZ,IAAI19B,EAAIG,EAUR2lB,EAAKnkB,KAAKy2B,GAAMK,QARG,WACjB52B,EAAMi7B,kBAAoB,CACxB3xB,MAAO,EACPC,IAAK,EACLN,OAAQ,MAMRwuB,EACFA,EAAU5S,QAAO1mB,EAAK,IAAmB,MAAI8xB,EAAU9xB,GAAKilB,GAE5Da,EAAKY,QAAOvmB,EAAK,IAAmB,MAAI2xB,EAAU3xB,GAAK8kB,IAI3D,GAAiB,IAAbA,EAAgB,CAClB,IAAIoU,EACAG,GADAH,EAAWzF,GAAoB3zB,KAAK+8B,UAAW,YAC7BxD,OACtBkE,IACA,IAAIC,EAAStE,EAASM,gBAAkB7D,GAAkBhE,EAAU0H,EAAOtY,MAAMM,IAAKgY,EAAOtY,MAAMK,KAAOuQ,EAE1G,OADAhM,EAAKnB,IAAI9d,MAAK7G,EAAK,IAAmB,MAAI29B,EAAQ39B,IAC3C6vB,QAAQC,UAEf,OAAO,IAAID,SAAQ,SAAUC,EAASC,GACpC,IAAI6N,EAAyB,WAC3B9X,EAAK7jB,IAAIm2B,GAAMC,KAAMwF,GACrB/N,KAGE+N,EAAsB,WACxB/X,EAAK7jB,IAAIm2B,GAAMK,OAAQmF,GACvB7N,EAAO,IAAIuB,GAAcG,GAA+BD,MAG1D1L,EAAKnkB,KAAKy2B,GAAMK,OAAQmF,GACxB9X,EAAKnkB,KAAKy2B,GAAMC,KAAMwF,GACtBH,QAKNh9B,EAAQi8B,qBAAuB,WAC7B18B,KAAK+8B,UAAY,KACjB/8B,KAAK48B,MAAQ,KACb58B,KAAK88B,UAAY,KACjB98B,KAAK68B,kBAAoB,CACvB3xB,MAAO,EACPC,IAAK,EACLN,OAAQ,GAEV7K,KAAKu8B,UAAW,GAGXF,EAhaT,GAwaI,GAEJ,WAEE,SAASwB,IACP79B,KAAK+8B,UAAY,KACjB/8B,KAAK89B,YAAc,IAAI,GACvB99B,KAAK+9B,aAAe,KAGtB,IAAIt9B,EAAUo9B,EAAQn9B,UAoYtB,OAnYAP,OAAO62B,eAAev2B,EAAS,aAAc,CAO3CoT,IAAK,WACH,OAAO7T,KAAK89B,aAEd7G,YAAY,EACZC,cAAc,IAEhB/2B,OAAO62B,eAAev2B,EAAS,cAAe,CAQ5CoT,IAAK,WACH,IAAI9T,EAAIG,EAER,OAAyF,QAAjFA,EAAkC,QAA5BH,EAAKC,KAAK+9B,oBAAiC,IAAPh+B,OAAgB,EAASA,EAAG6D,aAA0B,IAAP1D,EAAgBA,GAAM,GAEzH+2B,YAAY,EACZC,cAAc,IAEhB/2B,OAAO62B,eAAev2B,EAAS,cAAe,CAO5CoT,IAAK,WACH,OAAO7T,KAAK+9B,cAEd9G,YAAY,EACZC,cAAc,IAEhB/2B,OAAO62B,eAAev2B,EAAS,YAAa,CAO1CoT,IAAK,WACH,OAAO7T,KAAK89B,YAAY/pB,MAAMgmB,WAEhC9C,YAAY,EACZC,cAAc,IAEhB/2B,OAAO62B,eAAev2B,EAAS,UAAW,CAOxCoT,IAAK,WACH,OAAO7T,KAAK89B,YAAY/pB,MAAMqV,SAEhC6N,YAAY,EACZC,cAAc,IAUhBz2B,EAAQsN,KAAO,SAAUqrB,GAKvB,OAJAp5B,KAAK+8B,UAAY3D,EAEjBp5B,KAAK89B,YAAY/vB,KAAKqrB,GAEfp5B,MASTS,EAAQ0N,QAAU,WAChBnO,KAAK89B,YAAY3vB,UAEjBnO,KAAK+8B,UAAY,KACjB/8B,KAAK+9B,aAAe,MAUtBt9B,EAAQ+G,OAAS,WAGf,OAFAxH,KAAK89B,YAAYt2B,SAEVxH,MAUTS,EAAQ+tB,QAAU,WAGhB,OAFAxuB,KAAK89B,YAAYtP,UAEVxuB,MAcTS,EAAQu9B,eAAiB,SAAUC,GACjC,OAAO1O,GAAUvvB,UAAM,OAAQ,GAAQ,WACrC,IAAIo5B,EAAUG,EAAQ2E,EACtB,OAAO/N,GAAYnwB,MAAM,SAAUD,GACjC,OAAQA,EAAGywB,OACT,KAAK,EAIH,OAHA4I,EAAWzF,GAAoB3zB,KAAK+8B,UAAW,WAC/CxD,EAASH,EAASG,QAClB2E,EAAcl+B,KAAK+9B,cAIZ,CAAC,EAENxE,EAAOI,OAAOJ,EAAO4E,yBAAyBD,EAAYrM,YALnC,CAAC,EAExB,GAKJ,KAAK,EACH9xB,EAAG0wB,OAEH1wB,EAAGywB,MAAQ,EAEb,KAAK,EACH,MAAO,CAAC,WAelB/vB,EAAQm7B,YAAc,WACpB,IACIrC,EADW5F,GAAoB3zB,KAAK+8B,UAAW,WAC7BxD,OAItB,OAFAv5B,KAAK89B,YAAY32B,OAAOoyB,EAAO4D,eAExBn9B,MAUTS,EAAQ29B,YAAc,WAEpB,OADAp+B,KAAK+9B,aAAe,KACb/9B,MA0CTS,EAAQ49B,YAAc,SAAUhD,EAAOt7B,GACrC,IAAIilB,EAAWjlB,EAAGilB,SACd9kB,EAAKH,EAAGkI,UACRA,OAAmB,IAAP/H,EAAgBkzB,GAAUC,KAAOnzB,EAC7Cm5B,EAAYt5B,EAAGs5B,UACnB,OAAO9J,GAAUvvB,UAAM,OAAQ,GAAQ,WACrC,IAAIo5B,EAAUG,EAAQ1H,EAAUyM,EAAeC,EAAUC,EAAcC,EACvE,OAAOtO,GAAYnwB,MAAM,SAAUK,GAMjC,OALA+4B,EAAWzF,GAAoB3zB,KAAK+8B,UAAW,WAC/CxD,EAASH,EAASG,OAClB1H,EAAWwJ,EAAMxJ,SACjByM,EAAgB/E,EAAOmF,kBAAkB7M,GAErCwJ,EAAMsD,UAAYL,EACb,CAAC,EAEN1O,QAAQE,OAAO,IAAIuB,GAAcG,GAA+B6J,EAAMxJ,UAAWN,OAGhFgI,EAAOqF,SAASvD,GAIVjC,EAASM,kBAClB6E,EAAWv+B,KAAK89B,YAAYjM,SAC5B2M,EAAejF,EAAOsF,UACtBJ,EAAoB,CAAC5M,EAAUA,EAAW2M,EAAc3M,EAAW2M,GAAc/sB,QAAO,SAAUgQ,GAChG,OAAIxZ,IAAcmrB,GAAUC,OACrBprB,IAAcmrB,GAAUH,KAAOxR,GAAO8c,EAAW9c,GAAO8c,MAEjE1M,EAAW4M,EAAkBtZ,QAAO,SAAU2Z,EAAiBrd,GAC7D,OAAIrd,KAAKC,IAAIk6B,EAAW9c,GAAOrd,KAAKC,IAAIk6B,EAAWO,GAC1Crd,EAEAqd,IAER1Z,OAfHyM,EAAWyM,EAAczM,SACzBwJ,EAAQiD,EAAcjD,OAiBxBr7B,KAAK++B,yBAAyB1D,EAAOA,EAAMxJ,SAAUwH,GAE9C,CAAC,EAENr5B,KAAKg/B,mBAAmB,CACxBnN,SAAUA,EACV7M,SAAUA,EACVia,eAAgB5D,EAChBhC,UAAWA,aAMnB54B,EAAQs+B,yBAA2B,SAAU1D,EAAOxJ,EAAUwH,GAC5D,IAAIt5B,EAEAq5B,EAAWzF,GAAoB3zB,KAAK+8B,UAAW,WAC/CmC,EAAkB7D,IAAUr7B,KAAK+9B,aAAejM,GAAOS,YAAcT,GAAOW,aAC5E8G,EAASH,EAASG,OAClB2E,EAAcl+B,KAAK+9B,aACnB98B,EAAQ,IAAI,EAAei+B,EAAiB,CAC9Ct7B,MAAOy3B,EAAMz3B,MACby3B,MAAOA,EACP1V,WAAY0T,aAA6C,EAASA,EAAU1T,aAAc,EAC1F1d,UAAW,GAAuG,QAAzFlI,EAAKm+B,aAAiD,EAASA,EAAYrM,gBAA6B,IAAP9xB,EAAgBA,EAAKw5B,EAAO1H,SAAUA,KAIlK,GAFAuH,EAASp4B,QAAQC,GAEbA,EAAML,aACR,MAAM,IAAIywB,GAAcG,GAA6BD,KAIzD9wB,EAAQu+B,mBAAqB,SAAUj/B,GACrC,IAAI8xB,EAAW9xB,EAAG8xB,SACd7M,EAAWjlB,EAAGilB,SACdia,EAAiBl/B,EAAGk/B,eACpB5F,EAAYt5B,EAAGs5B,UACnB,OAAO9J,GAAUvvB,UAAM,OAAQ,GAAQ,WACrC,IAAIo5B,EAAU+F,EAAc1B,EAAS9X,EAAWyZ,EAE5Cx9B,EAAQ5B,KAEZ,OAAOmwB,GAAYnwB,MAAM,SAAUE,GAUjC,OATAk5B,EAAWzF,GAAoB3zB,KAAK+8B,UAAW,WAC/CoC,EAAen/B,KAAK+9B,aAEpBN,EAAU,WACR,OAAO77B,EAAMk8B,YAAYxX,UAAUuL,EAAU7M,EAAUqU,IAGzD1T,GAAa0T,aAA6C,EAASA,EAAU1T,aAAc,EAEvFX,GAAY,GACdoa,EAAY3B,IAEZz9B,KAAKq/B,WAAWJ,EAAgBE,EAAcxZ,GAEvC,CAAC,EAENyZ,IAEK,CAAC,EAEN3B,IAAUvN,MAAK,WACf,OAAOX,GAAU3tB,OAAO,OAAQ,GAAQ,WACtC,OAAOuuB,GAAYnwB,MAAM,SAAUD,GACjC,OAAQA,EAAGywB,OACT,KAAK,EAGH,OAFAxwB,KAAKq/B,WAAWJ,EAAgBE,EAAcxZ,GAEvC,CAAC,EAENyT,EAASY,SAASsF,UAEtB,KAAK,EAGH,OAFAv/B,EAAG0wB,OAEI,CAAC,aAMf8O,OAAM,SAAUC,GACjB,KAAInG,GAAamG,aAAenO,IAAiBmO,EAAIlO,OAASC,IAC9D,MAAMiO,aAOhB/+B,EAAQ4+B,WAAa,SAAUJ,EAAgBQ,EAAiB9Z,GAC9D,IAAI5lB,EAEAq5B,EAAWzF,GAAoB3zB,KAAK+8B,UAAW,WACnD/8B,KAAK+9B,aAAekB,EACpB7F,EAASG,OAAOmG,uBAEZT,IAAmBQ,EACrBrG,EAASp4B,QAAQ,IAAI,EAAe8wB,GAAOU,QAAS,CAClD5uB,MAAOq7B,EAAer7B,MACtBy3B,MAAO4D,EACPU,UAA8G,QAAlG5/B,EAAK0/B,aAAyD,EAASA,EAAgB77B,aAA0B,IAAP7D,EAAgBA,GAAM,EAC5I6/B,UAAWH,EACX9Z,UAAWA,EACX1d,UAAWw3B,EAAkB,GAAaA,EAAgB5N,SAAUoN,EAAepN,UAAYuB,GAAUC,QAG3G+F,EAASp4B,QAAQ,IAAI,EAAe8wB,GAAOY,SAAU,CACnD/M,UAAWA,MAKVkY,EA5YT,GAmZIgC,GAEJ,WAOE,SAASA,EAAY9/B,GACnB,IAAI6D,EAAQ7D,EAAG6D,MACXiuB,EAAW9xB,EAAG8xB,SACdwJ,EAAQt7B,EAAGs7B,MACfr7B,KAAK8/B,OAASl8B,EACd5D,KAAKmqB,KAAO0H,EACZ7xB,KAAK+/B,OAAS1E,EAGhB,IAAI56B,EAAUo/B,EAAYn/B,UAwC1B,OAvCAP,OAAO62B,eAAev2B,EAAS,QAAS,CAOtCoT,IAAK,WACH,OAAO7T,KAAK8/B,QAEd7I,YAAY,EACZC,cAAc,IAEhB/2B,OAAO62B,eAAev2B,EAAS,WAAY,CAOzCoT,IAAK,WACH,OAAO7T,KAAKmqB,MAEd8M,YAAY,EACZC,cAAc,IAEhB/2B,OAAO62B,eAAev2B,EAAS,QAAS,CAOtCoT,IAAK,WACH,OAAO7T,KAAK+/B,QAEd9I,YAAY,EACZC,cAAc,IAET2I,EAxDT,GAgEIG,GAEJ,SAAUjlB,GAKR,SAASilB,EAAYjgC,GACnB,IACIM,QADY,IAAPN,EAAgB,GAAKA,GAClB4V,MACRA,OAAe,IAAPtV,EAAgB+kB,IAAW/kB,EAEnCuB,EAAQmZ,EAAOrc,KAAKsB,OAASA,KAGjC,OADA4B,EAAMq+B,OAAStqB,EACR/T,EAZT,GAAUo+B,EAAajlB,GAevB,IAAIta,EAAUu/B,EAAYt/B,UAsL1B,OArLAP,OAAO62B,eAAev2B,EAAS,QAAS,CAOtCoT,IAAK,WACH,OAAO7T,KAAKigC,QAEdr5B,IAAK,SAAUnB,GACbzF,KAAKigC,OAASx6B,GAEhBwxB,YAAY,EACZC,cAAc,IAuChBz2B,EAAQi7B,eAAiB,SAAU7J,EAAU7M,EAAUqU,GACrD,OAAO9J,GAAUvvB,UAAM,OAAQ,GAAQ,WACrC,IAAIo5B,EAAUG,EAAQ2G,EAAcC,EAAgBpsB,EAAOqsB,EAAeC,EAAUC,EAAaC,EAAWC,EAC5G,OAAOrQ,GAAYnwB,MAAM,SAAUD,GAOjC,OANAq5B,EAAWzF,GAAoB3zB,KAAK+8B,UAAW,WAC/CxD,EAASH,EAASG,OAClB2G,EAAe3G,EAAOkH,mBACtBN,EAAiB5G,EAAOmF,kBAAkBnF,EAAO1H,UACjD9d,EAAQqlB,EAASiB,QAAQC,WAAWvmB,MAE/BmsB,GAAiBC,GAMtBC,EAAgBpgC,KAAK0gC,mBAAmB7O,EAAUqO,GAClDG,EAAWjH,EAASW,UAAYhmB,EAAM0R,MAAQoM,EAAW0H,EAAO1H,SAChEyO,EAAcl8B,KAAKC,IAAIg8B,GACvBE,EAAYlH,GAA+C,IAAlCA,EAAU5T,MAAkB,MAAUrhB,KAAKC,IAAIg1B,EAAU5T,MAAkB,OAAK6a,EAIvGE,EAFED,GAAaH,GAAiBG,EAAY,EAE7BvgC,KAAK2gC,mBAAmB9O,EAAUsO,GACxCG,GAAelH,EAAS/jB,WAAairB,EAAc,EAE7CtgC,KAAK4gC,oBAAoBP,EAAUF,GAGnCA,EAGjBngC,KAAK++B,yBAAyByB,EAAanF,MAAOxJ,EAAUwH,GAErD,CAAC,EAENr5B,KAAKg/B,mBAAmB,CACxBnN,SAAU0H,EAAO4E,yBAAyBqC,EAAa3O,UACvD7M,SAAUA,EACVia,eAAgBuB,EAAanF,MAC7BhC,UAAWA,MA7BJ,CAAC,EAENzJ,QAAQE,OAAO,IAAIuB,GAAcG,GAA+BK,GAAWN,aAiCrF9wB,EAAQkgC,mBAAqB,SAAU9O,EAAUsO,GAC/C,IAAI/G,EAAWzF,GAAoB3zB,KAAK+8B,UAAW,WAC/CxD,EAASH,EAASG,OAClB5jB,EAAQ3V,KAAKigC,OACbY,EAAatH,EAAO1H,SACpBiP,EAAkBvH,EAAO4E,yBAAyBtM,GAClDkP,EAAmBxH,EAAOyH,0BAA0BF,GAExD,IAAKX,IAAmBY,EACtB,MAAM,IAAI1P,GAAcG,GAA+BK,GAAWN,IAGpE,IAAKlN,SAAS1O,GACZ,OAAOorB,EAGT,IAAI9G,EAAab,EAASa,WACtBgH,EAAU1H,EAAO2H,aACjBC,EAAY/8B,KAAKuwB,KAAK9C,EAAWgP,GAAcz8B,KAAKg9B,MAAMh9B,KAAKC,IAAIwtB,EAAWgP,GAActH,EAAOsF,WAEnGhN,EAAWgP,GAAcE,EAAiBn9B,MAAQu8B,EAAev8B,OAASm9B,EAAiBlP,SAAWsO,EAAetO,UAAYkP,EAAiBn9B,QAAUu8B,EAAev8B,MAC7Ku9B,GAAa,GACJtP,EAAWgP,GAAcE,EAAiBn9B,MAAQu8B,EAAev8B,OAASm9B,EAAiBlP,SAAWsO,EAAetO,UAAYkP,EAAiBn9B,QAAUu8B,EAAev8B,SACpLu9B,GAAa,GAGf,IA92D2Bv9B,EAAO0d,EA82D9B+f,EAAsBF,EAAYlH,EAClCqH,EAAwBP,EAAiBn9B,MAAQy9B,EAErD,GAAIj9B,KAAKC,IAAIi9B,EAAwBnB,EAAev8B,QAAU+R,EAAO,CACnE,IAAI4rB,EAASN,EAAQF,EAAiBn9B,OACtC,OAAO,IAAIi8B,GAAY,CACrBj8B,MAAO29B,EAAO39B,MACdiuB,SAAU0P,EAAO1P,SAAWsP,EAAY5H,EAAOsF,UAC/CxD,MAAOkG,EAAOlG,QAIlB,GAAIjC,EAASM,gBAAiB,CAC5B,IAAI8G,EAAeS,GA33DMr9B,EA23DiBu8B,EAAev8B,MAAQQ,KAAKuwB,KAAK9C,EAAWgP,GAAclrB,EA33DpE2L,EA23D2E2Y,EA13D3Gr2B,GAAS0d,EACJ1d,EAAQ0d,EACN1d,EAAQ,EACV4xB,IAA0B5xB,EAAQ,GAAK0d,EAAM,EAAGA,GAEhD1d,IAs3DD4jB,EAAOpjB,KAAKg9B,MAAMzrB,EAAQskB,GAQ9B,OANIpI,EAAWgP,GAAcL,EAAa58B,MAAQu8B,EAAev8B,MAC/D4jB,GAAQ,EACCqK,EAAWgP,GAAcL,EAAa58B,MAAQu8B,EAAev8B,QACtE4jB,GAAQ,GAGH,IAAIqY,GAAY,CACrBj8B,MAAO48B,EAAa58B,MACpBiuB,SAAU2O,EAAa3O,SAAWrK,EAAO+R,EAAOsF,UAChDxD,MAAOmF,EAAanF,QAGtB,OAAO4F,EAAQvN,GAAMyM,EAAev8B,MAAQQ,KAAKuwB,KAAK9C,EAAWgP,GAAclrB,EAAO,EAAGsrB,EAAQtiC,OAAS,KAI9G8B,EAAQmgC,oBAAsB,SAAUP,EAAUF,GAChD,IAAIpgC,EAGAw5B,EADW5F,GAAoB3zB,KAAK+8B,UAAW,WAC7BxD,OAEtB,OAD2H,QAArGx5B,EAAKsgC,EAAW,EAAI9G,EAAOiI,cAAcrB,GAAkB5G,EAAOkI,cAActB,UAAoC,IAAPpgC,EAAgBA,EAAKogC,GAI1J1/B,EAAQigC,mBAAqB,SAAU7O,EAAUqO,GAC/C,IAAIwB,EAAkB7P,EAAWqO,EAAarO,SAC1CwJ,EAAQ6E,EAAa7E,MACrBsG,EAAYtG,EAAMrH,KAClB4N,EAAWvG,EAAMwG,cAQrB,OAAOH,EAAkBC,EAAYC,EAAWvG,EAAMyG,OAAOljC,KAAOgjC,EAAWvG,EAAMyG,OAAO7L,MAGvF+J,EAtMT,CAuME,IAOE+B,GAEJ,SAAUhnB,GAKR,SAASgnB,EAAYhiC,GACnB,IACIM,QADY,IAAPN,EAAgB,GAAKA,GAClBiiC,WACRA,OAAoB,IAAP3hC,GAAuBA,EAEpCuB,EAAQmZ,EAAOrc,KAAKsB,OAASA,KAGjC,OADA4B,EAAMqgC,YAAcD,EACbpgC,EAZT,GAAUmgC,EAAahnB,GAevB,IAAIta,EAAUshC,EAAYrhC,UAkI1B,OAjIAP,OAAO62B,eAAev2B,EAAS,aAAc,CAO3CoT,IAAK,WACH,OAAO7T,KAAKiiC,aAEdr7B,IAAK,SAAUnB,GACbzF,KAAKiiC,YAAcx8B,GAErBwxB,YAAY,EACZC,cAAc,IAahBz2B,EAAQu9B,eAAiB,SAAUkE,GACjC,OAAO3S,GAAUvvB,UAAM,OAAQ,GAAQ,WACrC,IAAIo5B,EAAUG,EAAQ2E,EAAaiE,EAAY1I,EAC/C,OAAOtJ,GAAYnwB,MAAM,SAAUD,GACjC,OAAQA,EAAGywB,OACT,KAAK,EAIH,OAHA4I,EAAWzF,GAAoB3zB,KAAK+8B,UAAW,WAC/CxD,EAASH,EAASG,QAClB2E,EAAcl+B,KAAK+9B,eAInBoE,EAAajE,EAAYjd,MACzBwY,EAAc0I,EAAW5gB,KAAO4gB,EAAW7gB,IAAM6gB,EAAW5gB,KAAO2gB,EAC5D,CAAC,EAEN3I,EAAOI,OAAOJ,EAAO4E,yBAAyB1E,MAPvB,CAAC,EAExB,GAOJ,KAAK,EACH15B,EAAG0wB,OAEH1wB,EAAGywB,MAAQ,EAEb,KAAK,EACH,MAAO,CAAC,WA6ClB/vB,EAAQi7B,eAAiB,SAAU7J,EAAU7M,EAAUqU,GACrD,OAAO9J,GAAUvvB,UAAM,OAAQ,GAAQ,WACrC,IAAIo5B,EAAUG,EAAQ6I,EAAWrB,EAAkBsB,EACnD,OAAOlS,GAAYnwB,MAAM,SAAUD,GAMjC,OALAq5B,EAAWzF,GAAoB3zB,KAAK+8B,UAAW,WAC/CxD,EAASH,EAASG,OAClB6I,EAAY7I,EAAO4E,yBAAyBtM,IAC5CkP,EAAmBxH,EAAOyH,0BAA0BoB,MAQpDC,EAActB,EAAiB1F,SAEXr7B,KAAK+9B,cACvB/9B,KAAK++B,yBAAyBsD,EAAaxQ,EAAUwH,GAGhD,CAAC,EAENr5B,KAAKg/B,mBAAmB,CACxBnN,SAAU7xB,KAAKiiC,YAAcG,EAAYvQ,EACzC7M,SAAUA,EACVia,eAAgBoD,EAChBhJ,UAAWA,MAjBJ,CAAC,EAENzJ,QAAQE,OAAO,IAAIuB,GAAcG,GAA+BK,GAAWN,aAqB9EwQ,EAlJT,CAmJE,IAOEO,GAEJ,SAAUvnB,GAKR,SAASunB,EAAcviC,GACrB,IACIM,QADY,IAAPN,EAAgB,GAAKA,GAClB4V,MACRA,OAAe,IAAPtV,EAAgB,EAAIA,EAE5BuB,EAAQmZ,EAAOrc,KAAKsB,OAASA,KAYjC,OAVA4B,EAAMy9B,WAAa,SAAUJ,EAAgBQ,EAAiB9Z,GAC5D5K,EAAOra,UAAU2+B,WAAW3gC,KAAKkD,EAAOq9B,EAAgBQ,EAAiB9Z,GAEzE/jB,EAAMg6B,eAGRh6B,EAAMq+B,OAAStqB,EAEf/T,EAAM2gC,mBAEC3gC,EArBT,GAAU0gC,EAAevnB,GAwBzB,IAAIta,EAAU6hC,EAAc5hC,UAiN5B,OAhNAP,OAAO62B,eAAev2B,EAAS,QAAS,CAOtCoT,IAAK,WACH,OAAO7T,KAAKigC,QAEdr5B,IAAK,SAAUnB,GACbzF,KAAKigC,OAASx6B,GAEhBwxB,YAAY,EACZC,cAAc,IAQhBz2B,EAAQ0N,QAAU,WAChB4M,EAAOra,UAAUyN,QAAQzP,KAAKsB,MAE9BA,KAAKuiC,oBAUP9hC,EAAQm7B,YAAc,WACpB,IAAI77B,EAEAq5B,EAAWzF,GAAoB3zB,KAAK+8B,UAAW,WAC/CxD,EAASH,EAASG,OAClBS,EAAWZ,EAASY,SACpBM,EAAat6B,KAAK89B,YAClBX,EAAgB5D,EAAO4D,cACvBxnB,EAAQ3V,KAAKigC,OACb/B,EAAc5D,EAAWvmB,MAAMgmB,UAAiE,QAApDh6B,EAAKw5B,EAAOmF,kBAAkBnF,EAAO1H,iBAA8B,IAAP9xB,OAAgB,EAASA,EAAGs7B,MAAQr7B,KAAK+9B,aAErJ,IAAKG,EAKH,OAJA5D,EAAWnzB,OAAOg2B,GAElBn9B,KAAKuiC,mBAEEviC,KAGT,IAAIwiC,EAAcrF,EAAclc,MAC5B4f,EAAa3C,EAAYrM,SACzB4Q,EAAevE,EAAYt6B,MAC3Bq2B,EAAaD,EAASC,WACtByI,EAAiBD,EAAe9sB,EAChCgtB,EAAiBF,EAAe9sB,EAEhC+sB,EAAiB,IACnBA,EAAiBtJ,EAASM,gBAAkBlE,IAA0BkN,EAAiB,GAAKzI,EAAa,EAAGA,GAAcvG,GAAMgP,EAAgB,EAAGzI,EAAa,IAG9J0I,GAAkB1I,IACpB0I,EAAiBvJ,EAASM,gBAAkBiJ,EAAiB1I,EAAavG,GAAMiP,EAAgB,EAAG1I,EAAa,IAGlH,IAAI2F,EAAY5F,EAASiB,OAAOyH,GAC5BE,EAAY5I,EAASiB,OAAO0H,GAC5BE,EAAUz+B,KAAKkd,IAAIse,EAAU/N,SAAU2Q,EAAYjhB,KACnDsG,EAAUzjB,KAAKmd,IAAIqhB,EAAU/Q,SAAU2Q,EAAYlhB,KA6BvD,OA3BIuhB,EAAUhC,IACZgC,GAAWtJ,EAAOsF,WAGhBhX,EAAUgZ,IACZhZ,GAAW0R,EAAOsF,WAGpB1B,EAAclc,MAAQ,CACpBM,IAAKshB,EACLvhB,IAAKuG,GAGHsV,EAActL,SAAWgR,IAC3B1F,EAActL,UAAY0H,EAAOsF,WAG/B1B,EAActL,SAAWhK,IAC3BsV,EAActL,UAAY0H,EAAOsF,WAGnC1B,EAAcjc,UAAW,EACzBoZ,EAAWnzB,OAAOg2B,GAClBn9B,KAAK8iC,YAAc,CACjBvhB,IAAKqe,EAAUh8B,MACf0d,IAAKshB,EAAUh/B,OAEV5D,MAwCTS,EAAQi7B,eAAiB,SAAU7J,EAAU7M,EAAUqU,GACrD,OAAO9J,GAAUvvB,UAAM,OAAQ,GAAQ,WACrC,IAAIo5B,EAAUG,EAAQ2E,EAAa6E,EAAWC,EAAYR,EAAa1B,EAAiBC,EAAkB8B,EAASI,EAAiBC,EAAgBd,EAAWC,EAAapB,EAASkC,EAAaC,EAAYC,EAAqBC,EAAoB9C,EACvP,OAAOrQ,GAAYnwB,MAAM,SAAUD,GAUjC,OATAq5B,EAAWzF,GAAoB3zB,KAAK+8B,UAAW,WAC/CxD,EAASH,EAASG,OAClB2E,EAAcl+B,KAAK+9B,aACnBgF,EAAY/iC,KAAK89B,YAAY7c,MAC7B+hB,EAAahjC,KAAK8iC,YAClBN,EAAcjJ,EAAOtY,MACrB6f,EAAkBpN,GAAM6F,EAAO4E,yBAAyBtM,GAAWkR,EAAU,GAAIA,EAAU,KAC3FhC,EAAmBxH,EAAOyH,0BAA0BF,KAE1B5C,GAM1B2E,EAAU3E,EAAYrM,SACtBoR,EAAkB7+B,KAAKC,IAAIwtB,EAAWgR,IAAYzJ,EAAS/jB,UAC3D6tB,EAAiBrR,EAAWgR,EAAUtJ,EAAOiI,cAAcT,GAAoBxH,EAAOkI,cAAcV,GACpGE,EAAU1H,EAAO2H,aACjBiC,EAAclC,EAAQ,GACtBmC,EAAanC,EAAQA,EAAQtiC,OAAS,GACtC0kC,EAAsBxR,GAAY2Q,EAAYjhB,KAAO8U,GAAU8M,EAAY9H,MAAMz3B,MAAOo/B,EAAWzhB,IAAKyhB,EAAW1hB,KACnHgiB,EAAqBzR,GAAY2Q,EAAYlhB,KAAO+U,GAAU+M,EAAW/H,MAAMz3B,MAAOo/B,EAAWzhB,IAAKyhB,EAAW1hB,KAE7G+hB,GAAuBC,GACzB9C,EAAe3O,EAAW2Q,EAAYjhB,IAAM4hB,EAAcC,EAC1Df,EAAc7B,EAAanF,MAC3B+G,EAAY5B,EAAa3O,UAChBoR,GAAmBlC,EAAiBlP,WAAaqM,EAAYrM,UAEtEwQ,EAActB,EAAiB1F,MAC/B+G,EAAYrB,EAAiBlP,UACpBoR,GAAmBC,GAAkB7M,GAAU6M,EAAet/B,MAAOo/B,EAAWzhB,IAAKyhB,EAAW1hB,MAEzG+gB,EAAca,EAAe7H,MAC7B+G,EAAYc,EAAerR,WAG3BuQ,EAAY7I,EAAO4E,yBAAyBD,EAAYrM,UACxDwQ,EAAcnE,GAGhBl+B,KAAK++B,yBAAyBsD,EAAaxQ,EAAUwH,GAE9C,CAAC,EAENr5B,KAAKg/B,mBAAmB,CACxBnN,SAAUuQ,EACVpd,SAAUA,EACVia,eAAgBoD,EAChBhJ,UAAWA,MAxCJ,CAAC,EAENzJ,QAAQE,OAAO,IAAIuB,GAAcG,GAA+BK,GAAWN,aA4CrF9wB,EAAQ8hC,iBAAmB,WACzBviC,KAAK8iC,YAAc,CACjBvhB,IAAK,EACLD,IAAK,IAIFghB,EA1OT,CA2OE,IAOE,GAEJ,WAEE,SAASiB,EAAOxjC,GACd,IAAI6B,EAAQ5B,KAGRK,QADY,IAAPN,EAAgB,GAAKA,GAClBg0B,MACRA,OAAe,IAAP1zB,EAAgB2yB,GAAME,OAAS7yB,EAE3CL,KAAKwjC,uBAAyB,WAC5B,IAAI1jC,EAAKC,EAGL0jC,EAAiBz/B,SAAS0/B,gBAAgBz/B,MAC1C0/B,EAAgB,GAEpB,IACE,IAAK,IAAIC,EAAe,GALT,CAAC,kBAAmB,cAAe,eAAgB,aAAc,cAKlCC,EAAiBD,EAAahlC,QAASilC,EAAe/kC,KAAM+kC,EAAiBD,EAAahlC,OAAQ,CAC9I,IAAIklC,EAAoBD,EAAehlC,MAEnCilC,KAAqBL,IACvBE,EAAgBG,IAGpB,MAAOvjC,GACPT,EAAM,CACJR,MAAOiB,GAET,QACA,IACMsjC,IAAmBA,EAAe/kC,OAASiB,EAAK6jC,EAAapjC,SAAST,EAAGrB,KAAKklC,GAClF,QACA,GAAI9jC,EAAK,MAAMA,EAAIR,OAIvB,IAAKqkC,EACH,MAAM,IAAItS,GAAcG,GAAiCD,IAG3D3vB,EAAMmiC,WAAaJ,GAGrB3jC,KAAK+8B,UAAY,KAEjB/8B,KAAK08B,uBAGL18B,KAAKgkC,OAASjQ,EAGhB,IAAItzB,EAAU8iC,EAAO7iC,UA8qBrB,OA7qBAP,OAAO62B,eAAev2B,EAAS,UAAW,CASxCoT,IAAK,WACH,OAAO7T,KAAKu2B,KAEdU,YAAY,EACZC,cAAc,IAEhB/2B,OAAO62B,eAAev2B,EAAS,WAAY,CAOzCoT,IAAK,WACH,OAAO7T,KAAKikC,WAEdhN,YAAY,EACZC,cAAc,IAEhB/2B,OAAO62B,eAAev2B,EAAS,gBAAiB,CAO9CoT,IAAK,WACH,OAAO7T,KAAKkkC,WAEdjN,YAAY,EACZC,cAAc,IAEhB/2B,OAAO62B,eAAev2B,EAAS,SAAU,CAQvCoT,IAAK,WACH,OAAO7T,KAAKmkC,SAEdlN,YAAY,EACZC,cAAc,IAEhB/2B,OAAO62B,eAAev2B,EAAS,QAAS,CAStCoT,IAAK,WACH,OAAO7T,KAAKokC,QAEdnN,YAAY,EACZC,cAAc,IAEhB/2B,OAAO62B,eAAev2B,EAAS,YAAa,CAO1CoT,IAAK,WACH,OAAO7T,KAAKokC,OAAO9iB,IAAMthB,KAAKokC,OAAO7iB,KAEvC0V,YAAY,EACZC,cAAc,IAEhB/2B,OAAO62B,eAAev2B,EAAS,gBAAiB,CAO9CoT,IAAK,WACH,OAAO7T,KAAKqkC,gBAEdpN,YAAY,EACZC,cAAc,IAEhB/2B,OAAO62B,eAAev2B,EAAS,eAAgB,CAS7CoT,IAAK,WACH,MAAO,CACL0N,IAAKvhB,KAAKikC,UAAYjkC,KAAKkkC,UAC3B5iB,IAAKthB,KAAKikC,UAAYjkC,KAAKkkC,UAAYlkC,KAAKg0B,OAGhDiD,YAAY,EACZC,cAAc,IAEhB/2B,OAAO62B,eAAev2B,EAAS,eAAgB,CAO7CoT,IAAK,WACH,OAAO7T,KAAKskC,UAEdrN,YAAY,EACZC,cAAc,IAEhB/2B,OAAO62B,eAAev2B,EAAS,gBAAiB,CAO9CoT,IAAK,WACH,MAAO,CACLoN,MAAOjhB,KAAKokC,OACZvS,SAAU7xB,KAAKikC,UACf/iB,UAAU,IAGd+V,YAAY,EACZC,cAAc,IAEhB/2B,OAAO62B,eAAev2B,EAAS,SAAU,CAOvCoT,IAAK,WACH,OAAO7T,KAAKikC,WAAajkC,KAAKokC,OAAO7iB,KAAOvhB,KAAKikC,WAAajkC,KAAKokC,OAAO9iB,KAE5E2V,YAAY,EACZC,cAAc,IAEhB/2B,OAAO62B,eAAev2B,EAAS,OAAQ,CAOrCoT,IAAK,WACH,IAAIulB,EAAWp5B,KAAK+8B,UACpB,OAAO3D,EAAWA,EAASuB,WAAavB,EAAS4D,SAAS5F,MAAQgC,EAAS4D,SAAS3F,OAAS,GAE/FJ,YAAY,EACZC,cAAc,IAEhB/2B,OAAO62B,eAAev2B,EAAS,WAAY,CASzCoT,IAAK,WACH,IAAIulB,EAAWp5B,KAAK+8B,UAChBlL,EAAW7xB,KAAKikC,UAAYjkC,KAAKmkC,QACjC7F,EAAgBt+B,KAAK0+B,kBAAkB1+B,KAAKikC,WAEhD,IAAK7K,IAAakF,EAChB,OAAOiG,IAGT,IAAIC,EAAelG,EAAcjD,MAC7BoJ,EAAWD,EAAa3S,SAAW2S,EAAa35B,OAChD65B,EAAatL,EAASiB,QAAQC,WAAWnZ,OACzCphB,EAAKC,KAAKihB,MACV0jB,EAAY5kC,EAAGwhB,IACfqjB,EAAY7kC,EAAGuhB,IACfud,EAAY7+B,KAAK6+B,UAErB,GAAIhN,IAAa4S,EACf,OAAOD,EAAa5gC,MAGtB,GAAIiuB,EAAW4S,EAAU,CACvB,IAAI7E,EAAY4E,EAAavO,OACzBuD,EAAeoG,EAAYA,EAAU/N,SAAW+N,EAAU/0B,OAAS85B,EAAYD,EAAW,GAM9F,OAJIlL,EAAeiL,IACjBjL,GAAgBqF,GAGX2F,EAAa5gC,MAAQ,EAAIoyB,GAAYnE,EAAU2H,EAAciL,GAEpE,IAAI7B,EAAY4B,EAAa5lC,OACzBimC,EAAejC,EAAYA,EAAU/Q,SAAW+Q,EAAU/3B,OAAS+5B,EAAYF,EAAW,GAM9F,OAJIG,EAAeJ,IACjBI,GAAgBhG,GAGX2F,EAAa5gC,MAAQoyB,GAAYnE,EAAU4S,EAAUI,IAGhE5N,YAAY,EACZC,cAAc,IAEhB/2B,OAAO62B,eAAev2B,EAAS,QAAS,CAQtCoT,IAAK,WACH,OAAO7T,KAAKgkC,QAGdp9B,IAAK,SAAUnB,GACbzF,KAAKgkC,OAASv+B,GAEhBwxB,YAAY,EACZC,cAAc,IAahBz2B,EAAQsN,KAAO,SAAUqrB,GACvBp5B,KAAK+8B,UAAY3D,EACjB,IAAI0L,EAAa1L,EAAS4D,SAASj2B,QAMnC,OAv2FiB,SAAUlI,EAAOkmC,GACpC,GAAa,MAATlmC,EACF,MAAM,IAAIwyB,GAAcG,GAA0B3yB,EAAOkmC,GAAexT,IAg2FxEyT,CAAeF,EAAWG,kBAAmB,+CAC7CjlC,KAAKu2B,IAAMuO,EAAWG,kBAEtBjlC,KAAKwjC,yBAEExjC,MASTS,EAAQ0N,QAAU,WAKhB,OAJAnO,KAAK+8B,UAAY,KAEjB/8B,KAAK08B,uBAEE18B,MAaTS,EAAQk5B,OAAS,SAAUlY,GACzB,OAAO8N,GAAUvvB,UAAM,OAAQ,GAAQ,WACrC,IAAI6iC,EACJ,OAAO1S,GAAYnwB,MAAM,SAAUD,GACjC,OAAQA,EAAGywB,OACT,KAAK,EAGH,OAFAqS,EAAU7iC,KAAKikC,UACfjkC,KAAKikC,UAAYxiB,EACV,CAAC,EAENzhB,KAAKklC,yBAET,KAAK,EASH,OARAnlC,EAAG0wB,OAEHzwB,KAAKmlC,kBAELnlC,KAAKolC,eAAevC,EAASphB,GAE7BzhB,KAAKqlC,kBAEE,CAAC,WAiBlB5kC,EAAQghC,cAAgB,SAAUF,GAChC,OAAOvhC,KAAKskC,SAAS/C,EAAO39B,MAAQ,IAAM,MAY5CnD,EAAQ+gC,cAAgB,SAAUD,GAChC,OAAOvhC,KAAKskC,SAAS/C,EAAO39B,MAAQ,IAAM,MAY5CnD,EAAQ6kC,mBAAqB,SAAUjK,GACrC,IAAI8G,EAAa9G,EAAMpa,MACvB,OAAQjhB,KAAKikC,UAAY9B,EAAW5gB,MAAQ4gB,EAAW7gB,IAAM6gB,EAAW5gB,MAY1E9gB,EAAQugC,0BAA4B,SAAUnP,GAK5C,OAJc7xB,KAAKskC,SACoB7yB,QAAO,SAAU8vB,GACtD,OAAOA,EAAOlG,MAAMkK,gBAAgB1T,GAAU,MAEhB1M,QAAO,SAAUqgB,EAASjE,GACxD,OAAKiE,GACEphC,KAAKC,IAAImhC,EAAQ3T,SAAWA,GAAYztB,KAAKC,IAAIk9B,EAAO1P,SAAWA,GAAY2T,EADjEjE,IAEpB,OAYL9gC,EAAQi+B,kBAAoB,SAAU7M,GACpC,IAAIoP,EAAUjhC,KAAKskC,SACnB,GAAIrD,EAAQtiC,QAAU,EAAG,OAAO,KAGhC,IAFA,IAAI8mC,EAAWrgB,IAENsgB,EAAY,EAAGA,EAAYzE,EAAQtiC,OAAQ+mC,IAAa,CAC/D,IAAInE,EAASN,EAAQyE,GACjBC,EAAOvhC,KAAKC,IAAIk9B,EAAO1P,SAAWA,GAEtC,GAAI8T,EAAOF,EAET,OAAOxE,EAAQyE,EAAY,GAG7BD,EAAWE,EAIb,OAAO1E,EAAQA,EAAQtiC,OAAS,IASlC8B,EAAQggC,iBAAmB,WACzB,IACImF,EADWjS,GAAoB3zB,KAAK+8B,UAAW,UACxB1C,QAAQuL,YACnC,OAh0FO,SAAUlQ,EAAOK,GAC1B,IAAI8P,EAAK9lC,EAET,IACE,IAAK,IAAI+lC,EAAU,GAASpQ,GAAQqQ,EAAYD,EAAQlnC,QAASmnC,EAAUjnC,KAAMinC,EAAYD,EAAQlnC,OAAQ,CAC3G,IAAI6G,EAAMsgC,EAAUlnC,MAEpB,GAAIk3B,EAAQtwB,GACV,OAAOA,GAGX,MAAOugC,GACPH,EAAM,CACJvmC,MAAO0mC,GAET,QACA,IACMD,IAAcA,EAAUjnC,OAASiB,EAAK+lC,EAAQtlC,SAAST,EAAGrB,KAAKonC,GACnE,QACA,GAAID,EAAK,MAAMA,EAAIvmC,OAIvB,OAAO,KAyyFE,CAAKU,KAAKskC,UAAU,SAAU/C,GACnC,OAAOA,EAAOlG,MAAMz3B,QAAUgiC,MAWlCnlC,EAAQ09B,yBAA2B,SAAUtM,GAC3C,IAAI5Q,EAAQjhB,KAAKokC,OACjB,OAAO1Q,GAAM7B,EAAU5Q,EAAMM,IAAKN,EAAMK,MAU1C7gB,EAAQm+B,SAAW,SAAUvD,GAC3B,IAAIpa,EAAQjhB,KAAKokC,OACjB,GAAI/I,EAAMsD,QAAS,OAAO,EAC1B,IAAI8F,EAAWpJ,EAAMxJ,SACrB,OAAO4S,GAAYxjB,EAAMM,KAAOkjB,GAAYxjB,EAAMK,KAUpD7gB,EAAQwlC,OAAS,SAAU5K,GACzB,IAAI6K,EAAelmC,KAAKkmC,aAExB,OAAO7K,EAAM8K,aAAaD,EAAa3kB,IAAK2kB,EAAa5kB,KAAK,IAUhE7gB,EAAQ2lC,eAAiB,WACvB,IAAIrS,EAAQ/zB,KAAKgkC,OACbqC,EAA4B,iBAAVtS,EAAqBA,EAAMwF,OAASxF,EAE1D,OADA/zB,KAAKkkC,UAAYpQ,GAAauS,EAAUrmC,KAAKg0B,MACtCh0B,MAaTS,EAAQ6lC,cAAgB,WACtB,IACIrL,EADWtH,GAAoB3zB,KAAK+8B,UAAW,UAC7B/C,SAASiB,OAQ/B,OAPAj7B,KAAKskC,SAAWrJ,EAAOrY,KAAI,SAAUyY,EAAOz3B,GAC1C,OAAO,IAAIi8B,GAAY,CACrBj8B,MAAOA,EACPiuB,SAAUwJ,EAAMxJ,SAChBwJ,MAAOA,OAGJr7B,MAaTS,EAAQi/B,qBAAuB,WAC7B,IAAItG,EAAWzF,GAAoB3zB,KAAK+8B,UAAW,UAC/CmB,EAAc9E,EAASiB,QAAQ6D,YAC9B9E,EAASuB,YAAevB,EAASmN,UAAarI,GACnD9E,EAAS4D,SAAS7F,QAAQ,CACxBE,OAAQ6G,EAAY7G,UAIxB52B,EAAQ+lC,aAAe,WACrB,IACIC,EADW9S,GAAoB3zB,KAAK+8B,UAAW,UACnB9B,OAAOxpB,QAAO,SAAU4pB,GACtD,OAAQA,EAAMqL,YAEZ7U,EAAW7xB,KAAKikC,UACpBjkC,KAAKmkC,QAAUsC,EAAiBh1B,QAAO,SAAU4pB,GAC/C,OAAOA,EAAMxJ,SAAWwJ,EAAMxwB,OAASgnB,KACtC1M,QAAO,SAAUta,EAAQwwB,GAC1B,OAAOxwB,EAASwwB,EAAMsL,sBACrB,GAEH3mC,KAAKqlC,mBAUP5kC,EAAQmmC,sBAAwB,WAK9B,OAJA5mC,KAAK6mC,oBAAsB,CACzB5Q,MAAM,EACNr3B,MAAM,GAEDoB,MAGTS,EAAQi8B,qBAAuB,WAC7B18B,KAAKikC,UAAY,EACjBjkC,KAAKkkC,UAAY,EACjBlkC,KAAKmkC,QAAU,EACfnkC,KAAKokC,OAAS,CACZ7iB,IAAK,EACLD,IAAK,GAEPthB,KAAKqkC,eAAiB,GACtBrkC,KAAKskC,SAAW,GAChBtkC,KAAK6mC,oBAAsB,CACzB5Q,MAAM,EACNr3B,MAAM,IAIV6B,EAAQykC,sBAAwB,WAC9B,OAAO3V,GAAUvvB,UAAM,OAAQ,GAAQ,WACrC,IAAIo5B,EAAU6B,EAAQ6L,EAAkBC,EAAmBC,EAAOrI,EAE9D/8B,EAAQ5B,KAEZ,OAAOmwB,GAAYnwB,MAAM,SAAUD,GACjC,OAAQA,EAAGywB,OACT,KAAK,EAcH,OAbA4I,EAAWzF,GAAoB3zB,KAAK+8B,UAAW,UAC/C9B,EAAS7B,EAASY,SAASiB,OAC3B6L,EAAmB7L,EAAOxpB,QAAO,SAAU4pB,GACzC,OAAOz5B,EAAMqkC,OAAO5K,MAEtB0L,EAAoB/mC,KAAKqkC,eACzBrkC,KAAKqkC,eAAiByC,EACtBE,EAAQF,EAAiBr1B,QAAO,SAAU4pB,GACxC,OAAQ5F,GAASsR,EAAmB1L,MAEtCsD,EAAUoI,EAAkBt1B,QAAO,SAAU4pB,GAC3C,OAAQ5F,GAASqR,EAAkBzL,MAE/B2L,EAAMroC,OAAS,GAAKggC,EAAQhgC,OAAS,EAGpC,CAAC,EAENy6B,EAASY,SAASsF,UALkC,CAAC,EAErD,GAKJ,KAAK,EACHv/B,EAAG0wB,OAEH2I,EAASp4B,QAAQ,IAAI,EAAe8wB,GAAOe,eAAgB,CACzDmU,MAAOA,EACPrI,QAASA,EACTsI,cAAeH,KAEjB/mC,EAAGywB,MAAQ,EAEb,KAAK,EACH,MAAO,CAAC,WAQlB/vB,EAAQ0kC,gBAAkB,WACxB,IAAI+B,EAAqBlnC,KAAK6mC,oBAC9B,IAAIK,EAAmBjR,OAAQiR,EAAmBtoC,KAAlD,CACA,IAAIw6B,EAAWzF,GAAoB3zB,KAAK+8B,UAAW,UAC/C9B,EAAS7B,EAASY,SAASiB,OAE/B,GAAIA,EAAOt8B,QAAU,EAenB,OAdKuoC,EAAmBjR,OACtBmD,EAASp4B,QAAQ,IAAI,EAAe8wB,GAAOc,WAAY,CACrD3qB,UAAWmrB,GAAUH,QAEvBiU,EAAmBjR,MAAO,QAGvBiR,EAAmBtoC,OACtBw6B,EAASp4B,QAAQ,IAAI,EAAe8wB,GAAOc,WAAY,CACrD3qB,UAAWmrB,GAAUD,QAEvB+T,EAAmBtoC,MAAO,IAM9B,IAAI28B,EAAiBv7B,KAAKikC,UACtBkD,EAAannC,KAAKg0B,KAClBwO,EAAcxiC,KAAKokC,OACnBgD,EAAqBhO,EAASgO,mBAC9BC,EAAa9L,EAAiBv7B,KAAKkkC,UACnCoD,EAAaD,EAAaF,EAC1BI,EAAatM,EAAO,GACpBuM,EAAYvM,EAAOA,EAAOt8B,OAAS,GAEvC,IAAKuoC,EAAmBjR,MAGlBoR,GAFiBE,EAAWtmB,MAAMM,IAEH6lB,GAAsB7L,GAAkBiH,EAAYjhB,IAAM6lB,KAC3FhO,EAASp4B,QAAQ,IAAI,EAAe8wB,GAAOc,WAAY,CACrD3qB,UAAWmrB,GAAUH,QAEvBiU,EAAmBjR,MAAO,GAI9B,IAAKiR,EAAmBtoC,MAGlB0oC,GAFgBE,EAAUvmB,MAAMK,IAEF8lB,GAAsB7L,GAAkBiH,EAAYlhB,IAAM8lB,KAC1FhO,EAASp4B,QAAQ,IAAI,EAAe8wB,GAAOc,WAAY,CACrD3qB,UAAWmrB,GAAUD,QAEvB+T,EAAmBtoC,MAAO,KAKhC6B,EAAQ2kC,eAAiB,SAAUvC,EAASnF,GAC1C,IAAItE,EAAWzF,GAAoB3zB,KAAK+8B,UAAW,UAC/C9b,EAAQjhB,KAAKokC,OACbqD,EAAkB5E,EAAU5hB,EAAMM,KAAOshB,EAAU5hB,EAAMK,IACzDomB,EAAiBhK,EAASzc,EAAMM,KAAOmc,EAASzc,EAAMK,IAC1D,GAAKmmB,IAAmBC,EAAxB,CACA,IAAIz/B,EAAYy1B,GAAUzc,EAAMM,IAAM6R,GAAUH,KAAOG,GAAUD,KACjEiG,EAASp4B,QAAQ,IAAI,EAAe8wB,GAAOgB,WAAY,CACrD7qB,UAAWA,OAIfxH,EAAQ4kC,gBAAkB,WACxB,IAAIvjB,EAAK9hB,KAAKu2B,IACV6C,EAAWzF,GAAoB3zB,KAAK+8B,UAAW,UAC/C4K,EAAiB3nC,KAAKikC,UAAYjkC,KAAKkkC,UAAYlkC,KAAKmkC,QAC5DriB,EAAG7d,MAAMjE,KAAK+jC,YAAc3K,EAASuB,WAAa,cAAgBgN,EAAiB,MAAQ,iBAAmBA,EAAiB,OAG1HpE,EAjuBT,GAyuBIqE,GAEJ,SAAU7sB,GAGR,SAAS6sB,IACP,OAAkB,OAAX7sB,GAAmBA,EAAOtZ,MAAMzB,KAAMR,YAAcQ,KA6B7D,OAhCA,GAAU4nC,EAAc7sB,GAgBV6sB,EAAalnC,UAEnBmnC,YAAc,WACpB,IAAI9nC,EAAIG,EAGJ85B,EADWrG,GAAoB3zB,KAAK+8B,UAAW,UAC3B/C,SACpBuN,EAAavN,EAAS8N,SAAS,GAC/BN,EAAYxN,EAAS8N,SAAS9N,EAASC,WAAa,GAKxD,OAJAj6B,KAAKokC,OAAS,CACZ7iB,IAA4F,QAAtFxhB,EAAKwnC,aAA+C,EAASA,EAAW1V,gBAA6B,IAAP9xB,EAAgBA,EAAK,EACzHuhB,IAAyF,QAAnFphB,EAAKsnC,aAA6C,EAASA,EAAU3V,gBAA6B,IAAP3xB,EAAgBA,EAAK,GAEjHF,MAGF4nC,EAjCT,CAkCE,IAOEG,GAEJ,SAAUhtB,GAGR,SAASgtB,IACP,IAAInmC,EAAmB,OAAXmZ,GAAmBA,EAAOtZ,MAAMzB,KAAMR,YAAcQ,KAIhE,OAFA4B,EAAMomC,gBAAkB,EACxBpmC,EAAMqmC,kBAAmB,EAClBrmC,EAPT,GAAUmmC,EAAgBhtB,GAU1B,IAAIta,EAAUsnC,EAAernC,UA+P7B,OA9PAP,OAAO62B,eAAev2B,EAAS,SAAU,CACvCoT,IAAK,WACH,OAAO7T,KAAKmkC,QAAUnkC,KAAKgoC,iBAE7B/Q,YAAY,EACZC,cAAc,IAEhB/2B,OAAO62B,eAAev2B,EAAS,gBAAiB,CAC9CoT,IAAK,WACH,MAAO,CACLoN,MAAOjhB,KAAKokC,OACZvS,SAAU7xB,KAAKikC,UACf/iB,SAAUlhB,KAAKioC,mBAGnBhR,YAAY,EACZC,cAAc,IAGhBz2B,EAAQghC,cAAgB,SAAUF,GAChC,IAAKvhC,KAAKioC,kBAAqC,IAAjB1G,EAAO39B,MAAa,OAAOmX,EAAOra,UAAU+gC,cAAc/iC,KAAKsB,KAAMuhC,GACnG,IAAIN,EAAUjhC,KAAKskC,SACfzF,EAAY7+B,KAAK6+B,UACjBuE,EAAanC,EAAQA,EAAQtiC,OAAS,GAC1C,OAAO,IAAIkhC,GAAY,CACrBj8B,MAAOw/B,EAAWx/B,MAClBiuB,SAAUuR,EAAWvR,SAAWgN,EAChCxD,MAAO+H,EAAW/H,SAItB56B,EAAQ+gC,cAAgB,SAAUD,GAChC,IAAIN,EAAUjhC,KAAKskC,SACnB,IAAKtkC,KAAKioC,kBAAoB1G,EAAO39B,QAAUq9B,EAAQtiC,OAAS,EAAG,OAAOoc,EAAOra,UAAU8gC,cAAc9iC,KAAKsB,KAAMuhC,GACpH,IAAI1C,EAAY7+B,KAAK6+B,UACjBsE,EAAclC,EAAQ,GAC1B,OAAO,IAAIpB,GAAY,CACrBj8B,MAAOu/B,EAAYv/B,MACnBiuB,SAAUsR,EAAYtR,SAAWgN,EACjCxD,MAAO8H,EAAY9H,SAIvB56B,EAAQugC,0BAA4B,SAAUnP,GAC5C,IAAK7xB,KAAKioC,iBAAkB,OAAOltB,EAAOra,UAAUsgC,0BAA0BtiC,KAAKsB,KAAM6xB,GACzF,IAAI5Q,EAAQjhB,KAAKokC,OACb8D,EAAkBrS,GAAkBhE,EAAU5Q,EAAMM,IAAKN,EAAMK,KAE/D6mB,EAAgBptB,EAAOra,UAAUsgC,0BAA0BtiC,KAAKsB,KAAMkoC,GAE1E,IAAKC,EAAe,OAAO,KAC3B,IAAItJ,EAAY7+B,KAAK6+B,UAErB,GAAIhN,EAAW5Q,EAAMM,IAAK,CACxB,IAAI4f,GAAa/8B,KAAKg9B,OAAOngB,EAAMM,IAAMsQ,GAAYgN,GAAa,EAClE,OAAO,IAAIgB,GAAY,CACrBj8B,MAAOukC,EAAcvkC,MACrBiuB,SAAUsW,EAActW,SAAWgN,EAAYsC,EAC/C9F,MAAO8M,EAAc9M,QAElB,GAAIxJ,EAAW5Q,EAAMK,IAAK,CAC3B6f,EAAY/8B,KAAKg9B,OAAOvP,EAAW5Q,EAAMK,KAAOud,GAAa,EACjE,OAAO,IAAIgB,GAAY,CACrBj8B,MAAOukC,EAAcvkC,MACrBiuB,SAAUsW,EAActW,SAAWgN,EAAYsC,EAC/C9F,MAAO8M,EAAc9M,QAIzB,OAAO8M,GAGT1nC,EAAQ09B,yBAA2B,SAAUtM,GAE3C,OAAO7xB,KAAKioC,iBAAmBpW,EAAW9W,EAAOra,UAAUy9B,yBAAyBz/B,KAAKsB,KAAM6xB,IAGjGpxB,EAAQm+B,SAAW,SAAUvD,GAC3B,OAAIA,EAAMsD,YACH3+B,KAAKioC,kBACHltB,EAAOra,UAAUk+B,SAASlgC,KAAKsB,KAAMq7B,KAGhD56B,EAAQwlC,OAAS,SAAU5K,GACzB,IAAIpa,EAAQjhB,KAAKokC,OACbvF,EAAY7+B,KAAK6+B,UACjBqH,EAAelmC,KAAKkmC,aAEpBkC,EAAwBrtB,EAAOra,UAAUulC,OAAOvnC,KAAKsB,KAAMq7B,GAE/D,OAAKr7B,KAAKioC,iBAKN/B,EAAa3kB,IAAMN,EAAMM,IACpB6mB,GAAyB/M,EAAM8K,aAAaD,EAAa3kB,IAAMsd,EAAWqH,EAAa5kB,IAAMud,GAAW,GACtGqH,EAAa5kB,IAAML,EAAMK,IAC3B8mB,GAAyB/M,EAAM8K,aAAaD,EAAa3kB,IAAMsd,EAAWqH,EAAa5kB,IAAMud,GAAW,GAG1GuJ,EAVEA,GAuBX3nC,EAAQonC,YAAc,WACpB,IAEI5M,EAFWtH,GAAoB3zB,KAAK+8B,UAAW,UAC3B/C,SACFiB,OAEtB,GAAIA,EAAOt8B,QAAU,EAGnB,OAFAqB,KAAK08B,uBAEE18B,KAGT,IAAIunC,EAAatM,EAAO,GACpBuM,EAAYvM,EAAOA,EAAOt8B,OAAS,GACnC0pC,EAAiBd,EAAWtmB,MAAMM,IAAMgmB,EAAWzF,OAAO7L,KAC1DqS,EAAgBd,EAAUvmB,MAAMK,IAAMkmB,EAAU1F,OAAOljC,KACvD2pC,EAAcvoC,KAAKg0B,KACnBwU,EAAeF,EAAgBD,EAC/BI,EAAqBxN,EAAOtX,OAAM,SAAU0X,GAC9C,OAAOmN,EAAenN,EAAMrH,MAAQuU,KAqBtC,OAnBAvoC,KAAKioC,iBAAmBQ,EAEpBA,GACFzoC,KAAKokC,OAAS,CACZ7iB,IAAK8mB,EACL/mB,IAAKgnB,GAEPrN,EAAO15B,SAAQ,SAAU85B,GACvB,OAAOA,EAAMqN,oCAGf1oC,KAAKokC,OAAS,CACZ7iB,IAAKgmB,EAAW1V,SAChBvQ,IAAKkmB,EAAU3V,UAInB7xB,KAAK2oC,wBAEE3oC,MAGTS,EAAQk5B,OAAS,SAAUlY,GACzB,OAAO8N,GAAUvvB,UAAM,OAAQ,GAAQ,WACrC,IAAIo5B,EAAUyJ,EAAS5H,EAAQ2N,EAC/B,OAAOzY,GAAYnwB,MAAM,SAAUD,GACjC,OAAQA,EAAGywB,OACT,KAAK,EAGH,OAFA4I,EAAWzF,GAAoB3zB,KAAK+8B,UAAW,UAC/C8F,EAAU7iC,KAAKikC,UACTxiB,IAAQohB,EAAiB,CAAC,EAE9B,GACK,CAAC,EAEN9nB,EAAOra,UAAUi5B,OAAOj7B,KAAKsB,KAAMyhB,IAEvC,KAAK,EACH,MAAO,CAAC,EAEN1hB,EAAG0wB,QAEP,KAAK,EAMH,OALAwK,EAAS7B,EAASY,SAASiB,OAC3B2N,EAAU3N,EAAOrY,KAAI,SAAUyY,GAC7B,OAAOA,EAAMwN,OAAOhG,EAASphB,MAE/BzhB,KAAKikC,UAAYxiB,EACZmnB,EAAQpsB,MAAK,SAAUssB,GAC1B,OAAOA,MAKT9oC,KAAK2oC,wBAEE,CAAC,EAENvP,EAASY,SAASsF,WART,CAAC,EAEV,GAQJ,KAAK,EACHv/B,EAAG0wB,OAEH1wB,EAAGywB,MAAQ,EAEb,KAAK,EACH,MAAO,CAAC,EAENzV,EAAOra,UAAUi5B,OAAOj7B,KAAKsB,KAAMyhB,IAEvC,KAAK,EACH,MAAO,CAAC,EAEN1hB,EAAG0wB,gBAMfhwB,EAAQ4kC,gBAAkB,WACxB,IAAIvjB,EAAK9hB,KAAKu2B,IACV6C,EAAWzF,GAAoB3zB,KAAK+8B,UAAW,UAC/C4K,EAAiB3nC,KAAKikC,UAAYjkC,KAAKkkC,UAAYlkC,KAAKmkC,QAAUnkC,KAAKgoC,gBAC3ElmB,EAAG7d,MAAMjE,KAAK+jC,YAAc3K,EAASuB,WAAa,cAAgBgN,EAAiB,MAAQ,iBAAmBA,EAAiB,OAGjIlnC,EAAQi8B,qBAAuB,WAC7B3hB,EAAOra,UAAUg8B,qBAAqBh+B,KAAKsB,MAE3CA,KAAKgoC,gBAAkB,EACvBhoC,KAAKioC,kBAAmB,GAG1BxnC,EAAQsoC,kBAAoB,SAAU9N,GACpC,OAAOA,EAAO9V,QAAO,SAAU6jB,EAAK3N,GAClC,OAAO2N,EAAM3N,EAAMsL,sBAClB,IAGLlmC,EAAQkoC,sBAAwB,WAC9B,GAAK3oC,KAAKioC,iBAAV,CAKA,IAAI7O,EAAWzF,GAAoB3zB,KAAK+8B,UAAW,UAC/CkM,EAAc,GACdC,EAAc,GAClB9P,EAAS6B,OAAOxpB,QAAO,SAAU4pB,GAC/B,OAAOA,EAAMuN,WACZrnC,SAAQ,SAAU85B,GACfA,EAAM8N,kBAAoB/V,GAAUH,KACtCgW,EAAY5pC,KAAKg8B,GAEjB6N,EAAY7pC,KAAKg8B,MAGrBr7B,KAAKgoC,gBAAkBhoC,KAAK+oC,kBAAkBE,GAAejpC,KAAK+oC,kBAAkBG,QAhBlFlpC,KAAKgoC,gBAAkB,GAmBpBD,EA1QT,CA2QE,IAOEqB,GAEJ,SAAUruB,GAGR,SAASquB,IACP,OAAkB,OAAXruB,GAAmBA,EAAOtZ,MAAMzB,KAAMR,YAAcQ,KAH7D,GAAUopC,EAAaruB,GAgBvB,IAAIta,EAAU2oC,EAAY1oC,UA8I1B,OA5IAD,EAAQonC,YAAc,WACpB,IACI7N,EADWrG,GAAoB3zB,KAAK+8B,UAAW,UAC3B/C,SACpB4H,EAAW5hC,KAAKkkC,UAChBqD,EAAavN,EAAS8N,SAAS,GAC/BN,EAAYxN,EAAS8N,SAAS9N,EAASC,WAAa,GAExD,IAAKsN,IAAeC,EAKlB,OAJAxnC,KAAKokC,OAAS,CACZ7iB,IAAK,EACLD,IAAK,GAEAthB,KAGT,IAAIqpC,EAAerpC,KAAKg0B,KACpBqU,EAAiBd,EAAWtmB,MAAMM,IAClC+mB,EAAgBd,EAAUvmB,MAAMK,IAEhCgoB,EAAkBD,EADFf,EAAgBD,EAepC,OAXEroC,KAAKokC,OADHkF,EACY,CACZ/nB,IAAK8mB,EAAiBzG,EACtBtgB,IAAKgnB,EAAgBe,EAAezH,GAGxB,CACZrgB,IAAKgmB,EAAW1V,SAChBvQ,IAAKkmB,EAAU3V,UAIZ7xB,MAGTS,EAAQ6lC,cAAgB,WACtB,IAAI1kC,EAAQ5B,KAGRi7B,EADWtH,GAAoB3zB,KAAK+8B,UAAW,UAC7B/C,SAASiB,OAE/B,GAAIA,EAAOt8B,QAAU,EAEnB,OADAqB,KAAKskC,SAAW,GACTtkC,KAGT,IAAIihB,EAAQjhB,KAAKokC,OACbmF,EAAkBtO,EAAOxpB,QAAO,SAAU4pB,GAC5C,OAAOz5B,EAAMg9B,SAASvD,MAGxB,GAAIkO,EAAgB5qC,OAAS,EAAG,CAC9B,IAAI6qC,EAA2BD,EAAgB,GAAG1X,WAAa5Q,EAAMM,IACjEkoB,EAA0BF,EAAgBA,EAAgB5qC,OAAS,GAAGkzB,WAAa5Q,EAAMK,IACzFooB,EAAgBF,EAA2B,EAAI,EAC/CG,EAAaJ,EAAgB3mB,KAAI,SAAUyY,EAAO/4B,GACpD,OAAO,IAAIu9B,GAAY,CACrBj8B,MAAOtB,EAAMonC,EACb7X,SAAUwJ,EAAMxJ,SAChBwJ,MAAOA,OAIPmO,GACFG,EAAWlnC,OAAO,EAAG,EAAG,IAAIo9B,GAAY,CACtCj8B,MAAO,EACPiuB,SAAU5Q,EAAMM,IAChB8Z,MAAOJ,EAAOsO,EAAgB,GAAG3lC,MAAQ,MAIzC6lC,GACFE,EAAWtqC,KAAK,IAAIwgC,GAAY,CAC9Bj8B,MAAO+lC,EAAWhrC,OAClBkzB,SAAU5Q,EAAMK,IAChB+Z,MAAOJ,EAAOsO,EAAgBA,EAAgB5qC,OAAS,GAAGiF,MAAQ,MAItE5D,KAAKskC,SAAWqF,OACX,GAAI1oB,EAAMM,MAAQN,EAAMK,IAAK,CAElC,IAAIsoB,EAAoB5pC,KAAK6pC,kBAAkB5oB,EAAMM,IAAK0Z,GAEtD6O,EAAaF,EAAkBhmC,QAAUq3B,EAAOt8B,OAAS,EAAIirC,EAAkB3T,OAAS2T,EACxFG,EAAaD,EAAWlrC,OAC5BoB,KAAKskC,SAAW,CAAC,IAAIzE,GAAY,CAC/Bj8B,MAAO,EACPiuB,SAAU5Q,EAAMM,IAChB8Z,MAAOyO,IACL,IAAIjK,GAAY,CAClBj8B,MAAO,EACPiuB,SAAU5Q,EAAMK,IAChB+Z,MAAO0O,UAGT/pC,KAAKskC,SAAW,CAAC,IAAIzE,GAAY,CAC/Bj8B,MAAO,EACPiuB,SAAU5Q,EAAMM,IAChB8Z,MAAOr7B,KAAK6pC,kBAAkB5oB,EAAMM,IAAK0Z,MAI7C,OAAOj7B,MAGTS,EAAQugC,0BAA4B,SAAUnP,GAC5C,IAAI5Q,EAAQjhB,KAAKokC,OACbnD,EAAUjhC,KAAKskC,SACnB,OAAIrD,EAAQtiC,QAAU,EAAU,KAE5BkzB,GAAY5Q,EAAMM,IACb0f,EAAQ,GACNpP,GAAY5Q,EAAMK,IACpB2f,EAAQA,EAAQtiC,OAAS,GAEzBoc,EAAOra,UAAUsgC,0BAA0BtiC,KAAKsB,KAAM6xB,IAIjEpxB,EAAQopC,kBAAoB,SAAUpoB,EAAKwZ,GAGzC,IAFA,IAAIwK,EAAWrgB,IAEN4kB,EAAW,EAAGA,EAAW/O,EAAOt8B,OAAQqrC,IAAY,CAC3D,IAAI3O,EAAQJ,EAAO+O,GACfrE,EAAOvhC,KAAKC,IAAIg3B,EAAMxJ,SAAWpQ,GAErC,GAAIkkB,EAAOF,EAET,OAAOxK,EAAO+O,EAAW,GAG3BvE,EAAWE,EAIb,OAAO1K,EAAOA,EAAOt8B,OAAS,IAGzByqC,EA/JT,CAgKE,IAEEa,GAEJ,WACE,SAASA,KAWT,OATcA,EAAqBvpC,UAE3BwpC,sBAAwB,SAAU9Q,GAExCA,EAAS6B,OAAO15B,SAAQ,SAAU85B,GAChC,OAAOA,EAAM8O,kBAIVF,EAZT,GAoBI,GAEJ,WAKE,SAASG,EAASrqC,GAChB,IAAIG,OAAY,IAAPH,EAAgB,GAAKA,EAC1BM,EAAKH,EAAG6zB,MACRA,OAAe,IAAP1zB,EAAgB2yB,GAAME,OAAS7yB,EACvCgqC,EAAKnqC,EAAGoqC,SACRA,OAAkB,IAAPD,EAAgB,IAAIJ,GAAyBI,EAE5DrqC,KAAKgkC,OAASjQ,EACd/zB,KAAK+8B,UAAY,KACjB/8B,KAAKuqC,mBAAqBD,EAC1BtqC,KAAKwqC,QAAU,GAGjB,IAAI/pC,EAAU2pC,EAAS1pC,UA+RvB,OA9RAP,OAAO62B,eAAev2B,EAAS,SAAU,CAUvCoT,IAAK,WACH,OAAO7T,KAAKwqC,SAEdvT,YAAY,EACZC,cAAc,IAEhB/2B,OAAO62B,eAAev2B,EAAS,aAAc,CAO3CoT,IAAK,WACH,OAAO7T,KAAKwqC,QAAQ7rC,QAEtBs4B,YAAY,EACZC,cAAc,IAEhB/2B,OAAO62B,eAAev2B,EAAS,QAAS,CAQtCoT,IAAK,WACH,OAAO7T,KAAKgkC,QAGdp9B,IAAK,SAAUnB,GACbzF,KAAKgkC,OAASv+B,EAEd,IAAIglC,EAAazqC,KAAK0qC,iBAEtB1qC,KAAKwqC,QAAQjpC,SAAQ,SAAU85B,GAC7BA,EAAMtH,MAAQ0W,MAGlBxT,YAAY,EACZC,cAAc,IAUhBz2B,EAAQsN,KAAO,SAAUqrB,GAKvB,OAJAp5B,KAAK+8B,UAAY3D,EAEjBp5B,KAAK2qC,iBAEE3qC,MASTS,EAAQ0N,QAAU,WAChBnO,KAAK+8B,UAAY,KACjB/8B,KAAKwqC,QAAU,IAUjB/pC,EAAQqnC,SAAW,SAAUlkC,GAC3B,OAAO5D,KAAKwqC,QAAQ5mC,IAAU,MAUhCnD,EAAQmqC,gBAAkB,WAKxB,OAJA5qC,KAAKwqC,QAAQjpC,SAAQ,SAAU85B,GAC7B,OAAOA,EAAM3D,YAGR13B,MAaTS,EAAQoqC,YAAc,WAKpB,IAJA,IAAIjpC,EAAQ5B,KAER8qC,EAAQ,GAEH3pC,EAAK,EAAGA,EAAK3B,UAAUb,OAAQwC,IACtC2pC,EAAM3pC,GAAM3B,UAAU2B,GAGxB,IAAI85B,EAASj7B,KAAKwqC,QACdpR,EAAWzF,GAAoB3zB,KAAK+8B,UAAW,YAC/C1C,EAAUjB,EAASiB,QAEnBtG,EAAQ/zB,KAAK0qC,iBAEbK,EAAoBD,EAAM3lB,QAAO,SAAU6lB,EAAaxyB,GAC1D,IAAIzY,EAEAkrC,EAAezV,GAAyBhd,EAAK5U,MAAOq3B,EAAOt8B,QAC3DusC,EAAejQ,EAAOl2B,MAAMkmC,GAC5BE,EAAiB3yB,EAAKyc,SAASrS,KAAI,SAAUd,GAC/C,OAAOlgB,EAAMwpC,aAAatpB,EAAI,CAC5Ble,MAAOqnC,EACPlX,MAAOA,EACPqF,SAAUA,OAGd6B,EAAOx4B,OAAOhB,MAAMw5B,EAAQlK,GAAc,CAACka,EAAc,GAAI,GAAOE,KAEpEA,EAAe5pC,SAAQ,SAAU85B,GAC/B,OAAOA,EAAM3D,YAGf,IAAI2T,EAAezpC,EAAM0pC,iBAAiBH,GAU1C,OAPAD,EAAa3pC,SAAQ,SAAU85B,GAC7BA,EAAMkQ,cAAcJ,EAAexsC,QACnC08B,EAAMmQ,iBAAiBH,MAGzBzpC,EAAM6pC,qBAAqBN,EAA2C,QAA1BprC,EAAKmrC,EAAa,UAAuB,IAAPnrC,EAAgBA,EAAK,MAE5FgxB,GAAcA,GAAc,GAAI,GAAOia,IAAe,GAAOG,MACnE,IACH,OAAIJ,EAAkBpsC,QAAU,EAAU,IAE1CqB,KAAK0rC,0BAEA1rC,KAAKs/B,SAGNyL,EAAkBpsC,OAAS,IAAM07B,EAAQN,WACtCM,EAAQgE,YAAYhE,EAAQ6D,aAAe6M,EAAkB,GAAI,CACpE/lB,SAAU,IACTua,OAAM,eAKXnG,EAASG,OAAOiN,eAChBpN,EAASp4B,QAAQ,IAAI,EAAe8wB,GAAOiB,aAAc,CACvDiU,MAAO+D,EACPpM,QAAS,MAEJoM,IAaTtqC,EAAQkrC,YAAc,WAKpB,IAJA,IAAI/pC,EAAQ5B,KAER8qC,EAAQ,GAEH3pC,EAAK,EAAGA,EAAK3B,UAAUb,OAAQwC,IACtC2pC,EAAM3pC,GAAM3B,UAAU2B,GAGxB,IAAI85B,EAASj7B,KAAKwqC,QACdpR,EAAWzF,GAAoB3zB,KAAK+8B,UAAW,YAC/CxD,EAASH,EAASG,OAClBc,EAAUjB,EAASiB,QACnB6D,EAAc7D,EAAQ6D,YACtB0H,EAAcvL,EAAQuL,YACtBgG,EAAmBd,EAAM3lB,QAAO,SAAUwZ,EAASnmB,GACrD,IAAI5U,EAAQ4U,EAAK5U,MACbioC,EAAcrzB,EAAKqzB,YACnBC,EAActW,GAAyB5xB,EAAOq3B,EAAOt8B,QACrDotC,EAAe9Q,EAAOl2B,MAAM+mC,EAAcD,GAC1CG,EAAgB/Q,EAAOx4B,OAAOqpC,EAAaD,GAC/C,GAAIG,EAAcrtC,QAAU,EAAG,MAAO,GAEtC,IAAIstC,EAAcrqC,EAAM0pC,iBAAiBU,GAoBzC,OAlBAD,EAAaxqC,SAAQ,SAAU85B,GAC7BA,EAAM6Q,cAAcF,EAAcrtC,QAClC08B,EAAM8Q,iBAAiBF,MAGzBrqC,EAAMwqC,qBAAqBJ,GAG3BA,EAAczqC,SAAQ,SAAU85B,GAC9B,OAAOA,EAAMltB,aAGfvM,EAAM8pC,0BAEFjW,GAASuW,EAAe9N,IAC1B7D,EAAQ+D,cAGHrN,GAAcA,GAAc,GAAI,GAAO4N,IAAW,GAAOqN,MAC/D,IAGH,GAFKhsC,KAAKs/B,SAENsM,EAAiBjtC,OAAS,IAAM07B,EAAQN,UAAW,CACrD,IAAIsI,EAAc5M,GAASmW,EAAkB1N,GAAejD,EAAO2K,IAAgB3K,EAAOA,EAAOt8B,OAAS,GAAKu/B,EAE3GmE,EACGhI,EAAQgE,YAAYgE,EAAa,CACpCrd,SAAU,IACTua,OAAM,eAKJhG,EAAOI,OAAO,GASvB,OALAP,EAASG,OAAOiN,eAChBpN,EAASp4B,QAAQ,IAAI,EAAe8wB,GAAOiB,aAAc,CACvDiU,MAAO,GACPrI,QAASiN,KAEJA,GAGTnrC,EAAQiqC,eAAiB,WACvB,IAAI3W,EAAQ/zB,KAAKgkC,OACjB,MAAwB,iBAAVjQ,EAAqBA,EAAMsH,MAAQtH,GAGnDtzB,EAAQ6qC,iBAAmB,SAAUrQ,GACnC,IAAIsM,EAAatM,EAAO,GACpBuM,EAAYvM,EAAOA,EAAOt8B,OAAS,GACnC0tC,EAAa7E,EAAU1F,OAAOljC,KAAO2oC,EAAWzF,OAAO7L,KAC3D,OAAOuR,EAAUvmB,MAAMK,IAAMimB,EAAWtmB,MAAMM,IAAM8qB,GAGtD5rC,EAAQirC,wBAA0B,WAChC,IAAItS,EAAWzF,GAAoB3zB,KAAK+8B,UAAW,YAC/CxD,EAASH,EAASG,OAClBc,EAAUjB,EAASiB,QACvBd,EAAOsO,cACPtO,EAAO+M,gBACP/M,EAAOqN,wBACPvM,EAAQuB,eAGHwO,EAjTT,GAoTIkC,GAEJ,WAOE,SAASA,EAAMvsC,GACb,IAAI6D,EAAQ7D,EAAG6D,MACXmwB,EAAQh0B,EAAGg0B,MACXqF,EAAWr5B,EAAGq5B,SAClBp5B,KAAK8/B,OAASl8B,EACd5D,KAAK+8B,UAAY3D,EACjBp5B,KAAKgkC,OAASjQ,EACd/zB,KAAKusC,UAAW,EAEhBvsC,KAAKwsC,uBAGP,IAAI/rC,EAAU6rC,EAAM5rC,UAyiBpB,OAxiBAP,OAAO62B,eAAev2B,EAAS,QAAS,CAOtCoT,IAAK,WACH,OAAO7T,KAAK8/B,QAEd7I,YAAY,EACZC,cAAc,IAEhB/2B,OAAO62B,eAAev2B,EAAS,WAAY,CAOzCoT,IAAK,WACH,OAAO7T,KAAKmqB,KAAOnqB,KAAKkkC,WAE1BjN,YAAY,EACZC,cAAc,IAEhB/2B,OAAO62B,eAAev2B,EAAS,OAAQ,CASrCoT,IAAK,WACH,OAAO7T,KAAKysC,OAEdxV,YAAY,EACZC,cAAc,IAEhB/2B,OAAO62B,eAAev2B,EAAS,sBAAuB,CASpDoT,IAAK,WACH,OAAO7T,KAAKysC,MAAQzsC,KAAK0sC,QAAQzW,KAAOj2B,KAAK0sC,QAAQ9tC,MAEvDq4B,YAAY,EACZC,cAAc,IAEhB/2B,OAAO62B,eAAev2B,EAAS,SAAU,CAOvCoT,IAAK,WACH,OAAO7T,KAAKy2B,SAEdQ,YAAY,EACZC,cAAc,IAEhB/2B,OAAO62B,eAAev2B,EAAS,SAAU,CAWvCoT,IAAK,WACH,OAAO7T,KAAK0sC,SAEdzV,YAAY,EACZC,cAAc,IAEhB/2B,OAAO62B,eAAev2B,EAAS,gBAAiB,CAO9CoT,IAAK,WACH,OAAO7T,KAAKkkC,WAEdjN,YAAY,EACZC,cAAc,IAEhB/2B,OAAO62B,eAAev2B,EAAS,UAAW,CAOxCoT,IAAK,WACH,OAAO7T,KAAKusC,UAEdtV,YAAY,EACZC,cAAc,IAEhB/2B,OAAO62B,eAAev2B,EAAS,QAAS,CAStCoT,IAAK,WACH,MAAO,CACL0N,IAAKvhB,KAAKmqB,KACV7I,IAAKthB,KAAKmqB,KAAOnqB,KAAKysC,QAG1BxV,YAAY,EACZC,cAAc,IAEhB/2B,OAAO62B,eAAev2B,EAAS,UAAW,CAOxCoT,IAAK,WACH,OAAO7T,KAAK2sC,UAEd1V,YAAY,EACZC,cAAc,IAEhB/2B,OAAO62B,eAAev2B,EAAS,kBAAmB,CAOhDoT,IAAK,WACH,OAAO7T,KAAK4sC,kBAEd3V,YAAY,EACZC,cAAc,IAEhB/2B,OAAO62B,eAAev2B,EAAS,SAAU,CAOvCoT,IAAK,WACH,IAAIs1B,EAAkBnpC,KAAK4sC,iBACvBC,EAAkB7sC,KAAK+8B,UAAUxD,OAAOsF,UAC5C,OAAOsK,IAAoB/V,GAAUC,MAASrzB,KAAK2sC,SAAexD,IAAoB/V,GAAUH,MAAQ4Z,EAAkBA,EAA5D,GAEhE5V,YAAY,EACZC,cAAc,IAEhB/2B,OAAO62B,eAAev2B,EAAS,WAAY,CAOzCoT,IAAK,WACH,IAAIulB,EAAWp5B,KAAK+8B,UACpB,OAAO/8B,KAAK4D,MAAQw1B,EAASG,OAAOuT,UAEtC7V,YAAY,EACZC,cAAc,IAEhB/2B,OAAO62B,eAAev2B,EAAS,iBAAkB,CAO/CoT,IAAK,WACH,IAAIge,EAAW7xB,KAAK6xB,SAAW7xB,KAAK6K,OAChCg3B,EAAgB7hC,KAAKkkC,UACrB3K,EAASv5B,KAAK+8B,UAAUxD,OACxBwT,EAASxT,EAAO1H,SAEpB,GAAIkb,IAAWlb,EACb,OAAO,EAGT,GAAIkb,EAASlb,EAAU,CACrB,IAAImb,EAAmBnb,GAAY0H,EAAOvF,KAAOuF,EAAOsI,eAAiBA,EACzE,OAAQ7L,GAAY+W,EAAQlb,EAAUmb,GAEtC,IAAIC,EAAmBpb,GAAY0H,EAAOsI,cAAgB7hC,KAAKysC,MAAQ5K,GACvE,OAAO,EAAI7L,GAAY+W,EAAQE,EAAkBpb,IAGrDoF,YAAY,EACZC,cAAc,IAEhB/2B,OAAO62B,eAAev2B,EAAS,eAAgB,CAO7CoT,IAAK,WACH,IAAIoN,EAAQjhB,KAAKihB,MACb+S,EAAOh0B,KAAKysC,MACZ5hC,EAAS7K,KAAK6K,OACdq7B,EAAelmC,KAAK+8B,UAAUxD,OAAO2M,aACrCgH,EACGjsB,EAAMM,IAAM1W,EADfqiC,EAEGjsB,EAAMK,IAAMzW,EAGnB,GAAIqiC,GAAqBhH,EAAa3kB,KAAO2rB,GAAqBhH,EAAa5kB,IAC7E,OAAO,EAGT,IAAIinB,EAAcvU,EAUlB,OARIkS,EAAa3kB,IAAM2rB,IACrB3E,GAAerC,EAAa3kB,IAAM2rB,GAGhChH,EAAa5kB,IAAM4rB,IACrB3E,GAAe2E,EAAoBhH,EAAa5kB,KAG3CinB,EAAcvU,GAEvBiD,YAAY,EACZC,cAAc,IAEhB/2B,OAAO62B,eAAev2B,EAAS,QAAS,CAQtCoT,IAAK,WACH,OAAO7T,KAAKgkC,QAGdp9B,IAAK,SAAUnB,GACbzF,KAAKgkC,OAASv+B,GAEhBwxB,YAAY,EACZC,cAAc,IAShBz2B,EAAQi3B,OAAS,WACf,IAAI5V,EAAK9hB,KAAK+G,QACV4wB,EAAUzB,GAASpU,GACnBsX,EAAWp5B,KAAK+8B,UAChBpC,EAAavB,EAASuB,WACtBiF,EAAYxG,EAASY,SAASiB,OAAOj7B,KAAK8/B,OAAS,GAcvD,OAbA9/B,KAAKysC,MAAQ9R,EAAa7Y,EAAGqrB,YAAcrrB,EAAGsrB,aAC9CptC,KAAK0sC,QAAU/R,EAAa,CAC1B1E,KAAMnB,WAAW6C,EAAQ0V,YAAc,KACvCzuC,KAAMk2B,WAAW6C,EAAQ2V,aAAe,MACtC,CACFrX,KAAMnB,WAAW6C,EAAQ4V,WAAa,KACtC3uC,KAAMk2B,WAAW6C,EAAQ6V,cAAgB,MAE3CxtC,KAAKmqB,KAAOyV,EAAYA,EAAU3e,MAAMK,IAAMse,EAAUkC,OAAOljC,KAAOoB,KAAK0sC,QAAQzW,KAAOj2B,KAAK0sC,QAAQzW,KACvGj2B,KAAKy2B,QAAUkE,EAAa7Y,EAAGsrB,aAAeptC,KAAKysC,MAEnDzsC,KAAKytC,kBAEEztC,MAUTS,EAAQ66B,SAAW,SAAUv0B,GAC3B,IAAIhH,EAEJ,SAAkC,QAAvBA,EAAKC,KAAK+G,eAA4B,IAAPhH,OAAgB,EAASA,EAAGu7B,SAASv0B,KASjFtG,EAAQ0N,QAAU,WAChBnO,KAAKwsC,uBAELxsC,KAAKusC,UAAW,GAWlB9rC,EAAQ8kC,gBAAkB,SAAU9jB,EAAKisB,GAKvC,YAJsB,IAAlBA,IACFA,GAAgB,GAGX1tC,KAAKmmC,aAAa1kB,EAAKA,EAAKisB,IAYrCjtC,EAAQ0lC,aAAe,SAAU5kB,EAAKD,EAAKosB,QACnB,IAAlBA,IACFA,GAAgB,GAGlB,IAAI5L,EAAS9hC,KAAK0sC,QACdvK,EAAaniC,KAAKihB,MAOtB,OALIysB,IACFvL,EAAW5gB,KAAOugB,EAAO7L,KACzBkM,EAAW7gB,KAAOwgB,EAAOljC,MAGpB0iB,GAAO6gB,EAAW5gB,KAAOA,GAAO4gB,EAAW7gB,KAUpD7gB,EAAQktC,MAAQ,SAAU3oB,GACxB,OAAOhlB,KAAK+8B,UAAUxT,OAAOvpB,KAAK8/B,OAAQ9a,IAW5CvkB,EAAQw1B,KAAO,WACb,IAAIryB,EAAQ5D,KAAK8/B,OACb1G,EAAWp5B,KAAK+8B,UAChB/C,EAAWZ,EAASY,SACpBC,EAAaD,EAASC,WAC1B,OAAmB,IAAfA,EAAyB,KACtBb,EAASM,gBAAkBM,EAAS8N,SAAmB,IAAVlkC,EAAcq2B,EAAa,EAAIr2B,EAAQ,GAAKo2B,EAAS8N,SAASlkC,EAAQ,IAW5HnD,EAAQ7B,KAAO,WACb,IAAIgF,EAAQ5D,KAAK8/B,OACb1G,EAAWp5B,KAAK+8B,UAChB/C,EAAWZ,EAASY,SACpBC,EAAaD,EAASC,WAC1B,OAAmB,IAAfA,EAAyB,KACtBb,EAASM,gBAAkBM,EAAS8N,SAASlkC,IAAUq2B,EAAa,EAAI,EAAIr2B,EAAQ,GAAKo2B,EAAS8N,SAASlkC,EAAQ,IAY5HnD,EAAQ8qC,cAAgB,SAAU9lC,GAEhC,OADAzF,KAAK8/B,QAAU17B,KAAKkd,IAAI7b,EAAK,GACtBzF,MAYTS,EAAQyrC,cAAgB,SAAUzmC,GAEhC,OADAzF,KAAK8/B,QAAU17B,KAAKkd,IAAI7b,EAAK,GACtBzF,MAYTS,EAAQ+qC,iBAAmB,SAAU/lC,GAGnC,OAFAzF,KAAK4tC,QAAQxpC,KAAKkd,IAAI7b,EAAK,IAEpBzF,MAYTS,EAAQ0rC,iBAAmB,SAAU1mC,GAGnC,OAFAzF,KAAK4tC,SAASxpC,KAAKkd,IAAI7b,EAAK,IAErBzF,MAQTS,EAAQooC,OAAS,SAAUhG,EAASnF,GAClC,IAAIyL,EAAkBnpC,KAAK4sC,iBACvBiB,EAAiB7tC,KAAK8tC,gBAC1B,GAAI3E,IAAoB/V,GAAUC,MAAQqK,IAAWmF,EAAS,OAAO,EACrE,IAAIkL,EAAc/tC,KAAK2sC,SAYvB,OAVIjP,EAASmF,EACPgL,GAAkBhL,GAAWgL,GAAkBnQ,IACjD19B,KAAK2sC,SAAWxD,IAAoB/V,GAAUD,MAG5C0a,GAAkBhL,GAAWgL,GAAkBnQ,IACjD19B,KAAK2sC,SAAWxD,IAAoB/V,GAAUD,MAI3C4a,IAAgB/tC,KAAK2sC,UAO9BlsC,EAAQioC,8BAAgC,WACtC,IAAItP,EAAWp5B,KAAK+8B,UAEpB,IAAK3D,EAASM,gBAGZ,OAFA15B,KAAK4sC,iBAAmBxZ,GAAUC,KAClCrzB,KAAK2sC,UAAW,EACT3sC,KAGT,IAAIu5B,EAASH,EAASG,OAClByU,EAAWzU,EAAOtY,MAClBgtB,EAAmB1U,EAAOsI,cAC1BqM,EAAkB3U,EAAO2M,aACzBiI,EAAiBD,EAAgB5sB,IAAM4sB,EAAgB3sB,IACvD6sB,EAAiBJ,EAASzsB,IAAM0sB,EAChCI,EAAiBL,EAAS1sB,IAAM2sB,EAAmBE,EACnDG,EAAuBtuC,KAAKmmC,aAAakI,EAAiBF,EAAgBE,GAAgB,GAC1FE,EAAuBvuC,KAAKmmC,aAAaiI,EAAgBA,EAAiBD,GAAgB,GAgB9F,OAfAnuC,KAAK2sC,UAAW,EAEZ2B,GACFtuC,KAAK4sC,iBAAmBxZ,GAAUH,KAClCjzB,KAAK8tC,gBAAkB9tC,KAAKihB,MAAMK,IAAM0sB,EAASzsB,IAAMysB,EAAS1sB,IAAM2sB,EACtEjuC,KAAK6oC,OAAOzjB,IAAUmU,EAAO1H,WACpB0c,GACTvuC,KAAK4sC,iBAAmBxZ,GAAUD,KAClCnzB,KAAK8tC,gBAAkB9tC,KAAKihB,MAAMM,IAAMysB,EAAS1sB,IAAM6sB,EAAiBF,EACxEjuC,KAAK6oC,QAAQzjB,IAAUmU,EAAO1H,YAE9B7xB,KAAK4sC,iBAAmBxZ,GAAUC,KAClCrzB,KAAK8tC,gBAAkB,GAGlB9tC,MAGTS,EAAQmtC,QAAU,SAAUnoC,GAE1B,OADAzF,KAAKmqB,MAAQ1kB,EACNzF,MAGTS,EAAQgtC,gBAAkB,WACxBztC,KAAKkkC,UAAYpQ,GAAa9zB,KAAKgkC,OAAQhkC,KAAKysC,QAGlDhsC,EAAQ+rC,qBAAuB,WAC7BxsC,KAAKysC,MAAQ,EACbzsC,KAAKmqB,KAAO,EACZnqB,KAAK0sC,QAAU,CACbzW,KAAM,EACNr3B,KAAM,GAERoB,KAAKy2B,QAAU,EACfz2B,KAAKkkC,UAAY,EACjBlkC,KAAK2sC,UAAW,EAChB3sC,KAAK8tC,gBAAkB,EACvB9tC,KAAK4sC,iBAAmBxZ,GAAUC,MAG7BiZ,EA5jBT,GAokBIkC,GAEJ,SAAUzzB,GAWR,SAASyzB,EAAapnC,GACpB,IAAIxF,EAAQmZ,EAAOrc,KAAKsB,KAAMoH,IAAYpH,KAI1C,OAFA4B,EAAM20B,IAAMnvB,EAAQ0a,GACpBlgB,EAAM6sC,WAAY,EACX7sC,EAfT,GAAU4sC,EAAczzB,GAkBxB,IAAIta,EAAU+tC,EAAa9tC,UA8B3B,OA7BAP,OAAO62B,eAAev2B,EAAS,UAAW,CAOxCoT,IAAK,WACH,OAAO7T,KAAKu2B,KAEdU,YAAY,EACZC,cAAc,IAEhB/2B,OAAO62B,eAAev2B,EAAS,WAAY,CACzCoT,IAAK,WACH,OAAO7T,KAAKyuC,WAEdxX,YAAY,EACZC,cAAc,IAGhBz2B,EAAQ0pC,YAAc,WACpBnqC,KAAKyuC,WAAY,GAGnBhuC,EAAQiuC,YAAc,WACpB1uC,KAAKyuC,WAAY,GAGZD,EAjDT,CAkDElC,IAMEqC,GAEJ,SAAU5zB,GAGR,SAAS4zB,IACP,OAAkB,OAAX5zB,GAAmBA,EAAOtZ,MAAMzB,KAAMR,YAAcQ,KAH7D,GAAU2uC,EAAiB5zB,GAO3B,IAAIta,EAAUkuC,EAAgBjuC,UA8I9B,OA5IAD,EAAQ6+B,OAAS,WACf,OAAO/P,GAAUvvB,UAAM,OAAQ,GAAQ,WACrC,IAAIsqC,EAAUlR,EAAUoE,EAAUoR,EAAmBC,EACrD,OAAO1e,GAAYnwB,MAAM,SAAUD,GAoBjC,OAnBAuqC,EAAWtqC,KAAKuqC,mBAChBnR,EAAWzF,GAAoB3zB,KAAK+8B,UAAW,YAC/CS,EAAWpE,EAASG,OAAOxyB,QAC3B6nC,EAAoB5uC,KAAKwqC,QAAQ/4B,QAAO,SAAU4pB,GAChD,OAAOA,EAAMt0B,QAAQ+nC,gBAAkBtR,KAEzC8M,EAASJ,sBAAsB9Q,GAC/ByV,EAAkB7uC,KAAK+uC,6BAEvB/uC,KAAKosC,qBAAqBwC,EAAkBn9B,QAAO,SAAU4pB,GAC3D,OAAQA,EAAMqL,aAGhB1mC,KAAKyrC,qBAAqBoD,EAAgBp9B,QAAO,SAAU4pB,GACzD,OAAOA,EAAMt0B,QAAQ+nC,gBAAkBtR,KACrC,MAEJx9B,KAAKgvC,wBAAwBH,GAEtB,CAAC,UAQdpuC,EAAQwuC,qBAAuB,WAC7B,OAAO1f,GAAUvvB,UAAM,OAAQ,GAAQ,WACrC,IAAIo5B,EAAUG,EAAQ2V,EAAeC,EACrC,OAAOhf,GAAYnwB,MAAM,SAAUD,GAajC,OAZAq5B,EAAWzF,GAAoB3zB,KAAK+8B,UAAW,YAC/CxD,EAASH,EAASG,OAClB2V,EAAgB3V,EAAOxyB,QACvBooC,EAAWnrC,SAASorC,yBAEpBpvC,KAAKwqC,QAAQjpC,SAAQ,SAAU85B,GAC7B,OAAO8T,EAASE,YAAYhU,EAAMt0B,YAGpC/G,KAAKsvC,6BAELJ,EAAcG,YAAYF,GACnB,CAAC,UAOd1uC,EAAQkqC,eAAiB,WACvB,IAAIvR,EAAWzF,GAAoB3zB,KAAK+8B,UAAW,YAC/CmS,EAAgB9V,EAASG,OAAOxyB,QAEpC,GAAQmoC,EAAc5sB,YAAY/gB,SAAQ,SAAU0H,GAC9CA,EAAKwZ,WAAa6S,KAAKia,WACzBL,EAAc7Z,YAAYpsB,MAI9B,IAAI8qB,EAAQ/zB,KAAK0qC,iBAEb8E,EAAe,GAAQN,EAAc/Z,UACzCn1B,KAAKwqC,QAAUgF,EAAa5sB,KAAI,SAAUd,EAAIle,GAC5C,OAAO,IAAI4qC,GAAa,CACtBpV,SAAUA,EACVtX,GAAIA,EACJle,MAAOA,EACPmwB,MAAOA,QAKbtzB,EAAQ2qC,aAAe,SAAUtpB,EAAI1a,GACnC,OAAO,IAAIonC,GAAa,GAAS,CAC/B1sB,GAAIA,GACH1a,KAGL3G,EAAQgrC,qBAAuB,SAAUxQ,EAAQwU,GAC/C,IAEIP,EAFWvb,GAAoB3zB,KAAK+8B,UAAW,YAC7BxD,OACKxyB,QACvB2oC,GAAsBD,aAAiD,EAASA,EAAY1oC,UAAY,KACxGooC,EAAWnrC,SAASorC,yBAKxB,OAJAnU,EAAO15B,SAAQ,SAAU85B,GACvB,OAAO8T,EAASE,YAAYhU,EAAMt0B,YAEpCmoC,EAAcS,aAAaR,EAAUO,GAC9B1vC,MAGTS,EAAQ2rC,qBAAuB,SAAUnR,GACvC,IACIiU,EADWvb,GAAoB3zB,KAAK+8B,UAAW,YACtBxD,OAAOxyB,QAIpC,OAHAk0B,EAAO15B,SAAQ,SAAU85B,GACvB6T,EAAc7Z,YAAYgG,EAAMt0B,YAE3B/G,MAGTS,EAAQuuC,wBAA0B,SAAU/T,GAC1C,IACIuC,EADW7J,GAAoB3zB,KAAK+8B,UAAW,YAC3BxD,OAAOxyB,QAE3B6oC,EAAiB7e,GAAc,GAAI,GAAOkK,IAAS4U,UAEvDD,EAAeruC,SAAQ,SAAU85B,EAAO/4B,GACtC,IAAIsgC,EAAYgN,EAAettC,EAAM,GACjCwtC,EAAclN,EAAYA,EAAU77B,QAAU,KAE9Cs0B,EAAMt0B,QAAQgpC,qBAAuBD,GACvCtS,EAASmS,aAAatU,EAAMt0B,QAAS+oC,OAK3CrvC,EAAQ6uC,2BAA6B,WAInC,IAHA,IACIJ,EADWvb,GAAoB3zB,KAAK+8B,UAAW,YACtBxD,OAAOxyB,QAE7BmoC,EAAc9Z,YACnB8Z,EAAc7Z,YAAY6Z,EAAc9Z,aAI5C30B,EAAQsuC,2BAA6B,WAGnC,OAFepb,GAAoB3zB,KAAK+8B,UAAW,YAC7B/C,SAASiB,OACjBxpB,QAAO,SAAU4pB,GAC7B,OAAOA,EAAMqL,YACZp2B,MAAK,SAAUG,EAAGC,GACnB,OAAOD,EAAEohB,SAAWphB,EAAE5F,QAAU6F,EAAEmhB,SAAWnhB,EAAE7F,YAI5C8jC,EAtJT,CAuJE,IAMEqB,GAEJ,SAAUj1B,GAGR,SAASi1B,IACP,OAAkB,OAAXj1B,GAAmBA,EAAOtZ,MAAMzB,KAAMR,YAAcQ,KAH7D,GAAUgwC,EAAkBj1B,GAO5B,IAAIta,EAAUuvC,EAAiBtvC,UAS/B,OAPAD,EAAQgrC,qBAAuB,SAAUxQ,EAAQwU,KAIjDhvC,EAAQ2rC,qBAAuB,SAAUnR,KAGlC+U,EAjBT,CAkBE,IAEEC,GAEJ,WACE,SAASA,KAuBT,OArBcA,EAAyBvvC,UAE/BwpC,sBAAwB,SAAU9Q,GACxC,IAAI6B,EAAS7B,EAASY,SAASiB,OAC3B1B,EAASH,EAASG,OAClB2W,EAAiB3W,EAAO0N,cAAc9hB,QAAO,SAAUgrB,EAAU9U,GAEnE,OADA8U,EAAS9U,EAAMz3B,QAAS,EACjBusC,IACN,IACHlV,EAAO15B,SAAQ,SAAU85B,GACnBA,EAAMz3B,SAASssC,EACjB7U,EAAM8O,cACI/Q,EAAShQ,SAGnBiS,EAAMqT,iBAGVnV,EAAOiN,gBAGFyJ,EAxBT,GAkCI,GAEJ,SAAUl1B,GAgCR,SAASq1B,EAASC,EAAMtwC,GACtB,IAAIG,OAAY,IAAPH,EAAgB,GAAKA,EAC1BM,EAAKH,EAAG6zB,MACRA,OAAe,IAAP1zB,EAAgB2yB,GAAME,OAAS7yB,EACvCgqC,EAAKnqC,EAAGowC,aACRA,OAAsB,IAAPjG,EAAgB,EAAIA,EACnCkG,EAAKrwC,EAAGy6B,WACRA,OAAoB,IAAP4V,GAAuBA,EACpCC,EAAKtwC,EAAGghB,SACRA,OAAkB,IAAPsvB,GAAwBA,EACnCC,EAAKvwC,EAAGwwC,MACRA,OAAe,IAAPD,GAAwBA,EAChCE,EAAKzwC,EAAGqmC,SACRA,OAAkB,IAAPoK,GAAwBA,EACnCC,EAAK1wC,EAAGknC,mBACRA,OAA4B,IAAPwJ,EAAgB,EAAIA,EACzCC,EAAK3wC,EAAG4wC,wBACRA,OAAiC,IAAPD,GAAuBA,EACjDE,EAAK7wC,EAAGglB,aACRA,OAAsB,IAAP6rB,EAAgB,MAASA,EACxCC,EAAK9wC,EAAG8kB,SACRA,OAAkB,IAAPgsB,EAAgB,IAAMA,EACjCC,EAAK/wC,EAAG0nB,OACRA,OAAgB,IAAPqpB,EAAgB,SAAU3nC,GACrC,OAAO,EAAIlF,KAAK6f,IAAI,EAAI3a,EAAG,IACzB2nC,EACAC,EAAKhxC,EAAG8rB,UACRA,OAAmB,IAAPklB,EAAgB,CAAC,QAAS,SAAWA,EACjDC,EAAKjxC,EAAGkxC,SACRA,OAAkB,IAAPD,EAAgB,OAASA,EACpCE,EAAKnxC,EAAGmV,UACRA,OAAmB,IAAPg8B,EAAgB,GAAKA,EACjCC,EAAKpxC,EAAG4pB,cACRA,OAAuB,IAAPwnB,GAAuBA,EACvCC,EAAKrxC,EAAGihB,OACRA,OAAgB,IAAPowB,EAAgB,MAAQA,EACjCC,EAAKtxC,EAAGqtB,sBACRA,OAA+B,IAAPikB,EAAgB,GAAKA,EAC7CC,EAAKvxC,EAAGwxC,mBACRA,OAA4B,IAAPD,GAAuBA,EAC5CE,EAAKzxC,EAAG0xC,cACRA,OAAuB,IAAPD,GAAwBA,EACxCE,EAAK3xC,EAAG4xC,kBACRA,OAA2B,IAAPD,GAAwBA,EAC5CE,EAAK7xC,EAAG8xC,SACRA,OAAkB,IAAPD,GAAuBA,EAClCE,EAAK/xC,EAAGgyC,WACRA,OAAoB,IAAPD,GAAuBA,EACpCE,EAAKjyC,EAAGkyC,eACRA,OAAwB,IAAPD,EAAgB,KAAOA,EAExCvwC,EAAQmZ,EAAOrc,KAAKsB,OAASA,KAwCjC,OArCA4B,EAAMywC,cAAe,EACrBzwC,EAAM0wC,SAAW,GAEjB1wC,EAAMoiC,OAASjQ,EACfnyB,EAAM2wC,cAAgBjC,EACtB1uC,EAAM4wC,YAAc7X,EACpB/4B,EAAM6wC,UAAYvxB,EAClBtf,EAAM8wC,OAAShC,EACf9uC,EAAM+wC,UAAYpM,EAClB3kC,EAAMgxC,oBAAsBxL,EAC5BxlC,EAAMixC,yBAA2B/B,EACjClvC,EAAMkxC,cAAgB5tB,EACtBtjB,EAAMmxC,UAAY/tB,EAClBpjB,EAAMoxC,QAAUprB,EAChBhmB,EAAMqxC,WAAajnB,EACnBpqB,EAAMsxC,UAAY9B,EAClBxvC,EAAMuxC,WAAa99B,EACnBzT,EAAMwxC,eAAiBtpB,EACvBloB,EAAMyxC,QAAUlyB,EAChBvf,EAAM0xC,uBAAyB/lB,EAC/B3rB,EAAM2xC,oBAAsB7B,EAC5B9vC,EAAM4xC,eAAiB5B,EACvBhwC,EAAM6xC,mBAAqB3B,EAC3BlwC,EAAM8xC,YAAcxB,EACpBtwC,EAAM+xC,UAAY3B,EAClBpwC,EAAMgyC,gBAAkBxB,EAExBxwC,EAAMiyC,UAAY,IAAIvd,GAxiKT,SAAUxU,EAAI5Y,GAC7B,IAAI4qC,EAAW,KAEf,GAAI5f,GAASpS,GAAK,CAChB,IACIiyB,GADW7qC,GAAkBlF,UACNgwC,cAAclyB,GAEzC,IAAKiyB,EACH,MAAM,IAAI1iB,GAAcG,GAA0B1P,GAAKyP,IAGzDuiB,EAAWC,OACFjyB,GAAMA,EAAGW,WAAa6S,KAAKC,eACpCue,EAAWhyB,GAGb,IAAKgyB,EACH,MAAM,IAAIziB,GAAcG,GAAmB1P,EAAI,CAAC,cAAe,WAAYyP,IAG7E,OAAOuiB,EAohK0BG,CAAW5D,IAC1CzuC,EAAMsyC,UAAYtyC,EAAMuyC,kBACxBvyC,EAAMwyC,QAAUxyC,EAAMyyC,gBACtBzyC,EAAM0yC,SAAW1yC,EAAM2yC,iBACvB3yC,EAAM81B,OAAS91B,EAAM81B,OAAO9S,KAAKhjB,GAE7BA,EAAM+xC,WACH/xC,EAAMmM,OAGNnM,EA1HT,GAAUwuC,EAAUr1B,GA6HpB,IAAIta,EAAU2vC,EAAS1vC,UAo7CvB,OAn7CAP,OAAO62B,eAAev2B,EAAS,UAAW,CAaxCoT,IAAK,WACH,OAAO7T,KAAKs0C,UAEdrd,YAAY,EACZC,cAAc,IAEhB/2B,OAAO62B,eAAev2B,EAAS,SAAU,CAYvCoT,IAAK,WACH,OAAO7T,KAAKo0C,SAEdnd,YAAY,EACZC,cAAc,IAEhB/2B,OAAO62B,eAAev2B,EAAS,WAAY,CAWzCoT,IAAK,WACH,OAAO7T,KAAKk0C,WAEdjd,YAAY,EACZC,cAAc,IAEhB/2B,OAAO62B,eAAev2B,EAAS,WAAY,CAQzCoT,IAAK,WACH,OAAO7T,KAAK6zC,WAEd5c,YAAY,EACZC,cAAc,IAEhB/2B,OAAO62B,eAAev2B,EAAS,cAAe,CAY5CoT,IAAK,WACH,OAAO7T,KAAKqyC,cAEdpb,YAAY,EACZC,cAAc,IAEhB/2B,OAAO62B,eAAev2B,EAAS,kBAAmB,CAUhDoT,IAAK,WACH,OAAO7T,KAAKo0C,QAAQjX,cAAcjc,UAEpC+V,YAAY,EACZC,cAAc,IAEhB/2B,OAAO62B,eAAev2B,EAAS,QAAS,CAQtCoT,IAAK,WACH,OAAO7T,KAAKs0C,SAAS1O,aAEvB3O,YAAY,EACZC,cAAc,IAEhB/2B,OAAO62B,eAAev2B,EAAS,UAAW,CAOxCoT,IAAK,WACH,OAAO7T,KAAK6zC,UAAU9sC,SAExBkwB,YAAY,EACZC,cAAc,IAEhB/2B,OAAO62B,eAAev2B,EAAS,eAAgB,CAQ7CoT,IAAK,WACH,OAAO7T,KAAKs0C,SAASpW,aAEvBjH,YAAY,EACZC,cAAc,IAEhB/2B,OAAO62B,eAAev2B,EAAS,SAAU,CAQvCoT,IAAK,WACH,OAAO7T,KAAKk0C,UAAUjZ,QAExBhE,YAAY,EACZC,cAAc,IAEhB/2B,OAAO62B,eAAev2B,EAAS,aAAc,CAO3CoT,IAAK,WACH,OAAO7T,KAAKk0C,UAAUja,YAExBhD,YAAY,EACZC,cAAc,IAEhB/2B,OAAO62B,eAAev2B,EAAS,gBAAiB,CAQ9CoT,IAAK,WACH,OAAO7T,KAAKo0C,QAAQnN,eAEtBhQ,YAAY,EACZC,cAAc,IAEhB/2B,OAAO62B,eAAev2B,EAAS,YAAa,CAO1CoT,IAAK,WACH,OAAO7T,KAAKs0C,SAASva,WAEvB9C,YAAY,EACZC,cAAc,IAEhB/2B,OAAO62B,eAAev2B,EAAS,UAAW,CAOxCoT,IAAK,WACH,OAAO7T,KAAKs0C,SAASlrB,SAEvB6N,YAAY,EACZC,cAAc,IAEhB/2B,OAAO62B,eAAev2B,EAAS,gBAAiB,CAO9CoT,IAAK,WACH,OAAO7T,KAAKsyC,UAEdrb,YAAY,EACZC,cAAc,IAEhB/2B,OAAO62B,eAAev2B,EAAS,QAAS,CA+BtCoT,IAAK,WACH,OAAO7T,KAAKgkC,QAIdp9B,IAAK,SAAUnB,GACbzF,KAAKgkC,OAASv+B,EACdzF,KAAKk0C,UAAUngB,MAAQtuB,EACvBzF,KAAKo0C,QAAQrgB,MAAQtuB,GAEvBwxB,YAAY,EACZC,cAAc,IAEhB/2B,OAAO62B,eAAev2B,EAAS,eAAgB,CAO7CoT,IAAK,WACH,OAAO7T,KAAKuyC,eAEd3rC,IAAK,SAAUnB,GACbzF,KAAKuyC,cAAgB9sC,GAEvBwxB,YAAY,EACZC,cAAc,IAEhB/2B,OAAO62B,eAAev2B,EAAS,aAAc,CAO3CoT,IAAK,WACH,OAAO7T,KAAKwyC,aAEd5rC,IAAK,SAAUnB,GACbzF,KAAKwyC,YAAc/sC,GAErBwxB,YAAY,EACZC,cAAc,IAEhB/2B,OAAO62B,eAAev2B,EAAS,WAAY,CAOzCoT,IAAK,WACH,OAAO7T,KAAKyyC,WAEd7rC,IAAK,SAAUnB,GACbzF,KAAKyyC,UAAYhtC,GAEnBwxB,YAAY,EACZC,cAAc,IAEhB/2B,OAAO62B,eAAev2B,EAAS,QAAS,CAStCoT,IAAK,WACH,OAAO7T,KAAK0yC,QAEd9rC,IAAK,SAAUnB,GACbzF,KAAK0yC,OAASjtC,GAEhBwxB,YAAY,EACZC,cAAc,IAEhB/2B,OAAO62B,eAAev2B,EAAS,WAAY,CAOzCoT,IAAK,WACH,OAAO7T,KAAK2yC,WAEd/rC,IAAK,SAAUnB,GACbzF,KAAK2yC,UAAYltC,GAEnBwxB,YAAY,EACZC,cAAc,IAEhB/2B,OAAO62B,eAAev2B,EAAS,qBAAsB,CASnDoT,IAAK,WACH,OAAO7T,KAAK4yC,qBAGdhsC,IAAK,SAAUnB,GACbzF,KAAK4yC,oBAAsBntC,GAE7BwxB,YAAY,EACZC,cAAc,IAEhB/2B,OAAO62B,eAAev2B,EAAS,0BAA2B,CAOxDoT,IAAK,WACH,OAAO7T,KAAK6yC,0BAEdjsC,IAAK,SAAUnB,GACbzF,KAAK6yC,yBAA2BptC,GAElCwxB,YAAY,EACZC,cAAc,IAEhB/2B,OAAO62B,eAAev2B,EAAS,eAAgB,CAS7CoT,IAAK,WACH,OAAO7T,KAAK8yC,eAGdlsC,IAAK,SAAUnB,GACbzF,KAAK8yC,cAAgBrtC,GAEvBwxB,YAAY,EACZC,cAAc,IAEhB/2B,OAAO62B,eAAev2B,EAAS,SAAU,CAQvCoT,IAAK,WACH,OAAO7T,KAAKgzC,SAEdpsC,IAAK,SAAUnB,GACbzF,KAAKgzC,QAAUvtC,GAEjBwxB,YAAY,EACZC,cAAc,IAEhB/2B,OAAO62B,eAAev2B,EAAS,WAAY,CAOzCoT,IAAK,WACH,OAAO7T,KAAK+yC,WAEdnsC,IAAK,SAAUnB,GACbzF,KAAK+yC,UAAYttC,GAEnBwxB,YAAY,EACZC,cAAc,IAEhB/2B,OAAO62B,eAAev2B,EAAS,YAAa,CAW1CoT,IAAK,WACH,OAAO7T,KAAKizC,YAGdrsC,IAAK,SAAUnB,GACbzF,KAAKizC,WAAaxtC,GAEpBwxB,YAAY,EACZC,cAAc,IAEhB/2B,OAAO62B,eAAev2B,EAAS,WAAY,CA+BzCoT,IAAK,WACH,OAAO7T,KAAKkzC,WAEdtsC,IAAK,SAAUnB,GACbzF,KAAKkzC,UAAYztC,GAEnBwxB,YAAY,EACZC,cAAc,IAEhB/2B,OAAO62B,eAAev2B,EAAS,YAAa,CAO1CoT,IAAK,WACH,OAAO7T,KAAKmzC,YAEdvsC,IAAK,SAAUnB,GACbzF,KAAKmzC,WAAa1tC,GAEpBwxB,YAAY,EACZC,cAAc,IAEhB/2B,OAAO62B,eAAev2B,EAAS,gBAAiB,CAO9CoT,IAAK,WACH,OAAO7T,KAAKozC,gBAEdxsC,IAAK,SAAUnB,GACbzF,KAAKozC,eAAiB3tC,GAExBwxB,YAAY,EACZC,cAAc,IAEhB/2B,OAAO62B,eAAev2B,EAAS,SAAU,CAgCvCoT,IAAK,WACH,OAAO7T,KAAKqzC,SAEdzsC,IAAK,SAAUnB,GACbzF,KAAKqzC,QAAU5tC,GAEjBwxB,YAAY,EACZC,cAAc,IAEhB/2B,OAAO62B,eAAev2B,EAAS,wBAAyB,CAOtDoT,IAAK,WACH,OAAO7T,KAAKszC,wBAEd1sC,IAAK,SAAUnB,GACbzF,KAAKszC,uBAAyB7tC,GAEhCwxB,YAAY,EACZC,cAAc,IAEhB/2B,OAAO62B,eAAev2B,EAAS,qBAAsB,CAOnDoT,IAAK,WACH,OAAO7T,KAAKuzC,qBAEd3sC,IAAK,SAAUnB,GAEb,GAAIA,IADUzF,KAAKuzC,oBACnB,CACA,IAAIjZ,EAAat6B,KAAKs0C,SAASha,WAE3B70B,EACF60B,EAAWiD,yBAEXjD,EAAW4C,4BAGbl9B,KAAKuzC,oBAAsB9tC,IAE7BwxB,YAAY,EACZC,cAAc,IAEhB/2B,OAAO62B,eAAev2B,EAAS,gBAAiB,CAO9CoT,IAAK,WACH,OAAO7T,KAAKwzC,gBAEd5sC,IAAK,SAAUnB,GACbzF,KAAKwzC,eAAiB/tC,GAExBwxB,YAAY,EACZC,cAAc,IAEhB/2B,OAAO62B,eAAev2B,EAAS,oBAAqB,CASlDoT,IAAK,WACH,OAAO7T,KAAKyzC,oBAGd7sC,IAAK,SAAUnB,GACbzF,KAAKyzC,mBAAqBhuC,GAE5BwxB,YAAY,EACZC,cAAc,IAEhB/2B,OAAO62B,eAAev2B,EAAS,WAAY,CAUzCoT,IAAK,WACH,OAAO7T,KAAK2zC,WAEd1c,YAAY,EACZC,cAAc,IAEhB/2B,OAAO62B,eAAev2B,EAAS,aAAc,CAS3CoT,IAAK,WACH,OAAO7T,KAAK0zC,aAGd9sC,IAAK,SAAUnB,GACbzF,KAAK0zC,YAAcjuC,GAErBwxB,YAAY,EACZC,cAAc,IAEhB/2B,OAAO62B,eAAev2B,EAAS,iBAAkB,CAS/CoT,IAAK,WACH,OAAO7T,KAAK4zC,iBAEd3c,YAAY,EACZC,cAAc,IAWhBz2B,EAAQsN,KAAO,WACb,OAAOwhB,GAAUvvB,UAAM,OAAQ,GAAQ,WACrC,IAAIu5B,EAAQS,EAAUK,EAASma,EAAiB1D,EAE5ClvC,EAAQ5B,KAEZ,OAAOmwB,GAAYnwB,MAAM,SAAUD,GACjC,OAAQA,EAAGywB,OACT,KAAK,EACH,OAAIxwB,KAAKqyC,aAAqB,CAAC,IAG/B9Y,EAASv5B,KAAKo0C,QACdpa,EAAWh6B,KAAKk0C,UAChB7Z,EAAUr6B,KAAKs0C,SACfE,EAAkBx0C,KAAKgB,QACvB8vC,EAA0B9wC,KAAK6yC,yBAC/BtZ,EAAOxrB,KAAK/N,MACZg6B,EAASjsB,KAAK/N,MACdq6B,EAAQtsB,KAAK/N,MAET8wC,IACF9wC,KAAKgB,QAAU,WACb,OAAOY,IAIJ,CAAC,EAEN5B,KAAK03B,WAET,KAAK,EAIH,OAHA33B,EAAG0wB,OAGI,CAAC,EAENzwB,KAAKy0C,uBAET,KAAK,EA4BH,OA1BA10C,EAAG0wB,OAECzwB,KAAK0zC,aACP1uC,OAAOkI,iBAAiB,SAAUlN,KAAK03B,QAGrC13B,KAAKuzC,qBACPlZ,EAAQC,WAAWiD,yBAGjBv9B,KAAKwzC,gBACPxzC,KAAK00C,eAGP10C,KAAKsyC,SAAS/wC,SAAQ,SAAUozC,GAC9B,OAAOA,EAAO5mC,KAAKnM,MAIrB5B,KAAKqyC,cAAe,EAEhBvB,IACF9wC,KAAKgB,QAAUwzC,GAGjBx0C,KAAKgB,QAAQ,IAAI,EAAe8wB,GAAOC,QAChC,CAAC,WAclBtxB,EAAQ0N,QAAU,WACXnO,KAAKqyC,eACVryC,KAAKgC,MACLgD,OAAOoI,oBAAoB,SAAUpN,KAAK03B,QAE1C13B,KAAKs0C,SAASnmC,UAEdnO,KAAKo0C,QAAQjmC,UAEbnO,KAAKk0C,UAAU/lC,UAEfnO,KAAKsyC,SAAS/wC,SAAQ,SAAUozC,GAC9B,OAAOA,EAAOxmC,aAGhBnO,KAAKqyC,cAAe,IAqCtB5xC,EAAQw1B,KAAO,SAAUjR,GACvB,IAAIjlB,EAAIG,EAAIG,EAMZ,YAJiB,IAAb2kB,IACFA,EAAWhlB,KAAK+yC,WAGX/yC,KAAKupB,OAAuJ,QAA/IlpB,EAAgG,QAA1FH,EAA0C,QAApCH,EAAKC,KAAKs0C,SAASpW,mBAAgC,IAAPn+B,OAAgB,EAASA,EAAGk2B,cAA2B,IAAP/1B,OAAgB,EAASA,EAAG0D,aAA0B,IAAPvD,EAAgBA,GAAM,EAAG2kB,EAAUoO,GAAUH,OAsC1NxyB,EAAQ7B,KAAO,SAAUomB,GACvB,IAAIjlB,EAAIG,EAAIG,EAMZ,YAJiB,IAAb2kB,IACFA,EAAWhlB,KAAK+yC,WAGX/yC,KAAKupB,OAAuJ,QAA/IlpB,EAAgG,QAA1FH,EAA0C,QAApCH,EAAKC,KAAKs0C,SAASpW,mBAAgC,IAAPn+B,OAAgB,EAASA,EAAGnB,cAA2B,IAAPsB,OAAgB,EAASA,EAAG0D,aAA0B,IAAPvD,EAAgBA,EAAKL,KAAKk0C,UAAUja,WAAYjV,EAAUoO,GAAUD,OAwCjP1yB,EAAQ8oB,OAAS,SAAU3lB,EAAOohB,EAAU/c,QACzB,IAAb+c,IACFA,EAAWhlB,KAAK+yC,gBAGA,IAAd9qC,IACFA,EAAYmrB,GAAUC,MAGxB,IAAI2G,EAAWh6B,KAAKk0C,UAChBja,EAAaD,EAASC,WACtBoB,EAAQrB,EAAS8N,SAASlkC,GAE9B,OAAKy3B,EAIDr7B,KAAKs0C,SAASva,UACTnK,QAAQE,OAAO,IAAIuB,GAAcG,GAAmCD,KAGtEvxB,KAAKs0C,SAASjW,YAAYhD,EAAO,CACtCrW,SAAUA,EACV/c,UAAWA,IATJ2nB,QAAQE,OAAO,IAAIuB,GAAcG,GAA2B5tB,EAAO,EAAGq2B,EAAa,GAAI1I,MA0BlG9wB,EAAQqnC,SAAW,SAAUlkC,GAC3B,OAAO5D,KAAKk0C,UAAUpM,SAASlkC,IASjCnD,EAAQm0C,YAAc,WAGpB,OAFA50C,KAAKs0C,SAAS9sC,SAEPxH,MASTS,EAAQi0C,aAAe,WAGrB,OAFA10C,KAAKs0C,SAAS9lB,UAEPxuB,MAeTS,EAAQo0C,UAAY,SAAU90C,GAC5B,IAAIG,EAAIG,EAEJgqC,OAAY,IAAPtqC,EAAgB,GAAKA,EAC1BwwC,EAAKlG,EAAGzmC,MACRA,OAAe,IAAP2sC,GAAuBA,EAC/BC,EAAKnG,EAAGxY,SACRA,OAAkB,IAAP2e,GAAuBA,EAClCC,EAAKpG,EAAGyK,iBACRA,OAA0B,IAAPrE,GAAwBA,EAC3CE,EAAKtG,EAAG0K,kBACRA,OAA2B,IAAPpE,GAAwBA,EAE5CpX,EAASv5B,KAAKo0C,QAEdY,EAAS,CACX/Z,QAFW8Z,EAAoB/0C,KAAKinC,cAAgBjnC,KAAKi7B,QAE1CrY,KAAI,SAAUyY,GAC3B,IAAI4Z,EAAY,CACdrxC,MAAOy3B,EAAMz3B,OAOf,OAJIkxC,IACFG,EAAUC,KAAO7Z,EAAMt0B,QAAQouC,WAG1BF,MAQX,GAJIrxC,IACFoxC,EAAOpxC,MAAQ5D,KAAK4D,OAGlBiuB,EAAU,CACZ,IAAIyM,EAAgB/E,EAAOmF,kBAAkBnF,EAAO1H,UAEhDyM,IACF0W,EAAOnjB,SAAW,CAChBwJ,MAAOiD,EAAcjD,MAAMz3B,MAC3Bs+B,gBAAiB3I,EAAO+L,mBAAmBhH,EAAcjD,SAK/D,GAAI0Z,EAAmB,CACrB,IAAI9N,EAAgBjnC,KAAKinC,cACzB+N,EAAOI,cAAiG,QAAhF/0C,EAAiC,QAA3BH,EAAK+mC,EAAc,UAAuB,IAAP/mC,OAAgB,EAASA,EAAG0D,aAA0B,IAAPvD,EAAgBA,EAAK,EAGvI,OAAO20C,GAUTv0C,EAAQ40C,UAAY,SAAUL,GAC5B,IAAIj1C,EAEJ,IAAKC,KAAKqyC,aACR,MAAM,IAAIhhB,GAAcG,GAAyBD,IAGnD,IAAI3tB,EAAQoxC,EAAOpxC,MACfiuB,EAAWmjB,EAAOnjB,SAClBujB,EAAgBJ,EAAOI,cACvBna,EAAS+Z,EAAO/Z,OAChBjB,EAAWh6B,KAAKk0C,UAChB7Z,EAAUr6B,KAAKs0C,SAenB,IAb0B,QAApBv0C,EAAKk7B,EAAO,UAAuB,IAAPl7B,OAAgB,EAASA,EAAGm1C,QAAUl1C,KAAK4zC,kBAC3E5Z,EAAS2R,YAAY,CACnB/nC,MAAO,EACPioC,YAAa7rC,KAAKi7B,OAAOt8B,SAE3Bq7B,EAAS6Q,YAAY,CACnBjnC,MAAO,EACPqxB,SAAUD,GAAaiG,EAAOrY,KAAI,SAAUyY,GAC1C,OAAOA,EAAM6Z,YAKftxC,EAAO,CACT,IAAI0xC,EAAaF,EAAgBxxC,EAAQwxC,EAAgBxxC,EACpD5D,KAAKupB,OAAO+rB,EAAY,GAAG/V,OAAM,eAKxC,GAAI1N,GAAY7xB,KAAKkzC,YAAc5f,GAAUE,YAAa,CACxD,IAAI6H,EAAQxJ,EAASwJ,MACjB6G,EAAkBrQ,EAASqQ,gBAE3BC,GADAmT,EAAaF,EAAgB/Z,EAAQ+Z,EAAgB/Z,EACxCrB,EAASiB,OAAOqa,GAAYr0B,OACzCs0B,EAAepT,EAAW5gB,KAAO4gB,EAAW7gB,IAAM6gB,EAAW5gB,KAAO2gB,EACnE7H,EAAQqB,eAAe6Z,EAAc,GAAGhW,OAAM,iBAcvD9+B,EAAQ+0C,WAAa,WAOnB,IANA,IAAIz1C,EAEA6B,EAAQ5B,KAERy1C,EAAU,GAELt0C,EAAK,EAAGA,EAAK3B,UAAUb,OAAQwC,IACtCs0C,EAAQt0C,GAAM3B,UAAU2B,GAW1B,OARInB,KAAKqyC,cACPoD,EAAQl0C,SAAQ,SAAUiX,GACxB,OAAOA,EAAKzK,KAAKnM,OAIpB7B,EAAKC,KAAKsyC,UAAUjzC,KAAKoC,MAAM1B,EAAIgxB,GAAc,GAAI,GAAO0kB,KAEtDz1C,MAWTS,EAAQi1C,cAAgB,WAKtB,IAJA,IAAI9zC,EAAQ5B,KAERy1C,EAAU,GAELt0C,EAAK,EAAGA,EAAK3B,UAAUb,OAAQwC,IACtCs0C,EAAQt0C,GAAM3B,UAAU2B,GAc1B,OAXAs0C,EAAQl0C,SAAQ,SAAUiX,GACxB,IAAIm9B,EAAa7f,GAAUl0B,EAAM0wC,UAAU,SAAU7sC,GACnD,OAAOA,IAAQ+S,KAGbm9B,GAAc,IAChBn9B,EAAKrK,UAELvM,EAAM0wC,SAAS7vC,OAAOkzC,EAAY,OAG/B31C,MAYTS,EAAQi3B,OAAS,WACf,OAAOnI,GAAUvvB,UAAM,OAAQ,GAAQ,WACrC,IAAIg9B,EAAUhD,EAAUT,EAAQc,EAAS6D,EAAa0X,EAAWC,EAAYC,EAAqBte,EAAUC,EAAWse,EACvH,OAAO5lB,GAAYnwB,MAAM,SAAUD,GACjC,OAAQA,EAAGywB,OACT,KAAK,EAeH,OAdAwM,EAAWh9B,KAAK6zC,UAChB7Z,EAAWh6B,KAAKk0C,UAChB3a,EAASv5B,KAAKo0C,QACd/Z,EAAUr6B,KAAKs0C,SACfpW,EAAc7D,EAAQ6D,YACtB0X,EAAY5Y,EAAS5F,MACrBye,EAAa7Y,EAAS3F,OACtBye,EAAsB5X,EAAc3E,EAAO+L,mBAAmBpH,GAAe,EAC7El+B,KAAKgB,QAAQ,IAAI,EAAe8wB,GAAOE,cAAe,CACpDoF,MAAOwe,EACPve,OAAQwe,EACR9uC,QAASi2B,EAASj2B,WAEpBi2B,EAAStF,SACF,CAAC,EAENsC,EAASiV,wBAEb,KAAK,EAKH,OAJAlvC,EAAG0wB,OAGHuJ,EAAS4Q,kBACF,CAAC,EAEN5Q,EAASsF,UAEb,KAAK,EAMH,OALAv/B,EAAG0wB,OAEH8I,EAAO6M,iBACP7M,EAAOsO,cACPtO,EAAO+M,gBACFjM,EAAQN,UAGN,CAAC,EAEN,GAL6B,CAAC,EAE9B,GAKJ,KAAK,EACH,MAAO,CAAC,EAENM,EAAQ2D,eAAe8X,IAE3B,KAAK,EACH/1C,EAAG0wB,OAEH4J,EAAQuB,cACR77B,EAAGywB,MAAQ,EAEb,KAAK,EAcH,OAbAgH,EAAWwF,EAAS5F,MACpBK,EAAYuF,EAAS3F,OACrB0e,EAAcve,IAAaoe,GAAane,IAAcoe,EACtD71C,KAAKgB,QAAQ,IAAI,EAAe8wB,GAAOG,aAAc,CACnDmF,MAAO4F,EAAS5F,MAChBC,OAAQ2F,EAAS3F,OACjBpB,KAAM,CACJmB,MAAOwe,EACPve,OAAQwe,GAEVE,YAAaA,EACbhvC,QAASi2B,EAASj2B,WAEb,CAAC,WA6BlBtG,EAAQu1C,OAAS,SAAUjvC,GACzB,OAAO/G,KAAKi2C,OAAOj2C,KAAKk0C,UAAUja,WAAYlzB,IAyBhDtG,EAAQy1C,QAAU,SAAUnvC,GAC1B,OAAO/G,KAAKi2C,OAAO,EAAGlvC,IAwBxBtG,EAAQw1C,OAAS,SAAUryC,EAAOmD,GAChC,GAAI/G,KAAK4zC,gBACP,MAAM,IAAIviB,GAAcG,GAAkCD,IAG5D,OAAOvxB,KAAKk0C,UAAUrJ,YAAY,CAChCjnC,MAAOA,EACPqxB,SAAUD,GAAajuB,MAc3BtG,EAAQoY,OAAS,SAAUjV,EAAOioC,GAKhC,QAJoB,IAAhBA,IACFA,EAAc,GAGZ7rC,KAAK4zC,gBACP,MAAM,IAAIviB,GAAcG,GAAkCD,IAG5D,OAAOvxB,KAAKk0C,UAAUvI,YAAY,CAChC/nC,MAAOA,EACPioC,YAAaA,KAIjBprC,EAAQ8zC,eAAiB,WACvB,IAAIx0C,EAEAqxC,EAAWpxC,KAAKkzC,UAChBiD,EAAYh2C,OAAOC,KAAKkzB,IAAW1Q,KAAI,SAAUtiB,GACnD,OAAOgzB,GAAUhzB,MAEf81C,EAAchmC,MAAMqD,QAAQ29B,GAAYA,EAAS,GAAKA,EACtDiF,EAAkBjmC,MAAMqD,QAAQ29B,IAAmC,QAAtBrxC,EAAKqxC,EAAS,UAAuB,IAAPrxC,EAAgBA,EAAU,GAEzG,IAAK01B,GAAS0gB,EAAWC,GACvB,MAAM,IAAI/kB,GAAcG,GAAqB,WAAY8kB,KAAKC,UAAUnF,IAAY7f,IAGtF,OAAQ6kB,GACN,KAAK9iB,GAAUC,KACb,OAAO,IAAIyM,GAAYqW,GAEzB,KAAK/iB,GAAUE,YACb,OAAO,IAAIuO,GAAYsU,GAEzB,KAAK/iB,GAAUG,OACb,OAAO,IAAI6O,GAAc+T,KAI/B51C,EAAQ4zC,cAAgB,WACtB,IAAImC,EAAe,CACjBziB,MAAO/zB,KAAKgkC,QAGd,OAAIhkC,KAAKyyC,WACHzyC,KAAK0yC,QAEPt4B,QAAQC,KAAK,0EAGR,IAAI0tB,GAAeyO,IACjBx2C,KAAK0yC,OACP,IAAItJ,GAAYoN,GAEhB,IAAI5O,GAAa4O,IAI5B/1C,EAAQ0zC,gBAAkB,WACxB,IAAIsC,EAAoBz2C,KAAKyzC,mBAAqB,IAAIxD,GAA6B,IAAIhG,GACnFyM,EAAkB,CACpB3iB,MAAO/zB,KAAKgkC,OACZsG,SAAUmM,GAERrE,EAAiBpyC,KAAK4zC,gBAC1B,OAAOxB,EAAiB,IAAIA,EAAepY,SAAS,GAAS,GAAS,GAAI0c,GAAkBtE,EAAesE,kBAAoB,IAAI/H,GAAgB+H,IAGrJj2C,EAAQg0C,oBAAsB,WAC5B,OAAOllB,GAAUvvB,UAAM,OAAQ,GAAQ,WACrC,IAAIg6B,EAAUK,EAASsc,EACvB,OAAOxmB,GAAYnwB,MAAM,SAAUD,GAIjC,OAHAi6B,EAAWh6B,KAAKk0C,UAChB7Z,EAAUr6B,KAAKs0C,UACfqC,EAAe3c,EAAS8N,SAAS9nC,KAAKuyC,gBAAkBvY,EAAS8N,SAAS,IAInE,CAAC,EAENzN,EAAQgE,YAAYsY,EAAc,CAClC3xB,SAAU,KANc,CAAC,UAuBjCorB,EAAS1tC,QAAU,QACZ0tC,EAljDT,CAmjDE,GAOEwG,GAEJ,SAAU77B,GAWR,SAAS67B,EAAcxvC,GACrB,IAAIxF,EAAQmZ,EAAOrc,KAAKsB,KAAMoH,IAAYpH,KAG1C,OADA4B,EAAMi1C,mBAAqBzvC,EAAQ0vC,kBAC5Bl1C,EAGT,OAjBA,GAAUg1C,EAAe77B,GAiBlB67B,EAlBT,CAmBEtK,IAkBEyK,GAAsB,SAAUr2C,EAAWs2C,GAC7C,CAAC,EAAUt2C,UAAW,GAASA,WAAWa,SAAQ,SAAUiO,GAC1DrP,OAAO82C,oBAAoBznC,GAAOiC,QAAO,SAAUtP,GACjD,OAAQzB,EAAUyB,KAAUA,EAAK+0C,WAAW,MAAiB,gBAAT/0C,KACnDZ,SAAQ,SAAUY,GACnB,IAAIg1C,EAAah3C,OAAOi3C,yBAAyB5nC,EAAOrN,GAExD,GAAIg1C,EAAWt4C,MAEbsB,OAAO62B,eAAet2B,EAAWyB,EAAM,CACrCtD,MAAO,WAKL,IAJA,IAAIkB,EAEAgC,EAAO,GAEFZ,EAAK,EAAGA,EAAK3B,UAAUb,OAAQwC,IACtCY,EAAKZ,GAAM3B,UAAU2B,GAGvB,OAAQpB,EAAKo3C,EAAWt4C,OAAOH,KAAK+C,MAAM1B,EAAIgxB,GAAc,CAAC/wB,KAAKg3C,IAAgB,GAAOj1C,YAGxF,CACL,IAAIs1C,EAAmB,GAEnBF,EAAWtjC,MACbwjC,EAAiBxjC,IAAM,WACrB,IAAI9T,EAEJ,OAAiC,QAAzBA,EAAKo3C,EAAWtjC,WAAwB,IAAP9T,OAAgB,EAASA,EAAGrB,KAAKsB,KAAKg3C,MAI/EG,EAAWvwC,MACbywC,EAAiBzwC,IAAM,WAKrB,IAJA,IAAI7G,EAEAgC,EAAO,GAEFZ,EAAK,EAAGA,EAAK3B,UAAUb,OAAQwC,IACtCY,EAAKZ,GAAM3B,UAAU2B,GAGvB,OAAiC,QAAzBpB,EAAKo3C,EAAWvwC,WAAwB,IAAP7G,OAAgB,EAASA,EAAGrB,KAAK+C,MAAM1B,EAAIgxB,GAAc,CAAC/wB,KAAKg3C,IAAgB,GAAOj1C,OAInI5B,OAAO62B,eAAet2B,EAAWyB,EAAMk1C,WAM3CC,GAAO,SAAWle,EAAUme,EAAY7Q,GAC1C,IAAI1M,EAAWZ,EAASY,SAExB,GAAIud,EAAW5Y,QAAQhgC,OAAS,EAAG,CACjC,IAAI64C,GAAc,EACdC,GAAa,EACjBF,EAAW5Y,QAAQp9B,SAAQ,SAAUm2C,EAAYp1C,GAC3Ck1C,EAAa,IACfA,EAAal1C,GAGXm1C,GAAa,GAAKC,IAAeD,EAAY,GAC/C9L,GAAY3R,EAAUud,EAAYC,EAAYl1C,EAAM,GACpDk1C,GAAc,EACdC,GAAa,GAEbA,EAAYC,KAIZF,GAAc,GAChB7L,GAAY3R,EAAUud,EAAYC,GAsBtC,GAlBAD,EAAWI,QAAQp2C,SAAQ,SAAUxB,GACnC,IAAIG,EAAK,GAAOH,EAAI,GAChB63C,EAAU13C,EAAG,GACb23C,EAAS33C,EAAG,GAEZ0/B,EAAY5F,EAASiB,OAAO2c,GAC5BE,EAAYD,EAASD,EAErBE,EAAY,EACdlY,EAAU2L,cAAcuM,GAExBlY,EAAUsM,eAAe4L,GAI3BlY,EAAUlI,YAGR6f,EAAWvQ,MAAMroC,OAAS,EAAG,CAC/B,IAAIo5C,GAAc,EACdC,GAAa,EACjBT,EAAWvQ,MAAMzlC,SAAQ,SAAU02C,EAAU31C,GACvCy1C,EAAa,IACfA,EAAaz1C,GAGX01C,GAAa,GAAKC,IAAaD,EAAY,GAC7CnN,GAAY7Q,EAAUud,EAAY7Q,EAAUqR,EAAYz1C,EAAM,GAC9Dy1C,GAAc,EACdC,GAAa,GAEbA,EAAYC,KAIZF,GAAc,GAChBlN,GAAY7Q,EAAUud,EAAY7Q,EAAUqR,KAK9ClN,GAAc,SAAU7Q,EAAUud,EAAY7Q,EAAUwR,EAAUC,GACpEne,EAAS6Q,YAAYppC,MAAMu4B,EAAUjJ,GAAc,GAAI,GAAOwmB,EAAWvQ,MAAMjiC,MAAMmzC,EAAUC,GAAQv1B,KAAI,SAAUhf,EAAOw0C,GAC1H,MAAO,CACLx0C,MAAOA,EACPqxB,SAAU,CAACyR,EAAS0R,EAAQb,EAAWc,SAAS15C,iBAKlDgtC,GAAc,SAAU3R,EAAUud,EAAYW,EAAUC,GAC1D,IAAIxZ,EAAU4Y,EAAW5Y,QAAQ55B,MAAMmzC,EAAUC,GACjDne,EAAS2R,YAAY,CACnB/nC,MAAOs0C,EACPrM,YAAalN,EAAQhgC,UAIrB25C,GAAqB,SAAWlf,EAAUme,GAC5C,IAAIgB,EAAgBhB,EAAW5Y,QAAQxZ,QAAO,SAAUvC,EAAKtgB,GAE3D,OADAsgB,EAAItgB,IAAO,EACJsgB,IACN,IACH,OAAOmO,GAAcA,GAAc,GAAI,GAAOqI,EAAS6B,OAAOxpB,QAAO,SAAU4pB,GAC7E,OAAQkd,EAAcld,EAAMz3B,UAE7B0M,MAAK,SAAUkoC,EAAQC,GACtB,OAAOD,EAAO3mB,SAAW2mB,EAAO3tC,QAAU4tC,EAAO5mB,SAAW4mB,EAAO5tC,WAClE+X,KAAI,SAAUyY,GACf,OAAOkc,EAAWc,SAAShd,EAAMz3B,YAC7B,GAAO2zC,EAAWvQ,MAAMpkB,KAAI,SAAUtgB,GAC1C,OAAOi1C,EAAWmB,KAAKp2C,SAIvBq2C,GAA4B,SAAW5kB,EAAO4G,EAAYie,QAC9C,IAAV7kB,IACFA,EAAQf,GAAME,aAGG,IAAfyH,IACFA,GAAa,GAGf,IAAIke,EAAcC,GAAe/kB,GAC7B0W,EAAasO,GAAchlB,GAC/B,GAAkB,MAAd0W,EAAoB,MAAO,GAC/B,IAAIuO,EAAc,QAAUH,EAAc,QAAUD,GAAkB,OAAS,MAAQnO,EAAWlW,WAAa,OAASkW,EAAWjW,SAAW,MAC9I,OAAOmG,EAAa,aAAeqe,EAAc,IAAM,gBAAkBA,EAAc,KAGrFF,GAAiB,SAAU/kB,GAC7B,IAAIsS,EAA4B,iBAAVtS,EAAqBA,EAAMwF,OAASxF,EAC1D,OAAOklB,GAAW5S,IAGhB0S,GAAgB,SAAUhlB,GAC5B,IAAIsS,EAA4B,iBAAVtS,EAAqBA,EAAMsH,MAAQtH,EACzD,OAAOO,GAA0B2kB,GAAW5S,KAG1C4S,GAAa,SAAU5S,GACzB,GAAwB,iBAAbA,EACT,OAAOA,EAAW,KAGpB,OAAQA,GACN,KAAKrT,GAAME,OACT,MAAO,MAET,KAAKF,GAAMG,KACT,MAAO,OAET,KAAKH,GAAMC,KACT,MAAO,KAET,QACE,OAAOoT,IASE,Q,qDCxqOX6S,EAEJ,WACE,SAASA,IACPl5C,KAAKI,KAAO,GACZJ,KAAKwQ,OAAS,GAGhB,IAAI/P,EAAUy4C,EAAQx4C,UAetB,OAbAD,EAAQoT,IAAM,SAAUvT,GACtB,OAAON,KAAKwQ,OAAOxQ,KAAKI,KAAKqG,QAAQnG,KAGvCG,EAAQmG,IAAM,SAAUtG,EAAKzB,GAC3B,IAAIuB,EAAOJ,KAAKI,KACZoQ,EAASxQ,KAAKwQ,OACdmvB,EAAYv/B,EAAKqG,QAAQnG,GACzBsD,GAAuB,IAAf+7B,EAAmBv/B,EAAKzB,OAASghC,EAC7Cv/B,EAAKwD,GAAStD,EACdkQ,EAAO5M,GAAS/E,GAGXq6C,EArBT,GA6BIC,EAEJ,WACE,SAASA,IACPn5C,KAAKo5C,OAAS,GAGhB,IAAI34C,EAAU04C,EAAQz4C,UAUtB,OARAD,EAAQoT,IAAM,SAAUvT,GACtB,OAAON,KAAKo5C,OAAO94C,IAGrBG,EAAQmG,IAAM,SAAUtG,EAAKzB,GAC3BmB,KAAKo5C,OAAO94C,GAAOzB,GAGds6C,EAfT,GAuBIE,EAA6B,mBAARC,IAOrBC,EAEJ,WACE,SAASA,KAET,IAAI94C,EAAU84C,EAAK74C,UA6BnB,OA3BAD,EAAQsrB,QAAU,SAAUytB,EAAUC,GACpCz5C,KAAKi2B,KAAOujB,EACZx5C,KAAKpB,KAAO66C,EACZD,IAAaA,EAAS56C,KAAOoB,MAC7By5C,IAAaA,EAASxjB,KAAOj2B,OAG/BS,EAAQyrB,WAAa,WAEnB,IAAIstB,EAAWx5C,KAAKi2B,KAChBwjB,EAAWz5C,KAAKpB,KACpB46C,IAAaA,EAAS56C,KAAO66C,GAC7BA,IAAaA,EAASxjB,KAAOujB,IAG/B/4C,EAAQi5C,SAAW,WAIjB,IAHA,IAAIC,EAAO35C,KACP4D,GAAS,EAEN+1C,GACLA,EAAOA,EAAK1jB,OACVryB,EAGJ,OAAOA,GAGF21C,EAhCT,GAqFA,IAAIK,EAEJ,WACE,SAASA,EAAOvB,EAAUK,EAAM1R,EAAOrI,EAAS/kB,EAASigC,EAAYC,EAAoBC,GACvF/5C,KAAKq4C,SAAWA,EAChBr4C,KAAK04C,KAAOA,EACZ14C,KAAKgnC,MAAQA,EACbhnC,KAAK2+B,QAAUA,EACf3+B,KAAK4Z,QAAUA,EACf5Z,KAAK65C,WAAaA,EAClB75C,KAAK85C,mBAAqBA,EAC1B95C,KAAK+5C,MAAQA,EAGf,IAAIt5C,EAAUm5C,EAAOl5C,UA2CrB,OA1CAP,OAAO62B,eAAev2B,EAAS,UAAW,CACxCoT,IAAK,WAKH,OAJK7T,KAAKg6C,cACRh6C,KAAKi6C,kBAGAj6C,KAAKg6C,cAEd/iB,YAAY,EACZC,cAAc,IAEhB/2B,OAAO62B,eAAev2B,EAAS,cAAe,CAC5CoT,IAAK,WAKH,OAJK7T,KAAKk6C,kBACRl6C,KAAKi6C,kBAGAj6C,KAAKk6C,kBAEdjjB,YAAY,EACZC,cAAc,IAGhBz2B,EAAQw5C,gBAAkB,WACxB,IAAItC,EAnFR,SAAsB/9B,EAASmgC,GAG7B,IAAII,EAAY,GAEZC,EAAU,GAYd,OAXAxgC,EAAQrY,SAAQ,SAAUxB,GACxB,IAAIkxB,EAAOlxB,EAAG,GACVixB,EAAKjxB,EAAG,GACR45C,EAAO,IAAIJ,EACfY,EAAUlpB,GAAQ0oB,EAClBS,EAAQppB,GAAM2oB,KAGhBQ,EAAU54C,SAAQ,SAAUo4C,EAAMl7C,GAChCk7C,EAAK5tB,QAAQouB,EAAU17C,EAAI,OAEtBmb,EAAQnI,QAAO,SAAU8e,EAAG9xB,GACjC,OAAQs7C,EAAMt7C,MACbmkB,KAAI,SAAU7iB,EAAItB,GACnB,IAAIwyB,EAAOlxB,EAAG,GACVixB,EAAKjxB,EAAG,GAEZ,GAAIkxB,IAASD,EACX,MAAO,CAAC,EAAG,GAGb,IAAIqpB,EAAWF,EAAUlpB,GACrBqpB,EAASF,EAAQppB,EAAK,GACtBupB,EAAYF,EAASX,WAWzB,OATAW,EAASnuB,aAEJouB,EAGHD,EAAStuB,QAAQuuB,EAAQA,EAAO17C,MAFhCy7C,EAAStuB,aAAQ5mB,EAAWg1C,EAAU,IAMjC,CAACI,EADMF,EAASX,eA4CTc,CAAax6C,KAAK85C,mBAAoB95C,KAAK+5C,OACrDngC,EAAU5Z,KAAK4Z,QACf6gC,EAAc,GAClBz6C,KAAKg6C,aAAerC,EAAQlmC,QAAO,SAAU1R,EAAItB,GAC/C,IAAIwyB,EAAOlxB,EAAG,GACVixB,EAAKjxB,EAAG,GACRG,EAAK0Z,EAAQnb,GACbi8C,EAAax6C,EAAG,GAChBy6C,EAAWz6C,EAAG,GAElB,GAAI+wB,IAASD,EAEX,OADAypB,EAAYp7C,KAAK,CAACq7C,EAAYC,KACvB,KAGX36C,KAAKk6C,iBAAmBO,GAGnBb,EAvDT,GAoKA,IAsEe,EApEf,WAkCE,SAASgB,EAAWlC,EAAMmC,QACX,IAATnC,IACFA,EAAO,IAGT14C,KAAK66C,gBAAkBA,EACvB76C,KAAK04C,KAAO,GAAG3zC,MAAMrG,KAAKg6C,GAmB5B,OATckC,EAAWl6C,UAEjByG,OAAS,SAAUuxC,GACzB,IAAIoC,EAAU,GAAG/1C,MAAMrG,KAAKg6C,GACxBl7B,EA3HR,SAAc66B,EAAUK,EAAMmC,GAC5B,IAAIE,EAAW1B,EAAcC,IAAMuB,EAAkB1B,EAAUD,EAE3DvrC,EAAWktC,GAAmB,SAAU17C,GAC1C,OAAOA,GAGL6nC,EAAQ,GACRrI,EAAU,GACVkb,EAAa,GACbmB,EAAW3C,EAASz1B,IAAIjV,GACxBvN,EAAOs4C,EAAK91B,IAAIjV,GAChBstC,EAAa,IAAIF,EACjBG,EAAS,IAAIH,EACbjB,EAAqB,GACrBC,EAAQ,GACRoB,EAAa,GACbvhC,EAAU,GACVwhC,EAAa,EACbC,EAAe,EAuCnB,OArCAL,EAASz5C,SAAQ,SAAUjB,EAAKg7C,GAC9BL,EAAWr0C,IAAItG,EAAKg7C,MAEtBl7C,EAAKmB,SAAQ,SAAUjB,EAAKi7C,GAC1BL,EAAOt0C,IAAItG,EAAKi7C,MAGlBP,EAASz5C,SAAQ,SAAUjB,EAAKg7C,GAC9B,IAAIC,EAAYL,EAAOrnC,IAAIvT,QAEF,IAAdi7C,KACPF,EACF1c,EAAQt/B,KAAKi8C,IAEbH,EAAWI,GAAaF,KAI5Bj7C,EAAKmB,SAAQ,SAAUjB,EAAKi7C,GAC1B,IAAID,EAAgBL,EAAWpnC,IAAIvT,QAEN,IAAlBg7C,GACTtU,EAAM3nC,KAAKk8C,KACTH,IAEFvB,EAAWx6C,KAAK,CAACi8C,EAAeC,IAChCF,EAAeF,EAAWI,IAAc,EACxCzB,EAAmBz6C,KAAK,CAACi8C,EAAgBD,EAAcE,EAAYH,IACnErB,EAAM16C,KAAKk8C,IAAcD,GAErBA,IAAkBC,GACpB3hC,EAAQva,KAAK,CAACi8C,EAAeC,QAKnC5c,EAAQkR,UACD,IAAI+J,EAAOvB,EAAUK,EAAM1R,EAAOrI,EAAS/kB,EAASigC,EAAYC,EAAoBC,GAiE5EyB,CAAKx7C,KAAK04C,KAAMoC,EAAS96C,KAAK66C,iBAE3C,OADA76C,KAAK04C,KAAOoC,EACLt9B,GAGFo9B,EA3DT,G,0BC3SIp6B,EAAgB,SAAUC,EAAG/P,GAS/B,OARA8P,EAAgBrgB,OAAOugB,gBAAkB,CACvCrd,UAAW,cACA+M,OAAS,SAAUqQ,EAAG/P,GACjC+P,EAAEpd,UAAYqN,IACX,SAAU+P,EAAG/P,GAChB,IAAK,IAAIiQ,KAAKjQ,EAAOvQ,OAAOO,UAAUqC,eAAerE,KAAKgS,EAAGiQ,KAAIF,EAAEE,GAAKjQ,EAAEiQ,MAGvDF,EAAG/P,IAG1B,SAASkQ,EAAUH,EAAG/P,GACpB,GAAiB,mBAANA,GAA0B,OAANA,EAAY,MAAM,IAAI3R,UAAU,uBAAyBsvB,OAAO3d,GAAK,iCAGpG,SAASmQ,IACP7gB,KAAKoD,YAAcqd,EAHrBD,EAAcC,EAAG/P,GAMjB+P,EAAE/f,UAAkB,OAANgQ,EAAavQ,OAAOgD,OAAOuN,IAAMmQ,EAAGngB,UAAYgQ,EAAEhQ,UAAW,IAAImgB,GAEjF,IAAIC,EAAW,WAWb,OAVAA,EAAW3gB,OAAOyC,QAAU,SAAkB+P,GAC5C,IAAK,IAAItU,EAAGI,EAAI,EAAGQ,EAAIO,UAAUb,OAAQF,EAAIQ,EAAGR,IAG9C,IAAK,IAAIkiB,KAFTtiB,EAAImB,UAAUf,GAEO0B,OAAOO,UAAUqC,eAAerE,KAAKL,EAAGsiB,KAAIhO,EAAEgO,GAAKtiB,EAAEsiB,IAG5E,OAAOhO,IAGOlR,MAAMzB,KAAMR,YAS9B,SAAS+vB,EAAUC,EAASC,EAAYC,EAAGC,GAOzC,OAAO,IAAKD,IAAMA,EAAIE,WAAU,SAAUC,EAASC,GACjD,SAASC,EAAUlxB,GACjB,IACEmxB,EAAKL,EAAU/wB,KAAKC,IACpB,MAAOM,GACP2wB,EAAO3wB,IAIX,SAAS8wB,EAASpxB,GAChB,IACEmxB,EAAKL,EAAiB,MAAE9wB,IACxB,MAAOM,GACP2wB,EAAO3wB,IAIX,SAAS6wB,EAAKxS,GAvBhB,IAAe3e,EAwBX2e,EAAO1e,KAAO+wB,EAAQrS,EAAO3e,QAxBlBA,EAwBiC2e,EAAO3e,MAvB9CA,aAAiB6wB,EAAI7wB,EAAQ,IAAI6wB,GAAE,SAAUG,GAClDA,EAAQhxB,OAsBkDqxB,KAAKH,EAAWE,GAG5ED,GAAML,EAAYA,EAAUluB,MAAM+tB,EAASC,GAAc,KAAK7wB,WAGlE,SAASuxB,EAAYX,EAASY,GAC5B,IASIC,EACA7mB,EACAmJ,EACA2d,EAZAC,EAAI,CACNC,MAAO,EACPC,KAAM,WACJ,GAAW,EAAP9d,EAAE,GAAQ,MAAMA,EAAE,GACtB,OAAOA,EAAE,IAEX+d,KAAM,GACNC,IAAK,IAMP,OAAOL,EAAI,CACT1xB,KAAMgyB,EAAK,GACX,MAASA,EAAK,GACd,OAAUA,EAAK,IACI,mBAAXtyB,SAA0BgyB,EAAEhyB,OAAOC,UAAY,WACvD,OAAOyB,OACLswB,EAEJ,SAASM,EAAK3xB,GACZ,OAAO,SAAU+M,GACf,OAIJ,SAAc6kB,GACZ,GAAIR,EAAG,MAAM,IAAItxB,UAAU,mCAE3B,KAAOwxB,GAAG,IACR,GAAIF,EAAI,EAAG7mB,IAAMmJ,EAAY,EAARke,EAAG,GAASrnB,EAAU,OAAIqnB,EAAG,GAAKrnB,EAAS,SAAOmJ,EAAInJ,EAAU,SAAMmJ,EAAEjU,KAAK8K,GAAI,GAAKA,EAAE5K,SAAW+T,EAAIA,EAAEjU,KAAK8K,EAAGqnB,EAAG,KAAK/xB,KAAM,OAAO6T,EAG3J,OAFInJ,EAAI,EAAGmJ,IAAGke,EAAK,CAAS,EAARA,EAAG,GAAQle,EAAE9T,QAEzBgyB,EAAG,IACT,KAAK,EACL,KAAK,EACHle,EAAIke,EACJ,MAEF,KAAK,EAEH,OADAN,EAAEC,QACK,CACL3xB,MAAOgyB,EAAG,GACV/xB,MAAM,GAGV,KAAK,EACHyxB,EAAEC,QACFhnB,EAAIqnB,EAAG,GACPA,EAAK,CAAC,GACN,SAEF,KAAK,EACHA,EAAKN,EAAEI,IAAIG,MAEXP,EAAEG,KAAKI,MAEP,SAEF,QACE,KAAMne,EAAI4d,EAAEG,MAAM/d,EAAIA,EAAEhU,OAAS,GAAKgU,EAAEA,EAAEhU,OAAS,KAAkB,IAAVkyB,EAAG,IAAsB,IAAVA,EAAG,IAAW,CACtFN,EAAI,EACJ,SAGF,GAAc,IAAVM,EAAG,MAAcle,GAAKke,EAAG,GAAKle,EAAE,IAAMke,EAAG,GAAKle,EAAE,IAAK,CACvD4d,EAAEC,MAAQK,EAAG,GACb,MAGF,GAAc,IAAVA,EAAG,IAAYN,EAAEC,MAAQ7d,EAAE,GAAI,CACjC4d,EAAEC,MAAQ7d,EAAE,GACZA,EAAIke,EACJ,MAGF,GAAIle,GAAK4d,EAAEC,MAAQ7d,EAAE,GAAI,CACvB4d,EAAEC,MAAQ7d,EAAE,GAEZ4d,EAAEI,IAAItxB,KAAKwxB,GAEX,MAGEle,EAAE,IAAI4d,EAAEI,IAAIG,MAEhBP,EAAEG,KAAKI,MAEP,SAGJD,EAAKT,EAAK1xB,KAAK8wB,EAASe,GACxB,MAAOpxB,GACP0xB,EAAK,CAAC,EAAG1xB,GACTqK,EAAI,EACJ,QACA6mB,EAAI1d,EAAI,EAGV,GAAY,EAARke,EAAG,GAAQ,MAAMA,EAAG,GACxB,MAAO,CACLhyB,MAAOgyB,EAAG,GAAKA,EAAG,QAAK,EACvB/xB,MAAM,GAhFCkxB,CAAK,CAAC/wB,EAAG+M,MAoFtB,SAAS+kB,EAAcC,EAAIC,GACzB,IAAK,IAAIxyB,EAAI,EAAGyyB,EAAKD,EAAKtyB,OAAQwyB,EAAIH,EAAGryB,OAAQF,EAAIyyB,EAAIzyB,IAAK0yB,IAAKH,EAAGG,GAAKF,EAAKxyB,GAEhF,OAAOuyB,EAGT,IAAIyqB,EAAgB,CAClBC,YAAa,MACbC,UAAW,MACXlG,QAAS,GACTmG,gBAAgB,EAChBC,gBAAgB,EAChBjD,oBAAgBzzC,EAChB22C,QAAS,SAAU38C,KACnB48C,eAAgB,SAAU58C,KAC1B68C,cAAe,SAAU78C,KACzB88C,YAAa,SAAU98C,KACvB+8C,UAAW,SAAU/8C,KACrBg9C,YAAa,SAAUh9C,KACvBi9C,OAAQ,SAAUj9C,KAClBk9C,UAAW,SAAUl9C,KACrBm9C,aAAc,SAAUn9C,KACxBo9C,UAAW,SAAUp9C,KACrBq9C,cAAe,SAAUr9C,KACzBs9C,WAAY,SAAUt9C,KACtBu9C,SAAU,SAAUv9C,KACpBw9C,YAAa,SAAUx9C,KACvBy9C,gBAAiB,SAAUz9C,KAC3B09C,YAAa,SAAU19C,KACvB29C,cAAe,SAAU39C,MAGvB49C,EAEJ,SAAUhiC,GAGR,SAASgiC,IACP,OAAkB,OAAXhiC,GAAmBA,EAAOtZ,MAAMzB,KAAMR,YAAcQ,KAH7D4gB,EAAUm8B,EAAYhiC,GAMtB,IAAIta,EAAUs8C,EAAWr8C,UAwBzB,OAvBAP,OAAO62B,eAAev2B,EAAS,UAAW,CACxCoT,IAAK,WACH,OAAO7T,KAAK62C,mBAAmB9vC,SAEjCkwB,YAAY,EACZC,cAAc,IAEhB/2B,OAAO62B,eAAev2B,EAAS,WAAY,CACzCoT,IAAK,WACH,OAAQ7T,KAAK62C,mBAAmBmG,MAElC/lB,YAAY,EACZC,cAAc,IAGhBz2B,EAAQ0pC,YAAc,WACpBnqC,KAAK62C,mBAAmBmG,MAAO,GAGjCv8C,EAAQiuC,YAAc,WACpB1uC,KAAK62C,mBAAmBmG,MAAO,GAG1BD,EA/BT,CAgCE,KAEEE,EAEJ,SAAUliC,GAGR,SAASkiC,EAAc71C,GACrB,IAAIxF,EAAQmZ,EAAOrc,KAAKsB,KAAMoH,IAAYpH,KAG1C,OADA4B,EAAMs7C,eAAiB91C,EAAQ+1C,cACxBv7C,EANTgf,EAAUq8B,EAAeliC,GAUzB,IAAIta,EAAUw8C,EAAcv8C,UAoE5B,OAlEAD,EAAQ6+B,OAAS,WACf,OAAO/P,EAAUvvB,UAAM,OAAQ,GAAQ,WACrC,IAAIsqC,EAAUlR,EAAU+jB,EACxB,OAAOhtB,EAAYnwB,MAAM,SAAUD,GAIjC,OAHAuqC,EAAWtqC,KAAKuqC,mBAChBnR,EAAWp5B,KAAK+8B,UAChBogB,EAAgBn9C,KAAKk9C,eAChB9jB,GAAa+jB,EAAcC,SAGhC9S,EAASJ,sBAAsB9Q,GACxB,CAAC,EAEN,IAAIxJ,SAAQ,SAAUC,GACtBstB,EAAcE,kBAAkBxtB,GAChCstB,EAAcG,SAAS,SARuB,CAAC,UAcvD78C,EAAQwuC,qBAAuB,WAC7B,OAAO1f,EAAUvvB,UAAM,OAAQ,GAAQ,WACrC,IAAIm9C,EACJ,OAAOhtB,EAAYnwB,MAAM,SAAUD,GAEjC,OADAo9C,EAAgBn9C,KAAKk9C,gBACFE,SAInBp9C,KAAKwqC,QAAQjpC,SAAQ,SAAU85B,GAC7B,OAAOA,EAAM8O,iBAGR,CAAC,EAEN,IAAIva,SAAQ,SAAUC,GACtBstB,EAAcE,kBAAkBxtB,GAChCstB,EAAcG,SAAS,SAZU,CAAC,UAkB1C78C,EAAQkqC,eAAiB,WACvB,IAAI/oC,EAAQ5B,KAER+zB,EAAQ/zB,KAAK0qC,iBAEbvV,EAAWn1B,KAAKk9C,eAAeK,YACnCv9C,KAAKwqC,QAAUrV,EAASvS,KAAI,SAAU46B,EAAgB55C,GACpD,OAAO,IAAIm5C,EAAW,CACpB3jB,SAAUx3B,EAAMm7B,UAChBn5B,MAAOA,EACPmwB,MAAOA,EACP+iB,kBAAmB0G,QAKzB/8C,EAAQ2qC,aAAe,SAAU0L,EAAmB1vC,GAClD,OAAO,IAAI21C,EAAWj8B,EAAS,CAC7Bg2B,kBAAmBA,GAClB1vC,KAGE61C,EA/ET,CAgFE,KAEE,EAEJ,SAAUliC,GAGR,SAAS0iC,IACP,IAAI77C,EAAmB,OAAXmZ,GAAmBA,EAAOtZ,MAAMzB,KAAMR,YAAcQ,KAGhE,OADA4B,EAAMo7C,MAAO,EACNp7C,EANTgf,EAAU68B,EAAyB1iC,GASnC,IAAIta,EAAUg9C,EAAwB/8C,UAatC,OAZAP,OAAO62B,eAAev2B,EAAS,UAAW,CACxCoT,IAAK,WACH,OAAO,sBAAY7T,OAErBi3B,YAAY,EACZC,cAAc,IAGhBz2B,EAAQ6+B,OAAS,WACf,OAAOt/B,KAAKg9C,KAAO,gBAAoB,WAAgB,MAAQh9C,KAAKH,MAAMs1B,UAGrEsoB,EAvBT,CAwBE,aAEE,EAEJ,SAAU1iC,GAGR,SAAS2iC,IACP,IAAI97C,EAAmB,OAAXmZ,GAAmBA,EAAOtZ,MAAMzB,KAAMR,YAAcQ,KAIhE,OAFA4B,EAAMo7C,MAAO,EACbp7C,EAAM+7C,OAAS,cACR/7C,EAPTgf,EAAU88B,EAAsB3iC,GAUhC,IAAIta,EAAUi9C,EAAqBh9C,UAmBnC,OAlBAP,OAAO62B,eAAev2B,EAAS,UAAW,CACxCoT,IAAK,WACH,OAAO7T,KAAK29C,OAAOC,SAErB3mB,YAAY,EACZC,cAAc,IAGhBz2B,EAAQ6+B,OAAS,WACf,OAAOt/B,KAAKg9C,KAAO,gBAAoB,WAAgB,MAAQh9C,KAAK69C,eAGtEp9C,EAAQo9C,YAAc,WACpB,OAAO,eAAmB,WAAeC,KAAK99C,KAAKH,MAAMs1B,UAAW,CAClE4oB,IAAK/9C,KAAK29C,UAIPD,EA9BT,CA+BE,aAEEM,EAAe,SAAUj+C,GAC3B,IAAIo1B,EAAWp1B,EAAGo1B,SAClB,OAAO,IAAejxB,cAAc,IAAe+5C,SAAU,KAAM9oB,IAGjE,EAEJ,SAAUpa,GAGR,SAASq1B,EAASvwC,GAChB,IAAI+B,EAAQmZ,EAAOrc,KAAKsB,KAAMH,IAAUG,KAMxC,OAJA4B,EAAM4oC,QAAU,GAChB5oC,EAAM4oC,QAAU5oC,EAAMs8C,eAAet7B,KAAI,WACvC,OAAO,iBAEFhhB,EATTgf,EAAUwvB,EAAUr1B,GAYpB,IAAIta,EAAU2vC,EAAS1vC,UAkNvB,OAjNAP,OAAO62B,eAAev2B,EAAS,UAAW,CACxCoT,IAAK,WACH,OAAO7T,KAAKm+C,UAEdlnB,YAAY,EACZC,cAAc,IAEhB/2B,OAAO62B,eAAev2B,EAAS,cAAe,CAC5CoT,IAAK,WACH,OAAO7T,KAAKwqC,QAAQ5nB,KAAI,SAAUyY,GAChC,OAAOA,EAAMuiB,YAGjB3mB,YAAY,EACZC,cAAc,IAGhBz2B,EAAQ48C,kBAAoB,SAAU1vC,GACpC3N,KAAKo+C,gBAAkBzwC,GAGzBlN,EAAQ49C,kBAAoB,WAC1Br+C,KAAKm+C,UAAW,EAChB,IAAIt+C,EAAQG,KAAKH,MACbu5B,EAAW,IAAI,IAAyBp5B,KAAKs+C,iBAAkBx9B,EAASA,EAAS,GAAIjhB,GAAQ,CAC/FuyC,eAAgB,CACdpY,SAAUijB,EACVvG,gBAAiB,CACfyG,cAAen9C,UAIrBA,KAAKu+C,iBAAmBnlB,EAExBp5B,KAAKw+C,cAEL,IAAIrpB,EAAWn1B,KAAKk+C,eAEpBl+C,KAAKy+C,WAAa,IAAI,EAAWtpB,GAAU,SAAUkG,GACnD,OAAOA,EAAM/6B,OAEfN,KAAK0+C,eAAiB,IAAI,EAE1B1+C,KAAK2+C,iBAGPl+C,EAAQm+C,qBAAuB,WAC7B5+C,KAAKm+C,UAAW,EAEhBn+C,KAAKu+C,iBAAiBpwC,WAGxB1N,EAAQo+C,sBAAwB,SAAUC,GACxC,IAAI3pB,EAAWn1B,KAAKk+C,aAAaY,EAAU3pB,UAEvCoiB,EAAav3C,KAAKy+C,WAAWt3C,OAAOguB,GAMxC,OAJAn1B,KAAKwqC,QAAUrV,EAASvS,KAAI,WAC1B,OAAO,iBAET5iB,KAAK++C,YAAcxH,GACZ,GAGT92C,EAAQu+C,mBAAqB,WAC3B,IAAI5lB,EAAWp5B,KAAKu+C,iBAChBhH,EAAav3C,KAAK++C,YAEtB/+C,KAAK2+C,gBAEL3+C,KAAKo+C,iBAAmBp+C,KAAKo+C,kBACxB7G,GAAene,EAAS6lB,cAC7B,YAAK7lB,EAAUme,EAAYv3C,KAAKu9C,cAE5BhG,EAAWvQ,MAAMroC,OAAS,GAAK44C,EAAW5Y,QAAQhgC,OAAS,IAC7DqB,KAAKs9C,SAAS,IAGhBt9C,KAAK++C,YAAc,OAGrBt+C,EAAQ6+B,OAAS,WACf,IAEIv/B,EAFA6B,EAAQ5B,KAIRH,EAAQG,KAAKH,MACby2B,EAAWz2B,EAAM67C,YACjBnY,EAAS1jC,EAAM87C,UACfuD,EAAa,GACb9lB,EAAWp5B,KAAKu+C,iBAChBU,EAAcj/C,KAAK++C,aAAe3lB,GAAYA,EAAS6lB,YAE3D,IAAK,IAAI98C,KAAQtC,EACTsC,KAAQs5C,GAAoBt5C,KAAQ,IAAyBzB,YACjEw+C,EAAW/8C,GAAQtC,EAAMsC,IAI7B,IAAIg9C,EAAkB,CAAC,sBACJ/lB,EAAWA,EAASuB,WAAyC,QAA3B56B,EAAKF,EAAM86B,kBAA+B,IAAP56B,GAAgBA,IAGtGo/C,EAAgB9/C,KAAK,YAGnBQ,EAAMg8C,iBAAmBoD,GAC3BE,EAAgB9/C,KAAK,mBAGnB6/C,EAAWE,WACbD,EAAgB9/C,KAAK6/C,EAAWE,WAGlC,IAAIC,GAAeJ,GAAep/C,EAAM+4C,eAAiB,CACvD30C,MAAO,CACLq7C,UAAW,YAA0Bt/C,KAAKH,MAAMk0B,MAAO/zB,KAAKH,MAAM86B,WAAY36B,KAAKH,MAAM+4C,kBAEzF,GACAzjB,EAAW8pB,EAAc,YAAmB7lB,EAAUp5B,KAAK++C,aAAe/+C,KAAKk+C,eAC/EjjB,EAASj7B,KAAKH,MAAM+7C,eAAiBzmB,EAASvS,KAAI,SAAUlI,EAAOpY,GACrE,OAAO,gBAAoB,EAAyB,CAClDhC,IAAKoa,EAAMpa,IACXy9C,IAAKn8C,EAAM4oC,QAAQloC,IAClBoY,MACAya,EAASvS,KAAI,SAAUlI,EAAOpY,GACjC,OAAO,gBAAoB,EAAsB,CAC/ChC,IAAKoa,EAAMpa,IACXy9C,IAAKn8C,EAAM4oC,QAAQloC,IAClBoY,MAEL,OAAO,gBAAoB4b,EAAUxV,EAAS,GAAIo+B,EAAY,CAC5DE,UAAWD,EAAgBt3C,KAAK,KAChCk2C,IAAK,SAAU5+C,GACbA,IAAMyC,EAAM08C,iBAAmBn/C,MAE/B,gBAAoBokC,EAAQziB,EAAS,CACvCs+B,UAAW,mBACVC,GAAcpkB,GAASj7B,KAAKu/C,qBAGjC9+C,EAAQ+9C,YAAc,WACpB,IAAI58C,EAAQ5B,KAERo5B,EAAWp5B,KAAKu+C,iBAChB1+C,EAAQG,KAAKH,MACjBM,OAAOC,KAAK,KAAQmB,SAAQ,SAAUi+C,GACpC,IAAIp+C,EAAY,IAAOo+C,GACnBC,EAAW,MAAQr+C,EAAUs+C,OAAO,GAAG56C,cAAgB1D,EAAU2D,MAAM,IAC3Eq0B,EAASn3B,GAAGb,GAAW,SAAUjC,GAC/BA,EAAEmC,cAAgBM,EAClB/B,EAAM4/C,GAAUtgD,SAGpBi6B,EAAS13B,KAAK,IAAOqwB,OAAO,WAC1BnwB,EAAM+9C,kBAIVl/C,EAAQk+C,cAAgB,WACtB,IAAI5+C,EAAIG,EAEJG,EAAKL,KAAK0+C,eAAev3C,OAAOnH,KAAKH,MAAM41C,SAC3CiD,EAAOr4C,EAAGq4C,KACV1R,EAAQ3mC,EAAG2mC,MACXrI,EAAUt+B,EAAGs+B,QACb0Z,EAAWh4C,EAAGg4C,UAEjBt4C,EAAKC,KAAKu+C,kBAAkB/I,WAAW/zC,MAAM1B,EAAIinC,EAAMpkB,KAAI,SAAUhf,GACpE,OAAO80C,EAAK90C,QAGb1D,EAAKF,KAAKu+C,kBAAkB7I,cAAcj0C,MAAMvB,EAAIy+B,EAAQ/b,KAAI,SAAUhf,GACzE,OAAOy0C,EAASz0C,QAIpBnD,EAAQy9C,aAAe,SAAU/oB,GAC/B,IAAIvzB,EAAQ5B,KAMZ,YAJiB,IAAbm1B,IACFA,EAAWn1B,KAAKH,MAAMs1B,UAGjB,WAAehlB,QAAQglB,GAAU1jB,QAAO,SAAUiJ,GACvD,OAAOA,EAAMzN,OAAS+wC,KACrB74B,QAAO,SAAUxL,EAAKe,GACvB,OAAOqW,EAAcA,EAAc,GAAIpX,GAAM/X,EAAMg+C,gBAAgBllC,MAClE,KAGLja,EAAQ8+C,iBAAmB,WACzB,OAAO,WAAepvC,QAAQnQ,KAAKH,MAAMs1B,UAAU1jB,QAAO,SAAUiJ,GAClE,OAAOA,EAAMzN,OAAS+wC,MAI1Bv9C,EAAQm/C,gBAAkB,SAAUllC,GAClC,IAAI9Y,EAAQ5B,KAEZ,OAAO,qBAAW0a,GAAS,WAAevK,QAAQuK,EAAM7a,MAAMs1B,UAAUhQ,QAAO,SAAU06B,EAAWC,GAClG,OAAO/uB,EAAcA,EAAc,GAAI8uB,GAAYj+C,EAAMg+C,gBAAgBE,MACxE,IAAM,CAACplC,IAGZ01B,EAAS2P,aAAetE,EA3kB1B,SAAoBuE,EAAYn9C,EAAQvC,EAAK2/C,GAC3C,IAEIx/B,EAFAy/B,EAAI1gD,UAAUb,OACdO,EAAIghD,EAAI,EAAIr9C,EAAkB,OAATo9C,EAAgBA,EAAO9/C,OAAOi3C,yBAAyBv0C,EAAQvC,GAAO2/C,EAE/F,GAAuB,iBAAZE,SAAoD,mBAArBA,QAAQC,SAAyBlhD,EAAIihD,QAAQC,SAASJ,EAAYn9C,EAAQvC,EAAK2/C,QAAW,IAAK,IAAIxhD,EAAIuhD,EAAWrhD,OAAS,EAAGF,GAAK,EAAGA,KAASgiB,EAAIu/B,EAAWvhD,MAAIS,GAAKghD,EAAI,EAAIz/B,EAAEvhB,GAAKghD,EAAI,EAAIz/B,EAAE5d,EAAQvC,EAAKpB,GAAKuhB,EAAE5d,EAAQvC,KAASpB,GACxQghD,EAAI,GAAKhhD,GAAKiB,OAAO62B,eAAen0B,EAAQvC,EAAKpB,GAwkBxDmhD,CAAW,CAAC,KAAsBjQ,EAAS1vC,UAAW,wBAAoB,GAEnE0vC,EA/NT,CAgOE,aAOa,O,iCC1pBA,wwB,iCCGbkQ,EAAOC,QAAU,EAAQ,M;;;;;;;;GCKd,IAAI7vC,EAAE,MAAMwvC,EAAE,MAAMz/B,EAAE,MAAMthB,EAAE,MAAMkxB,EAAE,MAAMC,EAAE,MAAMkwB,EAAE,MAAM/8B,EAAE,MAAMg9B,EAAE,MAAMjiD,EAAE,MAAMS,EAAE,MAAM0hB,EAAE,MAAM+/B,EAAE,MAAMxhD,EAAE,MAAMyhD,EAAE,MAAM30C,EAAE,MAAM40C,EAAE,MACnJ,GAAG,mBAAoBtiD,QAAQA,OAAOuiD,IAAI,CAAC,IAAIv3C,EAAEhL,OAAOuiD,IAAInwC,EAAEpH,EAAE,iBAAiB42C,EAAE52C,EAAE,gBAAgBmX,EAAEnX,EAAE,kBAAkBnK,EAAEmK,EAAE,qBAAqB+mB,EAAE/mB,EAAE,kBAAkBgnB,EAAEhnB,EAAE,kBAAkBk3C,EAAEl3C,EAAE,iBAAiBma,EAAEna,EAAE,qBAAqBm3C,EAAEn3C,EAAE,kBAAkB9K,EAAE8K,EAAE,uBAAuBrK,EAAEqK,EAAE,cAAcqX,EAAErX,EAAE,cAAco3C,EAAEp3C,EAAE,eAAepK,EAAEoK,EAAE,sBAAsBq3C,EAAEr3C,EAAE,qBAAqB0C,EAAE1C,EAAE,0BAA0Bs3C,EAAEt3C,EAAE,uBAC3a,SAASE,EAAEiH,GAAG,GAAG,iBAAkBA,GAAG,OAAOA,EAAE,CAAC,IAAIkC,EAAElC,EAAEqwC,SAAS,OAAOnuC,GAAG,KAAKjC,EAAE,OAAOD,EAAEA,EAAExD,MAAQ,KAAKwT,EAAE,KAAK4P,EAAE,KAAKlxB,EAAE,KAAKshD,EAAE,KAAKjiD,EAAE,OAAOiS,EAAE,QAAQ,OAAOA,EAAEA,GAAGA,EAAEqwC,UAAY,KAAKN,EAAE,KAAK/8B,EAAE,KAAK9C,EAAE,KAAK1hB,EAAE,KAAKqxB,EAAE,OAAO7f,EAAE,QAAQ,OAAOkC,GAAG,KAAKutC,EAAE,OAAOvtC,IAAI,IAAIouC,EAAEzwB,EAAE0wB,EAAEtwC,EAAEuwC,EAAEx9B,EAAEy9B,EAAEzgC,EAAE0gC,EAAExgC,EAAEygC,EAAEniD,EAAEoiD,EAAEnB,EAAEoB,EAAEjxB,EAAEkxB,EAAEpiD,EAAEqiD,EAAEf,EAAEF,EAAQkB,gBAAgBjB,EAAED,EAAQmB,gBAAgBX,EAAER,EAAQoB,QAAQX,EAAET,EAAQqB,WAAWX,EAAEV,EAAQtC,SAASiD,EAAEX,EAAQsB,KAAKV,EAAEZ,EAAQuB,KAAKV,EAAEb,EAAQwB,OAAOV,EAAEd,EAAQyB,SAASV,EAAEf,EAAQ0B,WAAWV,EAClfhB,EAAQ2B,SAASV,EAAEjB,EAAQ4B,YAAY,WAAW,OAAM,GAAI5B,EAAQ6B,iBAAiB,WAAW,OAAM,GAAI7B,EAAQ8B,kBAAkB,SAAS5xC,GAAG,OAAOjH,EAAEiH,KAAK+vC,GAAGD,EAAQ+B,kBAAkB,SAAS7xC,GAAG,OAAOjH,EAAEiH,KAAK6f,GAAGiwB,EAAQgC,UAAU,SAAS9xC,GAAG,MAAM,iBAAkBA,GAAG,OAAOA,GAAGA,EAAEqwC,WAAWpwC,GAAG6vC,EAAQiC,aAAa,SAAS/xC,GAAG,OAAOjH,EAAEiH,KAAKgT,GAAG88B,EAAQkC,WAAW,SAAShyC,GAAG,OAAOjH,EAAEiH,KAAKgQ,GAAG8/B,EAAQmC,OAAO,SAASjyC,GAAG,OAAOjH,EAAEiH,KAAKkQ,GAAG4/B,EAAQoC,OAAO,SAASlyC,GAAG,OAAOjH,EAAEiH,KAAKxR,GACleshD,EAAQqC,SAAS,SAASnyC,GAAG,OAAOjH,EAAEiH,KAAKyvC,GAAGK,EAAQsC,WAAW,SAASpyC,GAAG,OAAOjH,EAAEiH,KAAK4f,GAAGkwB,EAAQuC,aAAa,SAASryC,GAAG,OAAOjH,EAAEiH,KAAKtR,GAAGohD,EAAQwC,WAAW,SAAStyC,GAAG,OAAOjH,EAAEiH,KAAKgwC,GAAGF,EAAQyC,mBAAmB,SAASvyC,GAAG,MAAM,iBAAkBA,GAAG,mBAAoBA,GAAGA,IAAIgQ,GAAGhQ,IAAI4f,GAAG5f,IAAIzE,GAAGyE,IAAItR,GAAGsR,IAAIgwC,GAAGhwC,IAAIjS,GAAGiS,IAAImwC,GAAG,iBAAkBnwC,GAAG,OAAOA,IAAIA,EAAEqwC,WAAWngC,GAAGlQ,EAAEqwC,WAAW7hD,GAAGwR,EAAEqwC,WAAWxwB,GAAG7f,EAAEqwC,WAAWN,GAAG/vC,EAAEqwC,WAAWr9B,GAAGhT,EAAEqwC,WAAWH,GAAGlwC,EAAEqwC,WAAWJ,GAAGjwC,EAAE,KAAKvR,IACjeqhD,EAAQ0C,OAAOz5C","file":"vendors~DocumentList~FeaturedFullWidth~LatestNewsCarousel~ProductDetails~ProductSpecifications~Techn~711092a6-053ad48ae2f27b30edf9.js","sourcesContent":["/*\nCopyright (c) NAVER Corp.\nname: @egjs/component\nlicense: MIT\nauthor: NAVER Corp.\nrepository: https://github.com/naver/egjs-component\nversion: 3.0.1\n*/\n/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\nfunction __values(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator,\n m = s && o[s],\n i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return {\n value: o && o[i++],\n done: !o\n };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\nfunction __read(o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o),\n r,\n ar = [],\n e;\n\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n } catch (error) {\n e = {\n error: error\n };\n } finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n } finally {\n if (e) throw e.error;\n }\n }\n\n return ar;\n}\nfunction __spread() {\n for (var ar = [], i = 0; i < arguments.length; i++) ar = ar.concat(__read(arguments[i]));\n\n return ar;\n}\n\n/*\n * Copyright (c) 2015 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\nvar isUndefined = function (value) {\n return typeof value === \"undefined\";\n};\n\n/**\n * Event class to provide additional properties\n * @ko Component에서 추가적인 프로퍼티를 제공하는 이벤트 클래스\n */\n\nvar ComponentEvent =\n/*#__PURE__*/\nfunction () {\n /**\n * Create a new instance of ComponentEvent.\n * @ko ComponentEvent의 새로운 인스턴스를 생성한다.\n * @param eventType The name of the event.이벤트 이름.\n * @param props An object that contains additional event properties.추가적인 이벤트 프로퍼티 오브젝트.\n */\n function ComponentEvent(eventType, props) {\n var e_1, _a;\n\n this.eventType = eventType;\n this._canceled = false;\n if (!props) return;\n\n try {\n for (var _b = __values(Object.keys(props)), _c = _b.next(); !_c.done; _c = _b.next()) {\n var key = _c.value; // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n\n this[key] = props[key];\n }\n } catch (e_1_1) {\n e_1 = {\n error: e_1_1\n };\n } finally {\n try {\n if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n } finally {\n if (e_1) throw e_1.error;\n }\n }\n }\n /**\n * Stop the event. {@link ComponentEvent#isCanceled} will return `true` after.\n * @ko 이벤트를 중단한다. 이후 {@link ComponentEvent#isCanceled}가 `true`를 반환한다.\n */\n\n\n var __proto = ComponentEvent.prototype;\n\n __proto.stop = function () {\n this._canceled = true;\n };\n /**\n * Returns a boolean value that indicates whether {@link ComponentEvent#stop} is called before.\n * @ko {@link ComponentEvent#stop}이 호출되었는지 여부를 반환한다.\n * @return {boolean} A boolean value that indicates whether {@link ComponentEvent#stop} is called before.이전에 {@link ComponentEvent#stop}이 불려졌는지 여부를 반환한다.\n */\n\n\n __proto.isCanceled = function () {\n return this._canceled;\n };\n\n return ComponentEvent;\n}();\n\n/**\n * A class used to manage events in a component\n * @ko 컴포넌트의 이벤트을 관리할 수 있게 하는 클래스\n */\n\nvar Component =\n/*#__PURE__*/\nfunction () {\n /**\n * @support {\"ie\": \"7+\", \"ch\" : \"latest\", \"ff\" : \"latest\", \"sf\" : \"latest\", \"edge\" : \"latest\", \"ios\" : \"7+\", \"an\" : \"2.1+ (except 3.x)\"}\n */\n function Component() {\n this._eventHandler = {};\n }\n /**\n * Trigger a custom event.\n * @ko 커스텀 이벤트를 발생시킨다\n * @param {string | ComponentEvent} event The name of the custom event to be triggered or an instance of the ComponentEvent발생할 커스텀 이벤트의 이름 또는 ComponentEvent의 인스턴스\n * @param {any[]} params Event data to be sent when triggering a custom event 커스텀 이벤트가 발생할 때 전달할 데이터\n * @return An instance of the component itself컴포넌트 자신의 인스턴스\n * @example\n * ```ts\n * import Component, { ComponentEvent } from \"@egjs/component\";\n *\n * class Some extends Component<{\n * beforeHi: ComponentEvent<{ foo: number; bar: string }>;\n * hi: { foo: { a: number; b: boolean } };\n * someEvent: (foo: number, bar: string) => void;\n * someOtherEvent: void; // When there's no event argument\n * }> {\n * some(){\n * if(this.trigger(\"beforeHi\")){ // When event call to stop return false.\n * this.trigger(\"hi\");// fire hi event.\n * }\n * }\n * }\n *\n * const some = new Some();\n * some.on(\"beforeHi\", e => {\n * if(condition){\n * e.stop(); // When event call to stop, `hi` event not call.\n * }\n * // `currentTarget` is component instance.\n * console.log(some === e.currentTarget); // true\n *\n * typeof e.foo; // number\n * typeof e.bar; // string\n * });\n * some.on(\"hi\", e => {\n * typeof e.foo.b; // boolean\n * });\n * // If you want to more know event design. You can see article.\n * // https://github.com/naver/egjs-component/wiki/How-to-make-Component-event-design%3F\n * ```\n */\n\n\n var __proto = Component.prototype;\n\n __proto.trigger = function (event) {\n var params = [];\n\n for (var _i = 1; _i < arguments.length; _i++) {\n params[_i - 1] = arguments[_i];\n }\n\n var eventName = event instanceof ComponentEvent ? event.eventType : event;\n\n var handlers = __spread(this._eventHandler[eventName] || []);\n\n if (handlers.length <= 0) {\n return this;\n }\n\n if (event instanceof ComponentEvent) {\n event.currentTarget = this;\n handlers.forEach(function (handler) {\n handler(event);\n });\n } else {\n handlers.forEach(function (handler) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-call\n handler.apply(void 0, __spread(params));\n });\n }\n\n return this;\n };\n /**\n * Executed event just one time.\n * @ko 이벤트가 한번만 실행된다.\n * @param {string} eventName The name of the event to be attached or an event name - event handler mapped object.등록할 이벤트의 이름 또는 이벤트 이름-핸들러 오브젝트\n * @param {function} handlerToAttach The handler function of the event to be attached 등록할 이벤트의 핸들러 함수\n * @return An instance of the component itself컴포넌트 자신의 인스턴스\n * @example\n * ```ts\n * import Component, { ComponentEvent } from \"@egjs/component\";\n *\n * class Some extends Component<{\n * hi: ComponentEvent;\n * }> {\n * hi() {\n * alert(\"hi\");\n * }\n * thing() {\n * this.once(\"hi\", this.hi);\n * }\n * }\n *\n * var some = new Some();\n * some.thing();\n * some.trigger(new ComponentEvent(\"hi\"));\n * // fire alert(\"hi\");\n * some.trigger(new ComponentEvent(\"hi\"));\n * // Nothing happens\n * ```\n */\n\n\n __proto.once = function (eventName, handlerToAttach) {\n var _this = this;\n\n if (typeof eventName === \"object\" && isUndefined(handlerToAttach)) {\n var eventHash = eventName;\n\n for (var key in eventHash) {\n this.once(key, eventHash[key]);\n }\n\n return this;\n } else if (typeof eventName === \"string\" && typeof handlerToAttach === \"function\") {\n var listener_1 = function () {\n var args = [];\n\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n } // eslint-disable-next-line @typescript-eslint/no-unsafe-call\n\n\n handlerToAttach.apply(void 0, __spread(args));\n\n _this.off(eventName, listener_1);\n };\n\n this.on(eventName, listener_1);\n }\n\n return this;\n };\n /**\n * Checks whether an event has been attached to a component.\n * @ko 컴포넌트에 이벤트가 등록됐는지 확인한다.\n * @param {string} eventName The name of the event to be attached 등록 여부를 확인할 이벤트의 이름\n * @return {boolean} Indicates whether the event is attached. 이벤트 등록 여부\n * @example\n * ```ts\n * import Component from \"@egjs/component\";\n *\n * class Some extends Component<{\n * hi: void;\n * }> {\n * some() {\n * this.hasOn(\"hi\");// check hi event.\n * }\n * }\n * ```\n */\n\n\n __proto.hasOn = function (eventName) {\n return !!this._eventHandler[eventName];\n };\n /**\n * Attaches an event to a component.\n * @ko 컴포넌트에 이벤트를 등록한다.\n * @param {string} eventName The name of the event to be attached or an event name - event handler mapped object.등록할 이벤트의 이름 또는 이벤트 이름-핸들러 오브젝트\n * @param {function} handlerToAttach The handler function of the event to be attached 등록할 이벤트의 핸들러 함수\n * @return An instance of a component itself컴포넌트 자신의 인스턴스\n * @example\n * ```ts\n * import Component, { ComponentEvent } from \"@egjs/component\";\n *\n * class Some extends Component<{\n * hi: void;\n * }> {\n * hi() {\n * console.log(\"hi\");\n * }\n * some() {\n * this.on(\"hi\",this.hi); //attach event\n * }\n * }\n * ```\n */\n\n\n __proto.on = function (eventName, handlerToAttach) {\n if (typeof eventName === \"object\" && isUndefined(handlerToAttach)) {\n var eventHash = eventName;\n\n for (var name in eventHash) {\n this.on(name, eventHash[name]);\n }\n\n return this;\n } else if (typeof eventName === \"string\" && typeof handlerToAttach === \"function\") {\n var handlerList = this._eventHandler[eventName];\n\n if (isUndefined(handlerList)) {\n this._eventHandler[eventName] = [];\n handlerList = this._eventHandler[eventName];\n }\n\n handlerList.push(handlerToAttach);\n }\n\n return this;\n };\n /**\n * Detaches an event from the component.
If the `eventName` is not given this will detach all event handlers attached.
If the `handlerToDetach` is not given, this will detach all event handlers for `eventName`.\n * @ko 컴포넌트에 등록된 이벤트를 해제한다.
`eventName`이 주어지지 않았을 경우 모든 이벤트 핸들러를 제거한다.
`handlerToAttach`가 주어지지 않았을 경우 `eventName`에 해당하는 모든 이벤트 핸들러를 제거한다.\n * @param {string?} eventName The name of the event to be detached 해제할 이벤트의 이름\n * @param {function?} handlerToDetach The handler function of the event to be detached 해제할 이벤트의 핸들러 함수\n * @return An instance of a component itself 컴포넌트 자신의 인스턴스\n * @example\n * ```ts\n * import Component, { ComponentEvent } from \"@egjs/component\";\n *\n * class Some extends Component<{\n * hi: void;\n * }> {\n * hi() {\n * console.log(\"hi\");\n * }\n * some() {\n * this.off(\"hi\",this.hi); //detach event\n * }\n * }\n * ```\n */\n\n\n __proto.off = function (eventName, handlerToDetach) {\n var e_1, _a; // Detach all event handlers.\n\n\n if (isUndefined(eventName)) {\n this._eventHandler = {};\n return this;\n } // Detach all handlers for eventname or detach event handlers by object.\n\n\n if (isUndefined(handlerToDetach)) {\n if (typeof eventName === \"string\") {\n delete this._eventHandler[eventName];\n return this;\n } else {\n var eventHash = eventName;\n\n for (var name in eventHash) {\n this.off(name, eventHash[name]);\n }\n\n return this;\n }\n } // Detach single event handler\n\n\n var handlerList = this._eventHandler[eventName];\n\n if (handlerList) {\n var idx = 0;\n\n try {\n for (var handlerList_1 = __values(handlerList), handlerList_1_1 = handlerList_1.next(); !handlerList_1_1.done; handlerList_1_1 = handlerList_1.next()) {\n var handlerFunction = handlerList_1_1.value;\n\n if (handlerFunction === handlerToDetach) {\n handlerList.splice(idx, 1);\n\n if (handlerList.length <= 0) {\n delete this._eventHandler[eventName];\n }\n\n break;\n }\n\n idx++;\n }\n } catch (e_1_1) {\n e_1 = {\n error: e_1_1\n };\n } finally {\n try {\n if (handlerList_1_1 && !handlerList_1_1.done && (_a = handlerList_1.return)) _a.call(handlerList_1);\n } finally {\n if (e_1) throw e_1.error;\n }\n }\n }\n\n return this;\n };\n /**\n * Version info string\n * @ko 버전정보 문자열\n * @name VERSION\n * @static\n * @example\n * Component.VERSION; // ex) 3.0.0\n * @memberof Component\n */\n\n\n Component.VERSION = \"3.0.1\";\n return Component;\n}();\n\n/*\n * Copyright (c) 2015 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\n\nvar ComponentEvent$1 = ComponentEvent;\n\n/*\n * Copyright (c) 2015 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\n\nexport default Component;\nexport { ComponentEvent$1 as ComponentEvent };\n//# sourceMappingURL=component.esm.js.map\n","/*! Hammer.JS - v2.0.17-rc - 2019-12-16\n * http://naver.github.io/egjs\n *\n * Forked By Naver egjs\n * Copyright (c) hammerjs\n * Licensed under the MIT license */\nfunction _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}\n\nfunction _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n subClass.__proto__ = superClass;\n}\n\nfunction _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\n/**\n * @private\n * extend object.\n * means that properties in dest will be overwritten by the ones in src.\n * @param {Object} target\n * @param {...Object} objects_to_assign\n * @returns {Object} target\n */\nvar assign;\n\nif (typeof Object.assign !== 'function') {\n assign = function assign(target) {\n if (target === undefined || target === null) {\n throw new TypeError('Cannot convert undefined or null to object');\n }\n\n var output = Object(target);\n\n for (var index = 1; index < arguments.length; index++) {\n var source = arguments[index];\n\n if (source !== undefined && source !== null) {\n for (var nextKey in source) {\n if (source.hasOwnProperty(nextKey)) {\n output[nextKey] = source[nextKey];\n }\n }\n }\n }\n\n return output;\n };\n} else {\n assign = Object.assign;\n}\n\nvar assign$1 = assign;\n\nvar VENDOR_PREFIXES = ['', 'webkit', 'Moz', 'MS', 'ms', 'o'];\nvar TEST_ELEMENT = typeof document === \"undefined\" ? {\n style: {}\n} : document.createElement('div');\nvar TYPE_FUNCTION = 'function';\nvar round = Math.round,\n abs = Math.abs;\nvar now = Date.now;\n\n/**\n * @private\n * get the prefixed property\n * @param {Object} obj\n * @param {String} property\n * @returns {String|Undefined} prefixed\n */\n\nfunction prefixed(obj, property) {\n var prefix;\n var prop;\n var camelProp = property[0].toUpperCase() + property.slice(1);\n var i = 0;\n\n while (i < VENDOR_PREFIXES.length) {\n prefix = VENDOR_PREFIXES[i];\n prop = prefix ? prefix + camelProp : property;\n\n if (prop in obj) {\n return prop;\n }\n\n i++;\n }\n\n return undefined;\n}\n\n/* eslint-disable no-new-func, no-nested-ternary */\nvar win;\n\nif (typeof window === \"undefined\") {\n // window is undefined in node.js\n win = {};\n} else {\n win = window;\n}\n\nvar PREFIXED_TOUCH_ACTION = prefixed(TEST_ELEMENT.style, 'touchAction');\nvar NATIVE_TOUCH_ACTION = PREFIXED_TOUCH_ACTION !== undefined;\nfunction getTouchActionProps() {\n if (!NATIVE_TOUCH_ACTION) {\n return false;\n }\n\n var touchMap = {};\n var cssSupports = win.CSS && win.CSS.supports;\n ['auto', 'manipulation', 'pan-y', 'pan-x', 'pan-x pan-y', 'none'].forEach(function (val) {\n // If css.supports is not supported but there is native touch-action assume it supports\n // all values. This is the case for IE 10 and 11.\n return touchMap[val] = cssSupports ? win.CSS.supports('touch-action', val) : true;\n });\n return touchMap;\n}\n\nvar TOUCH_ACTION_COMPUTE = 'compute';\nvar TOUCH_ACTION_AUTO = 'auto';\nvar TOUCH_ACTION_MANIPULATION = 'manipulation'; // not implemented\n\nvar TOUCH_ACTION_NONE = 'none';\nvar TOUCH_ACTION_PAN_X = 'pan-x';\nvar TOUCH_ACTION_PAN_Y = 'pan-y';\nvar TOUCH_ACTION_MAP = getTouchActionProps();\n\nvar MOBILE_REGEX = /mobile|tablet|ip(ad|hone|od)|android/i;\nvar SUPPORT_TOUCH = 'ontouchstart' in win;\nvar SUPPORT_POINTER_EVENTS = prefixed(win, 'PointerEvent') !== undefined;\nvar SUPPORT_ONLY_TOUCH = SUPPORT_TOUCH && MOBILE_REGEX.test(navigator.userAgent);\nvar INPUT_TYPE_TOUCH = 'touch';\nvar INPUT_TYPE_PEN = 'pen';\nvar INPUT_TYPE_MOUSE = 'mouse';\nvar INPUT_TYPE_KINECT = 'kinect';\nvar COMPUTE_INTERVAL = 25;\nvar INPUT_START = 1;\nvar INPUT_MOVE = 2;\nvar INPUT_END = 4;\nvar INPUT_CANCEL = 8;\nvar DIRECTION_NONE = 1;\nvar DIRECTION_LEFT = 2;\nvar DIRECTION_RIGHT = 4;\nvar DIRECTION_UP = 8;\nvar DIRECTION_DOWN = 16;\nvar DIRECTION_HORIZONTAL = DIRECTION_LEFT | DIRECTION_RIGHT;\nvar DIRECTION_VERTICAL = DIRECTION_UP | DIRECTION_DOWN;\nvar DIRECTION_ALL = DIRECTION_HORIZONTAL | DIRECTION_VERTICAL;\nvar PROPS_XY = ['x', 'y'];\nvar PROPS_CLIENT_XY = ['clientX', 'clientY'];\n\n/**\n * @private\n * walk objects and arrays\n * @param {Object} obj\n * @param {Function} iterator\n * @param {Object} context\n */\nfunction each(obj, iterator, context) {\n var i;\n\n if (!obj) {\n return;\n }\n\n if (obj.forEach) {\n obj.forEach(iterator, context);\n } else if (obj.length !== undefined) {\n i = 0;\n\n while (i < obj.length) {\n iterator.call(context, obj[i], i, obj);\n i++;\n }\n } else {\n for (i in obj) {\n obj.hasOwnProperty(i) && iterator.call(context, obj[i], i, obj);\n }\n }\n}\n\n/**\n * @private\n * let a boolean value also be a function that must return a boolean\n * this first item in args will be used as the context\n * @param {Boolean|Function} val\n * @param {Array} [args]\n * @returns {Boolean}\n */\n\nfunction boolOrFn(val, args) {\n if (typeof val === TYPE_FUNCTION) {\n return val.apply(args ? args[0] || undefined : undefined, args);\n }\n\n return val;\n}\n\n/**\n * @private\n * small indexOf wrapper\n * @param {String} str\n * @param {String} find\n * @returns {Boolean} found\n */\nfunction inStr(str, find) {\n return str.indexOf(find) > -1;\n}\n\n/**\n * @private\n * when the touchActions are collected they are not a valid value, so we need to clean things up. *\n * @param {String} actions\n * @returns {*}\n */\n\nfunction cleanTouchActions(actions) {\n // none\n if (inStr(actions, TOUCH_ACTION_NONE)) {\n return TOUCH_ACTION_NONE;\n }\n\n var hasPanX = inStr(actions, TOUCH_ACTION_PAN_X);\n var hasPanY = inStr(actions, TOUCH_ACTION_PAN_Y); // if both pan-x and pan-y are set (different recognizers\n // for different directions, e.g. horizontal pan but vertical swipe?)\n // we need none (as otherwise with pan-x pan-y combined none of these\n // recognizers will work, since the browser would handle all panning\n\n if (hasPanX && hasPanY) {\n return TOUCH_ACTION_NONE;\n } // pan-x OR pan-y\n\n\n if (hasPanX || hasPanY) {\n return hasPanX ? TOUCH_ACTION_PAN_X : TOUCH_ACTION_PAN_Y;\n } // manipulation\n\n\n if (inStr(actions, TOUCH_ACTION_MANIPULATION)) {\n return TOUCH_ACTION_MANIPULATION;\n }\n\n return TOUCH_ACTION_AUTO;\n}\n\n/**\n * @private\n * Touch Action\n * sets the touchAction property or uses the js alternative\n * @param {Manager} manager\n * @param {String} value\n * @constructor\n */\n\nvar TouchAction =\n/*#__PURE__*/\nfunction () {\n function TouchAction(manager, value) {\n this.manager = manager;\n this.set(value);\n }\n /**\n * @private\n * set the touchAction value on the element or enable the polyfill\n * @param {String} value\n */\n\n\n var _proto = TouchAction.prototype;\n\n _proto.set = function set(value) {\n // find out the touch-action by the event handlers\n if (value === TOUCH_ACTION_COMPUTE) {\n value = this.compute();\n }\n\n if (NATIVE_TOUCH_ACTION && this.manager.element.style && TOUCH_ACTION_MAP[value]) {\n this.manager.element.style[PREFIXED_TOUCH_ACTION] = value;\n }\n\n this.actions = value.toLowerCase().trim();\n };\n /**\n * @private\n * just re-set the touchAction value\n */\n\n\n _proto.update = function update() {\n this.set(this.manager.options.touchAction);\n };\n /**\n * @private\n * compute the value for the touchAction property based on the recognizer's settings\n * @returns {String} value\n */\n\n\n _proto.compute = function compute() {\n var actions = [];\n each(this.manager.recognizers, function (recognizer) {\n if (boolOrFn(recognizer.options.enable, [recognizer])) {\n actions = actions.concat(recognizer.getTouchAction());\n }\n });\n return cleanTouchActions(actions.join(' '));\n };\n /**\n * @private\n * this method is called on each input cycle and provides the preventing of the browser behavior\n * @param {Object} input\n */\n\n\n _proto.preventDefaults = function preventDefaults(input) {\n var srcEvent = input.srcEvent;\n var direction = input.offsetDirection; // if the touch action did prevented once this session\n\n if (this.manager.session.prevented) {\n srcEvent.preventDefault();\n return;\n }\n\n var actions = this.actions;\n var hasNone = inStr(actions, TOUCH_ACTION_NONE) && !TOUCH_ACTION_MAP[TOUCH_ACTION_NONE];\n var hasPanY = inStr(actions, TOUCH_ACTION_PAN_Y) && !TOUCH_ACTION_MAP[TOUCH_ACTION_PAN_Y];\n var hasPanX = inStr(actions, TOUCH_ACTION_PAN_X) && !TOUCH_ACTION_MAP[TOUCH_ACTION_PAN_X];\n\n if (hasNone) {\n // do not prevent defaults if this is a tap gesture\n var isTapPointer = input.pointers.length === 1;\n var isTapMovement = input.distance < 2;\n var isTapTouchTime = input.deltaTime < 250;\n\n if (isTapPointer && isTapMovement && isTapTouchTime) {\n return;\n }\n }\n\n if (hasPanX && hasPanY) {\n // `pan-x pan-y` means browser handles all scrolling/panning, do not prevent\n return;\n }\n\n if (hasNone || hasPanY && direction & DIRECTION_HORIZONTAL || hasPanX && direction & DIRECTION_VERTICAL) {\n return this.preventSrc(srcEvent);\n }\n };\n /**\n * @private\n * call preventDefault to prevent the browser's default behavior (scrolling in most cases)\n * @param {Object} srcEvent\n */\n\n\n _proto.preventSrc = function preventSrc(srcEvent) {\n this.manager.session.prevented = true;\n srcEvent.preventDefault();\n };\n\n return TouchAction;\n}();\n\n/**\n * @private\n * find if a node is in the given parent\n * @method hasParent\n * @param {HTMLElement} node\n * @param {HTMLElement} parent\n * @return {Boolean} found\n */\nfunction hasParent(node, parent) {\n while (node) {\n if (node === parent) {\n return true;\n }\n\n node = node.parentNode;\n }\n\n return false;\n}\n\n/**\n * @private\n * get the center of all the pointers\n * @param {Array} pointers\n * @return {Object} center contains `x` and `y` properties\n */\n\nfunction getCenter(pointers) {\n var pointersLength = pointers.length; // no need to loop when only one touch\n\n if (pointersLength === 1) {\n return {\n x: round(pointers[0].clientX),\n y: round(pointers[0].clientY)\n };\n }\n\n var x = 0;\n var y = 0;\n var i = 0;\n\n while (i < pointersLength) {\n x += pointers[i].clientX;\n y += pointers[i].clientY;\n i++;\n }\n\n return {\n x: round(x / pointersLength),\n y: round(y / pointersLength)\n };\n}\n\n/**\n * @private\n * create a simple clone from the input used for storage of firstInput and firstMultiple\n * @param {Object} input\n * @returns {Object} clonedInputData\n */\n\nfunction simpleCloneInputData(input) {\n // make a simple copy of the pointers because we will get a reference if we don't\n // we only need clientXY for the calculations\n var pointers = [];\n var i = 0;\n\n while (i < input.pointers.length) {\n pointers[i] = {\n clientX: round(input.pointers[i].clientX),\n clientY: round(input.pointers[i].clientY)\n };\n i++;\n }\n\n return {\n timeStamp: now(),\n pointers: pointers,\n center: getCenter(pointers),\n deltaX: input.deltaX,\n deltaY: input.deltaY\n };\n}\n\n/**\n * @private\n * calculate the absolute distance between two points\n * @param {Object} p1 {x, y}\n * @param {Object} p2 {x, y}\n * @param {Array} [props] containing x and y keys\n * @return {Number} distance\n */\n\nfunction getDistance(p1, p2, props) {\n if (!props) {\n props = PROPS_XY;\n }\n\n var x = p2[props[0]] - p1[props[0]];\n var y = p2[props[1]] - p1[props[1]];\n return Math.sqrt(x * x + y * y);\n}\n\n/**\n * @private\n * calculate the angle between two coordinates\n * @param {Object} p1\n * @param {Object} p2\n * @param {Array} [props] containing x and y keys\n * @return {Number} angle\n */\n\nfunction getAngle(p1, p2, props) {\n if (!props) {\n props = PROPS_XY;\n }\n\n var x = p2[props[0]] - p1[props[0]];\n var y = p2[props[1]] - p1[props[1]];\n return Math.atan2(y, x) * 180 / Math.PI;\n}\n\n/**\n * @private\n * get the direction between two points\n * @param {Number} x\n * @param {Number} y\n * @return {Number} direction\n */\n\nfunction getDirection(x, y) {\n if (x === y) {\n return DIRECTION_NONE;\n }\n\n if (abs(x) >= abs(y)) {\n return x < 0 ? DIRECTION_LEFT : DIRECTION_RIGHT;\n }\n\n return y < 0 ? DIRECTION_UP : DIRECTION_DOWN;\n}\n\nfunction computeDeltaXY(session, input) {\n var center = input.center; // let { offsetDelta:offset = {}, prevDelta = {}, prevInput = {} } = session;\n // jscs throwing error on defalut destructured values and without defaults tests fail\n\n var offset = session.offsetDelta || {};\n var prevDelta = session.prevDelta || {};\n var prevInput = session.prevInput || {};\n\n if (input.eventType === INPUT_START || prevInput.eventType === INPUT_END) {\n prevDelta = session.prevDelta = {\n x: prevInput.deltaX || 0,\n y: prevInput.deltaY || 0\n };\n offset = session.offsetDelta = {\n x: center.x,\n y: center.y\n };\n }\n\n input.deltaX = prevDelta.x + (center.x - offset.x);\n input.deltaY = prevDelta.y + (center.y - offset.y);\n}\n\n/**\n * @private\n * calculate the velocity between two points. unit is in px per ms.\n * @param {Number} deltaTime\n * @param {Number} x\n * @param {Number} y\n * @return {Object} velocity `x` and `y`\n */\nfunction getVelocity(deltaTime, x, y) {\n return {\n x: x / deltaTime || 0,\n y: y / deltaTime || 0\n };\n}\n\n/**\n * @private\n * calculate the scale factor between two pointersets\n * no scale is 1, and goes down to 0 when pinched together, and bigger when pinched out\n * @param {Array} start array of pointers\n * @param {Array} end array of pointers\n * @return {Number} scale\n */\n\nfunction getScale(start, end) {\n return getDistance(end[0], end[1], PROPS_CLIENT_XY) / getDistance(start[0], start[1], PROPS_CLIENT_XY);\n}\n\n/**\n * @private\n * calculate the rotation degrees between two pointersets\n * @param {Array} start array of pointers\n * @param {Array} end array of pointers\n * @return {Number} rotation\n */\n\nfunction getRotation(start, end) {\n return getAngle(end[1], end[0], PROPS_CLIENT_XY) + getAngle(start[1], start[0], PROPS_CLIENT_XY);\n}\n\n/**\n * @private\n * velocity is calculated every x ms\n * @param {Object} session\n * @param {Object} input\n */\n\nfunction computeIntervalInputData(session, input) {\n var last = session.lastInterval || input;\n var deltaTime = input.timeStamp - last.timeStamp;\n var velocity;\n var velocityX;\n var velocityY;\n var direction;\n\n if (input.eventType !== INPUT_CANCEL && (deltaTime > COMPUTE_INTERVAL || last.velocity === undefined)) {\n var deltaX = input.deltaX - last.deltaX;\n var deltaY = input.deltaY - last.deltaY;\n var v = getVelocity(deltaTime, deltaX, deltaY);\n velocityX = v.x;\n velocityY = v.y;\n velocity = abs(v.x) > abs(v.y) ? v.x : v.y;\n direction = getDirection(deltaX, deltaY);\n session.lastInterval = input;\n } else {\n // use latest velocity info if it doesn't overtake a minimum period\n velocity = last.velocity;\n velocityX = last.velocityX;\n velocityY = last.velocityY;\n direction = last.direction;\n }\n\n input.velocity = velocity;\n input.velocityX = velocityX;\n input.velocityY = velocityY;\n input.direction = direction;\n}\n\n/**\n* @private\n * extend the data with some usable properties like scale, rotate, velocity etc\n * @param {Object} manager\n * @param {Object} input\n */\n\nfunction computeInputData(manager, input) {\n var session = manager.session;\n var pointers = input.pointers;\n var pointersLength = pointers.length; // store the first input to calculate the distance and direction\n\n if (!session.firstInput) {\n session.firstInput = simpleCloneInputData(input);\n } // to compute scale and rotation we need to store the multiple touches\n\n\n if (pointersLength > 1 && !session.firstMultiple) {\n session.firstMultiple = simpleCloneInputData(input);\n } else if (pointersLength === 1) {\n session.firstMultiple = false;\n }\n\n var firstInput = session.firstInput,\n firstMultiple = session.firstMultiple;\n var offsetCenter = firstMultiple ? firstMultiple.center : firstInput.center;\n var center = input.center = getCenter(pointers);\n input.timeStamp = now();\n input.deltaTime = input.timeStamp - firstInput.timeStamp;\n input.angle = getAngle(offsetCenter, center);\n input.distance = getDistance(offsetCenter, center);\n computeDeltaXY(session, input);\n input.offsetDirection = getDirection(input.deltaX, input.deltaY);\n var overallVelocity = getVelocity(input.deltaTime, input.deltaX, input.deltaY);\n input.overallVelocityX = overallVelocity.x;\n input.overallVelocityY = overallVelocity.y;\n input.overallVelocity = abs(overallVelocity.x) > abs(overallVelocity.y) ? overallVelocity.x : overallVelocity.y;\n input.scale = firstMultiple ? getScale(firstMultiple.pointers, pointers) : 1;\n input.rotation = firstMultiple ? getRotation(firstMultiple.pointers, pointers) : 0;\n input.maxPointers = !session.prevInput ? input.pointers.length : input.pointers.length > session.prevInput.maxPointers ? input.pointers.length : session.prevInput.maxPointers;\n computeIntervalInputData(session, input); // find the correct target\n\n var target = manager.element;\n var srcEvent = input.srcEvent;\n var srcEventTarget;\n\n if (srcEvent.composedPath) {\n srcEventTarget = srcEvent.composedPath()[0];\n } else if (srcEvent.path) {\n srcEventTarget = srcEvent.path[0];\n } else {\n srcEventTarget = srcEvent.target;\n }\n\n if (hasParent(srcEventTarget, target)) {\n target = srcEventTarget;\n }\n\n input.target = target;\n}\n\n/**\n * @private\n * handle input events\n * @param {Manager} manager\n * @param {String} eventType\n * @param {Object} input\n */\n\nfunction inputHandler(manager, eventType, input) {\n var pointersLen = input.pointers.length;\n var changedPointersLen = input.changedPointers.length;\n var isFirst = eventType & INPUT_START && pointersLen - changedPointersLen === 0;\n var isFinal = eventType & (INPUT_END | INPUT_CANCEL) && pointersLen - changedPointersLen === 0;\n input.isFirst = !!isFirst;\n input.isFinal = !!isFinal;\n\n if (isFirst) {\n manager.session = {};\n } // source event is the normalized value of the domEvents\n // like 'touchstart, mouseup, pointerdown'\n\n\n input.eventType = eventType; // compute scale, rotation etc\n\n computeInputData(manager, input); // emit secret event\n\n manager.emit('hammer.input', input);\n manager.recognize(input);\n manager.session.prevInput = input;\n}\n\n/**\n * @private\n * split string on whitespace\n * @param {String} str\n * @returns {Array} words\n */\nfunction splitStr(str) {\n return str.trim().split(/\\s+/g);\n}\n\n/**\n * @private\n * addEventListener with multiple events at once\n * @param {EventTarget} target\n * @param {String} types\n * @param {Function} handler\n */\n\nfunction addEventListeners(target, types, handler) {\n each(splitStr(types), function (type) {\n target.addEventListener(type, handler, false);\n });\n}\n\n/**\n * @private\n * removeEventListener with multiple events at once\n * @param {EventTarget} target\n * @param {String} types\n * @param {Function} handler\n */\n\nfunction removeEventListeners(target, types, handler) {\n each(splitStr(types), function (type) {\n target.removeEventListener(type, handler, false);\n });\n}\n\n/**\n * @private\n * get the window object of an element\n * @param {HTMLElement} element\n * @returns {DocumentView|Window}\n */\nfunction getWindowForElement(element) {\n var doc = element.ownerDocument || element;\n return doc.defaultView || doc.parentWindow || window;\n}\n\n/**\n * @private\n * create new input type manager\n * @param {Manager} manager\n * @param {Function} callback\n * @returns {Input}\n * @constructor\n */\n\nvar Input =\n/*#__PURE__*/\nfunction () {\n function Input(manager, callback) {\n var self = this;\n this.manager = manager;\n this.callback = callback;\n this.element = manager.element;\n this.target = manager.options.inputTarget; // smaller wrapper around the handler, for the scope and the enabled state of the manager,\n // so when disabled the input events are completely bypassed.\n\n this.domHandler = function (ev) {\n if (boolOrFn(manager.options.enable, [manager])) {\n self.handler(ev);\n }\n };\n\n this.init();\n }\n /**\n * @private\n * should handle the inputEvent data and trigger the callback\n * @virtual\n */\n\n\n var _proto = Input.prototype;\n\n _proto.handler = function handler() {};\n /**\n * @private\n * bind the events\n */\n\n\n _proto.init = function init() {\n this.evEl && addEventListeners(this.element, this.evEl, this.domHandler);\n this.evTarget && addEventListeners(this.target, this.evTarget, this.domHandler);\n this.evWin && addEventListeners(getWindowForElement(this.element), this.evWin, this.domHandler);\n };\n /**\n * @private\n * unbind the events\n */\n\n\n _proto.destroy = function destroy() {\n this.evEl && removeEventListeners(this.element, this.evEl, this.domHandler);\n this.evTarget && removeEventListeners(this.target, this.evTarget, this.domHandler);\n this.evWin && removeEventListeners(getWindowForElement(this.element), this.evWin, this.domHandler);\n };\n\n return Input;\n}();\n\n/**\n * @private\n * find if a array contains the object using indexOf or a simple polyFill\n * @param {Array} src\n * @param {String} find\n * @param {String} [findByKey]\n * @return {Boolean|Number} false when not found, or the index\n */\nfunction inArray(src, find, findByKey) {\n if (src.indexOf && !findByKey) {\n return src.indexOf(find);\n } else {\n var i = 0;\n\n while (i < src.length) {\n if (findByKey && src[i][findByKey] == find || !findByKey && src[i] === find) {\n // do not use === here, test fails\n return i;\n }\n\n i++;\n }\n\n return -1;\n }\n}\n\nvar POINTER_INPUT_MAP = {\n pointerdown: INPUT_START,\n pointermove: INPUT_MOVE,\n pointerup: INPUT_END,\n pointercancel: INPUT_CANCEL,\n pointerout: INPUT_CANCEL\n}; // in IE10 the pointer types is defined as an enum\n\nvar IE10_POINTER_TYPE_ENUM = {\n 2: INPUT_TYPE_TOUCH,\n 3: INPUT_TYPE_PEN,\n 4: INPUT_TYPE_MOUSE,\n 5: INPUT_TYPE_KINECT // see https://twitter.com/jacobrossi/status/480596438489890816\n\n};\nvar POINTER_ELEMENT_EVENTS = 'pointerdown';\nvar POINTER_WINDOW_EVENTS = 'pointermove pointerup pointercancel'; // IE10 has prefixed support, and case-sensitive\n\nif (win.MSPointerEvent && !win.PointerEvent) {\n POINTER_ELEMENT_EVENTS = 'MSPointerDown';\n POINTER_WINDOW_EVENTS = 'MSPointerMove MSPointerUp MSPointerCancel';\n}\n/**\n * @private\n * Pointer events input\n * @constructor\n * @extends Input\n */\n\n\nvar PointerEventInput =\n/*#__PURE__*/\nfunction (_Input) {\n _inheritsLoose(PointerEventInput, _Input);\n\n function PointerEventInput() {\n var _this;\n\n var proto = PointerEventInput.prototype;\n proto.evEl = POINTER_ELEMENT_EVENTS;\n proto.evWin = POINTER_WINDOW_EVENTS;\n _this = _Input.apply(this, arguments) || this;\n _this.store = _this.manager.session.pointerEvents = [];\n return _this;\n }\n /**\n * @private\n * handle mouse events\n * @param {Object} ev\n */\n\n\n var _proto = PointerEventInput.prototype;\n\n _proto.handler = function handler(ev) {\n var store = this.store;\n var removePointer = false;\n var eventTypeNormalized = ev.type.toLowerCase().replace('ms', '');\n var eventType = POINTER_INPUT_MAP[eventTypeNormalized];\n var pointerType = IE10_POINTER_TYPE_ENUM[ev.pointerType] || ev.pointerType;\n var isTouch = pointerType === INPUT_TYPE_TOUCH; // get index of the event in the store\n\n var storeIndex = inArray(store, ev.pointerId, 'pointerId'); // start and mouse must be down\n\n if (eventType & INPUT_START && (ev.button === 0 || isTouch)) {\n if (storeIndex < 0) {\n store.push(ev);\n storeIndex = store.length - 1;\n }\n } else if (eventType & (INPUT_END | INPUT_CANCEL)) {\n removePointer = true;\n } // it not found, so the pointer hasn't been down (so it's probably a hover)\n\n\n if (storeIndex < 0) {\n return;\n } // update the event in the store\n\n\n store[storeIndex] = ev;\n this.callback(this.manager, eventType, {\n pointers: store,\n changedPointers: [ev],\n pointerType: pointerType,\n srcEvent: ev\n });\n\n if (removePointer) {\n // remove from the store\n store.splice(storeIndex, 1);\n }\n };\n\n return PointerEventInput;\n}(Input);\n\n/**\n * @private\n * convert array-like objects to real arrays\n * @param {Object} obj\n * @returns {Array}\n */\nfunction toArray(obj) {\n return Array.prototype.slice.call(obj, 0);\n}\n\n/**\n * @private\n * unique array with objects based on a key (like 'id') or just by the array's value\n * @param {Array} src [{id:1},{id:2},{id:1}]\n * @param {String} [key]\n * @param {Boolean} [sort=False]\n * @returns {Array} [{id:1},{id:2}]\n */\n\nfunction uniqueArray(src, key, sort) {\n var results = [];\n var values = [];\n var i = 0;\n\n while (i < src.length) {\n var val = key ? src[i][key] : src[i];\n\n if (inArray(values, val) < 0) {\n results.push(src[i]);\n }\n\n values[i] = val;\n i++;\n }\n\n if (sort) {\n if (!key) {\n results = results.sort();\n } else {\n results = results.sort(function (a, b) {\n return a[key] > b[key];\n });\n }\n }\n\n return results;\n}\n\nvar TOUCH_INPUT_MAP = {\n touchstart: INPUT_START,\n touchmove: INPUT_MOVE,\n touchend: INPUT_END,\n touchcancel: INPUT_CANCEL\n};\nvar TOUCH_TARGET_EVENTS = 'touchstart touchmove touchend touchcancel';\n/**\n * @private\n * Multi-user touch events input\n * @constructor\n * @extends Input\n */\n\nvar TouchInput =\n/*#__PURE__*/\nfunction (_Input) {\n _inheritsLoose(TouchInput, _Input);\n\n function TouchInput() {\n var _this;\n\n TouchInput.prototype.evTarget = TOUCH_TARGET_EVENTS;\n _this = _Input.apply(this, arguments) || this;\n _this.targetIds = {}; // this.evTarget = TOUCH_TARGET_EVENTS;\n\n return _this;\n }\n\n var _proto = TouchInput.prototype;\n\n _proto.handler = function handler(ev) {\n var type = TOUCH_INPUT_MAP[ev.type];\n var touches = getTouches.call(this, ev, type);\n\n if (!touches) {\n return;\n }\n\n this.callback(this.manager, type, {\n pointers: touches[0],\n changedPointers: touches[1],\n pointerType: INPUT_TYPE_TOUCH,\n srcEvent: ev\n });\n };\n\n return TouchInput;\n}(Input);\n\nfunction getTouches(ev, type) {\n var allTouches = toArray(ev.touches);\n var targetIds = this.targetIds; // when there is only one touch, the process can be simplified\n\n if (type & (INPUT_START | INPUT_MOVE) && allTouches.length === 1) {\n targetIds[allTouches[0].identifier] = true;\n return [allTouches, allTouches];\n }\n\n var i;\n var targetTouches;\n var changedTouches = toArray(ev.changedTouches);\n var changedTargetTouches = [];\n var target = this.target; // get target touches from touches\n\n targetTouches = allTouches.filter(function (touch) {\n return hasParent(touch.target, target);\n }); // collect touches\n\n if (type === INPUT_START) {\n i = 0;\n\n while (i < targetTouches.length) {\n targetIds[targetTouches[i].identifier] = true;\n i++;\n }\n } // filter changed touches to only contain touches that exist in the collected target ids\n\n\n i = 0;\n\n while (i < changedTouches.length) {\n if (targetIds[changedTouches[i].identifier]) {\n changedTargetTouches.push(changedTouches[i]);\n } // cleanup removed touches\n\n\n if (type & (INPUT_END | INPUT_CANCEL)) {\n delete targetIds[changedTouches[i].identifier];\n }\n\n i++;\n }\n\n if (!changedTargetTouches.length) {\n return;\n }\n\n return [// merge targetTouches with changedTargetTouches so it contains ALL touches, including 'end' and 'cancel'\n uniqueArray(targetTouches.concat(changedTargetTouches), 'identifier', true), changedTargetTouches];\n}\n\nvar MOUSE_INPUT_MAP = {\n mousedown: INPUT_START,\n mousemove: INPUT_MOVE,\n mouseup: INPUT_END\n};\nvar MOUSE_ELEMENT_EVENTS = 'mousedown';\nvar MOUSE_WINDOW_EVENTS = 'mousemove mouseup';\n/**\n * @private\n * Mouse events input\n * @constructor\n * @extends Input\n */\n\nvar MouseInput =\n/*#__PURE__*/\nfunction (_Input) {\n _inheritsLoose(MouseInput, _Input);\n\n function MouseInput() {\n var _this;\n\n var proto = MouseInput.prototype;\n proto.evEl = MOUSE_ELEMENT_EVENTS;\n proto.evWin = MOUSE_WINDOW_EVENTS;\n _this = _Input.apply(this, arguments) || this;\n _this.pressed = false; // mousedown state\n\n return _this;\n }\n /**\n * @private\n * handle mouse events\n * @param {Object} ev\n */\n\n\n var _proto = MouseInput.prototype;\n\n _proto.handler = function handler(ev) {\n var eventType = MOUSE_INPUT_MAP[ev.type]; // on start we want to have the left mouse button down\n\n if (eventType & INPUT_START && ev.button === 0) {\n this.pressed = true;\n }\n\n if (eventType & INPUT_MOVE && ev.which !== 1) {\n eventType = INPUT_END;\n } // mouse must be down\n\n\n if (!this.pressed) {\n return;\n }\n\n if (eventType & INPUT_END) {\n this.pressed = false;\n }\n\n this.callback(this.manager, eventType, {\n pointers: [ev],\n changedPointers: [ev],\n pointerType: INPUT_TYPE_MOUSE,\n srcEvent: ev\n });\n };\n\n return MouseInput;\n}(Input);\n\n/**\n * @private\n * Combined touch and mouse input\n *\n * Touch has a higher priority then mouse, and while touching no mouse events are allowed.\n * This because touch devices also emit mouse events while doing a touch.\n *\n * @constructor\n * @extends Input\n */\n\nvar DEDUP_TIMEOUT = 2500;\nvar DEDUP_DISTANCE = 25;\n\nfunction setLastTouch(eventData) {\n var _eventData$changedPoi = eventData.changedPointers,\n touch = _eventData$changedPoi[0];\n\n if (touch.identifier === this.primaryTouch) {\n var lastTouch = {\n x: touch.clientX,\n y: touch.clientY\n };\n var lts = this.lastTouches;\n this.lastTouches.push(lastTouch);\n\n var removeLastTouch = function removeLastTouch() {\n var i = lts.indexOf(lastTouch);\n\n if (i > -1) {\n lts.splice(i, 1);\n }\n };\n\n setTimeout(removeLastTouch, DEDUP_TIMEOUT);\n }\n}\n\nfunction recordTouches(eventType, eventData) {\n if (eventType & INPUT_START) {\n this.primaryTouch = eventData.changedPointers[0].identifier;\n setLastTouch.call(this, eventData);\n } else if (eventType & (INPUT_END | INPUT_CANCEL)) {\n setLastTouch.call(this, eventData);\n }\n}\n\nfunction isSyntheticEvent(eventData) {\n var x = eventData.srcEvent.clientX;\n var y = eventData.srcEvent.clientY;\n\n for (var i = 0; i < this.lastTouches.length; i++) {\n var t = this.lastTouches[i];\n var dx = Math.abs(x - t.x);\n var dy = Math.abs(y - t.y);\n\n if (dx <= DEDUP_DISTANCE && dy <= DEDUP_DISTANCE) {\n return true;\n }\n }\n\n return false;\n}\n\nvar TouchMouseInput =\n/*#__PURE__*/\nfunction () {\n var TouchMouseInput =\n /*#__PURE__*/\n function (_Input) {\n _inheritsLoose(TouchMouseInput, _Input);\n\n function TouchMouseInput(_manager, callback) {\n var _this;\n\n _this = _Input.call(this, _manager, callback) || this;\n\n _this.handler = function (manager, inputEvent, inputData) {\n var isTouch = inputData.pointerType === INPUT_TYPE_TOUCH;\n var isMouse = inputData.pointerType === INPUT_TYPE_MOUSE;\n\n if (isMouse && inputData.sourceCapabilities && inputData.sourceCapabilities.firesTouchEvents) {\n return;\n } // when we're in a touch event, record touches to de-dupe synthetic mouse event\n\n\n if (isTouch) {\n recordTouches.call(_assertThisInitialized(_assertThisInitialized(_this)), inputEvent, inputData);\n } else if (isMouse && isSyntheticEvent.call(_assertThisInitialized(_assertThisInitialized(_this)), inputData)) {\n return;\n }\n\n _this.callback(manager, inputEvent, inputData);\n };\n\n _this.touch = new TouchInput(_this.manager, _this.handler);\n _this.mouse = new MouseInput(_this.manager, _this.handler);\n _this.primaryTouch = null;\n _this.lastTouches = [];\n return _this;\n }\n /**\n * @private\n * handle mouse and touch events\n * @param {Hammer} manager\n * @param {String} inputEvent\n * @param {Object} inputData\n */\n\n\n var _proto = TouchMouseInput.prototype;\n\n /**\n * @private\n * remove the event listeners\n */\n _proto.destroy = function destroy() {\n this.touch.destroy();\n this.mouse.destroy();\n };\n\n return TouchMouseInput;\n }(Input);\n\n return TouchMouseInput;\n}();\n\n/**\n * @private\n * create new input type manager\n * called by the Manager constructor\n * @param {Hammer} manager\n * @returns {Input}\n */\n\nfunction createInputInstance(manager) {\n var Type; // let inputClass = manager.options.inputClass;\n\n var inputClass = manager.options.inputClass;\n\n if (inputClass) {\n Type = inputClass;\n } else if (SUPPORT_POINTER_EVENTS) {\n Type = PointerEventInput;\n } else if (SUPPORT_ONLY_TOUCH) {\n Type = TouchInput;\n } else if (!SUPPORT_TOUCH) {\n Type = MouseInput;\n } else {\n Type = TouchMouseInput;\n }\n\n return new Type(manager, inputHandler);\n}\n\n/**\n * @private\n * if the argument is an array, we want to execute the fn on each entry\n * if it aint an array we don't want to do a thing.\n * this is used by all the methods that accept a single and array argument.\n * @param {*|Array} arg\n * @param {String} fn\n * @param {Object} [context]\n * @returns {Boolean}\n */\n\nfunction invokeArrayArg(arg, fn, context) {\n if (Array.isArray(arg)) {\n each(arg, context[fn], context);\n return true;\n }\n\n return false;\n}\n\nvar STATE_POSSIBLE = 1;\nvar STATE_BEGAN = 2;\nvar STATE_CHANGED = 4;\nvar STATE_ENDED = 8;\nvar STATE_RECOGNIZED = STATE_ENDED;\nvar STATE_CANCELLED = 16;\nvar STATE_FAILED = 32;\n\n/**\n * @private\n * get a unique id\n * @returns {number} uniqueId\n */\nvar _uniqueId = 1;\nfunction uniqueId() {\n return _uniqueId++;\n}\n\n/**\n * @private\n * get a recognizer by name if it is bound to a manager\n * @param {Recognizer|String} otherRecognizer\n * @param {Recognizer} recognizer\n * @returns {Recognizer}\n */\nfunction getRecognizerByNameIfManager(otherRecognizer, recognizer) {\n var manager = recognizer.manager;\n\n if (manager) {\n return manager.get(otherRecognizer);\n }\n\n return otherRecognizer;\n}\n\n/**\n * @private\n * get a usable string, used as event postfix\n * @param {constant} state\n * @returns {String} state\n */\n\nfunction stateStr(state) {\n if (state & STATE_CANCELLED) {\n return 'cancel';\n } else if (state & STATE_ENDED) {\n return 'end';\n } else if (state & STATE_CHANGED) {\n return 'move';\n } else if (state & STATE_BEGAN) {\n return 'start';\n }\n\n return '';\n}\n\n/**\n * @private\n * Recognizer flow explained; *\n * All recognizers have the initial state of POSSIBLE when a input session starts.\n * The definition of a input session is from the first input until the last input, with all it's movement in it. *\n * Example session for mouse-input: mousedown -> mousemove -> mouseup\n *\n * On each recognizing cycle (see Manager.recognize) the .recognize() method is executed\n * which determines with state it should be.\n *\n * If the recognizer has the state FAILED, CANCELLED or RECOGNIZED (equals ENDED), it is reset to\n * POSSIBLE to give it another change on the next cycle.\n *\n * Possible\n * |\n * +-----+---------------+\n * | |\n * +-----+-----+ |\n * | | |\n * Failed Cancelled |\n * +-------+------+\n * | |\n * Recognized Began\n * |\n * Changed\n * |\n * Ended/Recognized\n */\n\n/**\n * @private\n * Recognizer\n * Every recognizer needs to extend from this class.\n * @constructor\n * @param {Object} options\n */\n\nvar Recognizer =\n/*#__PURE__*/\nfunction () {\n function Recognizer(options) {\n if (options === void 0) {\n options = {};\n }\n\n this.options = _extends({\n enable: true\n }, options);\n this.id = uniqueId();\n this.manager = null; // default is enable true\n\n this.state = STATE_POSSIBLE;\n this.simultaneous = {};\n this.requireFail = [];\n }\n /**\n * @private\n * set options\n * @param {Object} options\n * @return {Recognizer}\n */\n\n\n var _proto = Recognizer.prototype;\n\n _proto.set = function set(options) {\n assign$1(this.options, options); // also update the touchAction, in case something changed about the directions/enabled state\n\n this.manager && this.manager.touchAction.update();\n return this;\n };\n /**\n * @private\n * recognize simultaneous with an other recognizer.\n * @param {Recognizer} otherRecognizer\n * @returns {Recognizer} this\n */\n\n\n _proto.recognizeWith = function recognizeWith(otherRecognizer) {\n if (invokeArrayArg(otherRecognizer, 'recognizeWith', this)) {\n return this;\n }\n\n var simultaneous = this.simultaneous;\n otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n\n if (!simultaneous[otherRecognizer.id]) {\n simultaneous[otherRecognizer.id] = otherRecognizer;\n otherRecognizer.recognizeWith(this);\n }\n\n return this;\n };\n /**\n * @private\n * drop the simultaneous link. it doesnt remove the link on the other recognizer.\n * @param {Recognizer} otherRecognizer\n * @returns {Recognizer} this\n */\n\n\n _proto.dropRecognizeWith = function dropRecognizeWith(otherRecognizer) {\n if (invokeArrayArg(otherRecognizer, 'dropRecognizeWith', this)) {\n return this;\n }\n\n otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n delete this.simultaneous[otherRecognizer.id];\n return this;\n };\n /**\n * @private\n * recognizer can only run when an other is failing\n * @param {Recognizer} otherRecognizer\n * @returns {Recognizer} this\n */\n\n\n _proto.requireFailure = function requireFailure(otherRecognizer) {\n if (invokeArrayArg(otherRecognizer, 'requireFailure', this)) {\n return this;\n }\n\n var requireFail = this.requireFail;\n otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n\n if (inArray(requireFail, otherRecognizer) === -1) {\n requireFail.push(otherRecognizer);\n otherRecognizer.requireFailure(this);\n }\n\n return this;\n };\n /**\n * @private\n * drop the requireFailure link. it does not remove the link on the other recognizer.\n * @param {Recognizer} otherRecognizer\n * @returns {Recognizer} this\n */\n\n\n _proto.dropRequireFailure = function dropRequireFailure(otherRecognizer) {\n if (invokeArrayArg(otherRecognizer, 'dropRequireFailure', this)) {\n return this;\n }\n\n otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n var index = inArray(this.requireFail, otherRecognizer);\n\n if (index > -1) {\n this.requireFail.splice(index, 1);\n }\n\n return this;\n };\n /**\n * @private\n * has require failures boolean\n * @returns {boolean}\n */\n\n\n _proto.hasRequireFailures = function hasRequireFailures() {\n return this.requireFail.length > 0;\n };\n /**\n * @private\n * if the recognizer can recognize simultaneous with an other recognizer\n * @param {Recognizer} otherRecognizer\n * @returns {Boolean}\n */\n\n\n _proto.canRecognizeWith = function canRecognizeWith(otherRecognizer) {\n return !!this.simultaneous[otherRecognizer.id];\n };\n /**\n * @private\n * You should use `tryEmit` instead of `emit` directly to check\n * that all the needed recognizers has failed before emitting.\n * @param {Object} input\n */\n\n\n _proto.emit = function emit(input) {\n var self = this;\n var state = this.state;\n\n function emit(event) {\n self.manager.emit(event, input);\n } // 'panstart' and 'panmove'\n\n\n if (state < STATE_ENDED) {\n emit(self.options.event + stateStr(state));\n }\n\n emit(self.options.event); // simple 'eventName' events\n\n if (input.additionalEvent) {\n // additional event(panleft, panright, pinchin, pinchout...)\n emit(input.additionalEvent);\n } // panend and pancancel\n\n\n if (state >= STATE_ENDED) {\n emit(self.options.event + stateStr(state));\n }\n };\n /**\n * @private\n * Check that all the require failure recognizers has failed,\n * if true, it emits a gesture event,\n * otherwise, setup the state to FAILED.\n * @param {Object} input\n */\n\n\n _proto.tryEmit = function tryEmit(input) {\n if (this.canEmit()) {\n return this.emit(input);\n } // it's failing anyway\n\n\n this.state = STATE_FAILED;\n };\n /**\n * @private\n * can we emit?\n * @returns {boolean}\n */\n\n\n _proto.canEmit = function canEmit() {\n var i = 0;\n\n while (i < this.requireFail.length) {\n if (!(this.requireFail[i].state & (STATE_FAILED | STATE_POSSIBLE))) {\n return false;\n }\n\n i++;\n }\n\n return true;\n };\n /**\n * @private\n * update the recognizer\n * @param {Object} inputData\n */\n\n\n _proto.recognize = function recognize(inputData) {\n // make a new copy of the inputData\n // so we can change the inputData without messing up the other recognizers\n var inputDataClone = assign$1({}, inputData); // is is enabled and allow recognizing?\n\n if (!boolOrFn(this.options.enable, [this, inputDataClone])) {\n this.reset();\n this.state = STATE_FAILED;\n return;\n } // reset when we've reached the end\n\n\n if (this.state & (STATE_RECOGNIZED | STATE_CANCELLED | STATE_FAILED)) {\n this.state = STATE_POSSIBLE;\n }\n\n this.state = this.process(inputDataClone); // the recognizer has recognized a gesture\n // so trigger an event\n\n if (this.state & (STATE_BEGAN | STATE_CHANGED | STATE_ENDED | STATE_CANCELLED)) {\n this.tryEmit(inputDataClone);\n }\n };\n /**\n * @private\n * return the state of the recognizer\n * the actual recognizing happens in this method\n * @virtual\n * @param {Object} inputData\n * @returns {constant} STATE\n */\n\n /* jshint ignore:start */\n\n\n _proto.process = function process(inputData) {};\n /* jshint ignore:end */\n\n /**\n * @private\n * return the preferred touch-action\n * @virtual\n * @returns {Array}\n */\n\n\n _proto.getTouchAction = function getTouchAction() {};\n /**\n * @private\n * called when the gesture isn't allowed to recognize\n * like when another is being recognized or it is disabled\n * @virtual\n */\n\n\n _proto.reset = function reset() {};\n\n return Recognizer;\n}();\n\n/**\n * @private\n * A tap is recognized when the pointer is doing a small tap/click. Multiple taps are recognized if they occur\n * between the given interval and position. The delay option can be used to recognize multi-taps without firing\n * a single tap.\n *\n * The eventData from the emitted event contains the property `tapCount`, which contains the amount of\n * multi-taps being recognized.\n * @constructor\n * @extends Recognizer\n */\n\nvar TapRecognizer =\n/*#__PURE__*/\nfunction (_Recognizer) {\n _inheritsLoose(TapRecognizer, _Recognizer);\n\n function TapRecognizer(options) {\n var _this;\n\n if (options === void 0) {\n options = {};\n }\n\n _this = _Recognizer.call(this, _extends({\n event: 'tap',\n pointers: 1,\n taps: 1,\n interval: 300,\n // max time between the multi-tap taps\n time: 250,\n // max time of the pointer to be down (like finger on the screen)\n threshold: 9,\n // a minimal movement is ok, but keep it low\n posThreshold: 10\n }, options)) || this; // previous time and center,\n // used for tap counting\n\n _this.pTime = false;\n _this.pCenter = false;\n _this._timer = null;\n _this._input = null;\n _this.count = 0;\n return _this;\n }\n\n var _proto = TapRecognizer.prototype;\n\n _proto.getTouchAction = function getTouchAction() {\n return [TOUCH_ACTION_MANIPULATION];\n };\n\n _proto.process = function process(input) {\n var _this2 = this;\n\n var options = this.options;\n var validPointers = input.pointers.length === options.pointers;\n var validMovement = input.distance < options.threshold;\n var validTouchTime = input.deltaTime < options.time;\n this.reset();\n\n if (input.eventType & INPUT_START && this.count === 0) {\n return this.failTimeout();\n } // we only allow little movement\n // and we've reached an end event, so a tap is possible\n\n\n if (validMovement && validTouchTime && validPointers) {\n if (input.eventType !== INPUT_END) {\n return this.failTimeout();\n }\n\n var validInterval = this.pTime ? input.timeStamp - this.pTime < options.interval : true;\n var validMultiTap = !this.pCenter || getDistance(this.pCenter, input.center) < options.posThreshold;\n this.pTime = input.timeStamp;\n this.pCenter = input.center;\n\n if (!validMultiTap || !validInterval) {\n this.count = 1;\n } else {\n this.count += 1;\n }\n\n this._input = input; // if tap count matches we have recognized it,\n // else it has began recognizing...\n\n var tapCount = this.count % options.taps;\n\n if (tapCount === 0) {\n // no failing requirements, immediately trigger the tap event\n // or wait as long as the multitap interval to trigger\n if (!this.hasRequireFailures()) {\n return STATE_RECOGNIZED;\n } else {\n this._timer = setTimeout(function () {\n _this2.state = STATE_RECOGNIZED;\n\n _this2.tryEmit();\n }, options.interval);\n return STATE_BEGAN;\n }\n }\n }\n\n return STATE_FAILED;\n };\n\n _proto.failTimeout = function failTimeout() {\n var _this3 = this;\n\n this._timer = setTimeout(function () {\n _this3.state = STATE_FAILED;\n }, this.options.interval);\n return STATE_FAILED;\n };\n\n _proto.reset = function reset() {\n clearTimeout(this._timer);\n };\n\n _proto.emit = function emit() {\n if (this.state === STATE_RECOGNIZED) {\n this._input.tapCount = this.count;\n this.manager.emit(this.options.event, this._input);\n }\n };\n\n return TapRecognizer;\n}(Recognizer);\n\n/**\n * @private\n * This recognizer is just used as a base for the simple attribute recognizers.\n * @constructor\n * @extends Recognizer\n */\n\nvar AttrRecognizer =\n/*#__PURE__*/\nfunction (_Recognizer) {\n _inheritsLoose(AttrRecognizer, _Recognizer);\n\n function AttrRecognizer(options) {\n if (options === void 0) {\n options = {};\n }\n\n return _Recognizer.call(this, _extends({\n pointers: 1\n }, options)) || this;\n }\n /**\n * @private\n * Used to check if it the recognizer receives valid input, like input.distance > 10.\n * @memberof AttrRecognizer\n * @param {Object} input\n * @returns {Boolean} recognized\n */\n\n\n var _proto = AttrRecognizer.prototype;\n\n _proto.attrTest = function attrTest(input) {\n var optionPointers = this.options.pointers;\n return optionPointers === 0 || input.pointers.length === optionPointers;\n };\n /**\n * @private\n * Process the input and return the state for the recognizer\n * @memberof AttrRecognizer\n * @param {Object} input\n * @returns {*} State\n */\n\n\n _proto.process = function process(input) {\n var state = this.state;\n var eventType = input.eventType;\n var isRecognized = state & (STATE_BEGAN | STATE_CHANGED);\n var isValid = this.attrTest(input); // on cancel input and we've recognized before, return STATE_CANCELLED\n\n if (isRecognized && (eventType & INPUT_CANCEL || !isValid)) {\n return state | STATE_CANCELLED;\n } else if (isRecognized || isValid) {\n if (eventType & INPUT_END) {\n return state | STATE_ENDED;\n } else if (!(state & STATE_BEGAN)) {\n return STATE_BEGAN;\n }\n\n return state | STATE_CHANGED;\n }\n\n return STATE_FAILED;\n };\n\n return AttrRecognizer;\n}(Recognizer);\n\n/**\n * @private\n * direction cons to string\n * @param {constant} direction\n * @returns {String}\n */\n\nfunction directionStr(direction) {\n if (direction === DIRECTION_DOWN) {\n return 'down';\n } else if (direction === DIRECTION_UP) {\n return 'up';\n } else if (direction === DIRECTION_LEFT) {\n return 'left';\n } else if (direction === DIRECTION_RIGHT) {\n return 'right';\n }\n\n return '';\n}\n\n/**\n * @private\n * Pan\n * Recognized when the pointer is down and moved in the allowed direction.\n * @constructor\n * @extends AttrRecognizer\n */\n\nvar PanRecognizer =\n/*#__PURE__*/\nfunction (_AttrRecognizer) {\n _inheritsLoose(PanRecognizer, _AttrRecognizer);\n\n function PanRecognizer(options) {\n var _this;\n\n if (options === void 0) {\n options = {};\n }\n\n _this = _AttrRecognizer.call(this, _extends({\n event: 'pan',\n threshold: 10,\n pointers: 1,\n direction: DIRECTION_ALL\n }, options)) || this;\n _this.pX = null;\n _this.pY = null;\n return _this;\n }\n\n var _proto = PanRecognizer.prototype;\n\n _proto.getTouchAction = function getTouchAction() {\n var direction = this.options.direction;\n var actions = [];\n\n if (direction & DIRECTION_HORIZONTAL) {\n actions.push(TOUCH_ACTION_PAN_Y);\n }\n\n if (direction & DIRECTION_VERTICAL) {\n actions.push(TOUCH_ACTION_PAN_X);\n }\n\n return actions;\n };\n\n _proto.directionTest = function directionTest(input) {\n var options = this.options;\n var hasMoved = true;\n var distance = input.distance;\n var direction = input.direction;\n var x = input.deltaX;\n var y = input.deltaY; // lock to axis?\n\n if (!(direction & options.direction)) {\n if (options.direction & DIRECTION_HORIZONTAL) {\n direction = x === 0 ? DIRECTION_NONE : x < 0 ? DIRECTION_LEFT : DIRECTION_RIGHT;\n hasMoved = x !== this.pX;\n distance = Math.abs(input.deltaX);\n } else {\n direction = y === 0 ? DIRECTION_NONE : y < 0 ? DIRECTION_UP : DIRECTION_DOWN;\n hasMoved = y !== this.pY;\n distance = Math.abs(input.deltaY);\n }\n }\n\n input.direction = direction;\n return hasMoved && distance > options.threshold && direction & options.direction;\n };\n\n _proto.attrTest = function attrTest(input) {\n return AttrRecognizer.prototype.attrTest.call(this, input) && ( // replace with a super call\n this.state & STATE_BEGAN || !(this.state & STATE_BEGAN) && this.directionTest(input));\n };\n\n _proto.emit = function emit(input) {\n this.pX = input.deltaX;\n this.pY = input.deltaY;\n var direction = directionStr(input.direction);\n\n if (direction) {\n input.additionalEvent = this.options.event + direction;\n }\n\n _AttrRecognizer.prototype.emit.call(this, input);\n };\n\n return PanRecognizer;\n}(AttrRecognizer);\n\n/**\n * @private\n * Swipe\n * Recognized when the pointer is moving fast (velocity), with enough distance in the allowed direction.\n * @constructor\n * @extends AttrRecognizer\n */\n\nvar SwipeRecognizer =\n/*#__PURE__*/\nfunction (_AttrRecognizer) {\n _inheritsLoose(SwipeRecognizer, _AttrRecognizer);\n\n function SwipeRecognizer(options) {\n if (options === void 0) {\n options = {};\n }\n\n return _AttrRecognizer.call(this, _extends({\n event: 'swipe',\n threshold: 10,\n velocity: 0.3,\n direction: DIRECTION_HORIZONTAL | DIRECTION_VERTICAL,\n pointers: 1\n }, options)) || this;\n }\n\n var _proto = SwipeRecognizer.prototype;\n\n _proto.getTouchAction = function getTouchAction() {\n return PanRecognizer.prototype.getTouchAction.call(this);\n };\n\n _proto.attrTest = function attrTest(input) {\n var direction = this.options.direction;\n var velocity;\n\n if (direction & (DIRECTION_HORIZONTAL | DIRECTION_VERTICAL)) {\n velocity = input.overallVelocity;\n } else if (direction & DIRECTION_HORIZONTAL) {\n velocity = input.overallVelocityX;\n } else if (direction & DIRECTION_VERTICAL) {\n velocity = input.overallVelocityY;\n }\n\n return _AttrRecognizer.prototype.attrTest.call(this, input) && direction & input.offsetDirection && input.distance > this.options.threshold && input.maxPointers === this.options.pointers && abs(velocity) > this.options.velocity && input.eventType & INPUT_END;\n };\n\n _proto.emit = function emit(input) {\n var direction = directionStr(input.offsetDirection);\n\n if (direction) {\n this.manager.emit(this.options.event + direction, input);\n }\n\n this.manager.emit(this.options.event, input);\n };\n\n return SwipeRecognizer;\n}(AttrRecognizer);\n\n/**\n * @private\n * Pinch\n * Recognized when two or more pointers are moving toward (zoom-in) or away from each other (zoom-out).\n * @constructor\n * @extends AttrRecognizer\n */\n\nvar PinchRecognizer =\n/*#__PURE__*/\nfunction (_AttrRecognizer) {\n _inheritsLoose(PinchRecognizer, _AttrRecognizer);\n\n function PinchRecognizer(options) {\n if (options === void 0) {\n options = {};\n }\n\n return _AttrRecognizer.call(this, _extends({\n event: 'pinch',\n threshold: 0,\n pointers: 2\n }, options)) || this;\n }\n\n var _proto = PinchRecognizer.prototype;\n\n _proto.getTouchAction = function getTouchAction() {\n return [TOUCH_ACTION_NONE];\n };\n\n _proto.attrTest = function attrTest(input) {\n return _AttrRecognizer.prototype.attrTest.call(this, input) && (Math.abs(input.scale - 1) > this.options.threshold || this.state & STATE_BEGAN);\n };\n\n _proto.emit = function emit(input) {\n if (input.scale !== 1) {\n var inOut = input.scale < 1 ? 'in' : 'out';\n input.additionalEvent = this.options.event + inOut;\n }\n\n _AttrRecognizer.prototype.emit.call(this, input);\n };\n\n return PinchRecognizer;\n}(AttrRecognizer);\n\n/**\n * @private\n * Rotate\n * Recognized when two or more pointer are moving in a circular motion.\n * @constructor\n * @extends AttrRecognizer\n */\n\nvar RotateRecognizer =\n/*#__PURE__*/\nfunction (_AttrRecognizer) {\n _inheritsLoose(RotateRecognizer, _AttrRecognizer);\n\n function RotateRecognizer(options) {\n if (options === void 0) {\n options = {};\n }\n\n return _AttrRecognizer.call(this, _extends({\n event: 'rotate',\n threshold: 0,\n pointers: 2\n }, options)) || this;\n }\n\n var _proto = RotateRecognizer.prototype;\n\n _proto.getTouchAction = function getTouchAction() {\n return [TOUCH_ACTION_NONE];\n };\n\n _proto.attrTest = function attrTest(input) {\n return _AttrRecognizer.prototype.attrTest.call(this, input) && (Math.abs(input.rotation) > this.options.threshold || this.state & STATE_BEGAN);\n };\n\n return RotateRecognizer;\n}(AttrRecognizer);\n\n/**\n * @private\n * Press\n * Recognized when the pointer is down for x ms without any movement.\n * @constructor\n * @extends Recognizer\n */\n\nvar PressRecognizer =\n/*#__PURE__*/\nfunction (_Recognizer) {\n _inheritsLoose(PressRecognizer, _Recognizer);\n\n function PressRecognizer(options) {\n var _this;\n\n if (options === void 0) {\n options = {};\n }\n\n _this = _Recognizer.call(this, _extends({\n event: 'press',\n pointers: 1,\n time: 251,\n // minimal time of the pointer to be pressed\n threshold: 9\n }, options)) || this;\n _this._timer = null;\n _this._input = null;\n return _this;\n }\n\n var _proto = PressRecognizer.prototype;\n\n _proto.getTouchAction = function getTouchAction() {\n return [TOUCH_ACTION_AUTO];\n };\n\n _proto.process = function process(input) {\n var _this2 = this;\n\n var options = this.options;\n var validPointers = input.pointers.length === options.pointers;\n var validMovement = input.distance < options.threshold;\n var validTime = input.deltaTime > options.time;\n this._input = input; // we only allow little movement\n // and we've reached an end event, so a tap is possible\n\n if (!validMovement || !validPointers || input.eventType & (INPUT_END | INPUT_CANCEL) && !validTime) {\n this.reset();\n } else if (input.eventType & INPUT_START) {\n this.reset();\n this._timer = setTimeout(function () {\n _this2.state = STATE_RECOGNIZED;\n\n _this2.tryEmit();\n }, options.time);\n } else if (input.eventType & INPUT_END) {\n return STATE_RECOGNIZED;\n }\n\n return STATE_FAILED;\n };\n\n _proto.reset = function reset() {\n clearTimeout(this._timer);\n };\n\n _proto.emit = function emit(input) {\n if (this.state !== STATE_RECOGNIZED) {\n return;\n }\n\n if (input && input.eventType & INPUT_END) {\n this.manager.emit(this.options.event + \"up\", input);\n } else {\n this._input.timeStamp = now();\n this.manager.emit(this.options.event, this._input);\n }\n };\n\n return PressRecognizer;\n}(Recognizer);\n\nvar defaults = {\n /**\n * @private\n * set if DOM events are being triggered.\n * But this is slower and unused by simple implementations, so disabled by default.\n * @type {Boolean}\n * @default false\n */\n domEvents: false,\n\n /**\n * @private\n * The value for the touchAction property/fallback.\n * When set to `compute` it will magically set the correct value based on the added recognizers.\n * @type {String}\n * @default compute\n */\n touchAction: TOUCH_ACTION_COMPUTE,\n\n /**\n * @private\n * @type {Boolean}\n * @default true\n */\n enable: true,\n\n /**\n * @private\n * EXPERIMENTAL FEATURE -- can be removed/changed\n * Change the parent input target element.\n * If Null, then it is being set the to main element.\n * @type {Null|EventTarget}\n * @default null\n */\n inputTarget: null,\n\n /**\n * @private\n * force an input class\n * @type {Null|Function}\n * @default null\n */\n inputClass: null,\n\n /**\n * @private\n * Some CSS properties can be used to improve the working of Hammer.\n * Add them to this method and they will be set when creating a new Manager.\n * @namespace\n */\n cssProps: {\n /**\n * @private\n * Disables text selection to improve the dragging gesture. Mainly for desktop browsers.\n * @type {String}\n * @default 'none'\n */\n userSelect: \"none\",\n\n /**\n * @private\n * Disable the Windows Phone grippers when pressing an element.\n * @type {String}\n * @default 'none'\n */\n touchSelect: \"none\",\n\n /**\n * @private\n * Disables the default callout shown when you touch and hold a touch target.\n * On iOS, when you touch and hold a touch target such as a link, Safari displays\n * a callout containing information about the link. This property allows you to disable that callout.\n * @type {String}\n * @default 'none'\n */\n touchCallout: \"none\",\n\n /**\n * @private\n * Specifies whether zooming is enabled. Used by IE10>\n * @type {String}\n * @default 'none'\n */\n contentZooming: \"none\",\n\n /**\n * @private\n * Specifies that an entire element should be draggable instead of its contents. Mainly for desktop browsers.\n * @type {String}\n * @default 'none'\n */\n userDrag: \"none\",\n\n /**\n * @private\n * Overrides the highlight color shown when the user taps a link or a JavaScript\n * clickable element in iOS. This property obeys the alpha value, if specified.\n * @type {String}\n * @default 'rgba(0,0,0,0)'\n */\n tapHighlightColor: \"rgba(0,0,0,0)\"\n }\n};\n/**\n * @private\n * Default recognizer setup when calling `Hammer()`\n * When creating a new Manager these will be skipped.\n * This is separated with other defaults because of tree-shaking.\n * @type {Array}\n */\n\nvar preset = [[RotateRecognizer, {\n enable: false\n}], [PinchRecognizer, {\n enable: false\n}, ['rotate']], [SwipeRecognizer, {\n direction: DIRECTION_HORIZONTAL\n}], [PanRecognizer, {\n direction: DIRECTION_HORIZONTAL\n}, ['swipe']], [TapRecognizer], [TapRecognizer, {\n event: 'doubletap',\n taps: 2\n}, ['tap']], [PressRecognizer]];\n\nvar STOP = 1;\nvar FORCED_STOP = 2;\n/**\n * @private\n * add/remove the css properties as defined in manager.options.cssProps\n * @param {Manager} manager\n * @param {Boolean} add\n */\n\nfunction toggleCssProps(manager, add) {\n var element = manager.element;\n\n if (!element.style) {\n return;\n }\n\n var prop;\n each(manager.options.cssProps, function (value, name) {\n prop = prefixed(element.style, name);\n\n if (add) {\n manager.oldCssProps[prop] = element.style[prop];\n element.style[prop] = value;\n } else {\n element.style[prop] = manager.oldCssProps[prop] || \"\";\n }\n });\n\n if (!add) {\n manager.oldCssProps = {};\n }\n}\n/**\n * @private\n * trigger dom event\n * @param {String} event\n * @param {Object} data\n */\n\n\nfunction triggerDomEvent(event, data) {\n var gestureEvent = document.createEvent(\"Event\");\n gestureEvent.initEvent(event, true, true);\n gestureEvent.gesture = data;\n data.target.dispatchEvent(gestureEvent);\n}\n/**\n* @private\n * Manager\n * @param {HTMLElement} element\n * @param {Object} [options]\n * @constructor\n */\n\n\nvar Manager =\n/*#__PURE__*/\nfunction () {\n function Manager(element, options) {\n var _this = this;\n\n this.options = assign$1({}, defaults, options || {});\n this.options.inputTarget = this.options.inputTarget || element;\n this.handlers = {};\n this.session = {};\n this.recognizers = [];\n this.oldCssProps = {};\n this.element = element;\n this.input = createInputInstance(this);\n this.touchAction = new TouchAction(this, this.options.touchAction);\n toggleCssProps(this, true);\n each(this.options.recognizers, function (item) {\n var recognizer = _this.add(new item[0](item[1]));\n\n item[2] && recognizer.recognizeWith(item[2]);\n item[3] && recognizer.requireFailure(item[3]);\n }, this);\n }\n /**\n * @private\n * set options\n * @param {Object} options\n * @returns {Manager}\n */\n\n\n var _proto = Manager.prototype;\n\n _proto.set = function set(options) {\n assign$1(this.options, options); // Options that need a little more setup\n\n if (options.touchAction) {\n this.touchAction.update();\n }\n\n if (options.inputTarget) {\n // Clean up existing event listeners and reinitialize\n this.input.destroy();\n this.input.target = options.inputTarget;\n this.input.init();\n }\n\n return this;\n };\n /**\n * @private\n * stop recognizing for this session.\n * This session will be discarded, when a new [input]start event is fired.\n * When forced, the recognizer cycle is stopped immediately.\n * @param {Boolean} [force]\n */\n\n\n _proto.stop = function stop(force) {\n this.session.stopped = force ? FORCED_STOP : STOP;\n };\n /**\n * @private\n * run the recognizers!\n * called by the inputHandler function on every movement of the pointers (touches)\n * it walks through all the recognizers and tries to detect the gesture that is being made\n * @param {Object} inputData\n */\n\n\n _proto.recognize = function recognize(inputData) {\n var session = this.session;\n\n if (session.stopped) {\n return;\n } // run the touch-action polyfill\n\n\n this.touchAction.preventDefaults(inputData);\n var recognizer;\n var recognizers = this.recognizers; // this holds the recognizer that is being recognized.\n // so the recognizer's state needs to be BEGAN, CHANGED, ENDED or RECOGNIZED\n // if no recognizer is detecting a thing, it is set to `null`\n\n var curRecognizer = session.curRecognizer; // reset when the last recognizer is recognized\n // or when we're in a new session\n\n if (!curRecognizer || curRecognizer && curRecognizer.state & STATE_RECOGNIZED) {\n session.curRecognizer = null;\n curRecognizer = null;\n }\n\n var i = 0;\n\n while (i < recognizers.length) {\n recognizer = recognizers[i]; // find out if we are allowed try to recognize the input for this one.\n // 1. allow if the session is NOT forced stopped (see the .stop() method)\n // 2. allow if we still haven't recognized a gesture in this session, or the this recognizer is the one\n // that is being recognized.\n // 3. allow if the recognizer is allowed to run simultaneous with the current recognized recognizer.\n // this can be setup with the `recognizeWith()` method on the recognizer.\n\n if (session.stopped !== FORCED_STOP && ( // 1\n !curRecognizer || recognizer === curRecognizer || // 2\n recognizer.canRecognizeWith(curRecognizer))) {\n // 3\n recognizer.recognize(inputData);\n } else {\n recognizer.reset();\n } // if the recognizer has been recognizing the input as a valid gesture, we want to store this one as the\n // current active recognizer. but only if we don't already have an active recognizer\n\n\n if (!curRecognizer && recognizer.state & (STATE_BEGAN | STATE_CHANGED | STATE_ENDED)) {\n session.curRecognizer = recognizer;\n curRecognizer = recognizer;\n }\n\n i++;\n }\n };\n /**\n * @private\n * get a recognizer by its event name.\n * @param {Recognizer|String} recognizer\n * @returns {Recognizer|Null}\n */\n\n\n _proto.get = function get(recognizer) {\n if (recognizer instanceof Recognizer) {\n return recognizer;\n }\n\n var recognizers = this.recognizers;\n\n for (var i = 0; i < recognizers.length; i++) {\n if (recognizers[i].options.event === recognizer) {\n return recognizers[i];\n }\n }\n\n return null;\n };\n /**\n * @private add a recognizer to the manager\n * existing recognizers with the same event name will be removed\n * @param {Recognizer} recognizer\n * @returns {Recognizer|Manager}\n */\n\n\n _proto.add = function add(recognizer) {\n if (invokeArrayArg(recognizer, \"add\", this)) {\n return this;\n } // remove existing\n\n\n var existing = this.get(recognizer.options.event);\n\n if (existing) {\n this.remove(existing);\n }\n\n this.recognizers.push(recognizer);\n recognizer.manager = this;\n this.touchAction.update();\n return recognizer;\n };\n /**\n * @private\n * remove a recognizer by name or instance\n * @param {Recognizer|String} recognizer\n * @returns {Manager}\n */\n\n\n _proto.remove = function remove(recognizer) {\n if (invokeArrayArg(recognizer, \"remove\", this)) {\n return this;\n }\n\n var targetRecognizer = this.get(recognizer); // let's make sure this recognizer exists\n\n if (recognizer) {\n var recognizers = this.recognizers;\n var index = inArray(recognizers, targetRecognizer);\n\n if (index !== -1) {\n recognizers.splice(index, 1);\n this.touchAction.update();\n }\n }\n\n return this;\n };\n /**\n * @private\n * bind event\n * @param {String} events\n * @param {Function} handler\n * @returns {EventEmitter} this\n */\n\n\n _proto.on = function on(events, handler) {\n if (events === undefined || handler === undefined) {\n return this;\n }\n\n var handlers = this.handlers;\n each(splitStr(events), function (event) {\n handlers[event] = handlers[event] || [];\n handlers[event].push(handler);\n });\n return this;\n };\n /**\n * @private unbind event, leave emit blank to remove all handlers\n * @param {String} events\n * @param {Function} [handler]\n * @returns {EventEmitter} this\n */\n\n\n _proto.off = function off(events, handler) {\n if (events === undefined) {\n return this;\n }\n\n var handlers = this.handlers;\n each(splitStr(events), function (event) {\n if (!handler) {\n delete handlers[event];\n } else {\n handlers[event] && handlers[event].splice(inArray(handlers[event], handler), 1);\n }\n });\n return this;\n };\n /**\n * @private emit event to the listeners\n * @param {String} event\n * @param {Object} data\n */\n\n\n _proto.emit = function emit(event, data) {\n // we also want to trigger dom events\n if (this.options.domEvents) {\n triggerDomEvent(event, data);\n } // no handlers, so skip it all\n\n\n var handlers = this.handlers[event] && this.handlers[event].slice();\n\n if (!handlers || !handlers.length) {\n return;\n }\n\n data.type = event;\n\n data.preventDefault = function () {\n data.srcEvent.preventDefault();\n };\n\n var i = 0;\n\n while (i < handlers.length) {\n handlers[i](data);\n i++;\n }\n };\n /**\n * @private\n * destroy the manager and unbinds all events\n * it doesn't unbind dom events, that is the user own responsibility\n */\n\n\n _proto.destroy = function destroy() {\n this.element && toggleCssProps(this, false);\n this.handlers = {};\n this.session = {};\n this.input.destroy();\n this.element = null;\n };\n\n return Manager;\n}();\n\nvar SINGLE_TOUCH_INPUT_MAP = {\n touchstart: INPUT_START,\n touchmove: INPUT_MOVE,\n touchend: INPUT_END,\n touchcancel: INPUT_CANCEL\n};\nvar SINGLE_TOUCH_TARGET_EVENTS = 'touchstart';\nvar SINGLE_TOUCH_WINDOW_EVENTS = 'touchstart touchmove touchend touchcancel';\n/**\n * @private\n * Touch events input\n * @constructor\n * @extends Input\n */\n\nvar SingleTouchInput =\n/*#__PURE__*/\nfunction (_Input) {\n _inheritsLoose(SingleTouchInput, _Input);\n\n function SingleTouchInput() {\n var _this;\n\n var proto = SingleTouchInput.prototype;\n proto.evTarget = SINGLE_TOUCH_TARGET_EVENTS;\n proto.evWin = SINGLE_TOUCH_WINDOW_EVENTS;\n _this = _Input.apply(this, arguments) || this;\n _this.started = false;\n return _this;\n }\n\n var _proto = SingleTouchInput.prototype;\n\n _proto.handler = function handler(ev) {\n var type = SINGLE_TOUCH_INPUT_MAP[ev.type]; // should we handle the touch events?\n\n if (type === INPUT_START) {\n this.started = true;\n }\n\n if (!this.started) {\n return;\n }\n\n var touches = normalizeSingleTouches.call(this, ev, type); // when done, reset the started state\n\n if (type & (INPUT_END | INPUT_CANCEL) && touches[0].length - touches[1].length === 0) {\n this.started = false;\n }\n\n this.callback(this.manager, type, {\n pointers: touches[0],\n changedPointers: touches[1],\n pointerType: INPUT_TYPE_TOUCH,\n srcEvent: ev\n });\n };\n\n return SingleTouchInput;\n}(Input);\n\nfunction normalizeSingleTouches(ev, type) {\n var all = toArray(ev.touches);\n var changed = toArray(ev.changedTouches);\n\n if (type & (INPUT_END | INPUT_CANCEL)) {\n all = uniqueArray(all.concat(changed), 'identifier', true);\n }\n\n return [all, changed];\n}\n\n/**\n * @private\n * wrap a method with a deprecation warning and stack trace\n * @param {Function} method\n * @param {String} name\n * @param {String} message\n * @returns {Function} A new function wrapping the supplied method.\n */\nfunction deprecate(method, name, message) {\n var deprecationMessage = \"DEPRECATED METHOD: \" + name + \"\\n\" + message + \" AT \\n\";\n return function () {\n var e = new Error('get-stack-trace');\n var stack = e && e.stack ? e.stack.replace(/^[^\\(]+?[\\n$]/gm, '').replace(/^\\s+at\\s+/gm, '').replace(/^Object.\\s*\\(/gm, '{anonymous}()@') : 'Unknown Stack Trace';\n var log = window.console && (window.console.warn || window.console.log);\n\n if (log) {\n log.call(window.console, deprecationMessage, stack);\n }\n\n return method.apply(this, arguments);\n };\n}\n\n/**\n * @private\n * extend object.\n * means that properties in dest will be overwritten by the ones in src.\n * @param {Object} dest\n * @param {Object} src\n * @param {Boolean} [merge=false]\n * @returns {Object} dest\n */\n\nvar extend = deprecate(function (dest, src, merge) {\n var keys = Object.keys(src);\n var i = 0;\n\n while (i < keys.length) {\n if (!merge || merge && dest[keys[i]] === undefined) {\n dest[keys[i]] = src[keys[i]];\n }\n\n i++;\n }\n\n return dest;\n}, 'extend', 'Use `assign`.');\n\n/**\n * @private\n * merge the values from src in the dest.\n * means that properties that exist in dest will not be overwritten by src\n * @param {Object} dest\n * @param {Object} src\n * @returns {Object} dest\n */\n\nvar merge = deprecate(function (dest, src) {\n return extend(dest, src, true);\n}, 'merge', 'Use `assign`.');\n\n/**\n * @private\n * simple class inheritance\n * @param {Function} child\n * @param {Function} base\n * @param {Object} [properties]\n */\n\nfunction inherit(child, base, properties) {\n var baseP = base.prototype;\n var childP;\n childP = child.prototype = Object.create(baseP);\n childP.constructor = child;\n childP._super = baseP;\n\n if (properties) {\n assign$1(childP, properties);\n }\n}\n\n/**\n * @private\n * simple function bind\n * @param {Function} fn\n * @param {Object} context\n * @returns {Function}\n */\nfunction bindFn(fn, context) {\n return function boundFn() {\n return fn.apply(context, arguments);\n };\n}\n\n/**\n * @private\n * Simple way to create a manager with a default set of recognizers.\n * @param {HTMLElement} element\n * @param {Object} [options]\n * @constructor\n */\n\nvar Hammer =\n/*#__PURE__*/\nfunction () {\n var Hammer =\n /**\n * @private\n * @const {string}\n */\n function Hammer(element, options) {\n if (options === void 0) {\n options = {};\n }\n\n return new Manager(element, _extends({\n recognizers: preset.concat()\n }, options));\n };\n\n Hammer.VERSION = \"2.0.17-rc\";\n Hammer.DIRECTION_ALL = DIRECTION_ALL;\n Hammer.DIRECTION_DOWN = DIRECTION_DOWN;\n Hammer.DIRECTION_LEFT = DIRECTION_LEFT;\n Hammer.DIRECTION_RIGHT = DIRECTION_RIGHT;\n Hammer.DIRECTION_UP = DIRECTION_UP;\n Hammer.DIRECTION_HORIZONTAL = DIRECTION_HORIZONTAL;\n Hammer.DIRECTION_VERTICAL = DIRECTION_VERTICAL;\n Hammer.DIRECTION_NONE = DIRECTION_NONE;\n Hammer.DIRECTION_DOWN = DIRECTION_DOWN;\n Hammer.INPUT_START = INPUT_START;\n Hammer.INPUT_MOVE = INPUT_MOVE;\n Hammer.INPUT_END = INPUT_END;\n Hammer.INPUT_CANCEL = INPUT_CANCEL;\n Hammer.STATE_POSSIBLE = STATE_POSSIBLE;\n Hammer.STATE_BEGAN = STATE_BEGAN;\n Hammer.STATE_CHANGED = STATE_CHANGED;\n Hammer.STATE_ENDED = STATE_ENDED;\n Hammer.STATE_RECOGNIZED = STATE_RECOGNIZED;\n Hammer.STATE_CANCELLED = STATE_CANCELLED;\n Hammer.STATE_FAILED = STATE_FAILED;\n Hammer.Manager = Manager;\n Hammer.Input = Input;\n Hammer.TouchAction = TouchAction;\n Hammer.TouchInput = TouchInput;\n Hammer.MouseInput = MouseInput;\n Hammer.PointerEventInput = PointerEventInput;\n Hammer.TouchMouseInput = TouchMouseInput;\n Hammer.SingleTouchInput = SingleTouchInput;\n Hammer.Recognizer = Recognizer;\n Hammer.AttrRecognizer = AttrRecognizer;\n Hammer.Tap = TapRecognizer;\n Hammer.Pan = PanRecognizer;\n Hammer.Swipe = SwipeRecognizer;\n Hammer.Pinch = PinchRecognizer;\n Hammer.Rotate = RotateRecognizer;\n Hammer.Press = PressRecognizer;\n Hammer.on = addEventListeners;\n Hammer.off = removeEventListeners;\n Hammer.each = each;\n Hammer.merge = merge;\n Hammer.extend = extend;\n Hammer.bindFn = bindFn;\n Hammer.assign = assign$1;\n Hammer.inherit = inherit;\n Hammer.bindFn = bindFn;\n Hammer.prefixed = prefixed;\n Hammer.toArray = toArray;\n Hammer.inArray = inArray;\n Hammer.uniqueArray = uniqueArray;\n Hammer.splitStr = splitStr;\n Hammer.boolOrFn = boolOrFn;\n Hammer.hasParent = hasParent;\n Hammer.addEventListeners = addEventListeners;\n Hammer.removeEventListeners = removeEventListeners;\n Hammer.defaults = assign$1({}, defaults, {\n preset: preset\n });\n return Hammer;\n}();\n\n// style loader but by script tag, not by the loader.\n\nvar defaults$1 = Hammer.defaults;\n\nexport default Hammer;\nexport { INPUT_START, INPUT_MOVE, INPUT_END, INPUT_CANCEL, STATE_POSSIBLE, STATE_BEGAN, STATE_CHANGED, STATE_ENDED, STATE_RECOGNIZED, STATE_CANCELLED, STATE_FAILED, DIRECTION_NONE, DIRECTION_LEFT, DIRECTION_RIGHT, DIRECTION_UP, DIRECTION_DOWN, DIRECTION_HORIZONTAL, DIRECTION_VERTICAL, DIRECTION_ALL, Manager, Input, TouchAction, TouchInput, MouseInput, PointerEventInput, TouchMouseInput, SingleTouchInput, Recognizer, AttrRecognizer, TapRecognizer as Tap, PanRecognizer as Pan, SwipeRecognizer as Swipe, PinchRecognizer as Pinch, RotateRecognizer as Rotate, PressRecognizer as Press, addEventListeners as on, removeEventListeners as off, each, merge, extend, assign$1 as assign, inherit, bindFn, prefixed, toArray, inArray, uniqueArray, splitStr, boolOrFn, hasParent, addEventListeners, removeEventListeners, defaults$1 as defaults };\n//# sourceMappingURL=hammer.esm.js.map\n","/*\nCopyright (c) 2015 NAVER Corp.\nname: @egjs/agent\nlicense: MIT\nauthor: NAVER Corp.\nrepository: git+https://github.com/naver/agent.git\nversion: 2.3.0\n*/\nfunction some(arr, callback) {\n var length = arr.length;\n\n for (var i = 0; i < length; ++i) {\n if (callback(arr[i], i)) {\n return true;\n }\n }\n\n return false;\n}\nfunction find(arr, callback) {\n var length = arr.length;\n\n for (var i = 0; i < length; ++i) {\n if (callback(arr[i], i)) {\n return arr[i];\n }\n }\n\n return null;\n}\nfunction getUserAgent(agent) {\n var userAgent = agent;\n\n if (typeof userAgent === \"undefined\") {\n if (typeof navigator === \"undefined\" || !navigator) {\n return \"\";\n }\n\n userAgent = navigator.userAgent || \"\";\n }\n\n return userAgent.toLowerCase();\n}\nfunction execRegExp(pattern, text) {\n try {\n return new RegExp(pattern, \"g\").exec(text);\n } catch (e) {\n return null;\n }\n}\nfunction hasUserAgentData() {\n if (typeof navigator === \"undefined\" || !navigator || !navigator.userAgentData) {\n return false;\n }\n\n var userAgentData = navigator.userAgentData;\n var brands = userAgentData.brands || userAgentData.uaList;\n return !!(brands && brands.length);\n}\nfunction findVersion(versionTest, userAgent) {\n var result = execRegExp(\"(\" + versionTest + \")((?:\\\\/|\\\\s|:)([0-9|\\\\.|_]+))\", userAgent);\n return result ? result[3] : \"\";\n}\nfunction convertVersion(text) {\n return text.replace(/_/g, \".\");\n}\nfunction findPreset(presets, userAgent) {\n var userPreset = null;\n var version = \"-1\";\n some(presets, function (preset) {\n var result = execRegExp(\"(\" + preset.test + \")((?:\\\\/|\\\\s|:)([0-9|\\\\.|_]+))?\", userAgent);\n\n if (!result || preset.brand) {\n return false;\n }\n\n userPreset = preset;\n version = result[3] || \"-1\";\n\n if (preset.versionAlias) {\n version = preset.versionAlias;\n } else if (preset.versionTest) {\n version = findVersion(preset.versionTest.toLowerCase(), userAgent) || version;\n }\n\n version = convertVersion(version);\n return true;\n });\n return {\n preset: userPreset,\n version: version\n };\n}\nfunction findPresetBrand(presets, brands) {\n var brandInfo = {\n brand: \"\",\n version: \"-1\"\n };\n some(presets, function (preset) {\n var result = findBrand(brands, preset);\n\n if (!result) {\n return false;\n }\n\n brandInfo.brand = preset.id;\n brandInfo.version = preset.versionAlias || result.version;\n return brandInfo.version !== \"-1\";\n });\n return brandInfo;\n}\nfunction findBrand(brands, preset) {\n return find(brands, function (_a) {\n var brand = _a.brand;\n return execRegExp(\"\" + preset.test, brand.toLowerCase());\n });\n}\n\nvar BROWSER_PRESETS = [{\n test: \"phantomjs\",\n id: \"phantomjs\"\n}, {\n test: \"whale\",\n id: \"whale\"\n}, {\n test: \"edgios|edge|edg\",\n id: \"edge\"\n}, {\n test: \"msie|trident|windows phone\",\n id: \"ie\",\n versionTest: \"iemobile|msie|rv\"\n}, {\n test: \"miuibrowser\",\n id: \"miui browser\"\n}, {\n test: \"samsungbrowser\",\n id: \"samsung internet\"\n}, {\n test: \"samsung\",\n id: \"samsung internet\",\n versionTest: \"version\"\n}, {\n test: \"chrome|crios\",\n id: \"chrome\"\n}, {\n test: \"firefox|fxios\",\n id: \"firefox\"\n}, {\n test: \"android\",\n id: \"android browser\",\n versionTest: \"version\"\n}, {\n test: \"safari|iphone|ipad|ipod\",\n id: \"safari\",\n versionTest: \"version\"\n}]; // chromium's engine(blink) is based on applewebkit 537.36.\n\nvar CHROMIUM_PRESETS = [{\n test: \"(?=.*applewebkit/(53[0-7]|5[0-2]|[0-4]))(?=.*\\\\schrome)\",\n id: \"chrome\",\n versionTest: \"chrome\"\n}, {\n test: \"chromium\",\n id: \"chrome\"\n}, {\n test: \"whale\",\n id: \"chrome\",\n versionAlias: \"-1\",\n brand: true\n}];\nvar WEBKIT_PRESETS = [{\n test: \"applewebkit\",\n id: \"webkit\",\n versionTest: \"applewebkit|safari\"\n}];\nvar WEBVIEW_PRESETS = [{\n test: \"(?=(iphone|ipad))(?!(.*version))\",\n id: \"webview\"\n}, {\n test: \"(?=(android|iphone|ipad))(?=.*(naver|daum|; wv))\",\n id: \"webview\"\n}, {\n // test webview\n test: \"webview\",\n id: \"webview\"\n}];\nvar OS_PRESETS = [{\n test: \"windows phone\",\n id: \"windows phone\"\n}, {\n test: \"windows 2000\",\n id: \"window\",\n versionAlias: \"5.0\"\n}, {\n test: \"windows nt\",\n id: \"window\"\n}, {\n test: \"iphone|ipad|ipod\",\n id: \"ios\",\n versionTest: \"iphone os|cpu os\"\n}, {\n test: \"mac os x\",\n id: \"mac\"\n}, {\n test: \"android\",\n id: \"android\"\n}, {\n test: \"tizen\",\n id: \"tizen\"\n}, {\n test: \"webos|web0s\",\n id: \"webos\"\n}];\n\nfunction parseUserAgentData(osData) {\n var userAgentData = navigator.userAgentData;\n var brands = (userAgentData.uaList || userAgentData.brands).slice();\n var isMobile = userAgentData.mobile || false;\n var firstBrand = brands[0];\n var browser = {\n name: firstBrand.brand,\n version: firstBrand.version,\n majorVersion: -1,\n webkit: false,\n webkitVersion: \"-1\",\n chromium: false,\n chromiumVersion: \"-1\",\n webview: !!findPresetBrand(WEBVIEW_PRESETS, brands).brand\n };\n var os = {\n name: \"unknown\",\n version: \"-1\",\n majorVersion: -1\n };\n browser.webkit = !browser.chromium && some(WEBKIT_PRESETS, function (preset) {\n return findBrand(brands, preset);\n });\n var chromiumBrand = findPresetBrand(CHROMIUM_PRESETS, brands);\n browser.chromium = !!chromiumBrand.brand;\n browser.chromiumVersion = chromiumBrand.version;\n\n if (!browser.chromium) {\n var webkitBrand = findPresetBrand(WEBKIT_PRESETS, brands);\n browser.webkit = !!webkitBrand.brand;\n browser.webkitVersion = webkitBrand.version;\n }\n\n if (osData) {\n var platform_1 = osData.platform.toLowerCase();\n var result = find(OS_PRESETS, function (preset) {\n return new RegExp(\"\" + preset.test, \"g\").exec(platform_1);\n });\n os.name = result ? result.id : platform_1;\n os.version = osData.platformVersion;\n }\n\n var browserBrand = findPresetBrand(BROWSER_PRESETS, brands);\n\n if (browserBrand.brand) {\n browser.name = browserBrand.brand;\n browser.version = osData ? osData.uaFullVersion : browserBrand.version;\n }\n\n if (navigator.platform === \"Linux armv8l\") {\n os.name = \"android\";\n } else if (browser.webkit) {\n os.name = isMobile ? \"ios\" : \"mac\";\n }\n\n if (os.name === \"ios\" && browser.webview) {\n browser.version = \"-1\";\n }\n\n os.version = convertVersion(os.version);\n browser.version = convertVersion(browser.version);\n os.majorVersion = parseInt(os.version, 10);\n browser.majorVersion = parseInt(browser.version, 10);\n return {\n browser: browser,\n os: os,\n isMobile: isMobile,\n isHints: true\n };\n}\n\nfunction parseUserAgent(userAgent) {\n var nextAgent = getUserAgent(userAgent);\n var isMobile = !!/mobi/g.exec(nextAgent);\n var browser = {\n name: \"unknown\",\n version: \"-1\",\n majorVersion: -1,\n webview: !!findPreset(WEBVIEW_PRESETS, nextAgent).preset,\n chromium: false,\n chromiumVersion: \"-1\",\n webkit: false,\n webkitVersion: \"-1\"\n };\n var os = {\n name: \"unknown\",\n version: \"-1\",\n majorVersion: -1\n };\n\n var _a = findPreset(BROWSER_PRESETS, nextAgent),\n browserPreset = _a.preset,\n browserVersion = _a.version;\n\n var _b = findPreset(OS_PRESETS, nextAgent),\n osPreset = _b.preset,\n osVersion = _b.version;\n\n var chromiumPreset = findPreset(CHROMIUM_PRESETS, nextAgent);\n browser.chromium = !!chromiumPreset.preset;\n browser.chromiumVersion = chromiumPreset.version;\n\n if (!browser.chromium) {\n var webkitPreset = findPreset(WEBKIT_PRESETS, nextAgent);\n browser.webkit = !!webkitPreset.preset;\n browser.webkitVersion = webkitPreset.version;\n }\n\n if (osPreset) {\n os.name = osPreset.id;\n os.version = osVersion;\n os.majorVersion = parseInt(osVersion, 10);\n }\n\n if (browserPreset) {\n browser.name = browserPreset.id;\n browser.version = browserVersion;\n\n if (browser.webview && os.name === \"ios\" && browser.name !== \"safari\") {\n browser.webview = false;\n }\n }\n\n browser.majorVersion = parseInt(browser.version, 10);\n return {\n browser: browser,\n os: os,\n isMobile: isMobile,\n isHints: false\n };\n}\n\n/**\n * @namespace eg.agent\n */\n\n/**\n* Extracts accuate browser and operating system information from the user agent string or client hints.\n* @ko 유저 에이전트 문자열 또는 client hints에서 정확한 브라우저와 운영체제 정보를 추출한다.\n* @function eg.agent#getAccurateAgent\n* @param - Callback function to get the accuate agent 정확한 에이전트를 가져오기 위한 callback 함수\n* @return - get the accuate agent promise. If Promise are not supported, null is returned. 정확한 에이전트 promise를 가져온다. Promise를 지원 하지 않는 경우, null을 반환한다. \n* @example\nimport { getAccurateAgent } from \"@egjs/agent\";\n// eg.agent.getAccurateAgent()\ngetAccurateAgent().then(agent => {\n const { os, browser, isMobile } = agent;\n});\ngetAccurateAgent(agent => {\n const { os, browser, isMobile } = agent;\n});\n*/\n\nfunction getAccurateAgent(callback) {\n if (hasUserAgentData()) {\n return navigator.userAgentData.getHighEntropyValues([\"architecture\", \"model\", \"platform\", \"platformVersion\", \"uaFullVersion\"]).then(function (info) {\n var agentInfo = parseUserAgentData(info);\n callback && callback(agentInfo);\n return agentInfo;\n });\n }\n\n callback && callback(agent());\n\n if (typeof Promise === \"undefined\" || !Promise) {\n return null;\n }\n\n return Promise.resolve(agent());\n}\n/**\n * Extracts browser and operating system information from the user agent string.\n * @ko 유저 에이전트 문자열에서 브라우저와 운영체제 정보를 추출한다.\n * @function eg.agent#agent\n * @param - user agent string to parse 파싱할 유저에이전트 문자열\n * @return - agent Info 에이전트 정보 \n * @example\nimport agent from \"@egjs/agent\";\n// eg.agent();\nconst { os, browser, isMobile } = agent();\n */\n\nfunction agent(userAgent) {\n if (typeof userAgent === \"undefined\" && hasUserAgentData()) {\n return parseUserAgentData();\n } else {\n return parseUserAgent(userAgent);\n }\n}\n\nexport default agent;\nexport { getAccurateAgent };\n//# sourceMappingURL=agent.esm.js.map\n","/*\nCopyright (c) NAVER Corp.\nname: @egjs/component\nlicense: MIT\nauthor: NAVER Corp.\nrepository: https://github.com/naver/egjs-component\nversion: 2.2.2\n*/\n/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\nfunction __values(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator,\n m = s && o[s],\n i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return {\n value: o && o[i++],\n done: !o\n };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\n\n/*\n * Copyright (c) 2015 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\n\nfunction isUndefined(value) {\n return typeof value === \"undefined\";\n}\n/**\n * A class used to manage events in a component\n * @ko 컴포넌트의 이벤트을 관리할 수 있게 하는 클래스\n * @alias eg.Component\n */\n\n\nvar Component =\n/*#__PURE__*/\nfunction () {\n /**\n * @support {\"ie\": \"7+\", \"ch\" : \"latest\", \"ff\" : \"latest\", \"sf\" : \"latest\", \"edge\" : \"latest\", \"ios\" : \"7+\", \"an\" : \"2.1+ (except 3.x)\"}\n */\n function Component() {\n /**\n * @deprecated\n * @private\n */\n this.options = {};\n this._eventHandler = {};\n }\n /**\n * Triggers a custom event.\n * @ko 커스텀 이벤트를 발생시킨다\n * @param {string} eventName The name of the custom event to be triggered 발생할 커스텀 이벤트의 이름\n * @param {object} customEvent Event data to be sent when triggering a custom event 커스텀 이벤트가 발생할 때 전달할 데이터\n * @param {any[]} restParam Additional parameters when triggering a custom event 커스텀 이벤트가 발생할 때 필요시 추가적으로 전달할 데이터\n * @return Indicates whether the event has occurred. If the stop() method is called by a custom event handler, it will return false and prevent the event from occurring. Ref 이벤트 발생 여부. 커스텀 이벤트 핸들러에서 stop() 메서드를 호출하면 'false'를 반환하고 이벤트 발생을 중단한다. 참고\n * @example\n * ```\n * class Some extends eg.Component {\n * some(){\n * if(this.trigger(\"beforeHi\")){ // When event call to stop return false.\n * this.trigger(\"hi\");// fire hi event.\n * }\n * }\n * }\n *\n * const some = new Some();\n * some.on(\"beforeHi\", (e) => {\n * if(condition){\n * e.stop(); // When event call to stop, `hi` event not call.\n * }\n * });\n * some.on(\"hi\", (e) => {\n * // `currentTarget` is component instance.\n * console.log(some === e.currentTarget); // true\n * });\n * // If you want to more know event design. You can see article.\n * // https://github.com/naver/egjs-component/wiki/How-to-make-Component-event-design%3F\n * ```\n */\n\n\n var __proto = Component.prototype;\n\n __proto.trigger = function (eventName) {\n var _this = this;\n\n var params = [];\n\n for (var _i = 1; _i < arguments.length; _i++) {\n params[_i - 1] = arguments[_i];\n }\n\n var handlerList = this._eventHandler[eventName] || [];\n var hasHandlerList = handlerList.length > 0;\n\n if (!hasHandlerList) {\n return true;\n }\n\n var customEvent = params[0] || {};\n var restParams = params.slice(1); // If detach method call in handler in first time then handler list calls.\n\n handlerList = handlerList.concat();\n var isCanceled = false; // This should be done like this to pass previous tests\n\n customEvent.eventType = eventName;\n\n customEvent.stop = function () {\n isCanceled = true;\n };\n\n customEvent.currentTarget = this;\n var arg = [customEvent];\n\n if (restParams.length >= 1) {\n arg = arg.concat(restParams);\n }\n\n handlerList.forEach(function (handler) {\n handler.apply(_this, arg);\n });\n return !isCanceled;\n };\n /**\n * Executed event just one time.\n * @ko 이벤트가 한번만 실행된다.\n * @param {string} eventName The name of the event to be attached 등록할 이벤트의 이름\n * @param {function} handlerToAttach The handler function of the event to be attached 등록할 이벤트의 핸들러 함수\n * @return An instance of a component itself컴포넌트 자신의 인스턴스\n * @example\n * ```\n * class Some extends eg.Component {\n * hi() {\n * alert(\"hi\");\n * }\n * thing() {\n * this.once(\"hi\", this.hi);\n * }\n *\n * var some = new Some();\n * some.thing();\n * some.trigger(\"hi\");\n * // fire alert(\"hi\");\n * some.trigger(\"hi\");\n * // Nothing happens\n * ```\n */\n\n\n __proto.once = function (eventName, handlerToAttach) {\n var _this = this;\n\n if (typeof eventName === \"object\" && isUndefined(handlerToAttach)) {\n var eventHash = eventName;\n\n for (var key in eventHash) {\n this.once(key, eventHash[key]);\n }\n\n return this;\n } else if (typeof eventName === \"string\" && typeof handlerToAttach === \"function\") {\n var listener_1 = function () {\n var args = [];\n\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n\n handlerToAttach.apply(_this, args);\n\n _this.off(eventName, listener_1);\n };\n\n this.on(eventName, listener_1);\n }\n\n return this;\n };\n /**\n * Checks whether an event has been attached to a component.\n * @ko 컴포넌트에 이벤트가 등록됐는지 확인한다.\n * @param {string} eventName The name of the event to be attached 등록 여부를 확인할 이벤트의 이름\n * @return {boolean} Indicates whether the event is attached. 이벤트 등록 여부\n * @example\n * ```\n * class Some extends eg.Component {\n * some() {\n * this.hasOn(\"hi\");// check hi event.\n * }\n * }\n * ```\n */\n\n\n __proto.hasOn = function (eventName) {\n return !!this._eventHandler[eventName];\n };\n /**\n * Attaches an event to a component.\n * @ko 컴포넌트에 이벤트를 등록한다.\n * @param {string} eventName The name of the event to be attached 등록할 이벤트의 이름\n * @param {function} handlerToAttach The handler function of the event to be attached 등록할 이벤트의 핸들러 함수\n * @return An instance of a component itself컴포넌트 자신의 인스턴스\n * @example\n * ```\n * class Some extends eg.Component {\n * hi() {\n * console.log(\"hi\");\n * }\n * some() {\n * this.on(\"hi\",this.hi); //attach event\n * }\n * }\n * ```\n */\n\n\n __proto.on = function (eventName, handlerToAttach) {\n if (typeof eventName === \"object\" && isUndefined(handlerToAttach)) {\n var eventHash = eventName;\n\n for (var name in eventHash) {\n this.on(name, eventHash[name]);\n }\n\n return this;\n } else if (typeof eventName === \"string\" && typeof handlerToAttach === \"function\") {\n var handlerList = this._eventHandler[eventName];\n\n if (isUndefined(handlerList)) {\n this._eventHandler[eventName] = [];\n handlerList = this._eventHandler[eventName];\n }\n\n handlerList.push(handlerToAttach);\n }\n\n return this;\n };\n /**\n * Detaches an event from the component.\n * @ko 컴포넌트에 등록된 이벤트를 해제한다\n * @param {string} eventName The name of the event to be detached 해제할 이벤트의 이름\n * @param {function} handlerToDetach The handler function of the event to be detached 해제할 이벤트의 핸들러 함수\n * @return An instance of a component itself 컴포넌트 자신의 인스턴스\n * @example\n * ```\n * class Some extends eg.Component {\n * hi() {\n * console.log(\"hi\");\n * }\n * some() {\n * this.off(\"hi\",this.hi); //detach event\n * }\n * }\n * ```\n */\n\n\n __proto.off = function (eventName, handlerToDetach) {\n var e_1, _a; // Detach all event handlers.\n\n\n if (isUndefined(eventName)) {\n this._eventHandler = {};\n return this;\n } // Detach all handlers for eventname or detach event handlers by object.\n\n\n if (isUndefined(handlerToDetach)) {\n if (typeof eventName === \"string\") {\n delete this._eventHandler[eventName];\n return this;\n } else {\n var eventHash = eventName;\n\n for (var name in eventHash) {\n this.off(name, eventHash[name]);\n }\n\n return this;\n }\n } // Detach single event handler\n\n\n var handlerList = this._eventHandler[eventName];\n\n if (handlerList) {\n var idx = 0;\n\n try {\n for (var handlerList_1 = __values(handlerList), handlerList_1_1 = handlerList_1.next(); !handlerList_1_1.done; handlerList_1_1 = handlerList_1.next()) {\n var handlerFunction = handlerList_1_1.value;\n\n if (handlerFunction === handlerToDetach) {\n handlerList.splice(idx, 1);\n break;\n }\n\n idx++;\n }\n } catch (e_1_1) {\n e_1 = {\n error: e_1_1\n };\n } finally {\n try {\n if (handlerList_1_1 && !handlerList_1_1.done && (_a = handlerList_1.return)) _a.call(handlerList_1);\n } finally {\n if (e_1) throw e_1.error;\n }\n }\n }\n\n return this;\n };\n /**\n * Version info string\n * @ko 버전정보 문자열\n * @name VERSION\n * @static\n * @example\n * eg.Component.VERSION; // ex) 2.0.0\n * @memberof eg.Component\n */\n\n\n Component.VERSION = \"2.2.2\";\n return Component;\n}();\n\nexport default Component;\n//# sourceMappingURL=component.esm.js.map\n","/*\nCopyright (c) 2015 NAVER Corp.\nname: @egjs/axes\nlicense: MIT\nauthor: NAVER Corp.\nrepository: https://github.com/naver/egjs-axes\nversion: 2.8.0\n*/\nimport { DIRECTION_NONE, DIRECTION_LEFT, DIRECTION_RIGHT, DIRECTION_UP, DIRECTION_DOWN, DIRECTION_HORIZONTAL, DIRECTION_VERTICAL, DIRECTION_ALL, Manager, PointerEventInput, TouchMouseInput, TouchInput, MouseInput, Pan, Pinch } from '@egjs/hammerjs';\nimport getAgent from '@egjs/agent';\nimport Component from '@egjs/component';\n\n/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\n\n/* global Reflect, Promise */\nvar extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf || {\n __proto__: []\n } instanceof Array && function (d, b) {\n d.__proto__ = b;\n } || function (d, b) {\n for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n };\n\n return extendStatics(d, b);\n};\n\nfunction __extends(d, b) {\n extendStatics(d, b);\n\n function __() {\n this.constructor = d;\n }\n\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\nvar __assign = function () {\n __assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n\n return t;\n };\n\n return __assign.apply(this, arguments);\n};\n\nfunction getInsidePosition(destPos, range, circular, bounce) {\n var toDestPos = destPos;\n var targetRange = [circular[0] ? range[0] : bounce ? range[0] - bounce[0] : range[0], circular[1] ? range[1] : bounce ? range[1] + bounce[1] : range[1]];\n toDestPos = Math.max(targetRange[0], toDestPos);\n toDestPos = Math.min(targetRange[1], toDestPos);\n return toDestPos;\n} // determine outside\n\nfunction isOutside(pos, range) {\n return pos < range[0] || pos > range[1];\n}\nfunction getDuration(distance, deceleration) {\n var duration = Math.sqrt(distance / deceleration * 2); // when duration is under 100, then value is zero\n\n return duration < 100 ? 0 : duration;\n}\nfunction isCircularable(destPos, range, circular) {\n return circular[1] && destPos > range[1] || circular[0] && destPos < range[0];\n}\nfunction getCirculatedPos(pos, range, circular) {\n var toPos = pos;\n var min = range[0];\n var max = range[1];\n var length = max - min;\n\n if (circular[1] && pos > max) {\n // right\n toPos = (toPos - max) % length + min;\n }\n\n if (circular[0] && pos < min) {\n // left\n toPos = (toPos - min) % length + max;\n }\n\n return toPos;\n}\n\n/* eslint-disable no-new-func, no-nested-ternary */\nvar win;\n\nif (typeof window === \"undefined\") {\n // window is undefined in node.js\n win = {\n navigator: {\n userAgent: \"\"\n }\n };\n} else {\n win = window;\n}\n\nfunction toArray(nodes) {\n // const el = Array.prototype.slice.call(nodes);\n // for IE8\n var el = [];\n\n for (var i = 0, len = nodes.length; i < len; i++) {\n el.push(nodes[i]);\n }\n\n return el;\n}\nfunction $(param, multi) {\n if (multi === void 0) {\n multi = false;\n }\n\n var el;\n\n if (typeof param === \"string\") {\n // String (HTML, Selector)\n // check if string is HTML tag format\n var match = param.match(/^<([a-z]+)\\s*([^>]*)>/); // creating element\n\n if (match) {\n // HTML\n var dummy = document.createElement(\"div\");\n dummy.innerHTML = param;\n el = toArray(dummy.childNodes);\n } else {\n // Selector\n el = toArray(document.querySelectorAll(param));\n }\n\n if (!multi) {\n el = el.length >= 1 ? el[0] : undefined;\n }\n } else if (param === win) {\n // window\n el = param;\n } else if (param.nodeName && (param.nodeType === 1 || param.nodeType === 9)) {\n // HTMLElement, Document\n el = param;\n } else if (\"jQuery\" in win && param instanceof jQuery || param.constructor.prototype.jquery) {\n // jQuery\n el = multi ? param.toArray() : param.get(0);\n } else if (Array.isArray(param)) {\n el = param.map(function (v) {\n return $(v);\n });\n\n if (!multi) {\n el = el.length >= 1 ? el[0] : undefined;\n }\n }\n\n return el;\n}\nvar raf = win.requestAnimationFrame || win.webkitRequestAnimationFrame;\nvar caf = win.cancelAnimationFrame || win.webkitCancelAnimationFrame;\n\nif (raf && !caf) {\n var keyInfo_1 = {};\n var oldraf_1 = raf;\n\n raf = function (callback) {\n function wrapCallback(timestamp) {\n if (keyInfo_1[key]) {\n callback(timestamp);\n }\n }\n\n var key = oldraf_1(wrapCallback);\n keyInfo_1[key] = true;\n return key;\n };\n\n caf = function (key) {\n delete keyInfo_1[key];\n };\n} else if (!(raf && caf)) {\n raf = function (callback) {\n return win.setTimeout(function () {\n callback(win.performance && win.performance.now && win.performance.now() || new Date().getTime());\n }, 16);\n };\n\n caf = win.clearTimeout;\n}\n/**\n * A polyfill for the window.requestAnimationFrame() method.\n * @see https://developer.mozilla.org/en-US/docs/Web/API/window/requestAnimationFrame\n * @private\n */\n\n\nfunction requestAnimationFrame(fp) {\n return raf(fp);\n}\n/**\n* A polyfill for the window.cancelAnimationFrame() method. It cancels an animation executed through a call to the requestAnimationFrame() method.\n* @param {Number} key −\tThe ID value returned through a call to the requestAnimationFrame() method. requestAnimationFrame() 메서드가 반환한 아이디 값\n* @see https://developer.mozilla.org/en-US/docs/Web/API/Window/cancelAnimationFrame\n* @private\n*/\n\nfunction cancelAnimationFrame(key) {\n caf(key);\n}\nfunction map(obj, callback) {\n var tranformed = {};\n\n for (var k in obj) {\n k && (tranformed[k] = callback(obj[k], k));\n }\n\n return tranformed;\n}\nfunction filter(obj, callback) {\n var filtered = {};\n\n for (var k in obj) {\n k && callback(obj[k], k) && (filtered[k] = obj[k]);\n }\n\n return filtered;\n}\nfunction every(obj, callback) {\n for (var k in obj) {\n if (k && !callback(obj[k], k)) {\n return false;\n }\n }\n\n return true;\n}\nfunction equal(target, base) {\n return every(target, function (v, k) {\n return v === base[k];\n });\n}\nvar roundNumFunc = {};\nfunction roundNumber(num, roundUnit) {\n // Cache for performance\n if (!roundNumFunc[roundUnit]) {\n roundNumFunc[roundUnit] = getRoundFunc(roundUnit);\n }\n\n return roundNumFunc[roundUnit](num);\n}\nfunction roundNumbers(num, roundUnit) {\n if (!num || !roundUnit) {\n return num;\n }\n\n var isNumber = typeof roundUnit === \"number\";\n return map(num, function (value, key) {\n return roundNumber(value, isNumber ? roundUnit : roundUnit[key]);\n });\n}\nfunction getDecimalPlace(val) {\n if (!isFinite(val)) {\n return 0;\n }\n\n var v = val + \"\";\n\n if (v.indexOf(\"e\") >= 0) {\n // Exponential Format\n // 1e-10, 1e-12\n var p = 0;\n var e = 1;\n\n while (Math.round(val * e) / e !== val) {\n e *= 10;\n p++;\n }\n\n return p;\n } // In general, following has performance benefit.\n // https://jsperf.com/precision-calculation\n\n\n return v.indexOf(\".\") >= 0 ? v.length - v.indexOf(\".\") - 1 : 0;\n}\nfunction inversePow(n) {\n // replace Math.pow(10, -n) to solve floating point issue.\n // eg. Math.pow(10, -4) => 0.00009999999999999999\n return 1 / Math.pow(10, n);\n}\nfunction getRoundFunc(v) {\n var p = v < 1 ? Math.pow(10, getDecimalPlace(v)) : 1;\n return function (n) {\n if (v === 0) {\n return 0;\n }\n\n return Math.round(Math.round(n / v) * v * p) / p;\n };\n}\n\nfunction minMax(value, min, max) {\n return Math.max(Math.min(value, max), min);\n}\n\nvar AnimationManager =\n/*#__PURE__*/\nfunction () {\n function AnimationManager(_a) {\n var options = _a.options,\n itm = _a.itm,\n em = _a.em,\n axm = _a.axm;\n this.options = options;\n this.itm = itm;\n this.em = em;\n this.axm = axm;\n this.animationEnd = this.animationEnd.bind(this);\n }\n\n var __proto = AnimationManager.prototype;\n\n __proto.getDuration = function (depaPos, destPos, wishDuration) {\n var _this = this;\n\n var duration;\n\n if (typeof wishDuration !== \"undefined\") {\n duration = wishDuration;\n } else {\n var durations_1 = map(destPos, function (v, k) {\n return getDuration(Math.abs(v - depaPos[k]), _this.options.deceleration);\n });\n duration = Object.keys(durations_1).reduce(function (max, v) {\n return Math.max(max, durations_1[v]);\n }, -Infinity);\n }\n\n return minMax(duration, this.options.minimumDuration, this.options.maximumDuration);\n };\n\n __proto.createAnimationParam = function (pos, duration, option) {\n var depaPos = this.axm.get();\n var destPos = pos;\n var inputEvent = option && option.event || null;\n return {\n depaPos: depaPos,\n destPos: destPos,\n duration: minMax(duration, this.options.minimumDuration, this.options.maximumDuration),\n delta: this.axm.getDelta(depaPos, destPos),\n inputEvent: inputEvent,\n input: option && option.input || null,\n isTrusted: !!inputEvent,\n done: this.animationEnd\n };\n };\n\n __proto.grab = function (axes, option) {\n if (this._animateParam && axes.length) {\n var orgPos_1 = this.axm.get(axes);\n var pos = this.axm.map(orgPos_1, function (v, opt) {\n return getCirculatedPos(v, opt.range, opt.circular);\n });\n\n if (!every(pos, function (v, k) {\n return orgPos_1[k] === v;\n })) {\n this.em.triggerChange(pos, false, orgPos_1, option, !!option);\n }\n\n this._animateParam = null;\n this._raf && cancelAnimationFrame(this._raf);\n this._raf = null;\n this.em.triggerAnimationEnd(!!(option && option.event));\n }\n };\n\n __proto.getEventInfo = function () {\n if (this._animateParam && this._animateParam.input && this._animateParam.inputEvent) {\n return {\n input: this._animateParam.input,\n event: this._animateParam.inputEvent\n };\n } else {\n return null;\n }\n };\n\n __proto.restore = function (option) {\n var pos = this.axm.get();\n var destPos = this.axm.map(pos, function (v, opt) {\n return Math.min(opt.range[1], Math.max(opt.range[0], v));\n });\n this.animateTo(destPos, this.getDuration(pos, destPos), option);\n };\n\n __proto.animationEnd = function () {\n var beforeParam = this.getEventInfo();\n this._animateParam = null; // for Circular\n\n var circularTargets = this.axm.filter(this.axm.get(), function (v, opt) {\n return isCircularable(v, opt.range, opt.circular);\n });\n Object.keys(circularTargets).length > 0 && this.setTo(this.axm.map(circularTargets, function (v, opt) {\n return getCirculatedPos(v, opt.range, opt.circular);\n }));\n this.itm.setInterrupt(false);\n this.em.triggerAnimationEnd(!!beforeParam);\n\n if (this.axm.isOutside()) {\n this.restore(beforeParam);\n } else {\n this.finish(!!beforeParam);\n }\n };\n\n __proto.finish = function (isTrusted) {\n this._animateParam = null;\n this.itm.setInterrupt(false);\n this.em.triggerFinish(isTrusted);\n };\n\n __proto.animateLoop = function (param, complete) {\n if (param.duration) {\n this._animateParam = __assign({}, param);\n var info_1 = this._animateParam;\n var self_1 = this;\n var destPos_1 = info_1.destPos;\n var prevPos_1 = info_1.depaPos;\n var prevEasingPer_1 = 0;\n var directions_1 = map(prevPos_1, function (value, key) {\n return value <= destPos_1[key] ? 1 : -1;\n });\n var originalIntendedPos_1 = map(destPos_1, function (v) {\n return v;\n });\n var prevTime_1 = new Date().getTime();\n info_1.startTime = prevTime_1;\n\n (function loop() {\n self_1._raf = null;\n var currentTime = new Date().getTime();\n var ratio = (currentTime - info_1.startTime) / param.duration;\n var easingPer = self_1.easing(ratio);\n var toPos = self_1.axm.map(prevPos_1, function (pos, options, key) {\n var nextPos = ratio >= 1 ? destPos_1[key] : pos + info_1.delta[key] * (easingPer - prevEasingPer_1); // Subtract distance from distance already moved.\n // Recalculate the remaining distance.\n // Fix the bouncing phenomenon by changing the range.\n\n var circulatedPos = getCirculatedPos(nextPos, options.range, options.circular);\n\n if (nextPos !== circulatedPos) {\n // circular\n var rangeOffset = directions_1[key] * (options.range[1] - options.range[0]);\n destPos_1[key] -= rangeOffset;\n prevPos_1[key] -= rangeOffset;\n }\n\n return circulatedPos;\n });\n var isCanceled = !self_1.em.triggerChange(toPos, false, prevPos_1);\n prevPos_1 = toPos;\n prevTime_1 = currentTime;\n prevEasingPer_1 = easingPer;\n\n if (easingPer >= 1) {\n destPos_1 = self_1.getFinalPos(destPos_1, originalIntendedPos_1);\n\n if (!equal(destPos_1, self_1.axm.get(Object.keys(destPos_1)))) {\n self_1.em.triggerChange(destPos_1, true, prevPos_1);\n }\n\n complete();\n return;\n } else if (isCanceled) {\n self_1.finish(false);\n } else {\n // animationEnd\n self_1._raf = requestAnimationFrame(loop);\n }\n })();\n } else {\n this.em.triggerChange(param.destPos, true);\n complete();\n }\n };\n /**\n * Get estimated final value.\n *\n * If destPos is within the 'error range' of the original intended position, the initial intended position is returned.\n * - eg. original intended pos: 100, destPos: 100.0000000004 ==> return 100;\n * If dest Pos is outside the 'range of error' compared to the originally intended pos, it is returned rounded based on the originally intended pos.\n * - eg. original intended pos: 100.123 destPos: 50.12345 => return 50.123\n *\n * @param originalIntendedPos\n * @param destPos\n */\n\n\n __proto.getFinalPos = function (destPos, originalIntendedPos) {\n var _this = this; // compare destPos and originalIntendedPos\n\n\n var ERROR_LIMIT = 0.000001;\n var finalPos = map(destPos, function (value, key) {\n if (value >= originalIntendedPos[key] - ERROR_LIMIT && value <= originalIntendedPos[key] + ERROR_LIMIT) {\n // In error range, return original intended\n return originalIntendedPos[key];\n } else {\n // Out of error range, return rounded pos.\n var roundUnit = _this.getRoundUnit(value, key);\n\n var result = roundNumber(value, roundUnit);\n return result;\n }\n });\n return finalPos;\n };\n\n __proto.getRoundUnit = function (val, key) {\n var roundUnit = this.options.round; // manual mode\n\n var minRoundUnit = null; // auto mode\n // auto mode\n\n if (!roundUnit) {\n // Get minimum round unit\n var options = this.axm.getAxisOptions(key);\n minRoundUnit = inversePow(Math.max(getDecimalPlace(options.range[0]), getDecimalPlace(options.range[1]), getDecimalPlace(val)));\n }\n\n return minRoundUnit || roundUnit;\n };\n\n __proto.getUserControll = function (param) {\n var userWish = param.setTo();\n userWish.destPos = this.axm.get(userWish.destPos);\n userWish.duration = minMax(userWish.duration, this.options.minimumDuration, this.options.maximumDuration);\n return userWish;\n };\n\n __proto.animateTo = function (destPos, duration, option) {\n var _this = this;\n\n var param = this.createAnimationParam(destPos, duration, option);\n\n var depaPos = __assign({}, param.depaPos);\n\n var retTrigger = this.em.triggerAnimationStart(param); // to control\n\n var userWish = this.getUserControll(param); // You can't stop the 'animationStart' event when 'circular' is true.\n\n if (!retTrigger && this.axm.every(userWish.destPos, function (v, opt) {\n return isCircularable(v, opt.range, opt.circular);\n })) {\n console.warn(\"You can't stop the 'animation' event when 'circular' is true.\");\n }\n\n if (retTrigger && !equal(userWish.destPos, depaPos)) {\n var inputEvent = option && option.event || null;\n this.animateLoop({\n depaPos: depaPos,\n destPos: userWish.destPos,\n duration: userWish.duration,\n delta: this.axm.getDelta(depaPos, userWish.destPos),\n isTrusted: !!inputEvent,\n inputEvent: inputEvent,\n input: option && option.input || null\n }, function () {\n return _this.animationEnd();\n });\n }\n };\n\n __proto.easing = function (p) {\n return p > 1 ? 1 : this.options.easing(p);\n };\n\n __proto.setTo = function (pos, duration) {\n if (duration === void 0) {\n duration = 0;\n }\n\n var axes = Object.keys(pos);\n this.grab(axes);\n var orgPos = this.axm.get(axes);\n\n if (equal(pos, orgPos)) {\n return this;\n }\n\n this.itm.setInterrupt(true);\n var movedPos = filter(pos, function (v, k) {\n return orgPos[k] !== v;\n });\n\n if (!Object.keys(movedPos).length) {\n return this;\n }\n\n movedPos = this.axm.map(movedPos, function (v, opt) {\n var range = opt.range,\n circular = opt.circular;\n\n if (circular && (circular[0] || circular[1])) {\n return v;\n } else {\n return getInsidePosition(v, range, circular);\n }\n });\n\n if (equal(movedPos, orgPos)) {\n return this;\n }\n\n if (duration > 0) {\n this.animateTo(movedPos, duration);\n } else {\n this.em.triggerChange(movedPos);\n this.finish(false);\n }\n\n return this;\n };\n\n __proto.setBy = function (pos, duration) {\n if (duration === void 0) {\n duration = 0;\n }\n\n return this.setTo(map(this.axm.get(Object.keys(pos)), function (v, k) {\n return v + pos[k];\n }), duration);\n };\n\n return AnimationManager;\n}();\n\nvar EventManager =\n/*#__PURE__*/\nfunction () {\n function EventManager(axes) {\n this.axes = axes;\n }\n /**\n * This event is fired when a user holds an element on the screen of the device.\n * @ko 사용자가 기기의 화면에 손을 대고 있을 때 발생하는 이벤트\n * @name eg.Axes#hold\n * @event\n * @type {object}\n * @property {Object.} pos coordinate 좌표 정보\n * @property {Object} input The instance of inputType where the event occurred이벤트가 발생한 inputType 인스턴스\n * @property {Object} inputEvent The event object received from inputType inputType으로 부터 받은 이벤트 객체\n * @property {Boolean} isTrusted Returns true if an event was generated by the user action, or false if it was caused by a script or API call 사용자의 액션에 의해 이벤트가 발생하였으면 true, 스크립트나 API호출에 의해 발생하였을 경우에는 false를 반환한다.\n *\n * @example\n * const axes = new eg.Axes({\n * \"x\": {\n * range: [0, 100]\n * },\n * \"zoom\": {\n * range: [50, 30]\n * }\n * }).on(\"hold\", function(event) {\n * // event.pos\n * // event.input\n * // event.inputEvent\n * // isTrusted\n * });\n */\n\n\n var __proto = EventManager.prototype;\n\n __proto.triggerHold = function (pos, option) {\n var roundPos = this.getRoundPos(pos).roundPos;\n this.axes.trigger(\"hold\", {\n pos: roundPos,\n input: option.input || null,\n inputEvent: option.event || null,\n isTrusted: true\n });\n };\n /**\n * Specifies the coordinates to move after the 'change' event. It works when the holding value of the change event is true.\n * @ko 'change' 이벤트 이후 이동할 좌표를 지정한다. change이벤트의 holding 값이 true일 경우에 동작한다\n * @name set\n * @function\n * @param {Object.} pos The coordinate to move to 이동할 좌표\n * @example\n * const axes = new eg.Axes({\n * \"x\": {\n * range: [0, 100]\n * },\n * \"zoom\": {\n * range: [50, 30]\n * }\n * }).on(\"change\", function(event) {\n * event.holding && event.set({x: 10});\n * });\n */\n\n /** Specifies the animation coordinates to move after the 'release' or 'animationStart' events.\n * @ko 'release' 또는 'animationStart' 이벤트 이후 이동할 좌표를 지정한다.\n * @name setTo\n * @function\n * @param {Object.} pos The coordinate to move to 이동할 좌표\n * @param {Number} [duration] Duration of the animation (unit: ms) 애니메이션 진행 시간(단위: ms)\n * @example\n * const axes = new eg.Axes({\n * \"x\": {\n * range: [0, 100]\n * },\n * \"zoom\": {\n * range: [50, 30]\n * }\n * }).on(\"animationStart\", function(event) {\n * event.setTo({x: 10}, 2000);\n * });\n */\n\n /**\n * This event is fired when a user release an element on the screen of the device.\n * @ko 사용자가 기기의 화면에서 손을 뗐을 때 발생하는 이벤트\n * @name eg.Axes#release\n * @event\n * @type {object}\n * @property {Object.} depaPos The coordinates when releasing an element손을 뗐을 때의 좌표 \n * @property {Object.} destPos The coordinates to move to after releasing an element손을 뗀 뒤에 이동할 좌표\n * @property {Object.} delta The movement variation of coordinate 좌표의 변화량\n * @property {Object} inputEvent The event object received from inputType inputType으로 부터 받은 이벤트 객체\n * @property {Object} input The instance of inputType where the event occurred이벤트가 발생한 inputType 인스턴스\n * @property {setTo} setTo Specifies the animation coordinates to move after the event 이벤트 이후 이동할 애니메이션 좌표를 지정한다\n * @property {Boolean} isTrusted Returns true if an event was generated by the user action, or false if it was caused by a script or API call 사용자의 액션에 의해 이벤트가 발생하였으면 true, 스크립트나 API호출에 의해 발생하였을 경우에는 false를 반환한다.\n *\n * @example\n * const axes = new eg.Axes({\n * \"x\": {\n * range: [0, 100]\n * },\n * \"zoom\": {\n * range: [50, 30]\n * }\n * }).on(\"release\", function(event) {\n * // event.depaPos\n * // event.destPos\n * // event.delta\n * // event.input\n * // event.inputEvent\n * // event.setTo\n * // event.isTrusted\n *\n * // if you want to change the animation coordinates to move after the 'release' event.\n * event.setTo({x: 10}, 2000);\n * });\n */\n\n\n __proto.triggerRelease = function (param) {\n var _a = this.getRoundPos(param.destPos, param.depaPos),\n roundPos = _a.roundPos,\n roundDepa = _a.roundDepa;\n\n param.destPos = roundPos;\n param.depaPos = roundDepa;\n param.setTo = this.createUserControll(param.destPos, param.duration);\n this.axes.trigger(\"release\", param);\n };\n /**\n * This event is fired when coordinate changes.\n * @ko 좌표가 변경됐을 때 발생하는 이벤트\n * @name eg.Axes#change\n * @event\n * @type {object}\n * @property {Object.} pos The coordinate 좌표\n * @property {Object.} delta The movement variation of coordinate 좌표의 변화량\n * @property {Boolean} holding Indicates whether a user holds an element on the screen of the device.사용자가 기기의 화면을 누르고 있는지 여부\n * @property {Object} input The instance of inputType where the event occurred. If the value is changed by animation, it returns 'null'.이벤트가 발생한 inputType 인스턴스. 애니메이션에 의해 값이 변경될 경우에는 'null'을 반환한다.\n * @property {Object} inputEvent The event object received from inputType. If the value is changed by animation, it returns 'null'.inputType으로 부터 받은 이벤트 객체. 애니메이션에 의해 값이 변경될 경우에는 'null'을 반환한다.\n * @property {set} set Specifies the coordinates to move after the event. It works when the holding value is true 이벤트 이후 이동할 좌표를 지정한다. holding 값이 true일 경우에 동작한다.\n * @property {Boolean} isTrusted Returns true if an event was generated by the user action, or false if it was caused by a script or API call 사용자의 액션에 의해 이벤트가 발생하였으면 true, 스크립트나 API호출에 의해 발생하였을 경우에는 false를 반환한다.\n *\n * @example\n * const axes = new eg.Axes({\n * \"x\": {\n * range: [0, 100]\n * },\n * \"zoom\": {\n * range: [50, 30]\n * }\n * }).on(\"change\", function(event) {\n * // event.pos\n * // event.delta\n * // event.input\n * // event.inputEvent\n * // event.holding\n * // event.set\n * // event.isTrusted\n *\n * // if you want to change the coordinates to move after the 'change' event.\n * // it works when the holding value of the change event is true.\n * event.holding && event.set({x: 10});\n * });\n */\n\n\n __proto.triggerChange = function (pos, isAccurate, depaPos, option, holding) {\n if (holding === void 0) {\n holding = false;\n }\n\n var am = this.am;\n var axm = am.axm;\n var eventInfo = am.getEventInfo();\n\n var _a = this.getRoundPos(pos, depaPos),\n roundPos = _a.roundPos,\n roundDepa = _a.roundDepa;\n\n var moveTo = axm.moveTo(roundPos, roundDepa);\n var inputEvent = option && option.event || eventInfo && eventInfo.event || null;\n var param = {\n pos: moveTo.pos,\n delta: moveTo.delta,\n holding: holding,\n inputEvent: inputEvent,\n isTrusted: !!inputEvent,\n input: option && option.input || eventInfo && eventInfo.input || null,\n set: inputEvent ? this.createUserControll(moveTo.pos) : function () {}\n };\n var result = this.axes.trigger(\"change\", param);\n inputEvent && axm.set(param.set()[\"destPos\"]);\n return result;\n };\n /**\n * This event is fired when animation starts.\n * @ko 에니메이션이 시작할 때 발생한다.\n * @name eg.Axes#animationStart\n * @event\n * @type {object}\n * @property {Object.} depaPos The coordinates when animation starts애니메이션이 시작 되었을 때의 좌표 \n * @property {Object.} destPos The coordinates to move to. If you change this value, you can run the animation이동할 좌표. 이값을 변경하여 애니메이션을 동작시킬수 있다\n * @property {Object.} delta The movement variation of coordinate 좌표의 변화량\n * @property {Number} duration Duration of the animation (unit: ms). If you change this value, you can control the animation duration time.애니메이션 진행 시간(단위: ms). 이값을 변경하여 애니메이션의 이동시간을 조절할 수 있다.\n * @property {Object} input The instance of inputType where the event occurred. If the value is changed by animation, it returns 'null'.이벤트가 발생한 inputType 인스턴스. 애니메이션에 의해 값이 변경될 경우에는 'null'을 반환한다.\n * @property {Object} inputEvent The event object received from inputType inputType으로 부터 받은 이벤트 객체\n * @property {setTo} setTo Specifies the animation coordinates to move after the event 이벤트 이후 이동할 애니메이션 좌표를 지정한다\n * @property {Boolean} isTrusted Returns true if an event was generated by the user action, or false if it was caused by a script or API call 사용자의 액션에 의해 이벤트가 발생하였으면 true, 스크립트나 API호출에 의해 발생하였을 경우에는 false를 반환한다.\n *\n * @example\n * const axes = new eg.Axes({\n * \"x\": {\n * range: [0, 100]\n * },\n * \"zoom\": {\n * range: [50, 30]\n * }\n * }).on(\"release\", function(event) {\n * // event.depaPos\n * // event.destPos\n * // event.delta\n * // event.input\n * // event.inputEvent\n * // event.setTo\n * // event.isTrusted\n *\n * // if you want to change the animation coordinates to move after the 'animationStart' event.\n * event.setTo({x: 10}, 2000);\n * });\n */\n\n\n __proto.triggerAnimationStart = function (param) {\n var _a = this.getRoundPos(param.destPos, param.depaPos),\n roundPos = _a.roundPos,\n roundDepa = _a.roundDepa;\n\n param.destPos = roundPos;\n param.depaPos = roundDepa;\n param.setTo = this.createUserControll(param.destPos, param.duration);\n return this.axes.trigger(\"animationStart\", param);\n };\n /**\n * This event is fired when animation ends.\n * @ko 에니메이션이 끝났을 때 발생한다.\n * @name eg.Axes#animationEnd\n * @event\n * @type {object}\n * @property {Boolean} isTrusted Returns true if an event was generated by the user action, or false if it was caused by a script or API call 사용자의 액션에 의해 이벤트가 발생하였으면 true, 스크립트나 API호출에 의해 발생하였을 경우에는 false를 반환한다.\n *\n * @example\n * const axes = new eg.Axes({\n * \"x\": {\n * range: [0, 100]\n * },\n * \"zoom\": {\n * range: [50, 30]\n * }\n * }).on(\"animationEnd\", function(event) {\n * // event.isTrusted\n * });\n */\n\n\n __proto.triggerAnimationEnd = function (isTrusted) {\n if (isTrusted === void 0) {\n isTrusted = false;\n }\n\n this.axes.trigger(\"animationEnd\", {\n isTrusted: isTrusted\n });\n };\n /**\n * This event is fired when all actions have been completed.\n * @ko 에니메이션이 끝났을 때 발생한다.\n * @name eg.Axes#finish\n * @event\n * @type {object}\n * @property {Boolean} isTrusted Returns true if an event was generated by the user action, or false if it was caused by a script or API call 사용자의 액션에 의해 이벤트가 발생하였으면 true, 스크립트나 API호출에 의해 발생하였을 경우에는 false를 반환한다.\n *\n * @example\n * const axes = new eg.Axes({\n * \"x\": {\n * range: [0, 100]\n * },\n * \"zoom\": {\n * range: [50, 30]\n * }\n * }).on(\"finish\", function(event) {\n * // event.isTrusted\n * });\n */\n\n\n __proto.triggerFinish = function (isTrusted) {\n if (isTrusted === void 0) {\n isTrusted = false;\n }\n\n this.axes.trigger(\"finish\", {\n isTrusted: isTrusted\n });\n };\n\n __proto.createUserControll = function (pos, duration) {\n if (duration === void 0) {\n duration = 0;\n } // to controll\n\n\n var userControl = {\n destPos: __assign({}, pos),\n duration: duration\n };\n return function (toPos, userDuration) {\n toPos && (userControl.destPos = __assign({}, toPos));\n userDuration !== undefined && (userControl.duration = userDuration);\n return userControl;\n };\n };\n\n __proto.setAnimationManager = function (am) {\n this.am = am;\n };\n\n __proto.destroy = function () {\n this.axes.off();\n };\n\n __proto.getRoundPos = function (pos, depaPos) {\n // round value if round exist\n var roundUnit = this.axes.options.round; // if (round == null) {\n // \treturn {pos, depaPos}; // undefined, undefined\n // }\n\n return {\n roundPos: roundNumbers(pos, roundUnit),\n roundDepa: roundNumbers(depaPos, roundUnit)\n };\n };\n\n return EventManager;\n}();\n\nvar InterruptManager =\n/*#__PURE__*/\nfunction () {\n function InterruptManager(options) {\n this.options = options;\n this._prevented = false; // check whether the animation event was prevented\n }\n\n var __proto = InterruptManager.prototype;\n\n __proto.isInterrupting = function () {\n // when interruptable is 'true', return value is always 'true'.\n return this.options.interruptable || this._prevented;\n };\n\n __proto.isInterrupted = function () {\n return !this.options.interruptable && this._prevented;\n };\n\n __proto.setInterrupt = function (prevented) {\n !this.options.interruptable && (this._prevented = prevented);\n };\n\n return InterruptManager;\n}();\n\nvar AxisManager =\n/*#__PURE__*/\nfunction () {\n function AxisManager(axis, options) {\n var _this = this;\n\n this.axis = axis;\n this.options = options;\n\n this._complementOptions();\n\n this._pos = Object.keys(this.axis).reduce(function (acc, v) {\n acc[v] = _this.axis[v].range[0];\n return acc;\n }, {});\n }\n /**\n * set up 'css' expression\n * @private\n */\n\n\n var __proto = AxisManager.prototype;\n\n __proto._complementOptions = function () {\n var _this = this;\n\n Object.keys(this.axis).forEach(function (axis) {\n _this.axis[axis] = __assign({\n range: [0, 100],\n bounce: [0, 0],\n circular: [false, false]\n }, _this.axis[axis]);\n [\"bounce\", \"circular\"].forEach(function (v) {\n var axisOption = _this.axis;\n var key = axisOption[axis][v];\n\n if (/string|number|boolean/.test(typeof key)) {\n axisOption[axis][v] = [key, key];\n }\n });\n });\n };\n\n __proto.getDelta = function (depaPos, destPos) {\n var fullDepaPos = this.get(depaPos);\n return map(this.get(destPos), function (v, k) {\n return v - fullDepaPos[k];\n });\n };\n\n __proto.get = function (axes) {\n var _this = this;\n\n if (axes && Array.isArray(axes)) {\n return axes.reduce(function (acc, v) {\n if (v && v in _this._pos) {\n acc[v] = _this._pos[v];\n }\n\n return acc;\n }, {});\n } else {\n return __assign(__assign({}, this._pos), axes || {});\n }\n };\n\n __proto.moveTo = function (pos, depaPos) {\n if (depaPos === void 0) {\n depaPos = this._pos;\n }\n\n var delta = map(this._pos, function (v, key) {\n return key in pos && key in depaPos ? pos[key] - depaPos[key] : 0;\n });\n this.set(this.map(pos, function (v, opt) {\n return opt ? getCirculatedPos(v, opt.range, opt.circular) : 0;\n }));\n return {\n pos: __assign({}, this._pos),\n delta: delta\n };\n };\n\n __proto.set = function (pos) {\n for (var k in pos) {\n if (k && k in this._pos) {\n this._pos[k] = pos[k];\n }\n }\n };\n\n __proto.every = function (pos, callback) {\n var axisOptions = this.axis;\n return every(pos, function (value, key) {\n return callback(value, axisOptions[key], key);\n });\n };\n\n __proto.filter = function (pos, callback) {\n var axisOptions = this.axis;\n return filter(pos, function (value, key) {\n return callback(value, axisOptions[key], key);\n });\n };\n\n __proto.map = function (pos, callback) {\n var axisOptions = this.axis;\n return map(pos, function (value, key) {\n return callback(value, axisOptions[key], key);\n });\n };\n\n __proto.isOutside = function (axes) {\n return !this.every(axes ? this.get(axes) : this._pos, function (v, opt) {\n return !isOutside(v, opt.range);\n });\n };\n\n __proto.getAxisOptions = function (key) {\n return this.axis[key];\n };\n\n return AxisManager;\n}();\n\nvar InputObserver =\n/*#__PURE__*/\nfunction () {\n function InputObserver(_a) {\n var options = _a.options,\n itm = _a.itm,\n em = _a.em,\n axm = _a.axm,\n am = _a.am;\n this.isOutside = false;\n this.moveDistance = null;\n this.isStopped = false;\n this.options = options;\n this.itm = itm;\n this.em = em;\n this.axm = axm;\n this.am = am;\n } // when move pointer is held in outside\n\n\n var __proto = InputObserver.prototype;\n\n __proto.atOutside = function (pos) {\n var _this = this;\n\n if (this.isOutside) {\n return this.axm.map(pos, function (v, opt) {\n var tn = opt.range[0] - opt.bounce[0];\n var tx = opt.range[1] + opt.bounce[1];\n return v > tx ? tx : v < tn ? tn : v;\n });\n } else {\n // when start pointer is held in inside\n // get a initialization slope value to prevent smooth animation.\n var initSlope_1 = this.am.easing(0.00001) / 0.00001;\n return this.axm.map(pos, function (v, opt) {\n var min = opt.range[0];\n var max = opt.range[1];\n var out = opt.bounce;\n var circular = opt.circular;\n\n if (circular && (circular[0] || circular[1])) {\n return v;\n } else if (v < min) {\n // left\n return min - _this.am.easing((min - v) / (out[0] * initSlope_1)) * out[0];\n } else if (v > max) {\n // right\n return max + _this.am.easing((v - max) / (out[1] * initSlope_1)) * out[1];\n }\n\n return v;\n });\n }\n };\n\n __proto.get = function (input) {\n return this.axm.get(input.axes);\n };\n\n __proto.hold = function (input, event) {\n if (this.itm.isInterrupted() || !input.axes.length) {\n return;\n }\n\n var changeOption = {\n input: input,\n event: event\n };\n this.isStopped = false;\n this.itm.setInterrupt(true);\n this.am.grab(input.axes, changeOption);\n !this.moveDistance && this.em.triggerHold(this.axm.get(), changeOption);\n this.isOutside = this.axm.isOutside(input.axes);\n this.moveDistance = this.axm.get(input.axes);\n };\n\n __proto.change = function (input, event, offset) {\n if (this.isStopped || !this.itm.isInterrupting() || this.axm.every(offset, function (v) {\n return v === 0;\n })) {\n return;\n }\n\n var depaPos = this.moveDistance || this.axm.get(input.axes);\n var destPos; // for outside logic\n\n destPos = map(depaPos, function (v, k) {\n return v + (offset[k] || 0);\n });\n this.moveDistance && (this.moveDistance = destPos); // from outside to inside\n\n if (this.isOutside && this.axm.every(depaPos, function (v, opt) {\n return !isOutside(v, opt.range);\n })) {\n this.isOutside = false;\n }\n\n depaPos = this.atOutside(depaPos);\n destPos = this.atOutside(destPos);\n var isCanceled = !this.em.triggerChange(destPos, false, depaPos, {\n input: input,\n event: event\n }, true);\n\n if (isCanceled) {\n this.isStopped = true;\n this.moveDistance = null;\n this.am.finish(false);\n }\n };\n\n __proto.release = function (input, event, offset, inputDuration) {\n if (this.isStopped || !this.itm.isInterrupting() || !this.moveDistance) {\n return;\n }\n\n var pos = this.axm.get(input.axes);\n var depaPos = this.axm.get();\n var destPos = this.axm.get(this.axm.map(offset, function (v, opt, k) {\n if (opt.circular && (opt.circular[0] || opt.circular[1])) {\n return pos[k] + v;\n } else {\n return getInsidePosition(pos[k] + v, opt.range, opt.circular, opt.bounce);\n }\n }));\n var duration = this.am.getDuration(destPos, pos, inputDuration);\n\n if (duration === 0) {\n destPos = __assign({}, depaPos);\n } // prepare params\n\n\n var param = {\n depaPos: depaPos,\n destPos: destPos,\n duration: duration,\n delta: this.axm.getDelta(depaPos, destPos),\n inputEvent: event,\n input: input,\n isTrusted: true\n };\n this.em.triggerRelease(param);\n this.moveDistance = null; // to contol\n\n var userWish = this.am.getUserControll(param);\n var isEqual = equal(userWish.destPos, depaPos);\n var changeOption = {\n input: input,\n event: event\n };\n\n if (isEqual || userWish.duration === 0) {\n !isEqual && this.em.triggerChange(userWish.destPos, false, depaPos, changeOption, true);\n this.itm.setInterrupt(false);\n\n if (this.axm.isOutside()) {\n this.am.restore(changeOption);\n } else {\n this.em.triggerFinish(true);\n }\n } else {\n this.am.animateTo(userWish.destPos, userWish.duration, changeOption);\n }\n };\n\n return InputObserver;\n}();\n\n// export const DIRECTION_NONE = 1;\nvar IOS_EDGE_THRESHOLD = 30;\nvar IS_IOS_SAFARI = \"ontouchstart\" in win && getAgent().browser.name === \"safari\";\nvar TRANSFORM = function () {\n if (typeof document === \"undefined\") {\n return \"\";\n }\n\n var bodyStyle = (document.head || document.getElementsByTagName(\"head\")[0]).style;\n var target = [\"transform\", \"webkitTransform\", \"msTransform\", \"mozTransform\"];\n\n for (var i = 0, len = target.length; i < len; i++) {\n if (target[i] in bodyStyle) {\n return target[i];\n }\n }\n\n return \"\";\n}();\n\n/**\n * @typedef {Object} AxisOption The Axis information. The key of the axis specifies the name to use as the logical virtual coordinate system.\n * @ko 축 정보. 축의 키는 논리적인 가상 좌표계로 사용할 이름을 지정한다.\n * @property {Number[]} [range] The coordinate of range 좌표 범위\n * @property {Number} [range.0=0] The coordinate of the minimum 최소 좌표\n * @property {Number} [range.1=0] The coordinate of the maximum 최대 좌표\n * @property {Number[]} [bounce] The size of bouncing area. The coordinates can exceed the coordinate area as much as the bouncing area based on user action. If the coordinates does not exceed the bouncing area when an element is dragged, the coordinates where bouncing effects are applied are retuned back into the coordinate area바운스 영역의 크기. 사용자의 동작에 따라 좌표가 좌표 영역을 넘어 바운스 영역의 크기만큼 더 이동할 수 있다. 사용자가 끌어다 놓는 동작을 했을 때 좌표가 바운스 영역에 있으면, 바운스 효과가 적용된 좌표가 다시 좌표 영역 안으로 들어온다\n * @property {Number} [bounce.0=0] The size of coordinate of the minimum area 최소 좌표 바운스 영역의 크기\n * @property {Number} [bounce.1=0] The size of coordinate of the maximum area 최대 좌표 바운스 영역의 크기\n * @property {Boolean[]} [circular] Indicates whether a circular element is available. If it is set to \"true\" and an element is dragged outside the coordinate area, the element will appear on the other side.순환 여부. 'true'로 설정한 방향의 좌표 영역 밖으로 엘리먼트가 이동하면 반대 방향에서 엘리먼트가 나타난다\n * @property {Boolean} [circular.0=false] Indicates whether to circulate to the coordinate of the minimum 최소 좌표 방향의 순환 여부\n * @property {Boolean} [circular.1=false] Indicates whether to circulate to the coordinate of the maximum 최대 좌표 방향의 순환 여부\n**/\n\n/**\n * @typedef {Object} AxesOption The option object of the eg.Axes module\n * @ko eg.Axes 모듈의 옵션 객체\n * @property {Function} [easing=easing.easeOutCubic] The easing function to apply to an animation 애니메이션에 적용할 easing 함수\n * @property {Number} [maximumDuration=Infinity] Maximum duration of the animation 가속도에 의해 애니메이션이 동작할 때의 최대 좌표 이동 시간\n * @property {Number} [minimumDuration=0] Minimum duration of the animation 가속도에 의해 애니메이션이 동작할 때의 최소 좌표 이동 시간\n * @property {Number} [deceleration=0.0006] Deceleration of the animation where acceleration is manually enabled by user. A higher value indicates shorter running time. 사용자의 동작으로 가속도가 적용된 애니메이션의 감속도. 값이 높을수록 애니메이션 실행 시간이 짧아진다\n * @property {Boolean} [interruptable=true] Indicates whether an animation is interruptible.
- true: It can be paused or stopped by user action or the API.
- false: It cannot be paused or stopped by user action or the API while it is running.진행 중인 애니메이션 중지 가능 여부.
- true: 사용자의 동작이나 API로 애니메이션을 중지할 수 있다.
- false: 애니메이션이 진행 중일 때는 사용자의 동작이나 API가 적용되지 않는다\n * @property {Number} [round = null] Rounding unit. For example, 0.1 rounds to 0.1 decimal point(6.1234 => 6.1), 5 rounds to 5 (93 => 95)
[Details](https://github.com/naver/egjs-axes/wiki/round-option)반올림 단위. 예를 들어 0.1 은 소숫점 0.1 까지 반올림(6.1234 => 6.1), 5 는 5 단위로 반올림(93 => 95).
[상세내용](https://github.com/naver/egjs-axes/wiki/round-option)\n**/\n\n/**\n * @class eg.Axes\n * @classdesc A module used to change the information of user action entered by various input devices such as touch screen or mouse into the logical virtual coordinates. You can easily create a UI that responds to user actions.\n * @ko 터치 입력 장치나 마우스와 같은 다양한 입력 장치를 통해 전달 받은 사용자의 동작을 논리적인 가상 좌표로 변경하는 모듈이다. 사용자 동작에 반응하는 UI를 손쉽게 만들수 있다.\n * @extends eg.Component\n *\n * @param {Object.} axis Axis information managed by eg.Axes. The key of the axis specifies the name to use as the logical virtual coordinate system. eg.Axes가 관리하는 축 정보. 축의 키는 논리적인 가상 좌표계로 사용할 이름을 지정한다.\n * @param {AxesOption} [options] The option object of the eg.Axes moduleeg.Axes 모듈의 옵션 객체\n * @param {Object.} [startPos] The coordinates to be moved when creating an instance. not triggering change event.인스턴스 생성시 이동할 좌표, change 이벤트는 발생하지 않음.\n *\n * @support {\"ie\": \"10+\", \"ch\" : \"latest\", \"ff\" : \"latest\", \"sf\" : \"latest\", \"edge\" : \"latest\", \"ios\" : \"7+\", \"an\" : \"2.3+ (except 3.x)\"}\n * @example\n *\n * // 1. Initialize eg.Axes\n * const axes = new eg.Axes({\n *\tsomething1: {\n *\t\trange: [0, 150],\n *\t\tbounce: 50\n *\t},\n *\tsomething2: {\n *\t\trange: [0, 200],\n *\t\tbounce: 100\n *\t},\n *\tsomethingN: {\n *\t\trange: [1, 10],\n *\t}\n * }, {\n * deceleration : 0.0024\n * });\n *\n * // 2. attach event handler\n * axes.on({\n *\t\"hold\" : function(evt) {\n *\t},\n *\t\"release\" : function(evt) {\n *\t},\n *\t\"animationStart\" : function(evt) {\n *\t},\n *\t\"animationEnd\" : function(evt) {\n *\t},\n *\t\"change\" : function(evt) {\n *\t}\n * });\n *\n * // 3. Initialize inputTypes\n * const panInputArea = new eg.Axes.PanInput(\"#area\", {\n *\tscale: [0.5, 1]\n * });\n * const panInputHmove = new eg.Axes.PanInput(\"#hmove\");\n * const panInputVmove = new eg.Axes.PanInput(\"#vmove\");\n * const pinchInputArea = new eg.Axes.PinchInput(\"#area\", {\n *\tscale: 1.5\n * });\n *\n * // 4. Connect eg.Axes and InputTypes\n * // [PanInput] When the mouse or touchscreen is down and moved.\n * // Connect the 'something2' axis to the mouse or touchscreen x position and\n * // connect the 'somethingN' axis to the mouse or touchscreen y position.\n * axes.connect([\"something2\", \"somethingN\"], panInputArea); // or axes.connect(\"something2 somethingN\", panInputArea);\n *\n * // Connect only one 'something1' axis to the mouse or touchscreen x position.\n * axes.connect([\"something1\"], panInputHmove); // or axes.connect(\"something1\", panInputHmove);\n *\n * // Connect only one 'something2' axis to the mouse or touchscreen y position.\n * axes.connect([\"\", \"something2\"], panInputVmove); // or axes.connect(\" something2\", panInputVmove);\n *\n * // [PinchInput] Connect 'something2' axis when two pointers are moving toward (zoom-in) or away from each other (zoom-out).\n * axes.connect(\"something2\", pinchInputArea);\n */\n\nvar Axes =\n/*#__PURE__*/\nfunction (_super) {\n __extends(Axes, _super);\n\n function Axes(axis, options, startPos) {\n if (axis === void 0) {\n axis = {};\n }\n\n if (options === void 0) {\n options = {};\n }\n\n var _this = _super.call(this) || this;\n\n _this.axis = axis;\n _this._inputs = [];\n _this.options = __assign({\n easing: function easeOutCubic(x) {\n return 1 - Math.pow(1 - x, 3);\n },\n interruptable: true,\n maximumDuration: Infinity,\n minimumDuration: 0,\n deceleration: 0.0006,\n round: null\n }, options);\n _this.itm = new InterruptManager(_this.options);\n _this.axm = new AxisManager(_this.axis, _this.options);\n _this.em = new EventManager(_this);\n _this.am = new AnimationManager(_this);\n _this.io = new InputObserver(_this);\n\n _this.em.setAnimationManager(_this.am);\n\n startPos && _this.em.triggerChange(startPos);\n return _this;\n }\n /**\n * Connect the axis of eg.Axes to the inputType.\n * @ko eg.Axes의 축과 inputType을 연결한다\n * @method eg.Axes#connect\n * @param {(String[]|String)} axes The name of the axis to associate with inputType inputType과 연결할 축의 이름\n * @param {Object} inputType The inputType instance to associate with the axis of eg.Axes eg.Axes의 축과 연결할 inputType 인스턴스\n * @return {eg.Axes} An instance of a module itself 모듈 자신의 인스턴스\n * @example\n * const axes = new eg.Axes({\n * \"x\": {\n * range: [0, 100]\n * },\n * \"xOther\": {\n * range: [-100, 100]\n * }\n * });\n *\n * axes.connect(\"x\", new eg.Axes.PanInput(\"#area1\"))\n * .connect(\"x xOther\", new eg.Axes.PanInput(\"#area2\"))\n * .connect(\" xOther\", new eg.Axes.PanInput(\"#area3\"))\n * .connect([\"x\"], new eg.Axes.PanInput(\"#area4\"))\n * .connect([\"xOther\", \"x\"], new eg.Axes.PanInput(\"#area5\"))\n * .connect([\"\", \"xOther\"], new eg.Axes.PanInput(\"#area6\"));\n */\n\n\n var __proto = Axes.prototype;\n\n __proto.connect = function (axes, inputType) {\n var mapped;\n\n if (typeof axes === \"string\") {\n mapped = axes.split(\" \");\n } else {\n mapped = axes.concat();\n } // check same instance\n\n\n if (~this._inputs.indexOf(inputType)) {\n this.disconnect(inputType);\n } // check same element in hammer type for share\n\n\n if (\"hammer\" in inputType) {\n var targets = this._inputs.filter(function (v) {\n return v.hammer && v.element === inputType.element;\n });\n\n if (targets.length) {\n inputType.hammer = targets[0].hammer;\n }\n }\n\n inputType.mapAxes(mapped);\n inputType.connect(this.io);\n\n this._inputs.push(inputType);\n\n return this;\n };\n /**\n * Disconnect the axis of eg.Axes from the inputType.\n * @ko eg.Axes의 축과 inputType의 연결을 끊는다.\n * @method eg.Axes#disconnect\n * @param {Object} [inputType] An inputType instance associated with the axis of eg.Axes eg.Axes의 축과 연결한 inputType 인스턴스\n * @return {eg.Axes} An instance of a module itself 모듈 자신의 인스턴스\n * @example\n * const axes = new eg.Axes({\n * \"x\": {\n * range: [0, 100]\n * },\n * \"xOther\": {\n * range: [-100, 100]\n * }\n * });\n *\n * const input1 = new eg.Axes.PanInput(\"#area1\");\n * const input2 = new eg.Axes.PanInput(\"#area2\");\n * const input3 = new eg.Axes.PanInput(\"#area3\");\n *\n * axes.connect(\"x\", input1);\n * .connect(\"x xOther\", input2)\n * .connect([\"xOther\", \"x\"], input3);\n *\n * axes.disconnect(input1); // disconnects input1\n * axes.disconnect(); // disconnects all of them\n */\n\n\n __proto.disconnect = function (inputType) {\n if (inputType) {\n var index = this._inputs.indexOf(inputType);\n\n if (index >= 0) {\n this._inputs[index].disconnect();\n\n this._inputs.splice(index, 1);\n }\n } else {\n this._inputs.forEach(function (v) {\n return v.disconnect();\n });\n\n this._inputs = [];\n }\n\n return this;\n };\n /**\n * Returns the current position of the coordinates.\n * @ko 좌표의 현재 위치를 반환한다\n * @method eg.Axes#get\n * @param {Object} [axes] The names of the axis 축 이름들\n * @return {Object.} Axis coordinate information 축 좌표 정보\n * @example\n * const axes = new eg.Axes({\n * \"x\": {\n * range: [0, 100]\n * },\n * \"xOther\": {\n * range: [-100, 100]\n * },\n * \t \"zoom\": {\n * range: [50, 30]\n * }\n * });\n *\n * axes.get(); // {\"x\": 0, \"xOther\": -100, \"zoom\": 50}\n * axes.get([\"x\", \"zoom\"]); // {\"x\": 0, \"zoom\": 50}\n */\n\n\n __proto.get = function (axes) {\n return this.axm.get(axes);\n };\n /**\n * Moves an axis to specific coordinates.\n * @ko 좌표를 이동한다.\n * @method eg.Axes#setTo\n * @param {Object.} pos The coordinate to move to 이동할 좌표\n * @param {Number} [duration=0] Duration of the animation (unit: ms) 애니메이션 진행 시간(단위: ms)\n * @return {eg.Axes} An instance of a module itself 모듈 자신의 인스턴스\n * @example\n * const axes = new eg.Axes({\n * \"x\": {\n * range: [0, 100]\n * },\n * \"xOther\": {\n * range: [-100, 100]\n * },\n * \t \"zoom\": {\n * range: [50, 30]\n * }\n * });\n *\n * axes.setTo({\"x\": 30, \"zoom\": 60});\n * axes.get(); // {\"x\": 30, \"xOther\": -100, \"zoom\": 60}\n *\n * axes.setTo({\"x\": 100, \"xOther\": 60}, 1000); // animatation\n *\n * // after 1000 ms\n * axes.get(); // {\"x\": 100, \"xOther\": 60, \"zoom\": 60}\n */\n\n\n __proto.setTo = function (pos, duration) {\n if (duration === void 0) {\n duration = 0;\n }\n\n this.am.setTo(pos, duration);\n return this;\n };\n /**\n * Moves an axis from the current coordinates to specific coordinates.\n * @ko 현재 좌표를 기준으로 좌표를 이동한다.\n * @method eg.Axes#setBy\n * @param {Object.} pos The coordinate to move to 이동할 좌표\n * @param {Number} [duration=0] Duration of the animation (unit: ms) 애니메이션 진행 시간(단위: ms)\n * @return {eg.Axes} An instance of a module itself 모듈 자신의 인스턴스\n * @example\n * const axes = new eg.Axes({\n * \"x\": {\n * range: [0, 100]\n * },\n * \"xOther\": {\n * range: [-100, 100]\n * },\n * \t \"zoom\": {\n * range: [50, 30]\n * }\n * });\n *\n * axes.setBy({\"x\": 30, \"zoom\": 10});\n * axes.get(); // {\"x\": 30, \"xOther\": -100, \"zoom\": 60}\n *\n * axes.setBy({\"x\": 70, \"xOther\": 60}, 1000); // animatation\n *\n * // after 1000 ms\n * axes.get(); // {\"x\": 100, \"xOther\": -40, \"zoom\": 60}\n */\n\n\n __proto.setBy = function (pos, duration) {\n if (duration === void 0) {\n duration = 0;\n }\n\n this.am.setBy(pos, duration);\n return this;\n };\n /**\n * Returns whether there is a coordinate in the bounce area of the target axis.\n * @ko 대상 축 중 bounce영역에 좌표가 존재하는지를 반환한다\n * @method eg.Axes#isBounceArea\n * @param {Object} [axes] The names of the axis 축 이름들\n * @return {Boolen} Whether the bounce area exists. bounce 영역 존재 여부\n * @example\n * const axes = new eg.Axes({\n * \"x\": {\n * range: [0, 100]\n * },\n * \"xOther\": {\n * range: [-100, 100]\n * },\n * \t \"zoom\": {\n * range: [50, 30]\n * }\n * });\n *\n * axes.isBounceArea([\"x\"]);\n * axes.isBounceArea([\"x\", \"zoom\"]);\n * axes.isBounceArea();\n */\n\n\n __proto.isBounceArea = function (axes) {\n return this.axm.isOutside(axes);\n };\n /**\n * Destroys properties, and events used in a module and disconnect all connections to inputTypes.\n * @ko 모듈에 사용한 속성, 이벤트를 해제한다. 모든 inputType과의 연결을 끊는다.\n * @method eg.Axes#destroy\n */\n\n\n __proto.destroy = function () {\n this.disconnect();\n this.em.destroy();\n };\n /**\n * Version info string\n * @ko 버전정보 문자열\n * @name VERSION\n * @static\n * @type {String}\n * @example\n * eg.Axes.VERSION; // ex) 3.3.3\n * @memberof eg.Axes\n */\n\n\n Axes.VERSION = \"2.8.0\";\n /**\n * @name eg.Axes.TRANSFORM\n * @desc Returns the transform attribute with CSS vendor prefixes.\n * @ko CSS vendor prefixes를 붙인 transform 속성을 반환한다.\n *\n * @constant\n * @type {String}\n * @example\n * eg.Axes.TRANSFORM; // \"transform\" or \"webkitTransform\"\n */\n\n Axes.TRANSFORM = TRANSFORM;\n /**\n * @name eg.Axes.DIRECTION_NONE\n * @constant\n * @type {Number}\n */\n\n Axes.DIRECTION_NONE = DIRECTION_NONE;\n /**\n * @name eg.Axes.DIRECTION_LEFT\n * @constant\n * @type {Number}\n */\n\n Axes.DIRECTION_LEFT = DIRECTION_LEFT;\n /**\n * @name eg.Axes.DIRECTION_RIGHT\n * @constant\n * @type {Number}\n */\n\n Axes.DIRECTION_RIGHT = DIRECTION_RIGHT;\n /**\n * @name eg.Axes.DIRECTION_UP\n * @constant\n * @type {Number}\n */\n\n Axes.DIRECTION_UP = DIRECTION_UP;\n /**\n * @name eg.Axes.DIRECTION_DOWN\n * @constant\n * @type {Number}\n */\n\n Axes.DIRECTION_DOWN = DIRECTION_DOWN;\n /**\n * @name eg.Axes.DIRECTION_HORIZONTAL\n * @constant\n * @type {Number}\n */\n\n Axes.DIRECTION_HORIZONTAL = DIRECTION_HORIZONTAL;\n /**\n * @name eg.Axes.DIRECTION_VERTICAL\n * @constant\n * @type {Number}\n */\n\n Axes.DIRECTION_VERTICAL = DIRECTION_VERTICAL;\n /**\n * @name eg.Axes.DIRECTION_ALL\n * @constant\n * @type {Number}\n */\n\n Axes.DIRECTION_ALL = DIRECTION_ALL;\n return Axes;\n}(Component);\n\nvar SUPPORT_POINTER_EVENTS = \"PointerEvent\" in win || \"MSPointerEvent\" in win;\nvar SUPPORT_TOUCH = (\"ontouchstart\" in win);\nvar UNIQUEKEY = \"_EGJS_AXES_INPUTTYPE_\";\nfunction toAxis(source, offset) {\n return offset.reduce(function (acc, v, i) {\n if (source[i]) {\n acc[source[i]] = v;\n }\n\n return acc;\n }, {});\n}\nfunction createHammer(element, options) {\n try {\n // create Hammer\n return new Manager(element, __assign({}, options));\n } catch (e) {\n return null;\n }\n}\nfunction convertInputType(inputType) {\n if (inputType === void 0) {\n inputType = [];\n }\n\n var hasTouch = false;\n var hasMouse = false;\n var hasPointer = false;\n inputType.forEach(function (v) {\n switch (v) {\n case \"mouse\":\n hasMouse = true;\n break;\n\n case \"touch\":\n hasTouch = SUPPORT_TOUCH;\n break;\n\n case \"pointer\":\n hasPointer = SUPPORT_POINTER_EVENTS;\n // no default\n }\n });\n\n if (hasPointer) {\n return PointerEventInput;\n } else if (hasTouch && hasMouse) {\n return TouchMouseInput;\n } else if (hasTouch) {\n return TouchInput;\n } else if (hasMouse) {\n return MouseInput;\n }\n\n return null;\n}\n\nfunction getDirectionByAngle(angle, thresholdAngle) {\n if (thresholdAngle < 0 || thresholdAngle > 90) {\n return DIRECTION_NONE;\n }\n\n var toAngle = Math.abs(angle);\n return toAngle > thresholdAngle && toAngle < 180 - thresholdAngle ? DIRECTION_VERTICAL : DIRECTION_HORIZONTAL;\n}\nfunction getNextOffset(speeds, deceleration) {\n var normalSpeed = Math.sqrt(speeds[0] * speeds[0] + speeds[1] * speeds[1]);\n var duration = Math.abs(normalSpeed / -deceleration);\n return [speeds[0] / 2 * duration, speeds[1] / 2 * duration];\n}\nfunction useDirection(checkType, direction, userDirection) {\n if (userDirection) {\n return !!(direction === DIRECTION_ALL || direction & checkType && userDirection & checkType);\n } else {\n return !!(direction & checkType);\n }\n}\n/**\n * @typedef {Object} PanInputOption The option object of the eg.Axes.PanInput module.\n * @ko eg.Axes.PanInput 모듈의 옵션 객체\n * @property {String[]} [inputType=[\"touch\",\"mouse\", \"pointer\"]] Types of input devices.
- touch: Touch screen
- mouse: Mouse 입력 장치 종류.
- touch: 터치 입력 장치
- mouse: 마우스\n * @property {Number[]} [scale] Coordinate scale that a user can move사용자의 동작으로 이동하는 좌표의 배율\n * @property {Number} [scale.0=1] horizontal axis scale 수평축 배율\n * @property {Number} [scale.1=1] vertical axis scale 수직축 배율\n * @property {Number} [thresholdAngle=45] The threshold value that determines whether user action is horizontal or vertical (0~90) 사용자의 동작이 가로 방향인지 세로 방향인지 판단하는 기준 각도(0~90)\n * @property {Number} [threshold=0] Minimal pan distance required before recognizing 사용자의 Pan 동작을 인식하기 위해산 최소한의 거리\n * @property {Number} [iOSEdgeSwipeThreshold=30] Area (px) that can go to the next page when swiping the right edge in iOS safari iOS Safari에서 오른쪽 엣지를 스와이프 하는 경우 다음 페이지로 넘어갈 수 있는 영역(px)\n * @property {Object} [hammerManagerOptions={cssProps: {userSelect: \"none\",touchSelect: \"none\",touchCallout: \"none\",userDrag: \"none\"}] Options of Hammer.Manager Hammer.Manager의 옵션\n**/\n\n/**\n * @class eg.Axes.PanInput\n * @classdesc A module that passes the amount of change to eg.Axes when the mouse or touchscreen is down and moved. use less than two axes.\n * @ko 마우스나 터치 스크린을 누르고 움직일때의 변화량을 eg.Axes에 전달하는 모듈. 두개 이하의 축을 사용한다.\n *\n * @example\n * const pan = new eg.Axes.PanInput(\"#area\", {\n * \t\tinputType: [\"touch\"],\n * \t\tscale: [1, 1.3],\n * });\n *\n * // Connect the 'something2' axis to the mouse or touchscreen x position when the mouse or touchscreen is down and moved.\n * // Connect the 'somethingN' axis to the mouse or touchscreen y position when the mouse or touchscreen is down and moved.\n * axes.connect([\"something2\", \"somethingN\"], pan); // or axes.connect(\"something2 somethingN\", pan);\n *\n * // Connect only one 'something1' axis to the mouse or touchscreen x position when the mouse or touchscreen is down and moved.\n * axes.connect([\"something1\"], pan); // or axes.connect(\"something1\", pan);\n *\n * // Connect only one 'something2' axis to the mouse or touchscreen y position when the mouse or touchscreen is down and moved.\n * axes.connect([\"\", \"something2\"], pan); // or axes.connect(\" something2\", pan);\n *\n * @param {HTMLElement|String|jQuery} element An element to use the eg.Axes.PanInput module eg.Axes.PanInput 모듈을 사용할 엘리먼트\n * @param {PanInputOption} [options] The option object of the eg.Axes.PanInput moduleeg.Axes.PanInput 모듈의 옵션 객체\n */\n\nvar PanInput =\n/*#__PURE__*/\nfunction () {\n function PanInput(el, options) {\n this.axes = [];\n this.hammer = null;\n this.element = null;\n this.panRecognizer = null;\n this.isRightEdge = false;\n this.rightEdgeTimer = 0;\n this.panFlag = false;\n /**\n * Hammer helps you add support for touch gestures to your page\n *\n * @external Hammer\n * @see {@link http://hammerjs.github.io|Hammer.JS}\n * @see {@link http://hammerjs.github.io/jsdoc/Hammer.html|Hammer.JS API documents}\n * @see Hammer.JS applies specific CSS properties by {@link http://hammerjs.github.io/jsdoc/Hammer.defaults.cssProps.html|default} when creating an instance. The eg.Axes module removes all default CSS properties provided by Hammer.JS\n */\n\n if (typeof Manager === \"undefined\") {\n throw new Error(\"The Hammerjs must be loaded before eg.Axes.PanInput.\\nhttp://hammerjs.github.io/\");\n }\n\n this.element = $(el);\n this.options = __assign({\n inputType: [\"touch\", \"mouse\", \"pointer\"],\n scale: [1, 1],\n thresholdAngle: 45,\n threshold: 0,\n iOSEdgeSwipeThreshold: IOS_EDGE_THRESHOLD,\n releaseOnScroll: false,\n hammerManagerOptions: {\n // css properties were removed due to usablility issue\n // http://hammerjs.github.io/jsdoc/Hammer.defaults.cssProps.html\n cssProps: {\n userSelect: \"none\",\n touchSelect: \"none\",\n touchCallout: \"none\",\n userDrag: \"none\"\n }\n }\n }, options);\n this.onHammerInput = this.onHammerInput.bind(this);\n this.onPanmove = this.onPanmove.bind(this);\n this.onPanend = this.onPanend.bind(this);\n }\n\n var __proto = PanInput.prototype;\n\n __proto.mapAxes = function (axes) {\n var useHorizontal = !!axes[0];\n var useVertical = !!axes[1];\n\n if (useHorizontal && useVertical) {\n this._direction = DIRECTION_ALL;\n } else if (useHorizontal) {\n this._direction = DIRECTION_HORIZONTAL;\n } else if (useVertical) {\n this._direction = DIRECTION_VERTICAL;\n } else {\n this._direction = DIRECTION_NONE;\n }\n\n this.axes = axes;\n };\n\n __proto.connect = function (observer) {\n var hammerOption = {\n direction: this._direction,\n threshold: this.options.threshold\n };\n\n if (this.hammer) {\n // for sharing hammer instance.\n // hammer remove previous PanRecognizer.\n this.removeRecognizer();\n this.dettachEvent();\n } else {\n var keyValue = this.element[UNIQUEKEY];\n\n if (!keyValue) {\n keyValue = String(Math.round(Math.random() * new Date().getTime()));\n }\n\n var inputClass = convertInputType(this.options.inputType);\n\n if (!inputClass) {\n throw new Error(\"Wrong inputType parameter!\");\n }\n\n this.hammer = createHammer(this.element, __assign({\n inputClass: inputClass\n }, this.options.hammerManagerOptions));\n this.element[UNIQUEKEY] = keyValue;\n }\n\n this.panRecognizer = new Pan(hammerOption);\n this.hammer.add(this.panRecognizer);\n this.attachEvent(observer);\n return this;\n };\n\n __proto.disconnect = function () {\n this.removeRecognizer();\n\n if (this.hammer) {\n this.dettachEvent();\n }\n\n this._direction = DIRECTION_NONE;\n return this;\n };\n /**\n * Destroys elements, properties, and events used in a module.\n * @ko 모듈에 사용한 엘리먼트와 속성, 이벤트를 해제한다.\n * @method eg.Axes.PanInput#destroy\n */\n\n\n __proto.destroy = function () {\n this.disconnect();\n\n if (this.hammer && this.hammer.recognizers.length === 0) {\n this.hammer.destroy();\n }\n\n delete this.element[UNIQUEKEY];\n this.element = null;\n this.hammer = null;\n };\n /**\n * Enables input devices\n * @ko 입력 장치를 사용할 수 있게 한다\n * @method eg.Axes.PanInput#enable\n * @return {eg.Axes.PanInput} An instance of a module itself 모듈 자신의 인스턴스\n */\n\n\n __proto.enable = function () {\n this.hammer && (this.hammer.get(\"pan\").options.enable = true);\n return this;\n };\n /**\n * Disables input devices\n * @ko 입력 장치를 사용할 수 없게 한다.\n * @method eg.Axes.PanInput#disable\n * @return {eg.Axes.PanInput} An instance of a module itself 모듈 자신의 인스턴스\n */\n\n\n __proto.disable = function () {\n this.hammer && (this.hammer.get(\"pan\").options.enable = false);\n return this;\n };\n /**\n * Returns whether to use an input device\n * @ko 입력 장치를 사용 여부를 반환한다.\n * @method eg.Axes.PanInput#isEnable\n * @return {Boolean} Whether to use an input device 입력장치 사용여부\n */\n\n\n __proto.isEnable = function () {\n return !!(this.hammer && this.hammer.get(\"pan\").options.enable);\n };\n\n __proto.removeRecognizer = function () {\n if (this.hammer && this.panRecognizer) {\n this.hammer.remove(this.panRecognizer);\n this.panRecognizer = null;\n }\n };\n\n __proto.onHammerInput = function (event) {\n if (this.isEnable()) {\n if (event.isFirst) {\n this.panFlag = false;\n\n if (event.srcEvent.cancelable !== false) {\n var edgeThreshold = this.options.iOSEdgeSwipeThreshold;\n this.observer.hold(this, event);\n this.isRightEdge = IS_IOS_SAFARI && event.center.x > window.innerWidth - edgeThreshold;\n this.panFlag = true;\n }\n } else if (event.isFinal) {\n this.onPanend(event);\n }\n }\n };\n\n __proto.onPanmove = function (event) {\n var _this = this;\n\n if (!this.panFlag) {\n return;\n }\n\n var _a = this.options,\n iOSEdgeSwipeThreshold = _a.iOSEdgeSwipeThreshold,\n releaseOnScroll = _a.releaseOnScroll;\n var userDirection = getDirectionByAngle(event.angle, this.options.thresholdAngle); // not support offset properties in Hammerjs - start\n\n var prevInput = this.hammer.session.prevInput;\n\n if (releaseOnScroll && !event.srcEvent.cancelable) {\n this.onPanend(__assign(__assign({}, event), {\n velocityX: 0,\n velocityY: 0,\n offsetX: 0,\n offsetY: 0\n }));\n return;\n }\n\n if (prevInput && IS_IOS_SAFARI) {\n var swipeLeftToRight = event.center.x < 0;\n\n if (swipeLeftToRight) {\n // iOS swipe left => right\n this.onPanend(__assign(__assign({}, prevInput), {\n velocityX: 0,\n velocityY: 0,\n offsetX: 0,\n offsetY: 0\n }));\n return;\n } else if (this.isRightEdge) {\n clearTimeout(this.rightEdgeTimer); // - is right to left\n\n var swipeRightToLeft = event.deltaX < -iOSEdgeSwipeThreshold;\n\n if (swipeRightToLeft) {\n this.isRightEdge = false;\n } else {\n // iOS swipe right => left\n this.rightEdgeTimer = window.setTimeout(function () {\n _this.onPanend(__assign(__assign({}, prevInput), {\n velocityX: 0,\n velocityY: 0,\n offsetX: 0,\n offsetY: 0\n }));\n }, 100);\n }\n }\n }\n /* eslint-disable no-param-reassign */\n\n\n if (prevInput) {\n event.offsetX = event.deltaX - prevInput.deltaX;\n event.offsetY = event.deltaY - prevInput.deltaY;\n } else {\n event.offsetX = 0;\n event.offsetY = 0;\n }\n\n var offset = this.getOffset([event.offsetX, event.offsetY], [useDirection(DIRECTION_HORIZONTAL, this._direction, userDirection), useDirection(DIRECTION_VERTICAL, this._direction, userDirection)]);\n var prevent = offset.some(function (v) {\n return v !== 0;\n });\n\n if (prevent) {\n var srcEvent = event.srcEvent;\n\n if (srcEvent.cancelable !== false) {\n srcEvent.preventDefault();\n }\n\n srcEvent.stopPropagation();\n }\n\n event.preventSystemEvent = prevent;\n prevent && this.observer.change(this, event, toAxis(this.axes, offset));\n };\n\n __proto.onPanend = function (event) {\n if (!this.panFlag) {\n return;\n }\n\n clearTimeout(this.rightEdgeTimer);\n this.panFlag = false;\n var offset = this.getOffset([Math.abs(event.velocityX) * (event.deltaX < 0 ? -1 : 1), Math.abs(event.velocityY) * (event.deltaY < 0 ? -1 : 1)], [useDirection(DIRECTION_HORIZONTAL, this._direction), useDirection(DIRECTION_VERTICAL, this._direction)]);\n offset = getNextOffset(offset, this.observer.options.deceleration);\n this.observer.release(this, event, toAxis(this.axes, offset));\n };\n\n __proto.attachEvent = function (observer) {\n this.observer = observer;\n this.hammer.on(\"hammer.input\", this.onHammerInput).on(\"panstart panmove\", this.onPanmove);\n };\n\n __proto.dettachEvent = function () {\n this.hammer.off(\"hammer.input\", this.onHammerInput).off(\"panstart panmove\", this.onPanmove);\n this.observer = null;\n };\n\n __proto.getOffset = function (properties, direction) {\n var offset = [0, 0];\n var scale = this.options.scale;\n\n if (direction[0]) {\n offset[0] = properties[0] * scale[0];\n }\n\n if (direction[1]) {\n offset[1] = properties[1] * scale[1];\n }\n\n return offset;\n };\n\n return PanInput;\n}();\n\n/**\n * @class eg.Axes.RotatePanInput\n * @classdesc A module that passes the angle moved by touch to Axes and uses one axis of rotation.
[Details](https://github.com/naver/egjs-axes/wiki/RotatePanInput)\n * @ko 터치에 의해 움직인 각도를 Axes 에 전달하며 1개의 회전축만 사용한다.
[상세내용](https://github.com/naver/egjs-axes/wiki/RotatePanInput-%7C-%ED%95%9C%EA%B5%AD%EC%96%B4)\n *\n * @example\n * const input = new eg.Axes.RotatePanInput(\"#area\");\n *\n * var axes = new eg.Axes({\n *\t// property name('angle') could be anything you want (eg. x, y, z...)\n * \tangle: {\n * \t\trange: [-180, 180] // from -180deg to 180deg\n * \t}\n * });\n *\n * axes.connect(\"angle\", input)\n *\n * @param {HTMLElement|String|jQuery} element An element to use the eg.Axes.RotatePanInput module eg.Axes.RotatePanInput 모듈을 사용할 엘리먼트\n * @param {PanInputOption} [options] The option object of the eg.Axes.PanInput moduleeg.Axes.PanInput 모듈의 옵션 객체\n * @extends eg.Axes.PanInput\n */\n\nvar RotatePanInput =\n/*#__PURE__*/\nfunction (_super) {\n __extends(RotatePanInput, _super);\n\n function RotatePanInput(el, options) {\n var _this = _super.call(this, el, options) || this;\n\n _this.prevQuadrant = null;\n _this.lastDiff = 0;\n return _this;\n }\n\n var __proto = RotatePanInput.prototype;\n\n __proto.mapAxes = function (axes) {\n this._direction = Axes.DIRECTION_ALL;\n this.axes = axes;\n };\n\n __proto.onHammerInput = function (event) {\n if (this.isEnable()) {\n if (event.isFirst) {\n this.observer.hold(this, event);\n this.onPanstart(event);\n } else if (event.isFinal) {\n this.onPanend(event);\n }\n }\n };\n\n __proto.onPanstart = function (event) {\n var rect = this.element.getBoundingClientRect();\n /**\n * Responsive\n */\n // TODO: how to do if element is ellipse not circle.\n\n this.coefficientForDistanceToAngle = 360 / (rect.width * Math.PI); // from 2*pi*r * x / 360\n // TODO: provide a way to set origin like https://developer.mozilla.org/en-US/docs/Web/CSS/transform-origin\n\n this.rotateOrigin = [rect.left + (rect.width - 1) / 2, rect.top + (rect.height - 1) / 2]; // init angle.\n\n this.prevAngle = null;\n this.triggerChange(event);\n };\n\n __proto.onPanmove = function (event) {\n this.triggerChange(event);\n };\n\n __proto.onPanend = function (event) {\n this.triggerChange(event);\n this.triggerAnimation(event);\n };\n\n __proto.triggerChange = function (event) {\n var angle = this.getAngle(event.center.x, event.center.y);\n var quadrant = this.getQuadrant(event.center.x, event.center.y);\n var diff = this.getDifference(this.prevAngle, angle, this.prevQuadrant, quadrant);\n this.prevAngle = angle;\n this.prevQuadrant = quadrant;\n\n if (diff === 0) {\n return;\n }\n\n this.lastDiff = diff;\n this.observer.change(this, event, toAxis(this.axes, [-diff])); // minus for clockwise\n };\n\n __proto.triggerAnimation = function (event) {\n var vx = event.velocityX;\n var vy = event.velocityY;\n var velocity = Math.sqrt(vx * vx + vy * vy) * (this.lastDiff > 0 ? -1 : 1); // clockwise\n\n var duration = Math.abs(velocity / -this.observer.options.deceleration);\n var distance = velocity / 2 * duration;\n this.observer.release(this, event, toAxis(this.axes, [distance * this.coefficientForDistanceToAngle]));\n };\n\n __proto.getDifference = function (prevAngle, angle, prevQuadrant, quadrant) {\n var diff;\n\n if (prevAngle === null) {\n diff = 0;\n } else if (prevQuadrant === 1 && quadrant === 4) {\n diff = -prevAngle - (360 - angle);\n } else if (prevQuadrant === 4 && quadrant === 1) {\n diff = 360 - prevAngle + angle;\n } else {\n diff = angle - prevAngle;\n }\n\n return diff;\n };\n\n __proto.getPosFromOrigin = function (posX, posY) {\n return {\n x: posX - this.rotateOrigin[0],\n y: this.rotateOrigin[1] - posY\n };\n };\n\n __proto.getAngle = function (posX, posY) {\n var _a = this.getPosFromOrigin(posX, posY),\n x = _a.x,\n y = _a.y;\n\n var angle = Math.atan2(y, x) * 180 / Math.PI; // console.log(angle, x, y);\n\n return angle < 0 ? 360 + angle : angle;\n };\n /**\n * Quadrant\n * y(+)\n * |\n * 2 | 1\n * --------------->x(+)\n * 3 | 4\n * |\n */\n\n\n __proto.getQuadrant = function (posX, posY) {\n var _a = this.getPosFromOrigin(posX, posY),\n x = _a.x,\n y = _a.y;\n\n var q = 0;\n\n if (x >= 0 && y >= 0) {\n q = 1;\n } else if (x < 0 && y >= 0) {\n q = 2;\n } else if (x < 0 && y < 0) {\n q = 3;\n } else if (x >= 0 && y < 0) {\n q = 4;\n }\n\n return q;\n };\n\n return RotatePanInput;\n}(PanInput);\n\n/**\n * @typedef {Object} PinchInputOption The option object of the eg.Axes.PinchInput module\n * @ko eg.Axes.PinchInput 모듈의 옵션 객체\n * @property {Number} [scale=1] Coordinate scale that a user can move사용자의 동작으로 이동하는 좌표의 배율\n * @property {Number} [threshold=0] Minimal scale before recognizing 사용자의 Pinch 동작을 인식하기 위해산 최소한의 배율\n * @property {Object} [hammerManagerOptions={cssProps: {userSelect: \"none\",touchSelect: \"none\",touchCallout: \"none\",userDrag: \"none\"}] Options of Hammer.Manager Hammer.Manager의 옵션\n**/\n\n/**\n * @class eg.Axes.PinchInput\n * @classdesc A module that passes the amount of change to eg.Axes when two pointers are moving toward (zoom-in) or away from each other (zoom-out). use one axis.\n * @ko 2개의 pointer를 이용하여 zoom-in하거나 zoom-out 하는 동작의 변화량을 eg.Axes에 전달하는 모듈. 한 개 의 축을 사용한다.\n * @example\n * const pinch = new eg.Axes.PinchInput(\"#area\", {\n * \t\tscale: 1\n * });\n *\n * // Connect 'something' axis when two pointers are moving toward (zoom-in) or away from each other (zoom-out).\n * axes.connect(\"something\", pinch);\n *\n * @param {HTMLElement|String|jQuery} element An element to use the eg.Axes.PinchInput module eg.Axes.PinchInput 모듈을 사용할 엘리먼트\n * @param {PinchInputOption} [options] The option object of the eg.Axes.PinchInput moduleeg.Axes.PinchInput 모듈의 옵션 객체\n */\n\nvar PinchInput =\n/*#__PURE__*/\nfunction () {\n function PinchInput(el, options) {\n this.axes = [];\n this.hammer = null;\n this.element = null;\n this._base = null;\n this._prev = null;\n this.pinchRecognizer = null;\n /**\n * Hammer helps you add support for touch gestures to your page\n *\n * @external Hammer\n * @see {@link http://hammerjs.github.io|Hammer.JS}\n * @see {@link http://hammerjs.github.io/jsdoc/Hammer.html|Hammer.JS API documents}\n * @see Hammer.JS applies specific CSS properties by {@link http://hammerjs.github.io/jsdoc/Hammer.defaults.cssProps.html|default} when creating an instance. The eg.Axes module removes all default CSS properties provided by Hammer.JS\n */\n\n if (typeof Manager === \"undefined\") {\n throw new Error(\"The Hammerjs must be loaded before eg.Axes.PinchInput.\\nhttp://hammerjs.github.io/\");\n }\n\n this.element = $(el);\n this.options = __assign({\n scale: 1,\n threshold: 0,\n inputType: [\"touch\", \"pointer\"],\n hammerManagerOptions: {\n // css properties were removed due to usablility issue\n // http://hammerjs.github.io/jsdoc/Hammer.defaults.cssProps.html\n cssProps: {\n userSelect: \"none\",\n touchSelect: \"none\",\n touchCallout: \"none\",\n userDrag: \"none\"\n }\n }\n }, options);\n this.onPinchStart = this.onPinchStart.bind(this);\n this.onPinchMove = this.onPinchMove.bind(this);\n this.onPinchEnd = this.onPinchEnd.bind(this);\n }\n\n var __proto = PinchInput.prototype;\n\n __proto.mapAxes = function (axes) {\n this.axes = axes;\n };\n\n __proto.connect = function (observer) {\n var hammerOption = {\n threshold: this.options.threshold\n };\n\n if (this.hammer) {\n // for sharing hammer instance.\n // hammer remove previous PinchRecognizer.\n this.removeRecognizer();\n this.dettachEvent();\n } else {\n var keyValue = this.element[UNIQUEKEY];\n\n if (!keyValue) {\n keyValue = String(Math.round(Math.random() * new Date().getTime()));\n }\n\n var inputClass = convertInputType(this.options.inputType);\n\n if (!inputClass) {\n throw new Error(\"Wrong inputType parameter!\");\n }\n\n this.hammer = createHammer(this.element, __assign({\n inputClass: inputClass\n }, this.options.hammerManagerOptions));\n this.element[UNIQUEKEY] = keyValue;\n }\n\n this.pinchRecognizer = new Pinch(hammerOption);\n this.hammer.add(this.pinchRecognizer);\n this.attachEvent(observer);\n return this;\n };\n\n __proto.disconnect = function () {\n this.removeRecognizer();\n\n if (this.hammer) {\n this.hammer.remove(this.pinchRecognizer);\n this.pinchRecognizer = null;\n this.dettachEvent();\n }\n\n return this;\n };\n /**\n * Destroys elements, properties, and events used in a module.\n * @ko 모듈에 사용한 엘리먼트와 속성, 이벤트를 해제한다.\n * @method eg.Axes.PinchInput#destroy\n */\n\n\n __proto.destroy = function () {\n this.disconnect();\n\n if (this.hammer && this.hammer.recognizers.length === 0) {\n this.hammer.destroy();\n }\n\n delete this.element[UNIQUEKEY];\n this.element = null;\n this.hammer = null;\n };\n\n __proto.removeRecognizer = function () {\n if (this.hammer && this.pinchRecognizer) {\n this.hammer.remove(this.pinchRecognizer);\n this.pinchRecognizer = null;\n }\n };\n\n __proto.onPinchStart = function (event) {\n this._base = this.observer.get(this)[this.axes[0]];\n var offset = this.getOffset(event.scale);\n this.observer.hold(this, event);\n this.observer.change(this, event, toAxis(this.axes, [offset]));\n this._prev = event.scale;\n };\n\n __proto.onPinchMove = function (event) {\n var offset = this.getOffset(event.scale, this._prev);\n this.observer.change(this, event, toAxis(this.axes, [offset]));\n this._prev = event.scale;\n };\n\n __proto.onPinchEnd = function (event) {\n var offset = this.getOffset(event.scale, this._prev);\n this.observer.change(this, event, toAxis(this.axes, [offset]));\n this.observer.release(this, event, toAxis(this.axes, [0]), 0);\n this._base = null;\n this._prev = null;\n };\n\n __proto.getOffset = function (pinchScale, prev) {\n if (prev === void 0) {\n prev = 1;\n }\n\n return this._base * (pinchScale - prev) * this.options.scale;\n };\n\n __proto.attachEvent = function (observer) {\n this.observer = observer;\n this.hammer.on(\"pinchstart\", this.onPinchStart).on(\"pinchmove\", this.onPinchMove).on(\"pinchend\", this.onPinchEnd);\n };\n\n __proto.dettachEvent = function () {\n this.hammer.off(\"pinchstart\", this.onPinchStart).off(\"pinchmove\", this.onPinchMove).off(\"pinchend\", this.onPinchEnd);\n this.observer = null;\n this._prev = null;\n };\n /**\n * Enables input devices\n * @ko 입력 장치를 사용할 수 있게 한다\n * @method eg.Axes.PinchInput#enable\n * @return {eg.Axes.PinchInput} An instance of a module itself 모듈 자신의 인스턴스\n */\n\n\n __proto.enable = function () {\n this.hammer && (this.hammer.get(\"pinch\").options.enable = true);\n return this;\n };\n /**\n * Disables input devices\n * @ko 입력 장치를 사용할 수 없게 한다.\n * @method eg.Axes.PinchInput#disable\n * @return {eg.Axes.PinchInput} An instance of a module itself 모듈 자신의 인스턴스\n */\n\n\n __proto.disable = function () {\n this.hammer && (this.hammer.get(\"pinch\").options.enable = false);\n return this;\n };\n /**\n * Returns whether to use an input device\n * @ko 입력 장치를 사용 여부를 반환한다.\n * @method eg.Axes.PinchInput#isEnable\n * @return {Boolean} Whether to use an input device 입력장치 사용여부\n */\n\n\n __proto.isEnable = function () {\n return !!(this.hammer && this.hammer.get(\"pinch\").options.enable);\n };\n\n return PinchInput;\n}();\n\n/**\n * @typedef {Object} WheelInputOption The option object of the eg.Axes.WheelInput module\n * @ko eg.Axes.WheelInput 모듈의 옵션 객체\n * @property {Number} [scale=1] Coordinate scale that a user can move사용자의 동작으로 이동하는 좌표의 배율\n**/\n\n/**\n * @class eg.Axes.WheelInput\n * @classdesc A module that passes the amount of change to eg.Axes when the mouse wheel is moved. use one axis.\n * @ko 마우스 휠이 움직일때의 변화량을 eg.Axes에 전달하는 모듈. 한 개 의 축을 사용한다.\n *\n * @example\n * const wheel = new eg.Axes.WheelInput(\"#area\", {\n * \t\tscale: 1\n * });\n *\n * // Connect 'something' axis when the mousewheel is moved.\n * axes.connect(\"something\", wheel);\n *\n * @param {HTMLElement|String|jQuery} element An element to use the eg.Axes.WheelInput module eg.Axes.WheelInput 모듈을 사용할 엘리먼트\n * @param {WheelInputOption} [options] The option object of the eg.Axes.WheelInput moduleeg.Axes.WheelInput 모듈의 옵션 객체\n */\n\nvar WheelInput =\n/*#__PURE__*/\nfunction () {\n function WheelInput(el, options) {\n this.axes = [];\n this.element = null;\n this._isEnabled = false;\n this._isHolded = false;\n this._timer = null;\n this.element = $(el);\n this.options = __assign({\n scale: 1,\n useNormalized: true\n }, options);\n this.onWheel = this.onWheel.bind(this);\n }\n\n var __proto = WheelInput.prototype;\n\n __proto.mapAxes = function (axes) {\n this.axes = axes;\n };\n\n __proto.connect = function (observer) {\n this.dettachEvent();\n this.attachEvent(observer);\n return this;\n };\n\n __proto.disconnect = function () {\n this.dettachEvent();\n return this;\n };\n /**\n * Destroys elements, properties, and events used in a module.\n * @ko 모듈에 사용한 엘리먼트와 속성, 이벤트를 해제한다.\n * @method eg.Axes.WheelInput#destroy\n */\n\n\n __proto.destroy = function () {\n this.disconnect();\n this.element = null;\n };\n\n __proto.onWheel = function (event) {\n var _this = this;\n\n if (!this._isEnabled) {\n return;\n }\n\n event.preventDefault();\n\n if (event.deltaY === 0) {\n return;\n }\n\n if (!this._isHolded) {\n this.observer.hold(this, event);\n this._isHolded = true;\n }\n\n var offset = (event.deltaY > 0 ? -1 : 1) * this.options.scale * (this.options.useNormalized ? 1 : Math.abs(event.deltaY));\n this.observer.change(this, event, toAxis(this.axes, [offset]));\n clearTimeout(this._timer);\n this._timer = setTimeout(function () {\n if (_this._isHolded) {\n _this._isHolded = false;\n\n _this.observer.release(_this, event, toAxis(_this.axes, [0]));\n }\n }, 50);\n };\n\n __proto.attachEvent = function (observer) {\n this.observer = observer;\n this.element.addEventListener(\"wheel\", this.onWheel);\n this._isEnabled = true;\n };\n\n __proto.dettachEvent = function () {\n this.element.removeEventListener(\"wheel\", this.onWheel);\n this._isEnabled = false;\n this.observer = null;\n\n if (this._timer) {\n clearTimeout(this._timer);\n this._timer = null;\n }\n };\n /**\n * Enables input devices\n * @ko 입력 장치를 사용할 수 있게 한다\n * @method eg.Axes.WheelInput#enable\n * @return {eg.Axes.WheelInput} An instance of a module itself 모듈 자신의 인스턴스\n */\n\n\n __proto.enable = function () {\n this._isEnabled = true;\n return this;\n };\n /**\n * Disables input devices\n * @ko 입력 장치를 사용할 수 없게 한다.\n * @method eg.Axes.WheelInput#disable\n * @return {eg.Axes.WheelInput} An instance of a module itself 모듈 자신의 인스턴스\n */\n\n\n __proto.disable = function () {\n this._isEnabled = false;\n return this;\n };\n /**\n * Returns whether to use an input device\n * @ko 입력 장치를 사용 여부를 반환한다.\n * @method eg.Axes.WheelInput#isEnable\n * @return {Boolean} Whether to use an input device 입력장치 사용여부\n */\n\n\n __proto.isEnable = function () {\n return this._isEnabled;\n };\n\n return WheelInput;\n}();\n\nvar KEY_LEFT_ARROW = 37;\nvar KEY_A = 65;\nvar KEY_UP_ARROW = 38;\nvar KEY_W = 87;\nvar KEY_RIGHT_ARROW = 39;\nvar KEY_D = 68;\nvar KEY_DOWN_ARROW = 40;\nvar KEY_S = 83;\nvar DIRECTION_REVERSE = -1;\nvar DIRECTION_FORWARD = 1;\nvar DIRECTION_HORIZONTAL$1 = -1;\nvar DIRECTION_VERTICAL$1 = 1;\nvar DELAY = 80;\n/**\n * @typedef {Object} MoveKeyInputOption The option object of the eg.Axes.MoveKeyInput module\n * @ko eg.Axes.MoveKeyInput 모듈의 옵션 객체\n * @property {Array} [scale] Coordinate scale that a user can move사용자의 동작으로 이동하는 좌표의 배율\n * @property {Number} [scale[0]=1] Coordinate scale for the first axis첫번째 축의 배율\n * @property {Number} [scale[1]=1] Coordinate scale for the decond axis두번째 축의 배율\n**/\n\n/**\n * @class eg.Axes.MoveKeyInput\n * @classdesc A module that passes the amount of change to eg.Axes when the move key stroke is occured. use two axis.\n * @ko 이동키 입력이 발생했을 때의 변화량을 eg.Axes에 전달하는 모듈. 두 개 의 축을 사용한다.\n *\n * @example\n * const moveKey = new eg.Axes.MoveKeyInput(\"#area\", {\n * \t\tscale: [1, 1]\n * });\n *\n * // Connect 'x', 'y' axes when the moveKey is pressed.\n * axes.connect([\"x\", \"y\"], moveKey);\n *\n * @param {HTMLElement|String|jQuery} element An element to use the eg.Axes.MoveKeyInput module eg.Axes.MoveKeyInput 모듈을 사용할 엘리먼트\n * @param {MoveKeyInputOption} [options] The option object of the eg.Axes.MoveKeyInput moduleeg.Axes.MoveKeyInput 모듈의 옵션 객체\n */\n\nvar MoveKeyInput =\n/*#__PURE__*/\nfunction () {\n function MoveKeyInput(el, options) {\n this.axes = [];\n this.element = null;\n this._isEnabled = false;\n this._isHolded = false;\n this._timer = null;\n this.element = $(el);\n this.options = __assign({\n scale: [1, 1]\n }, options);\n this.onKeydown = this.onKeydown.bind(this);\n this.onKeyup = this.onKeyup.bind(this);\n }\n\n var __proto = MoveKeyInput.prototype;\n\n __proto.mapAxes = function (axes) {\n this.axes = axes;\n };\n\n __proto.connect = function (observer) {\n this.dettachEvent(); // add tabindex=\"0\" to the container for making it focusable\n\n if (this.element.getAttribute(\"tabindex\") !== \"0\") {\n this.element.setAttribute(\"tabindex\", \"0\");\n }\n\n this.attachEvent(observer);\n return this;\n };\n\n __proto.disconnect = function () {\n this.dettachEvent();\n return this;\n };\n /**\n * Destroys elements, properties, and events used in a module.\n * @ko 모듈에 사용한 엘리먼트와 속성, 이벤트를 해제한다.\n * @method eg.Axes.MoveKeyInput#destroy\n */\n\n\n __proto.destroy = function () {\n this.disconnect();\n this.element = null;\n };\n\n __proto.onKeydown = function (e) {\n if (!this._isEnabled) {\n return;\n }\n\n var isMoveKey = true;\n var direction = DIRECTION_FORWARD;\n var move = DIRECTION_HORIZONTAL$1;\n\n switch (e.keyCode) {\n case KEY_LEFT_ARROW:\n case KEY_A:\n direction = DIRECTION_REVERSE;\n break;\n\n case KEY_RIGHT_ARROW:\n case KEY_D:\n break;\n\n case KEY_DOWN_ARROW:\n case KEY_S:\n direction = DIRECTION_REVERSE;\n move = DIRECTION_VERTICAL$1;\n break;\n\n case KEY_UP_ARROW:\n case KEY_W:\n move = DIRECTION_VERTICAL$1;\n break;\n\n default:\n isMoveKey = false;\n }\n\n if (move === DIRECTION_HORIZONTAL$1 && !this.axes[0] || move === DIRECTION_VERTICAL$1 && !this.axes[1]) {\n isMoveKey = false;\n }\n\n if (!isMoveKey) {\n return;\n }\n\n var offsets = move === DIRECTION_HORIZONTAL$1 ? [+this.options.scale[0] * direction, 0] : [0, +this.options.scale[1] * direction];\n\n if (!this._isHolded) {\n this.observer.hold(this, event);\n this._isHolded = true;\n }\n\n clearTimeout(this._timer);\n this.observer.change(this, event, toAxis(this.axes, offsets));\n };\n\n __proto.onKeyup = function (e) {\n var _this = this;\n\n if (!this._isHolded) {\n return;\n }\n\n clearTimeout(this._timer);\n this._timer = setTimeout(function () {\n _this.observer.release(_this, e, toAxis(_this.axes, [0, 0]));\n\n _this._isHolded = false;\n }, DELAY);\n };\n\n __proto.attachEvent = function (observer) {\n this.observer = observer;\n this.element.addEventListener(\"keydown\", this.onKeydown, false);\n this.element.addEventListener(\"keypress\", this.onKeydown, false);\n this.element.addEventListener(\"keyup\", this.onKeyup, false);\n this._isEnabled = true;\n };\n\n __proto.dettachEvent = function () {\n this.element.removeEventListener(\"keydown\", this.onKeydown, false);\n this.element.removeEventListener(\"keypress\", this.onKeydown, false);\n this.element.removeEventListener(\"keyup\", this.onKeyup, false);\n this._isEnabled = false;\n this.observer = null;\n };\n /**\n * Enables input devices\n * @ko 입력 장치를 사용할 수 있게 한다\n * @method eg.Axes.MoveKeyInput#enable\n * @return {eg.Axes.MoveKeyInput} An instance of a module itself 모듈 자신의 인스턴스\n */\n\n\n __proto.enable = function () {\n this._isEnabled = true;\n return this;\n };\n /**\n * Disables input devices\n * @ko 입력 장치를 사용할 수 없게 한다.\n * @method eg.Axes.MoveKeyInput#disable\n * @return {eg.Axes.MoveKeyInput} An instance of a module itself 모듈 자신의 인스턴스\n */\n\n\n __proto.disable = function () {\n this._isEnabled = false;\n return this;\n };\n /**\n * Returns whether to use an input device\n * @ko 입력 장치를 사용 여부를 반환한다.\n * @method eg.Axes.MoveKeyInput#isEnable\n * @return {Boolean} Whether to use an input device 입력장치 사용여부\n */\n\n\n __proto.isEnable = function () {\n return this._isEnabled;\n };\n\n return MoveKeyInput;\n}();\n\nexport default Axes;\nexport { PanInput, RotatePanInput, PinchInput, WheelInput, MoveKeyInput };\n//# sourceMappingURL=axes.esm.js.map\n","/*\nCopyright (c) 2015-present NAVER Corp.\nname: @egjs/flicking\nlicense: MIT\nauthor: NAVER Corp.\nrepository: https://github.com/naver/egjs-flicking\nversion: 4.2.1\n*/\nimport Component, { ComponentEvent } from '@egjs/component';\nimport Axes, { PanInput } from '@egjs/axes';\n\n/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\n\n/* global Reflect, Promise */\nvar extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf || {\n __proto__: []\n } instanceof Array && function (d, b) {\n d.__proto__ = b;\n } || function (d, b) {\n for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p];\n };\n\n return extendStatics(d, b);\n};\n\nfunction __extends(d, b) {\n if (typeof b !== \"function\" && b !== null) throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n\n function __() {\n this.constructor = d;\n }\n\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\nvar __assign = function () {\n __assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n\n return t;\n };\n\n return __assign.apply(this, arguments);\n};\nfunction __awaiter(thisArg, _arguments, P, generator) {\n function adopt(value) {\n return value instanceof P ? value : new P(function (resolve) {\n resolve(value);\n });\n }\n\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) {\n try {\n step(generator.next(value));\n } catch (e) {\n reject(e);\n }\n }\n\n function rejected(value) {\n try {\n step(generator[\"throw\"](value));\n } catch (e) {\n reject(e);\n }\n }\n\n function step(result) {\n result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);\n }\n\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n}\nfunction __generator(thisArg, body) {\n var _ = {\n label: 0,\n sent: function () {\n if (t[0] & 1) throw t[1];\n return t[1];\n },\n trys: [],\n ops: []\n },\n f,\n y,\n t,\n g;\n return g = {\n next: verb(0),\n \"throw\": verb(1),\n \"return\": verb(2)\n }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function () {\n return this;\n }), g;\n\n function verb(n) {\n return function (v) {\n return step([n, v]);\n };\n }\n\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n\n while (_) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n\n switch (op[0]) {\n case 0:\n case 1:\n t = op;\n break;\n\n case 4:\n _.label++;\n return {\n value: op[1],\n done: false\n };\n\n case 5:\n _.label++;\n y = op[1];\n op = [0];\n continue;\n\n case 7:\n op = _.ops.pop();\n\n _.trys.pop();\n\n continue;\n\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {\n _ = 0;\n continue;\n }\n\n if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {\n _.label = op[1];\n break;\n }\n\n if (op[0] === 6 && _.label < t[1]) {\n _.label = t[1];\n t = op;\n break;\n }\n\n if (t && _.label < t[2]) {\n _.label = t[2];\n\n _.ops.push(op);\n\n break;\n }\n\n if (t[2]) _.ops.pop();\n\n _.trys.pop();\n\n continue;\n }\n\n op = body.call(thisArg, _);\n } catch (e) {\n op = [6, e];\n y = 0;\n } finally {\n f = t = 0;\n }\n\n if (op[0] & 5) throw op[1];\n return {\n value: op[0] ? op[1] : void 0,\n done: true\n };\n }\n}\nfunction __values(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator,\n m = s && o[s],\n i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return {\n value: o && o[i++],\n done: !o\n };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\nfunction __read(o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o),\n r,\n ar = [],\n e;\n\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n } catch (error) {\n e = {\n error: error\n };\n } finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n } finally {\n if (e) throw e.error;\n }\n }\n\n return ar;\n}\nfunction __spreadArray(to, from) {\n for (var i = 0, il = from.length, j = to.length; i < il; i++, j++) to[j] = from[i];\n\n return to;\n}\n\n/*\r\n * Copyright (c) 2015 NAVER Corp.\r\n * egjs projects are licensed under the MIT license\r\n */\n/**\r\n * Special type of known error that {@link Flicking} throws.\r\n * @ko Flicking 내부에서 알려진 오류 발생시 throw되는 에러\r\n * @property {number} code Error code에러 코드\r\n * @property {string} message Error message에러 메시지\r\n * @see {@link Constants.ERROR_CODE ERROR_CODE}\r\n * @example\r\n * ```ts\r\n * import Flicking, { FlickingError, ERROR_CODES } from \"@egjs/flicking\";\r\n * try {\r\n * const flicking = new Flicking(\".flicking-viewport\")\r\n * } catch (e) {\r\n * if (e instanceof FlickingError && e.code === ERROR_CODES.ELEMENT_NOT_FOUND) {\r\n * console.error(\"Element not found\")\r\n * }\r\n * }\r\n * ```\r\n */\n\nvar FlickingError =\n/*#__PURE__*/\nfunction (_super) {\n __extends(FlickingError, _super);\n /**\r\n * @param message Error message에러 메시지\r\n * @param code Error code에러 코드\r\n */\n\n\n function FlickingError(message, code) {\n var _this = _super.call(this, message) || this;\n\n _this.message = message;\n _this.code = code;\n Object.setPrototypeOf(_this, FlickingError.prototype);\n _this.name = \"FlickingError\";\n return _this;\n }\n\n return FlickingError;\n}(Error);\n\n/*\r\n * Copyright (c) 2015 NAVER Corp.\r\n * egjs projects are licensed under the MIT license\r\n */\n\n/* eslint-disable @typescript-eslint/restrict-template-expressions */\n\n/**\r\n * Error codes of {@link FlickingError}. Below are the conditions where each error code occurs.\r\n * @ko {@link FlickingError}의 에러 코드. 아래는 각각의 에러 코드가 발생하는 조건입니다.\r\n * @name ERROR_CODE\r\n * @constant\r\n * @type object\r\n * @property {number} WRONG_TYPE Parameter type is wrong패러미터의 타입이 잘못되었을 경우\r\n * @property {number} ELEMENT_NOT_FOUND Element is not found inside page with the given CSS selector주어진 CSS selector로 페이지 내에서 해당 엘리먼트를 찾지 못했을 경우\r\n * @property {number} VAL_MUST_NOT_NULL Expected non-null value, but given `null` or `undefined`값을 기대했으나, `null`이나 `undefined`를 받은 경우\r\n * @property {number} NOT_ATTACHED_TO_FLICKING When Flicking's component is not initialized (i.e. {@link Flicking#init} is not called)Flicking 내부 컴포넌트가 초기화되지 않은 경우 ({@link Flicking#init}이 호출되지 않은 경우)\r\n * @property {number} WRONG_OPTION One of the options is wrong옵션들 중 잘못된 값이 있을 때\r\n * @property {number} INDEX_OUT_OF_RANGE When the given index is out of possible range인덱스가 주어진 범위를 벗어난 경우\r\n * @property {number} POSITION_NOT_REACHABLE When {@link Control#moveToPosition}'s position parameter is out of possible range.{@link Control#moveToPosition}의 `position` 패러미터가 도달 가능한 범위를 벗어난 경우\r\n * @property {number} TRANSFORM_NOT_SUPPORTED CSS `transform` property is not available(<=IE8) CSS `transform` 속성을 사용할 수 없는 경우(<=IE8)\r\n * @property {number} STOP_CALLED_BY_USER When the event's `stop()` is called by user.사용자에 의해 이벤트의 `stop()`이 호출된 경우\r\n * @property {number} ANIMATION_INTERRUPTED When the animation is interrupted by user.사용자에 의해 애니메이션이 중단된 경우\r\n * @property {number} ANIMATION_ALREADY_PLAYING When the animation is already playing.현재 애니메이션이 이미 진행중인 경우\r\n * @property {number} NOT_ALLOWED_IN_FRAMEWORK When the non-allowed method is called from frameworks (React, Angular, Vue...)\r\n * 프레임워크(React, Angular, Vue ...)에서 사용 불가능한 메소드를 호출했을 경우\r\n * @property {number} NOT_INITIALIZED When the {@link Flicking#init} is not called before but is needed{@link Flicking#init}의 호출이 필요하나, 아직 호출되지 않았을 경우\r\n * @property {number} NO_ACTIVE When there're no active panel that flicking has selected. This may be due to the absence of any panels현재 Flicking이 선택한 패널이 없을 경우. 일반적으로 패널이 하나도 없는 경우에 발생할 수 있습니다\r\n */\nvar CODE = {\n WRONG_TYPE: 0,\n ELEMENT_NOT_FOUND: 1,\n VAL_MUST_NOT_NULL: 2,\n NOT_ATTACHED_TO_FLICKING: 3,\n WRONG_OPTION: 4,\n INDEX_OUT_OF_RANGE: 5,\n POSITION_NOT_REACHABLE: 6,\n TRANSFORM_NOT_SUPPORTED: 7,\n STOP_CALLED_BY_USER: 8,\n ANIMATION_INTERRUPTED: 9,\n ANIMATION_ALREADY_PLAYING: 10,\n NOT_ALLOWED_IN_FRAMEWORK: 11,\n NOT_INITIALIZED: 12,\n NO_ACTIVE: 13\n};\nvar MESSAGE = {\n WRONG_TYPE: function (wrongVal, correctTypes) {\n return wrongVal + \"(\" + typeof wrongVal + \") is not a \" + correctTypes.map(function (type) {\n return \"\\\"\" + type + \"\\\"\";\n }).join(\" or \") + \".\";\n },\n ELEMENT_NOT_FOUND: function (selector) {\n return \"Element with selector \\\"\" + selector + \"\\\" not found.\";\n },\n VAL_MUST_NOT_NULL: function (val, name) {\n return name + \" should be provided. Given: \" + val;\n },\n NOT_ATTACHED_TO_FLICKING: function (name) {\n return name + \" is not attached to the Flicking instance. \\\"init()\\\" should be called first.\";\n },\n WRONG_OPTION: function (optionName, val) {\n return \"Option \\\"\" + optionName + \"\\\" is not in correct format, given: \" + val;\n },\n INDEX_OUT_OF_RANGE: function (val, min, max) {\n return \"Index \\\"\" + val + \"\\\" is out of range: should be between \" + min + \" and \" + max + \".\";\n },\n POSITION_NOT_REACHABLE: function (position) {\n return \"Position \\\"\" + position + \"\\\" is not reachable.\";\n },\n TRANSFORM_NOT_SUPPORTED: \"Browser does not support CSS transform.\",\n STOP_CALLED_BY_USER: \"Event stop() is called by user.\",\n ANIMATION_INTERRUPTED: \"Animation is interrupted by user input.\",\n ANIMATION_ALREADY_PLAYING: \"Animation is already playing.\",\n NOT_ALLOWED_IN_FRAMEWORK: \"This behavior is not allowed in the frameworks like React, Vue, or Angular.\",\n NOT_INITIALIZED: \"Flicking is not initialized yet, call init() first.\",\n NO_ACTIVE: \"There's no active panel that Flicking has selected. This may be due to the absence of any panels.\"\n};\n\n/*\r\n * Copyright (c) 2015 NAVER Corp.\r\n * egjs projects are licensed under the MIT license\r\n */\n/**\r\n * Event type object with event name strings of {@link Flicking}\r\n * @ko {@link Flicking}의 이벤트 이름 문자열들을 담은 객체\r\n * @type {object}\r\n * @property {\"holdStart\"} HOLD_START holdStart eventholdStart 이벤트\r\n * @property {\"holdEnd\"} HOLD_END holdEnd eventholdEnd 이벤트\r\n * @property {\"moveStart\"} MOVE_START moveStart eventmoveStart 이벤트\r\n * @property {\"move\"} MOVE move eventmove 이벤트\r\n * @property {\"moveEnd\"} MOVE_END moveEnd eventmoveEnd 이벤트\r\n * @property {\"willChange\"} WILL_CHANGE willChange eventwillChange 이벤트\r\n * @property {\"changed\"} CHANGED changed eventchanged 이벤트\r\n * @property {\"willRestore\"} WILL_RESTORE willRestore eventwillRestore 이벤트\r\n * @property {\"restored\"} RESTORED restored eventrestored 이벤트\r\n * @property {\"select\"} SELECT select eventselect 이벤트\r\n * @property {\"needPanel\"} NEED_PANEL needPanel eventneedPanel 이벤트\r\n * @property {\"panelChange\"} PANEL_CHANGE panelChange eventpanelChange 이벤트\r\n * @example\r\n * ```ts\r\n * import { EVENTS } from \"@egjs/flicking\";\r\n * EVENTS.MOVE_START; // \"moveStart\"\r\n * ```\r\n */\n\nvar EVENTS = {\n READY: \"ready\",\n BEFORE_RESIZE: \"beforeResize\",\n AFTER_RESIZE: \"afterResize\",\n HOLD_START: \"holdStart\",\n HOLD_END: \"holdEnd\",\n MOVE_START: \"moveStart\",\n MOVE: \"move\",\n MOVE_END: \"moveEnd\",\n WILL_CHANGE: \"willChange\",\n CHANGED: \"changed\",\n WILL_RESTORE: \"willRestore\",\n RESTORED: \"restored\",\n SELECT: \"select\",\n NEED_PANEL: \"needPanel\",\n VISIBLE_CHANGE: \"visibleChange\",\n REACH_EDGE: \"reachEdge\",\n PANEL_CHANGE: \"panelChange\"\n};\n/**\r\n * An object with all possible predefined literal string for the {@link Flicking#align align} option\r\n * @ko {@link Flicking#align align} 옵션에 사용되는 미리 정의된 리터럴 상수들을 담고 있는 객체\r\n * @type {object}\r\n * @property {\"prev\"} PREV left/top align좌/상 정렬\r\n * @property {\"center\"} CENTER center align중앙 정렬\r\n * @property {\"next\"} NEXT right/bottom align우/하 정렬\r\n */\n\nvar ALIGN = {\n PREV: \"prev\",\n CENTER: \"center\",\n NEXT: \"next\"\n};\n/**\r\n * An object of directions\r\n * @ko 방향을 나타내는 값들을 담고 있는 객체\r\n * @type {object}\r\n * @property {\"PREV\"} PREV \"left\" when {@link Flicking#horizontal horizontal} is true, and \"top\" when {@link Flicking#horizontal horizontal} is false\r\n * {@link Flicking#horizontal horizontal}가 `true`일 경우 왼쪽, {@link Flicking#horizontal horizontal}가 `false`일 경우 위쪽을 의미합니다\r\n * @property {\"NEXT\"} NEXT \"right\" when {@link Flicking#horizontal horizontal} is true, and \"bottom\" when {@link Flicking#horizontal horizontal} is false\r\n * {@link Flicking#horizontal horizontal}가 `true`일 경우 오른쪽, {@link Flicking#horizontal horizontal}가 `false`일 경우 아래쪽을 의미합니다\r\n * @property {null} NONE This value usually means it's the same position주로 제자리인 경우를 의미합니다\r\n */\n\nvar DIRECTION = {\n PREV: \"PREV\",\n NEXT: \"NEXT\",\n NONE: null\n};\n/**\r\n * An object with all possible {@link Flicking#moveType moveType}s\r\n * @ko Flicking이 제공하는 {@link Flicking#moveType moveType}들을 담고 있는 객체\r\n * @type {object}\r\n * @property {\"snap\"} SNAP Flicking's {@link Flicking#moveType moveType} that enables {@link SnapControl} as a Flicking's {@link Flicking#control control}\r\n * Flicking의 {@link Flicking#control control}을 {@link SnapControl}로 설정하게 하는 {@link Flicking#moveType moveType}\r\n * @property {\"freeScroll\"} FREE_SCROLL Flicking's {@link Flicking#moveType moveType} that enables {@link FreeControl} as a Flicking's {@link Flicking#control control}\r\n * Flicking의 {@link Flicking#control control}을 {@link FreeControl}로 설정하게 하는 {@link Flicking#moveType moveType}\r\n * @property {\"strict\"} STRICT Flicking's {@link Flicking#moveType moveType} that enables {@link StrictControl} as a Flicking's {@link Flicking#control control}\r\n * Flicking의 {@link Flicking#control control}을 {@link StrictControl}로 설정하게 하는 {@link Flicking#moveType moveType}\r\n */\n\nvar MOVE_TYPE = {\n SNAP: \"snap\",\n FREE_SCROLL: \"freeScroll\",\n STRICT: \"strict\"\n};\n\nvar getElement = function (el, parent) {\n var targetEl = null;\n\n if (isString(el)) {\n var parentEl = parent ? parent : document;\n var queryResult = parentEl.querySelector(el);\n\n if (!queryResult) {\n throw new FlickingError(MESSAGE.ELEMENT_NOT_FOUND(el), CODE.ELEMENT_NOT_FOUND);\n }\n\n targetEl = queryResult;\n } else if (el && el.nodeType === Node.ELEMENT_NODE) {\n targetEl = el;\n }\n\n if (!targetEl) {\n throw new FlickingError(MESSAGE.WRONG_TYPE(el, [\"HTMLElement\", \"string\"]), CODE.WRONG_TYPE);\n }\n\n return targetEl;\n};\nvar checkExistence = function (value, nameOnErrMsg) {\n if (value == null) {\n throw new FlickingError(MESSAGE.VAL_MUST_NOT_NULL(value, nameOnErrMsg), CODE.VAL_MUST_NOT_NULL);\n }\n};\nvar clamp = function (x, min, max) {\n return Math.max(Math.min(x, max), min);\n};\nvar getFlickingAttached = function (val, nameToThrowOnError) {\n if (!val) {\n throw new FlickingError(MESSAGE.NOT_ATTACHED_TO_FLICKING(nameToThrowOnError), CODE.NOT_ATTACHED_TO_FLICKING);\n }\n\n return val;\n};\nvar toArray = function (iterable) {\n return [].slice.call(iterable);\n};\nvar parseAlign$1 = function (align, size) {\n var alignPoint;\n\n if (isString(align)) {\n switch (align) {\n case ALIGN.PREV:\n alignPoint = 0;\n break;\n\n case ALIGN.CENTER:\n alignPoint = 0.5 * size;\n break;\n\n case ALIGN.NEXT:\n alignPoint = size;\n break;\n\n default:\n alignPoint = parseArithmeticSize(align, size);\n\n if (alignPoint == null) {\n throw new FlickingError(MESSAGE.WRONG_OPTION(\"align\", align), CODE.WRONG_OPTION);\n }\n\n }\n } else {\n alignPoint = align;\n }\n\n return alignPoint;\n};\nvar parseBounce = function (bounce, size) {\n var parsedBounce;\n\n if (Array.isArray(bounce)) {\n parsedBounce = bounce.map(function (val) {\n return parseArithmeticSize(val, size);\n });\n } else {\n var parsedVal = parseArithmeticSize(bounce, size);\n parsedBounce = [parsedVal, parsedVal];\n }\n\n return parsedBounce.map(function (val) {\n if (val == null) {\n throw new FlickingError(MESSAGE.WRONG_OPTION(\"bounce\", bounce), CODE.WRONG_OPTION);\n }\n\n return val;\n });\n};\nvar parseArithmeticSize = function (cssValue, base) {\n var parsed = parseArithmeticExpression(cssValue);\n if (parsed == null) return null;\n return parsed.percentage * base + parsed.absolute;\n};\nvar parseArithmeticExpression = function (cssValue) {\n var cssRegex = /(?:(\\+|\\-)\\s*)?(\\d+(?:\\.\\d+)?(%|px)?)/g;\n\n if (typeof cssValue === \"number\") {\n return {\n percentage: 0,\n absolute: cssValue\n };\n }\n\n var parsed = {\n percentage: 0,\n absolute: 0\n };\n var idx = 0;\n var matchResult = cssRegex.exec(cssValue);\n\n while (matchResult != null) {\n var sign = matchResult[1];\n var value = matchResult[2];\n var unit = matchResult[3];\n var parsedValue = parseFloat(value);\n\n if (idx <= 0) {\n sign = sign || \"+\";\n } // Return default value for values not in good form\n\n\n if (!sign) {\n return null;\n }\n\n var signMultiplier = sign === \"+\" ? 1 : -1;\n\n if (unit === \"%\") {\n parsed.percentage += signMultiplier * (parsedValue / 100);\n } else {\n parsed.absolute += signMultiplier * parsedValue;\n } // Match next occurrence\n\n\n ++idx;\n matchResult = cssRegex.exec(cssValue);\n } // None-matched\n\n\n if (idx === 0) {\n return null;\n }\n\n return parsed;\n};\nvar getDirection = function (start, end) {\n if (start === end) return DIRECTION.NONE;\n return start < end ? DIRECTION.NEXT : DIRECTION.PREV;\n};\nvar parseElement = function (element) {\n if (!Array.isArray(element)) {\n element = [element];\n }\n\n var elements = [];\n element.forEach(function (el) {\n if (isString(el)) {\n var tempDiv = document.createElement(\"div\");\n tempDiv.innerHTML = el;\n elements.push.apply(elements, __spreadArray([], __read(toArray(tempDiv.children))));\n\n while (tempDiv.firstChild) {\n tempDiv.removeChild(tempDiv.firstChild);\n }\n } else if (el && el.nodeType === Node.ELEMENT_NODE) {\n elements.push(el);\n } else {\n throw new FlickingError(MESSAGE.WRONG_TYPE(el, [\"HTMLElement\", \"string\"]), CODE.WRONG_TYPE);\n }\n });\n return elements;\n};\nvar getMinusCompensatedIndex = function (idx, max) {\n return idx < 0 ? clamp(idx + max, 0, max) : clamp(idx, 0, max);\n};\nvar includes = function (array, target) {\n var e_1, _a;\n\n try {\n for (var array_1 = __values(array), array_1_1 = array_1.next(); !array_1_1.done; array_1_1 = array_1.next()) {\n var val = array_1_1.value;\n if (val === target) return true;\n }\n } catch (e_1_1) {\n e_1 = {\n error: e_1_1\n };\n } finally {\n try {\n if (array_1_1 && !array_1_1.done && (_a = array_1.return)) _a.call(array_1);\n } finally {\n if (e_1) throw e_1.error;\n }\n }\n\n return false;\n};\nvar isString = function (val) {\n return typeof val === \"string\";\n};\nvar circulatePosition = function (pos, min, max) {\n var size = max - min;\n\n if (pos < min) {\n var offset = (min - pos) % size;\n pos = max - offset;\n } else if (pos > max) {\n var offset = (pos - max) % size;\n pos = min + offset;\n }\n\n return pos;\n};\nvar find = function (array, checker) {\n var e_2, _a;\n\n try {\n for (var array_2 = __values(array), array_2_1 = array_2.next(); !array_2_1.done; array_2_1 = array_2.next()) {\n var val = array_2_1.value;\n\n if (checker(val)) {\n return val;\n }\n }\n } catch (e_2_1) {\n e_2 = {\n error: e_2_1\n };\n } finally {\n try {\n if (array_2_1 && !array_2_1.done && (_a = array_2.return)) _a.call(array_2);\n } finally {\n if (e_2) throw e_2.error;\n }\n }\n\n return null;\n};\nvar findIndex = function (array, checker) {\n for (var idx = 0; idx < array.length; idx++) {\n if (checker(array[idx])) {\n return idx;\n }\n }\n\n return -1;\n};\nvar getProgress = function (pos, prev, next) {\n return (pos - prev) / (next - prev);\n}; // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n\nvar getStyle = function (el) {\n return window.getComputedStyle(el) || el.currentStyle;\n};\nvar isBetween = function (val, min, max) {\n return val >= min && val <= max;\n};\nvar circulateIndex = function (index, max) {\n if (index >= max) {\n return index % max;\n } else if (index < 0) {\n return getMinusCompensatedIndex((index + 1) % max - 1, max);\n } else {\n return index;\n }\n};\n\n/*\r\n * Copyright (c) 2015 NAVER Corp.\r\n * egjs projects are licensed under the MIT license\r\n */\n/**\r\n * A component that manages viewport size\r\n * @ko 뷰포트 크기 정보를 담당하는 컴포넌트\r\n */\n\nvar Viewport =\n/*#__PURE__*/\nfunction () {\n /**\r\n * @param el A viewport element뷰포트 엘리먼트\r\n */\n function Viewport(el) {\n this._el = el;\n this._width = 0;\n this._height = 0;\n this._padding = {\n left: 0,\n right: 0,\n top: 0,\n bottom: 0\n };\n this._isBorderBoxSizing = false;\n }\n\n var __proto = Viewport.prototype;\n Object.defineProperty(__proto, \"element\", {\n /**\r\n * A viewport(root) element\r\n * @ko 뷰포트(root) 엘리먼트\r\n * @type {HTMLElement}\r\n * @readonly\r\n */\n get: function () {\n return this._el;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(__proto, \"width\", {\n /**\r\n * Viewport width, without paddings\r\n * @ko 뷰포트 너비\r\n * @type {number}\r\n * @readonly\r\n */\n get: function () {\n return this._width - this._padding.left - this._padding.right;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(__proto, \"height\", {\n /**\r\n * Viewport height, without paddings\r\n * @ko 뷰포트 높이\r\n * @type {number}\r\n * @readonly\r\n */\n get: function () {\n return this._height - this._padding.top - this._padding.bottom;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(__proto, \"padding\", {\n /**\r\n * Viewport paddings\r\n * @ko 뷰포트 CSS padding 값\r\n * @type {object}\r\n * @property {number} left CSS `padding-left`\r\n * @property {number} right CSS `padding-right`\r\n * @property {number} top CSS `padding-top`\r\n * @property {number} bottom CSS `padding-bottom`\r\n * @readonly\r\n */\n get: function () {\n return this._padding;\n },\n enumerable: false,\n configurable: true\n });\n /**\r\n * Change viewport's size.\r\n * This will change the actual size of `.flicking-viewport` element by changing its CSS width/height property\r\n * @ko 뷰포트 크기를 변경합니다.\r\n * `.flicking-viewport` 엘리먼트에 해당 크기의 CSS width/height를 적용합니다\r\n * @param {object} [size] New viewport size새 뷰포트 크기\r\n * @param {number|string} [size.width] CSS string or number(in px)CSS 문자열 또는 숫자(px)\r\n * @param {number|string} [size.height] CSS string or number(in px)CSS 문자열 또는 숫자(px)\r\n */\n\n __proto.setSize = function (_a) {\n var width = _a.width,\n height = _a.height;\n var el = this._el;\n var padding = this._padding;\n var isBorderBoxSizing = this._isBorderBoxSizing;\n\n if (width != null) {\n if (isString(width)) {\n el.style.width = width;\n } else {\n var newWidth = isBorderBoxSizing ? width + padding.left + padding.right : width;\n el.style.width = newWidth + \"px\";\n }\n }\n\n if (height != null) {\n if (isString(height)) {\n el.style.height = height;\n } else {\n var newHeight = isBorderBoxSizing ? height + padding.top + padding.bottom : height;\n el.style.height = newHeight + \"px\";\n }\n }\n\n this.resize();\n };\n /**\r\n * Update width/height to the current viewport element's size\r\n * @ko 현재 뷰포트 엘리먼트의 크기로 너비/높이를 업데이트합니다\r\n */\n\n\n __proto.resize = function () {\n var el = this._el;\n var elStyle = getStyle(el);\n this._width = el.clientWidth;\n this._height = el.clientHeight;\n this._padding = {\n left: parseFloat(elStyle.paddingLeft),\n right: parseFloat(elStyle.paddingRight),\n top: parseFloat(elStyle.paddingTop),\n bottom: parseFloat(elStyle.paddingBottom)\n };\n this._isBorderBoxSizing = elStyle.boxSizing === \"border-box\";\n };\n\n return Viewport;\n}();\n\n/**\r\n * All possible @egjs/axes event keys\r\n * @internal\r\n */\nvar EVENT = {\n HOLD: \"hold\",\n CHANGE: \"change\",\n RELEASE: \"release\",\n ANIMATION_END: \"animationEnd\",\n FINISH: \"finish\"\n};\n/**\r\n * An Axis key that Flicking uses\r\n * @internal\r\n */\n\nvar POSITION_KEY = \"flick\";\n\nvar STATE_TYPE;\n\n(function (STATE_TYPE) {\n STATE_TYPE[STATE_TYPE[\"IDLE\"] = 0] = \"IDLE\";\n STATE_TYPE[STATE_TYPE[\"HOLDING\"] = 1] = \"HOLDING\";\n STATE_TYPE[STATE_TYPE[\"DRAGGING\"] = 2] = \"DRAGGING\";\n STATE_TYPE[STATE_TYPE[\"ANIMATING\"] = 3] = \"ANIMATING\";\n STATE_TYPE[STATE_TYPE[\"DISABLED\"] = 4] = \"DISABLED\";\n})(STATE_TYPE || (STATE_TYPE = {}));\n/**\r\n * A component that shows the current status of the user input or the animation\r\n * @ko 현재 사용자 입력 또는 애니메이션 상태를 나타내는 컴포넌트\r\n * @internal\r\n */\n\n\nvar State =\n/*#__PURE__*/\nfunction () {\n function State() {\n this._delta = 0;\n }\n\n var __proto = State.prototype;\n Object.defineProperty(__proto, \"delta\", {\n /**\r\n * A sum of delta values of change events from the last hold event of Axes\r\n * @ko 이전 hold이벤트부터 change에 의해 발생한 이동 delta값의 합산\r\n * @type {number}\r\n * @readonly\r\n */\n get: function () {\n return this._delta;\n },\n enumerable: false,\n configurable: true\n });\n /**\r\n * An callback which is called when state has changed to this state\r\n * @ko 현재 상태로 돌입했을때 호출되는 콜백 함수\r\n * @param {State} prevState An previous state이전 상태값\r\n * @return {void}\r\n */\n\n __proto.onEnter = function (prevState) {\n this._delta = prevState._delta;\n };\n /**\r\n * An event handler for Axes's {@link https://naver.github.io/egjs-axes/release/latest/doc/eg.Axes.html#event:hold hold} event\r\n * @ko Axes의 {@link https://naver.github.io/egjs-axes/release/latest/doc/eg.Axes.html#event:hold hold} 이벤트 핸들러\r\n * @param {object} [ctx] Event context이벤트 콘텍스트\r\n * @param {Flicking} [ctx.flicking] An instance of FlickingFlicking 인스턴스\r\n * @param {object} [ctx.axesEvent] A {@link https://naver.github.io/egjs-axes/release/latest/doc/eg.Axes.html#event:hold hold} event of Axes\r\n * Axes의 {@link https://naver.github.io/egjs-axes/release/latest/doc/eg.Axes.html#event:hold hold} 이벤트\r\n * @param {function} [ctx.transitTo] A function for changing current state to other state다른 상태로 변경하기 위한 함수\r\n * @return {void}\r\n */\n\n\n __proto.onHold = function (ctx) {// DO NOTHING\n };\n /**\r\n * An event handler for Axes's {@link https://naver.github.io/egjs-axes/release/latest/doc/eg.Axes.html#event:change change} event\r\n * @ko Axes의 {@link https://naver.github.io/egjs-axes/release/latest/doc/eg.Axes.html#event:change change} 이벤트 핸들러\r\n * @param {object} [ctx] Event context이벤트 콘텍스트\r\n * @param {Flicking} [ctx.flicking] An instance of FlickingFlicking 인스턴스\r\n * @param {object} [ctx.axesEvent] A {@link https://naver.github.io/egjs-axes/release/latest/doc/eg.Axes.html#event:change change} event of Axes\r\n * Axes의 {@link https://naver.github.io/egjs-axes/release/latest/doc/eg.Axes.html#event:change change} 이벤트\r\n * @param {function} [ctx.transitTo] A function for changing current state to other state다른 상태로 변경하기 위한 함수\r\n * @return {void}\r\n */\n\n\n __proto.onChange = function (ctx) {// DO NOTHING\n };\n /**\r\n * An event handler for Axes's {@link https://naver.github.io/egjs-axes/release/latest/doc/eg.Axes.html#event:release release} event\r\n * @ko Axes의 {@link https://naver.github.io/egjs-axes/release/latest/doc/eg.Axes.html#event:release release} 이벤트 핸들러\r\n * @param {object} [ctx] Event context이벤트 콘텍스트\r\n * @param {Flicking} [ctx.flicking] An instance of FlickingFlicking 인스턴스\r\n * @param {object} [ctx.axesEvent] A {@link https://naver.github.io/egjs-axes/release/latest/doc/eg.Axes.html#event:release release} event of Axes\r\n * Axes의 {@link https://naver.github.io/egjs-axes/release/latest/doc/eg.Axes.html#event:release release} 이벤트\r\n * @param {function} [ctx.transitTo] A function for changing current state to other state다른 상태로 변경하기 위한 함수\r\n * @return {void}\r\n */\n\n\n __proto.onRelease = function (ctx) {// DO NOTHING\n };\n /**\r\n * An event handler for Axes's {@link https://naver.github.io/egjs-axes/release/latest/doc/eg.Axes.html#event:animationEnd animationEnd} event\r\n * @ko Axes의 {@link https://naver.github.io/egjs-axes/release/latest/doc/eg.Axes.html#event:animationEnd animationEnd} 이벤트 핸들러\r\n * @param {object} [ctx] Event context이벤트 콘텍스트\r\n * @param {Flicking} [ctx.flicking] An instance of FlickingFlicking 인스턴스\r\n * @param {object} [ctx.axesEvent] A {@link https://naver.github.io/egjs-axes/release/latest/doc/eg.Axes.html#event:animationEnd animationEnd} event of Axes\r\n * Axes의 {@link https://naver.github.io/egjs-axes/release/latest/doc/eg.Axes.html#event:animationEnd animationEnd} 이벤트\r\n * @param {function} [ctx.transitTo] A function for changing current state to other state다른 상태로 변경하기 위한 함수\r\n * @return {void}\r\n */\n\n\n __proto.onAnimationEnd = function (ctx) {// DO NOTHING\n };\n /**\r\n * An event handler for Axes's {@link https://naver.github.io/egjs-axes/release/latest/doc/eg.Axes.html#event:finish finish} event\r\n * @ko Axes의 {@link https://naver.github.io/egjs-axes/release/latest/doc/eg.Axes.html#event:finish finish} 이벤트 핸들러\r\n * @param {object} [ctx] Event context이벤트 콘텍스트\r\n * @param {Flicking} [ctx.flicking] An instance of FlickingFlicking 인스턴스\r\n * @param {object} [ctx.axesEvent] A {@link https://naver.github.io/egjs-axes/release/latest/doc/eg.Axes.html#event:finish finish} event of AxesAxes의 {@link https://naver.github.io/egjs-axes/release/latest/doc/eg.Axes.html#event:finish finish} 이벤트\r\n * @param {function} [ctx.transitTo] A function for changing current state to other state다른 상태로 변경하기 위한 함수\r\n * @return {void}\r\n */\n\n\n __proto.onFinish = function (ctx) {// DO NOTHING\n };\n\n __proto._moveToChangedPosition = function (ctx) {\n var flicking = ctx.flicking,\n axesEvent = ctx.axesEvent,\n transitTo = ctx.transitTo;\n var delta = axesEvent.delta[POSITION_KEY];\n\n if (!delta) {\n return;\n }\n\n this._delta += delta;\n var camera = flicking.camera;\n var prevPosition = camera.position;\n var position = axesEvent.pos[POSITION_KEY];\n var newPosition = flicking.circularEnabled ? circulatePosition(position, camera.range.min, camera.range.max) : position;\n void camera.lookAt(newPosition);\n var moveEvent = new ComponentEvent(EVENTS.MOVE, {\n isTrusted: axesEvent.isTrusted,\n holding: this.holding,\n direction: getDirection(0, axesEvent.delta[POSITION_KEY]),\n axesEvent: axesEvent\n });\n flicking.trigger(moveEvent);\n\n if (moveEvent.isCanceled()) {\n // Return to previous position\n void camera.lookAt(prevPosition);\n transitTo(STATE_TYPE.DISABLED);\n }\n };\n\n return State;\n}();\n\n/**\r\n * A default state when there's no user input and no animation's playing\r\n * @ko 사용자의 입력이 없고, 애니메이션이 동작하고있지 않은 기본 상태\r\n * @internal\r\n */\n\nvar IdleState =\n/*#__PURE__*/\nfunction (_super) {\n __extends(IdleState, _super);\n\n function IdleState() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /**\r\n * Whether user is clicking or touching\r\n * @ko 현재 사용자가 클릭/터치중인지 여부\r\n * @type {false}\r\n * @readonly\r\n */\n\n\n _this.holding = false;\n /**\r\n * Whether Flicking's animating\r\n * @ko 현재 애니메이션 동작 여부\r\n * @type {false}\r\n * @readonly\r\n */\n\n _this.animating = false;\n return _this;\n }\n\n var __proto = IdleState.prototype;\n\n __proto.onEnter = function () {\n this._delta = 0;\n };\n\n __proto.onHold = function (ctx) {\n // Shouldn't do any action until any panels on flicking area\n var flicking = ctx.flicking,\n axesEvent = ctx.axesEvent,\n transitTo = ctx.transitTo;\n\n if (flicking.renderer.panelCount <= 0) {\n transitTo(STATE_TYPE.DISABLED);\n return;\n }\n\n var holdStartEvent = new ComponentEvent(EVENTS.HOLD_START, {\n axesEvent: axesEvent\n });\n flicking.trigger(holdStartEvent);\n\n if (holdStartEvent.isCanceled()) {\n transitTo(STATE_TYPE.DISABLED);\n } else {\n transitTo(STATE_TYPE.HOLDING);\n }\n }; // By methods call\n\n\n __proto.onChange = function (ctx) {\n var flicking = ctx.flicking,\n axesEvent = ctx.axesEvent,\n transitTo = ctx.transitTo;\n var controller = flicking.control.controller;\n var animatingContext = controller.animatingContext;\n var moveStartEvent = new ComponentEvent(EVENTS.MOVE_START, {\n isTrusted: axesEvent.isTrusted,\n holding: this.holding,\n direction: getDirection(animatingContext.start, animatingContext.end),\n axesEvent: axesEvent\n });\n flicking.trigger(moveStartEvent);\n\n if (moveStartEvent.isCanceled()) {\n transitTo(STATE_TYPE.DISABLED);\n } else {\n // Trigger AnimatingState's onChange, to trigger \"move\" event immediately\n transitTo(STATE_TYPE.ANIMATING).onChange(ctx);\n }\n };\n\n return IdleState;\n}(State);\n\n/**\r\n * A state that activates when user's holding the Flicking area, but not moved a single pixel yet\r\n * @ko 사용자의 입력이 시작되었으나, 아직 움직이지는 않은 상태\r\n * @internal\r\n */\n\nvar HoldingState =\n/*#__PURE__*/\nfunction (_super) {\n __extends(HoldingState, _super);\n\n function HoldingState() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /**\r\n * Whether user is clicking or touching\r\n * @ko 현재 사용자가 클릭/터치중인지 여부\r\n * @type {true}\r\n * @readonly\r\n */\n\n\n _this.holding = true;\n /**\r\n * Whether Flicking's animating\r\n * @ko 현재 애니메이션 동작 여부\r\n * @type {false}\r\n * @readonly\r\n */\n\n _this.animating = false;\n _this._releaseEvent = null;\n return _this;\n }\n\n var __proto = HoldingState.prototype;\n\n __proto.onChange = function (ctx) {\n var flicking = ctx.flicking,\n axesEvent = ctx.axesEvent,\n transitTo = ctx.transitTo;\n var inputEvent = axesEvent.inputEvent;\n var offset = flicking.horizontal ? inputEvent.offsetX : inputEvent.offsetY;\n var moveStartEvent = new ComponentEvent(EVENTS.MOVE_START, {\n isTrusted: axesEvent.isTrusted,\n holding: this.holding,\n direction: getDirection(0, -offset),\n axesEvent: axesEvent\n });\n flicking.trigger(moveStartEvent);\n\n if (moveStartEvent.isCanceled()) {\n transitTo(STATE_TYPE.DISABLED);\n } else {\n // Trigger DraggingState's onChange, to trigger \"move\" event immediately\n transitTo(STATE_TYPE.DRAGGING).onChange(ctx);\n }\n };\n\n __proto.onRelease = function (ctx) {\n var flicking = ctx.flicking,\n axesEvent = ctx.axesEvent,\n transitTo = ctx.transitTo;\n flicking.trigger(new ComponentEvent(EVENTS.HOLD_END, {\n axesEvent: axesEvent\n }));\n\n if (axesEvent.delta.flick !== 0) {\n // Sometimes \"release\" event on axes triggered before \"change\" event\n // Especially if user flicked panel fast in really short amount of time\n // if delta is not zero, that means above case happened.\n // Event flow should be HOLD_START -> MOVE_START -> MOVE -> HOLD_END\n // At least one move event should be included between holdStart and holdEnd\n axesEvent.setTo({\n flick: flicking.camera.position\n }, 0);\n transitTo(STATE_TYPE.IDLE);\n return;\n } // Can't handle select event here,\n // As \"finish\" axes event happens\n\n\n this._releaseEvent = axesEvent;\n };\n\n __proto.onFinish = function (ctx) {\n var e_1, _a;\n\n var flicking = ctx.flicking,\n transitTo = ctx.transitTo; // Should transite to IDLE state before select event\n // As user expects hold is already finished\n\n transitTo(STATE_TYPE.IDLE);\n\n if (!this._releaseEvent) {\n return;\n } // Handle release event here\n // To prevent finish event called twice\n\n\n var releaseEvent = this._releaseEvent; // Static click\n\n /* eslint-disable @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access */\n\n var srcEvent = releaseEvent.inputEvent.srcEvent;\n var clickedElement;\n\n if (srcEvent.type === \"touchend\") {\n var touchEvent = srcEvent;\n var touch = touchEvent.changedTouches[0];\n clickedElement = document.elementFromPoint(touch.clientX, touch.clientY);\n } else {\n clickedElement = srcEvent.target;\n }\n /* eslint-enable */\n\n\n var panels = flicking.renderer.panels;\n var clickedPanel = null;\n\n try {\n for (var panels_1 = __values(panels), panels_1_1 = panels_1.next(); !panels_1_1.done; panels_1_1 = panels_1.next()) {\n var panel = panels_1_1.value;\n\n if (panel.contains(clickedElement)) {\n clickedPanel = panel;\n break;\n }\n }\n } catch (e_1_1) {\n e_1 = {\n error: e_1_1\n };\n } finally {\n try {\n if (panels_1_1 && !panels_1_1.done && (_a = panels_1.return)) _a.call(panels_1);\n } finally {\n if (e_1) throw e_1.error;\n }\n }\n\n if (clickedPanel) {\n var cameraPosition = flicking.camera.position;\n var clickedPanelPosition = clickedPanel.position;\n flicking.trigger(new ComponentEvent(EVENTS.SELECT, {\n index: clickedPanel.index,\n panel: clickedPanel,\n // Direction to the clicked panel\n direction: getDirection(cameraPosition, clickedPanelPosition)\n }));\n }\n };\n\n return HoldingState;\n}(State);\n\n/**\r\n * A state that activates when user's dragging the Flicking area\r\n * @ko 사용자가 드래깅중인 상태\r\n * @internal\r\n */\n\nvar DraggingState =\n/*#__PURE__*/\nfunction (_super) {\n __extends(DraggingState, _super);\n\n function DraggingState() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /**\r\n * Whether user is clicking or touching\r\n * @ko 현재 사용자가 클릭/터치중인지 여부\r\n * @type {true}\r\n * @readonly\r\n */\n\n\n _this.holding = true;\n /**\r\n * Whether Flicking's animating\r\n * @ko 현재 애니메이션 동작 여부\r\n * @type {true}\r\n * @readonly\r\n */\n\n _this.animating = true;\n return _this;\n }\n\n var __proto = DraggingState.prototype;\n\n __proto.onChange = function (ctx) {\n this._moveToChangedPosition(ctx);\n };\n\n __proto.onRelease = function (ctx) {\n var flicking = ctx.flicking,\n axesEvent = ctx.axesEvent,\n transitTo = ctx.transitTo; // Update last position to cope with Axes's animating behavior\n // Axes uses start position when animation start\n\n flicking.trigger(new ComponentEvent(EVENTS.HOLD_END, {\n axesEvent: axesEvent\n }));\n\n if (flicking.renderer.panelCount <= 0) {\n // There're no panels\n transitTo(STATE_TYPE.IDLE);\n return;\n }\n\n transitTo(STATE_TYPE.ANIMATING);\n var control = flicking.control;\n var position = axesEvent.destPos[POSITION_KEY];\n var duration = Math.max(axesEvent.duration, flicking.duration);\n void control.moveToPosition(position, duration, axesEvent);\n };\n\n return DraggingState;\n}(State);\n\n/**\r\n * A state that activates when Flicking's animating by user input or method call\r\n * @ko 사용자 입력이나 메소드 호출에 의해 Flicking의 애니메이션이 동작중인 상태\r\n * @internal\r\n */\n\nvar AnimatingState =\n/*#__PURE__*/\nfunction (_super) {\n __extends(AnimatingState, _super);\n\n function AnimatingState() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /**\r\n * Whether user is clicking or touching\r\n * @ko 현재 사용자가 클릭/터치중인지 여부\r\n * @type {false}\r\n * @readonly\r\n */\n\n\n _this.holding = false;\n /**\r\n * Whether Flicking's animating\r\n * @ko 현재 애니메이션 동작 여부\r\n * @type {true}\r\n * @readonly\r\n */\n\n _this.animating = true;\n return _this;\n }\n\n var __proto = AnimatingState.prototype;\n\n __proto.onHold = function (ctx) {\n var flicking = ctx.flicking,\n axesEvent = ctx.axesEvent,\n transitTo = ctx.transitTo;\n this._delta = 0;\n flicking.control.updateInput();\n var holdStartEvent = new ComponentEvent(EVENTS.HOLD_START, {\n axesEvent: axesEvent\n });\n flicking.trigger(holdStartEvent);\n\n if (holdStartEvent.isCanceled()) {\n transitTo(STATE_TYPE.DISABLED);\n } else {\n transitTo(STATE_TYPE.DRAGGING);\n }\n };\n\n __proto.onChange = function (ctx) {\n this._moveToChangedPosition(ctx);\n };\n\n __proto.onFinish = function (ctx) {\n var flicking = ctx.flicking,\n axesEvent = ctx.axesEvent,\n transitTo = ctx.transitTo;\n transitTo(STATE_TYPE.IDLE);\n var controller = flicking.control.controller;\n var animatingContext = controller.animatingContext;\n flicking.trigger(new ComponentEvent(EVENTS.MOVE_END, {\n isTrusted: axesEvent.isTrusted,\n direction: getDirection(animatingContext.start, animatingContext.end),\n axesEvent: axesEvent\n }));\n };\n\n return AnimatingState;\n}(State);\n\n/**\r\n * A state that activates when Flicking is stopped by event's `stop` method\r\n * @ko 이벤트의 `stop`호출에 의해 Flicking이 정지된 상태\r\n * @internal\r\n */\n\nvar DisabledState =\n/*#__PURE__*/\nfunction (_super) {\n __extends(DisabledState, _super);\n\n function DisabledState() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /**\r\n * Whether user is clicking or touching\r\n * @ko 현재 사용자가 클릭/터치중인지 여부\r\n * @type {false}\r\n * @readonly\r\n */\n\n\n _this.holding = false;\n /**\r\n * Whether Flicking's animating\r\n * @ko 현재 애니메이션 동작 여부\r\n * @type {true}\r\n * @readonly\r\n */\n\n _this.animating = true;\n return _this;\n }\n\n var __proto = DisabledState.prototype;\n\n __proto.onAnimationEnd = function (ctx) {\n var transitTo = ctx.transitTo;\n transitTo(STATE_TYPE.IDLE);\n };\n\n __proto.onChange = function (ctx) {\n var axesEvent = ctx.axesEvent,\n transitTo = ctx.transitTo; // Can stop Axes's change event\n\n axesEvent.stop();\n transitTo(STATE_TYPE.IDLE);\n };\n\n __proto.onRelease = function (ctx) {\n var axesEvent = ctx.axesEvent,\n transitTo = ctx.transitTo; // This is needed when stopped hold start event\n\n if (axesEvent.delta.flick === 0) {\n transitTo(STATE_TYPE.IDLE);\n }\n };\n\n return DisabledState;\n}(State);\n\n/**\r\n * @internal\r\n */\n\nvar StateMachine =\n/*#__PURE__*/\nfunction () {\n function StateMachine() {\n var _this = this;\n\n this.transitTo = function (nextStateType) {\n var nextState;\n\n switch (nextStateType) {\n case STATE_TYPE.IDLE:\n nextState = new IdleState();\n break;\n\n case STATE_TYPE.HOLDING:\n nextState = new HoldingState();\n break;\n\n case STATE_TYPE.DRAGGING:\n nextState = new DraggingState();\n break;\n\n case STATE_TYPE.ANIMATING:\n nextState = new AnimatingState();\n break;\n\n case STATE_TYPE.DISABLED:\n nextState = new DisabledState();\n break;\n }\n\n nextState.onEnter(_this._state);\n _this._state = nextState;\n return _this._state;\n };\n\n this._state = new IdleState();\n }\n\n var __proto = StateMachine.prototype;\n Object.defineProperty(__proto, \"state\", {\n get: function () {\n return this._state;\n },\n enumerable: false,\n configurable: true\n });\n\n __proto.fire = function (eventType, externalCtx) {\n var currentState = this._state;\n\n var ctx = __assign(__assign({}, externalCtx), {\n transitTo: this.transitTo\n });\n\n switch (eventType) {\n case EVENT.HOLD:\n currentState.onHold(ctx);\n break;\n\n case EVENT.CHANGE:\n currentState.onChange(ctx);\n break;\n\n case EVENT.RELEASE:\n currentState.onRelease(ctx);\n break;\n\n case EVENT.ANIMATION_END:\n currentState.onAnimationEnd(ctx);\n break;\n\n case EVENT.FINISH:\n currentState.onFinish(ctx);\n break;\n }\n };\n\n return StateMachine;\n}();\n\n/*\r\n * Copyright (c) 2015 NAVER Corp.\r\n * egjs projects are licensed under the MIT license\r\n */\n/**\r\n * A controller that handles the {@link https://naver.github.io/egjs-axes/ @egjs/axes} events\r\n * @ko {@link https://naver.github.io/egjs-axes/ @egjs/axes}의 이벤트를 처리하는 컨트롤러 컴포넌트\r\n * @internal\r\n */\n\nvar AxesController =\n/*#__PURE__*/\nfunction () {\n /** */\n function AxesController() {\n var _this = this;\n\n this._onAxesHold = function () {\n _this._dragged = false;\n };\n\n this._onAxesChange = function () {\n _this._dragged = true;\n };\n\n this._preventClickWhenDragged = function (e) {\n if (_this._dragged) {\n e.preventDefault();\n e.stopPropagation();\n }\n\n _this._dragged = false;\n };\n\n this._resetInternalValues();\n\n this._stateMachine = new StateMachine();\n }\n\n var __proto = AxesController.prototype;\n Object.defineProperty(__proto, \"axes\", {\n /**\r\n * An {@link https://naver.github.io/egjs-axes/release/latest/doc/eg.Axes.html Axes} instance\r\n * @ko {@link https://naver.github.io/egjs-axes/release/latest/doc/eg.Axes.html Axes}의 인스턴스\r\n * @type {Axes}\r\n * @see https://naver.github.io/egjs-axes/release/latest/doc/eg.Axes.html\r\n * @readonly\r\n */\n get: function () {\n return this._axes;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(__proto, \"state\", {\n /**\r\n * A activated {@link State} that shows the current status of the user input or the animation\r\n * @ko 현재 활성화된 {@link State} 인스턴스로 사용자 입력 또는 애니메이션 상태를 나타냅니다\r\n * @type {State}\r\n */\n get: function () {\n return this._stateMachine.state;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(__proto, \"animatingContext\", {\n /**\r\n * A context of the current animation playing\r\n * @ko 현재 재생중인 애니메이션 정보\r\n * @type {object}\r\n * @property {number} start A start position of the animation애니메이션 시작 지점\r\n * @property {number} end A end position of the animation애니메이션 끝 지점\r\n * @property {number} offset camera offset카메라 오프셋\r\n * @readonly\r\n */\n get: function () {\n return this._animatingContext;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(__proto, \"controlParams\", {\n /**\r\n * A current control parameters of the Axes instance\r\n * @ko 활성화된 현재 Axes 패러미터들\r\n * @type {ControlParams}\r\n */\n get: function () {\n var axes = this._axes;\n\n if (!axes) {\n return {\n range: {\n min: 0,\n max: 0\n },\n position: 0,\n circular: false\n };\n }\n\n var axis = axes.axis[POSITION_KEY];\n return {\n range: {\n min: axis.range[0],\n max: axis.range[1]\n },\n circular: axis.circular[0],\n position: this.position\n };\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(__proto, \"enabled\", {\n /**\r\n * A Boolean indicating whether the user input is enabled\r\n * @ko 현재 사용자 입력이 활성화되었는지를 나타내는 값\r\n * @type {boolean}\r\n * @readonly\r\n */\n get: function () {\n var _a, _b;\n\n return (_b = (_a = this._panInput) === null || _a === void 0 ? void 0 : _a.isEnable()) !== null && _b !== void 0 ? _b : false;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(__proto, \"position\", {\n /**\r\n * Current position value in {@link https://naver.github.io/egjs-axes/release/latest/doc/eg.Axes.html Axes} instance\r\n * @ko {@link https://naver.github.io/egjs-axes/release/latest/doc/eg.Axes.html Axes} 인스턴스 내부의 현재 좌표 값\r\n * @type {number}\r\n * @readonly\r\n */\n get: function () {\n var _a, _b;\n\n return (_b = (_a = this._axes) === null || _a === void 0 ? void 0 : _a.get([POSITION_KEY])[POSITION_KEY]) !== null && _b !== void 0 ? _b : 0;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(__proto, \"range\", {\n /**\r\n * Current range value in {@link https://naver.github.io/egjs-axes/release/latest/doc/eg.Axes.html Axes} instance\r\n * @ko {@link https://naver.github.io/egjs-axes/release/latest/doc/eg.Axes.html Axes} 인스턴스 내부의 현재 이동 범위 값\r\n * @type {number[]}\r\n * @readonly\r\n */\n get: function () {\n var _a, _b;\n\n return (_b = (_a = this._axes) === null || _a === void 0 ? void 0 : _a.axis[POSITION_KEY].range) !== null && _b !== void 0 ? _b : [0, 0];\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(__proto, \"bounce\", {\n /**\r\n * Actual bounce size(px)\r\n * @ko 적용된 bounce 크기(px 단위)\r\n * @type {number[]}\r\n * @readonly\r\n */\n get: function () {\n var _a;\n\n return (_a = this._axes) === null || _a === void 0 ? void 0 : _a.axis[POSITION_KEY].bounce;\n },\n enumerable: false,\n configurable: true\n });\n /**\r\n * Initialize AxesController\r\n * @ko AxesController를 초기화합니다\r\n * @param {Flicking} flicking An instance of Flicking\r\n * @chainable\r\n * @return {this}\r\n */\n\n __proto.init = function (flicking) {\n var _a;\n\n var _this = this;\n\n this._flicking = flicking;\n this._axes = new Axes((_a = {}, _a[POSITION_KEY] = {\n range: [0, 0],\n circular: false,\n bounce: [0, 0]\n }, _a), {\n deceleration: flicking.deceleration,\n interruptable: flicking.interruptable,\n easing: flicking.easing\n });\n this._panInput = new PanInput(flicking.viewport.element, {\n inputType: flicking.inputType,\n iOSEdgeSwipeThreshold: flicking.iOSEdgeSwipeThreshold,\n scale: flicking.horizontal ? [-1, 0] : [0, -1],\n releaseOnScroll: true\n });\n var axes = this._axes;\n axes.connect(flicking.horizontal ? [POSITION_KEY, \"\"] : [\"\", POSITION_KEY], this._panInput);\n\n var _loop_1 = function (key) {\n var eventType = EVENT[key];\n axes.on(eventType, function (e) {\n _this._stateMachine.fire(eventType, {\n flicking: flicking,\n axesEvent: e\n });\n });\n };\n\n for (var key in EVENT) {\n _loop_1(key);\n }\n\n return this;\n };\n /**\r\n * Destroy AxesController and return to initial state\r\n * @ko AxesController를 초기 상태로 되돌립니다\r\n * @return {void}\r\n */\n\n\n __proto.destroy = function () {\n var _a, _b;\n\n this.removePreventClickHandler();\n (_a = this._axes) === null || _a === void 0 ? void 0 : _a.destroy();\n (_b = this._panInput) === null || _b === void 0 ? void 0 : _b.destroy();\n\n this._resetInternalValues();\n };\n /**\r\n * Enable input from the user (mouse/touch)\r\n * @ko 사용자의 입력(마우스/터치)를 활성화합니다\r\n * @chainable\r\n * @return {this}\r\n */\n\n\n __proto.enable = function () {\n var _a;\n\n (_a = this._panInput) === null || _a === void 0 ? void 0 : _a.enable();\n return this;\n };\n /**\r\n * Disable input from the user (mouse/touch)\r\n * @ko 사용자의 입력(마우스/터치)를 막습니다\r\n * @chainable\r\n * @return {this}\r\n */\n\n\n __proto.disable = function () {\n var _a;\n\n (_a = this._panInput) === null || _a === void 0 ? void 0 : _a.disable();\n return this;\n };\n /**\r\n * Update {@link https://naver.github.io/egjs-axes/ @egjs/axes}'s state\r\n * @ko {@link https://naver.github.io/egjs-axes/ @egjs/axes}의 상태를 갱신합니다\r\n * @chainable\r\n * @throws {FlickingError}\r\n * {@link ERROR_CODE NOT_ATTACHED_TO_FLICKING} When {@link AxesController#init init} is not called before\r\n * {@link AxesController#init init}이 이전에 호출되지 않은 경우\r\n * @return {this}\r\n */\n\n\n __proto.update = function (controlParams) {\n var _a;\n\n var flicking = getFlickingAttached(this._flicking, \"Control\");\n var camera = flicking.camera;\n var axes = this._axes;\n var axis = axes.axis[POSITION_KEY];\n axis.circular = [controlParams.circular, controlParams.circular];\n axis.range = [controlParams.range.min, controlParams.range.max];\n axis.bounce = parseBounce(flicking.bounce, camera.size);\n axes.axm.set((_a = {}, _a[POSITION_KEY] = controlParams.position, _a));\n return this;\n };\n /**\r\n * Attach a handler to the camera element to prevent click events during animation\r\n * @ko 카메라 엘리먼트에 애니메이션 도중에 클릭 이벤트를 방지하는 핸들러를 부착합니다\r\n * @return {this}\r\n */\n\n\n __proto.addPreventClickHandler = function () {\n var flicking = getFlickingAttached(this._flicking, \"Control\");\n var axes = this._axes;\n var cameraEl = flicking.camera.element;\n axes.on(EVENT.HOLD, this._onAxesHold);\n axes.on(EVENT.CHANGE, this._onAxesChange);\n cameraEl.addEventListener(\"click\", this._preventClickWhenDragged, true);\n return this;\n };\n /**\r\n * Detach a handler to the camera element to prevent click events during animation\r\n * @ko 카메라 엘리먼트에 애니메이션 도중에 클릭 이벤트를 방지하는 핸들러를 탈착합니다\r\n * @return {this}\r\n */\n\n\n __proto.removePreventClickHandler = function () {\n var flicking = getFlickingAttached(this._flicking, \"Control\");\n var axes = this._axes;\n var cameraEl = flicking.camera.element;\n axes.off(EVENT.HOLD, this._onAxesHold);\n axes.off(EVENT.CHANGE, this._onAxesChange);\n cameraEl.removeEventListener(\"click\", this._preventClickWhenDragged, true);\n return this;\n };\n /**\r\n * Run Axes's {@link https://naver.github.io/egjs-axes/release/latest/doc/eg.Axes.html#setTo setTo} using the given position\r\n * @ko Axes의 {@link https://naver.github.io/egjs-axes/release/latest/doc/eg.Axes.html#setTo setTo} 메소드를 주어진 좌표를 이용하여 수행합니다\r\n * @param {number} position A position to move이동할 좌표\r\n * @param {number} duration Duration of the animation (unit: ms)애니메이션 진행 시간 (단위: ms)\r\n * @param {number} [axesEvent] If provided, it'll use its {@link https://naver#github#io/egjs-axes/release/latest/doc/eg#Axes#html#setTo setTo} method instead이 값이 주어졌을 경우, 해당 이벤트의 {@link https://naver#github#io/egjs-axes/release/latest/doc/eg#Axes#html#setTo setTo} 메소드를 대신해서 사용합니다.\r\n * @throws {FlickingError}\r\n * |code|condition|\r\n * |---|---|\r\n * |{@link ERROR_CODE NOT_ATTACHED_TO_FLICKING}|When {@link Control#init init} is not called before|\r\n * |{@link ERROR_CODE ANIMATION_INTERRUPTED}|When the animation is interrupted by user input|\r\n * \r\n *\r\n * |code|condition|\r\n * |---|---|\r\n * |{@link ERROR_CODE NOT_ATTACHED_TO_FLICKING}|{@link Control#init init}이 이전에 호출되지 않은 경우|\r\n * |{@link ERROR_CODE ANIMATION_INTERRUPTED}|사용자 입력에 의해 애니메이션이 중단된 경우|\r\n *\r\n * \r\n * @return {Promise} A Promise which will be resolved after reaching the target position해당 좌표 도달시에 resolve되는 Promise\r\n */\n\n\n __proto.animateTo = function (position, duration, axesEvent) {\n var _a;\n\n var _this = this;\n\n var axes = this._axes;\n\n if (!axes) {\n return Promise.reject(new FlickingError(MESSAGE.NOT_ATTACHED_TO_FLICKING(\"Control\"), CODE.NOT_ATTACHED_TO_FLICKING));\n }\n\n var startPos = axes.get([POSITION_KEY])[POSITION_KEY];\n\n if (startPos === position) {\n var flicking = getFlickingAttached(this._flicking, \"Control\");\n return flicking.camera.lookAt(position);\n }\n\n this._animatingContext = {\n start: startPos,\n end: position,\n offset: 0\n };\n\n var animate = function () {\n var _a, _b;\n\n var resetContext = function () {\n _this._animatingContext = {\n start: 0,\n end: 0,\n offset: 0\n };\n };\n\n axes.once(EVENT.FINISH, resetContext);\n\n if (axesEvent) {\n axesEvent.setTo((_a = {}, _a[POSITION_KEY] = position, _a), duration);\n } else {\n axes.setTo((_b = {}, _b[POSITION_KEY] = position, _b), duration);\n }\n };\n\n if (duration === 0) {\n var flicking = getFlickingAttached(this._flicking, \"Control\");\n var camera = flicking.camera;\n animate();\n var newPos = flicking.circularEnabled ? circulatePosition(position, camera.range.min, camera.range.max) : position;\n axes.axm.set((_a = {}, _a[POSITION_KEY] = newPos, _a));\n return Promise.resolve();\n } else {\n return new Promise(function (resolve, reject) {\n var animationFinishHandler = function () {\n axes.off(EVENT.HOLD, interruptionHandler);\n resolve();\n };\n\n var interruptionHandler = function () {\n axes.off(EVENT.FINISH, animationFinishHandler);\n reject(new FlickingError(MESSAGE.ANIMATION_INTERRUPTED, CODE.ANIMATION_INTERRUPTED));\n };\n\n axes.once(EVENT.FINISH, animationFinishHandler);\n axes.once(EVENT.HOLD, interruptionHandler);\n animate();\n });\n }\n };\n\n __proto._resetInternalValues = function () {\n this._flicking = null;\n this._axes = null;\n this._panInput = null;\n this._animatingContext = {\n start: 0,\n end: 0,\n offset: 0\n };\n this._dragged = false;\n };\n\n return AxesController;\n}();\n\n/**\r\n * A component that manages inputs and animation of Flicking\r\n * @ko Flicking의 입력 장치 & 애니메이션을 담당하는 컴포넌트\r\n */\n\nvar Control =\n/*#__PURE__*/\nfunction () {\n /** */\n function Control() {\n this._flicking = null;\n this._controller = new AxesController();\n this._activePanel = null;\n }\n\n var __proto = Control.prototype;\n Object.defineProperty(__proto, \"controller\", {\n /**\r\n * A controller that handles the {@link https://naver.github.io/egjs-axes/ @egjs/axes} events\r\n * @ko {@link https://naver.github.io/egjs-axes/ @egjs/axes}의 이벤트를 처리하는 컨트롤러 컴포넌트\r\n * @type {AxesController}\r\n * @readonly\r\n */\n get: function () {\n return this._controller;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(__proto, \"activeIndex\", {\n /**\r\n * Index number of the {@link Flicking#currentPanel currentPanel}\r\n * @ko {@link Flicking#currentPanel currentPanel}의 인덱스 번호\r\n * @type {number}\r\n * @default 0\r\n * @readonly\r\n */\n get: function () {\n var _a, _b;\n\n return (_b = (_a = this._activePanel) === null || _a === void 0 ? void 0 : _a.index) !== null && _b !== void 0 ? _b : -1;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(__proto, \"activePanel\", {\n /**\r\n * An active panel\r\n * @ko 현재 선택된 패널\r\n * @type {Panel | null}\r\n * @readonly\r\n */\n get: function () {\n return this._activePanel;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(__proto, \"animating\", {\n /**\r\n * Whether Flicking's animating\r\n * @ko 현재 애니메이션 동작 여부\r\n * @type {boolean}\r\n * @readonly\r\n */\n get: function () {\n return this._controller.state.animating;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(__proto, \"holding\", {\n /**\r\n * Whether user is clicking or touching\r\n * @ko 현재 사용자가 클릭/터치중인지 여부\r\n * @type {boolean}\r\n * @readonly\r\n */\n get: function () {\n return this._controller.state.holding;\n },\n enumerable: false,\n configurable: true\n });\n /**\r\n * Initialize Control\r\n * @ko Control을 초기화합니다\r\n * @param {Flicking} flicking An instance of {@link Flicking}Flicking의 인스턴스\r\n * @chainable\r\n * @return {this}\r\n */\n\n __proto.init = function (flicking) {\n this._flicking = flicking;\n\n this._controller.init(flicking);\n\n return this;\n };\n /**\r\n * Destroy Control and return to initial state\r\n * @ko Control을 초기 상태로 되돌립니다\r\n * @return {void}\r\n */\n\n\n __proto.destroy = function () {\n this._controller.destroy();\n\n this._flicking = null;\n this._activePanel = null;\n };\n /**\r\n * Enable input from the user (mouse/touch)\r\n * @ko 사용자의 입력(마우스/터치)를 활성화합니다\r\n * @chainable\r\n * @return {this}\r\n */\n\n\n __proto.enable = function () {\n this._controller.enable();\n\n return this;\n };\n /**\r\n * Disable input from the user (mouse/touch)\r\n * @ko 사용자의 입력(마우스/터치)를 막습니다\r\n * @chainable\r\n * @return {this}\r\n */\n\n\n __proto.disable = function () {\n this._controller.disable();\n\n return this;\n };\n /**\r\n * Update position after resizing\r\n * @ko resize 이후에 position을 업데이트합니다\r\n * @param {number} progressInPanel Previous camera's progress in active panel before resizeResize 이전 현재 선택된 패널 내에서의 카메라 progress 값\r\n * @throws {FlickingError}\r\n * {@link ERROR_CODE NOT_ATTACHED_TO_FLICKING} When {@link Camera#init init} is not called before\r\n * {@link ERROR_CODE NOT_ATTACHED_TO_FLICKING} {@link Camera#init init}이 이전에 호출되지 않은 경우\r\n * @chainable\r\n * @return {Promise}\r\n */\n\n\n __proto.updatePosition = function (_progressInPanel) {\n return __awaiter(this, void 0, void 0, function () {\n var flicking, camera, activePanel;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n flicking = getFlickingAttached(this._flicking, \"Control\");\n camera = flicking.camera;\n activePanel = this._activePanel;\n if (!activePanel) return [3\n /*break*/\n , 2];\n return [4\n /*yield*/\n , camera.lookAt(camera.clampToReachablePosition(activePanel.position))];\n\n case 1:\n _a.sent();\n\n _a.label = 2;\n\n case 2:\n return [2\n /*return*/\n ];\n }\n });\n });\n };\n /**\r\n * Update {@link Control#controller controller}'s state\r\n * @ko {@link Control#controller controller}의 내부 상태를 갱신합니다\r\n * @chainable\r\n * @return {this}\r\n */\n\n\n __proto.updateInput = function () {\n var flicking = getFlickingAttached(this._flicking, \"Control\");\n var camera = flicking.camera;\n\n this._controller.update(camera.controlParams);\n\n return this;\n };\n /**\r\n * Reset {@link Control#activePanel activePanel} to `null`\r\n * @ko {@link Control#activePanel activePanel}을 `null`로 초기화합니다\r\n * @chainable\r\n * @return {this}\r\n */\n\n\n __proto.resetActive = function () {\n this._activePanel = null;\n return this;\n };\n /**\r\n * Move {@link Camera} to the given panel\r\n * @ko {@link Camera}를 해당 패널 위로 이동합니다\r\n * @param {Panel} panel The target panel to move이동할 패널\r\n * @param {object} options An options object옵션 오브젝트\r\n * @param {number} duration Duration of the animation (unit: ms)애니메이션 진행 시간 (단위: ms)\r\n * @param {object} [axesEvent] {@link https://naver.github.io/egjs-axes/release/latest/doc/eg.Axes.html#event:release release} event of {@link https://naver.github.io/egjs-axes/ Axes}\r\n * {@link https://naver.github.io/egjs-axes/ Axes}의 {@link https://naver.github.io/egjs-axes/release/latest/doc/eg.Axes.html#event:release release} 이벤트\r\n * @param {DIRECTION} [direction=DIRECTION.NONE] Direction to move, only available in the {@link Flicking#circular circular} mode이동할 방향. {@link Flicking#circular circular} 옵션 활성화시에만 사용 가능합니다\r\n * @fires Flicking#moveStart\r\n * @fires Flicking#move\r\n * @fires Flicking#moveEnd\r\n * @fires Flicking#willChange\r\n * @fires Flicking#changed\r\n * @fires Flicking#willRestore\r\n * @fires Flicking#restored\r\n * @fires Flicking#needPanel\r\n * @fires Flicking#visibleChange\r\n * @fires Flicking#reachEdge\r\n * @throws {FlickingError}\r\n * |code|condition|\r\n * |---|---|\r\n * |{@link ERROR_CODE POSITION_NOT_REACHABLE}|When the given panel is already removed or not in the Camera's {@link Camera#range range}|\r\n * |{@link ERROR_CODE NOT_ATTACHED_TO_FLICKING}|When {@link Control#init init} is not called before|\r\n * |{@link ERROR_CODE ANIMATION_INTERRUPTED}|When the animation is interrupted by user input|\r\n * |{@link ERROR_CODE STOP_CALLED_BY_USER}|When the animation is interrupted by user input|\r\n * \r\n *\r\n * |code|condition|\r\n * |---|---|\r\n * |{@link ERROR_CODE POSITION_NOT_REACHABLE}|주어진 패널이 제거되었거나, Camera의 {@link Camera#range range} 밖에 있을 경우|\r\n * |{@link ERROR_CODE NOT_ATTACHED_TO_FLICKING}|{@link Control#init init}이 이전에 호출되지 않은 경우|\r\n * |{@link ERROR_CODE ANIMATION_INTERRUPTED}|사용자 입력에 의해 애니메이션이 중단된 경우|\r\n * |{@link ERROR_CODE STOP_CALLED_BY_USER}|발생된 이벤트들 중 하나라도 `stop()`이 호출된 경우|\r\n *\r\n * \r\n * @return {Promise} A Promise which will be resolved after reaching the target panel해당 패널 도달시에 resolve되는 Promise\r\n */\n\n\n __proto.moveToPanel = function (panel, _a) {\n var duration = _a.duration,\n _b = _a.direction,\n direction = _b === void 0 ? DIRECTION.NONE : _b,\n axesEvent = _a.axesEvent;\n return __awaiter(this, void 0, void 0, function () {\n var flicking, camera, position, nearestAnchor, camPos_1, camRangeDiff, possiblePositions;\n return __generator(this, function (_c) {\n flicking = getFlickingAttached(this._flicking, \"Control\");\n camera = flicking.camera;\n position = panel.position;\n nearestAnchor = camera.findNearestAnchor(position);\n\n if (panel.removed || !nearestAnchor) {\n return [2\n /*return*/\n , Promise.reject(new FlickingError(MESSAGE.POSITION_NOT_REACHABLE(panel.position), CODE.POSITION_NOT_REACHABLE))];\n }\n\n if (!camera.canReach(panel)) {\n // Override position & panel if that panel is not reachable\n position = nearestAnchor.position;\n panel = nearestAnchor.panel;\n } else if (flicking.circularEnabled) {\n camPos_1 = this._controller.position;\n camRangeDiff = camera.rangeDiff;\n possiblePositions = [position, position + camRangeDiff, position - camRangeDiff].filter(function (pos) {\n if (direction === DIRECTION.NONE) return true;\n return direction === DIRECTION.PREV ? pos <= camPos_1 : pos >= camPos_1;\n });\n position = possiblePositions.reduce(function (nearestPosition, pos) {\n if (Math.abs(camPos_1 - pos) < Math.abs(camPos_1 - nearestPosition)) {\n return pos;\n } else {\n return nearestPosition;\n }\n }, Infinity);\n }\n\n this._triggerIndexChangeEvent(panel, panel.position, axesEvent);\n\n return [2\n /*return*/\n , this._animateToPosition({\n position: position,\n duration: duration,\n newActivePanel: panel,\n axesEvent: axesEvent\n })];\n });\n });\n };\n\n __proto._triggerIndexChangeEvent = function (panel, position, axesEvent) {\n var _a;\n\n var flicking = getFlickingAttached(this._flicking, \"Control\");\n var triggeringEvent = panel !== this._activePanel ? EVENTS.WILL_CHANGE : EVENTS.WILL_RESTORE;\n var camera = flicking.camera;\n var activePanel = this._activePanel;\n var event = new ComponentEvent(triggeringEvent, {\n index: panel.index,\n panel: panel,\n isTrusted: (axesEvent === null || axesEvent === void 0 ? void 0 : axesEvent.isTrusted) || false,\n direction: getDirection((_a = activePanel === null || activePanel === void 0 ? void 0 : activePanel.position) !== null && _a !== void 0 ? _a : camera.position, position)\n });\n flicking.trigger(event);\n\n if (event.isCanceled()) {\n throw new FlickingError(MESSAGE.STOP_CALLED_BY_USER, CODE.STOP_CALLED_BY_USER);\n }\n };\n\n __proto._animateToPosition = function (_a) {\n var position = _a.position,\n duration = _a.duration,\n newActivePanel = _a.newActivePanel,\n axesEvent = _a.axesEvent;\n return __awaiter(this, void 0, void 0, function () {\n var flicking, currentPanel, animate, isTrusted, animation;\n\n var _this = this;\n\n return __generator(this, function (_b) {\n flicking = getFlickingAttached(this._flicking, \"Control\");\n currentPanel = this._activePanel;\n\n animate = function () {\n return _this._controller.animateTo(position, duration, axesEvent);\n };\n\n isTrusted = (axesEvent === null || axesEvent === void 0 ? void 0 : axesEvent.isTrusted) || false;\n\n if (duration <= 0) {\n animation = animate();\n\n this._setActive(newActivePanel, currentPanel, isTrusted);\n\n return [2\n /*return*/\n , animation];\n } else {\n return [2\n /*return*/\n , animate().then(function () {\n return __awaiter(_this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n this._setActive(newActivePanel, currentPanel, isTrusted);\n\n return [4\n /*yield*/\n , flicking.renderer.render()];\n\n case 1:\n _a.sent();\n\n return [2\n /*return*/\n ];\n }\n });\n });\n }).catch(function (err) {\n if (axesEvent && err instanceof FlickingError && err.code === CODE.ANIMATION_INTERRUPTED) return;\n throw err;\n })];\n }\n });\n });\n };\n\n __proto._setActive = function (newActivePanel, prevActivePanel, isTrusted) {\n var _a;\n\n var flicking = getFlickingAttached(this._flicking, \"Control\");\n this._activePanel = newActivePanel;\n flicking.camera.updateAdaptiveHeight();\n\n if (newActivePanel !== prevActivePanel) {\n flicking.trigger(new ComponentEvent(EVENTS.CHANGED, {\n index: newActivePanel.index,\n panel: newActivePanel,\n prevIndex: (_a = prevActivePanel === null || prevActivePanel === void 0 ? void 0 : prevActivePanel.index) !== null && _a !== void 0 ? _a : -1,\n prevPanel: prevActivePanel,\n isTrusted: isTrusted,\n direction: prevActivePanel ? getDirection(prevActivePanel.position, newActivePanel.position) : DIRECTION.NONE\n }));\n } else {\n flicking.trigger(new ComponentEvent(EVENTS.RESTORED, {\n isTrusted: isTrusted\n }));\n }\n };\n\n return Control;\n}();\n\n/**\r\n * A data component that has actual position where the camera should be stopped at\r\n * @ko 카메라가 정지해야하는 실제 위치를 담고 있는 데이터 컴포넌트\r\n */\nvar AnchorPoint =\n/*#__PURE__*/\nfunction () {\n /**\r\n * @param {object} options An options object옵션 객체\r\n * @param {number} [options.index] Index of AnchorPointAnchorPoint의 인덱스\r\n * @param {number} [options.position] Position of AnchorPointAnchorPoint의 좌표\r\n * @param {Panel} [options.panel] A {@link Panel} instance AnchorPoint is referencing toAnchorPoint가 참조하고 있는 {@link Panel}\r\n */\n function AnchorPoint(_a) {\n var index = _a.index,\n position = _a.position,\n panel = _a.panel;\n this._index = index;\n this._pos = position;\n this._panel = panel;\n }\n\n var __proto = AnchorPoint.prototype;\n Object.defineProperty(__proto, \"index\", {\n /**\r\n * Index of AnchorPoint\r\n * @ko AnchorPoint의 인덱스\r\n * @type {number}\r\n * @readonly\r\n */\n get: function () {\n return this._index;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(__proto, \"position\", {\n /**\r\n * Position of AnchorPoint\r\n * @ko AnchorPoint의 좌표\r\n * @type {number}\r\n * @readonly\r\n */\n get: function () {\n return this._pos;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(__proto, \"panel\", {\n /**\r\n * A {@link Panel} instance AnchorPoint is referencing to\r\n * @ko AnchorPoint가 참조하고 있는 {@link Panel}\r\n * @type {Panel}\r\n * @readonly\r\n */\n get: function () {\n return this._panel;\n },\n enumerable: false,\n configurable: true\n });\n return AnchorPoint;\n}();\n\n/**\r\n * A {@link Control} that uses a release momentum to choose destination panel\r\n * @ko 입력을 중단한 시점의 가속도에 영향받아 도달할 패널을 계산하는 이동 방식을 사용하는 {@link Control}\r\n */\n\nvar SnapControl =\n/*#__PURE__*/\nfunction (_super) {\n __extends(SnapControl, _super);\n /** */\n\n\n function SnapControl(_a) {\n var _b = _a === void 0 ? {} : _a,\n _c = _b.count,\n count = _c === void 0 ? Infinity : _c;\n\n var _this = _super.call(this) || this;\n\n _this._count = count;\n return _this;\n }\n\n var __proto = SnapControl.prototype;\n Object.defineProperty(__proto, \"count\", {\n /**\r\n * Maximum number of panels can go after release\r\n * @ko 입력 중단 이후 통과하여 이동할 수 있는 패널의 최대 갯수\r\n * @type {number}\r\n * @default Infinity\r\n */\n get: function () {\n return this._count;\n },\n set: function (val) {\n this._count = val;\n },\n enumerable: false,\n configurable: true\n });\n /**\r\n * Move {@link Camera} to the given position\r\n * @ko {@link Camera}를 주어진 좌표로 이동합니다\r\n * @param {number} position The target position to move이동할 좌표\r\n * @param {number} duration Duration of the panel movement animation (unit: ms).패널 이동 애니메이션 진행 시간 (단위: ms)\r\n * @param {object} [axesEvent] {@link https://naver.github.io/egjs-axes/release/latest/doc/eg.Axes.html#event:release release} event of {@link https://naver.github.io/egjs-axes/ Axes}\r\n * {@link https://naver.github.io/egjs-axes/ Axes}의 {@link https://naver.github.io/egjs-axes/release/latest/doc/eg.Axes.html#event:release release} 이벤트\r\n * @fires Flicking#moveStart\r\n * @fires Flicking#move\r\n * @fires Flicking#moveEnd\r\n * @fires Flicking#willChange\r\n * @fires Flicking#changed\r\n * @fires Flicking#willRestore\r\n * @fires Flicking#restored\r\n * @fires Flicking#needPanel\r\n * @fires Flicking#visibleChange\r\n * @fires Flicking#reachEdge\r\n * @throws {FlickingError}\r\n * |code|condition|\r\n * |---|---|\r\n * |{@link ERROR_CODE POSITION_NOT_REACHABLE}|When the given panel is already removed or not in the Camera's {@link Camera#range range}|\r\n * |{@link ERROR_CODE NOT_ATTACHED_TO_FLICKING}|When {@link Control#init init} is not called before|\r\n * |{@link ERROR_CODE ANIMATION_INTERRUPTED}|When the animation is interrupted by user input|\r\n * |{@link ERROR_CODE STOP_CALLED_BY_USER}|When the animation is interrupted by user input|\r\n * \r\n *\r\n * |code|condition|\r\n * |---|---|\r\n * |{@link ERROR_CODE POSITION_NOT_REACHABLE}|주어진 패널이 제거되었거나, Camera의 {@link Camera#range range} 밖에 있을 경우|\r\n * |{@link ERROR_CODE NOT_ATTACHED_TO_FLICKING}|{@link Control#init init}이 이전에 호출되지 않은 경우|\r\n * |{@link ERROR_CODE ANIMATION_INTERRUPTED}|사용자 입력에 의해 애니메이션이 중단된 경우|\r\n * |{@link ERROR_CODE STOP_CALLED_BY_USER}|발생된 이벤트들 중 하나라도 `stop()`이 호출된 경우|\r\n *\r\n * \r\n * @return {Promise} A Promise which will be resolved after reaching the target position해당 좌표 도달시에 resolve되는 Promise\r\n */\n\n __proto.moveToPosition = function (position, duration, axesEvent) {\n return __awaiter(this, void 0, void 0, function () {\n var flicking, camera, activeAnchor, anchorAtCamera, state, snapThreshold, posDelta, absPosDelta, snapDelta, targetAnchor;\n return __generator(this, function (_a) {\n flicking = getFlickingAttached(this._flicking, \"Control\");\n camera = flicking.camera;\n activeAnchor = camera.findActiveAnchor();\n anchorAtCamera = camera.findNearestAnchor(camera.position);\n state = flicking.control.controller.state;\n\n if (!activeAnchor || !anchorAtCamera) {\n return [2\n /*return*/\n , Promise.reject(new FlickingError(MESSAGE.POSITION_NOT_REACHABLE(position), CODE.POSITION_NOT_REACHABLE))];\n }\n\n snapThreshold = this._calcSnapThreshold(position, activeAnchor);\n posDelta = flicking.animating ? state.delta : position - camera.position;\n absPosDelta = Math.abs(posDelta);\n snapDelta = axesEvent && axesEvent.delta[POSITION_KEY] !== 0 ? Math.abs(axesEvent.delta[POSITION_KEY]) : absPosDelta;\n\n if (snapDelta >= snapThreshold && snapDelta > 0) {\n // Move to anchor at position\n targetAnchor = this._findSnappedAnchor(position, anchorAtCamera);\n } else if (absPosDelta >= flicking.threshold && absPosDelta > 0) {\n // Move to the adjacent panel\n targetAnchor = this._findAdjacentAnchor(posDelta, anchorAtCamera);\n } else {\n // Restore to active panel\n targetAnchor = anchorAtCamera;\n }\n\n this._triggerIndexChangeEvent(targetAnchor.panel, position, axesEvent);\n\n return [2\n /*return*/\n , this._animateToPosition({\n position: camera.clampToReachablePosition(targetAnchor.position),\n duration: duration,\n newActivePanel: targetAnchor.panel,\n axesEvent: axesEvent\n })];\n });\n });\n };\n\n __proto._findSnappedAnchor = function (position, anchorAtCamera) {\n var flicking = getFlickingAttached(this._flicking, \"Control\");\n var camera = flicking.camera;\n var count = this._count;\n var currentPos = camera.position;\n var clampedPosition = camera.clampToReachablePosition(position);\n var anchorAtPosition = camera.findAnchorIncludePosition(clampedPosition);\n\n if (!anchorAtCamera || !anchorAtPosition) {\n throw new FlickingError(MESSAGE.POSITION_NOT_REACHABLE(position), CODE.POSITION_NOT_REACHABLE);\n }\n\n if (!isFinite(count)) {\n return anchorAtPosition;\n }\n\n var panelCount = flicking.panelCount;\n var anchors = camera.anchorPoints;\n var loopCount = Math.sign(position - currentPos) * Math.floor(Math.abs(position - currentPos) / camera.rangeDiff);\n\n if (position > currentPos && anchorAtPosition.index < anchorAtCamera.index || anchorAtPosition.position > anchorAtCamera.position && anchorAtPosition.index === anchorAtCamera.index) {\n loopCount += 1;\n } else if (position < currentPos && anchorAtPosition.index > anchorAtCamera.index || anchorAtPosition.position < anchorAtCamera.position && anchorAtPosition.index === anchorAtCamera.index) {\n loopCount -= 1;\n }\n\n var circularIndexOffset = loopCount * panelCount;\n var anchorAtPositionIndex = anchorAtPosition.index + circularIndexOffset;\n\n if (Math.abs(anchorAtPositionIndex - anchorAtCamera.index) <= count) {\n var anchor = anchors[anchorAtPosition.index];\n return new AnchorPoint({\n index: anchor.index,\n position: anchor.position + loopCount * camera.rangeDiff,\n panel: anchor.panel\n });\n }\n\n if (flicking.circularEnabled) {\n var targetAnchor = anchors[circulateIndex(anchorAtCamera.index + Math.sign(position - currentPos) * count, panelCount)];\n var loop = Math.floor(count / panelCount);\n\n if (position > currentPos && targetAnchor.index < anchorAtCamera.index) {\n loop += 1;\n } else if (position < currentPos && targetAnchor.index > anchorAtCamera.index) {\n loop -= 1;\n }\n\n return new AnchorPoint({\n index: targetAnchor.index,\n position: targetAnchor.position + loop * camera.rangeDiff,\n panel: targetAnchor.panel\n });\n } else {\n return anchors[clamp(anchorAtCamera.index + Math.sign(position - currentPos) * count, 0, anchors.length - 1)];\n }\n };\n\n __proto._findAdjacentAnchor = function (posDelta, anchorAtCamera) {\n var _a;\n\n var flicking = getFlickingAttached(this._flicking, \"Control\");\n var camera = flicking.camera;\n var adjacentAnchor = (_a = posDelta > 0 ? camera.getNextAnchor(anchorAtCamera) : camera.getPrevAnchor(anchorAtCamera)) !== null && _a !== void 0 ? _a : anchorAtCamera;\n return adjacentAnchor;\n };\n\n __proto._calcSnapThreshold = function (position, activeAnchor) {\n var isNextDirection = position > activeAnchor.position;\n var panel = activeAnchor.panel;\n var panelSize = panel.size;\n var alignPos = panel.alignPosition; // Minimum distance needed to decide prev/next panel as nearest\n\n /*\r\n * | Prev | Next |\r\n * |<------>|<------------>|\r\n * [ |<-Anchor ]\r\n */\n\n return isNextDirection ? panelSize - alignPos + panel.margin.next : alignPos + panel.margin.prev;\n };\n\n return SnapControl;\n}(Control);\n\n/**\r\n * A {@link Control} that can be scrolled freely without alignment\r\n * @ko 패널이 정해진 지점에 정렬되지 않고, 자유롭게 스크롤할 수 있는 이동 방식을 사용하는 {@link Control}\r\n */\n\nvar FreeControl =\n/*#__PURE__*/\nfunction (_super) {\n __extends(FreeControl, _super);\n /** */\n\n\n function FreeControl(_a) {\n var _b = _a === void 0 ? {} : _a,\n _c = _b.stopAtEdge,\n stopAtEdge = _c === void 0 ? true : _c;\n\n var _this = _super.call(this) || this;\n\n _this._stopAtEdge = stopAtEdge;\n return _this;\n }\n\n var __proto = FreeControl.prototype;\n Object.defineProperty(__proto, \"stopAtEdge\", {\n /**\r\n * Make scroll animation to stop at the start/end of the scroll area, not going out the bounce area\r\n * @ko 스크롤 애니메이션을 스크롤 영역의 시작과 끝부분에서 멈추도록 하여, 바운스 영역을 넘어가지 않도록 합니다\r\n * @type {boolean}\r\n * @default true\r\n */\n get: function () {\n return this._stopAtEdge;\n },\n set: function (val) {\n this._stopAtEdge = val;\n },\n enumerable: false,\n configurable: true\n });\n /**\r\n * Update position after resizing\r\n * @ko resize 이후에 position을 업데이트합니다\r\n * @param {number} progressInPanel Previous camera's progress in active panel before resizeResize 이전 현재 선택된 패널 내에서의 카메라 progress 값\r\n * @throws {FlickingError}\r\n * {@link ERROR_CODE NOT_ATTACHED_TO_FLICKING} When {@link Camera#init init} is not called before\r\n * {@link ERROR_CODE NOT_ATTACHED_TO_FLICKING} {@link Camera#init init}이 이전에 호출되지 않은 경우\r\n * @chainable\r\n * @return {Promise}\r\n */\n\n __proto.updatePosition = function (progressInPanel) {\n return __awaiter(this, void 0, void 0, function () {\n var flicking, camera, activePanel, panelRange, newPosition;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n flicking = getFlickingAttached(this._flicking, \"Control\");\n camera = flicking.camera;\n activePanel = this._activePanel;\n if (!activePanel) return [3\n /*break*/\n , 2];\n panelRange = activePanel.range;\n newPosition = panelRange.min + (panelRange.max - panelRange.min) * progressInPanel;\n return [4\n /*yield*/\n , camera.lookAt(camera.clampToReachablePosition(newPosition))];\n\n case 1:\n _a.sent();\n\n _a.label = 2;\n\n case 2:\n return [2\n /*return*/\n ];\n }\n });\n });\n };\n /**\r\n * Move {@link Camera} to the given position\r\n * @ko {@link Camera}를 주어진 좌표로 이동합니다\r\n * @param {number} position The target position to move이동할 좌표\r\n * @param {number} duration Duration of the panel movement animation (unit: ms).패널 이동 애니메이션 진행 시간 (단위: ms)\r\n * @param {object} [axesEvent] {@link https://naver.github.io/egjs-axes/release/latest/doc/eg.Axes.html#event:release release} event of {@link https://naver.github.io/egjs-axes/ Axes}\r\n * {@link https://naver.github.io/egjs-axes/ Axes}의 {@link https://naver.github.io/egjs-axes/release/latest/doc/eg.Axes.html#event:release release} 이벤트\r\n * @fires Flicking#moveStart\r\n * @fires Flicking#move\r\n * @fires Flicking#moveEnd\r\n * @fires Flicking#willChange\r\n * @fires Flicking#changed\r\n * @fires Flicking#willRestore\r\n * @fires Flicking#restored\r\n * @fires Flicking#needPanel\r\n * @fires Flicking#visibleChange\r\n * @fires Flicking#reachEdge\r\n * @throws {FlickingError}\r\n * |code|condition|\r\n * |---|---|\r\n * |{@link ERROR_CODE POSITION_NOT_REACHABLE}|When the given panel is already removed or not in the Camera's {@link Camera#range range}|\r\n * |{@link ERROR_CODE NOT_ATTACHED_TO_FLICKING}|When {@link Control#init init} is not called before|\r\n * |{@link ERROR_CODE ANIMATION_INTERRUPTED}|When the animation is interrupted by user input|\r\n * |{@link ERROR_CODE STOP_CALLED_BY_USER}|When the animation is interrupted by user input|\r\n * \r\n *\r\n * |code|condition|\r\n * |---|---|\r\n * |{@link ERROR_CODE POSITION_NOT_REACHABLE}|주어진 패널이 제거되었거나, Camera의 {@link Camera#range range} 밖에 있을 경우|\r\n * |{@link ERROR_CODE NOT_ATTACHED_TO_FLICKING}|{@link Control#init init}이 이전에 호출되지 않은 경우|\r\n * |{@link ERROR_CODE ANIMATION_INTERRUPTED}|사용자 입력에 의해 애니메이션이 중단된 경우|\r\n * |{@link ERROR_CODE STOP_CALLED_BY_USER}|발생된 이벤트들 중 하나라도 `stop()`이 호출된 경우|\r\n *\r\n * \r\n * @return {Promise} A Promise which will be resolved after reaching the target position해당 좌표 도달시에 resolve되는 Promise\r\n */\n\n\n __proto.moveToPosition = function (position, duration, axesEvent) {\n return __awaiter(this, void 0, void 0, function () {\n var flicking, camera, targetPos, anchorAtPosition, targetPanel;\n return __generator(this, function (_a) {\n flicking = getFlickingAttached(this._flicking, \"Control\");\n camera = flicking.camera;\n targetPos = camera.clampToReachablePosition(position);\n anchorAtPosition = camera.findAnchorIncludePosition(targetPos);\n\n if (!anchorAtPosition) {\n return [2\n /*return*/\n , Promise.reject(new FlickingError(MESSAGE.POSITION_NOT_REACHABLE(position), CODE.POSITION_NOT_REACHABLE))];\n }\n\n targetPanel = anchorAtPosition.panel; // Trigger only change event\n\n if (targetPanel !== this._activePanel) {\n this._triggerIndexChangeEvent(targetPanel, position, axesEvent);\n }\n\n return [2\n /*return*/\n , this._animateToPosition({\n position: this._stopAtEdge ? targetPos : position,\n duration: duration,\n newActivePanel: targetPanel,\n axesEvent: axesEvent\n })];\n });\n });\n };\n\n return FreeControl;\n}(Control);\n\n/**\r\n * A {@link Control} that allow you to select the maximum number of panels to move at a time\r\n * @ko 한번에 최대로 이동할 패널의 개수를 선택 가능한 {@link Control}\r\n */\n\nvar StrictControl =\n/*#__PURE__*/\nfunction (_super) {\n __extends(StrictControl, _super);\n /** */\n\n\n function StrictControl(_a) {\n var _b = _a === void 0 ? {} : _a,\n _c = _b.count,\n count = _c === void 0 ? 1 : _c;\n\n var _this = _super.call(this) || this;\n\n _this._setActive = function (newActivePanel, prevActivePanel, isTrusted) {\n _super.prototype._setActive.call(_this, newActivePanel, prevActivePanel, isTrusted);\n\n _this.updateInput();\n };\n\n _this._count = count;\n\n _this._resetIndexRange();\n\n return _this;\n }\n\n var __proto = StrictControl.prototype;\n Object.defineProperty(__proto, \"count\", {\n /**\r\n * Maximum number of panels that can be moved at a time\r\n * @ko 최대로 움직일 수 있는 패널의 개수\r\n * @type {number}\r\n * @default 1\r\n */\n get: function () {\n return this._count;\n },\n set: function (val) {\n this._count = val;\n },\n enumerable: false,\n configurable: true\n });\n /**\r\n * Destroy Control and return to initial state\r\n * @ko Control을 초기 상태로 되돌립니다\r\n * @return {void}\r\n */\n\n __proto.destroy = function () {\n _super.prototype.destroy.call(this);\n\n this._resetIndexRange();\n };\n /**\r\n * Update {@link Control#controller controller}'s state\r\n * @ko {@link Control#controller controller}의 내부 상태를 갱신합니다\r\n * @chainable\r\n * @return {this}\r\n */\n\n\n __proto.updateInput = function () {\n var _a;\n\n var flicking = getFlickingAttached(this._flicking, \"Control\");\n var camera = flicking.camera;\n var renderer = flicking.renderer;\n var controller = this._controller;\n var controlParams = camera.controlParams;\n var count = this._count;\n var activePanel = controller.state.animating ? (_a = camera.findNearestAnchor(camera.position)) === null || _a === void 0 ? void 0 : _a.panel : this._activePanel;\n\n if (!activePanel) {\n controller.update(controlParams);\n\n this._resetIndexRange();\n\n return this;\n }\n\n var cameraRange = controlParams.range;\n var currentPos = activePanel.position;\n var currentIndex = activePanel.index;\n var panelCount = renderer.panelCount;\n var prevPanelIndex = currentIndex - count;\n var nextPanelIndex = currentIndex + count;\n\n if (prevPanelIndex < 0) {\n prevPanelIndex = flicking.circularEnabled ? getMinusCompensatedIndex((prevPanelIndex + 1) % panelCount - 1, panelCount) : clamp(prevPanelIndex, 0, panelCount - 1);\n }\n\n if (nextPanelIndex >= panelCount) {\n nextPanelIndex = flicking.circularEnabled ? nextPanelIndex % panelCount : clamp(nextPanelIndex, 0, panelCount - 1);\n }\n\n var prevPanel = renderer.panels[prevPanelIndex];\n var nextPanel = renderer.panels[nextPanelIndex];\n var prevPos = Math.max(prevPanel.position, cameraRange.min);\n var nextPos = Math.min(nextPanel.position, cameraRange.max);\n\n if (prevPos > currentPos) {\n prevPos -= camera.rangeDiff;\n }\n\n if (nextPos < currentPos) {\n nextPos += camera.rangeDiff;\n }\n\n controlParams.range = {\n min: prevPos,\n max: nextPos\n };\n\n if (controlParams.position < prevPos) {\n controlParams.position += camera.rangeDiff;\n }\n\n if (controlParams.position > nextPos) {\n controlParams.position -= camera.rangeDiff;\n }\n\n controlParams.circular = false;\n controller.update(controlParams);\n this._indexRange = {\n min: prevPanel.index,\n max: nextPanel.index\n };\n return this;\n };\n /**\r\n * Move {@link Camera} to the given position\r\n * @ko {@link Camera}를 주어진 좌표로 이동합니다\r\n * @param {number} position The target position to move이동할 좌표\r\n * @param {number} duration Duration of the panel movement animation (unit: ms).패널 이동 애니메이션 진행 시간 (단위: ms)\r\n * @param {object} [axesEvent] {@link https://naver.github.io/egjs-axes/release/latest/doc/eg.Axes.html#event:release release} event of {@link https://naver.github.io/egjs-axes/ Axes}\r\n * {@link https://naver.github.io/egjs-axes/ Axes}의 {@link https://naver.github.io/egjs-axes/release/latest/doc/eg.Axes.html#event:release release} 이벤트\r\n * @fires Flicking#moveStart\r\n * @fires Flicking#move\r\n * @fires Flicking#moveEnd\r\n * @fires Flicking#willChange\r\n * @fires Flicking#changed\r\n * @fires Flicking#willRestore\r\n * @fires Flicking#restored\r\n * @fires Flicking#needPanel\r\n * @fires Flicking#visibleChange\r\n * @fires Flicking#reachEdge\r\n * @throws {FlickingError}\r\n * |code|condition|\r\n * |---|---|\r\n * |{@link ERROR_CODE POSITION_NOT_REACHABLE}|When the given panel is already removed or not in the Camera's {@link Camera#range range}|\r\n * |{@link ERROR_CODE NOT_ATTACHED_TO_FLICKING}|When {@link Control#init init} is not called before|\r\n * |{@link ERROR_CODE ANIMATION_INTERRUPTED}|When the animation is interrupted by user input|\r\n * |{@link ERROR_CODE STOP_CALLED_BY_USER}|When the animation is interrupted by user input|\r\n * \r\n *\r\n * |code|condition|\r\n * |---|---|\r\n * |{@link ERROR_CODE POSITION_NOT_REACHABLE}|주어진 패널이 제거되었거나, Camera의 {@link Camera#range range} 밖에 있을 경우|\r\n * |{@link ERROR_CODE NOT_ATTACHED_TO_FLICKING}|{@link Control#init init}이 이전에 호출되지 않은 경우|\r\n * |{@link ERROR_CODE ANIMATION_INTERRUPTED}|사용자 입력에 의해 애니메이션이 중단된 경우|\r\n * |{@link ERROR_CODE STOP_CALLED_BY_USER}|발생된 이벤트들 중 하나라도 `stop()`이 호출된 경우|\r\n *\r\n * \r\n * @return {Promise} A Promise which will be resolved after reaching the target position해당 좌표 도달시에 resolve되는 Promise\r\n */\n\n\n __proto.moveToPosition = function (position, duration, axesEvent) {\n return __awaiter(this, void 0, void 0, function () {\n var flicking, camera, activePanel, axesRange, indexRange, cameraRange, clampedPosition, anchorAtPosition, prevPos, isOverThreshold, adjacentAnchor, targetPos, targetPanel, anchors, firstAnchor, lastAnchor, shouldBounceToFirst, shouldBounceToLast, targetAnchor;\n return __generator(this, function (_a) {\n flicking = getFlickingAttached(this._flicking, \"Control\");\n camera = flicking.camera;\n activePanel = this._activePanel;\n axesRange = this._controller.range;\n indexRange = this._indexRange;\n cameraRange = camera.range;\n clampedPosition = clamp(camera.clampToReachablePosition(position), axesRange[0], axesRange[1]);\n anchorAtPosition = camera.findAnchorIncludePosition(clampedPosition);\n\n if (!anchorAtPosition || !activePanel) {\n return [2\n /*return*/\n , Promise.reject(new FlickingError(MESSAGE.POSITION_NOT_REACHABLE(position), CODE.POSITION_NOT_REACHABLE))];\n }\n\n prevPos = activePanel.position;\n isOverThreshold = Math.abs(position - prevPos) >= flicking.threshold;\n adjacentAnchor = position > prevPos ? camera.getNextAnchor(anchorAtPosition) : camera.getPrevAnchor(anchorAtPosition);\n anchors = camera.anchorPoints;\n firstAnchor = anchors[0];\n lastAnchor = anchors[anchors.length - 1];\n shouldBounceToFirst = position <= cameraRange.min && isBetween(firstAnchor.panel.index, indexRange.min, indexRange.max);\n shouldBounceToLast = position >= cameraRange.max && isBetween(lastAnchor.panel.index, indexRange.min, indexRange.max);\n\n if (shouldBounceToFirst || shouldBounceToLast) {\n targetAnchor = position < cameraRange.min ? firstAnchor : lastAnchor;\n targetPanel = targetAnchor.panel;\n targetPos = targetAnchor.position;\n } else if (isOverThreshold && anchorAtPosition.position !== activePanel.position) {\n // Move to anchor at position\n targetPanel = anchorAtPosition.panel;\n targetPos = anchorAtPosition.position;\n } else if (isOverThreshold && adjacentAnchor && isBetween(adjacentAnchor.index, indexRange.min, indexRange.max)) {\n // Move to adjacent anchor\n targetPanel = adjacentAnchor.panel;\n targetPos = adjacentAnchor.position;\n } else {\n // Restore to active panel\n targetPos = camera.clampToReachablePosition(activePanel.position);\n targetPanel = activePanel;\n }\n\n this._triggerIndexChangeEvent(targetPanel, position, axesEvent);\n\n return [2\n /*return*/\n , this._animateToPosition({\n position: targetPos,\n duration: duration,\n newActivePanel: targetPanel,\n axesEvent: axesEvent\n })];\n });\n });\n };\n\n __proto._resetIndexRange = function () {\n this._indexRange = {\n min: 0,\n max: 0\n };\n };\n\n return StrictControl;\n}(Control);\n\n/**\r\n * A component that manages actual movement inside the viewport\r\n * @ko 뷰포트 내에서의 실제 움직임을 담당하는 컴포넌트\r\n */\n\nvar Camera =\n/*#__PURE__*/\nfunction () {\n /** */\n function Camera(_a) {\n var _this = this;\n\n var _b = _a === void 0 ? {} : _a,\n _c = _b.align,\n align = _c === void 0 ? ALIGN.CENTER : _c;\n\n this._checkTranslateSupport = function () {\n var e_1, _a;\n\n var transforms = [\"webkitTransform\", \"msTransform\", \"MozTransform\", \"OTransform\", \"transform\"];\n var supportedStyle = document.documentElement.style;\n var transformName = \"\";\n\n try {\n for (var transforms_1 = __values(transforms), transforms_1_1 = transforms_1.next(); !transforms_1_1.done; transforms_1_1 = transforms_1.next()) {\n var prefixedTransform = transforms_1_1.value;\n\n if (prefixedTransform in supportedStyle) {\n transformName = prefixedTransform;\n }\n }\n } catch (e_1_1) {\n e_1 = {\n error: e_1_1\n };\n } finally {\n try {\n if (transforms_1_1 && !transforms_1_1.done && (_a = transforms_1.return)) _a.call(transforms_1);\n } finally {\n if (e_1) throw e_1.error;\n }\n }\n\n if (!transformName) {\n throw new FlickingError(MESSAGE.TRANSFORM_NOT_SUPPORTED, CODE.TRANSFORM_NOT_SUPPORTED);\n }\n\n _this._transform = transformName;\n };\n\n this._flicking = null;\n\n this._resetInternalValues(); // Options\n\n\n this._align = align;\n }\n\n var __proto = Camera.prototype;\n Object.defineProperty(__proto, \"element\", {\n // Internal states getter\n\n /**\r\n * The camera(`.flicking-camera`) element\r\n * @ko 카메라(`.flicking-camera`) 엘리먼트\r\n * @type {HTMLElement}\r\n * @readonly\r\n */\n get: function () {\n return this._el;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(__proto, \"position\", {\n /**\r\n * Current position of the camera\r\n * @ko Camera의 현재 좌표\r\n * @type {number}\r\n * @readonly\r\n */\n get: function () {\n return this._position;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(__proto, \"alignPosition\", {\n /**\r\n * Align position inside the viewport where {@link Panel}'s {@link Panel#alignPosition alignPosition} should be located at\r\n * @ko 패널의 정렬 기준 위치. 뷰포트 내에서 {@link Panel}의 {@link Panel#alignPosition alignPosition}이 위치해야 하는 곳입니다\r\n * @type {number}\r\n * @readonly\r\n */\n get: function () {\n return this._alignPos;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(__proto, \"offset\", {\n /**\r\n * Position offset, used for the {@link Flicking#renderOnlyVisible renderOnlyVisible} option\r\n * @ko Camera의 좌표 오프셋. {@link Flicking#renderOnlyVisible renderOnlyVisible} 옵션을 위해 사용됩니다.\r\n * @type {number}\r\n * @default 0\r\n * @readonly\r\n */\n get: function () {\n return this._offset;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(__proto, \"range\", {\n /**\r\n * A range that Camera's {@link Camera#position position} can reach\r\n * @ko Camera의 {@link Camera#position position}이 도달 가능한 범위\r\n * @type {object}\r\n * @property {number} min A minimum position최소 위치\r\n * @property {number} min A maximum position최대 위치\r\n * @readonly\r\n */\n get: function () {\n return this._range;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(__proto, \"rangeDiff\", {\n /**\r\n * A difference between Camera's minimum and maximum position that can reach\r\n * @ko Camera가 도달 가능한 최소/최대 좌표의 차이\r\n * @type {number}\r\n * @readonly\r\n */\n get: function () {\n return this._range.max - this._range.min;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(__proto, \"visiblePanels\", {\n /**\r\n * An array of visible panels from the current position\r\n * @ko 현재 보이는 패널들의 배열\r\n * @type {Panel[]}\r\n * @readonly\r\n */\n get: function () {\n return this._visiblePanels;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(__proto, \"visibleRange\", {\n /**\r\n * A range of the visible area from the current position\r\n * @ko 현재 위치에서 보이는 범위\r\n * @type {object}\r\n * @property {number} min A minimum position최소 위치\r\n * @property {number} min A maximum position최대 위치\r\n * @readonly\r\n */\n get: function () {\n return {\n min: this._position - this._alignPos,\n max: this._position - this._alignPos + this.size\n };\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(__proto, \"anchorPoints\", {\n /**\r\n * An array of {@link AnchorPoint}s that Camera can be stopped at\r\n * @ko 카메라가 도달 가능한 {@link AnchorPoint}의 목록\r\n * @type {AnchorPoint[]}\r\n * @readonly\r\n */\n get: function () {\n return this._anchors;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(__proto, \"controlParams\", {\n /**\r\n * A current parameters of the Camera for updating {@link AxesController}\r\n * @ko {@link AxesController}를 업데이트하기 위한 현재 Camera 패러미터들\r\n * @type {ControlParams}\r\n * @readonly\r\n */\n get: function () {\n return {\n range: this._range,\n position: this._position,\n circular: false\n };\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(__proto, \"atEdge\", {\n /**\r\n * A Boolean value indicating whether Camera's over the minimum or maximum position reachable\r\n * @ko 현재 카메라가 도달 가능한 범위의 최소 혹은 최대점을 넘어섰는지를 나타냅니다\r\n * @type {boolean}\r\n * @readonly\r\n */\n get: function () {\n return this._position <= this._range.min || this._position >= this._range.max;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(__proto, \"size\", {\n /**\r\n * Return the size of the viewport\r\n * @ko 뷰포트 크기를 반환합니다\r\n * @type {number}\r\n * @readonly\r\n */\n get: function () {\n var flicking = this._flicking;\n return flicking ? flicking.horizontal ? flicking.viewport.width : flicking.viewport.height : 0;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(__proto, \"progress\", {\n /**\r\n * Return the camera's position progress from the first panel to last panel\r\n * Range is from 0 to last panel's index\r\n * @ko 첫번째 패널로부터 마지막 패널까지의 카메라 위치의 진행도를 반환합니다\r\n * 범위는 0부터 마지막 패널의 인덱스까지입니다\r\n * @type {number}\r\n * @readonly\r\n */\n get: function () {\n var flicking = this._flicking;\n var position = this._position + this._offset;\n var nearestAnchor = this.findNearestAnchor(this._position);\n\n if (!flicking || !nearestAnchor) {\n return NaN;\n }\n\n var nearestPanel = nearestAnchor.panel;\n var panelPos = nearestPanel.position + nearestPanel.offset;\n var bounceSize = flicking.control.controller.bounce;\n var _a = this.range,\n prevRange = _a.min,\n nextRange = _a.max;\n var rangeDiff = this.rangeDiff;\n\n if (position === panelPos) {\n return nearestPanel.index;\n }\n\n if (position < panelPos) {\n var prevPanel = nearestPanel.prev();\n var prevPosition = prevPanel ? prevPanel.position + prevPanel.offset : prevRange - bounceSize[0]; // Looped\n\n if (prevPosition > panelPos) {\n prevPosition -= rangeDiff;\n }\n\n return nearestPanel.index - 1 + getProgress(position, prevPosition, panelPos);\n } else {\n var nextPanel = nearestPanel.next();\n var nextPosition = nextPanel ? nextPanel.position + nextPanel.offset : nextRange + bounceSize[1]; // Looped\n\n if (nextPosition < panelPos) {\n nextPosition += rangeDiff;\n }\n\n return nearestPanel.index + getProgress(position, panelPos, nextPosition);\n }\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(__proto, \"align\", {\n // Options Getter\n\n /**\r\n * A value indicating where the {@link Camera#alignPosition alignPosition} should be located at inside the viewport element\r\n * @ko {@link Camera#alignPosition alignPosition}이 뷰포트 엘리먼트 내의 어디에 위치해야 하는지를 나타내는 값\r\n * @type {ALIGN | string | number}\r\n */\n get: function () {\n return this._align;\n },\n // Options Setter\n set: function (val) {\n this._align = val;\n },\n enumerable: false,\n configurable: true\n });\n /**\r\n * Initialize Camera\r\n * @ko Camera를 초기화합니다\r\n * @param {Flicking} flicking An instance of {@link Flicking}Flicking의 인스턴스\r\n * @chainable\r\n * @throws {FlickingError}\r\n * {@link ERROR_CODE VAL_MUST_NOT_NULL} If the camera element(`.flicking-camera`) does not exist inside viewport element\r\n * {@link ERROR_CODE VAL_MUST_NOT_NULL} 뷰포트 엘리먼트 내부에 카메라 엘리먼트(`.flicking-camera`)가 존재하지 않을 경우\r\n * @return {this}\r\n */\n\n __proto.init = function (flicking) {\n this._flicking = flicking;\n var viewportEl = flicking.viewport.element;\n checkExistence(viewportEl.firstElementChild, \"First element child of the viewport element\");\n this._el = viewportEl.firstElementChild;\n\n this._checkTranslateSupport();\n\n return this;\n };\n /**\r\n * Destroy Camera and return to initial state\r\n * @ko Camera를 초기 상태로 되돌립니다\r\n * @return {void}\r\n */\n\n\n __proto.destroy = function () {\n this._flicking = null;\n\n this._resetInternalValues();\n\n return this;\n };\n /**\r\n * Move to the given position and apply CSS transform\r\n * @ko 해당 좌표로 이동하고, CSS transform을 적용합니다\r\n * @param {number} pos A new position움직일 위치\r\n * @throws {FlickingError}\r\n * {@link ERROR_CODE NOT_ATTACHED_TO_FLICKING} When {@link Camera#init init} is not called before\r\n * {@link ERROR_CODE NOT_ATTACHED_TO_FLICKING} {@link Camera#init init}이 이전에 호출되지 않은 경우\r\n * @return {this}\r\n */\n\n\n __proto.lookAt = function (pos) {\n return __awaiter(this, void 0, void 0, function () {\n var prevPos;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n prevPos = this._position;\n this._position = pos;\n return [4\n /*yield*/\n , this._refreshVisiblePanels()];\n\n case 1:\n _a.sent();\n\n this._checkNeedPanel();\n\n this._checkReachEnd(prevPos, pos);\n\n this._applyTransform();\n\n return [2\n /*return*/\n ];\n }\n });\n });\n };\n /**\r\n * Return a previous {@link AnchorPoint} of given {@link AnchorPoint}\r\n * If it does not exist, return `null` instead\r\n * @ko 주어진 {@link AnchorPoint}의 이전 {@link AnchorPoint}를 반환합니다\r\n * 존재하지 않을 경우 `null`을 반환합니다\r\n * @param {AnchorPoint} anchor A reference {@link AnchorPoint}기준 {@link AnchorPoint}\r\n * @return {AnchorPoint | null} The previous {@link AnchorPoint}이전 {@link AnchorPoint}\r\n */\n\n\n __proto.getPrevAnchor = function (anchor) {\n return this._anchors[anchor.index - 1] || null;\n };\n /**\r\n * Return a next {@link AnchorPoint} of given {@link AnchorPoint}\r\n * If it does not exist, return `null` instead\r\n * @ko 주어진 {@link AnchorPoint}의 다음 {@link AnchorPoint}를 반환합니다\r\n * 존재하지 않을 경우 `null`을 반환합니다\r\n * @param {AnchorPoint} anchor A reference {@link AnchorPoint}기준 {@link AnchorPoint}\r\n * @return {AnchorPoint | null} The next {@link AnchorPoint}다음 {@link AnchorPoint}\r\n */\n\n\n __proto.getNextAnchor = function (anchor) {\n return this._anchors[anchor.index + 1] || null;\n };\n /**\r\n * Return the camera's position progress in the panel below\r\n * Value is from 0 to 1 when the camera's inside panel\r\n * Value can be lower than 0 or bigger than 1 when it's in the margin area\r\n * @ko 현재 카메라 아래 패널에서의 위치 진행도를 반환합니다\r\n * 반환값은 카메라가 패널 내부에 있을 경우 0부터 1까지의 값을 갖습니다\r\n * 패널의 margin 영역에 있을 경우 0보다 작거나 1보다 큰 값을 반환할 수 있습니다\r\n */\n\n\n __proto.getProgressInPanel = function (panel) {\n var panelRange = panel.range;\n return (this._position - panelRange.min) / (panelRange.max - panelRange.min);\n };\n /**\r\n * Return {@link AnchorPoint} that includes given position\r\n * If there's no {@link AnchorPoint} that includes the given position, return `null` instead\r\n * @ko 주어진 좌표를 포함하는 {@link AnchorPoint}를 반환합니다\r\n * 주어진 좌표를 포함하는 {@link AnchorPoint}가 없을 경우 `null`을 반환합니다\r\n * @param {number} position A position to check확인할 좌표\r\n * @return {AnchorPoint | null} The {@link AnchorPoint} that includes the given position해당 좌표를 포함하는 {@link AnchorPoint}\r\n */\n\n\n __proto.findAnchorIncludePosition = function (position) {\n var anchors = this._anchors;\n var anchorsIncludingPosition = anchors.filter(function (anchor) {\n return anchor.panel.includePosition(position, true);\n });\n return anchorsIncludingPosition.reduce(function (nearest, anchor) {\n if (!nearest) return anchor;\n return Math.abs(nearest.position - position) < Math.abs(anchor.position - position) ? nearest : anchor;\n }, null);\n };\n /**\r\n * Return {@link AnchorPoint} nearest to given position\r\n * If there're no {@link AnchorPoint}s, return `null` instead\r\n * @ko 해당 좌표에서 가장 가까운 {@link AnchorPoint}를 반환합니다\r\n * {@link AnchorPoint}가 하나도 없을 경우 `null`을 반환합니다\r\n * @param {number} position A position to check확인할 좌표\r\n * @return {AnchorPoint | null} The {@link AnchorPoint} nearest to the given position해당 좌표에 가장 인접한 {@link AnchorPoint}\r\n */\n\n\n __proto.findNearestAnchor = function (position) {\n var anchors = this._anchors;\n if (anchors.length <= 0) return null;\n var prevDist = Infinity;\n\n for (var anchorIdx = 0; anchorIdx < anchors.length; anchorIdx++) {\n var anchor = anchors[anchorIdx];\n var dist = Math.abs(anchor.position - position);\n\n if (dist > prevDist) {\n // Return previous anchor\n return anchors[anchorIdx - 1];\n }\n\n prevDist = dist;\n } // Return last anchor\n\n\n return anchors[anchors.length - 1];\n };\n /**\r\n * Return {@link AnchorPoint} that matches {@link Flicking#currentPanel}\r\n * @ko 현재 {@link Flicking#currentPanel}에 해당하는 {@link AnchorPoint}를 반환합니다\r\n * @return {AnchorPoint | null}\r\n */\n\n\n __proto.findActiveAnchor = function () {\n var flicking = getFlickingAttached(this._flicking, \"Camera\");\n var activeIndex = flicking.control.activeIndex;\n return find(this._anchors, function (anchor) {\n return anchor.panel.index === activeIndex;\n });\n };\n /**\r\n * Clamp the given position between camera's range\r\n * @ko 주어진 좌표를 Camera가 도달 가능한 범위 사이의 값으로 만듭니다\r\n * @param {number} position A position to clamp범위를 제한할 좌표\r\n * @return {number} A clamped position범위 제한된 좌표\r\n */\n\n\n __proto.clampToReachablePosition = function (position) {\n var range = this._range;\n return clamp(position, range.min, range.max);\n };\n /**\r\n * Check whether the given panel is inside of the Camera's range\r\n * @ko 해당 {@link Panel}이 Camera가 도달 가능한 범위 내에 있는지를 반환합니다\r\n * @param panel An instance of {@link Panel} to check확인할 {@link Panel}의 인스턴스\r\n * @return {boolean} Whether the panel's inside Camera's range도달 가능한 범위 내에 해당 패널이 존재하는지 여부\r\n */\n\n\n __proto.canReach = function (panel) {\n var range = this._range;\n if (panel.removed) return false;\n var panelPos = panel.position;\n return panelPos >= range.min && panelPos <= range.max;\n };\n /**\r\n * Check whether the given panel element is visible at the current position\r\n * @ko 현재 좌표에서 해당 패널 엘리먼트를 볼 수 있는지 여부를 반환합니다\r\n * @param panel An instance of {@link Panel} to check확인할 {@link Panel}의 인스턴스\r\n * @return Whether the panel element is visible at the current position현재 위치에서 해당 패널 엘리먼트가 보이는지 여부\r\n */\n\n\n __proto.canSee = function (panel) {\n var visibleRange = this.visibleRange; // Should not include margin, as we don't declare what the margin is visible as what the panel is visible.\n\n return panel.includeRange(visibleRange.min, visibleRange.max, false);\n };\n /**\r\n * Update Camera's {@link Camera#alignPosition alignPosition}\r\n * @ko Camera의 {@link Camera#alignPosition alignPosition}을 업데이트합니다\r\n * @chainable\r\n * @return {this}\r\n */\n\n\n __proto.updateAlignPos = function () {\n var align = this._align;\n var alignVal = typeof align === \"object\" ? align.camera : align;\n this._alignPos = parseAlign$1(alignVal, this.size);\n return this;\n };\n /**\r\n * Update Camera's {@link Camera#anchorPoints anchorPoints}\r\n * @ko Camera의 {@link Camera#anchorPoints anchorPoints}를 업데이트합니다\r\n * @throws {FlickingError}\r\n * {@link ERROR_CODE NOT_ATTACHED_TO_FLICKING} When {@link Camera#init init} is not called before\r\n * {@link ERROR_CODE NOT_ATTACHED_TO_FLICKING} {@link Camera#init init}이 이전에 호출되지 않은 경우\r\n * @chainable\r\n * @return {this}\r\n */\n\n\n __proto.updateAnchors = function () {\n var flicking = getFlickingAttached(this._flicking, \"Camera\");\n var panels = flicking.renderer.panels;\n this._anchors = panels.map(function (panel, index) {\n return new AnchorPoint({\n index: index,\n position: panel.position,\n panel: panel\n });\n });\n return this;\n };\n /**\r\n * Update Viewport's height to active panel's height\r\n * @ko 현재 선택된 패널의 높이와 동일하도록 뷰포트의 높이를 업데이트합니다\r\n * @throws {FlickingError}\r\n * {@link ERROR_CODE NOT_ATTACHED_TO_FLICKING} When {@link Camera#init init} is not called before\r\n * {@link ERROR_CODE NOT_ATTACHED_TO_FLICKING} {@link Camera#init init}이 이전에 호출되지 않은 경우\r\n * @chainable\r\n * @return {this}\r\n */\n\n\n __proto.updateAdaptiveHeight = function () {\n var flicking = getFlickingAttached(this._flicking, \"Camera\");\n var activePanel = flicking.control.activePanel;\n if (!flicking.horizontal || !flicking.adaptive || !activePanel) return;\n flicking.viewport.setSize({\n height: activePanel.height\n });\n };\n\n __proto.updateOffset = function () {\n var flicking = getFlickingAttached(this._flicking, \"Camera\");\n var unRenderedPanels = flicking.panels.filter(function (panel) {\n return !panel.rendered;\n });\n var position = this._position;\n this._offset = unRenderedPanels.filter(function (panel) {\n return panel.position + panel.offset < position;\n }).reduce(function (offset, panel) {\n return offset + panel.sizeIncludingMargin;\n }, 0);\n\n this._applyTransform();\n };\n /**\r\n * Reset the history of {@link Flicking#event:needPanel needPanel} events so it can be triggered again\r\n * @ko 발생한 {@link Flicking#event:needPanel needPanel} 이벤트들을 초기화하여 다시 발생할 수 있도록 합니다\r\n * @chainable\r\n * @return {this}\r\n */\n\n\n __proto.resetNeedPanelHistory = function () {\n this._needPanelTriggered = {\n prev: false,\n next: false\n };\n return this;\n };\n\n __proto._resetInternalValues = function () {\n this._position = 0;\n this._alignPos = 0;\n this._offset = 0;\n this._range = {\n min: 0,\n max: 0\n };\n this._visiblePanels = [];\n this._anchors = [];\n this._needPanelTriggered = {\n prev: false,\n next: false\n };\n };\n\n __proto._refreshVisiblePanels = function () {\n return __awaiter(this, void 0, void 0, function () {\n var flicking, panels, newVisiblePanels, prevVisiblePanels, added, removed;\n\n var _this = this;\n\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n flicking = getFlickingAttached(this._flicking, \"Camera\");\n panels = flicking.renderer.panels;\n newVisiblePanels = panels.filter(function (panel) {\n return _this.canSee(panel);\n });\n prevVisiblePanels = this._visiblePanels;\n this._visiblePanels = newVisiblePanels;\n added = newVisiblePanels.filter(function (panel) {\n return !includes(prevVisiblePanels, panel);\n });\n removed = prevVisiblePanels.filter(function (panel) {\n return !includes(newVisiblePanels, panel);\n });\n if (!(added.length > 0 || removed.length > 0)) return [3\n /*break*/\n , 2];\n return [4\n /*yield*/\n , flicking.renderer.render()];\n\n case 1:\n _a.sent();\n\n flicking.trigger(new ComponentEvent(EVENTS.VISIBLE_CHANGE, {\n added: added,\n removed: removed,\n visiblePanels: newVisiblePanels\n }));\n _a.label = 2;\n\n case 2:\n return [2\n /*return*/\n ];\n }\n });\n });\n };\n\n __proto._checkNeedPanel = function () {\n var needPanelTriggered = this._needPanelTriggered;\n if (needPanelTriggered.prev && needPanelTriggered.next) return;\n var flicking = getFlickingAttached(this._flicking, \"Camera\");\n var panels = flicking.renderer.panels;\n\n if (panels.length <= 0) {\n if (!needPanelTriggered.prev) {\n flicking.trigger(new ComponentEvent(EVENTS.NEED_PANEL, {\n direction: DIRECTION.PREV\n }));\n needPanelTriggered.prev = true;\n }\n\n if (!needPanelTriggered.next) {\n flicking.trigger(new ComponentEvent(EVENTS.NEED_PANEL, {\n direction: DIRECTION.NEXT\n }));\n needPanelTriggered.next = true;\n }\n\n return;\n }\n\n var cameraPosition = this._position;\n var cameraSize = this.size;\n var cameraRange = this._range;\n var needPanelThreshold = flicking.needPanelThreshold;\n var cameraPrev = cameraPosition - this._alignPos;\n var cameraNext = cameraPrev + cameraSize;\n var firstPanel = panels[0];\n var lastPanel = panels[panels.length - 1];\n\n if (!needPanelTriggered.prev) {\n var firstPanelPrev = firstPanel.range.min;\n\n if (cameraPrev <= firstPanelPrev + needPanelThreshold || cameraPosition <= cameraRange.min + needPanelThreshold) {\n flicking.trigger(new ComponentEvent(EVENTS.NEED_PANEL, {\n direction: DIRECTION.PREV\n }));\n needPanelTriggered.prev = true;\n }\n }\n\n if (!needPanelTriggered.next) {\n var lastPanelNext = lastPanel.range.max;\n\n if (cameraNext >= lastPanelNext - needPanelThreshold || cameraPosition >= cameraRange.max - needPanelThreshold) {\n flicking.trigger(new ComponentEvent(EVENTS.NEED_PANEL, {\n direction: DIRECTION.NEXT\n }));\n needPanelTriggered.next = true;\n }\n }\n };\n\n __proto._checkReachEnd = function (prevPos, newPos) {\n var flicking = getFlickingAttached(this._flicking, \"Camera\");\n var range = this._range;\n var wasBetweenRange = prevPos > range.min && prevPos < range.max;\n var isBetweenRange = newPos > range.min && newPos < range.max;\n if (!wasBetweenRange || isBetweenRange) return;\n var direction = newPos <= range.min ? DIRECTION.PREV : DIRECTION.NEXT;\n flicking.trigger(new ComponentEvent(EVENTS.REACH_EDGE, {\n direction: direction\n }));\n };\n\n __proto._applyTransform = function () {\n var el = this._el;\n var flicking = getFlickingAttached(this._flicking, \"Camera\");\n var actualPosition = this._position - this._alignPos - this._offset;\n el.style[this._transform] = flicking.horizontal ? \"translate(\" + -actualPosition + \"px)\" : \"translate(0, \" + -actualPosition + \"px)\";\n };\n\n return Camera;\n}();\n\n/**\r\n * A {@link Camera} that can move from the position of the first panel to the position of the last panel\r\n * @ko 첫번째 패널의 좌표로부터 마지막 패널의 좌표로까지 이동할 수 있는 종류의 {@link Camera}\r\n */\n\nvar LinearCamera =\n/*#__PURE__*/\nfunction (_super) {\n __extends(LinearCamera, _super);\n\n function LinearCamera() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\r\n * Update {@link Camera#range range} of Camera\r\n * @ko Camera의 {@link Camera#range range}를 업데이트합니다\r\n * @chainable\r\n * @throws {FlickingError}\r\n * {@link ERROR_CODE NOT_ATTACHED_TO_FLICKING} When {@link Camera#init init} is not called before\r\n * {@link ERROR_CODE NOT_ATTACHED_TO_FLICKING} {@link Camera#init init}이 이전에 호출되지 않은 경우\r\n * @return {this}\r\n */\n\n\n var __proto = LinearCamera.prototype;\n\n __proto.updateRange = function () {\n var _a, _b;\n\n var flicking = getFlickingAttached(this._flicking, \"Camera\");\n var renderer = flicking.renderer;\n var firstPanel = renderer.getPanel(0);\n var lastPanel = renderer.getPanel(renderer.panelCount - 1);\n this._range = {\n min: (_a = firstPanel === null || firstPanel === void 0 ? void 0 : firstPanel.position) !== null && _a !== void 0 ? _a : 0,\n max: (_b = lastPanel === null || lastPanel === void 0 ? void 0 : lastPanel.position) !== null && _b !== void 0 ? _b : 0\n };\n return this;\n };\n\n return LinearCamera;\n}(Camera);\n\n/**\r\n * A {@link Camera} that connects the last panel and the first panel, enabling continuous loop\r\n * @ko 첫번째 패널과 마지막 패널이 이어진 상태로, 무한히 회전할 수 있는 종류의 {@link Camera}\r\n */\n\nvar CircularCamera =\n/*#__PURE__*/\nfunction (_super) {\n __extends(CircularCamera, _super);\n\n function CircularCamera() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n\n _this._circularOffset = 0;\n _this._circularEnabled = false;\n return _this;\n }\n\n var __proto = CircularCamera.prototype;\n Object.defineProperty(__proto, \"offset\", {\n get: function () {\n return this._offset - this._circularOffset;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(__proto, \"controlParams\", {\n get: function () {\n return {\n range: this._range,\n position: this._position,\n circular: this._circularEnabled\n };\n },\n enumerable: false,\n configurable: true\n });\n\n __proto.getPrevAnchor = function (anchor) {\n if (!this._circularEnabled || anchor.index !== 0) return _super.prototype.getPrevAnchor.call(this, anchor);\n var anchors = this._anchors;\n var rangeDiff = this.rangeDiff;\n var lastAnchor = anchors[anchors.length - 1];\n return new AnchorPoint({\n index: lastAnchor.index,\n position: lastAnchor.position - rangeDiff,\n panel: lastAnchor.panel\n });\n };\n\n __proto.getNextAnchor = function (anchor) {\n var anchors = this._anchors;\n if (!this._circularEnabled || anchor.index !== anchors.length - 1) return _super.prototype.getNextAnchor.call(this, anchor);\n var rangeDiff = this.rangeDiff;\n var firstAnchor = anchors[0];\n return new AnchorPoint({\n index: firstAnchor.index,\n position: firstAnchor.position + rangeDiff,\n panel: firstAnchor.panel\n });\n };\n\n __proto.findAnchorIncludePosition = function (position) {\n if (!this._circularEnabled) return _super.prototype.findAnchorIncludePosition.call(this, position);\n var range = this._range;\n var positionInRange = circulatePosition(position, range.min, range.max);\n\n var anchorInRange = _super.prototype.findAnchorIncludePosition.call(this, positionInRange);\n\n if (!anchorInRange) return null;\n var rangeDiff = this.rangeDiff;\n\n if (position < range.min) {\n var loopCount = -Math.floor((range.min - position) / rangeDiff) - 1;\n return new AnchorPoint({\n index: anchorInRange.index,\n position: anchorInRange.position + rangeDiff * loopCount,\n panel: anchorInRange.panel\n });\n } else if (position > range.max) {\n var loopCount = Math.floor((position - range.max) / rangeDiff) + 1;\n return new AnchorPoint({\n index: anchorInRange.index,\n position: anchorInRange.position + rangeDiff * loopCount,\n panel: anchorInRange.panel\n });\n }\n\n return anchorInRange;\n };\n\n __proto.clampToReachablePosition = function (position) {\n // Basically all position is reachable for circular camera\n return this._circularEnabled ? position : _super.prototype.clampToReachablePosition.call(this, position);\n };\n\n __proto.canReach = function (panel) {\n if (panel.removed) return false;\n return this._circularEnabled // Always reachable on circular mode\n ? true : _super.prototype.canReach.call(this, panel);\n };\n\n __proto.canSee = function (panel) {\n var range = this._range;\n var rangeDiff = this.rangeDiff;\n var visibleRange = this.visibleRange;\n\n var visibleInCurrentRange = _super.prototype.canSee.call(this, panel);\n\n if (!this._circularEnabled) {\n return visibleInCurrentRange;\n } // Check looped visible area for circular case\n\n\n if (visibleRange.min < range.min) {\n return visibleInCurrentRange || panel.includeRange(visibleRange.min + rangeDiff, visibleRange.max + rangeDiff, false);\n } else if (visibleRange.max > range.max) {\n return visibleInCurrentRange || panel.includeRange(visibleRange.min - rangeDiff, visibleRange.max - rangeDiff, false);\n }\n\n return visibleInCurrentRange;\n };\n /**\r\n * Update {@link Camera#range range} of Camera\r\n * @ko Camera의 {@link Camera#range range}를 업데이트합니다\r\n * @chainable\r\n * @throws {FlickingError}\r\n * {@link ERROR_CODE NOT_ATTACHED_TO_FLICKING} When {@link Camera#init init} is not called before\r\n * {@link ERROR_CODE NOT_ATTACHED_TO_FLICKING} {@link Camera#init init}이 이전에 호출되지 않은 경우\r\n * @return {this}\r\n */\n\n\n __proto.updateRange = function () {\n var flicking = getFlickingAttached(this._flicking, \"Camera\");\n var renderer = flicking.renderer;\n var panels = renderer.panels;\n\n if (panels.length <= 0) {\n this._resetInternalValues();\n\n return this;\n }\n\n var firstPanel = panels[0];\n var lastPanel = panels[panels.length - 1];\n var firstPanelPrev = firstPanel.range.min - firstPanel.margin.prev;\n var lastPanelNext = lastPanel.range.max + lastPanel.margin.next;\n var visibleSize = this.size;\n var panelSizeSum = lastPanelNext - firstPanelPrev;\n var canSetCircularMode = panels.every(function (panel) {\n return panelSizeSum - panel.size >= visibleSize;\n });\n this._circularEnabled = canSetCircularMode;\n\n if (canSetCircularMode) {\n this._range = {\n min: firstPanelPrev,\n max: lastPanelNext\n };\n panels.forEach(function (panel) {\n return panel.updateCircularToggleDirection();\n });\n } else {\n this._range = {\n min: firstPanel.position,\n max: lastPanel.position\n };\n }\n\n this._updateCircularOffset();\n\n return this;\n };\n\n __proto.lookAt = function (pos) {\n return __awaiter(this, void 0, void 0, function () {\n var flicking, prevPos, panels, toggled;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n flicking = getFlickingAttached(this._flicking, \"Camera\");\n prevPos = this._position;\n if (!(pos === prevPos)) return [3\n /*break*/\n , 2];\n return [4\n /*yield*/\n , _super.prototype.lookAt.call(this, pos)];\n\n case 1:\n return [2\n /*return*/\n , _a.sent()];\n\n case 2:\n panels = flicking.renderer.panels;\n toggled = panels.map(function (panel) {\n return panel.toggle(prevPos, pos);\n });\n this._position = pos;\n if (!toggled.some(function (isToggled) {\n return isToggled;\n })) return [3\n /*break*/\n , 4];\n\n this._updateCircularOffset();\n\n return [4\n /*yield*/\n , flicking.renderer.render()];\n\n case 3:\n _a.sent();\n\n _a.label = 4;\n\n case 4:\n return [4\n /*yield*/\n , _super.prototype.lookAt.call(this, pos)];\n\n case 5:\n return [2\n /*return*/\n , _a.sent()];\n }\n });\n });\n };\n\n __proto._applyTransform = function () {\n var el = this._el;\n var flicking = getFlickingAttached(this._flicking, \"Camera\");\n var actualPosition = this._position - this._alignPos - this._offset + this._circularOffset;\n el.style[this._transform] = flicking.horizontal ? \"translate(\" + -actualPosition + \"px)\" : \"translate(0, \" + -actualPosition + \"px)\";\n };\n\n __proto._resetInternalValues = function () {\n _super.prototype._resetInternalValues.call(this);\n\n this._circularOffset = 0;\n this._circularEnabled = false;\n };\n\n __proto._calcPanelAreaSum = function (panels) {\n return panels.reduce(function (sum, panel) {\n return sum + panel.sizeIncludingMargin;\n }, 0);\n };\n\n __proto._updateCircularOffset = function () {\n if (!this._circularEnabled) {\n this._circularOffset = 0;\n return;\n }\n\n var flicking = getFlickingAttached(this._flicking, \"Camera\");\n var toggledPrev = [];\n var toggledNext = [];\n flicking.panels.filter(function (panel) {\n return panel.toggled;\n }).forEach(function (panel) {\n if (panel.toggleDirection === DIRECTION.PREV) {\n toggledPrev.push(panel);\n } else {\n toggledNext.push(panel);\n }\n });\n this._circularOffset = this._calcPanelAreaSum(toggledPrev) - this._calcPanelAreaSum(toggledNext);\n };\n\n return CircularCamera;\n}(Camera);\n\n/**\r\n * A {@link Camera} that set range not to go out of the first/last panel, so it won't show empty spaces before/after the first/last panel\r\n * @ko 첫번째와 마지막 패널 밖으로 넘어가지 못하도록 범위를 설정하여, 첫번째/마지막 패널 전/후의 빈 공간을 보이지 않도록 하는 종류의 {@link Camera}\r\n */\n\nvar BoundCamera =\n/*#__PURE__*/\nfunction (_super) {\n __extends(BoundCamera, _super);\n\n function BoundCamera() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\r\n * Update {@link Camera#range range} of Camera\r\n * @ko Camera의 {@link Camera#range range}를 업데이트합니다\r\n * @chainable\r\n * @throws {FlickingError}\r\n * {@link ERROR_CODE NOT_ATTACHED_TO_FLICKING} When {@link Camera#init init} is not called before\r\n * {@link ERROR_CODE NOT_ATTACHED_TO_FLICKING} {@link Camera#init init}이 이전에 호출되지 않은 경우\r\n * @return {this}\r\n */\n\n\n var __proto = BoundCamera.prototype;\n\n __proto.updateRange = function () {\n var flicking = getFlickingAttached(this._flicking, \"Camera\");\n var renderer = flicking.renderer;\n var alignPos = this._alignPos;\n var firstPanel = renderer.getPanel(0);\n var lastPanel = renderer.getPanel(renderer.panelCount - 1);\n\n if (!firstPanel || !lastPanel) {\n this._range = {\n min: 0,\n max: 0\n };\n return this;\n }\n\n var viewportSize = this.size;\n var firstPanelPrev = firstPanel.range.min;\n var lastPanelNext = lastPanel.range.max;\n var panelAreaSize = lastPanelNext - firstPanelPrev;\n var canSetBoundMode = viewportSize < panelAreaSize;\n\n if (canSetBoundMode) {\n this._range = {\n min: firstPanelPrev + alignPos,\n max: lastPanelNext - viewportSize + alignPos\n };\n } else {\n this._range = {\n min: firstPanel.position,\n max: lastPanel.position\n };\n }\n\n return this;\n };\n\n __proto.updateAnchors = function () {\n var _this = this;\n\n var flicking = getFlickingAttached(this._flicking, \"Camera\");\n var panels = flicking.renderer.panels;\n\n if (panels.length <= 0) {\n this._anchors = [];\n return this;\n }\n\n var range = this._range;\n var reachablePanels = panels.filter(function (panel) {\n return _this.canReach(panel);\n });\n\n if (reachablePanels.length > 0) {\n var shouldPrependBoundAnchor = reachablePanels[0].position !== range.min;\n var shouldAppendBoundAnchor = reachablePanels[reachablePanels.length - 1].position !== range.max;\n var indexOffset_1 = shouldPrependBoundAnchor ? 1 : 0;\n var newAnchors = reachablePanels.map(function (panel, idx) {\n return new AnchorPoint({\n index: idx + indexOffset_1,\n position: panel.position,\n panel: panel\n });\n });\n\n if (shouldPrependBoundAnchor) {\n newAnchors.splice(0, 0, new AnchorPoint({\n index: 0,\n position: range.min,\n panel: panels[reachablePanels[0].index - 1]\n }));\n }\n\n if (shouldAppendBoundAnchor) {\n newAnchors.push(new AnchorPoint({\n index: newAnchors.length,\n position: range.max,\n panel: panels[reachablePanels[reachablePanels.length - 1].index + 1]\n }));\n }\n\n this._anchors = newAnchors;\n } else if (range.min !== range.max) {\n // There're more than 2 panels\n var nearestPanelAtMin = this._findNearestPanel(range.min, panels);\n\n var panelAtMin = nearestPanelAtMin.index === panels.length - 1 ? nearestPanelAtMin.prev() : nearestPanelAtMin;\n var panelAtMax = panelAtMin.next();\n this._anchors = [new AnchorPoint({\n index: 0,\n position: range.min,\n panel: panelAtMin\n }), new AnchorPoint({\n index: 1,\n position: range.max,\n panel: panelAtMax\n })];\n } else {\n this._anchors = [new AnchorPoint({\n index: 0,\n position: range.min,\n panel: this._findNearestPanel(range.min, panels)\n })];\n }\n\n return this;\n };\n\n __proto.findAnchorIncludePosition = function (position) {\n var range = this._range;\n var anchors = this._anchors;\n if (anchors.length <= 0) return null;\n\n if (position <= range.min) {\n return anchors[0];\n } else if (position >= range.max) {\n return anchors[anchors.length - 1];\n } else {\n return _super.prototype.findAnchorIncludePosition.call(this, position);\n }\n };\n\n __proto._findNearestPanel = function (pos, panels) {\n var prevDist = Infinity;\n\n for (var panelIdx = 0; panelIdx < panels.length; panelIdx++) {\n var panel = panels[panelIdx];\n var dist = Math.abs(panel.position - pos);\n\n if (dist > prevDist) {\n // Return previous anchor\n return panels[panelIdx - 1];\n }\n\n prevDist = dist;\n } // Return last anchor\n\n\n return panels[panels.length - 1];\n };\n\n return BoundCamera;\n}(Camera);\n\nvar RawRenderingStrategy =\n/*#__PURE__*/\nfunction () {\n function RawRenderingStrategy() {}\n\n var __proto = RawRenderingStrategy.prototype;\n\n __proto.updateRenderingPanels = function (flicking) {\n // RawRenderingStrategy always renders all panel elements\n flicking.panels.forEach(function (panel) {\n return panel.markForShow();\n });\n };\n\n return RawRenderingStrategy;\n}();\n\n/**\r\n * A component that manages {@link Panel} and its elements\r\n * @ko {@link Panel}과 그 엘리먼트들을 관리하는 컴포넌트\r\n */\n\nvar Renderer =\n/*#__PURE__*/\nfunction () {\n /**\r\n * @param {object} options An options object옵션 오브젝트\r\n * @param {Constants.ALIGN | string | number} [options.align] An {@link Flicking#align align} value that will be applied to all panels전체 패널에 적용될 {@link Flicking#align align} 값\r\n */\n function Renderer(_a) {\n var _b = _a === void 0 ? {} : _a,\n _c = _b.align,\n align = _c === void 0 ? ALIGN.CENTER : _c,\n _d = _b.strategy,\n strategy = _d === void 0 ? new RawRenderingStrategy() : _d;\n\n this._align = align;\n this._flicking = null;\n this._renderingStrategy = strategy;\n this._panels = [];\n }\n\n var __proto = Renderer.prototype;\n Object.defineProperty(__proto, \"panels\", {\n // Internal states Getter\n\n /**\r\n * Array of panels\r\n * @ko 전체 패널들의 배열\r\n * @type {Panel[]}\r\n * @readonly\r\n * @see Panel\r\n */\n get: function () {\n return this._panels;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(__proto, \"panelCount\", {\n /**\r\n * Count of panels\r\n * @ko 전체 패널의 개수\r\n * @type {number}\r\n * @readonly\r\n */\n get: function () {\n return this._panels.length;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(__proto, \"align\", {\n // Options Getter\n\n /**\r\n * A {@link Panel}'s {@link Panel#align align} value that applied to all panels\r\n * @ko {@link Panel}에 공통적으로 적용할 {@link Panel#align align} 값\r\n * @type {Constants.ALIGN | string | number}\r\n */\n get: function () {\n return this._align;\n },\n // Options Setter\n set: function (val) {\n this._align = val;\n\n var panelAlign = this._getPanelAlign();\n\n this._panels.forEach(function (panel) {\n panel.align = panelAlign;\n });\n },\n enumerable: false,\n configurable: true\n });\n /**\r\n * Initialize Renderer\r\n * @ko Renderer를 초기화합니다\r\n * @param {Flicking} flicking An instance of {@link Flicking}Flicking의 인스턴스\r\n * @chainable\r\n * @return {this}\r\n */\n\n __proto.init = function (flicking) {\n this._flicking = flicking;\n\n this._collectPanels();\n\n return this;\n };\n /**\r\n * Destroy Renderer and return to initial state\r\n * @ko Renderer를 초기 상태로 되돌립니다\r\n * @return {void}\r\n */\n\n\n __proto.destroy = function () {\n this._flicking = null;\n this._panels = [];\n };\n /**\r\n * Return the {@link Panel} at the given index. `null` if it doesn't exists.\r\n * @ko 주어진 인덱스에 해당하는 {@link Panel}을 반환합니다. 주어진 인덱스에 해당하는 패널이 존재하지 않을 경우 `null`을 반환합니다.\r\n * @return {Panel | null} Panel at the given index주어진 인덱스에 해당하는 패널\r\n * @see Panel\r\n */\n\n\n __proto.getPanel = function (index) {\n return this._panels[index] || null;\n };\n /**\r\n * Update all panel sizes\r\n * @ko 모든 패널의 크기를 업데이트합니다\r\n * @chainable\r\n * @return {this}\r\n */\n\n\n __proto.updatePanelSize = function () {\n this._panels.forEach(function (panel) {\n return panel.resize();\n });\n\n return this;\n };\n /**\r\n * Insert new panels at given index\r\n * This will increase index of panels after by the number of panels added\r\n * @ko 주어진 인덱스에 새로운 패널들을 추가합니다\r\n * 해당 인덱스보다 같거나 큰 인덱스를 가진 기존 패널들은 추가한 패널의 개수만큼 인덱스가 증가합니다.\r\n * @param {number} index Index to insert new panels at새로 패널들을 추가할 인덱스\r\n * @param {any[]} elements An array of element or framework component with element in it엘리먼트의 배열 혹은 프레임워크에서 엘리먼트를 포함한 컴포넌트들의 배열\r\n * @return {Panel[]} An array of prepended panels추가된 패널들의 배열\r\n */\n\n\n __proto.batchInsert = function () {\n var _this = this;\n\n var items = [];\n\n for (var _i = 0; _i < arguments.length; _i++) {\n items[_i] = arguments[_i];\n }\n\n var panels = this._panels;\n var flicking = getFlickingAttached(this._flicking, \"Renderer\");\n var control = flicking.control;\n\n var align = this._getPanelAlign();\n\n var allPanelsInserted = items.reduce(function (addedPanels, item) {\n var _a;\n\n var insertingIdx = getMinusCompensatedIndex(item.index, panels.length);\n var panelsPushed = panels.slice(insertingIdx);\n var panelsInserted = item.elements.map(function (el) {\n return _this._createPanel(el, {\n index: insertingIdx,\n align: align,\n flicking: flicking\n });\n });\n panels.splice.apply(panels, __spreadArray([insertingIdx, 0], __read(panelsInserted))); // Resize the newly added panels\n\n panelsInserted.forEach(function (panel) {\n return panel.resize();\n });\n\n var insertedSize = _this._getPanelSizeSum(panelsInserted); // Update panel indexes & positions\n\n\n panelsPushed.forEach(function (panel) {\n panel.increaseIndex(panelsInserted.length);\n panel.increasePosition(insertedSize);\n }); // Insert the actual elements as camera element's children\n\n _this._insertPanelElements(panelsInserted, (_a = panelsPushed[0]) !== null && _a !== void 0 ? _a : null);\n\n return __spreadArray(__spreadArray([], __read(addedPanels)), __read(panelsInserted));\n }, []);\n if (allPanelsInserted.length <= 0) return []; // Update camera & control\n\n this._updateCameraAndControl();\n\n void this.render(); // Move to the first panel added if no panels existed\n // FIXME: fix for animating case\n\n if (allPanelsInserted.length > 0 && !control.animating) {\n void control.moveToPanel(control.activePanel || allPanelsInserted[0], {\n duration: 0\n }).catch(function () {\n return void 0;\n });\n }\n\n flicking.camera.updateOffset();\n flicking.trigger(new ComponentEvent(EVENTS.PANEL_CHANGE, {\n added: allPanelsInserted,\n removed: []\n }));\n return allPanelsInserted;\n };\n /**\r\n * Remove the panel at the given index\r\n * This will decrease index of panels after by the number of panels removed\r\n * @ko 주어진 인덱스의 패널을 제거합니다\r\n * 해당 인덱스보다 큰 인덱스를 가진 기존 패널들은 제거한 패널의 개수만큼 인덱스가 감소합니다\r\n * @param {number} index Index of panel to remove제거할 패널의 인덱스\r\n * @param {number} [deleteCount=1] Number of panels to remove from index`index` 이후로 제거할 패널의 개수\r\n * @return An array of removed panels제거된 패널들의 배열\r\n */\n\n\n __proto.batchRemove = function () {\n var _this = this;\n\n var items = [];\n\n for (var _i = 0; _i < arguments.length; _i++) {\n items[_i] = arguments[_i];\n }\n\n var panels = this._panels;\n var flicking = getFlickingAttached(this._flicking, \"Renderer\");\n var camera = flicking.camera,\n control = flicking.control;\n var activePanel = control.activePanel;\n var activeIndex = control.activeIndex;\n var allPanelsRemoved = items.reduce(function (removed, item) {\n var index = item.index,\n deleteCount = item.deleteCount;\n var removingIdx = getMinusCompensatedIndex(index, panels.length);\n var panelsPulled = panels.slice(removingIdx + deleteCount);\n var panelsRemoved = panels.splice(removingIdx, deleteCount);\n if (panelsRemoved.length <= 0) return []; // Update panel indexes & positions\n\n var removedSize = _this._getPanelSizeSum(panelsRemoved);\n\n panelsPulled.forEach(function (panel) {\n panel.decreaseIndex(panelsRemoved.length);\n panel.decreasePosition(removedSize);\n });\n\n _this._removePanelElements(panelsRemoved); // Remove panel elements\n\n\n panelsRemoved.forEach(function (panel) {\n return panel.destroy();\n }); // Update camera & control\n\n _this._updateCameraAndControl();\n\n if (includes(panelsRemoved, activePanel)) {\n control.resetActive();\n }\n\n return __spreadArray(__spreadArray([], __read(removed)), __read(panelsRemoved));\n }, []);\n void this.render(); // FIXME: fix for animating case\n\n if (allPanelsRemoved.length > 0 && !control.animating) {\n var targetPanel = includes(allPanelsRemoved, activePanel) ? panels[activeIndex] || panels[panels.length - 1] : activePanel;\n\n if (targetPanel) {\n void control.moveToPanel(targetPanel, {\n duration: 0\n }).catch(function () {\n return void 0;\n });\n } else {\n // All panels removed\n void camera.lookAt(0);\n }\n }\n\n flicking.camera.updateOffset();\n flicking.trigger(new ComponentEvent(EVENTS.PANEL_CHANGE, {\n added: [],\n removed: allPanelsRemoved\n }));\n return allPanelsRemoved;\n };\n\n __proto._getPanelAlign = function () {\n var align = this._align;\n return typeof align === \"object\" ? align.panel : align;\n };\n\n __proto._getPanelSizeSum = function (panels) {\n var firstPanel = panels[0];\n var lastPanel = panels[panels.length - 1];\n var marginDiff = lastPanel.margin.next - firstPanel.margin.prev;\n return lastPanel.range.max - firstPanel.range.min + marginDiff;\n };\n\n __proto._updateCameraAndControl = function () {\n var flicking = getFlickingAttached(this._flicking, \"Renderer\");\n var camera = flicking.camera,\n control = flicking.control;\n camera.updateRange();\n camera.updateAnchors();\n camera.resetNeedPanelHistory();\n control.updateInput();\n };\n\n return Renderer;\n}();\n\nvar Panel =\n/*#__PURE__*/\nfunction () {\n /**\r\n * @param {object} options An options object옵션 오브젝트\r\n * @param {number} [options.index] An initial index of the panel패널의 초기 인덱스\r\n * @param {Constants.ALIGN | string | number} [options.align] An initial {@link Flicking#align align} value of the panel패널의 초기 {@link Flicking#align align}값\r\n * @param {Flicking} [options.flicking] A Flicking instance panel's referencing패널이 참조하는 {@link Flicking} 인스턴스\r\n */\n function Panel(_a) {\n var index = _a.index,\n align = _a.align,\n flicking = _a.flicking;\n this._index = index;\n this._flicking = flicking;\n this._align = align;\n this._removed = false;\n\n this._resetInternalStates();\n }\n\n var __proto = Panel.prototype;\n Object.defineProperty(__proto, \"index\", {\n /**\r\n * Index of the panel\r\n * @ko 패널의 인덱스\r\n * @type {number}\r\n * @readonly\r\n */\n get: function () {\n return this._index;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(__proto, \"position\", {\n /**\r\n * Position of the panel, including {@link Panel#alignPosition alignPosition}\r\n * @ko 패널의 현재 좌표, {@link Panel#alignPosition alignPosition}을 포함하고 있습니다\r\n * @type {number}\r\n * @readonly\r\n */\n get: function () {\n return this._pos + this._alignPos;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(__proto, \"size\", {\n /**\r\n * Cached size of the panel element\r\n * This is equal to {@link Panel#element element}'s `offsetWidth` if {@link Flicking#horizontal horizontal} is `true`, and `offsetHeight` else\r\n * @ko 패널 엘리먼트의 캐시된 크기\r\n * 이 값은 {@link Flicking#horizontal horizontal}이 `true`일 경우 {@link Panel#element element}의 `offsetWidth`와 동일하고, `false`일 경우 `offsetHeight`와 동일합니다\r\n * @type {number}\r\n * @readonly\r\n */\n get: function () {\n return this._size;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(__proto, \"sizeIncludingMargin\", {\n /**\r\n * Panel's size including CSS `margin`\r\n * This value includes {@link Panel#element element}'s margin left/right if {@link Flicking#horizontal horizontal} is `true`, and margin top/bottom else\r\n * @ko CSS `margin`을 포함한 패널의 크기\r\n * 이 값은 {@link Flicking#horizontal horizontal}이 `true`일 경우 margin left/right을 포함하고, `false`일 경우 margin top/bottom을 포함합니다\r\n * @type {number}\r\n * @readonly\r\n */\n get: function () {\n return this._size + this._margin.prev + this._margin.next;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(__proto, \"height\", {\n /**\r\n * Height of the panel element\r\n * @ko 패널 엘리먼트의 높이\r\n * @type {number}\r\n * @readonly\r\n */\n get: function () {\n return this._height;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(__proto, \"margin\", {\n /**\r\n * Cached CSS `margin` value of the panel element\r\n * @ko 패널 엘리먼트의 CSS `margin` 값\r\n * @type {object}\r\n * @property {number} prev CSS `margin-left` when the {@link Flicking#horizontal horizontal} is `true`, and `margin-top` else\r\n * {@link Flicking#horizontal horizontal}이 `true`일 경우 `margin-left`, `false`일 경우 `margin-top`에 해당하는 값\r\n * @property {number} next CSS `margin-right` when the {@link Flicking#horizontal horizontal} is `true`, and `margin-bottom` else\r\n * {@link Flicking#horizontal horizontal}이 `true`일 경우 `margin-right`, `false`일 경우 `margin-bottom`에 해당하는 값\r\n * @readonly\r\n */\n get: function () {\n return this._margin;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(__proto, \"alignPosition\", {\n /**\r\n * Align position inside the panel where {@link Camera}'s {@link Camera#alignPosition alignPosition} inside viewport should be located at\r\n * @ko 패널의 정렬 기준 위치. {@link Camera}의 뷰포트 내에서의 {@link Camera#alignPosition alignPosition}이 위치해야 하는 곳입니다\r\n * @type {number}\r\n * @readonly\r\n */\n get: function () {\n return this._alignPos;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(__proto, \"removed\", {\n /**\r\n * A value indicating whether the panel's {@link Flicking#remove remove}d\r\n * @ko 패널이 {@link Flicking#remove remove}되었는지 여부를 나타내는 값\r\n * @type {boolean}\r\n * @readonly\r\n */\n get: function () {\n return this._removed;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(__proto, \"range\", {\n /**\r\n * Panel element's range of the bounding box\r\n * @ko 패널 엘리먼트의 Bounding box 범위\r\n * @type {object}\r\n * @property {number} [min] Bounding box's left({@link Flicking#horizontal horizontal}: true) / top({@link Flicking#horizontal horizontal}: false)\r\n * @property {number} [max] Bounding box's right({@link Flicking#horizontal horizontal}: true) / bottom({@link Flicking#horizontal horizontal}: false)\r\n * @readonly\r\n */\n get: function () {\n return {\n min: this._pos,\n max: this._pos + this._size\n };\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(__proto, \"toggled\", {\n /**\r\n * A value indicating whether the panel's position is toggled by circular behavior\r\n * @ko 패널의 위치가 circular 동작에 의해 토글되었는지 여부를 나타내는 값\r\n * @type {boolean}\r\n * @readonly\r\n */\n get: function () {\n return this._toggled;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(__proto, \"toggleDirection\", {\n /**\r\n * A direction where the panel's position is toggled\r\n * @ko 패널의 위치가 circular 동작에 의해 토글되는 방향\r\n * @type {DIRECTION}\r\n * @readonly\r\n */\n get: function () {\n return this._toggleDirection;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(__proto, \"offset\", {\n /**\r\n * Actual position offset determined by {@link Panel#order}\r\n * @ko {@link Panel#order}에 의한 실제 위치 변경값\r\n * @type {number}\r\n * @readonly\r\n */\n get: function () {\n var toggleDirection = this._toggleDirection;\n var cameraRangeDiff = this._flicking.camera.rangeDiff;\n return toggleDirection === DIRECTION.NONE || !this._toggled ? 0 : toggleDirection === DIRECTION.PREV ? -cameraRangeDiff : cameraRangeDiff;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(__proto, \"progress\", {\n /**\r\n * Progress of movement between previous or next panel relative to current panel\r\n * @ko 이 패널로부터 이전/다음 패널으로의 이동 진행률\r\n * @type {number}\r\n * @readonly\r\n */\n get: function () {\n var flicking = this._flicking;\n return this.index - flicking.camera.progress;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(__proto, \"outsetProgress\", {\n /**\r\n * Progress of movement between points that panel is completely invisible outside of viewport(prev direction: -1, selected point: 0, next direction: 1)\r\n * @ko 현재 패널이 뷰포트 영역 밖으로 완전히 사라지는 지점을 기준으로 하는 진행도(prev방향: -1, 선택 지점: 0, next방향: 1)\r\n * @type {number}\r\n * @readonly\r\n */\n get: function () {\n var position = this.position + this.offset;\n var alignPosition = this._alignPos;\n var camera = this._flicking.camera;\n var camPos = camera.position;\n\n if (camPos === position) {\n return 0;\n }\n\n if (camPos < position) {\n var disappearPosNext = position + (camera.size - camera.alignPosition) + alignPosition;\n return -getProgress(camPos, position, disappearPosNext);\n } else {\n var disappearPosPrev = position - (camera.alignPosition + this._size - alignPosition);\n return 1 - getProgress(camPos, disappearPosPrev, position);\n }\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(__proto, \"visibleRatio\", {\n /**\r\n * Percentage of area where panel is visible in the viewport\r\n * @ko 뷰포트 안에서 패널이 보이는 영역의 비율\r\n * @type {number}\r\n * @readonly\r\n */\n get: function () {\n var range = this.range;\n var size = this._size;\n var offset = this.offset;\n var visibleRange = this._flicking.camera.visibleRange;\n var checkingRange = {\n min: range.min + offset,\n max: range.max + offset\n };\n\n if (checkingRange.max <= visibleRange.min || checkingRange.min >= visibleRange.max) {\n return 0;\n }\n\n var visibleSize = size;\n\n if (visibleRange.min > checkingRange.min) {\n visibleSize -= visibleRange.min - checkingRange.min;\n }\n\n if (visibleRange.max < checkingRange.max) {\n visibleSize -= checkingRange.max - visibleRange.max;\n }\n\n return visibleSize / size;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(__proto, \"align\", {\n // Options Getter\n\n /**\r\n * A value indicating where the {@link Panel#alignPosition alignPosition} should be located at inside the panel element\r\n * @ko {@link Panel#alignPosition alignPosition}이 패널 내의 어디에 위치해야 하는지를 나타내는 값\r\n * @type {Constants.ALIGN | string | number}\r\n */\n get: function () {\n return this._align;\n },\n // Options Getter\n set: function (val) {\n this._align = val;\n },\n enumerable: false,\n configurable: true\n });\n /**\r\n * Update size of the panel\r\n * @ko 패널의 크기를 갱신합니다\r\n * @chainable\r\n * @return {this}\r\n */\n\n __proto.resize = function () {\n var el = this.element;\n var elStyle = getStyle(el);\n var flicking = this._flicking;\n var horizontal = flicking.horizontal;\n var prevPanel = flicking.renderer.panels[this._index - 1];\n this._size = horizontal ? el.offsetWidth : el.offsetHeight;\n this._margin = horizontal ? {\n prev: parseFloat(elStyle.marginLeft || \"0\"),\n next: parseFloat(elStyle.marginRight || \"0\")\n } : {\n prev: parseFloat(elStyle.marginTop || \"0\"),\n next: parseFloat(elStyle.marginBottom || \"0\")\n };\n this._pos = prevPanel ? prevPanel.range.max + prevPanel.margin.next + this._margin.prev : this._margin.prev;\n this._height = horizontal ? el.offsetHeight : this._size;\n\n this._updateAlignPos();\n\n return this;\n };\n /**\r\n * Check whether the given element is inside of this panel's {@link Panel#element element}\r\n * @ko 해당 엘리먼트가 이 패널의 {@link Panel#element element} 내에 포함되어 있는지를 반환합니다\r\n * @param {HTMLElement} element The HTMLElement to check확인하고자 하는 HTMLElement\r\n * @return {boolean} A Boolean value indicating the element is inside of this panel {@link Panel#element element}패널의 {@link Panel#element element}내에 해당 엘리먼트 포함 여부\r\n */\n\n\n __proto.contains = function (element) {\n var _a;\n\n return !!((_a = this.element) === null || _a === void 0 ? void 0 : _a.contains(element));\n };\n /**\r\n * Reset internal state and set {@link Panel#removed removed} to `true`\r\n * @ko 내부 상태를 초기화하고 {@link Panel#removed removed}를 `true`로 설정합니다.\r\n * @return {void}\r\n */\n\n\n __proto.destroy = function () {\n this._resetInternalStates();\n\n this._removed = true;\n };\n /**\r\n * Check whether the given position is inside of this panel's {@link Panel#range range}\r\n * @ko 주어진 좌표가 현재 패널의 {@link Panel#range range}내에 속해있는지를 반환합니다.\r\n * @param {number} pos A position to check확인하고자 하는 좌표\r\n * @param {boolean} [includeMargin=false] Include {@link Panel#margin margin} to the range패널 영역에 {@link Panel#margin margin}값을 포함시킵니다\r\n * @return {boolean} A Boolean value indicating whether the given position is included in the panel range해당 좌표가 패널 영역 내에 속해있는지 여부\r\n */\n\n\n __proto.includePosition = function (pos, includeMargin) {\n if (includeMargin === void 0) {\n includeMargin = false;\n }\n\n return this.includeRange(pos, pos, includeMargin);\n };\n /**\r\n * Check whether the given range is fully included in this panel's area\r\n * @ko 주어진 범위가 이 패널 내부에 완전히 포함되는지를 반환합니다\r\n * @param {number} min Minimum value of the range to check확인하고자 하는 최소 범위\r\n * @param {number} max Maximum value of the range to check확인하고자 하는 최대 범위\r\n * @param {boolean} [includeMargin=false] Include {@link Panel#margin margin} to the range패널 영역에 {@link Panel#margin margin}값을 포함시킵니다\r\n * @returns {boolean} A Boolean value indicating whether the given range is fully included in the panel range해당 범위가 패널 영역 내에 완전히 속해있는지 여부\r\n */\n\n\n __proto.includeRange = function (min, max, includeMargin) {\n if (includeMargin === void 0) {\n includeMargin = false;\n }\n\n var margin = this._margin;\n var panelRange = this.range;\n\n if (includeMargin) {\n panelRange.min -= margin.prev;\n panelRange.max += margin.next;\n }\n\n return max >= panelRange.min && min <= panelRange.max;\n };\n /**\r\n * Move {@link Camera} to this panel\r\n * @ko {@link Camera}를 이 패널로 이동합니다\r\n * @param {number} [duration] Duration of the animation (unit: ms)애니메이션 진행 시간 (단위: ms)\r\n * @returns {Promise} A Promise which will be resolved after reaching the panel패널 도달시에 resolve되는 Promise\r\n */\n\n\n __proto.focus = function (duration) {\n return this._flicking.moveTo(this._index, duration);\n };\n /**\r\n * Get previous(`index - 1`) panel. When the previous panel does not exist, this will return `null` instead\r\n * If the {@link Flicking#circularEnabled circular} is enabled, this will return the last panel if called from the first panel\r\n * @ko 이전(`index - 1`) 패널을 반환합니다. 이전 패널이 없을 경우 `null`을 반환합니다\r\n * {@link Flicking#circularEnabled circular} 모드가 활성화되었을 때 첫번째 패널에서 이 메소드를 호출할 경우 마지막 패널을 반환합니다\r\n * @returns {Panel | null} The previous panel이전 패널\r\n */\n\n\n __proto.prev = function () {\n var index = this._index;\n var flicking = this._flicking;\n var renderer = flicking.renderer;\n var panelCount = renderer.panelCount;\n if (panelCount === 1) return null;\n return flicking.circularEnabled ? renderer.getPanel(index === 0 ? panelCount - 1 : index - 1) : renderer.getPanel(index - 1);\n };\n /**\r\n * Get next(`index + 1`) panel. When the next panel does not exist, this will return `null` instead\r\n * If the {@link Flicking#circularEnabled circular} is enabled, this will return the first panel if called from the last panel\r\n * @ko 다음(`index + 1`) 패널을 반환합니다. 다음 패널이 없을 경우 `null`을 반환합니다\r\n * {@link Flicking#circularEnabled circular} 모드가 활성화되었을 때 마지막 패널에서 이 메소드를 호출할 경우 첫번째 패널을 반환합니다\r\n * @returns {Panel | null} The previous panel다음 패널\r\n */\n\n\n __proto.next = function () {\n var index = this._index;\n var flicking = this._flicking;\n var renderer = flicking.renderer;\n var panelCount = renderer.panelCount;\n if (panelCount === 1) return null;\n return flicking.circularEnabled ? renderer.getPanel(index === panelCount - 1 ? 0 : index + 1) : renderer.getPanel(index + 1);\n };\n /**\r\n * Increase panel's index by the given value\r\n * @ko 패널의 인덱스를 주어진 값만큼 증가시킵니다\r\n * @internal\r\n * @chainable\r\n * @param val An integer greater than or equal to 00보다 같거나 큰 정수\r\n * @returns {this}\r\n */\n\n\n __proto.increaseIndex = function (val) {\n this._index += Math.max(val, 0);\n return this;\n };\n /**\r\n * Decrease panel's index by the given value\r\n * @ko 패널의 인덱스를 주어진 값만큼 감소시킵니다\r\n * @internal\r\n * @chainable\r\n * @param val An integer greater than or equal to 00보다 같거나 큰 정수\r\n * @returns {this}\r\n */\n\n\n __proto.decreaseIndex = function (val) {\n this._index -= Math.max(val, 0);\n return this;\n };\n /**\r\n * Increase panel's position by the given value\r\n * @ko 패널의 위치를 주어진 값만큼 증가시킵니다\r\n * @internal\r\n * @chainable\r\n * @param val An integer greater than or equal to 00보다 같거나 큰 정수\r\n * @returns {this}\r\n */\n\n\n __proto.increasePosition = function (val) {\n this._moveBy(Math.max(val, 0));\n\n return this;\n };\n /**\r\n * Decrease panel's position by the given value\r\n * @ko 패널의위치를 주어진 값만큼 감소시킵니다\r\n * @internal\r\n * @chainable\r\n * @param val An integer greater than or equal to 00보다 같거나 큰 정수\r\n * @returns {this}\r\n */\n\n\n __proto.decreasePosition = function (val) {\n this._moveBy(-Math.max(val, 0));\n\n return this;\n };\n /**\r\n * @internal\r\n * @return {boolean} toggled\r\n */\n\n\n __proto.toggle = function (prevPos, newPos) {\n var toggleDirection = this._toggleDirection;\n var togglePosition = this._togglePosition;\n if (toggleDirection === DIRECTION.NONE || newPos === prevPos) return false;\n var prevToggled = this._toggled;\n\n if (newPos > prevPos) {\n if (togglePosition >= prevPos && togglePosition <= newPos) {\n this._toggled = toggleDirection === DIRECTION.NEXT;\n }\n } else {\n if (togglePosition <= prevPos && togglePosition >= newPos) {\n this._toggled = toggleDirection !== DIRECTION.NEXT;\n }\n }\n\n return prevToggled !== this._toggled;\n };\n /**\r\n * @internal\r\n */\n\n\n __proto.updateCircularToggleDirection = function () {\n var flicking = this._flicking;\n\n if (!flicking.circularEnabled) {\n this._toggleDirection = DIRECTION.NONE;\n this._toggled = false;\n return this;\n }\n\n var camera = flicking.camera;\n var camRange = camera.range;\n var camAlignPosition = camera.alignPosition;\n var camVisibleRange = camera.visibleRange;\n var camVisibleSize = camVisibleRange.max - camVisibleRange.min;\n var minimumVisible = camRange.min - camAlignPosition;\n var maximumVisible = camRange.max - camAlignPosition + camVisibleSize;\n var shouldBeVisibleAtMin = this.includeRange(maximumVisible - camVisibleSize, maximumVisible, false);\n var shouldBeVisibleAtMax = this.includeRange(minimumVisible, minimumVisible + camVisibleSize, false);\n this._toggled = false;\n\n if (shouldBeVisibleAtMin) {\n this._toggleDirection = DIRECTION.PREV;\n this._togglePosition = this.range.max + camRange.min - camRange.max + camAlignPosition;\n this.toggle(Infinity, camera.position);\n } else if (shouldBeVisibleAtMax) {\n this._toggleDirection = DIRECTION.NEXT;\n this._togglePosition = this.range.min + camRange.max - camVisibleSize + camAlignPosition;\n this.toggle(-Infinity, camera.position);\n } else {\n this._toggleDirection = DIRECTION.NONE;\n this._togglePosition = 0;\n }\n\n return this;\n };\n\n __proto._moveBy = function (val) {\n this._pos += val;\n return this;\n };\n\n __proto._updateAlignPos = function () {\n this._alignPos = parseAlign$1(this._align, this._size);\n };\n\n __proto._resetInternalStates = function () {\n this._size = 0;\n this._pos = 0;\n this._margin = {\n prev: 0,\n next: 0\n };\n this._height = 0;\n this._alignPos = 0;\n this._toggled = false;\n this._togglePosition = 0;\n this._toggleDirection = DIRECTION.NONE;\n };\n\n return Panel;\n}();\n\n/**\r\n * An slide data component that holds information of a single HTMLElement\r\n * @ko 슬라이드 데이터 컴포넌트로, 단일 HTMLElement의 정보를 갖고 있습니다\r\n */\n\nvar ElementPanel =\n/*#__PURE__*/\nfunction (_super) {\n __extends(ElementPanel, _super);\n /**\r\n * @param {object} options An options object옵션 오브젝트\r\n * @param {HTMLElement} [options.el] A `HTMLElement` panel's referencing패널이 참조하는 `HTMLElement`\r\n * @param {number} [options.index] An initial index of the panel패널의 초기 인덱스\r\n * @param {Constants.ALIGN | string | number} [options.align] An initial {@link Flicking#align align} value of the panel패널의 초기 {@link Flicking#align align}값\r\n * @param {Flicking} [options.flicking] A Flicking instance panel's referencing패널이 참조하는 {@link Flicking} 인스턴스\r\n */\n\n\n function ElementPanel(options) {\n var _this = _super.call(this, options) || this;\n\n _this._el = options.el;\n _this._rendered = true;\n return _this;\n }\n\n var __proto = ElementPanel.prototype;\n Object.defineProperty(__proto, \"element\", {\n /**\r\n * `HTMLElement` that panel's referencing\r\n * @ko 패널이 참조하고 있는 `HTMLElement`\r\n * @type {HTMLElement}\r\n * @readonly\r\n */\n get: function () {\n return this._el;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(__proto, \"rendered\", {\n get: function () {\n return this._rendered;\n },\n enumerable: false,\n configurable: true\n });\n\n __proto.markForShow = function () {\n this._rendered = true;\n };\n\n __proto.markForHide = function () {\n this._rendered = false;\n };\n\n return ElementPanel;\n}(Panel);\n\n/**\r\n *\r\n */\n\nvar VanillaRenderer =\n/*#__PURE__*/\nfunction (_super) {\n __extends(VanillaRenderer, _super);\n\n function VanillaRenderer() {\n return _super !== null && _super.apply(this, arguments) || this;\n } // eslint-disable-next-line @typescript-eslint/require-await\n\n\n var __proto = VanillaRenderer.prototype;\n\n __proto.render = function () {\n return __awaiter(this, void 0, void 0, function () {\n var strategy, flicking, cameraEl, wasRenderedPanels, renderingPanels;\n return __generator(this, function (_a) {\n strategy = this._renderingStrategy;\n flicking = getFlickingAttached(this._flicking, \"Renderer\");\n cameraEl = flicking.camera.element;\n wasRenderedPanels = this._panels.filter(function (panel) {\n return panel.element.parentElement === cameraEl;\n });\n strategy.updateRenderingPanels(flicking);\n renderingPanels = this._getRenderingPanelsByOrder();\n\n this._removePanelElements(wasRenderedPanels.filter(function (panel) {\n return !panel.rendered;\n }));\n\n this._insertPanelElements(renderingPanels.filter(function (panel) {\n return panel.element.parentElement !== cameraEl;\n }), null);\n\n this._resetPanelElementOrder(renderingPanels);\n\n return [2\n /*return*/\n ];\n });\n });\n }; // eslint-disable-next-line @typescript-eslint/require-await\n\n\n __proto.forceRenderAllPanels = function () {\n return __awaiter(this, void 0, void 0, function () {\n var flicking, camera, cameraElement, fragment;\n return __generator(this, function (_a) {\n flicking = getFlickingAttached(this._flicking, \"Renderer\");\n camera = flicking.camera;\n cameraElement = camera.element;\n fragment = document.createDocumentFragment();\n\n this._panels.forEach(function (panel) {\n return fragment.appendChild(panel.element);\n });\n\n this._removeAllChildsFromCamera();\n\n cameraElement.appendChild(fragment);\n return [2\n /*return*/\n ];\n });\n });\n };\n\n __proto._collectPanels = function () {\n var flicking = getFlickingAttached(this._flicking, \"Renderer\");\n var cameraElement = flicking.camera.element; // Remove all text nodes in the camera element\n\n toArray(cameraElement.childNodes).forEach(function (node) {\n if (node.nodeType === Node.TEXT_NODE) {\n cameraElement.removeChild(node);\n }\n });\n\n var align = this._getPanelAlign();\n\n var cameraChilds = toArray(cameraElement.children);\n this._panels = cameraChilds.map(function (el, index) {\n return new ElementPanel({\n flicking: flicking,\n el: el,\n index: index,\n align: align\n });\n });\n };\n\n __proto._createPanel = function (el, options) {\n return new ElementPanel(__assign({\n el: el\n }, options));\n };\n\n __proto._insertPanelElements = function (panels, nextSibling) {\n var flicking = getFlickingAttached(this._flicking, \"Renderer\");\n var camera = flicking.camera;\n var cameraElement = camera.element;\n var nextSiblingElement = (nextSibling === null || nextSibling === void 0 ? void 0 : nextSibling.element) || null;\n var fragment = document.createDocumentFragment();\n panels.forEach(function (panel) {\n return fragment.appendChild(panel.element);\n });\n cameraElement.insertBefore(fragment, nextSiblingElement);\n return this;\n };\n\n __proto._removePanelElements = function (panels) {\n var flicking = getFlickingAttached(this._flicking, \"Renderer\");\n var cameraElement = flicking.camera.element;\n panels.forEach(function (panel) {\n cameraElement.removeChild(panel.element);\n });\n return this;\n };\n\n __proto._resetPanelElementOrder = function (panels) {\n var flicking = getFlickingAttached(this._flicking, \"Renderer\");\n var cameraEl = flicking.camera.element; // We're using reversed panels here as last panel should be the last element of camera element\n\n var reversedPanels = __spreadArray([], __read(panels)).reverse();\n\n reversedPanels.forEach(function (panel, idx) {\n var nextPanel = reversedPanels[idx - 1];\n var nextPanelEl = nextPanel ? nextPanel.element : null;\n\n if (panel.element.nextElementSibling !== nextPanelEl) {\n cameraEl.insertBefore(panel.element, nextPanelEl);\n }\n });\n };\n\n __proto._removeAllChildsFromCamera = function () {\n var flicking = getFlickingAttached(this._flicking, \"Renderer\");\n var cameraElement = flicking.camera.element; // Remove other elements\n\n while (cameraElement.firstChild) {\n cameraElement.removeChild(cameraElement.firstChild);\n }\n };\n\n __proto._getRenderingPanelsByOrder = function () {\n var flicking = getFlickingAttached(this._flicking, \"Renderer\");\n var panels = flicking.renderer.panels;\n return panels.filter(function (panel) {\n return panel.rendered;\n }).sort(function (a, b) {\n return a.position + a.offset - (b.position + b.offset);\n });\n };\n\n return VanillaRenderer;\n}(Renderer);\n\n/**\r\n *\r\n */\n\nvar ExternalRenderer =\n/*#__PURE__*/\nfunction (_super) {\n __extends(ExternalRenderer, _super);\n\n function ExternalRenderer() {\n return _super !== null && _super.apply(this, arguments) || this;\n } // eslint-disable-next-line @typescript-eslint/no-unused-vars\n\n\n var __proto = ExternalRenderer.prototype;\n\n __proto._insertPanelElements = function (panels, nextSibling) {// DO NOTHING\n }; // eslint-disable-next-line @typescript-eslint/no-unused-vars\n\n\n __proto._removePanelElements = function (panels) {// DO NOTHING\n };\n\n return ExternalRenderer;\n}(Renderer);\n\nvar VisibleRenderingStrategy =\n/*#__PURE__*/\nfunction () {\n function VisibleRenderingStrategy() {}\n\n var __proto = VisibleRenderingStrategy.prototype;\n\n __proto.updateRenderingPanels = function (flicking) {\n var panels = flicking.renderer.panels;\n var camera = flicking.camera;\n var visibleIndexes = camera.visiblePanels.reduce(function (visibles, panel) {\n visibles[panel.index] = true;\n return visibles;\n }, {});\n panels.forEach(function (panel) {\n if (panel.index in visibleIndexes) {\n panel.markForShow();\n } else if (!flicking.holding) {\n // During the input sequence,\n // Do not remove panel elements as it won't trigger touchend event.\n panel.markForHide();\n }\n });\n camera.updateOffset();\n };\n\n return VisibleRenderingStrategy;\n}();\n\n/**\r\n * @extends Component\r\n * @support {\"ie\": \"9+(with polyfill)\", \"ch\" : \"latest\", \"ff\" : \"latest\", \"sf\" : \"latest\", \"edge\" : \"latest\", \"ios\" : \"7+\", \"an\" : \"4.X+\"}\r\n * @requires {@link https://github.com/naver/egjs-component|@egjs/component}\r\n * @requires {@link https://github.com/naver/egjs-axes|@egjs/axes}\r\n */\n\nvar Flicking =\n/*#__PURE__*/\nfunction (_super) {\n __extends(Flicking, _super);\n /**\r\n * @param root A root HTMLElement to initialize Flicking on it. When it's a typeof `string`, it should be a css selector string\r\n * Flicking을 초기화할 HTMLElement로, `string` 타입으로 지정시 css 선택자 문자열을 지정해야 합니다.\r\n * @param {object} [options={}] An options object for Flicking.Flicking에 적용할 옵션 오브젝트\r\n * @throws {FlickingError}\r\n * |code|condition|\r\n * |---|---|\r\n * |{@link ERROR_CODE WRONG_TYPE}|When the root is not either string or HTMLElement|\r\n * |{@link ERROR_CODE ELEMENT_NOT_FOUND}|When the element with given CSS selector does not exist|\r\n * \r\n *\r\n * |code|조건|\r\n * |---|---|\r\n * |{@link ERROR_CODE WRONG_TYPE}|루트 엘리먼트가 string이나 HTMLElement가 아닐 경우|\r\n * |{@link ERROR_CODE ELEMENT_NOT_FOUND}|주어진 CSS selector로 엘리먼트를 찾지 못했을 경우|\r\n *\r\n * \r\n * @example\r\n * ```ts\r\n * import Flicking from \"@egjs/flicking\";\r\n *\r\n * // Creating new instance of Flicking with HTMLElement\r\n * const flicking = new Flicking(document.querySelector(\".flicking-viewport\"), { circular: true });\r\n *\r\n * // Creating new instance of Flicking with CSS selector\r\n * const flicking2 = new Flicking(\".flicking-viewport\", { circular: true });\r\n * ```\r\n */\n\n\n function Flicking(root, _a) {\n var _b = _a === void 0 ? {} : _a,\n _c = _b.align,\n align = _c === void 0 ? ALIGN.CENTER : _c,\n _d = _b.defaultIndex,\n defaultIndex = _d === void 0 ? 0 : _d,\n _e = _b.horizontal,\n horizontal = _e === void 0 ? true : _e,\n _f = _b.circular,\n circular = _f === void 0 ? false : _f,\n _g = _b.bound,\n bound = _g === void 0 ? false : _g,\n _h = _b.adaptive,\n adaptive = _h === void 0 ? false : _h,\n _j = _b.needPanelThreshold,\n needPanelThreshold = _j === void 0 ? 0 : _j,\n _k = _b.preventEventsBeforeInit,\n preventEventsBeforeInit = _k === void 0 ? true : _k,\n _l = _b.deceleration,\n deceleration = _l === void 0 ? 0.0075 : _l,\n _m = _b.duration,\n duration = _m === void 0 ? 500 : _m,\n _o = _b.easing,\n easing = _o === void 0 ? function (x) {\n return 1 - Math.pow(1 - x, 3);\n } : _o,\n _p = _b.inputType,\n inputType = _p === void 0 ? [\"mouse\", \"touch\"] : _p,\n _q = _b.moveType,\n moveType = _q === void 0 ? \"snap\" : _q,\n _r = _b.threshold,\n threshold = _r === void 0 ? 40 : _r,\n _s = _b.interruptable,\n interruptable = _s === void 0 ? true : _s,\n _t = _b.bounce,\n bounce = _t === void 0 ? \"20%\" : _t,\n _u = _b.iOSEdgeSwipeThreshold,\n iOSEdgeSwipeThreshold = _u === void 0 ? 30 : _u,\n _v = _b.preventClickOnDrag,\n preventClickOnDrag = _v === void 0 ? true : _v,\n _w = _b.disableOnInit,\n disableOnInit = _w === void 0 ? false : _w,\n _x = _b.renderOnlyVisible,\n renderOnlyVisible = _x === void 0 ? false : _x,\n _y = _b.autoInit,\n autoInit = _y === void 0 ? true : _y,\n _z = _b.autoResize,\n autoResize = _z === void 0 ? true : _z,\n _0 = _b.renderExternal,\n renderExternal = _0 === void 0 ? null : _0;\n\n var _this = _super.call(this) || this; // Internal states\n\n\n _this._initialized = false;\n _this._plugins = []; // Bind options\n\n _this._align = align;\n _this._defaultIndex = defaultIndex;\n _this._horizontal = horizontal;\n _this._circular = circular;\n _this._bound = bound;\n _this._adaptive = adaptive;\n _this._needPanelThreshold = needPanelThreshold;\n _this._preventEventsBeforeInit = preventEventsBeforeInit;\n _this._deceleration = deceleration;\n _this._duration = duration;\n _this._easing = easing;\n _this._inputType = inputType;\n _this._moveType = moveType;\n _this._threshold = threshold;\n _this._interruptable = interruptable;\n _this._bounce = bounce;\n _this._iOSEdgeSwipeThreshold = iOSEdgeSwipeThreshold;\n _this._preventClickOnDrag = preventClickOnDrag;\n _this._disableOnInit = disableOnInit;\n _this._renderOnlyVisible = renderOnlyVisible;\n _this._autoResize = autoResize;\n _this._autoInit = autoInit;\n _this._renderExternal = renderExternal; // Create core components\n\n _this._viewport = new Viewport(getElement(root));\n _this._renderer = _this._createRenderer();\n _this._camera = _this._createCamera();\n _this._control = _this._createControl();\n _this.resize = _this.resize.bind(_this);\n\n if (_this._autoInit) {\n void _this.init();\n }\n\n return _this;\n }\n\n var __proto = Flicking.prototype;\n Object.defineProperty(__proto, \"control\", {\n // Components\n\n /**\r\n * {@link Control} instance of the Flicking\r\n * @ko 현재 Flicking에 활성화된 {@link Control} 인스턴스\r\n * @type {Control}\r\n * @default SnapControl\r\n * @readonly\r\n * @see Control\r\n * @see SnapControl\r\n * @see FreeControl\r\n */\n get: function () {\n return this._control;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(__proto, \"camera\", {\n /**\r\n * {@link Camera} instance of the Flicking\r\n * @ko 현재 Flicking에 활성화된 {@link Camera} 인스턴스\r\n * @type {Camera}\r\n * @default LinearCamera\r\n * @readonly\r\n * @see Camera\r\n * @see LinearCamera\r\n * @see BoundCamera\r\n * @see CircularCamera\r\n */\n get: function () {\n return this._camera;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(__proto, \"renderer\", {\n /**\r\n * {@link Renderer} instance of the Flicking\r\n * @ko 현재 Flicking에 활성화된 {@link Renderer} 인스턴스\r\n * @type {Renderer}\r\n * @default VanillaRenderer\r\n * @readonly\r\n * @see Renderer\r\n * @see VanillaRenderer\r\n * @see ExternalRenderer\r\n */\n get: function () {\n return this._renderer;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(__proto, \"viewport\", {\n /**\r\n * A component that manages viewport size\r\n * @ko 뷰포트 크기 정보를 담당하는 컴포넌트\r\n * @type {Viewport}\r\n * @readonly\r\n * @see Viewport\r\n */\n get: function () {\n return this._viewport;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(__proto, \"initialized\", {\n // Internal States\n\n /**\r\n * Whether Flicking's {@link Flicking#init init()} is called.\r\n * This is `true` when {@link Flicking#init init()} is called, and is `false` after calling {@link Flicking#destroy destroy()}.\r\n * @ko Flicking의 {@link Flicking#init init()}이 호출되었는지를 나타내는 멤버 변수.\r\n * 이 값은 {@link Flicking#init init()}이 호출되었으면 `true`로 변하고, {@link Flicking#destroy destroy()}호출 이후에 다시 `false`로 변경됩니다.\r\n * @type {boolean}\r\n * @default false\r\n * @readonly\r\n */\n get: function () {\n return this._initialized;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(__proto, \"circularEnabled\", {\n /**\r\n * Whether the `circular` option is enabled.\r\n * The {@link Flicking#circular circular} option can't be enabled when sum of the panel sizes are too small.\r\n * @ko {@link Flicking#circular circular} 옵션이 활성화되었는지 여부를 나타내는 멤버 변수.\r\n * {@link Flicking#circular circular} 옵션은 패널의 크기의 합이 충분하지 않을 경우 비활성화됩니다.\r\n * @type {boolean}\r\n * @default false\r\n * @readonly\r\n */\n get: function () {\n return this._camera.controlParams.circular;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(__proto, \"index\", {\n /**\r\n * Index number of the {@link Flicking#currentPanel currentPanel}\r\n * @ko {@link Flicking#currentPanel currentPanel}의 인덱스 번호\r\n * @type {number}\r\n * @default 0\r\n * @readonly\r\n */\n get: function () {\n return this._control.activeIndex;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(__proto, \"element\", {\n /**\r\n * The root(`.flicking-viewport`) element\r\n * @ko root(`.flicking-viewport`) 엘리먼트\r\n * @type {HTMLElement}\r\n * @readonly\r\n */\n get: function () {\n return this._viewport.element;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(__proto, \"currentPanel\", {\n /**\r\n * Currently active panel\r\n * @ko 현재 선택된 패널\r\n * @type {Panel}\r\n * @readonly\r\n * @see Panel\r\n */\n get: function () {\n return this._control.activePanel;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(__proto, \"panels\", {\n /**\r\n * Array of panels\r\n * @ko 전체 패널들의 배열\r\n * @type {Panel[]}\r\n * @readonly\r\n * @see Panel\r\n */\n get: function () {\n return this._renderer.panels;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(__proto, \"panelCount\", {\n /**\r\n * Count of panels\r\n * @ko 전체 패널의 개수\r\n * @type {number}\r\n * @readonly\r\n */\n get: function () {\n return this._renderer.panelCount;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(__proto, \"visiblePanels\", {\n /**\r\n * Array of panels that is visible at the current position\r\n * @ko 현재 보이는 패널의 배열\r\n * @type {Panel[]}\r\n * @readonly\r\n * @see Panel\r\n */\n get: function () {\n return this._camera.visiblePanels;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(__proto, \"animating\", {\n /**\r\n * Whether Flicking's animating\r\n * @ko 현재 애니메이션 동작 여부\r\n * @type {boolean}\r\n * @readonly\r\n */\n get: function () {\n return this._control.animating;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(__proto, \"holding\", {\n /**\r\n * Whether user is clicking or touching\r\n * @ko 현재 사용자가 클릭/터치중인지 여부\r\n * @type {boolean}\r\n * @readonly\r\n */\n get: function () {\n return this._control.holding;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(__proto, \"activePlugins\", {\n /**\r\n * A current list of activated plugins\r\n * @ko 현재 활성화된 플러그인 목록\r\n * @type {Plugin[]}\r\n * @readonly\r\n */\n get: function () {\n return this._plugins;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(__proto, \"align\", {\n // Options Getter\n // UI / LAYOUT\n\n /**\r\n * Align position of the panels within viewport. You can set different values each for the panel and camera\r\n * @ko 뷰포트 내에서 패널 정렬방식을 설정하는 옵션. 카메라와 패널 개별로 옵션을 설정할 수도 있습니다\r\n * @type {ALIGN | string | number | { panel: string | number, camera: string | number }}\r\n * @property {ALIGN | string | number} panel The align value for each {@link Panel}s개개의 {@link Panel}에 적용할 값\r\n * @property {ALIGN | string | number} camera The align value for {@link Camera}{@link Camera}에 적용할 값\r\n * @default \"center\"\r\n * @example\r\n * ```ts\r\n * const possibleOptions = [\r\n * // Literal strings\r\n * \"prev\", \"center\", \"next\",\r\n * // % values, applied to both panel & camera\r\n * \"0%\", \"25%\", \"42%\",\r\n * // px values, arithmetic calculation with (+/-) is also allowed.\r\n * \"0px\", \"100px\", \"50% - 25px\",\r\n * // numbers, same to number + px (\"0px\", \"100px\")\r\n * 0, 100, 1000,\r\n * // Setting a different value for panel & camera\r\n * { panel: \"10%\", camera: \"25%\" }\r\n * ];\r\n *\r\n * possibleOptions.forEach(align => {\r\n * new Flicking(\"#el\", { align });\r\n * });\r\n * ```\r\n */\n get: function () {\n return this._align;\n },\n // Options Setter\n // UI / LAYOUT\n set: function (val) {\n this._align = val;\n this._renderer.align = val;\n this._camera.align = val;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(__proto, \"defaultIndex\", {\n /**\r\n * Index of the panel to move when Flicking's {@link Flicking#init init()} is called. A zero-based integer\r\n * @ko Flicking의 {@link Flicking#init init()}이 호출될 때 이동할 디폴트 패널의 인덱스로, 0부터 시작하는 정수입니다\r\n * @type {number}\r\n * @default 0\r\n */\n get: function () {\n return this._defaultIndex;\n },\n set: function (val) {\n this._defaultIndex = val;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(__proto, \"horizontal\", {\n /**\r\n * Direction of panel movement (true: horizontal, false: vertical)\r\n * @ko 패널 이동 방향 (true: 가로방향, false: 세로방향)\r\n * @type {boolean}\r\n * @default true\r\n */\n get: function () {\n return this._horizontal;\n },\n set: function (val) {\n this._horizontal = val;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(__proto, \"circular\", {\n /**\r\n * Enables circular(continuous loop) mode, which connects first/last panel for continuous scrolling.\r\n * @ko 순환 모드를 활성화합니다. 순환 모드에서는 양 끝의 패널이 서로 연결되어 끊김없는 스크롤이 가능합니다.\r\n * @type {boolean}\r\n * @default false\r\n */\n get: function () {\n return this._circular;\n },\n set: function (val) {\n this._circular = val;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(__proto, \"bound\", {\n /**\r\n * Prevent the view(camera element) from going out of the first/last panel, so it won't show empty spaces before/after the first/last panel\r\n * Only can be enabled when `circular=false`\r\n * @ko 뷰(카메라 엘리먼트)가 첫번째와 마지막 패널 밖으로 넘어가지 못하게 하여, 첫번째/마지막 패널 전/후의 빈 공간을 보이지 않도록 하는 옵션입니다\r\n * `circular=false`인 경우에만 사용할 수 있습니다\r\n * @type {boolean}\r\n * @default false\r\n */\n get: function () {\n return this._bound;\n },\n set: function (val) {\n this._bound = val;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(__proto, \"adaptive\", {\n /**\r\n * Update height of the viewport element after movement same to the height of the panel below. This can be only enabled when `horizontal=true`\r\n * @ko 이동한 후 뷰포트 엘리먼트의 크기를 현재 패널의 높이와 동일하게 설정합니다. `horizontal=true`인 경우에만 사용할 수 있습니다.\r\n * @type {boolean}\r\n * @default false\r\n */\n get: function () {\n return this._adaptive;\n },\n set: function (val) {\n this._adaptive = val;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(__proto, \"needPanelThreshold\", {\n // EVENTS\n\n /**\r\n * A Threshold from viewport edge before triggering `needPanel` event\r\n * @ko `needPanel`이벤트가 발생하기 위한 뷰포트 끝으로부터의 최대 거리\r\n * @type {number}\r\n * @default 0\r\n */\n get: function () {\n return this._needPanelThreshold;\n },\n // EVENTS\n set: function (val) {\n this._needPanelThreshold = val;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(__proto, \"preventEventsBeforeInit\", {\n /**\r\n * When enabled, events are not triggered before `ready` when initializing\r\n * @ko 활성화할 경우 초기화시 `ready` 이벤트 이전의 이벤트가 발생하지 않습니다.\r\n * @type {boolean}\r\n * @default true\r\n */\n get: function () {\n return this._preventEventsBeforeInit;\n },\n set: function (val) {\n this._preventEventsBeforeInit = val;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(__proto, \"deceleration\", {\n // ANIMATION\n\n /**\r\n * Deceleration value for panel movement animation which is triggered by user input. A higher value means a shorter animation time\r\n * @ko 사용자의 동작으로 가속도가 적용된 패널 이동 애니메이션의 감속도. 값이 높을수록 애니메이션 실행 시간이 짧아집니다\r\n * @type {number}\r\n * @default 0.0075\r\n */\n get: function () {\n return this._deceleration;\n },\n // ANIMATION\n set: function (val) {\n this._deceleration = val;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(__proto, \"easing\", {\n /**\r\n * An easing function applied to the panel movement animation. Default value is `easeOutCubic`\r\n * @ko 패널 이동 애니메이션에 적용할 easing 함수. 기본값은 `easeOutCubic`이다\r\n * @type {function}\r\n * @default x => 1 - Math.pow(1 - x, 3)\r\n * @see Easing Functions Cheat Sheet {@link http://easings.net/} 이징 함수 Cheat Sheet {@link http://easings.net/}\r\n */\n get: function () {\n return this._easing;\n },\n set: function (val) {\n this._easing = val;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(__proto, \"duration\", {\n /**\r\n * Default duration of the animation (ms)\r\n * @ko 디폴트 애니메이션 재생 시간 (ms)\r\n * @type {number}\r\n * @default 500\r\n */\n get: function () {\n return this._duration;\n },\n set: function (val) {\n this._duration = val;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(__proto, \"inputType\", {\n // INPUT\n\n /**\r\n * Types of input devices to enable\r\n * @ko 활성화할 입력 장치 종류\r\n * @type {string[]}\r\n * @default [\"touch\", \"mouse\"]\r\n * @see {@link https://naver.github.io/egjs-axes/release/latest/doc/global.html#PanInputOption Possible values (PanInputOption#inputType)}\r\n * {@link https://naver.github.io/egjs-axes/release/latest/doc/global.html#PanInputOption 가능한 값들 (PanInputOption#inputType)}\r\n */\n get: function () {\n return this._inputType;\n },\n // INPUT\n set: function (val) {\n this._inputType = val;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(__proto, \"moveType\", {\n /**\r\n * Movement style by user input. This will change instance type of {@link Flicking#control}\r\n * You can use the values of the constant {@link MOVE_TYPE}\r\n * @ko 사용자 입력에 의한 이동 방식. 이 값에 따라 {@link Flicking#control}의 인스턴스 타입이 결정됩니다\r\n * 상수 {@link MOVE_TYPE}에 정의된 값들을 이용할 수 있습니다\r\n * @type {MOVE_TYPE | Pair}\r\n * @default \"snap\"\r\n * @example\r\n * |moveType|control|options|\r\n * |:---:|:---:|:---:|\r\n * |\"snap\"|{@link SnapControl}||\r\n * |\"freeScroll\"|{@link FreeControl}|{@link FreeControlOptions}|\r\n *\r\n * ```ts\r\n * import Flicking, { MOVE_TYPE } from \"@egjs/flicking\";\r\n *\r\n * const flicking = new Flicking({\r\n * moveType: MOVE_TYPE.SNAP\r\n * });\r\n * ```\r\n *\r\n * ```ts\r\n * const flicking = new Flicking({\r\n * // If you want more specific settings for the moveType\r\n * // [moveType, options for that moveType]\r\n * // In this case, it's [\"freeScroll\", FreeControlOptions]\r\n * moveType: [MOVE_TYPE.FREE_SCROLL, { stopAtEdge: true }]\r\n * });\r\n * ```\r\n */\n get: function () {\n return this._moveType;\n },\n set: function (val) {\n this._moveType = val;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(__proto, \"threshold\", {\n /**\r\n * Movement threshold to change panel (unit: px). It should be dragged above the threshold to change the current panel.\r\n * @ko 패널 변경을 위한 이동 임계값 (단위: px). 주어진 값 이상으로 스크롤해야만 패널 변경이 가능하다.\r\n * @type {number}\r\n * @default 40\r\n */\n get: function () {\n return this._threshold;\n },\n set: function (val) {\n this._threshold = val;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(__proto, \"interruptable\", {\n /**\r\n * Set animation to be interruptable by click/touch.\r\n * @ko 사용자의 클릭/터치로 인해 애니메이션을 도중에 멈출 수 있도록 설정합니다.\r\n * @type {boolean}\r\n * @default true\r\n */\n get: function () {\n return this._interruptable;\n },\n set: function (val) {\n this._interruptable = val;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(__proto, \"bounce\", {\n /**\r\n * The size value of the bounce area. Only can be enabled when `circular=false`.\r\n * You can set different bounce value for prev/next direction by using array.\r\n * `number` for px value, and `string` for px, and % value relative to viewport size.\r\n * You have to call {@link Control#updateInput} after changing this to take effect.\r\n * @ko Flicking이 최대 영역을 넘어서 갈 수 있는 최대 크기. `circular=false`인 경우에만 사용할 수 있습니다.\r\n * 배열을 통해 prev/next 방향에 대해 서로 다른 바운스 값을 지정할 수 있습니다.\r\n * `number`를 통해 px값을, `stirng`을 통해 px 혹은 뷰포트 크기 대비 %값을 사용할 수 있습니다.\r\n * 이 값을 변경시 {@link Control#updateInput}를 호출해야 합니다.\r\n * @type {string | number | Array}\r\n * @default \"20%\"\r\n * @example\r\n * ```ts\r\n * const possibleOptions = [\r\n * // % values, relative to viewport element(\".flicking-viewport\")'s size\r\n * \"0%\", \"25%\", \"42%\",\r\n * // px values, arithmetic calculation with (+/-) is also allowed.\r\n * \"0px\", \"100px\", \"50% - 25px\",\r\n * // numbers, same to number + px (\"0px\", \"100px\")\r\n * 0, 100, 1000\r\n * ];\r\n * ```\r\n *\r\n * @example\r\n * ```ts\r\n * const flicking = new Flicking(\"#el\", { bounce: \"20%\" });\r\n *\r\n * flicking.bounce = \"100%\";\r\n * flicking.control.updateInput(); // Call this to update!\r\n * ```\r\n */\n get: function () {\n return this._bounce;\n },\n set: function (val) {\n this._bounce = val;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(__proto, \"iOSEdgeSwipeThreshold\", {\n /**\r\n * Size of the area from the right edge in iOS safari (in px) which enables swipe-back or swipe-forward\r\n * @ko iOS Safari에서 swipe를 통한 뒤로가기/앞으로가기를 활성화하는 오른쪽 끝으로부터의 영역의 크기 (px)\r\n * @type {number}\r\n * @default 30\r\n */\n get: function () {\n return this._iOSEdgeSwipeThreshold;\n },\n set: function (val) {\n this._iOSEdgeSwipeThreshold = val;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(__proto, \"preventClickOnDrag\", {\n /**\r\n * Automatically prevent `click` event if the user has dragged at least a single pixel on the viewport element\r\n * @ko 사용자가 뷰포트 영역을 1픽셀이라도 드래그했을 경우 자동으로 {@link https://developer.mozilla.org/ko/docs/Web/API/Element/click_event click} 이벤트를 취소합니다\r\n * @type {boolean}\r\n * @default true\r\n */\n get: function () {\n return this._preventClickOnDrag;\n },\n set: function (val) {\n var prevVal = this._preventClickOnDrag;\n if (val === prevVal) return;\n var controller = this._control.controller;\n\n if (val) {\n controller.addPreventClickHandler();\n } else {\n controller.removePreventClickHandler();\n }\n\n this._preventClickOnDrag = val;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(__proto, \"disableOnInit\", {\n /**\r\n * Automatically call {@link Flicking#disableInput disableInput()} on initialization\r\n * @ko Flicking init시에 {@link Flicking#disableInput disableInput()}을 바로 호출합니다\r\n * @type {boolean}\r\n * @default false\r\n */\n get: function () {\n return this._disableOnInit;\n },\n set: function (val) {\n this._disableOnInit = val;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(__proto, \"renderOnlyVisible\", {\n // PERFORMANCE\n\n /**\r\n * Whether to render visible panels only. This can dramatically increase performance when there're many panels.\r\n * @ko 보이는 패널만 렌더링할지 여부를 설정합니다. 패널이 많을 경우에 퍼포먼스를 크게 향상시킬 수 있습니다.\r\n * @type {boolean}\r\n * @default false\r\n */\n get: function () {\n return this._renderOnlyVisible;\n },\n // PERFORMANCE\n set: function (val) {\n this._renderOnlyVisible = val;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(__proto, \"autoInit\", {\n // OTHERS\n\n /**\r\n * Call {@link Flicking#init init()} automatically when creating Flicking's instance\r\n * @ko Flicking 인스턴스를 생성할 때 자동으로 {@link Flicking#init init()}를 호출합니다\r\n * @type {boolean}\r\n * @default true\r\n * @readonly\r\n */\n get: function () {\n return this._autoInit;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(__proto, \"autoResize\", {\n /**\r\n * Attach Flicking's {@link Flicking#resize resize} method to window's resize event.\r\n * Flicking will automatically call {@link Flicking#resize resize} window size and orientation change.\r\n * @ko Flicking의 {@link Flicking#resize resize} 메소드를 window의 resize 이벤트 핸들러로 등록합니다.\r\n * 설정시 window 창 크기 및 orientation 변경에 의해 자동으로 {@link Flicking#resize resize}를 호출합니다.\r\n * @type {boolean}\r\n * @default true\r\n */\n get: function () {\n return this._autoResize;\n },\n // OTHERS\n set: function (val) {\n this._autoResize = val;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(__proto, \"renderExternal\", {\n /**\r\n * This is an option for the frameworks(React, Vue, Angular, ...). Don't set it as it's automatically managed by Flicking.\r\n * @ko 프레임워크(React, Vue, Angular, ...)에서만 사용하는 옵션으로, 자동으로 설정되므로 따로 사용하실 필요 없습니다!\r\n * @type {boolean}\r\n * @default false\r\n * @internal\r\n * @readonly\r\n */\n get: function () {\n return this._renderExternal;\n },\n enumerable: false,\n configurable: true\n });\n /**\r\n * Initialize Flicking and move to the default index\r\n * This is automatically called on Flicking's constructor when `autoInit` is true(default)\r\n * @ko Flicking을 초기화하고, 디폴트 인덱스로 이동합니다\r\n * 이 메소드는 `autoInit` 옵션이 true(default)일 경우 Flicking이 생성될 때 자동으로 호출됩니다\r\n * @fires Flicking#ready\r\n * @return {this}\r\n */\n\n __proto.init = function () {\n return __awaiter(this, void 0, void 0, function () {\n var camera, renderer, control, originalTrigger, preventEventsBeforeInit;\n\n var _this = this;\n\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (this._initialized) return [2\n /*return*/\n ];\n camera = this._camera;\n renderer = this._renderer;\n control = this._control;\n originalTrigger = this.trigger;\n preventEventsBeforeInit = this._preventEventsBeforeInit;\n camera.init(this);\n renderer.init(this);\n control.init(this);\n\n if (preventEventsBeforeInit) {\n this.trigger = function () {\n return _this;\n };\n }\n\n return [4\n /*yield*/\n , this.resize()];\n\n case 1:\n _a.sent(); // Look at initial panel\n\n\n return [4\n /*yield*/\n , this._moveToInitialPanel()];\n\n case 2:\n // Look at initial panel\n _a.sent();\n\n if (this._autoResize) {\n window.addEventListener(\"resize\", this.resize);\n }\n\n if (this._preventClickOnDrag) {\n control.controller.addPreventClickHandler();\n }\n\n if (this._disableOnInit) {\n this.disableInput();\n }\n\n this._plugins.forEach(function (plugin) {\n return plugin.init(_this);\n }); // Done initializing & emit ready event\n\n\n this._initialized = true;\n\n if (preventEventsBeforeInit) {\n this.trigger = originalTrigger;\n }\n\n this.trigger(new ComponentEvent(EVENTS.READY));\n return [2\n /*return*/\n ];\n }\n });\n });\n };\n /**\r\n * Destroy Flicking and remove all event handlers\r\n * @ko Flicking과 하위 컴포넌트들을 초기 상태로 되돌리고, 부착된 모든 이벤트 핸들러를 제거합니다\r\n * @return {void}\r\n */\n\n\n __proto.destroy = function () {\n if (!this._initialized) return;\n this.off();\n window.removeEventListener(\"resize\", this.resize);\n\n this._control.destroy();\n\n this._camera.destroy();\n\n this._renderer.destroy();\n\n this._plugins.forEach(function (plugin) {\n return plugin.destroy();\n });\n\n this._initialized = false;\n };\n /**\r\n * Move to the previous panel (current index - 1)\r\n * @ko 이전 패널로 이동합니다 (현재 인덱스 - 1)\r\n * @param {number} [duration={@link Flicking#duration options.duration}] Duration of the panel movement animation (unit: ms)패널 이동 애니메이션 진행 시간 (단위: ms)\r\n * @async\r\n * @fires Flicking#moveStart\r\n * @fires Flicking#move\r\n * @fires Flicking#moveEnd\r\n * @fires Flicking#willChange\r\n * @fires Flicking#changed\r\n * @fires Flicking#willRestore\r\n * @fires Flicking#restored\r\n * @fires Flicking#needPanel\r\n * @fires Flicking#visibleChange\r\n * @fires Flicking#reachEdge\r\n * @throws {FlickingError}\r\n * |code|condition|\r\n * |---|---|\r\n * |{@link ERROR_CODE INDEX_OUT_OF_RANGE}|When the previous panel does not exist|\r\n * |{@link ERROR_CODE ANIMATION_ALREADY_PLAYING}|When the animation is already playing|\r\n * |{@link ERROR_CODE ANIMATION_INTERRUPTED}|When the animation is interrupted by user input|\r\n * |{@link ERROR_CODE STOP_CALLED_BY_USER}|When the any of the event's `stop()` is called|\r\n * \r\n *\r\n * |code|condition|\r\n * |---|---|\r\n * |{@link ERROR_CODE INDEX_OUT_OF_RANGE}|이전 패널이 존재하지 않을 경우|\r\n * |{@link ERROR_CODE ANIMATION_ALREADY_PLAYING}|애니메이션이 이미 진행중인 경우|\r\n * |{@link ERROR_CODE ANIMATION_INTERRUPTED}|사용자 입력에 의해 애니메이션이 중단된 경우|\r\n * |{@link ERROR_CODE STOP_CALLED_BY_USER}|발생된 이벤트들 중 하나라도 `stop()`이 호출된 경우|\r\n * \r\n * @return {Promise} A Promise which will be resolved after reaching the previous panel이전 패널 도달시에 resolve되는 Promise\r\n */\n\n\n __proto.prev = function (duration) {\n var _a, _b, _c;\n\n if (duration === void 0) {\n duration = this._duration;\n }\n\n return this.moveTo((_c = (_b = (_a = this._control.activePanel) === null || _a === void 0 ? void 0 : _a.prev()) === null || _b === void 0 ? void 0 : _b.index) !== null && _c !== void 0 ? _c : -1, duration, DIRECTION.PREV);\n };\n /**\r\n * Move to the next panel (current index + 1)\r\n * @ko 다음 패널로 이동합니다 (현재 인덱스 + 1)\r\n * @param {number} [duration={@link Flicking#duration options.duration}] Duration of the panel movement animation (unit: ms).패널 이동 애니메이션 진행 시간 (단위: ms)\r\n * @async\r\n * @fires Flicking#moveStart\r\n * @fires Flicking#move\r\n * @fires Flicking#moveEnd\r\n * @fires Flicking#willChange\r\n * @fires Flicking#changed\r\n * @fires Flicking#willRestore\r\n * @fires Flicking#restored\r\n * @fires Flicking#needPanel\r\n * @fires Flicking#visibleChange\r\n * @fires Flicking#reachEdge\r\n * @throws {FlickingError}\r\n * |code|condition|\r\n * |---|---|\r\n * |{@link ERROR_CODE INDEX_OUT_OF_RANGE}|When the next panel does not exist|\r\n * |{@link ERROR_CODE ANIMATION_ALREADY_PLAYING}|When the animation is already playing|\r\n * |{@link ERROR_CODE ANIMATION_INTERRUPTED}|When the animation is interrupted by user input|\r\n * |{@link ERROR_CODE STOP_CALLED_BY_USER}|When the any of the event's `stop()` is called|\r\n * \r\n *\r\n * |code|condition|\r\n * |---|---|\r\n * |{@link ERROR_CODE INDEX_OUT_OF_RANGE}|다음 패널이 존재하지 않을 경우|\r\n * |{@link ERROR_CODE ANIMATION_ALREADY_PLAYING}|애니메이션이 이미 진행중인 경우|\r\n * |{@link ERROR_CODE ANIMATION_INTERRUPTED}|사용자 입력에 의해 애니메이션이 중단된 경우|\r\n * |{@link ERROR_CODE STOP_CALLED_BY_USER}|발생된 이벤트들 중 하나라도 `stop()`이 호출된 경우|\r\n *\r\n * \r\n * @return {Promise} A Promise which will be resolved after reaching the next panel다음 패널 도달시에 resolve되는 Promise\r\n */\n\n\n __proto.next = function (duration) {\n var _a, _b, _c;\n\n if (duration === void 0) {\n duration = this._duration;\n }\n\n return this.moveTo((_c = (_b = (_a = this._control.activePanel) === null || _a === void 0 ? void 0 : _a.next()) === null || _b === void 0 ? void 0 : _b.index) !== null && _c !== void 0 ? _c : this._renderer.panelCount, duration, DIRECTION.NEXT);\n };\n /**\r\n * Move to the panel with given index\r\n * @ko 주어진 인덱스에 해당하는 패널로 이동합니다\r\n * @param {number} index The index of the panel to move이동할 패널의 인덱스\r\n * @param {number} [duration={@link Flicking#duration options.duration}] Duration of the animation (unit: ms)애니메이션 진행 시간 (단위: ms)\r\n * @param {DIRECTION} [direction=DIRECTION.NONE] Direction to move, only available in the {@link Flicking#circular circular} mode이동할 방향. {@link Flicking#circular circular} 옵션 활성화시에만 사용 가능합니다\r\n * @async\r\n * @fires Flicking#moveStart\r\n * @fires Flicking#move\r\n * @fires Flicking#moveEnd\r\n * @fires Flicking#willChange\r\n * @fires Flicking#changed\r\n * @fires Flicking#willRestore\r\n * @fires Flicking#restored\r\n * @fires Flicking#needPanel\r\n * @fires Flicking#visibleChange\r\n * @fires Flicking#reachEdge\r\n * @throws {FlickingError}\r\n * |code|condition|\r\n * |---|---|\r\n * |{@link ERROR_CODE INDEX_OUT_OF_RANGE}|When the root is not either string or HTMLElement|\r\n * |{@link ERROR_CODE ANIMATION_ALREADY_PLAYING}|When the animation is already playing|\r\n * |{@link ERROR_CODE ANIMATION_INTERRUPTED}|When the animation is interrupted by user input|\r\n * |{@link ERROR_CODE STOP_CALLED_BY_USER}|When the any of the event's `stop()` is called|\r\n * \r\n *\r\n * |code|condition|\r\n * |---|---|\r\n * |{@link ERROR_CODE INDEX_OUT_OF_RANGE}|해당 인덱스를 가진 패널이 존재하지 않을 경우|\r\n * |{@link ERROR_CODE ANIMATION_ALREADY_PLAYING}|애니메이션이 이미 진행중인 경우|\r\n * |{@link ERROR_CODE ANIMATION_INTERRUPTED}|사용자 입력에 의해 애니메이션이 중단된 경우|\r\n * |{@link ERROR_CODE STOP_CALLED_BY_USER}|발생된 이벤트들 중 하나라도 `stop()`이 호출된 경우|\r\n *\r\n * \r\n * @return {Promise} A Promise which will be resolved after reaching the target panel해당 패널 도달시에 resolve되는 Promise\r\n */\n\n\n __proto.moveTo = function (index, duration, direction) {\n if (duration === void 0) {\n duration = this._duration;\n }\n\n if (direction === void 0) {\n direction = DIRECTION.NONE;\n }\n\n var renderer = this._renderer;\n var panelCount = renderer.panelCount;\n var panel = renderer.getPanel(index);\n\n if (!panel) {\n return Promise.reject(new FlickingError(MESSAGE.INDEX_OUT_OF_RANGE(index, 0, panelCount - 1), CODE.INDEX_OUT_OF_RANGE));\n }\n\n if (this._control.animating) {\n return Promise.reject(new FlickingError(MESSAGE.ANIMATION_ALREADY_PLAYING, CODE.ANIMATION_ALREADY_PLAYING));\n }\n\n return this._control.moveToPanel(panel, {\n duration: duration,\n direction: direction\n });\n };\n /**\r\n * Return the {@link Panel} at the given index. `null` if it doesn't exists.\r\n * @ko 주어진 인덱스에 해당하는 {@link Panel}을 반환합니다. 주어진 인덱스에 해당하는 패널이 존재하지 않을 경우 `null`을 반환합니다.\r\n * @return {Panel | null} Panel at the given index주어진 인덱스에 해당하는 패널\r\n * @see Panel\r\n * @example\r\n * ```ts\r\n * const panel = flicking.getPanel(0);\r\n * // Which is a shorthand to...\r\n * const samePanel = flicking.panels[0];\r\n * ```\r\n */\n\n\n __proto.getPanel = function (index) {\n return this._renderer.getPanel(index);\n };\n /**\r\n * Enable input from the user (mouse/touch)\r\n * @ko 사용자의 입력(마우스/터치)를 활성화합니다\r\n * @return {this}\r\n */\n\n\n __proto.enableInput = function () {\n this._control.enable();\n\n return this;\n };\n /**\r\n * Disable input from the user (mouse/touch)\r\n * @ko 사용자의 입력(마우스/터치)를 막습니다\r\n * @return {this}\r\n */\n\n\n __proto.disableInput = function () {\n this._control.disable();\n\n return this;\n };\n /**\r\n * Get current flicking status. You can restore current state by giving returned value to {@link Flicking#setStatus setStatus()}\r\n * @ko 현재 상태를 반환합니다. 반환받은 값을 {@link Flicking#setStatus setStatus()} 메소드의 인자로 지정하면 현재 상태를 복원할 수 있습니다\r\n * @param {object} options Status retrieving optionsStatus 반환 옵션\r\n * @param {boolean} [options.index=true] Include current panel index to the returning status. Camera will automatically move to the given index when the {@link Flicking#setStatus setStatus} is called현재 패널 인덱스를 반환값에 포함시킵니다. {@link Flicking#setStatus setStatus} 호출시 자동으로 해당 인덱스로 카메라를 움직입니다\r\n * @param {boolean} [options.position=true] Include camera position to the returning status. This works only when the {@link Flicking#moveType moveType} is `freeScroll`카메라의 현재 위치를 반환값에 포함시킵니다. 이 옵션은 {@link Flicking#moveType moveType}이 `freeScroll`일 경우에만 동작합니다\r\n * @param {boolean} [options.includePanelHTML=false] Include panel's `outerHTML` to the returning status패널의 `outerHTML`을 반환값에 포함시킵니다\r\n * @param {boolean} [options.visiblePanelsOnly=false] Include only {@link Flicking#visiblePanel visiblePanel}'s HTML. This option is available only when the `includePanelHTML` is true\r\n * 현재 보이는 패널({@link Flicking#visiblePanel visiblePanel})의 HTML만 반환합니다. `includePanelHTML`이 `true`일 경우에만 동작합니다.\r\n * @return {Partial} An object with current status value information현재 상태값 정보를 가진 객체.\r\n */\n\n\n __proto.getStatus = function (_a) {\n var _b, _c;\n\n var _d = _a === void 0 ? {} : _a,\n _e = _d.index,\n index = _e === void 0 ? true : _e,\n _f = _d.position,\n position = _f === void 0 ? true : _f,\n _g = _d.includePanelHTML,\n includePanelHTML = _g === void 0 ? false : _g,\n _h = _d.visiblePanelsOnly,\n visiblePanelsOnly = _h === void 0 ? false : _h;\n\n var camera = this._camera;\n var panels = visiblePanelsOnly ? this.visiblePanels : this.panels;\n var status = {\n panels: panels.map(function (panel) {\n var panelInfo = {\n index: panel.index\n };\n\n if (includePanelHTML) {\n panelInfo.html = panel.element.outerHTML;\n }\n\n return panelInfo;\n })\n };\n\n if (index) {\n status.index = this.index;\n }\n\n if (position) {\n var nearestAnchor = camera.findNearestAnchor(camera.position);\n\n if (nearestAnchor) {\n status.position = {\n panel: nearestAnchor.panel.index,\n progressInPanel: camera.getProgressInPanel(nearestAnchor.panel)\n };\n }\n }\n\n if (visiblePanelsOnly) {\n var visiblePanels = this.visiblePanels;\n status.visibleOffset = (_c = (_b = visiblePanels[0]) === null || _b === void 0 ? void 0 : _b.index) !== null && _c !== void 0 ? _c : 0;\n }\n\n return status;\n };\n /**\r\n * Restore to the state of the given {@link Status}\r\n * @ko 주어진 {@link Status}의 상태로 복원합니다\r\n * @param {Partial} status Status value to be restored. You should use the return value of the {@link Flicking#getStatus getStatus()} method복원할 상태 값. {@link Flicking#getStatus getStatus()} 메서드의 반환값을 지정하면 됩니다\r\n * @return {void}\r\n */\n\n\n __proto.setStatus = function (status) {\n var _a;\n\n if (!this._initialized) {\n throw new FlickingError(MESSAGE.NOT_INITIALIZED, CODE.NOT_INITIALIZED);\n }\n\n var index = status.index,\n position = status.position,\n visibleOffset = status.visibleOffset,\n panels = status.panels;\n var renderer = this._renderer;\n var control = this._control; // Can't add/remove panels on external rendering\n\n if (((_a = panels[0]) === null || _a === void 0 ? void 0 : _a.html) && !this._renderExternal) {\n renderer.batchRemove({\n index: 0,\n deleteCount: this.panels.length\n });\n renderer.batchInsert({\n index: 0,\n elements: parseElement(panels.map(function (panel) {\n return panel.html;\n }))\n });\n }\n\n if (index) {\n var panelIndex = visibleOffset ? index - visibleOffset : index;\n void this.moveTo(panelIndex, 0).catch(function () {\n return void 0;\n });\n }\n\n if (position && this._moveType === MOVE_TYPE.FREE_SCROLL) {\n var panel = position.panel,\n progressInPanel = position.progressInPanel;\n var panelIndex = visibleOffset ? panel - visibleOffset : panel;\n var panelRange = renderer.panels[panelIndex].range;\n var newCameraPos = panelRange.min + (panelRange.max - panelRange.min) * progressInPanel;\n void control.moveToPosition(newCameraPos, 0).catch(function () {\n return void 0;\n });\n }\n };\n /**\r\n * Add plugins that can have different effects on Flicking\r\n * @ko 플리킹에 다양한 효과를 부여할 수 있는 플러그인을 추가합니다\r\n * @param {...Plugin} plugins The plugin(s) to add추가할 플러그인(들)\r\n * @return {this}\r\n * @see https://github.com/naver/egjs-flicking-plugins\r\n */\n\n\n __proto.addPlugins = function () {\n var _a;\n\n var _this = this;\n\n var plugins = [];\n\n for (var _i = 0; _i < arguments.length; _i++) {\n plugins[_i] = arguments[_i];\n }\n\n if (this._initialized) {\n plugins.forEach(function (item) {\n return item.init(_this);\n });\n }\n\n (_a = this._plugins).push.apply(_a, __spreadArray([], __read(plugins)));\n\n return this;\n };\n /**\r\n * Remove plugins from Flicking.\r\n * @ko 플리킹으로부터 플러그인들을 제거합니다.\r\n * @param {...Plugin} plugin The plugin(s) to remove.제거 플러그인(들).\r\n * @return {this}\r\n * @see https://github.com/naver/egjs-flicking-plugins\r\n */\n\n\n __proto.removePlugins = function () {\n var _this = this;\n\n var plugins = [];\n\n for (var _i = 0; _i < arguments.length; _i++) {\n plugins[_i] = arguments[_i];\n }\n\n plugins.forEach(function (item) {\n var foundIndex = findIndex(_this._plugins, function (val) {\n return val === item;\n });\n\n if (foundIndex >= 0) {\n item.destroy();\n\n _this._plugins.splice(foundIndex, 1);\n }\n });\n return this;\n };\n /**\r\n * Update viewport/panel sizes\r\n * @ko 패널 및 뷰포트의 크기를 갱신합니다\r\n * @method\r\n * @fires Flicking#beforeResize\r\n * @fires Flicking#afterResize\r\n * @return {this}\r\n */\n\n\n __proto.resize = function () {\n return __awaiter(this, void 0, void 0, function () {\n var viewport, renderer, camera, control, activePanel, prevWidth, prevHeight, prevProgressInPanel, newWidth, newHeight, sizeChanged;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n viewport = this._viewport;\n renderer = this._renderer;\n camera = this._camera;\n control = this._control;\n activePanel = control.activePanel;\n prevWidth = viewport.width;\n prevHeight = viewport.height;\n prevProgressInPanel = activePanel ? camera.getProgressInPanel(activePanel) : 0;\n this.trigger(new ComponentEvent(EVENTS.BEFORE_RESIZE, {\n width: prevWidth,\n height: prevHeight,\n element: viewport.element\n }));\n viewport.resize();\n return [4\n /*yield*/\n , renderer.forceRenderAllPanels()];\n\n case 1:\n _a.sent(); // Render all panel elements, to update sizes\n\n\n renderer.updatePanelSize();\n return [4\n /*yield*/\n , renderer.render()];\n\n case 2:\n _a.sent();\n\n camera.updateAlignPos();\n camera.updateRange();\n camera.updateAnchors();\n if (!control.animating) return [3\n /*break*/\n , 3];\n return [3\n /*break*/\n , 5];\n\n case 3:\n return [4\n /*yield*/\n , control.updatePosition(prevProgressInPanel)];\n\n case 4:\n _a.sent();\n\n control.updateInput();\n _a.label = 5;\n\n case 5:\n newWidth = viewport.width;\n newHeight = viewport.height;\n sizeChanged = newWidth !== prevWidth || newHeight !== prevHeight;\n this.trigger(new ComponentEvent(EVENTS.AFTER_RESIZE, {\n width: viewport.width,\n height: viewport.height,\n prev: {\n width: prevWidth,\n height: prevHeight\n },\n sizeChanged: sizeChanged,\n element: viewport.element\n }));\n return [2\n /*return*/\n ];\n }\n });\n });\n };\n /**\r\n * Add new panels after the last panel\r\n * @ko 패널 목록의 제일 끝에 새로운 패널들을 추가합니다\r\n * @param {ElementLike | ElementLike[]} element A new HTMLElement, a outerHTML of element, or an array of both\r\n * 새로운 HTMLElement, 혹은 엘리먼트의 outerHTML, 혹은 그것들의 배열\r\n * @return {Panel[]} An array of appended panels추가된 패널들의 배열\r\n * @see Panel\r\n * @see ElementLike\r\n * @throws {FlickingError} {@link ERROR_CODE ERROR_CODE.NOT_ALLOWED_IN_FRAMEWORK} if called on frameworks (React, Angular, Vue...)\r\n * @example\r\n * ```ts\r\n * const flicking = new Flicking(\"#flick\");\r\n * // These are possible parameters\r\n * flicking.append(document.createElement(\"div\"));\r\n * flicking.append(\"\\Panel\\
\");\r\n * flicking.append([\"\\Panel\\
\", document.createElement(\"div\")]);\r\n * // Even this is possible\r\n * flicking.append(\"\\Panel 1\\
\\Panel 2\\
\");\r\n * ```\r\n */\n\n\n __proto.append = function (element) {\n return this.insert(this._renderer.panelCount, element);\n };\n /**\r\n * Add new panels before the first panel\r\n * This will increase index of panels after by the number of panels added\r\n * @ko 패널 목록의 제일 앞(index 0)에 새로운 패널들을 추가합니다\r\n * 추가한 패널의 개수만큼 기존 패널들의 인덱스가 증가합니다.\r\n * @param {ElementLike | ElementLike[]} element A new HTMLElement, a outerHTML of element, or an array of both\r\n * 새로운 HTMLElement, 혹은 엘리먼트의 outerHTML, 혹은 그것들의 배열\r\n * @return {Panel[]} An array of prepended panels추가된 패널들의 배열\r\n * @see Panel\r\n * @see ElementLike\r\n * @throws {FlickingError} {@link ERROR_CODE ERROR_CODE.NOT_ALLOWED_IN_FRAMEWORK} if called on frameworks (React, Angular, Vue...)\r\n * @example\r\n * ```ts\r\n * const flicking = new eg.Flicking(\"#flick\");\r\n * flicking.prepend(document.createElement(\"div\"));\r\n * flicking.prepend(\"\\Panel\\
\");\r\n * flicking.prepend([\"\\Panel\\
\", document.createElement(\"div\")]);\r\n * // Even this is possible\r\n * flicking.prepend(\"\\Panel 1\\
\\Panel 2\\
\");\r\n * ```\r\n */\n\n\n __proto.prepend = function (element) {\n return this.insert(0, element);\n };\n /**\r\n * Insert new panels at given index\r\n * This will increase index of panels after by the number of panels added\r\n * @ko 주어진 인덱스에 새로운 패널들을 추가합니다\r\n * 해당 인덱스보다 같거나 큰 인덱스를 가진 기존 패널들은 추가한 패널의 개수만큼 인덱스가 증가합니다.\r\n * @param {number} index Index to insert new panels at새로 패널들을 추가할 인덱스\r\n * @param {ElementLike | ElementLike[]} element A new HTMLElement, a outerHTML of element, or an array of both\r\n * 새로운 HTMLElement, 혹은 엘리먼트의 outerHTML, 혹은 그것들의 배열\r\n * @return {Panel[]} An array of prepended panels추가된 패널들의 배열\r\n * @throws {FlickingError} {@link ERROR_CODE ERROR_CODE.NOT_ALLOWED_IN_FRAMEWORK} if called on frameworks (React, Angular, Vue...)\r\n * @example\r\n * ```ts\r\n * const flicking = new eg.Flicking(\"#flick\");\r\n * flicking.insert(0, document.createElement(\"div\"));\r\n * flicking.insert(2, \"\\Panel\\
\");\r\n * flicking.insert(1, [\"\\Panel\\
\", document.createElement(\"div\")]);\r\n * // Even this is possible\r\n * flicking.insert(3, \"\\Panel 1\\
\\Panel 2\\
\");\r\n * ```\r\n */\n\n\n __proto.insert = function (index, element) {\n if (this._renderExternal) {\n throw new FlickingError(MESSAGE.NOT_ALLOWED_IN_FRAMEWORK, CODE.NOT_ALLOWED_IN_FRAMEWORK);\n }\n\n return this._renderer.batchInsert({\n index: index,\n elements: parseElement(element)\n });\n };\n /**\r\n * Remove the panel at the given index\r\n * This will decrease index of panels after by the number of panels removed\r\n * @ko 주어진 인덱스의 패널을 제거합니다\r\n * 해당 인덱스보다 큰 인덱스를 가진 기존 패널들은 제거한 패널의 개수만큼 인덱스가 감소합니다\r\n * @param {number} index Index of panel to remove제거할 패널의 인덱스\r\n * @param {number} [deleteCount=1] Number of panels to remove from index`index` 이후로 제거할 패널의 개수\r\n * @return {Panel[]} An array of removed panels제거된 패널들의 배열\r\n */\n\n\n __proto.remove = function (index, deleteCount) {\n if (deleteCount === void 0) {\n deleteCount = 1;\n }\n\n if (this._renderExternal) {\n throw new FlickingError(MESSAGE.NOT_ALLOWED_IN_FRAMEWORK, CODE.NOT_ALLOWED_IN_FRAMEWORK);\n }\n\n return this._renderer.batchRemove({\n index: index,\n deleteCount: deleteCount\n });\n };\n\n __proto._createControl = function () {\n var _a;\n\n var moveType = this._moveType;\n var moveTypes = Object.keys(MOVE_TYPE).map(function (key) {\n return MOVE_TYPE[key];\n });\n var moveTypeStr = Array.isArray(moveType) ? moveType[0] : moveType;\n var moveTypeOptions = Array.isArray(moveType) ? (_a = moveType[1]) !== null && _a !== void 0 ? _a : {} : {};\n\n if (!includes(moveTypes, moveTypeStr)) {\n throw new FlickingError(MESSAGE.WRONG_OPTION(\"moveType\", JSON.stringify(moveType)), CODE.WRONG_OPTION);\n }\n\n switch (moveTypeStr) {\n case MOVE_TYPE.SNAP:\n return new SnapControl(moveTypeOptions);\n\n case MOVE_TYPE.FREE_SCROLL:\n return new FreeControl(moveTypeOptions);\n\n case MOVE_TYPE.STRICT:\n return new StrictControl(moveTypeOptions);\n }\n };\n\n __proto._createCamera = function () {\n var cameraOption = {\n align: this._align\n };\n\n if (this._circular) {\n if (this._bound) {\n // eslint-disable-next-line no-console\n console.warn(\"\\\"circular\\\" and \\\"bound\\\" option cannot be used together, ignoring bound.\");\n }\n\n return new CircularCamera(cameraOption);\n } else if (this._bound) {\n return new BoundCamera(cameraOption);\n } else {\n return new LinearCamera(cameraOption);\n }\n };\n\n __proto._createRenderer = function () {\n var renderingStrategy = this._renderOnlyVisible ? new VisibleRenderingStrategy() : new RawRenderingStrategy();\n var rendererOptions = {\n align: this._align,\n strategy: renderingStrategy\n };\n var renderExternal = this._renderExternal;\n return renderExternal ? new renderExternal.renderer(__assign(__assign({}, rendererOptions), renderExternal.rendererOptions)) : new VanillaRenderer(rendererOptions);\n };\n\n __proto._moveToInitialPanel = function () {\n return __awaiter(this, void 0, void 0, function () {\n var renderer, control, initialPanel;\n return __generator(this, function (_a) {\n renderer = this._renderer;\n control = this._control;\n initialPanel = renderer.getPanel(this._defaultIndex) || renderer.getPanel(0);\n if (!initialPanel) return [2\n /*return*/\n ];\n return [2\n /*return*/\n , control.moveToPanel(initialPanel, {\n duration: 0\n })];\n });\n });\n };\n /**\r\n * Version info string\r\n * @ko 버전정보 문자열\r\n * @type {string}\r\n * @readonly\r\n * @example\r\n * ```ts\r\n * Flicking.VERSION; // ex) 4.0.0\r\n * ```\r\n */\n\n\n Flicking.VERSION = \"4.2.1\";\n return Flicking;\n}(Component);\n\n/**\r\n * An slide data component that holds information of a single HTMLElement\r\n * @ko 슬라이드 데이터 컴포넌트로, 단일 HTMLElement의 정보를 갖고 있습니다\r\n */\n\nvar ExternalPanel =\n/*#__PURE__*/\nfunction (_super) {\n __extends(ExternalPanel, _super);\n /**\r\n * @param {object} options An options object옵션 오브젝트\r\n * @param {HTMLElement} [options.el] A `HTMLElement` panel's referencing패널이 참조하는 `HTMLElement`\r\n * @param {number} [options.index] An initial index of the panel패널의 초기 인덱스\r\n * @param {Constants.ALIGN | string | number} [options.align] An initial {@link Flicking#align align} value of the panel패널의 초기 {@link Flicking#align align}값\r\n * @param {Flicking} [options.flicking] A Flicking instance panel's referencing패널이 참조하는 {@link Flicking} 인스턴스\r\n */\n\n\n function ExternalPanel(options) {\n var _this = _super.call(this, options) || this;\n\n _this._externalComponent = options.externalComponent;\n return _this;\n }\n\n return ExternalPanel;\n}(Panel);\n\n/**\r\n * Decorator that makes the method of flicking available in the framework.\r\n * @ko 프레임워크에서 플리킹의 메소드를 사용할 수 있게 하는 데코레이터.\r\n * @memberof eg.Flicking\r\n * @private\r\n * @example\r\n * ```js\r\n * import Flicking, { withFlickingMethods } from \"@egjs/flicking\";\r\n *\r\n * class Flicking extends React.Component> {\r\n * @withFlickingMethods\r\n * private flicking: Flicking;\r\n * }\r\n * ```\r\n */\n\nvar withFlickingMethods = function (prototype, flickingName) {\n [Component.prototype, Flicking.prototype].forEach(function (proto) {\n Object.getOwnPropertyNames(proto).filter(function (name) {\n return !prototype[name] && !name.startsWith(\"_\") && name !== \"constructor\";\n }).forEach(function (name) {\n var descriptor = Object.getOwnPropertyDescriptor(proto, name);\n\n if (descriptor.value) {\n // Public Function\n Object.defineProperty(prototype, name, {\n value: function () {\n var _a;\n\n var args = [];\n\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n\n return (_a = descriptor.value).call.apply(_a, __spreadArray([this[flickingName]], __read(args)));\n }\n });\n } else {\n var getterDescriptor = {};\n\n if (descriptor.get) {\n getterDescriptor.get = function () {\n var _a;\n\n return (_a = descriptor.get) === null || _a === void 0 ? void 0 : _a.call(this[flickingName]);\n };\n }\n\n if (descriptor.set) {\n getterDescriptor.set = function () {\n var _a;\n\n var args = [];\n\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n\n return (_a = descriptor.set) === null || _a === void 0 ? void 0 : _a.call.apply(_a, __spreadArray([this[flickingName]], __read(args)));\n };\n }\n\n Object.defineProperty(prototype, name, getterDescriptor);\n }\n });\n });\n};\n\nvar sync = (function (flicking, diffResult, rendered) {\n var renderer = flicking.renderer;\n\n if (diffResult.removed.length > 0) {\n var startIdx_1 = -1;\n var prevIdx_1 = -1;\n diffResult.removed.forEach(function (removedIdx, idx) {\n if (startIdx_1 < 0) {\n startIdx_1 = idx;\n }\n\n if (prevIdx_1 >= 0 && removedIdx !== prevIdx_1 + 1) {\n batchRemove(renderer, diffResult, startIdx_1, idx + 1);\n startIdx_1 = -1;\n prevIdx_1 = -1;\n } else {\n prevIdx_1 = removedIdx;\n }\n });\n\n if (startIdx_1 >= 0) {\n batchRemove(renderer, diffResult, startIdx_1);\n }\n }\n\n diffResult.ordered.forEach(function (_a) {\n var _b = __read(_a, 2),\n prevIdx = _b[0],\n newIdx = _b[1];\n\n var prevPanel = renderer.panels[prevIdx];\n var indexDiff = newIdx - prevIdx;\n\n if (indexDiff > 0) {\n prevPanel.increaseIndex(indexDiff);\n } else {\n prevPanel.decreaseIndex(-indexDiff);\n } // Update position\n\n\n prevPanel.resize();\n });\n\n if (diffResult.added.length > 0) {\n var startIdx_2 = -1;\n var prevIdx_2 = -1;\n diffResult.added.forEach(function (addedIdx, idx) {\n if (startIdx_2 < 0) {\n startIdx_2 = idx;\n }\n\n if (prevIdx_2 >= 0 && addedIdx !== prevIdx_2 + 1) {\n batchInsert(renderer, diffResult, rendered, startIdx_2, idx + 1);\n startIdx_2 = -1;\n prevIdx_2 = -1;\n } else {\n prevIdx_2 = addedIdx;\n }\n });\n\n if (startIdx_2 >= 0) {\n batchInsert(renderer, diffResult, rendered, startIdx_2);\n }\n }\n});\n\nvar batchInsert = function (renderer, diffResult, rendered, startIdx, endIdx) {\n renderer.batchInsert.apply(renderer, __spreadArray([], __read(diffResult.added.slice(startIdx, endIdx).map(function (index, elIdx) {\n return {\n index: index,\n elements: [rendered[elIdx + diffResult.prevList.length]]\n };\n }))));\n};\n\nvar batchRemove = function (renderer, diffResult, startIdx, endIdx) {\n var removed = diffResult.removed.slice(startIdx, endIdx);\n renderer.batchRemove({\n index: startIdx,\n deleteCount: removed.length\n });\n};\n\nvar getRenderingPanels = (function (flicking, diffResult) {\n var removedPanels = diffResult.removed.reduce(function (map, idx) {\n map[idx] = true;\n return map;\n }, {});\n return __spreadArray(__spreadArray([], __read(flicking.panels.filter(function (panel) {\n return !removedPanels[panel.index];\n }) // Sort panels by position\n .sort(function (panel1, panel2) {\n return panel1.position + panel1.offset - (panel2.position + panel2.offset);\n }).map(function (panel) {\n return diffResult.prevList[panel.index];\n }))), __read(diffResult.added.map(function (idx) {\n return diffResult.list[idx];\n })));\n});\n\nvar getDefaultCameraTransform = (function (align, horizontal, firstPanelSize) {\n if (align === void 0) {\n align = ALIGN.CENTER;\n }\n\n if (horizontal === void 0) {\n horizontal = true;\n }\n\n var cameraAlign = getCameraAlign(align);\n var panelAlign = getPanelAlign(align);\n if (panelAlign == null) return \"\";\n var camPosition = \"calc(\" + cameraAlign + \" - (\" + (firstPanelSize || \"0px\") + \" * \" + panelAlign.percentage + \") - \" + panelAlign.absolute + \"px)\";\n return horizontal ? \"translate(\" + camPosition + \")\" : \"translate(0, \" + camPosition + \")\";\n});\n\nvar getCameraAlign = function (align) {\n var alignVal = typeof align === \"object\" ? align.camera : align;\n return parseAlign(alignVal);\n};\n\nvar getPanelAlign = function (align) {\n var alignVal = typeof align === \"object\" ? align.panel : align;\n return parseArithmeticExpression(parseAlign(alignVal));\n};\n\nvar parseAlign = function (alignVal) {\n if (typeof alignVal === \"number\") {\n return alignVal + \"px\";\n }\n\n switch (alignVal) {\n case ALIGN.CENTER:\n return \"50%\";\n\n case ALIGN.NEXT:\n return \"100%\";\n\n case ALIGN.PREV:\n return \"0%\";\n\n default:\n return alignVal;\n }\n};\n\n/*\r\n * Copyright (c) 2015 NAVER Corp.\r\n * egjs projects are licensed under the MIT license\r\n */\n\nexport default Flicking;\nexport { ALIGN, AnchorPoint, AnimatingState, AxesController, BoundCamera, Camera, CircularCamera, Control, DIRECTION, DisabledState, DraggingState, CODE as ERROR_CODE, EVENTS, ElementPanel, ExternalPanel, ExternalRenderer, FlickingError, FreeControl, HoldingState, IdleState, LinearCamera, MOVE_TYPE, Panel, RawRenderingStrategy, Renderer, SnapControl, State, StateMachine, StrictControl, VanillaRenderer, Viewport, VisibleRenderingStrategy, getDefaultCameraTransform, getRenderingPanels, sync, withFlickingMethods };\n//# sourceMappingURL=flicking.esm.js.map\n","/*\nCopyright (c) 2019-present NAVER Corp.\nname: @egjs/list-differ\nlicense: MIT\nauthor: NAVER Corp.\nrepository: https://github.com/naver/egjs-list-differ\nversion: 1.0.0\n*/\n/*\negjs-list-differ\nCopyright (c) 2019-present NAVER Corp.\nMIT license\n*/\nvar PolyMap =\n/*#__PURE__*/\nfunction () {\n function PolyMap() {\n this.keys = [];\n this.values = [];\n }\n\n var __proto = PolyMap.prototype;\n\n __proto.get = function (key) {\n return this.values[this.keys.indexOf(key)];\n };\n\n __proto.set = function (key, value) {\n var keys = this.keys;\n var values = this.values;\n var prevIndex = keys.indexOf(key);\n var index = prevIndex === -1 ? keys.length : prevIndex;\n keys[index] = key;\n values[index] = value;\n };\n\n return PolyMap;\n}();\n\n/*\negjs-list-differ\nCopyright (c) 2019-present NAVER Corp.\nMIT license\n*/\nvar HashMap =\n/*#__PURE__*/\nfunction () {\n function HashMap() {\n this.object = {};\n }\n\n var __proto = HashMap.prototype;\n\n __proto.get = function (key) {\n return this.object[key];\n };\n\n __proto.set = function (key, value) {\n this.object[key] = value;\n };\n\n return HashMap;\n}();\n\n/*\negjs-list-differ\nCopyright (c) 2019-present NAVER Corp.\nMIT license\n*/\nvar SUPPORT_MAP = typeof Map === \"function\";\n\n/*\negjs-list-differ\nCopyright (c) 2019-present NAVER Corp.\nMIT license\n*/\nvar Link =\n/*#__PURE__*/\nfunction () {\n function Link() {}\n\n var __proto = Link.prototype;\n\n __proto.connect = function (prevLink, nextLink) {\n this.prev = prevLink;\n this.next = nextLink;\n prevLink && (prevLink.next = this);\n nextLink && (nextLink.prev = this);\n };\n\n __proto.disconnect = function () {\n // In double linked list, diconnect the interconnected relationship.\n var prevLink = this.prev;\n var nextLink = this.next;\n prevLink && (prevLink.next = nextLink);\n nextLink && (nextLink.prev = prevLink);\n };\n\n __proto.getIndex = function () {\n var link = this;\n var index = -1;\n\n while (link) {\n link = link.prev;\n ++index;\n }\n\n return index;\n };\n\n return Link;\n}();\n\n/*\negjs-list-differ\nCopyright (c) 2019-present NAVER Corp.\nMIT license\n*/\n\nfunction orderChanged(changed, fixed) {\n // It is roughly in the order of these examples.\n // 4, 6, 0, 2, 1, 3, 5, 7\n var fromLinks = []; // 0, 1, 2, 3, 4, 5, 6, 7\n\n var toLinks = [];\n changed.forEach(function (_a) {\n var from = _a[0],\n to = _a[1];\n var link = new Link();\n fromLinks[from] = link;\n toLinks[to] = link;\n }); // `fromLinks` are connected to each other by double linked list.\n\n fromLinks.forEach(function (link, i) {\n link.connect(fromLinks[i - 1]);\n });\n return changed.filter(function (_, i) {\n return !fixed[i];\n }).map(function (_a, i) {\n var from = _a[0],\n to = _a[1];\n\n if (from === to) {\n return [0, 0];\n }\n\n var fromLink = fromLinks[from];\n var toLink = toLinks[to - 1];\n var fromIndex = fromLink.getIndex(); // Disconnect the link connected to `fromLink`.\n\n fromLink.disconnect(); // Connect `fromLink` to the right of `toLink`.\n\n if (!toLink) {\n fromLink.connect(undefined, fromLinks[0]);\n } else {\n fromLink.connect(toLink, toLink.next);\n }\n\n var toIndex = fromLink.getIndex();\n return [fromIndex, toIndex];\n });\n}\n\nvar Result =\n/*#__PURE__*/\nfunction () {\n function Result(prevList, list, added, removed, changed, maintained, changedBeforeAdded, fixed) {\n this.prevList = prevList;\n this.list = list;\n this.added = added;\n this.removed = removed;\n this.changed = changed;\n this.maintained = maintained;\n this.changedBeforeAdded = changedBeforeAdded;\n this.fixed = fixed;\n }\n\n var __proto = Result.prototype;\n Object.defineProperty(__proto, \"ordered\", {\n get: function () {\n if (!this.cacheOrdered) {\n this.caculateOrdered();\n }\n\n return this.cacheOrdered;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(__proto, \"pureChanged\", {\n get: function () {\n if (!this.cachePureChanged) {\n this.caculateOrdered();\n }\n\n return this.cachePureChanged;\n },\n enumerable: true,\n configurable: true\n });\n\n __proto.caculateOrdered = function () {\n var ordered = orderChanged(this.changedBeforeAdded, this.fixed);\n var changed = this.changed;\n var pureChanged = [];\n this.cacheOrdered = ordered.filter(function (_a, i) {\n var from = _a[0],\n to = _a[1];\n var _b = changed[i],\n fromBefore = _b[0],\n toBefore = _b[1];\n\n if (from !== to) {\n pureChanged.push([fromBefore, toBefore]);\n return true;\n }\n });\n this.cachePureChanged = pureChanged;\n };\n\n return Result;\n}();\n\n/**\n *\n * @memberof eg.ListDiffer\n * @static\n * @function\n * @param - Previous List 이전 목록 \n * @param - List to Update 업데이트 할 목록 \n * @param - This callback function returns the key of the item. 아이템의 키를 반환하는 콜백 함수입니다.\n * @return - Returns the diff between `prevList` and `list` `prevList`와 `list`의 다른 점을 반환한다.\n * @example\n * import { diff } from \"@egjs/list-differ\";\n * // script => eg.ListDiffer.diff\n * const result = diff([0, 1, 2, 3, 4, 5], [7, 8, 0, 4, 3, 6, 2, 1], e => e);\n * // List before update\n * // [1, 2, 3, 4, 5]\n * console.log(result.prevList);\n * // Updated list\n * // [4, 3, 6, 2, 1]\n * console.log(result.list);\n * // Index array of values added to `list`\n * // [0, 1, 5]\n * console.log(result.added);\n * // Index array of values removed in `prevList`\n * // [5]\n * console.log(result.removed);\n * // An array of index pairs of `prevList` and `list` with different indexes from `prevList` and `list`\n * // [[0, 2], [4, 3], [3, 4], [2, 6], [1, 7]]\n * console.log(result.changed);\n * // The subset of `changed` and an array of index pairs that moved data directly. Indicate an array of absolute index pairs of `ordered`.(Formatted by: Array<[index of prevList, index of list]>)\n * // [[4, 3], [3, 4], [2, 6]]\n * console.log(result.pureChanged);\n * // An array of index pairs to be `ordered` that can synchronize `list` before adding data. (Formatted by: Array<[prevIndex, nextIndex]>)\n * // [[4, 1], [4, 2], [4, 3]]\n * console.log(result.ordered);\n * // An array of index pairs of `prevList` and `list` that have not been added/removed so data is preserved\n * // [[0, 2], [4, 3], [3, 4], [2, 6], [1, 7]]\n * console.log(result.maintained);\n */\n\nfunction diff(prevList, list, findKeyCallback) {\n var mapClass = SUPPORT_MAP ? Map : findKeyCallback ? HashMap : PolyMap;\n\n var callback = findKeyCallback || function (e) {\n return e;\n };\n\n var added = [];\n var removed = [];\n var maintained = [];\n var prevKeys = prevList.map(callback);\n var keys = list.map(callback);\n var prevKeyMap = new mapClass();\n var keyMap = new mapClass();\n var changedBeforeAdded = [];\n var fixed = [];\n var removedMap = {};\n var changed = [];\n var addedCount = 0;\n var removedCount = 0; // Add prevKeys and keys to the hashmap.\n\n prevKeys.forEach(function (key, prevListIndex) {\n prevKeyMap.set(key, prevListIndex);\n });\n keys.forEach(function (key, listIndex) {\n keyMap.set(key, listIndex);\n }); // Compare `prevKeys` and `keys` and add them to `removed` if they are not in `keys`.\n\n prevKeys.forEach(function (key, prevListIndex) {\n var listIndex = keyMap.get(key); // In prevList, but not in list, it is removed.\n\n if (typeof listIndex === \"undefined\") {\n ++removedCount;\n removed.push(prevListIndex);\n } else {\n removedMap[listIndex] = removedCount;\n }\n }); // Compare `prevKeys` and `keys` and add them to `added` if they are not in `prevKeys`.\n\n keys.forEach(function (key, listIndex) {\n var prevListIndex = prevKeyMap.get(key); // In list, but not in prevList, it is added.\n\n if (typeof prevListIndex === \"undefined\") {\n added.push(listIndex);\n ++addedCount;\n } else {\n maintained.push([prevListIndex, listIndex]);\n removedCount = removedMap[listIndex] || 0;\n changedBeforeAdded.push([prevListIndex - removedCount, listIndex - addedCount]);\n fixed.push(listIndex === prevListIndex);\n\n if (prevListIndex !== listIndex) {\n changed.push([prevListIndex, listIndex]);\n }\n }\n }); // Sort by ascending order of 'to(list's index).\n\n removed.reverse();\n return new Result(prevList, list, added, removed, changed, maintained, changedBeforeAdded, fixed);\n}\n\n/**\n * A module that checks diff when values are added, removed, or changed in an array.\n * @ko 배열 또는 오브젝트에서 값이 추가되거나 삭제되거나 순서가 변경사항을 체크하는 모듈입니다.\n * @memberof eg\n */\n\nvar ListDiffer =\n/*#__PURE__*/\nfunction () {\n /**\n * @param - Initializing Data Array. 초기 설정할 데이터 배열.\n * @param - This callback function returns the key of the item. 아이템의 키를 반환하는 콜백 함수입니다.\n * @example\n * import ListDiffer from \"@egjs/list-differ\";\n * // script => eg.ListDiffer\n * const differ = new ListDiffer([0, 1, 2, 3, 4, 5], e => e);\n * const result = differ.update([7, 8, 0, 4, 3, 6, 2, 1]);\n * // List before update\n * // [1, 2, 3, 4, 5]\n * console.log(result.prevList);\n * // Updated list\n * // [4, 3, 6, 2, 1]\n * console.log(result.list);\n * // Index array of values added to `list`.\n * // [0, 1, 5]\n * console.log(result.added);\n * // Index array of values removed in `prevList`.\n * // [5]\n * console.log(result.removed);\n * // An array of index pairs of `prevList` and `list` with different indexes from `prevList` and `list`.\n * // [[0, 2], [4, 3], [3, 4], [2, 6], [1, 7]]\n * console.log(result.changed);\n * // The subset of `changed` and an array of index pairs that moved data directly. Indicate an array of absolute index pairs of `ordered`.(Formatted by: Array<[index of prevList, index of list]>)\n * // [[4, 3], [3, 4], [2, 6]]\n * console.log(result.pureChanged);\n * // An array of index pairs to be `ordered` that can synchronize `list` before adding data. (Formatted by: Array<[prevIndex, nextIndex]>)\n * // [[4, 1], [4, 2], [4, 3]]\n * console.log(result.ordered);\n * // An array of index pairs of `prevList` and `list` that have not been added/removed so data is preserved.\n * // [[0, 2], [4, 3], [3, 4], [2, 6], [1, 7]]\n * console.log(result.maintained);\n */\n function ListDiffer(list, findKeyCallback) {\n if (list === void 0) {\n list = [];\n }\n\n this.findKeyCallback = findKeyCallback;\n this.list = [].slice.call(list);\n }\n /**\n * Update list.\n * @ko 리스트를 업데이트를 합니다.\n * @param - List to update 업데이트할 리스트 \n * @return - Returns the results of an update from `prevList` to `list`. `prevList`에서 `list`로 업데이트한 결과를 반환한다. \n */\n\n\n var __proto = ListDiffer.prototype;\n\n __proto.update = function (list) {\n var newData = [].slice.call(list);\n var result = diff(this.list, newData, this.findKeyCallback);\n this.list = newData;\n return result;\n };\n\n return ListDiffer;\n}();\n\n/*\negjs-list-differ\nCopyright (c) 2019-present NAVER Corp.\nMIT license\n*/\n\nexport default ListDiffer;\nexport { diff };\n//# sourceMappingURL=list-differ.esm.js.map\n","/*\nCopyright (c) 2015-present NAVER Corp.\nname: @egjs/react-flicking\nlicense: MIT\nauthor: NAVER Corp.\nrepository: https://github.com/naver/egjs-flicking/tree/master/packages/react-flicking\nversion: 4.2.1\n*/\nimport * as React from 'react';\nimport React__default from 'react';\nimport ListDiffer from '@egjs/list-differ';\nimport VanillaFlicking__default, { ExternalPanel, ExternalRenderer, sync, getDefaultCameraTransform, getRenderingPanels, EVENTS, withFlickingMethods } from '@egjs/flicking';\nexport * from '@egjs/flicking';\nimport { isFragment } from 'react-is';\nimport { findDOMNode } from 'react-dom';\n\n/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\n\n/* global Reflect, Promise */\nvar extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf || {\n __proto__: []\n } instanceof Array && function (d, b) {\n d.__proto__ = b;\n } || function (d, b) {\n for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p];\n };\n\n return extendStatics(d, b);\n};\n\nfunction __extends(d, b) {\n if (typeof b !== \"function\" && b !== null) throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n\n function __() {\n this.constructor = d;\n }\n\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\nvar __assign = function () {\n __assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n\n return t;\n };\n\n return __assign.apply(this, arguments);\n};\nfunction __decorate(decorators, target, key, desc) {\n var c = arguments.length,\n r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc,\n d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n}\nfunction __awaiter(thisArg, _arguments, P, generator) {\n function adopt(value) {\n return value instanceof P ? value : new P(function (resolve) {\n resolve(value);\n });\n }\n\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) {\n try {\n step(generator.next(value));\n } catch (e) {\n reject(e);\n }\n }\n\n function rejected(value) {\n try {\n step(generator[\"throw\"](value));\n } catch (e) {\n reject(e);\n }\n }\n\n function step(result) {\n result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);\n }\n\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n}\nfunction __generator(thisArg, body) {\n var _ = {\n label: 0,\n sent: function () {\n if (t[0] & 1) throw t[1];\n return t[1];\n },\n trys: [],\n ops: []\n },\n f,\n y,\n t,\n g;\n return g = {\n next: verb(0),\n \"throw\": verb(1),\n \"return\": verb(2)\n }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function () {\n return this;\n }), g;\n\n function verb(n) {\n return function (v) {\n return step([n, v]);\n };\n }\n\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n\n while (_) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n\n switch (op[0]) {\n case 0:\n case 1:\n t = op;\n break;\n\n case 4:\n _.label++;\n return {\n value: op[1],\n done: false\n };\n\n case 5:\n _.label++;\n y = op[1];\n op = [0];\n continue;\n\n case 7:\n op = _.ops.pop();\n\n _.trys.pop();\n\n continue;\n\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {\n _ = 0;\n continue;\n }\n\n if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {\n _.label = op[1];\n break;\n }\n\n if (op[0] === 6 && _.label < t[1]) {\n _.label = t[1];\n t = op;\n break;\n }\n\n if (t && _.label < t[2]) {\n _.label = t[2];\n\n _.ops.push(op);\n\n break;\n }\n\n if (t[2]) _.ops.pop();\n\n _.trys.pop();\n\n continue;\n }\n\n op = body.call(thisArg, _);\n } catch (e) {\n op = [6, e];\n y = 0;\n } finally {\n f = t = 0;\n }\n\n if (op[0] & 5) throw op[1];\n return {\n value: op[0] ? op[1] : void 0,\n done: true\n };\n }\n}\nfunction __spreadArray(to, from) {\n for (var i = 0, il = from.length, j = to.length; i < il; i++, j++) to[j] = from[i];\n\n return to;\n}\n\nvar DEFAULT_PROPS = {\n viewportTag: \"div\",\n cameraTag: \"div\",\n plugins: [],\n useFindDOMNode: false,\n hideBeforeInit: false,\n firstPanelSize: undefined,\n onReady: function (e) {},\n onBeforeResize: function (e) {},\n onAfterResize: function (e) {},\n onHoldStart: function (e) {},\n onHoldEnd: function (e) {},\n onMoveStart: function (e) {},\n onMove: function (e) {},\n onMoveEnd: function (e) {},\n onWillChange: function (e) {},\n onChanged: function (e) {},\n onWillRestore: function (e) {},\n onRestored: function (e) {},\n onSelect: function (e) {},\n onNeedPanel: function (e) {},\n onVisibleChange: function (e) {},\n onReachEdge: function (e) {},\n onPanelChange: function (e) {}\n};\n\nvar ReactPanel =\n/*#__PURE__*/\nfunction (_super) {\n __extends(ReactPanel, _super);\n\n function ReactPanel() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n\n var __proto = ReactPanel.prototype;\n Object.defineProperty(__proto, \"element\", {\n get: function () {\n return this._externalComponent.element;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(__proto, \"rendered\", {\n get: function () {\n return !this._externalComponent.hide;\n },\n enumerable: false,\n configurable: true\n });\n\n __proto.markForShow = function () {\n this._externalComponent.hide = false;\n };\n\n __proto.markForHide = function () {\n this._externalComponent.hide = true;\n };\n\n return ReactPanel;\n}(ExternalPanel);\n\nvar ReactRenderer =\n/*#__PURE__*/\nfunction (_super) {\n __extends(ReactRenderer, _super);\n\n function ReactRenderer(options) {\n var _this = _super.call(this, options) || this;\n\n _this._reactFlicking = options.reactFlicking;\n return _this;\n } // eslint-disable-next-line @typescript-eslint/require-await\n\n\n var __proto = ReactRenderer.prototype;\n\n __proto.render = function () {\n return __awaiter(this, void 0, void 0, function () {\n var strategy, flicking, reactFlicking;\n return __generator(this, function (_a) {\n strategy = this._renderingStrategy;\n flicking = this._flicking;\n reactFlicking = this._reactFlicking;\n if (!flicking || !reactFlicking.mounted) return [2\n /*return*/\n ];\n strategy.updateRenderingPanels(flicking);\n return [2\n /*return*/\n , new Promise(function (resolve) {\n reactFlicking.setRenderCallback(resolve);\n reactFlicking.setState({});\n })];\n });\n });\n };\n\n __proto.forceRenderAllPanels = function () {\n return __awaiter(this, void 0, void 0, function () {\n var reactFlicking;\n return __generator(this, function (_a) {\n reactFlicking = this._reactFlicking;\n if (!reactFlicking.mounted) return [2\n /*return*/\n ];\n\n this._panels.forEach(function (panel) {\n return panel.markForShow();\n });\n\n return [2\n /*return*/\n , new Promise(function (resolve) {\n reactFlicking.setRenderCallback(resolve);\n reactFlicking.setState({});\n })];\n });\n });\n };\n\n __proto._collectPanels = function () {\n var _this = this;\n\n var align = this._getPanelAlign();\n\n var children = this._reactFlicking.reactPanels;\n this._panels = children.map(function (panelComponent, index) {\n return new ReactPanel({\n flicking: _this._flicking,\n index: index,\n align: align,\n externalComponent: panelComponent\n });\n });\n };\n\n __proto._createPanel = function (externalComponent, options) {\n return new ReactPanel(__assign({\n externalComponent: externalComponent\n }, options));\n };\n\n return ReactRenderer;\n}(ExternalRenderer);\n\nvar NonStrictPanelComponent =\n/*#__PURE__*/\nfunction (_super) {\n __extends(NonStrictPanelComponent, _super);\n\n function NonStrictPanelComponent() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n\n _this.hide = false;\n return _this;\n }\n\n var __proto = NonStrictPanelComponent.prototype;\n Object.defineProperty(__proto, \"element\", {\n get: function () {\n return findDOMNode(this);\n },\n enumerable: false,\n configurable: true\n });\n\n __proto.render = function () {\n return this.hide ? React.createElement(React.Fragment, null) : this.props.children;\n };\n\n return NonStrictPanelComponent;\n}(React.Component);\n\nvar StrictPanelComponent =\n/*#__PURE__*/\nfunction (_super) {\n __extends(StrictPanelComponent, _super);\n\n function StrictPanelComponent() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n\n _this.hide = false;\n _this._elRef = React.createRef();\n return _this;\n }\n\n var __proto = StrictPanelComponent.prototype;\n Object.defineProperty(__proto, \"element\", {\n get: function () {\n return this._elRef.current;\n },\n enumerable: false,\n configurable: true\n });\n\n __proto.render = function () {\n return this.hide ? React.createElement(React.Fragment, null) : this._getElement();\n };\n\n __proto._getElement = function () {\n return React.cloneElement(React.Children.only(this.props.children), {\n ref: this._elRef\n });\n };\n\n return StrictPanelComponent;\n}(React.Component);\n\nvar ViewportSlot = function (_a) {\n var children = _a.children;\n return React__default.createElement(React__default.Fragment, null, children);\n};\n\nvar Flicking =\n/*#__PURE__*/\nfunction (_super) {\n __extends(Flicking, _super);\n\n function Flicking(props) {\n var _this = _super.call(this, props) || this;\n\n _this._panels = [];\n _this._panels = _this._getChildren().map(function () {\n return React.createRef();\n });\n return _this;\n }\n\n var __proto = Flicking.prototype;\n Object.defineProperty(__proto, \"mounted\", {\n get: function () {\n return this._mounted;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(__proto, \"reactPanels\", {\n get: function () {\n return this._panels.map(function (panel) {\n return panel.current;\n });\n },\n enumerable: false,\n configurable: true\n });\n\n __proto.setRenderCallback = function (callback) {\n this._renderCallback = callback;\n };\n\n __proto.componentDidMount = function () {\n this._mounted = true;\n var props = this.props;\n var flicking = new VanillaFlicking__default(this._viewportElement, __assign(__assign({}, props), {\n renderExternal: {\n renderer: ReactRenderer,\n rendererOptions: {\n reactFlicking: this\n }\n }\n }));\n this._vanillaFlicking = flicking;\n\n this._bindEvents();\n\n var children = this._getChildren();\n\n this._jsxDiffer = new ListDiffer(children, function (panel) {\n return panel.key;\n });\n this._pluginsDiffer = new ListDiffer();\n\n this._checkPlugins();\n };\n\n __proto.componentWillUnmount = function () {\n this._mounted = false;\n\n this._vanillaFlicking.destroy();\n };\n\n __proto.shouldComponentUpdate = function (nextProps) {\n var children = this._getChildren(nextProps.children);\n\n var diffResult = this._jsxDiffer.update(children);\n\n this._panels = children.map(function () {\n return React.createRef();\n });\n this._diffResult = diffResult;\n return true;\n };\n\n __proto.componentDidUpdate = function () {\n var flicking = this._vanillaFlicking;\n var diffResult = this._diffResult;\n\n this._checkPlugins();\n\n this._renderCallback && this._renderCallback();\n if (!diffResult || !flicking.initialized) return;\n sync(flicking, diffResult, this.reactPanels);\n\n if (diffResult.added.length > 0 || diffResult.removed.length > 0) {\n this.setState({});\n }\n\n this._diffResult = null;\n };\n\n __proto.render = function () {\n var _this = this;\n\n var _a;\n\n var props = this.props;\n var Viewport = props.viewportTag;\n var Camera = props.cameraTag;\n var attributes = {};\n var flicking = this._vanillaFlicking;\n var initialized = this._diffResult && flicking && flicking.initialized;\n\n for (var name in props) {\n if (!(name in DEFAULT_PROPS) && !(name in VanillaFlicking__default.prototype)) {\n attributes[name] = props[name];\n }\n }\n\n var viewportClasses = [\"flicking-viewport\"];\n var isHorizontal = flicking ? flicking.horizontal : (_a = props.horizontal) !== null && _a !== void 0 ? _a : true;\n\n if (!isHorizontal) {\n viewportClasses.push(\"vertical\");\n }\n\n if (props.hideBeforeInit && !initialized) {\n viewportClasses.push(\"flicking-hidden\");\n }\n\n if (attributes.className) {\n viewportClasses.push(attributes.className);\n }\n\n var cameraProps = !initialized && props.firstPanelSize ? {\n style: {\n transform: getDefaultCameraTransform(this.props.align, this.props.horizontal, this.props.firstPanelSize)\n }\n } : {};\n var children = initialized ? getRenderingPanels(flicking, this._diffResult) : this._getChildren();\n var panels = this.props.useFindDOMNode ? children.map(function (child, idx) {\n return React.createElement(NonStrictPanelComponent, {\n key: child.key,\n ref: _this._panels[idx]\n }, child);\n }) : children.map(function (child, idx) {\n return React.createElement(StrictPanelComponent, {\n key: child.key,\n ref: _this._panels[idx]\n }, child);\n });\n return React.createElement(Viewport, __assign({}, attributes, {\n className: viewportClasses.join(\" \"),\n ref: function (e) {\n e && (_this._viewportElement = e);\n }\n }), React.createElement(Camera, __assign({\n className: \"flicking-camera\"\n }, cameraProps), panels), this._getViewportSlot());\n };\n\n __proto._bindEvents = function () {\n var _this = this;\n\n var flicking = this._vanillaFlicking;\n var props = this.props;\n Object.keys(EVENTS).forEach(function (eventKey) {\n var eventName = EVENTS[eventKey];\n var propName = \"on\" + (eventName.charAt(0).toUpperCase() + eventName.slice(1));\n flicking.on(eventName, function (e) {\n e.currentTarget = _this;\n props[propName](e);\n });\n });\n flicking.once(EVENTS.READY, function () {\n _this.forceUpdate();\n });\n };\n\n __proto._checkPlugins = function () {\n var _a, _b;\n\n var _c = this._pluginsDiffer.update(this.props.plugins),\n list = _c.list,\n added = _c.added,\n removed = _c.removed,\n prevList = _c.prevList;\n\n (_a = this._vanillaFlicking).addPlugins.apply(_a, added.map(function (index) {\n return list[index];\n }));\n\n (_b = this._vanillaFlicking).removePlugins.apply(_b, removed.map(function (index) {\n return prevList[index];\n }));\n };\n\n __proto._getChildren = function (children) {\n var _this = this;\n\n if (children === void 0) {\n children = this.props.children;\n }\n\n return React.Children.toArray(children).filter(function (child) {\n return child.type !== ViewportSlot;\n }).reduce(function (all, child) {\n return __spreadArray(__spreadArray([], all), _this._unpackFragment(child));\n }, []);\n };\n\n __proto._getViewportSlot = function () {\n return React.Children.toArray(this.props.children).filter(function (child) {\n return child.type === ViewportSlot;\n });\n };\n\n __proto._unpackFragment = function (child) {\n var _this = this;\n\n return isFragment(child) ? React.Children.toArray(child.props.children).reduce(function (allChilds, fragChild) {\n return __spreadArray(__spreadArray([], allChilds), _this._unpackFragment(fragChild));\n }, []) : [child];\n };\n\n Flicking.defaultProps = DEFAULT_PROPS;\n\n __decorate([withFlickingMethods], Flicking.prototype, \"_vanillaFlicking\", void 0);\n\n return Flicking;\n}(React.Component);\n\n/*\n * Copyright (c) 2015 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\n\nexport default Flicking;\nexport { ViewportSlot };\n//# sourceMappingURL=flicking.esm.js.map\n","export default \".flicking-viewport{position:relative;overflow:hidden}.flicking-camera{width:100%;height:100%;display:-webkit-box;display:-ms-flexbox;display:flex;position:relative;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;z-index:1}.flicking-camera>*{-ms-flex-negative:0;flex-shrink:0}.flicking-viewport.vertical{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex}.flicking-viewport.vertical>.flicking-camera{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.flicking-viewport.flicking-hidden .flicking-camera>*{visibility:hidden}\\n/*# sourceMappingURL=flicking.css.map */\";","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-is.production.min.js');\n} else {\n module.exports = require('./cjs/react-is.development.js');\n}\n","/** @license React v17.0.2\n * react-is.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var b=60103,c=60106,d=60107,e=60108,f=60114,g=60109,h=60110,k=60112,l=60113,m=60120,n=60115,p=60116,q=60121,r=60122,u=60117,v=60129,w=60131;\nif(\"function\"===typeof Symbol&&Symbol.for){var x=Symbol.for;b=x(\"react.element\");c=x(\"react.portal\");d=x(\"react.fragment\");e=x(\"react.strict_mode\");f=x(\"react.profiler\");g=x(\"react.provider\");h=x(\"react.context\");k=x(\"react.forward_ref\");l=x(\"react.suspense\");m=x(\"react.suspense_list\");n=x(\"react.memo\");p=x(\"react.lazy\");q=x(\"react.block\");r=x(\"react.server.block\");u=x(\"react.fundamental\");v=x(\"react.debug_trace_mode\");w=x(\"react.legacy_hidden\")}\nfunction y(a){if(\"object\"===typeof a&&null!==a){var t=a.$$typeof;switch(t){case b:switch(a=a.type,a){case d:case f:case e:case l:case m:return a;default:switch(a=a&&a.$$typeof,a){case h:case k:case p:case n:case g:return a;default:return t}}case c:return t}}}var z=g,A=b,B=k,C=d,D=p,E=n,F=c,G=f,H=e,I=l;exports.ContextConsumer=h;exports.ContextProvider=z;exports.Element=A;exports.ForwardRef=B;exports.Fragment=C;exports.Lazy=D;exports.Memo=E;exports.Portal=F;exports.Profiler=G;exports.StrictMode=H;\nexports.Suspense=I;exports.isAsyncMode=function(){return!1};exports.isConcurrentMode=function(){return!1};exports.isContextConsumer=function(a){return y(a)===h};exports.isContextProvider=function(a){return y(a)===g};exports.isElement=function(a){return\"object\"===typeof a&&null!==a&&a.$$typeof===b};exports.isForwardRef=function(a){return y(a)===k};exports.isFragment=function(a){return y(a)===d};exports.isLazy=function(a){return y(a)===p};exports.isMemo=function(a){return y(a)===n};\nexports.isPortal=function(a){return y(a)===c};exports.isProfiler=function(a){return y(a)===f};exports.isStrictMode=function(a){return y(a)===e};exports.isSuspense=function(a){return y(a)===l};exports.isValidElementType=function(a){return\"string\"===typeof a||\"function\"===typeof a||a===d||a===f||a===v||a===e||a===l||a===m||a===w||\"object\"===typeof a&&null!==a&&(a.$$typeof===p||a.$$typeof===n||a.$$typeof===g||a.$$typeof===h||a.$$typeof===k||a.$$typeof===u||a.$$typeof===q||a[0]===r)?!0:!1};\nexports.typeOf=y;\n"],"sourceRoot":""}