{"version":3,"sources":["kendo.treelist.js"],"names":["f","define","$","undefined","is","field","object","not","func","isCellVisible","this","style","display","sortCells","cells","indexAttr","kendo","attr","sort","a","b","indexA","indexB","index","parseInt","leafDataCells","container","rows","find","filter","el","hasClass","length","rowSpan","add","last","createPlaceholders","options","i","level","spans","className","push","kendoDomElement","columnsWidth","cols","colWidth","idx","width","indexOf","syncTableHeight","table1","table2","lockedHeigth","tableHeigth","row","diff","offsetHeight","height","isInputElement","element","isLocked","column","parentColumn","locked","findParentColumnWithChildren","columns","source","rtl","target","targetLocked","findReorderTarget","before","masterColumns","parent","parentColumns","sourceIndex","targetIndex","columnParent","inArray","leafColumns","result","concat","visibleChildColumns","grep","hidden","isVisible","visibleColumns","normalizeColumns","hide","map","extend","flatColumnsInDomOrder","flatColumns","lockedColumns","nonLockedColumns","targetParentContainerIndex","parentColumnsCells","cell","parentCellsWithChildren","offset","prevCells","parentCell","closest","headerRows","eq","prevAll","colSpan","Math","max","getAttribute","childColumnsCells","child","value","colSpanAttr","next","parents","columnParents","inserted","splice","children","columnPosition","cellCounts","updateCellIndex","thead","position","allColumns","depth","temp","updateRowSpans","containerDOMtree","each","attributes","rowspan","removeEmptyRows","emptyRows","shouldRemove","remove","focusTable","table","direct","scrollTop","scrollLeft","msie","browser","edge","setActive","e","focus","one","preventDefault","adjustRowHeight","row1","row2","offsetHeight1","offsetHeight2","isColumnEditable","model","selectable","command","editable","isDirtyColumn","dirty","dirtyFields","isUndefined","isNumber","isNaN","TreeListModel","TreeListDataSource","TreeListPager","Editor","PopupEditor","IncellEditor","TreeList","data","kendoDom","dom","kendoTextElement","text","kendoHtmlElement","html","outerWidth","_outerWidth","keys","outerHeight","_outerHeight","ui","DataBoundWidget","DataSource","ObservableArray","Query","Model","support","kendoTemplate","template","activeElement","_activeElement","isArray","proxy","isPlainObject","Array","prototype","STRING","CHANGE","ITEM_CHANGE","ERROR","PROGRESS","DOT","NS","CLICK","MOUSEDOWN","BEFORE_EDIT","EDIT","PAGE","PAGE_CHANGE","SAVE","SAVE_CHANGES","EXPAND","COLLAPSE","CELL_CLOSE","REMOVE","DATA_CELL","DATABINDING","DATABOUND","CANCEL","TABINDEX","FILTERMENUINIT","FILTERMENUOPEN","COLUMNHIDE","COLUMNSHOW","HEADERCELLS","COLUMNREORDER","COLUMNRESIZE","COLUMNMENUINIT","COLUMNMENUOPEN","COLUMNLOCK","COLUMNUNLOCK","PARENTIDFIELD","DRAGSTART","DRAG","DROP","DRAGEND","NAVROW","NAVCELL","NAVHEADER","ITEMROW","FIRSTNAVITEM","LASTITEMROW","isRtl","HEIGHT","INCELL","INLINE","POPUP","TABLE","classNames","wrapper","header","button","alt","editCell","editRow","dirtyCell","group","gridToolbar","gridHeader","gridHeaderWrap","gridContent","gridContentWrap","gridFilter","footerTemplate","focused","loading","refresh","retry","selected","status","link","withIcon","filterable","icon","iconFilter","iconCollapse","iconExpand","iconHidden","iconPlaceHolder","input","dropPositions","dropTop","dropBottom","dropAdd","dropMiddle","dropDenied","dragStatus","dragClue","dragClueText","defaultCommands","create","imageClass","methodName","createchild","destroy","edit","update","canceledit","cancel","save","excel","pdf","TreeView","Class","init","that","defaultParentId","idField","parentIdField","childrenMap","dataItem","dataItemId","dataItemParentId","dataLength","_childrenMap","idsMap","_idMap","dataMaps","_dataMaps","ids","rootNodes","removeCollapsedSubtreesFromRootNodes","prunedTree","maxDepth","Infinity","removeCollapsedSubtrees","rootNode","childIdx","expanded","TreeQuery","constructor","process","inPlace","query","filterCallback","skip","take","total","filteredChildrenMap","view","prunedData","normalizeGroup","normalizeSort","toArray","processFromRootNodes","range","id","parentId","fields","type","nullable","fn","call","_loaded","get","accept","set","initiator","loaded","shouldSerialize","base","_getDataMaps","schema","modelBase","_addRange","_createNewModel","fromModel","_modelParentIdField","_isPageable","_shouldWrap","_push","operation","_readData","_getData","_data","newData","toJSON","_replaceData","sourceLength","_readAggregates","_aggregateResult","reader","aggregates","_defaultParentId","read","root","_removeChildData","_removeFromDataMaps","pageable","_getChildrenMap","items","_subtree","removedItems","_removeItems","insert","newModel","_insertInDataMaps","_filterCallback","item","_modelIdField","parentSubtree","_parentNode","unshift","parentNode","len","_observeView","_createTreeView","_initIdsMap","_idsMap","_getIdsMap","_getFilteredChildrenMap","filteredChildren","_setFilteredChildrenMap","_initDataMaps","_initChildrenMapForParent","_defaultTreeModelOptions","modelOptions","_modelOptions","_defaultDataItemType","ObservableObject","_calculateAggregates","subtree","pageableChildrenMap","aggregate","_queryProcess","hasLoadedChildren","_processPageableQuery","hasChildren","slice","_processTreeQuery","_replaceWithObservedData","_processDataItemsState","_replaceItemsInDataMaps","dataToAggregate","_dataToAggregate","_replaceInMapWithObservedData","firstDataItem","firstItemParents","_parentNodes","observableArray","directParent","viewIndex","itemType","_insertInIdsMap","_replaceInMap","replacement","itemInArray","itemIndex","dataToReplace","replacementArray","itemToReplace","itemToReplaceId","dataItemIndex","observableItem","_getById","at","key","_insertInChildrenMap","itemId","_removeFromIdsMap","_removeFromChildrenMap","_indexInChildrenMap","_itemIndexInMap","dataMap","uid","_isLastItemInView","_defaultPageableQueryOptions","page","pageSize","_updateTotalForAction","action","_updateCollapsedTotalForAction","_collapsedTotal","serverPaging","_calculateCollapsedTotal","_setFilterTotal","filterTotal","setDefaultValue","_setFilterCollapsedTotal","serverFiltering","collapsedTotal","_dataWithoutCollapsedSubtrees","_removeCollapsedSubtrees","_processDataItemState","_queueRequest","callback","_modelLoaded","childNodes","_modelError","_error","success","requestParams","_observe","_total","load","method","remote","serverSorting","serverGrouping","serverAggregates","defaultPromise","Deferred","resolve","promise","done","fail","contains","rootId","_byParentId","defaultId","current","defaults","_rootNode","_pageableRootNodes","nodesWithoutParentInView","node","_nodesWithoutParentInView","_parentNodesNotInView","parentInView","_parentInView","_pageableModelLevel","baseFilter","_pageableQueryOptions","_flatData","cancelChanges","_restorePageSizeAfterAddChild","_modelCanceled","_changesCanceled","_setAddChildPageSize","queryOptions","_addChildPageSize","_query","sync","then","_syncEnd","Pager","name","totalPages","dataSource","_filter","ceil","_createDataSource","Observable","bind","events","_fields","_initContainer","createEditable","Editable","clearContainer","change","_isEditable","format","editor","end","close","empty","removeAttr","_attachHandlers","cycleForm","open","window","modal","resizable","draggable","title","visible","formContent","append","_appendTemplate","_appendFields","_appendButtons","Tree","render","appendTo","Window","form","unescape","class","fieldRenderer","commandRenderer","closeHandler","_cancelProxy","_cancel","on","_saveProxy","_save","userTriggered","_detachHandlers","off","trigger","center","_dataSource","_aria","_columns","_layout","_navigatable","_selectable","_sortable","_resizable","_filterable","_attachEvents","_toolbar","_scrollable","_reorderable","_columnMenu","_minScreenSupport","_draggable","_pageable","autoBind","fetch","_hasLockedColumns","widget","addClass","_resizeHandler","resize","notify","move","_dragging","HierarchicalDragAndDrop","$angular","autoScroll","itemSelector","allowedContainers","hintText","separator","join","destination","dest","src","itemFromTarget","tr","content","dragstart","drag","drop","removeClass","dragend","isPrevented","originalSrcParentId","originalSrcIndex","reorderable","dropHintContainer","dropPositionFrom","dropHint","itemFor","tbody","scrollables","lockedContent","touchScroller","scrollable","_wheelScroll","movable","_touchScroller","sender","x","y","delta","lockedDiv","ctrlKey","wheelDeltaY","currentTarget","scrollHeight","clientHeight","_progress","messages","_showStatus","_render","error","isCurrentInHeader","currentIndex","_cancelEditor","_adjustHeight","navigatable","_isActiveInTable","cellIndex","_restoreCurrent","_angularFooters","footer","allAggregates","footerRows","_footerItems","_angularFooter","angular","elements","col","_items","lockedTable","dataItems","n","tmp","message","_contentTree","_lockedContentTree","_hideStatus","show","isHeightSet","contentWrap","toolbar","pagerHeight","pager","scrollbar","css","initialHeight","newHeight","offsetWidth","clientWidth","_resize","_applyLockedContainersWidth","any","hideMinScreenCols","minScreenResizeHandler","minWidth","screenWidth","innerWidth","screen","minScreenWidth","hideColumn","showColumn","unbind","_refreshHandler","_errorHandler","_progressHandler","_navigatableTables","_current","_draggableInstance","_destroyEditor","_destroyPager","_autoExpandable","_dataSourceFetchProxy","lockedHeader","_statusTree","_headerTree","_lockedHeaderColsTree","_lockedContentColsTree","_lockedHeaderTree","sortable","columnMenu","noRows","requestFailed","commands","hierarchy","_toggle","expand","afterModelLoaded","_toggleData","_syncLockedContentHeight","_isIncellEditable","closeCell","always","_togglePageableData","_renderProgress","_refreshPager","collapse","_toggleChildren","event","tables","headerTables","touch","_tableClick","_tableFocus","_tableBlur","_tableKeyDown","td","lockedColumnOffset","active","rowIndex","newCurrent","_updateCurrentAttr","_scrollCurrent","_lastCellIndex","_setCurrent","tableContainer","isInLockedContainer","isInContent","scrollableContainer","_scrollTo","_relatedRow","elementToLowercase","tagName","toLowerCase","isHorizontal","elementOffset","elementOffsetDir","containerScroll","containerOffsetDir","bottomDistance","ieCorrection","firefoxCorrection","offsetLeft","mozilla","abs","_elementId","_currentDataIndex","lockedColumnsCount","_prevVerticalCell","_nextVerticalCell","tmpIndex","currentRowCells","hiddenColumns","_verticalContainer","up","step","floor","headerId","replace","handled","canHandle","isDefaultPrevented","keyCode","UP","_moveUp","shiftKey","DOWN","_moveDown","LEFT","RIGHT","altKey","_handleExpand","_moveRight","_handleCollapse","_moveLeft","PAGEDOWN","_handlePageDown","PAGEUP","_handlePageUp","ENTER","F2","_handleEnterKey","ESC","_handleEscKey","HOME","_handleHome","END","_handleEnd","TAB","_handleTabKey","stopPropagation","ctrl","prev","rowContainer","isInLockedTable","isInBody","currentTable","blur","cancelRow","first","version","document","body","has","focusable","click","_handleEditing","incellEditing","_tabNext","_preventPageSizeRestore","back","switchRow","nextAll","editContainer","isEdited","isIE","opera","triggerHandler","saveRow","isHeader","headerTable","isInput","setTimeout","_setTabIndex","icons","retryButton","_commandClick","_attachCellEditingEventHandlers","multiple","relatedTarget","isLockedCell","clearTimeout","_closeCellTimeout","_commandByName","j","currentName","commandName","parentsUntil","_ensureExpandableColumn","expandableColumns","expandable","lockedCols","encoded","_columnTemplates","_columnAttributes","headerTemplate","convertStyle","properties","declaration","split","trim","camelCase","headerAttributes","layout","addBack","_initVirtualTrees","_renderCols","_renderHeader","_headerColsTree","_contentColsTree","buttons","_buildCommands","_lockedColumns","_nonLockedColumns","_templateColumns","_flushCache","maps","uidAttr","viewChildrenMap","_renderOptions","_dataToRender","_renderedModelLevel","select","_","_absoluteIndex","_angularItems","_clearRenderMap","buttonClass","_viewChildrenMap","_trs","editedColumn","editedColumnIndex","htmlEncode","contentResized","_muteAngularRebind","_togglePagerVisibility","toggle","progress","parentsNotInView","parentNotInView","parentNotInViewId","childId","parentsCopy","parentIndex","_markNodeAsNonRenderable","_skipRenderingMap","nodeId","_adjustRowsHeight","rows2","containers","containersLength","heights","_ths","cellClasses","headerContent","ths","href","data-field","data-title","role","_cols","_clearColsCache","_retrieveFirstColumn","_updateFirstColumnClass","_updateRowSpans","included","_setColumnDataIndexes","_updateColumnCellIndex","_setParentsVisibility","predicate","p","_prepareColumns","parentRow","childRow","totalColSpan","_renderHeaderTree","tree","hasMultiColumnHeaders","rowsToRender","_syncLockedHeaderHeight","lockedWidth","nonLockedWidth","wrapperWidth","modelId","_edit","_tds","_td","_hasFooterTemplate","data-parentId","_footerId","noop","c","renderer","editedColumnField","editColumn","iconClass","columnHasEditCommand","_cellContent","dirtyIndicator","_evalDirtyIndicatorTemplate","_evalColumnTemplate","_evalCustomColumnTemplate","templateSettings","_customTemplateSettings","columnTemplateAlias","paramName","templateString","_dirtyIndicatorTemplate","templateFunction","columnTemplate","dirtyIndicatorTemplate","dirtyField","charAt","expr","Template","_button","data-command","_positionResizeHandle","th","resizeHandle","cellWidth","indicatorWidth","columnResizeHandleWidth","left","top","val","autoFitColumn","contentTable","footerTable","oldColumnWidth","newColumnWidth","totalWidth","visibleLocked","oldWidth","newWidth","_adjustLockedHorizontalScrollBar","treelist","Resizable","handle","start","colSelector","startLocation","location","columnWidth","rtlModifier","minColumnWidth","resizeend","sortableInstance","kendoColumnSorter","filterMenuInstance","filterInit","filterOpen","kendoFilterMenu","_change","_isLocked","useAllItems","multi","Selectable","parseOptions","aria","inputSelectors","continuousItems","_continuousItems","_selectableTarget","SPACEBAR","clear","_lastActive","selectRange","_firstSelectee","lockedItems","nonLockedItems","apply","related","clearSelection","ds","setDataSource","getByUid","_isPopupEditable","_editMode","_createEditor","_cancelEdit","args","addRow","inlineEditing","_isInlineEditable","showNewModelInView","_insertAt","_firstEditableColumnIndex","removeRow","_shouldRestorePageSize","mode","leafCols","_createIncellEditor","_editCell","editedCell","values","isCancel","ns","saveChanges","valid","_toggleColumnVisibility","_findColumn","_adjustTablesWidth","selector","Draggable","guid","hint","paddingLeft","paddingRight","lineHeight","paddingTop","paddingBottom","prepend","Reorderable","dragOverContainers","_allowDragOverContainers","inSameContainer","oldIndex","newIndex","reorderColumn","lockable","_reorderTrees","destSources","destContainer","destDomTree","sources","sourcesContainer","sourcesDomTree","destDomChildren","destRow","sourcesLeafs","destLeafs","reorderTaget","destThs","sourceDOM","sourceChildren","destColumn","_insertTree","leafs","domTr","_reorderHeader","rowsToAdd","sourcesDepth","targetDepth","sourceLocked","destLocked","destRows","destIndex","lockChanged","nonLockedColumnsLength","lockColumn","unlockColumn","menu","menuOptions","initHandler","_columnMenuInit","openHandler","_columnMenuOpen","lockedColumnsLength","compare","pane","owner","closeCallback","kendoColumnMenu","_createPager","alwaysVisible","ExcelMixin","PDFMixin","_drawPDF","allPages","startingPage","exportPage","doc","treeList","_drawPDFShadow","avoidLinks","pageNum","pageNumber","err","reject","paperSize","_drawPDF_autoPageBreak","_initPDFProgress","drawing","Group","deferred","progressBar","clone","kendoProgressBar","chunkCount","min","draw","cont","_destructive","drawDOM","renderPage","origBody","overflow","plugin","jQuery","amd","a1","a2","a3"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;CAwBC,SAAUA,EAAGC,QACVA,OAAO,kBACH,YACA,aACA,qBACA,iBACA,eACA,mBACA,mBACA,kBACA,6BACA,eACDD,IACL,WAgkLE,MAt/KC,UAAUE,EAAGC,GAyaV,QAASC,GAAGC,GACR,MAAO,UAAUC,GACb,MAAOA,GAAOD,IAGtB,QAASE,GAAIC,GACT,MAAO,UAAUF,GACb,OAAQE,EAAKF,IAw6BrB,QAASG,KACL,MAA8B,SAAvBC,KAAKC,MAAMC,QAEtB,QAASC,GAAUC,GACf,GAAIC,GAAYC,MAAMC,KAAK,QAC3B,OAAOH,GAAMI,KAAK,SAAUC,EAAGC,GAAb,GAGVC,GACAC,CASJ,OAZAH,GAAIjB,EAAEiB,GACNC,EAAIlB,EAAEkB,GACFC,EAASF,EAAEF,KAAKF,GAChBO,EAASF,EAAEH,KAAKF,GAChBM,IAAWlB,IACXkB,EAASnB,EAAEiB,GAAGI,SAEdD,IAAWnB,IACXmB,EAASpB,EAAEkB,GAAGG,SAElBF,EAASG,SAASH,EAAQ,IAC1BC,EAASE,SAASF,EAAQ,IACnBD,EAASC,EAAS,EAAID,EAASC,KAAc,IAG5D,QAASG,GAAcC,GAAvB,GACQC,GAAOD,EAAUE,KAAK,0BACtBC,EAAS,WACT,GAAIC,GAAK5B,EAAEQ,KACX,QAAQoB,EAAGC,SAAS,kBAAoBD,EAAGC,SAAS,qBAEpDjB,EAAQZ,GAOZ,OANIyB,GAAKK,OAAS,IACdlB,EAAQa,EAAKC,KAAK,MAAMC,OAAOA,GAAQA,OAAO,WAC1C,MAAOnB,MAAKuB,QAAU,KAG9BnB,EAAQA,EAAMoB,IAAIP,EAAKQ,OAAOP,KAAK,MAAMC,OAAOA,IACzChB,EAAUC,GAErB,QAASsB,GAAmBC,GAA5B,GAGaC,GAAOC,EAFZC,KACAC,EAAYJ,EAAQI,SACxB,KAASH,EAAI,EAAGC,EAAQF,EAAQE,MAAOD,EAAIC,EAAOD,IAC9CE,EAAME,KAAKC,EAAgB,QAAUF,UAAWA,IAEpD,OAAOD,GAEX,QAASI,GAAaC,GAAtB,GACQC,GACKC,EAASf,EADJgB,EAAQ,CACtB,KAASD,EAAM,EAAGf,EAASa,EAAKb,OAAQe,EAAMf,EAAQe,IAClDD,EAAWD,EAAKE,GAAKpC,MAAMqC,MACvBF,GAAYA,EAASG,QAAQ,WAC7BD,GAASxB,SAASsB,EAAU,IAGpC,OAAOE,GAEX,QAASE,GAAgBC,EAAQC,GAAjC,GAIYC,GACAC,EACAC,EACAC,CANRL,GAASA,EAAO,GAChBC,EAASA,EAAO,GACZD,EAAOxB,KAAKK,QAAUoB,EAAOzB,KAAKK,QAAUmB,EAAOxB,KAAKK,SAAWoB,EAAOzB,KAAKK,SAC3EqB,EAAeF,EAAOM,aACtBH,EAAcF,EAAOK,aAGrBJ,EAAeC,GACfC,EAAMH,EAAOzB,KAAKyB,EAAOzB,KAAKK,OAAS,GACvCwB,EAAOH,EAAeC,IAEtBC,EAAMJ,EAAOxB,KAAKwB,EAAOxB,KAAKK,OAAS,GACvCwB,EAAOF,EAAcD,GAEzBE,EAAI5C,MAAM+C,OAASH,EAAIE,aAAeD,EAAO,MAolHrD,QAASG,GAAeC,GACpB,MAAO1D,GAAE0D,GAASxD,GAAG,uHAEzB,QAASyD,GAASC,GACd,MAAKA,GAAOC,eAGHF,EAASC,EAAOC,gBAFZD,EAAOE,OAIxB,QAASC,GAA6BC,EAAS3C,EAAO4C,EAAQC,GAA9D,GACQC,GAEAC,EADAN,IAAWG,EAAOH,MAEtB,GACIK,GAASH,EAAQ3C,GACjBA,GAAS6C,EAAM,KACfE,IAAiBD,EAAOL,aACnBK,GAAU9C,MAAcA,EAAQ2C,EAAQlC,QAAUqC,GAAUF,IAAWE,EAAOH,SAAWI,IAAiBN,EACnH,OAAOK,GAEX,QAASE,GAAkBL,EAASG,EAAQF,EAAQK,EAAQC,GAA5D,GAKYC,GACAC,EAMApD,EAQAqD,EAEAC,CArBR,OAAIR,GAAOH,SACPG,EAASA,EAAOH,QACTG,EAAOG,EAAS,EAAIH,EAAOrC,OAAS,KAEvC0C,EAASI,EAAaT,EAAQH,GAG9BS,EADAD,EACgBA,EAAOR,QAEPA,EAEhB3C,EAAQwD,GAAQV,EAAQM,GACd,IAAVpD,GAAeiD,GAAmC,IAAzBG,EAAc3C,OACvCT,IACOA,GAASoD,EAAc3C,OAAS,GAAMwC,GAAoB,IAAVjD,GAEhDA,EAAQ,GAAe,IAAVA,IAAgBiD,GAAoB,IAAVjD,KAC9CA,GAASiD,KAAc,GAFvBjD,IAIAqD,EAAcG,GAAQZ,EAAQQ,GAClCN,EAASJ,EAA6BU,EAAepD,EAAO4C,EAAQS,EAAcrD,GAC9EsD,EAAcE,GAAQV,EAAQI,KAC9BJ,EAAOH,SAAaW,GAAeA,IAAgBF,EAAc3C,OAAS,IAG1EqC,GAAUA,GAAUF,GAAUE,EAAOH,QAC9BK,EAAkBL,EAASG,EAAQF,EAAQK,EAAQC,GAHnD,MAQnB,QAASO,GAAYd,GAArB,GAEanB,GADLkC,IACJ,KAASlC,EAAM,EAAGA,EAAMmB,EAAQlC,OAAQe,IAC/BmB,EAAQnB,GAAKmB,QAIlBe,EAASA,EAAOC,OAAOF,EAAYd,EAAQnB,GAAKmB,UAH5Ce,EAAOvC,KAAKwB,EAAQnB,GAK5B,OAAOkC,GAEX,QAASE,GAAoBjB,GACzB,MAAOkB,IAAKlB,EAAS,SAAUJ,GAC3B,OAAQA,EAAOuB,SAGvB,QAASC,GAAUxB,GACf,MAAOyB,IAAgBzB,IAAS9B,OAAS,EAE7C,QAASuD,GAAerB,GACpB,MAAOkB,IAAKlB,EAAS,SAAUJ,GAC3B,GAAImB,IAAUnB,EAAOuB,MAIrB,OAHIJ,IAAUnB,EAAOI,UACjBe,EAASM,EAAezB,EAAOI,SAASlC,OAAS,GAE9CiD,IAGf,QAASO,GAAiBtB,EAASuB,GAC/B,MAAOC,IAAIxB,EAAS,SAAUJ,GAC1B,GAAIuB,EAOJ,OANKC,GAAUxB,KAAW2B,IACtBJ,GAAS,GAETvB,EAAOI,UACPJ,EAAOI,QAAUsB,EAAiB1B,EAAOI,QAASmB,IAE/CM,IAASN,OAAQA,GAAUvB,KAG1C,QAAS8B,GAAsB1B,GAC3B,GAAIe,GAASY,EAAYC,EAAc5B,GACvC,OAAOe,GAAOC,OAAOW,EAAYE,EAAiB7B,KAEtD,QAAS8B,GAA2BH,EAAa3B,EAASU,EAAaC,GAAvE,GACQf,GAAS+B,EAAYjB,GACrBP,EAASwB,EAAYhB,GACrBH,EAASI,EAAahB,EAAQI,EAElC,OADAA,GAAUQ,EAASA,EAAOR,QAAUA,EAC7Ba,GAAQV,EAAQH,GAE3B,QAAS+B,GAAmBC,GAA5B,GAOYxB,GACAyB,EAGAC,EACA7E,EACA8E,EAGKtD,EAMDuD,EArBR5E,EAAYwE,EAAKK,QAAQ,SACzBtB,EAAS/E,IAAIgC,IAAIgE,GACjB3C,EAAM2C,EAAKK,QAAQ,MACnBC,EAAa9E,EAAUE,KAAK,MAC5BW,EAAQiE,EAAWjF,MAAMgC,EAC7B,IAAIhB,EAAQ,EAAG,CAUX,IATImC,EAAS8B,EAAWC,GAAGlE,EAAQ,GAC/B4D,EAA0BzB,EAAO9C,KAAK,MAAMC,OAAO,WACnD,OAAQ3B,EAAEQ,MAAMO,KAAK,aAErBmF,EAAS,EACT7E,EAAQgC,EAAI3B,KAAK,MAAML,MAAM2E,GAC7BG,EAAYH,EAAKQ,UAAU7E,OAAO,WAClC,MAAOnB,MAAKiG,QAAU,IAEjB5D,EAAM,EAAGA,EAAMsD,EAAUrE,OAAQe,IACtCqD,GAAUC,EAAUtD,GAAK4D,SAAW,CAIxC,KAFApF,GAASqF,KAAKC,IAAIT,EAAS,EAAG,GAC9BA,EAAS,EACJrD,EAAM,EAAGA,EAAMoD,EAAwBnE,OAAQe,IAOhD,GANIuD,EAAaH,EAAwBM,GAAG1D,GAExCqD,GADAE,EAAWrF,KAAK,gBACNqF,EAAW,GAAGQ,aAAa,gBAE3B,EAEVvF,GAASwB,GAAOxB,EAAQ6E,EAAQ,CAChCnB,EAASgB,EAAmBK,GAAYpE,IAAI+C,EAC5C,QAIZ,MAAOA,GAEX,QAAS8B,GAAkBb,GAA3B,GAQYc,GACAX,EACAtD,EAIAqD,EAIAtF,EACA6F,EAKIM,EAvBRvF,EAAYwE,EAAKK,QAAQ,SACzBtB,EAAS/E,IAAIgC,IAAIgE,GACjB3C,EAAM2C,EAAKK,QAAQ,MACnBC,EAAa9E,EAAUE,KAAK,MAC5BW,EAAQiE,EAAWjF,MAAMgC,GAAO2C,EAAK,GAAGjE,QACxCiF,EAAclG,MAAMC,KAAK,UAC7B,IAAIsB,GAASiE,EAAWxE,OAAS,EAAG,CAQhC,IAPIgF,EAAQzD,EAAI4D,OACZd,EAAYH,EAAKQ,UAErBL,EAAYA,EAAUxE,OAAO,WACzB,OAAQnB,KAAKuB,SAA4B,IAAjBvB,KAAKuB,UAE7BmE,EAAS,EACRrD,EAAM,EAAGA,EAAMsD,EAAUrE,OAAQe,IAClCqD,GAAU5E,SAAS6E,EAAUI,GAAG1D,GAAK9B,KAAKiG,GAAc,KAAO,CAKnE,KAHIpG,EAAQkG,EAAMpF,KAAK,MACnB+E,EAAUnF,SAAS0E,EAAKjF,KAAKiG,GAAc,KAAO,EACtDnE,EAAM,EACCA,EAAM4D,GACTK,EAAQlG,EAAM2F,GAAG1D,EAAMqD,GACvBnB,EAASA,EAAO/C,IAAI6E,EAAkBC,IAClCC,EAAQzF,SAASwF,EAAM/F,KAAKiG,GAAc,IAC1CD,EAAQ,IACRN,GAAWM,EAAQ,GAEvBlE,IAGR,MAAOkC,GAEX,QAASH,GAAahB,EAAQI,GAC1B,GAAIkD,KAEJ,OADAC,GAAcvD,EAAQI,EAASkD,GACxBA,EAAQA,EAAQpF,OAAS,GAEpC,QAASqF,GAAcvD,EAAQI,EAASkD,GAAxC,GAEarE,GAIGuE,CAJZ,KADAF,EAAUA,MACDrE,EAAM,EAAGA,EAAMmB,EAAQlC,OAAQe,IAAO,CAC3C,GAAIe,IAAWI,EAAQnB,GACnB,OAAO,CACJ,IAAImB,EAAQnB,GAAKmB,QAAS,CAG7B,GAFIoD,EAAWF,EAAQpF,OACvBoF,EAAQ1E,KAAKwB,EAAQnB,IAChBsE,EAAcvD,EAAQI,EAAQnB,GAAKmB,QAASkD,GAG7C,OAAO,CAFPA,GAAQG,OAAOD,EAAUF,EAAQpF,OAASsF,IAMtD,OAAO,EAEX,QAASzB,GAAY3B,GAArB,GAGanB,GAFLkC,KACAuC,IACJ,KAASzE,EAAM,EAAGA,EAAMmB,EAAQlC,OAAQe,IACpCkC,EAAOvC,KAAKwB,EAAQnB,IAChBmB,EAAQnB,GAAKmB,UACbsD,EAAWA,EAAStC,OAAOhB,EAAQnB,GAAKmB,SAMhD,OAHIsD,GAASxF,SACTiD,EAASA,EAAOC,OAAOW,EAAY2B,KAEhCvC,EAEX,QAASwC,GAAe3D,EAAQI,EAASX,EAAKmE,GAA9C,GACQzC,GACAlC,CAIJ,KAHAQ,EAAMA,GAAO,EACbmE,EAAaA,MACbA,EAAWnE,GAAOmE,EAAWnE,IAAQ,EAChCR,EAAM,EAAGA,EAAMmB,EAAQlC,OAAQe,IAAO,CACvC,GAAImB,EAAQnB,IAAQe,EAAQ,CACxBmB,GACIiB,KAAMwB,EAAWnE,GACjBA,IAAKA,EAET,OACG,GAAIW,EAAQnB,GAAKmB,UACpBe,EAASwC,EAAe3D,EAAQI,EAAQnB,GAAKmB,QAASX,EAAM,EAAGmE,IAE3D,KAGRA,GAAWnE,KAEf,MAAO0B,GAEX,QAAS0C,GAAgBC,EAAO1D,EAASkC,GAAzC,GAEQyB,GACA3B,EACA4B,EAEAhH,EACAa,EACAE,EAIKkB,EAASf,CAAlB,KAXAoE,EAASA,GAAU,EAGf0B,EAAa5D,EACjBA,EAAUc,EAAYd,GAClBpD,KACAa,EAAOiG,EAAMhG,KAAK,0BAClBC,EAAS,WACT,GAAIC,GAAK5B,EAAEQ,KACX,QAAQoB,EAAGC,SAAS,kBAAoBD,EAAGC,SAAS,qBAE/CgB,EAAM,EAAGf,EAASkC,EAAQlC,OAAQe,EAAMf,EAAQe,IACrD8E,EAAWJ,EAAevD,EAAQnB,GAAM+E,GACnChH,EAAM+G,EAAStE,OAChBzC,EAAM+G,EAAStE,KAAO5B,EAAK8E,GAAGoB,EAAStE,KAAK3B,KAAK,aAAaC,OAAOA,IAEzEqE,EAAOpF,EAAM+G,EAAStE,KAAKkD,GAAGoB,EAAS3B,MACvCA,EAAKjF,KAAKD,MAAMC,KAAK,SAAUmF,EAASrD,EAE5C,OAAOmB,GAAQlC,OAEnB,QAAS+F,GAAM7D,GAAf,GAGanB,GAEGiF,EAJR/C,EAAS,EACT4B,EAAM,CACV,KAAS9D,EAAM,EAAGA,EAAMmB,EAAQlC,OAAQe,IAChCmB,EAAQnB,GAAKmB,UACT8D,EAAOD,EAAM7D,EAAQnB,GAAKmB,SAC1B8D,EAAOnB,IACPA,EAAMmB,GAIlB,OAAO/C,GAAS4B,EAEpB,QAASf,GAAc5B,GACnB,MAAOkB,IAAKlB,EAAS9D,EAAG,WAE5B,QAAS2F,GAAiB7B,GACtB,MAAOkB,IAAKlB,EAAS3D,EAAIH,EAAG,YAEhC,QAAS6H,GAAevG,EAAWwG,GAAnC,GACQvG,GAAOD,EAAUE,KAAK,MACtBI,EAASL,EAAKK,MAClBL,GAAKwG,KAAK,SAAUpF,GAAV,GAEGT,GADLxB,EAAQJ,KAAKI,KACjB,KAASwB,EAAI,EAAGA,EAAIxB,EAAMkB,OAAQM,IAC1BxB,EAAMwB,GAAGqE,SAAW,GAAK7F,EAAMwB,GAAG8F,WAAWC,UAC7CH,EAAiBV,SAASzE,GAAKyE,SAASlF,GAAGrB,KAAKgB,QAAUD,EAASe,EACnEjC,EAAMwB,GAAGL,QAAUD,EAASe,KAK5C,QAASuF,GAAgB5G,EAAWwG,GAApC,GAUa5F,GATLX,EAAOD,EAAUE,KAAK,MACtB2G,IAQJ,KAPA5G,EAAKE,OAAO,SAAUkB,GAClB,GAAIyF,IAAgBtI,EAAEQ,MAAM8G,WAAWxF,MAIvC,OAHIwG,IACAD,EAAU7F,KAAKK,GAEZyF,IACRC,SACMnG,EAAIiG,EAAUvG,OAAS,EAAGM,GAAK,EAAGA,IACvC4F,EAAiBV,SAASD,OAAOgB,EAAUjG,GAAI,EAEnD2F,GAAevG,EAAWwG,GAE9B,QAASQ,GAAWC,EAAOC,GAA3B,GAIYC,GAAWC,EAHfC,EAAOC,GAAQD,MAAQC,GAAQC,IACnC,IAAIL,KAAW,EAAM,CAKjB,GAJAD,EAAQzI,EAAEyI,GAEVE,EAAYF,EAAMjE,SAASmE,YAC3BC,EAAaH,EAAMjE,SAASoE,aACxBC,EACA,IACIJ,EAAM,GAAGO,YACX,MAAOC,GACLR,EAAM,GAAGS,YAGbT,GAAM,GAAGS,OAEbT,GAAMjE,SAASmE,UAAUA,GAAWC,WAAWA,OAE/C5I,GAAEyI,GAAOU,IAAI,UAAW,SAAUF,GAC9BA,EAAEG,mBACHF,QAGX,QAASG,GAAgBC,EAAMC,GAA/B,GACQ/F,GACAgG,EAAgBF,EAAK/F,aACrBkG,EAAgBF,EAAKhG,YACrBiG,GAAgBC,EAChBjG,EAASgG,EAAgB,KAClBA,EAAgBC,IACvBjG,EAASiG,EAAgB,MAEzBjG,IACA8F,EAAK7I,MAAM+C,OAAS+F,EAAK9I,MAAM+C,OAASA,GAGhD,QAASkG,GAAiB9F,EAAQ+F,GAC9B,UAAK/F,GAAW+F,GAAU/F,EAAOzD,QAASyD,EAAOgG,YAAchG,EAAOiG,SAAWjG,EAAOkG,WAAalG,EAAOkG,SAASH,MAG9G/F,EAAOzD,OAASwJ,EAAMG,UAAYH,EAAMG,SAASlG,EAAOzD,QAEnE,QAAS4J,GAAcnG,EAAQ+F,GAC3B,GAAIxJ,IAASyD,OAAczD,OAAS,EACpC,OAAOwJ,GAAMK,OAASL,EAAMM,aAAeN,EAAMM,YAAY9J,IAAUuJ,EAAiB9F,EAAQ+F,GAEpG,QAASO,GAAYnD,GACjB,MAAwB,KAAVA,EAElB,QAASoD,GAASpD,GACd,MAAwB,gBAAVA,KAAuBqD,MAAMrD,GA/0KlD,GAiXOsD,GAkEAC,EA6+BAC,EAkBAC,EAuDAC,EAiGAC,EAQAC,EAjlDAC,EAAO9J,MAAM8J,KACbC,EAAW/J,MAAMgK,IACjBrI,EAAkBoI,EAASnH,QAC3BqH,EAAmBF,EAASG,KAC5BC,EAAmBJ,EAASK,KAC5BC,EAAarK,MAAMsK,YACnBC,EAAOvK,MAAMuK,KACbC,EAAcxK,MAAMyK,aACpBC,GAAK1K,MAAM0K,GACXC,GAAkBD,GAAGC,gBACrBC,GAAad,EAAKc,WAClBC,GAAkBf,EAAKe,gBACvBC,GAAQhB,EAAKgB,MACbC,GAAQjB,EAAKiB,MACb/C,GAAUhI,MAAMgL,QAAQhD,QACxBiD,GAAgBjL,MAAMkL,SACtBC,GAAgBnL,MAAMoL,eACtBC,GAAUnM,EAAEmM,QACZ1G,GAASzF,EAAEyF,OACX2G,GAAQpM,EAAEoM,MACV5G,GAAMxF,EAAEwF,IACRN,GAAOlF,EAAEkF,KACTL,GAAU7E,EAAE6E,QACZwH,GAAgBrM,EAAEqM,cAClB7J,GAAO8J,MAAMC,UAAU/J,KACvBgK,GAAS,SACTC,GAAS,SACTC,GAAc,aACdC,GAAQ,QACRC,GAAW,WACXC,GAAM,IACNC,GAAK,iBACLC,GAAQ,QACRC,GAAY,YACZC,GAAc,aACdC,GAAO,OACPC,GAAO,OACPC,GAAc,aACdC,GAAO,OACPC,GAAe,cACfC,GAAS,SACTC,GAAW,WACXC,GAAa,YACbC,GAAS,SACTC,GAAY,uDACZC,GAAc,cACdC,GAAY,YACZC,GAAS,SACTC,GAAW,WACXC,GAAiB,iBACjBC,GAAiB,iBACjBC,GAAa,aACbC,GAAa,aACbC,GAAc,cACdC,GAAgB,gBAChBC,GAAe,eACfC,GAAiB,iBACjBC,GAAiB,iBACjBC,GAAa,aACbC,GAAe,eACfC,GAAgB,WAChBC,GAAY,YACZC,GAAO,OACPC,GAAO,OACPC,GAAU,UACVC,GAAS,aACTC,GAAU,aACVC,GAAY,aACZC,GAAU,qCACVC,GAAeJ,GAAS,sBACxBK,GAAcF,GAAU,QACxBG,IAAQ,EACRC,GAAS,SACTC,GAAS,SACTC,GAAS,SACTC,GAAQ,QACRC,GAAQ,QACRC,IACAC,QAAS,6CACTC,OAAQ,WACRC,OAAQ,WACRC,IAAK,QACLC,SAAU,cACVC,QAAS,kBACTC,UAAW,eACXC,MAAO,mBACPC,YAAa,iBACbC,WAAY,gBACZC,eAAgB,qBAChBC,YAAa,iBACbC,gBAAiB,iBACjBC,WAAY,gBACZC,eAAgB,oBAChBC,QAAS,kBACTC,QAAS,cACTC,QAAS,aACTC,MAAO,kBACPC,SAAU,mBACVC,OAAQ,WACRC,KAAM,SACNC,SAAU,cACVC,WAAY,eACZC,KAAM,SACNC,WAAY,aACZC,aAAc,eACdC,WAAY,aACZC,WAAY,WACZC,gBAAiB,kBACjBC,MAAO,UACPC,cAAe,2DACfC,QAAS,gBACTC,WAAY,kBACZC,QAAS,WACTC,WAAY,oBACZC,WAAY,aACZC,WAAY,gBACZC,SAAU,cACVC,aAAc,eAEdC,IACAC,QACIC,WAAY,WACZhQ,UAAW,aACXiQ,WAAY,UAEhBC,aACIF,WAAY,WACZhQ,UAAW,aACXiQ,WAAY,UAEhBE,SACIH,WAAY,YACZhQ,UAAW,gBACXiQ,WAAY,aAEhBG,MACIJ,WAAY,WACZhQ,UAAW,cACXiQ,WAAY,WAEhBI,QACIL,WAAY,YACZhQ,UAAW,0BACXiQ,WAAY,WAEhBK,YACIN,WAAY,aACZhQ,UAAW,gBACXiQ,WAAY,eAEhBM,QACIP,WAAY,oBACZvH,KAAM,iBACNzI,UAAW,wBACXiQ,WAAY,iBAEhBO,MACIR,WAAY,mBACZvH,KAAM,eACNzI,UAAW,sBACXiQ,WAAY,eAEhBQ,OACIT,WAAY,iBACZhQ,UAAW,eACXiQ,WAAY,eAEhBS,KACIV,WAAY,eACZhQ,UAAW,aACXiQ,WAAY,cAGhBU,GAAWpS,MAAMqS,MAAM1N,QACvB2N,KAAM,SAAUxI,EAAMzI,GAClB,GAAIkR,GAAO7S,IACX6S,GAAKzI,KAAOA,MACZyI,EAAKlR,QAAUsD,GAAO4N,EAAKlR,QAASA,IAExCA,SACImR,gBAAiB,KACjBC,QAAS,KACTC,cAAe7E,IAEnB8E,YAAa,WAAA,GAILC,GACAC,EACAC,EAMKxR,EAXLiR,EAAO7S,KACPiT,KACAI,EAAaR,EAAKzI,KAAK9I,OAIvByR,EAAUF,EAAKlR,QAAQoR,QACvBC,EAAgBH,EAAKlR,QAAQqR,aACjC,IAAIH,EAAKS,aACL,MAAOT,GAAKS,YAEhB,KAAS1R,EAAI,EAAGA,EAAIyR,EAAYzR,IAC5BsR,EAAWlT,KAAKoK,KAAKxI,GACrBuR,EAAaD,EAASH,GACtBK,EAAmBF,EAASF,GAC5BC,EAAYE,GAAcF,EAAYE,OACtCF,EAAYG,GAAoBH,EAAYG,OAC5CH,EAAYG,GAAkBpR,KAAKkR,EAGvC,OADAL,GAAKS,aAAeL,EACbA,GAEXM,OAAQ,WAAA,GAKAL,GAKKtR,EATLiR,EAAO7S,KACPuT,KACAnJ,EAAOyI,EAAKzI,KACZiJ,EAAajJ,EAAK9I,OAElByR,EAAUF,EAAKlR,QAAQoR,OAC3B,IAAIF,EAAKW,OACL,MAAOX,GAAKW,MAEhB,KAAS5R,EAAI,EAAGA,EAAIyR,EAAYzR,IAC5BsR,EAAW9I,EAAKxI,GAChB2R,EAAOL,EAASH,IAAYG,CAGhC,OADAL,GAAKU,OAASA,EACPA,GAEXE,SAAU,WAAA,GAMFP,GACAC,EACAC,EAMKxR,EAbLiR,EAAO7S,KACPiT,KACA7I,EAAOyI,EAAKzI,KACZiJ,EAAajJ,EAAK9I,OAClBiS,KAIAR,EAAUF,EAAKlR,QAAQoR,QACvBC,EAAgBH,EAAKlR,QAAQqR,aACjC,IAAIH,EAAKa,UACL,MAAOb,GAAKa,SAEhB,KAAS9R,EAAI,EAAGA,EAAIyR,EAAYzR,IAC5BsR,EAAW9I,EAAKxI,GAChBuR,EAAaD,EAASH,GACtBK,EAAmBF,EAASF,GAC5BO,EAAOJ,GAAcD,EACrBD,EAAYE,GAAcF,EAAYE,OACtCF,EAAYG,GAAoBH,EAAYG,OAC5CH,EAAYG,GAAkBpR,KAAKkR,EAMvC,OAJAL,GAAKa,WACD5M,SAAUmM,EACVU,IAAKJ,IAIbK,UAAW,WAAA,GAMHV,GAEKtR,EAPLiR,EAAO7S,KACPoK,EAAOyI,EAAKzI,KACZ0I,EAAkBD,EAAKlR,QAAQmR,gBAC/BO,EAAajJ,EAAK9I,OAClBsS,KAEAZ,EAAgBH,EAAKlR,QAAQqR,aACjC,KAASpR,EAAI,EAAGA,EAAIyR,EAAYzR,IAC5BsR,EAAW9I,EAAKxI,GACZsR,EAASF,KAAmBF,GAC5Bc,EAAU5R,KAAKkR,EAGvB,OAAOU,IAEXC,qCAAsC,SAAUlS,GAAV,GAE9BkR,GACAe,EACArP,EACAuP,EAGKlS,CAAT,KAPAD,EAAUA,MACNkR,EAAO7S,KACP4T,EAAYf,EAAKe,YACjBrP,KAEJsO,EAAKS,aAAe3R,EAAQsR,YAActR,EAAQsR,aAAeJ,EAAKI,cACtEtR,EAAQoS,SAAWpS,EAAQoS,UAAYC,EAAAA,EAC9BpS,EAAI,EAAGA,EAAIgS,EAAUtS,OAAQM,IAClCkS,EAAajB,EAAKoB,wBAAwBL,EAAUhS,GAAID,GACxD4C,EAASA,EAAOC,OAAOsP,EAE3B,OAAOvP,IAEX0P,wBAAyB,SAAUC,EAAUvS,GAApB,GAEjBkR,GACAtO,EACA4P,EACAL,EACAb,EACAc,EACAhB,EACAjM,EACAsN,CAEJ,IAXAzS,EAAUA,MACNkR,EAAO7S,KACPuE,KAGA0O,EAActR,EAAQsR,gBACtBc,EAAWpS,EAAQoS,UAAYC,EAAAA,EAC/BjB,EAAUF,EAAKlR,QAAQoR,QACvBjM,EAAWmM,EAAYiB,EAASnB,QAChCqB,EAAW1K,EAAYwK,EAASE,UAAYzS,EAAQyS,SAAWF,EAASE,SAC5E7P,EAAOvC,KAAKkS,GACRpN,GAAYsN,EACZ,IAAKD,EAAW,EAAGA,EAAWrN,EAASxF,UAC/BiD,EAAOjD,QAAUyS,GADsBI,IAI3CL,EAAajB,EAAKoB,wBAAwBnN,EAASqN,GAAWxS,GAC9D4C,EAASA,EAAOC,OAAOsP,EAG/B,OAAOvP,MAGX8P,GAAY,SAAUjK,GACtBpK,KAAKoK,KAAOA,MAEhBiK,IAAUtI,UAAY,GAAIX,IAC1BiJ,GAAUtI,UAAUuI,YAAcD,GAClCA,GAAUE,QAAU,SAAUnK,EAAMzI,EAAS6S,GAAzB,GAEZC,GACA7E,EACApP,EACAkU,EACAvT,EACAwT,EACAC,EACAC,EACA5B,EACA6B,EACAC,EACAC,CAoCJ,OAhDArT,GAAUA,MACN8S,EAAQ,GAAIJ,IAAUjK,GACtBwF,EAAQjO,EAAQiO,MAChBpP,EAAO4K,GAAM6J,eAAerF,OAAapL,OAAO4G,GAAM8J,cAAcvT,EAAQnB,WAC5EkU,EAAiB/S,EAAQ+S,eACzBvT,EAASQ,EAAQR,OACjBwT,EAAOhT,EAAQgT,KACfC,EAAOjT,EAAQiT,KAMfpU,GAAQgU,IACRC,EAAQA,EAAMjU,KAAKA,EAAMf,EAAWA,EAAW+U,IAE/CrT,IACAsT,EAAQA,EAAMtT,OAAOA,GACjBuT,IACAD,EAAQC,EAAeD,IAE3BI,EAAQJ,EAAMU,UAAU7T,QAExBd,IAASgU,IACTC,EAAQA,EAAMjU,KAAKA,GACfoP,IACAxF,EAAOqK,EAAMU,YAGjBxT,EAAQyT,uBACRL,EAAO,GAAIrC,IAAS+B,EAAMU,UAAWxT,GACjCR,IACA2T,EAAsBC,EAAK9B,eAE/B+B,EAAaD,EAAKlB,sCACdZ,YAAa9R,GAAUX,GAAQA,EAAKc,OAAS7B,EAAYkC,EAAQsR,YACjEmB,SAAUzS,EAAQyS,SAClBL,SAAUY,EAAOC,GAAQZ,EAAAA,IAE7Bf,EAAc8B,EAAK9B,cACnBwB,EAAQ,GAAIJ,IAAUW,IAEtBL,IAASlV,GAAamV,IAASnV,IAC/BgV,EAAQA,EAAMY,MAAMV,EAAMC,IAE1BhF,IACA6E,EAAQA,EAAM7E,MAAMA,EAAOxF,KAG3ByK,MAAOA,EACPzK,KAAMqK,EAAMU,UACZlC,YAAaA,EACb6B,oBAAqBA,IAGzBjL,EAAgBwB,GAAM9L,QACtB+V,GAAI,KACJC,SAAUpH,GACVqH,QACIF,IAAMG,KAAM,UACZF,UACIE,KAAM,SACNC,UAAU,IAGlB9C,KAAM,SAAUrM,GACZ8E,GAAMsK,GAAG/C,KAAKgD,KAAK5V,KAAMuG,GACzBvG,KAAK6V,SAAU,EACV7V,KAAKgT,gBACNhT,KAAKgT,cAAgB7E,IAEzBnO,KAAKuV,SAAWvV,KAAK8V,IAAI9V,KAAKgT,gBAElC+C,OAAQ,SAAU3L,GACdiB,GAAMsK,GAAGI,OAAOH,KAAK5V,KAAMoK,GAC3BpK,KAAKuV,SAAWvV,KAAK8V,IAAI9V,KAAKgT,gBAElCgD,IAAK,SAAUrW,EAAO4G,EAAO0P,GACrBtW,GAASwO,IAAiBnO,KAAKgT,eAAiB7E,KAChDnO,KAAKA,KAAKgT,eAAiBzM,GAE/B8E,GAAMsK,GAAGK,IAAIJ,KAAK5V,KAAML,EAAO4G,EAAO0P,GAClCtW,GAASK,KAAKgT,gBACdhT,KAAKuV,SAAWvV,KAAK8V,IAAI9V,KAAKgT,iBAGtCkD,OAAQ,SAAU3P,GACd,MAAIA,KAAU9G,EAGHO,KAAK6V,SAFZ7V,KAAK6V,QAAUtP,EAAfvG,IAKRmW,gBAAiB,SAAUxW,GACvB,MAAO0L,IAAMsK,GAAGQ,gBAAgBP,KAAK5V,KAAML,IAAoB,YAAVA,GAAgC,UAATA,GAA8B,SAATA,KAA6C,aAAvBK,KAAKgT,eAA0C,aAAVrT,MAGpKkK,EAAcmJ,cAAgB7E,GAC9BtE,EAActK,OAAS,SAAU6W,EAAMzU,GAAhB,GAKf4T,GAEApM,CAIJ,OAVIxH,KAAYlC,IACZkC,EAAUyU,EACVA,EAAOvM,GAEP0L,EAAW5T,EAAQ4T,UAAYpH,GACnCxM,EAAQqR,cAAgBuC,EACpBpM,EAAQkC,GAAM9L,OAAO6W,EAAMzU,GAC3B4T,IACApM,EAAM6J,cAAgBuC,GAEnBpM,GAYPW,EAAqBoB,GAAWjG,QAChC2N,KAAM,SAAUjR,GACZA,EAAUA,KACV,IAAIkR,GAAO7S,IACX6S,GAAKa,UAAYb,EAAKwD,eACtB1U,EAAQ2U,OAASrR,IAAO,MACpBsR,UAAW1M,EACXV,MAAOU,GACRlI,EAAQ2U,QACXpL,GAAWyK,GAAG/C,KAAKgD,KAAK5V,KAAM2B,IAElC6U,UAAW,aAEXC,gBAAiB,SAAUrM,GAAV,GACTyI,GAAO7S,KACPmJ,KACAuN,EAAYtM,YAAgBiB,IAC5B2H,EAAgBhT,KAAK2W,qBAazB,OAZID,KACAvN,EAAQiB,GAEZjB,EAAQ+B,GAAWyK,GAAGc,gBAAgBb,KAAK5V,KAAMmJ,GAC5CuN,IACGtM,EAAKmL,SACLnL,EAAKjB,EAAM6J,eAAiB5I,EAAKmL,SAC1B1C,EAAK+D,eAAiBxM,EAAK4I,KAClC5I,EAAKjB,EAAM6J,eAAiB5I,EAAK4I,IAErC7J,EAAM4M,OAAO3L,IAEVjB,GAEX0N,YAAa,WACT,OAAO,GAEXC,MAAO,SAAUvS,EAAQwS,GACrB,GAAI3M,GAAOc,GAAWyK,GAAGqB,UAAUpB,KAAK5V,KAAMuE,EACzC6F,KACDA,EAAO7F,GAEXvE,KAAK+W,GAAW3M,IAEpB6M,SAAU,WACN,MAAOjX,MAAKkX,WAEhBF,UAAW,SAAUG,GAAV,GACHtE,GAAO7S,KACPoK,EAAOyI,EAAK+D,cAAgB/D,EAAKoE,WAAWG,SAAWvE,EAAKzI,MAGhE,OAFA+M,GAAUjM,GAAWyK,GAAGqB,UAAUpB,KAAK5V,KAAMmX,GAC7CnX,KAAKqX,cAAcjN,EAAKgN,OAAShN,EAAKgN,SAAWhN,GAAM5F,OAAO2S,GAAU/M,GACpE+M,YAAmBhM,IACZgM,EAEJ/M,GAEXiN,aAAc,SAAU5T,EAAQE,GAAlB,GAED/B,GADL0V,EAAe7T,EAAOnC,MAC1B,KAASM,EAAI,EAAGA,EAAI0V,EAAc1V,IAC9B+B,EAAO/B,GAAK6B,EAAO7B,EAEvB+B,GAAOrC,OAASgW,GAEpBC,gBAAiB,SAAUnN,GACvB,GAAI7F,GAASU,GAAOjF,KAAKwX,iBAAkBxX,KAAKyX,OAAOC,WAAWtN,GAKlE,OAJI,IAAM7F,KACNA,EAAOvE,KAAK2X,oBAAsBpT,EAAO,UAClCA,GAAO,KAEXA,GAEXqT,KAAM,SAAUxN,GACZ,GAAIyI,GAAO7S,IAIX,OAHI6S,GAAK+D,gBACL/D,EAAKa,cAEFxI,GAAWyK,GAAGiC,KAAKhC,KAAK/C,EAAMzI,IAEzCrC,OAAQ,SAAU8P,GACd7X,KAAK8X,iBAAiBD,GACtB7X,KAAK+X,oBAAoBF,GACzB3M,GAAWyK,GAAG5N,OAAO6N,KAAK5V,KAAM6X,IAEpCC,iBAAkB,SAAU3O,GAAV,GACV0J,GAAO7S,KACPgY,EAAWnF,EAAK+D,cAChBxM,EAAO4N,EAAWhY,KAAKiX,WAAajX,KAAKoK,OACzC6I,EAAc+E,EAAWnF,EAAKoF,mBAAqBpF,EAAKI,YAAY7I,GAAQyI,EAAKS,aAAalJ,GAC9F8N,EAAQlY,KAAKmY,SAASlF,EAAa9J,EAAMmM,IACzC8C,EAAepY,KAAKqY,aAAaH,GAAO,EAC5CrF,GAAKkF,oBAAoBK,IAE7BE,OAAQ,SAAUzX,EAAOsI,GAAjB,GACA0J,GAAO7S,KACPuY,EAAW1F,EAAK4D,gBAAgBtN,EAEpC,OADA0J,GAAK2F,kBAAkBD,GAChBrN,GAAWyK,GAAG2C,OAAO1C,KAAK/C,EAAMhS,EAAO0X,IAElDE,gBAAiB,SAAUhE,GAAV,GAET7S,GAAG8W,EAQH1U,EATA6O,EAAO7S,KAEPgF,KACAT,KACA6F,EAAOqK,EAAMU,UACbpC,EAAUF,EAAK8F,gBACf3F,EAAgBH,EAAK8D,sBACrBqB,EAAWnF,EAAK+D,cAChBgC,IAEJ,KAAKhX,EAAI,EAAGA,EAAIwI,EAAK9I,OAAQM,IAEzB,GADA8W,EAAOtO,EAAKxI,GACRoW,EAAU,CAOV,IANAY,KACK5T,EAAI0T,EAAK3F,MACV/N,EAAI0T,EAAK3F,KAAY,EACrB6F,EAAc5W,KAAK0W,IAEvB1U,EAAS6O,EAAKgG,YAAYH,GACnB1U,IACEgB,EAAIhB,EAAO+O,KACZ/N,EAAIhB,EAAO+O,KAAY,EACvB6F,EAAcE,QAAQ9U,GACtBA,EAAS6O,EAAKgG,YAAY7U,EAK9B4U,GAActX,SACdiD,EAASA,EAAOC,OAAOoU,QAG3B,MAAOF,IACE1T,EAAI0T,EAAK3F,MACV/N,EAAI0T,EAAK3F,KAAY,EACrBxO,EAAOvC,KAAK0W,KAEX1T,EAAI0T,EAAK1F,MACVhO,EAAI0T,EAAK1F,KAAkB,EAC3B0F,EAAO1Y,KAAK+Y,WAAWL,GACnBA,GACAnU,EAAOvC,KAAK0W,EAQhC,OAAO,IAAItN,IAAM7G,IAErB4T,SAAU,SAAUnT,EAAKsQ,GAAf,GAKG1T,GAAOoX,EAJZnG,EAAO7S,KACPuE,EAASS,EAAIsQ,OACbxC,EAAkBD,EAAK8E,mBACvB5E,EAAUF,EAAK8F,eACnB,KAAS/W,EAAI,EAAGoX,EAAMzU,EAAOjD,OAAQM,EAAIoX,EAAKpX,IACtC2C,EAAO3C,GAAGmR,KAAaD,IACvBvO,EAASA,EAAOC,OAAOqO,EAAKsF,SAASnT,EAAKT,EAAO3C,GAAGmR,KAG5D,OAAOxO,IAEX+O,aAAc,SAAUlJ,GAAV,GAENxI,GAAG8W,EAAMpD,EAAIC,EADbvQ,IAGJ,KADAoF,EAAOpK,KAAKiZ,aAAa7O,GACpBxI,EAAI,EAAGA,EAAIwI,EAAK9I,OAAQM,IACzB8W,EAAOtO,EAAKxI,GACZ0T,EAAKoD,EAAKpD,GACVC,EAAWmD,EAAKnD,SAChBvQ,EAAIsQ,GAAMtQ,EAAIsQ,OACdtQ,EAAIuQ,GAAYvQ,EAAIuQ,OACpBvQ,EAAIuQ,GAAUvT,KAAK0W,EAEvB,OAAO1T,IAEXiO,YAAa,SAAU7I,GAAV,GACL2K,GAAO/U,KAAKkZ,gBAAgB9O,GAC5BpF,EAAM+P,EAAK9B,aACf,OAAOjO,IAEXiT,gBAAiB,WAAA,GACTpF,GAAO7S,KACPyT,EAAWZ,EAAKwD,cACpB,OAAO5C,GAAS3M,UAEpBqS,YAAa,SAAU/O,GAAV,GACLyI,GAAO7S,KACPyT,EAAWZ,EAAKwD,cAIpB,OAHI3M,GAAY+J,EAASE,OACrBF,EAASE,IAAMd,EAAKuG,QAAQhP,IAEzBqJ,EAASE,KAEpByF,QAAS,SAAUhP,GAAV,GACD2K,GAAO/U,KAAKkZ,gBAAgB9O,GAC5BpF,EAAM+P,EAAKxB,QACf,OAAOvO,IAEXqU,WAAY,WAAA,GACJxG,GAAO7S,KACPyT,EAAWZ,EAAKwD,cACpB,OAAO5C,GAASE,SAEpB2F,wBAAyB,WAAA,GACjBzG,GAAO7S,KACPyT,EAAWZ,EAAKwD,cACpB,OAAO5C,GAAS8F,kBAEpBC,wBAAyB,SAAUxU,GAAV,GACjB6N,GAAO7S,KACPyT,EAAWZ,EAAKwD,cACpB5C,GAAS8F,iBAAmBvU,GAEhCyU,cAAe,SAAUrP,GAAV,GACPyI,GAAO7S,KACP+U,EAAOlC,EAAKqG,gBAAgB9O,EAEhC,OADAyI,GAAKa,UAAYqB,EAAKtB,YAG1BiG,0BAA2B,SAAU1V,GAAV,GASVpC,GARTiR,EAAO7S,KACPoK,EAAOyI,EAAKoE,WACZhE,EAAcJ,EAAKoF,kBACnBlF,EAAUF,EAAK8F,gBACf3F,EAAgBH,EAAK8D,sBACrBpB,EAAWvR,EAAO+O,EACtB,IAAIE,EAEA,IADAA,EAAYsC,MACH3T,EAAI,EAAGA,EAAIwI,EAAK9I,OAAQM,IACzBwI,EAAKxI,GAAGoR,KAAmBuC,GAC3BtC,EAAYsC,GAAUvT,KAAKoI,EAAKxI,KAKhDyU,aAAc,WACV,GAAIxD,GAAO7S,IAEX,OADA6S,GAAKa,UAAYb,EAAKa,eAG1BwF,gBAAiB,SAAU9O,EAAMzI,GAC7B,GAAIoT,GAAO,GAAIrC,IAAStI,EAAMnF,GAAOtD,EAAS3B,KAAK2Z,4BACnD,OAAO5E,IAEX4E,yBAA0B,WAAA,GAClB9G,GAAO7S,KACP4Z,EAAe/G,EAAKgH,eACxB,QACI/G,gBAAiBD,EAAK8E,mBACtB5E,QAASF,EAAK8F,gBACd3F,cAAeH,EAAK8D,sBACpBvC,SAAUwF,EAAaxF,WAG/B0F,qBAAsB,WAClB,MAAO9Z,MAAKyX,OAAOtO,OAAS7I,MAAM8J,KAAK2P,kBAE3CC,qBAAsB,SAAU5P,EAAMzI,GAAhB,GAEdkR,GACAtO,EACAmU,EAAMuB,EAASrY,EACfT,EACAwT,EACAC,EACAb,EACAiE,EACAlD,EACA7B,EACAiH,EAmBAlV,CAlBJ,IAZArD,EAAUA,MACNkR,EAAO7S,KACPuE,KAEApD,EAASQ,EAAQR,OACjBwT,EAAOhT,EAAQgT,KACfC,EAAOjT,EAAQiT,KACfb,EAAYrK,EAAYiL,IAAUjL,EAAYkL,GAAsBZ,EAAAA,EAAdW,EAAOC,EAC7DoD,EAAWnF,EAAK+D,cAChB9B,EAAsBnT,EAAQmT,oBAC9B7B,EAActR,EAAQsR,YAEtB+E,EAAU,CACV,GAAItO,EAAY/H,EAAQwY,WACpB,MAAO5V,EAGP2V,GADApF,EACsBA,EACf7B,EACeA,EAEAJ,EAAKI,YAAYJ,EAAKoE,YAWpD,KARKe,GAAY7W,IACbiJ,EAAOgB,GAAMmJ,QAAQnK,GACjBjJ,OAAQA,EACRuT,eAAgB9I,GAAM5L,KAAKyY,gBAAiBzY,QAC7CoK,MAEHpF,EAAMgT,EAAWkC,EAAsBrH,EAAKS,aAAalJ,GAC7D7F,EAAOvE,KAAK2X,oBAAsB,GAAIvM,IAAMpL,KAAKmY,SAASnT,EAAKhF,KAAK2X,qBAAqBwC,UAAUxY,EAAQwY,WACtGvY,EAAI,EAAGA,EAAIwI,EAAK9I,UACbM,GAAKmS,GADgBnS,IAIzB8W,EAAOtO,EAAKxI,GACZqY,EAAUja,KAAKmY,SAASnT,EAAK0T,EAAKpD,IAClC/Q,EAAOmU,EAAKpD,IAAM,GAAIlK,IAAM6O,GAASE,UAAUxY,EAAQwY,UAE3D,OAAO5V,IAEX6V,cAAe,SAAUhQ,EAAMzI,GAAhB,GAQHmR,GAEA9N,EACAqV,EAAmBzY,EAAG8W,EAAM5R,EAVhC+L,EAAO7S,KACPuE,IAGJ,IAFA5C,EAAUA,MACVA,EAAQ+S,eAAiB9I,GAAM5L,KAAKyY,gBAAiBzY,MACjD6S,EAAK+D,cACL,MAAO/D,GAAKyH,sBAAsBlQ,EAAMzI,EAOxC,KALImR,EAAkB9S,KAAK2X,mBAC3BpT,EAAS6G,GAAMmJ,QAAQnK,EAAMzI,GACzBqD,EAAMhF,KAAKsT,aAAa/O,EAAO6F,MAEnCA,EAAOpF,EAAI8N,OACNlR,EAAI,EAAGA,EAAIwI,EAAK9I,OAAQM,IACzB8W,EAAOtO,EAAKxI,GACR8W,EAAKpD,KAAOxC,IAGhBhM,EAAW9B,EAAI0T,EAAKpD,IACpB+E,KAAuBvT,IAAYA,EAASxF,QACvCoX,EAAKxC,UACNwC,EAAKxC,OAAOmE,IAAsB3B,EAAK6B,cAEvC7B,EAAKxC,UAAYwC,EAAK6B,eAAgB,KACtC7B,EAAK6B,YAAcF,GAEnBA,IACAjQ,EAAOA,EAAKoQ,MAAM,EAAG5Y,EAAI,GAAG4C,OAAOsC,EAAUsD,EAAKoQ,MAAM5Y,EAAI,KAKxE,OAFI2C,GAAO6F,KAAOA,EAEX7F,GAEX+V,sBAAuB,SAAUlQ,EAAMzI,GAAhB,GAGf4C,GACAuQ,EAHAjC,EAAO7S,KACPyT,EAAWZ,EAAKwD,cAmBpB,OAhBIxD,GAAKoE,aAAe7M,GAASqJ,EAAS3M,UAAa2M,EAASE,MAC5DF,EAAWZ,EAAK4G,cAAc5G,EAAKoE,aAEvCtV,EAAQsR,YAAcQ,EAAS3M,aAC/BnF,EAAQ4R,OAASE,EAASE,QAC1BpP,EAASsO,EAAK4H,kBAAkBrQ,EAAMzI,GACtCkR,EAAK6H,yBAAyBnW,EAAO6F,KAAMA,GAC3CyI,EAAK8H,uBAAuBpW,EAAO6F,KAAM7F,EAAO0O,aAChDJ,EAAK+H,wBAAwBrW,EAAO6F,MACpC7F,EAAOsW,gBAAkBhI,EAAKiI,iBAAiBvW,EAAO6F,KAAMzI,GACxDA,EAAQR,SACR2T,EAAsBvQ,EAAOuQ,oBAC7BjC,EAAKkI,8BAA8BjG,EAAqB1K,GACxDyI,EAAK2G,wBAAwB1E,GAC7BnT,EAAQmT,oBAAsBA,GAE3BvQ,GAEXuW,iBAAkB,SAAU1Q,GAAV,GACVyI,GAAO7S,KACPgb,EAAgB5Q,EAAK,OACrB6Q,EAAmBpI,EAAKqI,aAAaF,GACrCH,EAAkBI,EAAiBzW,OAAO4F,EAC9C,OAAOyQ,IAEXD,wBAAyB,SAAUO,GAAV,GAQjBzC,GACAhS,EACA0U,EACKC,EAVLxI,EAAO7S,KACP+U,EAAOpJ,GAAQwP,GAAmBA,GAAmBA,GACrDG,EAAWzI,EAAKiH,uBAChBhH,EAAkBD,EAAK8E,mBACvB5E,EAAUF,EAAK8F,gBACf3F,EAAgBH,EAAK8D,sBACrBlD,EAAWZ,EAAKwD,cAIpB,KAASgF,EAAY,EAAGA,EAAYtG,EAAKzT,OAAQ+Z,IAC7C3C,EAAO3D,EAAKsG,GACN3C,YAAgB4C,KAGtBzI,EAAK0I,gBAAgB7C,GACrBhS,EAAUmM,EAAKqI,aAAaxC,GAC5B0C,EAAe1U,GAAWA,EAAQpF,OAASoF,EAAQA,EAAQpF,OAAS,GAAK7B,EACrEiZ,EAAK1F,KAAmBF,EACxBD,EAAK2I,cAAc/H,EAAS3M,SAAUgM,EAAiB4F,EAAM4C,GACtDF,GACPvI,EAAK2I,cAAc/H,EAAS3M,SAAUsU,EAAarI,GAAU2F,EAAM4C,KAI/EE,cAAe,SAAUxW,EAAKsQ,EAAImG,EAAaH,GAAhC,GAIPI,GAGAC,EANA5I,EAAU/S,KAAK2Y,eACnB3T,GAAIsQ,GAAMtQ,EAAIsQ,OACdgG,EAAWA,GAAYtb,KAAK8Z,uBACxB4B,EAAc1W,EAAIsQ,GAAInU,OAAO,SAAU+B,GACvC,MAAOuY,GAAY1I,KAAa7P,EAAQ6P,KACzC,GACC4I,EAAYD,EAAc1W,EAAIsQ,GAAI/S,QAAQmZ,MAC1CC,QAAsBD,YAAuBJ,KAC7CtW,EAAIsQ,GAAIqG,GAAaF,IAG7Bf,yBAA0B,SAAUkB,EAAeC,GAAzB,GAKlBC,GACAC,EACA7I,EACA8I,EACAC,EACKra,EATLiR,EAAO7S,KACPuT,EAASV,EAAKwD,eAAe1C,QAC7BZ,EAAUF,EAAK8F,gBACf2C,EAAWzI,EAAKiH,sBAMpB,KAASlY,EAAI,EAAGA,EAAIga,EAActa,OAAQM,IACtCka,EAAgBF,EAAcha,GAC9Bma,EAAkBD,EAAc/I,GAC1B+I,YAAyBR,KACrB/H,EAAOwI,YAA4BT,GAQrCM,EAAcha,GAAK2R,EAAOwI,IAP1B7I,EAAWL,EAAKqJ,SAASH,GACzBC,EAAgBH,EAAiBtZ,QAAQ2Q,GACrCA,GAAY8I,SACZC,EAAiBJ,EAAiBM,GAAGH,GACrCJ,EAAcha,GAAKqa,MAQvClB,8BAA+B,SAAU/V,EAAK6W,GAAf,GAElBO,GADLvJ,EAAO7S,IACX,KAASoc,IAAOpX,GACZ6N,EAAK6H,yBAAyB1V,EAAIoX,GAAMP,IAGhDrD,kBAAmB,SAAUE,GACzB,GAAI7F,GAAO7S,IACP6S,GAAK+D,gBACL/D,EAAK0I,gBAAgB7C,GACrB7F,EAAKwJ,qBAAqB3D,KAGlC6C,gBAAiB,SAAU7C,GAAV,GACT7F,GAAO7S,KACPuT,EAASV,EAAKwG,aACdtG,EAAUF,EAAK8F,eACdjP,GAAYgP,EAAK3F,MAClBQ,EAAOmF,EAAK3F,IAAY2F,IAGhC2D,qBAAsB,SAAU3D,EAAM7X,GAAhB,GACdgS,GAAO7S,KACPiT,EAAcJ,EAAKoF,sBACnBlF,EAAUF,EAAK8F,gBACf3F,EAAgBH,EAAK8D,sBACrB2F,EAAS5D,EAAK3F,GACdwC,EAAWmD,EAAK1F,EACpBnS,GAAQA,GAAS,EACjBoS,EAAYqJ,GAAUrJ,EAAYqJ,OAClCrJ,EAAYsC,GAAYtC,EAAYsC,OACpCtC,EAAYsC,GAAU1O,OAAOhG,EAAO,EAAG6X,IAE3CX,oBAAqB,SAAUG,GAAV,GAIJtW,GAHTiR,EAAO7S,IAEX,IADAkY,EAAQvM,GAAQuM,GAASA,GAASA,GAC9BrF,EAAK+D,cACL,IAAShV,EAAI,EAAGA,EAAIsW,EAAM5W,OAAQM,IAC9BiR,EAAK0J,kBAAkBrE,EAAMtW,IAC7BiR,EAAK2J,uBAAuBtE,EAAMtW,KAI9C2a,kBAAmB,SAAU7D,GAAV,GACX7F,GAAO7S,KACPuT,EAASV,EAAKwG,aACdtG,EAAUF,EAAK8F,eACdjP,GAAYgP,EAAK3F,MAClBQ,EAAOmF,EAAK3F,IAAYtT,IAGhC+c,uBAAwB,SAAU9D,GAAV,GAMhBiD,GALA9I,EAAO7S,KACPiT,EAAcJ,EAAKoF,sBACnBjF,EAAgBH,EAAK8D,sBACrBpB,EAAWmD,EAAK1F,EACpBC,GAAYsC,GAAYtC,EAAYsC,OAChCoG,EAAY9I,EAAK4J,oBAAoB/D,GACrCiD,QACA1I,EAAYsC,GAAU1O,OAAO8U,EAAW,IAGhDc,oBAAqB,SAAU/D,GAC3B,GAAI7F,GAAO7S,IACX,OAAO6S,GAAK6J,gBAAgBhE,EAAM7F,EAAKoF,oBAE3CyE,gBAAiB,SAAUhE,EAAMiE,GAAhB,GAMTjB,GAGAC,EARA9I,EAAO7S,KACPgF,EAAM2X,MACN3J,EAAgBH,EAAK8D,sBACrBpB,EAAWmD,EAAK1F,EAMpB,OALAhO,GAAIuQ,GAAYvQ,EAAIuQ,OAChBmG,EAAc1W,EAAIuQ,GAAUpU,OAAO,SAAU+B,GAC7C,MAAOwV,GAAKkE,MAAQ1Z,EAAQ0Z,MAC7B,GACCjB,EAAYD,EAAc1W,EAAIuQ,GAAUhT,QAAQmZ,OAGxDQ,SAAU,SAAU5G,GAAV,GAIG1T,GAHLiR,EAAO7S,KACP+S,EAAUF,EAAK8F,gBACfvO,EAAOyI,EAAKoE,UAChB,KAASrV,EAAI,EAAGA,EAAIwI,EAAK9I,OAAQM,IAC7B,GAAIwI,EAAKxI,GAAGmR,KAAauC,EACrB,MAAOlL,GAAKxI,IAIxBib,kBAAmB,SAAU3J,GACzB,GAAI6B,GAAO/U,KAAK+U,MAChB,OAAOA,GAAKzT,QAAUyT,EAAKA,EAAKzT,OAAS,KAAO4R,GAEpD4J,6BAA8B,WAAA,GACtBjK,GAAO7S,KACPyT,EAAWZ,EAAKwD,eAChB1U,GACAgT,KAAM9B,EAAK8B,OACXC,KAAM/B,EAAK+B,OACXmI,KAAMlK,EAAKkK,OACXC,SAAUnK,EAAKmK,WACfxc,KAAMqS,EAAKrS,OACXW,OAAQ0R,EAAK1R,SACbyO,MAAOiD,EAAKjD,QACZuK,UAAWtH,EAAKsH,YAChBzF,eAAgB9I,GAAMiH,EAAK4F,gBAAiB5F,GAC5CI,YAAaQ,EAAS3M,SACtByM,OAAQE,EAASE,IAErB,OAAOhS,IAEXiV,YAAa,WACT,GAAIoG,GAAWhd,KAAKgd,UACpB,QAAQtT,EAAYsT,IAAaA,EAAW,GAEhDC,sBAAuB,SAAUC,EAAQhF,GACrC,GAAIrF,GAAO7S,IACXkL,IAAWyK,GAAGsH,sBAAsBrH,KAAK/C,EAAMqK,EAAQhF,GACnDrF,EAAK+D,eACL/D,EAAKsK,+BAA+BD,EAAQhF,IAGpDiF,+BAAgC,SAAUD,EAAQhF,GAAlB,GACxBrF,GAAO7S,KACP6U,EAAQ/T,SAAS+R,EAAKuK,gBAAiB,GAC3C,OAAKzT,GAASkJ,EAAKuK,kBAIJ,QAAXF,EACArI,GAASqD,EAAM5W,OACG,WAAX4b,EACPrI,GAASqD,EAAM5W,OACG,eAAX4b,GAAsC,SAAXA,GAAsBrK,EAAKlR,QAAQ0b,aAEnD,SAAXH,IACPrI,EAAQhC,EAAKyK,4BAFbzI,EAAQhC,EAAKyK,2BAIjBzK,EAAKuK,gBAAkBvI,EATvB,IAHIhC,EAAKyK,2BACL,IAaRC,gBAAiB,SAAUC,EAAaC,GACpC,GAAI5K,GAAO7S,IACXkL,IAAWyK,GAAG4H,gBAAgB3H,KAAK/C,EAAM2K,EAAaC,GACtD5K,EAAK6K,yBAAyBF,IAElCE,yBAA0B,SAAUF,GAChC,GAAI3K,GAAO7S,IACN6S,GAAKlR,QAAQgc,kBACVH,IAAgB/d,EAChBoT,EAAKuK,gBAAkBI,GAEnB3K,EAAKyG,2BACLzG,EAAKyK,2BAETzK,EAAK2G,wBAAwB/Z,MAIzCme,eAAgB,WACZ,GAAI/K,GAAO7S,IACX,OAAK0J,GAAYmJ,EAAKuK,iBAGfvK,EAAKyK,2BAFDzK,EAAKuK,iBAIpBE,yBAA0B,WAAA,GAClBzK,GAAO7S,KACPoK,EAAOyI,EAAKgL,+BAIhB,OAHIzT,GAAK9I,SACLuR,EAAKuK,gBAAkBhT,EAAK9I,QAEzBuR,EAAKuK,iBAEhBS,8BAA+B,WAC3B,MAAO7d,MAAK8d,yBAAyB9d,KAAKiX,aAE9C6G,yBAA0B,SAAU1T,GAAV,GAClByI,GAAO7S,KACP+U,EAAOlC,EAAKqG,gBAAgB9O,GAC5B7F,EAASwQ,EAAKlB,sCACdO,SAAUvB,EAAKgH,gBAAgBzF,SAC/BnB,YAAaJ,EAAKoF,mBAEtB,OAAO1T,IAEXkW,kBAAmB,SAAUrQ,EAAMzI,GAC/B,GAAI4C,GAAS8P,GAAUE,QAAQnK,EAAMnF,GAAOtD,EAAS3B,KAAK2Z,4BAA8BvE,sBAAsB,IAC9G,OAAO7Q,IAEXoW,uBAAwB,SAAUvQ,EAAM6I,GAAhB,GAEhBrR,GADAyR,EAAajJ,EAAK9I,MAEtB,KAAKM,EAAI,EAAGA,EAAIyR,EAAYzR,IACxB5B,KAAK+d,sBAAsB3T,EAAKxI,GAAIqR,IAG5C8K,sBAAuB,SAAU7K,EAAUD,GAApB,GAKfnM,GACAuT,EALAvH,EAAkB9S,KAAK2X,kBACvBzE,GAASoC,KAAOxC,IAGhBhM,EAAWmM,EAAYC,EAASoC,QAChC+E,KAAuBvT,IAAYA,EAASxF,QAC3C4R,EAASgD,SAGThD,EAASgD,UACVhD,EAASgD,OAAOmE,IAAsBnH,EAASqH,cAE/CrH,EAASgD,UAAYhD,EAASqH,eAAgB,KAC9CrH,EAASqH,YAAcF,MAG/B2D,cAAe,SAAUrc,EAASsc,GAC9BA,EAASrI,KAAK5V,OAElBke,aAAc,SAAU5I,GACpB,GAAInM,GAAQnJ,KAAK8V,IAAIR,EACrBnM,GAAM+M,QAAO,GACb/M,EAAMoR,YAAcva,KAAKme,WAAWhV,GAAO7H,OAAS,GAExD8c,YAAa,SAAU9I,EAAI7M,GACvBzI,KAAK8V,IAAIR,GAAI+I,OAAS5V,GAE1B6V,QAAS,SAAUlU,EAAMmU,GAChBA,GAA4C,IAApBA,EAAcjJ,KACvCtV,KAAKkX,MAAQlX,KAAKwe,cAEtBtT,GAAWyK,GAAG2I,QAAQ1I,KAAK5V,KAAMoK,EAAMmU,GACvCve,KAAKye,OAASze,KAAKkX,MAAM5V,QAE7Bod,KAAM,SAAUvV,GAAV,GACEwV,GAAS,SACTC,EAAS5e,KAAK2B,QAAQkd,eAAiB7e,KAAK2B,QAAQ0b,cAAgBrd,KAAK2B,QAAQgc,iBAAmB3d,KAAK2B,QAAQmd,gBAAkB9e,KAAK2B,QAAQod,iBAChJC,EAAiBxf,EAAEyf,WAAWC,UAAUC,SAC5C,IAAIhW,EAAM+M,UACN,GAAI0I,EACA,MAAOI,OAEJ7V,GAAMoR,cACboE,EAAS,OACT3e,KAAK8X,iBAAiB3O,GAE1B,OAAOnJ,MAAK2e,IAAUrJ,GAAInM,EAAMmM,KAAM8J,KAAKxT,GAAM5L,KAAKke,aAAcle,KAAMmJ,EAAMmM,KAAK+J,KAAKzT,GAAM5L,KAAKoe,YAAape,KAAMmJ,EAAMmM,MAElIgK,SAAU,SAAUzH,EAAMvR,GAMtB,IANM,GACFuM,GAAO7S,KACP+S,EAAUF,EAAK8F,gBACf3F,EAAgBH,EAAK8D,sBACrB4I,EAAS1H,EAAK9E,GACdiF,EAAWnF,EAAK+D,cACbtQ,GAAO,CACV,GAAIA,EAAM0M,KAAmBuM,EACzB,OAAO,CAEXjZ,GAAQ0R,EAAWnF,EAAKgG,YAAYvS,GAASuM,EAAKkG,WAAWzS,GAEjE,OAAO,GAEXkZ,YAAa,SAAUlK,EAAImK,GAAd,GAGLC,GAIK9d,EANL2C,KACAwQ,EAAO/U,KAAK+U,MAEhB,IAAIO,IAAOmK,EACP,QAEJ,KAAS7d,EAAI,EAAGA,EAAImT,EAAKzT,OAAQM,IAC7B8d,EAAU3K,EAAKoH,GAAGva,GACd8d,EAAQnK,UAAYD,GACpB/Q,EAAOvC,KAAK0d,EAGpB,OAAOnb,IAEXoT,iBAAkB,WACd,MAAO3X,MAAKyX,OAAOtO,MAAMwM,GAAGgK,SAAS3f,KAAKyX,OAAOtO,MAAM6J,gBAE3D6G,cAAe,WACX,GAAID,IAAgB5Z,KAAK2B,QAAQ2U,YAAcnN,SAC/C,OAAOyQ,IAEXjB,cAAe,WACX,GAAIiB,GAAe5Z,KAAK6Z,eACxB,OAAOD,GAAatE,IAAM,MAE9BqB,oBAAqB,WACjB,GAAIiD,GAAe5Z,KAAK6Z,eACxB,OAAOD,GAAarE,UAAYpH,IAEpCgQ,WAAY,SAAUhV,GAClB,MAAOnJ,MAAKwf,YAAYrW,EAAMmM,GAAItV,KAAK2X,qBAE3C/D,UAAW,WACP,MAAO5T,MAAKwf,YAAYxf,KAAK2X,qBAEjCiI,UAAW,SAAUtZ,GACjB,MAAOtG,MAAKkb,aAAa5U,GAAO,IAEpCuZ,mBAAoB,SAAUle,GAAV,GAEZkR,GACAC,EACAE,EACAzO,EACAub,EACAC,EACAlI,EACKjW,CAAT,KARAD,EAAUA,MACNkR,EAAO7S,KACP8S,EAAkBD,EAAK8E,mBACvB3E,EAAgBH,EAAK8D,sBACrBpS,KACAub,EAA2BjN,EAAKmN,0BAA0Bre,GAGrDC,EAAI,EAAGA,EAAIke,EAAyBxe,OAAQM,IACjDme,EAAOD,EAAyBle,GAC5Bme,EAAK/M,KAAmBF,EACxBvO,EAAOvC,KAAK+d,IAEZlI,EAAOhF,EAAK+M,UAAUG,GAClBlI,GAAQtT,EAAOhC,QAAQsV,SACvBtT,EAAOvC,KAAK6V,GAIxB,OAAOtT,IAEXwU,WAAY,SAAU5P,GAClB,MAAOnJ,MAAK8V,IAAI3M,EAAMoM,WAE1BsD,YAAa,SAAUvS,GAAV,GACLuM,GAAO7S,KACPgT,EAAgBH,EAAK8D,sBACrBpD,EAASV,EAAKsG,YAAYtG,EAAKoE,YAC/B1B,EAAWjP,EAAM0M,GACjBhP,EAASuP,EAAOgC,IAAa1C,EAAKqJ,SAAS3G,EAC/C,OAAOvR,IAEXkX,aAAc,SAAU5U,GAIpB,IAJU,GACNuM,GAAO7S,KACPgE,EAAS6O,EAAKgG,YAAYvS,GAC1BI,KACG1C,GACH0C,EAAQoS,QAAQ9U,GAChBA,EAAS6O,EAAKgG,YAAY7U,EAE9B,OAAO0C,IAEXuZ,sBAAuB,WAAA,GAOfC,GAEA9E,EACAlI,EACAC,EACAC,EACKxR,EAZLiR,EAAO7S,KACP+U,EAAOlC,EAAKkC,OACZxQ,KACAuO,EAAkBD,EAAK8E,mBACvB5E,EAAUF,EAAK8F,gBACf3F,EAAgBH,EAAK8D,sBAErBjQ,IAKJ,KAAS9E,EAAI,EAAGA,EAAImT,EAAKzT,OAAQM,IAC7BsR,EAAW6B,EAAKnT,GAChBuR,EAAaD,EAASH,GACtBK,EAAmBF,EAASF,GAC5BkN,EAAerN,EAAKsN,cAAc/M,GAC7B8M,GAAgB9M,IAAqBN,IACtCpM,EAAUmM,EAAKqI,aAAahI,GAC5BkI,EAAe1U,GAAWA,EAAQpF,OAASoF,EAAQA,EAAQpF,OAAS,GAAKuR,EAAKqJ,SAAS9I,GACnFgI,GAAgB7W,EAAOhC,QAAQ6Y,SAC/B7W,EAAOvC,KAAKoZ,GAIxB,OAAO7W,IAEXyb,0BAA2B,SAAUre,GAAV,GAEnBkR,GACAkC,EACA9B,EACAF,EACAC,EACAE,EACAgN,EACApZ,EACAvC,EACK3C,CAAT,KAVAD,EAAUA,MACNkR,EAAO7S,KACP+U,EAAOlC,EAAKkC,OACZ9B,EAActR,EAAQsR,aAAeJ,EAAKI,YAAYJ,EAAKoE,YAC3DlE,EAAUF,EAAK8F,gBACf3F,EAAgBH,EAAK8D,sBAGrB7P,KACAvC,KACK3C,EAAI,EAAGA,EAAImT,EAAKzT,OAAQM,IAC7BsR,EAAW6B,EAAKnT,GAChBkF,EAAWmM,EAAYC,EAASH,IAChCmN,EAAerN,EAAKsN,cAAcjN,EAASF,IACtCkN,GACD3b,EAAOvC,KAAKkR,EAGpB,OAAO3O,IAEX4b,cAAe,SAAU5K,GAAV,GAEF3T,GADLmT,EAAO/U,KAAK+U,MAChB,KAASnT,EAAI,EAAGA,EAAImT,EAAKzT,OAAQM,IAC7B,GAAImT,EAAKnT,GAAG0T,KAAOC,EACf,MAAOR,GAAKnT,IAIxBC,MAAO,SAAUsH,GACb,GAAI5E,KACE4E,aAAiBU,KACnBV,EAAQnJ,KAAK8V,IAAI3M,GAErB,GACIA,GAAQnJ,KAAK+Y,WAAW5P,GACxB5E,UACK4E,EACT,OAAO5E,IAEX6b,oBAAqB,SAAUjX,GAAV,GAKbzC,GAJAmM,EAAO7S,IACX,OAAKmJ,IAAU0J,EAAK+D,eAGhBlQ,EAAUmM,EAAKqI,aAAa/R,GACzBzC,EAAQpF,QAHJ,GAKfH,OAAQ,SAAUoF,GACd,GAAI8Z,GAAanV,GAAWyK,GAAGxU,MAC/B,OAAIoF,KAAU9G,EACH4gB,EAAWzK,KAAK5V,KAAMuG,IAEjC8Z,EAAWzK,KAAK5V,KAAMuG,GAAtB8Z,IAEJC,sBAAuB,SAAU3e,GAC7B,GAAI8R,GAAWzT,KAAKqW,cAGpB,OAFA1U,GAAQsR,YAAcQ,EAAS3M,SAC/BnF,EAAQ4R,OAASE,EAASE,IACnBhS,GAEX4e,UAAW,SAAUnW,EAAMuK,GAEvB,MADAA,KAAO3U,KAAK4W,eAAuBjC,EAC5BzJ,GAAWyK,GAAG4K,UAAU3K,KAAK5V,KAAMoK,EAAMuK,IAEpDvK,KAAM,SAAUA,GAAV,GACEyI,GAAO7S,KACPuE,EAAS2G,GAAWyK,GAAGvL,KAAKwL,KAAK/C,EAAMzI,EAK3C,OAJIyI,GAAK+D,gBACL/D,EAAK4G,cAAc5G,EAAKoE,YACxBpE,EAAKyK,4BAEF/Y,GAEXic,cAAe,SAAUrX,GACrB,GAAI0J,GAAO7S,IACXkL,IAAWyK,GAAG6K,cAAc5K,KAAK/C,EAAM1J,GACvC0J,EAAK4N,iCAETC,eAAgB,SAAUvX,GACtB,GAAI0J,GAAO7S,IACP6S,GAAK+D,eACL/D,EAAKkF,oBAAoB5O,IAGjCwX,iBAAkB,WACd,GAAI9N,GAAO7S,IACP6S,GAAK+D,eACL/D,EAAK4G,cAAc5G,EAAKoE,aAGhC2J,qBAAsB,WAAA,GACd/N,GAAO7S,KACP6gB,IACAhO,GAAK+D,gBACL/D,EAAKiO,kBAAoBjO,EAAKmK,WAAa,EAC3C6D,EAAehO,EAAKiK,+BACpB+D,EAAajM,KAAO/B,EAAKiO,kBACzBD,EAAa7D,SAAWnK,EAAKiO,kBAC7BjO,EAAKkO,OAAOF,KAGpBJ,8BAA+B,WAAA,GACvB5N,GAAO7S,KACP6gB,IACAhO,GAAK+D,gBACAlN,EAAYmJ,EAAKiO,qBAClBD,EAAehO,EAAKiK,+BACpB+D,EAAajM,KAAO/B,EAAKiO,kBAAoB,EAC7CD,EAAa7D,SAAWnK,EAAKiO,kBAAoB,EACjDjO,EAAKkO,OAAOF,KAGpBhO,EAAKiO,kBAAoBrhB,GAE7BuhB,KAAM,WACF,GAAInO,GAAO7S,IACX,OAAOkL,IAAWyK,GAAGqL,KAAKpL,KAAK/C,GAAMoO,KAAK,WACtCpO,EAAK4N,mCAGbS,SAAU,WACN,GAAIrO,GAAO7S,IACP6S,GAAK+D,eACL/D,EAAK4G,cAAc5G,EAAKoE,eAIpCnN,EAAmBgI,OAAS,SAAUnQ,GAMlC,MALInC,GAAEmM,QAAQhK,GACVA,GAAYyI,KAAMzI,GACXA,YAAmBwJ,MAC1BxJ,GAAYyI,KAAMzI,EAAQyV,WAEvBzV,YAAmBmI,GAAqBnI,EAAU,GAAImI,GAAmBnI,IA0EhFoI,EAAgBiB,GAAGmW,MAAMlc,QACzBtD,SAAWyf,KAAM,iBACjBC,WAAY,WAAA,GACJxO,GAAO7S,KACPshB,EAAazO,EAAKyO,UACtB,OAAIA,IAAcA,EAAWC,QAClBvW,GAAGmW,MAAMxL,GAAG0L,WAAWzL,KAAK/C,GAEhC3M,KAAKsb,MAAM3O,EAAKuK,mBAAqB,IAAMvK,EAAKmK,YAAc,KAEzEyE,kBAAmB,SAAU9f,GACzB3B,KAAKshB,WAAahhB,MAAM8J,KAAKN,mBAAmBgI,OAAOnQ,EAAQ2f,aAEnElE,gBAAiB,WACb,GAAIkE,GAAathB,KAAKshB,UACtB,OAAOA,GAAaA,EAAW1D,kBAAoB,EAAI,KAG3D5T,EAAS1J,MAAMohB,WAAWzc,QAC1B2N,KAAM,SAAU1P,EAASvB,GACrBrB,MAAMohB,WAAW/L,GAAG/C,KAAKgD,KAAK5V,MAC9B2B,EAAU3B,KAAK2B,QAAUsD,IAAO,KAAUjF,KAAK2B,QAASA,GACxD3B,KAAKkD,QAAUA,EACflD,KAAK2hB,KAAK3hB,KAAK4hB,OAAQjgB,GACvB3B,KAAKmJ,MAAQnJ,KAAK2B,QAAQwH,MAC1BnJ,KAAKwV,OAASxV,KAAK6hB,QAAQ7hB,KAAK2B,QAAQ6B,SACxCxD,KAAK8hB,iBACL9hB,KAAK+hB,kBAETH,UACAE,eAAgB,WACZ9hB,KAAKqP,QAAUrP,KAAKkD,SAExB6e,eAAgB,WACZ,GAAIpgB,GAAU3B,KAAK2B,OACnB3B,MAAKsJ,SAAW,GAAI0B,IAAGgX,SAAShiB,KAAKqP,SACjCmG,OAAQxV,KAAKwV,OACb7R,OAAQhC,EAAQgC,OAChBse,eAAgBtgB,EAAQsgB,eACxB9Y,MAAOnJ,KAAKmJ,MACZ+Y,OAAQvgB,EAAQugB,UAGxBC,YAAa,SAAU/e,GACnB,MAAO8F,GAAiB9F,EAAQpD,KAAKmJ,QAEzC0Y,QAAS,SAAUre,GAAV,GAEDnB,GAAKf,EAAQ8B,EADboS,IAEJ,KAAKnT,EAAM,EAAGf,EAASkC,EAAQlC,OAAQe,EAAMf,EAAQe,IACjDe,EAASI,EAAQnB,GACbrC,KAAKmiB,YAAY/e,IACjBoS,EAAOxT,MACHrC,MAAOyD,EAAOzD,MACdyiB,OAAQhf,EAAOgf,OACfC,OAAQjf,EAAOif,QAI3B,OAAO7M,IAEX8M,IAAK,WACD,MAAOtiB,MAAKsJ,SAASgZ,OAEzBC,MAAO,WACHviB,KAAKkS,WAETA,QAAS,WACLlS,KAAKsJ,SAAS4I,UACdlS,KAAKsJ,SAASpG,QAAQhC,KAAK,IAAMZ,MAAMC,KAAK,iBAAmB,KAAKiiB,QAAQF,MAAMG,WAAWniB,MAAMC,KAAK,SACxGP,KAAKmJ,MAAQnJ,KAAKqP,QAAUrP,KAAKkD,QAAUlD,KAAKwD,QAAUxD,KAAKsJ,SAAW,QAG9EW,EAAcD,EAAO/E,QACrB2N,KAAM,SAAU1P,EAASvB,GACrBqI,EAAO2L,GAAG/C,KAAKgD,KAAK5V,KAAMkD,EAASvB,GACnC3B,KAAK0iB,kBACLpiB,MAAMqiB,UAAU3iB,KAAKqP,SACrBrP,KAAK4iB,QAEThB,QACItU,GACAT,IAEJlL,SACIkhB,QACIC,OAAO,EACPC,WAAW,EACXC,WAAW,EACXC,MAAO,OACPC,SAAS,IAGjBpB,eAAgB,WAAA,GACRngB,GAAU3B,KAAK2B,QACfwhB,IACJnjB,MAAKqP,QAAU7P,EAAE,oCAAoCe,KAAKD,MAAMC,KAAK,OAAQP,KAAKmJ,MAAMyT,KAAKwG,OAAO,wCAChGzhB,EAAQ6J,UACRxL,KAAKqjB,gBAAgBF,GACrBnjB,KAAKwV,WAELxV,KAAKsjB,cAAcH,GAEvBnjB,KAAKujB,eAAeJ,GACpB,GAAI9Y,GAASmZ,KAAKxjB,KAAKqP,QAAQvI,WAAW,IAAI2c,OAAON,GACrDnjB,KAAKqP,QAAQqU,SAAS/hB,EAAQ+hB,UAC9B1jB,KAAK6iB,OAAS,GAAI7X,IAAG2Y,OAAO3jB,KAAKqP,QAAS1N,EAAQkhB,SAEtDQ,gBAAiB,SAAUO,GACvB,GAAIpY,GAAWxL,KAAK2B,QAAQ6J,eACjBA,KAAaQ,KACpBR,EAAWqX,OAAOgB,SAASrY,IAE/BA,EAAWlL,MAAMkL,SAASA,GAAUxL,KAAKmJ,OACzCya,EAAK5hB,KAAKyI,EAAiBe,KAE/B8X,cAAe,SAAUM,GAAV,GACPvhB,GAAKf,EAAQ8B,EACbI,EAAUxD,KAAK2B,QAAQ6B,OAC3B,KAAKnB,EAAM,EAAGf,EAASkC,EAAQlC,OAAQe,EAAMf,EAAQe,IACjDe,EAASI,EAAQnB,GACbe,EAAOiG,UAGXua,EAAK5hB,KAAKyI,EAAiB,yCAA2CrH,EAAOzD,MAAQ,MAAQyD,EAAO6f,OAAS7f,EAAOzD,OAAS,IAAM,mBAE/HikB,EAAK5hB,KADLhC,KAAKmiB,YAAY/e,GACPqH,EAAiB,QAAUnK,MAAMC,KAAK,iBAAmB,KAAO6C,EAAOzD,MAAQ,iCAE/EsC,EAAgB,OAAS6hB,QAAS,iBAAmB9jB,KAAK2B,QAAQoiB,cAAc3gB,EAAQpD,KAAKmJ,YAInHoa,eAAgB,SAAUK,GACtBA,EAAK5hB,KAAKC,EAAgB,OAAS6hB,QAAS,kCAAoC9jB,KAAK2B,QAAQqiB,qBAEjGtB,gBAAiB,WACb,GAAIuB,GAAejkB,KAAKkkB,aAAetY,GAAM5L,KAAKmkB,QAASnkB,KAC3DA,MAAKqP,QAAQ+U,GAAG7X,GAAQD,GAAI,iBAAkBtM,KAAKkkB,cACnDlkB,KAAKqkB,WAAazY,GAAM5L,KAAKskB,MAAOtkB,MACpCA,KAAKqP,QAAQ+U,GAAG7X,GAAQD,GAAI,iBAAkBtM,KAAKqkB,YACnDrkB,KAAK6iB,OAAOlB,KAAK,QAAS,SAAUlZ,GAC5BA,EAAE8b,eACFN,EAAaxb,MAIzB+b,gBAAiB,WACbxkB,KAAKkkB,aAAe,KACpBlkB,KAAKqkB,WAAa,KAClBrkB,KAAKqP,QAAQoV,IAAInY,KAErB6X,QAAS,SAAU1b,GACfzI,KAAK0kB,QAAQpX,GAAQ7E,IAEzB6b,MAAO,WACHtkB,KAAK0kB,QAAQ7X,KAEjB+V,KAAM,WACF5iB,KAAK6iB,OAAO8B,SAAS/B,QAEzBL,MAAO,WACHviB,KAAK6iB,OAAOlB,KAAK,aAAc/V,GAAM5L,KAAKkS,QAASlS,OAAOuiB,SAE9DrQ,QAAS,WACLlS,KAAK6iB,OAAO3Q,UACZlS,KAAK6iB,OAAS,KACd7iB,KAAKwkB,kBACLxa,EAAO2L,GAAGzD,QAAQ0D,KAAK5V,SAG3BkK,EAAeF,EAAO/E,QACtBiN,QAAS,WACL,GAAIW,GAAO7S,IACX6S,GAAKvJ,SAAS4I,UACdW,EAAKvJ,SAASpG,QAAQuhB,MAAMjC,QAAQC,WAAWniB,MAAMC,KAAK,SAC1DsS,EAAK1J,MAAQ0J,EAAKxD,QAAUwD,EAAK3P,QAAU2P,EAAKrP,QAAUqP,EAAKvJ,SAAW,QAG9Ea,EAAWc,GAAgBhG,QAC3B2N,KAAM,SAAU1P,EAASvB,GAuBrB,GAtBAsJ,GAAgB0K,GAAG/C,KAAKgD,KAAK5V,KAAMkD,EAASvB,GAC5CmN,GAAQxO,MAAMgL,QAAQwD,MAAM5L,GAC5BlD,KAAK4kB,YAAY5kB,KAAK2B,QAAQ2f,YAC9BthB,KAAK6kB,QACL7kB,KAAK8kB,WACL9kB,KAAK+kB,UACL/kB,KAAKglB,eACLhlB,KAAKilB,cACLjlB,KAAKklB,YACLllB,KAAKmlB,aACLnlB,KAAKolB,cACLplB,KAAKqlB,gBACLrlB,KAAKslB,WACLtlB,KAAKulB,cACLvlB,KAAKwlB,eACLxlB,KAAKylB,cACLzlB,KAAK0lB,oBACL1lB,KAAK2lB,aACL3lB,KAAK4lB,YACD5lB,KAAK2B,QAAQkkB,UACb7lB,KAAKshB,WAAWwE,QAEhB9lB,KAAK+lB,kBAAmB,CACxB,GAAIC,GAAShmB,IACbA,MAAKqP,QAAQ4W,SAAS,wBACtBjmB,KAAKkmB,eAAiB,WAClBF,EAAOG,UAEX3mB,EAAEqjB,QAAQuB,GAAG,SAAW9X,GAAItM,KAAKkmB,gBAErC5lB,MAAM8lB,OAAOpmB,OAEjB2lB,WAAY,WAAA,GACJ9S,GAAO7S,KACPsJ,EAAWtJ,KAAK2B,QAAQ2H,SACxBgY,EAAazO,EAAKyO,WAClBvO,EAAUuO,EAAW3I,gBACrB3F,EAAgBsO,EAAW3K,sBAC3BqB,EAAWnF,EAAK+D,aACftN,IAAaA,EAAS+c,OAG3BrmB,KAAKsmB,UAAY,GAAIhmB,OAAM0K,GAAGub,wBAAwBvmB,KAAKqP,SACvDmX,SAAUxmB,KAAKwmB,SACfC,YAAY,EACZtlB,OAAQ,WACRulB,aAAc,KACdC,kBAAmB3mB,KAAKqP,QACxBuX,SAAU,SAAU/jB,GAAV,GACF2H,GAAO,WACP,MAAOhL,GAAEQ,MAAMwK,QAEfqc,EAAY,4CAChB,OAAOhkB,GAAIiE,SAAS,MAAM9B,IAAIwF,GAAM2K,UAAU2R,KAAKD,IAEvDvH,SAAU1T,GAAM,SAAUnI,EAAQsjB,GAAlB,GACRC,GAAOhnB,KAAKkT,SAAS6T,GACrBE,EAAMjnB,KAAKkT,SAASzP,EACxB,OAAOwjB,IAAOD,GAAQhnB,KAAKshB,WAAWhC,SAAS2H,EAAKD,IACrDhnB,MACHknB,eAAgB,SAAUvjB,GACtB,GAAIwjB,GAAKxjB,EAAOkC,QAAQ,KACxB,QACI6S,KAAMyO,EACNC,QAASD,IAGjBE,UAAWzb,GAAM,SAAUnI,GACvBzD,KAAKqP,QAAQ4W,SAAS,sBACtB,IAAI9c,GAAQnJ,KAAKkT,SAASzP,EAC1B,OAAOzD,MAAK0kB,QAAQtW,IAAa3K,OAAQ0F,KAC1CnJ,MACHsnB,KAAM1b,GAAM,SAAUnD,GAClBA,EAAEhF,OAASzD,KAAKkT,SAASzK,EAAEhF,QAC3BzD,KAAK0kB,QAAQrW,GAAM5F,IACpBzI,MACHunB,KAAM3b,GAAM,SAAUnD,GAIlB,MAHAA,GAAEhF,OAASzD,KAAKkT,SAASzK,EAAEhF,QAC3BgF,EAAEse,YAAc/mB,KAAKkT,SAASzK,EAAEse,aAChC/mB,KAAKqP,QAAQmY,YAAY,uBAClBxnB,KAAK0kB,QAAQpW,GAAM7F,IAC3BzI,MACHynB,QAAS7b,GAAM,SAAUnD,GAAV,GAWPif,GAVAV,EAAOhnB,KAAKkT,SAASzK,EAAEse,aACvBE,EAAMjnB,KAAKkT,SAASzK,EAAEhF,QACtBkkB,EAAsBV,EAAIjU,GAC1B4U,EAAmBtG,EAAW7E,oBAAoBwK,EAClDjP,KACAsJ,EAAW9E,uBAAuByK,GAClCA,EAAIjU,GAAiBgU,EAAOA,EAAKjU,GAAW,KAC5CuO,EAAW5H,0BAA0BsN,GACrCC,EAAIjU,GAAiB2U,GAErBD,EAAcT,EAAIjR,IAAI,WAAYgR,EAAOA,EAAK1R,GAAK,MACnD0C,GAAY0P,IACZpG,EAAW9E,uBAAuByK;AAClCA,EAAIjU,GAAiB2U,EACrBrG,EAAW9E,uBAAuByK,GAClC3F,EAAWjF,qBAAqB4K,EAAKW,IAEzCnf,EAAEhF,OAASwjB,EACXxe,EAAEse,YAAcC,EAChBhnB,KAAK0kB,QAAQnW,GAAS9F,IACvBzI,MACH6nB,aAAa,EACbC,kBAAmB,SAAUpP,GACzB,MAAOA,GAAK5R,SAAS,aAEzBihB,iBAAkB,SAAUC,GACxB,MAAOA,GAAShiB,QAAQ,aAAa1E,OAAS,EAAI,QAAU,cAIxE2mB,QAAS,SAAU9e,GAIf,MAHoB,gBAATA,KACPA,EAAQnJ,KAAKshB,WAAWxL,IAAI3M,IAEzBnJ,KAAKkoB,MAAMhnB,KAAK,IAAMZ,MAAMC,KAAK,OAAS,IAAM4I,EAAMyT,IAAM,MAEvE2I,YAAa,WAAA,GAED4C,GACAC,EAKAC,CAPJroB,MAAK2B,QAAQ2mB,aACTH,EAAcnoB,KAAKkH,MAAMrB,QAAQ,uBACjCuiB,EAAgB5oB,EAAEQ,KAAKooB,eAAezG,KAAK,iBAAmBrV,GAAK,cAAgBA,GAAIV,GAAM5L,KAAKuoB,aAAcvoB,OACpHA,KAAKonB,QAAQzF,KAAK,SAAWrV,GAAI,WAC7B6b,EAAY/f,WAAWpI,KAAKoI,YAC5BggB,EAAcjgB,UAAUnI,KAAKmI,aAE7BkgB,EAAgB/nB,MAAM+nB,cAAcroB,KAAKonB,SACzCiB,GAAiBA,EAAcG,UAC/BxoB,KAAKyoB,eAAiBJ,EACtBA,EAAcG,QAAQ7G,KAAK,SAAU,SAAUlZ,GAC3C0f,EAAY/f,YAAYK,EAAEigB,OAAOC,GAC7BP,GACAA,EAAcjgB,WAAWM,EAAEigB,OAAOE,QAMtDL,aAAc,SAAU9f,GAAV,GAINogB,GACAC,CAJArgB,GAAEsgB,UAGFF,EAAQvoB,MAAM0oB,YAAYvgB,GAC1BqgB,EAAYtpB,EAAEiJ,EAAEwgB,eAChBJ,IACIC,EAAU,GAAGI,aAAeJ,EAAU,GAAGK,eAAiBL,EAAU,GAAG3gB,UAAY2gB,EAAU,GAAGI,aAAeJ,EAAU,GAAGK,cAAgBN,EAAQ,GAAKC,EAAU,GAAG3gB,UAAY,GAAK0gB,EAAQ,IAC/LpgB,EAAEG,iBAENkgB,EAAUngB,IAAI,QAAU2D,IAAI,GAC5BtM,KAAKonB,QAAQjf,UAAUnI,KAAKonB,QAAQjf,aAAe0gB,MAG3DO,UAAW,WACP,GAAIC,GAAWrpB,KAAK2B,QAAQ0nB,QACvBrpB,MAAKkoB,MAAMhnB,KAAK,MAAMI,QACvBtB,KAAKspB,YAAYhpB,MAAMkL,SAAS,0DAC5BzJ,UAAWqN,GAAWyB,KAAO,IAAMzB,GAAWiB,QAC9CgZ,SAAUA,MAItBhL,OAAQ,SAAU5V,GACTzI,KAAKshB,WAAW1N,YAAYtS,QAC7BtB,KAAKupB,SAAUC,MAAO/gB,KAG9B6H,QAAS,SAAU7H,GAAV,GAQDiX,GACA+J,EACAC,CATJjhB,GAAIA,MACY,cAAZA,EAAEyU,QAA0Bld,KAAKqiB,QAGjCriB,KAAK0kB,QAAQtX,MAGbsS,EAAUlgB,EAAEQ,KAAK0f,WACjB+J,GAAoB,EAExBzpB,KAAK2pB,gBACL3pB,KAAKupB,UACLvpB,KAAK4pB,gBACD5pB,KAAK2B,QAAQkoB,eACT7pB,KAAK8pB,oBAAsB9pB,KAAKqiB,UAChCoH,EAAoB/J,EAAQhgB,GAAG,MAC/BgqB,EAAexjB,KAAKC,IAAInG,KAAK+pB,UAAUrK,GAAU,IAErD1f,KAAKgqB,gBAAgBN,EAAcD,IAEvCzpB,KAAK0kB,QAAQrX,MAEjB4c,gBAAiB,SAAU5gB,GAAV,GACTzH,GAAGsoB,EAAQxS,EACXyS,EAAgBnqB,KAAKshB,WAAW5J,aAChC0S,EAAapqB,KAAKqqB,cACtB,KAAKzoB,EAAI,EAAGA,EAAIwoB,EAAW9oB,OAAQM,IAC/BsoB,EAASE,EAAWrkB,GAAGnE,GACvB8V,EAAayS,EAAcD,EAAO3pB,KAAK,kBACvCP,KAAKsqB,eAAejhB,EAAS6gB,EAAOhpB,KAAK,MAAM4U,MAAO4B,IAG9D4S,eAAgB,SAAUjhB,EAASjJ,EAAOsX,GACtC,GAAIlU,GAAUxD,KAAKwD,OACnBxD,MAAKuqB,QAAQlhB,EAAS,WAClB,OACImhB,SAAUpqB,EACVgK,KAAMpF,GAAIxB,EAAS,SAAUinB,GACzB,OACIrnB,OAAQqnB,EACRtQ,UAAWzC,GAAcA,EAAW+S,EAAI9qB,cAM5DuY,MAAO,WACH,MAAIlY,MAAK+lB,kBACE/lB,KAAK0qB,OAAO1qB,KAAKkoB,OAAO1mB,IAAIxB,KAAK0qB,OAAO1qB,KAAK2qB,cAE7C3qB,KAAK0qB,OAAO1qB,KAAKkoB,QAGhCwC,OAAQ,SAAU1pB,GACd,MAAOA,GAAUE,KAAK,MAAMC,OAAO,WAC/B,OAAQ3B,EAAEQ,MAAMqB,SAAS+N,GAAWe,mBAG5Cka,aAAc,WACV,GAAIrpB,GAAYhB,KAAKkoB,KAIrB,OAHIloB,MAAK+lB,oBACL/kB,EAAYA,EAAUQ,IAAIxB,KAAK2qB,cAE5B3pB,EAAUE,KAAK,MAAMC,OAAO,WAC/B,MAAO3B,GAAEQ,MAAMqB,SAAS+N,GAAWe,mBAG3Cya,UAAW,WAAA,GAGCC,GAAsBC,EACjBlpB,EAHTgpB,EAAYtqB,MAAM0K,GAAGC,gBAAgB0K,GAAGiV,UAAUhV,KAAK5V,KAC3D,IAAIA,KAAK+lB,kBAAmB,CAExB,IADI8E,EAAID,EAAUtpB,OAAQwpB,EAAUhf,MAAM,EAAI+e,GACrCjpB,EAAIipB,IAAKjpB,GAAK,GACnBkpB,EAAIlpB,GAAKkpB,EAAIlpB,EAAIipB,GAAKD,EAAUhpB,EAEpCgpB,GAAYE,EAEhB,MAAOF,IAEXtB,YAAa,SAAUyB,GAAV,GACLta,GAASzQ,KAAKkD,QAAQhC,KAAK,aAC3BkmB,EAAU5nB,EAAEQ,KAAKonB,SAAS5lB,IAAIxB,KAAKooB,cAClC3X,GAAOnP,SACRmP,EAASjR,EAAE,4BAA8BkkB,SAAS1jB,KAAKkD,UAE3DlD,KAAKgrB,aAAavH,WACdzjB,KAAK+lB,mBACL/lB,KAAKirB,mBAAmBxH,WAE5B2D,EAAQriB,OACR0L,EAAO/F,KAAKqgB,IAEhBG,YAAa,WACTlrB,KAAKkD,QAAQhC,KAAK,aAAa6G,SAC/BvI,EAAEQ,KAAKonB,SAAS5lB,IAAIxB,KAAKooB,eAAe+C,QAE5CvB,cAAe,WAAA,GAOP5mB,GAGAooB,EATAvY,EAAO7S,KACPkD,EAAUlD,KAAKkD,QACfmoB,EAAcnoB,EAAQhC,KAAKmL,GAAM+C,GAAWa,iBAC5CX,EAASpM,EAAQhC,KAAKmL,GAAM+C,GAAWU,YACvCwb,EAAUpoB,EAAQhC,KAAKmL,GAAM+C,GAAWS,aACxC0b,EAAc1Y,EAAK+D,eAAiB/D,EAAK2Y,OAAS3Y,EAAK2Y,MAAMtoB,QAAQxD,GAAG,YAAcoL,EAAY+H,EAAK2Y,MAAMtoB,SAAW,EAExHuoB,EAAYnrB,MAAMgL,QAAQmgB,WAC9BvoB,GAAQwoB,IAAI3c,GAAQ/O,KAAK2B,QAAQqB,QAC7BooB,EAAc,SAAUhqB,GACxB,GAAIuqB,GAAeC,CACnB,SAAIxqB,EAAG,GAAGnB,MAAM+C,SAGZ2oB,EAAgBvqB,EAAG4B,SAEvB5B,EAAG4B,OAAO,QACV4oB,EAAYxqB,EAAG4B,SACf5B,EAAG4B,OAAO,IACH2oB,GAAiBC,IAExBR,EAAYloB,KACZF,EAASE,EAAQF,SAAW8H,EAAYwE,GAAUxE,EAAYwgB,GAAWC,EACzEF,EAAYroB,OAAOA,GACfhD,KAAK+lB,oBACL0F,EAAYzrB,KAAKiI,MAAM,GAAG4jB,YAAc7rB,KAAKiI,MAAMjE,SAAS,GAAG8nB,YAAcL,EAAY,EACzFzrB,KAAKooB,cAAcplB,OAAOA,EAASyoB,MAI/CM,QAAS,WACL/rB,KAAKgsB,8BACLhsB,KAAK4pB,iBAETlE,kBAAmB,WACf,GAAIuG,GAAMjsB,KAAKksB,mBACXD,KACAjsB,KAAKmsB,uBAAyBvgB,GAAM5L,KAAKksB,kBAAmBlsB,MAC5DR,EAAEqjB,QAAQuB,GAAG,SAAUpkB,KAAKmsB,0BAGpCD,kBAAmB,WAAA,GAENtqB,GACD6oB,EACA2B,EAHJjqB,EAAOnC,KAAKwD,QAASyoB,GAAM,EAAOI,EAAcxJ,OAAOyJ,WAAa,EAAIzJ,OAAOyJ,WAAaC,OAAOjqB,KACvG,KAASV,EAAI,EAAGA,EAAIO,EAAKb,OAAQM,IACzB6oB,EAAMtoB,EAAKP,GACXwqB,EAAW3B,EAAI+B,eACfJ,IAAa3sB,GAA0B,OAAb2sB,IAC1BH,GAAM,EACFG,EAAWC,EACXrsB,KAAKysB,WAAWhC,GAEhBzqB,KAAK0sB,WAAWjC,GAI5B,OAAOwB,IAEX/Z,QAAS,WACLjH,GAAgB0K,GAAGzD,QAAQ0D,KAAK5V,KAChC,IAAIshB,GAAathB,KAAKshB,UACtBA,GAAWqL,OAAO1gB,GAAQjM,KAAK4sB,iBAC/BtL,EAAWqL,OAAOxgB,GAAOnM,KAAK6sB,eAC9BvL,EAAWqL,OAAOvgB,GAAUpM,KAAK8sB,kBACjC9sB,KAAK+sB,mBAAqB,KAC1B/sB,KAAKgtB,SAAW,KACZhtB,KAAKkmB,gBACL1mB,EAAEqjB,QAAQ4B,IAAI,SAAWnY,GAAItM,KAAKkmB,gBAElClmB,KAAKsmB,YACLtmB,KAAKsmB,UAAUpU,UACflS,KAAKsmB,UAAY,MAEjBtmB,KAAK+iB,YACL/iB,KAAK+iB,UAAU7Q,UACflS,KAAK+iB,UAAY,MAEjB/iB,KAAK6nB,cACL7nB,KAAK6nB,YAAY3V,UACjBlS,KAAK6nB,YAAc,MAEnB7nB,KAAKitB,oBAAsBjtB,KAAKitB,mBAAmB/pB,UACnDlD,KAAKitB,mBAAmB/a,UACxBlS,KAAKitB,mBAAqB,MAE1BjtB,KAAKmsB,wBACL3sB,EAAEqjB,QAAQ4B,IAAI,SAAUzkB,KAAKmsB,wBAEjCnsB,KAAKktB,iBACLltB,KAAKkD,QAAQuhB,IAAInY,IACjBtM,KAAKqP,QAAQoV,IAAInY,IACbtM,KAAKyoB,gBACLzoB,KAAKyoB,eAAevW,UAExBlS,KAAKmtB,gBACD7L,IACAA,EAAW5N,UAAY,MAE3B1T,KAAKotB,gBAAkB,KACvBptB,KAAK4sB,gBAAkB5sB,KAAK6sB,cAAgB7sB,KAAK8sB,iBAAmB9sB,KAAKqtB,sBAAwB,KACjGrtB,KAAKkH,MAAQlH,KAAKonB,QAAUpnB,KAAKkoB,MAAQloB,KAAKiI,MAAQjI,KAAKkD,QAAUlD,KAAKstB,aAAettB,KAAKooB,cAAgB,KAC9GpoB,KAAKutB,YAAcvtB,KAAKwtB,YAAcxtB,KAAKgrB,aAAehrB,KAAKytB,sBAAwBztB,KAAK0tB,uBAAyB1tB,KAAK2tB,kBAAoB3tB,KAAKirB,mBAAqB,MAE5KtpB,SACIyf,KAAM,WACN5d,WACAqiB,UAAU,EACVyC,YAAY,EACZlf,YAAY,EACZwkB,UAAU,EACVtC,QAAS,KACTtoB,OAAQ,KACR6qB,YAAY,EACZxE,UACIyE,OAAQ,wBACRzd,QAAS,aACT0d,cAAe,kBACfxd,MAAO,QACPyd,UACI7b,KAAM,OACNC,OAAQ,SACRC,WAAY,SACZP,OAAQ,iBACRG,YAAa,mBACbC,QAAS,SACTM,MAAO,kBACPC,IAAK,kBAGbD,OAASyb,WAAW,GACpBlL,WAAW,EACXnS,YAAY,EACZtH,UAAU,EACVue,aAAa,GAEjBjG,QACI3V,GACAQ,GACAC,GACAC,GACAE,GACAC,GACAI,GACAH,GACAC,GACAI,GACAC,GACAC,GACAc,GACAC,GACAC,GACAC,GACAf,GACAtB,GACAe,GACAQ,GACAC,GACAC,GACAE,GACAC,GACAC,GACAC,GACAC,GACAC,IAEJggB,QAAS,SAAU/kB,EAAOglB,GAmBtB,QAASC,KACLvb,EAAKwb,cACLxb,EAAK0W,UACL1W,EAAKyb,2BAtBJ,GACDzb,GAAO7S,KACPgf,EAAiBxf,EAAEyf,WAAWC,UAAUC,UACxCjJ,EAAS/M,EAAM+M,QASnB,OARIrD,GAAK0b,qBAAuB1b,EAAKwP,SACjC7iB,EAAEiM,MAAiByW,SACnBrP,EAAK2b,aAELrlB,EAAMkV,SACNlV,EAAMiL,UAAW,EACjBjL,EAAMkV,OAAS5e,IAEdyW,GAAU/M,EAAMiL,SACV4K,GAEU,IAAVmP,IACPA,GAAUhlB,EAAMiL,UAEpBjL,EAAMiL,SAAW+Z,EAMZjY,IACD8I,EAAiBhf,KAAKshB,WAAW5C,KAAKvV,GAAOslB,OAAO7iB,GAAM,WACtDwiB,KACDpuB,QAEPouB,IACOpP,IAEXqP,YAAa,WACT,GAAIxb,GAAO7S,IACP6S,GAAK+D,eACL/D,EAAK6b,uBAGbA,oBAAqB,WAAA,GAIbnqB,GAGA0O,EANAJ,EAAO7S,KACPshB,EAAazO,EAAKyO,WAClBlX,EAAOkX,EAAWrK,WAElB4J,EAAeS,EAAWxE,8BAC9BjK,GAAK8b,iBAAgB,GACjB1b,EAAcqO,EAAWrJ,mBAAqBqJ,EAAWrO,YAAYqO,EAAWrK,YACpFqK,EAAW3G,uBAAuBvQ,EAAM6I,GACxC1O,EAAS+c,EAAWhH,sBAAsBlQ,EAAMyW,GAChDA,EAAa5N,YAAc1O,EAAO0O,YAClC4N,EAAa/L,oBAAsBvQ,EAAOuQ,oBAC1CwM,EAAW9J,iBAAmB8J,EAAWtH,qBAAqBzV,EAAOsW,gBAAiBgG,GACtFS,EAAWvM,KAAKxQ,EAAO6F,MACvBkX,EAAWhE,2BACXzK,EAAK+b,gBACL/b,EAAK8b,iBAAgB,IAEzBC,cAAe,WACX,GAAIpD,GAAQxrB,KAAKwrB,KACbA,IACAA,EAAMlb,WAGd6d,OAAQ,SAAUtrB,GACd,MAAO7C,MAAKkuB,QAAQluB,KAAKkT,SAASrQ,IAAM,IAE5CgsB,SAAU,SAAUhsB,GAChB,MAAO7C,MAAKkuB,QAAQluB,KAAKkT,SAASrQ,IAAM,IAE5CisB,gBAAiB,SAAUrmB,GAAV,GAMTsmB,GALAle,EAAOrR,EAAEiJ,EAAEwgB,eACX9f,EAAQnJ,KAAKkT,SAASrC,EACrB1H,KAGD4lB,EAAS5lB,EAAMiL,SAAoBpH,GAATD,GACzB/M,KAAK0kB,QAAQqK,GAAS5lB,MAAOA,KAC9BnJ,KAAKkuB,QAAQ/kB,GAEjBV,EAAEG,mBAENoc,aAAc,WAAA,GAKNgK,GACAC,EALApc,EAAO7S,IACN6S,GAAKlR,QAAQkoB,cAGdmF,EAASnc,EAAK5K,MAAMzG,IAAIqR,EAAK8X,aAC7BsE,EAAepc,EAAK3L,MAAMlD,SAASxC,IAAIhC,EAAE,SAAUqT,EAAKya,eACxDza,EAAKlR,QAAQ2mB,aACb0G,EAASA,EAAOxtB,IAAIytB,GACpBA,EAAa1uB,KAAKgN,QAEtBvN,KAAK+sB,mBAAqBiC,EAC1BA,EAAO5K,GAAG9jB,MAAMgL,QAAQ4jB,MAAQ,aAAe5iB,GAAK,YAAcA,GAAIkC,GAAS,YAAa5C,GAAMiH,EAAKsc,YAAatc,IAAOuR,GAAG,QAAU9X,GAAIV,GAAMiH,EAAKuc,YAAavc,IAAOuR,GAAG,WAAa9X,GAAIV,GAAMiH,EAAKwc,WAAYxc,IAAOuR,GAAG,UAAY9X,GAAIV,GAAMiH,EAAKyc,cAAezc,MAE9QkX,UAAW,SAAUwF,GACjB,GAAIC,GAAqB,CAIzB,OAHIxvB,MAAK2qB,cAAgBnrB,EAAE8f,SAAStf,KAAK2qB,YAAY,GAAI4E,EAAG,MACxDC,EAAqBlrB,EAAYc,EAAcpF,KAAKwD,UAAUlC,QAE3D9B,EAAE+vB,GAAIvrB,SAAS8C,WAAWjG,MAAM0uB,GAAMC,GAEjD1F,iBAAkB,WACd,GAAI2F,GAASnvB,MAAMoL,gBACnB,SAAK+jB,IAGEzvB,KAAKiI,MAAM,KAAOwnB,GAAUjwB,EAAE8f,SAAStf,KAAKiI,MAAM,GAAIwnB,IAAWzvB,KAAK2qB,cAAgB3qB,KAAK2qB,YAAY,KAAO8E,GAAUjwB,EAAE8f,SAAStf,KAAK2qB,YAAY,GAAI8E,MAEnKzF,gBAAiB,SAAUN,EAAcD,GAAxB,GACTiG,GACA7sB,EACA0sB,CACA7F,KAAiBjqB,GAAaiqB,EAAe,IAG7C1pB,KAAKgtB,UACLhtB,KAAKgtB,SAASxF,YAAY,mBAE1BiC,EACAzpB,KAAK0f,QAAQ1f,KAAKkH,MAAMhG,KAAK,MAAM6E,GAAG2jB,KAEtCgG,EAAW,EACXhG,EAAe,EACf7mB,EAAMrD,IACFQ,KAAK2qB,cACL9nB,EAAM7C,KAAK2qB,YAAYzpB,KAAK,qBAAqB6E,GAAG2pB,IAExD7sB,EAAMA,EAAIrB,IAAIxB,KAAKkoB,MAAMphB,WAAWf,GAAG2pB,IACvCH,EAAK1sB,EAAI3B,KAAK,eAAe6E,GAAG2jB,GAChC1pB,KAAK0f,QAAQ6P,IAEbvvB,KAAKgtB,UACLhlB,EAAWhI,KAAKgtB,SAASnnB,QAAQ,SAAS,IAAI,KAGtD6Z,QAAS,SAAUiQ,GACf,GAAIjQ,GAAU1f,KAAKgtB,QASnB,OARA2C,GAAanwB,EAAEmwB,IACXA,EAAWruB,QAAYoe,GAAWA,EAAQ,KAAOiQ,EAAW,KAC5D3vB,KAAK4vB,mBAAmBlQ,EAASiQ,GACjC3vB,KAAK6vB,kBAELF,GAAcA,EAAWruB,SACzBtB,KAAK8vB,eAAiBH,EAAW3rB,SAAS8C,SAASqG,IAAWtM,MAAM8uB,IAEjE3vB,KAAKgtB,UAEhB+C,YAAa,SAAUJ,GACnB,GAAI9c,GAAO7S,IAOX,OANA2vB,GAAanwB,EAAEmwB,GACXA,EAAW,KACX9c,EAAKma,SAAW2C,EAChB9c,EAAK+c,mBAAmB/c,EAAKma,SAAU2C,GACvC9c,EAAKgd,kBAEFhd,EAAKma,UAEhB6C,eAAgB,WAAA,GAMRhtB,GACAmtB,EACAC,EACAC,EACAC,EATAzQ,EAAU1f,KAAKgtB,SACf1E,EAAatoB,KAAK2B,QAAQ2mB,UACzB5I,IAAY4I,IAGbzlB,EAAM6c,EAAQ1b,SACdgsB,EAAiBntB,EAAIgD,QAAQ,SAAS7B,SACtCisB,EAAsBD,EAAetwB,GAAG,gDACxCwwB,EAAcF,EAAetwB,GAAG,0CAChCywB,EAAsB3wB,EAAEQ,KAAKonB,SAAS,GACtC8I,GACAlwB,KAAKowB,UAAUpwB,KAAKqwB,YAAYxtB,GAAK,GAAIstB,GAEzCnwB,KAAKooB,gBACLpoB,KAAKooB,cAAc,GAAGjgB,UAAYgoB,EAAoBhoB,WAErD8nB,GACDjwB,KAAKowB,UAAU1Q,EAAQ,GAAIyQ,KAGnCC,UAAW,SAAUltB,EAASlC,GAAnB,GAYCiH,GAXJqoB,EAAqBptB,EAAQqtB,QAAQC,cACrCC,EAAsC,OAAvBH,GAAsD,OAAvBA,EAC9CI,EAAgBxtB,EAAQutB,EAAe,aAAe,aACtDE,EAAmBztB,EAAQutB,EAAe,cAAgB,gBAC1DG,EAAkB5vB,EAAUyvB,EAAe,aAAe,aAC1DI,EAAqB7vB,EAAUyvB,EAAe,cAAgB,gBAC9DK,EAAiBJ,EAAgBC,EACjCpsB,EAAS,EACTwsB,EAAe,EACfC,EAAoB,CACpBliB,KAAS2hB,IACLxoB,EAAQzI,EAAE0D,GAAS2C,QAAQ,SAAS,GACpCyC,GAAQD,KACR0oB,EAAe9oB,EAAMgpB,WACd3oB,GAAQ4oB,UACfF,EAAoB/oB,EAAMgpB,WAAa3wB,MAAMgL,QAAQmgB,cAG7DmF,EAAkB1qB,KAAKirB,IAAIP,EAAkBG,EAAeC,GAExDzsB,EADAqsB,EAAkBF,EACTA,EACFI,EAAiBF,EAAkBC,EACtCF,GAAoBE,EACXC,EAAiBD,EAEjBH,EAGJE,EAEbrsB,EAAS2B,KAAKirB,IAAI5sB,EAASwsB,GAAgBC,EAC3ChwB,EAAUyvB,EAAe,aAAe,aAAelsB,GAE3DsgB,MAAO,WACH,GAAIvP,GAAKtV,KAAKkD,QAAQ3C,KAAK,OAAS,MAChC+U,KACAtV,KAAKoxB,WAAa9b,EAAK,oBAG/B+b,kBAAmB,SAAUppB,EAAOyX,GAAjB,GAKX4R,GAJAzwB,EAAQ6e,EAAQnf,KAAK,aACzB,OAAKM,IAGDywB,EAAqBlsB,EAAcpF,KAAKwD,SAASlC,OACjDgwB,IAAuBrpB,EAAMpC,QAAQ,OAAOxE,SAAS,yBAAyB,GACvER,EAAQywB,EAEZzwB,GANIpB,GAQf8xB,kBAAmB,SAAUvwB,EAAW0e,GAArB,GACXtf,GACAyC,EAAM6c,EAAQ1b,SACd/C,EAAOD,EAAU8F,SAAS0H,IAC1BkhB,EAAWzuB,EAAKJ,MAAMgC,GACtBhC,EAAQb,KAAKqxB,kBAAkBrwB,EAAW0e,EAC9C,IAAI7e,GAAS6e,EAAQre,SAAS,YAE1B,MADAjB,GAAQmF,EAAmBma,GACpBtf,EAAM2F,GAAG3F,EAAMkB,OAAS,EAGnC,IADAT,EAAQqF,KAAKC,IAAItD,EAAIiE,SAASqG,IAAWtM,MAAM6e,GAAU1f,KAAK8vB,gBAAkB,GAC5EjtB,EAAIxB,SAAS,gBACb,MAAON,GAAcC,GAAWG,OAAOpB,GAAegG,GAAGlF,EAE7D,IAAI6uB,OAEA,GADA7sB,EAAM7B,EAAUE,KAAK,4BAChB2B,EAAI,GACL,MAAO9B,GAAcC,GAAWG,OAAOpB,GAAegG,GAAGlF,OAG7DgC,GAAmB,IAAb6sB,EAAiBlwB,IAAMyB,EAAK8E,GAAG2pB,EAAW,EAGpD,OADAtvB,GAAQyC,EAAIiE,SAASqG,IAEV/M,EAAM2F,GADb3F,EAAMkB,OAAST,EACCA,EAEJ,IAEpB2wB,kBAAmB,SAAUxwB,EAAW0e,GAArB,GACXtf,GAeAqxB,EAEIC,EACAC,EACKtvB,EAASf,EAlBlBuB,EAAM6c,EAAQ1b,SACd/C,EAAOD,EAAU8F,SAAS0H,IAC1BkhB,EAAWzuB,EAAKJ,MAAMgC,GACtBhC,EAAQb,KAAKqxB,kBAAkBrwB,EAAW0e,EAC9C,IAAIgQ,OAAkB7uB,IAAUpB,GAAaigB,EAAQre,SAAS,YAC1D,MAAOgF,GAAkBqZ,GAAS3Z,GAAG,EAUzC,IARAlF,EAAQA,EAAQC,SAASD,EAAO,IAAMgC,EAAIiE,SAASqG,IAAWtM,MAAM6e,GACpE7e,EAAQqF,KAAKC,IAAItF,EAAOb,KAAK8vB,gBAAkB,GAE3CjtB,EAAM5B,EAAK8E,GADX2pB,MACc,EAEAA,EAAWhQ,EAAQ,GAAGne,SAEpCkwB,EAAW5wB,EACXb,KAAKqxB,kBAAkBrwB,EAAW0e,KAAajgB,EAG/C,IAFIiyB,EAAkB7uB,EAAIiE,SAAS,8CAC/B6qB,EAAgBD,EAAgBvwB,OAAO,WAClCkB,EAAM,EAAGf,EAASqwB,EAAcrwB,OAAQe,EAAMf,EAAQe,IACvDqvB,EAAgB7wB,MAAM8wB,EAActvB,IAAQxB,GAC5C4wB,GAMZ,OAFA5wB,GAAQ4wB,EACRrxB,EAAQyC,EAAIiE,SAASqG,IAEV/M,EAAM2F,GADb3F,EAAMkB,OAAST,EACCA,EAEJ,IAEpB+wB,mBAAoB,SAAU5wB,EAAW6wB,GAArB,GACZ5pB,GAAQjH,EAAUgD,SAClB1C,EAAStB,KAAK+sB,mBAAmBzrB,OACjCwwB,EAAO5rB,KAAK6rB,MAAMzwB,EAAS,GAC3BT,EAAQwD,GAAQ4D,EAAM,GAAIjI,KAAK+sB,mBAQnC,OAPI8E,KACAC,OAEJjxB,GAASixB,GACLjxB,GAAS,GAAKA,EAAQS,KACtB2G,EAAQjI,KAAK+sB,mBAAmBhnB,GAAGlF,IAEhCoH,EAAM/G,KAAK2wB,EAAK,QAAU,UAErCjC,mBAAoB,SAAUlQ,EAASjZ,GACnC,GAAIurB,GAAWxyB,EAAEkgB,GAAStV,KAAK,WAC/B5K,GAAEkgB,GAAS8H,YAAYpY,GAAWgB,SAASvK,QAAQ,SAAS4c,WAAW,yBACnEuP,GACAA,EAAWA,EAASC,QAAQjyB,KAAKoxB,WAAY,IAC7C5xB,EAAEkgB,GAASnf,KAAK,KAAMyxB,IAEtBxyB,EAAEkgB,GAAS+C,WAAW,MAE1Bhc,EAAK2D,KAAK,WAAY3D,EAAKlG,KAAK,OAAOA,KAAK,KAAMP,KAAKoxB,YAAYnL,SAAS7W,GAAWgB,SAASvK,QAAQ,SAAStF,KAAK,wBAAyBP,KAAKoxB,YACpJpxB,KAAKgtB,SAAWvmB,GAEpB6oB,cAAe,SAAU7mB,GAAV,GACPypB,IAAU,EACVxS,EAAU1f,KAAK0f,UACf/b,EAASnE,EAAEiJ,EAAE9E,QACbwuB,GAAa1pB,EAAE2pB,uBAAyBzuB,EAAOjE,GAAG,6BACtDggB,GAAUA,EAAUA,EAAUlgB,EAAEQ,KAAK2qB,aAAanpB,IAAIxB,KAAKiI,OAAO/G,KAAK0N,IACnEujB,GAAa1pB,EAAE4pB,SAAWxnB,EAAKynB,KAC/BJ,EAAUlyB,KAAKuyB,QAAQ7S,EAASjX,EAAE+pB,WAElCL,GAAa1pB,EAAE4pB,SAAWxnB,EAAK4nB,OAC/BP,EAAUlyB,KAAK0yB,UAAUhT,EAASjX,EAAE+pB,WAEpCL,GAAa1pB,EAAE4pB,UAAYvjB,GAAQjE,EAAK8nB,KAAO9nB,EAAK+nB,SAEhDV,EADAzpB,EAAEoqB,OACQ7yB,KAAK8yB,cAAcpT,GAEnB1f,KAAK+yB,WAAWrT,IAG9ByS,GAAa1pB,EAAE4pB,UAAYvjB,GAAQjE,EAAK+nB,MAAQ/nB,EAAK8nB,QAEjDT,EADAzpB,EAAEoqB,OACQ7yB,KAAKgzB,gBAAgBtT,GAErB1f,KAAKizB,UAAUvT,IAG7ByS,GAAa1pB,EAAE4pB,SAAWxnB,EAAKqoB,WAC/BhB,EAAUlyB,KAAKmzB,mBAEfhB,GAAa1pB,EAAE4pB,SAAWxnB,EAAKuoB,SAC/BlB,EAAUlyB,KAAKqzB,iBAEf5qB,EAAE4pB,SAAWxnB,EAAKyoB,OAAS7qB,EAAE4pB,SAAWxnB,EAAK0oB,KAC7CrB,EAAUlyB,KAAKwzB,gBAAgB9T,EAASjX,EAAEwgB,cAAetlB,IAEzD8E,EAAE4pB,SAAWxnB,EAAK4oB,MAClBvB,EAAUlyB,KAAK0zB,cAAchU,EAASjX,EAAEwgB,gBAExCkJ,GAAa1pB,EAAE4pB,SAAWxnB,EAAK8oB,OAC/BzB,EAAUlyB,KAAK4zB,YAAYlU,EAASjX,EAAEsgB,UAEtCoJ,GAAa1pB,EAAE4pB,SAAWxnB,EAAKgpB,MAC/B3B,EAAUlyB,KAAK8zB,WAAWpU,EAASjX,EAAEsgB,UAErCtgB,EAAE4pB,SAAWxnB,EAAKkpB,MAClB7B,EAAUlyB,KAAKg0B,cAActU,EAASjX,EAAEwgB,cAAexgB,EAAE+pB,WAEzDN,IACAzpB,EAAEG,iBACFH,EAAEwrB,oBAGVnB,cAAe,SAAUpT,GAAV,GACP7M,GAAO7S,KACP6C,EAAM6c,EAAQ1b,SACdmF,EAAQ0J,EAAKK,SAASrQ,EAC1B,QAAI6c,EAAQre,SAAS,iBAGjB8H,IAASA,EAAMoR,aAAgBpR,EAAMiL,UAAavB,EAAK6R,QAAQ3X,IAAU5D,MAAOA,OAChFnJ,KAAKmuB,OAAOtrB,IACL,KAIfmwB,gBAAiB,SAAUtT,GAAV,GACT7M,GAAO7S,KACP6C,EAAM6c,EAAQ1b,SACdmF,EAAQ0J,EAAKK,SAASrQ,EAC1B,QAAI6c,EAAQre,SAAS,kBAGjB8H,GAASA,EAAMoR,aAAepR,EAAMiL,WAAavB,EAAK6R,QAAQ1X,IAAY7D,MAAOA,OACjF0J,EAAKgc,SAAShsB,IACP,KAIf+wB,YAAa,SAAUlU,EAASwU,GAAnB,GAKLC,GAJAtxB,EAAM6c,EAAQ1b,SACdowB,EAAevxB,EAAImB,SACnBqwB,EAAkBr0B,KAAK2qB,aAAe3qB,KAAK2qB,YAAY7jB,SAAS,SAAS,KAAOstB,EAAa,GAC7FE,EAAWF,EAAa,KAAOp0B,KAAKkoB,MAAM,EAc9C,IAZIgM,EAEIC,EADAn0B,KAAK2qB,YACE3qB,KAAK2qB,YAAYzpB,KAAK0N,IAEtB5O,KAAKiI,MAAM/G,KAAK0N,KAEpB0lB,GAAYD,KACfC,GAAYt0B,KAAK2qB,cACjB9nB,EAAM7C,KAAKqwB,YAAYxtB,IAE3BsxB,EAAOtxB,EAAIiE,SAAS2H,GAAU,WAE9B0lB,GAAQA,EAAK7yB,OAEb,MADAtB,MAAK0f,QAAQyU,IACN,GAGfL,WAAY,SAAUpU,EAASwU,GAAnB,GAKJztB,GAJA5D,EAAM6c,EAAQ1b,SACdowB,EAAevxB,EAAImB,SACnBqwB,EAAkBr0B,KAAK2qB,aAAe3qB,KAAK2qB,YAAY7jB,SAAS,SAAS,KAAOstB,EAAa,GAC7FE,EAAWF,EAAa,KAAOp0B,KAAKkoB,MAAM,EAU9C,IARIgM,EACAztB,EAAOzG,KAAKiI,MAAM/G,KAAK2N,GAAc,IAAMJ,GAAU,UAC9C6lB,GAAYD,MACdC,GAAYt0B,KAAK2qB,cAClB9nB,EAAM7C,KAAKqwB,YAAYxtB,IAE3B4D,EAAO5D,EAAIiE,SAAS2H,GAAU,UAE9BhI,GAAQA,EAAKnF,OAEb,MADAtB,MAAK0f,QAAQjZ,IACN,GAGf0sB,gBAAiB,WACb,GAAItgB,GAAO7S,IACX,SAAK6S,EAAK+D,gBAGV/D,EAAKyO,WAAWb,gCAChB5N,EAAKyO,WAAWvE,KAAKlK,EAAKyO,WAAWvE,OAAS,IACvC,IAEXsW,cAAe,WACX,GAAIxgB,GAAO7S,IACX,SAAK6S,EAAK+D,gBAGV/D,EAAKyO,WAAWb,gCAChB5N,EAAKyO,WAAWvE,KAAKlK,EAAKyO,WAAWvE,OAAS,IACvC,IAEX2W,cAAe,SAAUhU,EAAS6U,GAAnB,GAEP7K,GAEA7mB,EACAknB,EAJA0F,EAASnvB,MAAMoL,iBAEfmH,EAAO7S,IAGX,OAAK0f,IAAYA,EAAQ1b,SAAS3C,SAAS,oBAOvCwR,EAAK0b,qBACL1rB,EAAM6c,EAAQ1b,SACd+lB,EAAYrK,EAAQ7e,QACpBgS,EAAK2b,WAAU,GACf3b,EAAKkd,YAAYltB,EAAIiE,WAAWf,GAAGgkB,MAEnCL,EAAelqB,EAAEkgB,GAAS1b,SAASnD,QAC/B4uB,GACAA,EAAO+E,OAEXx0B,KAAKy0B,YACD/K,GAAgB,GAChB1pB,KAAK0f,QAAQ1f,KAAKkY,QAAQnS,GAAG2jB,GAAc5iB,SAAS2H,IAASimB,UAGjEpsB,GAAQD,MAAQC,GAAQqsB,QAAU,GAClCC,SAASC,KAAKnsB,QAElBV,EAAWusB,GAAc,IAClB,KAzBC7U,EAAQoV,IAAIrF,GAAQnuB,SACpB0G,EAAWusB,GAAc,IAClB,IAyBnBf,gBAAiB,SAAU9T,EAAS6U,EAAc5wB,GAAjC,GAGToxB,GAFAzrB,EAAWtJ,KAAK2B,QAAQ2H,SACxBtI,EAAY2C,EAAOkC,QAAQ,kBAK/B,OAHKlC,GAAOjE,GAAG,UAAaF,EAAE8f,SAASI,EAAQ,GAAI/b,EAAO,MACtD+b,EAAU1e,GAEV0e,EAAQhgB,GAAG,OACXggB,EAAQxe,KAAK,WAAW8zB,SACjB,IAEXD,EAAYrV,EAAQxe,KAAK,yBACrB6zB,EAAU,IAAMrV,EAAQre,SAAS,oBACjC0zB,EAAUrsB,SACH,MAEPY,GAAa3F,EAAOjE,GAAG,iCAClBsB,EAAU,KACXA,EAAY0e,GAEhB1f,KAAKi1B,eAAej0B,GAAW,EAAOuzB,IAC/B,KAIfP,cAAe,SAAUtU,EAAS6U,EAAc/B,GAAjC,GAGPhtB,GAFAqN,EAAO7S,KACPk1B,EAAgBriB,EAAKlR,QAAQ2H,UAAYuJ,EAAK0b,mBAElD,UAAK2G,GAAiBxV,EAAQhgB,GAAG,SAGjC8F,EAAOhG,EAAEiM,MAAiB5F,QAAQwG,GAAM+C,GAAWK,UAC/CjK,EAAK,IAAMA,EAAK,KAAOka,EAAQ,KAC/BA,EAAUla,GAEdA,EAAOqN,EAAKsiB,SAASzV,EAAS6U,EAAc/B,GACxChtB,EAAKlE,QACLuR,EAAKoiB,eAAevV,EAASla,EAAMA,EAAKK,QAAQsJ,MACzC,IAEP0D,EAAKuiB,yBAA0B,GAE5B,KAEXD,SAAU,SAAUzV,EAAS6U,EAAcc,GAAjC,GACFxiB,GAAO7S,KACPs1B,GAAY,EACZ7uB,EAAO4uB,EAAO3V,EAAQ1Z,QAAQmH,GAAY,UAAYuS,EAAQ6V,QAAQ,iBAa1E,OAZK9uB,GAAKnF,SACNmF,EAAOiZ,EAAQ1b,SACX6O,EAAK8X,cACL2K,EAAYD,GAAQd,GAAgB1hB,EAAK8X,YAAY,KAAO0K,GAAQd,GAAgB1hB,EAAK5K,MAAM,GAC/FxB,EAAOoM,EAAKwd,YAAY5pB,IAExB6uB,IACA7uB,EAAOA,EAAK4uB,EAAO,UAAY,WAAW,6DAE9C5uB,EAAOA,EAAKK,SAASqG,IAAakoB,EAAO,QAAU,WACnDxiB,EAAKyO,WAAWb,iCAEbha,GAEXwuB,eAAgB,SAAUvV,EAASjZ,EAAMwB,GAAzB,GAC8DutB,GAAeT,EAAWU,EAuD5F/L,EAvDJ7W,EAAO7S,KAAMyvB,EAASjwB,EAAEc,MAAMoL,kBAAmBgqB,EAAOptB,GAAQD,KAChEiB,EAAWuJ,EAAKlR,QAAQ2H,UAAYuJ,EAAKlR,QAAQ2H,SAAS8I,UAAW,EACrE8iB,EAAgBriB,EAAK0b,mBAOzB,IANAtmB,EAAQzI,EAAEyI,GAENwtB,EADAP,EACWxV,EAAQre,SAAS+N,GAAWK,UAE5BiQ,EAAQ1b,SAAS3C,SAAS,mBAErCwR,EAAKwP,OAAQ,CAYb,GAXAmT,EAAgB3iB,EAAKwP,OAAOhT,QACxBmmB,GAAiBh2B,EAAE8f,SAASkW,EAAc,GAAI/F,EAAO,MACjDnnB,GAAQqtB,MACRlG,EAAO+E,OAAOtS,SAAS0T,eAAe,SAEtCnG,EAAO+E,OACHkB,GACAjG,EAAO+E,UAId3hB,EAAKwP,OAEN,MADAra,GAAWC,GACX,CAEJ,KAAI4K,EAAKwP,OAAOC,MAmBZ,MARIzP,GAAK6M,QADLwV,EACaM,EAEAA,EAAc1uB,WAAW3F,OAAOsN,IAASimB,SAE1DK,EAAYS,EAAct0B,KAAK,yBAAyB,GACpD6zB,GACAA,EAAUrsB,QAEd,CAlBIwsB,IACAriB,EAAKuiB,yBAA0B,EAC/BviB,EAAK2b,YACL3b,EAAKuiB,yBAA0B,IAE/BviB,EAAKgjB,UACLJ,GAAW,GAenBhvB,GACAoM,EAAK6M,QAAQjZ,GAEjBuB,EAAWC,GAAO,GACbqB,KAGAmsB,IAAahvB,GAAQA,GAClBijB,EAAe7W,EAAK6M,UAAU7e,QAC9Bq0B,EACAriB,EAAKpD,SAASoD,EAAK6M,YAEnB7M,EAAKnD,QAAQmD,EAAK6M,UAAU1b,UAC5B6O,EAAK6M,QAAQ7M,EAAKwP,OAAOhT,QAAQvI,WAAWf,GAAG2jB,IAC/C7W,EAAK6M,UAAU8H,YAAY,qBAG/B3U,EAAKyO,WAAWb,kCAGxBsS,WAAY,SAAUrT,GAAV,GACJjZ,GAAOiZ,EAAQ6V,QAAQ9mB,IAASimB,QAChC7xB,EAAM6c,EAAQ1b,QAclB,OAbI0b,GAAQre,SAAS,cACjBoF,EAAOiZ,EAAQ6V,QAAQ7mB,IAAWgmB,SAC7BjuB,EAAK,IAAMzG,KAAK2qB,aAAejL,EAAQ7Z,QAAQ,SAAS,KAAO7F,KAAKstB,aAAapsB,KAAK,SAAS,KAChGuF,EAAOzG,KAAKkH,MAAMhG,KAAKwN,GAAY,aAGtCjI,EAAK,IAAMzG,KAAK2qB,aAAejL,EAAQ7Z,QAAQ,SAAS,KAAO7F,KAAK2qB,YAAY,KACjFlkB,EAAOzG,KAAKqwB,YAAYxtB,GAAKiE,SAAS2H,IAASimB,SAE/CjuB,EAAK,IAAMA,EAAK,KAAOiZ,EAAQ,IAC/B1X,EAAWvB,EAAKZ,QAAQ,UAAU,GAEtC7F,KAAK0f,QAAQjZ,IACN,GAEXwsB,UAAW,SAAUvT,GAAV,GACHyU,GAAOzU,EAAQ1Z,QAAQyI,IAASimB,QAChC7xB,EAAM6c,EAAQ1b,QAclB,OAbI0b,GAAQre,SAAS,cACjB8yB,EAAOzU,EAAQ1Z,QAAQ0I,IAAWgmB,SAC7BP,EAAK,IAAMn0B,KAAK2qB,aAAejL,EAAQ7Z,QAAQ,SAAS,KAAO7F,KAAKkH,MAAMlD,SAAS,KACpFmwB,EAAOn0B,KAAKstB,aAAapsB,KAAK,mBAAqBwN,GAAY,YAGlEylB,EAAK,IAAMn0B,KAAK2qB,aAAejL,EAAQ7Z,QAAQ,SAAS,KAAO7F,KAAKiI,MAAM,KAC3EksB,EAAOn0B,KAAKqwB,YAAYxtB,GAAKiE,SAAS2H,IAAShN,QAE/C0yB,EAAK,IAAMA,EAAK,KAAOzU,EAAQ,IAC/B1X,EAAWmsB,EAAKtuB,QAAQ,UAAU,GAEtC7F,KAAK0f,QAAQyU,IACN,GAEX5B,QAAS,SAAU7S,EAAS8S,GAAnB,GAED2B,GAgBArJ,EAjBA9pB,EAAY0e,EAAQ1b,SAASA,QAoBjC,OAlBIwuB,IACA2B,EAAOzU,EAAQ1b,SACfmwB,EAAOA,EAAKnuB,QAAQ2I,GAAU,UAC9BwlB,EAAOzU,EAAQ1b,SAAStE,GAAGiP,IAAWwlB,EAAKrtB,WAAWf,GAAG2Z,EAAQ7e,SAAWszB,EAAKrtB,SAASqG,GAAY,WAEtGgnB,EAAOn0B,KAAKuxB,kBAAkBvwB,EAAW0e,GACpCyU,EAAK,KACNn0B,KAAK8vB,eAAiB,EACtB9uB,EAAYhB,KAAK4xB,mBAAmB5wB,GAAW,GAC/CmzB,EAAOn0B,KAAKuxB,kBAAkBvwB,EAAW0e,GACrCyU,EAAK,IACLnsB,EAAWhH,EAAUgD,UAAU,KAIvC8mB,EAAM9qB,KAAK8vB,gBAAkB,EACjC9vB,KAAK0f,QAAQyU,GACbn0B,KAAK8vB,eAAiBhF,GACf,GAEX4H,UAAW,SAAUhT,EAAS8S,GAAnB,GAEH/rB,GAgBAqkB,EAjBA9pB,EAAY0e,EAAQ1b,SAASA,QAoBjC,OAlBIwuB,IACA/rB,EAAOiZ,EAAQ1b,SACfyC,EAAOA,EAAK8uB,QAAQ5mB,GAAU,UAC9BlI,EAAOiZ,EAAQ1b,SAAStE,GAAGiP,IAAWlI,EAAKK,WAAWf,GAAG2Z,EAAQ7e,SAAW4F,EAAKK,SAASqG,GAAY,YAEtG1G,EAAOzG,KAAKwxB,kBAAkBxwB,EAAW0e,GACpCjZ,EAAK,KACNzG,KAAK8vB,eAAiB,EACtB9uB,EAAYhB,KAAK4xB,mBAAmB5wB,GACpCyF,EAAOzG,KAAKwxB,kBAAkBxwB,EAAW0e,GACrCjZ,EAAK,IACLuB,EAAWhH,EAAUgD,UAAU,KAIvC8mB,EAAM9qB,KAAK8vB,gBAAkB,EACjC9vB,KAAK0f,QAAQjZ,GACbzG,KAAK8vB,eAAiBhF,GACf,GAEXqE,YAAa,SAAU1mB,GACnB,GAAIwgB,GAAgBzpB,EAAEiJ,EAAEwgB,eAAgB6M,EAAW7M,EAAcvpB,GAAG,MAAOuI,EAAQjI,KAAKiI,MAAMzG,IAAIxB,KAAK2qB,aAAcoL,EAAc/1B,KAAKkH,MAAMlD,SAASxC,IAAIhC,EAAE,SAAUQ,KAAKstB,eAAgB0I,EAAU/yB,EAAewF,EAAE9E,QAAS4wB,EAAetL,EAAcpjB,QAAQ,SAAS,EAC1QvF,OAAMgL,QAAQ4jB,OAGdqF,IAAiBtsB,EAAM,IAAMssB,IAAiBtsB,EAAM,IAAMssB,IAAiBwB,EAAY,IAAMxB,IAAiBwB,EAAY,KAG1H/1B,KAAK2B,QAAQkoB,aACb7pB,KAAK0f,QAAQuJ,IAEb6M,GAAaE,GACbC,WAAW,WACFhzB,EAAe3C,MAAMoL,mBAAsBlM,EAAE8f,SAASiV,EAAcj0B,MAAMoL,mBAC3E1D,EAAWusB,GAAc,KAIjCuB,GACArtB,EAAEG,mBAGVstB,aAAc,SAAUjuB,GACpBjI,KAAK+sB,mBAAmBxsB,KAAKgN,OAC7BtF,EAAM1H,KAAKgN,GAAU,IAEzB6hB,YAAa,SAAU3mB,GAAV,GACLiX,GAAU1f,KAAK0f,UACfzX,EAAQzI,EAAEiJ,EAAEwgB,cACZvJ,IAAWA,EAAQhgB,GAAG,YACtBggB,EAAQuG,SAAS7W,GAAWgB,SAE5BpQ,KAAK0f,QAAQzX,EAAM/G,KAAK0N,KAE5B5O,KAAKk2B,aAAajuB,IAEtBonB,WAAY,WACR,GAAI3P,GAAU1f,KAAK0f,SACfA,IACAA,EAAQ8H,YAAYpY,GAAWgB,UAGvCiV,cAAe,WAAA,GACP8Q,GAAQ9pB,GAAM+C,GAAW2B,aAAe,MAAQ3B,GAAW4B,WAAa,MAAQ5B,GAAWkB,QAC3F8lB,EAAc/pB,GAAM+C,GAAWmB,KACnCvQ,MAAKkD,QAAQkhB,GAAG5X,GAAYF,GAAI6pB,EAAOvqB,GAAM5L,KAAK8uB,gBAAiB9uB,OAAOokB,GAAG7X,GAAQD,GAAI8pB,EAAap2B,KAAKqtB,uBAAuBjJ,GAAG7X,GAAQD,GAAI,0BAA2BV,GAAM5L,KAAKq2B,cAAer2B,OACtMA,KAAKs2B,mCAETA,gCAAiC,WAAA,GACzBzjB,GAAO7S,KACPsJ,EAAWuJ,EAAKlR,QAAQ2H,SACxBF,EAAayJ,EAAKzJ,YAAcyJ,EAAKzJ,WAAWzH,QAAQ40B,SACxD/H,EAAY,SAAU/lB,GAAV,GACR9E,GAAS8H,KACT4W,EAASxP,EAAKwP,WACd7c,EAAO6c,EAAOnf,SACdsC,GAAShG,EAAE8f,SAAS9Z,EAAK,GAAI7B,IAAW6B,EAAK,KAAO7B,GAAWnE,EAAEmE,GAAQkC,QAAQ,0BAA0BvE,QACvG+gB,EAAOC,QACF7Z,EAAE+tB,gBAAiB3jB,EAAK+D,eAAkBlN,EAAYmJ,EAAKyO,WAAWR,qBACvEjO,EAAKuiB,yBAA0B,GAEnCviB,EAAK2b,aAGb3b,EAAKuiB,yBAA0B,EAE/BviB,GAAK0b,qBAAuBjlB,EAAS8I,UAAW,GAChDS,EAAKxD,QAAQ+U,GAAG7X,GAAQD,GAAI,+BAAgC,SAAU7D,GAClE,GAAI8mB,GAAK/vB,EAAEQ,MAAOy2B,EAAe5jB,EAAK8X,aAAe4E,EAAG1pB,QAAQ,SAAS,KAAOgN,EAAK8X,YAAY,EACjG,OAAI4E,GAAGluB,SAAS+N,GAAWK,WAAa8f,EAAGuF,IAAI,mBAAmBxzB,QAAUiuB,EAAGuF,IAAI,wBAAwBxzB,QAAUiuB,EAAG1pB,QAAQ,SAAS,KAAOgN,EAAKqV,MAAM,KAAOuO,GAAgBj3B,EAAEiJ,EAAE9E,QAAQjE,GAAG,WAAaF,EAAEiJ,EAAE9E,QAAQtC,SAAS+N,GAAW4B,aAAexR,EAAEiJ,EAAE9E,QAAQtC,SAAS+N,GAAW2B,eACpR8B,EAAKwP,QACNxP,EAAKyO,WAAWb,gCAEpB5N,EAAKuiB,yBAA0B,EAC/B,IAEAviB,EAAKwP,OACDxP,EAAKwP,OAAOC,QACRlZ,GACA5J,EAAEiM,MAAiB+oB,OAEvB3hB,EAAK2b,YACL3b,EAAKpD,SAAS8f,IAGlB1c,EAAKpD,SAAS8f,GATlB,KAWDnL,GAAG,YAAc9X,GAAI,+BAAgC,SAAU7D,GAE1DoK,EAAKuiB,2BADLviB,EAAKwP,SAAUxP,EAAK+D,eAAkBlN,EAAYmJ,EAAKyO,WAAWR,qBACnCthB,EAAEiJ,EAAE9E,QAAQ+C,QAAQ2F,GAAM+C,GAAWM,SAASpO,OAAS,IAI3F8iB,GAAG,UAAY9X,GAAI,WACb9M,EAAE8f,SAAStf,KAAMyL,QAClBirB,aAAa7jB,EAAK8jB,mBAClB9jB,EAAK8jB,kBAAoB,QAE9BvS,GAAG,WAAa9X,GAAI,SAAU7D,GAC7BoK,EAAK8jB,kBAAoBV,WAAW,WAChCzH,EAAU/lB,IACX,MAIfmuB,eAAgB,SAAUxV,GAAV,GAGRxf,GAAGi1B,EAAG7I,EAAU8I,EAFhBtzB,EAAUxD,KAAKwD,QACf8nB,EAAU9rB,EAAEmM,QAAQ3L,KAAK2B,QAAQ2pB,SAAWtrB,KAAK2B,QAAQ2pB,UAG7D,IADAlK,EAAOA,EAAKoP,cACR3e,GAAgBuP,GAChB,MAAOvP,IAAgBuP,EAE3B,KAAKxf,EAAI,EAAGA,EAAI4B,EAAQlC,OAAQM,IAE5B,GADAosB,EAAWxqB,EAAQ5B,GAAGyH,QAElB,IAAKwtB,EAAI,EAAGA,EAAI7I,EAAS1sB,OAAQu1B,IAE7B,GADAC,EAAc9I,EAAS6I,GAAGzV,KACrB0V,GAGDA,EAAYtG,eAAiBpP,EAC7B,MAAO4M,GAAS6I,EAKhC,KAAKj1B,EAAI,EAAGA,EAAI0pB,EAAQhqB,OAAQM,IAE5B,GADAk1B,EAAcxL,EAAQ1pB,GAAGwf,KACpB0V,GAGDA,EAAYtG,eAAiBpP,EAC7B,MAAOkK,GAAQ1pB,IAI3By0B,cAAe,SAAU5tB,GAAV,GACP8G,GAAS/P,EAAEiJ,EAAEwgB,eACb8N,EAAcxnB,EAAOhP,KAAK,gBAC1B8I,EAAUrJ,KAAK42B,eAAeG,GAC9Bl0B,EAAM0M,EAAOynB,aAAah3B,KAAKqP,QAAS,KAC5CxM,GAAMA,EAAIvB,OAASuB,EAAMpD,EACrB4J,IACIA,EAAQ2I,WACRhS,KAAKqJ,EAAQ2I,YAAYnP,GAClBwG,EAAQ2rB,OACf3rB,EAAQ2rB,MAAMpf,KAAK5V,KAAMyI,GAE7BA,EAAEG,mBAGVquB,wBAAyB,WAAA,GAIjBpyB,GACAqyB,CAJAl3B,MAAKotB,uBACEptB,MAAKotB,gBAAgB+J,WAE5BtyB,EAAiBH,GAAK1E,KAAKwD,QAAS3D,EAAIH,EAAG,YAC3Cw3B,EAAoBxyB,GAAKG,EAAgBnF,EAAG,eAC5CM,KAAKwD,QAAQlC,SAAW41B,EAAkB51B,SAC1CtB,KAAKotB,gBAAkBvoB,EAAe,GACtCA,EAAe,GAAGsyB,YAAa,IAGvCrS,SAAU,WAAA,GAMFsS,GALA5zB,EAAUxD,KAAK2B,QAAQ6B,WAC3BxD,MAAKwD,QAAUwB,GAAIxB,EAAS,SAAUJ,GAElC,MADAA,GAA2B,gBAAXA,IAAwBzD,MAAOyD,GAAWA,EACnD6B,IAASoyB,SAAS,GAAQj0B,KAEjCg0B,EAAahyB,EAAc5B,GAC3B4zB,EAAW91B,OAAS,IACpBtB,KAAK+lB,mBAAoB,EACzB/lB,KAAKwD,QAAU4zB,EAAW5yB,OAAOa,EAAiBrF,KAAKwD,WAE3DxD,KAAKwD,QAAUsB,EAAiB9E,KAAKwD,SACrCxD,KAAKi3B,0BACLj3B,KAAKs3B,mBACLt3B,KAAKu3B,qBAETD,iBAAkB,WAAA,GACVj1B,GAAKf,EAAQ8B,EACbI,EAAUc,EAAYtE,KAAKwD,QAC/B,KAAKnB,EAAM,EAAGf,EAASkC,EAAQlC,OAAQe,EAAMf,EAAQe,IACjDe,EAASI,EAAQnB,GACbe,EAAOoI,WACPpI,EAAOoI,SAAWlL,MAAMkL,SAASpI,EAAOoI,WAExCpI,EAAOo0B,iBACPp0B,EAAOo0B,eAAiBl3B,MAAMkL,SAASpI,EAAOo0B,iBAE9Cp0B,EAAO+M,iBACP/M,EAAO+M,eAAiB7P,MAAMkL,SAASpI,EAAO+M,kBAI1DonB,kBAAmB,WAGf,QAASE,GAAal3B,GAAtB,GACQm3B,GAAY91B,EAAG+1B,EAMPvW,CALZ,IAAI7gB,GAAQA,EAAKN,MAGb,IAFAy3B,EAAan3B,EAAKN,MAAM23B,MAAM,KAC9Br3B,EAAKN,SACA2B,EAAI,EAAGA,EAAI81B,EAAWp2B,OAAQM,IAC/B+1B,EAAcD,EAAW91B,GAAGg2B,MAAM,KAC9BxW,EAAO5hB,EAAEq4B,KAAKF,EAAY,IAC1BvW,IACA7gB,EAAKN,MAAMT,EAAEs4B,UAAU1W,IAAS5hB,EAAEq4B,KAAKF,EAAY,KAZpD,GACXt1B,GAAKf,EACLkC,EAAUxD,KAAKwD,OAenB,KAAKnB,EAAM,EAAGf,EAASkC,EAAQlC,OAAQe,EAAMf,EAAQe,IACjDo1B,EAAaj0B,EAAQnB,GAAKqF,YAC1B+vB,EAAaj0B,EAAQnB,GAAK01B,mBAGlChT,QAAS,WAAA,GAsBDzV,GAGI5L,EAGJ0jB,EA3BA5jB,EAAUxD,KAAKwD,QACfN,EAAUlD,KAAKkD,QACf80B,EAAS,EACbh4B,MAAKqP,QAAUnM,EAAQ+iB,SAAS7W,GAAWC,SAC3C2oB,EAAS,gCACLh4B,KAAK+lB,oBACLiS,GAAU,qHAEdA,GAAU,yHACNh4B,KAAK+lB,oBACLiS,GAAU,uHAEdA,GAAU,uIACLh4B,KAAK2B,QAAQ2mB,aACd0P,EAAS,+HAETh4B,KAAK2B,QAAQ2pB,UACb0M,EAAS,+CAAmDA,GAEhE90B,EAAQkgB,OAAO9iB,MAAMkL,SAASwsB,GAAQ5oB,IAAc,4BACpDpP,KAAKsrB,QAAUpoB,EAAQhC,KAAKmL,GAAM+C,GAAWS,aACzCP,EAASpM,EAAQhC,KAAKmL,GAAM+C,GAAWU,YAAY5O,KAAK,SAAS+2B,UAAU92B,OAAO,SACtFnB,KAAKkH,MAAQoI,EAAO7N,OAChBzB,KAAK2B,QAAQ2mB,aACT5kB,EAAMpD,MAAMgL,QAAQwD,MAAM5L,GAC9BA,EAAQhC,KAAK,OAASkO,GAAWU,YAAY4b,IAAIhoB,EAAM,eAAiB,gBAAiBpD,MAAMgL,QAAQmgB,cAEvGrE,EAAUlkB,EAAQhC,KAAKmL,GAAM+C,GAAWa,iBACvCmX,EAAQ9lB,OAGTtB,KAAKonB,QAAUA,EAFfA,EAAUlkB,EAIdlD,KAAKiI,MAAQmf,EAAQlmB,KAAK,UAC1BlB,KAAKkoB,MAAQloB,KAAKiI,MAAM/G,KAAK,UACzBlB,KAAK+lB,oBACL/lB,KAAKstB,aAAehe,EAAOolB,QAAQ7uB,QAAQ,yBAC3C7F,KAAKooB,cAAgBllB,EAAQhC,KAAK,0BAClClB,KAAK2qB,YAAc3qB,KAAKooB,cAActhB,YAE1C9G,KAAKk4B,oBACLl4B,KAAKm4B,cACLn4B,KAAKo4B,gBACLp4B,KAAKuqB,QAAQ,UAAW,WACpB,OACIC,SAAUlb,EAAOpO,KAAK,eAAe4U,MACrC1L,KAAMpF,GAAIxB,EAAS,SAAUinB,GACzB,OAASrnB,OAAQqnB,SAKjCyN,kBAAmB,WACfl4B,KAAKq4B,gBAAkB,GAAIhuB,GAASmZ,KAAKxjB,KAAKkH,MAAMitB,OAAO,IAC3Dn0B,KAAKs4B,iBAAmB,GAAIjuB,GAASmZ,KAAKxjB,KAAKkoB,MAAMiM,OAAO,IAC5Dn0B,KAAKwtB,YAAc,GAAInjB,GAASmZ,KAAKxjB,KAAKkH,MAAM,IAChDlH,KAAKgrB,aAAe,GAAI3gB,GAASmZ,KAAKxjB,KAAKkoB,MAAM,IACjDloB,KAAKutB,YAAc,GAAIljB,GAASmZ,KAAKxjB,KAAKkD,QAAQ4D,SAAS,aAAa,IACpE9G,KAAKstB,eACLttB,KAAKytB,sBAAwB,GAAIpjB,GAASmZ,KAAKxjB,KAAKstB,aAAapsB,KAAK,YAAY,IAClFlB,KAAK0tB,uBAAyB,GAAIrjB,GAASmZ,KAAKxjB,KAAK2qB,YAAYzpB,KAAK,aAAa,IACnFlB,KAAK2tB,kBAAoB,GAAItjB,GAASmZ,KAAKxjB,KAAKstB,aAAapsB,KAAK,SAAS,IAC3ElB,KAAKirB,mBAAqB,GAAI5gB,GAASmZ,KAAKxjB,KAAK2qB,YAAYzpB,KAAK,UAAU,MAGpFokB,SAAU,WAAA,GAOEiT,GANJ52B,EAAU3B,KAAK2B,QAAQ2pB,QACvBA,EAAUtrB,KAAKsrB,OACd3pB,KAGDnC,EAAEmM,QAAQhK,IACN42B,EAAUv4B,KAAKw4B,eAAe72B,GAClC,GAAI0I,GAASmZ,KAAK8H,EAAQ,IAAI7H,OAAO8U,IAErCjN,EAAQlI,OAAO9iB,MAAMkL,SAAS7J,QAElC3B,KAAKuqB,QAAQ,UAAW,WACpB,OAASC,SAAUc,EAAQxV,WAGnC2iB,eAAgB,WACZ,MAAO/zB,IAAK1E,KAAKwD,QAAS9D,EAAG,YAEjCg5B,kBAAmB,WACf,MAAOh0B,IAAK1E,KAAKwD,QAAS3D,EAAIH,EAAG,aAErCi5B,iBAAkB,WACd,MAAOj0B,IAAK1E,KAAKwD,QAAS9D,EAAG,cAEjCk5B,YAAa,WACL54B,KAAK2B,QAAQ6kB,UAAYxmB,KAAK24B,mBAAmBr3B,SACjDtB,KAAKgrB,aAAavH,WACdzjB,KAAK+lB,mBACL/lB,KAAKirB,mBAAmBxH,aAIpC8F,QAAS,SAAU5nB,GAAV,GAID0nB,GACArR,EACAsJ,EACAuX,EAIAplB,EACAR,EACAM,EAGAnJ,EACAvI,EACAi3B,EACAtoB,EAGAuoB,EArBAlmB,EAAO7S,IACX2B,GAAUA,MACVA,EAAUkR,EAAKmmB,eAAer3B,GAC1B0nB,EAAWrpB,KAAK2B,QAAQ0nB,SACxBrR,EAAWnF,EAAK+D,cAChB0K,EAAazO,EAAKyO,WAClBuX,GACA/xB,SAAUnF,EAAQmT,qBAAuBnT,EAAQsR,YACjDU,IAAKhS,EAAQ4R,QAEbE,EAAWuE,EAAW6gB,GAAQA,EAAK/xB,UAAY+xB,EAAKllB,IAAMklB,EAAOvX,EAAW7H,cAAc6H,EAAWrK,eACrGhE,EAAcQ,EAAS3M,SACvByM,EAASE,EAASE,IACtBhS,EAAQsR,YAAcA,EACtBtR,EAAQ4R,OAASA,EACbnJ,EAAOyI,EAAKomB,cAAct3B,GAC1BE,EAAQgR,EAAKqmB,oBAAoB9uB,EAAK,GAAIzI,GAC1Cm3B,EAAUx4B,MAAMC,KAAK,OACrBiQ,EAAWxQ,KAAKm5B,SAAS3R,YAAY,oBAAoBxiB,IAAI,SAAUo0B,EAAGv2B,GAC1E,MAAOrD,GAAEqD,GAAKtC,KAAKu4B,KAGvB94B,KAAKq5B,eAAiB,EACtBr5B,KAAKs5B,cAAc,WACnBt5B,KAAKiqB,gBAAgB,WACrBjqB,KAAK44B,cACL/lB,EAAK0mB,kBACD53B,EAAQ6nB,MACRxpB,KAAKspB,YAAYhpB,MAAMkL,SAAS,8FAC5BguB,aACIpqB,GAAWG,OACXH,GAAWmB,OACbuW,KAAK,KACPuC,SAAUA,KAENjf,EAAK9I,QAGT0W,IACA+gB,EAAkBlmB,EAAK4mB,iBAAiB93B,IAE5C3B,KAAKkrB,cACLlrB,KAAKgrB,aAAavH,OAAOzjB,KAAK05B,MAC1Bl2B,QAASc,EAAYe,EAAiBrF,KAAKwD,UAC3Cm2B,aAAch4B,EAAQg4B,aACtBC,kBAAmBj4B,EAAQi4B,kBAC3BliB,WAAY/V,EAAQ+V,WACpBlH,SAAUA,EACVpG,KAAMA,EACN6I,YAAaA,EACb8lB,gBAAiBA,EACjB7V,SAAS,EACTrhB,MAAO,KAEP7B,KAAK+lB,oBACL/lB,KAAKq5B,eAAiB,EACtBr5B,KAAKirB,mBAAmBxH,OAAOzjB,KAAK05B,MAChCl2B,QAASc,EAAYc,EAAcpF,KAAKwD,UACxCm2B,aAAch4B,EAAQg4B,aACtBC,kBAAmBj4B,EAAQi4B,kBAC3BliB,WAAY/V,EAAQ+V,WACpBlH,SAAUA,EACVpG,KAAMA,EACN6I,YAAaA,EACb8lB,gBAAiBA,EACjB7V,SAAS,EACTrhB,MAAOA,OA9Bf7B,KAAKspB,YAAYhpB,MAAMu5B,WAAWxQ,EAASyE,SAkC3C9tB,KAAKyoB,gBACLzoB,KAAKyoB,eAAeqR,iBAExB95B,KAAK+5B,mBAAmB,WACpB/5B,KAAKs5B,cAAc,WACnBt5B,KAAKiqB,gBAAgB,aAEzBjqB,KAAKkY,QAAQ/W,OAAO,WAChB,MAAO3B,GAAE6E,QAAQ7E,EAAEQ,MAAMO,KAAKu4B,GAAUtoB,IAAa,IACtDyV,SAAS,oBACZjmB,KAAKsuB,2BACLzb,EAAKmnB,0BAETrL,gBAAiB,SAAUsL,GACvB35B,MAAM0K,GAAGkvB,SAASl6B,KAAKqP,QAAS4qB,IAEpCjB,eAAgB,SAAUr3B,GAAV,GAERkR,GACAY,EACAtS,CAQJ,OAXAQ,GAAUA,MACNkR,EAAO7S,KACPyT,EAAWZ,EAAKyO,WAAWjL,eAC3BlV,EAAS0R,EAAKyO,WAAWngB,SACzB0R,EAAK+D,gBACLjV,EAAQsR,YAAcQ,EAAS3M,SAC/BnF,EAAQ4R,OAASE,EAASE,IACtBxS,IACAQ,EAAQmT,oBAAsBrB,EAAS8F,mBAGxC5X,GAEXu3B,oBAAqB,SAAU/vB,EAAOxH,GAClC,MAAQ3B,MAAK4W,cAAoB5W,KAAKshB,WAAWlB,oBAAoBjX,EAAOxH,GAA/C,GAEjC83B,iBAAkB,SAAU93B,GAAV,GAEVkR,GACAyO,EACAyX,EACAhmB,EACAonB,EACAC,EACAC,EACA3zB,EACA1C,EACAuR,EACAjP,EACAg0B,EACAC,EAEK34B,EAQI44B,CARb,KAfA74B,EAAUA,MACNkR,EAAO7S,KACPshB,EAAazO,EAAKyO,WAClByX,EAAkBzX,EAAWrO,YAAYqO,EAAWvM,QACpDhC,EAAUuO,EAAW3I,gBACrBwhB,EAAmB7Y,EAAWrB,wBASlCpN,EAAK0mB,kBACI33B,EAAI,EAAGA,EAAIu4B,EAAiB74B,OAAQM,IAQzC,IAPAw4B,EAAkBD,EAAiBv4B,GACnCy4B,EAAoBD,EAAgBrnB,GACpCF,EAAK4nB,yBAAyBJ,GAC9BtB,EAAgBsB,GAAqBtB,EAAgBsB,OACrD3zB,EAAU4a,EAAWpG,aAAakf,GAClCG,EAAc7zB,EAAQ8T,QACtB+f,EAAYv4B,KAAKo4B,GACRI,EAAc,EAAGA,EAAcD,EAAYj5B,OAAS,EAAGk5B,IAC5Dx2B,EAASu2B,EAAYC,GACrBjlB,EAAWvR,EAAO+O,GAClBF,EAAK4nB,yBAAyBllB,GAC9BwjB,EAAgBxjB,GAAYwjB,EAAgBxjB,OAC5CjP,EAAQi0B,EAAYC,EAAc,GAClCF,EAAUh0B,EAAMyM,GAChBF,EAAK4nB,yBAAyBH,GAC9BvB,EAAgBuB,GAAWvB,EAAgBuB,OACvCvB,EAAgBxjB,GAAUhT,QAAQ+D,SAClCyyB,EAAgBxjB,GAAUuD,QAAQxS,EAI9C,OAAOyyB,IAEXQ,gBAAiB,WACbv5B,KAAK06B,sBAETzB,cAAe,SAAUt3B,GACrB,GAAIkR,GAAO7S,IACX,OAAI6S,GAAK+D,cACE/D,EAAKyO,WAAWzB,mBAAmBle,GAEvCkR,EAAKyO,WAAW1N,aAE3B6mB,yBAA0B,SAAUE,GAChC36B,KAAK06B,kBAAkBC,IAAU,GAErCC,kBAAmB,SAAUn4B,EAAQC,GAAlB,GAIXzB,GACAK,EACAe,EACAw4B,EACAC,EACAC,EACAC,EAaIhyB,EACAC,EACAjG,CAxBR,IAAKhD,KAAK+lB,kBAAV,CAUA,IAPI9kB,EAAOwB,EAAO,GAAGxB,KACjBK,EAASL,EAAKK,OAEdu5B,EAAQn4B,EAAO,GAAGzB,KAClB65B,EAAar4B,EAAOjB,IAAIkB,GACxBq4B,EAAmBD,EAAWx5B,OAC9B05B,KACC34B,EAAM,EAAGA,EAAMf,GACXu5B,EAAMx4B,GADaA,IAIpBpB,EAAKoB,GAAKpC,MAAM+C,SAChB/B,EAAKoB,GAAKpC,MAAM+C,OAAS63B,EAAMx4B,GAAKpC,MAAM+C,OAAS,GAG3D,KAAKX,EAAM,EAAGA,EAAMf,GACXu5B,EAAMx4B,GADaA,IAIpB2G,EAAgB/H,EAAKoB,GAAKU,aAC1BkG,EAAgB4xB,EAAMx4B,GAAKU,aAC3BC,EAAS,EACTgG,EAAgBC,EAChBjG,EAASgG,EACFA,EAAgBC,IACvBjG,EAASiG,GAEb+xB,EAAQh5B,KAAKgB,EAEjB,KAAKX,EAAM,EAAGA,EAAM04B,EAAkB14B,IAClCy4B,EAAWz4B,GAAKpC,MAAMC,QAAU,MAEpC,KAAKmC,EAAM,EAAGA,EAAMf,EAAQe,IACpB24B,EAAQ34B,KACRpB,EAAKoB,GAAKpC,MAAM+C,OAAS63B,EAAMx4B,GAAKpC,MAAM+C,OAASg4B,EAAQ34B,GAAO,EAAI,KAG9E,KAAKA,EAAM,EAAGA,EAAM04B,EAAkB14B,IAClCy4B,EAAWz4B,GAAKpC,MAAMC,QAAU,KAGxC+6B,KAAM,SAAUz3B,EAASjC,GAAnB,GAEE6B,GAAQ6f,EAAOnc,EAAUo0B,EAAa36B,EAAM46B,EACvCv5B,EAAON,EAFZ85B,IAEJ,KAASx5B,EAAI,EAAGN,EAASkC,EAAQlC,OAAQM,EAAIN,EAAQM,IACjDwB,EAASI,EAAQ5B,GACjBkF,KACAo0B,GAAe9rB,GAAWE,QAEtB2T,EADA7f,EAAOo0B,eACCp0B,EAAOo0B,mBAEPp0B,EAAO6f,OAAS7f,EAAOzD,OAAS,GAGxCw7B,EADA/3B,EAAOo0B,eACS/sB,EAAiBwY,GAEjB1Y,EAAiB0Y,GAGjCnc,EAAS9E,KADToB,EAAOwqB,SACO3rB,EAAgB,KAC1Bo5B,KAAM,IACNt5B,UAAWqN,GAAWsB,OACtByqB,IAEUA,GAElB56B,GACI+6B,aAAcl4B,EAAOzD,MACrB47B,aAAcn4B,EAAO6f,MACrBhjB,MAASmD,EAAOuB,UAAW,GAASzE,QAAW,WAC/C6B,UAAWm5B,EAAYpU,KAAK,KAC5B0U,KAAQ,gBAEPp4B,EAAOI,UACRjD,EAAKgB,QAAUA,EAAUA,EAAU,GAEnC6B,EAAO20B,mBACiC,IAApC30B,EAAO20B,iBAAiB9xB,eACjB7C,GAAO20B,iBAAiB9xB,QAE/B7C,EAAO20B,iBAAiB,WACxBx3B,EAAKwB,WAAa,IAAMqB,EAAO20B,iBAAiB,eACzC30B,GAAO20B,iBAAiB,WAGnC30B,EAAO,mBACP7C,EAAK,cAAgB6C,EAAO,eAEhC7C,EAAO0E,IAAO,KAAU1E,EAAM6C,EAAO20B,kBACrCqD,EAAIp5B,KAAKC,EAAgB,KAAM1B,EAAMuG,GAEzC,OAAOs0B,IAEXK,MAAO,SAAUj4B,GAAV,GAEClB,GAAO/B,EACFqB,EAFLO,IAEJ,KAASP,EAAI,EAAGA,EAAI4B,EAAQlC,OAAQM,IAC5B4B,EAAQ5B,GAAG+C,UAAW,IAG1BrC,EAAQkB,EAAQ5B,GAAGU,MACnB/B,KACI+B,GAAiC,IAAxBxB,SAASwB,EAAO,MACzB/B,EAAKN,OAAUqC,MAAwB,gBAAVA,GAAqBA,EAAQA,EAAQ,OAEtEH,EAAKH,KAAKC,EAAgB,MAAO1B,IAErC,OAAO4B,IAEXu5B,gBAAiB,WACb17B,KAAKq4B,gBAAgB5U,WACjBzjB,KAAK2B,QAAQ2mB,YACbtoB,KAAKs4B,iBAAiB7U,WAEtBzjB,KAAK+lB,oBACL/lB,KAAKytB,sBAAsBhK,WAC3BzjB,KAAK0tB,uBAAuBjK,aAGpC0U,YAAa,WACT,GAAI30B,GAAU6B,EAAiBrF,KAAKwD,QACpCxD,MAAKq4B,gBAAgB5U,OAAOzjB,KAAKy7B,MAAMn3B,EAAYd,KAC/CxD,KAAK2B,QAAQ2mB,YACbtoB,KAAKs4B,iBAAiB7U,OAAOzjB,KAAKy7B,MAAMn3B,EAAYd,KAEpDxD,KAAK+lB,oBACLviB,EAAU4B,EAAcpF,KAAKwD,SAC7BxD,KAAKytB,sBAAsBhK,OAAOzjB,KAAKy7B,MAAMn3B,EAAYd,KACzDxD,KAAK0tB,uBAAuBjK,OAAOzjB,KAAKy7B,MAAMn3B,EAAYd,OAGlEm4B,qBAAsB,SAAUn4B,EAASvC,GAAnB,GAGVmC,GAFJmB,EAAS/E,GACb,IAAIyB,EAAKK,QAAUkC,EAAQ,GAAI,CAE3B,IADIJ,EAASI,EAAQ,GACdJ,EAAOI,SAAWJ,EAAOI,QAAQlC,QACpC8B,EAASA,EAAOI,QAAQ,GACxBvC,EAAOA,EAAKE,OAAO,iBAEvBoD,GAASA,EAAO/C,IAAIP,GAExB,MAAOsD,IAEXq3B,wBAAyB,WAAA,GAIjB36B,GAHA4R,EAAO7S,KACPwD,EAAUqP,EAAKrP,YACf2jB,EAAKtU,EAAK3L,MAAMhG,KAAK,kBAEzBsC,GAAU6B,EAAiB7B,GAC3BvC,EAAO4R,EAAK8oB,qBAAqBn4B,EAAS2jB,GACtCtU,EAAKya,eACLnG,EAAKtU,EAAKya,aAAapsB,KAAK,2CAC5BsC,EAAU4B,EAAcyN,EAAKrP,SAC7BvC,EAAOA,EAAKO,IAAIqR,EAAK8oB,qBAAqBn4B,EAAS2jB,KAEvDlmB,EAAKwG,KAAK,WACN,GAAI2zB,GAAM57B,EAAEQ,MAAMkB,KAAK,KACvBk6B,GAAI5T,YAAY,WAChB4T,EAAIr1B,GAAG,GAAGkgB,SAAS,cAG3B4V,gBAAiB,SAAU56B,GAAV,GACJW,GACDk6B,CADR,KAASl6B,EAAIX,EAAKK,OAAS,EAAGM,GAAK,EAAGA,IAC9Bk6B,EAAWr3B,EAAoBxD,EAAKW,GAAGxB,OAAOkB,OAAS,EACvDw6B,IACA76B,EAAKW,GAAGL,QAAUN,EAAKK,OAASM,IAI5Cm6B,sBAAuB,SAAUv4B,GAC7B,IAAK,GAAI5B,GAAI,EAAGA,EAAI4B,EAAQlC,OAAQM,IAChC4B,EAAQ5B,GAAG,cAAgBA,GAGnCo6B,uBAAwB,WAAA,GAChB1sB,GACA5J,EAAS,CACT1F,MAAKstB,eACLhe,EAAStP,KAAKstB,aAAapsB,KAAK,SAChCwE,EAASuB,EAAgBqI,EAAQlK,EAAcpF,KAAKwD,WAExDyD,EAAgBjH,KAAKkH,MAAO7B,EAAiBrF,KAAKwD,SAAUkC,IAEhEu2B,sBAAuB,SAAU74B,EAAQ8f,GAAlB,GAEf7gB,GAEA2B,EAHAR,EAAUxD,KAAKwD,QAEfkD,KAEAw1B,EAAYhZ,EAAU,SAAUiZ,GAChC,MAAOt3B,GAAes3B,EAAE34B,SAASlC,QAAU66B,EAAEx3B,QAC7C,SAAUw3B,GACV,OAAQt3B,EAAes3B,EAAE34B,SAASlC,SAAW66B,EAAEx3B,OAEnD,IAAIgC,EAAcvD,EAAQI,EAASkD,IAAYA,EAAQpF,OACnD,IAAKe,EAAMqE,EAAQpF,OAAS,EAAGe,GAAO,EAAGA,IACrC2B,EAAS0C,EAAQrE,GACb65B,EAAUl4B,KACVA,EAAOW,QAAUue,IAKjCkZ,gBAAiB,SAAUn7B,EAAMuC,EAASoC,EAAYy2B,EAAWh5B,GAAhD,GAIJhB,GACDmD,EAJJ3C,EAAMw5B,GAAap7B,EAAKA,EAAKK,OAAS,GACtCg7B,EAAWr7B,EAAK4B,EAAIhC,MAAQ,GAC5B07B,EAAe,CACnB,KAASl6B,EAAM,EAAGA,EAAMmB,EAAQlC,OAAQe,IAChCmD,EAAOhG,EAAEyF,UAAWzB,EAAQnB,IAAQ01B,iBAAkBv0B,EAAQnB,GAAK01B,uBACvEl1B,EAAIzC,MAAM4B,KAAKwD,GACXhC,EAAQnB,GAAKmB,SAAWA,EAAQnB,GAAKmB,QAAQlC,SACxCg7B,IACDA,GACI/6B,QAAS,EACTnB,SACAS,MAAOI,EAAKK,QAEhBL,EAAKe,KAAKs6B,IAEV94B,EAAQnB,GAAKmB,QAAQlC,SACrBkE,EAAKuyB,iBAAiB9xB,QAAUxB,EAAoBjB,EAAQnB,GAAKmB,SAASlC,QAAU,EACpFkE,EAAKuyB,iBAAiB,gBAAkBzzB,EAAYd,EAAQnB,GAAKmB,SAASlC,QAE9EtB,KAAKo8B,gBAAgBn7B,EAAMuC,EAAQnB,GAAKmB,QAASgC,EAAM82B,EAAU94B,EAAQnB,IACpEmD,EAAKb,SACN43B,GAAgB/2B,EAAKuyB,iBAAiB9xB,QAAU,GAEpDpD,EAAItB,QAAUN,EAAKK,OAASuB,EAAIhC,OAEpC2C,EAAQnB,GAAKqtB,SAAW7sB,EAAIhC,MACxBwC,IACAG,EAAQnB,GAAKgB,aAAeA,GAEhCG,EAAQnB,GAAK0nB,UAAYlnB,EAAIzC,MAAMkB,OAAS,CAE5CsE,KACAA,EAAWmyB,iBAAiB9xB,SAAWs2B,IAG/CC,kBAAmB,SAAUC,EAAMj5B,EAASk5B,GAAzB,GACXr6B,GACApB,KACA07B,IACJ,IAAID,EAAuB,CAQvB,IAPAz7B,IACQM,QAAS,EACTnB,SACAS,MAAO,IAEfb,KAAKo8B,gBAAgBn7B,EAAMuC,GAC3BxD,KAAK67B,gBAAgB56B,GAChBoB,EAAM,EAAGA,EAAMpB,EAAKK,OAAQe,IAC7Bs6B,EAAa36B,KAAKC,EAAgB,MAAQu5B,KAAQ,OAASx7B,KAAKi7B,KAAKh6B,EAAKoB,GAAKjC,MAAOa,EAAKoB,GAAKd,UAEpGk7B,GAAKhZ,OAAOkZ,OAEZF,GAAKhZ,QAAQxhB,EAAgB,MAAQu5B,KAAQ,OAASx7B,KAAKi7B,KAAKz3B,OAGxE40B,cAAe,WAAA,GACP50B,GAAU6B,EAAiBrF,KAAKwD,SAChCk5B,EAAwBh4B,GAAK1E,KAAKwD,QAAS,SAAUkV,GACrD,MAAOA,GAAKlV,UAAY/D,IACzB6B,OAAS,CACZtB,MAAK+7B,sBAAsBz3B,EAAYtE,KAAKwD,UAC5CxD,KAAKw8B,kBAAkBx8B,KAAKwtB,YAAahqB,EAASk5B,GAC9C18B,KAAK+lB,oBACLviB,EAAU4B,EAAcpF,KAAKwD,SAC7BxD,KAAKw8B,kBAAkBx8B,KAAK2tB,kBAAmBnqB,EAASk5B,GACxD18B,KAAKgsB,8BACLhsB,KAAK48B,2BAET58B,KAAK47B;EAET5P,4BAA6B,WAAA,GAIrB6Q,GACA9G,EACA+G,EACAC,EACAtR,EAMAnpB,CAbCtC,MAAK+lB,oBAGN8W,EAAc36B,EAAalC,KAAKstB,aAAapsB,KAAK,wBAClD60B,EAAc/1B,KAAKkH,MAAMlD,SACzB84B,EAAiB56B,EAAa6zB,EAAY70B,KAAK,kBAC/C67B,EAAe/8B,KAAKqP,QAAQ,GAAGyc,YAC/BL,EAAYnrB,MAAMgL,QAAQmgB,YAC1BoR,GAAeE,IACfF,EAAcE,EAAe,EAAItR,GAErCzrB,KAAKstB,aAAa9rB,IAAIxB,KAAKooB,eAAe9lB,MAAMu6B,GAChD9G,EAAYv0B,IAAIxB,KAAKiI,OAAO3F,MAAMw6B,GAC9Bx6B,EAAQy6B,EAAeF,EAAc,EACzC78B,KAAKonB,QAAQ9kB,MAAMA,GACnByzB,EAAY/xB,SAAS1B,MAAMA,EAAQmpB,KAEvCiO,KAAM,SAAU/3B,GAAV,GAEEwH,GAAO5I,EAAMwB,EAAWwY,EAAa4D,EAAYvc,EAAGN,EACpD07B,EA2CQn6B,EA7CRgQ,EAAO7S,KAGPiB,KACAY,EAAQF,EAAQE,MAChBuI,EAAOzI,EAAQyI,KACfkX,EAAathB,KAAKshB,WAClB5J,EAAa4J,EAAW5J,iBACxB3E,EAAUuO,EAAW3I,gBACrB3F,EAAgBsO,EAAW3K,sBAC3BnT,EAAU7B,EAAQ6B,QAClBwU,EAAWnF,EAAK+D,cAChB3D,EAActR,EAAQsR,aAAeqO,EAAWrO,YAAYqO,EAAWrK,WAC3E,KAAKrV,EAAI,EAAGN,EAAS8I,EAAK9I,OAAQM,EAAIN,EAAQM,IAyC1C,GAxCAG,KACAoH,EAAQiB,EAAKxI,GACbo7B,EAAU7zB,EAAM4J,GAChBoL,EAAanG,EAAW/E,EAAY+pB,GAAW7zB,EAAM+M,SAAWoL,EAAWnD,WAAWhV,MACtFoR,EAAc4D,GAAcA,EAAW7c,OACvCf,GAASi7B,KAAQ,OACjBj7B,EAAKD,MAAMC,KAAK,QAAU4I,EAAMyT,IAC5BrC,IACAha,EAAK,mBAAqB4I,EAAMiL,UAEhCzS,EAAQuhB,UACHlL,GAAYA,IAAanF,EAAK6nB,kBAAkBsC,MAC7Ch9B,KAAKq5B,eAAiB,IAAM,GAC5Bt3B,EAAUC,KAAKoN,GAAWI,KAE9BxP,KAAKq5B,kBAGT94B,EAAKN,OAAUC,QAAS,QAExBV,EAAE6E,QAAQ8E,EAAMyT,IAAKjb,EAAQ6O,WAAa,GAC1CzO,EAAUC,KAAKoN,GAAWoB,UAE1B+J,GACAxY,EAAUC,KAAKoN,GAAWQ,OAE1BzG,EAAM8zB,OACNl7B,EAAUC,KAAK,mBAEnBzB,EAAKwB,UAAYA,EAAU+kB,KAAK,KAC3BjU,EAAK6nB,kBAAkBsC,KACpBn6B,EAAM7C,KAAKk9B,MACX/zB,MAAOA,EACP5I,KAAMA,EACNsB,MAAOmW,EAAWnF,EAAKqmB,oBAAoB/vB,EAAOxH,GAAWE,EAC7D83B,aAAch4B,EAAQg4B,aACtBC,kBAAmBj4B,EAAQi4B,mBAC5Bp2B,EAASoI,GAAM5L,KAAKm9B,IAAKn9B,OAC5BiB,EAAKe,KAAKa,IAEV0X,EAAa,CAIb,GAHIvC,IACAmG,GAAcxc,EAAQo3B,qBAAuBiE,QAEvB,IAAtB7e,EAAW7c,OACX,QAEJL,GAAOA,EAAKuD,OAAOxE,KAAK05B,MACpBl2B,QAASA,EACTm2B,aAAch4B,EAAQg4B,aACtBC,kBAAmBj4B,EAAQi4B,kBAC3BliB,WAAYA,EACZlH,SAAU7O,EAAQ6O,SAClB0S,QAASlL,EAAWrW,EAAQuhB,QAAUvhB,EAAQuhB,WAAa/Z,EAAMiL,SACjEhK,KAAM+T,EACNlL,YAAatR,EAAQsR,aAAeA,EACpC8lB,gBAAiBp3B,EAAQo3B,gBACzBl3B,MAAOA,EAAQ,KAoB3B,MAhBI7B,MAAKo9B,sBAAwBj0B,IAC7B5I,GACIwB,UAAWqN,GAAWe,eACtBktB,gBAAiBl0B,EAAM6J,IAEtBrR,EAAQuhB,UACT3iB,EAAKN,OAAUC,QAAS,SAE5Be,EAAKe,KAAKhC,KAAKk9B,MACX/zB,MAAOuO,EAAWvO,EAAM6J,IACxBzS,KAAMA,EACNsB,MAAOA,EACP83B,aAAch4B,EAAQg4B,aACtBC,kBAAmBj4B,EAAQi4B,mBAC5Bp2B,EAASxD,KAAKs9B,aAEdr8B,GAEXq8B,UAAW,SAAU37B,GAAV,GACHylB,MACAhkB,EAASzB,EAAQyB,OACjBoI,EAAW7J,EAAQyB,OAAO+M,gBAAkB3Q,EAAE+9B,KAC9C7lB,EAAa/V,EAAQwH,MAAM/F,EAAOzD,WAClCY,GACAi7B,KAAQ,WACRv7B,MAASmD,EAAOuB,UAAW,GAASzE,QAAW,WAYnD,OAVIkD,GAAO+zB,aACP/P,EAAUA,EAAQ5iB,OAAO9C,GACrBG,MAAOF,EAAQE,MAAQ,EACvBE,UAAWqN,GAAW8B,oBAG1B9N,EAAOsE,YACPzC,GAAO1E,EAAM6C,EAAOsE,YAExB0f,EAAQplB,KAAKyI,EAAiBe,EAASkM,IAAe,KAC/CzV,EAAgB,KAAM1B,EAAM6mB,IAEvCgW,mBAAoB,WAChB,QAAS14B,GAAK1E,KAAKwD,QAAS,SAAUg6B,GAClC,MAAOA,GAAErtB,iBACV7O,QAEP47B,KAAM,SAAUv7B,EAAS6B,EAASi6B,GAA5B,GAEEr6B,GAIKxB,EAED6oB,EAPJ3jB,KAEA42B,GAAqB/7B,EAAQg4B,kBAAoBh6B,MACjDu1B,EAAgBl1B,KAAKuuB,oBACrBjtB,EAASkC,EAAQlC,MACrB,KAASM,EAAI,EAAGA,EAAIN,EAAQM,IACxBwB,EAASI,EAAQ5B,GACb6oB,EAAMgT,GACNt0B,MAAOxH,EAAQwH,MACf/F,OAAQA,EACRu6B,YAAazI,GAAiBA,GAAiB9xB,EAAOzD,QAAU+9B,GAAqB/7B,EAAQi4B,oBAAsBh4B,EACnHC,MAAOF,EAAQE,QAEnBiF,EAAS9E,KAAKyoB,EAElB,OAAOxoB,GAAgB,KAAMN,EAAQpB,KAAMuG,IAE/Cq2B,IAAK,SAAUx7B,GAAV,GAIGi8B,GAHA92B,KACAqC,EAAQxH,EAAQwH,MAChB/F,EAASzB,EAAQyB,OAEjB7C,GACAi7B,KAAQ,WACRv7B,MAASmD,EAAOuB,UAAW,GAASzE,QAAW,YAE/Cg1B,EAAgBl1B,KAAKuuB,oBACrBsP,GAAuB,CAgE3B,OA/DIz6B,GAAOsE,YACPzC,IAAO,EAAM1E,EAAM6C,EAAOsE,YAE1ByB,EAAM8zB,OAAS75B,EAAOzD,OAASgC,EAAQg8B,aAAezI,IAAkBA,GAAiBhsB,EAAiB9F,EAAQ+F,KAClH5I,EAAKD,MAAMC,KAAK,kBAAoB6C,EAAOzD,MACvCu1B,IACI30B,EAAKwB,WAAaxB,EAAKwB,UAAUQ,QAAQ6M,GAAWK,eACpDlP,EAAKwB,WAAa,IAAMqN,GAAWK,SAC3BlP,EAAKwB,YACbxB,EAAKwB,UAAYqN,GAAWK,aAIhCrM,EAAO+zB,aACPrwB,EAAWpF,GACPG,MAAOF,EAAQE,MACfE,UAAWqN,GAAW8B,kBAE1B0sB,GAAaxuB,GAAWyB,MAEpB+sB,EAAU57B,KADVmH,EAAMoR,YACSpR,EAAMiL,SAAWhF,GAAW2B,aAAe3B,GAAW4B,WAEtD5B,GAAW6B,YAE1B9H,EAAMkV,OACNuf,EAAU57B,KAAKoN,GAAWkB,UAClBnH,EAAM+M,UAAY/M,EAAMiL,UAChCwpB,EAAU57B,KAAKoN,GAAWiB,SAE9BvJ,EAAS9E,KAAKC,EAAgB,QAAUF,UAAW67B,EAAU9W,KAAK,QAClEvmB,EAAKN,MAAM,eAAiB,UAE5BsJ,EAAcnG,EAAQ+F,KAClB5I,EAAKwB,UACLxB,EAAKwB,WAAaqN,GAAWO,UACrBpP,EAAKwB,YACbxB,EAAKwB,UAAYqN,GAAWO,YAGhCvM,EAAOiG,SACH9I,EAAKwB,WAAaxB,EAAKwB,UAAUQ,QAAQ,uBACzChC,EAAKwB,WAAa,kBACVxB,EAAKwB,YACbxB,EAAKwB,UAAY,kBAEjBxB,EAAK,WACLA,EAAKwB,UAAYxB,EAAK,SAAW,IAAMA,EAAKwB,WAEhD87B,EAAuBn5B,GAAKtB,EAAOiG,QAAS,SAAUA,GAClD,MAAOA,KAAYqD,IAAQrD,EAAQ+X,OAAS1U,KAC7CpL,OAAS,EAERwF,EAAW9G,KAAKw4B,eADhBrvB,EAAM8zB,QAAUj9B,KAAKuuB,qBAAuBsP,GAExC,SACA,cAG2Bz6B,EAAOiG,UAG1CvC,EAAS9E,KAAKhC,KAAK89B,aAAa16B,EAAQ+F,KAGzClH,EAAgB,KAAM1B,EAAMuG,IAEvCg3B,aAAc,SAAU16B,EAAQ+F,GAAlB,GAEN5C,GADAsM,EAAO7S,KAEPk1B,EAAgBriB,EAAK0b,oBACrBwP,EAAiB7I,EAAgBriB,EAAKmrB,4BAA4B56B,EAAQ+F,GAAS,EAgBvF,OAfI/F,GAAOoI,SACPjF,EAAQsM,EAAKorB,oBAAoB76B,EAAQ+F,GAClC/F,EAAOzD,OACd4G,EAAQ4C,EAAM2M,IAAI1S,EAAOzD,OACX,OAAV4G,GAAmBmD,EAAYnD,GAM/BA,EAAQw3B,GALJ36B,EAAOgf,SACP7b,EAAQjG,MAAM8hB,OAAOhf,EAAOgf,OAAQ7b,IAExCA,EAAQw3B,EAAiBx3B,KAIZ,OAAVA,GAAkBmD,EAAYnD,MACrCA,EAAQ,IAERnD,EAAOoI,WAAapI,EAAOi0B,QACpB5sB,EAAiBlE,GAEpB2uB,EACOzqB,EAAiBlE,GAEjBgE,EAAiBhE,IAIpC03B,oBAAqB,SAAU76B,EAAQ+F,GACnC,MAAInJ,MAAKuuB,oBACEvuB,KAAKk+B,0BAA0B96B,EAAQ+F,GAEvC/F,EAAOoI,SAASrC,IAG/B+0B,0BAA2B,SAAU96B,EAAQ+F,GAAlB,GACnB0J,GAAO7S,KACPm+B,EAAmBtrB,EAAKurB,0BACxBC,EAAsB,yBAA2BF,EAAiBG,UAAY,KAC9EC,EAAiB1rB,EAAK2rB,wBAAwBp7B,EAAOzD,OAAS0+B,EAC9DI,EAAmB7yB,GAAML,GAAcgzB,EAAgBJ,IAAqBO,eAAgBt7B,EAAOoI,UACvG,OAAOizB,GAAiBt1B,IAE5B60B,4BAA6B,SAAU56B,EAAQ+F,GAC3C,GAAIw1B,GAAyB3+B,KAAKw+B,wBAAwBp7B,EAAOzD,MACjE,OAAO4L,IAAcozB,GAAwBx1B,IAEjDq1B,wBAAyB,SAAU7+B,GAAV,GAEjBi/B,GADA/rB,EAAO7S,KAEPm+B,EAAmBtrB,EAAKurB,0BACxBE,EAAYH,EAAiBG,SACjC,OAAI3+B,IAAS2+B,GACTM,EAAiC,MAApBj/B,EAAMk/B,OAAO,GAAav+B,MAAMw+B,KAAKn/B,EAAO2+B,EAAY,gBAAkBA,EAAY,iBAAoB3+B,EAAQ,KACxH,MAAQ2+B,EAAY,OAASA,EAAY,aAAeA,EAAY,mBAAqBM,EAAa,+CAE1G,IAEXR,wBAAyB,WACrB,MAAOn5B,OAAW3E,MAAMy+B,SAAU/+B,KAAK2B,QAAQw8B,mBAEnD3F,eAAgB,SAAUxK,GACtB,GAAIpsB,GAAG2C,IACP,KAAK3C,EAAI,EAAGA,EAAIosB,EAAS1sB,OAAQM,IAC7B2C,EAAOvC,KAAKhC,KAAKg/B,QAAQhR,EAASpsB,IAEtC,OAAO2C,IAEXy6B,QAAS,SAAU31B,GAAV,GACD+X,IAAQ/X,EAAQ+X,MAAQ/X,GAASmnB,cACjChmB,EAAOxK,KAAK2B,QAAQ0nB,SAAS2E,SAAS5M,GACtCvQ,IAUJ,OATAxH,GAAUpE,MAAW4M,GAAgBuP,IAAS5W,KAAMA,GAAQnB,GACxDA,EAAQ0I,YACRlB,EAAK7O,KAAKC,EAAgB,QACtBF,WACI,SACAsH,EAAQ0I,YACV+U,KAAK,QAGR7kB,EAAgB,UACnBwT,KAAQ,SACRwpB,eAAgB7d,EAChBrf,WACI,6BAEAsH,EAAQtH,WACV+kB,KAAK,MACRjW,EAAKrM,QAAQ+F,EAAiBlB,EAAQmB,MAAQnB,EAAQ+X,UAE7D8d,sBAAuB,SAAUz2B,GAAV,GAYfrI,GAISiC,EAcTwQ,EA7BAssB,EAAK3/B,EAAEiJ,EAAEwgB,eACTmW,EAAep/B,KAAKo/B,aACpBj4B,EAAWg4B,EAAGh4B,WAEdk4B,EAAY10B,EAAWw0B,GACvBn+B,EAAYm+B,EAAGt5B,QAAQ,OACvBy5B,EAAiBt/B,KAAK2B,QAAQ49B,yBAA2B,EAHzDC,EAIGH,CAKP,IAJKD,IACDA,EAAep/B,KAAKo/B,aAAe5/B,EAAE,6EAErCY,EAAQW,EAAco+B,EAAGt5B,QAAQ,UAAU1E,OAAO,YAClD2N,GACA0wB,EAAOL,EAAGh4B,WAAWq4B,SAErB,KAASn9B,EAAM,EAAGA,EAAMjC,EAAMkB,QACtBlB,EAAMiC,IAAQ88B,EAAG,GADa98B,IAIlCm9B,GAAQp/B,EAAMiC,GAAKwpB,WAG3B7qB,GAAUoiB,OAAOgc,GACjBA,EAAajU,OAAOO,KAChB+T,IAAKt4B,EAASs4B,IACdD,KAAMA,EAAOF,EAAiB,EAC9Bt8B,OAAQ8H,EAAYq0B,GACpB78B,MAAwB,EAAjBg9B,IACRl1B,KAAK,KAAM+0B,GACVtsB,EAAO7S,KACXo/B,EAAa3a,IAAI,WAAanY,IAAI8X,GAAG,WAAa9X,GAAI,WAClD,GAAIzL,GAAQs+B,EAAGt+B,OACXrB,GAAE8f,SAASzM,EAAK3L,MAAM,GAAIi4B,EAAG,MAC7Bt+B,GAAS6D,GAAKmO,EAAKrP,QAAS,SAAUk8B,GAClC,MAAOA,GAAIp8B,SAAWo8B,EAAI/6B,SAC3BrD,QAEPuR,EAAK8sB,cAAc9+B,MAG3B8+B,cAAe,SAAUv8B,GAAV,GACsDvC,GAAwCs+B,EAAIpJ,EAAa5yB,EAAsIsnB,EAuB5PmV,EAAyD1V,EAIzD2V,EAIKhJ,EAcL7H,EACA8Q,EAMAC,EAII59B,EAAgCC,EAAU49B,EACrC39B,EAASf,EAzDlBuR,EAAO7S,KAAM2B,EAAUkR,EAAKlR,QAAS6B,EAAUqP,EAAKrP,QAAgB8E,EAAUhI,MAAMgL,QAAQhD,QAAoC23B,EAAgBptB,EAAKya,aAAevsB,EAAc8R,EAAKya,aAAapsB,KAAK,iBAAiBC,OAAOpB,GAAeuB,OAAS,CAY7P,IAVI8B,EADiB,gBAAVA,GACEI,EAAQJ,GACVyI,GAAczI,GACZsB,GAAKlB,EAAS,SAAUkV,GAC7B,MAAOA,KAAStV,IACjB,GAEMsB,GAAKlB,EAAS,SAAUkV,GAC7B,MAAOA,GAAK/Y,QAAUyD,IACvB,GAEFA,IAAUA,EAAOuB,OAAtB,CAmBA,IAhBA9D,EAAQwD,GAAQjB,EAAQI,GACxBL,EAAWC,EAAOE,OAEdyyB,EADA5yB,EACc0P,EAAKya,aAAaxmB,SAAS,SAE3B+L,EAAK3L,MAAMlD,SAE7Bm7B,EAAKpJ,EAAY70B,KAAK,gBAAmBL,EAAQ,MAC7C++B,EAAez8B,EAAW0P,EAAK8X,YAAc9X,EAAK5K,MAAOiiB,EAASrX,EAAKqX,QAAU1qB,IACjFqT,EAAKqX,QAAUrX,EAAKuV,gBACpB8B,EAAoBrX,EAAKqX,OAAOpjB,SAAvB3D,EAAgC,wBAAgD,wBAEzF08B,EAAc3V,EAAOhpB,KAAK,SAASwzB,QACnC7hB,EAAKya,cAAgB2S,GAAiBp/B,IAAUsC,IAChDtC,GAASo/B,GAEJpJ,EAAI,EAAGA,EAAIrzB,EAAQlC,QACpBkC,EAAQqzB,KAAOzzB,EADayzB,IAIxBrzB,EAAQqzB,GAAGlyB,QACX9D,GAmBZ,IAdI4pB,EADA9oB,EAAQ2mB,WACFyN,EAAY70B,KAAK,kDAAoDL,EAAQ,KAAKW,IAAIo+B,EAAa94B,SAAS,YAAY5F,KAAK,kDAAoDL,EAAQ,MAAMW,IAAIq+B,EAAY3+B,KAAK,YAAYA,KAAK,kDAAoDL,EAAQ,MAEjS++B,EAAa94B,SAAS,YAAY5F,KAAK,kDAAoDL,EAAQ,KAEzGmuB,EAAS+G,EAAYv0B,IAAIo+B,GAAcp+B,IAAIq+B,GAC3CC,EAAiBn1B,EAAWw0B,GAChC1U,EAAInoB,MAAM,IACV0sB,EAAOtD,IAAI,eAAgB,SAC3BjB,EAAInoB,MAAM,QACV0sB,EAAO/I,SAAS,iBAChB+I,EAAOtD,IAAI,eAAgB,IACvBqU,EAAiB75B,KAAKsb,KAAKtb,KAAKC,IAAIwE,EAAWw0B,GAAKx0B,EAAWi1B,EAAa1+B,KAAK,MAAM6E,GAAG,GAAGe,SAAS,cAAcf,GAAGlF,IAAS8J,EAAWk1B,EAAY3+B,KAAK,MAAM6E,GAAG,GAAGe,SAAS,cAAcf,GAAGlF,MACtM4pB,EAAInoB,MAAMy9B,GACV38B,EAAOd,MAAQy9B,EACXp+B,EAAQ2mB,WAAY,CAEpB,IADInmB,EAAO4zB,EAAY70B,KAAK,OAAkB8+B,EAAa,EAClD39B,EAAM,EAAGf,EAASa,EAAKb,OAAQe,EAAMf,EAAQe,GAAO,EAAG,CAE5D,GADAD,EAAWD,EAAKE,GAAKpC,MAAMqC,OACvBF,GAAYA,EAASG,QAAQ,SAE1B,CACHy9B,EAAa,CACb,OAHAA,GAAcl/B,SAASsB,EAAU,IAMrC49B,GACAhR,EAAOvnB,KAAK,WACRzH,KAAKC,MAAMqC,MAAQ09B,EAAa,OAIxC13B,EAAQD,MAA2B,GAAnBC,EAAQqsB,UACxB3F,EAAOtD,IAAI,UAAW,gBACtBuK,WAAW,WACPjH,EAAOtD,IAAI,UAAW,UACvB,IAEPsD,EAAOxH,YAAY,iBACnB3U,EAAK6R,QAAQ5W,IACT1K,OAAQA,EACR88B,SAAUJ,EACVK,SAAUJ,IAEdltB,EAAKmZ,8BACLnZ,EAAKyb,2BACLzb,EAAK+pB,4BAETwD,iCAAkC,WAAA,GAC1Bn4B,GAAQjI,KAAKiI,MAAOmf,EAAUnf,EAAMjE,SACpCynB,EAAYxjB,EAAM,GAAG4jB,YAAczE,EAAQ,GAAG0E,YAAcxrB,MAAMgL,QAAQmgB,YAAc,CAC5FzrB,MAAKooB,cAAcplB,OAAOokB,EAAQpkB,SAAWyoB,IAEjD6C,yBAA0B,WAClBtuB,KAAK2qB,cACA3qB,KAAKyoB,gBACNzoB,KAAKogC,mCAETpgC,KAAK46B,kBAAkB56B,KAAKiI,MAAOjI,KAAK2qB,eAGhDiS,wBAAyB,WAAA,GAEbjS,GACA1iB,CAFJjI,MAAKstB,eACD3C,EAAc3qB,KAAKstB,aAAaxmB,SAAS,SACzCmB,EAAQjI,KAAKkH,MAAMlD,SACvBhE,KAAK46B,kBAAkBjQ,EAAa1iB,GACpCzF,EAAgBmoB,EAAa1iB,KAGrCkd,WAAY,WACR,GAAKnlB,KAAK2B,QAAQohB,UAAlB,CAGI/iB,KAAK+iB,WACL/iB,KAAK+iB,UAAU7Q,SAEnB,IAAImuB,GAAWrgC,IACfR,GAAEQ,KAAKstB,cAAcpsB,KAAK,SAASM,IAAIxB,KAAKkH,OAAOkd,GAAG,YAAc9X,GAAI,KAAM9M,EAAEoM,MAAM5L,KAAKk/B,sBAAuBl/B,OAClHA,KAAK+iB,UAAY,GAAIziB,OAAM0K,GAAGs1B,UAAUtgC,KAAKqP,SACzCkxB,OAAQ,mBACRC,MAAO,SAAU/3B,GAAV,GAIC6G,GAAQswB,EAHRT,EAAK3/B,EAAEiJ,EAAEwgB,eAAe7e,KAAK,MAC7BvJ,EAAQrB,EAAE6E,QAAQ86B,EAAG,GAAIp+B,EAAco+B,EAAGt5B,QAAQ,UAAU1E,OAAO,aACnEs/B,EAAc,UAAY5/B,EAAQ,GAEtCw/B,GAAShxB,QAAQ4W,SAAS,0BACtBoa,EAAS/S,cAAgB9tB,EAAE8f,SAAS+gB,EAAS/S,aAAa,GAAI6R,EAAG,KACjE7vB,EAAS+wB,EAAS/S,aAClBsS,EAAeS,EAAS1V,cAExBrb,EAAS+wB,EAASn5B,MAAMlD,SACxB47B,EAAeS,EAASp4B,OAE5BjI,KAAKyqB,IAAMmV,EAAa94B,SAAS,YAAY5F,KAAKu/B,GAAaj/B,IAAI8N,EAAOpO,KAAKu/B,IAC/EzgC,KAAKm/B,GAAKA,EACVn/B,KAAK0gC,cAAgBj4B,EAAEkgB,EAAEgY,SACzB3gC,KAAK4gC,YAAcj2B,EAAWw0B,GAC9Bn/B,KAAKiI,MAAQjI,KAAKyqB,IAAI5kB,QAAQ,SAC9B7F,KAAKggC,WAAahgC,KAAKiI,MAAM3F,SAEjC6jB,OAAQ,SAAU1d,GAAV,GACAo4B,GAAc/xB,MAAa,EAC3BgyB,EAAiB,GACjBjY,EAAQpgB,EAAEkgB,EAAEgY,SAAWE,EAAc7gC,KAAK0gC,cAAgBG,CAC1D7gC,MAAK4gC,YAAc/X,EAAQiY,IAC3BjY,EAAQiY,EAAiB9gC,KAAK4gC,aAElC5gC,KAAKiI,MAAM3F,MAAMtC,KAAKggC,WAAanX,GACnC7oB,KAAKyqB,IAAInoB,MAAMtC,KAAK4gC,YAAc/X,IAEtCkY,UAAW,WAAA,GAEHphC,GACAyD,EAGA+8B,CALJE,GAAShxB,QAAQmY,YAAY,0BACzB7nB,EAAQK,KAAKm/B,GAAG5+B,KAAK,cACrB6C,EAASsB,GAAKJ,EAAY+7B,EAAS78B,SAAU,SAAUg6B,GACvD,MAAOA,GAAE79B,OAASA,IAElBwgC,EAAWj6B,KAAK6rB,MAAMpnB,EAAW3K,KAAKm/B,KAC1C/7B,EAAO,GAAGd,MAAQ69B,EAClBE,EAAStU,UACTsU,EAAS/R,2BACT+R,EAASzD,0BACTyD,EAAS3b,QAAQ5W,IACb1K,OAAQA,EACR88B,SAAUlgC,KAAK4gC,YACfT,SAAUA,IAEdngC,KAAKiI,MAAQjI,KAAKyqB,IAAMzqB,KAAKm/B,GAAK,UAI9Cja,UAAW,WAAA,GACH1hB,GACAJ,EACA49B,EACA5gC,EACAoF,EAAMnD,EAAKf,EACXssB,EAAW5tB,KAAK2B,QAAQisB,SACxB8O,EAAwBh4B,GAAK1E,KAAKwD,QAAS,SAAUkV,GACrD,MAAOA,GAAKlV,UAAY/D,IACzB6B,OAAS,CACZ,IAAKssB,EAaL,IARQxtB,EAFJs8B,EACI18B,KAAKstB,aACGntB,EAAUY,EAAcf,KAAKstB,aAAapsB,KAAK,iBAAiBM,IAAIT,EAAcf,KAAKkH,SAEvFnG,EAAcf,KAAKkH,OAGvB1H,EAAEQ,KAAKstB,cAAc9rB,IAAIxB,KAAKkH,OAAOhG,KAAK,MAEtDsC,EAAUc,EAAYtE,KAAKwD,SACtBnB,EAAM,EAAGf,EAASlB,EAAMkB,OAAQe,EAAMf,EAAQe,IAC/Ce,EAASI,EAAQnB,GACbe,EAAOwqB,YAAa,IAAUxqB,EAAOiG,SAAWjG,EAAOzD,QACvD6F,EAAOpF,EAAM2F,GAAG1D,GAChB2+B,EAAmBx7B,EAAK4E,KAAK,qBACzB42B,GACAA,EAAiB9uB,UAErB1M,EAAKy7B,kBAAkBh8B,MAAW2oB,EAAUxqB,EAAOwqB,UAAYtM,WAAYthB,KAAKshB,gBAI5F8D,YAAa,WAAA,GACLhlB,GAEAiC,EACAf,EACAkC,EACAJ,EACAoC,EACA07B,EAOAC,EAMAC,EAnBAxwB,EAAa5Q,KAAK2B,QAAQiP,WAO1B8rB,EAAwBh4B,GAAK1E,KAAKwD,QAAS,SAAUkV,GACrD,MAAOA,GAAKlV,UAAY/D,IACzB6B,OAAS,CACZ,IAAKsP,IAAc5Q,KAAK2B,QAAQksB,WAyBhC,IAtBIsT,EAAav1B,GAAM,SAAUnD,GAC7BzI,KAAK0kB,QAAQlX,IACT7N,MAAO8I,EAAE9I,MACTqB,UAAWyH,EAAEzH,aAElBhB,MACCohC,EAAax1B,GAAM,SAAUnD,GAC7BzI,KAAK0kB,QAAQjX,IACT9N,MAAO8I,EAAE9I,MACTqB,UAAWyH,EAAEzH,aAElBhB,MAGKI,EAFJs8B,EACI18B,KAAKstB,aACGvsB,EAAcf,KAAKstB,aAAapsB,KAAK,iBAAiBM,IAAIT,EAAcf,KAAKkH,QAE7EnG,EAAcf,KAAKkH,OAGvB1H,EAAEQ,KAAKstB,cAAc9rB,IAAIxB,KAAKkH,OAAOhG,KAAK,MAEtDsC,EAAUc,EAAYtE,KAAKwD,SACtBnB,EAAM,EAAGf,EAASlB,EAAMkB,OAAQe,EAAMf,EAAQe,IAC/Ce,EAASI,EAAQnB,GACjBmD,EAAOpF,EAAM2F,GAAG1D,GAChB6+B,EAAqB17B,EAAK4E,KAAK,mBAC3B82B,GACAA,EAAmBhvB,UAEnB9O,EAAOiG,SAAWjG,EAAOwN,cAAe,GAG5CpL,EAAK67B,gBAAgBp8B,IAAO,KAAU2L,EAAYxN,EAAOwN,YACrD0Q,WAAYthB,KAAKshB,WACjB1O,KAAMuuB,EACNve,KAAMwe,MAIlBE,QAAS,WACLthC,KAAK0kB,QAAQzY,KAEjBs1B,UAAW,WACP,MAA6B,QAAtBvhC,KAAKstB,cAEhBrI,YAAa,WAAA,GAGL9jB,GAEAqgC,EAEAC,EACAj8B,EAPAqN,EAAO7S,KACPoJ,EAAapJ,KAAK2B,QAAQyH,WAE1BlG,EAAUlD,KAAKiI,MAEf9E,EAAW0P,EAAK0uB,WAGhBn4B,KACAA,EAAa9I,MAAM0K,GAAG02B,WAAWC,aAAav4B,GAC1CpJ,KAAK+lB,oBACL7iB,EAAUA,EAAQ1B,IAAIxB,KAAK2qB,aAC3B6W,EAAcp4B,EAAWmtB,UAAYntB,EAAW5D,MAEpDrE,EAAS,oCACLiI,EAAW5D,OACXrE,GAAkB,OAEtBnB,KAAKoJ,WAAa,GAAI9I,OAAM0K,GAAG02B,WAAWx+B,GACtC/B,OAAQA,EACRygC,MAAM,EACNrL,SAAUntB,EAAWmtB,SACrBsL,eAAgB,0CAChB3f,OAAQtW,GAAM5L,KAAKshC,QAASthC,MAC5BwhC,YAAaA,EACbM,gBAAiBl2B,GAAM5L,KAAK+hC,iBAAkB/hC,KAAMmB,EAAQiI,EAAW5D,MACvEgxB,eAAgBptB,EAAW5D,MAAQxF,KAAK+lB,kBAAoBna,GAAM5L,KAAKgiC,kBAAmBhiC,MAAQP,IAElGoT,EAAKlR,QAAQkoB,cACb4X,EAAQr4B,EAAWmtB,SACnB/wB,EAAO4D,EAAW5D,KAClBtC,EAAQkhB,GAAG,UAAY9X,GAAI,SAAU7D,GAAV,GACnBiX,GAAU7M,EAAK6M,UACf/b,EAAS8E,EAAE9E,MACf,IAAI8E,EAAE4pB,UAAYxnB,EAAKo3B,WAAax5B,EAAE+pB,UAAYhzB,EAAE6E,QAAQV,EAAQT,QAAkBwc,EAAQhgB,GAAG,aAAc,CAO3G,GANA+I,EAAEG,iBACFH,EAAEwrB,kBACFvU,EAAUla,EAAOka,EAAUA,EAAQ1b,SAC/Bb,IAAaqC,IACbka,EAAUA,EAAQle,IAAIqR,EAAKwd,YAAY3Q,KAEvC+hB,EACA,GAAKh5B,EAAEsgB,SAGH,GAAIrJ,EAAQre,SAAS+N,GAAWoB,UAG5B,MAFAkP,GAAQ8H,YAAYpY,GAAWoB,UAC/BqC,EAAK6R,QAAQzY,IACb,MALJ4G,GAAKzJ,WAAW84B,YASpBrvB,GAAKzJ,WAAW84B,OAEf18B,KACDqN,EAAKzJ,WAAW+4B,YAAcziB,GAElC7M,EAAKzJ,WAAW7C,MAAMmZ,QACdla,IAASiD,EAAE+pB,UAAY/pB,EAAE4pB,SAAWxnB,EAAK8nB,MAAQlqB,EAAE+pB,UAAY/pB,EAAE4pB,SAAWxnB,EAAK+nB,OAASnqB,EAAE+pB,UAAY/pB,EAAE4pB,SAAWxnB,EAAKynB,IAAM7pB,EAAE+pB,UAAY/pB,EAAE4pB,SAAWxnB,EAAK4nB,MAAQhqB,EAAE4pB,UAAYxnB,EAAKo3B,UAAYx5B,EAAE+pB,YACjN/pB,EAAEG,iBACFH,EAAEwrB,kBACFvU,EAAUA,EAAQ1b,SACdb,IACAuc,EAAUA,EAAQle,IAAIqR,EAAKwd,YAAY3Q,KAEvC+hB,GACK5uB,EAAKzJ,WAAW+4B,cACjBtvB,EAAKzJ,WAAW+4B,YAAcziB,GAElC7M,EAAKzJ,WAAWg5B,YAAYvvB,EAAKzJ,WAAWi5B,iBAAkB3iB,KAE9D7M,EAAKzJ,WAAW84B,QAChBrvB,EAAKzJ,WAAW7C,MAAMmZ,UAO9CqiB,iBAAkB,SAAU5gC,EAAQqE,GAAlB,GAIV88B,GACAC,EACA/+B,EACA6B,EACAd,EACKlC,CART,IAAKrC,KAAKooB,cAAV,CAQA,IALIka,EAAc9iC,EAAE2B,EAAQnB,KAAK2qB,aAC7B4X,EAAiB/iC,EAAE2B,EAAQnB,KAAKiI,OAChCzE,EAAUgC,EAAOJ,EAAcpF,KAAKwD,SAASlC,OAAS,EACtD+D,EAAmBG,EAAOxF,KAAKwD,QAAQlC,OAASkC,EAAU,EAC1De,KACKlC,EAAM,EAAGA,EAAMigC,EAAYhhC,OAAQe,GAAOmB,EAC/CxB,GAAKwgC,MAAMj+B,EAAQ+9B,EAAY9nB,MAAMnY,EAAKA,EAAMmB,IAChDxB,GAAKwgC,MAAMj+B,EAAQg+B,EAAe17B,OAAO,EAAGxB,GAEhD,OAAOd,KAEXy9B,kBAAmB,SAAU9pB,GAAV,GACXuqB,GAEKpgC,EAASf,EADdiD,EAAS/E,GACb,KAAS6C,EAAM,EAAGf,EAAS4W,EAAM5W,OAAQe,EAAMf,EAAQe,IACnDogC,EAAUziC,KAAKqwB,YAAYnY,EAAM7V,IAC7BgC,GAAQo+B,EAAQ,GAAIvqB,GAAS,IAC7B3T,EAASA,EAAO/C,IAAIihC,GAG5B,OAAOl+B,IAEX8rB,YAAa,SAAUxtB,GAAV,GAMLoF,GACApH,EANA8pB,EAAc3qB,KAAK2qB,WAEvB,OADA9nB,GAAMrD,EAAEqD,GACH8nB,GAGD1iB,EAAQpF,EAAIgD,QAAQ7F,KAAKiI,MAAMzG,IAAIxB,KAAK2qB,cACxC9pB,EAAQoH,EAAM/G,KAAK,aAAaL,MAAMgC,GAC1CoF,EAAQA,EAAM,KAAOjI,KAAKiI,MAAM,GAAK0iB,EAAc3qB,KAAKiI,MACjDA,EAAM/G,KAAK,aAAa6E,GAAGlF,IALvBgC,GAOfs2B,OAAQ,SAAU5yB,GACd,GAAI6C,GAAapJ,KAAKoJ,UACtB,OAAKA,IAGgB,IAAV7C,IACF6C,EAAWzH,QAAQ40B,WACpBntB,EAAW84B,QACX37B,EAAQA,EAAMmuB,SAEd10B,KAAK+lB,oBACLxf,EAAQA,EAAM/E,IAAIhC,EAAEwF,IAAIuB,EAAOqF,GAAM5L,KAAKqwB,YAAarwB,UAGxDoJ,EAAW7C,MAAMA,IAXb/G,KAafkjC,eAAgB,WACZ,GAAIlyB,GAAWxQ,KAAKm5B,QAChB3oB,GAASlP,SACTtB,KAAKoJ,WAAW84B,QAChBliC,KAAK0kB,QAAQzY,MAGrB2Y,YAAa,SAAUtD,GAAV,GACLzO,GAAO7S,KACP2iC,EAAK3iC,KAAKshB,WACVtJ,EAAWnF,EAAKlR,QAAQqW,QACxB2qB,KACAA,EAAGhW,OAAO1gB,GAAQjM,KAAK4sB,iBACvB+V,EAAGhW,OAAOxgB,GAAOnM,KAAK6sB,eACtB8V,EAAGhW,OAAOvgB,GAAUpM,KAAK8sB,mBAE7B9sB,KAAK4sB,gBAAkBhhB,GAAM5L,KAAKsQ,QAAStQ,MAC3CA,KAAK6sB,cAAgBjhB,GAAM5L,KAAKqe,OAAQre,MACxCA,KAAK8sB,iBAAmBlhB,GAAM5L,KAAKopB,UAAWppB,MAC1C6L,GAAcyV,KACdrc,GAAOqc,GACHrZ,MAAO4K,EAAK5K,MACZuN,OAAQ3C,EAAKrP,UAEbqI,GAAcmM,IAAaA,EAASgF,WAAavd,IACjD6hB,EAAWtE,SAAWhF,EAASgF,WAGvC2lB,EAAK3iC,KAAKshB,WAAaxX,EAAmBgI,OAAOwP,GAC7CtJ,IACA2qB,EAAGvlB,gBAAkB3d,GAEzBkjC,EAAGhhB,KAAK1V,GAAQjM,KAAK4sB,iBACrB+V,EAAGhhB,KAAKxV,GAAOnM,KAAK6sB,eACpB8V,EAAGhhB,KAAKvV,GAAUpM,KAAK8sB,kBACvB9sB,KAAKqtB,sBAAwBzhB,GAAM,WAC/B5L,KAAKshB,WAAWwE,SACjB9lB,OAEP4iC,cAAe,SAAUthB,GACrBthB,KAAK4kB,YAAYtD,GACjBthB,KAAKklB,YACLllB,KAAKolB,cACLplB,KAAKylB,cACLzlB,KAAK4lB,YACL5lB,KAAKgrB,aAAavH,WACdzjB,KAAK2B,QAAQkkB,UACb7lB,KAAKshB,WAAWwE,SAGxB5S,SAAU,SAAUhQ,GAAV,GAIFL,GACA+Z,EACAzT,CALJ,OAAIjG,aAAmB2G,GACZ3G,GAEPL,EAAMrD,EAAE0D,GAAS2C,QAAQ,MACzB+W,EAAM/Z,EAAItC,KAAKD,MAAMC,KAAK,QAC1B4I,EAAQO,EAAYkT,GAAO,KAAO5c,KAAKshB,WAAWuhB,SAASjmB,KAGnElN,QAAS,SAAU7M,GAAV,GAEDsG,GADA0J,EAAO7S,IAEX,KAAIA,KAAKuuB,qBAAwBvuB,KAAK2B,QAAQ2H,iBAGnCzG,KAAQmJ,KACfnJ,EAAM7C,KAAKkoB,MAAMhnB,KAAK2B,IAGtBsG,EADA0J,EAAK+D,eAAiB/D,EAAKiwB,oBAAsBjgC,YAAegH,GACxDhH,EAEA7C,KAAKkT,SAASrQ,IAE1B,CAOA,GAJwB,SAApB7C,KAAK+iC,cACL55B,EAAM8zB,OAAQ,GAElBj9B,KAAK2pB,gBACD3pB,KAAK0kB,QAAQjY,IAAetD,MAAOA,IAEnC,MADA0J,GAAKyO,WAAWb,gCAChB,CAEJzgB,MAAKupB,UACLvpB,KAAKgjC,cAAc75B,GACnBnJ,KAAK0kB,QAAQhY,IACT1L,UAAWhB,KAAKqiB,OAAOhT,QACvBlG,MAAOA,MAGf85B,YAAa,SAAUx6B,GACnB,GAAKzI,KAAKqiB,OAAV,CAGA,GAAIqH,EACJjhB,GAAIxD,GAAOwD,GACPzH,UAAWhB,KAAKqiB,OAAOhT,QACvBlG,MAAOnJ,KAAKqiB,OAAOlZ,QAEnBnJ,KAAK0kB,QAAQpX,GAAQ7E,KAGrBzI,KAAK2B,QAAQkoB,cACbH,EAAe1pB,KAAKkY,QAAQrX,MAAMrB,EAAEQ,KAAK0f,WAAW1b,WAExDhE,KAAKy0B,YACDz0B,KAAK2B,QAAQkoB,cACb7pB,KAAK0f,QAAQ1f,KAAKkY,QAAQnS,GAAG2jB,GAAc5iB,WAAW3F,OAAOsN,IAASimB,SACtE1sB,EAAWhI,KAAKiI,OAAO,OAG/BwsB,UAAW,WACHz0B,KAAKuuB,sBAGTvuB,KAAK2pB,gBACL3pB,KAAKupB,YAETsM,QAAS,WAAA,GAEDqN,GADA7gB,EAASriB,KAAKqiB,MAEdriB,MAAKuuB,qBAGJlM,IAGL6gB,GACI/5B,MAAOkZ,EAAOlZ,MACdnI,UAAWqhB,EAAOhT,SAElBgT,EAAOC,QAAUtiB,KAAK0kB,QAAQ7X,GAAMq2B,IACpCljC,KAAKshB,WAAWN,SAGxBmiB,OAAQ,SAAUn/B,GAAV,GACA6O,GAAO7S,KACPshB,EAAazO,EAAKyO,WAClBtJ,EAAWnF,EAAK+D,cAChBse,EAAgBriB,EAAK0b,oBACrB6U,EAAgBvwB,EAAKwwB,oBACrBhhB,EAASriB,KAAKqiB,OACdxhB,EAAQ,EACRsI,IACJ,MAAIkZ,GAAWA,EAAOC,QAAUtiB,KAAK2B,QAAQ2H,SAG7C,MAAItF,IACMA,YAAkB6F,KACpB7F,EAAShE,KAAKkT,SAASlP,IAE3BmF,EAAMnF,EAAOgP,eAAiBhP,EAAOsR,GACrCzU,EAAQb,KAAKshB,WAAW/e,QAAQyB,GAAU,EAC1ChE,KAAKmuB,OAAOnqB,GAAQid,KAAK,WACrB,GAAIqiB,GAAqBtrB,GAAYsJ,EAAWzE,kBAAkB7Y,KAAYkxB,GAAiBkO,EAC/FvwB,GAAK0wB,UAAUp6B,EAAOtI,EAAOyiC,KAEjC,IAEJtjC,KAAKujC,UAAUp6B,EAAOtI,GAAtBb,IAEJujC,UAAW,SAAUp6B,EAAOtI,EAAOyiC,GAAxB,GAOHzgC,GACA2C,EAPAqN,EAAO7S,KACPshB,EAAazO,EAAKyO,UACtBnY,GAAQ0J,EAAKyO,WAAWhJ,OAAOzX,EAAOsI,GAClCm6B,GACAhiB,EAAWV,uBAEX/d,EAAM7C,KAAKioB,QAAQ9e,GAEnB0J,EAAK0b,qBACL/oB,EAAO3C,EAAIiE,SAAS,MAAMf,GAAG8M,EAAK2wB,0BAA0B3gC,IAC5DgQ,EAAKpD,SAASjK,IACP3C,GAAOA,EAAI,GAClBgQ,EAAKnD,QAAQ7M,GACNgQ,EAAK+D,eAAiB/D,EAAKiwB,oBAClCjwB,EAAKnD,QAAQvG,IAGrBq6B,0BAA2B,SAAUxiC,GAAV,GAKnBoC,GACAf,EALAwQ,EAAO7S,KACPmJ,EAAQ0J,EAAKK,SAASlS,GACtBwC,EAAUc,EAAYuO,EAAKrP,SAC3BlC,EAASkC,EAAQlC,MAGrB,KAAKe,EAAM,EAAGA,EAAMf,EAAQe,IAExB,GADAe,EAASI,EAAQnB,GACb8G,KAAWA,EAAMG,UAAYH,EAAMG,SAASlG,EAAOzD,UAAYyD,EAAOiG,SAAWjG,EAAOzD,OAASyD,EAAOuB,UAAW,EACnH,MAAOtC,EAGf,WAEJohC,UAAW,SAAU5gC,GAAV,GACHsG,GAAQnJ,KAAKkT,SAASrQ,GACtBqgC,GACA/5B,MAAOA,EACPtG,IAAKA,EAELsG,KAAUnJ,KAAK0kB,QAAQxX,GAAQg2B,KAC/BljC,KAAKshB,WAAWvZ,OAAOoB,GAClBnJ,KAAKuuB,qBACNvuB,KAAKshB,WAAWN,SAI5B2I,cAAe,WAAA,GAEPxgB,GADA0J,EAAO7S,KAEPqiB,EAASxP,EAAKwP,MACdA,KACAlZ,EAAQkZ,EAAOlZ,MACf0J,EAAKqa,iBACAra,EAAK0b,oBAEC1b,EAAK6wB,0BACZ7wB,EAAKyO,WAAWb,gCAFhB5N,EAAKyO,WAAWd,cAAcrX,GAIlCA,EAAM8zB,OAAQ,GAElBpqB,EAAKuiB,yBAA0B,GAEnCsO,uBAAwB,WACpB,GAAI7wB,GAAO7S,IACX,OAAO6S,GAAK+D,eAAiB/D,EAAK0b,sBAAwB1b,EAAKuiB,yBAEnElI,eAAgB,WACPltB,KAAKqiB,SAGVriB,KAAKqiB,OAAOE,QACZviB,KAAKqiB,OAAS,OAElB2gB,cAAe,SAAU75B,GAAV,GAIF9G,GAKLshC,EACAhiC,EATAkB,EAAM7C,KAAKioB,QAAQ9e,GACnB3F,EAAUc,EAAYtE,KAAKwD,SAC3BogC,IACJ,KAASvhC,EAAM,EAAGA,EAAMmB,EAAQlC,OAAQe,IACpCuhC,EAAS5hC,KAAKiD,MAAWzB,EAAQnB,WAC1BuhC,GAASvhC,GAAKgB,YAEzBR,GAAMA,EAAIrB,IAAIxB,KAAKqwB,YAAYxtB,IAC3B8gC,EAAO3jC,KAAK+iC,YACZphC,GACA6B,QAASogC,EACTz6B,MAAOA,EACPxF,OAAQ3D,KACRiiB,gBAAgB,EAChBzW,SAAUxL,KAAK2B,QAAQ2H,SAASkC,UAExB,UAARm4B,EACA3jC,KAAKqiB,OAAS,GAAIrY,GAAOnH,EAAKlB,IAE9BsD,GAAOtD,GACHkhB,OAAQ7iB,KAAK2B,QAAQ2H,SAASuZ,OAC9BmB,gBAAiBpY,GAAM,WACnB,MAAO5L,MAAKw4B,gBACR,SACA,gBAELx4B,MACH+jB,cAAenY,GAAM5L,KAAK89B,aAAc99B,MACxCuS,KAAM3G,GAAM5L,KAAK61B,QAAS71B,MAC1BsS,OAAQ1G,GAAM5L,KAAKijC,YAAajjC,MAChC0jB,SAAU1jB,KAAKqP,UAEnBrP,KAAKqiB,OAAS,GAAIpY,GAAYpH,EAAKlB,KAG3CkiC,oBAAqB,SAAUr+B,EAAM7D,GAAhB,GACbkR,GAAO7S,KACPoD,EAAS6B,MAAWtD,EAAQ6B,QAAQ,GAExC,cADOJ,GAAOC,aACP,GAAI6G,GAAa1E,EAAMP,OAC1B8e,cAAenY,GAAMiH,EAAKirB,aAAcjrB,GACxC6Q,SAAU7Q,EAAKxD,QACf4S,gBAAgB,EAChBte,OAAQkP,EACRrP,SAAUJ,GACV+F,MAAOxH,EAAQwH,MACf+Y,OAAQvgB,EAAQugB,WAGxBzS,SAAU,SAAUjK,GAAV,GAGFpC,GACA+F,EAHA0J,EAAO7S,IACXwF,GAAOhG,EAAEgG,GACLpC,EAASkB,EAAYuO,EAAKrP,SAASqP,EAAKkX,UAAUvkB,IAClD2D,EAAQ0J,EAAKK,SAAS1N,GACtBqN,EAAK0b,qBAAuBplB,GAASD,EAAiB9F,EAAQ+F,IAC9D0J,EAAKixB,UAAUt+B,EAAMpC,EAAQ+F,IAGrC26B,UAAW,SAAUt+B,EAAMpC,EAAQ+F,GAAxB,GAEH46B,GADAlxB,EAAO7S,IAEX,OAAI6S,GAAK6R,QAAQjY,IAAetD,MAAOA,KACnC0J,EAAKyO,WAAWb,gCAChB,IAEJ5N,EAAK2b,YACLrlB,EAAM8zB,OAAQ,EACdpqB,EAAK8W,gBACL9W,EAAK0W,SACDoQ,aAAcv2B,EACdw2B,kBAAmBp0B,EAAK3E,UAE5BkjC,EAAalxB,EAAK5K,MAAMzG,IAAIqR,EAAK8X,aAAazpB,KAAKmL,GAAM+C,GAAWK,UAAUilB,QAC9E7hB,EAAKwP,OAASxP,EAAKgxB,oBAAoBE,GACnCvgC,SAAUJ,GACV+F,MAAOA,EACP+Y,OAAQ,SAAUzZ,GACVoK,EAAK6R,QAAQ7X,IACTm3B,OAAQv7B,EAAEu7B,OACVhjC,UAAWwE,EACX2D,MAAOA,KAEXV,EAAEG,oBAIdiK,EAAKma,SAAW+W,EAChBlxB,EAAK6R,QAAQhY,IACT1L,UAAWwE,EACX2D,MAAOA,IAxBX0J,IA2BJ2b,UAAW,SAAUyV,GAAV,GAGH9c,GACAhe,EAHA0J,EAAO7S,KACPwF,GAAQqN,EAAKwP,YAAcnf,OAG1BsC,IAASA,EAAK,IAAOqN,EAAK0b,sBAG/BplB,EAAQ0J,EAAKK,SAAS1N,GAClBy+B,GAAYpxB,EAAK6R,QAAQpX,IACrBtM,UAAWwE,EACX2D,MAAOA,MAIf0J,EAAK6R,QAAQzX,IACTwI,KAAMwuB,EAAW32B,GAAST,GAC1B1D,MAAOA,EACPnI,UAAWwE,IAEfqN,EAAK8W,gBACLnkB,EAAKgiB,YAAYpY,GAAWK,UAC5B0X,EAAK3hB,EAAKxB,SAASwjB,YAAYpY,GAAWM,SACtCmD,EAAKuV,eACLvV,EAAKwd,YAAYlJ,GAAIK,YAAYpY,GAAWM,SAEhDmD,EAAK0W,UACL1W,EAAK6R,QAAQxY,IACTwM,KAAMyO,EACN/c,KAAMjB,EACN+6B,GAAIl5B,KAEJ6H,EAAKuV,eACLvf,EAAgBse,EAAGuE,IAAI,SAAU,IAAI,GAAI7Y,EAAKwd,YAAYlJ,GAAIuE,IAAI,SAAU,IAAI,OAGxFlL,cAAe,WACXxgB,KAAKshB,WAAWd,iBAEpB2jB,YAAa,WAAA,GACLtxB,GAAO7S,KACPsJ,GAAYuJ,EAAKwP,YAAc/Y,SAC/B86B,EAAQ96B,GAAYA,EAASgZ,OAC5B8hB,GAAU96B,GAAcuJ,EAAK6R,QAAQ5X,KACtC+F,EAAKyO,WAAWN,QAGxB+hB,UAAW,WACP,GAAIY,GAAO,SAAUr6B,EAAWtJ,KAAK2B,QAAQ2H,QAQ7C,OAPIA,MAAa,IAETq6B,EADmB,gBAAZr6B,GACAA,EAEAA,EAASq6B,MAAQA,GAGzBA,EAAKnT,eAEhBjC,kBAAmB,WACf,MAAOvuB,MAAK+iC,cAAgB/zB,IAEhCq0B,kBAAmB,WACf,MAAOrjC,MAAK+iC,cAAgB9zB,IAEhC6zB,iBAAkB,WACd,MAAO9iC,MAAK+iC,cAAgB7zB,IAEhCud,WAAY,SAAUrpB,GAClBpD,KAAKqkC,wBAAwBjhC,GAAQ,IAEzCspB,WAAY,SAAUtpB,GAClBpD,KAAKqkC,wBAAwBjhC,GAAQ,IAEzCihC,wBAAyB,SAAUjhC,EAAQuB,GACvCvB,EAASpD,KAAKskC,YAAYlhC,GACrBA,GAAUA,EAAOuB,SAAWA,IAGjCvB,EAAOuB,OAASA,EAChB3E,KAAKi8B,sBAAsB74B,GAASuB,GACpC3E,KAAKi3B,0BACLj3B,KAAKm4B,cACLn4B,KAAKo4B,gBACLp4B,KAAKupB,UACLvpB,KAAKukC,qBACLvkC,KAAK0kB,QAAQ/f,EAAS+I,GAAaC,IAAcvK,OAAQA,IACpDuB,GAAWvB,EAAOd,OACnBtC,KAAKiI,MAAMzG,IAAIxB,KAAKkH,MAAMrB,QAAQ,UAAUvD,MAAM,IAEtDtC,KAAK47B,4BAET0I,YAAa,SAAUlhC,GAYnB,MAVIA,GADiB,gBAAVA,GACEpD,KAAKwD,QAAQJ,GACfyI,GAAczI,GACZsB,GAAKJ,EAAYtE,KAAKwD,SAAU,SAAUkV,GAC/C,MAAOA,KAAStV,IACjB,GAEMsB,GAAKJ,EAAYtE,KAAKwD,SAAU,SAAUkV,GAC/C,MAAOA,GAAK/Y,QAAUyD,IACvB,IAIXmhC,mBAAoB,WAAA,GACZliC,GAAKf,EAELc,EADAD,EAAOnC,KAAKkH,MAAMitB,OAAOrtB,WACfxE,EAAQ,CACtB,KAAKD,EAAM,EAAGf,EAASa,EAAKb,OAAQe,EAAMf,EAAQe,IAAO,CAErD,GADAD,EAAWD,EAAKE,GAAKpC,MAAMqC,OACvBF,GAAYA,EAASG,QAAQ,SAE1B,CACHD,EAAQ,CACR,OAHAA,GAASxB,SAASsB,EAAU,IAMhCE,GACAtC,KAAKiI,MAAMzG,IAAIxB,KAAKkH,MAAMrB,QAAQ,UAAUvD,MAAMA,IAG1DkjB,aAAc,WAAA,GAIN8C,GACAkc,EACA3xB,CALC7S,MAAK2B,QAAQkmB,cAGdS,EAAatoB,KAAK2B,QAAQ2mB,cAAe,EACzCkc,GAAYlc,EAAa,wBAA0B,+BAAiC1a,GACpFiF,EAAO7S,KACXA,KAAKitB,mBAAqB,GAAIjiB,IAAGy5B,UAAUzkC,KAAKqP,SAC5CO,MAAOtP,MAAMokC,OACbvjC,OAAQqjC,EACRG,KAAM,SAAUhhC,GACZ,MAAOnE,GAAE,wCAAwCksB,KAC7CppB,MAAOqB,EAAOrB,QACdsiC,YAAajhC,EAAO+nB,IAAI,eACxBmZ,aAAclhC,EAAO+nB,IAAI,gBACzBoZ,WAAYnhC,EAAOX,SAAW,KAC9B+hC,WAAYphC,EAAO+nB,IAAI,cACvBsZ,cAAerhC,EAAO+nB,IAAI,mBAC3BhhB,KAAK/G,EAAOpD,KAAKD,MAAMC,KAAK,WAAaoD,EAAOpD,KAAKD,MAAMC,KAAK,WAAaoD,EAAO6G,QAAQy6B,QAAQ,uDAG/GjlC,KAAK6nB,YAAc,GAAI7c,IAAGk6B,YAAYllC,KAAKqP,SACvC2T,UAAWhjB,KAAKitB,mBAChBkY,mBAAoBv5B,GAAM5L,KAAKolC,yBAA0BplC,MACzDqlC,gBAAiB,SAAU58B,GACvB,MAAOjJ,GAAEiJ,EAAEhF,QAAQO,SAAS,KAAOxE,EAAEiJ,EAAE9E,QAAQK,SAAS,IAAMsB,EAA2BJ,EAAsB2N,EAAKrP,SAAUqP,EAAKrP,QAASiF,EAAEvE,YAAauE,EAAEtE,iBAEjK+d,OAAQ,SAAUzZ,GAAV,GACAjF,GAAU0B,EAAsB2N,EAAKrP,SACrCJ,EAASI,EAAQiF,EAAE68B,UACnBC,EAAWjgC,EAA2B9B,EAASqP,EAAKrP,QAASiF,EAAE68B,SAAU78B,EAAE88B,SAC/E1yB,GAAK6R,QAAQ7W,IACT03B,SAAUA,EACVD,SAAUjhC,GAAQjB,EAAQI,GAC1BJ,OAAQA,IAEZyP,EAAK2yB,cAAcD,EAAUniC,EAAuB,WAAfqF,EAAEtB,eAInDi+B,yBAA0B,SAAUlhC,EAAaC,GAC7C,GAAIX,GAAU0B,EAAsBlF,KAAKwD,QACzC,OAAOA,GAAQU,GAAauhC,YAAa,GAASngC,EAA2B9B,EAASxD,KAAKwD,QAASU,EAAaC,OAErHuhC,cAAe,SAAUC,EAAaC,EAAeC,EAAaC,EAASC,EAAkBC,EAAgBliC,EAAQuD,GAAtG,GAKP4+B,GACAvc,EAEAwc,EACAC,EACAC,EACAC,EACAC,EACKjkC,EAZL+4B,EAAM57B,IACNiE,EAASsiC,EAAiB7kC,KAAK,SAAW4kC,EAAQ,GAAGpW,SAAW,KAChE6W,EAAYP,EAAel/B,SAASg/B,EAAQ,GAAGpW,UAC/C8W,EAAiB/iC,EAAOqD,WAGxB2/B,EAAa3iC,EAAS6hC,EAAY,GAAKA,EAAYA,EAAYrkC,OAAS,EAM5E,KAASe,EAAM,EAAGA,EAAMyjC,EAAQxkC,OAAQe,IACpCqnB,EAAeoc,EAAQzjC,GAAK0nB,UAC5BqR,EAAMA,EAAI55B,IAAIglC,EAAezgC,GAAG2jB,IAChCuc,EAAkBJ,EAAY/+B,SAAS2/B,EAAW/W,UAAU5oB,SACxD++B,IAAgBG,GAAkBliC,IAClC4lB,GAAgBrnB,GAEpB4jC,EAAgBp/B,OAAO/C,EAAS2iC,EAAW1c,UAAY1nB,EAAMokC,EAAW1c,UAAY,EAAI1nB,EAAK,EAAGkkC,EAAUz/B,SAAS4iB,GAYvH,IAVImc,IAAgBG,GAAkBliC,EAClCyiC,EAAUz/B,SAASD,OAAOi/B,EAAQ,GAAG/b,UAAY+b,EAAQxkC,OAAQwkC,EAAQxkC,QAEzEilC,EAAUz/B,SAASD,OAAOi/B,EAAQ,GAAG/b,UAAW+b,EAAQxkC,QAE5D4kC,EAAUN,EAAc1kC,KAAK,SAAWulC,EAAW/W,SAAW,KAC9D4W,EAAUJ,EAAQhlC,KAAK,mBAAqBulC,EAAW1c,UAAY,KAC/Duc,EAAQhlC,QAAU85B,EAAI,KAAOkL,EAAQ,IACrClL,EAAIt3B,EAAS,eAAiB,eAAewiC,GAE7Cj/B,GAASy+B,EAAQ,GAAGpW,SAAW,GAAc,GAATroB,EAAY,CAEhD,IADA8+B,KACK9jC,EAAM,EAAGA,EAAMyjC,EAAQxkC,OAAQe,IAC5ByjC,EAAQzjC,GAAKmB,UACb2iC,EAAeA,EAAa3hC,OAAOshC,EAAQzjC,GAAKmB,SAGxD,KAAK2iC,EAAa7kC,OACd,MAGJ,KADA8kC,KACK/jC,EAAM,EAAGA,EAAMsjC,EAAYrkC,OAAQe,IAChCsjC,EAAYtjC,GAAKmB,UACjB4iC,EAAYA,EAAU5hC,OAAOmhC,EAAYtjC,GAAKmB,SAGtD,KAAK4iC,EAAU9kC,SAAWskC,IAAkBG,GAAqBU,EAAW1c,UAAY+b,EAAQ,GAAG/b,UAAY,GAAK+b,EAAQ,GAAG/b,UAAY0c,EAAW1c,UAAY,KAC9Jsc,EAAexiC,EAAkB7D,KAAKwD,QAASijC,EAAYX,EAAQ,GAAIhiC,EAAQ9D,KAAKwD,SACpF4iC,GAAaC,IACRA,GAAgBF,EAAa7kC,QAAUskC,EAAc1kC,KAAK,MAAMI,OAASwkC,EAAQ,GAAGpW,SAAW,GAEhG,MADA1vB,MAAK0mC,YAAYP,EAAcJ,EAAkBC,EAAgBJ,EAAeC,GAChF,CAGR,KAAKO,EAAU9kC,OACX,MAEJtB,MAAK0lC,cAAcU,EAAWR,EAAeC,EAAaM,EAAcJ,EAAkBC,EAAgBliC,EAAQuD,KAG1Hq/B,YAAa,SAAUljC,EAASuiC,EAAkBC,EAAgBJ,EAAeC,GAApE,GAOAxjC,GANLskC,KAEAvL,EAAM57B,IADNqD,EAGEkjC,EAAiB7kC,KAAK,SAAWsC,EAAQ,GAAGksB,SAAW,KADzDkX,EAEIZ,EAAel/B,SAAStD,EAAQ,GAAGksB,SAC3C,KAASrtB,EAAM,EAAGA,EAAMmB,EAAQlC,OAAQe,IAChCmB,EAAQnB,GAAKmB,UACbmjC,EAAQA,EAAMniC,OAAOhB,EAAQnB,GAAKmB,UAEtCqiC,EAAY/+B,SAAStD,EAAQ,GAAGksB,UAAU5oB,SAASD,OAAOxE,EAAK,EAAGukC,EAAM9/B,SAAStD,EAAQnB,GAAKqtB,WAC9F0L,EAAMA,EAAI55B,IAAIqB,EAAI3B,KAAK,mBAAqBsC,EAAQnB,GAAK0nB,UAAY,KAEzEic,GAAel/B,SAAStD,EAAQ,GAAGksB,UAAU5oB,SAASD,OAAOrD,EAAQ,GAAGumB,UAAWvmB,EAAQlC,QAC3FskC,EAAc1kC,KAAK,SAAWsC,EAAQ,GAAGksB,SAAW,KAAKtM,OAAOgY,GAC5DuL,EAAMrlC,QACNtB,KAAK0mC,YAAYC,EAAOZ,EAAkBC,EAAgBJ,EAAeC,IAGjFgB,eAAgB,SAAUJ,EAAYrjC,EAAQU,GAA9B,GASRgjC,GAkBajQ,EA1BbkQ,EAAe3jC,EAAOI,QAAU6D,GAAOjE,IAAW,EAClD4jC,EAAcP,EAAWjjC,QAAU6D,GAAOo/B,IAAe,EACzDQ,EAAe9jC,EAASC,GACxB8jC,EAAa/jC,EAASsjC,GACtBb,EAAgBsB,EAAalnC,KAAKstB,aAAettB,KAAKkH,MACtD6+B,EAAmBkB,EAAejnC,KAAKstB,aAAettB,KAAKkH,MAC3D2+B,EAAcqB,EAAalnC,KAAK2tB,kBAAoB3tB,KAAKwtB,YACzDwY,EAAiBiB,EAAejnC,KAAK2tB,kBAAoB3tB,KAAKwtB,YAE9D2Z,EAAWvB,EAAc1kC,KAAK,KAClC,IAAI6lC,IAAiBC,GAAeD,EAAeI,EAAS7lC,OACxDtB,KAAK0lC,eAAee,GAAab,EAAeC,GAAcziC,GAAS2iC,EAAkBC,EAAgBliC,EAAQijC,GACjHx/B,EAAeq+B,EAAeC,GAC9Bj+B,EAAgBm+B,EAAkBC,OAC/B,CACH,GAAIJ,IAAkBG,EAWlB,IAVAe,EAAYC,EAAeI,EAAS7lC,OACpC6lC,EAAS1/B,KAAK,SAAUpF,GAAV,GAEDT,GADLxB,EAAQJ,KAAKI,KACjB,KAASwB,EAAI,EAAGA,EAAIxB,EAAMkB,OAAQM,IAC1BxB,EAAMwB,GAAGqE,SAAW,GAAK7F,EAAMwB,GAAG8F,WAAWC,UAC7Ck+B,EAAY/+B,SAASzE,GAAKyE,SAASlF,GAAGrB,KAAKgB,SAAWulC,EACtD1mC,EAAMwB,GAAGL,SAAWulC,KAIvBjQ,EAAI,EAAGA,EAAIiQ,EAAWjQ,IAC3BgP,EAAY/+B,SAAS9E,KAAKC,EAAgB,MAAQu5B,KAAQ,SACtDoK,EAAclmC,GAAG,SACjBkmC,EAAcxiB,OAAO,wBAErBwiB,EAAc1kC,KAAK,SAASkiB,OAAO,uBAI/CpjB,MAAK0lC,eAAee,GAAab,EAAeC,GAAcziC,GAAS2iC,EAAkBC,EAAgBliC,EAAQijC,GACjHn/B,EAAgBm+B,EAAkBC,KAG1CR,cAAe,SAAU4B,EAAWhkC,EAAQU,GAA7B,GACPujC,GAkCIjM,EAEA9wB,EAnCJtG,EAASZ,EAAOC,aAChBG,EAAUQ,EAASA,EAAOR,QAAUxD,KAAKwD,QACzCU,EAAcG,GAAQjB,EAAQI,GAC9BijC,EAAajjC,EAAQ4jC,GACrBjkC,IAAasjC,EAAWnjC,OACxBo5B,EAAwBh4B,GAAK1E,KAAKwD,QAAS,SAAUkV,GACrD,MAAOA,GAAKlV,UAAY/D,IACzB6B,OAAS,EACRgmC,EAAyBjiC,EAAiB7B,GAASlC,MACnD4C,KAAgBkjC,IAGhBjkC,IAAaC,EAAOE,QAAoC,GAA1BgkC,IAG7BnkC,GAAYC,EAAOE,QAAUE,EAAQlC,OAASgmC,GAA0B,IAGzExjC,IAAWrE,IACXqE,EAASsjC,EAAYljC,GAErBw4B,GACA18B,KAAK6mC,eAAeJ,EAAYrjC,EAAQU,GAE5CujC,IAAgBjkC,EAAOE,OACvB+jC,EAAcA,GAAelkC,EAC7BC,EAAOE,OAASH,EAChBK,EAAQqD,OAAO/C,EAASsjC,EAAYA,EAAY,EAAG,EAAGhkC,GACtDI,EAAQqD,OAAO3C,EAAckjC,EAAYljC,EAAcA,EAAc,EAAG,GACxElE,KAAK+7B,sBAAsBz3B,EAAYtE,KAAKwD,UAC5CxD,KAAK07B,kBACL17B,KAAKm4B,cACAuE,EAcG18B,KAAKstB,cACL9pB,EAAU6B,EAAiBrF,KAAKwD,SAChCxD,KAAKo8B,kBACG76B,QAAS,EACTnB,SACAS,MAAO,IACP2C,GACRA,EAAU4B,EAAcpF,KAAKwD,SAC7BxD,KAAKo8B,kBACG76B,QAAS,EACTnB,SACAS,MAAO,IACP2C,IAERxD,KAAKo8B,kBACG76B,QAAS,EACTnB,SACAS,MAAO,IACPb,KAAKwD,UA/Bb43B,EAAM57B,EAAEQ,KAAKstB,cAAc9rB,IAAIxB,KAAKkH,OAAOhG,KAAK,MACpDk6B,EAAIr1B,GAAG7B,GAAaJ,EAAS,eAAiB,eAAes3B,EAAIr1B,GAAGqhC,IAChE98B,EAAMtK,KAAKwtB,YAAY1mB,SAAS,GAAGA,SACnC9G,KAAK+lB,oBACLzb,EAAMtK,KAAK2tB,kBAAkB7mB,SAAS,GAAGA,SAAStC,OAAO8F,IAE7DA,EAAIzD,OAAO/C,EAASsjC,EAAYA,EAAY,EAAG,EAAG98B,EAAIpG,IACtDoG,EAAIzD,OAAO3C,EAAckjC,EAAYljC,EAAcA,EAAc,EAAG,GAChElE,KAAK+lB,oBACL/lB,KAAK2tB,kBAAkB7mB,SAAS,GAAGA,SAAWwD,EAAIzD,OAAO,EAAGzB,EAAc5B,GAASlC,QACnFtB,KAAKwtB,YAAY1mB,SAAS,GAAGA,SAAWwD,IAwBhDtK,KAAKg8B,yBACLh8B,KAAKgsB,8BACLhsB,KAAK48B,0BACL58B,KAAK47B,0BACL57B,KAAKsQ,UACA+2B,IAGDlkC,EACAnD,KAAK0kB,QAAQzW,IAAc7K,OAAQA,IAEnCpD,KAAK0kB,QAAQxW,IAAgB9K,OAAQA,QAG7CmkC,WAAY,SAAUnkC,GAAV,GAYJvC,GAXA2C,EAAUxD,KAAKwD,OAEfJ,GADiB,gBAAVA,GACEI,EAAQJ,GAERsB,GAAKlB,EAAS,SAAUkV,GAC7B,MAAOA,GAAK/Y,QAAUyD,IACvB,GAEFA,IAAUA,EAAOuB,SAGlB9D,EAAQuE,EAAc5B,GAASlC,OAAS,EAC5CtB,KAAKwlC,cAAc3kC,EAAOuC,GAAQ,KAEtCokC,aAAc,SAAUpkC,GAAV,GAYNvC,GAXA2C,EAAUxD,KAAKwD,OAEfJ,GADiB,gBAAVA,GACEI,EAAQJ,GAERsB,GAAKlB,EAAS,SAAUkV,GAC7B,MAAOA,GAAK/Y,QAAUyD,IACvB,GAEFA,IAAUA,EAAOuB,SAGlB9D,EAAQuE,EAAc5B,GAASlC,OACnCtB,KAAKwlC,cAAc3kC,EAAOuC,GAAQ,KAEtCqiB,YAAa,WAAA,GAKLriB,GAAQqkC,EAAMC,EAAa9Z,EAAUhd,EAuBhChP,EA3BLw5B,EAAM57B,EAAEQ,KAAKstB,cAAc9rB,IAAIxB,KAAKkH,OAAOhG,KAAK,MAChDsC,EAAUxD,KAAKwD,QACf7B,EAAU3B,KAAK2B,QACfksB,EAAalsB,EAAQksB,WAErB8Z,EAAc/7B,GAAM5L,KAAK4nC,gBAAiB5nC,MAC1C6nC,EAAcj8B,GAAM5L,KAAK8nC,gBAAiB9nC,MAC1C+nC,EAAsB3iC,EAAc5B,GAASlC,OAC7Co7B,EAAwBh4B,GAAK1E,KAAKwD,QAAS,SAAUkV,GACrD,MAAOA,GAAKlV,UAAY/D,IACzB6B,OAAS,CAWZ,IAVIo7B,GACAl5B,EAAUc,EAAYd,GAElB43B,EADAp7B,KAAKstB,aACCntB,EAAUY,EAAcf,KAAKstB,aAAapsB,KAAK,iBAAiBM,IAAIT,EAAcf,KAAKkH,SAEvFnG,EAAcf,KAAKkH,QAG7Bk0B,EAAM57B,EAAEQ,KAAKstB,cAAc9rB,IAAIxB,KAAKkH,OAAOhG,KAAK,MAE/C2sB,EAML,IAHyB,iBAAdA,KACPA,MAEKjsB,EAAI,EAAGA,EAAIw5B,EAAI95B,OAAQM,IAC5BwB,EAASI,EAAQ5B,GACZwB,EAAOzD,QAGZ8nC,EAAOrM,EAAIr1B,GAAGnE,GAAGwI,KAAK,mBAClBq9B,GACAA,EAAKv1B,UAET0b,GAAW,EACPxqB,EAAOwqB,YAAa,GAASC,EAAWD,YAAa,GAASjsB,EAAQisB,YAAa,IACnFA,EAAW3oB,MAAWtD,EAAQisB,UAAYoa,SAAU5kC,EAAOwqB,cAAgBoa,WAE/Ep3B,GAAa,EACTjP,EAAQiP,YAAcxN,EAAOwN,cAAe,GAASid,EAAWjd,cAAe,IAC/EA,EAAa3L,IAASgjC,KAAMjoC,KAAKioC,MAAQ7kC,EAAOwN,WAAYjP,EAAQiP,aAExE82B,GACIpmB,WAAYthB,KAAKshB,WACjB0iB,OAAQ5gC,EAAO4gC,OACfxgC,QAASqqB,EAAWrqB,QACpBoqB,SAAUA,EACVhd,WAAYA,EACZyY,SAAUwE,EAAWxE,SACrB6e,MAAOloC,KACPmoC,cAAe3oC,EAAE+9B,KACjB3qB,KAAM+0B,EACN/kB,KAAMilB,EACNI,KAAMjoC,KAAKioC,KACX7iC,eAAgBs3B,GAAyBt5B,EAAOqiC,YAAa,GAASsC,EAAsB,GAE5FpmC,EAAQ6kB,WACRkhB,EAAYlhB,SAAW7kB,EAAQ6kB,UAEnC4U,EAAIr1B,GAAGnE,GAAGwmC,gBAAgBV,KAGlCE,gBAAiB,SAAUn/B,GACvBzI,KAAK0kB,QAAQ3W,IACTpO,MAAO8I,EAAE9I,MACTqB,UAAWyH,EAAEzH,aAGrB4kB,UAAW,WACP,GAAiBvW,GAAbwD,EAAO7S,KAAegY,EAAWnF,EAAKlR,QAAQqW,QAC9CA,KACA3I,EAAUwD,EAAKxD,QAAQvI,SAAS,oBAC3BuI,EAAQ/N,SACT+N,EAAU7P,EAAE,4CAA4CkkB,SAAS7Q,EAAKxD,UAE1EwD,EAAKsa,gBACmB,gBAAbnV,IAAyBA,YAAoB1X,OAAM0K,GAAGjB,cAC7D8I,EAAK2Y,MAAQxT,EAEbnF,EAAKw1B,aAAah5B,GAEtBwD,EAAK2Y,MAAM7J,KAAK/U,GAAa,SAAUnE,GAC/BoK,EAAK6R,QAAQ/X,IAAQoQ,KAAMtU,EAAE5H,SAC7B4H,EAAEG,qBAKlBy/B,aAAc,SAAUnlC,EAASvB,GAC7B,GAAIkR,GAAO7S,IACX6S,GAAK2Y,MAAQ,GAAIzhB,GAAc7G,EAAS+B,MAAW4N,EAAKlR,QAAQqW,UAAYsJ,WAAYzO,EAAKyO,YAAc3f,KAE/GwrB,cAAe,WACPntB,KAAKwrB,OACLxrB,KAAKwrB,MAAMtZ,WAGnB0E,YAAa,WACT,GAAI/D,GAAO7S,IACX,OAAO6S,GAAKlR,QAAQqW,YAAcnF,EAAKyO,YAAczO,EAAKyO,YAAczO,EAAKyO,WAAW1K,gBAE5FojB,uBAAwB,WAAA,GAChBnnB,GAAO7S,KACPgY,EAAWnF,EAAKlR,QAAQqW,QACxBA,KAAanM,GAAcmM,IAAaA,YAAoBjO,KAAkBiO,EAASswB,iBAAkB,GACzGz1B,EAAKxD,QAAQnO,KAAK,iBAAiB+4B,QAAQpnB,EAAKyO,WAAW1D,kBAAoB,IAAM/K,EAAKyO,WAAWtE,eAoW7G1c,MAAMioC,YACNjoC,MAAMioC,WAAWtjC,OAAOkF,EAAS4B,WAEjCzL,MAAMkoC,WACNloC,MAAMkoC,SAASvjC,OAAOkF,EAAS4B,WAC/B5B,EAAS4B,UAAU08B,SAAW,SAAUvO,GAWpC,QAAShb,KACDwpB,GAAYC,IAAiBlpC,GAC7B6hB,EAAWqL,OAAO,SAAUic,GAC5BtnB,EAAW3Y,IAAI,SAAU,WACrBpE,EAAO2a,QAAQ2pB,KAEnBvnB,EAAWvE,KAAK4rB,IAEhBpkC,EAAO2a,QAAQ2pB,GAGvB,QAASD,KACLE,EAASC,gBAAiBzmC,MAAOwmC,EAASz5B,QAAQ/M,UAAa0mC,WAAYF,EAASnnC,QAAQ8Q,IAAIu2B,aAAc5pB,KAAK,SAAUxP,GAAV,GAC3Gq5B,GAAU3nB,EAAWvE,OACrBsE,EAAaqnB,EAAWpnB,EAAWD,aAAe,EAClD6hB,GACAnmB,KAAMnN,EACNs5B,WAAYD,EACZ/O,SAAU+O,EAAU5nB,EACpBA,WAAYA,EAEhB6Y,GAAS9T,OAAO8c,GAChB2F,EAAIzlB,OAAO8f,EAAKnmB,MACZksB,EAAU5nB,EACVC,EAAWvE,KAAKksB,EAAU,GAE1B/pB,MAELG,KAAK,SAAU8pB,GACd5kC,EAAO6kC,OAAOD,KAxCI,GAKtB5kC,GACA+c,EACAonB,EAEAG,EACAF,EATAG,EAAW9oC,IACf,OAAI8oC,GAASnnC,QAAQ8Q,IAAI42B,WAA+C,QAAlCP,EAASnnC,QAAQ8Q,IAAI42B,UAChDP,EAASQ,uBAAuBpP,IAEvC31B,EAAS,GAAI/E,GAAEyf,SACfqC,EAAawnB,EAASxnB,WACtBonB,EAAWI,EAASnnC,QAAQ8Q,IAAIi2B,SACpC1oC,KAAKupC,iBAAiBrP,GAClB2O,EAAM,GAAIvoC,OAAMkpC,QAAQC,MACxBd,EAAernB,EAAWvE,OAiC1B2rB,GACApnB,EAAWK,KAAK,SAAUinB,GAC1BtnB,EAAWvE,KAAK,IAEhB6rB,IAEGrkC,EAAO4a,YAElBhV,EAAS4B,UAAUw9B,iBAAmB,SAAUG,GAAV,GAQ9BC,GAPAt5B,EAAU7Q,EAAE,uEAChB6Q,GAAQ40B,QAAQjlC,KAAKqP,QAAQu6B,QAAQle,KACjCvkB,SAAU,WACVs4B,IAAK,EACLD,KAAM,KAEVx/B,KAAKqP,QAAQ+T,OAAO/S,GAChBs5B,EAAcnqC,EAAE,wCAA0CkkB,SAASrT,GAASw5B,kBAC5Ep0B,KAAM,QACNq0B,WAAY,GACZC,IAAK,EACL5jC,IAAK,EACLI,MAAO,IACR6D,KAAK,oBACRs/B,EAASxP,SAAS,SAAUzxB,GACxBkhC,EAAYpjC,MAAMkC,EAAEyxB,YACrBzL,OAAO,WACNnuB,MAAM4R,QAAQ7B,GACdA,EAAQtI,YAGhBoC,EAAS4B,UAAUu9B,uBAAyB,SAAUpP,GA8BlD,QAAShb,KACDwpB,GAAYC,IAAiBlpC,GAC7B6hB,EAAW3Y,IAAI,SAAUqhC,GACzB1oB,EAAWvE,KAAK4rB,KAEhBG,EAASx4B,UACT05B,KAGR,QAASA,KACLC,EAAKvmB,SAASkR,SAASC,KACvB,IAAIlzB,GAAUnC,EAAEyF,UAAW6jC,EAASnnC,QAAQ8Q,KACxCy3B,cAAc,EACdhQ,SAAU,SAAUiC,GAChBjC,EAAS9T,QACLrJ,KAAMof,EAAEpf,KACRmsB,WAAY/M,EAAE8M,QACd/O,SAAU,GAAMiC,EAAE8M,QAAU9M,EAAE9a,WAAa,EAC3CA,WAAY8a,EAAE9a,eAI1B/gB,OAAMkpC,QAAQW,QAAQP,EAAOjoC,GAAS8sB,OAAO,WACzCwb,EAAKliC,WACNkZ,KAAK,SAAUrR,GACdrL,EAAO2a,QAAQtP,KAChByP,KAAK,SAAU8pB,GACd5kC,EAAO6kC,OAAOD,KAGtB,QAASiB,KAAT,GACQnB,GAAU3nB,EAAWvE,OACrBsE,EAAaqnB,EAAWpnB,EAAWD,aAAe,CACtDwT,GAAKzR,OAAOinB,EAASnpC,KAAK,OACtB+nC,EAAU5nB,EACVC,EAAWvE,KAAKksB,EAAU,IAE1B3nB,EAAWqL,OAAO,SAAUyd,GAC5BlrB,KApEgC,GA4BpC2V,GACA8T,EA5BAG,EAAW9oC,KACXuE,EAAS,GAAI/E,GAAEyf,SACfqC,EAAawnB,EAASxnB,WACtBonB,EAAWI,EAASnnC,QAAQ8Q,IAAIi2B,SAChC2B,EAAWvB,EAASz5B,QAAQnO,KAAK,kCACjC+oC,EAAOzqC,EAAE,SAASksB,KAClBvkB,SAAU,WACVq4B,UACAC,WAEAmK,EAAQd,EAASz5B,QAAQu6B,QAAQle,KACjC1oB,OAAQ,OACRV,MAAO,SACRohB,SAASumB,EA+DZ,OA9DAL,GAAM1oC,KAAK,mBAAmBwqB,KAC1B1oB,OAAQ,OACRV,MAAO,OACPgoC,SAAU,YAEdV,EAAM1oC,KAAK,gDAAgDwqB,KACvD1oB,OAAQ,OACRV,MAAO,OACPgoC,SAAU,YAEdV,EAAM1oC,KAAK,sDAAsD6G,SACjE6hC,EAAM1oC,KAAK,kCAAkCwqB,KAAMmZ,aAAc,IACjE7kC,KAAKupC,iBAAiBrP,GAClBrF,EAAO+U,EAAM1oC,KAAK,kCAAkCshB,QACpDmmB,EAAernB,EAAWvE,OA0C1B2rB,GACApnB,EAAWK,KAAK,SAAUyoB,GAC1B9oB,EAAWvE,KAAK,IAEhBqtB,IAEG7lC,EAAO4a,YAGtBla,IAAO,EAAM3E,MAAM8J,MACfN,mBAAoBA,EACpBD,cAAeA,IAEnBmB,GAAGu/B,OAAOpgC,GACVa,GAAGu/B,OAAOxgC,IACZ8Y,OAAOviB,MAAMkqC,QACR3nB,OAAOviB,OACE,kBAAVf,SAAwBA,OAAOkrC,IAAMlrC,OAAS,SAAUmrC,EAAIC,EAAIC,IACrEA,GAAMD","file":"kendo.treelist.min.js","sourcesContent":["/*!\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n*/\n(function (f, define) {\n define('kendo.treelist', [\n 'kendo.dom',\n 'kendo.data',\n 'kendo.columnsorter',\n 'kendo.editable',\n 'kendo.window',\n 'kendo.filtermenu',\n 'kendo.selectable',\n 'kendo.resizable',\n 'kendo.treeview.draganddrop',\n 'kendo.pager'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'treelist',\n name: 'TreeList',\n category: 'web',\n description: 'The TreeList widget displays self-referencing data and offers rich support for interacting with data, sorting, filtering, and selection.',\n depends: [\n 'dom',\n 'data',\n 'pager'\n ],\n features: [\n {\n id: 'treelist-sorting',\n name: 'Sorting',\n description: 'Support for column sorting',\n depends: ['columnsorter']\n },\n {\n id: 'treelist-filtering',\n name: 'Filtering',\n description: 'Support for record filtering',\n depends: ['filtermenu']\n },\n {\n id: 'treelist-editing',\n name: 'Editing',\n description: 'Support for record editing',\n depends: [\n 'editable',\n 'window'\n ]\n },\n {\n id: 'treelist-selection',\n name: 'Selection',\n description: 'Support for row selection',\n depends: ['selectable']\n },\n {\n id: 'treelist-column-resize',\n name: 'Column resizing',\n description: 'Support for column resizing',\n depends: ['resizable']\n },\n {\n id: 'treelist-dragging',\n name: 'Drag & Drop',\n description: 'Support for drag & drop of rows',\n depends: ['treeview.draganddrop']\n },\n {\n id: 'treelist-excel-export',\n name: 'Excel export',\n description: 'Export data as Excel spreadsheet',\n depends: ['excel']\n },\n {\n id: 'treelist-pdf-export',\n name: 'PDF export',\n description: 'Export data as PDF',\n depends: [\n 'pdf',\n 'drawing'\n ]\n },\n {\n id: 'treelist-paging',\n name: 'Paging',\n description: 'Support for treelist paging',\n depends: ['pager']\n }\n ]\n };\n (function ($, undefined) {\n var data = kendo.data;\n var kendoDom = kendo.dom;\n var kendoDomElement = kendoDom.element;\n var kendoTextElement = kendoDom.text;\n var kendoHtmlElement = kendoDom.html;\n var outerWidth = kendo._outerWidth;\n var keys = kendo.keys;\n var outerHeight = kendo._outerHeight;\n var ui = kendo.ui;\n var DataBoundWidget = ui.DataBoundWidget;\n var DataSource = data.DataSource;\n var ObservableArray = data.ObservableArray;\n var Query = data.Query;\n var Model = data.Model;\n var browser = kendo.support.browser;\n var kendoTemplate = kendo.template;\n var activeElement = kendo._activeElement;\n var isArray = $.isArray;\n var extend = $.extend;\n var proxy = $.proxy;\n var map = $.map;\n var grep = $.grep;\n var inArray = $.inArray;\n var isPlainObject = $.isPlainObject;\n var push = Array.prototype.push;\n var STRING = 'string';\n var CHANGE = 'change';\n var ITEM_CHANGE = 'itemChange';\n var ERROR = 'error';\n var PROGRESS = 'progress';\n var DOT = '.';\n var NS = '.kendoTreeList';\n var CLICK = 'click';\n var MOUSEDOWN = 'mousedown';\n var BEFORE_EDIT = 'beforeEdit';\n var EDIT = 'edit';\n var PAGE = 'page';\n var PAGE_CHANGE = 'pageChange';\n var SAVE = 'save';\n var SAVE_CHANGES = 'saveChanges';\n var EXPAND = 'expand';\n var COLLAPSE = 'collapse';\n var CELL_CLOSE = 'cellClose';\n var REMOVE = 'remove';\n var DATA_CELL = 'td:not(.k-group-cell):not(.k-hierarchy-cell):visible';\n var DATABINDING = 'dataBinding';\n var DATABOUND = 'dataBound';\n var CANCEL = 'cancel';\n var TABINDEX = 'tabIndex';\n var FILTERMENUINIT = 'filterMenuInit';\n var FILTERMENUOPEN = 'filterMenuOpen';\n var COLUMNHIDE = 'columnHide';\n var COLUMNSHOW = 'columnShow';\n var HEADERCELLS = 'th.k-header';\n var COLUMNREORDER = 'columnReorder';\n var COLUMNRESIZE = 'columnResize';\n var COLUMNMENUINIT = 'columnMenuInit';\n var COLUMNMENUOPEN = 'columnMenuOpen';\n var COLUMNLOCK = 'columnLock';\n var COLUMNUNLOCK = 'columnUnlock';\n var PARENTIDFIELD = 'parentId';\n var DRAGSTART = 'dragstart';\n var DRAG = 'drag';\n var DROP = 'drop';\n var DRAGEND = 'dragend';\n var NAVROW = 'tr:visible';\n var NAVCELL = 'td:visible';\n var NAVHEADER = 'th:visible';\n var ITEMROW = 'tr:not(.k-footer-template):visible';\n var FIRSTNAVITEM = NAVROW + ' > td:first:visible';\n var LASTITEMROW = ITEMROW + ':last';\n var isRtl = false;\n var HEIGHT = 'height';\n var INCELL = 'incell';\n var INLINE = 'inline';\n var POPUP = 'popup';\n var TABLE = 'table';\n var classNames = {\n wrapper: 'k-treelist k-grid k-widget k-display-block',\n header: 'k-header',\n button: 'k-button',\n alt: 'k-alt',\n editCell: 'k-edit-cell',\n editRow: 'k-grid-edit-row',\n dirtyCell: 'k-dirty-cell',\n group: 'k-treelist-group',\n gridToolbar: 'k-grid-toolbar',\n gridHeader: 'k-grid-header',\n gridHeaderWrap: 'k-grid-header-wrap',\n gridContent: 'k-grid-content',\n gridContentWrap: 'k-grid-content',\n gridFilter: 'k-grid-filter',\n footerTemplate: 'k-footer-template',\n focused: 'k-state-focused',\n loading: 'k-i-loading',\n refresh: 'k-i-reload',\n retry: 'k-request-retry',\n selected: 'k-state-selected',\n status: 'k-status',\n link: 'k-link',\n withIcon: 'k-with-icon',\n filterable: 'k-filterable',\n icon: 'k-icon',\n iconFilter: 'k-i-filter',\n iconCollapse: 'k-i-collapse',\n iconExpand: 'k-i-expand',\n iconHidden: 'k-i-none',\n iconPlaceHolder: 'k-icon k-i-none',\n input: 'k-input',\n dropPositions: 'k-i-insert-up k-i-insert-down k-i-plus k-i-insert-middle',\n dropTop: 'k-i-insert-up',\n dropBottom: 'k-i-insert-down',\n dropAdd: 'k-i-plus',\n dropMiddle: 'k-i-insert-middle',\n dropDenied: 'k-i-cancel',\n dragStatus: 'k-drag-status',\n dragClue: 'k-drag-clue',\n dragClueText: 'k-clue-text'\n };\n var defaultCommands = {\n create: {\n imageClass: 'k-i-plus',\n className: 'k-grid-add',\n methodName: 'addRow'\n },\n createchild: {\n imageClass: 'k-i-plus',\n className: 'k-grid-add',\n methodName: 'addRow'\n },\n destroy: {\n imageClass: 'k-i-close',\n className: 'k-grid-delete',\n methodName: 'removeRow'\n },\n edit: {\n imageClass: 'k-i-edit',\n className: 'k-grid-edit',\n methodName: 'editRow'\n },\n update: {\n imageClass: 'k-i-check',\n className: 'k-primary k-grid-update',\n methodName: 'saveRow'\n },\n canceledit: {\n imageClass: 'k-i-cancel',\n className: 'k-grid-cancel',\n methodName: '_cancelEdit'\n },\n cancel: {\n imageClass: 'k-icon k-i-cancel',\n text: 'Cancel changes',\n className: 'k-grid-cancel-changes',\n methodName: 'cancelChanges'\n },\n save: {\n imageClass: 'k-icon k-i-check',\n text: 'Save changes',\n className: 'k-grid-save-changes',\n methodName: 'saveChanges'\n },\n excel: {\n imageClass: 'k-i-file-excel',\n className: 'k-grid-excel',\n methodName: 'saveAsExcel'\n },\n pdf: {\n imageClass: 'k-i-file-pdf',\n className: 'k-grid-pdf',\n methodName: 'saveAsPDF'\n }\n };\n var TreeView = kendo.Class.extend({\n init: function (data, options) {\n var that = this;\n that.data = data || [];\n that.options = extend(that.options, options);\n },\n options: {\n defaultParentId: null,\n idField: 'id',\n parentIdField: PARENTIDFIELD\n },\n childrenMap: function () {\n var that = this;\n var childrenMap = {};\n var dataLength = that.data.length;\n var dataItem;\n var dataItemId;\n var dataItemParentId;\n var idField = that.options.idField;\n var parentIdField = that.options.parentIdField;\n if (that._childrenMap) {\n return that._childrenMap;\n }\n for (var i = 0; i < dataLength; i++) {\n dataItem = this.data[i];\n dataItemId = dataItem[idField];\n dataItemParentId = dataItem[parentIdField];\n childrenMap[dataItemId] = childrenMap[dataItemId] || [];\n childrenMap[dataItemParentId] = childrenMap[dataItemParentId] || [];\n childrenMap[dataItemParentId].push(dataItem);\n }\n that._childrenMap = childrenMap;\n return childrenMap;\n },\n idsMap: function () {\n var that = this;\n var idsMap = {};\n var data = that.data;\n var dataLength = data.length;\n var dataItem;\n var idField = that.options.idField;\n if (that._idMap) {\n return that._idMap;\n }\n for (var i = 0; i < dataLength; i++) {\n dataItem = data[i];\n idsMap[dataItem[idField]] = dataItem;\n }\n that.idsMap = idsMap;\n return idsMap;\n },\n dataMaps: function () {\n var that = this;\n var childrenMap = {};\n var data = that.data;\n var dataLength = data.length;\n var idsMap = {};\n var dataItem;\n var dataItemId;\n var dataItemParentId;\n var idField = that.options.idField;\n var parentIdField = that.options.parentIdField;\n if (that._dataMaps) {\n return that._dataMaps;\n }\n for (var i = 0; i < dataLength; i++) {\n dataItem = data[i];\n dataItemId = dataItem[idField];\n dataItemParentId = dataItem[parentIdField];\n idsMap[dataItemId] = dataItem;\n childrenMap[dataItemId] = childrenMap[dataItemId] || [];\n childrenMap[dataItemParentId] = childrenMap[dataItemParentId] || [];\n childrenMap[dataItemParentId].push(dataItem);\n }\n that._dataMaps = {\n children: childrenMap,\n ids: idsMap\n };\n return that._dataMaps;\n },\n rootNodes: function () {\n var that = this;\n var data = that.data;\n var defaultParentId = that.options.defaultParentId;\n var dataLength = data.length;\n var rootNodes = [];\n var dataItem;\n var parentIdField = that.options.parentIdField;\n for (var i = 0; i < dataLength; i++) {\n dataItem = data[i];\n if (dataItem[parentIdField] === defaultParentId) {\n rootNodes.push(dataItem);\n }\n }\n return rootNodes;\n },\n removeCollapsedSubtreesFromRootNodes: function (options) {\n options = options || {};\n var that = this;\n var rootNodes = that.rootNodes();\n var result = [];\n var prunedTree;\n that._childrenMap = options.childrenMap = options.childrenMap || that.childrenMap();\n options.maxDepth = options.maxDepth || Infinity;\n for (var i = 0; i < rootNodes.length; i++) {\n prunedTree = that.removeCollapsedSubtrees(rootNodes[i], options);\n result = result.concat(prunedTree);\n }\n return result;\n },\n removeCollapsedSubtrees: function (rootNode, options) {\n options = options || {};\n var that = this;\n var result = [];\n var childIdx;\n var prunedTree;\n var childrenMap = options.childrenMap || {};\n var maxDepth = options.maxDepth || Infinity;\n var idField = that.options.idField;\n var children = childrenMap[rootNode[idField]] || [];\n var expanded = isUndefined(rootNode.expanded) ? options.expanded : rootNode.expanded;\n result.push(rootNode);\n if (children && expanded) {\n for (childIdx = 0; childIdx < children.length; childIdx++) {\n if (result.length >= maxDepth) {\n break;\n }\n prunedTree = that.removeCollapsedSubtrees(children[childIdx], options);\n result = result.concat(prunedTree);\n }\n }\n return result;\n }\n });\n var TreeQuery = function (data) {\n this.data = data || [];\n };\n TreeQuery.prototype = new Query();\n TreeQuery.prototype.constructor = TreeQuery;\n TreeQuery.process = function (data, options, inPlace) {\n options = options || {};\n var query = new TreeQuery(data);\n var group = options.group;\n var sort = Query.normalizeGroup(group || []).concat(Query.normalizeSort(options.sort || []));\n var filterCallback = options.filterCallback;\n var filter = options.filter;\n var skip = options.skip;\n var take = options.take;\n var total;\n var childrenMap;\n var filteredChildrenMap;\n var view;\n var prunedData;\n if (sort && inPlace) {\n query = query.sort(sort, undefined, undefined, inPlace);\n }\n if (filter) {\n query = query.filter(filter);\n if (filterCallback) {\n query = filterCallback(query);\n }\n total = query.toArray().length;\n }\n if (sort && !inPlace) {\n query = query.sort(sort);\n if (group) {\n data = query.toArray();\n }\n }\n if (options.processFromRootNodes) {\n view = new TreeView(query.toArray(), options);\n if (filter) {\n filteredChildrenMap = view.childrenMap();\n }\n prunedData = view.removeCollapsedSubtreesFromRootNodes({\n childrenMap: filter || sort && sort.length ? undefined : options.childrenMap,\n expanded: options.expanded,\n maxDepth: skip + take || Infinity\n });\n childrenMap = view.childrenMap();\n query = new TreeQuery(prunedData);\n }\n if (skip !== undefined && take !== undefined) {\n query = query.range(skip, take);\n }\n if (group) {\n query = query.group(group, data);\n }\n return {\n total: total,\n data: query.toArray(),\n childrenMap: childrenMap,\n filteredChildrenMap: filteredChildrenMap\n };\n };\n var TreeListModel = Model.define({\n id: 'id',\n parentId: PARENTIDFIELD,\n fields: {\n id: { type: 'number' },\n parentId: {\n type: 'number',\n nullable: true\n }\n },\n init: function (value) {\n Model.fn.init.call(this, value);\n this._loaded = false;\n if (!this.parentIdField) {\n this.parentIdField = PARENTIDFIELD;\n }\n this.parentId = this.get(this.parentIdField);\n },\n accept: function (data) {\n Model.fn.accept.call(this, data);\n this.parentId = this.get(this.parentIdField);\n },\n set: function (field, value, initiator) {\n if (field == PARENTIDFIELD && this.parentIdField != PARENTIDFIELD) {\n this[this.parentIdField] = value;\n }\n Model.fn.set.call(this, field, value, initiator);\n if (field == this.parentIdField) {\n this.parentId = this.get(this.parentIdField);\n }\n },\n loaded: function (value) {\n if (value !== undefined) {\n this._loaded = value;\n } else {\n return this._loaded;\n }\n },\n shouldSerialize: function (field) {\n return Model.fn.shouldSerialize.call(this, field) && field !== '_loaded' && field != '_error' && field != '_edit' && !(this.parentIdField !== 'parentId' && field === 'parentId');\n }\n });\n TreeListModel.parentIdField = PARENTIDFIELD;\n TreeListModel.define = function (base, options) {\n if (options === undefined) {\n options = base;\n base = TreeListModel;\n }\n var parentId = options.parentId || PARENTIDFIELD;\n options.parentIdField = parentId;\n var model = Model.define(base, options);\n if (parentId) {\n model.parentIdField = parentId;\n }\n return model;\n };\n function is(field) {\n return function (object) {\n return object[field];\n };\n }\n function not(func) {\n return function (object) {\n return !func(object);\n };\n }\n var TreeListDataSource = DataSource.extend({\n init: function (options) {\n options = options || {};\n var that = this;\n that._dataMaps = that._getDataMaps();\n options.schema = extend(true, {}, {\n modelBase: TreeListModel,\n model: TreeListModel\n }, options.schema);\n DataSource.fn.init.call(this, options);\n },\n _addRange: function () {\n },\n _createNewModel: function (data) {\n var that = this;\n var model = {};\n var fromModel = data instanceof Model;\n var parentIdField = this._modelParentIdField();\n if (fromModel) {\n model = data;\n }\n model = DataSource.fn._createNewModel.call(this, model);\n if (!fromModel) {\n if (data.parentId) {\n data[model.parentIdField] = data.parentId;\n } else if (that._isPageable() && data[parentIdField]) {\n data[model.parentIdField] = data[parentIdField];\n }\n model.accept(data);\n }\n return model;\n },\n _shouldWrap: function () {\n return true;\n },\n _push: function (result, operation) {\n var data = DataSource.fn._readData.call(this, result);\n if (!data) {\n data = result;\n }\n this[operation](data);\n },\n _getData: function () {\n return this._data || [];\n },\n _readData: function (newData) {\n var that = this;\n var data = that._isPageable() ? that._getData().toJSON() : that.data();\n newData = DataSource.fn._readData.call(this, newData);\n this._replaceData((data.toJSON ? data.toJSON() : data).concat(newData), data);\n if (newData instanceof ObservableArray) {\n return newData;\n }\n return data;\n },\n _replaceData: function (source, target) {\n var sourceLength = source.length;\n for (var i = 0; i < sourceLength; i++) {\n target[i] = source[i];\n }\n target.length = sourceLength;\n },\n _readAggregates: function (data) {\n var result = extend(this._aggregateResult, this.reader.aggregates(data));\n if ('' in result) {\n result[this._defaultParentId()] = result[''];\n delete result[''];\n }\n return result;\n },\n read: function (data) {\n var that = this;\n if (that._isPageable()) {\n that._dataMaps = {};\n }\n return DataSource.fn.read.call(that, data);\n },\n remove: function (root) {\n this._removeChildData(root);\n this._removeFromDataMaps(root);\n DataSource.fn.remove.call(this, root);\n },\n _removeChildData: function (model) {\n var that = this;\n var pageable = that._isPageable();\n var data = pageable ? this._getData() : this.data();\n var childrenMap = pageable ? that._getChildrenMap() || that.childrenMap(data) : that._childrenMap(data);\n var items = this._subtree(childrenMap, model.id);\n var removedItems = this._removeItems(items, false);\n that._removeFromDataMaps(removedItems);\n },\n insert: function (index, model) {\n var that = this;\n var newModel = that._createNewModel(model);\n that._insertInDataMaps(newModel);\n return DataSource.fn.insert.call(that, index, newModel);\n },\n _filterCallback: function (query) {\n var that = this;\n var i, item;\n var map = {};\n var result = [];\n var data = query.toArray();\n var idField = that._modelIdField();\n var parentIdField = that._modelParentIdField();\n var pageable = that._isPageable();\n var parentSubtree = [];\n var parent;\n for (i = 0; i < data.length; i++) {\n item = data[i];\n if (pageable) {\n parentSubtree = [];\n if (!map[item[idField]]) {\n map[item[idField]] = true;\n parentSubtree.push(item);\n }\n parent = that._parentNode(item);\n while (parent) {\n if (!map[parent[idField]]) {\n map[parent[idField]] = true;\n parentSubtree.unshift(parent);\n parent = that._parentNode(parent);\n } else {\n break;\n }\n }\n if (parentSubtree.length) {\n result = result.concat(parentSubtree);\n }\n } else {\n while (item) {\n if (!map[item[idField]]) {\n map[item[idField]] = true;\n result.push(item);\n }\n if (!map[item[parentIdField]]) {\n map[item[parentIdField]] = true;\n item = this.parentNode(item);\n if (item) {\n result.push(item);\n }\n } else {\n break;\n }\n }\n }\n }\n return new Query(result);\n },\n _subtree: function (map, id) {\n var that = this;\n var result = map[id] || [];\n var defaultParentId = that._defaultParentId();\n var idField = that._modelIdField();\n for (var i = 0, len = result.length; i < len; i++) {\n if (result[i][idField] !== defaultParentId) {\n result = result.concat(that._subtree(map, result[i][idField]));\n }\n }\n return result;\n },\n _childrenMap: function (data) {\n var map = {};\n var i, item, id, parentId;\n data = this._observeView(data);\n for (i = 0; i < data.length; i++) {\n item = data[i];\n id = item.id;\n parentId = item.parentId;\n map[id] = map[id] || [];\n map[parentId] = map[parentId] || [];\n map[parentId].push(item);\n }\n return map;\n },\n childrenMap: function (data) {\n var view = this._createTreeView(data);\n var map = view.childrenMap();\n return map;\n },\n _getChildrenMap: function () {\n var that = this;\n var dataMaps = that._getDataMaps();\n return dataMaps.children;\n },\n _initIdsMap: function (data) {\n var that = this;\n var dataMaps = that._getDataMaps();\n if (isUndefined(dataMaps.ids)) {\n dataMaps.ids = that._idsMap(data);\n }\n return dataMaps.ids;\n },\n _idsMap: function (data) {\n var view = this._createTreeView(data);\n var map = view.idsMap();\n return map;\n },\n _getIdsMap: function () {\n var that = this;\n var dataMaps = that._getDataMaps();\n return dataMaps.ids || {};\n },\n _getFilteredChildrenMap: function () {\n var that = this;\n var dataMaps = that._getDataMaps();\n return dataMaps.filteredChildren;\n },\n _setFilteredChildrenMap: function (map) {\n var that = this;\n var dataMaps = that._getDataMaps();\n dataMaps.filteredChildren = map;\n },\n _initDataMaps: function (data) {\n var that = this;\n var view = that._createTreeView(data);\n that._dataMaps = view.dataMaps();\n return that._dataMaps;\n },\n _initChildrenMapForParent: function (parent) {\n var that = this;\n var data = that._getData();\n var childrenMap = that._getChildrenMap();\n var idField = that._modelIdField();\n var parentIdField = that._modelParentIdField();\n var parentId = parent[idField];\n if (childrenMap) {\n childrenMap[parentId] = [];\n for (var i = 0; i < data.length; i++) {\n if (data[i][parentIdField] === parentId) {\n childrenMap[parentId].push(data[i]);\n }\n }\n }\n },\n _getDataMaps: function () {\n var that = this;\n that._dataMaps = that._dataMaps || {};\n return that._dataMaps;\n },\n _createTreeView: function (data, options) {\n var view = new TreeView(data, extend(options, this._defaultTreeModelOptions()));\n return view;\n },\n _defaultTreeModelOptions: function () {\n var that = this;\n var modelOptions = that._modelOptions();\n return {\n defaultParentId: that._defaultParentId(),\n idField: that._modelIdField(),\n parentIdField: that._modelParentIdField(),\n expanded: modelOptions.expanded\n };\n },\n _defaultDataItemType: function () {\n return this.reader.model || kendo.data.ObservableObject;\n },\n _calculateAggregates: function (data, options) {\n options = options || {};\n var that = this;\n var result = {};\n var item, subtree, i;\n var filter = options.filter;\n var skip = options.skip;\n var take = options.take;\n var maxDepth = !isUndefined(skip) && !isUndefined(take) ? skip + take : Infinity;\n var pageable = that._isPageable();\n var filteredChildrenMap = options.filteredChildrenMap;\n var childrenMap = options.childrenMap;\n var pageableChildrenMap;\n if (pageable) {\n if (isUndefined(options.aggregate)) {\n return result;\n }\n if (filteredChildrenMap) {\n pageableChildrenMap = filteredChildrenMap;\n } else if (childrenMap) {\n pageableChildrenMap = childrenMap;\n } else {\n pageableChildrenMap = that.childrenMap(that._getData());\n }\n }\n if (!pageable && filter) {\n data = Query.process(data, {\n filter: filter,\n filterCallback: proxy(this._filterCallback, this)\n }).data;\n }\n var map = pageable ? pageableChildrenMap : that._childrenMap(data);\n result[this._defaultParentId()] = new Query(this._subtree(map, this._defaultParentId())).aggregate(options.aggregate);\n for (i = 0; i < data.length; i++) {\n if (i >= maxDepth) {\n break;\n }\n item = data[i];\n subtree = this._subtree(map, item.id);\n result[item.id] = new Query(subtree).aggregate(options.aggregate);\n }\n return result;\n },\n _queryProcess: function (data, options) {\n var that = this;\n var result = {};\n options = options || {};\n options.filterCallback = proxy(this._filterCallback, this);\n if (that._isPageable()) {\n return that._processPageableQuery(data, options);\n } else {\n var defaultParentId = this._defaultParentId();\n result = Query.process(data, options);\n var map = this._childrenMap(result.data);\n var hasLoadedChildren, i, item, children;\n data = map[defaultParentId] || [];\n for (i = 0; i < data.length; i++) {\n item = data[i];\n if (item.id === defaultParentId) {\n continue;\n }\n children = map[item.id];\n hasLoadedChildren = !!(children && children.length);\n if (!item.loaded()) {\n item.loaded(hasLoadedChildren || !item.hasChildren);\n }\n if (item.loaded() || item.hasChildren !== true) {\n item.hasChildren = hasLoadedChildren;\n }\n if (hasLoadedChildren) {\n data = data.slice(0, i + 1).concat(children, data.slice(i + 1));\n }\n }\n result.data = data;\n }\n return result;\n },\n _processPageableQuery: function (data, options) {\n var that = this;\n var dataMaps = that._getDataMaps();\n var result;\n var filteredChildrenMap;\n if (that._getData() !== data || !dataMaps.children || !dataMaps.ids) {\n dataMaps = that._initDataMaps(that._getData());\n }\n options.childrenMap = dataMaps.children || {};\n options.idsMap = dataMaps.ids || {};\n result = that._processTreeQuery(data, options);\n that._replaceWithObservedData(result.data, data);\n that._processDataItemsState(result.data, result.childrenMap);\n that._replaceItemsInDataMaps(result.data);\n result.dataToAggregate = that._dataToAggregate(result.data, options);\n if (options.filter) {\n filteredChildrenMap = result.filteredChildrenMap;\n that._replaceInMapWithObservedData(filteredChildrenMap, data);\n that._setFilteredChildrenMap(filteredChildrenMap);\n options.filteredChildrenMap = filteredChildrenMap;\n }\n return result;\n },\n _dataToAggregate: function (data) {\n var that = this;\n var firstDataItem = data[0] || {};\n var firstItemParents = that._parentNodes(firstDataItem);\n var dataToAggregate = firstItemParents.concat(data);\n return dataToAggregate;\n },\n _replaceItemsInDataMaps: function (observableArray) {\n var that = this;\n var view = isArray(observableArray) ? observableArray : [observableArray];\n var itemType = that._defaultDataItemType();\n var defaultParentId = that._defaultParentId();\n var idField = that._modelIdField();\n var parentIdField = that._modelParentIdField();\n var dataMaps = that._getDataMaps();\n var item;\n var parents;\n var directParent;\n for (var viewIndex = 0; viewIndex < view.length; viewIndex++) {\n item = view[viewIndex];\n if (!(item instanceof itemType)) {\n continue;\n }\n that._insertInIdsMap(item);\n parents = that._parentNodes(item);\n directParent = parents && parents.length ? parents[parents.length - 1] : undefined;\n if (item[parentIdField] === defaultParentId) {\n that._replaceInMap(dataMaps.children, defaultParentId, item, itemType);\n } else if (directParent) {\n that._replaceInMap(dataMaps.children, directParent[idField], item, itemType);\n }\n }\n },\n _replaceInMap: function (map, id, replacement, itemType) {\n var idField = this._modelIdField();\n map[id] = map[id] || [];\n itemType = itemType || this._defaultDataItemType();\n var itemInArray = map[id].filter(function (element) {\n return replacement[idField] === element[idField];\n })[0];\n var itemIndex = itemInArray ? map[id].indexOf(itemInArray) : -1;\n if (itemIndex !== -1 && !(itemInArray instanceof itemType)) {\n map[id][itemIndex] = replacement;\n }\n },\n _replaceWithObservedData: function (dataToReplace, replacementArray) {\n var that = this;\n var idsMap = that._getDataMaps().ids || {};\n var idField = that._modelIdField();\n var itemType = that._defaultDataItemType();\n var itemToReplace;\n var itemToReplaceId;\n var dataItem;\n var dataItemIndex;\n var observableItem;\n for (var i = 0; i < dataToReplace.length; i++) {\n itemToReplace = dataToReplace[i];\n itemToReplaceId = itemToReplace[idField];\n if (!(itemToReplace instanceof itemType)) {\n if (!(idsMap[itemToReplaceId] instanceof itemType)) {\n dataItem = that._getById(itemToReplaceId);\n dataItemIndex = replacementArray.indexOf(dataItem);\n if (dataItem && dataItemIndex !== -1) {\n observableItem = replacementArray.at(dataItemIndex);\n dataToReplace[i] = observableItem;\n }\n } else {\n dataToReplace[i] = idsMap[itemToReplaceId];\n }\n }\n }\n },\n _replaceInMapWithObservedData: function (map, replacementArray) {\n var that = this;\n for (var key in map) {\n that._replaceWithObservedData(map[key], replacementArray);\n }\n },\n _insertInDataMaps: function (item) {\n var that = this;\n if (that._isPageable()) {\n that._insertInIdsMap(item);\n that._insertInChildrenMap(item);\n }\n },\n _insertInIdsMap: function (item) {\n var that = this;\n var idsMap = that._getIdsMap();\n var idField = that._modelIdField();\n if (!isUndefined(item[idField])) {\n idsMap[item[idField]] = item;\n }\n },\n _insertInChildrenMap: function (item, index) {\n var that = this;\n var childrenMap = that._getChildrenMap() || {};\n var idField = that._modelIdField();\n var parentIdField = that._modelParentIdField();\n var itemId = item[idField];\n var parentId = item[parentIdField];\n index = index || 0;\n childrenMap[itemId] = childrenMap[itemId] || [];\n childrenMap[parentId] = childrenMap[parentId] || [];\n childrenMap[parentId].splice(index, 0, item);\n },\n _removeFromDataMaps: function (items) {\n var that = this;\n items = isArray(items) ? items : [items];\n if (that._isPageable()) {\n for (var i = 0; i < items.length; i++) {\n that._removeFromIdsMap(items[i]);\n that._removeFromChildrenMap(items[i]);\n }\n }\n },\n _removeFromIdsMap: function (item) {\n var that = this;\n var idsMap = that._getIdsMap();\n var idField = that._modelIdField();\n if (!isUndefined(item[idField])) {\n idsMap[item[idField]] = undefined;\n }\n },\n _removeFromChildrenMap: function (item) {\n var that = this;\n var childrenMap = that._getChildrenMap() || {};\n var parentIdField = that._modelParentIdField();\n var parentId = item[parentIdField];\n childrenMap[parentId] = childrenMap[parentId] || [];\n var itemIndex = that._indexInChildrenMap(item);\n if (itemIndex !== -1) {\n childrenMap[parentId].splice(itemIndex, 1);\n }\n },\n _indexInChildrenMap: function (item) {\n var that = this;\n return that._itemIndexInMap(item, that._getChildrenMap());\n },\n _itemIndexInMap: function (item, dataMap) {\n var that = this;\n var map = dataMap || {};\n var parentIdField = that._modelParentIdField();\n var parentId = item[parentIdField];\n map[parentId] = map[parentId] || [];\n var itemInArray = map[parentId].filter(function (element) {\n return item.uid === element.uid;\n })[0];\n var itemIndex = itemInArray ? map[parentId].indexOf(itemInArray) : -1;\n return itemIndex;\n },\n _getById: function (id) {\n var that = this;\n var idField = that._modelIdField();\n var data = that._getData();\n for (var i = 0; i < data.length; i++) {\n if (data[i][idField] === id) {\n return data[i];\n }\n }\n },\n _isLastItemInView: function (dataItem) {\n var view = this.view();\n return view.length && view[view.length - 1] === dataItem;\n },\n _defaultPageableQueryOptions: function () {\n var that = this;\n var dataMaps = that._getDataMaps();\n var options = {\n skip: that.skip(),\n take: that.take(),\n page: that.page(),\n pageSize: that.pageSize(),\n sort: that.sort(),\n filter: that.filter(),\n group: that.group(),\n aggregate: that.aggregate(),\n filterCallback: proxy(that._filterCallback, that),\n childrenMap: dataMaps.children,\n idsMap: dataMaps.ids\n };\n return options;\n },\n _isPageable: function () {\n var pageSize = this.pageSize();\n return !isUndefined(pageSize) && pageSize > 0;\n },\n _updateTotalForAction: function (action, items) {\n var that = this;\n DataSource.fn._updateTotalForAction.call(that, action, items);\n if (that._isPageable()) {\n that._updateCollapsedTotalForAction(action, items);\n }\n },\n _updateCollapsedTotalForAction: function (action, items) {\n var that = this;\n var total = parseInt(that._collapsedTotal, 10);\n if (!isNumber(that._collapsedTotal)) {\n that._calculateCollapsedTotal();\n return;\n }\n if (action === 'add') {\n total += items.length;\n } else if (action === 'remove') {\n total -= items.length;\n } else if (action !== 'itemchange' && action !== 'sync' && !that.options.serverPaging) {\n total = that._calculateCollapsedTotal();\n } else if (action === 'sync') {\n total = that._calculateCollapsedTotal();\n }\n that._collapsedTotal = total;\n },\n _setFilterTotal: function (filterTotal, setDefaultValue) {\n var that = this;\n DataSource.fn._setFilterTotal.call(that, filterTotal, setDefaultValue);\n that._setFilterCollapsedTotal(filterTotal);\n },\n _setFilterCollapsedTotal: function (filterTotal) {\n var that = this;\n if (!that.options.serverFiltering) {\n if (filterTotal !== undefined) {\n that._collapsedTotal = filterTotal;\n } else {\n if (that._getFilteredChildrenMap()) {\n that._calculateCollapsedTotal();\n }\n that._setFilteredChildrenMap(undefined);\n }\n }\n },\n collapsedTotal: function () {\n var that = this;\n if (!isUndefined(that._collapsedTotal)) {\n return that._collapsedTotal;\n }\n return that._calculateCollapsedTotal();\n },\n _calculateCollapsedTotal: function () {\n var that = this;\n var data = that._dataWithoutCollapsedSubtrees();\n if (data.length) {\n that._collapsedTotal = data.length;\n }\n return that._collapsedTotal;\n },\n _dataWithoutCollapsedSubtrees: function () {\n return this._removeCollapsedSubtrees(this._getData());\n },\n _removeCollapsedSubtrees: function (data) {\n var that = this;\n var view = that._createTreeView(data);\n var result = view.removeCollapsedSubtreesFromRootNodes({\n expanded: that._modelOptions().expanded,\n childrenMap: that._getChildrenMap()\n });\n return result;\n },\n _processTreeQuery: function (data, options) {\n var result = TreeQuery.process(data, extend(options, this._defaultTreeModelOptions(), { processFromRootNodes: true }));\n return result;\n },\n _processDataItemsState: function (data, childrenMap) {\n var dataLength = data.length;\n var i;\n for (i = 0; i < dataLength; i++) {\n this._processDataItemState(data[i], childrenMap);\n }\n },\n _processDataItemState: function (dataItem, childrenMap) {\n var defaultParentId = this._defaultParentId();\n if (dataItem.id === defaultParentId) {\n return;\n }\n var children = childrenMap[dataItem.id] || [];\n var hasLoadedChildren = !!(children && children.length);\n if (!dataItem.loaded) {\n return;\n }\n if (!dataItem.loaded()) {\n dataItem.loaded(hasLoadedChildren || !dataItem.hasChildren);\n }\n if (dataItem.loaded() || dataItem.hasChildren !== true) {\n dataItem.hasChildren = hasLoadedChildren;\n }\n },\n _queueRequest: function (options, callback) {\n callback.call(this);\n },\n _modelLoaded: function (id) {\n var model = this.get(id);\n model.loaded(true);\n model.hasChildren = this.childNodes(model).length > 0;\n },\n _modelError: function (id, e) {\n this.get(id)._error = e;\n },\n success: function (data, requestParams) {\n if (!requestParams || typeof requestParams.id == 'undefined') {\n this._data = this._observe([]);\n }\n DataSource.fn.success.call(this, data, requestParams);\n this._total = this._data.length;\n },\n load: function (model) {\n var method = '_query';\n var remote = this.options.serverSorting || this.options.serverPaging || this.options.serverFiltering || this.options.serverGrouping || this.options.serverAggregates;\n var defaultPromise = $.Deferred().resolve().promise();\n if (model.loaded()) {\n if (remote) {\n return defaultPromise;\n }\n } else if (model.hasChildren) {\n method = 'read';\n this._removeChildData(model);\n }\n return this[method]({ id: model.id }).done(proxy(this._modelLoaded, this, model.id)).fail(proxy(this._modelError, this, model.id));\n },\n contains: function (root, child) {\n var that = this;\n var idField = that._modelIdField();\n var parentIdField = that._modelParentIdField();\n var rootId = root[idField];\n var pageable = that._isPageable();\n while (child) {\n if (child[parentIdField] === rootId) {\n return true;\n }\n child = pageable ? that._parentNode(child) : that.parentNode(child);\n }\n return false;\n },\n _byParentId: function (id, defaultId) {\n var result = [];\n var view = this.view();\n var current;\n if (id === defaultId) {\n return [];\n }\n for (var i = 0; i < view.length; i++) {\n current = view.at(i);\n if (current.parentId == id) {\n result.push(current);\n }\n }\n return result;\n },\n _defaultParentId: function () {\n return this.reader.model.fn.defaults[this.reader.model.parentIdField];\n },\n _modelOptions: function () {\n var modelOptions = (this.options.schema || {}).model || {};\n return modelOptions;\n },\n _modelIdField: function () {\n var modelOptions = this._modelOptions();\n return modelOptions.id || 'id';\n },\n _modelParentIdField: function () {\n var modelOptions = this._modelOptions();\n return modelOptions.parentId || PARENTIDFIELD;\n },\n childNodes: function (model) {\n return this._byParentId(model.id, this._defaultParentId());\n },\n rootNodes: function () {\n return this._byParentId(this._defaultParentId());\n },\n _rootNode: function (child) {\n return this._parentNodes(child)[0];\n },\n _pageableRootNodes: function (options) {\n options = options || {};\n var that = this;\n var defaultParentId = that._defaultParentId();\n var parentIdField = that._modelParentIdField();\n var result = [];\n var nodesWithoutParentInView = that._nodesWithoutParentInView(options);\n var node;\n var root;\n for (var i = 0; i < nodesWithoutParentInView.length; i++) {\n node = nodesWithoutParentInView[i];\n if (node[parentIdField] === defaultParentId) {\n result.push(node);\n } else {\n root = that._rootNode(node);\n if (root && result.indexOf(root) === -1) {\n result.push(root);\n }\n }\n }\n return result;\n },\n parentNode: function (model) {\n return this.get(model.parentId);\n },\n _parentNode: function (child) {\n var that = this;\n var parentIdField = that._modelParentIdField();\n var idsMap = that._initIdsMap(that._getData());\n var parentId = child[parentIdField];\n var parent = idsMap[parentId] || that._getById(parentId);\n return parent;\n },\n _parentNodes: function (child) {\n var that = this;\n var parent = that._parentNode(child);\n var parents = [];\n while (parent) {\n parents.unshift(parent);\n parent = that._parentNode(parent);\n }\n return parents;\n },\n _parentNodesNotInView: function () {\n var that = this;\n var view = that.view();\n var result = [];\n var defaultParentId = that._defaultParentId();\n var idField = that._modelIdField();\n var parentIdField = that._modelParentIdField();\n var parentInView;\n var parents = [];\n var directParent;\n var dataItem;\n var dataItemId;\n var dataItemParentId;\n for (var i = 0; i < view.length; i++) {\n dataItem = view[i];\n dataItemId = dataItem[idField];\n dataItemParentId = dataItem[parentIdField];\n parentInView = that._parentInView(dataItemParentId);\n if (!parentInView && dataItemParentId !== defaultParentId) {\n parents = that._parentNodes(dataItem);\n directParent = parents && parents.length ? parents[parents.length - 1] : that._getById(dataItemParentId);\n if (directParent && result.indexOf(directParent) === -1) {\n result.push(directParent);\n }\n }\n }\n return result;\n },\n _nodesWithoutParentInView: function (options) {\n options = options || {};\n var that = this;\n var view = that.view();\n var childrenMap = options.childrenMap || that.childrenMap(that._getData());\n var idField = that._modelIdField();\n var parentIdField = that._modelParentIdField();\n var dataItem;\n var parentInView;\n var children = [];\n var result = [];\n for (var i = 0; i < view.length; i++) {\n dataItem = view[i];\n children = childrenMap[dataItem[idField]];\n parentInView = that._parentInView(dataItem[parentIdField]);\n if (!parentInView) {\n result.push(dataItem);\n }\n }\n return result;\n },\n _parentInView: function (parentId) {\n var view = this.view();\n for (var i = 0; i < view.length; i++) {\n if (view[i].id === parentId) {\n return view[i];\n }\n }\n },\n level: function (model) {\n var result = -1;\n if (!(model instanceof TreeListModel)) {\n model = this.get(model);\n }\n do {\n model = this.parentNode(model);\n result++;\n } while (model);\n return result;\n },\n _pageableModelLevel: function (model) {\n var that = this;\n if (!model || !that._isPageable()) {\n return 0;\n }\n var parents = that._parentNodes(model);\n return parents.length;\n },\n filter: function (value) {\n var baseFilter = DataSource.fn.filter;\n if (value === undefined) {\n return baseFilter.call(this, value);\n }\n baseFilter.call(this, value);\n },\n _pageableQueryOptions: function (options) {\n var dataMaps = this._getDataMaps();\n options.childrenMap = dataMaps.children;\n options.idsMap = dataMaps.ids;\n return options;\n },\n _flatData: function (data, skip) {\n skip = this._isPageable() ? true : skip;\n return DataSource.fn._flatData.call(this, data, skip);\n },\n data: function (data) {\n var that = this;\n var result = DataSource.fn.data.call(that, data);\n if (that._isPageable()) {\n that._initDataMaps(that._getData());\n that._calculateCollapsedTotal();\n }\n return result;\n },\n cancelChanges: function (model) {\n var that = this;\n DataSource.fn.cancelChanges.call(that, model);\n that._restorePageSizeAfterAddChild();\n },\n _modelCanceled: function (model) {\n var that = this;\n if (that._isPageable()) {\n that._removeFromDataMaps(model);\n }\n },\n _changesCanceled: function () {\n var that = this;\n if (that._isPageable()) {\n that._initDataMaps(that._getData());\n }\n },\n _setAddChildPageSize: function () {\n var that = this;\n var queryOptions = {};\n if (that._isPageable()) {\n that._addChildPageSize = that.pageSize() + 1;\n queryOptions = that._defaultPageableQueryOptions();\n queryOptions.take = that._addChildPageSize;\n queryOptions.pageSize = that._addChildPageSize;\n that._query(queryOptions);\n }\n },\n _restorePageSizeAfterAddChild: function () {\n var that = this;\n var queryOptions = {};\n if (that._isPageable()) {\n if (!isUndefined(that._addChildPageSize)) {\n queryOptions = that._defaultPageableQueryOptions();\n queryOptions.take = that._addChildPageSize - 1;\n queryOptions.pageSize = that._addChildPageSize - 1;\n that._query(queryOptions);\n }\n }\n that._addChildPageSize = undefined;\n },\n sync: function () {\n var that = this;\n return DataSource.fn.sync.call(that).then(function () {\n that._restorePageSizeAfterAddChild();\n });\n },\n _syncEnd: function () {\n var that = this;\n if (that._isPageable()) {\n that._initDataMaps(that._getData());\n }\n }\n });\n TreeListDataSource.create = function (options) {\n if ($.isArray(options)) {\n options = { data: options };\n } else if (options instanceof ObservableArray) {\n options = { data: options.toJSON() };\n }\n return options instanceof TreeListDataSource ? options : new TreeListDataSource(options);\n };\n function isCellVisible() {\n return this.style.display !== 'none';\n }\n function sortCells(cells) {\n var indexAttr = kendo.attr('index');\n return cells.sort(function (a, b) {\n a = $(a);\n b = $(b);\n var indexA = a.attr(indexAttr);\n var indexB = b.attr(indexAttr);\n if (indexA === undefined) {\n indexA = $(a).index();\n }\n if (indexB === undefined) {\n indexB = $(b).index();\n }\n indexA = parseInt(indexA, 10);\n indexB = parseInt(indexB, 10);\n return indexA > indexB ? 1 : indexA < indexB ? -1 : 0;\n });\n }\n function leafDataCells(container) {\n var rows = container.find('>tr:not(.k-filter-row)');\n var filter = function () {\n var el = $(this);\n return !el.hasClass('k-group-cell') && !el.hasClass('k-hierarchy-cell');\n };\n var cells = $();\n if (rows.length > 1) {\n cells = rows.find('th').filter(filter).filter(function () {\n return this.rowSpan > 1;\n });\n }\n cells = cells.add(rows.last().find('th').filter(filter));\n return sortCells(cells);\n }\n function createPlaceholders(options) {\n var spans = [];\n var className = options.className;\n for (var i = 0, level = options.level; i < level; i++) {\n spans.push(kendoDomElement('span', { className: className }));\n }\n return spans;\n }\n function columnsWidth(cols) {\n var colWidth, width = 0;\n for (var idx = 0, length = cols.length; idx < length; idx++) {\n colWidth = cols[idx].style.width;\n if (colWidth && colWidth.indexOf('%') == -1) {\n width += parseInt(colWidth, 10);\n }\n }\n return width;\n }\n function syncTableHeight(table1, table2) {\n table1 = table1[0];\n table2 = table2[0];\n if (table1.rows.length && table2.rows.length && table1.rows.length !== table2.rows.length) {\n var lockedHeigth = table1.offsetHeight;\n var tableHeigth = table2.offsetHeight;\n var row;\n var diff;\n if (lockedHeigth > tableHeigth) {\n row = table2.rows[table2.rows.length - 1];\n diff = lockedHeigth - tableHeigth;\n } else {\n row = table1.rows[table1.rows.length - 1];\n diff = tableHeigth - lockedHeigth;\n }\n row.style.height = row.offsetHeight + diff + 'px';\n }\n }\n var TreeListPager = ui.Pager.extend({\n options: { name: 'TreeListPager' },\n totalPages: function () {\n var that = this;\n var dataSource = that.dataSource;\n if (dataSource && dataSource._filter) {\n return ui.Pager.fn.totalPages.call(that);\n }\n return Math.ceil((that._collapsedTotal() || 0) / (that.pageSize() || 1));\n },\n _createDataSource: function (options) {\n this.dataSource = kendo.data.TreeListDataSource.create(options.dataSource);\n },\n _collapsedTotal: function () {\n var dataSource = this.dataSource;\n return dataSource ? dataSource.collapsedTotal() || 0 : 0;\n }\n });\n var Editor = kendo.Observable.extend({\n init: function (element, options) {\n kendo.Observable.fn.init.call(this);\n options = this.options = extend(true, {}, this.options, options);\n this.element = element;\n this.bind(this.events, options);\n this.model = this.options.model;\n this.fields = this._fields(this.options.columns);\n this._initContainer();\n this.createEditable();\n },\n events: [],\n _initContainer: function () {\n this.wrapper = this.element;\n },\n createEditable: function () {\n var options = this.options;\n this.editable = new ui.Editable(this.wrapper, {\n fields: this.fields,\n target: options.target,\n clearContainer: options.clearContainer,\n model: this.model,\n change: options.change\n });\n },\n _isEditable: function (column) {\n return isColumnEditable(column, this.model);\n },\n _fields: function (columns) {\n var fields = [];\n var idx, length, column;\n for (idx = 0, length = columns.length; idx < length; idx++) {\n column = columns[idx];\n if (this._isEditable(column)) {\n fields.push({\n field: column.field,\n format: column.format,\n editor: column.editor\n });\n }\n }\n return fields;\n },\n end: function () {\n return this.editable.end();\n },\n close: function () {\n this.destroy();\n },\n destroy: function () {\n this.editable.destroy();\n this.editable.element.find('[' + kendo.attr('container-for') + ']').empty().end().removeAttr(kendo.attr('role'));\n this.model = this.wrapper = this.element = this.columns = this.editable = null;\n }\n });\n var PopupEditor = Editor.extend({\n init: function (element, options) {\n Editor.fn.init.call(this, element, options);\n this._attachHandlers();\n kendo.cycleForm(this.wrapper);\n this.open();\n },\n events: [\n CANCEL,\n SAVE\n ],\n options: {\n window: {\n modal: true,\n resizable: false,\n draggable: true,\n title: 'Edit',\n visible: false\n }\n },\n _initContainer: function () {\n var options = this.options;\n var formContent = [];\n this.wrapper = $('
').attr(kendo.attr('uid'), this.model.uid).append('
');\n if (options.template) {\n this._appendTemplate(formContent);\n this.fields = [];\n } else {\n this._appendFields(formContent);\n }\n this._appendButtons(formContent);\n new kendoDom.Tree(this.wrapper.children()[0]).render(formContent);\n this.wrapper.appendTo(options.appendTo);\n this.window = new ui.Window(this.wrapper, options.window);\n },\n _appendTemplate: function (form) {\n var template = this.options.template;\n if (typeof template === STRING) {\n template = window.unescape(template);\n }\n template = kendo.template(template)(this.model);\n form.push(kendoHtmlElement(template));\n },\n _appendFields: function (form) {\n var idx, length, column;\n var columns = this.options.columns;\n for (idx = 0, length = columns.length; idx < length; idx++) {\n column = columns[idx];\n if (column.command) {\n continue;\n }\n form.push(kendoHtmlElement('
'));\n if (this._isEditable(column)) {\n form.push(kendoHtmlElement('
'));\n } else {\n form.push(kendoDomElement('div', { 'class': 'k-edit-field' }, [this.options.fieldRenderer(column, this.model)]));\n }\n }\n },\n _appendButtons: function (form) {\n form.push(kendoDomElement('div', { 'class': 'k-edit-buttons k-state-default' }, this.options.commandRenderer()));\n },\n _attachHandlers: function () {\n var closeHandler = this._cancelProxy = proxy(this._cancel, this);\n this.wrapper.on(CLICK + NS, '.k-grid-cancel', this._cancelProxy);\n this._saveProxy = proxy(this._save, this);\n this.wrapper.on(CLICK + NS, '.k-grid-update', this._saveProxy);\n this.window.bind('close', function (e) {\n if (e.userTriggered) {\n closeHandler(e);\n }\n });\n },\n _detachHandlers: function () {\n this._cancelProxy = null;\n this._saveProxy = null;\n this.wrapper.off(NS);\n },\n _cancel: function (e) {\n this.trigger(CANCEL, e);\n },\n _save: function () {\n this.trigger(SAVE);\n },\n open: function () {\n this.window.center().open();\n },\n close: function () {\n this.window.bind('deactivate', proxy(this.destroy, this)).close();\n },\n destroy: function () {\n this.window.destroy();\n this.window = null;\n this._detachHandlers();\n Editor.fn.destroy.call(this);\n }\n });\n var IncellEditor = Editor.extend({\n destroy: function () {\n var that = this;\n that.editable.destroy();\n that.editable.element.off().empty().removeAttr(kendo.attr('role'));\n that.model = that.wrapper = that.element = that.columns = that.editable = null;\n }\n });\n var TreeList = DataBoundWidget.extend({\n init: function (element, options) {\n DataBoundWidget.fn.init.call(this, element, options);\n isRtl = kendo.support.isRtl(element);\n this._dataSource(this.options.dataSource);\n this._aria();\n this._columns();\n this._layout();\n this._navigatable();\n this._selectable();\n this._sortable();\n this._resizable();\n this._filterable();\n this._attachEvents();\n this._toolbar();\n this._scrollable();\n this._reorderable();\n this._columnMenu();\n this._minScreenSupport();\n this._draggable();\n this._pageable();\n if (this.options.autoBind) {\n this.dataSource.fetch();\n }\n if (this._hasLockedColumns) {\n var widget = this;\n this.wrapper.addClass('k-grid-lockedcolumns');\n this._resizeHandler = function () {\n widget.resize();\n };\n $(window).on('resize' + NS, this._resizeHandler);\n }\n kendo.notify(this);\n },\n _draggable: function () {\n var that = this;\n var editable = this.options.editable;\n var dataSource = that.dataSource;\n var idField = dataSource._modelIdField();\n var parentIdField = dataSource._modelParentIdField();\n var pageable = that._isPageable();\n if (!editable || !editable.move) {\n return;\n }\n this._dragging = new kendo.ui.HierarchicalDragAndDrop(this.wrapper, {\n $angular: this.$angular,\n autoScroll: true,\n filter: 'tbody>tr',\n itemSelector: 'tr',\n allowedContainers: this.wrapper,\n hintText: function (row) {\n var text = function () {\n return $(this).text();\n };\n var separator = '';\n return row.children('td').map(text).toArray().join(separator);\n },\n contains: proxy(function (source, destination) {\n var dest = this.dataItem(destination);\n var src = this.dataItem(source);\n return src == dest || this.dataSource.contains(src, dest);\n }, this),\n itemFromTarget: function (target) {\n var tr = target.closest('tr');\n return {\n item: tr,\n content: tr\n };\n },\n dragstart: proxy(function (source) {\n this.wrapper.addClass('k-treelist-dragging');\n var model = this.dataItem(source);\n return this.trigger(DRAGSTART, { source: model });\n }, this),\n drag: proxy(function (e) {\n e.source = this.dataItem(e.source);\n this.trigger(DRAG, e);\n }, this),\n drop: proxy(function (e) {\n e.source = this.dataItem(e.source);\n e.destination = this.dataItem(e.destination);\n this.wrapper.removeClass('k-treelist-dragging');\n return this.trigger(DROP, e);\n }, this),\n dragend: proxy(function (e) {\n var dest = this.dataItem(e.destination);\n var src = this.dataItem(e.source);\n var originalSrcParentId = src[parentIdField];\n var originalSrcIndex = dataSource._indexInChildrenMap(src);\n if (pageable) {\n dataSource._removeFromChildrenMap(src);\n src[parentIdField] = dest ? dest[idField] : null;\n dataSource._initChildrenMapForParent(dest);\n src[parentIdField] = originalSrcParentId;\n }\n var isPrevented = src.set('parentId', dest ? dest.id : null);\n if (pageable && isPrevented) {\n dataSource._removeFromChildrenMap(src);\n src[parentIdField] = originalSrcParentId;\n dataSource._removeFromChildrenMap(src);\n dataSource._insertInChildrenMap(src, originalSrcIndex);\n }\n e.source = src;\n e.destination = dest;\n this.trigger(DRAGEND, e);\n }, this),\n reorderable: false,\n dropHintContainer: function (item) {\n return item.children('td:eq(1)');\n },\n dropPositionFrom: function (dropHint) {\n return dropHint.prevAll('.k-i-none').length > 0 ? 'after' : 'before';\n }\n });\n },\n itemFor: function (model) {\n if (typeof model == 'number') {\n model = this.dataSource.get(model);\n }\n return this.tbody.find('[' + kendo.attr('uid') + '=' + model.uid + ']');\n },\n _scrollable: function () {\n if (this.options.scrollable) {\n var scrollables = this.thead.closest('.k-grid-header-wrap');\n var lockedContent = $(this.lockedContent).bind('DOMMouseScroll' + NS + ' mousewheel' + NS, proxy(this._wheelScroll, this));\n this.content.bind('scroll' + NS, function () {\n scrollables.scrollLeft(this.scrollLeft);\n lockedContent.scrollTop(this.scrollTop);\n });\n var touchScroller = kendo.touchScroller(this.content);\n if (touchScroller && touchScroller.movable) {\n this._touchScroller = touchScroller;\n touchScroller.movable.bind('change', function (e) {\n scrollables.scrollLeft(-e.sender.x);\n if (lockedContent) {\n lockedContent.scrollTop(-e.sender.y);\n }\n });\n }\n }\n },\n _wheelScroll: function (e) {\n if (e.ctrlKey) {\n return;\n }\n var delta = kendo.wheelDeltaY(e);\n var lockedDiv = $(e.currentTarget);\n if (delta) {\n if (lockedDiv[0].scrollHeight > lockedDiv[0].clientHeight && (lockedDiv[0].scrollTop < lockedDiv[0].scrollHeight - lockedDiv[0].clientHeight && delta < 0 || lockedDiv[0].scrollTop > 0 && delta > 0)) {\n e.preventDefault();\n }\n lockedDiv.one('wheel' + NS, false);\n this.content.scrollTop(this.content.scrollTop() + -delta);\n }\n },\n _progress: function () {\n var messages = this.options.messages;\n if (!this.tbody.find('tr').length) {\n this._showStatus(kendo.template(' #: messages.loading #')({\n className: classNames.icon + ' ' + classNames.loading,\n messages: messages\n }));\n }\n },\n _error: function (e) {\n if (!this.dataSource.rootNodes().length) {\n this._render({ error: e });\n }\n },\n refresh: function (e) {\n e = e || {};\n if (e.action == 'itemchange' && this.editor) {\n return;\n }\n if (this.trigger(DATABINDING)) {\n return;\n }\n var current = $(this.current());\n var isCurrentInHeader = false;\n var currentIndex;\n this._cancelEditor();\n this._render();\n this._adjustHeight();\n if (this.options.navigatable) {\n if (this._isActiveInTable() || this.editor) {\n isCurrentInHeader = current.is('th');\n currentIndex = Math.max(this.cellIndex(current), 0);\n }\n this._restoreCurrent(currentIndex, isCurrentInHeader);\n }\n this.trigger(DATABOUND);\n },\n _angularFooters: function (command) {\n var i, footer, aggregates;\n var allAggregates = this.dataSource.aggregates();\n var footerRows = this._footerItems();\n for (i = 0; i < footerRows.length; i++) {\n footer = footerRows.eq(i);\n aggregates = allAggregates[footer.attr('data-parentId')];\n this._angularFooter(command, footer.find('td').get(), aggregates);\n }\n },\n _angularFooter: function (command, cells, aggregates) {\n var columns = this.columns;\n this.angular(command, function () {\n return {\n elements: cells,\n data: map(columns, function (col) {\n return {\n column: col,\n aggregate: aggregates && aggregates[col.field]\n };\n })\n };\n });\n },\n items: function () {\n if (this._hasLockedColumns) {\n return this._items(this.tbody).add(this._items(this.lockedTable));\n } else {\n return this._items(this.tbody);\n }\n },\n _items: function (container) {\n return container.find('tr').filter(function () {\n return !$(this).hasClass(classNames.footerTemplate);\n });\n },\n _footerItems: function () {\n var container = this.tbody;\n if (this._hasLockedColumns) {\n container = container.add(this.lockedTable);\n }\n return container.find('tr').filter(function () {\n return $(this).hasClass(classNames.footerTemplate);\n });\n },\n dataItems: function () {\n var dataItems = kendo.ui.DataBoundWidget.fn.dataItems.call(this);\n if (this._hasLockedColumns) {\n var n = dataItems.length, tmp = new Array(2 * n);\n for (var i = n; --i >= 0;) {\n tmp[i] = tmp[i + n] = dataItems[i];\n }\n dataItems = tmp;\n }\n return dataItems;\n },\n _showStatus: function (message) {\n var status = this.element.find('.k-status');\n var content = $(this.content).add(this.lockedContent);\n if (!status.length) {\n status = $('
').appendTo(this.element);\n }\n this._contentTree.render([]);\n if (this._hasLockedColumns) {\n this._lockedContentTree.render([]);\n }\n content.hide();\n status.html(message);\n },\n _hideStatus: function () {\n this.element.find('.k-status').remove();\n $(this.content).add(this.lockedContent).show();\n },\n _adjustHeight: function () {\n var that = this;\n var element = this.element;\n var contentWrap = element.find(DOT + classNames.gridContentWrap);\n var header = element.find(DOT + classNames.gridHeader);\n var toolbar = element.find(DOT + classNames.gridToolbar);\n var pagerHeight = that._isPageable() && that.pager && that.pager.element.is(':visible') ? outerHeight(that.pager.element) : 0;\n var height;\n var scrollbar = kendo.support.scrollbar();\n element.css(HEIGHT, this.options.height);\n var isHeightSet = function (el) {\n var initialHeight, newHeight;\n if (el[0].style.height) {\n return true;\n } else {\n initialHeight = el.height();\n }\n el.height('auto');\n newHeight = el.height();\n el.height('');\n return initialHeight != newHeight;\n };\n if (isHeightSet(element)) {\n height = element.height() - outerHeight(header) - outerHeight(toolbar) - pagerHeight;\n contentWrap.height(height);\n if (this._hasLockedColumns) {\n scrollbar = this.table[0].offsetWidth > this.table.parent()[0].clientWidth ? scrollbar : 0;\n this.lockedContent.height(height - scrollbar);\n }\n }\n },\n _resize: function () {\n this._applyLockedContainersWidth();\n this._adjustHeight();\n },\n _minScreenSupport: function () {\n var any = this.hideMinScreenCols();\n if (any) {\n this.minScreenResizeHandler = proxy(this.hideMinScreenCols, this);\n $(window).on('resize', this.minScreenResizeHandler);\n }\n },\n hideMinScreenCols: function () {\n var cols = this.columns, any = false, screenWidth = window.innerWidth > 0 ? window.innerWidth : screen.width;\n for (var i = 0; i < cols.length; i++) {\n var col = cols[i];\n var minWidth = col.minScreenWidth;\n if (minWidth !== undefined && minWidth !== null) {\n any = true;\n if (minWidth > screenWidth) {\n this.hideColumn(col);\n } else {\n this.showColumn(col);\n }\n }\n }\n return any;\n },\n destroy: function () {\n DataBoundWidget.fn.destroy.call(this);\n var dataSource = this.dataSource;\n dataSource.unbind(CHANGE, this._refreshHandler);\n dataSource.unbind(ERROR, this._errorHandler);\n dataSource.unbind(PROGRESS, this._progressHandler);\n this._navigatableTables = null;\n this._current = null;\n if (this._resizeHandler) {\n $(window).off('resize' + NS, this._resizeHandler);\n }\n if (this._dragging) {\n this._dragging.destroy();\n this._dragging = null;\n }\n if (this.resizable) {\n this.resizable.destroy();\n this.resizable = null;\n }\n if (this.reorderable) {\n this.reorderable.destroy();\n this.reorderable = null;\n }\n if (this._draggableInstance && this._draggableInstance.element) {\n this._draggableInstance.destroy();\n this._draggableInstance = null;\n }\n if (this.minScreenResizeHandler) {\n $(window).off('resize', this.minScreenResizeHandler);\n }\n this._destroyEditor();\n this.element.off(NS);\n this.wrapper.off(NS);\n if (this._touchScroller) {\n this._touchScroller.destroy();\n }\n this._destroyPager();\n if (dataSource) {\n dataSource._dataMaps = null;\n }\n this._autoExpandable = null;\n this._refreshHandler = this._errorHandler = this._progressHandler = this._dataSourceFetchProxy = null;\n this.thead = this.content = this.tbody = this.table = this.element = this.lockedHeader = this.lockedContent = null;\n this._statusTree = this._headerTree = this._contentTree = this._lockedHeaderColsTree = this._lockedContentColsTree = this._lockedHeaderTree = this._lockedContentTree = null;\n },\n options: {\n name: 'TreeList',\n columns: [],\n autoBind: true,\n scrollable: true,\n selectable: false,\n sortable: false,\n toolbar: null,\n height: null,\n columnMenu: false,\n messages: {\n noRows: 'No records to display',\n loading: 'Loading...',\n requestFailed: 'Request failed.',\n retry: 'Retry',\n commands: {\n edit: 'Edit',\n update: 'Update',\n canceledit: 'Cancel',\n create: 'Add new record',\n createchild: 'Add child record',\n destroy: 'Delete',\n excel: 'Export to Excel',\n pdf: 'Export to PDF'\n }\n },\n excel: { hierarchy: true },\n resizable: false,\n filterable: false,\n editable: false,\n reorderable: false\n },\n events: [\n CHANGE,\n BEFORE_EDIT,\n EDIT,\n PAGE,\n SAVE,\n SAVE_CHANGES,\n REMOVE,\n EXPAND,\n COLLAPSE,\n DATABINDING,\n DATABOUND,\n CANCEL,\n DRAGSTART,\n DRAG,\n DROP,\n DRAGEND,\n FILTERMENUINIT,\n ITEM_CHANGE,\n CELL_CLOSE,\n FILTERMENUOPEN,\n COLUMNHIDE,\n COLUMNSHOW,\n COLUMNREORDER,\n COLUMNRESIZE,\n COLUMNMENUINIT,\n COLUMNMENUOPEN,\n COLUMNLOCK,\n COLUMNUNLOCK\n ],\n _toggle: function (model, expand) {\n var that = this;\n var defaultPromise = $.Deferred().resolve().promise();\n var loaded = model.loaded();\n if (that._isIncellEditable() && that.editor) {\n $(activeElement()).change();\n that.closeCell();\n }\n if (model._error) {\n model.expanded = false;\n model._error = undefined;\n }\n if (!loaded && model.expanded) {\n return defaultPromise;\n }\n if (typeof expand == 'undefined') {\n expand = !model.expanded;\n }\n model.expanded = expand;\n function afterModelLoaded() {\n that._toggleData();\n that._render();\n that._syncLockedContentHeight();\n }\n if (!loaded) {\n defaultPromise = this.dataSource.load(model).always(proxy(function () {\n afterModelLoaded();\n }, this));\n }\n afterModelLoaded();\n return defaultPromise;\n },\n _toggleData: function () {\n var that = this;\n if (that._isPageable()) {\n that._togglePageableData();\n }\n },\n _togglePageableData: function () {\n var that = this;\n var dataSource = that.dataSource;\n var data = dataSource._getData();\n var result;\n var queryOptions = dataSource._defaultPageableQueryOptions();\n that._renderProgress(true);\n var childrenMap = dataSource._getChildrenMap() || dataSource.childrenMap(dataSource._getData());\n dataSource._processDataItemsState(data, childrenMap);\n result = dataSource._processPageableQuery(data, queryOptions);\n queryOptions.childrenMap = result.childrenMap;\n queryOptions.filteredChildrenMap = result.filteredChildrenMap;\n dataSource._aggregateResult = dataSource._calculateAggregates(result.dataToAggregate, queryOptions);\n dataSource.view(result.data);\n dataSource._calculateCollapsedTotal();\n that._refreshPager();\n that._renderProgress(false);\n },\n _refreshPager: function () {\n var pager = this.pager;\n if (pager) {\n pager.refresh();\n }\n },\n expand: function (row) {\n return this._toggle(this.dataItem(row), true);\n },\n collapse: function (row) {\n return this._toggle(this.dataItem(row), false);\n },\n _toggleChildren: function (e) {\n var icon = $(e.currentTarget);\n var model = this.dataItem(icon);\n if (!model) {\n return;\n }\n var event = !model.expanded ? EXPAND : COLLAPSE;\n if (!this.trigger(event, { model: model })) {\n this._toggle(model);\n }\n e.preventDefault();\n },\n _navigatable: function () {\n var that = this;\n if (!that.options.navigatable) {\n return;\n }\n var tables = that.table.add(that.lockedTable);\n var headerTables = that.thead.parent().add($('>table', that.lockedHeader));\n if (that.options.scrollable) {\n tables = tables.add(headerTables);\n headerTables.attr(TABINDEX, -1);\n }\n this._navigatableTables = tables;\n tables.on(kendo.support.touch ? 'touchstart' + NS : 'mousedown' + NS, NAVROW + '>:visible', proxy(that._tableClick, that)).on('focus' + NS, proxy(that._tableFocus, that)).on('focusout' + NS, proxy(that._tableBlur, that)).on('keydown' + NS, proxy(that._tableKeyDown, that));\n },\n cellIndex: function (td) {\n var lockedColumnOffset = 0;\n if (this.lockedTable && !$.contains(this.lockedTable[0], td[0])) {\n lockedColumnOffset = leafColumns(lockedColumns(this.columns)).length;\n }\n return $(td).parent().children().index(td) + lockedColumnOffset;\n },\n _isActiveInTable: function () {\n var active = kendo._activeElement();\n if (!active) {\n return false;\n }\n return this.table[0] === active || $.contains(this.table[0], active) || this.lockedTable && (this.lockedTable[0] === active || $.contains(this.lockedTable[0], active));\n },\n _restoreCurrent: function (currentIndex, isCurrentInHeader) {\n var rowIndex;\n var row;\n var td;\n if (currentIndex === undefined || currentIndex < 0) {\n return;\n }\n if (this._current) {\n this._current.removeClass('k-state-focused');\n }\n if (isCurrentInHeader) {\n this.current(this.thead.find('th').eq(currentIndex));\n } else {\n rowIndex = 0;\n currentIndex = 0;\n row = $();\n if (this.lockedTable) {\n row = this.lockedTable.find('>tbody>tr:visible').eq(rowIndex);\n }\n row = row.add(this.tbody.children().eq(rowIndex));\n td = row.find('>td:visible').eq(currentIndex);\n this.current(td);\n }\n if (this._current) {\n focusTable(this._current.closest('table')[0], true);\n }\n },\n current: function (newCurrent) {\n var current = this._current;\n newCurrent = $(newCurrent);\n if (newCurrent.length && (!current || current[0] !== newCurrent[0])) {\n this._updateCurrentAttr(current, newCurrent);\n this._scrollCurrent();\n }\n if (newCurrent && newCurrent.length) {\n this._lastCellIndex = newCurrent.parent().children(DATA_CELL).index(newCurrent);\n }\n return this._current;\n },\n _setCurrent: function (newCurrent) {\n var that = this;\n newCurrent = $(newCurrent);\n if (newCurrent[0]) {\n that._current = newCurrent;\n that._updateCurrentAttr(that._current, newCurrent);\n that._scrollCurrent();\n }\n return that._current;\n },\n _scrollCurrent: function () {\n var current = this._current;\n var scrollable = this.options.scrollable;\n if (!current || !scrollable) {\n return;\n }\n var row = current.parent();\n var tableContainer = row.closest('table').parent();\n var isInLockedContainer = tableContainer.is('.k-grid-content-locked,.k-grid-header-locked');\n var isInContent = tableContainer.is('.k-grid-content-locked,.k-grid-content');\n var scrollableContainer = $(this.content)[0];\n if (isInContent) {\n this._scrollTo(this._relatedRow(row)[0], scrollableContainer);\n }\n if (this.lockedContent) {\n this.lockedContent[0].scrollTop = scrollableContainer.scrollTop;\n }\n if (!isInLockedContainer) {\n this._scrollTo(current[0], scrollableContainer);\n }\n },\n _scrollTo: function (element, container) {\n var elementToLowercase = element.tagName.toLowerCase();\n var isHorizontal = elementToLowercase === 'td' || elementToLowercase === 'th';\n var elementOffset = element[isHorizontal ? 'offsetLeft' : 'offsetTop'];\n var elementOffsetDir = element[isHorizontal ? 'offsetWidth' : 'offsetHeight'];\n var containerScroll = container[isHorizontal ? 'scrollLeft' : 'scrollTop'];\n var containerOffsetDir = container[isHorizontal ? 'clientWidth' : 'clientHeight'];\n var bottomDistance = elementOffset + elementOffsetDir;\n var result = 0;\n var ieCorrection = 0;\n var firefoxCorrection = 0;\n if (isRtl && isHorizontal) {\n var table = $(element).closest('table')[0];\n if (browser.msie) {\n ieCorrection = table.offsetLeft;\n } else if (browser.mozilla) {\n firefoxCorrection = table.offsetLeft - kendo.support.scrollbar();\n }\n }\n containerScroll = Math.abs(containerScroll + ieCorrection - firefoxCorrection);\n if (containerScroll > elementOffset) {\n result = elementOffset;\n } else if (bottomDistance > containerScroll + containerOffsetDir) {\n if (elementOffsetDir <= containerOffsetDir) {\n result = bottomDistance - containerOffsetDir;\n } else {\n result = elementOffset;\n }\n } else {\n result = containerScroll;\n }\n result = Math.abs(result + ieCorrection) + firefoxCorrection;\n container[isHorizontal ? 'scrollLeft' : 'scrollTop'] = result;\n },\n _aria: function () {\n var id = this.element.attr('id') || 'aria';\n if (id) {\n this._elementId = id + '_active_element';\n }\n },\n _currentDataIndex: function (table, current) {\n var index = current.attr('data-index');\n if (!index) {\n return undefined;\n }\n var lockedColumnsCount = lockedColumns(this.columns).length;\n if (lockedColumnsCount && !table.closest('div').hasClass('k-grid-content-locked')[0]) {\n return index - lockedColumnsCount;\n }\n return index;\n },\n _prevVerticalCell: function (container, current) {\n var cells;\n var row = current.parent();\n var rows = container.children(NAVROW);\n var rowIndex = rows.index(row);\n var index = this._currentDataIndex(container, current);\n if (index || current.hasClass('k-header')) {\n cells = parentColumnsCells(current);\n return cells.eq(cells.length - 2);\n }\n index = Math.max(row.children(DATA_CELL).index(current), this._lastCellIndex || 0);\n if (row.hasClass('k-filter-row')) {\n return leafDataCells(container).filter(isCellVisible).eq(index);\n }\n if (rowIndex == -1) {\n row = container.find('tr.k-filter-row:visible');\n if (!row[0]) {\n return leafDataCells(container).filter(isCellVisible).eq(index);\n }\n } else {\n row = rowIndex === 0 ? $() : rows.eq(rowIndex - 1);\n }\n cells = row.children(DATA_CELL);\n if (cells.length > index) {\n return cells.eq(index);\n }\n return cells.eq(0);\n },\n _nextVerticalCell: function (container, current) {\n var cells;\n var row = current.parent();\n var rows = container.children(NAVROW);\n var rowIndex = rows.index(row);\n var index = this._currentDataIndex(container, current);\n if (rowIndex != -1 && index === undefined && current.hasClass('k-header')) {\n return childColumnsCells(current).eq(1);\n }\n index = index ? parseInt(index, 10) : row.children(DATA_CELL).index(current);\n index = Math.max(index, this._lastCellIndex || 0);\n if (rowIndex == -1) {\n row = rows.eq(0);\n } else {\n row = rows.eq(rowIndex + current[0].rowSpan);\n }\n var tmpIndex = index;\n if (this._currentDataIndex(container, current) !== undefined) {\n var currentRowCells = row.children(':not(.k-group-cell):not(.k-hierarchy-cell)');\n var hiddenColumns = currentRowCells.filter(':hidden');\n for (var idx = 0, length = hiddenColumns.length; idx < length; idx++) {\n if (currentRowCells.index(hiddenColumns[idx]) < index) {\n tmpIndex--;\n }\n }\n }\n index = tmpIndex;\n cells = row.children(DATA_CELL);\n if (cells.length > index) {\n return cells.eq(index);\n }\n return cells.eq(0);\n },\n _verticalContainer: function (container, up) {\n var table = container.parent();\n var length = this._navigatableTables.length;\n var step = Math.floor(length / 2);\n var index = inArray(table[0], this._navigatableTables);\n if (up) {\n step *= -1;\n }\n index += step;\n if (index >= 0 || index < length) {\n table = this._navigatableTables.eq(index);\n }\n return table.find(up ? 'thead' : 'tbody');\n },\n _updateCurrentAttr: function (current, next) {\n var headerId = $(current).data('headerId');\n $(current).removeClass(classNames.focused).closest('table').removeAttr('aria-activedescendant');\n if (headerId) {\n headerId = headerId.replace(this._elementId, '');\n $(current).attr('id', headerId);\n } else {\n $(current).removeAttr('id');\n }\n next.data('headerId', next.attr('id')).attr('id', this._elementId).addClass(classNames.focused).closest('table').attr('aria-activedescendant', this._elementId);\n this._current = next;\n },\n _tableKeyDown: function (e) {\n var handled = false;\n var current = this.current();\n var target = $(e.target);\n var canHandle = !e.isDefaultPrevented() && !target.is(':button,a,:input,a>.k-icon');\n current = current ? current : $(this.lockedTable).add(this.table).find(FIRSTNAVITEM);\n if (canHandle && e.keyCode == keys.UP) {\n handled = this._moveUp(current, e.shiftKey);\n }\n if (canHandle && e.keyCode == keys.DOWN) {\n handled = this._moveDown(current, e.shiftKey);\n }\n if (canHandle && e.keyCode == (isRtl ? keys.LEFT : keys.RIGHT)) {\n if (e.altKey) {\n handled = this._handleExpand(current);\n } else {\n handled = this._moveRight(current);\n }\n }\n if (canHandle && e.keyCode == (isRtl ? keys.RIGHT : keys.LEFT)) {\n if (e.altKey) {\n handled = this._handleCollapse(current);\n } else {\n handled = this._moveLeft(current);\n }\n }\n if (canHandle && e.keyCode == keys.PAGEDOWN) {\n handled = this._handlePageDown();\n }\n if (canHandle && e.keyCode == keys.PAGEUP) {\n handled = this._handlePageUp();\n }\n if (e.keyCode == keys.ENTER || e.keyCode == keys.F2) {\n handled = this._handleEnterKey(current, e.currentTarget, target);\n }\n if (e.keyCode == keys.ESC) {\n handled = this._handleEscKey(current, e.currentTarget);\n }\n if (canHandle && e.keyCode == keys.HOME) {\n handled = this._handleHome(current, e.ctrlKey);\n }\n if (canHandle && e.keyCode == keys.END) {\n handled = this._handleEnd(current, e.ctrlKey);\n }\n if (e.keyCode == keys.TAB) {\n handled = this._handleTabKey(current, e.currentTarget, e.shiftKey);\n }\n if (handled) {\n e.preventDefault();\n e.stopPropagation();\n }\n },\n _handleExpand: function (current) {\n var that = this;\n var row = current.parent();\n var model = that.dataItem(row);\n if (current.hasClass('k-header')) {\n return false;\n }\n if (model && model.hasChildren && !model.expanded && !that.trigger(EXPAND, { model: model })) {\n this.expand(row);\n return true;\n }\n return false;\n },\n _handleCollapse: function (current) {\n var that = this;\n var row = current.parent();\n var model = that.dataItem(row);\n if (current.hasClass('k-header')) {\n return false;\n }\n if (model && model.hasChildren && model.expanded && !that.trigger(COLLAPSE, { model: model })) {\n that.collapse(row);\n return true;\n }\n return false;\n },\n _handleHome: function (current, ctrl) {\n var row = current.parent();\n var rowContainer = row.parent();\n var isInLockedTable = this.lockedTable && this.lockedTable.children('tbody')[0] === rowContainer[0];\n var isInBody = rowContainer[0] === this.tbody[0];\n var prev;\n if (ctrl) {\n if (this.lockedTable) {\n prev = this.lockedTable.find(FIRSTNAVITEM);\n } else {\n prev = this.table.find(FIRSTNAVITEM);\n }\n } else if (isInBody || isInLockedTable) {\n if (isInBody && this.lockedTable) {\n row = this._relatedRow(row);\n }\n prev = row.children(NAVCELL + ':first');\n }\n if (prev && prev.length) {\n this.current(prev);\n return true;\n }\n },\n _handleEnd: function (current, ctrl) {\n var row = current.parent();\n var rowContainer = row.parent();\n var isInLockedTable = this.lockedTable && this.lockedTable.children('tbody')[0] === rowContainer[0];\n var isInBody = rowContainer[0] === this.tbody[0];\n var next;\n if (ctrl) {\n next = this.table.find(LASTITEMROW + '>' + NAVCELL + ':last');\n } else if (isInBody || isInLockedTable) {\n if (!isInBody && this.lockedTable) {\n row = this._relatedRow(row);\n }\n next = row.children(NAVCELL + ':last');\n }\n if (next && next.length) {\n this.current(next);\n return true;\n }\n },\n _handlePageDown: function () {\n var that = this;\n if (!that._isPageable()) {\n return false;\n }\n that.dataSource._restorePageSizeAfterAddChild();\n that.dataSource.page(that.dataSource.page() + 1);\n return true;\n },\n _handlePageUp: function () {\n var that = this;\n if (!that._isPageable()) {\n return false;\n }\n that.dataSource._restorePageSizeAfterAddChild();\n that.dataSource.page(that.dataSource.page() - 1);\n return true;\n },\n _handleEscKey: function (current, currentTable) {\n var active = kendo._activeElement();\n var currentIndex;\n var that = this;\n var row;\n var cellIndex;\n if (!current || !current.parent().hasClass('k-grid-edit-row')) {\n if (current.has(active).length) {\n focusTable(currentTable, true);\n return true;\n }\n return false;\n }\n if (that._isIncellEditable()) {\n row = current.parent();\n cellIndex = current.index();\n that.closeCell(true);\n that._setCurrent(row.children().eq(cellIndex));\n } else {\n currentIndex = $(current).parent().index();\n if (active) {\n active.blur();\n }\n this.cancelRow();\n if (currentIndex >= 0) {\n this.current(this.items().eq(currentIndex).children(NAVCELL).first());\n }\n }\n if (browser.msie && browser.version < 9) {\n document.body.focus();\n }\n focusTable(currentTable, true);\n return true;\n },\n _handleEnterKey: function (current, currentTable, target) {\n var editable = this.options.editable;\n var container = target.closest('[role=gridcell]');\n var focusable;\n if (!target.is('table') && !$.contains(current[0], target[0])) {\n current = container;\n }\n if (current.is('th')) {\n current.find('.k-link').click();\n return true;\n }\n focusable = current.find(':kendoFocusable:first');\n if (focusable[0] && current.hasClass('k-state-focused')) {\n focusable.focus();\n return true;\n }\n if (editable && !target.is(':button,.k-button,textarea')) {\n if (!container[0]) {\n container = current;\n }\n this._handleEditing(container, false, currentTable);\n return true;\n }\n return false;\n },\n _handleTabKey: function (current, currentTable, shiftKey) {\n var that = this;\n var incellEditing = that.options.editable && that._isIncellEditable();\n var cell;\n if (!incellEditing || current.is('th')) {\n return false;\n }\n cell = $(activeElement()).closest(DOT + classNames.editCell);\n if (cell[0] && cell[0] !== current[0]) {\n current = cell;\n }\n cell = that._tabNext(current, currentTable, shiftKey);\n if (cell.length) {\n that._handleEditing(current, cell, cell.closest(TABLE));\n return true;\n } else {\n that._preventPageSizeRestore = false;\n }\n return false;\n },\n _tabNext: function (current, currentTable, back) {\n var that = this;\n var switchRow = true;\n var next = back ? current.prevAll(DATA_CELL + ':first') : current.nextAll(':visible:first');\n if (!next.length) {\n next = current.parent();\n if (that.lockedTable) {\n switchRow = back && currentTable == that.lockedTable[0] || !back && currentTable == that.table[0];\n next = that._relatedRow(next);\n }\n if (switchRow) {\n next = next[back ? 'prevAll' : 'nextAll']('tr:not(.k-grouping-row):not(.k-detail-row):visible:first');\n }\n next = next.children(DATA_CELL + (back ? ':last' : ':first'));\n that.dataSource._restorePageSizeAfterAddChild();\n }\n return next;\n },\n _handleEditing: function (current, next, table) {\n var that = this, active = $(kendo._activeElement()), isIE = browser.msie, editContainer, focusable, isEdited;\n var editable = that.options.editable && that.options.editable.update !== false;\n var incellEditing = that._isIncellEditable();\n table = $(table);\n if (incellEditing) {\n isEdited = current.hasClass(classNames.editCell);\n } else {\n isEdited = current.parent().hasClass('k-grid-edit-row');\n }\n if (that.editor) {\n editContainer = that.editor.wrapper;\n if (editContainer && $.contains(editContainer[0], active[0])) {\n if (browser.opera) {\n active.blur().change().triggerHandler('blur');\n } else {\n active.blur();\n if (isIE) {\n active.blur();\n }\n }\n }\n if (!that.editor) {\n focusTable(table);\n return;\n }\n if (that.editor.end()) {\n if (incellEditing) {\n that._preventPageSizeRestore = true;\n that.closeCell();\n that._preventPageSizeRestore = false;\n } else {\n that.saveRow();\n isEdited = true;\n }\n } else {\n if (incellEditing) {\n that.current(editContainer);\n } else {\n that.current(editContainer.children().filter(NAVCELL).first());\n }\n focusable = editContainer.find(':kendoFocusable:first')[0];\n if (focusable) {\n focusable.focus();\n }\n return;\n }\n }\n if (next) {\n that.current(next);\n }\n focusTable(table, true);\n if (!editable) {\n return;\n }\n if (!isEdited && !next || next) {\n var currentIndex = that.current().index();\n if (incellEditing) {\n that.editCell(that.current());\n } else {\n that.editRow(that.current().parent());\n that.current(that.editor.wrapper.children().eq(currentIndex));\n that.current().removeClass('k-state-focused');\n }\n } else {\n that.dataSource._restorePageSizeAfterAddChild();\n }\n },\n _moveRight: function (current) {\n var next = current.nextAll(NAVCELL).first();\n var row = current.parent();\n if (current.hasClass('k-header')) {\n next = current.nextAll(NAVHEADER).first();\n if (!next[0] && this.lockedTable && current.closest('table')[0] === this.lockedHeader.find('table')[0]) {\n next = this.thead.find(NAVHEADER + ':first');\n }\n }\n if (!next[0] && this.lockedTable && current.closest('table')[0] === this.lockedTable[0]) {\n next = this._relatedRow(row).children(NAVCELL).first();\n }\n if (next[0] && next[0] !== current[0]) {\n focusTable(next.closest('table'), true);\n }\n this.current(next);\n return true;\n },\n _moveLeft: function (current) {\n var prev = current.prevAll(NAVCELL).first();\n var row = current.parent();\n if (current.hasClass('k-header')) {\n prev = current.prevAll(NAVHEADER).first();\n if (!prev[0] && this.lockedTable && current.closest('table')[0] === this.thead.parent()[0]) {\n prev = this.lockedHeader.find('>table>thead>tr>' + NAVHEADER + ':last');\n }\n }\n if (!prev[0] && this.lockedTable && current.closest('table')[0] === this.table[0]) {\n prev = this._relatedRow(row).children(NAVCELL).last();\n }\n if (prev[0] && prev[0] !== current[0]) {\n focusTable(prev.closest('table'), true);\n }\n this.current(prev);\n return true;\n },\n _moveUp: function (current, shiftKey) {\n var container = current.parent().parent();\n var prev;\n if (shiftKey) {\n prev = current.parent();\n prev = prev.prevAll(ITEMROW + ':first');\n prev = current.parent().is(ITEMROW) ? prev.children().eq(current.index()) : prev.children(DATA_CELL + ':last');\n } else {\n prev = this._prevVerticalCell(container, current);\n if (!prev[0]) {\n this._lastCellIndex = 0;\n container = this._verticalContainer(container, true);\n prev = this._prevVerticalCell(container, current);\n if (prev[0]) {\n focusTable(container.parent(), true);\n }\n }\n }\n var tmp = this._lastCellIndex || 0;\n this.current(prev);\n this._lastCellIndex = tmp;\n return true;\n },\n _moveDown: function (current, shiftKey) {\n var container = current.parent().parent();\n var next;\n if (shiftKey) {\n next = current.parent();\n next = next.nextAll(ITEMROW + ':first');\n next = current.parent().is(ITEMROW) ? next.children().eq(current.index()) : next.children(DATA_CELL + ':first');\n } else {\n next = this._nextVerticalCell(container, current);\n if (!next[0]) {\n this._lastCellIndex = 0;\n container = this._verticalContainer(container);\n next = this._nextVerticalCell(container, current);\n if (next[0]) {\n focusTable(container.parent(), true);\n }\n }\n }\n var tmp = this._lastCellIndex || 0;\n this.current(next);\n this._lastCellIndex = tmp;\n return true;\n },\n _tableClick: function (e) {\n var currentTarget = $(e.currentTarget), isHeader = currentTarget.is('th'), table = this.table.add(this.lockedTable), headerTable = this.thead.parent().add($('>table', this.lockedHeader)), isInput = isInputElement(e.target), currentTable = currentTarget.closest('table')[0];\n if (kendo.support.touch) {\n return;\n }\n if (currentTable !== table[0] && currentTable !== table[1] && currentTable !== headerTable[0] && currentTable !== headerTable[1]) {\n return;\n }\n if (this.options.navigatable) {\n this.current(currentTarget);\n }\n if (isHeader || !isInput) {\n setTimeout(function () {\n if (!isInputElement(kendo._activeElement()) || !$.contains(currentTable, kendo._activeElement())) {\n focusTable(currentTable, true);\n }\n });\n }\n if (isHeader) {\n e.preventDefault();\n }\n },\n _setTabIndex: function (table) {\n this._navigatableTables.attr(TABINDEX, -1);\n table.attr(TABINDEX, 0);\n },\n _tableFocus: function (e) {\n var current = this.current();\n var table = $(e.currentTarget);\n if (current && current.is(':visible')) {\n current.addClass(classNames.focused);\n } else {\n this.current(table.find(FIRSTNAVITEM));\n }\n this._setTabIndex(table);\n },\n _tableBlur: function () {\n var current = this.current();\n if (current) {\n current.removeClass(classNames.focused);\n }\n },\n _attachEvents: function () {\n var icons = DOT + classNames.iconCollapse + ', .' + classNames.iconExpand + ', .' + classNames.refresh;\n var retryButton = DOT + classNames.retry;\n this.element.on(MOUSEDOWN + NS, icons, proxy(this._toggleChildren, this)).on(CLICK + NS, retryButton, this._dataSourceFetchProxy).on(CLICK + NS, '.k-button[data-command]', proxy(this._commandClick, this));\n this._attachCellEditingEventHandlers();\n },\n _attachCellEditingEventHandlers: function () {\n var that = this;\n var editable = that.options.editable;\n var selectable = that.selectable && that.selectable.options.multiple;\n var closeCell = function (e) {\n var target = activeElement();\n var editor = that.editor || {};\n var cell = editor.element;\n if (cell && !$.contains(cell[0], target) && cell[0] !== target && !$(target).closest('.k-animation-container').length) {\n if (editor.end()) {\n if (!e.relatedTarget && that._isPageable() && !isUndefined(that.dataSource._addChildPageSize)) {\n that._preventPageSizeRestore = false;\n }\n that.closeCell();\n }\n }\n that._preventPageSizeRestore = false;\n };\n if (that._isIncellEditable() && editable.update !== false) {\n that.wrapper.on(CLICK + NS, 'tr:not(.k-grouping-row) > td', function (e) {\n var td = $(this), isLockedCell = that.lockedTable && td.closest('table')[0] === that.lockedTable[0];\n if (td.hasClass(classNames.editCell) || td.has('a.k-grid-delete').length || td.has('button.k-grid-delete').length || td.closest('tbody')[0] !== that.tbody[0] && !isLockedCell || $(e.target).is(':input') || $(e.target).hasClass(classNames.iconExpand) || $(e.target).hasClass(classNames.iconCollapse)) {\n if (!that.editor) {\n that.dataSource._restorePageSizeAfterAddChild();\n }\n that._preventPageSizeRestore = false;\n return;\n }\n if (that.editor) {\n if (that.editor.end()) {\n if (selectable) {\n $(activeElement()).blur();\n }\n that.closeCell();\n that.editCell(td);\n }\n } else {\n that.editCell(td);\n }\n }).on('mousedown' + NS, 'tr:not(.k-grouping-row) > td', function (e) {\n if (that.editor && that._isPageable() && !isUndefined(that.dataSource._addChildPageSize)) {\n that._preventPageSizeRestore = $(e.target).parents(DOT + classNames.editRow).length > 0;\n } else {\n that._preventPageSizeRestore = false;\n }\n }).on('focusin' + NS, function () {\n if (!$.contains(this, activeElement())) {\n clearTimeout(that._closeCellTimeout);\n that._closeCellTimeout = null;\n }\n }).on('focusout' + NS, function (e) {\n that._closeCellTimeout = setTimeout(function () {\n closeCell(e);\n }, 1);\n });\n }\n },\n _commandByName: function (name) {\n var columns = this.columns;\n var toolbar = $.isArray(this.options.toolbar) ? this.options.toolbar : [];\n var i, j, commands, currentName;\n name = name.toLowerCase();\n if (defaultCommands[name]) {\n return defaultCommands[name];\n }\n for (i = 0; i < columns.length; i++) {\n commands = columns[i].command;\n if (commands) {\n for (j = 0; j < commands.length; j++) {\n currentName = commands[j].name;\n if (!currentName) {\n continue;\n }\n if (currentName.toLowerCase() == name) {\n return commands[j];\n }\n }\n }\n }\n for (i = 0; i < toolbar.length; i++) {\n currentName = toolbar[i].name;\n if (!currentName) {\n continue;\n }\n if (currentName.toLowerCase() == name) {\n return toolbar[i];\n }\n }\n },\n _commandClick: function (e) {\n var button = $(e.currentTarget);\n var commandName = button.attr('data-command');\n var command = this._commandByName(commandName);\n var row = button.parentsUntil(this.wrapper, 'tr');\n row = row.length ? row : undefined;\n if (command) {\n if (command.methodName) {\n this[command.methodName](row);\n } else if (command.click) {\n command.click.call(this, e);\n }\n e.preventDefault();\n }\n },\n _ensureExpandableColumn: function () {\n if (this._autoExpandable) {\n delete this._autoExpandable.expandable;\n }\n var visibleColumns = grep(this.columns, not(is('hidden')));\n var expandableColumns = grep(visibleColumns, is('expandable'));\n if (this.columns.length && !expandableColumns.length) {\n this._autoExpandable = visibleColumns[0];\n visibleColumns[0].expandable = true;\n }\n },\n _columns: function () {\n var columns = this.options.columns || [];\n this.columns = map(columns, function (column) {\n column = typeof column === 'string' ? { field: column } : column;\n return extend({ encoded: true }, column);\n });\n var lockedCols = lockedColumns(columns);\n if (lockedCols.length > 0) {\n this._hasLockedColumns = true;\n this.columns = lockedCols.concat(nonLockedColumns(this.columns));\n }\n this.columns = normalizeColumns(this.columns);\n this._ensureExpandableColumn();\n this._columnTemplates();\n this._columnAttributes();\n },\n _columnTemplates: function () {\n var idx, length, column;\n var columns = leafColumns(this.columns);\n for (idx = 0, length = columns.length; idx < length; idx++) {\n column = columns[idx];\n if (column.template) {\n column.template = kendo.template(column.template);\n }\n if (column.headerTemplate) {\n column.headerTemplate = kendo.template(column.headerTemplate);\n }\n if (column.footerTemplate) {\n column.footerTemplate = kendo.template(column.footerTemplate);\n }\n }\n },\n _columnAttributes: function () {\n var idx, length;\n var columns = this.columns;\n function convertStyle(attr) {\n var properties, i, declaration;\n if (attr && attr.style) {\n properties = attr.style.split(';');\n attr.style = {};\n for (i = 0; i < properties.length; i++) {\n declaration = properties[i].split(':');\n var name = $.trim(declaration[0]);\n if (name) {\n attr.style[$.camelCase(name)] = $.trim(declaration[1]);\n }\n }\n }\n }\n for (idx = 0, length = columns.length; idx < length; idx++) {\n convertStyle(columns[idx].attributes);\n convertStyle(columns[idx].headerAttributes);\n }\n },\n _layout: function () {\n var columns = this.columns;\n var element = this.element;\n var layout = '';\n this.wrapper = element.addClass(classNames.wrapper);\n layout = '
';\n if (this._hasLockedColumns) {\n layout += '
' + '' + '' + '' + '
' + '
';\n }\n layout += '
' + '' + '' + '' + '
' + '
' + '
';\n if (this._hasLockedColumns) {\n layout += '
' + '' + '' + '' + '
' + '
';\n }\n layout += '
' + '' + '' + '' + '
' + '
';\n if (!this.options.scrollable) {\n layout = '' + '' + '' + '' + '
';\n }\n if (this.options.toolbar) {\n layout = '
' + layout;\n }\n element.append(kendo.template(layout)(classNames) + '
');\n this.toolbar = element.find(DOT + classNames.gridToolbar);\n var header = element.find(DOT + classNames.gridHeader).find('thead').addBack().filter('thead');\n this.thead = header.last();\n if (this.options.scrollable) {\n var rtl = kendo.support.isRtl(element);\n element.find('div.' + classNames.gridHeader).css(rtl ? 'padding-left' : 'padding-right', kendo.support.scrollbar());\n }\n var content = element.find(DOT + classNames.gridContentWrap);\n if (!content.length) {\n content = element;\n } else {\n this.content = content;\n }\n this.table = content.find('>table');\n this.tbody = this.table.find('>tbody');\n if (this._hasLockedColumns) {\n this.lockedHeader = header.first().closest('.k-grid-header-locked');\n this.lockedContent = element.find('.k-grid-content-locked');\n this.lockedTable = this.lockedContent.children();\n }\n this._initVirtualTrees();\n this._renderCols();\n this._renderHeader();\n this.angular('compile', function () {\n return {\n elements: header.find('th.k-header').get(),\n data: map(columns, function (col) {\n return { column: col };\n })\n };\n });\n },\n _initVirtualTrees: function () {\n this._headerColsTree = new kendoDom.Tree(this.thead.prev()[0]);\n this._contentColsTree = new kendoDom.Tree(this.tbody.prev()[0]);\n this._headerTree = new kendoDom.Tree(this.thead[0]);\n this._contentTree = new kendoDom.Tree(this.tbody[0]);\n this._statusTree = new kendoDom.Tree(this.element.children('.k-status')[0]);\n if (this.lockedHeader) {\n this._lockedHeaderColsTree = new kendoDom.Tree(this.lockedHeader.find('colgroup')[0]);\n this._lockedContentColsTree = new kendoDom.Tree(this.lockedTable.find('>colgroup')[0]);\n this._lockedHeaderTree = new kendoDom.Tree(this.lockedHeader.find('thead')[0]);\n this._lockedContentTree = new kendoDom.Tree(this.lockedTable.find('>tbody')[0]);\n }\n },\n _toolbar: function () {\n var options = this.options.toolbar;\n var toolbar = this.toolbar;\n if (!options) {\n return;\n }\n if ($.isArray(options)) {\n var buttons = this._buildCommands(options);\n new kendoDom.Tree(toolbar[0]).render(buttons);\n } else {\n toolbar.append(kendo.template(options)({}));\n }\n this.angular('compile', function () {\n return { elements: toolbar.get() };\n });\n },\n _lockedColumns: function () {\n return grep(this.columns, is('locked'));\n },\n _nonLockedColumns: function () {\n return grep(this.columns, not(is('locked')));\n },\n _templateColumns: function () {\n return grep(this.columns, is('template'));\n },\n _flushCache: function () {\n if (this.options.$angular && this._templateColumns().length) {\n this._contentTree.render([]);\n if (this._hasLockedColumns) {\n this._lockedContentTree.render([]);\n }\n }\n },\n _render: function (options) {\n var that = this;\n options = options || {};\n options = that._renderOptions(options);\n var messages = this.options.messages;\n var pageable = that._isPageable();\n var dataSource = that.dataSource;\n var maps = {\n children: options.filteredChildrenMap || options.childrenMap,\n ids: options.idsMap\n };\n var dataMaps = pageable ? maps && maps.children && maps.ids ? maps : dataSource._initDataMaps(dataSource._getData()) : {};\n var childrenMap = dataMaps.children;\n var idsMap = dataMaps.ids;\n options.childrenMap = childrenMap;\n options.idsMap = idsMap;\n var data = that._dataToRender(options);\n var level = that._renderedModelLevel(data[0], options);\n var uidAttr = kendo.attr('uid');\n var selected = this.select().removeClass('k-state-selected').map(function (_, row) {\n return $(row).attr(uidAttr);\n });\n var viewChildrenMap;\n this._absoluteIndex = 0;\n this._angularItems('cleanup');\n this._angularFooters('cleanup');\n this._flushCache();\n that._clearRenderMap();\n if (options.error) {\n this._showStatus(kendo.template('#: messages.requestFailed # ' + '')({\n buttonClass: [\n classNames.button,\n classNames.retry\n ].join(' '),\n messages: messages\n }));\n } else if (!data.length) {\n this._showStatus(kendo.htmlEncode(messages.noRows));\n } else {\n if (pageable) {\n viewChildrenMap = that._viewChildrenMap(options);\n }\n this._hideStatus();\n this._contentTree.render(this._trs({\n columns: leafColumns(nonLockedColumns(this.columns)),\n editedColumn: options.editedColumn,\n editedColumnIndex: options.editedColumnIndex,\n aggregates: options.aggregates,\n selected: selected,\n data: data,\n childrenMap: childrenMap,\n viewChildrenMap: viewChildrenMap,\n visible: true,\n level: 0\n }));\n if (this._hasLockedColumns) {\n this._absoluteIndex = 0;\n this._lockedContentTree.render(this._trs({\n columns: leafColumns(lockedColumns(this.columns)),\n editedColumn: options.editedColumn,\n editedColumnIndex: options.editedColumnIndex,\n aggregates: options.aggregates,\n selected: selected,\n data: data,\n childrenMap: childrenMap,\n viewChildrenMap: viewChildrenMap,\n visible: true,\n level: level\n }));\n }\n }\n if (this._touchScroller) {\n this._touchScroller.contentResized();\n }\n this._muteAngularRebind(function () {\n this._angularItems('compile');\n this._angularFooters('compile');\n });\n this.items().filter(function () {\n return $.inArray($(this).attr(uidAttr), selected) >= 0;\n }).addClass('k-state-selected');\n this._syncLockedContentHeight();\n that._togglePagerVisibility();\n },\n _renderProgress: function (toggle) {\n kendo.ui.progress(this.wrapper, toggle);\n },\n _renderOptions: function (options) {\n options = options || {};\n var that = this;\n var dataMaps = that.dataSource._getDataMaps();\n var filter = that.dataSource.filter();\n if (that._isPageable()) {\n options.childrenMap = dataMaps.children;\n options.idsMap = dataMaps.ids;\n if (filter) {\n options.filteredChildrenMap = dataMaps.filteredChildren;\n }\n }\n return options;\n },\n _renderedModelLevel: function (model, options) {\n return !this._isPageable() ? 0 : this.dataSource._pageableModelLevel(model, options);\n },\n _viewChildrenMap: function (options) {\n options = options || {};\n var that = this;\n var dataSource = that.dataSource;\n var viewChildrenMap = dataSource.childrenMap(dataSource.view());\n var idField = dataSource._modelIdField();\n var parentsNotInView = dataSource._parentNodesNotInView();\n var parentNotInView;\n var parentNotInViewId;\n var parents;\n var parent;\n var parentId;\n var child;\n var childId;\n var parentsCopy;\n that._clearRenderMap();\n for (var i = 0; i < parentsNotInView.length; i++) {\n parentNotInView = parentsNotInView[i];\n parentNotInViewId = parentNotInView[idField];\n that._markNodeAsNonRenderable(parentNotInViewId);\n viewChildrenMap[parentNotInViewId] = viewChildrenMap[parentNotInViewId] || [];\n parents = dataSource._parentNodes(parentNotInView);\n parentsCopy = parents.slice();\n parentsCopy.push(parentNotInView);\n for (var parentIndex = 0; parentIndex < parentsCopy.length - 1; parentIndex++) {\n parent = parentsCopy[parentIndex];\n parentId = parent[idField];\n that._markNodeAsNonRenderable(parentId);\n viewChildrenMap[parentId] = viewChildrenMap[parentId] || [];\n child = parentsCopy[parentIndex + 1];\n childId = child[idField];\n that._markNodeAsNonRenderable(childId);\n viewChildrenMap[childId] = viewChildrenMap[childId] || [];\n if (viewChildrenMap[parentId].indexOf(child) === -1) {\n viewChildrenMap[parentId].unshift(child);\n }\n }\n }\n return viewChildrenMap;\n },\n _clearRenderMap: function () {\n this._skipRenderingMap = {};\n },\n _dataToRender: function (options) {\n var that = this;\n if (that._isPageable()) {\n return that.dataSource._pageableRootNodes(options);\n }\n return that.dataSource.rootNodes();\n },\n _markNodeAsNonRenderable: function (nodeId) {\n this._skipRenderingMap[nodeId] = true;\n },\n _adjustRowsHeight: function (table1, table2) {\n if (!this._hasLockedColumns) {\n return;\n }\n var rows = table1[0].rows;\n var length = rows.length;\n var idx;\n var rows2 = table2[0].rows;\n var containers = table1.add(table2);\n var containersLength = containers.length;\n var heights = [];\n for (idx = 0; idx < length; idx++) {\n if (!rows2[idx]) {\n break;\n }\n if (rows[idx].style.height) {\n rows[idx].style.height = rows2[idx].style.height = '';\n }\n }\n for (idx = 0; idx < length; idx++) {\n if (!rows2[idx]) {\n break;\n }\n var offsetHeight1 = rows[idx].offsetHeight;\n var offsetHeight2 = rows2[idx].offsetHeight;\n var height = 0;\n if (offsetHeight1 > offsetHeight2) {\n height = offsetHeight1;\n } else if (offsetHeight1 < offsetHeight2) {\n height = offsetHeight2;\n }\n heights.push(height);\n }\n for (idx = 0; idx < containersLength; idx++) {\n containers[idx].style.display = 'none';\n }\n for (idx = 0; idx < length; idx++) {\n if (heights[idx]) {\n rows[idx].style.height = rows2[idx].style.height = heights[idx] + 1 + 'px';\n }\n }\n for (idx = 0; idx < containersLength; idx++) {\n containers[idx].style.display = '';\n }\n },\n _ths: function (columns, rowSpan) {\n var ths = [];\n var column, title, children, cellClasses, attr, headerContent;\n for (var i = 0, length = columns.length; i < length; i++) {\n column = columns[i];\n children = [];\n cellClasses = [classNames.header];\n if (column.headerTemplate) {\n title = column.headerTemplate({});\n } else {\n title = column.title || column.field || '';\n }\n if (column.headerTemplate) {\n headerContent = kendoHtmlElement(title);\n } else {\n headerContent = kendoTextElement(title);\n }\n if (column.sortable) {\n children.push(kendoDomElement('a', {\n href: '#',\n className: classNames.link\n }, [headerContent]));\n } else {\n children.push(headerContent);\n }\n attr = {\n 'data-field': column.field,\n 'data-title': column.title,\n 'style': column.hidden === true ? { 'display': 'none' } : {},\n className: cellClasses.join(' '),\n 'role': 'columnheader'\n };\n if (!column.columns) {\n attr.rowSpan = rowSpan ? rowSpan : 1;\n }\n if (column.headerAttributes) {\n if (column.headerAttributes.colSpan === 1) {\n delete column.headerAttributes.colSpan;\n }\n if (column.headerAttributes['class']) {\n attr.className += ' ' + column.headerAttributes['class'];\n delete column.headerAttributes['class'];\n }\n }\n if (column['data-index'] > -1) {\n attr['data-index'] = column['data-index'];\n }\n attr = extend(true, {}, attr, column.headerAttributes);\n ths.push(kendoDomElement('th', attr, children));\n }\n return ths;\n },\n _cols: function (columns) {\n var cols = [];\n var width, attr;\n for (var i = 0; i < columns.length; i++) {\n if (columns[i].hidden === true) {\n continue;\n }\n width = columns[i].width;\n attr = {};\n if (width && parseInt(width, 10) !== 0) {\n attr.style = { width: typeof width === 'string' ? width : width + 'px' };\n }\n cols.push(kendoDomElement('col', attr));\n }\n return cols;\n },\n _clearColsCache: function () {\n this._headerColsTree.render([]);\n if (this.options.scrollable) {\n this._contentColsTree.render([]);\n }\n if (this._hasLockedColumns) {\n this._lockedHeaderColsTree.render([]);\n this._lockedContentColsTree.render([]);\n }\n },\n _renderCols: function () {\n var columns = nonLockedColumns(this.columns);\n this._headerColsTree.render(this._cols(leafColumns(columns)));\n if (this.options.scrollable) {\n this._contentColsTree.render(this._cols(leafColumns(columns)));\n }\n if (this._hasLockedColumns) {\n columns = lockedColumns(this.columns);\n this._lockedHeaderColsTree.render(this._cols(leafColumns(columns)));\n this._lockedContentColsTree.render(this._cols(leafColumns(columns)));\n }\n },\n _retrieveFirstColumn: function (columns, rows) {\n var result = $();\n if (rows.length && columns[0]) {\n var column = columns[0];\n while (column.columns && column.columns.length) {\n column = column.columns[0];\n rows = rows.filter(':not(:first())');\n }\n result = result.add(rows);\n }\n return result;\n },\n _updateFirstColumnClass: function () {\n var that = this;\n var columns = that.columns || [];\n var tr = that.thead.find('>tr:not(:first)');\n var rows;\n columns = nonLockedColumns(columns);\n rows = that._retrieveFirstColumn(columns, tr);\n if (that.lockedHeader) {\n tr = that.lockedHeader.find('thead>tr:not(.k-filter-row):not(:first)');\n columns = lockedColumns(that.columns);\n rows = rows.add(that._retrieveFirstColumn(columns, tr));\n }\n rows.each(function () {\n var ths = $(this).find('th');\n ths.removeClass('k-first');\n ths.eq(0).addClass('k-first');\n });\n },\n _updateRowSpans: function (rows) {\n for (var i = rows.length - 1; i >= 0; i--) {\n var included = visibleChildColumns(rows[i].cells).length > 0;\n if (included) {\n rows[i].rowSpan = rows.length - i;\n }\n }\n },\n _setColumnDataIndexes: function (columns) {\n for (var i = 0; i < columns.length; i++) {\n columns[i]['data-index'] = i;\n }\n },\n _updateColumnCellIndex: function () {\n var header;\n var offset = 0;\n if (this.lockedHeader) {\n header = this.lockedHeader.find('thead');\n offset = updateCellIndex(header, lockedColumns(this.columns));\n }\n updateCellIndex(this.thead, nonLockedColumns(this.columns), offset);\n },\n _setParentsVisibility: function (column, visible) {\n var columns = this.columns;\n var idx;\n var parents = [];\n var parent;\n var predicate = visible ? function (p) {\n return visibleColumns(p.columns).length && p.hidden;\n } : function (p) {\n return !visibleColumns(p.columns).length && !p.hidden;\n };\n if (columnParents(column, columns, parents) && parents.length) {\n for (idx = parents.length - 1; idx >= 0; idx--) {\n parent = parents[idx];\n if (predicate(parent)) {\n parent.hidden = !visible;\n }\n }\n }\n },\n _prepareColumns: function (rows, columns, parentCell, parentRow, parentColumn) {\n var row = parentRow || rows[rows.length - 1];\n var childRow = rows[row.index + 1];\n var totalColSpan = 0;\n for (var idx = 0; idx < columns.length; idx++) {\n var cell = $.extend({}, columns[idx], { headerAttributes: columns[idx].headerAttributes || {} });\n row.cells.push(cell);\n if (columns[idx].columns && columns[idx].columns.length) {\n if (!childRow) {\n childRow = {\n rowSpan: 0,\n cells: [],\n index: rows.length\n };\n rows.push(childRow);\n }\n if (columns[idx].columns.length) {\n cell.headerAttributes.colSpan = visibleChildColumns(columns[idx].columns).length || 1;\n cell.headerAttributes['data-colspan'] = leafColumns(columns[idx].columns).length;\n }\n this._prepareColumns(rows, columns[idx].columns, cell, childRow, columns[idx]);\n if (!cell.hidden) {\n totalColSpan += cell.headerAttributes.colSpan - 1;\n }\n row.rowSpan = rows.length - row.index;\n }\n columns[idx].rowIndex = row.index;\n if (parentColumn) {\n columns[idx].parentColumn = parentColumn;\n }\n columns[idx].cellIndex = row.cells.length - 1;\n }\n if (parentCell) {\n parentCell.headerAttributes.colSpan += totalColSpan;\n }\n },\n _renderHeaderTree: function (tree, columns, hasMultiColumnHeaders) {\n var idx;\n var rows = [];\n var rowsToRender = [];\n if (hasMultiColumnHeaders) {\n rows = [{\n rowSpan: 1,\n cells: [],\n index: 0\n }];\n this._prepareColumns(rows, columns);\n this._updateRowSpans(rows);\n for (idx = 0; idx < rows.length; idx++) {\n rowsToRender.push(kendoDomElement('tr', { 'role': 'row' }, this._ths(rows[idx].cells, rows[idx].rowSpan)));\n }\n tree.render(rowsToRender);\n } else {\n tree.render([kendoDomElement('tr', { 'role': 'row' }, this._ths(columns))]);\n }\n },\n _renderHeader: function () {\n var columns = nonLockedColumns(this.columns);\n var hasMultiColumnHeaders = grep(this.columns, function (item) {\n return item.columns !== undefined;\n }).length > 0;\n this._setColumnDataIndexes(leafColumns(this.columns));\n this._renderHeaderTree(this._headerTree, columns, hasMultiColumnHeaders);\n if (this._hasLockedColumns) {\n columns = lockedColumns(this.columns);\n this._renderHeaderTree(this._lockedHeaderTree, columns, hasMultiColumnHeaders);\n this._applyLockedContainersWidth();\n this._syncLockedHeaderHeight();\n }\n this._updateFirstColumnClass();\n },\n _applyLockedContainersWidth: function () {\n if (!this._hasLockedColumns) {\n return;\n }\n var lockedWidth = columnsWidth(this.lockedHeader.find('>table>colgroup>col'));\n var headerTable = this.thead.parent();\n var nonLockedWidth = columnsWidth(headerTable.find('>colgroup>col'));\n var wrapperWidth = this.wrapper[0].clientWidth;\n var scrollbar = kendo.support.scrollbar();\n if (lockedWidth >= wrapperWidth) {\n lockedWidth = wrapperWidth - 3 * scrollbar;\n }\n this.lockedHeader.add(this.lockedContent).width(lockedWidth);\n headerTable.add(this.table).width(nonLockedWidth);\n var width = wrapperWidth - lockedWidth - 2;\n this.content.width(width);\n headerTable.parent().width(width - scrollbar);\n },\n _trs: function (options) {\n var that = this;\n var model, attr, className, hasChildren, childNodes, i, length;\n var modelId;\n var rows = [];\n var level = options.level;\n var data = options.data;\n var dataSource = this.dataSource;\n var aggregates = dataSource.aggregates() || {};\n var idField = dataSource._modelIdField();\n var parentIdField = dataSource._modelParentIdField();\n var columns = options.columns;\n var pageable = that._isPageable();\n var childrenMap = options.childrenMap || dataSource.childrenMap(dataSource._getData());\n for (i = 0, length = data.length; i < length; i++) {\n className = [];\n model = data[i];\n modelId = model[idField];\n childNodes = pageable ? childrenMap[modelId] : model.loaded() ? dataSource.childNodes(model) : [];\n hasChildren = childNodes && childNodes.length;\n attr = { 'role': 'row' };\n attr[kendo.attr('uid')] = model.uid;\n if (hasChildren) {\n attr['aria-expanded'] = !!model.expanded;\n }\n if (options.visible) {\n if (!pageable || pageable && !that._skipRenderingMap[modelId]) {\n if (this._absoluteIndex % 2 !== 0) {\n className.push(classNames.alt);\n }\n this._absoluteIndex++;\n }\n } else {\n attr.style = { display: 'none' };\n }\n if ($.inArray(model.uid, options.selected) >= 0) {\n className.push(classNames.selected);\n }\n if (hasChildren) {\n className.push(classNames.group);\n }\n if (model._edit) {\n className.push('k-grid-edit-row');\n }\n attr.className = className.join(' ');\n if (!that._skipRenderingMap[modelId]) {\n var row = this._tds({\n model: model,\n attr: attr,\n level: pageable ? that._renderedModelLevel(model, options) : level,\n editedColumn: options.editedColumn,\n editedColumnIndex: options.editedColumnIndex\n }, columns, proxy(this._td, this));\n rows.push(row);\n }\n if (hasChildren) {\n if (pageable) {\n childNodes = (options.viewChildrenMap || {})[modelId] || [];\n }\n if (childNodes.length === 0) {\n continue;\n }\n rows = rows.concat(this._trs({\n columns: columns,\n editedColumn: options.editedColumn,\n editedColumnIndex: options.editedColumnIndex,\n aggregates: aggregates,\n selected: options.selected,\n visible: pageable ? options.visible : options.visible && !!model.expanded,\n data: childNodes,\n childrenMap: options.childrenMap || childrenMap,\n viewChildrenMap: options.viewChildrenMap,\n level: level + 1\n }));\n }\n }\n if (this._hasFooterTemplate() && model) {\n attr = {\n className: classNames.footerTemplate,\n 'data-parentId': model[parentIdField]\n };\n if (!options.visible) {\n attr.style = { display: 'none' };\n }\n rows.push(this._tds({\n model: aggregates[model[parentIdField]],\n attr: attr,\n level: level,\n editedColumn: options.editedColumn,\n editedColumnIndex: options.editedColumnIndex\n }, columns, this._footerId));\n }\n return rows;\n },\n _footerId: function (options) {\n var content = [];\n var column = options.column;\n var template = options.column.footerTemplate || $.noop;\n var aggregates = options.model[column.field] || {};\n var attr = {\n 'role': 'gridcell',\n 'style': column.hidden === true ? { 'display': 'none' } : {}\n };\n if (column.expandable) {\n content = content.concat(createPlaceholders({\n level: options.level + 1,\n className: classNames.iconPlaceHolder\n }));\n }\n if (column.attributes) {\n extend(attr, column.attributes);\n }\n content.push(kendoHtmlElement(template(aggregates) || ''));\n return kendoDomElement('td', attr, content);\n },\n _hasFooterTemplate: function () {\n return !!grep(this.columns, function (c) {\n return c.footerTemplate;\n }).length;\n },\n _tds: function (options, columns, renderer) {\n var children = [];\n var column;\n var editedColumnField = (options.editedColumn || {}).field;\n var incellEditing = this._isIncellEditable();\n var length = columns.length;\n for (var i = 0; i < length; i++) {\n column = columns[i];\n var col = renderer({\n model: options.model,\n column: column,\n editColumn: !incellEditing || incellEditing && column.field === editedColumnField && options.editedColumnIndex === i,\n level: options.level\n });\n children.push(col);\n }\n return kendoDomElement('tr', options.attr, children);\n },\n _td: function (options) {\n var children = [];\n var model = options.model;\n var column = options.column;\n var iconClass;\n var attr = {\n 'role': 'gridcell',\n 'style': column.hidden === true ? { 'display': 'none' } : {}\n };\n var incellEditing = this._isIncellEditable();\n var columnHasEditCommand = false;\n if (column.attributes) {\n extend(true, attr, column.attributes);\n }\n if (model._edit && column.field && options.editColumn && (incellEditing || !incellEditing && isColumnEditable(column, model))) {\n attr[kendo.attr('container-for')] = column.field;\n if (incellEditing) {\n if (attr.className && attr.className.indexOf(classNames.editCell) !== -1) {\n attr.className += ' ' + classNames.editCell;\n } else if (!attr.className) {\n attr.className = classNames.editCell;\n }\n }\n } else {\n if (column.expandable) {\n children = createPlaceholders({\n level: options.level,\n className: classNames.iconPlaceHolder\n });\n iconClass = [classNames.icon];\n if (model.hasChildren) {\n iconClass.push(model.expanded ? classNames.iconCollapse : classNames.iconExpand);\n } else {\n iconClass.push(classNames.iconHidden);\n }\n if (model._error) {\n iconClass.push(classNames.refresh);\n } else if (!model.loaded() && model.expanded) {\n iconClass.push(classNames.loading);\n }\n children.push(kendoDomElement('span', { className: iconClass.join(' ') }));\n attr.style['white-space'] = 'nowrap';\n }\n if (isDirtyColumn(column, model)) {\n if (attr.className) {\n attr.className += classNames.dirtyCell;\n } else if (!attr.className) {\n attr.className = classNames.dirtyCell;\n }\n }\n if (column.command) {\n if (attr.className && attr.className.indexOf('k-command-cell') !== -1) {\n attr.className += ' k-command-cell';\n } else if (!attr.className) {\n attr.className = 'k-command-cell';\n }\n if (attr['class']) {\n attr.className = attr['class'] + ' ' + attr.className;\n }\n columnHasEditCommand = grep(column.command, function (command) {\n return command === EDIT || command.name === EDIT;\n }).length > 0;\n if (model._edit && !this._isIncellEditable() && columnHasEditCommand) {\n children = this._buildCommands([\n 'update',\n 'canceledit'\n ]);\n } else {\n children = this._buildCommands(column.command);\n }\n } else {\n children.push(this._cellContent(column, model));\n }\n }\n return kendoDomElement('td', attr, children);\n },\n _cellContent: function (column, model) {\n var that = this;\n var value;\n var incellEditing = that._isIncellEditable();\n var dirtyIndicator = incellEditing ? that._evalDirtyIndicatorTemplate(column, model) : '';\n if (column.template) {\n value = that._evalColumnTemplate(column, model);\n } else if (column.field) {\n value = model.get(column.field);\n if (value !== null && !isUndefined(value)) {\n if (column.format) {\n value = kendo.format(column.format, value);\n }\n value = dirtyIndicator + value;\n } else {\n value = dirtyIndicator;\n }\n } else if (value === null || isUndefined(value)) {\n value = '';\n }\n if (column.template || !column.encoded) {\n return kendoHtmlElement(value);\n } else {\n if (incellEditing) {\n return kendoHtmlElement(value);\n } else {\n return kendoTextElement(value);\n }\n }\n },\n _evalColumnTemplate: function (column, model) {\n if (this._isIncellEditable()) {\n return this._evalCustomColumnTemplate(column, model);\n } else {\n return column.template(model);\n }\n },\n _evalCustomColumnTemplate: function (column, model) {\n var that = this;\n var templateSettings = that._customTemplateSettings();\n var columnTemplateAlias = '#=this.columnTemplate(' + templateSettings.paramName + ')#';\n var templateString = that._dirtyIndicatorTemplate(column.field) + columnTemplateAlias;\n var templateFunction = proxy(kendoTemplate(templateString, templateSettings), { columnTemplate: column.template });\n return templateFunction(model);\n },\n _evalDirtyIndicatorTemplate: function (column, model) {\n var dirtyIndicatorTemplate = this._dirtyIndicatorTemplate(column.field);\n return kendoTemplate(dirtyIndicatorTemplate)(model);\n },\n _dirtyIndicatorTemplate: function (field) {\n var that = this;\n var dirtyField;\n var templateSettings = that._customTemplateSettings();\n var paramName = templateSettings.paramName;\n if (field && paramName) {\n dirtyField = field.charAt(0) === '[' ? kendo.expr(field, paramName + '.dirtyFields') : paramName + '.dirtyFields[\\'' + field + '\\']';\n return '#= ' + paramName + ' && ' + paramName + '.dirty && ' + paramName + '.dirtyFields && ' + dirtyField + ' ? \\'\\' : \\'\\' #';\n }\n return '';\n },\n _customTemplateSettings: function () {\n return extend({}, kendo.Template, this.options.templateSettings);\n },\n _buildCommands: function (commands) {\n var i, result = [];\n for (i = 0; i < commands.length; i++) {\n result.push(this._button(commands[i]));\n }\n return result;\n },\n _button: function (command) {\n var name = (command.name || command).toLowerCase();\n var text = this.options.messages.commands[name];\n var icon = [];\n command = extend({}, defaultCommands[name], { text: text }, command);\n if (command.imageClass) {\n icon.push(kendoDomElement('span', {\n className: [\n 'k-icon',\n command.imageClass\n ].join(' ')\n }));\n }\n return kendoDomElement('button', {\n 'type': 'button',\n 'data-command': name,\n className: [\n 'k-button',\n 'k-button-icontext',\n command.className\n ].join(' ')\n }, icon.concat([kendoTextElement(command.text || command.name)]));\n },\n _positionResizeHandle: function (e) {\n var th = $(e.currentTarget);\n var resizeHandle = this.resizeHandle;\n var position = th.position();\n var left;\n var cellWidth = outerWidth(th);\n var container = th.closest('div');\n var indicatorWidth = this.options.columnResizeHandleWidth || 3;\n left = cellWidth;\n if (!resizeHandle) {\n resizeHandle = this.resizeHandle = $('
');\n }\n var cells = leafDataCells(th.closest('thead')).filter(':visible');\n if (isRtl) {\n left = th.position().left;\n } else {\n for (var idx = 0; idx < cells.length; idx++) {\n if (cells[idx] == th[0]) {\n break;\n }\n left += cells[idx].offsetWidth;\n }\n }\n container.append(resizeHandle);\n resizeHandle.show().css({\n top: position.top,\n left: left - indicatorWidth - 1,\n height: outerHeight(th),\n width: indicatorWidth * 3\n }).data('th', th);\n var that = this;\n resizeHandle.off('dblclick' + NS).on('dblclick' + NS, function () {\n var index = th.index();\n if ($.contains(that.thead[0], th[0])) {\n index += grep(that.columns, function (val) {\n return val.locked && !val.hidden;\n }).length;\n }\n that.autoFitColumn(index);\n });\n },\n autoFitColumn: function (column) {\n var that = this, options = that.options, columns = that.columns, index, browser = kendo.support.browser, th, headerTable, isLocked, visibleLocked = that.lockedHeader ? leafDataCells(that.lockedHeader.find('>table>thead')).filter(isCellVisible).length : 0, col;\n if (typeof column == 'number') {\n column = columns[column];\n } else if (isPlainObject(column)) {\n column = grep(columns, function (item) {\n return item === column;\n })[0];\n } else {\n column = grep(columns, function (item) {\n return item.field === column;\n })[0];\n }\n if (!column || column.hidden) {\n return;\n }\n index = inArray(column, columns);\n isLocked = column.locked;\n if (isLocked) {\n headerTable = that.lockedHeader.children('table');\n } else {\n headerTable = that.thead.parent();\n }\n th = headerTable.find('[data-index=\\'' + index + '\\']');\n var contentTable = isLocked ? that.lockedTable : that.table, footer = that.footer || $();\n if (that.footer && that.lockedContent) {\n footer = isLocked ? that.footer.children('.k-grid-footer-locked') : that.footer.children('.k-grid-footer-wrap');\n }\n var footerTable = footer.find('table').first();\n if (that.lockedHeader && visibleLocked >= index && !isLocked) {\n index -= visibleLocked;\n }\n for (var j = 0; j < columns.length; j++) {\n if (columns[j] === column) {\n break;\n } else {\n if (columns[j].hidden) {\n index--;\n }\n }\n }\n if (options.scrollable) {\n col = headerTable.find('col:not(.k-group-col):not(.k-hierarchy-col):eq(' + index + ')').add(contentTable.children('colgroup').find('col:not(.k-group-col):not(.k-hierarchy-col):eq(' + index + ')')).add(footerTable.find('colgroup').find('col:not(.k-group-col):not(.k-hierarchy-col):eq(' + index + ')'));\n } else {\n col = contentTable.children('colgroup').find('col:not(.k-group-col):not(.k-hierarchy-col):eq(' + index + ')');\n }\n var tables = headerTable.add(contentTable).add(footerTable);\n var oldColumnWidth = outerWidth(th);\n col.width('');\n tables.css('table-layout', 'fixed');\n col.width('auto');\n tables.addClass('k-autofitting');\n tables.css('table-layout', '');\n var newColumnWidth = Math.ceil(Math.max(outerWidth(th), outerWidth(contentTable.find('tr').eq(0).children('td:visible').eq(index)), outerWidth(footerTable.find('tr').eq(0).children('td:visible').eq(index))));\n col.width(newColumnWidth);\n column.width = newColumnWidth;\n if (options.scrollable) {\n var cols = headerTable.find('col'), colWidth, totalWidth = 0;\n for (var idx = 0, length = cols.length; idx < length; idx += 1) {\n colWidth = cols[idx].style.width;\n if (colWidth && colWidth.indexOf('%') == -1) {\n totalWidth += parseInt(colWidth, 10);\n } else {\n totalWidth = 0;\n break;\n }\n }\n if (totalWidth) {\n tables.each(function () {\n this.style.width = totalWidth + 'px';\n });\n }\n }\n if (browser.msie && browser.version == 8) {\n tables.css('display', 'inline-table');\n setTimeout(function () {\n tables.css('display', 'table');\n }, 1);\n }\n tables.removeClass('k-autofitting');\n that.trigger(COLUMNRESIZE, {\n column: column,\n oldWidth: oldColumnWidth,\n newWidth: newColumnWidth\n });\n that._applyLockedContainersWidth();\n that._syncLockedContentHeight();\n that._syncLockedHeaderHeight();\n },\n _adjustLockedHorizontalScrollBar: function () {\n var table = this.table, content = table.parent();\n var scrollbar = table[0].offsetWidth > content[0].clientWidth ? kendo.support.scrollbar() : 0;\n this.lockedContent.height(content.height() - scrollbar);\n },\n _syncLockedContentHeight: function () {\n if (this.lockedTable) {\n if (!this._touchScroller) {\n this._adjustLockedHorizontalScrollBar();\n }\n this._adjustRowsHeight(this.table, this.lockedTable);\n }\n },\n _syncLockedHeaderHeight: function () {\n if (this.lockedHeader) {\n var lockedTable = this.lockedHeader.children('table');\n var table = this.thead.parent();\n this._adjustRowsHeight(lockedTable, table);\n syncTableHeight(lockedTable, table);\n }\n },\n _resizable: function () {\n if (!this.options.resizable) {\n return;\n }\n if (this.resizable) {\n this.resizable.destroy();\n }\n var treelist = this;\n $(this.lockedHeader).find('thead').add(this.thead).on('mousemove' + NS, 'th', $.proxy(this._positionResizeHandle, this));\n this.resizable = new kendo.ui.Resizable(this.wrapper, {\n handle: '.k-resize-handle',\n start: function (e) {\n var th = $(e.currentTarget).data('th');\n var index = $.inArray(th[0], leafDataCells(th.closest('thead')).filter(':visible'));\n var colSelector = 'col:eq(' + index + ')';\n var header, contentTable;\n treelist.wrapper.addClass('k-grid-column-resizing');\n if (treelist.lockedHeader && $.contains(treelist.lockedHeader[0], th[0])) {\n header = treelist.lockedHeader;\n contentTable = treelist.lockedTable;\n } else {\n header = treelist.thead.parent();\n contentTable = treelist.table;\n }\n this.col = contentTable.children('colgroup').find(colSelector).add(header.find(colSelector));\n this.th = th;\n this.startLocation = e.x.location;\n this.columnWidth = outerWidth(th);\n this.table = this.col.closest('table');\n this.totalWidth = this.table.width();\n },\n resize: function (e) {\n var rtlModifier = isRtl ? -1 : 1;\n var minColumnWidth = 11;\n var delta = e.x.location * rtlModifier - this.startLocation * rtlModifier;\n if (this.columnWidth + delta < minColumnWidth) {\n delta = minColumnWidth - this.columnWidth;\n }\n this.table.width(this.totalWidth + delta);\n this.col.width(this.columnWidth + delta);\n },\n resizeend: function () {\n treelist.wrapper.removeClass('k-grid-column-resizing');\n var field = this.th.attr('data-field');\n var column = grep(leafColumns(treelist.columns), function (c) {\n return c.field == field;\n });\n var newWidth = Math.floor(outerWidth(this.th));\n column[0].width = newWidth;\n treelist._resize();\n treelist._syncLockedContentHeight();\n treelist._syncLockedHeaderHeight();\n treelist.trigger(COLUMNRESIZE, {\n column: column,\n oldWidth: this.columnWidth,\n newWidth: newWidth\n });\n this.table = this.col = this.th = null;\n }\n });\n },\n _sortable: function () {\n var columns;\n var column;\n var sortableInstance;\n var cells;\n var cell, idx, length;\n var sortable = this.options.sortable;\n var hasMultiColumnHeaders = grep(this.columns, function (item) {\n return item.columns !== undefined;\n }).length > 0;\n if (!sortable) {\n return;\n }\n if (hasMultiColumnHeaders) {\n if (this.lockedHeader) {\n cells = sortCells(leafDataCells(this.lockedHeader.find('>table>thead')).add(leafDataCells(this.thead)));\n } else {\n cells = leafDataCells(this.thead);\n }\n } else {\n cells = $(this.lockedHeader).add(this.thead).find('th');\n }\n columns = leafColumns(this.columns);\n for (idx = 0, length = cells.length; idx < length; idx++) {\n column = columns[idx];\n if (column.sortable !== false && !column.command && column.field) {\n cell = cells.eq(idx);\n sortableInstance = cell.data('kendoColumnSorter');\n if (sortableInstance) {\n sortableInstance.destroy();\n }\n cell.kendoColumnSorter(extend({}, sortable, column.sortable, { dataSource: this.dataSource }));\n }\n }\n },\n _filterable: function () {\n var cells;\n var filterable = this.options.filterable;\n var idx;\n var length;\n var columns;\n var column;\n var cell;\n var filterMenuInstance;\n var hasMultiColumnHeaders = grep(this.columns, function (item) {\n return item.columns !== undefined;\n }).length > 0;\n if (!filterable || this.options.columnMenu) {\n return;\n }\n var filterInit = proxy(function (e) {\n this.trigger(FILTERMENUINIT, {\n field: e.field,\n container: e.container\n });\n }, this);\n var filterOpen = proxy(function (e) {\n this.trigger(FILTERMENUOPEN, {\n field: e.field,\n container: e.container\n });\n }, this);\n if (hasMultiColumnHeaders) {\n if (this.lockedHeader) {\n cells = leafDataCells(this.lockedHeader.find('>table>thead')).add(leafDataCells(this.thead));\n } else {\n cells = leafDataCells(this.thead);\n }\n } else {\n cells = $(this.lockedHeader).add(this.thead).find('th');\n }\n columns = leafColumns(this.columns);\n for (idx = 0, length = cells.length; idx < length; idx++) {\n column = columns[idx];\n cell = cells.eq(idx);\n filterMenuInstance = cell.data('kendoFilterMenu');\n if (filterMenuInstance) {\n filterMenuInstance.destroy();\n }\n if (column.command || column.filterable === false) {\n continue;\n }\n cell.kendoFilterMenu(extend(true, {}, filterable, column.filterable, {\n dataSource: this.dataSource,\n init: filterInit,\n open: filterOpen\n }));\n }\n },\n _change: function () {\n this.trigger(CHANGE);\n },\n _isLocked: function () {\n return this.lockedHeader !== null;\n },\n _selectable: function () {\n var that = this;\n var selectable = this.options.selectable;\n var filter;\n var element = this.table;\n var useAllItems;\n var isLocked = that._isLocked();\n var multi;\n var cell;\n if (selectable) {\n selectable = kendo.ui.Selectable.parseOptions(selectable);\n if (this._hasLockedColumns) {\n element = element.add(this.lockedTable);\n useAllItems = selectable.multiple && selectable.cell;\n }\n filter = '>tbody>tr:not(.k-footer-template)';\n if (selectable.cell) {\n filter = filter + '>td';\n }\n this.selectable = new kendo.ui.Selectable(element, {\n filter: filter,\n aria: true,\n multiple: selectable.multiple,\n inputSelectors: '.k-icon.k-i-collapse,.k-icon.k-i-expand',\n change: proxy(this._change, this),\n useAllItems: useAllItems,\n continuousItems: proxy(this._continuousItems, this, filter, selectable.cell),\n relatedTarget: !selectable.cell && this._hasLockedColumns ? proxy(this._selectableTarget, this) : undefined\n });\n if (that.options.navigatable) {\n multi = selectable.multiple;\n cell = selectable.cell;\n element.on('keydown' + NS, function (e) {\n var current = that.current();\n var target = e.target;\n if (e.keyCode === keys.SPACEBAR && !e.shiftKey && $.inArray(target, element) > -1 && !current.is('.k-header')) {\n e.preventDefault();\n e.stopPropagation();\n current = cell ? current : current.parent();\n if (isLocked && !cell) {\n current = current.add(that._relatedRow(current));\n }\n if (multi) {\n if (!e.ctrlKey) {\n that.selectable.clear();\n } else {\n if (current.hasClass(classNames.selected)) {\n current.removeClass(classNames.selected);\n that.trigger(CHANGE);\n return;\n }\n }\n } else {\n that.selectable.clear();\n }\n if (!cell) {\n that.selectable._lastActive = current;\n }\n that.selectable.value(current);\n } else if (!cell && (e.shiftKey && e.keyCode == keys.LEFT || e.shiftKey && e.keyCode == keys.RIGHT || e.shiftKey && e.keyCode == keys.UP || e.shiftKey && e.keyCode == keys.DOWN || e.keyCode === keys.SPACEBAR && e.shiftKey)) {\n e.preventDefault();\n e.stopPropagation();\n current = current.parent();\n if (isLocked) {\n current = current.add(that._relatedRow(current));\n }\n if (multi) {\n if (!that.selectable._lastActive) {\n that.selectable._lastActive = current;\n }\n that.selectable.selectRange(that.selectable._firstSelectee(), current);\n } else {\n that.selectable.clear();\n that.selectable.value(current);\n }\n }\n });\n }\n }\n },\n _continuousItems: function (filter, cell) {\n if (!this.lockedContent) {\n return;\n }\n var lockedItems = $(filter, this.lockedTable);\n var nonLockedItems = $(filter, this.table);\n var columns = cell ? lockedColumns(this.columns).length : 1;\n var nonLockedColumns = cell ? this.columns.length - columns : 1;\n var result = [];\n for (var idx = 0; idx < lockedItems.length; idx += columns) {\n push.apply(result, lockedItems.slice(idx, idx + columns));\n push.apply(result, nonLockedItems.splice(0, nonLockedColumns));\n }\n return result;\n },\n _selectableTarget: function (items) {\n var related;\n var result = $();\n for (var idx = 0, length = items.length; idx < length; idx++) {\n related = this._relatedRow(items[idx]);\n if (inArray(related[0], items) < 0) {\n result = result.add(related);\n }\n }\n return result;\n },\n _relatedRow: function (row) {\n var lockedTable = this.lockedTable;\n row = $(row);\n if (!lockedTable) {\n return row;\n }\n var table = row.closest(this.table.add(this.lockedTable));\n var index = table.find('>tbody>tr').index(row);\n table = table[0] === this.table[0] ? lockedTable : this.table;\n return table.find('>tbody>tr').eq(index);\n },\n select: function (value) {\n var selectable = this.selectable;\n if (!selectable) {\n return $();\n }\n if (typeof value !== 'undefined') {\n if (!selectable.options.multiple) {\n selectable.clear();\n value = value.first();\n }\n if (this._hasLockedColumns) {\n value = value.add($.map(value, proxy(this._relatedRow, this)));\n }\n }\n return selectable.value(value);\n },\n clearSelection: function () {\n var selected = this.select();\n if (selected.length) {\n this.selectable.clear();\n this.trigger(CHANGE);\n }\n },\n _dataSource: function (dataSource) {\n var that = this;\n var ds = this.dataSource;\n var pageable = that.options.pageable;\n if (ds) {\n ds.unbind(CHANGE, this._refreshHandler);\n ds.unbind(ERROR, this._errorHandler);\n ds.unbind(PROGRESS, this._progressHandler);\n }\n this._refreshHandler = proxy(this.refresh, this);\n this._errorHandler = proxy(this._error, this);\n this._progressHandler = proxy(this._progress, this);\n if (isPlainObject(dataSource)) {\n extend(dataSource, {\n table: that.table,\n fields: that.columns\n });\n if (isPlainObject(pageable) && pageable.pageSize !== undefined) {\n dataSource.pageSize = pageable.pageSize;\n }\n }\n ds = this.dataSource = TreeListDataSource.create(dataSource);\n if (pageable) {\n ds._collapsedTotal = undefined;\n }\n ds.bind(CHANGE, this._refreshHandler);\n ds.bind(ERROR, this._errorHandler);\n ds.bind(PROGRESS, this._progressHandler);\n this._dataSourceFetchProxy = proxy(function () {\n this.dataSource.fetch();\n }, this);\n },\n setDataSource: function (dataSource) {\n this._dataSource(dataSource);\n this._sortable();\n this._filterable();\n this._columnMenu();\n this._pageable();\n this._contentTree.render([]);\n if (this.options.autoBind) {\n this.dataSource.fetch();\n }\n },\n dataItem: function (element) {\n if (element instanceof TreeListModel) {\n return element;\n }\n var row = $(element).closest('tr');\n var uid = row.attr(kendo.attr('uid'));\n var model = isUndefined(uid) ? null : this.dataSource.getByUid(uid);\n return model;\n },\n editRow: function (row) {\n var that = this;\n var model;\n if (this._isIncellEditable() || !this.options.editable) {\n return;\n }\n if (typeof row === STRING) {\n row = this.tbody.find(row);\n }\n if (that._isPageable() && that._isPopupEditable() && row instanceof TreeListModel) {\n model = row;\n } else {\n model = this.dataItem(row);\n }\n if (!model) {\n return;\n }\n if (this._editMode() != 'popup') {\n model._edit = true;\n }\n this._cancelEditor();\n if (this.trigger(BEFORE_EDIT, { model: model })) {\n that.dataSource._restorePageSizeAfterAddChild();\n return;\n }\n this._render();\n this._createEditor(model);\n this.trigger(EDIT, {\n container: this.editor.wrapper,\n model: model\n });\n },\n _cancelEdit: function (e) {\n if (!this.editor) {\n return;\n }\n var currentIndex;\n e = extend(e, {\n container: this.editor.wrapper,\n model: this.editor.model\n });\n if (this.trigger(CANCEL, e)) {\n return;\n }\n if (this.options.navigatable) {\n currentIndex = this.items().index($(this.current()).parent());\n }\n this.cancelRow();\n if (this.options.navigatable) {\n this.current(this.items().eq(currentIndex).children().filter(NAVCELL).first());\n focusTable(this.table, true);\n }\n },\n cancelRow: function () {\n if (this._isIncellEditable()) {\n return;\n }\n this._cancelEditor();\n this._render();\n },\n saveRow: function () {\n var editor = this.editor;\n var args;\n if (this._isIncellEditable()) {\n return;\n }\n if (!editor) {\n return;\n }\n args = {\n model: editor.model,\n container: editor.wrapper\n };\n if (editor.end() && !this.trigger(SAVE, args)) {\n this.dataSource.sync();\n }\n },\n addRow: function (parent) {\n var that = this;\n var dataSource = that.dataSource;\n var pageable = that._isPageable();\n var incellEditing = that._isIncellEditable();\n var inlineEditing = that._isInlineEditable();\n var editor = this.editor;\n var index = 0;\n var model = {};\n if (editor && !editor.end() || !this.options.editable) {\n return;\n }\n if (parent) {\n if (!(parent instanceof TreeListModel)) {\n parent = this.dataItem(parent);\n }\n model[parent.parentIdField] = parent.id;\n index = this.dataSource.indexOf(parent) + 1;\n this.expand(parent).then(function () {\n var showNewModelInView = pageable && dataSource._isLastItemInView(parent) && (incellEditing || inlineEditing);\n that._insertAt(model, index, showNewModelInView);\n });\n return;\n }\n this._insertAt(model, index);\n },\n _insertAt: function (model, index, showNewModelInView) {\n var that = this;\n var dataSource = that.dataSource;\n model = that.dataSource.insert(index, model);\n if (showNewModelInView) {\n dataSource._setAddChildPageSize();\n }\n var row = this.itemFor(model);\n var cell;\n if (that._isIncellEditable()) {\n cell = row.children('td').eq(that._firstEditableColumnIndex(row));\n that.editCell(cell);\n } else if (row && row[0]) {\n that.editRow(row);\n } else if (that._isPageable() && that._isPopupEditable()) {\n that.editRow(model);\n }\n },\n _firstEditableColumnIndex: function (container) {\n var that = this;\n var model = that.dataItem(container);\n var columns = leafColumns(that.columns);\n var length = columns.length;\n var column;\n var idx;\n for (idx = 0; idx < length; idx++) {\n column = columns[idx];\n if (model && (!model.editable || model.editable(column.field)) && !column.command && column.field && column.hidden !== true) {\n return idx;\n }\n }\n return -1;\n },\n removeRow: function (row) {\n var model = this.dataItem(row);\n var args = {\n model: model,\n row: row\n };\n if (model && !this.trigger(REMOVE, args)) {\n this.dataSource.remove(model);\n if (!this._isIncellEditable()) {\n this.dataSource.sync();\n }\n }\n },\n _cancelEditor: function () {\n var that = this;\n var model;\n var editor = that.editor;\n if (editor) {\n model = editor.model;\n that._destroyEditor();\n if (!that._isIncellEditable()) {\n that.dataSource.cancelChanges(model);\n } else if (that._shouldRestorePageSize()) {\n that.dataSource._restorePageSizeAfterAddChild();\n }\n model._edit = false;\n }\n that._preventPageSizeRestore = false;\n },\n _shouldRestorePageSize: function () {\n var that = this;\n return that._isPageable() && that._isIncellEditable() && !that._preventPageSizeRestore;\n },\n _destroyEditor: function () {\n if (!this.editor) {\n return;\n }\n this.editor.close();\n this.editor = null;\n },\n _createEditor: function (model) {\n var row = this.itemFor(model);\n var columns = leafColumns(this.columns);\n var leafCols = [];\n for (var idx = 0; idx < columns.length; idx++) {\n leafCols.push(extend({}, columns[idx]));\n delete leafCols[idx].parentColumn;\n }\n row = row.add(this._relatedRow(row));\n var mode = this._editMode();\n var options = {\n columns: leafCols,\n model: model,\n target: this,\n clearContainer: false,\n template: this.options.editable.template\n };\n if (mode == 'inline') {\n this.editor = new Editor(row, options);\n } else {\n extend(options, {\n window: this.options.editable.window,\n commandRenderer: proxy(function () {\n return this._buildCommands([\n 'update',\n 'canceledit'\n ]);\n }, this),\n fieldRenderer: proxy(this._cellContent, this),\n save: proxy(this.saveRow, this),\n cancel: proxy(this._cancelEdit, this),\n appendTo: this.wrapper\n });\n this.editor = new PopupEditor(row, options);\n }\n },\n _createIncellEditor: function (cell, options) {\n var that = this;\n var column = extend({}, options.columns[0]);\n delete column.parentColumn;\n return new IncellEditor(cell, extend({}, {\n fieldRenderer: proxy(that._cellContent, that),\n appendTo: that.wrapper,\n clearContainer: false,\n target: that,\n columns: [column],\n model: options.model,\n change: options.change\n }));\n },\n editCell: function (cell) {\n var that = this;\n cell = $(cell);\n var column = leafColumns(that.columns)[that.cellIndex(cell)];\n var model = that.dataItem(cell);\n if (that._isIncellEditable() && model && isColumnEditable(column, model)) {\n that._editCell(cell, column, model);\n }\n },\n _editCell: function (cell, column, model) {\n var that = this;\n var editedCell;\n if (that.trigger(BEFORE_EDIT, { model: model })) {\n that.dataSource._restorePageSizeAfterAddChild();\n return;\n }\n that.closeCell();\n model._edit = true;\n that._cancelEditor();\n that._render({\n editedColumn: column,\n editedColumnIndex: cell.index()\n });\n editedCell = that.table.add(that.lockedTable).find(DOT + classNames.editCell).first();\n that.editor = that._createIncellEditor(editedCell, {\n columns: [column],\n model: model,\n change: function (e) {\n if (that.trigger(SAVE, {\n values: e.values,\n container: cell,\n model: model\n })) {\n e.preventDefault();\n }\n }\n });\n that._current = editedCell;\n that.trigger(EDIT, {\n container: cell,\n model: model\n });\n },\n closeCell: function (isCancel) {\n var that = this;\n var cell = (that.editor || {}).element;\n var tr;\n var model;\n if (!cell || !cell[0] || !that._isIncellEditable()) {\n return;\n }\n model = that.dataItem(cell);\n if (isCancel && that.trigger(CANCEL, {\n container: cell,\n model: model\n })) {\n return;\n }\n that.trigger(CELL_CLOSE, {\n type: isCancel ? CANCEL : SAVE,\n model: model,\n container: cell\n });\n that._cancelEditor();\n cell.removeClass(classNames.editCell);\n tr = cell.parent().removeClass(classNames.editRow);\n if (that.lockedContent) {\n that._relatedRow(tr).removeClass(classNames.editRow);\n }\n that._render();\n that.trigger(ITEM_CHANGE, {\n item: tr,\n data: model,\n ns: ui\n });\n if (that.lockedContent) {\n adjustRowHeight(tr.css('height', '')[0], that._relatedRow(tr).css('height', '')[0]);\n }\n },\n cancelChanges: function () {\n this.dataSource.cancelChanges();\n },\n saveChanges: function () {\n var that = this;\n var editable = (that.editor || {}).editable;\n var valid = editable && editable.end();\n if ((valid || !editable) && !that.trigger(SAVE_CHANGES)) {\n that.dataSource.sync();\n }\n },\n _editMode: function () {\n var mode = 'inline', editable = this.options.editable;\n if (editable !== true) {\n if (typeof editable == 'string') {\n mode = editable;\n } else {\n mode = editable.mode || mode;\n }\n }\n return mode.toLowerCase();\n },\n _isIncellEditable: function () {\n return this._editMode() === INCELL;\n },\n _isInlineEditable: function () {\n return this._editMode() === INLINE;\n },\n _isPopupEditable: function () {\n return this._editMode() === POPUP;\n },\n hideColumn: function (column) {\n this._toggleColumnVisibility(column, true);\n },\n showColumn: function (column) {\n this._toggleColumnVisibility(column, false);\n },\n _toggleColumnVisibility: function (column, hidden) {\n column = this._findColumn(column);\n if (!column || column.hidden === hidden) {\n return;\n }\n column.hidden = hidden;\n this._setParentsVisibility(column, !hidden);\n this._ensureExpandableColumn();\n this._renderCols();\n this._renderHeader();\n this._render();\n this._adjustTablesWidth();\n this.trigger(hidden ? COLUMNHIDE : COLUMNSHOW, { column: column });\n if (!hidden && !column.width) {\n this.table.add(this.thead.closest('table')).width('');\n }\n this._updateFirstColumnClass();\n },\n _findColumn: function (column) {\n if (typeof column == 'number') {\n column = this.columns[column];\n } else if (isPlainObject(column)) {\n column = grep(leafColumns(this.columns), function (item) {\n return item === column;\n })[0];\n } else {\n column = grep(leafColumns(this.columns), function (item) {\n return item.field === column;\n })[0];\n }\n return column;\n },\n _adjustTablesWidth: function () {\n var idx, length;\n var cols = this.thead.prev().children();\n var colWidth, width = 0;\n for (idx = 0, length = cols.length; idx < length; idx++) {\n colWidth = cols[idx].style.width;\n if (colWidth && colWidth.indexOf('%') == -1) {\n width += parseInt(colWidth, 10);\n } else {\n width = 0;\n break;\n }\n }\n if (width) {\n this.table.add(this.thead.closest('table')).width(width);\n }\n },\n _reorderable: function () {\n if (!this.options.reorderable) {\n return;\n }\n var scrollable = this.options.scrollable === true;\n var selector = (scrollable ? '.k-grid-header:first ' : 'table:first>.k-grid-header ') + HEADERCELLS;\n var that = this;\n this._draggableInstance = new ui.Draggable(this.wrapper, {\n group: kendo.guid(),\n filter: selector,\n hint: function (target) {\n return $('
').css({\n width: target.width(),\n paddingLeft: target.css('paddingLeft'),\n paddingRight: target.css('paddingRight'),\n lineHeight: target.height() + 'px',\n paddingTop: target.css('paddingTop'),\n paddingBottom: target.css('paddingBottom')\n }).html(target.attr(kendo.attr('title')) || target.attr(kendo.attr('field')) || target.text()).prepend('');\n }\n });\n this.reorderable = new ui.Reorderable(this.wrapper, {\n draggable: this._draggableInstance,\n dragOverContainers: proxy(this._allowDragOverContainers, this),\n inSameContainer: function (e) {\n return $(e.source).parent()[0] === $(e.target).parent()[0] && targetParentContainerIndex(flatColumnsInDomOrder(that.columns), that.columns, e.sourceIndex, e.targetIndex) > -1;\n },\n change: function (e) {\n var columns = flatColumnsInDomOrder(that.columns);\n var column = columns[e.oldIndex];\n var newIndex = targetParentContainerIndex(columns, that.columns, e.oldIndex, e.newIndex);\n that.trigger(COLUMNREORDER, {\n newIndex: newIndex,\n oldIndex: inArray(column, columns),\n column: column\n });\n that.reorderColumn(newIndex, column, e.position === 'before');\n }\n });\n },\n _allowDragOverContainers: function (sourceIndex, targetIndex) {\n var columns = flatColumnsInDomOrder(this.columns);\n return columns[sourceIndex].lockable !== false && targetParentContainerIndex(columns, this.columns, sourceIndex, targetIndex) > -1;\n },\n _reorderTrees: function (destSources, destContainer, destDomTree, sources, sourcesContainer, sourcesDomTree, before, depth) {\n var ths = $();\n var source = sourcesContainer.find('tr:eq(' + sources[0].rowIndex + ')');\n var sourceDOM = sourcesDomTree.children[sources[0].rowIndex];\n var sourceChildren = source.children();\n var destDomChildren;\n var currentIndex;\n var destColumn = before ? destSources[0] : destSources[destSources.length - 1];\n var destRow;\n var sourcesLeafs;\n var destLeafs;\n var reorderTaget;\n var destThs;\n for (var idx = 0; idx < sources.length; idx++) {\n currentIndex = sources[idx].cellIndex;\n ths = ths.add(sourceChildren.eq(currentIndex));\n destDomChildren = destDomTree.children[destColumn.rowIndex].children;\n if (destDomTree === sourcesDomTree && before) {\n currentIndex += idx;\n }\n destDomChildren.splice(before ? destColumn.cellIndex + idx : destColumn.cellIndex + 1 + idx, 0, sourceDOM.children[currentIndex]);\n }\n if (destDomTree === sourcesDomTree && before) {\n sourceDOM.children.splice(sources[0].cellIndex + sources.length, sources.length);\n } else {\n sourceDOM.children.splice(sources[0].cellIndex, sources.length);\n }\n destRow = destContainer.find('tr:eq(' + destColumn.rowIndex + ')');\n destThs = destRow.find('>th.k-header:eq(' + destColumn.cellIndex + ')');\n if (destThs.length && ths[0] !== destThs[0]) {\n ths[before ? 'insertBefore' : 'insertAfter'](destThs);\n }\n if (depth >= sources[0].rowIndex + 1 && depth != 1) {\n sourcesLeafs = [];\n for (idx = 0; idx < sources.length; idx++) {\n if (sources[idx].columns) {\n sourcesLeafs = sourcesLeafs.concat(sources[idx].columns);\n }\n }\n if (!sourcesLeafs.length) {\n return;\n }\n destLeafs = [];\n for (idx = 0; idx < destSources.length; idx++) {\n if (destSources[idx].columns) {\n destLeafs = destLeafs.concat(destSources[idx].columns);\n }\n }\n if (!destLeafs.length && (destContainer !== sourcesContainer || (destColumn.cellIndex - sources[0].cellIndex > 1 || sources[0].cellIndex - destColumn.cellIndex > 1))) {\n reorderTaget = findReorderTarget(this.columns, destColumn, sources[0], before, this.columns);\n destLeafs = [reorderTaget];\n if (!reorderTaget && sourcesLeafs.length && destContainer.find('tr').length > sources[0].rowIndex + 1) {\n this._insertTree(sourcesLeafs, sourcesContainer, sourcesDomTree, destContainer, destDomTree);\n return;\n }\n }\n if (!destLeafs.length) {\n return;\n }\n this._reorderTrees(destLeafs, destContainer, destDomTree, sourcesLeafs, sourcesContainer, sourcesDomTree, before, depth);\n }\n },\n _insertTree: function (columns, sourcesContainer, sourcesDomTree, destContainer, destDomTree) {\n var leafs = [];\n var row;\n var ths = $();\n var domTr;\n row = sourcesContainer.find('tr:eq(' + columns[0].rowIndex + ')');\n domTr = sourcesDomTree.children[columns[0].rowIndex];\n for (var idx = 0; idx < columns.length; idx++) {\n if (columns[idx].columns) {\n leafs = leafs.concat(columns[idx].columns);\n }\n destDomTree.children[columns[0].rowIndex].children.splice(idx, 0, domTr.children[columns[idx].rowIndex]);\n ths = ths.add(row.find('>th.k-header:eq(' + columns[idx].cellIndex + ')'));\n }\n sourcesDomTree.children[columns[0].rowIndex].children.splice(columns[0].cellIndex, columns.length);\n destContainer.find('tr:eq(' + columns[0].rowIndex + ')').append(ths);\n if (leafs.length) {\n this._insertTree(leafs, sourcesContainer, sourcesDomTree, destContainer, destDomTree);\n }\n },\n _reorderHeader: function (destColumn, column, before) {\n var sourcesDepth = column.columns ? depth([column]) : 1;\n var targetDepth = destColumn.columns ? depth([destColumn]) : 1;\n var sourceLocked = isLocked(column);\n var destLocked = isLocked(destColumn);\n var destContainer = destLocked ? this.lockedHeader : this.thead;\n var sourcesContainer = sourceLocked ? this.lockedHeader : this.thead;\n var destDomTree = destLocked ? this._lockedHeaderTree : this._headerTree;\n var sourcesDomTree = sourceLocked ? this._lockedHeaderTree : this._headerTree;\n var rowsToAdd;\n var destRows = destContainer.find('tr');\n if (sourcesDepth === targetDepth || sourcesDepth < destRows.length) {\n this._reorderTrees([destColumn], destContainer, destDomTree, [column], sourcesContainer, sourcesDomTree, before, sourcesDepth);\n updateRowSpans(destContainer, destDomTree);\n removeEmptyRows(sourcesContainer, sourcesDomTree);\n } else {\n if (destContainer !== sourcesContainer) {\n rowsToAdd = sourcesDepth - destRows.length;\n destRows.each(function (idx) {\n var cells = this.cells;\n for (var i = 0; i < cells.length; i++) {\n if (cells[i].colSpan <= 1 && cells[i].attributes.rowspan) {\n destDomTree.children[idx].children[i].attr.rowSpan += rowsToAdd;\n cells[i].rowSpan += rowsToAdd;\n }\n }\n });\n for (var j = 0; j < rowsToAdd; j++) {\n destDomTree.children.push(kendoDomElement('tr', { 'role': 'row' }));\n if (destContainer.is('thead')) {\n destContainer.append('');\n } else {\n destContainer.find('thead').append('');\n }\n }\n }\n this._reorderTrees([destColumn], destContainer, destDomTree, [column], sourcesContainer, sourcesDomTree, before, sourcesDepth);\n removeEmptyRows(sourcesContainer, sourcesDomTree);\n }\n },\n reorderColumn: function (destIndex, column, before) {\n var lockChanged;\n var parent = column.parentColumn;\n var columns = parent ? parent.columns : this.columns;\n var sourceIndex = inArray(column, columns);\n var destColumn = columns[destIndex];\n var isLocked = !!destColumn.locked;\n var hasMultiColumnHeaders = grep(this.columns, function (item) {\n return item.columns !== undefined;\n }).length > 0;\n var nonLockedColumnsLength = nonLockedColumns(columns).length;\n if (sourceIndex === destIndex) {\n return;\n }\n if (isLocked && !column.locked && nonLockedColumnsLength == 1) {\n return;\n }\n if (!isLocked && column.locked && columns.length - nonLockedColumnsLength == 1) {\n return;\n }\n if (before === undefined) {\n before = destIndex < sourceIndex;\n }\n if (hasMultiColumnHeaders) {\n this._reorderHeader(destColumn, column, before);\n }\n lockChanged = !!column.locked;\n lockChanged = lockChanged != isLocked;\n column.locked = isLocked;\n columns.splice(before ? destIndex : destIndex + 1, 0, column);\n columns.splice(sourceIndex < destIndex ? sourceIndex : sourceIndex + 1, 1);\n this._setColumnDataIndexes(leafColumns(this.columns));\n this._clearColsCache();\n this._renderCols();\n if (!hasMultiColumnHeaders) {\n var ths = $(this.lockedHeader).add(this.thead).find('th');\n ths.eq(sourceIndex)[before ? 'insertBefore' : 'insertAfter'](ths.eq(destIndex));\n var dom = this._headerTree.children[0].children;\n if (this._hasLockedColumns) {\n dom = this._lockedHeaderTree.children[0].children.concat(dom);\n }\n dom.splice(before ? destIndex : destIndex + 1, 0, dom[sourceIndex]);\n dom.splice(sourceIndex < destIndex ? sourceIndex : sourceIndex + 1, 1);\n if (this._hasLockedColumns) {\n this._lockedHeaderTree.children[0].children = dom.splice(0, lockedColumns(columns).length);\n this._headerTree.children[0].children = dom;\n }\n } else {\n if (this.lockedHeader) {\n columns = nonLockedColumns(this.columns);\n this._prepareColumns([{\n rowSpan: 1,\n cells: [],\n index: 0\n }], columns);\n columns = lockedColumns(this.columns);\n this._prepareColumns([{\n rowSpan: 1,\n cells: [],\n index: 0\n }], columns);\n } else {\n this._prepareColumns([{\n rowSpan: 1,\n cells: [],\n index: 0\n }], this.columns);\n }\n }\n this._updateColumnCellIndex();\n this._applyLockedContainersWidth();\n this._syncLockedHeaderHeight();\n this._updateFirstColumnClass();\n this.refresh();\n if (!lockChanged) {\n return;\n }\n if (isLocked) {\n this.trigger(COLUMNLOCK, { column: column });\n } else {\n this.trigger(COLUMNUNLOCK, { column: column });\n }\n },\n lockColumn: function (column) {\n var columns = this.columns;\n if (typeof column == 'number') {\n column = columns[column];\n } else {\n column = grep(columns, function (item) {\n return item.field === column;\n })[0];\n }\n if (!column || column.hidden) {\n return;\n }\n var index = lockedColumns(columns).length - 1;\n this.reorderColumn(index, column, false);\n },\n unlockColumn: function (column) {\n var columns = this.columns;\n if (typeof column == 'number') {\n column = columns[column];\n } else {\n column = grep(columns, function (item) {\n return item.field === column;\n })[0];\n }\n if (!column || column.hidden) {\n return;\n }\n var index = lockedColumns(columns).length;\n this.reorderColumn(index, column, true);\n },\n _columnMenu: function () {\n var ths = $(this.lockedHeader).add(this.thead).find('th');\n var columns = this.columns;\n var options = this.options;\n var columnMenu = options.columnMenu;\n var column, menu, menuOptions, sortable, filterable;\n var initHandler = proxy(this._columnMenuInit, this);\n var openHandler = proxy(this._columnMenuOpen, this);\n var lockedColumnsLength = lockedColumns(columns).length;\n var hasMultiColumnHeaders = grep(this.columns, function (item) {\n return item.columns !== undefined;\n }).length > 0;\n if (hasMultiColumnHeaders) {\n columns = leafColumns(columns);\n if (this.lockedHeader) {\n ths = sortCells(leafDataCells(this.lockedHeader.find('>table>thead')).add(leafDataCells(this.thead)));\n } else {\n ths = leafDataCells(this.thead);\n }\n } else {\n ths = $(this.lockedHeader).add(this.thead).find('th');\n }\n if (!columnMenu) {\n return;\n }\n if (typeof columnMenu == 'boolean') {\n columnMenu = {};\n }\n for (var i = 0; i < ths.length; i++) {\n column = columns[i];\n if (!column.field) {\n continue;\n }\n menu = ths.eq(i).data('kendoColumnMenu');\n if (menu) {\n menu.destroy();\n }\n sortable = false;\n if (column.sortable !== false && columnMenu.sortable !== false && options.sortable !== false) {\n sortable = extend({}, options.sortable, { compare: (column.sortable || {}).compare });\n }\n filterable = false;\n if (options.filterable && column.filterable !== false && columnMenu.filterable !== false) {\n filterable = extend({ pane: this.pane }, column.filterable, options.filterable);\n }\n menuOptions = {\n dataSource: this.dataSource,\n values: column.values,\n columns: columnMenu.columns,\n sortable: sortable,\n filterable: filterable,\n messages: columnMenu.messages,\n owner: this,\n closeCallback: $.noop,\n init: initHandler,\n open: openHandler,\n pane: this.pane,\n lockedColumns: !hasMultiColumnHeaders && column.lockable !== false && lockedColumnsLength > 0\n };\n if (options.$angular) {\n menuOptions.$angular = options.$angular;\n }\n ths.eq(i).kendoColumnMenu(menuOptions);\n }\n },\n _columnMenuInit: function (e) {\n this.trigger(COLUMNMENUINIT, {\n field: e.field,\n container: e.container\n });\n },\n _pageable: function () {\n var that = this, wrapper, pageable = that.options.pageable;\n if (pageable) {\n wrapper = that.wrapper.children('div.k-grid-pager');\n if (!wrapper.length) {\n wrapper = $('
').appendTo(that.wrapper);\n }\n that._destroyPager();\n if (typeof pageable === 'object' && pageable instanceof kendo.ui.TreeListPager) {\n that.pager = pageable;\n } else {\n that._createPager(wrapper);\n }\n that.pager.bind(PAGE_CHANGE, function (e) {\n if (that.trigger(PAGE, { page: e.index })) {\n e.preventDefault();\n }\n });\n }\n },\n _createPager: function (element, options) {\n var that = this;\n that.pager = new TreeListPager(element, extend({}, that.options.pageable, { dataSource: that.dataSource }, options));\n },\n _destroyPager: function () {\n if (this.pager) {\n this.pager.destroy();\n }\n },\n _isPageable: function () {\n var that = this;\n return that.options.pageable && (!that.dataSource || that.dataSource && that.dataSource._isPageable());\n },\n _togglePagerVisibility: function () {\n var that = this;\n var pageable = that.options.pageable;\n if (pageable && (isPlainObject(pageable) || pageable instanceof TreeListPager) && pageable.alwaysVisible === false) {\n that.wrapper.find('.k-grid-pager').toggle((that.dataSource.collapsedTotal() || 0) >= that.dataSource.pageSize());\n }\n }\n });\n function isInputElement(element) {\n return $(element).is(':button,a,:input,a>.k-icon,textarea,span.k-select,span.k-icon,span.k-link,.k-input,.k-multiselect-wrap,.k-tool-icon');\n }\n function isLocked(column) {\n if (!column.parentColumn) {\n return !!column.locked;\n }\n return !!isLocked(column.parentColumn);\n }\n function findParentColumnWithChildren(columns, index, source, rtl) {\n var target;\n var locked = !!source.locked;\n var targetLocked;\n do {\n target = columns[index];\n index += rtl ? 1 : -1;\n targetLocked = !!target.locked;\n } while (target && index > -1 && index < columns.length && target != source && !target.columns && targetLocked === locked);\n return target;\n }\n function findReorderTarget(columns, target, source, before, masterColumns) {\n if (target.columns) {\n target = target.columns;\n return target[before ? 0 : target.length - 1];\n } else {\n var parent = columnParent(target, columns);\n var parentColumns;\n if (parent) {\n parentColumns = parent.columns;\n } else {\n parentColumns = columns;\n }\n var index = inArray(target, parentColumns);\n if (index === 0 && before && parentColumns.length !== 1) {\n index++;\n } else if (index == parentColumns.length - 1 && !before && index !== 0) {\n index--;\n } else if (index > 0 || index === 0 && !before && index !== 0) {\n index += before ? -1 : 1;\n }\n var sourceIndex = inArray(source, parentColumns);\n target = findParentColumnWithChildren(parentColumns, index, source, sourceIndex > index);\n var targetIndex = inArray(target, masterColumns);\n if (target.columns && (!targetIndex || targetIndex === parentColumns.length - 1)) {\n return null;\n }\n if (target && target != source && target.columns) {\n return findReorderTarget(columns, target, source, before, masterColumns);\n }\n }\n return null;\n }\n function leafColumns(columns) {\n var result = [];\n for (var idx = 0; idx < columns.length; idx++) {\n if (!columns[idx].columns) {\n result.push(columns[idx]);\n continue;\n }\n result = result.concat(leafColumns(columns[idx].columns));\n }\n return result;\n }\n function visibleChildColumns(columns) {\n return grep(columns, function (column) {\n return !column.hidden;\n });\n }\n function isVisible(column) {\n return visibleColumns([column]).length > 0;\n }\n function visibleColumns(columns) {\n return grep(columns, function (column) {\n var result = !column.hidden;\n if (result && column.columns) {\n result = visibleColumns(column.columns).length > 0;\n }\n return result;\n });\n }\n function normalizeColumns(columns, hide) {\n return map(columns, function (column) {\n var hidden;\n if (!isVisible(column) || hide) {\n hidden = true;\n }\n if (column.columns) {\n column.columns = normalizeColumns(column.columns, hidden);\n }\n return extend({ hidden: hidden }, column);\n });\n }\n function flatColumnsInDomOrder(columns) {\n var result = flatColumns(lockedColumns(columns));\n return result.concat(flatColumns(nonLockedColumns(columns)));\n }\n function targetParentContainerIndex(flatColumns, columns, sourceIndex, targetIndex) {\n var column = flatColumns[sourceIndex];\n var target = flatColumns[targetIndex];\n var parent = columnParent(column, columns);\n columns = parent ? parent.columns : columns;\n return inArray(target, columns);\n }\n function parentColumnsCells(cell) {\n var container = cell.closest('table');\n var result = $().add(cell);\n var row = cell.closest('tr');\n var headerRows = container.find('tr');\n var level = headerRows.index(row);\n if (level > 0) {\n var parent = headerRows.eq(level - 1);\n var parentCellsWithChildren = parent.find('th').filter(function () {\n return !$(this).attr('rowspan');\n });\n var offset = 0;\n var index = row.find('th').index(cell);\n var prevCells = cell.prevAll().filter(function () {\n return this.colSpan > 1;\n });\n for (var idx = 0; idx < prevCells.length; idx++) {\n offset += prevCells[idx].colSpan || 1;\n }\n index += Math.max(offset - 1, 0);\n offset = 0;\n for (idx = 0; idx < parentCellsWithChildren.length; idx++) {\n var parentCell = parentCellsWithChildren.eq(idx);\n if (parentCell.attr('data-colspan')) {\n offset += parentCell[0].getAttribute('data-colspan');\n } else {\n offset += 1;\n }\n if (index >= idx && index < offset) {\n result = parentColumnsCells(parentCell).add(result);\n break;\n }\n }\n }\n return result;\n }\n function childColumnsCells(cell) {\n var container = cell.closest('thead');\n var result = $().add(cell);\n var row = cell.closest('tr');\n var headerRows = container.find('tr');\n var level = headerRows.index(row) + cell[0].rowSpan;\n var colSpanAttr = kendo.attr('colspan');\n if (level <= headerRows.length - 1) {\n var child = row.next();\n var prevCells = cell.prevAll();\n var idx;\n prevCells = prevCells.filter(function () {\n return !this.rowSpan || this.rowSpan === 1;\n });\n var offset = 0;\n for (idx = 0; idx < prevCells.length; idx++) {\n offset += parseInt(prevCells.eq(idx).attr(colSpanAttr), 10) || 1;\n }\n var cells = child.find('th');\n var colSpan = parseInt(cell.attr(colSpanAttr), 10) || 1;\n idx = 0;\n while (idx < colSpan) {\n child = cells.eq(idx + offset);\n result = result.add(childColumnsCells(child));\n var value = parseInt(child.attr(colSpanAttr), 10);\n if (value > 1) {\n colSpan -= value - 1;\n }\n idx++;\n }\n }\n return result;\n }\n function columnParent(column, columns) {\n var parents = [];\n columnParents(column, columns, parents);\n return parents[parents.length - 1];\n }\n function columnParents(column, columns, parents) {\n parents = parents || [];\n for (var idx = 0; idx < columns.length; idx++) {\n if (column === columns[idx]) {\n return true;\n } else if (columns[idx].columns) {\n var inserted = parents.length;\n parents.push(columns[idx]);\n if (!columnParents(column, columns[idx].columns, parents)) {\n parents.splice(inserted, parents.length - inserted);\n } else {\n return true;\n }\n }\n }\n return false;\n }\n function flatColumns(columns) {\n var result = [];\n var children = [];\n for (var idx = 0; idx < columns.length; idx++) {\n result.push(columns[idx]);\n if (columns[idx].columns) {\n children = children.concat(columns[idx].columns);\n }\n }\n if (children.length) {\n result = result.concat(flatColumns(children));\n }\n return result;\n }\n function columnPosition(column, columns, row, cellCounts) {\n var result;\n var idx;\n row = row || 0;\n cellCounts = cellCounts || {};\n cellCounts[row] = cellCounts[row] || 0;\n for (idx = 0; idx < columns.length; idx++) {\n if (columns[idx] == column) {\n result = {\n cell: cellCounts[row],\n row: row\n };\n break;\n } else if (columns[idx].columns) {\n result = columnPosition(column, columns[idx].columns, row + 1, cellCounts);\n if (result) {\n break;\n }\n }\n cellCounts[row]++;\n }\n return result;\n }\n function updateCellIndex(thead, columns, offset) {\n offset = offset || 0;\n var position;\n var cell;\n var allColumns = columns;\n columns = leafColumns(columns);\n var cells = {};\n var rows = thead.find('>tr:not(.k-filter-row)');\n var filter = function () {\n var el = $(this);\n return !el.hasClass('k-group-cell') && !el.hasClass('k-hierarchy-cell');\n };\n for (var idx = 0, length = columns.length; idx < length; idx++) {\n position = columnPosition(columns[idx], allColumns);\n if (!cells[position.row]) {\n cells[position.row] = rows.eq(position.row).find('.k-header').filter(filter);\n }\n cell = cells[position.row].eq(position.cell);\n cell.attr(kendo.attr('index'), offset + idx);\n }\n return columns.length;\n }\n function depth(columns) {\n var result = 1;\n var max = 0;\n for (var idx = 0; idx < columns.length; idx++) {\n if (columns[idx].columns) {\n var temp = depth(columns[idx].columns);\n if (temp > max) {\n max = temp;\n }\n }\n }\n return result + max;\n }\n function lockedColumns(columns) {\n return grep(columns, is('locked'));\n }\n function nonLockedColumns(columns) {\n return grep(columns, not(is('locked')));\n }\n function updateRowSpans(container, containerDOMtree) {\n var rows = container.find('tr');\n var length = rows.length;\n rows.each(function (idx) {\n var cells = this.cells;\n for (var i = 0; i < cells.length; i++) {\n if (cells[i].colSpan <= 1 && cells[i].attributes.rowspan) {\n containerDOMtree.children[idx].children[i].attr.rowSpan = length - idx;\n cells[i].rowSpan = length - idx;\n }\n }\n });\n }\n function removeEmptyRows(container, containerDOMtree) {\n var rows = container.find('tr');\n var emptyRows = [];\n rows.filter(function (idx) {\n var shouldRemove = !$(this).children().length;\n if (shouldRemove) {\n emptyRows.push(idx);\n }\n return shouldRemove;\n }).remove();\n for (var i = emptyRows.length - 1; i >= 0; i--) {\n containerDOMtree.children.splice(emptyRows[i], 1);\n }\n updateRowSpans(container, containerDOMtree);\n }\n function focusTable(table, direct) {\n var msie = browser.msie || browser.edge;\n if (direct === true) {\n table = $(table);\n var scrollTop, scrollLeft;\n scrollTop = table.parent().scrollTop();\n scrollLeft = table.parent().scrollLeft();\n if (msie) {\n try {\n table[0].setActive();\n } catch (e) {\n table[0].focus();\n }\n } else {\n table[0].focus();\n }\n table.parent().scrollTop(scrollTop).scrollLeft(scrollLeft);\n } else {\n $(table).one('focusin', function (e) {\n e.preventDefault();\n }).focus();\n }\n }\n function adjustRowHeight(row1, row2) {\n var height;\n var offsetHeight1 = row1.offsetHeight;\n var offsetHeight2 = row2.offsetHeight;\n if (offsetHeight1 > offsetHeight2) {\n height = offsetHeight1 + 'px';\n } else if (offsetHeight1 < offsetHeight2) {\n height = offsetHeight2 + 'px';\n }\n if (height) {\n row1.style.height = row2.style.height = height;\n }\n }\n function isColumnEditable(column, model) {\n if (!column || !model || !column.field || column.selectable || column.command || column.editable && !column.editable(model)) {\n return false;\n }\n return column.field && model.editable && model.editable(column.field);\n }\n function isDirtyColumn(column, model) {\n var field = (column || {}).field || '';\n return model.dirty && model.dirtyFields && model.dirtyFields[field] && isColumnEditable(column, model);\n }\n function isUndefined(value) {\n return typeof value === 'undefined';\n }\n function isNumber(value) {\n return typeof value === 'number' && !isNaN(value);\n }\n if (kendo.ExcelMixin) {\n kendo.ExcelMixin.extend(TreeList.prototype);\n }\n if (kendo.PDFMixin) {\n kendo.PDFMixin.extend(TreeList.prototype);\n TreeList.prototype._drawPDF = function (progress) {\n var treeList = this;\n if (treeList.options.pdf.paperSize && treeList.options.pdf.paperSize != 'auto') {\n return treeList._drawPDF_autoPageBreak(progress);\n }\n var result = new $.Deferred();\n var dataSource = treeList.dataSource;\n var allPages = treeList.options.pdf.allPages;\n this._initPDFProgress(progress);\n var doc = new kendo.drawing.Group();\n var startingPage = dataSource.page();\n function resolve() {\n if (allPages && startingPage !== undefined) {\n dataSource.unbind('change', exportPage);\n dataSource.one('change', function () {\n result.resolve(doc);\n });\n dataSource.page(startingPage);\n } else {\n result.resolve(doc);\n }\n }\n function exportPage() {\n treeList._drawPDFShadow({ width: treeList.wrapper.width() }, { avoidLinks: treeList.options.pdf.avoidLinks }).done(function (group) {\n var pageNum = dataSource.page();\n var totalPages = allPages ? dataSource.totalPages() : 1;\n var args = {\n page: group,\n pageNumber: pageNum,\n progress: pageNum / totalPages,\n totalPages: totalPages\n };\n progress.notify(args);\n doc.append(args.page);\n if (pageNum < totalPages) {\n dataSource.page(pageNum + 1);\n } else {\n resolve();\n }\n }).fail(function (err) {\n result.reject(err);\n });\n }\n if (allPages) {\n dataSource.bind('change', exportPage);\n dataSource.page(1);\n } else {\n exportPage();\n }\n return result.promise();\n };\n TreeList.prototype._initPDFProgress = function (deferred) {\n var loading = $('
');\n loading.prepend(this.wrapper.clone().css({\n position: 'absolute',\n top: 0,\n left: 0\n }));\n this.wrapper.append(loading);\n var progressBar = $('
').appendTo(loading).kendoProgressBar({\n type: 'chunk',\n chunkCount: 10,\n min: 0,\n max: 1,\n value: 0\n }).data('kendoProgressBar');\n deferred.progress(function (e) {\n progressBar.value(e.progress);\n }).always(function () {\n kendo.destroy(loading);\n loading.remove();\n });\n };\n TreeList.prototype._drawPDF_autoPageBreak = function (progress) {\n var treeList = this;\n var result = new $.Deferred();\n var dataSource = treeList.dataSource;\n var allPages = treeList.options.pdf.allPages;\n var origBody = treeList.wrapper.find('table[role=\"treeList\"] > tbody');\n var cont = $('
').css({\n position: 'absolute',\n left: -10000,\n top: -10000\n });\n var clone = treeList.wrapper.clone().css({\n height: 'auto',\n width: 'auto'\n }).appendTo(cont);\n clone.find('.k-grid-content').css({\n height: 'auto',\n width: 'auto',\n overflow: 'visible'\n });\n clone.find('table[role=\"treeList\"], .k-grid-footer table').css({\n height: 'auto',\n width: '100%',\n overflow: 'visible'\n });\n clone.find('.k-grid-pager, .k-grid-toolbar, .k-grouping-header').remove();\n clone.find('.k-grid-header, .k-grid-footer').css({ paddingRight: 0 });\n this._initPDFProgress(progress);\n var body = clone.find('table[role=\"treeList\"] > tbody').empty();\n var startingPage = dataSource.page();\n function resolve() {\n if (allPages && startingPage !== undefined) {\n dataSource.one('change', draw);\n dataSource.page(startingPage);\n } else {\n treeList.refresh();\n draw();\n }\n }\n function draw() {\n cont.appendTo(document.body);\n var options = $.extend({}, treeList.options.pdf, {\n _destructive: true,\n progress: function (p) {\n progress.notify({\n page: p.page,\n pageNumber: p.pageNum,\n progress: 0.5 + p.pageNum / p.totalPages / 2,\n totalPages: p.totalPages\n });\n }\n });\n kendo.drawing.drawDOM(clone, options).always(function () {\n cont.remove();\n }).then(function (group) {\n result.resolve(group);\n }).fail(function (err) {\n result.reject(err);\n });\n }\n function renderPage() {\n var pageNum = dataSource.page();\n var totalPages = allPages ? dataSource.totalPages() : 1;\n body.append(origBody.find('tr'));\n if (pageNum < totalPages) {\n dataSource.page(pageNum + 1);\n } else {\n dataSource.unbind('change', renderPage);\n resolve();\n }\n }\n if (allPages) {\n dataSource.bind('change', renderPage);\n dataSource.page(1);\n } else {\n renderPage();\n }\n return result.promise();\n };\n }\n extend(true, kendo.data, {\n TreeListDataSource: TreeListDataSource,\n TreeListModel: TreeListModel\n });\n ui.plugin(TreeList);\n ui.plugin(TreeListPager);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));"]}