{"version":3,"sources":["webpack:///./node_modules/ag-grid-community/dist/lib/rowModels/clientSide/sortStage.js","webpack:///./node_modules/ag-grid-community/dist/lib/rowModels/clientSide/changedPath.js","webpack:///./node_modules/ag-grid-community/dist/lib/rowModels/cache/rowNodeBlock.js","webpack:///./node_modules/ag-grid-community/dist/lib/rowModels/clientSide/filterStage.js","webpack:///./node_modules/ag-grid-community/dist/lib/rowModels/paginationAutoPageSizeService.js","webpack:///./node_modules/ag-grid-community/dist/lib/rowModels/infinite/infiniteRowModel.js","webpack:///./node_modules/ag-grid-community/dist/lib/rowNodes/selectableService.js","webpack:///./node_modules/ag-grid-community/dist/lib/rowModels/cache/rowNodeBlockLoader.js","webpack:///./node_modules/ag-grid-community/dist/lib/rowModels/pagination/paginationComp.js","webpack:///./node_modules/ag-grid-community/dist/lib/rowModels/infinite/infiniteBlock.js","webpack:///./node_modules/ag-grid-community/dist/lib/rowModels/paginationProxy.js","webpack:///./node_modules/ag-grid-community/dist/lib/rowModels/clientSide/clientSideNodeManager.js","webpack:///./node_modules/ag-grid-community/dist/lib/rowNodes/filterService.js","webpack:///./node_modules/ag-grid-community/dist/lib/rowModels/cache/rowNodeCache.js","webpack:///./node_modules/ag-grid-community/dist/lib/rowNodes/sortService.js","webpack:///./node_modules/ag-grid-community/dist/lib/rowModels/clientSide/clientSideRowModel.js","webpack:///./node_modules/ag-grid-community/dist/lib/rowModels/clientSide/immutableService.js","webpack:///./node_modules/ag-grid-community/dist/lib/rowModels/pinnedRowModel.js","webpack:///./node_modules/ag-grid-community/dist/lib/rowModels/infinite/infiniteCache.js","webpack:///./node_modules/ag-grid-community/dist/lib/rowModels/clientSide/flattenStage.js"],"names":["__decorate","this","decorators","target","key","desc","d","c","arguments","length","r","Object","getOwnPropertyDescriptor","Reflect","decorate","i","defineProperty","__metadata","k","v","metadata","exports","value","context_1","gridOptionsWrapper_1","sortService_1","sortController_1","columnController_1","utils_1","SortStage","prototype","execute","params","sortOptions","sortController","getSortForRowController","sortActive","_","exists","deltaSort","rowNodeTransactions","gridOptionsWrapper","isDeltaSort","dirtyLeafNodes","calculateDirtyNodes","valueColumns","columnController","getValueColumns","noAggregations","missingOrEmpty","sortService","sort","changedPath","dirtyNodes","addNodesFunc","rowNodes","forEach","rowNode","id","tran","add","update","remove","Autowired","GridOptionsWrapper","SortService","SortController","ColumnController","Bean","ChangedPath","keepingColumns","rootNode","active","nodeIdsToColumns","mapToItems","pathRoot","children","setInactive","isActive","depthFirstSearchChangedPath","pathItem","callback","depthFirstSearchEverything","traverseEverything","childrenAfterGroup","childNode","forEachChangedNodeDepthFirst","traverseLeafNodes","executeFromRootNode","createPathItems","pointer","newEntryCount","newEntry","parent","populateColumnsMap","columns","_this","col","getId","linkPathItems","thisItem","parentItem","push","addParentNode","canSkip","getValueColumnsForNode","colsForThisNode","result","filter","getNotValueColumnsForNode","__extends","extendStatics","b","setPrototypeOf","__proto__","Array","p","hasOwnProperty","__","constructor","create","rowNode_1","beanStub_1","RowNodeBlock","_super","blockNumber","rowNodeCacheParams","call","version","state","STATE_DIRTY","startRow","blockSize","endRow","isAnyNodeOpen","rowCount","forEachNodeCallback","expanded","rowIndex","getRowUsingLocalIndex","forEachNode","sequence","deep","next","childrenCache","forEachNodeDeep","forEachNodeShallow","getVersion","getLastAccessed","lastAccessed","dontTouchLastAccessed","lastAccessedSequence","localIndex","init","beans","createRowNodes","getStartRow","getEndRow","getBlockNumber","setDirty","setDirtyAndPurge","setData","getState","setRowNode","setBlankRowNode","newRowNode","createBlankRowNode","setNewData","dataItem","setDataAndId","RowNode","context","wireBean","setRowHeight","rowHeight","load","STATE_LOADING","loadFromDatasource","pageLoadFailed","STATE_FAILED","event","type","EVENT_LOAD_COMPLETE","success","page","lastRow","dispatchEvent","populateWithRowData","rows","rowNodesToRefresh","index","data","stub","rowRenderer","redrawRows","destroy","clearRowTop","pageLoaded","STATE_LOADED","cleanNumber","BeanStub","filterService_1","selectableService_1","FilterStage","filterService","selectableService","updateSelectableAfterFiltering","SelectableService","FilterService","eventService_1","events_1","scrollVisibleService_1","PaginationAutoPageSizeService","apply","registerGridComp","gridPanel","addDestroyableEventListener","eventService","Events","EVENT_BODY_HEIGHT_CHANGED","onBodyHeightChanged","bind","EVENT_SCROLL_VISIBILITY_CHANGED","onScrollVisibilityChanged","checkPageSize","notActive","isPaginationAutoPageSize","getRowHeightAsNumber","bodyHeight","getBodyHeight","newPageSize","Math","floor","setProperty","EventService","ScrollVisibleService","selectionController_1","filterManager_1","constants_1","infiniteCache_1","rowNodeCache_1","rowNodeBlockLoader_1","gridApi_1","columnApi_1","rowRenderer_1","InfiniteRowModel","getRowBounds","rowTop","ensureRowHeightsValid","startPixel","endPixel","startLimitIndex","endLimitIndex","isRowModelInfinite","addEventListeners","setDatasource","getDatasource","addDestroyFunc","destroyCache","destroyDatasource","datasource","datasourceChanged","isLastRowFound","infiniteCache","isMaxRowFound","EVENT_FILTER_CHANGED","onFilterChanged","EVENT_SORT_CHANGED","onSortChanged","EVENT_COLUMN_EVERYTHING_CHANGED","onColumnEverything","reset","resetRequired","cacheParams","isSortModelDifferent","jsonEquals","sortModel","getSortModel","getType","Constants","ROW_MODEL_TYPE_INFINITE","checkForDeprecated","ds","maxConcurrentRequests","console","error","maxPagesInCache","overflowSize","isEmpty","missing","isRowsToRender","getNodesInRangeForSelection","firstInRange","lastInRange","getRowNodesInRange","userGeneratingIds","getRowNodeIdFunc","selectionController","resetCache","createModelUpdatedEvent","EVENT_MODEL_UPDATED","api","gridApi","columnApi","newPage","newData","keepRenderedRows","animate","getMaxConcurrentDatasourceRequests","blockLoadDebounceMillis","getBlockLoadDebounceMillis","rowNodeBlockLoader","RowNodeBlockLoader","getContext","filterModel","filterManager","getFilterModel","getCacheOverflowSize","initialRowCount","getInfiniteInitialRowCount","maxBlocksInCache","getMaxBlocksInCache","getCacheBlockSize","NumberSequence","InfiniteCache","addEventListener","RowNodeCache","EVENT_CACHE_UPDATED","onCacheUpdated","getRow","getRowNode","getCurrentPageHeight","getRowCount","getTopLevelRowCount","getTopLevelRowDisplayedIndex","topLevelIndex","getRowIndexAtPixel","pixel","rowIndexForPixel","lastRowIndex","getVirtualRowCount","updateRowData","transaction","warn","addIndex","insertItemsAtIndex","isRowPresent","refreshCache","purgeCache","setVirtualRowCount","maxRowFound","getBlockState","FilterManager","SelectionController","GridApi","ColumnApi","RowRenderer","PostConstruct","Function","PreDestroy","groupSelectsChildren","isGroupSelectsChildren","isRowSelectableFunc","getIsRowSelectableFunc","updateSelectableAfterGrouping","nextChildrenFunc","recurseDown","childrenAfterFilter","child","group","rowSelectable","hasChildren","firstSelectable","find","setRowSelectable","__param","paramIndex","decorator","rowNodeBlock_1","logger_1","activeBlockLoadsCount","blocks","checkBlockToLoadDebounce","debounce","performCheckBlocksToLoad","setBeans","loggerFactory","logger","addBlock","block","removeBlock","removeFromArray","loadComplete","checkBlockToLoad","printCacheStatus","log","blockToLoad","nodeIdPrefix","getNodeIdPrefix","stateItem","pageStatus","isLogging","JSON","stringify","isLoading","Qualifier","LoggerFactory","component_1","componentAnnotations_1","paginationProxy_1","PaginationComp","postConstruct","isRtl","isEnableRtl","setTemplate","getTemplate","btFirst","insertAdjacentElement","createIconNoSpan","btPrevious","btNext","btLast","rowModel","ROW_MODEL_TYPE_SERVER_SIDE","serverSideRowModel","isPaging","isPagination","paginationPanelEnabled","isSuppressPaginationPanel","EVENT_PAGINATION_CHANGED","onPaginationChanged","onBtFirst","onBtLast","onBtNext","onBtPrevious","setDisplayed","enableOrDisableButtons","updateRowLabels","setCurrentPageLabel","setTotalLabels","pagesExist","paginationProxy","getTotalPages","currentPage","getCurrentPage","toDisplay","lbCurrent","innerHTML","formatNumber","userFunc","getPaginationNumberFormatterFunc","formatNumberCommas","localeTextFunc","getLocaleTextFunc","strPage","strTo","strOf","strFirst","strPrevious","strNext","strLast","goToNextPage","goToPreviousPage","goToFirstPage","goToLastPage","isLastPageFound","totalPages","disablePreviousAndFirst","addOrRemoveCssClass","zeroPagesToDisplay","isZeroPagesToDisplay","onLastPage","disableNext","disableLast","pageSize","getPageSize","getMasterRowCount","lbFirstRowOnPage","lbLastRowOnPage","lastPageFound","lbTotal","lbRecordCount","moreText","PaginationProxy","RefSelector","HTMLElement","Component","InfiniteBlock","pageNumber","uiLevel","setIndexAndTopOnRowNode","toString","undefined","displayIndex","setRowIndex","successCallback","failCallback","getRows","getRowsParams","getFunctionParameters","window","setTimeout","topDisplayedRowIndex","bottomDisplayedRowIndex","pixelOffset","masterRowCount","paginateChildRows","isPaginateChildRows","onModelUpdated","res","getPageFirstRow","getPageLastRow","calculatePages","modelUpdatedEvent","paginationChangedEvent","goToPage","getPixelOffset","topRowBounds","bottomRowBounds","max","nodeIsInPage","goToPageWithIndex","lastPage","setPageSize","getPaginationPageSize","calculatePagesAllRows","calculatePagesMasterRowsOnly","calculatedPagesNotActive","setZeroRows","masterLastRowIndex","isNumeric","masterPageStartIndex","masterPageEndIndex","firstIndexNotToShow","maxRowIndex","ClientSideNodeManager","nextId","allNodesMap","level","ROOT_NODE_ID","allLeafChildren","childrenAfterSort","getNodeChildDetails","getNodeChildDetailsFunc","suppressParentsInRowNodes","isSuppressParentsInRowNodes","doesDataFlower","getDoesDataFlowerFunc","isRowMasterFunc","getIsRowMasterFunc","doingLegacyTreeData","doingMasterDetail","isMasterDetail","getCopyOfNodesMap","cloneObject","setRowData","rowData","childrenMapped","recursiveFunction","TOP_LEVEL","setLeafChildren","rowDataTran","rowNodeOrder","isLegacyTreeData","rowNodeTransaction","executeAdd","executeRemove","executeUpdate","sortRowNodesByOrder","useIndex","reverse","item","addRowNode","rowIdsRemoved","anyNodesSelected","lookupRowNode","isSelected","setSelected","updateGroupsFromChildrenSelections","event_1","EVENT_SELECTION_CHANGED","updateData","newNode","createNode","insertIntoArray","rowNodeIdFunc","node","doingTreeData","isTreeData","nodeChildDetails","field","canFlower","master","rowGroupColumns","getRowGroupColumns","numRowGroupColumns","masterRowLevel","isExpanded","expandByDefault","getGroupDefaultExpanded","childAfterGroup","leafChild","rowsAlreadyGrouped","filterActive","isAnyFilterPresent","filterNodes","filterCallback","includeChildNodes","passBecauseChildren","passBecauseDataPasses","doesRowPassFilter","setAllChildrenCount","doingTreeDataFiltering","treeDataDepthFirstFilter_1","alreadyFoundInParent","foundInParent","treeDataFilterCallback","defaultFilterCallback","setAllChildrenCountTreeData","allChildrenCount","setAllChildrenCountGridGrouping","isExcludeChildrenWhenTreeDataFiltering","blockCount","virtualRowCount","forEachBlockInOrder","destroyBlock","hack_setVirtualRowCount","onPageLoaded","checkVirtualRowCount","purgeBlocksIfNeeded","blockToExclude","blocksForPurging","a","maxBlocksProvided","blocksToKeep","emptyBlocksToKeep","MAX_EMPTY_BLOCKS_TO_KEEP","purgeBecauseBlockEmpty","purgeBecauseCacheFull","removeBlockFromCache","postCreateBlock","newBlock","setBlock","blockToRemove","lastRowIndexPlusOverflow","dynamicRowHeight","ids","getBlockIdsSorted","forEachBlockId","forEachBlockInReverseOrder","numberComparator","blockIds","keys","map","idStr","parseInt","getBlock","blockId","lastBlockId","inActiveRange","numberSequence","foundGapInSelection","hitFirstOrLast","invalidRange","valueService_1","postSortFunc","getPostSortFunc","pullDownGroupDataForHideOpenParents","sortedRowNodes","doDeltaSort","doFullSort","sorted","slice","updateChildIndexes","updateGroupDataForHiddenOpenParents","mapNodeToSortedNode","compareRowNodes","pos","currentPos","cleanNodes","passesDirtyNodesCheck","passesChangedPathCheck","cleanNodesMapped","sortedRowNode","changedNodes","mergeSortedArrays","arr1","arr2","j","compareResult","sortedNodeA","sortedNodeB","nodeA","nodeB","len","sortOption","isInverted","inverter","valueA","getValue","column","valueB","comparatorResult","getColDef","comparator","defaultComparator","isAccentedSort","valueService","listToSort","firstChild","lastChild","setFirstChild","setLastChild","setChildIndex","isGroupHideOpenParents","clearOperation","childRowNode","groupDisplayCols","getGroupDisplayColumns","groupDisplayCol","showRowGroup","displayingGroupKey","rowGroupColumn","getPrimaryColumn","thisRowNodeMatches","setGroupValue","parentToStealFrom","getFirstChildOfFirstChild","ValueService","RecursionType","clientSideNodeManager_1","changedPath_1","valueCache_1","ClientSideRowModel","refreshEverythingFunc","refreshModel","step","STEP_EVERYTHING","refreshEverythingAfterColsChangedFunc","afterColumnsChanged","addModalPriorityEventListener","EVENT_COLUMN_ROW_GROUP_CHANGED","EVENT_COLUMN_VALUE_CHANGED","onValueChanged","EVENT_COLUMN_PIVOT_CHANGED","STEP_PIVOT","EVENT_ROW_GROUP_OPENED","onRowGroupOpened","EVENT_COLUMN_PIVOT_MODE_CHANGED","refreshMapFunc","STEP_MAP","PROP_GROUP_REMOVE_SINGLE_CHILDREN","PROP_GROUP_REMOVE_LOWEST_SINGLE_CHILDREN","nodeManager","atLeastOneChange","rowAtStartPixel","rowAtEndPixel","firstRow","min","rowHeightEstimated","getRowHeightForNode","height","setRowTops","nextRowTop","rowsToDisplay","allowEstimate","getDomLayout","DOM_LAYOUT_NORMAL","estimated","setRowTop","resetRowTops","skipChildren","sibling","detailNode","ensureRowAtPixel","indexAtPixelNow","rowNodeAtPixelNow","keepEditingRows","showingRootNode","isAnimateRows","STEP_FILTER","STEP_SORT","ROW_MODEL_TYPE_CLIENT_SIDE","isPivotActive","STEP_AGGREGATE","createChangePath","noTransactions","doRowGrouping","groupState","doFilter","doPivot","doAggregate","doSort","doRowsToDisplay","$scope","$apply","rowsMissing","empty","isReady","firstRowHit","lastRowHit","groupsSelectChildren","forEachNodeAfterFilterAndSort","lookingForLastRow","skipThisGroupNode","inRange","childOfLastRow","isParentOfNode","getTopLevelNodes","getRootNode","indexOf","pixelToMatch","bottomPointer","topPointer","lastNode","last","midPointer","currentRowNode","isRowInPixel","topPixel","bottomPixel","pixelInRow","lastPixel","forEachLeafNode","recursivelyWalkNodesAndCallback","Normal","forEachNodeAfterFilter","AfterFilter","AfterFilterAndSort","forEachPivotNode","PivotNodes","nodes","recursionType","nodeChildren","leafGroup","aggregationStage","expandOrCollapseAll","expand","usingTreeData","recursiveExpandOrCollapse","shouldExpandOrCollapse","eventSource","EVENT_EXPAND_COLLAPSE_ALL","source","sortStage","groupStage","removeGroupsFromSelection","restoreGroupState","traverseNodesWithKey","filterStage","pivotStage","getGroupState","isRememberGroupStateWhenNewData","rowDataChangedEvent","EVENT_ROW_DATA_CHANGED","batchUpdateRowData","rowDataTransaction","rowDataTransactionBatch","waitMillis","getBatchUpdateWaitMillis","executeBatchUpdateRowData","valueCache","onDataChanged","callbackFuncsBound","rowNodeTrans","tranItem","rowNodeTran","commonUpdateRowData","func","EVENT_ROW_DATA_UPDATED","flattenStage","onRowHeightChanged","resetRowHeights","Context","ValueCache","Optional","ImmutableService","clientSideRowModel","createTransactionForRowData","existingNodesMap","suppressSortOrder","isSuppressMaintainUnsortedOrder","orderMap","existingNode","dataHasChanged","iterateObject","PinnedRowModel","setPinnedTopRowData","getPinnedTopRowData","setPinnedBottomRowData","getPinnedBottomRowData","floating","PINNED_TOP","pinnedTopRows","pinnedBottomRows","getRowAtPixel","rowTopPixel","createNodesFromData","EVENT_PINNED_ROW_DATA_CHANGED","allData","isTop","nextRowTop_1","rowPinned","PINNED_BOTTOM","getPinnedTopTotalHeight","getTotalHeight","getPinnedTopRowCount","getPinnedBottomRowCount","getPinnedTopRow","getPinnedBottomRow","forEachPinnedTopRow","forEachPinnedBottomRow","getPinnedBottomTotalHeight","infiniteBlock_1","moveItemsDown","moveFromIndex","moveCount","indexOfLastRowToMove","currentRowIndex","indexOfNodeWeWant","nodeForThisIndex","insertItems","indexToInsert","items","pageStartRow","pageEndRow","newRowNodes","currentRowInThisPage","newNodes","newNodesThisPage","dontCreatePage","createBlock","FlattenStage","skipLeafNodes","isPivotMode","showRootNode","topList","recursivelyAddToRowsToDisplay","includeGroupTotalFooter","isGroupIncludeTotalFooter","ensureFooterNodeExists","addRowNodeToRowsToDisplay","rowsToFlatten","groupSuppressRow","isGroupSuppressRow","hideOpenParents","groupRemoveSingleChildren","isGroupRemoveSingleChildren","groupRemoveLowestSingleChildren","isGroupRemoveLowestSingleChildren","isParent","isGroupSuppressedNode","isSkippedLeafNode","isRemovedSingleChildrenGroup","isRemovedLowestSingleChildrenGroup","neverAllowToExpand","isHiddenOpenParent","thisRowShouldBeRendered","excludedParent","uiLevelForChildren","isGroupIncludeFooter","createDetailNode","isGroupMultiAutoColumn","setUiLevel","groupNode","footerNode","footer","oldRowTop","masterNode","detail","selectable","flower","childFlower"],"mappings":";;;;;;GAOA,IAAIA,EAAcC,MAAQA,KAAKD,YAAe,SAAUE,EAAYC,EAAQC,EAAKC,GAC7E,IAA2HC,EAAvHC,EAAIC,UAAUC,OAAQC,EAAIH,EAAI,EAAIJ,EAAkB,OAATE,EAAgBA,EAAOM,OAAOC,yBAAyBT,EAAQC,GAAOC,EACrH,GAAuB,kBAAZQ,SAAoD,oBAArBA,QAAQC,SAAyBJ,EAAIG,QAAQC,SAASZ,EAAYC,EAAQC,EAAKC,QACpH,IAAK,IAAIU,EAAIb,EAAWO,OAAS,EAAGM,GAAK,EAAGA,KAAST,EAAIJ,EAAWa,MAAIL,GAAKH,EAAI,EAAID,EAAEI,GAAKH,EAAI,EAAID,EAAEH,EAAQC,EAAKM,GAAKJ,EAAEH,EAAQC,KAASM,GAChJ,OAAOH,EAAI,GAAKG,GAAKC,OAAOK,eAAeb,EAAQC,EAAKM,GAAIA,GAE5DO,EAAchB,MAAQA,KAAKgB,YAAe,SAAUC,EAAGC,GACvD,GAAuB,kBAAZN,SAAoD,oBAArBA,QAAQO,SAAyB,OAAOP,QAAQO,SAASF,EAAGC,IAE1GR,OAAOK,eAAeK,EAAS,aAAc,CAAEC,OAAO,IACtD,IAAIC,EAAY,EAAQ,QACpBC,EAAuB,EAAQ,QAC/BC,EAAgB,EAAQ,QACxBC,EAAmB,EAAQ,QAC3BC,EAAqB,EAAQ,QAC7BC,EAAU,EAAQ,QAClBC,EAA2B,WAC3B,SAASA,KAoDT,OAlDAA,EAAUC,UAAUC,QAAU,SAAUC,GACpC,IAAIC,EAAchC,KAAKiC,eAAeC,0BAClCC,EAAaR,EAAQS,EAAEC,OAAOL,IAAgBA,EAAYxB,OAAS,EACnE8B,EAAYH,GACTR,EAAQS,EAAEC,OAAON,EAAOQ,sBAKxBvC,KAAKwC,mBAAmBC,cAE3BC,EAAiBJ,EAAYtC,KAAK2C,oBAAoBZ,EAAOQ,qBAAuB,KACpFK,EAAe5C,KAAK6C,iBAAiBC,kBACrCC,EAAiBpB,EAAQS,EAAEY,eAAeJ,GAC9C5C,KAAKiD,YAAYC,KAAKlB,EAAaG,EAAYG,EAAWI,EAAgBX,EAAOoB,YAAaJ,IAElGnB,EAAUC,UAAUc,oBAAsB,SAAUJ,GAChD,IAAIa,EAAa,GACbC,EAAe,SAAUC,GACrBA,GACAA,EAASC,SAAQ,SAAUC,GAAW,OAAOJ,EAAWI,EAAQC,KAAM,MAS9E,OALAlB,EAAoBgB,SAAQ,SAAUG,GAClCL,EAAaK,EAAKC,KAClBN,EAAaK,EAAKE,QAClBP,EAAaK,EAAKG,WAEfT,GAEXrD,EAAW,CACPuB,EAAUwC,UAAU,sBACpB9C,EAAW,cAAeO,EAAqBwC,qBAChDnC,EAAUC,UAAW,0BAAsB,GAC9C9B,EAAW,CACPuB,EAAUwC,UAAU,eACpB9C,EAAW,cAAeQ,EAAcwC,cACzCpC,EAAUC,UAAW,mBAAe,GACvC9B,EAAW,CACPuB,EAAUwC,UAAU,kBACpB9C,EAAW,cAAeS,EAAiBwC,iBAC5CrC,EAAUC,UAAW,sBAAkB,GAC1C9B,EAAW,CACPuB,EAAUwC,UAAU,oBACpB9C,EAAW,cAAeU,EAAmBwC,mBAC9CtC,EAAUC,UAAW,wBAAoB,GAC5CD,EAAY7B,EAAW,CACnBuB,EAAU6C,KAAK,cAChBvC,GACIA,EArDmB,GAuD9BR,EAAQQ,UAAYA,G;;;;;;GCvEpBlB,OAAOK,eAAeK,EAAS,aAAc,CAAEC,OAAO,IAOtD,IAAI+C,EAA6B,WAC7B,SAASA,EAAYC,EAAgBC,GAOjCtE,KAAKuE,QAAS,EAGdvE,KAAKwE,iBAAmB,GAExBxE,KAAKyE,WAAa,GAClBzE,KAAKqE,eAAiBA,EACtBrE,KAAK0E,SAAW,CACZlB,QAASc,EACTK,SAAU,MAEd3E,KAAKyE,WAAWH,EAASb,IAAMzD,KAAK0E,SA8HxC,OAzHAN,EAAYvC,UAAU+C,YAAc,WAChC5E,KAAKuE,QAAS,GAElBH,EAAYvC,UAAUgD,SAAW,WAC7B,OAAO7E,KAAKuE,QAEhBH,EAAYvC,UAAUiD,4BAA8B,SAAUC,EAAUC,GACpE,GAAID,EAASJ,SACT,IAAK,IAAI7D,EAAI,EAAGA,EAAIiE,EAASJ,SAASnE,OAAQM,IAC1Cd,KAAK8E,4BAA4BC,EAASJ,SAAS7D,GAAIkE,GAG/DA,EAASD,EAASvB,UAEtBY,EAAYvC,UAAUoD,2BAA6B,SAAUzB,EAASwB,EAAUE,GAC5E,GAAI1B,EAAQ2B,mBACR,IAAK,IAAIrE,EAAI,EAAGA,EAAI0C,EAAQ2B,mBAAmB3E,OAAQM,IAAK,CACxD,IAAIsE,EAAY5B,EAAQ2B,mBAAmBrE,GACvCsE,EAAUD,mBACVnF,KAAKiF,2BAA2BzB,EAAQ2B,mBAAmBrE,GAAIkE,EAAUE,GAEpEA,GACLF,EAASI,GAIrBJ,EAASxB,IAIbY,EAAYvC,UAAUwD,6BAA+B,SAAUL,EAAUM,QAC3C,IAAtBA,IAAgCA,GAAoB,GACpDtF,KAAKuE,OAGLvE,KAAK8E,4BAA4B9E,KAAK0E,SAAUM,GAIhDhF,KAAKiF,2BAA2BjF,KAAK0E,SAASlB,QAASwB,EAAUM,IAGzElB,EAAYvC,UAAU0D,oBAAsB,SAAUP,GAClDA,EAAShF,KAAK0E,SAASlB,UAE3BY,EAAYvC,UAAU2D,gBAAkB,SAAUhC,GAC9C,IAAIiC,EAAUjC,EACVkC,EAAgB,EACpB,OAAQ1F,KAAKyE,WAAWgB,EAAQhC,IAAK,CACjC,IAAIkC,EAAW,CACXnC,QAASiC,EACTd,SAAU,MAEd3E,KAAKyE,WAAWgB,EAAQhC,IAAMkC,EAC9BD,IACAD,EAAUA,EAAQG,OAEtB,OAAOF,GAEXtB,EAAYvC,UAAUgE,mBAAqB,SAAUrC,EAASsC,GAC1D,IAAIC,EAAQ/F,KACZ,GAAKA,KAAKqE,gBAAmByB,EAA7B,CAGA,IAAIL,EAAUjC,EACd,MAAOiC,EAGEzF,KAAKwE,iBAAiBiB,EAAQhC,MAC/BzD,KAAKwE,iBAAiBiB,EAAQhC,IAAM,IAExCqC,EAAQvC,SAAQ,SAAUyC,GAAO,OAAOD,EAAMvB,iBAAiBiB,EAAQhC,IAAIuC,EAAIC,UAAW,KAC1FR,EAAUA,EAAQG,SAG1BxB,EAAYvC,UAAUqE,cAAgB,SAAU1C,EAASkC,GAErD,IADA,IAAID,EAAUjC,EACL1C,EAAI,EAAGA,EAAI4E,EAAe5E,IAAK,CACpC,IAAIqF,EAAWnG,KAAKyE,WAAWgB,EAAQhC,IACnC2C,EAAapG,KAAKyE,WAAWgB,EAAQG,OAAOnC,IAC3C2C,EAAWzB,WACZyB,EAAWzB,SAAW,IAE1ByB,EAAWzB,SAAS0B,KAAKF,GACzBV,EAAUA,EAAQG,SAM1BxB,EAAYvC,UAAUyE,cAAgB,SAAU9C,EAASsC,GAMrD,IAAIJ,EAAgB1F,KAAKwF,gBAAgBhC,GAEzCxD,KAAKkG,cAAc1C,EAASkC,GAE5B1F,KAAK6F,mBAAmBrC,EAASsC,IAErC1B,EAAYvC,UAAU0E,QAAU,SAAU/C,GACtC,OAAOxD,KAAKuE,SAAWvE,KAAKyE,WAAWjB,EAAQC,KAEnDW,EAAYvC,UAAU2E,uBAAyB,SAAUhD,EAASZ,GAC9D,IAAK5C,KAAKqE,eACN,OAAOzB,EAEX,IAAI6D,EAAkBzG,KAAKwE,iBAAiBhB,EAAQC,IAChDiD,EAAS9D,EAAa+D,QAAO,SAAUX,GAAO,OAAOS,EAAgBT,EAAIC,YAC7E,OAAOS,GAEXtC,EAAYvC,UAAU+E,0BAA4B,SAAUpD,EAASZ,GACjE,IAAK5C,KAAKqE,eACN,OAAO,KAEX,IAAIoC,EAAkBzG,KAAKwE,iBAAiBhB,EAAQC,IAChDiD,EAAS9D,EAAa+D,QAAO,SAAUX,GAAO,OAAQS,EAAgBT,EAAIC,YAC9E,OAAOS,GAEJtC,EAjJqB,GAmJhChD,EAAQgD,YAAcA,G;;;;;;GC1JtB,IAAIyC,EAAa7G,MAAQA,KAAK6G,WAAc,WACxC,IAAIC,EAAgB,SAAUzG,EAAG0G,GAI7B,OAHAD,EAAgBpG,OAAOsG,gBAClB,CAAEC,UAAW,cAAgBC,OAAS,SAAU7G,EAAG0G,GAAK1G,EAAE4G,UAAYF,IACvE,SAAU1G,EAAG0G,GAAK,IAAK,IAAII,KAAKJ,EAAOA,EAAEK,eAAeD,KAAI9G,EAAE8G,GAAKJ,EAAEI,KAClEL,EAAczG,EAAG0G,IAE5B,OAAO,SAAU1G,EAAG0G,GAEhB,SAASM,IAAOrH,KAAKsH,YAAcjH,EADnCyG,EAAczG,EAAG0G,GAEjB1G,EAAEwB,UAAkB,OAANkF,EAAarG,OAAO6G,OAAOR,IAAMM,EAAGxF,UAAYkF,EAAElF,UAAW,IAAIwF,IAV3C,GAa5C3G,OAAOK,eAAeK,EAAS,aAAc,CAAEC,OAAO,IACtD,IAAIM,EAAU,EAAQ,QAClB6F,EAAY,EAAQ,QACpBC,EAAa,EAAQ,QACrBC,EAA8B,SAAUC,GAExC,SAASD,EAAaE,EAAaC,GAC/B,IAAI9B,EAAQ4B,EAAOG,KAAK9H,OAASA,KASjC,OARA+F,EAAMgC,QAAU,EAChBhC,EAAMiC,MAAQN,EAAaO,YAC3BlC,EAAM8B,mBAAqBA,EAC3B9B,EAAM6B,YAAcA,EAGpB7B,EAAMmC,SAAWN,EAAcC,EAAmBM,UAClDpC,EAAMqC,OAASrC,EAAMmC,SAAWL,EAAmBM,UAC5CpC,EA4KX,OAvLAc,EAAUa,EAAcC,GAaxBD,EAAa7F,UAAUwG,cAAgB,SAAUC,GAC7C,IAAI5B,GAAS,EAMb,OALA1G,KAAKuI,qBAAoB,SAAU/E,GAC3BA,EAAQgF,WACR9B,GAAS,KAEd4B,GACI5B,GAEXgB,EAAa7F,UAAU0G,oBAAsB,SAAUvD,EAAUsD,GAC7D,IAAK,IAAIG,EAAWzI,KAAKkI,SAAUO,EAAWzI,KAAKoI,OAAQK,IAGvD,GAAIA,EAAWH,EAAU,CACrB,IAAI9E,EAAUxD,KAAK0I,sBAAsBD,GACzCzD,EAASxB,EAASiF,KAI9Bf,EAAa7F,UAAU8G,YAAc,SAAU3D,EAAU4D,EAAUN,EAAUO,GACzE7I,KAAKuI,qBAAoB,SAAU/E,GAC/BwB,EAASxB,EAASoF,EAASE,QAGvBD,GAAQrF,EAAQuF,eAChBvF,EAAQuF,cAAcC,gBAAgBhE,EAAU4D,KAErDN,IAEPZ,EAAa7F,UAAUmH,gBAAkB,SAAUhE,EAAU4D,EAAUN,GACnEtI,KAAK2I,YAAY3D,EAAU4D,EAAUN,GAAU,IAEnDZ,EAAa7F,UAAUoH,mBAAqB,SAAUjE,EAAU4D,EAAUN,GACtEtI,KAAK2I,YAAY3D,EAAU4D,EAAUN,GAAU,IAEnDZ,EAAa7F,UAAUqH,WAAa,WAChC,OAAOlJ,KAAK+H,SAEhBL,EAAa7F,UAAUsH,gBAAkB,WACrC,OAAOnJ,KAAKoJ,cAEhB1B,EAAa7F,UAAU6G,sBAAwB,SAAUD,EAAUY,QACjC,IAA1BA,IAAoCA,GAAwB,GAC3DA,IACDrJ,KAAKoJ,aAAepJ,KAAK6H,mBAAmByB,qBAAqBR,QAErE,IAAIS,EAAad,EAAWzI,KAAKkI,SACjC,OAAOlI,KAAKsD,SAASiG,IAEzB7B,EAAa7F,UAAU2H,KAAO,SAAUC,GACpCzJ,KAAKyJ,MAAQA,EACbzJ,KAAK0J,kBAEThC,EAAa7F,UAAU8H,YAAc,WACjC,OAAO3J,KAAKkI,UAEhBR,EAAa7F,UAAU+H,UAAY,WAC/B,OAAO5J,KAAKoI,QAEhBV,EAAa7F,UAAUgI,eAAiB,WACpC,OAAO7J,KAAK4H,aAEhBF,EAAa7F,UAAUiI,SAAW,WAE9B9J,KAAK+H,UACL/H,KAAKgI,MAAQN,EAAaO,aAE9BP,EAAa7F,UAAUkI,iBAAmB,WACtC/J,KAAK8J,WACL9J,KAAKsD,SAASC,SAAQ,SAAUC,GAC5BA,EAAQwG,QAAQ,UAGxBtC,EAAa7F,UAAUoI,SAAW,WAC9B,OAAOjK,KAAKgI,OAEhBN,EAAa7F,UAAUqI,WAAa,SAAUzB,EAAUjF,GACpD,IAAI+F,EAAad,EAAWzI,KAAKkI,SACjClI,KAAKsD,SAASiG,GAAc/F,GAEhCkE,EAAa7F,UAAUsI,gBAAkB,SAAU1B,GAC/C,IAAIc,EAAad,EAAWzI,KAAKkI,SAC7BkC,EAAapK,KAAKqK,mBAAmB5B,GAEzC,OADAzI,KAAKsD,SAASiG,GAAca,EACrBA,GAEX1C,EAAa7F,UAAUyI,WAAa,SAAU7B,EAAU8B,GACpD,IAAIH,EAAapK,KAAKmK,gBAAgB1B,GAEtC,OADAzI,KAAKwK,aAAaJ,EAAYG,EAAUvK,KAAKkI,SAAWO,GACjD2B,GAEX1C,EAAa7F,UAAUwI,mBAAqB,SAAU5B,GAClD,IAAIjF,EAAU,IAAIgE,EAAUiD,QAG5B,OAFAzK,KAAKyJ,MAAMiB,QAAQC,SAASnH,GAC5BA,EAAQoH,aAAa5K,KAAK6H,mBAAmBgD,WACtCrH,GAGXkE,EAAa7F,UAAU6H,eAAiB,WACpC1J,KAAKsD,SAAW,GAChB,IAAK,IAAIxC,EAAI,EAAGA,EAAId,KAAK6H,mBAAmBM,UAAWrH,IAAK,CACxD,IAAI2H,EAAWzI,KAAKkI,SAAWpH,EAC3B0C,EAAUxD,KAAKqK,mBAAmB5B,GACtCzI,KAAKsD,SAAS+C,KAAK7C,KAG3BkE,EAAa7F,UAAUiJ,KAAO,WAC1B9K,KAAKgI,MAAQN,EAAaqD,cAC1B/K,KAAKgL,sBAETtD,EAAa7F,UAAUoJ,eAAiB,WACpCjL,KAAKgI,MAAQN,EAAawD,aAC1B,IAAIC,EAAQ,CACRC,KAAM1D,EAAa2D,oBACnBC,SAAS,EACTC,KAAMvL,KACNwL,QAAS,MAEbxL,KAAKyL,cAAcN,IAEvBzD,EAAa7F,UAAU6J,oBAAsB,SAAUC,GACnD,IAAI5F,EAAQ/F,KACR4L,EAAoB,GACxB5L,KAAKsD,SAASC,SAAQ,SAAUC,EAASqI,GACrC,IAAIC,EAAOH,EAAKE,GACZrI,EAAQuI,MACRH,EAAkBvF,KAAK7C,GAE3BuC,EAAMyE,aAAahH,EAASsI,EAAM/F,EAAMmC,SAAW2D,MAEnDD,EAAkBpL,OAAS,GAC3BR,KAAKyJ,MAAMuC,YAAYC,WAAWL,IAG1ClE,EAAa7F,UAAUqK,QAAU,WAC7BvE,EAAO9F,UAAUqK,QAAQpE,KAAK9H,MAC9BA,KAAKsD,SAASC,SAAQ,SAAUC,GACxBA,EAAQuF,gBACRvF,EAAQuF,cAAcmD,UACtB1I,EAAQuF,cAAgB,MAK5BvF,EAAQ2I,kBAGhBzE,EAAa7F,UAAUuK,WAAa,SAAUrE,EAAS4D,EAAMH,GAIrDzD,IAAY/H,KAAK+H,UACjB/H,KAAKgI,MAAQN,EAAa2E,aAC1BrM,KAAK0L,oBAAoBC,IAE7BH,EAAU7J,EAAQS,EAAEkK,YAAYd,GAEhC,IAAIL,EAAQ,CACRC,KAAM1D,EAAa2D,oBACnBC,SAAS,EACTC,KAAMvL,KACNwL,QAASA,GAEbxL,KAAKyL,cAAcN,IAEvBzD,EAAa2D,oBAAsB,eACnC3D,EAAaO,YAAc,QAC3BP,EAAaqD,cAAgB,UAC7BrD,EAAa2E,aAAe,SAC5B3E,EAAawD,aAAe,SACrBxD,EAxLsB,CAyL/BD,EAAW8E,UACbnL,EAAQsG,aAAeA,G;;;;;;GC3MvB,IAAI3H,EAAcC,MAAQA,KAAKD,YAAe,SAAUE,EAAYC,EAAQC,EAAKC,GAC7E,IAA2HC,EAAvHC,EAAIC,UAAUC,OAAQC,EAAIH,EAAI,EAAIJ,EAAkB,OAATE,EAAgBA,EAAOM,OAAOC,yBAAyBT,EAAQC,GAAOC,EACrH,GAAuB,kBAAZQ,SAAoD,oBAArBA,QAAQC,SAAyBJ,EAAIG,QAAQC,SAASZ,EAAYC,EAAQC,EAAKC,QACpH,IAAK,IAAIU,EAAIb,EAAWO,OAAS,EAAGM,GAAK,EAAGA,KAAST,EAAIJ,EAAWa,MAAIL,GAAKH,EAAI,EAAID,EAAEI,GAAKH,EAAI,EAAID,EAAEH,EAAQC,EAAKM,GAAKJ,EAAEH,EAAQC,KAASM,GAChJ,OAAOH,EAAI,GAAKG,GAAKC,OAAOK,eAAeb,EAAQC,EAAKM,GAAIA,GAE5DO,EAAchB,MAAQA,KAAKgB,YAAe,SAAUC,EAAGC,GACvD,GAAuB,kBAAZN,SAAoD,oBAArBA,QAAQO,SAAyB,OAAOP,QAAQO,SAASF,EAAGC,IAE1GR,OAAOK,eAAeK,EAAS,aAAc,CAAEC,OAAO,IACtD,IAAIC,EAAY,EAAQ,QACpBC,EAAuB,EAAQ,QAC/BiL,EAAkB,EAAQ,QAC1BC,EAAsB,EAAQ,QAC9BC,EAA6B,WAC7B,SAASA,KAsBT,OApBAA,EAAY7K,UAAUC,QAAU,SAAUC,GACtC,IAAIyB,EAAUzB,EAAOyB,QAASL,EAAcpB,EAAOoB,YACnDnD,KAAK2M,cAAchG,OAAOxD,GAC1BnD,KAAK4M,kBAAkBC,+BAA+BrJ,IAE1DzD,EAAW,CACPuB,EAAUwC,UAAU,sBACpB9C,EAAW,cAAeO,EAAqBwC,qBAChD2I,EAAY7K,UAAW,0BAAsB,GAChD9B,EAAW,CACPuB,EAAUwC,UAAU,qBACpB9C,EAAW,cAAeyL,EAAoBK,oBAC/CJ,EAAY7K,UAAW,yBAAqB,GAC/C9B,EAAW,CACPuB,EAAUwC,UAAU,iBACpB9C,EAAW,cAAewL,EAAgBO,gBAC3CL,EAAY7K,UAAW,qBAAiB,GAC3C6K,EAAc3M,EAAW,CACrBuB,EAAU6C,KAAK,gBAChBuI,GACIA,EAvBqB,GAyBhCtL,EAAQsL,YAAcA,G;;;;;;GCvCtB,IAAI7F,EAAa7G,MAAQA,KAAK6G,WAAc,WACxC,IAAIC,EAAgB,SAAUzG,EAAG0G,GAI7B,OAHAD,EAAgBpG,OAAOsG,gBAClB,CAAEC,UAAW,cAAgBC,OAAS,SAAU7G,EAAG0G,GAAK1G,EAAE4G,UAAYF,IACvE,SAAU1G,EAAG0G,GAAK,IAAK,IAAII,KAAKJ,EAAOA,EAAEK,eAAeD,KAAI9G,EAAE8G,GAAKJ,EAAEI,KAClEL,EAAczG,EAAG0G,IAE5B,OAAO,SAAU1G,EAAG0G,GAEhB,SAASM,IAAOrH,KAAKsH,YAAcjH,EADnCyG,EAAczG,EAAG0G,GAEjB1G,EAAEwB,UAAkB,OAANkF,EAAarG,OAAO6G,OAAOR,IAAMM,EAAGxF,UAAYkF,EAAElF,UAAW,IAAIwF,IAV3C,GAaxCtH,EAAcC,MAAQA,KAAKD,YAAe,SAAUE,EAAYC,EAAQC,EAAKC,GAC7E,IAA2HC,EAAvHC,EAAIC,UAAUC,OAAQC,EAAIH,EAAI,EAAIJ,EAAkB,OAATE,EAAgBA,EAAOM,OAAOC,yBAAyBT,EAAQC,GAAOC,EACrH,GAAuB,kBAAZQ,SAAoD,oBAArBA,QAAQC,SAAyBJ,EAAIG,QAAQC,SAASZ,EAAYC,EAAQC,EAAKC,QACpH,IAAK,IAAIU,EAAIb,EAAWO,OAAS,EAAGM,GAAK,EAAGA,KAAST,EAAIJ,EAAWa,MAAIL,GAAKH,EAAI,EAAID,EAAEI,GAAKH,EAAI,EAAID,EAAEH,EAAQC,EAAKM,GAAKJ,EAAEH,EAAQC,KAASM,GAChJ,OAAOH,EAAI,GAAKG,GAAKC,OAAOK,eAAeb,EAAQC,EAAKM,GAAIA,GAE5DO,EAAchB,MAAQA,KAAKgB,YAAe,SAAUC,EAAGC,GACvD,GAAuB,kBAAZN,SAAoD,oBAArBA,QAAQO,SAAyB,OAAOP,QAAQO,SAASF,EAAGC,IAE1GR,OAAOK,eAAeK,EAAS,aAAc,CAAEC,OAAO,IACtD,IAAIoG,EAAa,EAAQ,QACrBuF,EAAiB,EAAQ,QACzBC,EAAW,EAAQ,QACnB3L,EAAY,EAAQ,QACpBC,EAAuB,EAAQ,QAC/B2L,EAAyB,EAAQ,QACjCC,EAA+C,SAAUxF,GAEzD,SAASwF,IACL,OAAkB,OAAXxF,GAAmBA,EAAOyF,MAAMpN,KAAMO,YAAcP,KA2C/D,OA7CA6G,EAAUsG,EAA+BxF,GAIzCwF,EAA8BtL,UAAUwL,iBAAmB,SAAUC,GACjEtN,KAAKsN,UAAYA,EACjBtN,KAAKuN,4BAA4BvN,KAAKwN,aAAcP,EAASQ,OAAOC,0BAA2B1N,KAAK2N,oBAAoBC,KAAK5N,OAC7HA,KAAKuN,4BAA4BvN,KAAKwN,aAAcP,EAASQ,OAAOI,gCAAiC7N,KAAK8N,0BAA0BF,KAAK5N,OACzIA,KAAK+N,iBAETZ,EAA8BtL,UAAUmM,UAAY,WAChD,OAAQhO,KAAKwC,mBAAmByL,4BAEpCd,EAA8BtL,UAAUiM,0BAA4B,WAChE9N,KAAK+N,iBAETZ,EAA8BtL,UAAU8L,oBAAsB,WAC1D3N,KAAK+N,iBAETZ,EAA8BtL,UAAUkM,cAAgB,WACpD,IAAI/N,KAAKgO,YAAT,CAGA,IAAInD,EAAY7K,KAAKwC,mBAAmB0L,uBACpCC,EAAanO,KAAKsN,UAAUc,gBAChC,GAAID,EAAa,EAAG,CAChB,IAAIE,EAAcC,KAAKC,MAAMJ,EAAatD,GAC1C7K,KAAKwC,mBAAmBgM,YAAY,qBAAsBH,MAGlEtO,EAAW,CACPuB,EAAUwC,UAAU,gBACpB9C,EAAW,cAAegM,EAAeyB,eAC1CtB,EAA8BtL,UAAW,oBAAgB,GAC5D9B,EAAW,CACPuB,EAAUwC,UAAU,sBACpB9C,EAAW,cAAeO,EAAqBwC,qBAChDoJ,EAA8BtL,UAAW,0BAAsB,GAClE9B,EAAW,CACPuB,EAAUwC,UAAU,wBACpB9C,EAAW,cAAekM,EAAuBwB,uBAClDvB,EAA8BtL,UAAW,4BAAwB,GACpEsL,EAAgCpN,EAAW,CACvCuB,EAAU6C,KAAK,kCAChBgJ,GACIA,EA9CuC,CA+ChD1F,EAAW8E,UACbnL,EAAQ+L,8BAAgCA,G;;;;;;GC7ExC,IAAItG,EAAa7G,MAAQA,KAAK6G,WAAc,WACxC,IAAIC,EAAgB,SAAUzG,EAAG0G,GAI7B,OAHAD,EAAgBpG,OAAOsG,gBAClB,CAAEC,UAAW,cAAgBC,OAAS,SAAU7G,EAAG0G,GAAK1G,EAAE4G,UAAYF,IACvE,SAAU1G,EAAG0G,GAAK,IAAK,IAAII,KAAKJ,EAAOA,EAAEK,eAAeD,KAAI9G,EAAE8G,GAAKJ,EAAEI,KAClEL,EAAczG,EAAG0G,IAE5B,OAAO,SAAU1G,EAAG0G,GAEhB,SAASM,IAAOrH,KAAKsH,YAAcjH,EADnCyG,EAAczG,EAAG0G,GAEjB1G,EAAEwB,UAAkB,OAANkF,EAAarG,OAAO6G,OAAOR,IAAMM,EAAGxF,UAAYkF,EAAElF,UAAW,IAAIwF,IAV3C,GAaxCtH,EAAcC,MAAQA,KAAKD,YAAe,SAAUE,EAAYC,EAAQC,EAAKC,GAC7E,IAA2HC,EAAvHC,EAAIC,UAAUC,OAAQC,EAAIH,EAAI,EAAIJ,EAAkB,OAATE,EAAgBA,EAAOM,OAAOC,yBAAyBT,EAAQC,GAAOC,EACrH,GAAuB,kBAAZQ,SAAoD,oBAArBA,QAAQC,SAAyBJ,EAAIG,QAAQC,SAASZ,EAAYC,EAAQC,EAAKC,QACpH,IAAK,IAAIU,EAAIb,EAAWO,OAAS,EAAGM,GAAK,EAAGA,KAAST,EAAIJ,EAAWa,MAAIL,GAAKH,EAAI,EAAID,EAAEI,GAAKH,EAAI,EAAID,EAAEH,EAAQC,EAAKM,GAAKJ,EAAEH,EAAQC,KAASM,GAChJ,OAAOH,EAAI,GAAKG,GAAKC,OAAOK,eAAeb,EAAQC,EAAKM,GAAIA,GAE5DO,EAAchB,MAAQA,KAAKgB,YAAe,SAAUC,EAAGC,GACvD,GAAuB,kBAAZN,SAAoD,oBAArBA,QAAQO,SAAyB,OAAOP,QAAQO,SAASF,EAAGC,IAE1GR,OAAOK,eAAeK,EAAS,aAAc,CAAEC,OAAO,IACtD,IAAIE,EAAuB,EAAQ,QAC/BD,EAAY,EAAQ,QACpB0L,EAAiB,EAAQ,QACzB2B,EAAwB,EAAQ,QAChC1B,EAAW,EAAQ,QACnBxL,EAAmB,EAAQ,QAC3BmN,EAAkB,EAAQ,QAC1BC,EAAc,EAAQ,QACtBC,EAAkB,EAAQ,QAC1BrH,EAAa,EAAQ,QACrBsH,EAAiB,EAAQ,QACzBC,EAAuB,EAAQ,QAC/BC,EAAY,EAAQ,QACpBC,EAAc,EAAQ,QACtBvN,EAAU,EAAQ,QAClBwN,EAAgB,EAAQ,QACxBC,EAAkC,SAAUzH,GAE5C,SAASyH,IACL,OAAkB,OAAXzH,GAAmBA,EAAOyF,MAAMpN,KAAMO,YAAcP,KAiV/D,OAnVA6G,EAAUuI,EAAkBzH,GAI5ByH,EAAiBvN,UAAUwN,aAAe,SAAUxD,GAChD,MAAO,CACHhB,UAAW7K,KAAK6K,UAChByE,OAAQtP,KAAK6K,UAAYgB,IAIjCuD,EAAiBvN,UAAU0N,sBAAwB,SAAUC,EAAYC,EAAUC,EAAiBC,GAAiB,OAAO,GAC5HP,EAAiBvN,UAAU2H,KAAO,WAC9B,IAAIzD,EAAQ/F,KACPA,KAAKwC,mBAAmBoN,uBAG7B5P,KAAK6K,UAAY7K,KAAKwC,mBAAmB0L,uBACzClO,KAAK6P,oBACL7P,KAAK8P,cAAc9P,KAAKwC,mBAAmBuN,iBAC3C/P,KAAKgQ,gBAAe,WAAc,OAAOjK,EAAMkK,oBAEnDb,EAAiBvN,UAAUqO,kBAAoB,WACvClQ,KAAKmQ,aACDnQ,KAAKmQ,WAAWjE,SAChBlM,KAAKmQ,WAAWjE,UAEpBlM,KAAKgM,YAAYoE,oBACjBpQ,KAAKmQ,WAAa,OAG1Bf,EAAiBvN,UAAUwO,eAAiB,WACxC,QAAOrQ,KAAKsQ,eAAgBtQ,KAAKsQ,cAAcC,iBAEnDnB,EAAiBvN,UAAUgO,kBAAoB,WAC3C7P,KAAKuN,4BAA4BvN,KAAKwN,aAAcP,EAASQ,OAAO+C,qBAAsBxQ,KAAKyQ,gBAAgB7C,KAAK5N,OACpHA,KAAKuN,4BAA4BvN,KAAKwN,aAAcP,EAASQ,OAAOiD,mBAAoB1Q,KAAK2Q,cAAc/C,KAAK5N,OAChHA,KAAKuN,4BAA4BvN,KAAKwN,aAAcP,EAASQ,OAAOmD,gCAAiC5Q,KAAK6Q,mBAAmBjD,KAAK5N,QAEtIoP,EAAiBvN,UAAU4O,gBAAkB,WACzCzQ,KAAK8Q,SAET1B,EAAiBvN,UAAU8O,cAAgB,WACvC3Q,KAAK8Q,SAET1B,EAAiBvN,UAAUgP,mBAAqB,WAC5C,IAAIE,EAKAA,GADA/Q,KAAKgR,aACWhR,KAAKiR,uBAMrBF,GACA/Q,KAAK8Q,SAGb1B,EAAiBvN,UAAUoP,qBAAuB,WAC9C,OAAQtP,EAAQS,EAAE8O,WAAWlR,KAAKgR,YAAYG,UAAWnR,KAAKiC,eAAemP,iBAEjFhC,EAAiBvN,UAAUwP,QAAU,WACjC,OAAOxC,EAAYyC,UAAUC,yBAEjCnC,EAAiBvN,UAAUiO,cAAgB,SAAUK,GACjDnQ,KAAKkQ,oBACLlQ,KAAKmQ,WAAaA,EAEdA,IACAnQ,KAAKwR,qBACLxR,KAAK8Q,UAGb1B,EAAiBvN,UAAU2P,mBAAqB,WAC5C,IAAIC,EAAKzR,KAAKmQ,WAEVxO,EAAQS,EAAEC,OAAOoP,EAAGC,wBACpBC,QAAQC,MAAM,sHAEdjQ,EAAQS,EAAEC,OAAOoP,EAAGI,kBACpBF,QAAQC,MAAM,0GAEdjQ,EAAQS,EAAEC,OAAOoP,EAAGK,eACpBH,QAAQC,MAAM,oGAEdjQ,EAAQS,EAAEC,OAAOoP,EAAGtJ,YACpBwJ,QAAQC,MAAM,qGAGtBxC,EAAiBvN,UAAUkQ,QAAU,WACjC,OAAOpQ,EAAQS,EAAE4P,QAAQhS,KAAKsQ,gBAElClB,EAAiBvN,UAAUoQ,eAAiB,WACxC,OAAOtQ,EAAQS,EAAEC,OAAOrC,KAAKsQ,gBAEjClB,EAAiBvN,UAAUqQ,4BAA8B,SAAUC,EAAcC,GAC7E,OAAOpS,KAAKsQ,cAAgBtQ,KAAKsQ,cAAc+B,mBAAmBF,EAAcC,GAAe,IAEnGhD,EAAiBvN,UAAUiP,MAAQ,WAG/B,IAAInP,EAAQS,EAAE4P,QAAQhS,KAAKmQ,YAA3B,CAMA,IAAImC,EAAoB3Q,EAAQS,EAAEC,OAAOrC,KAAKwC,mBAAmB+P,oBAC5DD,GACDtS,KAAKwS,oBAAoB1B,QAE7B9Q,KAAKyS,aACL,IAAItH,EAAQnL,KAAK0S,0BACjB1S,KAAKwN,aAAa/B,cAAcN,KAEpCiE,EAAiBvN,UAAU6Q,wBAA0B,WACjD,MAAO,CACHtH,KAAM6B,EAASQ,OAAOkF,oBACtBC,IAAK5S,KAAK6S,QACVC,UAAW9S,KAAK8S,UAGhBC,SAAS,EACTC,SAAS,EACTC,kBAAkB,EAClBC,SAAS,IAGjB9D,EAAiBvN,UAAU4Q,WAAa,WAEpCzS,KAAKiQ,eACL,IAAIyB,EAAwB1R,KAAKwC,mBAAmB2Q,qCAChDC,EAA0BpT,KAAKwC,mBAAmB6Q,6BAGtDrT,KAAKsT,mBAAqB,IAAItE,EAAqBuE,mBAAmB7B,EAAuB0B,GAC7FpT,KAAKwT,aAAa7I,SAAS3K,KAAKsT,oBAChCtT,KAAKgR,YAAc,CAEfb,WAAYnQ,KAAKmQ,WAEjBsD,YAAazT,KAAK0T,cAAcC,iBAChCxC,UAAWnR,KAAKiC,eAAemP,eAC/BkC,mBAAoBtT,KAAKsT,mBAIzB5B,sBAAuBA,EACvBI,aAAc9R,KAAKwC,mBAAmBoR,uBACtCC,gBAAiB7T,KAAKwC,mBAAmBsR,6BACzCC,iBAAkB/T,KAAKwC,mBAAmBwR,sBAC1C7L,UAAWnI,KAAKwC,mBAAmByR,oBACnCpJ,UAAW7K,KAAKwC,mBAAmB0L,uBAGnC5E,qBAAsB,IAAI3H,EAAQuS,gBAGjClU,KAAKgR,YAAYU,uBAA2B1R,KAAKgR,YAAYU,uBAAyB,IACvF1R,KAAKgR,YAAYU,sBAAwB,GAIxC1R,KAAKgR,YAAY7I,WAAenI,KAAKgR,YAAY7I,WAAa,IAC/DnI,KAAKgR,YAAY7I,UAAY,KAG3BnI,KAAKgR,YAAY6C,iBAAmB,IACtC7T,KAAKgR,YAAY6C,gBAAkB,GAIjC7T,KAAKgR,YAAYc,cAAgB,IACnC9R,KAAKgR,YAAYc,aAAe,GAEpC9R,KAAKsQ,cAAgB,IAAIxB,EAAgBqF,cAAcnU,KAAKgR,aAC5DhR,KAAKwT,aAAa7I,SAAS3K,KAAKsQ,eAChCtQ,KAAKsQ,cAAc8D,iBAAiBrF,EAAesF,aAAaC,oBAAqBtU,KAAKuU,eAAe3G,KAAK5N,QAElHoP,EAAiBvN,UAAUoO,aAAe,WAClCjQ,KAAKsQ,gBACLtQ,KAAKsQ,cAAcpE,UACnBlM,KAAKsQ,cAAgB,MAErBtQ,KAAKsT,qBACLtT,KAAKsT,mBAAmBpH,UACxBlM,KAAKsT,mBAAqB,OAGlClE,EAAiBvN,UAAU0S,eAAiB,WACxC,IAAIpJ,EAAQnL,KAAK0S,0BACjB1S,KAAKwN,aAAa/B,cAAcN,IAEpCiE,EAAiBvN,UAAU2S,OAAS,SAAU/L,GAC1C,OAAOzI,KAAKsQ,cAAgBtQ,KAAKsQ,cAAckE,OAAO/L,GAAY,MAEtE2G,EAAiBvN,UAAU4S,WAAa,SAAUhR,GAC9C,IAAIiD,EAAS,KAMb,OALA1G,KAAK2I,aAAY,SAAUnF,GACnBA,EAAQC,KAAOA,IACfiD,EAASlD,MAGVkD,GAEX0I,EAAiBvN,UAAU8G,YAAc,SAAU3D,GAC3ChF,KAAKsQ,eACLtQ,KAAKsQ,cAActH,gBAAgBhE,EAAU,IAAIrD,EAAQuS,iBAGjE9E,EAAiBvN,UAAU6S,qBAAuB,WAC9C,OAAO1U,KAAK2U,cAAgB3U,KAAK6K,WAErCuE,EAAiBvN,UAAU+S,oBAAsB,WAC7C,OAAO5U,KAAK2U,eAEhBvF,EAAiBvN,UAAUgT,6BAA+B,SAAUC,GAChE,OAAOA,GAEX1F,EAAiBvN,UAAUkT,mBAAqB,SAAUC,GACtD,GAAuB,IAAnBhV,KAAK6K,UAAiB,CACtB,IAAIoK,EAAmB3G,KAAKC,MAAMyG,EAAQhV,KAAK6K,WAC3CqK,EAAelV,KAAK2U,cAAgB,EACxC,OAAIM,EAAmBC,EACZA,EAGAD,EAIX,OAAO,GAGf7F,EAAiBvN,UAAU8S,YAAc,WACrC,OAAO3U,KAAKsQ,cAAgBtQ,KAAKsQ,cAAc6E,qBAAuB,GAE1E/F,EAAiBvN,UAAUuT,cAAgB,SAAUC,GAC7C1T,EAAQS,EAAEC,OAAOgT,EAAYxR,SAAWlC,EAAQS,EAAEC,OAAOgT,EAAYzR,QACrE+N,QAAQ2D,KAAK,2FAGb3T,EAAQS,EAAE4P,QAAQqD,EAAYE,UAC9B5D,QAAQ2D,KAAK,mFAGbtV,KAAKsQ,eACLtQ,KAAKsQ,cAAckF,mBAAmBH,EAAYE,SAAUF,EAAY1R,MAGhFyL,EAAiBvN,UAAU4T,aAAe,SAAUjS,GAChD,OAAO,GAEX4L,EAAiBvN,UAAU6T,aAAe,WAClC1V,KAAKsQ,eACLtQ,KAAKsQ,cAAcoF,gBAG3BtG,EAAiBvN,UAAU8T,WAAa,WAChC3V,KAAKsQ,eACLtQ,KAAKsQ,cAAcqF,cAG3BvG,EAAiBvN,UAAUsT,mBAAqB,WAC5C,OAAInV,KAAKsQ,cACEtQ,KAAKsQ,cAAc6E,qBAGnB,MAGf/F,EAAiBvN,UAAU0O,cAAgB,WACvC,GAAIvQ,KAAKsQ,cACL,OAAOtQ,KAAKsQ,cAAcC,iBAGlCnB,EAAiBvN,UAAU+T,mBAAqB,SAAUtN,EAAUuN,GAC5D7V,KAAKsQ,eACLtQ,KAAKsQ,cAAcsF,mBAAmBtN,EAAUuN,IAGxDzG,EAAiBvN,UAAUiU,cAAgB,WACvC,OAAI9V,KAAKsT,mBACEtT,KAAKsT,mBAAmBwC,gBAGxB,MAGf/V,EAAW,CACPuB,EAAUwC,UAAU,sBACpB9C,EAAW,cAAeO,EAAqBwC,qBAChDqL,EAAiBvN,UAAW,0BAAsB,GACrD9B,EAAW,CACPuB,EAAUwC,UAAU,iBACpB9C,EAAW,cAAe4N,EAAgBmH,gBAC3C3G,EAAiBvN,UAAW,qBAAiB,GAChD9B,EAAW,CACPuB,EAAUwC,UAAU,kBACpB9C,EAAW,cAAeS,EAAiBwC,iBAC5CmL,EAAiBvN,UAAW,sBAAkB,GACjD9B,EAAW,CACPuB,EAAUwC,UAAU,uBACpB9C,EAAW,cAAe2N,EAAsBqH,sBACjD5G,EAAiBvN,UAAW,2BAAuB,GACtD9B,EAAW,CACPuB,EAAUwC,UAAU,gBACpB9C,EAAW,cAAegM,EAAeyB,eAC1CW,EAAiBvN,UAAW,oBAAgB,GAC/C9B,EAAW,CACPuB,EAAUwC,UAAU,WACpB9C,EAAW,cAAeiO,EAAUgH,UACrC7G,EAAiBvN,UAAW,eAAW,GAC1C9B,EAAW,CACPuB,EAAUwC,UAAU,aACpB9C,EAAW,cAAekO,EAAYgH,YACvC9G,EAAiBvN,UAAW,iBAAa,GAC5C9B,EAAW,CACPuB,EAAUwC,UAAU,eACpB9C,EAAW,cAAemO,EAAcgH,cACzC/G,EAAiBvN,UAAW,mBAAe,GAC9C9B,EAAW,CACPuB,EAAU8U,cACVpV,EAAW,cAAeqV,UAC1BrV,EAAW,oBAAqB,IAChCA,EAAW,yBAAqB,IACjCoO,EAAiBvN,UAAW,OAAQ,MACvC9B,EAAW,CACPuB,EAAUgV,WACVtV,EAAW,cAAeqV,UAC1BrV,EAAW,oBAAqB,IAChCA,EAAW,yBAAqB,IACjCoO,EAAiBvN,UAAW,oBAAqB,MACpDuN,EAAmBrP,EAAW,CAC1BuB,EAAU6C,KAAK,aAChBiL,GACIA,EApV0B,CAqVnC3H,EAAW8E,UACbnL,EAAQgO,iBAAmBA,G;;;;;;GC7X3B,IAAIrP,EAAcC,MAAQA,KAAKD,YAAe,SAAUE,EAAYC,EAAQC,EAAKC,GAC7E,IAA2HC,EAAvHC,EAAIC,UAAUC,OAAQC,EAAIH,EAAI,EAAIJ,EAAkB,OAATE,EAAgBA,EAAOM,OAAOC,yBAAyBT,EAAQC,GAAOC,EACrH,GAAuB,kBAAZQ,SAAoD,oBAArBA,QAAQC,SAAyBJ,EAAIG,QAAQC,SAASZ,EAAYC,EAAQC,EAAKC,QACpH,IAAK,IAAIU,EAAIb,EAAWO,OAAS,EAAGM,GAAK,EAAGA,KAAST,EAAIJ,EAAWa,MAAIL,GAAKH,EAAI,EAAID,EAAEI,GAAKH,EAAI,EAAID,EAAEH,EAAQC,EAAKM,GAAKJ,EAAEH,EAAQC,KAASM,GAChJ,OAAOH,EAAI,GAAKG,GAAKC,OAAOK,eAAeb,EAAQC,EAAKM,GAAIA,GAE5DO,EAAchB,MAAQA,KAAKgB,YAAe,SAAUC,EAAGC,GACvD,GAAuB,kBAAZN,SAAoD,oBAArBA,QAAQO,SAAyB,OAAOP,QAAQO,SAASF,EAAGC,IAE1GR,OAAOK,eAAeK,EAAS,aAAc,CAAEC,OAAO,IACtD,IAAIC,EAAY,EAAQ,QACpBC,EAAuB,EAAQ,QAC/BI,EAAU,EAAQ,QAClBmL,EAAmC,WACnC,SAASA,KAqDT,OAnDAA,EAAkBjL,UAAU2H,KAAO,WAC/BxJ,KAAKuW,qBAAuBvW,KAAKwC,mBAAmBgU,yBACpDxW,KAAKyW,oBAAsBzW,KAAKwC,mBAAmBkU,0BAEvD5J,EAAkBjL,UAAU8U,8BAAgC,SAAUnT,GAClE,GAAIxD,KAAKyW,oBAAqB,CAC1B,IAAIG,EAAmB,SAAUpT,GAAW,OAAOA,EAAQ2B,oBAC3DnF,KAAK6W,YAAYrT,EAAQ2B,mBAAoByR,KAGrD9J,EAAkBjL,UAAUgL,+BAAiC,SAAUrJ,GACnE,GAAIxD,KAAKyW,oBAAqB,CAC1B,IAAIG,EAAmB,SAAUpT,GAAW,OAAOA,EAAQsT,qBAC3D9W,KAAK6W,YAAYrT,EAAQ2B,mBAAoByR,KAGrD9J,EAAkBjL,UAAUgV,YAAc,SAAUlS,EAAUiS,GAC1D,IAAI7Q,EAAQ/F,KACZ2E,EAASpB,SAAQ,SAAUwT,GACvB,GAAKA,EAAMC,MAAX,CAMA,IAAIC,EACJ,GAJIF,EAAMG,eACNnR,EAAM8Q,YAAYD,EAAiBG,GAAQH,GAG3C7Q,EAAMwQ,qBAAsB,CAE5B,IAAIY,EAAkBxV,EAAQS,EAAEgV,KAAKR,EAAiBG,GAAQ,cAAc,GAC5EE,EAAgBtV,EAAQS,EAAEC,OAAO8U,QAIjCF,IAAgBlR,EAAM0Q,qBAAsB1Q,EAAM0Q,oBAAoBM,GAE1EA,EAAMM,iBAAiBJ,QAG/BlX,EAAW,CACPuB,EAAUwC,UAAU,sBACpB9C,EAAW,cAAeO,EAAqBwC,qBAChD+I,EAAkBjL,UAAW,0BAAsB,GACtD9B,EAAW,CACPuB,EAAU8U,cACVpV,EAAW,cAAeqV,UAC1BrV,EAAW,oBAAqB,IAChCA,EAAW,yBAAqB,IACjC8L,EAAkBjL,UAAW,OAAQ,MACxCiL,EAAoB/M,EAAW,CAC3BuB,EAAU6C,KAAK,sBAChB2I,GACIA,EAtD2B,GAwDtC1L,EAAQ0L,kBAAoBA,G;;;;;;GCrE5B,IAAI/M,EAAcC,MAAQA,KAAKD,YAAe,SAAUE,EAAYC,EAAQC,EAAKC,GAC7E,IAA2HC,EAAvHC,EAAIC,UAAUC,OAAQC,EAAIH,EAAI,EAAIJ,EAAkB,OAATE,EAAgBA,EAAOM,OAAOC,yBAAyBT,EAAQC,GAAOC,EACrH,GAAuB,kBAAZQ,SAAoD,oBAArBA,QAAQC,SAAyBJ,EAAIG,QAAQC,SAASZ,EAAYC,EAAQC,EAAKC,QACpH,IAAK,IAAIU,EAAIb,EAAWO,OAAS,EAAGM,GAAK,EAAGA,KAAST,EAAIJ,EAAWa,MAAIL,GAAKH,EAAI,EAAID,EAAEI,GAAKH,EAAI,EAAID,EAAEH,EAAQC,EAAKM,GAAKJ,EAAEH,EAAQC,KAASM,GAChJ,OAAOH,EAAI,GAAKG,GAAKC,OAAOK,eAAeb,EAAQC,EAAKM,GAAIA,GAE5DO,EAAchB,MAAQA,KAAKgB,YAAe,SAAUC,EAAGC,GACvD,GAAuB,kBAAZN,SAAoD,oBAArBA,QAAQO,SAAyB,OAAOP,QAAQO,SAASF,EAAGC,IAEtGoW,EAAWtX,MAAQA,KAAKsX,SAAY,SAAUC,EAAYC,GAC1D,OAAO,SAAUtX,EAAQC,GAAOqX,EAAUtX,EAAQC,EAAKoX,KAE3D7W,OAAOK,eAAeK,EAAS,aAAc,CAAEC,OAAO,IACtD,IAAIoW,EAAiB,EAAQ,QACzBC,EAAW,EAAQ,QACnBpW,EAAY,EAAQ,QACpBK,EAAU,EAAQ,QAClB4R,EAAoC,WACpC,SAASA,EAAmB7B,EAAuB0B,GAC/CpT,KAAK2X,sBAAwB,EAC7B3X,KAAK4X,OAAS,GACd5X,KAAKuE,QAAS,EACdvE,KAAK0R,sBAAwBA,EACzB0B,GAA2BA,EAA0B,IACrDpT,KAAK6X,yBAA2BlW,EAAQS,EAAE0V,SAAS9X,KAAK+X,yBAAyBnK,KAAK5N,MAAOoT,IAqFrG,OAlFAG,EAAmB1R,UAAUmW,SAAW,SAAUC,GAC9CjY,KAAKkY,OAASD,EAAc1Q,OAAO,uBAEvCgM,EAAmB1R,UAAUsW,SAAW,SAAUC,GAC9CpY,KAAK4X,OAAOvR,KAAK+R,IAErB7E,EAAmB1R,UAAUwW,YAAc,SAAUD,GACjDzW,EAAQS,EAAEkW,gBAAgBtY,KAAK4X,OAAQQ,IAE3C7E,EAAmB1R,UAAUqK,QAAU,WACnClM,KAAKuE,QAAS,GAElBgP,EAAmB1R,UAAU0W,aAAe,WACxCvY,KAAK2X,yBAETpE,EAAmB1R,UAAU2W,iBAAmB,WACxCxY,KAAK6X,yBACL7X,KAAK6X,2BAGL7X,KAAK+X,4BAGbxE,EAAmB1R,UAAUkW,yBAA2B,WACpD,GAAK/X,KAAKuE,OAIV,GADAvE,KAAKyY,mBACDzY,KAAK2X,uBAAyB3X,KAAK0R,sBACnC1R,KAAKkY,OAAOQ,IAAI,4CADpB,CAIA,IAAIC,EAAc,KAClB3Y,KAAK4X,OAAOrU,SAAQ,SAAU6U,GACtBA,EAAMnO,aAAewN,EAAe/P,aAAaO,cACjD0Q,EAAcP,MAGlBO,GACAA,EAAY7N,OACZ9K,KAAK2X,wBACL3X,KAAKkY,OAAOQ,IAAI,kCAAoCC,EAAY9O,kBAChE7J,KAAKyY,oBAGLzY,KAAKkY,OAAOQ,IAAI,wCAGxBnF,EAAmB1R,UAAUiU,cAAgB,WACzC,IAAIpP,EAAS,GAgBb,OAfA1G,KAAK4X,OAAOrU,SAAQ,SAAU6U,GAC1B,IAAIQ,EAAeR,EAAMS,kBACrBC,EAAY,CACZlR,YAAawQ,EAAMvO,iBACnB3B,SAAUkQ,EAAMzO,cAChBvB,OAAQgQ,EAAMxO,YACdmP,WAAYX,EAAMnO,YAElBtI,EAAQS,EAAEC,OAAOuW,GACjBlS,EAAOkS,EAAeR,EAAMvO,kBAAoBiP,EAGhDpS,EAAO0R,EAAMvO,kBAAoBiP,KAGlCpS,GAEX6M,EAAmB1R,UAAU4W,iBAAmB,WACxCzY,KAAKkY,OAAOc,aACZhZ,KAAKkY,OAAOQ,IAAI,4CAA8C1Y,KAAK2X,sBAAwB,cACrEsB,KAAKC,UAAUlZ,KAAK8V,mBAGlDvC,EAAmB1R,UAAUsX,UAAY,WACrC,OAAOnZ,KAAK2X,sBAAwB,GAExC5X,EAAW,CACPuX,EAAQ,EAAGhW,EAAU8X,UAAU,kBAC/BpY,EAAW,cAAeqV,UAC1BrV,EAAW,oBAAqB,CAAC0W,EAAS2B,gBAC1CrY,EAAW,yBAAqB,IACjCuS,EAAmB1R,UAAW,WAAY,MACtC0R,EA5F4B,GA8FvCnS,EAAQmS,mBAAqBA,G;;;;;;GC/G7B,IAAI1M,EAAa7G,MAAQA,KAAK6G,WAAc,WACxC,IAAIC,EAAgB,SAAUzG,EAAG0G,GAI7B,OAHAD,EAAgBpG,OAAOsG,gBAClB,CAAEC,UAAW,cAAgBC,OAAS,SAAU7G,EAAG0G,GAAK1G,EAAE4G,UAAYF,IACvE,SAAU1G,EAAG0G,GAAK,IAAK,IAAII,KAAKJ,EAAOA,EAAEK,eAAeD,KAAI9G,EAAE8G,GAAKJ,EAAEI,KAClEL,EAAczG,EAAG0G,IAE5B,OAAO,SAAU1G,EAAG0G,GAEhB,SAASM,IAAOrH,KAAKsH,YAAcjH,EADnCyG,EAAczG,EAAG0G,GAEjB1G,EAAEwB,UAAkB,OAANkF,EAAarG,OAAO6G,OAAOR,IAAMM,EAAGxF,UAAYkF,EAAElF,UAAW,IAAIwF,IAV3C,GAaxCtH,EAAcC,MAAQA,KAAKD,YAAe,SAAUE,EAAYC,EAAQC,EAAKC,GAC7E,IAA2HC,EAAvHC,EAAIC,UAAUC,OAAQC,EAAIH,EAAI,EAAIJ,EAAkB,OAATE,EAAgBA,EAAOM,OAAOC,yBAAyBT,EAAQC,GAAOC,EACrH,GAAuB,kBAAZQ,SAAoD,oBAArBA,QAAQC,SAAyBJ,EAAIG,QAAQC,SAASZ,EAAYC,EAAQC,EAAKC,QACpH,IAAK,IAAIU,EAAIb,EAAWO,OAAS,EAAGM,GAAK,EAAGA,KAAST,EAAIJ,EAAWa,MAAIL,GAAKH,EAAI,EAAID,EAAEI,GAAKH,EAAI,EAAID,EAAEH,EAAQC,EAAKM,GAAKJ,EAAEH,EAAQC,KAASM,GAChJ,OAAOH,EAAI,GAAKG,GAAKC,OAAOK,eAAeb,EAAQC,EAAKM,GAAIA,GAE5DO,EAAchB,MAAQA,KAAKgB,YAAe,SAAUC,EAAGC,GACvD,GAAuB,kBAAZN,SAAoD,oBAArBA,QAAQO,SAAyB,OAAOP,QAAQO,SAASF,EAAGC,IAE1GR,OAAOK,eAAeK,EAAS,aAAc,CAAEC,OAAO,IACtD,IAAIiY,EAAc,EAAQ,QACtBhY,EAAY,EAAQ,QACpBC,EAAuB,EAAQ,QAC/BgY,EAAyB,EAAQ,QACjCvM,EAAiB,EAAQ,QACzBC,EAAW,EAAQ,QACnBkC,EAAgB,EAAQ,QACxBqK,EAAoB,EAAQ,QAC5B7X,EAAU,EAAQ,QAClBkN,EAAc,EAAQ,QACtB4K,EAAgC,SAAU9R,GAE1C,SAAS8R,IACL,OAAO9R,EAAOG,KAAK9H,OAASA,KAoMhC,OAtMA6G,EAAU4S,EAAgB9R,GAI1B8R,EAAe5X,UAAU6X,cAAgB,WACrC,IAAIC,EAAQ3Z,KAAKwC,mBAAmBoX,cACpC5Z,KAAK6Z,YAAY7Z,KAAK8Z,eACtB9Z,KAAK+Z,QAAQC,sBAAsB,aAAcrY,EAAQS,EAAE6X,iBAAiBN,EAAQ,OAAS,QAAS3Z,KAAKwC,qBAC3GxC,KAAKka,WAAWF,sBAAsB,aAAcrY,EAAQS,EAAE6X,iBAAiBN,EAAQ,OAAS,WAAY3Z,KAAKwC,qBACjHxC,KAAKma,OAAOH,sBAAsB,aAAcrY,EAAQS,EAAE6X,iBAAiBN,EAAQ,WAAa,OAAQ3Z,KAAKwC,qBAC7GxC,KAAKoa,OAAOJ,sBAAsB,aAAcrY,EAAQS,EAAE6X,iBAAiBN,EAAQ,QAAU,OAAQ3Z,KAAKwC,qBACtGxC,KAAKqa,SAAShJ,YAAcxC,EAAYyC,UAAUgJ,6BAClDta,KAAKua,mBAAqBva,KAAKqa,UAEnC,IAAIG,EAAWxa,KAAKwC,mBAAmBiY,eACnCC,EAAyBF,IAAaxa,KAAKwC,mBAAmBmY,4BAC7DD,GAIL1a,KAAKuN,4BAA4BvN,KAAKwN,aAAcP,EAASQ,OAAOmN,yBAA0B5a,KAAK6a,oBAAoBjN,KAAK5N,OAC5HA,KAAKuN,4BAA4BvN,KAAK+Z,QAAS,QAAS/Z,KAAK8a,UAAUlN,KAAK5N,OAC5EA,KAAKuN,4BAA4BvN,KAAKoa,OAAQ,QAASpa,KAAK+a,SAASnN,KAAK5N,OAC1EA,KAAKuN,4BAA4BvN,KAAKma,OAAQ,QAASna,KAAKgb,SAASpN,KAAK5N,OAC1EA,KAAKuN,4BAA4BvN,KAAKka,WAAY,QAASla,KAAKib,aAAarN,KAAK5N,OAClFA,KAAK6a,uBARD7a,KAAKkb,cAAa,IAU1BzB,EAAe5X,UAAUgZ,oBAAsB,WAC3C7a,KAAKmb,yBACLnb,KAAKob,kBACLpb,KAAKqb,sBACLrb,KAAKsb,kBAET7B,EAAe5X,UAAUwZ,oBAAsB,WAC3C,IAAIE,EAAavb,KAAKwb,gBAAgBC,gBAAkB,EACpDC,EAAc1b,KAAKwb,gBAAgBG,iBACnCC,EAAYL,EAAaG,EAAc,EAAI,EAC/C1b,KAAK6b,UAAUC,UAAY9b,KAAK+b,aAAaH,IAEjDnC,EAAe5X,UAAUka,aAAe,SAAU1a,GAC9C,IAAI2a,EAAWhc,KAAKwC,mBAAmByZ,mCACvC,OAAID,EACOA,EAAS,CAAE3a,MAAOA,IAGlBM,EAAQS,EAAE8Z,mBAAmB7a,IAG5CoY,EAAe5X,UAAUiY,YAAc,WACnC,IAAIqC,EAAiBnc,KAAKwC,mBAAmB4Z,oBACzCC,EAAUF,EAAe,OAAQ,QACjCG,EAAQH,EAAe,KAAM,MAC7BI,EAAQJ,EAAe,KAAM,MAC7BK,EAAWL,EAAe,QAAS,SACnCM,EAAcN,EAAe,WAAY,YACzCO,EAAUP,EAAe,OAAQ,QACjCQ,EAAUR,EAAe,OAAQ,QACrC,MAAO,2LAAqMG,EAAQ,wCAA4CC,EAAQ,6OAAyPC,EAAW,6JAAqKC,EAAc,8DAAgEJ,EAAU,kCAAsCE,EAAQ,gJAA0JG,EAAU,yJAAiKC,EAAU,sFAE1oClD,EAAe5X,UAAUmZ,SAAW,WAChChb,KAAKwb,gBAAgBoB,gBAEzBnD,EAAe5X,UAAUoZ,aAAe,WACpCjb,KAAKwb,gBAAgBqB,oBAEzBpD,EAAe5X,UAAUiZ,UAAY,WACjC9a,KAAKwb,gBAAgBsB,iBAEzBrD,EAAe5X,UAAUkZ,SAAW,WAChC/a,KAAKwb,gBAAgBuB,gBAEzBtD,EAAe5X,UAAUsZ,uBAAyB,WAC9C,IAAIO,EAAc1b,KAAKwb,gBAAgBG,iBACnC9F,EAAc7V,KAAKwb,gBAAgBwB,kBACnCC,EAAajd,KAAKwb,gBAAgBC,gBAClCyB,EAA0C,IAAhBxB,EAC9B/Z,EAAQS,EAAE+a,oBAAoBnd,KAAKka,WAAY,cAAegD,GAC9Dvb,EAAQS,EAAE+a,oBAAoBnd,KAAK+Z,QAAS,cAAemD,GAC3D,IAAIE,EAAqBpd,KAAKqd,uBAC1BC,EAAazH,GAAe6F,IAAiBuB,EAAa,EAC1DM,EAAcD,GAAcF,EAChCzb,EAAQS,EAAE+a,oBAAoBnd,KAAKma,OAAQ,cAAeoD,GAC1D,IAAIC,GAAe3H,GAAeuH,GAAsB1B,IAAiBuB,EAAa,EACtFtb,EAAQS,EAAE+a,oBAAoBnd,KAAKoa,OAAQ,cAAeoD,IAE9D/D,EAAe5X,UAAUuZ,gBAAkB,WACvC,IAKIlT,EACAE,EANAsT,EAAc1b,KAAKwb,gBAAgBG,iBACnC8B,EAAWzd,KAAKwb,gBAAgBkC,cAChC7H,EAAc7V,KAAKwb,gBAAgBwB,kBACnC1U,EAAWtI,KAAKwb,gBAAgBwB,kBAChChd,KAAKwb,gBAAgBmC,oBAAsB,KAG3C3d,KAAKqd,wBACLnV,EAAW,EACXE,EAAS,IAGTF,EAAYuV,EAAW/B,EAAe,EACtCtT,EAASF,EAAWuV,EAAW,EAC3B5H,GAAezN,EAASE,IACxBF,EAASE,IAGjBtI,KAAK4d,iBAAiB9B,UAAY9b,KAAK+b,aAAa7T,GAChDlI,KAAKua,oBAAsBva,KAAKua,mBAAmBpB,YACnDnZ,KAAK6d,gBAAgB/B,UAAY,IAGjC9b,KAAK6d,gBAAgB/B,UAAY9b,KAAK+b,aAAa3T,IAG3DqR,EAAe5X,UAAUwb,qBAAuB,WAC5C,IAAIxH,EAAc7V,KAAKwb,gBAAgBwB,kBACnCC,EAAajd,KAAKwb,gBAAgBC,gBACtC,OAAO5F,GAA8B,IAAfoH,GAE1BxD,EAAe5X,UAAUyZ,eAAiB,WACtC,IAAIwC,EAAgB9d,KAAKwb,gBAAgBwB,kBACrCC,EAAajd,KAAKwb,gBAAgBC,gBAClCnT,EAAWtI,KAAKwb,gBAAgBwB,kBAChChd,KAAKwb,gBAAgBmC,oBAAsB,KAC/C,GAAIG,EACA9d,KAAK+d,QAAQjC,UAAY9b,KAAK+b,aAAakB,GAC3Cjd,KAAKge,cAAclC,UAAY9b,KAAK+b,aAAazT,OAEhD,CACD,IAAI2V,EAAWje,KAAKwC,mBAAmB4Z,mBAAxBpc,CAA4C,OAAQ,QACnEA,KAAK+d,QAAQjC,UAAYmC,EACzBje,KAAKge,cAAclC,UAAYmC,IAGvCle,EAAW,CACPuB,EAAUwC,UAAU,sBACpB9C,EAAW,cAAeO,EAAqBwC,qBAChD0V,EAAe5X,UAAW,0BAAsB,GACnD9B,EAAW,CACPuB,EAAUwC,UAAU,gBACpB9C,EAAW,cAAegM,EAAeyB,eAC1CgL,EAAe5X,UAAW,oBAAgB,GAC7C9B,EAAW,CACPuB,EAAUwC,UAAU,mBACpB9C,EAAW,cAAewY,EAAkB0E,kBAC7CzE,EAAe5X,UAAW,uBAAmB,GAChD9B,EAAW,CACPuB,EAAUwC,UAAU,eACpB9C,EAAW,cAAemO,EAAcgH,cACzCsD,EAAe5X,UAAW,mBAAe,GAC5C9B,EAAW,CACPuB,EAAUwC,UAAU,YACpB9C,EAAW,cAAeN,SAC3B+Y,EAAe5X,UAAW,gBAAY,GACzC9B,EAAW,CACPwZ,EAAuB4E,YAAY,WACnCnd,EAAW,cAAeod,cAC3B3E,EAAe5X,UAAW,eAAW,GACxC9B,EAAW,CACPwZ,EAAuB4E,YAAY,cACnCnd,EAAW,cAAeod,cAC3B3E,EAAe5X,UAAW,kBAAc,GAC3C9B,EAAW,CACPwZ,EAAuB4E,YAAY,UACnCnd,EAAW,cAAeod,cAC3B3E,EAAe5X,UAAW,cAAU,GACvC9B,EAAW,CACPwZ,EAAuB4E,YAAY,UACnCnd,EAAW,cAAeod,cAC3B3E,EAAe5X,UAAW,cAAU,GACvC9B,EAAW,CACPwZ,EAAuB4E,YAAY,iBACnCnd,EAAW,cAAeN,SAC3B+Y,EAAe5X,UAAW,qBAAiB,GAC9C9B,EAAW,CACPwZ,EAAuB4E,YAAY,oBACnCnd,EAAW,cAAeN,SAC3B+Y,EAAe5X,UAAW,wBAAoB,GACjD9B,EAAW,CACPwZ,EAAuB4E,YAAY,mBACnCnd,EAAW,cAAeN,SAC3B+Y,EAAe5X,UAAW,uBAAmB,GAChD9B,EAAW,CACPwZ,EAAuB4E,YAAY,iBACnCnd,EAAW,cAAeN,SAC3B+Y,EAAe5X,UAAW,qBAAiB,GAC9C9B,EAAW,CACPwZ,EAAuB4E,YAAY,aACnCnd,EAAW,cAAeN,SAC3B+Y,EAAe5X,UAAW,iBAAa,GAC1C9B,EAAW,CACPwZ,EAAuB4E,YAAY,WACnCnd,EAAW,cAAeN,SAC3B+Y,EAAe5X,UAAW,eAAW,GACxC9B,EAAW,CACPuB,EAAU8U,cACVpV,EAAW,cAAeqV,UAC1BrV,EAAW,oBAAqB,IAChCA,EAAW,yBAAqB,IACjCyY,EAAe5X,UAAW,gBAAiB,MACvC4X,EAvMwB,CAwMjCH,EAAY+E,WACdjd,EAAQqY,eAAiBA,G;;;;;;GC1OzB,IAAI5S,EAAa7G,MAAQA,KAAK6G,WAAc,WACxC,IAAIC,EAAgB,SAAUzG,EAAG0G,GAI7B,OAHAD,EAAgBpG,OAAOsG,gBAClB,CAAEC,UAAW,cAAgBC,OAAS,SAAU7G,EAAG0G,GAAK1G,EAAE4G,UAAYF,IACvE,SAAU1G,EAAG0G,GAAK,IAAK,IAAII,KAAKJ,EAAOA,EAAEK,eAAeD,KAAI9G,EAAE8G,GAAKJ,EAAEI,KAClEL,EAAczG,EAAG0G,IAE5B,OAAO,SAAU1G,EAAG0G,GAEhB,SAASM,IAAOrH,KAAKsH,YAAcjH,EADnCyG,EAAczG,EAAG0G,GAEjB1G,EAAEwB,UAAkB,OAANkF,EAAarG,OAAO6G,OAAOR,IAAMM,EAAGxF,UAAYkF,EAAElF,UAAW,IAAIwF,IAV3C,GAaxCtH,EAAcC,MAAQA,KAAKD,YAAe,SAAUE,EAAYC,EAAQC,EAAKC,GAC7E,IAA2HC,EAAvHC,EAAIC,UAAUC,OAAQC,EAAIH,EAAI,EAAIJ,EAAkB,OAATE,EAAgBA,EAAOM,OAAOC,yBAAyBT,EAAQC,GAAOC,EACrH,GAAuB,kBAAZQ,SAAoD,oBAArBA,QAAQC,SAAyBJ,EAAIG,QAAQC,SAASZ,EAAYC,EAAQC,EAAKC,QACpH,IAAK,IAAIU,EAAIb,EAAWO,OAAS,EAAGM,GAAK,EAAGA,KAAST,EAAIJ,EAAWa,MAAIL,GAAKH,EAAI,EAAID,EAAEI,GAAKH,EAAI,EAAID,EAAEH,EAAQC,EAAKM,GAAKJ,EAAEH,EAAQC,KAASM,GAChJ,OAAOH,EAAI,GAAKG,GAAKC,OAAOK,eAAeb,EAAQC,EAAKM,GAAIA,GAE5DO,EAAchB,MAAQA,KAAKgB,YAAe,SAAUC,EAAGC,GACvD,GAAuB,kBAAZN,SAAoD,oBAArBA,QAAQO,SAAyB,OAAOP,QAAQO,SAASF,EAAGC,IAE1GR,OAAOK,eAAeK,EAAS,aAAc,CAAEC,OAAO,IACtD,IAAIE,EAAuB,EAAQ,QAC/BD,EAAY,EAAQ,QACpBmW,EAAiB,EAAQ,QACzBtI,EAAgB,EAAQ,QACxBxN,EAAU,EAAQ,QAClB2c,EAA+B,SAAU3W,GAEzC,SAAS2W,EAAcC,EAAYxc,GAC/B,IAAIgE,EAAQ4B,EAAOG,KAAK9H,KAAMue,EAAYxc,IAAW/B,KAErD,OADA+F,EAAMiL,YAAcjP,EACbgE,EAoFX,OAxFAc,EAAUyX,EAAe3W,GAMzB2W,EAAczc,UAAUwI,mBAAqB,SAAU5B,GACnD,IAAIjF,EAAUmE,EAAO9F,UAAUwI,mBAAmBvC,KAAK9H,KAAMyI,GAG7D,OAFAjF,EAAQgb,QAAU,EAClBxe,KAAKye,wBAAwBjb,EAASiF,GAC/BjF,GAEX8a,EAAczc,UAAU2I,aAAe,SAAUhH,EAASsI,EAAMD,GACxDlK,EAAQS,EAAEC,OAAOyJ,GAKjBtI,EAAQgH,aAAasB,EAAMD,EAAM6S,YAGjClb,EAAQgH,kBAAamU,OAAWA,IAGxCL,EAAczc,UAAUqI,WAAa,SAAUzB,EAAUjF,GACrDmE,EAAO9F,UAAUqI,WAAWpC,KAAK9H,KAAMyI,EAAUjF,GACjDxD,KAAKye,wBAAwBjb,EAASiF,IAE1C6V,EAAczc,UAAU2H,KAAO,WAC3B7B,EAAO9F,UAAU2H,KAAK1B,KAAK9H,KAAM,CAC7B0K,QAAS1K,KAAKwT,aACdxH,YAAahM,KAAKgM,eAG1BsS,EAAczc,UAAUgX,gBAAkB,WACtC,OAAO,MAEXyF,EAAczc,UAAU2S,OAAS,SAAUoK,GACvC,OAAO5e,KAAK0I,sBAAsBkW,IAEtCN,EAAczc,UAAU4c,wBAA0B,SAAUjb,EAASiF,GACjEjF,EAAQqb,YAAYpW,GACpBjF,EAAQ8L,OAAStP,KAAKgR,YAAYnG,UAAYpC,GAElD6V,EAAczc,UAAUmJ,mBAAqB,WACzC,IAAIjF,EAAQ/F,KAKR+B,EAAS,CACTmG,SAAUlI,KAAK2J,cACfvB,OAAQpI,KAAK4J,YACbkV,gBAAiB9e,KAAKoM,WAAWwB,KAAK5N,KAAMA,KAAKkJ,cACjD6V,aAAc/e,KAAKiL,eAAe2C,KAAK5N,MACvCmR,UAAWnR,KAAKgR,YAAYG,UAC5BsC,YAAazT,KAAKgR,YAAYyC,YAC9B/I,QAAS1K,KAAKwC,mBAAmBgR,cAErC,GAAI7R,EAAQS,EAAE4P,QAAQhS,KAAKgR,YAAYb,WAAW6O,SAC9CrN,QAAQ2D,KAAK,qDADjB,CAKA,IAAI2J,EAAgBtd,EAAQS,EAAE8c,sBAAsBlf,KAAKgR,YAAYb,WAAW6O,SAC5EC,EAAcze,OAAS,IACvBmR,QAAQ2D,KAAK,qGACb3D,QAAQ2D,KAAK,yGAGjB6J,OAAOC,YAAW,WACdrZ,EAAMiL,YAAYb,WAAW6O,QAAQjd,KACtC,KAEPhC,EAAW,CACPuB,EAAUwC,UAAU,sBACpB9C,EAAW,cAAeO,EAAqBwC,qBAChDua,EAAczc,UAAW,0BAAsB,GAClD9B,EAAW,CACPuB,EAAUwC,UAAU,eACpB9C,EAAW,cAAemO,EAAcgH,cACzCmI,EAAczc,UAAW,mBAAe,GAC3C9B,EAAW,CACPuB,EAAU8U,cACVpV,EAAW,cAAeqV,UAC1BrV,EAAW,oBAAqB,IAChCA,EAAW,yBAAqB,IACjCsd,EAAczc,UAAW,OAAQ,MAC7Byc,EAzFuB,CA0FhC7G,EAAe/P,cACjBtG,EAAQkd,cAAgBA,G;;;;;;GCvHxB,IAAIzX,EAAa7G,MAAQA,KAAK6G,WAAc,WACxC,IAAIC,EAAgB,SAAUzG,EAAG0G,GAI7B,OAHAD,EAAgBpG,OAAOsG,gBAClB,CAAEC,UAAW,cAAgBC,OAAS,SAAU7G,EAAG0G,GAAK1G,EAAE4G,UAAYF,IACvE,SAAU1G,EAAG0G,GAAK,IAAK,IAAII,KAAKJ,EAAOA,EAAEK,eAAeD,KAAI9G,EAAE8G,GAAKJ,EAAEI,KAClEL,EAAczG,EAAG0G,IAE5B,OAAO,SAAU1G,EAAG0G,GAEhB,SAASM,IAAOrH,KAAKsH,YAAcjH,EADnCyG,EAAczG,EAAG0G,GAEjB1G,EAAEwB,UAAkB,OAANkF,EAAarG,OAAO6G,OAAOR,IAAMM,EAAGxF,UAAYkF,EAAElF,UAAW,IAAIwF,IAV3C,GAaxCtH,EAAcC,MAAQA,KAAKD,YAAe,SAAUE,EAAYC,EAAQC,EAAKC,GAC7E,IAA2HC,EAAvHC,EAAIC,UAAUC,OAAQC,EAAIH,EAAI,EAAIJ,EAAkB,OAATE,EAAgBA,EAAOM,OAAOC,yBAAyBT,EAAQC,GAAOC,EACrH,GAAuB,kBAAZQ,SAAoD,oBAArBA,QAAQC,SAAyBJ,EAAIG,QAAQC,SAASZ,EAAYC,EAAQC,EAAKC,QACpH,IAAK,IAAIU,EAAIb,EAAWO,OAAS,EAAGM,GAAK,EAAGA,KAAST,EAAIJ,EAAWa,MAAIL,GAAKH,EAAI,EAAID,EAAEI,GAAKH,EAAI,EAAID,EAAEH,EAAQC,EAAKM,GAAKJ,EAAEH,EAAQC,KAASM,GAChJ,OAAOH,EAAI,GAAKG,GAAKC,OAAOK,eAAeb,EAAQC,EAAKM,GAAIA,GAE5DO,EAAchB,MAAQA,KAAKgB,YAAe,SAAUC,EAAGC,GACvD,GAAuB,kBAAZN,SAAoD,oBAArBA,QAAQO,SAAyB,OAAOP,QAAQO,SAASF,EAAGC,IAE1GR,OAAOK,eAAeK,EAAS,aAAc,CAAEC,OAAO,IACtD,IAAIoG,EAAa,EAAQ,QACrBuF,EAAiB,EAAQ,QACzBC,EAAW,EAAQ,QACnB3L,EAAY,EAAQ,QACpBC,EAAuB,EAAQ,QAC/BoN,EAAwB,EAAQ,QAChCO,EAAc,EAAQ,QACtBD,EAAY,EAAQ,QACpBtN,EAAU,EAAQ,QAClBuc,EAAiC,SAAUvW,GAE3C,SAASuW,IACL,IAAInY,EAAmB,OAAX4B,GAAmBA,EAAOyF,MAAMpN,KAAMO,YAAcP,KAMhE,OALA+F,EAAM2V,YAAc,EACpB3V,EAAMsZ,qBAAuB,EAC7BtZ,EAAMuZ,wBAA0B,EAChCvZ,EAAMwZ,YAAc,EACpBxZ,EAAMyZ,eAAiB,EAChBzZ,EA8QX,OAtRAc,EAAUqX,EAAiBvW,GAU3BuW,EAAgBrc,UAAU6X,cAAgB,WACtC1Z,KAAKuE,OAASvE,KAAKwC,mBAAmBiY,eACtCza,KAAKyf,kBAAoBzf,KAAKwC,mBAAmBkd,sBACjD1f,KAAKuN,4BAA4BvN,KAAKwN,aAAcP,EAASQ,OAAOkF,oBAAqB3S,KAAK2f,eAAe/R,KAAK5N,OAClHA,KAAKuN,4BAA4BvN,KAAKwC,mBAAoB,qBAAsBxC,KAAK2f,eAAe/R,KAAK5N,OACzGA,KAAK2f,kBAETzB,EAAgBrc,UAAU0N,sBAAwB,SAAUC,EAAYC,EAAUC,EAAiBC,GAC/F,IAAIiQ,EAAM5f,KAAKqa,SAAS9K,sBAAsBC,EAAYC,EAAUzP,KAAK6f,kBAAmB7f,KAAK8f,kBAIjG,OAHIF,GACA5f,KAAK+f,iBAEFH,GAEX1B,EAAgBrc,UAAU8d,eAAiB,SAAUK,GACjDhgB,KAAK+f,iBACL,IAAIE,EAAyB,CACzB7U,KAAM6B,EAASQ,OAAOmN,yBACtB1H,UAAS8M,GAAoBA,EAAkB9M,QAC/CF,UAASgN,GAAoBA,EAAkBhN,QAC/CD,UAASiN,GAAoBA,EAAkBjN,QAC/CE,mBAAkB+M,GAAoBA,EAAkB/M,iBACxDL,IAAK5S,KAAK6S,QACVC,UAAW9S,KAAK8S,WAEpB9S,KAAKwN,aAAa/B,cAAcwU,IAEpC/B,EAAgBrc,UAAUqe,SAAW,SAAU3U,GAC3C,GAAKvL,KAAKuE,QAGNvE,KAAK0b,cAAgBnQ,EAAzB,CAGAvL,KAAK0b,YAAcnQ,EACnB,IAAIJ,EAAQ,CACRC,KAAM6B,EAASQ,OAAOkF,oBACtBO,SAAS,EACTD,kBAAkB,EAClBD,SAAS,EACTD,SAAS,EACTH,IAAK5S,KAAK6S,QACVC,UAAW9S,KAAK8S,WAEpB9S,KAAK2f,eAAexU,KAExB+S,EAAgBrc,UAAUse,eAAiB,WACvC,OAAOngB,KAAKuf,aAEhBrB,EAAgBrc,UAAU2S,OAAS,SAAU3I,GACzC,OAAO7L,KAAKqa,SAAS7F,OAAO3I,IAEhCqS,EAAgBrc,UAAU4S,WAAa,SAAUhR,GAC7C,OAAOzD,KAAKqa,SAAS5F,WAAWhR,IAEpCya,EAAgBrc,UAAUkT,mBAAqB,SAAUC,GACrD,OAAOhV,KAAKqa,SAAStF,mBAAmBC,IAE5CkJ,EAAgBrc,UAAU6S,qBAAuB,WAC7C,OAAI/S,EAAQS,EAAE4P,QAAQhS,KAAKogB,eAAiBze,EAAQS,EAAE4P,QAAQhS,KAAKqgB,iBACxD,EAEJ/R,KAAKgS,IAAItgB,KAAKqgB,gBAAgB/Q,OAAStP,KAAKqgB,gBAAgBxV,UAAY7K,KAAKogB,aAAa9Q,OAAQ,IAE7G4O,EAAgBrc,UAAU4T,aAAe,SAAUjS,GAC/C,IAAKxD,KAAKqa,SAAS5E,aAAajS,GAC5B,OAAO,EAEX,IAAI+c,EAAe/c,EAAQiF,UAAYzI,KAAKqf,sBAAwB7b,EAAQiF,UAAYzI,KAAKsf,wBAC7F,OAAOiB,GAEXrC,EAAgBrc,UAAUkQ,QAAU,WAChC,OAAO/R,KAAKqa,SAAStI,WAEzBmM,EAAgBrc,UAAUoQ,eAAiB,WACvC,OAAOjS,KAAKqa,SAASpI,kBAEzBiM,EAAgBrc,UAAUqQ,4BAA8B,SAAUC,EAAcC,GAC5E,OAAOpS,KAAKqa,SAASnI,4BAA4BC,EAAcC,IAEnE8L,EAAgBrc,UAAU8G,YAAc,SAAU3D,GAC9C,OAAOhF,KAAKqa,SAAS1R,YAAY3D,IAErCkZ,EAAgBrc,UAAUwP,QAAU,WAChC,OAAOrR,KAAKqa,SAAShJ,WAEzB6M,EAAgBrc,UAAUwN,aAAe,SAAUxD,GAC/C,IAAI+T,EAAM5f,KAAKqa,SAAShL,aAAaxD,GAErC,OADA+T,EAAInX,SAAWoD,EACR+T,GAEX1B,EAAgBrc,UAAUge,gBAAkB,WACxC,OAAO7f,KAAKogB,aAAepgB,KAAKogB,aAAa3X,UAAY,GAE7DyV,EAAgBrc,UAAUie,eAAiB,WACvC,OAAO9f,KAAKqgB,gBAAkBrgB,KAAKqgB,gBAAgB5X,UAAY,GAEnEyV,EAAgBrc,UAAU8S,YAAc,WACpC,OAAO3U,KAAKqa,SAAS1F,eAEzBuJ,EAAgBrc,UAAU2e,kBAAoB,SAAU3U,GACpD,GAAK7L,KAAKuE,OAAV,CAGA,IAAIga,EAAajQ,KAAKC,MAAM1C,EAAQ7L,KAAKyd,UACzCzd,KAAKkgB,SAAS3B,KAElBL,EAAgBrc,UAAUmb,gBAAkB,WACxC,OAAOhd,KAAKqa,SAAShK,kBAEzB6N,EAAgBrc,UAAU8Z,eAAiB,WACvC,OAAO3b,KAAK0b,aAEhBwC,EAAgBrc,UAAU+a,aAAe,WACrC5c,KAAKkgB,SAASlgB,KAAK0b,YAAc,IAErCwC,EAAgBrc,UAAUgb,iBAAmB,WACzC7c,KAAKkgB,SAASlgB,KAAK0b,YAAc,IAErCwC,EAAgBrc,UAAUib,cAAgB,WACtC9c,KAAKkgB,SAAS,IAElBhC,EAAgBrc,UAAUkb,aAAe,WACrC,IAAIzU,EAAWtI,KAAKqa,SAAS1F,cACzB8L,EAAWnS,KAAKC,MAAMjG,EAAWtI,KAAKyd,UAC1Czd,KAAKkgB,SAASO,IAElBvC,EAAgBrc,UAAU6b,YAAc,WACpC,OAAO1d,KAAKyd,UAEhBS,EAAgBrc,UAAU4Z,cAAgB,WACtC,OAAOzb,KAAKid,YAEhBiB,EAAgBrc,UAAU6e,YAAc,WAEpC1gB,KAAKyd,SAAWzd,KAAKwC,mBAAmBme,wBAClC3gB,KAAKyd,UAAY,IACnBzd,KAAKyd,SAAW,MAGxBS,EAAgBrc,UAAUke,eAAiB,WACnC/f,KAAKuE,QACLvE,KAAK0gB,cACD1gB,KAAKyf,kBACLzf,KAAK4gB,wBAGL5gB,KAAK6gB,gCAIT7gB,KAAK8gB,2BAET9gB,KAAKogB,aAAepgB,KAAKqa,SAAShL,aAAarP,KAAKqf,sBAChDrf,KAAKogB,eACLpgB,KAAKogB,aAAa3X,SAAWzI,KAAKqf,sBAEtCrf,KAAKqgB,gBAAkBrgB,KAAKqa,SAAShL,aAAarP,KAAKsf,yBACnDtf,KAAKqgB,kBACLrgB,KAAKqgB,gBAAgB5X,SAAWzI,KAAKsf,yBAEzCtf,KAAKuf,YAAc5d,EAAQS,EAAEC,OAAOrC,KAAKogB,cAAgBpgB,KAAKogB,aAAa9Q,OAAS,GAExF4O,EAAgBrc,UAAUkf,YAAc,WACpC/gB,KAAKqf,qBAAuB,EAC5Brf,KAAKsf,yBAA2B,EAChCtf,KAAK0b,YAAc,EACnB1b,KAAKid,WAAa,GAEtBiB,EAAgBrc,UAAUgf,6BAA+B,WAKrD,GADA7gB,KAAKwf,eAAiBxf,KAAKqa,SAASzF,sBACR,IAAxB5U,KAAKwf,eAAT,CAIA,IAAIwB,EAAqBhhB,KAAKwf,eAAiB,EAC/Cxf,KAAKid,WAAa3O,KAAKC,MAAM,EAAuBvO,KAAKyd,UAAY,EACjEzd,KAAK0b,aAAe1b,KAAKid,aACzBjd,KAAK0b,YAAc1b,KAAKid,WAAa,KAEpCtb,EAAQS,EAAE6e,UAAUjhB,KAAK0b,cAAgB1b,KAAK0b,YAAc,KAC7D1b,KAAK0b,YAAc,GAEvB,IAAIwF,EAAuBlhB,KAAKyd,SAAWzd,KAAK0b,YAC5CyF,EAAsBnhB,KAAKyd,UAAYzd,KAAK0b,YAAc,GAAM,EAMpE,GALIyF,EAAqBH,IACrBG,EAAqBH,GAEzBhhB,KAAKqf,qBAAuBrf,KAAKqa,SAASxF,6BAA6BqM,GAEnEC,IAAuBH,EAEvBhhB,KAAKsf,wBAA0Btf,KAAKqa,SAAS1F,cAAgB,MAE5D,CACD,IAAIyM,EAAsBphB,KAAKqa,SAASxF,6BAA6BsM,EAAqB,GAI1FnhB,KAAKsf,wBAA0B8B,EAAsB,QA3BrDphB,KAAK+gB,eA8Bb7C,EAAgBrc,UAAU8b,kBAAoB,WAC1C,OAAO3d,KAAKwf,gBAEhBtB,EAAgBrc,UAAU+e,sBAAwB,WAE9C,GADA5gB,KAAKwf,eAAiBxf,KAAKqa,SAAS1F,cACR,IAAxB3U,KAAKwf,eAAT,CAIA,IAAI6B,EAAcrhB,KAAKwf,eAAiB,EACxCxf,KAAKid,WAAa3O,KAAKC,MAAM,EAAgBvO,KAAKyd,UAAY,EAC1Dzd,KAAK0b,aAAe1b,KAAKid,aACzBjd,KAAK0b,YAAc1b,KAAKid,WAAa,KAEpCtb,EAAQS,EAAE6e,UAAUjhB,KAAK0b,cAAgB1b,KAAK0b,YAAc,KAC7D1b,KAAK0b,YAAc,GAEvB1b,KAAKqf,qBAAuBrf,KAAKyd,SAAWzd,KAAK0b,YACjD1b,KAAKsf,wBAA2Btf,KAAKyd,UAAYzd,KAAK0b,YAAc,GAAM,EACtE1b,KAAKsf,wBAA0B+B,IAC/BrhB,KAAKsf,wBAA0B+B,QAd/BrhB,KAAK+gB,eAiBb7C,EAAgBrc,UAAUif,yBAA2B,WACjD9gB,KAAKyd,SAAWzd,KAAKqa,SAAS1F,cAC9B3U,KAAKid,WAAa,EAClBjd,KAAK0b,YAAc,EACnB1b,KAAKqf,qBAAuB,EAC5Brf,KAAKsf,wBAA0Btf,KAAKqa,SAAS1F,cAAgB,GAEjE5U,EAAW,CACPuB,EAAUwC,UAAU,YACpB9C,EAAW,cAAeN,SAC3Bwd,EAAgBrc,UAAW,gBAAY,GAC1C9B,EAAW,CACPuB,EAAUwC,UAAU,gBACpB9C,EAAW,cAAegM,EAAeyB,eAC1CyP,EAAgBrc,UAAW,oBAAgB,GAC9C9B,EAAW,CACPuB,EAAUwC,UAAU,sBACpB9C,EAAW,cAAeO,EAAqBwC,qBAChDma,EAAgBrc,UAAW,0BAAsB,GACpD9B,EAAW,CACPuB,EAAUwC,UAAU,uBACpB9C,EAAW,cAAe2N,EAAsBqH,sBACjDkI,EAAgBrc,UAAW,2BAAuB,GACrD9B,EAAW,CACPuB,EAAUwC,UAAU,aACpB9C,EAAW,cAAekO,EAAYgH,YACvCgI,EAAgBrc,UAAW,iBAAa,GAC3C9B,EAAW,CACPuB,EAAUwC,UAAU,WACpB9C,EAAW,cAAeiO,EAAUgH,UACrCiI,EAAgBrc,UAAW,eAAW,GACzC9B,EAAW,CACPuB,EAAU8U,cACVpV,EAAW,cAAeqV,UAC1BrV,EAAW,oBAAqB,IAChCA,EAAW,yBAAqB,IACjCkd,EAAgBrc,UAAW,gBAAiB,MAC/Cqc,EAAkBne,EAAW,CACzBuB,EAAU6C,KAAK,oBAChB+Z,GACIA,EAvRyB,CAwRlCzW,EAAW8E,UACbnL,EAAQ8c,gBAAkBA,G;;;;;;GCzT1Bxd,OAAOK,eAAeK,EAAS,aAAc,CAAEC,OAAO,IACtD,IAAImG,EAAY,EAAQ,QACpByF,EAAW,EAAQ,QACnBtL,EAAU,EAAQ,QAClB2f,EAAuC,WACvC,SAASA,EAAsBhd,EAAU9B,EAAoBkI,EAAS8C,EAAc3K,EAAkBgQ,EAASC,EAAWN,GACtHxS,KAAKuhB,OAAS,EAEdvhB,KAAKwhB,YAAc,GACnBxhB,KAAKsE,SAAWA,EAChBtE,KAAKwC,mBAAqBA,EAC1BxC,KAAK0K,QAAUA,EACf1K,KAAKwN,aAAeA,EACpBxN,KAAK6C,iBAAmBA,EACxB7C,KAAK6S,QAAUA,EACf7S,KAAK8S,UAAYA,EACjB9S,KAAKwS,oBAAsBA,EAC3BxS,KAAKsE,SAAS0S,OAAQ,EACtBhX,KAAKsE,SAASmd,OAAS,EACvBzhB,KAAKsE,SAASb,GAAK6d,EAAsBI,aACzC1hB,KAAKsE,SAASqd,gBAAkB,GAChC3hB,KAAKsE,SAASa,mBAAqB,GACnCnF,KAAKsE,SAASsd,kBAAoB,GAClC5hB,KAAKsE,SAASwS,oBAAsB,GAEpC9W,KAAK0Z,gBA8RT,OA3RA4H,EAAsBzf,UAAU6X,cAAgB,WAE5C1Z,KAAK6hB,oBAAsB7hB,KAAKwC,mBAAmBsf,0BACnD9hB,KAAK+hB,0BAA4B/hB,KAAKwC,mBAAmBwf,8BACzDhiB,KAAKiiB,eAAiBjiB,KAAKwC,mBAAmB0f,wBAC9CliB,KAAKmiB,gBAAkBniB,KAAKwC,mBAAmB4f,qBAC/CpiB,KAAKqiB,oBAAsB1gB,EAAQS,EAAEC,OAAOrC,KAAK6hB,qBACjD7hB,KAAKsiB,kBAAoBtiB,KAAKwC,mBAAmB+f,iBAC7CviB,KAAK6hB,qBACLlQ,QAAQ2D,KAAK,ohBAGrBgM,EAAsBzf,UAAU2gB,kBAAoB,WAChD,IAAI9b,EAAS/E,EAAQS,EAAEqgB,YAAYziB,KAAKwhB,aACxC,OAAO9a,GAEX4a,EAAsBzf,UAAU4S,WAAa,SAAUhR,GACnD,OAAOzD,KAAKwhB,YAAY/d,IAE5B6d,EAAsBzf,UAAU6gB,WAAa,SAAUC,GAOnD,GANA3iB,KAAKsE,SAASwS,oBAAsB,KACpC9W,KAAKsE,SAASa,mBAAqB,KACnCnF,KAAKsE,SAASsd,kBAAoB,KAClC5hB,KAAKsE,SAASse,eAAiB,KAC/B5iB,KAAKuhB,OAAS,EACdvhB,KAAKwhB,YAAc,IACdmB,EAGD,OAFA3iB,KAAKsE,SAASqd,gBAAkB,QAChC3hB,KAAKsE,SAASa,mBAAqB,IAOvC,IAAIuB,EAAS1G,KAAK6iB,kBAAkBF,EAAS3iB,KAAKsE,SAAUgd,EAAsBwB,WAC9E9iB,KAAKqiB,qBACLriB,KAAKsE,SAASa,mBAAqBuB,EACnC1G,KAAK+iB,gBAAgB/iB,KAAKsE,WAG1BtE,KAAKsE,SAASqd,gBAAkBjb,GAGxC4a,EAAsBzf,UAAUuT,cAAgB,SAAU4N,EAAaC,GACnE,GAAIjjB,KAAKkjB,mBACL,OAAO,KAEDF,EAAYrf,IAAgBqf,EAAYzN,SAAmByN,EAAYnf,OAAiBmf,EAAYpf,OAA9G,IACIuf,EAAqB,CACrBtf,OAAQ,GACRD,OAAQ,GACRD,IAAK,IAQT,OANA3D,KAAKojB,WAAWJ,EAAaG,GAC7BnjB,KAAKqjB,cAAcL,EAAaG,GAChCnjB,KAAKsjB,cAAcN,EAAaG,GAC5BF,GACAthB,EAAQS,EAAEmhB,oBAAoBvjB,KAAKsE,SAASqd,gBAAiBsB,GAE1DE,GAEX7B,EAAsBzf,UAAUuhB,WAAa,SAAUJ,EAAaG,GAChE,IAAIpd,EAAQ/F,KACR2D,EAAMqf,EAAYrf,IAAK4R,EAAWyN,EAAYzN,SAClD,GAAK5R,EAAL,CAGA,IAAI6f,EAA+B,kBAAbjO,GAAyBA,GAAY,EACvDiO,EAEA7f,EAAI8f,UAAUlgB,SAAQ,SAAUmgB,GAC5B,IAAItZ,EAAarE,EAAM4d,WAAWD,EAAMnO,GACxC4N,EAAmBxf,IAAI0C,KAAK+D,MAIhCzG,EAAIJ,SAAQ,SAAUmgB,GAClB,IAAItZ,EAAarE,EAAM4d,WAAWD,GAClCP,EAAmBxf,IAAI0C,KAAK+D,QAIxCkX,EAAsBzf,UAAUwhB,cAAgB,SAAUL,EAAaG,GACnE,IAAIpd,EAAQ/F,KACR6D,EAASmf,EAAYnf,OACzB,GAAKA,EAAL,CAGA,IAAI+f,EAAgB,GAChBC,GAAmB,EAsBvB,GArBAhgB,EAAON,SAAQ,SAAUmgB,GACrB,IAAIlgB,EAAUuC,EAAM+d,cAAcJ,GAC7BlgB,IAGDA,EAAQugB,eACRF,GAAmB,GAIvBrgB,EAAQwgB,aAAY,GAAO,GAAO,GAElCxgB,EAAQ2I,cAGRyX,EAAcpgB,EAAQC,KAAM,SAErBsC,EAAMyb,YAAYhe,EAAQC,IACjC0f,EAAmBtf,OAAOwC,KAAK7C,OAEnCxD,KAAKsE,SAASqd,gBAAkB3hB,KAAKsE,SAASqd,gBAAgBhb,QAAO,SAAUnD,GAAW,OAAQogB,EAAcpgB,EAAQC,OACpHogB,EAAkB,CAClB7jB,KAAKwS,oBAAoByR,qCACzB,IAAIC,EAAU,CACV9Y,KAAM6B,EAASQ,OAAO0W,wBACtBvR,IAAK5S,KAAK6S,QACVC,UAAW9S,KAAK8S,WAEpB9S,KAAKwN,aAAa/B,cAAcyY,MAGxC5C,EAAsBzf,UAAUyhB,cAAgB,SAAUN,EAAaG,GACnE,IAAIpd,EAAQ/F,KACR4D,EAASof,EAAYpf,OACpBA,GAGLA,EAAOL,SAAQ,SAAUmgB,GACrB,IAAIlgB,EAAUuC,EAAM+d,cAAcJ,GAC7BlgB,IAGLA,EAAQ4gB,WAAWV,GACnBP,EAAmBvf,OAAOyC,KAAK7C,QAGvC8d,EAAsBzf,UAAU8hB,WAAa,SAAU7X,EAAMD,GACzD,IAAIwY,EAAUrkB,KAAKskB,WAAWxY,EAAM9L,KAAKsE,SAAUgd,EAAsBwB,WAOzE,OANInhB,EAAQS,EAAEC,OAAOwJ,GACjBlK,EAAQS,EAAEmiB,gBAAgBvkB,KAAKsE,SAASqd,gBAAiB0C,EAASxY,GAGlE7L,KAAKsE,SAASqd,gBAAgBtb,KAAKge,GAEhCA,GAEX/C,EAAsBzf,UAAUiiB,cAAgB,SAAUhY,GACtD,IACItI,EADAghB,EAAgBxkB,KAAKwC,mBAAmB+P,mBAE5C,GAAI5Q,EAAQS,EAAEC,OAAOmiB,GAAgB,CAEjC,IAAI/gB,EAAK+gB,EAAc1Y,GAEvB,GADAtI,EAAUxD,KAAKwhB,YAAY/d,IACtBD,EAED,OADAmO,QAAQC,MAAM,kCAAoCnO,EAAK,yCAChD,UAMX,GADAD,EAAU7B,EAAQS,EAAEgV,KAAKpX,KAAKsE,SAASqd,iBAAiB,SAAUne,GAAW,OAAOA,EAAQsI,OAASA,MAChGtI,EAED,OADAmO,QAAQC,MAAM,4DAA6D9F,GACpE,KAGf,OAAOtI,GAEX8d,EAAsBzf,UAAUghB,kBAAoB,SAAUF,EAAS/c,EAAQ6b,GAC3E,IAAI1b,EAAQ/F,KAEZ,GAAuB,kBAAZ2iB,EAAX,CAIA,IAAIrf,EAAW,GAKf,OAJAqf,EAAQpf,SAAQ,SAAUgH,GACtB,IAAIka,EAAO1e,EAAMue,WAAW/Z,EAAU3E,EAAQ6b,GAC9Cne,EAAS+C,KAAKoe,MAEXnhB,EARHqO,QAAQ2D,KAAK,kKAUrBgM,EAAsBzf,UAAUyiB,WAAa,SAAU/Z,EAAU3E,EAAQ6b,GACrE,IAAIgD,EAAO,IAAIjd,EAAUiD,QACzBzK,KAAK0K,QAAQC,SAAS8Z,GACtB,IAAIC,EAAgB1kB,KAAKwC,mBAAmBmiB,aACxCtC,GAAuBqC,GAAiB/iB,EAAQS,EAAEC,OAAOrC,KAAK6hB,qBAC9D+C,EAAmBvC,EAAsBriB,KAAK6hB,oBAAoBtX,GAAY,KAClF,GAAIqa,GAAoBA,EAAiB5N,MACrCyN,EAAKzN,OAAQ,EACbyN,EAAKtf,mBAAqBnF,KAAK6iB,kBAAkB+B,EAAiBjgB,SAAU8f,EAAMhD,EAAQ,GAC1FgD,EAAKjc,UAAyC,IAA9Boc,EAAiBpc,SACjCic,EAAKI,MAAQD,EAAiBC,MAC9BJ,EAAKtkB,IAAMykB,EAAiBzkB,IAE5BskB,EAAKK,UAAYL,EAAKM,OAEtB/kB,KAAK+iB,gBAAgB0B,QAIrB,GADAA,EAAKzN,OAAQ,EACT0N,EACAD,EAAKM,QAAS,EACdN,EAAKjc,UAAW,MAEf,CAEGxI,KAAKiiB,eACLwC,EAAKM,OAAS/kB,KAAKiiB,eAAe1X,GAE7BvK,KAAKsiB,kBAGNtiB,KAAKmiB,gBACLsC,EAAKM,OAAS/kB,KAAKmiB,gBAAgB5X,GAGnCka,EAAKM,QAAS,EAIlBN,EAAKM,QAAS,EAElB,IAAIC,EAAkBhlB,KAAK6C,iBAAiBoiB,qBACxCC,EAAqBF,EAAkBA,EAAgBxkB,OAAS,EAEhE2kB,EAAiB1D,EAAQyD,EAC7BT,EAAKjc,WAAWic,EAAKM,QAAS/kB,KAAKolB,WAAWD,GAetD,OAXAV,EAAKK,UAAYL,EAAKM,OAClBnf,IAAW5F,KAAK+hB,4BAChB0C,EAAK7e,OAASA,GAElB6e,EAAKhD,MAAQA,EACbgD,EAAKja,aAAaD,EAAUvK,KAAKuhB,OAAO7C,YACpC1e,KAAKwhB,YAAYiD,EAAKhhB,KACtBkO,QAAQ2D,KAAK,+BAAiCmP,EAAKhhB,GAAK,gFAE5DzD,KAAKwhB,YAAYiD,EAAKhhB,IAAMghB,EAC5BzkB,KAAKuhB,SACEkD,GAEXnD,EAAsBzf,UAAUujB,WAAa,SAAU3D,GACnD,IAAI4D,EAAkBrlB,KAAKwC,mBAAmB8iB,0BAC9C,OAAyB,IAArBD,GAIO5D,EAAQ4D,GAIvB/D,EAAsBzf,UAAUkhB,gBAAkB,SAAU0B,GACxDA,EAAK9C,gBAAkB,GACnB8C,EAAKtf,oBACLsf,EAAKtf,mBAAmB5B,SAAQ,SAAUgiB,GAClCA,EAAgBvO,MACZuO,EAAgB5D,iBAChB4D,EAAgB5D,gBAAgBpe,SAAQ,SAAUiiB,GAAa,OAAOf,EAAK9C,gBAAgBtb,KAAKmf,MAIpGf,EAAK9C,gBAAgBtb,KAAKkf,OAK1CjE,EAAsBzf,UAAUqhB,iBAAmB,WAC/C,IAAIuC,EAAqB9jB,EAAQS,EAAEC,OAAOrC,KAAKwC,mBAAmBsf,2BAClE,QAAI2D,IACA9T,QAAQ2D,KAAK,wOAEN,IAMfgM,EAAsBwB,UAAY,EAClCxB,EAAsBI,aAAe,eAC9BJ,EAnT+B,GAqT1ClgB,EAAQkgB,sBAAwBA,G;;;;;;GCzThC,IAAIvhB,EAAcC,MAAQA,KAAKD,YAAe,SAAUE,EAAYC,EAAQC,EAAKC,GAC7E,IAA2HC,EAAvHC,EAAIC,UAAUC,OAAQC,EAAIH,EAAI,EAAIJ,EAAkB,OAATE,EAAgBA,EAAOM,OAAOC,yBAAyBT,EAAQC,GAAOC,EACrH,GAAuB,kBAAZQ,SAAoD,oBAArBA,QAAQC,SAAyBJ,EAAIG,QAAQC,SAASZ,EAAYC,EAAQC,EAAKC,QACpH,IAAK,IAAIU,EAAIb,EAAWO,OAAS,EAAGM,GAAK,EAAGA,KAAST,EAAIJ,EAAWa,MAAIL,GAAKH,EAAI,EAAID,EAAEI,GAAKH,EAAI,EAAID,EAAEH,EAAQC,EAAKM,GAAKJ,EAAEH,EAAQC,KAASM,GAChJ,OAAOH,EAAI,GAAKG,GAAKC,OAAOK,eAAeb,EAAQC,EAAKM,GAAIA,GAE5DO,EAAchB,MAAQA,KAAKgB,YAAe,SAAUC,EAAGC,GACvD,GAAuB,kBAAZN,SAAoD,oBAArBA,QAAQO,SAAyB,OAAOP,QAAQO,SAASF,EAAGC,IAE1GR,OAAOK,eAAeK,EAAS,aAAc,CAAEC,OAAO,IACtD,IAAIC,EAAY,EAAQ,QACpBsN,EAAkB,EAAQ,QAC1BrN,EAAuB,EAAQ,QAC/BwL,EAA+B,WAC/B,SAASA,KAqHT,OAnHAA,EAAclL,UAAU6X,cAAgB,WACpC1Z,KAAK0kB,cAAgB1kB,KAAKwC,mBAAmBmiB,cAEjD5X,EAAclL,UAAU8E,OAAS,SAAUxD,GACvC,IAAIuiB,EAAe1lB,KAAK0T,cAAciS,qBACtC3lB,KAAK4lB,YAAYF,EAAcviB,IAEnC4J,EAAclL,UAAU+jB,YAAc,SAAUF,EAAcviB,GAC1D,IAAI4C,EAAQ/F,KACR6lB,EAAiB,SAAUriB,EAASsiB,GAEhCtiB,EAAQ0T,eAGJ1T,EAAQsT,oBADR4O,IAAiBI,EACatiB,EAAQ2B,mBAAmBwB,QAAO,SAAUvB,GAGtE,IAAI2gB,EAAsB3gB,EAAU0R,qBAAuB1R,EAAU0R,oBAAoBtW,OAAS,EAG9FwlB,EAAwB5gB,EAAU0G,MAAQ/F,EAAM2N,cAAcuS,kBAAkB7gB,GAEpF,OAAO2gB,GAAuBC,KAKJxiB,EAAQ2B,mBAE1CY,EAAMmgB,oBAAoB1iB,KAG1BA,EAAQsT,oBAAsBtT,EAAQ2B,mBACtC3B,EAAQ0iB,oBAAoB,QAGpC,GAAIlmB,KAAKmmB,yBAA0B,CAC/B,IAAIC,EAA6B,SAAU5iB,EAAS6iB,GAGhD,GAAI7iB,EAAQ2B,mBACR,IAAK,IAAIrE,EAAI,EAAGA,EAAI0C,EAAQ2B,mBAAmB3E,OAAQM,IAAK,CACxD,IAAIsE,EAAY5B,EAAQ2B,mBAAmBrE,GAEvCwlB,EAAgBD,GAAwBtgB,EAAM2N,cAAcuS,kBAAkB7gB,GAC9EA,EAAUD,mBACVihB,EAA2B5iB,EAAQ2B,mBAAmBrE,GAAIwlB,GAG1DT,EAAezgB,EAAWkhB,GAItCT,EAAeriB,EAAS6iB,IAExBE,EAAyB,SAAU/iB,GAAW,OAAO4iB,EAA2B5iB,GAAS,IAC7FL,EAAYoC,oBAAoBghB,OAE/B,CACD,IAAIC,EAAwB,SAAUhjB,GAAW,OAAOqiB,EAAeriB,GAAS,IAChFL,EAAYkC,6BAA6BmhB,GAAuB,KAGxEzZ,EAAclL,UAAU4kB,4BAA8B,SAAUjjB,GAE5D,IAAIkjB,EAAmB,EACvBljB,EAAQsT,oBAAoBvT,SAAQ,SAAUwT,GAE1C2P,IAEAA,GAAoB3P,EAAM2P,oBAE9BljB,EAAQ0iB,oBAAoBQ,IAEhC3Z,EAAclL,UAAU8kB,gCAAkC,SAAUnjB,GAEhE,IAAIkjB,EAAmB,EACvBljB,EAAQsT,oBAAoBvT,SAAQ,SAAUwT,GACtCA,EAAMC,MACN0P,GAAoB3P,EAAM2P,iBAG1BA,OAGRljB,EAAQ0iB,oBAAoBQ,IAEhC3Z,EAAclL,UAAUqkB,oBAAsB,SAAU1iB,GAChDxD,KAAK0kB,cACL1kB,KAAKymB,4BAA4BjjB,GAGjCxD,KAAK2mB,gCAAgCnjB,IAG7CuJ,EAAclL,UAAUskB,uBAAyB,WAC7C,OAAOnmB,KAAKwC,mBAAmBmiB,eAAiB3kB,KAAKwC,mBAAmBokB,0CAE5E7mB,EAAW,CACPuB,EAAUwC,UAAU,iBACpB9C,EAAW,cAAe4N,EAAgBmH,gBAC3ChJ,EAAclL,UAAW,qBAAiB,GAC7C9B,EAAW,CACPuB,EAAUwC,UAAU,sBACpB9C,EAAW,cAAeO,EAAqBwC,qBAChDgJ,EAAclL,UAAW,0BAAsB,GAClD9B,EAAW,CACPuB,EAAU8U,cACVpV,EAAW,cAAeqV,UAC1BrV,EAAW,oBAAqB,IAChCA,EAAW,yBAAqB,IACjC+L,EAAclL,UAAW,gBAAiB,MAC7CkL,EAAgBhN,EAAW,CACvBuB,EAAU6C,KAAK,kBAChB4I,GACIA,EAtHuB,GAwHlC3L,EAAQ2L,cAAgBA,G;;;;;;GCrIxB,IAAIlG,EAAa7G,MAAQA,KAAK6G,WAAc,WACxC,IAAIC,EAAgB,SAAUzG,EAAG0G,GAI7B,OAHAD,EAAgBpG,OAAOsG,gBAClB,CAAEC,UAAW,cAAgBC,OAAS,SAAU7G,EAAG0G,GAAK1G,EAAE4G,UAAYF,IACvE,SAAU1G,EAAG0G,GAAK,IAAK,IAAII,KAAKJ,EAAOA,EAAEK,eAAeD,KAAI9G,EAAE8G,GAAKJ,EAAEI,KAClEL,EAAczG,EAAG0G,IAE5B,OAAO,SAAU1G,EAAG0G,GAEhB,SAASM,IAAOrH,KAAKsH,YAAcjH,EADnCyG,EAAczG,EAAG0G,GAEjB1G,EAAEwB,UAAkB,OAANkF,EAAarG,OAAO6G,OAAOR,IAAMM,EAAGxF,UAAYkF,EAAElF,UAAW,IAAIwF,IAV3C,GAa5C3G,OAAOK,eAAeK,EAAS,aAAc,CAAEC,OAAO,IACtD,IAAIoG,EAAa,EAAQ,QACrBgQ,EAAiB,EAAQ,QACzB9V,EAAU,EAAQ,QAClB0S,EAA8B,SAAU1M,GAExC,SAAS0M,EAAarD,GAClB,IAAIjL,EAAQ4B,EAAOG,KAAK9H,OAASA,KAMjC,OALA+F,EAAM8P,aAAc,EACpB9P,EAAM6R,OAAS,GACf7R,EAAM8gB,WAAa,EACnB9gB,EAAM+gB,gBAAkB9V,EAAY6C,gBACpC9N,EAAMiL,YAAcA,EACbjL,EA2OX,OAnPAc,EAAUwN,EAAc1M,GAUxB0M,EAAaxS,UAAUqK,QAAU,WAC7B,IAAInG,EAAQ/F,KACZ2H,EAAO9F,UAAUqK,QAAQpE,KAAK9H,MAC9BA,KAAK+mB,qBAAoB,SAAU3O,GAAS,OAAOrS,EAAMihB,aAAa5O,OAE1E/D,EAAaxS,UAAU2H,KAAO,WAC1B,IAAIzD,EAAQ/F,KACZA,KAAKuE,QAAS,EACdvE,KAAKgQ,gBAAe,WAAc,OAAOjK,EAAMxB,QAAS,MAE5D8P,EAAaxS,UAAUgD,SAAW,WAC9B,OAAO7E,KAAKuE,QAEhB8P,EAAaxS,UAAUsT,mBAAqB,WACxC,OAAOnV,KAAK8mB,iBAEhBzS,EAAaxS,UAAUolB,wBAA0B,SAAUH,GACvD9mB,KAAK8mB,gBAAkBA,GAE3BzS,EAAaxS,UAAU0O,cAAgB,WACnC,OAAOvQ,KAAK6V,aAGhBxB,EAAaxS,UAAUqlB,aAAe,SAAU/b,GAC5CnL,KAAKgR,YAAYsC,mBAAmBiF,eACpCvY,KAAKwY,mBAGAxY,KAAK6E,aAGV7E,KAAKkY,OAAOQ,IAAI,wBAA0BvN,EAAMI,KAAK1B,iBAAmB,eAAiBsB,EAAMK,SAC3FL,EAAMG,SACNtL,KAAKmnB,qBAAqBhc,EAAMI,KAAMJ,EAAMK,WAGpD6I,EAAaxS,UAAUulB,oBAAsB,SAAUC,GACnD,IAAIthB,EAAQ/F,KAERsnB,EAAmB,GACvBtnB,KAAK+mB,qBAAoB,SAAU3O,GAG3BA,IAAUiP,GAGdC,EAAiBjhB,KAAK+R,MAG1BkP,EAAiBpkB,MAAK,SAAUqkB,EAAGxgB,GAAK,OAAOA,EAAEoC,kBAAoBoe,EAAEpe,qBAIvE,IAAIqe,EAAoBxnB,KAAKgR,YAAY+C,iBAAmB,EACxD0T,EAAeD,EAAoBxnB,KAAKgR,YAAY+C,iBAAmB,EAAI,KAC3E2T,EAAoBrT,EAAasT,yBAA2B,EAChEL,EAAiB/jB,SAAQ,SAAU6U,EAAOvM,GACtC,IAAI+b,EAAyBxP,EAAMnO,aAAewN,EAAe/P,aAAaO,aAAe4D,GAAS6b,EAClGG,IAAwBL,GAAoB3b,GAAS4b,EACzD,GAAIG,GAA0BC,EAAuB,CAMjD,GAAIzP,EAAM/P,cAActC,EAAM+gB,iBAC1B,OAGJ/gB,EAAM+hB,qBAAqB1P,QAIvC/D,EAAaxS,UAAUkmB,gBAAkB,SAAUC,GAC/CA,EAAS5T,iBAAiBqD,EAAe/P,aAAa2D,oBAAqBrL,KAAKknB,aAAatZ,KAAK5N,OAClGA,KAAKioB,SAASD,EAASne,iBAAkBme,GACzChoB,KAAKonB,oBAAoBY,GACzBhoB,KAAKwY,oBAETnE,EAAaxS,UAAUimB,qBAAuB,SAAUI,GAC/CA,GAGLloB,KAAKgnB,aAAakB,IAMtB7T,EAAaxS,UAAU2W,iBAAmB,WACtCxY,KAAKgR,YAAYsC,mBAAmBkF,oBAExCnE,EAAaxS,UAAUslB,qBAAuB,SAAU/O,EAAO5M,GAG3D,GAAuB,kBAAZA,GAAwBA,GAAW,EAC1CxL,KAAK8mB,gBAAkBtb,EACvBxL,KAAK6V,aAAc,EACnB7V,KAAKuU,sBAEJ,IAAKvU,KAAK6V,YAAa,CAExB,IAAIX,GAAgBkD,EAAMvO,iBAAmB,GAAK7J,KAAKgR,YAAY7I,UAC/DggB,EAA2BjT,EAAelV,KAAKgR,YAAYc,aAC3D9R,KAAK8mB,gBAAkBqB,GACvBnoB,KAAK8mB,gBAAkBqB,EACvBnoB,KAAKuU,kBAEAvU,KAAKgR,YAAYoX,kBAItBpoB,KAAKuU,mBAIjBF,EAAaxS,UAAU+T,mBAAqB,SAAUtN,EAAUuN,GAC5D7V,KAAK8mB,gBAAkBxe,EAGnB3G,EAAQS,EAAEC,OAAOwT,KACjB7V,KAAK6V,YAAcA,GAKlB7V,KAAK6V,aACF7V,KAAK8mB,gBAAkB9mB,KAAKgR,YAAY7I,YAAc,GACtDnI,KAAK8mB,kBAGb9mB,KAAKuU,kBAETF,EAAaxS,UAAUmH,gBAAkB,SAAUhE,EAAU4D,GACzD,IAAI7C,EAAQ/F,UACK,IAAb4I,IAAuBA,EAAW,IAAIjH,EAAQuS,gBAClDlU,KAAK+mB,qBAAoB,SAAU3O,GAC/BA,EAAMpP,gBAAgBhE,EAAU4D,EAAU7C,EAAM+gB,qBAGxDzS,EAAaxS,UAAUklB,oBAAsB,SAAU/hB,GACnD,IAAIqjB,EAAMroB,KAAKsoB,oBACftoB,KAAKuoB,eAAeF,EAAKrjB,IAE7BqP,EAAaxS,UAAU2mB,2BAA6B,SAAUxjB,GAC1D,IAAIqjB,EAAMroB,KAAKsoB,oBAAoB7E,UACnCzjB,KAAKuoB,eAAeF,EAAKrjB,IAE7BqP,EAAaxS,UAAU0mB,eAAiB,SAAUF,EAAKrjB,GACnD,IAAIe,EAAQ/F,KACZqoB,EAAI9kB,SAAQ,SAAUE,GAClB,IAAI2U,EAAQrS,EAAM6R,OAAOnU,GACzBuB,EAASoT,EAAO3U,OAGxB4Q,EAAaxS,UAAUymB,kBAAoB,WAEvC,IAAIG,EAAmB,SAAUlB,EAAGxgB,GAAK,OAAOwgB,EAAIxgB,GAChD2hB,EAAWhoB,OAAOioB,KAAK3oB,KAAK4X,QAAQgR,KAAI,SAAUC,GAAS,OAAOC,SAASD,EAAO,OAAQ3lB,KAAKulB,GACnG,OAAOC,GAEXrU,EAAaxS,UAAUknB,SAAW,SAAUC,GACxC,OAAOhpB,KAAK4X,OAAOoR,IAEvB3U,EAAaxS,UAAUomB,SAAW,SAAUxkB,EAAI2U,GAC5CpY,KAAK4X,OAAOnU,GAAM2U,EAClBpY,KAAK6mB,aACL7mB,KAAKgR,YAAYsC,mBAAmB6E,SAASC,IAEjD/D,EAAaxS,UAAUmlB,aAAe,SAAU5O,UACrCpY,KAAK4X,OAAOQ,EAAMvO,kBACzBuO,EAAMlM,UACNlM,KAAK6mB,aACL7mB,KAAKgR,YAAYsC,mBAAmB+E,YAAYD,IAGpD/D,EAAaxS,UAAU0S,eAAiB,WACpC,GAAIvU,KAAK6E,WAAY,CAGjB,IAAIqf,EAAU,CACV9Y,KAAMiJ,EAAaC,qBAEvBtU,KAAKyL,cAAcyY,KAG3B7P,EAAaxS,UAAU8T,WAAa,WAChC,IAAI5P,EAAQ/F,KACZA,KAAK+mB,qBAAoB,SAAU3O,GAAS,OAAOrS,EAAM+hB,qBAAqB1P,MAE9EpY,KAAK8mB,gBAAkB9mB,KAAKgR,YAAY6C,gBACxC7T,KAAK6V,aAAc,EACnB7V,KAAKuU,kBAETF,EAAaxS,UAAUwQ,mBAAqB,SAAUF,EAAcC,GAChE,IAAIrM,EAAQ/F,KACR0G,EAAS,GACTuiB,GAAe,EACfC,GAAgB,EAChBC,EAAiB,IAAIxnB,EAAQuS,eAE7BvS,EAAQS,EAAE4P,QAAQG,KAClB+W,GAAgB,GAEpB,IAAIE,GAAsB,EAC1BppB,KAAK+mB,qBAAoB,SAAU3O,EAAO3U,GAClC2lB,IAGAF,GAAkBD,EAAc,IAAMxlB,EACtC2lB,GAAsB,GAG1BH,EAAcxlB,EACd2U,EAAMnP,oBAAmB,SAAUzF,GAC/B,IAAI6lB,EAAiB7lB,IAAY2O,GAAgB3O,IAAY4O,GACzD8W,GAAiBG,IACjB3iB,EAAOL,KAAK7C,GAEZ6lB,IACAH,GAAiBA,KAEtBC,EAAgBpjB,EAAM+gB,sBAG7B,IAAIwC,EAAeF,GAAuBF,EAC1C,OAAOI,EAAe,GAAK5iB,GAE/B2N,EAAaC,oBAAsB,eAInCD,EAAasT,yBAA2B,EACjCtT,EApPsB,CAqP/B5M,EAAW8E,UACbnL,EAAQiT,aAAeA,G;;;;;;GCvQvB,IAAItU,EAAcC,MAAQA,KAAKD,YAAe,SAAUE,EAAYC,EAAQC,EAAKC,GAC7E,IAA2HC,EAAvHC,EAAIC,UAAUC,OAAQC,EAAIH,EAAI,EAAIJ,EAAkB,OAATE,EAAgBA,EAAOM,OAAOC,yBAAyBT,EAAQC,GAAOC,EACrH,GAAuB,kBAAZQ,SAAoD,oBAArBA,QAAQC,SAAyBJ,EAAIG,QAAQC,SAASZ,EAAYC,EAAQC,EAAKC,QACpH,IAAK,IAAIU,EAAIb,EAAWO,OAAS,EAAGM,GAAK,EAAGA,KAAST,EAAIJ,EAAWa,MAAIL,GAAKH,EAAI,EAAID,EAAEI,GAAKH,EAAI,EAAID,EAAEH,EAAQC,EAAKM,GAAKJ,EAAEH,EAAQC,KAASM,GAChJ,OAAOH,EAAI,GAAKG,GAAKC,OAAOK,eAAeb,EAAQC,EAAKM,GAAIA,GAE5DO,EAAchB,MAAQA,KAAKgB,YAAe,SAAUC,EAAGC,GACvD,GAAuB,kBAAZN,SAAoD,oBAArBA,QAAQO,SAAyB,OAAOP,QAAQO,SAASF,EAAGC,IAE1GR,OAAOK,eAAeK,EAAS,aAAc,CAAEC,OAAO,IACtD,IAAIC,EAAY,EAAQ,QACpBG,EAAmB,EAAQ,QAC3B8nB,EAAiB,EAAQ,QACzBhoB,EAAuB,EAAQ,QAC/BG,EAAqB,EAAQ,QAC7BC,EAAU,EAAQ,QAClBqC,EAA6B,WAC7B,SAASA,KAuOT,OArOAA,EAAYnC,UAAU2H,KAAO,WACzBxJ,KAAKwpB,aAAexpB,KAAKwC,mBAAmBinB,mBAEhDzlB,EAAYnC,UAAUqB,KAAO,SAAUlB,EAAaG,EAAYG,EAAWI,EAAgBS,EAAaJ,GACpG,IAAIgD,EAAQ/F,KACRgF,EAAW,SAAUxB,GAMrB,GAJAuC,EAAM2jB,oCAAoClmB,EAAQsT,qBAAqB,GAInE3U,EAAY,CACZ,IAAIwnB,EAAiBrnB,EACjByD,EAAM6jB,YAAYpmB,EAASxB,EAAaU,EAAgBS,EAAaJ,GACnEgD,EAAM8jB,WAAWrmB,EAASxB,GAChCwB,EAAQoe,kBAAoB+H,EAAef,KAAI,SAAUkB,GAAU,OAAOA,EAAOtmB,gBAGjFA,EAAQoe,kBAAoBpe,EAAQsT,oBAAoBiT,MAAM,GAElEhkB,EAAMikB,mBAAmBxmB,GACrBuC,EAAMyjB,cACNzjB,EAAMyjB,aAAahmB,EAAQoe,oBAGnCze,EAAYkC,6BAA6BL,GACzChF,KAAKiqB,oCAAoC9mB,IAE7Ca,EAAYnC,UAAUgoB,WAAa,SAAUrmB,EAASxB,GAClD,IAAI2nB,EAAiBnmB,EAAQsT,oBACxB8R,IAAI5oB,KAAKkqB,oBAAoBtc,KAAK5N,OAEvC,OADA2pB,EAAezmB,KAAKlD,KAAKmqB,gBAAgBvc,KAAK5N,KAAMgC,IAC7C2nB,GAEX3lB,EAAYnC,UAAUqoB,oBAAsB,SAAU1mB,EAAS4mB,GAC3D,MAAO,CAAEC,WAAYD,EAAK5mB,QAASA,IAEvCQ,EAAYnC,UAAU+nB,YAAc,SAAUpmB,EAASxB,EAAaU,EAAgBS,EAAaJ,GAK7F,IAAIunB,EAAa9mB,EAAQoe,kBACpBjb,QAAO,SAAUnD,GAKlB,IAAI+mB,GAAyB7nB,EAAec,EAAQC,IAMhD+mB,EAAyBznB,GAAkBI,EAAYoD,QAAQ/C,GACnE,OAAO+mB,GAAyBC,KAE/B5B,IAAI5oB,KAAKkqB,oBAAoBtc,KAAK5N,OAEnCyqB,EAAmB,GACvBH,EAAW/mB,SAAQ,SAAUmnB,GAAiB,OAAOD,EAAiBC,EAAclnB,QAAQC,IAAMinB,EAAclnB,WAEhH,IAAImnB,EAAennB,EAAQsT,oBAEtBnQ,QAAO,SAAUnD,GAAW,OAAQinB,EAAiBjnB,EAAQC,OAC7DmlB,IAAI5oB,KAAKkqB,oBAAoBtc,KAAK5N,OAIvC,OADA2qB,EAAaznB,KAAKlD,KAAKmqB,gBAAgBvc,KAAK5N,KAAMgC,IACtB,IAAxB2oB,EAAanqB,OACN8pB,EAEoB,IAAtBA,EAAW9pB,OACTmqB,EAGA3qB,KAAK4qB,kBAAkB5oB,EAAasoB,EAAYK,IAI/D3mB,EAAYnC,UAAU+oB,kBAAoB,SAAU5oB,EAAa6oB,EAAMC,GACnE,IAAIlL,EAAM,GACN9e,EAAI,EACJiqB,EAAI,EAER,MAAOjqB,EAAI+pB,EAAKrqB,QAAUuqB,EAAID,EAAKtqB,OAAQ,CAMvC,IAAIwqB,EAAgBhrB,KAAKmqB,gBAAgBnoB,EAAa6oB,EAAK/pB,GAAIgqB,EAAKC,IAChEC,EAAgB,EAChBpL,EAAIvZ,KAAKwkB,EAAK/pB,MAGd8e,EAAIvZ,KAAKykB,EAAKC,MAItB,MAAOjqB,EAAI+pB,EAAKrqB,OACZof,EAAIvZ,KAAKwkB,EAAK/pB,MAGlB,MAAOiqB,EAAID,EAAKtqB,OACZof,EAAIvZ,KAAKykB,EAAKC,MAElB,OAAOnL,GAEX5b,EAAYnC,UAAUsoB,gBAAkB,SAAUnoB,EAAaipB,EAAaC,GAIxE,IAHA,IAAIC,EAAQF,EAAYznB,QACpB4nB,EAAQF,EAAY1nB,QAEf1C,EAAI,EAAGuqB,EAAMrpB,EAAYxB,OAAQM,EAAIuqB,EAAKvqB,IAAK,CACpD,IAAIwqB,EAAatpB,EAAYlB,GAEzByqB,GAAsC,IAAzBD,EAAWE,SACxBC,EAASzrB,KAAK0rB,SAASP,EAAOG,EAAWK,QACzCC,EAAS5rB,KAAK0rB,SAASN,EAAOE,EAAWK,QACzCE,OAAmB,EASvB,GANIA,EAFAP,EAAWK,OAAOG,YAAYC,WAEXT,EAAWK,OAAOG,YAAYC,WAAWN,EAAQG,EAAQT,EAAOC,EAAOG,GAIvE5pB,EAAQS,EAAE4pB,kBAAkBP,EAAQG,EAAQ5rB,KAAKwC,mBAAmBypB,kBAElE,IAArBJ,EACA,OAAOA,EAAmBP,EAAWE,SAI7C,OAAOP,EAAYZ,WAAaa,EAAYb,YAEhDrmB,EAAYnC,UAAU6pB,SAAW,SAAUP,EAAOQ,GAC9C,OAAO3rB,KAAKksB,aAAaR,SAASC,EAAQR,IAE9CnnB,EAAYnC,UAAUmoB,mBAAqB,SAAUxmB,GACjD,IAAI7B,EAAQS,EAAE4P,QAAQxO,EAAQoe,mBAI9B,IADA,IAAIuK,EAAa3oB,EAAQoe,kBAChB9gB,EAAI,EAAGA,EAAIqrB,EAAW3rB,OAAQM,IAAK,CACxC,IAAIiW,EAAQoV,EAAWrrB,GACnBsrB,EAAmB,IAANtrB,EACburB,EAAYvrB,IAAM0C,EAAQoe,kBAAkBphB,OAAS,EACzDuW,EAAMuV,cAAcF,GACpBrV,EAAMwV,aAAaF,GACnBtV,EAAMyV,cAAc1rB,KAG5BkD,EAAYnC,UAAUooB,oCAAsC,SAAU9mB,GAClE,IAAI4C,EAAQ/F,KACZ,GAAKA,KAAKwC,mBAAmBiqB,yBAA7B,CAIA,IAAIznB,EAAW,SAAUxB,GACrBuC,EAAM2jB,oCAAoClmB,EAAQoe,mBAAmB,GACrEpe,EAAQoe,kBAAkBre,SAAQ,SAAUwT,GACpCA,EAAMG,eACNlS,EAAS+R,OAIrB5T,EAAYoC,qBAAoB,SAAU/B,GAAW,OAAOwB,EAASxB,QAEzEQ,EAAYnC,UAAU6nB,oCAAsC,SAAUpmB,EAAUopB,GAC5E,IAAI3mB,EAAQ/F,KACR2B,EAAQS,EAAE4P,QAAQ1O,IAGjBtD,KAAKwC,mBAAmBiqB,0BAG7BnpB,EAASC,SAAQ,SAAUopB,GACvB,IAAIC,EAAmB7mB,EAAMlD,iBAAiBgqB,yBAC9CD,EAAiBrpB,SAAQ,SAAUupB,GAC/B,IAAIC,EAAeD,EAAgBhB,YAAYiB,aAC/C,GAA4B,kBAAjBA,EAAX,CAIA,IAAIC,EAAqBD,EACrBE,EAAiBlnB,EAAMlD,iBAAiBqqB,iBAAiBF,GACzDG,EAAqBF,IAAmBN,EAAaM,eACzD,IAAIE,EAGJ,GAAIT,EAEAC,EAAaS,cAAcN,EAAgB7mB,QAAS,UAEnD,CAED,IAAIonB,EAAoBV,EAAaW,0BAA0BL,GAC3DI,GACAV,EAAaS,cAAcN,EAAgB7mB,QAASonB,EAAkBltB,WAjB1EwR,QAAQC,MAAM,4GAuB9B7R,EAAW,CACPuB,EAAUwC,UAAU,kBACpB9C,EAAW,cAAeS,EAAiBwC,iBAC5CD,EAAYnC,UAAW,sBAAkB,GAC5C9B,EAAW,CACPuB,EAAUwC,UAAU,oBACpB9C,EAAW,cAAeU,EAAmBwC,mBAC9CF,EAAYnC,UAAW,wBAAoB,GAC9C9B,EAAW,CACPuB,EAAUwC,UAAU,gBACpB9C,EAAW,cAAeuoB,EAAegE,eAC1CvpB,EAAYnC,UAAW,oBAAgB,GAC1C9B,EAAW,CACPuB,EAAUwC,UAAU,sBACpB9C,EAAW,cAAeO,EAAqBwC,qBAChDC,EAAYnC,UAAW,0BAAsB,GAChD9B,EAAW,CACPuB,EAAU8U,cACVpV,EAAW,cAAeqV,UAC1BrV,EAAW,oBAAqB,IAChCA,EAAW,yBAAqB,IACjCgD,EAAYnC,UAAW,OAAQ,MAClCmC,EAAcjE,EAAW,CACrBuB,EAAU6C,KAAK,gBAChBH,GACIA,EAxOqB,GA0OhC5C,EAAQ4C,YAAcA,G;;;;;;GC1PtB,IAAIjE,EAAcC,MAAQA,KAAKD,YAAe,SAAUE,EAAYC,EAAQC,EAAKC,GAC7E,IAA2HC,EAAvHC,EAAIC,UAAUC,OAAQC,EAAIH,EAAI,EAAIJ,EAAkB,OAATE,EAAgBA,EAAOM,OAAOC,yBAAyBT,EAAQC,GAAOC,EACrH,GAAuB,kBAAZQ,SAAoD,oBAArBA,QAAQC,SAAyBJ,EAAIG,QAAQC,SAASZ,EAAYC,EAAQC,EAAKC,QACpH,IAAK,IAAIU,EAAIb,EAAWO,OAAS,EAAGM,GAAK,EAAGA,KAAST,EAAIJ,EAAWa,MAAIL,GAAKH,EAAI,EAAID,EAAEI,GAAKH,EAAI,EAAID,EAAEH,EAAQC,EAAKM,GAAKJ,EAAEH,EAAQC,KAASM,GAChJ,OAAOH,EAAI,GAAKG,GAAKC,OAAOK,eAAeb,EAAQC,EAAKM,GAAIA,GAE5DO,EAAchB,MAAQA,KAAKgB,YAAe,SAAUC,EAAGC,GACvD,GAAuB,kBAAZN,SAAoD,oBAArBA,QAAQO,SAAyB,OAAOP,QAAQO,SAASF,EAAGC,IAE1GR,OAAOK,eAAeK,EAAS,aAAc,CAAEC,OAAO,IACtD,IAgBImsB,EAhBA3e,EAAc,EAAQ,QACtBtN,EAAuB,EAAQ,QAC/B2N,EAAc,EAAQ,QACtBxN,EAAqB,EAAQ,QAC7BkN,EAAkB,EAAQ,QAC1BpH,EAAY,EAAQ,QACpBwF,EAAiB,EAAQ,QACzBC,EAAW,EAAQ,QACnB3L,EAAY,EAAQ,QACpBqN,EAAwB,EAAQ,QAChC8e,EAA0B,EAAQ,QAClCC,EAAgB,EAAQ,QACxBnE,EAAiB,EAAQ,QACzBoE,EAAe,EAAQ,QACvB1e,EAAY,EAAQ,QACpBtN,EAAU,EAAQ,SAEtB,SAAW6rB,GACPA,EAAcA,EAAc,UAAY,GAAK,SAC7CA,EAAcA,EAAc,eAAiB,GAAK,cAClDA,EAAcA,EAAc,sBAAwB,GAAK,qBACzDA,EAAcA,EAAc,cAAgB,GAAK,cAJrD,CAKGA,IAAkBA,EAAgB,KACrC,IAAII,EAAoC,WACpC,SAASA,KAksBT,OAhsBAA,EAAmB/rB,UAAU2H,KAAO,WAChC,IAAIqkB,EAAwB7tB,KAAK8tB,aAAalgB,KAAK5N,KAAM,CAAE+tB,KAAMlf,EAAYyC,UAAU0c,kBACnFC,EAAwCjuB,KAAK8tB,aAAalgB,KAAK5N,KAAM,CAAE+tB,KAAMlf,EAAYyC,UAAU0c,gBAAiBE,qBAAqB,IAC7IluB,KAAKwN,aAAa2gB,8BAA8BlhB,EAASQ,OAAOmD,gCAAiCqd,GACjGjuB,KAAKwN,aAAa2gB,8BAA8BlhB,EAASQ,OAAO2gB,+BAAgCP,GAChG7tB,KAAKwN,aAAa2gB,8BAA8BlhB,EAASQ,OAAO4gB,2BAA4BruB,KAAKsuB,eAAe1gB,KAAK5N,OACrHA,KAAKwN,aAAa2gB,8BAA8BlhB,EAASQ,OAAO8gB,2BAA4BvuB,KAAK8tB,aAAalgB,KAAK5N,KAAM,CAAE+tB,KAAMlf,EAAYyC,UAAUkd,cACvJxuB,KAAKwN,aAAa2gB,8BAA8BlhB,EAASQ,OAAOghB,uBAAwBzuB,KAAK0uB,iBAAiB9gB,KAAK5N,OACnHA,KAAKwN,aAAa2gB,8BAA8BlhB,EAASQ,OAAO+C,qBAAsBxQ,KAAKyQ,gBAAgB7C,KAAK5N,OAChHA,KAAKwN,aAAa2gB,8BAA8BlhB,EAASQ,OAAOiD,mBAAoB1Q,KAAK2Q,cAAc/C,KAAK5N,OAC5GA,KAAKwN,aAAa2gB,8BAA8BlhB,EAASQ,OAAOkhB,gCAAiCd,GACjG,IAAIe,EAAiB5uB,KAAK8tB,aAAalgB,KAAK5N,KAAM,CAC9C+tB,KAAMlf,EAAYyC,UAAUud,SAC5B5b,kBAAkB,EAClBC,SAAS,IAEblT,KAAKwC,mBAAmB4R,iBAAiB7S,EAAqBwC,mBAAmB+qB,kCAAmCF,GACpH5uB,KAAKwC,mBAAmB4R,iBAAiB7S,EAAqBwC,mBAAmBgrB,yCAA0CH,GAC3H5uB,KAAKsE,SAAW,IAAIkD,EAAUiD,QAC9BzK,KAAKgvB,YAAc,IAAIvB,EAAwBnM,sBAAsBthB,KAAKsE,SAAUtE,KAAKwC,mBAAoBxC,KAAK0K,QAAS1K,KAAKwN,aAAcxN,KAAK6C,iBAAkB7C,KAAK6S,QAAS7S,KAAK8S,UAAW9S,KAAKwS,qBACxMxS,KAAK0K,QAAQC,SAAS3K,KAAKsE,WAE/BspB,EAAmB/rB,UAAU0N,sBAAwB,SAAUC,EAAYC,EAAUC,EAAiBC,GAClG,IAAIsf,EACArP,GAAM,EAIV,EAAG,CACCqP,GAAmB,EAMnB,IALA,IAAIC,EAAkBlvB,KAAK+U,mBAAmBvF,GAC1C2f,EAAgBnvB,KAAK+U,mBAAmBtF,GAExC2f,EAAW9gB,KAAKgS,IAAI4O,EAAiBxf,GACrClE,EAAU8C,KAAK+gB,IAAIF,EAAexf,GAC7BlH,EAAW2mB,EAAU3mB,GAAY+C,EAAS/C,IAAY,CAC3D,IAAIjF,EAAUxD,KAAKwU,OAAO/L,GAC1B,GAAIjF,EAAQ8rB,mBAAoB,CAC5B,IAAIzkB,EAAY7K,KAAKwC,mBAAmB+sB,oBAAoB/rB,GAC5DA,EAAQoH,aAAaC,EAAU2kB,QAC/BP,GAAmB,EACnBrP,GAAM,GAGVqP,GACAjvB,KAAKyvB,mBAEJR,GACT,OAAOrP,GAEXgO,EAAmB/rB,UAAU4tB,WAAa,WAEtC,IADA,IAAIC,EAAa,EACR5uB,EAAI,EAAGA,EAAId,KAAK2vB,cAAcnvB,OAAQM,IAAK,CAGhD,IAAI8uB,EAAgB5vB,KAAKwC,mBAAmBqtB,iBAAmBhhB,EAAYyC,UAAUwe,kBACjFtsB,EAAUxD,KAAK2vB,cAAc7uB,GACjC,GAAIa,EAAQS,EAAE4P,QAAQxO,EAAQqH,WAAY,CACtC,IAAIA,EAAY7K,KAAKwC,mBAAmB+sB,oBAAoB/rB,EAASosB,GACrEpsB,EAAQoH,aAAaC,EAAU2kB,OAAQ3kB,EAAUklB,WAErDvsB,EAAQwsB,UAAUN,GAClBlsB,EAAQqb,YAAY/d,GACpB4uB,GAAclsB,EAAQqH,YAG9B+iB,EAAmB/rB,UAAUouB,aAAe,SAAUzsB,EAASL,GAE3D,GADAK,EAAQ2I,cACJ3I,EAAQ0T,cAAe,CACvB,GAAI1T,EAAQ2B,mBAAoB,CAM5B,IAAI+qB,EAAe/sB,EAAY0B,aAAerB,EAAQgF,SACtD,IAAK0nB,EACD,IAAK,IAAIpvB,EAAI,EAAGA,EAAI0C,EAAQ2B,mBAAmB3E,OAAQM,IACnDd,KAAKiwB,aAAazsB,EAAQ2B,mBAAmBrE,GAAIqC,GAIzDK,EAAQ2sB,SACR3sB,EAAQ2sB,QAAQhkB,cAGpB3I,EAAQ4sB,YACR5sB,EAAQ4sB,WAAWjkB,eAI3ByhB,EAAmB/rB,UAAUwuB,iBAAmB,SAAU7sB,EAASwR,GAC/D,IAAIsb,EAAkBtwB,KAAK+U,mBAAmBC,GAC1Cub,EAAoBvwB,KAAKwU,OAAO8b,GACpC,OAAIC,IAAsB/sB,IAG1B7B,EAAQS,EAAEkW,gBAAgBtY,KAAKsE,SAASqd,gBAAiBne,GACzD7B,EAAQS,EAAEmiB,gBAAgBvkB,KAAKsE,SAASqd,gBAAiBne,EAAS8sB,GAClEtwB,KAAK8tB,aAAa,CACdC,KAAMlf,EAAYyC,UAAU0c,gBAC5B/a,kBAAkB,EAClBC,SAAS,EACTsd,iBAAiB,KAEd,IAEX5C,EAAmB/rB,UAAUwO,eAAiB,WAC1C,OAAO,GAEXud,EAAmB/rB,UAAU8S,YAAc,WACvC,OAAI3U,KAAK2vB,cACE3vB,KAAK2vB,cAAcnvB,OAGnB,GAGfotB,EAAmB/rB,UAAU+S,oBAAsB,WAC/C,IAAI6b,EAAkBzwB,KAAK2vB,eAAiB3vB,KAAK2vB,cAAc,KAAO3vB,KAAKsE,SAC3E,OAAImsB,EACO,EAGAzwB,KAAKsE,SAASwS,oBAAsB9W,KAAKsE,SAASwS,oBAAoBtW,OAAS,GAG9FotB,EAAmB/rB,UAAUgT,6BAA+B,SAAUC,GAClE,IAAI2b,EAAkBzwB,KAAK2vB,eAAiB3vB,KAAK2vB,cAAc,KAAO3vB,KAAKsE,SAC3E,GAAImsB,EACA,OAAO3b,EAGP,IAAItR,EAAUxD,KAAKsE,SAASsd,kBAAkB9M,GAC9C,GAAI9U,KAAKwC,mBAAmBiqB,yBAExB,MAAOjpB,EAAQgF,UAAYhF,EAAQoe,mBAAqBpe,EAAQoe,kBAAkBphB,OAAS,EACvFgD,EAAUA,EAAQoe,kBAAkB,GAG5C,OAAOpe,EAAQiF,UAGvBmlB,EAAmB/rB,UAAUwN,aAAe,SAAUxD,GAClD,GAAIlK,EAAQS,EAAE4P,QAAQhS,KAAK2vB,eACvB,OAAO,KAEX,IAAInsB,EAAUxD,KAAK2vB,cAAc9jB,GACjC,OAAIrI,EACO,CACH8L,OAAQ9L,EAAQ8L,OAChBzE,UAAWrH,EAAQqH,WAIhB,MAGf+iB,EAAmB/rB,UAAU6sB,iBAAmB,WAC5C,IAAIxb,EAAUlT,KAAKwC,mBAAmBkuB,gBACtC1wB,KAAK8tB,aAAa,CAAEC,KAAMlf,EAAYyC,UAAUud,SAAU5b,kBAAkB,EAAMC,QAASA,KAE/F0a,EAAmB/rB,UAAU4O,gBAAkB,WAC3C,IAAIyC,EAAUlT,KAAKwC,mBAAmBkuB,gBACtC1wB,KAAK8tB,aAAa,CAAEC,KAAMlf,EAAYyC,UAAUqf,YAAa1d,kBAAkB,EAAMC,QAASA,KAElG0a,EAAmB/rB,UAAU8O,cAAgB,WACzC,IAAIuC,EAAUlT,KAAKwC,mBAAmBkuB,gBACtC1wB,KAAK8tB,aAAa,CAAEC,KAAMlf,EAAYyC,UAAUsf,UAAW3d,kBAAkB,EAAMC,QAASA,EAASsd,iBAAiB,KAE1H5C,EAAmB/rB,UAAUwP,QAAU,WACnC,OAAOxC,EAAYyC,UAAUuf,4BAEjCjD,EAAmB/rB,UAAUysB,eAAiB,WACtCtuB,KAAK6C,iBAAiBiuB,gBACtB9wB,KAAK8tB,aAAa,CAAEC,KAAMlf,EAAYyC,UAAUkd,aAGhDxuB,KAAK8tB,aAAa,CAAEC,KAAMlf,EAAYyC,UAAUyf,kBAGxDnD,EAAmB/rB,UAAUmvB,iBAAmB,SAAUzuB,GAQtD,IAAI0uB,EAAiBtvB,EAAQS,EAAEY,eAAeT,GAC1CY,EAAc,IAAIuqB,EAActpB,aAAY,EAAOpE,KAAKsE,UAI5D,OAHI2sB,GAAkBjxB,KAAKwC,mBAAmBmiB,eAC1CxhB,EAAYyB,cAETzB,GAEXyqB,EAAmB/rB,UAAUisB,aAAe,SAAU/rB,GAMlD,IAAIgE,EAAQ/F,KAMRmD,EAAcnD,KAAKgxB,iBAAiBjvB,EAAOQ,qBAC/C,OAAQR,EAAOgsB,MACX,KAAKlf,EAAYyC,UAAU0c,gBAEvBhuB,KAAKkxB,cAAcnvB,EAAOovB,WAAYpvB,EAAOQ,oBAAqBR,EAAOkhB,aAAc9f,EAAapB,EAAOmsB,qBAE/G,KAAKrf,EAAYyC,UAAUqf,YAEvB3wB,KAAKoxB,SAASjuB,GAElB,KAAK0L,EAAYyC,UAAUkd,WACvBxuB,KAAKqxB,QAAQluB,GACjB,KAAK0L,EAAYyC,UAAUyf,eAEvB/wB,KAAKsxB,YAAYnuB,GAErB,KAAK0L,EAAYyC,UAAUsf,UAEvB5wB,KAAKuxB,OAAOxvB,EAAOQ,oBAAqBY,GAE5C,KAAK0L,EAAYyC,UAAUud,SAEvB7uB,KAAKwxB,kBAMbxxB,KAAKiwB,aAAajwB,KAAKsE,SAAUnB,GACjCnD,KAAKyvB,aACL,IAAItkB,EAAQ,CACRC,KAAM6B,EAASQ,OAAOkF,oBACtBC,IAAK5S,KAAK6S,QACVC,UAAW9S,KAAK8S,UAChBI,QAASnR,EAAOmR,QAChBD,iBAAkBlR,EAAOkR,iBACzBD,QAASjR,EAAOiR,QAChBD,SAAS,GAEb/S,KAAKwN,aAAa/B,cAAcN,GAC5BnL,KAAKyxB,QACLtS,OAAOC,YAAW,WACdrZ,EAAM0rB,OAAOC,WACd,IAGX9D,EAAmB/rB,UAAUkQ,QAAU,WACnC,IAAI4f,EACAtP,EAAsB1gB,EAAQS,EAAEC,OAAOrC,KAAKwC,mBAAmBsf,2BAE/D6P,EADAtP,EACc1gB,EAAQS,EAAE4P,QAAQhS,KAAKsE,SAASa,qBAAmE,IAA5CnF,KAAKsE,SAASa,mBAAmB3E,OAGxFmB,EAAQS,EAAE4P,QAAQhS,KAAKsE,SAASqd,kBAA6D,IAAzC3hB,KAAKsE,SAASqd,gBAAgBnhB,OAEpG,IAAIoxB,EAAQjwB,EAAQS,EAAE4P,QAAQhS,KAAKsE,WAAaqtB,IAAgB3xB,KAAK6C,iBAAiBgvB,UACtF,OAAOD,GAEXhE,EAAmB/rB,UAAUoQ,eAAiB,WAC1C,OAAOtQ,EAAQS,EAAEC,OAAOrC,KAAK2vB,gBAAkB3vB,KAAK2vB,cAAcnvB,OAAS,GAE/EotB,EAAmB/rB,UAAUqQ,4BAA8B,SAAUC,EAAcC,GAE/E,IAEI5G,EAFAsmB,GAAe1f,EACf2f,GAAa,EAEbrrB,EAAS,GACTsrB,EAAuBhyB,KAAKwC,mBAAmBgU,yBA6BnD,OA5BAxW,KAAKiyB,+BAA8B,SAAUzuB,GACzC,IAAI0uB,EAAoBJ,IAAgBC,EAEnCD,GACGtuB,IAAY4O,GAAe5O,IAAY2O,IACvC2f,GAAc,GAGtB,IAAIK,EAAoB3uB,EAAQwT,OAASgb,EACzC,IAAKG,EAAmB,CACpB,IAAIC,EAAUN,IAAgBC,EAC1BM,EAAiB7uB,EAAQ8uB,eAAe9mB,IACxC4mB,GAAWC,IACX3rB,EAAOL,KAAK7C,GAGhB0uB,IACI1uB,IAAY4O,GAAe5O,IAAY2O,IACvC4f,GAAa,EAETvmB,EADAhI,IAAY4O,EACFA,EAGAD,OAKnBzL,GAEXknB,EAAmB/rB,UAAUiO,cAAgB,SAAUK,GACnDwB,QAAQC,MAAM,wEAElBgc,EAAmB/rB,UAAU0wB,iBAAmB,WAC5C,OAAOvyB,KAAKsE,SAAWtE,KAAKsE,SAASa,mBAAqB,MAE9DyoB,EAAmB/rB,UAAU2wB,YAAc,WACvC,OAAOxyB,KAAKsE,UAEhBspB,EAAmB/rB,UAAU2S,OAAS,SAAU3I,GAC5C,OAAO7L,KAAK2vB,cAAc9jB,IAE9B+hB,EAAmB/rB,UAAU4T,aAAe,SAAUjS,GAClD,OAAOxD,KAAK2vB,cAAc8C,QAAQjvB,IAAY,GAElDoqB,EAAmB/rB,UAAUkT,mBAAqB,SAAU2d,GACxD,GAAI1yB,KAAK+R,UACL,OAAQ,EAIZ,IAAI4gB,EAAgB,EAChBC,EAAa5yB,KAAK2vB,cAAcnvB,OAAS,EAE7C,GAAIkyB,GAAgB,EAEhB,OAAO,EAEX,IAAIG,EAAWlxB,EAAQS,EAAE0wB,KAAK9yB,KAAK2vB,eACnC,GAAIkD,EAASvjB,QAAUojB,EACnB,OAAO1yB,KAAK2vB,cAAcnvB,OAAS,EAEvC,MAAO,EAAM,CACT,IAAIuyB,EAAazkB,KAAKC,OAAOokB,EAAgBC,GAAc,GACvDI,EAAiBhzB,KAAK2vB,cAAcoD,GACxC,GAAI/yB,KAAKizB,aAAaD,EAAgBN,GAClC,OAAOK,EAEFC,EAAe1jB,OAASojB,EAC7BC,EAAgBI,EAAa,EAExBC,EAAe1jB,OAASojB,IAC7BE,EAAaG,EAAa,KAItCnF,EAAmB/rB,UAAUoxB,aAAe,SAAUzvB,EAASkvB,GAC3D,IAAIQ,EAAW1vB,EAAQ8L,OACnB6jB,EAAc3vB,EAAQ8L,OAAS9L,EAAQqH,UACvCuoB,EAAaF,GAAYR,GAAgBS,EAAcT,EAC3D,OAAOU,GAEXxF,EAAmB/rB,UAAU6S,qBAAuB,WAChD,GAAI1U,KAAK2vB,eAAiB3vB,KAAK2vB,cAAcnvB,OAAS,EAAG,CACrD,IAAIgL,EAAU7J,EAAQS,EAAE0wB,KAAK9yB,KAAK2vB,eAC9B0D,EAAY7nB,EAAQ8D,OAAS9D,EAAQX,UACzC,OAAOwoB,EAGP,OAAO,GAGfzF,EAAmB/rB,UAAUyxB,gBAAkB,SAAUtuB,GACjDhF,KAAKsE,SAASqd,iBACd3hB,KAAKsE,SAASqd,gBAAgBpe,SAAQ,SAAUC,EAASqI,GAAS,OAAO7G,EAASxB,EAASqI,OAGnG+hB,EAAmB/rB,UAAU8G,YAAc,SAAU3D,GACjDhF,KAAKuzB,gCAAgCvzB,KAAKsE,SAASa,mBAAoBH,EAAUwoB,EAAcgG,OAAQ,IAE3G5F,EAAmB/rB,UAAU4xB,uBAAyB,SAAUzuB,GAC5DhF,KAAKuzB,gCAAgCvzB,KAAKsE,SAASwS,oBAAqB9R,EAAUwoB,EAAckG,YAAa,IAEjH9F,EAAmB/rB,UAAUowB,8BAAgC,SAAUjtB,GACnEhF,KAAKuzB,gCAAgCvzB,KAAKsE,SAASsd,kBAAmB5c,EAAUwoB,EAAcmG,mBAAoB,IAEtH/F,EAAmB/rB,UAAU+xB,iBAAmB,SAAU5uB,GACtDhF,KAAKuzB,gCAAgC,CAACvzB,KAAKsE,UAAWU,EAAUwoB,EAAcqG,WAAY,IAO9FjG,EAAmB/rB,UAAU0xB,gCAAkC,SAAUO,EAAO9uB,EAAU+uB,EAAeloB,GACrG,GAAIioB,EACA,IAAK,IAAIhzB,EAAI,EAAGA,EAAIgzB,EAAMtzB,OAAQM,IAAK,CACnC,IAAI2jB,EAAOqP,EAAMhzB,GAGjB,GAFAkE,EAASyf,EAAM5Y,KAEX4Y,EAAKvN,cAAe,CAEpB,IAAI8c,EAAe,KACnB,OAAQD,GACJ,KAAKvG,EAAcgG,OACfQ,EAAevP,EAAKtf,mBACpB,MACJ,KAAKqoB,EAAckG,YACfM,EAAevP,EAAK3N,oBACpB,MACJ,KAAK0W,EAAcmG,mBACfK,EAAevP,EAAK7C,kBACpB,MACJ,KAAK4L,EAAcqG,WAEfG,EAAgBvP,EAAKwP,UAAqC,KAAzBxP,EAAK7C,kBACtC,MAEJoS,IACAnoB,EAAQ7L,KAAKuzB,gCAAgCS,EAAchvB,EAAU+uB,EAAeloB,KAKpG,OAAOA,GAIX+hB,EAAmB/rB,UAAUyvB,YAAc,SAAUnuB,GAC7CnD,KAAKk0B,kBACLl0B,KAAKk0B,iBAAiBpyB,QAAQ,CAAE0B,QAASxD,KAAKsE,SAAUnB,YAAaA,KAK7EyqB,EAAmB/rB,UAAUsyB,oBAAsB,SAAUC,GACzD,IAAIC,EAAgBr0B,KAAKwC,mBAAmBmiB,aAI5C,SAAS2P,EAA0BhxB,GAC1BA,GAGLA,EAASC,SAAQ,SAAUC,GACvB,IAAI+wB,EAAyBF,EAAgB1yB,EAAQS,EAAEC,OAAOmB,EAAQ2B,oBAAsB3B,EAAQwT,MAChGud,IACA/wB,EAAQgF,SAAW4rB,EACnBE,EAA0B9wB,EAAQ2B,wBAX1CnF,KAAKsE,UACLgwB,EAA0Bt0B,KAAKsE,SAASa,oBAc5CnF,KAAK8tB,aAAa,CAAEC,KAAMlf,EAAYyC,UAAUud,WAChD,IAAI2F,EAAcJ,EAAS,YAAc,cACrCjpB,EAAQ,CACRyH,IAAK5S,KAAK6S,QACVC,UAAW9S,KAAK8S,UAChB1H,KAAM6B,EAASQ,OAAOgnB,0BACtBC,OAAQF,GAEZx0B,KAAKwN,aAAa/B,cAAcN,IAEpCyiB,EAAmB/rB,UAAU0vB,OAAS,SAAUhvB,EAAqBY,GACjEnD,KAAK20B,UAAU7yB,QAAQ,CACnB0B,QAASxD,KAAKsE,SACd/B,oBAAqBA,EACrBY,YAAaA,KAGrByqB,EAAmB/rB,UAAUqvB,cAAgB,SAAUC,EAAY5uB,EAAqB0gB,EAAc9f,EAAa+qB,GAC/G,IAAInoB,EAAQ/F,KAERqiB,EAAsB1gB,EAAQS,EAAEC,OAAOrC,KAAKwC,mBAAmBsf,2BAC/DO,IAGAriB,KAAK40B,YACDryB,GAAuBZ,EAAQS,EAAEC,OAAOE,GACxCA,EAAoBgB,SAAQ,SAAUG,GAClCqC,EAAM6uB,WAAW9yB,QAAQ,CACrB0B,QAASuC,EAAMzB,SACf6e,mBAAoBzf,EACpBuf,aAAcA,EACd9f,YAAaA,QAMrBnD,KAAKwS,oBAAoBqiB,4BACzB70B,KAAK40B,WAAW9yB,QAAQ,CACpB0B,QAASxD,KAAKsE,SACdnB,YAAaA,EACb+qB,oBAAqBA,IAGzBluB,KAAK80B,kBAAkB3D,IAEvBnxB,KAAKwC,mBAAmBgU,0BACxBxW,KAAKwS,oBAAoByR,mCAAmC9gB,IAIhEnD,KAAKsE,SAASa,mBAAqBnF,KAAKsE,SAASqd,kBAGzDiM,EAAmB/rB,UAAUizB,kBAAoB,SAAU3D,GAClDA,GAGLxvB,EAAQS,EAAE2yB,qBAAqB/0B,KAAKsE,SAASa,oBAAoB,SAAUsf,EAAMtkB,GAI9C,mBAApBgxB,EAAWhxB,KAClBskB,EAAKjc,SAAW2oB,EAAWhxB,QAIvCytB,EAAmB/rB,UAAUuvB,SAAW,SAAUjuB,GAC9CnD,KAAKg1B,YAAYlzB,QAAQ,CAAE0B,QAASxD,KAAKsE,SAAUnB,YAAaA,KAEpEyqB,EAAmB/rB,UAAUwvB,QAAU,SAAUluB,GACzCnD,KAAKi1B,YACLj1B,KAAKi1B,WAAWnzB,QAAQ,CAAE0B,QAASxD,KAAKsE,SAAUnB,YAAaA,KAGvEyqB,EAAmB/rB,UAAUqzB,cAAgB,WACzC,IAAKl1B,KAAKsE,SAASa,qBAAuBnF,KAAKwC,mBAAmB2yB,kCAC9D,OAAO,KAEX,IAAIzuB,EAAS,GAEb,OADA/E,EAAQS,EAAE2yB,qBAAqB/0B,KAAKsE,SAASa,oBAAoB,SAAUsf,EAAMtkB,GAAO,OAAOuG,EAAOvG,GAAOskB,EAAKjc,YAC3G9B,GAEXknB,EAAmB/rB,UAAU2gB,kBAAoB,WAC7C,OAAOxiB,KAAKgvB,YAAYxM,qBAE5BoL,EAAmB/rB,UAAU4S,WAAa,SAAUhR,GAChD,OAAOzD,KAAKgvB,YAAYva,WAAWhR,IAGvCmqB,EAAmB/rB,UAAU6gB,WAAa,SAAUC,GAIhD,IAAIwO,EAAanxB,KAAKk1B,gBACtBl1B,KAAKgvB,YAAYtM,WAAWC,GAK5B,IAAIyS,EAAsB,CACtBhqB,KAAM6B,EAASQ,OAAO4nB,uBACtBziB,IAAK5S,KAAK6S,QACVC,UAAW9S,KAAK8S,WAEpB9S,KAAKwN,aAAa/B,cAAc2pB,GAChCp1B,KAAK8tB,aAAa,CACdC,KAAMlf,EAAYyC,UAAU0c,gBAC5BmD,WAAYA,EACZne,SAAS,KAGjB4a,EAAmB/rB,UAAUyzB,mBAAqB,SAAUC,EAAoBvwB,GAC5E,IAAIe,EAAQ/F,KACZ,IAAKA,KAAKw1B,wBAAyB,CAC/Bx1B,KAAKw1B,wBAA0B,GAC/B,IAAIC,EAAaz1B,KAAKwC,mBAAmBkzB,2BACzCvW,OAAOC,YAAW,WACdrZ,EAAM4vB,4BACN5vB,EAAMyvB,wBAA0B,OACjCC,GAEPz1B,KAAKw1B,wBAAwBnvB,KAAK,CAAEkvB,mBAAoBA,EAAoBvwB,SAAUA,KAE1F4oB,EAAmB/rB,UAAU8zB,0BAA4B,WACrD,IAAI5vB,EAAQ/F,KACZA,KAAK41B,WAAWC,gBAChB,IAAIC,EAAqB,GACrBC,EAAe,GACf/1B,KAAKw1B,yBACLx1B,KAAKw1B,wBAAwBjyB,SAAQ,SAAUyyB,GAC3C,IAAIC,EAAclwB,EAAMipB,YAAY5Z,cAAc4gB,EAAST,mBAAoB,MAC/EQ,EAAa1vB,KAAK4vB,GACdD,EAAShxB,UACT8wB,EAAmBzvB,KAAK2vB,EAAShxB,SAAS4I,KAAK,KAAMqoB,OAIjEj2B,KAAKk2B,oBAAoBH,GAErBD,EAAmBt1B,OAAS,GAC5B2e,OAAOC,YAAW,WACd0W,EAAmBvyB,SAAQ,SAAU4yB,GAAQ,OAAOA,SACrD,IAGXvI,EAAmB/rB,UAAUuT,cAAgB,SAAU4N,EAAaC,GAChEjjB,KAAK41B,WAAWC,gBAChB,IAAII,EAAcj2B,KAAKgvB,YAAY5Z,cAAc4N,EAAaC,GAE9D,OADAjjB,KAAKk2B,oBAAoB,CAACD,GAAchT,GACjCgT,GAGXrI,EAAmB/rB,UAAUq0B,oBAAsB,SAAUH,EAAc9S,GACvEjjB,KAAK8tB,aAAa,CACdC,KAAMlf,EAAYyC,UAAU0c,gBAC5BzrB,oBAAqBwzB,EACrB9S,aAAcA,EACdhQ,kBAAkB,EAClBC,SAAS,EACTsd,iBAAiB,IAErB,IAAIrlB,EAAQ,CACRC,KAAM6B,EAASQ,OAAO2oB,uBACtBxjB,IAAK5S,KAAK6S,QACVC,UAAW9S,KAAK8S,WAEpB9S,KAAKwN,aAAa/B,cAAcN,IAEpCyiB,EAAmB/rB,UAAU2vB,gBAAkB,WAC3CxxB,KAAK2vB,cAAgB3vB,KAAKq2B,aAAav0B,QAAQ,CAAE0B,QAASxD,KAAKsE,YAEnEspB,EAAmB/rB,UAAUy0B,mBAAqB,WAC9Ct2B,KAAK8tB,aAAa,CAAEC,KAAMlf,EAAYyC,UAAUud,SAAU5b,kBAAkB,EAAMud,iBAAiB,KAEvG5C,EAAmB/rB,UAAU00B,gBAAkB,WAC3Cv2B,KAAK2I,aAAY,SAAUnF,GAAW,OAAOA,EAAQoH,aAAa,SAClE5K,KAAKs2B,sBAETv2B,EAAW,CACPuB,EAAUwC,UAAU,sBACpB9C,EAAW,cAAeO,EAAqBwC,qBAChD6pB,EAAmB/rB,UAAW,0BAAsB,GACvD9B,EAAW,CACPuB,EAAUwC,UAAU,oBACpB9C,EAAW,cAAeU,EAAmBwC,mBAC9C0pB,EAAmB/rB,UAAW,wBAAoB,GACrD9B,EAAW,CACPuB,EAAUwC,UAAU,iBACpB9C,EAAW,cAAe4N,EAAgBmH,gBAC3C6X,EAAmB/rB,UAAW,qBAAiB,GAClD9B,EAAW,CACPuB,EAAUwC,UAAU,UACpB9C,EAAW,cAAeN,SAC3BktB,EAAmB/rB,UAAW,cAAU,GAC3C9B,EAAW,CACPuB,EAAUwC,UAAU,uBACpB9C,EAAW,cAAe2N,EAAsBqH,sBACjD4X,EAAmB/rB,UAAW,2BAAuB,GACxD9B,EAAW,CACPuB,EAAUwC,UAAU,gBACpB9C,EAAW,cAAegM,EAAeyB,eAC1Cmf,EAAmB/rB,UAAW,oBAAgB,GACjD9B,EAAW,CACPuB,EAAUwC,UAAU,WACpB9C,EAAW,cAAeM,EAAUk1B,UACrC5I,EAAmB/rB,UAAW,eAAW,GAC5C9B,EAAW,CACPuB,EAAUwC,UAAU,gBACpB9C,EAAW,cAAeuoB,EAAegE,eAC1CK,EAAmB/rB,UAAW,oBAAgB,GACjD9B,EAAW,CACPuB,EAAUwC,UAAU,cACpB9C,EAAW,cAAe2sB,EAAa8I,aACxC7I,EAAmB/rB,UAAW,kBAAc,GAC/C9B,EAAW,CACPuB,EAAUwC,UAAU,aACpB9C,EAAW,cAAekO,EAAYgH,YACvC0X,EAAmB/rB,UAAW,iBAAa,GAC9C9B,EAAW,CACPuB,EAAUwC,UAAU,WACpB9C,EAAW,cAAeiO,EAAUgH,UACrC2X,EAAmB/rB,UAAW,eAAW,GAC5C9B,EAAW,CACPuB,EAAUwC,UAAU,eACpB9C,EAAW,cAAeN,SAC3BktB,EAAmB/rB,UAAW,mBAAe,GAChD9B,EAAW,CACPuB,EAAUwC,UAAU,aACpB9C,EAAW,cAAeN,SAC3BktB,EAAmB/rB,UAAW,iBAAa,GAC9C9B,EAAW,CACPuB,EAAUwC,UAAU,gBACpB9C,EAAW,cAAeN,SAC3BktB,EAAmB/rB,UAAW,oBAAgB,GACjD9B,EAAW,CACPuB,EAAUo1B,SAAS,cACnB11B,EAAW,cAAeN,SAC3BktB,EAAmB/rB,UAAW,kBAAc,GAC/C9B,EAAW,CACPuB,EAAUo1B,SAAS,oBACnB11B,EAAW,cAAeN,SAC3BktB,EAAmB/rB,UAAW,wBAAoB,GACrD9B,EAAW,CACPuB,EAAUo1B,SAAS,cACnB11B,EAAW,cAAeN,SAC3BktB,EAAmB/rB,UAAW,kBAAc,GAC/C9B,EAAW,CACPuB,EAAU8U,cACVpV,EAAW,cAAeqV,UAC1BrV,EAAW,oBAAqB,IAChCA,EAAW,yBAAqB,IACjC4sB,EAAmB/rB,UAAW,OAAQ,MACzC+rB,EAAqB7tB,EAAW,CAC5BuB,EAAU6C,KAAK,aAChBypB,GACIA,EAnsB4B,GAqsBvCxsB,EAAQwsB,mBAAqBA,G;;;;;;GCtuB7B,IAAI7tB,EAAcC,MAAQA,KAAKD,YAAe,SAAUE,EAAYC,EAAQC,EAAKC,GAC7E,IAA2HC,EAAvHC,EAAIC,UAAUC,OAAQC,EAAIH,EAAI,EAAIJ,EAAkB,OAATE,EAAgBA,EAAOM,OAAOC,yBAAyBT,EAAQC,GAAOC,EACrH,GAAuB,kBAAZQ,SAAoD,oBAArBA,QAAQC,SAAyBJ,EAAIG,QAAQC,SAASZ,EAAYC,EAAQC,EAAKC,QACpH,IAAK,IAAIU,EAAIb,EAAWO,OAAS,EAAGM,GAAK,EAAGA,KAAST,EAAIJ,EAAWa,MAAIL,GAAKH,EAAI,EAAID,EAAEI,GAAKH,EAAI,EAAID,EAAEH,EAAQC,EAAKM,GAAKJ,EAAEH,EAAQC,KAASM,GAChJ,OAAOH,EAAI,GAAKG,GAAKC,OAAOK,eAAeb,EAAQC,EAAKM,GAAIA,GAE5DO,EAAchB,MAAQA,KAAKgB,YAAe,SAAUC,EAAGC,GACvD,GAAuB,kBAAZN,SAAoD,oBAArBA,QAAQO,SAAyB,OAAOP,QAAQO,SAASF,EAAGC,IAE1GR,OAAOK,eAAeK,EAAS,aAAc,CAAEC,OAAO,IACtD,IAAIC,EAAY,EAAQ,QACpBuN,EAAc,EAAQ,QACtBtN,EAAuB,EAAQ,QAC/BI,EAAU,EAAQ,QAClBg1B,EAAkC,WAClC,SAASA,KA6ET,OA3EAA,EAAiB90B,UAAU6X,cAAgB,WACnC1Z,KAAKqa,SAAShJ,YAAcxC,EAAYyC,UAAUuf,6BAClD7wB,KAAK42B,mBAAqB52B,KAAKqa,WAIvCsc,EAAiB90B,UAAUg1B,4BAA8B,SAAU/qB,GAC/D,GAAInK,EAAQS,EAAE4P,QAAQhS,KAAK42B,oBACvBjlB,QAAQC,MAAM,oEADlB,CAIA,IAAIW,EAAmBvS,KAAKwC,mBAAmB+P,mBAC/C,GAAKA,IAAoB5Q,EAAQS,EAAE4P,QAAQO,GAA3C,CAKA,IAAI8C,EAAc,CACdxR,OAAQ,GACRD,OAAQ,GACRD,IAAK,IAELmzB,EAAmB92B,KAAK42B,mBAAmBpU,oBAC3CuU,EAAoB/2B,KAAKwC,mBAAmBw0B,kCAC5CC,EAAWF,EAAoB,KAAO,GAgC1C,OA/BIp1B,EAAQS,EAAEC,OAAOyJ,IAKjBA,EAAKvI,SAAQ,SAAUgH,EAAUsB,GAC7B,IAAIpI,EAAK8O,EAAiBhI,GACtB2sB,EAAeJ,EAAiBrzB,GAIpC,GAHIwzB,IACAA,EAASxzB,GAAMoI,GAEfqrB,EAAc,CACd,IAAIC,EAAiBD,EAAaprB,OAASvB,EACvC4sB,GACA9hB,EAAYzR,OAAOyC,KAAKkE,GAI5BusB,EAAiBrzB,QAAMkb,OAGvBtJ,EAAY1R,IAAI0C,KAAKkE,MAKjC5I,EAAQS,EAAEg1B,cAAcN,GAAkB,SAAUrzB,EAAID,GAChDA,GACA6R,EAAYxR,OAAOwC,KAAK7C,EAAQsI,SAGjC,CAACuJ,EAAa4hB,GA3CjBtlB,QAAQC,MAAM,2GA6CtB7R,EAAW,CACPuB,EAAUwC,UAAU,YACpB9C,EAAW,cAAeN,SAC3Bi2B,EAAiB90B,UAAW,gBAAY,GAC3C9B,EAAW,CACPuB,EAAUwC,UAAU,sBACpB9C,EAAW,cAAeO,EAAqBwC,qBAChD4yB,EAAiB90B,UAAW,0BAAsB,GACrD9B,EAAW,CACPuB,EAAU8U,cACVpV,EAAW,cAAeqV,UAC1BrV,EAAW,oBAAqB,IAChCA,EAAW,yBAAqB,IACjC21B,EAAiB90B,UAAW,gBAAiB,MAChD80B,EAAmB52B,EAAW,CAC1BuB,EAAU6C,KAAK,qBAChBwyB,GACIA,EA9E0B,GAgFrCv1B,EAAQu1B,iBAAmBA,G;;;;;;GC9F3B,IAAI52B,EAAcC,MAAQA,KAAKD,YAAe,SAAUE,EAAYC,EAAQC,EAAKC,GAC7E,IAA2HC,EAAvHC,EAAIC,UAAUC,OAAQC,EAAIH,EAAI,EAAIJ,EAAkB,OAATE,EAAgBA,EAAOM,OAAOC,yBAAyBT,EAAQC,GAAOC,EACrH,GAAuB,kBAAZQ,SAAoD,oBAArBA,QAAQC,SAAyBJ,EAAIG,QAAQC,SAASZ,EAAYC,EAAQC,EAAKC,QACpH,IAAK,IAAIU,EAAIb,EAAWO,OAAS,EAAGM,GAAK,EAAGA,KAAST,EAAIJ,EAAWa,MAAIL,GAAKH,EAAI,EAAID,EAAEI,GAAKH,EAAI,EAAID,EAAEH,EAAQC,EAAKM,GAAKJ,EAAEH,EAAQC,KAASM,GAChJ,OAAOH,EAAI,GAAKG,GAAKC,OAAOK,eAAeb,EAAQC,EAAKM,GAAIA,GAE5DO,EAAchB,MAAQA,KAAKgB,YAAe,SAAUC,EAAGC,GACvD,GAAuB,kBAAZN,SAAoD,oBAArBA,QAAQO,SAAyB,OAAOP,QAAQO,SAASF,EAAGC,IAE1GR,OAAOK,eAAeK,EAAS,aAAc,CAAEC,OAAO,IACtD,IAAIE,EAAuB,EAAQ,QAC/BiG,EAAY,EAAQ,QACpBlG,EAAY,EAAQ,QACpB0L,EAAiB,EAAQ,QACzBC,EAAW,EAAQ,QACnB4B,EAAc,EAAQ,QACtBK,EAAc,EAAQ,QACtBD,EAAY,EAAQ,QACpBtN,EAAU,EAAQ,QAClB01B,EAAgC,WAChC,SAASA,KA6IT,OA3IAA,EAAex1B,UAAU2H,KAAO,WAC5BxJ,KAAKs3B,oBAAoBt3B,KAAKwC,mBAAmB+0B,uBACjDv3B,KAAKw3B,uBAAuBx3B,KAAKwC,mBAAmBi1B,2BAExDJ,EAAex1B,UAAUkQ,QAAU,SAAU2lB,GACzC,IAAI/rB,EAAO+rB,IAAa7oB,EAAYyC,UAAUqmB,WAAa33B,KAAK43B,cAAgB53B,KAAK63B,iBACrF,OAAOl2B,EAAQS,EAAEY,eAAe2I,IAEpC0rB,EAAex1B,UAAUoQ,eAAiB,SAAUylB,GAChD,OAAQ13B,KAAK+R,QAAQ2lB,IAEzBL,EAAex1B,UAAUi2B,cAAgB,SAAU9iB,EAAO0iB,GACtD,IAAI/rB,EAAO+rB,IAAa7oB,EAAYyC,UAAUqmB,WAAa33B,KAAK43B,cAAgB53B,KAAK63B,iBACrF,GAAIl2B,EAAQS,EAAEY,eAAe2I,GACzB,OAAO,EAEX,IAAK,IAAI7K,EAAI,EAAGA,EAAI6K,EAAKnL,OAAQM,IAAK,CAClC,IAAI0C,EAAUmI,EAAK7K,GACfi3B,EAAcv0B,EAAQ8L,OAAS9L,EAAQqH,UAAY,EAGvD,GAAIktB,GAAe/iB,EACf,OAAOlU,EAGf,OAAO6K,EAAKnL,OAAS,GAEzB62B,EAAex1B,UAAUy1B,oBAAsB,SAAU3U,GACrD3iB,KAAK43B,cAAgB53B,KAAKg4B,oBAAoBrV,GAAS,GACvD,IAAIxX,EAAQ,CACRC,KAAM6B,EAASQ,OAAOwqB,8BACtBrlB,IAAK5S,KAAK6S,QACVC,UAAW9S,KAAK8S,WAEpB9S,KAAKwN,aAAa/B,cAAcN,IAEpCksB,EAAex1B,UAAU21B,uBAAyB,SAAU7U,GACxD3iB,KAAK63B,iBAAmB73B,KAAKg4B,oBAAoBrV,GAAS,GAC1D,IAAIxX,EAAQ,CACRC,KAAM6B,EAASQ,OAAOwqB,8BACtBrlB,IAAK5S,KAAK6S,QACVC,UAAW9S,KAAK8S,WAEpB9S,KAAKwN,aAAa/B,cAAcN,IAEpCksB,EAAex1B,UAAUm2B,oBAAsB,SAAUE,EAASC,GAC9D,IAAIpyB,EAAQ/F,KACRsD,EAAW,GACf,GAAI40B,EAAS,CACT,IAAIE,EAAe,EACnBF,EAAQ30B,SAAQ,SAAUgH,EAAUsB,GAChC,IAAIrI,EAAU,IAAIgE,EAAUiD,QAC5B1E,EAAM2E,QAAQC,SAASnH,GACvBA,EAAQsI,KAAOvB,EACf/G,EAAQC,IAAM00B,EAAQ,IAAM,KAAO,IAAMtsB,EACzCrI,EAAQ60B,UAAYF,EAAQtpB,EAAYyC,UAAUqmB,WAAa9oB,EAAYyC,UAAUgnB,cACrF90B,EAAQwsB,UAAUoI,GAClB50B,EAAQoH,aAAa7E,EAAMvD,mBAAmB+sB,oBAAoB/rB,GAASgsB,QAC3EhsB,EAAQqb,YAAYhT,GACpBusB,GAAgB50B,EAAQqH,UACxBvH,EAAS+C,KAAK7C,MAGtB,OAAOF,GAEX+zB,EAAex1B,UAAU01B,oBAAsB,WAC3C,OAAOv3B,KAAK43B,eAEhBP,EAAex1B,UAAU41B,uBAAyB,WAC9C,OAAOz3B,KAAK63B,kBAEhBR,EAAex1B,UAAU02B,wBAA0B,WAC/C,OAAOv4B,KAAKw4B,eAAex4B,KAAK43B,gBAEpCP,EAAex1B,UAAU42B,qBAAuB,WAC5C,OAAOz4B,KAAK43B,cAAgB53B,KAAK43B,cAAcp3B,OAAS,GAE5D62B,EAAex1B,UAAU62B,wBAA0B,WAC/C,OAAO14B,KAAK63B,iBAAmB73B,KAAK63B,iBAAiBr3B,OAAS,GAElE62B,EAAex1B,UAAU82B,gBAAkB,SAAU9sB,GACjD,OAAO7L,KAAK43B,cAAc/rB,IAE9BwrB,EAAex1B,UAAU+2B,mBAAqB,SAAU/sB,GACpD,OAAO7L,KAAK63B,iBAAiBhsB,IAEjCwrB,EAAex1B,UAAUg3B,oBAAsB,SAAU7zB,GACjDrD,EAAQS,EAAEY,eAAehD,KAAK43B,gBAGlC53B,KAAK43B,cAAcr0B,QAAQyB,IAE/BqyB,EAAex1B,UAAUi3B,uBAAyB,SAAU9zB,GACpDrD,EAAQS,EAAEY,eAAehD,KAAK63B,mBAGlC73B,KAAK63B,iBAAiBt0B,QAAQyB,IAElCqyB,EAAex1B,UAAUk3B,2BAA6B,WAClD,OAAO/4B,KAAKw4B,eAAex4B,KAAK63B,mBAEpCR,EAAex1B,UAAU22B,eAAiB,SAAUl1B,GAChD,GAAKA,GAAgC,IAApBA,EAAS9C,OAGrB,CACD,IAAIqyB,EAAWlxB,EAAQS,EAAE0wB,KAAKxvB,GAC9B,OAAOuvB,EAASvjB,OAASujB,EAAShoB,UAJlC,OAAO,GAOf9K,EAAW,CACPuB,EAAUwC,UAAU,sBACpB9C,EAAW,cAAeO,EAAqBwC,qBAChDszB,EAAex1B,UAAW,0BAAsB,GACnD9B,EAAW,CACPuB,EAAUwC,UAAU,gBACpB9C,EAAW,cAAegM,EAAeyB,eAC1C4oB,EAAex1B,UAAW,oBAAgB,GAC7C9B,EAAW,CACPuB,EAAUwC,UAAU,WACpB9C,EAAW,cAAeM,EAAUk1B,UACrCa,EAAex1B,UAAW,eAAW,GACxC9B,EAAW,CACPuB,EAAUwC,UAAU,aACpB9C,EAAW,cAAekO,EAAYgH,YACvCmhB,EAAex1B,UAAW,iBAAa,GAC1C9B,EAAW,CACPuB,EAAUwC,UAAU,WACpB9C,EAAW,cAAeiO,EAAUgH,UACrCohB,EAAex1B,UAAW,eAAW,GACxC9B,EAAW,CACPuB,EAAU8U,cACVpV,EAAW,cAAeqV,UAC1BrV,EAAW,oBAAqB,IAChCA,EAAW,yBAAqB,IACjCq2B,EAAex1B,UAAW,OAAQ,MACrCw1B,EAAiBt3B,EAAW,CACxBuB,EAAU6C,KAAK,mBAChBkzB,GACIA,EA9IwB,GAgJnCj2B,EAAQi2B,eAAiBA,G;;;;;;GCnKzB,IAAIxwB,EAAa7G,MAAQA,KAAK6G,WAAc,WACxC,IAAIC,EAAgB,SAAUzG,EAAG0G,GAI7B,OAHAD,EAAgBpG,OAAOsG,gBAClB,CAAEC,UAAW,cAAgBC,OAAS,SAAU7G,EAAG0G,GAAK1G,EAAE4G,UAAYF,IACvE,SAAU1G,EAAG0G,GAAK,IAAK,IAAII,KAAKJ,EAAOA,EAAEK,eAAeD,KAAI9G,EAAE8G,GAAKJ,EAAEI,KAClEL,EAAczG,EAAG0G,IAE5B,OAAO,SAAU1G,EAAG0G,GAEhB,SAASM,IAAOrH,KAAKsH,YAAcjH,EADnCyG,EAAczG,EAAG0G,GAEjB1G,EAAEwB,UAAkB,OAANkF,EAAarG,OAAO6G,OAAOR,IAAMM,EAAGxF,UAAYkF,EAAElF,UAAW,IAAIwF,IAV3C,GAaxCtH,EAAcC,MAAQA,KAAKD,YAAe,SAAUE,EAAYC,EAAQC,EAAKC,GAC7E,IAA2HC,EAAvHC,EAAIC,UAAUC,OAAQC,EAAIH,EAAI,EAAIJ,EAAkB,OAATE,EAAgBA,EAAOM,OAAOC,yBAAyBT,EAAQC,GAAOC,EACrH,GAAuB,kBAAZQ,SAAoD,oBAArBA,QAAQC,SAAyBJ,EAAIG,QAAQC,SAASZ,EAAYC,EAAQC,EAAKC,QACpH,IAAK,IAAIU,EAAIb,EAAWO,OAAS,EAAGM,GAAK,EAAGA,KAAST,EAAIJ,EAAWa,MAAIL,GAAKH,EAAI,EAAID,EAAEI,GAAKH,EAAI,EAAID,EAAEH,EAAQC,EAAKM,GAAKJ,EAAEH,EAAQC,KAASM,GAChJ,OAAOH,EAAI,GAAKG,GAAKC,OAAOK,eAAeb,EAAQC,EAAKM,GAAIA,GAE5DO,EAAchB,MAAQA,KAAKgB,YAAe,SAAUC,EAAGC,GACvD,GAAuB,kBAAZN,SAAoD,oBAArBA,QAAQO,SAAyB,OAAOP,QAAQO,SAASF,EAAGC,IAEtGoW,EAAWtX,MAAQA,KAAKsX,SAAY,SAAUC,EAAYC,GAC1D,OAAO,SAAUtX,EAAQC,GAAOqX,EAAUtX,EAAQC,EAAKoX,KAE3D7W,OAAOK,eAAeK,EAAS,aAAc,CAAEC,OAAO,IACtD,IAAIC,EAAY,EAAQ,QACpB0L,EAAiB,EAAQ,QACzBC,EAAW,EAAQ,QACnByK,EAAW,EAAQ,QACnBshB,EAAkB,EAAQ,QAC1BjqB,EAAiB,EAAQ,QACzBE,EAAY,EAAQ,QACpBC,EAAc,EAAQ,QACtBiF,EAA+B,SAAUxM,GAEzC,SAASwM,EAAcpS,GACnB,OAAO4F,EAAOG,KAAK9H,KAAM+B,IAAW/B,KAgIxC,OAlIA6G,EAAUsN,EAAexM,GAIzBwM,EAActS,UAAUmW,SAAW,SAAUC,GACzCjY,KAAKkY,OAASD,EAAc1Q,OAAO,kBAEvC4M,EAActS,UAAU2H,KAAO,WAC3B7B,EAAO9F,UAAU2H,KAAK1B,KAAK9H,MAG3BA,KAAKwU,OAAO,IAEhBL,EAActS,UAAUo3B,cAAgB,SAAU7gB,EAAO8gB,EAAeC,GAKpE,IAJA,IAAIjxB,EAAWkQ,EAAMzO,cACjBvB,EAASgQ,EAAMxO,YACfwvB,EAAuBF,EAAgBC,EAElCE,EAAkBjxB,EAAS,EAAGixB,GAAmBnxB,EAAUmxB,IAEhE,KAAIA,EAAkBD,GAAtB,CAGA,IAAIE,EAAoBD,EAAkBF,EACtCI,EAAmBv5B,KAAKwU,OAAO8kB,GAAmB,GAClDC,EACAnhB,EAAMlO,WAAWmvB,EAAiBE,IAGlCnhB,EAAMjO,gBAAgBkvB,GACtBjhB,EAAMtO,cAIlBqK,EAActS,UAAU23B,YAAc,SAAUphB,EAAOqhB,EAAeC,GAKlE,IAJA,IAAIC,EAAevhB,EAAMzO,cACrBiwB,EAAaxhB,EAAMxO,YACnBiwB,EAAc,GAEThuB,EAAQ,EAAGA,EAAQ6tB,EAAMl5B,OAAQqL,IAAS,CAC/C,IAAIpD,EAAWgxB,EAAgB5tB,EAC3BiuB,EAAuBrxB,GAAYkxB,GAAgBlxB,EAAWmxB,EAClE,GAAIE,EAAsB,CACtB,IAAIvvB,EAAWmvB,EAAM7tB,GACjBzB,EAAagO,EAAM9N,WAAW7B,EAAU8B,GAC5CsvB,EAAYxzB,KAAK+D,IAGzB,OAAOyvB,GAEX1lB,EAActS,UAAU2T,mBAAqB,SAAUikB,EAAeC,GAElE,IAAI3zB,EAAQ/F,KACR+5B,EAAW,GACf/5B,KAAKwoB,4BAA2B,SAAUpQ,GACtC,IAAIwhB,EAAaxhB,EAAMxO,YAEvB,KAAIgwB,GAAcH,GAAlB,CAGA1zB,EAAMkzB,cAAc7gB,EAAOqhB,EAAeC,EAAMl5B,QAChD,IAAIw5B,EAAmBj0B,EAAMyzB,YAAYphB,EAAOqhB,EAAeC,GAC/DM,EAAiBz2B,SAAQ,SAAUC,GAAW,OAAOu2B,EAAS1zB,KAAK7C,UAEnExD,KAAKuQ,iBACLvQ,KAAKinB,wBAAwBjnB,KAAKmV,qBAAuBukB,EAAMl5B,QAEnER,KAAKuU,iBACL,IAAIpJ,EAAQ,CACRC,KAAM6B,EAASQ,OAAO2oB,uBACtBxjB,IAAK5S,KAAK6S,QACVC,UAAW9S,KAAK8S,WAEpB9S,KAAKwN,aAAa/B,cAAcN,IAKpCgJ,EAActS,UAAU2S,OAAS,SAAU/L,EAAUwxB,QAC1B,IAAnBA,IAA6BA,GAAiB,GAClD,IAAIjR,EAAU1a,KAAKC,MAAM9F,EAAWzI,KAAKgR,YAAY7I,WACjDiQ,EAAQpY,KAAK+oB,SAASC,GAC1B,IAAK5Q,EAAO,CACR,GAAI6hB,EACA,OAAO,KAGP7hB,EAAQpY,KAAKk6B,YAAYlR,GAGjC,OAAO5Q,EAAM5D,OAAO/L,IAExB0L,EAActS,UAAUq4B,YAAc,SAAUtyB,GAC5C,IAAIogB,EAAW,IAAIgR,EAAgB1a,cAAc1W,EAAa5H,KAAKgR,aAGnE,OAFAhR,KAAKwT,aAAa7I,SAASqd,GAC3BhoB,KAAK+nB,gBAAgBC,GACdA,GAMX7T,EAActS,UAAU6T,aAAe,WACnC1V,KAAK+mB,qBAAoB,SAAU3O,GAAS,OAAOA,EAAMtO,cACzD9J,KAAKwY,oBAETzY,EAAW,CACPuB,EAAUwC,UAAU,gBACpB9C,EAAW,cAAegM,EAAeyB,eAC1C0F,EAActS,UAAW,oBAAgB,GAC5C9B,EAAW,CACPuB,EAAUwC,UAAU,aACpB9C,EAAW,cAAekO,EAAYgH,YACvC/B,EAActS,UAAW,iBAAa,GACzC9B,EAAW,CACPuB,EAAUwC,UAAU,WACpB9C,EAAW,cAAeiO,EAAUgH,UACrC9B,EAActS,UAAW,eAAW,GACvC9B,EAAW,CACPuX,EAAQ,EAAGhW,EAAU8X,UAAU,kBAC/BpY,EAAW,cAAeqV,UAC1BrV,EAAW,oBAAqB,CAAC0W,EAAS2B,gBAC1CrY,EAAW,yBAAqB,IACjCmT,EAActS,UAAW,WAAY,MACxC9B,EAAW,CACPuB,EAAU8U,cACVpV,EAAW,cAAeqV,UAC1BrV,EAAW,oBAAqB,IAChCA,EAAW,yBAAqB,IACjCmT,EAActS,UAAW,OAAQ,MAC7BsS,EAnIuB,CAoIhCpF,EAAesF,cACjBjT,EAAQ+S,cAAgBA,G;;;;;;GCvKxB,IAAIpU,EAAcC,MAAQA,KAAKD,YAAe,SAAUE,EAAYC,EAAQC,EAAKC,GAC7E,IAA2HC,EAAvHC,EAAIC,UAAUC,OAAQC,EAAIH,EAAI,EAAIJ,EAAkB,OAATE,EAAgBA,EAAOM,OAAOC,yBAAyBT,EAAQC,GAAOC,EACrH,GAAuB,kBAAZQ,SAAoD,oBAArBA,QAAQC,SAAyBJ,EAAIG,QAAQC,SAASZ,EAAYC,EAAQC,EAAKC,QACpH,IAAK,IAAIU,EAAIb,EAAWO,OAAS,EAAGM,GAAK,EAAGA,KAAST,EAAIJ,EAAWa,MAAIL,GAAKH,EAAI,EAAID,EAAEI,GAAKH,EAAI,EAAID,EAAEH,EAAQC,EAAKM,GAAKJ,EAAEH,EAAQC,KAASM,GAChJ,OAAOH,EAAI,GAAKG,GAAKC,OAAOK,eAAeb,EAAQC,EAAKM,GAAIA,GAE5DO,EAAchB,MAAQA,KAAKgB,YAAe,SAAUC,EAAGC,GACvD,GAAuB,kBAAZN,SAAoD,oBAArBA,QAAQO,SAAyB,OAAOP,QAAQO,SAASF,EAAGC,IAE1GR,OAAOK,eAAeK,EAAS,aAAc,CAAEC,OAAO,IACtD,IAAIC,EAAY,EAAQ,QACpBkG,EAAY,EAAQ,QACpBjG,EAAuB,EAAQ,QAC/BoN,EAAwB,EAAQ,QAChC3B,EAAiB,EAAQ,QACzBtL,EAAqB,EAAQ,QAC7BC,EAAU,EAAQ,QAClBw4B,EAA8B,WAC9B,SAASA,KAoJT,OAlJAA,EAAat4B,UAAUC,QAAU,SAAUC,GACvC,IAAIuC,EAAWvC,EAAOyB,QAGlBkD,EAAS,GAETgpB,EAAa,CAAEruB,MAAO,GACtB+4B,EAAgBp6B,KAAK6C,iBAAiBw3B,cAGtCC,EAAeF,GAAiB91B,EAAS2vB,UACzCsG,EAAUD,EAAe,CAACh2B,GAAYA,EAASsd,kBACnD5hB,KAAKw6B,8BAA8BD,EAAS7zB,EAAQgpB,EAAY0K,EAAe,GAE/E,IAAIK,GAA2BH,GAAgBt6B,KAAKwC,mBAAmBk4B,4BAKvE,OAJID,IACAz6B,KAAK26B,uBAAuBr2B,GAC5BtE,KAAK46B,0BAA0Bt2B,EAAS6rB,QAASzpB,EAAQgpB,EAAY,IAElEhpB,GAEXyzB,EAAat4B,UAAU24B,8BAAgC,SAAUK,EAAen0B,EAAQgpB,EAAY0K,EAAe5b,GAC/G,IAAI7c,EAAQS,EAAEY,eAAe63B,GAQ7B,IALA,IAAIC,EAAmB96B,KAAKwC,mBAAmBu4B,qBAC3CC,EAAkBh7B,KAAKwC,mBAAmBiqB,yBAE1CwO,EAA4Bj7B,KAAKwC,mBAAmB04B,8BACpDC,GAAmCF,GAA6Bj7B,KAAKwC,mBAAmB44B,oCACnFt6B,EAAI,EAAGA,EAAI+5B,EAAcr6B,OAAQM,IAAK,CAC3C,IAAI0C,EAAUq3B,EAAc/5B,GAExBu6B,EAAW73B,EAAQ0T,cACnBokB,EAAwBR,GAAoBO,EAC5CE,EAAoBnB,IAAkBiB,EACtCG,EAA+BP,GAA6BI,GAAkD,IAAtC73B,EAAQ2B,mBAAmB3E,OACnGi7B,EAAqCN,GAAmCE,GAAY73B,EAAQywB,WAAmD,IAAtCzwB,EAAQ2B,mBAAmB3E,OAIpIk7B,EAAqBtB,GAAiB52B,EAAQywB,UAC9C0H,EAAqBX,GAAmBx3B,EAAQgF,WAAckzB,EAC9DE,GAA2BL,IAAsBD,IAA0BK,IAAuBH,IAAiCC,EAKvI,GAJIG,GACA57B,KAAK46B,0BAA0Bp3B,EAASkD,EAAQgpB,EAAYlR,IAG5D4b,IAAiB52B,EAAQywB,UAG7B,GAAIoH,EAAU,CACV,IAAIQ,EAAiBL,GAAgCC,EAGrD,GAAIj4B,EAAQgF,UAAYqzB,EAAgB,CAEpC,IAAIC,EAAqBD,EAAiBrd,EAAUA,EAAU,EAC9Dxe,KAAKw6B,8BAA8Bh3B,EAAQoe,kBAAmBlb,EAAQgpB,EAAY0K,EAAe0B,GAE7F97B,KAAKwC,mBAAmBu5B,yBACxB/7B,KAAK26B,uBAAuBn3B,GAC5BxD,KAAK46B,0BAA0Bp3B,EAAQ2sB,QAASzpB,EAAQgpB,EAAYlR,UAI3E,GAAIhb,EAAQuhB,QAAUvhB,EAAQgF,SAAU,CACzC,IAAI4nB,EAAapwB,KAAKg8B,iBAAiBx4B,GACvCxD,KAAK46B,0BAA0BxK,EAAY1pB,EAAQgpB,EAAYlR,MAK3E2b,EAAat4B,UAAU+4B,0BAA4B,SAAUp3B,EAASkD,EAAQgpB,EAAYlR,GACtF9X,EAAOL,KAAK7C,GACZ,IAAIy4B,EAAyBj8B,KAAKwC,mBAAmBy5B,yBACrDz4B,EAAQ04B,WAAWD,EAAyB,EAAIzd,IAEpD2b,EAAat4B,UAAU84B,uBAAyB,SAAUwB,GAGtD,IAAIx6B,EAAQS,EAAEC,OAAO85B,EAAUhM,SAA/B,CAGA,IAAIiM,EAAa,IAAI50B,EAAUiD,QAC/BzK,KAAK0K,QAAQC,SAASyxB,GACtB17B,OAAOioB,KAAKwT,GAAW54B,SAAQ,SAAUpD,GACrCi8B,EAAWj8B,GAAOg8B,EAAUh8B,MAEhCi8B,EAAWC,QAAS,EACpBD,EAAW9sB,OAAS,KACpB8sB,EAAWE,UAAY,KACnB36B,EAAQS,EAAEC,OAAO+5B,EAAW34B,MAC5B24B,EAAW34B,GAAK,kBAAoB24B,EAAW34B,IAKnD24B,EAAWjM,QAAUgM,EACrBA,EAAUhM,QAAUiM,IAExBjC,EAAat4B,UAAUm6B,iBAAmB,SAAUO,GAChD,GAAI56B,EAAQS,EAAEC,OAAOk6B,EAAWnM,YAC5B,OAAOmM,EAAWnM,WAGlB,IAAIA,EAAa,IAAI5oB,EAAUiD,QAc/B,OAbAzK,KAAK0K,QAAQC,SAASylB,GACtBA,EAAWoM,QAAS,EACpBpM,EAAWqM,YAAa,EAExBrM,EAAWsM,OAAStM,EAAWoM,OAC/BpM,EAAWxqB,OAAS22B,EAChB56B,EAAQS,EAAEC,OAAOk6B,EAAW94B,MAC5B2sB,EAAW3sB,GAAK,UAAY84B,EAAW94B,IAE3C2sB,EAAWtkB,KAAOywB,EAAWzwB,KAC7BskB,EAAW3O,MAAQ8a,EAAW9a,MAAQ,EACtC8a,EAAWnM,WAAaA,EACxBmM,EAAWI,YAAcJ,EAAWnM,WAC7BA,GAGfrwB,EAAW,CACPuB,EAAUwC,UAAU,sBACpB9C,EAAW,cAAeO,EAAqBwC,qBAChDo2B,EAAat4B,UAAW,0BAAsB,GACjD9B,EAAW,CACPuB,EAAUwC,UAAU,uBACpB9C,EAAW,cAAe2N,EAAsBqH,sBACjDmkB,EAAat4B,UAAW,2BAAuB,GAClD9B,EAAW,CACPuB,EAAUwC,UAAU,gBACpB9C,EAAW,cAAegM,EAAeyB,eAC1C0rB,EAAat4B,UAAW,oBAAgB,GAC3C9B,EAAW,CACPuB,EAAUwC,UAAU,WACpB9C,EAAW,cAAeM,EAAUk1B,UACrC2D,EAAat4B,UAAW,eAAW,GACtC9B,EAAW,CACPuB,EAAUwC,UAAU,oBACpB9C,EAAW,cAAeU,EAAmBwC,mBAC9Ci2B,EAAat4B,UAAW,wBAAoB,GAC/Cs4B,EAAep6B,EAAW,CACtBuB,EAAU6C,KAAK,iBAChBg2B,GACIA,EArJsB,GAuJjC/4B,EAAQ+4B,aAAeA","file":"js/chunk-vendors~d2445915.39a0c31f.js","sourcesContent":["/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.2\n * @link http://www.ag-grid.com/\n * @license MIT\n */\n\"use strict\";\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar context_1 = require(\"../../context/context\");\nvar gridOptionsWrapper_1 = require(\"../../gridOptionsWrapper\");\nvar sortService_1 = require(\"../../rowNodes/sortService\");\nvar sortController_1 = require(\"../../sortController\");\nvar columnController_1 = require(\"../../columnController/columnController\");\nvar utils_1 = require(\"../../utils\");\nvar SortStage = /** @class */ (function () {\n function SortStage() {\n }\n SortStage.prototype.execute = function (params) {\n var sortOptions = this.sortController.getSortForRowController();\n var sortActive = utils_1._.exists(sortOptions) && sortOptions.length > 0;\n var deltaSort = sortActive\n && utils_1._.exists(params.rowNodeTransactions)\n // in time we can remove this check, so that delta sort is always\n // on if transactions are present. it's off for now so that we can\n // selectively turn it on and test it with some select users before\n // rolling out to everyone.\n && this.gridOptionsWrapper.isDeltaSort();\n // we only need dirty nodes if doing delta sort\n var dirtyLeafNodes = deltaSort ? this.calculateDirtyNodes(params.rowNodeTransactions) : null;\n var valueColumns = this.columnController.getValueColumns();\n var noAggregations = utils_1._.missingOrEmpty(valueColumns);\n this.sortService.sort(sortOptions, sortActive, deltaSort, dirtyLeafNodes, params.changedPath, noAggregations);\n };\n SortStage.prototype.calculateDirtyNodes = function (rowNodeTransactions) {\n var dirtyNodes = {};\n var addNodesFunc = function (rowNodes) {\n if (rowNodes) {\n rowNodes.forEach(function (rowNode) { return dirtyNodes[rowNode.id] = true; });\n }\n };\n // all leaf level nodes in the transaction were impacted\n rowNodeTransactions.forEach(function (tran) {\n addNodesFunc(tran.add);\n addNodesFunc(tran.update);\n addNodesFunc(tran.remove);\n });\n return dirtyNodes;\n };\n __decorate([\n context_1.Autowired('gridOptionsWrapper'),\n __metadata(\"design:type\", gridOptionsWrapper_1.GridOptionsWrapper)\n ], SortStage.prototype, \"gridOptionsWrapper\", void 0);\n __decorate([\n context_1.Autowired('sortService'),\n __metadata(\"design:type\", sortService_1.SortService)\n ], SortStage.prototype, \"sortService\", void 0);\n __decorate([\n context_1.Autowired('sortController'),\n __metadata(\"design:type\", sortController_1.SortController)\n ], SortStage.prototype, \"sortController\", void 0);\n __decorate([\n context_1.Autowired('columnController'),\n __metadata(\"design:type\", columnController_1.ColumnController)\n ], SortStage.prototype, \"columnController\", void 0);\n SortStage = __decorate([\n context_1.Bean('sortStage')\n ], SortStage);\n return SortStage;\n}());\nexports.SortStage = SortStage;\n","/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.2\n * @link http://www.ag-grid.com/\n * @license MIT\n */\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n// when doing transactions, or change detection, and grouping is present\n// in the data, there is no need for the ClientSideRowModel to update each\n// group after an update, ony parts that were impacted by the change.\n// this class keeps track of all groups that were impacted by a transaction.\n// the the different CSRM operations (filter, sort etc) use the forEach method\n// to visit each group that was changed.\nvar ChangedPath = /** @class */ (function () {\n function ChangedPath(keepingColumns, rootNode) {\n // whether changed path is active of not. it is active when a) doing\n // a transaction update or b) doing change detection. if we are doing\n // a CSRM refresh for other reasons (after sort or filter, or user calling\n // setRowData() without delta mode) then we are not active. we are also\n // marked as not active if secondary columns change in pivot (as this impacts\n // aggregations)\n this.active = true;\n // for each node in the change path, we also store which columns need\n // to be re-aggregated.\n this.nodeIdsToColumns = {};\n // for quick lookup, all items in the change path are mapped by nodeId\n this.mapToItems = {};\n this.keepingColumns = keepingColumns;\n this.pathRoot = {\n rowNode: rootNode,\n children: null\n };\n this.mapToItems[rootNode.id] = this.pathRoot;\n }\n // can be set inactive by:\n // a) ClientSideRowModel, if no transactions or\n // b) PivotService, if secondary columns changed\n ChangedPath.prototype.setInactive = function () {\n this.active = false;\n };\n ChangedPath.prototype.isActive = function () {\n return this.active;\n };\n ChangedPath.prototype.depthFirstSearchChangedPath = function (pathItem, callback) {\n if (pathItem.children) {\n for (var i = 0; i < pathItem.children.length; i++) {\n this.depthFirstSearchChangedPath(pathItem.children[i], callback);\n }\n }\n callback(pathItem.rowNode);\n };\n ChangedPath.prototype.depthFirstSearchEverything = function (rowNode, callback, traverseEverything) {\n if (rowNode.childrenAfterGroup) {\n for (var i = 0; i < rowNode.childrenAfterGroup.length; i++) {\n var childNode = rowNode.childrenAfterGroup[i];\n if (childNode.childrenAfterGroup) {\n this.depthFirstSearchEverything(rowNode.childrenAfterGroup[i], callback, traverseEverything);\n }\n else if (traverseEverything) {\n callback(childNode);\n }\n }\n }\n callback(rowNode);\n };\n // traverseLeafNodes -> used when NOT doing changed path, ie traversing everything. the callback\n // will be called for child nodes in addition to parent nodes.\n ChangedPath.prototype.forEachChangedNodeDepthFirst = function (callback, traverseLeafNodes) {\n if (traverseLeafNodes === void 0) { traverseLeafNodes = false; }\n if (this.active) {\n // if we are active, then use the change path to callback\n // only for updated groups\n this.depthFirstSearchChangedPath(this.pathRoot, callback);\n }\n else {\n // we are not active, so callback for everything, walk the entire path\n this.depthFirstSearchEverything(this.pathRoot.rowNode, callback, traverseLeafNodes);\n }\n };\n ChangedPath.prototype.executeFromRootNode = function (callback) {\n callback(this.pathRoot.rowNode);\n };\n ChangedPath.prototype.createPathItems = function (rowNode) {\n var pointer = rowNode;\n var newEntryCount = 0;\n while (!this.mapToItems[pointer.id]) {\n var newEntry = {\n rowNode: pointer,\n children: null\n };\n this.mapToItems[pointer.id] = newEntry;\n newEntryCount++;\n pointer = pointer.parent;\n }\n return newEntryCount;\n };\n ChangedPath.prototype.populateColumnsMap = function (rowNode, columns) {\n var _this = this;\n if (!this.keepingColumns || !columns) {\n return;\n }\n var pointer = rowNode;\n while (pointer) {\n // if columns, add the columns in all the way to parent, merging\n // in any other columns that might be there already\n if (!this.nodeIdsToColumns[pointer.id]) {\n this.nodeIdsToColumns[pointer.id] = {};\n }\n columns.forEach(function (col) { return _this.nodeIdsToColumns[pointer.id][col.getId()] = true; });\n pointer = pointer.parent;\n }\n };\n ChangedPath.prototype.linkPathItems = function (rowNode, newEntryCount) {\n var pointer = rowNode;\n for (var i = 0; i < newEntryCount; i++) {\n var thisItem = this.mapToItems[pointer.id];\n var parentItem = this.mapToItems[pointer.parent.id];\n if (!parentItem.children) {\n parentItem.children = [];\n }\n parentItem.children.push(thisItem);\n pointer = pointer.parent;\n }\n };\n // called by\n // 1) change detection (provides cols) and\n // 2) groupStage if doing transaction update (doesn't provide cols)\n ChangedPath.prototype.addParentNode = function (rowNode, columns) {\n // we cannot do both steps below in the same loop as\n // the second loop has a dependency on the first loop.\n // ie the hierarchy cannot be stitched up yet because\n // we don't have it built yet\n // create the new PathItem objects.\n var newEntryCount = this.createPathItems(rowNode);\n // link in the node items\n this.linkPathItems(rowNode, newEntryCount);\n // update columns\n this.populateColumnsMap(rowNode, columns);\n };\n ChangedPath.prototype.canSkip = function (rowNode) {\n return this.active && !this.mapToItems[rowNode.id];\n };\n ChangedPath.prototype.getValueColumnsForNode = function (rowNode, valueColumns) {\n if (!this.keepingColumns) {\n return valueColumns;\n }\n var colsForThisNode = this.nodeIdsToColumns[rowNode.id];\n var result = valueColumns.filter(function (col) { return colsForThisNode[col.getId()]; });\n return result;\n };\n ChangedPath.prototype.getNotValueColumnsForNode = function (rowNode, valueColumns) {\n if (!this.keepingColumns) {\n return null;\n }\n var colsForThisNode = this.nodeIdsToColumns[rowNode.id];\n var result = valueColumns.filter(function (col) { return !colsForThisNode[col.getId()]; });\n return result;\n };\n return ChangedPath;\n}());\nexports.ChangedPath = ChangedPath;\n","/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.2\n * @link http://www.ag-grid.com/\n * @license MIT\n */\n\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar utils_1 = require(\"../../utils\");\nvar rowNode_1 = require(\"../../entities/rowNode\");\nvar beanStub_1 = require(\"../../context/beanStub\");\nvar RowNodeBlock = /** @class */ (function (_super) {\n __extends(RowNodeBlock, _super);\n function RowNodeBlock(blockNumber, rowNodeCacheParams) {\n var _this = _super.call(this) || this;\n _this.version = 0;\n _this.state = RowNodeBlock.STATE_DIRTY;\n _this.rowNodeCacheParams = rowNodeCacheParams;\n _this.blockNumber = blockNumber;\n // we don't need to calculate these now, as the inputs don't change,\n // however it makes the code easier to read if we work them out up front\n _this.startRow = blockNumber * rowNodeCacheParams.blockSize;\n _this.endRow = _this.startRow + rowNodeCacheParams.blockSize;\n return _this;\n }\n RowNodeBlock.prototype.isAnyNodeOpen = function (rowCount) {\n var result = false;\n this.forEachNodeCallback(function (rowNode) {\n if (rowNode.expanded) {\n result = true;\n }\n }, rowCount);\n return result;\n };\n RowNodeBlock.prototype.forEachNodeCallback = function (callback, rowCount) {\n for (var rowIndex = this.startRow; rowIndex < this.endRow; rowIndex++) {\n // we check against rowCount as this page may be the last one, and if it is, then\n // the last rows are not part of the set\n if (rowIndex < rowCount) {\n var rowNode = this.getRowUsingLocalIndex(rowIndex);\n callback(rowNode, rowIndex);\n }\n }\n };\n RowNodeBlock.prototype.forEachNode = function (callback, sequence, rowCount, deep) {\n this.forEachNodeCallback(function (rowNode) {\n callback(rowNode, sequence.next());\n // this will only every happen for server side row model, as infinite\n // row model doesn't have groups\n if (deep && rowNode.childrenCache) {\n rowNode.childrenCache.forEachNodeDeep(callback, sequence);\n }\n }, rowCount);\n };\n RowNodeBlock.prototype.forEachNodeDeep = function (callback, sequence, rowCount) {\n this.forEachNode(callback, sequence, rowCount, true);\n };\n RowNodeBlock.prototype.forEachNodeShallow = function (callback, sequence, rowCount) {\n this.forEachNode(callback, sequence, rowCount, false);\n };\n RowNodeBlock.prototype.getVersion = function () {\n return this.version;\n };\n RowNodeBlock.prototype.getLastAccessed = function () {\n return this.lastAccessed;\n };\n RowNodeBlock.prototype.getRowUsingLocalIndex = function (rowIndex, dontTouchLastAccessed) {\n if (dontTouchLastAccessed === void 0) { dontTouchLastAccessed = false; }\n if (!dontTouchLastAccessed) {\n this.lastAccessed = this.rowNodeCacheParams.lastAccessedSequence.next();\n }\n var localIndex = rowIndex - this.startRow;\n return this.rowNodes[localIndex];\n };\n RowNodeBlock.prototype.init = function (beans) {\n this.beans = beans;\n this.createRowNodes();\n };\n RowNodeBlock.prototype.getStartRow = function () {\n return this.startRow;\n };\n RowNodeBlock.prototype.getEndRow = function () {\n return this.endRow;\n };\n RowNodeBlock.prototype.getBlockNumber = function () {\n return this.blockNumber;\n };\n RowNodeBlock.prototype.setDirty = function () {\n // in case any current loads in progress, this will have their results ignored\n this.version++;\n this.state = RowNodeBlock.STATE_DIRTY;\n };\n RowNodeBlock.prototype.setDirtyAndPurge = function () {\n this.setDirty();\n this.rowNodes.forEach(function (rowNode) {\n rowNode.setData(null);\n });\n };\n RowNodeBlock.prototype.getState = function () {\n return this.state;\n };\n RowNodeBlock.prototype.setRowNode = function (rowIndex, rowNode) {\n var localIndex = rowIndex - this.startRow;\n this.rowNodes[localIndex] = rowNode;\n };\n RowNodeBlock.prototype.setBlankRowNode = function (rowIndex) {\n var localIndex = rowIndex - this.startRow;\n var newRowNode = this.createBlankRowNode(rowIndex);\n this.rowNodes[localIndex] = newRowNode;\n return newRowNode;\n };\n RowNodeBlock.prototype.setNewData = function (rowIndex, dataItem) {\n var newRowNode = this.setBlankRowNode(rowIndex);\n this.setDataAndId(newRowNode, dataItem, this.startRow + rowIndex);\n return newRowNode;\n };\n RowNodeBlock.prototype.createBlankRowNode = function (rowIndex) {\n var rowNode = new rowNode_1.RowNode();\n this.beans.context.wireBean(rowNode);\n rowNode.setRowHeight(this.rowNodeCacheParams.rowHeight);\n return rowNode;\n };\n // creates empty row nodes, data is missing as not loaded yet\n RowNodeBlock.prototype.createRowNodes = function () {\n this.rowNodes = [];\n for (var i = 0; i < this.rowNodeCacheParams.blockSize; i++) {\n var rowIndex = this.startRow + i;\n var rowNode = this.createBlankRowNode(rowIndex);\n this.rowNodes.push(rowNode);\n }\n };\n RowNodeBlock.prototype.load = function () {\n this.state = RowNodeBlock.STATE_LOADING;\n this.loadFromDatasource();\n };\n RowNodeBlock.prototype.pageLoadFailed = function () {\n this.state = RowNodeBlock.STATE_FAILED;\n var event = {\n type: RowNodeBlock.EVENT_LOAD_COMPLETE,\n success: false,\n page: this,\n lastRow: null\n };\n this.dispatchEvent(event);\n };\n RowNodeBlock.prototype.populateWithRowData = function (rows) {\n var _this = this;\n var rowNodesToRefresh = [];\n this.rowNodes.forEach(function (rowNode, index) {\n var data = rows[index];\n if (rowNode.stub) {\n rowNodesToRefresh.push(rowNode);\n }\n _this.setDataAndId(rowNode, data, _this.startRow + index);\n });\n if (rowNodesToRefresh.length > 0) {\n this.beans.rowRenderer.redrawRows(rowNodesToRefresh);\n }\n };\n RowNodeBlock.prototype.destroy = function () {\n _super.prototype.destroy.call(this);\n this.rowNodes.forEach(function (rowNode) {\n if (rowNode.childrenCache) {\n rowNode.childrenCache.destroy();\n rowNode.childrenCache = null;\n }\n // this is needed, so row render knows to fade out the row, otherwise it\n // sees row top is present, and thinks the row should be shown. maybe\n // rowNode should have a flag on whether it is visible???\n rowNode.clearRowTop();\n });\n };\n RowNodeBlock.prototype.pageLoaded = function (version, rows, lastRow) {\n // we need to check the version, in case there was an old request\n // from the server that was sent before we refreshed the cache,\n // if the load was done as a result of a cache refresh\n if (version === this.version) {\n this.state = RowNodeBlock.STATE_LOADED;\n this.populateWithRowData(rows);\n }\n lastRow = utils_1._.cleanNumber(lastRow);\n // check here if lastRow should be set\n var event = {\n type: RowNodeBlock.EVENT_LOAD_COMPLETE,\n success: true,\n page: this,\n lastRow: lastRow\n };\n this.dispatchEvent(event);\n };\n RowNodeBlock.EVENT_LOAD_COMPLETE = 'loadComplete';\n RowNodeBlock.STATE_DIRTY = 'dirty';\n RowNodeBlock.STATE_LOADING = 'loading';\n RowNodeBlock.STATE_LOADED = 'loaded';\n RowNodeBlock.STATE_FAILED = 'failed';\n return RowNodeBlock;\n}(beanStub_1.BeanStub));\nexports.RowNodeBlock = RowNodeBlock;\n","/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.2\n * @link http://www.ag-grid.com/\n * @license MIT\n */\n\"use strict\";\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar context_1 = require(\"../../context/context\");\nvar gridOptionsWrapper_1 = require(\"../../gridOptionsWrapper\");\nvar filterService_1 = require(\"../../rowNodes/filterService\");\nvar selectableService_1 = require(\"../../rowNodes/selectableService\");\nvar FilterStage = /** @class */ (function () {\n function FilterStage() {\n }\n FilterStage.prototype.execute = function (params) {\n var rowNode = params.rowNode, changedPath = params.changedPath;\n this.filterService.filter(changedPath);\n this.selectableService.updateSelectableAfterFiltering(rowNode);\n };\n __decorate([\n context_1.Autowired('gridOptionsWrapper'),\n __metadata(\"design:type\", gridOptionsWrapper_1.GridOptionsWrapper)\n ], FilterStage.prototype, \"gridOptionsWrapper\", void 0);\n __decorate([\n context_1.Autowired('selectableService'),\n __metadata(\"design:type\", selectableService_1.SelectableService)\n ], FilterStage.prototype, \"selectableService\", void 0);\n __decorate([\n context_1.Autowired('filterService'),\n __metadata(\"design:type\", filterService_1.FilterService)\n ], FilterStage.prototype, \"filterService\", void 0);\n FilterStage = __decorate([\n context_1.Bean('filterStage')\n ], FilterStage);\n return FilterStage;\n}());\nexports.FilterStage = FilterStage;\n","/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.2\n * @link http://www.ag-grid.com/\n * @license MIT\n */\n\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar beanStub_1 = require(\"../context/beanStub\");\nvar eventService_1 = require(\"../eventService\");\nvar events_1 = require(\"../events\");\nvar context_1 = require(\"../context/context\");\nvar gridOptionsWrapper_1 = require(\"../gridOptionsWrapper\");\nvar scrollVisibleService_1 = require(\"../gridPanel/scrollVisibleService\");\nvar PaginationAutoPageSizeService = /** @class */ (function (_super) {\n __extends(PaginationAutoPageSizeService, _super);\n function PaginationAutoPageSizeService() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n PaginationAutoPageSizeService.prototype.registerGridComp = function (gridPanel) {\n this.gridPanel = gridPanel;\n this.addDestroyableEventListener(this.eventService, events_1.Events.EVENT_BODY_HEIGHT_CHANGED, this.onBodyHeightChanged.bind(this));\n this.addDestroyableEventListener(this.eventService, events_1.Events.EVENT_SCROLL_VISIBILITY_CHANGED, this.onScrollVisibilityChanged.bind(this));\n this.checkPageSize();\n };\n PaginationAutoPageSizeService.prototype.notActive = function () {\n return !this.gridOptionsWrapper.isPaginationAutoPageSize();\n };\n PaginationAutoPageSizeService.prototype.onScrollVisibilityChanged = function () {\n this.checkPageSize();\n };\n PaginationAutoPageSizeService.prototype.onBodyHeightChanged = function () {\n this.checkPageSize();\n };\n PaginationAutoPageSizeService.prototype.checkPageSize = function () {\n if (this.notActive()) {\n return;\n }\n var rowHeight = this.gridOptionsWrapper.getRowHeightAsNumber();\n var bodyHeight = this.gridPanel.getBodyHeight();\n if (bodyHeight > 0) {\n var newPageSize = Math.floor(bodyHeight / rowHeight);\n this.gridOptionsWrapper.setProperty('paginationPageSize', newPageSize);\n }\n };\n __decorate([\n context_1.Autowired('eventService'),\n __metadata(\"design:type\", eventService_1.EventService)\n ], PaginationAutoPageSizeService.prototype, \"eventService\", void 0);\n __decorate([\n context_1.Autowired('gridOptionsWrapper'),\n __metadata(\"design:type\", gridOptionsWrapper_1.GridOptionsWrapper)\n ], PaginationAutoPageSizeService.prototype, \"gridOptionsWrapper\", void 0);\n __decorate([\n context_1.Autowired('scrollVisibleService'),\n __metadata(\"design:type\", scrollVisibleService_1.ScrollVisibleService)\n ], PaginationAutoPageSizeService.prototype, \"scrollVisibleService\", void 0);\n PaginationAutoPageSizeService = __decorate([\n context_1.Bean('paginationAutoPageSizeService')\n ], PaginationAutoPageSizeService);\n return PaginationAutoPageSizeService;\n}(beanStub_1.BeanStub));\nexports.PaginationAutoPageSizeService = PaginationAutoPageSizeService;\n","/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.2\n * @link http://www.ag-grid.com/\n * @license MIT\n */\n\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar gridOptionsWrapper_1 = require(\"../../gridOptionsWrapper\");\nvar context_1 = require(\"../../context/context\");\nvar eventService_1 = require(\"../../eventService\");\nvar selectionController_1 = require(\"../../selectionController\");\nvar events_1 = require(\"../../events\");\nvar sortController_1 = require(\"../../sortController\");\nvar filterManager_1 = require(\"../../filter/filterManager\");\nvar constants_1 = require(\"../../constants\");\nvar infiniteCache_1 = require(\"./infiniteCache\");\nvar beanStub_1 = require(\"../../context/beanStub\");\nvar rowNodeCache_1 = require(\"../cache/rowNodeCache\");\nvar rowNodeBlockLoader_1 = require(\"../cache/rowNodeBlockLoader\");\nvar gridApi_1 = require(\"../../gridApi\");\nvar columnApi_1 = require(\"../../columnController/columnApi\");\nvar utils_1 = require(\"../../utils\");\nvar rowRenderer_1 = require(\"../../rendering/rowRenderer\");\nvar InfiniteRowModel = /** @class */ (function (_super) {\n __extends(InfiniteRowModel, _super);\n function InfiniteRowModel() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n InfiniteRowModel.prototype.getRowBounds = function (index) {\n return {\n rowHeight: this.rowHeight,\n rowTop: this.rowHeight * index\n };\n };\n // we don't implement as lazy row heights is not supported in this row model\n InfiniteRowModel.prototype.ensureRowHeightsValid = function (startPixel, endPixel, startLimitIndex, endLimitIndex) { return false; };\n InfiniteRowModel.prototype.init = function () {\n var _this = this;\n if (!this.gridOptionsWrapper.isRowModelInfinite()) {\n return;\n }\n this.rowHeight = this.gridOptionsWrapper.getRowHeightAsNumber();\n this.addEventListeners();\n this.setDatasource(this.gridOptionsWrapper.getDatasource());\n this.addDestroyFunc(function () { return _this.destroyCache(); });\n };\n InfiniteRowModel.prototype.destroyDatasource = function () {\n if (this.datasource) {\n if (this.datasource.destroy) {\n this.datasource.destroy();\n }\n this.rowRenderer.datasourceChanged();\n this.datasource = null;\n }\n };\n InfiniteRowModel.prototype.isLastRowFound = function () {\n return this.infiniteCache ? this.infiniteCache.isMaxRowFound() : false;\n };\n InfiniteRowModel.prototype.addEventListeners = function () {\n this.addDestroyableEventListener(this.eventService, events_1.Events.EVENT_FILTER_CHANGED, this.onFilterChanged.bind(this));\n this.addDestroyableEventListener(this.eventService, events_1.Events.EVENT_SORT_CHANGED, this.onSortChanged.bind(this));\n this.addDestroyableEventListener(this.eventService, events_1.Events.EVENT_COLUMN_EVERYTHING_CHANGED, this.onColumnEverything.bind(this));\n };\n InfiniteRowModel.prototype.onFilterChanged = function () {\n this.reset();\n };\n InfiniteRowModel.prototype.onSortChanged = function () {\n this.reset();\n };\n InfiniteRowModel.prototype.onColumnEverything = function () {\n var resetRequired;\n // if cache params, we require reset only if sort model has changed. we don't need to check\n // for filter model, as the filter manager will fire an event when columns change that result\n // in the filter changing.\n if (this.cacheParams) {\n resetRequired = this.isSortModelDifferent();\n }\n else {\n // if no cacheParams, means first time creating the cache, so always create one\n resetRequired = true;\n }\n if (resetRequired) {\n this.reset();\n }\n };\n InfiniteRowModel.prototype.isSortModelDifferent = function () {\n return !utils_1._.jsonEquals(this.cacheParams.sortModel, this.sortController.getSortModel());\n };\n InfiniteRowModel.prototype.getType = function () {\n return constants_1.Constants.ROW_MODEL_TYPE_INFINITE;\n };\n InfiniteRowModel.prototype.setDatasource = function (datasource) {\n this.destroyDatasource();\n this.datasource = datasource;\n // only reset if we have a valid datasource to working with\n if (datasource) {\n this.checkForDeprecated();\n this.reset();\n }\n };\n InfiniteRowModel.prototype.checkForDeprecated = function () {\n var ds = this.datasource;\n // the number of concurrent loads we are allowed to the server\n if (utils_1._.exists(ds.maxConcurrentRequests)) {\n console.error('ag-Grid: since version 5.1.x, maxConcurrentRequests is replaced with grid property maxConcurrentDatasourceRequests');\n }\n if (utils_1._.exists(ds.maxPagesInCache)) {\n console.error('ag-Grid: since version 5.1.x, maxPagesInCache is replaced with grid property maxPagesInPaginationCache');\n }\n if (utils_1._.exists(ds.overflowSize)) {\n console.error('ag-Grid: since version 5.1.x, overflowSize is replaced with grid property paginationOverflowSize');\n }\n if (utils_1._.exists(ds.blockSize)) {\n console.error('ag-Grid: since version 5.1.x, pageSize/blockSize is replaced with grid property infinitePageSize');\n }\n };\n InfiniteRowModel.prototype.isEmpty = function () {\n return utils_1._.missing(this.infiniteCache);\n };\n InfiniteRowModel.prototype.isRowsToRender = function () {\n return utils_1._.exists(this.infiniteCache);\n };\n InfiniteRowModel.prototype.getNodesInRangeForSelection = function (firstInRange, lastInRange) {\n return this.infiniteCache ? this.infiniteCache.getRowNodesInRange(firstInRange, lastInRange) : [];\n };\n InfiniteRowModel.prototype.reset = function () {\n // important to return here, as the user could be setting filter or sort before\n // data-source is set\n if (utils_1._.missing(this.datasource)) {\n return;\n }\n // if user is providing id's, then this means we can keep the selection between datasource hits,\n // as the rows will keep their unique id's even if, for example, server side sorting or filtering\n // is done.\n var userGeneratingIds = utils_1._.exists(this.gridOptionsWrapper.getRowNodeIdFunc());\n if (!userGeneratingIds) {\n this.selectionController.reset();\n }\n this.resetCache();\n var event = this.createModelUpdatedEvent();\n this.eventService.dispatchEvent(event);\n };\n InfiniteRowModel.prototype.createModelUpdatedEvent = function () {\n return {\n type: events_1.Events.EVENT_MODEL_UPDATED,\n api: this.gridApi,\n columnApi: this.columnApi,\n // not sure if these should all be false - noticed if after implementing,\n // maybe they should be true?\n newPage: false,\n newData: false,\n keepRenderedRows: false,\n animate: false\n };\n };\n InfiniteRowModel.prototype.resetCache = function () {\n // if not first time creating a cache, need to destroy the old one\n this.destroyCache();\n var maxConcurrentRequests = this.gridOptionsWrapper.getMaxConcurrentDatasourceRequests();\n var blockLoadDebounceMillis = this.gridOptionsWrapper.getBlockLoadDebounceMillis();\n // there is a bi-directional dependency between the loader and the cache,\n // so we create loader here, and then pass dependencies in setDependencies() method later\n this.rowNodeBlockLoader = new rowNodeBlockLoader_1.RowNodeBlockLoader(maxConcurrentRequests, blockLoadDebounceMillis);\n this.getContext().wireBean(this.rowNodeBlockLoader);\n this.cacheParams = {\n // the user provided datasource\n datasource: this.datasource,\n // sort and filter model\n filterModel: this.filterManager.getFilterModel(),\n sortModel: this.sortController.getSortModel(),\n rowNodeBlockLoader: this.rowNodeBlockLoader,\n // properties - this way we take a snapshot of them, so if user changes any, they will be\n // used next time we create a new cache, which is generally after a filter or sort change,\n // or a new datasource is set\n maxConcurrentRequests: maxConcurrentRequests,\n overflowSize: this.gridOptionsWrapper.getCacheOverflowSize(),\n initialRowCount: this.gridOptionsWrapper.getInfiniteInitialRowCount(),\n maxBlocksInCache: this.gridOptionsWrapper.getMaxBlocksInCache(),\n blockSize: this.gridOptionsWrapper.getCacheBlockSize(),\n rowHeight: this.gridOptionsWrapper.getRowHeightAsNumber(),\n // the cache could create this, however it is also used by the pages, so handy to create it\n // here as the settings are also passed to the pages\n lastAccessedSequence: new utils_1.NumberSequence()\n };\n // set defaults\n if (!this.cacheParams.maxConcurrentRequests || !(this.cacheParams.maxConcurrentRequests >= 1)) {\n this.cacheParams.maxConcurrentRequests = 2;\n }\n // page size needs to be 1 or greater. having it at 1 would be silly, as you would be hitting the\n // server for one page at a time. so the default if not specified is 100.\n if (!this.cacheParams.blockSize || !(this.cacheParams.blockSize >= 1)) {\n this.cacheParams.blockSize = 100;\n }\n // if user doesn't give initial rows to display, we assume zero\n if (!(this.cacheParams.initialRowCount >= 1)) {\n this.cacheParams.initialRowCount = 0;\n }\n // if user doesn't provide overflow, we use default overflow of 1, so user can scroll past\n // the current page and request first row of next page\n if (!(this.cacheParams.overflowSize >= 1)) {\n this.cacheParams.overflowSize = 1;\n }\n this.infiniteCache = new infiniteCache_1.InfiniteCache(this.cacheParams);\n this.getContext().wireBean(this.infiniteCache);\n this.infiniteCache.addEventListener(rowNodeCache_1.RowNodeCache.EVENT_CACHE_UPDATED, this.onCacheUpdated.bind(this));\n };\n InfiniteRowModel.prototype.destroyCache = function () {\n if (this.infiniteCache) {\n this.infiniteCache.destroy();\n this.infiniteCache = null;\n }\n if (this.rowNodeBlockLoader) {\n this.rowNodeBlockLoader.destroy();\n this.rowNodeBlockLoader = null;\n }\n };\n InfiniteRowModel.prototype.onCacheUpdated = function () {\n var event = this.createModelUpdatedEvent();\n this.eventService.dispatchEvent(event);\n };\n InfiniteRowModel.prototype.getRow = function (rowIndex) {\n return this.infiniteCache ? this.infiniteCache.getRow(rowIndex) : null;\n };\n InfiniteRowModel.prototype.getRowNode = function (id) {\n var result = null;\n this.forEachNode(function (rowNode) {\n if (rowNode.id === id) {\n result = rowNode;\n }\n });\n return result;\n };\n InfiniteRowModel.prototype.forEachNode = function (callback) {\n if (this.infiniteCache) {\n this.infiniteCache.forEachNodeDeep(callback, new utils_1.NumberSequence());\n }\n };\n InfiniteRowModel.prototype.getCurrentPageHeight = function () {\n return this.getRowCount() * this.rowHeight;\n };\n InfiniteRowModel.prototype.getTopLevelRowCount = function () {\n return this.getRowCount();\n };\n InfiniteRowModel.prototype.getTopLevelRowDisplayedIndex = function (topLevelIndex) {\n return topLevelIndex;\n };\n InfiniteRowModel.prototype.getRowIndexAtPixel = function (pixel) {\n if (this.rowHeight !== 0) { // avoid divide by zero error\n var rowIndexForPixel = Math.floor(pixel / this.rowHeight);\n var lastRowIndex = this.getRowCount() - 1;\n if (rowIndexForPixel > lastRowIndex) {\n return lastRowIndex;\n }\n else {\n return rowIndexForPixel;\n }\n }\n else {\n return 0;\n }\n };\n InfiniteRowModel.prototype.getRowCount = function () {\n return this.infiniteCache ? this.infiniteCache.getVirtualRowCount() : 0;\n };\n InfiniteRowModel.prototype.updateRowData = function (transaction) {\n if (utils_1._.exists(transaction.remove) || utils_1._.exists(transaction.update)) {\n console.warn('ag-Grid: updateRowData for InfiniteRowModel does not support remove or update, only add');\n return;\n }\n if (utils_1._.missing(transaction.addIndex)) {\n console.warn('ag-Grid: updateRowData for InfiniteRowModel requires add and addIndex to be set');\n return;\n }\n if (this.infiniteCache) {\n this.infiniteCache.insertItemsAtIndex(transaction.addIndex, transaction.add);\n }\n };\n InfiniteRowModel.prototype.isRowPresent = function (rowNode) {\n return false;\n };\n InfiniteRowModel.prototype.refreshCache = function () {\n if (this.infiniteCache) {\n this.infiniteCache.refreshCache();\n }\n };\n InfiniteRowModel.prototype.purgeCache = function () {\n if (this.infiniteCache) {\n this.infiniteCache.purgeCache();\n }\n };\n InfiniteRowModel.prototype.getVirtualRowCount = function () {\n if (this.infiniteCache) {\n return this.infiniteCache.getVirtualRowCount();\n }\n else {\n return null;\n }\n };\n InfiniteRowModel.prototype.isMaxRowFound = function () {\n if (this.infiniteCache) {\n return this.infiniteCache.isMaxRowFound();\n }\n };\n InfiniteRowModel.prototype.setVirtualRowCount = function (rowCount, maxRowFound) {\n if (this.infiniteCache) {\n this.infiniteCache.setVirtualRowCount(rowCount, maxRowFound);\n }\n };\n InfiniteRowModel.prototype.getBlockState = function () {\n if (this.rowNodeBlockLoader) {\n return this.rowNodeBlockLoader.getBlockState();\n }\n else {\n return null;\n }\n };\n __decorate([\n context_1.Autowired('gridOptionsWrapper'),\n __metadata(\"design:type\", gridOptionsWrapper_1.GridOptionsWrapper)\n ], InfiniteRowModel.prototype, \"gridOptionsWrapper\", void 0);\n __decorate([\n context_1.Autowired('filterManager'),\n __metadata(\"design:type\", filterManager_1.FilterManager)\n ], InfiniteRowModel.prototype, \"filterManager\", void 0);\n __decorate([\n context_1.Autowired('sortController'),\n __metadata(\"design:type\", sortController_1.SortController)\n ], InfiniteRowModel.prototype, \"sortController\", void 0);\n __decorate([\n context_1.Autowired('selectionController'),\n __metadata(\"design:type\", selectionController_1.SelectionController)\n ], InfiniteRowModel.prototype, \"selectionController\", void 0);\n __decorate([\n context_1.Autowired('eventService'),\n __metadata(\"design:type\", eventService_1.EventService)\n ], InfiniteRowModel.prototype, \"eventService\", void 0);\n __decorate([\n context_1.Autowired('gridApi'),\n __metadata(\"design:type\", gridApi_1.GridApi)\n ], InfiniteRowModel.prototype, \"gridApi\", void 0);\n __decorate([\n context_1.Autowired('columnApi'),\n __metadata(\"design:type\", columnApi_1.ColumnApi)\n ], InfiniteRowModel.prototype, \"columnApi\", void 0);\n __decorate([\n context_1.Autowired('rowRenderer'),\n __metadata(\"design:type\", rowRenderer_1.RowRenderer)\n ], InfiniteRowModel.prototype, \"rowRenderer\", void 0);\n __decorate([\n context_1.PostConstruct,\n __metadata(\"design:type\", Function),\n __metadata(\"design:paramtypes\", []),\n __metadata(\"design:returntype\", void 0)\n ], InfiniteRowModel.prototype, \"init\", null);\n __decorate([\n context_1.PreDestroy,\n __metadata(\"design:type\", Function),\n __metadata(\"design:paramtypes\", []),\n __metadata(\"design:returntype\", void 0)\n ], InfiniteRowModel.prototype, \"destroyDatasource\", null);\n InfiniteRowModel = __decorate([\n context_1.Bean('rowModel')\n ], InfiniteRowModel);\n return InfiniteRowModel;\n}(beanStub_1.BeanStub));\nexports.InfiniteRowModel = InfiniteRowModel;\n","/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.2\n * @link http://www.ag-grid.com/\n * @license MIT\n */\n\"use strict\";\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar context_1 = require(\"../context/context\");\nvar gridOptionsWrapper_1 = require(\"../gridOptionsWrapper\");\nvar utils_1 = require(\"../utils\");\nvar SelectableService = /** @class */ (function () {\n function SelectableService() {\n }\n SelectableService.prototype.init = function () {\n this.groupSelectsChildren = this.gridOptionsWrapper.isGroupSelectsChildren();\n this.isRowSelectableFunc = this.gridOptionsWrapper.getIsRowSelectableFunc();\n };\n SelectableService.prototype.updateSelectableAfterGrouping = function (rowNode) {\n if (this.isRowSelectableFunc) {\n var nextChildrenFunc = function (rowNode) { return rowNode.childrenAfterGroup; };\n this.recurseDown(rowNode.childrenAfterGroup, nextChildrenFunc);\n }\n };\n SelectableService.prototype.updateSelectableAfterFiltering = function (rowNode) {\n if (this.isRowSelectableFunc) {\n var nextChildrenFunc = function (rowNode) { return rowNode.childrenAfterFilter; };\n this.recurseDown(rowNode.childrenAfterGroup, nextChildrenFunc);\n }\n };\n SelectableService.prototype.recurseDown = function (children, nextChildrenFunc) {\n var _this = this;\n children.forEach(function (child) {\n if (!child.group) {\n return;\n } // only interested in groups\n if (child.hasChildren()) {\n _this.recurseDown(nextChildrenFunc(child), nextChildrenFunc);\n }\n var rowSelectable;\n if (_this.groupSelectsChildren) {\n // have this group selectable if at least one direct child is selectable\n var firstSelectable = utils_1._.find(nextChildrenFunc(child), 'selectable', true);\n rowSelectable = utils_1._.exists(firstSelectable);\n }\n else {\n // directly retrieve selectable value from user callback\n rowSelectable = _this.isRowSelectableFunc ? _this.isRowSelectableFunc(child) : false;\n }\n child.setRowSelectable(rowSelectable);\n });\n };\n __decorate([\n context_1.Autowired('gridOptionsWrapper'),\n __metadata(\"design:type\", gridOptionsWrapper_1.GridOptionsWrapper)\n ], SelectableService.prototype, \"gridOptionsWrapper\", void 0);\n __decorate([\n context_1.PostConstruct,\n __metadata(\"design:type\", Function),\n __metadata(\"design:paramtypes\", []),\n __metadata(\"design:returntype\", void 0)\n ], SelectableService.prototype, \"init\", null);\n SelectableService = __decorate([\n context_1.Bean('selectableService')\n ], SelectableService);\n return SelectableService;\n}());\nexports.SelectableService = SelectableService;\n","/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.2\n * @link http://www.ag-grid.com/\n * @license MIT\n */\n\"use strict\";\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar rowNodeBlock_1 = require(\"./rowNodeBlock\");\nvar logger_1 = require(\"../../logger\");\nvar context_1 = require(\"../../context/context\");\nvar utils_1 = require(\"../../utils\");\nvar RowNodeBlockLoader = /** @class */ (function () {\n function RowNodeBlockLoader(maxConcurrentRequests, blockLoadDebounceMillis) {\n this.activeBlockLoadsCount = 0;\n this.blocks = [];\n this.active = true;\n this.maxConcurrentRequests = maxConcurrentRequests;\n if (blockLoadDebounceMillis && blockLoadDebounceMillis > 0) {\n this.checkBlockToLoadDebounce = utils_1._.debounce(this.performCheckBlocksToLoad.bind(this), blockLoadDebounceMillis);\n }\n }\n RowNodeBlockLoader.prototype.setBeans = function (loggerFactory) {\n this.logger = loggerFactory.create('RowNodeBlockLoader');\n };\n RowNodeBlockLoader.prototype.addBlock = function (block) {\n this.blocks.push(block);\n };\n RowNodeBlockLoader.prototype.removeBlock = function (block) {\n utils_1._.removeFromArray(this.blocks, block);\n };\n RowNodeBlockLoader.prototype.destroy = function () {\n this.active = false;\n };\n RowNodeBlockLoader.prototype.loadComplete = function () {\n this.activeBlockLoadsCount--;\n };\n RowNodeBlockLoader.prototype.checkBlockToLoad = function () {\n if (this.checkBlockToLoadDebounce) {\n this.checkBlockToLoadDebounce();\n }\n else {\n this.performCheckBlocksToLoad();\n }\n };\n RowNodeBlockLoader.prototype.performCheckBlocksToLoad = function () {\n if (!this.active) {\n return;\n }\n this.printCacheStatus();\n if (this.activeBlockLoadsCount >= this.maxConcurrentRequests) {\n this.logger.log(\"checkBlockToLoad: max loads exceeded\");\n return;\n }\n var blockToLoad = null;\n this.blocks.forEach(function (block) {\n if (block.getState() === rowNodeBlock_1.RowNodeBlock.STATE_DIRTY) {\n blockToLoad = block;\n }\n });\n if (blockToLoad) {\n blockToLoad.load();\n this.activeBlockLoadsCount++;\n this.logger.log(\"checkBlockToLoad: loading page \" + blockToLoad.getBlockNumber());\n this.printCacheStatus();\n }\n else {\n this.logger.log(\"checkBlockToLoad: no pages to load\");\n }\n };\n RowNodeBlockLoader.prototype.getBlockState = function () {\n var result = {};\n this.blocks.forEach(function (block) {\n var nodeIdPrefix = block.getNodeIdPrefix();\n var stateItem = {\n blockNumber: block.getBlockNumber(),\n startRow: block.getStartRow(),\n endRow: block.getEndRow(),\n pageStatus: block.getState()\n };\n if (utils_1._.exists(nodeIdPrefix)) {\n result[nodeIdPrefix + block.getBlockNumber()] = stateItem;\n }\n else {\n result[block.getBlockNumber()] = stateItem;\n }\n });\n return result;\n };\n RowNodeBlockLoader.prototype.printCacheStatus = function () {\n if (this.logger.isLogging()) {\n this.logger.log(\"printCacheStatus: activePageLoadsCount = \" + this.activeBlockLoadsCount + \",\"\n + (\" blocks = \" + JSON.stringify(this.getBlockState())));\n }\n };\n RowNodeBlockLoader.prototype.isLoading = function () {\n return this.activeBlockLoadsCount > 0;\n };\n __decorate([\n __param(0, context_1.Qualifier('loggerFactory')),\n __metadata(\"design:type\", Function),\n __metadata(\"design:paramtypes\", [logger_1.LoggerFactory]),\n __metadata(\"design:returntype\", void 0)\n ], RowNodeBlockLoader.prototype, \"setBeans\", null);\n return RowNodeBlockLoader;\n}());\nexports.RowNodeBlockLoader = RowNodeBlockLoader;\n","/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.2\n * @link http://www.ag-grid.com/\n * @license MIT\n */\n\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar component_1 = require(\"../../widgets/component\");\nvar context_1 = require(\"../../context/context\");\nvar gridOptionsWrapper_1 = require(\"../../gridOptionsWrapper\");\nvar componentAnnotations_1 = require(\"../../widgets/componentAnnotations\");\nvar eventService_1 = require(\"../../eventService\");\nvar events_1 = require(\"../../events\");\nvar rowRenderer_1 = require(\"../../rendering/rowRenderer\");\nvar paginationProxy_1 = require(\"../paginationProxy\");\nvar utils_1 = require(\"../../utils\");\nvar constants_1 = require(\"../../constants\");\nvar PaginationComp = /** @class */ (function (_super) {\n __extends(PaginationComp, _super);\n function PaginationComp() {\n return _super.call(this) || this;\n }\n PaginationComp.prototype.postConstruct = function () {\n var isRtl = this.gridOptionsWrapper.isEnableRtl();\n this.setTemplate(this.getTemplate());\n this.btFirst.insertAdjacentElement('afterbegin', utils_1._.createIconNoSpan(isRtl ? 'last' : 'first', this.gridOptionsWrapper));\n this.btPrevious.insertAdjacentElement('afterbegin', utils_1._.createIconNoSpan(isRtl ? 'next' : 'previous', this.gridOptionsWrapper));\n this.btNext.insertAdjacentElement('afterbegin', utils_1._.createIconNoSpan(isRtl ? 'previous' : 'next', this.gridOptionsWrapper));\n this.btLast.insertAdjacentElement('afterbegin', utils_1._.createIconNoSpan(isRtl ? 'first' : 'last', this.gridOptionsWrapper));\n if (this.rowModel.getType() === constants_1.Constants.ROW_MODEL_TYPE_SERVER_SIDE) {\n this.serverSideRowModel = this.rowModel;\n }\n var isPaging = this.gridOptionsWrapper.isPagination();\n var paginationPanelEnabled = isPaging && !this.gridOptionsWrapper.isSuppressPaginationPanel();\n if (!paginationPanelEnabled) {\n this.setDisplayed(false);\n return;\n }\n this.addDestroyableEventListener(this.eventService, events_1.Events.EVENT_PAGINATION_CHANGED, this.onPaginationChanged.bind(this));\n this.addDestroyableEventListener(this.btFirst, 'click', this.onBtFirst.bind(this));\n this.addDestroyableEventListener(this.btLast, 'click', this.onBtLast.bind(this));\n this.addDestroyableEventListener(this.btNext, 'click', this.onBtNext.bind(this));\n this.addDestroyableEventListener(this.btPrevious, 'click', this.onBtPrevious.bind(this));\n this.onPaginationChanged();\n };\n PaginationComp.prototype.onPaginationChanged = function () {\n this.enableOrDisableButtons();\n this.updateRowLabels();\n this.setCurrentPageLabel();\n this.setTotalLabels();\n };\n PaginationComp.prototype.setCurrentPageLabel = function () {\n var pagesExist = this.paginationProxy.getTotalPages() > 0;\n var currentPage = this.paginationProxy.getCurrentPage();\n var toDisplay = pagesExist ? currentPage + 1 : 0;\n this.lbCurrent.innerHTML = this.formatNumber(toDisplay);\n };\n PaginationComp.prototype.formatNumber = function (value) {\n var userFunc = this.gridOptionsWrapper.getPaginationNumberFormatterFunc();\n if (userFunc) {\n return userFunc({ value: value });\n }\n else {\n return utils_1._.formatNumberCommas(value);\n }\n };\n PaginationComp.prototype.getTemplate = function () {\n var localeTextFunc = this.gridOptionsWrapper.getLocaleTextFunc();\n var strPage = localeTextFunc('page', 'Page');\n var strTo = localeTextFunc('to', 'to');\n var strOf = localeTextFunc('of', 'of');\n var strFirst = localeTextFunc('first', 'First');\n var strPrevious = localeTextFunc('previous', 'Previous');\n var strNext = localeTextFunc('next', 'Next');\n var strLast = localeTextFunc('last', 'Last');\n return \"
\\n \\n \" + strTo + \" \" + strOf + \" \\n \\n \\n
\\n \\n
\\n
\\n \\n
\\n \" + strPage + \" \" + strOf + \" \\n
\\n \\n
\\n
\\n \\n
\\n
\\n
\";\n };\n PaginationComp.prototype.onBtNext = function () {\n this.paginationProxy.goToNextPage();\n };\n PaginationComp.prototype.onBtPrevious = function () {\n this.paginationProxy.goToPreviousPage();\n };\n PaginationComp.prototype.onBtFirst = function () {\n this.paginationProxy.goToFirstPage();\n };\n PaginationComp.prototype.onBtLast = function () {\n this.paginationProxy.goToLastPage();\n };\n PaginationComp.prototype.enableOrDisableButtons = function () {\n var currentPage = this.paginationProxy.getCurrentPage();\n var maxRowFound = this.paginationProxy.isLastPageFound();\n var totalPages = this.paginationProxy.getTotalPages();\n var disablePreviousAndFirst = currentPage === 0;\n utils_1._.addOrRemoveCssClass(this.btPrevious, 'ag-disabled', disablePreviousAndFirst);\n utils_1._.addOrRemoveCssClass(this.btFirst, 'ag-disabled', disablePreviousAndFirst);\n var zeroPagesToDisplay = this.isZeroPagesToDisplay();\n var onLastPage = maxRowFound && currentPage === (totalPages - 1);\n var disableNext = onLastPage || zeroPagesToDisplay;\n utils_1._.addOrRemoveCssClass(this.btNext, 'ag-disabled', disableNext);\n var disableLast = !maxRowFound || zeroPagesToDisplay || currentPage === (totalPages - 1);\n utils_1._.addOrRemoveCssClass(this.btLast, 'ag-disabled', disableLast);\n };\n PaginationComp.prototype.updateRowLabels = function () {\n var currentPage = this.paginationProxy.getCurrentPage();\n var pageSize = this.paginationProxy.getPageSize();\n var maxRowFound = this.paginationProxy.isLastPageFound();\n var rowCount = this.paginationProxy.isLastPageFound() ?\n this.paginationProxy.getMasterRowCount() : null;\n var startRow;\n var endRow;\n if (this.isZeroPagesToDisplay()) {\n startRow = 0;\n endRow = 0;\n }\n else {\n startRow = (pageSize * currentPage) + 1;\n endRow = startRow + pageSize - 1;\n if (maxRowFound && endRow > rowCount) {\n endRow = rowCount;\n }\n }\n this.lbFirstRowOnPage.innerHTML = this.formatNumber(startRow);\n if (this.serverSideRowModel && this.serverSideRowModel.isLoading()) {\n this.lbLastRowOnPage.innerHTML = '?';\n }\n else {\n this.lbLastRowOnPage.innerHTML = this.formatNumber(endRow);\n }\n };\n PaginationComp.prototype.isZeroPagesToDisplay = function () {\n var maxRowFound = this.paginationProxy.isLastPageFound();\n var totalPages = this.paginationProxy.getTotalPages();\n return maxRowFound && totalPages === 0;\n };\n PaginationComp.prototype.setTotalLabels = function () {\n var lastPageFound = this.paginationProxy.isLastPageFound();\n var totalPages = this.paginationProxy.getTotalPages();\n var rowCount = this.paginationProxy.isLastPageFound() ?\n this.paginationProxy.getMasterRowCount() : null;\n if (lastPageFound) {\n this.lbTotal.innerHTML = this.formatNumber(totalPages);\n this.lbRecordCount.innerHTML = this.formatNumber(rowCount);\n }\n else {\n var moreText = this.gridOptionsWrapper.getLocaleTextFunc()('more', 'more');\n this.lbTotal.innerHTML = moreText;\n this.lbRecordCount.innerHTML = moreText;\n }\n };\n __decorate([\n context_1.Autowired('gridOptionsWrapper'),\n __metadata(\"design:type\", gridOptionsWrapper_1.GridOptionsWrapper)\n ], PaginationComp.prototype, \"gridOptionsWrapper\", void 0);\n __decorate([\n context_1.Autowired('eventService'),\n __metadata(\"design:type\", eventService_1.EventService)\n ], PaginationComp.prototype, \"eventService\", void 0);\n __decorate([\n context_1.Autowired('paginationProxy'),\n __metadata(\"design:type\", paginationProxy_1.PaginationProxy)\n ], PaginationComp.prototype, \"paginationProxy\", void 0);\n __decorate([\n context_1.Autowired('rowRenderer'),\n __metadata(\"design:type\", rowRenderer_1.RowRenderer)\n ], PaginationComp.prototype, \"rowRenderer\", void 0);\n __decorate([\n context_1.Autowired('rowModel'),\n __metadata(\"design:type\", Object)\n ], PaginationComp.prototype, \"rowModel\", void 0);\n __decorate([\n componentAnnotations_1.RefSelector('btFirst'),\n __metadata(\"design:type\", HTMLElement)\n ], PaginationComp.prototype, \"btFirst\", void 0);\n __decorate([\n componentAnnotations_1.RefSelector('btPrevious'),\n __metadata(\"design:type\", HTMLElement)\n ], PaginationComp.prototype, \"btPrevious\", void 0);\n __decorate([\n componentAnnotations_1.RefSelector('btNext'),\n __metadata(\"design:type\", HTMLElement)\n ], PaginationComp.prototype, \"btNext\", void 0);\n __decorate([\n componentAnnotations_1.RefSelector('btLast'),\n __metadata(\"design:type\", HTMLElement)\n ], PaginationComp.prototype, \"btLast\", void 0);\n __decorate([\n componentAnnotations_1.RefSelector('lbRecordCount'),\n __metadata(\"design:type\", Object)\n ], PaginationComp.prototype, \"lbRecordCount\", void 0);\n __decorate([\n componentAnnotations_1.RefSelector('lbFirstRowOnPage'),\n __metadata(\"design:type\", Object)\n ], PaginationComp.prototype, \"lbFirstRowOnPage\", void 0);\n __decorate([\n componentAnnotations_1.RefSelector('lbLastRowOnPage'),\n __metadata(\"design:type\", Object)\n ], PaginationComp.prototype, \"lbLastRowOnPage\", void 0);\n __decorate([\n componentAnnotations_1.RefSelector('eSummaryPanel'),\n __metadata(\"design:type\", Object)\n ], PaginationComp.prototype, \"eSummaryPanel\", void 0);\n __decorate([\n componentAnnotations_1.RefSelector('lbCurrent'),\n __metadata(\"design:type\", Object)\n ], PaginationComp.prototype, \"lbCurrent\", void 0);\n __decorate([\n componentAnnotations_1.RefSelector('lbTotal'),\n __metadata(\"design:type\", Object)\n ], PaginationComp.prototype, \"lbTotal\", void 0);\n __decorate([\n context_1.PostConstruct,\n __metadata(\"design:type\", Function),\n __metadata(\"design:paramtypes\", []),\n __metadata(\"design:returntype\", void 0)\n ], PaginationComp.prototype, \"postConstruct\", null);\n return PaginationComp;\n}(component_1.Component));\nexports.PaginationComp = PaginationComp;\n","/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.2\n * @link http://www.ag-grid.com/\n * @license MIT\n */\n\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar gridOptionsWrapper_1 = require(\"../../gridOptionsWrapper\");\nvar context_1 = require(\"../../context/context\");\nvar rowNodeBlock_1 = require(\"../cache/rowNodeBlock\");\nvar rowRenderer_1 = require(\"../../rendering/rowRenderer\");\nvar utils_1 = require(\"../../utils\");\nvar InfiniteBlock = /** @class */ (function (_super) {\n __extends(InfiniteBlock, _super);\n function InfiniteBlock(pageNumber, params) {\n var _this = _super.call(this, pageNumber, params) || this;\n _this.cacheParams = params;\n return _this;\n }\n InfiniteBlock.prototype.createBlankRowNode = function (rowIndex) {\n var rowNode = _super.prototype.createBlankRowNode.call(this, rowIndex);\n rowNode.uiLevel = 0;\n this.setIndexAndTopOnRowNode(rowNode, rowIndex);\n return rowNode;\n };\n InfiniteBlock.prototype.setDataAndId = function (rowNode, data, index) {\n if (utils_1._.exists(data)) {\n // this means if the user is not providing id's we just use the\n // index for the row. this will allow selection to work (that is based\n // on index) as long user is not inserting or deleting rows,\n // or wanting to keep selection between server side sorting or filtering\n rowNode.setDataAndId(data, index.toString());\n }\n else {\n rowNode.setDataAndId(undefined, undefined);\n }\n };\n InfiniteBlock.prototype.setRowNode = function (rowIndex, rowNode) {\n _super.prototype.setRowNode.call(this, rowIndex, rowNode);\n this.setIndexAndTopOnRowNode(rowNode, rowIndex);\n };\n InfiniteBlock.prototype.init = function () {\n _super.prototype.init.call(this, {\n context: this.getContext(),\n rowRenderer: this.rowRenderer\n });\n };\n InfiniteBlock.prototype.getNodeIdPrefix = function () {\n return null;\n };\n InfiniteBlock.prototype.getRow = function (displayIndex) {\n return this.getRowUsingLocalIndex(displayIndex);\n };\n InfiniteBlock.prototype.setIndexAndTopOnRowNode = function (rowNode, rowIndex) {\n rowNode.setRowIndex(rowIndex);\n rowNode.rowTop = this.cacheParams.rowHeight * rowIndex;\n };\n InfiniteBlock.prototype.loadFromDatasource = function () {\n var _this = this;\n // PROBLEM . . . . when the user sets sort via colDef.sort, then this code\n // is executing before the sort is set up, so server is not getting the sort\n // model. need to change with regards order - so the server side request is\n // AFTER thus it gets the right sort model.\n var params = {\n startRow: this.getStartRow(),\n endRow: this.getEndRow(),\n successCallback: this.pageLoaded.bind(this, this.getVersion()),\n failCallback: this.pageLoadFailed.bind(this),\n sortModel: this.cacheParams.sortModel,\n filterModel: this.cacheParams.filterModel,\n context: this.gridOptionsWrapper.getContext()\n };\n if (utils_1._.missing(this.cacheParams.datasource.getRows)) {\n console.warn(\"ag-Grid: datasource is missing getRows method\");\n return;\n }\n // check if old version of datasource used\n var getRowsParams = utils_1._.getFunctionParameters(this.cacheParams.datasource.getRows);\n if (getRowsParams.length > 1) {\n console.warn('ag-grid: It looks like your paging datasource is of the old type, taking more than one parameter.');\n console.warn('ag-grid: From ag-grid 1.9.0, now the getRows takes one parameter. See the documentation for details.');\n }\n // put in timeout, to force result to be async\n window.setTimeout(function () {\n _this.cacheParams.datasource.getRows(params);\n }, 0);\n };\n __decorate([\n context_1.Autowired('gridOptionsWrapper'),\n __metadata(\"design:type\", gridOptionsWrapper_1.GridOptionsWrapper)\n ], InfiniteBlock.prototype, \"gridOptionsWrapper\", void 0);\n __decorate([\n context_1.Autowired('rowRenderer'),\n __metadata(\"design:type\", rowRenderer_1.RowRenderer)\n ], InfiniteBlock.prototype, \"rowRenderer\", void 0);\n __decorate([\n context_1.PostConstruct,\n __metadata(\"design:type\", Function),\n __metadata(\"design:paramtypes\", []),\n __metadata(\"design:returntype\", void 0)\n ], InfiniteBlock.prototype, \"init\", null);\n return InfiniteBlock;\n}(rowNodeBlock_1.RowNodeBlock));\nexports.InfiniteBlock = InfiniteBlock;\n","/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.2\n * @link http://www.ag-grid.com/\n * @license MIT\n */\n\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar beanStub_1 = require(\"../context/beanStub\");\nvar eventService_1 = require(\"../eventService\");\nvar events_1 = require(\"../events\");\nvar context_1 = require(\"../context/context\");\nvar gridOptionsWrapper_1 = require(\"../gridOptionsWrapper\");\nvar selectionController_1 = require(\"../selectionController\");\nvar columnApi_1 = require(\"../columnController/columnApi\");\nvar gridApi_1 = require(\"../gridApi\");\nvar utils_1 = require(\"../utils\");\nvar PaginationProxy = /** @class */ (function (_super) {\n __extends(PaginationProxy, _super);\n function PaginationProxy() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.currentPage = 0;\n _this.topDisplayedRowIndex = 0;\n _this.bottomDisplayedRowIndex = 0;\n _this.pixelOffset = 0;\n _this.masterRowCount = 0;\n return _this;\n }\n PaginationProxy.prototype.postConstruct = function () {\n this.active = this.gridOptionsWrapper.isPagination();\n this.paginateChildRows = this.gridOptionsWrapper.isPaginateChildRows();\n this.addDestroyableEventListener(this.eventService, events_1.Events.EVENT_MODEL_UPDATED, this.onModelUpdated.bind(this));\n this.addDestroyableEventListener(this.gridOptionsWrapper, 'paginationPageSize', this.onModelUpdated.bind(this));\n this.onModelUpdated();\n };\n PaginationProxy.prototype.ensureRowHeightsValid = function (startPixel, endPixel, startLimitIndex, endLimitIndex) {\n var res = this.rowModel.ensureRowHeightsValid(startPixel, endPixel, this.getPageFirstRow(), this.getPageLastRow());\n if (res) {\n this.calculatePages();\n }\n return res;\n };\n PaginationProxy.prototype.onModelUpdated = function (modelUpdatedEvent) {\n this.calculatePages();\n var paginationChangedEvent = {\n type: events_1.Events.EVENT_PAGINATION_CHANGED,\n animate: modelUpdatedEvent ? modelUpdatedEvent.animate : false,\n newData: modelUpdatedEvent ? modelUpdatedEvent.newData : false,\n newPage: modelUpdatedEvent ? modelUpdatedEvent.newPage : false,\n keepRenderedRows: modelUpdatedEvent ? modelUpdatedEvent.keepRenderedRows : false,\n api: this.gridApi,\n columnApi: this.columnApi\n };\n this.eventService.dispatchEvent(paginationChangedEvent);\n };\n PaginationProxy.prototype.goToPage = function (page) {\n if (!this.active) {\n return;\n }\n if (this.currentPage === page) {\n return;\n }\n this.currentPage = page;\n var event = {\n type: events_1.Events.EVENT_MODEL_UPDATED,\n animate: false,\n keepRenderedRows: false,\n newData: false,\n newPage: true,\n api: this.gridApi,\n columnApi: this.columnApi\n };\n this.onModelUpdated(event);\n };\n PaginationProxy.prototype.getPixelOffset = function () {\n return this.pixelOffset;\n };\n PaginationProxy.prototype.getRow = function (index) {\n return this.rowModel.getRow(index);\n };\n PaginationProxy.prototype.getRowNode = function (id) {\n return this.rowModel.getRowNode(id);\n };\n PaginationProxy.prototype.getRowIndexAtPixel = function (pixel) {\n return this.rowModel.getRowIndexAtPixel(pixel);\n };\n PaginationProxy.prototype.getCurrentPageHeight = function () {\n if (utils_1._.missing(this.topRowBounds) || utils_1._.missing(this.bottomRowBounds)) {\n return 0;\n }\n return Math.max(this.bottomRowBounds.rowTop + this.bottomRowBounds.rowHeight - this.topRowBounds.rowTop, 0);\n };\n PaginationProxy.prototype.isRowPresent = function (rowNode) {\n if (!this.rowModel.isRowPresent(rowNode)) {\n return false;\n }\n var nodeIsInPage = rowNode.rowIndex >= this.topDisplayedRowIndex && rowNode.rowIndex <= this.bottomDisplayedRowIndex;\n return nodeIsInPage;\n };\n PaginationProxy.prototype.isEmpty = function () {\n return this.rowModel.isEmpty();\n };\n PaginationProxy.prototype.isRowsToRender = function () {\n return this.rowModel.isRowsToRender();\n };\n PaginationProxy.prototype.getNodesInRangeForSelection = function (firstInRange, lastInRange) {\n return this.rowModel.getNodesInRangeForSelection(firstInRange, lastInRange);\n };\n PaginationProxy.prototype.forEachNode = function (callback) {\n return this.rowModel.forEachNode(callback);\n };\n PaginationProxy.prototype.getType = function () {\n return this.rowModel.getType();\n };\n PaginationProxy.prototype.getRowBounds = function (index) {\n var res = this.rowModel.getRowBounds(index);\n res.rowIndex = index;\n return res;\n };\n PaginationProxy.prototype.getPageFirstRow = function () {\n return this.topRowBounds ? this.topRowBounds.rowIndex : -1;\n };\n PaginationProxy.prototype.getPageLastRow = function () {\n return this.bottomRowBounds ? this.bottomRowBounds.rowIndex : -1;\n };\n PaginationProxy.prototype.getRowCount = function () {\n return this.rowModel.getRowCount();\n };\n PaginationProxy.prototype.goToPageWithIndex = function (index) {\n if (!this.active) {\n return;\n }\n var pageNumber = Math.floor(index / this.pageSize);\n this.goToPage(pageNumber);\n };\n PaginationProxy.prototype.isLastPageFound = function () {\n return this.rowModel.isLastRowFound();\n };\n PaginationProxy.prototype.getCurrentPage = function () {\n return this.currentPage;\n };\n PaginationProxy.prototype.goToNextPage = function () {\n this.goToPage(this.currentPage + 1);\n };\n PaginationProxy.prototype.goToPreviousPage = function () {\n this.goToPage(this.currentPage - 1);\n };\n PaginationProxy.prototype.goToFirstPage = function () {\n this.goToPage(0);\n };\n PaginationProxy.prototype.goToLastPage = function () {\n var rowCount = this.rowModel.getRowCount();\n var lastPage = Math.floor(rowCount / this.pageSize);\n this.goToPage(lastPage);\n };\n PaginationProxy.prototype.getPageSize = function () {\n return this.pageSize;\n };\n PaginationProxy.prototype.getTotalPages = function () {\n return this.totalPages;\n };\n PaginationProxy.prototype.setPageSize = function () {\n // show put this into super class\n this.pageSize = this.gridOptionsWrapper.getPaginationPageSize();\n if (!(this.pageSize >= 1)) {\n this.pageSize = 100;\n }\n };\n PaginationProxy.prototype.calculatePages = function () {\n if (this.active) {\n this.setPageSize();\n if (this.paginateChildRows) {\n this.calculatePagesAllRows();\n }\n else {\n this.calculatePagesMasterRowsOnly();\n }\n }\n else {\n this.calculatedPagesNotActive();\n }\n this.topRowBounds = this.rowModel.getRowBounds(this.topDisplayedRowIndex);\n if (this.topRowBounds) {\n this.topRowBounds.rowIndex = this.topDisplayedRowIndex;\n }\n this.bottomRowBounds = this.rowModel.getRowBounds(this.bottomDisplayedRowIndex);\n if (this.bottomRowBounds) {\n this.bottomRowBounds.rowIndex = this.bottomDisplayedRowIndex;\n }\n this.pixelOffset = utils_1._.exists(this.topRowBounds) ? this.topRowBounds.rowTop : 0;\n };\n PaginationProxy.prototype.setZeroRows = function () {\n this.topDisplayedRowIndex = 0;\n this.bottomDisplayedRowIndex = -1;\n this.currentPage = 0;\n this.totalPages = 0;\n };\n PaginationProxy.prototype.calculatePagesMasterRowsOnly = function () {\n // const csrm = this.rowModel;\n // const rootNode = csrm.getRootNode();\n // const masterRows = rootNode.childrenAfterSort;\n this.masterRowCount = this.rowModel.getTopLevelRowCount();\n if (this.masterRowCount === 0) {\n this.setZeroRows();\n return;\n }\n var masterLastRowIndex = this.masterRowCount - 1;\n this.totalPages = Math.floor((masterLastRowIndex) / this.pageSize) + 1;\n if (this.currentPage >= this.totalPages) {\n this.currentPage = this.totalPages - 1;\n }\n if (!utils_1._.isNumeric(this.currentPage) || this.currentPage < 0) {\n this.currentPage = 0;\n }\n var masterPageStartIndex = this.pageSize * this.currentPage;\n var masterPageEndIndex = (this.pageSize * (this.currentPage + 1)) - 1;\n if (masterPageEndIndex > masterLastRowIndex) {\n masterPageEndIndex = masterLastRowIndex;\n }\n this.topDisplayedRowIndex = this.rowModel.getTopLevelRowDisplayedIndex(masterPageStartIndex);\n // masterRows[masterPageStartIndex].rowIndex;\n if (masterPageEndIndex === masterLastRowIndex) {\n // if showing the last master row, then we want to show the very last row of the model\n this.bottomDisplayedRowIndex = this.rowModel.getRowCount() - 1;\n }\n else {\n var firstIndexNotToShow = this.rowModel.getTopLevelRowDisplayedIndex(masterPageEndIndex + 1);\n //masterRows[masterPageEndIndex + 1].rowIndex;\n // this gets the index of the last child - eg current row is open, we want to display all children,\n // the index of the last child is one less than the index of the next parent row.\n this.bottomDisplayedRowIndex = firstIndexNotToShow - 1;\n }\n };\n PaginationProxy.prototype.getMasterRowCount = function () {\n return this.masterRowCount;\n };\n PaginationProxy.prototype.calculatePagesAllRows = function () {\n this.masterRowCount = this.rowModel.getRowCount();\n if (this.masterRowCount === 0) {\n this.setZeroRows();\n return;\n }\n var maxRowIndex = this.masterRowCount - 1;\n this.totalPages = Math.floor((maxRowIndex) / this.pageSize) + 1;\n if (this.currentPage >= this.totalPages) {\n this.currentPage = this.totalPages - 1;\n }\n if (!utils_1._.isNumeric(this.currentPage) || this.currentPage < 0) {\n this.currentPage = 0;\n }\n this.topDisplayedRowIndex = this.pageSize * this.currentPage;\n this.bottomDisplayedRowIndex = (this.pageSize * (this.currentPage + 1)) - 1;\n if (this.bottomDisplayedRowIndex > maxRowIndex) {\n this.bottomDisplayedRowIndex = maxRowIndex;\n }\n };\n PaginationProxy.prototype.calculatedPagesNotActive = function () {\n this.pageSize = this.rowModel.getRowCount();\n this.totalPages = 1;\n this.currentPage = 0;\n this.topDisplayedRowIndex = 0;\n this.bottomDisplayedRowIndex = this.rowModel.getRowCount() - 1;\n };\n __decorate([\n context_1.Autowired('rowModel'),\n __metadata(\"design:type\", Object)\n ], PaginationProxy.prototype, \"rowModel\", void 0);\n __decorate([\n context_1.Autowired('eventService'),\n __metadata(\"design:type\", eventService_1.EventService)\n ], PaginationProxy.prototype, \"eventService\", void 0);\n __decorate([\n context_1.Autowired('gridOptionsWrapper'),\n __metadata(\"design:type\", gridOptionsWrapper_1.GridOptionsWrapper)\n ], PaginationProxy.prototype, \"gridOptionsWrapper\", void 0);\n __decorate([\n context_1.Autowired('selectionController'),\n __metadata(\"design:type\", selectionController_1.SelectionController)\n ], PaginationProxy.prototype, \"selectionController\", void 0);\n __decorate([\n context_1.Autowired('columnApi'),\n __metadata(\"design:type\", columnApi_1.ColumnApi)\n ], PaginationProxy.prototype, \"columnApi\", void 0);\n __decorate([\n context_1.Autowired('gridApi'),\n __metadata(\"design:type\", gridApi_1.GridApi)\n ], PaginationProxy.prototype, \"gridApi\", void 0);\n __decorate([\n context_1.PostConstruct,\n __metadata(\"design:type\", Function),\n __metadata(\"design:paramtypes\", []),\n __metadata(\"design:returntype\", void 0)\n ], PaginationProxy.prototype, \"postConstruct\", null);\n PaginationProxy = __decorate([\n context_1.Bean('paginationProxy')\n ], PaginationProxy);\n return PaginationProxy;\n}(beanStub_1.BeanStub));\nexports.PaginationProxy = PaginationProxy;\n","/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.2\n * @link http://www.ag-grid.com/\n * @license MIT\n */\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar rowNode_1 = require(\"../../entities/rowNode\");\nvar events_1 = require(\"../../events\");\nvar utils_1 = require(\"../../utils\");\nvar ClientSideNodeManager = /** @class */ (function () {\n function ClientSideNodeManager(rootNode, gridOptionsWrapper, context, eventService, columnController, gridApi, columnApi, selectionController) {\n this.nextId = 0;\n // when user is provide the id's, we also keep a map of ids to row nodes for convenience\n this.allNodesMap = {};\n this.rootNode = rootNode;\n this.gridOptionsWrapper = gridOptionsWrapper;\n this.context = context;\n this.eventService = eventService;\n this.columnController = columnController;\n this.gridApi = gridApi;\n this.columnApi = columnApi;\n this.selectionController = selectionController;\n this.rootNode.group = true;\n this.rootNode.level = -1;\n this.rootNode.id = ClientSideNodeManager.ROOT_NODE_ID;\n this.rootNode.allLeafChildren = [];\n this.rootNode.childrenAfterGroup = [];\n this.rootNode.childrenAfterSort = [];\n this.rootNode.childrenAfterFilter = [];\n // if we make this class a bean, then can annotate postConstruct\n this.postConstruct();\n }\n // @PostConstruct - this is not a bean, so postConstruct called by constructor\n ClientSideNodeManager.prototype.postConstruct = function () {\n // func below doesn't have 'this' pointer, so need to pull out these bits\n this.getNodeChildDetails = this.gridOptionsWrapper.getNodeChildDetailsFunc();\n this.suppressParentsInRowNodes = this.gridOptionsWrapper.isSuppressParentsInRowNodes();\n this.doesDataFlower = this.gridOptionsWrapper.getDoesDataFlowerFunc();\n this.isRowMasterFunc = this.gridOptionsWrapper.getIsRowMasterFunc();\n this.doingLegacyTreeData = utils_1._.exists(this.getNodeChildDetails);\n this.doingMasterDetail = this.gridOptionsWrapper.isMasterDetail();\n if (this.getNodeChildDetails) {\n console.warn(\"ag-Grid: the callback nodeChildDetailsFunc() is now deprecated. The new way of doing\\n tree data in ag-Grid was introduced in v14 (released November 2017). In the next\\n major release of ag-Grid we will be dropping support for the old version of\\n tree data. If you are reading this message, please go to the docs to see how\\n to implement Tree Data without using nodeChildDetailsFunc().\");\n }\n };\n ClientSideNodeManager.prototype.getCopyOfNodesMap = function () {\n var result = utils_1._.cloneObject(this.allNodesMap);\n return result;\n };\n ClientSideNodeManager.prototype.getRowNode = function (id) {\n return this.allNodesMap[id];\n };\n ClientSideNodeManager.prototype.setRowData = function (rowData) {\n this.rootNode.childrenAfterFilter = null;\n this.rootNode.childrenAfterGroup = null;\n this.rootNode.childrenAfterSort = null;\n this.rootNode.childrenMapped = null;\n this.nextId = 0;\n this.allNodesMap = {};\n if (!rowData) {\n this.rootNode.allLeafChildren = [];\n this.rootNode.childrenAfterGroup = [];\n return;\n }\n // kick off recursion\n // we add rootNode as the parent, however if using ag-grid-enterprise, the grouping stage\n // sets the parent node on each row (even if we are not grouping). so setting parent node\n // here is for benefit of ag-grid-community users\n var result = this.recursiveFunction(rowData, this.rootNode, ClientSideNodeManager.TOP_LEVEL);\n if (this.doingLegacyTreeData) {\n this.rootNode.childrenAfterGroup = result;\n this.setLeafChildren(this.rootNode);\n }\n else {\n this.rootNode.allLeafChildren = result;\n }\n };\n ClientSideNodeManager.prototype.updateRowData = function (rowDataTran, rowNodeOrder) {\n if (this.isLegacyTreeData()) {\n return null;\n }\n var add = rowDataTran.add, addIndex = rowDataTran.addIndex, remove = rowDataTran.remove, update = rowDataTran.update;\n var rowNodeTransaction = {\n remove: [],\n update: [],\n add: []\n };\n this.executeAdd(rowDataTran, rowNodeTransaction);\n this.executeRemove(rowDataTran, rowNodeTransaction);\n this.executeUpdate(rowDataTran, rowNodeTransaction);\n if (rowNodeOrder) {\n utils_1._.sortRowNodesByOrder(this.rootNode.allLeafChildren, rowNodeOrder);\n }\n return rowNodeTransaction;\n };\n ClientSideNodeManager.prototype.executeAdd = function (rowDataTran, rowNodeTransaction) {\n var _this = this;\n var add = rowDataTran.add, addIndex = rowDataTran.addIndex;\n if (!add) {\n return;\n }\n var useIndex = typeof addIndex === 'number' && addIndex >= 0;\n if (useIndex) {\n // items get inserted in reverse order for index insertion\n add.reverse().forEach(function (item) {\n var newRowNode = _this.addRowNode(item, addIndex);\n rowNodeTransaction.add.push(newRowNode);\n });\n }\n else {\n add.forEach(function (item) {\n var newRowNode = _this.addRowNode(item);\n rowNodeTransaction.add.push(newRowNode);\n });\n }\n };\n ClientSideNodeManager.prototype.executeRemove = function (rowDataTran, rowNodeTransaction) {\n var _this = this;\n var remove = rowDataTran.remove;\n if (!remove) {\n return;\n }\n var rowIdsRemoved = {};\n var anyNodesSelected = false;\n remove.forEach(function (item) {\n var rowNode = _this.lookupRowNode(item);\n if (!rowNode) {\n return;\n }\n if (rowNode.isSelected()) {\n anyNodesSelected = true;\n }\n // do delete - setting 'tailingNodeInSequence = true' to ensure EVENT_SELECTION_CHANGED is not raised for\n // each row node updated, instead it is raised once by the calling code if any selected nodes exist.\n rowNode.setSelected(false, false, true);\n // so row renderer knows to fade row out (and not reposition it)\n rowNode.clearRowTop();\n // NOTE: were we could remove from allLeaveChildren, however _.removeFromArray() is expensive, especially\n // if called multiple times (eg deleting lots of rows) and if allLeafChildren is a large list\n rowIdsRemoved[rowNode.id] = true;\n // _.removeFromArray(this.rootNode.allLeafChildren, rowNode);\n delete _this.allNodesMap[rowNode.id];\n rowNodeTransaction.remove.push(rowNode);\n });\n this.rootNode.allLeafChildren = this.rootNode.allLeafChildren.filter(function (rowNode) { return !rowIdsRemoved[rowNode.id]; });\n if (anyNodesSelected) {\n this.selectionController.updateGroupsFromChildrenSelections();\n var event_1 = {\n type: events_1.Events.EVENT_SELECTION_CHANGED,\n api: this.gridApi,\n columnApi: this.columnApi\n };\n this.eventService.dispatchEvent(event_1);\n }\n };\n ClientSideNodeManager.prototype.executeUpdate = function (rowDataTran, rowNodeTransaction) {\n var _this = this;\n var update = rowDataTran.update;\n if (!update) {\n return;\n }\n update.forEach(function (item) {\n var rowNode = _this.lookupRowNode(item);\n if (!rowNode) {\n return;\n }\n rowNode.updateData(item);\n rowNodeTransaction.update.push(rowNode);\n });\n };\n ClientSideNodeManager.prototype.addRowNode = function (data, index) {\n var newNode = this.createNode(data, this.rootNode, ClientSideNodeManager.TOP_LEVEL);\n if (utils_1._.exists(index)) {\n utils_1._.insertIntoArray(this.rootNode.allLeafChildren, newNode, index);\n }\n else {\n this.rootNode.allLeafChildren.push(newNode);\n }\n return newNode;\n };\n ClientSideNodeManager.prototype.lookupRowNode = function (data) {\n var rowNodeIdFunc = this.gridOptionsWrapper.getRowNodeIdFunc();\n var rowNode;\n if (utils_1._.exists(rowNodeIdFunc)) {\n // find rowNode using id\n var id = rowNodeIdFunc(data);\n rowNode = this.allNodesMap[id];\n if (!rowNode) {\n console.error(\"ag-Grid: could not find row id=\" + id + \", data item was not found for this id\");\n return null;\n }\n }\n else {\n // find rowNode using object references\n rowNode = utils_1._.find(this.rootNode.allLeafChildren, function (rowNode) { return rowNode.data === data; });\n if (!rowNode) {\n console.error(\"ag-Grid: could not find data item as object was not found\", data);\n return null;\n }\n }\n return rowNode;\n };\n ClientSideNodeManager.prototype.recursiveFunction = function (rowData, parent, level) {\n var _this = this;\n // make sure the rowData is an array and not a string of json - this was a commonly reported problem on the forum\n if (typeof rowData === 'string') {\n console.warn('ag-Grid: rowData must be an array, however you passed in a string. If you are loading JSON, make sure you convert the JSON string to JavaScript objects first');\n return;\n }\n var rowNodes = [];\n rowData.forEach(function (dataItem) {\n var node = _this.createNode(dataItem, parent, level);\n rowNodes.push(node);\n });\n return rowNodes;\n };\n ClientSideNodeManager.prototype.createNode = function (dataItem, parent, level) {\n var node = new rowNode_1.RowNode();\n this.context.wireBean(node);\n var doingTreeData = this.gridOptionsWrapper.isTreeData();\n var doingLegacyTreeData = !doingTreeData && utils_1._.exists(this.getNodeChildDetails);\n var nodeChildDetails = doingLegacyTreeData ? this.getNodeChildDetails(dataItem) : null;\n if (nodeChildDetails && nodeChildDetails.group) {\n node.group = true;\n node.childrenAfterGroup = this.recursiveFunction(nodeChildDetails.children, node, level + 1);\n node.expanded = nodeChildDetails.expanded === true;\n node.field = nodeChildDetails.field;\n node.key = nodeChildDetails.key;\n /** @deprecated is now 'master' */\n node.canFlower = node.master;\n // pull out all the leaf children and add to our node\n this.setLeafChildren(node);\n }\n else {\n node.group = false;\n if (doingTreeData) {\n node.master = false;\n node.expanded = false;\n }\n else {\n // this is the default, for when doing grid data\n if (this.doesDataFlower) {\n node.master = this.doesDataFlower(dataItem);\n }\n else if (this.doingMasterDetail) {\n // if we are doing master detail, then the\n // default is that everything can flower.\n if (this.isRowMasterFunc) {\n node.master = this.isRowMasterFunc(dataItem);\n }\n else {\n node.master = true;\n }\n }\n else {\n node.master = false;\n }\n var rowGroupColumns = this.columnController.getRowGroupColumns();\n var numRowGroupColumns = rowGroupColumns ? rowGroupColumns.length : 0;\n // need to take row group into account when determining level\n var masterRowLevel = level + numRowGroupColumns;\n node.expanded = node.master ? this.isExpanded(masterRowLevel) : false;\n }\n }\n // support for backwards compatibility, canFlow is now called 'master'\n node.canFlower = node.master;\n if (parent && !this.suppressParentsInRowNodes) {\n node.parent = parent;\n }\n node.level = level;\n node.setDataAndId(dataItem, this.nextId.toString());\n if (this.allNodesMap[node.id]) {\n console.warn(\"ag-grid: duplicate node id '\" + node.id + \"' detected from getRowNodeId callback, this could cause issues in your grid.\");\n }\n this.allNodesMap[node.id] = node;\n this.nextId++;\n return node;\n };\n ClientSideNodeManager.prototype.isExpanded = function (level) {\n var expandByDefault = this.gridOptionsWrapper.getGroupDefaultExpanded();\n if (expandByDefault === -1) {\n return true;\n }\n else {\n return level < expandByDefault;\n }\n };\n // this is only used for doing legacy tree data\n ClientSideNodeManager.prototype.setLeafChildren = function (node) {\n node.allLeafChildren = [];\n if (node.childrenAfterGroup) {\n node.childrenAfterGroup.forEach(function (childAfterGroup) {\n if (childAfterGroup.group) {\n if (childAfterGroup.allLeafChildren) {\n childAfterGroup.allLeafChildren.forEach(function (leafChild) { return node.allLeafChildren.push(leafChild); });\n }\n }\n else {\n node.allLeafChildren.push(childAfterGroup);\n }\n });\n }\n };\n ClientSideNodeManager.prototype.isLegacyTreeData = function () {\n var rowsAlreadyGrouped = utils_1._.exists(this.gridOptionsWrapper.getNodeChildDetailsFunc());\n if (rowsAlreadyGrouped) {\n console.warn('ag-Grid: adding and removing rows is not supported when using nodeChildDetailsFunc, ie it is not ' +\n 'supported for legacy tree data. Please see the docs on the new preferred way of providing tree data that works with delta updates.');\n return true;\n }\n else {\n return false;\n }\n };\n ClientSideNodeManager.TOP_LEVEL = 0;\n ClientSideNodeManager.ROOT_NODE_ID = 'ROOT_NODE_ID';\n return ClientSideNodeManager;\n}());\nexports.ClientSideNodeManager = ClientSideNodeManager;\n","/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.2\n * @link http://www.ag-grid.com/\n * @license MIT\n */\n\"use strict\";\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar context_1 = require(\"../context/context\");\nvar filterManager_1 = require(\"../filter/filterManager\");\nvar gridOptionsWrapper_1 = require(\"../gridOptionsWrapper\");\nvar FilterService = /** @class */ (function () {\n function FilterService() {\n }\n FilterService.prototype.postConstruct = function () {\n this.doingTreeData = this.gridOptionsWrapper.isTreeData();\n };\n FilterService.prototype.filter = function (changedPath) {\n var filterActive = this.filterManager.isAnyFilterPresent();\n this.filterNodes(filterActive, changedPath);\n };\n FilterService.prototype.filterNodes = function (filterActive, changedPath) {\n var _this = this;\n var filterCallback = function (rowNode, includeChildNodes) {\n // recursively get all children that are groups to also filter\n if (rowNode.hasChildren()) {\n // result of filter for this node. when filtering tree data, includeChildNodes = true when parent passes\n if (filterActive && !includeChildNodes) {\n rowNode.childrenAfterFilter = rowNode.childrenAfterGroup.filter(function (childNode) {\n // a group is included in the result if it has any children of it's own.\n // by this stage, the child groups are already filtered\n var passBecauseChildren = childNode.childrenAfterFilter && childNode.childrenAfterFilter.length > 0;\n // both leaf level nodes and tree data nodes have data. these get added if\n // the data passes the filter\n var passBecauseDataPasses = childNode.data && _this.filterManager.doesRowPassFilter(childNode);\n // note - tree data nodes pass either if a) they pass themselves or b) any children of that node pass\n return passBecauseChildren || passBecauseDataPasses;\n });\n }\n else {\n // if not filtering, the result is the original list\n rowNode.childrenAfterFilter = rowNode.childrenAfterGroup;\n }\n _this.setAllChildrenCount(rowNode);\n }\n else {\n rowNode.childrenAfterFilter = rowNode.childrenAfterGroup;\n rowNode.setAllChildrenCount(null);\n }\n };\n if (this.doingTreeDataFiltering()) {\n var treeDataDepthFirstFilter_1 = function (rowNode, alreadyFoundInParent) {\n // tree data filter traverses the hierarchy depth first and includes child nodes if parent passes\n // filter, and parent nodes will be include if any children exist.\n if (rowNode.childrenAfterGroup) {\n for (var i = 0; i < rowNode.childrenAfterGroup.length; i++) {\n var childNode = rowNode.childrenAfterGroup[i];\n // first check if current node passes filter before invoking child nodes\n var foundInParent = alreadyFoundInParent || _this.filterManager.doesRowPassFilter(childNode);\n if (childNode.childrenAfterGroup) {\n treeDataDepthFirstFilter_1(rowNode.childrenAfterGroup[i], foundInParent);\n }\n else {\n filterCallback(childNode, foundInParent);\n }\n }\n }\n filterCallback(rowNode, alreadyFoundInParent);\n };\n var treeDataFilterCallback = function (rowNode) { return treeDataDepthFirstFilter_1(rowNode, false); };\n changedPath.executeFromRootNode(treeDataFilterCallback);\n }\n else {\n var defaultFilterCallback = function (rowNode) { return filterCallback(rowNode, false); };\n changedPath.forEachChangedNodeDepthFirst(defaultFilterCallback, true);\n }\n };\n FilterService.prototype.setAllChildrenCountTreeData = function (rowNode) {\n // for tree data, we include all children, groups and leafs\n var allChildrenCount = 0;\n rowNode.childrenAfterFilter.forEach(function (child) {\n // include child itself\n allChildrenCount++;\n // include children of children\n allChildrenCount += child.allChildrenCount;\n });\n rowNode.setAllChildrenCount(allChildrenCount);\n };\n FilterService.prototype.setAllChildrenCountGridGrouping = function (rowNode) {\n // for grid data, we only count the leafs\n var allChildrenCount = 0;\n rowNode.childrenAfterFilter.forEach(function (child) {\n if (child.group) {\n allChildrenCount += child.allChildrenCount;\n }\n else {\n allChildrenCount++;\n }\n });\n rowNode.setAllChildrenCount(allChildrenCount);\n };\n FilterService.prototype.setAllChildrenCount = function (rowNode) {\n if (this.doingTreeData) {\n this.setAllChildrenCountTreeData(rowNode);\n }\n else {\n this.setAllChildrenCountGridGrouping(rowNode);\n }\n };\n FilterService.prototype.doingTreeDataFiltering = function () {\n return this.gridOptionsWrapper.isTreeData() && !this.gridOptionsWrapper.isExcludeChildrenWhenTreeDataFiltering();\n };\n __decorate([\n context_1.Autowired('filterManager'),\n __metadata(\"design:type\", filterManager_1.FilterManager)\n ], FilterService.prototype, \"filterManager\", void 0);\n __decorate([\n context_1.Autowired('gridOptionsWrapper'),\n __metadata(\"design:type\", gridOptionsWrapper_1.GridOptionsWrapper)\n ], FilterService.prototype, \"gridOptionsWrapper\", void 0);\n __decorate([\n context_1.PostConstruct,\n __metadata(\"design:type\", Function),\n __metadata(\"design:paramtypes\", []),\n __metadata(\"design:returntype\", void 0)\n ], FilterService.prototype, \"postConstruct\", null);\n FilterService = __decorate([\n context_1.Bean(\"filterService\")\n ], FilterService);\n return FilterService;\n}());\nexports.FilterService = FilterService;\n","/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.2\n * @link http://www.ag-grid.com/\n * @license MIT\n */\n\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar beanStub_1 = require(\"../../context/beanStub\");\nvar rowNodeBlock_1 = require(\"./rowNodeBlock\");\nvar utils_1 = require(\"../../utils\");\nvar RowNodeCache = /** @class */ (function (_super) {\n __extends(RowNodeCache, _super);\n function RowNodeCache(cacheParams) {\n var _this = _super.call(this) || this;\n _this.maxRowFound = false;\n _this.blocks = {};\n _this.blockCount = 0;\n _this.virtualRowCount = cacheParams.initialRowCount;\n _this.cacheParams = cacheParams;\n return _this;\n }\n RowNodeCache.prototype.destroy = function () {\n var _this = this;\n _super.prototype.destroy.call(this);\n this.forEachBlockInOrder(function (block) { return _this.destroyBlock(block); });\n };\n RowNodeCache.prototype.init = function () {\n var _this = this;\n this.active = true;\n this.addDestroyFunc(function () { return _this.active = false; });\n };\n RowNodeCache.prototype.isActive = function () {\n return this.active;\n };\n RowNodeCache.prototype.getVirtualRowCount = function () {\n return this.virtualRowCount;\n };\n RowNodeCache.prototype.hack_setVirtualRowCount = function (virtualRowCount) {\n this.virtualRowCount = virtualRowCount;\n };\n RowNodeCache.prototype.isMaxRowFound = function () {\n return this.maxRowFound;\n };\n // listener on EVENT_LOAD_COMPLETE\n RowNodeCache.prototype.onPageLoaded = function (event) {\n this.cacheParams.rowNodeBlockLoader.loadComplete();\n this.checkBlockToLoad();\n // if we are not active, then we ignore all events, otherwise we could end up getting the\n // grid to refresh even though we are no longer the active cache\n if (!this.isActive()) {\n return;\n }\n this.logger.log(\"onPageLoaded: page = \" + event.page.getBlockNumber() + \", lastRow = \" + event.lastRow);\n if (event.success) {\n this.checkVirtualRowCount(event.page, event.lastRow);\n }\n };\n RowNodeCache.prototype.purgeBlocksIfNeeded = function (blockToExclude) {\n var _this = this;\n // put all candidate blocks into a list for sorting\n var blocksForPurging = [];\n this.forEachBlockInOrder(function (block) {\n // we exclude checking for the page just created, as this has yet to be accessed and hence\n // the lastAccessed stamp will not be updated for the first time yet\n if (block === blockToExclude) {\n return;\n }\n blocksForPurging.push(block);\n });\n // note: need to verify that this sorts items in the right order\n blocksForPurging.sort(function (a, b) { return b.getLastAccessed() - a.getLastAccessed(); });\n // we remove (maxBlocksInCache - 1) as we already excluded the 'just created' page.\n // in other words, after the splice operation below, we have taken out the blocks\n // we want to keep, which means we are left with blocks that we can potentially purge\n var maxBlocksProvided = this.cacheParams.maxBlocksInCache > 0;\n var blocksToKeep = maxBlocksProvided ? this.cacheParams.maxBlocksInCache - 1 : null;\n var emptyBlocksToKeep = RowNodeCache.MAX_EMPTY_BLOCKS_TO_KEEP - 1;\n blocksForPurging.forEach(function (block, index) {\n var purgeBecauseBlockEmpty = block.getState() === rowNodeBlock_1.RowNodeBlock.STATE_DIRTY && index >= emptyBlocksToKeep;\n var purgeBecauseCacheFull = maxBlocksProvided ? index >= blocksToKeep : false;\n if (purgeBecauseBlockEmpty || purgeBecauseCacheFull) {\n // we never purge blocks if they are open, as purging them would mess up with\n // our indexes, it would be very messy to restore the purged block to it's\n // previous state if it had open children (and what if open children of open\n // children, jeeeesus, just thinking about it freaks me out) so best is have a\n // rule, if block is open, we never purge.\n if (block.isAnyNodeOpen(_this.virtualRowCount)) {\n return;\n }\n // at this point, block is not needed, and no open nodes, so burn baby burn\n _this.removeBlockFromCache(block);\n }\n });\n };\n RowNodeCache.prototype.postCreateBlock = function (newBlock) {\n newBlock.addEventListener(rowNodeBlock_1.RowNodeBlock.EVENT_LOAD_COMPLETE, this.onPageLoaded.bind(this));\n this.setBlock(newBlock.getBlockNumber(), newBlock);\n this.purgeBlocksIfNeeded(newBlock);\n this.checkBlockToLoad();\n };\n RowNodeCache.prototype.removeBlockFromCache = function (blockToRemove) {\n if (!blockToRemove) {\n return;\n }\n this.destroyBlock(blockToRemove);\n // we do not want to remove the 'loaded' event listener, as the\n // concurrent loads count needs to be updated when the load is complete\n // if the purged page is in loading state\n };\n // gets called after: 1) block loaded 2) block created 3) cache refresh\n RowNodeCache.prototype.checkBlockToLoad = function () {\n this.cacheParams.rowNodeBlockLoader.checkBlockToLoad();\n };\n RowNodeCache.prototype.checkVirtualRowCount = function (block, lastRow) {\n // if client provided a last row, we always use it, as it could change between server calls\n // if user deleted data and then called refresh on the grid.\n if (typeof lastRow === 'number' && lastRow >= 0) {\n this.virtualRowCount = lastRow;\n this.maxRowFound = true;\n this.onCacheUpdated();\n }\n else if (!this.maxRowFound) {\n // otherwise, see if we need to add some virtual rows\n var lastRowIndex = (block.getBlockNumber() + 1) * this.cacheParams.blockSize;\n var lastRowIndexPlusOverflow = lastRowIndex + this.cacheParams.overflowSize;\n if (this.virtualRowCount < lastRowIndexPlusOverflow) {\n this.virtualRowCount = lastRowIndexPlusOverflow;\n this.onCacheUpdated();\n }\n else if (this.cacheParams.dynamicRowHeight) {\n // the only other time is if dynamic row height, as loading rows\n // will change the height of the block, given the height of the rows\n // is only known after the row is loaded.\n this.onCacheUpdated();\n }\n }\n };\n RowNodeCache.prototype.setVirtualRowCount = function (rowCount, maxRowFound) {\n this.virtualRowCount = rowCount;\n // if undefined is passed, we do not set this value, if one of {true,false}\n // is passed, we do set the value.\n if (utils_1._.exists(maxRowFound)) {\n this.maxRowFound = maxRowFound;\n }\n // if we are still searching, then the row count must not end at the end\n // of a particular page, otherwise the searching will not pop into the\n // next page\n if (!this.maxRowFound) {\n if (this.virtualRowCount % this.cacheParams.blockSize === 0) {\n this.virtualRowCount++;\n }\n }\n this.onCacheUpdated();\n };\n RowNodeCache.prototype.forEachNodeDeep = function (callback, sequence) {\n var _this = this;\n if (sequence === void 0) { sequence = new utils_1.NumberSequence(); }\n this.forEachBlockInOrder(function (block) {\n block.forEachNodeDeep(callback, sequence, _this.virtualRowCount);\n });\n };\n RowNodeCache.prototype.forEachBlockInOrder = function (callback) {\n var ids = this.getBlockIdsSorted();\n this.forEachBlockId(ids, callback);\n };\n RowNodeCache.prototype.forEachBlockInReverseOrder = function (callback) {\n var ids = this.getBlockIdsSorted().reverse();\n this.forEachBlockId(ids, callback);\n };\n RowNodeCache.prototype.forEachBlockId = function (ids, callback) {\n var _this = this;\n ids.forEach(function (id) {\n var block = _this.blocks[id];\n callback(block, id);\n });\n };\n RowNodeCache.prototype.getBlockIdsSorted = function () {\n // get all page id's as NUMBERS (not strings, as we need to sort as numbers) and in descending order\n var numberComparator = function (a, b) { return a - b; }; // default comparator for array is string comparison\n var blockIds = Object.keys(this.blocks).map(function (idStr) { return parseInt(idStr, 10); }).sort(numberComparator);\n return blockIds;\n };\n RowNodeCache.prototype.getBlock = function (blockId) {\n return this.blocks[blockId];\n };\n RowNodeCache.prototype.setBlock = function (id, block) {\n this.blocks[id] = block;\n this.blockCount++;\n this.cacheParams.rowNodeBlockLoader.addBlock(block);\n };\n RowNodeCache.prototype.destroyBlock = function (block) {\n delete this.blocks[block.getBlockNumber()];\n block.destroy();\n this.blockCount--;\n this.cacheParams.rowNodeBlockLoader.removeBlock(block);\n };\n // gets called 1) row count changed 2) cache purged 3) items inserted\n RowNodeCache.prototype.onCacheUpdated = function () {\n if (this.isActive()) {\n // this results in both row models (infinite and server side) firing ModelUpdated,\n // however server side row model also updates the row indexes first\n var event_1 = {\n type: RowNodeCache.EVENT_CACHE_UPDATED\n };\n this.dispatchEvent(event_1);\n }\n };\n RowNodeCache.prototype.purgeCache = function () {\n var _this = this;\n this.forEachBlockInOrder(function (block) { return _this.removeBlockFromCache(block); });\n // re-initialise cache - this ensures a cache with no rows can reload when purged!\n this.virtualRowCount = this.cacheParams.initialRowCount;\n this.maxRowFound = false;\n this.onCacheUpdated();\n };\n RowNodeCache.prototype.getRowNodesInRange = function (firstInRange, lastInRange) {\n var _this = this;\n var result = [];\n var lastBlockId = -1;\n var inActiveRange = false;\n var numberSequence = new utils_1.NumberSequence();\n // if only one node passed, we start the selection at the top\n if (utils_1._.missing(firstInRange)) {\n inActiveRange = true;\n }\n var foundGapInSelection = false;\n this.forEachBlockInOrder(function (block, id) {\n if (foundGapInSelection) {\n return;\n }\n if (inActiveRange && (lastBlockId + 1 !== id)) {\n foundGapInSelection = true;\n return;\n }\n lastBlockId = id;\n block.forEachNodeShallow(function (rowNode) {\n var hitFirstOrLast = rowNode === firstInRange || rowNode === lastInRange;\n if (inActiveRange || hitFirstOrLast) {\n result.push(rowNode);\n }\n if (hitFirstOrLast) {\n inActiveRange = !inActiveRange;\n }\n }, numberSequence, _this.virtualRowCount);\n });\n // inActiveRange will be still true if we never hit the second rowNode\n var invalidRange = foundGapInSelection || inActiveRange;\n return invalidRange ? [] : result;\n };\n RowNodeCache.EVENT_CACHE_UPDATED = 'cacheUpdated';\n // this property says how many empty blocks should be in a cache, eg if scrolls down fast and creates 10\n // blocks all for loading, the grid will only load the last 2 - it will assume the blocks the user quickly\n // scrolled over are not needed to be loaded.\n RowNodeCache.MAX_EMPTY_BLOCKS_TO_KEEP = 2;\n return RowNodeCache;\n}(beanStub_1.BeanStub));\nexports.RowNodeCache = RowNodeCache;\n","/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.2\n * @link http://www.ag-grid.com/\n * @license MIT\n */\n\"use strict\";\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar context_1 = require(\"../context/context\");\nvar sortController_1 = require(\"../sortController\");\nvar valueService_1 = require(\"../valueService/valueService\");\nvar gridOptionsWrapper_1 = require(\"../gridOptionsWrapper\");\nvar columnController_1 = require(\"../columnController/columnController\");\nvar utils_1 = require(\"../utils\");\nvar SortService = /** @class */ (function () {\n function SortService() {\n }\n SortService.prototype.init = function () {\n this.postSortFunc = this.gridOptionsWrapper.getPostSortFunc();\n };\n SortService.prototype.sort = function (sortOptions, sortActive, deltaSort, dirtyLeafNodes, changedPath, noAggregations) {\n var _this = this;\n var callback = function (rowNode) {\n // we clear out the 'pull down open parents' first, as the values mix up the sorting\n _this.pullDownGroupDataForHideOpenParents(rowNode.childrenAfterFilter, true);\n // Javascript sort is non deterministic when all the array items are equals, ie Comparator always returns 0,\n // so to ensure the array keeps its order, add an additional sorting condition manually, in this case we\n // are going to inspect the original array position. This is what sortedRowNodes is for.\n if (sortActive) {\n var sortedRowNodes = deltaSort ?\n _this.doDeltaSort(rowNode, sortOptions, dirtyLeafNodes, changedPath, noAggregations)\n : _this.doFullSort(rowNode, sortOptions);\n rowNode.childrenAfterSort = sortedRowNodes.map(function (sorted) { return sorted.rowNode; });\n }\n else {\n rowNode.childrenAfterSort = rowNode.childrenAfterFilter.slice(0);\n }\n _this.updateChildIndexes(rowNode);\n if (_this.postSortFunc) {\n _this.postSortFunc(rowNode.childrenAfterSort);\n }\n };\n changedPath.forEachChangedNodeDepthFirst(callback);\n this.updateGroupDataForHiddenOpenParents(changedPath);\n };\n SortService.prototype.doFullSort = function (rowNode, sortOptions) {\n var sortedRowNodes = rowNode.childrenAfterFilter\n .map(this.mapNodeToSortedNode.bind(this));\n sortedRowNodes.sort(this.compareRowNodes.bind(this, sortOptions));\n return sortedRowNodes;\n };\n SortService.prototype.mapNodeToSortedNode = function (rowNode, pos) {\n return { currentPos: pos, rowNode: rowNode };\n };\n SortService.prototype.doDeltaSort = function (rowNode, sortOptions, dirtyLeafNodes, changedPath, noAggregations) {\n // clean nodes will be a list of all row nodes that remain in the set\n // and ordered. we start with the old sorted set and take out any nodes\n // that were removed or changed (but not added, added doesn't make sense,\n // if a node was added, there is no way it could be here from last time).\n var cleanNodes = rowNode.childrenAfterSort\n .filter(function (rowNode) {\n // take out all nodes that were changed as part of the current transaction.\n // a changed node could a) be in a different sort position or b) may\n // no longer be in this set as the changed node may not pass filtering,\n // or be in a different group.\n var passesDirtyNodesCheck = !dirtyLeafNodes[rowNode.id];\n // also remove group nodes in the changed path, as they can have different aggregate\n // values which could impact the sort order.\n // note: changed path is not active if a) no value columns or b) no transactions. it is never\n // (b) in deltaSort as we only do deltaSort for transactions. for (a) if no value columns, then\n // there is no value in the group that could of changed (ie no aggregate values)\n var passesChangedPathCheck = noAggregations || changedPath.canSkip(rowNode);\n return passesDirtyNodesCheck && passesChangedPathCheck;\n })\n .map(this.mapNodeToSortedNode.bind(this));\n // for fast access below, we map them\n var cleanNodesMapped = {};\n cleanNodes.forEach(function (sortedRowNode) { return cleanNodesMapped[sortedRowNode.rowNode.id] = sortedRowNode.rowNode; });\n // these are all nodes that need to be placed\n var changedNodes = rowNode.childrenAfterFilter\n // ignore nodes in the clean list\n .filter(function (rowNode) { return !cleanNodesMapped[rowNode.id]; })\n .map(this.mapNodeToSortedNode.bind(this));\n // sort changed nodes. note that we don't need to sort cleanNodes as they are\n // already sorted from last time.\n changedNodes.sort(this.compareRowNodes.bind(this, sortOptions));\n if (changedNodes.length === 0) {\n return cleanNodes;\n }\n else if (cleanNodes.length === 0) {\n return changedNodes;\n }\n else {\n return this.mergeSortedArrays(sortOptions, cleanNodes, changedNodes);\n }\n };\n // Merge two sorted arrays into each other\n SortService.prototype.mergeSortedArrays = function (sortOptions, arr1, arr2) {\n var res = [];\n var i = 0;\n var j = 0;\n // Traverse both array, adding them in order\n while (i < arr1.length && j < arr2.length) {\n // Check if current element of first\n // array is smaller than current element\n // of second array. If yes, store first\n // array element and increment first array\n // index. Otherwise do same with second array\n var compareResult = this.compareRowNodes(sortOptions, arr1[i], arr2[j]);\n if (compareResult < 0) {\n res.push(arr1[i++]);\n }\n else {\n res.push(arr2[j++]);\n }\n }\n // add remaining from arr1\n while (i < arr1.length) {\n res.push(arr1[i++]);\n }\n // add remaining from arr2\n while (j < arr2.length) {\n res.push(arr2[j++]);\n }\n return res;\n };\n SortService.prototype.compareRowNodes = function (sortOptions, sortedNodeA, sortedNodeB) {\n var nodeA = sortedNodeA.rowNode;\n var nodeB = sortedNodeB.rowNode;\n // Iterate columns, return the first that doesn't match\n for (var i = 0, len = sortOptions.length; i < len; i++) {\n var sortOption = sortOptions[i];\n // let compared = compare(nodeA, nodeB, sortOption.column, sortOption.inverter === -1);\n var isInverted = sortOption.inverter === -1;\n var valueA = this.getValue(nodeA, sortOption.column);\n var valueB = this.getValue(nodeB, sortOption.column);\n var comparatorResult = void 0;\n if (sortOption.column.getColDef().comparator) {\n //if comparator provided, use it\n comparatorResult = sortOption.column.getColDef().comparator(valueA, valueB, nodeA, nodeB, isInverted);\n }\n else {\n //otherwise do our own comparison\n comparatorResult = utils_1._.defaultComparator(valueA, valueB, this.gridOptionsWrapper.isAccentedSort());\n }\n if (comparatorResult !== 0) {\n return comparatorResult * sortOption.inverter;\n }\n }\n // All matched, we make is so that the original sort order is kept:\n return sortedNodeA.currentPos - sortedNodeB.currentPos;\n };\n SortService.prototype.getValue = function (nodeA, column) {\n return this.valueService.getValue(column, nodeA);\n };\n SortService.prototype.updateChildIndexes = function (rowNode) {\n if (utils_1._.missing(rowNode.childrenAfterSort)) {\n return;\n }\n var listToSort = rowNode.childrenAfterSort;\n for (var i = 0; i < listToSort.length; i++) {\n var child = listToSort[i];\n var firstChild = i === 0;\n var lastChild = i === rowNode.childrenAfterSort.length - 1;\n child.setFirstChild(firstChild);\n child.setLastChild(lastChild);\n child.setChildIndex(i);\n }\n };\n SortService.prototype.updateGroupDataForHiddenOpenParents = function (changedPath) {\n var _this = this;\n if (!this.gridOptionsWrapper.isGroupHideOpenParents()) {\n return;\n }\n // recurse breadth first over group nodes after sort to 'pull down' group data to child groups\n var callback = function (rowNode) {\n _this.pullDownGroupDataForHideOpenParents(rowNode.childrenAfterSort, false);\n rowNode.childrenAfterSort.forEach(function (child) {\n if (child.hasChildren()) {\n callback(child);\n }\n });\n };\n changedPath.executeFromRootNode(function (rowNode) { return callback(rowNode); });\n };\n SortService.prototype.pullDownGroupDataForHideOpenParents = function (rowNodes, clearOperation) {\n var _this = this;\n if (utils_1._.missing(rowNodes)) {\n return;\n }\n if (!this.gridOptionsWrapper.isGroupHideOpenParents()) {\n return;\n }\n rowNodes.forEach(function (childRowNode) {\n var groupDisplayCols = _this.columnController.getGroupDisplayColumns();\n groupDisplayCols.forEach(function (groupDisplayCol) {\n var showRowGroup = groupDisplayCol.getColDef().showRowGroup;\n if (typeof showRowGroup !== 'string') {\n console.error('ag-Grid: groupHideOpenParents only works when specifying specific columns for colDef.showRowGroup');\n return;\n }\n var displayingGroupKey = showRowGroup;\n var rowGroupColumn = _this.columnController.getPrimaryColumn(displayingGroupKey);\n var thisRowNodeMatches = rowGroupColumn === childRowNode.rowGroupColumn;\n if (thisRowNodeMatches) {\n return;\n }\n if (clearOperation) {\n // if doing a clear operation, we clear down the value for every possible group column\n childRowNode.setGroupValue(groupDisplayCol.getId(), null);\n }\n else {\n // if doing a set operation, we set only where the pull down is to occur\n var parentToStealFrom = childRowNode.getFirstChildOfFirstChild(rowGroupColumn);\n if (parentToStealFrom) {\n childRowNode.setGroupValue(groupDisplayCol.getId(), parentToStealFrom.key);\n }\n }\n });\n });\n };\n __decorate([\n context_1.Autowired('sortController'),\n __metadata(\"design:type\", sortController_1.SortController)\n ], SortService.prototype, \"sortController\", void 0);\n __decorate([\n context_1.Autowired('columnController'),\n __metadata(\"design:type\", columnController_1.ColumnController)\n ], SortService.prototype, \"columnController\", void 0);\n __decorate([\n context_1.Autowired('valueService'),\n __metadata(\"design:type\", valueService_1.ValueService)\n ], SortService.prototype, \"valueService\", void 0);\n __decorate([\n context_1.Autowired('gridOptionsWrapper'),\n __metadata(\"design:type\", gridOptionsWrapper_1.GridOptionsWrapper)\n ], SortService.prototype, \"gridOptionsWrapper\", void 0);\n __decorate([\n context_1.PostConstruct,\n __metadata(\"design:type\", Function),\n __metadata(\"design:paramtypes\", []),\n __metadata(\"design:returntype\", void 0)\n ], SortService.prototype, \"init\", null);\n SortService = __decorate([\n context_1.Bean('sortService')\n ], SortService);\n return SortService;\n}());\nexports.SortService = SortService;\n","/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.2\n * @link http://www.ag-grid.com/\n * @license MIT\n */\n\"use strict\";\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar constants_1 = require(\"../../constants\");\nvar gridOptionsWrapper_1 = require(\"../../gridOptionsWrapper\");\nvar columnApi_1 = require(\"../../columnController/columnApi\");\nvar columnController_1 = require(\"../../columnController/columnController\");\nvar filterManager_1 = require(\"../../filter/filterManager\");\nvar rowNode_1 = require(\"../../entities/rowNode\");\nvar eventService_1 = require(\"../../eventService\");\nvar events_1 = require(\"../../events\");\nvar context_1 = require(\"../../context/context\");\nvar selectionController_1 = require(\"../../selectionController\");\nvar clientSideNodeManager_1 = require(\"./clientSideNodeManager\");\nvar changedPath_1 = require(\"./changedPath\");\nvar valueService_1 = require(\"../../valueService/valueService\");\nvar valueCache_1 = require(\"../../valueService/valueCache\");\nvar gridApi_1 = require(\"../../gridApi\");\nvar utils_1 = require(\"../../utils\");\nvar RecursionType;\n(function (RecursionType) {\n RecursionType[RecursionType[\"Normal\"] = 0] = \"Normal\";\n RecursionType[RecursionType[\"AfterFilter\"] = 1] = \"AfterFilter\";\n RecursionType[RecursionType[\"AfterFilterAndSort\"] = 2] = \"AfterFilterAndSort\";\n RecursionType[RecursionType[\"PivotNodes\"] = 3] = \"PivotNodes\";\n})(RecursionType || (RecursionType = {}));\nvar ClientSideRowModel = /** @class */ (function () {\n function ClientSideRowModel() {\n }\n ClientSideRowModel.prototype.init = function () {\n var refreshEverythingFunc = this.refreshModel.bind(this, { step: constants_1.Constants.STEP_EVERYTHING });\n var refreshEverythingAfterColsChangedFunc = this.refreshModel.bind(this, { step: constants_1.Constants.STEP_EVERYTHING, afterColumnsChanged: true });\n this.eventService.addModalPriorityEventListener(events_1.Events.EVENT_COLUMN_EVERYTHING_CHANGED, refreshEverythingAfterColsChangedFunc);\n this.eventService.addModalPriorityEventListener(events_1.Events.EVENT_COLUMN_ROW_GROUP_CHANGED, refreshEverythingFunc);\n this.eventService.addModalPriorityEventListener(events_1.Events.EVENT_COLUMN_VALUE_CHANGED, this.onValueChanged.bind(this));\n this.eventService.addModalPriorityEventListener(events_1.Events.EVENT_COLUMN_PIVOT_CHANGED, this.refreshModel.bind(this, { step: constants_1.Constants.STEP_PIVOT }));\n this.eventService.addModalPriorityEventListener(events_1.Events.EVENT_ROW_GROUP_OPENED, this.onRowGroupOpened.bind(this));\n this.eventService.addModalPriorityEventListener(events_1.Events.EVENT_FILTER_CHANGED, this.onFilterChanged.bind(this));\n this.eventService.addModalPriorityEventListener(events_1.Events.EVENT_SORT_CHANGED, this.onSortChanged.bind(this));\n this.eventService.addModalPriorityEventListener(events_1.Events.EVENT_COLUMN_PIVOT_MODE_CHANGED, refreshEverythingFunc);\n var refreshMapFunc = this.refreshModel.bind(this, {\n step: constants_1.Constants.STEP_MAP,\n keepRenderedRows: true,\n animate: true\n });\n this.gridOptionsWrapper.addEventListener(gridOptionsWrapper_1.GridOptionsWrapper.PROP_GROUP_REMOVE_SINGLE_CHILDREN, refreshMapFunc);\n this.gridOptionsWrapper.addEventListener(gridOptionsWrapper_1.GridOptionsWrapper.PROP_GROUP_REMOVE_LOWEST_SINGLE_CHILDREN, refreshMapFunc);\n this.rootNode = new rowNode_1.RowNode();\n this.nodeManager = new clientSideNodeManager_1.ClientSideNodeManager(this.rootNode, this.gridOptionsWrapper, this.context, this.eventService, this.columnController, this.gridApi, this.columnApi, this.selectionController);\n this.context.wireBean(this.rootNode);\n };\n ClientSideRowModel.prototype.ensureRowHeightsValid = function (startPixel, endPixel, startLimitIndex, endLimitIndex) {\n var atLeastOneChange;\n var res = false;\n // we do this multiple times as changing the row heights can also change the first and last rows,\n // so the first pass can make lots of rows smaller, which means the second pass we end up changing\n // more rows.\n do {\n atLeastOneChange = false;\n var rowAtStartPixel = this.getRowIndexAtPixel(startPixel);\n var rowAtEndPixel = this.getRowIndexAtPixel(endPixel);\n // keep check to current page if doing pagination\n var firstRow = Math.max(rowAtStartPixel, startLimitIndex);\n var lastRow = Math.min(rowAtEndPixel, endLimitIndex);\n for (var rowIndex = firstRow; rowIndex <= lastRow; rowIndex++) {\n var rowNode = this.getRow(rowIndex);\n if (rowNode.rowHeightEstimated) {\n var rowHeight = this.gridOptionsWrapper.getRowHeightForNode(rowNode);\n rowNode.setRowHeight(rowHeight.height);\n atLeastOneChange = true;\n res = true;\n }\n }\n if (atLeastOneChange) {\n this.setRowTops();\n }\n } while (atLeastOneChange);\n return res;\n };\n ClientSideRowModel.prototype.setRowTops = function () {\n var nextRowTop = 0;\n for (var i = 0; i < this.rowsToDisplay.length; i++) {\n // we don't estimate if doing fullHeight or autoHeight, as all rows get rendered all the time\n // with these two layouts.\n var allowEstimate = this.gridOptionsWrapper.getDomLayout() === constants_1.Constants.DOM_LAYOUT_NORMAL;\n var rowNode = this.rowsToDisplay[i];\n if (utils_1._.missing(rowNode.rowHeight)) {\n var rowHeight = this.gridOptionsWrapper.getRowHeightForNode(rowNode, allowEstimate);\n rowNode.setRowHeight(rowHeight.height, rowHeight.estimated);\n }\n rowNode.setRowTop(nextRowTop);\n rowNode.setRowIndex(i);\n nextRowTop += rowNode.rowHeight;\n }\n };\n ClientSideRowModel.prototype.resetRowTops = function (rowNode, changedPath) {\n rowNode.clearRowTop();\n if (rowNode.hasChildren()) {\n if (rowNode.childrenAfterGroup) {\n // if a changedPath is active, it means we are here because of a transaction update or\n // a change detection. neither of these impacts the open/closed state of groups. so if\n // a group is not open this time, it was not open last time. so we know all closed groups\n // already have their top positions cleared. so there is no need to traverse all the way\n // when changedPath is active and the rowNode is not expanded.\n var skipChildren = changedPath.isActive() && !rowNode.expanded;\n if (!skipChildren) {\n for (var i = 0; i < rowNode.childrenAfterGroup.length; i++) {\n this.resetRowTops(rowNode.childrenAfterGroup[i], changedPath);\n }\n }\n }\n if (rowNode.sibling) {\n rowNode.sibling.clearRowTop();\n }\n }\n if (rowNode.detailNode) {\n rowNode.detailNode.clearRowTop();\n }\n };\n // returns false if row was moved, otherwise true\n ClientSideRowModel.prototype.ensureRowAtPixel = function (rowNode, pixel) {\n var indexAtPixelNow = this.getRowIndexAtPixel(pixel);\n var rowNodeAtPixelNow = this.getRow(indexAtPixelNow);\n if (rowNodeAtPixelNow === rowNode) {\n return false;\n }\n utils_1._.removeFromArray(this.rootNode.allLeafChildren, rowNode);\n utils_1._.insertIntoArray(this.rootNode.allLeafChildren, rowNode, indexAtPixelNow);\n this.refreshModel({\n step: constants_1.Constants.STEP_EVERYTHING,\n keepRenderedRows: true,\n animate: true,\n keepEditingRows: true\n });\n return true;\n };\n ClientSideRowModel.prototype.isLastRowFound = function () {\n return true;\n };\n ClientSideRowModel.prototype.getRowCount = function () {\n if (this.rowsToDisplay) {\n return this.rowsToDisplay.length;\n }\n else {\n return 0;\n }\n };\n ClientSideRowModel.prototype.getTopLevelRowCount = function () {\n var showingRootNode = this.rowsToDisplay && this.rowsToDisplay[0] === this.rootNode;\n if (showingRootNode) {\n return 1;\n }\n else {\n return this.rootNode.childrenAfterFilter ? this.rootNode.childrenAfterFilter.length : 0;\n }\n };\n ClientSideRowModel.prototype.getTopLevelRowDisplayedIndex = function (topLevelIndex) {\n var showingRootNode = this.rowsToDisplay && this.rowsToDisplay[0] === this.rootNode;\n if (showingRootNode) {\n return topLevelIndex;\n }\n else {\n var rowNode = this.rootNode.childrenAfterSort[topLevelIndex];\n if (this.gridOptionsWrapper.isGroupHideOpenParents()) {\n // if hideOpenParents, and this row open, then this row is now displayed at this index, first child is\n while (rowNode.expanded && rowNode.childrenAfterSort && rowNode.childrenAfterSort.length > 0) {\n rowNode = rowNode.childrenAfterSort[0];\n }\n }\n return rowNode.rowIndex;\n }\n };\n ClientSideRowModel.prototype.getRowBounds = function (index) {\n if (utils_1._.missing(this.rowsToDisplay)) {\n return null;\n }\n var rowNode = this.rowsToDisplay[index];\n if (rowNode) {\n return {\n rowTop: rowNode.rowTop,\n rowHeight: rowNode.rowHeight\n };\n }\n else {\n return null;\n }\n };\n ClientSideRowModel.prototype.onRowGroupOpened = function () {\n var animate = this.gridOptionsWrapper.isAnimateRows();\n this.refreshModel({ step: constants_1.Constants.STEP_MAP, keepRenderedRows: true, animate: animate });\n };\n ClientSideRowModel.prototype.onFilterChanged = function () {\n var animate = this.gridOptionsWrapper.isAnimateRows();\n this.refreshModel({ step: constants_1.Constants.STEP_FILTER, keepRenderedRows: true, animate: animate });\n };\n ClientSideRowModel.prototype.onSortChanged = function () {\n var animate = this.gridOptionsWrapper.isAnimateRows();\n this.refreshModel({ step: constants_1.Constants.STEP_SORT, keepRenderedRows: true, animate: animate, keepEditingRows: true });\n };\n ClientSideRowModel.prototype.getType = function () {\n return constants_1.Constants.ROW_MODEL_TYPE_CLIENT_SIDE;\n };\n ClientSideRowModel.prototype.onValueChanged = function () {\n if (this.columnController.isPivotActive()) {\n this.refreshModel({ step: constants_1.Constants.STEP_PIVOT });\n }\n else {\n this.refreshModel({ step: constants_1.Constants.STEP_AGGREGATE });\n }\n };\n ClientSideRowModel.prototype.createChangePath = function (rowNodeTransactions) {\n // for updates, if the row is updated at all, then we re-calc all the values\n // in that row. we could compare each value to each old value, however if we\n // did this, we would be calling the valueService twice, once on the old value\n // and once on the new value. so it's less valueGetter calls if we just assume\n // each column is different. that way the changedPath is used so that only\n // the impacted parent rows are recalculated, parents who's children have\n // not changed are not impacted.\n var noTransactions = utils_1._.missingOrEmpty(rowNodeTransactions);\n var changedPath = new changedPath_1.ChangedPath(false, this.rootNode);\n if (noTransactions || this.gridOptionsWrapper.isTreeData()) {\n changedPath.setInactive();\n }\n return changedPath;\n };\n ClientSideRowModel.prototype.refreshModel = function (params) {\n // this goes through the pipeline of stages. what's in my head is similar\n // to the diagram on this page:\n // http://commons.apache.org/sandbox/commons-pipeline/pipeline_basics.html\n // however we want to keep the results of each stage, hence we manually call\n // each step rather than have them chain each other.\n var _this = this;\n // fallthrough in below switch is on purpose,\n // eg if STEP_FILTER, then all steps below this\n // step get done\n // let start: number;\n // console.log('======= start =======');\n var changedPath = this.createChangePath(params.rowNodeTransactions);\n switch (params.step) {\n case constants_1.Constants.STEP_EVERYTHING:\n // start = new Date().getTime();\n this.doRowGrouping(params.groupState, params.rowNodeTransactions, params.rowNodeOrder, changedPath, params.afterColumnsChanged);\n // console.log('rowGrouping = ' + (new Date().getTime() - start));\n case constants_1.Constants.STEP_FILTER:\n // start = new Date().getTime();\n this.doFilter(changedPath);\n // console.log('filter = ' + (new Date().getTime() - start));\n case constants_1.Constants.STEP_PIVOT:\n this.doPivot(changedPath);\n case constants_1.Constants.STEP_AGGREGATE: // depends on agg fields\n // start = new Date().getTime();\n this.doAggregate(changedPath);\n // console.log('aggregation = ' + (new Date().getTime() - start));\n case constants_1.Constants.STEP_SORT:\n // start = new Date().getTime();\n this.doSort(params.rowNodeTransactions, changedPath);\n // console.log('sort = ' + (new Date().getTime() - start));\n case constants_1.Constants.STEP_MAP:\n // start = new Date().getTime();\n this.doRowsToDisplay();\n // console.log('rowsToDisplay = ' + (new Date().getTime() - start));\n }\n // set all row tops to null, then set row tops on all visible rows. if we don't\n // do this, then the algorithm below only sets row tops, old row tops from old rows\n // will still lie around\n this.resetRowTops(this.rootNode, changedPath);\n this.setRowTops();\n var event = {\n type: events_1.Events.EVENT_MODEL_UPDATED,\n api: this.gridApi,\n columnApi: this.columnApi,\n animate: params.animate,\n keepRenderedRows: params.keepRenderedRows,\n newData: params.newData,\n newPage: false\n };\n this.eventService.dispatchEvent(event);\n if (this.$scope) {\n window.setTimeout(function () {\n _this.$scope.$apply();\n }, 0);\n }\n };\n ClientSideRowModel.prototype.isEmpty = function () {\n var rowsMissing;\n var doingLegacyTreeData = utils_1._.exists(this.gridOptionsWrapper.getNodeChildDetailsFunc());\n if (doingLegacyTreeData) {\n rowsMissing = utils_1._.missing(this.rootNode.childrenAfterGroup) || this.rootNode.childrenAfterGroup.length === 0;\n }\n else {\n rowsMissing = utils_1._.missing(this.rootNode.allLeafChildren) || this.rootNode.allLeafChildren.length === 0;\n }\n var empty = utils_1._.missing(this.rootNode) || rowsMissing || !this.columnController.isReady();\n return empty;\n };\n ClientSideRowModel.prototype.isRowsToRender = function () {\n return utils_1._.exists(this.rowsToDisplay) && this.rowsToDisplay.length > 0;\n };\n ClientSideRowModel.prototype.getNodesInRangeForSelection = function (firstInRange, lastInRange) {\n // if lastSelectedNode is missing, we start at the first row\n var firstRowHit = !lastInRange;\n var lastRowHit = false;\n var lastRow;\n var result = [];\n var groupsSelectChildren = this.gridOptionsWrapper.isGroupSelectsChildren();\n this.forEachNodeAfterFilterAndSort(function (rowNode) {\n var lookingForLastRow = firstRowHit && !lastRowHit;\n // check if we need to flip the select switch\n if (!firstRowHit) {\n if (rowNode === lastInRange || rowNode === firstInRange) {\n firstRowHit = true;\n }\n }\n var skipThisGroupNode = rowNode.group && groupsSelectChildren;\n if (!skipThisGroupNode) {\n var inRange = firstRowHit && !lastRowHit;\n var childOfLastRow = rowNode.isParentOfNode(lastRow);\n if (inRange || childOfLastRow) {\n result.push(rowNode);\n }\n }\n if (lookingForLastRow) {\n if (rowNode === lastInRange || rowNode === firstInRange) {\n lastRowHit = true;\n if (rowNode === lastInRange) {\n lastRow = lastInRange;\n }\n else {\n lastRow = firstInRange;\n }\n }\n }\n });\n return result;\n };\n ClientSideRowModel.prototype.setDatasource = function (datasource) {\n console.error('ag-Grid: should never call setDatasource on clientSideRowController');\n };\n ClientSideRowModel.prototype.getTopLevelNodes = function () {\n return this.rootNode ? this.rootNode.childrenAfterGroup : null;\n };\n ClientSideRowModel.prototype.getRootNode = function () {\n return this.rootNode;\n };\n ClientSideRowModel.prototype.getRow = function (index) {\n return this.rowsToDisplay[index];\n };\n ClientSideRowModel.prototype.isRowPresent = function (rowNode) {\n return this.rowsToDisplay.indexOf(rowNode) >= 0;\n };\n ClientSideRowModel.prototype.getRowIndexAtPixel = function (pixelToMatch) {\n if (this.isEmpty()) {\n return -1;\n }\n // do binary search of tree\n // http://oli.me.uk/2013/06/08/searching-javascript-arrays-with-a-binary-search/\n var bottomPointer = 0;\n var topPointer = this.rowsToDisplay.length - 1;\n // quick check, if the pixel is out of bounds, then return last row\n if (pixelToMatch <= 0) {\n // if pixel is less than or equal zero, it's always the first row\n return 0;\n }\n var lastNode = utils_1._.last(this.rowsToDisplay);\n if (lastNode.rowTop <= pixelToMatch) {\n return this.rowsToDisplay.length - 1;\n }\n while (true) {\n var midPointer = Math.floor((bottomPointer + topPointer) / 2);\n var currentRowNode = this.rowsToDisplay[midPointer];\n if (this.isRowInPixel(currentRowNode, pixelToMatch)) {\n return midPointer;\n }\n else if (currentRowNode.rowTop < pixelToMatch) {\n bottomPointer = midPointer + 1;\n }\n else if (currentRowNode.rowTop > pixelToMatch) {\n topPointer = midPointer - 1;\n }\n }\n };\n ClientSideRowModel.prototype.isRowInPixel = function (rowNode, pixelToMatch) {\n var topPixel = rowNode.rowTop;\n var bottomPixel = rowNode.rowTop + rowNode.rowHeight;\n var pixelInRow = topPixel <= pixelToMatch && bottomPixel > pixelToMatch;\n return pixelInRow;\n };\n ClientSideRowModel.prototype.getCurrentPageHeight = function () {\n if (this.rowsToDisplay && this.rowsToDisplay.length > 0) {\n var lastRow = utils_1._.last(this.rowsToDisplay);\n var lastPixel = lastRow.rowTop + lastRow.rowHeight;\n return lastPixel;\n }\n else {\n return 0;\n }\n };\n ClientSideRowModel.prototype.forEachLeafNode = function (callback) {\n if (this.rootNode.allLeafChildren) {\n this.rootNode.allLeafChildren.forEach(function (rowNode, index) { return callback(rowNode, index); });\n }\n };\n ClientSideRowModel.prototype.forEachNode = function (callback) {\n this.recursivelyWalkNodesAndCallback(this.rootNode.childrenAfterGroup, callback, RecursionType.Normal, 0);\n };\n ClientSideRowModel.prototype.forEachNodeAfterFilter = function (callback) {\n this.recursivelyWalkNodesAndCallback(this.rootNode.childrenAfterFilter, callback, RecursionType.AfterFilter, 0);\n };\n ClientSideRowModel.prototype.forEachNodeAfterFilterAndSort = function (callback) {\n this.recursivelyWalkNodesAndCallback(this.rootNode.childrenAfterSort, callback, RecursionType.AfterFilterAndSort, 0);\n };\n ClientSideRowModel.prototype.forEachPivotNode = function (callback) {\n this.recursivelyWalkNodesAndCallback([this.rootNode], callback, RecursionType.PivotNodes, 0);\n };\n // iterates through each item in memory, and calls the callback function\n // nodes - the rowNodes to traverse\n // callback - the user provided callback\n // recursion type - need this to know what child nodes to recurse, eg if looking at all nodes, or filtered notes etc\n // index - works similar to the index in forEach in javascript's array function\n ClientSideRowModel.prototype.recursivelyWalkNodesAndCallback = function (nodes, callback, recursionType, index) {\n if (nodes) {\n for (var i = 0; i < nodes.length; i++) {\n var node = nodes[i];\n callback(node, index++);\n // go to the next level if it is a group\n if (node.hasChildren()) {\n // depending on the recursion type, we pick a difference set of children\n var nodeChildren = null;\n switch (recursionType) {\n case RecursionType.Normal:\n nodeChildren = node.childrenAfterGroup;\n break;\n case RecursionType.AfterFilter:\n nodeChildren = node.childrenAfterFilter;\n break;\n case RecursionType.AfterFilterAndSort:\n nodeChildren = node.childrenAfterSort;\n break;\n case RecursionType.PivotNodes:\n // for pivot, we don't go below leafGroup levels\n nodeChildren = !node.leafGroup ? node.childrenAfterSort : null;\n break;\n }\n if (nodeChildren) {\n index = this.recursivelyWalkNodesAndCallback(nodeChildren, callback, recursionType, index);\n }\n }\n }\n }\n return index;\n };\n // it's possible to recompute the aggregate without doing the other parts\n // + gridApi.recomputeAggregates()\n ClientSideRowModel.prototype.doAggregate = function (changedPath) {\n if (this.aggregationStage) {\n this.aggregationStage.execute({ rowNode: this.rootNode, changedPath: changedPath });\n }\n };\n // + gridApi.expandAll()\n // + gridApi.collapseAll()\n ClientSideRowModel.prototype.expandOrCollapseAll = function (expand) {\n var usingTreeData = this.gridOptionsWrapper.isTreeData();\n if (this.rootNode) {\n recursiveExpandOrCollapse(this.rootNode.childrenAfterGroup);\n }\n function recursiveExpandOrCollapse(rowNodes) {\n if (!rowNodes) {\n return;\n }\n rowNodes.forEach(function (rowNode) {\n var shouldExpandOrCollapse = usingTreeData ? utils_1._.exists(rowNode.childrenAfterGroup) : rowNode.group;\n if (shouldExpandOrCollapse) {\n rowNode.expanded = expand;\n recursiveExpandOrCollapse(rowNode.childrenAfterGroup);\n }\n });\n }\n this.refreshModel({ step: constants_1.Constants.STEP_MAP });\n var eventSource = expand ? 'expandAll' : 'collapseAll';\n var event = {\n api: this.gridApi,\n columnApi: this.columnApi,\n type: events_1.Events.EVENT_EXPAND_COLLAPSE_ALL,\n source: eventSource\n };\n this.eventService.dispatchEvent(event);\n };\n ClientSideRowModel.prototype.doSort = function (rowNodeTransactions, changedPath) {\n this.sortStage.execute({\n rowNode: this.rootNode,\n rowNodeTransactions: rowNodeTransactions,\n changedPath: changedPath\n });\n };\n ClientSideRowModel.prototype.doRowGrouping = function (groupState, rowNodeTransactions, rowNodeOrder, changedPath, afterColumnsChanged) {\n var _this = this;\n // grouping is enterprise only, so if service missing, skip the step\n var doingLegacyTreeData = utils_1._.exists(this.gridOptionsWrapper.getNodeChildDetailsFunc());\n if (doingLegacyTreeData) {\n return;\n }\n if (this.groupStage) {\n if (rowNodeTransactions && utils_1._.exists(rowNodeTransactions)) {\n rowNodeTransactions.forEach(function (tran) {\n _this.groupStage.execute({\n rowNode: _this.rootNode,\n rowNodeTransaction: tran,\n rowNodeOrder: rowNodeOrder,\n changedPath: changedPath\n });\n });\n }\n else {\n // groups are about to get disposed, so need to deselect any that are selected\n this.selectionController.removeGroupsFromSelection();\n this.groupStage.execute({\n rowNode: this.rootNode,\n changedPath: changedPath,\n afterColumnsChanged: afterColumnsChanged\n });\n // set open/closed state on groups\n this.restoreGroupState(groupState);\n }\n if (this.gridOptionsWrapper.isGroupSelectsChildren()) {\n this.selectionController.updateGroupsFromChildrenSelections(changedPath);\n }\n }\n else {\n this.rootNode.childrenAfterGroup = this.rootNode.allLeafChildren;\n }\n };\n ClientSideRowModel.prototype.restoreGroupState = function (groupState) {\n if (!groupState) {\n return;\n }\n utils_1._.traverseNodesWithKey(this.rootNode.childrenAfterGroup, function (node, key) {\n // if the group was open last time, then open it this time. however\n // if was not open last time, then don't touch the group, so the 'groupDefaultExpanded'\n // setting will take effect.\n if (typeof groupState[key] === 'boolean') {\n node.expanded = groupState[key];\n }\n });\n };\n ClientSideRowModel.prototype.doFilter = function (changedPath) {\n this.filterStage.execute({ rowNode: this.rootNode, changedPath: changedPath });\n };\n ClientSideRowModel.prototype.doPivot = function (changedPath) {\n if (this.pivotStage) {\n this.pivotStage.execute({ rowNode: this.rootNode, changedPath: changedPath });\n }\n };\n ClientSideRowModel.prototype.getGroupState = function () {\n if (!this.rootNode.childrenAfterGroup || !this.gridOptionsWrapper.isRememberGroupStateWhenNewData()) {\n return null;\n }\n var result = {};\n utils_1._.traverseNodesWithKey(this.rootNode.childrenAfterGroup, function (node, key) { return result[key] = node.expanded; });\n return result;\n };\n ClientSideRowModel.prototype.getCopyOfNodesMap = function () {\n return this.nodeManager.getCopyOfNodesMap();\n };\n ClientSideRowModel.prototype.getRowNode = function (id) {\n return this.nodeManager.getRowNode(id);\n };\n // rows: the rows to put into the model\n ClientSideRowModel.prototype.setRowData = function (rowData) {\n // no need to invalidate cache, as the cache is stored on the rowNode,\n // so new rowNodes means the cache is wiped anyway.\n // remember group state, so we can expand groups that should be expanded\n var groupState = this.getGroupState();\n this.nodeManager.setRowData(rowData);\n // this event kicks off:\n // - clears selection\n // - updates filters\n // - shows 'no rows' overlay if needed\n var rowDataChangedEvent = {\n type: events_1.Events.EVENT_ROW_DATA_CHANGED,\n api: this.gridApi,\n columnApi: this.columnApi\n };\n this.eventService.dispatchEvent(rowDataChangedEvent);\n this.refreshModel({\n step: constants_1.Constants.STEP_EVERYTHING,\n groupState: groupState,\n newData: true\n });\n };\n ClientSideRowModel.prototype.batchUpdateRowData = function (rowDataTransaction, callback) {\n var _this = this;\n if (!this.rowDataTransactionBatch) {\n this.rowDataTransactionBatch = [];\n var waitMillis = this.gridOptionsWrapper.getBatchUpdateWaitMillis();\n window.setTimeout(function () {\n _this.executeBatchUpdateRowData();\n _this.rowDataTransactionBatch = null;\n }, waitMillis);\n }\n this.rowDataTransactionBatch.push({ rowDataTransaction: rowDataTransaction, callback: callback });\n };\n ClientSideRowModel.prototype.executeBatchUpdateRowData = function () {\n var _this = this;\n this.valueCache.onDataChanged();\n var callbackFuncsBound = [];\n var rowNodeTrans = [];\n if (this.rowDataTransactionBatch) {\n this.rowDataTransactionBatch.forEach(function (tranItem) {\n var rowNodeTran = _this.nodeManager.updateRowData(tranItem.rowDataTransaction, null);\n rowNodeTrans.push(rowNodeTran);\n if (tranItem.callback) {\n callbackFuncsBound.push(tranItem.callback.bind(null, rowNodeTran));\n }\n });\n }\n this.commonUpdateRowData(rowNodeTrans);\n // do callbacks in next VM turn so it's async\n if (callbackFuncsBound.length > 0) {\n window.setTimeout(function () {\n callbackFuncsBound.forEach(function (func) { return func(); });\n }, 0);\n }\n };\n ClientSideRowModel.prototype.updateRowData = function (rowDataTran, rowNodeOrder) {\n this.valueCache.onDataChanged();\n var rowNodeTran = this.nodeManager.updateRowData(rowDataTran, rowNodeOrder);\n this.commonUpdateRowData([rowNodeTran], rowNodeOrder);\n return rowNodeTran;\n };\n // common to updateRowData and batchUpdateRowData\n ClientSideRowModel.prototype.commonUpdateRowData = function (rowNodeTrans, rowNodeOrder) {\n this.refreshModel({\n step: constants_1.Constants.STEP_EVERYTHING,\n rowNodeTransactions: rowNodeTrans,\n rowNodeOrder: rowNodeOrder,\n keepRenderedRows: true,\n animate: true,\n keepEditingRows: true\n });\n var event = {\n type: events_1.Events.EVENT_ROW_DATA_UPDATED,\n api: this.gridApi,\n columnApi: this.columnApi\n };\n this.eventService.dispatchEvent(event);\n };\n ClientSideRowModel.prototype.doRowsToDisplay = function () {\n this.rowsToDisplay = this.flattenStage.execute({ rowNode: this.rootNode });\n };\n ClientSideRowModel.prototype.onRowHeightChanged = function () {\n this.refreshModel({ step: constants_1.Constants.STEP_MAP, keepRenderedRows: true, keepEditingRows: true });\n };\n ClientSideRowModel.prototype.resetRowHeights = function () {\n this.forEachNode(function (rowNode) { return rowNode.setRowHeight(null); });\n this.onRowHeightChanged();\n };\n __decorate([\n context_1.Autowired('gridOptionsWrapper'),\n __metadata(\"design:type\", gridOptionsWrapper_1.GridOptionsWrapper)\n ], ClientSideRowModel.prototype, \"gridOptionsWrapper\", void 0);\n __decorate([\n context_1.Autowired('columnController'),\n __metadata(\"design:type\", columnController_1.ColumnController)\n ], ClientSideRowModel.prototype, \"columnController\", void 0);\n __decorate([\n context_1.Autowired('filterManager'),\n __metadata(\"design:type\", filterManager_1.FilterManager)\n ], ClientSideRowModel.prototype, \"filterManager\", void 0);\n __decorate([\n context_1.Autowired('$scope'),\n __metadata(\"design:type\", Object)\n ], ClientSideRowModel.prototype, \"$scope\", void 0);\n __decorate([\n context_1.Autowired('selectionController'),\n __metadata(\"design:type\", selectionController_1.SelectionController)\n ], ClientSideRowModel.prototype, \"selectionController\", void 0);\n __decorate([\n context_1.Autowired('eventService'),\n __metadata(\"design:type\", eventService_1.EventService)\n ], ClientSideRowModel.prototype, \"eventService\", void 0);\n __decorate([\n context_1.Autowired('context'),\n __metadata(\"design:type\", context_1.Context)\n ], ClientSideRowModel.prototype, \"context\", void 0);\n __decorate([\n context_1.Autowired('valueService'),\n __metadata(\"design:type\", valueService_1.ValueService)\n ], ClientSideRowModel.prototype, \"valueService\", void 0);\n __decorate([\n context_1.Autowired('valueCache'),\n __metadata(\"design:type\", valueCache_1.ValueCache)\n ], ClientSideRowModel.prototype, \"valueCache\", void 0);\n __decorate([\n context_1.Autowired('columnApi'),\n __metadata(\"design:type\", columnApi_1.ColumnApi)\n ], ClientSideRowModel.prototype, \"columnApi\", void 0);\n __decorate([\n context_1.Autowired('gridApi'),\n __metadata(\"design:type\", gridApi_1.GridApi)\n ], ClientSideRowModel.prototype, \"gridApi\", void 0);\n __decorate([\n context_1.Autowired('filterStage'),\n __metadata(\"design:type\", Object)\n ], ClientSideRowModel.prototype, \"filterStage\", void 0);\n __decorate([\n context_1.Autowired('sortStage'),\n __metadata(\"design:type\", Object)\n ], ClientSideRowModel.prototype, \"sortStage\", void 0);\n __decorate([\n context_1.Autowired('flattenStage'),\n __metadata(\"design:type\", Object)\n ], ClientSideRowModel.prototype, \"flattenStage\", void 0);\n __decorate([\n context_1.Optional('groupStage'),\n __metadata(\"design:type\", Object)\n ], ClientSideRowModel.prototype, \"groupStage\", void 0);\n __decorate([\n context_1.Optional('aggregationStage'),\n __metadata(\"design:type\", Object)\n ], ClientSideRowModel.prototype, \"aggregationStage\", void 0);\n __decorate([\n context_1.Optional('pivotStage'),\n __metadata(\"design:type\", Object)\n ], ClientSideRowModel.prototype, \"pivotStage\", void 0);\n __decorate([\n context_1.PostConstruct,\n __metadata(\"design:type\", Function),\n __metadata(\"design:paramtypes\", []),\n __metadata(\"design:returntype\", void 0)\n ], ClientSideRowModel.prototype, \"init\", null);\n ClientSideRowModel = __decorate([\n context_1.Bean('rowModel')\n ], ClientSideRowModel);\n return ClientSideRowModel;\n}());\nexports.ClientSideRowModel = ClientSideRowModel;\n","/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.2\n * @link http://www.ag-grid.com/\n * @license MIT\n */\n\"use strict\";\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar context_1 = require(\"../../context/context\");\nvar constants_1 = require(\"../../constants\");\nvar gridOptionsWrapper_1 = require(\"../../gridOptionsWrapper\");\nvar utils_1 = require(\"../../utils\");\nvar ImmutableService = /** @class */ (function () {\n function ImmutableService() {\n }\n ImmutableService.prototype.postConstruct = function () {\n if (this.rowModel.getType() === constants_1.Constants.ROW_MODEL_TYPE_CLIENT_SIDE) {\n this.clientSideRowModel = this.rowModel;\n }\n };\n // converts the setRowData() command to a transaction\n ImmutableService.prototype.createTransactionForRowData = function (data) {\n if (utils_1._.missing(this.clientSideRowModel)) {\n console.error('ag-Grid: ImmutableService only works with ClientSideRowModel');\n return;\n }\n var getRowNodeIdFunc = this.gridOptionsWrapper.getRowNodeIdFunc();\n if (!getRowNodeIdFunc || utils_1._.missing(getRowNodeIdFunc)) {\n console.error('ag-Grid: ImmutableService requires getRowNodeId() callback to be implemented, your row data need IDs!');\n return;\n }\n // convert the data into a transaction object by working out adds, removes and updates\n var transaction = {\n remove: [],\n update: [],\n add: []\n };\n var existingNodesMap = this.clientSideRowModel.getCopyOfNodesMap();\n var suppressSortOrder = this.gridOptionsWrapper.isSuppressMaintainUnsortedOrder();\n var orderMap = suppressSortOrder ? null : {};\n if (utils_1._.exists(data)) {\n // split all the new data in the following:\n // if new, push to 'add'\n // if update, push to 'update'\n // if not changed, do not include in the transaction\n data.forEach(function (dataItem, index) {\n var id = getRowNodeIdFunc(dataItem);\n var existingNode = existingNodesMap[id];\n if (orderMap) {\n orderMap[id] = index;\n }\n if (existingNode) {\n var dataHasChanged = existingNode.data !== dataItem;\n if (dataHasChanged) {\n transaction.update.push(dataItem);\n }\n // otherwise, if data not changed, we just don't include it anywhere, as it's not a delta\n // remove from list, so we know the item is not to be removed\n existingNodesMap[id] = undefined;\n }\n else {\n transaction.add.push(dataItem);\n }\n });\n }\n // at this point, all rows that are left, should be removed\n utils_1._.iterateObject(existingNodesMap, function (id, rowNode) {\n if (rowNode) {\n transaction.remove.push(rowNode.data);\n }\n });\n return [transaction, orderMap];\n };\n __decorate([\n context_1.Autowired('rowModel'),\n __metadata(\"design:type\", Object)\n ], ImmutableService.prototype, \"rowModel\", void 0);\n __decorate([\n context_1.Autowired('gridOptionsWrapper'),\n __metadata(\"design:type\", gridOptionsWrapper_1.GridOptionsWrapper)\n ], ImmutableService.prototype, \"gridOptionsWrapper\", void 0);\n __decorate([\n context_1.PostConstruct,\n __metadata(\"design:type\", Function),\n __metadata(\"design:paramtypes\", []),\n __metadata(\"design:returntype\", void 0)\n ], ImmutableService.prototype, \"postConstruct\", null);\n ImmutableService = __decorate([\n context_1.Bean('immutableService')\n ], ImmutableService);\n return ImmutableService;\n}());\nexports.ImmutableService = ImmutableService;\n","/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.2\n * @link http://www.ag-grid.com/\n * @license MIT\n */\n\"use strict\";\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar gridOptionsWrapper_1 = require(\"../gridOptionsWrapper\");\nvar rowNode_1 = require(\"../entities/rowNode\");\nvar context_1 = require(\"../context/context\");\nvar eventService_1 = require(\"../eventService\");\nvar events_1 = require(\"../events\");\nvar constants_1 = require(\"../constants\");\nvar columnApi_1 = require(\"../columnController/columnApi\");\nvar gridApi_1 = require(\"../gridApi\");\nvar utils_1 = require(\"../utils\");\nvar PinnedRowModel = /** @class */ (function () {\n function PinnedRowModel() {\n }\n PinnedRowModel.prototype.init = function () {\n this.setPinnedTopRowData(this.gridOptionsWrapper.getPinnedTopRowData());\n this.setPinnedBottomRowData(this.gridOptionsWrapper.getPinnedBottomRowData());\n };\n PinnedRowModel.prototype.isEmpty = function (floating) {\n var rows = floating === constants_1.Constants.PINNED_TOP ? this.pinnedTopRows : this.pinnedBottomRows;\n return utils_1._.missingOrEmpty(rows);\n };\n PinnedRowModel.prototype.isRowsToRender = function (floating) {\n return !this.isEmpty(floating);\n };\n PinnedRowModel.prototype.getRowAtPixel = function (pixel, floating) {\n var rows = floating === constants_1.Constants.PINNED_TOP ? this.pinnedTopRows : this.pinnedBottomRows;\n if (utils_1._.missingOrEmpty(rows)) {\n return 0; // this should never happen, just in case, 0 is graceful failure\n }\n for (var i = 0; i < rows.length; i++) {\n var rowNode = rows[i];\n var rowTopPixel = rowNode.rowTop + rowNode.rowHeight - 1;\n // only need to range check against the top pixel, as we are going through the list\n // in order, first row to hit the pixel wins\n if (rowTopPixel >= pixel) {\n return i;\n }\n }\n return rows.length - 1;\n };\n PinnedRowModel.prototype.setPinnedTopRowData = function (rowData) {\n this.pinnedTopRows = this.createNodesFromData(rowData, true);\n var event = {\n type: events_1.Events.EVENT_PINNED_ROW_DATA_CHANGED,\n api: this.gridApi,\n columnApi: this.columnApi\n };\n this.eventService.dispatchEvent(event);\n };\n PinnedRowModel.prototype.setPinnedBottomRowData = function (rowData) {\n this.pinnedBottomRows = this.createNodesFromData(rowData, false);\n var event = {\n type: events_1.Events.EVENT_PINNED_ROW_DATA_CHANGED,\n api: this.gridApi,\n columnApi: this.columnApi\n };\n this.eventService.dispatchEvent(event);\n };\n PinnedRowModel.prototype.createNodesFromData = function (allData, isTop) {\n var _this = this;\n var rowNodes = [];\n if (allData) {\n var nextRowTop_1 = 0;\n allData.forEach(function (dataItem, index) {\n var rowNode = new rowNode_1.RowNode();\n _this.context.wireBean(rowNode);\n rowNode.data = dataItem;\n rowNode.id = (isTop ? 't' : 'b') + \"-\" + index;\n rowNode.rowPinned = isTop ? constants_1.Constants.PINNED_TOP : constants_1.Constants.PINNED_BOTTOM;\n rowNode.setRowTop(nextRowTop_1);\n rowNode.setRowHeight(_this.gridOptionsWrapper.getRowHeightForNode(rowNode).height);\n rowNode.setRowIndex(index);\n nextRowTop_1 += rowNode.rowHeight;\n rowNodes.push(rowNode);\n });\n }\n return rowNodes;\n };\n PinnedRowModel.prototype.getPinnedTopRowData = function () {\n return this.pinnedTopRows;\n };\n PinnedRowModel.prototype.getPinnedBottomRowData = function () {\n return this.pinnedBottomRows;\n };\n PinnedRowModel.prototype.getPinnedTopTotalHeight = function () {\n return this.getTotalHeight(this.pinnedTopRows);\n };\n PinnedRowModel.prototype.getPinnedTopRowCount = function () {\n return this.pinnedTopRows ? this.pinnedTopRows.length : 0;\n };\n PinnedRowModel.prototype.getPinnedBottomRowCount = function () {\n return this.pinnedBottomRows ? this.pinnedBottomRows.length : 0;\n };\n PinnedRowModel.prototype.getPinnedTopRow = function (index) {\n return this.pinnedTopRows[index];\n };\n PinnedRowModel.prototype.getPinnedBottomRow = function (index) {\n return this.pinnedBottomRows[index];\n };\n PinnedRowModel.prototype.forEachPinnedTopRow = function (callback) {\n if (utils_1._.missingOrEmpty(this.pinnedTopRows)) {\n return;\n }\n this.pinnedTopRows.forEach(callback);\n };\n PinnedRowModel.prototype.forEachPinnedBottomRow = function (callback) {\n if (utils_1._.missingOrEmpty(this.pinnedBottomRows)) {\n return;\n }\n this.pinnedBottomRows.forEach(callback);\n };\n PinnedRowModel.prototype.getPinnedBottomTotalHeight = function () {\n return this.getTotalHeight(this.pinnedBottomRows);\n };\n PinnedRowModel.prototype.getTotalHeight = function (rowNodes) {\n if (!rowNodes || rowNodes.length === 0) {\n return 0;\n }\n else {\n var lastNode = utils_1._.last(rowNodes);\n return lastNode.rowTop + lastNode.rowHeight;\n }\n };\n __decorate([\n context_1.Autowired('gridOptionsWrapper'),\n __metadata(\"design:type\", gridOptionsWrapper_1.GridOptionsWrapper)\n ], PinnedRowModel.prototype, \"gridOptionsWrapper\", void 0);\n __decorate([\n context_1.Autowired('eventService'),\n __metadata(\"design:type\", eventService_1.EventService)\n ], PinnedRowModel.prototype, \"eventService\", void 0);\n __decorate([\n context_1.Autowired('context'),\n __metadata(\"design:type\", context_1.Context)\n ], PinnedRowModel.prototype, \"context\", void 0);\n __decorate([\n context_1.Autowired('columnApi'),\n __metadata(\"design:type\", columnApi_1.ColumnApi)\n ], PinnedRowModel.prototype, \"columnApi\", void 0);\n __decorate([\n context_1.Autowired('gridApi'),\n __metadata(\"design:type\", gridApi_1.GridApi)\n ], PinnedRowModel.prototype, \"gridApi\", void 0);\n __decorate([\n context_1.PostConstruct,\n __metadata(\"design:type\", Function),\n __metadata(\"design:paramtypes\", []),\n __metadata(\"design:returntype\", void 0)\n ], PinnedRowModel.prototype, \"init\", null);\n PinnedRowModel = __decorate([\n context_1.Bean('pinnedRowModel')\n ], PinnedRowModel);\n return PinnedRowModel;\n}());\nexports.PinnedRowModel = PinnedRowModel;\n","/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.2\n * @link http://www.ag-grid.com/\n * @license MIT\n */\n\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar context_1 = require(\"../../context/context\");\nvar eventService_1 = require(\"../../eventService\");\nvar events_1 = require(\"../../events\");\nvar logger_1 = require(\"../../logger\");\nvar infiniteBlock_1 = require(\"./infiniteBlock\");\nvar rowNodeCache_1 = require(\"../cache/rowNodeCache\");\nvar gridApi_1 = require(\"../../gridApi\");\nvar columnApi_1 = require(\"../../columnController/columnApi\");\nvar InfiniteCache = /** @class */ (function (_super) {\n __extends(InfiniteCache, _super);\n function InfiniteCache(params) {\n return _super.call(this, params) || this;\n }\n InfiniteCache.prototype.setBeans = function (loggerFactory) {\n this.logger = loggerFactory.create('InfiniteCache');\n };\n InfiniteCache.prototype.init = function () {\n _super.prototype.init.call(this);\n // start load of data, as the virtualRowCount will remain at 0 otherwise,\n // so we need this to kick things off, otherwise grid would never call getRow()\n this.getRow(0);\n };\n InfiniteCache.prototype.moveItemsDown = function (block, moveFromIndex, moveCount) {\n var startRow = block.getStartRow();\n var endRow = block.getEndRow();\n var indexOfLastRowToMove = moveFromIndex + moveCount;\n // all rows need to be moved down below the insertion index\n for (var currentRowIndex = endRow - 1; currentRowIndex >= startRow; currentRowIndex--) {\n // don't move rows at or before the insertion index\n if (currentRowIndex < indexOfLastRowToMove) {\n continue;\n }\n var indexOfNodeWeWant = currentRowIndex - moveCount;\n var nodeForThisIndex = this.getRow(indexOfNodeWeWant, true);\n if (nodeForThisIndex) {\n block.setRowNode(currentRowIndex, nodeForThisIndex);\n }\n else {\n block.setBlankRowNode(currentRowIndex);\n block.setDirty();\n }\n }\n };\n InfiniteCache.prototype.insertItems = function (block, indexToInsert, items) {\n var pageStartRow = block.getStartRow();\n var pageEndRow = block.getEndRow();\n var newRowNodes = [];\n // next stage is insert the rows into this page, if applicable\n for (var index = 0; index < items.length; index++) {\n var rowIndex = indexToInsert + index;\n var currentRowInThisPage = rowIndex >= pageStartRow && rowIndex < pageEndRow;\n if (currentRowInThisPage) {\n var dataItem = items[index];\n var newRowNode = block.setNewData(rowIndex, dataItem);\n newRowNodes.push(newRowNode);\n }\n }\n return newRowNodes;\n };\n InfiniteCache.prototype.insertItemsAtIndex = function (indexToInsert, items) {\n // get all page id's as NUMBERS (not strings, as we need to sort as numbers) and in descending order\n var _this = this;\n var newNodes = [];\n this.forEachBlockInReverseOrder(function (block) {\n var pageEndRow = block.getEndRow();\n // if the insertion is after this page, then this page is not impacted\n if (pageEndRow <= indexToInsert) {\n return;\n }\n _this.moveItemsDown(block, indexToInsert, items.length);\n var newNodesThisPage = _this.insertItems(block, indexToInsert, items);\n newNodesThisPage.forEach(function (rowNode) { return newNodes.push(rowNode); });\n });\n if (this.isMaxRowFound()) {\n this.hack_setVirtualRowCount(this.getVirtualRowCount() + items.length);\n }\n this.onCacheUpdated();\n var event = {\n type: events_1.Events.EVENT_ROW_DATA_UPDATED,\n api: this.gridApi,\n columnApi: this.columnApi\n };\n this.eventService.dispatchEvent(event);\n };\n // the rowRenderer will not pass dontCreatePage, meaning when rendering the grid,\n // it will want new pages in the cache as it asks for rows. only when we are inserting /\n // removing rows via the api is dontCreatePage set, where we move rows between the pages.\n InfiniteCache.prototype.getRow = function (rowIndex, dontCreatePage) {\n if (dontCreatePage === void 0) { dontCreatePage = false; }\n var blockId = Math.floor(rowIndex / this.cacheParams.blockSize);\n var block = this.getBlock(blockId);\n if (!block) {\n if (dontCreatePage) {\n return null;\n }\n else {\n block = this.createBlock(blockId);\n }\n }\n return block.getRow(rowIndex);\n };\n InfiniteCache.prototype.createBlock = function (blockNumber) {\n var newBlock = new infiniteBlock_1.InfiniteBlock(blockNumber, this.cacheParams);\n this.getContext().wireBean(newBlock);\n this.postCreateBlock(newBlock);\n return newBlock;\n };\n // we have this on infinite row model only, not server side row model,\n // because for server side, it would leave the children in inconsistent\n // state - eg if a node had children, but after the refresh it had data\n // for a different row, then the children would be with the wrong row node.\n InfiniteCache.prototype.refreshCache = function () {\n this.forEachBlockInOrder(function (block) { return block.setDirty(); });\n this.checkBlockToLoad();\n };\n __decorate([\n context_1.Autowired('eventService'),\n __metadata(\"design:type\", eventService_1.EventService)\n ], InfiniteCache.prototype, \"eventService\", void 0);\n __decorate([\n context_1.Autowired('columnApi'),\n __metadata(\"design:type\", columnApi_1.ColumnApi)\n ], InfiniteCache.prototype, \"columnApi\", void 0);\n __decorate([\n context_1.Autowired('gridApi'),\n __metadata(\"design:type\", gridApi_1.GridApi)\n ], InfiniteCache.prototype, \"gridApi\", void 0);\n __decorate([\n __param(0, context_1.Qualifier('loggerFactory')),\n __metadata(\"design:type\", Function),\n __metadata(\"design:paramtypes\", [logger_1.LoggerFactory]),\n __metadata(\"design:returntype\", void 0)\n ], InfiniteCache.prototype, \"setBeans\", null);\n __decorate([\n context_1.PostConstruct,\n __metadata(\"design:type\", Function),\n __metadata(\"design:paramtypes\", []),\n __metadata(\"design:returntype\", void 0)\n ], InfiniteCache.prototype, \"init\", null);\n return InfiniteCache;\n}(rowNodeCache_1.RowNodeCache));\nexports.InfiniteCache = InfiniteCache;\n","/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.2\n * @link http://www.ag-grid.com/\n * @license MIT\n */\n\"use strict\";\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar context_1 = require(\"../../context/context\");\nvar rowNode_1 = require(\"../../entities/rowNode\");\nvar gridOptionsWrapper_1 = require(\"../../gridOptionsWrapper\");\nvar selectionController_1 = require(\"../../selectionController\");\nvar eventService_1 = require(\"../../eventService\");\nvar columnController_1 = require(\"../../columnController/columnController\");\nvar utils_1 = require(\"../../utils\");\nvar FlattenStage = /** @class */ (function () {\n function FlattenStage() {\n }\n FlattenStage.prototype.execute = function (params) {\n var rootNode = params.rowNode;\n // even if not doing grouping, we do the mapping, as the client might\n // of passed in data that already has a grouping in it somewhere\n var result = [];\n // putting value into a wrapper so it's passed by reference\n var nextRowTop = { value: 0 };\n var skipLeafNodes = this.columnController.isPivotMode();\n // if we are reducing, and not grouping, then we want to show the root node, as that\n // is where the pivot values are\n var showRootNode = skipLeafNodes && rootNode.leafGroup;\n var topList = showRootNode ? [rootNode] : rootNode.childrenAfterSort;\n this.recursivelyAddToRowsToDisplay(topList, result, nextRowTop, skipLeafNodes, 0);\n // don't show total footer when showRootNode is true (i.e. in pivot mode and no groups)\n var includeGroupTotalFooter = !showRootNode && this.gridOptionsWrapper.isGroupIncludeTotalFooter();\n if (includeGroupTotalFooter) {\n this.ensureFooterNodeExists(rootNode);\n this.addRowNodeToRowsToDisplay(rootNode.sibling, result, nextRowTop, 0);\n }\n return result;\n };\n FlattenStage.prototype.recursivelyAddToRowsToDisplay = function (rowsToFlatten, result, nextRowTop, skipLeafNodes, uiLevel) {\n if (utils_1._.missingOrEmpty(rowsToFlatten)) {\n return;\n }\n var groupSuppressRow = this.gridOptionsWrapper.isGroupSuppressRow();\n var hideOpenParents = this.gridOptionsWrapper.isGroupHideOpenParents();\n // these two are mutually exclusive, so if first set, we don't set the second\n var groupRemoveSingleChildren = this.gridOptionsWrapper.isGroupRemoveSingleChildren();\n var groupRemoveLowestSingleChildren = !groupRemoveSingleChildren && this.gridOptionsWrapper.isGroupRemoveLowestSingleChildren();\n for (var i = 0; i < rowsToFlatten.length; i++) {\n var rowNode = rowsToFlatten[i];\n // check all these cases, for working out if this row should be included in the final mapped list\n var isParent = rowNode.hasChildren();\n var isGroupSuppressedNode = groupSuppressRow && isParent;\n var isSkippedLeafNode = skipLeafNodes && !isParent;\n var isRemovedSingleChildrenGroup = groupRemoveSingleChildren && isParent && rowNode.childrenAfterGroup.length === 1;\n var isRemovedLowestSingleChildrenGroup = groupRemoveLowestSingleChildren && isParent && rowNode.leafGroup && rowNode.childrenAfterGroup.length === 1;\n // hide open parents means when group is open, we don't show it. we also need to make sure the\n // group is expandable in the first place (as leaf groups are not expandable if pivot mode is on).\n // the UI will never allow expanding leaf groups, however the user might via the API (or menu option 'expand all')\n var neverAllowToExpand = skipLeafNodes && rowNode.leafGroup;\n var isHiddenOpenParent = hideOpenParents && rowNode.expanded && (!neverAllowToExpand);\n var thisRowShouldBeRendered = !isSkippedLeafNode && !isGroupSuppressedNode && !isHiddenOpenParent && !isRemovedSingleChildrenGroup && !isRemovedLowestSingleChildrenGroup;\n if (thisRowShouldBeRendered) {\n this.addRowNodeToRowsToDisplay(rowNode, result, nextRowTop, uiLevel);\n }\n // if we are pivoting, we never map below the leaf group\n if (skipLeafNodes && rowNode.leafGroup) {\n continue;\n }\n if (isParent) {\n var excludedParent = isRemovedSingleChildrenGroup || isRemovedLowestSingleChildrenGroup;\n // we traverse the group if it is expended, however we always traverse if the parent node\n // was removed (as the group will never be opened if it is not displayed, we show the children instead)\n if (rowNode.expanded || excludedParent) {\n // if the parent was excluded, then ui level is that of the parent\n var uiLevelForChildren = excludedParent ? uiLevel : uiLevel + 1;\n this.recursivelyAddToRowsToDisplay(rowNode.childrenAfterSort, result, nextRowTop, skipLeafNodes, uiLevelForChildren);\n // put a footer in if user is looking for it\n if (this.gridOptionsWrapper.isGroupIncludeFooter()) {\n this.ensureFooterNodeExists(rowNode);\n this.addRowNodeToRowsToDisplay(rowNode.sibling, result, nextRowTop, uiLevel);\n }\n }\n }\n else if (rowNode.master && rowNode.expanded) {\n var detailNode = this.createDetailNode(rowNode);\n this.addRowNodeToRowsToDisplay(detailNode, result, nextRowTop, uiLevel);\n }\n }\n };\n // duplicated method, it's also in floatingRowModel\n FlattenStage.prototype.addRowNodeToRowsToDisplay = function (rowNode, result, nextRowTop, uiLevel) {\n result.push(rowNode);\n var isGroupMultiAutoColumn = this.gridOptionsWrapper.isGroupMultiAutoColumn();\n rowNode.setUiLevel(isGroupMultiAutoColumn ? 0 : uiLevel);\n };\n FlattenStage.prototype.ensureFooterNodeExists = function (groupNode) {\n // only create footer node once, otherwise we have daemons and\n // the animate screws up with the daemons hanging around\n if (utils_1._.exists(groupNode.sibling)) {\n return;\n }\n var footerNode = new rowNode_1.RowNode();\n this.context.wireBean(footerNode);\n Object.keys(groupNode).forEach(function (key) {\n footerNode[key] = groupNode[key];\n });\n footerNode.footer = true;\n footerNode.rowTop = null;\n footerNode.oldRowTop = null;\n if (utils_1._.exists(footerNode.id)) {\n footerNode.id = 'rowGroupFooter_' + footerNode.id;\n }\n // get both header and footer to reference each other as siblings. this is never undone,\n // only overwritten. so if a group is expanded, then contracted, it will have a ghost\n // sibling - but that's fine, as we can ignore this if the header is contracted.\n footerNode.sibling = groupNode;\n groupNode.sibling = footerNode;\n };\n FlattenStage.prototype.createDetailNode = function (masterNode) {\n if (utils_1._.exists(masterNode.detailNode)) {\n return masterNode.detailNode;\n }\n else {\n var detailNode = new rowNode_1.RowNode();\n this.context.wireBean(detailNode);\n detailNode.detail = true;\n detailNode.selectable = false;\n // flower was renamed to 'detail', but keeping for backwards compatibility\n detailNode.flower = detailNode.detail;\n detailNode.parent = masterNode;\n if (utils_1._.exists(masterNode.id)) {\n detailNode.id = 'detail_' + masterNode.id;\n }\n detailNode.data = masterNode.data;\n detailNode.level = masterNode.level + 1;\n masterNode.detailNode = detailNode;\n masterNode.childFlower = masterNode.detailNode; // for backwards compatibility\n return detailNode;\n }\n };\n __decorate([\n context_1.Autowired('gridOptionsWrapper'),\n __metadata(\"design:type\", gridOptionsWrapper_1.GridOptionsWrapper)\n ], FlattenStage.prototype, \"gridOptionsWrapper\", void 0);\n __decorate([\n context_1.Autowired('selectionController'),\n __metadata(\"design:type\", selectionController_1.SelectionController)\n ], FlattenStage.prototype, \"selectionController\", void 0);\n __decorate([\n context_1.Autowired('eventService'),\n __metadata(\"design:type\", eventService_1.EventService)\n ], FlattenStage.prototype, \"eventService\", void 0);\n __decorate([\n context_1.Autowired('context'),\n __metadata(\"design:type\", context_1.Context)\n ], FlattenStage.prototype, \"context\", void 0);\n __decorate([\n context_1.Autowired('columnController'),\n __metadata(\"design:type\", columnController_1.ColumnController)\n ], FlattenStage.prototype, \"columnController\", void 0);\n FlattenStage = __decorate([\n context_1.Bean('flattenStage')\n ], FlattenStage);\n return FlattenStage;\n}());\nexports.FlattenStage = FlattenStage;\n"],"sourceRoot":""}