{"version":3,"sources":["webpack:///./node_modules/core-js/modules/es.number.parse-int.js","webpack:///./node_modules/core-js/internals/number-parse-float.js","webpack:///./node_modules/core-js/modules/es.string.ends-with.js","webpack:///./src/cloudfun/components/Grid.vue","webpack:///./node_modules/sortablejs/modular/sortable.esm.js","webpack:///./src/cloudfun/components/Grid.vue?9710","webpack:///./src/cloudfun/components/Grid.vue?ddc6","webpack:///./node_modules/core-js/internals/number-parse-int.js","webpack:///./node_modules/core-js/modules/es.number.parse-float.js"],"names":["$","parseInt","target","stat","forced","Number","global","trim","whitespaces","$parseFloat","parseFloat","FORCED","Infinity","module","exports","string","trimmedString","String","result","charAt","getOwnPropertyDescriptor","f","toLength","notARegExp","requireObjectCoercible","correctIsRegExpLogic","IS_PURE","$endsWith","endsWith","min","Math","CORRECT_IS_REGEXP_LOGIC","MDN_POLYFILL_BUG","descriptor","prototype","writable","proto","searchString","that","this","endPosition","arguments","length","undefined","len","end","search","call","slice","class","id","uuid","ref","el","instance","gridOptions","footer-method","footerMethod","onCurrentChange","onPageChange","onCheckboxChange","onCheckboxAll","onCellClick","$slots","_","name","slotData","operate","row","isEditing","editingRow","title","save","icon","reset","canUpdate","decideRowOperable","edit","canRead","canDelete","remove","customer","customEdit","customRemove","transfer","destroy-on-close","lastModalConfig","isModalPopup","onResize","footer","submit","ownKeys","object","enumerableOnly","keys","Object","getOwnPropertySymbols","symbols","filter","sym","enumerable","push","apply","_objectSpread2","i","source","forEach","key","_defineProperty","getOwnPropertyDescriptors","defineProperties","defineProperty","_typeof","obj","Symbol","iterator","constructor","value","configurable","_extends","assign","hasOwnProperty","_objectWithoutPropertiesLoose","excluded","sourceKeys","indexOf","_objectWithoutProperties","sourceSymbolKeys","propertyIsEnumerable","version","userAgent","pattern","window","navigator","match","IE11OrLess","Edge","FireFox","Safari","IOS","ChromeForAndroid","captureMode","capture","passive","on","event","fn","addEventListener","off","removeEventListener","matches","selector","substring","msMatchesSelector","webkitMatchesSelector","getParentOrHost","host","document","nodeType","parentNode","closest","ctx","includeCTX","_throttleTimeout","R_SPACE","toggleClass","state","classList","className","replace","css","prop","val","style","defaultView","getComputedStyle","currentStyle","matrix","selfOnly","appliedTransforms","transform","matrixFn","DOMMatrix","WebKitCSSMatrix","CSSMatrix","MSCSSMatrix","find","tagName","list","getElementsByTagName","n","getWindowScrollingElement","scrollingElement","documentElement","getRect","relativeToContainingBlock","relativeToNonStaticParent","undoScale","container","getBoundingClientRect","elRect","top","left","bottom","right","height","width","innerHeight","innerWidth","containerRect","elMatrix","scaleX","a","scaleY","d","isScrolledPast","elSide","parentSide","parent","getParentAutoScrollElement","elSideVal","parentSideVal","visible","getChild","childNum","options","includeDragEl","currentChild","children","display","Sortable","ghost","dragged","draggable","lastChild","last","lastElementChild","previousElementSibling","index","nodeName","toUpperCase","clone","getRelativeScrollOffset","offsetLeft","offsetTop","winScroller","scrollLeft","scrollTop","indexOfObject","arr","includeSelf","elem","gotSelf","clientWidth","scrollWidth","clientHeight","scrollHeight","elemCSS","overflowX","overflowY","body","extend","dst","src","isRectEqual","rect1","rect2","round","throttle","callback","ms","args","_this","setTimeout","cancelThrottle","clearTimeout","scrollBy","x","y","Polymer","jQuery","Zepto","dom","cloneNode","expando","Date","getTime","AnimationStateManager","animationCallbackId","animationStates","captureAnimationState","animation","child","rect","fromRect","thisAnimationDuration","childMatrix","e","addAnimationState","removeAnimationState","splice","animateAll","animating","animationTime","time","toRect","prevFromRect","prevToRect","animatingRect","targetMatrix","calculateRealTime","animate","max","animationResetTimer","currentRect","duration","translateX","translateY","animatingX","animatingY","forRepaintDummy","repaint","easing","animated","offsetWidth","sqrt","pow","plugins","defaults","initializeByDefault","PluginManager","mount","plugin","option","p","pluginName","concat","pluginEvent","eventName","sortable","evt","eventCanceled","cancel","eventNameGlobal","initializePlugins","initialized","modified","modifyOption","getEventProperties","eventProperties","modifiedValue","optionListeners","dispatchEvent","_ref","rootEl","targetEl","cloneEl","toEl","fromEl","oldIndex","newIndex","oldDraggableIndex","newDraggableIndex","originalEvent","putSortable","extraEventProperties","onName","substr","CustomEvent","createEvent","initEvent","bubbles","cancelable","to","from","item","pullMode","lastPutMode","allEventProperties","_excluded","data","bind","dragEl","parentEl","ghostEl","nextEl","lastDownEl","cloneHidden","dragStarted","moved","activeSortable","active","hideGhostForTarget","_hideGhostForTarget","unhideGhostForTarget","_unhideGhostForTarget","cloneNowHidden","cloneNowShown","dispatchSortableEvent","_dispatchEvent","info","activeGroup","tapEvt","touchEvt","lastDx","lastDy","tapDistanceLeft","tapDistanceTop","lastTarget","lastDirection","targetMoveDistance","ghostRelativeParent","awaitingDragStarted","ignoreNextClick","sortables","pastFirstInvertThresh","isCircumstantialInvert","ghostRelativeParentInitialScroll","_silent","savedInputChecked","documentExists","PositionGhostAbsolutely","CSSFloatProperty","supportDraggable","createElement","supportCssPointerEvents","cssText","pointerEvents","_detectDirection","elCSS","elWidth","paddingLeft","paddingRight","borderLeftWidth","borderRightWidth","child1","child2","firstChildCSS","secondChildCSS","firstChildWidth","marginLeft","marginRight","secondChildWidth","flexDirection","gridTemplateColumns","split","touchingSideChild2","clear","_dragElInRowColumn","dragRect","targetRect","vertical","dragElS1Opp","dragElS2Opp","dragElOppLength","targetS1Opp","targetS2Opp","targetOppLength","_detectNearestEmptySortable","ret","some","threshold","emptyInsertThreshold","insideHorizontally","insideVertically","_prepareGroup","toFn","pull","sameGroup","group","otherGroup","join","originalGroup","checkPull","checkPut","put","revertClone","preventDefault","stopPropagation","stopImmediatePropagation","nearestEmptyInsertDetectEvent","touches","nearest","clientX","clientY","_onDragOver","_checkOutsideTargetEl","_isOutsideThisEl","toString","sort","disabled","store","handle","test","swapThreshold","invertSwap","invertedSwapThreshold","removeCloneOnHide","direction","ghostClass","chosenClass","dragClass","ignore","preventOnFilter","setData","dataTransfer","textContent","dropBubble","dragoverBubble","dataIdAttr","delay","delayOnTouchOnly","touchStartThreshold","devicePixelRatio","forceFallback","fallbackClass","fallbackOnBody","fallbackTolerance","fallbackOffset","supportPointer","nativeDraggable","_onTapStart","get","_globalDragOver","dropEffect","_onMove","willInsertAfter","retVal","onMoveFn","onMove","draggedRect","related","relatedRect","_disableDraggable","_unsilent","_ghostIsFirst","spacer","_ghostIsLast","_getSwapDirection","isLastTarget","mouseOnAxis","targetLength","targetS1","targetS2","invert","_getInsertDirection","_generateId","str","href","sum","charCodeAt","_saveInputCheckedState","root","inputs","idx","checked","_nextTick","_cancelNextTick","contains","_getDirection","type","touch","pointerType","originalTarget","shadowRoot","path","composedPath","button","isContentEditable","criteria","_prepareDragStart","dragStartFn","ownerDocument","nextSibling","_lastX","_lastY","_onDrop","_disableDelayedDragEvents","_triggerDragStart","_disableDelayedDrag","_delayedDragTouchMoveHandler","_dragStartTimer","abs","floor","_onTouchMove","_onDragStart","selection","empty","getSelection","removeAllRanges","err","_dragStarted","fallback","_appendGhost","_nulling","_emulateDragOver","elementFromPoint","inserted","ghostMatrix","relativeScrollOffset","dx","dy","b","c","cssMatrix","appendChild","_hideClone","cloneId","insertBefore","_loopId","setInterval","effectAllowed","_dragStartId","revert","isOwner","canSort","fromSortable","completedFired","dragOverEvent","_ignoreWhileAnimating","completed","elLastChild","changed","firstChild","targetBeforeFirstSwap","sibling","differentLevel","differentRowCol","side1","scrolledPastTop","scrollBefore","dragIndex","nextElementSibling","after","moveVector","extra","axis","insertion","_showClone","_offMoveEvents","_offUpEvents","clearInterval","removeChild","handleEvent","toArray","order","getAttribute","useAnimation","items","set","destroy","Array","querySelectorAll","removeAttribute","utils","is","nextTick","cancelNextTick","detectDirection","element","_len","_key","create","scrollEl","scrollRootEl","lastAutoScrollX","lastAutoScrollY","touchEvt$1","pointerElemChangedInterval","autoScrolls","scrolling","AutoScrollPlugin","AutoScroll","scroll","forceAutoScrollFallback","scrollSensitivity","scrollSpeed","bubbleScroll","_handleAutoScroll","_handleFallbackAutoScroll","dragOverCompleted","_ref2","dragOverBubble","drop","clearPointerElemChangedInterval","clearAutoScrolls","nulling","autoScroll","ogElemScroller","newElem","pid","isFallback","scrollCustomFn","sens","speed","scrollThisInstance","scrollFn","layersOut","currentParent","canScrollX","canScrollY","scrollPosX","scrollPosY","vx","vy","layer","scrollOffsetY","scrollOffsetX","toSortable","changedTouches","onSpill","Revert","Remove","startIndex","dragStart","_ref3","_ref4","parentSortable","props","rowId","default","size","mode","multiselect","Boolean","border","stripe","highlightHoverColumn","highlightHoverRow","rowClassName","Function","resizable","autoResize","sortConfig","remote","multiple","pagerConfig","currentPage","pageSize","pageSizes","layouts","printConfig","modes","exportConfig","types","toolbarConfig","showHeader","showFooter","columns","required","buttons","promises","modalConfig","showZoom","resize","remember","canCreate","treeConfig","checkboxConfig","reserve","onReset","onRefresh","onReload","onModalResize","onCurrentRowChanged","onPageChanged","onAddNewRow","onEdit","onRemove","onRemoveSelectedRows","onSave","onShangeFilterEvent","onExport","onPrint","onChangeFilterEvent","onCustomEdit","onCustomRemove","setup","emit","attrs","loading","keyword","customFilters","fixed","slots","align","keepSource","highlightCurrentRow","customConfig","storage","checkMethod","column","property","enabled","custom","refresh","filterConfig","editConfig","trigger","showIcon","autoClear","proxyConfig","message","total","ajax","query","params","queryParams","page","sortings","sorts","map","Descending","Ascending","condition","filters","values","gridCondition","columnCondition","subFilter","connective","And","and","or","queryPagination","Promise","resolve","reject","then","payload","reason","send","subject","content","totalCount","queryAll","delete","deleteRows","removeRecords","saveParams","insertRows","insertRecords","updateRows","updateRecords","saveRows","loadMethod","$table","getSortColumns","getCheckedFilters","percentage","sortable2","initTime","selectedRows","getCheckboxRecords","isRowSelected","isActiveByRow","isClosing","action","clearActived","isInsertByRow","isUpdateByRow","revertData","Id","setActiveRow","addNewRow","insert","getRecordset","needSave","isRowEditing","commitProxy","finally","failure","update","isArray","status","confirm","productID","memberID","removeSelectedRows","rows","changeFilterEvent","panel","toogleChecked","Contains","changeOption","config","exportData","print","reload","$modal","getBox","records","reserves","setCheckboxRow","getData","clearCheckboxRow","clearCheckboxReserve","rowIndex","$rowIndex","columnIndex","$columnIndex","triggerRadio","triggerCheckbox","triggerTreeNode","triggerExpandNode","$event","columnDrop2","$grid","$el","querySelector","onEnd","sortableEvent","windowHeight","windowWidth","render","$parseInt","hex","radix","S"],"mappings":"qGAAA,IAAIA,EAAI,EAAQ,QACZC,EAAW,EAAQ,QAKvBD,EAAE,CAAEE,OAAQ,SAAUC,MAAM,EAAMC,OAAQC,OAAOJ,UAAYA,GAAY,CACvEA,SAAUA,K,uBCPZ,IAAIK,EAAS,EAAQ,QACjBC,EAAO,EAAQ,QAA4BA,KAC3CC,EAAc,EAAQ,QAEtBC,EAAcH,EAAOI,WACrBC,EAAS,EAAIF,EAAYD,EAAc,SAAWI,IAItDC,EAAOC,QAAUH,EAAS,SAAoBI,GAC5C,IAAIC,EAAgBT,EAAKU,OAAOF,IAC5BG,EAAST,EAAYO,GACzB,OAAkB,IAAXE,GAA2C,KAA3BF,EAAcG,OAAO,IAAa,EAAID,GAC3DT,G,oCCZJ,IAAIT,EAAI,EAAQ,QACZoB,EAA2B,EAAQ,QAAmDC,EACtFC,EAAW,EAAQ,QACnBC,EAAa,EAAQ,QACrBC,EAAyB,EAAQ,QACjCC,EAAuB,EAAQ,QAC/BC,EAAU,EAAQ,QAGlBC,EAAY,GAAGC,SACfC,EAAMC,KAAKD,IAEXE,EAA0BN,EAAqB,YAE/CO,GAAoBN,IAAYK,KAA6B,WAC/D,IAAIE,EAAab,EAAyBH,OAAOiB,UAAW,YAC5D,OAAOD,IAAeA,EAAWE,SAF8B,GAOjEnC,EAAE,CAAEE,OAAQ,SAAUkC,OAAO,EAAMhC,QAAS4B,IAAqBD,GAA2B,CAC1FH,SAAU,SAAkBS,GAC1B,IAAIC,EAAOrB,OAAOO,EAAuBe,OACzChB,EAAWc,GACX,IAAIG,EAAcC,UAAUC,OAAS,EAAID,UAAU,QAAKE,EACpDC,EAAMtB,EAASgB,EAAKI,QACpBG,OAAsBF,IAAhBH,EAA4BI,EAAMf,EAAIP,EAASkB,GAAcI,GACnEE,EAAS7B,OAAOoB,GACpB,OAAOV,EACHA,EAAUoB,KAAKT,EAAMQ,EAAQD,GAC7BP,EAAKU,MAAMH,EAAMC,EAAOJ,OAAQG,KAASC,M,qECfpCG,MAAM,Q,qCAgBNA,MAAM,uB,wEAyEb,gCASM,OATDA,MAAM,eAAa,CACtB,gCAOM,OAPDA,MAAM,UAAQ,CACjB,gCAEK,MAFDA,MAAM,mDAAkD,kBAG5D,gCAEK,MAFDA,MAAM,0CAAyC,iD,2PA9G3D,yBA6EW,EA7EX,wBA6EW,CA5ERC,GAAI,EAAAC,KACJC,IAAK,SAAAC,GAAE,OAAK,EAAAC,SAAWD,IAChB,EAAAE,YAAW,CAClBC,gBAAe,EAAAC,aACf,gBAAgB,EAAAC,gBAChB,aAAa,EAAAC,aACb,iBAAiB,EAAAC,iBACjB,cAAa,EAAAC,cACb,YAAY,EAAAC,c,wDAEiB,EAAAC,QAAM,SAAlBC,EAAGC,G,YAAwB,E,yBAC3C,SAD2D,GAC3D,MAD2D,CAC3D,wBAAuC,SAA1BA,EAAI,4DAAUC,aAEZ,EAAAH,OAAOI,a,QAAU,U,yBAChC,gBAD2CC,EAC3C,EAD2CA,IAC3C,MAD8C,CAC9C,wBA4DO,oBA5DeA,IAAKA,IAA3B,iBA4DO,CA3DmB,EAAAC,WAAa,EAAAC,YAAcF,G,yBAAnD,gCAeM,MAfN,EAeM,CAdJ,gCAMS,UALPnB,MAAM,iDACNsB,MAAM,KACL,QAAK,+CAAO,EAAAC,KAAKJ,KAAG,W,CAErB,yBAAmD,GAAtCK,KAAK,eAAexB,MAAM,a,KAEzC,gCAMS,UALPA,MAAM,4CACNsB,MAAM,KACL,QAAK,+CAAO,EAAAG,MAAMN,KAAG,W,CAEtB,yBAA8C,GAAjCK,KAAK,UAAUxB,MAAM,a,+CAGE,EAAAoB,U,iEAAxC,gCA0CM,MA1CN,EA0CM,CAxCI,EAAAM,WAAa,EAAAC,kBAAkBR,EAAG,W,yBAD1C,gCAOS,U,MALPnB,MAAM,kDACNsB,MAAM,KACL,QAAK,+CAAO,EAAAM,KAAKT,KAAG,W,CAErB,yBAAkD,GAArCK,KAAK,cAAcxB,MAAM,a,MAG3B,EAAA6B,SAAW,EAAAF,kBAAkBR,EAAG,S,yBAD7C,gCAOS,U,MALPnB,MAAM,kDACNsB,MAAM,OACL,QAAK,+CAAO,EAAAM,KAAKT,KAAG,W,CAErB,yBAA2C,GAA9BK,KAAK,OAAOxB,MAAM,a,6CAGzB,EAAA8B,WAAa,EAAAH,kBAAkBR,EAAG,W,yBAD1C,gCAOS,U,MALPnB,MAAM,4CACNsB,MAAM,KACL,QAAK,+CAAO,EAAAS,OAAOZ,KAAG,W,CAEvB,yBAA4C,GAA/BK,KAAK,QAAQxB,MAAM,a,6CAI1B,EAAAgC,U,yBADR,gCAOS,U,MALPhC,MAAM,kDACNsB,MAAM,KACL,QAAK,+CAAO,EAAAW,WAAWd,KAAG,W,CAE3B,yBAAkD,GAArCK,KAAK,cAAcxB,MAAM,a,6CAGhC,EAAAgC,U,yBADR,gCAOS,U,MALPhC,MAAM,4CACNsB,MAAM,KACL,QAAK,+CAAO,EAAAY,aAAaf,KAAG,W,CAE7B,yBAA4C,GAA/BK,KAAK,QAAQxB,MAAM,a,0KAM1C,yBAsCY,EAtCZ,wBAsCY,CArCTsB,MAAK,UAAqB,eAAe,aAAW,WAAa,aAAW,UAAsB,Y,gBAA7F,OAAuK,SAS7Ka,SAAA,GACAC,mBAAA,IACQ,EAAAC,gBAAe,C,WACd,EAAAC,a,qDAAA,EAAAA,aAAY,IACpB,OAAM,EAAAC,SACN,QAAK,+BAAE,EAAAd,MAAM,EAAAJ,YAAU,KACvB,OAAM,EAAAkB,W,CAEIC,OAAM,sBACf,iBAA4B,CAA5B,wBAA4B,6B,8BAE9B,iBAgBO,CAhBP,wBAgBO,kBAdJrB,IAAK,EAAAE,YAAU,GACfoB,OAAM,kBAAQ,EAAAlB,KAAK,EAAAF,aACnBI,MAAK,kBAAQ,EAAAA,MAAM,EAAAJ,eAJtB,iBAgBO,CAVL,U;;;;;;;ACpGN,SAASqB,EAAQC,EAAQC,GACvB,IAAIC,EAAOC,OAAOD,KAAKF,GAEvB,GAAIG,OAAOC,sBAAuB,CAChC,IAAIC,EAAUF,OAAOC,sBAAsBJ,GAEvCC,IACFI,EAAUA,EAAQC,QAAO,SAAUC,GACjC,OAAOJ,OAAO3E,yBAAyBwE,EAAQO,GAAKC,eAIxDN,EAAKO,KAAKC,MAAMR,EAAMG,GAGxB,OAAOH,EAGT,SAASS,EAAerG,GACtB,IAAK,IAAIsG,EAAI,EAAGA,EAAI/D,UAAUC,OAAQ8D,IAAK,CACzC,IAAIC,EAAyB,MAAhBhE,UAAU+D,GAAa/D,UAAU+D,GAAK,GAE/CA,EAAI,EACNb,EAAQI,OAAOU,IAAS,GAAMC,SAAQ,SAAUC,GAC9CC,EAAgB1G,EAAQyG,EAAKF,EAAOE,OAE7BZ,OAAOc,0BAChBd,OAAOe,iBAAiB5G,EAAQ6F,OAAOc,0BAA0BJ,IAEjEd,EAAQI,OAAOU,IAASC,SAAQ,SAAUC,GACxCZ,OAAOgB,eAAe7G,EAAQyG,EAAKZ,OAAO3E,yBAAyBqF,EAAQE,OAKjF,OAAOzG,EAGT,SAAS8G,EAAQC,GAaf,OATED,EADoB,oBAAXE,QAAoD,kBAApBA,OAAOC,SACtC,SAAUF,GAClB,cAAcA,GAGN,SAAUA,GAClB,OAAOA,GAAyB,oBAAXC,QAAyBD,EAAIG,cAAgBF,QAAUD,IAAQC,OAAOhF,UAAY,gBAAkB+E,GAItHD,EAAQC,GAGjB,SAASL,EAAgBK,EAAKN,EAAKU,GAYjC,OAXIV,KAAOM,EACTlB,OAAOgB,eAAeE,EAAKN,EAAK,CAC9BU,MAAOA,EACPjB,YAAY,EACZkB,cAAc,EACdnF,UAAU,IAGZ8E,EAAIN,GAAOU,EAGNJ,EAGT,SAASM,IAeP,OAdAA,EAAWxB,OAAOyB,QAAU,SAAUtH,GACpC,IAAK,IAAIsG,EAAI,EAAGA,EAAI/D,UAAUC,OAAQ8D,IAAK,CACzC,IAAIC,EAAShE,UAAU+D,GAEvB,IAAK,IAAIG,KAAOF,EACVV,OAAO7D,UAAUuF,eAAe1E,KAAK0D,EAAQE,KAC/CzG,EAAOyG,GAAOF,EAAOE,IAK3B,OAAOzG,GAGFqH,EAASjB,MAAM/D,KAAME,WAG9B,SAASiF,EAA8BjB,EAAQkB,GAC7C,GAAc,MAAVlB,EAAgB,MAAO,GAC3B,IAEIE,EAAKH,EAFLtG,EAAS,GACT0H,EAAa7B,OAAOD,KAAKW,GAG7B,IAAKD,EAAI,EAAGA,EAAIoB,EAAWlF,OAAQ8D,IACjCG,EAAMiB,EAAWpB,GACbmB,EAASE,QAAQlB,IAAQ,IAC7BzG,EAAOyG,GAAOF,EAAOE,IAGvB,OAAOzG,EAGT,SAAS4H,EAAyBrB,EAAQkB,GACxC,GAAc,MAAVlB,EAAgB,MAAO,GAE3B,IAEIE,EAAKH,EAFLtG,EAASwH,EAA8BjB,EAAQkB,GAInD,GAAI5B,OAAOC,sBAAuB,CAChC,IAAI+B,EAAmBhC,OAAOC,sBAAsBS,GAEpD,IAAKD,EAAI,EAAGA,EAAIuB,EAAiBrF,OAAQ8D,IACvCG,EAAMoB,EAAiBvB,GACnBmB,EAASE,QAAQlB,IAAQ,GACxBZ,OAAO7D,UAAU8F,qBAAqBjF,KAAK0D,EAAQE,KACxDzG,EAAOyG,GAAOF,EAAOE,IAIzB,OAAOzG,EAoCT,IAAI+H,EAAU,SAEd,SAASC,EAAUC,GACjB,GAAsB,qBAAXC,QAA0BA,OAAOC,UAC1C,QAAuBA,UAAUH,UAAUI,MAAMH,GAIrD,IAAII,EAAaL,EAAU,yDACvBM,EAAON,EAAU,SACjBO,EAAUP,EAAU,YACpBQ,EAASR,EAAU,aAAeA,EAAU,aAAeA,EAAU,YACrES,EAAMT,EAAU,mBAChBU,EAAmBV,EAAU,YAAcA,EAAU,YAErDW,EAAc,CAChBC,SAAS,EACTC,SAAS,GAGX,SAASC,EAAG3F,EAAI4F,EAAOC,GACrB7F,EAAG8F,iBAAiBF,EAAOC,GAAKX,GAAcM,GAGhD,SAASO,EAAI/F,EAAI4F,EAAOC,GACtB7F,EAAGgG,oBAAoBJ,EAAOC,GAAKX,GAAcM,GAGnD,SAASS,EAETjG,EAEAkG,GACE,GAAKA,EAAL,CAGA,GAFgB,MAAhBA,EAAS,KAAeA,EAAWA,EAASC,UAAU,IAElDnG,EACF,IACE,GAAIA,EAAGiG,QACL,OAAOjG,EAAGiG,QAAQC,GACb,GAAIlG,EAAGoG,kBACZ,OAAOpG,EAAGoG,kBAAkBF,GACvB,GAAIlG,EAAGqG,sBACZ,OAAOrG,EAAGqG,sBAAsBH,GAElC,MAAOvF,GACP,OAAO,EAIX,OAAO,GAGT,SAAS2F,EAAgBtG,GACvB,OAAOA,EAAGuG,MAAQvG,IAAOwG,UAAYxG,EAAGuG,KAAKE,SAAWzG,EAAGuG,KAAOvG,EAAG0G,WAGvE,SAASC,EAET3G,EAEAkG,EAEAU,EAAKC,GACH,GAAI7G,EAAI,CACN4G,EAAMA,GAAOJ,SAEb,EAAG,CACD,GAAgB,MAAZN,IAAqC,MAAhBA,EAAS,GAAalG,EAAG0G,aAAeE,GAAOX,EAAQjG,EAAIkG,GAAYD,EAAQjG,EAAIkG,KAAcW,GAAc7G,IAAO4G,EAC7I,OAAO5G,EAGT,GAAIA,IAAO4G,EAAK,YAET5G,EAAKsG,EAAgBtG,IAGhC,OAAO,KAGT,IAgWI8G,EAhWAC,EAAU,OAEd,SAASC,EAAYhH,EAAIY,EAAMqG,GAC7B,GAAIjH,GAAMY,EACR,GAAIZ,EAAGkH,UACLlH,EAAGkH,UAAUD,EAAQ,MAAQ,UAAUrG,OAClC,CACL,IAAIuG,GAAa,IAAMnH,EAAGmH,UAAY,KAAKC,QAAQL,EAAS,KAAKK,QAAQ,IAAMxG,EAAO,IAAK,KAC3FZ,EAAGmH,WAAaA,GAAaF,EAAQ,IAAMrG,EAAO,KAAKwG,QAAQL,EAAS,MAK9E,SAASM,EAAIrH,EAAIsH,EAAMC,GACrB,IAAIC,EAAQxH,GAAMA,EAAGwH,MAErB,GAAIA,EAAO,CACT,QAAY,IAARD,EAOF,OANIf,SAASiB,aAAejB,SAASiB,YAAYC,iBAC/CH,EAAMf,SAASiB,YAAYC,iBAAiB1H,EAAI,IACvCA,EAAG2H,eACZJ,EAAMvH,EAAG2H,mBAGK,IAATL,EAAkBC,EAAMA,EAAID,GAE7BA,KAAQE,IAAsC,IAA5BF,EAAK9C,QAAQ,YACnC8C,EAAO,WAAaA,GAGtBE,EAAMF,GAAQC,GAAsB,kBAARA,EAAmB,GAAK,OAK1D,SAASK,EAAO5H,EAAI6H,GAClB,IAAIC,EAAoB,GAExB,GAAkB,kBAAP9H,EACT8H,EAAoB9H,OAEpB,EAAG,CACD,IAAI+H,EAAYV,EAAIrH,EAAI,aAEpB+H,GAA2B,SAAdA,IACfD,EAAoBC,EAAY,IAAMD,UAIhCD,IAAa7H,EAAKA,EAAG0G,aAGjC,IAAIsB,EAAWjD,OAAOkD,WAAalD,OAAOmD,iBAAmBnD,OAAOoD,WAAapD,OAAOqD,YAGxF,OAAOJ,GAAY,IAAIA,EAASF,GAGlC,SAASO,EAAKzB,EAAK0B,EAASxE,GAC1B,GAAI8C,EAAK,CACP,IAAI2B,EAAO3B,EAAI4B,qBAAqBF,GAChCnF,EAAI,EACJsF,EAAIF,EAAKlJ,OAEb,GAAIyE,EACF,KAAOX,EAAIsF,EAAGtF,IACZW,EAASyE,EAAKpF,GAAIA,GAItB,OAAOoF,EAGT,MAAO,GAGT,SAASG,IACP,IAAIC,EAAmBnC,SAASmC,iBAEhC,OAAIA,GAGKnC,SAASoC,gBAcpB,SAASC,EAAQ7I,EAAI8I,EAA2BC,EAA2BC,EAAWC,GACpF,GAAKjJ,EAAGkJ,uBAAyBlJ,IAAO+E,OAAxC,CACA,IAAIoE,EAAQC,EAAKC,EAAMC,EAAQC,EAAOC,EAAQC,EAmB9C,GAjBIzJ,IAAO+E,QAAU/E,EAAG0G,YAAc1G,IAAO0I,KAC3CS,EAASnJ,EAAGkJ,wBACZE,EAAMD,EAAOC,IACbC,EAAOF,EAAOE,KACdC,EAASH,EAAOG,OAChBC,EAAQJ,EAAOI,MACfC,EAASL,EAAOK,OAChBC,EAAQN,EAAOM,QAEfL,EAAM,EACNC,EAAO,EACPC,EAASvE,OAAO2E,YAChBH,EAAQxE,OAAO4E,WACfH,EAASzE,OAAO2E,YAChBD,EAAQ1E,OAAO4E,aAGZb,GAA6BC,IAA8B/I,IAAO+E,SAErEkE,EAAYA,GAAajJ,EAAG0G,YAGvBxB,GACH,GACE,GAAI+D,GAAaA,EAAUC,wBAA0D,SAAhC7B,EAAI4B,EAAW,cAA2BF,GAA4D,WAA/B1B,EAAI4B,EAAW,aAA2B,CACpK,IAAIW,EAAgBX,EAAUC,wBAE9BE,GAAOQ,EAAcR,IAAMxM,SAASyK,EAAI4B,EAAW,qBACnDI,GAAQO,EAAcP,KAAOzM,SAASyK,EAAI4B,EAAW,sBACrDK,EAASF,EAAMD,EAAOK,OACtBD,EAAQF,EAAOF,EAAOM,MACtB,aAIKR,EAAYA,EAAUvC,YAInC,GAAIsC,GAAahJ,IAAO+E,OAAQ,CAE9B,IAAI8E,EAAWjC,EAAOqB,GAAajJ,GAC/B8J,EAASD,GAAYA,EAASE,EAC9BC,EAASH,GAAYA,EAASI,EAE9BJ,IACFT,GAAOY,EACPX,GAAQS,EACRL,GAASK,EACTN,GAAUQ,EACVV,EAASF,EAAMI,EACfD,EAAQF,EAAOI,GAInB,MAAO,CACLL,IAAKA,EACLC,KAAMA,EACNC,OAAQA,EACRC,MAAOA,EACPE,MAAOA,EACPD,OAAQA,IAYZ,SAASU,EAAelK,EAAImK,EAAQC,GAClC,IAAIC,EAASC,GAA2BtK,GAAI,GACxCuK,EAAY1B,EAAQ7I,GAAImK,GAG5B,MAAOE,EAAQ,CACb,IAAIG,EAAgB3B,EAAQwB,GAAQD,GAChCK,OAAU,EAQd,GALEA,EADiB,QAAfL,GAAuC,SAAfA,EAChBG,GAAaC,EAEbD,GAAaC,GAGpBC,EAAS,OAAOJ,EACrB,GAAIA,IAAW3B,IAA6B,MAC5C2B,EAASC,GAA2BD,GAAQ,GAG9C,OAAO,EAYT,SAASK,EAAS1K,EAAI2K,EAAUC,EAASC,GACvC,IAAIC,EAAe,EACf3H,EAAI,EACJ4H,EAAW/K,EAAG+K,SAElB,MAAO5H,EAAI4H,EAAS1L,OAAQ,CAC1B,GAAkC,SAA9B0L,EAAS5H,GAAGqE,MAAMwD,SAAsBD,EAAS5H,KAAO8H,GAASC,QAAUL,GAAiBE,EAAS5H,KAAO8H,GAASE,UAAYxE,EAAQoE,EAAS5H,GAAIyH,EAAQQ,UAAWpL,GAAI,GAAQ,CACvL,GAAI8K,IAAiBH,EACnB,OAAOI,EAAS5H,GAGlB2H,IAGF3H,IAGF,OAAO,KAUT,SAASkI,EAAUrL,EAAIkG,GACrB,IAAIoF,EAAOtL,EAAGuL,iBAEd,MAAOD,IAASA,IAASL,GAASC,OAAkC,SAAzB7D,EAAIiE,EAAM,YAAyBpF,IAAaD,EAAQqF,EAAMpF,IACvGoF,EAAOA,EAAKE,uBAGd,OAAOF,GAAQ,KAWjB,SAASG,EAAMzL,EAAIkG,GACjB,IAAIuF,EAAQ,EAEZ,IAAKzL,IAAOA,EAAG0G,WACb,OAAQ,EAKV,MAAO1G,EAAKA,EAAGwL,uBACqB,aAA9BxL,EAAG0L,SAASC,eAAgC3L,IAAOiL,GAASW,OAAW1F,IAAYD,EAAQjG,EAAIkG,IACjGuF,IAIJ,OAAOA,EAUT,SAASI,GAAwB7L,GAC/B,IAAI8L,EAAa,EACbC,EAAY,EACZC,EAActD,IAElB,GAAI1I,EACF,EAAG,CACD,IAAI6J,EAAWjC,EAAO5H,GAClB8J,EAASD,EAASE,EAClBC,EAASH,EAASI,EACtB6B,GAAc9L,EAAGiM,WAAanC,EAC9BiC,GAAa/L,EAAGkM,UAAYlC,QACrBhK,IAAOgM,IAAgBhM,EAAKA,EAAG0G,aAG1C,MAAO,CAACoF,EAAYC,GAUtB,SAASI,GAAcC,EAAKxI,GAC1B,IAAK,IAAIT,KAAKiJ,EACZ,GAAKA,EAAIhI,eAAejB,GAExB,IAAK,IAAIG,KAAOM,EACd,GAAIA,EAAIQ,eAAed,IAAQM,EAAIN,KAAS8I,EAAIjJ,GAAGG,GAAM,OAAOtG,OAAOmG,GAI3E,OAAQ,EAGV,SAASmH,GAA2BtK,EAAIqM,GAEtC,IAAKrM,IAAOA,EAAGkJ,sBAAuB,OAAOR,IAC7C,IAAI4D,EAAOtM,EACPuM,GAAU,EAEd,GAEE,GAAID,EAAKE,YAAcF,EAAKG,aAAeH,EAAKI,aAAeJ,EAAKK,aAAc,CAChF,IAAIC,EAAUvF,EAAIiF,GAElB,GAAIA,EAAKE,YAAcF,EAAKG,cAAqC,QAArBG,EAAQC,WAA4C,UAArBD,EAAQC,YAA0BP,EAAKI,aAAeJ,EAAKK,eAAsC,QAArBC,EAAQE,WAA4C,UAArBF,EAAQE,WAAwB,CACpN,IAAKR,EAAKpD,uBAAyBoD,IAAS9F,SAASuG,KAAM,OAAOrE,IAClE,GAAI6D,GAAWF,EAAa,OAAOC,EACnCC,GAAU,UAKPD,EAAOA,EAAK5F,YAErB,OAAOgC,IAGT,SAASsE,GAAOC,EAAKC,GACnB,GAAID,GAAOC,EACT,IAAK,IAAI5J,KAAO4J,EACVA,EAAI9I,eAAed,KACrB2J,EAAI3J,GAAO4J,EAAI5J,IAKrB,OAAO2J,EAGT,SAASE,GAAYC,EAAOC,GAC1B,OAAO5O,KAAK6O,MAAMF,EAAMhE,OAAS3K,KAAK6O,MAAMD,EAAMjE,MAAQ3K,KAAK6O,MAAMF,EAAM/D,QAAU5K,KAAK6O,MAAMD,EAAMhE,OAAS5K,KAAK6O,MAAMF,EAAM5D,UAAY/K,KAAK6O,MAAMD,EAAM7D,SAAW/K,KAAK6O,MAAMF,EAAM3D,SAAWhL,KAAK6O,MAAMD,EAAM5D,OAKvN,SAAS8D,GAASC,EAAUC,GAC1B,OAAO,WACL,IAAK3G,EAAkB,CACrB,IAAI4G,EAAOtO,UACPuO,EAAQzO,KAEQ,IAAhBwO,EAAKrO,OACPmO,EAAS9N,KAAKiO,EAAOD,EAAK,IAE1BF,EAASvK,MAAM0K,EAAOD,GAGxB5G,EAAmB8G,YAAW,WAC5B9G,OAAmB,IAClB2G,KAKT,SAASI,KACPC,aAAahH,GACbA,OAAmB,EAGrB,SAASiH,GAAS/N,EAAIgO,EAAGC,GACvBjO,EAAGiM,YAAc+B,EACjBhO,EAAGkM,WAAa+B,EAGlB,SAASrC,GAAM5L,GACb,IAAIkO,EAAUnJ,OAAOmJ,QACjBvR,EAAIoI,OAAOoJ,QAAUpJ,OAAOqJ,MAEhC,OAAIF,GAAWA,EAAQG,IACdH,EAAQG,IAAIrO,GAAIsO,WAAU,GACxB3R,EACFA,EAAEqD,GAAI4L,OAAM,GAAM,GAElB5L,EAAGsO,WAAU,GAoBxB,IAAIC,GAAU,YAAa,IAAIC,MAAOC,UAEtC,SAASC,KACP,IACIC,EADAC,EAAkB,GAEtB,MAAO,CACLC,sBAAuB,WAErB,GADAD,EAAkB,GACb1P,KAAK0L,QAAQkE,UAAlB,CACA,IAAI/D,EAAW,GAAGpL,MAAMD,KAAKR,KAAKc,GAAG+K,UACrCA,EAAS1H,SAAQ,SAAU0L,GACzB,GAA8B,SAA1B1H,EAAI0H,EAAO,YAAyBA,IAAU9D,GAASC,MAA3D,CACA0D,EAAgB5L,KAAK,CACnBnG,OAAQkS,EACRC,KAAMnG,EAAQkG,KAGhB,IAAIE,EAAW/L,EAAe,GAAI0L,EAAgBA,EAAgBvP,OAAS,GAAG2P,MAG9E,GAAID,EAAMG,sBAAuB,CAC/B,IAAIC,EAAcvH,EAAOmH,GAAO,GAE5BI,IACFF,EAAS7F,KAAO+F,EAAYnR,EAC5BiR,EAAS5F,MAAQ8F,EAAYC,GAIjCL,EAAME,SAAWA,QAGrBI,kBAAmB,SAA2BpI,GAC5C2H,EAAgB5L,KAAKiE,IAEvBqI,qBAAsB,SAA8BzS,GAClD+R,EAAgBW,OAAOpD,GAAcyC,EAAiB,CACpD/R,OAAQA,IACN,IAEN2S,WAAY,SAAoBhC,GAC9B,IAAIG,EAAQzO,KAEZ,IAAKA,KAAK0L,QAAQkE,UAGhB,OAFAhB,aAAaa,QACW,oBAAbnB,GAAyBA,KAItC,IAAIiC,GAAY,EACZC,EAAgB,EACpBd,EAAgBvL,SAAQ,SAAU4D,GAChC,IAAI0I,EAAO,EACP9S,EAASoK,EAAMpK,OACfoS,EAAWpS,EAAOoS,SAClBW,EAAS/G,EAAQhM,GACjBgT,EAAehT,EAAOgT,aACtBC,EAAajT,EAAOiT,WACpBC,EAAgB9I,EAAM+H,KACtBgB,EAAepI,EAAO/K,GAAQ,GAE9BmT,IAEFJ,EAAOxG,KAAO4G,EAAahS,EAC3B4R,EAAOvG,MAAQ2G,EAAaZ,GAG9BvS,EAAO+S,OAASA,EAEZ/S,EAAOqS,uBAEL/B,GAAY0C,EAAcD,KAAYzC,GAAY8B,EAAUW,KAC/DG,EAAc3G,IAAMwG,EAAOxG,MAAQ2G,EAAc1G,KAAOuG,EAAOvG,SAAW4F,EAAS7F,IAAMwG,EAAOxG,MAAQ6F,EAAS5F,KAAOuG,EAAOvG,QAE9HsG,EAAOM,GAAkBF,EAAeF,EAAcC,EAAYnC,EAAM/C,UAKvEuC,GAAYyC,EAAQX,KACvBpS,EAAOgT,aAAeZ,EACtBpS,EAAOiT,WAAaF,EAEfD,IACHA,EAAOhC,EAAM/C,QAAQkE,WAGvBnB,EAAMuC,QAAQrT,EAAQkT,EAAeH,EAAQD,IAG3CA,IACFF,GAAY,EACZC,EAAgBjR,KAAK0R,IAAIT,EAAeC,GACxC7B,aAAajR,EAAOuT,qBACpBvT,EAAOuT,oBAAsBxC,YAAW,WACtC/Q,EAAO6S,cAAgB,EACvB7S,EAAOgT,aAAe,KACtBhT,EAAOoS,SAAW,KAClBpS,EAAOiT,WAAa,KACpBjT,EAAOqS,sBAAwB,OAC9BS,GACH9S,EAAOqS,sBAAwBS,MAGnC7B,aAAaa,GAERc,EAGHd,EAAsBf,YAAW,WACP,oBAAbJ,GAAyBA,MACnCkC,GAJqB,oBAAblC,GAAyBA,IAOtCoB,EAAkB,IAEpBsB,QAAS,SAAiBrT,EAAQwT,EAAaT,EAAQU,GACrD,GAAIA,EAAU,CACZjJ,EAAIxK,EAAQ,aAAc,IAC1BwK,EAAIxK,EAAQ,YAAa,IACzB,IAAIgN,EAAWjC,EAAO1I,KAAKc,IACvB8J,EAASD,GAAYA,EAASE,EAC9BC,EAASH,GAAYA,EAASI,EAC9BsG,GAAcF,EAAYhH,KAAOuG,EAAOvG,OAASS,GAAU,GAC3D0G,GAAcH,EAAYjH,IAAMwG,EAAOxG,MAAQY,GAAU,GAC7DnN,EAAO4T,aAAeF,EACtB1T,EAAO6T,aAAeF,EACtBnJ,EAAIxK,EAAQ,YAAa,eAAiB0T,EAAa,MAAQC,EAAa,SAC5EtR,KAAKyR,gBAAkBC,GAAQ/T,GAE/BwK,EAAIxK,EAAQ,aAAc,aAAeyT,EAAW,MAAQpR,KAAK0L,QAAQiG,OAAS,IAAM3R,KAAK0L,QAAQiG,OAAS,KAC9GxJ,EAAIxK,EAAQ,YAAa,sBACE,kBAApBA,EAAOiU,UAAyBhD,aAAajR,EAAOiU,UAC3DjU,EAAOiU,SAAWlD,YAAW,WAC3BvG,EAAIxK,EAAQ,aAAc,IAC1BwK,EAAIxK,EAAQ,YAAa,IACzBA,EAAOiU,UAAW,EAClBjU,EAAO4T,YAAa,EACpB5T,EAAO6T,YAAa,IACnBJ,MAMX,SAASM,GAAQ/T,GACf,OAAOA,EAAOkU,YAGhB,SAASd,GAAkBF,EAAed,EAAUW,EAAQhF,GAC1D,OAAOnM,KAAKuS,KAAKvS,KAAKwS,IAAIhC,EAAS7F,IAAM2G,EAAc3G,IAAK,GAAK3K,KAAKwS,IAAIhC,EAAS5F,KAAO0G,EAAc1G,KAAM,IAAM5K,KAAKuS,KAAKvS,KAAKwS,IAAIhC,EAAS7F,IAAMwG,EAAOxG,IAAK,GAAK3K,KAAKwS,IAAIhC,EAAS5F,KAAOuG,EAAOvG,KAAM,IAAMuB,EAAQkE,UAG7N,IAAIoC,GAAU,GACVC,GAAW,CACbC,qBAAqB,GAEnBC,GAAgB,CAClBC,MAAO,SAAeC,GAEpB,IAAK,IAAIC,KAAUL,GACbA,GAAS/M,eAAeoN,MAAaA,KAAUD,KACjDA,EAAOC,GAAUL,GAASK,IAI9BN,GAAQ7N,SAAQ,SAAUoO,GACxB,GAAIA,EAAEC,aAAeH,EAAOG,WAC1B,KAAM,iCAAiCC,OAAOJ,EAAOG,WAAY,sBAGrER,GAAQlO,KAAKuO,IAEfK,YAAa,SAAqBC,EAAWC,EAAUC,GACrD,IAAIpE,EAAQzO,KAEZA,KAAK8S,eAAgB,EAErBD,EAAIE,OAAS,WACXtE,EAAMqE,eAAgB,GAGxB,IAAIE,EAAkBL,EAAY,SAClCX,GAAQ7N,SAAQ,SAAUkO,GACnBO,EAASP,EAAOG,cAEjBI,EAASP,EAAOG,YAAYQ,IAC9BJ,EAASP,EAAOG,YAAYQ,GAAiBhP,EAAe,CAC1D4O,SAAUA,GACTC,IAKDD,EAASlH,QAAQ2G,EAAOG,aAAeI,EAASP,EAAOG,YAAYG,IACrEC,EAASP,EAAOG,YAAYG,GAAW3O,EAAe,CACpD4O,SAAUA,GACTC,SAITI,kBAAmB,SAA2BL,EAAU9R,EAAImR,EAAUvG,GAYpE,IAAK,IAAI4G,KAXTN,GAAQ7N,SAAQ,SAAUkO,GACxB,IAAIG,EAAaH,EAAOG,WACxB,GAAKI,EAASlH,QAAQ8G,IAAgBH,EAAOH,oBAA7C,CACA,IAAIgB,EAAc,IAAIb,EAAOO,EAAU9R,EAAI8R,EAASlH,SACpDwH,EAAYN,SAAWA,EACvBM,EAAYxH,QAAUkH,EAASlH,QAC/BkH,EAASJ,GAAcU,EAEvBlO,EAASiN,EAAUiB,EAAYjB,cAGdW,EAASlH,QAC1B,GAAKkH,EAASlH,QAAQxG,eAAeoN,GAArC,CACA,IAAIa,EAAWnT,KAAKoT,aAAaR,EAAUN,EAAQM,EAASlH,QAAQ4G,IAE5C,qBAAba,IACTP,EAASlH,QAAQ4G,GAAUa,KAIjCE,mBAAoB,SAA4B3R,EAAMkR,GACpD,IAAIU,EAAkB,GAMtB,OALAtB,GAAQ7N,SAAQ,SAAUkO,GACc,oBAA3BA,EAAOiB,iBAElBtO,EAASsO,EAAiBjB,EAAOiB,gBAAgB9S,KAAKoS,EAASP,EAAOG,YAAa9Q,OAE9E4R,GAETF,aAAc,SAAsBR,EAAUlR,EAAMoD,GAClD,IAAIyO,EASJ,OARAvB,GAAQ7N,SAAQ,SAAUkO,GAEnBO,EAASP,EAAOG,aAEjBH,EAAOmB,iBAA2D,oBAAjCnB,EAAOmB,gBAAgB9R,KAC1D6R,EAAgBlB,EAAOmB,gBAAgB9R,GAAMlB,KAAKoS,EAASP,EAAOG,YAAa1N,OAG5EyO,IAIX,SAASE,GAAcC,GACrB,IAAId,EAAWc,EAAKd,SAChBe,EAASD,EAAKC,OACdjS,EAAOgS,EAAKhS,KACZkS,EAAWF,EAAKE,SAChBC,EAAUH,EAAKG,QACfC,EAAOJ,EAAKI,KACZC,EAASL,EAAKK,OACdC,EAAWN,EAAKM,SAChBC,EAAWP,EAAKO,SAChBC,EAAoBR,EAAKQ,kBACzBC,EAAoBT,EAAKS,kBACzBC,EAAgBV,EAAKU,cACrBC,EAAcX,EAAKW,YACnBC,EAAuBZ,EAAKY,qBAEhC,GADA1B,EAAWA,GAAYe,GAAUA,EAAOtE,IACnCuD,EAAL,CACA,IAAIC,EACAnH,EAAUkH,EAASlH,QACnB6I,EAAS,KAAO7S,EAAK9C,OAAO,GAAG6N,cAAgB/K,EAAK8S,OAAO,IAE3D3O,OAAO4O,aAAgBzO,GAAeC,GAMxC4M,EAAMvL,SAASoN,YAAY,SAC3B7B,EAAI8B,UAAUjT,GAAM,GAAM,IAN1BmR,EAAM,IAAI4B,YAAY/S,EAAM,CAC1BkT,SAAS,EACTC,YAAY,IAOhBhC,EAAIiC,GAAKhB,GAAQH,EACjBd,EAAIkC,KAAOhB,GAAUJ,EACrBd,EAAImC,KAAOpB,GAAYD,EACvBd,EAAInG,MAAQmH,EACZhB,EAAImB,SAAWA,EACfnB,EAAIoB,SAAWA,EACfpB,EAAIqB,kBAAoBA,EACxBrB,EAAIsB,kBAAoBA,EACxBtB,EAAIuB,cAAgBA,EACpBvB,EAAIoC,SAAWZ,EAAcA,EAAYa,iBAAc9U,EAEvD,IAAI+U,EAAqBnR,EAAeA,EAAe,GAAIsQ,GAAuBnC,GAAckB,mBAAmB3R,EAAMkR,IAEzH,IAAK,IAAIN,KAAU6C,EACjBtC,EAAIP,GAAU6C,EAAmB7C,GAG/BqB,GACFA,EAAOF,cAAcZ,GAGnBnH,EAAQ6I,IACV7I,EAAQ6I,GAAQ/T,KAAKoS,EAAUC,IAInC,IAAIuC,GAAY,CAAC,OAEb1C,GAAc,SAAqBC,EAAWC,GAChD,IAAIc,EAAOxT,UAAUC,OAAS,QAAsBC,IAAjBF,UAAU,GAAmBA,UAAU,GAAK,GAC3EkU,EAAgBV,EAAKb,IACrBwC,EAAO9P,EAAyBmO,EAAM0B,IAE1CjD,GAAcO,YAAY4C,KAAKvJ,GAA/BoG,CAAyCQ,EAAWC,EAAU5O,EAAe,CAC3EuR,OAAQA,GACRC,SAAUA,GACVC,QAASA,GACT9B,OAAQA,GACR+B,OAAQA,GACRC,WAAYA,GACZ9B,QAASA,GACT+B,YAAaA,GACbC,YAAaC,GACbzB,YAAaA,GACb0B,eAAgBhK,GAASiK,OACzB5B,cAAeA,EACfJ,SAAUA,GACVE,kBAAmBA,GACnBD,SAAUA,GACVE,kBAAmBA,GACnB8B,mBAAoBC,GACpBC,qBAAsBC,GACtBC,eAAgB,WACdT,IAAc,GAEhBU,cAAe,WACbV,IAAc,GAEhBW,sBAAuB,SAA+B7U,GACpD8U,GAAe,CACb5D,SAAUA,EACVlR,KAAMA,EACN0S,cAAeA,MAGlBiB,KAGL,SAASmB,GAAeC,GACtBhD,GAAczP,EAAe,CAC3BqQ,YAAaA,GACbR,QAASA,GACTD,SAAU2B,GACV5B,OAAQA,GACRK,SAAUA,GACVE,kBAAmBA,GACnBD,SAAUA,GACVE,kBAAmBA,IAClBsC,IAGL,IAAIlB,GACAC,GACAC,GACA9B,GACA+B,GACAC,GACA9B,GACA+B,GACA5B,GACAC,GACAC,GACAC,GACAuC,GACArC,GAIAsC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAlB,GACAmB,GACAC,GAGAC,GAEJC,GAhBIC,IAAsB,EACtBC,IAAkB,EAClBC,GAAY,GAUZC,IAAwB,EACxBC,IAAyB,EAIzBC,GAAmC,GAEvCC,IAAU,EACNC,GAAoB,GAGpBC,GAAqC,qBAAbvQ,SACxBwQ,GAA0B1R,EAC1B2R,GAAmB9R,GAAQD,EAAa,WAAa,QAEzDgS,GAAmBH,KAAmBxR,IAAqBD,GAAO,cAAekB,SAAS2Q,cAAc,OACpGC,GAA0B,WAC5B,GAAKL,GAAL,CAEA,GAAI7R,EACF,OAAO,EAGT,IAAIlF,EAAKwG,SAAS2Q,cAAc,KAEhC,OADAnX,EAAGwH,MAAM6P,QAAU,sBACe,SAA3BrX,EAAGwH,MAAM8P,eATY,GAW1BC,GAAmB,SAA0BvX,EAAI4K,GACnD,IAAI4M,EAAQnQ,EAAIrH,GACZyX,EAAU7a,SAAS4a,EAAM/N,OAAS7M,SAAS4a,EAAME,aAAe9a,SAAS4a,EAAMG,cAAgB/a,SAAS4a,EAAMI,iBAAmBhb,SAAS4a,EAAMK,kBAChJC,EAASpN,EAAS1K,EAAI,EAAG4K,GACzBmN,EAASrN,EAAS1K,EAAI,EAAG4K,GACzBoN,EAAgBF,GAAUzQ,EAAIyQ,GAC9BG,EAAiBF,GAAU1Q,EAAI0Q,GAC/BG,EAAkBF,GAAiBpb,SAASob,EAAcG,YAAcvb,SAASob,EAAcI,aAAevP,EAAQiP,GAAQrO,MAC9H4O,EAAmBJ,GAAkBrb,SAASqb,EAAeE,YAAcvb,SAASqb,EAAeG,aAAevP,EAAQkP,GAAQtO,MAEtI,GAAsB,SAAlB+N,EAAMxM,QACR,MAA+B,WAAxBwM,EAAMc,eAAsD,mBAAxBd,EAAMc,cAAqC,WAAa,aAGrG,GAAsB,SAAlBd,EAAMxM,QACR,OAAOwM,EAAMe,oBAAoBC,MAAM,KAAKnZ,QAAU,EAAI,WAAa,aAGzE,GAAIyY,GAAUE,EAAc,UAAuC,SAA3BA,EAAc,SAAqB,CACzE,IAAIS,EAAgD,SAA3BT,EAAc,SAAsB,OAAS,QACtE,OAAOD,GAAoC,SAAzBE,EAAeS,OAAoBT,EAAeS,QAAUD,EAAmC,aAAb,WAGtG,OAAOX,IAAqC,UAA1BE,EAAchN,SAAiD,SAA1BgN,EAAchN,SAAgD,UAA1BgN,EAAchN,SAAiD,SAA1BgN,EAAchN,SAAsBkN,GAAmBT,GAAuC,SAA5BD,EAAMP,KAAgCc,GAAsC,SAA5BP,EAAMP,KAAgCiB,EAAkBG,EAAmBZ,GAAW,WAAa,cAEnVkB,GAAqB,SAA4BC,EAAUC,EAAYC,GACzE,IAAIC,EAAcD,EAAWF,EAASvP,KAAOuP,EAASxP,IAClD4P,EAAcF,EAAWF,EAASrP,MAAQqP,EAAStP,OACnD2P,EAAkBH,EAAWF,EAASnP,MAAQmP,EAASpP,OACvD0P,EAAcJ,EAAWD,EAAWxP,KAAOwP,EAAWzP,IACtD+P,EAAcL,EAAWD,EAAWtP,MAAQsP,EAAWvP,OACvD8P,EAAkBN,EAAWD,EAAWpP,MAAQoP,EAAWrP,OAC/D,OAAOuP,IAAgBG,GAAeF,IAAgBG,GAAeJ,EAAcE,EAAkB,IAAMC,EAAcE,EAAkB,GAS7IC,GAA8B,SAAqCrL,EAAGC,GACpE,IAAIqL,EAYJ,OAXA7C,GAAU8C,MAAK,SAAUzH,GACvB,IAAI0H,EAAY1H,EAASvD,IAAS3D,QAAQ6O,qBAC1C,GAAKD,IAAanO,EAAUyG,GAA5B,CACA,IAAI9C,EAAOnG,EAAQiJ,GACf4H,EAAqB1L,GAAKgB,EAAK3F,KAAOmQ,GAAaxL,GAAKgB,EAAKzF,MAAQiQ,EACrEG,EAAmB1L,GAAKe,EAAK5F,IAAMoQ,GAAavL,GAAKe,EAAK1F,OAASkQ,EAEvE,OAAIE,GAAsBC,EACjBL,EAAMxH,OADf,MAIKwH,GAELM,GAAgB,SAAuBhP,GACzC,SAASiP,EAAK7V,EAAO8V,GACnB,OAAO,SAAU9F,EAAIC,EAAMQ,EAAQ1C,GACjC,IAAIgI,EAAY/F,EAAGpJ,QAAQoP,MAAMpZ,MAAQqT,EAAKrJ,QAAQoP,MAAMpZ,MAAQoT,EAAGpJ,QAAQoP,MAAMpZ,OAASqT,EAAKrJ,QAAQoP,MAAMpZ,KAEjH,GAAa,MAAToD,IAAkB8V,GAAQC,GAG5B,OAAO,EACF,GAAa,MAAT/V,IAA2B,IAAVA,EAC1B,OAAO,EACF,GAAI8V,GAAkB,UAAV9V,EACjB,OAAOA,EACF,GAAqB,oBAAVA,EAChB,OAAO6V,EAAK7V,EAAMgQ,EAAIC,EAAMQ,EAAQ1C,GAAM+H,EAAnCD,CAAyC7F,EAAIC,EAAMQ,EAAQ1C,GAElE,IAAIkI,GAAcH,EAAO9F,EAAKC,GAAMrJ,QAAQoP,MAAMpZ,KAClD,OAAiB,IAAVoD,GAAmC,kBAAVA,GAAsBA,IAAUiW,GAAcjW,EAAMkW,MAAQlW,EAAMQ,QAAQyV,IAAe,GAK/H,IAAID,EAAQ,GACRG,EAAgBvP,EAAQoP,MAEvBG,GAA2C,UAA1BxW,EAAQwW,KAC5BA,EAAgB,CACdvZ,KAAMuZ,IAIVH,EAAMpZ,KAAOuZ,EAAcvZ,KAC3BoZ,EAAMI,UAAYP,EAAKM,EAAcL,MAAM,GAC3CE,EAAMK,SAAWR,EAAKM,EAAcG,KACpCN,EAAMO,YAAcJ,EAAcI,YAClC3P,EAAQoP,MAAQA,GAEd5E,GAAsB,YACnBgC,IAA2BzC,IAC9BtN,EAAIsN,GAAS,UAAW,SAGxBW,GAAwB,YACrB8B,IAA2BzC,IAC9BtN,EAAIsN,GAAS,UAAW,KAKxBoC,IACFvQ,SAASV,iBAAiB,SAAS,SAAUiM,GAC3C,GAAIyE,GAKF,OAJAzE,EAAIyI,iBACJzI,EAAI0I,iBAAmB1I,EAAI0I,kBAC3B1I,EAAI2I,0BAA4B3I,EAAI2I,2BACpClE,IAAkB,GACX,KAER,GAGL,IAAImE,GAAgC,SAAuC5I,GACzE,GAAI0C,GAAQ,CACV1C,EAAMA,EAAI6I,QAAU7I,EAAI6I,QAAQ,GAAK7I,EAErC,IAAI8I,EAAUxB,GAA4BtH,EAAI+I,QAAS/I,EAAIgJ,SAE3D,GAAIF,EAAS,CAEX,IAAIjV,EAAQ,GAEZ,IAAK,IAAIzC,KAAK4O,EACRA,EAAI3N,eAAejB,KACrByC,EAAMzC,GAAK4O,EAAI5O,IAInByC,EAAM/I,OAAS+I,EAAMiN,OAASgI,EAC9BjV,EAAM4U,oBAAiB,EACvB5U,EAAM6U,qBAAkB,EAExBI,EAAQtM,IAASyM,YAAYpV,MAK/BqV,GAAwB,SAA+BlJ,GACrD0C,IACFA,GAAO/N,WAAW6H,IAAS2M,iBAAiBnJ,EAAIlV,SAUpD,SAASoO,GAASjL,EAAI4K,GACpB,IAAM5K,IAAMA,EAAGyG,UAA4B,IAAhBzG,EAAGyG,SAC5B,KAAM,8CAA8CkL,OAAO,GAAGwJ,SAASzb,KAAKM,IAG9Ed,KAAKc,GAAKA,EAEVd,KAAK0L,QAAUA,EAAU1G,EAAS,GAAI0G,GAEtC5K,EAAGuO,IAAWrP,KACd,IAAIiS,EAAW,CACb6I,MAAO,KACPoB,MAAM,EACNC,UAAU,EACVC,MAAO,KACPC,OAAQ,KACRnQ,UAAW,WAAWoQ,KAAKxb,EAAG0L,UAAY,MAAQ,KAClD+P,cAAe,EAEfC,YAAY,EAEZC,sBAAuB,KAEvBC,mBAAmB,EACnBC,UAAW,WACT,OAAOtE,GAAiBvX,EAAId,KAAK0L,UAEnCkR,WAAY,iBACZC,YAAa,kBACbC,UAAW,gBACXC,OAAQ,SACRpZ,OAAQ,KACRqZ,iBAAiB,EACjBpN,UAAW,EACX+B,OAAQ,KACRsL,QAAS,SAAiBC,EAAc3H,GACtC2H,EAAaD,QAAQ,OAAQ1H,EAAO4H,cAEtCC,YAAY,EACZC,gBAAgB,EAChBC,WAAY,UACZC,MAAO,EACPC,kBAAkB,EAClBC,qBAAsB3f,OAAOJ,SAAWI,OAAS+H,QAAQnI,SAASmI,OAAO6X,iBAAkB,KAAO,EAClGC,eAAe,EACfC,cAAe,oBACfC,gBAAgB,EAChBC,kBAAmB,EACnBC,eAAgB,CACdjP,EAAG,EACHC,EAAG,GAELiP,gBAA4C,IAA5BjS,GAASiS,gBAA4B,iBAAkBnY,SAAWM,EAClFoU,qBAAsB,GAIxB,IAAK,IAAI7Y,KAFTyQ,GAAcc,kBAAkBjT,KAAMc,EAAImR,GAEzBA,IACbvQ,KAAQgK,KAAaA,EAAQhK,GAAQuQ,EAASvQ,IAMlD,IAAK,IAAIiF,KAHT+T,GAAchP,GAGC1L,KACQ,MAAjB2G,EAAG/H,OAAO,IAAkC,oBAAboB,KAAK2G,KACtC3G,KAAK2G,GAAM3G,KAAK2G,GAAI2O,KAAKtV,OAK7BA,KAAKie,iBAAkBvS,EAAQiS,eAAwB3F,GAEnDhY,KAAKie,kBAEPje,KAAK0L,QAAQ+R,oBAAsB,GAIjC/R,EAAQsS,eACVvX,EAAG3F,EAAI,cAAed,KAAKke,cAE3BzX,EAAG3F,EAAI,YAAad,KAAKke,aACzBzX,EAAG3F,EAAI,aAAcd,KAAKke,cAGxBle,KAAKie,kBACPxX,EAAG3F,EAAI,WAAYd,MACnByG,EAAG3F,EAAI,YAAad,OAGtBuX,GAAUzT,KAAK9D,KAAKc,IAEpB4K,EAAQ0Q,OAAS1Q,EAAQ0Q,MAAM+B,KAAOne,KAAKkc,KAAKxQ,EAAQ0Q,MAAM+B,IAAIne,OAAS,IAE3EgF,EAAShF,KAAMwP,MAgrCjB,SAAS4O,GAETvL,GACMA,EAAIqK,eACNrK,EAAIqK,aAAamB,WAAa,QAGhCxL,EAAIgC,YAAchC,EAAIyI,iBAGxB,SAASgD,GAAQvK,EAAQD,EAAMyB,EAAQmE,EAAU9F,EAAU+F,EAAYvF,EAAemK,GACpF,IAAI1L,EAGA2L,EAFA5L,EAAWmB,EAAO1E,IAClBoP,EAAW7L,EAASlH,QAAQgT,OA2BhC,OAxBI7Y,OAAO4O,aAAgBzO,GAAeC,GAMxC4M,EAAMvL,SAASoN,YAAY,SAC3B7B,EAAI8B,UAAU,QAAQ,GAAM,IAN5B9B,EAAM,IAAI4B,YAAY,OAAQ,CAC5BG,SAAS,EACTC,YAAY,IAOhBhC,EAAIiC,GAAKhB,EACTjB,EAAIkC,KAAOhB,EACXlB,EAAI5G,QAAUsJ,EACd1C,EAAI8L,YAAcjF,EAClB7G,EAAI+L,QAAUhL,GAAYE,EAC1BjB,EAAIgM,YAAclF,GAAchQ,EAAQmK,GACxCjB,EAAI0L,gBAAkBA,EACtB1L,EAAIuB,cAAgBA,EACpBL,EAAON,cAAcZ,GAEjB4L,IACFD,EAASC,EAASje,KAAKoS,EAAUC,EAAKuB,IAGjCoK,EAGT,SAASM,GAAkBhe,GACzBA,EAAGoL,WAAY,EAGjB,SAAS6S,KACPpH,IAAU,EAGZ,SAASqH,GAAcnM,EAAK+G,EAAUhH,GACpC,IAAI9C,EAAOnG,EAAQ6B,EAASoH,EAAS9R,GAAI,EAAG8R,EAASlH,SAAS,IAC1DuT,EAAS,GACb,OAAOrF,EAAW/G,EAAI+I,QAAU9L,EAAK3F,KAAO8U,GAAUpM,EAAIgJ,QAAU/L,EAAK5F,KAAO2I,EAAI+I,QAAU9L,EAAKzF,MAAQwI,EAAIgJ,QAAU/L,EAAK5F,IAAM+U,GAAUpM,EAAIgJ,QAAU/L,EAAK1F,QAAUyI,EAAI+I,QAAU9L,EAAK3F,KAGhM,SAAS+U,GAAarM,EAAK+G,EAAUhH,GACnC,IAAI9C,EAAOnG,EAAQwC,EAAUyG,EAAS9R,GAAI8R,EAASlH,QAAQQ,YACvD+S,EAAS,GACb,OAAOrF,EAAW/G,EAAI+I,QAAU9L,EAAKzF,MAAQ4U,GAAUpM,EAAI+I,SAAW9L,EAAKzF,OAASwI,EAAIgJ,QAAU/L,EAAK1F,QAAUyI,EAAI+I,SAAW9L,EAAK3F,KAAO0I,EAAI+I,QAAU9L,EAAKzF,OAASwI,EAAIgJ,QAAU/L,EAAK5F,KAAO2I,EAAI+I,SAAW9L,EAAKzF,OAASwI,EAAIgJ,QAAU/L,EAAK1F,OAAS6U,EAG7P,SAASE,GAAkBtM,EAAKlV,EAAQgc,EAAYC,EAAU2C,EAAeE,EAAuBD,EAAY4C,GAC9G,IAAIC,EAAczF,EAAW/G,EAAIgJ,QAAUhJ,EAAI+I,QAC3C0D,EAAe1F,EAAWD,EAAWrP,OAASqP,EAAWpP,MACzDgV,EAAW3F,EAAWD,EAAWzP,IAAMyP,EAAWxP,KAClDqV,EAAW5F,EAAWD,EAAWvP,OAASuP,EAAWtP,MACrDoV,GAAS,EAEb,IAAKjD,EAEH,GAAI4C,GAAgBjI,GAAqBmI,EAAe/C,GAQtD,IALK/E,KAA4C,IAAlBN,GAAsBmI,EAAcE,EAAWD,EAAe7C,EAAwB,EAAI4C,EAAcG,EAAWF,EAAe7C,EAAwB,KAEvLjF,IAAwB,GAGrBA,GAOHiI,GAAS,OALT,GAAsB,IAAlBvI,GAAsBmI,EAAcE,EAAWpI,GACjDkI,EAAcG,EAAWrI,GACzB,OAAQD,QAOZ,GAAImI,EAAcE,EAAWD,GAAgB,EAAI/C,GAAiB,GAAK8C,EAAcG,EAAWF,GAAgB,EAAI/C,GAAiB,EACnI,OAAOmD,GAAoB/hB,GAOjC,OAFA8hB,EAASA,GAAUjD,EAEfiD,IAEEJ,EAAcE,EAAWD,EAAe7C,EAAwB,GAAK4C,EAAcG,EAAWF,EAAe7C,EAAwB,GAChI4C,EAAcE,EAAWD,EAAe,EAAI,GAAK,EAIrD,EAUT,SAASI,GAAoB/hB,GAC3B,OAAI4O,EAAMgJ,IAAUhJ,EAAM5O,GACjB,GAEC,EAWZ,SAASgiB,GAAY7e,GACnB,IAAI8e,EAAM9e,EAAGsI,QAAUtI,EAAGmH,UAAYnH,EAAGkN,IAAMlN,EAAG+e,KAAO/e,EAAGqc,YACxDlZ,EAAI2b,EAAIzf,OACR2f,EAAM,EAEV,MAAO7b,IACL6b,GAAOF,EAAIG,WAAW9b,GAGxB,OAAO6b,EAAI7D,SAAS,IAGtB,SAAS+D,GAAuBC,GAC9BrI,GAAkBzX,OAAS,EAC3B,IAAI+f,EAASD,EAAK3W,qBAAqB,SACnC6W,EAAMD,EAAO/f,OAEjB,MAAOggB,IAAO,CACZ,IAAIrf,EAAKof,EAAOC,GAChBrf,EAAGsf,SAAWxI,GAAkB9T,KAAKhD,IAIzC,SAASuf,GAAU1Z,GACjB,OAAO+H,WAAW/H,EAAI,GAGxB,SAAS2Z,GAAgB3f,GACvB,OAAOiO,aAAajO,GA50CtBoL,GAASpM,UAET,CACEkF,YAAakH,GACbiQ,iBAAkB,SAA0Bre,GACrCqC,KAAKc,GAAGyf,SAAS5iB,IAAWA,IAAWqC,KAAKc,KAC/CmW,GAAa,OAGjBuJ,cAAe,SAAuB3N,EAAKlV,GACzC,MAAyC,oBAA3BqC,KAAK0L,QAAQiR,UAA2B3c,KAAK0L,QAAQiR,UAAUnc,KAAKR,KAAM6S,EAAKlV,EAAQ4X,IAAUvV,KAAK0L,QAAQiR,WAE9HuB,YAAa,SAEbrL,GACE,GAAKA,EAAIgC,WAAT,CAEA,IAAIpG,EAAQzO,KACRc,EAAKd,KAAKc,GACV4K,EAAU1L,KAAK0L,QACfsR,EAAkBtR,EAAQsR,gBAC1ByD,EAAO5N,EAAI4N,KACXC,EAAQ7N,EAAI6I,SAAW7I,EAAI6I,QAAQ,IAAM7I,EAAI8N,aAAmC,UAApB9N,EAAI8N,aAA2B9N,EAC3FlV,GAAU+iB,GAAS7N,GAAKlV,OACxBijB,EAAiB/N,EAAIlV,OAAOkjB,aAAehO,EAAIiO,MAAQjO,EAAIiO,KAAK,IAAMjO,EAAIkO,cAAgBlO,EAAIkO,eAAe,KAAOpjB,EACpHgG,EAAS+H,EAAQ/H,OAKrB,GAHAqc,GAAuBlf,IAGnByU,MAIA,wBAAwB+G,KAAKmE,IAAwB,IAAf5N,EAAImO,QAAgBtV,EAAQyQ,YAKlEyE,EAAeK,oBAKdjhB,KAAKie,kBAAmB9X,IAAUxI,GAA2C,WAAjCA,EAAOyL,QAAQqD,iBAIhE9O,EAAS8J,EAAQ9J,EAAQ+N,EAAQQ,UAAWpL,GAAI,KAE5CnD,IAAUA,EAAOiU,WAIjB+D,KAAehY,GAAnB,CASA,GAHAqW,GAAWzH,EAAM5O,GACjBuW,GAAoB3H,EAAM5O,EAAQ+N,EAAQQ,WAEpB,oBAAXvI,GACT,GAAIA,EAAOnD,KAAKR,KAAM6S,EAAKlV,EAAQqC,MAcjC,OAbAwW,GAAe,CACb5D,SAAUnE,EACVkF,OAAQiN,EACRlf,KAAM,SACNkS,SAAUjW,EACVmW,KAAMhT,EACNiT,OAAQjT,IAGV4R,GAAY,SAAUjE,EAAO,CAC3BoE,IAAKA,SAEPmK,GAAmBnK,EAAIgC,YAAchC,EAAIyI,uBAGtC,GAAI3X,IACTA,EAASA,EAAO2V,MAAM,KAAKe,MAAK,SAAU6G,GAGxC,GAFAA,EAAWzZ,EAAQmZ,EAAgBM,EAASljB,OAAQ8C,GAAI,GAEpDogB,EAaF,OAZA1K,GAAe,CACb5D,SAAUnE,EACVkF,OAAQuN,EACRxf,KAAM,SACNkS,SAAUjW,EACVoW,OAAQjT,EACRgT,KAAMhT,IAGR4R,GAAY,SAAUjE,EAAO,CAC3BoE,IAAKA,KAEA,KAIPlP,GAEF,YADAqZ,GAAmBnK,EAAIgC,YAAchC,EAAIyI,kBAKzC5P,EAAQ2Q,SAAW5U,EAAQmZ,EAAgBlV,EAAQ2Q,OAAQvb,GAAI,IAKnEd,KAAKmhB,kBAAkBtO,EAAK6N,EAAO/iB,MAErCwjB,kBAAmB,SAEnBtO,EAEA6N,EAEA/iB,GACE,IAIIyjB,EAJA3S,EAAQzO,KACRc,EAAK2N,EAAM3N,GACX4K,EAAU+C,EAAM/C,QAChB2V,EAAgBvgB,EAAGugB,cAGvB,GAAI1jB,IAAW4X,IAAU5X,EAAO6J,aAAe1G,EAAI,CACjD,IAAI4Y,EAAW/P,EAAQhM,GAwEvB,GAvEAgW,GAAS7S,EACTyU,GAAS5X,EACT6X,GAAWD,GAAO/N,WAClBkO,GAASH,GAAO+L,YAChB3L,GAAahY,EACb+Y,GAAchL,EAAQoP,MACtB/O,GAASE,QAAUsJ,GACnBoB,GAAS,CACPhZ,OAAQ4X,GACRqG,SAAU8E,GAAS7N,GAAK+I,QACxBC,SAAU6E,GAAS7N,GAAKgJ,SAE1B9E,GAAkBJ,GAAOiF,QAAUlC,EAASvP,KAC5C6M,GAAiBL,GAAOkF,QAAUnC,EAASxP,IAC3ClK,KAAKuhB,QAAUb,GAAS7N,GAAK+I,QAC7B5b,KAAKwhB,QAAUd,GAAS7N,GAAKgJ,QAC7BtG,GAAOjN,MAAM,eAAiB,MAE9B8Y,EAAc,WACZ1O,GAAY,aAAcjE,EAAO,CAC/BoE,IAAKA,IAGH9G,GAAS+G,cACXrE,EAAMgT,WAORhT,EAAMiT,6BAEDxb,GAAWuI,EAAMwP,kBACpB1I,GAAOrJ,WAAY,GAIrBuC,EAAMkT,kBAAkB9O,EAAK6N,GAG7BlK,GAAe,CACb5D,SAAUnE,EACV/M,KAAM,SACN0S,cAAevB,IAIjB/K,EAAYyN,GAAQ7J,EAAQmR,aAAa,KAI3CnR,EAAQqR,OAAOzD,MAAM,KAAKnV,SAAQ,SAAU+c,GAC1C/X,EAAKoM,GAAQ2L,EAASljB,OAAQ8gB,OAEhCrY,EAAG4a,EAAe,WAAY5F,IAC9BhV,EAAG4a,EAAe,YAAa5F,IAC/BhV,EAAG4a,EAAe,YAAa5F,IAC/BhV,EAAG4a,EAAe,UAAW5S,EAAMgT,SACnChb,EAAG4a,EAAe,WAAY5S,EAAMgT,SACpChb,EAAG4a,EAAe,cAAe5S,EAAMgT,SAEnCvb,GAAWlG,KAAKie,kBAClBje,KAAK0L,QAAQ+R,oBAAsB,EACnClI,GAAOrJ,WAAY,GAGrBwG,GAAY,aAAc1S,KAAM,CAC9B6S,IAAKA,KAGHnH,EAAQ6R,OAAW7R,EAAQ8R,mBAAoBkD,GAAY1gB,KAAKie,kBAAqBhY,GAAQD,GAkB/Fob,QAlB6G,CAC7G,GAAIrV,GAAS+G,cAGX,YAFA9S,KAAKyhB,UAQPhb,EAAG4a,EAAe,UAAW5S,EAAMmT,qBACnCnb,EAAG4a,EAAe,WAAY5S,EAAMmT,qBACpCnb,EAAG4a,EAAe,cAAe5S,EAAMmT,qBACvCnb,EAAG4a,EAAe,YAAa5S,EAAMoT,8BACrCpb,EAAG4a,EAAe,YAAa5S,EAAMoT,8BACrCnW,EAAQsS,gBAAkBvX,EAAG4a,EAAe,cAAe5S,EAAMoT,8BACjEpT,EAAMqT,gBAAkBpT,WAAW0S,EAAa1V,EAAQ6R,UAM9DsE,6BAA8B,SAE9B3R,GACE,IAAIwQ,EAAQxQ,EAAEwL,QAAUxL,EAAEwL,QAAQ,GAAKxL,EAEnC3Q,KAAK0R,IAAI1R,KAAKwiB,IAAIrB,EAAM9E,QAAU5b,KAAKuhB,QAAShiB,KAAKwiB,IAAIrB,EAAM7E,QAAU7b,KAAKwhB,UAAYjiB,KAAKyiB,MAAMhiB,KAAK0L,QAAQ+R,qBAAuBzd,KAAKie,iBAAmBpY,OAAO6X,kBAAoB,KAC9L1d,KAAK4hB,uBAGTA,oBAAqB,WACnBrM,IAAUuJ,GAAkBvJ,IAC5B3G,aAAa5O,KAAK8hB,iBAElB9hB,KAAK0hB,6BAEPA,0BAA2B,WACzB,IAAIL,EAAgBrhB,KAAKc,GAAGugB,cAC5Bxa,EAAIwa,EAAe,UAAWrhB,KAAK4hB,qBACnC/a,EAAIwa,EAAe,WAAYrhB,KAAK4hB,qBACpC/a,EAAIwa,EAAe,cAAerhB,KAAK4hB,qBACvC/a,EAAIwa,EAAe,YAAarhB,KAAK6hB,8BACrChb,EAAIwa,EAAe,YAAarhB,KAAK6hB,8BACrChb,EAAIwa,EAAe,cAAerhB,KAAK6hB,+BAEzCF,kBAAmB,SAEnB9O,EAEA6N,GACEA,EAAQA,GAA4B,SAAnB7N,EAAI8N,aAA0B9N,GAE1C7S,KAAKie,iBAAmByC,EACvB1gB,KAAK0L,QAAQsS,eACfvX,EAAGa,SAAU,cAAetH,KAAKiiB,cAEjCxb,EAAGa,SADMoZ,EACI,YAEA,YAFa1gB,KAAKiiB,eAKjCxb,EAAG8O,GAAQ,UAAWvV,MACtByG,EAAGkN,GAAQ,YAAa3T,KAAKkiB,eAG/B,IACM5a,SAAS6a,UAEX9B,IAAU,WACR/Y,SAAS6a,UAAUC,WAGrBvc,OAAOwc,eAAeC,kBAExB,MAAOC,MAEXC,aAAc,SAAsBC,EAAU5P,GAI5C,GAFAwE,IAAsB,EAElB1D,IAAU4B,GAAQ,CACpB7C,GAAY,cAAe1S,KAAM,CAC/B6S,IAAKA,IAGH7S,KAAKie,iBACPxX,EAAGa,SAAU,WAAYyU,IAG3B,IAAIrQ,EAAU1L,KAAK0L,SAElB+W,GAAY3a,EAAYyN,GAAQ7J,EAAQoR,WAAW,GACpDhV,EAAYyN,GAAQ7J,EAAQkR,YAAY,GACxC7Q,GAASiK,OAAShW,KAClByiB,GAAYziB,KAAK0iB,eAEjBlM,GAAe,CACb5D,SAAU5S,KACV0B,KAAM,QACN0S,cAAevB,SAGjB7S,KAAK2iB,YAGTC,iBAAkB,WAChB,GAAIhM,GAAU,CACZ5W,KAAKuhB,OAAS3K,GAASgF,QACvB5b,KAAKwhB,OAAS5K,GAASiF,QAEvB3F,KAEA,IAAIvY,EAAS2J,SAASub,iBAAiBjM,GAASgF,QAAShF,GAASiF,SAC9D1Q,EAASxN,EAEb,MAAOA,GAAUA,EAAOkjB,WAAY,CAElC,GADAljB,EAASA,EAAOkjB,WAAWgC,iBAAiBjM,GAASgF,QAAShF,GAASiF,SACnEle,IAAWwN,EAAQ,MACvBA,EAASxN,EAKX,GAFA4X,GAAO/N,WAAW6H,IAAS2M,iBAAiBre,GAExCwN,EACF,EAAG,CACD,GAAIA,EAAOkE,IAAU,CACnB,IAAIyT,OAAW,EAQf,GAPAA,EAAW3X,EAAOkE,IAASyM,YAAY,CACrCF,QAAShF,GAASgF,QAClBC,QAASjF,GAASiF,QAClBle,OAAQA,EACRgW,OAAQxI,IAGN2X,IAAa9iB,KAAK0L,QAAQ2R,eAC5B,MAIJ1f,EAASwN,QAGJA,EAASA,EAAO3D,YAGzB4O,OAGJ6L,aAAc,SAEdpP,GACE,GAAI8D,GAAQ,CACV,IAAIjL,EAAU1L,KAAK0L,QACfoS,EAAoBpS,EAAQoS,kBAC5BC,EAAiBrS,EAAQqS,eACzB2C,EAAQ7N,EAAI6I,QAAU7I,EAAI6I,QAAQ,GAAK7I,EACvCkQ,EAActN,IAAW/M,EAAO+M,IAAS,GACzC7K,EAAS6K,IAAWsN,GAAeA,EAAYlY,EAC/CC,EAAS2K,IAAWsN,GAAeA,EAAYhY,EAC/CiY,EAAuBlL,IAA2BV,IAAuBzK,GAAwByK,IACjG6L,GAAMvC,EAAM9E,QAAUjF,GAAOiF,QAAUmC,EAAejP,IAAMlE,GAAU,IAAMoY,EAAuBA,EAAqB,GAAKtL,GAAiC,GAAK,IAAM9M,GAAU,GACnLsY,GAAMxC,EAAM7E,QAAUlF,GAAOkF,QAAUkC,EAAehP,IAAMjE,GAAU,IAAMkY,EAAuBA,EAAqB,GAAKtL,GAAiC,GAAK,IAAM5M,GAAU,GAEvL,IAAKiB,GAASiK,SAAWqB,GAAqB,CAC5C,GAAIyG,GAAqBve,KAAK0R,IAAI1R,KAAKwiB,IAAIrB,EAAM9E,QAAU5b,KAAKuhB,QAAShiB,KAAKwiB,IAAIrB,EAAM7E,QAAU7b,KAAKwhB,SAAW1D,EAChH,OAGF9d,KAAKkiB,aAAarP,GAAK,GAGzB,GAAI4C,GAAS,CACPsN,GACFA,EAAY7S,GAAK+S,GAAMpM,IAAU,GACjCkM,EAAYjkB,GAAKokB,GAAMpM,IAAU,IAEjCiM,EAAc,CACZlY,EAAG,EACHsY,EAAG,EACHC,EAAG,EACHrY,EAAG,EACHmF,EAAG+S,EACHnkB,EAAGokB,GAIP,IAAIG,EAAY,UAAU5Q,OAAOsQ,EAAYlY,EAAG,KAAK4H,OAAOsQ,EAAYI,EAAG,KAAK1Q,OAAOsQ,EAAYK,EAAG,KAAK3Q,OAAOsQ,EAAYhY,EAAG,KAAK0H,OAAOsQ,EAAY7S,EAAG,KAAKuC,OAAOsQ,EAAYjkB,EAAG,KACvLqJ,EAAIsN,GAAS,kBAAmB4N,GAChClb,EAAIsN,GAAS,eAAgB4N,GAC7Blb,EAAIsN,GAAS,cAAe4N,GAC5Blb,EAAIsN,GAAS,YAAa4N,GAC1BxM,GAASoM,EACTnM,GAASoM,EACTtM,GAAW8J,EAGb7N,EAAIgC,YAAchC,EAAIyI,mBAG1BoH,aAAc,WAGZ,IAAKjN,GAAS,CACZ,IAAI1L,EAAY/J,KAAK0L,QAAQmS,eAAiBvW,SAASuG,KAAO8F,GAC1D7D,EAAOnG,EAAQ4L,IAAQ,EAAMuC,IAAyB,EAAM/N,GAC5D2B,EAAU1L,KAAK0L,QAEnB,GAAIoM,GAAyB,CAE3BV,GAAsBrN,EAEtB,MAAgD,WAAzC5B,EAAIiP,GAAqB,aAAsE,SAA1CjP,EAAIiP,GAAqB,cAA2BA,KAAwB9P,SACtI8P,GAAsBA,GAAoB5P,WAGxC4P,KAAwB9P,SAASuG,MAAQuJ,KAAwB9P,SAASoC,iBACxE0N,KAAwB9P,WAAU8P,GAAsB5N,KAC5DsG,EAAK5F,KAAOkN,GAAoBpK,UAChC8C,EAAK3F,MAAQiN,GAAoBrK,YAEjCqK,GAAsB5N,IAGxBkO,GAAmC/K,GAAwByK,IAG7D3B,GAAUF,GAAOnG,WAAU,GAC3BtH,EAAY2N,GAAS/J,EAAQkR,YAAY,GACzC9U,EAAY2N,GAAS/J,EAAQkS,eAAe,GAC5C9V,EAAY2N,GAAS/J,EAAQoR,WAAW,GACxC3U,EAAIsN,GAAS,aAAc,IAC3BtN,EAAIsN,GAAS,YAAa,IAC1BtN,EAAIsN,GAAS,aAAc,cAC3BtN,EAAIsN,GAAS,SAAU,GACvBtN,EAAIsN,GAAS,MAAO3F,EAAK5F,KACzB/B,EAAIsN,GAAS,OAAQ3F,EAAK3F,MAC1BhC,EAAIsN,GAAS,QAAS3F,EAAKvF,OAC3BpC,EAAIsN,GAAS,SAAU3F,EAAKxF,QAC5BnC,EAAIsN,GAAS,UAAW,OACxBtN,EAAIsN,GAAS,WAAYqC,GAA0B,WAAa,SAChE3P,EAAIsN,GAAS,SAAU,UACvBtN,EAAIsN,GAAS,gBAAiB,QAC9B1J,GAASC,MAAQyJ,GACjB1L,EAAUuZ,YAAY7N,IAEtBtN,EAAIsN,GAAS,mBAAoBsB,GAAkBrZ,SAAS+X,GAAQnN,MAAMiC,OAAS,IAAM,KAAOyM,GAAiBtZ,SAAS+X,GAAQnN,MAAMgC,QAAU,IAAM,OAG5J4X,aAAc,SAEdrP,EAEA4P,GACE,IAAIhU,EAAQzO,KAERkd,EAAerK,EAAIqK,aACnBxR,EAAU+C,EAAM/C,QACpBgH,GAAY,YAAa1S,KAAM,CAC7B6S,IAAKA,IAGH9G,GAAS+G,cACX9S,KAAKyhB,WAKP/O,GAAY,aAAc1S,MAErB+L,GAAS+G,gBACZe,GAAUnH,GAAM6I,IAChB1B,GAAQ3H,WAAY,EACpB2H,GAAQvL,MAAM,eAAiB,GAE/BtI,KAAKujB,aAELzb,EAAY+L,GAAS7T,KAAK0L,QAAQmR,aAAa,GAC/C9Q,GAASW,MAAQmH,IAInBpF,EAAM+U,QAAUnD,IAAU,WACxB3N,GAAY,QAASjE,GACjB1C,GAAS+G,gBAERrE,EAAM/C,QAAQgR,mBACjB/I,GAAO8P,aAAa5P,GAAS0B,IAG/B9G,EAAM8U,aAEN/M,GAAe,CACb5D,SAAUnE,EACV/M,KAAM,eAGT+gB,GAAY3a,EAAYyN,GAAQ7J,EAAQoR,WAAW,GAEhD2F,GACFnL,IAAkB,EAClB7I,EAAMiV,QAAUC,YAAYlV,EAAMmU,iBAAkB,MAGpD/b,EAAIS,SAAU,UAAWmH,EAAMgT,SAC/B5a,EAAIS,SAAU,WAAYmH,EAAMgT,SAChC5a,EAAIS,SAAU,cAAemH,EAAMgT,SAE/BvE,IACFA,EAAa0G,cAAgB,OAC7BlY,EAAQuR,SAAWvR,EAAQuR,QAAQzc,KAAKiO,EAAOyO,EAAc3H,KAG/D9O,EAAGa,SAAU,OAAQmH,GAErBtG,EAAIoN,GAAQ,YAAa,kBAG3B8B,IAAsB,EACtB5I,EAAMoV,aAAexD,GAAU5R,EAAM+T,aAAalN,KAAK7G,EAAOgU,EAAU5P,IACxEpM,EAAGa,SAAU,cAAemH,GAC5BqH,IAAQ,EAEJ3P,GACFgC,EAAIb,SAASuG,KAAM,cAAe,UAItCiO,YAAa,SAEbjJ,GACE,IAEI6G,EACAC,EACAmK,EAOAlK,EAXA9Y,EAAKd,KAAKc,GACVnD,EAASkV,EAAIlV,OAIb+N,EAAU1L,KAAK0L,QACfoP,EAAQpP,EAAQoP,MAChB/E,EAAiBhK,GAASiK,OAC1B+N,EAAUrN,KAAgBoE,EAC1BkJ,EAAUtY,EAAQwQ,KAClB+H,EAAe5P,IAAe0B,EAE9BtH,EAAQzO,KACRkkB,GAAiB,EAErB,IAAIvM,GAAJ,CAgHA,QAN2B,IAAvB9E,EAAIyI,gBACNzI,EAAIgC,YAAchC,EAAIyI,iBAGxB3d,EAAS8J,EAAQ9J,EAAQ+N,EAAQQ,UAAWpL,GAAI,GAChDqjB,EAAc,YACVpY,GAAS+G,cAAe,OAAOoR,EAEnC,GAAI3O,GAAOgL,SAAS1N,EAAIlV,SAAWA,EAAOiU,UAAYjU,EAAO4T,YAAc5T,EAAO6T,YAAc/C,EAAM2V,wBAA0BzmB,EAC9H,OAAO0mB,GAAU,GAKnB,GAFA/M,IAAkB,EAEdvB,IAAmBrK,EAAQyQ,WAAa4H,EAAUC,IAAYF,EAAStO,KAAa7B,IACtFU,KAAgBrU,OAASA,KAAKkV,YAAcwB,GAAYwE,UAAUlb,KAAM+V,EAAgBR,GAAQ1C,KAASiI,EAAMK,SAASnb,KAAM+V,EAAgBR,GAAQ1C,IAAO,CAI7J,GAHA+G,EAA+C,aAApC5Z,KAAKwgB,cAAc3N,EAAKlV,GACnC+b,EAAW/P,EAAQ4L,IACnB4O,EAAc,iBACVpY,GAAS+G,cAAe,OAAOoR,EAEnC,GAAIJ,EAiBF,OAhBAtO,GAAW7B,GAEXpN,IAEAvG,KAAKujB,aAELY,EAAc,UAETpY,GAAS+G,gBACR4C,GACF/B,GAAO8P,aAAalO,GAAQG,IAE5B/B,GAAO2P,YAAY/N,KAIhB8O,GAAU,GAGnB,IAAIC,EAAcnY,EAAUrL,EAAI4K,EAAQQ,WAExC,IAAKoY,GAAepF,GAAarM,EAAK+G,EAAU5Z,QAAUskB,EAAY1S,SAAU,CAG9E,GAAI0S,IAAgB/O,GAClB,OAAO8O,GAAU,GAYnB,GARIC,GAAexjB,IAAO+R,EAAIlV,SAC5BA,EAAS2mB,GAGP3mB,IACFgc,EAAahQ,EAAQhM,KAG0D,IAA7E2gB,GAAQ3K,GAAQ7S,EAAIyU,GAAQmE,EAAU/b,EAAQgc,EAAY9G,IAAOlV,GAMnE,OALA4I,IACAzF,EAAGwiB,YAAY/N,IACfC,GAAW1U,EAEXyjB,IACOF,GAAU,QAEd,GAAIC,GAAetF,GAAcnM,EAAK+G,EAAU5Z,MAAO,CAE5D,IAAIwkB,EAAahZ,EAAS1K,EAAI,EAAG4K,GAAS,GAE1C,GAAI8Y,IAAejP,GACjB,OAAO8O,GAAU,GAMnB,GAHA1mB,EAAS6mB,EACT7K,EAAahQ,EAAQhM,IAEyD,IAA1E2gB,GAAQ3K,GAAQ7S,EAAIyU,GAAQmE,EAAU/b,EAAQgc,EAAY9G,GAAK,GAMjE,OALAtM,IACAzF,EAAG2iB,aAAalO,GAAQiP,GACxBhP,GAAW1U,EAEXyjB,IACOF,GAAU,QAEd,GAAI1mB,EAAO6J,aAAe1G,EAAI,CACnC6Y,EAAahQ,EAAQhM,GACrB,IACI8mB,EAcAC,EAfA/H,EAAY,EAEZgI,EAAiBpP,GAAO/N,aAAe1G,EACvC8jB,GAAmBnL,GAAmBlE,GAAO3D,UAAY2D,GAAO7E,QAAUgJ,EAAU/b,EAAOiU,UAAYjU,EAAO+S,QAAUiJ,EAAYC,GACpIiL,EAAQjL,EAAW,MAAQ,OAC3BkL,EAAkB9Z,EAAerN,EAAQ,MAAO,QAAUqN,EAAeuK,GAAQ,MAAO,OACxFwP,EAAeD,EAAkBA,EAAgB9X,eAAY,EAWjE,GATIiK,KAAetZ,IACjB8mB,EAAwB9K,EAAWkL,GACnCrN,IAAwB,EACxBC,IAA0BmN,GAAmBlZ,EAAQ8Q,YAAcmI,GAGrEhI,EAAYwC,GAAkBtM,EAAKlV,EAAQgc,EAAYC,EAAUgL,EAAkB,EAAIlZ,EAAQ6Q,cAAgD,MAAjC7Q,EAAQ+Q,sBAAgC/Q,EAAQ6Q,cAAgB7Q,EAAQ+Q,sBAAuBhF,GAAwBR,KAAetZ,GAGlO,IAAdgf,EAAiB,CAEnB,IAAIqI,EAAYzY,EAAMgJ,IAEtB,GACEyP,GAAarI,EACb+H,EAAUlP,GAAS3J,SAASmZ,SACrBN,IAAwC,SAA5Bvc,EAAIuc,EAAS,YAAyBA,IAAYjP,KAIzE,GAAkB,IAAdkH,GAAmB+H,IAAY/mB,EACjC,OAAO0mB,GAAU,GAGnBpN,GAAatZ,EACbuZ,GAAgByF,EAChB,IAAI2E,EAAc3jB,EAAOsnB,mBACrBC,GAAQ,EACZA,EAAsB,IAAdvI,EAER,IAAIwI,EAAa7G,GAAQ3K,GAAQ7S,EAAIyU,GAAQmE,EAAU/b,EAAQgc,EAAY9G,EAAKqS,GAEhF,IAAmB,IAAfC,EA4BF,OA3BmB,IAAfA,IAAoC,IAAhBA,IACtBD,EAAuB,IAAfC,GAGVxN,IAAU,EACVjJ,WAAWqQ,GAAW,IACtBxY,IAEI2e,IAAU5D,EACZxgB,EAAGwiB,YAAY/N,IAEf5X,EAAO6J,WAAWic,aAAalO,GAAQ2P,EAAQ5D,EAAc3jB,GAI3DmnB,GACFjW,GAASiW,EAAiB,EAAGC,EAAeD,EAAgB9X,WAG9DwI,GAAWD,GAAO/N,gBAGYpH,IAA1BqkB,GAAwChN,KAC1CN,GAAqB5X,KAAKwiB,IAAI0C,EAAwB9a,EAAQhM,GAAQknB,KAGxEN,IACOF,GAAU,GAIrB,GAAIvjB,EAAGyf,SAAShL,IACd,OAAO8O,GAAU,GAIrB,OAAO,EA7QP,SAASF,EAAcziB,EAAM0jB,GAC3B1S,GAAYhR,EAAM+M,EAAOzK,EAAe,CACtC6O,IAAKA,EACLkR,QAASA,EACTsB,KAAMzL,EAAW,WAAa,aAC9BkK,OAAQA,EACRpK,SAAUA,EACVC,WAAYA,EACZqK,QAASA,EACTC,aAAcA,EACdtmB,OAAQA,EACR0mB,UAAWA,EACX3F,OAAQ,SAAgB/gB,EAAQunB,GAC9B,OAAO5G,GAAQ3K,GAAQ7S,EAAIyU,GAAQmE,EAAU/b,EAAQgM,EAAQhM,GAASkV,EAAKqS,IAE7EX,QAASA,GACRa,IAIL,SAAS7e,IACP4d,EAAc,4BAEd1V,EAAMkB,wBAEFlB,IAAUwV,GACZA,EAAatU,wBAKjB,SAAS0U,EAAUiB,GAuDjB,OAtDAnB,EAAc,oBAAqB,CACjCmB,UAAWA,IAGTA,IAEEvB,EACFhO,EAAewN,aAEfxN,EAAewP,WAAW9W,GAGxBA,IAAUwV,IAEZnc,EAAYyN,GAAQlB,GAAcA,GAAY3I,QAAQkR,WAAa7G,EAAerK,QAAQkR,YAAY,GACtG9U,EAAYyN,GAAQ7J,EAAQkR,YAAY,IAGtCvI,KAAgB5F,GAASA,IAAU1C,GAASiK,OAC9C3B,GAAc5F,EACLA,IAAU1C,GAASiK,QAAU3B,KACtCA,GAAc,MAIZ4P,IAAiBxV,IACnBA,EAAM2V,sBAAwBzmB,GAGhC8Q,EAAM6B,YAAW,WACf6T,EAAc,6BACd1V,EAAM2V,sBAAwB,QAG5B3V,IAAUwV,IACZA,EAAa3T,aACb2T,EAAaG,sBAAwB,QAKrCzmB,IAAW4X,KAAWA,GAAO3D,UAAYjU,IAAWmD,IAAOnD,EAAOiU,YACpEqF,GAAa,MAIVvL,EAAQ2R,gBAAmBxK,EAAIc,QAAUhW,IAAW2J,WACvDiO,GAAO/N,WAAW6H,IAAS2M,iBAAiBnJ,EAAIlV,SAG/C2nB,GAAa7J,GAA8B5I,KAG7CnH,EAAQ2R,gBAAkBxK,EAAI0I,iBAAmB1I,EAAI0I,kBAC/C2I,GAAiB,EAI1B,SAASK,IACPtQ,GAAW1H,EAAMgJ,IACjBpB,GAAoB5H,EAAMgJ,GAAQ7J,EAAQQ,WAE1CsK,GAAe,CACb5D,SAAUnE,EACV/M,KAAM,SACNoS,KAAMhT,EACNmT,SAAUA,GACVE,kBAAmBA,GACnBC,cAAevB,MA2KrBuR,sBAAuB,KACvBoB,eAAgB,WACd3e,EAAIS,SAAU,YAAatH,KAAKiiB,cAChCpb,EAAIS,SAAU,YAAatH,KAAKiiB,cAChCpb,EAAIS,SAAU,cAAetH,KAAKiiB,cAClCpb,EAAIS,SAAU,WAAYmU,IAC1B5U,EAAIS,SAAU,YAAamU,IAC3B5U,EAAIS,SAAU,YAAamU,KAE7BgK,aAAc,WACZ,IAAIpE,EAAgBrhB,KAAKc,GAAGugB,cAC5Bxa,EAAIwa,EAAe,UAAWrhB,KAAKyhB,SACnC5a,EAAIwa,EAAe,WAAYrhB,KAAKyhB,SACpC5a,EAAIwa,EAAe,YAAarhB,KAAKyhB,SACrC5a,EAAIwa,EAAe,cAAerhB,KAAKyhB,SACvC5a,EAAIS,SAAU,cAAetH,OAE/ByhB,QAAS,SAET5O,GACE,IAAI/R,EAAKd,KAAKc,GACV4K,EAAU1L,KAAK0L,QAEnBuI,GAAW1H,EAAMgJ,IACjBpB,GAAoB5H,EAAMgJ,GAAQ7J,EAAQQ,WAC1CwG,GAAY,OAAQ1S,KAAM,CACxB6S,IAAKA,IAEP2C,GAAWD,IAAUA,GAAO/N,WAE5ByM,GAAW1H,EAAMgJ,IACjBpB,GAAoB5H,EAAMgJ,GAAQ7J,EAAQQ,WAEtCH,GAAS+G,gBAMbuE,IAAsB,EACtBI,IAAyB,EACzBD,IAAwB,EACxBkO,cAAc1lB,KAAK0jB,SACnB9U,aAAa5O,KAAK8hB,iBAElBxB,GAAgBtgB,KAAKwjB,SAErBlD,GAAgBtgB,KAAK6jB,cAGjB7jB,KAAKie,kBACPpX,EAAIS,SAAU,OAAQtH,MACtB6G,EAAI/F,EAAI,YAAad,KAAKkiB,eAG5BliB,KAAKwlB,iBAELxlB,KAAKylB,eAEDtf,GACFgC,EAAIb,SAASuG,KAAM,cAAe,IAGpC1F,EAAIoN,GAAQ,YAAa,IAErB1C,IACEiD,KACFjD,EAAIgC,YAAchC,EAAIyI,kBACrB5P,EAAQ0R,YAAcvK,EAAI0I,mBAG7B9F,IAAWA,GAAQjO,YAAciO,GAAQjO,WAAWme,YAAYlQ,KAE5D9B,KAAW6B,IAAYnB,IAA2C,UAA5BA,GAAYa,cAEpDrB,IAAWA,GAAQrM,YAAcqM,GAAQrM,WAAWme,YAAY9R,IAG9D0B,KACEvV,KAAKie,iBACPpX,EAAI0O,GAAQ,UAAWvV,MAGzB8e,GAAkBvJ,IAElBA,GAAOjN,MAAM,eAAiB,GAG1BwN,KAAUuB,IACZvP,EAAYyN,GAAQlB,GAAcA,GAAY3I,QAAQkR,WAAa5c,KAAK0L,QAAQkR,YAAY,GAG9F9U,EAAYyN,GAAQvV,KAAK0L,QAAQmR,aAAa,GAE9CrG,GAAe,CACb5D,SAAU5S,KACV0B,KAAM,WACNoS,KAAM0B,GACNvB,SAAU,KACVE,kBAAmB,KACnBC,cAAevB,IAGbc,KAAW6B,IACTvB,IAAY,IAEduC,GAAe,CACb7C,OAAQ6B,GACR9T,KAAM,MACNoS,KAAM0B,GACNzB,OAAQJ,GACRS,cAAevB,IAIjB2D,GAAe,CACb5D,SAAU5S,KACV0B,KAAM,SACNoS,KAAM0B,GACNpB,cAAevB,IAIjB2D,GAAe,CACb7C,OAAQ6B,GACR9T,KAAM,OACNoS,KAAM0B,GACNzB,OAAQJ,GACRS,cAAevB,IAGjB2D,GAAe,CACb5D,SAAU5S,KACV0B,KAAM,OACNoS,KAAM0B,GACNpB,cAAevB,KAInBwB,IAAeA,GAAYpS,QAEvBgS,KAAaD,IACXC,IAAY,IAEduC,GAAe,CACb5D,SAAU5S,KACV0B,KAAM,SACNoS,KAAM0B,GACNpB,cAAevB,IAGjB2D,GAAe,CACb5D,SAAU5S,KACV0B,KAAM,OACNoS,KAAM0B,GACNpB,cAAevB,KAMnB9G,GAASiK,SAEK,MAAZ/B,KAAkC,IAAdA,KACtBA,GAAWD,GACXG,GAAoBD,IAGtBsC,GAAe,CACb5D,SAAU5S,KACV0B,KAAM,MACNoS,KAAM0B,GACNpB,cAAevB,IAIjB7S,KAAKiC,WA9ITjC,KAAK2iB,YAqJTA,SAAU,WACRjQ,GAAY,UAAW1S,MACvB2T,GAAS4B,GAASC,GAAWC,GAAUC,GAAS7B,GAAU8B,GAAaC,GAAce,GAASC,GAAWd,GAAQ7B,GAAWE,GAAoBH,GAAWE,GAAoB+C,GAAaC,GAAgB7C,GAAcqC,GAAc3K,GAASE,QAAUF,GAASC,MAAQD,GAASW,MAAQX,GAASiK,OAAS,KAC/S4B,GAAkBzT,SAAQ,SAAUrD,GAClCA,EAAGsf,SAAU,KAEfxI,GAAkBzX,OAAS0W,GAASC,GAAS,GAE/C8O,YAAa,SAEb/S,GACE,OAAQA,EAAI4N,MACV,IAAK,OACL,IAAK,UACHzgB,KAAKyhB,QAAQ5O,GAEb,MAEF,IAAK,YACL,IAAK,WACC0C,KACFvV,KAAK8b,YAAYjJ,GAEjBuL,GAAgBvL,IAGlB,MAEF,IAAK,cACHA,EAAIyI,iBACJ,QAQNuK,QAAS,WAQP,IAPA,IACI/kB,EADAglB,EAAQ,GAERja,EAAW7L,KAAKc,GAAG+K,SACnB5H,EAAI,EACJsF,EAAIsC,EAAS1L,OACbuL,EAAU1L,KAAK0L,QAEZzH,EAAIsF,EAAGtF,IACZnD,EAAK+K,EAAS5H,GAEVwD,EAAQ3G,EAAI4K,EAAQQ,UAAWlM,KAAKc,IAAI,IAC1CglB,EAAMhiB,KAAKhD,EAAGilB,aAAara,EAAQ4R,aAAeqC,GAAY7e,IAIlE,OAAOglB,GAOT5J,KAAM,SAAc4J,EAAOE,GACzB,IAAIC,EAAQ,GACRtS,EAAS3T,KAAKc,GAClBd,KAAK6lB,UAAU1hB,SAAQ,SAAUxD,EAAIsD,GACnC,IAAInD,EAAK6S,EAAO9H,SAAS5H,GAErBwD,EAAQ3G,EAAId,KAAK0L,QAAQQ,UAAWyH,GAAQ,KAC9CsS,EAAMtlB,GAAMG,KAEbd,MACHgmB,GAAgBhmB,KAAK2P,wBACrBmW,EAAM3hB,SAAQ,SAAUxD,GAClBslB,EAAMtlB,KACRgT,EAAOgS,YAAYM,EAAMtlB,IACzBgT,EAAO2P,YAAY2C,EAAMtlB,QAG7BqlB,GAAgBhmB,KAAKsQ,cAMvBrO,KAAM,WACJ,IAAIma,EAAQpc,KAAK0L,QAAQ0Q,MACzBA,GAASA,EAAM8J,KAAO9J,EAAM8J,IAAIlmB,OASlCyH,QAAS,SAAmB3G,EAAIkG,GAC9B,OAAOS,EAAQ3G,EAAIkG,GAAYhH,KAAK0L,QAAQQ,UAAWlM,KAAKc,IAAI,IASlEwR,OAAQ,SAAgB5Q,EAAMoD,GAC5B,IAAI4G,EAAU1L,KAAK0L,QAEnB,QAAc,IAAV5G,EACF,OAAO4G,EAAQhK,GAEf,IAAI6R,EAAgBpB,GAAciB,aAAapT,KAAM0B,EAAMoD,GAGzD4G,EAAQhK,GADmB,qBAAlB6R,EACOA,EAEAzO,EAGL,UAATpD,GACFgZ,GAAchP,IAQpBya,QAAS,WACPzT,GAAY,UAAW1S,MACvB,IAAIc,EAAKd,KAAKc,GACdA,EAAGuO,IAAW,KACdxI,EAAI/F,EAAI,YAAad,KAAKke,aAC1BrX,EAAI/F,EAAI,aAAcd,KAAKke,aAC3BrX,EAAI/F,EAAI,cAAed,KAAKke,aAExBle,KAAKie,kBACPpX,EAAI/F,EAAI,WAAYd,MACpB6G,EAAI/F,EAAI,YAAad,OAIvBomB,MAAMzmB,UAAUwE,QAAQ3D,KAAKM,EAAGulB,iBAAiB,gBAAgB,SAAUvlB,GACzEA,EAAGwlB,gBAAgB,gBAGrBtmB,KAAKyhB,UAELzhB,KAAK0hB,4BAELnK,GAAUlH,OAAOkH,GAAUjS,QAAQtF,KAAKc,IAAK,GAC7Cd,KAAKc,GAAKA,EAAK,MAEjByiB,WAAY,WACV,IAAK3N,GAAa,CAEhB,GADAlD,GAAY,YAAa1S,MACrB+L,GAAS+G,cAAe,OAC5B3K,EAAI0L,GAAS,UAAW,QAEpB7T,KAAK0L,QAAQgR,mBAAqB7I,GAAQrM,YAC5CqM,GAAQrM,WAAWme,YAAY9R,IAGjC+B,IAAc,IAGlB2P,WAAY,SAAoBlR,GAC9B,GAAgC,UAA5BA,EAAYa,aAMhB,GAAIU,GAAa,CAEf,GADAlD,GAAY,YAAa1S,MACrB+L,GAAS+G,cAAe,OAExByC,GAAO/N,YAAcmM,IAAW3T,KAAK0L,QAAQoP,MAAMO,YAE5C3F,GACT/B,GAAO8P,aAAa5P,GAAS6B,IAE7B/B,GAAO2P,YAAYzP,IAJnBF,GAAO8P,aAAa5P,GAAS0B,IAO3BvV,KAAK0L,QAAQoP,MAAMO,aACrBrb,KAAKgR,QAAQuE,GAAQ1B,IAGvB1L,EAAI0L,GAAS,UAAW,IACxB+B,IAAc,QAtBd5V,KAAKujB,eA8LP1L,IACFpR,EAAGa,SAAU,aAAa,SAAUuL,IAC7B9G,GAASiK,QAAUqB,KAAwBxE,EAAIgC,YAClDhC,EAAIyI,oBAMVvP,GAASwa,MAAQ,CACf9f,GAAIA,EACJI,IAAKA,EACLsB,IAAKA,EACLgB,KAAMA,EACNqd,GAAI,SAAY1lB,EAAIkG,GAClB,QAASS,EAAQ3G,EAAIkG,EAAUlG,GAAI,IAErCgN,OAAQA,GACRO,SAAUA,GACV5G,QAASA,EACTK,YAAaA,EACb4E,MAAOA,GACPH,MAAOA,EACPka,SAAUpG,GACVqG,eAAgBpG,GAChBqG,gBAAiBtO,GACjB7M,SAAUA,GAQZO,GAASoS,IAAM,SAAUyI,GACvB,OAAOA,EAAQvX,KAQjBtD,GAASqG,MAAQ,WACf,IAAK,IAAIyU,EAAO3mB,UAAUC,OAAQ6R,EAAU,IAAIoU,MAAMS,GAAOC,EAAO,EAAGA,EAAOD,EAAMC,IAClF9U,EAAQ8U,GAAQ5mB,UAAU4mB,GAGxB9U,EAAQ,GAAGnN,cAAgBuhB,QAAOpU,EAAUA,EAAQ,IACxDA,EAAQ7N,SAAQ,SAAUkO,GACxB,IAAKA,EAAO1S,YAAc0S,EAAO1S,UAAUkF,YACzC,KAAM,gEAAgE4N,OAAO,GAAGwJ,SAASzb,KAAK6R,IAG5FA,EAAOkU,QAAOxa,GAASwa,MAAQviB,EAAeA,EAAe,GAAI+H,GAASwa,OAAQlU,EAAOkU,QAC7FpU,GAAcC,MAAMC,OAUxBtG,GAASgb,OAAS,SAAUjmB,EAAI4K,GAC9B,OAAO,IAAIK,GAASjL,EAAI4K,IAI1BK,GAASrG,QAAUA,EAEnB,IACIshB,GACAC,GAEAC,GACAC,GACAC,GACAC,GAPAC,GAAc,GAGdC,IAAY,EAMhB,SAASC,KACP,SAASC,IASP,IAAK,IAAI9gB,KART3G,KAAKiS,SAAW,CACdyV,QAAQ,EACRC,yBAAyB,EACzBC,kBAAmB,GACnBC,YAAa,GACbC,cAAc,GAGD9nB,KACQ,MAAjB2G,EAAG/H,OAAO,IAAkC,oBAAboB,KAAK2G,KACtC3G,KAAK2G,GAAM3G,KAAK2G,GAAI2O,KAAKtV,OA4F/B,OAvFAynB,EAAW9nB,UAAY,CACrBkW,YAAa,SAAqBnC,GAChC,IAAIU,EAAgBV,EAAKU,cAErBpU,KAAK4S,SAASqL,gBAChBxX,EAAGa,SAAU,WAAYtH,KAAK+nB,mBAE1B/nB,KAAK0L,QAAQsS,eACfvX,EAAGa,SAAU,cAAetH,KAAKgoB,2BACxB5T,EAAcsH,QACvBjV,EAAGa,SAAU,YAAatH,KAAKgoB,2BAE/BvhB,EAAGa,SAAU,YAAatH,KAAKgoB,4BAIrCC,kBAAmB,SAA2BC,GAC5C,IAAI9T,EAAgB8T,EAAM9T,cAGrBpU,KAAK0L,QAAQyc,gBAAmB/T,EAAcT,QACjD3T,KAAK+nB,kBAAkB3T,IAG3BgU,KAAM,WACApoB,KAAK4S,SAASqL,gBAChBpX,EAAIS,SAAU,WAAYtH,KAAK+nB,oBAE/BlhB,EAAIS,SAAU,cAAetH,KAAKgoB,2BAClCnhB,EAAIS,SAAU,YAAatH,KAAKgoB,2BAChCnhB,EAAIS,SAAU,YAAatH,KAAKgoB,4BAGlCK,KACAC,KACA3Z,MAEF4Z,QAAS,WACPnB,GAAaH,GAAeD,GAAWO,GAAYF,GAA6BH,GAAkBC,GAAkB,KACpHG,GAAYnnB,OAAS,GAEvB6nB,0BAA2B,SAAmCnV,GAC5D7S,KAAK+nB,kBAAkBlV,GAAK,IAE9BkV,kBAAmB,SAA2BlV,EAAK4P,GACjD,IAAIhU,EAAQzO,KAER8O,GAAK+D,EAAI6I,QAAU7I,EAAI6I,QAAQ,GAAK7I,GAAK+I,QACzC7M,GAAK8D,EAAI6I,QAAU7I,EAAI6I,QAAQ,GAAK7I,GAAKgJ,QACzCzO,EAAO9F,SAASub,iBAAiB/T,EAAGC,GAMxC,GALAqY,GAAavU,EAKT4P,GAAYziB,KAAK0L,QAAQic,yBAA2B1hB,GAAQD,GAAcG,EAAQ,CACpFqiB,GAAW3V,EAAK7S,KAAK0L,QAAS0B,EAAMqV,GAEpC,IAAIgG,EAAiBrd,GAA2BgC,GAAM,IAElDma,IAAeF,IAA8BvY,IAAMoY,IAAmBnY,IAAMoY,KAC9EE,IAA8BgB,KAE9BhB,GAA6B1D,aAAY,WACvC,IAAI+E,EAAUtd,GAA2B9D,SAASub,iBAAiB/T,EAAGC,IAAI,GAEtE2Z,IAAYD,IACdA,EAAiBC,EACjBJ,MAGFE,GAAW3V,EAAKpE,EAAM/C,QAASgd,EAASjG,KACvC,IACHyE,GAAkBpY,EAClBqY,GAAkBpY,OAEf,CAEL,IAAK/O,KAAK0L,QAAQoc,cAAgB1c,GAA2BgC,GAAM,KAAU5D,IAE3E,YADA8e,KAIFE,GAAW3V,EAAK7S,KAAK0L,QAASN,GAA2BgC,GAAM,IAAQ,MAItEpI,EAASyiB,EAAY,CAC1BjV,WAAY,SACZN,qBAAqB,IAIzB,SAASoW,KACPhB,GAAYnjB,SAAQ,SAAUqkB,GAC5B9C,cAAc8C,EAAWG,QAE3BrB,GAAc,GAGhB,SAASe,KACP3C,cAAc2B,IAGhB,IAAImB,GAAana,IAAS,SAAUwE,EAAKnH,EAASiI,EAAQiV,GAExD,GAAKld,EAAQgc,OAAb,CACA,IAMImB,EANA/Z,GAAK+D,EAAI6I,QAAU7I,EAAI6I,QAAQ,GAAK7I,GAAK+I,QACzC7M,GAAK8D,EAAI6I,QAAU7I,EAAI6I,QAAQ,GAAK7I,GAAKgJ,QACzCiN,EAAOpd,EAAQkc,kBACfmB,EAAQrd,EAAQmc,YAChB/a,EAActD,IACdwf,GAAqB,EAGrB/B,KAAiBtT,IACnBsT,GAAetT,EACf2U,KACAtB,GAAWtb,EAAQgc,OACnBmB,EAAiBnd,EAAQud,UAER,IAAbjC,KACFA,GAAW5b,GAA2BuI,GAAQ,KAIlD,IAAIuV,EAAY,EACZC,EAAgBnC,GAEpB,EAAG,CACD,IAAIlmB,EAAKqoB,EACLrZ,EAAOnG,EAAQ7I,GACfoJ,EAAM4F,EAAK5F,IACXE,EAAS0F,EAAK1F,OACdD,EAAO2F,EAAK3F,KACZE,EAAQyF,EAAKzF,MACbE,EAAQuF,EAAKvF,MACbD,EAASwF,EAAKxF,OACd8e,OAAa,EACbC,OAAa,EACb9b,EAAczM,EAAGyM,YACjBE,EAAe3M,EAAG2M,aAClB6K,EAAQnQ,EAAIrH,GACZwoB,EAAaxoB,EAAGiM,WAChBwc,EAAazoB,EAAGkM,UAEhBlM,IAAOgM,GACTsc,EAAa7e,EAAQgD,IAAoC,SAApB+K,EAAM3K,WAA4C,WAApB2K,EAAM3K,WAA8C,YAApB2K,EAAM3K,WACzG0b,EAAa/e,EAASmD,IAAqC,SAApB6K,EAAM1K,WAA4C,WAApB0K,EAAM1K,WAA8C,YAApB0K,EAAM1K,aAE3Gwb,EAAa7e,EAAQgD,IAAoC,SAApB+K,EAAM3K,WAA4C,WAApB2K,EAAM3K,WACzE0b,EAAa/e,EAASmD,IAAqC,SAApB6K,EAAM1K,WAA4C,WAApB0K,EAAM1K,YAG7E,IAAI4b,EAAKJ,IAAe7pB,KAAKwiB,IAAI1X,EAAQyE,IAAMga,GAAQQ,EAAa/e,EAAQgD,IAAgBhO,KAAKwiB,IAAI5X,EAAO2E,IAAMga,KAAUQ,GACxHG,EAAKJ,IAAe9pB,KAAKwiB,IAAI3X,EAAS2E,IAAM+Z,GAAQS,EAAajf,EAASmD,IAAiBlO,KAAKwiB,IAAI7X,EAAM6E,IAAM+Z,KAAUS,GAE9H,IAAKjC,GAAY4B,GACf,IAAK,IAAIjlB,EAAI,EAAGA,GAAKilB,EAAWjlB,IACzBqjB,GAAYrjB,KACfqjB,GAAYrjB,GAAK,IAKnBqjB,GAAY4B,GAAWM,IAAMA,GAAMlC,GAAY4B,GAAWO,IAAMA,GAAMnC,GAAY4B,GAAWpoB,KAAOA,IACtGwmB,GAAY4B,GAAWpoB,GAAKA,EAC5BwmB,GAAY4B,GAAWM,GAAKA,EAC5BlC,GAAY4B,GAAWO,GAAKA,EAC5B/D,cAAc4B,GAAY4B,GAAWP,KAE3B,GAANa,GAAiB,GAANC,IACbT,GAAqB,EAGrB1B,GAAY4B,GAAWP,IAAMhF,YAAY,WAEnCiF,GAA6B,IAAf5oB,KAAK0pB,OACrB3d,GAASiK,OAAOiM,aAAamF,IAI/B,IAAIuC,EAAgBrC,GAAYtnB,KAAK0pB,OAAOD,GAAKnC,GAAYtnB,KAAK0pB,OAAOD,GAAKV,EAAQ,EAClFa,EAAgBtC,GAAYtnB,KAAK0pB,OAAOF,GAAKlC,GAAYtnB,KAAK0pB,OAAOF,GAAKT,EAAQ,EAExD,oBAAnBF,GACoI,aAAzIA,EAAeroB,KAAKuL,GAASE,QAAQzE,WAAW6H,IAAUua,EAAeD,EAAe9W,EAAKuU,GAAYE,GAAYtnB,KAAK0pB,OAAO5oB,KAKvI+N,GAASyY,GAAYtnB,KAAK0pB,OAAO5oB,GAAI8oB,EAAeD,IACpDrU,KAAK,CACLoU,MAAOR,IACL,MAIRA,UACOxd,EAAQoc,cAAgBqB,IAAkBrc,IAAgBqc,EAAgB/d,GAA2B+d,GAAe,KAE7H5B,GAAYyB,KACX,IAECZ,GAAO,SAAc1U,GACvB,IAAIU,EAAgBV,EAAKU,cACrBC,EAAcX,EAAKW,YACnBkB,EAAS7B,EAAK6B,OACdQ,EAAiBrC,EAAKqC,eACtBQ,EAAwB7C,EAAK6C,sBAC7BN,EAAqBvC,EAAKuC,mBAC1BE,EAAuBzC,EAAKyC,qBAChC,GAAK/B,EAAL,CACA,IAAIyV,EAAaxV,GAAe0B,EAChCE,IACA,IAAIyK,EAAQtM,EAAc0V,gBAAkB1V,EAAc0V,eAAe3pB,OAASiU,EAAc0V,eAAe,GAAK1V,EAChHzW,EAAS2J,SAASub,iBAAiBnC,EAAM9E,QAAS8E,EAAM7E,SAC5D1F,IAEI0T,IAAeA,EAAW/oB,GAAGyf,SAAS5iB,KACxC4Y,EAAsB,SACtBvW,KAAK+pB,QAAQ,CACXxU,OAAQA,EACRlB,YAAaA,OAKnB,SAAS2V,MAsCT,SAASC,MApCTD,GAAOrqB,UAAY,CACjBuqB,WAAY,KACZC,UAAW,SAAmBjC,GAC5B,IAAIhU,EAAoBgU,EAAMhU,kBAC9BlU,KAAKkqB,WAAahW,GAEpB6V,QAAS,SAAiBK,GACxB,IAAI7U,EAAS6U,EAAM7U,OACflB,EAAc+V,EAAM/V,YACxBrU,KAAK4S,SAASjD,wBAEV0E,GACFA,EAAY1E,wBAGd,IAAI2R,EAAc9V,EAASxL,KAAK4S,SAAS9R,GAAId,KAAKkqB,WAAYlqB,KAAK0L,SAE/D4V,EACFthB,KAAK4S,SAAS9R,GAAG2iB,aAAalO,EAAQ+L,GAEtCthB,KAAK4S,SAAS9R,GAAGwiB,YAAY/N,GAG/BvV,KAAK4S,SAAStC,aAEV+D,GACFA,EAAY/D,cAGhB8X,KAAMA,IAGRpjB,EAASglB,GAAQ,CACfxX,WAAY,kBAKdyX,GAAOtqB,UAAY,CACjBoqB,QAAS,SAAiBM,GACxB,IAAI9U,EAAS8U,EAAM9U,OACflB,EAAcgW,EAAMhW,YACpBiW,EAAiBjW,GAAerU,KAAK4S,SACzC0X,EAAe3a,wBACf4F,EAAO/N,YAAc+N,EAAO/N,WAAWme,YAAYpQ,GACnD+U,EAAeha,cAEjB8X,KAAMA,IAGRpjB,EAASilB,GAAQ,CACfzX,WAAY,kBAysBdzG,GAASqG,MAAM,IAAIoV,IACnBzb,GAASqG,MAAM6X,GAAQD,IAER,UCtiHA,gCAAgB,CAC7BO,MAAO,CAEL5pB,GAAIjC,OAEJgC,MAAOhC,OAEP8rB,MAAO,CAAE/J,KAAM/hB,OAAQ+rB,QAAS,QAEhCC,KAAM,CAAEjK,KAAM/hB,OAA4C+rB,QAAS,MAEnEzoB,MAAO,CAAEye,KAAM/hB,OAAQ+rB,QAAS,IAEhCE,KAAM,CAAElK,KAAM/hB,OAAwC+rB,QAAS,SAE/DG,YAAa,CAAEnK,KAAMoK,QAASJ,SAAS,GAEvCrc,MAAO,CAAEqS,KAAMoK,QAASJ,SAAS,GAEjCK,OAAQ,CAAErK,KAAMoK,QAASJ,SAAS,GAElCM,OAAQ,CAAEtK,KAAMoK,QAASJ,SAAS,GAElCO,qBAAsB,CAAEvK,KAAMoK,QAASJ,SAAS,GAEhDQ,kBAAmB,CAAExK,KAAMoK,QAASJ,SAAS,GAE7CS,aAAc,CAAEzK,KAAM,CAAC/hB,OAAQysB,WAE/BC,UAAW,CAAE3K,KAAMoK,QAASJ,SAAS,GAErCY,WAAY,CAAE5K,KAAMoK,QAASJ,SAAS,GAEtCngB,OAAQ,CAAEmW,KAAM,CAAC3iB,OAAQY,SAEzB4sB,WAAY,CACV7K,KAAMjd,OACNinB,QAAS,CAAEc,QAAQ,EAAMC,UAAU,IAGrCC,YAAa,CACXhL,KAAMjd,OACNinB,QAAS,CACPiB,YAAa,EACbC,SAAU,GACVC,UAAW,CAAC,EAAG,GAAI,IACnBC,QAAS,CACP,WACA,OACA,YACA,WACA,QACA,WAKNC,YAAa,CACXrL,KAAMjd,OACNinB,QAAS,CACPsB,MAAO,CAAC,UAAW,WAAY,SAInCC,aAAc,CACZvL,KAAMjd,OACNinB,QAAS,CACPhK,KAAM,MACNwL,MAAO,CAAC,OAAQ,OAChBtB,KAAM,MACNoB,MAAO,CAAC,UAAW,WAAY,SAInCG,cAAe,CACbzL,KAAMjd,QAGR2oB,WAAY,CACV1L,KAAMoK,QACNJ,SAAS,GAGX2B,WAAY,CACV3L,KAAMoK,QACNJ,SAAS,GAGXvpB,aAAc,CACZuf,KAAM0K,UAGRkB,QAAS,CACP5L,KAAMjd,OACN8oB,UAAU,GAGZC,QAAS,CACP9L,KAAM2F,MAGNqE,QAAS,IAGX+B,SAAU,CACR/L,KAAMjd,QAwBRipB,YAAa,CACXhM,KAAMjd,OAQNinB,QAAS,CACPlgB,MAAO,MACPD,OAAQ,MACRoiB,UAAU,EACVC,QAAQ,EACRC,UAAU,IAIdC,UAAW,CAAEpM,KAAMoK,QAASJ,SAAS,GAErCloB,QAAS,CAAEke,KAAMoK,QAASJ,SAAS,GAEnCroB,UAAW,CAAEqe,KAAMoK,QAASJ,SAAS,GAErCjoB,UAAW,CAAEie,KAAMoK,QAASJ,SAAS,GAErC/nB,SAAU,CAAE+d,KAAMoK,QAASJ,SAAS,GAEpCpoB,kBAAmB,CAAEoe,KAAM0K,SAAsFV,QAAS,kBAAM,IAEhIqC,WAAY,CACVrM,KAAMjd,QAGRupB,eAAgB,CACdtM,KAAMjd,OACNinB,QAAS,CAAEuC,SAAS,IAEtBC,QAAS9B,SACT+B,UAAW/B,SACXgC,SAAUhC,SACViC,cAAejC,SACf9pB,iBAAkB8pB,SAClB7pB,cAAe6pB,SACfkC,oBAAqBlC,SACrBmC,cAAenC,SACfoC,YAAapC,SACbqC,OAAQrC,SACRsC,SAAUtC,SACVuC,qBAAsBvC,SACtBwC,OAAQxC,SACRyC,oBAAqBzC,SACrB0C,SAAU1C,SACV2C,QAAS3C,SACT4C,oBAAqB5C,SACrB6C,aAAc7C,SACd8C,eAAgB9C,SAChB5pB,YAAY4pB,UAEd+C,MA5L6B,SA4LvB3D,EA5LuB,GA4LD,cAAb4D,EAAa,EAAbA,KAGPvtB,GAHoB,EAAPwtB,MAGN7D,EAAM5pB,IAAM,kBACnBgqB,EAAO,iBAAIJ,EAAMI,MACjB3nB,EAAe,kBAAI,GACnBjC,EAAW,iBAAI,IACfstB,EAAU,kBAAI,GACdtsB,EAAa,iBAAS,MACtBusB,EAAU,iBAAI,IACdC,EAAgB,iBAAiB,IAKnClC,EAAoC,GACpC9B,EAAMK,cAAgByB,EAAQhS,MAAK,SAACnK,GAAD,OAAOA,EAAEuQ,MAAmB,aAAXvQ,EAAEuQ,SACxD4L,EAAQvoB,KAAK,CAAE2c,KAAM,WAAYlW,MAAO,GAAIikB,MAAO,OAAQpD,WAAW,IAExEiB,EAAU,GAAH,sBAAOA,GAAP,eAAmB9B,EAAM8B,WAC3B9B,EAAMsC,WAAatC,EAAMhoB,SAAWgoB,EAAMnoB,WAAamoB,EAAM/nB,aAAe6pB,EAAQhS,MAAK,SAACnK,GAAD,OAAOA,EAAEue,OAA6B,YAApBve,EAAEue,MAAMhE,YACtH4B,EAAQvoB,KAAK,CAAE9B,MAAO,KAAMuI,MAAO,IAAKikB,MAAO,QAASE,MAAO,SAAUtD,WAAW,EAAOqD,MAAO,CAAEhE,QAAS,aAG/G,IAAMzpB,EAAc,sBAAS,CAC3B0pB,KAAMH,EAAMG,KACZyB,WAAY5B,EAAM4B,WAClBd,WAAYd,EAAMc,WAClB/gB,OAAQigB,EAAMjgB,OACdkgB,MAAOD,EAAMC,MACbmE,YAAY,EACZvgB,MAAOmc,EAAMnc,MACb0c,OAAQP,EAAMO,OACdC,OAAQR,EAAMQ,OACd6D,qBAAqB,EACrB5D,qBAAsBT,EAAMS,qBAC5BC,kBAAmBV,EAAMU,kBACzBC,aAAcX,EAAMW,aACpBE,UAAWb,EAAMa,UACjBiD,QAASA,EAAQvpB,MACjB+pB,aAAc,CACZC,SAAS,EACTC,YAAa,YAAe,QAAZC,EAAY,EAAZA,OACd,OAAO,UAAAA,EAAOC,gBAAP,eAAiB9uB,QAAS,IAAK,UAAA6uB,EAAOhtB,aAAP,eAAc7B,QAAS,IAGjE+rB,cAAe3B,EAAM2B,cACjB,CACEgD,SAAS,EACTC,OAAM,UAAE5E,EAAM2B,qBAAR,aAAE,EAAqBiD,OAC7BC,QAAO,UAAE7E,EAAM2B,qBAAR,aAAE,EAAqBkD,QAC9BX,MAAK,UAAElE,EAAM2B,qBAAR,aAAE,EAAqBuC,YAE9BruB,EACJivB,aAAc,CAAE9D,QAAQ,GACxBD,WAAY,gBAAEC,QAAQ,EAAMC,UAAU,GAASjB,EAAMe,YACrDgE,WAAY,CACVC,QAAS,SACT5E,KAAM,MACN6E,UAAU,EACVC,WAAW,GAEbhE,YAAalB,EAAMkB,YACnBK,YAAavB,EAAMuB,YACnBE,aAAczB,EAAMyB,aACpBK,UACAS,WAAYvC,EAAMuC,WAClBC,eAAgBxC,EAAMwC,eACtB2C,YAAa,CACXC,SAAS,EACTzT,MAAM,EACNvY,QAAQ,EACR4mB,MAAO,CAAE5rB,OAAQ,OAAQixB,MAAO,cAChCC,KAAM,CACJC,MAAO,SAACC,GAAU,MACVC,EAMF,CACFC,KAAMF,EAAOE,KAAKvE,YAClBC,SAAUoE,EAAOE,KAAKtE,SACtB2C,QAASA,EAAQxpB,MACjBorB,SAAUH,EAAOI,MACdxsB,QAAO,SAACuM,GAAD,OAAOA,EAAE+e,YAChBmB,KACC,SAAClgB,GAAD,OACE,IAAI,aACFA,EAAE+e,SACU,SAAZ/e,EAAE4V,MACE,eAAUuK,WACV,eAAUC,cAGtBC,UAAW,IAAI,eAAUhC,EAAczpB,QAGnC0rB,EAAUT,EAAOS,QACnBT,EAAOS,QAAQ7sB,QAAO,SAACuM,GAAD,OAAOA,EAAEugB,OAAOtwB,UACtC,KACJ,GAAIqwB,GAAWA,EAAQrwB,OAAQ,CAC7B,IAAMuwB,EAAgB,IAAI,eAE1BF,EAAQrsB,SAAQ,SAACR,GACf,IAAMgtB,EAAkB,IAAI,eAC5BhtB,EAAO8sB,OAAOtsB,SAAQ,SAACysB,GACrB,GAAIA,GAAaA,aAAqB,eAAW,CAC/C,IAAML,EAAYK,EACdL,EAAUM,aAAe,uBAAkBC,IAC7CH,EAAgBI,IAAIR,GACjBI,EAAgBK,GAAGT,OAG5BG,EAAcK,IAAIJ,MAEpBX,EAAYO,UAAUQ,IAAIL,GAE5B,IAAMO,EAAe,UAAG1G,EAAMiC,gBAAT,aAAG,EAAgBsD,MACxC,OAAOmB,EACH,IAAIC,SAAQ,SAACC,EAASC,GAAV,OACVH,EAAgBjB,GAAaqB,MAC3B,SAACC,GAAD,OAAaH,EAAQG,MACrB,SAACC,GACC,IAASC,KAAK,QAAS,CACrBC,QAAS,OACTC,QAASH,IAEXH,EAAOG,SATK,wCAalB,uHACS,CAAElc,KAAM,GAAIsc,WAAY,IADjC,4CAINC,SAAU,SAAC7B,GAAU,MACbC,EAIF,CACF1B,QAASA,EAAQxpB,MACjBorB,SAAUH,EAAOI,MACdxsB,QAAO,SAACuM,GAAD,OAAOA,EAAE+e,YAChBmB,KACC,SAAClgB,GAAD,OACE,IAAI,aACFA,EAAE+e,SACU,SAAZ/e,EAAE4V,MACE,eAAUuK,WACV,eAAUC,cAGtBC,UAAW,IAAI,eAAUhC,EAAczpB,QAGnC0rB,EAAUT,EAAOS,QACnBT,EAAOS,QAAQ7sB,QAAO,SAACuM,GAAD,OAAOA,EAAEugB,OAAOtwB,UACtC,KACJ,GAAIqwB,GAAWA,EAAQrwB,OAAQ,CAC7B,IAAMuwB,EAAgB,IAAI,eAE1BF,EAAQrsB,SAAQ,SAACR,GACf,IAAMgtB,EAAkB,IAAI,eAC5BhtB,EAAO8sB,OAAOtsB,SAAQ,SAACysB,GACrB,GAAIA,GAAaA,aAAqB,eAAW,CAC/C,IAAML,EAAYK,EACdL,EAAUM,aAAe,uBAAkBC,IAC7CH,EAAgBI,IAAIR,GACjBI,EAAgBK,GAAGT,OAG5BG,EAAcK,IAAIJ,MAEpBX,EAAYO,UAAUQ,IAAIL,GAE5B,IAAMkB,EAAQ,UAAGrH,EAAMiC,gBAAT,aAAG,EAAgBoF,SACjC,OAAOA,EACH,IAAIV,SAAQ,SAACC,EAASC,GAAV,OACVQ,EAAS5B,GAAaqB,MACpB,SAACC,GAAD,OAAaH,EAAQG,MACrB,SAACC,GACC,IAASC,KAAK,QAAS,CACrBC,QAAS,OACTC,QAASH,IAEXH,EAAOG,SATF,wCAaX,uHACS,IADT,4CAINM,OAAQ,SAAC9B,GAAU,MACX+B,EAAU,UAAGvH,EAAMiC,gBAAT,aAAG,EAAgBvqB,KACnC,OAAO6vB,EACH,IAAIZ,SAAQ,SAACC,EAASC,GAAV,OACVU,EAAW,CAAEA,WAAY/B,EAAOliB,KAAKkkB,gBAAiBV,MACpD,SAACC,GAAD,OAAaH,EAAQG,MACrB,SAACC,GACC,IAASC,KAAK,QAAS,CACrBC,QAAS,OACTC,QAASH,IAEXH,EAAOG,SATA,wCAab,4HACSnxB,GADT,4CAIN6B,KAAM,SAAC8tB,GAAU,MACTiC,EAAa,CACjBC,WAAYlC,EAAOliB,KAAKqkB,cACxBC,WAAYpC,EAAOliB,KAAKukB,cACxBN,WAAY/B,EAAOliB,KAAKkkB,eAEpBM,EAAQ,UAAG9H,EAAMiC,gBAAT,aAAG,EAAgBvqB,KACjC,OAAOowB,EACH,IAAInB,SAAQ,SAACC,EAASC,GAAV,OACViB,EAASL,GAAYX,MACnB,SAACC,GACCvvB,EAAW+C,MAAQ,KACnBqsB,EAAQG,MAEV,SAACC,GACC,IAASC,KAAK,QAAS,CACrBC,QAAS,OACTC,QAASH,IAEXH,EAAOG,SAZF,wCAgBX,4HACSnxB,GADT,gDAQZ,GACEY,EAAY8rB,YAAZ,UACAvC,EAAMuC,kBADN,OACA,EAAkB3hB,QADlB,UAEAof,EAAMuC,kBAFN,OAEA,EAAkBgD,MAClB,CACA,IAAM3kB,EAASof,EAAMuC,WAAW3hB,OAC1B2kB,EAAQvF,EAAMuC,WAAWgD,MAC/B9uB,EAAY8rB,WAAWwF,WAAa,SAACvC,GACnC,IAAMC,EAKF,CACF7kB,OAAQ4kB,EAAOluB,IAAIsJ,GACnBmjB,QAASA,EAAQxpB,MACjBorB,SAAUH,EAAOwC,OACdC,iBACA7uB,QAAO,SAACuM,GAAD,OAAOA,EAAE+e,YAChBmB,KACC,SAAClgB,GAAD,OACE,IAAI,aACFA,EAAE+e,SACU,SAAZ/e,EAAE4V,MACE,eAAUuK,WACV,eAAUC,cAGtBC,UAAW,IAAI,eAAUhC,EAAczpB,QAGrC0rB,EAAUT,EAAOwC,OAClBE,oBACA9uB,QAAO,SAACuM,GAAD,OAAOA,EAAEugB,OAAOtwB,UAC1B,GAAIqwB,GAAWA,EAAQrwB,OAAQ,CAC7B,IAAMuwB,EAAgB,IAAI,eAE1BF,EAAQrsB,SAAQ,SAACR,GACf,IAAMgtB,EAAkB,IAAI,eAC5BhtB,EAAO8sB,OAAOtsB,SAAQ,SAACysB,GACrB,GAAIA,GAAaA,aAAqB,eAAW,CAC/C,IAAML,EAAYK,EACdL,EAAUM,aAAe,uBAAkBC,IAC7CH,EAAgBI,IAAIR,GACjBI,EAAgBK,GAAGT,OAG5BG,EAAcK,IAAIJ,MAEpBX,EAAYO,UAAUQ,IAAIL,GAE5B,OAAOZ,EAAME,IAOjB,IAAMjtB,EAAe,gBACnB2pB,UAAU,EACVC,QAAQ,EACRC,UAAU,GACPrC,EAAMkC,aAGX,GACmC,kBAA1B1pB,EAAgBwH,OACvBxH,EAAgBwH,MAAMlL,SAAS,KAC/B,CACA,IAAMqzB,EAAa50B,OAAOJ,SACxBqF,EAAgBwH,MAAMiK,OAAO,EAAGzR,EAAgBwH,MAAMpK,OAAS,IAEjE4C,EAAgBwH,MAAQ1E,OAAO4E,YAAcioB,EAAa,KAE5D,GACoC,kBAA3B3vB,EAAgBuH,QACvBvH,EAAgBuH,OAAOjL,SAAS,KAChC,CACA,IAAM,EAAavB,OAAOJ,SACxBqF,EAAgBuH,OAAOkK,OAAO,EAAGzR,EAAgBuH,OAAOnK,OAAS,IAEnE4C,EAAgBuH,OAASzE,OAAO2E,aAAe,EAAa,KAM9D,IAqYImoB,EAkCAC,EAvaEC,EAAe,uBAAS,kBAAM9xB,EAAS+D,MAAMguB,wBAC7CC,EAAgB,uBAAS,kBAAMF,EAAa/tB,MAAM3E,OAAS,KAC3D2B,EAAY,uBAChB,kBACsB,MAApBC,EAAW+C,OACX/D,EAAS+D,MAAMkuB,cAAcjxB,EAAW+C,UAMtC3C,EAAQ,SAACN,GAAgC,IAArBoxB,EAAqB,wDACxCpxB,IAAKA,EAAME,EAAW+C,OAC3B,IAAMouB,EAAS,WACb,OAAQvI,EAAK7lB,OACX,IAAK,SACH/D,EAAS+D,MAAMquB,eAAe9B,MAAK,WAC7BtwB,EAAS+D,MAAMsuB,cAAcvxB,GAAMd,EAAS+D,MAAMrC,OAAOZ,GACpDd,EAAS+D,MAAMuuB,cAAcxxB,IACpCd,EAAS+D,MAAMwuB,WAAWzxB,GAC5BE,EAAW+C,MAAQ,QAErB,MACF,IAAK,QACH,GAAI/D,EAAS+D,MAAMsuB,cAAcvxB,GAC/B,GAAIoxB,IAAcpxB,EAAI0xB,GACpBxyB,EAAS+D,MAAMrC,OAAOZ,QAGtB,cAAiB2B,OAAOD,KAAK1B,GAA7B,gBAAI,IAAMuC,EAAG,YAA6BvC,EAAIuC,QAGhD,cAAiBZ,OAAOD,KAAK1B,GAA7B,eAAmC,CAA/B,IAAM,EAAG,KACD,YAAP,GAA4B,cAAP,GACtBd,EAAS+D,MAAMwuB,WAAWzxB,EAAK,GAGjCoxB,IAAWlxB,EAAW+C,MAAQ,MAClC,QAGFylB,EAAM0C,QAASkB,EAAK,QAAStsB,EAAKqxB,GACjCA,KAGD5wB,EAAO,SAACT,GACZ,GAAK0oB,EAAMsC,WAActC,EAAMnoB,WAAcmoB,EAAMhoB,QAAnD,CAEAR,EAAW+C,MAAQjD,EACnB,IAAMqxB,EAAS,WACb,OAAQvI,EAAK7lB,OACX,IAAK,SACH,OAAO/D,EAAS+D,MAAM0uB,aAAa3xB,GACrC,IAAK,QACHmB,EAAa8B,OAAQ,EACrB,QAGFylB,EAAMiD,OAAQW,EAAK,OAAQtsB,EAAKqxB,GAC/BA,MAGDO,EAAY,SAAC5xB,GACjB,GAAK0oB,EAAMsC,YAAa9qB,EAAW+C,MAAnC,MACY1E,IAARyB,IAAmBA,EAAM,IAC7B,IAAMqxB,EAAS,WACbnyB,EAAS+D,MAAM4uB,OAAO7xB,GAAKwvB,MAAK,SAAChc,GAAD,OAAU/S,EAAK+S,EAAKxT,SAElD0oB,EAAMgD,YAAaY,EAAK,YAAatsB,EAAKqxB,GACzCA,MAGDjxB,EAAO,SAACJ,GAAa,MAKrBd,EAAS+D,MAAM6uB,eAHjBzB,EAFuB,EAEvBA,cACAE,EAHuB,EAGvBA,cACAL,EAJuB,EAIvBA,cAEF,IAAKxH,EAAMsC,YAAaqF,EAAc/xB,UACjCoqB,EAAMnoB,YAAagwB,EAAcjyB,UACjCoqB,EAAM/nB,YAAauvB,EAAc5xB,QAAtC,CACA,IAAM+yB,EAAS,WAAK,UACZ9uB,EAAMmmB,EAAMC,OAAS,OACR,UAAfD,EAAMI,MAAoB9oB,IACxBd,EAAS+D,MAAMsuB,cAAcvxB,GAC1BqwB,EAAc/oB,MAAK,SAAC+G,GAAD,OAAOA,EAAE9L,KAASvC,EAAIuC,OAC5C8tB,EAAcpuB,KAAKjC,GAEhBuwB,EAAcjpB,MAAK,SAAC+G,GAAD,OAAOA,EAAE9L,KAASvC,EAAIuC,OAC5CguB,EAActuB,KAAKjC,IAGzB,IAAI+xB,EACF1B,EAAc/xB,QAAUiyB,EAAcjyB,QAAU4xB,EAAc5xB,OAChEyzB,MACE/xB,IACCqwB,EAAc7X,MAAK,SAACnK,GAAD,OAAOA,EAAE9L,KAASvC,EAAIuC,OACxCguB,EAAc/X,MAAK,SAACnK,GAAD,OAAOA,EAAE9L,KAASvC,EAAIuC,OACzC2tB,EAAc1X,MAAK,SAACnK,GAAD,OAAOA,EAAE9L,KAASvC,EAAIuC,QAC7C,IAAMyvB,EAAehyB,GAAOE,EAAW+C,QAAUjD,EACjD,GAAI+xB,EACF,OAAQrJ,EAAMI,MACZ,IAAK,SACH5pB,EAAS+D,MAAMgvB,YAAY,QAAQzC,MAAK,WAClCwC,GAAgB9xB,EAAW+C,QAAUjD,EAAKS,EAAKT,IAEjDmB,EAAa8B,OAAQ,EACrB/C,EAAW+C,MAAQ,SAGvB,MACF,IAAK,QACC,UAAAylB,EAAMiC,gBAAN,SAAgBkH,QAAUxB,EAAc/xB,QAC1Ca,EAAYqtB,SAAU,EACtB9D,EAAMiC,SAASkH,OAAO7xB,GAAKwvB,MACzB,WACEtwB,EAAS+D,MACNgvB,YAAY,SACZzC,MAAK,WACJruB,EAAa8B,OAAQ,EACrB/C,EAAW+C,MAAQ,QAEpBivB,SAAQ,WACP/yB,EAAYqtB,SAAU,QAG9B,SAAC2F,GACC,IAASxC,KAAK,QAAS,CACrBC,QAAS,OACTC,QAASsC,QAGL,UAAAzJ,EAAMiC,gBAAN,SAAgByH,QAAU7B,EAAcjyB,QAEhDa,EAAYqtB,SAAU,EACtB9D,EAAMiC,SAASyH,OAAOpyB,GAAKwvB,MACzB,WACEtwB,EAAS+D,MACNgvB,YAAY,SACZzC,MAAK,WACJruB,EAAa8B,OAAQ,EACrB/C,EAAW+C,MAAQ,QAEpBivB,SAAQ,WACP/yB,EAAYqtB,SAAU,QAG9B,SAAC2F,GACC,IAASxC,KAAK,QAAS,CACrBC,QAAS,OACTC,QAASsC,QAIV,UAAIzJ,EAAMiC,gBAAV,OAAI,EAAgBvqB,OACvBjB,EAAYqtB,SAAU,EACtB9D,EAAMiC,SACHvqB,KAAK,CACJgwB,WAAYC,EACZC,WAAYC,EACZN,WAAYC,IAEbV,MACC,WACEtwB,EAAS+D,MACNgvB,YAAY,SACZzC,MAAK,WACJruB,EAAa8B,OAAQ,EACrB/C,EAAW+C,MAAQ,QAEpBivB,SAAQ,WACP/yB,EAAYqtB,SAAU,QAG5B,SAAC2F,GACC,IAAIvC,EACAC,EACJ,GAAItL,MAAM8N,QAAQF,EAAQ1C,SACxB0C,EAAQ1C,QAAQntB,SAAQ,SAAC+L,GACvB,OAAQA,EAAEgjB,QACR,IAAK,SACHzB,EAAU,OACV,MACF,IAAK,SACHA,EAAU,OACV,MACF,IAAK,SACHA,EAAU,OACV,MACF,QACEA,EAAU,OACV,MAEJ,IAASD,KAAK,QAAS,CACrBC,UACAC,QAASxhB,EAAEyf,iBAGV,CAEL,OADA+B,EAAUsC,EAAQrE,QACVqE,EAAQd,QACd,IAAK,SACHzB,EAAU,OACV,MACF,IAAK,SACHA,EAAU,OACV,MACF,IAAK,SACHA,EAAU,OACV,MACF,QACE,OAAQuC,EAAQG,QACd,KAAK,IACH1C,EAAU,OACVC,EAAU,QACV,MACF,QACED,EAAU,OACVC,EAAUsC,EAAQrE,QAClB,MAEJ,MAEJ,IAAS6B,KAAK,QAAS,CACrBC,UACAC,YAGJ1wB,EAAYqtB,SAAU,MAI9B,WAEMxsB,GAAOA,IAAQE,EAAW+C,QACpC9B,EAAa8B,OAAQ,EACrB/C,EAAW+C,MAAQ,OAGnBylB,EAAMoD,OACRQ,EAAK,OAAQ,CAAE+D,gBAAeE,gBAAeL,iBAAiBmB,GAC3DA,MAGDzwB,EAAS,SAACZ,GACd,GAAK0oB,EAAM/nB,WACPX,GAAOuyB,QAAQ,eAAgB,CACjC,IAAMlB,EAAS,WAAK,QAClBlyB,EAAYqtB,SAAU,EACtB,IAAMyD,EAAU,UAAGvH,EAAMiC,gBAAT,aAAG,EAAgBqF,OAC/BC,GACFA,EAAU,UAACjwB,EAAIwyB,iBAAL,QAAkBxyB,EAAIyyB,UAAUjD,MACxC,WACEtwB,EAAS+D,MAAMgvB,YAAY,SAASC,SAAQ,WAC1C/yB,EAAYqtB,SAAU,QAG1B,SAAC2F,GACK5N,MAAM8N,QAAQF,GAChBA,EAAQ7vB,SAAQ,SAAC+L,GAAD,OACd,IAASshB,KAAK,QAAS,CACrBC,QAAS,OACTC,QAASxhB,EAAEyf,aAIf,IAAS6B,KAAK,QAAS,CACrBC,QAAS,OACTC,QAASsC,EAAQrE,SAAWqE,IAEhChzB,EAAYqtB,SAAU,MAI1B9D,EAAMkD,SAAUU,EAAK,SAAUtsB,EAAKqxB,GACnCA,MAIHtwB,EAAe,SAACf,GAChBA,GAAOuyB,QAAQ,mBACjBjG,EAAK,eAAgBtsB,IAInBc,EAAa,SAACd,GAClBssB,EAAK,aAActsB,IAGf0yB,EAAqB,WACzB,GAAKhK,EAAM/nB,UAAX,CACA,IAAMgyB,EAAOzzB,EAAS+D,MAAMguB,qBAC5B,GAAI0B,GAAQA,EAAKr0B,QAAUi0B,QAAQ,kBAAmB,CACpD,IAAMlB,EAAS,WACbnyB,EAAS+D,MAAMgvB,YAAY,WAEzBvJ,EAAMmD,qBACRS,EAAK,qBAAsBqG,EAAMtB,GAC9BA,OAIHuB,EAAoB,SACxB/tB,EACA4L,EACAoiB,EACAC,GAEIA,IAAeriB,EAAO8N,SAAW9N,EAAO8N,SACxC9N,EAAO8N,SAAW9N,EAAO+C,MACtB/C,EAAOxN,QACVwN,EAAOxN,MAAQ,IAAI,eAAU,OAAQ,cAAS8vB,WAChDtiB,EAAOxN,MAAMA,MAAQwN,EAAO+C,MACvB/C,EAAOxN,WAAQ1E,EACtB,IAAM8yB,EAAS,WACTyB,GAAeD,EAAMG,aAAanuB,EAAO4L,EAAO8N,QAAS9N,IAE3DiY,EAAMwD,oBAAqBI,EAAK,oBAAqB7b,EAAQ4gB,GAC5DA,KAGDrF,EAAQ,yDAAG,WAAOiH,GAAP,4FACfA,EAAS,iCAAK9zB,EAAYgrB,cAAiB8I,GACvB,QAAhBA,EAAOnK,MAAP,UAAyBJ,EAAMiC,gBAA/B,QAAyB,EAAgBoF,SAF9B,gCAGOrH,EAAMiC,SAASoF,WAHtB,OAGbkD,EAAOzf,KAHM,iBAIT6d,EAJS,yDAIA,8GAAkBnyB,EAAS+D,MAAMiwB,WAAWD,GAA5C,mFAJA,sDAKXvK,EAAMsD,SALK,iBAKKM,EAAK,SAAU2G,EAAQ5B,GAL5B,yCAMJA,IANI,4CAAH,sDASRpF,EAAO,yDAAG,WAAOgH,GAAP,4FACdA,EAAS,iCAAK9zB,EAAY8qB,aAAgBgJ,GACtB,QAAhBA,EAAOnK,MAAP,UAAyBJ,EAAMiC,gBAA/B,QAAyB,EAAgBoF,SAF/B,gCAGQrH,EAAMiC,SAASoF,WAHvB,OAGZkD,EAAOzf,KAHK,cAIR6d,EAAS,WACbnyB,EAAS+D,MAAMkwB,MAAMF,IAEnBvK,EAAMuD,QAASK,EAAK,QAAS2G,EAAQ5B,GACpCA,IARS,2CAAH,sDAWP9D,EAAO,yDAAG,uGACR8D,EADQ,yDACC,8GAAkBnyB,EAAS+D,MAAMgvB,YAAY,SAA7C,mFADD,sDAEVvJ,EAAM2C,UAFI,gBAEOiB,EAAK,UAAW+E,GAFvB,sCAGHA,IAHG,2CAAH,qDAMP+B,EAAM,yDAAG,uGACP/B,EADO,yDACE,8GAAkBnyB,EAAS+D,MAAMgvB,YAAY,UAA7C,mFADF,sDAETvJ,EAAM4C,SAFG,gBAEOgB,EAAK,SAAU+E,GAFtB,sCAGFA,IAHE,2CAAH,qDAMNjwB,EAAW,SAAC0sB,GAChB,IAAMrnB,EAAQqnB,EAAQuF,OAAOC,SAAS7sB,MACtC6lB,EACE,cACA,CACE5jB,MAAOzM,OAAOK,WAAWmK,EAAMiC,OAC/BD,OAAQxM,OAAOK,WAAWmK,EAAMgC,QAChCJ,IAAKpM,OAAOK,WAAWmK,EAAM4B,KAC7BC,KAAMrM,OAAOK,WAAWmK,EAAM6B,QAEhC,gBAME9I,EAAmB,SAAC,GAAD,IAAG+e,EAAH,EAAGA,QAASgV,EAAZ,EAAYA,QAASC,EAArB,EAAqBA,SAAUxzB,EAA/B,EAA+BA,IAA/B,OAA8CssB,EAAK,iBAAkB,CAAE/N,UAASgV,UAASC,WAAUxzB,SAEtHP,EAAgB,SAAC,GAAD,IAAG8e,EAAH,EAAGA,QAASgV,EAAZ,EAAYA,QAASC,EAArB,EAAqBA,SAArB,OAAyClH,EAAK,cAAe,CAAE/N,UAASgV,UAASC,cAEjGl0B,EAAkB,SAAC,GAAD,IAAGU,EAAH,EAAGA,IAAH,OAAkBssB,EAAK,oBAAqBtsB,IAE9DT,EAAe,SAAC,GAAD,IAAGsqB,EAAH,EAAGA,YAAaC,EAAhB,EAAgBA,SAAhB,OAA0EwC,EAAK,cAAezC,EAAaC,IAE1H2J,EAAiB,SAACd,EAAWpU,GAAZ,OAAiCrf,EAAS+D,MAAMwwB,eAAed,EAAMpU,IAEtFmV,GAAU,kBAAMx0B,EAAS+D,MAAMywB,WAE/BC,GAAmB,kBAAMz0B,EAAS+D,MAAM0wB,oBAExCC,GAAuB,kBAAM10B,EAAS+D,MAAM2wB,wBAE5Cl0B,GAAc,SAAC,GAAD,IAAGM,EAAH,EAAGA,IAAK6zB,EAAR,EAAQA,SAAUC,EAAlB,EAAkBA,UAAW3G,EAA7B,EAA6BA,OAAQ4G,EAArC,EAAqCA,YAAaC,EAAlD,EAAkDA,aAAcC,EAAhE,EAAgEA,aAAcC,EAA9E,EAA8EA,gBAAiBC,EAA/F,EAA+FA,gBAAiBC,EAAhH,EAAgHA,kBAAmBC,EAAnI,EAAmIA,OAAnI,OAAkJ/H,EAAK,YAAY,CAAEtsB,MAAK6zB,WAAUC,YAAW3G,SAAQ4G,cAAaC,eAAcC,eAAcC,kBAAiBC,kBAAiBC,oBAAmBC,YAMnTC,GAAc,WAClB,IAAMC,EAAQr1B,EAAS+D,MACvB6tB,EAAY,GAAS5L,OAAOqP,EAAMC,IAAIC,cAAc,sDAAuD,CACzGja,OAAQ,uCACRka,MAAO,SAACC,QA4CZ,OAfA,uBAAS,WACFx1B,EAAYmrB,aAEjByG,EAAWlkB,YAAW,WACpBynB,OACC,SAGL,0BAAY,WACVvnB,aAAagkB,GACTD,GACFA,EAAUxM,aAIP,CACLplB,WACAgC,kBACA/B,cACAqtB,UACAvsB,YACAC,aACA8wB,eACAE,gBACA/vB,eACAsrB,UACAC,gBACApsB,QACAG,OACAmxB,YACAxxB,OACAQ,SACA8xB,qBACAE,oBACA5G,WACAC,UACAsB,UACA6F,SACAwB,aAAc5wB,OAAO2E,YACrBksB,YAAa7wB,OAAO4E,WACpBxH,WACA9B,kBACAC,eACAR,OACA00B,iBACAC,WACAl0B,mBACAC,gBACAk0B,oBACAC,wBACA7yB,eACAD,aAAWpB,mBCtnCjB,GAAOo1B,OAASA,EAED,W,qBCLf,IAAI54B,EAAS,EAAQ,QACjBC,EAAO,EAAQ,QAA4BA,KAC3CC,EAAc,EAAQ,QAEtB24B,EAAY74B,EAAOL,SACnBm5B,EAAM,cACNz4B,EAA2C,IAAlCw4B,EAAU34B,EAAc,OAAmD,KAApC24B,EAAU34B,EAAc,QAI5EK,EAAOC,QAAUH,EAAS,SAAkBI,EAAQs4B,GAClD,IAAIC,EAAI/4B,EAAKU,OAAOF,IACpB,OAAOo4B,EAAUG,EAAID,IAAU,IAAOD,EAAIva,KAAKya,GAAK,GAAK,MACvDH,G,qBCbJ,IAAIn5B,EAAI,EAAQ,QACZU,EAAa,EAAQ,QAKzBV,EAAE,CAAEE,OAAQ,SAAUC,MAAM,EAAMC,OAAQC,OAAOK,YAAcA,GAAc,CAC3EA,WAAYA","file":"js/chunk-6aa0384a.0ae79028.js","sourcesContent":["var $ = require('../internals/export');\nvar parseInt = require('../internals/number-parse-int');\n\n// `Number.parseInt` method\n// https://tc39.es/ecma262/#sec-number.parseint\n// eslint-disable-next-line es/no-number-parseint -- required for testing\n$({ target: 'Number', stat: true, forced: Number.parseInt != parseInt }, {\n parseInt: parseInt\n});\n","var global = require('../internals/global');\nvar trim = require('../internals/string-trim').trim;\nvar whitespaces = require('../internals/whitespaces');\n\nvar $parseFloat = global.parseFloat;\nvar FORCED = 1 / $parseFloat(whitespaces + '-0') !== -Infinity;\n\n// `parseFloat` method\n// https://tc39.es/ecma262/#sec-parsefloat-string\nmodule.exports = FORCED ? function parseFloat(string) {\n var trimmedString = trim(String(string));\n var result = $parseFloat(trimmedString);\n return result === 0 && trimmedString.charAt(0) == '-' ? -0 : result;\n} : $parseFloat;\n","'use strict';\nvar $ = require('../internals/export');\nvar getOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;\nvar toLength = require('../internals/to-length');\nvar notARegExp = require('../internals/not-a-regexp');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar correctIsRegExpLogic = require('../internals/correct-is-regexp-logic');\nvar IS_PURE = require('../internals/is-pure');\n\n// eslint-disable-next-line es/no-string-prototype-endswith -- safe\nvar $endsWith = ''.endsWith;\nvar min = Math.min;\n\nvar CORRECT_IS_REGEXP_LOGIC = correctIsRegExpLogic('endsWith');\n// https://github.com/zloirock/core-js/pull/702\nvar MDN_POLYFILL_BUG = !IS_PURE && !CORRECT_IS_REGEXP_LOGIC && !!function () {\n var descriptor = getOwnPropertyDescriptor(String.prototype, 'endsWith');\n return descriptor && !descriptor.writable;\n}();\n\n// `String.prototype.endsWith` method\n// https://tc39.es/ecma262/#sec-string.prototype.endswith\n$({ target: 'String', proto: true, forced: !MDN_POLYFILL_BUG && !CORRECT_IS_REGEXP_LOGIC }, {\n endsWith: function endsWith(searchString /* , endPosition = @length */) {\n var that = String(requireObjectCoercible(this));\n notARegExp(searchString);\n var endPosition = arguments.length > 1 ? arguments[1] : undefined;\n var len = toLength(that.length);\n var end = endPosition === undefined ? len : min(toLength(endPosition), len);\n var search = String(searchString);\n return $endsWith\n ? $endsWith.call(that, search, end)\n : that.slice(end - search.length, end) === search;\n }\n});\n","\n\n\n","/**!\n * Sortable 1.14.0\n * @author\tRubaXa \n * @author\towenm \n * @license MIT\n */\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n\n if (enumerableOnly) {\n symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n }\n\n keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nfunction _objectSpread2(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n\n if (i % 2) {\n ownKeys(Object(source), true).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n\n return target;\n}\n\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function (obj) {\n return typeof obj;\n };\n } else {\n _typeof = function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\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 _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n}\n\nfunction _objectWithoutProperties(source, excluded) {\n if (source == null) return {};\n\n var target = _objectWithoutPropertiesLoose(source, excluded);\n\n var key, i;\n\n if (Object.getOwnPropertySymbols) {\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n\n for (i = 0; i < sourceSymbolKeys.length; i++) {\n key = sourceSymbolKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n target[key] = source[key];\n }\n }\n\n return target;\n}\n\nfunction _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();\n}\n\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return _arrayLikeToArray(arr);\n}\n\nfunction _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n}\n\nfunction _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n}\n\nfunction _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n\n return arr2;\n}\n\nfunction _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nvar version = \"1.14.0\";\n\nfunction userAgent(pattern) {\n if (typeof window !== 'undefined' && window.navigator) {\n return !! /*@__PURE__*/navigator.userAgent.match(pattern);\n }\n}\n\nvar IE11OrLess = userAgent(/(?:Trident.*rv[ :]?11\\.|msie|iemobile|Windows Phone)/i);\nvar Edge = userAgent(/Edge/i);\nvar FireFox = userAgent(/firefox/i);\nvar Safari = userAgent(/safari/i) && !userAgent(/chrome/i) && !userAgent(/android/i);\nvar IOS = userAgent(/iP(ad|od|hone)/i);\nvar ChromeForAndroid = userAgent(/chrome/i) && userAgent(/android/i);\n\nvar captureMode = {\n capture: false,\n passive: false\n};\n\nfunction on(el, event, fn) {\n el.addEventListener(event, fn, !IE11OrLess && captureMode);\n}\n\nfunction off(el, event, fn) {\n el.removeEventListener(event, fn, !IE11OrLess && captureMode);\n}\n\nfunction matches(\n/**HTMLElement*/\nel,\n/**String*/\nselector) {\n if (!selector) return;\n selector[0] === '>' && (selector = selector.substring(1));\n\n if (el) {\n try {\n if (el.matches) {\n return el.matches(selector);\n } else if (el.msMatchesSelector) {\n return el.msMatchesSelector(selector);\n } else if (el.webkitMatchesSelector) {\n return el.webkitMatchesSelector(selector);\n }\n } catch (_) {\n return false;\n }\n }\n\n return false;\n}\n\nfunction getParentOrHost(el) {\n return el.host && el !== document && el.host.nodeType ? el.host : el.parentNode;\n}\n\nfunction closest(\n/**HTMLElement*/\nel,\n/**String*/\nselector,\n/**HTMLElement*/\nctx, includeCTX) {\n if (el) {\n ctx = ctx || document;\n\n do {\n if (selector != null && (selector[0] === '>' ? el.parentNode === ctx && matches(el, selector) : matches(el, selector)) || includeCTX && el === ctx) {\n return el;\n }\n\n if (el === ctx) break;\n /* jshint boss:true */\n } while (el = getParentOrHost(el));\n }\n\n return null;\n}\n\nvar R_SPACE = /\\s+/g;\n\nfunction toggleClass(el, name, state) {\n if (el && name) {\n if (el.classList) {\n el.classList[state ? 'add' : 'remove'](name);\n } else {\n var className = (' ' + el.className + ' ').replace(R_SPACE, ' ').replace(' ' + name + ' ', ' ');\n el.className = (className + (state ? ' ' + name : '')).replace(R_SPACE, ' ');\n }\n }\n}\n\nfunction css(el, prop, val) {\n var style = el && el.style;\n\n if (style) {\n if (val === void 0) {\n if (document.defaultView && document.defaultView.getComputedStyle) {\n val = document.defaultView.getComputedStyle(el, '');\n } else if (el.currentStyle) {\n val = el.currentStyle;\n }\n\n return prop === void 0 ? val : val[prop];\n } else {\n if (!(prop in style) && prop.indexOf('webkit') === -1) {\n prop = '-webkit-' + prop;\n }\n\n style[prop] = val + (typeof val === 'string' ? '' : 'px');\n }\n }\n}\n\nfunction matrix(el, selfOnly) {\n var appliedTransforms = '';\n\n if (typeof el === 'string') {\n appliedTransforms = el;\n } else {\n do {\n var transform = css(el, 'transform');\n\n if (transform && transform !== 'none') {\n appliedTransforms = transform + ' ' + appliedTransforms;\n }\n /* jshint boss:true */\n\n } while (!selfOnly && (el = el.parentNode));\n }\n\n var matrixFn = window.DOMMatrix || window.WebKitCSSMatrix || window.CSSMatrix || window.MSCSSMatrix;\n /*jshint -W056 */\n\n return matrixFn && new matrixFn(appliedTransforms);\n}\n\nfunction find(ctx, tagName, iterator) {\n if (ctx) {\n var list = ctx.getElementsByTagName(tagName),\n i = 0,\n n = list.length;\n\n if (iterator) {\n for (; i < n; i++) {\n iterator(list[i], i);\n }\n }\n\n return list;\n }\n\n return [];\n}\n\nfunction getWindowScrollingElement() {\n var scrollingElement = document.scrollingElement;\n\n if (scrollingElement) {\n return scrollingElement;\n } else {\n return document.documentElement;\n }\n}\n/**\n * Returns the \"bounding client rect\" of given element\n * @param {HTMLElement} el The element whose boundingClientRect is wanted\n * @param {[Boolean]} relativeToContainingBlock Whether the rect should be relative to the containing block of (including) the container\n * @param {[Boolean]} relativeToNonStaticParent Whether the rect should be relative to the relative parent of (including) the contaienr\n * @param {[Boolean]} undoScale Whether the container's scale() should be undone\n * @param {[HTMLElement]} container The parent the element will be placed in\n * @return {Object} The boundingClientRect of el, with specified adjustments\n */\n\n\nfunction getRect(el, relativeToContainingBlock, relativeToNonStaticParent, undoScale, container) {\n if (!el.getBoundingClientRect && el !== window) return;\n var elRect, top, left, bottom, right, height, width;\n\n if (el !== window && el.parentNode && el !== getWindowScrollingElement()) {\n elRect = el.getBoundingClientRect();\n top = elRect.top;\n left = elRect.left;\n bottom = elRect.bottom;\n right = elRect.right;\n height = elRect.height;\n width = elRect.width;\n } else {\n top = 0;\n left = 0;\n bottom = window.innerHeight;\n right = window.innerWidth;\n height = window.innerHeight;\n width = window.innerWidth;\n }\n\n if ((relativeToContainingBlock || relativeToNonStaticParent) && el !== window) {\n // Adjust for translate()\n container = container || el.parentNode; // solves #1123 (see: https://stackoverflow.com/a/37953806/6088312)\n // Not needed on <= IE11\n\n if (!IE11OrLess) {\n do {\n if (container && container.getBoundingClientRect && (css(container, 'transform') !== 'none' || relativeToNonStaticParent && css(container, 'position') !== 'static')) {\n var containerRect = container.getBoundingClientRect(); // Set relative to edges of padding box of container\n\n top -= containerRect.top + parseInt(css(container, 'border-top-width'));\n left -= containerRect.left + parseInt(css(container, 'border-left-width'));\n bottom = top + elRect.height;\n right = left + elRect.width;\n break;\n }\n /* jshint boss:true */\n\n } while (container = container.parentNode);\n }\n }\n\n if (undoScale && el !== window) {\n // Adjust for scale()\n var elMatrix = matrix(container || el),\n scaleX = elMatrix && elMatrix.a,\n scaleY = elMatrix && elMatrix.d;\n\n if (elMatrix) {\n top /= scaleY;\n left /= scaleX;\n width /= scaleX;\n height /= scaleY;\n bottom = top + height;\n right = left + width;\n }\n }\n\n return {\n top: top,\n left: left,\n bottom: bottom,\n right: right,\n width: width,\n height: height\n };\n}\n/**\n * Checks if a side of an element is scrolled past a side of its parents\n * @param {HTMLElement} el The element who's side being scrolled out of view is in question\n * @param {String} elSide Side of the element in question ('top', 'left', 'right', 'bottom')\n * @param {String} parentSide Side of the parent in question ('top', 'left', 'right', 'bottom')\n * @return {HTMLElement} The parent scroll element that the el's side is scrolled past, or null if there is no such element\n */\n\n\nfunction isScrolledPast(el, elSide, parentSide) {\n var parent = getParentAutoScrollElement(el, true),\n elSideVal = getRect(el)[elSide];\n /* jshint boss:true */\n\n while (parent) {\n var parentSideVal = getRect(parent)[parentSide],\n visible = void 0;\n\n if (parentSide === 'top' || parentSide === 'left') {\n visible = elSideVal >= parentSideVal;\n } else {\n visible = elSideVal <= parentSideVal;\n }\n\n if (!visible) return parent;\n if (parent === getWindowScrollingElement()) break;\n parent = getParentAutoScrollElement(parent, false);\n }\n\n return false;\n}\n/**\n * Gets nth child of el, ignoring hidden children, sortable's elements (does not ignore clone if it's visible)\n * and non-draggable elements\n * @param {HTMLElement} el The parent element\n * @param {Number} childNum The index of the child\n * @param {Object} options Parent Sortable's options\n * @return {HTMLElement} The child at index childNum, or null if not found\n */\n\n\nfunction getChild(el, childNum, options, includeDragEl) {\n var currentChild = 0,\n i = 0,\n children = el.children;\n\n while (i < children.length) {\n if (children[i].style.display !== 'none' && children[i] !== Sortable.ghost && (includeDragEl || children[i] !== Sortable.dragged) && closest(children[i], options.draggable, el, false)) {\n if (currentChild === childNum) {\n return children[i];\n }\n\n currentChild++;\n }\n\n i++;\n }\n\n return null;\n}\n/**\n * Gets the last child in the el, ignoring ghostEl or invisible elements (clones)\n * @param {HTMLElement} el Parent element\n * @param {selector} selector Any other elements that should be ignored\n * @return {HTMLElement} The last child, ignoring ghostEl\n */\n\n\nfunction lastChild(el, selector) {\n var last = el.lastElementChild;\n\n while (last && (last === Sortable.ghost || css(last, 'display') === 'none' || selector && !matches(last, selector))) {\n last = last.previousElementSibling;\n }\n\n return last || null;\n}\n/**\n * Returns the index of an element within its parent for a selected set of\n * elements\n * @param {HTMLElement} el\n * @param {selector} selector\n * @return {number}\n */\n\n\nfunction index(el, selector) {\n var index = 0;\n\n if (!el || !el.parentNode) {\n return -1;\n }\n /* jshint boss:true */\n\n\n while (el = el.previousElementSibling) {\n if (el.nodeName.toUpperCase() !== 'TEMPLATE' && el !== Sortable.clone && (!selector || matches(el, selector))) {\n index++;\n }\n }\n\n return index;\n}\n/**\n * Returns the scroll offset of the given element, added with all the scroll offsets of parent elements.\n * The value is returned in real pixels.\n * @param {HTMLElement} el\n * @return {Array} Offsets in the format of [left, top]\n */\n\n\nfunction getRelativeScrollOffset(el) {\n var offsetLeft = 0,\n offsetTop = 0,\n winScroller = getWindowScrollingElement();\n\n if (el) {\n do {\n var elMatrix = matrix(el),\n scaleX = elMatrix.a,\n scaleY = elMatrix.d;\n offsetLeft += el.scrollLeft * scaleX;\n offsetTop += el.scrollTop * scaleY;\n } while (el !== winScroller && (el = el.parentNode));\n }\n\n return [offsetLeft, offsetTop];\n}\n/**\n * Returns the index of the object within the given array\n * @param {Array} arr Array that may or may not hold the object\n * @param {Object} obj An object that has a key-value pair unique to and identical to a key-value pair in the object you want to find\n * @return {Number} The index of the object in the array, or -1\n */\n\n\nfunction indexOfObject(arr, obj) {\n for (var i in arr) {\n if (!arr.hasOwnProperty(i)) continue;\n\n for (var key in obj) {\n if (obj.hasOwnProperty(key) && obj[key] === arr[i][key]) return Number(i);\n }\n }\n\n return -1;\n}\n\nfunction getParentAutoScrollElement(el, includeSelf) {\n // skip to window\n if (!el || !el.getBoundingClientRect) return getWindowScrollingElement();\n var elem = el;\n var gotSelf = false;\n\n do {\n // we don't need to get elem css if it isn't even overflowing in the first place (performance)\n if (elem.clientWidth < elem.scrollWidth || elem.clientHeight < elem.scrollHeight) {\n var elemCSS = css(elem);\n\n if (elem.clientWidth < elem.scrollWidth && (elemCSS.overflowX == 'auto' || elemCSS.overflowX == 'scroll') || elem.clientHeight < elem.scrollHeight && (elemCSS.overflowY == 'auto' || elemCSS.overflowY == 'scroll')) {\n if (!elem.getBoundingClientRect || elem === document.body) return getWindowScrollingElement();\n if (gotSelf || includeSelf) return elem;\n gotSelf = true;\n }\n }\n /* jshint boss:true */\n\n } while (elem = elem.parentNode);\n\n return getWindowScrollingElement();\n}\n\nfunction extend(dst, src) {\n if (dst && src) {\n for (var key in src) {\n if (src.hasOwnProperty(key)) {\n dst[key] = src[key];\n }\n }\n }\n\n return dst;\n}\n\nfunction isRectEqual(rect1, rect2) {\n return Math.round(rect1.top) === Math.round(rect2.top) && Math.round(rect1.left) === Math.round(rect2.left) && Math.round(rect1.height) === Math.round(rect2.height) && Math.round(rect1.width) === Math.round(rect2.width);\n}\n\nvar _throttleTimeout;\n\nfunction throttle(callback, ms) {\n return function () {\n if (!_throttleTimeout) {\n var args = arguments,\n _this = this;\n\n if (args.length === 1) {\n callback.call(_this, args[0]);\n } else {\n callback.apply(_this, args);\n }\n\n _throttleTimeout = setTimeout(function () {\n _throttleTimeout = void 0;\n }, ms);\n }\n };\n}\n\nfunction cancelThrottle() {\n clearTimeout(_throttleTimeout);\n _throttleTimeout = void 0;\n}\n\nfunction scrollBy(el, x, y) {\n el.scrollLeft += x;\n el.scrollTop += y;\n}\n\nfunction clone(el) {\n var Polymer = window.Polymer;\n var $ = window.jQuery || window.Zepto;\n\n if (Polymer && Polymer.dom) {\n return Polymer.dom(el).cloneNode(true);\n } else if ($) {\n return $(el).clone(true)[0];\n } else {\n return el.cloneNode(true);\n }\n}\n\nfunction setRect(el, rect) {\n css(el, 'position', 'absolute');\n css(el, 'top', rect.top);\n css(el, 'left', rect.left);\n css(el, 'width', rect.width);\n css(el, 'height', rect.height);\n}\n\nfunction unsetRect(el) {\n css(el, 'position', '');\n css(el, 'top', '');\n css(el, 'left', '');\n css(el, 'width', '');\n css(el, 'height', '');\n}\n\nvar expando = 'Sortable' + new Date().getTime();\n\nfunction AnimationStateManager() {\n var animationStates = [],\n animationCallbackId;\n return {\n captureAnimationState: function captureAnimationState() {\n animationStates = [];\n if (!this.options.animation) return;\n var children = [].slice.call(this.el.children);\n children.forEach(function (child) {\n if (css(child, 'display') === 'none' || child === Sortable.ghost) return;\n animationStates.push({\n target: child,\n rect: getRect(child)\n });\n\n var fromRect = _objectSpread2({}, animationStates[animationStates.length - 1].rect); // If animating: compensate for current animation\n\n\n if (child.thisAnimationDuration) {\n var childMatrix = matrix(child, true);\n\n if (childMatrix) {\n fromRect.top -= childMatrix.f;\n fromRect.left -= childMatrix.e;\n }\n }\n\n child.fromRect = fromRect;\n });\n },\n addAnimationState: function addAnimationState(state) {\n animationStates.push(state);\n },\n removeAnimationState: function removeAnimationState(target) {\n animationStates.splice(indexOfObject(animationStates, {\n target: target\n }), 1);\n },\n animateAll: function animateAll(callback) {\n var _this = this;\n\n if (!this.options.animation) {\n clearTimeout(animationCallbackId);\n if (typeof callback === 'function') callback();\n return;\n }\n\n var animating = false,\n animationTime = 0;\n animationStates.forEach(function (state) {\n var time = 0,\n target = state.target,\n fromRect = target.fromRect,\n toRect = getRect(target),\n prevFromRect = target.prevFromRect,\n prevToRect = target.prevToRect,\n animatingRect = state.rect,\n targetMatrix = matrix(target, true);\n\n if (targetMatrix) {\n // Compensate for current animation\n toRect.top -= targetMatrix.f;\n toRect.left -= targetMatrix.e;\n }\n\n target.toRect = toRect;\n\n if (target.thisAnimationDuration) {\n // Could also check if animatingRect is between fromRect and toRect\n if (isRectEqual(prevFromRect, toRect) && !isRectEqual(fromRect, toRect) && // Make sure animatingRect is on line between toRect & fromRect\n (animatingRect.top - toRect.top) / (animatingRect.left - toRect.left) === (fromRect.top - toRect.top) / (fromRect.left - toRect.left)) {\n // If returning to same place as started from animation and on same axis\n time = calculateRealTime(animatingRect, prevFromRect, prevToRect, _this.options);\n }\n } // if fromRect != toRect: animate\n\n\n if (!isRectEqual(toRect, fromRect)) {\n target.prevFromRect = fromRect;\n target.prevToRect = toRect;\n\n if (!time) {\n time = _this.options.animation;\n }\n\n _this.animate(target, animatingRect, toRect, time);\n }\n\n if (time) {\n animating = true;\n animationTime = Math.max(animationTime, time);\n clearTimeout(target.animationResetTimer);\n target.animationResetTimer = setTimeout(function () {\n target.animationTime = 0;\n target.prevFromRect = null;\n target.fromRect = null;\n target.prevToRect = null;\n target.thisAnimationDuration = null;\n }, time);\n target.thisAnimationDuration = time;\n }\n });\n clearTimeout(animationCallbackId);\n\n if (!animating) {\n if (typeof callback === 'function') callback();\n } else {\n animationCallbackId = setTimeout(function () {\n if (typeof callback === 'function') callback();\n }, animationTime);\n }\n\n animationStates = [];\n },\n animate: function animate(target, currentRect, toRect, duration) {\n if (duration) {\n css(target, 'transition', '');\n css(target, 'transform', '');\n var elMatrix = matrix(this.el),\n scaleX = elMatrix && elMatrix.a,\n scaleY = elMatrix && elMatrix.d,\n translateX = (currentRect.left - toRect.left) / (scaleX || 1),\n translateY = (currentRect.top - toRect.top) / (scaleY || 1);\n target.animatingX = !!translateX;\n target.animatingY = !!translateY;\n css(target, 'transform', 'translate3d(' + translateX + 'px,' + translateY + 'px,0)');\n this.forRepaintDummy = repaint(target); // repaint\n\n css(target, 'transition', 'transform ' + duration + 'ms' + (this.options.easing ? ' ' + this.options.easing : ''));\n css(target, 'transform', 'translate3d(0,0,0)');\n typeof target.animated === 'number' && clearTimeout(target.animated);\n target.animated = setTimeout(function () {\n css(target, 'transition', '');\n css(target, 'transform', '');\n target.animated = false;\n target.animatingX = false;\n target.animatingY = false;\n }, duration);\n }\n }\n };\n}\n\nfunction repaint(target) {\n return target.offsetWidth;\n}\n\nfunction calculateRealTime(animatingRect, fromRect, toRect, options) {\n return Math.sqrt(Math.pow(fromRect.top - animatingRect.top, 2) + Math.pow(fromRect.left - animatingRect.left, 2)) / Math.sqrt(Math.pow(fromRect.top - toRect.top, 2) + Math.pow(fromRect.left - toRect.left, 2)) * options.animation;\n}\n\nvar plugins = [];\nvar defaults = {\n initializeByDefault: true\n};\nvar PluginManager = {\n mount: function mount(plugin) {\n // Set default static properties\n for (var option in defaults) {\n if (defaults.hasOwnProperty(option) && !(option in plugin)) {\n plugin[option] = defaults[option];\n }\n }\n\n plugins.forEach(function (p) {\n if (p.pluginName === plugin.pluginName) {\n throw \"Sortable: Cannot mount plugin \".concat(plugin.pluginName, \" more than once\");\n }\n });\n plugins.push(plugin);\n },\n pluginEvent: function pluginEvent(eventName, sortable, evt) {\n var _this = this;\n\n this.eventCanceled = false;\n\n evt.cancel = function () {\n _this.eventCanceled = true;\n };\n\n var eventNameGlobal = eventName + 'Global';\n plugins.forEach(function (plugin) {\n if (!sortable[plugin.pluginName]) return; // Fire global events if it exists in this sortable\n\n if (sortable[plugin.pluginName][eventNameGlobal]) {\n sortable[plugin.pluginName][eventNameGlobal](_objectSpread2({\n sortable: sortable\n }, evt));\n } // Only fire plugin event if plugin is enabled in this sortable,\n // and plugin has event defined\n\n\n if (sortable.options[plugin.pluginName] && sortable[plugin.pluginName][eventName]) {\n sortable[plugin.pluginName][eventName](_objectSpread2({\n sortable: sortable\n }, evt));\n }\n });\n },\n initializePlugins: function initializePlugins(sortable, el, defaults, options) {\n plugins.forEach(function (plugin) {\n var pluginName = plugin.pluginName;\n if (!sortable.options[pluginName] && !plugin.initializeByDefault) return;\n var initialized = new plugin(sortable, el, sortable.options);\n initialized.sortable = sortable;\n initialized.options = sortable.options;\n sortable[pluginName] = initialized; // Add default options from plugin\n\n _extends(defaults, initialized.defaults);\n });\n\n for (var option in sortable.options) {\n if (!sortable.options.hasOwnProperty(option)) continue;\n var modified = this.modifyOption(sortable, option, sortable.options[option]);\n\n if (typeof modified !== 'undefined') {\n sortable.options[option] = modified;\n }\n }\n },\n getEventProperties: function getEventProperties(name, sortable) {\n var eventProperties = {};\n plugins.forEach(function (plugin) {\n if (typeof plugin.eventProperties !== 'function') return;\n\n _extends(eventProperties, plugin.eventProperties.call(sortable[plugin.pluginName], name));\n });\n return eventProperties;\n },\n modifyOption: function modifyOption(sortable, name, value) {\n var modifiedValue;\n plugins.forEach(function (plugin) {\n // Plugin must exist on the Sortable\n if (!sortable[plugin.pluginName]) return; // If static option listener exists for this option, call in the context of the Sortable's instance of this plugin\n\n if (plugin.optionListeners && typeof plugin.optionListeners[name] === 'function') {\n modifiedValue = plugin.optionListeners[name].call(sortable[plugin.pluginName], value);\n }\n });\n return modifiedValue;\n }\n};\n\nfunction dispatchEvent(_ref) {\n var sortable = _ref.sortable,\n rootEl = _ref.rootEl,\n name = _ref.name,\n targetEl = _ref.targetEl,\n cloneEl = _ref.cloneEl,\n toEl = _ref.toEl,\n fromEl = _ref.fromEl,\n oldIndex = _ref.oldIndex,\n newIndex = _ref.newIndex,\n oldDraggableIndex = _ref.oldDraggableIndex,\n newDraggableIndex = _ref.newDraggableIndex,\n originalEvent = _ref.originalEvent,\n putSortable = _ref.putSortable,\n extraEventProperties = _ref.extraEventProperties;\n sortable = sortable || rootEl && rootEl[expando];\n if (!sortable) return;\n var evt,\n options = sortable.options,\n onName = 'on' + name.charAt(0).toUpperCase() + name.substr(1); // Support for new CustomEvent feature\n\n if (window.CustomEvent && !IE11OrLess && !Edge) {\n evt = new CustomEvent(name, {\n bubbles: true,\n cancelable: true\n });\n } else {\n evt = document.createEvent('Event');\n evt.initEvent(name, true, true);\n }\n\n evt.to = toEl || rootEl;\n evt.from = fromEl || rootEl;\n evt.item = targetEl || rootEl;\n evt.clone = cloneEl;\n evt.oldIndex = oldIndex;\n evt.newIndex = newIndex;\n evt.oldDraggableIndex = oldDraggableIndex;\n evt.newDraggableIndex = newDraggableIndex;\n evt.originalEvent = originalEvent;\n evt.pullMode = putSortable ? putSortable.lastPutMode : undefined;\n\n var allEventProperties = _objectSpread2(_objectSpread2({}, extraEventProperties), PluginManager.getEventProperties(name, sortable));\n\n for (var option in allEventProperties) {\n evt[option] = allEventProperties[option];\n }\n\n if (rootEl) {\n rootEl.dispatchEvent(evt);\n }\n\n if (options[onName]) {\n options[onName].call(sortable, evt);\n }\n}\n\nvar _excluded = [\"evt\"];\n\nvar pluginEvent = function pluginEvent(eventName, sortable) {\n var _ref = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {},\n originalEvent = _ref.evt,\n data = _objectWithoutProperties(_ref, _excluded);\n\n PluginManager.pluginEvent.bind(Sortable)(eventName, sortable, _objectSpread2({\n dragEl: dragEl,\n parentEl: parentEl,\n ghostEl: ghostEl,\n rootEl: rootEl,\n nextEl: nextEl,\n lastDownEl: lastDownEl,\n cloneEl: cloneEl,\n cloneHidden: cloneHidden,\n dragStarted: moved,\n putSortable: putSortable,\n activeSortable: Sortable.active,\n originalEvent: originalEvent,\n oldIndex: oldIndex,\n oldDraggableIndex: oldDraggableIndex,\n newIndex: newIndex,\n newDraggableIndex: newDraggableIndex,\n hideGhostForTarget: _hideGhostForTarget,\n unhideGhostForTarget: _unhideGhostForTarget,\n cloneNowHidden: function cloneNowHidden() {\n cloneHidden = true;\n },\n cloneNowShown: function cloneNowShown() {\n cloneHidden = false;\n },\n dispatchSortableEvent: function dispatchSortableEvent(name) {\n _dispatchEvent({\n sortable: sortable,\n name: name,\n originalEvent: originalEvent\n });\n }\n }, data));\n};\n\nfunction _dispatchEvent(info) {\n dispatchEvent(_objectSpread2({\n putSortable: putSortable,\n cloneEl: cloneEl,\n targetEl: dragEl,\n rootEl: rootEl,\n oldIndex: oldIndex,\n oldDraggableIndex: oldDraggableIndex,\n newIndex: newIndex,\n newDraggableIndex: newDraggableIndex\n }, info));\n}\n\nvar dragEl,\n parentEl,\n ghostEl,\n rootEl,\n nextEl,\n lastDownEl,\n cloneEl,\n cloneHidden,\n oldIndex,\n newIndex,\n oldDraggableIndex,\n newDraggableIndex,\n activeGroup,\n putSortable,\n awaitingDragStarted = false,\n ignoreNextClick = false,\n sortables = [],\n tapEvt,\n touchEvt,\n lastDx,\n lastDy,\n tapDistanceLeft,\n tapDistanceTop,\n moved,\n lastTarget,\n lastDirection,\n pastFirstInvertThresh = false,\n isCircumstantialInvert = false,\n targetMoveDistance,\n // For positioning ghost absolutely\nghostRelativeParent,\n ghostRelativeParentInitialScroll = [],\n // (left, top)\n_silent = false,\n savedInputChecked = [];\n/** @const */\n\nvar documentExists = typeof document !== 'undefined',\n PositionGhostAbsolutely = IOS,\n CSSFloatProperty = Edge || IE11OrLess ? 'cssFloat' : 'float',\n // This will not pass for IE9, because IE9 DnD only works on anchors\nsupportDraggable = documentExists && !ChromeForAndroid && !IOS && 'draggable' in document.createElement('div'),\n supportCssPointerEvents = function () {\n if (!documentExists) return; // false when <= IE11\n\n if (IE11OrLess) {\n return false;\n }\n\n var el = document.createElement('x');\n el.style.cssText = 'pointer-events:auto';\n return el.style.pointerEvents === 'auto';\n}(),\n _detectDirection = function _detectDirection(el, options) {\n var elCSS = css(el),\n elWidth = parseInt(elCSS.width) - parseInt(elCSS.paddingLeft) - parseInt(elCSS.paddingRight) - parseInt(elCSS.borderLeftWidth) - parseInt(elCSS.borderRightWidth),\n child1 = getChild(el, 0, options),\n child2 = getChild(el, 1, options),\n firstChildCSS = child1 && css(child1),\n secondChildCSS = child2 && css(child2),\n firstChildWidth = firstChildCSS && parseInt(firstChildCSS.marginLeft) + parseInt(firstChildCSS.marginRight) + getRect(child1).width,\n secondChildWidth = secondChildCSS && parseInt(secondChildCSS.marginLeft) + parseInt(secondChildCSS.marginRight) + getRect(child2).width;\n\n if (elCSS.display === 'flex') {\n return elCSS.flexDirection === 'column' || elCSS.flexDirection === 'column-reverse' ? 'vertical' : 'horizontal';\n }\n\n if (elCSS.display === 'grid') {\n return elCSS.gridTemplateColumns.split(' ').length <= 1 ? 'vertical' : 'horizontal';\n }\n\n if (child1 && firstChildCSS[\"float\"] && firstChildCSS[\"float\"] !== 'none') {\n var touchingSideChild2 = firstChildCSS[\"float\"] === 'left' ? 'left' : 'right';\n return child2 && (secondChildCSS.clear === 'both' || secondChildCSS.clear === touchingSideChild2) ? 'vertical' : 'horizontal';\n }\n\n return child1 && (firstChildCSS.display === 'block' || firstChildCSS.display === 'flex' || firstChildCSS.display === 'table' || firstChildCSS.display === 'grid' || firstChildWidth >= elWidth && elCSS[CSSFloatProperty] === 'none' || child2 && elCSS[CSSFloatProperty] === 'none' && firstChildWidth + secondChildWidth > elWidth) ? 'vertical' : 'horizontal';\n},\n _dragElInRowColumn = function _dragElInRowColumn(dragRect, targetRect, vertical) {\n var dragElS1Opp = vertical ? dragRect.left : dragRect.top,\n dragElS2Opp = vertical ? dragRect.right : dragRect.bottom,\n dragElOppLength = vertical ? dragRect.width : dragRect.height,\n targetS1Opp = vertical ? targetRect.left : targetRect.top,\n targetS2Opp = vertical ? targetRect.right : targetRect.bottom,\n targetOppLength = vertical ? targetRect.width : targetRect.height;\n return dragElS1Opp === targetS1Opp || dragElS2Opp === targetS2Opp || dragElS1Opp + dragElOppLength / 2 === targetS1Opp + targetOppLength / 2;\n},\n\n/**\n * Detects first nearest empty sortable to X and Y position using emptyInsertThreshold.\n * @param {Number} x X position\n * @param {Number} y Y position\n * @return {HTMLElement} Element of the first found nearest Sortable\n */\n_detectNearestEmptySortable = function _detectNearestEmptySortable(x, y) {\n var ret;\n sortables.some(function (sortable) {\n var threshold = sortable[expando].options.emptyInsertThreshold;\n if (!threshold || lastChild(sortable)) return;\n var rect = getRect(sortable),\n insideHorizontally = x >= rect.left - threshold && x <= rect.right + threshold,\n insideVertically = y >= rect.top - threshold && y <= rect.bottom + threshold;\n\n if (insideHorizontally && insideVertically) {\n return ret = sortable;\n }\n });\n return ret;\n},\n _prepareGroup = function _prepareGroup(options) {\n function toFn(value, pull) {\n return function (to, from, dragEl, evt) {\n var sameGroup = to.options.group.name && from.options.group.name && to.options.group.name === from.options.group.name;\n\n if (value == null && (pull || sameGroup)) {\n // Default pull value\n // Default pull and put value if same group\n return true;\n } else if (value == null || value === false) {\n return false;\n } else if (pull && value === 'clone') {\n return value;\n } else if (typeof value === 'function') {\n return toFn(value(to, from, dragEl, evt), pull)(to, from, dragEl, evt);\n } else {\n var otherGroup = (pull ? to : from).options.group.name;\n return value === true || typeof value === 'string' && value === otherGroup || value.join && value.indexOf(otherGroup) > -1;\n }\n };\n }\n\n var group = {};\n var originalGroup = options.group;\n\n if (!originalGroup || _typeof(originalGroup) != 'object') {\n originalGroup = {\n name: originalGroup\n };\n }\n\n group.name = originalGroup.name;\n group.checkPull = toFn(originalGroup.pull, true);\n group.checkPut = toFn(originalGroup.put);\n group.revertClone = originalGroup.revertClone;\n options.group = group;\n},\n _hideGhostForTarget = function _hideGhostForTarget() {\n if (!supportCssPointerEvents && ghostEl) {\n css(ghostEl, 'display', 'none');\n }\n},\n _unhideGhostForTarget = function _unhideGhostForTarget() {\n if (!supportCssPointerEvents && ghostEl) {\n css(ghostEl, 'display', '');\n }\n}; // #1184 fix - Prevent click event on fallback if dragged but item not changed position\n\n\nif (documentExists) {\n document.addEventListener('click', function (evt) {\n if (ignoreNextClick) {\n evt.preventDefault();\n evt.stopPropagation && evt.stopPropagation();\n evt.stopImmediatePropagation && evt.stopImmediatePropagation();\n ignoreNextClick = false;\n return false;\n }\n }, true);\n}\n\nvar nearestEmptyInsertDetectEvent = function nearestEmptyInsertDetectEvent(evt) {\n if (dragEl) {\n evt = evt.touches ? evt.touches[0] : evt;\n\n var nearest = _detectNearestEmptySortable(evt.clientX, evt.clientY);\n\n if (nearest) {\n // Create imitation event\n var event = {};\n\n for (var i in evt) {\n if (evt.hasOwnProperty(i)) {\n event[i] = evt[i];\n }\n }\n\n event.target = event.rootEl = nearest;\n event.preventDefault = void 0;\n event.stopPropagation = void 0;\n\n nearest[expando]._onDragOver(event);\n }\n }\n};\n\nvar _checkOutsideTargetEl = function _checkOutsideTargetEl(evt) {\n if (dragEl) {\n dragEl.parentNode[expando]._isOutsideThisEl(evt.target);\n }\n};\n/**\n * @class Sortable\n * @param {HTMLElement} el\n * @param {Object} [options]\n */\n\n\nfunction Sortable(el, options) {\n if (!(el && el.nodeType && el.nodeType === 1)) {\n throw \"Sortable: `el` must be an HTMLElement, not \".concat({}.toString.call(el));\n }\n\n this.el = el; // root element\n\n this.options = options = _extends({}, options); // Export instance\n\n el[expando] = this;\n var defaults = {\n group: null,\n sort: true,\n disabled: false,\n store: null,\n handle: null,\n draggable: /^[uo]l$/i.test(el.nodeName) ? '>li' : '>*',\n swapThreshold: 1,\n // percentage; 0 <= x <= 1\n invertSwap: false,\n // invert always\n invertedSwapThreshold: null,\n // will be set to same as swapThreshold if default\n removeCloneOnHide: true,\n direction: function direction() {\n return _detectDirection(el, this.options);\n },\n ghostClass: 'sortable-ghost',\n chosenClass: 'sortable-chosen',\n dragClass: 'sortable-drag',\n ignore: 'a, img',\n filter: null,\n preventOnFilter: true,\n animation: 0,\n easing: null,\n setData: function setData(dataTransfer, dragEl) {\n dataTransfer.setData('Text', dragEl.textContent);\n },\n dropBubble: false,\n dragoverBubble: false,\n dataIdAttr: 'data-id',\n delay: 0,\n delayOnTouchOnly: false,\n touchStartThreshold: (Number.parseInt ? Number : window).parseInt(window.devicePixelRatio, 10) || 1,\n forceFallback: false,\n fallbackClass: 'sortable-fallback',\n fallbackOnBody: false,\n fallbackTolerance: 0,\n fallbackOffset: {\n x: 0,\n y: 0\n },\n supportPointer: Sortable.supportPointer !== false && 'PointerEvent' in window && !Safari,\n emptyInsertThreshold: 5\n };\n PluginManager.initializePlugins(this, el, defaults); // Set default options\n\n for (var name in defaults) {\n !(name in options) && (options[name] = defaults[name]);\n }\n\n _prepareGroup(options); // Bind all private methods\n\n\n for (var fn in this) {\n if (fn.charAt(0) === '_' && typeof this[fn] === 'function') {\n this[fn] = this[fn].bind(this);\n }\n } // Setup drag mode\n\n\n this.nativeDraggable = options.forceFallback ? false : supportDraggable;\n\n if (this.nativeDraggable) {\n // Touch start threshold cannot be greater than the native dragstart threshold\n this.options.touchStartThreshold = 1;\n } // Bind events\n\n\n if (options.supportPointer) {\n on(el, 'pointerdown', this._onTapStart);\n } else {\n on(el, 'mousedown', this._onTapStart);\n on(el, 'touchstart', this._onTapStart);\n }\n\n if (this.nativeDraggable) {\n on(el, 'dragover', this);\n on(el, 'dragenter', this);\n }\n\n sortables.push(this.el); // Restore sorting\n\n options.store && options.store.get && this.sort(options.store.get(this) || []); // Add animation state manager\n\n _extends(this, AnimationStateManager());\n}\n\nSortable.prototype =\n/** @lends Sortable.prototype */\n{\n constructor: Sortable,\n _isOutsideThisEl: function _isOutsideThisEl(target) {\n if (!this.el.contains(target) && target !== this.el) {\n lastTarget = null;\n }\n },\n _getDirection: function _getDirection(evt, target) {\n return typeof this.options.direction === 'function' ? this.options.direction.call(this, evt, target, dragEl) : this.options.direction;\n },\n _onTapStart: function _onTapStart(\n /** Event|TouchEvent */\n evt) {\n if (!evt.cancelable) return;\n\n var _this = this,\n el = this.el,\n options = this.options,\n preventOnFilter = options.preventOnFilter,\n type = evt.type,\n touch = evt.touches && evt.touches[0] || evt.pointerType && evt.pointerType === 'touch' && evt,\n target = (touch || evt).target,\n originalTarget = evt.target.shadowRoot && (evt.path && evt.path[0] || evt.composedPath && evt.composedPath()[0]) || target,\n filter = options.filter;\n\n _saveInputCheckedState(el); // Don't trigger start event when an element is been dragged, otherwise the evt.oldindex always wrong when set option.group.\n\n\n if (dragEl) {\n return;\n }\n\n if (/mousedown|pointerdown/.test(type) && evt.button !== 0 || options.disabled) {\n return; // only left button and enabled\n } // cancel dnd if original target is content editable\n\n\n if (originalTarget.isContentEditable) {\n return;\n } // Safari ignores further event handling after mousedown\n\n\n if (!this.nativeDraggable && Safari && target && target.tagName.toUpperCase() === 'SELECT') {\n return;\n }\n\n target = closest(target, options.draggable, el, false);\n\n if (target && target.animated) {\n return;\n }\n\n if (lastDownEl === target) {\n // Ignoring duplicate `down`\n return;\n } // Get the index of the dragged element within its parent\n\n\n oldIndex = index(target);\n oldDraggableIndex = index(target, options.draggable); // Check filter\n\n if (typeof filter === 'function') {\n if (filter.call(this, evt, target, this)) {\n _dispatchEvent({\n sortable: _this,\n rootEl: originalTarget,\n name: 'filter',\n targetEl: target,\n toEl: el,\n fromEl: el\n });\n\n pluginEvent('filter', _this, {\n evt: evt\n });\n preventOnFilter && evt.cancelable && evt.preventDefault();\n return; // cancel dnd\n }\n } else if (filter) {\n filter = filter.split(',').some(function (criteria) {\n criteria = closest(originalTarget, criteria.trim(), el, false);\n\n if (criteria) {\n _dispatchEvent({\n sortable: _this,\n rootEl: criteria,\n name: 'filter',\n targetEl: target,\n fromEl: el,\n toEl: el\n });\n\n pluginEvent('filter', _this, {\n evt: evt\n });\n return true;\n }\n });\n\n if (filter) {\n preventOnFilter && evt.cancelable && evt.preventDefault();\n return; // cancel dnd\n }\n }\n\n if (options.handle && !closest(originalTarget, options.handle, el, false)) {\n return;\n } // Prepare `dragstart`\n\n\n this._prepareDragStart(evt, touch, target);\n },\n _prepareDragStart: function _prepareDragStart(\n /** Event */\n evt,\n /** Touch */\n touch,\n /** HTMLElement */\n target) {\n var _this = this,\n el = _this.el,\n options = _this.options,\n ownerDocument = el.ownerDocument,\n dragStartFn;\n\n if (target && !dragEl && target.parentNode === el) {\n var dragRect = getRect(target);\n rootEl = el;\n dragEl = target;\n parentEl = dragEl.parentNode;\n nextEl = dragEl.nextSibling;\n lastDownEl = target;\n activeGroup = options.group;\n Sortable.dragged = dragEl;\n tapEvt = {\n target: dragEl,\n clientX: (touch || evt).clientX,\n clientY: (touch || evt).clientY\n };\n tapDistanceLeft = tapEvt.clientX - dragRect.left;\n tapDistanceTop = tapEvt.clientY - dragRect.top;\n this._lastX = (touch || evt).clientX;\n this._lastY = (touch || evt).clientY;\n dragEl.style['will-change'] = 'all';\n\n dragStartFn = function dragStartFn() {\n pluginEvent('delayEnded', _this, {\n evt: evt\n });\n\n if (Sortable.eventCanceled) {\n _this._onDrop();\n\n return;\n } // Delayed drag has been triggered\n // we can re-enable the events: touchmove/mousemove\n\n\n _this._disableDelayedDragEvents();\n\n if (!FireFox && _this.nativeDraggable) {\n dragEl.draggable = true;\n } // Bind the events: dragstart/dragend\n\n\n _this._triggerDragStart(evt, touch); // Drag start event\n\n\n _dispatchEvent({\n sortable: _this,\n name: 'choose',\n originalEvent: evt\n }); // Chosen item\n\n\n toggleClass(dragEl, options.chosenClass, true);\n }; // Disable \"draggable\"\n\n\n options.ignore.split(',').forEach(function (criteria) {\n find(dragEl, criteria.trim(), _disableDraggable);\n });\n on(ownerDocument, 'dragover', nearestEmptyInsertDetectEvent);\n on(ownerDocument, 'mousemove', nearestEmptyInsertDetectEvent);\n on(ownerDocument, 'touchmove', nearestEmptyInsertDetectEvent);\n on(ownerDocument, 'mouseup', _this._onDrop);\n on(ownerDocument, 'touchend', _this._onDrop);\n on(ownerDocument, 'touchcancel', _this._onDrop); // Make dragEl draggable (must be before delay for FireFox)\n\n if (FireFox && this.nativeDraggable) {\n this.options.touchStartThreshold = 4;\n dragEl.draggable = true;\n }\n\n pluginEvent('delayStart', this, {\n evt: evt\n }); // Delay is impossible for native DnD in Edge or IE\n\n if (options.delay && (!options.delayOnTouchOnly || touch) && (!this.nativeDraggable || !(Edge || IE11OrLess))) {\n if (Sortable.eventCanceled) {\n this._onDrop();\n\n return;\n } // If the user moves the pointer or let go the click or touch\n // before the delay has been reached:\n // disable the delayed drag\n\n\n on(ownerDocument, 'mouseup', _this._disableDelayedDrag);\n on(ownerDocument, 'touchend', _this._disableDelayedDrag);\n on(ownerDocument, 'touchcancel', _this._disableDelayedDrag);\n on(ownerDocument, 'mousemove', _this._delayedDragTouchMoveHandler);\n on(ownerDocument, 'touchmove', _this._delayedDragTouchMoveHandler);\n options.supportPointer && on(ownerDocument, 'pointermove', _this._delayedDragTouchMoveHandler);\n _this._dragStartTimer = setTimeout(dragStartFn, options.delay);\n } else {\n dragStartFn();\n }\n }\n },\n _delayedDragTouchMoveHandler: function _delayedDragTouchMoveHandler(\n /** TouchEvent|PointerEvent **/\n e) {\n var touch = e.touches ? e.touches[0] : e;\n\n if (Math.max(Math.abs(touch.clientX - this._lastX), Math.abs(touch.clientY - this._lastY)) >= Math.floor(this.options.touchStartThreshold / (this.nativeDraggable && window.devicePixelRatio || 1))) {\n this._disableDelayedDrag();\n }\n },\n _disableDelayedDrag: function _disableDelayedDrag() {\n dragEl && _disableDraggable(dragEl);\n clearTimeout(this._dragStartTimer);\n\n this._disableDelayedDragEvents();\n },\n _disableDelayedDragEvents: function _disableDelayedDragEvents() {\n var ownerDocument = this.el.ownerDocument;\n off(ownerDocument, 'mouseup', this._disableDelayedDrag);\n off(ownerDocument, 'touchend', this._disableDelayedDrag);\n off(ownerDocument, 'touchcancel', this._disableDelayedDrag);\n off(ownerDocument, 'mousemove', this._delayedDragTouchMoveHandler);\n off(ownerDocument, 'touchmove', this._delayedDragTouchMoveHandler);\n off(ownerDocument, 'pointermove', this._delayedDragTouchMoveHandler);\n },\n _triggerDragStart: function _triggerDragStart(\n /** Event */\n evt,\n /** Touch */\n touch) {\n touch = touch || evt.pointerType == 'touch' && evt;\n\n if (!this.nativeDraggable || touch) {\n if (this.options.supportPointer) {\n on(document, 'pointermove', this._onTouchMove);\n } else if (touch) {\n on(document, 'touchmove', this._onTouchMove);\n } else {\n on(document, 'mousemove', this._onTouchMove);\n }\n } else {\n on(dragEl, 'dragend', this);\n on(rootEl, 'dragstart', this._onDragStart);\n }\n\n try {\n if (document.selection) {\n // Timeout neccessary for IE9\n _nextTick(function () {\n document.selection.empty();\n });\n } else {\n window.getSelection().removeAllRanges();\n }\n } catch (err) {}\n },\n _dragStarted: function _dragStarted(fallback, evt) {\n\n awaitingDragStarted = false;\n\n if (rootEl && dragEl) {\n pluginEvent('dragStarted', this, {\n evt: evt\n });\n\n if (this.nativeDraggable) {\n on(document, 'dragover', _checkOutsideTargetEl);\n }\n\n var options = this.options; // Apply effect\n\n !fallback && toggleClass(dragEl, options.dragClass, false);\n toggleClass(dragEl, options.ghostClass, true);\n Sortable.active = this;\n fallback && this._appendGhost(); // Drag start event\n\n _dispatchEvent({\n sortable: this,\n name: 'start',\n originalEvent: evt\n });\n } else {\n this._nulling();\n }\n },\n _emulateDragOver: function _emulateDragOver() {\n if (touchEvt) {\n this._lastX = touchEvt.clientX;\n this._lastY = touchEvt.clientY;\n\n _hideGhostForTarget();\n\n var target = document.elementFromPoint(touchEvt.clientX, touchEvt.clientY);\n var parent = target;\n\n while (target && target.shadowRoot) {\n target = target.shadowRoot.elementFromPoint(touchEvt.clientX, touchEvt.clientY);\n if (target === parent) break;\n parent = target;\n }\n\n dragEl.parentNode[expando]._isOutsideThisEl(target);\n\n if (parent) {\n do {\n if (parent[expando]) {\n var inserted = void 0;\n inserted = parent[expando]._onDragOver({\n clientX: touchEvt.clientX,\n clientY: touchEvt.clientY,\n target: target,\n rootEl: parent\n });\n\n if (inserted && !this.options.dragoverBubble) {\n break;\n }\n }\n\n target = parent; // store last element\n }\n /* jshint boss:true */\n while (parent = parent.parentNode);\n }\n\n _unhideGhostForTarget();\n }\n },\n _onTouchMove: function _onTouchMove(\n /**TouchEvent*/\n evt) {\n if (tapEvt) {\n var options = this.options,\n fallbackTolerance = options.fallbackTolerance,\n fallbackOffset = options.fallbackOffset,\n touch = evt.touches ? evt.touches[0] : evt,\n ghostMatrix = ghostEl && matrix(ghostEl, true),\n scaleX = ghostEl && ghostMatrix && ghostMatrix.a,\n scaleY = ghostEl && ghostMatrix && ghostMatrix.d,\n relativeScrollOffset = PositionGhostAbsolutely && ghostRelativeParent && getRelativeScrollOffset(ghostRelativeParent),\n dx = (touch.clientX - tapEvt.clientX + fallbackOffset.x) / (scaleX || 1) + (relativeScrollOffset ? relativeScrollOffset[0] - ghostRelativeParentInitialScroll[0] : 0) / (scaleX || 1),\n dy = (touch.clientY - tapEvt.clientY + fallbackOffset.y) / (scaleY || 1) + (relativeScrollOffset ? relativeScrollOffset[1] - ghostRelativeParentInitialScroll[1] : 0) / (scaleY || 1); // only set the status to dragging, when we are actually dragging\n\n if (!Sortable.active && !awaitingDragStarted) {\n if (fallbackTolerance && Math.max(Math.abs(touch.clientX - this._lastX), Math.abs(touch.clientY - this._lastY)) < fallbackTolerance) {\n return;\n }\n\n this._onDragStart(evt, true);\n }\n\n if (ghostEl) {\n if (ghostMatrix) {\n ghostMatrix.e += dx - (lastDx || 0);\n ghostMatrix.f += dy - (lastDy || 0);\n } else {\n ghostMatrix = {\n a: 1,\n b: 0,\n c: 0,\n d: 1,\n e: dx,\n f: dy\n };\n }\n\n var cssMatrix = \"matrix(\".concat(ghostMatrix.a, \",\").concat(ghostMatrix.b, \",\").concat(ghostMatrix.c, \",\").concat(ghostMatrix.d, \",\").concat(ghostMatrix.e, \",\").concat(ghostMatrix.f, \")\");\n css(ghostEl, 'webkitTransform', cssMatrix);\n css(ghostEl, 'mozTransform', cssMatrix);\n css(ghostEl, 'msTransform', cssMatrix);\n css(ghostEl, 'transform', cssMatrix);\n lastDx = dx;\n lastDy = dy;\n touchEvt = touch;\n }\n\n evt.cancelable && evt.preventDefault();\n }\n },\n _appendGhost: function _appendGhost() {\n // Bug if using scale(): https://stackoverflow.com/questions/2637058\n // Not being adjusted for\n if (!ghostEl) {\n var container = this.options.fallbackOnBody ? document.body : rootEl,\n rect = getRect(dragEl, true, PositionGhostAbsolutely, true, container),\n options = this.options; // Position absolutely\n\n if (PositionGhostAbsolutely) {\n // Get relatively positioned parent\n ghostRelativeParent = container;\n\n while (css(ghostRelativeParent, 'position') === 'static' && css(ghostRelativeParent, 'transform') === 'none' && ghostRelativeParent !== document) {\n ghostRelativeParent = ghostRelativeParent.parentNode;\n }\n\n if (ghostRelativeParent !== document.body && ghostRelativeParent !== document.documentElement) {\n if (ghostRelativeParent === document) ghostRelativeParent = getWindowScrollingElement();\n rect.top += ghostRelativeParent.scrollTop;\n rect.left += ghostRelativeParent.scrollLeft;\n } else {\n ghostRelativeParent = getWindowScrollingElement();\n }\n\n ghostRelativeParentInitialScroll = getRelativeScrollOffset(ghostRelativeParent);\n }\n\n ghostEl = dragEl.cloneNode(true);\n toggleClass(ghostEl, options.ghostClass, false);\n toggleClass(ghostEl, options.fallbackClass, true);\n toggleClass(ghostEl, options.dragClass, true);\n css(ghostEl, 'transition', '');\n css(ghostEl, 'transform', '');\n css(ghostEl, 'box-sizing', 'border-box');\n css(ghostEl, 'margin', 0);\n css(ghostEl, 'top', rect.top);\n css(ghostEl, 'left', rect.left);\n css(ghostEl, 'width', rect.width);\n css(ghostEl, 'height', rect.height);\n css(ghostEl, 'opacity', '0.8');\n css(ghostEl, 'position', PositionGhostAbsolutely ? 'absolute' : 'fixed');\n css(ghostEl, 'zIndex', '100000');\n css(ghostEl, 'pointerEvents', 'none');\n Sortable.ghost = ghostEl;\n container.appendChild(ghostEl); // Set transform-origin\n\n css(ghostEl, 'transform-origin', tapDistanceLeft / parseInt(ghostEl.style.width) * 100 + '% ' + tapDistanceTop / parseInt(ghostEl.style.height) * 100 + '%');\n }\n },\n _onDragStart: function _onDragStart(\n /**Event*/\n evt,\n /**boolean*/\n fallback) {\n var _this = this;\n\n var dataTransfer = evt.dataTransfer;\n var options = _this.options;\n pluginEvent('dragStart', this, {\n evt: evt\n });\n\n if (Sortable.eventCanceled) {\n this._onDrop();\n\n return;\n }\n\n pluginEvent('setupClone', this);\n\n if (!Sortable.eventCanceled) {\n cloneEl = clone(dragEl);\n cloneEl.draggable = false;\n cloneEl.style['will-change'] = '';\n\n this._hideClone();\n\n toggleClass(cloneEl, this.options.chosenClass, false);\n Sortable.clone = cloneEl;\n } // #1143: IFrame support workaround\n\n\n _this.cloneId = _nextTick(function () {\n pluginEvent('clone', _this);\n if (Sortable.eventCanceled) return;\n\n if (!_this.options.removeCloneOnHide) {\n rootEl.insertBefore(cloneEl, dragEl);\n }\n\n _this._hideClone();\n\n _dispatchEvent({\n sortable: _this,\n name: 'clone'\n });\n });\n !fallback && toggleClass(dragEl, options.dragClass, true); // Set proper drop events\n\n if (fallback) {\n ignoreNextClick = true;\n _this._loopId = setInterval(_this._emulateDragOver, 50);\n } else {\n // Undo what was set in _prepareDragStart before drag started\n off(document, 'mouseup', _this._onDrop);\n off(document, 'touchend', _this._onDrop);\n off(document, 'touchcancel', _this._onDrop);\n\n if (dataTransfer) {\n dataTransfer.effectAllowed = 'move';\n options.setData && options.setData.call(_this, dataTransfer, dragEl);\n }\n\n on(document, 'drop', _this); // #1276 fix:\n\n css(dragEl, 'transform', 'translateZ(0)');\n }\n\n awaitingDragStarted = true;\n _this._dragStartId = _nextTick(_this._dragStarted.bind(_this, fallback, evt));\n on(document, 'selectstart', _this);\n moved = true;\n\n if (Safari) {\n css(document.body, 'user-select', 'none');\n }\n },\n // Returns true - if no further action is needed (either inserted or another condition)\n _onDragOver: function _onDragOver(\n /**Event*/\n evt) {\n var el = this.el,\n target = evt.target,\n dragRect,\n targetRect,\n revert,\n options = this.options,\n group = options.group,\n activeSortable = Sortable.active,\n isOwner = activeGroup === group,\n canSort = options.sort,\n fromSortable = putSortable || activeSortable,\n vertical,\n _this = this,\n completedFired = false;\n\n if (_silent) return;\n\n function dragOverEvent(name, extra) {\n pluginEvent(name, _this, _objectSpread2({\n evt: evt,\n isOwner: isOwner,\n axis: vertical ? 'vertical' : 'horizontal',\n revert: revert,\n dragRect: dragRect,\n targetRect: targetRect,\n canSort: canSort,\n fromSortable: fromSortable,\n target: target,\n completed: completed,\n onMove: function onMove(target, after) {\n return _onMove(rootEl, el, dragEl, dragRect, target, getRect(target), evt, after);\n },\n changed: changed\n }, extra));\n } // Capture animation state\n\n\n function capture() {\n dragOverEvent('dragOverAnimationCapture');\n\n _this.captureAnimationState();\n\n if (_this !== fromSortable) {\n fromSortable.captureAnimationState();\n }\n } // Return invocation when dragEl is inserted (or completed)\n\n\n function completed(insertion) {\n dragOverEvent('dragOverCompleted', {\n insertion: insertion\n });\n\n if (insertion) {\n // Clones must be hidden before folding animation to capture dragRectAbsolute properly\n if (isOwner) {\n activeSortable._hideClone();\n } else {\n activeSortable._showClone(_this);\n }\n\n if (_this !== fromSortable) {\n // Set ghost class to new sortable's ghost class\n toggleClass(dragEl, putSortable ? putSortable.options.ghostClass : activeSortable.options.ghostClass, false);\n toggleClass(dragEl, options.ghostClass, true);\n }\n\n if (putSortable !== _this && _this !== Sortable.active) {\n putSortable = _this;\n } else if (_this === Sortable.active && putSortable) {\n putSortable = null;\n } // Animation\n\n\n if (fromSortable === _this) {\n _this._ignoreWhileAnimating = target;\n }\n\n _this.animateAll(function () {\n dragOverEvent('dragOverAnimationComplete');\n _this._ignoreWhileAnimating = null;\n });\n\n if (_this !== fromSortable) {\n fromSortable.animateAll();\n fromSortable._ignoreWhileAnimating = null;\n }\n } // Null lastTarget if it is not inside a previously swapped element\n\n\n if (target === dragEl && !dragEl.animated || target === el && !target.animated) {\n lastTarget = null;\n } // no bubbling and not fallback\n\n\n if (!options.dragoverBubble && !evt.rootEl && target !== document) {\n dragEl.parentNode[expando]._isOutsideThisEl(evt.target); // Do not detect for empty insert if already inserted\n\n\n !insertion && nearestEmptyInsertDetectEvent(evt);\n }\n\n !options.dragoverBubble && evt.stopPropagation && evt.stopPropagation();\n return completedFired = true;\n } // Call when dragEl has been inserted\n\n\n function changed() {\n newIndex = index(dragEl);\n newDraggableIndex = index(dragEl, options.draggable);\n\n _dispatchEvent({\n sortable: _this,\n name: 'change',\n toEl: el,\n newIndex: newIndex,\n newDraggableIndex: newDraggableIndex,\n originalEvent: evt\n });\n }\n\n if (evt.preventDefault !== void 0) {\n evt.cancelable && evt.preventDefault();\n }\n\n target = closest(target, options.draggable, el, true);\n dragOverEvent('dragOver');\n if (Sortable.eventCanceled) return completedFired;\n\n if (dragEl.contains(evt.target) || target.animated && target.animatingX && target.animatingY || _this._ignoreWhileAnimating === target) {\n return completed(false);\n }\n\n ignoreNextClick = false;\n\n if (activeSortable && !options.disabled && (isOwner ? canSort || (revert = parentEl !== rootEl) // Reverting item into the original list\n : putSortable === this || (this.lastPutMode = activeGroup.checkPull(this, activeSortable, dragEl, evt)) && group.checkPut(this, activeSortable, dragEl, evt))) {\n vertical = this._getDirection(evt, target) === 'vertical';\n dragRect = getRect(dragEl);\n dragOverEvent('dragOverValid');\n if (Sortable.eventCanceled) return completedFired;\n\n if (revert) {\n parentEl = rootEl; // actualization\n\n capture();\n\n this._hideClone();\n\n dragOverEvent('revert');\n\n if (!Sortable.eventCanceled) {\n if (nextEl) {\n rootEl.insertBefore(dragEl, nextEl);\n } else {\n rootEl.appendChild(dragEl);\n }\n }\n\n return completed(true);\n }\n\n var elLastChild = lastChild(el, options.draggable);\n\n if (!elLastChild || _ghostIsLast(evt, vertical, this) && !elLastChild.animated) {\n // Insert to end of list\n // If already at end of list: Do not insert\n if (elLastChild === dragEl) {\n return completed(false);\n } // if there is a last element, it is the target\n\n\n if (elLastChild && el === evt.target) {\n target = elLastChild;\n }\n\n if (target) {\n targetRect = getRect(target);\n }\n\n if (_onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, !!target) !== false) {\n capture();\n el.appendChild(dragEl);\n parentEl = el; // actualization\n\n changed();\n return completed(true);\n }\n } else if (elLastChild && _ghostIsFirst(evt, vertical, this)) {\n // Insert to start of list\n var firstChild = getChild(el, 0, options, true);\n\n if (firstChild === dragEl) {\n return completed(false);\n }\n\n target = firstChild;\n targetRect = getRect(target);\n\n if (_onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, false) !== false) {\n capture();\n el.insertBefore(dragEl, firstChild);\n parentEl = el; // actualization\n\n changed();\n return completed(true);\n }\n } else if (target.parentNode === el) {\n targetRect = getRect(target);\n var direction = 0,\n targetBeforeFirstSwap,\n differentLevel = dragEl.parentNode !== el,\n differentRowCol = !_dragElInRowColumn(dragEl.animated && dragEl.toRect || dragRect, target.animated && target.toRect || targetRect, vertical),\n side1 = vertical ? 'top' : 'left',\n scrolledPastTop = isScrolledPast(target, 'top', 'top') || isScrolledPast(dragEl, 'top', 'top'),\n scrollBefore = scrolledPastTop ? scrolledPastTop.scrollTop : void 0;\n\n if (lastTarget !== target) {\n targetBeforeFirstSwap = targetRect[side1];\n pastFirstInvertThresh = false;\n isCircumstantialInvert = !differentRowCol && options.invertSwap || differentLevel;\n }\n\n direction = _getSwapDirection(evt, target, targetRect, vertical, differentRowCol ? 1 : options.swapThreshold, options.invertedSwapThreshold == null ? options.swapThreshold : options.invertedSwapThreshold, isCircumstantialInvert, lastTarget === target);\n var sibling;\n\n if (direction !== 0) {\n // Check if target is beside dragEl in respective direction (ignoring hidden elements)\n var dragIndex = index(dragEl);\n\n do {\n dragIndex -= direction;\n sibling = parentEl.children[dragIndex];\n } while (sibling && (css(sibling, 'display') === 'none' || sibling === ghostEl));\n } // If dragEl is already beside target: Do not insert\n\n\n if (direction === 0 || sibling === target) {\n return completed(false);\n }\n\n lastTarget = target;\n lastDirection = direction;\n var nextSibling = target.nextElementSibling,\n after = false;\n after = direction === 1;\n\n var moveVector = _onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, after);\n\n if (moveVector !== false) {\n if (moveVector === 1 || moveVector === -1) {\n after = moveVector === 1;\n }\n\n _silent = true;\n setTimeout(_unsilent, 30);\n capture();\n\n if (after && !nextSibling) {\n el.appendChild(dragEl);\n } else {\n target.parentNode.insertBefore(dragEl, after ? nextSibling : target);\n } // Undo chrome's scroll adjustment (has no effect on other browsers)\n\n\n if (scrolledPastTop) {\n scrollBy(scrolledPastTop, 0, scrollBefore - scrolledPastTop.scrollTop);\n }\n\n parentEl = dragEl.parentNode; // actualization\n // must be done before animation\n\n if (targetBeforeFirstSwap !== undefined && !isCircumstantialInvert) {\n targetMoveDistance = Math.abs(targetBeforeFirstSwap - getRect(target)[side1]);\n }\n\n changed();\n return completed(true);\n }\n }\n\n if (el.contains(dragEl)) {\n return completed(false);\n }\n }\n\n return false;\n },\n _ignoreWhileAnimating: null,\n _offMoveEvents: function _offMoveEvents() {\n off(document, 'mousemove', this._onTouchMove);\n off(document, 'touchmove', this._onTouchMove);\n off(document, 'pointermove', this._onTouchMove);\n off(document, 'dragover', nearestEmptyInsertDetectEvent);\n off(document, 'mousemove', nearestEmptyInsertDetectEvent);\n off(document, 'touchmove', nearestEmptyInsertDetectEvent);\n },\n _offUpEvents: function _offUpEvents() {\n var ownerDocument = this.el.ownerDocument;\n off(ownerDocument, 'mouseup', this._onDrop);\n off(ownerDocument, 'touchend', this._onDrop);\n off(ownerDocument, 'pointerup', this._onDrop);\n off(ownerDocument, 'touchcancel', this._onDrop);\n off(document, 'selectstart', this);\n },\n _onDrop: function _onDrop(\n /**Event*/\n evt) {\n var el = this.el,\n options = this.options; // Get the index of the dragged element within its parent\n\n newIndex = index(dragEl);\n newDraggableIndex = index(dragEl, options.draggable);\n pluginEvent('drop', this, {\n evt: evt\n });\n parentEl = dragEl && dragEl.parentNode; // Get again after plugin event\n\n newIndex = index(dragEl);\n newDraggableIndex = index(dragEl, options.draggable);\n\n if (Sortable.eventCanceled) {\n this._nulling();\n\n return;\n }\n\n awaitingDragStarted = false;\n isCircumstantialInvert = false;\n pastFirstInvertThresh = false;\n clearInterval(this._loopId);\n clearTimeout(this._dragStartTimer);\n\n _cancelNextTick(this.cloneId);\n\n _cancelNextTick(this._dragStartId); // Unbind events\n\n\n if (this.nativeDraggable) {\n off(document, 'drop', this);\n off(el, 'dragstart', this._onDragStart);\n }\n\n this._offMoveEvents();\n\n this._offUpEvents();\n\n if (Safari) {\n css(document.body, 'user-select', '');\n }\n\n css(dragEl, 'transform', '');\n\n if (evt) {\n if (moved) {\n evt.cancelable && evt.preventDefault();\n !options.dropBubble && evt.stopPropagation();\n }\n\n ghostEl && ghostEl.parentNode && ghostEl.parentNode.removeChild(ghostEl);\n\n if (rootEl === parentEl || putSortable && putSortable.lastPutMode !== 'clone') {\n // Remove clone(s)\n cloneEl && cloneEl.parentNode && cloneEl.parentNode.removeChild(cloneEl);\n }\n\n if (dragEl) {\n if (this.nativeDraggable) {\n off(dragEl, 'dragend', this);\n }\n\n _disableDraggable(dragEl);\n\n dragEl.style['will-change'] = ''; // Remove classes\n // ghostClass is added in dragStarted\n\n if (moved && !awaitingDragStarted) {\n toggleClass(dragEl, putSortable ? putSortable.options.ghostClass : this.options.ghostClass, false);\n }\n\n toggleClass(dragEl, this.options.chosenClass, false); // Drag stop event\n\n _dispatchEvent({\n sortable: this,\n name: 'unchoose',\n toEl: parentEl,\n newIndex: null,\n newDraggableIndex: null,\n originalEvent: evt\n });\n\n if (rootEl !== parentEl) {\n if (newIndex >= 0) {\n // Add event\n _dispatchEvent({\n rootEl: parentEl,\n name: 'add',\n toEl: parentEl,\n fromEl: rootEl,\n originalEvent: evt\n }); // Remove event\n\n\n _dispatchEvent({\n sortable: this,\n name: 'remove',\n toEl: parentEl,\n originalEvent: evt\n }); // drag from one list and drop into another\n\n\n _dispatchEvent({\n rootEl: parentEl,\n name: 'sort',\n toEl: parentEl,\n fromEl: rootEl,\n originalEvent: evt\n });\n\n _dispatchEvent({\n sortable: this,\n name: 'sort',\n toEl: parentEl,\n originalEvent: evt\n });\n }\n\n putSortable && putSortable.save();\n } else {\n if (newIndex !== oldIndex) {\n if (newIndex >= 0) {\n // drag & drop within the same list\n _dispatchEvent({\n sortable: this,\n name: 'update',\n toEl: parentEl,\n originalEvent: evt\n });\n\n _dispatchEvent({\n sortable: this,\n name: 'sort',\n toEl: parentEl,\n originalEvent: evt\n });\n }\n }\n }\n\n if (Sortable.active) {\n /* jshint eqnull:true */\n if (newIndex == null || newIndex === -1) {\n newIndex = oldIndex;\n newDraggableIndex = oldDraggableIndex;\n }\n\n _dispatchEvent({\n sortable: this,\n name: 'end',\n toEl: parentEl,\n originalEvent: evt\n }); // Save sorting\n\n\n this.save();\n }\n }\n }\n\n this._nulling();\n },\n _nulling: function _nulling() {\n pluginEvent('nulling', this);\n rootEl = dragEl = parentEl = ghostEl = nextEl = cloneEl = lastDownEl = cloneHidden = tapEvt = touchEvt = moved = newIndex = newDraggableIndex = oldIndex = oldDraggableIndex = lastTarget = lastDirection = putSortable = activeGroup = Sortable.dragged = Sortable.ghost = Sortable.clone = Sortable.active = null;\n savedInputChecked.forEach(function (el) {\n el.checked = true;\n });\n savedInputChecked.length = lastDx = lastDy = 0;\n },\n handleEvent: function handleEvent(\n /**Event*/\n evt) {\n switch (evt.type) {\n case 'drop':\n case 'dragend':\n this._onDrop(evt);\n\n break;\n\n case 'dragenter':\n case 'dragover':\n if (dragEl) {\n this._onDragOver(evt);\n\n _globalDragOver(evt);\n }\n\n break;\n\n case 'selectstart':\n evt.preventDefault();\n break;\n }\n },\n\n /**\n * Serializes the item into an array of string.\n * @returns {String[]}\n */\n toArray: function toArray() {\n var order = [],\n el,\n children = this.el.children,\n i = 0,\n n = children.length,\n options = this.options;\n\n for (; i < n; i++) {\n el = children[i];\n\n if (closest(el, options.draggable, this.el, false)) {\n order.push(el.getAttribute(options.dataIdAttr) || _generateId(el));\n }\n }\n\n return order;\n },\n\n /**\n * Sorts the elements according to the array.\n * @param {String[]} order order of the items\n */\n sort: function sort(order, useAnimation) {\n var items = {},\n rootEl = this.el;\n this.toArray().forEach(function (id, i) {\n var el = rootEl.children[i];\n\n if (closest(el, this.options.draggable, rootEl, false)) {\n items[id] = el;\n }\n }, this);\n useAnimation && this.captureAnimationState();\n order.forEach(function (id) {\n if (items[id]) {\n rootEl.removeChild(items[id]);\n rootEl.appendChild(items[id]);\n }\n });\n useAnimation && this.animateAll();\n },\n\n /**\n * Save the current sorting\n */\n save: function save() {\n var store = this.options.store;\n store && store.set && store.set(this);\n },\n\n /**\n * For each element in the set, get the first element that matches the selector by testing the element itself and traversing up through its ancestors in the DOM tree.\n * @param {HTMLElement} el\n * @param {String} [selector] default: `options.draggable`\n * @returns {HTMLElement|null}\n */\n closest: function closest$1(el, selector) {\n return closest(el, selector || this.options.draggable, this.el, false);\n },\n\n /**\n * Set/get option\n * @param {string} name\n * @param {*} [value]\n * @returns {*}\n */\n option: function option(name, value) {\n var options = this.options;\n\n if (value === void 0) {\n return options[name];\n } else {\n var modifiedValue = PluginManager.modifyOption(this, name, value);\n\n if (typeof modifiedValue !== 'undefined') {\n options[name] = modifiedValue;\n } else {\n options[name] = value;\n }\n\n if (name === 'group') {\n _prepareGroup(options);\n }\n }\n },\n\n /**\n * Destroy\n */\n destroy: function destroy() {\n pluginEvent('destroy', this);\n var el = this.el;\n el[expando] = null;\n off(el, 'mousedown', this._onTapStart);\n off(el, 'touchstart', this._onTapStart);\n off(el, 'pointerdown', this._onTapStart);\n\n if (this.nativeDraggable) {\n off(el, 'dragover', this);\n off(el, 'dragenter', this);\n } // Remove draggable attributes\n\n\n Array.prototype.forEach.call(el.querySelectorAll('[draggable]'), function (el) {\n el.removeAttribute('draggable');\n });\n\n this._onDrop();\n\n this._disableDelayedDragEvents();\n\n sortables.splice(sortables.indexOf(this.el), 1);\n this.el = el = null;\n },\n _hideClone: function _hideClone() {\n if (!cloneHidden) {\n pluginEvent('hideClone', this);\n if (Sortable.eventCanceled) return;\n css(cloneEl, 'display', 'none');\n\n if (this.options.removeCloneOnHide && cloneEl.parentNode) {\n cloneEl.parentNode.removeChild(cloneEl);\n }\n\n cloneHidden = true;\n }\n },\n _showClone: function _showClone(putSortable) {\n if (putSortable.lastPutMode !== 'clone') {\n this._hideClone();\n\n return;\n }\n\n if (cloneHidden) {\n pluginEvent('showClone', this);\n if (Sortable.eventCanceled) return; // show clone at dragEl or original position\n\n if (dragEl.parentNode == rootEl && !this.options.group.revertClone) {\n rootEl.insertBefore(cloneEl, dragEl);\n } else if (nextEl) {\n rootEl.insertBefore(cloneEl, nextEl);\n } else {\n rootEl.appendChild(cloneEl);\n }\n\n if (this.options.group.revertClone) {\n this.animate(dragEl, cloneEl);\n }\n\n css(cloneEl, 'display', '');\n cloneHidden = false;\n }\n }\n};\n\nfunction _globalDragOver(\n/**Event*/\nevt) {\n if (evt.dataTransfer) {\n evt.dataTransfer.dropEffect = 'move';\n }\n\n evt.cancelable && evt.preventDefault();\n}\n\nfunction _onMove(fromEl, toEl, dragEl, dragRect, targetEl, targetRect, originalEvent, willInsertAfter) {\n var evt,\n sortable = fromEl[expando],\n onMoveFn = sortable.options.onMove,\n retVal; // Support for new CustomEvent feature\n\n if (window.CustomEvent && !IE11OrLess && !Edge) {\n evt = new CustomEvent('move', {\n bubbles: true,\n cancelable: true\n });\n } else {\n evt = document.createEvent('Event');\n evt.initEvent('move', true, true);\n }\n\n evt.to = toEl;\n evt.from = fromEl;\n evt.dragged = dragEl;\n evt.draggedRect = dragRect;\n evt.related = targetEl || toEl;\n evt.relatedRect = targetRect || getRect(toEl);\n evt.willInsertAfter = willInsertAfter;\n evt.originalEvent = originalEvent;\n fromEl.dispatchEvent(evt);\n\n if (onMoveFn) {\n retVal = onMoveFn.call(sortable, evt, originalEvent);\n }\n\n return retVal;\n}\n\nfunction _disableDraggable(el) {\n el.draggable = false;\n}\n\nfunction _unsilent() {\n _silent = false;\n}\n\nfunction _ghostIsFirst(evt, vertical, sortable) {\n var rect = getRect(getChild(sortable.el, 0, sortable.options, true));\n var spacer = 10;\n return vertical ? evt.clientX < rect.left - spacer || evt.clientY < rect.top && evt.clientX < rect.right : evt.clientY < rect.top - spacer || evt.clientY < rect.bottom && evt.clientX < rect.left;\n}\n\nfunction _ghostIsLast(evt, vertical, sortable) {\n var rect = getRect(lastChild(sortable.el, sortable.options.draggable));\n var spacer = 10;\n return vertical ? evt.clientX > rect.right + spacer || evt.clientX <= rect.right && evt.clientY > rect.bottom && evt.clientX >= rect.left : evt.clientX > rect.right && evt.clientY > rect.top || evt.clientX <= rect.right && evt.clientY > rect.bottom + spacer;\n}\n\nfunction _getSwapDirection(evt, target, targetRect, vertical, swapThreshold, invertedSwapThreshold, invertSwap, isLastTarget) {\n var mouseOnAxis = vertical ? evt.clientY : evt.clientX,\n targetLength = vertical ? targetRect.height : targetRect.width,\n targetS1 = vertical ? targetRect.top : targetRect.left,\n targetS2 = vertical ? targetRect.bottom : targetRect.right,\n invert = false;\n\n if (!invertSwap) {\n // Never invert or create dragEl shadow when target movemenet causes mouse to move past the end of regular swapThreshold\n if (isLastTarget && targetMoveDistance < targetLength * swapThreshold) {\n // multiplied only by swapThreshold because mouse will already be inside target by (1 - threshold) * targetLength / 2\n // check if past first invert threshold on side opposite of lastDirection\n if (!pastFirstInvertThresh && (lastDirection === 1 ? mouseOnAxis > targetS1 + targetLength * invertedSwapThreshold / 2 : mouseOnAxis < targetS2 - targetLength * invertedSwapThreshold / 2)) {\n // past first invert threshold, do not restrict inverted threshold to dragEl shadow\n pastFirstInvertThresh = true;\n }\n\n if (!pastFirstInvertThresh) {\n // dragEl shadow (target move distance shadow)\n if (lastDirection === 1 ? mouseOnAxis < targetS1 + targetMoveDistance // over dragEl shadow\n : mouseOnAxis > targetS2 - targetMoveDistance) {\n return -lastDirection;\n }\n } else {\n invert = true;\n }\n } else {\n // Regular\n if (mouseOnAxis > targetS1 + targetLength * (1 - swapThreshold) / 2 && mouseOnAxis < targetS2 - targetLength * (1 - swapThreshold) / 2) {\n return _getInsertDirection(target);\n }\n }\n }\n\n invert = invert || invertSwap;\n\n if (invert) {\n // Invert of regular\n if (mouseOnAxis < targetS1 + targetLength * invertedSwapThreshold / 2 || mouseOnAxis > targetS2 - targetLength * invertedSwapThreshold / 2) {\n return mouseOnAxis > targetS1 + targetLength / 2 ? 1 : -1;\n }\n }\n\n return 0;\n}\n/**\n * Gets the direction dragEl must be swapped relative to target in order to make it\n * seem that dragEl has been \"inserted\" into that element's position\n * @param {HTMLElement} target The target whose position dragEl is being inserted at\n * @return {Number} Direction dragEl must be swapped\n */\n\n\nfunction _getInsertDirection(target) {\n if (index(dragEl) < index(target)) {\n return 1;\n } else {\n return -1;\n }\n}\n/**\n * Generate id\n * @param {HTMLElement} el\n * @returns {String}\n * @private\n */\n\n\nfunction _generateId(el) {\n var str = el.tagName + el.className + el.src + el.href + el.textContent,\n i = str.length,\n sum = 0;\n\n while (i--) {\n sum += str.charCodeAt(i);\n }\n\n return sum.toString(36);\n}\n\nfunction _saveInputCheckedState(root) {\n savedInputChecked.length = 0;\n var inputs = root.getElementsByTagName('input');\n var idx = inputs.length;\n\n while (idx--) {\n var el = inputs[idx];\n el.checked && savedInputChecked.push(el);\n }\n}\n\nfunction _nextTick(fn) {\n return setTimeout(fn, 0);\n}\n\nfunction _cancelNextTick(id) {\n return clearTimeout(id);\n} // Fixed #973:\n\n\nif (documentExists) {\n on(document, 'touchmove', function (evt) {\n if ((Sortable.active || awaitingDragStarted) && evt.cancelable) {\n evt.preventDefault();\n }\n });\n} // Export utils\n\n\nSortable.utils = {\n on: on,\n off: off,\n css: css,\n find: find,\n is: function is(el, selector) {\n return !!closest(el, selector, el, false);\n },\n extend: extend,\n throttle: throttle,\n closest: closest,\n toggleClass: toggleClass,\n clone: clone,\n index: index,\n nextTick: _nextTick,\n cancelNextTick: _cancelNextTick,\n detectDirection: _detectDirection,\n getChild: getChild\n};\n/**\n * Get the Sortable instance of an element\n * @param {HTMLElement} element The element\n * @return {Sortable|undefined} The instance of Sortable\n */\n\nSortable.get = function (element) {\n return element[expando];\n};\n/**\n * Mount a plugin to Sortable\n * @param {...SortablePlugin|SortablePlugin[]} plugins Plugins being mounted\n */\n\n\nSortable.mount = function () {\n for (var _len = arguments.length, plugins = new Array(_len), _key = 0; _key < _len; _key++) {\n plugins[_key] = arguments[_key];\n }\n\n if (plugins[0].constructor === Array) plugins = plugins[0];\n plugins.forEach(function (plugin) {\n if (!plugin.prototype || !plugin.prototype.constructor) {\n throw \"Sortable: Mounted plugin must be a constructor function, not \".concat({}.toString.call(plugin));\n }\n\n if (plugin.utils) Sortable.utils = _objectSpread2(_objectSpread2({}, Sortable.utils), plugin.utils);\n PluginManager.mount(plugin);\n });\n};\n/**\n * Create sortable instance\n * @param {HTMLElement} el\n * @param {Object} [options]\n */\n\n\nSortable.create = function (el, options) {\n return new Sortable(el, options);\n}; // Export\n\n\nSortable.version = version;\n\nvar autoScrolls = [],\n scrollEl,\n scrollRootEl,\n scrolling = false,\n lastAutoScrollX,\n lastAutoScrollY,\n touchEvt$1,\n pointerElemChangedInterval;\n\nfunction AutoScrollPlugin() {\n function AutoScroll() {\n this.defaults = {\n scroll: true,\n forceAutoScrollFallback: false,\n scrollSensitivity: 30,\n scrollSpeed: 10,\n bubbleScroll: true\n }; // Bind all private methods\n\n for (var fn in this) {\n if (fn.charAt(0) === '_' && typeof this[fn] === 'function') {\n this[fn] = this[fn].bind(this);\n }\n }\n }\n\n AutoScroll.prototype = {\n dragStarted: function dragStarted(_ref) {\n var originalEvent = _ref.originalEvent;\n\n if (this.sortable.nativeDraggable) {\n on(document, 'dragover', this._handleAutoScroll);\n } else {\n if (this.options.supportPointer) {\n on(document, 'pointermove', this._handleFallbackAutoScroll);\n } else if (originalEvent.touches) {\n on(document, 'touchmove', this._handleFallbackAutoScroll);\n } else {\n on(document, 'mousemove', this._handleFallbackAutoScroll);\n }\n }\n },\n dragOverCompleted: function dragOverCompleted(_ref2) {\n var originalEvent = _ref2.originalEvent;\n\n // For when bubbling is canceled and using fallback (fallback 'touchmove' always reached)\n if (!this.options.dragOverBubble && !originalEvent.rootEl) {\n this._handleAutoScroll(originalEvent);\n }\n },\n drop: function drop() {\n if (this.sortable.nativeDraggable) {\n off(document, 'dragover', this._handleAutoScroll);\n } else {\n off(document, 'pointermove', this._handleFallbackAutoScroll);\n off(document, 'touchmove', this._handleFallbackAutoScroll);\n off(document, 'mousemove', this._handleFallbackAutoScroll);\n }\n\n clearPointerElemChangedInterval();\n clearAutoScrolls();\n cancelThrottle();\n },\n nulling: function nulling() {\n touchEvt$1 = scrollRootEl = scrollEl = scrolling = pointerElemChangedInterval = lastAutoScrollX = lastAutoScrollY = null;\n autoScrolls.length = 0;\n },\n _handleFallbackAutoScroll: function _handleFallbackAutoScroll(evt) {\n this._handleAutoScroll(evt, true);\n },\n _handleAutoScroll: function _handleAutoScroll(evt, fallback) {\n var _this = this;\n\n var x = (evt.touches ? evt.touches[0] : evt).clientX,\n y = (evt.touches ? evt.touches[0] : evt).clientY,\n elem = document.elementFromPoint(x, y);\n touchEvt$1 = evt; // IE does not seem to have native autoscroll,\n // Edge's autoscroll seems too conditional,\n // MACOS Safari does not have autoscroll,\n // Firefox and Chrome are good\n\n if (fallback || this.options.forceAutoScrollFallback || Edge || IE11OrLess || Safari) {\n autoScroll(evt, this.options, elem, fallback); // Listener for pointer element change\n\n var ogElemScroller = getParentAutoScrollElement(elem, true);\n\n if (scrolling && (!pointerElemChangedInterval || x !== lastAutoScrollX || y !== lastAutoScrollY)) {\n pointerElemChangedInterval && clearPointerElemChangedInterval(); // Detect for pointer elem change, emulating native DnD behaviour\n\n pointerElemChangedInterval = setInterval(function () {\n var newElem = getParentAutoScrollElement(document.elementFromPoint(x, y), true);\n\n if (newElem !== ogElemScroller) {\n ogElemScroller = newElem;\n clearAutoScrolls();\n }\n\n autoScroll(evt, _this.options, newElem, fallback);\n }, 10);\n lastAutoScrollX = x;\n lastAutoScrollY = y;\n }\n } else {\n // if DnD is enabled (and browser has good autoscrolling), first autoscroll will already scroll, so get parent autoscroll of first autoscroll\n if (!this.options.bubbleScroll || getParentAutoScrollElement(elem, true) === getWindowScrollingElement()) {\n clearAutoScrolls();\n return;\n }\n\n autoScroll(evt, this.options, getParentAutoScrollElement(elem, false), false);\n }\n }\n };\n return _extends(AutoScroll, {\n pluginName: 'scroll',\n initializeByDefault: true\n });\n}\n\nfunction clearAutoScrolls() {\n autoScrolls.forEach(function (autoScroll) {\n clearInterval(autoScroll.pid);\n });\n autoScrolls = [];\n}\n\nfunction clearPointerElemChangedInterval() {\n clearInterval(pointerElemChangedInterval);\n}\n\nvar autoScroll = throttle(function (evt, options, rootEl, isFallback) {\n // Bug: https://bugzilla.mozilla.org/show_bug.cgi?id=505521\n if (!options.scroll) return;\n var x = (evt.touches ? evt.touches[0] : evt).clientX,\n y = (evt.touches ? evt.touches[0] : evt).clientY,\n sens = options.scrollSensitivity,\n speed = options.scrollSpeed,\n winScroller = getWindowScrollingElement();\n var scrollThisInstance = false,\n scrollCustomFn; // New scroll root, set scrollEl\n\n if (scrollRootEl !== rootEl) {\n scrollRootEl = rootEl;\n clearAutoScrolls();\n scrollEl = options.scroll;\n scrollCustomFn = options.scrollFn;\n\n if (scrollEl === true) {\n scrollEl = getParentAutoScrollElement(rootEl, true);\n }\n }\n\n var layersOut = 0;\n var currentParent = scrollEl;\n\n do {\n var el = currentParent,\n rect = getRect(el),\n top = rect.top,\n bottom = rect.bottom,\n left = rect.left,\n right = rect.right,\n width = rect.width,\n height = rect.height,\n canScrollX = void 0,\n canScrollY = void 0,\n scrollWidth = el.scrollWidth,\n scrollHeight = el.scrollHeight,\n elCSS = css(el),\n scrollPosX = el.scrollLeft,\n scrollPosY = el.scrollTop;\n\n if (el === winScroller) {\n canScrollX = width < scrollWidth && (elCSS.overflowX === 'auto' || elCSS.overflowX === 'scroll' || elCSS.overflowX === 'visible');\n canScrollY = height < scrollHeight && (elCSS.overflowY === 'auto' || elCSS.overflowY === 'scroll' || elCSS.overflowY === 'visible');\n } else {\n canScrollX = width < scrollWidth && (elCSS.overflowX === 'auto' || elCSS.overflowX === 'scroll');\n canScrollY = height < scrollHeight && (elCSS.overflowY === 'auto' || elCSS.overflowY === 'scroll');\n }\n\n var vx = canScrollX && (Math.abs(right - x) <= sens && scrollPosX + width < scrollWidth) - (Math.abs(left - x) <= sens && !!scrollPosX);\n var vy = canScrollY && (Math.abs(bottom - y) <= sens && scrollPosY + height < scrollHeight) - (Math.abs(top - y) <= sens && !!scrollPosY);\n\n if (!autoScrolls[layersOut]) {\n for (var i = 0; i <= layersOut; i++) {\n if (!autoScrolls[i]) {\n autoScrolls[i] = {};\n }\n }\n }\n\n if (autoScrolls[layersOut].vx != vx || autoScrolls[layersOut].vy != vy || autoScrolls[layersOut].el !== el) {\n autoScrolls[layersOut].el = el;\n autoScrolls[layersOut].vx = vx;\n autoScrolls[layersOut].vy = vy;\n clearInterval(autoScrolls[layersOut].pid);\n\n if (vx != 0 || vy != 0) {\n scrollThisInstance = true;\n /* jshint loopfunc:true */\n\n autoScrolls[layersOut].pid = setInterval(function () {\n // emulate drag over during autoscroll (fallback), emulating native DnD behaviour\n if (isFallback && this.layer === 0) {\n Sortable.active._onTouchMove(touchEvt$1); // To move ghost if it is positioned absolutely\n\n }\n\n var scrollOffsetY = autoScrolls[this.layer].vy ? autoScrolls[this.layer].vy * speed : 0;\n var scrollOffsetX = autoScrolls[this.layer].vx ? autoScrolls[this.layer].vx * speed : 0;\n\n if (typeof scrollCustomFn === 'function') {\n if (scrollCustomFn.call(Sortable.dragged.parentNode[expando], scrollOffsetX, scrollOffsetY, evt, touchEvt$1, autoScrolls[this.layer].el) !== 'continue') {\n return;\n }\n }\n\n scrollBy(autoScrolls[this.layer].el, scrollOffsetX, scrollOffsetY);\n }.bind({\n layer: layersOut\n }), 24);\n }\n }\n\n layersOut++;\n } while (options.bubbleScroll && currentParent !== winScroller && (currentParent = getParentAutoScrollElement(currentParent, false)));\n\n scrolling = scrollThisInstance; // in case another function catches scrolling as false in between when it is not\n}, 30);\n\nvar drop = function drop(_ref) {\n var originalEvent = _ref.originalEvent,\n putSortable = _ref.putSortable,\n dragEl = _ref.dragEl,\n activeSortable = _ref.activeSortable,\n dispatchSortableEvent = _ref.dispatchSortableEvent,\n hideGhostForTarget = _ref.hideGhostForTarget,\n unhideGhostForTarget = _ref.unhideGhostForTarget;\n if (!originalEvent) return;\n var toSortable = putSortable || activeSortable;\n hideGhostForTarget();\n var touch = originalEvent.changedTouches && originalEvent.changedTouches.length ? originalEvent.changedTouches[0] : originalEvent;\n var target = document.elementFromPoint(touch.clientX, touch.clientY);\n unhideGhostForTarget();\n\n if (toSortable && !toSortable.el.contains(target)) {\n dispatchSortableEvent('spill');\n this.onSpill({\n dragEl: dragEl,\n putSortable: putSortable\n });\n }\n};\n\nfunction Revert() {}\n\nRevert.prototype = {\n startIndex: null,\n dragStart: function dragStart(_ref2) {\n var oldDraggableIndex = _ref2.oldDraggableIndex;\n this.startIndex = oldDraggableIndex;\n },\n onSpill: function onSpill(_ref3) {\n var dragEl = _ref3.dragEl,\n putSortable = _ref3.putSortable;\n this.sortable.captureAnimationState();\n\n if (putSortable) {\n putSortable.captureAnimationState();\n }\n\n var nextSibling = getChild(this.sortable.el, this.startIndex, this.options);\n\n if (nextSibling) {\n this.sortable.el.insertBefore(dragEl, nextSibling);\n } else {\n this.sortable.el.appendChild(dragEl);\n }\n\n this.sortable.animateAll();\n\n if (putSortable) {\n putSortable.animateAll();\n }\n },\n drop: drop\n};\n\n_extends(Revert, {\n pluginName: 'revertOnSpill'\n});\n\nfunction Remove() {}\n\nRemove.prototype = {\n onSpill: function onSpill(_ref4) {\n var dragEl = _ref4.dragEl,\n putSortable = _ref4.putSortable;\n var parentSortable = putSortable || this.sortable;\n parentSortable.captureAnimationState();\n dragEl.parentNode && dragEl.parentNode.removeChild(dragEl);\n parentSortable.animateAll();\n },\n drop: drop\n};\n\n_extends(Remove, {\n pluginName: 'removeOnSpill'\n});\n\nvar lastSwapEl;\n\nfunction SwapPlugin() {\n function Swap() {\n this.defaults = {\n swapClass: 'sortable-swap-highlight'\n };\n }\n\n Swap.prototype = {\n dragStart: function dragStart(_ref) {\n var dragEl = _ref.dragEl;\n lastSwapEl = dragEl;\n },\n dragOverValid: function dragOverValid(_ref2) {\n var completed = _ref2.completed,\n target = _ref2.target,\n onMove = _ref2.onMove,\n activeSortable = _ref2.activeSortable,\n changed = _ref2.changed,\n cancel = _ref2.cancel;\n if (!activeSortable.options.swap) return;\n var el = this.sortable.el,\n options = this.options;\n\n if (target && target !== el) {\n var prevSwapEl = lastSwapEl;\n\n if (onMove(target) !== false) {\n toggleClass(target, options.swapClass, true);\n lastSwapEl = target;\n } else {\n lastSwapEl = null;\n }\n\n if (prevSwapEl && prevSwapEl !== lastSwapEl) {\n toggleClass(prevSwapEl, options.swapClass, false);\n }\n }\n\n changed();\n completed(true);\n cancel();\n },\n drop: function drop(_ref3) {\n var activeSortable = _ref3.activeSortable,\n putSortable = _ref3.putSortable,\n dragEl = _ref3.dragEl;\n var toSortable = putSortable || this.sortable;\n var options = this.options;\n lastSwapEl && toggleClass(lastSwapEl, options.swapClass, false);\n\n if (lastSwapEl && (options.swap || putSortable && putSortable.options.swap)) {\n if (dragEl !== lastSwapEl) {\n toSortable.captureAnimationState();\n if (toSortable !== activeSortable) activeSortable.captureAnimationState();\n swapNodes(dragEl, lastSwapEl);\n toSortable.animateAll();\n if (toSortable !== activeSortable) activeSortable.animateAll();\n }\n }\n },\n nulling: function nulling() {\n lastSwapEl = null;\n }\n };\n return _extends(Swap, {\n pluginName: 'swap',\n eventProperties: function eventProperties() {\n return {\n swapItem: lastSwapEl\n };\n }\n });\n}\n\nfunction swapNodes(n1, n2) {\n var p1 = n1.parentNode,\n p2 = n2.parentNode,\n i1,\n i2;\n if (!p1 || !p2 || p1.isEqualNode(n2) || p2.isEqualNode(n1)) return;\n i1 = index(n1);\n i2 = index(n2);\n\n if (p1.isEqualNode(p2) && i1 < i2) {\n i2++;\n }\n\n p1.insertBefore(n2, p1.children[i1]);\n p2.insertBefore(n1, p2.children[i2]);\n}\n\nvar multiDragElements = [],\n multiDragClones = [],\n lastMultiDragSelect,\n // for selection with modifier key down (SHIFT)\nmultiDragSortable,\n initialFolding = false,\n // Initial multi-drag fold when drag started\nfolding = false,\n // Folding any other time\ndragStarted = false,\n dragEl$1,\n clonesFromRect,\n clonesHidden;\n\nfunction MultiDragPlugin() {\n function MultiDrag(sortable) {\n // Bind all private methods\n for (var fn in this) {\n if (fn.charAt(0) === '_' && typeof this[fn] === 'function') {\n this[fn] = this[fn].bind(this);\n }\n }\n\n if (sortable.options.supportPointer) {\n on(document, 'pointerup', this._deselectMultiDrag);\n } else {\n on(document, 'mouseup', this._deselectMultiDrag);\n on(document, 'touchend', this._deselectMultiDrag);\n }\n\n on(document, 'keydown', this._checkKeyDown);\n on(document, 'keyup', this._checkKeyUp);\n this.defaults = {\n selectedClass: 'sortable-selected',\n multiDragKey: null,\n setData: function setData(dataTransfer, dragEl) {\n var data = '';\n\n if (multiDragElements.length && multiDragSortable === sortable) {\n multiDragElements.forEach(function (multiDragElement, i) {\n data += (!i ? '' : ', ') + multiDragElement.textContent;\n });\n } else {\n data = dragEl.textContent;\n }\n\n dataTransfer.setData('Text', data);\n }\n };\n }\n\n MultiDrag.prototype = {\n multiDragKeyDown: false,\n isMultiDrag: false,\n delayStartGlobal: function delayStartGlobal(_ref) {\n var dragged = _ref.dragEl;\n dragEl$1 = dragged;\n },\n delayEnded: function delayEnded() {\n this.isMultiDrag = ~multiDragElements.indexOf(dragEl$1);\n },\n setupClone: function setupClone(_ref2) {\n var sortable = _ref2.sortable,\n cancel = _ref2.cancel;\n if (!this.isMultiDrag) return;\n\n for (var i = 0; i < multiDragElements.length; i++) {\n multiDragClones.push(clone(multiDragElements[i]));\n multiDragClones[i].sortableIndex = multiDragElements[i].sortableIndex;\n multiDragClones[i].draggable = false;\n multiDragClones[i].style['will-change'] = '';\n toggleClass(multiDragClones[i], this.options.selectedClass, false);\n multiDragElements[i] === dragEl$1 && toggleClass(multiDragClones[i], this.options.chosenClass, false);\n }\n\n sortable._hideClone();\n\n cancel();\n },\n clone: function clone(_ref3) {\n var sortable = _ref3.sortable,\n rootEl = _ref3.rootEl,\n dispatchSortableEvent = _ref3.dispatchSortableEvent,\n cancel = _ref3.cancel;\n if (!this.isMultiDrag) return;\n\n if (!this.options.removeCloneOnHide) {\n if (multiDragElements.length && multiDragSortable === sortable) {\n insertMultiDragClones(true, rootEl);\n dispatchSortableEvent('clone');\n cancel();\n }\n }\n },\n showClone: function showClone(_ref4) {\n var cloneNowShown = _ref4.cloneNowShown,\n rootEl = _ref4.rootEl,\n cancel = _ref4.cancel;\n if (!this.isMultiDrag) return;\n insertMultiDragClones(false, rootEl);\n multiDragClones.forEach(function (clone) {\n css(clone, 'display', '');\n });\n cloneNowShown();\n clonesHidden = false;\n cancel();\n },\n hideClone: function hideClone(_ref5) {\n var _this = this;\n\n var sortable = _ref5.sortable,\n cloneNowHidden = _ref5.cloneNowHidden,\n cancel = _ref5.cancel;\n if (!this.isMultiDrag) return;\n multiDragClones.forEach(function (clone) {\n css(clone, 'display', 'none');\n\n if (_this.options.removeCloneOnHide && clone.parentNode) {\n clone.parentNode.removeChild(clone);\n }\n });\n cloneNowHidden();\n clonesHidden = true;\n cancel();\n },\n dragStartGlobal: function dragStartGlobal(_ref6) {\n var sortable = _ref6.sortable;\n\n if (!this.isMultiDrag && multiDragSortable) {\n multiDragSortable.multiDrag._deselectMultiDrag();\n }\n\n multiDragElements.forEach(function (multiDragElement) {\n multiDragElement.sortableIndex = index(multiDragElement);\n }); // Sort multi-drag elements\n\n multiDragElements = multiDragElements.sort(function (a, b) {\n return a.sortableIndex - b.sortableIndex;\n });\n dragStarted = true;\n },\n dragStarted: function dragStarted(_ref7) {\n var _this2 = this;\n\n var sortable = _ref7.sortable;\n if (!this.isMultiDrag) return;\n\n if (this.options.sort) {\n // Capture rects,\n // hide multi drag elements (by positioning them absolute),\n // set multi drag elements rects to dragRect,\n // show multi drag elements,\n // animate to rects,\n // unset rects & remove from DOM\n sortable.captureAnimationState();\n\n if (this.options.animation) {\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement === dragEl$1) return;\n css(multiDragElement, 'position', 'absolute');\n });\n var dragRect = getRect(dragEl$1, false, true, true);\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement === dragEl$1) return;\n setRect(multiDragElement, dragRect);\n });\n folding = true;\n initialFolding = true;\n }\n }\n\n sortable.animateAll(function () {\n folding = false;\n initialFolding = false;\n\n if (_this2.options.animation) {\n multiDragElements.forEach(function (multiDragElement) {\n unsetRect(multiDragElement);\n });\n } // Remove all auxiliary multidrag items from el, if sorting enabled\n\n\n if (_this2.options.sort) {\n removeMultiDragElements();\n }\n });\n },\n dragOver: function dragOver(_ref8) {\n var target = _ref8.target,\n completed = _ref8.completed,\n cancel = _ref8.cancel;\n\n if (folding && ~multiDragElements.indexOf(target)) {\n completed(false);\n cancel();\n }\n },\n revert: function revert(_ref9) {\n var fromSortable = _ref9.fromSortable,\n rootEl = _ref9.rootEl,\n sortable = _ref9.sortable,\n dragRect = _ref9.dragRect;\n\n if (multiDragElements.length > 1) {\n // Setup unfold animation\n multiDragElements.forEach(function (multiDragElement) {\n sortable.addAnimationState({\n target: multiDragElement,\n rect: folding ? getRect(multiDragElement) : dragRect\n });\n unsetRect(multiDragElement);\n multiDragElement.fromRect = dragRect;\n fromSortable.removeAnimationState(multiDragElement);\n });\n folding = false;\n insertMultiDragElements(!this.options.removeCloneOnHide, rootEl);\n }\n },\n dragOverCompleted: function dragOverCompleted(_ref10) {\n var sortable = _ref10.sortable,\n isOwner = _ref10.isOwner,\n insertion = _ref10.insertion,\n activeSortable = _ref10.activeSortable,\n parentEl = _ref10.parentEl,\n putSortable = _ref10.putSortable;\n var options = this.options;\n\n if (insertion) {\n // Clones must be hidden before folding animation to capture dragRectAbsolute properly\n if (isOwner) {\n activeSortable._hideClone();\n }\n\n initialFolding = false; // If leaving sort:false root, or already folding - Fold to new location\n\n if (options.animation && multiDragElements.length > 1 && (folding || !isOwner && !activeSortable.options.sort && !putSortable)) {\n // Fold: Set all multi drag elements's rects to dragEl's rect when multi-drag elements are invisible\n var dragRectAbsolute = getRect(dragEl$1, false, true, true);\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement === dragEl$1) return;\n setRect(multiDragElement, dragRectAbsolute); // Move element(s) to end of parentEl so that it does not interfere with multi-drag clones insertion if they are inserted\n // while folding, and so that we can capture them again because old sortable will no longer be fromSortable\n\n parentEl.appendChild(multiDragElement);\n });\n folding = true;\n } // Clones must be shown (and check to remove multi drags) after folding when interfering multiDragElements are moved out\n\n\n if (!isOwner) {\n // Only remove if not folding (folding will remove them anyways)\n if (!folding) {\n removeMultiDragElements();\n }\n\n if (multiDragElements.length > 1) {\n var clonesHiddenBefore = clonesHidden;\n\n activeSortable._showClone(sortable); // Unfold animation for clones if showing from hidden\n\n\n if (activeSortable.options.animation && !clonesHidden && clonesHiddenBefore) {\n multiDragClones.forEach(function (clone) {\n activeSortable.addAnimationState({\n target: clone,\n rect: clonesFromRect\n });\n clone.fromRect = clonesFromRect;\n clone.thisAnimationDuration = null;\n });\n }\n } else {\n activeSortable._showClone(sortable);\n }\n }\n }\n },\n dragOverAnimationCapture: function dragOverAnimationCapture(_ref11) {\n var dragRect = _ref11.dragRect,\n isOwner = _ref11.isOwner,\n activeSortable = _ref11.activeSortable;\n multiDragElements.forEach(function (multiDragElement) {\n multiDragElement.thisAnimationDuration = null;\n });\n\n if (activeSortable.options.animation && !isOwner && activeSortable.multiDrag.isMultiDrag) {\n clonesFromRect = _extends({}, dragRect);\n var dragMatrix = matrix(dragEl$1, true);\n clonesFromRect.top -= dragMatrix.f;\n clonesFromRect.left -= dragMatrix.e;\n }\n },\n dragOverAnimationComplete: function dragOverAnimationComplete() {\n if (folding) {\n folding = false;\n removeMultiDragElements();\n }\n },\n drop: function drop(_ref12) {\n var evt = _ref12.originalEvent,\n rootEl = _ref12.rootEl,\n parentEl = _ref12.parentEl,\n sortable = _ref12.sortable,\n dispatchSortableEvent = _ref12.dispatchSortableEvent,\n oldIndex = _ref12.oldIndex,\n putSortable = _ref12.putSortable;\n var toSortable = putSortable || this.sortable;\n if (!evt) return;\n var options = this.options,\n children = parentEl.children; // Multi-drag selection\n\n if (!dragStarted) {\n if (options.multiDragKey && !this.multiDragKeyDown) {\n this._deselectMultiDrag();\n }\n\n toggleClass(dragEl$1, options.selectedClass, !~multiDragElements.indexOf(dragEl$1));\n\n if (!~multiDragElements.indexOf(dragEl$1)) {\n multiDragElements.push(dragEl$1);\n dispatchEvent({\n sortable: sortable,\n rootEl: rootEl,\n name: 'select',\n targetEl: dragEl$1,\n originalEvt: evt\n }); // Modifier activated, select from last to dragEl\n\n if (evt.shiftKey && lastMultiDragSelect && sortable.el.contains(lastMultiDragSelect)) {\n var lastIndex = index(lastMultiDragSelect),\n currentIndex = index(dragEl$1);\n\n if (~lastIndex && ~currentIndex && lastIndex !== currentIndex) {\n // Must include lastMultiDragSelect (select it), in case modified selection from no selection\n // (but previous selection existed)\n var n, i;\n\n if (currentIndex > lastIndex) {\n i = lastIndex;\n n = currentIndex;\n } else {\n i = currentIndex;\n n = lastIndex + 1;\n }\n\n for (; i < n; i++) {\n if (~multiDragElements.indexOf(children[i])) continue;\n toggleClass(children[i], options.selectedClass, true);\n multiDragElements.push(children[i]);\n dispatchEvent({\n sortable: sortable,\n rootEl: rootEl,\n name: 'select',\n targetEl: children[i],\n originalEvt: evt\n });\n }\n }\n } else {\n lastMultiDragSelect = dragEl$1;\n }\n\n multiDragSortable = toSortable;\n } else {\n multiDragElements.splice(multiDragElements.indexOf(dragEl$1), 1);\n lastMultiDragSelect = null;\n dispatchEvent({\n sortable: sortable,\n rootEl: rootEl,\n name: 'deselect',\n targetEl: dragEl$1,\n originalEvt: evt\n });\n }\n } // Multi-drag drop\n\n\n if (dragStarted && this.isMultiDrag) {\n folding = false; // Do not \"unfold\" after around dragEl if reverted\n\n if ((parentEl[expando].options.sort || parentEl !== rootEl) && multiDragElements.length > 1) {\n var dragRect = getRect(dragEl$1),\n multiDragIndex = index(dragEl$1, ':not(.' + this.options.selectedClass + ')');\n if (!initialFolding && options.animation) dragEl$1.thisAnimationDuration = null;\n toSortable.captureAnimationState();\n\n if (!initialFolding) {\n if (options.animation) {\n dragEl$1.fromRect = dragRect;\n multiDragElements.forEach(function (multiDragElement) {\n multiDragElement.thisAnimationDuration = null;\n\n if (multiDragElement !== dragEl$1) {\n var rect = folding ? getRect(multiDragElement) : dragRect;\n multiDragElement.fromRect = rect; // Prepare unfold animation\n\n toSortable.addAnimationState({\n target: multiDragElement,\n rect: rect\n });\n }\n });\n } // Multi drag elements are not necessarily removed from the DOM on drop, so to reinsert\n // properly they must all be removed\n\n\n removeMultiDragElements();\n multiDragElements.forEach(function (multiDragElement) {\n if (children[multiDragIndex]) {\n parentEl.insertBefore(multiDragElement, children[multiDragIndex]);\n } else {\n parentEl.appendChild(multiDragElement);\n }\n\n multiDragIndex++;\n }); // If initial folding is done, the elements may have changed position because they are now\n // unfolding around dragEl, even though dragEl may not have his index changed, so update event\n // must be fired here as Sortable will not.\n\n if (oldIndex === index(dragEl$1)) {\n var update = false;\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement.sortableIndex !== index(multiDragElement)) {\n update = true;\n return;\n }\n });\n\n if (update) {\n dispatchSortableEvent('update');\n }\n }\n } // Must be done after capturing individual rects (scroll bar)\n\n\n multiDragElements.forEach(function (multiDragElement) {\n unsetRect(multiDragElement);\n });\n toSortable.animateAll();\n }\n\n multiDragSortable = toSortable;\n } // Remove clones if necessary\n\n\n if (rootEl === parentEl || putSortable && putSortable.lastPutMode !== 'clone') {\n multiDragClones.forEach(function (clone) {\n clone.parentNode && clone.parentNode.removeChild(clone);\n });\n }\n },\n nullingGlobal: function nullingGlobal() {\n this.isMultiDrag = dragStarted = false;\n multiDragClones.length = 0;\n },\n destroyGlobal: function destroyGlobal() {\n this._deselectMultiDrag();\n\n off(document, 'pointerup', this._deselectMultiDrag);\n off(document, 'mouseup', this._deselectMultiDrag);\n off(document, 'touchend', this._deselectMultiDrag);\n off(document, 'keydown', this._checkKeyDown);\n off(document, 'keyup', this._checkKeyUp);\n },\n _deselectMultiDrag: function _deselectMultiDrag(evt) {\n if (typeof dragStarted !== \"undefined\" && dragStarted) return; // Only deselect if selection is in this sortable\n\n if (multiDragSortable !== this.sortable) return; // Only deselect if target is not item in this sortable\n\n if (evt && closest(evt.target, this.options.draggable, this.sortable.el, false)) return; // Only deselect if left click\n\n if (evt && evt.button !== 0) return;\n\n while (multiDragElements.length) {\n var el = multiDragElements[0];\n toggleClass(el, this.options.selectedClass, false);\n multiDragElements.shift();\n dispatchEvent({\n sortable: this.sortable,\n rootEl: this.sortable.el,\n name: 'deselect',\n targetEl: el,\n originalEvt: evt\n });\n }\n },\n _checkKeyDown: function _checkKeyDown(evt) {\n if (evt.key === this.options.multiDragKey) {\n this.multiDragKeyDown = true;\n }\n },\n _checkKeyUp: function _checkKeyUp(evt) {\n if (evt.key === this.options.multiDragKey) {\n this.multiDragKeyDown = false;\n }\n }\n };\n return _extends(MultiDrag, {\n // Static methods & properties\n pluginName: 'multiDrag',\n utils: {\n /**\n * Selects the provided multi-drag item\n * @param {HTMLElement} el The element to be selected\n */\n select: function select(el) {\n var sortable = el.parentNode[expando];\n if (!sortable || !sortable.options.multiDrag || ~multiDragElements.indexOf(el)) return;\n\n if (multiDragSortable && multiDragSortable !== sortable) {\n multiDragSortable.multiDrag._deselectMultiDrag();\n\n multiDragSortable = sortable;\n }\n\n toggleClass(el, sortable.options.selectedClass, true);\n multiDragElements.push(el);\n },\n\n /**\n * Deselects the provided multi-drag item\n * @param {HTMLElement} el The element to be deselected\n */\n deselect: function deselect(el) {\n var sortable = el.parentNode[expando],\n index = multiDragElements.indexOf(el);\n if (!sortable || !sortable.options.multiDrag || !~index) return;\n toggleClass(el, sortable.options.selectedClass, false);\n multiDragElements.splice(index, 1);\n }\n },\n eventProperties: function eventProperties() {\n var _this3 = this;\n\n var oldIndicies = [],\n newIndicies = [];\n multiDragElements.forEach(function (multiDragElement) {\n oldIndicies.push({\n multiDragElement: multiDragElement,\n index: multiDragElement.sortableIndex\n }); // multiDragElements will already be sorted if folding\n\n var newIndex;\n\n if (folding && multiDragElement !== dragEl$1) {\n newIndex = -1;\n } else if (folding) {\n newIndex = index(multiDragElement, ':not(.' + _this3.options.selectedClass + ')');\n } else {\n newIndex = index(multiDragElement);\n }\n\n newIndicies.push({\n multiDragElement: multiDragElement,\n index: newIndex\n });\n });\n return {\n items: _toConsumableArray(multiDragElements),\n clones: [].concat(multiDragClones),\n oldIndicies: oldIndicies,\n newIndicies: newIndicies\n };\n },\n optionListeners: {\n multiDragKey: function multiDragKey(key) {\n key = key.toLowerCase();\n\n if (key === 'ctrl') {\n key = 'Control';\n } else if (key.length > 1) {\n key = key.charAt(0).toUpperCase() + key.substr(1);\n }\n\n return key;\n }\n }\n });\n}\n\nfunction insertMultiDragElements(clonesInserted, rootEl) {\n multiDragElements.forEach(function (multiDragElement, i) {\n var target = rootEl.children[multiDragElement.sortableIndex + (clonesInserted ? Number(i) : 0)];\n\n if (target) {\n rootEl.insertBefore(multiDragElement, target);\n } else {\n rootEl.appendChild(multiDragElement);\n }\n });\n}\n/**\n * Insert multi-drag clones\n * @param {[Boolean]} elementsInserted Whether the multi-drag elements are inserted\n * @param {HTMLElement} rootEl\n */\n\n\nfunction insertMultiDragClones(elementsInserted, rootEl) {\n multiDragClones.forEach(function (clone, i) {\n var target = rootEl.children[clone.sortableIndex + (elementsInserted ? Number(i) : 0)];\n\n if (target) {\n rootEl.insertBefore(clone, target);\n } else {\n rootEl.appendChild(clone);\n }\n });\n}\n\nfunction removeMultiDragElements() {\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement === dragEl$1) return;\n multiDragElement.parentNode && multiDragElement.parentNode.removeChild(multiDragElement);\n });\n}\n\nSortable.mount(new AutoScrollPlugin());\nSortable.mount(Remove, Revert);\n\nexport default Sortable;\nexport { MultiDragPlugin as MultiDrag, Sortable, SwapPlugin as Swap };\n","\n/* eslint-disable */\n\nimport CloudFun, { defineComponent, ref, reactive, computed, Sorting, SortOrder, Condition, LogicalConnective, PropType, Operator } from \"@cloudfun/core\";\nimport { VxeColumnPropTypes, VxeGridInstance, VxeGridProps, VxeGridPropTypes, VxeModalProps, VXETable, VxeTableConstructor, VxeTableDefines, VxeTablePrivateMethods, VxeTablePropTypes } from \"vxe-table\";\nimport { v1 as uuidv1 } from \"uuid\";\nimport Sortable from 'sortablejs';\nimport { nextTick, onUnmounted, onMounted } from \"vue\";\n\nexport type GridOptions = {\n /** 識別碼 */\n id?: string;\n /** 資料主鍵 */\n rowId?: string;\n /** 尺寸 */\n size?: VxeTablePropTypes.Size;\n /** 標題 */\n title?: string;\n /** 模式 */\n mode?: \"inline\" | \"popup\";\n /** 多選 */\n multiselect?: boolean;\n /** 圓角 */\n round?: boolean;\n /** 框線 */\n border?: boolean;\n /** 斑馬紋 */\n stripe?: boolean;\n /** 滑鼠經過欄位時高亮 */\n highlightHoverColumn?: boolean;\n /** 滑鼠經過行列時高亮 */\n highlightHoverRow?: boolean;\n /** 資料行的class */\n rowClassName?: VxeTablePropTypes.RowClassName;\n /** 可改變大小 */\n resizable?: boolean;\n /** 自動調整表格大小 */\n autoResize?: boolean;\n /** 高度 */\n height?: number | string;\n /** 排序設定 */\n sortConfig?: VxeTablePropTypes.SortConfig;\n /** 分頁設定 */\n pagerConfig?: VxeGridPropTypes.PagerConfig;\n /** 列印設定 */\n printConfig?: VxeTablePropTypes.PrintConfig;\n /** 匯出設定 */\n exportConfig?: VxeTablePropTypes.ExportConfig;\n /** 工具列設定 */\n toolbarConfig?: VxeGridPropTypes.ToolbarConfig;\n /** 是否顯示表頭 */\n showHeader?: boolean;\n /** 是否顯示表尾 */\n showFooter?: boolean;\n /** 取得表尾數據之方法 */\n footerMethod?: VxeTablePropTypes.FooterMethod;\n /** 欄未設定。當存在type為checkbox之欄位時將置換選取欄,當存在slots.default之欄位時將置換操作欄 */\n columns: VxeGridPropTypes.Columns;\n /** 非同步設定 */\n promises?: {\n /** 非同步查詢 */\n query?: (params: {\n page: number;\n pageSize: number;\n keyword?: string;\n sortings?: Sorting[];\n condition?: Condition;\n }) => Promise<{ data: any[]; totalCount: number }>;\n /** 查詢所有資料 */\n queryAll?: (params?: {\n keyword?: string;\n sortings?: Sorting[];\n condition?: Condition;\n }) => Promise;\n /** 儲存已變更資料 */\n save?: (params: {\n insertRows?: any[];\n updateRows?: any[];\n deleteRows?: any[];\n }) => Promise;\n insert?: (data: any)\n => Promise;\n delete?: (data: any)\n => Promise;\n update?: (data: any)\n => Promise;\n };\n /** 互動視窗設定 */\n modalConfig?: {\n title?: string;\n width?: number | string;\n height?: number | string;\n showZoom?: boolean;\n resize?: boolean;\n remember?: boolean;\n showHeader?: boolean;\n showFooter?: boolean;\n zIndex?: number;\n };\n /** 可新增資料 */\n canCreate?: boolean;\n /** 可讀取資料 */\n canRead?: boolean;\n /** 可更新資料 */\n canUpdate?: boolean;\n /** 可刪除資料 */\n canDelete?: boolean;\n /** 自訂Modal */\n customer?: Boolean;\n /** 判斷資料列是否可正常操作 */\n decideRowOperable?: (row: any, operation: 'read' | 'update' | 'delete') => boolean;\n /** 樹狀結構設定 */\n treeConfig?: VxeTablePropTypes.TreeConfig;\n /** 複選框設定 */\n checkboxConfig?: VxeTablePropTypes.CheckboxConfig;\n};\n\nexport interface TreeConfig {\n parent?: string;\n children?: string;\n indent?: number;\n line?: boolean;\n expandAll?: boolean;\n expandRowKeys?: string[] | number[];\n accordion?: boolean;\n trigger?: \"default\" | \"cell\" | \"row\";\n lazy?: boolean;\n hasChild?: string;\n reserve?: boolean;\n query?: (params: {\n parent: any;\n keyword?: string;\n sortings?: Sorting[];\n condition?: Condition;\n }) => Promise;\n toggleMethod?(params: {\n $table: VxeTableConstructor & VxeTablePrivateMethods;\n expanded: boolean;\n row: any;\n column: VxeTableDefines.ColumnInfo;\n columnIndex: number;\n $columnIndex: number;\n }): boolean;\n showIcon?: boolean;\n iconOpen?: string;\n iconClose?: string;\n iconLoaded?: string;\n}\n\nexport default defineComponent({\n props: {\n /** 識別碼,欄位寬度與位置須以識別碼為索引儲存 */\n id: String,\n /** 傳遞 class */\n class: String,\n /** 資料主鍵 */\n rowId: { type: String, default: \"_XID\" },\n /** 尺寸 */\n size: { type: String as PropType, default: null },\n /** 標題 */\n title: { type: String, default: \"\" },\n /** 模式。inline: 嵌入,popup: 彈跳視窗 */\n mode: { type: String as PropType<\"inline\" | \"popup\">, default: \"popup\" },\n /** 多選 */\n multiselect: { type: Boolean, default: true },\n /** Grid 是否以圓角呈現 */\n round: { type: Boolean, default: true },\n /** 欄是否有框線 */\n border: { type: Boolean, default: true },\n /** 列是否以條紋呈現 */\n stripe: { type: Boolean, default: true },\n /** 徘迴時是否高亮顯示該欄 */\n highlightHoverColumn: { type: Boolean, default: true },\n /** 徘迴時是否高亮顯示該列 */\n highlightHoverRow: { type: Boolean, default: true },\n /** 資料行class */\n rowClassName: { type: [String, Function] as PropType },\n /** 是否可調整大小 */\n resizable: { type: Boolean, default: true },\n /** 自動調整表格大小 */\n autoResize: { type: Boolean, default: false },\n /** 高度 */\n height: { type: [Number, String] as PropType },\n /** 排序設定 */\n sortConfig: {\n type: Object as PropType,\n default: { remote: true, multiple: true },\n },\n /** 分頁設定 */\n pagerConfig: {\n type: Object as PropType,\n default: {\n currentPage: 1,\n pageSize: 10,\n pageSizes: [5, 10, 20],\n layouts: [\n \"PrevPage\",\n \"Jump\",\n \"PageCount\",\n \"NextPage\",\n \"Sizes\",\n \"Total\",\n ],\n },\n },\n /** 列印設定 */\n printConfig: {\n type: Object as PropType,\n default: {\n modes: [\"current\", \"selected\", \"all\"],\n },\n },\n /** 匯出設定 */\n exportConfig: {\n type: Object as PropType,\n default: {\n type: \"csv\",\n types: [\"html\", \"csv\"],\n mode: \"all\",\n modes: [\"current\", \"selected\", \"all\"],\n },\n },\n /** 工具列設定 */\n toolbarConfig: {\n type: Object as PropType,\n },\n /** 顯示表頭 */\n showHeader: {\n type: Boolean,\n default: true,\n },\n /** 顯示表尾 */\n showFooter: {\n type: Boolean,\n default: false,\n },\n /** 表尾數據函式 */\n footerMethod: {\n type: Function as PropType,\n },\n /** 所有欄位 */\n columns: {\n type: Object as PropType,\n required: true,\n },\n /** 所有按鈕 */\n buttons: {\n type: Array as PropType<\n Array<{ name: string; icon: string; onClick: (name: string) => void }>\n >,\n default: [],\n },\n /** 可提供的承諾 */\n promises: {\n type: Object as PropType<{\n query?: (params: {\n page: number;\n pageSize: number;\n keyword?: string;\n sortings?: Sorting[];\n condition?: Condition;\n }) => Promise<{ data: any[]; totalCount: number }>;\n queryAll?: (params?: {\n keyword?: string;\n sortings?: Sorting[];\n condition?: Condition;\n }) => Promise;\n save?: (params: {\n insertRows?: any[];\n updateRows?: any[];\n deleteRows?: any[];\n }) => Promise;\n insert?: (data: any) => Promise;\n delete?: (data: any) => Promise;\n update?: (data: any) => Promise;\n }>,\n },\n /** 互動視窗設定 */\n modalConfig: {\n type: Object as PropType<{\n title?: string;\n width?: number | string;\n height?: number | string;\n showZoom?: boolean;\n resize?: boolean;\n remember?: boolean;\n }>,\n default: {\n width: \"70%\",\n height: \"70%\",\n showZoom: true,\n resize: true,\n remember: true,\n },\n },\n /** 可新增 */\n canCreate: { type: Boolean, default: true },\n /** 可讀取 */\n canRead: { type: Boolean, default: true },\n /** 可更新 */\n canUpdate: { type: Boolean, default: true },\n /** 可刪除 */\n canDelete: { type: Boolean, default: true },\n /** 自訂Modal */\n customer: { type: Boolean, default: false },\n /** 判斷資料列是否可正常操作 */\n decideRowOperable: { type: Function as PropType<(row: any, operation: 'read' | 'update' | 'delete') => boolean>, default: () => true },\n /** 樹狀結構設定 */\n treeConfig: {\n type: Object as PropType,\n },\n /** 複選框設定 */\n checkboxConfig: {\n type: Object as PropType,\n default: { reserve: true },\n },\n onReset: Function,\n onRefresh: Function,\n onReload: Function,\n onModalResize: Function,\n onCheckboxChange: Function,\n onCheckboxAll: Function,\n onCurrentRowChanged: Function,\n onPageChanged: Function,\n onAddNewRow: Function,\n onEdit: Function,\n onRemove: Function,\n onRemoveSelectedRows: Function,\n onSave: Function,\n onShangeFilterEvent: Function,\n onExport: Function,\n onPrint: Function,\n onChangeFilterEvent: Function,\n onCustomEdit: Function,\n onCustomRemove: Function,\n onCellClick:Function\n },\n setup(props, { emit, attrs }) {\n // #region Properties\n\n const uuid = props.id || uuidv1();\n const mode = ref(props.mode);\n const isModalPopup = ref(false);\n const instance = ref({} as VxeGridInstance);\n const loading = ref(false);\n const editingRow = ref(null);\n const keyword = ref(\"\");\n const customFilters = ref([]);\n\n // #endregion\n // #region VxeTable Options\n\n let columns: VxeGridPropTypes.Columns = [];\n if (props.multiselect && !columns.some((e) => e.type && e.type === \"checkbox\")) {\n columns.push({ type: \"checkbox\", width: 35, fixed: \"left\", resizable: false });\n }\n columns = [...columns, ...props.columns];\n if ((props.canCreate || props.canRead || props.canUpdate || props.canDelete) && !columns.some((e) => e.slots && e.slots.default === \"operate\")) {\n columns.push({ title: \"操作\", width: 100, fixed: \"right\", align: \"center\", resizable: false, slots: { default: \"operate\" } });\n }\n\n const gridOptions = reactive({\n size: props.size,\n showHeader: props.showHeader,\n autoResize: props.autoResize,\n height: props.height,\n rowId: props.rowId,\n keepSource: true,\n round: props.round,\n border: props.border,\n stripe: props.stripe,\n highlightCurrentRow: true,\n highlightHoverColumn: props.highlightHoverColumn,\n highlightHoverRow: props.highlightHoverRow,\n rowClassName: props.rowClassName,\n resizable: props.resizable,\n loading: loading.value,\n customConfig: {\n storage: true,\n checkMethod: ({ column }) => {\n return column.property?.length > 0 && column.title?.length > 0;\n },\n },\n toolbarConfig: props.toolbarConfig\n ? {\n enabled: true,\n custom: props.toolbarConfig?.custom,\n refresh: props.toolbarConfig?.refresh,\n slots: props.toolbarConfig?.slots,\n }\n : undefined,\n filterConfig: { remote: true },\n sortConfig: { remote: true, multiple: true, ...props.sortConfig },\n editConfig: {\n trigger: \"manual\",\n mode: \"row\",\n showIcon: false,\n autoClear: false,\n },\n pagerConfig: props.pagerConfig,\n printConfig: props.printConfig,\n exportConfig: props.exportConfig,\n columns,\n treeConfig: props.treeConfig,\n checkboxConfig: props.checkboxConfig,\n proxyConfig: {\n message: false,\n sort: true,\n filter: true,\n props: { result: \"data\", total: \"totalCount\" },\n ajax: {\n query: (params) => {\n const queryParams: {\n page: number;\n pageSize: number;\n keyword: string;\n sortings?: Sorting[];\n condition: Condition;\n } = {\n page: params.page.currentPage,\n pageSize: params.page.pageSize,\n keyword: keyword.value,\n sortings: params.sorts\n .filter((e) => e.property)\n .map(\n (e) =>\n new Sorting(\n e.property,\n e.order === \"desc\"\n ? SortOrder.Descending\n : SortOrder.Ascending\n )\n ), // sorts\n condition: new Condition(customFilters.value), // custom filters\n };\n // filters\n const filters = params.filters\n ? params.filters.filter((e) => e.values.length)\n : null;\n if (filters && filters.length) {\n const gridCondition = new Condition();\n // colum filters\n filters.forEach((filter) => {\n const columnCondition = new Condition();\n filter.values.forEach((subFilter) => {\n if (subFilter && subFilter instanceof Condition) {\n const condition = subFilter as Condition;\n if (condition.connective === LogicalConnective.And)\n columnCondition.and(condition);\n else columnCondition.or(condition);\n }\n });\n gridCondition.and(columnCondition);\n });\n queryParams.condition.and(gridCondition);\n }\n const queryPagination = props.promises?.query;\n return queryPagination\n ? new Promise((resolve, reject) =>\n queryPagination(queryParams).then(\n (payload) => resolve(payload),\n (reason) => {\n CloudFun.send(\"error\", {\n subject: \"讀取失敗\",\n content: reason,\n });\n reject(reason);\n }\n )\n )\n : async () => {\n return { data: [], totalCount: 0 };\n };\n },\n queryAll: (params) => {\n const queryParams: {\n keyword: string;\n sortings?: Sorting[];\n condition: Condition;\n } = {\n keyword: keyword.value,\n sortings: params.sorts\n .filter((e) => e.property)\n .map(\n (e) =>\n new Sorting(\n e.property,\n e.order === \"desc\"\n ? SortOrder.Descending\n : SortOrder.Ascending\n )\n ), // sorts\n condition: new Condition(customFilters.value), // custom filters\n };\n // filters\n const filters = params.filters\n ? params.filters.filter((e) => e.values.length)\n : null;\n if (filters && filters.length) {\n const gridCondition = new Condition();\n // colum filters\n filters.forEach((filter) => {\n const columnCondition = new Condition();\n filter.values.forEach((subFilter) => {\n if (subFilter && subFilter instanceof Condition) {\n const condition = subFilter as Condition;\n if (condition.connective === LogicalConnective.And)\n columnCondition.and(condition);\n else columnCondition.or(condition);\n }\n });\n gridCondition.and(columnCondition);\n });\n queryParams.condition.and(gridCondition);\n }\n const queryAll = props.promises?.queryAll;\n return queryAll\n ? new Promise((resolve, reject) =>\n queryAll(queryParams).then(\n (payload) => resolve(payload),\n (reason) => {\n CloudFun.send(\"error\", {\n subject: \"讀取失敗\",\n content: reason,\n });\n reject(reason);\n }\n )\n )\n : async () => {\n return [];\n };\n },\n delete: (params) => {\n const deleteRows = props.promises?.save;\n return deleteRows\n ? new Promise((resolve, reject) =>\n deleteRows({ deleteRows: params.body.removeRecords }).then(\n (payload) => resolve(payload),\n (reason) => {\n CloudFun.send(\"error\", {\n subject: \"刪除失敗\",\n content: reason,\n });\n reject(reason);\n }\n )\n )\n : async () => {\n return undefined;\n };\n },\n save: (params) => {\n const saveParams = {\n insertRows: params.body.insertRecords,\n updateRows: params.body.updateRecords,\n deleteRows: params.body.removeRecords,\n };\n const saveRows = props.promises?.save;\n return saveRows\n ? new Promise((resolve, reject) =>\n saveRows(saveParams).then(\n (payload) => {\n editingRow.value = null;\n resolve(payload);\n },\n (reason) => {\n CloudFun.send(\"error\", {\n subject: \"保存失敗\",\n content: reason,\n });\n reject(reason);\n }\n )\n )\n : async () => {\n return undefined;\n };\n },\n },\n },\n } as VxeGridProps);\n\n if (\n gridOptions.treeConfig &&\n props.treeConfig?.parent &&\n props.treeConfig?.query\n ) {\n const parent = props.treeConfig.parent;\n const query = props.treeConfig.query;\n gridOptions.treeConfig.loadMethod = (params) => {\n const queryParams: {\n parent: any;\n keyword: string;\n sortings?: Sorting[];\n condition: Condition;\n } = {\n parent: params.row[parent],\n keyword: keyword.value,\n sortings: params.$table\n .getSortColumns()\n .filter((e) => e.property)\n .map(\n (e) =>\n new Sorting(\n e.property,\n e.order === \"desc\"\n ? SortOrder.Descending\n : SortOrder.Ascending\n )\n ), // sorts\n condition: new Condition(customFilters.value), // custom filters\n };\n // filters\n let filters = params.$table\n .getCheckedFilters()\n .filter((e) => e.values.length);\n if (filters && filters.length) {\n const gridCondition = new Condition();\n // colum filters\n filters.forEach((filter) => {\n const columnCondition = new Condition();\n filter.values.forEach((subFilter) => {\n if (subFilter && subFilter instanceof Condition) {\n const condition = subFilter as Condition;\n if (condition.connective === LogicalConnective.And)\n columnCondition.and(condition);\n else columnCondition.or(condition);\n }\n });\n gridCondition.and(columnCondition);\n });\n queryParams.condition.and(gridCondition);\n }\n return query(queryParams);\n };\n }\n\n // #endregion\n // #region VxeModal Options\n\n const lastModalConfig: VxeModalProps = {\n showZoom: true,\n resize: true,\n remember: true,\n ...props.modalConfig,\n };\n\n if (\n typeof lastModalConfig.width === \"string\" &&\n lastModalConfig.width.endsWith(\"%\")\n ) {\n const percentage = Number.parseInt(\n lastModalConfig.width.substr(0, lastModalConfig.width.length - 1)\n );\n lastModalConfig.width = window.innerWidth * (percentage / 100);\n }\n if (\n typeof lastModalConfig.height === \"string\" &&\n lastModalConfig.height.endsWith(\"%\")\n ) {\n const percentage = Number.parseInt(\n lastModalConfig.height.substr(0, lastModalConfig.height.length - 1)\n );\n lastModalConfig.height = window.innerHeight * (percentage / 100);\n }\n\n // #endregion\n // #region Computed Properties\n\n const selectedRows = computed(() => instance.value.getCheckboxRecords());\n const isRowSelected = computed(() => selectedRows.value.length > 0);\n const isEditing = computed(\n () =>\n editingRow.value != null &&\n instance.value.isActiveByRow(editingRow.value)\n );\n\n // #endregion\n // #region Methods\n\n const reset = (row?: any, isClosing = false) => {\n if (!row) row = editingRow.value;\n const action = () => {\n switch (mode.value) {\n case \"inline\":\n instance.value.clearActived().then(() => {\n if (instance.value.isInsertByRow(row)) instance.value.remove(row);\n else if (instance.value.isUpdateByRow(row))\n instance.value.revertData(row);\n editingRow.value = null;\n });\n break;\n case \"popup\":\n if (instance.value.isInsertByRow(row)) {\n if (isClosing && !row.Id) {\n instance.value.remove(row);\n }\n else {\n for(const key of Object.keys(row)) delete row[key];\n }\n } else {\n for(const key of Object.keys(row)) {\n if(key != 'services' && key != 'categories')\n instance.value.revertData(row, key);\n };\n }\n if (isClosing) editingRow.value = null;\n break;\n }\n };\n if (props.onReset) emit(\"reset\", row, action);\n else action();\n };\n\n const edit = (row: any) => {\n if (!props.canCreate && !props.canUpdate && !props.canRead)\n return;\n editingRow.value = row;\n const action = () => {\n switch (mode.value) {\n case \"inline\":\n return instance.value.setActiveRow(row);\n case \"popup\":\n isModalPopup.value = true;\n break;\n }\n };\n if (props.onEdit) emit(\"edit\", row, action);\n else action();\n };\n\n const addNewRow = (row?: any) => {\n if (!props.canCreate || editingRow.value) return;\n if (row === undefined) row = {};\n const action = () => {\n instance.value.insert(row).then((data) => edit(data.row));\n };\n if (props.onAddNewRow) emit(\"addNewRow\", row, action);\n else action();\n };\n\n const save = (row?: any) => {\n const {\n insertRecords,\n updateRecords,\n removeRecords,\n } = instance.value.getRecordset();\n if (!props.canCreate && insertRecords.length) return;\n if (!props.canUpdate && updateRecords.length) return;\n if (!props.canDelete && removeRecords.length) return;\n const action = () => {\n const key = props.rowId || \"_XID\";\n if (props.mode === \"popup\" && row) {\n if (instance.value.isInsertByRow(row)) {\n if (!insertRecords.find((e) => e[key] === row[key]))\n insertRecords.push(row);\n } else {\n if (!updateRecords.find((e) => e[key] === row[key]))\n updateRecords.push(row);\n }\n }\n let needSave =\n insertRecords.length || updateRecords.length || removeRecords.length;\n needSave &&=\n row &&\n (insertRecords.some((e) => e[key] === row[key]) ||\n updateRecords.some((e) => e[key] === row[key]) ||\n removeRecords.some((e) => e[key] === row[key]));\n const isRowEditing = row && editingRow.value === row;\n if (needSave) {\n switch (props.mode) {\n case \"inline\":\n instance.value.commitProxy(\"save\").then(() => {\n if (isRowEditing && editingRow.value === row) edit(row);\n else {\n isModalPopup.value = false;\n editingRow.value = null;\n }\n });\n break;\n case \"popup\":\n if (props.promises?.insert && insertRecords.length) {\n gridOptions.loading = true;\n props.promises.insert(row).then(\n () => {\n instance.value\n .commitProxy(\"query\")\n .then(() => {\n isModalPopup.value = false;\n editingRow.value = null;\n })\n .finally(() => {\n gridOptions.loading = false;\n });\n },\n (failure: any) => {\n CloudFun.send(\"error\", {\n subject: '新增失敗',\n content: failure,\n });\n })\n } else if(props.promises?.update && updateRecords.length) {\n //console.log(row)\n gridOptions.loading = true;\n props.promises.update(row).then(\n () => {\n instance.value\n .commitProxy(\"query\")\n .then(() => {\n isModalPopup.value = false;\n editingRow.value = null;\n })\n .finally(() => {\n gridOptions.loading = false;\n });\n },\n (failure: any) => {\n CloudFun.send(\"error\", {\n subject: '新增失敗',\n content: failure,\n });\n })\n }\n else if (props.promises?.save) {\n gridOptions.loading = true;\n props.promises\n .save({\n insertRows: insertRecords,\n updateRows: updateRecords,\n deleteRows: removeRecords,\n })\n .then(\n () => {\n instance.value\n .commitProxy(\"query\")\n .then(() => {\n isModalPopup.value = false;\n editingRow.value = null;\n })\n .finally(() => {\n gridOptions.loading = false;\n });\n },\n (failure: any) => {\n let subject: string;\n let content: string;\n if (Array.isArray(failure.payload)) {\n failure.payload.forEach((e: any) => {\n switch (e.action) {\n case \"create\":\n subject = \"新增失敗\";\n break;\n case \"update\":\n subject = \"修改失敗\";\n break;\n case \"delete\":\n subject = \"刪除失敗\";\n break;\n default:\n subject = \"未知問題\";\n break;\n }\n CloudFun.send(\"error\", {\n subject,\n content: e.message,\n });\n });\n } else {\n content = failure.message;\n switch (failure.action) {\n case \"create\":\n subject = \"新增失敗\";\n break;\n case \"update\":\n subject = \"修改失敗\";\n break;\n case \"delete\":\n subject = \"刪除失敗\";\n break;\n default:\n switch (failure.status) {\n case 401:\n subject = \"授權失敗\";\n content = \"請重新登入\";\n break;\n default:\n subject = \"未知問題\";\n content = failure.message\n break;\n }\n break;\n }\n CloudFun.send(\"error\", {\n subject,\n content,\n });\n }\n gridOptions.loading = false;\n }\n );\n }\n break;\n }\n } else if (!row || row === editingRow.value) {\n isModalPopup.value = false;\n editingRow.value = null;\n }\n };\n if (props.onSave)\n emit(\"save\", { insertRecords, updateRecords, removeRecords }, action);\n else action();\n };\n\n const remove = (row: any) => {\n if (!props.canDelete) return;\n if (row && confirm(\"確定要刪除此筆資料嗎?\")) {\n const action = () => {\n gridOptions.loading = true;\n const deleteRows = props.promises?.delete;\n if (deleteRows)\n deleteRows(row.productID ?? row.memberID).then(\n () => {\n instance.value.commitProxy(\"query\").finally(() => {\n gridOptions.loading = false;\n });\n },\n (failure: any) => {\n if (Array.isArray(failure)) {\n failure.forEach((e: any) =>\n CloudFun.send(\"error\", {\n subject: \"刪除失敗\",\n content: e.message,\n })\n );\n } else\n CloudFun.send(\"error\", {\n subject: \"刪除失敗\",\n content: failure.message || failure,\n });\n gridOptions.loading = false;\n }\n );\n };\n if (props.onRemove) emit(\"remove\", row, action);\n else action();\n }\n };\n\n const customRemove = (row: any) => {\n if (row && confirm(\"確定要刪除已被選擇的資料嗎?\")) {\n emit(\"customRemove\", row);\n }\n }\n\n const customEdit = (row: any) => {\n emit(\"customEdit\", row);\n }\n\n const removeSelectedRows = () => {\n if (!props.canDelete) return;\n const rows = instance.value.getCheckboxRecords();\n if (rows && rows.length && confirm(\"確定要刪除已被選擇的資料嗎?\")) {\n const action = () => {\n instance.value.commitProxy(\"delete\");\n };\n if (props.onRemoveSelectedRows)\n emit(\"removeSelectedRows\", rows, action);\n else action();\n }\n };\n\n const changeFilterEvent = (\n event: Event,\n option: VxeColumnPropTypes.Filter,\n panel: any,\n toogleChecked?: boolean\n ) => {\n if (toogleChecked) option.checked = !option.checked;\n if (option.checked && option.data) {\n if (!option.value)\n option.value = new Condition(\"Name\", Operator.Contains);\n option.value.value = option.data;\n } else option.value = undefined;\n const action = () => {\n if (toogleChecked) panel.changeOption(event, option.checked, option);\n };\n if (props.onChangeFilterEvent) emit(\"changeFilterEvent\", option, action);\n else action();\n };\n\n const onExport = async (config?: VxeTablePropTypes.ExportConfig) => {\n config = { ...gridOptions.exportConfig, ...config };\n if (config.mode === \"all\" && props.promises?.queryAll)\n config.data = await props.promises.queryAll();\n const action = async () => await instance.value.exportData(config);\n if (props.onExport) emit(\"export\", config, action);\n else await action();\n };\n\n const onPrint = async (config?: VxeTablePropTypes.PrintConfig) => {\n config = { ...gridOptions.printConfig, ...config };\n if (config.mode === \"all\" && props.promises?.queryAll)\n config.data = await props.promises.queryAll();\n const action = () => {\n instance.value.print(config);\n };\n if (props.onPrint) emit(\"print\", config, action);\n else action();\n };\n\n const refresh = async () => {\n const action = async () => await instance.value.commitProxy(\"query\");\n if (props.onRefresh) emit(\"refresh\", action);\n else await action();\n };\n\n const reload = async () => {\n const action = async () => await instance.value.commitProxy(\"reload\");\n if (props.onReload) emit(\"reload\", action);\n else await action();\n };\n\n const onResize = (message: any) => {\n const style = message.$modal.getBox().style;\n emit(\n \"modalResize\",\n {\n width: Number.parseFloat(style.width),\n height: Number.parseFloat(style.height),\n top: Number.parseFloat(style.top),\n left: Number.parseFloat(style.left),\n },\n () => {\n /* nop */\n }\n );\n };\n\n const onCheckboxChange = ({ checked, records, reserves, row }: any) => emit(\"checkboxChange\", { checked, records, reserves, row });\n\n const onCheckboxAll = ({ checked, records, reserves }: any) => emit(\"checkboxAll\", { checked, records, reserves });\n\n const onCurrentChange = ({ row }: any) => emit(\"currentRowChanged\", row);\n\n const onPageChange = ({ currentPage, pageSize }: { currentPage: number, pageSize: number }) => emit(\"pageChanged\", currentPage, pageSize);\n\n const setCheckboxRow = (rows: any, checked: boolean) => instance.value.setCheckboxRow(rows, checked);\n\n const getData = () => instance.value.getData();\n\n const clearCheckboxRow = () => instance.value.clearCheckboxRow();\n\n const clearCheckboxReserve = () => instance.value.clearCheckboxReserve();\n\n const onCellClick = ({ row, rowIndex, $rowIndex, column, columnIndex, $columnIndex, triggerRadio, triggerCheckbox, triggerTreeNode, triggerExpandNode, $event }:any)=>emit(\"cellClick\",{ row, rowIndex, $rowIndex, column, columnIndex, $columnIndex, triggerRadio, triggerCheckbox, triggerTreeNode, triggerExpandNode, $event })\n\n // #endregion\n\n let sortable2: any\n\n const columnDrop2 = () => {\n const $grid = instance.value;\n sortable2 = Sortable.create($grid.$el.querySelector('.body--wrapper>.vxe-table--header .vxe-header--row'), {\n handle: '.vxe-header--column:not(.col--fixed)',\n onEnd: (sortableEvent: any) => {\n // const targetThElem = sortableEvent.item\n // const newIndex = sortableEvent.newIndex as number\n // const oldIndex = sortableEvent.oldIndex as number\n // const { fullColumn, tableColumn } = $grid.getTableColumn()\n // const wrapperElem = targetThElem.parentNode as HTMLElement\n // const newColumn = fullColumn[newIndex]\n // if (newColumn.fixed) {\n // // 错误的移动\n // const oldTrElement = wrapperElem.children[oldIndex] as HTMLElement\n // if (newIndex > oldIndex) {\n // wrapperElem.insertBefore(targetThElem, oldTrElement)\n // } else {\n // wrapperElem.insertBefore(oldTrElement, targetThElem)\n // }\n // return VXETable.modal.message({ content: '固定列不允许拖动!', status: 'error' })\n // }\n // // 转换真实索引\n // const oldColumnIndex = $grid.getColumnIndex(tableColumn[oldIndex])\n // const newColumnIndex = $grid.getColumnIndex(tableColumn[newIndex])\n // // 移动到目标列\n // const currRow = fullColumn.splice(oldColumnIndex, 1)[0]\n // fullColumn.splice(newColumnIndex, 0, currRow)\n // $grid.loadColumn(fullColumn)\n }\n })\n }\n\n let initTime: any\n nextTick(() => {\n if (!gridOptions.showHeader) return;\n // 加载完成之后在绑定拖动事件\n initTime = setTimeout(() => {\n columnDrop2()\n }, 500)\n })\n\n onUnmounted(() => {\n clearTimeout(initTime)\n if (sortable2) {\n sortable2.destroy()\n }\n })\n\n return {\n instance,\n lastModalConfig,\n gridOptions,\n loading,\n isEditing,\n editingRow,\n selectedRows,\n isRowSelected,\n isModalPopup,\n keyword,\n customFilters,\n reset,\n edit,\n addNewRow,\n save,\n remove,\n removeSelectedRows,\n changeFilterEvent,\n onExport,\n onPrint,\n refresh,\n reload,\n windowHeight: window.innerHeight,\n windowWidth: window.innerWidth,\n onResize,\n onCurrentChange,\n onPageChange,\n uuid,\n setCheckboxRow,\n getData,\n onCheckboxChange,\n onCheckboxAll,\n clearCheckboxRow,\n clearCheckboxReserve,\n customRemove,\n customEdit,onCellClick\n };\n },\n});\n","import { render } from \"./Grid.vue?vue&type=template&id=0c7d1bbe\"\nimport script from \"./Grid.vue?vue&type=script&lang=ts\"\nexport * from \"./Grid.vue?vue&type=script&lang=ts\"\nscript.render = render\n\nexport default script","var global = require('../internals/global');\nvar trim = require('../internals/string-trim').trim;\nvar whitespaces = require('../internals/whitespaces');\n\nvar $parseInt = global.parseInt;\nvar hex = /^[+-]?0[Xx]/;\nvar FORCED = $parseInt(whitespaces + '08') !== 8 || $parseInt(whitespaces + '0x16') !== 22;\n\n// `parseInt` method\n// https://tc39.es/ecma262/#sec-parseint-string-radix\nmodule.exports = FORCED ? function parseInt(string, radix) {\n var S = trim(String(string));\n return $parseInt(S, (radix >>> 0) || (hex.test(S) ? 16 : 10));\n} : $parseInt;\n","var $ = require('../internals/export');\nvar parseFloat = require('../internals/number-parse-float');\n\n// `Number.parseFloat` method\n// https://tc39.es/ecma262/#sec-number.parseFloat\n// eslint-disable-next-line es/no-number-parsefloat -- required for testing\n$({ target: 'Number', stat: true, forced: Number.parseFloat != parseFloat }, {\n parseFloat: parseFloat\n});\n"],"sourceRoot":""}