{"version":3,"sources":["kendo.ui.core.js"],"names":["f","define","$","window","undefined","Class","compilePart","part","stringPart","split","join","replace","first","charAt","rest","substring","pad","number","digits","end","length","zeros","getShadows","element","shadow","css","kendo","support","transitions","radius","match","boxShadowRegExp","blur","math","max","left","right","bottom","wrap","autosize","percentage","width","height","percentWidth","percentHeight","wrapper","wrapperStyle","browser","outerWidth","_outerWidth","outerHeight","_outerHeight","parent","hasClass","style","is","show","percentRegExp","test","boxSizing","mozBoxSizing","webkitBoxSizing","addClass","msie","floor","version","zoom","children","deepExtend","destination","i","arguments","deepExtendOne","source","property","propValue","propType","propInit","destProp","ObservableArray","data","LazyObservableArray","DataSource","HierarchicalDataSource","OBJECT","constructor","Array","RegExp","Date","getTime","isFunction","clone","UNDEFINED","testRx","agent","rxs","dflt","rx","hasOwnProperty","toHyphens","str","g","toLowerCase","toCamelCase","strMatch","g1","toUpperCase","getComputedStyles","properties","computedStyle","styles","document","defaultView","getComputedStyle","each","idx","value","getPropertyValue","currentStyle","size","isScrollable","className","indexOf","overflow","scrollLeft","isRtl","webkit","mozila","mozilla","el","scrollWidth","clientWidth","Math","abs","obj","key","result","getOffset","type","positioned","offset","sign","top","pointers","msPointers","pageYOffset","documentElement","scrollTop","pageXOffset","parseEffects","input","effects","this","fx","Element","prepareAnimationOptions","options","duration","reverse","complete","STRING","BOOLEAN","extend","init","noop","teardown","hide","completeCallback","animate","instance","queue","promise","toggleClass","classes","add","htmlEncode","ampRegExp","ltRegExp","gtRegExp","quoteRegExp","aposRegExp","parseOption","option","dashRegExp","getAttribute","ns","numberRegExp","parseFloat","jsonRegExp","jsonFormatRegExp","Function","parseOptions","templateRegExp","template","html","containmentComparer","a","b","contains","resizableWidget","widget","inArray","attr","focusable","isTabIndexNotNaN","nodeName","disabled","href","visible","expr","filters","parents","addBack","filter","kendoJQuery","selector","context","fn","Template","preventDefault","isDefaultPrevented","Observable","argumentNameRegExp","encodeRegExp","escapedCurlyRegExp","curlyRegExp","escapedSharpRegExp","sharpRegExp","directions","eventTarget","wrapExpression","localUrlRe","Widget","DataBoundWidget","ContainerNullObject","MobileWidget","MOUSE_EVENTS","EXCLUDE_BUST_CLICK_SELECTOR","MouseEventNormalizer","eventMap","getEventMap","eventRegEx","on","rootjQuery","animationFrame","animationQueue","cultures","isArray","proxy","JSON","formatRegExp","FUNCTION","NUMBER","NULL","getterCache","setterCache","slice","proto","member","base","that","subclass","apply","prototype","Object","_initOptions","_defaultPrevented","_events","bind","eventName","handlers","one","original","handler","events","eventNames","handlersIsFunction","unbind","push","unshift","trigger","e","sender","call","splice","paramName","useWithBlock","render","compile","parts","settings","argumentName","functionBody","_slotCount","Error","format","quote","string","escapable","lastIndex","c","meta","charCodeAt","toString","holder","k","v","partial","mind","gap","toJSON","rep","isFinite","String","indent","\b","\t","\n","\f","\r","\"","\\","valueOf","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","Number","Boolean","stringify","replacer","space","","findCulture","culture","numberFormat","getCulture","current","formatDate","date","calendar","calendars","standard","days","months","patterns","dateFormatRegExp","minutes","getDate","namesAbbr","getDay","names","getMonth","getFullYear","getHours","getMinutes","getSeconds","getMilliseconds","AM","PM","getTimezoneOffset","formatNumber","symbol","isCurrency","isPercent","customPrecision","formatAndPrecision","integer","fraction","integerLength","fractionLength","ch","hasGroup","hasNegativeFormat","decimalIndex","sharpIndex","zeroIndex","hasZero","hasSharp","percentIndex","currencyIndex","startZeroIndex","decimal","POINT","precision","decimals","pattern","literals","negative","replacement","EMPTY","start","name","toLocaleString","standardFormatRegExp","exec","currency","percent","toExponential","round","groupInteger","literalRegExp","quoteChar","literal","PLACEHOLDER","SHARP","ZERO","COMMA","commaRegExp","lastIndexOf","EN","objectToString",",",".","groupSize","abbr","namesShort","d","D","F","G","m","M","s","t","T","u","y","Y","/",":","firstDay","twoDigitYearMax","cultureName","newGroupSize","groupSizes","shift","toFixed","min","fmt","values","index","placeholderFormat","parseInt","_extractFormat","_activeElement","activeElement","_round","includeMargin","outOfRange","designatorPredicate","designator","mapDesignators","designators","map","adjustDST","hours","setHours","lowerArray","array","lowerLocalInfo","localInfo","newLocalInfo","parseExact","count","pmHour","UTC","matches","amDesignators","pmDesignators","hoursOffset","minutesOffset","hasTime","lookAhead","getNumber","rg","substr","valueIdx","getIndexByName","lower","nameLength","subValue","matchLength","matchIdx","checkLiteral","year","month","day","seconds","milliseconds","defaultYear","_lowerDays","_lowerMonths","longTimeZoneRegExp","shortTimeZoneRegExp","isNaN","setFullYear","parseMicrosoftFormatOffset","getDefaultFormats","cultureFormats","formatIdx","FORMATS_SEQUENCE","STANDARD_FORMATS","formats","concat","nonBreakingSpaceRegExp","exponentRegExp","dateRegExp","offsetRegExp","2","3","4","parseDate","tzoffset","timezone","convert","percentSymbol","table","docStyle","transforms","elementProto","mobileOS","documentMode","chrome","_scrollbar","scrollbar","refresh","div","createElement","cssText","innerHTML","body","appendChild","offsetWidth","removeChild","closest","tbodyInnerHtml","touch","HTMLElement","hasHW3D","WebKitCSSMatrix","cssFlexbox","lowPrefix","prefix","hasTransitions","event","devicePixelRatio","screenWidth","screen","availWidth","innerWidth","screenHeight","availHeight","innerHeight","detectOS","ua","minorVersion","os","notAndroidPhone","agentRxs","wp","fire","android","iphone","ipad","meego","webos","blackberry","playbook","windows","tizen","sailfish","ffos","osRxs","ios","flat","formFactorRxs","tablet","browserRxs","omini","omobile","firefox","mobilesafari","ie","navigator","device","majorVersion","flatVersion","cordova","PhoneGap","appMode","standalone","location","protocol","userAgent","wpDevicePixelRatio","hasNativeScrolling","delayedClick","mouseAndTouchPresent","detectBrowser","edge","safari","opera","detectClipboardAccess","commands","copy","queryCommandSupported","cut","paste","clipboard","zoomLevel","ie11WidthCorrection","docEl","scrollHeight","clientHeight","cssBorderSpacing","borderSpacing","cssClass","docElement","eventCapture","addEventListener","placeholder","propertyChangeEvent","types","setAttribute","cssFloat","stableSort","threshold","sorted","field","sort","matchesSelector","webkitMatchesSelector","mozMatchesSelector","msMatchesSelector","oMatchesSelector","nodeList","querySelectorAll","parentNode","pushState","history","hashChange","customElements","MSPointerEvent","PointerEvent","kineticScrollNeeded","down","up","in","out","enabled","display","dequeue","disable","promiseShim","enable","animatedPromise","kendoStop","clearQueue","gotoEnd","stop","kendoAnimate","kendoAddClass","kendoRemoveClass","kendoToggleClass","toggle","target","touches","originalEvent","changedTouches","elementFromPoint","clientX","clientY","callback","mousedown","mouseup","mousemove","mousecancel","click","resize","members","widgets","_widgetRegisteredCallbacks","ui","mobile","dataviz","drawing","spreadsheet","messages","keys","INSERT","DELETE","BACKSPACE","TAB","ENTER","ESC","LEFT","UP","RIGHT","DOWN","END","HOME","SPACEBAR","PAGEUP","PAGEDOWN","F2","F10","F12","NUMPAD_PLUS","NUMPAD_MINUS","NUMPAD_DOT","webComponents","isLocalUrl","url","expression","safe","getter","setter","accessor","get","set","guid","random","id","roleSelector","role","directiveSelector","directives","selectors","triggeredByInput","tagName","onWidgetRegistered","len","logToConsole","message","console","suppressLog","log","dataSource","jQuery","angular","_hasBindingTarget","kendoBindingTarget","_tabindex","TABINDEX","tabindex","removeAttr","setOptions","_setEvents","force","getSize","currentSize","_size","_resize","dimensions","setSize","destroy","removeData","_destroy","_muteAngularRebind","_muteRebind","dataItems","flatView","_angularItems","cmd","elements","items","dataItem","domElement","offsetHeight","notify","initWidget","roles","fullPath","widgetKeyRegExp","widgetKey","nodeType","isEmptyObject","rolesFromNamespaces","namespaces","find","widgetsArray","makeArray","widgetInstance","progress","container","leftRight","webkitCorrection","containerScrollLeft","mask","loading","prependTo","remove","plugin","register","widgetEntry","args","method","nullObject","autoApplyNS","kendoDestroy","view","viewElement","viewHasNativeScrolling","useNativeScrolling","eq","appLevelNativeScrolling","application","themes","views","touchScroller","useNative","Scroller","kendoMobileScroller","suites","onResize","setTimeout","unbindResize","off","attrValue","Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","kendoFocusable","setupMouseMute","mouseTrap","bustClick","captureMouse","stopPropagation","muteMouse","clearTimeout","mouseTrapTimeoutID","unMuteMouse","move","cancel","MSPointerEnter","MSPointerLeave","orig","fix","special","delegateType","bindType","handle","ret","related","relatedTarget","handleObj","origType","applyEventMap","pop","search","touchstart","touchend","ruleToDate","rule","targetDay","ourDay","time","cache","getUTCDay","setUTCDate","findRule","utcTime","rules","zone","grep","from","to","findZone","zones","until","zoneRules","zoneAndRule","info","fromOffset","toOffset","fromLocalOffset","toLocalOffset","toLocalDate","Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec","Sun","Mon","Tue","Wed","Thu","Fri","Sat","setDayOfWeek","dir","setDate","dayOfWeek","firstDayOfMonth","lastDayOfMonth","last","timeOffset","moveDateToWeekStart","weekStartDay","addDays","calcWeekInYear","firstWeekInYear","newDate","diffInMS","MS_PER_DAY","weekInYear","prevWeekDate","nextWeekDate","weekNumber","toUtcTime","isInTimeRange","msValue","msMin","msMax","isInDateRange","setTime","ignoreDST","difference","MS_PER_MINUTE","today","isToday","toInvariantTime","staticDate","nextDay","previousDay","MS_PER_HOUR","stripWhitespace","iterator","child","createNodeIterator","NodeFilter","SHOW_TEXT","node","FILTER_ACCEPT","FILTER_REJECT","nextNode","referenceNode","textContent","trim","childNodes","nodeValue","requestAnimationFrame","webkitRequestAnimationFrame","mozRequestAnimationFrame","oRequestAnimationFrame","msRequestAnimationFrame","queueAnimation","runNextAnimation","parseQueryStringParams","queryString","params","paramParts","decodeURIComponent","elementUnderCursor","x","client","wheelDeltaY","jQueryEvent","delta","deltaY","wheelDelta","detail","axis","VERTICAL_AXIS","throttle","delay","timeout","throttled","lastExecTime","elapsed","caret","rangeElement","rangeDuplicated","selectionStart","selectionEnd","isPosition","focus","setSelectionRange","selection","createTextRange","collapse","moveStart","moveEnd","select","duplicate","moveToBookmark","createRange","getBookmark","setEndPoint","text","compileMobileDirective","scope","injector","invoke","$compile","$$phase","$digest","antiForgeryTokens","tokens","csrf_token","csrf_param","cycleForm","form","firstElement","lastElement","keyCode","shiftKey","postToProxy","dataURI","fileName","proxyURL","proxyTarget","action","contentType","base64","appendTo","submit","saveAsBlob","blob","atob","Uint8Array","Blob","buffer","msSaveBlob","saveAsDataURI","URL","createObjectURL","fileSaver","download","createEvent","initMouseEvent","dispatchEvent","revokeObjectURL","downloadAttribute","saveAs","save","forceProxy","proxyModelSetters","observable","forEach","defineProperty","dirty","amd","a1","a2","a3","absoluteURL","path","pathPrefix","regEx","host","hashDelimiter","bang","locationHash","stripRoot","root","fixHash","fixBang","CHANGE","BACK","SAME","CHECK_URL_INTERVAL","BROKEN_BACK_NAV","hashStrip","HistoryAdapter","back","forward","replaceLocation","PushStateAdapter","navigate","title","replaceState","normalize","pathname","change","normalizeCurrent","fixedUrl","hash","hashBang","HashAdapter","_id","_interval","setInterval","clearInterval","History","_started","adapter","createAdapter","historyLength","locations","silent","_navigate","backCalled","decode","_checkUrl","newLength","navigatingInExisting","prev","backButtonPressed","namedParamReplace","optional","routeToRegExp","route","ignoreCase","escapeRegExp","optionalParam","namedParam","splatParam","stripUrl","INIT","ROUTE_MISSING","Route","_callback","queryStringParams","_back","worksWith","Router","routes","_urlChangedProxy","_sameProxy","_backProxy","initEventObject","sameProxy","_same","backProxy","urlChangedProxy","_urlChanged","same","touchDelta","touch1","touch2","x1","y1","x2","y2","dx","dy","center","distance","sqrt","getTouches","currentTarget","api","identifier","pointerId","withEachUpEvent","downEvents","now","OS","invalidZeroEvents","DEFAULT_MIN_HOLD","DEFAULT_THRESHOLD","PRESS","HOLD","SELECT","START","MOVE","CANCEL","TAP","RELEASE","GESTURESTART","GESTURECHANGE","GESTUREEND","GESTURETAP","THRESHOLD","mouse","pointer","ENABLE_GLOBAL_SURFACE","TouchAxis","_updateLocationData","startLocation","velocity","timeStamp","timeDelta","initialDelta","Touch","userEvents","touchInfo","useClickAsTap","initialTouch","pressEvent","_moved","_finished","press","_holdTimeout","minHold","_trigger","_hold","_withinIgnoreThreshold","UserEvents","dispose","_start","endTime","activeTouches","skip","isMoved","startTime","xDelta","yDelta","surfaceElement","preventIfMovingProxy","_maxTouches","multiTouch","allowSelection","captureUpIfMoved","fastTap","eventNS","surface","global","ownerDocument","pressed","touchAction","preventDragEvent","preventIfMoving","_isMoved","_destroyed","removeEventListener","_disposeAll","capture","_isMultiTouch","_apiCall","_maxTouchesReached","_select","which","_move","_eachTouch","_end","_click","pageX","pageY","methodName","matchingTouch","dict","defaultThreshold","MAX_DOUBLE_TAP_DISTANCE","eventProxy","_triggerTouch","gestureEventProxy","hold","tap","gesturestart","gesturechange","gestureend","enableSwipe","minXDelta","maxYDelta","maxDuration","doubleTapTimeout","_tap","lastTap","_dragstart","_swipestart","_swipemove","direction","toOdataFilter","useOdataFour","operator","logic","odataFilters","odataFiltersVersionFour","stripMetadata","neq","gt","gte","lt","lte","doesnotcontain","endswith","startswith","isnull","isnotnull","isempty","isnotempty","mappers","pageSize","page","useVersionFour","$filter","orderby","order","$orderby","$skip","take","$top","defaultDataType","read","dataType","schemas","odata","results","total","transports","jsonp","update","create","parameterMap","$inlinecount","$format","odata-v4","$count","isPlainObject","XmlDataReader","idField","xmlParse","model","parse","errors","serialize","modelBase","Model","fields","xpathToMember","modelInstance","evaluate","record","_parse","xml","parseDOM","parsedNode","attribute","attributes","attributeCount","firstChild","nextSibling","intermediateResult","tree","parseXML","raw","readers","eventHandler","_notifyChange","equal","xtype","ytype","getFieldByName","fieldName","Query","normalizeSort","descriptor","descriptors","normalizeOperator","operatorMap","normalizeFilter","compareDescriptor","f1","f2","normalizeDescriptor","fieldComparer","compareFilters","expr1","expr2","filters1","filters2","normalizeAggregate","expressions","normalizeGroup","aggregates","groupValueComparer","calculateAggregate","accumulator","item","state","aggr","functionName","aggregate","functions","isNumber","val","isDate","serializeRecords","getters","originalFieldNames","fieldNames","originalName","setters","convertRecords","convertGroup","hasSubgroups","wrapDataAccess","originalFunction","converter","mergeGroups","dest","group","flattenGroups","itemIndex","at","wrapGroupItems","eachGroupItems","func","replaceInRanges","ranges","replaceInRange","replaceWithObservable","serverGrouping","viewIndex","removeModel","uid","indexOfPristineModel","_defaultId","indexOfModel","comparer","fieldNameFromModel","convertFilterDescriptorsField","convertDescriptorsField","inferSelect","firstField","secondField","optgroup","label","specified","inferTable","fieldIndex","cells","cell","empty","tbody","tBodies","rows","fieldCount","dataMethod","_data","_attachBubbleHandlers","inferList","list","collection","textChild","textField","urlField","spriteCssClassField","imageUrlField","_loaded","prop","hasChildren","ObservableObject","parsers","defaultValues","Comparer","StableComparer","operators","LocalTransport","RemoteTransport","Cache","DataReader","Transport","Node","Buffer","BatchBuffer","ajax","CREATE","READ","UPDATE","DESTROY","SYNC","GET","ERROR","REQUESTSTART","PROGRESS","REQUESTEND","crud","identity","o","wrapAll","json","object","howMany","reduce","reduceRight","every","some","Symbol","_parent","_handlers","shouldSerialize","_set","paths","composite","isSetPrevented","isObservableArray","isDataSource","boolean","default","defaults","_initializers","editable","initiator","accept","isNew","functionFields","nullable","defaultValue","compare","localeCompare","combine","comparers","asc","valueA","valueB","__position","desc","textOp","impl","ignore","op","getMatchRegexp","esc","doesnotstartwith","n","doesnotendwith","doesnotmatch","filterExpr","and","or","fieldFunctions","operatorFunctions","==","equals","isequalto","equalto","!=","ne","notequals","isnotequalto","notequalto","notequal","<","islessthan","lessthan","less","<=","le","islessthanorequalto","lessthanequal",">","isgreaterthan","greaterthan","greater",">=","isgreaterthanorequalto","greaterthanequal","ge","notsubstringof","toArray","range","orderBy","orderByDescending","compiled","predicate","allData","groupBy","currentValue","_sortForGrouping","groupValue","sum","average","process","query","filterCallback","success","setup","error","parameters","operation","_store","clear","store","inmemory","schema","dataFunction","groupsFunction","serializeFunction","serializeGetters","_dataAccessFunction","groups","fromName","_map","_prefetch","_pristineData","_ranges","_view","_pristineTotal","_pageSize","_page","_sort","_filter","_group","_aggregate","_total","_shouldDetachObservableParents","transport","pushCreate","_pushCreate","pushUpdate","_pushUpdate","pushDestroy","_pushDestroy","offlineStorage","_storage","getItem","localStorage","setItem","reader","_detachObservableParents","_observe","_online","serverSorting","serverPaging","serverFiltering","serverAggregates","batch","online","sync","Deferred","resolve","offlineData","_isServerGrouped","_push","_readData","_flatData","getByUid","_storeData","_addRange","_process","_observeView","insert","_createNewModel","_wrapInEmptyGroup","pushInsert","pushed","autoSync","pristine","_updatePristineForModel","_removeItems","destroyed","found","_eachItem","_removePristineForModel","hasGroups","_removeModelFromRanges","_updateRangesLength","created","updated","promises","_sendSubmit","_send","when","then","_accept","_change","cancelChanges","_cancelModel","_markOfflineUpdatesAsDirty","__state__","hasChanges","models","response","serverGroup","_handleCustomErrors","_executeOnPristineForModel","_eachPristineItem","_pristineForModel","_submit","status","reject","deferred","_promise","converted","_params","_queueRequest","isPrevented","_dequeueRequest","_readAggregates","itemIds","_aggregateResult","updatePristine","_skip","timestamp","xhr","errorThrown","_requestInProgress","_pending","_shouldWrap","arrayType","_changeHandler","_updateTotalForAction","_calculateAggregates","_take","_queryProcess","_mergeState","_currentRangeStart","remote","fetch","_query","next","totalPages","_emptyAggregates","ceil","inRange","_findRange","lastRange","firstItemUid","enableRequestsInProgress","_skipRequestsInProgress","_timeStamp","pageSkip","paging","sorting","filtering","_currentRequestTimeStamp","_rangeExists","prefetch","skipIdx","takeIdx","startIndex","endIndex","rangeData","rangeEnd","processed","flatData","_mergeGroups","prevGroup","temp","currentRangeStart","_prefetchSuccessHandler","_timeout","_multiplePrefetch","rangeLength","startOffset","transportOptions","hasChildrenObject","childrenField","childrenOptions","_childrenOptions","_initChildren","_updateChildrenField","append","loaded","level","_childrenLoaded","load","_matchFilter","_hierarchicalFilter","_markHierarchicalQuery","_updateHierarchicalFilter","_find","_dataSource","viewSize","disablePrefetch","_prefetching","_reset","_syncWithDataSource","setViewSize","_recalculate","itemPresent","useRanges","dataOffset","prefetchThreshold","midPageThreshold","nextMidRange","nextPageThreshold","nextFullRange","pullBackThreshold","previousMidRange","previousFullRange","_goToRange","nextRange","syncDataSource","prefetchOffset","expanding","_expanding","_syncPending","_firstItemUid","batchSize","batchBuffer","endreached","prefetching","prefetched","reset","dataSourceBinding","bindingName","Binder","bindings","_dataBinding","dataBinding","_dataBound","dataBound","_itemChange","itemChange","bindElement","_ns","_parents","removedItems","unbindElementTree","all","addedItems","hds","addedDataItems","multiselect","Select","MultiSelect","retrievePrimitiveValues","dataValueField","bindingTargetForRole","WidgetBindingTarget","parseBindings","token","colonIndex","keyValueRegExp","createBindings","binding","childrenCopy","deep","unbindElement","whiteSpaceRegExp","valueField","valueUpdate","valuePrimitive","autoBind","BindingTarget","Binding","TemplateBinding","EventBinding","dom","destroyWidget","bindingTarget","deleteExpando","removeAttribute","destroyWidgets","unbindElementChildren","namespace","TypedBinder","arraySplice","binders","VALUE","SOURCE","EVENTS","CHECKED","CSS","dependencies","_access","dependency","currentSource","parsedValue","_parseValue","removeClass","readonly","dataFormat","invisible","_initChange","cloneNode","reference","insertBefore","checked","selectedIndex","selected","valueIndex","sourceValue","optionIndex","optionValue","check","_valueIsObservableObject","_valueIsObservableArray","_source","valueLength","sourceItem","dataTextField","isObservableObject","cascadeFrom","listView","bound","_preselect","gantt","j","old","removeIndex","newValue","oldValues","newValues","selectedValue","_isBound","scheduler","arr","addLength","oldLength","shifted","shiftedLength","toDestroy","hasValue","hasSource","hasEvents","hasChecked","hasCss","widgetBinding","specificBinders","applyBinding","binder","observableHierarchy","recursiveRead","parseInteger","parseCSS","propertyName","acc","strip3DTransforms","transformProps","transform2d","normalizeCSS","lowerKey","isTransformed","transformation","cssValues","TRANSFORM","animationProperty","transform","computed","NONE","matrix3dRegExp","translateXRegExp","atan2","capitalize","word","createEffect","definition","effectClass","Effect","opt1","opt2","opt3","theDirection","createToggleEffect","defaultStart","defaultEnd","IN_OUT","startValue","_startValue","endValue","_endValue","shouldHide","_shouldHide","prepare","_direction","startDataValue","startDataValueIsSet","_reverse","clipInHalf","vertical","HEIGHT","WIDTH","CLIPS","curProxy","EffectSet","FOUR_DIRECTIONS","TRANSFER_START_STATE","ROTATIONS","RESTORE_OVERFLOW","IGNORE_TRANSITION_EVENT_SELECTOR","Animation","Transition","scaleProperties","scale","scalex","scaley","scale3d","translateProperties","translate","translatex","translatey","translate3d","hasZoom","cssParamsRegExp","oldEffectsRegExp","singleEffectRegExp","unitRegExp","transform2units","rotate","skew","cssPrefix","BLANK","PX","AUTO","HIDDEN","ORIGIN","ABORT_ID","OVERFLOW","TRANSLATE","POSITION","COMPLETE_CALLBACK","TRANSITION","BACKFACE","PERSPECTIVE","DEFAULT_PERSPECTIVE","TRANSFORM_PERSPECTIVE","transition","modifier","horizontal","stopQueue","transformValue","step","elem","cur","exclusive","ease","mirror","redirectedEffect","resolved","$1","$2","effect","effectBody","timeoutID","stopTransitionCalled","stopTransition","oldKeys","speeds","merge","unique","taskKeys","retainPosition","restore","run","jdx","childrenLength","effectName","setReverse","addRestoreProperties","restoreCallback","effectSet","parsedEffects","useTransition","multiple","single","position","isFixed","originalPosition","dX","dY","marginLeft","marginTop","_additionalEffects","play","additional","_duration","compositeRun","_complete","divisor","tmp","previous","previousDivisor","slideIn","margin","origin","setLength","realLength","outerBox","box","innerBox","currentScale","fillScale","transformOrigin","_container","rotation","zIndex","_clipInHalf","clip","face","_face","temporary","opacity","reverseDirection","faceClone","backClone","staticPage","turningPage","transformStyle","_before","_after","transitionClass","_previous","_transitionClass","beforeTransition","afterTransition","_both","_element","_containerClass","containerClass","completeProxy","isAbsolute","originalOverflow","both","_tickProxy","_tick","tick","done","onEnd","onCancel","timePassed","startDate","moveTo","movable","initial","_easeProxy","moveAxis","easeOutExpo","pow","easeOutBack","inner","outer","fitScale","parseTransition","transitionRegExp","SCRIPT","SHOW","HIDE","TRANSITION_START","TRANSITION_END","ATTACH","DETACH","sizzleErrorRegExp","View","content","_wrap","_evalTemplate","evalTemplate","_fragments","notInitialized","_createElement","_eachFragment","ViewClone","triggerBeforeShow","triggerBeforeHide","showStart","showEnd","hideEnd","detach","fragments","getElementById","contents","replaceWith","Layout","containers","_createContainer","showIn","ViewContainer","Fragment","attach","running","after","locationID","previousEntry","theTransition","transitionData","hub","signalr","fail","callbacks","_crud","server","resolveRules","resolvers","validator","ruleResolvers","numberOfDecimalDigits","parseHtml","parseHTML","searchForMessageContainer","invalidMsgRegExp","Validator","NS","INVALIDMSG","INVALIDINPUT","VALIDINPUT","emailRegExp","urlRegExp","INPUTSELECTOR","CHECKBOXSELECTOR","NUMBERINPUTSELECTOR","BLUR","NAME","FORM","NOVALIDATE","VALIDATE","VALIDATE_INPUT","patternMatcher","matcher","hasAttribute","validateAttributeSelector","_errorTemplate","errorTemplate","_inputSelector","_checkboxSelector","_errors","_attachEvents","_isValidated","required","email","dateCompare","checkbox","raise","validateOnBlur","validate","stopImmediatePropagation","_checkElement","validateInput","inputs","invalid","isValid","valid","lbl","messageText","wasValid","messageLabel","lblId","_checkValidity","_findMessageContainer","_extractMessage","_decorateMessageContainer","insertAfter","hideMessages","locators","messageLocators","getElementsByTagName","locate","decorate","ruleKey","customMessage","numericCssPropery","within","containerBoundaries","minX","minY","maxX","maxY","checkTarget","targets","areas","theTarget","theFilter","targetLen","areaLen","targetElement","destroyDroppable","groupName","droppables","scrollableViewPort","scrollableRoot","$window","findScrollableParent","autoScrollVelocity","mouseX","mouseY","rect","AUTO_SCROLL_AREA","lastDropTarget","Movable","DropTarget","DropTargetArea","Draggable","draggables","dropTargets","dropAreas","KEYUP","DRAGSTART","DRAG","DRAGEND","DRAGCANCEL","HINTDESTROYED","DRAGENTER","DRAGLEAVE","DROP","TapCapture","_press","_release","attachEvent","captureNext","cancelCapture","PaneDimension","forcedEnabled","measure","scrollSize","makeVirtual","virtual","_virtualMin","_virtualMax","virtualSize","outOfBounds","forceEnabled","getTotal","rescale","scaledTotal","minScale","centerOffset","PaneDimensions","forcedMinScale","maxScale","newScale","centerCoordinates","PaneAxis","dimension","dragMove","resistance","translateAxis","Pane","elastic","gesture","coordinates","offsetX","offsetY","previousGesture","previousCenter","scaleDelta","scaleWith","TRANSFORM_STYLE","webkitTransformOrigin","_saveCoordinates","by","scaleTo","newCoordinates","draggable","dropTarget","_over","_out","_drop","dropped","destroyGroup","_cache","_activated","_drag","_cancel","_afterEndHandler","_afterEnd","_captureEscape","cursorOffset","holdToDrag","autoScroll","cancelHold","_updateHint","boundaries","hintOffset","hint","_shouldIgnoreTarget","ignoreSelector","currentTargetOffset","scopeTarget","scopeFrom","cursorElement","_elementUnderCursor","_cursorElement","_scrollableParent","_lastEvent","_processMovement","_scrollCompenstation","_scrollVelocity","_scrollInterval","_withDropTarget","_autoScroll","yIsScrollable","xIsScrollable","isRootNode","yInBounds","xInBounds","compensation","initialTarget","utils","SNAPBACK_DURATION","SCROLLBAR_OPACITY","FRICTION","VELOCITY_MULTIPLIER","MAX_VELOCITY","OUT_OF_BOUNDS_FRICTION","ANIMATED_SCROLLER_PRECISION","RELEASECLASS","REFRESHCLASS","PULL","RESIZE","SCROLL","MOUSE_WHEEL_ID","ZoomSnapBack","tapCapture","DragInertia","freeze","_moveTo","paneAxis","_snapBack","velocityMultiplier","friction","snapBack","AnimatedScroller","_updateCoordinates","setCoordinates","setCallback","ScrollBar","elementSize","scrollMovable","alwaysVisible","paneSize","sizeRatio","visibility","avoidScrolling","pane","zoomSnapBack","animatedScroller","_native","prepend","scrollElement","fixedContainer","wrapInner","velocityX","velocityY","horizontalSwipe","originatedFromFixedContainer","verticalSwipe","scrollTo","mousewheelScrolling","pulled","_initAxis","_wheelEnd","_wheel","_wheelY","pullToRefresh","_initPullToRefresh","_wheelScroll","_wheelTimeout","pullOffset","visibleScrollHints","pullTemplate","releaseTemplate","refreshTemplate","contentResized","_scale","zoomOut","animatedScrollTo","pullHandled","refreshHint","hintContainer","yinertia","xinertia","_paneChange","_dragEnd","scrollBar","HORIZONTAL","VERTICAL","RESIZEEND","Resizable","orientation","_positionMouse","_position","_sizingDom","draggableElement","drag","dragcancel","dragstart","dragend","_stop","_max","hintSize","_initialElementPosition","_min","_initialMousePosition","_maxPosition","_minPosition","maxPosition","minPosition","currentPosition","invalidClass","resizing","targetPosition","containsOrEqualTo","defaultHint","defaultPlaceholder","BEFORE_MOVE","ACTION_SORT","ACTION_REMOVE","ACTION_RECEIVE","DEFAULT_FILTER","MISSING_INDEX","Sortable","_createDraggable","connectWith","cursor","moveOnDragEnter","_dragcancel","_dragend","draggedElement","_placeholder","draggableEvent","before","_setCursor","_resetCursor","targetCenter","offsetDelta","sibling","getSibling","_findTarget","axisDelta","eventData","_movementByAxis","_getElementCenter","appendToBottom","_movePlaceholder","appendAfterHidden","_isFloating","connectedList","connectedListEventData","draggedIndex","placeholderIndex","oldIndex","newIndex","getKendoSortable","_findElementUnderCursor","has","sortable","_isEmpty","_isLastHidden","_searchConnectedTargets","sortableInstance","connected","_isCursorAfterLast","lastItemOffset","lastItem","cursorPosition","_originalCursorType","_cursorStylesheet","_items","not","collision","elementPosition","Selectable","ARIASELECTED","SELECTED","ACTIVE","SELECTABLE","UNSELECTING","supportEventDelegation","_marquee","_lastActive","aria","_isElement","ctrlKey","metaKey","whichCode","buttonCode","button","_allowSelection","selectRange","_firstSelectee","_unselect","_notify","_downTarget","currentElement","useAllItems","_selectElement","_invalidateSelectables","toSelect","selectElement","preventNotify","resetTouchEvents","continuousItems","selectable","asLowerString","CLICK","KBUTTON","KBUTTONICON","KBUTTONICONTEXT","DISABLED","DISABLEDSTATE","FOCUSEDSTATE","SELECTEDSTATE","Button","_graphics","_focus","_blur","_keydown","_keyup","icon","spriteCssClass","imageUrl","_isNativeButton","span","img","isEmpty","err","numeric","wrapClassName","iconTemplate","FIRST","PREV","NEXT","LAST","KEYDOWN","MOUSEDOWN","DOCUMENT_ELEMENT","Pager","pageSizes","pageItems","linkTemplate","selectTemplate","currentPageTemplate","_refreshHandler","downEvent","previousNext","of","allPages","itemsPerPage","DropDownList","kendoDropDownList","_refreshClick","_toggleActive","buttonCount","morePages","setDataSource","reminder","hasAll","selectAll","_hideList","tabKeyTrapNS","focusableNodesSelector","TabKeyTrap","OPEN","CLOSE","DEACTIVATE","ACTIVATE","CENTER","TOP","BOTTOM","ABSOLUTE","BODY","LOCATION","VISIBLE","EFFECTS","ACTIVEBORDER","ACTIVEBORDERREGEXP","ACTIVECHILDREN","WINDOW","Popup","parentPopup","collisions","anchor","_hovered","animation","open","close","_animationClose","_mousedownProxy","_mousedown","_resizeProxy","toggleTarget","toggleEvent","viewport","copyAnchorStyles","modal","adjustSize","_hideDirClass","_closing","_toggleResize","fixed","flipped","_openAnimation","_showDirClass","_location","dirClass","skipEffects","openEffects","closeEffects","popup","ev","_resizeTimeout","_scrollableParents","_fit","viewPortSize","output","_flip","anchorSize","boxSize","parentsUntil","siblingContainer","parentZIndex","viewportOffset","viewportWidth","viewportHeight","pos","anchorParent","offsets","flipPos","elementHeight","wrapperHeight","isWindow","origins","positions","siblings","_align","offsetParent","appendToOffset","verticalOrigin","horizontalOrigin","verticalPosition","horizontalPosition","anchorOffset","anchorWidth","anchorHeight","trap","_keepInTrap","removeTrap","shouldTrap","focusableItems","focusableItemsCount","focusedItemIndex","prevEl","nextEl","tabIndex","KNOTIFICATION","KICLOSE","KHIDING","INFO","SUCCESS","WARNING","WRAPPER","TEMPLATE","SAFE_TEMPLATE","Notification","_compileTemplates","templates","_guid","_isRtl","_compileStacking","stacking","pinned","hideOnClick","allowHideAfter","autoHideAfter","kendoTemplate","_compiled","templateId","_defaultCompiled","_safeCompiled","_getCompiled","defaultCompiled","paddings","paddingTop","paddingRight","paddingBottom","paddingLeft","horizontalAlignment","_popupOrigin","_popupPosition","_popupPaddings","_attachPopupEvents","attachClick","_hidePopup","closeIcon","attachDelay","_showPopup","openPopup","_triggerHide","deactivate","_togglePin","pin","win","_attachStaticEvents","_hideStatic","_showStatic","insertionMethod","defaultArgs","typeIcon","showText","warning","openedNotifications","getNotifications","guidElements","newOptions","restoreTitle","restoreTitleAttributeForElement","saveTitleAttributeForElement","saveTitleAttributes","DOCUMENT","ARIAIDSUFFIX","DESCRIBEDBY","CONTENTLOAD","KCONTENTFRAME","IFRAMETEMPLATE","POSITIONS","REVERSE","DIRCLASSES","DIMENSIONS","DEFAULTCONTENT","Tooltip","_documentKeyDownHandler","_documentKeyDown","showOn","_showOn","_mouseenter","autoHide","_mouseleave","showAfter","callout","_show","_appendContent","iframe","contentOptions","showIframe","src","_ajaxRequest","_initPopup","activate","ariaId","_positionCallout","arrow","_closeButtonClick","arrowBorder","elementOffset","offsetAmount","adjustPopupWidth","computedWidth","fontFamily","min-width","toggleActive","STATE_ACTIVE","actionSheetWrap","preventClick","findFocusableSibling","candidate","components","Item","ToolBarButton","OverflowButton","ButtonGroup","ToolBarButtonGroup","OverflowButtonGroup","ToolBarSplitButton","OverflowSplitButton","ToolBarSeparator","OverflowSeparator","TemplateItem","OverflowTemplateItem","Group","ToolBar","TOOLBAR","BUTTON","OVERFLOW_BUTTON","TOGGLE_BUTTON","BUTTON_GROUP","SPLIT_BUTTON","SEPARATOR","POPUP","RESIZABLE_TOOLBAR","STATE_DISABLED","STATE_HIDDEN","GROUP_START","GROUP_END","PRIMARY","ICON","ICON_PREFIX","BUTTON_ICON","BUTTON_ICON_TEXT","LIST_CONTAINER","SPLIT_BUTTON_ARROW","OVERFLOW_ANCHOR","OVERFLOW_CONTAINER","FIRST_TOOLBAR_VISIBLE","LAST_TOOLBAR_VISIBLE","TOGGLE","OVERFLOW_OPEN","OVERFLOW_CLOSE","OVERFLOW_NEVER","OVERFLOW_AUTO","OVERFLOW_ALWAYS","OVERFLOW_HIDDEN","KENDO_UID_ATTR","toolbar","overflowAnchor","overflowContainer","registerComponent","addOverflowAttr","addUidAttr","addIdAttr","addOverflowIdAttr","hidden","isEnabled","twin","resizable","useButtonTag","primary","togglable","addToGroup","clickHandler","toggleHandler","propagate","getParentGroup","isChild","_addGraphics","align","hasIcon","showIcon","overflowHidden","createButtons","buttonConstructor","buttons","buttonGroup","mainButton","arrowButton","popupElement","createMenuButtons","createPopup","_navigatable","main","splitButton","kendoPopup","li","altKey","menuButtons","rootUid","separator","_groups","isMobile","_renderOverflow","overflowUserEvents","_toggleOverflow","_resizeHandler","_buttonClick","release","_toggleOverflowAnchor","tool","overflowTool","component","itemClasses","overflowTemplate","_shrink","_getItem","toolbarItem","overflowItem","isResizable","getSelectedFromGroup","horizontalDirection","isComplexTool","hasVisibleChildren","splitContainer","urlTarget","isSplitButtonArrow","_toggle","lastHasFocus","firstHasFocus","isFirstTool","prevFocusable","isOverflowAnchor","_getPrevFocusable","elementToFocus","prevElement","prevElements","prevAll","containerWidth","_stretch","_markVisibles","_childrenWidth","childrenWidth","commandElement","visibleCommands","_hideItem","hiddenCommands","_showItem","overflowItems","toolbarItems","visibleOverflowItems","visibleToolbarItems","unifyType","getSelectedOption","mapChangedItems","itemsToMatch","itemsLength","selectedLength","changed","unchanged","isValidFilterExpr","removeFiltersForField","STATIC_LIST_NS","StaticList","ID","FOCUSED","HOVER","LOADING","HIDDENCLASS","GROUPHEADER","LABELIDPART","CASCADE","isIE","isIE8","quotRegExp","alternativeNames","ComboBox","List","_isSelect","ul","aria-hidden","_listMousedown","_header","_noData","_footer","_accessors","_initValue","footerTemplate","headerTemplate","noDataTemplate","_renderFooter","_renderNoData","_focused","_editable","_listOptions","currentOptions","listBoundHandler","_listBound","_listChange","_activateItem","_deactivateItem","groupTemplate","fixedGroupTemplate","$angular","_initList","listOptions","selectedItemChange","VirtualList","_setListValue","_updateSelectionState","filterInput","_isFilterEnabled","_hideClear","_clear","_showClear","_clearValue","_clearText","_accessor","enforceMinLength","_clearFilter","_filterSource","newExpression","dataSourceState","resetPageSettings","removed","_cascading","setDSFilter","_angularElement","noData","_toggleNoData","_toggleHeader","groupHeader","footer","header","_allowOpening","_old","_ignoreCase","widgetOptions","_open","_inputValue","_typingTimeout","minLength","_state","_searchByWord","_unbindDataSource","_form","_resetHandler","selectedDataItems","_text","_value","_aria","suggest","_ariaLabel","labelId","focusedElm","inputElm","inputId","labelElm","ariaLabel","ariaLabelledBy","_generateLabelId","_oldIndex","_typing","typing","_enable","_dataValue","_offsetHeight","_height","offsetTop","popups","footerHeight","_adjustListWidth","borderLeftWidth","borderRightWidth","autoWidth","minWidth","_openHandler","_closeHandler","_focusItem","noFocusedItem","highlightFirst","scrollToIndex","_calculateGroupPadding","padding","_calculatePopupHeight","_resizePopup","_popup","_makeUnselectable","_toggleHover","preventFocus","touchEnabled","MSPointers","_prevent","_triggerCascade","_cascadeTriggered","userTriggered","_userTriggered","_triggerChange","_valueBeforeCascade","_requestStartHandler","_requestEndHandler","_errorHandler","requireValueMapper","valueMapper","_initial","_initialIndex","_parentWidget","_cascadeSelect","_accessorInput","_accessorSelect","_custom","custom","_customOption","_hideBusy","_busy","_arrowIcon","_showBusy","_request","_requestEnd","_firstItem","focusFirst","_lastItem","focusLast","_nextItem","focusNext","_prevItem","focusPrev","activeFilter","shouldTrigger","_fetch","dataItemByIndex","getElementIndex","_focusElement","focusout","scrollWith","_fetchData","hasItems","_options","optionLabel","dataText","dataValue","htmlElement","formId","parentElement","_cascade","cascade","_cascadeHandlerProxy","_cascadeHandler","_cascadeFilterRequests","_selectedValue","_toggleCascadeOnFocus","valueBeforeCascade","_clearSelection","_cascadeChange","filterValue","cascadeFromField","currentHandler","_optionID","_selectedIndices","_dataItems","_values","_getter","_templates","_onScroll","_scrollId","_renderHeader","_fixedHeader","_render","scroll","itemOffsetTop","itemOffsetHeight","contentScrollTop","contentOffsetHeight","bottomDistance","_getValues","_valueGetter","hasCandidate","_current","_get","focusIndex","skipUpdate","_skipUpdate","indices","filtered","singleSelection","selectedIndices","added","isFiltered","_deselectFiltered","_deselect","_valueComparer","removeAt","setValue","_valueDeferred","_valueIndices","_valueExpr","normalized","_valueType","_dataItemPosition","valueExpr","removedIndices","_template","_normalizeIndices","newIndices","_firstVisibleItem","itemHeight","lastChild","previousSibling","isGrouped","visibleItem","_renderItem","notFirstItem","newGroup","dataContext","_selected","_lastDSFilter","skipUpdateOnBind","isItemChange","_bound","modular","minYear","maxYear","build","weekNumberBuild","isWeekColumnVisible","cellsPerRow","perRow","weekNumberTemplate","cellTemplate","emptyCellTemplate","DATE","disableDates","isInRange","date1","date2","year1","getToday","restrictValue","shiftArray","multiplier","mousetoggle","MOUSEENTER","FOCUS","prevent","getCalendarInfo","depth","extractFormat","MONTH","dates","makeUnselectable","addClassToViewContainer","currentView","isEqualDatePart","value1","value2","isEqualMonth","getDisabledExpr","createDisabledExpr","convertDatesArray","disabledDates","searchExpression","isEqualDate","oldValue","transitionOrigin","KEYDOWN_NS","MIN","SLIDE","CENTURY","NAVIGATE","OTHERMONTH","OTHERMONTHCLASS","TODAY","CELLSELECTOR","FOCUS_WITH_NS","MOUSEENTER_WITH_NS","MOUSELEAVE","PREVARROW","NEXTARROW","ARIA_DISABLED","ARIA_SELECTED","ARIA_LABEL","decade","century","Calendar","unescape","link","_toDateObject","_focusView","focusOnNav","_cellID","_index","_addClassProxy","_active","_cell","todayString","toDateString","_cellByDate","_removeClassProxy","weekColumnHeader","_today","_title","_table","_bindTable","_option","navigateToPast","navigateToFuture","navigateUp","navigateDown","future","_oldTable","_changeView","_animate","_class","isDisabled","_nextNavigatable","navigatableDate","active","_horizontal","viewWidth","float","margin-left","unwrap","_vertical","disabledDate","links","isBigger","isTodayDisabled","_todayClick","firstVisibleDay","calendarInfo","tzOffsetBefore","resultDATE","tzOffsetDiff","navigateUrl","hasUrl","currentCalendar","firstDayIdx","shortNames","linkClass","dateString","currentDate","month1","month2","year2","setMonth","viewsEnum","approximateStringMatching","oldText","oldFormat","newText","diff","deletedSymbol","oldTextSeparator","knownSymbols","customDateTime","INPUT_EVENT_NAME","STATEDISABLED","STATEDEFAULT","STATEINVALID","READONLY","DateInput","insidePicker","weekday","hour","minute","second","dayperiod","_unbindInput","_bindInput","_updateElementValue","_formElement","_dateTime","getDateObject","_oldValue","stringAndFromat","toPair","_oldText","_format","_paste","_input","_mouseUp","_scroll","navigationOnly","difSym","newEvent","stateInvalid","blinkInvalid","parsePart","_selectSegment","_blinkInvalidTimeout","_selectNearestSegment","returnValue","keycode","modifyPart","begin","initDate","initFormat","initCulture","initMessages","generateMatcher","retFormat","returnsFormat","setExisting","typedMonthPart","typedDayPeriodPart","sampleFormat","placeholders","mins","formatResult","getValue","newMonth","setMinutes","setSeconds","currentChar","newHours","monthNames","newYear","newMinutes","newSeconds","parseFormats","DatePicker","DIV","SPAN","DEFAULT","HOVEREVENTS","MAX","ARIA_EXPANDED","ARIA_HIDDEN","DateView","_dateViewID","_calendar","_setOptions","selectIsClicked","handled","_initialOptions","_wrapper","dateView","_updateARIA","_icon","aria-expanded","aria-owns","dateInput","_dateInput","_update","ARIATemplate","_dateIcon","_inputWrapper","dateChanged","valueUpdated","textFormatted","aria-controls","formattedValue","isSameType","_ariaTemplate","indexOfWordAtCaret","caretIdx","wordAtCaret","replaceWordAtCaret","defaultSeparator","words","placeholderSupported","ARIA_READONLY","AutoComplete","_loader","_clearButton","_keypress","_search","_prev","autocomplete","aria-haspopup","_resetFocusItemHandler","_resetFocusItem","_toggleCloseVisibility","clearButton","_progressHandler","_separator","_mute","_unifySeparators","_last","wordIndex","groupsLength","isActive","_touchScroller","_muted","_selectValue","_defaultSeparator","itemSelected","_loading","DOMelement","assign","normalizeIndex","sameCharsOnly","character","STATE_FILTER","STATE_ACCEPT","MSG_INVALID_OPTION_LABEL","_focusHandler","_focusInputHandler","_focusInput","_optionLabel","_inputTemplate","_word","_span","_mobile","_filterHeader","_textAccessor","valueTemplate","optionLabelTemplate","hasOptionLabel","_arrow","_resizeFilterInput","isInputActive","originalPrevent","_optionLabelDataItem","loweredText","_valueSetter","_optionLabelText","_assignInstance","_buildOptions","optionLabelValue","initialIndex","_presetValue","_filterPaste","_focusinHandler","_focusoutHandler","isIFrame","self","_wrapperMousedown","_wrapperClick","dropDownWrapper","isPopupVisible","_getElementDataItem","_matchText","_shuffleData","splitIndex","optionDataItem","_selectNext","oldFocusedItem","dataLength","isInLoop","fromCharCode","charCode","_popupOpen","compareElement","jQueryCandidate","_resetOptionLabel","focusedItem","mapValueTo","additionalClass","keepState","SELECTOR","accesskey","unselectable","getElements","optionLabelText","STATE_REBIND","_setText","syncValueAndText","_pasteTimeout","hasText","isCustom","_arrowClick","_inputFocus","_inputFocusout","_inputPaste","_openPopup","_scrollToFocusedItem","_updateSelection","hasInitialIndex","_updateItemFocus","isFirstPage","_setDomInputValue","caretStart","currentCaret","maxLength","accessKey","LI","ACCEPT","FILTER","REBIND","DESELECT","FOCUSEDCLASS","HOVERCLASS","_optionsMap","_customOptions","_tagList","_textContainer","_tagID","tagList","_tagTemplate","tagMode","autoClose","maxSelectedItems","itemTemplate","tagTemplate","currentTag","_currentTag","_selectedItemChange","_initialValues","optionsMap","valueGetter","tagTextTemplate","notInput","closeButton","_removeTag","tag","customIndex","_close","_tagListClick","_clearClick","_retrieveData","inputValue","clearFilters","_normalizeValues","_setOption","isEmptyArray","_showBusyHandler","skipCaret","caretPos","textWidth","wrapperWidth","selectedItems","_buildSelectedItems","_selectedItemIndex","_angularTagItems","removedItem","addedItem","_maxTotal","maxTotal","currentTotal","isSelected","_innerWrapper","defaultTemplate","hasDataSource","isMultiple","computedStyles","hex","hue2rgb","p","q","parseColor","color","BaseColor","namedColorRegexp","RGB","namedColors","Bytes","HSV","HSL","Color","aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgrey","darkgreen","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkslategrey","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dimgrey","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","grey","green","greenyellow","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgrey","lightgreen","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightslategrey","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","slategrey","snow","springgreen","steelblue","tan","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen","toHSV","toRGB","toHex","toBytes","toCss","toCssRgba","rgb","r","toDisplay","other","c1","c2","NaN","h","ref","toHSL","l","resolvedColor","formatRegex","processor","channels","this$1","resolveColor","re","normalizeByte","padDigit","brightness","percBrightness","fromBytes","fromRGB","fromHSV","fromHSL","createWrapper","isHorizontal","orientationCssClass","cssClasses","tickPlacementCssClass","tickPlacement","showButtons","createButton","buttonCssClass","createSliderItems","smallStep","createTrack","dragHandleCount","firstDragHandleTitle","leftDragHandleTitle","dragHandleTitle","rightDragHandleTitle","stepValue","formatValue","calculatePrecision","power","parseAttr","defined","removeFraction","RangeSlider","MOUSE_DOWN","TRACK_MOUSE_DOWN","MOUSE_UP","TRACK_MOUSE_UP","MOVE_SELECTION","KEY_DOWN","MOUSE_OVER","DRAG_HANDLE","TRACK_SELECTOR","TICK_SELECTOR","STATE_SELECTED","STATE_FOCUSED","STATE_DEFAULT","SliderBase","rtlDirectionSign","_isHorizontal","_sizeFn","_outerSize","tooltip","_createHtml","_trackDiv","_setTrackDivWidth","_maxSelection","_sliderItemsInit","_keyMap","37","40","39","38","35","36","33","largeStep","34","_distance","_refresh","sizeBetweenTicks","pixelWidths","_calculateItemsWidth","_setItemsWidth","_setItemsTitle","_calculateSteps","_setItemsLargeTick","trackDivPosition","bordersWidth","titleNumber","limit","increment","valueWithoutFraction","itemsCount","itemWidth","trackDivSize","pixelStep","_roundWidths","pixelWidthsArray","balance","_addAdditionalSize","additionalSize","_pixelSteps","_getValueFromPosition","mousePosition","dragableArea","halfStep","startPoint","_getFormattedValue","tooltipTemplate","_getDraggableArea","endPoint","_firstHandleDrag","_activeHandle","_lastHandleDrag","_activeHandleDrag","_updateTooltip","_focusWithMouse","_setTooltipTimeout","_removeTooltip","_tooltipTimeout","_clearTooltipTimeout","tooltipDiv","_formResetHandler","Slider","dragHandle","_selection","Selection","Drag","increaseButtonTitle","decreaseButtonTitle","mouseDownHandler","newVal","_nextValueByIndex","_valueIndex","_setValueInRange","timer","_clearTimer","_refreshAriaAttr","_tooltipDiv","moveSelection","selectionValue","selectionDiv","halfDragHanndle","rtlCorrection","owner","_activeDragHandle","_setZIndex","oldVal","_createTooltip","colloutCssClass","wnd","tooltipInnerDiv","_scrollOffset","moveTooltip","slideParams","constrainValue","noAnimation","fadeOut","dragHandles","sdhOffset","viewPortEnd","maxOverflow","firstInput","secondInput","warn","dragSelectionStart","dragSelectionEnd","activeHandleDrag","selectionStartValue","selectionEndValue","selectionStartIndex","selectionEndIndex","halfHandle","makeSelection","selectionPosition","triggerEvent","relative","KEYS","BACKGROUNDCOLOR","ITEMSELECTEDCLASS","SIMPLEPALETTE","WEBPALETTE","WHITE","MESSAGES","noColor","clearColor","previewInput","CLICK_NS","ColorSelector","_tabIndex","_ariaId","_standalone","_triggerSelect","_updateUI","_onEnable","nohooks","_selectOnHide","ColorPalette","colors","tileSize","palette","columns","_selectedID","ex","FlatColorPicker","_hueElements","_selectedColor","_colorAsText","_sliders","_hsvArea","autoupdate","_clearedColor","_getHSV","_applyIEFilter","_hueSlider","_opacitySlider","_hsvRect","_hsvHandle","preview","track","backgroundImage","hueChange","opacityChange","hueSlider","opacitySlider","kendoSlider","slide","rw","rh","_svChange","hsvRect","hsvHandle","_hsvEvents","hue","handlePosition","dontChangeInput","ColorPicker","_selector","innerWrapper","toolIcon","_getPopup","selOptions","_noColorIcon","_isInputTypeColor","selectorType","kendoButton","selectorColor","buttonHtml","CLASS_ICON","truncate","INPUT","SPIN","TOUCHEND","STATE_INVALID","INTEGER_REGEXP","NumericTextBox","isStep","_focusout","_arrows","_validation","_toggleText","factor","restrictDecimals","spinners","upArrowText","downArrowText","_upArrowEventHandler","_downArrowEventHandler","_spin","_upArrow","_downArrow","adjusted","_adjust","_focusin","arrows","_spinning","_validationIcon","_focusing","groupRegExp","extractRegExp","caretPosition","_culture","_removeInvalidState","CLASSNAME","_initialTitle","aria-valuemin","aria-valuemax","_key","_step","isNumPadDecimal","_numericRegex","_addInvalidState","fractionRule","_floatRegExp","rounder","isNotNull","DOMElement","fieldType","convertToValueBinding","bindAttr","createAttributes","ruleName","validation","DATATYPE","BINDING","specialRules","convertItems","addValidationRules","modelField","oldIE","nameSpecialCharRegExp","ERRORTEMPLATE","editors","kendoNumericTextBox","kendoDatePicker","Editable","_validateProxy","_validate","clearContainer","editor","isObject","isValuesEditor","isCustomEditor","preventChangeTrigger","_validationEventInProgress","bindAttribute","bindingRegex","validatable","modelFields","DATABOUND","DATABINDING","FOCUSSELECTOR","KEDITITEM","EDIT","REMOVE","SAVE","ListView","_itemId","_selectable","_pageable","_crudHandlers","navigatable","altTemplate","editTemplate","_item","_progress","_error","_destroyEditable","pagerId","pageable","pager","multi","_scrollTo","scrollDirectionFunc","UseJQueryoffset","elementDimension","containerScrollAmount","containerDimension","clickCallback","focusAgain","canHandle","isTextBox","editItem","edit","clearSelection","_modelFromElement","_closeEditable","kendoEditable","clickNS","getSortedDomIndices","isUndefined","DRAGGEDCLASS","SELECTED_STATE_CLASS","RESET","DRAG_CLUE_CLASS","DROP_HINT_CLASS","CommandFactory","ListBoxCommand","RemoveItemsCommand","MoveItemsCommand","MoveUpItemsCommand","MoveDownItemsCommand","TransferItemsCommand","TransferItemsToCommand","TransferItemsFromCommand","TransferAllItemsToCommand","TransferAllItemsFromCommand","kendoAttr","DASH","DOT","SPACE","HASH","KENDO_LISTBOX","DISABLED_STATE_CLASS","ENABLED_ITEM_SELECTOR","ENABLED_ITEMS_SELECTOR","TOOLBAR_CLASS","TOOL_SELECTOR","FOCUSED_CLASS","LIST_CLASS","LIST_SELECTOR","ADD","REORDER","MOVE_UP","MOVE_DOWN","TRANSFER_TO","TRANSFER_FROM","TRANSFER_ALL_TO","TRANSFER_ALL_FROM","UNIQUE_ID","COMMAND","MOVE_UP_OFFSET","MOVE_DOWN_OFFSET","TOOLBAR_POSITION_CLASS_NAMES","ListBox","_list","_createToolbar","_createNavigatable","_listTabIndex","_getList","_destroySelectable","_destroyToolbar","_target","_draggable","dropSources","tools","moveUp","moveDown","transferTo","transferFrom","transferAllTo","transferAllFrom","_addItem","_bindDataSource","_syncElement","itemContent","_addItemAt","_insertElementAt","_keyDown","_getTabIndex","oldTarget","_getNavigatableItem","nextAll","_scrollIntoView","shouldPreventDefault","_shiftSelecting","_executeCommand","elementNode","listBox","_searchConnectedListBox","connectedListBox","closestContainer","originalElement","getKendoListBox","draggableOptions","draggedItem","reorder","dataItemAtIndex","itemAtIndex","listItem","_removeElement","_updateToolbar","listItems","_getItems","_removeItem","_updateAllToolbars","uniqueIdAttr","enabledItems","_enableItem","_dataChangeHandler","_setItemIds","viewLength","selectableOptions","_onSelect","toolbarElement","toolbarOptions","toolbarInsertion","commandName","command","execute","_updateToolStates","listBoxElements","elementsLength","_commands","commandType","getItems","canExecute","moveItems","movedItem","indecesInDom","movedItems","itemComparer","moveAction","item1","item2","indexItem1","indexItem2","domIndices","sourceListBox","getSourceListBox","destinationListBox","getDestinationListBox","updatedSelection","getUpdatedSelection","updateSelection","itemFilter","lastEnabledItem","containsLastItem","itemToSelect","_initTemplates","_createTools","_attachEventHandlers","_detachEventHandlers","toolsLength","toolsMessages","toolList","_createToolList","defaultTools","_onToolClick","_executeToolCommand","_updateToolState","toolName","toolElement","iconClass","stringDiffStart","str1","str2","MOUSEUP","PASTE","MaskedTextBox","_rules","_tokenize","_togglePrompt","_emptyMask","_timeoutId","_maskLength","clearPromptChar","unmaskOnPost","promptChar","0","9","#","L","?","&","C","A","_submitHandler","unmasked","_unmask","emptyMask","_mask","_unmaskedValue","_trackChange","_inputHandler","_legacyIEInputHandler","__changing","inputChange","backward","contentStart","endContent","lengthDiff","__dropping","_trimStartPromptChars","_findCaretPosBackwards","__backward","__pasting","chr","chrIdx","tokenIdx","tokensLength","_blinkInvalidState","_invalidStateTimeout","maskChars","getEffectDirection","parseDirection","updateItemClasses","IMG","IMAGE","LINK","DEFAULTSTATE","excludedNodesRegExp","updateArrow","updateFirstLast","arrowCssClass","getArrowCssClass","MENU","storeItemSelectEventHandler","selectHandler","getItemSelectEventHandler","setItemData","popupOpenerSelector","popupGroupSelector","getChildPopups","currentPopup","overflowWrapper","childPopupOpener","opener","popupId","POPUP_OPENER_ATTR","popupParentItem","POPUP_ID_ATTR","itemPopup","animationContainerSelector","overflowMenuParents","getParents","mousewheelDelta","parentsScroll","scrollDirection","isPointerTouch","allPointers","pointerType","touchPointerTypes","isTouch","removeSpacesBetweenItems","ContextMenu","DELAY","SCROLLSPEED","TIMER","ZINDEX","POINTERDOWN","MOUSEWHEEL","SCROLLWIDTH","SCROLLHEIGHT","OFFSETWIDTH","OFFSETHEIGHT","KENDOPOPUP","HOVERSTATE","menuSelector","groupSelector","popupSelector","allItemsSelector","disabledSelector","itemSelector","linkSelector","exclusionSelector","nextSelector","lastSelector","templateSelector","scrollButtonSelector","itemWrapper","scrollButton","image","sprite","rendering","wrapperCssClass","firstLevel","itemCssAttributes","imageCssAttributes","imageAttr","contentCssAttributes","contentAttr","defaultClasses","textClass","textAttributes","arrowClass","encoded","groupAttributes","expanded","groupCssClass","Menu","_initData","_updateClasses","_animations","nextItemZIndex","_initOverflow","_attachMenuEventsHandlers","openOnClick","clicked","closeOnClick","hoverDelay","scrollable","popupCollision","_overflowWrapper","_preventClose","_removeHoverItem","_checkActiveElement","_mouseleavePopup","_mouseenterPopup","_documentClickHandler","_documentClick","_detachMenuEventsHandlers","backwardBtn","forwardBtn","initialWidth","initialCssWidth","_openedPopups","_scrollWrapper","_initScrolling","_setOverflowWrapperWidth","_toggleScrollButtons","_popupsWrapper","menuWidth","borders","wrapperCssWidth","_reinitOverflow","overflowChanged","_destroyOverflow","popupWrapper","popupParentLi","isNumeric","mouseWheelDistance","backwardDouble","forwardDouble","scrolling","touchEvents","scrollValue","finish","mouseenterHandler","mousedownHandler","scrollSpeed","_closeChildPopups","currentScroll","_toggleDisabled","referenceItem","inserted","_insert","plain","groupData","renderGroup","renderItem","visiblePopups","closePopup","overflowPopup","windowHeight","setScrolling","nextZindex","parentHorizontal","_triggerEvent","maxHeight","_configurePopupOverflow","_initPopupScrolling","popupOpener","groupId","_wrapPopupElement","skipMouseEvents","_initPopupScrollButtons","scrollButtons","_closeParentPopups","_setPopupHeight","popupOuterHeight","popupOffsetTop","bottomScrollbar","canFit","_initialHeight","dontClearClose","hasChildPopupsHovered","isPopupMouseLeaved","_isRootItem","_forceClose","isEnter","_closurePrevented","hoverItem","_hoverItem","_findRootParent","hasFocus","oldHoverItem","_oldHoverItem","nonContentGroupsSelector","_itemHasChildren","pointerTouch","delegateTarget","_","toElement","_closePopups","rootPopup","groupParent","innerPopup","_innerPopup","openHandle","childGroup","childGroupVisible","shouldCloseTheRootItem","childPopupId","formNode","itemElement","targetHref","sampleHref","isLink","isLocalLink","isTargetLink","_parentsUntil","enterKey","itemSelectEventData","isSelectItemDefaultPrevented","isSelectDefaultPrevented","_getEventData","_moveHover","belongsToVertical","_itemBelongsToVertival","_itemDown","_itemUp","_itemEsc","menuIsVertical","nextItem","_scrollToItem","_itemRight","parentItem","_childPopupElement","_itemLeft","scrollDir","currentScrollOffset","itemSize","itemOffset","ulSize","scrollButtonSize","itemPosition","menu","renderContent","subGroup","renderItems","_marker","_wire","_initialWidth","alignToAnchor","_showProxy","_closeProxy","_configurePopupScrolling","_setPopupWidth","windowWidth","popupOuterWidth","popupOffsetLeft","maxWidth","_closeTimeoutProxy","_showHandler","_eventOrigin","_targetChild","normalClick","sameTarget","containment","_triggerProxy","updateItemHtml","toggleButton","HREF","LINKSELECTOR","ITEM","GROUP","VISIBLEGROUP","EXPAND","CONTENT","COLLAPSE","ACTIVECLASS","GROUPS","CONTENTS","DISABLEDCLASS","SELECTEDCLASS","SELECTEDSELECTOR","HIGHLIGHTCLASS","ACTIVEITEMSELECTOR","clickableItems","disabledItems","selectableItems","defaultState","SINGLE","contentUrl","contentAttributes","itemIcon","PanelBar","_retryRequest","_first","expand","_angularCompile","requestFailed","retry","loadOnDemand","expandMode","_angularCompileElements","_angularCleanup","fieldAccessor","_fieldAccessor","useAnimation","animBackup","_animating","_addGroupElement","_collapseAllExpanded","_toggleItem","showProgress","loadingText","_refreshRoot","rootItemsHtml","_refreshChildren","_toggleGroup","findByUid","uidAttr","tempItem","_updateItems","_appendItems","_hasChildItems","retryHtml","_expanded","fieldBindings","itemsHtml","nodeWrapper","currentNode","panelBar","skipChange","_updateSelected","reload","focused","isReferenceItem","_updateItemsClasses","panels","_updateItemClasses","wrapElement","contentUrls","isAnchor","isVisible","animationSettings","hasCollapseAnimation","_animationCallback","stopExpand","contentElement","statusIcon","loadingIconTimeout","DEFAULTMIN","DEFAULTMAX","DEFAULTVALUE","DEFAULTCHUNKCOUNT","KPROGRESSBAR","KPROGRESSBARREVERSE","KPROGRESSBARINDETERMINATE","KPROGRESSBARCOMPLETE","KPROGRESSWRAPPER","KPROGRESSSTATUS","KCOMPLETEDCHUNK","KUPCOMINGCHUNK","KSTATEDISABLED","PROGRESSTYPE","PERCENT","CHUNK","COMPLETE","HUNDREDPERCENT","DEFAULTANIMATIONDURATION","PRECISION","progressStatus","ProgressBar","_progressProperty","_fields","_validateValue","_validateType","_progressAnimation","_updateProgress","chunkCount","showStatus","_isStarted","progressWrapper","currentType","initialStatusValue","_addChunkProgressWrapper","_calculatePercentage","validated","_roundValue","_updateChunks","_onProgressUpdateAlways","_updateProgressWrapper","completedChunks","percentagesPerChunk","percentageParsed","completedChunksCount","animationDuration","_animation","animationCssOptions","_addRegularProgressWrapper","_onProgressAnimateStart","_onProgressAnimate","_onProgressAnimateComplete","always","progressStatusWrapSize","progressInPercent","progressValue","progressWrapperSize","chunkSize","_normalizeChunkSize","lastChunk","_calculateChunkSize","chunkContainer","_onePercent","ACTIVATE_EVENTS","ResponsivePanel","_toggleHandler","_toggleButtonClick","_registerBreakpoint","_mediaQuery","_registerStyle","breakpoint","head","styleSheet","createTextNode","prevented","updateTabClasses","tabs","ACTIVESTATE","TABONTOP","tabGroup","scrollButtonHtml","buttonClass","CONTENTURL","NAVIGATABLEITEMS","HOVERABLEITEMS","TabStrip","_contentUrls","_tabPosition","_scrollable","_keyDownProxy","wr","setActive","contentHolder","activateTab","_endItem","endItem","rtl","tab","dataContentField","dataContentUrlField","dataImageUrlField","dataUrlField","dataSpriteCssClass","tabPosition","collapsible","scrollWrap","_scrollableModeActive","_scrollPrevButton","_scrollNextButton","ajaxRequest","_create","_updateContentElements","_appendUrlItem","_moveUrlItem","_removeUrlItem","referenceTab","referenceContent","fromIndex","newTabsCreated","activeItem","activeTab","contentElements","_elementId","tabStripID","elementId","wrapperId","isInitialUpdate","currentContent","contentAnimators","tabsHeight","_setContentElementsDimensions","contentDivs","activeDiv","marginStyleProperty","minHeight","_sizeScrollWrap","deactivateTab","wrapperOffsetWidth","tabGroupScrollWidth","scrollPrevButton","scrollNextButton","mouseDown","mouseUp","_scrollableAllowed","_nowScrollingTabs","marginRight","_scrollTabsByDelta","_scrollTabsToItem","tabGroupWidth","tabGroupPadding","scrLeft","hasCloseAnimation","neighbours","oldTab","visibleContents","isAjaxContent","showContentElement","showContent","inRequest","abort","scrollContainer","halfWidth","fakeProgress","endState","oldProgressAnimation","ajaxOptions","ajaxSettings","request","progressUpload","upload","evt","noProgress","XMLHttpRequest","lengthComputable","stopProgress","statusText","tabStrip","offsetDiff","dst","midnight","noon","TimeView","TimePicker","ARIA_ACTIVEDESCENDANT","_dates","_timeViewID","_heightHandler","dataBind","_html","msStart","lastIdx","msInterval","interval","startDay","innerText","_distinctSelection","selectionIndex","timeView","lastTimeOption","timeFormat","ARIA_OWNS","dateViewParams","timeViewParams","DateTimePicker","_views","_icons","_midnight","_calculateMidnight","dateButtonText","timeButtonText","dateIcon","timeIcon","_timeIcon","secondView","minDateEqual","maxDateEqual","timeViewOptions","rebind","isDateViewVisible","adjustedDate","_timeSelected","icons","isPercentageSize","percentageUnitsRegex","isPixelSize","pxUnitsRegex","isFluid","calculateSize","panePropertyAccessor","triggersResize","splitter","paneConfig","PANE","PaneResizing","horizontalDefaults","verticalDefaults","_resizable","_createHint","resizeend","LAYOUTCHANGE","KPANE","PANECLASS","Splitter","_dimension","_keys","decrease","increase","_resizeStep","_initPanes","triggerHandler","_addOverlays","_panes","_removeOverlays","_togglePane","_detachEvents","panes","navigationKeys","isResizing","_triggerAction","panesConfig","_initPane","config","arrowType","_updateSplitBar","splitbar","previousPane","nextPane","catIconIf","iconType","condition","prevCollapsible","prevCollapsed","collapsed","nextCollapsible","nextCollapsed","_updateSplitBars","_removeSplitBars","sizedPanesWidth","sizedPanesCount","freeSizedPanes","freeSizePanesCount","freeSizePaneWidth","alternateSizingProperty","positioningProperty","sizingDomProperty","lastNonCollapsedPane","splitBars","splitBarsCount","sizingProperty","totalSize","collapsedSize","_addPane","paneElement","referencePane","mousePositioningProperty","previousPaneConfig","nextPaneConfig","prevBoundary","nextBoundary","toPx","prevMinSize","prevMaxSize","nextMinSize","nextMaxSize","ghostPosition","previousPaneNewSize","nextPaneNewSize","fluidPanesCount","constrain","low","high","Infinity","buttonKeyTrigger","PopupBox","Alert","kendoAlert","Confirm","kendoConfirm","Prompt","kendoPrompt","KDIALOG","KWINDOW","KICONCLOSE","KCONTENTCLASS","KCONTENT","KTITLELESS","KDIALOGTITLE","KDIALOGTITLEBAR","KBUTTONGROUP","KALERT","KCONFIRM","KPROMPT","KTEXTBOX","KOVERLAY","INITOPEN","okText","promptInput","overlaySelector","DialogBase","_init","_centerCallback","_center","wrapperTemplate","_createDialog","_defaultFocus","_dimensions","_tabKeyTrap","toFront","_triggerInitOpen","_overlay","_focusDialog","closable","_closeClick","_closeKeyHandler","_setElementMaxHeight","_setElementHeight","paddingBox","elementMaxHeight","_paddingBox","_uiHeight","actionbar","actionbarHeight","titlebar","titlebarHeight","overlay","_waiAriaOverlay","_removeWaiAriaOverlay","_overlayedNodes","jthis","hiddenValue","titlebarActions","titleId","actions","_createActionbar","isStretchedLayout","buttonLayout","_addButtons","_normalizeButtonSize","btn","actionClick","_actionClick","actionKeyHandler","_actionKeyHandler","buttonSize","_mergeTextWithOptions","lastButton","closeBtn","actionButtons","_runActionBtn","preventClose","otherModalsVisible","overlayFx","showOptions","_animationOptions","_modals","Fade","fadeIn","_openAnimationEnd","basicAnimation","_initOpenTriggered","originalZIndex","windowObject","zIndexNew","_stopCenterOnResize","systemTriggered","hideOptions","_removeOverlay","_closeAnimationEnd","_centerOnResize","documentWindow","newLeft","newTop","_trackResize","modals","hideOverlay","_object","lastModal","zStack","encodedHtml","Dialog","alertWrapper","_ensureContentId","_ariaDescribedBy","_initFocus","_chooseEntryFocus","alert","confirmDialog","confirm","_createPrompt","promptContainer","promptInputContainer","promptDialog","prompt","executableScript","WindowResizing","_preventDragging","KWINDOWRESIZEHANDLES","addOverlay","removeOverlay","getPosition","parentOverflowX","parentOverflowY","offsetLeft","WindowDragging","KWINDOWTITLE","KWINDOWTITLEBAR","KWINDOWCONTENT","KHOVERSTATE","KFOCUSEDSTATE","MAXIMIZEDSTATE","CURSOR","REFRESH","MINIMIZE","MAXIMIZE","RESIZESTART","MINIMIZE_MAXIMIZE","KPIN","KUNPIN","PIN_UNPIN","TITLEBAR_BUTTONS","REFRESHICON","zero","Window","windowContent","suppressActions","_createWindow","_buttonEnter","_buttonLeave","_windowActionHandler","aria-labelledby","_onDocumentResize","toggleMaximization","resizeHandle","dragging","_actions","windowSpecificCommands","fade","autoFocus","isMaximized","isMinimized","_closable","newWidth","newHeight","w","_actionForIcon","k-i-close","k-i-window-maximize","k-i-window-minimize","k-i-window-restore","k-i-refresh","k-i-pin","k-i-unpin","titleBarHeight","titleBar","doc","_activate","_documentScrollTop","_documentScrollLeft","suppressAnimation","_deactivate","_actionable","_shouldFocus","windowTop","currentWindow","restoreOptions","_sizingAction","actionId","maximize","minimize","unpin","initOptions","contentFrame","_triggerRefresh","_ajaxComplete","_loadingIconTimeout","_ajaxError","_ajaxSuccess","contentTemplate","_showLoading","iframeSrcAttributes","contentHtml","hasMargin","wrapperPosition","relativeElMarginLeft","relativeElMarginTop","elementPadding","initialPosition","resizeDirection","initialSize","containerOffset","_relativeElMarginLeft","_relativeElMarginTop","windowBottom","windowRight","newWindowTop","initialWindowPosition","initialPointerPosition","startPosition","minLeftPosition","minTopPosition","_finishDrag","lastFrom","isPrimitive","getItemCount","listScreens","getDefaultItemHeight","lineHeight","mockList","bufferSizes","opposite","listValidator","downThreshold","upThreshold","lastScrollTop","scrollCallback","syncList","webkitTransform","map2","arr1","arr2","ITEMCHANGE","reshift","placeholderTemplate","GROUPITEM","isActivePromise","VIRTUALLIST","LIST","HEADER","VIRTUALITEM","HEIGHTCONTAINER","LISTBOUND","VIRTUAL_LIST_NS","_fetching","_selectedDataItems","_selectedIndexes","_rangesList","_promisesList","_renderItems","_triggerListBound","oppositeBuffer","_selectProxy","_clean","_deferValueSet","mute","_selectingValue","_createList","_forcePrefetch","shouldClear","_prefetchByValue","dataView","_dataView","forSelection","mapValueToIndex","mapValueToDataItem","indexes","deferredRange","itemCount","defs","pages","existingRange","isEmptyList","_activeDeferred","_getSkip","_findDataItem","_getRange","_getElementByIndex","_focusedIndex","_getElementLocation","_screenHeight","heightContainer","isAlreadySelected","prefetchStarted","_selectDeferred","_getIndecies","_deselectCurrentValues","_listCreated","_getElementByDataItem","_lastScrollTop","hasData","setScreenHeight","yPosition","yDownPostion","screenEnd","_generateItems","_saveInitialRanges","_buildValueGetter","_setHeight","getList","_listItems","_whenChanged","_reorderList","currentHeight","padHeight","lastRequestedRange","lastRangeStart","flatGroups","rangeStart","flatGroup","groupLength","_getterDeferred","firstItemIndex","_indexConstraint","firstVisibleGroup","currentVisibleGroup","firstVisibleDataItemIndex","firstVisibleDataItem","_itemMapper","listType","currentIndex","_currentGroup","_range","_getDataItemsCollection","_listIndex","theValidator","theNew","currentOffset","list2","range2","_bufferSizes","buffers","elementIndex","selectedIndexes","removedindexesCounter","_deselectSingleItem","oldSkip","_clickHandler","firstItem","initPopOvers","popovers","preventScrollIfNotInput","initWidgets","UI_OVERLAY","BEFORE_SHOW","AFTER_SHOW","BEFORE_HIDE","defaultTransition","_layout","_scroller","_model","layout","getLayout","stretch","modelScope","scroller","$destroy","purge","inited","_invokeNgController","_padIfNativeScrolling","isAndroid","skin","isAndroidForced","hasPlatformIndependentSkin","topContainer","bottomContainer","scrollerContent","idAttrValue","contentSelector","controller","$apply","_callController","$scope","_locate","platform","previousView","bodyRegExp","LOAD_START","LOAD_COMPLETE","SHOW_START","SAME_VIEW_REQUESTED","VIEW_SHOW","VIEW_TYPE_DETERMINED","AFTER","ViewEngine","errorMessage","sandbox","_hideViews","rootView","rootNeeded","layouts","viewContainer","getLayoutProxy","_setupLayouts","viewOptions","loader","showView","remoteViewURLPrefix","showClosure","_findViewElement","_createView","serverNavigation","_loadView","modalViews","urlPath","_getLayout","_xhr","_xhrComplete","responseText","CAPTURE_EVENTS","Loader","captureEvents","_attachCapture","changeMessage","transitionDone","EXTERNAL","DUMMY_HREF","SKIP_TRANSITION_ON_BACK_BUTTON","WIDGET_RELS","historyCallback","viewEngine","_historyNavigate","_historyReplace","closeActiveDialogs","viewShow","loadStart","loadComplete","sameViewRequested","viewTypeDetermined","_setPortraitWidth","_setupAppLinks","dialogs","navigateToInitial","portraitWidth","bindToRouter","router","attrUrl","hideLoading","showLoading","changeLoadingMessage","linkRoles","pressedButtonSelector","buttonSelectors","_mouseup","_appLinkClick","rel","delayedTouchEnd","openFor","paneContainer","ARROW","OVERLAY","DIRECTION_CLASSES","DIRECTIONS","ANIMATION","popupOptions","containerPopup","PopOver","initialOpen","SHIM","Shim","app","osname","ioswp","bb","shim","_hide","BEFORE_OPEN","WRAP","ModalView","_shim","AXIS","SWIPE_TO_OPEN","AFTER_HIDE","NULL_VIEW","Drawer","drawer","_viewShow","_attachTransition","swipeToOpen","leftPositioned","swipeToOpenViews","_moveViewTo","visibleOnCurrentView","_currentViewIncludedIn","_setAsCurrent","canMoveLeft","canMoveRight","leftSwipe","limitedPosition","newPosition","shouldShow","pastHalf","velocityThreshold","EXPANED_PANE_SHIM","SplitView","_style","_paramsHistory","expandedPaneShim","_shimUserEvents","collapsePanes","expandPanes","osCssClass","variant","setDefaultPlatform","statusBarStyle","wp8Background","noVariantSet","isOrientationHorizontal","getOrientationClass","setMinimumHeight","applyViewportHeight","HEAD","viewportTemplate","DEFAULT_OS","BERRYPHONEGAP","FONT_SIZE_COEF","CHROME","BROKEN_WEBVIEW_RESIZE","INITIALLY_HORIZONTAL","MOBILE_PLATFORMS","ios7","usedWithBlock","systemMeta","clipTemplate","ENABLE_CLIP","iconMeta","HIDEBAR","SUPPORT_SWIPE_TO_GO_BACK","HISTORY_TRANSITION","BARCOMPENSATION","STATUS_BAR_HEIGHT","SCREEN","Application","bootstrap","paneOptions","startHistory","_setupPlatform","_attachMeta","_setupElementClass","_attachHideBarHandlers","updateDocumentTitle","_setupDocumentTitle","_startHistory","hideAddressBar","browserHistory","historyTransition","retina","refreshBackgroundColorProxy","_resizeToScreenHeight","includeStatusBar","_clearExistingMeta","hideBar","defaultTitle","_hideBar","BUTTONS","CONTEXT_DATA","cancelTemplate","ActionSheet","ShimClass","_shimHideProxy","actionData","_shimHide","highlightButton","highlight","ANDROID3UP","deactivateTimeoutID","createBadge","useTap","clickOn","_userEvents","_timeoutDeactivate","badge","badgeElement","iconSpan","iconElement","BackButton","DetailButton","DISABLE","_button","selectOn","buttongroup","COLLAPSIBLE","INSET","HEADER_WRAPPER","CONTENT_WRAPPER","COLLAPSED","EXPANDED","ANIMATED","EXAPND","Collapsible","_buildHeader","inset","collapseIcon","expandIcon","iconPosition","instant","_getContentHeight","isCollapsed","whitespace","TEXT_NODE","whitespaceRegExp","addIcon","querySelector","enhanceItem","ICON_SELECTOR","enhanceLinkItem","itemAndDetailButtons","otherNodes","enhanceCheckBoxItem","putAt","VirtualListViewItem","LOAD_ICON","VirtualListViewLoadingIndicator","VirtualListViewPressToLoadMore","VirtualListViewItemBinder","ListViewItemBinder","ListViewFilter","ITEM_SELECTOR","HIGHLIGHT_SELECTOR","GROUP_CLASS","ACTIVE_CLASS","GROUP_WRAPPER","GROUP_TEMPLATE","SEARCH_TEMPLATE","STYLED","ITEM_CHANGE","buttonRegExp","HeaderFixer","headerFixer","cacheHeaders","_shouldFixHeaders","_cacheHeaders","_scrollHandler","_fixHeader","fixedHeaders","headerPair","headers","currentHeader","DEFAULT_PULL_PARAMETERS","RefreshHandler","pullParameters","pull","_pulled","itemConstructor","prevItem","endReached","below","totalHeight","averageItemHeight","remainingItemsCount","batchUpdate","nextIndex","initialOffset","lastDirection","above","lastTop","topBorder","bottomBorder","setDataItem","_loadIcon","_loadButton","loadMoreText","loadMore","kendoMobileButton","_hideShowButton","_showLoadButton","chromeHeight","_scrollEnd","pressToLoadMore","virtualViewSize","updateScrollerSize","updateSize","itemBinder","adding","removing","prependOnRefresh","appendOnRefresh","groupedMode","findByDataItem","_shouldShowLoading","replaceGrouped","insertAt","endlessScroll","filterable","autoFilter","searchInput","_oldFilter","_filterChange","_dataSourceChange","_refreshInput","appliedFilters","_applyFilter","scrollTreshold","scrollThreshold","_headerFixer","_itemsCache","_itemBinder","_pullToRefreshHandler","_enhanceItems","emptyDataSource","_scrollerInstance","triggerChange","replaceItem","newItem","_dim","_highlight","plainItem","dataIDAttribute","templateProxy","groupTemplateProxy","_headerTemplate","buttonElement","_styleGroups","rootItems","grouped","enhanced","createContainer","toggleTitle","centerElement","noTitle","showTitle","NavBar","leftElement","rightElement","DRAG_START","DRAG_END","ElasticPane","ScrollViewContent","VirtualScrollViewContent","Page","ScrollView","CHANGING","CURRENT_PAGE_CLASS","VIRTUAL_PAGE_CLASS","CLEANUP","VIRTUAL_PAGE_COUNT","LEFT_PAGE","CETER_PAGE","RIGHT_PAGE","LEFT_SWIPE","NUDGE","RIGHT_SWIPE","scrollView","_changeProxy","_refreshProxy","pageHTML","pageCount","ScrollViewPager","updateDimension","transitionTo","ScrollViewElasticPane","_getPages","contentHeight","enablePager","pagerOverlay","paneMoved","swipeType","bounce","snap","nextPage","approx","minSnap","maxSnap","currentPage","updatePage","forcePageUpdate","resizeTo","containerHeight","pageElements","_paged","_initPages","_buffer","_pendingPageRefresh","_pendingWidgetRefresh","_resetPages","_resetProxy","_endReachedProxy","emptyTemplate","emptyTemplateProxy","setWidth","_repositionPages","_updatePagesContent","thresholdPassed","isEndReached","_cancelMove","_moveBackward","_moveForward","setPageContent","_resetMovable","_onResize","_onReset","_onEndReached","theContent","VirtualPage","mobileContainer","transitionEnd","dragStart","dragEnd","_syncWithContent","_content","viewInit","bounceVelocityThreshold","prevPage","_dragStart","_transitionEnd","limitValue","minLimit","maxLimit","SWITCHON","SWITCHOFF","MARGINLEFT","ACTIVE_STATE","DISABLED_STATE","TRANSFORMSTYLE","SWITCH_MARKUP","Switch","onLabel","offLabel","background","snapPoint","_animateBackground","handleWidth","ACTIVE_STATE_CLASS","_buildButton","switchTo","_setActiveItem","switchByFullUrl","currentItem","tabstrip","withoutTimeout","$timeout","createWidget","attrs","origAttr","controllers","createIt","destroyRegister","kNgDisabled","kNgReadonly","isReadonly","kRebind","ctor","OPTIONS_NOW","exposeWidget","$emit","destroyWidgetOnScopeDestroy","setupRebind","$eval","bindToKNgDisabled","bindToKNgReadonly","kNgModel","bindToKNgModel","ngModel","bindToNgModel","ngForm","propagateClassToWidgetWrapper","kNgDelay","delayValue","parsed","unresolved","unwatch","$watch","$root","unregister","$attr","addOption","scopeValue","widgetEvents","optionsPath","kOptions","optionsValue","defaultOptions","dataName","eventKey","optionName","ignoredOwnProperties","ignoredAttributes","kDataSource","createDataSource","$log","kendoWidget","$parse","formValue","isForm","formRegExp","haveChangeOnElement","viewRender","onChange","currentVal","$viewValue","$modelValue","$render","formPristine","$pristine","$setViewValue","$setPristine","digest","$isEmpty","updating","valueIsCollection","currentValueLength","watchHandler","changeHandler","$angular_setLogicValue","$watchCollection","$setDirty","$angular_getLogicValue","deregister","$on","suspend","mo","disconnect","resume","observe","prevClassList","MutationObserver","classList","changes","chg","currClassList","attributeName","cls","rebindAttr","templateOptions","isUpload","_cleanUp","WIDGET_TEMPLATE_OPTIONS","templateContents","replaceChild","setTemplate","createDirectives","klass","make","directiveName","widgetName","module","directive","directiveFactory","shortcut","dashed","SKIP_SHORTCUTS","restrict","TAGNAMES","scopeField","kScopeField","MANUAL_DIRECTIVES","kendoWidgetInstance","isDigesting","destroyScope","defadvice","origMethod","pendingPatches","$injector","$defaultCompile","TreeList","TreeView","Scheduler","PivotGrid","PivotConfigurator","toDataSource","ds","mew","factory","kendoRenderedTimeout","RENDERED","require","$attrs","$element","roleattr","Editor","Upload","MobileButton","MobileBackButton","MobileDetailButton","MobileListView","entry","arg","$angular_scope","$angular_init","itemScope","$$kendoScope","vars","$new","$angular_makeEventHandler","kendoEvent","elems","colIdx","locals","isString","angularDataItem","templateSettings","col","terminal","pre","_instance","post","kAttr","priority","TreeMap","MobileScrollView","Grid","templateDirectives","templateName","attrName","outerHTML"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;CAwBC,SAAUA,EAAGC,QACVA,OAAO,cAAe,UAAWD,IACnC,WAyxGE,MAlxGC,UAAUE,EAAGC,EAAQC,GAGlB,QAASC,MA+GT,QAASC,GAAYC,EAAMC,GACvB,GAAIA,EACA,MAAO,IAAOD,EAAKE,MAAM,KAAMC,KAAK,OAAQD,MAAM,OAAOC,KAAK,WAAWC,QAAQ,MAAO,OAAOA,QAAQ,MAAO,OAAOA,QAAQ,MAAO,OAAS,GAE7I,IAAIC,GAAQL,EAAKM,OAAO,GAAIC,EAAOP,EAAKQ,UAAU,EAClD,OAAc,MAAVH,EACO,KAAOE,EAAO,KACJ,MAAVF,EACA,qBAAuBE,EAAO,KAE9B,IAAMP,EAAO,kBA4ChC,QAASS,GAAIC,EAAQC,EAAQC,GAIzB,MAHAF,IAAkB,GAClBC,EAASA,GAAU,EACnBC,EAAMD,EAASD,EAAOG,OAClBD,EACOE,EAAMH,GAAQH,UAAU,EAAGI,GAAOF,EAEtCA,EA4hCX,QAASK,GAAWC,GAChB,GAAIC,GAASD,EAAQE,IAAIC,GAAMC,QAAQC,YAAYH,IAAM,eAAiBF,EAAQE,IAAI,cAAeI,EAASL,EAASA,EAAOM,MAAMC,MAC5H,EACA,EACA,EACA,EACA,IAEA,EACA,EACA,EACA,EACA,GACDC,EAAOC,GAAKC,KAAKL,EAAO,KAAMA,EAAO,IAAM,GAClD,QACIM,MAAON,EAAO,GAAKG,EACnBI,OAAQP,EAAO,GAAKG,EACpBK,QAASR,EAAO,GAAKG,GAG7B,QAASM,GAAKf,EAASgB,GAAvB,GACmCC,GAEvBC,EAAgCC,EAAkCC,EAA0CC,EAsB5GC,EAAoDC,EAxBxDC,EAAUpB,GAAQoB,QAAqBC,EAAatB,GAAMuB,YAAaC,EAAcxB,GAAMyB,YA2C/F,OA1CK5B,GAAQ6B,SAASC,SAAS,0BAuBvBR,EAAUtB,EAAQ6B,OAAO,0BAA2BN,EAAeD,EAAQ,GAAGS,MAC9ET,EAAQU,GAAG,YACXV,EAAQW,OAEZhB,EAAaiB,GAAcC,KAAKZ,EAAaL,QAAUgB,GAAcC,KAAKZ,EAAaJ,QAClFF,GACDK,EAAQpB,KACJgB,MAAOF,EAAWS,EAAWzB,GAAW,EAAIyB,EAAWzB,GACvDmB,OAAQQ,EAAY3B,GACpBoC,UAAW,cACXC,aAAc,cACdC,gBAAiB,kBAjCrBpB,EAAQlB,EAAQ,GAAG+B,MAAMb,MAAOC,EAASnB,EAAQ,GAAG+B,MAAMZ,OAAQC,EAAec,GAAcC,KAAKjB,GAAQG,EAAgBa,GAAcC,KAAKhB,GACnJF,EAAaG,GAAgBC,GACxBD,KAAkBJ,GAAYA,GAAYE,KAC3CA,EAAQF,EAAWS,EAAWzB,GAAW,EAAIyB,EAAWzB,KAEvDqB,KAAmBL,GAAYA,GAAYG,KAC5CA,EAASQ,EAAY3B,IAEzBA,EAAQe,KAAKpC,EAAE,UAAU4D,SAAS,yBAAyBrC,KACvDgB,MAAOA,EACPC,OAAQA,KAERF,GACAjB,EAAQE,KACJgB,MAAO,OACPC,OAAQ,OACRiB,UAAW,aACXC,aAAc,aACdC,gBAAiB,gBAmBzBd,EAAQgB,MAAQ9B,GAAK+B,MAAMjB,EAAQkB,UAAY,IAC/C1C,EAAQE,KAAMyC,KAAM,IACpB3C,EAAQ4C,SAAS,WAAW1B,MAAMlB,EAAQkB,UAEvClB,EAAQ6B,SAEnB,QAASgB,GAAWC,GAChB,GAAIC,GAAI,EAAGlD,EAASmD,UAAUnD,MAC9B,KAAKkD,EAAI,EAAGA,EAAIlD,EAAQkD,IACpBE,EAAcH,EAAaE,UAAUD,GAEzC,OAAOD,GAEX,QAASG,GAAcH,EAAaI,GAChC,GAAwMC,GAAUC,EAAWC,EAAUC,EAAUC,EAA7OC,EAAkBrD,GAAMsD,KAAKD,gBAAiBE,EAAsBvD,GAAMsD,KAAKC,oBAAqBC,EAAaxD,GAAMsD,KAAKE,WAAYC,EAAyBzD,GAAMsD,KAAKG,sBAChL,KAAKT,IAAYD,GACbE,EAAYF,EAAOC,GACnBE,QAAkBD,GAEdE,EADAD,IAAaQ,IAAwB,OAAdT,EACZA,EAAUU,YAEV,KAEXR,GAAYA,IAAaS,OAAST,IAAaE,GAAmBF,IAAaI,GAAuBJ,IAAaK,GAAcL,IAAaM,GAA0BN,IAAaU,OACjLZ,YAAqBa,MACrBnB,EAAYK,GAAY,GAAIc,MAAKb,EAAUc,WACpCC,EAAWf,EAAUgB,OAC5BtB,EAAYK,GAAYC,EAAUgB,SAElCb,EAAWT,EAAYK,GAEnBL,EAAYK,SADLI,KAAaM,GACIN,SAI5BN,EAAcH,EAAYK,GAAWC,IAElCC,IAAagB,KACpBvB,EAAYK,GAAYC,EAGhC,OAAON,GAEX,QAASwB,GAAOC,EAAOC,EAAKC,GACxB,IAAK,GAAIC,KAAMF,GACX,GAAIA,EAAIG,eAAeD,IAAOF,EAAIE,GAAIvC,KAAKoC,GACvC,MAAOG,EAGf,OAAOD,KAAS5F,EAAY4F,EAAOF,EAEvC,QAASK,GAAUC,GACf,MAAOA,GAAIzF,QAAQ,gBAAiB,SAAU0F,GAC1C,MAAOA,GAAExF,OAAO,GAAK,IAAMwF,EAAExF,OAAO,GAAGyF,gBAG/C,QAASC,GAAYH,GACjB,MAAOA,GAAIzF,QAAQ,UAAW,SAAU6F,EAAUC,GAC9C,MAAOA,GAAGC,gBAGlB,QAASC,GAAkBpF,EAASqF,GAChC,GAAiBC,GAAbC,IAmBJ,OAlBIC,UAASC,aAAeD,SAASC,YAAYC,kBAC7CJ,EAAgBE,SAASC,YAAYC,iBAAiB1F,EAAS,IAC3DqF,GACA1G,EAAEgH,KAAKN,EAAY,SAAUO,EAAKC,GAC9BN,EAAOM,GAASP,EAAcQ,iBAAiBD,OAIvDP,EAAgBtF,EAAQ+F,aACpBV,GACA1G,EAAEgH,KAAKN,EAAY,SAAUO,EAAKC,GAC9BN,EAAOM,GAASP,EAAcN,EAAYa,OAIjD1F,GAAM6F,KAAKT,KACZA,EAASD,GAENC,EAEX,QAASU,GAAajG,GAClB,GAAIA,GAAWA,EAAQkG,WAA0C,gBAAtBlG,GAAQkG,WAA0BlG,EAAQkG,UAAUC,QAAQ,wBACnG,OAAO,CAEX,IAAIC,GAAWhB,EAAkBpF,GAAU,aAAaoG,QACxD,OAAmB,QAAZA,GAAkC,UAAZA,EAEjC,QAASC,GAAWrG,EAAS6F,GAA7B,GAIQS,GAHAC,EAASnG,GAAQoB,QAAQ+E,OACzBC,EAASpG,GAAQoB,QAAQiF,QACzBC,EAAK1G,YAAmBrB,GAAIqB,EAAQ,GAAKA,CAE7C,IAAKA,EAIL,MADAsG,GAAQlG,GAAQkG,MAAMtG,GAClB6F,IAAUhH,EASNyH,GAASC,EACFG,EAAGC,YAAcD,EAAGE,YAAcF,EAAGL,WAErCQ,KAAKC,IAAIJ,EAAGL,aAVnBK,EAAGL,WADHC,GAASC,EACOG,EAAGC,YAAcD,EAAGE,YAAcf,EAC3CS,GAASE,GACCX,EAEDA,EALpB,GAkTR,QAASG,GAAKe,GACV,GAAgBC,GAAZC,EAAS,CACb,KAAKD,IAAOD,GACJA,EAAIpC,eAAeqC,IAAe,UAAPA,GAC3BC,GAGR,OAAOA,GAEX,QAASC,GAAUlH,EAASmH,EAAMC,GAAlC,GAIQC,GACAJ,EAOIK,CAIR,OAfKH,KACDA,EAAO,UAEPE,EAASrH,EAAQmH,KACjBF,GACAM,IAAKF,EAAOE,IACZ1G,MAAOwG,EAAOxG,MACdC,OAAQuG,EAAOvG,OACfF,KAAMyG,EAAOzG,MAEbR,GAAQoB,QAAQgB,OAASpC,GAAQoH,UAAYpH,GAAQqH,cAAgBL,IACjEE,EAAOlH,GAAQkG,MAAMtG,GAAW,KACpCiH,EAAOM,KAAO3I,EAAO8I,YAAclC,SAASmC,gBAAgBC,UAC5DX,EAAOrG,MAAQhC,EAAOiJ,YAAcP,EAAO9B,SAASmC,gBAAgBtB,YAEjEY,EAYX,QAASa,GAAaC,GAClB,GAAIC,KAIJ,OAHArC,IAAsB,gBAAVoC,GAAqBA,EAAM7I,MAAM,KAAO6I,EAAO,SAAUnC,GACjEoC,EAAQpC,GAAOqC,OAEZD,EAEX,QAASE,GAAGlI,GACR,MAAO,IAAIG,IAAM6H,QAAQG,QAAQnI,GAiCrC,QAASoI,GAAwBC,EAASC,EAAUC,EAASC,GAsBzD,aArBWH,KAAYI,KACftE,EAAWmE,KACXE,EAAWF,EACXA,EAAW,IACXC,GAAU,GAEVpE,EAAWoE,KACXC,EAAWD,EACXA,GAAU,SAEHD,KAAaI,KACpBH,EAAUD,EACVA,EAAW,KAEfD,GACIL,QAASK,EACTC,SAAUA,EACVC,QAASA,EACTC,SAAUA,IAGXG,IACHX,WACAM,SAAU,IACVC,SAAS,EACTK,KAAMC,GACNC,SAAUD,GACVE,MAAM,GACPV,GACCW,iBAAkBX,EAAQG,SAC1BA,SAAUK,KAGlB,QAASI,GAAQjJ,EAASqI,EAASC,EAAUC,EAASC,GAElD,IADA,GAAsCU,GAAlCtD,EAAM,EAAG/F,EAASG,EAAQH,OACvB+F,EAAM/F,EAAQ+F,IACjBsD,EAAWvK,EAAEqB,EAAQ4F,IACrBsD,EAASC,MAAM,WACXnB,EAAQoB,QAAQF,EAAUd,EAAwBC,EAASC,EAAUC,EAASC,KAGtF,OAAOxI,GAEX,QAASqJ,GAAYrJ,EAASsJ,EAASjB,EAASkB,GAO5C,MANID,KACAA,EAAUA,EAAQpK,MAAM,KACxByG,GAAK2D,EAAS,SAAU1D,EAAKC,GACzB7F,EAAQqJ,YAAYxD,EAAO0D,MAG5BvJ,EAsBX,QAASwJ,GAAW3D,GAChB,OAAQ,GAAKA,GAAOzG,QAAQqK,EAAW,SAASrK,QAAQsK,EAAU,QAAQtK,QAAQuK,EAAU,QAAQvK,QAAQwK,EAAa,UAAUxK,QAAQyK,EAAY,SA2U3J,QAASC,GAAY9J,EAAS+J,GAC1B,GAAIlE,EAoBJ,OAnB+B,KAA3BkE,EAAO5D,QAAQ,UACf4D,EAASA,EAAOvK,UAAU,GAC1BuK,EAASA,EAAOzK,OAAO,GAAGyF,cAAgBgF,EAAOvK,UAAU,IAE/DuK,EAASA,EAAO3K,QAAQ4K,GAAY,OACpCnE,EAAQ7F,EAAQiK,aAAa,QAAU9J,GAAM+J,GAAKH,GACpC,OAAVlE,EACAA,EAAQhH,EACS,SAAVgH,EACPA,EAAQ,KACS,SAAVA,EACPA,GAAQ,EACS,UAAVA,EACPA,GAAQ,EACDsE,GAAahI,KAAK0D,GACzBA,EAAQuE,WAAWvE,GACZwE,GAAWlI,KAAK0D,KAAWyE,GAAiBnI,KAAK0D,KACxDA,EAAY0E,SAAS,WAAa1E,EAAQ,QAEvCA,EAEX,QAAS2E,GAAaxK,EAASqI,GAC3B,GAAiB0B,GAAQlE,EAArBoB,IACJ,KAAK8C,IAAU1B,GACXxC,EAAQiE,EAAY9J,EAAS+J,GACzBlE,IAAUhH,IACN4L,GAAetI,KAAK4H,KAEhBlE,EADiB,gBAAVA,GACC1F,GAAMuK,SAAS/L,EAAE,IAAMkH,GAAO8E,QAE9B3K,EAAQiK,aAAaF,IAGrC9C,EAAO8C,GAAUlE,EAGzB,OAAOoB,GA0FX,QAAS2D,GAAoBC,EAAGC,GAC5B,MAAOnM,GAAEoM,SAASF,EAAGC,MAAU,EAEnC,QAASE,KACL,GAAIC,GAAStM,EAAEsJ,KACf,OAAOtJ,GAAEuM,QAAQD,EAAOE,KAAK,QAAUhL,GAAM+J,GAAK,SAC9C,SACA,oBACOe,EAAOjJ,GAAG,YAmOzB,QAASoJ,GAAUpL,EAASqL,GACxB,GAAIC,GAAWtL,EAAQsL,SAASvG,aAChC,QAAQ,sCAAsC5C,KAAKmJ,IAAatL,EAAQuL,SAAW,MAAQD,EAAWtL,EAAQwL,MAAQH,EAAmBA,IAAqBI,EAAQzL,GAE1K,QAASyL,GAAQzL,GACb,MAAOrB,GAAE+M,KAAKC,QAAQF,QAAQzL,KAAarB,EAAEqB,GAAS4L,UAAUC,UAAUC,OAAO,WAC7E,MAAqC,WAA9BnN,EAAEuB,IAAI+H,KAAM,gBACpBpI,OAsHP,QAASkM,GAAYC,EAAUC,GAC3B,MAAO,IAAIF,GAAYG,GAAGtD,KAAKoD,EAAUC,GAzmFhD,GACoKE,GAyB7JhI,EAGAiI,EAGAC,EAGAC,EA6FAC,EAA6BC,EAAiCC,EAA8BC,EAA4BC,EAA6BC,EAA4B9M,EAwjDjL+M,EAoBA7E,EAuGAyB,EAAkBC,EAAiBE,EAAoBC,EAAmBF,EAI1EmD,EA4DAC,EAmBGC,EA4IHC,EAkFAC,GA2BAzC,GAA+BJ,GAAkEC,GAA4DN,GA8N7JmD,GAOAC,GAsJAC,GAUAC,GACAC,GAwCAC,GAgDAC,GAEGC,GAQHC,GAcAC,GAqZAC,GAMAC,GA/gGA3N,GAAQvB,EAAOuB,MAAQvB,EAAOuB,QAAW4N,aAAgBpF,GAAShK,EAAEgK,OAAQhD,GAAOhH,EAAEgH,KAAMqI,GAAUrP,EAAEqP,QAASC,GAAQtP,EAAEsP,MAAOpF,GAAOlK,EAAEkK,KAAMnI,GAAOmG,KAAgBqH,GAAOtP,EAAOsP,SAAY9N,MAAc8B,GAAgB,IAAKiM,GAAe,uBAAwB3N,GAAkB,sEAAuE2J,GAAe,uBAAwBiE,GAAW,WAAY3F,GAAS,SAAU4F,GAAS,SAAUxK,GAAS,SAAUyK,GAAO,OAAQ5F,GAAU,UAAWrE,GAAY,YAAakK,MAAkBC,MAAkBC,MAAWA,KAC3kBtO,IAAMuC,QAAU,aAAatD,QAAQ,aAAc,IAGnDN,EAAM6J,OAAS,SAAU+F,GACrB,GACOC,GAEAzC,EAHH0C,EAAO,aACIC,EAAO5G,KAAM6G,EAAWJ,GAASA,EAAM9F,KAAO8F,EAAM9F,KAAO,WAClEiG,EAAKE,MAAM9G,KAAMjF,WAEzB4L,GAAKI,UAAYH,EAAKG,UACtB9C,EAAK4C,EAAS5C,GAAK4C,EAASE,UAAY,GAAIJ,EAC5C,KAAKD,IAAUD,GAEPxC,EAAGyC,GADc,MAAjBD,EAAMC,IAAmBD,EAAMC,GAAQ7K,cAAgBmL,OAC1CtG,IAAO,KAAUiG,EAAKI,UAAUL,GAASD,EAAMC,IAE/CD,EAAMC,EAK3B,OAFAzC,GAAGpI,YAAcgL,EACjBA,EAASnG,OAASkG,EAAKlG,OAChBmG,GAEXhQ,EAAMkQ,UAAUE,aAAe,SAAU7G,GACrCJ,KAAKI,QAAUxF,KAAeoF,KAAKI,QAASA,IAE5ClE,EAAahE,GAAMgE,WAAa,SAAU+H,GAC1C,MAAqB,kBAAPA,IAEdE,EAAiB,WACjBnE,KAAKkH,mBAAoB,GAEzB9C,EAAqB,WACrB,MAAOpE,MAAKkH,qBAAsB,GAElC7C,EAAaxN,EAAM6J,QACnBC,KAAM,WACFX,KAAKmH,YAETC,KAAM,SAAUC,EAAWC,EAAUC,GACjC,GAAiB5J,GAAyE/F,EAAQ4P,EAAUC,EAA4DC,EAApKd,EAAO5G,KAAW2H,QAAoBN,KAAc7G,IAAU6G,GAAaA,EAAsCO,QAA4BN,KAAanB,EAC9J,IAAImB,IAAa1Q,EAAW,CACxB,IAAK+G,IAAO0J,GACRT,EAAKQ,KAAKzJ,EAAK0J,EAAU1J,GAE7B,OAAOiJ,GAEX,IAAKjJ,EAAM,EAAG/F,EAAS+P,EAAW/P,OAAQ+F,EAAM/F,EAAQ+F,IACpD0J,EAAYM,EAAWhK,GACvB8J,EAAUG,EAAqBN,EAAWA,EAASD,GAC/CI,IACIF,IACAC,EAAWC,EACXA,EAAU,WACNb,EAAKiB,OAAOR,EAAWI,GACvBD,EAASV,MAAMF,EAAM7L,YAEzB0M,EAAQD,SAAWA,GAEvBE,EAASd,EAAKO,QAAQE,GAAaT,EAAKO,QAAQE,OAChDK,EAAOI,KAAKL,GAGpB,OAAOb,IAEXW,IAAK,SAAUI,EAAYL,GACvB,MAAOtH,MAAKoH,KAAKO,EAAYL,GAAU,IAE3ClQ,MAAO,SAAUiQ,EAAWC,GACxB,GAAiB3J,GAAyE/F,EAAQ6P,EAA4DC,EAA1Jd,EAAO5G,KAAW2H,QAAoBN,KAAc7G,IAAU6G,GAAaA,EAA4BO,QAA4BN,KAAanB,EACpJ,KAAKxI,EAAM,EAAG/F,EAAS+P,EAAW/P,OAAQ+F,EAAM/F,EAAQ+F,IACpD0J,EAAYM,EAAWhK,GACvB8J,EAAUG,EAAqBN,EAAWA,EAASD,GAC/CI,IACAC,EAASd,EAAKO,QAAQE,GAAaT,EAAKO,QAAQE,OAChDK,EAAOK,QAAQN,GAGvB,OAAOb,IAEXoB,QAAS,SAAUX,EAAWY,GAC1B,GAAmDtK,GAAK/F,EAApDgP,EAAO5G,KAAM0H,EAASd,EAAKO,QAAQE,EACvC,IAAIK,EAAQ,CAOR,IANAO,EAAIA,MACJA,EAAEC,OAAStB,EACXqB,EAAEf,mBAAoB,EACtBe,EAAE9D,eAAiBA,EACnB8D,EAAE7D,mBAAqBA,EACvBsD,EAASA,EAAOlB,QACX7I,EAAM,EAAG/F,EAAS8P,EAAO9P,OAAQ+F,EAAM/F,EAAQ+F,IAChD+J,EAAO/J,GAAKwK,KAAKvB,EAAMqB,EAE3B,OAAOA,GAAEf,qBAAsB,EAEnC,OAAO,GAEXW,OAAQ,SAAUR,EAAWI,GACzB,GAAmD9J,GAA/CiJ,EAAO5G,KAAM0H,EAASd,EAAKO,QAAQE,EACvC,IAAIA,IAAczQ,EACdgQ,EAAKO,eACF,IAAIO,EACP,GAAID,EACA,IAAK9J,EAAM+J,EAAO9P,OAAS,EAAG+F,GAAO,EAAGA,IAChC+J,EAAO/J,KAAS8J,GAAWC,EAAO/J,GAAK6J,WAAaC,GACpDC,EAAOU,OAAOzK,EAAK,OAI3BiJ,GAAKO,QAAQE,KAGrB,OAAOT,MAiBXtC,EAAqB,OAAQC,EAAe,iBAAkBC,EAAqB,QAASC,EAAc,aAAcC,EAAqB,OAAQC,EAAc,aAAc9M,GAC7K,GACA,IACA,KACA,MACA,QAERqM,GACImE,UAAW,OACXC,cAAc,EACdC,OAAQ,SAAU9F,EAAUjH,GACxB,GAAImC,GAAK/F,EAAQ8K,EAAO,EACxB,KAAK/E,EAAM,EAAG/F,EAAS4D,EAAK5D,OAAQ+F,EAAM/F,EAAQ+F,IAC9C+E,GAAQD,EAASjH,EAAKmC,GAE1B,OAAO+E,IAEX8F,QAAS,SAAU/F,EAAUrC,GACzB,GAAgP6D,GAAIwE,EAAO9K,EAAvP+K,EAAWhI,MAAWV,KAAMI,GAAUiI,EAAYK,EAASL,UAAWM,EAAeN,EAAU/P,MAAMgM,GAAoB,GAAIgE,EAAeI,EAASJ,aAAcM,EAAe,wDACtL,IAAI1M,EAAWuG,GACX,MAAOA,EAKX,KAHAmG,GAAgBN,EAAe,QAAUD,EAAY,KAAO,GAC5DO,GAAgB,gBAChBH,EAAQhG,EAAStL,QAAQqN,EAAoB,aAAarN,QAAQoN,EAAc,2BAA2BpN,QAAQsN,EAAa,KAAKtN,QAAQuN,EAAoB,aAAazN,MAAM,KAC/K0G,EAAM,EAAGA,EAAM8K,EAAM7Q,OAAQ+F,IAC9BiL,GAAgB9R,EAAY2R,EAAM9K,GAAMA,EAAM,IAAM,EAExDiL,IAAgBN,EAAe,KAAO,IACtCM,GAAgB,uBAChBA,EAAeA,EAAazR,QAAQwN,EAAa,IACjD,KAGI,MAFAV,GAAS3B,SAASqG,EAAcC,GAChC3E,EAAG4E,WAAajK,KAAKpE,MAAMiO,EAAM7Q,OAAS,GACnCqM,EACT,MAAOgE,GACL,KAAUa,OAAM5Q,GAAM6Q,OAAO,8CAAmDtG,EAAUmG,OAarG,WAmBG,QAASI,GAAMC,GAEX,MADAC,GAAUC,UAAY,EACfD,EAAUhP,KAAK+O,GAAU,IAAMA,EAAO9R,QAAQ+R,EAAW,SAAUtG,GACtE,GAAIwG,GAAIC,EAAKzG,EACb,cAAcwG,KAAM5I,GAAS4I,EAAI,OAAS,OAASxG,EAAE0G,WAAW,GAAGC,SAAS,KAAK/C,YAChF,IAAM,IAAMyC,EAAS,IAE9B,QAASrM,GAAImC,EAAKyK,GACd,GAAI1O,GAAG2O,EAAGC,EAAG9R,EAAoB+R,EAA8BzK,EAA1C0K,EAAOC,EAAcjM,EAAQ4L,EAAOzK,EAQzD,IAPInB,SAAgBA,KAAUhC,UAAiBgC,GAAMkM,SAAW3D,KAC5DvI,EAAQA,EAAMkM,OAAO/K,UAEdgL,KAAQ5D,KACfvI,EAAQmM,EAAI5B,KAAKqB,EAAQzK,EAAKnB,IAElCsB,QAActB,GACVsB,IAASsB,GACT,MAAOwI,GAAMpL,EACV,IAAIsB,IAASkH,GAChB,MAAO4D,UAASpM,GAAgBA,EAAPqM,GAAgB5D,EACtC,IAAInH,IAASuB,IAAWvB,IAASmH,GACpC,MAAczI,GAAPqM,EACJ,IAAI/K,IAAStD,GAAQ,CACxB,IAAKgC,EACD,MAAOyI,GAIX,IAFAwD,GAAOK,EACPP,KAC8B,mBAA1BJ,EAASzC,MAAMlJ,GAA6B,CAE5C,IADAhG,EAASgG,EAAMhG,OACVkD,EAAI,EAAGA,EAAIlD,EAAQkD,IACpB6O,EAAQ7O,GAAK8B,EAAI9B,EAAG8C,IAAUyI,EAIlC,OAFAqD,GAAuB,IAAnBC,EAAQ/R,OAAe,KAAOiS,EAAM,MAAQA,EAAMF,EAAQzS,KAAK,MAAQ2S,GAAO,KAAOD,EAAO,IAAM,IAAMD,EAAQzS,KAAK,KAAO,IAChI2S,EAAMD,EACCF,EAEX,GAAIK,SAAcA,KAAQnO,GAEtB,IADAhE,EAASmS,EAAInS,OACRkD,EAAI,EAAGA,EAAIlD,EAAQkD,UACTiP,GAAIjP,KAAO0F,KAClBiJ,EAAIM,EAAIjP,GACR4O,EAAI9M,EAAI6M,EAAG7L,GACP8L,GACAC,EAAQ7B,KAAKkB,EAAMS,IAAMI,EAAM,KAAO,KAAOH,QAKzD,KAAKD,IAAK7L,GACFoJ,OAAOtK,eAAeyL,KAAKvK,EAAO6L,KAClCC,EAAI9M,EAAI6M,EAAG7L,GACP8L,GACAC,EAAQ7B,KAAKkB,EAAMS,IAAMI,EAAM,KAAO,KAAOH,GAO7D,OAFAA,GAAuB,IAAnBC,EAAQ/R,OAAe,KAAOiS,EAAM,MAAQA,EAAMF,EAAQzS,KAAK,MAAQ2S,GAAO,KAAOD,EAAO,IAAM,IAAMD,EAAQzS,KAAK,KAAO,IAChI2S,EAAMD,EACCF,GA9Ef,GAA4IG,GAAKK,EAQ1IH,EARHb,EAAY,2HAAyIG,GACjJc,KAAM,MACNC,KAAM,MACNC,KAAM,MACNC,KAAM,MACNC,KAAM,MACNC,IAAK,MACLC,KAAM,QACFlB,KAAcA,eACfvN,MAAK+K,UAAU+C,SAAW3D,KACjCnK,KAAK+K,UAAU+C,OAAS,WACpB,GAAIlD,GAAO5G,IACX,OAAOgK,UAASpD,EAAK8D,WAAalT,EAAIoP,EAAK+D,iBAAkB,GAAK,IAAMnT,EAAIoP,EAAKgE,cAAgB,GAAK,IAAMpT,EAAIoP,EAAKiE,cAAgB,IAAMrT,EAAIoP,EAAKkE,eAAiB,IAAMtT,EAAIoP,EAAKmE,iBAAmB,IAAMvT,EAAIoP,EAAKoE,iBAAmB,IAAM,MAEnPf,OAAOlD,UAAU+C,OAASmB,OAAOlE,UAAU+C,OAASoB,QAAQnE,UAAU+C,OAAS,WAC3E,MAAO9J,MAAK0K,kBAkETzE,IAAKkF,YAAchF,KAC1BF,GAAKkF,UAAY,SAAUvN,EAAOwN,EAAUC,GACxC,GAAIvQ,EAGJ,IAFA+O,EAAM,GACNK,EAAS,SACEmB,KAAUjF,GACjB,IAAKtL,EAAI,EAAGA,EAAIuQ,EAAOvQ,GAAK,EACxBoP,GAAU,eAEAmB,KAAU7K,KACxB0J,EAASmB,EAGb,IADAtB,EAAMqB,EACFA,SAAmBA,KAAajF,WAAoBiF,KAAaxP,UAAiBwP,GAASxT,SAAWwO,IACtG,KAAU0C,OAAM,iBAEpB,OAAOlM,GAAI,IAAM0O,GAAI1N,SAIhC,WAgIG,QAAS2N,GAAYC,GACjB,GAAIA,EAAS,CACT,GAAIA,EAAQC,aACR,MAAOD,EAEX,UAAWA,KAAYhL,GAAQ,CAC3B,GAAIsF,GAAW5N,GAAM4N,QACrB,OAAOA,GAAS0F,IAAY1F,EAAS0F,EAAQvU,MAAM,KAAK,KAAO,KAEnE,MAAO,MAEX,MAAO,MAEX,QAASyU,GAAWF,GAIhB,MAHIA,KACAA,EAAUD,EAAYC,IAEnBA,GAAWtT,GAAM4N,SAAS6F,QAerC,QAASC,GAAWC,EAAM9C,EAAQyC,GAC9BA,EAAUE,EAAWF,EACrB,IAAIM,GAAWN,EAAQO,UAAUC,SAAUC,EAAOH,EAASG,KAAMC,EAASJ,EAASI,MAEnF,OADAnD,GAAS+C,EAASK,SAASpD,IAAWA,EAC/BA,EAAO5R,QAAQiV,EAAkB,SAAU9T,GAAV,GAChC+T,GACArN,EACAK,CA8DJ,OA7Dc,MAAV/G,EACA0G,EAAS6M,EAAKS,UACG,OAAVhU,EACP0G,EAASxH,EAAIqU,EAAKS,WACD,QAAVhU,EACP0G,EAASiN,EAAKM,UAAUV,EAAKW,UACZ,SAAVlU,EACP0G,EAASiN,EAAKQ,MAAMZ,EAAKW,UACR,MAAVlU,EACP0G,EAAS6M,EAAKa,WAAa,EACV,OAAVpU,EACP0G,EAASxH,EAAIqU,EAAKa,WAAa,GACd,QAAVpU,EACP0G,EAASkN,EAAOK,UAAUV,EAAKa,YACd,SAAVpU,EACP0G,EAASkN,EAAOO,MAAMZ,EAAKa,YACV,OAAVpU,EACP0G,EAASxH,EAAIqU,EAAKc,cAAgB,KACjB,SAAVrU,EACP0G,EAASxH,EAAIqU,EAAKc,cAAe,GAChB,MAAVrU,EACP0G,EAAS6M,EAAKe,WAAa,IAAM,GAChB,OAAVtU,EACP0G,EAASxH,EAAIqU,EAAKe,WAAa,IAAM,IACpB,MAAVtU,EACP0G,EAAS6M,EAAKe,WACG,OAAVtU,EACP0G,EAASxH,EAAIqU,EAAKe,YACD,MAAVtU,EACP0G,EAAS6M,EAAKgB,aACG,OAAVvU,EACP0G,EAASxH,EAAIqU,EAAKgB,cACD,MAAVvU,EACP0G,EAAS6M,EAAKiB,aACG,OAAVxU,EACP0G,EAASxH,EAAIqU,EAAKiB,cACD,MAAVxU,EACP0G,EAASvG,GAAK+B,MAAMqR,EAAKkB,kBAAoB,KAC5B,OAAVzU,GACP0G,EAAS6M,EAAKkB,kBACV/N,EAAS,KACTA,EAASvG,GAAK+B,MAAMwE,EAAS,KAEjCA,EAASxH,EAAIwH,IACI,QAAV1G,EACP0G,EAASxH,EAAIqU,EAAKkB,kBAAmB,GACpB,OAAVzU,EACP0G,EAAS6M,EAAKe,WAAa,GAAKd,EAASkB,GAAG,GAAKlB,EAASmB,GAAG,GAC5C,QAAV3U,GACP+T,EAAUR,EAAKqB,oBACf7N,EAAOgN,EAAU,EACjBrN,GAASvG,GAAAA,GAAKoG,IAAIwN,EAAU,KAAepV,MAAM,KAAK,GACtDoV,EAAU5T,GAAKoG,IAAIwN,GAAoB,GAATrN,EAC9BA,GAAUK,EAAO,IAAM,KAAO7H,EAAIwH,GAClCA,GAAU,IAAMxH,EAAI6U,IACH,OAAV/T,GAA4B,MAAVA,IACzB0G,EAAS6M,EAAKqB,oBAAsB,GACpC7N,EAAOL,EAAS,EAChBA,GAASvG,GAAAA,GAAKoG,IAAIG,IAAmB/H,MAAM,KAAK,GAChD+H,GAAUK,EAAO,IAAM,MAAkB,OAAV/G,EAAiBd,EAAIwH,GAAUA,IAE3DA,IAAWpI,EAAYoI,EAAS1G,EAAMkO,MAAM,EAAGlO,EAAMV,OAAS,KAG7E,QAASuV,GAAa1V,EAAQsR,EAAQyC,GAClCA,EAAUE,EAAWF,EACrB,IAA6J4B,GAAQC,EAAYC,EAAWC,EAAiBC,EAA2CC,EAASC,EAAUC,EAAeC,EAAoDjQ,EAAK/F,EAAQiW,EAAIC,EAAUC,EAAmBC,EAAcC,EAAYC,EAAWC,EAASC,EAAUC,EAAcC,EAAeC,EAA4B5W,EAAze8T,EAAeD,EAAQC,aAAc+C,EAAU/C,EAAagD,GAAQC,EAAYjD,EAAakD,SAAUC,EAAUnD,EAAamD,QAAQ,GAAIC,KAAmFC,EAAWrX,EAAS,EAAqDsX,EAAcC,EAAOpR,EAAQoR,EAA0JC,IACje,IAAIxX,IAAWb,EACX,MAAOoY,EAEX,KAAKhF,SAASvS,GACV,MAAOA,EAEX,KAAKsR,EACD,MAAOyC,GAAQ0D,KAAKtX,OAASH,EAAO0X,iBAAmB1X,GAAAA,CAG3D,IADA+V,EAAqB4B,EAAqBC,KAAKtG,GACvB,CAepB,GAdAA,EAASyE,EAAmB,GAAG1Q,cAC/BuQ,EAAwB,MAAXtE,EACbuE,EAAuB,MAAXvE,GACRsE,GAAcC,KACd7B,EAAe4B,EAAa5B,EAAa6D,SAAW7D,EAAa8D,QACjEf,EAAU/C,EAAagD,GACvBC,EAAYjD,EAAakD,SACzBvB,EAAS3B,EAAa2B,OACtBwB,EAAUnD,EAAamD,QAAQE,EAAW,EAAI,IAElDvB,EAAkBC,EAAmB,GACjCD,IACAmB,GAAanB,GAEF,MAAXxE,EACA,MAAOwE,GAAkB9V,EAAO+X,cAAcd,GAAajX,EAAO+X,eAiBtE,IAfIlC,IACA7V,GAAU,KAEdA,EAASgY,EAAMhY,EAAQiX,GACvBI,EAAWrX,EAAS,EACpBA,EAASA,EAAOR,MAAMwX,GACtBhB,EAAUhW,EAAO,GACjBiW,EAAWjW,EAAO,GACdqX,IACArB,EAAUA,EAAQlW,UAAU,IAEhCqG,EAAQ8R,EAAajC,EAAS,EAAGA,EAAQ7V,OAAQ6T,GAC7CiC,IACA9P,GAAS4Q,EAAUd,GAER,MAAX3E,IAAmB+F,EACnB,MAAOlR,EAGX,KADAnG,EAASuX,EACJrR,EAAM,EAAG/F,EAASgX,EAAQhX,OAAQ+F,EAAM/F,EAAQ+F,IACjDkQ,EAAKe,EAAQvX,OAAOsG,GAEhBlG,GADO,MAAPoW,EACUjQ,EACI,MAAPiQ,GAAqB,MAAPA,EACXT,EAEAS,CAGlB,OAAOpW,GAaX,GAXIqX,IACArX,GAAUA,IAEVsR,EAAO7K,QAAQ,SAAc6K,EAAO7K,QAAQ,SAAa6K,EAAO7K,QAAQ,YACxE6K,EAASA,EAAO5R,QAAQwY,EAAe,SAAUrX,GAC7C,GAAIsX,GAAYtX,EAAMjB,OAAO,GAAGF,QAAQ,KAAM,IAAK0Y,EAAUvX,EAAMkO,MAAM,GAAGrP,QAAQyY,EAAW,GAE/F,OADAf,GAAS/G,KAAK+H,GACPC,KAGf/G,EAASA,EAAO9R,MAAM,KAClB6X,GAAY/F,EAAO,GACnBA,EAASA,EAAO,GAChBgF,GAAoB,MACjB,IAAe,IAAXtW,GAEP,GADAsR,EAASA,EAAO,IAAMA,EAAO,GACzBA,EAAO7K,QAAQ6R,QAAgBhH,EAAO7K,QAAQ8R,OAC9C,MAAOjH,OAGXA,GAASA,EAAO,EAgFpB,IA9EAsF,EAAetF,EAAO7K,QAAQ,KAC9BoQ,EAAgBvF,EAAO7K,QAAQ,KAC/BoP,EAAYe,MACZhB,EAAaiB,MACThB,IACA7V,GAAU,KAEV4V,GAA4C,OAA9BtE,EAAOuF,EAAgB,KACrCvF,EAASA,EAAO9R,MAAM,MAAMC,KAAK,IACjCmW,GAAa,IAEbA,GAAcC,KACd7B,EAAe4B,EAAa5B,EAAa6D,SAAW7D,EAAa8D,QACjEf,EAAU/C,EAAagD,GACvBC,EAAYjD,EAAakD,SACzBvB,EAAS3B,EAAa2B,QAE1BU,EAAW/E,EAAO7K,QAAQ+R,MACtBnC,IACA/E,EAASA,EAAO5R,QAAQ+Y,EAAalB,IAEzChB,EAAejF,EAAO7K,QAAQuQ,GAC9B7W,EAASmR,EAAOnR,OACZoW,OACAN,GAAWjW,GAAAA,GAAkBR,MAAM,KAE/ByW,EADAA,EAAS,GACE+B,EAAMhY,EAAQmH,KAAKC,IAAI6O,EAAS,KAEhCA,EAAS,GAExBA,EAAWA,EAASzW,MAAMwX,GAAO,IAAMO,EACvCd,EAAYnF,EAAOoH,YAAYH,GAAQhC,EACvCC,EAAalF,EAAOoH,YAAYJ,GAAS/B,EACzCG,EAAUD,KACVE,EAAWH,KACXtQ,EAAM+P,EAAS9V,OACVuW,GAAYC,IACbrF,EAASA,EAAOxR,UAAU,EAAGyW,GAAgBjF,EAAOxR,UAAUyW,EAAe,GAC7EpW,EAASmR,EAAOnR,OAChBoW,KACArQ,EAAM,GAENwQ,GAAWD,EAAYD,EACvBtQ,EAAMuQ,EACCD,EAAaC,IAChBE,GAAYzQ,EAAMsQ,EAClBtQ,EAAMsQ,EACCE,GAAWxQ,EAAMuQ,IACxBvQ,EAAMuQ,IAGVvQ,OACAlG,EAASgY,EAAMhY,EAAQkG,KAG3BlG,EAASgY,EAAMhY,GAEnBwW,EAAalF,EAAO7K,QAAQ6R,GAC5BxB,EAAiBL,EAAYnF,EAAO7K,QAAQ8R,GAExCf,EADAhB,OAAoBC,MACZA,EACDD,OAAoBC,MACnBD,EAEAA,EAAaC,EAAYA,EAAYD,EAEjDA,EAAalF,EAAOoH,YAAYJ,GAChC7B,EAAYnF,EAAOoH,YAAYH,GAE3BrY,EADAsW,OAAoBC,MACdA,EACCD,OAAoBC,MACrBD,EAEAA,EAAaC,EAAYD,EAAaC,EAE5Ce,GAASrX,IACTD,EAAMsX,GAENA,MAAa,CAab,IAZArR,GAAQnG,GAAAA,GAAkBR,MAAMwX,GAChChB,EAAU7P,EAAM,GAChB8P,EAAW9P,EAAM,IAAMoR,EACvBrB,EAAgBF,EAAQ7V,OACxBgW,EAAiBF,EAAS9V,OACtBkX,GAAYrX,MAAe,IAC3BqX,GAAW,GAEfrX,EAASsR,EAAOxR,UAAU,EAAG0X,GACzBH,IAAaf,IACbtW,GAAU,KAETkG,EAAMsR,EAAOtR,EAAM/F,EAAQ+F,IAAO,CAEnC,GADAkQ,EAAK9E,EAAO1R,OAAOsG,GACfqQ,OACA,GAAIrW,EAAMgG,EAAMgQ,EAAe,CAC3BlW,GAAUgW,CACV,YAUJ,IAPIS,OAAmBA,EAAYvQ,IAC/BoR,EAAcC,GAEdhB,EAAerQ,GAAOgQ,GAAiBK,EAAerQ,OACtDlG,GAAUgW,EACV9P,EAAMqQ,GAENA,IAAiBrQ,EAAK,CACtBlG,IAAWiW,EAAWc,EAAUQ,GAAStB,EACzC/P,GAAOhG,EAAMqW,EAAe,CAC5B,UAGJH,IAAOmC,GACPvY,GAAUoW,EACVkB,EAAclB,GACPA,IAAOkC,IACdtY,GAAUsX,GASlB,GANIjB,IACArW,EAASiY,EAAajY,EAAQwX,GAASH,IAAaf,EAAoB,EAAI,GAAInP,KAAKlG,IAAIf,EAAKgW,EAAgBsB,GAAQxD,IAEtH9T,GAAOsX,IACPxX,GAAUsR,EAAOxR,UAAUI,EAAM,IAEjC0V,GAAcC,EAAW,CAEzB,IADA1P,EAAQoR,EACHrR,EAAM,EAAG/F,EAASH,EAAOG,OAAQ+F,EAAM/F,EAAQ+F,IAChDkQ,EAAKpW,EAAOJ,OAAOsG,GACnBC,GAAgB,MAAPiQ,GAAqB,MAAPA,EAAaT,EAASS,CAEjDpW,GAASmG,EAGb,GADAhG,EAASiX,EAASjX,OAEd,IAAK+F,EAAM,EAAGA,EAAM/F,EAAQ+F,IACxBlG,EAASA,EAAON,QAAQ2Y,EAAajB,EAASlR,IAI1D,MAAOlG,GAxcd,GA0cOiY,GA+BAD,EAQAlG,EAhfA6C,EAAmB,gGAAiGgD,EAAuB,oBAAqBO,EAAgB,uCAAwCO,EAAc,MAAOlB,EAAQ,GAAIP,EAAQ,IAAKwB,EAAQ,IAAKF,EAAQ,IAAKC,EAAO,IAAKF,EAAc,KAAMM,EAAK,QAASC,KAAoB9G,QACtWrR,IAAM4N,SAAS,UACXoJ,KAAMkB,EACN3E,cACImD,SAAU,MACVD,SAAU,EACV2B,IAAK,IACLC,IAAK,IACLC,WAAY,GACZjB,SACIX,SACI,OACA,OAEJD,SAAU,EACV2B,IAAK,IACLC,IAAK,IACLC,WAAY,GACZpD,OAAQ,KAEZkC,UACIJ,KAAM,YACNuB,KAAM,MACN7B,SACI,OACA,MAEJD,SAAU,EACV2B,IAAK,IACLC,IAAK,IACLC,WAAY,GACZpD,OAAQ,MAGhBrB,WACIC,UACIC,MACIQ,OACI,SACA,SACA,UACA,YACA,WACA,SACA,YAEJF,WACI,MACA,MACA,MACA,MACA,MACA,MACA,OAEJmE,YACI,KACA,KACA,KACA,KACA,KACA,KACA,OAGRxE,QACIO,OACI,UACA,WACA,QACA,QACA,MACA,OACA,OACA,SACA,YACA,UACA,WACA,YAEJF,WACI,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,QAGRS,IACI,KACA,KACA,MAEJC,IACI,KACA,KACA,MAEJd,UACIwE,EAAG,WACHC,EAAG,sBACHC,EAAG,iCACHhU,EAAG,mBACHiU,EAAG,sBACHC,EAAG,UACHC,EAAG,UACHC,EAAG,8BACHC,EAAG,UACHC,EAAG,aACHC,EAAG,iCACHC,EAAG,aACHC,EAAG,cAEPC,IAAK,IACLC,IAAK,IACLC,SAAU,EACVC,gBAAiB,QAuB7BxZ,GAAMsT,QAAU,SAAUmG,GACtB,GAA+BnG,GAA3B1F,EAAW5N,GAAM4N,QACrB,OAAI6L,KAAgB/a,EAKTkP,EAAS6F,SAJhBH,EAAUD,EAAYoG,IAAgB7L,EAASsK,GAC/C5E,EAAQM,SAAWN,EAAQO,UAAUC,SACrClG,EAAS6F,QAAUH,EAFnBA,IAORtT,GAAMqT,YAAcA,EACpBrT,GAAMwT,WAAaA,EACnBxT,GAAMsT,QAAQ4E,GA2SVV,EAAe,SAAUjY,EAAQwX,EAAOtX,EAAK8T,GAA9B,GAIXgC,GAASE,EACThQ,EAAK8K,EAAO7K,EACZgU,EALA5D,EAAevW,EAAOyG,QAAQuN,EAAagD,IAC3CoD,EAAapG,EAAa+E,UAAUhK,QACpCgK,EAAYqB,EAAWC,OAO3B,IAHAna,EAAMqW,OAAsBA,EAAerW,EAAM,EACjD8V,EAAUhW,EAAOF,UAAU0X,EAAOtX,GAClCgW,EAAgBF,EAAQ7V,OACpB+V,GAAiB6C,EAAW,CAG5B,IAFA7S,EAAMgQ,EACNlF,KACO9K,MAQH,GAPAC,EAAQ6P,EAAQlW,UAAUoG,EAAM6S,EAAW7S,GACvCC,GACA6K,EAAMX,KAAKlK,GAEfD,GAAO6S,EACPoB,EAAeC,EAAWC,QAC1BtB,EAAYoB,IAAiBhb,EAAYgb,EAAepB,EACtC,IAAdA,EAAiB,CACjB/H,EAAMX,KAAK2F,EAAQlW,UAAU,EAAGoG,GAChC,OAGR8P,EAAUhF,EAAMnI,UAAUpJ,KAAKuU,EAAawE,IAC5CxY,EAASA,EAAOF,UAAU,EAAG0X,GAASxB,EAAUhW,EAAOF,UAAUI,GAErE,MAAOF,IAEPgY,EAAQ,SAAU7R,EAAO8Q,GAMzB,MALAA,GAAYA,GAAa,EACzB9Q,GAAQA,GAAAA,GAAiB3G,MAAM,KAC/B2G,EAAQgB,KAAK6Q,QAAQ7R,EAAM,GAAK,KAAOA,EAAM,IAAMA,EAAM,GAAK8Q,EAAYA,KAC1E9Q,GAAQA,GAAAA,GAAiB3G,MAAM,KAC/B2G,IAAUA,EAAM,GAAK,KAAOA,EAAM,IAAMA,EAAM,GAAK8Q,GAAaA,IACzD9Q,EAAMmU,QAAQnT,KAAKoT,IAAItD,EAAW,MAEzCnF,EAAW,SAAU3L,EAAOqU,EAAKzG,GACjC,GAAIyG,EAAK,CACL,GAAmC,kBAA/B5B,EAAelI,KAAKvK,GACpB,MAAOgO,GAAWhO,EAAOqU,EAAKzG,EAC3B,UAAW5N,KAAUwI,GACxB,MAAO+G,GAAavP,EAAOqU,EAAKzG,GAGxC,MAAO5N,KAAUhH,EAAYgH,EAAQ,IAEzC1F,GAAM6Q,OAAS,SAAUkJ,GACrB,GAAIC,GAASnX,SACb,OAAOkX,GAAI9a,QAAQ+O,GAAc,SAAU5N,EAAO6Z,EAAOC,GACrD,GAAIxU,GAAQsU,EAAOG,SAASF,EAAO,IAAM,EACzC,OAAO5I,GAAS3L,EAAOwU,EAAoBA,EAAkB7a,UAAU,GAAK,OAGpFW,GAAMoa,eAAiB,SAAUvJ,GAI7B,MAH2B,QAAvBA,EAAOvC,MAAM,EAAG,KAChBuC,EAASA,EAAOvC,MAAM,EAAGuC,EAAOnR,OAAS,IAEtCmR,GAEX7Q,GAAMqa,eAAiB,WACnB,IACI,MAAOhV,UAASiV,cAClB,MAAOvK,GACL,MAAO1K,UAASmC,gBAAgB8S,gBAGxCta,GAAMua,OAAShD,EACfvX,GAAMuB,YAAc,SAAU1B,EAAS2a,GACnC,MAAOhc,GAAEqB,GAASyB,WAAWkZ,IAAiB,IAAU,GAE5Dxa,GAAMyB,aAAe,SAAU5B,EAAS2a,GACpC,MAAOhc,GAAEqB,GAAS2B,YAAYgZ,IAAiB,IAAU,GAE7Dxa,GAAMqR,SAAWA,KAEpB,WA8CG,QAASoJ,GAAW/U,EAAOqR,EAAOtX,GAC9B,QAASiG,GAASqR,GAASrR,GAASjG,GAExC,QAASib,GAAoBC,GACzB,MAAOA,GAAWxb,OAAO,GAE7B,QAASyb,GAAeC,GACpB,MAAOrc,GAAEsc,IAAID,EAAaH,GAE9B,QAASK,GAAUpH,EAAMqH,GAChBA,GAA6B,KAApBrH,EAAKe,YACff,EAAKsH,SAAStH,EAAKe,WAAa,GAGxC,QAASwG,GAAW5X,GAEhB,IADA,GAAImC,GAAM,EAAG/F,EAAS4D,EAAK5D,OAAQyb,KAC5B1V,EAAM/F,EAAQ+F,IACjB0V,EAAM1V,IAAQnC,EAAKmC,GAAO,IAAIb,aAElC,OAAOuW,GAEX,QAASC,GAAeC,GACpB,GAAuBrY,GAAnBsY,IACJ,KAAKtY,IAAYqY,GACbC,EAAatY,GAAYkY,EAAWG,EAAUrY,GAElD,OAAOsY,GAEX,QAASC,GAAW7V,EAAOmL,EAAQyC,GAC/B,IAAK5N,EACD,MAAO,KAEX,IA4CySiQ,GAAI6F,EAAO9b,EAAQgX,EAAS+E,EAAQC,EAAKC,EAASC,EAAeC,EAAeC,EAAaC,EAAeC,EAAS5b,EA5C1Z6b,EAAY,SAAU7b,GAElB,IADA,GAAIwC,GAAI,EACDiO,EAAOpL,KAASrF,GACnBwC,IACA6C,GAKJ,OAHI7C,GAAI,IACJ6C,GAAO,GAEJ7C,GACRsZ,EAAY,SAAUrW,GACrB,GAAIsW,GAAKnS,EAAanE,IAAahC,OAAO,UAAYgC,EAAO,KAAMzF,EAAQsF,EAAM0W,OAAOC,EAAUxW,GAAMzF,MAAM+b,EAC9G,OAAI/b,IACAA,EAAQA,EAAM,GACdic,GAAYjc,EAAMV,OACXya,SAAS/Z,EAAO,KAEpB,MACRkc,EAAiB,SAAU/H,EAAOgI,GAEjC,IADA,GAAkCvF,GAAMwF,EAA2CC,EAA/E7Z,EAAI,EAAGlD,EAAS6U,EAAM7U,OAA0Bgd,EAAc,EAAGC,EAAW,EACzE/Z,EAAIlD,EAAQkD,IACfoU,EAAOzC,EAAM3R,GACb4Z,EAAaxF,EAAKtX,OAClB+c,EAAW/W,EAAM0W,OAAOC,EAAUG,GAC9BD,IACAE,EAAWA,EAAS7X,eAEpB6X,GAAYzF,GAAQwF,EAAaE,IACjCA,EAAcF,EACdG,EAAW/Z,EAGnB,OAAI8Z,IACAL,GAAYK,EACLC,EAAW,GAEf,MACRC,EAAe,WACd,GAAI9V,IAAS,CAKb,OAJIpB,GAAMvG,OAAOkd,KAAcxL,EAAOpL,KAClC4W,IACAvV,GAAS,GAENA,GACR8M,EAAWN,EAAQO,UAAUC,SAAU+I,EAAO,KAAMC,EAAQ,KAAMC,EAAM,KAAM/B,EAAQ,KAAM7G,EAAU,KAAM6I,EAAU,KAAMC,EAAe,KAAMxX,EAAM,EAAG4W,EAAW,EAAG1E,GAAU,EAAOhE,EAAO,GAAI7P,MAAQ0V,EAAkB5F,EAAS4F,iBAAmB,KAAM0D,EAAcvJ,EAAKc,aAU1R,KATK5D,IACDA,EAAS,KAEb6F,EAAU9C,EAASK,SAASpD,GACxB6F,IACA7F,EAAS6F,GAEb7F,EAASA,EAAO9R,MAAM,IACtBW,EAASmR,EAAOnR,OACT+F,EAAM/F,EAAQ+F,IAEjB,GADAkQ,EAAK9E,EAAOpL,GACRkS,EACW,MAAPhC,EACAgC,GAAU,EAEViF,QAGJ,IAAW,MAAPjH,EAAY,CAKZ,GAJA6F,EAAQS,EAAU,KACbrI,EAASuJ,aACVvJ,EAASuJ,WAAa/B,EAAexH,EAASG,OAEtC,OAARgJ,GAAgBvB,EAAQ,EACxB,QAGJ,IADAuB,EAAMvB,EAAQ,EAAIU,EAAU,GAAKI,EAAe1I,EAASuJ,WAAoB,GAAT3B,EAAa,YAAc,UAAU,GAC7F,OAARuB,GAAgBtC,EAAWsC,EAAK,EAAG,IACnC,MAAO,UAER,IAAW,MAAPpH,EAAY,CAMnB,GALA6F,EAAQS,EAAU,KACbrI,EAASwJ,eACVxJ,EAASwJ,aAAehC,EAAexH,EAASI,SAEpD8I,EAAQtB,EAAQ,EAAIU,EAAU,GAAKI,EAAe1I,EAASwJ,aAAsB,GAAT5B,EAAa,YAAc,UAAU,GAC/F,OAAVsB,GAAkBrC,EAAWqC,EAAO,EAAG,IACvC,MAAO,KAEXA,IAAS,MACN,IAAW,MAAPnH,EAAY,CAGnB,GAFA6F,EAAQS,EAAU,KAClBY,EAAOX,EAAUV,GACJ,OAATqB,EACA,MAAO,KAEE,IAATrB,IAC+B,gBAApBhC,KACPA,EAAkB0D,EAAc/C,SAASX,EAAiB,KAE9DqD,EAAOK,EAAcA,EAAc,IAAML,EACrCA,EAAOrD,IACPqD,GAAQ,UAGb,IAAW,MAAPlH,GAMP,GALAsG,EAAU,KACVjB,EAAQkB,EAAU,GACL,IAATlB,IACAA,EAAQ,GAEE,OAAVA,GAAkBP,EAAWO,EAAO,EAAG,IACvC,MAAO,UAER,IAAW,MAAPrF,GAGP,GAFAsG,EAAU,KACVjB,EAAQkB,EAAU,GACJ,OAAVlB,GAAkBP,EAAWO,EAAO,EAAG,IACvC,MAAO,UAER,IAAW,MAAPrF,GAGP,GAFAsG,EAAU,KACV9H,EAAU+H,EAAU,GACJ,OAAZ/H,GAAoBsG,EAAWtG,EAAS,EAAG,IAC3C,MAAO,UAER,IAAW,MAAPwB,GAGP,GAFAsG,EAAU,KACVe,EAAUd,EAAU,GACJ,OAAZc,GAAoBvC,EAAWuC,EAAS,EAAG,IAC3C,MAAO,UAER,IAAW,MAAPrH,GASP,GARA6F,EAAQS,EAAU,KAClB7b,EAAQsF,EAAM0W,OAAOC,EAAUb,GAAOpb,MAAM4J,EAAa,IACzDiT,EAAef,EAAUV,GACJ,OAAjByB,IACAA,EAAehT,WAAW,KAAO7J,EAAM,GAAI,IAC3C6c,EAAejd,GAAMua,OAAO0C,EAAc,GAC1CA,GAAgB,KAEC,OAAjBA,GAAyBxC,EAAWwC,EAAc,EAAG,KACrD,MAAO,UAER,IAAW,MAAPtH,GASP,GARA6F,EAAQS,EAAU,KAClBL,EAAgBhI,EAASkB,GACzB+G,EAAgBjI,EAASmB,GACX,IAAVyG,IACAI,EAAgBhB,EAAegB,GAC/BC,EAAgBjB,EAAeiB,IAEnCJ,EAASa,EAAeT,IACnBJ,IAAWa,EAAeV,GAC3B,MAAO,UAER,IAAW,MAAPjG,EAAY,CAGnB,GAFA+F,GAAM,EACNF,EAAQS,EAAU,KACgB,MAA9BvW,EAAM0W,OAAOC,EAAU,GAAY,CACnCO,GACA,UAGJ,GADAjB,EAAUjW,EAAM0W,OAAOC,EAAU,GAAGjc,MAAMob,EAAQ,EAAI6B,EAAqBC,IACtE3B,EACD,MAAO,KAWX,IATAA,EAAUA,EAAQ,GAAG5c,MAAM,KAC3B+c,EAAcH,EAAQ,GACtBI,EAAgBJ,EAAQ,IACnBI,GAAiBD,EAAYpc,OAAS,IACvC2c,EAAWP,EAAYpc,OAAS,EAChCqc,EAAgBD,EAAYzc,UAAUgd,GACtCP,EAAcA,EAAYzc,UAAU,EAAGgd,IAE3CP,EAAc3B,SAAS2B,EAAa,IAChCrB,EAAWqB,MAAkB,IAC7B,MAAO,KAEX,IAAIN,EAAQ,IACRO,EAAgB5B,SAAS4B,EAAe,IACpCwB,MAAMxB,IAAkBtB,EAAWsB,EAAe,EAAG,KACrD,MAAO,UAGZ,IAAW,MAAPpG,EACPgC,GAAU,EACViF,QACG,KAAKA,IACR,MAAO,KAmCnB,OA/BAZ,GAAoB,OAAVhB,GAA8B,OAAZ7G,GAAoB6I,GAAW,KAC9C,OAATH,GAA2B,OAAVC,GAA0B,OAARC,GAAgBf,GACnDa,EAAOK,EACPJ,EAAQnJ,EAAKa,WACbuI,EAAMpJ,EAAKS,YAEE,OAATyI,IACAA,EAAOK,GAEC,OAARH,IACAA,EAAM,IAGVtB,GAAUT,EAAQ,KAClBA,GAAS,IAETU,GACII,IACAd,IAAUc,GAEVC,IACA5H,IAAY4H,GAEhBrW,EAAQ,GAAI5B,MAAKA,KAAK4X,IAAImB,EAAMC,EAAOC,EAAK/B,EAAO7G,EAAS6I,EAASC,MAErEvX,EAAQ,GAAI5B,MAAK+Y,EAAMC,EAAOC,EAAK/B,EAAO7G,EAAS6I,EAASC,GAC5DlC,EAAUrV,EAAOsV,IAEjB6B,EAAO,KACPnX,EAAM8X,YAAYX,GAElBnX,EAAM0O,YAAc2I,GAAOrB,IAAQhd,EAC5B,KAEJgH,EAEX,QAAS+X,GAA2BvW,GAChC,GAAIC,GAA+B,MAAxBD,EAAOkV,OAAO,EAAG,MAAkB,CAG9C,OAFAlV,GAASA,EAAO7H,UAAU,GAC1B6H,EAA6C,GAApCiT,SAASjT,EAAOkV,OAAO,EAAG,GAAI,IAAWjC,SAASjT,EAAO7H,UAAU,GAAI,IACzE8H,EAAOD,EAElB,QAASwW,GAAkBpK,GAA3B,GAGQqK,GAAgBC,EAAWnY,EAF3B/F,EAASa,GAAKC,IAAIqd,EAAiBne,OAAQoe,EAAiBpe,QAC5DuU,EAAWX,EAAQM,SAASK,SAE5B8J,IACJ,KAAKtY,EAAM,EAAGA,EAAM/F,EAAQ+F,IAAO,CAE/B,IADAkY,EAAiBE,EAAiBpY,GAC7BmY,EAAY,EAAGA,EAAYD,EAAeje,OAAQke,IACnDG,EAAQnO,KAAKqE,EAAS0J,EAAeC,IAEzCG,GAAUA,EAAQC,OAAOF,EAAiBrY,IAE9C,MAAOsY,GA/TX,GAAIE,GAAyB,UAAWC,EAAiB,mBAAoBZ,EAAsB,gBAAiBD,EAAqB,uBAAwBc,EAAa,sBAAuBC,EAAe,UAAWP,OAGnN,IACA,IACA,MAGA,IACA,IACA,IACA,IACA,IACA,MAELC,IAEK,iCACA,8BACA,6BACA,0BACA,2BACA,yBACA,sBACA,qBACA,sBACA,sBACA,wBAGA,mBACA,mBACA,qBAGA,aACA,aACA,WACA,UAEL9T,GACCqU,EAAG,WACHC,EAAG,WACHC,EAAG,UACJpG,KAAoB9G,QAqR3BrR,IAAMwe,UAAY,SAAU9Y,EAAOqY,EAASzK,GAA1B,GAIV7N,GACAkO,EACAjU,EACA+e,CANJ,IAAmC,kBAA/BtG,EAAelI,KAAKvK,GACpB,MAAOA,EAMX,IAJID,EAAM,EACNkO,EAAO,KAGPjO,GAAiC,IAAxBA,EAAMM,QAAQ,QACvB2N,EAAOwK,EAAWhH,KAAKzR,IAUnB,MARAiO,GAAOA,EAAK,GACZ8K,EAAWL,EAAajH,KAAKxD,EAAKtU,UAAU,IAC5CsU,EAAO,GAAI7P,MAAKqW,SAASxG,EAAM,KAC3B8K,IACAA,EAAWhB,EAA2BgB,EAAS,IAC/C9K,EAAO3T,GAAM0e,SAAS9P,MAAM+E,EAAM,GAClCA,EAAO3T,GAAM0e,SAASC,QAAQhL,EAAM,KAAQ8K,IAEzC9K,CASf,KANAL,EAAUtT,GAAMwT,WAAWF,GACtByK,IACDA,EAAUL,EAAkBpK,IAEhCyK,EAAUlQ,GAAQkQ,GAAWA,GAAWA,GACxCre,EAASqe,EAAQre,OACV+F,EAAM/F,EAAQ+F,IAEjB,GADAkO,EAAO4H,EAAW7V,EAAOqY,EAAQtY,GAAM6N,GAEnC,MAAOK,EAGf,OAAOA,IAEX3T,GAAMma,SAAW,SAAUzU,EAAO4N,GAC9B,GAAIxM,GAAS9G,GAAMiK,WAAWvE,EAAO4N,EAIrC,OAHIxM,KACAA,EAAkB,EAATA,GAENA,GAEX9G,GAAMiK,WAAa,SAAUvE,EAAO4N,EAASzC,GACzC,IAAKnL,GAAmB,IAAVA,EACV,MAAO,KAEX,UAAWA,KAAUwI,GACjB,MAAOxI,EAEXA,GAAQA,GAAAA,EACR4N,EAAUtT,GAAMwT,WAAWF,EAC3B,IAAkL/C,GAAO6E,EAArL7V,EAAS+T,EAAQC,aAAc8D,EAAU9X,EAAO8X,QAASD,EAAW7X,EAAO6X,SAAUlC,EAASkC,EAASlC,OAAQ0J,EAAgBvH,EAAQnC,OAAQ0B,EAAWlR,EAAMM,QAAQ,IAC5K,OAAIkY,GAAelc,KAAK0D,IACpBA,EAAQuE,WAAWvE,EAAMzG,QAAQM,EAAO,KAAM,MAC1Cge,MAAM7X,KACNA,EAAQ,MAELA,GAEPkR,EAAW,EACJ,MAEPA,EAAWA,KAEXlR,EAAMM,QAAQkP,OAAgBrE,GAAUA,EAAOjM,cAAcoB,QAAQ,SACrEzG,EAAS6X,EACT7G,EAAQhR,EAAOmX,QAAQ,GAAGzX,QAAQ,IAAKiW,GAAQnW,MAAM,KACjD2G,EAAMM,QAAQuK,EAAM,QAAY7K,EAAMM,QAAQuK,EAAM,SACpD7K,EAAQA,EAAMzG,QAAQsR,EAAM,GAAI,IAAItR,QAAQsR,EAAM,GAAI,IACtDqG,GAAW,IAERlR,EAAMM,QAAQ4Y,QACrBxJ,GAAY,EACZ7V,EAAS8X,EACTnC,EAAS0J,GAEblZ,EAAQA,EAAMzG,QAAQ,IAAK,IAAIA,QAAQiW,EAAQ,IAAIjW,QAAQgf,EAAwB,KAAKlf,MAAMQ,EAAO,KAAKN,QAAQgf,EAAwB,MAAMjf,KAAK,IAAIC,QAAQM,EAAO,KAAM,KAC9KmG,EAAQuE,WAAWvE,GACf6X,MAAM7X,GACNA,EAAQ,KACDkR,IACPlR,OAEAA,GAAS0P,IACT1P,GAAS,KAENA,OAkLd,WAAA,GAkBOmZ,GAQAC,EACA5e,EAA2C6e,EAAyCC,EA+FpFC,EAyGArX,EAwDAsX,EAGAC,CA7RJlf,IAAQmf,WAAa1gB,EACrBuB,GAAQof,UAAY,SAAUC,GAC1B,GAAK/B,MAAMtd,GAAQmf,aAAgBE,EAE5B,CACH,GAAyCxY,GAArCyY,EAAMla,SAASma,cAAc,MAMjC,OALAD,GAAI3d,MAAM6d,QAAU,oEACpBF,EAAIG,UAAY,SAChBra,SAASsa,KAAKC,YAAYL,GAC1Btf,GAAQmf,WAAatY,EAASyY,EAAIM,YAAcN,EAAI/Y,YACpDnB,SAASsa,KAAKG,YAAYP,GACnBzY,EARP,MAAO7G,IAAQmf,YAWvBnf,GAAQkG,MAAQ,SAAUtG,GACtB,MAAOrB,GAAEqB,GAASkgB,QAAQ,UAAUrgB,OAAS,GAE7Cmf,EAAQxZ,SAASma,cAAc,QACnC,KACIX,EAAMa,UAAY,qBAClBzf,GAAQ+f,gBAAiB,EAC3B,MAAOjQ,GACL9P,GAAQ+f,gBAAiB,EAE7B/f,GAAQggB,MAAQ,gBAAkBxhB,GAC9BqgB,EAAWzZ,SAASmC,gBAAgB5F,MACpC1B,EAAcD,GAAQC,aAAc,EAAO6e,EAAa9e,GAAQ8e,YAAa,EAAOC,EAAe,eAAiBvgB,GAASyhB,YAAYrR,aAC7I5O,GAAQkgB,QAAU,mBAAqB1hB,IAAU,OAAS,IAAIA,GAAO2hB,iBAAqB,kBAAoBtB,IAAY,iBAAmBA,GAC7I7e,GAAQogB,WAAa,YAAcvB,IAAY,kBAAoBA,IAAY,cAAgBA,GAC/FtZ,IACI,MACA,SACA,IACA,MACD,WAAA,GAGS8a,GAFJC,EAASzY,GAAAA,KAAiB0Y,QAAwB3B,GAAMjd,MAAM2e,EAAS,gBAAkBjY,EAC7F,IAAIkY,SAAyB3B,GAAMjd,MAAM2e,EAAS,eAAiBjY,GAW/D,MAVIgY,GAAYC,EAAO3b,cACvBma,GACIhf,IAAkB,MAAbugB,EAAoB,IAAMA,EAAY,IAAM,GACjDC,OAAQA,EACRE,MAAqB,MAAdH,GAAmC,WAAdA,EAAyBA,EAAY,IAEjEE,IACAtgB,EAAc6e,EACd7e,EAAYugB,MAAQvgB,EAAYugB,MAAQvgB,EAAYugB,MAAQ,gBAAkB,kBAE3E,IAGf5B,EAAQ,KACR5e,GAAQ8e,WAAaA,EACrB9e,GAAQC,YAAcA,EACtBD,GAAQygB,iBAAmBjiB,EAAOiiB,mBAAqBhiB,EAAY,EAAID,EAAOiiB,gBAC9E,KACIzgB,GAAQ0gB,YAAcliB,EAAO6C,YAAc7C,EAAOmiB,OAASniB,EAAOmiB,OAAOC,WAAapiB,EAAOqiB,WAC7F7gB,GAAQ8gB,aAAetiB,EAAO+C,aAAe/C,EAAOmiB,OAASniB,EAAOmiB,OAAOI,YAAcviB,EAAOwiB,YAClG,MAAOlR,GACL9P,GAAQ0gB,YAAcliB,EAAOmiB,OAAOC,WACpC5gB,GAAQ8gB,aAAetiB,EAAOmiB,OAAOI,YAEzC/gB,GAAQihB,SAAW,SAAUC,GAAV,GACCC,GA+BPhd,EA/BLid,GAAK,EAAqBjhB,KAAYkhB,GAAmB,iBAAiBtf,KAAKmf,GAAKI,GAChFC,GAAI,gDACJC,KAAM,+BACNC,QAAS,mEACTC,OAAQ,2CACRC,KAAM,kCACNC,MAAO,2CACPC,MAAO,gCACPC,WAAY,oDACZC,SAAU,kDACVC,QAAS,gCACTC,MAAO,2CACPC,SAAU,gDACVC,KAAM,8CACPC,GACCC,IAAK,sBACLZ,QAAS,kBACTK,WAAY,wBACZE,QAAS,UACTT,GAAI,KACJe,KAAM,uBACNV,MAAO,SACRW,GAAkBC,OAAQ,uBAAyBC,GAClDC,MAAO,eACPC,QAAS,eACTC,QAAS,kBACTC,aAAc,qBACdC,GAAI,uBACJ5D,OAAQ,gBACR/Y,OAAQ,UAEhB,KAAShC,IAASmd,GACd,GAAIA,EAAS/c,eAAeJ,KACxBhE,EAAQ+gB,EAAG/gB,MAAMmhB,EAASnd,KACf,CACP,GAAa,WAATA,GAAsB,WAAa4e,WACnC,OAAO,CAEX3B,MACAA,EAAG4B,OAAS7e,EACZid,EAAGoB,OAASte,EAAOC,EAAOoe,GAAe,GACzCnB,EAAGhgB,QAAU8C,EAAOgd,EAAIuB,EAAY,WACpCrB,EAAGrK,KAAO7S,EAAOC,EAAOie,GACxBhB,EAAGA,EAAGrK,OAAQ,EACdqK,EAAG6B,aAAe9iB,EAAM,GACxBihB,EAAGD,aAAehhB,EAAM,GAAGnB,QAAQ,IAAK,KACxCmiB,EAAeC,EAAGD,aAAaniB,QAAQ,IAAK,IAAImd,OAAO,EAAG,GAC1DiF,EAAG8B,YAAc9B,EAAG6B,aAAe9B,EAAmBxd,MAAM,GAAKwd,EAAa1hB,OAAS,EAAI0hB,EAAa1hB,OAAS,IAAIV,KAAK,KAC1HqiB,EAAG+B,cAAiB3kB,GAAO4kB,WAAanf,UAAoBzF,GAAO2kB,UAAYlf,GAC/Emd,EAAGiC,QAAU7kB,EAAOukB,UAAUO,YAAc,mBAAmBvhB,KAAKvD,EAAO+kB,SAASC,WAAapC,EAAG+B,QAChG/B,EAAGK,UAAYzhB,GAAQygB,iBAAmB,KAAOW,EAAG8B,YAAc,KAAO7B,KAAqBrhB,GAAQ0gB,YAAc,KAAO1gB,GAAQ8gB,aAAe,OAClJM,EAAGoB,OAASre,EAEhB,OAIZ,MAAOid,IAEPpC,EAAWhf,GAAQgf,SAAWhf,GAAQihB,SAAS8B,UAAUU,WAC7DzjB,GAAQ0jB,mBAAqB1E,EAASuC,GAAKZ,OAAO7f,MAAQ,IAAM,EAChEd,GAAQ2jB,oBAAqB,GACzB3E,EAASqD,KAAOrD,EAASyC,SAAWzC,EAASiE,aAAe,GAAKjE,EAASuC,MAC1EvhB,GAAQ2jB,mBAAqB3E,GAEjChf,GAAQ4jB,aAAe,WACnB,GAAI5jB,GAAQggB,MAAO,CACf,GAAIhB,EAASqD,IACT,OAAO,CAEX,IAAIrD,EAASyC,QACT,OAAKzhB,GAAQoB,QAAQ8d,UAGjBlf,GAAQoB,QAAQkB,QAAU,OAGrB/D,EAAE,uBAAuBwM,KAAK,YAAc,IAAI5K,MAAM,qBAGvE,OAAO,GAEXH,GAAQ6jB,qBAAuB7jB,GAAQggB,SAAWhgB,GAAQgf,SAASqD,KAAOriB,GAAQgf,SAASyC,SAC3FzhB,GAAQ8jB,cAAgB,SAAU5C,GAAV,GASX/c,GARL/C,GAAU,EAAOjB,KAAYsiB,GACzBsB,KAAM,uBACN5d,OAAQ,yBACR6d,OAAQ,yBACRC,MAAO,sCACP7hB,KAAM,mCACNiE,QAAS,iCAEjB,KAASlC,IAASse,GACd,GAAIA,EAAWle,eAAeJ,KAC1BhE,EAAQ+gB,EAAG/gB,MAAMsiB,EAAWte,KACjB,CACP/C,KACAA,EAAQ+C,IAAS,EACjB/C,EAAQjB,EAAM,GAAGwE,cAAc7F,MAAM,KAAK,GAAGA,MAAM,KAAK,KAAM,EAC9DsC,EAAQkB,QAAU4X,SAAS9U,SAAS6Z,cAAgB9e,EAAM,GAAI,GAC9D,OAIZ,MAAOiB,IAEXpB,GAAQoB,QAAUpB,GAAQ8jB,cAAcf,UAAUU,WAClDzjB,GAAQkkB,sBAAwB,WAC5B,GAAIC,IACAC,OAAMhf,SAASif,uBAAwBjf,SAASif,sBAAsB,QACtEC,MAAKlf,SAASif,uBAAwBjf,SAASif,sBAAsB,OACrEE,QAAOnf,SAASif,uBAAwBjf,SAASif,sBAAsB,SAS3E,OAPIrkB,IAAQoB,QAAQ8d,SAChBiF,EAASI,OAAQ,EACbvkB,GAAQoB,QAAQkB,SAAW,KAC3B6hB,EAASC,MAAO,EAChBD,EAASG,KAAM,IAGhBH,GAEXnkB,GAAQwkB,UAAYxkB,GAAQkkB,wBAC5BlkB,GAAQykB,UAAY,WAAA,GAERrjB,GACAsjB,EACAC,CAHR,KAOI,MANIvjB,GAAUpB,GAAQoB,QAClBsjB,EAAsB,EACtBC,EAAQvf,SAASmC,gBACjBnG,EAAQgB,MAA2B,IAAnBhB,EAAQkB,SAAiBqiB,EAAMC,aAAeD,EAAME,eAAiB7kB,GAAQggB,QAC7F0E,EAAsB1kB,GAAQof,aAE3Bpf,GAAQggB,MAAQ2E,EAAMne,YAAchI,EAAOqiB,WAAazf,EAAQgB,MAAQhB,EAAQkB,SAAW,KAAO6E,KAAO3I,GAAQ4G,SAASmC,gBAAgBqY,YAAc8E,IAAwBvd,KAAO3I,GAAQqiB,WAAa,EACrN,MAAO/Q,GACL,MAAO,KAGf9P,GAAQ8kB,iBAAoD,IAA1BjG,EAASkG,iBAAkC/kB,GAAQoB,QAAQgB,MAAQpC,GAAQoB,QAAQkB,QAAU,GAC9H,SAAUlB,GACP,GAAI4jB,GAAW,GAAIC,EAAa1mB,EAAE6G,SAASmC,iBAAkB0b,EAAe/I,SAAS9Y,EAAQkB,QAAS,GAClGlB,GAAQgB,KACR4iB,EAAW,KACJ5jB,EAAQiF,QACf2e,EAAW,KACJ5jB,EAAQ4iB,OACfgB,EAAW,SACJ5jB,EAAQ+E,OACf6e,EAAW,SACJ5jB,EAAQ6iB,MACfe,EAAW,QACJ5jB,EAAQ2iB,OACfiB,EAAW,QAEXA,IACAA,EAAW,KAAOA,EAAW,MAAQA,EAAW/B,GAEhDjjB,GAAQgf,WACRgG,GAAY,aAEXhlB,GAAQogB,aACT4E,GAAY,iBAEhBC,EAAW9iB,SAAS6iB,IACtBhlB,GAAQoB,SACVpB,GAAQklB,aAAe9f,SAASmC,gBAAgB4d,iBAC5Cxd,EAAQvC,SAASma,cAAc,SACnCvf,GAAQolB,YAAc,eAAiBzd,GACvC3H,GAAQqlB,oBAAsB,oBAAsB1d,GACpD3H,GAAQ2H,MAAQ,WAeZ,IAfY,GAcRZ,GAbAue,GACA,SACA,OACA,OACA,QACA,OACA,WACA,kBAEA7lB,EAAS6lB,EAAM7lB,OACfgG,EAAQ,OACRoB,KACArB,EAAM,EAEHA,EAAM/F,EAAQ+F,IACjBuB,EAAOue,EAAM9f,GACbmC,EAAM4d,aAAa,OAAQxe,GAC3BY,EAAMlC,MAAQA,EACdoB,EAAOE,EAAK/H,QAAQ,IAAK,KAAsB,SAAf2I,EAAMZ,MAAmBY,EAAMlC,QAAUA,CAE7E,OAAOoB,MAEXc,EAAMhG,MAAM6d,QAAU,cACtBxf,GAAQwlB,WAAa7d,EAAMhG,MAAM6jB,SACjC7d,EAAQ,KACR3H,GAAQylB,WAAa,WAAA,GAMR9iB,GALL+iB,EAAY,IACZC,IACI3L,MAAO,EACP4L,MAAO,KAEf,KAASjjB,EAAI,EAAGA,EAAI+iB,EAAW/iB,IAC3BgjB,EAAOhW,MACHqK,MAAOrX,EACPijB,MAAO,KAMf,OAHAD,GAAOE,KAAK,SAAUpb,EAAGC,GACrB,MAAOD,GAAEmb,MAAQlb,EAAEkb,MAAQ,EAAInb,EAAEmb,MAAQlb,EAAEkb,SAAa,IAEjC,IAApBD,EAAO,GAAG3L,SAErBha,GAAQ8lB,gBAAkB/G,EAAagH,uBAAyBhH,EAAaiH,oBAAsBjH,EAAakH,mBAAqBlH,EAAamH,kBAAoBnH,EAAa+G,iBAAmB/G,EAAarD,SAAW,SAAU9P,GAEpO,IADA,GAAIua,GAAW/gB,SAASghB,kBAAoBve,KAAKwe,YAAcjhB,UAAUghB,iBAAiBxa,OAAkBrN,EAAEqN,GAAWjJ,EAAIwjB,EAAS1mB,OAC/HkD,KACH,GAAIwjB,EAASxjB,IAAMkF,KACf,OAAO,CAGf,QAAO,GAEX7H,GAAQsmB,UAAY9nB,EAAO+nB,SAAW/nB,EAAO+nB,QAAQD,UACjDrH,EAAe7Z,SAAS6Z,aAC5Bjf,GAAQwmB,WAAa,gBAAkBhoB,MAAYwB,GAAQoB,QAAQgB,QAAU6c,GAAgBA,GAAgB,IAC7Gjf,GAAQymB,eAAiB,mBAAqBjoB,GAAO4G,SACjD8Z,EAASlf,GAAQoB,QAAQ8d,OAC7Blf,GAAQqH,YAAc6X,GAAU1gB,EAAOkoB,eACvC1mB,GAAQoH,UAAY8X,GAAU1gB,EAAOmoB,aACrC3mB,GAAQ4mB,oBAAsB5H,IAAahf,GAAQggB,OAAShgB,GAAQqH,YAAcrH,GAAQoH,aA6B1FqF,GACAjM,MAAQ2H,QAAS,SACjB1H,OAAS0H,QAAS,QAClB0e,MAAQ1e,QAAS,MACjB2e,IAAM3e,QAAS,QACfhB,KAAOgB,QAAS,UAChBzH,QAAUyH,QAAS,OACnB4e,MAAQ5e,QAAS,OACjB6e,KAAO7e,QAAS,OAYhBP,KACJrJ,EAAEgK,OAAOX,GACLqf,SAAS,EACTlf,QAAS,SAAUnI,GACfiI,KAAKjI,QAAUrB,EAAEqB,IAErBoJ,QAAS,SAAUpJ,EAASqI,GACnBrI,EAAQgC,GAAG,aACZhC,EAAQE,KAAMonB,QAAStnB,EAAQyD,KAAK,eAAiB,UAAWvD,IAAI,WAEpEmI,EAAQU,MACR/I,EAAQyD,KAAK,aAAczD,EAAQE,IAAI,YAAY6I,OAEnDV,EAAQO,MACRP,EAAQO,OAERP,EAAQW,kBACRX,EAAQW,iBAAiBhJ,GAE7BA,EAAQunB,WAEZC,QAAS,WACLvf,KAAKof,SAAU,EACfpf,KAAKmB,QAAUnB,KAAKwf,aAExBC,OAAQ,WACJzf,KAAKof,SAAU,EACfpf,KAAKmB,QAAUnB,KAAK0f,mBAG5B3f,EAAQyf,YAAczf,EAAQoB,QAsDxB,gBAAkBzK,GAAEuN,IACtBvD,GAAOhK,EAAEuN,IACL0b,UAAW,SAAUC,EAAYC,GAC7B,MAAO7f,MAAK8f,KAAKF,EAAYC,IAEjCE,aAAc,SAAU3f,EAASC,EAAUC,EAASC,GAChD,MAAOS,GAAQhB,KAAMI,EAASC,EAAUC,EAASC,IAErDyf,cAAe,SAAU3e,EAASjB,GAC9B,MAAOlI,IAAMkJ,YAAYpB,KAAMqB,EAASjB,GAAS,IAErD6f,iBAAkB,SAAU5e,EAASjB,GACjC,MAAOlI,IAAMkJ,YAAYpB,KAAMqB,EAASjB,GAAS,IAErD8f,iBAAkB,SAAU7e,EAASjB,EAAS+f,GAC1C,MAAOjoB,IAAMkJ,YAAYpB,KAAMqB,EAASjB,EAAS+f,MAIzD3e,EAAY,KAAMC,EAAW,KAAME,EAAc,KAAMC,EAAa,KAAMF,EAAW,KAIrFmD,EAAc,SAAUoD,GACxB,MAAOA,GAAEmY,QAETjoB,GAAQggB,QACRtT,EAAc,SAAUoD,GACpB,GAAIoY,GAAU,iBAAmBpY,GAAIA,EAAEqY,cAAcC,eAAiB,kBAAoBtY,GAAIA,EAAEsY,eAAiB,IACjH,OAAOF,GAAU9iB,SAASijB,iBAAiBH,EAAQ,GAAGI,QAASJ,EAAQ,GAAGK,SAAWzY,EAAEmY,QAE3F1iB,IACI,QACA,YACA,aACA,UACA,YACA,YACA,OACD,SAAUqT,EAAGnT,GACZlH,EAAEuN,GAAGrG,GAAS,SAAU+iB,GACpB,MAAO3gB,MAAKoH,KAAKxJ,EAAO+iB,OAIhCxoB,GAAQggB,MACHhgB,GAAQgf,UAQThf,GAAQyoB,UAAY,aACpBzoB,GAAQ0oB,QAAU,WAClB1oB,GAAQ2oB,UAAY,YACpB3oB,GAAQ4oB,YAAc,cACtB5oB,GAAQ6oB,MAAQ,WAChB7oB,GAAQ8oB,OAAS,sBAZjB9oB,GAAQyoB,UAAY,uBACpBzoB,GAAQ0oB,QAAU,mBAClB1oB,GAAQ2oB,UAAY,sBACpB3oB,GAAQ4oB,YAAc,yBACtB5oB,GAAQ6oB,MAAQ,QAChB7oB,GAAQ8oB,OAAS,UASd9oB,GAAQoH,UACfpH,GAAQ2oB,UAAY,cACpB3oB,GAAQyoB,UAAY,cACpBzoB,GAAQ0oB,QAAU,YAClB1oB,GAAQ4oB,YAAc,gBACtB5oB,GAAQ6oB,MAAQ,YAChB7oB,GAAQ8oB,OAAS,4BACV9oB,GAAQqH,YACfrH,GAAQ2oB,UAAY,gBACpB3oB,GAAQyoB,UAAY,gBACpBzoB,GAAQ0oB,QAAU,cAClB1oB,GAAQ4oB,YAAc,kBACtB5oB,GAAQ6oB,MAAQ,cAChB7oB,GAAQ8oB,OAAS,6BAEjB9oB,GAAQ2oB,UAAY,YACpB3oB,GAAQyoB,UAAY,YACpBzoB,GAAQ0oB,QAAU,UAClB1oB,GAAQ4oB,YAAc,aACtB5oB,GAAQ6oB,MAAQ,QAChB7oB,GAAQ8oB,OAAS,UAEjBnc,EAAiB,SAAUoc,EAAS7Y,GAChC,GAA+B8J,GAAOxU,EAAK/F,EAAQ8O,EAA/C1H,EAASqJ,GAAa,IAAiCqL,EAAQ,CACnE,KAAK/V,EAAM,EAAG/F,EAASspB,EAAQtpB,OAAQ+F,EAAM/F,EAAQ+F,IACjD+I,EAASwa,EAAQvjB,GACF,KAAX+I,IACAyL,EAAQzL,EAAOxI,QAAQ,KACT,IAAViU,IACIA,MACAzL,EAAS,IAAMA,GAEfgN,IACAhN,EAAS,IAAMA,EAAOnP,UAAU,EAAG4a,GAAS,UAAYzL,EAAOnP,UAAU4a,KAGjFuB,IACA1U,GAAU0H,GAAU/I,EAAM/F,EAAS,EAAI,UAAY,KAG3D,OAAWkE,OAAM4X,GAAOxc,KAAK,KAAO8H,GACrC+F,EAAa,mBACpBrE,GAAOxI,IACHipB,WACAC,8BACAC,GAAInpB,GAAMmpB,OACVphB,GAAI/H,GAAM+H,IAAMA,EAChBF,QAAS7H,GAAM6H,SAAWA,EAC1BuhB,OAAQppB,GAAMopB,WACd9lB,KAAMtD,GAAMsD,SACZ+lB,QAASrpB,GAAMqpB,YACfC,QAAStpB,GAAMspB,YACfC,aAAeC,aACfC,MACIC,OAAQ,GACRC,OAAQ,GACRC,UAAW,EACXC,IAAK,EACLC,MAAO,GACPC,IAAK,GACLC,KAAM,GACNC,GAAI,GACJC,MAAO,GACPC,KAAM,GACNC,IAAK,GACLC,KAAM,GACNC,SAAU,GACVC,OAAQ,GACRC,SAAU,GACVC,GAAI,IACJC,IAAK,IACLC,IAAK,IACLC,YAAa,IACbC,aAAc,IACdC,WAAY,KAEhB7qB,QAASD,GAAMC,SAAWA,GAC1B6I,QAAS9I,GAAM8I,SAAWA,EAC1BiB,GAAI,GACJiB,KAAM,SAAUtF,GACZ,MAAO,QAAU1F,GAAM+J,GAAKrE,GAEhC9F,WAAYA,EACZgB,KAAMA,EACN8B,WAAYA,EACZuC,kBAAmBA,EACnB8lB,cAAe/qB,GAAM+qB,kBACrBjlB,aAAcA,EACdI,WAAYA,EACZL,KAAMA,EACNhB,YAAaA,EACbJ,UAAWA,EACXsC,UAAW/G,GAAM+G,WAAaA,EAC9BY,aAAc3H,GAAM2H,cAAgBA,EACpCuB,YAAalJ,GAAMkJ,aAAeA,EAClCwD,WAAY1M,GAAM0M,YAAcA,EAChCP,WAAYA,EACZxN,MAAOA,EACPqN,SAAUA,EACVzB,SAAUuD,GAAM9B,EAASsE,QAAStE,GAClCqE,OAAQvC,GAAM9B,EAASqE,OAAQrE,GAC/BiH,UAAWnF,GAAMC,GAAKkF,UAAWlF,IACjCpB,YAAaA,EACbtD,WAAYA,EACZ2hB,WAAY,SAAUC,GAClB,MAAOA,KAAQpe,EAAW7K,KAAKipB,IAEnC1f,KAAM,SAAU2f,EAAYC,EAAMhb,GAkB9B,MAjBA+a,GAAaA,GAAc,SAChBC,IAAQ7iB,KACf6H,EAAYgb,EACZA,GAAO,GAEXhb,EAAYA,GAAa,IACrB+a,GAAuC,MAAzBA,EAAW/rB,OAAO,KAChC+rB,EAAa,IAAMA,GAEnBC,GACAD,EAAaA,EAAWjsB,QAAQ,sBAAuB,iBACvDisB,EAAaA,EAAWjsB,QAAQ,sBAAuB,iBACvDisB,EAAate,EAAese,EAAWnsB,MAAM,KAAMoR,GACnD+a,EAAaA,EAAWjsB,QAAQ,aAAc,MAE9CisB,EAAa/a,EAAY+a,EAEtBA,GAEXE,OAAQ,SAAUF,EAAYC,GAC1B,GAAItkB,GAAMqkB,EAAaC,CACvB,OAAO/c,IAAYvH,GAAOuH,GAAYvH,IAAYuD,SAAS,IAAK,UAAYpK,GAAMuL,KAAK2f,EAAYC,KAEvGE,OAAQ,SAAUH,GACd,MAAO7c,IAAY6c,GAAc7c,GAAY6c,IAAmB9gB,SAAS,UAAWpK,GAAMuL,KAAK2f,GAAc,WAEjHI,SAAU,SAAUJ,GAChB,OACIK,IAAKvrB,GAAMorB,OAAOF,GAClBM,IAAKxrB,GAAMqrB,OAAOH,KAG1BO,KAAM,WACF,GAAa7oB,GAAG8oB,EAAZC,EAAK,EACT,KAAK/oB,EAAI,EAAGA,EAAI,GAAIA,IAChB8oB,EAAyB,GAAhBnrB,GAAKmrB,SAAgB,EACrB,GAAL9oB,GAAe,IAALA,GAAgB,IAALA,GAAgB,IAALA,IAChC+oB,GAAM,KAEVA,IAAY,IAAL/oB,EAAU,EAAS,IAALA,EAAmB,EAAT8oB,EAAa,EAAIA,GAAQra,SAAS,GAErE,OAAOsa,IAEXC,aAAc,SAAUC,GACpB,MAAOA,GAAK5sB,QAAQ,SAAU,IAAMe,GAAMgL,KAAK,QAAU,SAASsD,MAAM,OAE5Ewd,kBAAmB,SAAUC,GAAV,GAGFnpB,GAFTopB,EAAYD,EAAWhtB,MAAM,IACjC,IAAIitB,EACA,IAASppB,EAAI,EAAGA,EAAIopB,EAAUtsB,OAAQkD,IACd,QAAhBopB,EAAUppB,KACVopB,EAAUppB,GAAKopB,EAAUppB,GAAG3D,QAAQ,8BAA+B,SAI/E,OAAO+sB,GAAUhtB,KAAK,KAAKC,QAAQ,SAAU,oBAAoBqP,MAAM,OAE3E2d,iBAAkB,SAAUlc,GACxB,MAAO,mCAAmC/N,KAAK+N,EAAEmY,OAAOgE,UAE5DC,mBAAoB,SAAU1D,GAC1B,IAAK,GAAI7lB,GAAI,EAAGwpB,EAAMpsB,GAAMipB,QAAQvpB,OAAQkD,EAAIwpB,EAAKxpB,IACjD6lB,EAASzoB,GAAMipB,QAAQrmB,GAE3B5C,IAAMkpB,2BAA2BtZ,KAAK6Y,IAE1C4D,aAAc,SAAUC,EAAStlB,GAC7B,GAAIulB,GAAU9tB,EAAO8tB,SAChBvsB,GAAMwsB,aAAiC,IAAXD,GAA0BA,EAAQE,KAC/DF,EAAQvlB,GAAQ,OAAOslB,MAI/Bxf,EAASX,EAAW3D,QACpBC,KAAM,SAAU5I,EAASqI,GAAnB,GAKEwkB,GAJAhe,EAAO5G,IACX4G,GAAK7O,QAAUG,GAAM2sB,OAAO9sB,GAAS0P,QAAQb;AAC7CA,EAAKke,QAAQ,OAAQ1kB,GACrBiE,EAAWJ,GAAGtD,KAAKwH,KAAKvB,GACpBge,EAAaxkB,EAAUA,EAAQwkB,WAAa,KAC5CA,IACAxkB,EAAUM,MAAWN,GAAWwkB,iBAEpCxkB,EAAUwG,EAAKxG,QAAUM,IAAO,KAAUkG,EAAKxG,QAASA,GACpDwkB,IACAxkB,EAAQwkB,WAAaA,GAEpBhe,EAAK7O,QAAQmL,KAAKhL,GAAMgL,KAAK,UAC9B0D,EAAK7O,QAAQmL,KAAKhL,GAAMgL,KAAK,SAAU9C,EAAQ8O,MAAQ,IAAIpS,eAE/D8J,EAAK7O,QAAQyD,KAAK,QAAU4E,EAAQqY,OAASrY,EAAQ8O,KAAMtI,GAC3DA,EAAKQ,KAAKR,EAAKc,OAAQtH,IAE3BsH,UACAtH,SAAWqY,OAAQ,IACnBsM,kBAAmB,WACf,QAAS/kB,KAAKjI,QAAQ,GAAGitB,oBAE7BC,UAAW,SAAU7E,GACjBA,EAASA,GAAUpgB,KAAK3G,OACxB,IAAItB,GAAUiI,KAAKjI,QAASmtB,EAAW,WAAYC,EAAW/E,EAAOld,KAAKgiB,IAAantB,EAAQmL,KAAKgiB,EACpGntB,GAAQqtB,WAAWF,GACnB9E,EAAOld,KAAKgiB,EAAWzP,MAAM0P,GAAuB,EAAXA,IAE7CE,WAAY,SAAUjlB,GAClBJ,KAAKslB,WAAWllB,GAChB1J,EAAEgK,OAAOV,KAAKI,QAASA,IAE3BklB,WAAY,SAAUllB,GAElB,IADA,GAAuD6H,GAAnDrB,EAAO5G,KAAMrC,EAAM,EAAG/F,EAASgP,EAAKc,OAAO9P,OACxC+F,EAAM/F,EAAQ+F,IACjBsK,EAAIrB,EAAKc,OAAO/J,GACZiJ,EAAKxG,QAAQ6H,IAAM7H,EAAQ6H,IAC3BrB,EAAKiB,OAAOI,EAAGrB,EAAKxG,QAAQ6H,GAGpCrB,GAAKQ,KAAKR,EAAKc,OAAQtH,IAE3B6gB,OAAQ,SAAUsE,GACd,GAAIxnB,GAAOiC,KAAKwlB,UAAWC,EAAczlB,KAAK0lB,OAC1CH,IAAUxnB,EAAK9E,MAAQ,GAAK8E,EAAK7E,OAAS,MAAQusB,GAAe1nB,EAAK9E,QAAUwsB,EAAYxsB,OAAS8E,EAAK7E,SAAWusB,EAAYvsB,WACjI8G,KAAK0lB,MAAQ3nB,EACbiC,KAAK2lB,QAAQ5nB,EAAMwnB,GACnBvlB,KAAKgI,QAAQ,SAAUjK,KAG/BynB,QAAS,WACL,MAAOttB,IAAM0tB,WAAW5lB,KAAKjI,UAEjCgG,KAAM,SAAUA,GACZ,MAAKA,IAGDiC,KAAK6lB,QAAQ9nB,GAAbiC,GAFOA,KAAKwlB,WAKpBK,QAASnvB,EAAEkK,KACX+kB,QAASjvB,EAAEkK,KACXklB,QAAS,WACL,GAAIlf,GAAO5G,IACX4G,GAAK7O,QAAQguB,WAAW,QAAUnf,EAAKxG,QAAQqY,OAAS7R,EAAKxG,QAAQ8O,MACrEtI,EAAK7O,QAAQguB,WAAW,WACxBnf,EAAKiB,UAETme,SAAU,WACNhmB,KAAK8lB,WAEThB,QAAS,aAETmB,mBAAoB,SAAUtF,GAC1B3gB,KAAKkmB,aAAc,EACnBvF,EAASxY,KAAKnI,MACdA,KAAKkmB,aAAc,KAGvBjhB,GAAkBD,EAAOtE,QACzBylB,UAAW,WACP,MAAOnmB,MAAK4kB,WAAWwB,YAE3BC,cAAe,SAAUC,GACrB,GAAI1f,GAAO5G,IACX4G,GAAKke,QAAQwB,EAAK,WACd,OACIC,SAAU3f,EAAK4f,QACfhrB,KAAM9E,EAAEsc,IAAIpM,EAAKuf,YAAa,SAAUM,GACpC,OAASA,SAAUA,WAMvCvuB,GAAM0tB,WAAa,SAAU7tB,EAAS6tB,GAClC,GAAIc,GAAa3uB,EAAQ,EAIzB,OAHI6tB,IACA7tB,EAAQE,IAAI2tB,IAGZ3sB,MAAOytB,EAAW3O,YAClB7e,OAAQwtB,EAAWC,eAG3BzuB,GAAM0uB,OAAShmB,GACX4B,GAAiB,aAAcJ,GAAa,oDAAqDC,GAAmB,wCAAyCN,GAAa,WAyC9K7J,GAAM2uB,WAAa,SAAU9uB,EAASqI,EAAS0mB,GAA5B,GACX9nB,GAAQ8C,EAAQkB,EAAQrF,EAAK/F,EAAQmsB,EAAMnmB,EAAOgnB,EAAYmC,EAAUC,EAiBxExrB,EAA0ByrB,EAMrBloB,CAfT,IAPK+nB,EAEMA,EAAMA,QACbA,EAAQA,EAAMA,OAFdA,EAAQ5uB,GAAMmpB,GAAGyF,MAIrB/uB,EAAUA,EAAQmvB,SAAWnvB,EAAUA,EAAQ,GAC/CgsB,EAAOhsB,EAAQiK,aAAa,QAAU9J,GAAM+J,GAAK,QACjD,CAGA8kB,EAAWhD,EAAK7lB,QAAQ,UAEpB8E,EADA+jB,EACSD,EAAM/C,GAEN7rB,GAAMorB,OAAOS,GAAMptB,GAE5B6E,EAAO9E,EAAEqB,GAASyD,OAAQyrB,EAAYjkB,EAAS,QAAUA,EAAOiB,GAAG7D,QAAQqY,OAASzV,EAAOiB,GAAG7D,QAAQ8O,KAAO,GAE7G8X,EADAD,EACsBhrB,OAAO,WAAagoB,EAAO,IAAK,KAEhChoB,OAAO,IAAMkrB,EAAY,IAAK,IAExD,KAASloB,IAAOvD,GACZ,GAAIuD,EAAIzG,MAAM0uB,GAAkB,CAC5B,GAAIjoB,IAAQkoB,EAGR,MAAOzrB,GAAKuD,EAFZC,GAASxD,EAAKuD,GAM1B,GAAKiE,EAAL,CAYA,IATA4hB,EAAa/iB,EAAY9J,EAAS,cAClCqI,EAAU1J,EAAEgK,UAAW6B,EAAaxK,EAASiL,EAAOiB,GAAG7D,SAAUA,GAC7DwkB,IAEIxkB,EAAQwkB,iBADDA,KAAepkB,GACDtI,GAAMorB,OAAOsB,GAAYjuB,GAEzBiuB,GAGxBjnB,EAAM,EAAG/F,EAASoL,EAAOiB,GAAGyD,OAAO9P,OAAQ+F,EAAM/F,EAAQ+F,IAC1DmE,EAASkB,EAAOiB,GAAGyD,OAAO/J,GAC1BC,EAAQiE,EAAY9J,EAAS+J,GACzBlE,IAAUhH,IACVwJ,EAAQ0B,GAAU5J,GAAMorB,OAAO1lB,GAAOjH,GAQ9C,OALKqI,GAEOtI,EAAEywB,cAAc/mB,IACxBpB,EAAOqmB,WAAWjlB,GAFlBpB,EAAS,GAAIgE,GAAOjL,EAASqI,GAI1BpB,KAEX9G,GAAMkvB,oBAAsB,SAAUC,GAClC,GAAgB1pB,GAAK/F,EAAjBkvB,IAOJ,KANKO,EAAW,KACZA,GACInvB,GAAMmpB,GACNnpB,GAAMqpB,QAAQF,KAGjB1jB,EAAM,EAAG/F,EAASyvB,EAAWzvB,OAAQ+F,EAAM/F,EAAQ+F,IACpDmpB,EAAMnpB,GAAO0pB,EAAW1pB,GAAKmpB,KAEjC,OAAOpmB,IAAOoG,MAAM,UAAWoP,OAAO4Q,EAAMxmB,aAEhDpI,GAAMyI,KAAO,SAAU5I,GACnB,GAAI+uB,GAAQ5uB,GAAMkvB,oBAAoB5gB,GAAM2B,KAAKpN,UAAW,GAC5DrE,GAAEqB,GAASuvB,KAAK,SAAWpvB,GAAM+J,GAAK,SAAS2B,UAAUlG,KAAK,WAC1DxF,GAAM2uB,WAAW7mB,QAAU8mB,MAGnC5uB,GAAM4tB,QAAU,SAAU/tB,GACtBrB,EAAEqB,GAASuvB,KAAK,SAAWpvB,GAAM+J,GAAK,SAAS2B,UAAUlG,KAAK,WAAA,GAEjDqB,GADLvD,EAAO9E,EAAEsJ,MAAMxE,MACnB,KAASuD,IAAOvD,GACiB,IAAzBuD,EAAIb,QAAQ,gBAAyB1C,GAAKuD,GAAK+mB,UAAY3f,IAC3D3K,EAAKuD,GAAK+mB,aAe1B5tB,GAAM+oB,OAAS,SAAUlpB,EAASwtB,GAAnB,GAKPgC,GAJApG,EAAUzqB,EAAEqB,GAASuvB,KAAK,SAAWpvB,GAAM+J,GAAK,SAAS2B,UAAUC,OAAOd,EACzEoe,GAAQvpB,SAGT2vB,EAAe7wB,EAAE8wB,UAAUrG,GAC/BoG,EAAavJ,KAAKrb,GAClBjM,EAAEgH,KAAK6pB,EAAc,WACjB,GAAIvkB,GAAS9K,GAAMuvB,eAAe/wB,EAAEsJ,MAChCgD,IACAA,EAAOie,OAAOsE,OAI1BrtB,GAAMqK,aAAeA,EACrB7B,GAAOxI,GAAMmpB,IACTrc,OAAQA,EACRC,gBAAiBA,GACjB6hB,SACAY,SAAU,SAAUC,EAAWxH,GAC3B,GAAkG9hB,GAAOupB,EAAWC,EAAkBC,EAAlIC,EAAOJ,EAAUL,KAAK,mBAAoBnvB,EAAUD,GAAMC,QAASoB,EAAUpB,EAAQoB,OACrF4mB,GACK4H,EAAKnwB,SACNyG,EAAQlG,EAAQkG,MAAMspB,GACtBC,EAAYvpB,EAAQ,QAAU,OAC9BypB,EAAsBH,EAAUvpB,aAChCypB,EAAmBtuB,EAAQ+E,QAAUD,EAAYspB,EAAU,GAAGjpB,YAAcipB,EAAU1uB,QAAU,EAAI6uB,EAAsB,EAC1HC,EAAOrxB,EAAE,4DAAkEwB,GAAMmpB,GAAGqG,SAAShG,SAASsG,QAAU,6EAAiF/uB,MAAM,QAAQC,OAAO,QAAQjB,IAAI,MAAO0vB,EAAUhoB,aAAa1H,IAAI2vB,EAAWhpB,KAAKC,IAAIipB,GAAuBD,GAAkBI,UAAUN,IAExUI,GACPA,EAAKG,UAGbC,OAAQ,SAAUnlB,EAAQolB,EAAU3P,GAA5B,GAC+B6K,GAO/B+E,EAMKvtB,EAAOwpB,EAbZpV,EAAOlM,EAAOiB,GAAG7D,QAAQ8O,IAa7B,KAZAkZ,EAAWA,GAAYlwB,GAAMmpB,GAC7B5I,EAASA,GAAU,GACnB2P,EAASlZ,GAAQlM,EACjBolB,EAAStB,MAAM5X,EAAKpS,eAAiBkG,EACrCsgB,EAAS,WAAa7K,EAASvJ,EAC/BA,EAAO,QAAUuJ,EAASvJ,EACtBmZ,GACAnZ,KAAMA,EACNlM,OAAQA,EACRyV,OAAQA,GAAU,IAEtBvgB,GAAMipB,QAAQrZ,KAAKugB,GACVvtB,EAAI,EAAGwpB,EAAMpsB,GAAMkpB,2BAA2BxpB,OAAQkD,EAAIwpB,EAAKxpB,IACpE5C,GAAMkpB,2BAA2BtmB,GAAGutB,EAExC3xB,GAAEuN,GAAGiL,GAAQ,SAAU9O,GACnB,GAAkBkoB,GAAd1qB,EAAQoC,IAuBZ,cAtBWI,KAAYI,IACnB8nB,EAAO9hB,GAAM2B,KAAKpN,UAAW,GAC7BiF,KAAKtC,KAAK,WACN,GAAiC6qB,GAAQvpB,EAArCgE,EAAStM,EAAE8E,KAAKwE,KAAMkP,EAC1B,KAAKlM,EACD,KAAU8F,OAAM5Q,GAAM6Q,OAAO,2DAA8D3I,EAAS8O,GAGxG,IADAqZ,EAASvlB,EAAO5C,SACLmoB,KAAWpiB,GAClB,KAAU2C,OAAM5Q,GAAM6Q,OAAO,kCAAqC3I,EAAS8O,GAG/E,IADAlQ,EAASupB,EAAOzhB,MAAM9D,EAAQslB,GAC1BtpB,IAAWpI,EAEX,MADAgH,GAAQoB,GACD,KAIfgB,KAAKtC,KAAK,WACN,MAAO,IAAIsF,GAAOhD,KAAMI,KAGzBxC,GAEXlH,EAAEuN,GAAGiL,GAAMlM,OAASA,EACpBtM,EAAEuN,GAAGqf,GAAU,WACX,MAAOtjB,MAAKxE,KAAK0T,OAI7BhX,GAAMmpB,GAAGqG,SAAShG,UAAasG,QAAS,cACpC9iB,IACAkC,KAAM,WACF,MAAOpH,OAEXwoB,YAAY,EACZpoB,YAEA+E,GAAeH,EAAOtE,QACtBC,KAAM,SAAU5I,EAASqI,GACrB4E,EAAOf,GAAGtD,KAAKwH,KAAKnI,KAAMjI,EAASqI,GACnCJ,KAAKjI,QAAQ0wB,cACbzoB,KAAK3G,QAAU2G,KAAKjI,QACpBiI,KAAKjI,QAAQuC,SAAS,cAE1BwrB,QAAS,WACL9gB,EAAOf,GAAG6hB,QAAQ3d,KAAKnI,MACvBA,KAAKjI,QAAQ2wB,gBAEjBtoB,SAAWqY,OAAQ,UACnB/Q,UACAihB,KAAM,WACF,GAAIC,GAAc5oB,KAAKjI,QAAQkgB,QAAQ/f,GAAM4rB,aAAa,mCAC1D,OAAO5rB,IAAMuvB,eAAemB,EAAa1wB,GAAMopB,OAAOD,KAAOnc,IAEjE2jB,uBAAwB,WACpB,GAAIF,GAAO3oB,KAAK2oB,MAChB,OAAOA,IAAQA,EAAKvoB,QAAQ0oB,oBAEhCnB,UAAW,WACP,GAAI5vB,GAAUiI,KAAKjI,QAAQkgB,QAAQ/f,GAAM4rB,aAAa,0CACtD,OAAO5rB,IAAMuvB,eAAe1vB,EAAQgxB,GAAG,GAAI7wB,GAAMopB,OAAOD,KAAOnc,MAGvExE,GAAOxI,GAAMopB,QACT3gB,KAAM,SAAU5I,GACZG,GAAMyI,KAAK5I,EAASG,GAAMopB,OAAOD,GAAInpB,GAAMmpB,GAAInpB,GAAMqpB,QAAQF,KAEjE2H,wBAAyB,WACrB,MAAO9wB,IAAMopB,OAAO2H,aAAe/wB,GAAMopB,OAAO2H,YAAY7oB,SAAWlI,GAAMopB,OAAO2H,YAAY7oB,QAAQ0oB,oBAE5GhC,SACAzF,IACIrc,OAAQG,GACRF,gBAAiBA,GAAgBvE,OAAOyE,GAAa4B,WACrD+f,SACAqB,OAAQ,SAAUnlB,GACd9K,GAAMmpB,GAAG8G,OAAOnlB,EAAQ9K,GAAMopB,OAAOD,GAAI,cAIrDzmB,EAAW1C,GAAMqpB,SACb5gB,KAAM,SAAU5I,GACZG,GAAMyI,KAAK5I,EAASG,GAAMqpB,QAAQF,KAEtCA,IACIyF,SACAoC,UACAC,SACAhB,OAAQ,SAAUnlB,GACd9K,GAAMmpB,GAAG8G,OAAOnlB,EAAQ9K,GAAMqpB,QAAQF,MAG9CyF,WAEJ5uB,GAAMkxB,cAAgB,SAAU7C,EAAUnmB,GAKtC,MAJKA,KACDA,MAEJA,EAAQipB,WAAY,EACb3yB,EAAE6vB,GAAUvT,IAAI,SAAUrV,EAAK5F,GAElC,MADAA,GAAUrB,EAAEqB,MACRI,GAAQ4mB,sBAAuB7mB,GAAMopB,OAAOD,GAAGiI,UAAavxB,EAAQyD,KAAK,0BACzEzD,EAAQwxB,oBAAoBnpB,GACrBrI,EAAQyD,KAAK,0BAIzB,IAEPtD,GAAMiM,eAAiB,SAAU8D,GAC7BA,EAAE9D,kBAENjM,GAAMuvB,eAAiB,SAAU1vB,EAASyxB,GAAnB,GACuC1uB,GAAGlD,EAwBjDoL,EAEI/B,EA1BZ8iB,EAAOhsB,EAAQyD,KAAKtD,GAAM+J,GAAK,QAASkf,IAC5C,IAAI4C,EAAM,CAIN,GAHa,YAATA,IACAA,EAAO,YAEPyF,EACA,GAAIA,EAAO,GACP,IAAK1uB,EAAI,EAAGlD,EAAS4xB,EAAO5xB,OAAQkD,EAAIlD,EAAQkD,IAC5CqmB,EAAQrZ,KAAK0hB,EAAO1uB,GAAGgsB,MAAM/C,QAGjC5C,GAAQrZ,KAAK0hB,EAAO1C,MAAM/C,QAG9B5C,IACIjpB,GAAMmpB,GAAGyF,MAAM/C,GACf7rB,GAAMqpB,QAAQF,GAAGyF,MAAM/C,GACvB7rB,GAAMopB,OAAOD,GAAGyF,MAAM/C,GAM9B,KAHIA,EAAK7lB,QAAQ,MAAQ,IACrBijB,GAAWjpB,GAAMorB,OAAOS,GAAMptB,KAE7BmE,EAAI,EAAGlD,EAASupB,EAAQvpB,OAAQkD,EAAIlD,EAAQkD,IAE7C,GADIkI,EAASme,EAAQrmB,GACjBkI,IACI/B,EAAWlJ,EAAQyD,KAAK,QAAUwH,EAAOiB,GAAG7D,QAAQqY,OAASzV,EAAOiB,GAAG7D,QAAQ8O,OAE/E,MAAOjO,KAM3B/I,GAAMuxB,SAAW,SAAU9I,GACvB,GAAIlZ,GAAUkZ,CAOd,OANIxoB,IAAQgf,SAASyC,UACjBnS,EAAU,WACNiiB,WAAW/I,EAAU,OAG7BjqB,EAAEC,GAAQ+O,GAAGvN,GAAQ8oB,OAAQxZ,GACtBA,GAEXvP,GAAMyxB,aAAe,SAAUhJ,GAC3BjqB,EAAEC,GAAQizB,IAAIzxB,GAAQ8oB,OAAQN,IAElCzoB,GAAM2xB,UAAY,SAAU9xB,EAASgH,GACjC,MAAOhH,GAAQyD,KAAKtD,GAAM+J,GAAKlD,IAEnC7G,GAAM+T,MACF6d,OAAQ,EACRC,OAAQ,EACRC,QAAS,EACTC,UAAW,EACXC,SAAU,EACVC,OAAQ,EACRC,SAAU,GAWd1zB,EAAEgK,OAAOhK,EAAE+M,KAAK,MACZ4mB,eAAgB,SAAUtyB,GACtB,GAAI4F,GAAMjH,EAAEwM,KAAKnL,EAAS,WAC1B,OAAOoL,GAAUpL,GAAU0d,MAAM9X,IAAQA,SAG7CyH,IACA,YACA,YACA,aACA,aACA,YACA,WACA,UACA,SAEAC,GAA8B,oCAC9BC,IACAglB,eAAgB,WAAA,GAQR7iB,GAPA9J,EAAM,EAAG/F,EAASwN,GAAaxN,OAAQG,EAAUwF,SAASmC,eAC9D,KAAI4F,GAAqBilB,WAAcpyB,GAAQklB,aAkB/C,IAfA/X,GAAqBilB,WAAY,EACjCjlB,GAAqBklB,WAAY,EACjCllB,GAAqBmlB,cAAe,EAChChjB,EAAU,SAAUQ,GAChB3C,GAAqBmlB,eACN,UAAXxiB,EAAE/I,KACEoG,GAAqBklB,YAAc9zB,EAAEuR,EAAEmY,QAAQrmB,GAAGsL,MAClD4C,EAAE9D,iBACF8D,EAAEyiB,mBAGNziB,EAAEyiB,oBAIP/sB,EAAM/F,EAAQ+F,IACjB5F,EAAQulB,iBAAiBlY,GAAazH,GAAM8J,GAAS,IAG7DkjB,UAAW,SAAU1iB,GACjB3C,GAAqBmlB,cAAe,EAChCxiB,EAAEzM,KAAKgvB,YACPllB,GAAqBklB,WAAY,GAErCI,aAAatlB,GAAqBulB,qBAEtCC,YAAa,WACTF,aAAatlB,GAAqBulB,oBAClCvlB,GAAqBulB,mBAAqBnB,WAAW,WACjDpkB,GAAqBmlB,cAAe,EACpCnlB,GAAqBklB,WAAY,GAClC,OAGPjlB,IACAyZ,KAAM,uBACN+L,KAAM,sBACN9L,GAAI,+BACJ+L,OAAQ,0BAER7yB,GAAQggB,QAAUhgB,GAAQgf,SAASqD,KAAOriB,GAAQgf,SAASyC,SAC3DrU,IACIyZ,KAAM,aACN+L,KAAM,YACN9L,GAAI,uBACJ+L,OAAQ,eAEL7yB,GAAQoH,SACfgG,IACIyZ,KAAM,cACN+L,KAAM,cACN9L,GAAI,YACJ+L,OAAQ,8BAEL7yB,GAAQqH,aACf+F,IACIyZ,KAAM,gBACN+L,KAAM,gBACN9L,GAAI,cACJ+L,OAAQ,oCAGZ7yB,GAAQqH,YAAgB,oBAAsB7I,IAC9CD,EAAEgH,MACEutB,eAAgB,gBAChBC,eAAgB,gBACjB,SAAUC,EAAMC,GACf10B,EAAEiiB,MAAM0S,QAAQF,IACZG,aAAcF,EACdG,SAAUH,EACVI,OAAQ,SAAU7S,GACd,GAAI8S,GAAKrL,EAASpgB,KAAM0rB,EAAU/S,EAAMgT,cAAeC,EAAYjT,EAAMiT,SAMzE,OALKF,KAAWA,IAAYtL,GAAW1pB,EAAEoM,SAASsd,EAAQsL,MACtD/S,EAAMzZ,KAAO0sB,EAAUC,SACvBJ,EAAMG,EAAUnkB,QAAQX,MAAM9G,KAAMjF,WACpC4d,EAAMzZ,KAAOksB,GAEVK,MAKnBjmB,GAAc,SAAUyC,GACpB,MAAO1C,IAAS0C,IAAMA,GACvBxC,GAAa,WACpBvN,GAAM4zB,cAAgB,SAAUpkB,EAAQzF,GAKpC,MAJAyF,GAASA,EAAOvQ,QAAQsO,GAAYD,IAChCvD,IACAyF,EAASA,EAAOvQ,QAAQsO,GAAY,MAAQxD,IAEzCyF,GAEPhC,GAAKhP,EAAEuN,GAAGyB,GAIdhF,IAAO,EAAMoD,EAAapN,GAC1BoN,EAAYG,GAAKH,EAAYiD,UAAY,GAAIrQ,GAC7CoN,EAAYG,GAAGpI,YAAciI,EAC7BA,EAAYG,GAAGtD,KAAO,SAAUoD,EAAUC,GAItC,MAHIA,IAAWA,YAAmBtN,MAAOsN,YAAmBF,MACxDE,EAAUF,EAAYE,IAEnBtN,EAAEuN,GAAGtD,KAAKwH,KAAKnI,KAAM+D,EAAUC,EAAS2B,KAEnD7B,EAAYG,GAAGtD,KAAKoG,UAAYjD,EAAYG,GACxC0B,GAAa7B,EAAYvG,UAC7BmD,GAAOoD,EAAYG,IACfwD,QAAS,SAAUA,GAEf,MADAzH,MAAKxE,KAAK,UAAWiM,GACdzH,MAEXyoB,YAAa,SAAUxmB,GAEnB,MADAjC,MAAKxE,KAAK,UAAWyG,GAAM/J,GAAMyrB,QAC1B3jB,MAEX0F,GAAI,WAAA,GAKI1B,GAAgBskB,EAIhB3H,EAAkCjZ,EAG9B3D,EAA+CymB,EAXnD5jB,EAAO5G,KAAMiC,EAAK2E,EAAKpL,KAAK,UAChC,OAAyB,KAArBT,UAAUnD,OACH8N,GAAGyC,KAAKvB,EAAM7L,UAAU,KAE/BiJ,EAAU4C,EAAM0hB,EAAO9hB,GAAM2B,KAAKpN,iBAC3ButB,GAAKA,EAAK1wB,OAAS,KAAOwE,IACjCksB,EAAKyD,MAELpL,EAAW2H,EAAKA,EAAK1wB,OAAS,GAAI8P,EAASxP,GAAM4zB,cAAcxD,EAAK,GAAIrmB,GACxE9J,GAAQ6jB,sBAAwBtU,EAAOskB,OAAO,mBAAuBhsB,KAAK,KAAOzC,SAASmC,kBAC1F4F,GAAqBglB,iBACjBvmB,EAA2B,IAAhBukB,EAAK1wB,OAAe,KAAO0wB,EAAK,GAAIkC,EAAY9iB,EAAOxJ,QAAQ,aAAiBwJ,EAAOxJ,QAAQ,eAC9GwH,GAAGyC,KAAKnI,MACJisB,WAAY3mB,GAAqBqlB,UACjCuB,SAAU5mB,GAAqBwlB,aAChC/mB,GAAYymB,UAAWA,WAEnB7J,KAAangB,KACpBwD,EAAU4C,EAAKpL,KAAK,WACpBmlB,EAAW3c,EAAQ2c,GACnB2H,EAAKA,EAAK1wB,OAAS,GAAK,SAAUqQ,GAC9B0Y,EAASxY,KAAKnE,EAASiE,KAG/BqgB,EAAK,GAAK5gB,EACVhC,GAAGoB,MAAMF,EAAM0hB,GACR1hB,IAEX8hB,aAAc,SAAUzmB,GAKpB,MAJAA,GAAKA,GAAMjC,KAAKxE,KAAK,WACjByG,GACAjC,KAAK4pB,IAAI,IAAM3nB,GAEZjC,QAGf9H,GAAM2sB,OAAS/gB,EACf5L,GAAMqN,SAAWA,GACjBrN,GAAM0e,SAAW,WAwBb,QAASuV,GAAWpX,EAAMqX,GAA1B,GACQvgB,GACAwgB,EACAC,EACAtX,EAAQoX,EAAK,GACb1mB,EAAK0mB,EAAK,GACVG,EAAOH,EAAK,GACZI,EAAQJ,EAAK,EAIjB,OAHKI,KACDJ,EAAK,GAAKI,MAEVA,EAAMzX,GACCyX,EAAMzX,IAEZU,MAAM/P,GAEuB,IAAvBA,EAAGxH,QAAQ,SAClB2N,EAAO,GAAI7P,MAAKA,KAAK4X,IAAImB,EAAM7I,EAAO8I,GAAS,EAAG,EAAGuX,EAAK,GAAK,GAAIA,EAAK,GAAIA,EAAK,GAAI,IACrFF,EAAYpgB,EAAKvG,EAAG4O,OAAO,EAAG,IAC9BgY,EAASzgB,EAAK4gB,YACd5gB,EAAK6gB,WAAW7gB,EAAKhB,aAAewhB,EAAYC,GAAUD,EAAYC,EAAS,EAAI,KAC5E5mB,EAAGxH,QAAQ,OAAS,IAC3B2N,EAAO,GAAI7P,MAAKA,KAAK4X,IAAImB,EAAM7I,EAAO8I,GAAQtP,EAAG4O,OAAO,GAAIiY,EAAK,GAAIA,EAAK,GAAIA,EAAK,GAAI,IACvFF,EAAYpgB,EAAKvG,EAAG4O,OAAO,EAAG,IAC9BgY,EAASzgB,EAAK4gB,YACd5gB,EAAK6gB,WAAW7gB,EAAKhB,aAAewhB,EAAYC,GAAUD,EAAYC,EAAS,EAAI,KAVnFzgB,EAAO,GAAI7P,MAAKA,KAAK4X,IAAImB,EAAM7I,EAAO8I,GAAQtP,EAAI6mB,EAAK,GAAIA,EAAK,GAAIA,EAAK,GAAI,IAY1EC,EAAMzX,GAAQlJ,GAEzB,QAAS8gB,GAASC,EAASC,EAAOC,GAAlC,GAGYP,GACAntB,EAmBJ2V,EAgBAqX,CArCJ,QADAS,EAAQA,EAAMC,KAsBV/X,EAAO,GAAI/Y,MAAK4wB,GAASjiB,iBAC7BkiB,EAAQhI,OAAOkI,KAAKF,EAAO,SAAUT,GAAV,GACnBY,GAAOZ,EAAK,GACZa,EAAKb,EAAK,EACd,OAAOY,IAAQjY,IAASkY,GAAMlY,GAAQiY,GAAQjY,GAAc,QAANkY,GAAsB,OAANA,KAE1EJ,EAAM/kB,KAAK8kB,GACXC,EAAM7O,KAAK,SAAUpb,EAAGC,GAOpB,MANgB,gBAALD,KACPA,GAAWupB,EAAWpX,EAAMnS,IAEhB,gBAALC,KACPA,GAAWspB,EAAWpX,EAAMlS,IAEzBD,EAAIC,IAEXupB,EAAOS,EAAMhI,OAAO5hB,QAAQ2pB,EAASC,GAAS,IAAMA,EAAMA,EAAMj1B,OAAS,GACtE6d,MAAM2W,GAAQA,EAAO,OArCpBG,EAAOO,EAAK71B,MAAM,KAClBmI,EAAS,EACTmtB,EAAK30B,OAAS,IACdwH,EAAmB,GAAVmtB,EAAK,KAAiBA,EAAK,UAIpC,MACA,IACA,MACA,GAEI,EACA,EACA,GAEJntB,EACA,MAsBZ,QAAS8tB,GAASN,EAASO,EAAOvW,GAAlC,GAQajZ,GACDyvB,EAKJN,EAbAO,EAAYF,EAAMvW,EAItB,IAHyB,gBAAdyW,KACPA,EAAYF,EAAME,KAEjBA,EACD,KAAUvkB,OAAM,aAAe8N,EAAW,oEAE9C,KAASjZ,EAAM0vB,EAAUz1B,OAAS,EAAG+F,GAAO,IACpCyvB,EAAQC,EAAU1vB,GAAK,KACvByvB,GAASR,EAAUQ,IAFoBzvB,KAO/C,GADImvB,EAAOO,EAAU1vB,EAAM,IACtBmvB,EACD,KAAUhkB,OAAM,aAAe8N,EAAW,kBAAoBgW,EAAU,IAE5E,OAAOE,GAEX,QAASQ,GAAYV,EAASO,EAAON,EAAOjW,SAC7BgW,IAAWxmB,KAClBwmB,EAAU5wB,KAAK4X,IAAIgZ,EAAQjgB,cAAeigB,EAAQlgB,WAAYkgB,EAAQtgB,UAAWsgB,EAAQhgB,WAAYggB,EAAQ/f,aAAc+f,EAAQ9f,aAAc8f,EAAQ7f,mBAE7J,IAAI+f,GAAOI,EAASN,EAASO,EAAOvW,EACpC,QACIkW,KAAMA,EACNV,KAAMO,EAASC,EAASC,EAAOC,EAAK,KAG5C,QAAS1tB,GAAOwtB,EAAShW,GAAzB,GAIQ2W,GACAT,EACAV,CALJ,OAAgB,WAAZxV,GAAqC,WAAZA,EAClB,GAEP2W,EAAOD,EAAYV,EAAS5sB,KAAKmtB,MAAOntB,KAAK6sB,MAAOjW,GACpDkW,EAAOS,EAAKT,KACZV,EAAOmB,EAAKnB,KACTl0B,GAAMiK,WAAWiqB,EAAOU,EAAK,GAAKV,EAAK,GAAKU,EAAK,KAE5D,QAASrc,GAAKmc,EAAShW,GAAvB,GACQ2W,GAAOD,EAAYV,EAAS5sB,KAAKmtB,MAAOntB,KAAK6sB,MAAOjW,GACpDkW,EAAOS,EAAKT,KACZV,EAAOmB,EAAKnB,KACZzlB,EAAOmmB,EAAK,EAChB,OAAInmB,GAAKzI,QAAQ,MAAQ,EACdyI,EAAK1P,MAAM,KAAKm1B,IAASA,EAAK,GAAK,EAAI,GACvCzlB,EAAKzI,QAAQ,OAAS,EACtByI,EAAKxP,QAAQ,KAAOi1B,GAAmB,KAAXA,EAAK,GAAiBA,EAAK,GAAV,IAEjDzlB,EAEX,QAASkQ,GAAQhL,EAAM2hB,EAAYC,GAAnC,GAOQC,GAEAC,CACJ,cATWH,IAAchtB,KACrBgtB,EAAaxtB,KAAKZ,OAAOyM,EAAM2hB,UAExBC,IAAYjtB,KACnBitB,EAAWztB,KAAKZ,OAAOyM,EAAM4hB,IAE7BC,EAAkB7hB,EAAKqB,oBAC3BrB,EAAO,GAAI7P,MAAK6P,EAAK5P,UAAsC,KAAzBuxB,EAAaC,IAC3CE,EAAgB9hB,EAAKqB,oBAClB,GAAIlR,MAAK6P,EAAK5P,UAAgD,KAAnC0xB,EAAgBD,IAEtD,QAAS5mB,GAAM+E,EAAM+K,GACjB,MAAO5W,MAAK6W,QAAQhL,EAAMA,EAAKqB,oBAAqB0J,GAExD,QAASsR,GAAOrc,EAAM+K,GAClB,MAAO5W,MAAK6W,QAAQhL,EAAM+K,EAAU/K,EAAKqB,qBAE7C,QAAS0gB,GAAYrB,GACjB,MAAOvsB,MAAK8G,MAAM,GAAI9K,MAAKuwB,GAAO,WArKzB,GACTrgB,IACA2hB,IAAK,EACLC,IAAK,EACLC,IAAK,EACLC,IAAK,EACLC,IAAK,EACLC,IAAK,EACLC,IAAK,EACLC,IAAK,EACLC,IAAK,EACLC,IAAK,EACLC,IAAK,GACLC,IAAK,IAELviB,GACAwiB,IAAK,EACLC,IAAK,EACLC,IAAK,EACLC,IAAK,EACLC,IAAK,EACLC,IAAK,EACLC,IAAK,EAiJT,QACI5B,SACAN,SACAztB,OAAQA,EACRyX,QAASA,EACT/P,MAAOA,EACPohB,OAAQA,EACRzX,KAAMA,EACNmd,YAAaA,MAGrB11B,GAAM2T,KAAO,WAET,QAASoH,GAAUpH,EAAMqH,GACrB,MAAc,KAAVA,GAAmC,KAApBrH,EAAKe,aACpBf,EAAKsH,SAAStH,EAAKe,WAAa,IACzB,GAIf,QAASoiB,GAAanjB,EAAMoJ,EAAKga,GAC7B,GAAI/b,GAAQrH,EAAKe,UACjBqiB,GAAMA,GAAO,EACbha,GAAOA,EAAMpJ,EAAKW,SAAW,EAAIyiB,GAAO,EACxCpjB,EAAKqjB,QAAQrjB,EAAKS,UAAY2I,GAC9BhC,EAAUpH,EAAMqH,GAEpB,QAASic,GAAUtjB,EAAMoJ,EAAKga,GAG1B,MAFApjB,GAAO,GAAI7P,MAAK6P,GAChBmjB,EAAanjB,EAAMoJ,EAAKga,GACjBpjB,EAEX,QAASujB,GAAgBvjB,GACrB,MAAO,IAAI7P,MAAK6P,EAAKc,cAAed,EAAKa,WAAY,GAEzD,QAAS2iB,GAAexjB,GACpB,GAAIyjB,GAAO,GAAItzB,MAAK6P,EAAKc,cAAed,EAAKa,WAAa,EAAG,GAAItV,EAAQg4B,EAAgBvjB,GAAO0jB,EAAa3wB,KAAKC,IAAIywB,EAAKpiB,oBAAsB9V,EAAM8V,oBAIvJ,OAHIqiB,IACAD,EAAKnc,SAAS/b,EAAMwV,WAAa2iB,EAAa,IAE3CD,EAEX,QAASE,GAAoB3jB,EAAM4jB,GAC/B,MAAqB,KAAjBA,EACOC,EAAQP,EAAUtjB,EAAM4jB,MAAmB,GAE/CC,EAAQ7jB,EAAM,GAAKA,EAAKW,UAAY,IAE/C,QAASmjB,GAAe9jB,EAAM4jB,GAA9B,GACQG,GAAkB,GAAI5zB,MAAK6P,EAAKc,cAAe,EAAG,QAClDkjB,EAAUL,EAAoB3jB,EAAM4jB,GACpCK,EAAWD,EAAQ5zB,UAAY2zB,EAAgB3zB,UAC/CgQ,EAAOrN,KAAKpE,MAAMs1B,EAAWC,EACjC,OAAO,GAAInxB,KAAKpE,MAAMyR,EAAO,GAEjC,QAAS+jB,GAAWnkB,EAAM4jB,GAA1B,GACQQ,GAAeP,EAAQ7jB,MACvBqkB,EAAeR,EAAQ7jB,EAAM,GAC7BskB,EAAaR,EAAe9jB,EAAM4jB,EACtC,OAAmB,KAAfU,EACOR,EAAeM,EAAcR,GAAgB,EAErC,KAAfU,GAAqBR,EAAeO,EAAcT,GAAgB,EAC3D,EAEJU,EAEX,QAAS7jB,GAAQT,GAGb,MAFAA,GAAO,GAAI7P,MAAK6P,EAAKc,cAAed,EAAKa,WAAYb,EAAKS,UAAW,EAAG,EAAG,GAC3E2G,EAAUpH,EAAM,GACTA,EAEX,QAASukB,GAAUvkB,GACf,MAAO7P,MAAK4X,IAAI/H,EAAKc,cAAed,EAAKa,WAAYb,EAAKS,UAAWT,EAAKe,WAAYf,EAAKgB,aAAchB,EAAKiB,aAAcjB,EAAKkB,mBAErI,QAASA,GAAgBlB,GACrB,MAAOA,GAAK5P,UAAYqQ,EAAQT,GAEpC,QAASwkB,GAAczyB,EAAOoU,EAAKtZ,GAC/B,GAAgE43B,GAA5DC,EAAQxjB,EAAgBiF,GAAMwe,EAAQzjB,EAAgBrU,EAC1D,QAAKkF,GAAS2yB,GAASC,IAGnBxe,GAAOtZ,IACPA,GAAOq3B,GAEXO,EAAUvjB,EAAgBnP,GACtB2yB,EAAQD,IACRA,GAAWP,GAEXS,EAAQD,IACRC,GAAST,GAENO,GAAWC,GAASD,GAAWE,GAE1C,QAASC,GAAc7yB,EAAOoU,EAAKtZ,GAC/B,GAAkD43B,GAA9CC,EAAQve,EAAI/V,UAAWu0B,EAAQ93B,EAAIuD,SAKvC,OAJIs0B,IAASC,IACTA,GAAST,GAEbO,EAAU1yB,EAAM3B,UACTq0B,GAAWC,GAASD,GAAWE,EAE1C,QAASd,GAAQ7jB,EAAMzM,GACnB,GAAI8T,GAAQrH,EAAKe,UAIjB,OAHAf,GAAO,GAAI7P,MAAK6P,GAChB6kB,EAAQ7kB,EAAMzM,EAAS2wB,GACvB9c,EAAUpH,EAAMqH,GACTrH,EAEX,QAAS6kB,GAAQ7kB,EAAMsJ,EAAcwb,GAArC,GAEQC,GADAxxB,EAASyM,EAAKqB,mBAElBrB,GAAK6kB,QAAQ7kB,EAAK5P,UAAYkZ,GACzBwb,IACDC,EAAa/kB,EAAKqB,oBAAsB9N,EACxCyM,EAAK6kB,QAAQ7kB,EAAK5P,UAAY20B,EAAaC,IAGnD,QAAS1d,GAAStH,EAAM0gB,GAGpB,MAFA1gB,GAAO,GAAI7P,MAAK9D,GAAM2T,KAAKS,QAAQT,GAAM5P,UAAY/D,GAAM2T,KAAKkB,gBAAgBwf,IAChFtZ,EAAUpH,EAAM0gB,EAAK3f,YACdf,EAEX,QAASilB,KACL,MAAOxkB,GAAQ,GAAItQ,OAEvB,QAAS+0B,GAAQllB,GACb,MAAOS,GAAQT,GAAM5P,WAAa60B,IAAQ70B,UAE9C,QAAS+0B,GAAgBnlB,GACrB,GAAIolB,GAAa,GAAIj1B,MAAK,KAAM,EAAG,EAAG,EAAG,EAAG,EAI5C,OAHI6P,IACAolB,EAAW9d,SAAStH,EAAKe,WAAYf,EAAKgB,aAAchB,EAAKiB,aAAcjB,EAAKkB,mBAE7EkkB,EA3HX,GAAIJ,GAAgB,IAAOd,EAAa,KA6HxC,QACI9c,UAAWA,EACXkc,UAAWA,EACXH,aAAcA,EACd1iB,QAASA,EACTmkB,cAAeA,EACfJ,cAAeA,EACfU,QAASA,EACTG,QAAS,SAAUrlB,GACf,MAAO6jB,GAAQ7jB,EAAM,IAEzBslB,YAAa,SAAUtlB,GACnB,MAAO6jB,GAAQ7jB,OAEnBukB,UAAWA,EACXL,WAAYA,EACZqB,YAAa,GAAKP,EAClBA,cAAeA,EACfH,QAASA,EACTvd,SAAUA,EACVuc,QAASA,EACToB,MAAOA,EACPE,gBAAiBA,EACjB5B,gBAAiBA,EACjBC,eAAgBA,EAChBW,WAAYA,EACZjjB,gBAAiBA,MAGzB7U,GAAMm5B,gBAAkB,SAAUt5B,GAAV,GAEZu5B,GASKx2B,EACDy2B,CAXZ,IAAIh0B,SAASi0B,mBAIT,IAHIF,EAAW/zB,SAASi0B,mBAAmBz5B,EAAS05B,WAAWC,UAAW,SAAUC,GAChF,MAAOA,GAAKnT,YAAczmB,EAAU05B,WAAWG,cAAgBH,WAAWI,gBAC3E,GACIP,EAASQ,YACRR,EAASS,gBAAkBT,EAASS,cAAcC,YAAYC,QAC9DX,EAASS,cAAcvT,WAAWxG,YAAYsZ,EAASS,mBAI/D,KAASj3B,EAAI,EAAGA,EAAI/C,EAAQm6B,WAAWt6B,OAAQkD,IACvCy2B,EAAQx5B,EAAQm6B,WAAWp3B,GACT,GAAlBy2B,EAAMrK,UAAkB,KAAKhtB,KAAKq3B,EAAMY,aACxCp6B,EAAQigB,YAAYuZ,GACpBz2B,KAEkB,GAAlBy2B,EAAMrK,UACNhvB,GAAMm5B,gBAAgBE,IAKlC3rB,GAAiBjP,EAAOy7B,uBAAyBz7B,EAAO07B,6BAA+B17B,EAAO27B,0BAA4B37B,EAAO47B,wBAA0B57B,EAAO67B,yBAA2B,SAAU7R,GACvM+I,WAAW/I,EAAU,IAAO,KAEhCzoB,GAAM0N,eAAiB,SAAU+a,GAC7B/a,GAAeuC,KAAKxR,EAAQgqB,IAE5B9a,MACJ3N,GAAMu6B,eAAiB,SAAU9R,GAC7B9a,GAAeA,GAAejO,QAAU+oB,EACV,IAA1B9a,GAAejO,QACfM,GAAMw6B,oBAGdx6B,GAAMw6B,iBAAmB,WACrBx6B,GAAM0N,eAAe,WACbC,GAAe,KACfA,GAAeiM,UACXjM,GAAe,IACf3N,GAAMw6B,uBAKtBx6B,GAAMy6B,uBAAyB,SAAUxP,GAErC,IADA,GAAIyP,GAAczP,EAAIlsB,MAAM,KAAK,IAAM,GAAI47B,KAAaC,EAAaF,EAAY37B,MAAM,OAAQW,EAASk7B,EAAWl7B,OAAQ+F,EAAM,EAC1HA,EAAM/F,EAAQ+F,GAAO,EACA,KAApBm1B,EAAWn1B,KACXk1B,EAAOE,mBAAmBD,EAAWn1B,KAASo1B,mBAAmBD,EAAWn1B,EAAM,IAG1F,OAAOk1B,IAEX36B,GAAM86B,mBAAqB,SAAU/qB,GACjC,GAAyB,IAAdA,EAAEgrB,EAAEC,OACX,MAAO31B,UAASijB,iBAAiBvY,EAAEgrB,EAAEC,OAAQjrB,EAAEoJ,EAAE6hB,SAGzDh7B,GAAMi7B,YAAc,SAAUC,GAC1B,GAA2DC,GAAvDprB,EAAImrB,EAAY9S,cAAegT,EAASrrB,EAAEkrB,WAQ9C,OAPIlrB,GAAEsrB,YACED,IAAW18B,GAAa08B,KACxBD,EAAQprB,EAAEsrB,YAEPtrB,EAAEurB,QAAUvrB,EAAEwrB,OAASxrB,EAAEyrB,gBAChCL,EAAoB,IAAXprB,EAAEurB,QAERH,GAEXn7B,GAAMy7B,SAAW,SAAU1vB,EAAI2vB,GAAd,GACTC,GAKAC,EAJAC,EAAe,CACnB,QAAKH,GAASA,GAAS,EACZ3vB,GAEP6vB,EAAY,WAIZ,QAASzkB,KACLpL,EAAG6C,MAAMF,EAAM0hB,GACfyL,GAAgB,GAAI/3B,MANZ,GACR4K,GAAO5G,KACPg0B,GAAW,GAAIh4B,MAAS+3B,EACxBzL,EAAOvtB,SAKX,OAAKg5B,IAGDF,GACAjJ,aAAaiJ,GAEbG,EAAUJ,EACVvkB,IAEAwkB,EAAUnK,WAAWra,EAAMukB,EAAQI,GANvC,GAFW3kB,KAWfykB,EAAU9I,OAAS,WACfJ,aAAaiJ,IAEVC,IAEX57B,GAAM+7B,MAAQ,SAAUl8B,EAASkX,EAAOtX,GAA1B,GACNu8B,GAeY5S,EAyBA6S,EAA4CC,EAAgBC,EAvCxEC,EAAarlB,IAAUrY,CAO3B,IANIe,IAAQf,IACRe,EAAMsX,GAENlX,EAAQ,KACRA,EAAUA,EAAQ,KAElBu8B,IAAcv8B,EAAQuL,SAA1B,CAGA,IACQvL,EAAQq8B,iBAAmBx9B,EACvB09B,GACAv8B,EAAQw8B,QACJjT,EAASnpB,GAAQgf,SACjBmK,EAAO5H,IAAM4H,EAAO1H,QACpB8P,WAAW,WACP3xB,EAAQy8B,kBAAkBvlB,EAAOtX,IAClC,GAEHI,EAAQy8B,kBAAkBvlB,EAAOtX,IAGrCsX,GACIlX,EAAQq8B,eACRr8B,EAAQs8B,cAGT92B,SAASk3B,YACZ/9B,EAAEqB,GAASgC,GAAG,aACdhC,EAAQw8B,QAEZL,EAAen8B,EAAQ28B,kBACnBJ,GACAJ,EAAaS,UAAS,GACtBT,EAAaU,UAAU,YAAa3lB,GACpCilB,EAAaW,QAAQ,YAAal9B,EAAMsX,GACxCilB,EAAaY,WAETX,EAAkBD,EAAaa,YACnCb,EAAac,eAAez3B,SAASk3B,UAAUQ,cAAcC,eAC7Df,EAAgBgB,YAAY,aAAcjB,GAC1CE,EAAiBD,EAAgBiB,KAAKx9B,OACtCy8B,EAAeD,EAAiBF,EAAakB,KAAKx9B,OAClDqX,GACImlB,EACAC,KAId,MAAOpsB,GACLgH,KAEJ,MAAOA,KAEX/W,GAAMm9B,uBAAyB,SAAUt9B,EAASu9B,GAC9C,GAAIxQ,GAAUnuB,EAAOmuB,OAWrB,OAVA/sB,GAAQmL,KAAK,QAAUhL,GAAM+J,GAAK,OAAQlK,EAAQ,GAAGqsB,QAAQtnB,cAAc3F,QAAQ,gBAAiB,IAAIA,QAAQ,IAAK,KACrH2tB,EAAQ/sB,QAAQA,GAASw9B,WAAWC,QAChC,WACA,SAAUC,GACNA,EAAS19B,GAASu9B,GACb,qBAAqBp7B,KAAKo7B,EAAMI,UACjCJ,EAAMK,aAIXz9B,GAAMuvB,eAAe1vB,EAASG,GAAMopB,OAAOD,KAEtDnpB,GAAM09B,kBAAoB,WACtB,GAAIC,MAAaC,EAAap/B,EAAE,0CAA0CwM,KAAK,WAAY6yB,EAAar/B,EAAE,iDAAiDwM,KAAK,UAOhK,OANAxM,GAAE,6CAA+CgH,KAAK,WAClDm4B,EAAO71B,KAAKkP,MAAQlP,KAAKpC,QAEzBm4B,IAAen/B,GAAak/B,IAAel/B,IAC3Ci/B,EAAOE,GAAcD,GAElBD,GAEX39B,GAAM89B,UAAY,SAAUC,GAGxB,QAAS1B,GAAM91B,GACX,GAAIuE,GAAS9K,GAAMuvB,eAAehpB,EAC9BuE,IAAUA,EAAOuxB,MACjBvxB,EAAOuxB,QAEP91B,EAAG81B,QARG,GACV2B,GAAeD,EAAK3O,KAAK,oBAAoBlwB,QAC7C++B,EAAcF,EAAK3O,KAAK,qBAAqBgI,MASjD6G,GAAYzwB,GAAG,UAAW,SAAUuC,GAC5BA,EAAEmuB,SAAWl+B,GAAMypB,KAAKI,KAAQ9Z,EAAEouB,WAClCpuB,EAAE9D,iBACFowB,EAAM2B,MAGdA,EAAaxwB,GAAG,UAAW,SAAUuC,GAC7BA,EAAEmuB,SAAWl+B,GAAMypB,KAAKI,KAAO9Z,EAAEouB,WACjCpuB,EAAE9D,iBACFowB,EAAM4B,OAIjB,WACG,QAASG,GAAYC,EAASC,EAAUC,EAAUC,GAAlD,GAQQjuB,GAGKyG,EAVL+mB,EAAOv/B,EAAE,UAAUwM,MACnByzB,OAAQF,EACRlO,OAAQ,OACRnI,OAAQsW,IAERl7B,EAAOtD,GAAM09B,mBACjBp6B,GAAKg7B,SAAWA,EACZ/tB,EAAQ8tB,EAAQt/B,MAAM,YAC1BuE,EAAKo7B,YAAcnuB,EAAM,GAAGtR,QAAQ,QAAS,IAC7CqE,EAAKq7B,OAASpuB,EAAM,EACpB,KAASyG,IAAQ1T,GACTA,EAAKkB,eAAewS,IACpBxY,EAAE,WAAWwM,MACTtF,MAAOpC,EAAK0T,GACZA,KAAMA,EACNhQ,KAAM,WACP43B,SAASb,EAGpBA,GAAKa,SAAS,QAAQC,SAAS7O,SAInC,QAAS8O,GAAWT,EAASC,GAA7B,GAGY/tB,GACAmuB,EACAC,EACAxjB,EACK1V,EANTs5B,EAAOV,CACX,IAAsB,gBAAXA,GAAqB,CAK5B,IAJI9tB,EAAQ8tB,EAAQt/B,MAAM,YACtB2/B,EAAcnuB,EAAM,GACpBouB,EAASK,KAAKzuB,EAAM,IACpB4K,EAAQ,GAAI8jB,YAAWN,EAAOj/B,QACzB+F,EAAM,EAAGA,EAAMk5B,EAAOj/B,OAAQ+F,IACnC0V,EAAM1V,GAAOk5B,EAAOvtB,WAAW3L,EAEnCs5B,GAAO,GAAIG,OAAM/jB,EAAMgkB,SAAWn4B,KAAM03B,IAE5C1b,UAAUoc,WAAWL,EAAMT,GAE/B,QAASe,GAAchB,EAASC,GACxB7/B,EAAOygC,MAAQb,YAAmBa,QAClCb,EAAUiB,IAAIC,gBAAgBlB,IAElCmB,EAAUC,SAAWnB,EACrBkB,EAAUn0B,KAAOgzB,CACjB,IAAItuB,GAAI1K,SAASq6B,YAAY,cAC7B3vB,GAAE4vB,eAAe,SAAS,GAAM,EAAOlhC,EAAQ,EAAG,EAAG,EAAG,EAAG,GAAG,GAAO,GAAO,GAAO,EAAO,EAAG,MAC7F+gC,EAAUI,cAAc7vB,GACxByhB,WAAW,WACP8N,IAAIO,gBAAgBxB,KAjD/B,GAuBOmB,GAAYn6B,SAASma,cAAc,KACnCsgB,EAAoB,YAAcN,KAAcx/B,GAAMC,QAAQoB,QAAQ2iB,IA4B1EhkB,IAAM+/B,OAAS,SAAU73B,GACrB,GAAI83B,GAAO5B,CACNl2B,GAAQ+3B,aACLH,EACAE,EAAOX,EACArc,UAAUoc,aACjBY,EAAOlB,IAGfkB,EAAK93B,EAAQm2B,QAASn2B,EAAQo2B,SAAUp2B,EAAQq2B,SAAUr2B,EAAQs2B,iBAG1Ex+B,GAAMkgC,kBAAoB,SAA2B58B,GACjD,GAAI68B,KAYJ,OAXArxB,QAAO2a,KAAKnmB,OAAY88B,QAAQ,SAAUp9B,GACtC8L,OAAOuxB,eAAeF,EAAYn9B,GAC9BuoB,IAAK,WACD,MAAOjoB,GAAKN,IAEhBwoB,IAAK,SAAU9lB,GACXpC,EAAKN,GAAY0C,EACjBpC,EAAKg9B,OAAQ,OAIlBH,IAEbxT,OAAQluB,QACHA,OAAOuB,OACE,kBAAVzB,SAAwBA,OAAOgiC,IAAMhiC,OAAS,SAAUiiC,EAAIC,EAAIC,IACrEA,GAAMD,OAEV,SAAUniC,EAAGC,QACVA,OAAO,gBAAiB,cAAeD,IACzC,WAqaE,MA5ZC,UAAUE,EAAGE,GAEV,QAASiiC,GAAYC,EAAMC,GACvB,IAAKA,EACD,MAAOD,EAEPA,GAAO,MAAQC,IACfD,EAAOC,EAEX,IAAIC,GAAYj9B,OAAO,IAAMg9B,EAAY,IAIzC,OAHKC,GAAM9+B,KAAK4+B,KACZA,EAAOC,EAAa,IAAMD,GAEvBpd,EAASC,SAAW,MAAQD,EAASud,KAAO,IAAMH,GAAM3hC,QAAQ,SAAU,KAErF,QAAS+hC,GAAcC,GACnB,MAAOA,GAAO,KAAO,IAEzB,QAASC,GAAaF,GAClB,GAAI31B,GAAOmY,EAASnY,IACpB,OAAsB,OAAlB21B,GAA0B31B,EAAKrF,QAAQ,SAAaqF,EAAKrF,QAAQ,MAAQ,EAClE,KAEJqF,EAAKtM,MAAMiiC,GAAe,IAAM,GAE3C,QAASG,GAAUC,EAAMnW,GACrB,MAA0B,KAAtBA,EAAIjlB,QAAQo7B,GACLnW,EAAI7O,OAAOglB,EAAK1hC,QAAQT,QAAQ,QAAS,KAEzCgsB,EAoEf,QAASoW,GAAQpW,GACb,MAAOA,GAAIhsB,QAAQ,QAAS,KAEhC,QAASqiC,GAAQrW,GACb,MAAOA,GAAIhsB,QAAQ,YAAa,MArGvC,GACOe,GAAQvB,OAAOuB,MAAOuhC,EAAS,SAAUC,EAAO,OAAQC,EAAO,OAAQxhC,EAAUD,EAAMC,QAASujB,EAAW/kB,OAAO+kB,SAAUgD,EAAU/nB,OAAO+nB,QAASkb,EAAqB,GAAIC,EAAkB3hC,EAAMC,QAAQoB,QAAQgB,KAAMu/B,EAAY,MAAOv8B,EAAW5G,OAAO4G,SA+BlQw8B,EAAiB7hC,EAAMrB,MAAM6J,QAC7Bs5B,KAAM,WACEH,EACAnQ,WAAW,WACPhL,EAAQsb,SAGZtb,EAAQsb,QAGhBC,QAAS,WACDJ,EACAnQ,WAAW,WACPhL,EAAQub,YAGZvb,EAAQub,WAGhBriC,OAAQ,WACJ,MAAO8mB,GAAQ9mB,QAEnBsiC,gBAAiB,SAAU/W,GACvBzH,EAASvkB,QAAQgsB,MAGrBgX,EAAmBJ,EAAer5B,QAClCC,KAAM,SAAU24B,GACZt5B,KAAKs5B,KAAOA,GAEhBc,SAAU,SAAUnN,GAChBvO,EAAQD,aAAclhB,EAAS88B,MAAOxB,EAAY5L,EAAIjtB,KAAKs5B,QAE/DniC,QAAS,SAAU81B,GACfvO,EAAQ4b,gBAAiB/8B,EAAS88B,MAAOxB,EAAY5L,EAAIjtB,KAAKs5B,QAElEiB,UAAW,SAAUpX,GACjB,MAAOkW,GAAUr5B,KAAKs5B,KAAMnW,IAEhCxX,QAAS,WACL,GAAIA,GAAU+P,EAAS8e,QAIvB,OAHI9e,GAASsQ,SACTrgB,GAAW+P,EAASsQ,QAEjBqN,EAAUr5B,KAAKs5B,KAAM3tB,IAEhC8uB,OAAQ,SAAU9Z,GACdjqB,EAAEC,QAAQyQ,KAAK,iBAAkBuZ,IAErCb,KAAM,WACFppB,EAAEC,QAAQkR,OAAO,mBAErB6yB,iBAAkB,SAAUt6B,GACxB,GAAIu6B,GAAUrB,EAAOl5B,EAAQk5B,KAAMkB,EAAW9e,EAAS8e,SAAUI,EAAOxB,EAAaF,EAAc94B,EAAQy6B,UACvGvB,KAASkB,EAAW,MACpBG,EAAWrB,GAEXA,IAASkB,GAAYI,IACrBD,EAAW9B,EAAY+B,EAAKzjC,QAAQ2iC,EAAW,IAAKR,IAEpDqB,GACAjc,EAAQD,aAAclhB,EAAS88B,MAAOM,MAU9CG,EAAcf,EAAer5B,QAC7BC,KAAM,SAAUw4B,GACZn5B,KAAK+6B,IAAM7iC,EAAMyrB,OACjB3jB,KAAKyY,OAASygB,EAAcC,GAC5Bn5B,KAAKorB,IAAM+N,EAAOK,EAAUD,GAEhCa,SAAU,SAAUnN,GAChBvR,EAASkf,KAAO56B,KAAKorB,IAAI6B,IAE7B91B,QAAS,SAAU81B,GACfjtB,KAAKk6B,gBAAgBl6B,KAAKorB,IAAI6B,KAElCsN,UAAW,SAAUpX,GACjB,MAAIA,GAAIjlB,QAAQ8B,KAAKyY,QAAU,EACpB0K,EAEAA,EAAIlsB,MAAM+I,KAAKyY,QAAQ,IAGtCgiB,OAAQ,SAAU9Z,GACVxoB,EAAQwmB,WACRjoB,EAAEC,QAAQ+O,GAAG,cAAgB1F,KAAK+6B,IAAKpa,GAEvC3gB,KAAKg7B,UAAYC,YAAYta,EAAUiZ,IAG/C9Z,KAAM,WACFppB,EAAEC,QAAQizB,IAAI,cAAgB5pB,KAAK+6B,KACnCG,cAAcl7B,KAAKg7B,YAEvBrvB,QAAS,WACL,MAAOytB,GAAap5B,KAAKyY,SAE7BiiB,iBAAkB,SAAUt6B,GACxB,GAAIo6B,GAAW9e,EAAS8e,SAAUlB,EAAOl5B,EAAQk5B,IACjD,UAAIl5B,EAAQqe,WAAa6a,IAASkB,KAC9Bx6B,KAAKk6B,gBAAgBZ,EAAOt5B,KAAKyY,OAAS4gB,EAAUC,EAAMkB,KACnD,MAKfW,EAAUjjC,EAAMmM,WAAW3D,QAC3BuO,MAAO,SAAU7O,GAOb,GANAA,EAAUA,MACVJ,KAAKoH,MACDqyB,EACAC,EACAC,GACDv5B,IACCJ,KAAKo7B,SAAT,CAGAp7B,KAAKo7B,UAAW,EAChBh7B,EAAQk5B,KAAOl5B,EAAQk5B,MAAQ,GAC/B,IAA2C3tB,GAAvC0vB,EAAUr7B,KAAKs7B,cAAcl7B,EAC7Bi7B,GAAQX,iBAAiBt6B,KAG7BuL,EAAU0vB,EAAQ1vB,UAClBjV,EAAEgK,OAAOV,MACLq7B,QAASA,EACT/B,KAAMl5B,EAAQk5B,KACdiC,cAAeF,EAAQzjC,SACvB+T,QAASA,EACT6vB,WAAY7vB,KAEhB0vB,EAAQZ,OAAO/jC,EAAEsP,MAAMhG,KAAM,iBAEjCs7B,cAAe,SAAUl7B,GACrB,MAAOjI,GAAQsmB,WAAare,EAAQqe,UAAY,GAAI0b,GAAiB/5B,EAAQk5B,MAAQ,GAAIwB,GAAY16B,EAAQy6B,WAEjH/a,KAAM,WACG9f,KAAKo7B,WAGVp7B,KAAKq7B,QAAQvb,OACb9f,KAAK6H,OAAO4xB,GACZz5B,KAAKo7B,UAAW,IAEpBX,OAAQ,SAAU9Z,GACd3gB,KAAKoH,KAAKqyB,EAAQ9Y,IAEtBxpB,QAAS,SAAU81B,EAAIwO,GACnBz7B,KAAK07B,UAAUzO,EAAIwO,EAAQ,SAAUJ,GACjCA,EAAQlkC,QAAQ81B,GAChBjtB,KAAKw7B,UAAUx7B,KAAKw7B,UAAU5jC,OAAS,GAAKoI,KAAK2L,WAGzDyuB,SAAU,SAAUnN,EAAIwO,GACpB,MAAW,WAAPxO,GACAjtB,KAAK27B,YAAa,EAClB37B,KAAKq7B,QAAQrB,OACb,IAEJh6B,KAAK07B,UAAUzO,EAAIwO,EAAQ,SAAUJ,GACjCA,EAAQjB,SAASnN,GACjBjtB,KAAKw7B,UAAU1zB,KAAK9H,KAAK2L,WAF7B3L,IAKJ07B,UAAW,SAAUzO,EAAIwO,EAAQ9a,GAC7B,GAAI0a,GAAUr7B,KAAKq7B,OAEnB,OADApO,GAAKoO,EAAQd,UAAUtN,GACnBjtB,KAAK2L,UAAYshB,GAAMjtB,KAAK2L,UAAYonB,mBAAmB9F,IAC3DjtB,KAAKgI,QAAQ2xB,GACb,KAEC8B,GACGz7B,KAAKgI,QAAQyxB,GACTtW,IAAK8J,EACL2O,QAAQ,MAKpB57B,KAAK2L,QAAUshB,EACftM,EAASxY,KAAKnI,KAAMq7B,GACpBr7B,KAAKu7B,cAAgBF,EAAQzjC,UAV7B,IAYJikC,UAAW,WACP,GAAIR,GAAUr7B,KAAKq7B,QAAS1vB,EAAU0vB,EAAQ1vB,UAAWmwB,EAAYT,EAAQzjC,SAAUmkC,EAAuB/7B,KAAKu7B,gBAAkBO,EAAW9B,EAAOruB,IAAY3L,KAAKw7B,UAAUx7B,KAAKw7B,UAAU5jC,OAAS,IAAMmkC,EAAsBJ,EAAa37B,KAAK27B,WAAYK,EAAOh8B,KAAK2L,OAChR,OAAgB,QAAZA,GAAoB3L,KAAK2L,UAAYA,GAAW3L,KAAK2L,UAAYonB,mBAAmBpnB,KAGxF3L,KAAKu7B,cAAgBO,EACrB97B,KAAK27B,YAAa,EAClB37B,KAAK2L,QAAUA,EACXquB,GAAQh6B,KAAKgI,QAAQ,QACjBmb,IAAK6Y,EACL/O,GAAIthB,KAER0vB,EAAQpB,UACRj6B,KAAK2L,QAAUqwB,EACf,GAEAh8B,KAAKgI,QAAQyxB,GACTtW,IAAKxX,EACLswB,mBAAoBN,KAEpB3B,EACAqB,EAAQpB,WAERoB,EAAQrB,OACRh6B,KAAKu7B,iBAETv7B,KAAK2L,QAAUqwB,EACf,IAEAhC,EACAh6B,KAAKw7B,UAAUzP,MAEf/rB,KAAKw7B,UAAU1zB,KAAK6D,GAHxB,MAORzT,GAAMijC,QAAUA,EAChBjjC,EAAMijC,QAAQpB,eAAiBA,EAC/B7hC,EAAMijC,QAAQL,YAAcA,EAC5B5iC,EAAMijC,QAAQhB,iBAAmBA,EACjCjiC,EAAM2gC,YAAcA,EACpB3gC,EAAMwmB,QAAU,GAAIyc,IACtBxkC,OAAOuB,MAAM2sB,QACd,WAEG,QAASqX,GAAkB5jC,EAAO6jC,GAC9B,MAAOA,GAAW7jC,EAAQ,UAE9B,QAAS8jC,GAAcC,EAAOC,GAC1B,MAAWvgC,QAAO,IAAMsgC,EAAMllC,QAAQolC,EAAc,QAAQplC,QAAQqlC,EAAe,WAAWrlC,QAAQslC,EAAYP,GAAmB/kC,QAAQulC,EAAY,SAAW,IAAKJ,EAAa,IAAM,IAEhM,QAASK,GAASxZ,GACd,MAAOA,GAAIhsB,QAAQ,gBAAiB,IAT3C,GACOe,GAAQvB,OAAOuB,MAAOwmB,EAAUxmB,EAAMwmB,QAASra,EAAanM,EAAMmM,WAAYu4B,EAAO,OAAQC,EAAgB,eAAgBpD,EAAS,SAAUC,EAAO,OAAQC,EAAO,OAAQ6C,EAAgB,aAAcC,EAAa,eAAgBC,EAAa,SAAUH,EAAe,2BAU/QO,EAAQ5kC,EAAMrB,MAAM6J,QACpBC,KAAM,SAAU07B,EAAO1b,EAAU2b,GACvBD,YAAiBtgC,UACnBsgC,EAAQD,EAAcC,EAAOC,IAEjCt8B,KAAKq8B,MAAQA,EACbr8B,KAAK+8B,UAAYpc,GAErBA,SAAU,SAAUwC,EAAK6W,EAAM4B,GAC3B,GAAI/I,GAAiBj7B,EAAT+F,EAAM,EAAWq/B,EAAoB9kC,EAAMy6B,uBAAuBxP,EAK9E,IAJA6Z,EAAkBC,MAAQjD,EAC1B7W,EAAMwZ,EAASxZ,GACf0P,EAAS7yB,KAAKq8B,MAAMhtB,KAAK8T,GAAK3c,MAAM,GACpC5O,EAASi7B,EAAOj7B,OACZgkC,EACA,KAAOj+B,EAAM/F,EAAQ+F,IACU,SAAhBk1B,EAAOl1B,KACdk1B,EAAOl1B,GAAOo1B,mBAAmBF,EAAOl1B,IAIpDk1B,GAAO/qB,KAAKk1B,GACZh9B,KAAK+8B,UAAUj2B,MAAM,KAAM+rB,IAE/BqK,UAAW,SAAU/Z,EAAK6W,EAAM4B,GAC5B,QAAI57B,KAAKq8B,MAAMniC,KAAKyiC,EAASxZ,MACzBnjB,KAAK2gB,SAASwC,EAAK6W,EAAM4B,IAClB,MAMfuB,EAAS94B,EAAW3D,QACpBC,KAAM,SAAUP,GACPA,IACDA,MAEJiE,EAAWJ,GAAGtD,KAAKwH,KAAKnI,MACxBA,KAAKo9B,UACLp9B,KAAKye,UAAYre,EAAQqe,UACzBze,KAAK66B,SAAWz6B,EAAQy6B,SACxB76B,KAAKs5B,KAAOl5B,EAAQk5B,KACpBt5B,KAAKs8B,WAAal8B,EAAQk8B,cAAe,EACzCt8B,KAAKoH,MACDw1B,EACAC,EACApD,EACAE,GACDv5B,IAEP0lB,QAAS,WACLpH,EAAQ7W,OAAO4xB,EAAQz5B,KAAKq9B,kBAC5B3e,EAAQ7W,OAAO8xB,EAAM35B,KAAKs9B,YAC1B5e,EAAQ7W,OAAO6xB,EAAM15B,KAAKu9B,YAC1Bv9B,KAAK6H,UAEToH,MAAO,WAAA,GAgBCuuB,GAfA52B,EAAO5G,KAAMy9B,EAAY,WACrB72B,EAAK82B,SACNC,EAAY,SAAU11B,GACrBrB,EAAKq2B,MAAMh1B,IACZ21B,EAAkB,SAAU31B,GAC3BrB,EAAKi3B,YAAY51B,GAEzByW,GAAQzP,OACJ6uB,KAAML,EACNhD,OAAQmD,EACR5D,KAAM2D,EACNlf,UAAW7X,EAAK6X,UAChBoc,SAAUj0B,EAAKi0B,SACfvB,KAAM1yB,EAAK0yB,OAEXkE,GACAra,IAAKzE,EAAQ/S,SAAW,IACxBxH,eAAgBzN,EAAEkK,MAEjBgG,EAAKoB,QAAQ40B,EAAMY,IACpB52B,EAAKi3B,YAAYL,GAErBx9B,KAAKq9B,iBAAmBO,EACxB59B,KAAKu9B,WAAaI,GAEtBtB,MAAO,SAAUA,EAAO1b,GACpB3gB,KAAKo9B,OAAOt1B,KAAK,GAAIg1B,GAAMT,EAAO1b,EAAU3gB,KAAKs8B,cAErDlC,SAAU,SAAUjX,EAAKsY,GACrBvjC,EAAMwmB,QAAQ0b,SAASjX,EAAKsY,IAEhCtkC,QAAS,SAAUgsB,EAAKsY,GACpBvjC,EAAMwmB,QAAQvnB,QAAQgsB,EAAKsY,IAE/BwB,MAAO,SAAUh1B,GACTjI,KAAKgI,QAAQ0xB,GACTvW,IAAKlb,EAAEkb,IACP8J,GAAIhlB,EAAEglB,MAEVhlB,EAAE9D,kBAGVu5B,MAAO,WACH19B,KAAKgI,QAAQ2xB,IAEjBkE,YAAa,SAAU51B,GAAV,GAeLtK,GAASy/B,EAAsBf,EAAOzkC,EAdtCurB,EAAMlb,EAAEkb,IACRyY,EAA6B,SAAb3zB,EAAE2zB,OAClB5B,EAAO/xB,EAAEg0B,iBAIb,IAHK9Y,IACDA,EAAM,KAENnjB,KAAKgI,QAAQyxB,GACTtW,IAAKlb,EAAEkb,IACP0P,OAAQ36B,EAAMy6B,uBAAuB1qB,EAAEkb,KACvC8Y,kBAAmBjC,IAGvB,WADA/xB,GAAE9D,gBAIN,KADIxG,EAAM,EAAGy/B,EAASp9B,KAAKo9B,OAAexlC,EAASwlC,EAAOxlC,OACnD+F,EAAM/F,EAAQ+F,IAEjB,GADA0+B,EAAQe,EAAOz/B,GACX0+B,EAAMa,UAAU/Z,EAAK6W,EAAM4B,GAC3B,MAGJ57B,MAAKgI,QAAQ60B,GACT1Z,IAAKA,EACL0P,OAAQ36B,EAAMy6B,uBAAuBxP,GACrC8Y,kBAAmBjC,KAEvB/xB,EAAE9D,mBAIdjM,GAAMilC,OAASA,KAEZxmC,OAAOuB,OACE,kBAAVzB,SAAwBA,OAAOgiC,IAAMhiC,OAAS,SAAUiiC,EAAIC,EAAIC,IACrEA,GAAMD,OAEV,SAAUniC,EAAGC,QACVA,OAAO,oBAAqB,cAAeD,IAC7C,WAgcE,MAxbC,UAAUE,EAAGE,GASV,QAASmnC,GAAWC,EAAQC,GACxB,GAAIC,GAAKF,EAAO/K,EAAEvX,SAAUyiB,EAAKH,EAAO3sB,EAAEqK,SAAU0iB,EAAKH,EAAOhL,EAAEvX,SAAU2iB,EAAKJ,EAAO5sB,EAAEqK,SAAU4iB,EAAKJ,EAAKE,EAAIG,EAAKJ,EAAKE,CAC5H,QACIG,QACIvL,GAAIiL,EAAKE,GAAM,EACf/sB,GAAI8sB,EAAKE,GAAM,GAEnBI,SAAU7/B,KAAK8/B,KAAKJ,EAAKA,EAAKC,EAAKA,IAG3C,QAASI,GAAW12B,GAChB,GAA6FrQ,GAAQ2oB,EAAgBpI,EAAjHkI,KAAcC,EAAgBrY,EAAEqY,cAAese,EAAgB32B,EAAE22B,cAAejhC,EAAM,CAC1F,IAAIsK,EAAE42B,IACFxe,EAAQvY,MACJ+b,GAAI,EACJlL,MAAO1Q,EACPmY,OAAQnY,EAAEmY,OACVwe,cAAe32B,EAAEmY,OACjB1E,SAAUzT,EACV/I,KAAM,YAEP,IAAI+I,EAAE/I,KAAK5G,MAAM,SAEpB,IADAioB,EAAiBD,EAAgBA,EAAcC,kBAC1C3oB,EAAS2oB,EAAe3oB,OAAQ+F,EAAM/F,EAAQ+F,IAC/Cwa,EAAQoI,EAAe5iB,GACvB0iB,EAAQvY,MACJ4T,SAAUvD,EACVQ,MAAO1Q,EACPmY,OAAQjI,EAAMiI,OACdwe,cAAeA,EACf/a,GAAI1L,EAAM2mB,WACV5/B,KAAM,cAIdmhB,GAAQvY,KADD3P,EAAQoH,UAAYpH,EAAQqH,YAE/Bkc,SAAU4E,EACV3H,MAAO1Q,EACPmY,OAAQnY,EAAEmY,OACVwe,cAAeA,EACf/a,GAAIvD,EAAcye,UAClB7/B,KAAM,YAIN2kB,GAAI,EACJlL,MAAO1Q,EACPmY,OAAQnY,EAAEmY,OACVwe,cAAeA,EACfljB,SAAUzT,EACV/I,KAAM,SAGd,OAAOmhB,GAmIX,QAAS2e,GAAgBre,GAErB,IADA,GAAIse,GAAa/mC,EAAMqN,SAAS0Z,GAAGhoB,MAAM,KAAM0G,EAAM,EAAG/F,EAASqnC,EAAWrnC,OACrE+F,EAAM/F,EAAQ+F,IACjBgjB,EAASse,EAAWthC,IApM/B,GACOzF,GAAQvB,OAAOuB,MAAOC,EAAUD,EAAMC,QAAStB,EAAQqB,EAAMrB,MAAOwN,EAAanM,EAAMmM,WAAY66B,EAAMxoC,EAAEwoC,IAAKx+B,EAAShK,EAAEgK,OAAQy+B,EAAKhnC,EAAQgf,SAAUioB,EAAoBD,GAAMA,EAAGvlB,QAASylB,EAAmB,IAAKC,EAAoBnnC,EAAQoB,QAAQgB,KAAO,EAAI,EAAGglC,EAAQ,QAASC,EAAO,OAAQC,EAAS,SAAUC,EAAQ,QAASC,EAAO,OAAQrd,EAAM,MAAOsd,EAAS,SAAUC,EAAM,MAAOC,EAAU,UAAWC,EAAe,eAAgBC,EAAgB,gBAAiBC,EAAa,aAAcC,EAAa,aACvgBC,GACAtB,IAAO,EACP1mB,MAAS,EACTioB,MAAS,EACTC,QAAW,GAEXC,GAAyBnoC,EAAQggB,OAAShgB,EAAQ6jB,qBAwDlDukB,EAAY1pC,EAAM6J,QAClBC,KAAM,SAAU8yB,EAAM/X,GAClB,GAAI9U,GAAO5G,IACX4G,GAAK6sB,KAAOA,EACZ7sB,EAAK45B,oBAAoB9kB,GACzB9U,EAAK65B,cAAgB75B,EAAK8U,SAC1B9U,EAAK85B,SAAW95B,EAAKysB,MAAQ,EAC7BzsB,EAAK+5B,UAAYzB,KAErBnU,KAAM,SAAUrP,GACZ,GAAI9U,GAAO5G,KAAMZ,EAASsc,EAAS,OAAS9U,EAAK6sB,MAAOkN,EAAYzB,IAAO0B,EAAYD,EAAY/5B,EAAK+5B,WAAa,GAChHvhC,GAAUggC,IAGfx4B,EAAKysB,MAAQj0B,EAASwH,EAAK8U,SAC3B9U,EAAK45B,oBAAoB9kB,GACzB9U,EAAKi6B,aAAezhC,EAASwH,EAAK65B,cAClC75B,EAAK85B,SAAW95B,EAAKysB,MAAQuN,EAC7Bh6B,EAAK+5B,UAAYA,IAErBH,oBAAqB,SAAU9kB,GAC3B,GAAI9U,GAAO5G,KAAMyzB,EAAO7sB,EAAK6sB,IAC7B7sB,GAAK8U,SAAWA,EAAS,OAAS+X,GAClC7sB,EAAKssB,OAASxX,EAAS,SAAW+X,GAClC7sB,EAAKkS,OAAS4C,EAAS,SAAW+X,MAGtCqN,EAAQjqC,EAAM6J,QACdC,KAAM,SAAUogC,EAAY3gB,EAAQ4gB,GAChCtgC,EAAOV,MACHizB,EAAG,GAAIsN,GAAU,IAAKS,EAAUtlB,UAChCrK,EAAG,GAAIkvB,GAAU,IAAKS,EAAUtlB,UAChCxc,KAAM8hC,EAAU9hC,KAChB+hC,cAAeF,EAAWE,cAC1BpjB,UAAWkjB,EAAWljB,WAAasiB,EAAUa,EAAU9hC,MACvD6hC,WAAYA,EACZ3gB,OAAQA,EACRwe,cAAeoC,EAAUpC,cACzBsC,aAAcF,EAAU5gB,OACxByD,GAAImd,EAAUnd,GACdsd,WAAYH,EACZI,QAAQ,EACRC,WAAW,KAGnBC,MAAO,WACHthC,KAAKuhC,aAAe7X,WAAWhzB,EAAEsP,MAAMhG,KAAM,SAAUA,KAAK+gC,WAAWS,SACvExhC,KAAKyhC,SAASlC,EAAOv/B,KAAKmhC,aAE9BO,MAAO,WACH1hC,KAAKyhC,SAASjC,EAAMx/B,KAAKmhC,aAE7BpW,KAAM,SAAUiW,GACZ,GAAIp6B,GAAO5G,IACX,KAAI4G,EAAKy6B,UAAT,CAKA,GAFAz6B,EAAKqsB,EAAElI,KAAKiW,EAAUtlB,UACtB9U,EAAKyK,EAAE0Z,KAAKiW,EAAUtlB,WACjB9U,EAAKw6B,OAAQ,CACd,GAAIx6B,EAAK+6B,yBACL,MAEJ,IAAKC,EAAWj2B,SAAWi2B,EAAWj2B,UAAY/E,EAAKm6B,WAGnD,MAAOn6B,GAAKi7B,SAFZj7B,GAAKk7B,OAAOd,GAKfp6B,EAAKy6B,WACNz6B,EAAK66B,SAAS9B,EAAMqB,KAG5BrpC,IAAK,SAAUqpC,GACXhhC,KAAK+hC,QAAU7C,IACXl/B,KAAKqhC,YAGTrhC,KAAKqhC,WAAY,EACjBrhC,KAAKyhC,SAAS3B,EAASkB,GACnBhhC,KAAKohC,OACLphC,KAAKyhC,SAASnf,EAAK0e,GAEdhhC,KAAKihC,eACNjhC,KAAKyhC,SAAS5B,EAAKmB,GAG3BpW,aAAa5qB,KAAKuhC,cAClBvhC,KAAK6hC,YAETA,QAAS,WACL,GAAId,GAAa/gC,KAAK+gC,WAAYiB,EAAgBjB,EAAW1gB,OAC7DrgB,MAAKqhC,WAAY,EACjBrhC,KAAKmhC,WAAa,KAClBvW,aAAa5qB,KAAKuhC,cAClBS,EAAc55B,OAAO1R,EAAEuM,QAAQjD,KAAMgiC,GAAgB,IAEzDC,KAAM,WACFjiC,KAAK6hC,WAET7W,OAAQ,WACJhrB,KAAK6hC,WAETK,QAAS,WACL,MAAOliC,MAAKohC,QAEhBU,OAAQ,SAAUd,GACdpW,aAAa5qB,KAAKuhC,cAClBvhC,KAAKmiC,UAAYjD,IACjBl/B,KAAKohC,QAAS,EACdphC,KAAKyhC,SAAS/B,EAAOsB,IAEzBS,SAAU,SAAUvyB,EAAM8xB,GACtB,GAAIp6B,GAAO5G,KAAMozB,EAAc4N,EAAUroB,MAAOnd,GACxC2c,MAAOvR,EACPqsB,EAAGrsB,EAAKqsB,EACR5hB,EAAGzK,EAAKyK,EACR+O,OAAQxZ,EAAKwZ,OACbzH,MAAOya,EAEXxsB,GAAKm6B,WAAWna,OAAO1X,EAAM1T,IAC7B43B,EAAYjvB,kBAGpBw9B,uBAAwB,WACpB,GAAIS,GAASpiC,KAAKizB,EAAE4N,aAAcwB,EAASriC,KAAKqR,EAAEwvB,YAClD,OAAOjiC,MAAK8/B,KAAK0D,EAASA,EAASC,EAASA,IAAWriC,KAAK6d,aAShE+jB,EAAav9B,EAAW3D,QACxBC,KAAM,SAAU5I,EAASqI,GAAnB,GACeyD,GAoCTy+B,EAAkCC,EApCtC37B,EAAO5G,KAAciC,EAAK/J,EAAMyrB,MACpCvjB,GAAUA,MACVyD,EAAS+C,EAAK/C,OAASzD,EAAQyD,OAC/B+C,EAAKiX,UAAYzd,EAAQyd,WAAayhB,EACtC14B,EAAK46B,QAAUphC,EAAQohC,SAAWnC,EAClCz4B,EAAKyZ,WACLzZ,EAAK47B,YAAcpiC,EAAQqiC,WAAa,EAAI,EAC5C77B,EAAK87B,eAAiBtiC,EAAQsiC,eAC9B97B,EAAK+7B,iBAAmBviC,EAAQuiC,iBAChC/7B,EAAKq6B,eAAiB7gC,EAAQwiC,UAAYzqC,EAAQ4jB,eAClDnV,EAAKi8B,QAAU5gC,EACflK,EAAUrB,EAAEqB,GAAS0P,QAAQb,GAC7BvC,EAAWJ,GAAGtD,KAAKwH,KAAKvB,GACxBlG,EAAOkG,GACH7O,QAASA,EACT+qC,QAAmDpsC,EAA1C0J,EAAQ2iC,QAAUzC,EAA0BvoC,EAAQ,GAAGirC,cAActjC,gBAAqBU,EAAQ0iC,SAAW/qC,GACtH2yB,gBAAiBtqB,EAAQsqB,gBACzBuY,SAAS,IAEbr8B,EAAKk8B,QAAQr7B,QAAQb,GAAMlB,GAAGxN,EAAM4zB,cAAc,OAAQ7pB,GAAK,SAASyD,GAAGxN,EAAM4zB,cAAc,YAAa7pB,GAAK,QACjHlK,EAAQ2N,GAAGxN,EAAM4zB,cAAc,OAAQ7pB,GAAK4B,EAAQ,UAChD+C,EAAKq6B,eACLlpC,EAAQ2N,GAAGxN,EAAM4zB,cAAc,QAAS7pB,GAAK4B,EAAQ,WAErD1L,EAAQoH,UAAYpH,EAAQqH,cACxBrH,EAAQoB,QAAQkB,QAAU,GAC1B1C,EAAQE,IAAI,mBAAoB,8BAEhCF,EAAQE,IAAI,eAAgBmI,EAAQ8iC,aAAe,SAGvD9iC,EAAQ+iC,kBACRprC,EAAQ2N,GAAGxN,EAAM4zB,cAAc,YAAa7pB,GAAK/J,EAAMiM,gBAE3DpM,EAAQ2N,GAAGxN,EAAM4zB,cAAc,YAAa7pB,GAAK4B,GAAUy1B,KAAMvhC,GAAW,WACxE6O,EAAK+7B,kBAAoBxqC,EAAQklB,eAC7BilB,EAAiB17B,EAAKk8B,QAAQ,GAAIP,EAAuB7rC,EAAEsP,MAAMY,EAAKw8B,gBAAiBx8B,GAC3Fo4B,EAAgB,SAAU33B,GACtBi7B,EAAehlB,iBAAiBjW,EAAWk7B,GAAsB,MAGzE37B,EAAKQ,MACDm4B,EACAC,EACAK,EACAH,EACAC,EACArd,EACAwd,EACAF,EACAG,EACAC,EACAC,EACAC,EACAT,GACDr/B,IAEPgjC,gBAAiB,SAAUn7B,GACnBjI,KAAKqjC,YACLp7B,EAAE9D,kBAGV2hB,QAAS,WAAA,GAOGwc,GANJ17B,EAAO5G,IACP4G,GAAK08B,aAGT18B,EAAK08B,YAAa,EACd18B,EAAK+7B,kBAAoBxqC,EAAQklB,eAC7BilB,EAAiB17B,EAAKk8B,QAAQ,GAClC9D,EAAgB,SAAU33B,GACtBi7B,EAAeiB,oBAAoBl8B,EAAWT,EAAKw8B,oBAG3Dx8B,EAAK7O,QAAQ2wB,aAAa9hB,EAAKi8B,SAC/Bj8B,EAAKk8B,QAAQpa,aAAa9hB,EAAKi8B,SAC/Bj8B,EAAK7O,QAAQguB,WAAW,WACxBnf,EAAKk8B,QAAQ/c,WAAW,WACxBnf,EAAK48B,cACL58B,EAAKiB,eACEjB,GAAKk8B,cACLl8B,GAAK7O,cACL6O,GAAKg4B,gBAEhB6E,QAAS,WACL7B,EAAWj2B,QAAU3L,MAEzBgrB,OAAQ,WACJhrB,KAAKwjC,cACLxjC,KAAKgI,QAAQ43B,IAEjBhZ,OAAQ,SAAUvf,EAAW7L,GACzB,GAAIoL,GAAO5G,KAAMqgB,EAAUzZ,EAAKyZ,OAChC,IAAIrgB,KAAK0jC,gBAAiB,CACtB,OAAQr8B,GACR,IAAKs4B,GACDt4B,EAAY24B,CACZ,MACJ,KAAK1d,GACDjb,EAAY44B,CACZ,MACJ,KAAKJ,GACDx4B,EAAY64B,EAGhBx/B,EAAOlF,GAAQ6kB,QAASA,GAAW0d,EAAW1d,EAAQ,GAAIA,EAAQ,KAEtE,MAAOrgB,MAAKgI,QAAQX,EAAW3G,EAAOlF,GAAQ0D,KAAMmI,MAExDi6B,MAAO,SAAUrO,EAAG5hB,EAAG+O,GACnBpgB,KAAK2jC,SAAS,SAAU1Q,EAAG5hB,EAAG+O,IAElC2K,KAAM,SAAUkI,EAAG5hB,GACfrR,KAAK2jC,SAAS,QAAS1Q,EAAG5hB,IAE9B1Z,IAAK,SAAUs7B,EAAG5hB,GACdrR,KAAK2jC,SAAS,OAAQ1Q,EAAG5hB,IAE7BqyB,cAAe,WACX,MAAO1jC,MAAKqgB,QAAQzoB,OAAS,GAEjCgsC,mBAAoB,WAChB,MAAO5jC,MAAKqgB,QAAQzoB,QAAUoI,KAAKwiC,aAEvCgB,YAAa,WAET,IADA,GAAInjB,GAAUrgB,KAAKqgB,QACZA,EAAQzoB,OAAS,GACpByoB,EAAQ0L,MAAM8V,WAGtBwB,SAAU,WACN,MAAO3sC,GAAEq2B,KAAK/sB,KAAKqgB,QAAS,SAAUlI,GAClC,MAAOA,GAAM+pB,YACdtqC,QAEPisC,QAAS,SAAU57B,GACVjI,KAAK0iC,iBAAkB1iC,KAAKgI,QAAQy3B,GAAU9mB,MAAO1Q,KACtDA,EAAE9D,kBAGV29B,OAAQ,SAAU75B,GACd,GAAgDmY,GAA0DjI,EAAtGvR,EAAO5G,KAAMrC,EAAM,EAAGkG,EAAS+C,EAAK/C,OAAgBwc,EAAUse,EAAW12B,GAAIrQ,EAASyoB,EAAQzoB,OAAeksC,EAAQ77B,EAAE67B,KAC3H,MAAIA,GAASA,EAAQ,GAAKl9B,EAAKg9B,sBAQ/B,IALAhC,EAAWj2B,QAAU,KACrB/E,EAAKg4B,cAAgB32B,EAAE22B,cACnBh4B,EAAK8jB,iBACLziB,EAAEyiB,kBAEC/sB,EAAM/F,IACLgP,EAAKg9B,qBADQjmC,IAIjBwa,EAAQkI,EAAQ1iB,GAEZyiB,EADAvc,EACSnN,EAAEyhB,EAAMymB,eAERh4B,EAAK7O,QAEbqoB,EAAOxoB,SAGZugB,EAAQ,GAAI2oB,GAAMl6B,EAAMwZ,EAAQjI,GAChCvR,EAAKyZ,QAAQvY,KAAKqQ,GAClBA,EAAMmpB,QACF16B,EAAK88B,iBACL98B,EAAKggB,OAAO,qBAIxBmd,MAAO,SAAU97B,GACbjI,KAAKgkC,WAAW,OAAQ/7B,IAE5Bg8B,KAAM,SAAUh8B,GACZjI,KAAKgkC,WAAW,MAAO/7B,IAE3Bi8B,OAAQ,SAAUj8B,GACd,GAAIzM,IACA2c,OACI+oB,aAAcj5B,EAAEmY,OAChBA,OAAQ1pB,EAAEuR,EAAE22B,eACZmD,QAAS7C,IACTjM,GACIvX,SAAUzT,EAAEk8B,MACZjR,OAAQjrB,EAAEwY,SAEdpP,GACIqK,SAAUzT,EAAEm8B,MACZlR,OAAQjrB,EAAEyY,UAGlBuS,EAAGhrB,EAAEk8B,MACL9yB,EAAGpJ,EAAEm8B,MACLhkB,OAAQ1pB,EAAEuR,EAAE22B,eACZjmB,MAAO1Q,EACP/I,KAAM,MAENc,MAAKgI,QAAQ,MAAOxM,IACpByM,EAAE9D,kBAGV6/B,WAAY,SAAUK,EAAYp8B,GAC9B,GAAmFtK,GAAKwa,EAAO6oB,EAAWsD,EAAtG19B,EAAO5G,KAAMukC,KAAWlkB,EAAUse,EAAW12B,GAAI+5B,EAAgBp7B,EAAKyZ,OAC1E,KAAK1iB,EAAM,EAAGA,EAAMqkC,EAAcpqC,OAAQ+F,IACtCwa,EAAQ6pB,EAAcrkC,GACtB4mC,EAAKpsB,EAAM0L,IAAM1L,CAErB,KAAKxa,EAAM,EAAGA,EAAM0iB,EAAQzoB,OAAQ+F,IAChCqjC,EAAY3gB,EAAQ1iB,GACpB2mC,EAAgBC,EAAKvD,EAAUnd,IAC3BygB,GACAA,EAAcD,GAAYrD,IAItC2C,SAAU,SAAUzkC,EAAM+zB,EAAG5hB,EAAG+O,GAC5BpgB,KAAKd,IACD2/B,KAAK,EACLsF,MAAOlR,EACPmR,MAAO/yB,EACPoP,QAASwS,EACTvS,QAASrP,EACT+O,OAAQ1pB,EAAE0pB,GAAUpgB,KAAKjI,SAAS,GAClC2yB,gBAAiBh0B,EAAEkK,KACnBuD,eAAgBzN,EAAEkK,SAI9BghC,GAAW4C,iBAAmB,SAAU5mC,GACpC0hC,EAAoB1hC,GAExBgkC,EAAWJ,QAAU,SAAU5jC,GAC3ByhC,EAAmBzhC,GAEvB1F,EAAMymC,WAAaA,EACnBzmC,EAAM6lC,WAAaA,EACnB7lC,EAAM0pC,WAAaA,GACrBjrC,OAAOuB,MAAM2sB,QACRluB,OAAOuB,OACE,kBAAVzB,SAAwBA,OAAOgiC,IAAMhiC,OAAS,SAAUiiC,EAAIC,EAAIC,IACrEA,GAAMD,OAEV,SAAUniC,EAAGC,QACVA,OAAO,eACH,aACA,oBACDD,IACL,WAmIE,MAxHC,UAAUE,EAAGE,GAAb,GACOsB,GAAQvB,OAAOuB,MAAO8M,EAAS9M,EAAMmpB,GAAGrc,OAAQgB,EAAQtP,EAAEsP,MAAOnH,EAAMD,KAAKC,IAAK4lC,EAA0B,GAC3G3D,EAAQ97B,EAAOtE,QACfC,KAAM,SAAU5I,EAASqI,GAMrB,QAASskC,GAAWx1B,GAChB,MAAO,UAAUjH,GACbrB,EAAK+9B,cAAcz1B,EAAMjH,IAGjC,QAAS28B,GAAkB11B,GACvB,MAAO,UAAUjH,GACbrB,EAAKoB,QAAQkH,GACTmR,QAASpY,EAAEoY,QACXoe,SAAUx2B,EAAEw2B;AACZD,OAAQv2B,EAAEu2B,OACV7lB,MAAO1Q,EAAE0Q,SAhBrB,GAAI/R,GAAO5G,IACXgF,GAAOf,GAAGtD,KAAKwH,KAAKvB,EAAM7O,EAASqI,GACnCA,EAAUwG,EAAKxG,QACfrI,EAAU6O,EAAK7O,QACf6O,EAAKvN,QAAUtB,EAgBf6O,EAAKc,OAAS,GAAIxP,GAAM0pC,WAAW7pC,GAC/B8L,OAAQzD,EAAQyD,OAChBi/B,QAAS1iC,EAAQ0iC,QACjBtB,QAASphC,EAAQohC,QACjBiB,WAAYriC,EAAQqiC,WACpBC,gBAAgB,EAChBE,QAASxiC,EAAQwiC,QACjBtB,MAAOoD,EAAW,cAClBG,KAAMH,EAAW,QACjBI,IAAK9+B,EAAMY,EAAM,QACjBm+B,aAAcH,EAAkB,gBAChCI,cAAeJ,EAAkB,iBACjCK,WAAYL,EAAkB,gBAE9BxkC,EAAQ8kC,aACRt+B,EAAKc,OAAON,KAAK,QAASpB,EAAMY,EAAM,gBACtCA,EAAKc,OAAON,KAAK,OAAQpB,EAAMY,EAAM,iBAErCA,EAAKc,OAAON,KAAK,QAASpB,EAAMY,EAAM,eACtCA,EAAKc,OAAON,KAAK,OAAQs9B,EAAW,SACpC99B,EAAKc,OAAON,KAAK,MAAOs9B,EAAW,aAEvCxsC,EAAM0uB,OAAOhgB,IAEjBc,QACI,aACA,YACA,OACA,UACA,MACA,YACA,OACA,QACA,eACA,gBACA,cAEJtH,SACI8O,KAAM,QACN4zB,QAAS,KACTC,QAAQ,EACRH,SAAS,EACT/+B,OAAQ,KACR4+B,YAAY,EACZyC,aAAa,EACbC,UAAW,GACXC,UAAW,GACXC,YAAa,IACb7D,QAAS,IACT8D,iBAAkB,KAEtBta,OAAQ,WACJhrB,KAAK0H,OAAOsjB,UAEhBlF,QAAS,WACL9lB,KAAK0H,OAAOoe,WAEhB6e,cAAe,SAAUzlC,EAAM+I,GACvBjI,KAAKgI,QAAQ9I,GACTiZ,MAAOlQ,EAAEkQ,MACTQ,MAAO1Q,EAAE0Q,SAEb1Q,EAAE9D,kBAGVohC,KAAM,SAAUt9B,GACZ,GAAIrB,GAAO5G,KAAMwlC,EAAU5+B,EAAK4+B,QAASrtB,EAAQlQ,EAAEkQ,KAC/CqtB,IAAWrtB,EAAM4pB,QAAUyD,EAAQzD,QAAUn7B,EAAKxG,QAAQklC,kBAAoBptC,EAAM6lC,WAAW5lB,EAAOqtB,GAAS/G,SAAWgG,GAC1H79B,EAAK+9B,cAAc,YAAa18B,GAChCrB,EAAK4+B,QAAU,OAEf5+B,EAAK+9B,cAAc,MAAO18B,GAC1BrB,EAAK4+B,QAAUrtB,IAGvBstB,WAAY,SAAUx9B,GAClBjI,KAAK2kC,cAAc,YAAa18B,IAEpCy9B,YAAa,SAAUz9B,GACK,EAApBpJ,EAAIoJ,EAAEgrB,EAAEyN,WAAiB7hC,EAAIoJ,EAAEoJ,EAAEqvB,WACjCz4B,EAAEC,OAAOu7B,WAGjBkC,WAAY,SAAU19B,GAClB,GAAIrB,GAAO5G,KAAMI,EAAUwG,EAAKxG,QAAS+X,EAAQlQ,EAAEkQ,MAAO9X,EAAW4H,EAAE0Q,MAAMgoB,UAAYxoB,EAAMgqB,UAAWyD,EAAYztB,EAAM8a,EAAE4N,aAAe,EAAI,QAAU,MACvJhiC,GAAIsZ,EAAM8a,EAAE4N,eAAiBzgC,EAAQ+kC,WAAatmC,EAAIsZ,EAAM9G,EAAEwvB,cAAgBzgC,EAAQglC,WAAa/kC,EAAWD,EAAQilC,cACtHz+B,EAAKoB,QAAQ,SACT49B,UAAWA,EACXztB,MAAOlQ,EAAEkQ,QAEbA,EAAM6S,YAIlB9yB,GAAMmpB,GAAG8G,OAAO2Y,IAClBnqC,OAAOuB,MAAM2sB,QACRluB,OAAOuB,OACE,kBAAVzB,SAAwBA,OAAOgiC,IAAMhiC,OAAS,SAAUiiC,EAAIC,EAAIC,IACrEA,GAAMD,OAEV,SAAUniC,EAAGC,QACVA,OAAO,oBAAqB,cAAeD,IAC7C,WA8PE,MAtPC,UAAUE,EAAGE,GAkDV,QAASivC,GAAchiC,EAAQiiC,GAC3B,GAAgDnoC,GAAK/F,EAAQmmB,EAAO7e,EAAM6J,EAAQg9B,EAAUnoC,EAAO0+B,EAA/Ft9B,KAAagnC,EAAQniC,EAAOmiC,OAAS,MAAsEtiC,EAAUG,EAAOH,OAChI,KAAK/F,EAAM,EAAG/F,EAAS8L,EAAQ9L,OAAQ+F,EAAM/F,EAAQ+F,IACjDkG,EAASH,EAAQ/F,GACjBogB,EAAQla,EAAOka,MACfngB,EAAQiG,EAAOjG,MACfmoC,EAAWliC,EAAOkiC,SACdliC,EAAOH,QACPG,EAASgiC,EAAchiC,EAAQiiC,IAE/BxJ,EAAaz4B,EAAOy4B,WACpBve,EAAQA,EAAM5mB,QAAQ,MAAO,KAC7B0M,EAASoiC,EAAaF,GAClBD,IACAjiC,EAASqiC,EAAwBH,IAEpB,WAAbA,GAAsC,cAAbA,EACzBliC,EAAS3L,EAAM6Q,OAAO,eAAgBgV,EAAOla,GACzB,YAAbkiC,GAAuC,eAAbA,EACjCliC,EAAS3L,EAAM6Q,OAAO,aAAgBgV,EAAOla,GACtCA,GAAUjG,IAAUhH,IAC3BsI,EAAOxI,EAAEwI,KAAKtB,GACD,WAATsB,GACA6J,EAAS,QACTnL,EAAQA,EAAMzG,QAAQ,KAAM,MACxBmlC,KAAe,IACfve,EAAQ,WAAaA,EAAQ,MAEjB,SAAT7e,EACH4mC,GACA/8B,EAAS,gCACTnL,EAAQ1F,EAAM0e,SAAS9P,MAAMlJ,EAAO,YAEpCmL,EAAS,oCAGbA,EAAS,MAETlF,EAAOjM,OAAS,EACD,gBAAXiM,EACAkF,EAAS,WAAaA,EAAS,KAE/BA,EAAS,OAASA,EAAS,QACV,mBAAbg9B,IACID,GACA/8B,EAAS,uBACTlF,EAAS,WAETkF,GAAU,cAKtBA,EAAS,WAAaA,EAE1BlF,EAAS3L,EAAM6Q,OAAOA,EAAQlF,EAAQjG,EAAOmgB,KAGrD/e,EAAO8I,KAAKjE,EAMhB,OAJAA,GAAS7E,EAAO9H,KAAK,IAAM8uC,EAAQ,KAC/BhnC,EAAOpH,OAAS,IAChBiM,EAAS,IAAMA,EAAS,KAErBA,EAEX,QAASsiC,GAAcrnC,GACnB,IAAK,GAAIoQ,KAAQpQ,GACkB,IAA3BoQ,EAAKhR,QAAQ,iBACNY,GAAIoQ,GAtHvB,GAAIhX,GAAQvB,OAAOuB,MAAOwI,EAAShK,EAAEgK,OAAQulC,GACrCld,GAAI,KACJqd,IAAK,KACLC,GAAI,KACJC,IAAK,KACLC,GAAI,KACJC,IAAK,KACL1jC,SAAU,cACV2jC,eAAgB,cAChBC,SAAU,WACVC,WAAY,aACZC,OAAQ,KACRC,UAAW,KACXC,QAAS,KACTC,WAAY,MACbb,EAA0BxlC,KAAWulC,GAAgBnjC,SAAU,aAAekkC,GAC7EC,SAAUvwC,EAAEkK,KACZsmC,KAAMxwC,EAAEkK,KACRiD,OAAQ,SAAUgvB,EAAQhvB,EAAQsjC,GAC1BtjC,IACAA,EAASgiC,EAAchiC,EAAQsjC,GAC3BtjC,IACAgvB,EAAOuU,QAAUvjC,KAI7Bma,KAAM,SAAU6U,EAAQwU,GACpB,GAAI5jC,GAAO/M,EAAEsc,IAAIq0B,EAAS,SAAUzpC,GAChC,GAAI0pC,GAAQ1pC,EAAMmgB,MAAM5mB,QAAQ,MAAO,IAIvC,OAHkB,SAAdyG,EAAMqxB,MACNqY,GAAS,SAENA,IACRpwC,KAAK,IACJuM,KACAovB,EAAO0U,SAAW9jC,IAG1Bw+B,KAAM,SAAUpP,EAAQoP,GAChBA,IACApP,EAAO2U,MAAQvF,IAGvBwF,KAAM,SAAU5U,EAAQ4U,GAChBA,IACA5U,EAAO6U,KAAOD,KAGvBE,GAAoBC,MAAQC,SAAU,SA0E7CnnC,IAAO,EAAMxI,EAAMsD,MACfssC,SACIC,OACI7oC,KAAM,OACN1D,KAAM,SAAUA,GACZ,MAAOA,GAAKmV,EAAEq3B,UAAYxsC,EAAKmV,IAEnCs3B,MAAO,cAGfC,YACIH,OACIH,MACIpb,OAAO,EACPqb,SAAU,QACVM,MAAO,aAEXC,QACI5b,OAAO,EACPqb,SAAU,OACVjR,YAAa,mBACb13B,KAAM,OAEVmpC,QACI7b,OAAO,EACPqb,SAAU,OACVjR,YAAa,mBACb13B,KAAM,QAEV4mB,SACI0G,OAAO,EACPqb,SAAU,OACV3oC,KAAM,UAEVopC,aAAc,SAAUloC,EAASlB,EAAMioC,GACnC,GAAItU,GAAQj1B,EAAOkE,EAAQ+lC,CAK3B,IAJAznC,EAAUA,MACVlB,EAAOA,GAAQ,OACf2oC,GAAY7nC,KAAKI,SAAWunC,GAAiBzoC,GAC7C2oC,EAAWA,EAAWA,EAASA,SAAW,OAC7B,SAAT3oC,EAAiB,CACjB2zB,GAAW0V,aAAc,YACT,QAAZV,IACAhV,EAAO2V,QAAU,OAErB,KAAK1mC,IAAU1B,GACP4mC,EAAQllC,GACRklC,EAAQllC,GAAQ+wB,EAAQzyB,EAAQ0B,GAASqlC,GAEzCtU,EAAO/wB,GAAU1B,EAAQ0B,OAG9B,CACH,GAAiB,SAAb+lC,EACA,KAAU/+B,OAAM,sCAAwC5J,EAAO,cAEnE,IAAa,YAATA,EAAoB,CACpB,IAAK4C,IAAU1B,GACXxC,EAAQwC,EAAQ0B,GACK,gBAAVlE,KACPwC,EAAQ0B,GAAUlE,EAAQ,GAGlCi1B,GAAS36B,EAAMiT,UAAU/K,IAGjC,MAAOyyB,QAKvBnyB,GAAO,EAAMxI,EAAMsD,MACfssC,SACIW,YACIvpC,KAAM,OACN1D,KAAM,SAAUA,GAGZ,MAFAA,GAAO9E,EAAEgK,UAAWlF,GACpB2qC,EAAc3qC,GACVA,EAAKoC,MACEpC,EAAKoC,OAERpC,IAEZysC,MAAO,SAAUzsC,GACb,MAAOA,GAAK,mBAIxB0sC,YACIO,YACIb,MACIpb,OAAO,EACPqb,SAAU,QAEdO,QACI5b,OAAO,EACPqb,SAAU,OACVjR,YAAa,0CACb13B,KAAM,OAEVmpC,QACI7b,OAAO,EACPqb,SAAU,OACVjR,YAAa,0CACb13B,KAAM,QAEV4mB,SACI0G,OAAO,EACPqb,SAAU,OACV3oC,KAAM,UAEVopC,aAAc,SAAUloC,EAASlB,GAC7B,GAAIF,GAAS9G,EAAMsD,KAAK0sC,WAAWH,MAAMO,aAAaloC,EAASlB,GAAM,EAKrE,OAJY,QAARA,IACAF,EAAO0pC,QAAS,QACT1pC,GAAOupC,cAEXvpC,QAKzBrI,OAAOuB,MAAM2sB,QACRluB,OAAOuB,OACE,kBAAVzB,SAAwBA,OAAOgiC,IAAMhiC,OAAS,SAAUiiC,EAAIC,EAAIC,IACrEA,GAAMD,OAEV,SAAUniC,EAAGC,QACVA,OAAO,kBAAmB,cAAeD,IAC3C,WAkLE,MA1KC,UAAUE,EAAGE,GAAb,GACOsB,GAAQvB,OAAOuB,MAAO6N,EAAUrP,EAAEqP,QAAS4iC,EAAgBjyC,EAAEiyC,cAAe31B,EAAMtc,EAAEsc,IAAKtV,EAAOhH,EAAEgH,KAAMgD,EAAShK,EAAEgK,OAAQ4iB,EAASprB,EAAMorB,OAAQzsB,EAAQqB,EAAMrB,MAChK+xC,EAAgB/xC,EAAM6J,QACtBC,KAAM,SAAUP,GAAV,GAIUuG,GAaAkd,EAEIglB,EAsDRC,EAxEJliC,EAAO5G,KAAMioC,EAAQ7nC,EAAQ6nC,MAAOc,EAAQ3oC,EAAQ2oC,MAAOC,EAAQ5oC,EAAQ4oC,MAAOC,EAAS7oC,EAAQ6oC,OAAQC,EAAY9oC,EAAQ8oC,UAAW1tC,EAAO4E,EAAQ5E,IACzJutC,KACIJ,EAAcI,KACVpiC,EAAOvG,EAAQ+oC,WAAajxC,EAAMsD,KAAK4tC,MACvCL,EAAMM,QACN3rC,EAAKqrC,EAAMM,OAAQ,SAAUtrB,EAAOngB,GAC5B+qC,EAAc/qC,IAAUA,EAAMmgB,MACzBrnB,EAAEwF,WAAW0B,EAAMmgB,SACpBngB,EAAQ8C,EAAO9C,GAASmgB,MAAOnX,EAAK0c,OAAO1lB,EAAMmgB,UAGrDngB,GAAUmgB,MAAOnX,EAAK0c,OAAO1lB,IAEjCmrC,EAAMM,OAAOtrB,GAASngB,IAG1BimB,EAAKklB,EAAMllB,GACXA,IACIglB,KACJA,EAAQjiC,EAAK0iC,cAAczlB,GAAI,KAAW9F,MAAOnX,EAAK0c,OAAOO,IAC7DklB,EAAMM,OAAS3oC,EAAOmoC,EAASE,EAAMM,QACrCN,EAAMllB,GAAKjd,EAAK0iC,cAAczlB,IAElCklB,EAAQpiC,EAAKlQ,OAAOsyC,IAExBniC,EAAKmiC,MAAQA,GAEbd,IACoB,gBAATA,IACPA,EAAQrhC,EAAK0c,OAAO2kB,GACpBrhC,EAAKqhC,MAAQ,SAAUzsC,GACnB,MAAO6W,UAAS41B,EAAMzsC,GAAO,MAEV,kBAATysC,KACdrhC,EAAKqhC,MAAQA,IAGjBgB,IACqB,gBAAVA,IACPA,EAASriC,EAAK0c,OAAO2lB,GACrBriC,EAAKqiC,OAAS,SAAUztC,GACpB,MAAOytC,GAAOztC,IAAS,OAEH,kBAAVytC,KACdriC,EAAKqiC,OAASA,IAGlBztC,IACmB,gBAARA,IACPA,EAAOoL,EAAK0iC,cAAc9tC,GAC1BoL,EAAKpL,KAAO,SAAUoC,GAClB,GAAyC2rC,GAArCvqC,EAAS4H,EAAK4iC,SAAS5rC,EAAOpC,EAElC,OADAwD,GAAS+G,EAAQ/G,GAAUA,GAAUA,GACjC4H,EAAKmiC,OAASA,EAAMM,QACpBE,EAAgB,GAAI3iC,GAAKmiC,MAClB/1B,EAAIhU,EAAQ,SAAUpB,GACzB,GAAIA,EAAO,CACP,GAAiBmgB,GAAb0rB,IACJ,KAAK1rB,IAASgrB,GAAMM,OAChBI,EAAO1rB,GAASwrB,EAAcG,OAAO3rB,EAAOgrB,EAAMM,OAAOtrB,GAAOA,MAAMngB,GAE1E,OAAO6rC,OAIZzqC,IAEW,kBAARxD,KACdoL,EAAKpL,KAAOA,IAGA,kBAATwtC,KACHF,EAAWliC,EAAKoiC,MACpBpiC,EAAKoiC,MAAQ,SAAUxtC,GACnB,GAAImuC,GAAMX,EAAM7gC,KAAKvB,EAAMpL,EAC3B,OAAOstC,GAAS3gC,KAAKvB,EAAM+iC,KAGX,kBAAbT,KACPtiC,EAAKsiC,UAAYA,IAGzBjB,MAAO,SAAUjpC,GACb,MAAOgB,MAAKxE,KAAKwD,GAAQpH,QAE7BqxC,OAAQ,SAAUztC,GACd,MAAOA,GAAOA,EAAKytC,OAAS,MAEhCC,UAAW,SAAU1tC,GACjB,MAAOA,IAEXouC,SAAU,SAAU7xC,GAChB,GAAiB8xC,GAAYlY,EAAMzK,EAAU7jB,EAAUqD,EAAQojC,EAAgFnsC,EAA3IqB,KAAsE+qC,EAAahyC,EAAQgyC,WAAYC,EAAiBD,EAAWnyC,MACvI,KAAK+F,EAAM,EAAGA,EAAMqsC,EAAgBrsC,IAChCmsC,EAAYC,EAAWpsC,GACvBqB,EAAO,IAAM8qC,EAAUzmC,UAAYymC,EAAU3X,SAEjD,KAAKR,EAAO55B,EAAQkyC,WAAYtY,EAAMA,EAAOA,EAAKuY,YAC9ChjB,EAAWyK,EAAKzK,SACC,IAAbA,GAA+B,IAAbA,EAClBloB,EAAO,SAAW2yB,EAAKQ,UACH,IAAbjL,IACP2iB,EAAa7pC,KAAK4pC,SAASjY,GAC3BtuB,EAAWsuB,EAAKtuB,SAChBqD,EAAS1H,EAAOqE,GACZ0C,EAAQW,GACRA,EAAOoB,KAAK+hC,GAEZnjC,EADOA,IAAW9P,GAEd8P,EACAmjC,GAGKA,EAEb7qC,EAAOqE,GAAYqD,EAG3B,OAAO1H,IAEXwqC,SAAU,SAAU5rC,EAAOwlB,GAEvB,IADA,GAAqC1c,GAAQ1H,EAAQpH,EAAQuyC,EAAoBxsC,EAA7EujB,EAAUkC,EAAWnsB,MAAM,KACxByP,EAASwa,EAAQpP,SAEpB,GADAlU,EAAQA,EAAM8I,GACVX,EAAQnI,GAAQ,CAGhB,IAFAoB,KACAokB,EAAalC,EAAQhqB,KAAK,KACrByG,EAAM,EAAG/F,EAASgG,EAAMhG,OAAQ+F,EAAM/F,EAAQ+F,IAC/CwsC,EAAqBnqC,KAAKwpC,SAAS5rC,EAAMD,GAAMylB,GAC/C+mB,EAAqBpkC,EAAQokC,GAAsBA,GAAsBA,GACzEnrC,EAAO8I,KAAKhB,MAAM9H,EAAQmrC,EAE9B,OAAOnrC,GAGf,MAAOpB,IAEXorC,MAAO,SAAUW,GACb,GAAIjqC,GAAiB0qC,EAAMprC,IAI3B,OAHAU,GAAkBiqC,EAAIjqC,iBAAmBhJ,EAAE2zC,SAASV,GAAKjqC,gBACzD0qC,EAAOpqC,KAAK4pC,SAASlqC,GACrBV,EAAOU,EAAgB2D,UAAY+mC,EAC5BprC,GAEXsqC,cAAe,SAAU5iC,EAAQ4jC,GAC7B,MAAK5jC,IAGLA,EAASA,EAAOvP,QAAQ,MAAO,IAAIA,QAAQ,MAAO,KAC9CuP,EAAOxI,QAAQ,MAAQ,EAChBwI,EAAOvP,QAAQ,WAAYmzC,EAAM,KAAO,UAE/C5jC,EAAOxI,QAAQ,WAAa,EACrBwI,EAAOvP,QAAQ,gBAAiBmzC,EAAM,QAAU,aAEpD5jC,GATI,IAWf4c,OAAQ,SAAU5c,GACd,MAAO4c,GAAOtjB,KAAKspC,cAAc5iC,IAAS,KAGlDhQ,GAAEgK,QAAO,EAAMxI,EAAMsD,MACjBotC,cAAeA,EACf2B,SAAWZ,IAAKf,MAEtBjyC,OAAOuB,MAAM2sB,QACRluB,OAAOuB,OACE,kBAAVzB,SAAwBA,OAAOgiC,IAAMhiC,OAAS,SAAUiiC,EAAIC,EAAIC,IACrEA,GAAMD,OAEV,SAAUniC,EAAGC,QACVA,OAAO,cACH,aACA,mBACA,kBACDD,IACL,WAizHE,MArxHC,UAAUE,EAAGE,GA+PV,QAAS4zC,GAAaxmC,EAAS9E,EAAM6e,EAAOtF,GACxC,MAAO,UAAUxQ,GACb,GAAgBlJ,GAAZ4Z,IACJ,KAAK5Z,IAAOkJ,GACR0Q,EAAM5Z,GAAOkJ,EAAElJ,EAGf4Z,GAAMoF,MADNtF,EACcsF,EAAQ,IAAM9V,EAAE8V,MAEhBA,EAEd7e,GAAQu6B,IAAUz1B,EAAQymC,eAC1BzmC,EAAQymC,cAAc9xB,GAE1B3U,EAAQgE,QAAQ9I,EAAMyZ,IAkI9B,QAAS+xB,GAAMzX,EAAG5hB,GACd,GAAI4hB,IAAM5hB,EACN,OAAO,CAEX,IAA0C0M,GAAtC4sB,EAAQj0C,EAAEwI,KAAK+zB,GAAI2X,EAAQl0C,EAAEwI,KAAKmS,EACtC,IAAIs5B,IAAUC,EACV,OAAO,CAEX,IAAc,SAAVD,EACA,MAAO1X,GAAEh3B,YAAcoV,EAAEpV,SAE7B,IAAc,WAAV0uC,GAAgC,UAAVA,EACtB,OAAO,CAEX,KAAK5sB,IAASkV,GACV,IAAKyX,EAAMzX,EAAElV,GAAQ1M,EAAE0M,IACnB,OAAO,CAGf,QAAO,EA6BX,QAAS8sB,GAAe/rC,EAAKoQ,GACzB,GAAI6O,GAAO+sB,CACX,KAAKA,IAAahsC,GAAK,CAEnB,GADAif,EAAQjf,EAAIgsC,GACRnC,GAAc5qB,IAAUA,EAAMA,OAASA,EAAMA,QAAU7O,EACvD,MAAO6O,EACJ,IAAIA,IAAU7O,EACjB,MAAO6O,GAGf,MAAO,MAgXX,QAASgtB,GAAMvvC,GACXwE,KAAKxE,KAAOA,MA4ChB,QAASwvC,GAAcjtB,EAAOkR,GAC1B,GAAIlR,EAAO,CACP,GAAIktB,SAAoBltB,KAAUvd,IAC1Bud,MAAOA,EACPkR,IAAKA,GACLlR,EAAOmtB,EAAcnlC,GAAQklC,GAAcA,EAAaA,IAAer0C,GAAaq0C,KAC5F,OAAOle,IAAKme,EAAa,SAAUv6B,GAC/B,QAASA,EAAEse,OAqCvB,QAASkc,GAAkB/nB,GACvB,GAAIzlB,GAAK/F,EAAQiM,EAAQkiC,EAAUriC,EAAU0f,EAAW1f,OACxD,IAAIA,EACA,IAAK/F,EAAM,EAAG/F,EAAS8L,EAAQ9L,OAAQ+F,EAAM/F,EAAQ+F,IACjDkG,EAASH,EAAQ/F,GACjBooC,EAAWliC,EAAOkiC,SACdA,SAAmBA,KAAavlC,KAChCqD,EAAOkiC,SAAWqF,EAAYrF,EAASjpC,gBAAkBipC,GAE7DoF,EAAkBtnC,GAI9B,QAASwnC,GAAgBjoB,GACrB,GAAIA,IAAe+D,GAAc/D,GAQ7B,OAPIrd,GAAQqd,IAAgBA,EAAW1f,UACnC0f,GACI4iB,MAAO,MACPtiC,QAASqC,GAAQqd,GAAcA,GAAcA,KAGrD+nB,EAAkB/nB,GACXA,EAIf,QAASkoB,GAAkBC,EAAIC,GAC3B,OAAID,EAAGvF,QAASwF,EAAGxF,QAGZuF,EAAGxtB,QAAUytB,EAAGztB,OAASwtB,EAAG3tC,QAAU4tC,EAAG5tC,OAAS2tC,EAAGxF,WAAayF,EAAGzF,UAEhF,QAAS0F,GAAoB5nC,GAEzB,MADAA,GAASA,MACLsjB,GAActjB,IAEVmiC,MAAO,MACPtiC,YAGD2nC,EAAgBxnC,GAE3B,QAAS6nC,GAAc9oC,EAAGC,GACtB,MAAIA,GAAEmjC,OAASpjC,EAAEmb,MAAQlb,EAAEkb,MAChB,EACAnb,EAAEmb,MAAQlb,EAAEkb,SAGZ,EAGf,QAAS4tB,GAAeC,EAAOC,GAA/B,GAMQN,GAAIC,EACJM,EACAC,EAMKpuC,CAXT,IAFAiuC,EAAQH,EAAoBG,GAC5BC,EAAQJ,EAAoBI,GACxBD,EAAM5F,QAAU6F,EAAM7F,MACtB,OAAO,CAKX,IAFI8F,GAAYF,EAAMloC,aAAe8C,QACjCulC,GAAYF,EAAMnoC,aAAe8C,QACjCslC,EAASl0C,SAAWm0C,EAASn0C,OAC7B,OAAO,CAIX,KAFAk0C,EAAWA,EAAS9tB,KAAK0tB,GACzBK,EAAWA,EAAS/tB,KAAK0tB,GAChB/tC,EAAM,EAAGA,EAAMmuC,EAASl0C,OAAQ+F,IAGrC,GAFA4tC,EAAKO,EAASnuC,GACd6tC,EAAKO,EAASpuC,GACV4tC,EAAGvF,OAASwF,EAAGxF,OACf,IAAK2F,EAAeJ,EAAIC,GACpB,OAAO,MAER,KAAKF,EAAkBC,EAAIC,GAC9B,OAAO,CAGf,QAAO,EAGX,QAASQ,GAAmBC,GACxB,MAAOlmC,IAAQkmC,GAAeA,GAAeA,GAEjD,QAASC,GAAenuB,EAAOkR,GAC3B,GAAIgc,SAAoBltB,KAAUvd,IAC1Bud,MAAOA,EACPkR,IAAKA,GACLlR,EAAOmtB,EAAcnlC,GAAQklC,GAAcA,EAAaA,IAAer0C,GAAaq0C,KAC5F,OAAOj4B,GAAIk4B,EAAa,SAAUv6B,GAC9B,OACIoN,MAAOpN,EAAEoN,MACTkR,IAAKte,EAAEse,KAAO,MACdkd,WAAYx7B,EAAEw7B,cAgJ1B,QAASC,GAAmBxpC,EAAGC,GAC3B,MAAID,IAAKA,EAAE3G,SAAW4G,GAAKA,EAAE5G,QAClB2G,EAAE3G,YAAc4G,EAAE5G,UAEtB2G,IAAMC,EAEjB,QAASwpC,GAAmBC,EAAaH,EAAYI,EAAMp6B,EAAOva,EAAQ40C,GAA1E,GAEQ7uC,GAAK8uC,EAAMC,EAAcpoB,EAIrBvG,CAHR,KAFAouB,EAAaA,MACgB7nB,EAAM6nB,EAAWv0C,OACzC+F,EAAM,EAAGA,EAAM2mB,EAAK3mB,IACrB8uC,EAAON,EAAWxuC,GAClB+uC,EAAeD,EAAKE,UAChB5uB,EAAQ0uB,EAAK1uB,MACjBuuB,EAAYvuB,GAASuuB,EAAYvuB,OACjCyuB,EAAMzuB,GAASyuB,EAAMzuB,OACrByuB,EAAMzuB,GAAO2uB,GAAgBF,EAAMzuB,GAAO2uB,OAC1CJ,EAAYvuB,GAAO2uB,GAAgBE,EAAUF,EAAa5vC,eAAewvC,EAAYvuB,GAAO2uB,GAAeH,EAAMr0C,GAAMsrB,SAASzF,GAAQ5L,EAAOva,EAAQ40C,EAAMzuB,GAAO2uB,IAuD5K,QAASG,GAASC,GACd,MAAsB,gBAARA,KAAqBr3B,MAAMq3B,GAE7C,QAASC,GAAOD,GACZ,MAAOA,IAAOA,EAAI7wC,QAEtB,QAAS6N,GAAOuJ,GACZ,GAAI1V,GAAK/F,EAASyb,EAAMzb,OAAQoH,EAAalD,MAAMlE,EACnD,KAAK+F,EAAM,EAAGA,EAAM/F,EAAQ+F,IACxBqB,EAAOrB,GAAO0V,EAAM1V,GAAKmM,QAE7B,OAAO9K,GAwJX,QAASguC,GAAiBxxC,EAAMyxC,EAAS1D,EAAe2D,EAAoBC,GACxE,GAAI1D,GAAQnmB,EAAQ8pB,EAAczvC,EAAmB/F,EAAdy1C,IACvC,KAAK1vC,EAAM,EAAG/F,EAAS4D,EAAK5D,OAAQ+F,EAAM/F,EAAQ+F,IAAO,CACrD8rC,EAASjuC,EAAKmC,EACd,KAAK2lB,IAAU2pB,GACXG,EAAeD,EAAW7pB,GACtB8pB,GAAgBA,IAAiB9pB,IAC5B+pB,EAAQD,KACTC,EAAQD,GAAgBl1C,GAAMqrB,OAAO6pB,IAEzCC,EAAQD,GAAc3D,EAAQwD,EAAQ3pB,GAAQmmB,UACvCA,GAAOnmB,KAK9B,QAASgqB,GAAe9xC,EAAMyxC,EAAS1D,EAAe2D,EAAoBC,GACtE,GAAI1D,GAAQnmB,EAAQ8pB,EAAczvC,EAAK/F,CACvC,KAAK+F,EAAM,EAAG/F,EAAS4D,EAAK5D,OAAQ+F,EAAM/F,EAAQ+F,IAAO,CACrD8rC,EAASjuC,EAAKmC,EACd,KAAK2lB,IAAU2pB,GACXxD,EAAOnmB,GAAUimB,EAAcG,OAAOpmB,EAAQ2pB,EAAQ3pB,GAAQmmB,IAC9D2D,EAAeD,EAAW7pB,GACtB8pB,GAAgBA,IAAiB9pB,SAC1BmmB,GAAO2D,IAK9B,QAASG,GAAa/xC,EAAMyxC,EAAS1D,EAAe2D,EAAoBC,GACpE,GAAI1D,GAAQ9rC,EAAKmtC,EAAWlzC,CAC5B,KAAK+F,EAAM,EAAG/F,EAAS4D,EAAK5D,OAAQ+F,EAAM/F,EAAQ+F,IAC9C8rC,EAASjuC,EAAKmC,GACdmtC,EAAYoC,EAAmBzD,EAAO1rB,OAClC+sB,GAAaA,GAAarB,EAAO1rB,QACjC0rB,EAAO1rB,MAAQ+sB,GAEnBrB,EAAO7rC,MAAQ2rC,EAAcG,OAAOD,EAAO1rB,MAAO0rB,EAAO7rC,OACrD6rC,EAAO+D,aACPD,EAAa9D,EAAOjjB,MAAOymB,EAAS1D,EAAe2D,EAAoBC,GAEvEG,EAAe7D,EAAOjjB,MAAOymB,EAAS1D,EAAe2D,EAAoBC,GAIrF,QAASM,GAAeC,EAAkB3E,EAAO4E,EAAWV,EAASC,EAAoBC,GACrF,MAAO,UAAU3xC,GAQb,MAPAA,GAAOkyC,EAAiBlyC,GACpBA,IAAS2rB,GAAc8lB,KACK,mBAAxB1jC,GAASpB,KAAK3M,IAAgCA,YAAgBD,MAC9DC,GAAQA,IAEZmyC,EAAUnyC,EAAMyxC,EAAS,GAAIlE,GAASmE,EAAoBC,IAEvD3xC,OA+Df,QAASoyC,GAAYxtB,EAAQytB,EAAM5L,EAAMwF,GAErC,IAFJ,GACQqG,GAAgBtnB,EAIZ5uB,EAJG+F,EAAM,EACVkwC,EAAKj2C,QAAU6vC,IAClBqG,EAAQD,EAAKlwC,GACb6oB,EAAQsnB,EAAMtnB,MACV5uB,EAAS4uB,EAAM5uB,OACfwoB,GAAUA,EAAOrC,QAAU+vB,EAAM/vB,OAASqC,EAAOxiB,QAAUkwC,EAAMlwC,OAC7DwiB,EAAOotB,cAAgBptB,EAAOoG,MAAM5uB,OACpCg2C,EAAYxtB,EAAOoG,MAAMpG,EAAOoG,MAAM5uB,OAAS,GAAIk2C,EAAMtnB,MAAOyb,EAAMwF,IAEtEjhB,EAAQA,EAAMhgB,MAAMy7B,EAAMA,EAAOwF,GACjCrnB,EAAOoG,MAAQpG,EAAOoG,MAAMtQ,OAAOsQ,IAEvCqnB,EAAKzlC,OAAOzK,IAAO,IACZmwC,EAAMN,cAAgBhnB,EAAM5uB,QACnCg2C,EAAYE,EAAOtnB,EAAOyb,EAAMwF,GAC3BqG,EAAMtnB,MAAM5uB,QACbi2C,EAAKzlC,OAAOzK,IAAO,KAGvB6oB,EAAQA,EAAMhgB,MAAMy7B,EAAMA,EAAOwF,GACjCqG,EAAMtnB,MAAQA,EACTsnB,EAAMtnB,MAAM5uB,QACbi2C,EAAKzlC,OAAOzK,IAAO,IAGN,IAAjB6oB,EAAM5uB,OACNqqC,GAAQrqC,GAERqqC,EAAO,EACPwF,GAAQjhB,EAAM5uB,YAEZ+F,GAAOkwC,EAAKj2C,WAIlB+F,EAAMkwC,EAAKj2C,QACXi2C,EAAKzlC,OAAOzK,EAAKkwC,EAAKj2C,OAAS+F,GAGvC,QAASowC,GAAcvyC,GAAvB,GACQmC,GAAkB/F,EAAQ4uB,EAAOwnB,EAE7BF,EAFC9uC,IACT,KAAKrB,EAAM,EAAG/F,EAAS4D,EAAK5D,OAAQ+F,EAAM/F,EAAQ+F,IAE9C,GADImwC,EAAQtyC,EAAKyyC,GAAGtwC,GAChBmwC,EAAMN,aACNxuC,EAASA,EAAOkX,OAAO63B,EAAcD,EAAMtnB,YAG3C,KADAA,EAAQsnB,EAAMtnB,MACTwnB,EAAY,EAAGA,EAAYxnB,EAAM5uB,OAAQo2C,IAC1ChvC,EAAO8I,KAAK0e,EAAMynB,GAAGD,GAIjC,OAAOhvC,GAEX,QAASkvC,GAAe1yC,EAAMutC,GAC1B,GAAIprC,GAAK/F,EAAQk2C,CACjB,IAAI/E,EACA,IAAKprC,EAAM,EAAG/F,EAAS4D,EAAK5D,OAAQ+F,EAAM/F,EAAQ+F,IAC9CmwC,EAAQtyC,EAAKyyC,GAAGtwC,GACZmwC,EAAMN,aACNU,EAAeJ,EAAMtnB,MAAOuiB,GAE5B+E,EAAMtnB,MAAQ,GAAI/qB,GAAoBqyC,EAAMtnB,MAAOuiB,GAKnE,QAASoF,GAAe3yC,EAAM4yC,GAC1B,IAAK,GAAIzwC,GAAM,EAAG/F,EAAS4D,EAAK5D,OAAQ+F,EAAM/F,EAAQ+F,IAClD,GAAInC,EAAKmC,GAAK6vC,cACV,GAAIW,EAAe3yC,EAAKmC,GAAK6oB,MAAO4nB,GAChC,OAAO,MAER,IAAIA,EAAK5yC,EAAKmC,GAAK6oB,MAAOhrB,EAAKmC,IAClC,OAAO,EAInB,QAAS0wC,GAAgBC,EAAQ9yC,EAAM+wC,EAAMlU,GACzC,IAAK,GAAI16B,GAAM,EAAGA,EAAM2wC,EAAO12C,QACvB02C,EAAO3wC,GAAKnC,OAASA,IAGrB+yC,EAAeD,EAAO3wC,GAAKnC,KAAM+wC,EAAMlU,GAJR16B,MAS3C,QAAS4wC,GAAe/nB,EAAO+lB,EAAMlU,GACjC,IAAK,GAAI16B,GAAM,EAAG/F,EAAS4uB,EAAM5uB,OAAQ+F,EAAM/F,EAAQ+F,IAAO,CAC1D,GAAI6oB,EAAM7oB,IAAQ6oB,EAAM7oB,GAAK6vC,aACzB,MAAOe,GAAe/nB,EAAM7oB,GAAK6oB,MAAO+lB,EAAMlU,EAC3C,IAAI7R,EAAM7oB,KAAS4uC,GAAQ/lB,EAAM7oB,KAAS06B,EAE7C,MADA7R,GAAM7oB,GAAO06B,GACN,GAInB,QAASmW,GAAsB7lB,EAAMntB,EAAM8yC,EAAQpvC,EAAMuvC,GAAzD,GACaC,GAAe92C,EAChB20C,EAOS5uC,CARjB,KAAS+wC,EAAY,EAAG92C,EAAS+wB,EAAK/wB,OAAQ82C,EAAY92C,EAAQ82C,IAE9D,GADInC,EAAO5jB,EAAK+lB,GACXnC,KAAQA,YAAgBrtC,IAG7B,GAAIqtC,EAAKiB,eAAiB52C,GAAc63C,GAGpC,IAAS9wC,EAAM,EAAGA,EAAMnC,EAAK5D,OAAQ+F,IACjC,GAAInC,EAAKmC,KAAS4uC,EAAM,CACpB5jB,EAAK+lB,GAAalzC,EAAKyyC,GAAGtwC,GAC1B0wC,EAAgBC,EAAQ9yC,EAAM+wC,EAAM5jB,EAAK+lB,GACzC,YANRF,GAAsBjC,EAAK/lB,MAAOhrB,EAAM8yC,EAAQpvC,EAAMuvC,GAYlE,QAASE,GAAYnzC,EAAMutC,GAA3B,GACQprC,GAAK/F,EAED6uB,CADR,KAAK9oB,EAAM,EAAG/F,EAAS4D,EAAK5D,OAAQ+F,EAAM/F,EAAQ+F,IAE9C,GADI8oB,EAAWjrB,EAAKyyC,GAAGtwC,GACnB8oB,EAASmoB,KAAO7F,EAAM6F,IAEtB,MADApzC,GAAK4M,OAAOzK,EAAK,GACV8oB,EAInB,QAASooB,GAAqBrzC,EAAMutC,GAChC,MAAIA,GACO7qC,EAAQ1C,EAAM,SAAU+wC,GAC3B,MAAOA,GAAKqC,KAAOrC,EAAKqC,KAAO7F,EAAM6F,KAAOrC,EAAKxD,EAAMF,WAAaE,EAAMllB,IAAMklB,EAAMllB,KAAOklB,EAAM+F,gBAK/G,QAASC,GAAavzC,EAAMutC,GACxB,MAAIA,GACO7qC,EAAQ1C,EAAM,SAAU+wC,GAC3B,MAAOA,GAAKqC,KAAO7F,EAAM6F,SAKrC,QAAS1wC,GAAQ1C,EAAMwzC,GACnB,GAAIrxC,GAAK/F,CACT,KAAK+F,EAAM,EAAG/F,EAAS4D,EAAK5D,OAAQ+F,EAAM/F,EAAQ+F,IAC9C,GAAIqxC,EAASxzC,EAAKmC,IACd,MAAOA,EAGf,UAEJ,QAASsxC,GAAmB5F,EAAQn6B,GAApC,GAEY+7B,GACAH,CAFR,OAAIzB,KAAWliB,GAAckiB,IACrB4B,EAAa5B,EAAOn6B,GAGpB47B,EADAnC,GAAcsC,GACFA,EAAWje,MAAQie,EAAWltB,OAAS7O,EAEvCm6B,EAAOn6B,IAASA,EAE5BhT,GAAW4uC,GACJ57B,EAEJ47B,GAEJ57B,EAEX,QAASggC,GAA8BjE,EAAYlC,GAAnD,GACQprC,GAAK/F,EACAmmB,EADQqC,IACjB,KAASrC,IAASktB,GACA,YAAVltB,IACAqC,EAAOrC,GAASktB,EAAWltB,GAGnC,IAAIktB,EAAWvnC,QAEX,IADA0c,EAAO1c,WACF/F,EAAM,EAAG/F,EAASqzC,EAAWvnC,QAAQ9L,OAAQ+F,EAAM/F,EAAQ+F,IAC5DyiB,EAAO1c,QAAQ/F,GAAOuxC,EAA8BjE,EAAWvnC,QAAQ/F,GAAMorC,OAGjF3oB,GAAOrC,MAAQkxB,EAAmBlG,EAAMM,OAAQjpB,EAAOrC,MAE3D,OAAOqC,GAEX,QAAS+uB,GAAwBjE,EAAanC,GAA9C,GACQprC,GAAK/F,EAAqBwoB,EAAQ6qB,EAIzBltB,EAJI/e,IACjB,KAAKrB,EAAM,EAAG/F,EAASszC,EAAYtzC,OAAQ+F,EAAM/F,EAAQ+F,IAAO,CAC5DyiB,KACA6qB,EAAaC,EAAYvtC,EACzB,KAASogB,IAASktB,GACd7qB,EAAOrC,GAASktB,EAAWltB,EAE/BqC,GAAOrC,MAAQkxB,EAAmBlG,EAAMM,OAAQjpB,EAAOrC,OACnDqC,EAAO+rB,YAAcpmC,GAAQqa,EAAO+rB,cACpC/rB,EAAO+rB,WAAagD,EAAwB/uB,EAAO+rB,WAAYpD,IAEnE/pC,EAAO8I,KAAKsY,GAEhB,MAAOphB,GAk/CX,QAASowC,GAAYta,EAAQuU,GAA7B,GAEQjpC,GACAivC,EACAC,EACA9zC,EACAmC,EAAK/F,EACL23C,EACAztC,EACA2nC,EACA7rC,CACJ,KAVAk3B,EAASp+B,EAAEo+B,GAAQ,GACf10B,EAAU00B,EAAO10B,QACjBivC,EAAahG,EAAO,GACpBiG,EAAcjG,EAAO,GACrB7tC,KAMCmC,EAAM,EAAG/F,EAASwI,EAAQxI,OAAQ+F,EAAM/F,EAAQ+F,IACjD8rC,KACA3nC,EAAS1B,EAAQzC,GACjB4xC,EAAWztC,EAAO0c,WACd+wB,IAAaza,IACbya,EAAW,MAEXztC,EAAOwB,UAAYisC,GAAYA,EAASjsC,WAGxCisC,IACA9F,EAAO8F,SAAWA,EAASC,OAE/B/F,EAAO4F,EAAWtxB,OAASjc,EAAOszB,KAClCx3B,EAAQkE,EAAOioC,WAAWnsC,MAEtBA,EADAA,GAASA,EAAM6xC,UACP3tC,EAAOlE,MAEPkE,EAAOszB,KAEnBqU,EAAO6F,EAAYvxB,OAASngB,EAC5BpC,EAAKsM,KAAK2hC,GAEd,OAAOjuC,GAEX,QAASk0C,GAAW34B,EAAOsyB,GACvB,GAAoE1rC,GAAK/F,EAAQ+3C,EAAmDC,EAAOnG,EAAQoG,EAAMC,EAArJC,EAAQr5C,EAAEqgB,GAAO,GAAGi5B,QAAQ,GAAIC,EAAOF,EAAQA,EAAME,QAAoCC,EAAa7G,EAAOzxC,OAAQ4D,IACzH,KAAKmC,EAAM,EAAG/F,EAASq4C,EAAKr4C,OAAQ+F,EAAM/F,EAAQ+F,IAAO,CAIrD,IAHA8rC,KACAqG,GAAQ,EACRF,EAAQK,EAAKtyC,GAAKiyC,MACbD,EAAa,EAAGA,EAAaO,EAAYP,IAC1CE,EAAOD,EAAMD,GACuB,OAAhCE,EAAKxsC,SAASvG,gBACdgzC,GAAQ,EACRrG,EAAOJ,EAAOsG,GAAY5xB,OAAS8xB,EAAKj4B,UAG3Ck4B,IACDt0C,EAAKsM,KAAK2hC,GAGlB,MAAOjuC,GA0IX,QAAS20C,GAAWjhC,GAChB,MAAO,YACH,GAAI1T,GAAOwE,KAAKowC,MAAOpxC,EAAStD,GAAWuI,GAAGiL,GAAMpI,MAAM9G,KAAMwG,GAAM2B,KAAKpN,WAI3E,OAHIiF,MAAKowC,OAAS50C,GACdwE,KAAKqwC,wBAEFrxC,GAkJf,QAASsxC,GAAUC,EAAMlH,GAErB,QAAS9iB,GAASiqB,EAAYpsB,GAC1B,MAAOosB,GAAW3sC,OAAOugB,GAAS9iB,IAAIkvC,EAAWlpB,KAAKlD,IAF1D,GAAgCzmB,GAAK/F,EAAmB6xC,EAAgL8C,EAAM1oB,EAAI4sB,EAAWxyC,EAAWtD,EAApQ6rB,EAAQ9vB,EAAE65C,GAAM51C,WAAyBa,KAAmBk1C,EAAYrH,EAAO,GAAGtrB,MAAO4yB,EAAWtH,EAAO,IAAMA,EAAO,GAAGtrB,MAAO6yB,EAAsBvH,EAAO,IAAMA,EAAO,GAAGtrB,MAAO8yB,EAAgBxH,EAAO,IAAMA,EAAO,GAAGtrB,KAIjO,KAAKpgB,EAAM,EAAG/F,EAAS4uB,EAAM5uB,OAAQ+F,EAAM/F,EAAQ+F,IAC/C8rC,GAAWqH,SAAS,GACpBvE,EAAO/lB,EAAMuC,GAAGprB,GAChB8yC,EAAYlE,EAAK,GAAGtC,WACpBtvC,EAAW4xC,EAAK5xC,WAChB41C,EAAO51C,EAASkJ,OAAO,MACvBlJ,EAAWA,EAASkJ,OAAO,YAC3BggB,EAAK0oB,EAAKrpC,KAAK,WACX2gB,IACA4lB,EAAO5lB,GAAKA,GAEZ4sB,IACAhH,EAAOiH,GAAmC,GAAtBD,EAAUvpB,SAAgBupB,EAAUte,UAAYx3B,EAASy6B,QAE7Eub,IACAlH,EAAOkH,GAAYpqB,EAAS5rB,EAAU,KAAKuI,KAAK,SAEhD2tC,IACApH,EAAOoH,GAAiBtqB,EAAS5rB,EAAU,OAAOuI,KAAK,QAEvD0tC,IACA3yC,EAAYsoB,EAAS5rB,EAAU,aAAao2C,KAAK,aACjDtH,EAAOmH,GAAuB3yC,GAAavH,EAAEu7B,KAAKh0B,EAAU9G,QAAQ,WAAY,MAEhFo5C,EAAK34C,SACL6xC,EAAOjjB,MAAQ8pB,EAAUC,EAAKxnB,GAAG,GAAIsgB,IAEJ,QAAjCkD,EAAKrpC,KAAK,sBACVumC,EAAOuH,aAAc,GAEzBx1C,EAAKsM,KAAK2hC,EAEd,OAAOjuC,GAlhHd,GACgKwX,GAwOzJvX,EAuCAw1C,EAoJAC,EAoBAC,EAmBA/H,EA0IAgI,EA2CAC,EA4DAC,EAqLAlG,EA+RAwB,EA4FA2E,EAiBAC,GAyEAC,GA0FAC,GAsQAh2C,GAm7CAi2C,GAoHAC,GAiJAj2C,GAoMAk2C,GAmKAC,GApsHApxC,GAAShK,EAAEgK,OAAQsF,GAAQtP,EAAEsP,MAAO2iC,GAAgBjyC,EAAEiyC,cAAexhB,GAAgBzwB,EAAEywB,cAAephB,GAAUrP,EAAEqP,QAASgnB,GAAOr2B,EAAEq2B,KAAMglB,GAAOr7C,EAAEq7C,KAAWr0C,GAAOhH,EAAEgH,KAAMkD,GAAOlK,EAAEkK,KAAM1I,GAAQvB,OAAOuB,MAAOgE,GAAahE,GAAMgE,WAAYmI,GAAanM,GAAMmM,WAAYxN,GAAQqB,GAAMrB,MAAO2J,GAAS,SAAU2F,GAAW,WAAY6rC,GAAS,SAAUC,GAAO,OAAQC,GAAS,SAAUC,GAAU,UAAW1Y,GAAS,SAAU2Y,GAAO,OAAQC,GAAM,MAAOC,GAAQ,QAASC,GAAe,eAAgBC,GAAW,WAAYC,GAAa,aAAcC,IACtiBV,GACAC,GACAC,GACAC,IACDQ,GAAW,SAAUC,GACpB,MAAOA,IACRtvB,GAASprB,GAAMorB,OAAQnY,GAAYjT,GAAMiT,UAAW1S,GAAOmG,KAAMkJ,MAAUA,KAAM5Q,MAAUA,KAAM60B,MAASA,IAAK3jB,MAAYA,OAAQ0J,MAAWA,MAAOtL,MAAWA,MAAOuB,MAAaA,QAASwB,MAAcA,SAAUqU,GAAa1lB,GAAMC,QAAQylB,WAAYvH,GAAa,sBAC5Q9a,GAAkB8I,GAAW3D,QAC7BC,KAAM,SAAU0S,EAAOnU,GACnB,GAAI0H,GAAO5G,IACX4G,GAAK1H,KAAOA,GAAQ+xC,EACpB5sC,GAAWJ,GAAGtD,KAAKwH,KAAKvB,GACxBA,EAAKhP,OAASyb,EAAMzb,OACpBgP,EAAKisC,QAAQx/B,EAAOzM,IAExBqnC,GAAI,SAAU97B,GACV,MAAOnS,MAAKmS,IAEhBrI,OAAQ,WACJ,GAAInM,GAA2BC,EAAtBhG,EAASoI,KAAKpI,OAAek7C,EAAWh3C,MAAMlE,EACvD,KAAK+F,EAAM,EAAGA,EAAM/F,EAAQ+F,IACxBC,EAAQoC,KAAKrC,GACTC,YAAiBqzC,KACjBrzC,EAAQA,EAAMkM,UAElBgpC,EAAKn1C,GAAOC,CAEhB,OAAOk1C,IAEXl5C,OAAQgH,GACRiyC,QAAS,SAAU53C,EAAQmlB,GACvB,GAAiBziB,GAAK/F,EAAlBgP,EAAO5G,KAAmBpG,EAAS,WAC/B,MAAOgN,GAGf,KADAwZ,EAASA,MACJziB,EAAM,EAAG/F,EAASqD,EAAOrD,OAAQ+F,EAAM/F,EAAQ+F,IAChDyiB,EAAOziB,GAAOiJ,EAAK9N,KAAKmC,EAAO0C,GAAM/D,EAEzC,OAAOwmB,IAEXtnB,KAAM,SAAUi6C,EAAQn5C,GACpB,GAAiBy+B,GAAbzxB,EAAO5G,IAkBX,OAjBe,QAAX+yC,GAA6C,oBAA1BxpC,GAASpB,KAAK4qC,KACjC1a,EAAa0a,YAAkBnsC,GAAK1H,MAAQ6zC,YAAkB3J,GACzD/Q,IACD0a,EAASA,YAAkB9B,GAAmB8B,EAAOjpC,SAAWipC,EAChEA,EAAS,GAAInsC,GAAK1H,KAAK6zC,IAE3BA,EAAOn5C,OAASA,EAChBm5C,EAAO3rC,KAAKqyB,GAAQ,SAAUxxB,GAC1BrB,EAAKoB,QAAQyxB,IACT1b,MAAO9V,EAAE8V,MACT4T,KAAM1pB,EAAE0pB,KACRxf,MAAOlK,EAAEkK,MACTqU,MAAOve,EAAEue,QAAUxmB,MACnB22B,OAAQ1uB,EAAE0pB,KAAO1pB,EAAE0uB,QAAU,aAAe,kBAIjDoc,GAEXjrC,KAAM,WACF,GAA0D9I,GAAtDmT,EAAQnS,KAAKpI,OAAQ4uB,EAAQxmB,KAAK6yC,QAAQ93C,UAO9C,OANAiE,GAAS8I,GAAKhB,MAAM9G,KAAMwmB,GAC1BxmB,KAAKgI,QAAQyxB,IACT9C,OAAQ,MACRxkB,MAAOA,EACPqU,MAAOA,IAEJxnB,GAEXwH,MAAOA,GACPwX,QAASA,KACT9mB,KAAMA,GACN60B,IAAK,WACD,GAAIn0B,GAASoI,KAAKpI,OAAQoH,EAAS+sB,GAAIjlB,MAAM9G,KAQ7C,OAPIpI,IACAoI,KAAKgI,QAAQyxB,IACT9C,OAAQ,SACRxkB,MAAOva,EAAS,EAChB4uB,OAAQxnB,KAGTA,GAEXoJ,OAAQ,SAAU+J,EAAO6gC,EAASzG,GAC9B,GAAoDvtC,GAAQlE,EAAGwpB,EAA3DkC,EAAQxmB,KAAK6yC,QAAQrsC,GAAM2B,KAAKpN,UAAW,GAK/C,IAJAiE,EAASoJ,GAAOtB,MAAM9G,MAClBmS,EACA6gC,GACF98B,OAAOsQ,IACLxnB,EAAOpH,OAMP,IALAoI,KAAKgI,QAAQyxB,IACT9C,OAAQ,SACRxkB,MAAOA,EACPqU,MAAOxnB,IAENlE,EAAI,EAAGwpB,EAAMtlB,EAAOpH,OAAQkD,EAAIwpB,EAAKxpB,IAClCkE,EAAOlE,IAAMkE,EAAOlE,GAAGH,UACvBqE,EAAOlE,GAAG+M,OAAO4xB,GAW7B,OAPI8S,IACAvsC,KAAKgI,QAAQyxB,IACT9C,OAAQ,MACRxkB,MAAOA,EACPqU,MAAOA,IAGRxnB,GAEX8S,MAAO,WACH,GAAIla,GAASoI,KAAKpI,OAAQoH,EAAS8S,GAAMhL,MAAM9G,KAQ/C,OAPIpI,IACAoI,KAAKgI,QAAQyxB,IACT9C,OAAQ,SACRxkB,MAAO,EACPqU,OAAQxnB,KAGTA,GAEX+I,QAAS,WACL,GAAqC/I,GAAjCwnB,EAAQxmB,KAAK6yC,QAAQ93C,UAOzB,OANAiE,GAAS+I,GAAQjB,MAAM9G,KAAMwmB,GAC7BxmB,KAAKgI,QAAQyxB,IACT9C,OAAQ,MACRxkB,MAAO,EACPqU,MAAOA,IAEJxnB,GAEXd,QAAS,SAAUquC,GACf,GAAiB5uC,GAAK/F,EAAlBgP,EAAO5G,IACX,KAAKrC,EAAM,EAAG/F,EAASgP,EAAKhP,OAAQ+F,EAAM/F,EAAQ+F,IAC9C,GAAIiJ,EAAKjJ,KAAS4uC,EACd,MAAO5uC,EAGf,WAEJ26B,QAAS,SAAU3X,GAEf,IADA,GAAIhjB,GAAM,EAAG/F,EAASoI,KAAKpI,OACpB+F,EAAM/F,EAAQ+F,IACjBgjB,EAAS3gB,KAAKrC,GAAMA,EAAKqC,OAGjCgT,IAAK,SAAU2N,GAEX,IADA,GAAIhjB,GAAM,EAAGqB,KAAapH,EAASoI,KAAKpI,OACjC+F,EAAM/F,EAAQ+F,IACjBqB,EAAOrB,GAAOgjB,EAAS3gB,KAAKrC,GAAMA,EAAKqC,KAE3C,OAAOhB,IAEXi0C,OAAQ,SAAUtyB,GACd,GAAa3hB,GAATrB,EAAM,EAAW/F,EAASoI,KAAKpI,MAMnC,KALwB,GAApBmD,UAAUnD,OACVoH,EAASjE,UAAU,GACZ4C,EAAM/F,IACboH,EAASgB,KAAKrC,MAEXA,EAAM/F,EAAQ+F,IACjBqB,EAAS2hB,EAAS3hB,EAAQgB,KAAKrC,GAAMA,EAAKqC,KAE9C,OAAOhB,IAEXk0C,YAAa,SAAUvyB,GACnB,GAA2B3hB,GAAvBrB,EAAMqC,KAAKpI,OAAS,CAMxB,KALwB,GAApBmD,UAAUnD,OACVoH,EAASjE,UAAU,GACZ4C,EAAM,IACbqB,EAASgB,KAAKrC,MAEXA,GAAO,EAAGA,IACbqB,EAAS2hB,EAAS3hB,EAAQgB,KAAKrC,GAAMA,EAAKqC,KAE9C,OAAOhB,IAEX6E,OAAQ,SAAU8c,GAEd,IADA,GAA0B4rB,GAAtB5uC,EAAM,EAAGqB,KAAmBpH,EAASoI,KAAKpI,OACvC+F,EAAM/F,EAAQ+F,IACjB4uC,EAAOvsC,KAAKrC,GACRgjB,EAAS4rB,EAAM5uC,EAAKqC,QACpBhB,EAAOA,EAAOpH,QAAU20C,EAGhC,OAAOvtC,IAEXsoB,KAAM,SAAU3G,GAEZ,IADA,GAAa4rB,GAAT5uC,EAAM,EAAS/F,EAASoI,KAAKpI,OAC1B+F,EAAM/F,EAAQ+F,IAEjB,GADA4uC,EAAOvsC,KAAKrC,GACRgjB,EAAS4rB,EAAM5uC,EAAKqC,MACpB,MAAOusC,IAInB4G,MAAO,SAAUxyB,GAEb,IADA,GAAa4rB,GAAT5uC,EAAM,EAAS/F,EAASoI,KAAKpI,OAC1B+F,EAAM/F,EAAQ+F,IAEjB,GADA4uC,EAAOvsC,KAAKrC,IACPgjB,EAAS4rB,EAAM5uC,EAAKqC,MACrB,OAAO,CAGf,QAAO,GAEXozC,KAAM,SAAUzyB,GAEZ,IADA,GAAa4rB,GAAT5uC,EAAM,EAAS/F,EAASoI,KAAKpI,OAC1B+F,EAAM/F,EAAQ+F,IAEjB,GADA4uC,EAAOvsC,KAAKrC,GACRgjB,EAAS4rB,EAAM5uC,EAAKqC,MACpB,OAAO,CAGf,QAAO,GAEXkoB,OAAQ,SAAUqkB,GACd,GAAI5uC,GAAMqC,KAAK9B,QAAQquC,EACnB5uC,SACAqC,KAAKoI,OAAOzK,EAAK,IAGzBmyC,MAAO,WACH9vC,KAAKoI,OAAO,EAAGpI,KAAKpI,UAGN,oBAAXy7C,SAA0BA,OAAO/hB,WAAa/1B,GAAgBwL,UAAUssC,OAAO/hB,YACtF/1B,GAAgBwL,UAAUssC,OAAO/hB,aAAe+hB,OAAO/hB,WAEvD71B,EAAsBF,GAAgBmF,QACtCC,KAAM,SAAUnF,EAAM0D,GAClBmF,GAAWJ,GAAGtD,KAAKwH,KAAKnI,MACxBA,KAAKd,KAAOA,GAAQ+xC,CACpB,KAAK,GAAItzC,GAAM,EAAGA,EAAMnC,EAAK5D,OAAQ+F,IACjCqC,KAAKrC,GAAOnC,EAAKmC,EAErBqC,MAAKpI,OAAS+F,EACdqC,KAAKszC,QAAUttC,GAAM,WACjB,MAAOhG,OACRA,OAEPiuC,GAAI,SAAU97B,GACV,GAAIo6B,GAAOvsC,KAAKmS,EAMhB,OALMo6B,aAAgBvsC,MAAKd,KAGvBqtC,EAAK3yC,OAASoG,KAAKszC,QAFnB/G,EAAOvsC,KAAKmS,GAASnS,KAAKlH,KAAKyzC,EAAMvsC,KAAKszC,SAIvC/G,KAoBX0E,EAAmB5sC,GAAW3D,QAC9BC,KAAM,SAAU/C,GACZ,GAAiB8I,GAAQqX,EAArBnX,EAAO5G,KAAqBpG,EAAS,WACjC,MAAOgN,GAEfvC,IAAWJ,GAAGtD,KAAKwH,KAAKnI,MACxBA,KAAKuzC,YACL,KAAKx1B,IAASngB,GACV8I,EAAS9I,EAAMmgB,GACO,gBAAXrX,IAAuBA,IAAWA,EAAOzK,SAA8B,KAAnB8hB,EAAM1mB,OAAO,KACxEqP,EAASE,EAAK9N,KAAK4N,EAAQqX,EAAOnkB,IAEtCgN,EAAKmX,GAASrX,CAElBE,GAAKgoC,IAAM12C,GAAMyrB,QAErB6vB,gBAAiB,SAAUz1B,GACvB,MAAO/d,MAAKtD,eAAeqhB,IAAoB,cAAVA,GAAmC,YAAVA,SAA8B/d,MAAK+d,KAAW5X,IAAsB,QAAV4X,GAE5Hua,QAAS,SAAU9hC,GACf,IAAK,GAAIsE,KAAKkF,MACNA,KAAKwzC,gBAAgB14C,IACrBtE,EAAEwJ,KAAKlF,GAAIA,IAIvBgP,OAAQ,WACJ,GAAiBlM,GAAOmgB,EAApB/e,IACJ,KAAK+e,IAAS/d,MACNA,KAAKwzC,gBAAgBz1B,KACrBngB,EAAQoC,KAAK+d,IACTngB,YAAiBqzC,IAAoBrzC,YAAiBrC,OACtDqC,EAAQA,EAAMkM,UAElB9K,EAAO+e,GAASngB,EAGxB,OAAOoB,IAEXykB,IAAK,SAAU1F,GACX,GAAiB/e,GAAb4H,EAAO5G,IAOX,OANA4G,GAAKoB,QAAQqqC,IAAOt0B,MAAOA,IAEvB/e,EADU,SAAV+e,EACSnX,EAEA1O,GAAMorB,OAAOvF,GAAO,GAAMnX,IAI3C6sC,KAAM,SAAU11B,EAAOngB,GAAjB,GAIM81C,GAA0B5a,EAGtBh6B,EANR8H,EAAO5G,KACP2zC,EAAY51B,EAAM7f,QAAQ,MAAQ,CACtC,IAAIy1C,EAEA,IADID,EAAQ31B,EAAM9mB,MAAM,KAAM6hC,EAAO,GAC9B4a,EAAM97C,OAAS,GAAG,CAGrB,GAFAkhC,GAAQ4a,EAAM5hC,QACVhT,EAAM5G,GAAMorB,OAAOwV,GAAM,GAAMlyB,GAC/B9H,YAAemyC,GAEf,MADAnyC,GAAI4kB,IAAIgwB,EAAMx8C,KAAK,KAAM0G,GAClB+1C,CAEX7a,IAAQ,IAIhB,MADA5gC,IAAMqrB,OAAOxF,GAAOnX,EAAMhJ,GACnB+1C,GAEXjwB,IAAK,SAAU3F,EAAOngB,GAClB,GAAIgJ,GAAO5G,KAAM4zC,GAAiB,EAAOD,EAAY51B,EAAM7f,QAAQ,MAAQ,EAAGyN,EAAUzT,GAAMorB,OAAOvF,GAAO,GAAMnX,EAuBlH,OAtBI+E,KAAY/N,IACR+N,YAAmBtH,KAAcrE,KAAKuzC,UAAUx1B,KAC5C/d,KAAKuzC,UAAUx1B,GAAO0F,KACtB9X,EAAQ9D,OAAOwqC,GAAKryC,KAAKuzC,UAAUx1B,GAAO0F,KAE9C9X,EAAQ9D,OAAO4xB,GAAQz5B,KAAKuzC,UAAUx1B,GAAO0c,SAEjDmZ,EAAiBhtC,EAAKoB,QAAQ,OAC1B+V,MAAOA,EACPngB,MAAOA,IAENg2C,IACID,IACD/1C,EAAQgJ,EAAK9N,KAAK8E,EAAOmgB,EAAO,WAC5B,MAAOnX,QAGVA,EAAK6sC,KAAK11B,EAAOngB,IAAUmgB,EAAM7f,QAAQ,MAAQ,GAAK6f,EAAM7f,QAAQ,MAAQ,IAC7E0I,EAAKoB,QAAQyxB,IAAU1b,MAAOA,MAInC61B,GAEXh6C,OAAQgH,GACR9H,KAAM,SAAUi6C,EAAQh1B,EAAOnkB,GAAzB,GAEE6pB,GACAgX,EAGIoZ,EACAC,EANJltC,EAAO5G,KAGPd,EAAOqK,GAASpB,KAAK4qC,EA0BzB,OAzBc,OAAVA,GAA4B,oBAAT7zC,GAAuC,mBAATA,IAC7C20C,EAAoBd,YAAkBx3C,IACtCu4C,EAAef,YAAkBr3C,IACxB,oBAATwD,GAA+B40C,GAAiBD,GAYhC,mBAAT30C,GAA6B20C,GAAqBC,KACpDD,GAAsBC,IACvBf,EAAS,GAAIx3C,IAAgBw3C,IAEjCtY,EAAS+P,EAAa5jC,EAAM6yB,GAAQ1b,GAAO,GAC3Cg1B,EAAO3rC,KAAKqyB,GAAQgB,GACpB7zB,EAAK2sC,UAAUx1B,IAAW0c,OAAQA,KAjB5BsY,YAAkB9B,KACpB8B,EAAS,GAAI9B,GAAiB8B,IAElCtvB,EAAM+mB,EAAa5jC,EAAMyrC,GAAKt0B,GAAO,GACrCg1B,EAAO3rC,KAAKirC,GAAK5uB,GACjBgX,EAAS+P,EAAa5jC,EAAM6yB,GAAQ1b,GAAO,GAC3Cg1B,EAAO3rC,KAAKqyB,GAAQgB,GACpB7zB,EAAK2sC,UAAUx1B,IACX0F,IAAKA,EACLgX,OAAQA,IAUhBsY,EAAOn5C,OAASA,GAEbm5C,KAwBX7B,GACAz5C,OAAU,SAAUmG,GAChB,MAAO1F,IAAMiK,WAAWvE,IAE5BiO,KAAQ,SAAUjO,GACd,MAAO1F,IAAMwe,UAAU9Y,IAE3Bm2C,UAAW,SAAUn2C,GACjB,aAAWA,KAAU4C,GACc,SAAxB5C,EAAMd,cAED,MAATc,IAAkBA,EAAQA,GAErCqL,OAAU,SAAUrL,GAChB,MAAgB,OAATA,EAAgBA,EAAQ,GAAKA,GAExCo2C,UAAW,SAAUp2C,GACjB,MAAOA,KAGXuzC,GACAloC,OAAU,GACVxR,OAAU,EACVoU,KAAQ,GAAI7P,MACZ+3C,WAAW,EACXC,UAAW,IAcX5K,EAAQ6H,EAAiBvwC,QACzBC,KAAM,SAAUnF,GAAV,GAKemC,GACDuR,EALZtI,EAAO5G,IACX,MAAKxE,GAAQ9E,EAAEywB,cAAc3rB,MACzBA,EAAO9E,EAAEgK,UAAWkG,EAAKqtC,SAAUz4C,GAC/BoL,EAAKstC,eACL,IAASv2C,EAAM,EAAGA,EAAMiJ,EAAKstC,cAAct8C,OAAQ+F,IAC3CuR,EAAOtI,EAAKstC,cAAcv2C,GAC9BnC,EAAK0T,GAAQtI,EAAKqtC,SAAS/kC,IAIvC+hC,GAAiBhtC,GAAGtD,KAAKwH,KAAKvB,EAAMpL,GACpCoL,EAAK4xB,OAAQ,EACT5xB,EAAKiiC,UACLjiC,EAAKid,GAAKjd,EAAK6c,IAAI7c,EAAKiiC,SACpBjiC,EAAKid,KAAOjtB,IACZgQ,EAAKid,GAAKjd,EAAKkoC,cAI3B0E,gBAAiB,SAAUz1B,GACvB,MAAOkzB,GAAiBhtC,GAAGuvC,gBAAgBrrC,KAAKnI,KAAM+d,IAAoB,QAAVA,KAAsC,OAAjB/d,KAAK6oC,SAA8B,OAAV9qB,IAA6B,UAAVA,GAA+B,eAAVA,GAE1J2rB,OAAQ,SAAU3rB,EAAOngB,GACrB,GAAgEorC,GAA5DpiC,EAAO5G,KAAM8qC,EAAY/sB,EAAOsrB,EAASziC,EAAKyiC,UAWlD,OAVAtrB,GAAQsrB,EAAOtrB,GACVA,IACDA,EAAQ8sB,EAAexB,EAAQyB,IAE/B/sB,IACAirB,EAAQjrB,EAAMirB,OACTA,GAASjrB,EAAM7e,OAChB8pC,EAAQkI,EAAQnzB,EAAM7e,KAAKpC,iBAG5BksC,EAAQA,EAAMprC,GAASA,GAElC6sC,cAAe,SAAUxiC,GACrB,GAAI0uB,GAAS1uB,EAAE0uB,MACD,QAAVA,GAA6B,UAAVA,IACnB32B,KAAKw4B,OAAQ,IAGrB2b,SAAU,SAAUp2B,GAEhB,MADAA,IAAS/d,KAAKqpC,YAActrB,IACrBA,GAAQA,EAAMo2B,YAAa,GAEtCzwB,IAAK,SAAU3F,EAAOngB,EAAOw2C,GAAxB,GACGxtC,GAAO5G,KACPw4B,EAAQ5xB,EAAK4xB,KACb5xB,GAAKutC,SAASp2B,KACdngB,EAAQgJ,EAAK8iC,OAAO3rB,EAAOngB,GACtB8sC,EAAM9sC,EAAOgJ,EAAK6c,IAAI1F,MACvBnX,EAAK4xB,OAAQ,EACTyY,EAAiBhtC,GAAGyf,IAAIvb,KAAKvB,EAAMmX,EAAOngB,EAAOw2C,KAAe5b,IAChE5xB,EAAK4xB,MAAQA,MAK7B6b,OAAQ,SAAU74C,GAAV,GAGGuiB,GAECngB,EAJJgJ,EAAO5G,KAAMpG,EAAS,WAClB,MAAOgN,GAEf,KAAKmX,IAASviB,GACNoC,EAAQpC,EAAKuiB,GACM,KAAnBA,EAAM1mB,OAAO,KACbuG,EAAQgJ,EAAK9N,KAAK0C,EAAKuiB,GAAQA,EAAOnkB,IAE1CgN,EAAK6sC,KAAK11B,EAAOngB,EAEjBgJ,GAAKiiC,UACLjiC,EAAKid,GAAKjd,EAAK6c,IAAI7c,EAAKiiC,UAE5BjiC,EAAK4xB,OAAQ,GAEjB8b,MAAO,WACH,MAAOt0C,MAAK6jB,KAAO7jB,KAAK8uC,cAGhC1F,EAAM3yC,OAAS,SAAUkQ,EAAMvG,GACvBA,IAAYxJ,IACZwJ,EAAUuG,EACVA,EAAOyiC,EAEX,IAAIL,GAAkD75B,EAAM6O,EAAO7e,EAAMtB,EAAOD,EAAK/F,EAAqBw1C,EAA/F3mC,EAAQ/F,IAASuzC,aAAgB7zC,GAAiDipC,KAA2BxlB,EAAKpd,EAAMod,GAAI0wB,IAUvI,IATI1wB,IACApd,EAAMoiC,QAAUhlB,GAEhBpd,EAAMod,UACCpd,GAAMod,GAEbA,IACApd,EAAMwtC,SAASpwB,GAAMpd,EAAMqoC,WAAa,IAER,mBAAhCvlC,GAASpB,KAAK1B,EAAM4iC,QAA8B,CAClD,IAAK1rC,EAAM,EAAG/F,EAAS6O,EAAM4iC,OAAOzxC,OAAQ+F,EAAM/F,EAAQ+F,IACtDogB,EAAQtX,EAAM4iC,OAAO1rC,SACVogB,KAAUvd,GACjB6oC,EAAOtrB,MACAA,EAAMA,QACbsrB,EAAOtrB,EAAMA,OAASA,EAG9BtX,GAAM4iC,OAASA,EAEnB,IAAKn6B,IAAQzI,GAAM4iC,OACftrB,EAAQtX,EAAM4iC,OAAOn6B,GACrBhQ,EAAO6e,EAAM7e,MAAQ,UACrBtB,EAAQ,KACRwvC,EAAel+B,EACfA,QAAc6O,GAAMA,QAAUvd,GAASud,EAAMA,MAAQ7O,EAChD6O,EAAMy2B,WACP52C,EAAQ6I,EAAMwtC,SAAS7G,IAAiBl+B,EAAOk+B,EAAel+B,GAAQ6O,EAAM02B,eAAiB79C,EAAYmnB,EAAM02B,aAAetD,EAAcjyC,EAAKpC,eAC5H,kBAAVc,IACP22C,EAAezsC,KAAKoH,IAGxB9O,EAAQyjB,KAAO3U,IACfzI,EAAMqoC,WAAalxC,GAEvB6I,EAAMwtC,SAAS7G,IAAiBl+B,EAAOk+B,EAAel+B,GAAQtR,EAC9DmgB,EAAMirB,MAAQjrB,EAAMirB,OAASkI,EAAQhyC,EAazC,OAXIq1C,GAAe38C,OAAS,IACxB6O,EAAMytC,cAAgBK,GAE1BxL,EAAQpiC,EAAKjG,OAAO+F,GACpBsiC,EAAMtyC,OAAS,SAAU2J,GACrB,MAAOgpC,GAAM3yC,OAAOsyC,EAAO3oC,IAE3BqG,EAAM4iC,SACNN,EAAMM,OAAS5iC,EAAM4iC,OACrBN,EAAMF,QAAUpiC,EAAMoiC,SAEnBE,GAEPqI,GACArtC,SAAU,SAAUga,GAChB,MAAO7hB,IAAW6hB,GAASA,EAAQuF,GAAOvF,IAE9C22B,QAAS,SAAU32B,GACf,GAAIha,GAAW/D,KAAK+D,SAASga,EAC7B,OAAO,UAAUnb,EAAGC,GAGhB,MAFAD,GAAImB,EAASnB,GACbC,EAAIkB,EAASlB,GACJ,MAALD,GAAkB,MAALC,EACN,EAEF,MAALD,KAGK,MAALC,EACO,EAEPD,EAAE+xC,cACK/xC,EAAE+xC,cAAc9xC,GAEpBD,EAAIC,EAAI,EAAID,EAAIC,KAAS,IAGxCwlC,OAAQ,SAAUrqB,GACd,GAAI02B,GAAU12B,EAAK02B,SAAW10C,KAAK00C,QAAQ12B,EAAKD,MAChD,OAAgB,QAAZC,EAAKiR,IACE,SAAUrsB,EAAGC,GAChB,MAAO6xC,GAAQ7xC,EAAGD,GAAG,IAGtB8xC,GAEXE,QAAS,SAAUC,GACf,MAAO,UAAUjyC,EAAGC,GAChB,GAAiClF,GAAK/F,EAAlCoH,EAAS61C,EAAU,GAAGjyC,EAAGC,EAC7B,KAAKlF,EAAM,EAAG/F,EAASi9C,EAAUj9C,OAAQ+F,EAAM/F,EAAQ+F,IACnDqB,EAASA,GAAU61C,EAAUl3C,GAAKiF,EAAGC,EAEzC,OAAO7D,MAIfqyC,EAAiB3wC,MAAW0wC,GAC5B0D,IAAK,SAAU/2B,GACX,GAAIha,GAAW/D,KAAK+D,SAASga,EAC7B,OAAO,UAAUnb,EAAGC,GAAb,GACCkyC,GAAShxC,EAASnB,GAClBoyC,EAASjxC,EAASlB,EAKtB,OAJIkyC,IAAUA,EAAO94C,SAAW+4C,GAAUA,EAAO/4C,UAC7C84C,EAASA,EAAO94C,UAChB+4C,EAASA,EAAO/4C,WAEhB84C,IAAWC,EACJpyC,EAAEqyC,WAAapyC,EAAEoyC,WAEd,MAAVF,KAGU,MAAVC,EACO,EAEPD,EAAOJ,cACAI,EAAOJ,cAAcK,GAEzBD,EAASC,EAAS,OAGjCE,KAAM,SAAUn3B,GACZ,GAAIha,GAAW/D,KAAK+D,SAASga,EAC7B,OAAO,UAAUnb,EAAGC,GAAb,GACCkyC,GAAShxC,EAASnB,GAClBoyC,EAASjxC,EAASlB,EAKtB,OAJIkyC,IAAUA,EAAO94C,SAAW+4C,GAAUA,EAAO/4C,UAC7C84C,EAASA,EAAO94C,UAChB+4C,EAASA,EAAO/4C,WAEhB84C,IAAWC,EACJpyC,EAAEqyC,WAAapyC,EAAEoyC,WAEd,MAAVF,EACO,EAEG,MAAVC,KAGAA,EAAOL,cACAK,EAAOL,cAAcI,GAEzBA,EAASC,EAAS,OAGjC3M,OAAQ,SAAUrqB,GACd,MAAOhe,MAAKge,EAAKiR,KAAKjR,EAAKD,UAGnC/K,EAAM,SAAUK,EAAOsN,GACnB,GAAIhjB,GAAK/F,EAASyb,EAAMzb,OAAQoH,EAAalD,MAAMlE,EACnD,KAAK+F,EAAM,EAAGA,EAAM/F,EAAQ+F,IACxBqB,EAAOrB,GAAOgjB,EAAStN,EAAM1V,GAAMA,EAAK0V,EAE5C,OAAOrU,IAEPsyC,EAAY,WACZ,QAAStoC,GAAMpM,GAIX,MAHkB,gBAAPA,KACPA,EAAMA,EAAIzF,QAAQ,WAAY,KAE3B8O,KAAKkF,UAAUvO,GAE1B,QAASu4C,GAAOC,GACZ,MAAO,UAAUxyC,EAAGC,EAAGwyC,GAMnB,MALAxyC,IAAK,GACDwyC,IACAzyC,EAAI,IAAMA,EAAI,wBACdC,EAAIA,EAAE/F,eAEHs4C,EAAKxyC,EAAGoG,EAAMnG,GAAIwyC,IAGjC,QAAStP,GAASuP,EAAI1yC,EAAGC,EAAGwyC,GACxB,GAAS,MAALxyC,EAAW,CACX,SAAWA,KAAMrC,GAAQ,CACrB,GAAIqL,GAAOwK,GAAWhH,KAAKxM,EACvBgJ,GACAhJ,EAAI,GAAI7G,QAAM6P,EAAK,KACZwpC,GACPxyC,EAAImG,EAAMnG,EAAE/F,eACZ8F,EAAI,KAAOA,EAAI,6BAEfC,EAAImG,EAAMnG,GAGdA,EAAE5G,UACF2G,EAAI,IAAMA,EAAI,KAAOA,EAAI,YAAcA,EAAI,cAAgBA,EAAI,IAC/DC,EAAIA,EAAE5G,WAGd,MAAO2G,GAAI,IAAM0yC,EAAK,IAAMzyC,EAEhC,QAAS0yC,GAAe3mC,GAAxB,GACanS,GAAW+4C,EAAa16C,EACzB+S,CADR,KAASpR,EAAK,KAAM+4C,GAAM,EAAO16C,EAAI,EAAGA,EAAI8T,EAAQhX,SAAUkD,EAAG,CAE7D,GADI+S,EAAKe,EAAQvX,OAAOyD,GACpB06C,EACA/4C,GAAM,KAAOoR,MACV,CAAA,GAAU,KAANA,EAAW,CAClB2nC,GAAM,CACN,UAEA/4C,GADa,KAANoR,EACD,KACO,KAANA,EACD,IACC,kCAAqC3P,QAAQ2P,IAAO,EACrD,KAAOA,EAEPA,EAEV2nC,GAAM,EAEV,MAAO/4C,GAAK,KAEhB,OACIuM,MAAO,SAAUpL,GACb,MAAIA,IAASA,EAAM3B,QACR,YAAc2B,EAAM3B,UAAY,IAEpC+M,EAAMpL,IAEjBmrB,GAAI,SAAUnmB,EAAGC,EAAGwyC,GAChB,MAAOtP,GAAS,KAAMnjC,EAAGC,EAAGwyC,IAEhCjP,IAAK,SAAUxjC,EAAGC,EAAGwyC,GACjB,MAAOtP,GAAS,KAAMnjC,EAAGC,EAAGwyC,IAEhChP,GAAI,SAAUzjC,EAAGC,EAAGwyC,GAChB,MAAOtP,GAAS,IAAKnjC,EAAGC,EAAGwyC,IAE/B/O,IAAK,SAAU1jC,EAAGC,EAAGwyC,GACjB,MAAOtP,GAAS,KAAMnjC,EAAGC,EAAGwyC,IAEhC9O,GAAI,SAAU3jC,EAAGC,EAAGwyC,GAChB,MAAOtP,GAAS,IAAKnjC,EAAGC,EAAGwyC,IAE/B7O,IAAK,SAAU5jC,EAAGC,EAAGwyC,GACjB,MAAOtP,GAAS,KAAMnjC,EAAGC,EAAGwyC,IAEhC1O,WAAYwO,EAAO,SAAUvyC,EAAGC,GAC5B,MAAOD,GAAI,gBAAkBC,EAAI,cAErC4yC,iBAAkBN,EAAO,SAAUvyC,EAAGC,GAClC,MAAOD,GAAI,gBAAkBC,EAAI,eAErC6jC,SAAUyO,EAAO,SAAUvyC,EAAGC,GAC1B,GAAI6yC,GAAI7yC,EAAIA,EAAEjL,OAAS,EAAI,CAC3B,OAAOgL,GAAI,YAAcC,EAAI,KAAOD,EAAI,aAAe8yC,EAAI,WAE/DC,eAAgBR,EAAO,SAAUvyC,EAAGC,GAChC,GAAI6yC,GAAI7yC,EAAIA,EAAEjL,OAAS,EAAI,CAC3B,OAAOgL,GAAI,YAAcC,EAAI,KAAOD,EAAI,aAAe8yC,EAAI,UAE/D5yC,SAAUqyC,EAAO,SAAUvyC,EAAGC,GAC1B,MAAOD,GAAI,YAAcC,EAAI,WAEjC4jC,eAAgB0O,EAAO,SAAUvyC,EAAGC,GAChC,MAAOD,GAAI,YAAcC,EAAI,YAEjCgR,QAASshC,EAAO,SAAUvyC,EAAGC,GAEzB,MADAA,GAAIA,EAAEtL,UAAU,EAAGsL,EAAEjL,OAAS,GACvB29C,EAAe1yC,GAAK,SAAWD,EAAI,MAE9CgzC,aAAcT,EAAO,SAAUvyC,EAAGC,GAE9B,MADAA,GAAIA,EAAEtL,UAAU,EAAGsL,EAAEjL,OAAS,GACvB,IAAM29C,EAAe1yC,GAAK,SAAWD,EAAI,MAEpDkkC,QAAS,SAAUlkC,GACf,MAAOA,GAAI,WAEfmkC,WAAY,SAAUnkC,GAClB,MAAOA,GAAI,WAEfgkC,OAAQ,SAAUhkC,GACd,MAAO,IAAMA,EAAI,aAErBikC,UAAW,SAAUjkC,GACjB,MAAO,IAAMA,EAAI,iBAO7BmoC,EAAM8K,WAAa,SAAUzyB,GACzB,GAGOzlB,GAAK/F,EAAQiM,EAAQJ,EAAmDsa,EAAOgoB,EAHlFkG,KAAkBjG,GACd8P,IAAK,OACLC,GAAI,QACsBC,KAAqBC,KAAyCvyC,EAAU0f,EAAW1f,OACrH,KAAK/F,EAAM,EAAG/F,EAAS8L,EAAQ9L,OAAQ+F,EAAM/F,EAAQ+F,IACjDkG,EAASH,EAAQ/F,GACjBogB,EAAQla,EAAOka,MACfgoB,EAAWliC,EAAOkiC,SACdliC,EAAOH,SACPD,EAAOsnC,EAAM8K,WAAWhyC,GACxBA,EAASJ,EAAK2f,WAAWjsB,QAAQ,gBAAiB,SAAUmB,EAAO6Z,GAE/D,MADAA,IAASA,EACF,QAAU8jC,EAAkBr+C,OAASua,GAAS,MACtDhb,QAAQ,gBAAiB,SAAUmB,EAAO6Z,GAEzC,MADAA,IAASA,EACF,QAAU6jC,EAAep+C,OAASua,GAAS,MAEtD8jC,EAAkBnuC,KAAKhB,MAAMmvC,EAAmBxyC,EAAK6tC,WACrD0E,EAAeluC,KAAKhB,MAAMkvC,EAAgBvyC,EAAK4lC,gBAEpCtrB,KAAU5X,IACjB1C,EAAO,OAASuyC,EAAep+C,OAAS,OACxCo+C,EAAeluC,KAAKiW,IAEpBta,EAAOvL,GAAMuL,KAAKsa,SAEXgoB,KAAa5/B,IACpBtC,EAAS,OAASoyC,EAAkBr+C,OAAS,KAAO6L,EAAO,KAAO6tC,EAAUtoC,MAAMnF,EAAOjG,OAAS,IAClGq4C,EAAkBnuC,KAAKi+B,IAEvBliC,EAASytC,GAAWvL,GAAY,MAAMjpC,eAAe2G,EAAMI,EAAOjG,MAAOiG,EAAOy4B,aAAe1lC,GAAYiN,EAAOy4B,aAG1H2P,EAAYnkC,KAAKjE,EAErB,QACIuf,WAAY,IAAM6oB,EAAY/0C,KAAK8uC,EAAM5iB,EAAW4iB,QAAU,IAC9DqD,OAAQ2M,EACR1E,UAAW2E,IAcf7K,GACA8K,KAAM,KACNC,OAAQ,KACRC,UAAW,KACXC,QAAS,KACT3L,MAAO,KACP4L,KAAM,MACNC,GAAI,MACJC,UAAW,MACXC,aAAc,MACdC,WAAY,MACZC,SAAU,MACVC,IAAK,KACLC,WAAY,KACZC,SAAU,KACVC,KAAM,KACNC,KAAM,MACNC,GAAI,MACJC,oBAAqB,MACrBC,cAAe,MACfC,IAAK,KACLC,cAAe,KACfC,YAAa,KACbC,QAAS,KACTC,KAAM,MACNC,uBAAwB,MACxBC,iBAAkB,MAClBC,GAAI,MACJC,eAAgB,iBAChBhR,OAAQ,SACRE,QAAS,UACTC,WAAY,cA2BhBgE,EAAMM,gBAAkBA,EAqDxBN,EAAMY,eAAiBA,EAiBvBZ,EAAMhkC,WACF8wC,QAAS,WACL,MAAO73C,MAAKxE,MAEhBs8C,MAAO,SAAU3lC,EAAOuB,GACpB,MAAO,IAAIq3B,GAAM/qC,KAAKxE,KAAKgL,MAAM2L,EAAOA,EAAQuB,KAEpDuuB,KAAM,SAAUvuB,GACZ,MAAO,IAAIq3B,GAAM/qC,KAAKxE,KAAKgL,MAAMkN,KAErC+zB,KAAM,SAAU/zB,GACZ,MAAO,IAAIq3B,GAAM/qC,KAAKxE,KAAKgL,MAAM,EAAGkN,KAExCohB,OAAQ,SAAU/wB,GACd,MAAO,IAAIgnC,GAAM/3B,EAAIhT,KAAKxE,KAAMuI,KAEpCujC,MAAO,SAAUvjC,EAAUkrB,GACvB,GAAIjR,IAASiR,IAAKA,EAQlB,OAPIlrB,KACIA,EAAS2wC,QACT12B,EAAK02B,QAAU3wC,EAAS2wC,QAExB12B,EAAKD,MAAQha,GAGd,GAAIgnC,GAAM/qC,KAAKxE,KAAKgL,MAAM,GAAGwX,KAAKozB,EAAS/I,OAAOrqB,MAE7D+5B,QAAS,SAAUh0C,GACf,MAAO/D,MAAKsnC,MAAMvjC,EAAU,QAEhCi0C,kBAAmB,SAAUj0C,GACzB,MAAO/D,MAAKsnC,MAAMvjC,EAAU,SAEhCia,KAAM,SAAUD,EAAOkR,EAAK+f,GACxB,GAAIrxC,GAAK/F,EAAQszC,EAAcF,EAAcjtB,EAAOkR,GAAM4lB,IAE1D,IADA7F,EAAWA,GAAYoC,EACnBlG,EAAYtzC,OAAQ,CACpB,IAAK+F,EAAM,EAAG/F,EAASszC,EAAYtzC,OAAQ+F,EAAM/F,EAAQ+F,IACrDk3C,EAAU/sC,KAAKknC,EAAS3G,OAAO6C,EAAYvtC,IAE/C,OAAOqC,MAAK+3C,SAAUrD,QAAS1F,EAAS4F,QAAQC,KAEpD,MAAO70C,OAEX6D,OAAQ,SAAUooC,GACd,GAAItuC,GAAKgO,EAAS/T,EAAQqgD,EAAUC,EAA6B7O,EAAQiI,EAAwBztC,EAAlDrI,EAAOwE,KAAKxE,KAAyBwD,IAEpF,IADAitC,EAAcZ,EAAgBY,IACzBA,GAA8C,IAA/BA,EAAYvoC,QAAQ9L,OACpC,MAAOoI,KAWX,KATAi4C,EAAWlN,EAAM8K,WAAW5J,GAC5B5C,EAAS4O,EAAS5O,OAClBiI,EAAY2G,EAAS3G,UACrB4G,EAAYr0C,EAAavB,SAAS,cAAe,UAAY21C,EAAS70B,aAClEimB,EAAOzxC,QAAU05C,EAAU15C,UAC3BiM,EAAS,SAAU8M,GACf,MAAOunC,GAAUvnC,EAAG04B,EAAQiI,KAG/B3zC,EAAM,EAAG/F,EAAS4D,EAAK5D,OAAQ+F,EAAM/F,EAAQ+F,IAC9CgO,EAAUnQ,EAAKmC,GACXkG,EAAO8H,IACP3M,EAAO8I,KAAK6D,EAGpB,OAAO,IAAIo/B,GAAM/rC,IAErB8uC,MAAO,SAAU5C,EAAaiN,GAC1BjN,EAAcgB,EAAehB,OAC7BiN,EAAUA,GAAWn4C,KAAKxE,IAC1B,IAAgDyvC,GAA5CrkC,EAAO5G,KAAMhB,EAAS,GAAI+rC,GAAMnkC,EAAKpL,KAmBzC,OAlBI0vC,GAAYtzC,OAAS,IACrBqzC,EAAaC,EAAY,GACzBlsC,EAASA,EAAOo5C,QAAQnN,GAAYnW,OAAO,SAAUgZ,GACjD,GAAItyC,GAAO,GAAIuvC,GAAMoN,GAASt0C,SACtBka,MAAO+vB,EAAM/vB,MACbgoB,SAAU,KACVnoC,MAAOkwC,EAAMlwC,MACb0+B,YAAY,IAEpB,QACIve,MAAO+vB,EAAM/vB,MACbngB,MAAOkwC,EAAMlwC,MACb4oB,MAAO0kB,EAAYtzC,OAAS,EAAI,GAAImzC,GAAM+C,EAAMtnB,OAAOsnB,MAAM5C,EAAY1kC,MAAM,GAAIhL,EAAKq8C,WAAWA,UAAY/J,EAAMtnB,MACrHgnB,aAActC,EAAYtzC,OAAS,EACnCu0C,WAAY3wC,EAAKmxC,UAAU1B,EAAWkB,gBAI3CntC,GAEXo5C,QAAS,SAAUnN,GACf,GAAI9jB,GAAc8jB,KAAgBjrC,KAAKxE,KAAK5D,OACxC,MAAO,IAAImzC,MAEf,IAAgIwB,GAIzH8L,EAAc16C,EAAK2mB,EAJtBvG,EAAQktB,EAAWltB,MAAOD,EAAS9d,KAAKs4C,iBAAiBv6B,EAAOktB,EAAWhc,KAAO,OAAQzL,EAAWtrB,GAAMsrB,SAASzF,GAAcw6B,EAAa/0B,EAASC,IAAI3F,EAAO,GAAIC,GAAQ+vB,GAC3K/vB,MAAOA,EACPngB,MAAO26C,EACP/xB,UACuBxnB,GAAU8uC,EACzC,KAAKnwC,EAAM,EAAG2mB,EAAMxG,EAAOlmB,OAAQ+F,EAAM2mB,EAAK3mB,IAC1C4uC,EAAOzuB,EAAOngB,GACd06C,EAAe70B,EAASC,IAAI8oB,EAAMxuB,GAC7BquB,EAAmBmM,EAAYF,KAChCE,EAAaF,EACbvK,GACI/vB,MAAOA,EACPngB,MAAO26C,EACP/xB,UAEJxnB,EAAO8I,KAAKgmC,IAEhBA,EAAMtnB,MAAM1e,KAAKykC,EAErB,OAAO,IAAIxB,GAAM/rC,IAErBs5C,iBAAkB,SAAUv6B,EAAOkR,GAC/B,GAAItxB,GAAK/F,EAAQ4D,EAAOwE,KAAKxE,IAC7B,KAAKoiB,GAAY,CACb,IAAKjgB,EAAM,EAAG/F,EAAS4D,EAAK5D,OAAQ+F,EAAM/F,EAAQ+F,IAC9CnC,EAAKmC,GAAKs3C,WAAat3C,CAG3B,KADAnC,EAAO,GAAIuvC,GAAMvvC,GAAMwiB,KAAKD,EAAOkR,EAAKoiB,GAAgBwG,UACnDl6C,EAAM,EAAG/F,EAAS4D,EAAK5D,OAAQ+F,EAAM/F,EAAQ+F,UACvCnC,GAAKmC,GAAKs3C,UAErB,OAAOz5C,GAEX,MAAOwE,MAAKge,KAAKD,EAAOkR,GAAK4oB,WAEjClL,UAAW,SAAUR,GACjB,GAAIxuC,GAAK2mB,EAAKtlB,KAAawtC,IAC3B,IAAIL,GAAcA,EAAWv0C,OACzB,IAAK+F,EAAM,EAAG2mB,EAAMtkB,KAAKxE,KAAK5D,OAAQ+F,EAAM2mB,EAAK3mB,IAC7C0uC,EAAmBrtC,EAAQmtC,EAAYnsC,KAAKxE,KAAKmC,GAAMA,EAAK2mB,EAAKkoB,EAGzE,OAAOxtC,KAsBX4tC,GACA4L,IAAK,SAAUlM,EAAaC,EAAM/oB,GAC9B,GAAI5lB,GAAQ4lB,EAASC,IAAI8oB,EAMzB,OALKM,GAASP,GAEHO,EAASjvC,KAChB0uC,GAAe1uC,GAFf0uC,EAAc1uC,EAIX0uC,GAEX54B,MAAO,SAAU44B,GACb,OAAQA,GAAe,GAAK,GAEhCmM,QAAS,SAAUnM,EAAaC,EAAM/oB,EAAUrR,EAAOva,EAAQ40C,GAC3D,GAAI5uC,GAAQ4lB,EAASC,IAAI8oB,EAezB,OAdIC,GAAM94B,QAAU9c,IAChB41C,EAAM94B,MAAQ,GAEbm5B,EAASP,GAEHO,EAASjvC,KAChB0uC,GAAe1uC,GAFf0uC,EAAc1uC,EAIdivC,EAASjvC,IACT4uC,EAAM94B,QAENvB,GAASva,EAAS,GAAKi1C,EAASP,KAChCA,GAA4BE,EAAM94B,OAE/B44B,GAEX5zC,IAAK,SAAU4zC,EAAaC,EAAM/oB,GAC9B,GAAI5lB,GAAQ4lB,EAASC,IAAI8oB,EAOzB,OANKM,GAASP,IAAiBS,EAAOT,KAClCA,EAAc1uC,GAEd0uC,EAAc1uC,IAAUivC,EAASjvC,IAAUmvC,EAAOnvC,MAClD0uC,EAAc1uC,GAEX0uC,GAEXt6B,IAAK,SAAUs6B,EAAaC,EAAM/oB,GAC9B,GAAI5lB,GAAQ4lB,EAASC,IAAI8oB,EAOzB,OANKM,GAASP,IAAiBS,EAAOT,KAClCA,EAAc1uC,GAEd0uC,EAAc1uC,IAAUivC,EAASjvC,IAAUmvC,EAAOnvC,MAClD0uC,EAAc1uC,GAEX0uC,IAgBfvB,EAAM2N,QAAU,SAAUl9C,EAAM4E,GAC5BA,EAAUA,KACV,IAAkI6nC,GAA9H0Q,EAAQ,GAAI5N,GAAMvvC,GAAOsyC,EAAQ1tC,EAAQ0tC,MAAO9vB,EAAOkuB,EAAe4B,OAAa53B,OAAO80B,EAAc5qC,EAAQ4d,WAAqB46B,EAAiBx4C,EAAQw4C,eAAgB/0C,EAASzD,EAAQyD,OAAQo+B,EAAO7hC,EAAQ6hC,KAAMwF,EAAOrnC,EAAQqnC,IAoB/O,OAnBI5jC,KACA80C,EAAQA,EAAM90C,OAAOA,GACjB+0C,IACAD,EAAQC,EAAeD,IAE3B1Q,EAAQ0Q,EAAMd,UAAUjgD,QAExBomB,IACA26B,EAAQA,EAAM36B,KAAKA,GACf8vB,IACAtyC,EAAOm9C,EAAMd,YAGjB5V,IAASrrC,GAAa6wC,IAAS7wC,IAC/B+hD,EAAQA,EAAMb,MAAM7V,EAAMwF,IAE1BqG,IACA6K,EAAQA,EAAM7K,MAAMA,EAAOtyC,KAG3BysC,MAAOA,EACPzsC,KAAMm9C,EAAMd,YAGhBtG,EAAiB16C,GAAM6J,QACvBC,KAAM,SAAUP,GACZJ,KAAKxE,KAAO4E,EAAQ5E,MAExBosC,KAAM,SAAUxnC,GACZA,EAAQy4C,QAAQ74C,KAAKxE,OAEzB4sC,OAAQ,SAAUhoC,GACdA,EAAQy4C,QAAQz4C,EAAQ5E,OAE5B6sC,OAAQ,SAAUjoC,GACdA,EAAQy4C,QAAQz4C,EAAQ5E,OAE5BsqB,QAAS,SAAU1lB,GACfA,EAAQy4C,QAAQz4C,EAAQ5E,SAG5Bg2C,GAAkB36C,GAAM6J,QACxBC,KAAM,SAAUP,GACZ,GAAiBkoC,GAAb1hC,EAAO5G,IACXI,GAAUwG,EAAKxG,QAAUM,MAAWkG,EAAKxG,QAASA,GAClD1C,GAAKg1C,GAAM,SAAUvgC,EAAOjT,SACbkB,GAAQlB,KAAUsB,KACzBJ,EAAQlB,IAAUikB,IAAK/iB,EAAQlB,OAGvC0H,EAAK4lB,MAAQpsB,EAAQosB,MAAQilB,GAAMpJ,OAAOjoC,EAAQosB,QAC9ClF,KAAM1mB,GACNU,IAAKV,IAET0nC,EAAeloC,EAAQkoC,aACnBpsC,GAAWkE,EAAQ0H,QACnBlB,EAAKkB,KAAO1H,EAAQ0H,MAEnBlB,EAAKkB,OACNlB,EAAKkB,KAAO6qC,IAEhB/rC,EAAK0hC,aAAepsC,GAAWosC,GAAgBA,EAAe,SAAUloC,GACpE,GAAIpB,KAWJ,OAVAtB,IAAK0C,EAAS,SAAU0B,EAAQlE,GACxBkE,IAAUwmC,KACVxmC,EAASwmC,EAAaxmC,GAClB6mC,GAAc7mC,KACdlE,EAAQkE,EAAOlE,MAAMA,GACrBkE,EAASA,EAAO/C,MAGxBC,EAAO8C,GAAUlE,IAEdoB,IAGfoB,SAAWkoC,aAAcqK,IACzBtK,OAAQ,SAAUjoC,GACd,MAAO2xC,IAAK/xC,KAAK84C,MAAM14C,EAAS4xC,MAEpCpK,KAAM,SAAUxnC,GACZ,GAAiBy4C,GAASE,EAAO/5C,EAA7B4H,EAAO5G,KAA8BwsB,EAAQ5lB,EAAK4lB,KACtDpsB,GAAUwG,EAAKkyC,MAAM14C,EAAS6xC,IAC9B4G,EAAUz4C,EAAQy4C,SAAWj4C,GAC7Bm4C,EAAQ34C,EAAQ24C,OAASn4C,GACzB5B,EAASwtB,EAAMlF,KAAKlnB,EAAQ5E,MACxBwD,IAAWpI,EACXiiD,EAAQ75C,IAERoB,EAAQy4C,QAAU,SAAU75C,GACxBwtB,EAAMlrB,IAAIlB,EAAQ5E,KAAMwD,GACxB65C,EAAQ75C,IAEZtI,EAAEq7C,KAAK3xC,KAGfgoC,OAAQ,SAAUhoC,GACd,MAAO2xC,IAAK/xC,KAAK84C,MAAM14C,EAAS8xC,MAEpCpsB,QAAS,SAAU1lB,GACf,MAAO2xC,IAAK/xC,KAAK84C,MAAM14C,EAAS+xC,MAEpC2G,MAAO,SAAU14C,EAASlB,GACtBkB,EAAUA,KACV,IAAiB44C,GAAbpyC,EAAO5G,KAAkBi5C,EAAYryC,EAAKxG,QAAQlB,GAAO1D,EAAOU,GAAW+8C,EAAUz9C,MAAQy9C,EAAUz9C,KAAK4E,EAAQ5E,MAAQy9C,EAAUz9C,IAO1I,OANA4E,GAAUM,IAAO,KAAUu4C,EAAW74C,GACtC44C,EAAat4C,IAAO,KAAUlF,EAAM4E,EAAQ5E,MAC5C4E,EAAQ5E,KAAOoL,EAAK0hC,aAAa0Q,EAAY95C,GACzChD,GAAWkE,EAAQ+iB,OACnB/iB,EAAQ+iB,IAAM/iB,EAAQ+iB,IAAI61B,IAEvB54C,KAGXqxC,GAAQ56C,GAAM6J,QACdC,KAAM,WACFX,KAAKk5C,WAET53C,IAAK,SAAUvC,EAAKvD,GACZuD,IAAQnI,IACRoJ,KAAKk5C,OAAO/tC,GAAUpM,IAAQvD,IAGtC8rB,KAAM,SAAUvoB,GACZ,MAAOiB,MAAKk5C,OAAO/tC,GAAUpM,KAEjCo6C,MAAO,WACHn5C,KAAKk5C,WAEThxB,OAAQ,SAAUnpB,SACPiB,MAAKk5C,OAAO/tC,GAAUpM,OAGrC0yC,GAAMpJ,OAAS,SAAUjoC,GACrB,GAAIg5C,IACAC,SAAY,WACR,MAAO,IAAI5H,KAGnB,OAAI9I,IAAcvoC,IAAYlE,GAAWkE,EAAQknB,MACtClnB,EAEPA,KAAY,EACL,GAAIqxC,IAER2H,EAAMh5C,MA2DbsxC,GAAa76C,GAAM6J,QACnBC,KAAM,SAAU24C,GAAV,GACe5yC,GAAQ+c,EAAKslB,EAAOpiC,EAUjC4yC,EAGIC,EAA2CC,EAAiDvM,EAAyBD,EAAcyM,EAAuBvM,EAAiBqG,EAAyB1I,EAbxMlkC,EAAO5G,IACXs5C,GAASA,KACT,KAAK5yC,IAAU4yC,GACX71B,EAAM61B,EAAO5yC,GACbE,EAAKF,SAAiB+c,KAAQjjB,GAAS8iB,GAAOG,GAAOA,CAEzD9c,GAAO2yC,EAAOnQ,WAAaC,EACvBT,GAAc/hC,EAAKmiC,SACnBniC,EAAKmiC,MAAQA,EAAQpiC,EAAKlQ,OAAOmQ,EAAKmiC,QAEtCwQ,EAAevzC,GAAMY,EAAKpL,KAAMoL,GACpCA,EAAK+yC,oBAAsBJ,EACvB3yC,EAAKmiC,QACDyQ,EAAiBxzC,GAAMY,EAAKgzC,OAAQhzC,GAAO6yC,EAAoBzzC,GAAMY,EAAKsiC,UAAWtiC,GAAOsmC,KAAyBD,KAAcyM,KAAuBvM,KAAiBqG,GAAkB,EACjMzK,EAAQniC,EAAKmiC,MACTA,EAAMM,SACN3rC,GAAKqrC,EAAMM,OAAQ,SAAUtrB,EAAOngB,GAChC,GAAIi8C,EACJ/O,GAAY/sB,EACR4qB,GAAc/qC,IAAUA,EAAMmgB,MAC9B+sB,EAAYltC,EAAMmgB,YACJngB,KAAU4C,KACxBsqC,EAAYltC,GAEZ+qC,GAAc/qC,IAAUA,EAAMovB,OAC9B6sB,EAAWj8C,EAAMovB,MAErBwmB,EAAkBA,GAAmBqG,GAAYA,IAAa97B,GAAS+sB,IAAc/sB,EACrFkvB,EAAQlvB,GAASuF,GAAOu2B,GAAY/O,GACpC4O,EAAiB37B,GAASuF,GAAOvF,GACjCmvB,EAAmB2M,GAAY/O,GAAa/sB,EAC5CovB,EAAWpvB,GAAS87B,GAAY/O,KAE/BwO,EAAOpQ,WAAasK,IACrB5sC,EAAKsiC,UAAYuE,EAAegM,EAAmB1Q,EAAOiE,EAAkB0M,EAAkBxM,EAAoBC,KAG1HvmC,EAAK+yC,oBAAsBJ,EAC3B3yC,EAAKpL,KAAOiyC,EAAe8L,EAAcxQ,EAAOuE,EAAgBL,EAASC,EAAoBC,GAC7FvmC,EAAKgzC,OAASnM,EAAe+L,EAAgBzQ,EAAOwE,EAAcN,EAASC,EAAoBC,KAGvGlE,OAAQ,SAAUztC,GACd,MAAOA,GAAOA,EAAKytC,OAAS,MAEhCD,MAAO2J,GACPn3C,KAAMm3C,GACN1K,MAAO,SAAUzsC,GACb,MAAOA,GAAK5D,QAEhBgiD,OAAQjH,GACRxG,WAAY,WACR,UAEJjD,UAAW,SAAU1tC,GACjB,MAAOA,MA6MXE,GAAa2I,GAAW3D,QACxBC,KAAM,SAAUP,GAAV,GACe2oC,GAAOvtC,EAgCZuD,EAhCR6H,EAAO5G,IACPI,KACA5E,EAAO4E,EAAQ5E,MAEnB4E,EAAUwG,EAAKxG,QAAUM,MAAWkG,EAAKxG,QAASA,GAClDwG,EAAKkzC,QACLlzC,EAAKmzC,aACLnzC,EAAKwpC,SACLxpC,EAAKozC,iBACLpzC,EAAKqzC,WACLrzC,EAAKszC,SACLtzC,EAAKuzC,eAAiB,EACtBvzC,EAAK08B,cACL18B,EAAKwzC,UAAYh6C,EAAQ6mC,SACzBrgC,EAAKyzC,MAAQj6C,EAAQ8mC,OAAS9mC,EAAQ6mC,SAAW,EAAIrwC,GACrDgQ,EAAK0zC,MAAQtP,EAAc5qC,EAAQ4d,MACnCpX,EAAK2zC,QAAUlP,EAAgBjrC,EAAQyD,QACvC+C,EAAK4zC,OAAStO,EAAe9rC,EAAQ0tC,OACrClnC,EAAK6zC,WAAar6C,EAAQusC,UAC1B/lC,EAAK8zC,OAASt6C,EAAQ6nC,MACtBrhC,EAAK+zC,gCAAiC,EACtCt2C,GAAWJ,GAAGtD,KAAKwH,KAAKvB,GACxBA,EAAKg0C,UAAYjJ,GAAUtJ,OAAOjoC,EAAS5E,EAAMoL,GAC7C1K,GAAW0K,EAAKg0C,UAAU9yC,OAC1BlB,EAAKg0C,UAAU9yC,MACX+yC,WAAY70C,GAAMY,EAAKk0C,YAAal0C,GACpCm0C,WAAY/0C,GAAMY,EAAKo0C,YAAap0C,GACpCq0C,YAAaj1C,GAAMY,EAAKs0C,aAAct0C,KAGhB,MAA1BxG,EAAQ+6C,iBAC6B,gBAA1B/6C,GAAQ+6C,gBACXp8C,EAAMqB,EAAQ+6C,eAClBv0C,EAAKw0C,UACDC,QAAS,WACL,MAAOp1C,MAAK+iC,MAAMsS,aAAaD,QAAQt8C,KAE3Cw8C,QAAS,SAAUhP,GACf+O,aAAaC,QAAQx8C,EAAKoM,GAAUvE,EAAK40C,OAAOtS,UAAUqD,QAIlE3lC,EAAKw0C,SAAWh7C,EAAQ+6C,gBAGhCv0C,EAAK40C,OAAS,GAAItjD,IAAMsD,KAAK+uC,QAAQnqC,EAAQk5C,OAAOp6C,MAAQ,QAAQkB,EAAQk5C,QAC5EvQ,EAAQniC,EAAK40C,OAAOzS,UACpBniC,EAAK60C,2BACL70C,EAAKwpC,MAAQxpC,EAAK80C,SAAS90C,EAAKwpC,OAChCxpC,EAAK+0C,SAAU,EACf/0C,EAAKQ,MACD,OACAkrC,GACA7Y,GACA8Y,GACAH,GACAK,GACAD,IACDpyC,IAEPA,SACI5E,KAAM,KACN89C,QAAUnQ,UAAWC,GACrB+R,eAAgB,KAChBS,eAAe,EACfC,cAAc,EACdC,iBAAiB,EACjBrN,gBAAgB,EAChBsN,kBAAkB,EAClBC,OAAO,GAEX7/C,MAAO,WACH,MAAO6D,OAEXi8C,OAAQ,SAAUr+C,GACd,MAAIA,KAAUhH,EACNoJ,KAAK27C,SAAW/9C,IAChBoC,KAAK27C,QAAU/9C,EACXA,GACOoC,KAAKk8C,OAGbxlD,EAAEylD,WAAWC,UAAUj7C,UAEvBnB,KAAK27C,SAGpBU,YAAa,SAAU7P,GACnB,MAAmC,OAA/BxsC,KAAKI,QAAQ+6C,eACN,KAEP3O,IAAU51C,EACHoJ,KAAKo7C,SAASG,QAAQ/O,GAE1BxsC,KAAKo7C,SAASC,eAEzBiB,iBAAkB,WACd,GAAIxO,GAAQ9tC,KAAK8tC;AACjB,MAAO9tC,MAAKI,QAAQquC,gBAAkBX,EAAMl2C,QAEhDkjD,YAAa,SAAU97C,GACnBgB,KAAKu8C,MAAMv9C,EAAQ,eAEvBg8C,YAAa,SAAUh8C,GACnBgB,KAAKu8C,MAAMv9C,EAAQ,eAEvBk8C,aAAc,SAAUl8C,GACpBgB,KAAKu8C,MAAMv9C,EAAQ,gBAEvBu9C,MAAO,SAAUv9C,EAAQi6C,GACrB,GAAIz9C,GAAOwE,KAAKw8C,UAAUx9C,EACrBxD,KACDA,EAAOwD,GAEXgB,KAAKi5C,GAAWz9C,IAEpBihD,UAAW,SAAUjhD,EAAMymC,GACvB,GAAIzmC,EAAM,CACN,GAAIwE,KAAKs8C,mBACL,MAAOvO,GAAcvyC,EAEzB,KAAKymC,EACD,IAAK,GAAItkC,GAAM,EAAGA,EAAMnC,EAAK5D,OAAQ+F,IACjCnC,EAAKyyC,GAAGtwC,GAIpB,MAAOnC,IAEX5B,OAAQgH,GACR6iB,IAAK,SAAUI,GACX,GAAIlmB,GAAK/F,EAAQ4D,EAAOwE,KAAKy8C,UAAUz8C,KAAKowC,MAC5C,KAAKzyC,EAAM,EAAG/F,EAAS4D,EAAK5D,OAAQ+F,EAAM/F,EAAQ+F,IAC9C,GAAInC,EAAKmC,GAAKkmB,IAAMA,EAChB,MAAOroB,GAAKmC,IAIxB++C,SAAU,SAAU74B,GAChB,GAAIlmB,GAAK/F,EAAQ4D,EAAOwE,KAAKy8C,UAAUz8C,KAAKowC,MAC5C,IAAK50C,EAGL,IAAKmC,EAAM,EAAG/F,EAAS4D,EAAK5D,OAAQ+F,EAAM/F,EAAQ+F,IAC9C,GAAInC,EAAKmC,GAAKixC,KAAO/qB,EACjB,MAAOroB,GAAKmC,IAIxBO,QAAS,SAAU6qC,GACf,MAAOgG,GAAa/uC,KAAKowC,MAAOrH,IAEpCkF,GAAI,SAAU97B,GACV,MAAOnS,MAAKowC,MAAMnC,GAAG97B,IAEzB3W,KAAM,SAAUoC,GAAV,GAeeD,GAdbiJ,EAAO5G,IACX,IAAIpC,IAAUhH,EAWP,CACH,GAAIgQ,EAAKwpC,MACL,IAASzyC,EAAM,EAAGA,EAAMiJ,EAAKwpC,MAAMx4C,OAAQ+F,IACvCiJ,EAAKwpC,MAAMnC,GAAGtwC,EAGtB,OAAOiJ,GAAKwpC,MAhBZxpC,EAAK60C,2BACL70C,EAAKwpC,MAAQpwC,KAAK07C,SAAS99C,GAC3BgJ,EAAKozC,cAAgBp8C,EAAM4I,MAAM,GACjCI,EAAK+1C,aACL/1C,EAAKqzC,WACLrzC,EAAKoB,QAAQ,SACbpB,EAAKg2C,UAAUh2C,EAAKwpC,OACpBxpC,EAAK8zC,OAAS9zC,EAAKwpC,MAAMx4C,OACzBgP,EAAKuzC,eAAiBvzC,EAAK8zC,OAC3B9zC,EAAKi2C,SAASj2C,EAAKwpC,QAU3BznB,KAAM,SAAU/qB,GACZ,MAAIA,KAAUhH,EACHoJ,KAAKk6C,OAEZl6C,KAAKk6C,MAAQl6C,KAAK88C,aAAal/C,GAA/BoC,IAGR88C,aAAc,SAAUthD,GAAV,GAGNmtB,GAFA/hB,EAAO5G,IAMX,OALAwuC,GAAsBhzC,EAAMoL,EAAKwpC,MAAOxpC,EAAKqzC,QAASrzC,EAAK40C,OAAOzS,OAASkI,EAAkBrqC,EAAK01C,oBAC9F3zB,EAAO,GAAIltB,GAAoBD,EAAMoL,EAAK40C,OAAOzS,OACrDpgB,EAAK/uB,OAAS,WACV,MAAOgN,GAAKhN,UAET+uB,GAEXvC,SAAU,WACN,GAAIwzB,GAAS55C,KAAK8tC,WAClB,OAAI8L,GAAOhiD,OACAm2C,EAAc/tC,KAAKk6C,OAEnBl6C,KAAKk6C,OAGpB54C,IAAK,SAAUynC,GACX,MAAO/oC,MAAK+8C,OAAO/8C,KAAKowC,MAAMx4C,OAAQmxC,IAE1CiU,gBAAiB,SAAUjU,GACvB,MAAI/oC,MAAKw7C,OAAOzS,MACL,GAAI/oC,MAAKw7C,OAAOzS,MAAMA,GAE7BA,YAAiBkI,GACVlI,EAEJ,GAAIkI,GAAiBlI,IAEhCgU,OAAQ,SAAU5qC,EAAO42B,GAarB,MAZKA,KACDA,EAAQ52B,EACRA,EAAQ,GAEN42B,YAAiBK,KACnBL,EAAQ/oC,KAAKg9C,gBAAgBjU,IAE7B/oC,KAAKs8C,mBACLt8C,KAAKowC,MAAMhoC,OAAO+J,EAAO,EAAGnS,KAAKi9C,kBAAkBlU,IAEnD/oC,KAAKowC,MAAMhoC,OAAO+J,EAAO,EAAG42B,GAEzBA,GAEXmU,WAAY,SAAU/qC,EAAOqU,GAAjB,GAQJ22B,GACAC,EAGSz/C,EACD4uC,EACAvtC,EAEAq+C,CAfP72B,KACDA,EAAQrU,EACRA,EAAQ,GAEPpM,GAAQygB,KACTA,GAASA,IAET22B,KACAC,EAAWp9C,KAAKI,QAAQg9C,SAC5Bp9C,KAAKI,QAAQg9C,UAAW,CACxB,KACI,IAASz/C,EAAM,EAAGA,EAAM6oB,EAAM5uB,OAAQ+F,IAC9B4uC,EAAO/lB,EAAM7oB,GACbqB,EAASgB,KAAK+8C,OAAO5qC,EAAOo6B,GAChC4Q,EAAOr1C,KAAK9I,GACRq+C,EAAWr+C,EAAO8K,SAClB9J,KAAKs8C,qBACLe,EAAWr9C,KAAKi9C,kBAAkBI,IAEtCr9C,KAAKg6C,cAAclyC,KAAKu1C,GACxBlrC,IAEN,QACEnS,KAAKI,QAAQg9C,SAAWA,EAExBD,EAAOvlD,QACPoI,KAAKgI,QAAQ,QACT9I,KAAM,SACNsnB,MAAO22B,KAInBtC,WAAY,SAAUr0B,GAClBxmB,KAAKk9C,WAAWl9C,KAAKowC,MAAMx4C,OAAQ4uB,IAEvCu0B,WAAY,SAAUv0B,GAAV,GAIJ22B,GACKx/C,EACD4uC,EACAxD,EACA3oB,CAHR,KAJKra,GAAQygB,KACTA,GAASA,IAET22B,KACKx/C,EAAM,EAAGA,EAAM6oB,EAAM5uB,OAAQ+F,IAC9B4uC,EAAO/lB,EAAM7oB,GACborC,EAAQ/oC,KAAKg9C,gBAAgBzQ,GAC7BnsB,EAASpgB,KAAKyjB,IAAIslB,EAAMllB,IACxBzD,GACA+8B,EAAOr1C,KAAKsY,GACZA,EAAOi0B,OAAO9H,GACdnsB,EAAOpY,QAAQyxB,IACfz5B,KAAKs9C,wBAAwBl9B,EAAQmsB,IAErCvsC,KAAK66C,WAAWtO,EAGpB4Q,GAAOvlD,QACPoI,KAAKgI,QAAQ,QACT9I,KAAM,SACNsnB,MAAO22B,KAInBlC,YAAa,SAAUz0B,GACnB,GAAI22B,GAASn9C,KAAKu9C,aAAa/2B,EAC3B22B,GAAOvlD,QACPoI,KAAKgI,QAAQ,QACT9I,KAAM,UACNsnB,MAAO22B,KAInBI,aAAc,SAAU/2B,GAAV,GAINg3B,GACAJ,EAGSz/C,EACD4uC,EACAxD,EACA0U,CAVP13C,IAAQygB,KACTA,GAASA,IAETg3B,KACAJ,EAAWp9C,KAAKI,QAAQg9C,SAC5Bp9C,KAAKI,QAAQg9C,UAAW,CACxB,KACI,IAASz/C,EAAM,EAAGA,EAAM6oB,EAAM5uB,OAAQ+F,IAC9B4uC,EAAO/lB,EAAM7oB,GACborC,EAAQ/oC,KAAKg9C,gBAAgBzQ,GAC7BkR,GAAQ,EACZz9C,KAAK09C,UAAU19C,KAAKowC,MAAO,SAAU5pB,GAAV,GACd7oB,GACD4uC,CADR,KAAS5uC,EAAM,EAAGA,EAAM6oB,EAAM5uB,OAAQ+F,IAElC,GADI4uC,EAAO/lB,EAAMynB,GAAGtwC,GAChB4uC,EAAK1oB,KAAOklB,EAAMllB,GAAI,CACtB25B,EAAU11C,KAAKykC,GACf/lB,EAAMpe,OAAOzK,EAAK,GAClB8/C,GAAQ,CACR,UAIRA,IACAz9C,KAAK29C,wBAAwB5U,GAC7B/oC,KAAKsjC,WAAWvX,OAG1B,QACE/rB,KAAKI,QAAQg9C,SAAWA,EAE5B,MAAOI,IAEXt1B,OAAQ,SAAU6gB,GACd,GAAI/pC,GAAQ4H,EAAO5G,KAAM49C,EAAYh3C,EAAK01C,kBAY1C,OAXAt8C,MAAK09C,UAAU92C,EAAKwpC,MAAO,SAAU5pB,GAEjC,GADAxnB,EAAS2vC,EAAYnoB,EAAOuiB,GACxB/pC,GAAU4+C,EAIV,MAHK5+C,GAAOs1C,OAAUt1C,EAAOs1C,SACzB1tC,EAAK08B,WAAWx7B,KAAK9I,IAElB,IAGfgB,KAAK69C,uBAAuB9U,GAC5B/oC,KAAK89C,sBACE/U,GAEXyU,UAAW,WACP,MAAOx9C,MAAKsjC,YAEhBya,QAAS,WACL,GAAIpgD,GAAK/F,EAAQoH,KAAaxD,EAAOwE,KAAKy8C,UAAUz8C,KAAKowC,MACzD,KAAKzyC,EAAM,EAAG/F,EAAS4D,EAAK5D,OAAQ+F,EAAM/F,EAAQ+F,IAC1CnC,EAAKmC,GAAK22C,OAAS94C,EAAKmC,GAAK22C,SAC7Bt1C,EAAO8I,KAAKtM,EAAKmC,GAGzB,OAAOqB,IAEXg/C,QAAS,WACL,GAAIrgD,GAAK/F,EAAQoH,KAAaxD,EAAOwE,KAAKy8C,UAAUz8C,KAAKowC,MACzD,KAAKzyC,EAAM,EAAG/F,EAAS4D,EAAK5D,OAAQ+F,EAAM/F,EAAQ+F,IAC1CnC,EAAKmC,GAAK22C,QAAU94C,EAAKmC,GAAK22C,SAAW94C,EAAKmC,GAAK66B,OACnDx5B,EAAO8I,KAAKtM,EAAKmC,GAGzB,OAAOqB,IAEXk9C,KAAM,WAAA,GASM+B,GARJr3C,EAAO5G,KAAM+9C,KAAcC,KAAcR,EAAY52C,EAAK08B,WAC1DniC,EAAUzK,EAAEylD,WAAWC,UAAUj7C,SACrC,IAAIyF,EAAKq1C,SAAU,CACf,IAAKr1C,EAAK40C,OAAOzS,MACb,MAAO5nC,EAEX48C,GAAUn3C,EAAKm3C,UACfC,EAAUp3C,EAAKo3C,UACXC,KACAr3C,EAAKxG,QAAQ47C,OAASp1C,EAAKg0C,UAAU7jB,OACrCknB,EAAWr3C,EAAKs3C,YAAYH,EAASC,EAASR,IAE9CS,EAASn2C,KAAKhB,MAAMm3C,EAAUr3C,EAAKu3C,MAAM,SAAUJ,IACnDE,EAASn2C,KAAKhB,MAAMm3C,EAAUr3C,EAAKu3C,MAAM,SAAUH,IACnDC,EAASn2C,KAAKhB,MAAMm3C,EAAUr3C,EAAKu3C,MAAM,UAAWX,KAExDr8C,EAAUzK,EAAE0nD,KAAKt3C,MAAM,KAAMm3C,GAAUI,KAAK,WACxC,GAAI1gD,GAAK/F,CACT,KAAK+F,EAAM,EAAG/F,EAASmD,UAAUnD,OAAQ+F,EAAM/F,EAAQ+F,IAC/C5C,UAAU4C,IACViJ,EAAK03C,QAAQvjD,UAAU4C,GAG/BiJ,GAAK+1C,YAAW,GAChB/1C,EAAK23C,SAAU5nB,OAAQ,SACvB/vB,EAAKoB,QAAQoqC,UAGjBxrC,GAAK+1C,YAAW,GAChB/1C,EAAK23C,SAAU5nB,OAAQ,QAE3B,OAAOx1B,IAEXq9C,cAAe,SAAUzV,GACrB,GAAIniC,GAAO5G,IACP+oC,aAAiB7wC,IAAMsD,KAAK4tC,MAC5BxiC,EAAK63C,aAAa1V,IAElBniC,EAAK08B,cACL18B,EAAK60C,2BACL70C,EAAKwpC,MAAQxpC,EAAK80C,SAAS90C,EAAKozC,eAC5BpzC,EAAKxG,QAAQy7C,eACbj1C,EAAK8zC,OAAS9zC,EAAKuzC,gBAEvBvzC,EAAKqzC,WACLrzC,EAAKg2C,UAAUh2C,EAAKwpC,OACpBxpC,EAAK23C,UACL33C,EAAK83C,+BAGbA,2BAA4B,WACxB,GAAI93C,GAAO5G,IACwB,OAA/B4G,EAAKxG,QAAQ+6C,gBACbv0C,EAAK82C,UAAU92C,EAAKwpC,MAAO,SAAU5pB,GAAV,GACd7oB,GACD4uC,CADR,KAAS5uC,EAAM,EAAGA,EAAM6oB,EAAM5uB,OAAQ+F,IAC9B4uC,EAAO/lB,EAAMynB,GAAGtwC,GACE,UAAlB4uC,EAAKoS,WAA2C,UAAlBpS,EAAKoS,YACnCpS,EAAK/T,OAAQ,MAMjComB,WAAY,WACR,GAAIjhD,GAAK/F,EAAQ4D,EAAOwE,KAAKy8C,UAAUz8C,KAAKowC,MAC5C,IAAIpwC,KAAKsjC,WAAW1rC,OAChB,OAAO,CAEX,KAAK+F,EAAM,EAAG/F,EAAS4D,EAAK5D,OAAQ+F,EAAM/F,EAAQ+F,IAC9C,GAAInC,EAAKmC,GAAK22C,OAAS94C,EAAKmC,GAAK22C,SAAW94C,EAAKmC,GAAK66B,MAClD,OAAO,CAGf,QAAO,GAEX8lB,QAAS,SAAUt/C,GACf,GAAwKpH,GAApKgP,EAAO5G,KAAM6+C,EAAS7/C,EAAO6/C,OAAQC,EAAW9/C,EAAO8/C,SAAUnhD,EAAM,EAAGohD,EAAcn4C,EAAK01C,mBAAoBe,EAAWz2C,EAAKozC,cAAe96C,EAAOF,EAAOE,IAKlK,IAJA0H,EAAKoB,QAAQyqC,IACTqM,SAAUA,EACV5/C,KAAMA,IAEN4/C,IAAa33B,GAAc23B,GAAW,CAEtC,GADAA,EAAWl4C,EAAK40C,OAAOxS,MAAM8V,GACzBl4C,EAAKo4C,oBAAoBF,GACzB,MAEJA,GAAWl4C,EAAK40C,OAAOhgD,KAAKsjD,GACvB/4C,GAAQ+4C,KACTA,GAAYA,QAGhBA,GAAWpoD,EAAEsc,IAAI6rC,EAAQ,SAAU9V,GAC/B,MAAOA,GAAMj/B,UAMrB,KAHa,YAAT5K,IACA0H,EAAK08B,eAEJ3lC,EAAM,EAAG/F,EAASinD,EAAOjnD,OAAQ+F,EAAM/F,EAAQ+F,IACnC,YAATuB,GACA2/C,EAAOlhD,GAAK02C,OAAOyK,EAASnhD,IACf,WAATuB,EACAm+C,EAASv1C,KAAKi3C,EAAcn4C,EAAKq2C,kBAAkB4B,EAAOlhD,IAAQmhD,EAASnhD,IAC3D,WAATuB,GACP0H,EAAK02C,wBAAwBuB,EAAOlhD,GAAMmhD,EAASnhD,KAGvDiJ,EAAK+2C,wBAAwBkB,EAAOlhD,KAIhD2/C,wBAAyB,SAAUvU,EAAO72B,GACtClS,KAAKi/C,2BAA2BlW,EAAO,SAAU52B,EAAOqU,GACpDtuB,GAAM0C,WAAW4rB,EAAMrU,GAAQD,MAGvC+sC,2BAA4B,SAAUlW,EAAOpoB,GACzC3gB,KAAKk/C,kBAAkB,SAAU14B,GAC7B,GAAIrU,GAAQ08B,EAAqBroB,EAAOuiB,EACxC,IAAI52B,KAEA,MADAwO,GAASxO,EAAOqU,IACT,KAInBm3B,wBAAyB,SAAU5U,GAC/B/oC,KAAKi/C,2BAA2BlW,EAAO,SAAU52B,EAAOqU,GACpDA,EAAMpe,OAAO+J,EAAO,MAG5BqqC,UAAW,SAAUhhD,GACjB,GAAIosC,GAAQ5nC,KAAKs8C,mBAAwCt8C,KAAKw7C,OAAO5B,OAA/B55C,KAAKw7C,OAAOhgD,IAClD,OAAOosC,GAAKz/B,KAAKnI,KAAKw7C,OAAQhgD,IAElC0jD,kBAAmB,SAAUv+B,GACzB3gB,KAAK09C,UAAU19C,KAAKg6C,cAAer5B,IAEvC+8B,UAAW,SAAUliD,EAAMmlB,GACnBnlB,GAAQA,EAAK5D,SACToI,KAAKs8C,mBACLnO,EAAe3yC,EAAMmlB,GAErBA,EAASnlB,KAIrB2jD,kBAAmB,SAAUpW,GACzB,GAAIsU,GAAU1/C,EAAKgjB,EAAW,SAAU6F,GAEhC,GADA7oB,EAAMkxC,EAAqBroB,EAAOuiB,GAC9BprC,KAEA,MADA0/C,GAAW72B,EAAM7oB,IACV,EAInB,OADAqC,MAAKk/C,kBAAkBv+B,GAChB08B,GAEXoB,aAAc,SAAU1V,GACpB,GAAIsU,GAAWr9C,KAAKm/C,kBAAkBpW,EACtC/oC,MAAK09C,UAAU19C,KAAKowC,MAAO,SAAU5pB,GACjC,GAAI7oB,GAAMoxC,EAAavoB,EAAOuiB,EAC1BprC,IAAO,KACH0/C,GAActU,EAAMuL,UAAW+I,EAASsB,UAMxCn4B,EAAMpe,OAAOzK,EAAK,IALlB6oB,EAAM7oB,GAAK02C,OAAOgJ,GACQ,UAAtBA,EAASsB,YACTn4B,EAAM7oB,GAAK66B,OAAQ,QAQvC4mB,QAAS,SAAUnB,EAAUziD,GACzB,GAAIoL,GAAO5G,IACX4G,GAAKoB,QAAQuqC,IAAgBrzC,KAAM,WACnC0H,EAAKoB,QAAQwqC,IACb5rC,EAAKg0C,UAAU7jB,OAAOr2B,IAClBm4C,QAAS,SAAUiG,EAAU5/C,GACzB,GAAIiC,GAAUzK,EAAEq2B,KAAKkxB,EAAU,SAAUhrB,GACrC,MAAOA,GAAE/zB,MAAQA,IAClB,EACCiC,IACAA,EAAQi7C,SACJ0C,SAAUA,EACVD,OAAQ19C,EAAQ09C,OAChB3/C,KAAMA,KAIlB65C,MAAO,SAAU+F,EAAUO,EAAQtG,GAC/B,IAAK,GAAIp7C,GAAM,EAAGA,EAAMsgD,EAASrmD,OAAQ+F,IACrCsgD,EAAStgD,GAAK2hD,OAAOR,EAEzBl4C,GAAKmyC,MAAM+F,EAAUO,EAAQtG,KAElCv9C,KAEP0iD,YAAa,SAAUH,EAASC,EAASR,GACrC,GAAI52C,GAAO5G,KAAMi+C,IA4BjB,OA3BIr3C,GAAKxG,QAAQ47C,QACT+B,EAAQnmD,QACRqmD,EAASn2C,KAAKpR,EAAEylD,SAAS,SAAUoD,GAC/BA,EAASrgD,KAAO,SAChBqgD,EAASV,OAASd,KAGtBC,EAAQpmD,QACRqmD,EAASn2C,KAAKpR,EAAEylD,SAAS,SAAUoD,GAC/BA,EAASrgD,KAAO,SAChBqgD,EAASV,OAASb,KAGtBR,EAAU5lD,QACVqmD,EAASn2C,KAAKpR,EAAEylD,SAAS,SAAUoD,GAC/BA,EAASrgD,KAAO,UAChBqgD,EAASV,OAASrB,KAG1B52C,EAAKw4C,QAAQnB,GACTziD,MACIuiD,QAASn3C,EAAK40C,OAAOtS,UAAUp/B,EAAOi0C,IACtCC,QAASp3C,EAAK40C,OAAOtS,UAAUp/B,EAAOk0C,IACtCR,UAAW52C,EAAK40C,OAAOtS,UAAUp/B,EAAO0zC,QAI7CS,GAEXuB,SAAU,SAAUhkD,EAAMqjD,EAAQ3/C,GAC9B,GAAI0H,GAAO5G,IACX,OAAOtJ,GAAEylD,SAAS,SAAUoD,GACxB34C,EAAKoB,QAAQuqC,IAAgBrzC,KAAMA,IACnC0H,EAAKoB,QAAQwqC,IACb5rC,EAAKg0C,UAAU17C,GAAMiJ,KAAKvB,EAAKg0C,UAAWl6C,IACtCm4C,QAAS,SAAUiG,GACfS,EAASnD,SACL0C,SAAUA,EACVD,OAAQA,EACR3/C,KAAMA,KAGd65C,MAAO,SAAU+F,EAAUO,EAAQtG,GAC/BwG,EAASD,OAAOR,GAChBl4C,EAAKmyC,MAAM+F,EAAUO,EAAQtG,KAElCv9C,MACJ2F,WAEPg9C,MAAO,SAAU51B,EAAQ/sB,GACrB,GAAiBmC,GAAK/F,EAAlBgP,EAAO5G,KAAmBi+C,KAAewB,EAAY74C,EAAK40C,OAAOtS,UAAUp/B,EAAOtO,GACtF,IAAIoL,EAAKxG,QAAQ47C,MACTxgD,EAAK5D,QACLqmD,EAASn2C,KAAKlB,EAAK44C,UAAWhkD,MAAQqjD,OAAQY,IAAejkD,EAAM+sB,QAGvE,KAAK5qB,EAAM,EAAG/F,EAAS4D,EAAK5D,OAAQ+F,EAAM/F,EAAQ+F,IAC9CsgD,EAASn2C,KAAKlB,EAAK44C,UAAWhkD,KAAMikD,EAAU9hD,KAASnC,EAAKmC,IAAO4qB,GAG3E,OAAO01B,IAEXrW,KAAM,SAAUpsC,GAAV,GACEoL,GAAO5G,KAAM6yB,EAASjsB,EAAK84C,QAAQlkD,GACnC+jD,EAAW7oD,EAAEylD,UA8BjB,OA7BAv1C,GAAK+4C,cAAc9sB,EAAQ,WACvB,GAAI+sB,GAAch5C,EAAKoB,QAAQuqC,IAAgBrzC,KAAM,QAChD0gD,IAuBDh5C,EAAKi5C,kBACLN,EAASnD,QAAQwD,KAvBjBh5C,EAAKoB,QAAQwqC,IACb5rC,EAAKqzC,WACLrzC,EAAKoB,QAAQ,SACTpB,EAAKq1C,SACLr1C,EAAKg0C,UAAUhT,MACXpsC,KAAMq3B,EACNgmB,QAAS,SAAUr9C,GACfoL,EAAKqzC,WACLrzC,EAAKiyC,QAAQr9C,EAAMq3B,GACnB0sB,EAASnD,WAEbrD,MAAO,WACH,GAAIzwB,GAAO9hB,GAAM2B,KAAKpN,UACtB6L,GAAKmyC,MAAMjyC,MAAMF,EAAM0hB,GACvBi3B,EAASD,OAAOx4C,MAAMy4C,EAAUj3B,MAGF,MAA/B1hB,EAAKxG,QAAQ+6C,iBACpBv0C,EAAKiyC,QAAQjyC,EAAKy1C,cAAexpB,GACjC0sB,EAASnD,cAOdmD,EAASp+C,WAEpB2+C,gBAAiB,SAAUtkD,GACvB,MAAOwE,MAAKw7C,OAAOrP,WAAW3wC,IAElCq9C,QAAS,SAAUr9C,GAAV,GAoBGgrB,GACAu5B,EACAhX,EACAF,EACAlrC,EAEIkmB,EAIA0oB,EACAC,EA9BR5lC,EAAO5G,KAAMI,EAAUwG,EAAKxG,OAKhC,IAJAwG,EAAKoB,QAAQyqC,IACTqM,SAAUtjD,EACV0D,KAAM,SAEN0H,EAAKq1C,SAAU,CAEf,GADAzgD,EAAOoL,EAAK40C,OAAOxS,MAAMxtC,GACrBoL,EAAKo4C,oBAAoBxjD,GAEzB,MADAoL,GAAKi5C,kBACL,CAEJj5C,GAAK8zC,OAAS9zC,EAAK40C,OAAOvT,MAAMzsC,GAC5BoL,EAAK6zC,YAAcr6C,EAAQ27C,mBAC3Bn1C,EAAKo5C,iBAAmBp5C,EAAKk5C,gBAAgBtkD,IAEjDA,EAAOoL,EAAK41C,UAAUhhD,GACtBoL,EAAK08B,kBACF,CAOH,IANA9nC,EAAOoL,EAAK41C,UAAUhhD,GAClBgrB,KACAu5B,KACAhX,EAAQniC,EAAK40C,OAAOzS,MACpBF,EAAUE,EAAQA,EAAMF,QAAU,KAEjClrC,EAAM,EAAGA,EAAMqC,KAAKsjC,WAAW1rC,OAAQ+F,IACpCkmB,EAAK7jB,KAAKsjC,WAAW3lC,GAAKkrC,GAC9BkX,EAAQl8B,GAAMA,CAElB,KAAKlmB,EAAM,EAAGA,EAAMnC,EAAK5D,OAAQ+F,IACzB4uC,EAAO/wC,EAAKmC,GACZ6uC,EAAQD,EAAKoS,UACJ,WAATnS,EACKuT,EAAQxT,EAAK1D,KACd7oC,KAAKsjC,WAAWx7B,KAAK9H,KAAKg9C,gBAAgBzQ,IAG9C/lB,EAAM1e,KAAKykC,EAGnB/wC,GAAOgrB,EACP5f,EAAK8zC,OAASl/C,EAAK5D,OAEvBgP,EAAKuzC,eAAiBvzC,EAAK8zC,OAC3B9zC,EAAKozC,cAAgBx+C,EAAKgL,MAAM,GAChCI,EAAK60C,2BACL70C,EAAKwpC,MAAQxpC,EAAK80C,SAASlgD,GAC3BoL,EAAK83C,6BACL93C,EAAK+1C,aACL/1C,EAAKg2C,UAAUh2C,EAAKwpC,OACpBxpC,EAAKi2C,SAASj2C,EAAKwpC,OACnBxpC,EAAKi5C,mBAETpE,yBAA0B,WACtB,GAAIz7C,KAAKowC,OAASpwC,KAAK26C,+BACnB,IAAK,GAAIh9C,GAAM,EAAGA,EAAMqC,KAAKowC,MAAMx4C,OAAQ+F,IACnCqC,KAAKowC,MAAMzyC,GAAK/D,SAChBoG,KAAKowC,MAAMzyC,GAAK/D,OAASgH,KAKzC+7C,WAAY,SAAUsD,GAGlB,QAASz5B,GAAMhrB,GAAf,GAEamC,GACD8oB,EACA8lB,EAHJC,IACJ,KAAS7uC,EAAM,EAAGA,EAAMnC,EAAK5D,OAAQ+F,IAC7B8oB,EAAWjrB,EAAKyyC,GAAGtwC,GACnB4uC,EAAO9lB,EAAS3c,SAChB2kC,GAAkBhoB,EAASD,MAC3B+lB,EAAK/lB,MAAQA,EAAMC,EAASD,QAE5B+lB,EAAKqC,IAAMnoB,EAASmoB,IAChB7F,IACItiB,EAAS6tB,QACT/H,EAAKoS,UAAY,SACVl4B,EAAS+R,QAChB+T,EAAKoS,UAAY,YAI7BnS,EAAM1kC,KAAKykC,EAEf,OAAOC,GAtBH,GAyBAA,GACAgR,EACK7/C,EACD4uC,EA3BRkC,EAAiBzuC,KAAKs8C,mBACtBvT,EAAQ/oC,KAAKw7C,OAAOzS,KAsBxB,IAAmC,MAA/B/oC,KAAKI,QAAQ+6C,eAAwB,CAGrC,IAFI3O,EAAQhmB,EAAMxmB,KAAKowC,OACnBoN,KACK7/C,EAAM,EAAGA,EAAMqC,KAAKsjC,WAAW1rC,OAAQ+F,IACxC4uC,EAAOvsC,KAAKsjC,WAAW3lC,GAAKmM,SAChCyiC,EAAKoS,UAAY,UACjBnB,EAAU11C,KAAKykC,EAEnBvsC,MAAKq8C,YAAY7P,EAAMt2B,OAAOsnC,IAC1ByC,IACAjgD,KAAKg6C,cAAgBh6C,KAAKw8C,UAAUhQ,MAIhDoQ,UAAW,SAAUphD,GACjB,GAAIoL,GAAO5G,KAAMiP,EAAQrI,EAAKs5C,OAAS,EAAGvoD,EAAMsX,EAAQrI,EAAK61C,UAAUjhD,GAAM,GAAM5D,MACnFgP,GAAKqzC,QAAQnyC,MACTmH,MAAOA,EACPtX,IAAKA,EACL6D,KAAMA,EACN2kD,WAAW,GAAInkD,OAAOC,YAE1B2K,EAAKqzC,QAAQj8B,KAAK,SAAUiV,EAAG5hB,GAC3B,MAAO4hB,GAAEhkB,MAAQoC,EAAEpC,SAG3B8pC,MAAO,SAAUqH,EAAKf,EAAQgB,GAC1BrgD,KAAK6/C,kBACL7/C,KAAKgI,QAAQyqC,OACbzyC,KAAKgI,QAAQsqC,IACT8N,IAAKA,EACLf,OAAQA,EACRgB,YAAaA,KAGrBX,QAAS,SAAUlkD,GACf,GAAIoL,GAAO5G,KAAMI,EAAUM,IACnB+mC,KAAM7gC,EAAK6gC,OACXxF,KAAMr7B,EAAKq7B,OACXiF,KAAMtgC,EAAKsgC,OACXD,SAAUrgC,EAAKqgC,WACfjpB,KAAMpX,EAAK0zC,MACXz2C,OAAQ+C,EAAK2zC,QACbzM,MAAOlnC,EAAK4zC,OACZ7N,UAAW/lC,EAAK6zC,YACjBj/C,EA2BP,OA1BKoL,GAAKxG,QAAQy7C,qBACPz7C,GAAQqnC,WACRrnC,GAAQ6hC,WACR7hC,GAAQ8mC,WACR9mC,GAAQ6mC,UAEdrgC,EAAKxG,QAAQquC,eAEP7nC,EAAK40C,OAAOzS,OAAS3oC,EAAQ0tC,QACpC1tC,EAAQ0tC,MAAQqB,EAAwB/uC,EAAQ0tC,MAAOlnC,EAAK40C,OAAOzS,cAF5D3oC,GAAQ0tC,MAIdlnC,EAAKxG,QAAQ07C,gBAEPl1C,EAAK40C,OAAOzS,OAAS3oC,EAAQyD,SACpCzD,EAAQyD,OAASqrC,EAA8B9uC,EAAQyD,OAAQ+C,EAAK40C,OAAOzS,cAFpE3oC,GAAQyD,OAId+C,EAAKxG,QAAQw7C,cAEPh1C,EAAK40C,OAAOzS,OAAS3oC,EAAQ4d,OACpC5d,EAAQ4d,KAAOmxB,EAAwB/uC,EAAQ4d,KAAMpX,EAAK40C,OAAOzS,cAF1D3oC,GAAQ4d,KAIdpX,EAAKxG,QAAQ27C,iBAEPn1C,EAAK40C,OAAOzS,OAAS3oC,EAAQusC,YACpCvsC,EAAQusC,UAAYwC,EAAwB/uC,EAAQusC,UAAW/lC,EAAK40C,OAAOzS,cAFpE3oC,GAAQusC,UAIZvsC,GAEXu/C,cAAe,SAAUv/C,EAASugB,GAC9B,GAAI/Z,GAAO5G,IACN4G,GAAK05C,mBAKN15C,EAAK25C,UACD5/B,SAAU3a,GAAM2a,EAAU/Z,GAC1BxG,QAASA,IANbwG,EAAK05C,oBAAqB,EAC1B15C,EAAK25C,SAAW3pD,EAChB+pB,MAQRk/B,gBAAiB,WACb,GAAIj5C,GAAO5G,IACX4G,GAAK05C,oBAAqB,EACtB15C,EAAK25C,UACL35C,EAAK+4C,cAAc/4C,EAAK25C,SAASngD,QAASwG,EAAK25C,SAAS5/B,WAGhEq+B,oBAAqB,SAAUF,GAC3B,GAAI9+C,KAAKw7C,OAAOvS,OAAQ,CACpB,GAAIA,GAASjpC,KAAKw7C,OAAOvS,OAAO6V,EAChC,IAAI7V,EAOA,MANAjpC,MAAKgI,QAAQsqC,IACT8N,IAAK,KACLf,OAAQ,cACRgB,YAAa,eACbpX,OAAQA,KAEL,EAGf,OAAO,GAEXuX,YAAa,SAAUhlD,GACnB,GAAIutC,GAAQ/oC,KAAKw7C,OAAOzS,KACxB,UAAIA,IAASvtC,EAAK5D,WACL4D,EAAK,YAAcutC,KAIpC2S,SAAU,SAAUlgD,GAAV,GAUEilD,GATJ75C,EAAO5G,KAAM+oC,EAAQniC,EAAK40C,OAAOzS,KAuBrC,OAtBAniC,GAAK+zC,gCAAiC,EAClCn/C,YAAgBD,KAChBqL,EAAK+zC,gCAAiC,EAClC/zC,EAAK45C,YAAYhlD,KACjBA,EAAK0D,KAAO0H,EAAK40C,OAAOzS,MACxBvtC,EAAKq3C,QAAQr3C,EAAMA,MAGnBilD,EAAY75C,EAAKqgC,aAAergC,EAAKxG,QAAQy7C,aAAepgD,EAAsBF,GACtFC,EAAO,GAAIilD,GAAUjlD,EAAMoL,EAAK40C,OAAOzS,OACvCvtC,EAAK5B,OAAS,WACV,MAAOgN,GAAKhN,WAGhBgN,EAAK01C,oBACLpO,EAAe1yC,EAAMutC,GAErBniC,EAAK85C,gBAAkB95C,EAAKwpC,OAASxpC,EAAKwpC,gBAAiB70C,IAC3DqL,EAAKwpC,MAAMvoC,OAAO4xB,GAAQ7yB,EAAK85C,gBAE/B95C,EAAK85C,eAAiB16C,GAAMY,EAAK23C,QAAS33C,GAEvCpL,EAAK4L,KAAKqyB,GAAQ7yB,EAAK85C,iBAElCC,sBAAuB,SAAUhqB,EAAQnQ,GAAlB,GACf5f,GAAO5G,KACPioC,EAAQ51B,SAASzL,EAAK8zC,OAAQ,GAC7B7N,GAASjmC,EAAK8zC,UACfzS,EAAQ51B,SAASzL,EAAKuzC,eAAgB,KAE3B,QAAXxjB,EACAsR,GAASzhB,EAAM5uB,OACG,WAAX++B,EACPsR,GAASzhB,EAAM5uB,OACG,eAAX++B,GAAsC,SAAXA,GAAsB/vB,EAAKxG,QAAQy7C,aAEnD,SAAXllB,IACPsR,EAAQrhC,EAAKuzC,eAAiB9nC,SAASzL,EAAK8zC,OAAQ,KAFpDzS,EAAQrhC,EAAKuzC,eAIjBvzC,EAAK8zC,OAASzS,GAElBsW,QAAS,SAAUt2C,GAAV,GACYtK,GAAK/F,EASd6P,EATJb,EAAO5G,KAAmB22B,EAAS1uB,EAAIA,EAAE0uB,OAAS,EACtD,IAAe,WAAXA,EACA,IAAKh5B,EAAM,EAAG/F,EAASqQ,EAAEue,MAAM5uB,OAAQ+F,EAAM/F,EAAQ+F,IAC5CsK,EAAEue,MAAM7oB,GAAK22C,OAAUrsC,EAAEue,MAAM7oB,GAAK22C,SACrC1tC,EAAK08B,WAAWx7B,KAAKG,EAAEue,MAAM7oB,KAIrCiJ,EAAKxG,QAAQg9C,UAAwB,QAAXzmB,GAA+B,WAAXA,GAAkC,eAAXA,GAUrE/vB,EAAK+5C,sBAAsBhqB,EAAQ1uB,EAAIA,EAAEue,UACzC5f,EAAKi2C,SAASj2C,EAAKwpC,MAAOnoC,KAVtBR,EAAU,SAAU6gB,GACA,SAAhBA,EAAKqO,SACL/vB,EAAKiB,OAAO,SAAUJ,GACtBb,EAAK+5C,sBAAsBhqB,EAAQ1uB,EAAEue,SAG7C5f,EAAKxP,MAAM,SAAUqQ,GACrBb,EAAKs1C,SAMb0E,qBAAsB,SAAUplD,EAAM4E,GAClCA,EAAUA,KACV,IAAIu4C,GAAQ,GAAI5N,GAAMvvC,GAAO2wC,EAAa/rC,EAAQusC,UAAW9oC,EAASzD,EAAQyD,MAI9E,OAHIA,KACA80C,EAAQA,EAAM90C,OAAOA,IAElB80C,EAAMhM,UAAUR,IAE3B0Q,SAAU,SAAUrhD,EAAMyM,GACtB,GAA+BjJ,GAA3B4H,EAAO5G,KAAMI,IACbwG,GAAKxG,QAAQy7C,gBAAiB,IAC9Bz7C,EAAQ6hC,KAAOr7B,EAAKs5C,MACpB9/C,EAAQqnC,KAAO7gC,EAAKi6C,OAASj6C,EAAKwzC,UAC9Bh6C,EAAQ6hC,OAASrrC,GAAagQ,EAAKyzC,QAAUzjD,GAAagQ,EAAKwzC,YAAcxjD,IAC7EwJ,EAAQ6hC,MAAQr7B,EAAKyzC,MAAQ,GAAKzzC,EAAKwzC,YAG3CxzC,EAAKxG,QAAQw7C,iBAAkB,IAC/Bx7C,EAAQ4d,KAAOpX,EAAK0zC,OAEpB1zC,EAAKxG,QAAQ07C,mBAAoB,IACjC17C,EAAQyD,OAAS+C,EAAK2zC,SAEtB3zC,EAAKxG,QAAQquC,kBAAmB,IAChCruC,EAAQ0tC,MAAQlnC,EAAK4zC,QAErB5zC,EAAKxG,QAAQ27C,oBAAqB,IAClC37C,EAAQusC,UAAY/lC,EAAK6zC,WACzB7zC,EAAKo5C,iBAAmBp5C,EAAKg6C,qBAAqBplD,EAAM4E,IAE5DpB,EAAS4H,EAAKk6C,cAActlD,EAAM4E,GAClCwG,EAAK+hB,KAAK3pB,EAAOxD,MACbwD,EAAOipC,QAAUrxC,GAAcgQ,EAAKxG,QAAQ07C,kBAC5Cl1C,EAAK8zC,OAAS17C,EAAOipC,OAEzBhgC,EAAIA,MACJA,EAAEue,MAAQve,EAAEue,OAAS5f,EAAKszC,MAC1BtzC,EAAKoB,QAAQyxB,GAAQxxB,IAEzB64C,cAAe,SAAUtlD,EAAM4E,GAC3B,MAAO2qC,GAAM2N,QAAQl9C,EAAM4E,IAE/B2gD,YAAa,SAAU3gD,GACnB,GAAIwG,GAAO5G,IA+BX,OA9BII,KAAYxJ,IACZgQ,EAAKwzC,UAAYh6C,EAAQ6mC,SACzBrgC,EAAKyzC,MAAQj6C,EAAQ8mC,KACrBtgC,EAAK0zC,MAAQl6C,EAAQ4d,KACrBpX,EAAK2zC,QAAUn6C,EAAQyD,OACvB+C,EAAK4zC,OAASp6C,EAAQ0tC,MACtBlnC,EAAK6zC,WAAar6C,EAAQusC,UAC1B/lC,EAAKs5C,MAAQt5C,EAAKo6C,mBAAqB5gD,EAAQ6hC,KAC/Cr7B,EAAKi6C,MAAQzgD,EAAQqnC,KACjB7gC,EAAKs5C,QAAUtpD,IACfgQ,EAAKs5C,MAAQt5C,EAAKo6C,mBAAqBp6C,EAAKq7B,OAC5C7hC,EAAQ6hC,KAAOr7B,EAAKq7B,QAEpBr7B,EAAKi6C,QAAUjqD,GAAagQ,EAAKwzC,YAAcxjD,IAC/CgQ,EAAKi6C,MAAQj6C,EAAKwzC,UAClBh6C,EAAQqnC,KAAO7gC,EAAKi6C,OAEpBzgD,EAAQ4d,OACRpX,EAAK0zC,MAAQl6C,EAAQ4d,KAAOgtB,EAAc5qC,EAAQ4d,OAElD5d,EAAQyD,SACR+C,EAAK2zC,QAAUn6C,EAAQyD,OAASwnC,EAAgBjrC,EAAQyD,SAExDzD,EAAQ0tC,QACRlnC,EAAK4zC,OAASp6C,EAAQ0tC,MAAQ5B,EAAe9rC,EAAQ0tC,QAErD1tC,EAAQusC,YACR/lC,EAAK6zC,WAAar6C,EAAQusC,UAAYX,EAAmB5rC,EAAQusC,aAGlEvsC,GAEXu4C,MAAO,SAAUv4C,GAAV,GACCpB,GAKA4gD,EAJAqB,EAASjhD,KAAKI,QAAQw7C,eAAiB57C,KAAKI,QAAQy7C,cAAgB77C,KAAKI,QAAQ07C,iBAAmB97C,KAAKI,QAAQquC,gBAAkBzuC,KAAKI,QAAQ27C,gBACpJ,OAAIkF,KAAWjhD,KAAKowC,QAAUx5C,GAAmC,IAAtBoJ,KAAKowC,MAAMx4C,UAAkBoI,KAAKsjC,WAAW1rC,OAC7EoI,KAAK4nC,KAAK5nC,KAAK+gD,YAAY3gD,KAElCw/C,EAAc5/C,KAAKgI,QAAQuqC,IAAgBrzC,KAAM,SAChD0gD,IACD5/C,KAAKgI,QAAQwqC,IACbxzC,EAASgB,KAAK8gD,cAAc9gD,KAAKowC,MAAOpwC,KAAK+gD,YAAY3gD,IACpDJ,KAAKI,QAAQ07C,kBAEV97C,KAAK06C,OADL17C,EAAOipC,QAAUrxC,EACHoI,EAAOipC,MAEPjoC,KAAKowC,MAAMx4C,QAGjCoI,KAAKggD,iBAAmBhgD,KAAK4gD,qBAAqB5gD,KAAKowC,MAAOhwC,GAC9DJ,KAAK2oB,KAAK3pB,EAAOxD,MACjBwE,KAAKgI,QAAQyqC,IAAcvzC,KAAM,SACjCc,KAAKgI,QAAQyxB,IAAUjT,MAAOxnB,EAAOxD,QAElC9E,EAAEylD,WAAWC,QAAQwD,GAAaz+C,YAE7C+/C,MAAO,SAAUvgC,GAAV,GACC/Z,GAAO5G,KACPiE,EAAK,SAAU27C,GACXA,KAAgB,GAAQ1jD,GAAWykB,IACnCA,EAASxY,KAAKvB,GAGtB,OAAO5G,MAAKmhD,SAAS9C,KAAKp6C,IAE9Bk9C,OAAQ,SAAU/gD,GACd,GAAIwG,GAAO5G,IACX,OAAO4G,GAAK+xC,MAAMj4C,OACdwmC,KAAMtgC,EAAKsgC,OACXD,SAAUrgC,EAAKqgC,WACfjpB,KAAMpX,EAAKoX,OACXna,OAAQ+C,EAAK/C,SACbiqC,MAAOlnC,EAAKknC,QACZnB,UAAW/lC,EAAK+lC,aACjBvsC,KAEPghD,KAAM,SAAUhhD,GACZ,GAAIwG,GAAO5G,KAAMknC,EAAOtgC,EAAKsgC,OAAQe,EAAQrhC,EAAKqhC,OAElD,IADA7nC,EAAUA,MACL8mC,KAAQe,GAASf,EAAO,EAAItgC,EAAKy6C,cAOtC,MAJAz6C,GAAKs5C,MAAQt5C,EAAKo6C,mBAAqB9Z,EAAOtgC,EAAK6gC,OACnDP,GAAQ,EACR9mC,EAAQ8mC,KAAOA,EACftgC,EAAKu6C,OAAO/gD,GACL8mC,GAEXlL,KAAM,SAAU57B,GACZ,GAAIwG,GAAO5G,KAAMknC,EAAOtgC,EAAKsgC,MAE7B,IADA9mC,EAAUA,MACL8mC,GAAiB,IAATA,EAOb,MAJAtgC,GAAKs5C,MAAQt5C,EAAKo6C,mBAAqBp6C,EAAKs5C,MAAQt5C,EAAK6gC,OACzDP,GAAQ,EACR9mC,EAAQ8mC,KAAOA,EACftgC,EAAKu6C,OAAO/gD,GACL8mC,GAEXA,KAAM,SAAU4F,GACZ,GAAiB7K,GAAbr7B,EAAO5G,IACX,OAAI8sC,KAAQl2C,GACRk2C,EAAMr0C,GAAKC,IAAID,GAAKuZ,IAAIvZ,GAAKC,IAAIo0C,EAAK,GAAIlmC,EAAKy6C,cAAe,GAC9Dz6C,EAAKu6C,QAASja,KAAM4F,IACpB,IAEJ7K,EAAOr7B,EAAKq7B,OACLA,IAASrrC,EAAY6B,GAAKgX,OAAOwyB,GAAQ,IAAMr7B,EAAK6gC,QAAU,IAAM,EAAI7wC,IAEnFqwC,SAAU,SAAU6F,GAChB,GAAIlmC,GAAO5G,IACX,OAAI8sC,KAAQl2C,GACRgQ,EAAKu6C,QACDla,SAAU6F,EACV5F,KAAM,IAEV,GAEGtgC,EAAK6gC,QAEhBzpB,KAAM,SAAU8uB,GACZ,GAAIlmC,GAAO5G,IACX,OAAI8sC,KAAQl2C,GACRgQ,EAAKu6C,QAASnjC,KAAM8uB,IACpB,GAEGlmC,EAAK0zC,OAEhBz2C,OAAQ,SAAUipC,GACd,GAAIlmC,GAAO5G,IACX,OAAI8sC,KAAQl2C,EACDgQ,EAAK2zC,SAEhB3zC,EAAKoB,QAAQ,SACbpB,EAAKu6C,QACDt9C,OAAQipC,EACR5F,KAAM,IAHVtgC,IAMJknC,MAAO,SAAUhB,GACb,GAAIlmC,GAAO5G,IACX,OAAI8sC,KAAQl2C,GACRgQ,EAAKu6C,QAASrT,MAAOhB,IACrB,GAEGlmC,EAAK4zC,QAEhBvS,MAAO,WACH,MAAO51B,UAASrS,KAAK06C,QAAU,EAAG,KAEtC/N,UAAW,SAAUG,GACjB,GAAIlmC,GAAO5G,IACX,OAAI8sC,KAAQl2C,GACRgQ,EAAKu6C,QAASxU,UAAWG,IACzB,GAEGlmC,EAAK6zC,YAEhBtO,WAAY,WACR,GAAIntC,GAASgB,KAAKggD,gBAIlB,OAHI74B,IAAcnoB,KACdA,EAASgB,KAAKshD,iBAAiBthD,KAAK2sC,cAEjC3tC,GAEXsiD,iBAAkB,SAAUnV,GAAV,GAGNQ,GAIKhvC,EANTqB,IACJ,KAAKmoB,GAAcglB,GAKf,IAJIQ,KACC5mC,GAAQomC,KACTA,GAAcA,IAETxuC,EAAM,EAAGA,EAAMwuC,EAAWv0C,OAAQ+F,IACvCgvC,EAAUR,EAAWxuC,GAAKgvC,WAAa,EACvC3tC,EAAOmtC,EAAWxuC,GAAKogB,OAAS4uB,CAGxC,OAAO3tC,IAEXi+C,kBAAmB,SAAUlU,GACzB,GAA2BnvC,GAAQk0C,EAAOnwC,EAAK/F,EAA3CgiD,EAAS55C,KAAK8tC,OAClB,KAAKnwC,EAAMi8C,EAAOhiD,OAAS,EAAGA,EAAS,EAAG+F,GAAO/F,EAAQ+F,IACrDmwC,EAAQ8L,EAAOj8C,GACf/D,GACIgE,MAAOmrC,EAAMtlB,IAAIqqB,EAAM/vB,OACvBA,MAAO+vB,EAAM/vB,MACbyI,MAAO5sB,GAAUA,IAAWmvC,GAC5ByE,eAAgB5zC,EAChBuyC,WAAYnsC,KAAKshD,iBAAiBxT,EAAM3B,YAGhD,OAAOvyC,IAEXynD,WAAY,WACR,GAAIz6C,GAAO5G,KAAMinC,EAAWrgC,EAAKqgC,YAAcrgC,EAAKqhC,OACpD,OAAOxvC,IAAK8oD,MAAM36C,EAAKqhC,SAAW,GAAKhB,IAE3Cua,QAAS,SAAUvf,EAAMwF,GACrB,GAAI7gC,GAAO5G,KAAMrI,EAAMc,GAAKuZ,IAAIiwB,EAAOwF,EAAM7gC,EAAKqhC,QAClD,QAAKrhC,EAAKxG,QAAQy7C,cAAgBj1C,EAAKwpC,MAAMx4C,OAAS,GAG/CgP,EAAK66C,WAAWxf,EAAMtqC,GAAKC,OAAS,GAE/C8pD,UAAW,WACP,GAAIpT,GAAStuC,KAAKi6C,OAClB,OAAO3L,GAAOA,EAAO12C,OAAS,KAC1BqX,MAAO,EACPtX,IAAK,EACL6D,UAGRmmD,aAAc,WACV,GAAIrT,GAAStuC,KAAKi6C,OAClB,OAAO3L,GAAO12C,QAAU02C,EAAO,GAAG9yC,KAAK5D,QAAU02C,EAAO,GAAG9yC,KAAK,GAAGozC,KAEvEgT,yBAA0B,WACtB5hD,KAAK6hD,yBAA0B,GAEnCC,WAAY,WACR,OAAO,GAAI9lD,OAAOC,WAEtB67C,MAAO,SAAU7V,EAAMwF,GAAhB,GAIC7gC,GAAam7C,EAAwDhkD,EAAgDvC,EAOjHwmD,EACAC,EACAC,EACA/V,CARR,IALAnsC,KAAKmiD,yBAA2BniD,KAAK8hD,aACrC9hD,KAAK6hD,yBAA0B,EAC/B5f,EAAOxpC,GAAKuZ,IAAIiwB,GAAQ,EAAGjiC,KAAKioC,SAC5BrhC,EAAO5G,KAAM+hD,EAAWtpD,GAAKC,IAAID,GAAK+B,MAAMynC,EAAOwF,GAAO,GAAKA,EAAM1pC,EAAOtF,GAAKuZ,IAAI+vC,EAAWta,EAAM7gC,EAAKqhC,SAC/GzsC,EAAOoL,EAAK66C,WAAWxf,EAAMxpC,GAAKuZ,IAAIiwB,EAAOwF,EAAM7gC,EAAKqhC,UACpDzsC,EAAK5D,OAAT,CACIgP,EAAK25C,SAAW3pD,EAChBgQ,EAAKs5C,MAAQje,EAAOr7B,EAAKq7B,OAASxpC,GAAKuZ,IAAIjU,GAAO6I,EAAKy6C,aAAe,GAAKz6C,EAAK6gC,QAAUsa,EAC1Fn7C,EAAKo6C,mBAAqB/e,EAC1Br7B,EAAKi6C,MAAQpZ,EACTua,EAASp7C,EAAKxG,QAAQy7C,aACtBoG,EAAUr7C,EAAKxG,QAAQw7C,cACvBsG,EAAYt7C,EAAKxG,QAAQ07C,gBACzB3P,EAAavlC,EAAKxG,QAAQ27C,gBAC9B,KACIn1C,EAAKxG,QAAQy7C,cAAe,EACvBj1C,EAAK01C,oBAAwB11C,EAAKknC,SAAWlnC,EAAKknC,QAAQl2C,SAC3DgP,EAAKxG,QAAQw7C,eAAgB,GAEjCh1C,EAAKxG,QAAQ07C,iBAAkB,EAC/Bl1C,EAAKxG,QAAQy7C,cAAe,EAC5Bj1C,EAAKxG,QAAQ27C,kBAAmB,EAC5BiG,IACAp7C,EAAK60C,2BACL70C,EAAKwpC,MAAQ50C,EAAOoL,EAAK80C,SAASlgD,IAEtCoL,EAAKi2C,SAASrhD,GAChB,QACEoL,EAAKxG,QAAQy7C,aAAemG,EAC5Bp7C,EAAKxG,QAAQw7C,cAAgBqG,EAC7Br7C,EAAKxG,QAAQ07C,gBAAkBoG,EAC/Bt7C,EAAKxG,QAAQ27C,iBAAmB5P,OAIpC1E,KAAS7wC,IACJgQ,EAAKw7C,aAAaL,EAAUhkD,GAUtBgkD,EAAW9f,GAClBr7B,EAAKy7C,SAAStkD,EAAM0pC,EAAM,WACtB7gC,EAAKkxC,MAAM7V,EAAMwF,KAXrB7gC,EAAKy7C,SAASN,EAAUta,EAAM,WACtBxF,EAAO8f,GAAYhkD,EAAO6I,EAAKqhC,UAAYrhC,EAAKw7C,aAAarkD,EAAMtF,GAAKuZ,IAAIjU,EAAO0pC,EAAM7gC,EAAKqhC,UAC9FrhC,EAAKy7C,SAAStkD,EAAM0pC,EAAM,WACtB7gC,EAAKkxC,MAAM7V,EAAMwF,KAGrB7gC,EAAKkxC,MAAM7V,EAAMwF,OAUrCga,WAAY,SAAUxyC,EAAOtX,GAAjB,GACgCmgD,GAAkBwK,EAASC,EAASC,EAAYC,EAAUC,EAAWC,EAAUC,EAA4KC,EAAUnvC,EAAO9b,EAY5RomB,EAZpBpX,EAAO5G,KAAMsuC,EAAS1nC,EAAKqzC,QAAgBz+C,KAAmF4E,EAAUwG,EAAKxG,QAAS6gD,EAAS7gD,EAAQw7C,eAAiBx7C,EAAQy7C,cAAgBz7C,EAAQ07C,iBAAmB17C,EAAQquC,gBAAkBruC,EAAQ27C,gBACjR,KAAKuG,EAAU,EAAG1qD,EAAS02C,EAAO12C,OAAQ0qD,EAAU1qD,EAAQ0qD,IAExD,GADAxK,EAAQxJ,EAAOgU,GACXrzC,GAAS6oC,EAAM7oC,OAASA,GAAS6oC,EAAMngD,IAAK,CAE5C,IADA+b,EAAQ,EACH6uC,EAAUD,EAASC,EAAU3qD,EAAQ2qD,IAGtC,GAFAzK,EAAQxJ,EAAOiU,GACfM,EAAWj8C,EAAK61C,UAAU3E,EAAMt8C,MAAM,GAClCqnD,EAASjrD,QAAUqX,EAAQyE,GAASokC,EAAM7oC,QAC1CyzC,EAAY5K,EAAMt8C,KAClBmnD,EAAW7K,EAAMngD,IACZspD,IACGjjC,EAAOkuB,EAAetlC,EAAKknC,aAAe53B,OAAO80B,EAAcpkC,EAAKoX,aACxE4kC,EAAYh8C,EAAKk6C,cAAchJ,EAAMt8C,MACjCwiB,KAAMA,EACNna,OAAQ+C,EAAK/C,WAEjBg/C,EAAWH,EAAYE,EAAUpnD,KAC7BonD,EAAU3a,QAAUrxC,IACpB+rD,EAAWC,EAAU3a,QAG7Bua,EAAa,EACTvzC,EAAQyE,EAAQokC,EAAM7oC,QACtBuzC,EAAavzC,EAAQyE,EAAQokC,EAAM7oC,OAEvCwzC,EAAWI,EAASjrD,OAChB+qD,EAAWhrD,IACX8qD,GAAuBE,EAAWhrD,GAEtC+b,GAAS+uC,EAAWD,EACpBhnD,EAAOoL,EAAKk8C,aAAatnD,EAAMknD,EAAWF,EAAYC,GAClD9qD,GAAOmgD,EAAMngD,KAAO+b,GAAS/b,EAAMsX,GACnC,MAAOzT,EAInB,OAGR,UAEJsnD,aAAc,SAAUtnD,EAAMs8C,EAAO7V,EAAMwF,GACvC,GAAIznC,KAAKs8C,mBAAoB,CACzB,GAA2ByG,GAAvBC,EAAOlL,EAAMhuC,QAKjB,OAJItO,GAAK5D,SACLmrD,EAAYvnD,EAAKA,EAAK5D,OAAS,IAEnCg2C,EAAYmV,EAAWC,EAAM/gB,EAAMwF,GAC5BjsC,EAAK0a,OAAO8sC,GAEvB,MAAOxnD,GAAK0a,OAAO4hC,EAAMtxC,MAAMy7B,EAAMwF,KAEzCxF,KAAM,WACF,GAAIr7B,GAAO5G,IACX,OAAI4G,GAAKs5C,QAAUtpD,EACRgQ,EAAKyzC,QAAUzjD,GAAagQ,EAAKyzC,MAAQ,IAAMzzC,EAAK6gC,QAAU,GAAK7wC,EAEvEgQ,EAAKs5C,OAEhB+C,kBAAmB,WACf,MAAOjjD,MAAKghD,oBAAsB,GAEtCvZ,KAAM,WACF,MAAOznC,MAAK6gD,OAAS7gD,KAAKo6C,WAE9B8I,wBAAyB,SAAUjhB,EAAMlkC,EAAM4iB,EAAU4E,GAAhC,GACjB3e,GAAO5G,KACPmgD,EAAYv5C,EAAKk7C,YACrB,OAAO,UAAUtmD,GACb,GAKOmC,GAAK/F,EAAQorD,EALhBvF,GAAQ,EAAO3F,GACX7oC,MAAOgzB,EACPtqC,IAAKoG,EACLvC,QACA2kD,UAAWv5C,EAAKk7C,aASxB,IAPAl7C,EAAKi5C,kBACLj5C,EAAKoB,QAAQyqC,IACTqM,SAAUtjD,EACV0D,KAAM,SAEV1D,EAAOoL,EAAK40C,OAAOxS,MAAMxtC,GACzBwnD,EAAOp8C,EAAK41C,UAAUhhD,GAClBwnD,EAAKprD,OAAQ,CACb,IAAK+F,EAAM,EAAG/F,EAASgP,EAAKqzC,QAAQriD,OAAQ+F,EAAM/F,EAAQ+F,IACtD,GAAIiJ,EAAKqzC,QAAQt8C,GAAKsR,QAAUgzB,EAAM,CAClCwb,GAAQ,EACR3F,EAAQlxC,EAAKqzC,QAAQt8C,EACrB,OAGH8/C,GACD72C,EAAKqzC,QAAQnyC,KAAKgwC,GAG1BA,EAAMt8C,KAAOoL,EAAK80C,SAASsH,GAC3BlL,EAAMngD,IAAMmgD,EAAM7oC,MAAQrI,EAAK61C,UAAU3E,EAAMt8C,MAAM,GAAM5D,OAC3DgP,EAAKqzC,QAAQj8B,KAAK,SAAUiV,EAAG5hB,GAC3B,MAAO4hB,GAAEhkB,MAAQoC,EAAEpC,QAEvBrI,EAAK8zC,OAAS9zC,EAAK40C,OAAOvT,MAAMzsC,IAC5B+pB,GAAU46B,GAAav5C,EAAKu7C,2BAA6Bv7C,EAAKi7C,2BAC1DlhC,GAAYqiC,EAAKprD,OACjB+oB,IAEA/Z,EAAKoB,QAAQyxB,UAK7B4oB,SAAU,SAAUpgB,EAAMwF,EAAM9mB,GAC5B,GAAI/Z,GAAO5G,KAAMjC,EAAOtF,GAAKuZ,IAAIiwB,EAAOwF,EAAM7gC,EAAKqhC,SAAU7nC,GACrDqnC,KAAMA,EACNxF,KAAMA,EACNiF,KAAMjF,EAAOwF,EAAO,EACpBR,SAAUQ,EACVzpB,KAAMpX,EAAK0zC,MACXz2C,OAAQ+C,EAAK2zC,QACbzM,MAAOlnC,EAAK4zC,OACZ7N,UAAW/lC,EAAK6zC,WAEnB7zC,GAAKw7C,aAAangB,EAAMlkC,GAkBlB4iB,GACPA,KAlBAiK,aAAahkB,EAAKu8C,UAClBv8C,EAAKu8C,SAAWz5B,WAAW,WACvB9iB,EAAK+4C,cAAcv/C,EAAS,WACnBwG,EAAKoB,QAAQuqC,IAAgBrzC,KAAM,SAUpC0H,EAAKi5C,kBATLj5C,EAAKg0C,UAAUhT,MACXpsC,KAAMoL,EAAK84C,QAAQt/C,GACnBy4C,QAASjyC,EAAKs8C,wBAAwBjhB,EAAMlkC,EAAM4iB,GAClDo4B,MAAO,WACH,GAAIzwB,GAAO9hB,GAAM2B,KAAKpN,UACtB6L,GAAKmyC,MAAMjyC,MAAMF,EAAM0hB,SAOxC,OAKX86B,kBAAmB,SAAUnhB,EAAMwF,EAAM9mB,GACrC,GAAI/Z,GAAO5G,KAAMjC,EAAOtF,GAAKuZ,IAAIiwB,EAAOwF,EAAM7gC,EAAKqhC,SAAU7nC,GACrDqnC,KAAMA,EACNxF,KAAMA,EACNiF,KAAMjF,EAAOwF,EAAO,EACpBR,SAAUQ,EACVzpB,KAAMpX,EAAK0zC,MACXz2C,OAAQ+C,EAAK2zC,QACbzM,MAAOlnC,EAAK4zC,OACZ7N,UAAW/lC,EAAK6zC,WAEnB7zC,GAAKw7C,aAAangB,EAAMlkC,GAOlB4iB,GACPA,IAPK/Z,EAAKoB,QAAQuqC,IAAgBrzC,KAAM,UACpC0H,EAAKg0C,UAAUhT,MACXpsC,KAAMoL,EAAK84C,QAAQt/C,GACnBy4C,QAASjyC,EAAKs8C,wBAAwBjhB,EAAMlkC,EAAM4iB,GAAU,MAO5EyhC,aAAc,SAAUnzC,EAAOtX,GAC3B,GAAwCgG,GAAK/F,EAAzCgP,EAAO5G,KAAMsuC,EAAS1nC,EAAKqzC,OAC/B,KAAKt8C,EAAM,EAAG/F,EAAS02C,EAAO12C,OAAQ+F,EAAM/F,EAAQ+F,IAChD,GAAI2wC,EAAO3wC,GAAKsR,OAASA,GAASq/B,EAAO3wC,GAAKhG,KAAOA,EACjD,OAAO,CAGf,QAAO,GAEXkmD,uBAAwB,SAAU9U,GAAV,GAChB/pC,GAAQy+C,EAAO3F,EACVn6C,EAAS/F,CAAlB,KAAS+F,EAAM,EAAG/F,EAASoI,KAAKi6C,QAAQriD,OAAQ+F,EAAM/F,IAClDkgD,EAAQ93C,KAAKi6C,QAAQt8C,GACrBqC,KAAK09C,UAAU5F,EAAMt8C,KAAM,SAAUgrB,GACjCxnB,EAAS2vC,EAAYnoB,EAAOuiB,GACxB/pC,IACAy+C,GAAQ,MAGZA,GARsD9/C,OAalEmgD,oBAAqB,WAAA,GACIhG,GAAOuL,EACnB1lD,EAAS/F,EADd0rD,EAAc,CAClB,KAAS3lD,EAAM,EAAG/F,EAASoI,KAAKi6C,QAAQriD,OAAQ+F,EAAM/F,EAAQ+F,IAC1Dm6C,EAAQ93C,KAAKi6C,QAAQt8C,GACrBm6C,EAAM7oC,MAAQ6oC,EAAM7oC,MAAQq0C,EAC5BD,EAAcrjD,KAAKy8C,UAAU3E,EAAMt8C,MAAM,GAAM5D,OAC/C0rD,EAAcxL,EAAMngD,IAAM0rD,EAC1BvL,EAAMngD,IAAMmgD,EAAM7oC,MAAQo0C,KAIlC1R,MACJA,GAAUtJ,OAAS,SAAUjoC,EAAS5E,EAAMopB,GACxC,GAAIg2B,GAAW2I,EAAmBnjD,EAAQw6C,UAAYlkD,EAAEgK,UAAWN,EAAQw6C,WAAa,IAwBxF,OAvBI2I,IACAA,EAAiB3b,WAAc2b,GAAiB3b,OAASpnC,IAAW2iB,IAAKogC,EAAiB3b,MAAS2b,EAAiB3b,KAC/F,SAAjBxnC,EAAQlB,OACRqkD,EAAiB3+B,WAAaA,GAE9BxkB,EAAQlB,OACRhH,GAAMsD,KAAK0sC,WAAahwC,GAAMsD,KAAK0sC,eACnChwC,GAAMsD,KAAKssC,QAAU5vC,GAAMsD,KAAKssC,YAC3B5vC,GAAMsD,KAAK0sC,WAAW9nC,EAAQlB,MAEvBypC,GAAczwC,GAAMsD,KAAK0sC,WAAW9nC,EAAQlB,OAGpDqkD,EAAmB7iD,IAAO,KAAUxI,GAAMsD,KAAK0sC,WAAW9nC,EAAQlB,MAAOqkD,GAFzE3I,EAAY,GAAI1iD,IAAMsD,KAAK0sC,WAAW9nC,EAAQlB,MAAMwB,GAAO6iD,GAAoB/nD,KAAMA,KAFrFtD,GAAMqsB,aAAa,sCAAyCnkB,EAAQlB,KAAO,8FAAgG,QAM/KkB,EAAQk5C,OAAS54C,IAAO,KAAUxI,GAAMsD,KAAKssC,QAAQ1nC,EAAQlB,MAAOkB,EAAQk5C,SAE3EsB,IACDA,EAAY1+C,GAAWqnD,EAAiB3b,MAAQ2b,EAAmB,GAAI/R,IAAgB+R,KAG3F3I,EAAY,GAAIrJ,IAAiB/1C,KAAM4E,EAAQ5E,WAE5Co/C,GAEXl/C,GAAW2sC,OAAS,SAAUjoC,IACtB2F,GAAQ3F,IAAYA,YAAmB7E,OACvC6E,GAAY5E,KAAM4E,GAEtB,IAA0IzC,GAAK/F,EAAoBmmB,EAA/J6G,EAAaxkB,MAAe5E,EAAOopB,EAAWppB,KAAM6tC,EAASzkB,EAAWykB,OAAQtyB,EAAQ6N,EAAW7N,MAAO+d,EAASlQ,EAAWkQ,OAAqBiU,IAWvJ,IAVKvtC,IAAQ6tC,GAAWzkB,EAAWg2B,YAC3B7jC,EACAvb,EAAOk0C,EAAW34B,EAAOsyB,GAClBvU,IACPt5B,EAAO4zC,EAAYta,EAAQuU,GACvBzkB,EAAWkpB,QAAUl3C,GAAa4E,EAAK,IAAMA,EAAK,GAAG+zC,WAAa34C,IAClEguB,EAAWkpB,MAAQ,cAI3B51C,GAAMsD,KAAK4tC,OAASC,KAAYzkB,EAAW00B,SAAW10B,EAAW00B,OAAOvQ,OAAQ,CAChF,IAAKprC,EAAM,EAAG/F,EAASyxC,EAAOzxC,OAAQ+F,EAAM/F,EAAQ+F,IAChDogB,EAAQsrB,EAAO1rC,GACXogB,EAAM7e,OACN6pC,EAAMhrB,EAAMA,OAASA,EAGxBoJ,IAAc4hB,KACfnkB,EAAW00B,OAAS54C,IAAO,EAAMkkB,EAAW00B,QAAUvQ,OAASM,OAAQN,MAQ/E,MALAnkB,GAAWppB,KAAOA,EAClBs5B,EAAS,KACTlQ,EAAWkQ,OAAS,KACpB/d,EAAQ,KACR6N,EAAW7N,MAAQ,KACZ6N,YAAsBlpB,IAAakpB,EAAa,GAAIlpB,IAAWkpB,IAyDtEgtB,GAAOxI,EAAM3yC,QACboyC,QAAS,KACTloC,KAAM,SAAU/C,GAAV,GA2BM4lD,GA1BJ58C,EAAO5G,KAAMgxC,EAAcpqC,EAAKoqC,aAAepzC,GAASA,EAAMozC,YAAayS,EAAgB,QAASC,IACxGxrD,IAAMsD,KAAK4tC,MAAMnlC,GAAGtD,KAAKwH,KAAKvB,EAAMhJ,SACzBgJ,GAAKjM,WAAa6F,KACzBijD,EAAgB78C,EAAKjM,UAEzB+oD,GACIpK,QACI99C,KAAMioD,EACN1a,OACIiI,YAAaA,EACbntB,GAAIjd,EAAKiiC,QACTQ,OAAQziC,EAAKyiC,gBAIdziC,GAAKjM,WAAa6F,IACzBE,GAAOgjD,EAAiB98C,EAAKjM,UAEjC+oD,EAAgBloD,KAAOoC,EAClBozC,IACDA,EAAc0S,EAAgBpK,OAAO99C,YAE9Bw1C,KAAgBxwC,KACvBwwC,EAAc94C,GAAMorB,OAAO0tB,IAE3B90C,GAAW80C,KACPwS,EAAoBxS,EAAY7oC,KAAKvB,EAAMA,GAE3CA,EAAKoqC,cADLwS,GAAkD,IAA7BA,EAAkB5rD,WAGlB4rD,GAG7B58C,EAAK+8C,iBAAmBD,EACpB98C,EAAKoqC,aACLpqC,EAAKg9C,gBAETh9C,EAAKkqC,WAAalzC,IAASA,EAAMkzC,UAErC8S,cAAe,WAAA,GAEPjpD,GAAUigD,EAAWtS,EADrB1hC,EAAO5G,IAEL4G,GAAKjM,mBAAoBgB,MAC3BhB,EAAWiM,EAAKjM,SAAW,GAAIgB,IAAuBiL,EAAK+8C,kBAC3D/I,EAAYjgD,EAASigD,UACrBtS,EAAesS,EAAUtS,aACzBsS,EAAUtS,aAAe,SAAU9sC,EAAM0D,GAKrC,MAJA1D,GAAKoL,EAAKiiC,SAAW,MAAQjiC,EAAKid,GAC9BykB,IACA9sC,EAAO8sC,EAAa9sC,EAAM0D,IAEvB1D,GAEXb,EAASf,OAAS,WACd,MAAOgN,IAEXjM,EAASyM,KAAKqyB,GAAQ,SAAUxxB,GAC5BA,EAAE0pB,KAAO1pB,EAAE0pB,MAAQ/qB,EACnBA,EAAKoB,QAAQyxB,GAAQxxB,KAEzBtN,EAASyM,KAAKkrC,GAAO,SAAUrqC,GAC3B,GAAIuoC,GAAa5pC,EAAKhN,QAClB42C,KACAvoC,EAAE0pB,KAAO1pB,EAAE0pB,MAAQ/qB,EACnB4pC,EAAWxoC,QAAQsqC,GAAOrqC,MAGlCrB,EAAKi9C,yBAGbC,OAAQ,SAAU/a,GACd/oC,KAAK4jD,gBACL5jD,KAAK+jD,QAAO,GACZ/jD,KAAKrF,SAAS2G,IAAIynC,IAEtBiI,aAAa,EACbgT,MAAO,WAEH,IADA,GAAIxlC,GAAaxe,KAAKwe,aAAcwlC,EAAQ,EACrCxlC,GAAcA,EAAWA,YAC5BwlC,IACAxlC,EAAaA,EAAWA,WAAaA,EAAWA,aAAe,IAEnE,OAAOwlC,IAEXH,qBAAsB,WAClB,GAAI/Y,GAAY9qC,KAAK2jD,iBAAiBrK,OAAO99C,IAC7CwE,MAAK8qC,GAAa,SAAW9qC,KAAKrF,SAASa,QAE/CyoD,gBAAiB,WACbjkD,KAAK8wC,SAAU,EACf9wC,KAAK6jD,wBAETK,KAAM,WAAA,GAGEvpD,GAAUwG,EAFVf,KACAmoB,EAAS,QAsBb,OApBIvoB,MAAKgxC,aACLhxC,KAAK4jD,gBACLjpD,EAAWqF,KAAKrF,SAChByF,EAAQJ,KAAK6oC,SAAW,MAAQ7oC,KAAK6jB,GAChC7jB,KAAK8wC,UACNn2C,EAASy1C,MAAQx5C,EACjB2xB,EAAS,QAEb5tB,EAAS4M,IAAIkyB,GAAQzzB,GAAMhG,KAAKikD,gBAAiBjkD,OAC7CA,KAAKmkD,eACL/jD,EAAQyD,QACJka,MAAO,eACPgoB,SAAU,KACVnoC,OAAO,IAGfuD,EAAUxG,EAAS4tB,GAAQnoB,IAE3BJ,KAAK+jD,QAAO,GAET5iD,GAAWzK,EAAEylD,WAAWC,UAAUj7C,WAE7Cqd,WAAY,WACR,GAAInL,GAAQrT,KAAKpG,QACjB,OAAOyZ,GAAMzZ,UAEjBmqD,OAAQ,SAAUnmD,GACd,MAAIA,KAAUhH,EAGHoJ,KAAK8wC,SAFZ9wC,KAAK8wC,QAAUlzC,EAAfoC,IAKRwzC,gBAAiB,SAAUz1B,GACvB,MAAOqrB,GAAMnlC,GAAGuvC,gBAAgBrrC,KAAKnI,KAAM+d,IAAoB,aAAVA,GAAkC,YAAVA,GAAiC,gBAAVA,GAAqC,qBAAVA,KAYnIpiB,GAAyBD,GAAWgF,QACpCC,KAAM,SAAUP,GACZ,GAAIuxB,GAAOigB,GAAKn7C,QAASkE,SAAUyF,GAC/BA,GAAQyD,SAAWzD,EAAQ07C,kBAC3B97C,KAAKokD,oBAAsBhkD,EAAQyD,OACnCzD,EAAQyD,OAAS,MAErBnI,GAAWuI,GAAGtD,KAAKwH,KAAKnI,KAAMU,IAAO,MACjC44C,QACInQ,UAAWxX,EACXoX,MAAOpX,IAEZvxB,IACHJ,KAAKqwC,yBAETA,sBAAuB,WACnB,GAAIzpC,GAAO5G,IACX4G,GAAKwpC,MAAMhpC,KAAKkrC,GAAO,SAAUrqC,GAC7BrB,EAAKoB,QAAQsqC,GAAOrqC,MAG5B2/B,KAAM,SAAUpsC,GACZ,GAAIwD,GAAStD,GAAWuI,GAAG2jC,KAAKz/B,KAAKnI,KAAMxE,EAI3C,OAHIwE,MAAKokD,qBACLpkD,KAAK6D,OAAO7D,KAAKokD,qBAEdplD,GAEXkpB,OAAQ,SAAUyJ,GACd,GAAuD3yB,GAAnDwf,EAAamT,EAAKnT,aAAcoG,EAAa5kB,IAQjD,OAPIwe,IAAcA,EAAWolC,gBACzBh/B,EAAapG,EAAW7jB,UAE5BqE,EAAStD,GAAWuI,GAAGikB,OAAO/f,KAAKyc,EAAY+M,GAC3CnT,IAAeoG,EAAWppB,OAAO5D,SACjC4mB,EAAWwyB,aAAc,GAEtBhyC,GAEX65C,QAAS1I,EAAW,WACpB30C,KAAM20C,EAAW,QACjB4M,OAAQ,SAAU5qC,EAAO42B,GACrB,GAAIvqB,GAAaxe,KAAKpG,QAKtB,OAJI4kB,IAAcA,EAAWolC,gBACzBplC,EAAWwyB,aAAc,EACzBxyB,EAAWolC,iBAERloD,GAAWuI,GAAG84C,OAAO50C,KAAKnI,KAAMmS,EAAO42B,IAElDllC,OAAQ,SAAUipC,GACd,MAAIA,KAAQl2C,EACDoJ,KAAKu6C,SAEXv6C,KAAKI,QAAQ07C,kBACd97C,KAAKqkD,uBAAuBvX,GAC5BA,GACI9G,MAAO,KACPtiC,SACIopC,GAEI/uB,MAAO,eACPgoB,SAAU,SACVnoC,OAAO,MAKvBoC,KAAKgI,QAAQ,SACbhI,KAAKmhD,QACDt9C,OAAQipC,EACR5F,KAAM,IAjBV,IAoBJmd,uBAAwB,SAAUpY,GAAV,GAChBgM,GACAC,EACA7O,EACAiI,EACAztC,CAEJ,OADAooC,GAAcZ,EAAgBY,GACzBA,GAA8C,IAA/BA,EAAYvoC,QAAQ9L,QAGxCqgD,EAAWlN,EAAM8K,WAAW5J,GAC5B5C,EAAS4O,EAAS5O,OAClBiI,EAAY2G,EAAS3G,UACrB4G,EAAYr0C,EAAavB,SAAS,cAAe,UAAY21C,EAAS70B,aAClEimB,EAAOzxC,QAAU05C,EAAU15C,UAC3BiM,EAAS,SAAU8M,GACf,MAAOunC,GAAUvnC,EAAG04B,EAAQiI,KAGpCtxC,KAAKskD,0BAA0BzgD,GAT/Bo0C,GAFWj4C,MAafskD,0BAA2B,SAAUzgD,GAAV,GACnB8H,GAGKhO,EAFLnC,EAAOwE,KAAKowC,MACZpxC,GAAS,CACb,KAASrB,EAAM,EAAGA,EAAMnC,EAAK5D,OAAQ+F,IACjCgO,EAAUnQ,EAAKmC,GACXgO,EAAQqlC,aACRrlC,EAAQw4C,aAAex4C,EAAQhR,SAAS2pD,0BAA0BzgD,GAC7D8H,EAAQw4C,eACTx4C,EAAQw4C,aAAetgD,EAAO8H,KAGlCA,EAAQw4C,aAAetgD,EAAO8H,GAE9BA,EAAQw4C,eACRnlD,GAAS,EAGjB,OAAOA,IAEXulD,MAAO,SAAUh8B,EAAQ3qB,GAAlB,GACCD,GAAK/F,EAAQ+5B,EAAMh3B,EACnBa,EAAOwE,KAAKowC,KAChB,IAAK50C,EAAL,CAIA,GADAm2B,EAAOj2B,GAAWuI,GAAGskB,GAAQpgB,KAAKnI,KAAMpC,GAEpC,MAAO+zB,EAGX,KADAn2B,EAAOwE,KAAKy8C,UAAUz8C,KAAKowC,OACtBzyC,EAAM,EAAG/F,EAAS4D,EAAK5D,OAAQ+F,EAAM/F,EAAQ+F,IAE9C,GADAhD,EAAWa,EAAKmC,GAAKhD,SACfA,YAAoBgB,MAG1Bg2B,EAAOh3B,EAAS4tB,GAAQ3qB,IAEpB,MAAO+zB,KAInBlO,IAAK,SAAUI,GACX,MAAO7jB,MAAKukD,MAAM,MAAO1gC,IAE7B64B,SAAU,SAAU9N,GAChB,MAAO5uC,MAAKukD,MAAM,WAAY3V,MA0CtCjzC,GAAuB0sC,OAAS,SAAUjoC,GACtCA,EAAUA,GAAWA,EAAQ0H,MAAStM,KAAM4E,GAAYA,CACxD,IAAIwkB,GAAaxkB,MAAe5E,EAAOopB,EAAWppB,KAAM6tC,EAASzkB,EAAWykB,OAAQkH,EAAO3rB,EAAW2rB,IACtG,OAAI/0C,IAAQA,EAAKgpD,YACNhpD,EAAKgpD,aAEXhpD,IAAQ6tC,GAAWzkB,EAAWg2B,WAC3BrK,IACA/0C,EAAO80C,EAAUC,EAAMlH,IAG/BzkB,EAAWppB,KAAOA,EACXopB,YAAsBjpB,IAAyBipB,EAAa,GAAIjpB,IAAuBipB,KAE9FitB,GAAS35C,GAAMmM,WAAW3D,QAC1BC,KAAM,SAAUikB,EAAY6/B,EAAUC,GAClCxsD,GAAMmM,WAAWJ,GAAGtD,KAAKwH,KAAKnI,MAC9BA,KAAK2kD,cAAe,EACpB3kD,KAAK4kB,WAAaA,EAClB5kB,KAAKqiD,UAAYqC,CACjB,IAAIrtB,GAASr3B,IACb4kB,GAAWxd,KAAK,SAAU,WACtBiwB,EAAOknB,YAEX35B,EAAWxd,KAAK,QAAS,WACrBiwB,EAAOutB,WAEX5kD,KAAK6kD,sBACL7kD,KAAK8kD,YAAYL,IAErBK,YAAa,SAAUL,GACnBzkD,KAAKykD,SAAWA,EAChBzkD,KAAK+kD,gBAET9W,GAAI,SAAU97B,GACV,GAAI80B,GAAWjnC,KAAKinC,SAAU+d,GAAc,CAC5C,OAAI7yC,IAASnS,KAAKioC,SACdjoC,KAAKgI,QAAQ,cAAgBmK,MAAOA,IAC7B,MAENnS,KAAKilD,UAGNjlD,KAAKilD,YACD9yC,EAAQnS,KAAKklD,YAAc/yC,GAASnS,KAAKiiC,KAAOgF,KAChD+d,EAAchlD,KAAK83C,MAAMl5C,KAAKpE,MAAM2X,EAAQ80B,GAAYA,IAExD90B,IAAUnS,KAAKmlD,mBACfnlD,KAAK+5C,YAEL5nC,IAAUnS,KAAKolD,iBACfplD,KAAK83C,MAAM93C,KAAKqlD,cAAc,GACvBlzC,IAAUnS,KAAKslD,kBACtBtlD,KAAK83C,MAAM93C,KAAKulD,eACTpzC,IAAUnS,KAAKwlD,mBAElBxlD,KAAK83C,MADL93C,KAAKZ,SAAWY,KAAKiiC,KACVjiC,KAAKylD,iBAELzlD,KAAK0lD,mBAGpBV,EACOhlD,KAAK4kB,WAAWqpB,GAAG97B,EAAQnS,KAAKklD,aAEvCllD,KAAKgI,QAAQ,cAAgBmK,MAAOA,IAC7B,OAtBf,EAFWnS,KAAK4kB,WAAW+D,OAAOxW,IA4BtCjU,QAAS,SAAUquC,GACf,MAAOvsC,MAAK4kB,WAAWppB,OAAO0C,QAAQquC,GAAQvsC,KAAKklD,YAEvDjd,MAAO,WACH,MAAO51B,UAASrS,KAAK4kB,WAAWqjB,QAAS,KAE7CmZ,KAAM,WACF,GAAI/pB,GAASr3B,KAAMinC,EAAW5P,EAAO4P,SAAU7nC,EAASi4B,EAAO4K,KAAO5K,EAAOotB,SAAWxd,EAAU8a,EAAWtpD,GAAKC,IAAID,GAAK+B,MAAM4E,EAAS6nC,GAAW,GAAKA,CAC1JjnC,MAAKZ,OAASA,EACdY,KAAK4kB,WAAWy9B,SAASN,EAAU9a,EAAU,WACzC5P,EAAOsuB,WAAWvmD,GAAQ,MAGlC04C,MAAO,SAAU14C,EAAQwmD,GACrB,GAAI5lD,KAAKZ,SAAWA,EAChB,OAAO,CAEX,IAAIi4B,GAASr3B,KAAMinC,EAAWjnC,KAAKinC,SAAU8a,EAAWtpD,GAAKC,IAAID,GAAK+B,MAAM4E,EAAS6nC,GAAW,GAAKA,EAAUriB,EAAa5kB,KAAK4kB,UAIjI,OAHIghC,KACA7D,GAAY9a,GAEZriB,EAAW48B,QAAQpiD,EAAQ6nC,IAC3BjnC,KAAKZ,OAASA,EACdY,KAAK+kD,eACL/kD,KAAK2lD,WAAWvmD,IACT,IACAY,KAAKqiD,WACZz9B,EAAWy9B,SAASN,EAAU9a,EAAU,WACpC5P,EAAOj4B,OAASA,EAChBi4B,EAAO0tB,eACP1tB,EAAOsuB,WAAWvmD,GAAQ,MAEvB,IAIfymD,eAAgB,WACZ,GAAIzmD,GAASY,KAAKZ,MAClBY,MAAKZ,OAAS,KACdY,KAAK83C,MAAM14C,IAEf0mB,QAAS,WACL9lB,KAAK6H,UAETkyC,UAAW,WACP,GAAI1iB,GAASr3B,KAAMinC,EAAWjnC,KAAKinC,SAAU6e,EAAiB9lD,KAAKiiC,KAAOgF,EAAUriB,EAAa5kB,KAAK4kB,UACjGA,GAAW48B,QAAQsE,EAAgB7e,IAAcjnC,KAAK2kD,eAAgB3kD,KAAKqiD,WAC5EriD,KAAK2kD,cAAe,EACpB3kD,KAAKgI,QAAQ,eACTi6B,KAAM6jB,EACNre,KAAMR,IAEVriB,EAAWy9B,SAASyD,EAAgB7e,EAAU,WAC1C5P,EAAOstB,cAAe,EACtBttB,EAAOrvB,QAAQ,cACXi6B,KAAM6jB,EACNre,KAAMR,QAKtB0e,WAAY,SAAUvmD,EAAQ2mD,GACtB/lD,KAAKZ,SAAWA,IAGpBY,KAAKklD,WAAa9lD,EAClBY,KAAKgmD,WAAaD,EAClB/lD,KAAK4kB,WAAWkzB,MAAM14C,EAAQY,KAAKinC,UACnCjnC,KAAK4kB,WAAWg9B,6BAEpBgD,OAAQ,WACJ5kD,KAAKimD,cAAe,GAExB1H,QAAS,WACL,GAAI35B,GAAa5kB,KAAK4kB,UACtB5kB,MAAKpI,OAASoI,KAAKilD,UAAYrgC,EAAW88B,YAAY/pD,IAAMitB,EAAW+D,OAAO/wB,OAC1EoI,KAAKimD,eACLjmD,KAAK6kD,sBACL7kD,KAAK+kD,eACL/kD,KAAKimD,cAAe,EACpBjmD,KAAKgI,QAAQ,SAAW5I,OAAQY,KAAKZ,UAEzCY,KAAKgI,QAAQ,UACThI,KAAKgmD,YACLhmD,KAAKgI,QAAQ,gBAEVhI,MAAKgmD,YAEhBnB,oBAAqB,WACjB,GAAIjgC,GAAa5kB,KAAK4kB,UACtB5kB,MAAKkmD,cAAgBthC,EAAW+8B,eAChC3hD,KAAKklD,WAAallD,KAAKZ,OAASwlB,EAAWqd,QAAU,EACrDjiC,KAAKinC,SAAWriB,EAAWqiB,WAC3BjnC,KAAKilD,UAAYrgC,EAAWxkB,QAAQy7C,cAExCkJ,aAAc,WACV,GAAI9d,GAAWjnC,KAAKinC,SAAU7nC,EAASY,KAAKZ,OAAQqlD,EAAWzkD,KAAKykD,SAAUxiB,EAAOrjC,KAAK2iD,KAAKniD,EAAS6nC,GAAYA,CACpHjnC,MAAKiiC,KAAOA,EACZjiC,KAAKolD,iBAAmBnjB,EAAOgF,EAAW,EAC1CjnC,KAAKslD,kBAAoBrjB,EAAOwiB,EAAW,EAC3CzkD,KAAKmlD,kBAAoBljB,EAAOrjC,KAAKpE,MAAMysC,EAAW,EAAI,GAC1DjnC,KAAKwlD,kBAAoBxlD,KAAKZ,OAAS,EACvCY,KAAKqlD,aAAepjB,EAAOgF,EAAWwd,EACtCzkD,KAAKulD,cAAgBtjB,EACrBjiC,KAAKylD,iBAAmBrmD,EAASqlD,EACjCzkD,KAAK0lD,kBAAoBzjB,EAAOgF,KAGpC6K,GAAc55C,GAAMmM,WAAW3D,QAC/BC,KAAM,SAAUikB,EAAYuhC,GACxB,GAAIC,GAAcpmD,IAClB9H,IAAMmM,WAAWJ,GAAGtD,KAAKwH,KAAKi+C,GAC9BpmD,KAAK4kB,WAAaA,EAClB5kB,KAAKmmD,UAAYA,EACjBnmD,KAAK06C,OAAS,EACd16C,KAAKq3B,OAAS,GAAIwa,IAAOjtB,EAAwB,EAAZuhC,GACrCnmD,KAAKq3B,OAAOjwB,MACRi/C,WAAc,SAAUp+C,GACpBm+C,EAAYp+C,QAAQ,cAAgBmK,MAAOlK,EAAEkK,SAEjDm0C,YAAe,SAAUr+C,GACrBm+C,EAAYp+C,QAAQ,eAChBi6B,KAAMh6B,EAAEg6B,KACRwF,KAAMx/B,EAAEw/B,QAGhB8e,WAAc,SAAUt+C,GACpBm+C,EAAYp+C,QAAQ,cAChBi6B,KAAMh6B,EAAEg6B,KACRwF,KAAMx/B,EAAEw/B,QAGhB+e,MAAS,WACLJ,EAAY1L,OAAS,EACrB0L,EAAYp+C,QAAQ,UAExBiZ,OAAU,WACNmlC,EAAY1L,OAAS97C,KAAK2iD,KAAKvhD,KAAKpI,OAASwuD,EAAYD,WACzDC,EAAYp+C,QAAQ,UAChBigC,MAAOme,EAAYne,QACnB7oC,OAAQY,KAAKZ,aAK7BymD,eAAgB,WACZ7lD,KAAKq3B,OAAOwuB,kBAEhB5X,GAAI,SAAU97B,GAAV,GAC2Fo6B,GAIlFzxC,EAJLu8B,EAASr3B,KAAKq3B,OAAQ4K,EAAO9vB,EAAQnS,KAAKmmD,UAAW1e,EAAOznC,KAAKmmD,UAAWx9B,IAIhF,KAHI0O,EAAOj4B,OAAS6iC,GAChB5K,EAAO4W,GAAG5W,EAAOj4B,OAAS,GAErBtE,EAAI,EAAGA,EAAI2sC,IAChB8E,EAAOlV,EAAO4W,GAAGhM,EAAOnnC,GACX,OAATyxC,GAFkBzxC,IAKtB6tB,EAAK7gB,KAAKykC,EAEd,OAAO5jB,IAEXsf,MAAO,WACH,MAAOjoC,MAAK06C,QAEhB50B,QAAS,WACL9lB,KAAKq3B,OAAOvR,UACZ9lB,KAAK6H,YAGbnH,IAAO,EAAMxI,GAAMsD,MACf+uC,SAAWuI,KAAMpB,IACjB3G,MAAOA,EACPrvC,WAAYA,GACZC,uBAAwBA,GACxBi2C,KAAMA,GACNX,iBAAkBA,EAClB11C,gBAAiBA,GACjBE,oBAAqBA,EACrB81C,eAAgBA,EAChBC,gBAAiBA,GACjBC,MAAOA,GACPC,WAAYA,GACZtI,MAAOA,EACPyI,OAAQA,GACRC,YAAaA,MAEnBn7C,OAAOuB,MAAM2sB,QACRluB,OAAOuB,OACE,kBAAVzB,SAAwBA,OAAOgiC,IAAMhiC,OAAS,SAAUiiC,EAAIC,EAAIC,IACrEA,GAAMD,OAEV,SAAUniC,EAAGC,QACVA,OAAO,gBACH,aACA,cACDD,IACL,WA42CE,MAj2CC,UAAUE,EAAGE,GA4oBV,QAAS6vD,GAAkBC,EAAa5b,EAAWvnB,GAC/C,MAAOojC,GAAOjmD,QACVC,KAAM,SAAUqC,EAAQ4jD,EAAUxmD,GAC9B,GAAIwG,GAAO5G,IACX2mD,GAAO1iD,GAAGtD,KAAKwH,KAAKvB,EAAM5D,EAAOjL,QAAQ,GAAI6uD,EAAUxmD,GACvDwG,EAAK5D,OAASA,EACd4D,EAAKigD,aAAe7gD,EAAMY,EAAKkgD,YAAalgD,GAC5CA,EAAKmgD,WAAa/gD,EAAMY,EAAKogD,UAAWpgD,GACxCA,EAAKqgD,YAAcjhD,EAAMY,EAAKsgD,WAAYtgD,IAE9CsgD,WAAY,SAAUj/C,GAClBk/C,EAAYl/C,EAAEskC,KAAK,GAAItkC,EAAEzM,KAAMwE,KAAKonD,IAAIn/C,EAAEhG,KAAMgG,EAAEzM,MAAM0a,OAAOlW,KAAK4mD,SAASF,GAAaW,cAE9FP,YAAa,SAAU7+C,GACnB,GAAItK,GAAK/F,EAAQoL,EAAShD,KAAKgD,OAAQwjB,EAAQve,EAAEq/C,cAAgBtkD,EAAOwjB,OACxE,KAAK7oB,EAAM,EAAG/F,EAAS4uB,EAAM5uB,OAAQ+F,EAAM/F,EAAQ+F,IAC/C4pD,EAAkB/gC,EAAM7oB,IAAM,IAGtCypD,IAAK,SAAUnlD,GACXA,EAAKA,GAAM/J,EAAMmpB,EACjB,IAAImmC,IACAtvD,EAAMmpB,GACNnpB,EAAMqpB,QAAQF,GACdnpB,EAAMopB,OAAOD,GAIjB,OAFAmmC,GAAIp/C,OAAO1R,EAAEuM,QAAQhB,EAAIulD,GAAM,GAC/BA,EAAIz/C,QAAQ9F,GACL/J,EAAMkvB,oBAAoBogC,IAErCR,UAAW,SAAU/+C,GACjB,GAAItK,GAAK/F,EAAsG+wB,EAAMhlB,EAApGX,EAAShD,KAAKgD,OAAQwjB,EAAQve,EAAEw/C,YAAczkD,EAAOwjB,QAAS5B,EAAa5hB,EAAO8nC,GAA2B4c,EAAMxvD,EAAMsD,KAAKG,sBAC/I,MAAI+rD,GAAO9iC,YAAsB8iC,KAG7BlhC,EAAM5uB,OAGN,IAFA+wB,EAAO1gB,EAAE0/C,gBAAkB/iC,EAAWwB,WACtCziB,EAAU3D,KAAK4mD,SAASF,GAAaW,WAChC1pD,EAAM,EAAG/F,EAAS+wB,EAAK/wB,OAAQ+F,EAAM/F,EAAQ+F,IAC9CwpD,EAAY3gC,EAAM7oB,GAAMgrB,EAAKhrB,GAAMqC,KAAKonD,IAAIn/C,EAAEhG,KAAM0mB,EAAKhrB,IAAMuY,OAAOvS,KAIlF6T,QAAS,SAAUvP,GACf,GAAiBhN,GAA8B65B,EAAQ8yB,EAAnDhhD,EAAO5G,KAAcgD,EAAS4D,EAAK5D,MACvCiF,GAAIA,MACCA,EAAE0uB,SACH/vB,EAAKkf,UACL9iB,EAAOoE,KAAK,cAAeR,EAAKigD,cAChC7jD,EAAOoE,KAAK,YAAaR,EAAKmgD,YAC9B/jD,EAAOoE,KAAK,aAAcR,EAAKqgD,aAC/BhsD,EAAS2L,EAAKggD,SAASF,GAAajjC,MAChCzgB,EAAO8nC,YAAsB5yC,GAAMsD,KAAKE,YAAcsH,EAAO8nC,IAAc7vC,IACvEA,YAAkB/C,GAAMsD,KAAKE,WAC7BsH,EAAOugB,GAAQtoB,GACRA,GAAUA,EAAOupD,YACxBxhD,EAAOugB,GAAQtoB,EAAOupD,cAEtBxhD,EAAO8nC,GAAWtvC,KAAKP,GACvB65B,EAAS58B,EAAMmpB,GAAGwmC,QAAU7kD,YAAkB9K,GAAMmpB,GAAGwmC,OACvDD,EAAc1vD,EAAMmpB,GAAGymC,aAAe9kD,YAAkB9K,GAAMmpB,GAAGymC,YAC7DlhD,EAAKggD,SAAShpD,QAAUk3B,GAAU8yB,IAClC5kD,EAAOpF,MAAMmqD,EAAwBnhD,EAAKggD,SAAShpD,MAAM6lB,MAAOzgB,EAAO5C,QAAQ4nD,qBAMnGliC,QAAS,WACL,GAAI9iB,GAAShD,KAAKgD,MAClBA,GAAO6E,OAAO,cAAe7H,KAAK6mD,cAClC7jD,EAAO6E,OAAO,YAAa7H,KAAK+mD,YAChC/jD,EAAO6E,OAAO,aAAc7H,KAAKinD,gBAyc7C,QAASgB,GAAqBlwD,EAAS+uB,GACnC,GAAI9jB,GAAS9K,EAAM2uB,WAAW9uB,KAAa+uB,EAC3C,IAAI9jB,EACA,MAAO,IAAIklD,GAAoBllD,GAIvC,QAASmlD,GAAc/gD,GACnB,GAAiBzJ,GAAK/F,EAAQwwD,EAAOC,EAAYtpD,EAAKnB,EAAOi4B,EAAzD72B,IAEJ,KADA62B,EAASzuB,EAAK9O,MAAMgwD,GACf3qD,EAAM,EAAG/F,EAASi+B,EAAOj+B,OAAQ+F,EAAM/F,EAAQ+F,IAChDyqD,EAAQvyB,EAAOl4B,GACf0qD,EAAaD,EAAMlqD,QAAQ,KAC3Ba,EAAMqpD,EAAM7wD,UAAU,EAAG8wD,GACzBzqD,EAAQwqD,EAAM7wD,UAAU8wD,EAAa,GACd,KAAnBzqD,EAAMvG,OAAO,KACbuG,EAAQuqD,EAAcvqD,IAE1BoB,EAAOD,GAAOnB,CAElB,OAAOoB,GAEX,QAASupD,GAAe3B,EAAU3rD,EAAQiE,GACtC,GAAIspD,GAASxpD,IACb,KAAKwpD,IAAW5B,GACZ5nD,EAAOwpD,GAAW,GAAItpD,GAAKjE,EAAQ2rD,EAAS4B,GAEhD,OAAOxpD,GAEX,QAASmoD,GAAYpvD,EAASkD,EAAQ6rB,EAAOnjB,GAA7C,GACkEhG,GAA+FipD,EAAwBxmC,EAqDjLzlB,EArDAopB,EAAOhsB,EAAQiK,aAAa,QAAU9J,EAAM+J,GAAK,QAAcmF,EAAOrP,EAAQiK,aAAa,QAAU9J,EAAM+J,GAAK,QAASwmD,KAAmBC,GAAO,EAAgBtoD,IAsDvK,IArDAuD,EAAUA,IAAY1I,IAClB8oB,GAAQ3c,IACRuhD,EAAc5wD,GAAS,GAEvBgsB,IACA3D,EAAS6nC,EAAqBlwD,EAAS+uB,IAEvC1f,IACAA,EAAO+gD,EAAc/gD,EAAKjQ,QAAQyxD,EAAkB,KAC/CxoC,IACDhgB,EAAUlI,EAAMqK,aAAaxK,GACzB24C,UAAW,GACXmY,WAAY,GACZpmD,SAAU,GACVqmD,YAAarvB,EACbsvB,gBAAgB;AAChBC,UAAU,IAEd5oD,EAAQ0mB,MAAQA,EAChB1G,EAAS,GAAI6oC,GAAclxD,EAASqI,IAExCggB,EAAOnlB,OAASA,EAChB2rD,EAAW2B,EAAenhD,EAAMzD,EAASulD,GACrC9oD,EAAQqC,WACRmkD,EAASnkD,SAAW,GAAI0mD,GAAgBxlD,EAAS,GAAIvD,EAAQqC,WAE7DmkD,EAAS5lC,QACT5Z,EAAKM,OAASN,EAAKM,WACnBN,EAAKM,OAAOsZ,MAAQ5Z,EAAK4Z,MACzB4lC,EAAS5lC,MAAM8E,gBACR8gC,GAAS5lC,OAEhB4lC,EAAS3rD,SACTytD,GAAO,GAEPthD,EAAKlE,OACL0jD,EAAS1jD,KAAOqlD,EAAenhD,EAAKlE,KAAMS,EAASulD,IAEnD9hD,EAAKtN,QACL8sD,EAAS9sD,MAAQyuD,EAAenhD,EAAKtN,MAAO6J,EAASulD,IAErD9hD,EAAKM,SACLk/C,EAASl/C,OAAS6gD,EAAenhD,EAAKM,OAAQ/D,EAASylD,IAEvDhiD,EAAKnP,MACL2uD,EAAS3uD,IAAMswD,EAAenhD,EAAKnP,IAAK0L,EAASulD,IAErD9oC,EAAOhZ,KAAKw/C,IAEZxmC,IACAroB,EAAQitB,mBAAqB5E,GAE7BzlB,EAAW5C,EAAQ4C,SACnB+tD,GAAQ/tD,EAAU,CAClB,IAAKgD,EAAM,EAAGA,EAAMhD,EAAS/C,OAAQ+F,IACjC8qD,EAAa9qD,GAAOhD,EAASgD,EAEjC,KAAKA,EAAM,EAAGA,EAAM8qD,EAAa7wD,OAAQ+F,IACrCwpD,EAAYsB,EAAa9qD,GAAM1C,EAAQ6rB,EAAOnjB,IAI1D,QAASyD,GAAKiiD,EAAKtW,GACf,GAAIp1C,GAAK/F,EAAQ+5B,EAAM7K,EAAQ5uB,EAAMkvB,uBAAuB5gB,MAAM2B,KAAKpN,UAAW,GAGlF,KAFAg4C,EAAS76C,EAAMmgC,WAAW0a,GAC1BsW,EAAM3yD,EAAE2yD,GACH1rD,EAAM,EAAG/F,EAASyxD,EAAIzxD,OAAQ+F,EAAM/F,EAAQ+F,IAC7Cg0B,EAAO03B,EAAI1rD,GACW,IAAlBg0B,EAAKzK,UACLigC,EAAYx1B,EAAMohB,EAAQjsB,GAItC,QAAS6hC,GAAc5wD,EAASuxD,GAAhC,GAaYtmD,GAZJumD,EAAgBxxD,EAAQitB,kBACxBukC,KACAA,EAAczjC,UACV0jC,QACOzxD,GAAQitB,mBACRjtB,EAAQ0xD,gBACf1xD,EAAQ0xD,gBAAgB,sBAExB1xD,EAAQitB,mBAAqB,MAGjCskC,IACItmD,EAAS9K,EAAMuvB,eAAe/wB,EAAEqB,IAChCiL,SAAiBA,GAAO8iB,UAAY3f,GACpCnD,EAAO8iB,WAInB,QAASyhC,GAAkBxvD,EAAS2xD,GAChCf,EAAc5wD,EAAS2xD,GACvBC,EAAsB5xD,EAAS2xD,GAEnC,QAASC,GAAsB5xD,EAAS2xD,GAAxC,GAGiB/rD,GAAS/F,EAFlB+C,EAAW5C,EAAQ4C,QACvB,IAAIA,EACA,IAASgD,EAAM,EAAG/F,EAAS+C,EAAS/C,OAAQ+F,EAAM/F,EAAQ+F,IACtD4pD,EAAkB5sD,EAASgD,GAAM+rD,GAI7C,QAAS7hD,GAAOwhD,GACZ,GAAI1rD,GAAK/F,CAET,KADAyxD,EAAM3yD,EAAE2yD,GACH1rD,EAAM,EAAG/F,EAASyxD,EAAIzxD,OAAQ+F,EAAM/F,EAAQ+F,IAC7C4pD,EAAkB8B,EAAI1rD,IAAM,GAGpC,QAASipB,GAAO5jB,EAAQ4mD,GACpB,GAAI7xD,GAAUiL,EAAOjL,QAASwxD,EAAgBxxD,EAAQ,GAAGitB,kBACrDukC,IACAniD,EAAKrP,EAASwxD,EAActuD,OAAQ2uD,GAG5C,QAAS7B,GAAwBnqD,EAAOirD,GAAxC,GAGQjxD,GACA20C,EAHAr6B,KACAvU,EAAM,CAGV,KAAKkrD,EACD,MAAOjrD,EAEX,IAAIA,YAAiBrC,GAAiB,CAClC,IAAK3D,EAASgG,EAAMhG,OAAQ+F,EAAM/F,EAAQ+F,IACtC4uC,EAAO3uC,EAAMD,GACbuU,EAAOvU,GAAO4uC,EAAK9oB,IAAM8oB,EAAK9oB,IAAIolC,GAActc,EAAKsc,EAEzDjrD,GAAQsU,MACDtU,aAAiBqzC,KACxBrzC,EAAQA,EAAM6lB,IAAIolC,GAEtB,OAAOjrD,GAl0Cd,GAUOsrD,GAsHAE,EAaAD,EAcAxC,EAiBAkD,EAi3BAC,EAsCAb,EAmEAf,EA6BAI,EAA0DM,EAlqC1D1wD,EAAQvB,OAAOuB,MAAOmM,EAAanM,EAAMmM,WAAY4sC,EAAmB/4C,EAAMsD,KAAKy1C,iBAAkB11C,EAAkBrD,EAAMsD,KAAKD,gBAAiBgO,KAAcA,SAAUwgD,KAAclzD,EAAQqB,EAAMrB,MAAOmP,EAAQtP,EAAEsP,MAAOgkD,EAAQ,QAASC,EAAS,SAAUC,EAAS,SAAUC,EAAU,UAAWC,EAAM,MAAOZ,GAAgB,EAAMrjD,EAAW,WAAYszB,EAAS,UACjX,WACG,GAAI72B,GAAIrF,SAASma,cAAc,IAC/B,WACW9U,GAAE1I,KACX,MAAO+N,GACLuhD,GAAgB,MAGpBN,EAAU7kD,EAAW3D,QACrBC,KAAM,SAAUgD,EAASm1B,GACrB,GAAIlyB,GAAO5G,IACXqE,GAAWJ,GAAGtD,KAAKwH,KAAKvB,GACxBA,EAAK3L,OAAS0I,EAAQ,GACtBiD,EAAKjD,QAAUA,EACfiD,EAAKkyB,KAAOA,EACZlyB,EAAKyjD,gBACLzjD,EAAKyjD,aAAavxB,IAAQ,EAC1BlyB,EAAKyxB,WAAazxB,EAAK3L,iBAAkBoJ,GACzCuC,EAAK0jD,QAAU,SAAUriD,GACrBrB,EAAKyjD,aAAapiD,EAAE8V,QAAS,GAE7BnX,EAAKyxB,aACLzxB,EAAK23C,QAAU,SAAUt2C,GACrBrB,EAAK6zB,OAAOxyB,IAEhBrB,EAAK3L,OAAOmM,KAAKqyB,EAAQ7yB,EAAK23C,WAGtC8I,SAAU,WAAA,GAIEztD,GAHJ+J,EAAU3D,KAAK2D,QACf/F,EAAQoC,KAAKyjB,KAOjB,OANI7lB,IAAgC,kBAAhBA,GAAMhE,SAClBA,EAASgE,EAAMhE,SACflD,EAAEuM,QAAQrJ,EAAQ+J,GAAW,IAC7BA,GAAW/J,GAAQsc,OAAOvS,KAG3BA,GAEX82B,OAAQ,SAAUxyB,GACd,GAAIsiD,GAAY18C,EAAIkQ,EAAQ9V,EAAE8V,MAAOnX,EAAO5G,IAC5C,IAAkB,SAAd4G,EAAKkyB,KACLlyB,EAAKoB,QAAQyxB,EAAQxxB,OAErB,KAAKsiD,IAAc3jD,GAAKyjD,aACpB,GAAkC,IAA9BE,EAAWrsD,QAAQ6f,KACnBlQ,EAAK08C,EAAWlzD,OAAO0mB,EAAMnmB,SACxBiW,GAAa,MAAPA,GAAqB,MAAPA,GAAY,CACjCjH,EAAKoB,QAAQyxB,EAAQxxB,EACrB,SAMpBgH,MAAO,SAAUhU,GACbA,EAAOmM,KAAK,MAAOpH,KAAKsqD,UAE5BxqC,KAAM,SAAU7kB,GACZA,EAAO4M,OAAO,MAAO7H,KAAKsqD,UAE9B7mC,IAAK,WACD,GAAI7c,GAAO5G,KAAM/E,EAAS2L,EAAK3L,OAAQkX,EAAQ,EAAG2mB,EAAOlyB,EAAKkyB,KAAM95B,EAAS/D,CAC7E,KAAK2L,EAAKyxB,WACN,MAAOr5B,EAIX,KAFA4H,EAAKqI,MAAMrI,EAAK3L,QAChB+D,EAAS/D,EAAOwoB,IAAIqV,GACb95B,IAAWpI,GAAaqE,GAC3BA,EAAS2L,EAAKjD,UAAUwO,GACpBlX,YAAkBg2C,KAClBjyC,EAAS/D,EAAOwoB,IAAIqV,GAG5B,IAAI95B,IAAWpI,EAEX,IADAqE,EAAS2L,EAAK3L,OACP+D,IAAWpI,GAAaqE,GAC3BA,EAASA,EAAOrB,SACZqB,YAAkBg2C,KAClBjyC,EAAS/D,EAAOwoB,IAAIqV,GAsBhC,OAlBsB,kBAAX95B,KACPmT,EAAQ2mB,EAAK3oB,YAAY,KACrBgC,EAAQ,IACRlX,EAASA,EAAOwoB,IAAIqV,EAAKvhC,UAAU,EAAG4a,KAE1CvL,EAAKqI,MAAMhU,GAEP+D,EADA/D,IAAW2L,EAAK3L,OACP+D,EAAOmJ,KAAKlN,EAAQ2L,EAAK3L,QAEzB+D,EAAOmJ,KAAKlN,GAEzB2L,EAAKkZ,KAAK7kB,IAEVA,GAAUA,IAAW2L,EAAK3L,SAC1B2L,EAAK4jD,cAAgBvvD,EACrBA,EAAO4M,OAAO4xB,EAAQ7yB,EAAK23C,SAASn3C,KAAKqyB,EAAQ7yB,EAAK23C,UAE1D33C,EAAKkZ,KAAKlZ,EAAK3L,QACR+D,GAEX0kB,IAAK,SAAU9lB,GAAV,GACG3C,GAAS+E,KAAKwqD,eAAiBxqD,KAAK/E,OACpC8iB,EAAQ7lB,EAAMorB,OAAOtjB,KAAK84B,MAAM79B,EACf,mBAAV8iB,GACH9iB,IAAW+E,KAAK/E,OAChB8iB,EAAM5V,KAAKlN,EAAQ+E,KAAK/E,OAAQ2C,GAEhCmgB,EAAM5V,KAAKlN,EAAQ2C,GAGvB3C,EAAOyoB,IAAI1jB,KAAK84B,KAAMl7B,IAG9BkoB,QAAS,WACD9lB,KAAKq4B,aACLr4B,KAAK/E,OAAO4M,OAAO4xB,EAAQz5B,KAAKu+C,SAC5Bv+C,KAAKwqD,eACLxqD,KAAKwqD,cAAc3iD,OAAO4xB,EAAQz5B,KAAKu+C,UAG/Cv+C,KAAK6H,YAGTuhD,EAAeF,EAAQxoD,QACvB+iB,IAAK,WACD,GAAuDhc,GAAnDxM,EAAS+E,KAAK/E,OAAQ69B,EAAO94B,KAAK84B,KAAM3mB,EAAQ,CAEpD,KADA1K,EAAUxM,EAAOwoB,IAAIqV,IACbrxB,GAAWxM,GACfA,EAAS+E,KAAK2D,UAAUwO,GACpBlX,YAAkBg2C,KAClBxpC,EAAUxM,EAAOwoB,IAAIqV,GAG7B,OAAO9yB,GAAMyB,EAASxM,MAG1BkuD,EAAkBD,EAAQxoD,QAC1BC,KAAM,SAAU1F,EAAQ69B,EAAMr2B,GAC1B,GAAImE,GAAO5G,IACXkpD,GAAQjlD,GAAGtD,KAAKwH,KAAKvB,EAAM3L,EAAQ69B,GACnClyB,EAAKnE,SAAWA,GAEpB8F,OAAQ,SAAU3K,GACd,GAAI8E,EAIJ,OAHA1C,MAAKiP,MAAMjP,KAAK/E,QAChByH,EAAOxK,EAAMqQ,OAAOvI,KAAKyC,SAAU7E,GACnCoC,KAAK8f,KAAK9f,KAAK/E,QACRyH,KAGXikD,EAAS9vD,EAAM6J,QACfC,KAAM,SAAU5I,EAAS6uD,EAAUxmD,GAC/BJ,KAAKjI,QAAUA,EACfiI,KAAK4mD,SAAWA,EAChB5mD,KAAKI,QAAUA,GAEnBgH,KAAM,SAAUohD,EAAS1e,GACrB,GAAIljC,GAAO5G,IACXwoD,GAAU1e,EAAY0e,EAAQ1e,GAAa0e,EAC3CA,EAAQphD,KAAKqyB,EAAQ,SAAUxxB,GAC3BrB,EAAK4Q,QAAQsyB,GAAa7hC,KAE9BrB,EAAK4Q,QAAQsyB,IAEjBhkB,QAAS,eAGT+jC,EAAclD,EAAOjmD,QACrBmnC,SAAU,WACN,GAAIA,GAAW7nC,KAAKjI,QAAQiK,aAAa,cAAgBhC,KAAKjI,QAAQmH,MAAQ,MAC9E,OAAO2oC,GAAS/qC,eAEpB2tD,YAAa,WACT,MAAOzqD,MAAK0qD,YAAY1qD,KAAKjI,QAAQ6F,MAAOoC,KAAK6nC,aAErD6iB,YAAa,SAAU9sD,EAAOiqC,GAkB1B,MAjBgB,QAAZA,EACAjqC,EAAQ1F,EAAMwe,UAAU9Y,EAAO,cACZ,kBAAZiqC,EACPjqC,EAAQ1F,EAAMwe,UAAU9Y,GACpB,sBACA,qBAEe,UAAZiqC,EACPjqC,EAAQ1F,EAAMiK,WAAWvE,GACN,WAAZiqC,IACPjqC,EAAQA,EAAMd,cAEVc,EAD4B,OAA5B1F,EAAMiK,WAAWvE,KACD1F,EAAMiK,WAAWvE,GAED,SAAxBA,EAAMd,eAGfc,KAGfmsD,EAAQ7mD,KAAOyjD,EAAOjmD,QAClB8W,QAAS,SAAUzY,GACfiB,KAAKjI,QAAQ2lB,aAAa3e,EAAKiB,KAAK4mD,SAAS1jD,KAAKnE,GAAK0kB,UAG/DsmC,EAAQ9xD,IAAM0uD,EAAOjmD,QACjBC,KAAM,SAAU5I,EAAS6uD,EAAUxmD,GAC/BumD,EAAO1iD,GAAGtD,KAAKwH,KAAKnI,KAAMjI,EAAS6uD,EAAUxmD,GAC7CJ,KAAKqB,YAETmW,QAAS,SAAUvZ,GACf,GAAIlG,GAAUrB,EAAEsJ,KAAKjI,SAAUywD,EAAUxoD,KAAK4mD,SAAS3uD,IAAIgG,GAAYpE,EAAWmG,KAAKqB,QAAQpD,GAAauqD,EAAQ/kC,KAChH5pB,GACA9B,EAAQuC,SAAS2D,GAEjBlG,EAAQ4yD,YAAY1sD,MAIhC8rD,EAAQjwD,MAAQ6sD,EAAOjmD,QACnB8W,QAAS,SAAUzY,GACfiB,KAAKjI,QAAQ+B,MAAMiF,GAAOiB,KAAK4mD,SAAS9sD,MAAMiF,GAAK0kB,OAAS,MAGpEsmC,EAAQ3qC,QAAUunC,EAAOjmD,QACrB8W,QAAS,WACDxX,KAAK4mD,SAASxnC,QAAQqE,MACtBzjB,KAAKjI,QAAQ0xD,gBAAgB,YAE7BzpD,KAAKjI,QAAQ2lB,aAAa,WAAY,eAIlDqsC,EAAQa,SAAWjE,EAAOjmD,QACtB8W,QAAS,WACDxX,KAAK4mD,SAASgE,SAASnnC,MACvBzjB,KAAKjI,QAAQ2lB,aAAa,WAAY,YAEtC1d,KAAKjI,QAAQ0xD,gBAAgB,eAIzCM,EAAQzmD,SAAWqjD,EAAOjmD,QACtB8W,QAAS,WACDxX,KAAK4mD,SAAStjD,SAASmgB,MACvBzjB,KAAKjI,QAAQ2lB,aAAa,WAAY,YAEtC1d,KAAKjI,QAAQ0xD,gBAAgB,eAIzCM,EAAQriD,OAASi/C,EAAOjmD,QACpBC,KAAM,SAAU5I,EAAS6uD,EAAUxmD,GAC/BumD,EAAO1iD,GAAGtD,KAAKwH,KAAKnI,KAAMjI,EAAS6uD,EAAUxmD,GAC7CJ,KAAKsH,aAETkQ,QAAS,SAAUzY,GACf,GAAIhH,GAAUrB,EAAEsJ,KAAKjI,SAAUywD,EAAUxoD,KAAK4mD,SAASl/C,OAAO3I,GAAM0I,EAAUzH,KAAKsH,SAASvI,EACxF0I,IACA1P,EAAQ6xB,IAAI7qB,EAAK0I,GAErBA,EAAUzH,KAAKsH,SAASvI,GAAOypD,EAAQ/kC,MACvC1rB,EAAQ2N,GAAG3G,EAAKypD,EAAQvtD,OAAQwM,IAEpCqe,QAAS,WACL,GAA+Bre,GAA3B1P,EAAUrB,EAAEsJ,KAAKjI,QACrB,KAAK0P,IAAWzH,MAAKsH,SACjBvP,EAAQ6xB,IAAIniB,EAASzH,KAAKsH,SAASG,OAI/CsiD,EAAQ30B,KAAOuxB,EAAOjmD,QAClB8W,QAAS,WAAA,GACD4d,GAAOp1B,KAAK4mD,SAASxxB,KAAK3R,MAC1BonC,EAAa7qD,KAAKjI,QAAQiK,aAAa,gBAAkB,EACjD,OAARozB,IACAA,EAAO,IAEX1+B,EAAEsJ,KAAKjI,SAASq9B,KAAKl9B,EAAMqR,SAAS6rB,EAAMy1B,OAGlDd,EAAQvmD,QAAUmjD,EAAOjmD,QACrB8W,QAAS,WAEDxX,KAAKjI,QAAQ+B,MAAMulB,QADnBrf,KAAK4mD,SAASpjD,QAAQigB,MACO,GAEA,UAIzCsmC,EAAQe,UAAYnE,EAAOjmD,QACvB8W,QAAS,WAIDxX,KAAKjI,QAAQ+B,MAAMulB,QAHlBrf,KAAK4mD,SAASkE,UAAUrnC,MAGI,OAFA,MAMzCsmC,EAAQrnD,KAAOikD,EAAOjmD,QAClB8W,QAAS,WACLxX,KAAKjI,QAAQ6f,UAAY5X,KAAK4mD,SAASlkD,KAAK+gB,SAGpDsmC,EAAQnsD,MAAQisD,EAAYnpD,QACxBC,KAAM,SAAU5I,EAAS6uD,EAAUxmD,GAC/BypD,EAAY5lD,GAAGtD,KAAKwH,KAAKnI,KAAMjI,EAAS6uD,EAAUxmD,GAClDJ,KAAKu+C,QAAUv4C,EAAMhG,KAAKy6B,OAAQz6B,MAClCA,KAAKqH,UAAYjH,EAAQ0oD,aAAervB,EACxC/iC,EAAEsJ,KAAKjI,SAAS2N,GAAG1F,KAAKqH,UAAWrH,KAAKu+C,SACxCv+C,KAAK+qD,aAAc,GAEvBtwB,OAAQ,WACJz6B,KAAK+qD,YAAc/qD,KAAKqH,WAAaoyB,EACrCz5B,KAAK4mD,SAASoD,GAAOtmC,IAAI1jB,KAAKyqD,eAC9BzqD,KAAK+qD,aAAc,GAEvBvzC,QAAS,WAAA,GAEG5Z,GAIAsB,CALHc,MAAK+qD,cACFntD,EAAQoC,KAAK4mD,SAASoD,GAAOvmC,MACpB,MAAT7lB,IACAA,EAAQ,IAERsB,EAAOc,KAAK6nC,WACJ,QAAR3oC,EACAtB,EAAQ1F,EAAMqR,SAAS3L,EAAO,cACf,kBAARsB,IACPtB,EAAQ1F,EAAMqR,SAAS3L,EAAO,wBAElCoC,KAAKjI,QAAQ6F,MAAQA,GAEzBoC,KAAK+qD,aAAc,GAEvBjlC,QAAS,WACLpvB,EAAEsJ,KAAKjI,SAAS6xB,IAAI5pB,KAAKqH,UAAWrH,KAAKu+C,YAGjDwL,EAAQ9uD,OAAS0rD,EAAOjmD,QACpBC,KAAM,SAAU5I,EAAS6uD,EAAUxmD,GAC/BumD,EAAO1iD,GAAGtD,KAAKwH,KAAKnI,KAAMjI,EAAS6uD,EAAUxmD,EAC7C,IAAInF,GAAS+E,KAAK4mD,SAAS3rD,OAAOwoB,KAC9BxoB,aAAkB/C,GAAMsD,KAAKE,YAAc0E,EAAQ4oD,YAAa,GAChE/tD,EAAOimD,SAGf1pC,QAAS,SAAUvP,GACf,GAAIrB,GAAO5G,KAAM/E,EAAS2L,EAAKggD,SAAS3rD,OAAOwoB,KAC3CxoB,aAAkBM,IAAmBN,YAAkB/C,GAAMsD,KAAKE,YAClEuM,EAAIA,MACY,OAAZA,EAAE0uB,OACF/vB,EAAKtF,IAAI2G,EAAEkK,MAAOlK,EAAEue,OACD,UAAZve,EAAE0uB,OACT/vB,EAAKshB,OAAOjgB,EAAEkK,MAAOlK,EAAEue,OACJ,cAAZve,EAAE0uB,QACT/vB,EAAK2B,UAGT3B,EAAK2B,UAGbof,UAAW,WACP,GAAI5vB,GAAUiI,KAAKjI,OAOnB,OANsC,SAAlCA,EAAQsL,SAASvG,gBACZ/E,EAAQi4C,QAAQ,IACjBj4C,EAAQ+f,YAAYva,SAASma,cAAc,UAE/C3f,EAAUA,EAAQi4C,QAAQ,IAEvBj4C,GAEX0K,SAAU,WACN,GAAIrC,GAAUJ,KAAKI,QAASqC,EAAWrC,EAAQqC,SAAUY,EAAWrD,KAAK2nB,YAAYtkB,SAASvG,aAiB9F,OAhBK2F,KAGOA,EAFQ,UAAZY,EACIjD,EAAQyoD,YAAczoD,EAAQswC,UACnBx4C,EAAM6Q,OAAO,yCAA0C3I,EAAQyoD,YAAczoD,EAAQswC,UAAWtwC,EAAQswC,WAAatwC,EAAQyoD,YAE7H,2BAEI,SAAZxlD,EACI,4BACQ,MAAZA,GAAgC,MAAZA,EAChB,mBAEA,UAEfZ,EAAWvK,EAAMuK,SAASA,IAEvBA,GAEXnB,IAAK,SAAU6Q,EAAOqU,GAClB,GAAgC7iB,GAAShG,EAAK/F,EAAQ25B,EAAlDx5B,EAAUiI,KAAK2nB,YAA0CxrB,EAAQpE,EAAQizD,WAAU,GAAQC,EAAYlzD,EAAQ4C,SAASwX,EAE5H,IADAzb,EAAEyF,GAAOuG,KAAKxK,EAAMqQ,OAAOvI,KAAKyC,WAAY+jB,IACxCrqB,EAAMxB,SAAS/C,OAEf,IADA+L,EAAU3D,KAAK4mD,SAAS3rD,OAAOosD,WAC1B1pD,EAAM,EAAG/F,EAAS4uB,EAAM5uB,OAAQ+F,EAAM/F,EAAQ+F,IAC/C4zB,EAAQp1B,EAAMxB,SAAS,GACvB5C,EAAQmzD,aAAa35B,EAAO05B,GAAa,MACzC9D,EAAY51B,EAAO/K,EAAM7oB,GAAMqC,KAAKI,QAAQ0mB,OAAQN,EAAM7oB,IAAMuY,OAAOvS,KAInFukB,OAAQ,SAAU/V,EAAOqU,GAAjB,GACA7oB,GAEI4zB,EAFCx5B,EAAUiI,KAAK2nB,WACxB,KAAKhqB,EAAM,EAAGA,EAAM6oB,EAAM5uB,OAAQ+F,IAC1B4zB,EAAQx5B,EAAQ4C,SAASwX,GAC7Bo1C,EAAkBh2B,GAAO,GACrBA,EAAM/S,YAAczmB,GACpBA,EAAQigB,YAAYuZ,IAIhChpB,OAAQ,WACJ,GAAyC5E,GAAShG,EAAK/F,EAAnDqD,EAAS+E,KAAK4mD,SAAS3rD,OAAOwoB,MAA6B1rB,EAAUiI,KAAK2nB,YAAallB,EAAWzC,KAAKyC,UAC3G,IAAc,MAAVxH,EASJ,GANIA,YAAkB/C,GAAMsD,KAAKE,aAC7BT,EAASA,EAAO0tB,QAEd1tB,YAAkBM,IAA8C,mBAA1BgO,EAASpB,KAAKlN,KACtDA,GAAUA,IAEV+E,KAAK4mD,SAASnkD,UAGd,GAFAknD,EAAsB5xD,GAAS,GAC/BrB,EAAEqB,GAAS2K,KAAK1C,KAAK4mD,SAASnkD,SAAS8F,OAAOtN,IAC1ClD,EAAQ4C,SAAS/C,OAEjB,IADA+L,EAAU3D,KAAK4mD,SAAS3rD,OAAOosD,WAC1B1pD,EAAM,EAAG/F,EAASqD,EAAOrD,OAAQ+F,EAAM/F,EAAQ+F,IAChDwpD,EAAYpvD,EAAQ4C,SAASgD,GAAM1C,EAAO0C,GAAMqC,KAAKI,QAAQ0mB,OAAQ7rB,EAAO0C,IAAMuY,OAAOvS,QAIjGjN,GAAEqB,GAAS2K,KAAKxK,EAAMqQ,OAAO9F,EAAUxH,OAInD8uD,EAAQjqD,OACJqrD,QAAStB,EAAYnpD,QACjBC,KAAM,SAAU5I,EAAS6uD,EAAUxmD,GAC/BypD,EAAY5lD,GAAGtD,KAAKwH,KAAKnI,KAAMjI,EAAS6uD,EAAUxmD,GAClDJ,KAAKu+C,QAAUv4C,EAAMhG,KAAKy6B,OAAQz6B,MAClCtJ,EAAEsJ,KAAKjI,SAAS0iC,OAAOz6B,KAAKu+C,UAEhC9jB,OAAQ,WAAA,GAOIx/B,GACAkX,EAIarX,EAXjB/C,EAAUiI,KAAKjI,QACf6F,EAAQoC,KAAKpC,OACjB,IAAoB,SAAhB7F,EAAQmH,KACRtB,EAAQoC,KAAKyqD,cACbzqD,KAAK4mD,SAASuD,GAASzmC,IAAI9lB,OACxB,IAAoB,YAAhB7F,EAAQmH,KAGf,GAFIjE,EAAS+E,KAAK4mD,SAASuD,GAAS1mC,MAEhCxoB,YAAkBM,GAAiB,CAEnC,GADAqC,EAAQoC,KAAKyqD,cACT7sD,YAAiB5B,OACjB,IAASlB,EAAI,EAAGA,EAAIG,EAAOrD,OAAQkD,IAC/B,GAAIG,EAAOH,YAAckB,QAASf,EAAOH,MAAQ8C,EAAO,CACpDuU,EAAQrX,CACR,YAIRqX,GAAQlX,EAAOiD,QAAQN,EAEvBuU,MACAlX,EAAOmN,OAAO+J,EAAO,GAErBlX,EAAO6M,KAAKlK,OAGhBoC,MAAK4mD,SAASuD,GAASzmC,IAAI9lB,IAIvC4Z,QAAS,WAAA,GAIOrF,GAGSrX,EANjB8C,EAAQoC,KAAK4mD,SAASuD,GAAS1mC,MAAOxoB,EAAS2C,EAAOsB,EAAOc,KAAK6nC,WAAY9vC,EAAUiI,KAAKjI,OACjG,IAAoB,YAAhBA,EAAQmH,KACR,GAAIjE,YAAkBM,GAAiB,CAGnC,GAFI4W,KACJvU,EAAQoC,KAAKyqD,cACT7sD,YAAiB5B,OACjB,IAASlB,EAAI,EAAGA,EAAIG,EAAOrD,OAAQkD,IAC/B,GAAIG,EAAOH,YAAckB,QAASf,EAAOH,MAAQ8C,EAAO,CACpDuU,EAAQrX,CACR,YAIRqX,GAAQlX,EAAOiD,QAAQN,EAE3B7F,GAAQozD,QAAUh5C,GAAS,MAE3Bpa,GAAQozD,QAAUlwD,MAEC,SAAhBlD,EAAQmH,MAA4B,MAATtB,IACtB,QAARsB,EACAtB,EAAQ1F,EAAMqR,SAAS3L,EAAO,cACf,kBAARsB,IACPtB,EAAQ1F,EAAMqR,SAAS3L,EAAO,wBAG9B7F,EAAQozD,QADRpzD,EAAQ6F,QAAUA,GAAAA,IAO9BA,MAAO,WACH,GAAI7F,GAAUiI,KAAKjI,QAAS6F,EAAQ7F,EAAQ6F,KAI5C,OAHoB,YAAhB7F,EAAQmH,OACRtB,EAAQ7F,EAAQozD,SAEbvtD,GAEXkoB,QAAS,WACLpvB,EAAEsJ,KAAKjI,SAAS6xB,IAAI6P,EAAQz5B,KAAKu+C,aAI7CwL,EAAQj1B,QACJ75B,OAAQ8uD,EAAQ9uD,OAAOyF,QACnB8W,QAAS,SAAUvP,GAAV,GAYe6kC,GAXhBlmC,EAAO5G,KAAM/E,EAAS2L,EAAKggD,SAAS3rD,OAAOwoB,KAC3CxoB,aAAkBM,IAAmBN,YAAkB/C,GAAMsD,KAAKE,YAClEuM,EAAIA,MACY,OAAZA,EAAE0uB,OACF/vB,EAAKtF,IAAI2G,EAAEkK,MAAOlK,EAAEue,OACD,UAAZve,EAAE0uB,OACT/vB,EAAKshB,OAAOjgB,EAAEkK,MAAOlK,EAAEue,OACJ,cAAZve,EAAE0uB,QAA0B1uB,EAAE0uB,SAAW//B,IAChDgQ,EAAK2B,SACD3B,EAAKggD,SAAShpD,OACVgJ,EAAKggD,SAAShpD,QACVkvC,EAAMib,EAAwBnhD,EAAKggD,SAAShpD,MAAM6lB,MAAO/sB,EAAEkQ,EAAK7O,SAASyD,KAAK,eACtE,OAARsxC,EACAlmC,EAAK7O,QAAQqzD,iBAEbxkD,EAAK7O,QAAQ6F,MAAQkvC,KAMrClmC,EAAK2B,YAIjB3K,MAAOisD,EAAYnpD,QACfC,KAAM,SAAUyf,EAAQwmC,EAAUxmD,GAC9BypD,EAAY5lD,GAAGtD,KAAKwH,KAAKnI,KAAMogB,EAAQwmC,EAAUxmD,GACjDJ,KAAKu+C,QAAUv4C,EAAMhG,KAAKy6B,OAAQz6B,MAClCtJ,EAAEsJ,KAAKjI,SAAS0iC,OAAOz6B,KAAKu+C,UAEhCkM,YAAa,WAAA,GAGL7sD,GAAOkE,EAAQnE,EAAK/F,EAFpBiwC,EAAW7nC,KAAK6nC,WAChB31B,IAEJ,KAAKvU,EAAM,EAAG/F,EAASoI,KAAKjI,QAAQqI,QAAQxI,OAAQ+F,EAAM/F,EAAQ+F,IAC9DmE,EAAS9B,KAAKjI,QAAQqI,QAAQzC,GAC1BmE,EAAOupD,WACPztD,EAAQkE,EAAOioC,WAAWnsC,MAEtBA,EADAA,GAASA,EAAM6xC,UACP3tC,EAAOlE,MAEPkE,EAAOszB,KAEnBljB,EAAOpK,KAAK9H,KAAK0qD,YAAY9sD,EAAOiqC,IAG5C,OAAO31B,IAEXuoB,OAAQ,WAAA,GACqCx/B,GAAiH6G,EAAQwpD,EAAY1tD,EAAOD,EAAK/F,EAwB1K2zD,EACAjzD,EAzBZ4Z,KAAana,EAAUiI,KAAKjI,QAAiBgmB,EAAQ/d,KAAKI,QAAQyoD,YAAc7oD,KAAKI,QAAQswC,UAAWqY,EAAiB/oD,KAAKI,QAAQ2oD,cAC1I,KAAKprD,EAAM,EAAG/F,EAASG,EAAQqI,QAAQxI,OAAQ+F,EAAM/F,EAAQ+F,IACzDmE,EAAS/J,EAAQqI,QAAQzC,GACrBmE,EAAOupD,WACPztD,EAAQkE,EAAOioC,WAAWnsC,MAEtBA,EADAA,GAASA,EAAM6xC,UACP3tC,EAAOlE,MAEPkE,EAAOszB,KAGfljB,EAAOpK,KADPiW,EACYngB,EAEAoC,KAAK0qD,YAAY9sD,EAAOoC,KAAK6nC,aAIrD,IAAI9pB,EAKA,IAJA9iB,EAAS+E,KAAK4mD,SAAS3rD,OAAOwoB,MAC1BxoB,YAAkB/C,GAAMsD,KAAKE,aAC7BT,EAASA,EAAO0tB,QAEf2iC,EAAa,EAAGA,EAAap5C,EAAOta,OAAQ0zD,IAC7C,IAAK3tD,EAAM,EAAG/F,EAASqD,EAAOrD,OAAQ+F,EAAM/F,EAAQ+F,IAGhD,GAFI4tD,EAActwD,EAAO0C,GAAK8lB,IAAI1F,GAC9BzlB,EAAeizD,EAAPthD,KAAwBiI,EAAOo5C,GAChC,CACPp5C,EAAOo5C,GAAcrwD,EAAO0C,EAC5B,OAKhBC,EAAQoC,KAAK4mD,SAASoD,GAAOvmC,MACzB7lB,YAAiBrC,GACjBqC,EAAMwK,OAAOtB,MAAMlJ,GACf,EACAA,EAAMhG,QACRse,OAAOhE,IAITlS,KAAK4mD,SAASoD,GAAOtmC,IAHbqlC,KAAmBnrD,YAAiBqzC,IAA8B,OAAVrzC,GAAkBA,IAAUhH,IAAcmnB,EAGjF7L,EAAO,GAAGuR,IAAI1F,GAFd7L,EAAO,KAKxCsF,QAAS,WAAA,GACDg0C,GAAsNC,EAKjNH,EALQvzD,EAAUiI,KAAKjI,QAASqI,EAAUrI,EAAQqI,QAASxC,EAAQoC,KAAK4mD,SAASoD,GAAOvmC,MAAOvR,EAAStU,EAAOmgB,EAAQ/d,KAAKI,QAAQyoD,YAAc7oD,KAAKI,QAAQswC,UAAW+M,GAAQ,EAAOv+C,EAAOc,KAAK6nC,UAK9M,KAJM31B,YAAkB3W,KACpB2W,EAAS,GAAI3W,IAAiBqC,KAElC7F,EAAQqzD,iBACCE,EAAa,EAAGA,EAAap5C,EAAOta,OAAQ0zD,IAUjD,IATA1tD,EAAQsU,EAAOo5C,GACXvtC,GAASngB,YAAiBqzC,KAC1BrzC,EAAQA,EAAM6lB,IAAI1F,IAEV,QAAR7e,EACAtB,EAAQ1F,EAAMqR,SAAS2I,EAAOo5C,GAAa,cAC5B,kBAARpsD,IACPtB,EAAQ1F,EAAMqR,SAAS2I,EAAOo5C,GAAa,wBAE1CE,EAAc,EAAGA,EAAcprD,EAAQxI,OAAQ4zD,IAChDC,EAAcrrD,EAAQorD,GAAa5tD,MACf,KAAhB6tD,GAAgC,KAAV7tD,IACtB6tD,EAAcrrD,EAAQorD,GAAap2B,MAE1B,MAATx3B,GAAiB6tD,GAAe7tD,GAAAA,IAChCwC,EAAQorD,GAAaH,UAAW,EAChC5N,GAAQ,IAKxB33B,QAAS,WACLpvB,EAAEsJ,KAAKjI,SAAS6xB,IAAI6P,EAAQz5B,KAAKu+C,aAgF7CwL,EAAQ/mD,QACJ0E,OAAQi/C,EAAOjmD,QACXC,KAAM,SAAUqC,EAAQ4jD,EAAUxmD,GAC9BumD,EAAO1iD,GAAGtD,KAAKwH,KAAKnI,KAAMgD,EAAOjL,QAAQ,GAAI6uD,EAAUxmD,GACvDJ,KAAKgD,OAASA,EACdhD,KAAKsH,aAETkQ,QAAS,SAAUzY,GACf,GAAIypD,GAAUxoD,KAAK4mD,SAASl/C,OAAO3I,GAAM0I,EAAUzH,KAAKsH,SAASvI,EAC7D0I,IACAzH,KAAKgD,OAAO6E,OAAO9I,EAAK0I,GAE5BA,EAAU+gD,EAAQ/kC,MAClBzjB,KAAKsH,SAASvI,GAAO,SAAUkJ,GAC3BA,EAAEzM,KAAOgtD,EAAQvtD,OACjBwM,EAAQQ,GACJA,EAAEzM,OAASgtD,EAAQvtD,cACZgN,GAAEzM,MAGjBwE,KAAKgD,OAAOoE,KAAKrI,EAAKiB,KAAKsH,SAASvI,KAExC+mB,QAAS,WACL,GAAIre,EACJ,KAAKA,IAAWzH,MAAKsH,SACjBtH,KAAKgD,OAAO6E,OAAOJ,EAASzH,KAAKsH,SAASG,OAItD0jD,QAASxE,EAAOjmD,QACZC,KAAM,SAAUqC,EAAQ4jD,EAAUxmD,GAC9BumD,EAAO1iD,GAAGtD,KAAKwH,KAAKnI,KAAMgD,EAAOjL,QAAQ,GAAI6uD,EAAUxmD,GACvDJ,KAAKgD,OAASA,EACdhD,KAAKu+C,QAAUv4C,EAAMhG,KAAKy6B,OAAQz6B,MAClCA,KAAKgD,OAAOoE,KAAKqyB,EAAQz5B,KAAKu+C,UAElC9jB,OAAQ,WACJz6B,KAAK4mD,SAASuD,GAASzmC,IAAI1jB,KAAKpC,UAEpC4Z,QAAS,WACLxX,KAAKgD,OAAO0oD,MAAM1rD,KAAK4mD,SAASuD,GAAS1mC,SAAU,IAEvD7lB,MAAO,WACH,GAAI7F,GAAUiI,KAAKjI,QAAS6F,EAAQ7F,EAAQ6F,KAI5C,OAHa,MAATA,GAA0B,OAATA,IACjBA,EAAQ7F,EAAQozD,SAEbvtD,GAEXkoB,QAAS,WACL9lB,KAAKgD,OAAO6E,OAAO4xB,EAAQz5B,KAAKu+C,YAGxC/6C,QAASmjD,EAAOjmD,QACZC,KAAM,SAAUqC,EAAQ4jD,EAAUxmD,GAC9BumD,EAAO1iD,GAAGtD,KAAKwH,KAAKnI,KAAMgD,EAAOjL,QAAQ,GAAI6uD,EAAUxmD,GACvDJ,KAAKgD,OAASA,GAElBwU,QAAS,WACL,GAAIhU,GAAUxD,KAAK4mD,SAASpjD,QAAQigB,KACpCzjB,MAAKgD,OAAO3J,QAAQ,GAAGS,MAAMulB,QAAU7b,EAAU,GAAK,UAG9DsnD,UAAWnE,EAAOjmD,QACdC,KAAM,SAAUqC,EAAQ4jD,EAAUxmD,GAC9BumD,EAAO1iD,GAAGtD,KAAKwH,KAAKnI,KAAMgD,EAAOjL,QAAQ,GAAI6uD,EAAUxmD,GACvDJ,KAAKgD,OAASA,GAElBwU,QAAS,WACL,GAAIszC,GAAY9qD,KAAK4mD,SAASkE,UAAUrnC,KACxCzjB,MAAKgD,OAAO3J,QAAQ,GAAGS,MAAMulB,QAAUyrC,EAAY,OAAS,MAGpE1rC,QAASunC,EAAOjmD,QACZC,KAAM,SAAUqC,EAAQ4jD,EAAUxmD,GAC9BumD,EAAO1iD,GAAGtD,KAAKwH,KAAKnI,KAAMgD,EAAOjL,QAAQ,GAAI6uD,EAAUxmD,GACvDJ,KAAKgD,OAASA,GAElBwU,QAAS,WACDxX,KAAKgD,OAAOyc,QACZzf,KAAKgD,OAAOyc,OAAOzf,KAAK4mD,SAASxnC,QAAQqE,UAIrDngB,SAAUqjD,EAAOjmD,QACbC,KAAM,SAAUqC,EAAQ4jD,EAAUxmD,GAC9BumD,EAAO1iD,GAAGtD,KAAKwH,KAAKnI,KAAMgD,EAAOjL,QAAQ,GAAI6uD,EAAUxmD,GACvDJ,KAAKgD,OAASA,GAElBwU,QAAS,WACDxX,KAAKgD,OAAOyc,QACZzf,KAAKgD,OAAOyc,QAAQzf,KAAK4mD,SAAStjD,SAASmgB,UAIvDxoB,OAAQwrD,EAAkB,SAAU,aAAc,iBAClD7oD,MAAO+oD,EAAOjmD,QACVC,KAAM,SAAUqC,EAAQ4jD,EAAUxmD,GAC9BumD,EAAO1iD,GAAGtD,KAAKwH,KAAKnI,KAAMgD,EAAOjL,QAAQ,GAAI6uD,EAAUxmD,GACvDJ,KAAKgD,OAASA,EACdhD,KAAKu+C,QAAU7nD,EAAEsP,MAAMhG,KAAKy6B,OAAQz6B,MACpCA,KAAKgD,OAAO5L,MAAMqiC,EAAQz5B,KAAKu+C,QAC/B,IAAI3gD,GAAQoC,KAAK4mD,SAAShpD,MAAM6lB,KAChCzjB,MAAK2rD,0BAA4BvrD,EAAQ2oD,iBAA4B,MAATnrD,GAAiBA,YAAiBqzC,IAC9FjxC,KAAK4rD,wBAA0BhuD,YAAiBrC,GAChDyE,KAAK+qD,aAAc,GAEvBc,QAAS,WACL,GAAI5wD,EACJ,OAAI+E,MAAKgD,OAAOyjB,WACZxrB,EAAS+E,KAAKgD,OAAOyjB,WACjBxrB,GAAUA,YAAkBg2C,KACpBh2C,IAGZ+E,KAAK4mD,SAAS3rD,SACdA,EAAS+E,KAAK4mD,SAAS3rD,OAAOwoB,SAE7BxoB,GAAUA,YAAkB/C,GAAMsD,KAAKE,cACxCT,EAAS+E,KAAKgD,OAAO4hB,WAAWwB,YAE7BnrB,IAEXw/B,OAAQ,WACJ,GAA6M6wB,GAAYQ,EAA0BC,EAAYR,EAAa5tD,EAAK/F,EAAQqD,EAArR2C,EAAQoC,KAAKgD,OAAOpF,QAASmgB,EAAQ/d,KAAKI,QAAQ4nD,gBAAkBhoD,KAAKI,QAAQ4rD,cAAejmD,EAAmC,mBAAzBwD,EAASpB,KAAKvK,GAA6BquD,EAAqBjsD,KAAK2rD,yBAAmDz5C,IAEtO,IADAlS,KAAK+qD,aAAc,EACfhtC,EACA,GAAc,KAAVngB,IAAiBquD,GAAsBjsD,KAAKI,QAAQ2oD,gBACpDnrD,EAAQ,SACL,CAMH,IALA3C,EAAS+E,KAAK6rD,UACV9lD,IACA+lD,EAAcluD,EAAMhG,OACpBsa,EAAStU,EAAM4I,MAAM,IAEpB7I,EAAM,EAAG/F,EAASqD,EAAOrD,OAAQ+F,EAAM/F,EAAQ+F,IAGhD,GAFAouD,EAAa9wD,EAAO0C,GACpB4tD,EAAcQ,EAAWtoC,IAAI1F,GACzBhY,GACA,IAAKulD,EAAa,EAAGA,EAAaQ,EAAaR,IAC3C,GAAIC,GAAer5C,EAAOo5C,GAAa,CACnCp5C,EAAOo5C,GAAcS,CACrB,YAGL,IAAIR,GAAe3tD,EAAO,CAC7BA,EAAQquD,EAAqBF,EAAaR,CAC1C,OAGJr5C,EAAO,KAEHtU,EADAoC,KAAK4rD,wBACG15C,EACD+5C,IAAuBluC,EACtB7L,EAAO,GAEPA,EAAO,GAAGuR,IAAI1F,IAKtC/d,KAAK4mD,SAAShpD,MAAM8lB,IAAI9lB,GACxBoC,KAAK+qD,aAAc,GAEvBvzC,QAAS,WAAA,GAEGxU,GACA5C,EACAswC,EACAmY,EACAjrD,EACAw3B,EACAz3B,EAAS/F,EACTsa,CARR,KAAKlS,KAAK+qD,YAAa,CAYnB,GAXI/nD,EAAShD,KAAKgD,OACd5C,EAAU4C,EAAO5C,QACjBswC,EAAYtwC,EAAQ4rD,cACpBnD,EAAazoD,EAAQ4nD,gBAAkBtX,EACvC9yC,EAAQoC,KAAK4mD,SAAShpD,MAAM6lB,MAC5B2R,EAAOh1B,EAAQg1B,MAAQ,GACvBz3B,EAAM,EACNuU,KACAtU,IAAUhH,IACVgH,EAAQ,MAERirD,EACA,GAAIjrD,YAAiBrC,GAAiB,CAClC,IAAK3D,EAASgG,EAAMhG,OAAQ+F,EAAM/F,EAAQ+F,IACtCuU,EAAOvU,GAAOC,EAAMD,GAAK8lB,IAAIolC,EAEjCjrD,GAAQsU,MACDtU,aAAiBqzC,KACxB7b,EAAOx3B,EAAM6lB,IAAIitB,GACjB9yC,EAAQA,EAAM6lB,IAAIolC,GAGtBzoD,GAAQ4oD,YAAa,GAAU5oD,EAAQ8rD,cAAelpD,EAAOmpD,UAAanpD,EAAOmpD,SAASC,QAU1FppD,EAAOpF,MAAMA,IATT8yC,IAAcmY,GAAezzB,IAC7BA,EAAOx3B,GAENw3B,IAASx3B,GAAmB,IAAVA,IAAgBwC,EAAQ2oD,eAG3C/lD,EAAOqpD,WAAWzuD,EAAOw3B,GAFzBpyB,EAAOpF,MAAMA,IAQzBoC,KAAK+qD,aAAc,GAEvBjlC,QAAS,WACL9lB,KAAKgD,OAAO6E,OAAO4xB,EAAQz5B,KAAKu+C,YAGxC+N,OAASjC,aAAc5D,EAAkB,eAAgB,eAAgB,8BACzEmB,aACIhqD,MAAO+oD,EAAOjmD,QACVC,KAAM,SAAUqC,EAAQ4jD,EAAUxmD,GAC9BumD,EAAO1iD,GAAGtD,KAAKwH,KAAKnI,KAAMgD,EAAOjL,QAAQ,GAAI6uD,EAAUxmD,GACvDJ,KAAKgD,OAASA,EACdhD,KAAKu+C,QAAU7nD,EAAEsP,MAAMhG,KAAKy6B,OAAQz6B,MACpCA,KAAKgD,OAAO5L,MAAMqiC,EAAQz5B,KAAKu+C,SAC/Bv+C,KAAK+qD,aAAc,GAEvBtwB,OAAQ,WAAA,GAMIvS,GACA4T,EACAhhC,EAAOyxD,EACPC,EACA1uB,EACA2uB,EACAC,EACAjP,EAZJ72C,EAAO5G,KAAM2sD,EAAY/lD,EAAKggD,SAASoD,GAAOvmC,MAAOslC,EAAiBniD,EAAKxG,QAAQ2oD,eAAgB6D,EAAY7D,EAAiBniD,EAAK5D,OAAOpF,QAAUgJ,EAAK5D,OAAOmjB,YAClKpI,EAAQ/d,KAAKI,QAAQ4nD,gBAAkBhoD,KAAKI,QAAQ4rD,aAGxD,IAFAY,EAAYA,EAAUpmD,MAAM,GAC5BI,EAAKmkD,aAAc,EACf4B,YAAqBpxD,GAAiB,CAStC,IARI2sB,KACA4T,EAAY8wB,EAAUh1D,OACtBkD,EAAI,EAAGyxD,EAAI,EACXC,EAAMG,EAAU7xD,GAChBgjC,GAAO,EAIJ0uB,IAAQ51D,GAAW,CAEtB,IADA6mD,GAAQ,EACH8O,EAAI,EAAGA,EAAIzwB,EAAWywB,IAQvB,GAPIxD,EACAjrB,EAAO8uB,EAAUL,IAAMC,GAEvBE,EAAWE,EAAUL,GACrBG,EAAWA,EAASjpC,IAAMipC,EAASjpC,IAAI1F,GAAS2uC,EAChD5uB,EAAO4uB,IAAaF,EAAI/oC,IAAM+oC,EAAI/oC,IAAI1F,GAASyuC,IAE/C1uB,EAAM,CACN8uB,EAAUxkD,OAAOmkD,EAAG,GACpBzwB,GAAa,EACb2hB,GAAQ,CACR,OAGHA,EAKD3iD,GAAK,GAJLotB,EAAOpgB,KAAK0kD,GACZ1C,EAAY6C,EAAW7xD,EAAG,GAC1B2xD,EAAc3xD,GAIlB0xD,EAAMG,EAAU7xD,GAEpBgvD,EAAY6C,EAAWA,EAAU/0D,OAAQ,EAAGg1D,GACxC1kC,EAAOtwB,QACP+0D,EAAU3kD,QAAQ,UACd2uB,OAAQ,SACRnQ,MAAO0B,EACP/V,MAAOs6C,IAGXG,EAAUh1D,QACV+0D,EAAU3kD,QAAQ,UACd2uB,OAAQ,MACRnQ,MAAOomC,EACPz6C,MAAOw6C,EAAU/0D,OAAS,QAIlCgP,GAAKggD,SAASoD,GAAOtmC,IAAIkpC,EAE7BhmD,GAAKmkD,aAAc,GAEvBvzC,QAAS,WACL,IAAKxX,KAAK+qD,YAAa,CACnB,GAAqKnzD,GAAqBi1D,EAAtLzsD,EAAUJ,KAAKI,QAAS4C,EAAShD,KAAKgD,OAAQ+a,EAAQ3d,EAAQ4nD,gBAAkB5nD,EAAQ4rD,cAAepuD,EAAQoC,KAAK4mD,SAAShpD,MAAM6lB,MAAOjoB,EAAOoC,EAAOD,EAAM,EAAWuU,IAI7K,IAHItU,IAAUhH,IACVgH,EAAQ,MAERmgB,EACA,GAAIngB,YAAiBrC,GAAiB,CAClC,IAAK3D,EAASgG,EAAMhG,OAAQ+F,EAAM/F,EAAQ+F,IACtCkvD,EAAgBjvD,EAAMD,GACtBuU,EAAOvU,GAAOkvD,EAAcppC,IAAMopC,EAAcppC,IAAI1F,GAAS8uC,CAEjEjvD,GAAQsU,MACDtU,aAAiBqzC,KACxBrzC,EAAQA,EAAM6lB,IAAI1F,GAGtB3d,GAAQ4oD,YAAa,GAAS5oD,EAAQ2oD,kBAAmB,GAAS/lD,EAAO8pD,WAGzE9pD,EAAOpF,MAAMA,GAFboF,EAAOqpD,WAAW7wD,EAAMoC,KAMpCkoB,QAAS,WACL9lB,KAAKgD,OAAO6E,OAAO4xB,EAAQz5B,KAAKu+C,aAI5CwO,WACI9xD,OAAQwrD,EAAkB,SAAU,aAAc,iBAAiB/lD,QAC/DsmD,UAAW,SAAU/+C,GAAV,GACHtK,GACA/F,EAGA4D,EAAMmI,EAFNX,EAAShD,KAAKgD,OACdujB,EAAWte,EAAEw/C,YAAczkD,EAAOwjB,OAEtC,IAAID,EAAS3uB,OAGT,IAFA4D,EAAOyM,EAAE0/C,gBAAkB3kD,EAAOmjB,YAClCxiB,EAAU3D,KAAK4mD,SAAS3rD,OAAOosD,WAC1B1pD,EAAM,EAAG/F,EAAS4D,EAAK5D,OAAQ+F,EAAM/F,EAAQ+F,IAC9CwpD,EAAY5gC,EAAS5oB,GAAMnC,EAAKmC,GAAMqC,KAAKonD,IAAIn/C,EAAEhG,KAAMzG,EAAKmC,IAAMuY,OAAOvS,SAO7FmmD,EAAc,SAAUkD,EAAKrvD,EAAKuqB,EAAQ5mB,GAA5B,GAGV2rD,GACAC,EACAC,EACAC,EACAj7C,CACJ,IAPA7Q,EAAMA,MACN4mB,EAASA,GAAU,EACf+kC,EAAY3rD,EAAI1J,OAChBs1D,EAAYF,EAAIp1D,OAChBu1D,KAAa3mD,MAAM2B,KAAK6kD,EAAKrvD,EAAMuqB,GACnCklC,EAAgBD,EAAQv1D,OAExBq1D,EAAW,CAGX,IAFAA,EAAYtvD,EAAMsvD,EAClB96C,EAAQ,EACDxU,EAAMsvD,EAAWtvD,IACpBqvD,EAAIrvD,GAAO2D,EAAI6Q,GACfA,GAEJ66C,GAAIp1D,OAASq1D,MACV,IAAI/kC,EAGP,IAFA8kC,EAAIp1D,OAAS+F,EACbuqB,GAAUvqB,EACHA,EAAMuqB,SACF8kC,KAAM9kC,EAGrB,IAAIklC,EAAe,CAGf,IAFAA,EAAgBzvD,EAAMyvD,EACtBj7C,EAAQ,EACDxU,EAAMyvD,EAAezvD,IACxBqvD,EAAIrvD,GAAOwvD,EAAQh7C,GACnBA,GAEJ66C,GAAIp1D,OAASw1D,EAGjB,IADAzvD,EAAMqvD,EAAIp1D,OACH+F,EAAMuvD,SACFF,GAAIrvD,GACXA,KAGJsrD,EAAgBpyD,EAAM6J,QACtBC,KAAM,SAAUyf,EAAQhgB,GACpBJ,KAAKogB,OAASA,EACdpgB,KAAKI,QAAUA,EACfJ,KAAKqtD,cAETjmD,KAAM,SAAUw/C,GACZ,GAAI7nD,GAAKuuD,EAAUC,EAAWC,EAAWC,EAAYC,EAAQC,EAAgB3tD,eAAgBkoD,GAAqB0F,EAAkB5tD,KAAK+pD,SACzI,KAAKhrD,IAAO6nD,GACJ7nD,GAAOirD,EACPsD,GAAW,EACJvuD,GAAOkrD,EACdsD,GAAY,EACLxuD,GAAOmrD,GAAWyD,EAElB5uD,GAAOorD,EACdsD,GAAa,EACN1uD,GAAOqrD,EACdsD,GAAS,EAET1tD,KAAK6tD,aAAa9uD,EAAK6nD,EAAUgH,GANjCJ,GAAY,CAShBD,IACAvtD,KAAK6tD,aAAa5D,EAAQrD,EAAUgH,GAEpCN,GACAttD,KAAK6tD,aAAa7D,EAAOpD,EAAUgH,GAEnCH,GACAztD,KAAK6tD,aAAa1D,EAASvD,EAAUgH,GAErCJ,IAAcG,GACd3tD,KAAK6tD,aAAa3D,EAAQtD,EAAUgH,GAEpCF,IAAWC,GACX3tD,KAAK6tD,aAAazD,EAAKxD,EAAUgH,IAGzC7D,QAAS,WACL,MAAOA,GAAQ/pD,KAAKogB,OAAO/c,SAASvG,oBAExC+wD,aAAc,SAAU3+C,EAAM03C,EAAUgH,GACpC,GAAiF9jB,GAA7EgkB,EAASF,EAAgB1+C,IAAS66C,EAAQ76C,GAAOm+C,EAAYrtD,KAAKqtD,UAAsB7E,EAAU5B,EAAS13C,EAC/G,IAAI4+C,EAGA,GAFAA,EAAS,GAAIA,GAAO9tD,KAAKogB,OAAQwmC,EAAU5mD,KAAKI,SAChDitD,EAAUvlD,KAAKgmD,GACXtF,YAAmBU,GACnB4E,EAAO1mD,KAAKohD,GACZ6E,EAAUvlD,KAAK0gD,OAEf,KAAK1e,IAAa0e,GACdsF,EAAO1mD,KAAKohD,EAAS1e,GACrBujB,EAAUvlD,KAAK0gD,EAAQ1e,QAG5B,IAAa,aAAT56B,EACP,KAAUpG,OAAM,OAASoG,EAAO,oCAAsClP,KAAKogB,OAAO/c,SAASvG,cAAgB,aAGnHgpB,QAAS,WACL,GAAInoB,GAAK/F,EAAQy1D,EAAYrtD,KAAKqtD,SAClC,KAAK1vD,EAAM,EAAG/F,EAASy1D,EAAUz1D,OAAQ+F,EAAM/F,EAAQ+F,IACnD0vD,EAAU1vD,GAAKmoB,aAIvBoiC,EAAsBe,EAAcvoD,QACpCqpD,QAAS,WACL,MAAOA,GAAQ/mD,OAAOhD,KAAKogB,OAAOhgB,QAAQ8O,KAAKpS,oBAEnD+wD,aAAc,SAAU3+C,EAAM03C,EAAUgH,GACpC,GAAwF9jB,GAApFgkB,EAASF,EAAgB1+C,IAAS66C,EAAQ/mD,OAAOkM,GAAOm+C,EAAYrtD,KAAKqtD,UAAsB7E,EAAU5B,EAAS13C,EACtH,KAAI4+C,EAaA,KAAUhlD,OAAM,OAASoG,EAAO,oCAAsClP,KAAKogB,OAAOhgB,QAAQ8O,KAAO,UAVjG,IAFA4+C,EAAS,GAAIA,GAAO9tD,KAAKogB,OAAQwmC,EAAU5mD,KAAKogB,OAAOhgB,SACvDitD,EAAUvlD,KAAKgmD,GACXtF,YAAmBU,GACnB4E,EAAO1mD,KAAKohD,GACZ6E,EAAUvlD,KAAK0gD,OAEf,KAAK1e,IAAa0e,GACdsF,EAAO1mD,KAAKohD,EAAS1e,GACrBujB,EAAUvlD,KAAK0gD,EAAQ1e,OAcvCwe,EAAiB,wCAAyCM,EAAmB,MAiKjF1wD,EAAM2P,OAASA,EACf3P,EAAMkP,KAAOA,EACblP,EAAMsD,KAAKuuD,QAAUA,EACrB7xD,EAAMsD,KAAKmrD,OAASA,EACpBzuD,EAAM0uB,OAASA,EACf1uB,EAAMmgC,WAAa,SAAU0a,GAIzB,MAHMA,aAAkB9B,KACpB8B,EAAS,GAAI9B,GAAiB8B,IAE3BA,GAEX76C,EAAM61D,oBAAsB,SAAU16C,GAElC,QAAS26C,GAAcxyD,GACnB,GAAIV,GAAGH,CACP,KAAKG,EAAI,EAAGA,EAAIU,EAAK5D,OAAQkD,IACzBU,EAAKV,GAAG8oD,gBACRjpD,EAAWa,EAAKV,GAAGH,SACnBA,EAASumD,QACT1lD,EAAKV,GAAG0rB,MAAQ7rB,EAASa,OACzBwyD,EAAcxyD,EAAKV,GAAG0rB,OAR9B,GAAI5B,GAAa1sB,EAAMsD,KAAKG,uBAAuB0sC,OAAOh1B,EAc1D,OAHAuR,GAAWs8B,QACX8M,EAAcppC,EAAWppB,QACzBopB,EAAWwrB,MAAMoU,YAAc5/B,EACxBA,EAAWwrB,QAExBz5C,OAAOuB,MAAM2sB,QACRluB,OAAOuB,OACE,kBAAVzB,SAAwBA,OAAOgiC,IAAMhiC,OAAS,SAAUiiC,EAAIC,EAAIC,IACrEA,GAAMD,OAEV,SAAUniC,EAAGC,QACVA,OAAO,YAAa,cAAeD,IACrC,WAupCE,MA/oCC,UAAUE,EAAGE,GA4KV,QAASq3D,GAAarwD,GAClB,MAAOyU,UAASzU,EAAO,IAE3B,QAASswD,GAASn2D,EAASmD,GACvB,MAAO+yD,GAAal2D,EAAQE,IAAIiD,IAEpC,QAASymB,GAAK7iB,GAAd,GAEaqvD,GADLC,IACJ,KAASD,IAAgBrvD,GACrBsvD,EAAItmD,KAAKqmD,EAEb,OAAOC,GAEX,QAASC,GAAkBjxD,GACvB,IAAK,GAAI2B,KAAO3B,GACRkxD,EAAepwD,QAAQa,QAAcwvD,EAAYrwD,QAAQa,cAClD3B,GAAW2B,EAG1B,OAAO3B,GAEX,QAASoxD,GAAaz2D,EAASqF,GAC3B,GAAyCqxD,GAAU1vD,EAAKnB,EAAO8wD,EAA3DC,KAAqBC,IACzB,KAAK7vD,IAAO3B,GACRqxD,EAAW1vD,EAAIjC,cACf4xD,EAAgBz3C,GAAcq3C,EAAepwD,QAAQuwD,QAChDt2D,EAAQkgB,SAAWq2C,GAAiBH,EAAYrwD,QAAQuwD,aAClDrxD,GAAW2B,IAElBnB,EAAQR,EAAW2B,GACf2vD,EACAC,EAAe7mD,KAAK/I,EAAM,IAAMnB,EAAQ,KAExCgxD,EAAU7vD,GAAOnB,EAO7B,OAHI+wD,GAAe/2D,SACfg3D,EAAUC,IAAaF,EAAez3D,KAAK,MAExC03D,EAuDX,QAASE,GAAkB/2D,EAASmD,GAApC,GAEY6zD,GAIAz2D,EAAyE02D,CALjF,OAAI/3C,IACI83C,EAAYh3D,EAAQE,IAAI42D,IACxBE,GAAaE,EACM,SAAZ/zD,EAAsB,EAAI,GAEjC5C,EAAQy2D,EAAUz2D,MAAUyD,OAAOb,EAAW,0BAA2B8zD,EAAW,EACpF12D,EACA02D,EAAWf,EAAa31D,EAAM,KAE9BA,EAAQy2D,EAAUz2D,MAAM42D,KACpB,EACA,EACA,EACA,EACA,GAEJh0D,EAAWA,EAAS4B,cAChBqyD,EAAiBj1D,KAAKgB,GACtB8zD,EAAW7sD,WAAW7J,EAAM,GAAKA,EAAM,IACpB,cAAZ4C,EACP8zD,EAAW7sD,WAAW7J,EAAM,GAAKA,EAAM,IACpB,SAAZ4C,EACP8zD,EAAW7sD,WAAW7J,EAAM,IACT,UAAZ4C,IACP8zD,EAAW7sD,WAAWvD,KAAKwwD,MAAM92D,EAAM,GAAIA,EAAM,OAGlD02D,IAEA7sD,WAAWpK,EAAQE,IAAIiD,IAkVtC,QAASm0D,GAAWC,GAChB,MAAOA,GAAKj4D,OAAO,GAAG6F,cAAgBoyD,EAAK/3D,UAAU,GAEzD,QAASg4D,GAAargD,EAAMsgD,GACxB,GAAIC,GAAcC,EAAOhvD,OAAO8uD,GAAa5qD,EAAa6qD,EAAY1oD,UAAUnC,UAChF3E,GAAGovD,EAAWngD,IAASugD,EACvBxvD,EAAGC,QAAQ6G,UAAUmI,GAAQ,SAAU02B,EAAW+pB,EAAMC,EAAMC,GAC1D,MAAO,IAAIJ,GAAYzvD,KAAKjI,QAAS6tC,EAAW+pB,EAAMC,EAAMC,IAEhEnyD,EAAKkH,EAAY,SAAUjH,EAAKmyD,GAC5B7vD,EAAGC,QAAQ6G,UAAUmI,EAAOmgD,EAAWS,IAAiB,SAAUH,EAAMC,EAAMC,GAC1E,MAAO,IAAIJ,GAAYzvD,KAAKjI,QAAS+3D,EAAcH,EAAMC,EAAMC,MAsD3E,QAASE,GAAmB7gD,EAAMhU,EAAU80D,EAAcC,GACtDV,EAAargD,GACTtK,WAAYsrD,EACZC,WAAY,SAAUvyD,GAElB,MADAoC,MAAKowD,YAAcxyD,EACZoC,MAEXqwD,SAAU,SAAUzyD,GAEhB,MADAoC,MAAKswD,UAAY1yD,EACVoC,MAEXuwD,WAAY,WACR,MAAOvwD,MAAKwwD,aAEhBC,QAAS,SAAUxhD,EAAOtX,GACtB,GAAiBw4D,GAAYE,EAAzBzpD,EAAO5G,KAA4Bmf,EAA0B,QAApBnf,KAAK0wD,WAAsBC,EAAiB/pD,EAAK7O,QAAQyD,KAAKN,GAAW01D,IAAwBn7C,MAAMk7C,IAAmBA,GAAkBX,EAErLG,GADAS,EACaD,EACsB,IAArB3wD,KAAKowD,YACNpwD,KAAKowD,YAELjxC,EAAM6wC,EAAeC,EAGlCI,EAD0B,IAAnBrwD,KAAKswD,UACDtwD,KAAKswD,UAELnxC,EAAM8wC,EAAaD,EAE9BhwD,KAAK6wD,UACL5hD,EAAM/T,GAAYm1D,EAClB14D,EAAIuD,GAAYi1D,IAEhBlhD,EAAM/T,GAAYi1D,EAClBx4D,EAAIuD,GAAYm1D,GAEpBzpD,EAAK4pD,YAAc74D,EAAIuD,KAAc+0D,KAgHjD,QAASa,GAAWnpC,EAAWie,GAC3B,GAAImrB,GAAW74D,EAAM0M,WAAWghC,GAAWmrB,SAAUhzD,EAAO4pB,EAAUopC,EAAWC,EAASC,KAAW,EAAI,IACzG,OAAOC,GAAMtrB,GAAWzuC,QAAQ,QAAS4G,GAj1BhD,GAyHWozD,GAmLJC,EAuNA1B,EAuIA2B,EAKGnB,EAyIHoB,EA+BAJ,EAMAK,EA+IAC,EACAC,EA2FAC,EA0CAC,EAjlCAz5D,EAAQvB,OAAOuB,MAAO+H,EAAK/H,EAAM6H,QAASrC,EAAOhH,EAAEgH,KAAMgD,EAAShK,EAAEgK,OAAQsF,EAAQtP,EAAEsP,MAAO7N,EAAUD,EAAMC,QAASoB,EAAUpB,EAAQoB,QAAS0d,EAAa9e,EAAQ8e,WAAY7e,EAAcD,EAAQC,YAAaw5D,GACjNC,MAAO,EACPC,OAAQ,EACRC,OAAQ,EACRC,QAAS,GACVC,GACCC,UAAW,EACXC,WAAY,EACZC,WAAY,EACZC,YAAa,GACdC,EAAyD,IAAxC/0D,SAASmC,gBAAgB5F,MAAMY,OAAyBuc,EAAYi4C,EAAiB,iGAAkGqD,EAAkB,oDAAqDpD,EAAmB,gBAAiBqD,EAAmB,0BAA2BC,EAAqB,qBAAsBC,EAAa,SAAUpE,GACla,cACA,SACA,UACA,UACA,UACA,WACA,QACA,SACA,SACA,SACA,UACA,OACA,QACA,QACA,YACA,aACA,aACA,aACA,cACA,SACA,YACDC,GACC,SACA,QACA,SACA,SACA,OACA,QACA,QACA,YACA,aACA,aACA,UACDoE,GACCC,OAAU,MACVf,MAAO,GACPgB,KAAM,KACNX,UAAW,MACZY,EAAY77C,EAAWhf,IAAKwX,EAAQ7Q,KAAK6Q,MAAOsjD,EAAQ,GAAIC,EAAK,KAAM/D,EAAO,OAAQgE,EAAO,OAAQhC,EAAQ,QAASD,EAAS,SAAUkC,EAAS,SAAUC,GAAS,SAAUC,GAAW,UAAWC,GAAW,WAAYC,GAAY,YAAaC,GAAW,WAAYC,GAAoB,mBAAoBC,GAAaX,EAAY,aAAcjE,GAAYiE,EAAY,YAAaY,GAAWZ,EAAY,sBAAuBa,GAAcb,EAAY,cAAec,GAAsB,SAAUC,GAAwB,eAAiBD,GAAsB,IAAKhvD,IAC1jBjM,MACI2H,QAAS,QACTpF,SAAU,OACV44D,WAAY,aACZ/C,UAAU,EACVgD,aAEJn7D,OACI0H,QAAS,OACTpF,SAAU,OACV44D,WAAY,aACZ/C,UAAU,EACVgD,SAAU,GAEd/0C,MACI1e,QAAS,KACTpF,SAAU,MACV44D,WAAY,aACZ/C,UAAU,EACVgD,SAAU,GAEd90C,IACI3e,QAAS,OACTpF,SAAU,MACV44D,WAAY,aACZ/C,UAAU,EACVgD,aAEJz0D,KAAOgB,QAAS,UAChBzH,QAAUyH,QAAS,OACnB4e,MACI5e,QAAS,MACTyzD,aAEJ50C,KACI7e,QAAS,KACTyzD,SAAU,GAEdhD,UAAYzwD,QAAS,YACrB0zD,YAAc1zD,QAAS,cAE/BpI,GAAM0M,WAAaA,GACnBlE,EAAOhK,EAAEuN,IACL0b,UAAW,SAAUC,EAAYC,GAC7B,MAAIznB,GACO6H,EAAGg0D,UAAUj0D,KAAM4f,IAAc,EAAOC,IAAW,GAEnD7f,KAAK8f,KAAKF,EAAYC,MAIrC5I,IAAe7e,IACfsF,EAAK6wD,EAAa,SAAU5wD,EAAKC,GAC7BlH,EAAEuN,GAAGrG,GAAS,SAAUkvC,GACpB,GAAkB,IAAPA,EACP,MAAOgiB,GAAkB9uD,KAAMpC,EAE/B,IAAIgJ,GAAOlQ,EAAEsJ,MAAM,GAAIk0D,EAAiBt2D,EAAQ,IAAMkvC,EAAM6lB,EAAgB/0D,EAAMzG,QAAQu7D,EAAY,KAAO,GAOjH,OANQ9rD,GAAK9M,MAAM6d,QAAQzZ,QAAQ2wD,QAC3Bn4D,EAAEsJ,MAAM/H,IAAI42D,GAAWqF,GAEvBttD,EAAK9M,MAAM6d,QAAU/Q,EAAK9M,MAAM6d,QAAQxgB,QAAY4E,OAAO6B,EAAQ,YAAa,KAAMs2D,GAGvFl0D,MAEXtJ,EAAEuJ,GAAGk0D,KAAKv2D,GAAS,SAAUqC,GACzBvJ,EAAEuJ,EAAGm0D,MAAMx2D,GAAOqC,EAAGi/B,QAGzBiyB,EAAWz6D,EAAEuJ,GAAG8G,UAAUstD,IAC9B39D,EAAEuJ,GAAG8G,UAAUstD,IAAM,WACjB,MAAI9F,GAAYrwD,QAAQ8B,KAAK+wC,UAClB5uC,WAAWzL,EAAEsJ,KAAKo0D,MAAMp0D,KAAK+wC,SAEjCogB,EAASrqD,MAAM9G,KAAMjF,aAGpC7C,EAAMkJ,YAAc,SAAUrJ,EAASsJ,EAASjB,EAASkB,GAkBrD,MAjBID,KACAA,EAAUA,EAAQpK,MAAM,KACpBmB,IACAgI,EAAUM,GACN4zD,UAAW,MACXj0D,SAAU,IACVk0D,KAAM,YACPn0D,GACHrI,EAAQE,IAAIw7D,GAAYrzD,EAAQk0D,UAAY,IAAMl0D,EAAQC,SAAW,MAAQD,EAAQm0D,MACrF7qC,WAAW,WACP3xB,EAAQE,IAAIw7D,GAAY,IAAIx7D,IAAI+4D,IACjC5wD,EAAQC,WAEf3C,EAAK2D,EAAS,SAAU1D,EAAKC,GACzB7F,EAAQqJ,YAAYxD,EAAO0D,MAG5BvJ,GAEXG,EAAM2H,aAAe,SAAUC,EAAO00D,GAClC,GAAIz0D,KAoBJ,OAnBqB,gBAAVD,GACPpC,EAAKoC,EAAM7I,MAAM,KAAM,SAAU0G,EAAKC,GAClC,GAAI62D,IAAoBhC,EAAmBv4D,KAAK0D,GAAQ82D,EAAW92D,EAAMzG,QAAQq7D,EAAkB,SAAUl6D,EAAOq8D,EAAIC,GAChH,MAAOD,GAAK,IAAMC,EAAG93D,gBACrB+3D,EAASH,EAASz9D,MAAM,KAAM2uC,EAAYivB,EAAO,GAAIC,IACzDD,GAAOj9D,OAAS,IAChBk9D,EAAWlvB,UAAY4uB,GAAUC,EAAmB7vD,GAAWghC,GAAWtlC,QAAUslC,GAExF7lC,EAAQ80D,EAAO,IAAMC,IAGzBp3D,EAAKoC,EAAO,SAAUnC,GAClB,GAAIioC,GAAY5lC,KAAK4lC,SACjBA,IAAa4uB,IAAW/B,EAAmBv4D,KAAKyD,KAChDqC,KAAK4lC,UAAYhhC,GAAWghC,GAAWtlC,SAE3CP,EAAQpC,GAAOqC,OAGhBD,GA4CP3H,GACAsI,EAAOT,GACH6zD,WAAY,SAAU/7D,EAASqF,EAAYgD,GAA/B,GACJnI,GAAsD88D,EAOtDC,EACAC,EARKrhC,EAAQ,EAAGshC,EAAUn9D,EAAQyD,KAAK,WAC3C4E,GAAUM,GACNL,SAAU,IACVk0D,KAAM,WACNh0D,SAAU,KACV+zD,UAAW,OACZl0D,GACC40D,GAAuB,EACvBC,EAAiB,WACZD,IACDA,GAAuB,EACnBD,IACAnqC,aAAamqC,GACbA,EAAY,MAEhBh9D,EAAQguB,WAAWqtC,IAAU9zC,UAAUrnB,IAAIw7D,GAAY,IAAIx7D,IAAIw7D,IAC/DrzD,EAAQG,SAAS4H,KAAKpQ,KAG9BqI,EAAQC,SAAW3J,EAAEuJ,GAAKvJ,EAAEuJ,GAAGk1D,OAAO/0D,EAAQC,WAAaD,EAAQC,SAAWD,EAAQC,SACtFpI,EAAMu2D,EAAaz2D,EAASqF,GAC5B1G,EAAE0+D,MAAMF,EAASvzC,EAAK1pB,IACtBF,EAAQyD,KAAK,OAAQ9E,EAAE2+D,OAAOH,IAAUh8D,SACxCnB,EAAQE,IAAIw7D,GAAYrzD,EAAQk0D,UAAY,IAAMl0D,EAAQC,SAAW,MAAQD,EAAQm0D,MAAMt8D,IAAIw7D,IAC/F17D,EAAQE,IAAIA,GAAKA,IAAI42D,IACjBz2D,EAAYugB,QACZ5gB,EAAQwP,IAAInP,EAAYugB,MAAOs8C,GACN,IAArB70D,EAAQC,WACRuzB,EAAQ,MAGhBmhC,EAAYrrC,WAAWurC,EAAgB70D,EAAQC,SAAWuzB,GAC1D77B,EAAQyD,KAAK43D,GAAU2B,GACvBh9D,EAAQyD,KAAKg4D,GAAmByB,IAEpChB,UAAW,SAAUl8D,EAAS6nB,EAAYC,GACtC,GAAI+uC,GAAW0G,EAAWv9D,EAAQyD,KAAK,QAAS+5D,GAAkB11C,GAAWy1C,EAAUv0D,EAAmBhJ,EAAQyD,KAAKg4D,GAUvH,OATI+B,KACA3G,EAAY12D,EAAMiF,kBAAkBpF,EAAQ,GAAIu9D,IAEhDv0D,GACAA,IAEAw0D,GACAx9D,EAAQE,IAAI22D,GAET72D,EAAQguB,WAAW,QAAQjG,KAAKF,MAqC/CwxC,EAAYl5D,EAAMrB,MAAM6J,QACxBC,KAAM,SAAU5I,EAASqI,GACrB,GAAIwG,GAAO5G,IACX4G,GAAK7O,QAAUA,EACf6O,EAAK7G,WACL6G,EAAKxG,QAAUA,EACfwG,EAAK4uD,YAETC,IAAK,SAAU11D,GAAV,GACgB80D,GAAQl3D,EAAK+3D,EAA6Ht1C,EAAQzlB,EAAUg7D,EAepKC,EAfLhvD,EAAO5G,KAAwBpI,EAASmI,EAAQnI,OAAQG,EAAU6O,EAAK7O,QAASqI,EAAUwG,EAAKxG,QAASm/C,EAAW7oD,EAAEylD,WAAYltC,KAAYtX,IAIjJ,KAHAiP,EAAK7G,QAAUA,EACfw/C,EAASlB,KAAK3nD,EAAEsP,MAAMY,EAAM,aAC5B7O,EAAQyD,KAAK,aAAa,GACrBmC,EAAM,EAAGA,EAAM/F,EAAQ+F,IAOxB,IANAk3D,EAAS90D,EAAQpC,GACjBk3D,EAAOgB,WAAWz1D,EAAQE,SAC1Bu0D,EAAOxvC,WAAWjlB,GAClBwG,EAAKkvD,qBAAqBjB,EAAOW,SACjCX,EAAOpE,QAAQxhD,EAAOtX,GACtBgD,EAAWk6D,EAAOl6D,WACb+6D,EAAM,EAAGC,EAAiBh7D,EAAS/C,OAAQ89D,EAAMC,EAAgBD,IAClE/6D,EAAS+6D,GAAKr1D,SAASD,EAAQC,UAAUo1D,KAGjD,KAASG,IAAcx1D,GAAQL,QAC3BW,EAAO/I,EAAKyI,EAAQL,QAAQ61D,GAAYx4D,WAgB5C,KAdKrF,EAAQgC,GAAG,aACZ2G,EAAOuO,GAASoQ,QAAStnB,EAAQyD,KAAK,eAAiB,UAEvDyb,IAAe7W,EAAQomD,QACvBpmC,EAASroB,EAAQyD,KAAK,mBAClB4kB,IACAnR,EAAQvO,EAAO0f,EAAQnR,KAG/BA,EAAQu/C,EAAaz2D,EAASkX,GAC1BgI,IAAe7e,IACf6W,EAAQo/C,EAAkBp/C,IAE9BlX,EAAQE,IAAIgX,GAAOhX,IAAI42D,IAClBlxD,EAAM,EAAGA,EAAM/F,EAAQ+F,IACxBoC,EAAQpC,GAAKm7C,OAOjB,OALI14C,GAAQO,MACRP,EAAQO,OAEZ5I,EAAQyD,KAAK,kBAAmB7D,GAChCsI,EAAGe,QAAQjJ,EAASJ,EAAK+I,KAAWN,GAAWG,SAAUg/C,EAASnD,WAC3DmD,EAASp+C,WAEpB2e,KAAM,WACFppB,EAAEsJ,KAAKjI,SAAS4nB,WAAU,GAAM,IAEpCm2C,qBAAsB,SAAUN,GAE5B,IADA,GAA4B53D,GAAxB7F,EAAUiI,KAAKjI,QAAgB+C,EAAI,EAAGlD,EAAS49D,EAAQ59D,OACpDkD,EAAIlD,EAAQkD,IACf8C,EAAQ43D,EAAQ16D,GAChBkF,KAAKw1D,QAAQ1tD,KAAKlK,GACb7F,EAAQyD,KAAKoC,IACd7F,EAAQyD,KAAKoC,EAAO7F,EAAQE,IAAI2F,KAI5Cm4D,gBAAiB,WAAA,GAEJj7D,GAAOlD,EACRgG,EAFJ7F,EAAUiI,KAAKjI,OACnB,KAAS+C,EAAI,EAAGlD,EAASoI,KAAKw1D,QAAQ59D,OAAQkD,EAAIlD,EAAQkD,IAClD8C,EAAQoC,KAAKw1D,QAAQ16D,GACzB/C,EAAQE,IAAI2F,EAAO7F,EAAQyD,KAAKoC,KAGxC2C,SAAU,WACN,GAAIqG,GAAO5G,KAAMrC,EAAM,EAAG5F,EAAU6O,EAAK7O,QAASqI,EAAUwG,EAAKxG,QAASL,EAAU6G,EAAK7G,QAASnI,EAASmI,EAAQnI,MASnH,KARAG,EAAQguB,WAAW,aAAazG,UAC5Blf,EAAQU,MACR/I,EAAQyD,KAAK,aAAczD,EAAQE,IAAI,YAAY6I,OAEvDd,KAAK+1D,kBACDzD,IAAYr7C,GACZyS,WAAWhzB,EAAEsP,MAAMhG,KAAM,mBAAoB,GAE1CrC,EAAM/F,EAAQ+F,IACjBoC,EAAQpC,GAAKkD,UAEbT,GAAQW,kBACRX,EAAQW,iBAAiBhJ,MAIrCkI,EAAGkB,QAAU,SAAUpJ,EAASqI,GAAnB,GACSqvD,GAA+GoF,EAExHe,EAFL71D,KAA2Bi2D,EAAY,GAAI5E,GAAUr5D,EAASqI,GAAU61D,EAAgB/9D,EAAM2H,aAAaO,EAAQL,QACvHK,GAAQL,QAAUk2D,CAClB,KAASL,IAAcK,GACnBxG,EAAcxvD,EAAGovD,EAAWuG,IACxBnG,IACAoF,EAAS,GAAIpF,GAAY13D,EAASk+D,EAAcL,GAAYhwB,WAC5D7lC,EAAQ+H,KAAK+sD,GAGjB90D,GAAQ,GACRi2D,EAAUP,IAAI11D,IAEThI,EAAQgC,GAAG,aACZhC,EAAQE,KAAMonB,QAAStnB,EAAQyD,KAAK,eAAiB,UAAWvD,IAAI,WAEpEmI,EAAQO,MACRP,EAAQO,OAEZ5I,EAAQunB,UACR02C,EAAUz1D,aAGlBG,EAAOT,GACHe,QAAS,SAAUulB,EAAUnpB,EAAYgD,GACrC,GAAI81D,GAAgB91D,EAAQ0zD,cAAe,QACpC1zD,GAAQ0zD,WACX17D,GAAe,cAAgB6H,IAAMi2D,EACrCj2D,EAAG6zD,WAAWvtC,EAAUnpB,EAAYgD,GAEhC6W,EACAsP,EAASvlB,QAAQqtD,EAAkBjxD,IAC/B8D,OAAO,EACPlH,MAAM,EACN8G,MAAM,EACNT,SAAUD,EAAQC,SAClBE,SAAUH,EAAQG,WAGtBgmB,EAAS7oB,KAAK,WACV,GAAI3F,GAAUrB,EAAEsJ,MAAOm2D,IACvBz4D,GAAK4wD,EAAgB,SAAU3wD,EAAKC,GAAf,GACbi1B,GAEIujC,EAQQC,EAAkCC,EAgBlCC,EAGIC,EAAoDC,EA7B5Dpe,EAAej7C,EAAaA,EAAWQ,GAAS,IAAM,IAC9Dy6C,KACI+d,EAASh5D,EACTQ,IAASg0D,IAAmBx0D,EAAWQ,KAAWhH,GAClDi8B,EAASwlB,EAAa//C,MAAMi6D,GACxBt7C,GACAvW,EAAO01D,GAAUvE,OAAQh/B,EAAO,MAGhCj1B,IAASq0D,IAAuB70D,EAAWQ,KAAWhH,IAClDy/D,EAAWt+D,EAAQE,IAAIs7D,IAAW+C,EAAsB,YAAZD,GAAsC,SAAZA,EACrEt+D,EAAQyD,KAAK83D,MACVgD,EACAv+D,EAAQyD,KAAK83D,IACTh0D,IAAK4uD,EAASn2D,EAAS,QAAU,EACjCY,KAAMu1D,EAASn2D,EAAS,SAAW,EACnCc,OAAQq1D,EAASn2D,EAAS,UAC1Ba,MAAOs1D,EAASn2D,EAAS,WAG7BA,EAAQyD,KAAK83D,IACTh0D,IAAK4uD,EAASn2D,EAAS,cAAgB,EACvCY,KAAMu1D,EAASn2D,EAAS,eAAiB,KAIjDw+D,EAAmBx+D,EAAQyD,KAAK83D,IACpCzgC,EAASwlB,EAAa//C,MAAMi6D,GACxB1/B,IACI2jC,EAAK54D,GAAS01D,GAAY,IAAM,GAASzgC,EAAO,GAAI4jC,EAAK74D,GAAS01D,GAAY,KAAOzgC,EAAO,IAAMA,EAAO,GACzGyjC,GACK7gD,MAAM8gD,EAAiB39D,OAKnB6c,MAAM+gD,IACP91D,EAAO01D,GAAUz9D,KAAM49D,EAAiB59D,KAAO69D,IAL9C/gD,MAAM+gD,IACP91D,EAAO01D,GAAUx9D,MAAO29D,EAAiB39D,MAAQ49D,IAOpD/gD,MAAM8gD,EAAiB19D,QAKnB4c,MAAMghD,IACP/1D,EAAO01D,GAAU92D,IAAKi3D,EAAiBj3D,IAAMm3D,IAL5ChhD,MAAMghD,IACP/1D,EAAO01D,GAAUv9D,OAAQ09D,EAAiB19D,OAAS49D,MAQtDhhD,MAAM+gD,IACP91D,EAAO01D,GAAUM,WAAYH,EAAiB59D,KAAO69D,IAEpD/gD,MAAMghD,IACP/1D,EAAO01D,GAAUO,UAAWJ,EAAiBj3D,IAAMm3D,QAMlEx/C,GAAuB,SAATrZ,GAAoBA,IAASw4D,UACrCA,GAAOx4D,GAEdw4D,GACA11D,EAAOy1D,EAAUC,MAIzB78D,EAAQgB,YACD47D,GAAStE,MAEpB95D,EAAQiJ,QAAQm1D,GACZj1D,OAAO,EACPlH,MAAM,EACN8G,MAAM,EACNT,SAAUD,EAAQC,SAClBE,SAAUH,EAAQG,gBAO1CN,EAAGyf,gBAAkBzf,EAAGkB,QACpBuuD,EAASx3D,EAAMrB,MAAM6J,QACrBC,KAAM,SAAU5I,EAAS6tC,GACrB,GAAIh/B,GAAO5G,IACX4G,GAAK7O,QAAUA,EACf6O,EAAK8pD,WAAa9qB,EAClBh/B,EAAKxG,WACLwG,EAAKgwD,sBACAhwD,EAAK4uD,UACN5uD,EAAK4uD,aAGbl1D,QAAS,WAEL,MADAN,MAAK6wD,UAAW,EACT7wD,KAAKy1D,OAEhBoB,KAAM,WAEF,MADA72D,MAAK6wD,UAAW,EACT7wD,KAAKy1D,OAEhBn0D,IAAK,SAAUw1D,GAEX,MADA92D,MAAK42D,mBAAmB9uD,KAAKgvD,GACtB92D,MAEX4lC,UAAW,SAAUhoC,GAEjB,MADAoC,MAAK0wD,WAAa9yD,EACXoC,MAEXK,SAAU,SAAUA,GAEhB,MADAL,MAAK+2D,UAAY12D,EACVL,MAEXg3D,aAAc,WACV,GAAIpwD,GAAO5G,KAAMg2D,EAAY,GAAI5E,GAAUxqD,EAAK7O,SACxCuI,QAASsG,EAAKiqD,SACdxwD,SAAUuG,EAAKmwD,YACfh3D,EAAU6G,EAAKgwD,mBAAmB1gD,QAAQtP,GAClD,OAAOovD,GAAUP,IAAI11D,IAEzB01D,IAAK,WACD,GAAIz1D,KAAK42D,oBAAsB52D,KAAK42D,mBAAmB,GACnD,MAAO52D,MAAKg3D,cAEhB,IAAmGp5D,GAAsDwiB,EAArJxZ,EAAO5G,KAAMjI,EAAU6O,EAAK7O,QAAS4F,EAAM,EAAG63D,EAAU5uD,EAAK4uD,QAAS59D,EAAS49D,EAAQ59D,OAAe2nD,EAAW7oD,EAAEylD,WAAYltC,KAAYtX,KAAkBgD,EAAWiM,EAAKjM,WAAYg7D,EAAiBh7D,EAAS/C,MAGvN,KAFA2nD,EAASlB,KAAK3nD,EAAEsP,MAAMY,EAAM,cAC5B7O,EAAQyD,KAAK,aAAa,GACrBmC,EAAM,EAAGA,EAAM/F,EAAQ+F,IACxBC,EAAQ43D,EAAQ73D,GACX5F,EAAQyD,KAAKoC,IACd7F,EAAQyD,KAAKoC,EAAO7F,EAAQE,IAAI2F,GAGxC,KAAKD,EAAM,EAAGA,EAAMg4D,EAAgBh4D,IAChChD,EAASgD,GAAK0C,SAASuG,EAAKmwD,WAAWtB,KAuB3C,OArBA7uD,GAAK6pD,QAAQxhD,EAAOtX,GACfI,EAAQgC,GAAG,aACZ2G,EAAOuO,GAASoQ,QAAStnB,EAAQyD,KAAK,eAAiB,UAEvDyb,IACAmJ,EAASroB,EAAQyD,KAAK,mBAClB4kB,IACAnR,EAAQvO,EAAO0f,EAAQnR,KAG/BA,EAAQu/C,EAAaz2D,EAASkX,GAC1BgI,IAAe7e,IACf6W,EAAQo/C,EAAkBp/C,IAE9BlX,EAAQE,IAAIgX,GAAOhX,IAAI42D,IACvBjoD,EAAKkyC,QACL/gD,EAAQyD,KAAK,kBAAmB7D,GAChCsI,EAAGe,QAAQjJ,EAASJ,GAChB0I,SAAUuG,EAAKmwD,UACfx2D,SAAUg/C,EAASnD,UAEhBmD,EAASp+C,WAEpB2e,KAAM,WACF,GAAIniB,GAAM,EAAGhD,EAAWqF,KAAKrF,WAAYg7D,EAAiBh7D,EAAS/C,MACnE,KAAK+F,EAAM,EAAGA,EAAMg4D,EAAgBh4D,IAChChD,EAASgD,GAAKmiB,MAGlB,OADAppB,GAAEsJ,KAAKjI,SAAS4nB,WAAU,GAAM,GACzB3f,MAEX+1D,gBAAiB,WAAA,GAEJj7D,GAAOlD,EACRgG,EAFJ7F,EAAUiI,KAAKjI,OACnB,KAAS+C,EAAI,EAAGlD,EAASoI,KAAKw1D,QAAQ59D,OAAQkD,EAAIlD,EAAQkD,IAClD8C,EAAQoC,KAAKw1D,QAAQ16D,GACzB/C,EAAQE,IAAI2F,EAAO7F,EAAQyD,KAAKoC,KAGxCq5D,UAAW,WACP,GAAIrwD,GAAO5G,KAAMjI,EAAU6O,EAAK7O,OAChCA,GAAQguB,WAAW,aAAazG,UAChC1Y,EAAKmvD,kBACDnvD,EAAK2pD,cACLx4D,EAAQyD,KAAK,aAAczD,EAAQE,IAAI,YAAY6I,OAEnDwxD,IAAYr7C,GACZyS,WAAWhzB,EAAEsP,MAAMY,EAAM,mBAAoB,GAEjDA,EAAK/F,YAETwkB,WAAY,SAAUjlB,GAClBM,GAAO,EAAMV,KAAKI,QAASA,IAE/BzF,SAAU,WACN,UAEJ41D,WAAY75D,EAAEkK,KACdk4C,MAAOpiD,EAAEkK,KACT6vD,QAAS/5D,EAAEkK,KACXC,SAAUnK,EAAEkK,KACZgE,cACAixD,WAAY,SAAUv1D,GAElB,MADAN,MAAK6wD,SAAWvwD,EACTN,QAkBXqxD,GACI,OACA,QACA,KACA,QACDnB,GACC,KACA,OAERX,EAAa,WACT3qD,WAAYysD,EACZ6F,QAAS,SAAUt5D,GAEf,MADAoC,MAAKI,QAAQ82D,QAAUt5D,EAChBoC,MAEXywD,QAAS,SAAUxhD,EAAOtX,GACtB,GAAiBw/D,GAAbvwD,EAAO5G,KAAWjI,EAAU6O,EAAK7O,QAASyB,EAAatB,EAAMuB,YAAaC,EAAcxB,EAAMyB,aAAcisC,EAAYhhC,GAAWgC,EAAK8pD,YAAatxD,GAAUwmC,EAAUmuB,UAAYnuB,EAAUmrB,SAAWr3D,EAAY3B,GAAWyB,EAAWzB,IAAWo4D,EAAa/wD,GAAUwH,EAAKxG,SAAWwG,EAAKxG,QAAQ82D,SAAW,GAAKlE,EAAI3C,EAAW,KAC1UzpD,GAAKiqD,WACLsG,EAAMloD,EACNA,EAAQtX,EACRA,EAAMw/D,GAENlgD,GACAhI,EAAM22B,EAAUkuB,YAAc3D,EAC9Bx4D,EAAIiuC,EAAUkuB,YAAczD,IAE5BphD,EAAM22B,EAAU1qC,UAAYi1D,EAC5Bx4D,EAAIiuC,EAAU1qC,UAAYm1D,MAItCd,EAAa,QACT3qD,WAAYysD,EACZ1wD,KAAM,SAAU5I,EAAS6tC,EAAWwxB,GAChC1H,EAAO3oD,UAAUpG,KAAKwH,KAAKnI,KAAMjI,EAAS6tC,GAC1C5lC,KAAKI,SAAYg3D,SAAUA,IAE/BC,gBAAiB,SAAUz5D,GAEvB,MADAoC,MAAKI,QAAQi3D,gBAAkBz5D,EACxBoC,MAEXrF,SAAU,WAAA,GACFiM,GAAO5G,KAAMM,EAAUsG,EAAKiqD,SAAUuG,EAAWxwD,EAAKxG,QAAQg3D,SAAUF,EAAUtwD,EAAKxG,QAAQi3D,iBAAmB,EAAGpoC,EAAMroB,EAAK8pD,WAChI/1D,GAAYzC,EAAM+H,GAAG2G,EAAK7O,SAASu/D,QAAQroC,GAAK4mC,WAAWv1D,GAI/D,OAHI82D,IACAz8D,EAASmN,KAAK5P,EAAM+H,GAAGm3D,GAAUE,QAAQ1yD,GAAWqqB,GAAK3uB,SAAS42D,QAAQA,GAASrB,YAAYv1D,IAE5F3F,KA0Cfo1D,EAAmB,OAAQ,UAAW,EAAG,GACzCA,EAAmB,OAAQ,QAAS,EAAG,KACvCR,EAAa,eACTkB,QAAS,SAAUxhD,EAAOtX,GACtB,GAAyH4/D,GAArH3wD,EAAO5G,KAAMjI,EAAU6O,EAAK7O,QAASqI,EAAUwG,EAAKxG,QAASo3D,EAASz/D,EAAQyD,KAAK23D,IAAS/zD,EAASgB,EAAQhB,OAAgBkB,EAAUsG,EAAKiqD,QAC3IvwD,IAAsB,OAAXk3D,GACZz/D,EAAQyD,KAAK23D,GAAQhxD,WAAWpK,EAAQE,IAAI,UAAYmI,EAAQqzB,QAEpE8jC,EAASx/D,EAAQyD,KAAK23D,KAAW,EACjCx7D,EAAI,UAAYyI,EAAQqzB,MAASnzB,EAA4Bi3D,EAAlBA,EAASn4D,KAG5DmwD,EAAa,WACTkB,QAAS,SAAUxhD,EAAOtX,GACtB,GAAIiP,GAAO5G,KAAMjI,EAAU6O,EAAK7O,QAASqI,EAAUwG,EAAKxG,QAAShB,EAASgB,EAAQhB,OAAOnI,MAAM,KAAMqJ,EAAUsG,EAAKiqD,QAChH55C,IACAtf,EAAIw6D,WAAc7xD,EAAsB,EAAZlB,EAAO,GACnCzH,EAAIy6D,WAAc9xD,EAAsB,EAAZlB,EAAO,KAEnCzH,EAAIgB,KAAQ2H,EAAsB,EAAZlB,EAAO,GAC7BzH,EAAI2H,IAAOgB,EAAsB,EAAZlB,EAAO,IAEhCrH,EAAQE,IAAI,WAGpBs3D,EAAa,UACT3qD,YACI,aACA,YAEJ4wD,SAAUnC,IACV5C,QAAS,SAAUxhD,EAAOtX,GACtB,GAAIiP,GAAO5G,KAAMjI,EAAU6O,EAAK7O,QAASqI,EAAUwG,EAAKxG,QAASE,EAAUsG,EAAKiqD,SAAU31D,EAA+B,aAApB0L,EAAK8pD,WAA4BM,EAASC,EAAOwG,EAAY1/D,EAAQ,GAAG+B,MAAMoB,GAAWgyD,EAAYn1D,EAAQyD,KAAKN,GAAWtD,EAASuK,WAAW+qD,GAAauK,GAAYC,EAAajoD,EAAM1X,EAAQE,IAAIiD,EAAU+3D,GAAM/3D,KAC9T+T,GAAM9Q,SAAW+0D,EACjBt7D,EAASwI,GAAWA,EAAQomD,MAAQkR,GAAc9/D,EAASA,GAAU8/D,EACrE//D,EAAIuD,IAAaoF,EAAU,EAAI1I,GAAUo7D,EACzC/jD,EAAM/T,IAAaoF,EAAU1I,EAAS,GAAKo7D,EACvC9F,IAAct2D,GACdmB,EAAQyD,KAAKN,EAAUu8D,IAG/BlH,WAAY,WACR,MAAOvwD,MAAK6wD,UAEhBhwD,SAAU,WACN,GAAI+F,GAAO5G,KAAMjI,EAAU6O,EAAK7O,QAASmD,EAA+B,aAApB0L,EAAK8pD,WAA4BM,EAASC,EAAOr5D,EAASG,EAAQyD,KAAKN,EACvHtD,IAAUq7D,GAAQr7D,IAAWm7D,GAC7BrpC,WAAW,WACP3xB,EAAQE,IAAIiD,EAAU+3D,GAAMh7D,IAAIiD,IACjC,MAIXo2D,GACA+E,SAAU,WACVK,WAAY,EACZC,UAAW,EACX9E,MAAO,GAEXtC,EAAa,YACT5uD,KAAM,SAAU5I,EAASqoB,GACrBpgB,KAAKjI,QAAUA,EACfiI,KAAKI,SAAYggB,OAAQA,GACzBpgB,KAAKw1D,YAET1c,MAAO,WACH94C,KAAKjI,QAAQ++B,SAASv5B,SAASsa,OAEnC44C,QAAS,SAAUxhD,EAAOtX,GACtB,GAAIiP,GAAO5G,KAAMjI,EAAU6O,EAAK7O,QAAS4/D,EAAW13D,EAAG23D,IAAI7/D,GAAU8/D,EAAW53D,EAAG23D,IAAIhxD,EAAKxG,QAAQggB,QAAS03C,EAAehJ,EAAkB/2D,EAAS,SAAU85D,EAAQ5xD,EAAG83D,UAAUF,EAAUF,GAAWK,EAAkB/3D,EAAG+3D,gBAAgBH,EAAUF,EAC1Pj3D,GAAOuO,EAAOqiD,GACd35D,EAAIk6D,MAAQ,EACZ95D,EAAQE,IAAI42D,GAAW,YAAY52D,IAAI42D,IACvC92D,EAAQE,IAAI42D,GAAW,SAAWiJ,EAAe,KACjD7oD,EAAM3P,IAAMq4D,EAASr4D,IACrB2P,EAAMtW,KAAOg/D,EAASh/D,KACtBsW,EAAM+oD,gBAAkBA,EAAgB/kC,EAAI+/B,EAAK,IAAMgF,EAAgB3mD,EAAI2hD,EACvEpsD,EAAKiqD,SACL5hD,EAAM4iD,MAAQA,EAEdl6D,EAAIk6D,MAAQA,KAIpBX,GACA5xD,IAAK,6BACLzG,OAAQ,6BACRF,KAAM,6BACNC,MAAO,8BAEP24D,GACAjyD,KACI2P,MAAO,gBACPtX,IAAK,mBAETkB,QACIoW,MAAO,mBACPtX,IAAK,iBAETgB,MACIsW,MAAO,gBACPtX,IAAK,oBAETiB,OACIqW,MAAO,kBACPtX,IAAK,kBAOb43D,EAAa,eACT3qD,WAAYysD,EACZ1wD,KAAM,SAAU5I,EAAS6tC,EAAWje,GAChC+nC,EAAO3oD,UAAUpG,KAAKwH,KAAKnI,KAAMjI,EAAS6tC,GAC1C5lC,KAAKi4D,WAAatwC,GAEtB8oC,QAAS,SAAUxhD,EAAOtX,GACtB,GAAIiP,GAAO5G,KAAMM,EAAUsG,EAAKiqD,SAAUjrB,EAAYtlC,EAAUsE,GAAWgC,EAAK8pD,YAAYpwD,QAAUsG,EAAK8pD,WAAYwH,EAAW3G,EAAU3rB,EAC5I32B,GAAMkpD,OAAS,EACXvxD,EAAKwxD,cACLnpD,EAAMopD,KAAOvH,EAAWlqD,EAAKqxD,WAAY//D,EAAM0M,WAAWghC,GAAWtlC,UAEzE2O,EAAMykD,IAAYR,EAClBv7D,EAAIk3D,IAAagF,IAAyBvzD,EAAU43D,EAASjpD,MAAQipD,EAASvgE,KAC9EsX,EAAM4/C,IAAagF,IAAyBvzD,EAAU43D,EAASvgE,IAAMugE,EAASjpD,QAElF6pC,MAAO,WACH94C,KAAKi4D,WAAWnU,OAAO9jD,KAAKjI,UAEhCugE,KAAM,SAAU16D,GAEZ,MADAoC,MAAKu4D,MAAQ36D,EACNoC,MAEXuwD,WAAY,WACR,GAAI3pD,GAAO5G,KAAMM,EAAUsG,EAAKiqD,SAAUyH,EAAO1xD,EAAK2xD,KACtD,OAAOj4D,KAAYg4D,IAASh4D,GAAWg4D,GAE3CxH,WAAY,SAAUlzD,GAElB,MADAoC,MAAKo4D,YAAcx6D,EACZoC,MAEXw4D,UAAW,WAEP,MADAx4D,MAAKjI,QAAQuC,SAAS,aACf0F,QAGfuvD,EAAa,cACT3qD,WAAYysD,EACZ1wD,KAAM,SAAU5I,EAAS6tC,EAAWje,GAChC+nC,EAAO3oD,UAAUpG,KAAKwH,KAAKnI,KAAMjI,EAAS6tC;AAC1C5lC,KAAKi4D,WAAatwC,GAEtB6tC,SAAU,QACV/E,QAAS,SAAUxhD,EAAOtX,GACtB,GAAIiP,GAAO5G,KAAM4lC,EAAYh/B,EAAKiqD,SAAWjsD,GAAWgC,EAAK8pD,YAAYpwD,QAAUsG,EAAK8pD,UACxFzhD,GAAMopD,KAAOvH,EAAWlqD,EAAKqxD,WAAYryB,GACzC32B,EAAMwpD,QAAU,KAChB9gE,EAAI8gE,QAAU,GAElBlI,WAAY,WACR,GAAI3pD,GAAO5G,KAAMM,EAAUsG,EAAKiqD,SAAUyH,EAAO1xD,EAAK2xD,KACtD,OAAOj4D,KAAYg4D,IAASh4D,GAAWg4D,GAE3CA,KAAM,SAAU16D,GAEZ,MADAoC,MAAKu4D,MAAQ36D,EACNoC,QAGfuvD,EAAa,YACT3qD,YACI,aACA,YAEJjE,KAAM,SAAU5I,EAAS6tC,EAAW0yB,EAAMt+B,GACtC01B,EAAO3oD,UAAUpG,KAAKwH,KAAKnI,KAAMjI,EAAS6tC,GAC1C5lC,KAAKI,WACLJ,KAAKI,QAAQk4D,KAAOA,EACpBt4D,KAAKI,QAAQ45B,KAAOA,GAExBr/B,SAAU,WACN,GAAyLqoD,GAArLp8C,EAAO5G,KAAMI,EAAUwG,EAAKxG,QAASwlC,EAAgC,eAApBh/B,EAAK8pD,WAA8B,OAAS,MAAOgI,EAAmBxgE,EAAM0M,WAAWghC,GAAWtlC,QAASA,EAAUsG,EAAKiqD,SAAgB8H,EAAYv4D,EAAQk4D,KAAKn8D,OAAM,GAAMipB,WAAW,MAAOwzC,EAAYx4D,EAAQ45B,KAAK79B,OAAM,GAAMipB,WAAW,MAAOrtB,EAAU6O,EAAK7O,OAM5T,OALIuI,KACA0iD,EAAOpd,EACPA,EAAY8yB,EACZA,EAAmB1V,IAGnB9qD,EAAM+H,GAAGG,EAAQk4D,MAAMO,WAAWjzB,EAAW7tC,GAASugE,MAAK,GAAMzC,WAAWv1D,GAC5EpI,EAAM+H,GAAGG,EAAQ45B,MAAM6+B,WAAWH,EAAkB3gE,GAAS89D,WAAWv1D,GACxEpI,EAAM+H,GAAG04D,GAAWG,YAAYlzB,EAAW7tC,GAASugE,MAAK,GAAMxH,YAAW,GAAM0H,YAAY3C,WAAWv1D,GACvGpI,EAAM+H,GAAG24D,GAAWE,YAAYJ,EAAkB3gE,GAAS+4D,YAAW,GAAM0H,YAAY3C,WAAWv1D,KAG3GmwD,QAAS,SAAUxhD,EAAOtX,GACtBsX,EAAM0kD,IAAeC,GACrB3kD,EAAM8pD,eAAiB,cACvB9pD,EAAMwpD,QAAU,KAChB9gE,EAAI8gE,QAAU,GAElB53D,SAAU,WACNb,KAAKjI,QAAQuvB,KAAK,cAAcY,YAGxCqnC,EAAa,QACT3qD,YACI,aACA,YAEJjE,KAAM,SAAU5I,EAAS6tC,EAAW0yB,EAAMt+B,GACtC01B,EAAO3oD,UAAUpG,KAAKwH,KAAKnI,KAAMjI,EAAS6tC,GAC1C5lC,KAAKI,WACLJ,KAAKI,QAAQk4D,KAAOA,EACpBt4D,KAAKI,QAAQ45B,KAAOA,GAExBr/B,SAAU,WACN,GAAyLqoD,GAArLp8C,EAAO5G,KAAMI,EAAUwG,EAAKxG,QAASwlC,EAAgC,eAApBh/B,EAAK8pD,WAA8B,OAAS,MAAOgI,EAAmBxgE,EAAM0M,WAAWghC,GAAWtlC,QAASA,EAAUsG,EAAKiqD,SAAgB94D,EAAU6O,EAAK7O,OAM9M,OALIuI,KACA0iD,EAAOpd,EACPA,EAAY8yB,EACZA,EAAmB1V,IAGnB9qD,EAAM+H,GAAGG,EAAQk4D,MAAMQ,YAAYlzB,EAAW7tC,GAASugE,MAAK,GAAMzC,WAAWv1D,GAC7EpI,EAAM+H,GAAGG,EAAQ45B,MAAM8+B,YAAYJ,EAAkB3gE,GAAS89D,WAAWv1D,KAGjFmwD,QAAS,SAAUxhD,GACfA,EAAM0kD,IAAeC,GACrB3kD,EAAM8pD,eAAiB,iBAG3BvH,GAAoBr5D,EAAQgf,SAASyC,QACrC63C,EAAmC,+CACvClC,EAAa,WACTyJ,QAAStiE,EAAEkK,KACXq4D,OAAQviE,EAAEkK,KACVD,KAAM,SAAU5I,EAASq/D,EAAU8B,GAC/BxJ,EAAO3oD,UAAUpG,KAAKwH,KAAKnI,KAAMjI,GACjCiI,KAAKm5D,UAAYziE,EAAE0gE,GACnBp3D,KAAKo5D,iBAAmBF,GAE5B74D,SAAU,WACN,KAAUyI,OAAM,kIAEpBuwD,iBAAkB,SAAU14C,GAExB,MADA3gB,MAAKg5D,QAAUr4C,EACR3gB,MAEXs5D,gBAAiB,SAAU34C,GAEvB,MADA3gB,MAAKi5D,OAASt4C,EACP3gB,MAEXu5D,MAAO,WACH,MAAO7iE,KAAI4K,IAAItB,KAAKw5D,UAAUl4D,IAAItB,KAAKm5D,YAE3CM,gBAAiB,WACb,GAAI7zB,GAAY5lC,KAAK0wD,WAAYgJ,EAAiB,wBAA0B15D,KAAKo5D,gBAOjF,OANIxzB,KACA8zB,GAAkB,SAAW9zB,GAE7B5lC,KAAK6wD,WACL6I,GAAkB,iBAEfA,GAEXn5D,SAAU,SAAU0H,GAChB,MAAKjI,KAAKu/C,UAAYt3C,GAAKvR,EAAEuR,EAAEmY,QAAQrmB,GAAG03D,IAA1C,CAGA,GAAI9pC,GAAY3nB,KAAK2nB,SACrBA,GAAUgjC,YAAY,YAAYA,YAAY3qD,KAAKy5D,mBAAmB7vC,IAAIxxB,EAAYugB,MAAO3Y,KAAK25D,eAClG35D,KAAKm5D,UAAUr4D,OAAO6pD,YAAY,gBAClC3qD,KAAKjI,QAAQ4yD,YAAY,aACrB6G,GACA7pC,EAAU1vB,IAAIo7D,GAAU,IAEvBrzD,KAAK45D,YACN55D,KAAKu5D,QAAQthE,IAAIs7D,GAAU,IAE/BvzD,KAAKu/C,SAASnD,gBACPp8C,MAAKu/C,WAEhBkW,IAAK,WACD,GAAIz1D,KAAK42D,oBAAsB52D,KAAK42D,mBAAmB,GACnD,MAAO52D,MAAKg3D,cAEhB,IAA8N6C,GAA1NjzD,EAAO5G,KAAMjI,EAAU6O,EAAK7O,QAASq/D,EAAWxwD,EAAKuyD,UAAWxxC,EAAY5vB,EAAQ4L,UAAUE,OAAOuzD,EAASzzD,WAAWvM,QAAS0iE,EAAOlzD,EAAK2yD,QAASha,EAAW7oD,EAAEylD,WAAYoa,EAAmBx+D,EAAQE,IAAIs7D,GA+BnN,OA9BK5rC,GAAU/vB,SACX+vB,EAAY5vB,EAAQ6B,UAExBoG,KAAK2nB,UAAYA,EACjB3nB,KAAKu/C,SAAWA,EAChBv/C,KAAK45D,WAAiC,YAApBrD,EACbv2D,KAAK45D,YACNE,EAAK7hE,IAAIs7D,GAAU,YAEnB/B,IACAqI,EAAmBlyC,EAAU1vB,IAAIo7D,IACjC1rC,EAAU1vB,IAAIo7D,GAAU,WAEvBj7D,GAGDL,EAAQuC,SAAS,eACjBqtB,EAAUrtB,SAAS0F,KAAKy5D,mBACxBz5D,KAAK25D,cAAgBjjE,EAAEsP,MAAMhG,KAAM,YACnC2nB,EAAUjiB,GAAGtN,EAAYugB,MAAO3Y,KAAK25D,eACrCzhE,EAAM0N,eAAe,WACjB7N,EAAQ4yD,YAAY,eAAerwD,SAAS,aAC5C88D,EAASn/D,IAAI,UAAW,IAAIqC,SAAS,gBACrCsM,EAAKoyD,QAAQ5B,EAAUr/D,GACvBG,EAAM0N,eAAe,WACjB+hB,EAAUgjC,YAAY,cAAcrwD,SAAS,YAC7CsM,EAAKqyD,OAAO7B,EAAUr/D,QAZ9BiI,KAAKO,WAgBFg/C,EAASp+C,WAEpB2e,KAAM,WACF9f,KAAKO,cAGTmxD,EAAYx5D,EAAMrB,MAAM6J,QACxBC,KAAM,WACF,GAAIiG,GAAO5G,IACX4G,GAAKmzD,WAAa/zD,EAAMY,EAAKozD,MAAOpzD,GACpCA,EAAKw0B,UAAW,GAEpB6+B,KAAMvjE,EAAEkK,KACRs5D,KAAMxjE,EAAEkK,KACRu5D,MAAOzjE,EAAEkK,KACTw5D,SAAU1jE,EAAEkK,KACZqO,MAAO,WACEjP,KAAKof,YAGLpf,KAAKk6D,OAINl6D,KAAKm6D,SAHLn6D,KAAKo7B,UAAW,EAChBljC,EAAM0N,eAAe5F,KAAK+5D,eAKlC36C,QAAS,WACL,OAAO,GAEX4L,OAAQ,WACJhrB,KAAKo7B,UAAW,EAChBp7B,KAAKo6D,YAETJ,MAAO,WACH,GAAIpzD,GAAO5G,IACN4G,GAAKw0B,WAGVx0B,EAAKqzD,OACArzD,EAAKszD,QAGNtzD,EAAKw0B,UAAW,EAChBx0B,EAAKuzD,SAHLjiE,EAAM0N,eAAegB,EAAKmzD,gBAOlCpI,EAAaD,EAAUhxD,QACvBC,KAAM,SAAUP,GACZ,GAAIwG,GAAO5G,IACXU,GAAOkG,EAAMxG,GACbsxD,EAAUztD,GAAGtD,KAAKwH,KAAKvB,IAE3BszD,KAAM,WACF,MAAOl6D,MAAKq6D,cAAgBr6D,KAAKK,UAErCg6D,WAAY,WACR,MAAOz7D,MAAKoT,IAAIhS,KAAKK,SAAU,GAAIrE,MAASgE,KAAKs6D,YAErDC,OAAQ,SAAUn6D,GACd,GAAIwG,GAAO5G,KAAMw6D,EAAU5zD,EAAK4zD,OAChC5zD,GAAK6zD,QAAUD,EAAQ5zD,EAAK6sB,MAC5B7sB,EAAKysB,MAAQjzB,EAAQsb,SAAW9U,EAAK6zD,QACrC7zD,EAAKvG,SAAsC,gBAApBD,GAAQC,SAAuBD,EAAQC,SAAW,IACzEuG,EAAKqzD,KAAOrzD,EAAK8zD,WAAWt6D,EAAQm0D,MACpC3tD,EAAK0zD,UAAY,GAAIt+D,MACrB4K,EAAKqI,SAETyrD,WAAY,SAAUnG,GAClB,GAAI3tD,GAAO5G,IACX,OAAO,YACH4G,EAAK4zD,QAAQG,SAAS/zD,EAAK6sB,KAAM8gC,EAAK3tD,EAAKyzD,aAAczzD,EAAK6zD,QAAS7zD,EAAKysB,MAAOzsB,EAAKvG,eAIpGK,EAAOixD,GACHiJ,YAAa,SAAU1pD,EAAGrO,EAAGuG,EAAGuH,GAC5B,MAAOO,IAAKP,EAAI9N,EAAIuG,EAAIA,IAAMxK,KAAKi8D,IAAI,MAAS3pD,EAAIP,GAAK,GAAK9N,GAElEi4D,YAAa,SAAU5pD,EAAGrO,EAAGuG,EAAGuH,EAAGM,GAE/B,MADAA,GAAI,QACG7H,IAAM8H,EAAIA,EAAIP,EAAI,GAAKO,IAAMD,EAAI,GAAKC,EAAID,GAAK,GAAKpO,KAGnE5C,EAAGyxD,UAAYA,EACfzxD,EAAG0xD,WAAaA,EAChB1xD,EAAGsvD,aAAeA,EAClBtvD,EAAG23D,IAAM,SAAU7/D,GACfA,EAAUrB,EAAEqB,EACZ,IAAIiH,GAASjH,EAAQqH,QAGrB,OAFAJ,GAAO/F,MAAQf,EAAMuB,YAAY1B,GACjCiH,EAAO9F,OAAShB,EAAMyB,aAAa5B,GAC5BiH,GAEXiB,EAAG+3D,gBAAkB,SAAU+C,EAAOC,GAClC,GAAI/nC,IAAK8nC,EAAMpiE,KAAOqiE,EAAMriE,MAAQqiE,EAAM/hE,OAAS+hE,EAAM/hE,MAAQ8hE,EAAM9hE,OAAQoY,GAAK0pD,EAAMz7D,IAAM07D,EAAM17D,KAAO07D,EAAM9hE,QAAU8hE,EAAM9hE,OAAS6hE,EAAM7hE,OAClJ,QACI+5B,EAAGxd,MAAMwd,GAAK,EAAIA,EAClB5hB,EAAGoE,MAAMpE,GAAK,EAAIA,IAG1BpR,EAAG83D,UAAY,SAAUgD,EAAOC,GAC5B,MAAOp8D,MAAKoT,IAAI+oD,EAAM9hE,MAAQ+hE,EAAM/hE,MAAO8hE,EAAM7hE,OAAS8hE,EAAM9hE,SAEpE+G,EAAGg7D,SAAW,SAAUF,EAAOC,GAC3B,MAAOp8D,MAAKlG,IAAIqiE,EAAM9hE,MAAQ+hE,EAAM/hE,MAAO8hE,EAAM7hE,OAAS8hE,EAAM9hE,UAEtEvC,OAAOuB,MAAM2sB,QACRluB,OAAOuB,OACE,kBAAVzB,SAAwBA,OAAOgiC,IAAMhiC,OAAS,SAAUiiC,EAAIC,EAAIC,IACrEA,GAAMD,OAEV,SAAUniC,EAAGC,QACVA,OAAO,cACH,aACA,eACA,YACDD,IACL,WAsRE,MAzQC,UAAUE,EAAGE,GAgLV,QAASskE,GAAgBpH,GACrB,IAAKA,EACD,QAEJ,IAAIjgD,GAAUigD,EAAWx7D,MAAM6iE,MAC/B,QACIj8D,KAAM2U,EAAQ,GACd+xB,UAAW/xB,EAAQ,GACnBvT,QAAwB,YAAfuT,EAAQ,IAxL5B,GACO3b,GAAQvB,OAAOuB,MAAOmM,EAAanM,EAAMmM,WAAY+2D,EAAS,SAAUx+B,EAAO,OAAQy+B,EAAO,OAAQC,EAAO,OAAQC,EAAmB,kBAAmBC,EAAiB,gBAAiBC,EAAS,SAAUC,EAAS,SAAUC,EAAoB,0BACvPC,EAAOv3D,EAAW3D,QAClBC,KAAM,SAAUk7D,EAASz7D,GACrB,GAAIwG,GAAO5G,IACXI,GAAUA,MACViE,EAAWJ,GAAGtD,KAAKwH,KAAKvB,GACxBA,EAAKi1D,QAAUA,EACfj1D,EAAKid,GAAK3rB,EAAMyrB,OAChB/c,EAAKwd,QAAUhkB,EAAQgkB,SAAW,MAClCxd,EAAKmiC,MAAQ3oC,EAAQ2oC,MACrBniC,EAAKk1D,MAAQ17D,EAAQtH,QAAS,EAC9BkH,KAAK+7D,cAAgB37D,EAAQ47D,eAAgB,EAC7Cp1D,EAAKq1D,cACLr1D,EAAKQ,MACDw1B,EACAy+B,EACAC,EACAC,EACAC,GACDp7D,IAEPmI,OAAQ,SAAUof,GACd,GAAI/gB,GAAO5G,KAAMk8D,GAAkBt1D,EAAK7O,OAexC,OAdImkE,KACAt1D,EAAK7O,QAAU6O,EAAKu1D,kBAEpBx0C,GACAjxB,EAAEixB,GAAWm8B,OAAOl9C,EAAK7O,SAEzBmkE,IACAhkE,EAAMkP,KAAKR,EAAK7O,QAAS6O,EAAKmiC,OAC9BniC,EAAKoB,QAAQ40B,IAEbjV,IACA/gB,EAAKw1D,cAAcX,GACnB70D,EAAKoB,QAAQqzD,IAEVz0D,EAAK7O,SAEhBoE,MAAO,WACH,MAAO,IAAIkgE,GAAUr8D,OAEzBs8D,kBAAmB,WACf,OAAO,GAEXC,kBAAmB,WACf,OAAO,GAEXC,UAAW,WACPx8D,KAAKjI,QAAQE,IAAI,UAAW,KAEhCwkE,QAAS,aAETC,QAAS,WACL18D,KAAKc,QAETu4D,iBAAkB,SAAUn6D,GACxBc,KAAKgI,QAAQuzD,GAAoBr8D,KAAMA,KAE3Co6D,gBAAiB,SAAUp6D,GACvBc,KAAKgI,QAAQwzD,GAAkBt8D,KAAMA,KAEzC4B,KAAM,WACFd,KAAKo8D,cAAcV,GACnB17D,KAAKjI,QAAQ4kE,SACb38D,KAAKgI,QAAQszD,IAEjBx1C,QAAS,WACL,GAAI/tB,GAAUiI,KAAKjI,OACfA,KACAG,EAAM2P,OAAO9P,GACbG,EAAM4tB,QAAQ/tB,GACdA,EAAQmwB,WAGhB00C,UAAW,SAAUA,GACjBlmE,EAAEgK,OAAOV,KAAKi8D,WAAYW,IAE9BR,cAAe,SAAU/3B,GACrB,IAAK,GAAI9mB,KAAevd,MAAKi8D,WACzBj8D,KAAKi8D,WAAW1+C,GAAa8mB,GAAYrkC,KAAMud,IAGvD4+C,eAAgB,WAAA,GAC2CpkE,GAAS8jE,EAuBpD78D,EAvBR4H,EAAO5G,KAAM3G,EAAU,IAAMuN,EAAKwd,QAAU,KAChD,KACIy3C,EAAUnlE,EAAE6G,SAASs/D,eAAej2D,EAAKi1D,UAAYj1D,EAAKi1D,SACtDA,EAAQ,GAAGz3C,UAAYg3C,IACvBS,EAAUA,EAAQn5D,QAExB,MAAOuF,GACD0zD,EAAkBzhE,KAAK+N,EAAEuc,WACzBq3C,EAAUj1D,EAAKi1D,SAyBvB,MAtBuB,gBAAZA,IACPA,EAAUA,EAAQ1kE,QAAQ,aAAc,IACpCyP,EAAKm1D,gBACLF,EAAU3jE,EAAMuK,SAASo5D,GAASj1D,EAAKmiC,YAE3ChxC,EAAUrB,EAAE2C,GAASyqD,OAAO+X,GACvBj1D,EAAKk1D,QACN/jE,EAAUA,EAAQ+kE,cAGtB/kE,EAAU8jE,EACNj1D,EAAKm1D,gBACD/8D,EAAStI,EAAEwB,EAAMuK,SAAS/L,EAAE,WAAWotD,OAAO/rD,EAAQoE,OAAM,IAAOuG,QAAQkE,EAAKmiC,YAChFryC,EAAEoM,SAASvF,SAAUxF,EAAQ,KAC7BA,EAAQglE,YAAY/9D,GAExBjH,EAAUiH,GAEV4H,EAAKk1D,QACL/jE,EAAUA,EAAQ86C,QAAQx5C,GAASO,WAGpC7B,KAGXskE,EAAYnkE,EAAMrB,MAAM6J,QACxBC,KAAM,SAAUgoB,GACZjyB,EAAEgK,OAAOV,MACLjI,QAAS4wB,EAAK5wB,QAAQoE,OAAM,GAC5B23D,WAAYnrC,EAAKmrC,WACjBjwC,GAAI8E,EAAK9E,KAEb8E,EAAK5wB,QAAQ6B,SAASkqD,OAAO9jD,KAAKjI,UAEtC2kE,QAAS,WACL18D,KAAKjI,QAAQmwB,UAEjBmxC,iBAAkB3iE,EAAEkK,KACpB04D,gBAAiB5iE,EAAEkK,OAEnBo8D,EAASpB,EAAKl7D,QACdC,KAAM,SAAUk7D,EAASz7D,GACrBw7D,EAAK33D,GAAGtD,KAAKwH,KAAKnI,KAAM67D,EAASz7D,GACjCJ,KAAKi9D,eAETt1C,UAAW,SAAU5jB,GACjB,GAAI4jB,GAAY3nB,KAAKi9D,WAAWl5D,EAKhC,OAJK4jB,KACDA,EAAY3nB,KAAKk9D,iBAAiBn5D,GAClC/D,KAAKi9D,WAAWl5D,GAAY4jB,GAEzBA,GAEXw1C,OAAQ,SAAUp5D,EAAU4kB,EAAMmrC,GAC9B9zD,KAAK2nB,UAAU5jB,GAAU/J,KAAK2uB,EAAMmrC,IAExCoJ,iBAAkB,SAAUn5D,GACxB,GAAyD4jB,GAArD2R,EAAOt5B,KAAKuI,SAAUxQ,EAAUuhC,EAAKhS,KAAKvjB,EAC9C,KAAKhM,EAAQH,QAAU0hC,EAAKv/B,GAAGgK,GAAW,CACtC,IAAIu1B,EAAKv/B,GAAGgK,GAGR,KAAU+E,OAAM,6CAAgD/E,EAAW,YAF3EhM,GAAUuhC,EASlB,MAJA3R,GAAY,GAAIy1C,GAAcrlE,GAC9B4vB,EAAUvgB,KAAK,WAAY,SAAUa,GACjCA,EAAE0gB,KAAKpgB,OAAOxQ,KAEX4vB,KAGX01C,EAAWzB,EAAKl7D,QAChB48D,OAAQ,SAAU30C,EAAMpL,GACpBoL,EAAK5wB,QAAQuvB,KAAK/J,GAAaw/C,YAAY/8D,KAAKuI,WAEpDo0D,OAAQ,eAGRxB,EAAmB,4BAYnBiC,EAAgB/4D,EAAW3D,QAC3BC,KAAM,SAAUgnB,GACZtjB,EAAWJ,GAAGtD,KAAKwH,KAAKnI,MACxBA,KAAK2nB,UAAYA,EACjB3nB,KAAK0e,WACL1e,KAAK2oB,KAAO,KACZ3oB,KAAKu9D,SAAU,GAEnBC,MAAO,WACHx9D,KAAKu9D,SAAU,EACfv9D,KAAKgI,QAAQ,YAAc2gB,KAAM3oB,KAAK2oB,OACtC3oB,KAAKgI,QAAQ,UAEjBrQ,IAAK,WACDqI,KAAK2oB,KAAK8zC,UACVz8D,KAAKo3D,SAASsF,UACd18D,KAAKw9D,SAETxjE,KAAM,SAAU2uB,EAAMmrC,EAAY2J,GAC9B,IAAK90C,EAAK2zC,qBAAuBt8D,KAAK2oB,OAAS3oB,KAAK2oB,KAAK4zC,oBAErD,MADAv8D,MAAKgI,QAAQ,UACN,CAEXy1D,GAAaA,GAAc90C,EAAK9E,EAChC,IAAIjd,GAAO5G,KAAM2L,EAAUgd,IAAS/hB,EAAK+hB,KAAOA,EAAKxsB,QAAUyK,EAAK+hB,KAAMjK,EAAU9X,EAAK8X,QAASg/C,EAAgBh/C,EAAQA,EAAQ9mB,OAAS,OAAUoiC,EAAO0jC,EAAc75C,KAAO45C,EAAYE,EAAgB7J,IAAe95B,EAAOtb,EAAQA,EAAQ9mB,OAAS,GAAGk8D,WAAanrC,EAAKmrC,YAAa8J,EAAiB1C,EAAgByC,EAmB/T,OAlBI/2D,GAAK22D,SACL32D,EAAKiuD,OAAO/0C,OAEM,SAAlB69C,IACAA,EAAgB,MAEpB/2D,EAAKoB,QAAQ,YAAc2gB,KAAMA,IACjC/hB,EAAK+hB,KAAOA,EACZ/hB,EAAKwwD,SAAWzrD,EAChB/E,EAAK22D,SAAU,EACVvjC,EAMDtb,EAAQqN,MALRrN,EAAQ5W,MACJ+b,GAAI45C,EACJ3J,WAAY6J,IAKfhyD,GAMAgyD,GAAkBzlE,EAAM6H,QAAQqf,SAIjCuJ,EAAK5wB,QAAQuC,SAAS,eACtBquB,EAAK6zC,YACDxiC,IAAS85B,IACT8J,EAAet9D,SAAWs9D,EAAet9D,SAE7CsG,EAAKiuD,OAAS38D,EAAM+H,GAAG0oB,EAAK5wB,SAASZ,QAAQwU,EAAQ5T,QAAS6lE,EAAe1+D,MAAMm6D,iBAAiB,WAChG1wC,EAAK0wC,iBAAiB,QACtB1tD,EAAQ0tD,iBAAiB,UAC1BC,gBAAgB,WACf3wC,EAAK2wC,gBAAgB,QACrB3tD,EAAQ2tD,gBAAgB,UACzB1zB,UAAUg4B,EAAeh4B,WAAWiwB,WAAW+H,EAAet9D,SACjEsG,EAAKiuD,OAAOY,MAAMpX,KAAK,WACnBz3C,EAAKjP,UAhBTgxB,EAAK6zC,YACL51D,EAAKjP,QAkBF,IAzBHgxB,EAAK6zC,YACL7zC,EAAK8zC,UACL71D,EAAK42D,SACE,KAyBnBtlE,GAAMklE,cAAgBA,EACtBllE,EAAMmlE,SAAWA,EACjBnlE,EAAM8kE,OAASA,EACf9kE,EAAM0jE,KAAOA,EACb1jE,EAAMmkE,UAAYA,GACpB1lE,OAAOuB,MAAM2sB,QACRluB,OAAOuB,OACE,kBAAVzB,SAAwBA,OAAOgiC,IAAMhiC,OAAS,SAAUiiC,EAAIC,EAAIC,IACrEA,GAAMD,OAEV,SAAUniC,EAAGC,QACVA,OAAO,sBAAuB,cAAeD,IAC/C,WAwEE,MAhEC,UAAUE,GACP,GAAIkkD,GAAY1iD,MAAMsD,KAAKg2C,gBAAgB9wC,QACvCC,KAAM,SAAUP,GAAV,GAUEy9D,GATAC,EAAU19D,GAAWA,EAAQ09D,QAAU19D,EAAQ09D,WAC/C38D,EAAU28D,EAAQ38D,OACtB,KAAKA,EACD,KAAU2H,OAAM,oCAEpB,IAA2B,kBAAhB3H,GAAQ+4D,MAA6C,kBAAhB/4D,GAAQ48D,KACpD,KAAUj1D,OAAM,0CAIpB,IAFA9I,KAAKmB,QAAUA,EACX08D,EAAMC,EAAQD,KACbA,EACD,KAAU/0D,OAAM,gCAEpB,IAAqB,kBAAV+0D,GAAIn4D,IAAyC,kBAAdm4D,GAAIroC,OAC1C,KAAU1sB,OAAM,qDAEpB9I,MAAK69D,IAAMA,EACX3lE,MAAMsD,KAAKg2C,gBAAgBvtC,GAAGtD,KAAKwH,KAAKnI,KAAMI,IAElD0H,KAAM,SAAUk2D,GACZ,GAAI9qC,GAASlzB,KAAKI,QAAQ09D,QAAQ5qC,UAC9BA,GAAOmV,QACProC,KAAK69D,IAAIn4D,GAAGwtB,EAAOmV,OAAQ21B,EAAUnjB,YAErC3nB,EAAOkV,QACPpoC,KAAK69D,IAAIn4D,GAAGwtB,EAAOkV,OAAQ41B,EAAUjjB,YAErC7nB,EAAOpN,SACP9lB,KAAK69D,IAAIn4D,GAAGwtB,EAAOpN,QAASk4C,EAAU/iB,cAG9CgjB,MAAO,SAAU79D,EAASlB,GAAnB,GAMCopB,GACA9sB,EANAqiE,EAAM79D,KAAK69D,IACXK,EAASl+D,KAAKI,QAAQ09D,QAAQI,MAClC,KAAKA,IAAWA,EAAOh/D,GACnB,KAAU4J,OAAM5Q,MAAM6Q,OAAO,uCAAwC7J,GAErEopB,IAAQ41C,EAAOh/D,IACf1D,EAAOwE,KAAKsoC,aAAaloC,EAAQ5E,KAAM0D,GACtCxI,EAAEywB,cAAc3rB,IACjB8sB,EAAKxgB,KAAKtM,GAEdwE,KAAKmB,QAAQ+4D,KAAK,WACd2D,EAAIroC,OAAO1uB,MAAM+2D,EAAKv1C,GAAM4xC,KAAK95D,EAAQy4C,SAASklB,KAAK39D,EAAQ24C,UAGvEnR,KAAM,SAAUxnC,GACZJ,KAAKi+D,MAAM79D,EAAS,SAExBioC,OAAQ,SAAUjoC,GACdJ,KAAKi+D,MAAM79D,EAAS,WAExBgoC,OAAQ,SAAUhoC,GACdJ,KAAKi+D,MAAM79D,EAAS,WAExB0lB,QAAS,SAAU1lB,GACfJ,KAAKi+D,MAAM79D,EAAS,aAG5B1J,GAAEgK,QAAO,EAAMxI,MAAMsD,MAAQ0sC,YAAc41B,QAASljB,MACtDjkD,OAAOuB,MAAM2sB,QACRluB,OAAOuB,OACE,kBAAVzB,SAAwBA,OAAOgiC,IAAMhiC,OAAS,SAAUiiC,EAAIC,EAAIC,IACrEA,GAAMD,OAEV,SAAUniC,EAAGC,QACVA,OAAO,mBAAoB,cAAeD,IAC5C,WAkUE,MA1TC,UAAUE,EAAGE,GAwBV,QAASunE,GAAapmE,GAClB,GAAoEmX,GAAhEkvD,EAAYlmE,EAAMmpB,GAAGg9C,UAAUC,kBAAqBzxC,IACxD,KAAK3d,IAAQkvD,GACT1nE,EAAEgK,QAAO,EAAMmsB,EAAOuxC,EAAUlvD,GAAMktC,QAAQrkD,GAElD,OAAO80B,GAEX,QAAS+O,GAAOh+B,GACZ,MAAOA,GAAMzG,QAAQ,QAAS,SAASA,QAAQ,UAAW,KAAKA,QAAQ,SAAU,KAAMA,QAAQ,QAAS,KAAKA,QAAQ,QAAS,KAElI,QAASonE,GAAsB3gE,GAE3B,MADAA,IAASA,EAAQ,IAAI3G,MAAM,KACvB2G,EAAMhG,OAAS,EACRgG,EAAM,GAAGhG,OAEb,EAEX,QAAS4mE,GAAUppC,GACf,MACW1+B,GADPA,EAAE+nE,UACO/nE,EAAE+nE,UAAUrpC,GAEhBA,GAEb,QAASspC,GAA0Bn4C,EAAUukB,GAA7C,GAC0B/yC,GAASmL,EACtBvF,EAAS/F,EADdqlE,EAAavmE,GACjB,KAASiH,EAAM,EAAG/F,EAAS2uB,EAAS3uB,OAAQ+F,EAAM/F,EAAQ+F,IACtD5F,EAAUwuB,EAAS5oB,GACfghE,EAAiBzkE,KAAKnC,EAAQkG,aAC9BiF,EAAOnL,EAAQiK,aAAa9J,EAAMgL,KAAK,QACnCA,IAAS4nC,IACTmyB,EAAaA,EAAW37D,IAAIvJ,IAIxC,OAAOklE,GA1Dd,GA4DO2B,GA3DA1mE,EAAQvB,OAAOuB,MAAO8M,EAAS9M,EAAMmpB,GAAGrc,OAAQ65D,EAAK,kBAAmBC,EAAa,gBAAiBH,EAAuB5iE,OAAO+iE,EAAY,KAAMC,EAAe,YAAaC,EAAa,UAAWC,EAAc,yIAA0IC,EAAY,sqCAAuqCC,EAAgB,uEAAwEC,EAAmB,uCAAwCC,EAAsB,6BAA8BC,EAAO,OAAQC,EAAO,OAAQC,EAAO,OAAQC,EAAa,aAAcC,EAAW,WAAYjmC,EAAS,SAAUkmC,EAAiB,gBAAiB35D,EAAQtP,EAAEsP,MAAO45D,EAAiB,SAAUhiE,EAAOgR,GAI/5D,MAHuB,gBAAZA,KACPA,EAAc7S,OAAO,OAAS6S,EAAU,OAErCA,EAAQ1U,KAAK0D,IACrBiiE,EAAU,SAAU//D,EAAOiE,EAAU6K,GACpC,GAAIhR,GAAQkC,EAAMgtC,KAClB,QAAIhtC,EAAM+D,OAAOE,GAAUnM,QAAoB,KAAVgG,GAC1BgiE,EAAehiE,EAAOgR,IAGlCkxD,EAAe,SAAUhgE,EAAOoP,GAC/B,QAAIpP,EAAMlI,QAC8B,MAA7BkI,EAAM,GAAGiqC,WAAW76B,GAIlChX,GAAMmpB,GAAGg9C,YACVnmE,EAAMmpB,GAAGg9C,WACLxxC,SACAnL,cAuCJk9C,EAAY55D,EAAOtE,QACnBC,KAAM,SAAU5I,EAASqI,GACrB,GAAIwG,GAAO5G,KAAM00D,EAAWyJ,EAAapmE,GAAUgoE,EAA4B,IAAM7nE,EAAMgL,KAAK,YAAc,UAC9G9C,GAAUA,MACVA,EAAQysB,MAAQn2B,EAAEgK,UAAWxI,EAAMmpB,GAAGg9C,UAAUxxC,MAAO6nC,EAAS7nC,MAAOzsB,EAAQysB,OAC/EzsB,EAAQshB,SAAWhrB,EAAEgK,UAAWxI,EAAMmpB,GAAGg9C,UAAU38C,SAAUgzC,EAAShzC,SAAUthB,EAAQshB,UACxF1c,EAAOf,GAAGtD,KAAKwH,KAAKvB,EAAM7O,EAASqI,GACnCwG,EAAKo5D,eAAiB9nE,EAAMuK,SAASmE,EAAKxG,QAAQ6/D,eAC9Cr5D,EAAK7O,QAAQgC,GAAGylE,IAChB54D,EAAK7O,QAAQmL,KAAKu8D,EAAYA,GAElC74D,EAAKs5D,eAAiBf,EAAgBY,EACtCn5D,EAAKu5D,kBAAoBf,EAAmBW,EAC5Cn5D,EAAKw5D,WACLx5D,EAAKy5D,gBACLz5D,EAAK05D,cAAe,GAExB54D,QACIg4D,EACAjmC,EACAkmC,GAEJv/D,SACI8O,KAAM,YACN+wD,cAAe,oHACfv+C,UACI6+C,SAAU,kBACV3xD,QAAS,mBACToD,IAAK,6CACLtZ,IAAK,6CACLy7D,KAAM,mBACNqM,MAAO,yBACPr9C,IAAK,uBACLtX,KAAM,wBACN40D,YAAa,8DAEjB5zC,OACI0zC,SAAU,SAAUzgE,GAChB,GAAI4gE,GAAW5gE,EAAM+D,OAAO,mBAAmBjM,SAAWkI,EAAM/F,GAAG,YAAa6D,EAAQkC,EAAMgtC,KAC9F,SAASgzB,EAAahgE,EAAO,eAAiBlC,GAAmB,KAAVA,GAAiC,IAAjBA,EAAMhG,QAAgB8oE,KAEjG9xD,QAAS,SAAU9O,GACf,OAAIA,EAAM+D,OAAO,gFAAgFA,OAAO,aAAajM,QAA0B,KAAhBkI,EAAMgtC,OAC1H8yB,EAAe9/D,EAAMgtC,MAAOhtC,EAAMoD,KAAK,aAItD8O,IAAK,SAAUlS,GACX,GAAIA,EAAM+D,OAAOw7D,EAAsB,KAAOnnE,EAAMgL,KAAK,QAAU,YAAYW,OAAO,SAASjM,QAA0B,KAAhBkI,EAAMgtC,MAAc,CACzH,GAAI96B,GAAM7P,WAAWrC,EAAMoD,KAAK,SAAW,EAAG4pC,EAAM50C,EAAMiK,WAAWrC,EAAMgtC,MAC3E,OAAO96B,IAAO86B,EAElB,OAAO,GAEXp0C,IAAK,SAAUoH,GACX,GAAIA,EAAM+D,OAAOw7D,EAAsB,KAAOnnE,EAAMgL,KAAK,QAAU,YAAYW,OAAO,SAASjM,QAA0B,KAAhBkI,EAAMgtC,MAAc,CACzH,GAAIp0C,GAAMyJ,WAAWrC,EAAMoD,KAAK,SAAW,EAAG4pC,EAAM50C,EAAMiK,WAAWrC,EAAMgtC,MAC3E,OAAOp0C,IAAOo0C,EAElB,OAAO,GAEXqnB,KAAM,SAAUr0D,GACZ,GAAIA,EAAM+D,OAAOw7D,EAAsB,KAAOnnE,EAAMgL,KAAK,QAAU,YAAYW,OAAO,UAAUjM,QAA0B,KAAhBkI,EAAMgtC,MAAc,CAC1H,GAAiK6zB,GAA7J3uD,EAAM7P,WAAWrC,EAAMoD,KAAK,SAAW,EAAGixD,EAAOhyD,WAAWrC,EAAMoD,KAAK,UAAY,EAAG4pC,EAAM3qC,WAAWrC,EAAMgtC,OAAQn+B,EAAW4vD,EAAsBpK,EAC1J,OAAIxlD,IACAgyD,EAAQ/hE,KAAKi8D,IAAI,GAAIlsD,GACd/P,KAAKpE,OAAOsyC,EAAM96B,GAAO2uD,IAAUxM,EAAOwM,GAAS/hE,KAAKi8D,IAAI,IAAKlsD,KAAc,IAElFm+B,EAAM96B,GAAOmiD,IAAS,EAElC,OAAO,GAEXqM,MAAO,SAAU1gE,GACb,MAAO+/D,GAAQ//D,EAAO,iBAAmB5H,EAAMgL,KAAK,QAAU,UAAW+7D,IAE7E97C,IAAK,SAAUrjB,GACX,MAAO+/D,GAAQ//D,EAAO,eAAiB5H,EAAMgL,KAAK,QAAU,QAASg8D,IAEzErzD,KAAM,SAAU/L,GACZ,OAAIA,EAAM+D,OAAO,iBAAmB3L,EAAMgL,KAAK,QAAU,UAAUtL,QAA0B,KAAhBkI,EAAMgtC,OACL,OAAnE50C,EAAMwe,UAAU5W,EAAMgtC,MAAOhtC,EAAMoD,KAAKhL,EAAMgL,KAAK,cAKtE09D,gBAAgB,GAEpB96C,QAAS,WACL9gB,EAAOf,GAAG6hB,QAAQ3d,KAAKnI,MACvBA,KAAKjI,QAAQ6xB,IAAIi1C,IAErBjhE,MAAO,WACH,QAAKoC,KAAKsgE,cAGsB,IAAzBtgE,KAAKipC,SAASrxC,QAEzBwnD,QAAS,SAAUn3C,GACf,QAAKjI,KAAK6gE,aACN54D,EAAEyiB,kBACFziB,EAAE64D,2BACF74D,EAAE9D,kBACK,IAIf48D,cAAe,SAAUhpE,GACrB,GAAIy0C,GAAQxsC,KAAKpC,OACjBoC,MAAKghE,cAAcjpE,GACfiI,KAAKpC,UAAY4uC,GACjBxsC,KAAKgI,QAAQyxB,IAGrB4mC,cAAe,WACX,GAAIz5D,GAAO5G,IACP4G,GAAK7O,QAAQgC,GAAGylE,IAChB54D,EAAK7O,QAAQ2N,GAAG,SAAWm5D,EAAI74D,EAAMY,EAAKw4C,QAASx4C,IAEnDA,EAAKxG,QAAQwgE,iBACRh6D,EAAK7O,QAAQgC,GAAGolE,IAQjBv4D,EAAK7O,QAAQ2N,GAAG45D,EAAOT,EAAI,WACvBj4D,EAAKm6D,cAAcn6D,EAAK7O,WAExB6O,EAAK7O,QAAQgC,GAAGqlE,IAChBx4D,EAAK7O,QAAQ2N,GAAG,QAAUm5D,EAAI,WAC1Bj4D,EAAKm6D,cAAcn6D,EAAK7O,aAZhC6O,EAAK7O,QAAQ2N,GAAG45D,EAAOT,EAAIj4D,EAAKs5D,eAAgB,WAC5Ct5D,EAAKm6D,cAAcrqE,EAAEsJ,SAEzB4G,EAAK7O,QAAQ2N,GAAG,QAAUm5D,EAAIj4D,EAAKu5D,kBAAmB,WAClDv5D,EAAKm6D,cAAcrqE,EAAEsJ,YAcrC6gE,SAAU,WAAA,GACFI,GACAtjE,EAEA/F,EAIIspE,EALJliE,GAAS,EAETmiE,EAAUnhE,KAAKpC,OAEnB,IADAoC,KAAKogE,WACApgE,KAAKjI,QAAQgC,GAAGolE,GAUjBngE,EAASgB,KAAKghE,cAAchhE,KAAKjI,aAVA,CAGjC,IAFImpE,GAAU,EACdD,EAASjhE,KAAKjI,QAAQuvB,KAAKtnB,KAAKkgE,gBAC3BviE,EAAM,EAAG/F,EAASqpE,EAAOrpE,OAAQ+F,EAAM/F,EAAQ+F,IAC3CqC,KAAKghE,cAAcC,EAAOl4C,GAAGprB,MAC9BujE,GAAU,EAGlBliE,IAAUkiE,EAQd,MAJAlhE,MAAKgI,QAAQ03D,GAAY0B,MAAOpiE,IAC5BmiE,IAAYniE,GACZgB,KAAKgI,QAAQyxB,GAEVz6B,GAEXgiE,cAAe,SAAUlhE,GAAV,GAGP8G,GAAanE,EAAgCzD,EAAqCoiE,EAAsBnjE,EAA8B6sC,EAAoCu2B,EAM9JC,EAAaC,EAKrBC,EACAC,CAqBR,OAnCA3hE,GAAQpJ,EAAEoJ,GACVE,KAAKsgE,cAAe,EAChB15D,EAAO5G,KAAMyC,EAAWmE,EAAKo5D,eAAgBhhE,EAAS4H,EAAK86D,eAAe5hE,GAAQshE,EAAQpiE,EAAOoiE,MAAOnjE,EAAY,IAAM6gE,EAAYh0B,EAAYhrC,EAAMoD,KAAKq8D,IAAS,GAAI8B,EAAMz6D,EAAK+6D,sBAAsB72B,GAAWxpC,IAAIxB,EAAMshD,KAAKnjD,GAAW4F,OAAO,WACnP,GAAI9L,GAAUrB,EAAEsJ,KAChB,QAAIjI,EAAQ8L,OAAO,IAAM3L,EAAMgL,KAAK,OAAS,KAAKtL,QACvCG,EAAQmL,KAAKhL,EAAMgL,KAAK,UAAY4nC,KAG/ChqC,OAAqBygE,GAAYzhE,EAAMoD,KAAK,gBACpDpD,EAAMslB,WAAW,gBACZg8C,QAeMx6D,GAAKw5D,QAAQt1B,IAdpBw2B,EAAc16D,EAAKg7D,gBAAgB9hE,EAAOd,EAAOD,KACjD6H,EAAKw5D,QAAQt1B,GAAaw2B,EACtBE,EAAehD,EAAU/7D,GAAW+hB,QAASoX,EAAO0lC,MACpDG,EAAQJ,EAAIn+D,KAAK,MACrB0D,EAAKi7D,0BAA0BL,EAAc12B,GACzC22B,GACAD,EAAat+D,KAAK,KAAMu+D,GAEvBJ,EAAItE,YAAYyE,GAAc5pE,QAC/B4pE,EAAaM,YAAYhiE,GAE7B0hE,EAAaxnE,OACb8F,EAAMoD,KAAK,gBAAgB,IAI3Bq+D,IAAaH,GACbphE,KAAKgI,QAAQ23D,GACTyB,MAAOA,EACPthE,MAAOA,IAGfA,EAAMsB,YAAY29D,GAAeqC,GACjCthE,EAAMsB,YAAY49D,EAAYoC,GACvBA,GAEXW,aAAc,WACV,GAAIn7D,GAAO5G,KAAM/B,EAAY,IAAM6gE,EAAY/mE,EAAU6O,EAAK7O,OACzDA,GAAQgC,GAAGolE,GAGZpnE,EAAQqpD,KAAKnjD,GAAW6C,OAFxB/I,EAAQuvB,KAAKrpB,GAAW6C,QAKhC6gE,sBAAuB,SAAU72B,GAAV,GACgC57B,GAC1CvR,EAAS/F,EADdoqE,EAAW9pE,EAAMmpB,GAAGg9C,UAAU4D,gBAAuBhF,EAAavmE,GACtE,KAASiH,EAAM,EAAG/F,EAASoI,KAAKjI,QAAQH,OAAQ+F,EAAM/F,EAAQ+F,IAC1Ds/D,EAAaA,EAAW37D,IAAIo9D,EAA0B1+D,KAAKjI,QAAQ4F,GAAKukE,qBAAqB,KAAMp3B,GAEvG,KAAK57B,IAAQ8yD,GACT/E,EAAaA,EAAW37D,IAAI0gE,EAAS9yD,GAAMizD,OAAOniE,KAAKjI,QAAS+yC,GAEpE,OAAOmyB,IAEX4E,0BAA2B,SAAUl6C,EAAWmjB,GAC5C,GAAmD57B,GAA/C8yD,EAAW9pE,EAAMmpB,GAAGg9C,UAAU4D,eAClCt6C,GAAUrtB,SAASwkE,GAAY57D,KAAKhL,EAAMgL,KAAK,OAAQ4nC,GAAa,GACpE,KAAK57B,IAAQ8yD,GACTA,EAAS9yD,GAAMkzD,SAASz6C,EAAWmjB,EAEvCnjB,GAAUzkB,KAAK,OAAQ,UAE3B0+D,gBAAiB,SAAU9hE,EAAOuiE,GAC9B,GAAIz7D,GAAO5G,KAAMsiE,EAAgB17D,EAAKxG,QAAQshB,SAAS2gD,GAAUv3B,EAAYhrC,EAAMoD,KAAKq8D,EAExF,OADA+C,GAAgBpqE,EAAMgE,WAAWomE,GAAiBA,EAAcxiE,GAASwiE,EAClEpqE,EAAM6Q,OAAOjJ,EAAMoD,KAAKhL,EAAMgL,KAAKm/D,EAAU,UAAYviE,EAAMoD,KAAK,sBAAwBpD,EAAMoD,KAAK,UAAYo/D,GAAiB,GAAIx3B,EAAWhrC,EAAMoD,KAAKm/D,IAAYviE,EAAMoD,KAAKhL,EAAMgL,KAAKm/D,MAE3MX,eAAgB,SAAU5hE,GACtB,GAAgCssB,GAA5BS,EAAQ7sB,KAAKI,QAAQysB,KACzB,KAAKT,IAAQS,GACT,IAAKA,EAAMT,GAAMjkB,KAAKnI,KAAMF,GACxB,OACIshE,OAAO,EACPriE,IAAKqtB,EAIjB,QAASg1C,OAAO,IAEpBn4B,OAAQ,WACJ,GAAyC8P,GAArC/Q,KAAciB,EAASjpC,KAAKogE,OAChC,KAAKrnB,IAAS9P,GACVjB,EAAQlgC,KAAKmhC,EAAO8P,GAExB,OAAO/Q,MAGf9vC,EAAMmpB,GAAG8G,OAAOy2C,IAClBjoE,OAAOuB,MAAM2sB,QACRluB,OAAOuB,OACE,kBAAVzB,SAAwBA,OAAOgiC,IAAMhiC,OAAS,SAAUiiC,EAAIC,EAAIC,IACrEA,GAAMD,OAEV,SAAUniC,EAAGC,QACVA,OAAO,qBACH,aACA,oBACDD,IACL,WAk0BE,MAvzBC,UAAUE,EAAGE,GAEV,QAASkM,GAASlJ,EAAQ23B,GACtB,IACI,MAAO76B,GAAEoM,SAASlJ,EAAQ23B,IAAU33B,GAAU23B,EAChD,MAAOtpB,GACL,OAAO,GAGf,QAASs6D,GAAkBxqE,EAASmD,GAChC,MAAOmX,UAASta,EAAQE,IAAIiD,GAAW,KAAO,EAElD,QAASsnE,GAAO5kE,EAAOk6C,GACnB,MAAOl5C,MAAKoT,IAAIpT,KAAKlG,IAAIkF,EAAOk6C,EAAM9lC,KAAM8lC,EAAMp/C,KAEtD,QAAS+pE,GAAoB96C,EAAW5vB,GACpC,GAAIqH,GAASH,EAAU0oB,GAAYnuB,EAAatB,EAAMuB,YAAaC,EAAcxB,EAAMyB,aAAc+oE,EAAOtjE,EAAOzG,KAAO4pE,EAAkB56C,EAAW,mBAAqB46C,EAAkB56C,EAAW,eAAgBg7C,EAAOvjE,EAAOE,IAAMijE,EAAkB56C,EAAW,kBAAoB46C,EAAkB56C,EAAW,cAAei7C,EAAOF,EAAO/6C,EAAU1uB,QAAUO,EAAWzB,GAAS,GAAO8qE,EAAOF,EAAOh7C,EAAUzuB,SAAWQ,EAAY3B,GAAS,EAC/b,QACIk7B,GACIjhB,IAAK0wD,EACLhqE,IAAKkqE,GAETvxD,GACIW,IAAK2wD,EACLjqE,IAAKmqE,IAIjB,QAASC,GAAY1iD,EAAQ2iD,EAASC,GAElC,IADA,GAAIC,GAAWC,EAAWpoE,EAAI,EAAGqoE,EAAYJ,GAAWA,EAAQnrE,OAAQwrE,EAAUJ,GAASA,EAAMprE,OAC1FwoB,GAAUA,EAAO5B,YAAY,CAChC,IAAK1jB,EAAI,EAAGA,EAAIqoE,EAAWroE,IAEvB,GADAmoE,EAAYF,EAAQjoE,GAChBmoE,EAAUlrE,QAAQ,KAAOqoB,EACzB,OACIA,OAAQ6iD,EACRI,cAAejjD,EAI3B,KAAKtlB,EAAI,EAAGA,EAAIsoE,EAAStoE,IAErB,GADAooE,EAAYF,EAAMloE,GACdpE,EAAEoM,SAASogE,EAAUnrE,QAAQ,GAAIqoB,IAAWjoB,EAAQ8lB,gBAAgB9V,KAAKiY,EAAQ8iD,EAAU9iE,QAAQyD,QACnG,OACIuc,OAAQ8iD,EACRG,cAAejjD,EAI3BA,GAASA,EAAO5B,WAEpB,MAAO5nB,GAmTX,QAAS0sE,GAAiB9yB,EAAYxtC,GAClC,GAA0ElI,GAAtEyoE,EAAYvgE,EAAO5C,QAAQ0tC,MAAO01B,EAAahzB,EAAW+yB,EAE9D,IADAv+D,EAAOf,GAAG6hB,QAAQ3d,KAAKnF,GACnBwgE,EAAW5rE,OAAS,GACpB,IAAKkD,EAAI,EAAGA,EAAI0oE,EAAW5rE,OAAQkD,IAC/B,GAAI0oE,EAAW1oE,IAAMkI,EAAQ,CACzBwgE,EAAWp7D,OAAOtN,EAAG,EACrB,YAIR0oE,GAAW5rE,OAAS,QACb44C,GAAW+yB,GA0Y1B,QAASE,GAAmB1rE,GACxB,GAAgCqH,GAAQE,EAAK3G,EAAzC2gC,EAAOoqC,IAAiB,EAC5B,OAAI3rE,GAAQ,KAAOuhC,GACfh6B,EAAMg6B,EAAK35B,UACXhH,EAAO2gC,EAAKl7B,YAERkB,IAAKA,EACL3G,KAAMA,EACNE,OAAQyG,EAAMqkE,EAAQzqE,SACtBN,MAAOD,EAAOgrE,EAAQ1qE,WAG1BmG,EAASrH,EAAQqH,SACjBA,EAAOvG,OAASuG,EAAOE,IAAMvH,EAAQmB,SACrCkG,EAAOxG,MAAQwG,EAAOzG,KAAOZ,EAAQkB,QAC9BmG,GAGf,QAASskE,KACL,MAAOhtE,GAAEwB,EAAMC,QAAQoB,QAAQ8d,OAAS9Z,EAASsa,KAAOta,EAASmC,iBAErE,QAASkkE,GAAqB7rE,GAA9B,GAKQ6B,GAJA0/B,EAAOoqC,GACX,KAAK3rE,GAAWA,IAAYwF,EAASsa,MAAQ9f,IAAYwF,EAASmC,gBAC9D,MAAO45B,EAGX,KADI1/B,EAASlD,EAAEqB,GAAS,GACjB6B,IAAW1B,EAAM8F,aAAapE,IAAWA,IAAW2D,EAASsa,MAChEje,EAASA,EAAO4kB,UAEpB,OAAI5kB,KAAW2D,EAASsa,KACbyhB,EAEJ5iC,EAAEkD,GAEb,QAASiqE,GAAmBC,EAAQC,EAAQC,GAA5C,GACQtjC,IACAzN,EAAG,EACH5hB,EAAG,GAEH4yD,EAAmB,EAWvB,OAVIH,GAASE,EAAKrrE,KAAOsrE,EACrBvjC,EAASzN,IAAMgxC,GAAoBH,EAASE,EAAKrrE,OAC1CqrE,EAAKprE,MAAQkrE,EAASG,IAC7BvjC,EAASzN,EAAIgxC,GAAoBD,EAAKprE,MAAQkrE,IAE9CC,EAASC,EAAK1kE,IAAM2kE,EACpBvjC,EAASrvB,IAAM4yD,GAAoBF,EAASC,EAAK1kE,MAC1C0kE,EAAKnrE,OAASkrE,EAASE,IAC9BvjC,EAASrvB,EAAI4yD,GAAoBD,EAAKnrE,OAASkrE,IAE5CrjC,EA/yBd,GACwUwjC,GAgSrQhS,EAU5DiS,EA0EAC,EAyDAC,EAoBAC,EAjcApsE,EAAQvB,OAAOuB,MAAOC,EAAUD,EAAMC,QAASoF,EAAW5G,OAAO4G,SAAUomE,EAAUjtE,EAAEC,QAASE,EAAQqB,EAAMrB,MAAOmO,EAAS9M,EAAMmpB,GAAGrc,OAAQX,EAAanM,EAAMmM,WAAYu9B,EAAa1pC,EAAM0pC,WAAY57B,EAAQtP,EAAEsP,MAAOtF,EAAShK,EAAEgK,OAAQzB,EAAY/G,EAAM+G,UAAWslE,KAAiBC,KAAkBC,KAAgCzxC,EAAqB96B,EAAM86B,mBAAoB0xC,EAAQ,QAASjrC,EAAS,SAAUkrC,EAAY,YAAanlC,EAAO,OAAQolC,EAAO,OAAQC,EAAU,UAAWC,EAAa,aAAcC,EAAgB,gBAAiBC,EAAY,YAAaC,EAAY,YAAaC,EAAO,OAoDrmBC,EAAa9gE,EAAW3D,QACxBC,KAAM,SAAU5I,EAASqI,GACrB,GAAIwG,GAAO5G,KAAM0mB,EAAa3uB,EAAQ,EACtC6O,GAAK68B,SAAU,EACX/c,EAAWpJ,kBACX5mB,EAAEgH,KAAKxF,EAAMqN,SAASyZ,KAAK/nB,MAAM,KAAM,WACnCyvB,EAAWpJ,iBAAiBtd,KAAMgG,EAAMY,EAAKw+D,OAAQx+D,IAAO,KAEhElQ,EAAEgH,KAAKxF,EAAMqN,SAAS0Z,GAAGhoB,MAAM,KAAM,WACjCyvB,EAAWpJ,iBAAiBtd,KAAMgG,EAAMY,EAAKy+D,SAAUz+D,IAAO,OAGlElQ,EAAEgH,KAAKxF,EAAMqN,SAASyZ,KAAK/nB,MAAM,KAAM,WACnCyvB,EAAW4+C,YAAYtlE,KAAMgG,EAAMY,EAAKw+D,OAAQx+D,MAEpDlQ,EAAEgH,KAAKxF,EAAMqN,SAAS0Z,GAAGhoB,MAAM,KAAM,WACjCyvB,EAAW4+C,YAAYtlE,KAAMgG,EAAMY,EAAKy+D,SAAUz+D,OAG1DvC,EAAWJ,GAAGtD,KAAKwH,KAAKvB,GACxBA,EAAKQ,MACD,QACA,WACDhH,QAEPmlE,YAAa,WACTvlE,KAAKyjC,SAAU,GAEnB+hC,cAAe,WACXxlE,KAAKyjC,SAAU,GAEnB2hC,OAAQ,SAAUn9D,GACd,GAAIrB,GAAO5G,IACX4G,GAAKoB,QAAQ,SACTpB,EAAK68B,SACLx7B,EAAE9D,kBAGVkhE,SAAU,SAAUp9D,GAChB,GAAIrB,GAAO5G,IACX4G,GAAKoB,QAAQ,WACTpB,EAAK68B,UACLx7B,EAAE9D,iBACFyC,EAAK4+D,oBAIbC,EAAgBphE,EAAW3D,QAC3BC,KAAM,SAAUP,GACZ,GAAIwG,GAAO5G,IACXqE,GAAWJ,GAAGtD,KAAKwH,KAAKvB,GACxBA,EAAK8+D,eAAgB,EACrBhvE,EAAEgK,OAAOkG,EAAMxG,GACfwG,EAAKirD,MAAQ,EACTjrD,EAAKotD,YACLptD,EAAK++D,QAAU,cACf/+D,EAAKg/D,WAAa,cAClBh/D,EAAK6sB,KAAO,MAEZ7sB,EAAK++D,QAAU,eACf/+D,EAAKg/D,WAAa,eAClBh/D,EAAK6sB,KAAO,MAGpBoyC,YAAa,WACTnvE,EAAEgK,OAAOV,MACL8lE,SAAS,EACTJ,eAAe,EACfK,YAAa,EACbC,YAAa,KAGrBC,YAAa,SAAUj0D,EAAKtZ,GACpBsH,KAAK+lE,cAAgB/zD,GAAOhS,KAAKgmE,cAAgBttE,IACjDsH,KAAK+lE,YAAc/zD,EACnBhS,KAAKgmE,YAActtE,EACnBsH,KAAKooC,WAGb89B,YAAa,SAAU9mE,GACnB,MAAOA,GAASY,KAAKtH,KAAO0G,EAASY,KAAKgS,KAE9Cm0D,aAAc,WACVnmE,KAAK0lE,eAAgB,GAEzBlgD,QAAS,WACL,MAAOxlB,MAAK2nB,UAAU,GAAG3nB,KAAK2lE,UAElCS,SAAU,WACN,MAAOpmE,MAAKjI,QAAQ,GAAGiI,KAAK4lE,aAEhCS,QAAS,SAAUxU,GACf7xD,KAAK6xD,MAAQA,GAEjBzpB,OAAQ,SAAU3M,GACd,GAAI70B,GAAO5G,KAAMioC,EAAQrhC,EAAKk/D,QAAUl/D,EAAKo/D,YAAcp/D,EAAKw/D,WAAYE,EAAcr+B,EAAQrhC,EAAKirD,MAAO9zD,EAAO6I,EAAK4e,WAC5G,IAAVyiB,GAAgBrhC,EAAK8+D,iBAGzB9+D,EAAKlO,IAAMkO,EAAKk/D,SAAWl/D,EAAKm/D,YAAc,EAC9Cn/D,EAAK7I,KAAOA,EACZ6I,EAAKqhC,MAAQq+B,EACb1/D,EAAKoL,IAAMpT,KAAKoT,IAAIpL,EAAKlO,IAAKqF,EAAOuoE,GACrC1/D,EAAK2/D,SAAWxoE,EAAOkqC,EACvBrhC,EAAK4/D,cAAgBF,EAAcvoE,GAAQ,EAC3C6I,EAAKwY,QAAUxY,EAAK8+D,eAAiBY,EAAcvoE,EAC9C09B,GACD70B,EAAKoB,QAAQyxB,EAAQ7yB,OAI7B6/D,EAAiBpiE,EAAW3D,QAC5BC,KAAM,SAAUP,GACZ,GAAIwG,GAAO5G,IACXqE,GAAWJ,GAAGtD,KAAKwH,KAAKvB,GACxBA,EAAKqsB,EAAI,GAAIwyC,GAAc/kE,GAASszD,YAAY,GAAQ5zD,IACxDwG,EAAKyK,EAAI,GAAIo0D,GAAc/kE,GAASszD,YAAY,GAAS5zD,IACzDwG,EAAK+gB,UAAYvnB,EAAQunB,UACzB/gB,EAAK8/D,eAAiBtmE,EAAQmmE,SAC9B3/D,EAAK+/D,SAAWvmE,EAAQumE,UAAY,IACpC//D,EAAKQ,KAAKqyB,EAAQr5B,IAEtBimE,QAAS,SAAUO,GACf5mE,KAAKizB,EAAEozC,QAAQO,GACf5mE,KAAKqR,EAAEg1D,QAAQO,GACf5mE,KAAKwX,WAETqvD,kBAAmB,WACf,OACI5zC,EAAGr0B,KAAKoT,IAAI,GAAIhS,KAAKizB,EAAEuzC,cACvBn1D,EAAGzS,KAAKoT,IAAI,GAAIhS,KAAKqR,EAAEm1D,gBAG/BhvD,QAAS,WACL,GAAI5Q,GAAO5G,IACX4G,GAAKqsB,EAAEmV,SACPxhC,EAAKyK,EAAE+2B,SACPxhC,EAAKwY,QAAUxY,EAAKqsB,EAAE7T,SAAWxY,EAAKyK,EAAE+N,QACxCxY,EAAK2/D,SAAW3/D,EAAK8/D,gBAAkB9nE,KAAKoT,IAAIpL,EAAKqsB,EAAEszC,SAAU3/D,EAAKyK,EAAEk1D,UACxE3/D,EAAKq0D,SAAWr8D,KAAKlG,IAAIkO,EAAKqsB,EAAEszC,SAAU3/D,EAAKyK,EAAEk1D,UACjD3/D,EAAKoB,QAAQyxB,MAGjBqtC,EAAWziE,EAAW3D,QACtBC,KAAM,SAAUP,GACZ,GAAIwG,GAAO5G,IACXU,GAAOkG,EAAMxG,GACbiE,EAAWJ,GAAGtD,KAAKwH,KAAKvB,IAE5Bs/D,YAAa,WACT,MAAOlmE,MAAK+mE,UAAUb,YAAYlmE,KAAKw6D,QAAQx6D,KAAKyzB,QAExDuzC,SAAU,SAAU3zC,GAChB,GAAIzsB,GAAO5G,KAAM+mE,EAAYngE,EAAKmgE,UAAWtzC,EAAO7sB,EAAK6sB,KAAM+mC,EAAU5zD,EAAK4zD,QAASnE,EAAWmE,EAAQ/mC,GAAQJ,CAC7G0zC,GAAU3nD,WAGXi3C,EAAW0Q,EAAU/0D,KAAOqhB,EAAQ,GAAKgjC,EAAW0Q,EAAUruE,KAAO26B,EAAQ,KAC7EA,GAASzsB,EAAKqgE,YAElBzM,EAAQ0M,cAAczzC,EAAMJ,GAC5BzsB,EAAKoB,QAAQyxB,EAAQ7yB,OAGzBugE,EAAOtwE,EAAM6J,QACbC,KAAM,SAAUP,GACZ,GAAiB6yB,GAAG5hB,EAAG41D,EAAYzM,EAA/B5zD,EAAO5G,IACXU,GAAOkG,GAAQwgE,SAAS,GAAQhnE,GAChC6mE,EAAargE,EAAKwgE,QAAU,GAAM,EAClC5M,EAAU5zD,EAAK4zD,QACf5zD,EAAKqsB,EAAIA,EAAI,GAAI6zC,IACbrzC,KAAM,IACNszC,UAAWngE,EAAKgf,WAAWqN,EAC3Bg0C,WAAYA,EACZzM,QAASA,IAEb5zD,EAAKyK,EAAIA,EAAI,GAAIy1D,IACbrzC,KAAM,IACNszC,UAAWngE,EAAKgf,WAAWvU,EAC3B41D,WAAYA,EACZzM,QAASA,IAEb5zD,EAAKm6B,WAAW35B,MACZ,QACA,OACA,MACA,eACA,kBAEA29B,aAAc,SAAU98B,GACpBrB,EAAKygE,QAAUp/D,EACfrB,EAAKxH,OAASwH,EAAKgf,WAAW+B,UAAUvoB,UAE5CkiC,MAAO,SAAUr5B,GACTvR,EAAEuR,EAAE0Q,MAAMyH,QAAQnI,QAAQ,KAAKle,GAAG,kCAClCkO,EAAEC,OAAO8iB,UAGjBga,cAAe,SAAU/8B,GAAV,GACmNq/D,GAO1NC,EAAwCC,EAPxCC,EAAkB7gE,EAAKygE,QAASK,EAAiBD,EAAgBjpC,OAAQA,EAASv2B,EAAEu2B,OAAQmpC,EAAa1/D,EAAEw2B,SAAWgpC,EAAgBhpC,SAAU8nC,EAAW3/D,EAAKgf,WAAW2gD,SAAUI,EAAW//D,EAAKgf,WAAW+gD,QAChNnM,GAAQ3I,OAAS0U,GAAYoB,EAAa,IAC1CA,GAAiC,IAAlB,EAAIA,IAEnBnN,EAAQ3I,MAAQ8V,GAAchB,IAC9BgB,EAAahB,EAAWnM,EAAQ3I,OAEhC0V,EAAU/M,EAAQvnC,EAAIrsB,EAAKxH,OAAOzG,KAAM6uE,EAAUhN,EAAQnpD,EAAIzK,EAAKxH,OAAOE,IAC9EgoE,GACIr0C,GAAIs0C,EAAUG,EAAez0C,GAAK00C,EAAanpC,EAAOvL,EAAIs0C,EAC1Dl2D,GAAIm2D,EAAUE,EAAer2D,GAAKs2D,EAAanpC,EAAOntB,EAAIm2D,GAE9DhN,EAAQoN,UAAUD,GAClB10C,EAAE+zC,SAASM,EAAYr0C,GACvB5hB,EAAE21D,SAASM,EAAYj2D,GACvBzK,EAAKgf,WAAWygD,QAAQ7L,EAAQ3I,OAChCjrD,EAAKygE,QAAUp/D,EACfA,EAAE9D,kBAEN4mB,KAAM,SAAU9iB,GACRA,EAAE0Q,MAAMyH,OAAOgE,QAAQ9rB,MAAM,qBAG7B26B,EAAE8zC,UAAU3nD,SAAW/N,EAAE01D,UAAU3nD,SACnC6T,EAAE+zC,SAAS/+D,EAAEgrB,EAAEI,OACfhiB,EAAE21D,SAAS/+D,EAAEoJ,EAAEgiB,OACfprB,EAAE9D,kBAEF8D,EAAEkQ,MAAM8pB,SAGhBtqC,IAAK,SAAUsQ,GACXA,EAAE9D,uBAKd0jE,EAAkB1vE,EAAQC,YAAYqgB,OAAS,WAE/Cy5C,GADA/5D,EAAQkgB,QACI,SAAU4a,EAAG5hB,EAAGwgD,GACxB,MAAO,eAAiB5+B,EAAI,MAAQ5hB,EAAI,eAAiBwgD,EAAQ,KAGzD,SAAU5+B,EAAG5hB,EAAGwgD,GACxB,MAAO,aAAe5+B,EAAI,MAAQ5hB,EAAI,aAAewgD,EAAQ,KAGjEsS,EAAU9/D,EAAW3D,QACrBC,KAAM,SAAU5I,GACZ,GAAI6O,GAAO5G,IACXqE,GAAWJ,GAAGtD,KAAKwH,KAAKvB,GACxBA,EAAK7O,QAAUrB,EAAEqB,GACjB6O,EAAK7O,QAAQ,GAAG+B,MAAMguE,sBAAwB,WAC9ClhE,EAAKqsB,EAAI,EACTrsB,EAAKyK,EAAI,EACTzK,EAAKirD,MAAQ,EACbjrD,EAAKmhE,iBAAiB7V,EAAUtrD,EAAKqsB,EAAGrsB,EAAKyK,EAAGzK,EAAKirD,SAEzDqV,cAAe,SAAUzzC,EAAMu0C,GAC3BhoE,KAAKyzB,IAASu0C,EACdhoE,KAAKwX,WAETywD,QAAS,SAAUpW,GACf7xD,KAAK6xD,MAAQA,EACb7xD,KAAKwX,WAETowD,UAAW,SAAUD,GACjB3nE,KAAK6xD,OAAS8V,EACd3nE,KAAKwX,WAET06C,UAAW,SAAUoV,GACjBtnE,KAAKizB,GAAKq0C,EAAYr0C,EACtBjzB,KAAKqR,GAAKi2D,EAAYj2D,EACtBrR,KAAKwX,WAETmjD,SAAU,SAAUlnC,EAAM71B,GACtBoC,KAAKyzB,GAAQ71B,EACboC,KAAKwX,WAET+iD,OAAQ,SAAU+M,GACd5mE,EAAOV,KAAMsnE,GACbtnE,KAAKwX,WAETA,QAAS,WACL,GAAyC0wD,GAArCthE,EAAO5G,KAAMizB,EAAIrsB,EAAKqsB,EAAG5hB,EAAIzK,EAAKyK,CAClCzK,GAAK6I,QACLwjB,EAAIr0B,KAAK6Q,MAAMwjB,GACf5hB,EAAIzS,KAAK6Q,MAAM4B,IAEnB62D,EAAiBhW,EAAUj/B,EAAG5hB,EAAGzK,EAAKirD,OAClCqW,GAAkBthE,EAAK0gE,cACnBpvE,EAAMC,QAAQoB,QAAQgB,MAAQrC,EAAMC,QAAQoB,QAAQkB,QAAU,IAC9DmM,EAAK7O,QAAQ,GAAG+B,MAAMu8D,SAAW,WACjCzvD,EAAK7O,QAAQ,GAAG+B,MAAMnB,KAAOiO,EAAKqsB,EAAI,KACtCrsB,EAAK7O,QAAQ,GAAG+B,MAAMwF,IAAMsH,EAAKyK,EAAI,MAErCzK,EAAK7O,QAAQ,GAAG+B,MAAM+tE,GAAmBK,EAE7CthE,EAAKmhE,iBAAiBG,GACtBthE,EAAKoB,QAAQyxB,KAGrBsuC,iBAAkB,SAAUT,GACxBtnE,KAAKsnE,YAAcA,KAkBvBlD,EAAap/D,EAAOtE,QACpBC,KAAM,SAAU5I,EAASqI,GAAnB,GAGE0tC,GAFAlnC,EAAO5G,IACXgF,GAAOf,GAAGtD,KAAKwH,KAAKvB,EAAM7O,EAASqI,GAC/B0tC,EAAQlnC,EAAKxG,QAAQ0tC,MACnBA,IAAS02B,GAGXA,EAAY12B,GAAOhmC,KAAKlB,GAFxB49D,EAAY12B,IAAUlnC,IAK9Bc,QACIs9D,EACAC,EACAC,GAEJ9kE,SACI8O,KAAM,aACN4+B,MAAO,WAEXhoB,QAAS,WACLw9C,EAAiBkB,EAAaxkE,OAElCyhC,SAAU,SAAUp6B,EAAWY,GAC3B,GAAIrB,GAAO5G,KAAMmoE,EAAY5D,EAAW39D,EAAKxG,QAAQ0tC,MACrD,IAAIq6B,EACA,MAAOvhE,GAAKoB,QAAQX,EAAW3G,KAAWuH,EAAE0Q,OACxCwvD,UAAWA,EACXC,WAAYngE,EAAEmgE,eAI1BC,MAAO,SAAUpgE,GACbjI,KAAKyhC,SAASujC,EAAW/8D,IAE7BqgE,KAAM,SAAUrgE,GACZjI,KAAKyhC,SAASwjC,EAAWh9D,IAE7BsgE,MAAO,SAAUtgE,GACb,GAAIrB,GAAO5G,KAAMmoE,EAAY5D,EAAW39D,EAAKxG,QAAQ0tC,MACjDq6B,KACAA,EAAUK,SAAW5hE,EAAK66B,SAASyjC,EAAMj9D,OAIrDm8D,EAAWqE,aAAe,SAAUlF,GAChC,GAA4DzoE,GAAxDgzC,EAAQ02B,EAAYjB,IAAckB,EAAUlB,EAChD,IAAIz1B,EAAO,CACP,IAAKhzC,EAAI,EAAGA,EAAIgzC,EAAMl2C,OAAQkD,IAC1BkK,EAAOf,GAAG6hB,QAAQ3d,KAAK2lC,EAAMhzC,GAEjCgzC,GAAMl2C,OAAS,QACR4sE,GAAYjB,SACZkB,GAAUlB,KAGzBa,EAAWsE,OAASlE,EAChBH,EAAiBD,EAAW1jE,QAC5BC,KAAM,SAAU5I,EAASqI,GAAnB,GAGE0tC,GAFAlnC,EAAO5G,IACXgF,GAAOf,GAAGtD,KAAKwH,KAAKvB,EAAM7O,EAASqI,GAC/B0tC,EAAQlnC,EAAKxG,QAAQ0tC,MACnBA,IAAS22B,GAGXA,EAAU32B,GAAOhmC,KAAKlB,GAFtB69D,EAAU32B,IAAUlnC,IAK5Bkf,QAAS,WACLw9C,EAAiBmB,EAAWzkE,OAEhCI,SACI8O,KAAM,iBACN4+B,MAAO,UACPjqC,OAAQ,QAGZygE,EAAYt/D,EAAOtE,QACnBC,KAAM,SAAU5I,EAASqI,GACrB,GAAIwG,GAAO5G,IACXgF,GAAOf,GAAGtD,KAAKwH,KAAKvB,EAAM7O,EAASqI,GACnCwG,EAAK+hE,YAAa,EAClB/hE,EAAKm6B,WAAa,GAAIa,GAAWh7B,EAAK7O,SAClCgrC,QAAQ,EACRL,gBAAgB,EAChB7+B,OAAQ+C,EAAKxG,QAAQyD,OACrBga,UAAWjX,EAAKxG,QAAQq+B,SACxBxvB,MAAOjJ,EAAMY,EAAKk7B,OAAQl7B,GAC1Bi+B,KAAM7+B,EAAMY,EAAK86B,MAAO96B,GACxBmkB,KAAM/kB,EAAMY,EAAKgiE,MAAOhiE,GACxBjP,IAAKqO,EAAMY,EAAKq9B,KAAMr9B,GACtBokB,OAAQhlB,EAAMY,EAAKiiE,QAASjiE,GAC5BkuB,OAAQ9uB,EAAMY,EAAKi9B,QAASj9B,KAEhCA,EAAKkiE,iBAAmB9iE,EAAMY,EAAKmiE,UAAWniE,GAC9CA,EAAKoiE,eAAiBhjE,EAAMY,EAAKoiE,eAAgBpiE,IAErDc,QACI83B,EACAmlC,EACAC,EACAC,EACAC,EACAC,GAEJ3kE,SACI8O,KAAM,YACNuvB,SAAUvmC,EAAMC,QAAQggB,MAAQ,EAAI,EACpC21B,MAAO,UACPm7B,aAAc,KACdx1C,KAAM,KACN9L,UAAW,KACX9jB,OAAQ,KACRwxC,OAAQ,KACR6zB,YAAY,EACZC,YAAY,EACZX,SAAS,GAEbY,WAAY,WACRppE,KAAK2oE,YAAa,GAEtBK,eAAgB,SAAU/gE,GACtB,GAAIrB,GAAO5G,IACPiI,GAAEmuB,UAAYl+B,EAAMypB,KAAKM,MACzBrb,EAAK66B,SAASqjC,GAAcnsD,MAAO1Q,IACnCrB,EAAKm6B,WAAW/V,WAGxBq+C,YAAa,SAAUphE,GACnB,GAAiBq/D,GAAb1gE,EAAO5G,KAAmBI,EAAUwG,EAAKxG,QAASkpE,EAAa1iE,EAAK0iE,WAAY71C,EAAOrzB,EAAQqzB,KAAMw1C,EAAeriE,EAAKxG,QAAQ6oE,YACjIA,GACA3B,GACI3uE,KAAMsP,EAAEgrB,EAAEvX,SAAWutD,EAAatwE,KAClC2G,IAAK2I,EAAEoJ,EAAEqK,SAAWutD,EAAa3pE,MAGrCsH,EAAK2iE,WAAW5wE,MAAQsP,EAAEgrB,EAAEI,MAC5BzsB,EAAK2iE,WAAWjqE,KAAO2I,EAAEoJ,EAAEgiB,MAC3Bi0C,EAAc5wE,EAAEgK,UAAWkG,EAAK2iE,aAEhCD,IACAhC,EAAYhoE,IAAMkjE,EAAO8E,EAAYhoE,IAAKgqE,EAAWj4D,GACrDi2D,EAAY3uE,KAAO6pE,EAAO8E,EAAY3uE,KAAM2wE,EAAWr2C,IAE9C,MAATQ,QACO6zC,GAAYhoE,IACH,MAATm0B,SACA6zC,GAAY3uE,KAEvBiO,EAAK4iE,KAAKvxE,IAAIqvE,IAElBmC,oBAAqB,SAAUrpD,GAC3B,GAAIspD,GAAiB1pE,KAAKI,QAAQi1C,MAClC,OAAOq0B,IAAkBhzE,EAAE0pB,GAAQrmB,GAAG2vE,IAE1C7lC,QAAS,SAAU57B,GACVjI,KAAKypE,oBAAoBxhE,EAAE0Q,MAAMyH,SAClCnY,EAAE9D,kBAGV29B,OAAQ,SAAU75B,GAAV,GAaI7I,GAZJwH,EAAO5G,KAAMI,EAAUwG,EAAKxG,QAASunB,EAAYvnB,EAAQunB,UAAW6hD,EAAOppE,EAAQopE,IACvF,OAAIxpE,MAAKypE,oBAAoBxhE,EAAEkQ,MAAM+oB,eAAiB9gC,EAAQ8oE,aAAetiE,EAAK+hE,YAC9E/hE,EAAKm6B,WAAW/V,SAChB,IAEJpkB,EAAKg4B,cAAgB32B,EAAEmY,OACvBxZ,EAAK+iE,oBAAsB1qE,EAAU2H,EAAKg4B,eACtC4qC,IACI5iE,EAAK4iE,MACL5iE,EAAK4iE,KAAK1pD,MAAK,GAAM,GAAMoI,SAE/BthB,EAAK4iE,KAAOtxE,EAAMgE,WAAWstE,GAAQ9yE,EAAE8yE,EAAKrhE,KAAKvB,EAAMA,EAAKg4B,gBAAkB4qC,EAC1EpqE,EAASH,EAAU2H,EAAKg4B,eAC5Bh4B,EAAK2iE,WAAanqE,EAClBwH,EAAK4iE,KAAKvxE,KACNo+D,SAAU,WACV8B,OAAQ,IACRx/D,KAAMyG,EAAOzG,KACb2G,IAAKF,EAAOE,MACbw3B,SAASv5B,EAASsa,MACrBjR,EAAKke,QAAQ,UAAW,WACpBle,EAAK4iE,KAAKpkD,WAAW,YAErB,KADA,GAAIwkD,GAAclzE,EAAEuR,EAAEmY,SACdwpD,EAAYpuE,KAAK,iBAAmBouE,EAAYhyE,QACpDgyE,EAAcA,EAAYhwE,QAE9B,QACI2sB,SAAU3f,EAAK4iE,KAAK/lD,MACpBomD,UAAWD,EAAYpuE,KAAK,oBAIxC+oE,EAAWnkE,EAAQ0tC,OAASlnC,EAC5BA,EAAK4hE,SAAU,EACX7gD,IACA/gB,EAAK0iE,WAAa7G,EAAoB96C,EAAW/gB,EAAK4iE,OAE1D9yE,EAAE6G,GAAUmI,GAAGg/D,EAAO99D,EAAKoiE,gBACvBpiE,EAAK66B,SAASkjC,EAAW18D,KACzBrB,EAAKm6B,WAAW/V,SAChBpkB,EAAKmiE,aAETniE,EAAKm6B,WAAW0C,UArChB78B,IAuCJ86B,MAAO,SAAUz5B,GACbjI,KAAK4+B,cAAgB32B,EAAEmY,OACnBpgB,KAAKyhC,SAASjC,EAAMv3B,GACpBjI,KAAK+gC,WAAW/V,SAEhBhrB,KAAK2oE,YAAa,GAG1BC,MAAO,SAAU3gE,GAAV,GAEC6hE,GASQppC,CAVZz4B,GAAE9D,iBACE2lE,EAAgB9pE,KAAK+pE,oBAAoB9hE,GACzCjI,KAAKI,QAAQ+oE,YAAcnpE,KAAKgqE,iBAAmBF,IACnD9pE,KAAKiqE,kBAAoBrG,EAAqBkG,GAC9C9pE,KAAKgqE,eAAiBF,GAE1B9pE,KAAKkqE,WAAajiE,EAClBjI,KAAKmqE,iBAAiBliE,EAAG6hE,GACrB9pE,KAAKI,QAAQ+oE,YACTnpE,KAAKiqE,kBAAkB,KACnBvpC,EAAWmjC,EAAmB57D,EAAEgrB,EAAEvX,SAAUzT,EAAEoJ,EAAEqK,SAAU+nD,EAAmBzjE,KAAKiqE,oBACtFjqE,KAAKoqE,qBAAuB1zE,EAAEgK,UAAWV,KAAKupE,YAC9CvpE,KAAKqqE,gBAAkB3pC,EACJ,IAAfA,EAASrvB,GAA0B,IAAfqvB,EAASzN,GAC7BiI,cAAcl7B,KAAKsqE,iBACnBtqE,KAAKsqE,gBAAkB,MACftqE,KAAKsqE,kBACbtqE,KAAKsqE,gBAAkBrvC,YAAYvkC,EAAEsP,MAAMhG,KAAM,eAAgB,MAIzEA,KAAKwpE,MACLxpE,KAAKqpE,YAAYphE,IAGzBkiE,iBAAkB,SAAUliE,EAAG6hE,GAC3B9pE,KAAKuqE,gBAAgBT,EAAe,SAAU1pD,EAAQijD,GAClD,IAAKjjD,EAKD,MAJI8jD,KACAA,EAAeziC,SAASwjC,EAAWvkE,EAAOuH,GAAKmgE,WAAY1xE,EAAEwtE,EAAeb,kBAC5Ea,EAAiB,MAErB,CAEJ,IAAIA,EAAgB,CAChB,GAAIb,IAAkBa,EAAeb,cACjC,MAEJa,GAAeziC,SAASwjC,EAAWvkE,EAAOuH,GAAKmgE,WAAY1xE,EAAEwtE,EAAeb,kBAEhFjjD,EAAOqhB,SAASujC,EAAWtkE,EAAOuH,GAAKmgE,WAAY1xE,EAAE2sE,MACrDa,EAAiBxjE,EAAO0f,GAAUijD,cAAeA,MAErDrjE,KAAKyhC,SAASmjC,EAAMlkE,EAAOuH,GACvBmgE,WAAYlE,EACZlxC,mBAAoB82C,MAG5BU,YAAa,WAAA,GAKLV,GAEAW,EAAeC,EACfC,EAQAtoC,EACAuoC,EACAxoC,EACAyoC,EAlBAjxE,EAASoG,KAAKiqE,kBAAkB,GAAIvpC,EAAW1gC,KAAKqqE,gBAAiBS,EAAe9qE,KAAKoqE,oBACxFxwE,KAGDkwE,EAAgB9pE,KAAK+pE,oBAAoB/pE,KAAKkqE,YAClDlqE,KAAKmqE,iBAAiBnqE,KAAKkqE,WAAYJ,GAEnCa,EAAa/wE,IAAW8pE,IAAiB,GACzCiH,GACAF,EAAgBltE,EAASsa,KAAKkF,aAAe4mD,EAAQzqE,SACrDwxE,EAAgBntE,EAASsa,KAAKnZ,YAAcilE,EAAQ1qE,UAEpDwxE,EAAgB7wE,EAAO+sB,cAAgB/sB,EAAOmjB,aAC9C2tD,EAAgB9wE,EAAOme,aAAene,EAAO8E,aAE7C2jC,EAASzoC,EAAO+F,UAAY+gC,EAASrvB,EACrCu5D,EAAYH,GAAiBpoC,EAAS,GAAKA,EAASzoC,EAAOmjB,aAC3DqlB,EAASxoC,EAAOwE,WAAasiC,EAASzN,EACtC43C,EAAYH,GAAiBtoC,EAAS,GAAKA,EAASxoC,EAAO8E,YAC3DksE,IACAhxE,EAAO+F,WAAa+gC,EAASrvB,GAE7Bw5D,IACAjxE,EAAOwE,YAAcsiC,EAASzN,GAE9BjzB,KAAKwpE,MAAQmB,IAAeE,GAAaD,KACrCA,IACAE,EAAaxrE,KAAOohC,EAASrvB,GAE7Bw5D,IACAC,EAAanyE,MAAQ+nC,EAASzN,GAElCjzB,KAAKwpE,KAAKvxE,IAAI6yE,MAGtB7mC,KAAM,SAAUh8B,GACZjI,KAAKuqE,gBAAgBvqE,KAAK+pE,oBAAoB9hE,GAAI,SAAUmY,EAAQijD,GAC5DjjD,IACAA,EAAOmoD,MAAM7nE,KAAWuH,GAAKmgE,WAAY1xE,EAAE2sE,MAC3Ca,EAAiB,QAGzBlkE,KAAK6oE,QAAQ7oE,KAAKyhC,SAASojC,EAAS58D,KAExC4gE,QAAS,SAAUzkE,GACf,GAAIwC,GAAO5G,IACX4G,GAAKqjE,kBAAoB,KACzBjqE,KAAKgqE,eAAiB,KACtB9uC,cAAcl7B,KAAKsqE,iBACnB1jE,EAAK+hE,YAAa,EACd/hE,EAAK4iE,OAAS5iE,EAAK4hE,QACnB9+C,WAAW,WACP9iB,EAAK4iE,KAAK1pD,MAAK,GAAM,GACjB1b,EACAwC,EAAKkiE,mBAELliE,EAAK4iE,KAAKxoE,QAAQ4F,EAAK+iE,oBAAqB,OAAQ/iE,EAAKkiE,mBAE9D,GAEHliE,EAAKmiE,aAGbtnC,SAAU,SAAUp6B,EAAWY,GAC3B,GAAIrB,GAAO5G,IACX,OAAO4G,GAAKoB,QAAQX,EAAW3G,KAAWuH,EAAE0Q,OACxCsa,EAAGhrB,EAAEgrB,EACL5hB,EAAGpJ,EAAEoJ,EACLutB,cAAeh4B,EAAKg4B,cACpBmsC,cAAe9iE,EAAEkQ,MAAQlQ,EAAEkQ,MAAM+oB,aAAe,KAChDknC,WAAYngE,EAAEmgE,WACdp1C,mBAAoB/qB,EAAE+qB,uBAG9B+2C,oBAAqB,SAAU9hE,GAC3B,GAAImY,GAAS4S,EAAmB/qB,GAAIuhE,EAAOxpE,KAAKwpE,IAShD,OARIA,IAAQ1mE,EAAS0mE,EAAK,GAAIppD,KAC1BopD,EAAK1oE,OACLsf,EAAS4S,EAAmB/qB,GACvBmY,IACDA,EAAS4S,EAAmB/qB,IAEhCuhE,EAAKxvE,QAEFomB,GAEXmqD,gBAAiB,SAAUxyE,EAAS4oB,GAChC,GAAI3hB,GAAQ8uC,EAAQ9tC,KAAKI,QAAQ0tC,MAAOi1B,EAAUyB,EAAY12B,GAAQk1B,EAAQyB,EAAU32B,IACpFi1B,GAAWA,EAAQnrE,QAAUorE,GAASA,EAAMprE,UAC5CoH,EAAS8jE,EAAY/qE,EAASgrE,EAASC,GACnChkE,EACA2hB,EAAS3hB,EAAOohB,OAAQphB,EAAOqkE,eAE/B1iD,MAIZmF,QAAS,WACL,GAAIlf,GAAO5G,IACXgF,GAAOf,GAAG6hB,QAAQ3d,KAAKvB,GACvBA,EAAKmiE,YACLniE,EAAKm6B,WAAWjb,UAChB9lB,KAAKiqE,kBAAoB,KACzBjqE,KAAKgqE,eAAiB,KACtB9uC,cAAcl7B,KAAKsqE,iBACnB1jE,EAAKg4B,cAAgB,MAEzBmqC,UAAW,WACP,GAAIniE,GAAO5G,IACP4G,GAAK4iE,MACL5iE,EAAK4iE,KAAKthD,eAEPq8C,GAAW39D,EAAKxG,QAAQ0tC,OAC/BlnC,EAAKoB,QAAQ,WACbpB,EAAKoB,QAAQ+8D,GACbruE,EAAE6G,GAAUqsB,IAAI86C,EAAO99D,EAAKoiE,mBAGpC9wE,EAAMmpB,GAAG8G,OAAOi8C,GAChBlsE,EAAMmpB,GAAG8G,OAAOk8C,GAChBnsE,EAAMmpB,GAAG8G,OAAOm8C,GAChBpsE,EAAMitE,WAAaA,EACnBjtE,EAAMuqE,oBAAsBA,EAC5B/hE,EAAOxI,EAAMmpB,IACT8lD,KAAMA,EACNV,eAAgBA,EAChBtC,QAASA,IAuDbjsE,EAAMmpB,GAAGijD,UAAU0G,OACfnH,mBAAoBA,EACpBJ,mBAAoBA,EACpBG,qBAAsBA,IAE5BjtE,OAAOuB,MAAM2sB,QACRluB,OAAOuB,OACE,kBAAVzB,SAAwBA,OAAOgiC,IAAMhiC,OAAS,SAAUiiC,EAAIC,EAAIC,IACrEA,GAAMD,OAEV,SAAUniC,EAAGC,QACVA,OAAO,yBACH,WACA,qBACDD,IACL,WAmgBE,MAxfC,UAAUE,EAAGE,GAAb,GACOsB,GAAQvB,OAAOuB,MAAOopB,EAASppB,EAAMopB,OAAQrhB,EAAK/H,EAAM6H,QAASshB,EAAKC,EAAOD,GAAIrb,EAAQtP,EAAEsP,MAAOtF,EAAShK,EAAEgK,OAAQsE,EAASqc,EAAGrc,OAAQnO,EAAQqB,EAAMrB,MAAOstE,EAAUjsE,EAAMmpB,GAAG8iD,QAASgD,EAAOjvE,EAAMmpB,GAAG8lD,KAAMV,EAAiBvuE,EAAMmpB,GAAGolD,eAAgB9U,EAAa1xD,EAAG0xD,WAAYD,EAAYzxD,EAAGyxD,UAAW7yD,EAAMD,KAAKC,IAAKosE,EAAoB,IAAKC,EAAoB,GAAKC,EAAW,IAAMC,EAAsB,GAAIC,EAAe,GAAIC,EAAyB,GAAKC,EAA8B,EAAGC,EAAe,sBAAuBC,EAAe,sBAAuBC,EAAO,OAAQjyC,EAAS,SAAUkyC,EAAS,SAAUC,EAAS,SAAUC,EAAiB,EACppBC,EAAepa,EAAUhxD;AACzBC,KAAM,SAAUP,GACZ,GAAIwG,GAAO5G,IACX0xD,GAAUztD,GAAGtD,KAAKwH,KAAKvB,GACvBlG,EAAOkG,EAAMxG,GACbwG,EAAKm6B,WAAW35B,KAAK,aAAcpB,EAAMY,EAAKqI,MAAOrI,IACrDA,EAAKmlE,WAAW3kE,KAAK,QAASpB,EAAMY,EAAKokB,OAAQpkB,KAErDwY,QAAS,WACL,MAAOpf,MAAKw6D,QAAQ3I,MAAQ7xD,KAAK4lB,WAAW2gD,UAEhDrM,KAAM,WACF,MAAOl6D,MAAK4lB,WAAW2gD,SAAWvmE,KAAKw6D,QAAQ3I,MAAQ,KAE3DoI,KAAM,WACF,GAAIO,GAAUx6D,KAAKw6D,OACnBA,GAAQoN,UAAU,KAClB5nE,KAAK4lB,WAAWygD,QAAQ7L,EAAQ3I,QAEpCsI,MAAO,WACH,GAAIK,GAAUx6D,KAAKw6D,OACnBA,GAAQyN,QAAQjoE,KAAK4lB,WAAW2gD,UAChCvmE,KAAK4lB,WAAWygD,QAAQ7L,EAAQ3I,UAGpCma,EAActa,EAAUhxD,QACxBC,KAAM,SAAUP,GACZ,GAAIwG,GAAO5G,IACX0xD,GAAUztD,GAAGtD,KAAKwH,KAAKvB,GACvBlG,EAAOkG,EAAMxG,GACT0zD,WAAY,GAAInC,IACZl+B,KAAMrzB,EAAQqzB,KACd+mC,QAASp6D,EAAQo6D,QACjBL,MAAO,WACHvzD,EAAKq9B,YAIjBr9B,EAAKmlE,WAAW3kE,KAAK,QAAS,WAC1BR,EAAKokB,WAETpkB,EAAKm6B,WAAW35B,KAAK,MAAOpB,EAAMY,EAAKqI,MAAOrI,IAC9CA,EAAKm6B,WAAW35B,KAAK,aAAcpB,EAAMY,EAAKqI,MAAOrI,IACrDA,EAAKm6B,WAAW35B,KAAK,MAAOpB,EAAMY,EAAKuzD,MAAOvzD,KAElDwzD,SAAU,WACNp6D,KAAK8zD,WAAW9oC,UAEpBihD,OAAQ,SAAUvwD,GACd,GAAI9U,GAAO5G,IACX4G,GAAKokB,SACLpkB,EAAKslE,QAAQxwD,IAEjBy+C,MAAO,WACH,GAAIvzD,GAAO5G,IACP4G,GAAKulE,SAASjG,cACdt/D,EAAKwlE,YAELxlE,EAAKq9B,QAGbi2B,KAAM,WACF,MAAOr7D,GAAImB,KAAK0gC,UAAY,GAEhCzxB,MAAO,SAAUhH,GACb,GAAiBy4B,GAAb95B,EAAO5G,IACN4G,GAAKmgE,UAAU3nD,UAGhBxY,EAAKulE,SAASjG,cACdt/D,EAAKwlE,aAEL1rC,EAAWz4B,EAAEkQ,MAAM0L,KAAOgoD,EAAiB,EAAI5jE,EAAEkQ,MAAMvR,EAAK6sB,MAAMiN,SAClE95B,EAAK85B,SAAW9hC,KAAKlG,IAAIkG,KAAKoT,IAAI0uB,EAAW95B,EAAKylE,mBAAoBhB,IAAgBA,GACtFzkE,EAAKmlE,WAAWxG,cAChB7T,EAAUztD,GAAGgL,MAAM9G,KAAKvB,MAGhCqzD,KAAM,WACF,GAAIrzD,GAAO5G,KAAM+mE,EAAYngE,EAAKmgE,UAAWuF,EAAW1lE,EAAKulE,SAASjG,cAAgBoF,EAAyB1kE,EAAK0lE,SAAUj5C,EAAQzsB,EAAK85B,UAAY4rC,EAAU5wD,EAAW9U,EAAK4zD,QAAQ5zD,EAAK6sB,MAAQJ,GACjMzsB,EAAKwgE,SAAWL,EAAUb,YAAYxqD,KACvCA,EAAW9c,KAAKlG,IAAIkG,KAAKoT,IAAI0J,EAAUqrD,EAAUruE,KAAMquE,EAAU/0D,KACjEpL,EAAK85B,SAAW,GAEpB95B,EAAK4zD,QAAQG,SAAS/zD,EAAK6sB,KAAM/X,IAErCuoB,KAAM,WACFjkC,KAAK+rE,WAAWvG,gBAChBxlE,KAAKrI,OAETy0E,UAAW,WACP,GAAIxlE,GAAO5G,KAAM+mE,EAAYngE,EAAKmgE,UAAWwF,EAAW3lE,EAAK4zD,QAAQ5zD,EAAK6sB,MAAQszC,EAAUruE,IAAMquE,EAAUruE,IAAMquE,EAAU/0D,GAC5HpL,GAAKslE,QAAQK,IAEjBL,QAAS,SAAUxwD,GACf1b,KAAK8zD,WAAWyG,QACZ7+C,SAAUA,EACVrb,SAAU4qE,EACV1W,KAAM5C,EAAWiJ,iBAIzB4R,EAAmB9a,EAAUhxD,QAC7BC,KAAM,SAAUP,GACZ,GAAIwG,GAAO5G,IACX9H,GAAM6H,QAAQ2xD,UAAUztD,GAAGtD,KAAKwH,KAAKnI,MACrCU,EAAOkG,EAAMxG,GACTo3D,UACA38D,eACAuE,aAGR66D,KAAM,WACFj6D,KAAKysE,qBACLzsE,KAAKu6D,OAAOv6D,KAAKw3D,SAErB0C,KAAM,WACF,MAAOr7D,GAAImB,KAAKZ,OAAOiS,GAAKk6D,GAA+B1sE,EAAImB,KAAKZ,OAAO6zB,GAAKs4C,GAEpFpR,MAAO,WACHn6D,KAAKu6D,OAAOv6D,KAAKnF,aACbmF,KAAK2gB,UACL3gB,KAAK2gB,SAASxY,QAGtBukE,eAAgB,SAAU1/C,EAAMC,GAC5BjtB,KAAKZ,UACLY,KAAKw3D,OAASxqC,EACdhtB,KAAKnF,YAAcoyB,GAEvB0/C,YAAa,SAAUhsD,GACfA,GAAYzoB,EAAMgE,WAAWykB,GAC7B3gB,KAAK2gB,SAAWA,EAEhBA,EAAW/pB,GAGnB61E,mBAAoB,WAChBzsE,KAAKZ,QACD6zB,GAAIjzB,KAAKnF,YAAYo4B,EAAIjzB,KAAKw3D,OAAOvkC,GAAK,EAC1C5hB,GAAIrR,KAAKnF,YAAYwW,EAAIrR,KAAKw3D,OAAOnmD,GAAK,GAE9CrR,KAAKw3D,QACDnmD,EAAGrR,KAAKw3D,OAAOnmD,EAAIrR,KAAKZ,OAAOiS,EAC/B4hB,EAAGjzB,KAAKw3D,OAAOvkC,EAAIjzB,KAAKZ,OAAO6zB,MAIvC25C,EAAY/1E,EAAM6J,QAClBC,KAAM,SAAUP,GACZ,GAAIwG,GAAO5G,KAAMg0D,EAA8B,MAAjB5zD,EAAQqzB,KAAc17B,EAAUrB,EAAE,sCAAwCs9D,EAAa,aAAe,YAAc,iBAClJtzD,GAAOkG,EAAMxG,GACTrI,QAASA,EACT80E,YAAa,EACbrS,QAAS,GAAI2J,GAAQpsE,GACrB+0E,cAAe1sE,EAAQo6D,QACvBuS,cAAe3sE,EAAQ2sE,cACvBhvE,KAAMi2D,EAAa,QAAU,WAEjCptD,EAAKkmE,cAAc1lE,KAAKqyB,EAAQzzB,EAAMY,EAAK4Q,QAAS5Q,IACpDA,EAAK+gB,UAAUm8B,OAAO/rD,GAClBqI,EAAQ2sE,eACRnmE,EAAK5M,QAGbwd,QAAS,WACL,GAAI5Q,GAAO5G,KAAMyzB,EAAO7sB,EAAK6sB,KAAMszC,EAAYngE,EAAKmgE,UAAWiG,EAAWjG,EAAUhpE,KAAM+uE,EAAgBlmE,EAAKkmE,cAAeG,EAAYD,EAAWjG,EAAU9+B,MAAOouB,EAAWz3D,KAAK6Q,OAAOq9D,EAAcr5C,GAAQw5C,GAAYlvE,EAAOa,KAAK6Q,MAAMu9D,EAAWC,EACxPA,IAAa,EACbjtE,KAAKjI,QAAQE,IAAI,UAAW,QAE5B+H,KAAKjI,QAAQE,IAAI,UAAW,IAE5Bo+D,EAAWt4D,EAAOivE,EAClBjvE,EAAOivE,EAAW3W,EACXA,EAAW,IAClBt4D,GAAQs4D,EACRA,EAAW,GAEXzvD,EAAKimE,aAAe9uE,IACpB6I,EAAK7O,QAAQE,IAAI2O,EAAK7I,KAAMA,EAAO,MACnC6I,EAAKimE,YAAc9uE,GAEvB6I,EAAK4zD,QAAQG,SAASlnC,EAAM4iC,IAEhCr8D,KAAM,WACFgG,KAAKjI,QAAQE,KACTwgE,QAASyS,EACTgC,WAAY,aAGpBpsE,KAAM,WACGd,KAAK+sE,eACN/sE,KAAKjI,QAAQE,KAAMwgE,QAAS,OAIpCnvC,EAAWtkB,EAAOtE,QAClBC,KAAM,SAAU5I,EAASqI,GAAnB,GAcE26D,GAAkCgR,EAA4CvR,EAA8B50C,EAIxGunD,EAA8CpsC,EAgB9CqsC,EAKAC,EAKAC,EA3CJ1mE,EAAO5G,IAIX,OAHAgF,GAAOf,GAAGtD,KAAKwH,KAAKvB,EAAM7O,EAASqI,GACnCrI,EAAU6O,EAAK7O,SACf6O,EAAK2mE,QAAU3mE,EAAKxG,QAAQipB,WAAanxB,EAAMC,QAAQ2jB,qBAEnD/jB,EAAQuC,SAAS,sBAAsBkzE,QAAQ,mCAC/C9sE,EAAOkG,GACH6mE,cAAe11E,EACf21E,eAAgB31E,EAAQ4C,WAAWvD,UAEvC,IAEJW,EAAQE,IAAI,WAAY,UAAUqC,SAAS,qBAAqBqzE,UAAU,sCAAsCH,QAAQ,mCACpHzS,EAAQhjE,EAAQ4C,WAAWouB,GAAG,GAAIgjD,EAAa,GAAI7zE,GAAMitE,WAAWptE,GAAUyiE,EAAU,GAAI2J,GAAQpJ,GAAQn1C,EAAa,GAAI6gD,IACzH1uE,QAASgjE,EACTpzC,UAAW5vB,EACX2tE,cAAe9+D,EAAKxG,QAAQ1F,OAC5ByyE,EAAiBntE,KAAKI,QAAQ+sE,eAAgBpsC,EAAa,GAAI7oC,GAAM0pC,WAAW7pC,GAChFmrC,YAAa,QACbN,SAAS,EACTF,gBAAgB,EAChBS,kBAAkB,EAClBR,kBAAkB,EAClBF,WAAY77B,EAAKxG,QAAQ1F,KACzBuU,MAAO,SAAUhH,GACb2d,EAAWpO,SACX,IAAIo2D,GAAY/uE,EAAIoJ,EAAEgrB,EAAEyN,UAAWmtC,EAAYhvE,EAAIoJ,EAAEoJ,EAAEqvB,UAAWotC,EAA8B,EAAZF,GAAiBC,EAAWE,EAA+Br3E,EAAEoM,SAAS8D,EAAK8mE,eAAe,GAAIzlE,EAAE0Q,MAAMyH,QAAS4tD,EAA4B,EAAZH,GAAiBD,GAC/NG,IAAiCZ,EAAellE,IAAMrB,EAAKwY,UAAYwG,EAAWqN,EAAE7T,SAAW0uD,GAAmBloD,EAAWvU,EAAE+N,SAAW4uD,GAC3IjtC,EAAW0C,UAEX1C,EAAW/V,YAGnBoiD,EAAO,GAAIjG,IACX3M,QAASA,EACT50C,WAAYA,EACZmb,WAAYA,EACZqmC,QAASxgE,EAAKxG,QAAQgnE,UACtBiG,EAAe,GAAIvB,IACnBtR,QAASA,EACT50C,WAAYA,EACZmb,WAAYA,EACZgrC,WAAYA,IACZuB,EAAmB,GAAId,IACvBjS,OAAQ,SAAU+M,GACd1gE,EAAKqnE,SAAS3G,EAAYr0C,EAAGq0C,EAAYj2D,MAGrDmpD,EAAQpzD,KAAKqyB,EAAQ,WACjB7yB,EAAKjH,WAAa66D,EAAQnpD,EAC1BzK,EAAKxI,YAAco8D,EAAQvnC,EAC3BrsB,EAAKoB,QAAQ4jE,GACTjsE,UAAWiH,EAAKjH,UAChBvB,WAAYwI,EAAKxI,eAGrBwI,EAAKxG,QAAQ8tE,qBACbn2E,EAAQ2N,GAAG,4BAA6BM,EAAMhG,KAAM,iBAExDU,EAAOkG,GACH4zD,QAASA,EACT50C,WAAYA,EACZynD,aAAcA,EACdC,iBAAkBA,EAClBvsC,WAAYA,EACZqsC,KAAMA,EACNrB,WAAYA,EACZoC,QAAQ,EACR/uD,SAAS,EACTquD,cAAe1S,EACfp7D,UAAW,EACXvB,WAAY,EACZsvE,eAAgB31E,EAAQ4C,WAAWvD,UAEvCwP,EAAKwnE,UAAU,KACfxnE,EAAKwnE,UAAU,KACfxnE,EAAKynE,UAAY,WACbznE,EAAK0nE,QAAS,EACd1nE,EAAKm6B,WAAWppC,IAAI,EAAGiP,EAAK2nE,UAEhC3oD,EAAWpO,UACP5Q,EAAKxG,QAAQouE,eACb5nE,EAAK6nE,qBAtET12E,IAyEJ22E,aAAc,SAAUzmE,GACfjI,KAAKsuE,SACNtuE,KAAKsuE,QAAS,EACdtuE,KAAKuuE,QAAU,EACfvuE,KAAK+gC,WAAWO,MAAM,EAAGthC,KAAKuuE,UAElC3jD,aAAa5qB,KAAK2uE,eAClB3uE,KAAK2uE,cAAgBjlD,WAAW1pB,KAAKquE,UAAW,GAChD,IAAIh7C,GAAQn7B,EAAMi7B,YAAYlrB,EAC1BorB,KACArzB,KAAKuuE,SAAWl7C,EAChBrzB,KAAK+gC,WAAWhW,KAAK,EAAG/qB,KAAKuuE,UAEjCtmE,EAAE9D,kBAEN0hE,YAAa,WACT7lE,KAAK4lB,WAAWvU,EAAEw0D,eAEtBI,YAAa,SAAUj0D,EAAKtZ,GACxBsH,KAAK4lB,WAAWvU,EAAE40D,YAAYj0D,EAAKtZ,IAEvCQ,OAAQ,WACJ,MAAO8G,MAAK4lB,WAAWvU,EAAEtT,MAE7Bgf,aAAc,WACV,MAAO/c,MAAKytE,cAAc,GAAG1wD,cAEjCre,YAAa,WACT,MAAOsB,MAAKytE,cAAc,GAAG/uE,aAEjC0B,SACI8O,KAAM,WACNxU,MAAM,EACNk0E,WAAY,IACZC,oBAAoB,EACpBzH,SAAS,EACT/9C,WAAW,EACX6kD,qBAAqB,EACrBf,eAAgB,WACZ,OAAO,GAEXqB,eAAe,EACf9sD,UACIotD,aAAc,kBACdC,gBAAiB,qBACjBC,gBAAiB,eAGzBtnE,QACIgkE,EACAE,EACAD,GAEJhmD,QAAS,WACA3lB,KAAKutE,SACNvtE,KAAKivE,kBAGb5pD,WAAY,SAAUjlB,GAClB,GAAIwG,GAAO5G,IACXgF,GAAOf,GAAGohB,WAAWld,KAAKvB,EAAMxG,GAC5BA,EAAQouE,eACR5nE,EAAK6nE,sBAGbjoB,MAAO,WACCxmD,KAAKutE,QACLvtE,KAAKytE,cAAc9tE,UAAU,IAE7BK,KAAKw6D,QAAQD,QACTtnC,EAAG,EACH5hB,EAAG,IAEPrR,KAAKkvE,OAAO,KAGpBD,eAAgB,WACZjvE,KAAK4lB,WAAWpO,UACZxX,KAAKotE,KAAKn6C,EAAEizC,eACZlmE,KAAKw6D,QAAQG,SAAS,IAAK36D,KAAK4lB,WAAWqN,EAAEjhB,KAE7ChS,KAAKotE,KAAK/7D,EAAE60D,eACZlmE,KAAKw6D,QAAQG,SAAS,IAAK36D,KAAK4lB,WAAWvU,EAAEW,MAGrDm9D,QAAS,WACL,GAAIvpD,GAAa5lB,KAAK4lB,UACtBA,GAAWpO,UACXxX,KAAKkvE,OAAOtpD,EAAWq1C,UACvBj7D,KAAKw6D,QAAQD,OAAO30C,EAAWihD,sBAEnCpnD,OAAQ,WACJzf,KAAKof,SAAU,GAEnBG,QAAS,WACLvf,KAAKof,SAAU,GAEnB6uD,SAAU,SAAUh7C,EAAG5hB,GACfrR,KAAKutE,SACLvtE,KAAKytE,cAAcrvE,WAAWS,EAAIo0B,IAClCjzB,KAAKytE,cAAc9tE,UAAUd,EAAIwS,MAEjCrR,KAAK4lB,WAAWpO,UAChBxX,KAAKw6D,QAAQD,QACTtnC,EAAGA,EACH5hB,EAAGA,MAIf+9D,iBAAkB,SAAUn8C,EAAG5hB,EAAGsP,GAC9B,GAAIqM,GAAMC,CACNjtB,MAAKutE,QACLvtE,KAAKiuE,SAASh7C,EAAG5hB,IAEjB2b,GACIiG,EAAGjzB,KAAKw6D,QAAQvnC,EAChB5hB,EAAGrR,KAAKw6D,QAAQnpD,GAEpB4b,GACIgG,EAAGA,EACH5hB,EAAGA,GAEPrR,KAAKstE,iBAAiBZ,eAAe1/C,EAAMC,GAC3CjtB,KAAKstE,iBAAiBX,YAAYhsD,GAClC3gB,KAAKstE,iBAAiBr+D,UAG9BogE,YAAa,WACT,GAAIzoE,GAAO5G,IACX4G,GAAK0oE,YAAY3kB,YAAY8gB,GAC7B7kE,EAAK2oE,cAAc7sE,KAAKkE,EAAKkoE,kBAC7BloE,EAAK4oE,SAASrV,QACdvzD,EAAK6oE,SAAStV,QACdvzD,EAAKm6B,WAAW/V,UAEpBlF,QAAS,WACL9gB,EAAOf,GAAG6hB,QAAQ3d,KAAKnI,MACnBA,KAAK+gC,YACL/gC,KAAK+gC,WAAWjb,WAGxBopD,OAAQ,SAAUrd,GACd7xD,KAAK4lB,WAAWygD,QAAQxU,GACxB7xD,KAAKw6D,QAAQyN,QAAQpW,IAEzB4c,mBAAoB,WAChB,GAAI7nE,GAAO5G,IACX4G,GAAKgf,WAAWvU,EAAE80D,eAClBv/D,EAAKkoE,aAAe52E,EAAMuK,SAASmE,EAAKxG,QAAQshB,SAASotD,cACzDloE,EAAKmoE,gBAAkB72E,EAAMuK,SAASmE,EAAKxG,QAAQshB,SAASqtD,iBAC5DnoE,EAAKooE,gBAAkB92E,EAAMuK,SAASmE,EAAKxG,QAAQshB,SAASstD,iBAC5DpoE,EAAK6mE,cAAcD,QAAQ,oKAAsK5mE,EAAKkoE,iBAAmB,kBACzNloE,EAAK0oE,YAAc1oE,EAAK6mE,cAAc9yE,WAAWvD,QACjDwP,EAAK2oE,cAAgB3oE,EAAK0oE,YAAY30E,SAAS,gBAC/CiM,EAAKwmE,KAAK/7D,EAAEjK,KAAK,SAAUpB,EAAMY,EAAK8oE,YAAa9oE,IACnDA,EAAKm6B,WAAW35B,KAAK,MAAOpB,EAAMY,EAAK+oE,SAAU/oE,KAErD+oE,SAAU,WACN,GAAI/oE,GAAO5G,IACN4G,GAAKunE,SAGVvnE,EAAKunE,QAAS,EACdvnE,EAAK0oE,YAAY3kB,YAAY6gB,GAAclxE,SAASmxE,GACpD7kE,EAAK2oE,cAAc7sE,KAAKkE,EAAKooE,qBAC7BpoE,EAAK4oE,SAASvD,OAAOrlE,EAAKxG,QAAQwuE,WAAa,GAC/ChoE,EAAKoB,QAAQ,UAEjB0nE,YAAa,WACT,GAAI9oE,GAAO5G,IACP4G,GAAK4zD,QAAQnpD,EAAIi6D,EAAyB1kE,EAAKxG,QAAQwuE,WAClDhoE,EAAKunE,SACNvnE,EAAKunE,QAAS,EACdvnE,EAAK0oE,YAAY3kB,YAAY8gB,GAAcnxE,SAASkxE,GACpD5kE,EAAK2oE,cAAc7sE,KAAKkE,EAAKmoE,sBAE1BnoE,EAAKunE,SACZvnE,EAAKunE,QAAS,EACdvnE,EAAK0oE,YAAY3kB,YAAY6gB,GAC7B5kE,EAAK2oE,cAAc7sE,KAAKkE,EAAKkoE,oBAGrCV,UAAW,SAAU36C,GACjB,GAAI7sB,GAAO5G,KAAMw6D,EAAU5zD,EAAK4zD,QAASuM,EAAYngE,EAAKgf,WAAW6N,GAAOs4C,EAAanlE,EAAKmlE,WAAYI,EAAWvlE,EAAKwmE,KAAK35C,GAAOm8C,EAAY,GAAIhD,IAC9In5C,KAAMA,EACN+mC,QAASA,EACTuM,UAAWA,EACXp/C,UAAW/gB,EAAK7O,QAChBg1E,cAAenmE,EAAKxG,QAAQyuE,oBAEpC9H,GAAU3/D,KAAKqyB,EAAQ,WACnBm2C,EAAUp4D,YAEd20D,EAAS/kE,KAAKqyB,EAAQ,WAClBm2C,EAAU51E,SAEd4M,EAAK6sB,EAAO,WAAa,GAAIu4C,IACzBv4C,KAAMA,EACN04C,SAAUA,EACV3R,QAASA,EACTuR,WAAYA,EACZhrC,WAAYn6B,EAAKm6B,WACjBgmC,UAAWA,EACXK,QAASxgE,EAAKxG,QAAQgnE,QACtBkF,SAAU1lE,EAAKxG,QAAQksE,UAAYnB,EACnCkB,mBAAoBzlE,EAAKxG,QAAQisE,oBAAsBjB,EACvDzzE,IAAK,WACDi4E,EAAU9uE,OACV8F,EAAKoB,QAAQ,aACTyrB,KAAMA,EACN9zB,UAAWiH,EAAKjH,UAChBvB,WAAYwI,EAAKxI,kBAMrCijB,GAAG8G,OAAOmB,IACZ3yB,OAAOuB,MAAM2sB,QACRluB,OAAOuB,OACE,kBAAVzB,SAAwBA,OAAOgiC,IAAMhiC,OAAS,SAAUiiC,EAAIC,EAAIC,IACrEA,GAAMD,OAEV,SAAUniC,EAAGC,QACVA,OAAO,mBACH,aACA,qBACDD,IACL,WAyHE,MA9GC,UAAUE,EAAGE,GAAb,GACOsB,GAAQvB,OAAOuB,MAAOmpB,EAAKnpB,EAAMmpB,GAAIrc,EAASqc,EAAGrc,OAAQgB,EAAQtP,EAAEsP,MAAO9J,EAAahE,EAAMgE,WAAYwE,EAAShK,EAAEgK,OAAQmvE,EAAa,aAAcC,EAAW,WAAYpwC,EAAQ,QAASisC,EAAS,SAAUoE,EAAY,YAC9NC,EAAYhrE,EAAOtE,QACnBC,KAAM,SAAU5I,EAASqI,GACrB,GAAIwG,GAAO5G,IACXgF,GAAOf,GAAGtD,KAAKwH,KAAKvB,EAAM7O,EAASqI,GACnCwG,EAAKqpE,YAAcrpE,EAAKxG,QAAQ6vE,YAAYnzE,eAAiBgzE,EAAWD,EAAaC,EACrFlpE,EAAKspE,eAAiBtpE,EAAKqpE,aAAeJ,EAAa,IAAM,IAC7DjpE,EAAKupE,UAAYvpE,EAAKqpE,aAAeJ,EAAa,OAAS,MAC3DjpE,EAAKwpE,WAAaxpE,EAAKqpE,aAAeJ,EAAa,aAAe,cAClEjpE,EAAKuhE,UAAY,GAAI9mD,GAAGijD,UAAUlkE,EAAQiwE,kBAAoBt4E,GAC1D0mC,SAAU,EACV56B,OAAQzD,EAAQorB,OAChB8kD,KAAMtqE,EAAMY,EAAK+e,QAAS/e,GAC1B2pE,WAAYvqE,EAAMY,EAAKiiE,QAASjiE,GAChC4pE,UAAWxqE,EAAMY,EAAKk7B,OAAQl7B,GAC9B6pE,QAASzqE,EAAMY,EAAK8pE,MAAO9pE,KAE/BA,EAAKm6B,WAAan6B,EAAKuhE,UAAUpnC,YAErCr5B,QACIikE,EACAoE,EACArwC,GAEJt/B,SACI8O,KAAM,YACN+gE,YAAaJ,GAEjB5uD,OAAQ,aAER0vD,KAAM,SAAU1oE,GACZ,GAAIrB,GAAO5G,KAAM4wE,EAAWhqE,EAAK4iE,KAAO5iE,EAAK4iE,KAAK5iE,EAAKwpE,cAAgB,EAAGryE,EAAO6I,EAAKxG,QAAQ1H,GAC9F,OAAOwD,GAAW6B,GAAQA,EAAKkK,GAAKlK,IAASnH,EAAYgQ,EAAKiqE,wBAA0B9yE,EAAO6yE,EAAW7yE,GAE9G+yE,KAAM,SAAU7oE,GACZ,GAAIrB,GAAO5G,KAAMjC,EAAO6I,EAAKxG,QAAQ4R,GACrC,OAAO9V,GAAW6B,GAAQA,EAAKkK,GAAKlK,IAASnH,EAAYgQ,EAAKiqE,wBAA0B9yE,EAAOA,GAEnG+jC,OAAQ,SAAU75B,GACd,GAAIrB,GAAO5G,KAAMwpE,EAAO5iE,EAAKxG,QAAQopE,KAAM/qE,EAAK/H,EAAEuR,EAAE22B,cACpDh4B,GAAKiqE,wBAA0BpyE,EAAG43D,WAAWzvD,EAAKupE,WAClDvpE,EAAKmqE,sBAAwB9oE,EAAErB,EAAKspE,gBAAgBzvC,cAChD+oC,IACA5iE,EAAK4iE,KAAOttE,EAAWstE,GAAQ9yE,EAAE8yE,EAAK/qE,IAAO+qE,EAC7C5iE,EAAK4iE,KAAKvxE,KAAMo+D,SAAU,aAAcp+D,IAAI2O,EAAKupE,UAAWvpE,EAAKiqE,yBAAyB/5C,SAASlwB,EAAK7O,UAE5G6O,EAAKoB,QAAQ03B,EAAOz3B,GACpBrB,EAAKoqE,aAAepqE,EAAK+pE,KAAK1oE,GAC9BrB,EAAKqqE,aAAerqE,EAAKkqE,KAAK7oE,GAC9BvR,EAAE6G,SAASsa,MAAM5f,IAAI,SAAUwG,EAAGxG,IAAI,YAE1C0tB,QAAS,SAAU1d,GACf,GAAoMouD,GAAhMzvD,EAAO5G,KAAMkxE,EAActqE,EAAKoqE,aAAcG,EAAcvqE,EAAKqqE,aAAcG,EAAkBxqE,EAAKiqE,yBAA2B5oE,EAAErB,EAAKspE,gBAAgBx0D,SAAW9U,EAAKmqE,sBAC5K1a,GAAW8a,IAAgBv6E,EAAYgI,KAAKlG,IAAIy4E,EAAaC,GAAmBA,EAChFxqE,EAAKyvD,SAAWA,EAAW6a,IAAgBt6E,EAAYgI,KAAKoT,IAAIk/D,EAAa7a,GAAYA,EACrFzvD,EAAK4iE,MACL5iE,EAAK4iE,KAAKpoE,YAAYwF,EAAKxG,QAAQixE,cAAgB,GAAIhb,GAAY6a,GAAe7a,GAAY8a,GAAal5E,IAAI2O,EAAKupE,UAAW9Z,GAEnIzvD,EAAK0qE,UAAW,EAChB1qE,EAAKoB,QAAQ2jE,EAAQjrE,EAAOuH,GAAKouD,SAAUA,MAE/Cqa,MAAO,SAAUzoE,GACb,GAAIrB,GAAO5G,IACP4G,GAAK4iE,MACL5iE,EAAK4iE,KAAKthD,SAEdthB,EAAK0qE,UAAW,EAChB1qE,EAAKoB,QAAQ+nE,EAAWrvE,EAAOuH,GAAKouD,SAAUzvD,EAAKyvD,YACnD3/D,EAAE6G,SAASsa,MAAM5f,IAAI,SAAU,KAEnC4wE,QAAS,SAAU5gE,GACf,GAAIrB,GAAO5G,IACP4G,GAAK4iE,OACL5iE,EAAKyvD,SAAWz/D,EAChBgQ,EAAK4iE,KAAKvxE,IAAI2O,EAAKupE,UAAWvpE,EAAKiqE,yBACnCjqE,EAAK8pE,MAAMzoE,KAGnB6d,QAAS,WACL,GAAIlf,GAAO5G,IACXgF,GAAOf,GAAG6hB,QAAQ3d,KAAKvB,GACnBA,EAAKuhE,WACLvhE,EAAKuhE,UAAUriD,WAGvBwb,MAAO,SAAUlhB,GACb,GAAKA,EAAL,CAGA,GAAIi2C,GAAWj2C,EAAOi2C,WAAYzvD,EAAO5G,IACzC4G,GAAKm6B,WAAWO,MAAM+0B,EAAS19D,KAAM09D,EAAS/2D,IAAK8gB,EAAO,IAC1DxZ,EAAK2qE,eAAiBlb,EACtBzvD,EAAKwZ,OAASA,IAElB2K,KAAM,SAAUsI,GACZ,GAAIzsB,GAAO5G,KAAMiwE,EAAcrpE,EAAKupE,UAAW9Z,EAAWzvD,EAAK2qE,eAAgB5lE,EAAU/E,EAAKyvD,QAC1F1qD,KAAY/U,IACZ+U,EAAU0qD,EAAS4Z,IAEvB5Z,EAAS4Z,GAAetkE,EAAU0nB,EAClCzsB,EAAKm6B,WAAWhW,KAAKsrC,EAAS19D,KAAM09D,EAAS/2D,MAEjD3H,IAAK,WACDqI,KAAK+gC,WAAWppC,MAChBqI,KAAKogB,OAASpgB,KAAKq2D,SAAWz/D,IAGtCsB,GAAMmpB,GAAG8G,OAAO6nD,IAClBr5E,OAAOuB,MAAM2sB,QACRluB,OAAOuB,OACE,kBAAVzB,SAAwBA,OAAOgiC,IAAMhiC,OAAS,SAAUiiC,EAAIC,EAAIC,IACrEA,GAAMD,OAEV,SAAUniC,EAAGC,QACVA,OAAO,kBAAmB,qBAAsBD,IAClD,WA2YE,MApYC,UAAUE,EAAGE,GAEV,QAAS46E,GAAkB53E,EAAQ23B,GAC/B,IACI,MAAO76B,GAAEoM,SAASlJ,EAAQ23B,IAAU33B,GAAU23B,EAChD,MAAOtpB,GACL,OAAO,GAGf,QAASwpE,GAAY15E,GACjB,MAAOA,GAAQoE,QAEnB,QAASu1E,GAAmB35E,GACxB,MAAOA,GAAQoE,QAAQipB,WAAW,MAAMntB,IAAI,aAAc,UAbjE,GACOC,GAAQvB,OAAOuB,MAAO8M,EAAS9M,EAAMmpB,GAAGrc,OAAQxL,EAAatB,EAAMuB,YAAaC,EAAcxB,EAAMyB,aAAc+lC,EAAQ,QAASiyC,EAAc,aAAchyC,EAAO,OAAQrd,EAAM,MAAOmX,EAAS,SAAUmG,EAAS,SAAUgyC,EAAc,OAAQC,EAAgB,SAAUC,EAAiB,UAAWC,EAAiB,KAAMC,KAcpUC,EAAWjtE,EAAOtE,QAClBC,KAAM,SAAU5I,EAASqI,GACrB,GAAIwG,GAAO5G,IACXgF,GAAOf,GAAGtD,KAAKwH,KAAKvB,EAAM7O,EAASqI,GAC9BwG,EAAKxG,QAAQmd,cACd3W,EAAKxG,QAAQmd,YAAcm0D,GAE1B9qE,EAAKxG,QAAQopE,OACd5iE,EAAKxG,QAAQopE,KAAOiI,GAExB7qE,EAAKuhE,UAAYvhE,EAAKsrE,oBAE1BxqE,QACIg4B,EACAiyC,EACAhyC,EACArd,EACAmX,EACAmG,GAEJx/B,SACI8O,KAAM,WACNs6D,KAAM,KACNjsD,YAAa,KACb1Z,OAAQkuE,EACR7I,YAAY,EACZ5lE,SAAU,KACVqkB,UAAW,KACXwqD,YAAa,KACb1qE,QAAS,KACTwhE,aAAc,KACdx1C,KAAM,KACN4hB,OAAQ,KACR8zB,YAAY,EACZiJ,OAAQ,OACRC,iBAAiB,GAErBvsD,QAAS,WACL9lB,KAAKmoE,UAAUriD,UACf9gB,EAAOf,GAAG6hB,QAAQ3d,KAAKnI,OAE3BkyE,iBAAkB,WACd,GAAItrE,GAAO5G,KAAMjI,EAAU6O,EAAK7O,QAASqI,EAAUwG,EAAKxG,OACxD,OAAO,IAAIlI,GAAMmpB,GAAGijD,UAAUvsE,GAC1B8L,OAAQzD,EAAQyD,OAChB2lE,KAAMtxE,EAAMgE,WAAWkE,EAAQopE,MAAQppE,EAAQopE,KAAO9yE,EAAE0J,EAAQopE,MAChEN,WAAY9oE,EAAQ8oE,WACpBvhD,UAAWvnB,EAAQunB,UAAYjxB,EAAE0J,EAAQunB,WAAa,KACtDshD,aAAc7oE,EAAQ6oE,aACtBx1C,KAAMrzB,EAAQqzB,KACd4hB,OAAQj1C,EAAQi1C,OAChB8zB,WAAY/oE,EAAQ+oE,WACpBqH,UAAW95E,EAAEsP,MAAMY,EAAK6+B,WAAY7+B,GACpC2pE,WAAY75E,EAAEsP,MAAMY,EAAK0rE,YAAa1rE,GACtC0pE,KAAM55E,EAAEsP,MAAMY,EAAKgiE,MAAOhiE,GAC1B6pE,QAAS/5E,EAAEsP,MAAMY,EAAK2rE,SAAU3rE,MAGxC6+B,WAAY,SAAUx9B,GAClB,GAAIuqE,GAAiBxyE,KAAKwyE,eAAiBvqE,EAAE22B,cAAet7B,EAAWtD,KAAKI,QAAQkD,SAAUmE,EAAUzH,KAAKI,QAAQqH,QAASgrE,EAAezyE,KAAKI,QAAQmd,YAAaA,EAAcvd,KAAKud,YAA+C7mB,EAAjCwB,EAAMgE,WAAWu2E,GAAkBA,EAAatqE,KAAKnI,KAAMwyE,GAAqBC,EACpRnvE,IAAYkvE,EAAez4E,GAAGuJ,GAC9B2E,EAAE9D,iBACKsD,IAAY/Q,EAAEuR,EAAE8iE,eAAehxE,GAAG0N,GACzCQ,EAAE9D,iBAEEnE,KAAKgI,QAAQ03B,GACT6M,KAAMimC,EACNE,eAAgBzqE,IAEpBA,EAAE9D,kBAEFquE,EAAev6E,IAAI,UAAW,QAC9Bu6E,EAAeG,OAAOp1D,GACtBvd,KAAK4yE,eAIjBN,YAAa,WACTtyE,KAAK6oE,UACL7oE,KAAKgI,QAAQ43B,GAAU2M,KAAMvsC,KAAKwyE,iBAClCxyE,KAAK6yE,gBAETjK,MAAO,SAAU3gE,GACb,GAAwE6qE,GAGjEC,EAGAntC,EAAWotC,EAASC,EANvBT,EAAiBxyE,KAAKwyE,eAAgBpyD,EAASpgB,KAAKkzE,YAAYjrE,GAAkBghE,GAC9EtwE,KAAMsP,EAAEgrB,EAAEvX,SACVpc,IAAK2I,EAAEoJ,EAAEqK,UACGy3D,GACZlgD,EAAGhrB,EAAEgrB,EAAEI,MACPhiB,EAAGpJ,EAAEoJ,EAAEgiB,OACwBI,EAAOzzB,KAAKI,QAAQqzB,KAAM4+C,EAAkBryE,KAAKI,QAAQiyE,gBAAiBe,GACzG7mC,KAAMimC,EACNjiC,KAAMvwC,KACN0yE,eAAgBzqE,EAExB,IAAa,MAATwrB,GAAyB,MAATA,EAEhB,MADAzzB,MAAKqzE,gBAAgB5/C,EAAMw1C,EAAckK,EAAU1/C,GAAO2/C,GAC1D,CAEJ,IAAIhzD,EAAQ,CAOR,GANA0yD,EAAe9yE,KAAKszE,kBAAkBlzD,EAAOroB,SAC7Cg7E,GACIp6E,KAAMiG,KAAK6Q,MAAMw5D,EAAatwE,KAAOm6E,EAAan6E,MAClD2G,IAAKV,KAAK6Q,MAAMw5D,EAAa3pE,IAAMwzE,EAAaxzE,MAEpD5I,EAAEgK,OAAO0yE,GAAahzD,OAAQA,EAAOroB,UACjCqoB,EAAOmzD,eAEP,MADAvzE,MAAKwzE,iBAAiBpzD,EAAQ,KAAMgzD,GACpC,CAkBJ,IAhBIhzD,EAAOqzD,mBACPzzE,KAAKwzE,iBAAiBpzD,EAAQ,OAAQgzD,GAEtCpzE,KAAK0zE,YAAYtzD,EAAOroB,SACpBo7E,EAAUlgD,EAAI,GAAKo/C,IAAoBA,GAAmBU,EAAYp6E,KAAO,EAC7EitC,EAAY,QACLutC,EAAUlgD,EAAI,GAAKo/C,IAAoBA,GAAmBU,EAAYp6E,KAAO,KACpFitC,EAAY,QAGZutC,EAAU9hE,EAAI,GAAKghE,IAAoBA,GAAmBU,EAAYzzE,IAAM,EAC5EsmC,EAAY,QACLutC,EAAU9hE,EAAI,GAAKghE,IAAoBA,GAAmBU,EAAYzzE,IAAM,KACnFsmC,EAAY,QAGhBA,EAAW,CAGX,IAFAqtC,EAA2B,SAAdrtC,EAAuB/gB,OAAO5gB,GAAG+3B,KAAOnX,OAAO5gB,GAAGm9C,KAC/D4xB,EAAUC,EAAW9qE,KAAKiY,EAAOroB,SAC1Bi7E,EAAQp7E,SAAWo7E,EAAQj5E,GAAG,aACjCi5E,EAAUC,EAAW9qE,KAAK6qE,EAE1BA,GAAQ,IAAMhzE,KAAKud,YAAY,IAC/Bvd,KAAKwzE,iBAAiBpzD,EAAQwlB,EAAWwtC,MAKzDb,SAAU,SAAUtqE,GAChB,GAA6M0rE,GAAevvE,EAAoBgvE,EAAWQ,EAAvPr2D,EAAcvd,KAAKud,YAAai1D,EAAiBxyE,KAAKwyE,eAAgBqB,EAAe7zE,KAAK9B,QAAQs0E,GAAiBsB,EAAmB9zE,KAAK9B,QAAQqf,GAAc40D,EAAcnyE,KAAKI,QAAQ+xE,WAqBhM,OApBAnyE,MAAK6yE,eACLO,GACIz8C,OAAQi7C,EACRrlC,KAAMimC,EACNuB,SAAUF,EACVG,SAAUF,EACVpB,eAAgBzqE,GAEhB6rE,GAAoB,EACpB1vE,EAAqBpE,KAAKgI,QAAQsa,EAAK8wD,IAEvCO,EAAgBp2D,EAAY5Z,QAAQwuE,GAAa8B,mBACjDb,EAAUz8C,OAASk7C,EACnB+B,EAAyBl9E,EAAEgK,UAAW0yE,GAClCz8C,OAAQm7C,EACRiC,SAAU/B,EACVgC,SAAUL,EAAcz1E,QAAQqf,KAEpCnZ,KAAwBpE,KAAKgI,QAAQsa,EAAK8wD,KAAeO,EAAc3rE,QAAQsa,EAAKsxD,KAEpFxvE,GAAsB0vE,IAAqBD,GAC3C7zE,KAAK6oE,UACL,IAEJtrD,EAAYw/C,YAAYyV,GACxBA,EAAex4E,OACfgG,KAAKmoE,UAAUK,SAAU,EACzB4K,GACIz8C,OAAQ32B,KAAK9B,QAAQs0E,IAAmBR,EAAgBJ,EAAcC,EACtEtlC,KAAMimC,EACNuB,SAAUF,EACVG,SAAUh0E,KAAK9B,QAAQs0E,GACvBE,eAAgBzqE,GAEpBjI,KAAKgI,QAAQyxB,EAAQ25C,GACjBO,IACAC,EAAyBl9E,EAAEgK,UAAW0yE,GAClCz8C,OAAQm7C,EACRiC,SAAU/B,EACVgC,SAAUL,EAAcz1E,QAAQs0E,KAEpCmB,EAAc3rE,QAAQyxB,EAAQm6C,IAjBlCr2D,IAoBJ21D,YAAa,SAAUjrE,GACnB,GAA+Cue,GAA+CmL,EAA1F55B,EAAUiI,KAAKk0E,wBAAwBjsE,GAAWkqE,EAAcnyE,KAAKI,QAAQ+xE,WACjF,OAAIz7E,GAAEoM,SAAS9C,KAAKjI,QAAQ,GAAIA,IAC5ByuB,EAAQxmB,KAAKwmB,QACbmL,EAAOnL,EAAM3iB,OAAO9L,GAAS,IAAMyuB,EAAM2tD,IAAIp8E,GAAS,GAC/C45B,GACH55B,QAASrB,EAAEi7B,GACXyiD,SAAUp0E,MACV,MACGA,KAAKjI,QAAQ,IAAMA,GAAWiI,KAAKq0E,YAEtCt8E,QAASiI,KAAKjI,QACdq8E,SAAUp0E,KACVuzE,gBAAgB,GAEbvzE,KAAKjI,QAAQ,IAAMA,GAAWiI,KAAKs0E,iBAC1C3iD,EAAO3xB,KAAKwmB,QAAQuC,GAAG,IAEnBhxB,QAAS45B,EACTyiD,SAAUp0E,KACVyzE,mBAAmB,IAEhBtB,EACAnyE,KAAKu0E,wBAAwBx8E,EAASkQ,GAD1C,GAIXisE,wBAAyB,SAAUjsE,GAC/B,GAAI+qB,GAAqB96B,EAAM86B,mBAAmB/qB,GAAIkgE,EAAYlgE,EAAEC,MASpE,OARIspE,GAAkBrJ,EAAUqB,KAAK,GAAIx2C,KACrCm1C,EAAUqB,KAAK1oE,OACfkyB,EAAqB96B,EAAM86B,mBAAmB/qB,GACzC+qB,IACDA,EAAqB96B,EAAM86B,mBAAmB/qB,IAElDkgE,EAAUqB,KAAKxvE,QAEZg5B,GAEXuhD,wBAAyB,SAAUx8E,EAASkQ,GAAnB,GACwBusE,GAAkBhuD,EAAOmL,EAC7D72B,EADL25E,EAAY/9E,EAAEsJ,KAAKI,QAAQ+xE,YAC/B,KAASr3E,EAAI,EAAGA,EAAI25E,EAAU78E,OAAQkD,IAElC,GADA05E,EAAmBC,EAAU1rD,GAAGjuB,GAAGm5E,mBAC/Bv9E,EAAEoM,SAAS2xE,EAAU35E,GAAI/C,IACzB,GAAIy8E,EAGA,MAFAhuD,GAAQguD,EAAiBhuD,QACzBmL,EAAOnL,EAAM3iB,OAAO9L,GAAS,IAAMyuB,EAAM2tD,IAAIp8E,GAAS,GAClD45B,GACA6iD,EAAiBj3D,YAAcvd,KAAKud,aAEhCxlB,QAASrB,EAAEi7B,GACXyiD,SAAUI,IAGP,SAGZ,IAAIC,EAAU35E,IAAM/C,EAAS,CAChC,GAAIy8E,GAAoBA,EAAiBH,WACrC,OACIt8E,QAAS08E,EAAU1rD,GAAGjuB,GACtBs5E,SAAUI,EACVjB,gBAAgB,EAEjB,IAAIvzE,KAAK00E,mBAAmBF,EAAkBvsE,GAEjD,MADA0pB,GAAO6iD,EAAiBhuD,QAAQ8I,QAE5Bv3B,QAAS45B,EACTyiD,SAAUI,KAM9BE,mBAAoB,SAAUN,EAAUnsE,GACpC,GAGO0sE,GAAgBthD,EAHnBuhD,EAAWR,EAAS5tD,QAAQ8I,OAAQ25C,GAChCtwE,KAAMsP,EAAEgrB,EAAEvX,SACVpc,IAAK2I,EAAEoJ,EAAEqK,SAUjB,OARAi5D,GAAiBz8E,EAAM+G,UAAU21E,GACjCD,EAAer1E,KAAO5F,EAAYk7E,GAClCD,EAAeh8E,MAAQa,EAAWo7E,GAE9BvhD,EADArzB,KAAK0zE,YAAYkB,GACTD,EAAeh8E,KAAOswE,EAAatwE,KAEnCg8E,EAAer1E,IAAM2pE,EAAa3pE,IAEvC+zB,EAAQ,GAEnBggD,gBAAiB,SAAU5/C,EAAMw1C,EAAc51C,EAAO+/C,GAClD,GAAkJN,GAA9I+B,EAA0B,MAATphD,EAAew1C,EAAatwE,KAAOswE,EAAa3pE,IAAK8gB,EAASiT,EAAQ,EAAIrzB,KAAKud,YAAYye,OAASh8B,KAAKud,YAAY6jC,MACtIhhC,GAAOxoB,SAAWwoB,EAAOrmB,GAAG,cAC5BqmB,EAASiT,EAAQ,EAAIjT,EAAO4b,OAAS5b,EAAOghC,QAEhD1qD,EAAEgK,OAAO0yE,GAAahzD,OAAQA,IAC9B0yD,EAAe9yE,KAAKszE,kBAAkBlzD,GAClC0yD,IACAA,EAAwB,MAATr/C,EAAeq/C,EAAan6E,KAAOm6E,EAAaxzE,KAE/D8gB,EAAOxoB,QAAUy7B,EAAQ,GAAKwhD,EAAiB/B,EAAe,EAC9D9yE,KAAKwzE,kBACDz7E,QAASqoB,EACTg0D,SAAUp0E,MACX,OAAQozE,GACJhzD,EAAOxoB,QAAUy7B,EAAQ,GAAKwhD,EAAiB/B,EAAe,GACrE9yE,KAAKwzE,kBACDz7E,QAASqoB,EACTg0D,SAAUp0E,MACX,OAAQozE,IAGnBI,iBAAkB,SAAUpzD,EAAQwlB,EAAWwtC,GAC3C,GAAI71D,GAAcvd,KAAKud,WAClB6C,GAAOg0D,SAASpsE,QAAQ2pE,EAAayB,KACjCxtC,EAEoB,SAAdA,EACPxlB,EAAOroB,QAAQ46E,OAAOp1D,GACD,SAAdqoB,GACPxlB,EAAOroB,QAAQylE,MAAMjgD,GAJrB6C,EAAOroB,QAAQ+rD,OAAOvmC,GAM1B6C,EAAOg0D,SAASpsE,QAAQ23B,EAAMyzC,KAGtCR,WAAY,WACR,GAAkC/6D,GAA9Bu6D,EAASpyE,KAAKI,QAAQgyE,MACtBA,IAAqB,SAAXA,IACVv6D,EAAOnhB,EAAE6G,SAASsa,MAClB7X,KAAK80E,oBAAsBj9D,EAAK5f,IAAI,UACpC4f,EAAK5f,KAAMm6E,OAAUA,IAChBpyE,KAAK+0E,oBACN/0E,KAAK+0E,kBAAoBr+E,EAAE,sBAAwB07E,EAAS,2BAEhEpyE,KAAK+0E,kBAAkBj+C,SAASjf,KAGxCg7D,aAAc,WACN7yE,KAAK80E,sBACLp+E,EAAE6G,SAASsa,MAAM5f,IAAI,SAAU+H,KAAK80E,qBACpC90E,KAAK80E,oBAAsB,KAC3B90E,KAAK+0E,kBAAkB7sD,WAG/BorD,kBAAmB,SAAUv7E,GACzB,GAAIymC,GAASzmC,EAAQH,OAASM,EAAM+G,UAAUlH,GAAW,IAKzD,OAJIymC,KACAA,EAAOl/B,KAAO5F,EAAY3B,GAAW,EACrCymC,EAAO7lC,MAAQa,EAAWzB,GAAW,GAElCymC,GAEXk1C,YAAa,SAAUnnC,GACnB,MAAO,aAAaryC,KAAKqyC,EAAKt0C,IAAI,WAAa,oBAAoBiC,KAAKqyC,EAAKt0C,IAAI,aAErF4wE,QAAS,WACL7oE,KAAKwyE,eAAex4E,OACpBgG,KAAKud,YAAY2K,UAErB8sD,OAAQ,WACJ,GAAkCxuD,GAA9B3iB,EAAS7D,KAAKI,QAAQyD,MAM1B,OAJI2iB,GADA3iB,EACQ7D,KAAKjI,QAAQuvB,KAAKzjB,GAElB7D,KAAKjI,QAAQ4C,YAI7BuD,QAAS,SAAUnG,GACf,GAAIyuB,GAAQxmB,KAAKg1E,SAAUz3D,EAAcvd,KAAKud,YAAai1D,EAAiBxyE,KAAKwyE,cACjF,OAAIj1D,IAAexlB,EAAQ,IAAMwlB,EAAY,GAClCiJ,EAAMyuD,IAAIzC,GAAgBrgE,MAAMpa,GAEhCyuB,EAAMyuD,IAAI13D,GAAapL,MAAMpa,IAG5CyuB,MAAO,WACH,GAAIjJ,GAAcvd,KAAKud,YAAaiJ,EAAQxmB,KAAKg1E,QAIjD,OAHIz3D,KACAiJ,EAAQA,EAAMyuD,IAAI13D,IAEfiJ,GAEX6tD,SAAU,WACN,OAAQr0E,KAAKwmB,QAAQ5uB,QAEzB08E,cAAe,WACX,MAA+B,KAAxBt0E,KAAKwmB,QAAQ5uB,QAAgBoI,KAAKwmB,QAAQzsB,GAAG,aAG5D7B,GAAMmpB,GAAG8G,OAAO8pD,IAClBt7E,OAAOuB,MAAM2sB,QACRluB,OAAOuB,OACE,kBAAVzB,SAAwBA,OAAOgiC,IAAMhiC,OAAS,SAAUiiC,EAAIC,EAAIC,IACrEA,GAAMD,OAEV,SAAUniC,EAAGC,QACVA,OAAO,oBACH,aACA,oBACDD,IACL,WAmRE,MAxQC,UAAUE,EAAGE,GA6PV,QAASs+E,GAAUn9E,EAASs+D,GACxB,IAAKt+D,EAAQgC,GAAG,YACZ,OAAO,CAEX,IAAIo7E,GAAkBj9E,EAAM+G,UAAUlH,GAAUa,EAAQy9D,EAAS19D,KAAO09D,EAASp9D,MAAOJ,EAASw9D,EAAS/2D,IAAM+2D,EAASn9D,MAGzH,OAFAi8E,GAAgBv8E,MAAQu8E,EAAgBx8E,KAAOT,EAAMuB,YAAY1B,GACjEo9E,EAAgBt8E,OAASs8E,EAAgB71E,IAAMpH,EAAMyB,aAAa5B,KACzDo9E,EAAgBx8E,KAAOC,GAASu8E,EAAgBv8E,MAAQy9D,EAAS19D,MAAQw8E,EAAgB71E,IAAMzG,GAAUs8E,EAAgBt8E,OAASw9D,EAAS/2D,KApQ3J,GASO81E,GARAl9E,EAAQvB,OAAOuB,MAAO8M,EAAS9M,EAAMmpB,GAAGrc,OAAQgB,EAAQtP,EAAEsP,MAAOnH,EAAMD,KAAKC,IAAKw2E,EAAe,gBAAiBC,EAAW,mBAAoBC,EAAS,oBAAqBC,EAAa,eAAgB/7C,EAAS,SAAUolC,EAAK,mBAAoB4W,EAAc,sBAAuBtW,EAAgB,4IAA6I5kE,EAAOrC,EAAMC,QAAQoB,QAAQgB,KAAMm7E,GAAyB,GACxf,SAAUh/E,IACN,WACGA,EAAE,sCAAsCgP,GAAG,QAAS,KAAM,WACtDgwE,GAAyB,IAC1BpuD,KAAK,QAAQtG,QAAQrpB,MAAMiyB,UAEpClzB,GACE0+E,EAAapwE,EAAOtE,QACpBC,KAAM,SAAU5I,EAASqI,GACrB,GAAiB+1D,GAAbvvD,EAAO5G,IACXgF,GAAOf,GAAGtD,KAAKwH,KAAKvB,EAAM7O,EAASqI,GACnCwG,EAAK+uE,SAAWj/E,EAAE,oEAClBkQ,EAAKgvE,YAAc,KACnBhvE,EAAK7O,QAAQuC,SAASk7E,GACtB5uE,EAAK+kB,cAAgB/kB,EAAKxG,QAAQurB,cAClCwqC,EAAWvvD,EAAKxG,QAAQ+1D,SACpBn2D,KAAKI,QAAQy1E,MAAQ1f,GACrBvvD,EAAK7O,QAAQmL,KAAK,wBAAwB,GAE9C0D,EAAKm6B,WAAa,GAAI7oC,GAAM0pC,WAAWh7B,EAAK7O,SACxCgrC,QAAQ,EACRL,gBAAgB,EAChB7+B,QAAU6xE,EAAkD,GAAzB,IAAMF,EAAa,KAAY5uE,EAAKxG,QAAQyD,OAC/EihC,IAAK9+B,EAAMY,EAAK2+B,KAAM3+B,KAEtBuvD,GACAvvD,EAAKm6B,WAAW35B,KAAK,QAASpB,EAAMY,EAAKk7B,OAAQl7B,IAAOQ,KAAK,OAAQpB,EAAMY,EAAKm9B,MAAOn9B,IAAOQ,KAAK,MAAOpB,EAAMY,EAAKq9B,KAAMr9B,IAAOQ,KAAK,SAAUpB,EAAMY,EAAKi9B,QAASj9B,KAG7Kc,QAAS+xB,GACTr5B,SACI8O,KAAM,aACNrL,OAAQ,KACRsyD,UAAU,EACVxqC,cAAej1B,EAAEkK,MAErBk1E,WAAY,SAAU11D,GAAV,GAEJziB,GADA4oB,EAAWvmB,KAAKjI,QACXH,EAAS2uB,EAAS3uB,OAAQoH,GAAS,CAE5C,KADAohB,EAASA,EAAO,GACXziB,EAAM,EAAGA,EAAM/F,EAAQ+F,IACxB,GAAI4oB,EAAS5oB,KAASyiB,EAAQ,CAC1BphB,GAAS,CACT,OAGR,MAAOA,IAEXumC,KAAM,SAAUt9B,GACZ,GAAgKojD,GAA5JjrC,EAAS1pB,EAAEuR,EAAEmY,QAASxZ,EAAO5G,KAAM+1E,EAAU9tE,EAAE0Q,MAAMo9D,SAAW9tE,EAAE0Q,MAAMq9D,QAAS7f,EAAWvvD,EAAKxG,QAAQ+1D,SAAU9/B,EAAW8/B,GAAYluD,EAAE0Q,MAAM0d,SAAoB4/C,EAAYhuE,EAAE0Q,MAAMmrB,MAAOoyC,EAAajuE,EAAE0Q,MAAMw9D,QACrNvvE,EAAKkvE,WAAW11D,EAAOnI,QAAQ,IAAMu9D,KAAgBS,GAA0B,GAAbA,GAAkBC,GAA4B,GAAdA,GAGlGl2E,KAAKo2E,gBAAgBnuE,EAAE0Q,MAAMyH,UAGlCirC,EAAWjrC,EAAOvmB,SAASy7E,GACtBnf,GAAa4f,GACdnvE,EAAKuyC,QAET/4B,EAASA,EAAO9e,IAAIsF,EAAK+kB,cAAcvL,IACnCiW,EACAzvB,EAAKyvE,YAAYzvE,EAAK0vE,iBAAkBl2D,IAEpCirC,GAAY0qB,GACZnvE,EAAK2vE,UAAUn2D,GACfxZ,EAAK4vE,QAAQ/8C,IAEb7yB,EAAKhJ,MAAMwiB,GAEfxZ,EAAKgvE,YAAchvE,EAAK6vE,YAAcr2D,KAG9C0hB,OAAQ,SAAU75B,GACd,GAA6EyuE,GAAzE9vE,EAAO5G,KAAMogB,EAAS1pB,EAAEuR,EAAEmY,QAASirC,EAAWjrC,EAAOvmB,SAASy7E,GAA2BS,EAAU9tE,EAAE0Q,MAAMo9D,SAAW9tE,EAAE0Q,MAAMq9D,OAClI,IAAKh2E,KAAKo2E,gBAAgBnuE,EAAE0Q,MAAMyH,QAAlC,CAIA,GADAxZ,EAAK6vE,YAAcr2D,GACdxZ,EAAKkvE,WAAW11D,EAAOnI,QAAQ,IAAMu9D,IAEtC,MADA5uE,GAAKm6B,WAAW/V,SAChB,CAEApkB,GAAKxG,QAAQu2E,YACb/vE,EAAKouE,OAASpuE,EAAK7O,QAAQuvB,KAAK1gB,EAAKxG,QAAQyD,SAE7C6yE,EAAiBt2D,EAAOnI,QAAQrR,EAAK7O,SACrC6O,EAAKouE,OAAS0B,EAAepvD,KAAK1gB,EAAKxG,QAAQyD,SAEnDoE,EAAEC,OAAOu7B,UACT78B,EAAK+uE,SAAS7+C,SAASv5B,SAASsa,MAAM5f,KAClCU,KAAMsP,EAAEgrB,EAAEC,OAAS,EACnB5zB,IAAK2I,EAAEoJ,EAAE6hB,OAAS,EAClBj6B,MAAO,EACPC,OAAQ,IAEP68E,GACDnvE,EAAKuyC,QAET/4B,EAASA,EAAO9e,IAAIsF,EAAK+kB,cAAcvL,IACnCirC,IACAzkD,EAAKgwE,eAAex2D,GAAQ,GACxB21D,GACA31D,EAAO9lB,SAASm7E,MAI5B1xC,MAAO,SAAU97B,GACb,GAAIrB,GAAO5G,KAAMq2D,GACT19D,KAAMsP,EAAEgrB,EAAEwN,cAAgBx4B,EAAEgrB,EAAEvX,SAAWzT,EAAEgrB,EAAEvX,SAAWzT,EAAEgrB,EAAEwN,cAC5DnhC,IAAK2I,EAAEoJ,EAAEovB,cAAgBx4B,EAAEoJ,EAAEqK,SAAWzT,EAAEoJ,EAAEqK,SAAWzT,EAAEoJ,EAAEovB,cAC3DxnC,MAAO4F,EAAIoJ,EAAEgrB,EAAE4N,cACf3nC,OAAQ2F,EAAIoJ,EAAEoJ,EAAEwvB,cAExBj6B,GAAK+uE,SAAS19E,IAAIo+D,GAClBzvD,EAAKiwE,uBAAuBxgB,EAAUpuD,EAAE0Q,MAAMo9D,SAAW9tE,EAAE0Q,MAAMq9D,SACjE/tE,EAAE9D,kBAEN8/B,KAAM,WAAA,GAIE7jB,GAHAxZ,EAAO5G,IACX4G,GAAK+uE,SAASztD,SACdthB,EAAK2vE,UAAU3vE,EAAK7O,QAAQuvB,KAAK1gB,EAAKxG,QAAQyD,OAAS,IAAM4xE,IAAc9qB,YAAY8qB,GACnFr1D,EAASxZ,EAAK7O,QAAQuvB,KAAK1gB,EAAKxG,QAAQyD,OAAS,IAAM0xE,GAC3Dn1D,EAASA,EAAO9e,IAAIsF,EAAK+kB,cAAcvL,IACvCxZ,EAAKhJ,MAAMwiB,GACXxZ,EAAKgvE,YAAchvE,EAAK6vE,YACxB7vE,EAAKouE,OAAS,MAElB6B,uBAAwB,SAAUxgB,EAAU0f,GACxC,GAAIp4E,GAAK/F,EAA2D8zB,EAASorD,EAA5D12D,EAASpgB,KAAKy2E,YAAY,GAAIjwD,EAAQxmB,KAAKg1E,MAC5D,KAAKr3E,EAAM,EAAG/F,EAAS4uB,EAAM5uB,OAAQ+F,EAAM/F,EAAQ+F,IAC/Cm5E,EAAWtwD,EAAMuC,GAAGprB,GACpB+tB,EAAUorD,EAASx1E,IAAItB,KAAK2rB,cAAcmrD,IACtC5B,EAAU4B,EAAUzgB,GAChBygB,EAASj9E,SAASy7E,GACdS,GAAW31D,IAAW02D,EAAS,IAC/BprD,EAAQi/B,YAAY2qB,GAAUh7E,SAASm7E,GAEnCqB,EAASj9E,SAAS07E,IAAYuB,EAASj9E,SAAS47E,IACxD/pD,EAAQpxB,SAASi7E,GAGjBuB,EAASj9E,SAAS07E,GAClB7pD,EAAQi/B,YAAY4qB,GACbQ,GAAWe,EAASj9E,SAAS47E,IACpC/pD,EAAQi/B,YAAY8qB,GAAan7E,SAASg7E,IAK1D13E,MAAO,SAAUkvC,GACb,GAAIlmC,GAAO5G,KAAM+2E,EAAgB/wE,EAAMY,EAAKgwE,eAAgBhwE,EAC5D,OAAIkmC,IACAA,EAAIpvC,KAAK,WACLq5E,EAAc/2E,QAElB4G,EAAK4vE,QAAQ/8C,GACb,GAEG7yB,EAAK7O,QAAQuvB,KAAK1gB,EAAKxG,QAAQyD,OAAS,IAAMyxE,IAEzDgB,eAAgB,WACZ,GAAiBjrB,GAAbzkD,EAAO5G,IACX,OAAyB,QAArB4G,EAAKgvE,YACEhvE,EAAKgvE,aAEhBvqB,EAAWzkD,EAAKhJ,QACTytD,EAASzzD,OAAS,EAAIyzD,EAAS,GAAKzkD,EAAK7O,QAAQuvB,KAAK1gB,EAAKxG,QAAQyD,QAAQ,KAEtF+yE,eAAgB,SAAU7+E,EAASi/E,GAC/B,GAAIF,GAAWpgF,EAAEqB,GAAU6nD,GAAeo3B,GAAiBh3E,KAAKw2E,QAAQ,UAAYz+E,QAASA,GAC7F++E,GAASnsB,YAAY4qB,GAChB31B,IACDk3B,EAASx8E,SAASg7E,GACdt1E,KAAKI,QAAQy1E,MACbiB,EAAS5zE,KAAKmyE,GAAc,KAIxCmB,QAAS,SAAUtnE,EAAMoZ,GAErB,MADAA,GAAOA,MACAtoB,KAAKgI,QAAQkH,EAAMoZ,IAE9BiuD,UAAW,SAAUx+E,GAKjB,MAJAA,GAAQ4yD,YAAY2qB,GAChBt1E,KAAKI,QAAQy1E,MACb99E,EAAQmL,KAAKmyE,GAAc,GAExBt9E,GAEX8rC,QAAS,SAAU57B,GACXjI,KAAKo2E,gBAAgBnuE,EAAE0Q,MAAMyH,WACxB7lB,GAAQA,IAAS7D,EAAEwB,EAAMqa,kBAAkBxY,GAAGolE,KAC/Cl3D,EAAE9D,kBAIdiyE,gBAAiB,SAAUh2D,GACvB,OAAI1pB,EAAE0pB,GAAQrmB,GAAGolE,KACbn/D,KAAK+gC,WAAW/V,SAChBhrB,KAAKy2E,YAAc,MACZ,IAIfQ,iBAAkB,WACdj3E,KAAK+gC,WAAW/V,UAEpBmuB,MAAO,WACH,GAAI3yB,GAAQxmB,KAAKjI,QAAQuvB,KAAKtnB,KAAKI,QAAQyD,OAAS,IAAMyxE,EAC1Dt1E,MAAKu2E,UAAU/vD,IAEnB6vD,YAAa,SAAUpnE,EAAOtX,GAC1B,GAAiBgG,GAAKw5D,EAAK3wC,EAAvB5f,EAAO5G,IAkBX,KAjBA4G,EAAKuyC,QACDvyC,EAAK7O,QAAQH,OAAS,IACtB4uB,EAAQ5f,EAAKxG,QAAQ82E,mBAEpB1wD,GAAUA,EAAM5uB,SACjB4uB,EAAQ5f,EAAK7O,QAAQuvB,KAAK1gB,EAAKxG,QAAQyD,SAE3CoL,EAAQvY,EAAEuM,QAAQvM,EAAEuY,GAAO,GAAIuX,GAC/B7uB,EAAMjB,EAAEuM,QAAQvM,EAAEiB,GAAK,GAAI6uB,GACvBvX,EAAQtX,IACRw/D,EAAMloD,EACNA,EAAQtX,EACRA,EAAMw/D,GAELvwD,EAAKxG,QAAQu2E,cACdh/E,GAAOiP,EAAK7O,QAAQH,OAAS,GAE5B+F,EAAMsR,EAAOtR,GAAOhG,EAAKgG,IAC1BiJ,EAAKgwE,eAAepwD,EAAM7oB,GAE9BiJ,GAAK4vE,QAAQ/8C,IAEjB3T,QAAS,WACL,GAAIlf,GAAO5G,IACXgF,GAAOf,GAAG6hB,QAAQ3d,KAAKvB,GACvBA,EAAK7O,QAAQ6xB,IAAIi1C,GACjBj4D,EAAKm6B,WAAWjb,UAChBlf,EAAK+uE,SAAW/uE,EAAKgvE,YAAchvE,EAAK7O,QAAU6O,EAAKm6B,WAAa,QAG5Eq0C,EAAW7yE,aAAe,SAAU40E,GAChC,GAAIC,GAAsC,gBAAfD,IAA2BA,EAAWr6E,aACjE,QACIq5D,SAAUihB,GAAiBA,EAAcl5E,QAAQ,eACjD2xC,KAAMunC,GAAiBA,EAAcl5E,QAAQ,aAYrDhG,EAAMmpB,GAAG8G,OAAOitD,IAClBz+E,OAAOuB,MAAM2sB,QACRluB,OAAOuB,OACE,kBAAVzB,SAAwBA,OAAOgiC,IAAMhiC,OAAS,SAAUiiC,EAAIC,EAAIC,IACrEA,GAAMD,OAEV,SAAUniC,EAAGC,QACVA,OAAO,gBAAiB,cAAeD,IACzC,WA6HE,MArHC,UAAUE,EAAGE,GAAb,GACOsB,GAAQvB,OAAOuB,MAAO8M,EAAS9M,EAAMmpB,GAAGrc,OAAQgB,EAAQtP,EAAEsP,MAAO2b,EAAOzpB,EAAMypB,KAAM01D,EAAQ,QAASC,EAAU,WAAYC,EAAc,gBAAiBC,EAAkB,oBAAqB3Y,EAAK,eAAgB4Y,EAAW,WAAYC,EAAgB,mBAAoBC,EAAe,kBAAmBC,EAAgB,mBACnUC,EAAS7yE,EAAOtE,QAChBC,KAAM,SAAU5I,EAASqI,GACrB,GAAIwG,GAAO5G,IACXgF,GAAOf,GAAGtD,KAAKwH,KAAKvB,EAAM7O,EAASqI,GACnCrI,EAAU6O,EAAKvN,QAAUuN,EAAK7O,QAC9BqI,EAAUwG,EAAKxG,QACfrI,EAAQuC,SAASg9E,GAASp0E,KAAK,OAAQ,UACvC9C,EAAQqf,OAASrf,EAAQqf,SAAW1nB,EAAQmL,KAAKu0E,GACjD7wE,EAAK6Y,OAAOrf,EAAQqf,QACpB7Y,EAAKqe,YACLre,EAAKkxE,YACL//E,EAAQ2N,GAAG2xE,EAAQxY,EAAI74D,EAAMY,EAAKs9B,OAAQt9B,IAAOlB,GAAG,QAAUm5D,EAAI74D,EAAMY,EAAKmxE,OAAQnxE,IAAOlB,GAAG,OAASm5D,EAAI74D,EAAMY,EAAKoxE,MAAOpxE,IAAOlB,GAAG,UAAYm5D,EAAI74D,EAAMY,EAAKqxE,SAAUrxE,IAAOlB,GAAG,QAAUm5D,EAAI74D,EAAMY,EAAKsxE,OAAQtxE,IACxN1O,EAAM0uB,OAAOhgB,IAEjBkf,QAAS,WACL,GAAIlf,GAAO5G,IACX4G,GAAKvN,QAAQuwB,IAAIi1C,GACjB75D,EAAOf,GAAG6hB,QAAQ3d,KAAKvB,IAE3Bc,QAAS2vE,GACTj3E,SACI8O,KAAM,SACNipE,KAAM,GACNC,eAAgB,GAChBC,SAAU,GACV54D,QAAQ,GAEZ64D,gBAAiB,WACb,MAAqD,UAA9Ct4E,KAAKjI,QAAQg5C,KAAK,WAAWj0C,eAExConC,OAAQ,SAAUj8B,GACVjI,KAAKI,QAAQqf,QACTzf,KAAKgI,QAAQqvE,GAAS1+D,MAAO1Q,KAC7BA,EAAE9D,kBAId4zE,OAAQ,WACA/3E,KAAKI,QAAQqf,QACbzf,KAAKjI,QAAQuC,SAASq9E,IAG9BK,MAAO,WACHh4E,KAAKjI,QAAQ4yD,YAAYgtB,IAE7BM,SAAU,SAAUhwE,GAChB,GAAIrB,GAAO5G,IACN4G,GAAK0xE,mBACFrwE,EAAEmuB,SAAWzU,EAAKK,OAAS/Z,EAAEmuB,SAAWzU,EAAKa,WACzCva,EAAEmuB,SAAWzU,EAAKa,WAClBva,EAAE9D,iBACEyC,EAAKxG,QAAQqf,QACb7Y,EAAK7O,QAAQuC,SAASs9E,IAG9BhxE,EAAKs9B,OAAOj8B,KAIxBiwE,OAAQ,WACJl4E,KAAKjI,QAAQ4yD,YAAYitB,IAE7BE,UAAW,WACP,GAA4JS,GAAMC,EAAKC,EAAnK7xE,EAAO5G,KAAMjI,EAAU6O,EAAK7O,QAASqI,EAAUwG,EAAKxG,QAAS+3E,EAAO/3E,EAAQ+3E,KAAMC,EAAiBh4E,EAAQg4E,eAAgBC,EAAWj4E,EAAQi4E,UAC9ID,GAAkBC,GAAYF,KAC9BM,GAAU,EACV1gF,EAAQ+kE,WAAWj5D,OAAO,WACtB,OAAQnN,EAAEsJ,MAAMnG,SAAS,cAAgBnD,EAAEsJ,MAAMnG,SAAS,YAAcnD,EAAEsJ,MAAMnG,SAAS,aAC1F6D,KAAK,SAAUC,EAAKc,IACA,GAAfA,EAAGyoB,UAAgC,GAAfzoB,EAAGyoB,UAAiBxwB,EAAEu7B,KAAKxzB,EAAG0zB,WAAWv6B,OAAS,KACtE6gF,GAAU,KAId1gF,EAAQuC,SADRm+E,EACiBlB,EAEAC,IAGrBW,GACAI,EAAOxgF,EAAQ4C,SAAS,eAAevD,QAClCmhF,EAAK,KACNA,EAAO7hF,EAAE,gCAAgCuxB,UAAUlwB,IAEvDwgF,EAAKj+E,SAAS,OAAS69E,IAChBC,GACPG,EAAOxgF,EAAQ4C,SAAS,iBAAiBvD,QACpCmhF,EAAK,KACNA,EAAO7hF,EAAE,kCAAkCuxB,UAAUlwB,IAEzDwgF,EAAKj+E,SAAS89E,IACPC,IACPG,EAAMzgF,EAAQ4C,SAAS,eAAevD,QACjCohF,EAAI,KACLA,EAAM9hF,EAAE,sCAAsCuxB,UAAUlwB,IAE5DygF,EAAIt1E,KAAK,MAAOm1E,KAGxB54D,OAAQ,SAAUA,GACd,GAAI7Y,GAAO5G,KAAMjI,EAAU6O,EAAK7O,OAC5B0nB,KAAW7oB,IACX6oB,GAAS,GAEbA,IAAWA,EACX7Y,EAAKxG,QAAQqf,OAASA,EACtB1nB,EAAQqJ,YAAYs2E,GAAgBj4D,GAAQvc,KAAK,iBAAkBuc,GAAQvc,KAAKu0E,GAAWh4D,EAC3F,KACI1nB,EAAQS,OACV,MAAOkgF,OAIjBxgF,GAAMmpB,GAAG8G,OAAO0vD,IAClBlhF,OAAOuB,MAAM2sB,QACRluB,OAAOuB,OACE,kBAAVzB,SAAwBA,OAAOgiC,IAAMhiC,OAAS,SAAUiiC,EAAIC,EAAIC,IACrEA,GAAMD,OAEV,SAAUniC,EAAGC,QACVA,OAAO,eAAgB,cAAeD,IACxC,WA4SE,MApSC,UAAUE,EAAGE,GAEV,QAASu/E,GAAO1zE,EAAU9E,EAAKy3B,EAAMujD,EAASt+C,GAC1C,MAAO53B,IACH9E,IAAKA,EACLy3B,KAAMA,EACNnzB,GAAI/J,EAAM+J,GACV02E,QAASA,EACTt+C,MAAOA,GAAS,KAGxB,QAAS89C,GAAKl6E,EAAWm3B,EAAMwjD,GAC3B,MAAOC,IACH56E,UAAWA,EAAU1G,UAAU,GAC/B69B,KAAMA,EACNwjD,cAAeA,GAAiB,KAGxC,QAASxwC,GAAOrwC,EAASgM,EAAUmjC,EAAM5jC,GACrCvL,EAAQuvB,KAAKvjB,GAAUnK,SAASsJ,KAAKhL,EAAMgL,KAAK,QAASgkC,GAAMhkC,KAAK,eAAgB9B,YAAY,mBAAoBkC,GAExH,QAASlM,GAAMW,EAASmvC,GACpBkB,EAAOrwC,EAAS+gF,EAAO,EAAG5xC,GAAQ,GAEtC,QAASlL,GAAKjkC,EAASmvC,GACnBkB,EAAOrwC,EAASghF,EAAMn6E,KAAKlG,IAAI,EAAGwuC,EAAO,GAAIA,GAAQ,GAEzD,QAASka,GAAKrpD,EAASmvC,EAAMma,GACzBjZ,EAAOrwC,EAASihF,EAAMp6E,KAAKoT,IAAIqvC,EAAYna,EAAO,GAAIA,GAAQma,GAElE,QAAS/xB,GAAKv3B,EAASmvC,EAAMma,GACzBjZ,EAAOrwC,EAASkhF,EAAM53B,EAAYna,GAAQma,GA/BjD,GACOnpD,GAAQvB,OAAOuB,MAAOmpB,EAAKnpB,EAAMmpB,GAAIrc,EAASqc,EAAGrc,OAAQgB,EAAQtP,EAAEsP,MAAO8yE,EAAQ,cAAeG,EAAO,cAAeF,EAAO,eAAgBC,EAAO,eAAgBv/C,EAAS,SAAUolC,EAAK,cAAewY,EAAQ,QAAS6B,EAAU,UAAWzB,EAAW,WAAY0B,EAAY,OAAQC,EAAmB1iF,EAAE6G,SAASmC,iBAAkBm5E,EAAe3gF,EAAMuK,SAAS,oJAgC3W42E,EAAQr0E,EAAOtE,QACfC,KAAM,SAAU5I,EAASqI,GAAnB,GACe8mC,GAAMma,EA8CXi4B,EAMAC,EApDR3yE,EAAO5G,IACXgF,GAAOf,GAAGtD,KAAKwH,KAAKvB,EAAM7O,EAASqI,GACnCA,EAAUwG,EAAKxG,QACfwG,EAAKge,WAAa1sB,EAAMsD,KAAKE,WAAW2sC,OAAOjoC,EAAQwkB,YACvDhe,EAAK4yE,aAAethF,EAAMuK,SAASmE,EAAKxG,QAAQo5E,cAChD5yE,EAAK6yE,eAAiBvhF,EAAMuK,SAASmE,EAAKxG,QAAQq5E,gBAClD7yE,EAAK8yE,oBAAsBxhF,EAAMuK,SAASmE,EAAKxG,QAAQs5E,qBACvDxyC,EAAOtgC,EAAKsgC,OACZma,EAAaz6C,EAAKy6C,aAClBz6C,EAAK+yE,gBAAkB3zE,EAAMY,EAAK4Q,QAAS5Q,GAC3CA,EAAKge,WAAWxd,KAAKqyB,EAAQ7yB,EAAK+yE,iBAClC/yE,EAAKgzE,UAAY1hF,EAAM4zB,cAAcqtD,EAAWjhF,EAAMyrB,QAClDvjB,EAAQy5E,eACHjzE,EAAK7O,QAAQuvB,KAAKwxD,GAAOlhF,SAC1BgP,EAAK7O,QAAQ+rD,OAAOq0B,EAAKW,EAAO14E,EAAQshB,SAAStqB,MAAO,kBACxDA,EAAMwP,EAAK7O,QAASmvC,EAAMma,IAEzBz6C,EAAK7O,QAAQuvB,KAAKyxD,GAAMnhF,SACzBgP,EAAK7O,QAAQ+rD,OAAOq0B,EAAKY,EAAM34E,EAAQshB,SAAS01C,WAChDp7B,EAAKp1B,EAAK7O,QAASmvC,EAAMma,KAG7BjhD,EAAQu4E,UACR/xE,EAAK2pC,KAAO3pC,EAAK7O,QAAQuvB,KAAK,oBACzB1gB,EAAK2pC,KAAK34C,SACXgP,EAAK2pC,KAAO75C,EAAE,0CAA0CogC,SAASlwB,EAAK7O,WAG1EqI,EAAQN,QACH8G,EAAK7O,QAAQuvB,KAAK,kBAAkB1vB,QACrCgP,EAAK7O,QAAQ+rD,OAAO,uCAAyC1jD,EAAQshB,SAASwlB,KAAO,4BAA8BhvC,EAAM6Q,OAAO3I,EAAQshB,SAASo4D,GAAIz4B,GAAc,WAEvKz6C,EAAK7O,QAAQ2N,GAAGwzE,EAAUra,EAAI,uBAAwB74D,EAAMY,EAAKqxE,SAAUrxE,KAE3ExG,EAAQy5E,eACHjzE,EAAK7O,QAAQuvB,KAAK0xD,GAAMphF,SACzBgP,EAAK7O,QAAQ+rD,OAAOq0B,EAAKa,EAAM54E,EAAQshB,SAAS0/B,OAChDA,EAAKx6C,EAAK7O,QAASmvC,EAAMma,IAExBz6C,EAAK7O,QAAQuvB,KAAK2xD,GAAMrhF,SACzBgP,EAAK7O,QAAQ+rD,OAAOq0B,EAAKc,EAAM74E,EAAQshB,SAAS4N,KAAM,iBACtDA,EAAK1oB,EAAK7O,QAASmvC,EAAMma,KAG7BjhD,EAAQk5E,YACH1yE,EAAK7O,QAAQuvB,KAAK,kBAAkB1vB,SACjC0hF,EAAYl5E,EAAQk5E,UAAU1hF,OAASwI,EAAQk5E,WAC/C,MACA,EACA,GACA,IAEAC,EAAY7iF,EAAEsc,IAAIsmE,EAAW,SAAUv7E,GACvC,MAAIA,GAAKjB,aAAsC,QAAvBiB,EAAKjB,cAClB,uBAA2BsD,EAAQshB,SAASq4D,SAAW,YAE3D,WAAah8E,EAAO,cAE/BrH,EAAE,gDAAkD0J,EAAQshB,SAASs4D,aAAe,WAAWljD,SAASlwB,EAAK7O,SAASuvB,KAAK,UAAU5kB,KAAK62E,EAAUriF,KAAK,KAAKS,MAAMm/B,SAASlwB,EAAK7O,UAEtL6O,EAAK7O,QAAQuvB,KAAK,yBAAyBwlB,IAAIlmC,EAAKqgC,YAChD/uC,EAAMmpB,GAAG44D,cACTrzE,EAAK7O,QAAQuvB,KAAK,yBAAyBttB,OAAOkgF,oBAEtDtzE,EAAK7O,QAAQ2N,GAAG+zB,EAASolC,EAAI,wBAAyB74D,EAAMY,EAAK23C,QAAS33C,KAE1ExG,EAAQoX,UACH5Q,EAAK7O,QAAQuvB,KAAK,oBAAoB1vB,QACvCgP,EAAK7O,QAAQ+rD,OAAO,qDAAuD1jD,EAAQshB,SAASlK,QAAU,iBAAmBpX,EAAQshB,SAASlK,QAAU,iDAExJ5Q,EAAK7O,QAAQ2N,GAAG2xE,EAAQxY,EAAI,mBAAoB74D,EAAMY,EAAKuzE,cAAevzE,KAE1ExG,EAAQmtB,OACH3mB,EAAK7O,QAAQuvB,KAAK,iBAAiB1vB,QACpCgP,EAAK7O,QAAQ+rD,OAAO,0CAG5Bl9C,EAAK7O,QAAQ2N,GAAG2xE,EAAQxY,EAAI,IAAK74D,EAAMY,EAAKs9B,OAAQt9B,IAAOtM,SAAS,qCACpEsM,EAAK7O,QAAQ2N,GAAG2xE,EAAQxY,EAAI,kBAAmB74D,EAAMY,EAAKwzE,cAAexzE,IACrExG,EAAQ4oD,UACRpiD,EAAK4Q,UAETtf,EAAM0uB,OAAOhgB,IAEjBkf,QAAS,WACL,GAAIlf,GAAO5G,IACXgF,GAAOf,GAAG6hB,QAAQ3d,KAAKvB,GACvBA,EAAK7O,QAAQ6xB,IAAIi1C,GACjBj4D,EAAKge,WAAW/c,OAAO4xB,EAAQ7yB,EAAK+yE,iBACpC/yE,EAAK+yE,gBAAkB,KACvBzhF,EAAM4tB,QAAQlf,EAAK7O,SACnB6O,EAAK7O,QAAU6O,EAAK2pC,KAAO,MAE/B7oC,QAAS+xB,GACTr5B,SACI8O,KAAM,QACNuqE,eAAgB,yDAChBC,oBAAqB,kFACrBF,aAAc,qIACda,YAAa,GACbrxB,UAAU,EACV2vB,SAAS,EACTprD,MAAM,EACNztB,OAAO,EACP+5E,cAAc,EACdP,WAAW,EACX9hE,SAAS,EACTkK,UACIq4D,SAAU,MACV16D,QAAS,yBACTywB,MAAO,sBACP5I,KAAM,OACN4yC,GAAI,SACJE,aAAc,iBACd5iF,MAAO,uBACPggE,SAAU,0BACVhW,KAAM,sBACN9xB,KAAM,sBACN9X,QAAS,UACT8iE,UAAW,eAGnBC,cAAe,SAAU31D,GACrB,GAAIhe,GAAO5G,IACX4G,GAAKge,WAAW/c,OAAO4xB,EAAQ7yB,EAAK+yE,iBACpC/yE,EAAKge,WAAahe,EAAKxG,QAAQwkB,WAAaA,EAC5CA,EAAWxd,KAAKqyB,EAAQ7yB,EAAK+yE,iBACzB/yE,EAAKxG,QAAQ4oD,UACbpkC,EAAWs8B,SAGnB1pC,QAAS,SAAUvP,GAAV,GACYtK,GAAKhG,EAAgB6iF,EA4C9BC,EACAC,EACAtlD,EA9CJxuB,EAAO5G,KAAgBiP,EAAQ,EAAai4B,EAAOtgC,EAAKsgC,OAAQxkC,EAAO,GAAItC,EAAUwG,EAAKxG,QAAS6mC,EAAWrgC,EAAKqgC,WAAYgB,EAAQrhC,EAAKge,WAAWqjB,QAASoZ,EAAaz6C,EAAKy6C,aAAcm4B,EAAe5yE,EAAK4yE,aAAca,EAAcj6E,EAAQi6E,WAE5P,IADAjB,EAAiBvxE,OAAOjB,EAAKgzE,UAAWljF,EAAEsP,MAAMY,EAAK+zE,UAAW/zE,KAC5DqB,GAAiB,cAAZA,EAAE0uB,OAAX,CAGA,GAAIv2B,EAAQu4E,QAAS,CASjB,IARIzxC,EAAOmzC,IACPG,EAAWtzC,EAAOmzC,EAClBprE,EAAqB,IAAburE,EAAiBtzC,EAAOmzC,EAAc,EAAInzC,EAAOszC,EAAW,GAExE7iF,EAAMiH,KAAKoT,IAAI/C,EAAQorE,EAAc,EAAGh5B,GACpCpyC,EAAQ,IACRvM,GAAQyzE,EAAOqD,EAAcvqE,EAAQ,EAAG,OAAO,EAAO7O,EAAQshB,SAAS44D,YAEtE38E,EAAMsR,EAAOtR,GAAOhG,EAAKgG,IAC1B+E,GAAQyzE,EAAOx4E,GAAOupC,EAAOtgC,EAAK6yE,eAAiBD,EAAc77E,EAAKA,GAAK,EAE3EhG,GAAM0pD,IACN3+C,GAAQyzE,EAAOqD,EAAc77E,EAAK,OAAO,EAAOyC,EAAQshB,SAAS44D,YAExD,KAAT53E,IACAA,EAAOkE,EAAK6yE,gBAAiBrkD,KAAM,KAEvC1yB,EAAO1C,KAAK05E,qBAAsBtkD,KAAM8R,IAAUxkC,EAClDkE,EAAK2pC,KAAKoa,YAAY,oBAAoBjoD,KAAKA,GAE/CtC,EAAQmtB,OAEJ7qB,EADAulC,EAAQ,EACD/vC,EAAM6Q,OAAO3I,EAAQshB,SAASrC,QAASzgB,KAAKoT,KAAKk1B,EAAO,GAAKD,EAAW,EAAGgB,GAAQrpC,KAAKoT,IAAIk1B,EAAOD,EAAUgB,GAAQA,GAErH7nC,EAAQshB,SAASouB,MAE5BlpC,EAAK7O,QAAQuvB,KAAK,iBAAiB5kB,KAAKA,IAExCtC,EAAQN,OACR8G,EAAK7O,QAAQuvB,KAAK,kBAAkB5kB,KAAKkE,EAAKxG,QAAQshB,SAASwlB,KAAO,wCAA0CA,EAAO,KAAOhvC,EAAM6Q,OAAO3I,EAAQshB,SAASo4D,GAAIz4B,IAAa/5B,KAAK,SAASwlB,IAAI5F,GAAMhkC,KAAKu0E,EAAUxvC,EAAQ,GAAG7mC,YAAY,mBAAoB6mC,EAAQ,GAEvQ7nC,EAAQy5E,eACRziF,EAAMwP,EAAK7O,QAASmvC,EAAMma,GAC1BrlB,EAAKp1B,EAAK7O,QAASmvC,EAAMma,GACzBD,EAAKx6C,EAAK7O,QAASmvC,EAAMma,GACzB/xB,EAAK1oB,EAAK7O,QAASmvC,EAAMma,IAEzBjhD,EAAQk5E,YACJmB,EAAS7zE,EAAK7O,QAAQuvB,KAAK,sCAAwC1vB,OAAS,EAC5E8iF,EAAYD,GAAUxzC,IAAajnC,KAAK4kB,WAAWqjB,QACnD7S,EAAO6R,EACPyzC,IACAzzC,EAAW,MACX7R,EAAOh1B,EAAQshB,SAASq4D,UAE5BnzE,EAAK7O,QAAQuvB,KAAK,yBAAyBwlB,IAAI7F,GAAU/jC,KAAK,aAAc+jC,GAAUpjC,OAAO,IAAM3L,EAAMgL,KAAK,QAAU,kBAAkBg3E,kBAAkB,QAASjzC,GAAUizC,kBAAkB,OAAQ9kD,MAGjN6iD,SAAU,SAAUhwE,GAChB,GAAIA,EAAEmuB,UAAYl+B,EAAMypB,KAAKK,MAAO,CAChC,GAAIliB,GAAQE,KAAKjI,QAAQuvB,KAAK,kBAAkBA,KAAK,SAAU4f,EAAO70B,SAASvS,EAAMgtC,MAAO,KACxFr3B,MAAMyxB,IAASA,EAAO,GAAKA,EAAOlnC,KAAKqhD,gBACvCna,EAAOlnC,KAAKknC,QAEhBpnC,EAAMgtC,IAAI5F,GACVlnC,KAAKknC,KAAKA,KAGlBizC,cAAe,SAAUlyE,GACrBA,EAAE9D,iBACFnE,KAAK4kB,WAAWgjB,QAEpB2W,QAAS,SAAUt2C,GAAV,GACDrK,GAAQqK,EAAE22B,cAAchhC,MACxBqpC,EAAW50B,SAASzU,EAAO,IAC3BgnB,EAAa5kB,KAAK4kB,UACjBnP,OAAMwxB,GAE8B,QAA7BrpC,EAAQ,IAAId,eACpB8nB,EAAWqiB,SAASriB,EAAWqjB,SAF/BrjB,EAAWqiB,SAASA,IAK5BmzC,cAAe,WACX,GAAIxzE,GAAO5G,IACP4G,GAAK2pC,KAAK12C,SAAS,oBACnBu/E,EAAiBvxE,OAAOjB,EAAKgzE,UAAWljF,EAAEsP,MAAMY,EAAK+zE,UAAW/zE,IAEhEwyE,EAAiBhyE,KAAKR,EAAKgzE,UAAWljF,EAAEsP,MAAMY,EAAK+zE,UAAW/zE;AAElEA,EAAK2pC,KAAKnvC,YAAY,qBAE1Bu5E,UAAW,SAAU1yE,GACjB,GAAIrB,GAAO5G,KAAMogB,EAASloB,EAAM2M,YAAYoD,EACvCvR,GAAEoM,SAAS8D,EAAK2pC,KAAK,GAAInwB,KAC1Bg5D,EAAiBvxE,OAAOjB,EAAKgzE,UAAWljF,EAAEsP,MAAMY,EAAK+zE,UAAW/zE,IAChEA,EAAK2pC,KAAKoa,YAAY,sBAG9BzmB,OAAQ,SAAUj8B,GACd,GAAImY,GAAS1pB,EAAEuR,EAAE22B,cACjB32B,GAAE9D,iBACGic,EAAOrmB,GAAG,sBACXiG,KAAKknC,KAAK9mB,EAAOld,KAAKhL,EAAMgL,KAAK,WAGzCm+C,WAAY,WACR,MAAOziD,MAAK2iD,MAAMvhD,KAAK4kB,WAAWqjB,SAAW,IAAMjoC,KAAKinC,YAAc,KAE1EA,SAAU,WACN,MAAOjnC,MAAK4kB,WAAWqiB,YAAcjnC,KAAK4kB,WAAWqjB,SAEzDf,KAAM,SAAUA,GACZ,MAAIA,KAAStwC,EAOLoJ,KAAK4kB,WAAWqjB,QAAU,EACnBjoC,KAAK4kB,WAAWsiB,OAEhB,GATPlnC,KAAKgI,QAAQ,cAAgBmK,MAAO+0B,MAGxClnC,KAAK4kB,WAAWsiB,KAAKA,GACrBlnC,KAAKgI,QAAQyxB,GAAUtnB,MAAO+0B,KAJ9B,KAcZ7lB,GAAG8G,OAAOkxD,IACZ1iF,OAAOuB,MAAM2sB,QACRluB,OAAOuB,OACE,kBAAVzB,SAAwBA,OAAOgiC,IAAMhiC,OAAS,SAAUiiC,EAAIC,EAAIC,IACrEA,GAAMD,OAEV,SAAUniC,EAAGC,QACVA,OAAO,eAAgB,cAAeD,IACxC,WAkhBE,MA1gBC,UAAUE,EAAGE,GASV,QAASkM,GAAS6kB,EAAWvH,GACzB,SAAKuH,IAAcvH,KAGZuH,IAAcvH,GAAU1pB,EAAEoM,SAAS6kB,EAAWvH,IAb5D,GAwdOw6D,GACAC,EACAC,EAzdA5iF,EAAQvB,OAAOuB,MAAOmpB,EAAKnpB,EAAMmpB,GAAIrc,EAASqc,EAAGrc,OAAQnO,EAAQqB,EAAMrB,MAAOsB,EAAUD,EAAMC,QAAS8G,EAAY/G,EAAM+G,UAAWzF,EAAatB,EAAMuB,YAAaC,EAAcxB,EAAMyB,aAAcohF,EAAO,OAAQC,EAAQ,QAASC,EAAa,aAAcC,EAAW,WAAYC,EAAS,SAAUj5D,EAAO,OAAQE,EAAQ,QAASg5D,EAAM,MAAOC,EAAS,SAAUC,EAAW,WAAYpoB,EAAS,SAAUqoB,EAAO,OAAQC,EAAW,WAAYjoB,EAAW,WAAYkoB,EAAU,UAAWC,EAAU,UAAWnG,EAAS,iBAAkBoG,EAAe,iBAAkBC,EAAqB,uBAAwBC,EAAiB,4CAA6C1C,EAAY,OAAQC,EAAmB1iF,EAAE6G,SAASmC,iBAAkBsG,EAAQtP,EAAEsP,MAAO81E,EAASplF,EAAEC,QAASi1E,EAAS,SAAU9Y,EAAY36D,EAAQC,YAAYH,IAAK42D,EAAYiE,EAAY,YAAapyD,EAAShK,EAAEgK,OAAQm+D,EAAK,cAAevhE,GAC54B,YACA,cACA,eACA,aACA,cACA,eAQJy+E,EAAQ/2E,EAAOtE,QACfC,KAAM,SAAU5I,EAASqI,GACrB,GAAiB47E,GAAbp1E,EAAO5G,IACXI,GAAUA,MACNA,EAAQ/B,QACR+B,EAAQo3D,OAASp3D,EAAQo3D,QAAU6jB,EAAS,IAAMj5D,EAClDhiB,EAAQi2D,SAAWj2D,EAAQi2D,UAAY+kB,EAAM,IAAMh5D,GAEvDpd,EAAOf,GAAGtD,KAAKwH,KAAKvB,EAAM7O,EAASqI,GACnCrI,EAAU6O,EAAK7O,QACfqI,EAAUwG,EAAKxG,QACfwG,EAAKq1E,WAAa77E,EAAQ80E,UAAY90E,EAAQ80E,UAAUj+E,MAAM,QAC9D2P,EAAKgzE,UAAY1hF,EAAM4zB,cAAcqtD,EAAWjhF,EAAMyrB,QACvB,IAA3B/c,EAAKq1E,WAAWrkF,QAChBgP,EAAKq1E,WAAWn0E,KAAKlB,EAAKq1E,WAAW,IAEzCD,EAActlF,EAAEkQ,EAAKxG,QAAQ87E,QAAQjkE,QAAQ,qBAAqBpU,OAAO,sBACzEzD,EAAQ02B,SAAWpgC,EAAEA,EAAE0J,EAAQ02B,UAAU,IAAMklD,EAAY,IAAMz+E,SAASsa,MAC1EjR,EAAK7O,QAAQ+I,OAAOxG,SAAS,2BAA2B8G,YAAY,UAAWhB,EAAQ/B,OAAOpG,KAAMo+D,SAAUilB,IAAYxkD,SAAS12B,EAAQ02B,UAAUpxB,GAAG,aAAem5D,EAAI,WACvKj4D,EAAKu1E,UAAW,IACjBz2E,GAAG,aAAem5D,EAAI,WACrBj4D,EAAKu1E,UAAW,IAEpBv1E,EAAKvN,QAAU3C,IACX0J,EAAQg8E,aAAc,IACtBh8E,EAAQg8E,WACJC,MAAQt8E,YACRu8E,OACIx7E,MAAM,EACNf,cAIZW,EAAON,EAAQg8E,UAAUC,MACrB97E,SAAU,WACNqG,EAAKvN,QAAQpB,KAAMkG,SAAUs9E,IAC7B70E,EAAK+hE,YAAa,EAClB/hE,EAAK66B,SAASy5C,MAGtBx6E,EAAON,EAAQg8E,UAAUE,OACrB/7E,SAAU,WACNqG,EAAK21E,qBAGb31E,EAAK41E,gBAAkB,SAAUv0E,GAC7BrB,EAAK61E,WAAWx0E,IAGhBrB,EAAK81E,aADLvkF,EAAQgf,SAASyC,QACG,SAAU3R,GAC1ByhB,WAAW,WACP9iB,EAAK+e,QAAQ1d,IACd,MAGa,SAAUA,GAC1BrB,EAAK+e,QAAQ1d,IAGjB7H,EAAQu8E,cACRjmF,EAAE0J,EAAQu8E,cAAcj3E,GAAGtF,EAAQw8E,YAAc/d,EAAInoE,EAAEsP,MAAMY,EAAKuZ,OAAQvZ,KAGlFc,QACIqzE,EACAG,EACAF,EACAC,GAEJ76E,SACI8O,KAAM,QACN0tE,YAAa,QACbplB,OAAQ6jB,EAAS,IAAMn5D,EACvBm0C,SAAU+kB,EAAM,IAAMl5D,EACtBg6D,OAAQX,EACRzkD,SAAU,KACVo+C,UAAW,WACX2H,SAAUlmF,OACVmmF,kBAAkB,EAClB/jF,UAAU,EACVgkF,OAAO,EACPC,YACI/jF,MAAO,EACPC,OAAQ,GAEZkjF,WACIC,MACIt8E,QAAS,eACT+zD,YAAY,EACZzzD,SAAU,KAEdi8E,OACIj8E,SAAU,IACVS,MAAM,KAIlBy7E,gBAAiB,WAAA,GACT31E,GAAO5G,KACP0b,EAAW9U,EAAKvN,QAAQmC,KAAKggF,EACjC50E,GAAKvN,QAAQyH,OACT4a,GACA9U,EAAKvN,QAAQpB,IAAIyjB,GAEjB9U,EAAKxG,QAAQ87E,QAAUX,GACvB30E,EAAKq2E,gBAETr2E,EAAKs2E,UAAW,EAChBt2E,EAAK66B,SAASw5C,IAElBn1D,QAAS,WACL,GAAyElsB,GAArEgN,EAAO5G,KAAMI,EAAUwG,EAAKxG,QAASrI,EAAU6O,EAAK7O,QAAQ6xB,IAAIi1C,EACpE75D,GAAOf,GAAG6hB,QAAQ3d,KAAKvB,GACnBxG,EAAQu8E,cACRjmF,EAAE0J,EAAQu8E,cAAc/yD,IAAIi1C,GAE3Bz+D,EAAQ28E,QACT3D,EAAiBvxE,OAAOjB,EAAKgzE,UAAWhzE,EAAK41E,iBAC7C51E,EAAKu2E,eAAc,IAEvBjlF,EAAM4tB,QAAQlf,EAAK7O,QAAQ4C,YAC3B5C,EAAQguB,aACJ3lB,EAAQ02B,SAAS,KAAOv5B,SAASsa,OACjCje,EAAS7B,EAAQ6B,OAAO,0BACpBA,EAAO,GACPA,EAAOsuB,SAEPnwB,EAAQmwB,WAIpBm0D,KAAM,SAAUppD,EAAG5hB,GACf,GAIuD+qE,GAAW/iF,EAJ9DuN,EAAO5G,KAAMo9E,GACT9mB,SAAU7gD,MAAMpD,SAAShB,EAAG,KAC5B4hB,EAAGA,EACH5hB,EAAGA,GACJtZ,EAAU6O,EAAK7O,QAASqI,EAAUwG,EAAKxG,QAA6B87E,EAASxlF,EAAE0J,EAAQ87E,QAAS56D,EAASvpB,EAAQ,IAAMA,EAAQ8B,SAAS,YAC/I,KAAK+M,EAAKpD,UAAW,CAOjB,GANIpD,EAAQ08E,mBACJx7D,GAAuB,aAAbhkB,EAAO,IACjBA,EAAOwU,QAEX/Z,EAAQE,IAAIC,EAAMiF,kBAAkB++E,EAAO,GAAI5+E,KAE/CvF,EAAQyD,KAAK,cAAgBoL,EAAK66B,SAASs5C,GAC3C,MAEJn0E,GAAK+hE,YAAa,EACbvoE,EAAQ28E,QACT3D,EAAiBvxE,OAAOjB,EAAKgzE,UAAWhzE,EAAK41E,iBAAiBp1E,KAAKR,EAAKgzE,UAAWhzE,EAAK41E,iBACxF51E,EAAKu2E,eAAc,GACnBv2E,EAAKu2E,eAAc,IAEvBv2E,EAAKvN,QAAUA,EAAUnB,EAAMY,KAAKf,EAASqI,EAAQrH,UAAUd,KAC3DkG,SAAU+0D,EACV7zC,QAAS,QACTg3C,SAAUilB,IAEVnjF,EAAQgf,SAASyC,SACjBvgB,EAAQpB,IAAI42D,EAAW,iBAE3Bx1D,EAAQpB,IAAIs7D,GACR78D,EAAE0J,EAAQ02B,UAAU,IAAMv5B,SAASsa,MACnCxe,EAAQpB,IAAImjF,EAAK,YAErBx0E,EAAKy2E,QAAUz2E,EAAKupE,UAAUiN,GAC9BhB,EAAYx1E,EAAK02E,iBACbl9E,EAAQ87E,QAAUX,GAClB30E,EAAK22E,cAAcnB,GAEvBrkF,EAAQyD,KAAKkgF,EAASU,EAAUr8E,SAAS4f,WAAU,GAAMI,aAAaq8D,KAG9EoB,UAAW,SAAUlnB,GAAV,GAC0Dj9D,GAoB7D+F,EApBAwH,EAAO5G,KAAMjI,EAAU6O,EAAK7O,QAASqI,EAAUwG,EAAKxG,QAAkB87E,EAASxlF,EAAE0J,EAAQ87E,QAAS56D,EAASvpB,EAAQ,IAAMA,EAAQ8B,SAAS,YAqB9I,OApBIuG,GAAQ08E,mBACJx7D,GAAuB,aAAbhkB,EAAO,IACjBA,EAAOwU,QAEX/Z,EAAQE,IAAIC,EAAMiF,kBAAkB++E,EAAO,GAAI5+E,KAEnDsJ,EAAKvN,QAAUA,EAAUnB,EAAMY,KAAKf,EAASqI,EAAQrH,UAAUd,KAC3DkG,SAAU+0D,EACV7zC,QAAS,QACTg3C,SAAUilB,IAEVnjF,EAAQgf,SAASyC,SACjBvgB,EAAQpB,IAAI42D,EAAW,iBAE3Bx1D,EAAQpB,IAAIs7D,GACR78D,EAAE0J,EAAQ02B,UAAU,IAAMv5B,SAASsa,MACnCxe,EAAQpB,IAAImjF,EAAK,YAErBx0E,EAAKupE,UAAU7Z,OACXl3D,EAAS/F,EAAQ+F,UAEjBnG,MAAOf,EAAMuB,YAAYJ,GACzBH,OAAQhB,EAAMyB,aAAaN,GAC3BV,KAAMyG,EAAOzG,KACb2G,IAAKF,EAAOE,MAGpBg+E,eAAgB,WACZ,GAAIlB,GAAY17E,GAAO,KAAUV,KAAKI,QAAQg8E,UAAUC,KAExD,OADAD,GAAUr8E,QAAU7H,EAAM2H,aAAau8E,EAAUr8E,QAASC,KAAKq9E,SACxDjB,GAEXa,cAAe,WAAA,GACPf,GAASxlF,EAAEsJ,KAAKI,QAAQ87E,QACxBt2C,IAAcs2C,EAAOh5E,KAAK,UAAY,IAAI5K,MAAMsjF,KAChD,GACA,SACD,GACC6B,EAAW9B,EAAe,IAAM/1C,CACpCs2C,GAAOvxB,YAAY8yB,GAAU9iF,SAASkhF,GAAgBlxB,YAAY4qB,GAAQ5qB,YAAY8yB,GACtFz9E,KAAKjI,QAAQ4yD,YAAYgxB,EAAe,IAAMzjF,EAAM0M,WAAWghC,GAAWtlC,UAE9Ei9E,cAAe,SAAUnB,GAAV,GACPx2C,GAAYw2C,EAAUr8E,QAAQu3D,QAAU8kB,EAAUr8E,QAAQu3D,QAAQ1xB,UAAY,OAC9E63C,EAAW9B,EAAe,IAAM/1C,CACpClvC,GAAEsJ,KAAKI,QAAQ87E,QAAQ5hF,SAASmjF,GAAU9iF,SAASkhF,GAAgBvhF,SAASi7E,GAAQj7E,SAASmjF,GAC7Fz9E,KAAKjI,QAAQuC,SAASqhF,EAAe,IAAMzjF,EAAM0M,WAAWghC,GAAWtlC,UAE3E+1D,SAAU,WACFr2D,KAAKwD,YACLxD,KAAKq9E,QAAUr9E,KAAKmwE,cAG5BhwD,OAAQ,WACJ,GAAIvZ,GAAO5G,IACX4G,GAAKA,EAAKpD,UAAYw3E,EAAQD,MAElCv3E,QAAS,WACL,MAAOxD,MAAKjI,QAAQgC,GAAG,IAAM0hF,IAEjCa,MAAO,SAAUoB,GACb,GAAyC5kF,GAAMsjF,EAAWuB,EAAaC,EAAnEh3E,EAAO5G,KAAMI,EAAUwG,EAAKxG,OAChC,IAAIwG,EAAKpD,UAAW,CAGhB,GAFA1K,EAAO8N,EAAKvN,QAAQ,GAAKuN,EAAKvN,QAAUnB,EAAMY,KAAK8N,EAAK7O,SAAS+I,OACjE8F,EAAKu2E,eAAc,GACfv2E,EAAKs2E,UAAYt2E,EAAK66B,SAASu5C,GAE/B,MADAp0E,GAAKu2E,eAAc,GACnB,CAEJv2E,GAAK7O,QAAQuvB,KAAK,YAAY5pB,KAAK,WAC/B,GAAIkJ,GAAOlQ,EAAEsJ,MAAO69E,EAAQj3E,EAAKpL,KAAK,aAClCqiF,IACAA,EAAMvB,MAAMoB,KAGpBtE,EAAiBvxE,OAAOjB,EAAKgzE,UAAWhzE,EAAK41E,iBACzCkB,EACAtB,GACIt7E,MAAM,EACNf,aAGJq8E,EAAY17E,GAAO,KAAUN,EAAQg8E,UAAUE,OAC/CqB,EAAc/2E,EAAK7O,QAAQyD,KAAKkgF,GAChCkC,EAAexB,EAAUr8E,SACpB69E,IAAiB1lF,EAAM6F,KAAK6/E,IAAiBD,GAAezlF,EAAM6F,KAAK4/E,KACxEvB,EAAUr8E,QAAU49E,EACpBvB,EAAU97E,SAAU,GAExBsG,EAAKs2E,UAAW,GAEpBt2E,EAAK7O,QAAQ4nB,WAAU,GACvB7mB,EAAKb,KAAMkG,SAAU+0D,IACrBtsD,EAAK7O,QAAQgoB,aAAaq8D,GACtBsB,GACA92E,EAAK21E,oBAIjB96C,SAAU,SAAUq8C,GAChB,MAAO99E,MAAKgI,QAAQ81E,GAAM5+E,KAAM4+E,KAEpCn4D,QAAS,SAAU1d,GACf,GAAIrB,GAAO5G,IACP7H,GAAQ8oB,OAAO/iB,QAAQ+J,EAAE/I,YACzB0rB,aAAahkB,EAAKm3E,gBAClBn3E,EAAKm3E,eAAiBr0D,WAAW,WAC7B9iB,EAAKupE,YACLvpE,EAAKm3E,eAAiB,MACvB,OAEEn3E,EAAKu1E,UAAYv1E,EAAK+hE,YAAc/hE,EAAK7O,QAAQ8B,SAAS,sBAC3D+M,EAAK01E,SAIjBa,cAAe,SAAUh9D,GAAV,GACPoI,GAASpI,EAAS,KAAO,MACzBxY,EAAaxP,EAAQ8oB,MACnB9oB,GAAQgf,SAASqD,KAAOriB,EAAQgf,SAASyC,UAC3CjS,GAAc,IAAMikE,GAExB5rE,KAAKg+E,qBAAqBz1D,GAAQqjD,EAAQ5rE,KAAK08E,cAC/CZ,EAAOvzD,GAAQ5gB,EAAY3H,KAAK08E,eAEpCD,WAAY,SAAUx0E,GAClB,GAAIrB,GAAO5G,KAAM2nB,EAAY/gB,EAAK7O,QAAQ,GAAIqI,EAAUwG,EAAKxG,QAAS87E,EAASxlF,EAAE0J,EAAQ87E,QAAQ,GAAIS,EAAev8E,EAAQu8E,aAAcv8D,EAASloB,EAAM2M,YAAYoD,GAAI41E,EAAQnnF,EAAE0pB,GAAQnI,QAAQ,YAAaqJ,EAASu8D,EAAMjkF,SAASA,OAAO,YAAYhC,MAC3PimF,GAAQA,EAAM,IACTv8D,GAAUu8D,GAASA,IAAUj3E,EAAK7O,QAAQ,IAGF,YAAzCrB,EAAEuR,EAAEmY,QAAQnI,QAAQ,KAAKzc,KAAK,SAG7BsH,EAAS6kB,EAAWvH,IAAYtd,EAASo5E,EAAQ97D,IAAau8D,GAAgB75E,EAASpM,EAAEimF,GAAc,GAAIv8D,IAC5GxZ,EAAK01E,UAGb2B,KAAM,SAAU5nB,EAAUt4D,EAAMmgF,GAC5B,GAAIC,GAAS,CAOb,OANI9nB,GAAWt4D,EAAOmgF,IAClBC,EAASD,GAAgB7nB,EAAWt4D,IAEpCs4D,EAAW,IACX8nB,GAAU9nB,GAEP8nB,GAEXC,MAAO,SAAUh/E,EAAQrB,EAAMsgF,EAAYH,EAAc1mB,EAAQnB,EAAUioB,GACvE,GAAIH,GAAS,CAUb,OATAG,GAAUA,GAAWvgF,EACjBs4D,IAAamB,GAAUnB,IAAa8kB,GAAU3jB,IAAW2jB,IACrD/7E,EAASk/E,EAAUJ,IACnBC,KAAYE,EAAatgF,IAEzBqB,EAAS++E,EAAS,IAClBA,GAAUE,EAAatgF,IAGxBogF,GAEXH,mBAAoB,WAChB,MAAOtnF,GAAEsJ,KAAKI,QAAQ87E,QAAQqC,aAAa,QAAQ16E,OAAO,SAAUsO,EAAOpa,GACvE,MAAOG,GAAM8F,aAAajG,MAGlCo4E,UAAW,SAAUiN,GAAV,GACuYoB,GAAkB76E,EAAS86E,EAAyE7mF,EAAQ8mF,EAAgBC,EAAeC,EAiBjhBv/E,EA2BJw/E,EAA6Ez/E,EAA6B0/E,EAU1GC,EAA8BrjE,EAA4BshE,EAO1DgC,EACAC,EACAC,EA/DAt4E,EAAO5G,KAAMjI,EAAU6O,EAAK7O,QAASsB,EAAUuN,EAAKvN,QAAS+G,EAAUwG,EAAKxG,QAASy8E,EAAWnmF,EAAE0J,EAAQy8E,UAAWjgE,EAAYzkB,EAAQykB,YAAauiE,KAActC,EAAS,IAAMlmF,QAAUA,OAAOqiB,YAAc4D,GAAa,MAAOs/D,EAASxlF,EAAE0J,EAAQ87E,QAASkD,EAAUh/E,EAAQo3D,OAAO16D,cAAc7F,MAAM,KAAMooF,EAAYj/E,EAAQi2D,SAASv5D,cAAc7F,MAAM,KAAMglF,EAAar1E,EAAKq1E,WAAqD9jB,EAAS,MAAOx6D,EAAM,EAAGmf,EAAQvf,SAASmC,eAqBje,IAnBIg/E,EADAt+E,EAAQy8E,WAAalmF,QAEjB2I,IAAK3I,OAAO8I,aAAelC,SAASmC,gBAAgBC,WAAa,EACjEhH,KAAMhC,OAAOiJ,aAAerC,SAASmC,gBAAgBtB,YAAc,GAGtDy+E,EAASz9E,SAE1B+/E,GACAR,EAAgBhoF,OAAOqiB,WACvB4lE,EAAiBjoF,OAAOwiB,cAExBwlE,EAAgB9B,EAAS5jF,QACzB2lF,EAAiB/B,EAAS3jF,UAE1BimF,GAAYriE,EAAMC,aAAeD,EAAME,aAAe,IAClD3d,EAAOe,EAAQ/B,SAAa,EAChCsgF,GAAiBt/E,EAAOnH,EAAMC,QAAQof,aAE1CinE,EAAmBtC,EAAOv4E,UAAUE,OAAOxK,EAAQimF,YAC/Cd,EAAiB,GAEjB,GADAC,EAAe7/E,KAAKlG,KAAW8lF,EAAiBvmF,IAAI,UAAY,GAE5DkgE,EAASsmB,EAAe,OAGxB,KADA96E,EAAUu4E,EAAOqC,aAAaC,GACzB5mF,EAAS+L,EAAQ/L,OAAQ+F,EAAM/F,EAAQ+F,IACxC8gF,GAAsB/nF,EAAEiN,EAAQhG,IAAM1F,IAAI,UACtCwmF,GAAgBtmB,EAASsmB,IACzBtmB,EAASsmB,EAAe,GA6CxC,OAxCAplF,GAAQpB,IAAI,SAAUkgE,GAElB9+D,EAAQpB,IADRmlF,GAASA,EAAM9mB,SAEX39D,KAAMykF,EAAMnqD,EACZ3zB,IAAK89E,EAAM/rE,GAGHzK,EAAK24E,OAAOH,EAASC,IAEjCR,EAAM5/E,EAAU5F,EAASk6D,EAAU2oB,EAAO,KAAO7iF,EAAQmmF,eAAe,IAAKpgF,EAASH,EAAU5F,GAAUylF,EAAe5C,EAAOsD,eAAe5lF,OAAO,4CACtJklF,EAAalnF,SACbinF,EAAM5/E,EAAU5F,EAASk6D,GAAU,GACnCn0D,EAASH,EAAU5F,IAEvB+F,EAAOE,KAAOo/E,EAAep/E,IAC7BF,EAAOzG,MAAQ+lF,EAAe/lF,KACzBiO,EAAKvN,QAAQmC,KAAKggF,IACnBniF,EAAQmC,KAAKggF,EAAU96E,KAAWm+E,IAElCE,EAAUr+E,KAAWtB,GAASsc,EAAWhb,KAAWm+E,GAAM7B,EAAa58E,EAAQ48E,WAC7D,QAAlBf,EAAW,KACXvgE,EAASpc,KAAOsH,EAAKq3E,KAAKc,EAAQz/E,IAAK5F,EAAYL,GAAW2jF,EAAW9jF,OAAQ0lF,EAAiBhiE,IAEhF,QAAlBq/D,EAAW,KACXvgE,EAAS/iB,MAAQiO,EAAKq3E,KAAKc,EAAQpmF,KAAMa,EAAWH,GAAW2jF,EAAW/jF,MAAO0lF,EAAgB/hE,IAEjGoiE,EAAUt+E,KAAWgb,GACrBujE,EAAgBvlF,EAAY3B,GAC5BmnF,EAAgBxlF,EAAYL,IAC3BA,EAAQH,UAAY+lF,IACrBC,GAAgCD,GAEd,SAAlBhD,EAAW,KACXvgE,EAASpc,KAAOsH,EAAKw3E,MAAMW,EAAQz/E,IAAK2/E,EAAevlF,EAAYwiF,GAAS0C,EAAiBhiE,EAAWwiE,EAAQ,GAAIC,EAAU,GAAIH,IAEhH,SAAlBjD,EAAW,KACXvgE,EAAS/iB,MAAQiO,EAAKw3E,MAAMW,EAAQpmF,KAAMa,EAAWzB,GAAUyB,EAAW0iF,GAASyC,EAAgB/hE,EAAWwiE,EAAQ,GAAIC,EAAU,GAAI7lF,EAAWH,KAEvJtB,EAAQE,IAAIs7D,EAAU+nB,GACtBjiF,EAAQpB,IAAIyjB,GACLA,EAAS/iB,MAAQqmF,EAAQrmF,MAAQ+iB,EAASpc,KAAO0/E,EAAQ1/E,KAEpEigF,OAAQ,SAAU/nB,EAAQnB,GACtB,GAA6QopB,GAAzQ74E,EAAO5G,KAAMjI,EAAU6O,EAAKvN,QAAS6iF,EAASxlF,EAAEkQ,EAAKxG,QAAQ87E,QAASwD,EAAiBloB,EAAO,GAAImoB,EAAmBnoB,EAAO,GAAIooB,EAAmBvpB,EAAS,GAAIwpB,EAAqBxpB,EAAS,GAAIypB,EAAe7gF,EAAUi9E,GAASplD,EAAWpgC,EAAEkQ,EAAKxG,QAAQ02B,UAA2B79B,EAAQO,EAAWzB,GAAUmB,EAASQ,EAAY3B,GAAUgoF,EAAcvmF,EAAW0iF,GAAS8D,EAAetmF,EAAYwiF,GAAS58E,EAAMwgF,EAAaxgF,IAAK3G,EAAOmnF,EAAannF,KAAM8W,EAAQ7Q,KAAK6Q,KA8B9d,OA7BIqnB,GAAS,IAAMv5B,SAASsa,OACxB4nE,EAAiBxgF,EAAU63B,GAC3Bx3B,GAAOmgF,EAAengF,IACtB3G,GAAQ8mF,EAAe9mF,MAEvB+mF,IAAmBrE,IACnB/7E,GAAO0gF,GAEPN,IAAmBvE,IACnB77E,GAAOmQ,EAAMuwE,EAAe,IAE5BJ,IAAqBvE,IACrB/7E,GAAOpG,GAEP0mF,IAAqBzE,IACrB77E,GAAOmQ,EAAMvW,EAAS,IAEtBymF,IAAqBv9D,IACrBzpB,GAAQonF,GAERJ,IAAqBxE,IACrBxiF,GAAQ8W,EAAMswE,EAAc,IAE5BF,IAAuBz9D,IACvBzpB,GAAQM,GAER4mF,IAAuB1E,IACvBxiF,GAAQ8W,EAAMxW,EAAQ,KAGtBqG,IAAKA,EACL3G,KAAMA,KAIlB0oB,GAAG8G,OAAO4zD,GACNnB,EAAe,kBACfC,EAAyB,8KACzBC,EAAajkF,EAAM6J,QACnBC,KAAM,SAAU5I,GACZiI,KAAKjI,QAAUrB,EAAEqB,GACjBiI,KAAKjI,QAAQ0wB,YAAYmyD,IAE7BqF,KAAM,WACFjgF,KAAKjI,QAAQ2N,GAAG,UAAWM,EAAMhG,KAAKkgF,YAAalgF,QAEvDmgF,WAAY,WACRngF,KAAKjI,QAAQ2wB,aAAakyD,IAE9B90D,QAAS,WACL9lB,KAAKjI,QAAQ2wB,aAAakyD,GAC1B56E,KAAKjI,QAAUnB,GAEnBwpF,WAAY,WACR,OAAO,GAEXF,YAAa,SAAUj4E,GAAV,GAILmY,GACAmG,EACA85D,EAGAC,EACAn3E,EACAo3E,CAVY,KAAZt4E,EAAE67B,OAAgB9jC,KAAKogF,eAGvBhgE,EAASnY,EAAEmY,OACXmG,EAAWvmB,KAAKjI,QAAQuvB,KAAKuzD,GAAwBh3E,OAAO,0BAC5Dw8E,EAAiB95D,EAASvI,KAAK,SAAUwiE,EAAQC,GACjD,MAAOD,GAAOE,SAAWD,EAAOC,WAEhCJ,EAAsBD,EAAezoF,OACrCuR,EAAYm3E,EAAsB,EAClCC,EAAmBF,EAAeluE,MAAMiO,GACxCnY,EAAEouB,SACuB,IAArBkqD,EACAF,EAAe58D,IAAIta,GAAWorB,QAE9B8rD,EAAe58D,IAAI88D,EAAmB,GAAGhsD,QAGzCgsD,IAAqBp3E,EACrBk3E,EAAe58D,IAAI,GAAG8Q,QAEtB8rD,EAAe58D,IAAI88D,EAAmB,GAAGhsD,QAGjDtsB,EAAE9D,qBAGVkd,EAAG06D,MAAMjB,WAAaA,GACxBnkF,OAAOuB,MAAM2sB,QACRluB,OAAOuB,OACE,kBAAVzB,SAAwBA,OAAOgiC,IAAMhiC,OAAS,SAAUiiC,EAAIC,EAAIC,IACrEA,GAAMD,OAEV,SAAUniC,EAAGC,QACVA,OAAO,sBACH,aACA,eACDD,IACL,WAoWE,MAnVC,UAAUE,EAAGE,GAAb,GACOsB,GAAQvB,OAAOuB,MAAO8M,EAAS9M,EAAMmpB,GAAGrc,OAAQgB,EAAQtP,EAAEsP,MAAOtF,EAAShK,EAAEgK,OAAQgpB,EAAa/yB,OAAO+yB,WAAY2tD,EAAQ,QAAShc,EAAO,OAAQC,EAAO,OAAQqlB,EAAgB,iBAAkBC,EAAU,kCAAmCC,EAAU,WAAYC,EAAO,OAAQC,EAAU,UAAWC,EAAU,UAAW1uC,EAAQ,QAAS8oC,EAAM,MAAOl5D,EAAO,OAAQm5D,EAAS,SAAUj5D,EAAQ,QAASD,EAAK,KAAM08C,EAAK,qBAAsBoiB,EAAU,8CAA+CC,EAAW,uKAA4LC,EAAgBD,EAAS/pF,QAAQ,aAAc,cACvuBiqF,EAAep8E,EAAOtE,QACtBC,KAAM,SAAU5I,EAASqI,GACrB,GAAIwG,GAAO5G,IACXgF,GAAOf,GAAGtD,KAAKwH,KAAKvB,EAAM7O,EAASqI,GACnCA,EAAUwG,EAAKxG,QACVA,EAAQ02B,UAAapgC,EAAE0J,EAAQ02B,UAAU/8B,GAAGhC,IAC7C6O,EAAK7O,QAAQ+I,OAEjB8F,EAAKy6E,kBAAkBjhF,EAAQkhF,WAC/B16E,EAAK26E,MAAQ,IAAMrpF,EAAMyrB,OACzB/c,EAAK46E,OAAStpF,EAAMC,QAAQkG,MAAMtG,GAClC6O,EAAK66E,iBAAiBrhF,EAAQshF,SAAUthF,EAAQi2D,SAAS/2D,IAAKc,EAAQi2D,SAAS19D,MAC/ET,EAAM0uB,OAAOhgB,IAEjBc,QACI2zD,EACAC,GAEJl7D,SACI8O,KAAM,eACNmnD,UACIsrB,QAAQ,EACRriF,IAAK,KACL3G,KAAM,KACNE,OAAQ,GACRD,MAAO,IAEX8oF,SAAU,UACVE,aAAa,EACbzL,QAAQ,EACR0L,eAAgB,EAChBC,cAAe,IACfhrD,SAAU,KACV79B,MAAO,KACPC,OAAQ,KACRooF,aACAlF,WACIC,MACIt8E,QAAS,UACTM,SAAU,KAEdi8E,OACIv8E,QAAS,WACTM,SAAU,IACVS,MAAM,KAIlBugF,kBAAmB,SAAUC,GAAV,GACX16E,GAAO5G,KACP+hF,EAAgB7pF,EAAMuK,QAC1BmE,GAAKo7E,aACLtrF,EAAEgH,KAAK4jF,EAAW,SAAUviF,EAAKnB,GAC7BgJ,EAAKo7E,UAAUpkF,EAAMsB,MAAQ6iF,EAAcnkF,EAAM6E,UAAY/L,EAAE,IAAMkH,EAAMqkF,YAAYv/E,UAE3FkE,EAAKs7E,iBAAmBH,EAAcb,GACtCt6E,EAAKu7E,cAAgBJ,EAAcZ,IAEvCiB,aAAc,SAAUljF,EAAMmkB,GAC1B,GAAIg/D,GAAkBh/D,EAAOrjB,KAAKmiF,cAAgBniF,KAAKkiF,gBACvD,OAAOhjF,GAAOc,KAAKgiF,UAAU9iF,IAASmjF,EAAkBA,GAE5DZ,iBAAkB,SAAUC,EAAUpiF,EAAK3G,GACvC,GAK2D6+D,GAAQnB,EAL/DzvD,EAAO5G,KAAMsiF,GACTC,WAAY,EACZC,aAAc,EACdC,cAAe,EACfC,YAAa,GACdC,EAA+B,OAAThqF,EAAgBupB,EAAOE,CACpD,QAAQs/D,GACR,IAAK,OACDlqB,EAAS6jB,EAAS,IAAMsH,EACxBtsB,EAAW+kB,EAAM,IAAMuH,QAChBL,GAASG,aAChB,MACJ,KAAKrgE,GACDo1C,EAAS4jB,EAAM,IAAMh5D,EACrBi0C,EAAW+kB,EAAM,IAAMl5D,QAChBogE,GAASE,YAChB,MACJ,KAAKtgE,GACDs1C,EAAS4jB,EAAM,IAAMl5D,EACrBm0C,EAAW+kB,EAAM,IAAMh5D,QAChBkgE,GAASI,WAChB,MACJ,KAAKvgE,GACDq1C,EAAS4jB,EAAM,IAAMuH,EACrBtsB,EAAWglB,EAAS,IAAMsH,QACnBL,GAASC,UAChB,MACJ,SACgB,OAARjjF,GACAk4D,EAAS6jB,EAAS,IAAMsH,EACxBtsB,EAAW+kB,EAAM,IAAMuH,QAChBL,GAASG,gBAEhBjrB,EAAS4jB,EAAM,IAAMuH,EACrBtsB,EAAWglB,EAAS,IAAMsH,QACnBL,GAASC,YAIxB37E,EAAKg8E,aAAeprB,EACpB5wD,EAAKi8E,eAAiBxsB,EACtBzvD,EAAKk8E,eAAiBR,GAE1BS,mBAAoB,SAAU3iF,EAASy9E,GAEnC,QAASmF,GAAY5iE,GACjBA,EAAO1a,GAAG2xE,EAAQxY,EAAI,WAClBj4D,EAAKq8E,WAAWpF,KAHxB,GAAsHqF,GAAlHt8E,EAAO5G,KAAM6hF,EAAiBzhF,EAAQyhF,eAAgBsB,GAAe1tE,MAAMosE,IAAmBA,EAAiB,CAM/GzhF,GAAQwhF,YACR/D,EAAMz2E,KAAK,WAAY,WACf+7E,EACAz5D,EAAW,WACPs5D,EAAYnF,EAAM9lF,UACnB8pF,GAEHmB,EAAYnF,EAAM9lF,WAGnBqI,EAAQ+1E,SACf+M,EAAYrF,EAAM9lF,QAAQuvB,KAAKs5D,GAC3BuC,EACAz5D,EAAW,WACPs5D,EAAYE,IACbrB,GAEHmB,EAAYE,KAIxBE,WAAY,SAAU/pF,EAAS+G,GAC3B,GAA6Gy9E,GAAOwF,EAAhHz8E,EAAO5G,KAAM8hF,EAAgB1hF,EAAQ0hF,cAAe7uD,EAAI7yB,EAAQi2D,SAAS19D,KAAM0Y,EAAIjR,EAAQi2D,SAAS/2D,GACxG+jF,GAAY3sF,EAAE,IAAMkQ,EAAK26E,MAAQ,SAAWV,EAAU,KAAKvxD,OAC3DuuD,EAAQ,GAAI3lF,GAAMmpB,GAAG06D,MAAM1iF,GACvB6iF,OAAQmH,EAAU,GAAKA,EAAY9lF,SAASsa,KAC5C2/C,OAAQ5wD,EAAKg8E,aACbvsB,SAAUzvD,EAAKi8E,eACfzG,UAAWh8E,EAAQg8E,UACnBW,OAAO,EACP7H,UAAW,GACX72E,MAAOuI,EAAK46E,OACZlF,MAAO,WACH11E,EAAK08E,aAAatjF,KAAKjI,UAE3BwrF,WAAY,SAAUt7E,GAClBA,EAAEC,OAAOnQ,QAAQ6xB,IAAIi1C,GACrB52D,EAAEC,OAAOnQ,QAAQuvB,KAAKs5D,GAASh3D,IAAIi1C,GACnC52D,EAAEC,OAAO4d,aAGjBlf,EAAKm8E,mBAAmB3iF,EAASy9E,GAC7BwF,EAAU,GACVxF,EAAMxB,QAEI,OAANppD,IACAA,EAAIv8B,EAAEC,QAAQsC,QAAUI,EAAQJ,QAAUmH,EAAQi2D,SAASz9D,OAErD,OAANyY,IACAA,EAAI3a,EAAEC,QAAQuC,SAAWG,EAAQH,SAAWkH,EAAQi2D,SAASx9D,QAEjEglF,EAAMxB,KAAKppD,EAAG5hB,IAElBwsE,EAAMxkF,QAAQiB,SAASsM,EAAK26E,OAAOtpF,IAAIyI,GACnC62D,OAAQ,EACRY,OAAQ,OACTvxD,EAAKk8E,iBACJ1iF,EAAQi2D,SAASsrB,QACjB9D,EAAMxkF,QAAQpB,IAAI,WAAY,SAC1BorF,EAAU,IACVz8E,EAAK48E,WAAW3F,EAAMxkF,SAAS,IAE3BgqF,EAAU,IAClBz8E,EAAK48E,WAAW3F,EAAMxkF,SAAS,GAE/ByoF,EAAgB,GAChBp4D,EAAW,WACP9iB,EAAKq8E,WAAWpF,IACjBiE,IAGXmB,WAAY,SAAUpF,GAClBA,EAAMxkF,QAAQiB,SAASumF,GACvBhD,EAAMvB,SAEVkH,WAAY,SAAUnqF,EAASoqF,GAC3B,GAAIC,GAAMhtF,EAAEC,QAAS0I,EAAOokF,KAAW,CACvCpqF,GAAQpB,KACJqH,IAAK+S,SAAShZ,EAAQpB,IAAImjF,GAAM,IAAM/7E,EAAOqkF,EAAI/jF,YACjDhH,KAAM0Z,SAAShZ,EAAQpB,IAAIiqB,GAAO,IAAM7iB,EAAOqkF,EAAItlF,gBAG3DulF,oBAAqB,SAAUvjF,EAAS/G,GAEpC,QAAS2pF,GAAY5iE,GACjBA,EAAO1a,GAAG2xE,EAAQxY,EAAI74D,EAAMY,EAAKg9E,YAAah9E,EAAMvN,IAFxD,GAAIuN,GAAO5G,KAAM6hF,EAAiBzhF,EAAQyhF,eAAgBsB,GAAe1tE,MAAMosE,IAAmBA,EAAiB,CAI/GzhF,GAAQwhF,YACJuB,EACAz5D,EAAW,WACPs5D,EAAY3pF,IACbwoF,GAEHmB,EAAY3pF,GAET+G,EAAQ+1E,SACXgN,EACAz5D,EAAW,WACPs5D,EAAY3pF,EAAQiuB,KAAKs5D,KAC1BiB,GAEHmB,EAAY3pF,EAAQiuB,KAAKs5D,MAIrCiD,YAAa,SAAUxqF,EAAS+G,GAC5B,GAAIwG,GAAO5G,KAAM8hF,EAAgB1hF,EAAQ0hF,cAAe1F,EAAYh8E,EAAQg8E,UAAW0H,EAAkB1jF,EAAQshF,UAAYv/D,GAAM/hB,EAAQshF,UAAYx/D,EAAO,YAAc,UAC5K7oB,GAAQiB,SAASsM,EAAK26E,OAAOuC,GAAiB1jF,EAAQ02B,UAAUh2B,OAAOif,aAAaq8D,EAAUC,OAAQ,GACtGz1E,EAAK+8E,oBAAoBvjF,EAAS/G,GAC9ByoF,EAAgB,GAChBp4D,EAAW,WACP9iB,EAAKg9E,YAAYvqF,IAClByoF,IAGX8B,YAAa,SAAUvqF,GACnBA,EAAQ0mB,aAAarf,EAAOV,KAAKI,QAAQg8E,UAAUE,QAAS,GACxD/7E,SAAU,WACNlH,EAAQuwB,IAAIi1C,GAAIv3C,KAAKs5D,GAASh3D,IAAIi1C,GAClCxlE,EAAQ6uB,aAGhBloB,KAAKsjF,aAAajqF,IAEtBiqF,aAAc,SAAUvrF,GACpBiI,KAAKgI,QAAQszD,GAAQvjE,QAASA,IAC9BiI,KAAK8kB,QAAQ,UAAW,WACpB,OAASyB,SAAUxuB,MAG3BiC,KAAM,SAAU6hE,EAAS38D,EAAMmkB,GAC3B,GAA+DiF,GAAMy7D,EAAjEn9E,EAAO5G,KAAMI,EAAUwG,EAAKxG,QAAS/G,EAAU3C,EAAEuqF,EAkCrD,OAjCK/hF,KACDA,EAAO4hF,GAEK,OAAZjlB,GAAoBA,IAAYjlE,GAAyB,KAAZilE,IACzC3jE,EAAMgE,WAAW2/D,KACjBA,EAAUA,KAEdkoB,GACIC,SAAU9kF,EACV28D,QAAS,IAGTvzC,EADA5xB,EAAEiyC,cAAckzB,GACTn7D,EAAOqjF,EAAaloB,GAEpBn7D,EAAOqjF,GAAeloB,QAASA,IAE1CxiE,EAAQiB,SAASqmF,EAAgB,IAAMzhF,GAAMkC,YAAYu/E,EAAgB,UAAWvgF,EAAQ+1E,QAAQjzE,KAAK,YAAa,SAASjL,KAC3HgB,MAAOmH,EAAQnH,MACfC,OAAQkH,EAAQlH,SACjB4qD,OAAOl9C,EAAKw7E,aAAaljF,EAAMmkB,GAAMiF,IACxC1hB,EAAKke,QAAQ,UAAW,WACpB,OACIyB,SAAUltB,EACVmC,OAASirB,SAAU6B,OAGvB5xB,EAAE0J,EAAQ02B,UAAU,GACpBlwB,EAAKi9E,YAAYxqF,EAAS+G,GAE1BwG,EAAKw8E,WAAW/pF,EAAS+G,GAE7BwG,EAAKoB,QAAQqzD,GAAQtjE,QAASsB,KAE3BuN,GAEXq9E,SAAU,SAAUpoB,EAAS38D,GACzBc,KAAKhG,KAAK6hE,EAAS38D,GAAM,IAE7BquB,KAAM,SAAUsuC,GACZ,MAAO77D,MAAKhG,KAAK6hE,EAASilB,IAE9BjoC,QAAS,SAAUgjB,GACf,MAAO77D,MAAKhG,KAAK6hE,EAASklB,IAE9BmD,QAAS,SAAUroB,GACf,MAAO77D,MAAKhG,KAAK6hE,EAASmlB,IAE9BjoC,MAAO,SAAU8iB,GACb,MAAO77D,MAAKhG,KAAK6hE,EAASvpB,IAE9BxxC,KAAM,WACF,GAAI8F,GAAO5G,KAAMmkF,EAAsBv9E,EAAKw9E,kBAa5C,OAXID,GAAoBzmF,KADpBkJ,EAAKxG,QAAQ02B,SACY,SAAUn5B,EAAK5F,GACpC6O,EAAKg9E,YAAYltF,EAAEqB,KAGE,SAAU4F,EAAK5F,GACpC,GAAI8lF,GAAQnnF,EAAEqB,GAASyD,KAAK,aACxBqiF,IACAj3E,EAAKq8E,WAAWpF,KAIrBj3E,GAEXw9E,iBAAkB,WACd,GAAIx9E,GAAO5G,KAAMqkF,EAAe3tF,EAAE,IAAMkQ,EAAK26E,MAAQ,SAAWV,EAAU,IAC1E,OAAIj6E,GAAKxG,QAAQ02B,SACNutD,EAEAA,EAAa1pF,SAAS,IAAMgmF,IAG3Ct7D,WAAY,SAAUi/D,GAClB,GAAiBlkF,GAAbwG,EAAO5G,IACXgF,GAAOf,GAAGohB,WAAWld,KAAKvB,EAAM09E,GAChClkF,EAAUwG,EAAKxG,QACXkkF,EAAWhD,YAAc1qF,GACzBgQ,EAAKy6E,kBAAkBjhF,EAAQkhF,WAE/BgD,EAAW5C,WAAa9qF,GAAa0tF,EAAWjuB,WAAaz/D,GAC7DgQ,EAAK66E,iBAAiBrhF,EAAQshF,SAAUthF,EAAQi2D,SAAS/2D,IAAKc,EAAQi2D,SAAS19D,OAGvFmtB,QAAS,WACL9gB,EAAOf,GAAG6hB,QAAQ3d,KAAKnI,MACvBA,KAAKokF,mBAAmBx6D,IAAIi1C,GAAIv3C,KAAKs5D,GAASh3D,IAAIi1C,KAG1D3mE,GAAMmpB,GAAG8G,OAAOi5D,IAClBzqF,OAAOuB,MAAM2sB,QACRluB,OAAOuB,OACE,kBAAVzB,SAAwBA,OAAOgiC,IAAMhiC,OAAS,SAAUiiC,EAAIC,EAAIC,IACrEA,GAAMD,OAEV,SAAUniC,EAAGC,QACVA,OAAO,iBACH,aACA,eACDD,IACL,WA0UE,MAzTC,UAAUE,EAAGE,GAgDV,QAAS2tF,GAAaxsF,GAClB,KAAOA,EAAQH,QACX4sF,EAAgCzsF,GAChCA,EAAUA,EAAQ6B,SAG1B,QAAS4qF,GAAgCzsF,GACrC,GAAIsiC,GAAQtiC,EAAQyD,KAAKtD,EAAM+J,GAAK,QAChCo4B,KACAtiC,EAAQmL,KAAK,QAASm3B,GACtBtiC,EAAQguB,WAAW7tB,EAAM+J,GAAK,UAGtC,QAASwiF,GAA6B1sF,GAClC,GAAIsiC,GAAQtiC,EAAQmL,KAAK,QACrBm3B,KACAtiC,EAAQyD,KAAKtD,EAAM+J,GAAK,QAASo4B,GACjCtiC,EAAQmL,KAAK,QAAS,KAG9B,QAASwhF,GAAoB3sF,GACzB,KAAOA,EAAQH,SAAWG,EAAQgC,GAAG,SACjC0qF,EAA6B1sF,GAC7BA,EAAUA,EAAQ6B,SAvE7B,GACO1B,GAAQvB,OAAOuB,MAAO8M,EAAS9M,EAAMmpB,GAAGrc,OAAQ+2E,EAAQ7jF,EAAMmpB,GAAG06D,MAAO7/E,EAAahE,EAAMgE,WAAYysC,EAAgBjyC,EAAEiyC,cAAejoC,EAAShK,EAAEgK,OAAQsF,EAAQtP,EAAEsP,MAAO2+E,EAAWjuF,EAAE6G,UAAW2lB,EAAahrB,EAAMgrB,WAAY0hE,EAAe,aAAcC,EAAc,mBAAoBxpB,EAAO,OAAQC,EAAO,OAAQhpB,EAAQ,QAASwyC,EAAc,cAAevyC,EAAe,eAAgBwyC,EAAgB,kBAAmB7D,EAAW,0TAA0U8D,EAAiB9sF,EAAMuK,SAAS,kCAAuCsiF,EAAgB,wFAA2GlmB,EAAK,gBAAiBomB,GACz9BpsF,QACI2+D,OAAQ,gBACRnB,SAAU,cAEd/2D,KACIk4D,OAAQ,aACRnB,SAAU,iBAEd19D,MACI6+D,OAAQ,cACRnB,SAAU,eACV6e,UAAW,YAEft8E,OACI4+D,OAAQ,eACRnB,SAAU,cACV6e,UAAW,YAEf12C,QACI63B,SAAU,gBACVmB,OAAQ,kBAEb0tB,GACC5lF,IAAO,SACPzG,OAAU,MACVF,KAAQ,QACRC,MAAS,OACT4lC,OAAU,UACX2mD,GACCtsF,OAAQ,IACRyG,IAAK,IACL3G,KAAM,IACNC,MAAO,IACP4lC,OAAQ,KACT4mD,GACCpxB,YACI50D,OAAQ,MACRrB,KAAM,eAEVgzD,UACI3xD,OAAQ,OACRrB,KAAM,eAEXsnF,EAAiB,SAAUp9E,GAC1B,MAAOA,GAAEmY,OAAO5kB,KAAKtD,EAAM+J,GAAK,UA4BpCqjF,EAAUtgF,EAAOtE,QACjBC,KAAM,SAAU5I,EAASqI,GACrB,GAAiBqzB,GAAb7sB,EAAO5G,IACXgF,GAAOf,GAAGtD,KAAKwH,KAAKvB,EAAM7O,EAASqI,GACnCqzB,EAAO7sB,EAAKxG,QAAQi2D,SAAS/9D,MAAM,cAAgB,aAAe,WAClEsO,EAAKgf,WAAaw/D,EAAW3xD,GAC7B7sB,EAAK2+E,wBAA0Bv/E,EAAMY,EAAK4+E,iBAAkB5+E,GAC5DA,EAAK7O,QAAQ2N,GAAGkB,EAAKxG,QAAQqlF,OAAS5mB,EAAIj4D,EAAKxG,QAAQyD,OAAQmC,EAAMY,EAAK8+E,QAAS9+E,IAAOlB,GAAG,aAAem5D,EAAIj4D,EAAKxG,QAAQyD,OAAQmC,EAAMY,EAAK++E,YAAa/+E,IACzJ5G,KAAKI,QAAQwlF,UACbh/E,EAAK7O,QAAQ2N,GAAG,aAAem5D,EAAIj4D,EAAKxG,QAAQyD,OAAQmC,EAAMY,EAAKi/E,YAAaj/E,KAGxFxG,SACI8O,KAAM,UACNrL,OAAQ,GACRg4D,QAASwpB,EACTS,UAAW,IACXC,SAAS,EACT1vB,SAAU,SACVovB,OAAQ,aACRG,UAAU,EACV3sF,MAAO,KACPC,OAAQ,KACRkjF,WACIC,MACIt8E,QAAS,UACTM,SAAU,GAEdi8E,OACIv8E,QAAS,WACTM,SAAU,GACVS,MAAM,KAIlB4G,QACI2zD,EACAC,EACAwpB,EACAxyC,EACAC,GAEJozC,YAAa,SAAU19E,GACnBy8E,EAAoBhuF,EAAEuR,EAAE22B,iBAE5B8mD,QAAS,SAAUz9E,GAAV,GACDrB,GAAO5G,KACP4+B,EAAgBloC,EAAEuR,EAAE22B,cACpBh4B,GAAKxG,QAAQqlF,QAAU7+E,EAAKxG,QAAQqlF,OAAOntF,MAAM,eACjDsO,EAAKo/E,MAAMpnD,IAEXhU,aAAahkB,EAAKitB,SAClBjtB,EAAKitB,QAAUnK,WAAW,WACtB9iB,EAAKo/E,MAAMpnD,IACZh4B,EAAKxG,QAAQ0lF,aAGxBG,eAAgB,SAAU7lE,GACtB,GAAkH8lE,GAA9Gt/E,EAAO5G,KAAMmmF,EAAiBv/E,EAAKxG,QAAQy7D,QAAS9jE,EAAU6O,EAAKi1D,QAASuqB,EAAax/E,EAAKxG,QAAQ8lF,MACtGv9C,GAAcw9C,IAAmBA,EAAehjE,KAC1C,UAAYvc,GAAKxG,UACnBgmF,GAAcljE,EAAWijE,EAAehjE,MAE5Cvc,EAAKoB,QAAQuqC,GACTnyC,QAAS+lF,EACT/lE,OAAQA,IAEPgmE,GAKDruF,EAAQ+I,OACRolF,EAASnuF,EAAQuvB,KAAK,IAAMy9D,GAAe,GACvCmB,EACAA,EAAOG,IAAMF,EAAehjE,KAAO+iE,EAAOG,IAE1CtuF,EAAQ2K,KAAKsiF,GAAiBnpB,QAASsqB,KAE3CpuF,EAAQuvB,KAAK,IAAMy9D,GAAen7D,IAAI,OAASi1C,GAAIn5D,GAAG,OAASm5D,EAAI,WAC/Dj4D,EAAKoB,QAAQ88E,GACb/sF,EAAQiC,WAbZjC,EAAQ+3C,QACR53C,EAAMmpB,GAAGqG,SAAS3vB,GAAS,GAC3B6O,EAAK0/E,aAAaH,KAcfA,GAAkBjqF,EAAWiqF,IACpCA,EAAiBA,GACbj+E,OAAQlI,KACRogB,OAAQA,IAEZroB,EAAQ2K,KAAKyjF,GAAkB,KAE/BpuF,EAAQ2K,KAAKyjF,GAEjBv/E,EAAKke,QAAQ,UAAW,WACpB,OAASyB,SAAUxuB,MAG3BuuF,aAAc,SAAUlmF,GACpB,GAAIwG,GAAO5G,IACX6kB,QAAOktB,KAAKrxC,GACRxB,KAAM,MACN2oC,SAAU,OACVrb,OAAO,EACPusB,MAAO,SAAUqH,EAAKf,GAClBnnD,EAAMmpB,GAAGqG,SAAS9gB,EAAKi1D,SAAS,GAChCj1D,EAAKoB,QAAQsqC,GACT+M,OAAQA,EACRe,IAAKA,KAGbvH,QAAS7yC,EAAM,SAAUxK,GACrBtD,EAAMmpB,GAAGqG,SAAS9gB,EAAKi1D,SAAS,GAChCj1D,EAAKi1D,QAAQn5D,KAAKlH,GAClBoL,EAAKoB,QAAQ88E,IACdl+E,IACJxG,KAEPolF,iBAAkB,SAAUv9E,GACpBA,EAAEmuB,UAAYl+B,EAAMypB,KAAKM,KACzBjiB,KAAKc,QAGb0W,QAAS,WACL,GAAI5Q,GAAO5G,KAAM69E,EAAQj3E,EAAKi3E,KAC1BA,IAASA,EAAMz9E,QAAQ87E,QACvBt1E,EAAKq/E,eAAepI,EAAMz9E,QAAQ87E,SAG1Cp7E,KAAM,WACEd,KAAK69E,OACL79E,KAAK69E,MAAMvB,SAGnBtiF,KAAM,SAAUomB,GACZA,EAASA,GAAUpgB,KAAKjI,QACxB2sF,EAAoBtkE,GACpBpgB,KAAKgmF,MAAM5lE,IAEf4lE,MAAO,SAAU5lE,GACb,GAAIxZ,GAAO5G,KAAM2L,EAAU/E,EAAKwZ,QAC3BxZ,GAAKi3E,OACNj3E,EAAK2/E,aAEL56E,GAAWA,EAAQ,IAAMyU,EAAO,KAChCxZ,EAAKi3E,MAAMvB,QACX11E,EAAKi3E,MAAM9lF,QAAQ4nB,WAAU,GAAM,IAElChU,GAAWA,EAAQ,IAAMyU,EAAO,KACjCxZ,EAAKq/E,eAAe7lE,GACpBxZ,EAAKi3E,MAAMz9E,QAAQ87E,OAAS97D,GAEhCxZ,EAAKi3E,MAAMt2E,IAAI,aAAc,WACzBg9E,EAAankE,GACbA,EAAOgF,WAAWy/D,GAClB7kF,KAAKjI,QAAQqtB,WAAW,MAAMliB,KAAK,eAAe,GAClDyhF,EAAS/6D,IAAI,UAAYi1C,EAAIj4D,EAAK2+E,2BAEtC3+E,EAAKi3E,MAAMxB,QAEfkK,WAAY,WACR,GAAI3/E,GAAO5G,KAAMI,EAAUwG,EAAKxG,QAAS/G,EAAU3C,EAAEwB,EAAMuK,SAASy+E,IAC5D6E,QAAS3lF,EAAQ2lF,SAAgC,WAArB3lF,EAAQi2D,SACpCpnC,IAAKk2D,EAAW/kF,EAAQi2D,UACxBuvB,SAAUxlF,EAAQwlF,WAE1Bh/E,GAAKi3E,MAAQ,GAAI9B,GAAM1iF,EAASqH,GAC5B8lF,SAAU,WACN,GAAItK,GAASl8E,KAAKI,QAAQ87E,OAAQuK,EAASvK,EAAO,GAAGr4D,IAAMjd,EAAK7O,QAAQ,GAAG8rB,EACvE4iE,KACAvK,EAAOh5E,KAAK2hF,EAAa4B,EAAS7B,GAClC5kF,KAAKjI,QAAQmL,KAAK,KAAMujF,EAAS7B,IAEjCxkF,EAAQ2lF,SACRn/E,EAAK8/E,mBAET1mF,KAAKjI,QAAQqtB,WAAW,eACxBu/D,EAASj/E,GAAG,UAAYm5D,EAAIj4D,EAAK2+E,yBACjC3+E,EAAKoB,QAAQqzD,IAEjBihB,MAAO,WACH11E,EAAKoB,QAAQszD,IAEjBwhB,kBAAkB,EAClBV,UAAWh8E,EAAQg8E,WACpB6I,EAAU7kF,EAAQi2D,YACrBh9D,EAAQpB,KACJgB,MAAOmH,EAAQnH,MACfC,OAAQkH,EAAQlH,SAEpB0N,EAAKi1D,QAAUxiE,EAAQiuB,KAAK,sBAC5B1gB,EAAK+/E,MAAQttF,EAAQiuB,KAAK,cACtBlnB,EAAQwlF,SACRvsF,EAAQqM,GAAG,aAAem5D,EAAI74D,EAAMY,EAAKi/E,YAAaj/E,IAEtDvN,EAAQqM,GAAG,QAAUm5D,EAAI,oBAAqB74D,EAAMY,EAAKggF,kBAAmBhgF,KAGpFggF,kBAAmB,SAAU3+E,GACzBA,EAAE9D,iBACFnE,KAAKc,QAET+kF,YAAa,SAAU59E,GACnB,GAAIjI,KAAK69E,MAAO,CACZ,GAAI9lF,GAAUrB,EAAEuR,EAAE22B,eAAgBx/B,EAASrH,EAAQqH,SAAU+kC,EAAQl8B,EAAEk8B,MAAOC,EAAQn8B,EAAEm8B,KAGxF,IAFAhlC,EAAOxG,MAAQwG,EAAOzG,KAAOT,EAAMuB,YAAY1B,GAC/CqH,EAAOvG,OAASuG,EAAOE,IAAMpH,EAAMyB,aAAa5B,GAC5CosC,EAAQ/kC,EAAOzG,MAAQwrC,EAAQ/kC,EAAOxG,OAASwrC,EAAQhlC,EAAOE,KAAO8kC,EAAQhlC,EAAOvG,OACpF,MAEJmH,MAAK69E,MAAMvB,YAEXiI,GAAa7tF,EAAEuR,EAAE22B,eAErBhU,cAAa5qB,KAAK6zB,UAEtB6yD,iBAAkB,WACd,GAAI9/E,GAAO5G,KAAMq2D,EAAWzvD,EAAKxG,QAAQi2D,SAAUzwC,EAAahf,EAAKgf,WAAYxmB,EAASwmB,EAAWxmB,OAAQy+E,EAAQj3E,EAAKi3E,MAAO3B,EAAS2B,EAAMz9E,QAAQ87E,OAAQ4D,EAAeppF,EAAEwlF,GAAQ98E,SAAUynF,EAAcx0E,SAASzL,EAAK+/E,MAAM1uF,IAAI,oBAAqB,IAAK6uF,EAAgBpwF,EAAEmnF,EAAM9lF,SAASqH,SAAU+d,EAAWgoE,EAAWtH,EAAMR,QAAU6H,EAAQ7uB,GAAYA,GAAW0wB,EAAejH,EAAa1gF,GAAU0nF,EAAc1nF,GAAU1I,EAAEwlF,GAAQt2D,EAAW7nB,QAAU,EAAI8oF,CACpdjgF,GAAK+/E,MAAMh8B,YAAY,mDAAmDrwD,SAAS,aAAe6iB,GAAUllB,IAAImH,EAAQ2nF,IAE5H3mE,OAAQ,WACJ,MAAIpgB,MAAK69E,MACE79E,KAAK69E,MAAMz9E,QAAQ87E,OAEvB,MAEXp2D,QAAS,WACL,GAAI+3D,GAAQ79E,KAAK69E,KACbA,KACAA,EAAM9lF,QAAQ6xB,IAAIi1C,GAClBgf,EAAM/3D,WAEV8E,aAAa5qB,KAAK6zB,SAClB7zB,KAAKjI,QAAQ6xB,IAAIi1C,GACjB8lB,EAAS/6D,IAAI,UAAYi1C,EAAI7+D,KAAKulF,yBAClCvgF,EAAOf,GAAG6hB,QAAQ3d,KAAKnI,QAG/B9H,GAAMmpB,GAAG8G,OAAOm9D,IAClB3uF,OAAOuB,MAAM2sB,QACRluB,OAAOuB,OACE,kBAAVzB,SAAwBA,OAAOgiC,IAAMhiC,OAAS,SAAUiiC,EAAIC,EAAIC,IACrEA,GAAMD,OAEV,SAAUniC,EAAGC,QACVA,OAAO,iBACH,aACA,mBACA,eACDD,IACL,WAmrCE,MA3qCC,UAAUE,EAAGE,GAqiBV,QAASowF,KACL,GAAsE/tF,GAAlEijF,EAASl8E,KAAKI,QAAQ87E,OAAQ+K,EAAgBztF,EAAW0iF,EAC7DhkF,GAAMY,KAAKkH,KAAKjI,SAASuC,SAAS,mBAE9BrB,EADmC,eAAnC+G,KAAKjI,QAAQE,IAAI,cACTgvF,GAAiBztF,EAAWwG,KAAKjI,SAAWiI,KAAKjI,QAAQkB,SAEzDguF,EAEZjnF,KAAKjI,QAAQE,KACTivF,WAAYhL,EAAOjkF,IAAI,eACvBkvF,YAAaluF,IAGrB,QAASmuF,GAAan/E,GACbA,EAAEmY,OAAOrmB,GAAG,qBACbkO,EAAEmY,OAAOhf,YAAYimF,EAAwB,SAAVp/E,EAAE/I,MAG7C,QAASooF,GAAgBvvF,GAErB,MADAA,GAAUrB,EAAEqB,GACLA,EAAQ8B,SAAS,kBAAoB9B,EAAQkgB,QAAQ,qBAAuBlgB,EAAQuC,SAAS,4BAA4BxB,KAAK,uFAAuFc,SAASd,KAAK,gDAAgDc,SAE9R,QAAS2tF,GAAat/E,GAClBA,EAAE9D,iBAEN,QAASqjF,GAAqBzvF,EAASk3B,GAAvC,GACQgkD,GAAqB,SAARhkD,EAAiBv4B,EAAEuN,GAAGm9C,KAAO1qD,EAAEuN,GAAG+3B,KAC/C1Y,EAAiB,SAAR2L,EAAiBv4B,EAAEuN,GAAG7M,MAAQV,EAAEuN,GAAGqrB,KAC5Cm4D,EAAYxU,EAAW9qE,KAAKpQ,EAChC,OAAI0vF,GAAU1tF,GAAG,qBAAuB0tF,EAAU7vF,OACvC6vF,EAEPA,EAAUngE,KAAK,mBAAmB1vB,OAC3B0rB,EAAOnb,KAAKs/E,EAAUngE,KAAK,oBAE/BkgE,EAAqBC,EAAWx4D,GAxkB9C,GAGOy4D,GAUAC,EAkDA9P,EAsFA+P,EAwCAC,EAwDAC,EAuBAC,EAsBAC,EAwBAC,EAsHAC,EA6BAC,EAiBAC,EAqBAC,EAuBAC,EAgEAC,EAwBAC,EAjmBAtwF,EAAQvB,OAAOuB,MAAOrB,EAAQqB,EAAMrB,MAAOmO,EAAS9M,EAAMmpB,GAAGrc,OAAQgB,EAAQtP,EAAEsP,MAAO9J,EAAahE,EAAMgE,WAAYylB,EAAOzpB,EAAMypB,KAAMnoB,EAAatB,EAAMuB,YAAagvF,EAAU,YAAaC,EAAS,WAAYC,EAAkB,oBAAqBC,EAAgB,kBAAmBC,EAAe,iBAAkBC,EAAe,iBAAkBC,EAAY,cAAeC,EAAQ,UAAWC,EAAoB,sBAAuB5B,EAAe,iBAAkB6B,EAAiB,mBAAoBC,EAAe,iBAAkBC,EAAc,gBAAiBC,EAAY,cAAeC,EAAU,YAAaC,EAAO,SAAUC,EAAc,OAAQC,EAAc,gBAAiBC,EAAmB,oBAAqBC,EAAiB,qCAAsCC,EAAqB,uBAAwBC,EAAkB,oBAAqBC,EAAqB,uBAAwBC,EAAwB,0BAA2BC,GAAuB,yBAA0B3S,GAAQ,QAAS4S,GAAS,SAAUlP,GAAO,OAAQC,GAAQ,QAASkP,GAAgB,eAAgBC,GAAiB,gBAAiBC,GAAiB,QAASC,GAAgB,OAAQC,GAAkB,SAAUC,GAAkB,oBAAqBC,GAAiBtyF,EAAMgL,KAAK,MACtxChL,GAAMuyF,WACF/C,GACAgD,eAAgB,qDAChBC,kBAAmB,2DAEvBzyF,EAAMuyF,QAAQG,kBAAoB,SAAU17E,EAAMu7E,EAAStsF,GACvDupF,EAAWx4E,IACPu7E,QAASA,EACTtsF,SAAUA,IAGdwpF,EAAOzvF,EAAMrB,MAAM6J,QACnBmqF,gBAAiB,WACb7qF,KAAKjI,QAAQmL,KAAKhL,EAAMgL,KAAK,YAAalD,KAAKI,QAAQjC,UAAYksF,KAEvES,WAAY,WACR9qF,KAAKjI,QAAQmL,KAAKsnF,GAAgBxqF,KAAKI,QAAQwuC,MAEnDm8C,UAAW,WACH/qF,KAAKI,QAAQyjB,IACb7jB,KAAKjI,QAAQmL,KAAK,KAAMlD,KAAKI,QAAQyjB,KAG7CmnE,kBAAmB,WACXhrF,KAAKI,QAAQyjB,IACb7jB,KAAKjI,QAAQmL,KAAK,KAAMlD,KAAKI,QAAQyjB,GAAK,cAGlDkmB,WAAY,WACJ/pC,KAAKI,QAAQ2pC,YACb/pC,KAAKjI,QAAQmL,KAAKlD,KAAKI,QAAQ2pC,aAGvC/vC,KAAM,WACFgG,KAAKjI,QAAQ4yD,YAAYw+B,GAAcnvF,OACvCgG,KAAKI,QAAQ6qF,QAAS,GAE1BnqF,KAAM,WACFd,KAAKjI,QAAQuC,SAAS6uF,GAAcroF,OACpCd,KAAKI,QAAQ6qF,QAAS,GAE1B/iE,OAAQ,WACJloB,KAAKjI,QAAQmwB,UAEjBzI,OAAQ,SAAUyrE,GACVA,IAAct0F,IACds0F,GAAY,GAEhBlrF,KAAKjI,QAAQqJ,YAAY8nF,GAAiBgC,GAC1ClrF,KAAKI,QAAQqf,OAASyrE,GAE1BC,KAAM,WACF,GAAIv8C,GAAM5uC,KAAKjI,QAAQmL,KAAKsnF,GAC5B,OAAIxqF,MAAK7B,SACE6B,KAAKyqF,QAAQ1yF,QAAQuvB,KAAK,IAAMkjE,GAAiB,KAAQ57C,EAAM,MAAOpzC,KAAKwE,KAAKI,QAAQlB,MACxFc,KAAKyqF,QAAQrqF,QAAQgrF,UACrBprF,KAAKyqF,QAAQ5M,MAAM9lF,QAAQuvB,KAAK,IAAMkjE,GAAiB,KAAQ57C,EAAM,MAAOpzC,KAAKwE,KAAKI,QAAQlB,MADlG,KAKfhH,EAAMuyF,QAAQ9C,KAAOA,EACjB9P,EAAS8P,EAAKjnF,QACdC,KAAM,SAAUP,EAASqqF,GACrB,GAAI1yF,GAAiCrB,EAAvB0J,EAAQirF,aAAiB,iCAAsC,4BAC7ErrF,MAAKjI,QAAUA,EACfiI,KAAKI,QAAUA,EACfJ,KAAKyqF,QAAUA,EACfzqF,KAAK+pC,aACD3pC,EAAQkrF,SACRvzF,EAAQuC,SAASgvF,GAEjBlpF,EAAQmrF,YACRxzF,EAAQuC,SAASsuF,GACjB5oF,KAAKmgB,OAAO/f,EAAQirD,WAEpBjrD,EAAQ+iB,MAAQvsB,GAAcwJ,EAAQirF,eACtCtzF,EAAQmL,KAAK,OAAQ9C,EAAQ+iB,KACzB/iB,EAAQkhB,QACRvpB,EAAQmL,KAAKhL,EAAMgL,KAAK,QAAS,WAGrC9C,EAAQ0tC,QACR/1C,EAAQmL,KAAKhL,EAAMgL,KAAK,SAAU9C,EAAQ0tC,OAC1C9tC,KAAK8tC,MAAQ9tC,KAAKyqF,QAAQe,WAAWxrF,KAAMI,EAAQ0tC,SAElD1tC,EAAQmrF,WAAanrF,EAAQ4gB,OAAS9kB,EAAWkE,EAAQ4gB,SAC1DhhB,KAAKyrF,aAAerrF,EAAQ4gB,OAE5B5gB,EAAQmrF,WAAanrF,EAAQ+f,QAAUjkB,EAAWkE,EAAQ+f,UAC1DngB,KAAK0rF,cAAgBtrF,EAAQ+f,SAGrCA,OAAQ,SAAUqsB,EAAOm/C,GACrBn/C,IAAUA,EACNxsC,KAAK8tC,OAAStB,EACdxsC,KAAK8tC,MAAMhZ,OAAO90B,MACVA,KAAK8tC,OACb9tC,KAAK80B,OAAO0X,GAEZm/C,GAAa3rF,KAAKmrF,QAClBnrF,KAAKmrF,OAAOhrE,OAAOqsB,IAG3Bo/C,eAAgB,WACZ,GAAI5rF,KAAKI,QAAQyrF,QACb,MAAO7rF,MAAKjI,QAAQkgB,QAAQ,IAAM4wE,GAAcrtF,KAAK,gBAG7DswF,aAAc,WACV,GAAsIrT,GAASF,EAAMC,EAAjJzgF,EAAUiI,KAAKjI,QAASogF,EAAOn4E,KAAKI,QAAQ+3E,KAAMC,EAAiBp4E,KAAKI,QAAQg4E,eAAgBC,EAAWr4E,KAAKI,QAAQi4E,UACxHD,GAAkBC,GAAYF,KAC9BM,GAAU,EACV1gF,EAAQ+kE,WAAWj5D,OAAO,WACtB,OAAQnN,EAAEsJ,MAAMnG,SAAS,cAAgBnD,EAAEsJ,MAAMnG,SAAS0vF,KAAU7yF,EAAEsJ,MAAMnG,SAAS,aACtF6D,KAAK,SAAUC,EAAKc,IACA,GAAfA,EAAGyoB,UAAgC,GAAfzoB,EAAGyoB,UAAiBxwB,EAAEu7B,KAAKxzB,EAAG0zB,WAAWv6B,OAAS,KACtE6gF,GAAU,KAId1gF,EAAQuC,SADRm+E,EACiBgR,EAEAC,IAGrBvR,GACAI,EAAOxgF,EAAQ4C,SAAS,QAAU4uF,GAAMnyF,QACnCmhF,EAAK,KACNA,EAAO7hF,EAAE,gBAAkB6yF,EAAO,aAAathE,UAAUlwB,IAE7DwgF,EAAKj+E,SAASkvF,EAAcrR,IACrBC,GACPG,EAAOxgF,EAAQ4C,SAAS,iBAAiBvD,QACpCmhF,EAAK,KACNA,EAAO7hF,EAAE,yBAA2B6yF,EAAO,aAAathE,UAAUlwB,IAEtEwgF,EAAKj+E,SAAS89E,IACPC,IACPG,EAAMzgF,EAAQ4C,SAAS,eAAevD,QACjCohF,EAAI,KACLA,EAAM9hF,EAAE,sCAAsCuxB,UAAUlwB,IAE5DygF,EAAIt1E,KAAK,MAAOm1E,OAI5BngF,EAAMuyF,QAAQ5S,OAASA,EACnB+P,EAAgB/P,EAAOn3E,QACvBC,KAAM,SAAUP,EAASqqF,GACrB5S,EAAO5zE,GAAGtD,KAAKwH,KAAKnI,KAAMI,EAASqqF,EACnC,IAAI1yF,GAAUiI,KAAKjI,OACnBA,GAAQuC,SAASouF,GACjB1oF,KAAK+qF,YACD3qF,EAAQ2rF,OACRh0F,EAAQuC,SAAS,WAAa8F,EAAQ2rF,OAElB,YAApB3rF,EAAQ6jF,UAA0B7jF,EAAQg1B,MAEtCr9B,EAAQ2K,KADRtC,EAAQkhB,OACK,yBAA2BlhB,EAAQg1B,KAAO,UAE1Ch1B,EAAQg1B,MAG7Bh1B,EAAQ4rF,QAA8B,YAApB5rF,EAAQ6rF,WAA2B7rF,EAAQ+3E,MAAQ/3E,EAAQg4E,gBAAkBh4E,EAAQi4E,UACnGj4E,EAAQ4rF,SACRhsF,KAAK8rF,eAET9rF,KAAK8qF,aACL9qF,KAAK6qF,kBACL7qF,KAAKyf,OAAOrf,EAAQqf,QAChBrf,EAAQ6qF,QACRjrF,KAAKc,OAETd,KAAKjI,QAAQyD,MACT0D,KAAM,SACNi3E,OAAQn2E,QAGhB80B,OAAQ,SAAUu2B,GACVA,IAAaz0D,IACby0D,GAAW,GAEfrrD,KAAKjI,QAAQqJ,YAAYimF,EAAch8B,GACvCrrD,KAAKI,QAAQirD,SAAWA,KAGhCnzD,EAAMuyF,QAAQ7C,cAAgBA,EAC1BC,EAAiBhQ,EAAOn3E,QACxBC,KAAM,SAAUP,EAASqqF,GACrBzqF,KAAK7B,UAAW,EAChB05E,EAAO5zE,GAAGtD,KAAKwH,KAAKnI,KAAMI,EAASqqF,EACnC,IAAI1yF,GAAUiI,KAAKjI,OACK,YAApBqI,EAAQ6jF,UAAyB7jF,EAAQg1B,MAErCr9B,EAAQ2K,KADRtC,EAAQkhB,OACK,yBAA2BlhB,EAAQg1B,KAAO,UAE1C,wBAA0Bh1B,EAAQg1B,KAAO,WAG9Dh1B,EAAQ4rF,QAA8B,WAApB5rF,EAAQ6rF,WAA0B7rF,EAAQ+3E,MAAQ/3E,EAAQg4E,gBAAkBh4E,EAAQi4E,UAClGj4E,EAAQ4rF,SACRhsF,KAAK8rF,eAEJ1rF,EAAQyrF,SACT7rF,KAAK87D,QAET97D,KAAKgrF,oBACLhrF,KAAK+pC,aACL/pC,KAAK8qF,aACL9qF,KAAK6qF,kBACL7qF,KAAKyf,OAAOrf,EAAQqf,QACpB1nB,EAAQuC,SAASquF,EAAkB,IAAMD,GACrCtoF,EAAQ6qF,QACRjrF,KAAKc,OAELV,EAAQmrF,WACRvrF,KAAKmgB,OAAO/f,EAAQirD,UAExBrrD,KAAKjI,QAAQyD,MACT0D,KAAM,SACNi3E,OAAQn2E,QAGhB87D,MAAO,WACH97D,KAAKjI,QAAUiI,KAAKjI,QAAQe,KAAK,aAAac,UAElDsyF,eAAgB,WACZlsF,KAAKjI,QAAQuC,SAASiwF,KAE1Bz1D,OAAQ,SAAUu2B,GACVA,IAAaz0D,IACby0D,GAAW,GAEXrrD,KAAKI,QAAQyrF,QACb7rF,KAAKjI,QAAQqJ,YAAYimF,EAAch8B,GAEvCrrD,KAAKjI,QAAQuvB,KAAK,aAAalmB,YAAYimF,EAAch8B,GAE7DrrD,KAAKI,QAAQirD,SAAWA,KAGhCnzD,EAAMuyF,QAAQ5C,eAAiBA,EAC/B3vF,EAAMuyF,QAAQG,kBAAkB,SAAUhD,EAAeC,GACrDC,EAAcH,EAAKjnF,QACnByrF,cAAe,SAAUC,GAAV,GAGP7/C,GACKzxC,EAHLsF,EAAUJ,KAAKI,QACfomB,EAAQpmB,EAAQisF,WAEpB,KAASvxF,EAAI,EAAGA,EAAI0rB,EAAM5uB,OAAQkD,IACzB0rB,EAAM1rB,GAAG8zC,MACVpoB,EAAM1rB,GAAG8zC,IAAM12C,EAAMyrB,QAEzB4oB,EAAO,GAAI6/C,GAAkB11F,EAAEgK,QAC3B4gB,OAAQlhB,EAAQkhB,OAChBuqE,SAAS,EACT3sF,KAAM,UACPsnB,EAAM1rB,IAAKkF,KAAKyqF,SACnBl+C,EAAKx0C,QAAQ++B,SAAS92B,KAAKjI,UAGnCyf,QAAS,WACLxX,KAAKjI,QAAQ4C,WAAWkJ,OAAO,UAAaslF,EAAe,YAAa7uF,SAAS8uF,GACjFppF,KAAKjI,QAAQ4C,WAAWkJ,OAAO,UAAaslF,EAAe,WAAY7uF,SAAS+uF,MAGxFnxF,EAAMuyF,QAAQ3C,YAAcA,EACxBC,EAAqBD,EAAYpnF,QACjCC,KAAM,SAAUP,EAASqqF,GACrB,GAAI1yF,GAAUiI,KAAKjI,QAAUrB,EAAE,cAC/BsJ,MAAKI,QAAUA,EACfJ,KAAKyqF,QAAUA,EACfzqF,KAAK+qF,YACD3qF,EAAQ2rF,OACRh0F,EAAQuC,SAAS,WAAa8F,EAAQ2rF,OAE1C/rF,KAAKmsF,cAAcvE,GACnB5nF,KAAK+pC,aACL/pC,KAAK8qF,aACL9qF,KAAK6qF,kBACL7qF,KAAKwX,UACLzf,EAAQuC,SAASuuF,GACjB7oF,KAAKjI,QAAQyD,MACT0D,KAAM,cACNotF,YAAatsF,UAIzB9H,EAAMuyF,QAAQ1C,mBAAqBA,EAC/BC,EAAsBF,EAAYpnF,QAClCC,KAAM,SAAUP,EAASqqF,GACrB,GAAI1yF,GAAUiI,KAAKjI,QAAUrB,EAAE,YAC/BsJ,MAAKI,QAAUA,EACfJ,KAAKyqF,QAAUA,EACfzqF,KAAK7B,UAAW,EAChB6B,KAAKgrF,oBACLhrF,KAAKmsF,cAActE,GACnB7nF,KAAK+pC,aACL/pC,KAAK8qF,aACL9qF,KAAK6qF,kBACL7qF,KAAKwX,UACLzf,EAAQuC,UAAU8F,EAAQkhB,OAAS,GAAKunE,GAAgB,qBACxD7oF,KAAKjI,QAAQyD,MACT0D,KAAM,cACNotF,YAAatsF,QAGrBksF,eAAgB,WACZlsF,KAAKjI,QAAQuC,SAASiwF,OAG9BryF,EAAMuyF,QAAQzC,oBAAsBA,EACpC9vF,EAAMuyF,QAAQG,kBAAkB,cAAe7C,EAAoBC,GAC/DC,EAAqBN,EAAKjnF,QAC1BC,KAAM,SAAUP,EAASqqF,GACrB,GAAI1yF,GAAUiI,KAAKjI,QAAUrB,EAAE,eAAiBoyF,EAAe,wBAC/D9oF,MAAKI,QAAUA,EACfJ,KAAKyqF,QAAUA,EACfzqF,KAAKusF,WAAa,GAAI3E,GAAclxF,EAAEgK,UAAWN,GAAW6qF,QAAQ,IAAUR,GAC9EzqF,KAAKwsF,YAAc91F,EAAE,aAAegyF,EAAS,IAAMkB,EAAqB,mBAAqBxpF,EAAQkhB,OAAS,uBAAyB,4BAA8B,iBACrKthB,KAAKysF,aAAe/1F,EAAE,cAAgBizF,EAAiB,WACvD3pF,KAAKusF,WAAWx0F,QAAQqtB,WAAW,iBAAiB0R,SAAS/+B,GAC7DiI,KAAKwsF,YAAY11D,SAAS/+B,GAC1BiI,KAAKysF,aAAa31D,SAAS/+B,GACvBqI,EAAQ2rF,OACRh0F,EAAQuC,SAAS,WAAa8F,EAAQ2rF,OAErC3rF,EAAQyjB,KACTzjB,EAAQyjB,GAAKzjB,EAAQwuC,KAEzB72C,EAAQmL,KAAK,KAAM9C,EAAQyjB,GAAK,YAChC7jB,KAAK6qF,kBACL7qF,KAAK8qF,aACL9qF,KAAK0sF,oBACL1sF,KAAK2sF,cACL3sF,KAAK4sF,eACL5sF,KAAKusF,WAAWM,MAAO,EACvB7sF,KAAKyf,OAAOrf,EAAQqf,QAChBrf,EAAQ6qF,QACRjrF,KAAKc,OAET/I,EAAQyD,MACJ0D,KAAM,cACN4tF,YAAa9sF,KACb+sF,WAAY/sF,KAAK69E,SAGzB+O,aAAc,WACV,GAAIhmF,GAAO5G,IACX4G,GAAK6lF,aAAa/mF,GAAG,UAAW,IAAMgjF,EAAQ,SAAUzgF,GACpD,GAAI+kF,GAAKt2F,EAAEuR,EAAEmY,QAAQxmB,QACrBqO,GAAE9D,iBACE8D,EAAEmuB,UAAYzU,EAAKM,KAAOha,EAAEmuB,UAAYzU,EAAKI,KAAO9Z,EAAEglF,QAAUhlF,EAAEmuB,UAAYzU,EAAKQ,IACnFvb,EAAKuZ,SACLvZ,EAAK2tB,SACEtsB,EAAEmuB,UAAYzU,EAAKU,KAC1BmlE,EAAqBwF,EAAI,QAAQz4D,QAC1BtsB,EAAEmuB,UAAYzU,EAAKQ,GAC1BqlE,EAAqBwF,EAAI,QAAQz4D,QAC1BtsB,EAAEmuB,UAAYzU,EAAKa,UAAYva,EAAEmuB,UAAYzU,EAAKK,OACzDpb,EAAK6jF,QAAQ1pD,WAAW/4B,QAAQ,OAASoY,OAAQ1pB,EAAEuR,EAAEmY,aAIjEssE,kBAAmB,WAAA,GAGXngD,GACKzxC,EAHLsF,EAAUJ,KAAKI,QACfomB,EAAQpmB,EAAQ8sF,WAEpB,KAASpyF,EAAI,EAAGA,EAAI0rB,EAAM5uB,OAAQkD,IAC9ByxC,EAAO,GAAIq7C,GAAclxF,EAAEgK,QACvB4gB,OAAQlhB,EAAQkhB,OAChBpiB,KAAM,SACN8hB,MAAO5gB,EAAQ4gB,OAChBwF,EAAM1rB,IAAKkF,KAAKyqF,SACnBl+C,EAAKx0C,QAAQe,KAAK,aAAac,SAASk9B,SAAS92B,KAAKysF,eAG9DE,YAAa,WAAA,GACLvsF,GAAUJ,KAAKI,QACfrI,EAAUiI,KAAKjI,OACnBiI,MAAKysF,aAAavpF,KAAK,KAAM9C,EAAQyjB,GAAK,eAAe3gB,KAAKsnF,GAAgBpqF,EAAQ+sF,SAClF/sF,EAAQkhB,SACRthB,KAAKysF,aAAenF,EAAgBtnF,KAAKysF,eAE7CzsF,KAAK69E,MAAQ79E,KAAKysF,aAAaM,YAC3Bj2D,SAAU12B,EAAQkhB,OAAS5qB,EAAE0J,EAAQkhB,QAAQ3mB,SAAS,YAAc,KACpEuhF,OAAQnkF,EACRsG,MAAO2B,KAAKyqF,QAAQjJ,OACpB1E,kBAAkB,EAClBV,UAAWh8E,EAAQg8E,UACnBC,KAAM2K,EACNR,SAAU,WACNxmF,KAAKjI,QAAQuvB,KAAK,mBAAmBlwB,QAAQm9B,SAEjD+nD,MAAO,WACHvkF,EAAQw8B,WAEb/4B,KAAK,cACRwE,KAAK69E,MAAM9lF,QAAQ2N,GAAG2xE,GAAO,aAAckQ,IAE/Cr/D,OAAQ,WACJloB,KAAK69E,MAAM9lF,QAAQ6xB,IAAIytD,GAAO,cAC9Br3E,KAAK69E,MAAM/3D,UACX9lB,KAAKjI,QAAQmwB,UAEjB/H,OAAQ,WACJngB,KAAK69E,MAAM19D,UAEfV,OAAQ,SAAUyrE,GACVA,IAAct0F,IACds0F,GAAY,GAEhBlrF,KAAKusF,WAAW9sE,OAAOyrE,GACvBlrF,KAAKI,QAAQqf,OAASyrE,GAE1B32D,MAAO,WACHv0B,KAAKjI,QAAQw8B,SAEjBzzB,KAAM,WACEd,KAAK69E,OACL79E,KAAK69E,MAAMvB,QAEft8E,KAAKjI,QAAQuC,SAAS6uF,GAAcroF,OACpCd,KAAKI,QAAQ6qF,QAAS,GAE1BjxF,KAAM,WACFgG,KAAKjI,QAAQ4yD,YAAYw+B,GAAcroF,OACvCd,KAAKI,QAAQ6qF,QAAS,KAG9B/yF,EAAMuyF,QAAQxC,mBAAqBA,EAC/BC,EAAsBP,EAAKjnF,QAC3BC,KAAM,SAAUP,EAASqqF,GAAnB,GACqGl+C,GAM9FzxC,EANL/C,EAAUiI,KAAKjI,QAAUrB,EAAE,cAAgBoyF,EAAe,WAAYtiE,EAAQpmB,EAAQ8sF,WAM1F,KALAltF,KAAKI,QAAUA,EACfJ,KAAKyqF,QAAUA,EACfzqF,KAAK7B,UAAW,EAChB6B,KAAKusF,WAAa,GAAI1E,GAAenxF,EAAEgK,QAASmrF,SAAS,GAAQzrF,IACjEJ,KAAKusF,WAAWx0F,QAAQ++B,SAAS/+B,GACxB+C,EAAI,EAAGA,EAAI0rB,EAAM5uB,OAAQkD,IAC9ByxC,EAAO,GAAIs7C,GAAenxF,EAAEgK,QACxB4gB,OAAQlhB,EAAQkhB,OAChBuqE,SAAS,GACVrlE,EAAM1rB,IAAKkF,KAAKyqF,SACnBl+C,EAAKx0C,QAAQ++B,SAAS/+B,EAE1BiI,MAAK8qF,aACL9qF,KAAK6qF,kBACL7qF,KAAKusF,WAAWM,MAAO,EACvB90F,EAAQyD,MACJ0D,KAAM,cACN4tF,YAAa9sF,QAGrBksF,eAAgB,WACZlsF,KAAKjI,QAAQuC,SAASiwF,OAG9BryF,EAAMuyF,QAAQvC,oBAAsBA,EACpChwF,EAAMuyF,QAAQG,kBAAkB,cAAe3C,EAAoBC,GAC/DC,EAAmBR,EAAKjnF,QACxBC,KAAM,SAAUP,EAASqqF,GACrB,GAAI1yF,GAAUiI,KAAKjI,QAAUrB,EAAE,oBAC/BsJ,MAAKjI,QAAUA,EACfiI,KAAKI,QAAUA,EACfJ,KAAKyqF,QAAUA,EACfzqF,KAAK+pC,aACL/pC,KAAK+qF;AACL/qF,KAAK8qF,aACL9qF,KAAK6qF,kBACL9yF,EAAQuC,SAASyuF,GACjBhxF,EAAQyD,MACJ0D,KAAM,YACNkuF,UAAWptF,UAInBooF,EAAoBT,EAAKjnF,QACzBC,KAAM,SAAUP,EAASqqF,GACrB,GAAI1yF,GAAUiI,KAAKjI,QAAUrB,EAAE,kBAC/BsJ,MAAKjI,QAAUA,EACfiI,KAAKI,QAAUA,EACfJ,KAAKyqF,QAAUA,EACfzqF,KAAK7B,UAAW,EAChB6B,KAAK+pC,aACL/pC,KAAK8qF,aACL9qF,KAAKgrF,oBACLjzF,EAAQuC,SAASyuF,GACjBhxF,EAAQyD,MACJ0D,KAAM,YACNkuF,UAAWptF,QAGnBksF,eAAgB,WACZlsF,KAAKjI,QAAQuC,SAASiwF,OAG9BryF,EAAMuyF,QAAQG,kBAAkB,YAAazC,EAAkBC,GAC3DC,EAAeV,EAAKjnF,QACpBC,KAAM,SAAU8B,EAAUrC,EAASqqF,GAC/B,GAAI1yF,GAAUmE,EAAWuG,GAAYA,EAASrC,GAAWqC,CAIrD1K,GAHEA,YAAmB8sB,QAGX9sB,EAAQe,KAAK,eAAec,SAF5BlD,EAAE,eAAegM,KAAK3K,GAIpCiI,KAAKjI,QAAUA,EACfiI,KAAKI,QAAUA,EACfJ,KAAKI,QAAQlB,KAAO,WACpBc,KAAKyqF,QAAUA,EACfzqF,KAAK+pC,aACL/pC,KAAK8qF,aACL9qF,KAAK+qF,YACL/qF,KAAK6qF,kBACL9yF,EAAQyD,MACJ0D,KAAM,WACNuD,SAAUzC,UAItB9H,EAAMuyF,QAAQpC,aAAeA,EACzBC,EAAuBX,EAAKjnF,QAC5BC,KAAM,SAAU8B,EAAUrC,EAASqqF,GAC/B,GAAI1yF,GAAiCrB,EAAvBwF,EAAWuG,GAAcA,EAASrC,GAAcqC,EAI1D1K,GAHEA,YAAmB8sB,QAGX9sB,EAAQe,KAAK,aAAac,SAF1BlD,EAAE,aAAagM,KAAK3K,GAIlCiI,KAAKjI,QAAUA,EACfiI,KAAKI,QAAUA,EACfJ,KAAKI,QAAQlB,KAAO,WACpBc,KAAKyqF,QAAUA,EACfzqF,KAAK7B,UAAW,EAChB6B,KAAK+pC,aACL/pC,KAAK8qF,aACL9qF,KAAKgrF,oBACLhrF,KAAK6qF,kBACL9yF,EAAQyD,MACJ0D,KAAM,WACNuD,SAAUzC,QAGlBksF,eAAgB,WACZlsF,KAAKjI,QAAQuC,SAASiwF,OAG9BryF,EAAMuyF,QAAQnC,qBAAuBA,EAsCjCC,EAAQ1xF,EAAM6J,QACdC,KAAM,SAAUuO,GACZlP,KAAKkP,KAAOA,EACZlP,KAAKqsF,YAET/qF,IAAK,SAAU60E,GACXn2E,KAAKqsF,QAAQrsF,KAAKqsF,QAAQz0F,QAAUu+E,GAExCjuD,OAAQ,SAAUiuD,GACd,GAAIhkE,GAAQzb,EAAEuM,QAAQkzE,EAAQn2E,KAAKqsF,QACnCrsF,MAAKqsF,QAAQjkF,OAAO+J,EAAO,IAE/B2iB,OAAQ,SAAUqhD,GAAV,GACAhf,GACKr8D,CAAT,KAASA,EAAI,EAAGA,EAAIkF,KAAKqsF,QAAQz0F,OAAQkD,IACrCq8D,EAAMn3D,KAAKqsF,QAAQvxF,GACnBq8D,EAAIriC,QAAO,EAEfqhD,GAAOrhD,QAAO,GACVqhD,EAAOgV,QACPhV,EAAOgV,OAAOr2D,QAAO,MAI7B0zD,EAAUxjF,EAAOtE,QACjBC,KAAM,SAAU5I,EAASqI,GAAnB,GAqCWtF,GApCT8L,EAAO5G,IAmCX,IAlCAgF,EAAOf,GAAGtD,KAAKwH,KAAKvB,EAAM7O,EAASqI,GACnCA,EAAUwG,EAAKxG,QACfrI,EAAU6O,EAAKvN,QAAUuN,EAAK7O,QAC9BA,EAAQuC,SAASmuF,EAAU,aAC3BzoF,KAAK4uC,IAAM12C,EAAMyrB,OACjB3jB,KAAKwhF,OAAStpF,EAAMC,QAAQkG,MAAMtG,GAClCiI,KAAKqtF,WACLt1F,EAAQmL,KAAKsnF,GAAgBxqF,KAAK4uC,KAClChoC,EAAK0mF,SAAqC,iBAAnBltF,GAAQkhB,OAAuBlhB,EAAQkhB,OAAS1a,EAAK7O,QAAQkgB,QAAQ,YAAY,GACxGrR,EAAKw1E,UAAYx1E,EAAK0mF,UAAajR,MAAQt8E,QAAS,YAChD6G,EAAK0mF,WACLv1F,EAAQuC,SAAS,aACjBivF,EAAO,UACPC,EAAc,MACdd,EAAS,YACTG,EAAe,2BACfxB,EAAe,kBACf6B,EAAiB,qBAEjB9oF,EAAQgrF,WACRxkF,EAAK2mF,kBACLx1F,EAAQuC,SAAS2uF,GACjBriF,EAAK4mF,mBAAqB,GAAIt1F,GAAM0pC,WAAWh7B,EAAK7O,SAChD8lB,UAAW,EACX6kB,gBAAgB,EAChB7+B,OAAQ,IAAMgmF,EACd/kD,IAAK9+B,EAAMY,EAAK6mF,gBAAiB7mF,KAErCA,EAAK8mF,eAAiBx1F,EAAMuxB,SAAS,WACjC7iB,EAAKqa,YAGTra,EAAKi3E,OAAU9lF,QAASrB,OAExB0J,EAAQomB,OAASpmB,EAAQomB,MAAM5uB,OAC/B,IAASkD,EAAI,EAAGA,EAAIsF,EAAQomB,MAAM5uB,OAAQkD,IACtC8L,EAAKtF,IAAIlB,EAAQomB,MAAM1rB,GAG/B8L,GAAKm6B,WAAa,GAAI7oC,GAAM0pC,WAAWrkC,UACnCsgB,UAAW,EACX6kB,gBAAgB,EAChB7+B,OAAQ,IAAM2mF,GAAiB,IAAMxqF,KAAK4uC,IAAM,OAAS85C,EAAS,MAAa8B,GAAiB,IAAMxqF,KAAK4uC,IAAM,MAAQ+5C,EACzH7jD,IAAK9+B,EAAMY,EAAK+mF,aAAc/mF,GAC9B06B,MAAO8lD,EACPwG,QAASxG,IAEbxgF,EAAK7O,QAAQ2N,GAAG2xE,GAAO,aAAckQ,GACrC3gF,EAAKgmF,eACDxsF,EAAQgrF,WACRxkF,EAAKi3E,MAAM9lF,QAAQ2N,GAAG2xE,GAAO,IAAekQ,GAE5CnnF,EAAQgrF,WACRprF,KAAK6tF,wBAET31F,EAAM0uB,OAAOhgB,IAEjBc,QACI2vE,GACA4S,GACAlP,GACAC,GACAkP,GACAC,IAEJ/pF,SACI8O,KAAM,UACNsX,SACA4kE,WAAW,EACX9pE,OAAQ,MAEZkqE,WAAY,SAAUrV,EAAQ5S,GAC1B,GAAIz1B,EAOJ,OAHIA,GAHC9tC,KAAKqtF,QAAQ9pB,GAGNvjE,KAAKqtF,QAAQ9pB,GAFbvjE,KAAKqtF,QAAQ9pB,GAAa,GAAIglB,GAI1Cz6C,EAAMxsC,IAAI60E,GACHroC,GAEXhoB,QAAS,WACL,GAAIlf,GAAO5G,IACX4G,GAAK7O,QAAQuvB,KAAK,IAAMwhE,GAAcprF,KAAK,SAAUC,EAAK5F,GACtDrB,EAAEqB,GAASyD,KAAK,cAAcsqB,YAElClf,EAAK7O,QAAQ6xB,IAAIytD,GAAO,cACxBzwE,EAAKm6B,WAAWjb,UACZlf,EAAKxG,QAAQgrF,YACblzF,EAAMyxB,aAAa/iB,EAAK8mF,gBACxB9mF,EAAK4mF,mBAAmB1nE,UACxBlf,EAAKi3E,MAAM9lF,QAAQ6xB,IAAIytD,GAAO,cAC9BzwE,EAAKi3E,MAAM/3D,WAEf9gB,EAAOf,GAAG6hB,QAAQ3d,KAAKvB,IAE3BtF,IAAK,SAAUlB,GAAV,GACsE0tF,GAA6HC,EAQvLjzF,EARTkzF,EAAYtG,EAAWtnF,EAAQlB,MAAOuD,EAAWrC,EAAQqC,SAAgBmE,EAAO5G,KAAMiuF,EAAcrnF,EAAK0mF,SAAW,GAAK,yBAA0BY,EAAmB9tF,EAAQ8tF,gBAOlL,IANAx3F,EAAEgK,OAAON,GACLwuC,IAAK12C,EAAMyrB,OACXy4D,UAAWx1E,EAAKw1E,UAChB96D,OAAQ1a,EAAK0mF,SACbH,QAASvmF,EAAKgoC,MAEdxuC,EAAQ8sF,YACR,IAASpyF,EAAI,EAAGA,EAAIsF,EAAQ8sF,YAAYt1F,OAAQkD,IAC5CpE,EAAEgK,OAAON,EAAQ8sF,YAAYpyF,IAAM8zC,IAAK12C,EAAMyrB,QAGlDlhB,KAAayrF,EACb9tF,EAAQjC,SAAWisF,GACXhqF,EAAQjC,WAChBiC,EAAQjC,SAAWksF,IAEnBjqF,EAAQjC,WAAaisF,IAAkBxjF,EAAKxG,QAAQgrF,YAChD8C,EACAH,EAAe,GAAIzF,GAAqB4F,EAAkB9tF,EAASwG,GAC5DonF,IACPD,EAAe,GAAIC,GAAU7vF,SAASiC,EAASwG,GAC/CmnF,EAAah2F,QAAQuC,SAAS2zF,IAE9BF,IACI3tF,EAAQjC,WAAaksF,IACrB0D,EAAa7B,iBAEjB6B,EAAah2F,QAAQ++B,SAASlwB,EAAKi3E,MAAMl2D,WACzC/gB,EAAKke,QAAQ,UAAW,WACpB,OAASyB,SAAUwnE,EAAah2F,QAAQ0rB,WAIhDrjB,EAAQjC,WAAamsF,KACjB7nF,EACAqrF,EAAO,GAAIzF,GAAa5lF,EAAUrC,EAASwG,GACpConF,IACPF,EAAO,GAAIE,GAAUvD,QAAQrqF,EAASwG,IAEtCknF,IACIlnF,EAAKxG,QAAQgrF,WACb0C,EAAK/1F,QAAQ++B,SAASlwB,EAAK7O,SAASE,IAAI,aAAc,UACtD2O,EAAKunF,QAAQvnF,EAAK7O,QAAQihB,cAC1B80E,EAAK/1F,QAAQE,IAAI,aAAc,YAE/B61F,EAAK/1F,QAAQ++B,SAASlwB,EAAK7O,SAE/B6O,EAAKke,QAAQ,UAAW,WACpB,OAASyB,SAAUunE,EAAK/1F,QAAQ0rB,YAKhD2qE,SAAU,SAAU3G,GAChB,GAAI1vF,GAASs2F,EAAaC,EAAoDpvF,EAAtCqvF,EAAcvuF,KAAKI,QAAQgrF,SA0BnE,OAzBArzF,GAAUiI,KAAKjI,QAAQuvB,KAAKmgE,GACvB1vF,EAAQH,SACTG,EAAUrB,EAAE,+BAAiCsJ,KAAK4uC,IAAM,KAAKtnB,KAAKmgE,IAEtEvoF,EAAOnH,EAAQH,OAASG,EAAQyD,KAAK,QAAU,GAC/C6yF,EAAct2F,EAAQyD,KAAK0D,GACvBmvF,GACIA,EAAYxB,OACZ90F,EAAUA,EAAQ6B,OAAO,IAAMkvF,GAC/B5pF,EAAO,cACPmvF,EAAct2F,EAAQyD,KAAK0D,IAE3BqvF,IACAD,EAAeD,EAAYlD,SAExBoD,IACPx2F,EAAUiI,KAAK69E,MAAM9lF,QAAQuvB,KAAKmgE,GAClCvoF,EAAOnH,EAAQH,OAASG,EAAQyD,KAAK,QAAU,GAC/C8yF,EAAev2F,EAAQyD,KAAK0D,GACxBovF,GAAgBA,EAAazB,OAC7B90F,EAAUA,EAAQ6B,OAAO,IAAMkvF,GAC/B5pF,EAAO,cACPovF,EAAev2F,EAAQyD,KAAK0D,MAIhCA,KAAMA,EACNurF,QAAS4D,EACTlwF,SAAUmwF,IAGlBpmE,OAAQ,SAAUu/D,GACd,GAAIl7C,GAAOvsC,KAAKouF,SAAS3G,EACrBl7C,GAAKk+C,SACLl+C,EAAKk+C,QAAQviE,SAEbqkB,EAAKpuC,UACLouC,EAAKpuC,SAAS+pB,SAElBloB,KAAKihB,QAAO,IAEhBngB,KAAM,SAAU2mF,GACZ,GAAIl7C,GAAOvsC,KAAKouF,SAAS3G,EACrBl7C,GAAKk+C,UAC6B,WAA9Bl+C,EAAKk+C,QAAQrqF,QAAQlB,MAAqBqtC,EAAKk+C,QAAQrqF,QAAQyrF,SAC/Dt/C,EAAKk+C,QAAQ3pF,OACbyrC,EAAKk+C,QAAQmB,iBAAiBp0E,WACtB+0B,EAAKk+C,QAAQrqF,QAAQ6qF,QAC7B1+C,EAAKk+C,QAAQ3pF,QAGjByrC,EAAKpuC,WAC8B,WAA/BouC,EAAKpuC,SAASiC,QAAQlB,MAAqBqtC,EAAKpuC,SAASiC,QAAQyrF,SACjEt/C,EAAKpuC,SAAS2C,OACdyrC,EAAKpuC,SAASytF,iBAAiBp0E,WACvB+0B,EAAKpuC,SAASiC,QAAQ6qF,QAC9B1+C,EAAKpuC,SAAS2C,QAGtBd,KAAKihB,QAAO,IAEhBjnB,KAAM,SAAUytF,GACZ,GAAIl7C,GAAOvsC,KAAKouF,SAAS3G,EACrBl7C,GAAKk+C,UAC6B,WAA9Bl+C,EAAKk+C,QAAQrqF,QAAQlB,MAAqBqtC,EAAKk+C,QAAQrqF,QAAQyrF,SAC/Dt/C,EAAKk+C,QAAQzwF,OACbuyC,EAAKk+C,QAAQmB,iBAAiBp0E,WACvB+0B,EAAKk+C,QAAQrqF,QAAQ6qF,QAC5B1+C,EAAKk+C,QAAQzwF,QAGjBuyC,EAAKpuC,WAC8B,WAA/BouC,EAAKpuC,SAASiC,QAAQlB,MAAqBqtC,EAAKpuC,SAASiC,QAAQyrF,SACjEt/C,EAAKk+C,QAAQzwF,OACbuyC,EAAKpuC,SAASytF,iBAAiBp0E,WACxB+0B,EAAKpuC,SAASiC,QAAQ6qF,QAC7B1+C,EAAKpuC,SAASnE,QAGtBgG,KAAKihB,QAAO,IAEhBxB,OAAQ,SAAU1nB,EAAS0nB,GACvB,GAAI8sB,GAAOvsC,KAAKouF,SAASr2F,EACJ,KAAV0nB,IACPA,GAAS,GAET8sB,EAAKk+C,SACLl+C,EAAKk+C,QAAQhrE,OAAOA,GAEpB8sB,EAAKpuC,UACLouC,EAAKpuC,SAASshB,OAAOA,IAG7B+uE,qBAAsB,SAAUjrB,GAC5B,MAAOvjE,MAAKjI,QAAQuvB,KAAK,IAAMshE,EAAgB,gBAAmBrlB,EAAY,MAAO1/D,OAAO,IAAMwjF,IAEtGlnE,OAAQ,SAAUg2D,EAAQhrB,GACtB,GAAIpzD,GAAUrB,EAAEy/E,GAAS5pC,EAAOx0C,EAAQyD,KAAK,SACzC+wC,GAAKnsC,QAAQmrF,YACTpgC,IAAYv0D,IACZu0D,GAAU,GAEd5e,EAAKpsB,OAAOgrC,GAAS,KAG7BoiC,gBAAiB,WACb,GAAI3mF,GAAO5G,KAAM2qF,EAAoBjD,EAAWiD,kBAAmBtsF,EAAQuI,EAAK46E,OAAQiN,EAAsBpwF,EAAQ,OAAS,OAC/HuI,GAAK8jF,eAAiBh0F,EAAEgxF,EAAWgD,gBAAgBpwF,SAASouF,GAC5D9hF,EAAK7O,QAAQ+rD,OAAOl9C,EAAK8jF,gBACrB9jF,EAAK0mF,UACL1mF,EAAK8jF,eAAe5mC,OAAO,yCAC3B6mC,EAAoBrD,EAAgBqD,IAEpC/jF,EAAK8jF,eAAe5mC,OAAO,kDAE/Bl9C,EAAKi3E,MAAQ,GAAI3lF,GAAMmpB,GAAG06D,MAAM4O,GAC5BnzB,OAAQ,UAAYi3B,EACpBp4B,SAAU,OAASo4B,EACnBvS,OAAQt1E,EAAK8jF,eACbrsF,MAAOA,EACP+9E,UAAWx1E,EAAKw1E,UAChBtlD,SAAUlwB,EAAK0mF,SAAW52F,EAAEkQ,EAAK0mF,UAAU3yF,SAAS,YAAc,KAClEmiF,kBAAkB,EAClBT,KAAM,SAAUp0E,GACZ,GAAI5O,GAAUnB,EAAMY,KAAK8N,EAAKi3E,MAAM9lF,SAASuC,SAAS,qBACjDsM,GAAK0mF,SAGN1mF,EAAKi3E,MAAMl2D,UAAU1vB,IAAI,aAAckK,WAAWzL,EAAE,uBAAuByiB,eAAiB,GAAK,MAFjG9f,EAAQpB,IAAI,eAAgBoG,KAAa,KAAO7E,EAAWH,GAAWA,EAAQJ,SAAW,EAAI,IAI7F2N,EAAKoB,QAAQkiF,KACbjiF,EAAE9D,kBAGVqiF,SAAU,WACNxmF,KAAKjI,QAAQuvB,KAAK,mBAAmBlwB,QAAQm9B,SAEjD+nD,MAAO,SAAUr0E,GACTrB,EAAKoB,QAAQmiF,KACbliF,EAAE9D,iBAENnE,KAAKjI,QAAQw8B,WAGrB3tB,EAAKi3E,MAAM9lF,QAAQ2N,GAAG,UAAW,IAAMgjF,EAAQ,SAAUzgF,GACrD,GAAwHlQ,GAApHqoB,EAAS1pB,EAAEuR,EAAEmY,QAAS4sE,EAAK5sE,EAAOxmB,SAAU80F,EAAgB1B,EAAGjzF,GAAG,IAAM8uF,IAAiBmE,EAAGjzF,GAAG,IAAM+uF,EACzG7gF,GAAE9D,iBACE8D,EAAEmuB,UAAYzU,EAAKM,KAAOha,EAAEmuB,UAAYzU,EAAKI,KAAO9Z,EAAEglF,QAAUhlF,EAAEmuB,UAAYzU,EAAKQ,IACnFvb,EAAK6mF,kBACL7mF,EAAK8jF,eAAen2D,SACbtsB,EAAEmuB,UAAYzU,EAAKU,MAC1BtqB,GAAW22F,GAAiBA,GAAiBtuE,EAAOrmB,GAAG,eAAiBizF,EAAK5sE,EAC7EonE,EAAqBzvF,EAAS,QAAQw8B,SAC/BtsB,EAAEmuB,UAAYzU,EAAKQ,IAC1BpqB,GAAW22F,GAAiBA,GAAiBtuE,EAAOrmB,GAAG,gBAAkBizF,EAAK5sE,EAC9EonE,EAAqBzvF,EAAS,QAAQw8B,SAC/BtsB,EAAEmuB,UAAYzU,EAAKa,UAAYva,EAAEmuB,UAAYzU,EAAKK,OACzDpb,EAAKm6B,WAAW/4B,QAAQ,OAASoY,OAAQ1pB,EAAEuR,EAAEmY,YAIjDxZ,EAAKi3E,MAAMl2D,UADX/gB,EAAK0mF,SACkB1mF,EAAKi3E,MAAM9lF,QAAQuvB,KAAK,IAAMwiE,GAE9BljF,EAAKi3E,MAAM9lF,QAEtC6O,EAAKi3E,MAAMl2D,UAAUzkB,KAAKsnF,GAAgBxqF,KAAK4uC,MAEnDi/C,sBAAuB,WACnB,GAAIc,IAAqB,CAErBA,GADA3uF,KAAKI,QAAQkhB,OACQthB,KAAK69E,MAAM9lF,QAAQuvB,KAAK,IAAMwiE,GAAoBnvF,SAAS,SAAW4vF,GAAkB,MAAQvB,EAAQ,KAAKpxF,OAAS,EAEtHoI,KAAK69E,MAAM9lF,QAAQ4C,SAAS,SAAW4vF,GAAkB,MAAQvB,EAAQ,KAAKpxF,OAAS,EAG5GoI,KAAK0qF,eAAezyF,IADpB02F,GAEIzhB,WAAY,UACZj0E,MAAO,KAIPi0E,WAAY,SACZj0E,MAAO,SAInB00F,aAAc,SAAU1lF,GACpB,GAAiB41E,GAAOz9D,EAAQmsB,EAAMqiD,EAAwFnnF,EAAS2rE,EAAWyb,EAA9IjoF,EAAO5G,KAA2C8uF,EAAqB7mF,EAAEmY,OAAOnI,QAAQ,IAAM2xE,GAAoBhyF,MAEtH,OADAqQ,GAAE9D,iBACE2qF,GACAloF,EAAKmoF,QAAQ9mF,GACb,IAEJmY,EAAS1pB,EAAEuR,EAAEmY,QAAQnI,QAAQ,IAAMywE,EAAQ9hF,EAAK7O,SAC5CqoB,EAAOvmB,SAASgwF,KAGpBt9C,EAAOnsB,EAAO5kB,KAAK,WACd+wC,GAAQ3lC,EAAKi3E,QACdz9D,EAAS1pB,EAAEuR,EAAEmY,QAAQnI,QAAQ,IAAM0wE,EAAiB/hF,EAAKi3E,MAAMl2D,WAC/D4kB,EAAOnsB,EAAOxmB,OAAO,MAAM4B,KAAK,WAE/B+wC,GAASA,EAAKnsC,QAAQqf,SAGvB8sB,EAAKnsC,QAAQmrF,WACb9jF,EAAUvL,EAAWqwC,EAAKm/C,eAAiBn/C,EAAKm/C,cAAgB,KAChEn/C,EAAKpsB,QAAQosB,EAAKnsC,QAAQirD,UAAU,GACpC+nB,GACIhzD,OAAQA,EACR0tB,MAAOvB,EAAKnsC,QAAQ0tC,MACpBqd,QAAS5e,EAAKnsC,QAAQirD,SACtBxnC,GAAI0oB,EAAKnsC,QAAQyjB,IAEjBpc,GACAA,EAAQU,KAAKvB,EAAMwsE,GAEvBxsE,EAAKoB,QAAQiiF,GAAQ7W,KAErB3rE,EAAUvL,EAAWqwC,EAAKk/C,cAAgBl/C,EAAKk/C,aAAe,KAC9DrY,GACIlrE,OAAQtB,EACRwZ,OAAQA,EACRyD,GAAI0oB,EAAKnsC,QAAQyjB,IAEjBpc,GACAA,EAAQU,KAAKvB,EAAMwsE,GAEvBxsE,EAAKoB,QAAQqvE,GAAOjE,IAEpB7mC,EAAKnsC,QAAQ+iB,MACTopB,EAAKnsC,QAAQ2pC,YAAcwC,EAAKnsC,QAAQ2pC,WAAW3pB,SACnDyuE,EAAYtiD,EAAKnsC,QAAQ2pC,WAAW3pB,QAExCzpB,OAAO0lF,KAAK9vC,EAAKnsC,QAAQ+iB,IAAK0rE,GAAa,UAE3CzuE,EAAOvmB,SAAS8uF,IAChB/hF,EAAKi3E,MAAMvB,QAEfsS,EAAiBxuE,EAAOnI,QAAQ,sBAC5B22E,EAAe,KACf/Q,EAAQ+Q,EAAepzF,KAAK,eAC3BqiF,EAAQA,EAAQ+Q,EAAejrF,QAAQ,qBAAqBnI,KAAK,eAAe8gF,WAjDrFl8D,IAoDJwsE,aAAc,WACV,GAAIhmF,GAAO5G,IACX4G,GAAK7O,QAAQmL,KAAK,WAAY,GAAGqxB,MAAM,WACnC,GAAIx8B,GAAUrB,EAAEsJ,MAAMsnB,KAAK,wBACJ,KAAnBvvB,EAAQH,SAGRG,EAAQgC,GAAG,IAAM8vF,KACjB9xF,EAAUyvF,EAAqBzvF,EAAS,SAE5CA,EAAQ,GAAGw8B,WACZ7uB,GAAG,UAAWM,EAAMY,EAAKqxE,SAAUrxE,KAE1CqxE,SAAU,SAAUhwE,GAAV,GAGElQ,GAAoDi3F,EAAsBC,EAqB1EC,EAcIC,EAOJrC,EACAsC,EA7CJhvE,EAAS1pB,EAAEuR,EAAEmY,QAASgW,EAAUnuB,EAAEmuB,QAAS5P,EAAQxmB,KAAKjI,QAAQ4C,SAAS,6BA2C7E,OA1CIy7B,KAAYzU,EAAKI,MACbhqB,EAAUqoB,EAAOm+D,aAAav+E,KAAKjI,SAASu3B,OAAQ0/D,GAAe,EAAOC,GAAgB,EACzFl3F,EAAQH,SACTG,EAAUqoB,GAEVroB,EAAQgC,GAAG,IAAM8vF,KACb5hF,EAAEouB,UACFpuB,EAAE9D,iBAEFqiB,EAAM8I,OAAOv1B,GAAG,mBAChBysB,EAAM8I,OAAOiF,QAEb/N,EAAM8I,OAAOhI,KAAK,mBAAmBgI,OAAOiF,SAG/CtsB,EAAEouB,UAAY7P,EAAMrU,MAAMpa,KAAayuB,EAAM5uB,OAAS,IAEnDo3F,GADAj3F,EAAQgC,GAAG,IAAM8uF,IACFzoE,EAAOrmB,GAAG,gBAK7Bm1F,EAAc1oE,EAAMrU,MAAMpa,KAAayuB,EAAMyuD,IAAI,sBAAsB79E,QAAQ+a,QAC/ElK,EAAEouB,UAAY64D,IAEVD,GADAl3F,EAAQgC,GAAG,IAAM8uF,IACDzoE,EAAOrmB,GAAG,iBAK9Bi1F,GAAgBhvF,KAAK0qF,gBAA4D,WAA1C1qF,KAAK0qF,eAAezyF,IAAI,gBAC/DgQ,EAAE9D,iBACFnE,KAAK0qF,eAAen2D,SAEpB06D,IACAhnF,EAAE9D,iBACEgrF,EAAgBnvF,KAAKqvF,kBAAkBrvF,KAAK3G,SAC5C81F,GACAA,EAAc56D,UAItBtsB,EAAEglF,QAAU72D,IAAYzU,EAAKU,MACzByqE,EAAcp2F,EAAE6G,SAASiV,eAAehX,KAAK,eAC7C4zF,EAAmB14F,EAAE6G,SAASiV,eAAezY,GAAG,IAAM8vF,GACtDiD,EACAA,EAAY3sE,SACLivE,GACPpvF,KAAKytF,kBAET,GAECr3D,IAAYzU,EAAKa,UAAY4T,IAAYzU,EAAKK,OAAW5B,EAAOrmB,GAAG,mBAAxE,GACIkO,EAAE9D,iBACEic,EAAOrmB,GAAG,IAAM+uF,KAChB1oE,EAASA,EAAOzlB,WAAWvD,SAE/B4I,KAAK+gC,WAAW/4B,QAAQ,OAASoY,OAAQA,IACzC,IAGRivE,kBAAmB,SAAUt3F,GACzB,GAAIA,EAAQgC,GAAG,QACX,MAAOhC,EAEX,IAAIu3F,GAAgBC,EAAaC,EAAez3F,EAAQ03F,SAWxD,OAVAD,GAAa9xF,KAAK,WAEd,MADA6xF,GAAc74F,EAAEsJ,MACZuvF,EAAYx1F,GAAG,oBACfu1F,EAAiBC,GACV,GACAA,EAAYjoE,KAAK,mBAAmB1vB,OAAS,GACpD03F,EAAiBC,EAAYjoE,KAAK,mBAAmBgI,QAC9C,GAFJ,IAKPggE,EACOA,EAEAtvF,KAAKqvF,kBAAkBt3F,EAAQ6B,WAG9Cm1F,QAAS,SAAU9mF,GACf,GAA+E7D,GAA3E0oF,EAAcp2F,EAAEuR,EAAEmY,QAAQnI,QAAQ,IAAM6wE,GAActtF,KAAK,cAC/DyM,GAAE9D,iBACG2oF,EAAY1sF,QAAQqf,SAIrBrb,EADA0oF,EAAYjP,MAAM9lF,QAAQgC,GAAG,YACRiG,KAAKgI,QAAQgzE,IAAS56D,OAAQ0sE,EAAY/0F,UAE1CiI,KAAKgI,QAAQ+yE,IAAQ36D,OAAQ0sE,EAAY/0F,UAE7DqM,GACD0oF,EAAY3sE,WAGpBstE,gBAAiB,WACbztF,KAAK69E,MAAM19D,UAEfwF,QAAS,SAAU1d,GACf,GAAIynF,GAAiBznF,EAAEhP,KAClB+G,MAAKI,QAAQgrF,YAGlBprF,KAAK69E,MAAMvB,QACXt8E,KAAKmuF,QAAQuB,GACb1vF,KAAK2vF,SAASD,GACd1vF,KAAK4vF,gBACL5vF,KAAK6tF,0BAETgC,eAAgB,WACZ,GAAIC,GAAgB,CAIpB,OAHA9vF,MAAKjI,QAAQ4C,SAAS,kBAAqBwuF,EAAe,MAAOzrF,KAAK,WAClEoyF,GAAiBt2F,EAAW9C,EAAEsJ,OAAO,KAElCpB,KAAK2iD,KAAKuuC,IAErB3B,QAAS,SAAUuB,GAAV,GACDK,GAAgBC,EAGPl1F,CAFb,IAAI40F,EAAiB1vF,KAAK6vF,iBAEtB,IADAG,EAAkBhwF,KAAKjI,QAAQ4C,SAAS,0CAA8CkvF,EAAkB,KAC/F/uF,EAAIk1F,EAAgBp4F,OAAS,EAAGkD,GAAK,IAC1Ci1F,EAAiBC,EAAgBjnE,GAAGjuB,KAChC40F,EAAiB1vF,KAAK6vF,mBAFmB/0F,IAKzCkF,KAAKiwF,UAAUF,IAK/BJ,SAAU,SAAUD,GAAV,GACFK,GAAgBG,EAGPp1F,CAFb,IAAI40F,EAAiB1vF,KAAK6vF,iBAEtB,IADAK,EAAiBlwF,KAAKjI,QAAQ4C,SAAS,iBAAoBwuF,EAAe,MACjEruF,EAAI,EAAGA,EAAIo1F,EAAet4F,SAC/Bm4F,EAAiBG,EAAennE,GAAGjuB,KAC/B40F,EAAiB1vF,KAAK6vF,mBAAqB7vF,KAAKmwF,UAAUJ,EAAgBL,IAFvC50F,OAQnDm1F,UAAW,SAAU1jD,GACjBA,EAAKzrC,OACDd,KAAK69E,OACL79E,KAAK69E,MAAMl2D,UAAUL,KAAK,iBAAoBilB,EAAK/wC,KAAK,OAAS,MAAOmvD,YAAY4/B,KAG5F4F,UAAW,SAAU5jD,EAAMmjD,GACvB,SAAInjD,EAAK30C,QAAU83F,EAAiB1vF,KAAK6vF,iBAAmBr2F,EAAW+yC,GAAM,MACzEA,EAAKvyC,OACDgG,KAAK69E,OACL79E,KAAK69E,MAAMl2D,UAAUL,KAAK,iBAAoBilB,EAAK/wC,KAAK,OAAS,MAAOlB,SAASiwF,KAE9E,IAIfqF,cAAe,WACX,GAAIQ,GAAgBpwF,KAAK69E,MAAMl2D,UAAUhtB,WAAY01F,EAAerwF,KAAKjI,QAAQ4C,SAAS,4BAA6B21F,EAAuBF,EAAcvsF,OAAO,4BAA6B0sF,EAAsBF,EAAaxsF,OAAO,WAC1OusF,GAAc9uF,IAAI+uF,GAAc1lC,YAAYo/B,EAAwB,IAAMC,IAC1EsG,EAAqBl5F,QAAQkK,IAAIivF,EAAoBn5F,SAASkD,SAASyvF,GACvEuG,EAAqBhhE,OAAOhuB,IAAIivF,EAAoBjhE,QAAQh1B,SAAS0vF,OAG7E9xF,EAAMmpB,GAAG8G,OAAOqgE,IAClB7xF,OAAOuB,MAAM2sB,QACRluB,OAAOuB,OACE,kBAAVzB,SAAwBA,OAAOgiC,IAAMhiC,OAAS,SAAUiiC,EAAIC,EAAIC,IACrEA,GAAMD,OAEV,SAAUniC,EAAGC,QACVA,OAAO,cACH,aACA,eACDD,IACL,WAgyDE,MArxDC,UAAUE,EAAGE,GAioBV,QAAS45F,GAAU5yF,EAAOsB,GAUtB,MATItB,KAAUhH,GAAuB,KAAVgH,GAA0B,OAAVA,IAC1B,YAATsB,EACAtB,IAAgBA,EACA,WAATsB,EACPtB,GAAeA,EACC,WAATsB,IACPtB,EAAQA,GAAAA,IAGTA,EAskCX,QAAS0xB,GAAKihB,GACV,MAAOA,GAAKA,EAAK34C,OAAS,GAE9B,QAAS64F,GAAkB37D,GACvB,GAAI3iB,GAAQ2iB,EAAOs2B,aACnB,OAAOj5C,MAAa2iB,EAAO10B,QAAQ+R,MAEvC,QAASu+E,GAAgBrlC,EAAUslC,GAAnC,GAGQlqE,GACAg3B,EACA3iD,EAAGyxD,EAJHqkC,EAAcD,EAAa/4F,OAC3Bi5F,EAAiBxlC,EAASzzD,OAI1Bk5F,KACAC,IACJ,IAAIF,EACA,IAAK/1F,EAAI,EAAGA,EAAI+1F,EAAgB/1F,IAAK,CAGjC,IAFA2rB,EAAW4kC,EAASvwD,GACpB2iD,GAAQ,EACH8O,EAAI,EAAGA,EAAIqkC,EAAarkC,IACzB,GAAI9lC,IAAakqE,EAAapkC,GAAI,CAC9B9O,GAAQ,EACRqzC,EAAQhpF,MACJqK,MAAOrX,EACPyxC,KAAM9lB,GAEV,OAGHg3B,GACDszC,EAAUjpF,KAAK2e,GAI3B,OACIqqE,QAASA,EACTC,UAAWA,GAGnB,QAASC,GAAkB5tE,GACvB,SAAKA,GAAc1sB,EAAEywB,cAAc/D,OAG/BA,EAAW1f,UAAY0f,EAAW1f,QAAQ9L,QAKlD,QAASq5F,GAAsB7tE,EAAYrF,GAA3C,GACQra,GACA+5C,GAAQ,CAeZ,OAdIr6B,GAAW1f,UACXA,EAAUhN,EAAEq2B,KAAK3J,EAAW1f,QAAS,SAAUG,GAE3C,MADA45C,GAAQwzC,EAAsBptF,EAAQka,GAClCla,EAAOH,QACAG,EAAOH,QAAQ9L,OAEfiM,EAAOka,OAASA,IAG1B0/B,GAASr6B,EAAW1f,QAAQ9L,SAAW8L,EAAQ9L,SAChD6lD,GAAQ,GAEZr6B,EAAW1f,QAAUA,GAElB+5C,EAlxDd,GAylCOyzC,GACAC,EAzlCAj5F,EAAQvB,OAAOuB,MAAOmpB,EAAKnpB,EAAMmpB,GAAI7nB,EAAatB,EAAMuB,YAAaC,EAAcxB,EAAMyB,aAAcqL,EAASqc,EAAGrc,OAAQ2c,EAAOzpB,EAAMypB,KAAMxpB,EAAUD,EAAMC,QAASoJ,EAAarJ,EAAMqJ,WAAYiR,EAAgBta,EAAMqa,eAAgBhX,EAAkBrD,EAAMsD,KAAKD,gBAAiB61F,EAAK,KAAM33D,EAAS,SAAU43D,EAAU,kBAAmBC,EAAQ,gBAAiBC,EAAU,cAAeC,EAAc,WAAYC,EAAc,kBAAmBC,EAAc,SAAU3W,EAAO,OAAQC,EAAQ,QAAS2W,EAAU,UAAWlyD,EAAS,SAAU61C,EAAW,WAAY/iC,EAAe,eAAgBE,EAAa,aAAcwe,EAAQ,QAASvwD,EAAShK,EAAEgK,OAAQsF,EAAQtP,EAAEsP,MAAOD,EAAUrP,EAAEqP,QAASxM,EAAUpB,EAAQoB,QAASq4F,EAAOr4F,EAAQgB,KAAMs3F,EAAQD,GAAQr4F,EAAQkB,QAAU,EAAGq3F,EAAa,KAAMC,GACjyBC,SAAY,eACZ/X,aAAgB,YAEpBgY,EAAO/5F,EAAMmpB,GAAGpc,gBAAgBvE,QAChCC,KAAM,SAAU5I,EAASqI,GACrB,GAA+ByjB,GAA3Bjd,EAAO5G,KAAMiC,EAAK2E,EAAK3E,EAC3B+C,GAAOf,GAAGtD,KAAKwH,KAAKvB,EAAM7O,EAASqI,GACnCrI,EAAU6O,EAAK7O,QACfqI,EAAUwG,EAAKxG,QACfwG,EAAKsrF,UAAYn6F,EAAQgC,GAAG0lC,GACxB74B,EAAKsrF,WAAatrF,EAAK7O,QAAQ,GAAGH,SAC7BwI,EAAQwkB,aACTxkB,EAAQ4rD,cAAgB5rD,EAAQ4rD,eAAiB,OACjD5rD,EAAQ4nD,eAAiB5nD,EAAQ4nD,gBAAkB,UAG3DphD,EAAKurF,GAAKz7F,EAAE,kDAAkDwM,MAC1Dw9E,YACA0R,eAAe,IAEnBxrF,EAAK2pC,KAAO75C,EAAE,mCAAqCotD,OAAOl9C,EAAKurF,IAAIzsF,GAAG,YAAczD,EAAI+D,EAAMY,EAAKyrF,eAAgBzrF,IACnHid,EAAK9rB,EAAQmL,KAAKkuF,GACdvtE,IACAjd,EAAK2pC,KAAKrtC,KAAKkuF,EAAIvtE,EAAK,SACxBjd,EAAKurF,GAAGjvF,KAAKkuF,EAAIvtE,EAAK,aAE1Bjd,EAAK0rF,UACL1rF,EAAK2rF,UACL3rF,EAAK4rF,UACL5rF,EAAK6rF,aACL7rF,EAAK8rF,cAETtyF,SACI2oD,gBAAgB,EAChB4pC,eAAgB,GAChBC,eAAgB,GAChBC,eAAgB,kBAEpBxtE,WAAY,SAAUjlB,GAClB4E,EAAOf,GAAGohB,WAAWld,KAAKnI,KAAMI,GAC5BA,GAAWA,EAAQqf,SAAW7oB,IAC9BwJ,EAAQgf,QAAUhf,EAAQqf,QAE9Bzf,KAAKsyF,UACLtyF,KAAKuyF,UACLvyF,KAAKwyF,UACLxyF,KAAK8yF,gBACL9yF,KAAK+yF,iBAETx+D,MAAO,WACHv0B,KAAKgzF,SAASz+D,SAElBq2B,SAAU,SAAUA,GAChB5qD,KAAKizF,WACDroC,SAAUA,IAAah0D,GAAmBg0D,EAC1CrrC,SAAS,KAGjBE,OAAQ,SAAUA,GACdzf,KAAKizF,WACDroC,UAAU,EACVrrC,UAAWE,EAASA,IAAW7oB,GAAmB6oB,MAG1DyzE,aAAc,SAAU9yF,GAAV,GACNwG,GAAO5G,KACPmzF,EAAiBvsF,EAAKxG,QACtB0lE,EAAUqtB,EAAertB,QACzBstB,EAAmBptF,EAAMY,EAAKysF,WAAYzsF,EA2B9C,OA1BAk/D,GAA6B,gBAAZA,GAAuBA,KACxC1lE,EAAU1J,EAAEgK,QACRsoD,UAAU,EACVmuB,YAAY,EACZvyD,WAAYhe,EAAKge,WACjB5D,MAAOhb,EAAMY,EAAKs9B,OAAQt9B,GAC1B6zB,OAAQz0B,EAAMY,EAAK0sF,YAAa1sF,GAChC4/E,SAAUxgF,EAAMY,EAAK2sF,cAAe3sF,GACpC28E,WAAYv9E,EAAMY,EAAK4sF,gBAAiB5sF,GACxCkgD,YAAa,WACTlgD,EAAKoB,QAAQ,gBAEjBg/C,UAAWosC,EACXl6F,OAAQi6F,EAAej6F,OACvB8uD,eAAgBmrC,EAAenrC,eAC/BgE,cAAemnC,EAAennC,cAC9BynC,cAAeN,EAAeM,cAC9BC,mBAAoBP,EAAeO,mBACnCjxF,SAAU0wF,EAAe1wF,UAC1BrC,EAAS0lE,GACP1lE,EAAQqC,WACTrC,EAAQqC,SAAW,KAAOvK,EAAMuL,KAAKrD,EAAQ4rD,cAAe,QAAU,KAEtEmnC,EAAeQ,WACfvzF,EAAQuzF,SAAWR,EAAeQ,UAE/BvzF,GAEXwzF,UAAW,WAAA,GACHhtF,GAAO5G,KACP6zF,EAAcjtF,EAAKssF,cAAeY,mBAAoB9tF,EAAMY,EAAK0sF,YAAa1sF,IAI9EA,GAAKulD,SAHJvlD,EAAKxG,QAAQ0lE,QAGE,GAAI5tE,GAAMmpB,GAAG0yE,YAAYntF,EAAKurF,GAAI0B,GAFlC,GAAI37F,GAAMmpB,GAAG8vE,WAAWvqF,EAAKurF,GAAI0B,GAIrDjtF,EAAKulD,SAAS/kD,KAAK,YAAapB,EAAMY,EAAKysF,WAAYzsF,IACvDA,EAAKotF,iBAETA,cAAe,SAAUp2F,GACrBA,EAAQA,GAASoC,KAAKI,QAAQxC,MAC1BA,IAAUhH,GACVoJ,KAAKmsD,SAASvuD,MAAMA,GAAOs8D,KAAKl0D,EAAMhG,KAAKi0F,sBAAuBj0F,QAG1Ei0F,sBAAuBv9F,EAAEkK,KACzByxF,eAAgB,SAAUpqF,GACjBjI,KAAKk0F,aAAel0F,KAAKk0F,YAAY,KAAOjsF,EAAEmY,QAC/CnY,EAAE9D,kBAGVgwF,iBAAkB,WACd,GAAItwF,GAAS7D,KAAKI,QAAQyD,MAC1B,OAAOA,IAAqB,SAAXA,GAErBuwF,WAAY,WACR,GAAIxtF,GAAO5G,IACP4G,GAAKytF,QACLr0F,KAAKq0F,OAAO/5F,SAASk3F,IAG7B8C,WAAY,WACR,GAAI1tF,GAAO5G,IACP4G,GAAKytF,QACLr0F,KAAKq0F,OAAO1pC,YAAY6mC,IAGhC+C,YAAa,WACTv0F,KAAKw0F,aACLx0F,KAAKy0F,UAAU,IACfz0F,KAAKmsD,SAASvuD,UACVoC,KAAKm0F,qBAAuBn0F,KAAKI,QAAQs0F,kBACzC10F,KAAKu6C,SACD+U,KAAM,GACN+sB,MAAM,IAGdr8E,KAAKu+C,WAETi2C,WAAY,WACRx0F,KAAKo1B,KAAK,KAEdu/D,aAAc,WACL30F,KAAKI,QAAQ0lE,SACd9lE,KAAKmsD,SAASC,OAAM,GAExBpsD,KAAK40F,iBAETA,cAAe,SAAU/wF,EAAQ0hB,GAAlB,GAUPsvE,GAiBAC,EA1BAluF,EAAO5G,KACPI,EAAUwG,EAAKxG,QACfwkB,EAAahe,EAAKge,WAClBxB,EAAa1iB,KAAWkkB,EAAW/gB,cACnCkxF,EAAoBlxF,GAAUuf,EAAW1f,SAAW0f,EAAW1f,QAAQ9L,SAAWiM,EAClFmxF,EAAU/D,EAAsB7tE,EAAYhjB,EAAQ4rD,gBACnDnoD,GAAUmxF,IAAYpuF,EAAKoB,QAAQ,aAAenE,OAAQA,MAG3DgxF,GACAnxF,WACAsiC,MAAO,OAEPgrD,EAAkBntF,IAClBgxF,EAAcnxF,QAAQoE,KAAKjE,GAE3BmtF,EAAkB5tE,KACdyxE,EAAc7uD,QAAU5iB,EAAW4iB,MACnC6uD,EAAcnxF,QAAUmxF,EAAcnxF,QAAQwS,OAAOkN,EAAW1f,SAEhEmxF,EAAcnxF,QAAQoE,KAAKsb,IAG/Bxc,EAAKquF,YACLj1F,KAAKmsD,SAAS+oC,YAAYL,GAE1BC,EAAkBp0F,MAClBwmC,KAAM6tD,EAAoB,EAAInwE,EAAWsiB,OACzCD,SAAU8tD,EAAoBnwE,EAAWxkB,QAAQ6mC,SAAWriB,EAAWqiB,WACvEjpB,KAAM4G,EAAW5G,OACjBna,OAAQ+gB,EAAW/gB,SACnBiqC,MAAOlpB,EAAWkpB,QAClBnB,UAAW/nB,EAAW+nB,cACrB9oC,OAAQgxF,IACbjwE,EAAWW,EAAQ,OAAS,SAASX,EAAWm8B,YAAY+zC,MAEhEK,gBAAiB,SAAUp9F,EAAS4+B,GAC3B5+B,GAGLiI,KAAK8kB,QAAQ6R,EAAQ,WACjB,OAASpQ,SAAUxuB,MAG3Bw6F,QAAS,WAAA,GACD6C,GAAS1+F,EAAEsJ,KAAKo1F,QAChB3yF,EAAWzC,KAAKI,QAAQyyF,cAM5B,OALA7yF,MAAK8kB,QAAQ,UAAW,WACpB,OAASyB,SAAU6uE,KAEvBl9F,EAAM4tB,QAAQsvE,GACdA,EAAOltE,SACFzlB,GAILzC,KAAKo1F,OAAS1+F,EAAE,gEAAgEogC,SAAS92B,KAAKuwC,MAC9FvwC,KAAK6yF,eAAqC,kBAAbpwF,GAA0BvK,EAAMuK,SAASA,GAAYA,EADlFzC,IAHIA,KAAKo1F,OAAS,KACd,IAKRrC,cAAe,WACX,GAAIqC,GAASp1F,KAAKo1F,MACbA,KAGLp1F,KAAKm1F,gBAAgBC,EAAQ,WAC7BA,EAAOz6F,SAAS,UAAU+H,KAAK1C,KAAK6yF,gBAAiB5xF,SAAUjB,QAC/DA,KAAKm1F,gBAAgBC,EAAQ,aAEjCC,cAAe,SAAUr7F,GACrBtD,EAAEsJ,KAAKo1F,QAAQj1E,OAAOnmB,IAE1Bs7F,cAAe,SAAUt7F,GACrB,GAAIu7F,GAAcv1F,KAAKmsD,SAAS0P,QAAQ7/B,KAAKy1D,EAC7C8D,GAAYp1E,OAAOnmB,IAEvBw4F,QAAS,WAAA,GACDgD,GAAS9+F,EAAEsJ,KAAKw1F,QAChB/yF,EAAWzC,KAAKI,QAAQuyF,cAI5B,OAHA3yF,MAAKm1F,gBAAgBK,EAAQ,WAC7Bt9F,EAAM4tB,QAAQ0vE,GACdA,EAAOttE,SACFzlB,GAILzC,KAAKw1F,OAAS9+F,EAAE,gCAAgCogC,SAAS92B,KAAKuwC,MAC9DvwC,KAAK2yF,eAAqC,kBAAblwF,GAA0BvK,EAAMuK,SAASA,GAAYA,EADlFzC,IAHIA,KAAKw1F,OAAS,KACd,IAKR1C,cAAe,WACX,GAAI0C,GAASx1F,KAAKw1F,MACbA,KAGLx1F,KAAKm1F,gBAAgBK,EAAQ,WAC7BA,EAAO9yF,KAAK1C,KAAK2yF,gBAAiB1xF,SAAUjB,QAC5CA,KAAKm1F,gBAAgBK,EAAQ,aAEjClD,QAAS,WAAA,GAUDM,GATA6C,EAAS/+F,EAAEsJ,KAAKy1F,QAChBhzF,EAAWzC,KAAKI,QAAQwyF,cAI5B,OAHA5yF,MAAKm1F,gBAAgBM,EAAQ,WAC7Bv9F,EAAM4tB,QAAQ2vE,GACdA,EAAOvtE,SACFzlB,GAIDmwF,EAAqC,kBAAbnwF,GAA0BvK,EAAMuK,SAASA,GAAYA,EACjFgzF,EAAS/+F,EAAEk8F,OACX5yF,KAAKy1F,OAASA,EAAO,GAAKA,EAAS,KACnCz1F,KAAKuwC,KAAKi9B,QAAQioB,GAClBz1F,KAAKm1F,gBAAgBn1F,KAAKy1F,OAAQ,WAJ9B7C,IAHA5yF,KAAKy1F,OAAS,KACd,IAQRC,cAAe,WACX,MAAO11F,MAAKI,QAAQyyF,gBAAkB7yF,KAAK4kB,WAAWwB,WAAWxuB,QAErE86F,WAAY,WACR,GAAI9rF,GAAO5G,KAAMpC,EAAQgJ,EAAKxG,QAAQxC,KACxB,QAAVA,EACAgJ,EAAK7O,QAAQ+0C,IAAIlvC,IAEjBA,EAAQgJ,EAAK6tF,YACb7tF,EAAKxG,QAAQxC,MAAQA,GAEzBgJ,EAAK+uF,KAAO/3F,GAEhBg4F,YAAa,WACT,GAAuD73E,GAAnDnX,EAAO5G,KAAM+oC,EAAQniC,EAAKge,WAAW42B,OAAOzS,KAC5CA,IAASA,EAAMM,SACftrB,EAAQgrB,EAAMM,OAAOziC,EAAKxG,QAAQ4rD,eAC9BjuC,GAASA,EAAM7e,MAAuB,WAAf6e,EAAM7e,OAC7B0H,EAAKxG,QAAQk8B,YAAa,KAItCy7C,OAAQ,SAAU0P,GACd,MAAOznF,MAAKmsD,SAAS53B,MAAMkzD,IAE/BltC,QAAS,SAAUn6C,GAAV,GACDwG,GAAO5G,KACP61F,EAAgBjvF,EAAKxG,QACrBk8B,EAAau5D,EAAcv5D,WAC3Bve,EAAQ83E,EAAc7pC,cACtB5oC,GACAxlB,MAAO0+B,EAAal8B,EAAQkvD,KAAKxyD,cAAgBsD,EAAQkvD,KACzDvxC,MAAOA,EACPgoB,SAAU8vD,EAAchyF,OACxBy4B,WAAYA,EAEhB11B,GAAKkvF,MAAQ11F,EAAQi8E,KACrBz1E,EAAKguF,cAAcxxE,IAEvB4I,OAAQ,SAAUsjC,GACd,GAAIlvD,GAAUJ,KAAKI,OACnBkvD,GAAuB,gBAATA,GAAoBA,EAAOtvD,KAAK+1F,cAC9CnrE,aAAa5qB,KAAKg2F,kBACb51F,EAAQs0F,mBAAqBplC,EAAK13D,QAAU03D,EAAK13D,QAAUwI,EAAQ61F,aACpEj2F,KAAKk2F,OAAS,SACTl2F,KAAKm0F,mBAGNn0F,KAAKu6C,SACD+U,KAAMA,EACN+sB,MAAM,IAJVr8E,KAAKm2F,cAAc7mC,KAS/B3jD,QAAS,SAAU87E,GACf,MAAOznF,MAAK+3E,OAAO0P,IAEvBjhE,MAAO,WACH,MAAOxmB,MAAKmyF,GAAG,GAAGx3F,UAEtBmrB,QAAS,WAAA,GACDlf,GAAO5G,KACPiC,EAAK2E,EAAK3E,EACd+C,GAAOf,GAAG6hB,QAAQ3d,KAAKvB,GACvBA,EAAKwvF,oBACLxvF,EAAKulD,SAASrmC,UACdlf,EAAK2pC,KAAK3mB,IAAI3nB,GACd2E,EAAKi3E,MAAM/3D,UACPlf,EAAKyvF,OACLzvF,EAAKyvF,MAAMzsE,IAAI,QAAShjB,EAAK0vF,gBAGrC7vE,SAAU,SAAUtU,GAChB,GAAIvL,GAAO5G,IACX,IAAImS,IAAUvb,EACV,MAAOgQ,GAAKulD,SAASoqC,oBAAoB,EAE7C,IAAqB,gBAAVpkF,GAAoB,CAC3B,GAAIvL,EAAKxG,QAAQ0lE,QACb,MAAOl/D,GAAKge,WAAW83B,SAAShmD,EAAEyb,GAAO3W,KAAK,OAElD2W,GAAQzb,EAAEkQ,EAAK4f,SAASrU,MAAMA,GAElC,MAAOvL,GAAKge,WAAWwB,WAAWjU,IAEtCohF,cAAe,WACX,GAAI5nF,GAAU3L,KAAKmsD,SAAS53B,OACxB5oB,IACA3L,KAAKgzF,SAAS1xF,IAAItB,KAAKk0F,aAAahxF,KAAK,wBAAyByI,EAAQzI,KAAK,QAGvFswF,gBAAiB,WACbxzF,KAAKgzF,SAAS1xF,IAAItB,KAAKk0F,aAAa9uE,WAAW,0BAEnDqtE,WAAY,WAAA,GACJ7rF,GAAO5G,KACPjI,EAAU6O,EAAK7O,QACfqI,EAAUwG,EAAKxG,QACfkjB,EAASprB,EAAMorB,OACfotB,EAAY34C,EAAQmL,KAAKhL,EAAMgL,KAAK,eACpC2lD,EAAa9wD,EAAQmL,KAAKhL,EAAMgL,KAAK,iBACpC9C,EAAQ4rD,eAAiBtb,IAC1BtwC,EAAQ4rD,cAAgBtb,IAEvBtwC,EAAQ4nD,gBAAkBa,IAC3BzoD,EAAQ4nD,eAAiBa,GAE7BjiD,EAAK4vF,MAAQlzE,EAAOljB,EAAQ4rD,eAC5BplD,EAAK6vF,OAASnzE,EAAOljB,EAAQ4nD,iBAEjC0uC,MAAO,SAAU7yE,GACb,GAAIjd,GAAO5G,KAAMI,EAAUwG,EAAKxG,QAASrI,EAAU6O,EAAKosF,SAAS1xF,IAAIsF,EAAKstF,YACtE9zF,GAAQu2F,UAAY//F,GACpBmB,EAAQmL,KAAK,oBAAqB9C,EAAQu2F,QAAU,OAAS,QAEjE9yE,EAAKA,EAAKA,EAAK,IAAMjd,EAAKurF,GAAG,GAAGtuE,GAAKjd,EAAKurF,GAAG,GAAGtuE,GAChD9rB,EAAQmL,KAAK,YAAa2gB,GAC1Bjd,EAAKurF,GAAGjvF,KAAK,YAAc0D,EAAKutF,mBAA6B,SAAR,OACrDvtF,EAAKgwF,cAETA,WAAY,WAAA,GAgBAC,GAfJjwF,EAAO5G,KACP82F,EAAalwF,EAAKosF,SAClB+D,EAAWnwF,EAAK7O,QAChBi/F,EAAUD,EAAS7zF,KAAK,MACxB+zF,EAAWvgG,EAAE,cAAiBsgG,EAAU,MACxCE,EAAYH,EAAS7zF,KAAK,cAC1Bi0F,EAAiBJ,EAAS7zF,KAAK,kBAC/B4zF,KAAeC,IAGfG,EACAJ,EAAW5zF,KAAK,aAAcg0F,GACvBC,EACPL,EAAW5zF,KAAK,kBAAmBi0F,GAC5BF,EAASr/F,SACZi/F,EAAUI,EAAS/zF,KAAK,OAAS0D,EAAKwwF,iBAAiBH,EAAUD,GACrEF,EAAW5zF,KAAK,kBAAmB2zF,MAG3CO,iBAAkB,SAAU5nD,EAAOwnD,GAC/B,GAAIH,GAAUG,EAAUtF,CAExB,OADAliD,GAAMtsC,KAAK,KAAM2zF,GACVA,GAEX7e,MAAO,WACH,GAAIpxE,GAAO5G,IACX4G,GAAK23C,UACL33C,EAAK01E,SAET/9B,QAAS,WAAA,GAKDv2C,GAJApB,EAAO5G,KACPmS,EAAQvL,EAAKwkD,cACbK,EAAc7kD,EAAKxG,QAAQxC,MAC3BA,EAAQgJ,EAAKhJ,OAEbgJ,GAAKsrF,YAActrF,EAAKulD,SAASC,SAAWX,IAC5C7tD,EAAQ6tD,GAER7tD,IAAU4yF,EAAU5pF,EAAK+uF,WAAa/3F,IACtCoK,GAAU,EACHmK,IAAUvb,GAAaub,IAAUvL,EAAKywF,YAC7CrvF,GAAU,GAEVA,IACApB,EAAK+uF,KAAO/3F,EACZgJ,EAAKywF,UAAYllF,EACZvL,EAAK0wF,SACN1wF,EAAK7O,QAAQiQ,QAAQyxB,GAEzB7yB,EAAKoB,QAAQyxB,IAEjB7yB,EAAK2wF,QAAS,GAElBnnD,MAAO,WACH,MAAOpwC,MAAK4kB,WAAW+D,QAE3B6uE,QAAS,WACL,GAAI5wF,GAAO5G,KAAMI,EAAUwG,EAAKxG,QAASkD,EAAWsD,EAAK7O,QAAQgC,GAAG,aAChEqG,GAAQqf,SAAW7oB,IACnBwJ,EAAQgf,QAAUhf,EAAQqf,SAEzBrf,EAAQgf,SAAW9b,EACpBsD,EAAK6Y,QAAO,GAEZ7Y,EAAKgkD,SAAShkD,EAAK7O,QAAQgC,GAAG,gBAGtC09F,WAAY,SAAUhxE,GAClB,GAAI7oB,GAAQoC,KAAKy2F,OAAOhwE,EAIxB,OAHI7oB,KAAUhH,IACVgH,EAAQoC,KAAKw2F,MAAM/vE,IAEhB7oB,GAEX85F,cAAe,WAAA,GACP/wE,GAAe,EACf24D,EAAWt/E,KAAKmsD,SAAS0P,QAAQ4zB,QAAQ,WAK7C,OAJAnQ,GAAS5hF,KAAK,WACV,GAAI3F,GAAUrB,EAAEsJ,KAChB2mB,IAAgBjtB,EAAY3B,GAAS,KAElC4uB,GAEXgxE,QAAS,SAAU//F,GAAV,GAKDggG,GACAC,EACAC,EANAlxF,EAAO5G,KACPuwC,EAAO3pC,EAAK2pC,KACZr3C,EAAS0N,EAAKxG,QAAQlH,OACtBsK,EAAUoD,EAAKi3E,MAAMr6E,SAIzB,IAAI5L,GAAUgP,EAAKxG,QAAQyyF,eAAgB,CAEvC,GADAgF,EAAStnD,EAAKjvC,IAAIivC,EAAK32C,OAAO,2BAA2BI,QACpDu2C,EAAKx2C,GAAG,YAET,MADA89F,GAAO/2F,OACP,CAEJ5H,GAAS0N,EAAKulD,SAAS0P,QAAQ,GAAG9+C,aAAe7jB,EAASA,EAAS,OACnE2+F,EAAO3+F,OAAOA,GACC,SAAXA,IACA0+F,EAAYhxF,EAAK8wF,gBACjBI,EAAep+F,EAAYhD,EAAEkQ,EAAK4uF,UAAY,EAC9Ct8F,EAASA,EAAS0+F,EAAYE,GAElClxF,EAAKulD,SAAS0P,QAAQ3iE,OAAOA,GACxBsK,GACDq0F,EAAO/2F,OAGf,MAAO5H,IAEX6+F,iBAAkB,WACd,GAA2E16F,GAAe4pF,EAAtF12C,EAAOvwC,KAAKuwC,KAAMt3C,EAAQs3C,EAAK,GAAGz2C,MAAMb,MAAOI,EAAU2G,KAAK3G,OAClE,IAAKk3C,EAAK/0C,KAAKy1D,KAAUh4D,EAkBzB,MAfAoE,GAAgB1G,OAAO8G,iBAAmB9G,OAAO8G,iBAAiBpE,EAAQ,GAAI,MAAQ,EACtF4tF,EAAgB9kF,WAAW9E,GAAiBA,EAAcpE,QAAUO,EAAWH,GAC3EgE,GAAiB9D,EAAQgB,OACzB0sF,GAAiB9kF,WAAW9E,EAAcqlF,aAAevgF,WAAW9E,EAAcmlF,cAAgBrgF,WAAW9E,EAAc26F,iBAAmB71F,WAAW9E,EAAc46F,mBAGvKh/F,EAD2B,eAA3Bs3C,EAAKt4C,IAAI,cACDgvF,GAAiBztF,EAAW+2C,GAAQA,EAAKt3C,SAEzCguF,EAEZ12C,EAAKt4C,KACDivF,WAAY7tF,EAAQpB,IAAI,eACxBgB,MAAO+G,KAAKI,QAAQ83F,UAAY,OAASj/F,EACzCk/F,SAAUl/F,IACXuC,KAAKy1D,EAAOh4D,IACR,GAEXm/F,aAAc,SAAUnwF,GACpBjI,KAAK+3F,mBACD/3F,KAAKgI,QAAQ+yE,GACb9yE,EAAE9D,kBAEFnE,KAAKgzF,SAAS9vF,KAAK,iBAAiB,GACpClD,KAAKmyF,GAAGjvF,KAAK,eAAe,KAGpCm1F,cAAe,SAAUpwF,GACjBjI,KAAKgI,QAAQgzE,GACb/yE,EAAE9D,kBAEFnE,KAAKgzF,SAAS9vF,KAAK,iBAAiB,GACpClD,KAAKmyF,GAAGjvF,KAAK,eAAe,KAGpCo1F,WAAY,WAAA,GACJnsC,GAAWnsD,KAAKmsD,SAChBosC,GAAiBpsC,EAAS53B,QAC1BpiB,EAAQmd,EAAK68B,EAASr3B,SACtB3iB,KAAUvb,GAAaoJ,KAAKI,QAAQo4F,gBAAkBD,IACtDpmF,EAAQ,GAERA,IAAUvb,EACVu1D,EAAS53B,MAAMpiB,GACRomF,GACPpsC,EAASssC,cAAc,IAG/BC,uBAAwB,SAAUx/F,GAAV,GAChB8zF,GAAKhtF,KAAKmyF,GAAGx3F,SAAS,kBACtB46F,EAAcv1F,KAAKmsD,SAAS0P,QAAQ7/B,KAAKy1D,GACzCkH,EAAU,CACVpD,GAAY,IAAuC,SAAjCA,EAAY,GAAGz7F,MAAMulB,UACxB,SAAXnmB,IACAy/F,EAAUzgG,EAAMC,QAAQof,aAE5BohF,GAAWx2F,WAAW6qF,EAAG/0F,IAAI,sBAAuB,IAAMkK,WAAW6qF,EAAGryF,SAAS,YAAY1C,IAAI,iBAAkB,IACnHs9F,EAAYt9F,IAAI,gBAAiB0gG,KAGzCC,sBAAuB,SAAUrzE,GAC7B,GAAIrsB,GAAS8G,KAAK23F,QAAQ33F,KAAK4kB,WAAWwB,WAAWxuB,QAAU2tB,EAC/DvlB,MAAK04F,uBAAuBx/F,IAEhC2/F,aAAc,SAAUtzE,GAChBvlB,KAAKI,QAAQ0lE,UAGZ9lE,KAAK69E,MAAM9lF,QAAQgC,GAAG,YAOvBiG,KAAK44F,sBAAsBrzE,GAN3BvlB,KAAK69E,MAAMt2E,IAAI,OAAQ,SAAUge,GAC7B,MAAOvf,GAAM,WACThG,KAAK44F,sBAAsBrzE,IAC5BvlB,OACLmI,KAAKnI,KAAMulB,MAKrBuzE,OAAQ,WACJ,GAAIlyF,GAAO5G,IACX4G,GAAKi3E,MAAQ,GAAIx8D,GAAG06D,MAAMn1E,EAAK2pC,KAAM7vC,KAAWkG,EAAKxG,QAAQy9E,OACzD3B,OAAQt1E,EAAKvN,QACbgjF,KAAMr2E,EAAMY,EAAKwxF,aAAcxxF,GAC/B01E,MAAOt2E,EAAMY,EAAKyxF,cAAezxF,GACjCw1E,UAAWx1E,EAAKxG,QAAQg8E,UACxB/9E,MAAOlG,EAAQkG,MAAMuI,EAAKvN,SAC1BN,SAAU6N,EAAKxG,QAAQ83F,cAG/Ba,kBAAmB,WACXlH,GACA7xF,KAAKuwC,KAAKjpB,KAAK,KAAK2tD,IAAI,cAAc/xE,KAAK,eAAgB,OAGnE81F,aAAc,SAAU/wF,GACpBvR,EAAEuR,EAAE22B,eAAex9B,YAAYkwF,EAAkB,eAAXrpF,EAAE/I,OAE5C6vF,QAAS,SAAU1S,EAAM4c,GAAhB,GACDryF,GAAO5G,KACPk5F,EAAe/gG,EAAQgf,WAAahf,EAAQggB,OAAShgB,EAAQghG,YAAchhG,EAAQoH,SACvF88E,GAAOA,IAASzlF,EAAYylF,GAAQz1E,EAAKi3E,MAAMr6E,UAC1Cy1F,GAAiBC,GAAgBtyF,EAAKosF,SAAS,KAAOxgF,MACvD5L,EAAKwyF,UAAW,EAChBxyF,EAAKosF,SAASz+D,QACd3tB,EAAKwyF,UAAW,GAEpBxyF,EAAKy1E,EAAOtB,EAAOC,MAEvBqe,gBAAiB,WACb,GAAIzyF,GAAO5G,IACN4G,GAAK0yF,mBAAqB1yF,EAAK+uF,OAAS/uF,EAAKhJ,SAAWgJ,EAAKywF,YAAczwF,EAAKwkD,gBACjFxkD,EAAK0yF,mBAAoB,EACzB1yF,EAAKoB,QAAQ2pF,GAAW4H,cAAe3yF,EAAK4yF,mBAGpDC,eAAgB,WACRz5F,KAAK05F,sBAAwB15F,KAAKpC,SAClCoC,KAAKgI,QAAQyxB,IAGrB28D,kBAAmB,WACf,GAAIxvF,GAAO5G,IACX4G,GAAKge,WAAW/c,OAAO0qC,EAAc3rC,EAAK+yF,sBAAsB9xF,OAAO4qC,EAAY7rC,EAAKgzF,oBAAoB/xF,OAAO,QAASjB,EAAKizF,gBAErIC,mBAAoB,SAAU15F,EAASxC,GACnC,GAAI0vD,IAAYltD,EAAQxC,gBAAiB9B,OAAQsE,EAAQxC,MAAMhG,OAASwI,EAAQxC,SAAWA,YAAiB9B,OAAQ8B,EAAMhG,OAASgG,EACnI,IAAI0vD,GAAYltD,EAAQ0lE,SAAkD,kBAAhC1lE,GAAQ0lE,QAAQi0B,YACtD,KAAUjxF,OAAM,sKAgB5BpI,GAAOuxF,GACHhvF,QAAS,SAAU0uB,EAAMnT,GACrB,GAAI7gB,GAAK/F,EAAQ0nF,EAAW9gE,EAAW7jB,QACvC,KAAKg3B,GAAQA,EAAKnT,aAAeA,EAC7B,QAEJ,KAAK7gB,EAAM,EAAG/F,EAAS0nF,EAAS1nF,OAAQ+F,EAAM/F,EAAQ+F,IAClD,GAAIg0B,IAAS2tD,EAAS3hF,GAClB,MAAOA,EAGf,WAEJ6yF,UAAWA,IAEft4F,EAAMmpB,GAAG4wE,KAAOA,EAChB5wE,EAAGwmC,OAASoqC,EAAKvxF,QACbC,KAAM,SAAU5I,EAASqI,GACrB6xF,EAAKhuF,GAAGtD,KAAKwH,KAAKnI,KAAMjI,EAASqI,GACjCJ,KAAKg6F,SAAWh6F,KAAKjI,QAAQ+0C,OAEjCytC,cAAe,SAAU31D,GAAV,GAEPhrB,GADAgN,EAAO5G,IAEX4G,GAAKxG,QAAQwkB,WAAaA,EAC1Bhe,EAAK49C,cACD59C,EAAKulD,SAASC,UACdxlD,EAAKqzF,cAAgB,MAEzBrzF,EAAKulD,SAASouB,cAAc3zE,EAAKge,YAC7Bhe,EAAKxG,QAAQ4oD,UACbpiD,EAAKge,WAAWs8B,QAEpBtnD,EAASgN,EAAKszF,gBACVtgG,GACAgN,EAAKuzF,eAAevgG,IAG5B0iF,MAAO,WACHt8E,KAAK69E,MAAMvB,SAEfxnD,OAAQ,SAAU2yD,GACd,GAAI7gF,GAAO5G,IACX,OAAIynF,KAAc7wF,EACPgQ,EAAKwkD,cAELxkD,EAAKi9B,QAAQ4jD,GAAWvtB,KAAK,WAChCtzD,EAAK+uF,KAAO/uF,EAAK6tF,YACjB7tF,EAAKywF,UAAYzwF,EAAKwkD,iBAIlCqpC,UAAW,SAAU72F,EAAOD,GACxB,MAAOqC,MAAKA,KAAKkyF,UAAY,kBAAoB,kBAAkBt0F,EAAOD,IAE9Ey8F,eAAgB,SAAUx8F,GACtB,GAAI7F,GAAUiI,KAAKjI,QAAQ,EAC3B,OAAI6F,KAAUhH,EACHmB,EAAQ6F,OAED,OAAVA,IACAA,EAAQ,IAEZ7F,EAAQ6F,MAAQA,EAHhB,IAMRy8F,gBAAiB,SAAUz8F,EAAOD,GAAjB,GAET2vD,GADAv1D,EAAUiI,KAAKjI,QAAQ,EAE3B,OAAI6F,KAAUhH,EACH65F,EAAkB14F,GAAS6F,OAAS,IAE/C6yF,EAAkB14F,GAASszD,UAAW,EAClC1tD,IAAQ/G,IACR+G,MAEJ2vD,EAAqB,OAAV1vD,GAA4B,KAAVA,EACzB0vD,GAAY3vD,MACZqC,KAAKs6F,QAAQ18F,GAETA,EACA7F,EAAQ6F,MAAQA,EAEhB7F,EAAQqzD,cAAgBztD,EAXhC8yF,IAeJ6J,QAAS,SAAU18F,GAAV,GACDgJ,GAAO5G,KACPjI,EAAU6O,EAAK7O,QACfwiG,EAAS3zF,EAAK4zF,aACbD,KACDA,EAAS7jG,EAAE,aACXkQ,EAAK4zF,cAAgBD,EACrBxiG,EAAQ+rD,OAAOy2C,IAEnBA,EAAOnlE,KAAKx3B,GACZ28F,EAAO,GAAGlvC,UAAW,GAEzBovC,UAAW,WACP,GAAI7zF,GAAO5G,IACX4qB,cAAahkB,EAAK8zF,OAClB9zF,EAAK+zF,WAAWhwC,YAAY4mC,GAC5B3qF,EAAKosF,SAAS9vF,KAAK,aAAa,GAChC0D,EAAK8zF,MAAQ,KACb9zF,EAAK0tF,cAETsG,UAAW,SAAU3yF,GACjB,GAAIrB,GAAO5G,IACPiI,GAAE7D,uBAGNwC,EAAKi0F,UAAW,EACZj0F,EAAK8zF,QAGT9zF,EAAK8zF,MAAQhxE,WAAW,WAChB9iB,EAAK+zF,aACL/zF,EAAKosF,SAAS9vF,KAAK,aAAa,GAChC0D,EAAK+zF,WAAWrgG,SAASi3F,GACzB3qF,EAAKwtF,eAEV,QAEP0G,YAAa,WACT96F,KAAK66F,UAAW,EAChB76F,KAAKy6F,aAETj2C,YAAa,WACT,GAAwG7mD,GAApGiJ,EAAO5G,KAAMjI,EAAU6O,EAAK7O,QAASqI,EAAUwG,EAAKxG,QAASwkB,EAAaxkB,EAAQwkB,cACtFA,GAAaluB,EAAEqP,QAAQ6e,IAAgBppB,KAAMopB,GAAeA,EACxDhe,EAAKsrF,YACLv0F,EAAM5F,EAAQ,GAAGqzD,cACbztD,OACAyC,EAAQ+R,MAAQxU,GAEpBinB,EAAWkQ,OAAS/8B,EACpB6sB,EAAWykB,SACLtrB,MAAO3d,EAAQ4rD,gBACfjuC,MAAO3d,EAAQ4nD,kBAGrBphD,EAAKge,WACLhe,EAAKwvF,qBAELxvF,EAAK+yF,qBAAuB3zF,EAAMY,EAAKg0F,UAAWh0F,GAClDA,EAAKgzF,mBAAqB5zF,EAAMY,EAAKk0F,YAAal0F,GAClDA,EAAKizF,cAAgB7zF,EAAMY,EAAK6zF,UAAW7zF,IAE/CA,EAAKge,WAAa1sB,EAAMsD,KAAKE,WAAW2sC,OAAOzjB,GAAYxd,KAAKmrC,EAAc3rC,EAAK+yF,sBAAsBvyF,KAAKqrC,EAAY7rC,EAAKgzF,oBAAoBxyF,KAAK,QAASR,EAAKizF,gBAE1KkB,WAAY,WACR/6F,KAAKmsD,SAAS6uC,cAElBC,UAAW,WACPj7F,KAAKmsD,SAAS+uC,aAElBC,UAAW,WACPn7F,KAAKmsD,SAASivC,aAElBC,UAAW,WACPr7F,KAAKmsD,SAASmvC,aAElBv3D,MAAO,SAAU97B,GAAV,GAKCwe,GACAwc,EACAt3B,EAwDI4vF,EAGIC,EAiCJ51D,EAlGJh/B,EAAO5G,KACPmsD,EAAWvlD,EAAKulD,SAChBptD,EAAMkJ,EAAEmuB,QACRpX,EAAOjgB,IAAQ4iB,EAAKU,IAIxB,IAAItjB,IAAQ4iB,EAAKQ,IAAMnD,EAAM,CACzB,GAAI/W,EAAEglF,OACFrmF,EAAKuZ,OAAOnB,OACT,CACH,IAAKmtC,EAASC,QAUV,MATKxlD,GAAK60F,SACN70F,EAAKge,WAAWrd,IAAIkyB,EAAQ,WACxB7yB,EAAK60F,QAAS,EACd70F,EAAKm9B,MAAM97B,KAEfrB,EAAK60F,QAAS,EACd70F,EAAKguF,iBAET3sF,EAAE9D,kBACK,CAiBX,IAfAwH,EAAU/E,EAAKmxE,SACVnxE,EAAK60F,QAAY9vF,IAAWA,EAAQ9R,SAAS,sBAC1CmlB,GACApY,EAAKu0F,YACAv0F,EAAKmxE,UACNnxE,EAAKq0F,cAGTr0F,EAAKy0F,YACAz0F,EAAKmxE,UACNnxE,EAAKm0F,eAIjBt0E,EAAW0lC,EAASuvC,gBAAgBvvC,EAASwvC,gBAAgB/0F,EAAKmxE,WAC9DnxE,EAAKoB,QAAQy3B,GACThZ,SAAUA,EACV8lB,KAAM3lC,EAAKmxE,WAGf,MADAnxE,GAAKmxE,OAAOpsE,GACZ,CAEJ/E,GAAKi9B,QAAQj9B,EAAKmxE,UAAU,GAAM7d,KAAK,WAC9BtzD,EAAKi3E,MAAMr6E,WACZoD,EAAKoxE,UAIjB/vE,EAAE9D,iBACF8+B,GAAU,MACP,IAAIlkC,IAAQ4iB,EAAKK,OAASjjB,IAAQ4iB,EAAKI,IAAK,CAU/C,GATInb,EAAKi3E,MAAMr6E,WACXyE,EAAE9D,iBAENwH,EAAU/E,EAAKmxE,SACftxD,EAAW7f,EAAK6f,WACX7f,EAAKi3E,MAAMr6E,WAAeijB,GAAY7f,EAAKwuB,SAAWxuB,EAAK4vF,MAAM/vE,KAClE9a,EAAU,MAEV4vF,EAAe30F,EAAKstF,aAAettF,EAAKstF,YAAY,KAAO1hF,IAC3D7G,EAAS,CAMT,GALA8a,EAAW0lC,EAASuvC,gBAAgBvvC,EAASwvC,gBAAgBhwF,IACzD6vF,GAAgB,EAChB/0E,IACA+0E,EAAgB50F,EAAK6vF,OAAOhwE,KAAcwrE,EAAKzB,UAAU5pF,EAAKhJ,cAAgBgJ,GAAK6vF,OAAOhwE,KAE1F+0E,GAAiB50F,EAAKoB,QAAQy3B,GAC1BhZ,SAAUA,EACV8lB,KAAM5gC,IAEV,MAEJ/E,GAAKi9B,QAAQl4B,OACN/E,GAAK9G,QACZ8G,EAAK6tF,UAAU7tF,EAAK9G,MAAMgtC,OAC1BlmC,EAAKulD,SAASvuD,MAAMgJ,EAAK9G,MAAMgtC,OAE/BlmC,GAAKg1F,eACLh1F,EAAKg1F,cAAch1F,EAAKvN,SAExBkiG,GAAgBx8F,IAAQ4iB,EAAKI,IAC7Bnb,EAAKvN,QAAQwiG,WAEbj1F,EAAKoxE,QAETpxE,EAAK01E,QACLr5C,GAAU,MACHlkC,KAAQ4iB,EAAKM,KAChBrb,EAAKi3E,MAAMr6E,WACXyE,EAAE9D,iBAENyC,EAAK01E,QACLr5C,GAAU,IACHr8B,EAAKi3E,MAAMr6E,WAAczE,IAAQ4iB,EAAKe,UAAY3jB,IAAQ4iB,EAAKc,SACtExa,EAAE9D,iBACEyhC,EAAY7mC,IAAQ4iB,EAAKe,SAAW,KACxCypC,EAAS2vC,WAAWl2D,EAAYumB,EAASlzC,gBACzCgqB,GAAU,EAEd,OAAOA,IAEX84D,WAAY,WAAA,GACJn1F,GAAO5G,KACPg8F,IAAap1F,EAAKge,WAAW+D,OAAO/wB,MACpCgP,GAAKi0F,UAAYj0F,EAAKxG,QAAQ8rD,aAG7BtlD,EAAKulD,SAASC,SAAYxlD,EAAK60F,QAAWO,IAC3Cp1F,EAAK60F,QAAS,EACd70F,EAAKge,WAAWs8B,QAAQgZ,KAAK,WACzBtzD,EAAK60F,QAAS,MAI1BQ,SAAU,SAAUzgG,EAAM0gG,EAAat+F,GACnC,GAAuGkE,GAAQ2kB,EAAU01E,EAAUC,EAA/Hx1F,EAAO5G,KAAMjI,EAAU6O,EAAK7O,QAASskG,EAActkG,EAAQ,GAAIH,EAAS4D,EAAK5D,OAAQwI,EAAU,GAA2CzC,EAAM,CAIpJ,KAHIu+F,IACA97F,EAAU87F,GAEPv+F,EAAM/F,EAAQ+F,IACjBmE,EAAS,UACT2kB,EAAWjrB,EAAKmC,GAChBw+F,EAAWv1F,EAAK4vF,MAAM/vE,GACtB21E,EAAYx1F,EAAK6vF,OAAOhwE,GACpB21E,IAAcxlG,IACdwlG,GAAa,GACTA,EAAUl+F,QAAQ,YAClBk+F,EAAYA,EAAUjlG,QAAQ26F,EAAY,WAE9ChwF,GAAU,WAAas6F,EAAY,KAEvCt6F,GAAU,IACNq6F,IAAavlG,IACbkL,GAAUP,EAAW46F,IAEzBr6F,GAAU,YACV1B,GAAW0B,CAEf/J,GAAQ2K,KAAKtC,GACTxC,IAAUhH,IACVylG,EAAYz+F,MAAQA,EAChBy+F,EAAYz+F,QAAUA,IACtBy+F,EAAYjxC,mBAGhBixC,EAAYjxC,qBACZtpD,EAAS2uF,EAAkB4L,GACvBv6F,GACAA,EAAO4b,aAAa43D,EAAUA,KAI1C1wB,OAAQ,WACJ,GAAIh+C,GAAO5G,KAAMjI,EAAU6O,EAAK7O,QAASukG,EAASvkG,EAAQmL,KAAK,QAAS+yB,EAAOqmE,EAAS5lG,EAAE,IAAM4lG,GAAUvkG,EAAQkgB,QAAQ,OACtHge,GAAK,KACLrvB,EAAK0vF,cAAgB,WACjB5sE,WAAW,WACP9iB,EAAKhJ,MAAMgJ,EAAKozF,aAGxBpzF,EAAKyvF,MAAQpgE,EAAKvwB,GAAG,QAASkB,EAAK0vF,iBAG3C4D,cAAe,WAAA,GAKPqC,GACA3iG,EALAsV,EAAOlP,KAAKI,QAAQ8O,IACxB,IAAKlP,KAAKI,QAAQ8rD,YAQlB,MALIqwC,GAAgB7lG,EAAE,IAAMsJ,KAAKI,QAAQ8rD,aACrCtyD,EAAS2iG,EAAc/gG,KAAK,QAAU0T,GACrCtV,IACDA,EAAS2iG,EAAc/gG,KAAK,QAAUu2F,EAAiB7iF,KAEpDtV,GAEX4iG,SAAU,WAAA,GAIF5iG,GAHAgN,EAAO5G,KACPI,EAAUwG,EAAKxG,QACfq8F,EAAUr8F,EAAQ8rD,WAEtB,IAAIuwC,EAAS,CAET,GADA7iG,EAASgN,EAAKszF,iBACTtgG,EACD,MAEJgN,GAAK81F,qBAAuB12F,EAAMY,EAAK+1F,gBAAiB/1F,GACxDA,EAAKg2F,0BACLx8F,EAAQ4oD,UAAW,EACnBpvD,EAAOwN,KAAK,MAAO,WACfR,EAAKW,IAAI,MAAO,SAAUU,GACtBrB,EAAKi2F,eAAiB50F,EAAErK,UAGhChE,EAAOxC,MAAMu6F,EAAS/qF,EAAK81F,sBACvB9iG,EAAOuyD,SAASC,SAChBxlD,EAAKk2F,wBACLl2F,EAAKuzF,eAAevgG,KAEpBA,EAAO2N,IAAI,YAAa,WACpBX,EAAKk2F,0BAEJljG,EAAOgE,SACRgJ,EAAK6Y,QAAO,MAK5Bq9E,sBAAuB,WAAA,GACfl2F,GAAO5G,KACPpG,EAASgN,EAAKszF,gBACd2B,EAAWjK,EAAO,OAAS,UAC/Bh4F,GAAOo5F,SAAS1xF,IAAI1H,EAAOs6F,aAAa9sF,KAAK,QAAS,WAClDxN,EAAOiO,OAAO8pF,EAAS/qF,EAAK81F,sBAC5B9iG,EAAOxC,MAAMqiC,EAAQ7yB,EAAK81F,wBAE9B9iG,EAAOo5F,SAAS1xF,IAAI1H,EAAOs6F,aAAa9sF,KAAKy0F,EAAU,WACnDjiG,EAAOiO,OAAO4xB,EAAQ7yB,EAAK81F,sBAC3B9iG,EAAOxC,MAAMu6F,EAAS/qF,EAAK81F,yBAGnCC,gBAAiB,SAAU10F,GAAV,GACTrO,GAASoG,KAAKk6F,gBACd6C,EAAqB/8F,KAAKpC,OAC9BoC,MAAKw5F,eAAiBvxF,EAAEsxF,cACpBv5F,KAAKmsD,SAASC,SACdpsD,KAAKg9F,gBAAgBpjG,GAAQ,GAEjCoG,KAAKm6F,eAAevgG,EAAQmjG,IAEhCE,eAAgB,SAAUrjG,GAAV,GACRgN,GAAO5G,KACPpC,EAAQgJ,EAAK6tF,aAAe7tF,EAAKi2F,cAChCj2F,GAAKg2F,uBAAuBhlG,SAC7BgP,EAAKi2F,eAAiB,MAEtBj2F,EAAK4yF,eACL5yF,EAAKo2F,gBAAgBpjG,GAAQ,GACtBgE,GACHA,IAAUgJ,EAAKulD,SAASvuD,QAAQ,IAChCgJ,EAAKhJ,MAAMA,GAEVgJ,EAAKge,WAAW+D,OAAO,IAAM/hB,EAAKwkD,oBACnCxkD,EAAKo2F,gBAAgBpjG,GAAQ,IAE1BgN,EAAKge,WAAWwB,WAAWxuB,QAClCgP,EAAKkuB,OAAOluB,EAAKxG,QAAQ+R,OAE7BvL,EAAK6Y,SACL7Y,EAAKyyF,kBACLzyF,EAAK6yF,iBACL7yF,EAAK4yF,gBAAiB,GAE1BW,eAAgB,SAAUvgG,EAAQmjG,GAAlB,GAKR9wD,GAKIxkC,EATJb,EAAO5G,KACPymB,EAAW7sB,EAAO6sB,WAClBy2E,EAAcz2E,EAAW7sB,EAAO68F,OAAOhwE,GAAY,KACnDoiC,EAAajiD,EAAKxG,QAAQ+8F,kBAAoBvjG,EAAOwG,QAAQ4nD,cAEjEphD,GAAK8yF,oBAAsBqD,IAAuBnmG,EAAYmmG,EAAqBn2F,EAAKhJ,QACpFs/F,GAA+B,IAAhBA,GACfjxD,EAAcrlC,EAAKge,WAAW/gB,aAC9BotF,EAAsBhlD,EAAa4c,GAC/BphD,EAAU,WACV,GAAI21F,GAAiBx2F,EAAKg2F,uBAAuB9qF,OAC7CsrF,IACAx2F,EAAKiB,OAAO,YAAau1F,GAE7BA,EAAiBx2F,EAAKg2F,uBAAuB,GACzCQ,GACAx2F,EAAKxP,MAAM,YAAagmG,GAE5Bx2F,EAAKq2F,eAAerjG,IAExBgN,EAAKg2F,uBAAuB90F,KAAKL,GACU,IAAvCb,EAAKg2F,uBAAuBhlG,QAC5BgP,EAAKxP,MAAM,YAAaqQ,GAE5Bb,EAAKquF,YAAa,EAClBruF,EAAKguF,eACD72E,MAAO8qC,EACP9iB,SAAU,KACVnoC,MAAOs/F,IAEXt2F,EAAKquF,YAAa,IAElBruF,EAAK6Y,QAAO,GACZ7Y,EAAKo2F,gBAAgBpjG,GACrBgN,EAAKyyF,kBACLzyF,EAAK6yF,iBACL7yF,EAAK4yF,gBAAiB,MAI9BtI,EAAiB,cACjBC,EAAaj5F,EAAMmpB,GAAGpc,gBAAgBvE,QACtCC,KAAM,SAAU5I,EAASqI,GACrB4E,EAAOf,GAAGtD,KAAKwH,KAAKnI,KAAMjI,EAASqI,GACnCJ,KAAKjI,QAAQmL,KAAK,OAAQ,WAAWwC,GAAG,QAAUwrF,EAAgB,KAAMlrF,EAAMhG,KAAKkkC,OAAQlkC,OAAO0F,GAAG,aAAewrF,EAAgB,KAAM,WACtIx6F,EAAEsJ,MAAM1F,SAASg3F,KAClB5rF,GAAG,aAAewrF,EAAgB,KAAM,WACvCx6F,EAAEsJ,MAAM2qD,YAAY2mC,KAExBtxF,KAAK67D,QAAU77D,KAAKjI,QAAQe,KAAK,yDAA6Dc,SAC9FoG,KAAKy1F,OAASz1F,KAAK67D,QAAQ8W,OAAO,2DAA2D32C,OAC7Fh8B,KAAKosD,OAAM,GACXpsD,KAAKq9F,UAAYnlG,EAAMyrB,OACvB3jB,KAAKs9F,oBACLt9F,KAAKk6C,SACLl6C,KAAKu9F,cACLv9F,KAAKw9F,UACL,IAAI5/F,GAAQoC,KAAKI,QAAQxC,KACrBA,KACAoC,KAAKw9F,QAAU9mG,EAAEqP,QAAQnI,GAASA,EAAM4I,MAAM,IAAM5I,IAExDoC,KAAKy9F,UACLz9F,KAAK09F,aACL19F,KAAKu6E,cAAcv6E,KAAKI,QAAQwkB,YAChC5kB,KAAK29F,UAAY33F,EAAM,WACnB,GAAIY,GAAO5G,IACX4qB,cAAahkB,EAAKg3F;AAClBh3F,EAAKg3F,UAAYl0E,WAAW,WACxB9iB,EAAKi3F,iBACN,KACJ79F,OAEPI,SACI8O,KAAM,aACN84C,eAAgB,KAChBe,gBAAgB,EAChBouB,YAAY,EACZ10E,SAAU,KACVgxF,cAAe,KACfC,mBAAoB,MAExBhsF,QACI,QACA+xB,EACA,WACA,aACA,cACA,YACA,sBAEJ8gD,cAAe,SAAUt/E,GAAV,GAGP2C,GAFAgJ,EAAO5G,KACP4kB,EAAa3pB,KAEjB2pB,GAAaluB,EAAEqP,QAAQ6e,IAAgBppB,KAAMopB,GAAeA,EAC5DA,EAAa1sB,EAAMsD,KAAKE,WAAW2sC,OAAOzjB,GACtChe,EAAKge,YACLhe,EAAKge,WAAW/c,OAAO4xB,EAAQ7yB,EAAK+yE,iBACpC/7E,EAAQgJ,EAAKhJ,QACbgJ,EAAKhJ,UACLgJ,EAAKwlD,OAAM,GACXxlD,EAAKhJ,MAAMA,IAEXgJ,EAAK+yE,gBAAkB3zE,EAAMY,EAAK4Q,QAAS5Q,GAE/CA,EAAKsuF,YAAYtwE,EAAW/gB,UAC5B+C,EAAKge,WAAaA,EAAWxd,KAAKqyB,EAAQ7yB,EAAK+yE,iBAC/C/yE,EAAKk3F,gBAET77D,KAAM,WACF,MAAOjiC,MAAK4kB,WAAWqd,QAE3B5c,WAAY,SAAUjlB,GAClB4E,EAAOf,GAAGohB,WAAWld,KAAKnI,KAAMI,GAChCJ,KAAKy9F,UACLz9F,KAAK09F,aACL19F,KAAK+9F,WAETj4E,QAAS,WACL9lB,KAAKjI,QAAQ6xB,IAAIsnE,GACblxF,KAAK25E,iBACL35E,KAAK4kB,WAAW/c,OAAO4xB,EAAQz5B,KAAK25E,iBAExC/uD,aAAa5qB,KAAK49F,WAClB54F,EAAOf,GAAG6hB,QAAQ3d,KAAKnI,OAE3B07F,gBAAiB,SAAUvpF,GACvB,MAAOnS,MAAK4kB,WAAWwB,WAAWjU,IAEtC8G,aAAc,WACV,MAAOjZ,MAAK67D,QAAQ,GAAG7+C,cAE3By7E,cAAe,SAAUtmF,GACrB,GAAIo6B,GAAOvsC,KAAKjI,QAAQ,GAAG4C,SAASwX,EAChCo6B,IACAvsC,KAAKg+F,OAAOzxD,IAGpBuvD,WAAY,SAAUl+F,GAClBoC,KAAK67D,QAAQl8D,UAAUK,KAAK67D,QAAQl8D,YAAc/B,IAEtDogG,OAAQ,SAAUzxD,GACd,GAAKA,EAAL,CAGIA,EAAK,KACLA,EAAOA,EAAK,GAEhB,IAAIsvB,GAAU77D,KAAK67D,QAAQ,GAAIoiC,EAAgB1xD,EAAKqrD,UAAWsG,EAAmB3xD,EAAK5lB,aAAcw3E,EAAmBtiC,EAAQl8D,UAAWy+F,EAAsBviC,EAAQ7+C,aAAcqhF,EAAiBJ,EAAgBC,CACpNC,GAAmBF,EACnBE,EAAmBF,EACZI,EAAiBF,EAAmBC,IAC3CD,EAAmBE,EAAiBD,GAExCviC,EAAQl8D,UAAYw+F,IAExB5H,kBAAmB,SAAUpwE,GACzB,MAAIA,KAAcvvB,EACPoJ,KAAKu9F,WAAW/2F,SAE3BxG,KAAKu9F,WAAap3E,EAClBnmB,KAAKw9F,QAAUx9F,KAAKs+F,WAAWn4E,GAD/BnmB,IAGJs+F,WAAY,SAAUn4E,GAClB,GAAI7C,GAAStjB,KAAKu+F,YAClB,OAAO7nG,GAAEsc,IAAImT,EAAW,SAAUM,GAC9B,MAAOnD,GAAOmD,MAGtB20E,UAAW,WACP,GAAIzvF,GAAU3L,KAAKu0B,OAIf5oB,GAHCA,EAGSA,EAAQy1C,OAFR,EAIdphD,KAAKu0B,MAAM5oB,IAEf2vF,UAAW,WACP,GAAI3vF,GAAU3L,KAAKu0B,OAIf5oB,GAHCA,EAGSA,EAAQqwB,OAFRh8B,KAAKjI,QAAQ,GAAG4C,SAAS/C,OAAS,EAIhDoI,KAAKu0B,MAAM5oB,IAEfqvF,WAAY,WACRh7F,KAAKu0B,MAAMv0B,KAAKjI,QAAQ,GAAG4C,SAAS,KAExCugG,UAAW,WACPl7F,KAAKu0B,MAAMjF,EAAKtvB,KAAKjI,QAAQ,GAAG4C,YAEpC45B,MAAO,SAAUkzD,GAAV,GAGC+W,GAFA53F,EAAO5G,KACP6jB,EAAKjd,EAAKy2F,SAEd,OAAI5V,KAAc7wF,EACPgQ,EAAK63F,UAEhBhX,EAAYn4D,EAAK1oB,EAAK83F,KAAKjX,IAC3BA,EAAY/wF,EAAEsJ,KAAKjI,QAAQ,GAAG4C,SAAS8sF,IACnC7gF,EAAK63F,WACL73F,EAAK63F,SAAS9zC,YAAY0mC,GAASjsE,WAAW,iBAAiBA,WAAWgsE,GAC1ExqF,EAAKoB,QAAQ,eAEjBw2F,IAAiB/W,EAAU,GACvB+W,IACA/W,EAAUntF,SAAS+2F,GACnBzqF,EAAKo3F,OAAOvW,GACZA,EAAUvkF,KAAK,KAAM2gB,IAEzBjd,EAAK63F,SAAWD,EAAe/W,EAAY,KAC3C7gF,EAAKoB,QAAQ,YAbby/E,IAeJkX,WAAY,WACR,MAAO3+F,MAAKu0B,QAAUv0B,KAAKu0B,QAAQpiB,QAAUvb,GAEjDgoG,WAAY,SAAUA,GAClB5+F,KAAK6+F,YAAcD,GAEvB9pE,OAAQ,SAAUgqE,GAAV,GAOA9/F,GAQAugD,EACAw/C,EAfAn4F,EAAO5G,KACPm3E,EAAavwE,EAAKxG,QAAQ+2E,WAC1B6nB,EAAiC,aAAf7nB,GAA6BA,KAAe,EAC9D8nB,EAAkBr4F,EAAK02F,iBACvB4B,KACAlK,IAEJ,OAAI8J,KAAYloG,EACLqoG,EAAgBz4F,SAE3Bs4F,EAAUl4F,EAAK83F,KAAKI,GACG,IAAnBA,EAAQlnG,QAAgBknG,EAAQ,UAChCA,MAEAv/C,EAAW7oD,EAAEylD,WAAWC,UACxB2iD,EAAWn4F,EAAKu4F,aAChBJ,IAAaC,GAAmBp4F,EAAKw4F,kBAAkBN,GAChDv/C,EAEPy/C,IAAoBD,GAAYroG,EAAEuM,QAAQqsB,EAAKwvE,GAAUG,SACrDr4F,EAAK22F,WAAW3lG,QAAUgP,EAAKszC,MAAMtiD,SACrCgP,EAAK22F,YAAc32F,EAAKszC,MAAM+kD,EAAgB,IAAI1yD,OAE/CgT,IAEXvgD,EAAS4H,EAAKy4F,UAAUP,GACxB9J,EAAUh2F,EAAOg2F,QACjB8J,EAAU9/F,EAAO8/F,QACbA,EAAQlnG,SACJonG,IACAF,GAAWxvE,EAAKwvE,KAEpBI,EAAQt4F,EAAKi9B,QAAQi7D,KAErBI,EAAMtnG,QAAUo9F,EAAQp9F,UACxBgP,EAAK04F,eAAiB,KACtB14F,EAAKoB,QAAQyxB,GACTylE,MAAOA,EACPlK,QAASA,KAGVz1C,KAEXggD,SAAU,SAAUlpC,GAIhB,MAHAr2D,MAAKs9F,iBAAiBl1F,OAAOiuD,EAAU,GACvCr2D,KAAKw9F,QAAQp1F,OAAOiuD,EAAU,GAC9Br2D,KAAKs/F,eAAiB,MAElBjpC,SAAUA,EACV5vC,SAAUzmB,KAAKu9F,WAAWn1F,OAAOiuD,EAAU,GAAG,KAGtDmpC,SAAU,SAAU5hG,GAChBA,EAAQlH,EAAEqP,QAAQnI,IAAUA,YAAiBrC,GAAkBqC,EAAM4I,MAAM,IAAM5I,GACjFoC,KAAKw9F,QAAU5/F,EACfoC,KAAKs/F,eAAiB,MAE1B1hG,MAAO,SAAUA,GAAV,GAGCkhG,GAFAl4F,EAAO5G,KACPu/C,EAAW34C,EAAK64F,cAEpB,OAAI7hG,KAAUhH,EACHgQ,EAAK42F,QAAQh3F,SAExBI,EAAK44F,SAAS5hG,GACT2hD,GAAiC,aAArBA,EAAS/S,UACtB5lC,EAAK64F,eAAiBlgD,EAAW7oD,EAAEylD,YAEnCv1C,EAAKwlD,UACL0yC,EAAUl4F,EAAK84F,cAAc94F,EAAK42F,SACF,aAA5B52F,EAAKxG,QAAQ+2E,YACbvwE,EAAKkuB,WAETluB,EAAKkuB,OAAOgqE,GACZv/C,EAASnD,WAEbx1C,EAAKi4F,aAAc,EACZt/C,IAEX/4B,MAAO,WACH,MAAOxmB,MAAKjI,QAAQ4C,SAAS,YAEjCupC,OAAQ,SAAUj8B,GACTA,EAAE7D,sBACEpE,KAAKgI,QAAQ,SAAWukC,KAAM71C,EAAEuR,EAAE22B,kBACnC5+B,KAAK80B,OAAO7sB,EAAE22B,gBAI1B+gE,WAAY,SAAUzgG,EAAMgT,GAAhB,GAGJ2F,GACAm3B,EAHApoC,EAAO5G,KACPrC,EAAM,EAGNiiG,IACJ,KAAKh5F,EAAK04F,gBAAkB14F,EAAKi5F,aAAe3gG,EAAM,CAElD,IADA0H,EAAKi5F,WAAa3gG,EACXvB,EAAMuU,EAAOta,OAAQ+F,IACxBiiG,EAAW93F,KAAK0oF,EAAUt+E,EAAOvU,GAAMuB,GAE3C2Y,GAAO,2BAA6B+nF,EAAWhoG,OAAS,wEACxDo3C,EAAe1sC,SAAS,UAAW,SAAUuV,GAC7CjR,EAAK04F,eAAiB,SAAU3zF,GAC5B,MAAOqjC,GAASrjC,EAASi0F,IAGjC,MAAOh5F,GAAK04F,gBAEhBQ,kBAAmB,SAAUr5E,EAAUvU,GAApB,GACXtU,GAAQoC,KAAKu+F,aAAa93E,GAC1Bs5E,EAAY//F,KAAK2/F,iBAAkB/hG,GAAOsU,EAC9C,OAAO6tF,GAAUniG,IAErB6/F,QAAS,WACLz9F,KAAKu+F,aAAermG,EAAMorB,OAAOtjB,KAAKI,QAAQ4nD,iBAElDq3C,UAAW,SAAUP,GAAV,GASHvyC,GACAp6C,EAAOi5C,EATPxkD,EAAO5G,KACPrF,EAAWiM,EAAK7O,QAAQ,GAAG4C,SAC3Bw8E,EAAavwE,EAAKxG,QAAQ+2E,WAC1B8nB,EAAkBr4F,EAAK02F,iBACvBn3E,EAAYvf,EAAK22F,WACjBrrF,EAAStL,EAAK42F,QACdxI,KACAl6F,EAAI,EAGJklG,EAAiB,CAErB,IADAlB,EAAUA,EAAQt4F,QACd2wE,KAAe,GAAS2nB,EAAQlnG,QAW7B,GAAmB,aAAfu/E,EACP,KAAOr8E,EAAIgkG,EAAQlnG,OAAQkD,IAEvB,GADAqX,EAAQ2sF,EAAQhkG,GACXpE,EAAEiE,EAASwX,IAAQtY,SAAS,oBAGjC,IAAK0yD,EAAI,EAAGA,EAAI0yC,EAAgBrnG,OAAQ20D,IAEpC,GADAnB,EAAgB6zC,EAAgB1yC,GAC5BnB,IAAkBj5C,EAAO,CACzBzb,EAAEiE,EAASywD,IAAgBT,YAAY,oBACvCqqC,EAAQltF,MACJuuD,SAAU9J,EAAIyzC,EACdv5E,SAAUN,EAAU/d,OAAOmkD,EAAG,GAAG,KAErC0yC,EAAgB72F,OAAOmkD,EAAG,GAC1BuyC,EAAQ12F,OAAOtN,EAAG,GAClBoX,EAAO9J,OAAOmkD,EAAG,GACjByzC,GAAkB,EAClBllG,GAAK,EACLyxD,GAAK,CACL,YA/B4B,CACxC,KAAOzxD,EAAImkG,EAAgBrnG,OAAQkD,IAC/BpE,EAAEiE,EAASskG,EAAgBnkG,KAAK6vD,YAAY,oBAC5CqqC,EAAQltF,MACJuuD,SAAUv7D,EACV2rB,SAAUN,EAAUrrB,IAG5B8L,GAAK42F,WACL52F,EAAK22F,cACL32F,EAAK02F,oBA0BT,OACIwB,QAASA,EACT9J,QAASA,IAGjBoK,kBAAmB,SAAUN,GAKzB,IALe,GAEXr4E,GAAUtU,EAAOkkD,EADjB17D,EAAWqF,KAAKjI,QAAQ,GAAG4C,SAE3Bq6F,KACAr3F,EAAM,EACHA,EAAMmhG,EAAQlnG,OAAQ+F,IACzBwU,EAAQ2sF,EAAQnhG,GAChB8oB,EAAWzmB,KAAKk6C,MAAM/nC,GAAOo6B,KAC7B8pB,EAAWr2D,KAAK8/F,kBAAkBr5E,EAAUzmB,KAAKw9F,SAC7CnnC,OACA2+B,EAAQltF,KAAK9H,KAAKu/F,SAASlpC,IAC3B3/D,EAAEiE,EAASwX,IAAQw4C,YAAY,oBAGvC,SAAIqqC,EAAQp9F,SACRoI,KAAKgI,QAAQyxB,GACTylE,SACAlK,QAASA,KAEN,IAIfnxD,QAAS,SAAUi7D,GAAV,GAIDr4E,GAAUtU,EAHVvL,EAAO5G,KACPrF,EAAWiM,EAAK7O,QAAQ,GAAG4C,SAC3Ba,EAAOoL,EAAKszC,MAEZglD,KACAvhG,EAAM,CAIV,KAHI2xB,EAAKwvE,SACLl4F,EAAK2tB,MAAMuqE,GAERnhG,EAAMmhG,EAAQlnG,OAAQ+F,IACzBwU,EAAQ2sF,EAAQnhG,GAChB8oB,EAAWjrB,EAAK2W,GACZA,QAAiBsU,IAGrBA,EAAWA,EAAS8lB,KACpB3lC,EAAK02F,iBAAiBx1F,KAAKqK,GAC3BvL,EAAK22F,WAAWz1F,KAAK2e,GACrB7f,EAAK42F,QAAQ11F,KAAKlB,EAAK23F,aAAa93E,IACpC/vB,EAAEiE,EAASwX,IAAQ7X,SAAS,oBAAoB4I,KAAK,iBAAiB,GACtEg8F,EAAMp3F,MAAO2e,SAAUA,IAE3B,OAAOy4E,IAEXvD,gBAAiB,SAAU5jG,GACvB,MAAOrB,GAAEqB,GAASyD,KAAK,iBAE3BkjG,KAAM,SAAUjX,GAOZ,MANyB,gBAAdA,GACPA,GAAaA,GACL1hF,EAAQ0hF,KAChBA,EAAYznF,KAAK27F,gBAAgBlU,GACjCA,GAAaA,IAAc7wF,EAAY6wF,OAEpCA,GAEXwY,UAAW,WAAA,GACHr5F,GAAO5G,KACPI,EAAUwG,EAAKxG,QACfqC,EAAWrC,EAAQqC,QASvB,OARKA,IAGDA,EAAWvK,EAAMuK,SAASA,GAC1BA,EAAW,SAAUjH,GACjB,MAAO,oEAAsEiH,EAASjH,GAAQ,UAJlGiH,EAAWvK,EAAMuK,SAAS,sEAAwEvK,EAAMuL,KAAKrD,EAAQ4rD,cAAe,QAAU,UAAY1jD,cAAc,IAOrK7F,GAEXi7F,WAAY,WAAA,GACJj7F,GAOK1D,EANLqB,EAAUJ,KAAKI,QACfkhF,GACA7+E,SAAUrC,EAAQqC,SAClBgxF,cAAerzF,EAAQqzF,cACvBC,mBAAoBtzF,EAAQszF,mBAEhC,KAAS30F,IAAOuiF,GACZ7+E,EAAW6+E,EAAUviF,GACjB0D,GAAgC,kBAAbA,KACnB6+E,EAAUviF,GAAO7G,EAAMuK,SAASA,GAGxCzC,MAAKshF,UAAYA,GAErB4e,kBAAmB,SAAUpB,GAGzB,IAHe,GACXqB,MACAxiG,EAAM,EACHA,EAAMmhG,EAAQlnG,OAAQ+F,IACrBmhG,EAAQnhG,KAAS/G,GACjBupG,EAAWr4F,KAAKg3F,EAAQnhG,GAGhC,OAAOwiG,IAEXT,cAAe,SAAUxtF,EAAQ4sF,GAAlB,GAGP3sF,GAFA3W,EAAOwE,KAAKk6C,MACZv8C,EAAM,CAGV,IADAmhG,EAAUA,EAAUA,EAAQt4F,YACvB0L,EAAOta,OACR,QAEJ,MAAO+F,EAAMnC,EAAK5D,OAAQ+F,IACtBwU,EAAQnS,KAAK8/F,kBAAkBtkG,EAAKmC,GAAK4uC,KAAMr6B,GAC3CC,SACA2sF,EAAQ3sF,GAASxU,EAGzB,OAAOqC,MAAKkgG,kBAAkBpB,IAElCsB,kBAAmB,WAQf,IARe,GACXroG,GAAUiI,KAAKjI,QAAQ,GACvB8jE,EAAU77D,KAAK67D,QAAQ,GACvBl8D,EAAYk8D,EAAQl8D,UACpB0gG,EAAa3pG,EAAEqB,EAAQ4C,SAAS,IAAIzB,SACpC80C,EAAYpvC,KAAKpE,MAAMmF,EAAY0gG,IAAe,EAClD9zD,EAAOx0C,EAAQ4C,SAASqzC,IAAcj2C,EAAQuoG,UAC9CrmE,EAAUsS,EAAKqrD,UAAYj4F,EACxB4sC,GACH,GAAItS,EAAS,CACT,GAAIsS,EAAKqrD,UAAYyI,EAAa1gG,IAAc4sC,EAAKrC,YACjD,KAEJqC,GAAOA,EAAKrC,gBACT,CACH,GAAIqC,EAAKqrD,WAAaj4F,IAAc4sC,EAAKg0D,gBACrC,KAEJh0D,GAAOA,EAAKg0D,gBAGpB,MAAOvgG,MAAKk6C,MAAMxjD,EAAE61C,GAAM/wC,KAAK,kBAEnCsiG,aAAc,WACN99F,KAAKwgG,aAAexgG,KAAKshF,UAAUoS,oBACnC1zF,KAAKy1F,OAAOz7F,OACZgG,KAAK67D,QAAQmiC,OAAOh+F,KAAK29F,aAEzB39F,KAAKy1F,OAAO30F,OACZd,KAAK67D,QAAQjyC,IAAI,SAAU5pB,KAAK29F,aAGxCE,cAAe,WAAA,GAKP4C,GAJAh+F,EAAWzC,KAAKshF,UAAUoS,kBACzBjxF,KAGDg+F,EAAczgG,KAAKogG,oBACnBK,GACAzgG,KAAKy1F,OAAO/yF,KAAKD,EAASg+F,EAAY3yD,UAG9C4yD,YAAa,SAAU18F,GAAV,GACLuoC,GAAO,kEACP9lB,EAAWziB,EAAQuoC,KACnBo0D,EAAiC,IAAlB38F,EAAQmO,MACvBk5C,EAAWrnD,EAAQqnD,QAYvB,OAXIs1C,IAAgB38F,EAAQ48F,WACxBr0D,GAAQ,YAER8e,IACA9e,GAAQ,qBAEZA,GAAQ,KAAO8e,EAAW,wBAA0B,IAAM,uBAAyBrnD,EAAQmO,MAAQ,KACnGo6B,GAAQvsC,KAAKshF,UAAU7+E,SAASgkB,GAC5Bk6E,GAAgB38F,EAAQ48F,WACxBr0D,GAAQ,wBAA0BvsC,KAAKshF,UAAUmS,cAAczvF,EAAQ8pC,OAAS,UAE7EvB,EAAO,SAElBwxD,QAAS,WAAA,GAID/5F,GAIA8pC,EAAO8yD,EAAUr0C,EAPjB7pD,EAAO,GACP5H,EAAI,EACJ6C,EAAM,EAENkjG,KACAl4E,EAAO3oB,KAAK4kB,WAAW+D,OACvBzW,EAASlS,KAAKpC,QAEd4iG,EAAYxgG,KAAKwgG,WACrB,IAAIA,EACA,IAAK1lG,EAAI,EAAGA,EAAI6tB,EAAK/wB,OAAQkD,IAGzB,IAFAgzC,EAAQnlB,EAAK7tB,GACb8lG,GAAW,EACNr0C,EAAI,EAAGA,EAAIze,EAAMtnB,MAAM5uB,OAAQ20D,IAChCvoD,GACIqnD,SAAUrrD,KAAK8gG,UAAUhzD,EAAMtnB,MAAM+lC,GAAIr6C,GACzCq6B,KAAMuB,EAAMtnB,MAAM+lC,GAClBze,MAAOA,EAAMlwC,MACbgjG,SAAUA,EACVzuF,MAAOxU,GAEXkjG,EAAYljG,GAAOqG,EACnBrG,GAAO,EACP+E,GAAQ1C,KAAK0gG,YAAY18F,GACzB48F,GAAW,MAInB,KAAK9lG,EAAI,EAAGA,EAAI6tB,EAAK/wB,OAAQkD,IACzBkJ,GACIqnD,SAAUrrD,KAAK8gG,UAAUn4E,EAAK7tB,GAAIoX,GAClCq6B,KAAM5jB,EAAK7tB,GACXqX,MAAOrX,GAEX+lG,EAAY/lG,GAAKkJ,EACjBtB,GAAQ1C,KAAK0gG,YAAY18F,EAGjChE,MAAKk6C,MAAQ2mD,EACb7gG,KAAKjI,QAAQ,GAAG6f,UAAYlV,EACxB89F,GAAaK,EAAYjpG,QACzBoI,KAAK69F,iBAGbiD,UAAW,SAAUr6E,EAAUvU,GAC3B,GAAI4iB,IAAU90B,KAAKm/F,cAA4C,aAA5Bn/F,KAAKI,QAAQ+2E,UAChD,OAAOriD,IAAU90B,KAAK8/F,kBAAkBr5E,EAAUvU,SAEtDgjF,YAAa,SAAUrxF,GACnB7D,KAAK+gG,cAAgBrgG,KAAWmD,IAEpCs7F,WAAY,WAIR,MAHKn/F,MAAK+gG,eACN/gG,KAAKk1F,YAAYl1F,KAAK4kB,WAAW/gB,WAE7B3L,EAAMsD,KAAKuvC,MAAMY,eAAe3rC,KAAK4kB,WAAW/gB,SAAU7D,KAAK+gG,gBAE3EvpF,QAAS,SAAUvP,GAAV,GAKDjJ,GAJA4H,EAAO5G,KACP22B,EAAS1uB,GAAKA,EAAE0uB,OAChBqqE,EAAmBp6F,EAAKxG,QAAQ4gG,iBAChCC,EAA0B,eAAXtqE,CAEnB/vB,GAAKoB,QAAQ,eACbpB,EAAKyf,cAAc,WACnBzf,EAAKk3F,eACLl3F,EAAKm3F,UACLn3F,EAAKwlD,OAAM,GACP60C,GAA2B,WAAXtqE,GAChB33B,EAAS0xF,EAAgB9pF,EAAK22F,WAAYt1F,EAAEue,OACxCxnB,EAAO8xF,QAAQl5F,SACXqpG,EACAr6F,EAAKoB,QAAQ,sBAAwBwe,MAAOxnB,EAAO8xF,UAEnDlqF,EAAKhJ,MAAMgJ,EAAK03F,WAAWt/F,EAAO+xF,cAGnCnqF,EAAKu4F,cAAgBv4F,EAAKi4F,aACjCj4F,EAAK2tB,MAAM,GACP3tB,EAAKi4F,cACLj4F,EAAKi4F,aAAc,EACnBj4F,EAAK02F,iBAAmB12F,EAAK84F,cAAc94F,EAAK42F,QAAS52F,EAAK02F,oBAE1D0D,GAAsBrqE,GAAqB,QAAXA,GACxC/vB,EAAKhJ,MAAMgJ,EAAK42F,SAEhB52F,EAAK64F,gBACL74F,EAAK64F,eAAerjD,UAExBx1C,EAAKyf,cAAc,WACnBzf,EAAKoB,QAAQ,cAEjBokD,MAAO,SAAUA,GACb,MAAIA,KAAUx1D,EACHoJ,KAAKkhG,QAEhBlhG,KAAKkhG,OAAS90C,EAAdpsD,IAEJwgG,UAAW,WACP,OAAQxgG,KAAK4kB,WAAWkpB,aAAel2C,UAG/CypB,EAAG8G,OAAOgpE,IAoEZx6F,OAAOuB,MAAM2sB,QACRluB,OAAOuB,OACE,kBAAVzB,SAAwBA,OAAOgiC,IAAMhiC,OAAS,SAAUiiC,EAAIC,EAAIC,IACrEA,GAAMD,OAEV,SAAUniC,EAAGC,QACVA,OAAO,kBAAmB,cAAeD,IAC3C,WA4/BE,MAp/BC,UAAUE,EAAGE,GA2zBV,QAASyjC,GAAMxuB,EAAMmG,EAAKtZ,EAAKyoG,GAC3B,GAA0FxpG,GAAtFsX,EAAQpD,EAAKc,cAAey0F,EAAUpvF,EAAIrF,cAAe00F,EAAU3oG,EAAIiU,aAS3E,OARAsC,IAAgBA,EAAQkyF,EACxBxpG,EAAMsX,GAASkyF,EAAU,GACrBlyF,EAAQmyF,IACRnyF,EAAQmyF,GAERzpG,EAAM0pG,IACN1pG,EAAM0pG,GAEHpyF,EAAQ,IAAMtX,EAEzB,QAASgxB,GAAKvoB,GACV,GAAa5E,GAATmC,EAAM,EAASqU,EAAM5R,EAAQ4R,IAAKtZ,EAAM0H,EAAQ1H,IAAKuW,EAAQ7O,EAAQ6O,MAAOsU,EAASnjB,EAAQmjB,OAAQ+9E,EAAQlhG,EAAQkhG,MAAOC,EAAkBnhG,EAAQmhG,gBAAiB3pG,EAASwI,EAAQwvC,OAAS,GAAI4xD,EAAsBphG,EAAQohG,oBAAqBC,EAAcrhG,EAAQshG,QAAU,EAAGvxE,EAAa/vB,EAAQ+vB,YAAcwxE,EAAoB9lC,EAAUz7D,EAAQy7D,SAAW+lC,EAAc9xD,EAAQ1vC,EAAQ0vC,OAAS+xD,EAAmBn/F,EAAOtC,EAAQsC,MAAQ,sGAIpc,KAHI8+F,IACA9+F,GAAQytB,EAAWoxE,EAAgBtyF,KAEhCtR,EAAM/F,EAAQ+F,IACbA,EAAM,GAAKA,EAAM8jG,IAAgB,IACjC/+F,GAAQ,uBACJ8+F,IACA9+F,GAAQytB,EAAWoxE,EAAgBtyF,MAG3CA,EAAQ,GAAI6yF,IAAK7yF,EAAMtC,cAAesC,EAAMvC,WAAYuC,EAAM3C,UAAW,EAAG,EAAG,GAC/E2G,EAAUhE,EAAO,GACjBzT,EAAO8lG,EAAMryF,EAAOtR,EAAKyC,EAAQ2hG,cACjCr/F,GAAQs/F,EAAU/yF,EAAO+C,EAAKtZ,GAAOmjE,EAAQrgE,GAAQs0C,EAAMt0C,GAC3D+nB,EAAOtU,EAAO,EAElB,OAAOvM,GAAO,wBAElB,QAASgyC,GAAQutD,EAAOC,EAAOnuC,GAC3B,GAAIouC,GAAQF,EAAMt1F,cAAesC,EAAQizF,EAAMv1F,cAAehV,EAAMsX,EAAOjQ,EAAS,CAUpF,OATI+0D,KACA9kD,GAAgBA,EAAQ8kD,EACxBp8D,EAAMsX,EAAQA,EAAQ8kD,EAAWA,EAAW,GAE5CouC,EAAQxqG,EACRqH,EAAS,EACFmjG,EAAQlzF,IACfjQ,MAEGA,EAEX,QAASojG,KACL,GAAItxE,GAAQ,GAAIgxE,GAChB,OAAO,IAAIA,IAAKhxE,EAAMnkB,cAAemkB,EAAMpkB,WAAYokB,EAAMxkB,WAEjE,QAAS+1F,GAAczkG,EAAOoU,EAAKtZ,GAC/B,GAAIo4B,GAAQsxE,GASZ,OARIxkG,KACAkzB,EAAQ,GAAIgxE,MAAMlkG,KAElBoU,EAAM8e,EACNA,EAAQ,GAAIgxE,MAAM9vF,IACXtZ,EAAMo4B,IACbA,EAAQ,GAAIgxE,MAAMppG,KAEfo4B,EAEX,QAASkxE,GAAUn2F,EAAMmG,EAAKtZ,GAC1B,OAAQmT,IAASmG,IAAQnG,IAASnT,EAEtC,QAAS4pG,GAAWjvF,EAAO1V,GACvB,MAAO0V,GAAM7M,MAAM7I,GAAKuY,OAAO7C,EAAM7M,MAAM,EAAG7I,IAElD,QAASuxB,GAAQrjB,EAAMjO,EAAO2kG,GAC1B3kG,EAAQA,YAAiBkkG,IAAOlkG,EAAM+O,cAAgBd,EAAKc,cAAgB41F,EAAa3kG,EACxFiO,EAAK6J,YAAY9X,GAErB,QAAS4kG,GAAYv6F,GACjB,GAAI3E,GAAW5M,EAAEsJ,MAAMnG,SAAS,mBAC3ByJ,IACD5M,EAAEsJ,MAAMoB,YAAYkwF,GAAOmR,GAAWvkG,QAAQ+J,EAAE/I,UAAc+I,EAAE/I,MAAQwjG,IAGhF,QAASC,GAAQ16F,GACbA,EAAE9D,iBAEN,QAASy+F,GAAgBp3F,GACrB,MAAOE,GAAWF,GAASO,UAAUC,SAEzC,QAASuuB,GAAUn6B,GACf,GAAI6O,GAAQka,GAAM/oB,EAAQ6O,OAAQ4zF,EAAQ15E,GAAM/oB,EAAQyiG,OAAQr3F,EAAUE,EAAWtL,EAAQoL,QAC7FpL,GAAQ2I,OAAS+5F,EAAc1iG,EAAQ2I,QAAUyC,EAAQO,UAAUC,SAASG,SAASwE,GACjF8E,MAAMxG,KACNA,EAAQ,EACR7O,EAAQ6O,MAAQ8zF,IAEhBF,IAAUjsG,GAAaisG,EAAQ5zF,KAC/B7O,EAAQyiG,MAAQE,GAEE,OAAlB3iG,EAAQ4iG,QACR5iG,EAAQ4iG,UAGhB,QAASC,GAAiBlrG,GAClB85F,GACA95F,EAAQuvB,KAAK,KAAKpkB,KAAK,eAAgB,MAG/C,QAASggG,GAAwBnrG,EAASorG,GACtCprG,EAAQuC,SAAS,KAAO6oG,GAE5B,QAASlgG,GAAQ4I,EAAMm3F,GACnB,IAAK,GAAIloG,GAAI,EAAGlD,EAASorG,EAAMprG,OAAQkD,EAAIlD,EAAQkD,IAC/C,GAAI+Q,KAAUm3F,EAAMloG,GAChB,OAAO,CAGf,QAAO,EAEX,QAASsoG,GAAgBC,EAAQC,GAC7B,QAAID,IACOA,EAAO12F,gBAAkB22F,EAAO32F,eAAiB02F,EAAO32F,aAAe42F,EAAO52F,YAAc22F,EAAO/2F,YAAcg3F,EAAOh3F,WAIvI,QAASi3F,GAAaF,EAAQC,GAC1B,QAAID,IACOA,EAAO12F,gBAAkB22F,EAAO32F,eAAiB02F,EAAO32F,aAAe42F,EAAO52F,YAI7F,QAAS82F,GAAgB1hG,GACrB,MAAI5J,GAAMgE,WAAW4F,GACVA,EAEPpL,EAAEqP,QAAQjE,GACH2hG,EAAmB3hG,GAEvBpL,EAAEkK,KAEb,QAAS8iG,GAAkBV,GAA3B,GAEaloG,GADLkE,IACJ,KAASlE,EAAI,EAAGA,EAAIkoG,EAAMprG,OAAQkD,IAC9BkE,EAAO8I,KAAKk7F,EAAMloG,GAAGqY,SAAS,EAAG,EAAG,EAAG,GAE3C,OAAOnU,GAEX,QAASykG,GAAmBT,GAA5B,GACQnrF,GAAM8I,EAaG7lB,EACDma,EACA9C,EAfQwxF,KAAoB13F,GAChC,KACA,KACA,KACA,KACA,KACA,KACA,MACD23F,EAAmB,gDAC1B,IAAIZ,EAAM,YAAclB,IACpB6B,EAAgBD,EAAkBV,GAClCnrF,EAAO,4DAA8D8rF,EAAgB,WAAaC,MAC/F,CACH,IAAS9oG,EAAI,EAAGA,EAAIkoG,EAAMprG,OAAQkD,IAC1Bma,EAAM+tF,EAAMloG,GAAG0L,MAAM,EAAG,GAAG1J,cAC3BqV,EAAQzb,EAAEuM,QAAQgS,EAAKhJ,GACvBkG,MACAwxF,EAAc77F,KAAKqK,EAG3B0F,GAAO,gDAAkD8rF,EAAgB,WAAaC,EAG1F,MADAjjF,GAAere,SAAS,OAAQuV,GAGpC,QAASgsF,GAAYC,EAAUp3C,GAK3B,MAJIo3C,aAAoB9nG,OAAQ0wD,YAAoB1wD,QAChD8nG,EAAWA,EAAS7nG,UACpBywD,EAAWA,EAASzwD,WAEjB6nG,IAAap3C,EAv+B3B,GA+iBO5gD,GA9iBA5T,EAAQvB,OAAOuB,MAAOC,EAAUD,EAAMC,QAASkpB,EAAKnpB,EAAMmpB,GAAIrc,EAASqc,EAAGrc,OAAQ2c,EAAOzpB,EAAMypB,KAAMqnB,EAAQ9wC,EAAMwe,UAAWzD,EAAY/a,EAAM2T,KAAKoH,UAAW3G,EAAUpU,EAAM2T,KAAKS,QAAS0jB,EAAa93B,EAAM2T,KAAKmkB,WAAY8yE,EAAgB5qG,EAAMoa,eAAgB7P,EAAWvK,EAAMuK,SAAUiJ,EAAaxT,EAAMwT,WAAYtT,EAAcF,EAAMC,QAAQC,YAAa2rG,EAAmB3rG,EAAcA,EAAYH,IAAM,mBAAqB,GAAI2pG,EAAen/F,EAAS,mJAAqJ6F,cAAc,IAAUu5F,EAAoBp/F,EAAS,mCAAqC6F,cAAc,IAAUq5F,EAAqBl/F,EAAS,+CAAiD6F,cAAc,IAAU/O,EAAUrB,EAAMC,QAAQoB,QAASs4F,EAAQt4F,EAAQgB,MAAQhB,EAAQkB,QAAU,EAAGf,EAAcxB,EAAMyB,aAAcH,EAAatB,EAAMuB,YAAawI,EAAK,iBAAkBo1E,EAAQ,QAAUp1E,EAAI+hG,EAAa,UAAY/hG,EAAImvF,EAAK,KAAM6S,EAAM,MAAO/hF,EAAO,OAAQgiF,EAAQ,UAAWnB,EAAQ,QAASoB,EAAU,UAAW1qE,GAAS,SAAU2qE,GAAW,WAAYp6C,GAAQ,QAASsnC,GAAQ,gBAAiB7Z,GAAW,mBAAoB4Z,GAAU,kBAAmBgT,GAAa,gBAAiBC,GAAkB,WAAaD,GAAa,IAAKE,GAAQ,cAAeC,GAAe,kBAAmBllC,GAAO,OAASr9D,EAAIygG,GAAQ,QAAS+B,GAAgB/B,GAAQzgG,EAAIwgG,GAAatqG,EAAQggB,MAAQ,aAAe,aAAcusF,GAAqBvsG,EAAQggB,MAAQ,aAAelW,EAAK,aAAeA,EAAI0iG,GAAaxsG,EAAQggB,MAAQ,WAAalW,EAAK,aAAeA,EAAK,aAAeA,EAAI4uB,GAAgB,IAAOd,GAAa,MAAU60E,GAAY,aAAcC,GAAY,aAAcC,GAAgB,gBAAiBC,GAAgB,gBAAiBC,GAAa,aAAch/F,GAAQtP,EAAEsP,MAAOtF,GAAShK,EAAEgK,OAAQohG,GAAO9lG,KAAMmtB,IACx5DnU,MAAO,EACPD,KAAM,EACNkwF,OAAQ,EACRC,QAAS,GAEbC,GAAWngG,EAAOtE,QAClBC,KAAM,SAAU5I,EAASqI,GACrB,GAAiBxC,GAAOimB,EAApBjd,EAAO5G,IACXgF,GAAOf,GAAGtD,KAAKwH,KAAKvB,EAAM7O,EAASqI,GACnCrI,EAAU6O,EAAKvN,QAAUuN,EAAK7O,QAC9BqI,EAAUwG,EAAKxG,QACfA,EAAQ+iB,IAAMxsB,OAAOyuG,SAAShlG,EAAQ+iB,KACtCvc,EAAKxG,QAAQ2hG,aAAeyB,EAAgB58F,EAAKxG,QAAQ2hG,cACzDn7F,EAAK82F,aACL92F,EAAK0rF,UACL1rF,EAAK4rF,QAAQ5rF,EAAK4uF,QAClB3xE,EAAK9rB,EAAQuC,SAAS,wBAA0B8F,EAAQ+vB,WAAa,iBAAmB,KAAKzqB,GAAGg/F,GAAqB,IAAMC,GAAYH,GAAchC,GAAa98F,GAAGs+F,EAAY,kBAAmBh+F,GAAMY,EAAKm9B,MAAOn9B,IAAOlB,GAAG2xE,EAAOmtB,GAAc,SAAUv8F,GAC3P,GAAIo9F,GAAOp9F,EAAE22B,cAAcqL,WAAYrsC,EAAQgJ,EAAK0+F,cAAcD,EAC9DA,GAAK9hG,KAAKrF,QAAQ,UAClB+J,EAAE9D,iBAEiB,SAAnByC,EAAKszC,MAAMhrC,MAAmBtI,EAAKxG,QAAQ2hG,aAAankG,IAG5DgJ,EAAKs9B,OAAOxtC,EAAE2uG,MACf3/F,GAAG,UAAYzD,EAAI,6BAA8B,WAChD2E,EAAK2+F,WAAW3+F,EAAKxG,QAAQolG,cAAe,KAC7CtiG,KAAKkuF,GACJvtE,IACAjd,EAAK6+F,QAAU5hF,EAAK,kBAExB0W,EAAUn6B,GACVxC,EAAQorC,EAAM5oC,EAAQxC,MAAOwC,EAAQ2I,OAAQ3I,EAAQoL,SACrD5E,EAAK8+F,OAASv8E,GAAM/oB,EAAQ6O,OAC5BrI,EAAK63F,SAAW,GAAIqD,MAAMO,EAAczkG,EAAOwC,EAAQ4R,IAAK5R,EAAQ1H,OACpEkO,EAAK++F,eAAiB,WAElB,GADA/+F,EAAKg/F,SAAU,EACXh/F,EAAKi/F,MAAMhsG,SAAS49E,IAAW,CAC/B,GAAIquB,GAAcl/F,EAAKszC,MAAM6rD,aAAa3D,IAC1Cx7F,GAAKi/F,MAAQj/F,EAAKo/F,YAAYF,GAElCl/F,EAAKi/F,MAAMvrG,SAAS+2F,KAExBzqF,EAAKq/F,kBAAoB,WACrBr/F,EAAKg/F,SAAU,EACfh/F,EAAKi/F,MAAMl7C,YAAY0mC,KAE3BzqF,EAAKhJ,MAAMA,GACX1F,EAAM0uB,OAAOhgB,IAEjBxG,SACI8O,KAAM,WACNtR,MAAO,KACPoU,IAAK,GAAI8vF,IAAK,KAAM,EAAG,GACvBppG,IAAK,GAAIopG,IAAK,KAAM,GAAI,IACxBkB,SACA7/E,IAAK,GACL3X,QAAS,GACTgqF,OAAQ,GACRzsF,OAAQ,GACRiM,SACAmb,YAAY,EACZlhB,MAAO8zF,EACPF,MAAOE,EACP3mB,WACIpoB,YACIj0D,QAASmkG,EACT5jG,SAAS,EACTD,SAAU,IACV62D,QAAS,GAEbnG,UACIhxD,QAAS,SACTM,SAAU,MAGlBqhB,UAAYwkF,iBAAkB,KAElCx+F,QACI+xB,GACA2qE,IAEJ/+E,WAAY,SAAUjlB,GAClB,GAAIwG,GAAO5G,IACXu6B,GAAUn6B,GACVA,EAAQ2hG,aAAeyB,EAAgBpjG,EAAQ2hG,cAC/C/8F,EAAOf,GAAGohB,WAAWld,KAAKvB,EAAMxG,GAChCwG,EAAK82F,aACL92F,EAAK4rF,QAAQ5rF,EAAK4uF,QAClB5uF,EAAK8+F,OAASv8E,GAAMviB,EAAKxG,QAAQ6O,OACjCrI,EAAKwzB,YAETtU,QAAS,WACL,GAAIlf,GAAO5G,KAAM8wB,EAAQlqB,EAAKu/F,MAC9Bv/F,GAAK7O,QAAQ6xB,IAAI3nB,GACjB2E,EAAKw/F,OAAOx8E,IAAI3nB,GAChB2E,EAAKg+F,IAAWh7E,IAAI3nB,GACpB2E,EAAKi+F,IAAWj7E,IAAI3nB,GACpB/J,EAAM4tB,QAAQlf,EAAKy/F,QACfv1E,GACA54B,EAAM4tB,QAAQgL,EAAMlH,IAAI3nB,IAE5B+C,EAAOf,GAAG6hB,QAAQ3d,KAAKvB,IAE3B+E,QAAS,WACL,MAAO3L,MAAKy+F,UAEhB91E,KAAM,WACF,MAAO3oB,MAAKk6C,OAEhB3lB,MAAO,SAAUxd,GACbA,EAAQA,GAAS/W,KAAKqmG,OACtBrmG,KAAKsmG,WAAWvvF,GAChBA,EAAMwd,SAEVviB,IAAK,SAAUpU,GACX,MAAOoC,MAAKumG,QAAQtC,EAAKrmG,IAE7BlF,IAAK,SAAUkF,GACX,MAAOoC,MAAKumG,QAAQ,MAAO3oG,IAE/B4oG,eAAgB,WACZxmG,KAAK07B,UAAUkpE,QAEnB6B,iBAAkB,WACdzmG,KAAK07B,UAAUmpE,GAAW,IAE9B6B,WAAY,WACR,GAAI9/F,GAAO5G,KAAMmS,EAAQvL,EAAK8+F,MAC1B9+F,GAAKw/F,OAAOvsG,SAAS49E,KAGzB7wE,EAAKwzB,SAASxzB,EAAK63F,WAAYtsF,IAEnCw0F,aAAc,SAAU/oG,GACpB,GAAIgJ,GAAO5G,KAAMmS,EAAQvL,EAAK8+F,OAAQ7C,EAAQj8F,EAAKxG,QAAQyiG,KAC3D,IAAKjlG,EAGL,MAAIuU,KAAUgX,GAAM05E,IACXgB,EAAYj9F,EAAK6vF,OAAQ7vF,EAAK63F,WAAcoF,EAAYj9F,EAAK6vF,OAAQ74F,KACtEgJ,EAAKhJ,MAAMA,GACXgJ,EAAKoB,QAAQyxB,KAEjB,IAEJ7yB,EAAKwzB,SAASx8B,IAASuU,GAAvBvL,IAEJwzB,SAAU,SAAUx8B,EAAO+qB,GAAjB,GAEF/hB,GAAaxG,EAAwBoL,EAA2BwG,EAAmBtZ,EAAmB2hC,EAAqBrN,EAAoBw/B,EAAsBK,EAA6BxU,EAA8BuuD,EAA0C71C,EAAuD9jC,EAAIk2E,EAAazuD,EAASpxC,EAuCvVnM,CAxCRwxB,GAAOlT,MAAMkT,GAAQQ,GAAMR,GAAQA,EAC/B/hB,EAAO5G,KAAMI,EAAUwG,EAAKxG,QAASoL,EAAUpL,EAAQoL,QAASwG,EAAM5R,EAAQ4R,IAAKtZ,EAAM0H,EAAQ1H,IAAK2hC,EAAQzzB,EAAKw/F,OAAQp5E,EAAOpmB,EAAKy/F,OAAQ75C,EAAM5lD,EAAKigG,UAAWh6C,EAAgBjmD,EAAK6vF,OAAQp+C,EAAezxC,EAAK63F,SAAUmI,EAAShpG,IAAUA,GAASy6C,EAAc0Y,EAAWpoC,IAAS/xB,GAAa+xB,IAAS/hB,EAAK8+F,OACxT9nG,IACDA,EAAQy6C,GAEZzxC,EAAK63F,SAAW7gG,EAAQ,GAAIkkG,MAAMO,EAAczkG,EAAOoU,EAAKtZ,KACxDiwB,IAAS/xB,EACT+xB,EAAO/hB,EAAK8+F,OAEZ9+F,EAAK8+F,OAAS/8E,EAElB/hB,EAAKszC,MAAQipD,EAAcr3F,EAASqd,MAAMR,GAC1C+rB,EAAUyuD,EAAYzuD,QACtBpxC,EAAWqlB,IAASQ,GAAMg7E,GAC1B9pE,EAAMj5B,YAAYq2E,GAAUn0E,GAAUJ,KAAK4hG,GAAexhG,GAC1DA,EAAWoxC,EAAQ92C,EAAOoU,GAAO,EACjCpL,EAAKg+F,IAAWxjG,YAAYq2E,GAAUn0E,GAAUJ,KAAK4hG,GAAexhG,GACpEA,EAAWoxC,EAAQ92C,EAAOlF,MAC1BkO,EAAKi+F,IAAWzjG,YAAYq2E,GAAUn0E,GAAUJ,KAAK4hG,GAAexhG,GAChE0pB,GAAQw/B,GAAOA,EAAIhxD,KAAK,eACxBgxD,EAAI7sC,WAAU,GAAM,GACpBqN,EAAKrN,WAAU,GAAM,IAEzB/Y,EAAKigG,UAAY75E,EACZA,IAAQpmB,EAAKkgG,cACdzsE,EAAM33B,KAAKygG,EAAY9oE,MAAMz8B,EAAOoU,EAAKtZ,EAAK8S,IAC9C5E,EAAKy/F,OAASp5E,EAAKv2B,EAAEysG,EAAYtnC,QAAQn7D,IACrCsR,IAAKA,EACLtZ,IAAKA,EACLmT,KAAMjO,EACNulB,IAAK/iB,EAAQ+iB,IACb6/E,MAAO5iG,EAAQ4iG,MACfj6F,OAAQ3I,EAAQ2I,OAChByC,QAASA,EACTu2F,aAAc3hG,EAAQ2hG,aACtBP,oBAAqBphG,EAAQ+vB,WAC7BzO,SAAUthB,EAAQshB,UACnB9a,EAAKu8F,EAAYj0F,SACpBg0F,EAAwBj2E,EAAIk2E,EAAYj0F,MACxC+zF,EAAiBh2E,GACb91B,EAAU61B,GAAQA,EAAKxxB,KAAK,WAAayxB,EAAGzxB,KAAK,SACrDoL,EAAKmgG,UACD/5E,KAAMA,EACNC,GAAIA,EACJ8jC,SAAUA,EACV61C,OAAQA,EACRzvG,QAASA,IAEbyP,EAAKoB,QAAQo8F,IACbx9F,EAAKmxE,OAAOn6E,IAEZ+qB,IAASQ,GAAM/oB,EAAQyiG,QAAUh2C,IAAkBjmD,EAAKxG,QAAQ2hG,aAAal1C,IAC7EjmD,EAAKogG,OAAO,mBAAoBn6C,GAEpCjmD,EAAKogG,OAAO3V,GAASzzF,IAChBovB,GAAQpmB,EAAKi/F,OACdj/F,EAAKi/F,MAAMl7C,YAAY0mC,IAE3BzqF,EAAKkgG,aAAc,GAEvBlpG,MAAO,SAAUA,GACb,GAAIgJ,GAAO5G,KAAM2oB,EAAO/hB,EAAKszC,MAAO95C,EAAUwG,EAAKxG,QAASosD,EAAM5lD,EAAKszC,MAAOloC,EAAM5R,EAAQ4R,IAAKtZ,EAAM0H,EAAQ1H,GAC/G,OAAIkF,KAAUhH,EACHgQ,EAAK6vF,QAEF,OAAV74F,IACAgJ,EAAK63F,SAAW,GAAIziG,MAAK4K,EAAK63F,SAAS9xF,cAAe/F,EAAK63F,SAAS/xF,WAAY9F,EAAK63F,SAASnyF,YAElG1O,EAAQorC,EAAMprC,EAAOwC,EAAQ2I,OAAQ3I,EAAQoL,SAC/B,OAAV5N,IACAA,EAAQ,GAAIkkG,MAAMlkG,IACbokG,EAAUpkG,EAAOoU,EAAKtZ,KACvBkF,EAAQ,OAGF,OAAVA,GAAmBgJ,EAAKxG,QAAQ2hG,aAAankG,GAEtCgJ,EAAK6vF,SAAW7/F,IACvBgQ,EAAK6vF,OAAS,MAFd7vF,EAAK6vF,OAAS74F,EAId4uD,GAAiB,OAAV5uD,GAAkBgJ,EAAKi/F,MAC9Bj/F,EAAKi/F,MAAMl7C,YAAY,qBAEvB/jD,EAAKkgG,aAAelpG,GAAS+qB,GAA+C,IAAvCA,EAAK+rB,QAAQ92C,EAAOgJ,EAAK63F,UAC9D73F,EAAKwzB,SAASx8B,IAnBlB,IAsBJmmC,MAAO,SAAU97B,GACb,GAA8QrK,GAAO+kG,EAASp6E,EAAQy6B,EAAlSp8C,EAAO5G,KAAMI,EAAUwG,EAAKxG,QAASrB,EAAMkJ,EAAEmuB,QAASzN,EAAO/hB,EAAKszC,MAAO/nC,EAAQvL,EAAK8+F,OAAQ1zF,EAAMpL,EAAKxG,QAAQ4R,IAAKtZ,EAAMkO,EAAKxG,QAAQ1H,IAAK2/C,EAAe,GAAIypD,MAAMl7F,EAAK63F,WAAWpgG,EAAQnG,EAAMC,QAAQkG,MAAMuI,EAAKvN,SAAU4tG,EAAargG,EAAKxG,QAAQ2hG,YA8DhQ,OA7DI95F,GAAEmY,SAAWxZ,EAAKy/F,OAAO,KACzBz/F,EAAKg/F,SAAU,GAEf39F,EAAE8tE,QACEh3E,GAAO4iB,EAAKS,QAAU/jB,GAASU,GAAO4iB,EAAKO,MAAQ7jB,GACnDuI,EAAK6/F,mBACL9D,GAAU,GACH5jG,GAAO4iB,EAAKO,OAAS7jB,GAASU,GAAO4iB,EAAKS,OAAS/jB,GAC1DuI,EAAK4/F,iBACL7D,GAAU,GACH5jG,GAAO4iB,EAAKQ,IACnBvb,EAAK8/F,aACL/D,GAAU,GACH5jG,GAAO4iB,EAAKU,OACnBzb,EAAKs9B,OAAOxtC,EAAEkQ,EAAKi/F,MAAM,GAAG57D,aAC5B04D,GAAU,IAGV5jG,GAAO4iB,EAAKS,QAAU/jB,GAASU,GAAO4iB,EAAKO,MAAQ7jB,GACnDT,EAAQ,EACR+kG,GAAU,GACH5jG,GAAO4iB,EAAKO,OAAS7jB,GAASU,GAAO4iB,EAAKS,OAAS/jB,GAC1DT,KACA+kG,GAAU,GACH5jG,GAAO4iB,EAAKQ,IACnBvkB,EAAkB,IAAVuU,QACRwwF,GAAU,GACH5jG,GAAO4iB,EAAKU,MACnBzkB,EAAkB,IAAVuU,EAAc,EAAI,EAC1BwwF,GAAU,GACH5jG,GAAO4iB,EAAKK,OACnBpb,EAAKs9B,OAAOxtC,EAAEkQ,EAAKi/F,MAAM,GAAG57D,aAC5B04D,GAAU,GACH5jG,GAAO4iB,EAAKY,MAAQxjB,GAAO4iB,EAAKW,KACvCiG,EAASxpB,GAAO4iB,EAAKY,KAAO,QAAU,OACtCygC,EAAOr6B,EAAKJ,GAAQ8vB,GACpBA,EAAe,GAAIypD,IAAK9+C,EAAKr2C,cAAeq2C,EAAKt2C,WAAYs2C,EAAK12C,UAAW+rC,EAAazrC,WAAYyrC,EAAaxrC,aAAcwrC,EAAavrC,aAAcurC,EAAatrC,mBACzK41F,GAAU,GACH5jG,GAAO4iB,EAAKc,QACnBkgF,GAAU,EACV/7F,EAAK4/F,kBACEznG,GAAO4iB,EAAKe,WACnBigF,GAAU,EACV/7F,EAAK6/F,qBAEL7oG,GAAS2qB,KACJA,GACDI,EAAKuG,QAAQmpB,EAAcz6C,GAE3BqpG,EAAW5uD,KACXA,EAAezxC,EAAKsgG,iBAAiB7uD,EAAcz6C,IAEvDoU,EAAM1F,EAAQ0F,GACVgwF,EAAU3pD,EAAcrmC,EAAKtZ,IAC7BkO,EAAKmxE,OAAOsqB,EAAchqD,EAAcj4C,EAAQ4R,IAAK5R,EAAQ1H,QAIrEiqG,GACA16F,EAAE9D,iBAECyC,EAAK63F,UAEhByI,iBAAkB,SAAU7uD,EAAcz6C,GACtC,GAAIgJ,GAAO5G,KAAMsD,GAAW,EAAMqlB,EAAO/hB,EAAKszC,MAAOloC,EAAMpL,EAAKxG,QAAQ4R,IAAKtZ,EAAMkO,EAAKxG,QAAQ1H,IAAKuuG,EAAargG,EAAKxG,QAAQ2hG,aAAcoF,EAAkB,GAAInrG,MAAKq8C,EAAap8C,UAErL,KADA0sB,EAAKuG,QAAQi4E,GAAkBvpG,GACxB0F,GAAU,CAEb,GADAqlB,EAAKuG,QAAQmpB,EAAcz6C,IACtBokG,EAAU3pD,EAAcrmC,EAAKtZ,GAAM,CACpC2/C,EAAe8uD,CACf,OAEJ7jG,EAAW2jG,EAAW5uD,GAE1B,MAAOA,IAEX0uD,SAAU,SAAU3mG,GAChB,GAAIwG,GAAO5G,KAAMgtB,EAAO5sB,EAAQ4sB,KAAMC,EAAK7sB,EAAQ6sB,GAAIm6E,EAASxgG,EAAKg/F,OAChE54E,GAGMA,EAAKpzB,SAAS4B,KAAK,cAC1BwxB,EAAKpD,IAAI3nB,GACT+qB,EAAKpzB,SAAS+lB,WAAU,GAAM,GAAMuI,SACpC8E,EAAK9E,SACL+E,EAAG60C,YAAYl7D,EAAK7O,QAAQ,GAAGkyC,YAC/BrjC,EAAK2+F,WAAW6B,KACRp6E,EAAKjzB,GAAG,aAAe6M,EAAKxG,QAAQg8E,aAAc,GAASh8E,EAAQjJ,SAC3E81B,EAAG60C,YAAY90C,GACfA,EAAKpD,IAAI3nB,GAAIimB,SACbthB,EAAK2+F,WAAW6B,IAEhBxgG,EAAKxG,EAAQ2wD,SAAW,YAAc,eAAe/jC,EAAMC,EAAI7sB,EAAQwmG,SAbvE35E,EAAG60C,YAAYl7D,EAAK7O,QAAQ,GAAGkyC,YAC/BrjC,EAAK0/F,WAAWr5E,KAexBo6E,YAAa,SAAUr6E,EAAMC,EAAI25E,GAC7B,GAAIhgG,GAAO5G,KAAMonG,EAASxgG,EAAKg/F,QAAS5xC,EAAaptD,EAAKxG,QAAQg8E,UAAUpoB,WAAYj0D,EAAUi0D,EAAWj0D,QAASunG,EAAY9tG,EAAWwzB,EACzIjtB,IAAWA,EAAQ7B,QAAQgmG,SAC3Bl3E,EAAK1rB,IAAI2rB,GAAIh1B,KAAMgB,MAAOquG,IAC1Bt6E,EAAKl0B,KAAK,UACV8N,EAAK2+F,WAAW6B,EAAQp6E,GACxBA,EAAKpzB,SAAS3B,KACVo+D,SAAU,WACVp9D,MAAmB,EAAZquG,EACPC,QAASrlF,EACTslF,cAAeZ,EAAS,GAAKU,IAEjCr6E,EAAG25E,EAAS,cAAgB,gBAAgB55E,GAC5CtsB,GAAOszD,GACHj0D,QAASmkG,EAAQ,KAAO0C,EAAS,QAAU1kF,GAC3C3hB,SAAU,WACNysB,EAAKpD,IAAI3nB,GAAIimB,SACbthB,EAAKigG,UAAY,KACjB55E,EAAGw6E,SACH7gG,EAAK2+F,WAAW6B,MAGxBp6E,EAAKpzB,SAAS+lB,WAAU,GAAM,GAAMI,aAAai0C,KAGzD0zC,UAAW,SAAU16E,EAAMC,GACvB,GAAgH4iB,GAAMwmB,EAAlHzvD,EAAO5G,KAAM+wD,EAAWnqD,EAAKxG,QAAQg8E,UAAUrrB,SAAUhxD,EAAUgxD,EAAShxD,QAASqnG,EAASxgG,EAAKg/F,OACnG7lG,IAAWA,EAAQ7B,QAAQ,cAC3B+uB,EAAGh1B,KACCo+D,SAAU,WACV/2D,IAAK5F,EAAYszB,EAAKgP,QACtBrjC,KAAM,IACPuyD,aAAal+B,GACZ+2E,IACAl0D,EAAOjpC,EAAKo/F,YAAYp/F,EAAKszC,MAAM6rD,aAAan/F,EAAK63F,WACrDpoC,EAAWxmB,EAAKwmB,WAChBA,EAAWA,EAAS19D,KAAO0Z,SAASw9B,EAAK52C,QAAU,EAAG,IAAM,OAAco9D,EAAS/2D,IAAM+S,SAASw9B,EAAK32C,SAAW,EAAG,IAAM,MAC3H+zB,EAAGh1B,IAAI8rG,EAAkB1tC,IAE7BrpC,EAAKrN,WAAU,GAAM,GAAMI,cACvBhgB,QAAS,UACTM,SAAU,IACVE,SAAU,WACNysB,EAAKpD,IAAI3nB,GAAIimB,SACbthB,EAAKigG,UAAY,KACjB55E,EAAGh1B,KACCo+D,SAAU,SACV/2D,IAAK,EACL3G,KAAM,IAEViO,EAAK2+F,WAAW6B,MAGxBn6E,EAAGtN,WAAU,GAAM,GAAMI,aAAagxC,KAG9Ci1C,YAAa,SAAUpoG,GACnB,MAAOoC,MAAKqmG,OAAO/+E,KAAK,WAAa+8E,GAAa,KAAKxgG,OAAO,WAC1D,MAAOnN,GAAEsJ,KAAKiqC,YAAY/mC,KAAKhL,EAAMgL,KAAK8mD,OAAYpsD,KAG9DopG,OAAQ,SAAU/oG,EAAW4N,GACzB,GAA8F87F,GAA1F/gG,EAAO5G,KAAM6jB,EAAKjd,EAAK6+F,QAAS51D,EAAOjpC,EAAKi/F,MAAOjoG,EAAQgJ,EAAKszC,MAAM6rD,aAAal6F,EACnFgkC,IACAA,EAAKzqB,WAAW2/E,IAAe3/E,WAAW4/E,IAAY5/E,WAAWgsE,GAEjEvlF,GAA2B,SAAnBjF,EAAKszC,MAAMhrC,OACnBy4F,EAAe/gG,EAAKxG,QAAQ2hG,aAAal2F,IAE7CgkC,EAAOjpC,EAAKy/F,OAAO/+E,KAAK,WAAa+8E,GAAa,KAAK15C,YAAY1sD,GAAW4F,OAAO,WACjF,MAAOnN,GAAEsJ,KAAKiqC,YAAY/mC,KAAKhL,EAAMgL,KAAK8mD,OAAYpsD,IACvDsF,KAAK6hG,IAAe,IACnB9mG,IAAcozF,KAAYzqF,EAAKg/F,SAAWh/F,EAAKxG,QAAQolG,cAAe,GAASmC,KAC/E1pG,EAAY,IAEhB4xC,EAAKv1C,SAAS2D,GACV4xC,EAAK,KACLjpC,EAAKi/F,MAAQh2D,GAEbhsB,IACAgsB,EAAK3sC,KAAKkuF,EAAIvtE,GACdjd,EAAKy/F,OAAOjhF,WAAW,yBAAyBliB,KAAK,wBAAyB2gB,KAGtFyiF,WAAY,SAAUvvF,GAClBA,EAAMrR,GAAG++F,GAAezkG,KAAK2lG,gBAAgBjgG,GAAG45D,GAAMt/D,KAAKimG,oBAE/D/hE,OAAQ,SAAUmhE,GACd,GAAIz+F,GAAO5G,KAAMI,EAAUwG,EAAKxG,QAASi4C,EAAe,GAAIr8C,QAAM4K,EAAK63F,WAAW7gG,EAAQgJ,EAAK0+F,cAAcD,EAC7GpyF,GAAUrV,EAAO,GACM,SAAnBgJ,EAAKszC,MAAMhrC,MAAmBtI,EAAKxG,QAAQ2hG,aAAankG,KACxDA,EAAQgJ,EAAK6vF,QAEjB7vF,EAAKszC,MAAMhrB,QAAQmpB,EAAcz6C,GACjCgJ,EAAK+/F,aAAatE,EAAchqD,EAAcj4C,EAAQ4R,IAAK5R,EAAQ1H,OAEvEq/E,OAAQ,SAAUn6E,GACd,GAAIgJ,GAAO5G,KAAM2oB,EAAO/hB,EAAKszC,KACc,KAAvCvxB,EAAK+rB,QAAQ92C,EAAOgJ,EAAK63F,UACzB73F,EAAKwzB,SAASx8B,IAEdgJ,EAAK63F,SAAW7gG,EAChBgJ,EAAKogG,OAAO3V,GAASzzF,KAG7B2nG,WAAY,SAAU6B,EAAQrwF,GACtBqwF,GACApnG,KAAKu0B,MAAMxd,IAGnBy7E,QAAS,SAAU/vF,GACf,GAAImE,GAAO5G,KAAM8wB,EAAQsxE,IAAYrqG,EAAU6O,EAAK7O,QAASy9F,EAASz9F,EAAQuvB,KAAK,YACnF,OAAK7kB,IAKA+yF,EAAO,KACRA,EAAS9+F,EAAE,2EAA2EogC,SAAS/+B,IAEnG6O,EAAKu/F,OAAS3Q,EAAOx7F,OAAOstB,KAAK,WAAW5kB,KAAKD,EAASquB,IAAQ5tB,KAAK,QAAShL,EAAMqR,SAASunB,EAAO,IAAKlqB,EAAKxG,QAAQoL,UACxH5E,EAAKmoF,UAJL,IAJInoF,EAAKmoF,SAAQ,GACbyG,EAAO10F,OACP,IAQRwxF,QAAS,WACL,GAAyCsV,GAArChhG,EAAO5G,KAAMjI,EAAU6O,EAAK7O,OAC3BA,GAAQuvB,KAAK,aAAa,IAC3BvvB,EAAQ2K,KAAK,6EAAoFsiG,GAAa,sNAAkOA,GAAa,qEAEjW4C,EAAQ7vG,EAAQuvB,KAAK,WAAW5hB,GAAGg/F,GAAqB,IAAMC,GAAa,IAAMF,GAAgB,IAAMnlC,GAAMkjC,GAAaxhF,OAAM,GAChIpa,EAAKw/F,OAASwB,EAAM7+E,GAAG,GAAGrjB,GAAG2xE,EAAO,WAChCzwE,EAAKg/F,QAAUh/F,EAAKxG,QAAQolG,cAAe,EAC3C5+F,EAAK8/F,eAET9/F,EAAKg+F,IAAagD,EAAM7+E,GAAG,GAAGrjB,GAAG2xE,EAAO,WACpCzwE,EAAKg/F,QAAUh/F,EAAKxG,QAAQolG,cAAe,EAC3C5+F,EAAK4/F,mBAET5/F,EAAKi+F,IAAa+C,EAAM7+E,GAAG,GAAGrjB,GAAG2xE,EAAO,WACpCzwE,EAAKg/F,QAAUh/F,EAAKxG,QAAQolG,cAAe,EAC3C5+F,EAAK6/F,sBAGb/qE,UAAW,SAAUirD,EAAO5yB,GACxB,GAAIntD,GAAO5G,KAAMmS,EAAQvL,EAAK8+F,OAAS,EAAGrtD,EAAe,GAAIypD,MAAMl7F,EAAK63F,UACxE9X,GAAQ//E,EAAK+/E,GACRA,EAAM9sF,SAAS49E,MACZtlE,EAAQ,EACRkmC,EAAa3iC,YAAY2iC,EAAa1rC,cAAgB,IAAMonD,GAE5DjoD,EAASqd,MAAMhX,GAAO+c,QAAQmpB,EAAc0b,GAEhDntD,EAAKwzB,SAASie,KAGtBkuD,QAAS,SAAUzkG,EAAQlE,GACvB,GAAsFiqG,GAAlFjhG,EAAO5G,KAAMI,EAAUwG,EAAKxG,QAASi4C,EAAezxC,EAAK6vF,QAAU7vF,EAAK63F,QAC5E,OAAI7gG,KAAUhH,EACHwJ,EAAQ0B,IAEnBlE,EAAQorC,EAAMprC,EAAOwC,EAAQ2I,OAAQ3I,EAAQoL,SACxC5N,IAGLwC,EAAQ0B,GAAU,GAAIggG,MAAMlkG,IAExBiqG,EADA/lG,IAAWmiG,EACArmG,EAAQy6C,EAERA,EAAez6C,GAE1BiqG,GAAYtE,EAAalrD,EAAcz6C,MACnCiqG,IACAjhG,EAAK6vF,OAAS,MAElB7vF,EAAKkgG,aAAc,GAElBlgG,EAAKkgG,cACNlgG,EAAKkgG,eAAiB1mG,EAAQ4U,MAAM6mD,UAAWz7D,EAAQ4U,MAAM86B,QAEjElpC,EAAKwzB,SAASxzB,EAAK6vF,QACnB7vF,EAAKmoF,WApBLnxF,IAsBJmxF,QAAS,SAAU5uE,GACf,GAAIvZ,GAAO5G,KAAMI,EAAUwG,EAAKxG,QAAS0nG,EAAkBlhG,EAAKxG,QAAQ2hG,aAAaK,KAAaiD,EAAOz+F,EAAKu/F,MAC1GhmF,KAAWvpB,IACXupB,EAAS6hF,EAAUI,IAAYhiG,EAAQ4R,IAAK5R,EAAQ1H,MAEpD2sG,IACAA,EAAKz7E,IAAIytD,GACLl3D,IAAW2nF,EACXzC,EAAK/qG,SAASiqG,IAAO55C,YAAY8sB,IAAU/xE,GAAG2xE,EAAOrxE,GAAMY,EAAKmhG,YAAanhG,IAE7Ey+F,EAAK16C,YAAY45C,IAAOjqG,SAASm9E,IAAU/xE,GAAG2xE,EAAOsrB,KAIjEoF,YAAa,SAAU9/F,GACnB,GAAIrB,GAAO5G,KAAM6iG,EAAQ15E,GAAMviB,EAAKxG,QAAQyiG,OAAQv/F,EAAWsD,EAAKxG,QAAQ2hG,aAAcjxE,EAAQsxE,GAClGn6F,GAAE9D,iBACEb,EAASwtB,KAGoC,IAA7ClqB,EAAKszC,MAAMxF,QAAQ9tC,EAAK63F,SAAU3tE,IAAgBlqB,EAAK8+F,QAAU7C,IACjEj8F,EAAKkgG,aAAc,GAEvBlgG,EAAK6vF,OAAS3lE,EACdlqB,EAAKwzB,SAAStJ,EAAO+xE,GACrBj8F,EAAKoB,QAAQyxB,MAEjB6rE,cAAe,SAAUD,GACrB,GAAIznG,GAAQlH,EAAE2uG,GAAMniG,KAAKhL,EAAMgL,KAAK8mD,KAAQ/yD,MAAM,IAElD,OADA2G,GAAQ,GAAIkkG,IAAKlkG,EAAM,GAAIA,EAAM,GAAIA,EAAM,KAG/C8/F,WAAY,WACR,GAAI92F,GAAO5G,KAAMI,EAAUwG,EAAKxG,QAASo1F,EAASp1F,EAAQo1F,OAAQxgF,EAAQ5U,EAAQ4U,MAAO6mD,EAAU7mD,EAAM6mD,QAAS1rC,EAAanb,EAAMmb,WAAY2f,EAAQ96B,EAAM86B,KAC/JlpC,GAAKoO,OACD6mD,QAASp5D,EAAS,2GAA6GvK,EAAMgL,KAAK,SAAW,gDAAkD24D,GAAW,iBAAmB,aAAevzD,eAAgBuzD,IACpQ/rB,MAAOrtC,EAAS,wBAA0BqtC,GAAS,UAAY,SAAWxnC,eAAgBwnC,IAC1F3f,WAAY1tB,EAAS,sBAAwB0tB,GAAc,wBAA0B,SAAW7nB,eAAgB6nB,KAEpHvpB,EAAK4uF,OAASA,KAAW,EAAQ/yF,EAAS+yF,GAAU,+BAAiCp1F,EAAQoL,QAAU,QAAUlD,cAAc,IAAW,OAGlJ+Y,GAAG8G,OAAOg9E,IACNr5F,GACAsjB,gBAAiB,SAAUvjB,GACvB,MAAO,IAAIi2F,IAAKj2F,EAAKc,cAAed,EAAKa,WAAY,IAEzDs7F,gBAAiB,SAAUn8F,EAAMo8F,GAC7BA,EAAeA,GAAgB/vG,EAAMsT,UAAUM,QAE/C,KADA,GAAI2F,GAAWw2F,EAAax2F,SAAUu2F,EAAkB,GAAIlG,IAAKj2F,EAAKc,cAAed,EAAKa,WAAY,EAAGb,EAAKe,WAAYf,EAAKgB,aAAchB,EAAKiB,aAAcjB,EAAKkB,mBAC9Ji7F,EAAgBx7F,UAAYiF,GAC/B3F,EAAS4kB,QAAQs3E,KAAsBj4E,GAE3C,OAAOi4E,IAEXt3E,QAAS,SAAU7kB,EAAM0gB,GACrB,GAAI27E,GAAiBr8F,EAAKqB,oBAAqBi7F,EAAa,GAAIrG,IAAKj2F,EAAK5P,UAAYswB,GAAO67E,EAAeD,EAAWj7F,oBAAsBg7F,CAC7Ir8F,GAAK6kB,QAAQy3E,EAAWlsG,UAAYmsG,EAAev3E,KAEvD1H,QAEQja,KAAM6zF,EACN1oE,MAAO,SAAUxuB,EAAMmG,EAAKtZ,EAAK8S,GAC7B,MAAOo3F,GAAgBp3F,GAASU,OAAOO,MAAMZ,EAAKa,YAAc,IAAMb,EAAKc,eAE/EkvD,QAAS,SAAUz7D,GACf,GAAIwG,GAAO5G,KAAMrC,EAAM,EAAGqU,EAAM5R,EAAQ4R,IAAKtZ,EAAM0H,EAAQ1H,IAAKmT,EAAOzL,EAAQyL,KAAMm3F,EAAQ5iG,EAAQ4iG,MAAOj6F,EAAS3I,EAAQ2I,OAAQyC,EAAUpL,EAAQoL,QAAS68F,EAAcjoG,EAAQ+iB,IAAKq+E,EAAsBphG,EAAQohG,oBAAqB8G,EAASD,GAAerF,EAAM,GAAIuF,EAAkB3F,EAAgBp3F,GAAUg9F,EAAcD,EAAgB92F,SAAUxF,EAAOs8F,EAAgBt8F,KAAMQ,EAAQ61F,EAAWr2F,EAAKQ,MAAO+7F,GAAcC,EAAanG,EAAWr2F,EAAKyE,WAAY83F,GAAcv5F,EAAQnD,EAASk8F,gBAAgBn8F,EAAM08F,GAAkBn5E,EAAkBxoB,EAAKxP,MAAMyU,GAAOwjB,EAAiBzoB,EAAK0oB,KAAKzjB,GAAOk6F,EAAen/F,EAAKm/F,aAAcj1E,EAAQ,GAAIgxE,IAAQp/F,EAAO,iFAAmFqjG,EAAa92F,GAAS,0BAI1wB,KAHIuyF,IACA9+F,GAAQ,iCAAmCtC,EAAQshB,SAASwkF,iBAAmB,SAE5EvoG,EAAM,EAAGA,IACZ+E,GAAQ,0BAA4B+J,EAAM9O,GAAO,KAAO8qG,EAAW9qG,GAAO,OAK9E,OAHAmzB,GAAQ,GAAIgxE,IAAKhxE,EAAMnkB,cAAemkB,EAAMpkB,WAAYokB,EAAMxkB,WAC9D2G,EAAU6d,EAAO,GACjBA,GAASA,EACFnI,GACHinB,MAAO,GACP8xD,OAAQ,EACRh/F,KAAMA,GAAQ,sCACduM,MAAOA,EACPuyF,oBAAqBA,EACrBrxE,WAAY/vB,EAAQ+vB,WACpBne,IAAK,GAAI8vF,IAAK9vF,EAAIrF,cAAeqF,EAAItF,WAAYsF,EAAI1F,WACrD5T,IAAK,GAAIopG,IAAKppG,EAAIiU,cAAejU,EAAIgU,WAAYhU,EAAI4T,WACrDuvD,QAASz7D,EAAQy7D,QACjB/rB,MAAO1vC,EAAQ0vC,MACfvsB,OAAQ3c,EAAKsoB,QACb6yE,aAAc3hG,EAAQ2hG,aACtBT,MAAO,SAAUz1F,EAAMlO,EAAKokG,GACxB,GAAI5kF,MAAelI,EAAMpJ,EAAKW,SAAUk8F,EAAY,GAAIvlF,EAAM,GAiB9D,QAhBItX,EAAOujB,GAAmBvjB,EAAOwjB,IACjClS,EAASrV,KAAKu8F,IAEdtC,EAAal2F,IACbsR,EAASrV,KAAK2vE,KAEb5rE,IAASilB,GACV3T,EAASrV,KAAK,WAEN,IAARmN,GAAqB,IAARA,GACbkI,EAASrV,KAAK,aAEdwgG,GAAUrlG,GAAS4I,EAAMm3F,KACzB7/E,EAAMklF,EAAYlxG,QAAQ,MAAOe,EAAMqR,SAASsC,EAAM9C,EAAQyC,IAC9Dk9F,EAAY,mBAGZ78F,KAAMA,EACNm3F,MAAOA,EACP/gG,GAAI/J,EAAM+J,GACVo4B,MAAOniC,EAAMqR,SAASsC,EAAM,IAAKL,GACjC5N,MAAOiO,EAAKS,UACZq8F,WAAY5C,EAAal6F,GACzBsR,SAAUA,EAAS,GAAK,WAAaA,EAASjmB,KAAK,KAAO,IAAM,GAChEwxG,UAAWA,EACXvlF,IAAKA,IAGbo+E,gBAAiB,SAAU11F,GACvB,OACIskB,WAAYH,EAAWnkB,EAAM3T,EAAMsT,UAAUM,SAAS2F,UACtDm3F,YAAa/8F,OAK7BzU,MAAO,SAAUyU,GACb,MAAOC,GAASsjB,gBAAgBvjB,IAEpCyjB,KAAM,SAAUzjB,GACZ,GAAIyjB,GAAO,GAAIwyE,IAAKj2F,EAAKc,cAAed,EAAKa,WAAa,EAAG,GAAItV,EAAQ0U,EAASsjB,gBAAgBvjB,GAAO0jB,EAAa3wB,KAAKC,IAAIywB,EAAKpiB,oBAAsB9V,EAAM8V,oBAIhK,OAHIqiB,IACAD,EAAKnc,SAAS/b,EAAMwV,WAAa2iB,EAAa,IAE3CD,GAEXolB,QAAS,SAAUutD,EAAOC,GACtB,GAAIljG,GAAQ6pG,EAAS5G,EAAMv1F,WAAYy1F,EAAQF,EAAMt1F,cAAem8F,EAAS5G,EAAMx1F,WAAYq8F,EAAQ7G,EAAMv1F,aAQ7G,OANI3N,GADAmjG,EAAQ4G,EACC,EACF5G,EAAQ4G,KAGNF,GAAUC,EAAS,EAAID,EAASC,EAAS,MAI1D55E,QAAS,SAAUrjB,EAAMjO,GACrB,GAAIsV,GAAQrH,EAAKe,UACbhP,aAAiBkkG,IACjBj2F,EAAK6J,YAAY9X,EAAM+O,cAAe/O,EAAM8O,WAAY9O,EAAM0O,WAE9DR,EAAS4kB,QAAQ7kB,EAAMjO,EAAQmyB,IAEnC9c,EAAUpH,EAAMqH,IAEpB6yF,aAAc,SAAUl6F,GACpB,MAAOA,GAAKc,cAAgB,IAAMd,EAAKa,WAAa,IAAMb,EAAKS,aAInE4C,KAAM,OACNmrB,MAAO,SAAUxuB,GACb,MAAOA,GAAKc,eAEhBkvD,QAAS,SAAUz7D,GACf,GAAImM,GAAYq2F,EAAgBxiG,EAAQoL,SAASU,OAAOK,UAAWw5F,EAAe/lG,KAAK+lG,aAAc/zF,EAAM5R,EAAQ4R,IAAKtZ,EAAM0H,EAAQ1H,GACtI,OAAOiwB,IACH3W,IAAK,GAAI8vF,IAAK9vF,EAAIrF,cAAeqF,EAAItF,WAAY,GACjDhU,IAAK,GAAIopG,IAAKppG,EAAIiU,cAAejU,EAAIgU,WAAY,GACjDuC,MAAO,GAAI6yF,IAAK1hG,EAAQyL,KAAKc,cAAe,EAAG,GAC/C4W,OAAQvjB,KAAKkvB,QACboyE,MAAO,SAAUz1F,GACb,OACIjO,MAAO2O,EAAUV,EAAKa,YACtBzK,GAAI/J,EAAM+J,GACV0mG,WAAY5C,EAAal6F,GACzBsR,SAAU,QAK1B/lB,MAAO,SAAUyU,GACb,MAAO,IAAIi2F,IAAKj2F,EAAKc,cAAe,EAAGd,EAAKS,YAEhDgjB,KAAM,SAAUzjB,GACZ,MAAO,IAAIi2F,IAAKj2F,EAAKc,cAAe,GAAId,EAAKS,YAEjDooC,QAAS,SAAUutD,EAAOC,GACtB,MAAOxtD,GAAQutD,EAAOC,IAE1BhzE,QAAS,SAAUrjB,EAAMjO,GACrB,GAAIoX,GAAO9B,EAAQrH,EAAKe,UACpBhP,aAAiBkkG,KACjB9sF,EAAQpX,EAAM8O,WACdb,EAAK6J,YAAY9X,EAAM+O,cAAeqI,EAAOnJ,EAAKS,WAC9C0I,IAAUnJ,EAAKa,YACfb,EAAKqjB,QAAQ,KAGjBla,EAAQnJ,EAAKa,WAAa9O,EAC1BiO,EAAKm9F,SAASh0F,GACVA,EAAQ,KACRA,GAAS,IAETA,EAAQ,GAAKnJ,EAAKa,YAAcsI,GAChCnJ,EAAKqjB,QAAQ,IAGrBjc,EAAUpH,EAAMqH,IAEpB6yF,aAAc,SAAUl6F,GACpB,MAAOA,GAAKc,cAAgB,IAAMd,EAAKa,WAAa,QAIxDwC,KAAM,SACNmrB,MAAO,SAAUxuB,EAAMmG,EAAKtZ,GACxB,MAAO2hC,GAAMxuB,EAAMmG,EAAKtZ,EAAK,KAEjCmjE,QAAS,SAAUz7D,GACf,GAAI2U,GAAO3U,EAAQyL,KAAKc,cAAeo5F,EAAe/lG,KAAK+lG,YAC3D,OAAOp9E,IACH1Z,MAAO,GAAI6yF,IAAK/sF,EAAOA,EAAO,GAAK,EAAG,EAAG,GACzC/C,IAAK,GAAI8vF,IAAK1hG,EAAQ4R,IAAIrF,cAAe,EAAG,GAC5CjU,IAAK,GAAIopG,IAAK1hG,EAAQ1H,IAAIiU,cAAe,EAAG,GAC5C4W,OAAQvjB,KAAKkvB,QACboyE,MAAO,SAAUz1F,EAAMlO,GACnB,OACIC,MAAOiO,EAAKc,cACZ1K,GAAI/J,EAAM+J,GACV0mG,WAAY5C,EAAal6F,GACzBsR,SAAkB,IAARxf,GAAoB,IAAPA,EAAY2mG,GAAkB,QAKrEltG,MAAO,SAAUyU,GACb,GAAIkJ,GAAOlJ,EAAKc,aAChB,OAAO,IAAIm1F,IAAK/sF,EAAOA,EAAO,GAAIlJ,EAAKa,WAAYb,EAAKS,YAE5DgjB,KAAM,SAAUzjB,GACZ,GAAIkJ,GAAOlJ,EAAKc,aAChB,OAAO,IAAIm1F,IAAK/sF,EAAOA,EAAO,GAAK,EAAGlJ,EAAKa,WAAYb,EAAKS,YAEhEooC,QAAS,SAAUutD,EAAOC,GACtB,MAAOxtD,GAAQutD,EAAOC,EAAO,KAEjChzE,QAAS,SAAUrjB,EAAMjO,GACrBsxB,EAAQrjB,EAAMjO,EAAO,IAEzBmoG,aAAc,SAAUl6F,GACpB,MAAOA,GAAKc,cAAgB,UAIhCuC,KAAMi1F,EACN9pE,MAAO,SAAUxuB,EAAMmG,EAAKtZ,GACxB,MAAO2hC,GAAMxuB,EAAMmG,EAAKtZ,EAAK,MAEjCmjE,QAAS,SAAUz7D,GACf,GAAI2U,GAAO3U,EAAQyL,KAAKc,cAAeqF,EAAM5R,EAAQ4R,IAAIrF,cAAejU,EAAM0H,EAAQ1H,IAAIiU,cAAeo5F,EAAe/lG,KAAK+lG,aAAc3E,EAAUpvF,EAAKqvF,EAAU3oG,CAMpK,OALA0oG,IAAoBA,EAAU,GAC9BC,GAAoBA,EAAU,GAC1BA,EAAUD,EAAU,KACpBC,EAAUD,EAAU,GAEjBz4E,GACH1Z,MAAO,GAAI6yF,IAAK/sF,EAAOA,EAAO,IAAM,GAAI,EAAG,GAC3C/C,IAAK,GAAI8vF,IAAKV,EAAS,EAAG,GAC1B1oG,IAAK,GAAIopG,IAAKT,EAAS,EAAG,GAC1B99E,OAAQvjB,KAAKkvB,QACboyE,MAAO,SAAUz1F,EAAMlO,GACnB,GAAIsR,GAAQpD,EAAKc,cAAehV,EAAMsX,EAAQ,CAO9C,OANIA,GAAQ+C,IACR/C,EAAQ+C,GAERra,EAAMe,IACNf,EAAMe,IAGNuJ,GAAI/J,EAAM+J,GACVrE,MAAOqR,EAAQ,MAAQtX,EACvBgxG,WAAY5C,EAAal6F,GACzBsR,SAAkB,IAARxf,GAAoB,IAAPA,EAAY2mG,GAAkB,QAKrEltG,MAAO,SAAUyU,GACb,GAAIkJ,GAAOlJ,EAAKc,aAChB,OAAO,IAAIm1F,IAAK/sF,EAAOA,EAAO,IAAKlJ,EAAKa,WAAYb,EAAKS,YAE7DgjB,KAAM,SAAUzjB,GACZ,GAAIkJ,GAAOlJ,EAAKc,aAChB,OAAO,IAAIm1F,IAAK/sF,EAAOA,EAAO,IAAM,GAAIlJ,EAAKa,WAAYb,EAAKS,YAElEooC,QAAS,SAAUutD,EAAOC,GACtB,MAAOxtD,GAAQutD,EAAOC,EAAO,MAEjChzE,QAAS,SAAUrjB,EAAMjO,GACrBsxB,EAAQrjB,EAAMjO,EAAO,KAEzBmoG,aAAc,SAAUl6F,GACpB,GAAIkJ,GAAOlJ,EAAKc,aAChB,OAAOoI,GAAOA,EAAO,GAAK,WAmL1CjJ,EAASs3F,gBAAkBA,EAC3Bt3F,EAAS+3F,YAAcA,EACvB/3F,EAASm3F,iBAAmBA,EAC5Bn3F,EAASu2F,cAAgBA,EACzBv2F,EAASk2F,UAAYA,EACrBl2F,EAASo3F,wBAA0BA,EACnCp3F,EAASyuB,UAAYA,EACrBzuB,EAASm9F,UAAY9/E,GACrBrd,EAASxI,SAAWkgG,EACpBtrG,EAAM4T,SAAWA,GACnBnV,OAAOuB,MAAM2sB,QACRluB,OAAOuB,OACE,kBAAVzB,SAAwBA,OAAOgiC,IAAMhiC,OAAS,SAAUiiC,EAAIC,EAAIC,IACrEA,GAAMD,OAEV,SAAUniC,EAAGC,QACVA,OAAO,mBAAoB,cAAeD,IAC5C,WAixBE,MAzwBC,UAAUE,EAAGE,GAstBV,QAASsyG,GAA0BC,EAASC,EAAWC,EAASp1E,GAAhE,GAIQq1E,GACAxuG,EASIyuG,EAmBAn8F,EAhCJo8F,EAAmBL,EAAQl1E,EAAQk1E,EAAQvxG,OAASyxG,EAAQzxG,OAKhE,IAJAuxG,EAAUA,EAAQ5xG,UAAU,EAAG08B,EAAQk1E,EAAQvxG,OAASyxG,EAAQzxG,QAChEyxG,EAAUA,EAAQ9xG,UAAU,EAAG08B,GAC3Bq1E,KAEAH,IAAYE,GAAWp1E,EAAQ,EAK/B,MAJAq1E,GAAKxhG,MACDshG,EAAUn1E,EAAQ,GAClBo1E,EAAQp1E,EAAQ,KAEbq1E,CAEX,IAAiC,IAA7BH,EAAQjrG,QAAQmrG,KAAsC,IAAnBA,EAAQzxG,QAAgBwxG,EAAUC,EAAQzxG,OAAS,KAAOwxG,EAAUC,EAAQzxG,SAAU,CAEzH,IADI2xG,EAAgB,GACfzuG,EAAIuuG,EAAQzxG,OAAQkD,EAAIquG,EAAQvxG,OAAQkD,IACrCsuG,EAAUtuG,KAAOyuG,GAAiBE,EAAavrG,QAAQkrG,EAAUtuG,KAAO,IACxEyuG,EAAgBH,EAAUtuG,GAC1BwuG,EAAKxhG,MACDyhG,EACA,KAIZ,OAAOD,GAEX,GAAoC,MAAhCD,EAAQA,EAAQzxG,OAAS,IAAcyxG,EAAQA,EAAQzxG,OAAS,KAAO4xG,EACvE,QACQJ,EAAUn1E,EAAQ,GAClB,KAGZ,IAAiC,IAA7Bo1E,EAAQnrG,QAAQirG,IAAkBM,EAAavrG,QAAQkrG,EAAUn1E,EAAQ,SAAY,CAErF,IADI7mB,EAASg8F,EAAU,GAClBtuG,EAAI8D,KAAKlG,IAAI,EAAGywG,EAAQvxG,OAAS,GAAIkD,EAAIsuG,EAAUxxG,OAAQkD,IAC5D,GAAI2uG,EAAavrG,QAAQkrG,EAAUtuG,KAAO,EAAG,CACzCsS,EAASg8F,EAAUtuG,EACnB,OAGR,QACQsS,EACAi8F,EAAQp1E,EAAQ,KAG5B,QACQm1E,EAAUn1E,EAAQ,GAClBo1E,EAAQp1E,EAAQ,KArwB/B,GAwVOy1E,GAvVA3mE,EAASpsC,OACTuB,EAAQ6qC,EAAO7qC,MACf+7B,EAAQ/7B,EAAM+7B,MACd5S,EAAKnpB,EAAMmpB,GACXrc,EAASqc,EAAGrc,OACZ2c,EAAOzpB,EAAMypB,KACb1f,EAAK,kBACL+D,EAAQtP,EAAEsP,MACVqK,KAAoB9G,SACpBogG,GAAoBzxG,EAAMC,QAAQqlB,oBAAsB,sCAAwC,SAAWvb,EAC3G2nG,EAAgB,mBAChBC,EAAe,kBACfC,EAAe,kBACfryB,EAAW,WACXsyB,EAAW,WACXtwE,EAAS,SACTgwE,EAAe,aACfO,EAAYhlG,EAAOtE,QACnBC,KAAM,SAAU5I,EAASqI,GAAnB,GAQE6pG,GAsBA3mG,EA7BAsD,EAAO5G,IACXgF,GAAOf,GAAGtD,KAAKwH,KAAKvB,EAAM7O,EAASqI,GACnCrI,EAAU6O,EAAK7O,QACfqI,EAAUwG,EAAKxG,QACfA,EAAQ2I,OAAS7Q,EAAMoa,eAAelS,EAAQ2I,QAAU7Q,EAAMwT,WAAWtL,EAAQoL,SAASO,UAAUC,SAASG,SAASwE,GACtHvQ,EAAQ4R,IAAM9Z,EAAMwe,UAAU3e,EAAQmL,KAAK,SAAWhL,EAAMwe,UAAUtW,EAAQ4R,KAC9E5R,EAAQ1H,IAAMR,EAAMwe,UAAU3e,EAAQmL,KAAK,SAAWhL,EAAMwe,UAAUtW,EAAQ1H,KAC1EuxG,GAAgBlyG,EAAQ6B,SAASsJ,KAAK,UAAY,IAAIhF,QAAQ,kBAAoB,EAClF+rG,EACArjG,EAAKvN,QAAUtB,EAAQ6B,UAEvBgN,EAAKvN,QAAUtB,EAAQe,KAAK,8CAAgDc,SAC5EgN,EAAKvN,QAAQiB,SAASvC,EAAQ,GAAGkG,WACjC2I,EAAKvN,QAAQ,GAAGS,MAAM6d,QAAU5f,EAAQ,GAAG+B,MAAM6d,QACjD5f,EAAQE,KACJgB,MAAO,OACPC,OAAQnB,EAAQ,GAAG+B,MAAMZ,UAGjCxC,EAAE,4CAA8CorE,YAAY/pE,GAC5D6O,EAAKyvF,QACLzvF,EAAK7O,QAAQuC,SAAS2vG,EAAe,IAAM,aAAa/mG,KAAK,eAAgB,OAAOwC,GAAG,WAAazD,EAAI,WACpG2E,EAAK23C,WAET,KACIxmD,EAAQ,GAAG2lB,aAAa,OAAQ,QAClC,MAAOzV,GACLlQ,EAAQ,GAAGmH,KAAO,OAElBoE,EAAWvL,EAAQgC,GAAG,eAAiBrD,EAAEkQ,EAAK7O,SAAS4L,QAAQ,YAAY5J,GAAG,aAC9EuJ,EACAsD,EAAK6Y,QAAO,GAEZ7Y,EAAKgkD,SAAS7yD,EAAQgC,GAAG,eAE7B6M,EAAKhJ,MAAMgJ,EAAKxG,QAAQxC,OAAS7F,EAAQ+0C,OACzC50C,EAAM0uB,OAAOhgB,IAEjBxG,SACI8O,KAAM,YACN1D,QAAS,GACT5N,MAAO,GACPmL,OAAQ,GACRiJ,IAAK,GAAIhW,MAAK,KAAM,EAAG,GACvBtD,IAAK,GAAIsD,MAAK,KAAM,GAAI,IACxB0lB,UACI3M,KAAQ,OACRC,MAAS,QACTC,IAAO,MACPi1F,QAAW,kBACXC,KAAQ,QACRC,OAAU,UACVC,OAAU,UACVC,UAAa,UAGrB5iG,QAAS+xB,GACTznB,IAAK,SAAUpU,GACX,MAAIA,KAAUhH,EAGHoJ,KAAKI,QAAQ4R,KAFpBhS,KAAKI,QAAQ4R,IAAMpU,EAAnBoC,IAKRtH,IAAK,SAAUkF,GACX,MAAIA,KAAUhH,EAGHoJ,KAAKI,QAAQ1H,KAFpBsH,KAAKI,QAAQ1H,IAAMkF,EAAnBoC,IAKRqlB,WAAY,SAAUjlB,GAClB,GAAIwG,GAAO5G,IACXgF,GAAOf,GAAGohB,WAAWld,KAAKvB,EAAMxG,GAChCJ,KAAKuqG,eACLvqG,KAAKwqG,aACLxqG,KAAKyqG,uBAET3kF,QAAS,WACL,GAAIlf,GAAO5G,IACX4G,GAAK7O,QAAQ6xB,IAAI3nB,GACb2E,EAAK8jG,cACL9jG,EAAK8jG,aAAa9gF,IAAI,QAAShjB,EAAK0vF,eAExCtxF,EAAOf,GAAG6hB,QAAQ3d,KAAKvB,IAE3BhJ,MAAO,SAAUA,GACb,MAAIA,KAAUhH,EACHoJ,KAAK2qG,UAAUC,iBAEZ,OAAVhtG,IACAA,EAAQ,IAEuB,kBAA/ByS,EAAelI,KAAKvK,KACpBA,EAAQ1F,EAAMwe,UAAU9Y,EAAOoC,KAAKI,QAAQ2I,OAAQ/I,KAAKI,QAAQoL,UAEjE5N,IAAUA,EAAM3B,YAChB2B,EAAQ,MAEZoC,KAAK2qG,UAAY,GAAIjB,GAAe9rG,EAAOoC,KAAKI,QAAQ2I,OAAQ/I,KAAKI,QAAQoL,QAASxL,KAAKI,QAAQshB,UACnG1hB,KAAKyqG,sBACLzqG,KAAK6qG,UAAYjtG,EAXjB,IAaJ6sG,oBAAqB,WACjB,GAAIK,GAAkB9qG,KAAK2qG,UAAUI,OAAO/qG,KAAKI,QAAQ2I,OAAQ/I,KAAKI,QAAQoL,QAASxL,KAAKI,QAAQshB,SACpG1hB,MAAKjI,QAAQ+0C,IAAIg+D,EAAgB,IACjC9qG,KAAKgrG,SAAWF,EAAgB,GAChC9qG,KAAKirG,QAAUH,EAAgB,IAEnClgD,SAAU,SAAUA,GAChB5qD,KAAKizF,WACDroC,SAAUA,IAAah0D,GAAmBg0D,EAC1CrrC,SAAS,KAGjBE,OAAQ,SAAUA,GACdzf,KAAKizF,WACDroC,UAAU,EACVrrC,UAAWE,EAASA,IAAW7oB,GAAmB6oB,MAG1D+qF,WAAY,WACR,GAAI5jG,GAAO5G,IACX4G,GAAK7O,QAAQ2N,GAAG,QAAUzD,EAAI+D,EAAMY,EAAKskG,OAAQtkG,IAAOlB,GAAG,UAAYzD,EAAI+D,EAAMY,EAAKqxE,SAAUrxE,IAAOlB,GAAGikG,EAAkB3jG,EAAMY,EAAKukG,OAAQvkG,IAAOlB,GAAG,UAAYzD,EAAI+D,EAAMY,EAAKwkG,SAAUxkG,IAAOlB,GAAG,iBAAmBzD,EAAK,cAAgBA,EAAI+D,EAAMY,EAAKykG,QAASzkG;EAE5Q2jG,aAAc,WACVvqG,KAAKjI,QAAQ6xB,IAAI,UAAY3nB,GAAI2nB,IAAI,QAAU3nB,GAAI2nB,IAAI+/E,GAAkB//E,IAAI,UAAY3nB,GAAI2nB,IAAI,iBAAmB3nB,EAAK,cAAgBA,IAE7IgxF,UAAW,SAAU7yF,GAAV,GACHwG,GAAO5G,KACPjI,EAAU6O,EAAK7O,QACfwnB,EAAUnf,EAAQmf,QAClBqrC,EAAWxqD,EAAQwqD,SACnBvxD,EAAUuN,EAAKvN,OACnBuN,GAAK2jG,eACA3/C,GAAarrC,GAKdlmB,EAAQiB,SAASsvG,GAAej/C,YAAYk/C,GAC5C9xG,EAAQmL,KAAKu0E,EAAUl4D,GAASrc,KAAK6mG,EAAUn/C,KAL/CvxD,EAAQiB,SAASuvG,GAAcl/C,YAAYi/C,GAC3C7xG,EAAQqtB,WAAWqyD,GAAUryD,WAAW2kF,GACxCnjG,EAAK4jG,eAMbjsD,QAAS,WAAA,GACD33C,GAAO5G,KACP8jG,EAAWl9F,EAAKikG,UAChBjtG,EAAQgJ,EAAKhJ,OACbA,IAASgJ,EAAKoL,OAASpU,EAAQgJ,EAAKoL,QACpCpL,EAAKhJ,MAAMgJ,EAAKoL,OAChBpU,EAAQgJ,EAAKhJ,SAEbA,GAASgJ,EAAKlO,OAASkF,EAAQgJ,EAAKlO,QACpCkO,EAAKhJ,MAAMgJ,EAAKlO,OAChBkF,EAAQgJ,EAAKhJ,UAEbkmG,GAAYlmG,GAASA,EAAM3B,YAAc6nG,EAAS7nG,WAAa6nG,IAAalmG,IAAUkmG,GAAYlmG,KAClGgJ,EAAKikG,UAAYjtG,EACjBgJ,EAAKoB,QAAQyxB,GACb7yB,EAAK7O,QAAQiQ,QAAQyxB,KAG7B0xE,OAAQ,WAAA,GAOA7B,GACAgC,EAESxwG,EACDsmE,EAQAmqC,EAOJC,EASAC,EAlCJ7kG,EAAO5G,KACPjI,EAAU6O,EAAK7O,QAAQ,GACvB2zG,GAAe,CACnB,IAAIxzG,EAAMqa,mBAAqBxa,EAA/B,CAKA,GAFIuxG,EAAOJ,EAA0BlpG,KAAKgrG,SAAUhrG,KAAKirG,QAASjrG,KAAKjI,QAAQ,GAAG6F,MAAOq2B,EAAMj0B,KAAKjI,QAAQ,IAAI,IAC5GuzG,EAAiC,IAAhBhC,EAAK1xG,QAA+B,MAAf0xG,EAAK,GAAG,IAC7CgC,EACD,IAASxwG,EAAI,EAAGA,EAAIwuG,EAAK1xG,OAAQkD,IACzBsmE,EAAQphE,KAAK2qG,UAAUgB,UAAUrC,EAAKxuG,GAAG,GAAIwuG,EAAKxuG,GAAG,IACzD4wG,EAAeA,IAAiBtqC,CAGxCphE,MAAKyqG,sBACDnB,EAAK1xG,QAAyB,MAAf0xG,EAAK,GAAG,KACvBtpG,KAAK4rG,eAAetC,EAAK,GAAG,IACvBgC,IACGC,EAASjC,EAAK,GAAG,GACrB5/E,WAAW,WACP9iB,EAAKglG,eAAeL,OAI5BD,IACIE,GACAp1E,QAAS,GACTjyB,eAAgB,cAGpBnE,KAAKi4E,SAASuzB,IAEdE,IACA9gF,aAAahkB,EAAKilG,sBACdJ,EAAe3B,EACnBljG,EAAKvN,QAAQiB,SAASwvG,GACtBljG,EAAKilG,qBAAuBniF,WAAW,WACnC9iB,EAAKvN,QAAQsxD,YAAY8gD,IAC1B,QAGXL,SAAU,WACN,GAAI32E,GAAYR,EAAMj0B,KAAKjI,QAAQ,GAC/B08B,GAAU,KAAOA,EAAU,IAC3Bz0B,KAAK8rG,yBAGbT,QAAS,SAAUpjG,GACf,GAAI/P,EAAMqa,mBAAqBvS,KAAKjI,QAAQ,KAAMiI,KAAKjI,QAAQgC,GAAG,cAAlE,CAGAkO,EAAItR,OAAOgiB,OAAS1Q,CACpB,IAAIujG,IACAp1E,QAAS,GACTjyB,eAAgB,aAIhBqnG,GAASp1E,QADTnuB,EAAEouB,UACkBpuB,EAAEsrB,aAAetrB,EAAEurB,QAAU,EAAI,GAAK,IAEtCvrB,EAAEsrB,aAAetrB,EAAEurB,QAAU,EAAI,GAAK,GAE9DxzB,KAAKi4E,SAASuzB,GACdvjG,EAAE8jG,aAAc,EACZ9jG,EAAE9D,gBACF8D,EAAE9D,iBAEF8D,EAAEyiB,iBACFziB,EAAEyiB,oBAGV2rE,MAAO,WAAA,GACCzvF,GAAO5G,KACPjI,EAAU6O,EAAK7O,QACfukG,EAASvkG,EAAQmL,KAAK,QACtB+yB,EAAOqmE,EAAS5lG,EAAE,IAAM4lG,GAAUvkG,EAAQkgB,QAAQ,OAClDge,GAAK,KACLrvB,EAAK0vF,cAAgB,WACjB5sE,WAAW,WACP9iB,EAAKhJ,MAAM7F,EAAQ,GAAG6F,UAG9BgJ,EAAK8jG,aAAez0E,EAAKvwB,GAAG,QAASkB,EAAK0vF,iBAGlD4U,OAAQ,SAAUjjG,GACdA,EAAE9D,kBAEN8zE,SAAU,SAAUhwE,GAAV,GAEFwsB,GAOIxF,EACA9c,EAYA/E,EAQA4+F,EAEIplG,EA/BR7H,EAAMkJ,EAAEmuB,OAEZ,IAAW,IAAPr3B,GAAoB,IAAPA,EAQb,IAPAkJ,EAAE9D,iBACFswB,EAAYR,EAAMj0B,KAAKjI,QAAQ,IAC3B08B,EAAU,IAAMA,EAAU,IAC1Bz0B,KAAK8rG,wBAEL78E,EAAa,IAAPlwB,KAAiB,EACvBoT,EAAQ8c,MAAYgF,EAAMj0B,KAAKjI,QAAQ,IAAI,GAAK,EAAIk8B,EAAMj0B,KAAKjI,QAAQ,IAAI,GAAK,EAC7Eoa,GAAS,GAAKA,EAAQnS,KAAKirG,QAAQrzG,QAAQ,CAC9C,GAAI6xG,EAAavrG,QAAQ8B,KAAKirG,QAAQ94F,KAAW,EAAG,CAChDnS,KAAK4rG,eAAe5rG,KAAKirG,QAAQ94F,GACjC,OAEJA,GAAS8c,EAGN,IAAPlwB,GAAoB,IAAPA,IACbkJ,EAAE9D,iBACFswB,EAAYR,EAAMj0B,KAAKjI,QAAQ,IAC3BqV,EAASpN,KAAKirG,QAAQx2E,EAAU,IAChCg1E,EAAavrG,QAAQkP,IAAW,IAChCpN,KAAK2qG,UAAUsB,WAAW7+F,EAAe,IAAPrO,EAAY,MAC9CiB,KAAKyqG,sBACLzqG,KAAK4rG,eAAex+F,KAGxBlV,EAAMC,QAAQoB,QAAQgB,MAAQrC,EAAMC,QAAQoB,QAAQkB,QAAU,KAC1DuxG,EAAU/jG,EAAEmuB,QAAUnuB,EAAEmuB,QAAUnuB,EAAE67B,MACxB,IAAZkoE,GAA6B,KAAZA,IACbplG,EAAO5G,KACX0pB,WAAW,WACP9iB,EAAKukG,UACN,KAGPpsG,IAAQ4iB,EAAKK,OACbhiB,KAAKu+C,WAGbutD,sBAAuB,WAAA,GAGVhxG,GAAWyxD,EAFhB93B,EAAYR,EAAMj0B,KAAKjI,QAAQ,IAC/BkX,EAAQwlB,EAAU,EACtB,KAAS35B,EAAImU,EAAOs9C,EAAIt9C,EAAQ,EAAGnU,EAAIkF,KAAKirG,QAAQrzG,QAAU20D,GAAK,EAAGzxD,IAAKyxD,IAAK,CAC5E,GAAIzxD,EAAIkF,KAAKirG,QAAQrzG,QAAU6xG,EAAavrG,QAAQ8B,KAAKirG,QAAQnwG,SAE7D,MADAkF,MAAK4rG,eAAe5rG,KAAKirG,QAAQnwG,IACjC,CAEJ,IAAIyxD,GAAK,GAAKk9C,EAAavrG,QAAQ8B,KAAKirG,QAAQ1+C,SAE5C,MADAvsD,MAAK4rG,eAAe5rG,KAAKirG,QAAQ1+C,IACjC,IAIZq/C,eAAgB,SAAUx+F,GAAV,GAEHtS,GADLoxG,KAAYv0G,EAAM,CACtB,KAASmD,EAAI,EAAGA,EAAIkF,KAAKirG,QAAQrzG,OAAQkD,IACjCkF,KAAKirG,QAAQnwG,KAAOsS,IACpBzV,EAAMmD,EAAI,EACNoxG,SACAA,EAAQpxG,GAIhBoxG,GAAQ,IACRA,EAAQ,GAEZj4E,EAAMj0B,KAAKjI,QAASm0G,EAAOv0G,KAGnC0pB,GAAG8G,OAAO6hF,GACNN,EAAiB,SAAUyC,EAAUC,EAAYC,EAAaC,GAa9D,QAAS90G,GAAIC,EAAQC,EAAQC,GAIzB,MAHAF,IAAkB,GAClBC,EAASA,GAAU,EACnBC,EAAMD,EAASD,EAAOG,OAClBD,EACOE,EAAMH,GAAQH,UAAU,EAAGI,GAAOF,EAEtCA,EAgHX,QAAS80G,GAAgBC,GAErB,MADAC,GAAgBD,EACT3sC,EAEX,QAAS6sC,GAAYt/F,EAAQ0/B,GACzB,OAAQ1/B,GACR,IAAK,IACD2H,EAAO+3B,CACP,MACJ,KAAK,IACD93B,EAAQ83B,EACHA,IACDlvC,EAAMorG,SAAS,GACf2D,EAAiB,GAErB,MACJ,KAAK,IACD9gG,EAAOihC,CACP,MACJ,KAAK,IACL,IAAK,IACD55B,EAAQ45B,EACHA,IACD8/D,EAAqB,GAEzB,MACJ,KAAK,IACDvgG,EAAUygC,CACV,MACJ,KAAK,IACD53B,EAAU43B,CACV,MACJ,SACI,QArKS,GAsXT+/D,GACK/xG,EAtXT8C,EAAQ,KACRmX,GAAO,EAAMC,GAAQ,EAAMnJ,GAAO,EAAMqH,GAAQ,EAAM7G,GAAU,EAAM6I,GAAU,EAAMC,GAAe,EACrGw3F,EAAiB,GACjBC,EAAqB,GACrBE,KACAj1G,GACA,GACA,IACA,KACA,MACA,QAWAuU,EAAmB,gGACnBF,EAAS,KAAMJ,EAAW,KAAMG,EAAO,KAAMwgG,GAAgB,EAC7D5sC,EAAU,SAAUvnE,GAAV,GACNy0G,GAAM1tG,EACNL,EA2FIguG,EAOKlyG,CAjGb,QAAQxC,GACR,IAAK,IACD0G,EAAS6M,EAAOjO,EAAM0O,UAAYwgG,EAAa73F,GAC/C,MACJ,KAAK,KACDjW,EAAS6M,EAAOrU,EAAIoG,EAAM0O,WAAawgG,EAAa73F,GACpD,MACJ,KAAK,MACDjW,EAAS6M,GAAQmJ,GAASD,EAAO9I,EAAKM,UAAU3O,EAAM4O,UAAYsgG,EAAa5C,OAC/E,MACJ,KAAK,OACDlrG,EAAS6M,GAAQmJ,GAASD,EAAO9I,EAAKQ,MAAM7O,EAAM4O,UAAYsgG,EAAa5C,OAC3E,MACJ,KAAK,IACDlrG,EAASgW,EAAQpX,EAAM8O,WAAa,EAAIogG,EAAa93F,KACrD,MACJ,KAAK,KACDhW,EAASgW,EAAQxd,EAAIoG,EAAM8O,WAAa,GAAKogG,EAAa93F,KAC1D,MACJ,KAAK,MACDhW,EAASgW,EAAQ9I,EAAOK,UAAU3O,EAAM8O,YAAcogG,EAAa93F,KACnE,MACJ,KAAK,OACDhW,EAASgW,EAAQ9I,EAAOO,MAAM7O,EAAM8O,YAAcogG,EAAa93F,KAC/D,MACJ,KAAK,KACDhW,EAAS+V,EAAOvd,EAAIoG,EAAM+O,cAAgB,KAAOmgG,EAAa/3F,IAC9D,MACJ,KAAK,OACD/V,EAAS+V,EAAOvd,EAAIoG,EAAM+O,cAAe,GAAKmgG,EAAa/3F,IAC3D,MACJ,KAAK,IACD/V,EAASkU,EAAQtV,EAAMgP,WAAa,IAAM,GAAKkgG,EAAa3C,IAC5D,MACJ,KAAK,KACDnrG,EAASkU,EAAQ1b,EAAIoG,EAAMgP,WAAa,IAAM,IAAMkgG,EAAa3C,IACjE,MACJ,KAAK,IACDnrG,EAASkU,EAAQtV,EAAMgP,WAAakgG,EAAa3C,IACjD,MACJ,KAAK,KACDnrG,EAASkU,EAAQ1b,EAAIoG,EAAMgP,YAAckgG,EAAa3C,IACtD,MACJ,KAAK,IACDnrG,EAASqN,EAAUzO,EAAMiP,aAAeigG,EAAa1C,MACrD,MACJ,KAAK,KACDprG,EAASqN,EAAU7U,EAAIoG,EAAMiP,cAAgBigG,EAAa1C,MAC1D,MACJ,KAAK,IACDprG,EAASkW,EAAUtX,EAAMkP,aAAeggG,EAAazC,MACrD,MACJ,KAAK,KACDrrG,EAASkW,EAAU1d,EAAIoG,EAAMkP,cAAgBggG,EAAazC,MAC1D,MACJ,KAAK,IACDrrG,EAASmW,EAAevW,KAAKpE,MAAMoD,EAAMmP,kBAAoB,KAAOoI,CACpE,MACJ,KAAK,KACDnW,EAASpB,EAAMmP,kBACX/N,EAAS,KACTA,EAASJ,KAAKpE,MAAMwE,EAAS,KAEjCA,EAASmW,EAAe3d,EAAIwH,GAAU1G,CACtC,MACJ,KAAK,MACD0G,EAASmW,EAAe3d,EAAIoG,EAAMmP,kBAAmB,GAAKzU,CAC1D,MACJ,KAAK,KACD0G,EAASkU,EAAQtV,EAAMgP,WAAa,GAAKd,EAASkB,GAAG,GAAKlB,EAASmB,GAAG,GAAK6/F,EAAaxC,SACxF,MACJ,KAAK,MACDyC,EAAOnvG,EAAMsP,oBACb7N,EAAO0tG,EAAO,EACd/tG,GAASJ,GAAAA,KAAKC,IAAIkuG,EAAO,KAAe91G,MAAM,KAAK,GACnD81G,EAAOnuG,KAAKC,IAAIkuG,GAAiB,GAAT/tG,EACxBA,GAAUK,EAAO,IAAM,KAAO7H,EAAIwH,GAClCA,GAAU,IAAMxH,EAAIu1G,EACpB,MACJ,KAAK,IACL,IAAK,KACD/tG,EAASpB,EAAMsP,oBAAsB,GACrC7N,EAAOL,EAAS,EAChBA,GAASJ,GAAAA,KAAKC,IAAIG,IAAmB/H,MAAM,KAAK,GAChD+H,GAAUK,EAAO,IAAM,MAAkB,OAAV/G,EAAiBd,EAAIwH,GAAUA,GAIlE,GADAA,EAASA,IAAWpI,EAAYoI,EAAS1G,EAAMkO,MAAM,EAAGlO,EAAMV,OAAS,GACnE60G,EAAe,CASf,IARAztG,EAAS,GAAKA,EACVguG,EAAe,GACN,OAAT10G,IACAA,EAAQ,OAEC,QAATA,IACAA,EAAQ,QAEHwC,EAAI,EAAGA,EAAIkE,EAAOpH,OAAQkD,IAC/BkyG,GAAgB10G,EAAM,EAE1B,OAAO00G,GAEP,MAAOhuG,GAmPf,IA5MAgB,KAAKw/F,SAAW,SAAU1yD,GACtBjhC,EAAOihC,GAEX9sC,KAAKitG,SAAW,WACZ,MAAOphG,IAEX7L,KAAKisG,WAAa,SAAU7+F,EAAQhO,GAAlB,GAON8tG,GANJxgD,EAAW,GAAI1wD,MAAK4B,GAASA,EAAM3B,QAAU2B,EAAM3B,UAAY2B,EACnE,QAAQwP,GACR,IAAK,IACDs/C,EAASh3C,YAAYg3C,EAAS//C,cAAgBvN,EAC9C,MACJ,KAAK,IACG8tG,EAAWxgD,EAAShgD,WAAatN,EACrCstD,EAASs8C,SAASkE,GACdxgD,EAAShgD,WAAa,MAAQwgG,EAAW,IAAM,KAC/CxgD,EAASx9B,QAAQ,GACjBw9B,EAASs8C,SAASkE,GAEtB,MACJ,KAAK,IACL,IAAK,IACDxgD,EAASx9B,QAAQw9B,EAASpgD,UAAYlN,EACtC,MACJ,KAAK,IACL,IAAK,IACDstD,EAASv5C,SAASu5C,EAAS9/C,WAAaxN,EACxC,MACJ,KAAK,IACDstD,EAASygD,WAAWzgD,EAAS7/C,aAAezN,EAC5C,MACJ,KAAK,IACDstD,EAAS0gD,WAAW1gD,EAAS5/C,aAAe1N,EAC5C,MACJ,KAAK,IACDstD,EAASv5C,UAAUu5C,EAAS9/C,WAAa,IAAM,IAK/C8/C,EAAS//C,cAAgB,IACzB+/F,EAAYt/F,GAAQ,GACpBxP,EAAQ8uD,IAGhB1sD,KAAK2rG,UAAY,SAAUv+F,EAAQigG,GAAlB,GAKT3gD,GACA4gD,EAGIz9E,EAkBAq9E,EAgBIK,EAGSzyG,EAcb0yG,EAqCAC,EAWAC,CA3GR,KAAKL,EAED,MADAX,GAAYt/F,GAAQ,IACb,CAIX,QAFIs/C,EAAW,GAAI1wD,MAAK4B,GAASA,EAAM3B,QAAU2B,EAAM3B,UAAY2B,GAE3DwP,GACR,IAAK,IAED,GADIyiB,GAAWhkB,EAA4B,GAArB6gD,EAASpgD,UAAiB,GAAK+F,SAASg7F,EAAa,IACvE53F,MAAMoa,GACN,MAEJ,MAAOA,EAAU,IACbA,EAAUxd,UAASwd,GAAAA,GAAmBrpB,MAAM,GAAI,GAEpD,IAAIqpB,EAAU,EACVhkB,GAAO,MACJ,CAEH,GADA6gD,EAASx9B,QAAQW,GACb68B,EAAShgD,aAAe9O,EAAM8O,WAC9B,MAEJb,IAAO,EAEX,KACJ,KAAK,IAED,GADIqhG,GAAYl4F,EAAoC,IAA3B03C,EAAShgD,WAAa,GAAU,GAAK2F,SAASg7F,EAAa,IAC/E53F,MAAMy3F,GAcJ,CAGH,IAFIK,EAAazhG,EAASI,OAAOO,MACjCkgG,GAAkBU,EAAYvwG,cACvB6vG,EAAe/0G,OAAS,GAAG,CAC9B,IAASkD,EAAI,EAAGA,EAAIyyG,EAAW31G,OAAQkD,IACnC,GAA4D,IAAxDyyG,EAAWzyG,GAAGgC,cAAcoB,QAAQyuG,GAIpC,MAHAjgD,GAASs8C,SAASluG,GAClBka,GAAQ,EACRpX,EAAQ8uD,GACD,CAGfigD,GAAiBA,EAAep1G,UAAU,EAAGo1G,EAAe/0G,QAEhE,OAAO,EA3BP,KAAOs1G,EAAW,IACdA,EAAW76F,UAAS66F,GAAAA,GAAoB1mG,MAAM,GAAI,GAElD0mG,GAAW,EACXl4F,GAAQ,GAER03C,EAASs8C,SAASkE,EAAW,GACzBxgD,EAAShgD,aAAewgG,EAAW,IACnCxgD,EAASx9B,QAAQ,GACjBw9B,EAASs8C,SAASkE,EAAW,IAEjCl4F,GAAQ,EAkBhB,MACJ,KAAK,IAED,GADIw4F,GAAWz4F,EAAgC,GAAzB23C,EAAS//C,cAAqB,GAAK0F,SAASg7F,EAAa,IAC3E53F,MAAM+3F,GACN,MAEJ,MAAOA,EAAU,MACbA,EAAUn7F,UAASm7F,GAAAA,GAAmBhnG,MAAM,GAAI,GAEhDgnG,GAAU,EACVz4F,GAAO,GAEP23C,EAASh3C,YAAY83F,GACrBz4F,GAAO,EAEX,MACJ,KAAK,IAED,GADAu4F,GAAYp6F,EAA2C,IAAlCw5C,EAAS9/C,WAAa,IAAM,IAAW,GAAKyF,SAASg7F,EAAa,IACnF53F,MAAM63F,GACN,MAEJ,MAAOA,EAAW,IACdA,EAAWj7F,UAASi7F,GAAAA,GAAoB9mG,MAAM,GAAI,GAEtDkmD,GAASv5C,SAAgD,GAAvCvU,KAAKpE,MAAMkyD,EAAS9/C,WAAa,IAAW0gG,EAAW,IACzEp6F,GAAQ,CACR,MACJ,KAAK,IAED,GADAo6F,GAAYp6F,EAA8B,GAAtBw5C,EAAS9/C,WAAkB,GAAKyF,SAASg7F,EAAa,IACtE53F,MAAM63F,GACN,MAEJ,MAAOA,EAAW,IACdA,EAAWj7F,UAASi7F,GAAAA,GAAoB9mG,MAAM,GAAI,GAEtDkmD,GAASv5C,SAASm6F,GAClBp6F,GAAQ,CACR,MACJ,KAAK,IAED,GADIu6F,GAAcphG,EAAkC,GAAxBqgD,EAAS7/C,aAAoB,GAAKwF,SAASg7F,EAAa,IAChF53F,MAAMg4F,GACN,MAEJ,MAAOA,EAAa,IAChBA,EAAap7F,UAASo7F,GAAAA,GAAsBjnG,MAAM,GAAI,GAE1DkmD,GAASygD,WAAWM,GACpBphG,GAAU,CACV,MACJ,KAAK,IAED,GADIqhG,GAAcx4F,EAAkC,GAAxBw3C,EAAS5/C,aAAoB,GAAKuF,SAASg7F,EAAa,IAChF53F,MAAMi4F,GACN,MAEJ,MAAOA,EAAa,IAChBA,EAAar7F,UAASq7F,GAAAA,GAAsBlnG,MAAM,GAAI,GAE1DkmD,GAAS0gD,WAAWM,GACpBx4F,GAAU,CACV,MACJ,KAAK,IACD,GAAIhC,EAAO,CAEP,IADA05F,GAAsBS,EAAYvwG,cAC3B8vG,EAAmBh1G,OAAS,GAAG,CAClC,GAAiE,IAA7DkU,EAASkB,GAAG,GAAGlQ,cAAcoB,QAAQ0uG,IAA6BlgD,EAAS9/C,YAAc,IAAmE,IAA7Dd,EAASmB,GAAG,GAAGnQ,cAAcoB,QAAQ0uG,IAA6BlgD,EAAS9/C,WAAa,GAGvL,MAFA8/C,GAASv5C,UAAUu5C,EAAS9/C,WAAa,IAAM,IAC/ChP,EAAQ8uD,GACD,CAEXkgD,GAAqBA,EAAmBr1G,UAAU,EAAGq1G,EAAmBh1G,QAE5E,OAAO,GAOf,MADAgG,GAAQ8uD,GACD,GAEX1sD,KAAK+qG,OAAS,SAAUhiG,EAAQyC,EAASkW,GACrC,MAAK3Y,IAMLyC,EAAUtT,EAAMwT,WAAWF,GAC3BM,EAAWN,EAAQO,UAAUC,SAC7BjD,EAAS+C,EAASK,SAASpD,IAAWA,EACtCkD,EAAOH,EAASG,KAChBC,EAASJ,EAASI,OAClB4gG,EAAeprF,GAEX3Y,EAAO5R,QAAQiV,EAAkBmgG,GAAgB,IACjDxjG,EAAO5R,QAAQiV,EAAkBmgG,GAAgB,OAZ7C,GACA,KAcZvsG,KAAK4qG,cAAgB,WACjB,MAAO71F,IAAQC,GAASnJ,GAAQqH,GAAS7G,GAAW6I,GAAWC,EAAe,GAAInZ,MAAK4B,EAAM3B,WAAa,MAEzGkwG,EAODvuG,EAAQ,GAAI5B,MAAKmwG,EAASlwG,eAJ1B,KAFA2B,EAAQ,GAAI5B,MACR6wG,EAAe7sG,KAAK+qG,OAAOqB,EAAYC,EAAaC,GAAc,GAC7DxxG,EAAI,EAAGA,EAAI+xG,EAAaj1G,OAAQkD,IACrC4xG,EAAYG,EAAa/xG,IAAI,KAwD3CnE,OAAOuB,MAAM2sB,QACRluB,OAAOuB,OACE,kBAAVzB,SAAwBA,OAAOgiC,IAAMhiC,OAAS,SAAUiiC,EAAIC,EAAIC,IACrEA,GAAMD,OAEV,SAAUniC,EAAGC,QACVA,OAAO,oBACH,iBACA,eACDD,IACL,WAyeE,MA9dC,UAAUE,EAAGE,GAEV,QAAS2jC,GAAUn6B,GACf,GAAIutG,GAAevtG,EAAQutG,aAAc5kG,EAAS3I,EAAQ2I,MAC1D+C,GAASyuB,UAAUn6B,GACnButG,EAAej3G,EAAEqP,QAAQ4nG,GAAgBA,GAAgBA,GACpDA,EAAa/1G,QACd+1G,EAAa7lG,KAAK,cAElBpR,EAAEuM,QAAQ8F,EAAQ4kG,SAClBA,EAAavlG,OAAO,EAAG,EAAGhI,EAAQ2I,QAEtC3I,EAAQutG,aAAeA,EAE3B,QAASxpG,GAAe8D,GACpBA,EAAE9D,iBAfT,GA2JOypG,GA1JA11G,EAAQvB,OAAOuB,MAAOmpB,EAAKnpB,EAAMmpB,GAAIrc,EAASqc,EAAGrc,OAAQgkC,EAAQ9wC,EAAMwe,UAAWiL,EAAOzpB,EAAMypB,KAAMlf,EAAWvK,EAAMuK,SAAU+P,EAAgBta,EAAMqa,eAAgBs7F,EAAM,UAAWC,EAAO,WAAY7rG,EAAK,mBAAoBo1E,EAAQ,QAAUp1E,EAAI84E,EAAO,OAAQC,EAAQ,QAASvhD,EAAS,SAAUg+C,EAAW,WAAYsyB,EAAW,WAAYgE,EAAU,kBAAmB1c,EAAU,kBAAmB/b,EAAW,mBAAoBs0B,EAAgB,mBAAoBtY,EAAQ,gBAAiB0c,EAAc,aAAe/rG,EAAK,cAAgBA,EAAIk3E,EAAY,YAAcl3E,EAAImvF,EAAK,KAAM6S,EAAM,MAAOgK,EAAM,MAAOlL,EAAQ,QAAS+B,EAAgB,gBAAiBoJ,EAAgB,gBAAiBC,EAAc,cAAeriG,EAAW5T,EAAM4T,SAAUk2F,EAAYl2F,EAASk2F,UAAWK,EAAgBv2F,EAASu2F,cAAee,EAAkBt3F,EAASs3F,gBAAiB1iG,EAAShK,EAAEgK,OAAQsF,EAAQtP,EAAEsP,MAAO87F,EAAO9lG,KAgBn5BoyG,EAAW,SAAUhuG,GACrB,GAAiByjB,GAAbjd,EAAO5G,KAAU6X,EAAOta,SAASsa,KAAMJ,EAAM/gB,EAAEm3G,GAAK3qG,KAAKirG,EAAa,QAAQ7zG,SAAS,wBAAwBw8B,SAASjf,EAC5HjR,GAAKxG,QAAUA,EAAUA,MACzByjB,EAAKzjB,EAAQyjB,GACTA,IACAA,GAAM,YACNpM,EAAIvU,KAAKkuF,EAAIvtE,GACbjd,EAAKynG,YAAcxqF,GAEvBjd,EAAKi3E,MAAQ,GAAIx8D,GAAG06D,MAAMtkE,EAAK/W,EAAON,EAAQy9E,MAAOz9E,GACjD8O,KAAM,QACN7Q,MAAOnG,EAAMC,QAAQkG,MAAM+B,EAAQ87E,WAEvCt1E,EAAK6Q,IAAMA,EACX7Q,EAAKhJ,MAAMwC,EAAQxC,OAEvBwwG,GAASrnG,WACLunG,UAAW,WAAA,GAIH72F,GAHA7Q,EAAO5G,KACP8L,EAAWlF,EAAKkF,SAChB1L,EAAUwG,EAAKxG,OAEd0L,KACD2L,EAAM/gB,EAAEm3G,GAAK3qG,KAAKkuF,EAAIl5F,EAAMyrB,QAAQmT,SAASlwB,EAAKi3E,MAAM9lF,SAAS2N,GAAGyzE,EAAWh1E,GAAgBuB,GAAG2xE,EAAO,kBAAmBrxE,EAAMY,EAAKs9B,OAAQt9B,IAC/IA,EAAKkF,SAAWA,EAAW,GAAIuV,GAAG8jF,SAAS1tF,GAC3C7Q,EAAK2nG,YAAYnuG,GACjBlI,EAAM4T,SAASm3F,iBAAiBn3F,EAAS/T,SACzC+T,EAASsuB,SAASxzB,EAAK6vF,QAAU7vF,EAAK63F,SAAUr+F,EAAQ6O,OACxDrI,EAAKhJ,MAAMgJ,EAAK6vF,UAGxB8X,YAAa,SAAUnuG,GACnBJ,KAAK8L,SAASuZ,YACVmgF,YAAY,EACZ/qE,OAAQr6B,EAAQq6B,OAChBjvB,QAASpL,EAAQoL,QACjBw3F,MAAO5iG,EAAQ4iG,MACfH,MAAOziG,EAAQyiG,MACfrN,OAAQp1F,EAAQo1F,OAChBzsF,OAAQ3I,EAAQ2I,OAChBrQ,IAAK0H,EAAQ1H,IACbsZ,IAAK5R,EAAQ4R,IACbgD,MAAO5U,EAAQ4U,MACfmb,WAAY/vB,EAAQ+vB,WACpBlhB,MAAO7O,EAAQ6O,MACf8yF,aAAc3hG,EAAQ2hG,gBAG9B18E,WAAY,SAAUjlB,GAAV,GACJosD,GAAMxsD,KAAKI,QACX2hG,EAAe3hG,EAAQ2hG,YACvBA,KACA3hG,EAAQ2hG,aAAej2F,EAASxI,SAASy+F,IAE7C/hG,KAAKI,QAAUM,EAAO8rD,EAAKpsD,GACvBq6B,OAAQ+xB,EAAI/xB,OACZ6hD,MAAO9vB,EAAI8vB,MACXD,KAAM7vB,EAAI6vB,OAEVr8E,KAAK8L,UACL9L,KAAKuuG,YAAYvuG,KAAKI,UAG9B0lB,QAAS,WACL9lB,KAAK69E,MAAM/3D,WAEfu2D,KAAM,WACF,GAAIz1E,GAAO5G,IACX4G,GAAK0nG,YACL1nG,EAAKi3E,MAAMxB,QAEfC,MAAO,WACHt8E,KAAK69E,MAAMvB,SAEftqE,IAAK,SAAUpU,GACXoC,KAAKumG,QAAQtC,EAAKrmG,IAEtBlF,IAAK,SAAUkF,GACXoC,KAAKumG,QAAQ0H,EAAKrwG,IAEtBuiB,OAAQ,WACJ,GAAIvZ,GAAO5G,IACX4G,GAAKA,EAAKi3E,MAAMr6E,UAAYw3E,EAAQD,MAExChwD,KAAM,SAAU9iB,GACZ,GAAIrB,GAAO5G,KAAMjB,EAAMkJ,EAAEmuB,QAAStqB,EAAWlF,EAAKkF,SAAU0iG,EAAkBvmG,EAAE8tE,SAAWh3E,GAAO4iB,EAAKU,MAAQtjB,GAAO4iB,EAAKK,MAAOysF,GAAU,CAC5I,IAAIxmG,EAAEglF,OACEluF,GAAO4iB,EAAKU,MACZzb,EAAKy1E,OACLp0E,EAAE9D,iBACFsqG,GAAU,GACH1vG,GAAO4iB,EAAKQ,KACnBvb,EAAK01E,QACLr0E,EAAE9D,iBACFsqG,GAAU,OAEX,IAAI7nG,EAAKi3E,MAAMr6E,UAAW,CAC7B,GAAIzE,GAAO4iB,EAAKM,KAAOusF,GAAmB1iG,EAAS+5F,MAAMhsG,SAASy7E,GAG9D,MAFA1uE,GAAK01E,QACLr0E,EAAE9D,kBACK,CAEXyC,GAAK63F,SAAW3yF,EAASi4B,MAAM97B,GAC/BwmG,GAAU,EAEd,MAAOA,IAEX9iG,QAAS,SAAUE,GACf7L,KAAKy+F,SAAW5yF,EAChB7L,KAAK8L,SAASisE,OAAOlsE,IAEzBjO,MAAO,SAAUA,GACb,GAAIgJ,GAAO5G,KAAM8L,EAAWlF,EAAKkF,SAAU1L,EAAUwG,EAAKxG,QAASunG,EAAevnG,EAAQ2hG,YACtF4F,IAAgBA,EAAa/pG,KAC7BA,EAAQ,MAEZgJ,EAAK6vF,OAAS74F,EACdgJ,EAAK63F,SAAW,GAAIqD,KAAMO,EAAczkG,EAAOwC,EAAQ4R,IAAK5R,EAAQ1H,OAChEoT,GACAA,EAASlO,MAAMA,IAGvBsmC,OAAQ,SAAUj8B,GACVA,EAAE22B,cAAc3gC,UAAUC,QAAQo3E,SAClCt1E,KAAKs8E,SAGbiqB,QAAS,SAAUzkG,EAAQlE,GAAlB,GACDgJ,GAAO5G,KACP8L,EAAWlF,EAAKkF,QACpBlF,GAAKxG,QAAQ0B,GAAUlE,EACnBkO,GACAA,EAAShK,GAAQlE,KAI7BwwG,EAAS7zE,UAAYA,EACrBriC,EAAMk2G,SAAWA,EACbR,EAAa5oG,EAAOtE,QACpBC,KAAM,SAAU5I,EAASqI,GACrB,GAAiBkD,GAAUmU,EAAvB7Q,EAAO5G,IACXgF,GAAOf,GAAGtD,KAAKwH,KAAKvB,EAAM7O,EAASqI,GACnCrI,EAAU6O,EAAK7O,QACfqI,EAAUwG,EAAKxG,QACfA,EAAQ2hG,aAAe7pG,EAAM4T,SAASxI,SAASlD,EAAQ2hG,cACvD3hG,EAAQ4R,IAAMg3B,EAAMjxC,EAAQmL,KAAK,SAAW8lC,EAAM5oC,EAAQ4R,KAC1D5R,EAAQ1H,IAAMswC,EAAMjxC,EAAQmL,KAAK,SAAW8lC,EAAM5oC,EAAQ1H,KAC1D6hC,EAAUn6B,GACVwG,EAAK8nG,gBAAkBhuG,KAAWN,GAClCwG,EAAK+nG,WACL/nG,EAAKgoG,SAAW,GAAIR,GAAS1tG,KAAWN,GACpCyjB,GAAI9rB,EAAQmL,KAAKkuF,GACjBlV,OAAQt1E,EAAKvN,QACbohC,OAAQ,WACJ7zB,EAAK23C,QAAQv+C,KAAKpC,SAClBgJ,EAAK01E,SAETA,MAAO,SAAUr0E,GACTrB,EAAKoB,QAAQgzE,GACb/yE,EAAE9D,kBAEFpM,EAAQmL,KAAKgrG,GAAe,GAC5Bz2F,EAAIvU,KAAKirG,GAAa,KAG9B9xB,KAAM,SAAUp0E,GACZ,GAA4B4D,GAAxBzL,EAAUwG,EAAKxG,OACfwG,GAAKoB,QAAQ+yE,GACb9yE,EAAE9D,kBAEEyC,EAAK7O,QAAQ+0C,QAAUlmC,EAAKokG,WAC5Bn/F,EAAOm9B,EAAMjxC,EAAQ+0C,MAAO1sC,EAAQutG,aAAcvtG,EAAQoL,SAC1D5E,EAAKgoG,SAAS/iG,EAAO,UAAY,SAASA,IAE9C9T,EAAQmL,KAAKgrG,GAAe,GAC5Bz2F,EAAIvU,KAAKirG,GAAa,GACtBvnG,EAAKioG,YAAYhjG,QAI7B4L,EAAM7Q,EAAKgoG,SAASn3F,IACpB7Q,EAAKkoG,OACL,KACI/2G,EAAQ,GAAG2lB,aAAa,OAAQ,QAClC,MAAOzV,GACLlQ,EAAQ,GAAGmH,KAAO,OAEtBnH,EAAQuC,SAAS,WAAW4I,MACxB6gB,KAAM,WACNgrF,iBAAiB,EACjBC,YAAapoG,EAAKgoG,SAASP,cAE/BznG,EAAKg+C,SACLh+C,EAAKq5F,YACL38F,EAAWvL,EAAQgC,GAAG,eAAiBrD,EAAEkQ,EAAK7O,SAAS4L,QAAQ,YAAY5J,GAAG,aAC1EuJ,EACAsD,EAAK6Y,QAAO,GAEZ7Y,EAAKgkD,SAAS7yD,EAAQgC,GAAG,eAEzBqG,EAAQ6uG,YACRroG,EAAKsoG,WAAa,GAAI7tF,GAAG2oF,UAAUjyG,GAC/ByT,QAASpL,EAAQoL,QACjBzC,OAAQ3I,EAAQ2I,OAChBiJ,IAAK5R,EAAQ4R,IACbtZ,IAAK0H,EAAQ1H,IACbkF,MAAOwC,EAAQxC,SAGvBgJ,EAAK+uF,KAAO/uF,EAAKuoG,QAAQ/uG,EAAQxC,OAASgJ,EAAK7O,QAAQ+0C,OACvDlmC,EAAKokG,SAAWjzG,EAAQ+0C,MACxB50C,EAAM0uB,OAAOhgB,IAEjBc,QACIqzE,EACAC,EACAvhD,GAEJr5B,SACI8O,KAAM,aACNtR,MAAO,KACP43F,OAAQ,GACRzsF,OAAQ,GACRyC,QAAS,GACTmiG,gBACA37F,IAAK,GAAIhW,MAAK,KAAM,EAAG,GACvBtD,IAAK,GAAIsD,MAAK,KAAM,GAAI,IACxBiT,MAAO8zF,EACPF,MAAOE,EACP3mB,aACApnE,SACAguF,SACAoM,aAAc,+DACdH,WAAW,GAEf5pF,WAAY,SAAUjlB,GAAV,GACJwG,GAAO5G,KACPpC,EAAQgJ,EAAK6vF,MACjBzxF,GAAOf,GAAGohB,WAAWld,KAAKvB,EAAMxG,GAChCA,EAAUwG,EAAKxG,QACfA,EAAQ4R,IAAMg3B,EAAM5oC,EAAQ4R,KAC5B5R,EAAQ1H,IAAMswC,EAAM5oC,EAAQ1H,KAC5B6hC,EAAUn6B,GACVwG,EAAKgoG,SAASvpF,WAAWjlB,GACrBwG,EAAKsoG,YACLtoG,EAAKsoG,WAAW7pF,YACZ7Z,QAASpL,EAAQoL,QACjBzC,OAAQ3I,EAAQ2I,OAChBiJ,IAAK5R,EAAQ4R,IACbtZ,IAAK0H,EAAQ1H,IACbkF,MAAOwC,EAAQxC,QAGnBA,IACAgJ,EAAK7O,QAAQ+0C,IAAI50C,EAAMqR,SAAS3L,EAAOwC,EAAQ2I,OAAQ3I,EAAQoL,UAC/D5E,EAAKioG,YAAYjxG,KAGzBq1F,UAAW,SAAU7yF,GACjB,GAAIwG,GAAO5G,KAAMm4E,EAAOvxE,EAAKyoG,UAAUzlF,IAAI3nB,GAAKlK,EAAU6O,EAAK7O,QAAQ6xB,IAAI3nB,GAAK5I,EAAUuN,EAAK0oG,cAAc1lF,IAAI3nB,GAAK2oD,EAAWxqD,EAAQwqD,SAAUrrC,EAAUnf,EAAQmf,OAChKqrC,IAAarrC,GAOdlmB,EAAQiB,SAASilB,EAAUqqF,EAAgBmE,GAASpjD,YAAYprC,EAAUwuF,EAAUnE,GACpF7xG,EAAQmL,KAAKu0E,EAAUl4D,GAASrc,KAAK6mG,EAAUn/C,GAAU1nD,KAAK4hG,EAAevlF,KAP7ElmB,EAAQiB,SAASyzG,GAASpjD,YAAYi/C,GAAelkG,GAAGsoG,EAAapnG,EAAKoyF,cAC1EjhG,EAAQqtB,WAAWqyD,GAAUryD,WAAW2kF,GAAU7mG,KAAK4hG,GAAe,GAAOp/F,GAAG,UAAYzD,EAAI+D,EAAMY,EAAKqxE,SAAUrxE,IAAOlB,GAAG,WAAazD,EAAI+D,EAAMY,EAAKoxE,MAAOpxE,IAAOlB,GAAG,QAAUzD,EAAI,WACtL2E,EAAK0oG,cAAch1G,SAAS+2F,KAEhClZ,EAAKzyE,GAAG2xE,EAAOrxE,EAAMY,EAAKs9B,OAAQt9B,IAAOlB,GAAGyzE,EAAWh1E,KAM/DymD,SAAU,SAAUA,GAChB5qD,KAAKizF,WACDroC,SAAUA,IAAah0D,GAAmBg0D,EAC1CrrC,SAAS,KAGjBE,OAAQ,SAAUA,GACdzf,KAAKizF,WACDroC,UAAU,EACVrrC,UAAWE,EAASA,IAAW7oB,GAAmB6oB,MAG1DqG,QAAS,WACL,GAAIlf,GAAO5G,IACXgF,GAAOf,GAAG6hB,QAAQ3d,KAAKvB,GACvBA,EAAKgoG,SAAS9oF,UACdlf,EAAK7O,QAAQ6xB,IAAI3nB,GACjB2E,EAAKyoG,UAAUzlF,IAAI3nB,GACnB2E,EAAK0oG,cAAc1lF,IAAI3nB,GACnB2E,EAAKyvF,OACLzvF,EAAKyvF,MAAMzsE,IAAI,QAAShjB,EAAK0vF,gBAGrCja,KAAM,WACFr8E,KAAK4uG,SAASvyB,QAElBC,MAAO,WACHt8E,KAAK4uG,SAAStyB,SAElBtqE,IAAK,SAAUpU,GACX,MAAOoC,MAAKumG,QAAQtC,EAAKrmG,IAE7BlF,IAAK,SAAUkF,GACX,MAAOoC,MAAKumG,QAAQ0H,EAAKrwG,IAE7BA,MAAO,SAAUA,GACb,GAAIgJ,GAAO5G,IACX,OAAIpC,KAAUhH,EACHgQ,EAAK6vF,QAEhB7vF,EAAK+uF,KAAO/uF,EAAKuoG,QAAQvxG,GACP,OAAdgJ,EAAK+uF,MACL/uF,EAAK7O,QAAQ+0C,IAAI,IAErBlmC,EAAKokG,SAAWpkG,EAAK7O,QAAQ+0C,MAJ7BlmC,IAMJoyF,aAAc,SAAU/wF,GACpBvR,EAAEuR,EAAE22B,eAAex9B,YAAYkwF,EAAkB,eAAXrpF,EAAE/I,OAE5C84E,MAAO,WACH,GAAIpxE,GAAO5G,KAAMpC,EAAQgJ,EAAK7O,QAAQ+0C,KACtClmC,GAAK01E,QACD1+E,IAAUgJ,EAAKokG,UACfpkG,EAAK23C,QAAQ3gD,GAEjBgJ,EAAK0oG,cAAc3kD,YAAY0mC,IAEnCntD,OAAQ,WACJ,GAAIt9B,GAAO5G,KAAMjI,EAAU6O,EAAK7O,OAChC6O,GAAKgoG,SAASzuF,SACTjoB,EAAMC,QAAQggB,OAASpgB,EAAQ,KAAOya,KACvCza,EAAQw8B,SAGhBgqB,QAAS,SAAU3gD,GAAV,GAC2C2xG,GAG5CC,EACAC,EAJA7oG,EAAO5G,KAAM8jG,EAAWl9F,EAAK7O,QAAQ+0C,KACzClvC,GAAQgJ,EAAKuoG,QAAQvxG,GACrB2xG,GAAer3G,EAAM4T,SAAS+3F,YAAYj9F,EAAK+uF,KAAM/3F,GACjD4xG,EAAeD,IAAgB3oG,EAAK0wF,QACpCmY,EAAgB3L,IAAal9F,EAAK7O,QAAQ+0C,OAC1C0iE,GAAgBC,IAChB7oG,EAAK7O,QAAQiQ,QAAQyxB,GAErB81E,IACA3oG,EAAK+uF,KAAO/3F,EACZgJ,EAAKokG,SAAWpkG,EAAK7O,QAAQ+0C,MAC7BlmC,EAAKoB,QAAQyxB,IAEjB7yB,EAAK0wF,SAAU,GAEnBrf,SAAU,SAAUhwE,GAChB,GAAIrB,GAAO5G,KAAM4uG,EAAWhoG,EAAKgoG,SAAUhxG,EAAQgJ,EAAK7O,QAAQ+0C,MAAO2hE,GAAU,CAC5EG,GAAS/wB,MAAMr6E,WAAayE,EAAEmuB,SAAWzU,EAAKK,OAASpkB,IAAUgJ,EAAKokG,UAGvEyD,EAAUG,EAAS7jF,KAAK9iB,GACxBrB,EAAKioG,YAAYD,EAASnQ,UACrBgQ,EAEM7nG,EAAKsoG,YAAcjnG,EAAE64D,0BAC5B74D,EAAE64D,2BAFFl6D,EAAK0wF,SAAU,GALnB1wF,EAAK23C,QAAQ3gD,IAWrBkxG,MAAO,WACH,GAAyC32B,GAArCvxE,EAAO5G,KAAMjI,EAAU6O,EAAK7O,OAChCogF,GAAOpgF,EAAQqpD,KAAK,iBACf+2B,EAAK,KACNA,EAAOzhF,EAAE,iHAAiHorE,YAAY/pE,IAE1I6O,EAAKyoG,UAAYl3B,EAAKj1E,MAClB6gB,KAAQ,SACR2rF,gBAAiB9oG,EAAKgoG,SAASP,eAGvC9H,QAAS,SAAUzkG,EAAQlE,GACvB,GAAIgJ,GAAO5G,KAAMI,EAAUwG,EAAKxG,OAChC,OAAIxC,KAAUhH,EACHwJ,EAAQ0B,IAEnBlE,EAAQorC,EAAMprC,EAAOwC,EAAQutG,aAAcvtG,EAAQoL,SAC9C5N,IAGLwC,EAAQ0B,GAAU,GAAIggG,KAAMlkG,IAC5BgJ,EAAKgoG,SAAS9sG,GAAQlE,IALtBA,IAOJuxG,QAAS,SAAUvxG,GACf,GAAqQ+xG,GAAjQ/oG,EAAO5G,KAAMI,EAAUwG,EAAKxG,QAAS4R,EAAM5R,EAAQ4R,IAAKtZ,EAAM0H,EAAQ1H,IAAKiT,EAAU/E,EAAK6vF,OAAQ5qF,EAAOm9B,EAAMprC,EAAOwC,EAAQutG,aAAcvtG,EAAQoL,SAAUokG,EAAsB,OAAT/jG,GAA6B,OAAZF,GAAoBE,YAAgB7P,OAAQ2P,YAAmB3P,KAO/P,OANIoE,GAAQ2hG,aAAal2F,KACrBA,EAAO,KACFjF,EAAK+uF,MAAS/uF,EAAK7O,QAAQ+0C,QAC5BlvC,EAAQ,QAGXiO,KAAUF,GAAWikG,GACtBD,EAAiBz3G,EAAMqR,SAASsC,EAAMzL,EAAQ2I,OAAQ3I,EAAQoL,SAC1DmkG,IAAmB/xG,GACnBgJ,EAAK7O,QAAQ+0C,IAAa,OAATjhC,EAAgBjO,EAAQ+xG,GAEtC9jG,IAEE,OAATA,GAAiBu3F,EAAgBv3F,EAAMmG,GACvCnG,EAAOw2F,EAAcx2F,EAAMmG,EAAKtZ,GACxBspG,EAAUn2F,EAAMmG,EAAKtZ,KAC7BmT,EAAO,MAEXjF,EAAK6vF,OAAS5qF,EACdjF,EAAKgoG,SAAShxG,MAAMiO,GAChBjF,EAAKsoG,WACLtoG,EAAKsoG,WAAWtxG,MAAMiO,GAAQjO,GAE9BgJ,EAAK7O,QAAQ+0C,IAAI50C,EAAMqR,SAASsC,GAAQjO,EAAOwC,EAAQ2I,OAAQ3I,EAAQoL,UAE3E5E,EAAKioG,YAAYhjG,GACVA,IAEX8iG,SAAU,WACN,GAAyCt1G,GAArCuN,EAAO5G,KAAMjI,EAAU6O,EAAK7O,OAChCsB,GAAUtB,EAAQ4L,QAAQ,iBACrBtK,EAAQ,KACTA,EAAUtB,EAAQe,KAAKg1G,GAAMl0G,SAASU,SAAS,iCAC/CjB,EAAUA,EAAQP,KAAKg1G,GAAMl0G,UAEjCP,EAAQ,GAAGS,MAAM6d,QAAU5f,EAAQ,GAAG+B,MAAM6d,QAC5C5f,EAAQE,KACJgB,MAAO,OACPC,OAAQnB,EAAQ,GAAG+B,MAAMZ,SAE7B0N,EAAKvN,QAAUA,EAAQiB,SAAS,kCAAkCA,SAASvC,EAAQ,GAAGkG,WACtF2I,EAAK0oG,cAAgB54G,EAAE2C,EAAQ,GAAG4wC,aAEtC2a,OAAQ,WACJ,GAAIh+C,GAAO5G,KAAMjI,EAAU6O,EAAK7O,QAASukG,EAASvkG,EAAQmL,KAAK,QAAS+yB,EAAOqmE,EAAS5lG,EAAE,IAAM4lG,GAAUvkG,EAAQkgB,QAAQ,OACtHge,GAAK,KACLrvB,EAAK0vF,cAAgB,WACjB1vF,EAAKhJ,MAAM7F,EAAQ,GAAG08C,cACtB7tC,EAAKlO,IAAIkO,EAAK8nG,gBAAgBh2G,KAC9BkO,EAAKoL,IAAIpL,EAAK8nG,gBAAgB18F,MAElCpL,EAAKyvF,MAAQpgE,EAAKvwB,GAAG,QAASkB,EAAK0vF,iBAG3C2J,UAAW,WACPjgG,KAAK6vG,cAAgBptG,EAASzC,KAAKI,QAAQgvG,eAE/CP,YAAa,SAAUhjG,GAAV,GACLgkC,GACAjpC,EAAO5G,KACP8L,EAAWlF,EAAKgoG,SAAS9iG,QAC7BlF,GAAK7O,QAAQqtB,WAAW,yBACpBtZ,IACA+jC,EAAO/jC,EAAS+5F,MAChBh2D,EAAK3sC,KAAK,aAAc0D,EAAKipG,eAAgBlkG,QAASE,GAAQC,EAASH,aACvE/E,EAAK7O,QAAQmL,KAAK,wBAAyB2sC,EAAK3sC,KAAK,WAIjEme,EAAG8G,OAAOylF,IACZj3G,OAAOuB,MAAM2sB,QACRluB,OAAOuB,OACE,kBAAVzB,SAAwBA,OAAOgiC,IAAMhiC,OAAS,SAAUiiC,EAAIC,EAAIC,IACrEA,GAAMD,OAEV,SAAUniC,EAAGC,QACVA,OAAO,sBACH,aACA,yBACDD,IACL,WAkjBE,MA5hBC,UAAUE,EAAGE,GAEV,QAASk5G,GAAmBC,EAAU36E,EAAMg4D,GACxC,MAAOA,GAAYh4D,EAAK79B,UAAU,EAAGw4G,GAAU94G,MAAMm2F,GAAWx1F,OAAS,EAAI,EAEjF,QAASo4G,GAAYD,EAAU36E,EAAMg4D,GACjC,MAAOh4D,GAAKn+B,MAAMm2F,GAAW0iB,EAAmBC,EAAU36E,EAAMg4D,IAEpE,QAAS6iB,GAAmBF,EAAU36E,EAAMk6B,EAAM89B,EAAW8iB,GACzD,GAAIC,GAAQ/6E,EAAKn+B,MAAMm2F,EAKvB,OAJA+iB,GAAM/nG,OAAO0nG,EAAmBC,EAAU36E,EAAMg4D,GAAY,EAAG99B,GAC3D89B,GAAyC,KAA5B+iB,EAAMA,EAAMv4G,OAAS,IAClCu4G,EAAMroG,KAAK,IAERqoG,EAAMj5G,KAAKg5G,GAdzB,GACOh4G,GAAQvB,OAAOuB,MAAOC,EAAUD,EAAMC,QAAS87B,EAAQ/7B,EAAM+7B,MAAOzhB,EAAgBta,EAAMqa,eAAgB69F,EAAuBj4G,EAAQolB,YAAa8D,EAAKnpB,EAAMmpB,GAAI4wE,EAAO5wE,EAAG4wE,KAAMtwE,EAAOzpB,EAAMypB,KAAMjmB,EAAaxD,EAAMsD,KAAKE,WAAYopG,EAAgB,gBAAiBuL,EAAgB,gBAAiB52E,EAAS,SAAUs0E,EAAU,kBAAmBt2B,EAAW,WAAYsyB,EAAW,WAAY1Y,EAAU,kBAAmB/b,EAAW,mBAAoBs0B,EAAgB,mBAAoBtY,EAAQ,gBAAiBrvF,EAAK,qBAAsB+rG,EAAc,aAAe/rG,EAAK,cAAgBA,EAAI+D,EAAQtP,EAAEsP,MAehmBsqG,EAAere,EAAKvxF,QACpBC,KAAM,SAAU5I,EAASqI,GACrB,GAAiB/G,GAASiK,EAAtBsD,EAAO5G,IACX4G,GAAK3E,GAAKA,EACV7B,EAAU1J,EAAEqP,QAAQ3F,IAAawkB,WAAYxkB,GAAYA,EACzD6xF,EAAKhuF,GAAGtD,KAAKwH,KAAKvB,EAAM7O,EAASqI,GACjCrI,EAAU6O,EAAK7O,QACfqI,EAAUwG,EAAKxG,QACfA,EAAQmd,YAAcnd,EAAQmd,aAAexlB,EAAQmL,KAAK,eACtDktG,GACAr4G,EAAQmL,KAAK,cAAe9C,EAAQmd,aAExC3W,EAAK+nG,WACL/nG,EAAK2pG,UACL3pG,EAAK4pG,eACL5pG,EAAK49C,cACL59C,EAAKgvF,cACL79F,EAAQ,GAAGmH,KAAO,OAClB7F,EAAUuN,EAAKvN,QACfuN,EAAKkyF,SACL/gG,EAAQuC,SAAS,WAAWoL,GAAG,UAAYzD,EAAI+D,EAAMY,EAAKqxE,SAAUrxE,IAAOlB,GAAG,WAAazD,EAAI+D,EAAMY,EAAK6pG,UAAW7pG,IAAOlB,GAAG,QAAUzD,EAAI+D,EAAMY,EAAK8pG,QAAS9pG,IAAOlB,GAAG,QAAUzD,EAAI,WACrL2E,EAAK+pG,MAAQ/pG,EAAK6tF,YAClB7tF,EAAKokG,SAAWpkG,EAAK+pG,MACrB/pG,EAAK6rE,cAAa,GAClBp5E,EAAQiB,SAAS+2F,KAClB3rF,GAAG,WAAazD,EAAI,WACnB2E,EAAK23C,UACL33C,EAAK6rE,eACLp5E,EAAQsxD,YAAY0mC,KACrBnuF,MACC0tG,aAAc,MACd7sF,KAAM,UACN8sF,iBAAiB,IAErBjqG,EAAKytF,OAAO3uF,GAAG,QAAUzD,EAAI+D,EAAMY,EAAK2tF,YAAa3tF,IACrDA,EAAK4wF,UACL5wF,EAAK+uF,KAAO/uF,EAAK6tF,YACb18F,EAAQ,GAAG8rB,IACX9rB,EAAQmL,KAAK,YAAa0D,EAAKurF,GAAG,GAAGtuE,IAEzCjd,EAAK8vF,QACL9vF,EAAK6rE,eACL7rE,EAAKgtF,YACLtwF,EAAW5M,EAAEkQ,EAAK7O,SAAS4L,QAAQ,YAAY5J,GAAG,aAC9CuJ,GACAsD,EAAK6Y,QAAO,GAEhB7Y,EAAKulD,SAAS/kD,KAAK,QAAS,SAAUa,GAClCA,EAAE9D,mBAENyC,EAAKkqG,uBAAyBp6G,EAAEsP,MAAMY,EAAKmqG,gBAAiBnqG,GAC5D1O,EAAM0uB,OAAOhgB,GACbA,EAAKoqG,0BAET5wG,SACI8O,KAAM,eACNkQ,SAAS,EACTu3E,SAAS,EACTl0F,SAAU,GACVgxF,cAAe,UACfC,mBAAoB,UACpB1nC,cAAe,GACfiqC,UAAW,EACXvB,kBAAkB,EAClB9gE,MAAO,IACP16B,OAAQ,IACR2K,OAAQ,aACRy4B,YAAY,EACZk8D,gBAAgB,EAChBpL,UAAW,KACX7vE,YAAa,GACb6+D,aACAtW,SAAS,EACTloE,MAAO,KACPqzG,aAAa,GAEjBzsD,YAAa,WACT,GAAI59C,GAAO5G,IACP4G,GAAKge,YAAche,EAAK+yE,gBACxB/yE,EAAKwvF,qBAELxvF,EAAKsqG,iBAAmBlrG,EAAMY,EAAKg0F,UAAWh0F,GAC9CA,EAAKizF,cAAgB7zF,EAAMY,EAAK6zF,UAAW7zF,IAE/CA,EAAKge,WAAalpB,EAAW2sC,OAAOzhC,EAAKxG,QAAQwkB,YAAYxd,KAAK,WAAYR,EAAKsqG,kBAAkB9pG,KAAK,QAASR,EAAKizF,gBAE5Htf,cAAe,SAAU31D,GACrB5kB,KAAKI,QAAQwkB,WAAaA,EAC1B5kB,KAAKwkD,cACLxkD,KAAKmsD,SAASouB,cAAcv6E,KAAK4kB,aAErCld,QACI,OACA,QACA+xB,EACA,SACA,YACA,cACA,aAEJpU,WAAY,SAAUjlB,GAClB,GAAIyzF,GAAc7zF,KAAKkzF,aAAa9yF,EACpC6xF,GAAKhuF,GAAGohB,WAAWld,KAAKnI,KAAMI,GAC9BJ,KAAKmsD,SAAS9mC,WAAWwuE,GACzB7zF,KAAKyyF,aACLzyF,KAAK02F,SAETxD,aAAc,SAAU9yF,GACpB,GAAIyzF,GAAc5B,EAAKhuF,GAAGivF,aAAa/qF,KAAKnI,KAAMtJ,EAAEgK,OAAON,GAAW4gG,kBAAkB,IAGxF,OAFAnN,GAAY7rC,eAAiB6rC,EAAY7nC,cACzC6nC,EAAYC,mBAAqB,KAC1BD,GAEXZ,UAAW,SAAU7yF,GACjB,GAAIwG,GAAO5G,KAAMjI,EAAU6O,EAAK7O,QAASsB,EAAUuN,EAAKvN,QAAQuwB,IAAI3nB,GAAK2oD,EAAWxqD,EAAQwqD,SAAUrrC,EAAUnf,EAAQmf,OACnHqrC,IAAarrC,GAIdlmB,EAAQiB,SAASilB,EAAUqqF,EAAgBmE,GAASpjD,YAAYprC,EAAUwuF,EAAUnE,GACpF7xG,EAAQmL,KAAKu0E,EAAUl4D,GAASrc,KAAK6mG,EAAUn/C,GAAU1nD,KAAK4hG,EAAevlF,GAASrc,KAAKmtG,EAAezlD,KAJ1GvxD,EAAQiB,SAASyzG,GAASpjD,YAAYi/C,GAAelkG,GAAGsoG,EAAapnG,EAAKoyF,cAC1EjhG,EAAQqtB,WAAWqyD,GAAUryD,WAAW2kF,GAAU7mG,KAAK4hG,GAAe,GAAO5hG,KAAKmtG,GAAe,KAMzG/zB,MAAO,WAAA,GACC11E,GAAO5G,KACP2L,EAAU/E,EAAKulD,SAAS53B,OACxB5oB,IACAA,EAAQg/C,YAAY2qB,GAExB1uE,EAAKi3E,MAAMvB,SAEfx2D,QAAS,WACL,GAAIlf,GAAO5G,IACX4G,GAAK7O,QAAQ6xB,IAAI3nB,GACjB2E,EAAKytF,OAAOzqE,IAAI3nB,GAChB2E,EAAKvN,QAAQuwB,IAAI3nB,GACjBgwF,EAAKhuF,GAAG6hB,QAAQ3d,KAAKvB,IAEzB4Q,QAAS,WACLxX,KAAKmsD,SAAS30C,WAElBsd,OAAQ,SAAUk4D,GACdhtF,KAAK6jC,QAAQmpD,IAEjBhhE,OAAQ,SAAUsjC,GACd,GAAyG13D,GAArGgP,EAAO5G,KAAMI,EAAUwG,EAAKxG,QAASk8B,EAAal8B,EAAQk8B,WAAY8wD,EAAYxmF,EAAKuqG,YAC3F7hD,GAAOA,GAAQ1oD,EAAK6tF,YACpB7pE,aAAahkB,EAAKovF,gBACd5I,IACA99B,EAAO0gD,EAAY/7E,EAAMrtB,EAAK7O,SAAS,GAAIu3D,EAAM89B,IAErDx1F,EAAS03D,EAAK13D,SACTwI,EAAQs0F,mBAAqB98F,GAAUA,GAAUwI,EAAQ61F,aAC1DrvF,EAAKkvF,OAAQ,EACblvF,EAAKwqG,MAAM,WACPpxG,KAAKmsD,SAASvuD,YAElBgJ,EAAKguF,eACDh3F,MAAO0+B,EAAagzB,EAAKxyD,cAAgBwyD,EACzCvpB,SAAU3lC,EAAQyD,OAClBka,MAAO3d,EAAQ4rD,cACf1vB,WAAYA,IAEhB11B,EAAKW,IAAI,QAAS7Q,EAAEsP,MAAMY,EAAKyqG,iBAAkBzqG,KAErDA,EAAKoqG,0BAETra,QAAS,SAAUrnC,GACf,GAA0Q3xD,GAAtQiJ,EAAO5G,KAAMjB,EAAM6H,EAAK0qG,MAAO1zG,EAAQgJ,EAAK6tF,YAAa18F,EAAU6O,EAAK7O,QAAQ,GAAIg4G,EAAW97E,EAAMl8B,GAAS,GAAIq1F,EAAYxmF,EAAKuqG,aAAchB,EAAQvyG,EAAM3G,MAAMm2F,GAAYmkB,EAAYzB,EAAmBC,EAAUnyG,EAAOwvF,GAAY/4D,EAAe07E,CAChQ,OAAIhxG,IAAO4iB,EAAKG,WAAa/iB,GAAO4iB,EAAKE,QACrCjb,EAAK0qG,MAAQ16G,EACb,IAEJ04D,EAAOA,GAAQ,GACK,gBAATA,KACHA,EAAK,KACLA,EAAO1oD,EAAKge,WAAW+D,OAAOspE,EAAKhvF,QAAQqsD,EAAK,GAAI1oD,EAAKurF,GAAG,MAEhE7iC,EAAOA,EAAO1oD,EAAK4vF,MAAMlnC,GAAQ,IAEjCygD,GAAY,IACZA,EAAWnyG,EAAMd,cAAcoB,QAAQoxD,EAAKxyD,eAAiB,GAEjEa,EAAMC,EAAMrG,UAAU,EAAGw4G,GAAU5/F,YAAYi9E,GAC/CzvF,EAAMA,KAAWoyG,GAAYpyG,EAAMyvF,EAAUx1F,QAAUm4G,EACvDnyG,EAAQuyG,EAAMoB,GAAWh6G,UAAU,EAAGoG,GAClC2xD,IACAA,EAAOA,GAAAA,EACP3xD,EAAM2xD,EAAKxyD,cAAcoB,QAAQN,EAAMd,eACnCa,OACA2xD,EAAOA,EAAK/3D,UAAUoG,EAAMC,EAAMhG,QAClCy8B,EAAe07E,EAAWzgD,EAAK13D,OAC/BgG,GAAS0xD,GAET89B,GAAyC,KAA5B+iB,EAAMA,EAAMv4G,OAAS,IAClCu4G,EAAMroG,KAAK,KAGnBqoG,EAAMoB,GAAa3zG,EACnBgJ,EAAK6tF,UAAU0b,EAAMj5G,KAAKk2F,GAAa,KACnCr1F,IAAYya,KACZyhB,EAAMl8B,EAASg4G,EAAU17E,GA5B7Bi7B,IA+BJ1xD,MAAO,SAAUA,GACb,MAAIA,KAAUhH,EAMHoJ,KAAKy0F,aALZz0F,KAAKmsD,SAASvuD,MAAMA,GACpBoC,KAAKy0F,UAAU72F,GACfoC,KAAK21F,KAAO31F,KAAKy0F,YACjBz0F,KAAKgrG,SAAWhrG,KAAKy0F,YAHrBz0F,IAQRkkC,OAAQ,SAAUj8B,GAAV,GACAskC,GAAOtkC,EAAEskC,KACT3lC,EAAO5G,KACPjI,EAAU6O,EAAK7O,QACf0uB,EAAW7f,EAAKulD,SAASuvC,gBAAgB90F,EAAKulD,SAASwvC,gBAAgBpvD,GAG3E,OAFAtkC,GAAE9D,iBACFyC,EAAKg/F,SAAU,EACXh/F,EAAKoB,QAAQ,UACTye,SAAUA,EACV8lB,KAAMA,KAEV3lC,EAAK01E,QACL,IAEJ11E,EAAKokG,SAAWjzG,EAAQ+0C,MACxBlmC,EAAKi9B,QAAQ0I,GAAM2tB,KAAK,WACpBtzD,EAAKoxE,QACL/jD,EAAMl8B,EAASA,EAAQ+0C,MAAMl1C,UAHjCgP,IAMJ4tF,WAAY99F,EAAEkK,KACdmwG,gBAAiB,WACb,GAAI5+F,GAAQnS,KAAKI,QAAQo4F,eAAiB,IACtCx4F,MAAKI,QAAQ0lE,SACb9lE,KAAKmsD,SAAS8hB,SAAS,GAE3BjuE,KAAKmsD,SAAS53B,MAAMpiB,IAExBkhF,WAAY,WAAA,GAQJ18D,GAPA/vB,EAAO5G,KACP69E,EAAQj3E,EAAKi3E,MACbz9E,EAAUwG,EAAKxG,QACf5E,EAAOoL,EAAKge,WAAWwB,WACvBxuB,EAAS4D,EAAK5D,OACd45G,EAAe5qG,EAAKge,WAAW41B,OAAO5iD,OACtC65G,EAAW7qG,EAAK7O,QAAQ,KAAOya,GAEnC5L,GAAKksF,gBACLlsF,EAAKmsF,gBACLnsF,EAAKyuF,eAAez9F,GACpBgP,EAAK0uF,gBAAgBkc,KAAkB55G,GACvCgP,EAAKiyF,eACLhb,EAAMxnB,WACFz+D,GACIwI,EAAQu2F,SAAW8a,GACnB7qG,EAAK+vF,QAAQn7F,EAAK,IAGtBoL,EAAKkvF,QACLlvF,EAAKkvF,OAAQ,EACbn/D,EAAS/vB,EAAK8uF,gBAAkB,OAAS,QACrC9uF,EAAKovF,iBAAmByb,IACxB96E,EAAS,SAET/+B,IACAgP,EAAKmqG,kBACD3wG,EAAQ0lE,SACRl/D,EAAKi3E,MAAMh2E,OAAO,WAAYjB,EAAKkqG,wBAAwBvpG,IAAI,WAAYX,EAAKkqG,yBAGxFjzB,EAAMlnD,KACN/vB,EAAKovF,eAAiBp/F,GAEtBgQ,EAAK8qG,gBACL9qG,EAAK8qG,eAAelrD,QAExB5/C,EAAK6zF,YACL7zF,EAAKmyF,oBACLnyF,EAAKoB,QAAQ,cAEjBopG,MAAO,SAAUzwF,GACb3gB,KAAK2xG,QAAS,EACdhxF,EAASxY,KAAKnI,MACdA,KAAK2xG,QAAS,GAElBre,YAAa,WACT,GAAIme,GAAWzxG,KAAK4lG,SAAW5lG,KAAKjI,QAAQ,KAAOya,GAC/Ci/F,KAAazxG,KAAK2xG,QAClB3xG,KAAK4xG,aAAa5xG,KAAKmsD,SAASoqC,oBAAoB,KAG5Dqb,aAAc,SAAUnrF,GAAV,GACN2mE,GAAYptF,KAAKmxG,aACjB/7E,EAAO,EACP3O,KACA2O,EAAOp1B,KAAKw2F,MAAM/vE,IAET,OAAT2O,IACAA,EAAO,IAEPg4D,IACAh4D,EAAO66E,EAAmBh8E,EAAMj0B,KAAKjI,SAAS,GAAIiI,KAAKy0F,YAAar/D,EAAMg4D,EAAWptF,KAAK6xG,sBAE9F7xG,KAAK2wG,MAAQv7E,EACbp1B,KAAKy0F,UAAUr/D,GACfp1B,KAAKyyE,gBAET4+B,iBAAkB,WAEd,MADArxG,MAAKy0F,UAAUz0F,KAAKpC,QAAQ3G,MAAM+I,KAAKmxG,cAAcj6G,KAAK8I,KAAK6xG,sBACxD7xG,MAEXu+C,QAAS,WAAA,GACD33C,GAAO5G,KACPpC,EAAQgJ,EAAKyqG,mBAAmBzzG,QAChCoK,EAAUpK,IAAUq0F,EAAKzB,UAAU5pF,EAAK+uF,WAAa/3F,IACrD4xG,EAAexnG,IAAYpB,EAAK0wF,QAChCwa,EAAelrG,EAAKokG,WAAaptG,CACrCgJ,GAAK+uF,KAAO/3F,EACZgJ,EAAKokG,SAAWptG,GACZ4xG,GAAgBsC,IAChBlrG,EAAK7O,QAAQiQ,QAAQyxB,GAErBzxB,GACApB,EAAKoB,QAAQyxB,GAEjB7yB,EAAK2wF,QAAS,EACd3wF,EAAKoqG,0BAETvc,UAAW,SAAU72F,GACjB,GAAIgJ,GAAO5G,KAAMjI,EAAU6O,EAAK7O,QAAQ,EACxC,OAAI6F,KAAUhH,GAIVgH,EAAQ7F,EAAQ6F,MACZ7F,EAAQkG,UAAUC,QAAQ,kBACtBN,IAAUgJ,EAAKxG,QAAQmd,YAChB,GAKR3f,IAXP7F,EAAQ6F,MAAkB,OAAVA,EAAiB,GAAKA,EACtCgJ,EAAK6rE,eADL16E,IAcRkgF,SAAU,SAAUhwE,GAAV,GAsBMwe,GAiBJmf,EAtCJh/B,EAAO5G,KACPjB,EAAMkJ,EAAEmuB,QACR+1B,EAAWvlD,EAAKulD,SAChB3oD,EAAUoD,EAAKi3E,MAAMr6E,UACrBmI,EAAUwgD,EAAS53B,OAEvB,IADA3tB,EAAK0qG,MAAQvyG,EACTA,IAAQ4iB,EAAKU,KACT7e,GACAxD,KAAK+jC,MAAMp4B,EAAU,YAAc,cAEvC1D,EAAE9D,qBACC,IAAIpF,IAAQ4iB,EAAKQ,GAChB3e,GACAxD,KAAK+jC,MAAMp4B,EAAU,YAAc,aAEvC1D,EAAE9D,qBACC,IAAIpF,IAAQ4iB,EAAKK,OAASjjB,IAAQ4iB,EAAKI,IAAK,CAI/C,GAHIhjB,IAAQ4iB,EAAKK,OAASxe,GACtByE,EAAE9D,iBAEFX,GAAWmI,EAAS,CAEpB,GADI8a,EAAW0lC,EAASuvC,gBAAgBvvC,EAASwvC,gBAAgBhwF,IAC7D/E,EAAKoB,QAAQ,UACTye,SAAUA,EACV8lB,KAAM5gC,IAEV,MAEJ3L,MAAK6jC,QAAQl4B,GAEjB3L,KAAKg4E,YACEj5E,KAAQ4iB,EAAKM,KAChBze,GACAyE,EAAE9D,iBAENyC,EAAK01E,UACE11E,EAAKi3E,MAAMr6E,WAAczE,IAAQ4iB,EAAKe,UAAY3jB,IAAQ4iB,EAAKc,OAKtE7b,EAAK8pG,WAJLzoG,EAAE9D,iBACEyhC,EAAY7mC,IAAQ4iB,EAAKe,SAAW,KACxCypC,EAAS2vC,WAAWl2D,EAAYumB,EAASlzC,kBAKjDw3F,UAAW,WACPzwG,KAAKgrG,SAAWhrG,KAAKjI,QAAQ+0C,MAC7B9sC,KAAKs3F,SAAU,GAEnBvzD,MAAO,SAAUpN,GACb32B,KAAKmsD,SAASx1B,KACV32B,KAAKI,QAAQu2F,SACb32F,KAAK22F,QAAQ32F,KAAKmsD,SAAS53B,UAGnCkmE,UAAW,WACP,GAAI7zF,GAAO5G,IACX4qB,cAAahkB,EAAK8zF,OAClB9zF,EAAKmrG,SAASjxG,OACd8F,EAAK7O,QAAQmL,KAAK,aAAa,GAC/B0D,EAAK8zF,MAAQ,KACb9zF,EAAK0tF,cAETsG,UAAW,WACP,GAAIh0F,GAAO5G,IACP4G,GAAK8zF,QAGT9zF,EAAK8zF,MAAQhxE,WAAW,WACpB9iB,EAAK7O,QAAQmL,KAAK,aAAa,GAC/B0D,EAAKmrG,SAAS/3G,OACd4M,EAAKwtF,cACN,OAEP3hB,aAAc,SAAUz4E,GACpB,IAAIo2G,EAAJ,CAGA,GAAiFxyG,GAA7EgJ,EAAO5G,KAAMjI,EAAU6O,EAAK7O,QAASwlB,EAAc3W,EAAKxG,QAAQmd,WACpE,IAAIA,EAAa,CAYb,GAXA3f,EAAQ7F,EAAQ+0C,MACZ9yC,IAASpD,IACToD,GAAQ4D,GAEP5D,IAEGujB,EADA3f,IAAU2f,EACI3f,EAEA,IAGlBA,IAAUgJ,EAAK+uF,OAAS37F,EACxB,MAEJjC,GAAQqJ,YAAY,aAAcpH,GAAM8yC,IAAIvvB,GACvCA,GAAexlB,EAAQ,KAAOwF,SAASiV,eACxCyhB,EAAMl8B,EAAQ,GAAI,EAAG,MAIjCo5G,WAAY,WACR,GAAI/jB,GAAYptF,KAAKI,QAAQgtF,SAC7B,OAAIA,aAAqBtxF,OACVC,OAAOqxF,EAAUl2F,KAAK,KAAM,MAEpCk2F,GAEXykB,kBAAmB,WACf,GAAIzkB,GAAYptF,KAAKI,QAAQgtF,SAC7B,OAAIA,aAAqBtxF,OACdsxF,EAAU,GAEdA,GAEX2I,YAAa,WACT,MAAO/1F,MAAKjI,QAAQ+0C,OAExB4jE,QAAS,WACL,GAAI9pG,GAAO5G,IACX4qB,cAAahkB,EAAKovF,gBAClBpvF,EAAKovF,eAAiBtsE,WAAW,WACzB9iB,EAAK+pG,QAAU/pG,EAAK6tF,cACpB7tF,EAAK+pG,MAAQ/pG,EAAK6tF,YAClB7tF,EAAKolB,WAEVplB,EAAKxG,QAAQwzB,QAEpBiQ,QAAS,SAAU4jD,GACf,GAAI7gF,GAAO5G,IAEX,OADA4G,GAAKg/F,SAAU,EACRh/F,EAAKulD,SAASr3B,OAAO2yD,GAAWvtB,KAAK,WACxCtzD,EAAKg/F,SAAU,KAGvB2K,QAAS,WACLvwG,KAAK+xG,SAAWr7G,EAAE,iEAAiEorE,YAAY9hE,KAAKjI,UAExGy4G,aAAc,WACVxwG,KAAKq0F,OAAS39F,EAAE,wFAAwFwM,MACpG6gB,KAAQ,SACR28D,cAEA1gF,KAAKI,QAAQ6wG,aACbjxG,KAAKq0F,OAAOvyB,YAAY9hE,KAAKjI,UAGrCihG,aAAc,SAAU/wF,GACpBvR,EAAEuR,EAAE22B,eAAex9B,YAAYkwF,EAAkB,eAAXrpF,EAAE/I,OAE5C8xG,uBAAwB,WAChBhxG,KAAKpC,QACLoC,KAAKs0F,aAELt0F,KAAKo0F,cAGbua,SAAU,WACN,GAAkEt1G,GAA9DuN,EAAO5G,KAAMjI,EAAU6O,EAAK7O,QAASi6G,EAAaj6G,EAAQ,EAC9DsB,GAAUtB,EAAQ6B,SACbP,EAAQU,GAAG,mBACZV,EAAUtB,EAAQe,KAAK,YAAYc,UAEvCP,EAAQ6J,KAAK,eACb7J,EAAQ6J,KAAK,OAAQ,gBACrB7J,EAAQ,GAAGS,MAAM6d,QAAUq6F,EAAWl4G,MAAM6d,QAC5C5f,EAAQE,KACJgB,MAAO,OACPC,OAAQ84G,EAAWl4G,MAAMZ,SAE7B0N,EAAKosF,SAAWpsF,EAAK7O,QACrB6O,EAAKvN,QAAUA,EAAQiB,SAAS,oCAAoCA,SAAS03G,EAAW/zG,aAGhGojB,GAAG8G,OAAOmoF,IACZ35G,OAAOuB,MAAM2sB,QACRluB,OAAOuB,OACE,kBAAVzB,SAAwBA,OAAOgiC,IAAMhiC,OAAS,SAAUiiC,EAAIC,EAAIC,IACrEA,GAAMD,OAEV,SAAUniC,EAAGC,QACVA,OAAO,sBACH,aACA,yBACDD,IACL,WA0/BE,MAp+BC,UAAUE,EAAGE,GAy8BV,QAASq7G,GAAOhxG,EAAUooC,EAAQzrC,GAE9B,IADA,GAA4CmgB,GAAxCpgB,EAAM,EAAGwL,EAAYkgC,EAAOzxC,OAAS,EAClC+F,EAAMwL,IAAaxL,EACtBogB,EAAQsrB,EAAO1rC,GACTogB,IAAS9c,KACXA,EAAS8c,OAEb9c,EAAWA,EAAS8c,EAExB9c,GAASooC,EAAOlgC,IAAcvL,EAElC,QAASs0G,GAAe//F,EAAOva,GAI3B,MAHIua,IAASva,IACTua,GAASva,GAENua,EAEX,QAASggG,GAAc7iD,EAAM8iD,GACzB,IAAK,GAAIz0G,GAAM,EAAGA,EAAM2xD,EAAK13D,OAAQ+F,IACjC,GAAI2xD,EAAKj4D,OAAOsG,KAASy0G,EACrB,OAAO,CAGf,QAAO,EAh+Bd,GACOl6G,GAAQvB,OAAOuB,MAAOmpB,EAAKnpB,EAAMmpB,GAAI4wE,EAAO5wE,EAAG4wE,KAAMpqC,EAASxmC,EAAGwmC,OAAQ1vD,EAAUD,EAAMC,QAASqa,EAAgBta,EAAMqa,eAAgB0+B,EAAmB/4C,EAAMsD,KAAKy1C,iBAAkBtvB,EAAOzpB,EAAMypB,KAAM1f,EAAK,qBAAsBw1E,EAAW,WAAYsyB,EAAW,WAAYtwE,EAAS,SAAU43D,EAAU,kBAAmB0c,EAAU,kBAAmBnE,EAAgB,mBAAoB9E,EAAgB,gBAAiBkJ,EAAc,aAAe/rG,EAAK,cAAgBA,EAAIijB,EAAW,WAAYmtF,EAAe,SAAUC,EAAe,SAAUC,EAA2B,mMAAoMvsG,EAAQtP,EAAEsP,MAC9wBi0E,EAAepyB,EAAOnnD,QACtBC,KAAM,SAAU5I,EAASqI,GAAnB,GAGE87F,GAAa9mE,EAAM9xB,EAFnBsD,EAAO5G,KACPmS,EAAQ/R,GAAWA,EAAQ+R,KAE/BvL,GAAK3E,GAAKA,EACV7B,EAAU1J,EAAEqP,QAAQ3F,IAAawkB,WAAYxkB,GAAYA,EACzDynD,EAAO5jD,GAAGtD,KAAKwH,KAAKvB,EAAM7O,EAASqI,GACnCA,EAAUwG,EAAKxG,QACfrI,EAAU6O,EAAK7O,QAAQ2N,GAAG,QAAUzD,EAAI+D,EAAMY,EAAK4rG,cAAe5rG,IAClEA,EAAK6rG,mBAAqB/7G,EAAEsP,MAAMY,EAAK8rG,YAAa9rG,GACpDA,EAAKs1F,YAAcxlG,IACnBkQ,EAAK+rG,eACL/rG,EAAKgsG,iBACLhsG,EAAKg+C,SACLh+C,EAAK+pG,MAAQ,GACb/pG,EAAKisG,MAAQ,GACbjsG,EAAK+nG,WACL/nG,EAAKqe,YACLre,EAAKvN,QAAQmC,KAAK0pB,EAAUte,EAAKvN,QAAQ6J,KAAKgiB,IAC9Cte,EAAKksG,QACLlsG,EAAKkyF,SACLlyF,EAAKmsG,UACLnsG,EAAK49C,cACL59C,EAAKgvF,cACLhvF,EAAKosG,gBACLpsG,EAAK8vF,QACL9vF,EAAK4wF,UACL5wF,EAAKywF,UAAYzwF,EAAKwkD,iBAClBj5C,IAAUvb,IACVwJ,EAAQ+R,MAAQA,GAEpBvL,EAAKqzF,cAAgB75F,EAAQ+R,MAC7BvL,EAAKkzF,mBAAmBlzF,EAAKxG,SAC7BwG,EAAKgtF,YACLhtF,EAAK41F,WACDp8F,EAAQ4oD,SACRpiD,EAAKge,WAAWs8B,QACTt6C,EAAKwkD,qBACZh2B,EAAOh1B,EAAQg1B,MAAQ,GAClBA,IACD8mE,EAAc97F,EAAQ87F,YAClBA,GAAiC,IAAlB97F,EAAQ+R,MACvBijB,EAAO8mE,EACAt1F,EAAKsrF,YACZ98D,EAAOr9B,EAAQ4C,SAAS,aAAay6B,SAG7CxuB,EAAKqsG,cAAc79E,IAEvB9xB,EAAW5M,EAAEkQ,EAAK7O,SAAS4L,QAAQ,YAAY5J,GAAG,aAC9CuJ,GACAsD,EAAK6Y,QAAO,GAEhB7Y,EAAKulD,SAAS/kD,KAAK,QAAS,SAAUa,GAClCA,EAAE9D,mBAENjM,EAAM0uB,OAAOhgB,IAEjBxG,SACI8O,KAAM,eACNkQ,SAAS,EACT4pC,UAAU,EACV72C,MAAO,EACPijB,KAAM,KACNx3B,MAAO,KACPg2B,MAAO,IACP16B,OAAQ,IACR8yD,cAAe,GACfhE,eAAgB,GAChBk0C,YAAa,GACbhwC,YAAa,GACbixC,iBAAkB,GAClB7gE,YAAY,EACZ8/C,aACAv4E,OAAQ,OACRoyF,UAAW,EACXvB,kBAAkB,EAClB5uB,SAAS,EACTrjE,SAAU,KACVywG,cAAe,KACfC,oBAAqB,KACrB1f,cAAe,UACfC,mBAAoB,WAExBhsF,QACI,OACA,QACA+xB,EACA,SACA,YACA,cACA,YACA,UACA,OAEJpU,WAAY,SAAUjlB,GAClBynD,EAAO5jD,GAAGohB,WAAWld,KAAKnI,KAAMI,GAChCJ,KAAKmsD,SAAS9mC,WAAWrlB,KAAKkzF,aAAa9yF,IAC3CJ,KAAK2yG,eACL3yG,KAAK4yG,iBACL5yG,KAAKyyF,aACLzyF,KAAKgzG,gBACLhzG,KAAKw3F,UACLx3F,KAAK02F,SACA12F,KAAKpC,SAAWoC,KAAKozG,kBACtBpzG,KAAK80B,OAAO,IAGpBhP,QAAS,WACL,GAAIlf,GAAO5G,IACX6nD,GAAO5jD,GAAG6hB,QAAQ3d,KAAKvB,GACvBA,EAAKvN,QAAQuwB,IAAI3nB,GACjB2E,EAAK7O,QAAQ6xB,IAAI3nB,GACjB2E,EAAK0oG,cAAc1lF,IAAI3nB,GACvB2E,EAAKysG,OAAOzpF,MACZhjB,EAAKysG,OAAS,KACdzsG,EAAK+zF,WAAa,KAClB/zF,EAAKs1F,YAAYtyE,OAErByyD,KAAM,WACF,GAAIz1E,GAAO5G,IACP4G,GAAKi3E,MAAMr6E,YAGVoD,EAAKulD,SAASC,SAAWxlD,EAAKsvF,SAAWoc,EAenC1rG,EAAK8uF,kBACZ9uF,EAAKi3E,MAAMt2E,IAAI,WAAYX,EAAK6rG,oBAChC7rG,EAAKi3E,MAAMxB,OACXz1E,EAAK0sG,qBACL1sG,EAAK0xF,eAlBL1xF,EAAKkvF,OAAQ,EACblvF,EAAKsvF,OAAS,SACVtvF,EAAKstF,cACLttF,EAAKstF,YAAYpnD,IAAI,IACrBlmC,EAAK+pG,MAAQ,IAEb/pG,EAAKstF,aAA0C,IAA3BttF,EAAKxG,QAAQ61F,WACjCrvF,EAAK4Q,UACL5Q,EAAKi3E,MAAMt2E,IAAI,WAAYX,EAAK6rG,oBAChC7rG,EAAKi3E,MAAMxB,OACXz1E,EAAK0sG,sBAEL1sG,EAAKguF,mBASjB8d,YAAa,WACT1yG,KAAK47F,cAAc57F,KAAKk0F,cAE5Bof,mBAAoB,WAAA,GAMZC,GACAt/E,EANAigE,EAAcl0F,KAAKk0F,YACnBsf,EAAkBxzG,KAAKo5F,QACtBlF,KAGDqf,EAAgBvzG,KAAKk0F,YAAY,KAAO1hF,IACxCyhB,EAAQ/7B,EAAM+7B,MAAMj0B,KAAKk0F,YAAY,IAAI,GAC7Cl0F,KAAKo5F,UAAW,EAChBlF,EAAYj8F,IAAI,UAAW,QAAQA,IAAI,QAAS+H,KAAK69E,MAAM9lF,QAAQE,IAAI,UAAUA,IAAI,UAAW,gBAC5Fs7G,IACArf,EAAY3/D,QACZr8B,EAAM+7B,MAAMigE,EAAY,GAAIjgE,IAEhCj0B,KAAKo5F,SAAWoa,IAEpB9d,cAAe,WACX,MAAO11F,MAAKozG,kBAAoBpzG,KAAKk0F,aAAersC,EAAO5jD,GAAGyxF,cAAcvtF,KAAKnI,OAErFmgB,OAAQ,SAAUA,GACdngB,KAAK+uF,QAAQ5uE,GAAQ,IAEzBxU,QAAS,SAAU87E,GACf,GAAI97E,EACJ,OAAI87E,KAAc7wF,GACd+U,EAAU3L,KAAKmsD,SAAS53B,SACnB5oB,GAAkC,IAAvB3L,KAAKorD,eAAuBprD,KAAKozG,iBACtCpzG,KAAKk8F,YAETvwF,IAEX3L,KAAK+3E,OAAO0P,GAAZznF,IAEJymB,SAAU,SAAUtU,GAAV,GACFvL,GAAO5G,KACPymB,EAAW,IACf,IAAc,OAAVtU,EACA,MAAOA,EAEX,IAAIA,IAAUvb,EACV6vB,EAAW7f,EAAKulD,SAASoqC,oBAAoB,OAC1C,CACH,GAAqB,gBAAVpkF,GAAoB,CAC3B,GAAIvL,EAAKxG,QAAQ0lE,QACb,MAAOl/D,GAAKge,WAAW83B,SAAShmD,EAAEyb,GAAO3W,KAAK,OAG9C2W,GADAA,EAAMtY,SAAS,yBAGPnD,EAAEkQ,EAAK4f,SAASrU,MAAMA,OAE3BvL,GAAKwsG,mBACZjhG,GAAS,EAEbsU,GAAW7f,EAAKge,WAAWwB,WAAWjU,GAK1C,MAHKsU,KACDA,EAAW7f,EAAK6sG,wBAEbhtF,GAEXjP,QAAS,WACLxX,KAAKmsD,SAAS30C,WAElB4d,KAAM,SAAUA,GAAV,GAEEs+E,GADA9sG,EAAO5G,KAEPs8B,EAAa11B,EAAKxG,QAAQk8B,UAE9B,OADAlH,GAAgB,OAATA,EAAgB,GAAKA,EACxBA,IAASx+B,EAgBFgQ,EAAKqsG,gBAfQ,gBAAT79E,IACPxuB,EAAKqsG,cAAc79E,GACnB,IAEJs+E,EAAcp3E,EAAalH,EAAKt4B,cAAgBs4B,EAChDxuB,EAAKi9B,QAAQ,SAAUroC,GAKnB,MAJAA,GAAOoL,EAAK4vF,MAAMh7F,GACd8gC,IACA9gC,GAAQA,EAAO,IAAIsB,eAEhBtB,IAASk4G,IACjBx5C,KAAK,WACJtzD,EAAKqsG,cAAcrsG,EAAK6f,YAAc2O,KAR1Cs+E,IAcR/e,aAAc,WACVj+F,EAAEsJ,KAAKk0F,aAAapnD,IAAI,IACxB+a,EAAO5jD,GAAG0wF,aAAaxsF,KAAKnI,OAEhCpC,MAAO,SAAUA,GAAV,GACCgJ,GAAO5G,KACPmsD,EAAWvlD,EAAKulD,SAChBvnC,EAAahe,EAAKge,UACtB,OAAIhnB,KAAUhH,GACVgH,EAAQgJ,EAAK6tF,aAAe7tF,EAAKulD,SAASvuD,QAAQ,GAC3CA,IAAUhH,GAAuB,OAAVgH,EAAiB,GAAKA,IAExDgJ,EAAKkzF,mBAAmBlzF,EAAKxG,QAASxC,IAClCA,GAAUgJ,EAAKwsG,mBACfxsG,EAAKqzF,cAAgB,MAEzBj6F,KAAKgI,QAAQ,OAASpK,MAAOA,IACzBgJ,EAAKi0F,UAAYj0F,EAAKxG,QAAQ8rD,aAAetlD,EAAKulD,SAASC,SACvDxlD,EAAK+sG,cACL/uF,EAAW/c,OAAO4xB,EAAQ7yB,EAAK+sG,cAEnC/sG,EAAK+sG,aAAe3tG,EAAM,WACtBY,EAAKhJ,MAAMA,IACZgJ,GACHge,EAAWrd,IAAIkyB,EAAQ7yB,EAAK+sG,cAC5B,IAEA/sG,EAAKutF,oBAAsBhoC,EAASC,SAAWD,EAASgzC,aACxDv4F,EAAK+tF,eAEL/tF,EAAKm1F,aAET5vC,EAASvuD,MAAMA,GAAOs8D,KAAK,WACvBtzD,EAAK+uF,KAAO/uF,EAAK6tF,YACjB7tF,EAAKywF,UAAYzwF,EAAKwkD,gBAP1B,KAUJgoD,eAAgB,WACZ,MAAOpzG,MAAKk8F,eAAiBl8F,KAAKk8F,YAAY,IAElDyW,aAAc,WAAA,GACN/rG,GAAO5G,KACPI,EAAUwG,EAAKxG,QACf87F,EAAc97F,EAAQ87F,YACtBz5F,EAAWrC,EAAQ+yG,mBACvB,OAAKjX,IAKAz5F,IACDA,EAAW,KAEPA,GADuB,gBAAhBy5F,GACK,OAEAhkG,EAAMuL,KAAKrD,EAAQ4rD,cAAe,QAElDvpD,GAAY,KAEQ,kBAAbA,KACPA,EAAWvK,EAAMuK,SAASA,IAE9BmE,EAAKusG,oBAAsB1wG,EACtBmE,EAAKwsG,mBACNxsG,EAAKs1F,YAAcxlG,EAAE,0CAA0CuxB,UAAUrhB,EAAK2pC,OAElF3pC,EAAKs1F,YAAYx5F,KAAKD,EAASy5F,IAActyE,MAAM5I,MAAMhb,EAAMY,EAAKs9B,OAAQt9B,IAAOlB,GAAGsoG,EAAapnG,EAAKoyF,cACxGpyF,EAAKke,QAAQ,UAAW,WACpB,OACIyB,SAAU3f,EAAKs1F,YACf1gG,OAASirB,SAAU7f,EAAK6sG,4BApBhC,IAJI7sG,EAAKs1F,YAAYtyE,MAAM1B,SACvBthB,EAAKs1F,YAAcxlG,IACnB,IA0BRk9G,iBAAkB,WACd,GAAI1X,GAAcl8F,KAAKI,QAAQ87F,WAC/B,OAA8B,gBAAhBA,GAA2BA,EAAcl8F,KAAKw2F,MAAM0F,IAEtEuX,qBAAsB,WAAA,GACd7sG,GAAO5G,KACPk8F,EAAct1F,EAAKxG,QAAQ87F,WAC/B,OAAIt1F,GAAKwsG,iBACE18G,EAAEiyC,cAAcuzD,GAAe,GAAIjrD,GAAiBirD,GAAet1F,EAAKitG,gBAAgBjtG,EAAKgtG,mBAAoB,IAErH;AAEXE,cAAe,SAAUt4G,GAAV,GAKPoC,GACAs+F,EACA6X,EANAntG,EAAO5G,IACN4G,GAAKsrF,YAGNt0F,EAAQgJ,EAAKulD,SAASvuD,QAAQ,GAC9Bs+F,EAAct1F,EAAK6sG,uBACnBM,EAAmB7X,GAAet1F,EAAK6vF,OAAOyF,GAC9Ct+F,IAAUhH,GAAuB,OAAVgH,IACvBA,EAAQ,IAERs+F,IACI6X,IAAqBn9G,GAAkC,OAArBm9G,IAClCA,EAAmB,IAEvB7X,EAAc,kBAAoB6X,EAAmB,KAAOntG,EAAK4vF,MAAM0F,GAAe,aAE1Ft1F,EAAKq1F,SAASzgG,EAAM0gG,EAAat+F,GAC7BA,IAAUq0F,EAAKzB,UAAU5pF,EAAK6tF,kBAAoB72F,MAClDgJ,EAAK4zF,cAAgB,KACrB5zF,EAAK0zF,QAAQ18F,MAGrBy1F,WAAY,WAAA,GAKJ5sE,GAJA7f,EAAO5G,KACPg0G,EAAeptG,EAAKqzF,cACpB8E,EAAWn4F,EAAKsvF,SAAWmc,EAC3B72G,EAAOoL,EAAKge,WAAWwB,UAE3Bxf,GAAKqtG,cAAe,EACpBrtG,EAAKksF,gBACLlsF,EAAKmsF,gBACLnsF,EAAKyuF,eAAe75F,EAAK5D,QACzBgP,EAAKiyF,cAAa,GAClBjyF,EAAKi3E,MAAMxnB,WACXzvD,EAAKktG,cAAct4G,GACnBoL,EAAKmyF,oBACAgG,IACGn4F,EAAKkvF,OACLlvF,EAAKuZ,OAAOvZ,EAAK8uF,iBAErB9uF,EAAKkvF,OAAQ,EACRlvF,EAAK60F,SACFjgG,EAAK5D,SACAgP,EAAKulD,SAASvuD,QAAQhG,QAAUo8G,MAAsC,OAAjBA,GACtDptG,EAAKkuB,OAAOk/E,GAEhBptG,EAAKqzF,cAAgB,KACrBxzE,EAAW7f,EAAKulD,SAASoqC,oBAAoB,GACzC9vE,GAAY7f,EAAKwuB,SAAWxuB,EAAK4vF,MAAM/vE,IACvC7f,EAAKgrG,aAAanrF,IAEf7f,EAAKqsG,kBAAoBrsG,EAAKgtG,qBACrChtG,EAAKulD,SAASvuD,MAAM,IACpBgJ,EAAKgrG,aAAa,MAClBhrG,EAAKywF,UAAYzwF,EAAKwkD,iBAIlCxkD,EAAK6zF,YACL7zF,EAAKoB,QAAQ,cAEjBsrF,YAAa,WACTtzF,KAAK4xG,aAAa5xG,KAAKmsD,SAASoqC,oBAAoB,KAChDv2F,KAAKi0G,cAAgBj0G,KAAK21F,MAAQ31F,KAAKq3F,kBACvCr3F,KAAKq3F,UAAYr3F,KAAKorD,gBAG9B8oD,aAAc,WACVl0G,KAAK0wG,WAET8B,cAAe,WACXxyG,KAAK3G,QAAQk7B,SAEjB4/E,gBAAiB,WACbn0G,KAAKsvG,cAAch1G,SAAS+2F,GAC5BrxF,KAAKo5F,UAAW,GAEpBgb,iBAAkB,WAAA,GACVxtG,GAAO5G,KACPq0G,EAAW19G,OAAO29G,OAAS39G,OAAO2I,GACjCsH,GAAKwyF,WACNxuE,aAAahkB,EAAKovF,gBACd79F,EAAQgf,SAASqD,KAAO65F,EACxBztG,EAAK23C,UAEL33C,EAAKoxE,QAETpxE,EAAK0oG,cAAc3kD,YAAY0mC,GAC/BzqF,EAAKwyF,UAAW,EAChBxyF,EAAKkvF,OAAQ,EACblvF,EAAK7O,QAAQS,SAGrB+7G,kBAAmB,WACfv0G,KAAKo5F,WAAap5F,KAAKk0F,aAE3BsgB,cAAe,SAAUvsG,GACrBA,EAAE9D,iBACFnE,KAAK69E,MAAMh2E,OAAO,WAAY7H,KAAKyyG,oBACnCzyG,KAAKgzF,SAAWhzF,KAAK3G,QACrB2G,KAAK+uF,WAETkE,UAAW,SAAU7yF,GAAV,GACHwG,GAAO5G,KACPjI,EAAU6O,EAAK7O,QACfwnB,EAAUnf,EAAQmf,QAClBqrC,EAAWxqD,EAAQwqD,SACnBvxD,EAAUuN,EAAKvN,QAAQiI,IAAIsF,EAAKstF,aAAatqE,IAAI3nB,GACjDwyG,EAAkB7tG,EAAK0oG,cAAc1lF,IAAIokF,EACxCpjD,IAAarrC,EAQPA,GACPlmB,EAAQ+rB,WAAWF,GACnBuvF,EAAgBn6G,SAASsvG,GAAej/C,YAAYojD,KAEpD0G,EAAgBn6G,SAASyzG,GAASpjD,YAAYi/C,GAC9CvwG,EAAQqM,GAAG,UAAYzD,EAAI+D,EAAMY,EAAKutG,gBAAiBvtG,IAAOlB,GAAG,WAAazD,EAAI+D,EAAMY,EAAKwtG,iBAAkBxtG,MAZ/G7O,EAAQqtB,WAAWqyD,GAAUryD,WAAW2kF,GACxC0K,EAAgBn6G,SAASyzG,GAASpjD,YAAYi/C,GAAelkG,GAAGsoG,EAAapnG,EAAKoyF,cAClF3/F,EAAQ6J,KAAKgiB,EAAU7rB,EAAQmC,KAAK0pB,IAAWhiB,KAAK4hG,GAAe,GAAOp/F,GAAG,UAAYzD,EAAI+D,EAAMY,EAAKqxE,SAAUrxE,IAAOlB,GAAG,UAAYzD,EAAI+D,EAAMY,EAAKutG,gBAAiBvtG,IAAOlB,GAAG,WAAazD,EAAI+D,EAAMY,EAAKwtG,iBAAkBxtG,IAAOlB,GAAG,YAAczD,EAAI+D,EAAMY,EAAK2tG,kBAAmB3tG,IAAOlB,GAAG,QAAUzD,EAAI+D,EAAMY,EAAKstG,aAActtG,IAC3UA,EAAKvN,QAAQqM,GAAG,QAAUzD,EAAI+D,EAAMY,EAAK4tG,cAAe5tG,IACnDA,EAAKstF,aACN76F,EAAQqM,GAAG,WAAazD,EAAI+D,EAAMY,EAAK6pG,UAAW7pG,KAS1D7O,EAAQmL,KAAKu0E,EAAUl4D,GAASrc,KAAK6mG,EAAUn/C,GAC/CvxD,EAAQ6J,KAAK4hG,EAAevlF,IAEhC04D,SAAU,SAAUhwE,GAAV,GAIFsrG,GACA9E,EA+BI9iG,EAnCJ/E,EAAO5G,KACPjB,EAAMkJ,EAAEmuB,QACR62D,EAAShlF,EAAEglF,OAGXynB,EAAiB9tG,EAAKi3E,MAAMr6E,SAWhC,IAVIoD,EAAKstF,cACLqf,EAAgB3sG,EAAKstF,YAAY,KAAO1hF,KAExCzT,IAAQ4iB,EAAKO,MACbnjB,EAAM4iB,EAAKQ,GACXssF,GAAU,GACH1vG,IAAQ4iB,EAAKS,QACpBrjB,EAAM4iB,EAAKU,KACXosF,GAAU,IAEVA,IAAW8E,EAAf,CAUA,GAPAtrG,EAAEmuB,QAAUr3B,GACRkuF,GAAUluF,IAAQ4iB,EAAKQ,IAAMpjB,IAAQ4iB,EAAKM,MAC1Crb,EAAKg1F,cAAch1F,EAAKvN,SAExBuN,EAAKsvF,SAAWmc,GAAgBtzG,IAAQ4iB,EAAKM,KAC7Crb,EAAK+tF,eAEL51F,IAAQ4iB,EAAKK,OAASpb,EAAKovF,gBAAkBpvF,EAAKstF,aAAewgB,EAEjE,MADAzsG,GAAE9D,iBACF,CAGJ,IADAsqG,EAAU7nG,EAAKm9B,MAAM97B,IACjBwmG,EAAJ,CAGA,KAAKiG,IAAmB9tG,EAAKstF,eACrBvoF,EAAU/E,EAAKmxE,SACfh5E,IAAQ4iB,EAAKY,MACbksF,GAAU,EACV7nG,EAAKm0F,cACEh8F,IAAQ4iB,EAAKW,MACpBmsF,GAAU,EACV7nG,EAAKq0F,aAELwT,GAAS,CACT,GAAI7nG,EAAKoB,QAAQ,UACTye,SAAU7f,EAAK+tG,oBAAoB/tG,EAAKmxE,UACxCxrC,KAAM3lC,EAAKmxE,WAGf,MADAnxE,GAAKmxE,OAAOpsE,GACZ,CAEJ/E,GAAKi9B,QAAQj9B,EAAKmxE,UAAU,GAAM7d,KAAK,WAC9Bw6C,GACD9tG,EAAKoxE,UAGb/vE,EAAE9D,iBAGL8oF,GAAWwhB,IAAW7nG,EAAKstF,aAC5BttF,EAAK8pG,aAGbkE,WAAY,SAAUx/E,EAAMk6B,GACxB,GAAIhzB,GAAat8B,KAAKI,QAAQk8B,UAC9B,OAAIlH,KAASx+B,GAAsB,OAATw+B,IAG1BA,GAAc,GACVkH,IACAlH,EAAOA,EAAKt4B,eAEc,IAAvBs4B,EAAKl3B,QAAQoxD,KAExBulD,aAAc,SAAUr5G,EAAMs5G,GAC1B,GAAIC,GAAiB/0G,KAAKyzG,sBAI1B,OAHIsB,KACAv5G,GAAQu5G,GAAgB7+F,OAAO1a,IAE5BA,EAAKgL,MAAMsuG,GAAY5+F,OAAO1a,EAAKgL,MAAM,EAAGsuG,KAEvDE,YAAa,WAAA,GAMLC,GACA7/E,EASKz3B,EAfLiJ,EAAO5G,KACPxE,EAAOoL,EAAKge,WAAWwB,WACvB8uF,EAAa15G,EAAK5D,QAAUgP,EAAKwsG,iBAAmB,EAAI,GACxD+B,EAAWhD,EAAcvrG,EAAKisG,MAAOjsG,EAAK0qG,OAC1C9uD,EAAa57C,EAAKwkD,aAWtB,KARI5I,OACAA,EAAa,GAEbA,GAAc2yD,EAAW,EAAI,EAC7B3yD,EAAa0vD,EAAe1vD,EAAY0yD,IAE5C15G,EAAOA,EAAKsO,OAAStO,EAAKsO,SAAWtO,EAAKgL,QAC1ChL,EAAOoL,EAAKiuG,aAAar5G,EAAMgnD,GACtB7kD,EAAM,EAAGA,EAAMu3G,IACpB9/E,EAAOxuB,EAAK4vF,MAAMh7F,EAAKmC,KACnBw3G,IAAYvuG,EAAKguG,WAAWx/E,EAAMxuB,EAAK0qG,UAEhC1qG,EAAKguG,WAAWx/E,EAAMxuB,EAAKisG,OAJNl1G,KAQhCA,IAAQu3G,IACRD,EAAiBruG,EAAKmxE,SACtBnxE,EAAKi9B,QAAQquE,EAAe1vD,EAAa7kD,EAAKu3G,IAAah7C,KAAK,WAC5D,GAAIA,GAAO,WACFtzD,EAAKi3E,MAAMr6E,WACZoD,EAAK23C,UAGT33C,GAAKoB,QAAQ,UACTye,SAAU7f,EAAK+tG,oBAAoB/tG,EAAKmxE,UACxCxrC,KAAM3lC,EAAKmxE,WAEfnxE,EAAKi9B,QAAQoxE,GAAgB/6C,KAAKA,GAElCA,QAKhBu2C,UAAW,SAAUxoG,GAAV,GAKHmqG,GAJAxrG,EAAO5G,IACK,KAAZiI,EAAE67B,OAAe77B,EAAEmuB,UAAYl+B,EAAMypB,KAAKK,QAG1CowF,EAAYnoG,OAAOmrG,aAAantG,EAAEotG,UAAYptG,EAAEmuB,SAChDxvB,EAAKxG,QAAQk8B,aACb81E,EAAYA,EAAUt1G,eAER,MAAds1G,GACAnqG,EAAE9D,iBAENyC,EAAKisG,OAAST,EACdxrG,EAAK0qG,MAAQc,EACbxrG,EAAK8pG,YAET4E,WAAY,WACR,GAAIz3B,GAAQ79E,KAAK69E,KACjBA,GAAMxkF,QAAUnB,EAAMY,KAAK+kF,EAAM9lF,SAC7B8lF,EAAM9lF,QAAQkgB,QAAQ,YAAY,KAClC4lE,EAAMxkF,QAAQiB,SAAS,sBACvB0F,KAAK3G,QAAQiB,SAAS,eAG9Bw+F,OAAQ,WACJjxC,EAAO5jD,GAAG60F,OAAO3wF,KAAKnI,MACtBA,KAAK69E,MAAMt2E,IAAI,OAAQvB,EAAMhG,KAAKs1G,WAAYt1G,QAElD20G,oBAAqB,SAAU58G,GAC3B,MAAKA,IAAYA,EAAQ,GAGrBA,EAAQ,KAAOiI,KAAKk8F,YAAY,GACzBl8F,KAAKyzG,uBAETzzG,KAAKmsD,SAASuvC,gBAAgB17F,KAAKmsD,SAASwvC,gBAAgB5jG,IALxD,MAOfmsC,OAAQ,SAAUj8B,GAAV,GACArB,GAAO5G,KACPusC,EAAOtkC,EAAEskC,MAAQ71C,EAAEuR,EAAE22B,cAEzB,OADA32B,GAAE9D,iBACEyC,EAAKoB,QAAQ,UACTye,SAAU7f,EAAK+tG,oBAAoBpoE,GACnCA,KAAMA,KAEV3lC,EAAK01E,QACL,IAEJ11E,EAAK4yF,gBAAiB,EACtB5yF,EAAKi9B,QAAQ0I,GAAM2tB,KAAK,WACpBtzD,EAAKg1F,cAAch1F,EAAKvN,SACxBuN,EAAKoxE,UAHTpxE,IAMJg1F,cAAe,SAAU7jG,GAAV,GACPqvG,GAAS50F,IACTnZ,EAAU2G,KAAK3G,QACf66F,EAAcl0F,KAAKk0F,YACnBqhB,EAAiBx9G,IAAYm8F,EAAc76F,EAAU66F,EACrDgF,EAAe/gG,EAAQgf,WAAahf,EAAQggB,OAAShgB,EAAQghG,YAAchhG,EAAQoH,SACnF20F,IAAeA,EAAY,KAAOn8F,EAAQ,IAAMmhG,GAGhDhF,GAAeqhB,EAAe,KAAOnO,IACrCpnG,KAAKo5F,UAAW,EAChBp5F,KAAKgzF,SAAWj7F,EAAQw8B,UAGhC4hE,cAAe,SAAU7mC,GAAV,GAIP1oD,GACA01B,CAJCgzB,KAGD1oD,EAAO5G,KACPs8B,EAAa11B,EAAKxG,QAAQk8B,WAC1BA,IACAgzB,EAAOA,EAAKxyD,eAEhB8J,EAAKi9B,QAAQ,SAAUpd,GACnB,MAAO7f,GAAKguG,WAAWhuG,EAAK4vF,MAAM/vE,GAAW6oC,OAGrDymC,YAAa,WACT,MAAO/1F,MAAKo1B,QAEhBs7E,QAAS,WAAA,GACD9pG,GAAO5G,KACP4kB,EAAahe,EAAKge,UAEtB,IADAgG,aAAahkB,EAAKovF,gBACdpvF,EAAKutF,mBACLvtF,EAAKovF,eAAiBtsE,WAAW,WAC7B,GAAI9rB,GAAQgJ,EAAKstF,YAAYpnD,KACzBlmC,GAAK+pG,QAAU/yG,IACfgJ,EAAK+pG,MAAQ/yG,EACbgJ,EAAKolB,OAAOpuB,GACZgJ,EAAK0sG,sBAET1sG,EAAKovF,eAAiB,MACvBpvF,EAAKxG,QAAQwzB,WACb,CAIH,GAHAhtB,EAAKovF,eAAiBtsE,WAAW,WAC7B9iB,EAAKisG,MAAQ,IACdjsG,EAAKxG,QAAQwzB,QACXhtB,EAAKulD,SAASC,QAIf,MAHAxnC,GAAWs8B,QAAQgZ,KAAK,WACpBtzD,EAAKouG,gBAET,CAEJpuG,GAAKouG,gBAGbtW,KAAM,SAAUjX,GAAV,GACEjsF,GAAMiiD,EAAO9/C,EACbzB,EAAkC,kBAAdurF,GACpB+tB,EAAmBt5G,EAA4BxF,IAAfA,EAAE+wF,EAUtC,IATIznF,KAAKozG,mBACoB,gBAAd3rB,GACHA,OACAA,GAAa,GAEV+tB,EAAgB37G,SAAS,wBAChC4tF,OAGJvrF,EAAY,CAEZ,IADAV,EAAOwE,KAAK4kB,WAAWwB,WAClBzoB,EAAM,EAAGA,EAAMnC,EAAK5D,OAAQ+F,IAC7B,GAAI8pF,EAAUjsF,EAAKmC,IAAO,CACtB8pF,EAAY9pF,EACZ8/C,GAAQ,CACR,OAGHA,IACDgqC,MAGR,MAAOA,IAEXsT,WAAY,WACJ/6F,KAAKozG,iBACLpzG,KAAK+3E,OAAO/3E,KAAKk8F,aAEjBl8F,KAAKmsD,SAAS6uC,cAGtBC,UAAW,WACPj7F,KAAKy1G,oBACLz1G,KAAKmsD,SAAS+uC,aAElBC,UAAW,WACHn7F,KAAKk8F,YAAYriG,SAAS,oBAC1BmG,KAAKy1G,oBACLz1G,KAAKmsD,SAAS6uC,cAEdh7F,KAAKmsD,SAASivC,aAGtBC,UAAW,WACHr7F,KAAKk8F,YAAYriG,SAAS,qBAG9BmG,KAAKmsD,SAASmvC,YACTt7F,KAAKmsD,SAAS53B,SACfv0B,KAAK+3E,OAAO/3E,KAAKk8F,eAGzB5D,WAAY,WAAA,GACJl4F,GAAUJ,KAAKI,QACf+rD,EAAWnsD,KAAKmsD,SAChBupD,EAAcvpD,EAAS53B,QACvBpiB,EAAQg6C,EAASr3B,QACrB3iB,GAAQA,EAAMA,EAAMva,OAAS,GACzBua,IAAUvb,GAAawJ,EAAQo4F,iBAAmBkd,IAClDvjG,EAAQ,GAERA,IAAUvb,EACVu1D,EAAS53B,MAAMpiB,IAEX/R,EAAQ87F,aAAiB97F,EAAQ0lE,SAA0C,aAA/B1lE,EAAQ0lE,QAAQ6vC,WAI5DxpD,EAASssC,cAAc,IAHvBz4F,KAAK+3E,OAAO/3E,KAAKk8F,aACjBl8F,KAAK6jC,QAAQ7jC,KAAKk8F,eAM9BuZ,kBAAmB,SAAUG,GACzB51G,KAAKk8F,YAAYvxC,YAAY,mBAAqBirD,GAAmB,KAAKxwF,WAAW,OAEzF2yD,OAAQ,SAAU0P,GAAV,GACAt7B,GAAWnsD,KAAKmsD,SAChB+vC,EAAcl8F,KAAKk8F,WACvB,OAAIzU,KAAc7wF,GACd6wF,EAAYt7B,EAAS53B,SAChBkzD,GAAayU,EAAYriG,SAAS,qBACnC4tF,EAAYyU,GAETzU,IAEXznF,KAAKy1G,oBACLhuB,EAAYznF,KAAK0+F,KAAKjX,GACtBt7B,EAAS53B,MAAMkzD,GACXA,SACAyU,EAAY5hG,SAAS,mBAAmB4I,KAAK,KAAMipD,EAASkxC,WAC5Dr9F,KAAKgzF,SAAS1xF,IAAItB,KAAKk0F,aAAa9uE,WAAW,yBAAyBliB,KAAK,wBAAyBipD,EAASkxC,YALnHr9F,IAQJ6jC,QAAS,SAAU4jD,EAAWouB,GAC1B,GAAIjvG,GAAO5G,IAEX,OADAynF,GAAY7gF,EAAK83F,KAAKjX,GACf7gF,EAAKulD,SAASr3B,OAAO2yD,GAAWvtB,KAAK,WACnC27C,GAAajvG,EAAKsvF,SAAWmc,IAC9BzrG,EAAKsvF,OAASoc,GAEd7qB,QACA7gF,EAAKgrG,aAAa,SAI9BA,aAAc,SAAUnrF,GAAV,GACN7f,GAAO5G,KACPk8F,EAAct1F,EAAKxG,QAAQ87F,YAC3Bv+F,EAAMiJ,EAAKulD,SAASr3B,SACpBl3B,EAAQ,GACRw3B,EAAO,EACXz3B,GAAMA,EAAIA,EAAI/F,OAAS,GACnB+F,IAAQ/G,IACR+G,MAEJqC,KAAKy1G,kBAAkB,qBACnBhvF,GAAyB,IAAbA,GACZ2O,EAAO3O,EACP7oB,EAAQgJ,EAAK6wF,WAAWhxE,GACpBy1E,IACAv+F,GAAO,IAEJu+F,IACPt1F,EAAKmxE,OAAOnxE,EAAKs1F,YAAY5hG,SAAS,qBACtC86B,EAAOxuB,EAAKgtG,mBAERh2G,EADuB,gBAAhBs+F,GACC,GAEAt1F,EAAK6vF,OAAOyF,GAExBv+F,EAAM,GAEViJ,EAAKwkD,cAAgBztD,EACP,OAAVC,IACAA,EAAQ,IAEZgJ,EAAKqsG,cAAc79E,GACnBxuB,EAAK6tF,UAAU72F,EAAOD,GACtBiJ,EAAKyyF,mBAET0Z,QAAS,WACL,GAAInsG,GAAO5G,KAAM69E,EAAQj3E,EAAKi3E,MAAO1mE,EAAWhf,EAAQgf,SAAUmiB,EAAOukD,EAAM9lF,QAAQ4L,QAAQ,YAAYolB,GAAG,EAC1GuQ,GAAK1hC,QAAUuf,IACf0mE,EAAMz9E,QAAQg8E,UAAUC,KAAKt8E,QAAUoX,EAASyC,SAAWzC,EAAS4C,MAAQ,SAAW5C,EAASqD,KAAOrD,EAASuC,GAAK,aAAemkE,EAAMz9E,QAAQg8E,UAAUC,KAAKt8E,UAGzKizG,cAAe,WACX,GAAI76B,EACAn4E,MAAKk0F,cACLl0F,KAAKk0F,YAAYtqE,IAAI3nB,GAAIrI,SAASsuB,SAClCloB,KAAKk0F,YAAc,MAEnBl0F,KAAKm0F,qBACLhc,EAAO,wCACPn4E,KAAKk0F,YAAcx9F,EAAE,8BAA8BwM,MAC/Cqa,YAAavd,KAAKjI,QAAQmL,KAAK,eAC/Bm3B,MAAOr6B,KAAKjI,QAAQmL,KAAK,SACzB6gB,KAAM,UACN8sF,iBAAiB,EACjB9B,iBAAiB,IAErB/uG,KAAKuwC,KAAKi9B,QAAQ92E,EAAE,kCAAkCotD,OAAO9jD,KAAKk0F,YAAY5yF,IAAI62E,OAG1F26B,MAAO,WACH,GAAoEv6B,GAAhE3xE,EAAO5G,KAAM3G,EAAUuN,EAAKvN,QAASy8G,EAAW,cACpDv9B,GAAOl/E,EAAQiuB,KAAKwuF,GACfv9B,EAAK,KACNl/E,EAAQyqD,OAAO,kPAAkPA,OAAOl9C,EAAK7O,SAC7QwgF,EAAOl/E,EAAQiuB,KAAKwuF,IAExBlvG,EAAK2xE,KAAOA,EACZ3xE,EAAK0oG,cAAgB54G,EAAE2C,EAAQ,GAAG4wC,YAClCrjC,EAAKysG,OAASh6G,EAAQiuB,KAAK,aAC3B1gB,EAAK+zF,WAAa/zF,EAAKysG,OAAO/rF,KAAK,YAEvCqnF,SAAU,WACN,GAAkEt1G,GAA9DuN,EAAO5G,KAAMjI,EAAU6O,EAAK7O,QAASi6G,EAAaj6G,EAAQ,EAC9DsB,GAAUtB,EAAQ6B,SACbP,EAAQU,GAAG,mBACZV,EAAUtB,EAAQe,KAAK,YAAYc,SACnCP,EAAQ,GAAGS,MAAM6d,QAAUq6F,EAAWl4G,MAAM6d,QAC5Cte,EAAQ,GAAGghC,MAAQ23E,EAAW33E,OAElCzzB,EAAKosF,SAAWpsF,EAAKvN,QAAUA,EAAQiB,SAAS,gCAAgCA,SAAS03G,EAAW/zG,WAAWhG,IAAI,UAAW,IAAIiL,MAC9H6yG,UAAWh+G,EAAQmL,KAAK,aACxB8yG,aAAc,KACdjyF,KAAM,UACN8sF,iBAAiB,EACjB9B,iBAAiB,IAErBh3G,EAAQ+I,OAAOskB,WAAW,cAE9B43E,gBAAiB,SAAUpjG,GACvBoG,KAAK80B,OAAOl7B,EAAOgE,QAAU,OAEjCg1G,eAAgB,WACZ,GAAIhsG,GAAO5G,KAAMyC,EAAWmE,EAAKxG,QAAQ8yG,aAOzC,IAHIzwG,EAHCA,EAGUvK,EAAMuK,SAASA,GAFf/L,EAAEsP,MAAM9N,EAAMuK,SAAS,uBAAyB6F,cAAc,IAAU1B,GAIvFA,EAAKssG,cAAgBzwG,EACjBmE,EAAKwsG,mBAAqBxsG,EAAKxG,QAAQ+yG,oBACvC,IACIvsG,EAAKssG,cAActsG,EAAK6sG,wBAC1B,MAAOxrG,GACL,KAAUa,OAAMypG,KAI5BU,cAAe,SAAU79E,GAAV,GAwBP6gF,GAvBAxvF,EAAW,KACXhkB,EAAWzC,KAAKkzG,cAChBgD,EAAkBl2G,KAAK4zG,mBACvBr7B,EAAOv4E,KAAKu4E,IAChB,IAAInjD,IAASx+B,EACT,MAAO2hF,GAAKnjD,MAEZ1+B,GAAEiyC,cAAcvT,IAASA,YAAgB6b,GACzCxqB,EAAW2O,EACJ8gF,GAAmBA,IAAoB9gF,IAC9C3O,EAAWzmB,KAAKI,QAAQ87F,aAEvBz1E,IACDA,EAAWzmB,KAAK6zG,gBAAgBz+E,EAAMp1B,KAAKy0F,cAE3Cz0F,KAAKozG,mBACD3sF,IAAayvF,GAAmBl2G,KAAKw2F,MAAM/vE,KAAcyvF,IACzDzzG,EAAWzC,KAAKmzG,oBACwB,gBAA7BnzG,MAAKI,QAAQ87F,aAA6Bl8F,KAAKI,QAAQ+yG,sBAC9D1sF,EAAWyvF,KAInBD,EAAc,WACd,OACI1vF,SAAUgyD,EAAK90D,MACfjoB,OAASirB,SAAUA,MAG3BzmB,KAAK8kB,QAAQ,UAAWmxF,EACxB,KACI19B,EAAK71E,KAAKD,EAASgkB,IACrB,MAAOxe,GACLswE,EAAK71E,KAAK,IAEd1C,KAAK8kB,QAAQ,UAAWmxF,IAE5B5pD,WAAY,SAAUzuD,EAAOw3B,GACpBx3B,GAAUw3B,IACXA,EAAOp1B,KAAK4zG,oBAEhB5zG,KAAKy0F,UAAU72F,GACfoC,KAAKizG,cAAc79E,GACnBp1B,KAAK21F,KAAO31F,KAAKy0F,YACjBz0F,KAAKq3F,UAAYr3F,KAAKorD,cACtBprD,KAAKmsD,SAASqzC,SAAS5hG,GACvBoC,KAAKi6F,cAAgB,KACrBj6F,KAAKi0G,cAAe,GAExBJ,gBAAiB,SAAUz+E,EAAMx3B,GAAhB,GACTouD,GAAgBhsD,KAAKI,QAAQ4rD,cAC7BvlC,IAQJ,OAPIulC,IACAimD,EAAOxrF,EAAUulC,EAAc/0D,MAAM,KAAMm+B,GAC3C68E,EAAOxrF,EAAUzmB,KAAKI,QAAQ4nD,eAAe/wD,MAAM,KAAM2G,GACzD6oB,EAAW,GAAIwqB,GAAiBxqB,IAEhCA,EAAW2O,EAER3O,IA4BfpF,GAAG8G,OAAO8xD,IACZtjF,OAAOuB,MAAM2sB,QACRluB,OAAOuB,OACE,kBAAVzB,SAAwBA,OAAOgiC,IAAMhiC,OAAS,SAAUiiC,EAAIC,EAAIC,IACrEA,GAAMD,OAEV,SAAUniC,EAAGC,QACVA,OAAO,kBACH,aACA,yBACDD,IACL,WAuuBE,MAjtBC,UAAUE,EAAGE,GAAb,GACOsB,GAAQvB,OAAOuB,MAAOmpB,EAAKnpB,EAAMmpB,GAAI4wE,EAAO5wE,EAAG4wE,KAAMpqC,EAASxmC,EAAGwmC,OAAQ5zB,EAAQ/7B,EAAM+7B,MAAO97B,EAAUD,EAAMC,QAASi4G,EAAuBj4G,EAAQolB,YAAa/K,EAAgBta,EAAMqa,eAAgBoP,EAAOzpB,EAAMypB,KAAM1f,EAAK,iBAAkBo1E,EAAQ,QAAUp1E,EAAIk3E,EAAY,YAAcl3E,EAAIw1E,EAAW,WAAYsyB,EAAW,WAAYtwE,EAAS,SAAUs0E,EAAU,kBAAmB1c,EAAU,kBAAmBuY,EAAgB,mBAAoB9E,EAAgB,gBAAiBuN,EAAe,SAAUC,EAAe,SAAU6D,EAAe,SAAUnI,EAAc,aAAe/rG,EAAK,cAAgBA,EAAI+D,EAAQtP,EAAEsP,MAClnBgsF,EAAWnqC,EAAOnnD,QAClBC,KAAM,SAAU5I,EAASqI,GACrB,GAAiBg1B,GAAM9xB,EAAnBsD,EAAO5G,IACX4G,GAAK3E,GAAKA,EACV7B,EAAU1J,EAAEqP,QAAQ3F,IAAawkB,WAAYxkB,GAAYA,EACzDynD,EAAO5jD,GAAGtD,KAAKwH,KAAKvB,EAAM7O,EAASqI,GACnCA,EAAUwG,EAAKxG,QACfrI,EAAU6O,EAAK7O,QAAQ2N,GAAG,QAAUzD,EAAI+D,EAAMY,EAAK4rG,cAAe5rG,IAClExG,EAAQmd,YAAcnd,EAAQmd,aAAexlB,EAAQmL,KAAK,eAC1D0D,EAAKg+C,SACLh+C,EAAK+nG,WACL/nG,EAAKukG,SACLvkG,EAAK4pG,eACL5pG,EAAKqe,UAAUre,EAAK9G,OACpB8G,EAAKkyF,SACLlyF,EAAK49C,cACL59C,EAAKgvF,cACLhvF,EAAK4wF,UACL5wF,EAAKywF,UAAYzwF,EAAKwkD,iBACtBxkD,EAAK8vF,QACL9vF,EAAKqzF,cAAgB75F,EAAQ+R,MAC7BvL,EAAKkzF,mBAAmBlzF,EAAKxG,SAC7BwG,EAAKgtF,YACLhtF,EAAK41F,WACDp8F,EAAQ4oD,SACRpiD,EAAKguF,iBAELx/D,EAAOh1B,EAAQg1B,MACVA,GAAQxuB,EAAKsrF,YACd98D,EAAOr9B,EAAQ4C,SAAS,aAAay6B,QAErCA,GACAxuB,EAAKwvG,SAAShhF,IAGjBA,GACDxuB,EAAK6rE,eAETnvE,EAAW5M,EAAEkQ,EAAK7O,SAAS4L,QAAQ,YAAY5J,GAAG,aAC9CuJ,GACAsD,EAAK6Y,QAAO,GAEhBvnB,EAAM0uB,OAAOhgB,GACbA,EAAKoqG,0BAET5wG,SACI8O,KAAM,WACNkQ,SAAS,EACTjN,SACAijB,KAAM,KACNx3B,MAAO,KACPorD,UAAU,EACVp1B,MAAO,IACPo4B,cAAe,GACfhE,eAAgB,GAChBiuC,UAAW,EACXvB,kBAAkB,EAClBx7F,OAAQ,IACRs/F,gBAAgB,EAChB30F,OAAQ,OACR0Z,YAAa,GACbo5E,SAAS,EACTzqC,YAAa,GACbixC,iBAAkB,GAClB7gE,YAAY,EACZ8/C,aACAtW,SAAS,EACTrjE,SAAU,KACVgxF,cAAe,UACfC,mBAAoB,UACpBud,aAAa,EACboF,kBAAkB,GAEtB3uG,QACI,OACA,QACA+xB,EACA,SACA,YACA,cACA,YACA,UACA,OAEJpU,WAAY,SAAUjlB,GAClBynD,EAAO5jD,GAAGohB,WAAWld,KAAKnI,KAAMI,GAChCJ,KAAKmsD,SAAS9mC,WAAWjlB,GACzBJ,KAAKyyF,aACLzyF,KAAK02F,SAET5wE,QAAS,WACL,GAAIlf,GAAO5G,IACX4G,GAAK9G,MAAM8pB,IAAI3nB,GACf2E,EAAK7O,QAAQ6xB,IAAI3nB,GACjB2E,EAAK0oG,cAAc1lF,IAAI3nB,GACvB2oB,aAAahkB,EAAK0vG,eAClB1vG,EAAKysG,OAAOzpF,IAAIytD,EAAQ,IAAM8B,GAC9BvyE,EAAKytF,OAAOzqE,IAAIytD,EAAQ,IAAM8B,GAC9BtxB,EAAO5jD,GAAG6hB,QAAQ3d,KAAKvB,IAE3B23C,QAAS,WAAA,GACD33C,GAAO5G,KACPo1B,EAAOxuB,EAAKwuB,OACZmhF,EAAUnhF,GAAQA,IAASxuB,EAAKokG,UAAY51E,IAASxuB,EAAKxG,QAAQmd,YAClEpL,EAAQvL,EAAKwkD,cACborD,EAAWrkG,MACf,QAAKvL,EAAKxG,QAAQi2G,mBAAqBzvG,EAAKhJ,SAAW44G,GAAYD,GAC/D3vG,EAAK+uF,KAAO,GACZ/uF,EAAKywF,UAAYllF,EACjBvL,EAAKokG,SAAW51E,EACXxuB,EAAK0wF,SACN1wF,EAAK7O,QAAQiQ,QAAQyxB,GAEzB7yB,EAAKoB,QAAQyxB,GACb7yB,EAAK0wF,SAAU,EACf,IAEJzvC,EAAO5jD,GAAGs6C,QAAQp2C,KAAKvB,GACvBA,EAAKoqG,yBADLnpD,IAGJ2qD,cAAe,WACXxyG,KAAKF,MAAMy0B,SAEfkiF,YAAa,WACTz2G,KAAK+uF,WAET2nB,YAAa,WACT12G,KAAKsvG,cAAch1G,SAAS+2F,GAC5BrxF,KAAKyyE,cAAa,IAEtBkkC,eAAgB,WAAA,GAORpqE,GACA9lB,EAPA7f,EAAO5G,KACPpC,EAAQgJ,EAAKhJ,OAOjB,OANAgJ,GAAK0oG,cAAc3kD,YAAY0mC,GAC/BzmE,aAAahkB,EAAKovF,gBAClBpvF,EAAKovF,eAAiB,KACtBpvF,EAAKwuB,KAAKxuB,EAAKwuB,QACXmX,EAAO3lC,EAAKmxE,SACZtxD,EAAWzmB,KAAKmsD,SAASuvC,gBAAgB17F,KAAKmsD,SAASwvC,gBAAgBpvD,IACvE3uC,IAAUgJ,EAAKhJ,SAAWgJ,EAAKoB,QAAQ,UACnCye,SAAUA,EACV8lB,KAAMA,KAEV3lC,EAAKhJ,MAAMA,GACX,IAEJgJ,EAAK6rE,eACL7rE,EAAKoxE,QACLpxE,EAAK7O,QAAQS,OAFboO,IAIJgwG,YAAa,WACT,GAAIhwG,GAAO5G,IACX4qB,cAAahkB,EAAK0vG,eAClB1vG,EAAK0vG,cAAgB,KACrB1vG,EAAK0vG,cAAgB5sF,WAAW,WAC5B9iB,EAAKolB,YAGbinE,UAAW,SAAU7yF,GACjB,GAAIwG,GAAO5G,KAAMuf,EAAUnf,EAAQmf,QAASqrC,EAAWxqD,EAAQwqD,SAAUvxD,EAAUuN,EAAK0oG,cAAc1lF,IAAI3nB,GAAKnC,EAAQ8G,EAAK7O,QAAQuJ,IAAIsF,EAAK9G,MAAM8pB,IAAI3nB,IAAM0kF,EAAQ//E,EAAKysG,OAAOzpF,IAAIytD,EAAQ,IAAM8B,GAAYhgC,EAAQvyC,EAAKytF,MACvNzpC,IAAarrC,GAWdlmB,EAAQiB,SAASilB,EAAUqqF,EAAgBmE,GAASpjD,YAAYprC,EAAUwuF,EAAUnE,GACpF9pG,EAAMoD,KAAKu0E,EAAUl4D,GAASrc,KAAK6mG,EAAUn/C,GAAU1nD,KAAK4hG,EAAevlF,KAX3ElmB,EAAQiB,SAASyzG,GAASpjD,YAAYi/C,GAAelkG,GAAGsoG,EAAapnG,EAAKoyF,cAC1El5F,EAAMslB,WAAWqyD,GAAUryD,WAAW2kF,GAAU7mG,KAAK4hG,GAAe,GACpEne,EAAMjhF,GAAG2xE,EAAOrxE,EAAMY,EAAK6vG,YAAa7vG,IAAOlB,GAAGyzE,EAAW,SAAUlxE,GACnEA,EAAE9D,mBAENg1C,EAAMzzC,GAAG2xE,EAAOrxE,EAAMY,EAAK2tF,YAAa3tF,IAAOlB,GAAGyzE,EAAW,SAAUlxE,GACnEA,EAAE9D,mBAENyC,EAAK9G,MAAM4F,GAAG,UAAYzD,EAAI+D,EAAMY,EAAKqxE,SAAUrxE,IAAOlB,GAAG,QAAUzD,EAAI+D,EAAMY,EAAK8vG,YAAa9vG,IAAOlB,GAAG,WAAazD,EAAI+D,EAAMY,EAAK+vG,eAAgB/vG,IAAOlB,GAAG,QAAUzD,EAAI+D,EAAMY,EAAKgwG,YAAahwG,MAMjNy1E,KAAM,WAAA,GACEz1E,GAAO5G,KACPwsC,EAAQ5lC,EAAKsvF,MACbtvF,GAAKi3E,MAAMr6E,aAGVoD,EAAKulD,SAASC,SAAW5f,IAAU6lE,GAAgB7lE,IAAU8lE,GAC9D1rG,EAAKkvF,OAAQ,EACblvF,EAAKsvF,OAASigB,EACiB,IAA3BvvG,EAAKxG,QAAQ61F,WACbrvF,EAAK4Q,UACL5Q,EAAKiwG,cAELjwG,EAAKguF,iBAEFhuF,EAAK8uF,kBACZ9uF,EAAKiwG,aACLjwG,EAAK0xF,gBAGbwe,qBAAsB,WAClB,GAAI3qD,GAAWnsD,KAAKmsD,QACpBA,GAASssC,cAActsC,EAASwvC,gBAAgBxvC,EAAS53B,WAE7DsiF,WAAY,WACR72G,KAAK69E,MAAMt2E,IAAI,WAAYvB,EAAMhG,KAAK82G,qBAAsB92G,OAC5DA,KAAK69E,MAAMxB,QAEf4X,sBAAuB,WAAA,GACfrtF,GAAO5G,KACPo1B,EAAOxuB,EAAKxG,QAAQg1B,KACpBx3B,EAAQgJ,EAAKxG,QAAQxC,KACrBgJ,GAAKulD,SAASgzC,eAGdv4F,EAAKwkD,oBACDh2B,IAASx+B,GAAsB,OAATw+B,IACtBA,EAAOx3B,GAEXgJ,EAAK6tF,UAAU72F,GACfgJ,EAAK9G,MAAMgtC,IAAI1X,GAAQxuB,EAAK9G,MAAMgtC,OAClClmC,EAAK6rE,gBACE7rE,EAAKywF,iBACZzwF,EAAKywF,UAAYzwF,EAAKwkD,iBAG9B0oD,cAAe,SAAUt4G,GAAV,GAKP++F,GAJA3zF,EAAO5G,IACN4G,GAAKsrF,YAGNqI,EAAS3zF,EAAK4zF,cACd5zF,EAAKsvF,SAAWigB,IAChBvvG,EAAKsvF,OAAS,IAElBtvF,EAAK4zF,cAAgB5jG,EACrBgQ,EAAKq1F,SAASzgG,EAAM,GAAIoL,EAAKhJ,SACzB28F,GAAUA,EAAO,GAAGlvC,UACpBzkD,EAAK0zF,QAAQC,EAAOztD,SAG5BiqE,iBAAkB,WAAA,GAqBVtwF,GApBA7f,EAAO5G,KACPmsD,EAAWvlD,EAAKulD,SAChB6nD,EAAeptG,EAAKqzF,cACpB+c,EAAmC,OAAjBhD,GAAyBA,KAC3CjV,EAAWn4F,EAAKsvF,SAAWmc,CAC/B,OAAItT,IACAroG,EAAEy1D,EAAS53B,SAASo2B,YAAY,oBAChC,IAEA/jD,EAAK60F,SAGJtvC,EAASvuD,QAAQhG,SACdo/G,EACApwG,EAAKkuB,OAAOk/E,GACLptG,EAAK6tF,aACZtoC,EAASvuD,MAAMgJ,EAAK6tF,cAG5B7tF,EAAKqzF,cAAgB,KACjBxzE,EAAW0lC,EAASoqC,oBAAoB,GACvC9vE,IAGD7f,EAAK6vF,OAAOhwE,KAAc7f,EAAKhJ,SAC/BgJ,EAAK0zF,QAAQ1zF,EAAK6vF,OAAOhwE,IAEzB7f,EAAKwuB,QAAUxuB,EAAKwuB,SAAWxuB,EAAK4vF,MAAM/vE,IAC1C7f,EAAKgrG,aAAanrF,KAnBtB,IAsBJwwF,iBAAkB,WACd,GAAI9qD,GAAWnsD,KAAKmsD,QACfnsD,MAAKI,QAAQo4F,eAENrsC,EAAS53B,SAAY43B,EAASwyC,cACtCxyC,EAAS53B,MAAM,GAFf43B,EAAS53B,WAKjB8+D,WAAY,WAAA,GACJzsF,GAAO5G,KACPyxG,EAAW7qG,EAAK9G,MAAM,KAAO0S,IAC7BhX,EAAOoL,EAAKge,WAAWwB,WACvB6b,EAAOr7B,EAAKulD,SAASlqB,OACrBrqC,EAAS4D,EAAK5D,OACd45G,EAAe5qG,EAAKge,WAAW41B,OAAO5iD,OACtCs/G,EAAcj1E,IAASrrC,GAAsB,IAATqrC,CACxCr7B,GAAKqtG,cAAe,EACpBrtG,EAAKksF,gBACLlsF,EAAKmsF,gBACLnsF,EAAKyuF,eAAez9F,GACpBgP,EAAK0uF,gBAAgBkc,KAAkB55G,GACvCgP,EAAKiyF,eACLjyF,EAAKi3E,MAAMxnB,WACXzvD,EAAKktG,cAAct4G,GACnBoL,EAAKmyF,oBACLnyF,EAAKmwG,mBACDv7G,EAAK5D,QAAUs/G,IACftwG,EAAKqwG,mBACDrwG,EAAKxG,QAAQu2F,SAAW8a,GAAY7qG,EAAK9G,MAAMgtC,OAC/ClmC,EAAK+vF,QAAQn7F,EAAK,KAGtBoL,EAAKkvF,QACLlvF,EAAKkvF,OAAQ,EACTlvF,EAAKovF,iBAAmByb,EACxB7qG,EAAKi3E,MAAMvB,QAEX11E,EAAKuZ,OAAOvZ,EAAK8uF,iBAErB9uF,EAAKovF,eAAiB,MAE1BpvF,EAAK6zF,YACL7zF,EAAKoB,QAAQ,cAEjBsrF,YAAa,WACTtzF,KAAK4xG,aAAa5xG,KAAKmsD,SAASoqC,oBAAoB,IAChDv2F,KAAKi0G,eACLj0G,KAAKq3F,UAAYr3F,KAAKorD,gBAG9BszC,KAAM,SAAUjX,GACZ,GAAIjsF,GAAMiiD,EAAO9/C,CACjB,IAAyB,kBAAd8pF,GAA0B,CAEjC,IADAjsF,EAAOwE,KAAK4kB,WAAWwB,WAClBzoB,EAAM,EAAGA,EAAMnC,EAAK5D,OAAQ+F,IAC7B,GAAI8pF,EAAUjsF,EAAKmC,IAAO,CACtB8pF,EAAY9pF,EACZ8/C,GAAQ,CACR,OAGHA,IACDgqC,MAGR,MAAOA,IAEX5jD,QAAS,SAAU4jD,EAAWouB,GAC1B,GAAIjvG,GAAO5G,IAMX,OALAynF,GAAY7gF,EAAK83F,KAAKjX,GAClBA,SACA7gF,EAAK9G,MAAM,GAAGlC,MAAQ,GACtBgJ,EAAK6tF,UAAU,KAEZ7tF,EAAKulD,SAASr3B,OAAO2yD,GAAWvtB,KAAK,WACnC27C,GAAajvG,EAAKsvF,SAAWmc,IAC9BzrG,EAAKsvF,OAASoc,MAI1BV,aAAc,SAAUnrF,GAAV,GACN9oB,GAAMqC,KAAKmsD,SAASr3B,SACpBl3B,EAAQ,GACRw3B,EAAO,EACXz3B,GAAMA,EAAIA,EAAI/F,OAAS,GACnB+F,IAAQ/G,IACR+G,MAEJqC,KAAKorD,cAAgBztD,EACjBA,QAAe8oB,IAOXA,GAAyB,IAAbA,KACZ7oB,EAAQoC,KAAKy3F,WAAWhxE,GACxB2O,EAAOp1B,KAAKw2F,MAAM/vE,IAER,OAAV7oB,IACAA,EAAQ,MAXZw3B,EAAOp1B,KAAKF,MAAM,GAAGlC,MACjBoC,KAAKI,QAAQi2G,mBACbz4G,EAAQw3B,GAEZp1B,KAAKmsD,SAAS53B,WAUlBv0B,KAAKm3G,kBAAkB/hF,GACvBp1B,KAAKy0F,UAAU72F,IAAUhH,EAAYgH,EAAQw3B,EAAMz3B,GACnDqC,KAAKyyE,eACLzyE,KAAKq5F,mBAET8d,kBAAmB,SAAU/hF,GAAV,GAGXgiF,GAMI91F,EARJ1a,EAAO5G,KACPq3G,EAAepjF,EAAMj0B,KAAKF,MAE1Bu3G,IAAgBA,EAAaz/G,SAC7Bw/G,EAAaC,EAAa,IAE9Br3G,KAAK2wG,MAAQ3wG,KAAKF,MAAM,GAAGlC,MAAQw3B,EAC/BgiF,GAAcp3G,KAAKorD,qBACf9pC,EAASnpB,EAAQgf,SACjBmK,EAAO5H,IAAM4H,EAAO1H,QACpB8P,WAAW,WACP9iB,EAAK9G,MAAM,GAAG00B,kBAAkB4iF,EAAYA,IAC7C,GAEHp3G,KAAKF,MAAM,GAAG00B,kBAAkB4iF,EAAYA,KAIxD5/F,QAAS,WACLxX,KAAKmsD,SAAS30C,WAElBw5F,uBAAwB,WAChBhxG,KAAKo1B,OACLp1B,KAAKs0F,aAELt0F,KAAKo0F,cAGbuC,QAAS,SAAUrnC,GAAV,GAMD3xD,GALAiJ,EAAO5G,KACPjI,EAAU6O,EAAK9G,MAAM,GACrBlC,EAAQgJ,EAAKwuB,OACb26E,EAAW97E,EAAMl8B,GAAS,GAC1BgH,EAAM6H,EAAK0qG,KAEf,OAAIvyG,IAAO4iB,EAAKG,WAAa/iB,GAAO4iB,EAAKE,QACrCjb,EAAK0qG,MAAQ16G,EACb,IAEJ04D,EAAOA,GAAQ,GACK,gBAATA,KACHA,EAAK,KACLA,EAAO1oD,EAAKge,WAAW+D,OAAOspE,EAAKhvF,QAAQqsD,EAAK,GAAI1oD,EAAKurF,GAAG,MAEhE7iC,EAAOA,EAAO1oD,EAAK4vF,MAAMlnC,GAAQ,IAEjCygD,GAAY,IACZA,EAAWnyG,EAAMd,cAAcoB,QAAQoxD,EAAKxyD,eAAiB,GAE7DwyD,GACAA,EAAOA,GAAAA,EACP3xD,EAAM2xD,EAAKxyD,cAAcoB,QAAQN,EAAMd,eACnCa,OACAC,GAAS0xD,EAAK/3D,UAAUoG,EAAMC,EAAMhG,UAGxCgG,EAAQA,EAAMrG,UAAU,EAAGw4G,GAE3BnyG,EAAMhG,SAAWm4G,GAAazgD,IAC9Bv3D,EAAQ6F,MAAQA,EACZ7F,IAAYya,KACZyhB,EAAMl8B,EAASg4G,EAAUnyG,EAAMhG,SAtBvC03D,IA0BJl6B,KAAM,SAAUA,GAAV,GAEExuB,GACA9G,EACAw8B,EACAo3E,EACAjtF,EACA7oB,CACJ,OAPAw3B,GAAgB,OAATA,EAAgB,GAAKA,EACxBxuB,EAAO5G,KACPF,EAAQ8G,EAAK9G,MAAM,GACnBw8B,EAAa11B,EAAKxG,QAAQk8B,WAC1Bo3E,EAAct+E,EAGdA,IAASx+B,EACFkJ,EAAMlC,MAEbgJ,EAAKxG,QAAQ4oD,YAAa,GAAUpiD,EAAKulD,SAASC,SAItD3lC,EAAW7f,EAAK6f,WACZA,GAAY7f,EAAK4vF,MAAM/vE,KAAc2O,IACrCx3B,EAAQgJ,EAAK6vF,OAAOhwE,GAChB7oB,IAAUq0F,EAAKzB,UAAU5pF,EAAK+uF,WAAa/3F,MAC3CgJ,EAAKyyF,kBACL,IAGJ/8D,IAAe11B,EAAKulD,SAASvuD,QAAQhG,SACrC87G,EAAcA,EAAY52G,eAE9B8J,EAAKi9B,QAAQ,SAAUroC,GAKnB,MAJAA,GAAOoL,EAAK4vF,MAAMh7F,GACd8gC,IAAe11B,EAAKulD,SAASvuD,QAAQhG,SACrC4D,GAAQA,EAAO,IAAIsB,eAEhBtB,IAASk4G,IACjBx5C,KAAK,WACAtzD,EAAKwkD,cAAgB,IACrBtrD,EAAMlC,MAAQw3B,EACVxuB,EAAKxG,QAAQi2G,kBACbzvG,EAAK6tF,UAAUr/D,GAEnBxuB,EAAKyyF,mBAETzyF,EAAK+pG,MAAQ7wG,EAAMlC,QAjBvB,KAXIgJ,EAAKwvG,SAAShhF,GACd,IA8BRjV,OAAQ,SAAUA,GACdngB,KAAK+uF,QAAQ5uE,GAAQ,IAEzBviB,MAAO,SAAUA,GAAV,GACCgJ,GAAO5G,KACPI,EAAUwG,EAAKxG,QACf+rD,EAAWvlD,EAAKulD,QACpB,OAAIvuD,KAAUhH,GACVgH,EAAQgJ,EAAK6tF,aAAe7tF,EAAKulD,SAASvuD,QAAQ,GAC3CA,IAAUhH,GAAuB,OAAVgH,EAAiB,GAAKA,IAExDgJ,EAAKkzF,mBAAmBlzF,EAAKxG,QAASxC,GACtCgJ,EAAKoB,QAAQ,OAASpK,MAAOA,IACzBA,IAAUwC,EAAQxC,OAASgJ,EAAK9G,MAAMgtC,QAAU1sC,EAAQg1B,OAG5DxuB,EAAK6tF,UAAU72F,GACXgJ,EAAKutF,oBAAsBhoC,EAASC,SAAWD,EAASgzC,aACxDv4F,EAAK+tF,eAEL/tF,EAAKm1F,aAET5vC,EAASvuD,MAAMA,GAAOs8D,KAAK,WACnBtzD,EAAKwkD,qBACLxkD,EAAK6tF,UAAU72F,GACfgJ,EAAK9G,MAAMgtC,IAAIlvC,GACfgJ,EAAK6rE,cAAa,IAEtB7rE,EAAK+uF,KAAO/uF,EAAK6tF,YACjB7tF,EAAKywF,UAAYzwF,EAAKwkD,cACtBxkD,EAAK+pG,MAAQ/pG,EAAK9G,MAAMgtC,MACpBlmC,EAAKsvF,SAAWmc,IAChBzrG,EAAKsvF,OAASoc,MArBtB1rG,IAyBJs9B,OAAQ,SAAUj8B,GAAV,GACArB,GAAO5G,KACPusC,EAAOtkC,EAAEskC,KACT9lB,EAAW7f,EAAKulD,SAASuvC,gBAAgB90F,EAAKulD,SAASwvC,gBAAgBpvD,GAE3E,OADAtkC,GAAE9D,iBACEyC,EAAKoB,QAAQ,UACTye,SAAUA,EACV8lB,KAAMA,KAEV3lC,EAAK01E,QACL,IAEJ11E,EAAK4yF,gBAAiB,EACtB5yF,EAAKi9B,QAAQ0I,GAAM2tB,KAAK,WACpBtzD,EAAKoxE,UAFTpxE,IAKJmvF,YAAa,WACT,MAAO/1F,MAAKo1B,QAEhB+gE,cAAe,SAAU7mC,GAAV,GA8BP3jD,GA7BA/E,EAAO5G,KACPI,EAAUwG,EAAKxG,QACfwkB,EAAahe,EAAKge,WAClB0X,EAAal8B,EAAQk8B,WACrB4b,EAAY,SAAUzxB,GACtB,GAAI2O,GAAOxuB,EAAK4vF,MAAM/vE,EACtB,IAAI2O,IAASx+B,EAET,MADAw+B,IAAc,IACD,KAATA,GAAwB,KAATk6B,KAGfhzB,IACAlH,EAAOA,EAAKt4B,eAEc,IAAvBs4B,EAAKl3B,QAAQoxD,IAM5B,OAHIhzB,KACAgzB,EAAOA,EAAKxyD,eAEX8J,EAAKurF,GAAG,GAAGloD,YAQhBjqC,KAAKmsD,SAAS53B,MAAMv0B,KAAK0+F,KAAKxmD,IAC1BvsC,EAAU3L,KAAKmsD,SAAS53B,QACxB5oB,IACIvL,EAAQu2F,SACR/vF,EAAK+vF,QAAQhrF,GAEjB3L,KAAKq8E,QAELr8E,KAAKI,QAAQo4F,iBAAmBlpC,GAChCtvD,KAAKmsD,SAAS6uC,aATlBh7F,IAPI4kB,EAAWrd,IAAIkyB,EAAQ,WACf7U,EAAW+D,OAAO,IAClB/hB,EAAKolB,OAAOsjC,KAEjBpO,QACH,IAcRiqD,OAAQ,WACJ,GAAiLrrG,GAAOw3G,EAApL1wG,EAAO5G,KAAMjI,EAAU6O,EAAK7O,QAAQ4yD,YAAY,WAAW,GAAI4sD,EAAYx/G,EAAQw/G,UAAWl+G,EAAUuN,EAAKvN,QAASy8G,EAAW,gBAAiB5mG,EAAOnX,EAAQmX,MAAQ,EACzKA,KACAA,EAAO,SAAWA,EAAO,YAE7BpP,EAAQzG,EAAQiuB,KAAKwuF,GAChBh2G,EAAM,KACPzG,EAAQyqD,OAAO,wFAA0F50C,EAAO,6KAA6K40C,OAAOl9C,EAAK7O,SACzS+H,EAAQzG,EAAQiuB,KAAKwuF,IAEzBh2G,EAAM,GAAGhG,MAAM6d,QAAU5f,EAAQ+B,MAAM6d,QACvC7X,EAAM,GAAGu6B,MAAQtiC,EAAQsiC,MACzBi9E,EAAYjlG,SAASrS,KAAKjI,QAAQg5C,KAAK,cAAgB/wC,KAAKjI,QAAQmL,KAAK,aAAc,IACnFo0G,OACAx3G,EAAM,GAAGw3G,UAAYA,GAEzBx3G,EAAMxF,SAASvC,EAAQkG,WAAWhG,KAC9BgB,MAAO,OACPC,OAAQnB,EAAQ+B,MAAMZ,SACvBgK,MACC6gB,KAAQ,WACRgrF,iBAAiB,IAClB/0G,OACCo2G,GACAtwG,EAAMoD,KAAK,cAAe0D,EAAKxG,QAAQmd,aAEvCg6F,IACAx/G,EAAQw/G,UAAY,GACpBz3G,EAAM,GAAGy3G,UAAYA,GAEzB3wG,EAAKosF,SAAWpsF,EAAK9G,MAAQA,EAC7B8G,EAAK0oG,cAAgB54G,EAAE2C,EAAQ,GAAG4wC,YAClCrjC,EAAKysG,OAASh6G,EAAQiuB,KAAK,aAAapkB,MACpC6gB,KAAQ,SACR28D,cAEJ95E,EAAK+zF,WAAa/zF,EAAKysG,OAAO/rF,KAAK,WAC/BvvB,EAAQ8rB,IACRjd,EAAKysG,OAAOnwG,KAAK,gBAAiB0D,EAAKurF,GAAG,GAAGtuE,KAGrD2sF,aAAc,WACVxwG,KAAKq0F,OAAS39F,EAAE,wFAAwFwM,MACpG6gB,KAAQ,SACR28D,cAEA1gF,KAAKI,QAAQ6wG,cACbjxG,KAAKq0F,OAAOvyB,YAAY9hE,KAAKF,OAC7BE,KAAK3G,QAAQiB,SAAS,0BAG9B29E,SAAU,SAAUhwE,GAChB,GAAIrB,GAAO5G,KAAMjB,EAAMkJ,EAAEmuB,OACzBxvB,GAAK0qG,MAAQvyG,EACb6rB,aAAahkB,EAAKovF,gBAClBpvF,EAAKovF,eAAiB,KAClBj3F,GAAO4iB,EAAKI,KAAQnb,EAAKm9B,MAAM97B,IAC/BrB,EAAK8pG,WAGbj+B,aAAc,SAAUz4E,GACpB,IAAIo2G,EAAJ,CAGA,GAA6ExyG,GAAzEgJ,EAAO5G,KAAMF,EAAQ8G,EAAK9G,MAAOyd,EAAc3W,EAAKxG,QAAQmd,WAChE,IAAIA,EAAa,CAMb,GALA3f,EAAQgJ,EAAKhJ,QACT5D,IAASpD,IACToD,GAAQ4D,GAEZkC,EAAMsB,YAAY,aAAcpH,IAC3BA,EAAM,CACP,GAAK4D,EAGD,MAFA2f,GAAc,GAKtBzd,EAAMgtC,IAAIvvB,GACLA,GAAezd,EAAM,KAAO0S,KAC7ByhB,EAAMn0B,EAAM,GAAI,EAAG,MAI/B4wG,QAAS,WACL,GAAI9pG,GAAO5G,IACX4G,GAAKovF,eAAiBtsE,WAAW,WAC7B,GAAI9rB,GAAQgJ,EAAKwuB,MACbxuB,GAAK+pG,QAAU/yG,IACfgJ,EAAK+pG,MAAQ/yG,EACe,SAAxBgJ,EAAKxG,QAAQyD,QACb+C,EAAKulD,SAASr3B,WAElBluB,EAAKolB,OAAOpuB,GACZgJ,EAAKoqG,0BAETpqG,EAAKovF,eAAiB,MACvBpvF,EAAKxG,QAAQwzB,QAEpBwiF,SAAU,SAAUhhF,GAChBp1B,KAAKF,MAAMgtC,IAAI1X,GACfp1B,KAAK2wG,MAAQv7E,GAEjBu5E,SAAU,WACN,GAAI/nG,GAAO5G,KAAMjI,EAAU6O,EAAK7O,QAASsB,EAAUtB,EAAQ6B,QACtDP,GAAQU,GAAG,mBACZV,EAAUtB,EAAQ+I,OAAOhI,KAAK,YAAYc,SAC1CP,EAAQ,GAAGS,MAAM6d,QAAU5f,EAAQ,GAAG+B,MAAM6d,SAEhD/Q,EAAKvN,QAAUA,EAAQiB,SAAS,gCAAgCA,SAASvC,EAAQ,GAAGkG,WAAWhG,IAAI,UAAW,KAElH+kG,gBAAiB,SAAUpjG,EAAQulG,GAAlB,GACTv4F,GAAO5G,KACPstD,EAAW1zD,EAAOgE,QAClB28F,EAASjtC,GAAY1zD,EAAOwxD,kBAC5BprD,MAAKorD,mBAAuBprD,KAAKpC,UAGjCuhG,IAAe7xC,GAAYitC,KAC3B3zF,EAAKxG,QAAQxC,MAAQ,GACrBgJ,EAAKhJ,MAAM,MAGnByuD,WAAY,SAAUzuD,EAAOw3B,GACzBp1B,KAAKF,MAAMgtC,IAAI1X,GACfp1B,KAAKy0F,UAAU72F,GACfoC,KAAK21F,KAAO31F,KAAKy0F,YACjBz0F,KAAKq3F,UAAYr3F,KAAKorD,cACtBprD,KAAKmsD,SAASqzC,SAAS5hG,GACvBoC,KAAKyyE,eACLzyE,KAAKi6F,cAAgB,KACrBj6F,KAAKi0G,cAAe,IAG5B5yF,GAAG8G,OAAO6pE,IACZr7F,OAAOuB,MAAM2sB,QACRluB,OAAOuB,OACE,kBAAVzB,SAAwBA,OAAOgiC,IAAMhiC,OAAS,SAAUiiC,EAAIC,EAAIC,IACrEA,GAAMD,OAEV,SAAUniC,EAAGC,QACVA,OAAO,qBACH,aACA,yBACDD,IACL,WAy7BE,MAn6BC,UAAUE,EAAGE,GAi5BV,QAAS89C,GAAQ9xC,EAAGC,GAChB,GAAIjL,EACJ,IAAU,OAANgL,GAAoB,OAANC,GAAoB,OAAND,GAAoB,OAANC,EAC1C,OAAO,CAGX,IADAjL,EAASgL,EAAEhL,OACPA,IAAWiL,EAAEjL,OACb,OAAO,CAEX,MAAOA,KACH,GAAIgL,EAAEhL,KAAYiL,EAAEjL,GAChB,OAAO,CAGf,QAAO,EA/5Bd,GACOM,GAAQvB,OAAOuB,MAAOmpB,EAAKnpB,EAAMmpB,GAAI4wE,EAAO5wE,EAAG4wE,KAAMtwE,EAAOzpB,EAAMypB,KAAMnP,EAAgBta,EAAMqa,eAAgBhX,EAAkBrD,EAAMsD,KAAKD,gBAAiByK,EAAQtP,EAAEsP,MAAOorF,EAAK,KAAMomB,EAAK,KAAMC,EAAS,SAAUC,EAAS,SAAUC,EAAS,SAAU58B,EAAO,OAAQC,EAAQ,QAASvhD,EAAS,SAAU+Y,EAAW,WAAY/S,EAAS,SAAUm4E,EAAW,WAAY9S,EAAgB,gBAAiB+S,EAAe,kBAAmBrmB,EAAc,WAAYsmB,EAAa,gBAAiBlO,EAAgB,mBAAoBnyB,EAAW,WAAYsyB,EAAW,WAAY9nG,EAAK,oBAAqBo1E,EAAQ,QAAUp1E,EAAIi3E,EAAU,UAAYj3E,EAAIwgG,EAAa,aAAexgG,EAAI0iG,EAAa,aAAe1iG,EAAI+rG,EAAcvL,EAAa,IAAMkC,EAAY7S,EAAa,KAAM/rF,EAAUrP,EAAEqP,QAASzI,GACxxB,cACA,YACA,eACA,aACA,cACA,iBACA,iBACA,eAEJwqD,EAAcmqC,EAAKvxF,QACnBC,KAAM,SAAU5I,EAASqI,GACrB,GAAiByjB,GAAIvgB,EAAjBsD,EAAO5G,IACX4G,GAAK3E,GAAKA,EACVgwF,EAAKhuF,GAAGtD,KAAKwH,KAAKvB,EAAM7O,EAASqI,GACjCwG,EAAKmxG,eACLnxG,EAAKoxG,kBACLpxG,EAAK+nG,WACL/nG,EAAKqxG,WACLrxG,EAAKukG,SACLvkG,EAAKsxG,iBACLtxG,EAAK2pG,UACL3pG,EAAK4pG,eACL5pG,EAAKqe,UAAUre,EAAK9G,OACpB/H,EAAU6O,EAAK7O,QAAQmL,KAAK,WAAY,YAAYpC,OACpDV,EAAUwG,EAAKxG,QACVA,EAAQmd,cACTnd,EAAQmd,YAAcxlB,EAAQyD,KAAK,gBAEvCqoB,EAAK9rB,EAAQmL,KAAKkuF,GACdvtE,IACAjd,EAAKuxG,OAASt0F,EAAK,cACnBA,GAAU,WACVjd,EAAKwxG,QAAQl1G,KAAKkuF,EAAIvtE,IAE1Bjd,EAAK8vF,MAAM7yE,GACXjd,EAAK49C,cACL59C,EAAKgvF,cACLhvF,EAAKkyF,SACLlyF,EAAKyxG,eACLzxG,EAAKkzF,mBAAmBlzF,EAAKxG,SAC7BwG,EAAKgtF,YACLhtF,EAAKg+C,SACLh+C,EAAK4wF,UACL5wF,EAAK6rE,eACDryE,EAAQ4oD,SACRpiD,EAAKge,WAAWs8B,QACT9gD,EAAQxC,OACfgJ,EAAKylD,WAAWjsD,EAAQxC,OAE5B0F,EAAW5M,EAAEkQ,EAAK7O,SAAS4L,QAAQ,YAAY5J,GAAG,aAC9CuJ,GACAsD,EAAK6Y,QAAO,GAEhBvnB,EAAM0uB,OAAOhgB,GACbA,EAAKoqG,0BAET5wG,SACI8O,KAAM,cACNopG,QAAS,WACTl5F,SAAS,EACT4pC,UAAU,EACVuvD,WAAW,EACX/f,gBAAgB,EAChBxsC,cAAe,GACfhE,eAAgB,GAChBnkD,OAAQ,aACRy4B,YAAY,EACZ25D,UAAW,EACXvB,kBAAkB,EAClB9gE,MAAO,IACPh2B,MAAO,KACP46G,iBAAkB,KAClBj7F,YAAa,GACbrkB,OAAQ,IACRkjF,aACAtW,SAAS,EACT2yC,aAAc,GACdC,YAAa,GACbjlB,cAAe,UACfC,mBAAoB,UACpBud,aAAa,GAEjBvpG,QACIqzE,EACAC,EACAvhD,EACAgG,EACAm4E,EACA,YACA,cACA,aAEJr9B,cAAe,SAAU31D,GACrB5kB,KAAKI,QAAQwkB,WAAaA,EAC1B5kB,KAAKk2F,OAAS,GACdl2F,KAAKwkD,cACLxkD,KAAKmsD,SAASouB,cAAcv6E,KAAK4kB,YAC7B5kB,KAAKI,QAAQ4oD,UACbhpD,KAAK4kB,WAAWs8B,SAGxB77B,WAAY,SAAUjlB,GAClB,GAAIyzF,GAAc7zF,KAAKkzF,aAAa9yF,EACpC6xF,GAAKhuF,GAAGohB,WAAWld,KAAKnI,KAAMI,GAC9BJ,KAAKmsD,SAAS9mC,WAAWwuE,GACzB7zF,KAAKyyF,aACLzyF,KAAK02F,MAAM12F,KAAKo4G,QAAQl1G,KAAKkuF,IAC7BpxF,KAAKq4G,gBAETM,WAAY,SAAUlxB,GAClB,GAAI7gF,GAAO5G,IACX,OAAIynF,KAAc7wF,EAWPgQ,EAAKgyG,aAVRhyG,EAAKgyG,cACLhyG,EAAKgyG,YAAYjuD,YAAYktD,GAAczyF,WAAWgsE,GACtDxqF,EAAK9G,MAAMslB,WAAW,0BAEtBqiE,IACAA,EAAUntF,SAASu9G,GAAc30G,KAAKkuF,EAAIxqF,EAAKuxG,QAC/CvxG,EAAK9G,MAAMoD,KAAK,wBAAyB0D,EAAKuxG,SAElDvxG,EAAKgyG,YAAcnxB,EARnB,IAaRthE,UAAW,WACP,MAAOnmB,MAAKmsD,SAASoqC,qBAEzBzwE,QAAS,WACL,GAAIlf,GAAO5G,KAAMiC,EAAK2E,EAAK3E,EAC3B2oB,cAAahkB,EAAK8zF,OAClB9vE,aAAahkB,EAAKovF,gBAClBpvF,EAAKvN,QAAQuwB,IAAI3nB,GACjB2E,EAAKwxG,QAAQxuF,IAAI3nB,GACjB2E,EAAK9G,MAAM8pB,IAAI3nB,GACf2E,EAAKytF,OAAOzqE,IAAI3nB,GAChBgwF,EAAKhuF,GAAG6hB,QAAQ3d,KAAKvB,IAEzB2sF,cAAe,WACXtB,EAAKhuF,GAAGsvF,cAAcprF,KAAKnI,MAC3BA,KAAK24G,WAAW,OAEpBzlB,aAAc,SAAU9yF,GAAV,GACNwG,GAAO5G,KACP6zF,EAAc5B,EAAKhuF,GAAGivF,aAAa/qF,KAAKvB,EAAMlQ,EAAEgK,OAAON,GACvD0zF,mBAAoB9tF,EAAMY,EAAKiyG,oBAAqBjyG,GACpDuwE,WAAY,cAEZshC,EAAez4G,KAAKI,QAAQq4G,cAAgBz4G,KAAKI,QAAQqC,SACzDA,EAAWoxF,EAAY4kB,cAAgBA,GAAgB5kB,EAAYpxF,QAKvE,OAJKA,KACDA,EAAW,KAAOvK,EAAMuL,KAAKowF,EAAY7nC,cAAe,QAAU,KAEtE6nC,EAAYpxF,SAAWA,EAChBoxF,GAEXG,cAAe,WACX/B,EAAKhuF,GAAG+vF,cAAc7rF,KAAKnI,KAAMA,KAAK84G,eAAetyG,MAAM,KAE/D8sF,YAAa,SAAUrrF,GAAV,GAOAnN,GANLU,EAAOwE,KAAK4kB,WAAWwB,WACvB2yF,EAAa/4G,KAAK+3G,YAClBiB,EAAch5G,KAAKy2F,MAIvB,KAHIz2F,KAAKk2F,SAAWyhB,IAChB33G,KAAKk2F,OAAS,IAETp7F,EAAI,EAAGA,EAAImN,EAAEi3F,MAAMtnG,OAAQkD,IAChC,GAAIi+G,EAAWC,EAAY/wG,EAAEi3F,MAAMpkG,GAAG2rB,aAAe7vB,EAAW,CAC5DoJ,KAAK+9F,QAAQviG,EACb,OAGRwE,KAAK4xG,aAAa3pG,EAAEi3F,MAAOj3F,EAAE+sF,UAEjC6jB,oBAAqB,SAAU5wG,GAAV,GAEbjE,GACArG,EAFA6oB,EAAQve,EAAEue,KAGd,KAAK7oB,EAAM,EAAGA,EAAM6oB,EAAM5uB,OAAQ+F,IAC9BqG,EAAUwiB,EAAM7oB,GAChBqC,KAAKo4G,QAAQz9G,WAAWouB,GAAG/kB,EAAQmO,OAAOxX,SAAS,cAAc+H,KAAK1C,KAAKi5G,gBAAgBj1G,EAAQuoC,QAG3GgoE,kBAAmB,SAAUtsG,GAAV,GACXrB,GAAO5G,KACPk5G,EAA+C,UAApCjxG,EAAEmY,OAAO/c,SAASvG,cAC7BsjB,EAAS1pB,EAAEuR,EAAEmY,QACb+4F,EAAc/4F,EAAOvmB,SAAS,aAAeumB,EAAOvmB,SAAS,SAC7Ds/G,KACAA,GAAe/4F,EAAOnI,QAAQ,aAAatd,SAAS,sBAAsB/C,SAE1EshH,GAAcC,GAAejhH,EAAMC,QAAQgf,UAC3ClP,EAAE9D,iBAEDg1G,IACGvyG,EAAK9G,MAAM,KAAO0S,KAAmB0mG,GACrCtyG,EAAK9G,MAAMy0B,QAEgB,IAA3B3tB,EAAKxG,QAAQ61F,WACbrvF,EAAKy1E,SAIjBq6B,YAAa,WACT12G,KAAKyyE,cAAa,GAClBzyE,KAAK3G,QAAQiB,SAASu9G,IAE1BlB,eAAgB,WACZ,GAAI/vG,GAAO5G,IACX4qB,cAAahkB,EAAKovF,gBAClBpvF,EAAKvN,QAAQsxD,YAAYktD,GACzBjxG,EAAK6rE,cAAc7rE,EAAKulD,SAASoqC,oBAAoB,IAAI,GACzD3vF,EAAK01E,QACD11E,EAAKsvF,SAAWwhB,IAChB9wG,EAAKsvF,OAASuhB,EACd7wG,EAAKulD,SAASyyC,YAAW,IAE7Bh4F,EAAK7O,QAAQS,QAEjB4gH,WAAY,SAAUC,GAAV,GAQJv3G,GAWAo4D,EAlBAtzD,EAAO5G,KACPwsC,EAAQ5lC,EAAKsvF,OACb7/B,EAAWgjD,EAAIlnG,QACfg6C,EAAWvlD,EAAKulD,SAChBvuD,EAAQuuD,EAASvuD,QAAQy4D,GACzB5vC,EAAW7f,EAAKulD,SAASoqC,oBAAoBlgC,GAC7CijD,EAAc1yG,EAAKoxG,eAAep6G,EAEtC,OAAIgJ,GAAKoB,QAAQ4vG,GACTnxF,SAAUA,EACV8lB,KAAM8sE,KAEVzyG,EAAK2yG,SACL,IAEAD,IAAgB1iH,GAAc41C,IAAUirE,GAAUjrE,IAAUkrE,IAC5D4B,EAAc1yG,EAAKmxG,YAAYn6G,IAE/Bs8D,EAAO,WACPtzD,EAAK+xG,WAAW,MAChB/xG,EAAK23C,UACL33C,EAAK2yG,UAELD,IAAgB1iH,EAChBu1D,EAASr3B,OAAOq3B,EAASr3B,SAASuhC,IAAW6D,KAAKA,IAElDp4D,EAAS8E,EAAK7O,QAAQ,GAAG4C,SAAS2+G,GAClCx3G,EAAOupD,UAAW,EAClBc,EAASozC,SAASlpC,GAClBgjD,EAAInxF,SACJgyC,KAfJ,IAkBJs/C,cAAe,SAAUvxG,GACrB,GAAImY,GAAS1pB,EAAEuR,EAAE22B,cACZxe,GAAOzlB,SAAS,sBAAsB/C,QACvCoI,KAAKo5G,WAAWh5F,EAAOnI,QAAQu/F,KAGvCiC,YAAa,WACT,GAAI7yG,GAAO5G,IACX4G,GAAKwxG,QAAQz9G,WAAW+C,KAAK,SAAUyU,EAAOknG,GAC1CzyG,EAAKwyG,WAAW1iH,EAAE2iH,MAEtBzyG,EAAK9G,MAAMgtC,IAAI,IACflmC,EAAK8pG,UACL9pG,EAAKoB,QAAQ,UACbpB,EAAK2tB,SAET0+D,UAAW,SAAU7yF,GACjB,GAAIwG,GAAO5G,KAAMuf,EAAUnf,EAAQmf,QAASqrC,EAAWxqD,EAAQwqD,SAAUvxD,EAAUuN,EAAKvN,QAAQuwB,IAAI3nB,GAAKm2G,EAAUxxG,EAAKwxG,QAAQxuF,IAAI3nB,GAAKnC,EAAQ8G,EAAK7O,QAAQuJ,IAAIsF,EAAK9G,MAAM8pB,IAAI3nB,GAC5K2oD,IAAarrC,GAWVA,EACAlmB,EAAQiB,SAASsvG,GAEjBvwG,EAAQsxD,YAAYi/C,GAExB9pG,EAAMoD,KAAKu0E,EAAUl4D,GAASrc,KAAK6mG,EAAUn/C,GAAU1nD,KAAK4hG,EAAevlF,KAf3ElmB,EAAQsxD,YAAYi/C,GAAelkG,GAAGsoG,EAAapnG,EAAKoyF,cAActzF,GAAG,YAAczD,EAAK,YAAcA,EAAI+D,EAAMY,EAAK2tG,kBAAmB3tG,IAC5IA,EAAK9G,MAAM4F,GAAGwzE,EAASlzE,EAAMY,EAAKqxE,SAAUrxE,IAAOlB,GAAG,QAAUzD,EAAI+D,EAAMY,EAAK8pG,QAAS9pG,IAAOlB,GAAG,QAAUzD,EAAI+D,EAAMY,EAAK8vG,YAAa9vG,IAAOlB,GAAG,WAAazD,EAAI+D,EAAMY,EAAK+vG,eAAgB/vG,IAC9LA,EAAKytF,OAAO3uF,GAAG,QAAUzD,EAAI+D,EAAMY,EAAK6yG,YAAa7yG,IACrD9G,EAAMslB,WAAWqyD,GAAUryD,WAAW2kF,GAAU7mG,KAAK4hG,GAAe,GACpEsT,EAAQ1yG,GAAG+8F,EAAY+U,EAAI,WACvB9gH,EAAEsJ,MAAM1F,SAASw9G,KAClBpyG,GAAGi/F,EAAY6S,EAAI,WAClB9gH,EAAEsJ,MAAM2qD,YAAYmtD,KACrBpyG,GAAG2xE,EAAO,wBAAyBrxE,EAAMY,EAAK4yG,cAAe5yG,MAUxE2yG,OAAQ,WACJ,GAAI3yG,GAAO5G,IACP4G,GAAKxG,QAAQm4G,UACb3xG,EAAK01E,QAEL11E,EAAKi3E,MAAMxnB,YAGnBu+B,cAAe,SAAU/wF,EAAQ0hB,GACxBA,IACDA,EAAQvlB,KAAK05G,eAEjB15G,KAAK05G,eAAgB,EACrBznB,EAAKhuF,GAAG2wF,cAAczsF,KAAKnI,KAAM6D,EAAQ0hB,IAE7C+2D,MAAO,WACHt8E,KAAK69E,MAAMvB,SAEfD,KAAM,WACF,GAAIz1E,GAAO5G,IACP4G,GAAKi0F,WACLj0F,EAAK8yG,eAAgB,GAErB9yG,EAAK8yG,gBAAkB9yG,EAAKulD,SAASC,SAAWxlD,EAAKsvF,SAAWuhB,GAChE7wG,EAAKkvF,OAAQ,EACblvF,EAAKsvF,OAASyhB,EACd/wG,EAAKulD,SAASyyC,YAAW,GACzBh4F,EAAKguF,iBACEhuF,EAAK8uF,kBACZ9uF,EAAKi3E,MAAMxB,OACXz1E,EAAK0xF,eAGbn4E,OAAQ,SAAUA,GACdA,EAASA,IAAWvpB,EAAYupB,GAAUngB,KAAK69E,MAAMr6E,UACrDxD,KAAKmgB,EAAS46D,EAAOC,MAEzBxjE,QAAS,WACLxX,KAAKmsD,SAAS30C,WAElB67E,WAAY,WAAA,GACJzsF,GAAO5G,KACPxE,EAAOoL,EAAKge,WAAWwB,WACvB6b,EAAOr7B,EAAKulD,SAASlqB,MACzBr7B,GAAKm3F,QAAQviG,GACboL,EAAKksF,gBACLlsF,EAAKmsF,gBACLnsF,EAAKyuF,eAAe75F,EAAK5D,QACzBgP,EAAKiyF,eACDjyF,EAAKkvF,QACLlvF,EAAKkvF,OAAQ,EACblvF,EAAKuZ,OAAOvZ,EAAK8uF,kBAErB9uF,EAAKi3E,MAAMxnB,YACPzvD,EAAKxG,QAAQo4F,gBAAmBv2D,IAASrrC,GAAsB,IAATqrC,GACtDr7B,EAAKulD,SAAS6uC,aAEdp0F,EAAK8qG,gBACL9qG,EAAK8qG,eAAelrD,QAExB5/C,EAAK6zF,YACL7zF,EAAKmyF,oBACLnyF,EAAKoB,QAAQ,cAEjB+tF,YAAa,WAAA,GACLnvF,GAAO5G,KACP25G,EAAa/yG,EAAK9G,MAAMgtC,KAI5B,OAHIlmC,GAAKxG,QAAQmd,cAAgBo8F,IAC7BA,EAAa,IAEVA,GAEX/7G,MAAO,SAAUA,GAAV,GACCgJ,GAAO5G,KACPmsD,EAAWvlD,EAAKulD,SAChB23C,EAAW33C,EAASvuD,QAAQ4I,QAC5BgyG,EAAmB5xG,EAAKxG,QAAQo4G,iBAChCoB,EAAeztD,EAASC,SAAWD,EAASgzC,YAChD,OAAIvhG,KAAUhH,EACHktG,GAEXl9F,EAAKkzF,mBAAmBlzF,EAAKxG,QAASxC,GACtCA,EAAQgJ,EAAKizG,iBAAiBj8G,GACL,OAArB46G,GAA6B56G,EAAMhG,OAAS4gH,IAC5C56G,EAAQA,EAAM4I,MAAM,EAAGgyG,IAEvBoB,GACAhzG,EAAK+tF,eAETxoC,EAASvuD,MAAMA,GACfgJ,EAAK+uF,KAAOxpC,EAASvuD,QAChBg8G,GACDhzG,EAAKm1F,aAXTn1F,IAcJylD,WAAY,SAAU7wD,EAAMoC,GACxB,GAAIgJ,GAAO5G,IACN+F,GAAQvK,IAAWA,YAAgBtD,GAAMsD,KAAKD,kBAC/CC,GAAQA,KAER9E,EAAEiyC,cAAcntC,EAAK,KAAOA,EAAK,YAActD,GAAMsD,KAAKy1C,mBAAqBrqC,EAAKxG,QAAQ4nD,kBAC5FphD,EAAKge,WAAWppB,KAAKA,GACrBoL,EAAKhJ,MAAMA,GAASgJ,EAAKkyG,gBACzBlyG,EAAK8yG,eAAgB,IAG7BI,WAAY,SAAUl8G,EAAOytD,GACzB,GAAIvpD,GAAS9B,KAAKjI,QAAQ,GAAG4C,SAASqF,KAAK+3G,YAAYn6G,GACnDkE,KACAA,EAAOupD,SAAWA,IAG1B0wC,WAAY,WAAA,GACJn1F,GAAO5G,KACPg8F,IAAap1F,EAAKge,WAAW+D,OAAO/wB,OACpCmiH,EAAgD,IAAjCnzG,EAAKulD,SAASvuD,QAAQhG,MACrCmiH,IAAgBnzG,EAAKi0F,WAGrBj0F,EAAK8yG,gBAAkB9yG,EAAK60F,SAAWO,KACvCp1F,EAAK60F,QAAS,EACd70F,EAAK8yG,eAAgB,EACrB9yG,EAAKge,WAAWgjB,OAAOsyB,KAAK,WACxBtzD,EAAK60F,QAAS,MAI1B3uC,SAAU,WACN,MAAO9sD,MAAKmsD,SAASC,UAAYpsD,KAAK05G,eAE1Cl1D,YAAa,WACT,GAAI59C,GAAO5G,KAAMjI,EAAU6O,EAAK7O,QAASqI,EAAUwG,EAAKxG,QAASwkB,EAAaxkB,EAAQwkB,cACtFA,GAAa7e,EAAQ6e,IAAgBppB,KAAMopB,GAAeA,EAC1DA,EAAWkQ,OAAS/8B,EACpB6sB,EAAWykB,SACLtrB,MAAO3d,EAAQ4rD,gBACfjuC,MAAO3d,EAAQ4nD,iBAEjBphD,EAAKge,YAAche,EAAK+yE,gBACxB/yE,EAAKwvF,qBAELxvF,EAAKsqG,iBAAmBlrG,EAAMY,EAAKg0F,UAAWh0F,GAC9CA,EAAKizF,cAAgB7zF,EAAMY,EAAK6zF,UAAW7zF,IAE/CA,EAAKge,WAAa1sB,EAAMsD,KAAKE,WAAW2sC,OAAOzjB,GAAYxd,KAAKorC,EAAU5rC,EAAKsqG,kBAAkB9pG,KAAK,QAASR,EAAKizF,gBAExHj1C,OAAQ,WACJ,GAAIh+C,GAAO5G,KAAMjI,EAAU6O,EAAK7O,QAASukG,EAASvkG,EAAQmL,KAAK,QAAS+yB,EAAOqmE,EAAS5lG,EAAE,IAAM4lG,GAAUvkG,EAAQkgB,QAAQ,OACtHge,GAAK,KACLrvB,EAAK0vF,cAAgB,WACjB5sE,WAAW,WACP9iB,EAAKhJ,MAAMgJ,EAAKkyG,gBAChBlyG,EAAK6rE,kBAGb7rE,EAAKyvF,MAAQpgE,EAAKvwB,GAAG,QAASkB,EAAK0vF,iBAG3C5D,WAAY,WACR,GAAI90F,GAAQoC,KAAKI,QAAQxC,OAASoC,KAAKjI,QAAQ+0C,KAC/C9sC,MAAK21F,KAAO31F,KAAK84G,eAAiB94G,KAAK65G,iBAAiBj8G,IAE5Di8G,iBAAkB,SAAUj8G,GACxB,GAAIgJ,GAAO5G,IAcX,OAbc,QAAVpC,EACAA,KACOA,GAASlH,EAAEiyC,cAAc/qC,GAChCA,GAASgJ,EAAK6vF,OAAO74F,IACdA,GAASlH,EAAEiyC,cAAc/qC,EAAM,IACtCA,EAAQlH,EAAEsc,IAAIpV,EAAO,SAAU6oB,GAC3B,MAAO7f,GAAK6vF,OAAOhwE,KAEf1gB,EAAQnI,IAAYA,YAAiBrC,GAEtCwK,EAAQnI,KACfA,EAAQA,EAAM4I,SAFd5I,GAASA,GAINA,GAEX2gD,QAAS,WACL,GAAI33C,GAAO5G,KAAMpC,EAAQgJ,EAAKhJ,OACzB82C,GAAQ92C,EAAOgJ,EAAK+uF,QACrB/uF,EAAK+uF,KAAO/3F,EAAM4I,QAClBI,EAAKoB,QAAQyxB,GACb7yB,EAAK7O,QAAQiQ,QAAQyxB,IAEzB7yB,EAAKoqG,0BAET9sE,OAAQ,SAAUj8B,GAAV,GACArB,GAAO5G,KACPusC,EAAOtkC,EAAEskC,IACbtkC,GAAE9D,iBACFyC,EAAKi9B,QAAQ0I,GAAM2tB,KAAK,WACpBtzD,EAAK23C,UACL33C,EAAK2yG,YAGbthC,SAAU,SAAUhwE,GAAV,GA8FE29B,GA7FJh/B,EAAO5G,KACPjB,EAAMkJ,EAAEmuB,QACRijF,EAAMzyG,EAAKgyG,YACXzsD,EAAWvlD,EAAKulD,SAChBxgD,EAAUwgD,EAAS53B,QACnB+4B,EAAW1mD,EAAK9G,MAAMgtC,MACtBzuC,EAAQnG,EAAMC,QAAQkG,MAAMuI,EAAKvN,SACjCmK,EAAUoD,EAAKi3E,MAAMr6E,SACzB,IAAIzE,IAAQ4iB,EAAKU,KAAM,CAEnB,GADApa,EAAE9D,kBACGX,EAKD,MAJAoD,GAAKy1E,OACA1wE,GACDwgD,EAAS6uC,aAEb,CAEArvF,IACAwgD,EAASivC,YACJjvC,EAAS53B,SACV43B,EAAS+uC,aAGb/uC,EAAS6uC,iBAEV,IAAIj8F,IAAQ4iB,EAAKQ,GAChB3e,IACImI,GACAwgD,EAASmvC,YAERnvC,EAAS53B,SACV3tB,EAAK01E,SAGbr0E,EAAE9D,qBACC,IAAIpF,IAAQ4iB,EAAKO,OAAS7jB,GAASU,IAAQ4iB,EAAKS,OAAS/jB,EACvDivD,IACD+rD,EAAMA,EAAMA,EAAIr9E,OAAStlC,EAAEkQ,EAAKwxG,QAAQ,GAAG9X;AACvC+Y,EAAI,IACJzyG,EAAK+xG,WAAWU,QAGrB,IAAIt6G,IAAQ4iB,EAAKS,QAAU/jB,GAASU,IAAQ4iB,EAAKO,MAAQ7jB,GACvDivD,GAAY+rD,IACbA,EAAMA,EAAIj4D,OACVx6C,EAAK+xG,WAAWU,EAAI,GAAKA,EAAM,WAEhC,IAAIt6G,IAAQ4iB,EAAKK,OAASxe,EAC7BoD,EAAKi9B,QAAQl4B,GAASuuD,KAAK,WACvBtzD,EAAK23C,UACL33C,EAAK2yG,WAETtxG,EAAE9D,qBACC,IAAIpF,IAAQ4iB,EAAKM,IAChBze,EACAyE,EAAE9D,iBAEFyC,EAAK+xG,WAAW,MAEpB/xG,EAAK01E,YACF,IAAIv9E,IAAQ4iB,EAAKY,KAChB/e,EACA2oD,EAAS6uC,aACD1tC,IACR+rD,EAAMzyG,EAAKwxG,QAAQ,GAAGnuE,WAClBovE,GACAzyG,EAAK+xG,WAAWjiH,EAAE2iH,SAGvB,IAAIt6G,IAAQ4iB,EAAKW,IAChB9e,EACA2oD,EAAS+uC,YACD5tC,IACR+rD,EAAMzyG,EAAKwxG,QAAQ,GAAG9X,UAClB+Y,GACAzyG,EAAK+xG,WAAWjiH,EAAE2iH,SAGvB,IAAKt6G,IAAQ4iB,EAAKE,QAAU9iB,IAAQ4iB,EAAKG,WAAewrC,GAapD1mD,EAAKi3E,MAAMr6E,WAAczE,IAAQ4iB,EAAKe,UAAY3jB,IAAQ4iB,EAAKc,QAKtEmI,aAAahkB,EAAKovF,gBAClBtsE,WAAW,WACP9iB,EAAKsoE,WAETtoE,EAAK8pG,YARLzoG,EAAE9D,iBACEyhC,EAAY7mC,IAAQ4iB,EAAKe,SAAW,KACxCypC,EAAS2vC,WAAWl2D,EAAYumB,EAASlzC,qBAhB4B,CACrE,GAA6B,WAAzBrS,EAAKxG,QAAQk4G,QAIb,MAHAnsD,GAASvuD,UACTgJ,EAAK23C,UACL33C,EAAK2yG,SACL,CAEAx6G,KAAQ4iB,EAAKG,WAAcu3F,IAC3BA,EAAM3iH,EAAEkQ,EAAKwxG,QAAQ,GAAG9X,YAExB+Y,GAAOA,EAAI,IACXzyG,EAAKwyG,WAAWC,KAc5B5e,UAAW,WACP,GAAI7zF,GAAO5G,IACX4qB,cAAahkB,EAAK8zF,OAClB9zF,EAAK9G,MAAMoD,KAAK,aAAa,GAC7B0D,EAAKmrG,SAASz3G,SAASk3F,GACvB5qF,EAAKi0F,UAAW,EAChBj0F,EAAK8zF,MAAQ,KACb9zF,EAAK0tF,cAET0lB,iBAAkB,WACdh6G,KAAKF,MAAMoD,KAAK,aAAa,GAC7BlD,KAAK+xG,SAASpnD,YAAY6mC,GAC1BxxF,KAAKo0F,cAETwG,UAAW,WACP,GAAIh0F,GAAO5G,IACX4G,GAAKi0F,UAAW,EACZj0F,EAAK8zF,QAGT9zF,EAAK8zF,MAAQhxE,WAAW1jB,EAAMY,EAAKozG,iBAAkBpzG,GAAO,OAEhE6rE,aAAc,SAAUz4E,EAAMigH,GAAhB,GACNrzG,GAAO5G,KACPF,EAAQ8G,EAAK9G,MACbsnG,EAAS50F,IACT+K,EAAc3W,EAAKxG,QAAQmd,YAC3Bo8F,EAAa75G,EAAMgtC,MACnB2kE,EAAW3xG,EAAM,KAAOsnG,EACxB8S,EAAWP,EAAW/hH,MACrB65G,KAAY7qG,EAAKxG,QAAQm4G,WAAaoB,IAAep8F,IACtD28F,EAAW,EACXP,EAAa,IAEb3/G,IAASpD,IACToD,GAAO,EACH8F,EAAM,KAAOsnG,IACbptG,GAAQ4M,EAAKulD,SAASoqC,oBAAoB,KAGlD3vF,EAAK+pG,MAAQgJ,EACb75G,EAAMsB,YAAY,aAAcpH,GAAM8yC,IAAI9yC,EAAOujB,EAAco8F,GAC3DlI,IAAawI,GACb/hH,EAAM+7B,MAAMn0B,EAAM,GAAIo6G,EAAUA,GAEpCtzG,EAAKsoE,UAETA,OAAQ,WACJ,GAAmHirC,GAA/GvzG,EAAO5G,KAAM3G,EAAUuN,EAAKvN,QAAS+gH,EAAe/gH,EAAQJ,QAASs/E,EAAO3xE,EAAKksG,MAAM19E,KAAKxuB,EAAK9G,MAAMgtC,MACtGzzC,GAAQU,GAAG,YAKZogH,EAAY5hC,EAAKt/E,QAAU,IAJ3Bs/E,EAAKzhD,SAASv5B,SAASmC,iBACvB06G,EAAeD,EAAY5hC,EAAKt/E,QAAU,GAC1Cs/E,EAAKzhD,SAASz9B,IAIlBuN,EAAK9G,MAAM7G,MAAMkhH,EAAYC,EAAeA,EAAeD,IAE/D5T,QAAS,SAAUnK,EAAWD,EAAU9wC,GACpC,GAAIvpD,GAAS,SAeb,OAdIs6F,KAAcxlG,IACdwlG,GAAa,GACTA,EAAUl+F,QAAQ,YAClBk+F,EAAYA,EAAUjlG,QAAQ26F,EAAY,WAE9ChwF,GAAU,WAAas6F,EAAY,KAEnC/wC,IACAvpD,GAAU,aAEdA,GAAU,IACNq6F,IAAavlG,IACbkL,GAAU5J,EAAMqJ,WAAW46F,IAExBr6F,GAAU,aAErBi8F,QAAS,SAAUviG,GAAV,GAID4vD,GAEA3kC,EACA7oB,EACAD,EAIA48F,EACAwe,EAZAsB,EAAgBr6G,KAAKmsD,SAASoqC,oBAC9BrkF,EAASlS,KAAKmsD,SAASvuD,QACvBhG,EAAS4D,EAAK5D,OAEdwI,EAAU,EASd,KALI8R,EAAOta,SAAWyiH,EAAcziH,SAChCyiH,EAAgBr6G,KAAKs6G,oBAAoBpoG,IAEzCqoF,KACAwe,KACCp7G,EAAM,EAAGA,EAAM/F,EAAQ+F,IACxB8oB,EAAWjrB,EAAKmC,GAChBC,EAAQoC,KAAKy2F,OAAOhwE,GACpB2kC,EAAgBprD,KAAKu6G,mBAAmB38G,EAAOy8G,GAC3CjvD,QACAivD,EAAcjyG,OAAOgjD,EAAe,GAExC2tD,EAAWn7G,GAASD,EACpByC,GAAWJ,KAAKumG,QAAQ3oG,EAAOoC,KAAKw2F,MAAM/vE,GAAW2kC,OAEzD,IAAIivD,EAAcziH,OACd,IAAK+F,EAAM,EAAGA,EAAM08G,EAAcziH,OAAQ+F,IACtC8oB,EAAW4zF,EAAc18G,GACzBC,EAAQoC,KAAKy2F,OAAOhwE,GACpB8zE,EAAO38F,GAAShG,EAChBmhH,EAAWn7G,GAAShG,EACpBA,GAAU,EACVwI,GAAWJ,KAAKumG,QAAQ3oG,EAAOoC,KAAKw2F,MAAM/vE,IAAW,EAG7DzmB,MAAKg4G,eAAiBzd,EACtBv6F,KAAK+3G,YAAcgB,EACnB/4G,KAAKjI,QAAQ2K,KAAKtC,IAEtBk6G,oBAAqB,SAAUpoG,GAAV,GAIbq6B,GACK5uC,EAJLkrD,EAAa7oD,KAAKI,QAAQ4nD,eAC1BtX,EAAY1wC,KAAKI,QAAQ4rD,cACzBhtD,IAEJ,KAASrB,EAAM,EAAGA,EAAMuU,EAAOta,OAAQ+F,IACnC4uC,KACAA,EAAKsc,GAAc32C,EAAOvU,GAC1B4uC,EAAKmE,GAAax+B,EAAOvU,GACzBqB,EAAO8I,KAAKykC,EAEhB,OAAOvtC,IAEXu7G,mBAAoB,SAAU38G,EAAOy8G,GAGjC,IAHgB,GACZrB,GAAch5G,KAAKy2F,OACnB94F,EAAM,EACHA,EAAM08G,EAAcziH,OAAQ+F,IAC/B,GAAIC,IAAUo7G,EAAYqB,EAAc18G,IACpC,MAAOA,EAGf,WAEJ+yG,QAAS,WACL,GAAI9pG,GAAO5G,IACX4G,GAAKovF,eAAiBtsE,WAAW,WAC7B,GAAI9rB,GAAQgJ,EAAKmvF,aACbnvF,GAAK+pG,QAAU/yG,IACfgJ,EAAK+pG,MAAQ/yG,EACbgJ,EAAKolB,OAAOpuB,GACZgJ,EAAKoqG,2BAEVpqG,EAAKxG,QAAQwzB,QAEpBo9E,uBAAwB,WAChBhxG,KAAKpC,QAAQhG,QAAUoI,KAAKF,MAAMgtC,OAAS9sC,KAAKF,MAAMgtC,QAAU9sC,KAAKI,QAAQmd,YAC7Evd,KAAKs0F,aAELt0F,KAAKo0F,cAGbsB,cAAe,WACX,MAAO11F,MAAKo2E,mBAAqB6b,EAAKhuF,GAAGyxF,cAAcvtF,KAAKnI,OAEhEo2E,gBAAiB,WACb,GAAI19E,GAAMsH,KAAKI,QAAQo4G,gBACvB,OAAe,QAAR9/G,GAAgBA,EAAMsH,KAAKmsD,SAASvuD,QAAQhG,QAEvD4iH,iBAAkB,SAAUl0F,GACxB,GAAI1f,GAAO5G,IACX4G,GAAKke,QAAQwB,EAAK,WACd,OACIC,SAAU3f,EAAKwxG,QAAQ,GAAGz9G,SAC1Ba,KAAM9E,EAAEsc,IAAIpM,EAAKuf,YAAa,SAAUM,GACpC,OAASA,SAAUA,SAKnCmrF,aAAc,SAAU1S,EAAOlK,GAAjB,GAMNylB,GACAC,EACA/8G,EAPAiJ,EAAO5G,KACPkS,EAAStL,EAAKhJ,QACdqqC,EAAQrhC,EAAKge,WAAWqjB,QACxBmwE,EAAUxxG,EAAKwxG,QACf90F,EAAS1c,EAAK6vF,MAKlB,IADA7vF,EAAK4zG,iBAAiB,WACO,aAAzB5zG,EAAKxG,QAAQk4G,QAAwB,CACrC,IAAK36G,EAAMq3F,EAAQp9F,OAAS,EAAG+F,KAAUA,IACrC88G,EAAczlB,EAAQr3F,GACtBy6G,EAAQ,GAAGpgG,YAAYogG,EAAQ,GAAGz9G,SAAS8/G,EAAYpkD,WACvDzvD,EAAKkzG,WAAWx2F,EAAOm3F,EAAYh0F,WAAW,EAElD,KAAK9oB,EAAM,EAAGA,EAAMuhG,EAAMtnG,OAAQ+F,IAC9B+8G,EAAYxb,EAAMvhG,GAClBy6G,EAAQt0D,OAAOl9C,EAAK8xG,YAAYgC,EAAUj0F,WAC1C7f,EAAKkzG,WAAWx2F,EAAOo3F,EAAUj0F,WAAW,OAE7C,CAaH,MAZK7f,EAAK+zG,WAAa/zG,EAAK+zG,UAAY1yE,KACpCrhC,EAAK+zG,UAAY1yE,GAErBmwE,EAAQ11G,KAAK,IACTwP,EAAOta,QACPwgH,EAAQt0D,OAAOl9C,EAAK8xG,aAChBxmG,OAAQA,EACRiU,UAAWvf,EAAKuf,YAChBy0F,SAAUh0G,EAAK+zG,UACfE,aAAc5yE,KAGjBtqC,EAAMq3F,EAAQp9F,OAAS,EAAG+F,KAAUA,IACrCiJ,EAAKkzG,WAAWx2F,EAAO0xE,EAAQr3F,GAAK8oB,WAAW,EAEnD,KAAK9oB,EAAM,EAAGA,EAAMuhG,EAAMtnG,OAAQ+F,IAC9BiJ,EAAKkzG,WAAWx2F,EAAO47E,EAAMvhG,GAAK8oB,WAAW,GAGrD7f,EAAK4zG,iBAAiB,WACtB5zG,EAAK6rE,gBAET5uC,QAAS,SAAU4jD,GAAV,GAKD7gF,GACAulD,EACA1lC,EACAq0F,EAPApmD,EAAWh+D,EAAEylD,WAAWC,SAC5B,OAAKqrC,IAGD7gF,EAAO5G,KACPmsD,EAAWvlD,EAAKulD,SAChB1lC,EAAW0lC,EAASuvC,gBAAgBvvC,EAASwvC,gBAAgBlU,IAC7DqzB,EAAarzB,EAAU5tF,SAAS,oBAChC+M,EAAKsvF,SAAWyhB,IAChB/wG,EAAKsvF,OAAS,IAEbtvF,EAAKwvE,kBAGNxvE,EAAKoB,QAAQ8yG,EAAalD,EAAWn4E,GACjChZ,SAAUA,EACV8lB,KAAMk7C,KAEV7gF,EAAK2yG,SACE7kD,GAEJvI,EAASr3B,OAAO2yD,GAAWvtB,KAAK,WACnCtzD,EAAK6rE,eACD7rE,EAAKsvF,SAAWwhB,IAChB9wG,EAAKsvF,OAASuhB,EACdtrD,EAASyyC,YAAW,MAbjBlqC,GAVAA,GA2Bfy2C,OAAQ,WAAA,GACAvkG,GAAO5G,KACPjI,EAAU6O,EAAK7O,QACfw/G,EAAYx/G,EAAQ,GAAGw/G,UACvBz3G,EAAQ8G,EAAKm0G,cAAcpgH,SAAS,gBACnCmF,GAAM,KACPA,EAAQpJ,EAAE,iDAAiDogC,SAASlwB,EAAKm0G,gBAE7EhjH,EAAQqtB,WAAW,aACnBxe,EAAKosF,SAAWpsF,EAAK9G,MAAQA,EAAMoD,MAC/B6yG,UAAawB,EACb3G,aAAgB,MAChB7sF,KAAQ,UACRsW,MAAStiC,EAAQ,GAAGsiC,MACpB00E,iBAAiB,KAGzBkJ,SAAU,WACN,GAAIrxG,GAAO5G,KAAMo4G,EAAUxxG,EAAKm0G,cAAcpgH,SAAS,KAClDy9G,GAAQ,KACTA,EAAU1hH,EAAE,0DAA0DogC,SAASlwB,EAAKm0G,gBAExFn0G,EAAKwxG,QAAUA,GAEnBC,aAAc,WAAA,GAMN2C,GALAp0G,EAAO5G,KACPI,EAAUwG,EAAKxG,QACfs4G,EAAct4G,EAAQs4G,YACtBuC,EAAgB76G,EAAQwkB,WACxBs2F,EAAiC,aAApB96G,EAAQk4G,OAErB1xG,GAAK7O,QAAQ,GAAGH,SAAWqjH,IAC3B76G,EAAQ4rD,cAAgB5rD,EAAQ4rD,eAAiB,OACjD5rD,EAAQ4nD,eAAiB5nD,EAAQ4nD,gBAAkB,SAEvDgzD,EAAkBE,EAAahjH,EAAMuK,SAAS,KAAOvK,EAAMuL,KAAKrD,EAAQ4rD,cAAe,QAAU,KAAO1jD,cAAc,IAAWpQ,EAAMuK,SAAS,qCAChJmE,EAAKqyG,gBAAkBP,EAAcA,EAAcxgH,EAAMuK,SAASi2G,GAAesC,EACjFp0G,EAAK8xG,YAAc,SAAUl9G,GACzB,MAAO,kEAAoEk9G,EAAYl9G,GAAQ,+CAAiD0/G,EAAa,SAAW,QAAU,2CAA6CA,EAAa,YAAc,qBAAuB,0BAGzR3K,QAAS,WACLvwG,KAAK+xG,SAAWr7G,EAAE,mCAAqC86F,EAAc,aAAa1vB,YAAY9hE,KAAKF,QAEvG0wG,aAAc,WACVxwG,KAAKq0F,OAAS39F,EAAE,wFAAwFwM,MACpG6gB,KAAQ,SACR28D,cAEA1gF,KAAKI,QAAQ6wG,aACbjxG,KAAKq0F,OAAOvyB,YAAY9hE,KAAKF,QAGrCo4G,eAAgB,WACZ,GAAIiD,GAAiBjjH,EAAMiF,kBAAkB6C,KAAKF,MAAM,GAAIxC,EAC5D69G,GAAe9kD,SAAW,WAC1B8kD,EAAejuC,WAAa,SAC5BiuC,EAAe77G,UACf67G,EAAexiH,WACfqH,KAAK8yG,MAAQp8G,EAAE,WAAWuB,IAAIkjH,GAAgBrkF,SAAS92B,KAAK3G,UAEhEs1G,SAAU,WACN,GAAI/nG,GAAO5G,KAAMjI,EAAU6O,EAAK7O,QAASsB,EAAUtB,EAAQ6B,OAAO,qBAC7DP,GAAQ,KACTA,EAAUtB,EAAQe,KAAK,qEAAqEc,SAC5FP,EAAQ,GAAGS,MAAM6d,QAAU5f,EAAQ,GAAG+B,MAAM6d,QAC5Cte,EAAQ,GAAGghC,MAAQtiC,EAAQ,GAAGsiC,MAC9B3jC,EAAE,oEAAoEw0D,aAAanzD,IAEvF6O,EAAKvN,QAAUA,EAAQiB,SAASvC,EAAQ,GAAGkG,WAAWhG,IAAI,UAAW,IACrE2O,EAAKm0G,cAAgBrkH,EAAE2C,EAAQ,GAAG4wC,cAmB1C5oB,GAAG8G,OAAO2/B,IACZnxD,OAAOuB,MAAM2sB,QACRluB,OAAOuB,OACE,kBAAVzB,SAAwBA,OAAOgiC,IAAMhiC,OAAS,SAAUiiC,EAAIC,EAAIC,IACrEA,GAAMD,OAEV,SAAUniC,EAAGC,QACVA,OAAO,eAAgB,cAAeD,IACxC,WAwTE,QAAS4kH,GAAI1lE,EAAGz8C,EAAOzB,GACP,SAARA,IACAA,EAAM,IAGV,KADA,GAAIwH,GAAS02C,EAAEnsC,SAAS,IACjBtQ,EAAQ+F,EAAOpH,QAClBoH,EAASxH,EAAMwH,CAEnB,OAAOA,GAsGX,QAASq8G,GAAQC,EAAGC,EAAGtqG,GACnB,GAAIC,GAAID,CAOR,OANIC,GAAI,IACJA,GAAK,GAELA,EAAI,IACJA,GAAK,GAELA,EAAI,EAAI,EACDoqG,EAAc,GAATC,EAAID,GAASpqG,EAEzBA,EAAI,GACGqqG,EAEPrqG,EAAI,EAAI,EACDoqG,GAAKC,EAAID,IAAM,EAAI,EAAIpqG,GAAK,EAEhCoqG,EAEX,QAASE,GAAW59G,EAAOylB,GAA3B,GACQtS,GAAG0a,EAOHgwF,CANJ,IAAa,MAAT79G,GAA2B,SAAVA,EACjB,MAAO,KAEX,IAAIA,YAAiB89G,GACjB,MAAO99G,EAGX,IADI69G,EAAQ79G,EAAMd,cACdiU,EAAI4qG,EAAiBtsG,KAAKosG,GAO1B,MALIA,GADS,gBAAT1qG,EAAE,GACM,GAAI6qG,GAAI,EAAG,EAAG,EAAG,GAEjBJ,EAAWK,EAAY9qG,EAAE,IAAKsS,GAE1Co4F,EAAMnjH,OAASyY,EAAE,IACV0qG,CAeX,KAbI1qG,EAAI,gDAAgD1B,KAAKosG,IACzDhwF,EAAM,GAAIqwF,GAAMzpG,SAAStB,EAAE,GAAI,IAAKsB,SAAStB,EAAE,GAAI,IAAKsB,SAAStB,EAAE,GAAI,IAAK,IACrEA,EAAI,uCAAuC1B,KAAKosG,IACvDhwF,EAAM,GAAIqwF,GAAMzpG,SAAStB,EAAE,GAAKA,EAAE,GAAI,IAAKsB,SAAStB,EAAE,GAAKA,EAAE,GAAI,IAAKsB,SAAStB,EAAE,GAAKA,EAAE,GAAI,IAAK,IAC1FA,EAAI,uDAAuD1B,KAAKosG,IACvEhwF,EAAM,GAAIqwF,GAAMzpG,SAAStB,EAAE,GAAI,IAAKsB,SAAStB,EAAE,GAAI,IAAKsB,SAAStB,EAAE,GAAI,IAAK,IACrEA,EAAI,wEAAwE1B,KAAKosG,IACxFhwF,EAAM,GAAIqwF,GAAMzpG,SAAStB,EAAE,GAAI,IAAKsB,SAAStB,EAAE,GAAI,IAAKsB,SAAStB,EAAE,GAAI,IAAK5O,WAAW4O,EAAE,MAClFA,EAAI,qFAAqF1B,KAAKosG,IACrGhwF,EAAM,GAAImwF,GAAIz5G,WAAW4O,EAAE,IAAM,IAAK5O,WAAW4O,EAAE,IAAM,IAAK5O,WAAW4O,EAAE,IAAM,IAAK,IAC/EA,EAAI,sGAAsG1B,KAAKosG,MACtHhwF,EAAM,GAAImwF,GAAIz5G,WAAW4O,EAAE,IAAM,IAAK5O,WAAW4O,EAAE,IAAM,IAAK5O,WAAW4O,EAAE,IAAM,IAAK5O,WAAW4O,EAAE,MAEnG0a,EACAA,EAAInzB,MAAQyY,MACT,KAAKsS,EACR,KAAUva,OAAM,uBAAyB2yG,EAE7C,OAAOhwF,GA7db,GAUM50B,GACAsB,EACA0jH,EAqJAtiH,EACAoiH,EACK7gH,EAML4gH,EA+CAE,EA4EAE,EA8BAC,EAiEAC,EA4FAC,CAtdJtlH,QAAOuB,MAAQvB,OAAOuB,UAClBrB,EAAQqB,MAAMrB,MACdsB,EAAUD,MAAMC,QAChB0jH,GACAK,UAAW,SACXC,aAAc,SACdC,KAAM,SACNC,WAAY,SACZC,MAAO,SACPC,MAAO,SACPC,OAAQ,SACRC,MAAO,SACPC,eAAgB,SAChBC,KAAM,SACNC,WAAY,SACZC,MAAO,SACPC,UAAW,SACXC,UAAW,SACXC,WAAY,SACZC,UAAW,SACXC,MAAO,SACPC,eAAgB,SAChBC,SAAU,SACVC,QAAS,SACTC,KAAM,SACNC,SAAU,SACVC,SAAU,SACVC,cAAe,SACfC,SAAU,SACVC,SAAU,SACVC,UAAW,SACXC,UAAW,SACXC,YAAa,SACbC,eAAgB,SAChBC,WAAY,SACZC,WAAY,SACZC,QAAS,SACTC,WAAY,SACZC,aAAc,SACdC,cAAe,SACfC,cAAe,SACfC,cAAe,SACfC,cAAe,SACfC,WAAY,SACZC,SAAU,SACVC,YAAa,SACbC,QAAS,SACTC,QAAS,SACTC,WAAY,SACZC,UAAW,SACXC,YAAa,SACbC,YAAa,SACbC,QAAS,SACTC,UAAW,SACXC,WAAY,SACZC,KAAM,SACNC,UAAW,SACXC,KAAM,SACNC,KAAM,SACNC,MAAO,SACPC,YAAa,SACbC,SAAU,SACVC,QAAS,SACTC,UAAW,SACXC,OAAQ,SACRC,MAAO,SACPC,MAAO,SACPC,SAAU,SACVC,cAAe,SACfC,UAAW,SACXC,aAAc,SACdC,UAAW,SACXC,WAAY,SACZC,UAAW,SACXC,qBAAsB,SACtBC,UAAW,SACXC,UAAW,SACXC,WAAY,SACZC,UAAW,SACXC,YAAa,SACbC,cAAe,SACfC,aAAc,SACdC,eAAgB,SAChBC,eAAgB,SAChBC,eAAgB,SAChBC,YAAa,SACbC,KAAM,SACNC,UAAW,SACXC,MAAO,SACPC,QAAS,SACTC,OAAQ,SACRC,iBAAkB,SAClBC,WAAY,SACZC,aAAc,SACdC,aAAc,SACdC,eAAgB,SAChBC,gBAAiB,SACjBC,kBAAmB,SACnBC,gBAAiB,SACjBC,gBAAiB,SACjBC,aAAc,SACdC,UAAW,SACXC,UAAW,SACXC,SAAU,SACVC,YAAa,SACbC,KAAM,SACNC,QAAS,SACTC,MAAO,SACPC,UAAW,SACXC,OAAQ,SACRC,UAAW,SACXC,OAAQ,SACRC,cAAe,SACfC,UAAW,SACXC,cAAe,SACfC,cAAe,SACfC,WAAY,SACZC,UAAW,SACXC,KAAM,SACNC,KAAM,SACNC,KAAM,SACNC,WAAY,SACZC,OAAQ,SACRC,IAAK,SACLC,UAAW,SACXC,UAAW,SACXC,YAAa,SACbC,OAAQ,SACRC,WAAY,SACZC,SAAU,SACVC,SAAU,SACVC,OAAQ,SACRC,OAAQ,SACRC,QAAS,SACTC,UAAW,SACXC,UAAW,SACXC,UAAW,SACXC,KAAM,SACNC,YAAa,SACbC,UAAW,SACXC,IAAK,SACLC,KAAM,SACNC,QAAS,SACTC,OAAQ,SACRC,UAAW,SACXC,OAAQ,SACRC,MAAO,SACPC,MAAO,SACPC,WAAY,SACZC,OAAQ,SACRC,YAAa,UAEb7rH,EAAUpB,EAAQoB,QAClBoiH,GAAoB,cACxB,KAAS7gH,IAAK+gH,GACNA,EAAYn/G,eAAe5B,IAC3B6gH,EAAiB7zG,KAAKhN,EAG9B6gH,GAAuB5/G,OAAO,KAAO4/G,EAAiBzkH,KAAK,KAAO,WAAY,KAC1EwkH,EAAY7kH,EAAM6J,QAClBC,KAAM,aAEN0kH,MAAO,WACH,MAAOrlH,OAEXslH,MAAO,WACH,MAAOtlH,OAEXulH,MAAO,WACH,MAAOvlH,MAAKwlH,UAAUD,SAE1BC,QAAS,WACL,MAAOxlH,OAEXylH,MAAO,WACH,MAAO,IAAMzlH,KAAKulH,SAEtBG,UAAW,WACP,GAAIC,GAAM3lH,KAAKwlH,SACf,OAAO,QAAUG,EAAIC,EAAI,KAAOD,EAAI9oH,EAAI,KAAO8oH,EAAI9iH,EAAI,KAAOV,aAAkBnC,KAAK4C,GAAGmP,QAAQ,IAAM,KAE1G8zG,UAAW,WACP,MAAItsH,GAAQgB,MAAQhB,EAAQkB,QAAU,EAC3BuF,KAAKylH,QAETzlH,KAAK0lH,aAEhBvvE,OAAQ,SAAU/sC,GACd,MAAOA,KAAMpJ,MAAc,OAANoJ,GAAcpJ,KAAK0lH,cAAgBlK,EAAWpyG,GAAGs8G,aAE1Epc,KAAM,SAAUwc,GAAV,GAIEC,GACAC,CAJJ,OAAc,QAAVF,EACOG,KAEPF,EAAK/lH,KAAKwlH,UACVQ,EAAKF,EAAMN,UACR5mH,KAAK8/B,KAAK9/B,KAAKi8D,IAAoB,IAAfkrD,EAAGH,EAAII,EAAGJ,GAAU,GAAKhnH,KAAKi8D,IAAoB,KAAfkrD,EAAGlpH,EAAImpH,EAAGnpH,GAAW,GAAK+B,KAAKi8D,IAAoB,KAAfkrD,EAAGljH,EAAImjH,EAAGnjH,GAAW,MAE3H1G,MAAO,WACH,GAAIiN,GAAIpJ,KAAKwlH,SAIb,OAHIp8G,KAAMpJ,OACNoJ,EAAI,GAAI0yG,GAAM1yG,EAAEw8G,EAAGx8G,EAAEvM,EAAGuM,EAAEvG,EAAGuG,EAAExG,IAE5BwG,KAGXwyG,EAAMF,EAAUh7G,QAChBC,KAAM,SAAUilH,EAAG/oH,EAAGgG,EAAGD,GACrB84G,EAAUz3G,GAAGtD,KAAKwH,KAAKnI,MACvBA,KAAK4lH,EAAIA,EACT5lH,KAAKnD,EAAIA,EACTmD,KAAK6C,EAAIA,EACT7C,KAAK4C,EAAIA,GAEbyiH,MAAO,WAAA,GASCa,GAAGj1G,EARHk1G,EAAMnmH,KACN4lH,EAAIO,EAAIP,EACR/oH,EAAIspH,EAAItpH,EACRgG,EAAIsjH,EAAItjH,EACRmP,EAAMpT,KAAKoT,IAAI4zG,EAAG/oH,EAAGgG,GACrBnK,EAAMkG,KAAKlG,IAAIktH,EAAG/oH,EAAGgG,GACrBwwB,EAAQ36B,EAAMsZ,EACdtI,EAAIhR,CAER,OAAc,KAAV26B,EACO,GAAI0oF,GAAI,EAAG,EAAGryG,EAAG1J,KAAK4C,IAErB,IAARlK,GACAuY,EAAIoiB,EAAQ36B,EAERwtH,EADAN,IAAMltH,GACDmE,EAAIgG,GAAKwwB,EACPx2B,IAAMnE,EACT,GAAKmK,EAAI+iH,GAAKvyF,EAEd,GAAKuyF,EAAI/oH,GAAKw2B,EAEtB6yF,GAAK,GACDA,EAAI,IACJA,GAAK,OAGTj1G,EAAI,EACJi1G,MAEG,GAAInK,GAAImK,EAAGj1G,EAAGvH,EAAG1J,KAAK4C,KAEjCwjH,MAAO,WAAA,GAOCF,GAAGj1G,EAICN,EAVJw1G,EAAMnmH,KACN4lH,EAAIO,EAAIP,EACR/oH,EAAIspH,EAAItpH,EACRgG,EAAIsjH,EAAItjH,EACRnK,EAAMkG,KAAKlG,IAAIktH,EAAG/oH,EAAGgG,GACrBmP,EAAMpT,KAAKoT,IAAI4zG,EAAG/oH,EAAGgG,GACfwjH,GAAK3tH,EAAMsZ,GAAO,CAC5B,IAAItZ,IAAQsZ,EACRk0G,EAAIj1G,EAAI,MACL,CAGH,OAFIN,EAAIjY,EAAMsZ,EACdf,EAAIo1G,EAAI,GAAM11G,GAAK,EAAIjY,EAAMsZ,GAAOrB,GAAKjY,EAAMsZ,GACvCtZ,GACR,IAAKktH,GACDM,GAAKrpH,EAAIgG,GAAK8N,GAAK9T,EAAIgG,EAAI,EAAI,EAC/B,MACJ,KAAKhG,GACDqpH,GAAKrjH,EAAI+iH,GAAKj1G,EAAI,CAClB,MACJ,KAAK9N,GACDqjH,GAAKN,EAAI/oH,GAAK8T,EAAI,EAKtBu1G,GAAK,GACLj1G,GAAK,IACLo1G,GAAK,IAET,MAAO,IAAIrK,GAAIkK,EAAGj1G,EAAGo1G,EAAGrmH,KAAK4C,IAEjC4iH,QAAS,WACL,MAAO,IAAI1J,GAAe,IAAT97G,KAAK4lH,EAAkB,IAAT5lH,KAAKnD,EAAkB,IAATmD,KAAK6C,EAAS7C,KAAK4C,MAGpEk5G,EAAQF,EAAIl7G,QACZC,KAAM,SAAUilH,EAAG/oH,EAAGgG,EAAGD,GACrBg5G,EAAI33G,GAAGtD,KAAKwH,KAAKnI,KAAMpB,KAAK6Q,MAAMm2G,GAAIhnH,KAAK6Q,MAAM5S,GAAI+B,KAAK6Q,MAAM5M,GAAID,IAExE0iH,MAAO,WACH,MAAO,IAAI1J,GAAI57G,KAAK4lH,EAAI,IAAK5lH,KAAKnD,EAAI,IAAKmD,KAAK6C,EAAI,IAAK7C,KAAK4C,IAElEyiH,MAAO,WACH,MAAOrlH,MAAKslH,QAAQD,SAExBe,MAAO,WACH,MAAOpmH,MAAKslH,QAAQc,SAExBb,MAAO,WACH,MAAOnK,GAAIp7G,KAAK4lH,EAAG,GAAKxK,EAAIp7G,KAAKnD,EAAG,GAAKu+G,EAAIp7G,KAAK6C,EAAG,IAEzD2iH,QAAS,WACL,MAAOxlH,SAaX+7G,EAAML,EAAUh7G,QAChBC,KAAM,SAAUulH,EAAGj1G,EAAGvH,EAAG9G,GACrB84G,EAAUz3G,GAAGtD,KAAKwH,KAAKnI,MACvBA,KAAKkmH,EAAIA,EACTlmH,KAAKiR,EAAIA,EACTjR,KAAK0J,EAAIA,EACT1J,KAAK4C,EAAIA,GAEb0iH,MAAO,WAAA,GAKCM,GAAG/oH,EAAGgG,EAKF/H,EACAtE,EACA8kH,EACAC,EACArqG,EAbJi1G,EAAMnmH,KACNkmH,EAAIC,EAAID,EACRj1G,EAAIk1G,EAAIl1G,EACRvH,EAAIy8G,EAAIz8G,CAEZ,IAAU,IAANuH,EACA20G,EAAI/oH,EAAIgG,EAAI6G,MAQZ,QANAw8G,GAAK,GACDprH,EAAI8D,KAAKpE,MAAM0rH,GACf1vH,EAAI0vH,EAAIprH,EACRwgH,EAAI5xG,GAAK,EAAIuH,GACbsqG,EAAI7xG,GAAK,EAAIuH,EAAIza,GACjB0a,EAAIxH,GAAK,EAAIuH,GAAK,EAAIza,IAClBsE,GACR,IAAK,GACD8qH,EAAIl8G,EACJ7M,EAAIqU,EACJrO,EAAIy4G,CACJ,MACJ,KAAK,GACDsK,EAAIrK,EACJ1+G,EAAI6M,EACJ7G,EAAIy4G,CACJ,MACJ,KAAK,GACDsK,EAAItK,EACJz+G,EAAI6M,EACJ7G,EAAIqO,CACJ,MACJ,KAAK,GACD00G,EAAItK,EACJz+G,EAAI0+G,EACJ14G,EAAI6G,CACJ,MACJ,KAAK,GACDk8G,EAAI10G,EACJrU,EAAIy+G,EACJz4G,EAAI6G,CACJ,MACJ,SACIk8G,EAAIl8G,EACJ7M,EAAIy+G,EACJz4G,EAAI04G,EAIZ,MAAO,IAAIK,GAAIgK,EAAG/oH,EAAGgG,EAAG7C,KAAK4C,IAEjCwjH,MAAO,WACH,MAAOpmH,MAAKslH,QAAQc,SAExBZ,QAAS,WACL,MAAOxlH,MAAKslH,QAAQE,aAGxBxJ,EAAMN,EAAUh7G,QAChBC,KAAM,SAAUulH,EAAGj1G,EAAGo1G,EAAGzjH,GACrB84G,EAAUz3G,GAAGtD,KAAKwH,KAAKnI,MACvBA,KAAKkmH,EAAIA,EACTlmH,KAAKiR,EAAIA,EACTjR,KAAKqmH,EAAIA,EACTrmH,KAAK4C,EAAIA,GAEb0iH,MAAO,WAAA,GAKCM,GAAG/oH,EAAGgG,EAOF04G,EACAD,EAZJ6K,EAAMnmH,KACNkmH,EAAIC,EAAID,EACRj1G,EAAIk1G,EAAIl1G,EACRo1G,EAAIF,EAAIE,CAcZ,OAZU,KAANp1G,EACA20G,EAAI/oH,EAAIgG,EAAIwjH,GAEZH,GAAK,IACLj1G,GAAK,IACLo1G,GAAK,IACD9K,EAAI8K,EAAI,GAAMA,GAAK,EAAIp1G,GAAKo1G,EAAIp1G,EAAIo1G,EAAIp1G,EACxCqqG,EAAI,EAAI+K,EAAI9K,EAChBqK,EAAIvK,EAAQC,EAAGC,EAAG2K,EAAI,EAAI,GAC1BrpH,EAAIw+G,EAAQC,EAAGC,EAAG2K,GAClBrjH,EAAIw4G,EAAQC,EAAGC,EAAG2K,EAAI,EAAI,IAEvB,GAAItK,GAAIgK,EAAG/oH,EAAGgG,EAAG7C,KAAK4C,IAEjCyiH,MAAO,WACH,MAAOrlH,MAAKslH,QAAQD,SAExBG,QAAS,WACL,MAAOxlH,MAAKslH,QAAQE,aA4DxBvJ,EAAQplH,EAAM6J,QACdC,KAAM,SAAU/C,GAAV,GAGMqY,GACAqwG,EACK3oH,EACD4oH,EACAC,EACA/9G,EAEIg+G,EATZC,EAAS1mH,IACb,IAAyB,IAArBjF,UAAUnD,OAGV,IAFIqe,EAAUgmG,EAAMhmG,QAChBqwG,EAAgBtmH,KAAK2mH,aAAa/oH,GAC7BD,EAAM,EAAGA,EAAMsY,EAAQre,OAAQ+F,IAChC4oH,EAActwG,EAAQtY,GAAKipH,GAC3BJ,EAAYvwG,EAAQtY,GAAK+6C,QACzBjwC,EAAQ89G,EAAYl3G,KAAKi3G,GACzB79G,IACIg+G,EAAWD,EAAU/9G,GACzBi+G,EAAOd,EAAIa,EAAS,GACpBC,EAAO7pH,EAAI4pH,EAAS,GACpBC,EAAO7jH,EAAI4jH,EAAS,QAI5BzmH,MAAK4lH,EAAI7qH,UAAU,GACnBiF,KAAKnD,EAAI9B,UAAU,GACnBiF,KAAK6C,EAAI9H,UAAU,EAEvBiF,MAAK4lH,EAAI5lH,KAAK6mH,cAAc7mH,KAAK4lH,GACjC5lH,KAAKnD,EAAImD,KAAK6mH,cAAc7mH,KAAKnD,GACjCmD,KAAK6C,EAAI7C,KAAK6mH,cAAc7mH,KAAK6C,IAErC0iH,MAAO,WAAA,GACC/tH,GAAMwI,KAAK8mH,SACXlB,EAAI5lH,KAAK4lH,EAAEr8G,SAAS,IACpB1M,EAAImD,KAAKnD,EAAE0M,SAAS,IACpB1G,EAAI7C,KAAK6C,EAAE0G,SAAS,GACxB,OAAO,IAAM/R,EAAIouH,GAAKpuH,EAAIqF,GAAKrF,EAAIqL,IAEvC8jH,aAAc,SAAU/oH,GACpB,GAAI69G,GAAQ79G,GAAS,OAOrB,OANwB,MAApB69G,EAAMpkH,OAAO,KACbokH,EAAQA,EAAMnnG,OAAO,EAAG,IAE5BmnG,EAAQA,EAAMtkH,QAAQ,KAAM,IAC5BskH,EAAQA,EAAM3+G,cACd2+G,EAAQQ,EAAMJ,YAAYJ,IAAUA,GAGxCoL,cAAe,SAAUjpH,GACrB,MAAIA,GAAQ,GAAK6X,MAAM7X,GACZ,EAEJA,EAAQ,IAAM,IAAMA,GAE/BkpH,SAAU,SAAUlpH,GAChB,MAAwB,KAAjBA,EAAMhG,OAAe,IAAMgG,EAAQA,GAE9CmpH,WAAY,SAAUnpH,GAClB,GAAI6R,GAAQ7Q,KAAK6Q,KAIjB,OAHAzP,MAAK4lH,EAAIn2G,EAAMzP,KAAK6mH,cAAc7mH,KAAK4lH,EAAIhoH,IAC3CoC,KAAKnD,EAAI4S,EAAMzP,KAAK6mH,cAAc7mH,KAAKnD,EAAIe,IAC3CoC,KAAK6C,EAAI4M,EAAMzP,KAAK6mH,cAAc7mH,KAAK6C,EAAIjF,IACpCoC,MAEXgnH,eAAgB,WACZ,MAAOpoH,MAAK8/B,KAAK,KAAQ1+B,KAAK4lH,EAAI5lH,KAAK4lH,EAAI,KAAQ5lH,KAAKnD,EAAImD,KAAKnD,EAAI,KAAQmD,KAAK6C,EAAI7C,KAAK6C,MAGnGo5G,EAAMgL,UAAY,SAAUrB,EAAG/oH,EAAGgG,EAAGD,GACjC,MAAO,IAAIk5G,GAAM8J,EAAG/oH,EAAGgG,EAAQ,MAALD,EAAYA,EAAI,IAE9Cq5G,EAAMiL,QAAU,SAAUtB,EAAG/oH,EAAGgG,EAAGD,GAC/B,MAAO,IAAIg5G,GAAIgK,EAAG/oH,EAAGgG,EAAQ,MAALD,EAAYA,EAAI,IAE5Cq5G,EAAMkL,QAAU,SAAUjB,EAAGj1G,EAAGvH,EAAG9G,GAC/B,MAAO,IAAIm5G,GAAImK,EAAGj1G,EAAGvH,EAAQ,MAAL9G,EAAYA,EAAI,IAE5Cq5G,EAAMmL,QAAU,SAAUlB,EAAGj1G,EAAGo1G,EAAGzjH,GAC/B,MAAO,IAAIo5G,GAAIkK,EAAGj1G,EAAGo1G,EAAQ,MAALzjH,EAAYA,EAAI,IAE5Cq5G,EAAMhmG,UAEE2wG,GAAI,+CACJluE,QAAS,SAAUjwC,GACf,OACI4J,SAAS5J,EAAM,GAAI,IACnB4J,SAAS5J,EAAM,GAAI,IACnB4J,SAAS5J,EAAM,GAAI,QAK3Bm+G,GAAI,0BACJluE,QAAS,SAAUjwC,GACf,OACI4J,SAAS5J,EAAM,GAAI,IACnB4J,SAAS5J,EAAM,GAAI,IACnB4J,SAAS5J,EAAM,GAAI,QAK3Bm+G,GAAI,0BACJluE,QAAS,SAAUjwC,GACf,OACI4J,SAAS5J,EAAM,GAAKA,EAAM,GAAI,IAC9B4J,SAAS5J,EAAM,GAAKA,EAAM,GAAI,IAC9B4J,SAAS5J,EAAM,GAAKA,EAAM,GAAI,QAK9CwzG,EAAMJ,YAAcA,EACpB3jH,MAAM0C,WAAW1C,OACbsjH,WAAYA,EACZS,MAAOA,KAEK,kBAAVxlH,SAAwBA,OAAOgiC,IAAMhiC,OAAS,SAAUiiC,EAAIC,EAAIC,IACrEA,GAAMD,OAEV,SAAUniC,EAAGC,QACVA,OAAO,gBAAiB,qBAAsBD,IAChD,WAqqCE,MA7pCC,UAAUE,EAAGE,GAoWV,QAASywH,GAAcjnH,EAASrI,EAASuvH,GACrC,GAAIC,GAAsBD,EAAe,uBAAyB,qBAAsBxtH,EAAQsG,EAAQtG,MAAQsG,EAAQtG,MAAQ/B,EAAQmL,KAAK,SAAUskH,EAAazvH,EAAQmL,KAAK,SAAW,IAAMnL,EAAQmL,KAAK,SAAW,GAAIukH,EAAwB,EAOtP,OAN6B,eAAzBrnH,EAAQsnH,cACRD,EAAwB,wBACQ,WAAzBrnH,EAAQsnH,gBACfD,EAAwB,qBAE5B3tH,EAAQA,EAAQ,WAAcA,EAAQ,IAAO,GACtC,gCAAmCytH,EAAsBC,EAAa,IAAO1tH,EAAQ,8BAAsCsG,EAAQunH,YAAc,oBAAsB,IAAMF,EAAwB,iBAEhN,QAASG,GAAaxnH,EAASlB,EAAMooH,EAAcjpH,GAC/C,GAAIwpH,GAAiB,EAcrB,OAXQA,GAFJP,GACKjpH,GAAiB,YAARa,GAAsBb,GAAiB,YAARa,EACxB,qBAEA,oBAGT,YAARA,EACiB,kBAEA,oBAGlB,+BAAkCA,EAAO,YAAqBkB,EAAQlB,EAAO,eAAiB,iBAA0BkB,EAAQlB,EAAO,eAAiB,yBAAkC2oH,EAAiB,gBAEtN,QAASC,GAAkB1nH,EAASq+B,GAChC,GAAmH3jC,GAA/GkE,EAAS,sCAAyC0U,EAAQjb,EAAK+B,MAAMiV,EAAMgvB,EAAWr+B,EAAQ2nH,YAAc,CAChH,KAAKjtH,EAAI,EAAGA,EAAI4Y,EAAO5Y,IACnBkE,GAAU,oDAGd,OADAA,IAAU,QAGd,QAASgpH,GAAY5nH,EAASrI,GAC1B,GAAIkwH,GAAkBlwH,EAAQgC,GAAG,SAAW,EAAI,EAAGmuH,EAA0C,GAAnBD,EAAuB7nH,EAAQ+nH,oBAAsB/nH,EAAQgoH,eACvI,OAAO,qHAAqIF,EAAuB,kCAAwC9nH,EAAQ4R,IAAM,oBAAwB5R,EAAQ1H,IAAM,qBAAyBuvH,EAAkB,EAAI7nH,EAAQg0B,gBAAkBh0B,EAAQ4R,IAAM5R,EAAQxC,OAASwC,EAAQ4R,KAAO,cAAiBi2G,EAAkB,EAAI,2CAAkD7nH,EAAQioH,qBAAuB,iCAAuCjoH,EAAQ4R,IAAM,oBAAwB5R,EAAQ1H,IAAM,qBAAyB0H,EAAQi0B,cAAgBj0B,EAAQ1H,KAAO,aAAgB,IAAM,SAEnqB,QAASy7D,GAAKm0D,GACV,MAAO,UAAU1qH,GACb,MAAOA,GAAQ0qH,GAGvB,QAAS9oB,GAAS5hG,GACd,MAAO,YACH,MAAOA,IAGf,QAAS2qH,GAAY3qH,GACjB,OAAQA,EAAQ,IAAIzG,QAAQ,IAAKe,EAAM4N,SAAS6F,QAAQF,aAAa,MAEzE,QAAS+8G,GAAmB5qH,GAA5B,GACQnG,GAASmG,GAAAA,EACT8Q,EAAY,CAMhB,OALAjX,GAASA,EAAOR,MAAM,KAClBQ,EAAO,KACPiX,EAAYjX,EAAO,GAAGG,QAE1B8W,EAAYA,EAAY,GAAK,GAAKA,EAGtC,QAASe,GAAM7R,GACX,GAAI8Q,GAAW+5G,CAIf,OAHA7qH,GAAQuE,WAAWvE,EAAO,IAC1B8Q,EAAY85G,EAAmB5qH,GAC/B6qH,EAAQhwH,EAAKoiE,IAAI,GAAInsD,GAAa,GAC3BjW,EAAKgX,MAAM7R,EAAQ6qH,GAASA,EAEvC,QAASC,GAAU3wH,EAASmX,GACxB,GAAItR,GAAQorC,EAAMjxC,EAAQiK,aAAakN,GAIvC,OAHc,QAAVtR,IACAA,EAAQhH,GAELgH,EAEX,QAAS+qH,GAAQ/qH,GACb,aAAcA,KAAUxB,EAE5B,QAASwsH,GAAehrH,GACpB,MAAe,KAARA,EApbd,GA+3BOirH,GA93BA3wH,EAAQvB,OAAOuB,MAAO8M,EAAS9M,EAAMmpB,GAAGrc,OAAQs/D,EAAYpsE,EAAMmpB,GAAGijD,UAAW9qE,EAAatB,EAAMuB,YAAaC,EAAcxB,EAAMyB,aAAc+G,EAAShK,EAAEgK,OAAQqI,EAAS7Q,EAAM6Q,OAAQigC,EAAQ9wC,EAAMiK,WAAY6D,EAAQtP,EAAEsP,MAAOD,EAAUrP,EAAEqP,QAAStN,EAAOmG,KAAMzG,EAAUD,EAAMC,QAASoH,EAAWpH,EAAQoH,SAAUC,EAAarH,EAAQqH,WAAYi6B,EAAS,SAAUyqE,EAAQ,QAASrlC,EAAK,UAAWiqD,EAAa,aAAejqD,EAAK,aAAeA,EAAIkqD,EAAmBxpH,EAAW,cAAgBs/D,EAAKr/D,EAAa,gBAAkBq/D,EAAKiqD,EAAYE,EAAW,WAAanqD,EAAK,WAAaA,EAAIoqD,EAAiB1pH,EAAW,YAAcC,EAAa,cAAgBq/D,EAAKmqD,EAAUE,EAAiB,gBAAiBC,EAAW,UAAYtqD,EAAIwY,EAAQ,QAAUxY,EAAIuqD,EAAa,YAAcvqD,EAAI6jC,EAAQ,QAAU7jC,EAAIS,EAAO,OAAST,EAAIwqD,EAAc,gBAAiBC,EAAiB,kBAAmBC,EAAgB,UAAWC,EAAiB,mBAAoBC,EAAgB,kBAAmBC,EAAgB,kBAAmBxgC,EAAiB,mBAAoBzR,EAAW,WAAYr7E,EAAY,YAAa8oB,EAAW,WAAYyZ,EAAazmC,EAAMymC,WACnpCgrF,EAAa3kH,EAAOtE,QACpBC,KAAM,SAAU5I,EAASqI,GAAnB,GAsBEwpH,GArBAhjH,EAAO5G,IASX,IARAgF,EAAOf,GAAGtD,KAAKwH,KAAKvB,EAAM7O,EAASqI,GACnCA,EAAUwG,EAAKxG,QACfwG,EAAKijH,cAAuC,cAAvBzpH,EAAQ6vE,YAC7BrpE,EAAK46E,OAAS56E,EAAKijH,eAAiB3xH,EAAMC,QAAQkG,MAAMtG,GACxD6O,EAAKupE,UAAYvpE,EAAKijH,cAAgB,OAAS,SAC/CjjH,EAAKkjH,QAAUljH,EAAKijH,cAAgB,QAAU,SAC9CjjH,EAAKmjH,WAAanjH,EAAKijH,cAAgBrwH,EAAaE,EACpD0G,EAAQ4pH,QAAQjhH,OAAS3I,EAAQ4pH,QAAQ5qG,QAAUhf,EAAQ4pH,QAAQjhH,QAAU,MAAQ,MACjF3I,EAAQ2nH,WAAa,EACrB,KAAUj/G,OAAM,uDAEpBlC,GAAKqjH,cACLrjH,EAAKvN,QAAUuN,EAAK7O,QAAQkgB,QAAQ,aACpCrR,EAAKsjH,UAAYtjH,EAAKvN,QAAQiuB,KAAKgiG,GACnC1iH,EAAKujH,oBACLvjH,EAAKwjH,cAAgBxjH,EAAKsjH,UAAUtjH,EAAKkjH,WACzCljH,EAAKyjH,mBACLzjH,EAAKg+C,SACLh+C,EAAKqe,UAAUre,EAAKvN,QAAQiuB,KAAK+hG,IACjCziH,EAAKxG,EAAQgf,QAAU,SAAW,aAC9BwqG,EAAmB1xH,EAAMC,QAAQkG,MAAMuI,EAAKvN,YAAgB,EAChEuN,EAAK0jH,SACDC,GAAIp2D,KAAUy1D,EAAmBxpH,EAAQ2nH,WACzCyC,GAAIr2D,GAAM/zD,EAAQ2nH,WAClB0C,GAAIt2D,EAAK,EAAKy1D,EAAmBxpH,EAAQ2nH,WACzC2C,GAAIv2D,GAAM/zD,EAAQ2nH,WAClB4C,GAAInrB,EAASp/F,EAAQ1H,KACrBkyH,GAAIprB,EAASp/F,EAAQ4R,KACrB64G,GAAI12D,GAAM/zD,EAAQ0qH,WAClBC,GAAI52D,GAAM/zD,EAAQ0qH,YAEtB5yH,EAAM0uB,OAAOhgB,IAEjBc,QACI+xB,EACAyqE,GAEJ9jG,SACIgf,SAAS,EACTpN,IAAK,EACLtZ,IAAK,GACLqvH,UAAW,EACX+C,UAAW,EACX76C,YAAa,aACby3C,cAAe,OACfsC,SACI5qG,SAAS,EACTrW,OAAQ,QAGhBiiH,UAAW,WACP,MAAOv7G,GAAMzP,KAAKI,QAAQ1H,IAAMsH,KAAKI,QAAQ4R,MAEjD2T,QAAS,WACL3lB,KAAKmqH,oBACLnqH,KAAK3G,QAAQiuB,KAAK,mBAAmBY,SACrCloB,KAAKoqH,cAAgBpqH,KAAKkqH,UAAUlqH,KAAK8pH,WACzC9pH,KAAKqqH,mBACLrqH,KAAKirH,WACDjrH,KAAKI,QAAQgf,SACbpf,KAAKyf,QAAO,IAGpB4qG,iBAAkB,WAAA,GACVzjH,GAAO5G,KAAMI,EAAUwG,EAAKxG,QAC5B8qH,EAAmBtkH,EAAKwjH,gBAAkBhqH,EAAQ1H,IAAM0H,EAAQ4R,KAAO5R,EAAQ2nH,WAC/EoD,EAAcvkH,EAAKwkH,qBAAqB3yH,EAAK+B,MAAMoM,EAAKokH,YAAc5qH,EAAQ2nH,WACrD,SAAzB3nH,EAAQsnH,eAA2BwD,GAAoB,IACvDx0H,EAAEsJ,KAAKjI,SAAS6B,SAAS0tB,KAAK,mBAAmBY,SACjDthB,EAAKsjH,UAAUv3C,OAAOm1C,EAAkB1nH,EAASwG,EAAKokH,cACtDpkH,EAAKykH,eAAeF,GACpBvkH,EAAK0kH,kBAET1kH,EAAK2kH,gBAAgBJ,GACQ,QAAzB/qH,EAAQsnH,eAA2BwD,GAAoB,GAAK9qH,EAAQ0qH,WAAa1qH,EAAQ2nH,WACzFnhH,EAAK4kH,sBAGbhmG,QAAS,WACL,MAAOttB,GAAM0tB,WAAW5lB,KAAK3G,UAEjC8wH,kBAAmB,WACf,GAAIvjH,GAAO5G,KAAMyrH,EAAgG,EAA7EtpH,WAAWyE,EAAKsjH,UAAUjyH,IAAI2O,EAAK46E,OAAS,QAAU56E,EAAKupE,WAAY,GAC3GvpE,GAAKsjH,UAAUtjH,EAAKkjH,SAASljH,EAAKvN,QAAQuN,EAAKkjH,WAAa,EAAI2B,IAEpEJ,eAAgB,SAAUF,GACtB,GAA6HrwH,GAAzH8L,EAAO5G,KAAMI,EAAUwG,EAAKxG,QAAShJ,EAAQ,EAAGk4B,EAAO67F,EAAYvzH,OAAS,EAAG4uB,EAAQ5f,EAAKvN,QAAQiuB,KAAKiiG,GAAmBhnC,EAAa,EAAGmpC,EAAe,EAAGh4G,EAAQ8S,EAAM5uB,OAAQ68B,EAAY,CACpM,KAAK35B,EAAI,EAAGA,EAAI4Y,EAAQ,EAAG5Y,IACvBpE,EAAE8vB,EAAM1rB,EAAI,IAAI8L,EAAKkjH,SAASqB,EAAYrwH,GAS9C,IAPI8L,EAAKijH,eACLnzH,EAAE8vB,EAAMpvB,IAAQkD,SAAS,WAAWsM,EAAKkjH,SAASqB,EAAY77F,EAAO,IACrE54B,EAAE8vB,EAAM8I,IAAOh1B,SAAS,UAAUsM,EAAKkjH,SAASqB,EAAY77F,MAE5D54B,EAAE8vB,EAAM8I,IAAOh1B,SAAS,WAAWsM,EAAKkjH,SAASqB,EAAY77F,IAC7D54B,EAAE8vB,EAAMpvB,IAAQkD,SAAS,UAAUsM,EAAKkjH,SAASqB,EAAY77F,EAAO,KAEpE1oB,EAAKokH,YAAc5qH,EAAQ2nH,YAAc,IAAMnhH,EAAKijH,cAAe,CACnE,IAAK/uH,EAAI,EAAGA,EAAIqwH,EAAYvzH,OAAQkD,IAChC25B,GAAa02F,EAAYrwH,EAE7BynF,GAAa37E,EAAKwjH,cAAgB31F,EAClC8tD,GAAcpgF,WAAWyE,EAAKsjH,UAAUjyH,IAAI2O,EAAKupE,WAAY,IAAMu7C,EACnE9kH,EAAKvN,QAAQiuB,KAAK,mBAAmBrvB,IAAI,cAAesqF,KAGhE+oC,eAAgB,WAEZ,IADA,GAAI1kH,GAAO5G,KAAMI,EAAUwG,EAAKxG,QAASomB,EAAQ5f,EAAKvN,QAAQiuB,KAAKiiG,GAAgBoC,EAAcvrH,EAAQ4R,IAAK0B,EAAQ8S,EAAM5uB,OAAQkD,EAAI8L,EAAKijH,gBAAkBjjH,EAAK46E,OAAS,EAAI9tE,EAAQ,EAAGk4G,EAAQhlH,EAAKijH,gBAAkBjjH,EAAK46E,OAAS9tE,KAAYm4G,EAAYjlH,EAAKijH,gBAAkBjjH,EAAK46E,OAAS,KAC/R1mF,EAAI8wH,IAAU,EAAG9wH,GAAK+wH,EACzBn1H,EAAE8vB,EAAM1rB,IAAIoI,KAAK,QAAS6F,EAAO3I,EAAQ4pH,QAAQjhH,OAAQ0G,EAAMk8G,KAC/DA,GAAevrH,EAAQ2nH,WAG/ByD,mBAAoB,WAAA,GAC0Ej/E,GAAM3uC,EAQpFkuH,EARRllH,EAAO5G,KAAMI,EAAUwG,EAAKxG,QAASomB,EAAQ5f,EAAKvN,QAAQiuB,KAAKiiG,GAAgBzuH,EAAI,CACvF,IAAI8tH,EAAexoH,EAAQ0qH,WAAalC,EAAexoH,EAAQ2nH,aAAe,GAAKnhH,EAAKokH,YAAc5qH,EAAQ0qH,WAAa,EAIvH,IAHKlkH,EAAKijH,eAAkBjjH,EAAK46E,SAC7Bh7D,EAAQ9vB,EAAE8wB,UAAUhB,GAAOlmB,WAE1BxF,EAAI,EAAGA,EAAI0rB,EAAM5uB,OAAQkD,IAC1ByxC,EAAO71C,EAAE8vB,EAAM1rB,IACf8C,EAAQgJ,EAAK42F,QAAQ1iG,GACjBgxH,EAAuBr8G,EAAMm5G,EAAehrH,EAAQoC,KAAKI,QAAQ4R,MACjE85G,EAAuBlD,EAAexoH,EAAQ2nH,aAAe,GAAK+D,EAAuBlD,EAAexoH,EAAQ0qH,aAAe,IAC/Hv+E,EAAKjyC,SAAS,gBAAgBoI,KAAK,yBAA6B6pC,EAAKrpC,KAAK,SAAW,WAC3E,IAANpI,GAAWA,IAAM0rB,EAAM5uB,OAAS,GAChC20C,EAAKt0C,IAAI,cAAes0C,EAAK3lC,EAAKkjH,WAAa,QAMnEsB,qBAAsB,SAAUW,GAC5B,GAA4KC,GAAWb,EAAarwH,EAAhM8L,EAAO5G,KAAMI,EAAUwG,EAAKxG,QAAS6rH,EAAe9pH,WAAWyE,EAAKsjH,UAAUjyH,IAAI2O,EAAKkjH,UAAY,EAAGrrF,EAAW73B,EAAKokH,YAAakB,EAAYD,EAAextF,CAMlK,KALIA,EAAWr+B,EAAQ2nH,UAAYtvH,EAAK+B,MAAMikC,EAAWr+B,EAAQ2nH,WAAa,IAC1EkE,GAAgBxtF,EAAWr+B,EAAQ2nH,UAAYmE,GAEnDF,EAAYC,EAAeF,EAC3BZ,KACKrwH,EAAI,EAAGA,EAAIixH,EAAa,EAAGjxH,IAC5BqwH,EAAYrwH,GAAKkxH,CAGrB,OADAb,GAAYY,EAAa,GAAKZ,EAAYY,GAAcC,EAAY,EAC7DplH,EAAKulH,aAAahB,IAE7BgB,aAAc,SAAUC,GACpB,GAAkDtxH,GAA9CuxH,EAAU,EAAG34G,EAAQ04G,EAAiBx0H,MAC1C,KAAKkD,EAAI,EAAGA,EAAI4Y,EAAO5Y,IACnBuxH,GAAWD,EAAiBtxH,GAAKrC,EAAK+B,MAAM4xH,EAAiBtxH,IAC7DsxH,EAAiBtxH,GAAKrC,EAAK+B,MAAM4xH,EAAiBtxH,GAGtD,OADAuxH,GAAU5zH,EAAKgX,MAAM48G,GACdrsH,KAAKssH,mBAAmBD,EAASD,IAE5CE,mBAAoB,SAAUC,EAAgBH,GAC1C,GAAuB,IAAnBG,EACA,MAAOH,EAEX,IAA4HtxH,GAAxHq5D,EAAOhyD,WAAWiqH,EAAiBx0H,OAAS,GAAKuK,WAA6B,GAAlBoqH,EAAsBA,EAAiBA,EAAiB,EACxH,KAAKzxH,EAAI,EAAGA,EAAIyxH,EAAgBzxH,IAC5BsxH,EAAiB/5G,SAAS5Z,EAAKgX,MAAM0kD,EAAOr5D,GAAI,MAAQ,CAE5D,OAAOsxH,IAEXb,gBAAiB,SAAUJ,GACvB,GAAqKv2C,GAAjKhuE,EAAO5G,KAAMI,EAAUwG,EAAKxG,QAAS0sC,EAAM1sC,EAAQ4R,IAAKyiB,EAAY,EAAGgK,EAAW73B,EAAKokH,YAAae,EAAatzH,EAAK8oD,KAAK9iB,EAAWr+B,EAAQ2nH,WAAYjtH,EAAI,CAMlK,IALAixH,GAActtF,EAAWr+B,EAAQ2nH,UAAY,IAAM,EAAI,EAAI,EAC3DoD,EAAY/iH,OAAO,EAAG,EAAiC,EAA9B+iH,EAAYY,EAAa,IAClDZ,EAAY/iH,OAAO2jH,EAAa,EAAG,EAAuB,EAApBZ,EAAYp/F,OAClDnlB,EAAK4lH,aAAe/3F,GACpB7tB,EAAK42F,SAAW1wD,GACG,IAAfi/E,EAAJ,CAGA,KAAOjxH,EAAIixH,GACPt3F,IAAc02F,EAAYrwH,EAAI,GAAKqwH,EAAYrwH,IAAM,EACrD8L,EAAK4lH,YAAY1xH,GAAK25B,EACtBqY,GAAO1sC,EAAQ2nH,UACfnhH,EAAK42F,QAAQ1iG,GAAK2U,EAAMq9B,GACxBhyC,GAEJ85E,GAAWn2C,EAAWr+B,EAAQ2nH,YAAc,EAAIgE,EAAa,EAAIA,EACjEnlH,EAAK4lH,YAAY53C,GAAYhuE,EAAKwjH,cAClCxjH,EAAK42F,QAAQ5oB,GAAYx0E,EAAQ1H,IAC7BkO,EAAK46E,SACL56E,EAAK4lH,YAAYlsH,UACjBsG,EAAK42F,QAAQl9F,aAGrBmsH,sBAAuB,SAAUC,EAAeC,GAC5C,GAA6J7xH,GAAzJ8L,EAAO5G,KAAMI,EAAUwG,EAAKxG,QAAS+zD,EAAO17D,EAAKC,IAAI0H,EAAQ2nH,WAAanhH,EAAKwjH,cAAgBxjH,EAAKokH,aAAc,GAAI30D,EAAW,EAAGu2D,EAAWz4D,EAAO,CAS1J,IARIvtD,EAAKijH,eACLxzD,EAAWq2D,EAAgBC,EAAaE,WACpCjmH,EAAK46E,SACLnrB,EAAWzvD,EAAKwjH,cAAgB/zD,IAGpCA,EAAWs2D,EAAaE,WAAaH,EAErC9lH,EAAKwjH,eAAiB/3G,SAASzL,EAAKwjH,cAAgBj2D,EAAM,IAAM,GAAK,EAAIkC,EACzE,MAAOj2D,GAAQ1H,GAEnB,KAAKoC,EAAI,EAAGA,EAAI8L,EAAK4lH,YAAY50H,OAAQkD,IACrC,GAAIrC,EAAKoG,IAAI+H,EAAK4lH,YAAY1xH,GAAKu7D,GAAY,GAAKu2D,EAChD,MAAOn9G,GAAM7I,EAAK42F,QAAQ1iG,KAItCgyH,mBAAoB,SAAUhgF,EAAKwjC,GAC/B,GAA4Dy8C,GAAiB34F,EAAgBC,EAAzFztB,EAAO5G,KAAM0C,EAAO,GAAIsnH,EAAUpjH,EAAKxG,QAAQ4pH,OAmCnD,OAlCIjkH,GAAQ+mC,IACR1Y,EAAiB0Y,EAAI,GACrBzY,EAAeyY,EAAI,IACZwjC,GAAQA,EAAKpxE,OACpBk1B,EAAiBk8C,EAAKl8C,eACtBC,EAAei8C,EAAKj8C,cAEpBi8C,IACAy8C,EAAkBz8C,EAAKy8C,kBAEtBA,GAAmB/C,EAAQvnH,WAC5BsqH,EAAkB70H,EAAMuK,SAASunH,EAAQvnH,WAEzCsD,EAAQ+mC,IAAQwjC,GAAQA,EAAKpxE,KACzB6tH,EACArqH,EAAOqqH,GACH34F,eAAgBA,EAChBC,aAAcA,KAGlBD,EAAiBrrB,EAAOihH,EAAQjhH,OAAQqrB,GACxCC,EAAetrB,EAAOihH,EAAQjhH,OAAQsrB,GACtC3xB,EAAO0xB,EAAiB,MAAQC,IAGhCi8C,IACAA,EAAKxjC,IAAMA,GAGXpqC,EADAqqH,EACOA,GAAkBnvH,MAAOkvC,IAEzB/jC,EAAOihH,EAAQjhH,OAAQ+jC,IAG/BpqC,GAEXsqH,kBAAmB,WACf,GAAIpmH,GAAO5G,KAAMZ,EAASlH,EAAM+G,UAAU2H,EAAKsjH,UAC/C,QACI2C,WAAYjmH,EAAKijH,cAAgBzqH,EAAOzG,KAAOyG,EAAOE,IAAMsH,EAAKwjH,cACjE6C,SAAUrmH,EAAKijH,cAAgBzqH,EAAOzG,KAAOiO,EAAKwjH,cAAgBhrH,EAAOE,MAGjF2qH,YAAa,WACT,GAAIrjH,GAAO5G,KAAMjI,EAAU6O,EAAK7O,QAASqI,EAAUwG,EAAKxG,QAAS6gE,EAASlpE,EAAQuvB,KAAK,QAClE,IAAjB25C,EAAOrpE,QACPqpE,EAAOl4C,GAAG,GAAGgoB,KAAK,QAASw3E,EAAYnoH,EAAQg0B,iBAC/C6sC,EAAOl4C,GAAG,GAAGgoB,KAAK,QAASw3E,EAAYnoH,EAAQi0B,gBAE/Ct8B,EAAQg5C,KAAK,QAASw3E,EAAYnoH,EAAQxC,QAE9C7F,EAAQe,KAAKuuH,EAAcjnH,EAASrI,EAAS6O,EAAKijH,gBAAgB/oH,OAC9DV,EAAQunH,aACR5vH,EAAQ46E,OAAOi1C,EAAaxnH,EAAS,WAAYwG,EAAKijH,cAAejjH,EAAK46E,SAAS7O,OAAOi1C,EAAaxnH,EAAS,WAAYwG,EAAKijH,cAAejjH,EAAK46E,SAEzJzpF,EAAQ46E,OAAOq1C,EAAY5nH,EAASrI,KAExCggF,OAAQ,SAAU9vE,GACd,GAAIrB,GAAO5G,KAAMogB,EAASnY,EAAEmY,OAAQ0sB,EAAMlmC,EAAKhJ,QAAS0yE,EAAO1pE,EAAKgiE,KAC/D0H,KACGlwD,GAAUxZ,EAAKvN,QAAQiuB,KAAK+hG,GAAatgG,GAAG,GAAG,IAC/CunD,EAAO1pE,EAAKsmH,iBACZtmH,EAAKumH,cAAgB,IAErB78C,EAAO1pE,EAAKwmH,gBACZxmH,EAAKumH,cAAgB,GAEzBrgF,EAAMA,EAAIlmC,EAAKumH,gBAEnBz2H,EAAE0pB,GAAQ9lB,SAASmvH,EAAgB,IAAMD,GACrCl5C,IACA1pE,EAAKymH,kBAAoB/8C,EACzBA,EAAKl8C,eAAiBxtB,EAAKxG,QAAQg0B,eACnCk8C,EAAKj8C,aAAeztB,EAAKxG,QAAQi0B,aACjCi8C,EAAKg9C,eAAexgF,KAG5BygF,gBAAiB,SAAUntG,GACvBA,EAAS1pB,EAAE0pB,EACX,IAAIxZ,GAAO5G,KAAMrC,EAAMyiB,EAAOrmB,GAAGsvH,GAAejpG,EAAOjO,QAAU,CACjExb,QAAO+yB,WAAW,WACd9iB,EAAKvN,QAAQiuB,KAAK+hG,GAAoB,GAAP1rH,EAAW,EAAI,GAAG42B,SAClD,GACH3tB,EAAK4mH,sBAETx1C,MAAO,SAAU/vE,GACb,GAAIrB,GAAO5G,KAAMswE,EAAO1pE,EAAKymH,iBAC7B32H,GAAEuR,EAAEmY,QAAQuqC,YAAY8+D,EAAgB,IAAMD,GAC1Cl5C,IACAA,EAAKm9C,uBACE7mH,GAAKymH,wBACLzmH,GAAKumH,gBAGpBK,mBAAoB,WAChB,GAAI5mH,GAAO5G,IACX4G,GAAK8mH,gBAAkB/2H,OAAO+yB,WAAW,WACrC,GAAI4mD,GAAO1pE,EAAKgiE,OAAShiE,EAAKymH,iBAC1B/8C,IACAA,EAAKm9C,kBAEV,MAEPE,qBAAsB,WAAA,GAGdr9C,GAFA1pE,EAAO5G,IACXrJ,QAAOi0B,aAAa5qB,KAAK0tH,iBACrBp9C,EAAO1pE,EAAKgiE,OAAShiE,EAAKymH,kBAC1B/8C,GAAQA,EAAKs9C,YACbt9C,EAAKs9C,WAAW9tG,MAAK,GAAM,GAAO7nB,IAAI,UAAW,IAGzD2sD,OAAQ,WACJ,GAAIh+C,GAAO5G,KAAMjI,EAAU6O,EAAK7O,QAASukG,EAASvkG,EAAQmL,KAAK,QAAS+yB,EAAOqmE,EAAS5lG,EAAE,IAAM4lG,GAAUvkG,EAAQkgB,QAAQ,OACtHge,GAAK,KACLrvB,EAAKyvF,MAAQpgE,EAAKvwB,GAAG,QAASM,EAAMY,EAAKinH,kBAAmBjnH,MAGpEoL,IAAK,SAAUpU,GACX,MAAKA,IAGLoC,KAAKqlB,YAAarT,IAAOpU,IAAzBoC,GAFWA,KAAKI,QAAQ4R,KAI5BtZ,IAAK,SAAUkF,GACX,MAAKA,IAGLoC,KAAKqlB,YAAa3sB,IAAOkF,IAAzBoC,GAFWA,KAAKI,QAAQ1H,KAI5B2sB,WAAY,SAAUjlB,GAClB4E,EAAOf,GAAGohB,WAAWld,KAAKnI,KAAMI,GAChCJ,KAAKqqH,mBACLrqH,KAAKirH,YAETnlG,QAAS,WACD9lB,KAAKq2F,OACLr2F,KAAKq2F,MAAMzsE,IAAI,QAAS5pB,KAAK6tH,mBAEjC7oH,EAAOf,GAAG6hB,QAAQ3d,KAAKnI,SAqF3B8tH,GAASnE,EAAWjpH,QACpBC,KAAM,SAAU5I,EAASqI,GACrB,GAAiB2tH,GAAbnnH,EAAO5G,IACXjI,GAAQmH,KAAO,OACfkB,EAAUM,MACN9C,MAAO8qH,EAAU3wH,EAAS,SAC1Bia,IAAK02G,EAAU3wH,EAAS,OACxBW,IAAKgwH,EAAU3wH,EAAS,OACxBgwH,UAAWW,EAAU3wH,EAAS,SAC/BqI,GACHrI,EAAUrB,EAAEqB,GACRqI,GAAWA,EAAQgf,UAAYxoB,IAC/BwJ,EAAQgf,SAAWrnB,EAAQgC,GAAG,eAElC4vH,EAAW1lH,GAAGtD,KAAKwH,KAAKvB,EAAM7O,EAASqI,GACvCA,EAAUwG,EAAKxG,QACVuoH,EAAQvoH,EAAQxC,QAA4B,OAAlBwC,EAAQxC,QACnCwC,EAAQxC,MAAQwC,EAAQ4R,IACxBja,EAAQg5C,KAAK,QAASw3E,EAAYnoH,EAAQ4R,OAE9C5R,EAAQxC,MAAQnF,EAAKC,IAAID,EAAKuZ,IAAI5R,EAAQxC,MAAOwC,EAAQ1H,KAAM0H,EAAQ4R,KACvE+7G,EAAannH,EAAKvN,QAAQiuB,KAAK+hG,GAC/BrpH,KAAKguH,WAAa,GAAIF,IAAOG,UAAUF,EAAYnnH,EAAMxG,GACzDwG,EAAKgiE,MAAQ,GAAIklD,IAAOI,KAAKH,EAAY,GAAInnH,EAAMxG,IAEvDA,SACI8O,KAAM,SACNy4G,aAAa,EACbwG,oBAAqB,WACrBC,oBAAqB,WACrBhG,gBAAiB,OACjB4B,SAAWjhH,OAAQ,cACnBnL,MAAO,MAEX6hB,OAAQ,SAAUA,GAAV,GACqCgsE,GAAc1gE,EAuC/CsjG,EAvCJznH,EAAO5G,KAAMI,EAAUwG,EAAKxG,OAChCwG,GAAK2Y,UACDE,KAAW,IAGf7Y,EAAKvN,QAAQsxD,YAAYu+B,GAAgB5uF,SAASovH,GAClD9iH,EAAKvN,QAAQiuB,KAAK,SAASlC,WAAWqyD,GACtCgU,EAAe,SAAUxjF,GAAV,GAKPykH,GAAkFC,EAAyCvsG,EAJ3HjI,EAAQwmB,EAAW12B,GAAG,EAC1B,IAAKkQ,EAAL,CAIA,GADIu0G,EAAgB9lH,EAAKijH,cAAgB1xG,EAAMuD,SAASyoB,MAAQhsB,EAAMuD,SAAS0oB,MAAOuoF,EAAe/lH,EAAKomH,oBAAqB5sG,EAAS1pB,EAAEuR,EAAEmY,QACxIA,EAAOvmB,SAAS,gBAEhB,MADAumB,GAAO9lB,SAASmvH,EAAgB,IAAMD,GACtC,CAEJ5iH,GAAKuoG,QAAQvoG,EAAK6lH,sBAAsBC,EAAeC,IACvD/lH,EAAK2mH,gBAAgBtlH,EAAEmY,QACvBxZ,EAAKgiE,MAAM4H,UAAUvoE,GACrBA,EAAE9D,mBAENyC,EAAKvN,QAAQiuB,KAAKiiG,EAAgB,KAAOD,GAAgB5jH,GAAGqjH,EAAkBt9B,GAAc9zF,MAAM+N,GAAGqjH,EAAkB,WACnHryH,EAAE6G,SAASmC,iBAAiB6H,IAAI,cAAerP,EAAMiM,kBACtDuB,GAAGujH,EAAgB,WAClBriH,EAAKgiE,MAAM3kC,SAEfr9B,EAAKvN,QAAQiuB,KAAK+hG,GAAanmH,KAAKgiB,EAAU,GAAGxf,GAAGsjH,EAAU,WAC1DpiH,EAAK4mH,uBACN9nH,GAAG2xE,EAAO,SAAUpvE,GACnBrB,EAAK2mH,gBAAgBtlH,EAAEmY,QACvBnY,EAAE9D,mBACHuB,GAAGg9F,EAAO18F,EAAMY,EAAKmxE,OAAQnxE,IAAOlB,GAAG45D,EAAMt5D,EAAMY,EAAKoxE,MAAOpxE,IAClEmkB,EAAO/kB,EAAM,SAAU3G,GACnB,GAAIivH,GAAS1nH,EAAK2nH,kBAAkB3nH,EAAK4nH,YAAqB,EAAPnvH,EACvDuH,GAAK6nH,iBAAiBH,GACtB1nH,EAAKgiE,MAAM0kD,eAAegB,IAC3B1nH,GACCxG,EAAQunH,cACJ0G,EAAmBroH,EAAM,SAAUiC,EAAG5I,GACtCW,KAAK2tH,wBACW,IAAZ1lH,EAAE67B,OAAe3rC,EAAQggB,OAAqB,IAAZlQ,EAAE67B,SACpC/Y,EAAK1rB,GACLW,KAAK6zB,QAAUnK,WAAW1jB,EAAM,WAC5BhG,KAAK0uH,MAAQzzF,YAAY,WACrBlQ,EAAK1rB,IACN,KACJW,MAAO,OAEf4G,GACHA,EAAKvN,QAAQiuB,KAAK,aAAa5hB,GAAGsjH,EAAUhjH,EAAM,SAAUiC,GACxDjI,KAAK2uH,cACL/nH,EAAK2mH,gBAAgBtlH,EAAEmY,SACxBxZ,IAAOlB,GAAG0jH,EAAY,SAAUnhH,GAC/BvR,EAAEuR,EAAE22B,eAAetkC,SAAS,mBAC7BoL,GAAG,WAAam5D,EAAI74D,EAAM,SAAUiC,GACnCvR,EAAEuR,EAAE22B,eAAe+rB,YAAY,iBAC/B3qD,KAAK2uH,eACN/nH,IAAOmiB,GAAG,GAAGrjB,GAAGojH,EAAY9iH,EAAM,SAAUiC,GAC3ComH,EAAiBpmH,EAAG,IACrBrB,IAAOoa,OAAM,GAAOrpB,MAAMoxB,GAAG,GAAGrjB,GAAGojH,EAAY9iH,EAAM,SAAUiC,GAC9DomH,EAAiBpmH,OAClBrB,IAAOoa,MAAM9oB,EAAMiM,iBAE1ByC,EAAKvN,QAAQiuB,KAAK+hG,GAAaz/F,IAAIu/F,GAAU,GAAOzjH,GAAGyjH,EAAUnjH,EAAMhG,KAAKi4E,SAAUrxE,IACtFxG,EAAQgf,SAAU,IAEtBG,QAAS,WACL,GAAI3Y,GAAO5G,IACX4G,GAAKvN,QAAQsxD,YAAY++D,GAAepvH,SAAS4uF,GACjDxyF,EAAEkQ,EAAK7O,SAASg5C,KAAK0mC,EAAUA,GAC/B7wE,EAAKvN,QAAQiuB,KAAK,aAAasC,IAAIk/F,GAAYpjH,GAAGojH,EAAY,SAAU7gH,GACpEA,EAAE9D,iBACFzN,EAAEsJ,MAAM1F,SAAS,oBAClBsvB,IAAIo/F,GAAUtjH,GAAGsjH,EAAU,SAAU/gH,GACpCA,EAAE9D,iBACFzN,EAAEsJ,MAAM2qD,YAAY,oBACrB/gC,IAAI,aAAei1C,GAAIn5D,GAAG,aAAem5D,EAAI3mE,EAAMiM,gBAAgBylB,IAAIw/F,GAAY1jH,GAAG0jH,EAAYlxH,EAAMiM,gBAC3GyC,EAAKvN,QAAQiuB,KAAKiiG,EAAgB,KAAOD,GAAgB1/F,IAAIm/F,GAAkBn/F,IAAIq/F,GACnFriH,EAAKvN,QAAQiuB,KAAK+hG,GAAanmH,KAAKgiB,MAAc0E,IAAIo/F,GAAUp/F,IAAIu/F,GAAUv/F,IAAIytD,GAAOztD,IAAI84E,GAAO94E,IAAI01C,GACxG14D,EAAKxG,QAAQgf,SAAU,GAE3B+vF,QAAS,SAAUriE,GACf,GAAIlmC,GAAO5G,KAAMy6B,EAAS7zB,EAAKhJ,SAAWkvC,CAC1ClmC,GAAKhJ,MAAMkvC,GACPrS,GACA7zB,EAAKoB,QAAQyxB,GAAU77B,MAAOgJ,EAAKxG,QAAQxC,SAGnDA,MAAO,SAAUA,GACb,GAAIgJ,GAAO5G,KAAMI,EAAUwG,EAAKxG,OAEhC,OADAxC,GAAQ6R,EAAM7R,GACV6X,MAAM7X,GACCwC,EAAQxC,OAEfA,GAASwC,EAAQ4R,KAAOpU,GAASwC,EAAQ1H,KACrC0H,EAAQxC,OAASA,IACjBgJ,EAAK7O,QAAQg5C,KAAK,QAASw3E,EAAY3qH,IACvCwC,EAAQxC,MAAQA,EAChBgJ,EAAKgoH,iBAAiBhxH,GACtBgJ,EAAKqkH,YALb,IASJA,SAAU,WACNjrH,KAAKgI,QAAQkhH,GAAkBtrH,MAAOoC,KAAKI,QAAQxC,SAEvDgxH,iBAAkB,SAAUhxH,GACxB,GAAoC+xG,GAAhC/oG,EAAO5G,KAAMswE,EAAO1pE,EAAKgiE,KAEzB+mC,GADAr/B,GAAQA,EAAKu+C,YACIv+C,EAAKu+C,YAAYz5F,OAEjBxuB,EAAKkmH,mBAAmBlvH,EAAO,MAEpDoC,KAAK3G,QAAQiuB,KAAK+hG,GAAanmH,KAAK,gBAAiBtF,GAAOsF,KAAK,iBAAkBysG,IAEvFgf,YAAa,WACT/jG,aAAa5qB,KAAK6zB,SAClBqH,cAAcl7B,KAAK0uH,QAEvBz2C,SAAU,SAAUhwE,GAChB,GAAIrB,GAAO5G,IACPiI,GAAEmuB,UAAWxvB,GAAK0jH,UAClB1jH,EAAK+mH,uBACL/mH,EAAK6nH,iBAAiB7nH,EAAK0jH,QAAQriH,EAAEmuB,SAASxvB,EAAKxG,QAAQxC,QAC3DgJ,EAAKgiE,MAAM0kD,eAAe1mH,EAAKhJ,SAC/BqK,EAAE9D,mBAGVsqH,iBAAkB,SAAU3hF,GACxB,GAAIlmC,GAAO5G,KAAMI,EAAUwG,EAAKxG,OAEhC,OADA0sC,GAAMr9B,EAAMq9B,GACRr3B,MAAMq3B,IACNlmC,EAAKuoG,QAAQ/uG,EAAQ4R,KACrB,IAEJ86B,EAAMr0C,EAAKC,IAAID,EAAKuZ,IAAI86B,EAAK1sC,EAAQ1H,KAAM0H,EAAQ4R,KACnDpL,EAAKuoG,QAAQriE,GADbA,IAGJyhF,kBAAmB,SAAUp8G,GACzB,GAAIuB,GAAQ1T,KAAKw9F,QAAQ5lG,MAIzB,OAHIoI,MAAKwhF,SACLrvE,EAAQuB,EAAQ,EAAIvB,GAEjBnS,KAAKw9F,QAAQ/kG,EAAKC,IAAI,EAAGD,EAAKuZ,IAAIG,EAAOuB,EAAQ,MAE5Dm6G,kBAAmB,WACf,GAAIjnH,GAAO5G,KAAMgS,EAAMpL,EAAKxG,QAAQ4R,GACpC0X,YAAW,WACP,GAAI9rB,GAAQgJ,EAAK7O,QAAQ,GAAG6F,KAC5BgJ,GAAKhJ,MAAgB,KAAVA,GAAgB6X,MAAM7X,GAASoU,EAAMpU,MAGxDkoB,QAAS,WACL,GAAIlf,GAAO5G,IACX2pH,GAAW1lH,GAAG6hB,QAAQ3d,KAAKvB,GAC3BA,EAAKvN,QAAQuwB,IAAIi1C,GAAIv3C,KAAK,aAAasC,IAAIi1C,GAAIlnE,MAAM2vB,KAAK+hG,GAAaz/F,IAAIi1C,GAAIlnE,MAAM2vB,KAAKiiG,EAAgB,KAAOD,GAAgB1/F,IAAIi1C,GAAIlnE,MACzIiP,EAAKgiE,MAAMT,UAAUriD,UACrBlf,EAAKgiE,MAAM6kD,gBAAe,KAGlCK,IAAOG,UAAY,SAAUF,EAAYnnH,EAAMxG,GAC3C,QAAS0uH,GAAchiF,GACnB,GAAIiiF,GAAiBjiF,EAAM1sC,EAAQ4R,IAAKG,EAAQvL,EAAK4nH,YAAc/1H,EAAK8oD,KAAK9xC,EAAMs/G,EAAiB3uH,EAAQ2nH,YAAatzF,EAAYpiB,SAASzL,EAAK4lH,YAAYr6G,GAAQ,IAAK68G,EAAepoH,EAAKsjH,UAAU5iG,KAAK,uBAAwB2nG,EAAkB58G,SAASzL,EAAKmjH,WAAWgE,GAAc,EAAG,IAAKmB,EAAgBtoH,EAAK46E,OAAS,EAAI,CAC1UwtC,GAAapoH,EAAKkjH,SAASljH,EAAK46E,OAAS56E,EAAKwjH,cAAgB31F,EAAYA,GAC1Es5F,EAAW91H,IAAI2O,EAAKupE,UAAW17C,EAAYw6F,EAAkBC,GAEjEJ,EAAc1uH,EAAQxC,OACtBgJ,EAAKQ,MACD88F,EACAglB,GACD,SAAUjhH,GACT6mH,EAAc3sH,WAAW8F,EAAErK,MAAO,OAEtCgJ,EAAKQ,KAAKqyB,EAAQ,SAAUxxB,GACxB6mH,EAAc3sH,WAAW8F,EAAEC,OAAOtK,QAAS,QAGnDkwH,GAAOI,KAAO,SAAUn2H,EAASmH,EAAMiwH,EAAO/uH,GAC1C,GAAIwG,GAAO5G,IACX4G,GAAKuoH,MAAQA,EACbvoH,EAAKxG,QAAUA,EACfwG,EAAK7O,QAAUA,EACf6O,EAAK1H,KAAOA,EACZ0H,EAAKuhE,UAAY,GAAI7D,GAAUvsE,GAC3B0mC,SAAU,EACV+xC,UAAWxqE,EAAMY,EAAK6+B,WAAY7+B,GAClC0pE,KAAMtqE,EAAMY,EAAK0pE,KAAM1pE,GACvB6pE,QAASzqE,EAAMY,EAAK6pE,QAAS7pE,GAC7B2pE,WAAYvqE,EAAMY,EAAK2pE,WAAY3pE,KAEvC7O,EAAQipB,OAAM,IAElB8sG,GAAOI,KAAKnnH,WACRypE,UAAW,SAAUvoE,GACjBjI,KAAKmvH,MAAMC,kBAAoBpvH,KAC/BA,KAAKmoE,UAAUpnC,WAAW/V,SAC1BhrB,KAAKylC,WAAWx9B,GAChBjI,KAAKywE,WAEThrC,WAAY,SAAUx9B,GAClB,GAAIrB,GAAO5G,KAAMmvH,EAAQvoH,EAAKuoH,MAAO/uH,EAAUwG,EAAKxG,OACpD,OAAKA,GAAQgf,SAIbpf,KAAKmvH,MAAMC,kBAAoBpvH,KAC/BmvH,EAAMp3H,QAAQ6xB,IAAIw/F,GAClB+F,EAAM91H,QAAQiuB,KAAK,IAAMmiG,GAAe9+D,YAAY8+D,EAAgB,IAAMD,GAC1E5iH,EAAK7O,QAAQuC,SAASmvH,EAAgB,IAAMD,GAC5C9yH,EAAE6G,SAASmC,iBAAiBzH,IAAI,SAAU,WAC1C2O,EAAK+lH,aAAewC,EAAMnC,oBAC1BpmH,EAAKutD,KAAO17D,EAAKC,IAAI0H,EAAQ2nH,WAAaoH,EAAM/E,cAAgB+E,EAAMnE,aAAc,GAChFpkH,EAAK1H,MACL0H,EAAKwtB,eAAiBh0B,EAAQg0B,eAC9BxtB,EAAKytB,aAAej0B,EAAQi0B,aAC5B86F,EAAME,WAAWzoH,EAAK1H,OAEtB0H,EAAK0oH,OAAS1oH,EAAKkmC,IAAM1sC,EAAQxC,MAErCgJ,EAAK6mH,gBAAe,GACpB7mH,EAAK2oH,iBAfLvvH,IAHIiI,EAAE9D,iBACF,IAmBRorH,eAAgB,WACZ,GAAiGxC,GAAiByC,EAA9G5oH,EAAO5G,KAAMmvH,EAAQvoH,EAAKuoH,MAAOnF,EAAUpjH,EAAKxG,QAAQ4pH,QAAStnH,EAAO,GAAI+sH,EAAM/4H,EAAEC,OACnFqzH,GAAQ5qG,UAGT4qG,EAAQvnH,WACRsqH,EAAkBnmH,EAAKmmH,gBAAkB70H,EAAMuK,SAASunH,EAAQvnH,WAEpE/L,EAAE,qBAAqBwxB,SACvBthB,EAAKgnH,WAAal3H,EAAE,mEAAqEogC,SAASv5B,SAASsa,MAC3GnV,EAAOysH,EAAMrC,mBAAmBlmH,EAAKkmC,KAAOqiF,EAAMvxH,QAASgJ,GACtDA,EAAK1H,OACNswH,EAAkB,cAAgBL,EAAMtF,cAAgB,IAAM,KAC9DjjH,EAAK8oH,gBAAkB,yBAA4BF,EAAkB,mBACrE9sH,GAAQkE,EAAK8oH,iBAEjB9oH,EAAKgnH,WAAWlrH,KAAKA,GACrBkE,EAAK+oH,eACDrwH,IAAKmwH,EAAI9vH,YACThH,KAAM82H,EAAIrxH,cAEdwI,EAAKgpH,gBAETt/C,KAAM,SAAUroE,GACZ,GAA2J4nH,GAAvJjpH,EAAO5G,KAAMmvH,EAAQvoH,EAAKuoH,MAAOl8F,EAAIhrB,EAAEgrB,EAAEvX,SAAUrK,EAAIpJ,EAAEoJ,EAAEqK,SAAUmxG,EAAajmH,EAAK+lH,aAAaE,WAAYI,EAAWrmH,EAAK+lH,aAAaM,QACjJhlH,GAAE9D,iBAGMyC,EAAKkmC,IAFTqiF,EAAMtF,cACFsF,EAAM3tC,OACK56E,EAAKkpH,eAAe78F,EAAG45F,EAAYI,EAAUh6F,EAAIg6F,GAEjDrmH,EAAKkpH,eAAe78F,EAAG45F,EAAYI,EAAUh6F,GAAKg6F,GAGtDrmH,EAAKkpH,eAAez+G,EAAG47G,EAAUJ,EAAYx7G,GAAK47G,GAE7DrmH,EAAK0oH,QAAU1oH,EAAKkmC,MACpBlmC,EAAK0oH,OAAS1oH,EAAKkmC,IACflmC,EAAK1H,MACY,eAAb0H,EAAK1H,KAED0H,EAAKwtB,eADLxtB,EAAKkmC,IAAMlmC,EAAKytB,aACMztB,EAAKkmC,IAELlmC,EAAKytB,aAAeztB,EAAKkmC,IAG/ClmC,EAAKkmC,IAAMlmC,EAAKwtB,eAChBxtB,EAAKytB,aAAeztB,EAAKkmC,IAEzBlmC,EAAKwtB,eAAiBxtB,EAAKytB,aAAeztB,EAAKkmC,IAGvD+iF,GACI39G,QACItL,EAAKwtB,eACLxtB,EAAKytB,cAETz2B,OACIgJ,EAAKwtB,eACLxtB,EAAKytB,gBAIbw7F,GAAgBjyH,MAAOgJ,EAAKkmC,KAEhCqiF,EAAMnnH,QAAQk8F,EAAO2rB,IAEzBjpH,EAAK0mH,eAAe1mH,EAAKkmC,MAE7BwgF,eAAgB,SAAUxgF,GACtB,GAAIlmC,GAAO5G,KAAMI,EAAUwG,EAAKxG,QAAS4pH,EAAU5pH,EAAQ4pH,QAAStnH,EAAO;AACtEsnH,EAAQ5qG,UAGRxY,EAAKgnH,YACNhnH,EAAK2oH,iBAET7sH,EAAOkE,EAAKuoH,MAAMrC,mBAAmBr9G,EAAMq9B,GAAMlmC,GAC5CA,EAAK1H,OACNwD,GAAQkE,EAAK8oH,iBAEjB9oH,EAAKgnH,WAAWlrH,KAAKA,GACrBkE,EAAKgpH,gBAETr/C,WAAY,WAGR,MAFAvwE,MAAKmvH,MAAMlE,WACXv0H,EAAE6G,SAASmC,iBAAiBzH,IAAI,SAAU,IACnC+H,KAAKikC,QAEhBwsC,QAAS,WACL,GAAI7pE,GAAO5G,KAAMmvH,EAAQvoH,EAAKuoH,KAS9B,OARAz4H,GAAE6G,SAASmC,iBAAiBzH,IAAI,SAAU,IACtC2O,EAAK1H,KACLiwH,EAAMhgB,QAAQvoG,EAAKwtB,eAAgBxtB,EAAKytB,eAExC86F,EAAMhgB,QAAQvoG,EAAKkmC,KACnBlmC,EAAKuhE,UAAUpnC,WAAWyC,eAE9B58B,EAAKuhE,UAAUpnC,WAAW/V,SACnBpkB,EAAKq9B,QAEhBA,KAAM,WACF,GAAIr9B,GAAO5G,KAAMmvH,EAAQvoH,EAAKuoH,KAG9B,OAFAA,GAAM5B,gBAAgB3mH,EAAK7O,SAC3Bo3H,EAAMp3H,QAAQ2N,GAAG0jH,IACV,GAEXqE,eAAgB,SAAUsC,GACtB,GAAInpH,GAAO5G,KAAMmvH,EAAQvoH,EAAKuoH,KAC1BvoH,GAAKgnH,YAAcuB,EAAM/uH,QAAQ4pH,QAAQ5qG,SAAW+vG,EAAM/uH,QAAQgf,UAC9D2wG,GACAnpH,EAAKgnH,WAAW1lG,SAChBthB,EAAKgnH,WAAa,MAElBhnH,EAAKgnH,WAAWoC,QAAQ,OAAQ,WAC5Bt5H,EAAEsJ,MAAMkoB,SACRthB,EAAKgnH,WAAa,SAKlCgC,YAAa,WACT,GAA+QK,GAAaC,EAAW5mB,EAAMjrB,EAAzSz3E,EAAO5G,KAAMmvH,EAAQvoH,EAAKuoH,MAAO7vH,EAAM,EAAG3G,EAAO,EAAGZ,EAAU6O,EAAK7O,QAASqH,EAASlH,EAAM+G,UAAUlH,GAAUw/D,EAAS,EAAGslB,EAAWnmF,EAAEC,QAASovF,EAAUn/E,EAAKgnH,WAAWtmG,KAAK,cAAeruB,EAAQO,EAAWoN,EAAKgnH,YAAa10H,EAASQ,EAAYkN,EAAKgnH,WAC9PhnH,GAAK1H,MACL+wH,EAAcd,EAAM91H,QAAQiuB,KAAK+hG,GACjCjqH,EAASlH,EAAM+G,UAAUgxH,EAAYlnG,GAAG,IACxCmnG,EAAYh4H,EAAM+G,UAAUgxH,EAAYlnG,GAAG,IACvComG,EAAMtF,eACNvqH,EAAM4wH,EAAU5wH,IAChB3G,EAAOyG,EAAOzG,MAAQu3H,EAAUv3H,KAAOyG,EAAOzG,MAAQ,IAEtD2G,EAAMF,EAAOE,KAAO4wH,EAAU5wH,IAAMF,EAAOE,KAAO,EAClD3G,EAAOu3H,EAAUv3H,MAErB0lF,EAAa7kF,EAAWy2H,EAAYlnG,GAAG,IAAM,EAAIwuC,IAEjDj4D,EAAMF,EAAOE,IACb3G,EAAOyG,EAAOzG,KACd0lF,EAAa7kF,EAAWzB,GAAW,EAAIw/D,GAEvC43D,EAAMtF,eACNlxH,GAAQ0Z,UAAUpZ,EAAQk2H,EAAMpF,WAAWhyH,IAAY,EAAG,IAC1DuH,GAAOpG,EAAS6sF,EAAQ7sF,SAAWq+D,IAEnCj4D,GAAO+S,UAAUnZ,EAASi2H,EAAMpF,WAAWhyH,IAAY,EAAG,IAC1DY,GAAQM,EAAQ8sF,EAAQ9sF,QAAUs+D,GAElC43D,EAAMtF,eACNvgB,EAAO1iG,EAAKw3E,MAAM9+E,EAAKpG,EAAQmlF,EAAY3kF,EAAYmjF,GAAYj2E,EAAK+oH,cAAcrwH,KACtFA,GAAOgqG,EACP3wG,GAAQiO,EAAKq3E,KAAKtlF,EAAMM,EAAOO,EAAWqjF,GAAYj2E,EAAK+oH,cAAch3H,QAEzE2wG,EAAO1iG,EAAKw3E,MAAMzlF,EAAMM,EAAOolF,EAAY7kF,EAAWqjF,GAAYj2E,EAAK+oH,cAAch3H,MACrF2G,GAAOsH,EAAKq3E,KAAK3+E,EAAKpG,EAAQQ,EAAYmjF,GAAYj2E,EAAK+oH,cAAcrwH,KACzE3G,GAAQ2wG,GAERA,EAAO,GAAKvjB,IACZA,EAAQp7B,cACRo7B,EAAQzrF,SAAS,wBAA0B60H,EAAMtF,cAAgB,IAAM,OAE3EjjH,EAAKgnH,WAAW31H,KACZqH,IAAKA,EACL3G,KAAMA,KAGdslF,KAAM,SAAU5nB,EAAUt4D,EAAMoyH,GAC5B,GAAIhyC,GAAS,CAOb,OANI9nB,GAAWt4D,EAAOoyH,IAClBhyC,EAASgyC,GAAe95D,EAAWt4D,IAEnCs4D,EAAW,IACX8nB,GAAU9nB,GAEP8nB,GAEXC,MAAO,SAAUh/E,EAAQrB,EAAMsgF,EAAY8xC,GACvC,GAAIhyC,GAAS,CAOb,OANI/+E,GAASrB,EAAOoyH,IAChBhyC,KAAYE,EAAatgF,IAEzBqB,EAAS++E,EAAS,IAClBA,GAAUE,EAAatgF,GAEpBogF,GAEX2xC,eAAgB,SAAUz5D,EAAUrkD,EAAKtZ,EAAK03H,GAC1C,GAAIxpH,GAAO5G,KAAM8sC,EAAM,CAUvB,OARIA,GADA96B,EAAMqkD,GAAYA,EAAW39D,EACvBkO,EAAKuoH,MAAM1C,sBAAsBp2D,EAAUzvD,EAAK+lH,cAElDyD,EACMxpH,EAAKxG,QAAQ1H,IAEbkO,EAAKxG,QAAQ4R,MAMnC9Z,EAAMmpB,GAAG8G,OAAO2lG,IACZjF,EAAcc,EAAWjpH,QACzBC,KAAM,SAAU5I,EAASqI,GAAnB,GAkCE6vH,GAjCArpH,EAAO5G,KAAMihE,EAASvqE,EAAEqB,GAASuvB,KAAK,SAAU+oG,EAAapvD,EAAOl4C,GAAG,GAAG,GAAIunG,EAAcrvD,EAAOl4C,GAAG,GAAG,EAC7GsnG,GAAWnxH,KAAO,OAClBoxH,EAAYpxH,KAAO,OACfkB,GAAWA,EAAQunH,cACfhxH,OAAO8tB,SACP9tB,OAAO8tB,QAAQ8rG,KAAK,sEAExBnwH,EAAQunH,aAAc,GAE1BvnH,EAAUM,MACN0zB,eAAgBs0F,EAAU2H,EAAY,SACtCr+G,IAAK02G,EAAU2H,EAAY,OAC3B33H,IAAKgwH,EAAU2H,EAAY,OAC3BtI,UAAWW,EAAU2H,EAAY,UAEjCh8F,aAAcq0F,EAAU4H,EAAa,SACrCt+G,IAAK02G,EAAU4H,EAAa,OAC5B53H,IAAKgwH,EAAU4H,EAAa,OAC5BvI,UAAWW,EAAU4H,EAAa,SACnClwH,GACCA,GAAWA,EAAQgf,UAAYxoB,IAC/BwJ,EAAQgf,SAAW6hD,EAAOlnE,GAAG,eAEjC4vH,EAAW1lH,GAAGtD,KAAKwH,KAAKvB,EAAM7O,EAASqI,GACvCA,EAAUwG,EAAKxG,QACVuoH,EAAQvoH,EAAQg0B,iBAA8C,OAA3Bh0B,EAAQg0B,iBAC5Ch0B,EAAQg0B,eAAiBh0B,EAAQ4R,IACjCivD,EAAOl4C,GAAG,GAAGgoB,KAAK,QAASw3E,EAAYnoH,EAAQ4R,OAE9C22G,EAAQvoH,EAAQi0B,eAA0C,OAAzBj0B,EAAQi0B,eAC1Cj0B,EAAQi0B,aAAej0B,EAAQ1H,IAC/BuoE,EAAOl4C,GAAG,GAAGgoB,KAAK,QAASw3E,EAAYnoH,EAAQ1H,OAE/Cu3H,EAAcrpH,EAAKvN,QAAQiuB,KAAK+hG,GACpCrpH,KAAKguH,WAAa,GAAInF,GAAYoF,UAAUgC,EAAarpH,EAAMxG,GAC/DwG,EAAKsmH,iBAAmB,GAAIY,IAAOI,KAAK+B,EAAYlnG,GAAG,GAAI,cAAeniB,EAAMxG,GAChFwG,EAAKwmH,gBAAkB,GAAIU,IAAOI,KAAK+B,EAAYlnG,GAAG,GAAI,aAAcniB,EAAMxG,IAElFA,SACI8O,KAAM,cACNi5G,oBAAqB,OACrBE,qBAAsB,OACtB2B,SAAWjhH,OAAQ,cACnBqrB,eAAgB,KAChBC,aAAc,MAElB5U,OAAQ,SAAUA,GACd,GAAyCgsE,GAArC7kF,EAAO5G,KAAMI,EAAUwG,EAAKxG,OAChCwG,GAAK2Y,UACDE,KAAW,IAGf7Y,EAAKvN,QAAQsxD,YAAYu+B,GAAgB5uF,SAASovH,GAClD9iH,EAAKvN,QAAQiuB,KAAK,SAASlC,WAAWqyD,GACtCgU,EAAe,SAAUxjF,GAAV,GAKPykH,GAAkFC,EAAyC7/E,EAA+D1sB,EAAsB4M,EAAMC,EAAIqjD,EAJ1Nn4D,EAAQwmB,EAAW12B,GAAG,EAC1B,IAAKkQ,EAAL,CAIA,GADIu0G,EAAgB9lH,EAAKijH,cAAgB1xG,EAAMuD,SAASyoB,MAAQhsB,EAAMuD,SAAS0oB,MAAOuoF,EAAe/lH,EAAKomH,oBAAqBlgF,EAAMlmC,EAAK6lH,sBAAsBC,EAAeC,GAAevsG,EAAS1pB,EAAEuR,EAAEmY,QACvMA,EAAOvmB,SAAS,gBAGhB,MAFA+M,GAAKvN,QAAQiuB,KAAK,IAAMmiG,GAAe9+D,YAAY8+D,EAAgB,IAAMD,GACzEppG,EAAO9lB,SAASmvH,EAAgB,IAAMD,GACtC,CAEA18E,GAAM1sC,EAAQg0B,gBACdpH,EAAO8f,EACP7f,EAAK7sB,EAAQi0B,aACbi8C,EAAO1pE,EAAKsmH,kBACLpgF,EAAMlmC,EAAKytB,cAClBrH,EAAO5sB,EAAQg0B,eACfnH,EAAK6f,EACLwjC,EAAO1pE,EAAKwmH,iBAERtgF,EAAM1sC,EAAQg0B,gBAAkBh0B,EAAQi0B,aAAeyY,GACvD9f,EAAO8f,EACP7f,EAAK7sB,EAAQi0B,aACbi8C,EAAO1pE,EAAKsmH,mBAEZlgG,EAAO5sB,EAAQg0B,eACfnH,EAAK6f,EACLwjC,EAAO1pE,EAAKwmH,iBAGpB98C,EAAKE,UAAUvoE,GACfrB,EAAK6nH,iBAAiBzhG,EAAMC,GAC5BrmB,EAAK2mH,gBAAgBj9C,EAAKv4E,WAE9B6O,EAAKvN,QAAQiuB,KAAKiiG,EAAgB,KAAOD,GAAgB5jH,GAAGqjH,EAAkBt9B,GAAc9zF,MAAM+N,GAAGqjH,EAAkB,WACnHryH,EAAE6G,SAASmC,iBAAiB6H,IAAI,cAAerP,EAAMiM,kBACtDuB,GAAGujH,EAAgB,WACdriH,EAAKwoH,mBACLxoH,EAAKwoH,kBAAkBnrF,SAG/Br9B,EAAKvN,QAAQiuB,KAAK+hG,GAAanmH,KAAKgiB,EAAU,GAAGxf,GAAGsjH,EAAU,WAC1DpiH,EAAK4mH,uBACN9nH,GAAG2xE,EAAO,SAAUpvE,GACnBrB,EAAK2mH,gBAAgBtlH,EAAEmY,QACvBnY,EAAE9D,mBACHuB,GAAGg9F,EAAO18F,EAAMY,EAAKmxE,OAAQnxE,IAAOlB,GAAG45D,EAAMt5D,EAAMY,EAAKoxE,MAAOpxE,IAClEA,EAAKvN,QAAQiuB,KAAK+hG,GAAaz/F,IAAIu/F,EAAUjxH,EAAMiM,gBAAgB4kB,GAAG,GAAGrjB,GAAGyjH,EAAUnjH,EAAM,SAAUiC,GAClGjI,KAAKi4E,SAAShwE,EAAG,gBAClBrB,IAAOjP,MAAMoxB,GAAG,GAAGrjB,GAAGyjH,EAAUnjH,EAAM,SAAUiC,GAC/CjI,KAAKi4E,SAAShwE,EAAG,eAClBrB,IACHA,EAAKxG,QAAQgf,SAAU,IAE3BG,QAAS,WACL,GAAI3Y,GAAO5G,IACX4G,GAAKvN,QAAQsxD,YAAY++D,GAAepvH,SAAS4uF,GACjDtiF,EAAKvN,QAAQiuB,KAAK,SAASypB,KAAK0mC,EAAUA,GAC1C7wE,EAAKvN,QAAQiuB,KAAKiiG,EAAgB,KAAOD,GAAgB1/F,IAAIm/F,GAAkBn/F,IAAIq/F,GACnFriH,EAAKvN,QAAQiuB,KAAK+hG,GAAanmH,KAAKgiB,MAAc0E,IAAIo/F,GAAUp/F,IAAIu/F,GAAUv/F,IAAIytD,GAAOztD,IAAI84E,GAAO94E,IAAI01C,GACxG14D,EAAKxG,QAAQgf,SAAU,GAE3B64D,SAAU,SAAUhwE,EAAGujB,GACnB,GAAmHglG,GAAoBC,EAAkBC,EAArJ9pH,EAAO5G,KAAM2wH,EAAsB/pH,EAAKxG,QAAQg0B,eAAgBw8F,EAAoBhqH,EAAKxG,QAAQi0B,YACjGpsB,GAAEmuB,UAAWxvB,GAAK0jH,UAClB1jH,EAAK+mH,uBACS,eAAVniG,GACAklG,EAAmB9pH,EAAKymH,kBAAoBzmH,EAAKsmH,iBACjDyD,EAAsB/pH,EAAK0jH,QAAQriH,EAAEmuB,SAASu6F,GAC1CA,EAAsBC,IACtBA,EAAoBD,KAGxBD,EAAmB9pH,EAAKymH,kBAAoBzmH,EAAKwmH,gBACjDwD,EAAoBhqH,EAAK0jH,QAAQriH,EAAEmuB,SAASw6F,GACxCD,EAAsBC,IACtBD,EAAsBC,IAG9BhqH,EAAK6nH,iBAAiBh/G,EAAMkhH,GAAsBlhH,EAAMmhH,IACxDJ,EAAqB5xH,KAAKlG,IAAIi4H,EAAqB/pH,EAAKxG,QAAQg0B,gBAChEq8F,EAAmB7xH,KAAKoT,IAAI4+G,EAAmBhqH,EAAKxG,QAAQi0B,cAC5Dq8F,EAAiBr8F,aAAez1B,KAAKlG,IAAI+3H,EAAkB7pH,EAAKxG,QAAQg0B,gBACxEs8F,EAAiBt8F,eAAiBx1B,KAAKoT,IAAIw+G,EAAoB5pH,EAAKxG,QAAQi0B,cAC5Eq8F,EAAiBpD,eAAe1mH,EAAKhJ,QAAQgJ,EAAKumH,gBAClDllH,EAAE9D,mBAGVgrG,QAAS,SAAU/6E,EAAgBC,GAA1B,GACDztB,GAAO5G,KAAMkS,EAAStL,EAAKhJ,QAC3B68B,EAASvoB,EAAO,IAAMkiB,GAAkBliB,EAAO,IAAMmiB,CACzDztB,GAAKhJ,OACDw2B,EACAC,IAEAoG,GACA7zB,EAAKoB,QAAQyxB,GACTvnB,QACIkiB,EACAC,GAEJz2B,OACIw2B,EACAC,MAKhBz2B,MAAO,SAAUA,GACb,MAAIA,IAASA,EAAMhG,OACRoI,KAAKy2F,OAAO74F,EAAM,GAAIA,EAAM,IAE5BoC,KAAKy2F,UAGpBA,OAAQ,SAAUxnF,EAAOtX,GACrB,GAAIiP,GAAO5G,KAAMI,EAAUwG,EAAKxG,QAASg0B,EAAiBh0B,EAAQg0B,eAAgBC,EAAej0B,EAAQi0B,YACzG,OAAI5e,OAAMxG,IAAUwG,MAAM9d,IAElBy8B,EACAC,IAGJplB,EAAQQ,EAAMR,GACdtX,EAAM8X,EAAM9X,GAEZsX,GAAS7O,EAAQ4R,KAAO/C,GAAS7O,EAAQ1H,KAAOf,GAAOyI,EAAQ4R,KAAOra,GAAOyI,EAAQ1H,KAAOuW,GAAStX,IACjGy8B,GAAkBnlB,GAASolB,GAAgB18B,IAC3CiP,EAAK7O,QAAQuvB,KAAK,SAASyB,GAAG,GAAGgoB,KAAK,QAASw3E,EAAYt5G,IAAQtX,MAAMoxB,GAAG,GAAGgoB,KAAK,QAASw3E,EAAY5wH,IACzGyI,EAAQg0B,eAAiBnlB,EACzB7O,EAAQi0B,aAAe18B,EACvBiP,EAAKqkH,WACLrkH,EAAKgoH,iBAAiB3/G,EAAOtX,KATjCsX,IAaRiD,OAAQ,SAAUjD,EAAOtX,GACrB,MAAIoO,GAAQkJ,GACDjP,KAAKy2F,OAAOxnF,EAAM,GAAIA,EAAM,IAE5BjP,KAAKy2F,OAAOxnF,EAAOtX,IAGlCszH,SAAU,WACN,GAAIrkH,GAAO5G,KAAMI,EAAUwG,EAAKxG,OAChCwG,GAAKoB,QAAQkhH,GACTh3G,QACI9R,EAAQg0B,eACRh0B,EAAQi0B,cAEZz2B,OACIwC,EAAQg0B,eACRh0B,EAAQi0B,gBAGZj0B,EAAQg0B,gBAAkBh0B,EAAQ1H,KAAO0H,EAAQi0B,cAAgBj0B,EAAQ1H,KACzEkO,EAAKyoH,WAAW,gBAGxBT,iBAAkB,SAAU3/G,EAAOtX,GAC/B,GAA8Fg4G,GAA1F/oG,EAAO5G,KAAMiwH,EAAcrpH,EAAKvN,QAAQiuB,KAAK+hG,GAAc/4C,EAAO1pE,EAAKymH,iBAC3E1d,GAAiB/oG,EAAKkmH,oBAClB79G,EACAtX,GACD24E,GACH2/C,EAAYlnG,GAAG,GAAG7lB,KAAK,gBAAiB+L,GACxCghH,EAAYlnG,GAAG,GAAG7lB,KAAK,gBAAiBvL,GACxCs4H,EAAY/sH,KAAK,iBAAkBysG,IAEvC8e,iBAAkB,SAAUr6F,EAAgBC,GACxC,GAAIj0B,GAAUJ,KAAKI,OACnBg0B,GAAiB37B,EAAKC,IAAID,EAAKuZ,IAAIoiB,EAAgBh0B,EAAQ1H,KAAM0H,EAAQ4R,KACzEqiB,EAAe57B,EAAKC,IAAID,EAAKuZ,IAAIqiB,EAAcj0B,EAAQ1H,KAAM0H,EAAQ4R,KACjEoiB,GAAkBh0B,EAAQ1H,KAAO27B,GAAgBj0B,EAAQ1H,KACzDsH,KAAKqvH,WAAW,eAEpBrvH,KAAKmvG,QAAQ12G,EAAKuZ,IAAIoiB,EAAgBC,GAAe57B,EAAKC,IAAI07B,EAAgBC,KAElFg7F,WAAY,SAAUnwH,GAClBc,KAAK3G,QAAQiuB,KAAK+hG,GAAa3rH,KAAK,SAAUyU,GAC1Czb,EAAEsJ,MAAM/H,IAAI,UAAmB,eAARiH,EAAwB,EAAIiT,EAAQA,MAGnE07G,kBAAmB,WACf,GAAIjnH,GAAO5G,KAAMI,EAAUwG,EAAKxG,OAChCspB,YAAW,WAAA,GACHu3C,GAASr6D,EAAK7O,QAAQuvB,KAAK,SAC3BrY,EAAQgyD,EAAO,GAAGrjE,MAClBjG,EAAMspE,EAAO,GAAGrjE,KACpBgJ,GAAKsL,OAAiB,KAAVjD,GAAgBwG,MAAMxG,GAAS7O,EAAQ4R,IAAM/C,EAAe,KAARtX,GAAc8d,MAAM9d,GAAOyI,EAAQ1H,IAAMf,MAGjHmuB,QAAS,WACL,GAAIlf,GAAO5G,IACX2pH,GAAW1lH,GAAG6hB,QAAQ3d,KAAKvB,GAC3BA,EAAKvN,QAAQuwB,IAAIi1C,GAAIv3C,KAAKiiG,EAAgB,KAAOD,GAAgB1/F,IAAIi1C,GAAIlnE,MAAM2vB,KAAK+hG,GAAaz/F,IAAIi1C,GACrGj4D,EAAKsmH,iBAAiB/kD,UAAUriD,UAChClf,EAAKwmH,gBAAgBjlD,UAAUriD,aAGvC+iG,EAAYoF,UAAY,SAAUgC,EAAarpH,EAAMxG,GACjD,QAAS0uH,GAAclxH,GACnBA,EAAQA,KACR,IAAI+yH,GAAsB/yH,EAAM,GAAKwC,EAAQ4R,IAAK4+G,EAAoBhzH,EAAM,GAAKwC,EAAQ4R,IAAK6+G,EAAsBp4H,EAAK8oD,KAAK9xC,EAAMkhH,EAAsBvwH,EAAQ2nH,YAAa+I,EAAoBr4H,EAAK8oD,KAAK9xC,EAAMmhH,EAAoBxwH,EAAQ2nH,YAAa3zF,EAAiBxtB,EAAK4lH,YAAYqE,GAAsBx8F,EAAeztB,EAAK4lH,YAAYsE,GAAoBC,EAAa1+G,SAASzL,EAAKmjH,WAAWkG,EAAYlnG,GAAG,IAAM,EAAG,IAAKmmG,EAAgBtoH,EAAK46E,OAAS,EAAI,CAC7cyuC,GAAYlnG,GAAG,GAAG9wB,IAAI2O,EAAKupE,UAAW/7C,EAAiB28F,EAAa7B,GAAev3H,MAAMoxB,GAAG,GAAG9wB,IAAI2O,EAAKupE,UAAW97C,EAAe08F,EAAa7B,GAC/I8B,EAAc58F,EAAgBC,GAElC,QAAS28F,GAAc58F,EAAgBC,GACnC,GAAII,GAAWw8F,EAAmBjC,EAAepoH,EAAKsjH,UAAU5iG,KAAK,sBACrEmN,GAAYh8B,EAAKoG,IAAIu1B,EAAiBC,GACtC26F,EAAapoH,EAAKkjH,SAASr1F,GACvB7tB,EAAK46E,QACLyvC,EAAoBx4H,EAAKC,IAAI07B,EAAgBC,GAC7C26F,EAAa/2H,IAAI,QAAS2O,EAAKwjH,cAAgB6G,EAAoB,KAEnEA,EAAoBx4H,EAAKuZ,IAAIoiB,EAAgBC,GAC7C26F,EAAa/2H,IAAI2O,EAAKupE,UAAW8gD,EAAoB,IAG7DnC,EAAcloH,EAAKhJ,SACnBgJ,EAAKQ,MACDqyB,EACAyqE,EACAglB,GACD,SAAUjhH,GACT6mH,EAAc7mH,EAAEiK,WAGxBha,EAAMmpB,GAAG8G,OAAO0gG,IAClBlyH,OAAOuB,MAAM2sB,QACRluB,OAAOuB,OACE,kBAAVzB,SAAwBA,OAAOgiC,IAAMhiC,OAAS,SAAUiiC,EAAIC,EAAIC,IACrEA,GAAMD,OAEV,SAAUniC,EAAGC,QACVA,OAAO,qBACH,aACA,cACA,cACA,eACA,mBACA,gBACDD,IACL,WAkwBE,MAnvBC,UAAUE,EAAG2b,EAAUzb,GAkGpB,QAASs6H,GAAa5c,EAAMp1G,EAAMu8G,GAC9BA,EAAQD,EAAWC,GACfA,IAAUA,EAAMtlE,OAAOm+D,EAAKmH,WAChB,UAARv8G,IACAo1G,EAAK7d,OAASglB,GAGdA,EADW,GAAXA,EAAM74G,EACE64G,EAAMiK,YAENjK,EAAMgK,QAElBnR,EAAKtsG,QAAQ9I,GAAQtB,MAAO69G,KA0WpC,QAAS0V,GAAS99G,EAAOtb,EAASs7B,GAAlC,GAEQqiB,GACAmpC,CACJ,OAHAxrE,GAAQvX,MAAMiL,UAAUP,MAAM2B,KAAKkL,GAC/BqiC,EAAIriC,EAAMzb,OACVinF,EAAMxrE,EAAMnV,QAAQnG,GACpB8mF,EAAM,EACCxrD,EAAQ,EAAIhgB,EAAMqiC,EAAI,GAAKriC,EAAM,IAE5CwrE,GAAOxrD,EACHwrD,EAAM,EACNA,GAAOnpC,EAEPmpC,GAAOnpC,EAEJriC,EAAMwrE,IAmQjB,QAAS16E,GAAe25E,GACpBA,EAAG35E,iBAEP,QAASiD,GAAKuZ,EAAU7hB,GACpB,MAAO,YACH,MAAO6hB,GAAS7Z,MAAMhI,EAAK/D,YA5uBtC,GACO7C,GAAQvB,OAAOuB,MAAOmpB,EAAKnpB,EAAMmpB,GAAIrc,EAASqc,EAAGrc,OAAQw2G,EAAatjH,EAAMsjH,WAAYS,EAAQ/jH,EAAM+jH,MAAOmV,EAAOl5H,EAAMypB,KAAM0vG,EAAkB,mBAAoBC,EAAoB,mBAAoBC,EAAgB,8IAA+IC,EAAa,0+CAA2+CC,EAAQ,UAAWC,GACp3D5qH,MAAO,QACPkkB,OAAQ,SACR2mG,QAAS,WACTC,WAAY,cACZC,aAAc,0BACfhzD,EAAK,mBAAoBizD,EAAW,QAAUjzD,EAAImlC,EAAa,UAAYnlC,EAAItlE,EAAUrB,EAAMC,QAAQoB,QAASs4F,EAAQt4F,EAAQgB,MAAQhB,EAAQkB,QAAU,EAC7Js3H,EAAgB/sH,EAAOtE,QACvBC,KAAM,SAAU5I,EAASqI,GACrB,GAAiBqmF,GAAb7/E,EAAO5G,IACXgF,GAAOf,GAAGtD,KAAKwH,KAAKvB,EAAM7O,EAASqI,GACnCrI,EAAU6O,EAAK7O,QACfqI,EAAUwG,EAAKxG,QACfwG,EAAK6vF,OAASr2F,EAAQxC,MAAQ49G,EAAWp7G,EAAQxC,OACjDgJ,EAAKorH,UAAYj6H,EAAQmL,KAAK,aAAe,EAC7CujF,EAAS7/E,EAAKqrH,QAAU7xH,EAAQqmF,OAC5BA,GACA1uF,EAAQmL,KAAK,kBAAmBujF,GAEhCrmF,EAAQ8xH,cACRtrH,EAAKurH,eAAiBvrH,EAAK6yF,iBAGnCr5F,SACI8O,KAAM,gBACNtR,MAAO,KACPs0H,aAAa,GAEjBxqH,QACI,SACA,SACA,UAEJ+zG,MAAO,SAAU79G,GAKb,MAJIA,KAAUhH,IACVoJ,KAAKy2F,OAAS+kB,EAAW59G,GACzBoC,KAAKoyH,UAAUpyH,KAAKy2F,SAEjBz2F,KAAKy2F,QAEhB74F,MAAO,SAAU69G,GASb,MARAA,GAAQz7G,KAAKy7G,MAAMA,GACfA,IAEIA,EADAz7G,KAAKI,QAAQq4D,QACLgjD,EAAMiK,YAENjK,EAAMgK,SAGfhK,GAAS,MAEpBh8F,OAAQ,SAAUA,GACW,IAArB1kB,UAAUnD,SACV6nB,GAAS,GAEb/oB,EAAE,sBAAuBsJ,KAAK3G,SAAS6uB,SAClCzI,GACDzf,KAAK3G,QAAQyqD,OAAO,0CAExB9jD,KAAKqyH,UAAU5yG,IAEnBokB,QAAS,SAAU43E,EAAO6W,GACtB,GAAIt2F,GAAOh8B,KAAKy2F,MAChBglB,GAAQz7G,KAAKy7G,MAAMA,GACd6W,IACDtyH,KAAKjI,QAAQiQ,QAAQ,UAChByzG,EAAMtlE,OAAOna,GAENh8B,KAAKkyH,aACblyH,KAAKgI,QAAQ,UAFbhI,KAAKgI,QAAQ,UAAYpK,MAAOoC,KAAKpC,YAMjDu0H,eAAgB,SAAU1W,GACtByV,EAAalxH,KAAM,SAAUy7G,IAEjChiB,eAAgB,SAAUgiB,GACtByV,EAAalxH,KAAM,SAAUy7G,IAEjC31F,QAAS,WACD9lB,KAAKjI,SACLiI,KAAKjI,QAAQ6xB,IAAIi1C,GAEjB7+D,KAAK3G,SACL2G,KAAK3G,QAAQuwB,IAAIi1C,GAAIv3C,KAAK,KAAKsC,IAAIi1C,GAEvC7+D,KAAK3G,QAAU,KACf2L,EAAOf,GAAG6hB,QAAQ3d,KAAKnI,OAE3BoyH,UAAW17H,EAAEkK,KACb2xH,cAAe,WACX,MAAO,OAEX1pD,QAAS,WACL7oE,KAAKgI,QAAQ,aAiBjBwqH,EAAeT,EAAcrxH,QAC7BC,KAAM,SAAU5I,EAASqI,GAAnB,GAKEqyH,GAyBAC,EAA6Bz5H,EAAOC,EA7BpC0N,EAAO5G,IA8BX,IA7BA+xH,EAAc9tH,GAAGtD,KAAKwH,KAAKvB,EAAM7O,EAASqI,GAC1CrI,EAAU6O,EAAKvN,QAAUuN,EAAK7O,QAC9BqI,EAAUwG,EAAKxG,QACXqyH,EAASryH,EAAQuyH,QACP,WAAVF,GACAA,EAASjB,EACTpxH,EAAQwyH,QAAU,IACD,SAAVH,IACPA,EAASlB,GAEQ,gBAAVkB,KACPA,EAASA,EAAOx7H,MAAM,MAEtBP,EAAEqP,QAAQ0sH,KACVA,EAAS/7H,EAAEsc,IAAIy/G,EAAQ,SAAUx/F,GAC7B,MAAOuoF,GAAWvoF,MAG1BrsB,EAAKisH,aAAezyH,EAAQqmF,QAAUvuF,EAAMyrB,QAAU,YACtD5rB,EAAQuC,SAAS,2BAA2B4I,KAAK,OAAQ,QAAQA,KAAK,gBAAiB,QAAQ4gD,OAAOptD,EAAEkQ,EAAKq5F,WACzGwyB,OAAQA,EACRG,QAASxyH,EAAQwyH,QACjBF,SAAUtyH,EAAQsyH,SAClB90H,MAAOgJ,EAAK6vF,OACZ5yE,GAAIzjB,EAAQqmF,WACX/gF,GAAGosH,EAAU,UAAW,SAAUh0C,GACnCl3E,EAAKi9B,QAAQntC,EAAEonF,EAAGl/C,eAAe3mC,IAAIo5H,MACtCnuH,KAAK,WAAY0D,EAAKorH,WAAWtsH,GAAGs+F,EAAY58F,EAAKR,EAAKqxE,SAAUrxE,IACnE8rH,EAAWtyH,EAAQsyH,SACT,CACV,GAAI,gBAAgBx4H,WAAYw4H,IAC5Bz5H,EAAQC,EAASiJ,WAAWuwH,OACzB,CAAA,GAAuB,gBAAZA,GAId,KAAU5pH,OAAM,gDAHhB7P,GAAQkJ,WAAWuwH,EAASz5H,OAC5BC,EAASiJ,WAAWuwH,EAASx5H,QAIjCnB,EAAQuvB,KAAK,WAAWrvB,KACpBgB,MAAOA,EACPC,OAAQA,MAIpBq7B,MAAO,WACHv0B,KAAK3G,QAAQk7B,SAEjBn0B,SACI8O,KAAM,eACN0jH,QAAS,GACTF,SAAU,KACVC,QAAS,SAEbN,UAAW,SAAU5yG,GACbA,EACAzf,KAAK3G,QAAQ6J,KAAK,WAAYlD,KAAKgyH,WAEnChyH,KAAK3G,QAAQ+rB,WAAW,aAGhC6yD,SAAU,SAAUhwE,GAAV,GACFojD,GAqBQowD,EArBEpiH,EAAU2G,KAAK3G,QAASmtB,EAAQntB,EAAQiuB,KAAK,WAAY3b,EAAU6a,EAAM3iB,OAAO,IAAMytH,GAAmB7tG,IAAI,GAAI2S,EAAUnuB,EAAEmuB,OAiB3I,IAhBIA,GAAWg7F,EAAKlvG,KAChBmpC,EAAW8lE,EAAS3qG,EAAO7a,MACpByqB,GAAWg7F,EAAKhvG,MACvBipC,EAAW8lE,EAAS3qG,EAAO7a,EAAS,GAC7ByqB,GAAWg7F,EAAK/uG,KACvBgpC,EAAW8lE,EAAS3qG,EAAO7a,EAAS3L,KAAKI,QAAQwyH,SAC1Cx8F,GAAWg7F,EAAKjvG,GACvBkpC,EAAW8lE,EAAS3qG,EAAO7a,GAAU3L,KAAKI,QAAQwyH,SAC3Cx8F,GAAWg7F,EAAKpvG,OACvB7d,EAAe8D,GACX0D,GACA3L,KAAK6jC,QAAQntC,EAAEiV,GAAS1T,IAAIo5H,KAEzBj7F,GAAWg7F,EAAKnvG,KACvBjiB,KAAK6oE,UAELxd,EAAU,CACVlnD,EAAe8D,GACfjI,KAAKy+F,SAASpzC,EACd,KACQowD,EAAQD,EAAWnwD,EAASpzD,IAAIo5H,IACpCrxH,KAAKmyH,eAAe1W,GACtB,MAAOqX,OAIjBr0B,SAAU,SAAUlyD,GAChBvsC,KAAK3G,QAAQiuB,KAAK,IAAMgqG,GAAmB3mE,YAAY2mE,GAAmBpuH,KAAK,iBAAiB,GAAOkiB,WAAW,MAClH1uB,EAAE61C,GAAMjyC,SAASg3H,GAAmBpuH,KAAK,iBAAiB,GAAMA,KAAK,KAAMlD,KAAK6yH,aAChF7yH,KAAKjI,QAAQqtB,WAAW,yBAAyBliB,KAAK,wBAAyBlD,KAAK6yH,cAExFT,UAAW,SAAU3W,GACjB,GAAIlvE,GAAO,IACXvsC,MAAK3G,QAAQiuB,KAAK,WAAW5pB,KAAK,WAC9B,GAAI0L,GAAIoyG,EAAW9kH,EAAEsJ,MAAM/H,IAAIo5H,GAC/B,IAAIjoH,GAAKA,EAAE+sC,OAAOslE,GAEd,MADAlvE,GAAOvsC,MACA,IAGfA,KAAKy+F,SAASlyD,IAElB0zD,UAAW/nG,EAAMuK,SAAS,qaAA0c6uH,EAAoB,2EAExfyB,EAAkBhB,EAAcrxH,QAChCC,KAAM,SAAU5I,EAASqI,GACrB,GAAIwG,GAAO5G,IACX+xH,GAAc9tH,GAAGtD,KAAKwH,KAAKvB,EAAM7O,EAASqI,GAC1CA,EAAUwG,EAAKxG,QACfA,EAAQshB,SAAWthB,EAAQA,QAAU1J,EAAEgK,OAAOkG,EAAKxG,QAAQshB,SAAUthB,EAAQA,QAAQshB,UAAY9a,EAAKxG,QAAQshB,SAC9G3pB,EAAU6O,EAAK7O,QACf6O,EAAKvN,QAAUtB,EAAQuC,SAAS,8BAA8BwpD,OAAOl9C,EAAKq5F,UAAU7/F,IACpFwG,EAAKosH,aAAet8H,EAAE,2DAA4DqB,GAClF6O,EAAKqsH,eAAiBv8H,EAAE,4BAA6BqB,GACrD6O,EAAKssH,aAAex8H,EAAE,sBAAuBqB,GAC7C6O,EAAKusH,WACLvsH,EAAKwsH,WACLxsH,EAAKwrH,UAAUxrH,EAAK6vF,QAAU+kB,EAAW,SACzCzjH,EAAQuvB,KAAK,uBAAuB5hB,GAAGs+F,EAAY,SAAUlmB,GAAV,GAInC29B,GACA3uE,EAJRhtC,EAAQE,IACZ,IAAI89E,EAAG1nD,SAAWg7F,EAAKpvG,MACnB,IACQy5F,EAAQD,EAAW17G,EAAMlC,OACzBkvC,EAAMlmC,EAAK60G,QACf70G,EAAKi9B,QAAQ43E,EAAOA,EAAMtlE,OAAOrJ,IACnC,MAAOgmF,GACLp8H,EAAEoJ,GAAOxF,SAAS,qBAEfsM,GAAKxG,QAAQizH,YACpB3pG,WAAW,WACP,GAAI+xF,GAAQD,EAAW17G,EAAMlC,OAAO,EAChC69G,IACA70G,EAAKwrH,UAAU3W,GAAO,IAE3B,MAER9jH,MAAM+N,GAAGosH,EAAU,2BAA4B,WAC1ClrH,EAAKxG,QAAQkzH,cACb1sH,EAAKoB,QAAQ,UAEbpB,EAAKi9B,QAAQj9B,EAAK2sH,aAEvB7tH,GAAGosH,EAAU,4BAA6B,WACzClrH,EAAKwrH,UAAUxrH,EAAK60G,SACpB70G,EAAKiiE,YAELgpB,GACAjrF,EAAK4sH,kBAGb1tG,QAAS,WACL9lB,KAAKyzH,WAAW3tG,UACZ9lB,KAAK0zH,gBACL1zH,KAAK0zH,eAAe5tG,UAExB9lB,KAAKyzH,WAAazzH,KAAK0zH,eAAiB1zH,KAAK2zH,SAAW3zH,KAAK4zH,WAAa5zH,KAAKgzH,aAAehzH,KAAKizH,eAAiBjzH,KAAKkzH,aAAe,KACxInB,EAAc9tH,GAAG6hB,QAAQ3d,KAAKnI,OAElCI,SACI8O,KAAM,kBACNupD,SAAS,EACT4zB,SAAS,EACTvsF,OAAO,EACP+zH,SAAS,EACT5iB,aAAa,EACboiB,YAAY,EACZ3xG,SAAUgwG,GAEd8B,eAAgB,WACZ,GAAIM,GAAQ9zH,KAAKjI,QAAQuvB,KAAK,iCAAiC,GAAInE,EAAM2wG,EAAMh2H,aAAai2H,eAC5F5wG,GAAMA,EAAIhsB,QAAQ,4BAA6B,IAC/C28H,EAAMh6H,MAAM+J,OAAS,2DAA8Dsf,EAAM,4BAE7FgwG,SAAU,WAEN,QAASa,GAAU/rH,GACfrB,EAAKwrH,UAAUxrH,EAAK2sH,QAAQtrH,EAAErK,MAAO,KAAM,KAAM,OAWrD,QAASq2H,GAAchsH,GACnBrB,EAAKwrH,UAAUxrH,EAAK2sH,QAAQ,KAAM,KAAM,KAAMtrH,EAAErK,MAAQ,MAd5D,GAAIgJ,GAAO5G,KAAMjI,EAAU6O,EAAK7O,QAASm8H,EAAYn8H,EAAQuvB,KAAK,iBAAkB6sG,EAAgBp8H,EAAQuvB,KAAK,yBAIjH4sG,GAAUhxH,KAAK,aAAc,kBAC7B0D,EAAK6sH,WAAaS,EAAUE,aACxBpiH,IAAK,EACLtZ,IAAK,IACLgvH,cAAe,OACfC,aAAa,EACb0M,MAAOL,EACPv5F,OAAQu5F,IACTx4H,KAAK,eAIR24H,EAAcjxH,KAAK,aAAc,WACjC0D,EAAK8sH,eAAiBS,EAAcC,aAChCpiH,IAAK,EACLtZ,IAAK,IACLgvH,cAAe,OACfC,aAAa,EACb0M,MAAOJ,EACPx5F,OAAQw5F,IACTz4H,KAAK,gBAEZ43H,SAAU,WAEN,QAAShrF,GAAOnV,EAAG5hB,GACf,GAAIjS,GAASY,KAAKZ,OAAQk/B,EAAKrL,EAAI7zB,EAAOzG,KAAM4lC,EAAKltB,EAAIjS,EAAOE,IAAKg1H,EAAKt0H,KAAK/G,MAAOs7H,EAAKv0H,KAAK9G,MAChGolC,GAAKA,EAAK,EAAI,EAAIA,EAAKg2F,EAAKA,EAAKh2F,EACjCC,EAAKA,EAAK,EAAI,EAAIA,EAAKg2F,EAAKA,EAAKh2F,EACjC33B,EAAK4tH,UAAUl2F,EAAKg2F,EAAI,EAAI/1F,EAAKg2F,GALrC,GAAI3tH,GAAO5G,KAAMjI,EAAU6O,EAAK7O,QAAS08H,EAAU18H,EAAQuvB,KAAK,oBAAqBotG,EAAYD,EAAQntG,KAAK,iBAAiBpkB,KAAK,WAAY,GAAGwC,GAAGs+F,EAAY58F,EAAKR,EAAKqxE,SAAUrxE,GAOtLA,GAAK+tH,WAAa,GAAIz8H,GAAM0pC,WAAW6yF,GACnC1xF,QAAQ,EACRzB,MAAO,SAAUr5B,GACbjI,KAAKZ,OAASlH,EAAM+G,UAAUw1H,GAC9Bz0H,KAAK/G,MAAQw7H,EAAQx7H,QACrB+G,KAAK9G,OAASu7H,EAAQv7H,SACtBw7H,EAAUngG,QACV6T,EAAOjgC,KAAKnI,KAAMiI,EAAEgrB,EAAEvX,SAAUzT,EAAEoJ,EAAEqK,WAExCzM,MAAO,WACHwlH,EAAQn6H,SAAS,cACjBo6H,EAAUngG,SAEdxJ,KAAM,SAAU9iB,GACZA,EAAE9D,iBACFikC,EAAOjgC,KAAKnI,KAAMiI,EAAEgrB,EAAEvX,SAAUzT,EAAEoJ,EAAEqK,WAExC/jB,IAAK,WACD88H,EAAQ9pE,YAAY,iBAG5B/jD,EAAK+sH,SAAWc,EAChB7tH,EAAKgtH,WAAac,GAEtBrC,UAAW,SAAU5yG,GACjBzf,KAAKyzH,WAAWh0G,OAAOA,GACnBzf,KAAK0zH,gBACL1zH,KAAK0zH,eAAej0G,OAAOA,GAE/Bzf,KAAK3G,QAAQiuB,KAAK,SAASpkB,KAAK,YAAauc,EAC7C,IAAI+L,GAASxrB,KAAK2zH,SAASrsG,KAAK,gBAC5B7H,GACA+L,EAAOtoB,KAAK,WAAYlD,KAAKgyH,WAE7BxmG,EAAOpG,WAAW,aAG1B6yD,SAAU,SAAU6F,GAEhB,QAAS/yD,GAAKgmB,EAAMpgC,GAChB,GAAIvH,GAAIxC,EAAK2sH,SACbnqH,GAAE2nC,IAASpgC,GAAKmtE,EAAGznD,SAAW,IAAO,KACjCjtB,EAAE2nC,GAAQ,IACV3nC,EAAE2nC,GAAQ,GAEV3nC,EAAE2nC,GAAQ,IACV3nC,EAAE2nC,GAAQ,GAEdnqC,EAAKwrH,UAAUhpH,GACfjF,EAAe25E,GAEnB,QAAS82C,GAAIjkH,GACT,GAAIvH,GAAIxC,EAAK2sH,SACbnqH,GAAE88G,GAAKv1G,GAAKmtE,EAAGznD,SAAW,EAAI,GAC1BjtB,EAAE88G,EAAI,IACN98G,EAAE88G,EAAI,GAEN98G,EAAE88G,EAAI,MACN98G,EAAE88G,EAAI,KAEVt/G,EAAKwrH,UAAUhpH,GACfjF,EAAe25E,GAvBnB,GAAIl3E,GAAO5G,IAyBX,QAAQ89E,EAAG1nD,SACX,IAAKg7F,GAAKlvG,KACF47D,EAAG/H,QACH6+C,MAEA7pG,EAAK,OAET,MACJ,KAAKqmG,GAAKhvG,MACF07D,EAAG/H,QACH6+C,EAAI,GAEJ7pG,EAAK,IAAK,EAEd,MACJ,KAAKqmG,GAAKjvG,GACN4I,EAAK+yD,EAAG/H,SAAWnvE,EAAK8sH,eAAiB,IAAM,IAAK,EACpD,MACJ,KAAKtC,GAAK/uG,KACN0I,EAAK+yD,EAAG/H,SAAWnvE,EAAK8sH,eAAiB,IAAM,OAC/C,MACJ,KAAKtC,GAAKpvG,MACNpb,EAAKi9B,QAAQj9B,EAAK2sH,UAClB,MACJ,KAAKnC,GAAKzuG,GACN/b,EAAKvN,QAAQiuB,KAAK,uBAAuBiN,QAAQO,QACjD,MACJ,KAAKs8F,GAAKnvG,IACNrb,EAAKiiE,YAIbt0C,MAAO,WACHv0B,KAAK4zH,WAAWr/F,SAEpBg/F,QAAS,SAAUrN,EAAGj1G,EAAGvH,EAAG9G,GACxB,GAAIohE,GAAOhkE,KAAK2zH,SAAU16H,EAAQ+qE,EAAK/qE,QAASC,EAAS8qE,EAAK9qE,SAAU27H,EAAiB70H,KAAK4zH,WAAWv9D,UAazG,OAZS,OAAL6vD,IACAA,EAAIlmH,KAAKyzH,WAAW71H,SAEf,MAALqT,IACAA,EAAI4jH,EAAel8H,KAAOM,GAErB,MAALyQ,IACAA,EAAI,EAAImrH,EAAev1H,IAAMpG,GAExB,MAAL0J,IACAA,EAAI5C,KAAK0zH,eAAiB1zH,KAAK0zH,eAAe91H,QAAU,IAAM,GAE3Dq+G,EAAMkL,QAAQjB,EAAGj1G,EAAGvH,EAAG9G,IAElC4xH,UAAW,SAAUvjH,EAAGvH,GACpB,GAAI+xG,GAAQz7G,KAAKuzH,QAAQ,KAAMtiH,EAAGvH,EAAG,KACrC1J,MAAKoyH,UAAU3W,IAEnB2W,UAAW,SAAU3W,EAAOqZ,GACxB,GAAIluH,GAAO5G,KAAMgkE,EAAOp9D,EAAK+sH,QACxBlY,KAGLz7G,KAAKkzH,aAAahwH,KAAK,QAAS0D,EAAKxG,QAAQshB,SAASmwG,cACtD7xH,KAAKkzH,aAAavoE,YAAY,iBAC9B/jD,EAAKqsH,eAAeh7H,IAAIo5H,EAAiB5V,EAAMoK,aAC1CiP,GACDluH,EAAKssH,aAAapmF,IAAIlmC,EAAK8sH,eAAiBjY,EAAMiK,YAAcjK,EAAMgK,SAE1E7+G,EAAKurH,eAAe1W,GACpBA,EAAQA,EAAM4J,QACdz+G,EAAKgtH,WAAW37H,KACZU,KAAM8iH,EAAMxqG,EAAI+yD,EAAK/qE,QAAU,KAC/BqG,KAAM,EAAIm8G,EAAM/xG,GAAKs6D,EAAK9qE,SAAW,OAEzC0N,EAAKosH,aAAa/6H,IAAIo5H,EAAiBpV,EAAMkL,QAAQ1L,EAAMyK,EAAG,EAAG,EAAG,GAAGT,SACvE7+G,EAAK6sH,WAAW71H,MAAM69G,EAAMyK,GACxBt/G,EAAK8sH,gBACL9sH,EAAK8sH,eAAe91H,MAAM,IAAM69G,EAAM74G,KAG9C2vH,cAAe,WACX,MAAOvyH,MAAKI,QAAQisF,QAAU,KAAOrsF,KAAKuzH,WAE9CtzB,UAAW/nG,EAAMuK,SAAS,y+BAiB1BsyH,EAAc/vH,EAAOtE,QACrBC,KAAM,SAAU5I,EAASqI,GAAnB,GAKExC,GAOAi+D,EAIIrsB,EACA3rB,EAWJkyF,EA3BAnvG,EAAO5G,IACXgF,GAAOf,GAAGtD,KAAKwH,KAAKvB,EAAM7O,EAASqI,GACnCA,EAAUwG,EAAKxG,QACfrI,EAAU6O,EAAK7O,QACX6F,EAAQ7F,EAAQmL,KAAK,UAAYnL,EAAQ+0C,MAEzClvC,EADAA,EACQ49G,EAAW59G,GAAO,GAElB49G,EAAWp7G,EAAQxC,OAAO,GAEtCgJ,EAAK6vF,OAASr2F,EAAQxC,MAAQA,EAC1Bi+D,EAAUj1D,EAAKvN,QAAU3C,EAAEkQ,EAAKq5F,UAAU7/F,IAC9CrI,EAAQ+I,OAAO08D,MAAM3B,GACjB9jE,EAAQgC,GAAG,WACXhC,EAAQ++B,SAAS+kC,GACbrsB,EAAQz3C,EAAQkgB,QAAQ,SACxB4L,EAAK9rB,EAAQmL,KAAK,MAClB2gB,IACA2rB,EAAQA,EAAMluC,IAAI,cAAgBuiB,EAAK,OAE3C2rB,EAAMxuB,MAAM,SAAU88D,GAClBl3E,EAAKy1E,OACLyB,EAAG35E,oBAGXyC,EAAKorH,UAAYj6H,EAAQmL,KAAK,aAAe,EAC7C0D,EAAK6Y,QAAQ1nB,EAAQmL,KAAK,aACtB6yG,EAAYh+G,EAAQmL,KAAK,aACzB6yG,IACAh+G,EAAQmL,KAAK,YAAa,MAC1B24D,EAAQ34D,KAAK,YAAa6yG,IAE9BnvG,EAAKQ,KAAK,WAAY,SAAU02E,GACvBA,EAAG15E,sBACJwC,EAAKuZ,WAGbvZ,EAAKwrH,UAAUx0H,IAEnBkoB,QAAS,WACL9lB,KAAK3G,QAAQuwB,IAAIi1C,GAAIv3C,KAAK,KAAKsC,IAAIi1C,GAC/B7+D,KAAK84F,SACL94F,KAAKg1H,UAAUlvG,UACf9lB,KAAK84F,OAAOhzE,WAEhB9lB,KAAKg1H,UAAYh1H,KAAK84F,OAAS94F,KAAK3G,QAAU,KAC9C2L,EAAOf,GAAG6hB,QAAQ3d,KAAKnI,OAE3Byf,OAAQ,SAAUA,GACd,GAAI7Y,GAAO5G,KAAM3G,EAAUuN,EAAKvN,QAAS47H,EAAe57H,EAAQsB,SAAS,kBAAmBgsF,EAAQsuC,EAAa3tG,KAAK,YAC7F,KAArBvsB,UAAUnD,SACV6nB,GAAS,GAEb7Y,EAAK7O,QAAQmL,KAAK,YAAauc,GAC/BpmB,EAAQ6J,KAAK,iBAAkBuc,GAC/BknE,EAAM/8D,IAAIi1C,GAAIn5D,GAAG,YAAcm5D,EAAI16D,GACnC9K,EAAQiB,SAAS,oBAAoB8qB,WAAW,YAAY9jB,IAAI,IAAKjI,GAASuwB,IAAIi1C,GAC9Ep/C,EACApmB,EAAQsxD,YAAY,oBAAoBznD,KAAK,WAAY0D,EAAKorH,WAAWtsH,GAAG,aAAem5D,EAAI,WAC3Fo2D,EAAa36H,SAAS,mBACvBoL,GAAG,aAAem5D,EAAI,WACrBo2D,EAAatqE,YAAY,mBAC1BjlD,GAAG,QAAUm5D,EAAI,WAChBo2D,EAAa36H,SAAS,qBACvBoL,GAAG,OAASm5D,EAAI,WACfo2D,EAAatqE,YAAY,qBAC1BjlD,GAAGs+F,EAAY58F,EAAKR,EAAKqxE,SAAUrxE,IAAOlB,GAAGosH,EAAU,YAAa1qH,EAAKR,EAAKuZ,OAAQvZ,IAAOlB,GAAGosH,EAAUlrH,EAAKxG,QAAQ80H,SAAW,eAAiB,oBAAqB,WACvKtuH,EAAKoB,QAAQ,cAGjBpB,EAAK01E,SAGb2jB,UAAW/nG,EAAMuK,SAAS,oeAC1BrC,SACI8O,KAAM,cACNyjH,QAAS,KACTC,QAAS,GACTsC,SAAU,KACVt3H,MAAO,KACP8jB,SAAUgwG,EACVj5D,SAAS,EACT4zB,SAAS,EACTwnC,SAAS,EACT5iB,aAAa,EACb7B,aAAc,2CAElB1nG,QACI,WACA,SACA,SACA,OACA,SAEJ20E,KAAM,WACGr8E,KAAKjI,QAAQg5C,KAAK,aACnB/wC,KAAKm1H,YAAY94C,QAGzBC,MAAO,WACH,GAAI84C,GAAap1H,KAAKg1H,WAAah1H,KAAKg1H,UAAU50H,WAClDg1H,GAAWl4C,UAAW,EACtBl9E,KAAKm1H,YAAY74C,cACV84C,GAAWl4C,UAEtB/8D,OAAQ,WACCngB,KAAKjI,QAAQg5C,KAAK,aACnB/wC,KAAKm1H,YAAYh1G,UAGzBk1G,aAAc,WACV,MAAOr1H,MAAK3G,QAAQiuB,KAAK,0DAE7Bm0F,MAAOsW,EAAc9tH,GAAGw3G,MACxB79G,MAAOm0H,EAAc9tH,GAAGrG,MACxBimC,QAASkuF,EAAc9tH,GAAG4/B,QAC1BsuF,eAAgBJ,EAAc9tH,GAAGkuH,eACjCmD,kBAAmB,WACf,GAAI72H,GAAKuB,KAAKjI,QAAQ,EACtB,OAAO,WAAWmC,KAAKuE,EAAG2lB,UAAY,WAAWlqB,KAAKuE,EAAGS,OAE7DkzH,UAAW,SAAUx0H,GACjB,GAAI+xG,GAAiB,EACjB/xG,KAEI+xG,EADA3vG,KAAKs1H,qBAAkC,GAAX13H,EAAMgF,EACjBhF,EAAM6nH,QAEN7nH,EAAM8nH,YAE3B1lH,KAAKjI,QAAQ+0C,IAAI6iE,IAEhB3vG,KAAK6vG,gBACN7vG,KAAK6vG,cAAgB33G,EAAMuK,SAASzC,KAAKI,QAAQgvG,eAErDpvG,KAAK3G,QAAQ6J,KAAK,aAAclD,KAAK6vG,cAAcF,IACnD3vG,KAAKmyH,eAAev0H,GACpBoC,KAAK3G,QAAQiuB,KAAK,qBAAqBrvB,IAAIo5H,EAAiBzzH,EAAQA,EAAMioH,YAAc4L,GACxFzxH,KAAKq1H,eAAe1lB,EAAiB,OAAS,WAElD13B,SAAU,SAAU6F,GAChB,GAAI/+E,GAAM++E,EAAG1nD,OACTp2B,MAAKm1H,YAAY3xH,WACbzE,GAAOqyH,EAAKnvG,IACZjiB,KAAKg1H,UAAUnsD,UAEf7oE,KAAKg1H,UAAU/8C,SAAS6F,GAE5B35E,EAAe25E,IACR/+E,GAAOqyH,EAAKpvG,OAASjjB,GAAOqyH,EAAK/uG,OACxCriB,KAAKq8E,OACLl4E,EAAe25E,KAGvBq3C,UAAW,WAAA,GAGC/0H,GACAm1H,EAUA1xG,EACA9f,EAdJ6C,EAAO5G,KAAM69E,EAAQj3E,EAAKkyF,MAkG9B,OAjGKjb,KACGz9E,EAAUwG,EAAKxG,QAGfm1H,EADAn1H,EAAQuyH,QACOH,EAEAO,EAEnB3yH,EAAQ8xH,aAAc,QACf9xH,GAAQ00B,aACR10B,GAAQq6B,aACRr6B,GAAQ4qB,OACXnH,EAAK3rB,EAAMyrB,OACX5f,EAAW6C,EAAKouH,UAAY,GAAIO,GAAa7+H,EAAE,YAAcmtB,EAAK,OAAOiT,SAASv5B,SAASsa,MAAOzX,GACtGwG,EAAKvN,QAAQ6J,KAAK,YAAa2gB,GAC/Bjd,EAAKkyF,OAASjb,EAAQ95E,EAAS1K,QAAQ0zF,YACnC7Q,OAAQt1E,EAAKvN,QACb2jF,YACI/jF,MAAO,EACPC,OAAQ,KAEbsC,KAAK,cACRuI,EAAShM,QAAQuvB,KAAK,kBAAkBkuG,aACpCr9C,KAAM,cACNn3D,MAAO,SAAU/Y,GACblE,EAAS3D,QAAQkzH,eAAgB,EACjC1sH,EAAKhJ,MAAM,MACXgJ,EAAK7O,QAAQ+0C,IAAI,MACjBlmC,EAAKwrH,UAAU,MACfruH,EAASmvH,aAAapmF,IAAI,IAC1B/oC,EAAS6vH,WAAW37H,KAChBqH,IAAK,MACL3G,KAAM,QAEVoL,EAASkvH,eAAeh7H,IAAIo5H,EAAiBI,GAC7C7qH,EAAKoB,QAAQ,UAAYpK,MAAOgJ,EAAKhJ,UACrCqK,EAAE9D,oBAGVJ,EAASqD,MACL0tB,OAAQ,SAAUgpD,GACdl3E,EAAKwrH,UAAU5W,EAAW19B,EAAGlgF,cACtBmG,GAAS3D,QAAQkzH,eAE5B74F,OAAQ,WACC12B,EAAS3D,QAAQkzH,eAClB1sH,EAAKi9B,QAAQ9/B,EAAS03G,SAE1B70G,EAAK01E,SAETtxD,OAAQ,WACAjnB,EAAS3D,QAAQkzH,gBAAkB1sH,EAAKhJ,SAAWmG,EAASnG,SAC5DgJ,EAAKi9B,QAAQ9/B,EAAS03G,SAAS,GAEnC70G,EAAK01E,WAGbuB,EAAMz2E,MACFk1E,MAAO,SAAUwB,GAAV,GAMC29B,GACAga,EACA73H,EACAwC,CARJ,OAAIwG,GAAKoB,QAAQ,UACb81E,EAAG35E,iBACH,IAEJyC,EAAKvN,QAAQsB,SAAS,kBAAkBgwD,YAAY,mBAChD8wD,EAAQ13G,EAASwuH,gBACjBkD,EAAgB1xH,EAASnG,QACzBA,EAAQgJ,EAAKhJ,QACbwC,EAAU2D,EAAS3D,QAClBq7G,EAWQr7G,EAAQkzH,gBAAkB11H,GACnCgJ,EAAKi9B,QAAQ43E,IAXb/xF,WAAW,WACH9iB,EAAKvN,SACLuN,EAAKvN,QAAQk7B,WAGhBn0B,EAAQ88E,UAAY98E,EAAQkzH,gBAAkB11H,GAAS63H,EACxD7uH,EAAKi9B,QAAQ4xF,GAAe,GAE5B7uH,EAAKwrH,UAAUxrH,EAAK60G,UAd5B70G,IAoBJy1E,KAAM,SAAUyB,GACRl3E,EAAKoB,QAAQ,QACb81E,EAAG35E,iBAEHyC,EAAKvN,QAAQsB,SAAS,kBAAkBL,SAAS,oBAGzDksF,SAAU,WACNziF,EAAS8/B,QAAQj9B,EAAK60G,SAAS,GAC/B13G,EAASwwB,QACT3tB,EAAKvN,QAAQsB,SAAS,kBAAkBL,SAAS,uBAItDujF,IAWfx8D,GAAG8G,OAAOqqG,GACVnxG,EAAG8G,OAAO4qG,GACV1xG,EAAG8G,OAAO4sG,IACZlwG,OAAQxS,UACH1b,OAAOuB,OACE,kBAAVzB,SAAwBA,OAAOgiC,IAAMhiC,OAAS,SAAUiiC,EAAIC,EAAIC,IACrEA,GAAMD,OAEV,SAAUniC,EAAGC,QACVA,OAAO,wBACH,aACA,oBACDD,IACL,WAggBE,MArfC,UAAUE,EAAGE,GAweV,QAAS8+H,GAAW9vF,EAAWxQ,GAC3B,GAAIn3B,GAAY,cAA8B,aAAd2nC,EAA2B,QAAU,UACrE,OAAO,gDAAkDA,EAAY,iBAAmBxQ,EAAO,YAAcA,EAAO,oCAA2CugG,EAAa,IAAM13H,EAAY,mBAElM,QAAS23H,GAASh4H,EAAO8Q,GACrB,GAAIjG,IAAQtG,GAAAA,WAAWvE,EAAO,KAAe3G,MAAMwX,EAInD,OAHIhG,GAAM,KACNA,EAAM,GAAKA,EAAM,GAAGlR,UAAU,EAAGmX,IAE9BjG,EAAMvR,KAAKuX,GAjfzB,GACOvW,GAAQvB,OAAOuB,MAAO+7B,EAAQ/7B,EAAM+7B,MAAOtS,EAAOzpB,EAAMypB,KAAMN,EAAKnpB,EAAMmpB,GAAIrc,EAASqc,EAAGrc,OAAQwN,EAAgBta,EAAMqa,eAAgBuwF,EAAgB5qG,EAAMoa,eAAgB02B,EAAQ9wC,EAAMiK,WAAYiuG,EAAuBl4G,EAAMC,QAAQolB,YAAa7R,EAAaxT,EAAMwT,WAAY+tB,EAAS,SAAUg+C,EAAW,WAAYsyB,EAAW,WAAY8rB,EAAQ,UAAWC,EAAO,OAAQ7zH,EAAK,uBAAwB8zH,EAAW,WAAYpxB,EAAa,aAAe1iG,EAAI+rG,EAAc,aAAe/rG,EAAK,IAAM0iG,EAAYoJ,EAAU,kBAAmB1c,EAAU,kBAAmBC,EAAQ,gBAAiBoR,EAAQ,QAASj0F,EAAQ,IAAKknH,EAAa,SAAUrgD,EAAW,mBAAoBs0B,EAAgB,mBAAoBosB,EAAgB,kBAAmBlxB,EAAgB,gBAAiBmxB,EAAiB,cAAe5vH,EAAO,KAAML,EAAQtP,EAAEsP,MAAOtF,EAAShK,EAAEgK,OAC31Bw1H,EAAiBlxH,EAAOtE,QACxBC,KAAM,SAAU5I,EAASqI,GACrB,GAAiE4R,GAAKtZ,EAAKy7D,EAAMv2D,EAAO0F,EAApFsD,EAAO5G,KAAMm2H,EAAS/1H,GAAWA,EAAQ+zD,OAASv9D,CACtDoO,GAAOf,GAAGtD,KAAKwH,KAAKvB,EAAM7O,EAASqI,GACnCA,EAAUwG,EAAKxG,QACfrI,EAAU6O,EAAK7O,QAAQ2N,GAAG,WAAazD,EAAI+D,EAAMY,EAAKwvH,UAAWxvH,IAAO1D,KAAK,OAAQ,cACrF9C,EAAQmd,YAAcnd,EAAQmd,aAAexlB,EAAQmL,KAAK,eAC1D0D,EAAK8nG,gBAAkBhuG,KAAWN,GAClC4R,EAAMpL,EAAKoL,IAAIja,EAAQmL,KAAK,QAC5BxK,EAAMkO,EAAKlO,IAAIX,EAAQmL,KAAK,QAC5BixD,EAAOvtD,EAAK8iC,OAAO3xC,EAAQmL,KAAK,SAC5B9C,EAAQ4R,MAAQ3L,GAAQ2L,IAAQ3L,IAChCjG,EAAQ4R,IAAMA,GAEd5R,EAAQ1H,MAAQ2N,GAAQ3N,IAAQ2N,IAChCjG,EAAQ1H,IAAMA,GAEby9H,GAAUhiE,IAAS9tD,IACpBjG,EAAQ+zD,KAAOA,GAEnBvtD,EAAKg+C,SACLh+C,EAAK+nG,WACL/nG,EAAKyvH,UACLzvH,EAAK0vH,cACL1vH,EAAKukG,SACAjzG,EAAMC,QAAQgf,SAGfvQ,EAAK4vF,MAAM9wF,GAAGqwH,EAAW9zH,EAAK,IAAMygG,EAAQzgG,EAAI,WACxC/J,EAAMC,QAAQoB,QAAQ2iB,KACtBtV,EAAK4vF,MAAMjvF,IAAIm7F,EAAQzgG,EAAI,WACvB2E,EAAK2vH,aAAY,GACjBx+H,EAAQw8B,WAGZ3tB,EAAK2vH,aAAY,GACjBx+H,EAAQw8B,WAVhB3tB,EAAK4vF,MAAM9wF,GAAGg9F,EAAQzgG,EAAI+D,EAAMY,EAAKs9B,OAAQt9B,IAcjD7O,EAAQmL,KAAK,gBAAiB9C,EAAQ4R,MAAQ3L,EAAOjG,EAAQ4R,IAAM5R,EAAQo2H,OAASp2H,EAAQ4R,KAAK9O,KAAK,gBAAiB9C,EAAQ1H,MAAQ2N,EAAOjG,EAAQ1H,IAAM0H,EAAQo2H,OAASp2H,EAAQ1H,KACrL0H,EAAQ2I,OAAS+5F,EAAc1iG,EAAQ2I,QACvCnL,EAAQwC,EAAQxC,MAChBgJ,EAAKhJ,MAAMA,IAAUyI,EAAOzI,EAAQ7F,EAAQ+0C,OAC5CxpC,EAAWvL,EAAQgC,GAAG,eAAiBrD,EAAEkQ,EAAK7O,SAAS4L,QAAQ,YAAY5J,GAAG,aAC1EuJ,EACAsD,EAAK6Y,QAAO,GAEZ7Y,EAAKgkD,SAAS7yD,EAAQgC,GAAG,eAE7B7B,EAAM0uB,OAAOhgB,IAEjBxG,SACI8O,KAAM,iBACNP,SAAUtI,EACVowH,kBAAkB,EAClBzkH,IAAK3L,EACL3N,IAAK2N,EACLzI,MAAOyI,EACP8tD,KAAM,EACN1kD,OAAO,EACPjE,QAAS,GACTzC,OAAQ,IACR2tH,UAAU,EACVn5G,YAAa,GACbi5G,OAAQ,EACRG,YAAa,iBACbC,cAAe,kBAEnBlvH,QACI+xB,EACAq8F,GAEJ7iC,UAAW,SAAU7yF,GACjB,GAAIwG,GAAO5G,KAAMjI,EAAU6O,EAAK7O,QAASwnB,EAAUnf,EAAQmf,QAASqrC,EAAWxqD,EAAQwqD,SAAUx1B,EAAOxuB,EAAK4vF,MAAMl1F,IAAIvJ,GAAUsB,EAAUuN,EAAK0oG,cAAc1lF,IAAIokF,EAClKpnG,GAAK2vH,aAAY,GACjB3vH,EAAKiwH,qBAAqBhvH,OAAO,SACjCjB,EAAKkwH,uBAAuBjvH,OAAO,SACnC9P,EAAQ6xB,IAAI,UAAY3nB,GAAI2nB,IAAI,WAAa3nB,GAAI2nB,IAAI,QAAU3nB,GAAI2nB,IAAI,QAAU3nB,GAC5E2oD,GAAarrC,GAedlmB,EAAQiB,SAASilB,EAAUqqF,EAAgBmE,GAASpjD,YAAYprC,EAAUwuF,EAAUnE,GACpFx0E,EAAKlyB,KAAKu0E,EAAUl4D,GAASrc,KAAK6mG,EAAUn/C,GAAU1nD,KAAK4hG,EAAevlF,KAf1ElmB,EAAQiB,SAASyzG,GAASpjD,YAAYi/C,GAAelkG,GAAGsoG,EAAapnG,EAAKoyF,cAC1E5jE,EAAKhQ,WAAWqyD,GAAUryD,WAAW2kF,GAAU7mG,KAAK4hG,GAAe,GACnEl+F,EAAKiwH,qBAAqBzvH,KAAK,QAAS,SAAUa,GAC9CA,EAAE9D,iBACFyC,EAAKmwH,MAAM,GACXnwH,EAAKowH,SAAS18H,SAASg7E,KAE3B1uE,EAAKkwH,uBAAuB1vH,KAAK,QAAS,SAAUa,GAChDA,EAAE9D,iBACFyC,EAAKmwH,UACLnwH,EAAKqwH,WAAW38H,SAASg7E,KAE7B1uE,EAAK7O,QAAQ2N,GAAG,UAAYzD,EAAI+D,EAAMY,EAAKqxE,SAAUrxE,IAAOlB,GAAG,WAAazD,EAAI+D,EAAMY,EAAK6pG,UAAW7pG,IAAOlB,GAAG,QAAUzD,EAAI+D,EAAMY,EAAKsxE,OAAQtxE,IAAOlB,GAAG,QAAUzD,EAAI+D,EAAMY,EAAKskG,OAAQtkG,MAMpMgkD,SAAU,SAAUA,GAChB5qD,KAAKizF,WACDroC,SAAUA,IAAah0D,GAAmBg0D,EAC1CrrC,SAAS,KAGjBE,OAAQ,SAAUA,GACdzf,KAAKizF,WACDroC,UAAU,EACVrrC,UAAWE,EAASA,IAAW7oB,GAAmB6oB,MAG1DqG,QAAS,WACL,GAAIlf,GAAO5G,IACX4G,GAAK7O,QAAQuJ,IAAIsF,EAAK4vF,OAAOl1F,IAAIsF,EAAKowH,UAAU11H,IAAIsF,EAAKqwH,YAAY31H,IAAIsF,EAAK0oG,eAAe1lF,IAAI3nB,GACjG2E,EAAKiwH,qBAAqB/wG,UAC1Blf,EAAKkwH,uBAAuBhxG,UACxBlf,EAAKyvF,OACLzvF,EAAKyvF,MAAMzsE,IAAI,QAAShjB,EAAK0vF,eAEjCtxF,EAAOf,GAAG6hB,QAAQ3d,KAAKvB,IAE3BoL,IAAK,SAAUpU,GACX,MAAOoC,MAAKumG,QAAQ,MAAO3oG,IAE/BlF,IAAK,SAAUkF,GACX,MAAOoC,MAAKumG,QAAQ,MAAO3oG,IAE/Bu2D,KAAM,SAAUv2D,GACZ,MAAOoC,MAAKumG,QAAQ,OAAQ3oG,IAEhCA,MAAO,SAAUA,GACb,GAAiBs5H,GAAbtwH,EAAO5G,IACX,OAAIpC,KAAUhH,EACHgQ,EAAK6vF,QAEhB74F,EAAQgJ,EAAK8iC,OAAO9rC,GACpBs5H,EAAWtwH,EAAKuwH,QAAQv5H,GACpBA,IAAUs5H,IAGdtwH,EAAKuoG,QAAQvxG,GACbgJ,EAAK+uF,KAAO/uF,EAAK6vF,QANjB74F,IAQJ22B,MAAO,WACHv0B,KAAKo3H,YAETD,QAAS,SAAUv5H,GACf,GAAIgJ,GAAO5G,KAAMI,EAAUwG,EAAKxG,QAAS4R,EAAM5R,EAAQ4R,IAAKtZ,EAAM0H,EAAQ1H,GAC1E,OAAIkF,KAAUyI,EACHzI,GAEPoU,IAAQ3L,GAAQzI,EAAQoU,EACxBpU,EAAQoU,EACDtZ,IAAQ2N,GAAQzI,EAAQlF,IAC/BkF,EAAQlF,GAELkF,IAEXy4H,QAAS,WACL,GAAiBgB,GAAbzwH,EAAO5G,KAAcqlE,EAAW,WAC5Bz6C,aAAahkB,EAAK0wH,WAClBD,EAAO1sE,YAAY2qB,IACpBl1E,EAAUwG,EAAKxG,QAASs2H,EAAWt2H,EAAQs2H,SAAU3+H,EAAU6O,EAAK7O,OAC3Es/H,GAASt/H,EAAQunF,SAAS,IAAMq2C,GAC3B0B,EAAO,KACRA,EAAS3gI,EAAEg/H,EAAW,WAAYt1H,EAAQu2H,aAAejB,EAAW,WAAYt1H,EAAQw2H,gBAAgB90D,YAAY/pE,GACpHs/H,EAAOxkF,QAAQ,6BAEd6jF,IACDW,EAAOz9H,SAASumB,OAAOu2G,GACvB9vH,EAAK0oG,cAAch1G,SAAS,qBAEhCsM,EAAKowH,SAAWK,EAAOtuG,GAAG,GAC1BniB,EAAKiwH,qBAAuB,GAAI3+H,GAAM0pC,WAAWh7B,EAAKowH,UAAYppC,QAASvoB,IAC3Ez+D,EAAKqwH,WAAaI,EAAOtuG,GAAG,GAC5BniB,EAAKkwH,uBAAyB,GAAI5+H,GAAM0pC,WAAWh7B,EAAKqwH,YAAcrpC,QAASvoB,KAEnFixD,YAAa,WAAA,GACL1vH,GAAO5G,KACPjI,EAAU6O,EAAK7O,OACnB6O,GAAK2wH,gBAAkB7gI,EAAE,gBAAmBi/H,EAAa,yBAA0B70H,OAAOghE,YAAY/pE,IAE1GigF,MAAO,WACH,GAAIpxE,GAAO5G,IACX4G,GAAK2vH,aAAY,GACjB3vH,EAAK23C,QAAQ33C,EAAK7O,QAAQ+0C,QAE9B5I,OAAQ,SAAUj8B,GACd,GAAIrB,GAAO5G,IACX4qB,cAAahkB,EAAK4wH,WAClB5wH,EAAK4wH,UAAY9tG,WAAW,WACxB,GAAqJ1qB,GAAQy4H,EAAaC,EAAtK53H,EAAQmI,EAAEmY,OAAQziB,EAAMs2B,EAAMn0B,GAAO,GAAIlC,EAAQkC,EAAMlC,MAAMrG,UAAU,EAAGoG,GAAMoL,EAASnC,EAAKqkG,QAAQrkG,EAAKxG,QAAQ2I,QAAS+kC,EAAQ/kC,EAAO,KAA0C4uH,EAAgB,CACrM7pF,KACA2pF,EAAkB17H,OAAO,KAAO+xC,EAAO,KACvC4pF,EAAoB37H,OAAO,UAAY+xC,EAAQ,SAAW/kC,EAAO0F,GAAS,cAE1EipH,IACA14H,EAAS04H,EAAcroH,KAAKzR,IAE5BoB,IACA24H,EAAgB34H,EAAO,GAAG7H,QAAQsgI,EAAa,IAAI7/H,OAC/CgG,EAAMM,QAAQ,UAAc0I,EAAK6vF,OAAS,GAC1CkhC,KAGR/wH,EAAKwwH,WACLnjG,EAAMrtB,EAAK7O,QAAQ,GAAI4/H,MAG/Bp5E,QAAS,SAAU3gD,GACf,GAAIgJ,GAAO5G,KAAMw2H,EAAS5vH,EAAKxG,QAAQo2H,MACnCA,IAAqB,IAAXA,IACV54H,EAAQuE,WAAWvE,GACL,OAAVA,IACAA,GAAgB44H,IAGxB5vH,EAAKuoG,QAAQvxG,GACbA,EAAQgJ,EAAK6vF,OACT7vF,EAAK+uF,MAAQ/3F,IACbgJ,EAAK+uF,KAAO/3F,EACPgJ,EAAK0wF,SACN1wF,EAAK7O,QAAQiQ,QAAQyxB,GAEzB7yB,EAAKoB,QAAQyxB,IAEjB7yB,EAAK0wF,SAAU,GAEnBsgC,SAAU,SAAUpsH,GAChB,MAAOA,IAAWE,EAAW1L,KAAKI,QAAQoL,UAE9C4rH,SAAU,WACN,GAAIxwH,GAAO5G,IACX4G,GAAK0oG,cAAch1G,SAAS+2F,GAC5BzqF,EAAK2vH,aAAY,GACjB3vH,EAAK7O,QAAQ,GAAGw8B,SAEpB6hG,UAAW,WACP,GAAIxvH,GAAO5G,IACX4qB,cAAahkB,EAAK4wH,WAClB5wH,EAAK0oG,cAAc3kD,YAAY0mC,GAAS1mC,YAAY2mC,GACpD1qF,EAAKoxE,QACLpxE,EAAKixH,uBAET5sB,QAAS,SAAUliG,EAAQyC,GACvB,GAAIC,GAAezL,KAAK43H,SAASpsH,GAASC,YAO1C,OANA1C,GAASA,EAAOjM,cACZiM,EAAO7K,QAAQ,QACfuN,EAAeA,EAAa6D,SACrBvG,EAAO7K,QAAQ,UACtBuN,EAAeA,EAAa8D,SAEzB9D,GAEX0/F,OAAQ,WACJ,GAAmL/1E,GAA/KxuB,EAAO5G,KAAMI,EAAUwG,EAAKxG,QAAS03H,EAAY,oBAAqB//H,EAAU6O,EAAK7O,QAAQuC,SAASu7H,GAAO77H,OAAO,GAAIu9G,EAAYx/G,EAAQw/G,UAAWl+G,EAAUuN,EAAKvN,OAC1K+7B,GAAO/7B,EAAQiuB,KAAK7Y,EAAQqpH,GACvB1iG,EAAK,KACNA,EAAO1+B,EAAE,wBAAwBw0D,aAAanzD,GAASuC,SAASw9H,GAEpE,KACI//H,EAAQ2lB,aAAa,OAAQ,QAC/B,MAAOzV,GACLlQ,EAAQmH,KAAO,OAEnB0H,EAAKmxH,cAAgBhgI,EAAQsiC,MAC7BjF,EAAK,GAAGiF,MAAQtiC,EAAQsiC,MACxBjF,EAAK,GAAGsrD,SAAW3oF,EAAQ2oF,SAC3BtrD,EAAK,GAAGt7B,MAAM6d,QAAU5f,EAAQ+B,MAAM6d,QACtCyd,EAAK2b,KAAK,cAAe3wC,EAAQmd,aAC7Bg6F,IACAniF,EAAKlyB,KAAK,YAAaq0G,GACvBx/G,EAAQw/G,UAAY,IAExB3wG,EAAK4vF,MAAQphE,EAAK96B,SAASvC,EAAQkG,WAAWiF,MAC1C6gB,KAAQ,aACRi0G,gBAAiB53H,EAAQ4R,MAAQ3L,EAAOjG,EAAQ4R,IAAM5R,EAAQo2H,OAASp2H,EAAQ4R,IAC/EimH,gBAAiB73H,EAAQ1H,MAAQ2N,EAAOjG,EAAQ1H,IAAM0H,EAAQo2H,OAASp2H,EAAQ1H,OAGvFu/E,SAAU,SAAUhwE,GAChB,GAAIrB,GAAO5G,KAAMjB,EAAMkJ,EAAEmuB,OACzBxvB,GAAKsxH,KAAOn5H,EACRA,GAAO4iB,EAAKU,KACZzb,EAAKuxH,UACEp5H,GAAO4iB,EAAKQ,GACnBvb,EAAKuxH,MAAM,GACJp5H,GAAO4iB,EAAKK,MACnBpb,EAAK23C,QAAQ33C,EAAK7O,QAAQ+0C,OAE1BlmC,EAAK0wF,SAAU,GAGvBmZ,UAAW,SAAUxoG,GAAV,GAIHrB,GACAoL,EACAja,EACA08B,EACAL,EACAC,EACA+9E,EACA3mG,EACA2sH,EACAx6H,EACAujE,CAbY,KAAZl5D,EAAE67B,OAAe77B,EAAE+tE,SAAW/tE,EAAE8tE,SAAW9tE,EAAEmuB,UAAYzU,EAAKG,WAAa7Z,EAAEmuB,UAAYzU,EAAKK,QAG9Fpb,EAAO5G,KACPgS,EAAMpL,EAAKxG,QAAQ4R,IACnBja,EAAU6O,EAAK7O,QACf08B,EAAYR,EAAMl8B,GAClBq8B,EAAiBK,EAAU,GAC3BJ,EAAeI,EAAU,GACzB29E,EAAYnoG,OAAOmrG,aAAantG,EAAE67B,OAClCr4B,EAAe7E,EAAKqkG,QAAQrkG,EAAKxG,QAAQ2I,QACzCqvH,EAAkBxxH,EAAKsxH,OAASv2G,EAAKqB,WACrCplB,EAAQ7F,EAAQ+0C,MAEhBsrF,IACAhmB,EAAY3mG,EAAagD,IAE7B7Q,EAAQA,EAAMrG,UAAU,EAAG68B,GAAkBg+E,EAAYx0G,EAAMrG,UAAU88B,GACzE8sC,EAAUv6D,EAAKyxH,cAAc5sH,GAAcvR,KAAK0D,GAC5CujE,GAAWi3D,GACXrgI,EAAQ+0C,IAAIlvC,GACZq2B,EAAMl8B,EAASq8B,EAAiBg+E,EAAUx6G,QAC1CqQ,EAAE9D,mBACa,OAAR6N,GAAgBA,GAAO,GAAyB,MAApBpU,EAAMvG,OAAO,KAAe8pE,KAC/Dv6D,EAAK0xH,mBACLrwH,EAAE9D,kBAENyC,EAAKsxH,KAAO,IAEhBhgD,OAAQ,WACJl4E,KAAK63H,uBAETS,iBAAkB,WACd,GAAI1xH,GAAO5G,IACX4G,GAAK0oG,cAAch1G,SAAS07H,GAC5BpvH,EAAK2wH,gBAAgBv9H,QAEzB69H,oBAAqB,WACjB,GAAIjxH,GAAO5G,IACX4G,GAAK0oG,cAAc3kD,YAAYqrE,GAC/BpvH,EAAK2wH,gBAAgBz2H,QAEzBu3H,cAAe,SAAU5sH,GAAV,GACP7E,GAAO5G,KACPotF,EAAY3hF,EAAagD,GACzBC,EAAY9H,EAAKxG,QAAQuO,SACzB4pH,EAAe,GAOnB,OANInrC,KAAc3+E,IACd2+E,EAAY,KAAOA,GAEnB1+E,IAAcrI,IACdqI,EAAYjD,EAAakD,UAEX,IAAdD,EACOunH,GAEPrvH,EAAKxG,QAAQq2H,mBACb8B,EAAe,MAAQ7pH,EAAY,KAEnC9H,EAAKuqG,aAAe/jB,IACpBxmF,EAAKuqG,WAAa/jB,EAClBxmF,EAAK4xH,aAAmBz8H,OAAO,gBAAkBqxF,EAAY,MAAQmrC,EAAe,QAAUnrC,EAAY,MAAQmrC,EAAe,UAE9H3xH,EAAK4xH,eAEhBttB,OAAQ,SAAUjjG,GAAV,GACArB,GAAO5G,KACPjI,EAAUkQ,EAAEmY,OACZxiB,EAAQ7F,EAAQ6F,MAChB6N,EAAe7E,EAAKqkG,QAAQrkG,EAAKxG,QAAQ2I,OAC7C2gB,YAAW,WACP,GAAI1qB,GAAS4H,EAAK8iC,OAAO3xC,EAAQ6F,MAC7BoB,KAAWqH,EACXO,EAAKuoG,QAAQvxG,IAEb7F,EAAQ6F,OAAQoB,GAAAA,GAAkB7H,QAAQsX,EAAOhD,EAAagD,IAC1D7H,EAAKuwH,QAAQn4H,KAAYA,GAAW4H,EAAKyxH,cAAc5sH,GAAcvR,KAAKnC,EAAQ6F,QAClFgJ,EAAKuoG,QAAQvxG,OAK7B2oG,QAAS,SAAUzkG,EAAQlE,GACvB,GAAIgJ,GAAO5G,KAAMjI,EAAU6O,EAAK7O,QAASqI,EAAUwG,EAAKxG;AACxD,MAAIxC,KAAUhH,EACHwJ,EAAQ0B,IAEnBlE,EAAQgJ,EAAK8iC,OAAO9rC,IACfA,GAAoB,SAAXkE,KAGd1B,EAAQ0B,GAAUlE,EAClB7F,EAAQuJ,IAAIsF,EAAK4vF,OAAOtzF,KAAK,aAAepB,EAAQlE,GACpD7F,EAAQmL,KAAKpB,EAAQlE,IANrBA,IAQJm5H,MAAO,SAAU5iE,EAAMtgC,GACnB,GAAIjtB,GAAO5G,IACX6zB,GAAUA,GAAW,IACrBjJ,aAAahkB,EAAK0wH,WAClB1wH,EAAK0wH,UAAY5tG,WAAW,WACxB9iB,EAAKmwH,MAAM5iE,EAAM,KAClBtgC,GACHjtB,EAAKuxH,MAAMhkE,IAEfgkE,MAAO,SAAUhkE,GACb,GAAIvtD,GAAO5G,KAAMjI,EAAU6O,EAAK7O,QAAS6F,EAAQgJ,EAAK8iC,OAAO3xC,EAAQ+0C,QAAU,CAC3Et6B,MAAmBza,EAAQ,IAC3B6O,EAAKwwH,WAELxwH,EAAKxG,QAAQo2H,QAAU54H,IACvBA,GAAgBgJ,EAAKxG,QAAQo2H,QAEjC54H,GAASgJ,EAAKxG,QAAQ+zD,KAAOA,EAC7BvtD,EAAKuoG,QAAQvoG,EAAKuwH,QAAQv5H,IAC1BgJ,EAAK0wF,SAAU,EACf1wF,EAAKoB,QAAQ8tH,IAEjB98B,aAAc,SAAU/wF,GACpBvR,EAAEuR,EAAE22B,eAAex9B,YAAYkwF,EAAkB,eAAXrpF,EAAE/I,OAE5Cq3H,YAAa,SAAUp2G,GACnB,GAAIvZ,GAAO5G,IACX4G,GAAK4vF,MAAMr2E,OAAOA,GAClBvZ,EAAK7O,QAAQooB,QAAQA,IAEzBupB,OAAQ,SAAU9rC,EAAO4N,GACrB,MAAOw9B,GAAMprC,EAAOoC,KAAK43H,SAASpsH,GAAUxL,KAAKI,QAAQ2I,SAE7D0J,OAAQ,SAAU7U,EAAO8Q,GACrB,GAAI+pH,GAAUz4H,KAAKI,QAAQqP,MAAQvX,EAAMua,OAASmjH,CAClD,OAAO6C,GAAQ76H,EAAO8Q,IAE1BygG,QAAS,SAAUvxG,GACf,GAAiM86H,GAA7L9xH,EAAO5G,KAAMI,EAAUwG,EAAKxG,QAASo2H,EAASp2H,EAAQo2H,OAAQztH,EAAS3I,EAAQ2I,OAAQ4F,EAAWvO,EAAQuO,SAAUnD,EAAU5E,EAAKgxH,WAAYnsH,EAAe7E,EAAKqkG,QAAQliG,EAAQyC,EACnLmD,KAAatI,IACbsI,EAAWlD,EAAakD,UAE5B/Q,EAAQgJ,EAAK8iC,OAAO9rC,EAAO4N,GAC3BktH,EAAY96H,IAAUyI,EAClBqyH,IACA96H,EAAQuE,WAAWyE,EAAK6L,OAAO7U,EAAO+Q,GAAW,KAErD/H,EAAK6vF,OAAS74F,EAAQgJ,EAAKuwH,QAAQv5H,GACnCgJ,EAAK6rE,aAAav6E,EAAMqR,SAAS3L,EAAOmL,EAAQyC,IAC5CktH,GACIlC,IACA54H,EAAQuE,WAAWyE,EAAK6L,OAAO7U,EAAQ44H,EAAQ7nH,GAAW,KAE9D/Q,EAAQA,GAAAA,EACJA,EAAMM,QAAQ,YACdN,EAAQgJ,EAAK6L,QAAQ7U,EAAO+Q,IAEhC/Q,EAAQA,EAAMzG,QAAQsX,EAAOhD,EAAagD,KAE1C7Q,EAAQ,KAEZgJ,EAAK7O,QAAQ+0C,IAAIlvC,GACjBgJ,EAAK7O,QAAQuJ,IAAIsF,EAAK4vF,OAAOtzF,KAAK,gBAAiBtF,IAEvD60E,aAAc,SAAU70E,GACpB,GAAIkC,GAAQE,KAAKw2F,KACjB12F,GAAMgtC,IAAIlvC,GACLwyG,GAAyBxyG,GAC1BkC,EAAMgtC,IAAI9sC,KAAKI,QAAQmd,aAE3Bzd,EAAMoD,KAAK,QAASlD,KAAK+3H,eAAiBj4H,EAAMgtC,QAEpD6hE,SAAU,WACN,GAAkEt1G,GAA9DuN,EAAO5G,KAAMjI,EAAU6O,EAAK7O,QAAS4gI,EAAa5gI,EAAQ,EAC9DsB,GAAUtB,EAAQ4L,QAAQ,qBACrBtK,EAAQU,GAAG,2BACZV,EAAUtB,EAAQ+I,OAAOhI,KAAK,mDAAmDc,SACjFP,EAAUA,EAAQP,KAAK,WAAWc,UAEtCP,EAAQ,GAAGS,MAAM6d,QAAUghH,EAAW7+H,MAAM6d,QAC5CghH,EAAW7+H,MAAMb,MAAQ,GACzB2N,EAAKvN,QAAUA,EAAQiB,SAAS,6BAA6BA,SAASq+H,EAAW16H,WAAWhG,IAAI,UAAW,IAC3G2O,EAAK0oG,cAAgB54G,EAAE2C,EAAQ,GAAG4wC,aAEtC2a,OAAQ,WACJ,GAAIh+C,GAAO5G,KAAMjI,EAAU6O,EAAK7O,QAASukG,EAASvkG,EAAQmL,KAAK,QAAS+yB,EAAOqmE,EAAS5lG,EAAE,IAAM4lG,GAAUvkG,EAAQkgB,QAAQ,OACtHge,GAAK,KACLrvB,EAAK0vF,cAAgB,WACjB5sE,WAAW,WACP9iB,EAAKhJ,MAAM7F,EAAQ,GAAG6F,OACtBgJ,EAAKlO,IAAIkO,EAAK8nG,gBAAgBh2G,KAC9BkO,EAAKoL,IAAIpL,EAAK8nG,gBAAgB18F,QAGtCpL,EAAKyvF,MAAQpgE,EAAKvwB,GAAG,QAASkB,EAAK0vF,kBAe/Cj1E,GAAG8G,OAAO+tG,IACZv/H,OAAOuB,MAAM2sB,QACRluB,OAAOuB,OACE,kBAAVzB,SAAwBA,OAAOgiC,IAAMhiC,OAAS,SAAUiiC,EAAIC,EAAIC,IACrEA,GAAMD,OAEV,SAAUniC,EAAGC,QACVA,OAAO,kBACH,mBACA,uBACA,kBACA,gBACDD,IACL,WAuOE,MA1NC,UAAUE,EAAGE,GASV,QAASgiI,GAAU76G,GAEf,MADAA,GAAiB,MAATA,EAAgBA,EAAQ,GACzBA,EAAM7e,MAAQxI,EAAEwI,KAAK6e,IAAU,SAE1C,QAAS86G,GAAsBlxG,GAC3BA,EAAUL,KAAK,wBAA0BpvB,EAAMgL,KAAK,QAAU,cAAgBhL,EAAMgL,KAAK,QAAU,2BAA2BxF,KAAK,WAC/H,GAAIo7H,GAAW5gI,EAAMgL,KAAK,QAASslD,EAAUxoD,KAAKgC,aAAa82H,IAAa,GAAIpyE,EAA4B,aAAd1mD,KAAKd,MAAqC,UAAdc,KAAKd,KAAmB,WAAa,SAAU4rC,EAAY9qC,KAAKkP,IACtLs5C,GAAQtqD,QAAQwoD,SAAuB5b,IACvC0d,IAAYA,EAAQ5wD,OAAS,IAAM,IAAM8uD,EAAc5b,EACvDp0C,EAAEsJ,MAAMkD,KAAK41H,EAAUtwE,MAInC,QAASuwE,GAAiB34H,GACtB,GAAyI44H,GAAuE5sG,EAA5MrO,GAAS3d,EAAQ2oC,MAAMM,QAAUjpC,EAAQ2oC,OAAO3oC,EAAQ2d,OAAQ7e,EAAO05H,EAAU76G,GAAQk7G,EAAal7G,EAAQA,EAAMk7G,cAA2BC,EAAWhhI,EAAMgL,KAAK,QAASi2H,EAAUjhI,EAAMgL,KAAK,QAAeA,GAC9MgM,KAAM9O,EAAQ2d,MACdsc,MAAOj6B,EAAQi6B,MAEvB,KAAK2+F,IAAYC,GACb7sG,EAAO6sG,EAAWD,GACd/1H,EAAQ+1H,EAAUI,IAAiB,EACnCl2H,EAAKg2H,GAAYF,EACT98H,EAAWkwB,KACnBlpB,EAAK81H,GAAYrwF,EAAcvc,GAAQA,EAAKxuB,OAASo7H,EAAW5sG,GAEpElpB,EAAKhL,EAAMgL,KAAK81H,EAAW,SAAW5sG,EAAK5H,OAM/C,OAJIvhB,GAAQ/D,EAAMk6H,IAAiB,IAC/Bl2H,EAAKg2H,GAAYh6H,GAErBgE,EAAKi2H,IAAqB,YAATj6H,EAAqB,WAAa,UAAYkB,EAAQ2d,MAChE7a,EAEX,QAASm2H,GAAa7yG,GAClB,GAAI7oB,GAAK/F,EAAQ20C,EAAM3uC,EAAOw3B,EAAMp2B,CACpC,IAAIwnB,GAASA,EAAM5uB,OAEf,IADAoH,KACKrB,EAAM,EAAG/F,EAAS4uB,EAAM5uB,OAAQ+F,EAAM/F,EAAQ+F,IAC/C4uC,EAAO/lB,EAAM7oB,GACby3B,EAAOmX,EAAKnX,MAAQmX,EAAK3uC,OAAS2uC,EAClC3uC,EAAsB,MAAd2uC,EAAK3uC,MAAgB2uC,EAAKnX,MAAQmX,EAAOA,EAAK3uC,MACtDoB,EAAOrB,IACHy3B,KAAMA,EACNx3B,MAAOA,EAInB,OAAOoB,GAgCX,QAASs6H,GAAmBC,EAAY1sG,GACpC,GAAgET,GAAM6e,EAAlEguF,EAAaM,EAAaA,EAAWN,iBACzC,KAAK7sG,IAAQ6sG,GACThuF,EAAaguF,EAAW7sG,GACpBuc,EAAcsC,IAAeA,EAAWrtC,QACxCqtC,EAAaA,EAAWrtC,OAExB1B,EAAW+uC,KACXpe,EAAMT,GAAQ6e,GAhG7B,GACO/yC,GAAQvB,OAAOuB,MAAOmpB,EAAKnpB,EAAMmpB,GAAIrc,EAASqc,EAAGrc,OAAQtE,EAAShK,EAAEgK,OAAQ84H,EAAQthI,EAAMC,QAAQoB,QAAQgB,MAAQrC,EAAMC,QAAQoB,QAAQkB,QAAU,EAAGyB,EAAahE,EAAMgE,WAAYysC,EAAgBjyC,EAAEiyC,cAAe1lC,EAAUvM,EAAEuM,QAASw2H,EAAwB,uFAAwFC,EAAgB,+KAAqLjgG,EAAS,SACxiB2/F,GACA,MACA,QACA,SACA,OACA,WAmDAO,GACAliI,OAAU,SAAUkwB,EAAWvnB,GAC3B,GAAI8C,GAAO61H,EAAiB34H,EAC5B1J,GAAE,wBAAwBwM,KAAKA,GAAM4zB,SAASnP,GAAWiyG,qBAAsB7wH,OAAQ3I,EAAQ2I,SAC/FrS,EAAE,SAAWwB,EAAMgL,KAAK,OAAS,KAAO9C,EAAQ2d,MAAQ,6BAA6Bjd,OAAOg2B,SAASnP,IAEzG9b,KAAQ,SAAU8b,EAAWvnB,GACzB,GAAI8C,GAAO61H,EAAiB34H,GAAU2I,EAAS3I,EAAQ2I,MACnDA,KACAA,EAAS7Q,EAAMoa,eAAevJ,IAElC7F,EAAKhL,EAAMgL,KAAK,WAAa6F,EAC7BrS,EAAE,wBAAwBwM,KAAKA,GAAM4zB,SAASnP,GAAWkyG,iBAAkB9wH,OAAQ3I,EAAQ2I,SAC3FrS,EAAE,SAAWwB,EAAMgL,KAAK,OAAS,KAAO9C,EAAQ2d,MAAQ,6BAA6Bjd,OAAOg2B,SAASnP,IAEzG1e,OAAU,SAAU0e,EAAWvnB,GAC3B,GAAI8C,GAAO61H,EAAiB34H,EAC5B1J,GAAE,kDAAkDwM,KAAKA,GAAM4zB,SAASnP,IAE5EosB,UAAW,SAAUpsB,EAAWvnB,GAC5B,GAAI8C,GAAO61H,EAAiB34H,EAC5B1J,GAAE,6BAA6BwM,KAAKA,GAAM4zB,SAASnP,IAEvDzV,OAAU,SAAUyV,EAAWvnB,GAArB,GACF8C,GAAO61H,EAAiB34H,GACxBomB,EAAQtuB,EAAMiT,UAAUkuH,EAAaj5H,EAAQ8R,QACjDxb,GAAE,WAAawB,EAAMgL,KAAK,cAAgB,UAAYhL,EAAMgL,KAAK,eAAiB,WAAahL,EAAMgL,KAAK,UAAY,MAASsjB,EAAQA,EAAMrvB,QAAQ,MAAO,UAAYqvB,GAAS,IAAOtuB,EAAMgL,KAAK,QAAU,qBAAqBA,KAAKA,GAAM4zB,SAASnP,GACtPjxB,EAAE,SAAWwB,EAAMgL,KAAK,OAAS,KAAO9C,EAAQ2d,MAAQ,6BAA6Bjd,OAAOg2B,SAASnP,KAezGmyG,EAAW90H,EAAOtE,QAClBC,KAAM,SAAU5I,EAASqI,GACrB,GAAIwG,GAAO5G,IACPI,GAAQggB,SACRhgB,EAAQuzF,SAAWvzF,EAAQggB,OAAOhgB,QAAQuzF,UAE9C3uF,EAAOf,GAAGtD,KAAKwH,KAAKvB,EAAM7O,EAASqI,GACnCwG,EAAKmzH,eAAiBrjI,EAAEsP,MAAMY,EAAKozH,UAAWpzH,GAC9CA,EAAK4Q,WAET9P,QAAS+xB,GACTr5B,SACI8O,KAAM,WACNyqH,QAASA,EACTM,gBAAgB,EAChBh6D,cAAey5D,GAEnBQ,OAAQ,SAAUn8G,EAAOw7G,GACrB,GAAI3yH,GAAO5G,KAAM25H,EAAU/yH,EAAKxG,QAAQu5H,QAASQ,EAAWxxF,EAAc5qB,GAAQ+sB,EAAYqvF,EAAWp8G,EAAMA,MAAQA,EAAOgrB,EAAQniC,EAAKxG,QAAQ2oC,UAAaqxF,EAAiBD,GAAYp8G,EAAM7L,OAAQhT,EAAOk7H,EAAiB,SAAWxB,EAAUW,GAAac,EAAiBF,GAAYp8G,EAAMm8G,OAAQA,EAASG,EAAiBt8G,EAAMm8G,OAASP,EAAQz6H,GAAOyoB,EAAY/gB,EAAK7O,QAAQuvB,KAAK,IAAMpvB,EAAMgL,KAAK,iBAAmB,IAAM4nC,EAAU3zC,QAAQsiI,EAAuB,QAAU,IACneS,GAASA,EAASA,EAASP,EAAQ1wH,OAC/BoxH,GAA0C,gBAAjBt8G,GAAMm8G,SAC/BA,EAAS,SAAUvyG,GACfA,EAAUm8B,OAAO/lC,EAAMm8G,UAG/BvyG,EAAYA,EAAU/vB,OAAS+vB,EAAY/gB,EAAK7O,QAChDmiI,EAAOvyG,EAAWjnB,GAAO,KAAUy5H,EAAWp8G,GAAUA,MAAO+sB,IAAe/B,MAAOA,MAEzFixF,UAAW,SAAU/xH,GACjB,GAAiBnI,GAAb8G,EAAO5G,KAAapC,EAAQqK,EAAErK,MAAO08H,EAAuB1zH,EAAK2zH,2BAA4BroH,KAAasoH,EAAgBtiI,EAAMgL,KAAK,QAAS4nC,EAAY7iC,EAAE8V,MAAM5mB,QAAQsiI,EAAuB,QAASgB,EAAmB1+H,OAAO,2BAA6B+uC,EAAY,YACjR54B,GAAOjK,EAAE8V,OAAS9V,EAAErK,MACpBkC,EAAQpJ,EAAE,UAAY8jI,EAAgB,MAAQ1vF,EAAY,KAAMlkC,EAAK7O,SAAS8L,OAAO,IAAM3L,EAAMgL,KAAK,YAAc,cAAgBW,OAAO,WACvI,MAAO42H,GAAavgI,KAAKxD,EAAEsJ,MAAMkD,KAAKs3H,MAEtC16H,EAAMlI,OAAS,IACfkI,EAAQA,EAAM+D,OAAO,WACjB,GAAI9L,GAAUrB,EAAEsJ,KAChB,QAAQjI,EAAQgC,GAAG,WAAahC,EAAQ+0C,OAASlvC,IAGzD,KACIgJ,EAAK2zH,4BAA6B,IAC7B3zH,EAAK8zH,YAAY15D,cAAclhE,KAAWw6H,GAAwB1zH,EAAKoB,QAAQyxB,GAAUvnB,OAAQA,MAClGjK,EAAE9D,iBAER,QACEyC,EAAK2zH,4BAA6B,IAG1C5iI,IAAK,WACD,MAAOqI,MAAK06H,YAAY75D,YAE5B/6C,QAAS,WACL,GAAIlf,GAAO5G,IACX4G,GAAKke,QAAQ,UAAW,WACpB,OAASyB,SAAU3f,EAAK7O,WAE5BiN,EAAOf,GAAG6hB,QAAQ3d,KAAKvB,GACvBA,EAAKxG,QAAQ2oC,MAAMlhC,OAAO,MAAOjB,EAAKmzH,gBACtC7hI,EAAM2P,OAAOjB,EAAK7O,SACd6O,EAAK8zH,aACL9zH,EAAK8zH,YAAY50G,UAErB5tB,EAAM4tB,QAAQlf,EAAK7O,SACnB6O,EAAK7O,QAAQguB,WAAW,kBACpBnf,EAAK7O,QAAQgC,GAAG,IAAM7B,EAAMgL,KAAK,QAAU,eAC3C0D,EAAK7O,QAAQqtB,WAAWltB,EAAMgL,KAAK,UAG3CsU,QAAS,WAAA,GACY7Z,GAAK/F,EAAyKmmB,EAAOo8G,EAAUrvF,EAAWyuF,EAAYoB,EAwCnOx3H,EAxCAyD,EAAO5G,KAAmBqpC,EAASziC,EAAKxG,QAAQipC,WAAc1hB,EAAY/gB,EAAKxG,QAAQ65H,eAAiBrzH,EAAK7O,QAAQ+3C,QAAUlpC,EAAK7O,QAASgxC,EAAQniC,EAAKxG,QAAQ2oC,UAAalc,IAInL,KAHKn2B,EAAEqP,QAAQsjC,KACXA,GAAUA,IAET1rC,EAAM,EAAG/F,EAASyxC,EAAOzxC,OAAQ+F,EAAM/F,EAAQ+F,IAChDogB,EAAQsrB,EAAO1rC,GACfw8H,EAAWxxF,EAAc5qB,GACzB+sB,EAAYqvF,EAAWp8G,EAAMA,MAAQA,EACrCw7G,GAAcxwF,EAAMM,QAAUN,GAAO+B,GACrCwuF,EAAmBC,EAAY1sG,GAC/BjmB,EAAKszH,OAAOn8G,EAAOw7G,EAYvB,IAVI3yH,EAAKxG,QAAQggB,QACbxZ,EAAKke,QAAQ,UAAW,WACpB,OACIyB,SAAUoB,EACVnsB,KAAMmsB,EAAU3U,IAAI,WAChB,OAASyT,SAAUsiB,SAK9BnxC,EAAQ,CACT+iI,EAAc5xF,EAAMM,QAAUN,CAC9B,KAAK+B,IAAa6vF,GACdrB,EAAmBqB,EAAY7vF,GAAYje,GAGnDgsG,EAAsBlxG,GAClB/gB,EAAK8zH,aACL9zH,EAAK8zH,YAAY50G,UAErB5tB,EAAMkP,KAAKugB,EAAW/gB,EAAKxG,QAAQ2oC,OACnCniC,EAAKxG,QAAQ2oC,MAAMlhC,OAAO,MAAOjB,EAAKmzH,gBACtCnzH,EAAKxG,QAAQ2oC,MAAM3hC,KAAK,MAAOR,EAAKmzH,gBACpCnzH,EAAK8zH,YAAc,GAAIxiI,GAAMmpB,GAAGu9C,UAAUj3C,GACtCi5C,gBAAgB,EAChBX,cAAer5D,EAAKxG,QAAQ6/D,eAAiBrpE,EAC7Ci2B,MAAOA,IAEP1pB,EAAYwkB,EAAUL,KAAK,mBAAmByB,GAAG,GAAGwL,QACpDilG,GACAr2H,EAAUoxB,UAItBlT,GAAG8G,OAAO2xG,IACZnjI,OAAOuB,MAAM2sB,QACRluB,OAAOuB,OACE,kBAAVzB,SAAwBA,OAAOgiC,IAAMhiC,OAAS,SAAUiiC,EAAIC,EAAIC,IACrEA,GAAMD,OAEV,SAAUniC,EAAGC,QACVA,OAAO,kBACH,aACA,iBACA,oBACDD,IACL,WA6fE,MAveC,UAAUE,EAAGE,GAAb,GACOsB,GAAQvB,OAAOuB,MAAOuhC,EAAS,SAAUmG,EAAS,SAAUg7F,EAAY,YAAaC,EAAc,cAAe71H,EAAS9M,EAAMmpB,GAAGrc,OAAQ2c,EAAOzpB,EAAMypB,KAAMm5G,EAAgB,0BAA2BtoF,EAAW,WAAYF,EAAQ,QAAS++C,EAAU,kBAAmB/b,EAAW,mBAAoBylD,EAAY,cAAeC,EAAO,OAAQC,EAAS,SAAUC,EAAO,OAAQ7jD,EAAQ,QAASxY,EAAK,iBAAkB74D,EAAQtP,EAAEsP,MAAOwM,EAAgBta,EAAMqa,eAAgBmV,EAAWxvB,EAAMmpB,GAAGqG,SAAUhsB,EAAaxD,EAAMsD,KAAKE,WAC/gBy/H,EAAWjjI,EAAMmpB,GAAGpc,gBAAgBvE,QACpCC,KAAM,SAAU5I,EAASqI,GACrB,GAAIwG,GAAO5G,IACXI,GAAU1J,EAAEqP,QAAQ3F,IAAawkB,WAAYxkB,GAAYA,EACzD4E,EAAOf,GAAGtD,KAAKwH,KAAKvB,EAAM7O,EAASqI,GACnCA,EAAUwG,EAAKxG,QACfwG,EAAKvN,QAAUtB,EAAU6O,EAAK7O,QAC1BA,EAAQ,GAAG8rB,KACXjd,EAAKw0H,QAAUrjI,EAAQ,GAAG8rB,GAAK,cAEnCjd,EAAK4yD,WACL5yD,EAAK49C,cACL59C,EAAK82F,aACL92F,EAAKgmF,eACLhmF,EAAKy0H,cACLz0H,EAAK00H,YACL10H,EAAK20H,gBACD30H,EAAKxG,QAAQ4oD,UACbpiD,EAAKge,WAAWs8B,QAEpBhpD,EAAM0uB,OAAOhgB,IAEjBc,QACI+xB,EACAmG,EACAi7F,EACAD,EACAI,EACAC,EACAC,GAEJ96H,SACI8O,KAAM,WACN85C,UAAU,EACVmuB,YAAY,EACZqkD,aAAa,EACb/4H,SAAU,GACVg5H,YAAa,GACbC,aAAc,IAElBr2G,WAAY,SAAUjlB,GAClB4E,EAAOf,GAAGohB,WAAWld,KAAKnI,KAAMI,GAChCJ,KAAK09F,aACD19F,KAAKm3E,aACLn3E,KAAKm3E,WAAWrxD,UAChB9lB,KAAKm3E,WAAa,MAEtBn3E,KAAKq7H,eAET39B,WAAY,WACR,GAAIt9F,GAAUJ,KAAKI,OACnBJ,MAAKyC,SAAWvK,EAAMuK,SAASrC,EAAQqC,UAAY,IACnDzC,KAAKy7H,YAAcvjI,EAAMuK,SAASrC,EAAQq7H,aAAer7H,EAAQqC,UACjEzC,KAAK07H,aAAexjI,EAAMuK,SAASrC,EAAQs7H,cAAgB,KAE/DC,MAAO,SAAUhlG,GACb,MAAO32B,MAAKjI,QAAQ4C,WAAWg8B,MAEnCnQ,MAAO,WACH,MAAOxmB,MAAKjI,QAAQ4C,YAExB8rB,SAAU,SAAU1uB,GAAV,GACFmL,GAAOhL,EAAMgL,KAAK,OAClB0rC,EAAMl4C,EAAEqB,GAASkgB,QAAQ,IAAM/U,EAAO,KAAKA,KAAKA,EACpD,OAAOlD,MAAK4kB,WAAW83B,SAAS9N,IAEpC2rC,cAAe,SAAU31D,GACrB5kB,KAAKI,QAAQwkB,WAAaA,EAC1B5kB,KAAKwkD,cACDxkD,KAAKI,QAAQ4oD,UACbpkC,EAAWs8B,SAGnBk1C,kBAAmB,WACf,GAAIxvF,GAAO5G,IACX4G,GAAKge,WAAW/c,OAAO4xB,EAAQ7yB,EAAK+yE,iBAAiB9xE,OAAO2qC,EAAU5rC,EAAKsqG,kBAAkBrpG,OAAOyqC,EAAO1rC,EAAKizF,gBAEpHr1C,YAAa,WACT,GAAI59C,GAAO5G,IACP4G,GAAKge,YAAche,EAAK+yE,gBACxB/yE,EAAKwvF,qBAELxvF,EAAK+yE,gBAAkB3zE,EAAMY,EAAK4Q,QAAS5Q,GAC3CA,EAAKsqG,iBAAmBlrG,EAAMY,EAAKg1H,UAAWh1H,GAC9CA,EAAKizF,cAAgB7zF,EAAMY,EAAKi1H,OAAQj1H,IAE5CA,EAAKge,WAAalpB,EAAW2sC,OAAOzhC,EAAKxG,QAAQwkB,YAAYxd,KAAKqyB,EAAQ7yB,EAAK+yE,iBAAiBvyE,KAAKorC,EAAU5rC,EAAKsqG,kBAAkB9pG,KAAKkrC,EAAO1rC,EAAKizF,gBAE3J+hC,UAAW,WACPl0G,EAAS1nB,KAAKjI,SAAS,IAE3B8jI,OAAQ,WACJn0G,EAAS1nB,KAAKjI,SAAS,IAE3ByhE,SAAU,WACNx5D,KAAKjI,QAAQuC,SAAS,uBAAuB4I,KAAK,OAAQ,YAE9DsU,QAAS,SAAUvP,GACf,GAAgDzM,GAAMgrB,EAAO+lB,EAAiB5uC,EAAK/F,EAA/EgP,EAAO5G,KAAM2oB,EAAO/hB,EAAKge,WAAW+D,OAA2BjmB,EAAO,GAAiBD,EAAWmE,EAAKnE,SAAUg5H,EAAc70H,EAAK60H,YAAar0B,EAAS50F,GAE9J,IADAvK,EAAIA,MACa,eAAbA,EAAE0uB,OAwBF,MAvBK/vB,GAAKme,qBAAwBne,EAAKutC,WACnC34C,EAAOyM,EAAEue,MAAM,GACf+lB,EAAO3lC,EAAK4f,QAAQ3iB,OAAO,IAAM3L,EAAMgL,KAAK,OAAS,IAAM1H,EAAKozC,IAAM,KAClErC,EAAK30C,OAAS,IACd+F,EAAM4uC,EAAKp6B,QACXvL,EAAKke,QAAQ,UAAW,WACpB,OAASyB,UAAWgmB,MAExBA,EAAKwwB,YAAYt6D,EAASjH,IAC1B+wC,EAAO3lC,EAAK4f,QAAQuC,GAAGprB,GACvB4uC,EAAKrpC,KAAKhL,EAAMgL,KAAK,OAAQ1H,EAAKozC,KAClChoC,EAAKke,QAAQ,UAAW,WACpB,OACIyB,UAAWgmB,GACX/wC,OAASirB,SAAUjrB,OAG3BoL,EAAKoB,QAAQ,cACTukC,KAAMA,EACN/wC,KAAMA,MAIlB,CAEJ,KAAIoL,EAAKoB,QAAQ6yH,GACTlkG,OAAQ1uB,EAAE0uB,QAAU,SACpBnQ,MAAOve,EAAEue,MACTrU,MAAOlK,EAAEkK,QAHjB,CASA,IAFAvL,EAAKyf,cAAc,WACnBzf,EAAKk1H,mBACAn+H,EAAM,EAAG/F,EAAS+wB,EAAK/wB,OAAQ+F,EAAM/F,EAAQ+F,IAE1C+E,GADA/E,EAAM,EACE89H,EAAY9yG,EAAKhrB,IAEjB8E,EAASkmB,EAAKhrB,GAK9B,KAFAiJ,EAAK7O,QAAQ2K,KAAKA,GAClB8jB,EAAQ5f,EAAK4f,QACR7oB,EAAM,EAAG/F,EAAS+wB,EAAK/wB,OAAQ+F,EAAM/F,EAAQ+F,IAC9C6oB,EAAMuC,GAAGprB,GAAKuF,KAAKhL,EAAMgL,KAAK,OAAQylB,EAAKhrB,GAAKixC,KAAK1rC,KAAK,OAAQ,UAAUA,KAAK,gBAAiB,QAElG0D,GAAK7O,QAAQ,KAAOqvG,GAAUxgG,EAAKxG,QAAQo7H,aAC3C50H,EAAK+E,QAAQ6a,EAAMuC,GAAG,IAE1BniB,EAAKyf,cAAc,WACnBzf,EAAKoB,QAAQ4yH,GACTjkG,OAAQ1uB,EAAE0uB,QAAU,SACpBnQ,MAAOve,EAAEue,MACTrU,MAAOlK,EAAEkK,UAGjBmpH,UAAW,WACP,GAAmD5yH,GAAUqzH,EAAzDn1H,EAAO5G,KAAMg8H,EAAWp1H,EAAKxG,QAAQ47H,QACrCtlI,GAAEiyC,cAAcqzF,KAChBD,EAAUC,EAASD,QACnBrzH,EAAWhS,EAAEgK,UAAWs7H,GACpBp3G,WAAYhe,EAAKge,WACjBm3G,QAAS,OAEbn1H,EAAKq1H,MAAQ,GAAI/jI,GAAMmpB,GAAGg4D,MAAM3iF,EAAE,IAAMqlI,GAAUrzH,KAG1D2yH,YAAa,WACT,GAAiBa,GAAOvwH,EAApB/E,EAAO5G,KAAsBm3E,EAAavwE,EAAKxG,QAAQ+2E,WAAYqkD,EAAc50H,EAAKxG,QAAQo7H,WAC9FrkD,KACA+kD,EAAQhkI,EAAMmpB,GAAG+zD,WAAW7yE,aAAa40E,GAAYhhB,SACrDvvD,EAAKuwE,WAAa,GAAIj/E,GAAMmpB,GAAG+zD,WAAWxuE,EAAK7O,SAC3C89E,MAAM,EACN1f,SAAU+lE,EACVr4H,OAAQi3H,EACRrgG,OAAQ,WACJ7zB,EAAKoB,QAAQyxB,MAGjB+hG,GACA50H,EAAK7O,QAAQ2N,GAAG,UAAYm5D,EAAI,SAAU52D,GACtC,GAAIA,EAAEmuB,UAAYzU,EAAKa,SAAU,CAK7B,GAJA7W,EAAU/E,EAAK+E,UACX1D,EAAEmY,QAAUnY,EAAE22B,eACd32B,EAAE9D,iBAEF+3H,EACA,GAAKj0H,EAAE8tE,SAGH,GAAIpqE,GAAWA,EAAQ9R,SAASy7E,GAE5B,MADA3pE,GAAQg/C,YAAY2qB,GACpB,MAJJ1uE,GAAKuwE,WAAWh+B,YAQpBvyC,GAAKuwE,WAAWh+B,OAEpBvyC,GAAKuwE,WAAWv5E,MAAM+N,QAM1CA,QAAS,SAAU87E,GACf,GAAI7gF,GAAO5G,KAAMjI,EAAU6O,EAAK7O,QAAS4T,EAAU/E,EAAK63F,SAAU56E,EAAKjd,EAAKw0H,OAC5E,OAAI3zC,KAAc7wF,EACP+U,GAEPA,GAAWA,EAAQ,KACfA,EAAQ,GAAGkY,KAAOA,GAClBlY,EAAQyZ,WAAW,MAEvBzZ,EAAQg/C,YAAY0mC,GACpBt5F,EAAQqtB,WAAW,0BAEnBqiE,GAAaA,EAAU,KACvB5jE,EAAK4jE,EAAU,GAAG5jE,IAAMA,EACxBjd,EAAKu1H,UAAU10C,EAAU,IACzB1vF,EAAQmL,KAAK,wBAAyB2gB,GACtC4jE,EAAUntF,SAAS+2F,GAASnuF,KAAK,KAAM2gB,IAE3Cjd,EAAK63F,SAAWhX,EAbhB,IAeJ00C,UAAW,SAAUpkI,GAAV,GACU4vB,GAOby0G,EAPAx1H,EAAO5G,KAAiBq8H,GAAkB,EAAOzwD,EAAS,QAC1B,SAAhChlE,EAAKvN,QAAQpB,IAAI,aAAyB2O,EAAKvN,QAAQpB,IAAI,aAAe2zE,EAC1EjkD,EAAY/gB,EAAKvN,QAAQ,IAEzBsuB,EAAYhxB,OACZ0lI,GAAkB,GAElBD,EAAsB,SAAUx2F,EAAWmhC,GAC3C,GAAI+f,GAAgBu1C,EAAkB3lI,EAAEqB,GAASqH,SAASwmC,EAAU9oC,eAAiB/E,EAAQ,SAAW6tC,GAAY02F,EAAmBvkI,EAAQ,SAAWgvE,GAAYw1D,EAAwB7lI,EAAEixB,GAAWikD,EAAShmC,KAAc42F,EAAqB9lI,EAAEixB,GAAWo/C,EAAUjqE,gBAC1QgqF,GAAgBw1C,EAAmBC,EAAwBC,EAC3D9lI,EAAEixB,GAAWikD,EAAShmC,GAAWkhD,EAAgBw1C,EAAmBE,GAC7D11C,EAAgBy1C,GACvB7lI,EAAEixB,GAAWikD,EAAShmC,GAAWkhD,IAGzCs1C,EAAoB,MAAO,UAC3BA,EAAoB,OAAQ,UAEhCxvC,aAAc,WACV,GAAIhmF,GAAO5G,KAAMw7H,EAAc50H,EAAKxG,QAAQo7H,YAAazjI,EAAU6O,EAAK7O,QAAS0kI,EAAgB,SAAUx0H,GACnGrB,EAAK+E,QAAQjV,EAAEuR,EAAE22B,gBACZloC,EAAEuR,EAAEmY,QAAQrmB,GAAG,wCAChBhC,EAAQw8B,QAGhBinG,KACA50H,EAAKqe,YACLltB,EAAQ2N,GAAG,QAAUm5D,EAAI,WACrB,GAAIlzD,GAAU/E,EAAK63F,QACd9yF,IAAYA,EAAQ5R,GAAG,cACxB4R,EAAU/E,EAAK+0H,MAAM,UAEzB/0H,EAAK+E,QAAQA,KACdjG,GAAG,WAAam5D,EAAI,WACfj4D,EAAK63F,UACL73F,EAAK63F,SAAS9zC,YAAY0mC,KAE/B3rF,GAAG,UAAYm5D,EAAI,SAAU52D,GAAV,GACsQtK,GAqC5Q++H,EArCR39H,EAAMkJ,EAAEmuB,QAASzqB,EAAU/E,EAAK+E,UAAWyU,EAAS1pB,EAAEuR,EAAEmY,QAASu8G,GAAav8G,EAAOrmB,GAAG,sCAAuC6iI,EAAYx8G,EAAOrmB,GAAG,mBAAoBoK,EAAiBjM,EAAMiM,eAAgB04H,EAAW9kI,EAAQuvB,KAAK,IAAMyzG,GAAY3zB,EAAS50F,GACvQ,OAAKmqH,IAAcC,GAAaj7G,EAAKM,KAAOljB,GAAO69H,GAAaj7G,EAAKM,KAAOljB,GAAO4iB,EAAKK,OAASjjB,GAGjG,GAAI4iB,EAAKQ,KAAOpjB,GAAO4iB,EAAKO,OAASnjB,EAC7B4M,IACAA,EAAUA,EAAQqwB,QAEtBp1B,EAAK+E,QAASA,GAAYA,EAAQ,GAA0BA,EAArB/E,EAAK+0H,MAAM,SAClDx3H,EAAe8D,OACZ,IAAI0Z,EAAKU,OAAStjB,GAAO4iB,EAAKS,QAAUrjB,EACvC4M,IACAA,EAAUA,EAAQy1C,QAEtBx6C,EAAK+E,QAASA,GAAYA,EAAQ,GAA2BA,EAAtB/E,EAAK+0H,MAAM,UAClDx3H,EAAe8D,OACZ,IAAI0Z,EAAKc,SAAW1jB,EACvB6H,EAAK+E,QAAQ,MACb/E,EAAKge,WAAWsiB,KAAKtgC,EAAKge,WAAWsiB,OAAS,GAC9C/iC,EAAe8D,OACZ,IAAI0Z,EAAKe,WAAa3jB,EACzB6H,EAAK+E,QAAQ,MACb/E,EAAKge,WAAWsiB,KAAKtgC,EAAKge,WAAWsiB,OAAS,GAC9C/iC,EAAe8D,OACZ,IAAI0Z,EAAKY,OAASxjB,EACrB6H,EAAK+E,QAAQ/E,EAAK+0H,MAAM,UACxBx3H,EAAe8D,OACZ,IAAI0Z,EAAKW,MAAQvjB,EACpB6H,EAAK+E,QAAQ/E,EAAK+0H,MAAM,SACxBx3H,EAAe8D,OACZ,IAAI0Z,EAAKK,QAAUjjB,EACE,IAApB89H,EAASjlI,SAAiB+kI,GAAaC,IACvCj/H,EAAMiJ,EAAK4f,QAAQrU,MAAM0qH,GACrBz1B,GACAA,EAAO5uG,OAEXoO,EAAKsxB,OACDwkG,EAAa,WACb91H,EAAK7O,QAAQiQ,QAAQ,SACrBpB,EAAK+E,QAAQ/E,EAAK4f,QAAQuC,GAAGprB,KAEjCiJ,EAAKW,IAAI,YAAam1H,IACe,KAA9B91H,EAAKxG,QAAQs7H,cACpB90H,EAAKk2H,KAAKnxH,OAEX,IAAIgW,EAAKM,MAAQljB,EAAK,CAEzB,GADA89H,EAAW9kI,EAAQuvB,KAAK,IAAMyzG,GACN,IAApB8B,EAASjlI,OACT,MAEJ+F,GAAMiJ,EAAK4f,QAAQrU,MAAM0qH,GACzBj2H,EAAKokB,SACLpkB,EAAK7O,QAAQiQ,QAAQ,SACrBpB,EAAK+E,QAAQ/E,EAAK4f,QAAQuC,GAAGprB,OAGrC5F,EAAQ2N,GAAG,YAAcm5D,EAAK,cAAgBA,EAAIi8D,EAAe90H,EAAMy2H,EAAe71H,MAG9Fm2H,eAAgB,WACZ,GAAIn2H,GAAO5G,IACX4G,GAAKuwE,WAAWh+B,QAChBvyC,EAAKoB,QAAQyxB,IAEjB3E,OAAQ,SAAUtO,GACd,GAAI5f,GAAO5G,KAAMm3E,EAAavwE,EAAKuwE,UAEnC,OADA3wD,GAAQ9vB,EAAE8vB,GACNA,EAAM5uB,QACDu/E,EAAW/2E,QAAQ+1D,WACpBghB,EAAWh+B,QACX3yB,EAAQA,EAAMpvB,SAElB+/E,EAAWv5E,MAAM4oB,GACjB,GAEG2wD,EAAWv5E,SAEtBk+H,iBAAkB,WACd,GAAIl1H,GAAO5G,IACP4G,GAAKutC,WACLvtC,EAAKutC,SAASruB,gBACPlf,GAAKutC,WAGpB6oF,kBAAmB,SAAUjlI,GACzB,GAAI62C,GAAM72C,EAAQmL,KAAKhL,EAAMgL,KAAK,OAClC,OAAOlD,MAAK4kB,WAAW83B,SAAS9N,IAEpCquF,eAAgB,WACZ,GAA2CzhI,GAAM+wC,EAAMp6B,EAAnDvL,EAAO5G,KAAMm0C,EAAWvtC,EAAKutC,SAA6B1xC,EAAWmE,EAAKnE,QAwB9E,OAvBI0xC,KACIA,EAASp8C,QAAQoa,QAAU,IAC3B1P,EAAWmE,EAAK60H,aAEpB70H,EAAKke,QAAQ,UAAW,WACpB,OAASyB,UAAW4tB,EAASp8C,YAEjCyD,EAAOoL,EAAKo2H,kBAAkB7oF,EAASp8C,SACvC6O,EAAKk1H,mBACL3pH,EAAQgiC,EAASp8C,QAAQoa,QACzBgiC,EAASp8C,QAAQglE,YAAYt6D,EAASjH,IACtC+wC,EAAO3lC,EAAK4f,QAAQuC,GAAG5W,GACvBo6B,EAAKrpC,KAAKhL,EAAMgL,KAAK,OAAQ1H,EAAKozC,KAC9BhoC,EAAKme,qBACL7sB,EAAMkP,KAAKmlC,EAAM/wC,GAErBoL,EAAKke,QAAQ,UAAW,WACpB,OACIyB,UAAWgmB,GACX/wC,OAASirB,SAAUjrB,SAIxB,GAEXshI,KAAM,SAAUvwF,GACZ,GAAsD5kB,GAA2BxV,EAA7EvL,EAAO5G,KAAMxE,EAAOoL,EAAKo2H,kBAAkBzwF,GAAkBqC,EAAMpzC,EAAKozC,GAC5EhoC,GAAKokB,SACLuhB,EAAO3lC,EAAK4f,QAAQ3iB,OAAO,IAAM3L,EAAMgL,KAAK,OAAS,IAAM0rC,EAAM,KACjEz8B,EAAQo6B,EAAKp6B,QACbo6B,EAAKwwB,YAAYn2D,EAAK80H,aAAalgI,IACnCmsB,EAAY/gB,EAAK4f,QAAQuC,GAAG5W,GAAO7X,SAASygI,GAAW73H,KAAKhL,EAAMgL,KAAK,OAAQ1H,EAAKozC,KACpFhoC,EAAKutC,SAAWxsB,EAAUu1G,eACtBn0F,MAAOvtC,EACPy+H,gBAAgB,EAChBh6D,eAAe,EACf7/C,OAAQxZ,IACTpL,KAAK,iBACRoL,EAAKoB,QAAQgzH,GACTjyF,MAAOvtC,EACP+wC,KAAM5kB,KAGduQ,KAAM,WAAA,GACyC6Q,GAIvCphB,EAJA/gB,EAAO5G,KAAMm0C,EAAWvtC,EAAKutC,QAC5BA,KAGDxsB,EAAYwsB,EAASp8C,QACzBgxC,EAAQniC,EAAKo2H,kBAAkBr1G,GAC3BwsB,EAASx8C,QAAUiP,EAAKoB,QAAQkzH,GAC5BnyF,MAAOA,EACPwD,KAAM5kB,MAEV/gB,EAAKq2H,iBACLr2H,EAAKge,WAAWs3B,UAGxBh0B,OAAQ,SAAUqkB,GACd,GAAI3lC,GAAO5G,KAAM4kB,EAAahe,EAAKge,WAAYppB,EAAOoL,EAAKo2H,kBAAkBzwF,EACzE3lC,GAAKutC,WACLvvB,EAAW45B,cAAc53C,EAAKo2H,kBAAkBp2H,EAAKutC,SAASp8C,UAC9D6O,EAAKq2H,kBAEJr2H,EAAKoB,QAAQizH,GACVlyF,MAAOvtC,EACP+wC,KAAMA,MAEVA,EAAKzrC,OACL8jB,EAAWsD,OAAO1sB,GAClBopB,EAAWs3B,SAGnB56C,IAAK,WACD,GAAiBmlB,GAAb7f,EAAO5G,KAAgB4kB,EAAahe,EAAKge,WAAYzS,EAAQyS,EAAW1mB,SAAS0mB,EAAW+D,YAAc,GAC1GxW,GAAQ,IACRA,EAAQ,GAEZvL,EAAKokB,SACLvE,EAAW7B,EAAWm4B,OAAO5qC,MAC7BvL,EAAKk2H,KAAKl2H,EAAK7O,QAAQuvB,KAAK,cAAiBb,EAASmoB,IAAM,QAEhE5jB,OAAQ,WAAA,GAGIrD,GACAohB,EAHJniC,EAAO5G,KAAM4kB,EAAahe,EAAKge,UAC/Bhe,GAAKutC,WACDxsB,EAAY/gB,EAAKutC,SAASp8C,QAC1BgxC,EAAQniC,EAAKo2H,kBAAkBr1G,GAC9B/gB,EAAKoB,QAAQ43B,GACVmJ,MAAOA,EACPphB,UAAWA,MAEf/C,EAAW45B,cAAczV,GACzBniC,EAAKq2H,oBAIjB1B,cAAe,WACX,GAAI30H,GAAO5G,KAAMm9H,EAAU9lD,EAAQxY,CACnCj4D,GAAK7O,QAAQ2N,GAAGy3H,EAAS,iBAAkB,SAAUl1H,GACjD,GAAIskC,GAAO71C,EAAEsJ,MAAMiY,QAAQ,IAAM/f,EAAMgL,KAAK,OAAS,IACrD0D,GAAKk2H,KAAKvwF,GACVtkC,EAAE9D,mBAENyC,EAAK7O,QAAQ2N,GAAGy3H,EAAS,mBAAoB,SAAUl1H,GACnD,GAAIskC,GAAO71C,EAAEsJ,MAAMiY,QAAQ,IAAM/f,EAAMgL,KAAK,OAAS,IACrD0D,GAAKshB,OAAOqkB,GACZtkC,EAAE9D,mBAENyC,EAAK7O,QAAQ2N,GAAGy3H,EAAS,mBAAoB,SAAUl1H,GACnDrB,EAAKsxB,OACLjwB,EAAE9D,mBAENyC,EAAK7O,QAAQ2N,GAAGy3H,EAAS,mBAAoB,SAAUl1H,GACnDrB,EAAKokB,SACL/iB,EAAE9D,oBAGV2hB,QAAS,WACL,GAAIlf,GAAO5G,IACXgF,GAAOf,GAAG6hB,QAAQ3d,KAAKvB,GACvBA,EAAKwvF,oBACLxvF,EAAKk1H,mBACLl1H,EAAK7O,QAAQ6xB,IAAIi1C,GACbj4D,EAAKq1H,OACLr1H,EAAKq1H,MAAMn2G,UAEf5tB,EAAM4tB,QAAQlf,EAAK7O,WAG3BG,GAAMmpB,GAAG8G,OAAOgzG,IAClBxkI,OAAOuB,MAAM2sB,QACRluB,OAAOuB,OACE,kBAAVzB,SAAwBA,OAAOgiC,IAAMhiC,OAAS,SAAUiiC,EAAIC,EAAIC,IACrEA,GAAMD,OAEV,SAAUniC,EAAGC,QACVA,OAAO,iBACH,oBACA,aACA,oBACDD,IACL,WA+xCE,MApxCC,UAAUE,EAAGE,GAmEV,QAASwmI,GAAoB52G,GACzB,GAAIs4E,GAAUpoG,EAAEsc,IAAIwT,EAAO,SAAU+lB,GACjC,MAAO71C,GAAE61C,GAAMp6B,SAEnB,OAAO2sF,GAEX,QAASu+B,GAAYz/H,GACjB,MAAwB,KAAVA,EAElB,QAAS6zE,GAAY15E,GACjB,MAAOA,GAAQoE,QAAQwuD,YAAY2yE,IAAchjI,SAASpC,EAAM6Q,OAAO,cAAew0H,EAAsBC,EAAOC,IAAkBxkI,MAAMlB,EAAQkB,SAEvJ,QAASy4E,KACL,MAAOh7E,GAAE,QAAQ4D,SAASojI,GAhFjC,GAk7BOC,GA8BAC,EAaAC,EAiBAC,EA2CAC,EAYAC,EAaAC,EAgDAC,EAkBAC,EAkBAC,EAaAC,EAaA71C,EA/pCAtwF,EAAQvB,OAAOuB,MACfomI,EAAYpmI,EAAMgL,KAClB1H,EAAOtD,EAAMsD,KACbmmB,EAAOzpB,EAAMypB,KACbogE,EAAgB7pF,EAAMuK,SACtBuC,EAAS9M,EAAMmpB,GAAGrc,OAClBtJ,EAAaF,EAAKE,WAClB05E,EAAal9E,EAAMmpB,GAAG+zD,WACtBnwE,EAAkB/M,EAAMmpB,GAAGpc,gBAC3BpO,EAAQqB,EAAMrB,MACd6J,EAAShK,EAAEgK,OACXE,EAAOlK,EAAEkK,KACToF,EAAQtP,EAAEsP,MACVu4H,EAAO,IACPC,EAAM,IACNC,EAAQ,IACRC,EAAO,IACPC,EAAgB,eAChB9/D,EAAK2/D,EAAMG,EACXC,EAAuB,mBACvBrB,EAAuB,mBACvBsB,EAAwB,iCACxBC,EAAyB,mCAAqCD,EAC9DE,EAAgB,oBAChBC,EAAgB,yCAChBC,EAAgB,kBAChBxB,EAAkB,cAClBC,EAAkB,cAClBwB,EAAa,iBACbC,EAAgB,kBAChB3B,EAAQ,UACRnmD,EAAQ,QAAUxY,EAClBqa,EAAU,UAAYra,EACtBS,EAAO,OAAST,EAChBrlE,EAAatB,EAAMuB,YACnBC,EAAcxB,EAAMyB,aACpB8/B,GAAS,SACTmhG,GAAY,YACZwE,GAAM,MACNnE,GAAS,SACToE,GAAU,UACVC,GAAU,SACVC,GAAY,WACZC,GAAc,aACdC,GAAgB,eAChBC,GAAkB,gBAClBC,GAAoB,kBACpBrC,GAAe,UACfsC,GAAY,MACZ16G,GAAW,WACX26G,GAAU,UACVC,MACAC,GAAmB,EACnBp7D,GAAY,YACZC,GAAO,OACPM,GAAO,OACPL,GAAU,UACVkN,GAAiB,8BACjB3vD,GAAQ,QACRi5D,GAAS,SACT2kD,IACAjB,EAAgBR,EAAO,OACvBQ,EAAgBR,EAAOn8G,GACvB28G,EAAgBR,EAAO,MACvBQ,EAAgBR,EAAOljD,IAiBvB4kD,GAAUh7H,EAAgBvE,QAC1BC,KAAM,SAAU5I,EAASqI,GACrB,GAAIwG,GAAO5G,IACXgF,GAAOf,GAAGtD,KAAKwH,KAAKvB,EAAM7O,EAASqI,GACnCwG,EAAK+nG,WACL/nG,EAAKs5H,QACLnoI,EAAU6O,EAAK7O,QAAQmL,KAAK,WAAY,YAAYpC,OAChD/I,EAAQ,KAAO6O,EAAKxG,QAAQwkB,aAC5Bhe,EAAKxG,QAAQ4rD,cAAgBplD,EAAKxG,QAAQ4rD,eAAiB,OAC3DplD,EAAKxG,QAAQ4nD,eAAiBphD,EAAKxG,QAAQ4nD,gBAAkB,SAEjEphD,EAAK82F,aACL92F,EAAKy0H,cACLz0H,EAAK49C,cACL59C,EAAKu5H,iBACLv5H,EAAKsrE,mBACLtrE,EAAKw5H,sBAETt6G,QAAS,WACL,GAAIlf,GAAO5G,IACXiF,GAAgBhB,GAAG6hB,QAAQ3d,KAAKvB,GAC3B6O,MAAM7O,EAAKy5H,iBACZz5H,EAAK05H,WAAW12G,MAChBhjB,EAAKy5H,cAAgB,MAEzBz5H,EAAKwvF,oBACLxvF,EAAK25H,qBACL35H,EAAK45H,kBACL55H,EAAKvN,QAAQuwB,IAAIi1C,GACbj4D,EAAK65H,UACL75H,EAAK65H,QAAU,MAEf75H,EAAK85H,aACL95H,EAAK85H,WAAW56G,UAChBlf,EAAK2W,YAAc,MAEvBrlB,EAAM4tB,QAAQlf,EAAK7O,UAEvB2P,QACI+xB,GACAmhG,GACAwE,GACAnE,GACAoE,GACA16D,GACAC,GACAM,GACAL,IAEJzkE,SACI8O,KAAM,UACN85C,UAAU,EACVvmD,SAAU,GACVupD,cAAe,GACfhE,eAAgB,GAChBmvB,WAAY,SACZhP,UAAW,KACXw4D,eACAxuD,YAAa,GACbqpD,aAAa,EACb/wC,SACIp0B,SAAUj0C,GACVw+G,UAEJl/G,UACIk/G,OACI14G,OAAQ,SACR24G,OAAQ,UACRC,SAAU,YACVC,WAAY,cACZC,aAAc,gBACdC,cAAe,kBACfC,gBAAiB,uBAI7B5/H,IAAK,SAAU6kB,GAAV,GAIGrrB,GAHA8L,EAAO5G,KACPwmB,EAAQL,GAAaA,EAAUvuB,OAASuuB,GAAaA,GACrDyqE,EAAcpqE,EAAM5uB,MAGxB,KADAgP,EAAKwvF,oBACAt7F,EAAI,EAAGA,EAAI81F,EAAa91F,IACzB8L,EAAKu6H,SAAS36G,EAAM1rB,GAExB8L,GAAKw6H,kBACLx6H,EAAKy6H,gBAETF,SAAU,SAAU16G,GAAV,GACF7f,GAAO5G,KACPusC,EAAO3lC,EAAK06E,UAAUm3B,cACtBlsE,KAAM9lB,EACNm/F,EAAGh/G,EAAK06E,UAAUggD,aAEtB5qI,GAAE61C,GAAMrpC,KAAKo7H,EAAUsB,IAAYn5G,EAASmoB,KAAK9X,SAASlwB,EAAK05H,YACvC,gBAAb75G,GACP7f,EAAKge,WAAWwrB,MAAMtoC,KAAK2e,GAE3B7f,EAAKge,WAAWtjB,IAAImlB,IAG5B86G,WAAY,SAAU96G,EAAUtU,GAApB,GACJvL,GAAO5G,KACPusC,EAAO3lC,EAAK06E,UAAUm3B,cACtBlsE,KAAM9lB,EACNm/F,EAAGh/G,EAAK06E,UAAUggD,aAEtB16H,GAAKwvF,oBACmB,gBAAb3vE,IACP7f,EAAK46H,iBAAiBj1F,EAAMp6B,GAC5BvL,EAAKge,WAAWwrB,MAAMtoC,KAAK2e,KAE3B7f,EAAK46H,iBAAiB9qI,EAAE61C,GAAMrpC,KAAKo7H,EAAUsB,IAAYn5G,EAASmoB,KAAMz8B,GACxEvL,EAAKge,WAAWtjB,IAAImlB,IAExB7f,EAAKw6H,kBACLx6H,EAAKy6H,gBAETG,iBAAkB,SAAUj1F,EAAMp6B,GAAhB,GACVvL,GAAO5G,KACPuwC,EAAO3pC,EAAK05H,UACZnuH,GAAQ,EACRzb,EAAE61C,GAAMu1B,YAAYvxB,EAAK51C,WAAWouB,GAAG5W,EAAQ,IAE/Czb,EAAE65C,GAAMi9B,QAAQjhC,IAGxB6zF,mBAAoB,WAAA,GACZx5H,GAAO5G,KACPI,EAAUwG,EAAKxG,OACfA,GAAQo7H,aACR50H,EAAK05H,WAAW56H,GAAG2xE,EAAOwnD,EAAuB74H,EAAMY,EAAKs9B,OAAQt9B,IAAOlB,GAAGwzE,EAASlzE,EAAMY,EAAK66H,SAAU76H,IAAOlB,GAAG45D,EAAMt5D,EAAMY,EAAKoxE,MAAOpxE,KAGtJ86H,aAAc,WAAA,GAENv8G,GADAve,EAAO5G,IAEX,OAAKyV,OAAM7O,EAAKy5H,gBAGhBl7G,EAAWve,EAAK7O,QAAQmL,KAAKgiB,IAC7Bte,EAAKy5H,cAAiB5qH,MAAM0P,GAAuB,EAAXA,EACxCve,EAAK7O,QAAQqtB,WAAWF,IACjBte,EAAKy5H,eALDz5H,EAAKy5H,eAOpBroD,MAAO,WACCh4E,KAAKygI,UACLzgI,KAAKygI,QAAQ91E,YAAYs0E,GACzBj/H,KAAKsgI,WAAWl7G,WAAW,0BAE/BplB,KAAKygI,QAAU,MAEnBv8F,OAAQ,SAAUj8B,GAAV,GACArB,GAAO5G,KACPogB,EAAS1pB,EAAEuR,EAAE22B,eACb+iG,EAAY/6H,EAAK65H,OACjBkB,IACAA,EAAUh3E,YAAYs0E,GAE1Br4H,EAAK65H,QAAUrgH,EACfA,EAAO9lB,SAAS2kI,GAChBr4H,EAAK05H,WAAWp9H,KAAK,wBAAyBkd,EAAOld,KAAK,OACtD0D,EAAK05H,WAAW,KAAOpoI,EAAMqa,kBAC7B3L,EAAK2tB,SAGbqtG,oBAAqB,SAAU7iI,GAAV,GAEb4M,GADA/E,EAAO5G,IAaX,OARI2L,GAHC/E,EAAK65H,QAGI75H,EAAK65H,QAFL75H,EAAK4f,QAAQ3iB,OAAOg7H,GAAuBznI,QAIrD2H,IAAQ4iB,EAAKQ,IAAMvb,EAAK65H,UACxB90H,EAAU/E,EAAK65H,QAAQhxC,QAAQovC,GAAuBznI,SAEtD2H,IAAQ4iB,EAAKU,MAAQzb,EAAK65H,UAC1B90H,EAAU/E,EAAK65H,QAAQoB,QAAQhD,GAAuBznI,SAEnDuU,EAAQ/T,OAAS+T,EAAU,MAEtCm2H,gBAAiB,SAAUv1F,GAAV,GAOTgE,GACA0tD,EACAE,EACAC,EACAC,CAVC9xD,KAGDA,EAAK,KACLA,EAAOA,EAAK,IAEZgE,EAAOvwC,KAAKsgI,WAAW1mI,SAAS,GAChCqkG,EAAgB1xD,EAAKqrD,UACrBuG,EAAmB5tD,EAAK5wC,UACxBy+F,EAAsB7tD,EAAKvzB,aAC3BqhF,EAAiBJ,EAAgB1xD,EAAK5lB,aACtCw3E,EAAmBF,EACnBE,EAAmBF,EACZI,EAAiBF,EAAmBC,IAC3CD,EAAmBE,EAAiBD,GAExC7tD,EAAK5wC,UAAYw+F,IAErBsjC,SAAU,SAAUx5H,GAAV,GAIF85H,GAHAn7H,EAAO5G,KACPjB,EAAMkJ,EAAEmuB,QACRzqB,EAAU/E,EAAKg7H,oBAAoB7iI,EAQvC,IANI6H,EAAK65H,SACL75H,EAAK65H,QAAQ91E,YAAYs0E,KAEvBh3H,EAAEouB,UAAapuB,EAAE8tE,SAAYh3E,IAAQ4iB,EAAKU,MAAQtjB,IAAQ4iB,EAAKQ,MACjEvb,EAAKo7H,iBAAkB,GAEvBjjI,GAAO4iB,EAAKE,OACZjb,EAAKq7H,gBAAgBhH,IACjBr0H,EAAK65H,UACL75H,EAAK65H,QAAQ91E,YAAYs0E,GACzBr4H,EAAK05H,WAAWl7G,WAAW,yBAC3Bxe,EAAK65H,QAAU,MAEnBsB,GAAuB,MACpB,IAAIhjI,IAAQ4iB,EAAKU,MAAQtjB,IAAQ4iB,EAAKQ,GAAI,CAC7C,IAAKxW,EAED,MADA1D,GAAE9D,iBACF,CAEJ,IAAI8D,EAAEouB,WAAapuB,EAAE8tE,QACZnvE,EAAKo7H,kBACNp7H,EAAKm2H,iBACLn2H,EAAKo7H,iBAAkB,GAEvBp7H,EAAK65H,SAAW90H,EAAQ9R,SAAS,qBACjC+M,EAAK65H,QAAQ91E,YAAY4yE,GACzB32H,EAAKoB,QAAQyxB,KAEb7yB,EAAKkuB,OAD6B,UAA3BluB,EAAKxG,QAAQ+2E,WACRxrE,EAEAA,EAAQrK,IAAIsF,EAAK65H,cAE9B,CAAA,GAAIx4H,EAAEouB,UAAYpuB,EAAE8tE,QAIvB,MAHAnvE,GAAKq7H,gBAAgBljI,IAAQ4iB,EAAKU,KAAOk9G,GAAYD,IACrD14H,EAAKk7H,gBAAgBl7H,EAAK65H,SAC1Bx4H,EAAE9D,iBACF,CACQ8D,GAAEouB,UAAapuB,EAAE8tE,UACO,aAA5BnvE,EAAKxG,QAAQ+2E,YACbvwE,EAAKm2H,iBAETn2H,EAAKkuB,OAAOnpB,IAEhB/E,EAAK65H,QAAU90H,EACX/E,EAAK65H,SACL75H,EAAK65H,QAAQnmI,SAAS2kI,GACtBr4H,EAAKk7H,gBAAgBl7H,EAAK65H,SAC1B75H,EAAK05H,WAAWp9H,KAAK,wBAAyB0D,EAAK65H,QAAQv9H,KAAK,QAEhE0D,EAAK05H,WAAWl7G,WAAW,yBAE/B28G,GAAuB,MAChBhjI,IAAO4iB,EAAKa,UACfva,EAAE8tE,SAAWnvE,EAAK65H,QACd75H,EAAK65H,QAAQ5mI,SAAS0jI,IACtB32H,EAAK65H,QAAQ91E,YAAY4yE,GACzB32H,EAAKoB,QAAQyxB,KAEb7yB,EAAKkuB,OAAOluB,EAAK65H,UAGrB75H,EAAKm2H,iBACLn2H,EAAKkuB,OAAOluB,EAAK65H,UAErBsB,GAAuB,GAChB95H,EAAE8tE,SAAWh3E,GAAO4iB,EAAKS,OAE5Bxb,EAAKq7H,gBADLh6H,EAAEouB,SACmBqpG,GAEAF,IAEzB54H,EAAK65H,QAAU75H,EAAKkuB,SAASl9B,OAASgP,EAAKkuB,SAAW,KACtDitG,GAAuB,GAChB95H,EAAE8tE,SAAWh3E,GAAO4iB,EAAKO,OAE5Btb,EAAKq7H,gBADLh6H,EAAEouB,SACmBspG,GAEAF,IAEzBsC,GAAuB,EAEvBA,IACA95H,EAAE9D,kBAGVowB,MAAO,WACHv0B,KAAKsgI,WAAW/rG,SAEpB29C,iBAAkB,WAAA,GAGV1I,GAFA5iE,EAAO5G,KACPmoE,EAAYvhE,EAAKxG,QAAQ+nE,SAE7B,IAAIA,EAAW,CAEX,GADAqB,EAAOrB,EAAUqB,MACZ5iE,EAAKxG,QAAQ+2E,WACd,KAAUruE,OAAM,4CAEf0gE,KACDA,EAAOiI,GAEX7qE,EAAK85H,WAAa,GAAIxoI,GAAMmpB,GAAGijD,UAAU19D,EAAKvN,SAC1CwK,OAAQskE,EAAUtkE,OAASskE,EAAUtkE,OAASkuE,GAC9CvI,KAAMtxE,EAAMgE,WAAWstE,GAAQA,EAAO9yE,EAAE8yE,GACxCgH,UAAWxqE,EAAMY,EAAK6+B,WAAY7+B,GAClC2pE,WAAYvqE,EAAMY,EAAKytF,OAAQztF,GAC/B0pE,KAAMtqE,EAAMY,EAAKgiE,MAAOhiE,GACxB6pE,QAASzqE,EAAMY,EAAK2rE,SAAU3rE,OAI1C6+B,WAAY,SAAUx9B,GAAV,GACJrB,GAAO5G,KACPwyE,EAAiB5rE,EAAK4rE,eAAiBvqE,EAAE22B,cACzCrhB,EAAc3W,EAAKxG,QAAQ+nE,UAAU5qD,YACrCkJ,EAAW7f,EAAK6f,SAAS+rD,GACzBY,GACAjtD,UAAWM,EACXD,MAAO9vB,EAAE87E,GACTE,eAAgBzqE,EAEpB,OAAIrB,GAAKxG,QAAQ+nE,UAAU/oD,WAAY,GACnCnX,EAAE9D,iBACF,IAECoZ,IACDA,EAAcm0D,GAElB9qE,EAAK2W,YAA8C7mB,EAAhCwB,EAAMgE,WAAWqhB,GAAiBA,EAAYpV,KAAKvB,EAAM4rE,GAAqBj1D,GAC7Fi1D,EAAez4E,GAAGykI,EAAMI,GACxB32H,EAAE9D,iBAEEyC,EAAKoB,QAAQ28D,GAAWyO,GACxBnrE,EAAE9D,kBAEFyC,EAAKm2H,iBACLn2H,EAAKkuB,OAAO09C,GACZA,EAAel4E,SAASgjI,KAZhC,IAgBJjpC,OAAQ,WACJr0F,KAAKwyE,eAAe7nB,YAAY2yE,IAChCt9H,KAAKud,YAAY2K,UAErBgsD,wBAAyB,SAAUjsE,GAAV,GACjB+qB,GAAqB96B,EAAM86B,mBAAmB/qB,GAC9CkgE,EAAYlgE,EAAEC,MAMlB,QALIxR,EAAEoM,SAASqlE,EAAUqB,KAAK,GAAIx2C,IAAuBm1C,EAAUqB,KAAK,KAAOx2C,KAC3Em1C,EAAUqB,KAAK1oE,OACfkyB,EAAqB96B,EAAM86B,mBAAmB/qB,GAC9CkgE,EAAUqB,KAAKxvE,QAEZg5B,GAEXkgD,YAAa,SAAUjrE,GAAV,GAKLue,GACAmL,EALA/qB,EAAO5G,KACPjI,EAAU6O,EAAKstE,wBAAwBjsE,GACvCi6H,EAAcxrI,EAAEqB,GAChBw4C,EAAO3pC,EAAK05H,UAGhB,OAAI5pI,GAAEoM,SAASytC,EAAK,GAAIx4C,IACpByuB,EAAQ5f,EAAK4f,QACbzuB,EAAUmqI,EAAYnoI,GAAG,MAAQhC,EAAUmqI,EAAYjqH,QAAQ,MAAM,GACrE0Z,EAAOnL,EAAM3iB,OAAO9L,GAAS,IAAMyuB,EAAM2tD,IAAIp8E,GAAS,GAClD45B,GACAA,EAAOj7B,EAAEi7B,GACDA,EAAK93B,SAAS+kI,GAGlB,MAFA7mI,QAAS45B,EACTwwG,QAASv7H,IAGN,MAEJ2pC,EAAK,IAAMx4C,GAAWw4C,EAAK32C,SAAS,IAAM7B,GAE7CA,QAASrB,EAAE65C,GACXgjC,gBAAgB,EAChB4uD,QAASv7H,GAGNA,EAAKw7H,wBAAwBF,IAG5C5uD,kBAAmB,SAAUv7E,GACzB,GAAIymC,GAASzmC,EAAQH,OAASM,EAAM+G,UAAUlH,GAAW,IAKzD,OAJIymC,KACAA,EAAOl/B,KAAO5F,EAAY3B,GAAW,EACrCymC,EAAO7lC,MAAQa,EAAWzB,GAAW,GAElCymC,GAEX4jG,wBAAyB,SAAUrqI,GAAV,GACjBsqI,GACA77G,EACAmL,EAEA2wG,EADAC,EAAkBxqI,CAOtB,OAJIuqI,GADAvqI,EAAQ8B,SAAS,gCACE9B,EAEAA,EAAQkgB,QAAQ,iCAEnCqqH,EAAiB1qI,QACjByqI,EAAmBC,EAAiB1oI,SAAS0tB,KAAK,yBAA2Bk7G,kBAI7EH,GAAoB3rI,EAAEuM,QAAQjD,KAAKjI,QAAQ,GAAG8rB,GAAIw+G,EAAiBjiI,QAAQugI,mBAC3En6G,EAAQ67G,EAAiB77G,QACzBzuB,EAAUA,EAAQgC,GAAG,MAAQhC,EAAQ,GAAKA,EAAQkgB,QAAQ,MAAM,GAChE0Z,EAAOnL,EAAM3iB,OAAO9L,GAAS,IAAMyuB,EAAM2tD,IAAIp8E,GAAS,GAClD45B,GACAA,EAAOj7B,EAAEi7B,GACDA,EAAK93B,SAAS+kI,GAGlB,MAFA7mI,QAAS45B,EACTwwG,QAASE,KAEL77G,EAAM5uB,QAAU2qI,EAAgB1oI,SAAS,iCAAmC0oI,EAAgB1oI,SAAS,mBAEzG9B,QAASsqI,EAAiB/B,WAC1B6B,QAASE,EACT9uD,gBAAgB,GAGb,MAGR,MAtBI,MAwBf3K,MAAO,SAAU3gE,GAAV,GAcC6qE,GACAC,EACAntC,EAfAh/B,EAAO5G,KACPwyE,EAAiB5rE,EAAK4rE,eACtBpyD,EAASxZ,EAAKssE,YAAYjrE,GAC1BghE,GACAtwE,KAAMsP,EAAEgrB,EAAEvX,SACVpc,IAAK2I,EAAEoJ,EAAEqK,UAET+K,EAAW7f,EAAK6f,SAAS+rD,GACzBY,GACAjtD,WAAYM,GACZD,MAAO9vB,EAAE87E,GACTE,eAAgBzqE,EAKpB,IAAIrB,EAAKoB,QAAQ48D,GAAMwO,GAEnB,MADAnrE,GAAE9D,iBACF,CAEJ,IAAIic,EAAQ,CAMR,GALA0yD,EAAe9yE,KAAKszE,kBAAkBlzD,EAAOroB,SAC7Cg7E,GACIp6E,KAAMiG,KAAK6Q,MAAMw5D,EAAatwE,KAAOm6E,EAAan6E,MAClD2G,IAAKV,KAAK6Q,MAAMw5D,EAAa3pE,IAAMwzE,EAAaxzE,MAEhD8gB,EAAOmzD,eAEP,MADA3sE,GAAK4sE,iBAAiBpzD,EAAQ,KAAMoyD,GACpC,CAEAO,GAAYzzE,IAAM,EAClBsmC,EAAY,OACLmtC,EAAYzzE,IAAM,IACzBsmC,EAAY,QAEZA,GACIxlB,EAAOroB,QAAQ,IAAM6O,EAAK2W,YAAY,IACtC3W,EAAK4sE,iBAAiBpzD,EAAQwlB,EAAW4sC,OAG1C5rE,GAAK2W,YAAY3jB,SAAShC,QACjCgP,EAAK2W,YAAY2K,UAGzBsrD,iBAAkB,SAAUpzD,EAAQwlB,EAAW4sC,GAA7B,GACV5rE,GAAO5G,KACPud,EAAc3W,EAAK2W,YACnBklH,EAAmBriH,EAAO+hH,QAAQ/hI,QAAQ+nE,SAC1C5qD,GAAY3jB,SAAShC,SACrBgP,EAAK2W,YAAY2K,SAEbthB,EAAK2W,YAA+D7mB,EADpE+rI,GAAoBA,EAAiBllH,YAClBrlB,EAAMgE,WAAWumI,EAAiBllH,aAAiBklH,EAAiBllH,YAAYpV,KAAKvB,EAAM4rE,GAAqBiwD,EAAiBllH,YAE/Hm0D,EAAmBvpE,KAAKvB,EAAM4rE,KAGtD5sC,EAEoB,SAAdA,EACPxlB,EAAOroB,QAAQ46E,OAAO/rE,EAAK2W,aACN,SAAdqoB,GACPxlB,EAAOroB,QAAQylE,MAAM52D,EAAK2W,aAJ1B6C,EAAOroB,QAAQ+rD,OAAOl9C,EAAK2W,cAOnCg1D,SAAU,SAAUtqE,GAAV,GACFrB,GAAO5G,KACP0iI,EAAc97H,EAAK4rE,eACnBhsD,EAAQ5f,EAAK4f,QACbstD,EAAmBttD,EAAMyuD,IAAIruE,EAAK4rE,gBAAgBrgE,MAAMvL,EAAK2W,aAC7Ds2D,EAAertD,EAAMyuD,IAAIruE,EAAK2W,aAAapL,MAAMvL,EAAK4rE,gBACtD/rD,EAAW7f,EAAK6f,SAASi8G,GACzBtvD,GACAjtD,WAAYM,GACZD,MAAO9vB,EAAEgsI,IAETL,EAAmBz7H,EAAK2W,YAAYtF,QAAQ,uBAAuBqP,KAAK,yBAA2Bk7G,iBACvG,OAAI57H,GAAKoB,QAAQk9D,GAAMxkE,KAAW0yE,GAAaV,eAAgBzqE,MAC3DA,EAAE9D,iBACFnE,KAAKq0F,SACL,IAEAvgB,GAAoB,EAChBA,IAAqBD,GAAiBjtE,EAAKoB,QAAQq3H,GAAS3+H,KAAW0yE,GAAah0E,OAAQ00E,EAAmBD,OAC/G6uD,EAAY/3E,YAAY2yE,IACxB12H,EAAK+7H,QAAQD,EAAa5uD,IAEvBuuD,IACFz7H,EAAKoB,QAAQizH,GAAQ7nD,IACtBxsE,EAAKshB,OAAOxxB,EAAEgsI,IAEbL,EAAiBr6H,QAAQo3H,GAAKhsD,IAC/BivD,EAAiBd,WAAW96G,EAAU47G,EAAiB77G,QAAQrU,MAAMvL,EAAK2W,eAGlF3W,EAAKytF,SACLztF,EAAK85H,WAAWl4D,SAAU,EAC1B5hE,EAAKoB,QAAQ68D,GAASnkE,KAAW0yE,GAAaV,eAAgBzqE,KAf9D,IAiBJ06H,QAAS,SAAUp2F,EAAMp6B,GAAhB,GACDvL,GAAO5G,KACP4kB,EAAahe,EAAKge,WAClB6B,EAAW7f,EAAK6f,SAAS8lB,GACzBq2F,EAAkBh+G,EAAWqpB,GAAG97B,GAChC0wH,EAAcj8H,EAAK4f,QAAQrU,GAC3B2wH,EAAWpsI,EAAE61C,EACb9lB,IAAYo8G,GAAeD,IAC3Bh8H,EAAKm8H,eAAeD,GACpBl8H,EAAK46H,iBAAiBsB,EAAU3wH,GAChCvL,EAAKo8H,mBAGb96G,OAAQ,SAAU1B,GAAV,GAIA1rB,GAHA8L,EAAO5G,KACPijI,EAAYr8H,EAAKs8H,UAAU18G,GAC3BoqE,EAAcqyC,EAAUrrI,MAG5B,KADAgP,EAAKwvF,oBACAt7F,EAAI,EAAGA,EAAI81F,EAAa91F,IACzB8L,EAAKu8H,YAAYzsI,EAAEusI,EAAUnoI,IAEjC8L,GAAKw6H,kBACLx6H,EAAKy6H,eACLz6H,EAAKo8H,iBACLp8H,EAAKw8H,sBAETD,YAAa,SAAU52F,GAAV,GAQD/wC,GACKV,EART8L,EAAO5G,KACP4kB,EAAahe,EAAKge,WAClB6B,EAAW7f,EAAK6f,SAAS8lB,EAC7B,IAAK9lB,GAAa7B,EAAlB,CAGA,GAAwB,gBAAb6B,IAEP,IADIjrB,EAAOopB,EAAWwrB,MACbt1C,EAAI,EAAGA,EAAIU,EAAK5D,OAAQkD,IAC7B,GAAI2rB,IAAajrB,EAAKV,GAAI,CACtBU,EAAKV,GAAKU,EAAKA,EAAK5D,OAAS,GAC7B4D,EAAKuwB,KACL,YAIRnH,GAAWsD,OAAOzB,EAEtB7f,GAAKm8H,eAAex2F,KAExBw2F,eAAgB,SAAUx2F,GACtBr0C,EAAM4tB,QAAQymB,GACd71C,EAAE61C,GAAM3iB,MAAM1B,UAElBzB,SAAU,SAAU1uB,GAAV,GACFsrI,GAAe/E,EAAUsB,IACzBhxF,EAAMl4C,EAAEqB,GAASmL,KAAKmgI,IAAiB3sI,EAAEqB,GAASkgB,QAAQ,IAAMorH,EAAe,KAAKngI,KAAKmgI,EAC7F,OAAIz0F,GACO5uC,KAAK4kB,WAAW83B,SAAS9N,GAEzBl4C,EAAEqB,GAAS2K,QAG1B66F,WAAY,SAAU/2E,GAAV,GAIJ1rB,GAHAqrB,KACA88G,EAAYvsI,EAAE8vB,GACdoqE,EAAcqyC,EAAUrrI,MAE5B,KAAKkD,EAAI,EAAGA,EAAI81F,EAAa91F,IACzBqrB,EAAUre,KAAK9H,KAAKymB,SAASw8G,EAAUl6G,GAAGjuB,IAE9C,OAAOqrB,IAEXK,MAAO,WACH,GAAI+pB,GAAOvwC,KAAKsgI,UAChB,OAAO/vF,GAAK51C,YAEhBm6B,OAAQ,SAAUtO,GAAV,GAGA88G,GAFA18H,EAAO5G,KACPm3E,EAAavwE,EAAKuwE,UAEtB,OAAIkmD,GAAY72G,GACL2wD,EAAWv5E,SAEtB0lI,EAAe18H,EAAK4f,QAAQ3iB,OAAO2iB,GAAO3iB,OAAOi7H,GAC5C3nD,EAAW/2E,QAAQ+1D,WACpBghB,EAAWh+B,QACXmqF,EAAeA,EAAalsI,SAEzB+/E,EAAWv5E,MAAM0lI,KAE5BvG,eAAgB,WAAA,GACRn2H,GAAO5G,KACPm3E,EAAavwE,EAAKuwE,UAClBA,IACAA,EAAWh+B,SAGnB15B,OAAQ,SAAU+G,EAAO/G,GAAjB,GAKA3kB,GAJA8L,EAAO5G,KACPof,IAAUi+G,EAAY59G,MAAmBA,EACzCwjH,EAAYr8H,EAAKs8H,UAAU18G,GAC3BoqE,EAAcqyC,EAAUrrI,MAE5B,KAAKkD,EAAI,EAAGA,EAAI81F,EAAa91F,IACzB8L,EAAK28H,YAAY7sI,EAAEusI,EAAUnoI,IAAKskB,EAEtCxY,GAAKw8H,sBAETG,YAAa,SAAUh3F,EAAM9sB,GAAhB,GACL7Y,GAAO5G,KACPymB,EAAW7f,EAAK6f,SAAS8lB,EACzB9lB,KACIhH,EACA/oB,EAAE61C,GAAMoe,YAAYi0E,GAEpBloI,EAAE61C,GAAMjyC,SAASskI,GAAsBj0E,YAAY4yE,KAI/DhjD,cAAe,SAAU31D,GACrB,GAAIhe,GAAO5G,IACX4G,GAAKxG,QAAQwkB,WAAaA,EAC1Bhe,EAAK49C,eAETA,YAAa,WAAA,GACL59C,GAAO5G,KACPI,EAAUwG,EAAKxG,QACfwkB,EAAaxkB,EAAQwkB,cACzBA,GAAaluB,EAAEqP,QAAQ6e,IAAgBppB,KAAMopB,GAAeA,EAC5DA,EAAWkQ,OAASluB,EAAK7O,QACzB6sB,EAAWykB,SACLtrB,MAAO3d,EAAQ4rD,gBACfjuC,MAAO3d,EAAQ4nD,iBAErBphD,EAAKwvF,oBACLxvF,EAAKge,WAAalpB,EAAW2sC,OAAOzjB,GACpChe,EAAKw6H,kBACDx6H,EAAKxG,QAAQ4oD,UACbpiD,EAAKge,WAAWs8B,SAGxBkgF,gBAAiB,WAAA,GACTx6H,GAAO5G,KACP4kB,EAAahe,EAAKge,UACtBhe,GAAK48H,mBAAqBx9H,EAAMY,EAAK4Q,QAAS5Q,GAC1Cge,GACAA,EAAWxd,KAAKqyB,GAAQ7yB,EAAK48H,qBAGrCptC,kBAAmB,WAAA,GACXxvF,GAAO5G,KACP4kB,EAAahe,EAAKge,UAClBA,IACAA,EAAW/c,OAAO4xB,GAAQ7yB,EAAK48H,qBAGvC70B,SAAU,WACN,GAAI/nG,GAAO5G,KAAMjI,EAAU6O,EAAK7O,QAASsB,EAAUtB,EAAQ6B,OAAO,gBAC7DP,GAAQ,KACTA,EAAUtB,EAAQe,KAAK,wDAAwDc,SAC/EP,EAAQ,GAAGS,MAAM6d,QAAU5f,EAAQ,GAAG+B,MAAM6d,QAC5Cte,EAAQ,GAAGghC,MAAQtiC,EAAQ,GAAGsiC,MAC9B3jC,EAAE,mCAAmCw0D,aAAanzD,IAEtD6O,EAAKvN,QAAUA,EAAQiB,SAASvC,EAAQ,GAAGkG,WAAWhG,IAAI,UAAW,IACrE2O,EAAKm0G,cAAgBrkH,EAAE2C,EAAQ,GAAG4wC,aAEtCi2F,MAAO,WACH,GAAIt5H,GAAO5G,IACXtJ,GAAE,cAAiBwoI,EAAa,0BAA6BpoG,SAASlwB,EAAKm0G,eACvEn0G,EAAKxG,QAAQo7H,aACb50H,EAAK05H,WAAWp9H,KAAKgiB,GAAUte,EAAK86H,iBAG5ChkC,WAAY,WAAA,GAGJj7F,GAFAmE,EAAO5G,KACPI,EAAUJ,KAAKI,OAGfqC,GADArC,EAAQqC,UAAuC,gBAApBrC,GAAQqC,SACxBvK,EAAMuK,SAASrC,EAAQqC,UAC1BrC,EAAQqC,SAGLrC,EAAQqC,SAFRvK,EAAMuK,SAAS,KAAOvK,EAAMuL,KAAKrD,EAAQ4rD,cAAe,QAAU,KAAO1jD,cAAc,IAItG1B,EAAK06E,WACDm3B,aAAcvgH,EAAMuK,SAAS,gHAAwH6F,cAAc,IACnKg5H,YAAa7+H,EACbgoF,QAAS,eAAkBs0C,EAAgB,aAGnDvnH,QAAS,WAAA,GAKI7Z,GAJLiJ,EAAO5G,KACP2oB,EAAO/hB,EAAKge,WAAW+D,OACvBlmB,EAAWmE,EAAK06E,UAAUm3B,aAC1B/1G,EAAO,EACX,KAAS/E,EAAM,EAAGA,EAAMgrB,EAAK/wB,OAAQ+F,IACjC+E,GAAQD,GACJ8pC,KAAM5jB,EAAKhrB,GACXioH,EAAGh/G,EAAK06E,UAAUggD,aAG1B16H,GAAK05H,WAAW59H,KAAKA,GACrBkE,EAAK68H,cACL78H,EAAKu5H,iBACLv5H,EAAKy6H,eACLz6H,EAAKo8H,iBACLp8H,EAAKw8H,qBACLx8H,EAAKoB,QAAQ4yH,KAEjByG,aAAc,WAAA,GAGD1jI,GAFLyC,EAAU,GACVuoB,EAAO3oB,KAAK4kB,WAAW+D,MAC3B,KAAShrB,EAAM,EAAGA,EAAMgrB,EAAK/wB,OAAQ+F,IACjCyC,GAAWJ,KAAKumG,QAAQ59E,EAAKhrB,GAAKqC,KAAKI,QAAQ4nD,iBAAmBr/B,EAAKhrB,GAAMgrB,EAAKhrB,GAAKqC,KAAKI,QAAQ4rD,gBAAkBrjC,EAAKhrB,IAAM,EAErIqC,MAAKjI,QAAQ2K,KAAKtC,IAEtBmmG,QAAS,SAAUnK,EAAWD,GAC1B,GAAIr6F,GAAS,SAYb,OAXIs6F,KAAcxlG,IACdwlG,GAAa,GACTA,EAAUl+F,QAAQ,YAClBk+F,EAAYA,EAAUjlG,QAAQ,KAAM,WAExC2K,GAAU,WAAas6F,EAAY,KAEvCt6F,GAAU,aACNq6F,IAAavlG,IACbkL,GAAU5J,EAAMqJ,WAAW46F,IAExBr6F,GAAU,aAErB2hI,YAAa,WAAA,GAKL3oI,GAJA8L,EAAO5G,KACPwmB,EAAQ5f,EAAK4f,QACbmC,EAAO/hB,EAAKge,WAAW+D,OACvB+6G,EAAa/6G,EAAK/wB,MAEtB,KAAKkD,EAAI,EAAGA,EAAI4oI,EAAY5oI,IACxB0rB,EAAMuC,GAAGjuB,GAAGoI,KAAKo7H,EAAUsB,IAAYj3G,EAAK7tB,GAAG8zC,KAAK1rC,KAAK,KAAMylB,EAAK7tB,GAAG8zC,MAG/EysF,YAAa,WAAA,GACLz0H,GAAO5G,KACPm3E,EAAavwE,EAAKxG,QAAQ+2E,WAC1BwsD,EAAoBvuD,EAAW7yE,aAAa40E,EAC5CwsD,GAAkBxtE,UAClBvvD,EAAK7O,QAAQmL,KAAK,uBAAwB,QAE9C0D,EAAKuwE,WAAa,GAAI/B,GAAWxuE,EAAKm0G,eAClCllC,MAAM,EACN1f,SAAUwtE,EAAkBxtE,SAC5BtyD,OAAQg7H,EACRpkG,OAAQz0B,EAAMY,EAAKg9H,UAAWh9H,MAGtCg9H,UAAW,WACP,GAAIh9H,GAAO5G,IACX4G,GAAKo8H,iBACLp8H,EAAKw8H,qBACLx8H,EAAKoB,QAAQyxB,KAEjB8mG,mBAAoB,WAChB,GAAI35H,GAAO5G,IACP4G,GAAKuwE,aACLvwE,EAAKuwE,WAAWrxD,UAChBlf,EAAKuwE,WAAa,OAG1BmpD,SAAU,WACN,MAAOtgI,MAAK3G,QAAQiuB,KAAK63G,IAE7B+D,UAAW,SAAU18G,GACjB,MAAOxmB,MAAKwmB,QAAQ3iB,OAAO2iB,IAE/B25G,eAAgB,WAAA,GAUJ0D,GATJj9H,EAAO5G,KACP8jI,EAAiBl9H,EAAKxG,QAAQqqF,QAC9Bp0B,EAAWytE,EAAeztE,UAAYj0C,GACtC2hH,EAAmB1tE,IAAaglB,GAAS,cAAgB,eACzDulD,EAAQkD,EAAelD,UACvBl/G,EAAW9a,EAAKxG,QAAQshB,QAC5B9a,GAAK45H,kBACL55H,EAAKvN,QAAQsxD,YAAYq1E,GAA6B9oI,KAAKunI,IACvDmC,EAAMhpI,QAAUgpI,EAAMhpI,OAAS,IAC3BisI,EAAiBntI,EAAEkQ,EAAK06E,UAAUmJ,SAASs5C,GAAkBn9H,EAAKm0G,eACtEn0G,EAAK6jF,QAAU,GAAIjC,GAAQq7C,EAAgBnjI,KAAWojI,GAClD3B,QAASv7H,EACT8a,SAAUA,KAEd9a,EAAKvN,QAAQiB,SAASykI,EAAgBR,EAAOloE,KAGrDmqE,gBAAiB,WACb,GAAI55H,GAAO5G,IACP4G,GAAK6jF,UACL7jF,EAAK6jF,QAAQ3kE,UACblf,EAAK6jF,QAAU,OAGvBw3C,gBAAiB,SAAU+B,GAAV,GACTp9H,GAAO5G,KACPikI,EAAUtG,EAAehyH,QAAQ08B,OAAO27F,GAAe7B,QAASv7H,GAChEq9H,KACAA,EAAQC,UACRt9H,EAAKo8H,iBACLp8H,EAAKw8H,uBAGbJ,eAAgB,WACZ,GAAIv4C,GAAUzqF,KAAKyqF,OACfA,IACAA,EAAQ05C,qBAGhBf,mBAAoB,WAAA,GAGZjB,GACArnI,EAHAspI,EAAkB1tI,EAAE,+BACpB2tI,EAAiBD,EAAgBxsI,MAGrC,KAAKkD,EAAI,EAAGA,EAAIupI,EAAgBvpI,IAC5BqnI,EAAUzrI,EAAE0tI,EAAgBtpI,IAAIU,KAAKmjI,GACjCwD,GACAA,EAAQa,mBAKxB9qI,GAAMmpB,GAAG8G,OAAO83G,IACZtC,EAAiB9mI,EAAM6J,QACvBC,KAAM,WACFX,KAAKskI,cAETl8G,SAAU,SAAU47G,EAAaO,GAC7BvkI,KAAKskI,UAAUx8H,MACXk8H,YAAaA,EACbO,YAAaA,KAGrBl8F,OAAQ,SAAU27F,EAAa5jI,GAAvB,GAIA9H,GACA2rI,EACAnpI,EALAwhB,EAAWtc,KAAKskI,UAChB1zC,EAAct0E,EAAS1kB,OACvBsX,EAAO80H,EAAcA,EAAYlnI,cAAgB,EAIrD,KAAKhC,EAAI,EAAGA,EAAI81F,EAAa91F,IAEzB,GADAmpI,EAAU3nH,EAASxhB,GACfmpI,EAAQD,YAAYlnI,gBAAkBoS,EAAM,CAC5C5W,EAAQ2rI,CACR,OAGR,GAAI3rI,EACA,MAAO,IAAIA,GAAMisI,YAAYnkI,MAIzCu9H,EAAehyH,QAAU,GAAIgyH,GACzBC,EAAiB/mI,EAAM6J,QACvBC,KAAM,SAAUP,GACZ,GAAIwG,GAAO5G,IACX4G,GAAKxG,QAAUM,KAAWkG,EAAKxG,QAASA,GACxCwG,EAAKu7H,QAAUv7H,EAAKxG,QAAQ+hI,SAEhC/hI,SAAW+hI,QAAS,MACpBqC,SAAU,WACN,MAAO9tI,GAAEsJ,KAAKmiI,QAAQrtG,WAE1BovG,QAAStjI,EACT6jI,WAAY7jI,IAEZi9H,EAAqBD,EAAel9H,QACpCwjI,QAAS,WAAA,GACDt9H,GAAO5G,KACPmiI,EAAUv7H,EAAKu7H,QACf37G,EAAQ5f,EAAK49H,UACZrC,GAAQn6H,QAAQizH,IACb90G,UAAWg8G,EAAQ5kC,WAAW/2E,GAC9BA,MAAOA,KAEX27G,EAAQj6G,OAAO1B,IAGvBi+G,WAAY,WACR,MAAOzkI,MAAKmiI,QAAQrtG,SAASl9B,OAAS,KAG9C+lI,EAAehyH,QAAQyc,SAAS6yG,GAAQ4C,GACpCC,EAAmBF,EAAel9H,QAClCwjI,QAAS,WACL,GAAIt9H,GAAO5G,IACP4G,GAAK69H,cACL79H,EAAK89H,aAGbD,WAAY7jI,EACZ8jI,UAAW,WAAA,GASHC,GARA/9H,EAAO5G,KACPmiI,EAAUv7H,EAAKu7H,QACf/hI,EAAUwG,EAAKxG,QACfomB,EAAQ5f,EAAK49H,WACbplI,EAASgB,EAAQhB,OACjBwlI,EAAexH,EAAoB52G,GACnCq+G,EAAanuI,EAAE8wB,UAAUhB,EAAMxI,KAAKpX,EAAKk+H,eACzCC,EAAa3kI,EAAQ2kI,UAEzB,KAAK5C,EAAQn6H,QAAQq3H,IACbl5G,UAAWg8G,EAAQ5kC,WAAWsnC,GAC9Br+G,MAAO9vB,EAAEmuI,GACTzlI,OAAQA,IAEZ,KAAOylI,EAAWjtI,OAAS,GAAKgtI,EAAahtI,OAAS,GAClD+sI,EAAYE,EAAWE,KACvB5C,EAAQQ,QAAQgC,EAAWC,EAAaG,KAAgB3lI,IAIpEgB,SACIhB,OAAQ,EACR2lI,WAAY,OAEhBD,aAAc,SAAUE,EAAOC,GAAjB,GACNC,GAAaxuI,EAAEsuI,GAAO7yH,QACtBgzH,EAAazuI,EAAEuuI,GAAO9yH,OAC1B,OAAI+yH,KAAeC,EACR,EAEAD,EAAaC,EAAa,QAIzCpH,EAAqBD,EAAiBp9H,QACtCN,SACIhB,OAAQ0gI,GACRiF,WAAY,SAEhBN,WAAY,WAAA,GACJj+G,GAAQxmB,KAAKwkI,WACbY,EAAahI,EAAoB52G,EACrC,OAAO4+G,GAAWxtI,OAAS,GAAKwtI,EAAW,GAAK,KAGxDzH,EAAehyH,QAAQyc,SAASk3G,GAASvB,GACrCC,EAAuBF,EAAiBp9H,QACxCN,SACIhB,OAAQ2gI,GACRgF,WAAY,OAEhBN,WAAY,WAAA,GACJ79H,GAAO5G,KACPwmB,EAAQ5f,EAAK49H,WACbY,EAAahI,EAAoB52G,EACrC,OAAO4+G,GAAWxtI,OAAS,GAAKlB,EAAE0uI,GAAY91G,OAAO,GAAK1oB,EAAKu7H,QAAQ37G,QAAQ5uB,OAAS,KAGhG+lI,EAAehyH,QAAQyc,SAASm3G,GAAWvB,GACvCC,EAAuBL,EAAel9H,QACtCN,SAAWyD,OAAQg7H,GACnBqF,QAAS,WAAA,GACDt9H,GAAO5G,KACPqlI,EAAgBz+H,EAAK0+H,mBACrB9+G,EAAQ5f,EAAK49H,WAAW3gI,OAAO+C,EAAKxG,QAAQyD,QAC5CsiB,EAAYk/G,EAAgBA,EAAc9nC,WAAW/2E,MACrD++G,EAAqB3+H,EAAK4+H,wBAC1BC,EAAmB7+H,EAAK8+H,oBAAoBl/G;AAC5C++G,GAAsB/+G,EAAM5uB,OAAS,IAChC2tI,EAAmBv9H,QAAQo3H,IACxBj5G,UAAWA,EACXK,MAAOA,KAEX++G,EAAmBjkI,IAAI6kB,GAEtBk/G,EAAcr9H,QAAQizH,IACnB90G,UAAWA,EACXK,MAAOA,MAEX6+G,EAAcn9G,OAAO1B,GACrB5f,EAAK++H,gBAAgBF,MAIjCC,oBAAqB,SAAUl/G,GAAV,GACb5f,GAAO5G,KACP4lI,EAAah/H,EAAKxG,QAAQyD,OAC1BwhI,EAAgBz+H,EAAK0+H,mBACrBO,EAAkBR,EAAgBA,EAAc7+G,QAAQ3iB,OAAO+hI,GAAYt2G,OAAS,KACpFw2G,EAAmBpvI,EAAE8vB,GAAO3iB,OAAOgiI,GAAiBjuI,OAAS,EAC7DmuI,EAAeD,EAAmBpvI,EAAE8vB,GAAOipE,QAAQm2C,GAAY,GAAKlvI,EAAE8vB,GAAOq7G,QAAQ+D,GAAY,EACrG,OAAwB,KAApBlvI,EAAE8vB,GAAO5uB,QAAgBmuI,EAClBA,EAEA,MAGfJ,gBAAiB,SAAUp5F,GACvB,GAAI84F,GAAgBrlI,KAAKslI,kBACrBD,IAAiB94F,IACjB71C,EAAE2uI,EAAcvwG,OAAOp+B,EAAE61C,KACzB84F,EAAcvD,gBAAgBv1F,KAGtC+4F,iBAAkB1kI,EAClB4kI,sBAAuB5kI,IAEvBs9H,EAAyBD,EAAqBv9H,QAC9C+jI,WAAY,WACR,GAAIY,GAAgBrlI,KAAKslI,kBACzB,SAAOD,GAAgBA,EAAcvwG,SAASl9B,OAAS,GAE3D0tI,iBAAkB,WACd,MAAOtlI,MAAKmiI,SAEhBqD,sBAAuB,WACnB,GAAIH,GAAgBrlI,KAAKslI,kBACzB,OAAOD,IAAiBA,EAAcjlI,QAAQ+xE,YAAcz7E,EAAEgoI,EAAO2G,EAAcjlI,QAAQ+xE,aAAa32E,KAAKmjI,GAAiB,MAElI6F,SAAU,WACN,GAAIa,GAAgBrlI,KAAKslI,kBACzB,OAAOD,GAAgB3uI,EAAE2uI,EAAcvwG,UAAYp+B,OAG3DinI,EAAehyH,QAAQyc,SAASo3G,GAAatB,GACzCC,EAA2BF,EAAqBv9H,QAChD+jI,WAAY,WACR,GAAIY,GAAgBrlI,KAAKslI,kBACzB,SAAOD,GAAgBA,EAAcvwG,SAASl9B,OAAS,GAE3D0tI,iBAAkB,WACd,GAAIC,GAAqBvlI,KAAKwlI,uBAC9B,OAAOD,IAAsBA,EAAmBnlI,QAAQ+xE,YAAcz7E,EAAEgoI,EAAO6G,EAAmBnlI,QAAQ+xE,aAAa32E,KAAKmjI,GAAiB,MAEjJ6G,sBAAuB,WACnB,MAAOxlI,MAAKmiI,SAEhBqC,SAAU,WACN,GAAIa,GAAgBrlI,KAAKslI,kBACzB,OAAOD,GAAgB3uI,EAAE2uI,EAAcvwG,UAAYp+B,OAG3DinI,EAAehyH,QAAQyc,SAASq3G,GAAetB,GAC3CC,EAA4BF,EAAuBx9H,QACnD+jI,WAAY,WACR,GAAIY,GAAgBrlI,KAAKslI,kBACzB,SAAOD,GAAgBA,EAAc7+G,QAAQ3iB,OAAOg7H,GAAuBjnI,OAAS,GAExF4sI,SAAU,WACN,GAAIa,GAAgBrlI,KAAKslI,kBACzB,OAAOD,GAAgBA,EAAc7+G,QAAU9vB,KAEnDgvI,oBAAqB9kI,EACrB+kI,gBAAiB/kI,IAErB+8H,EAAehyH,QAAQyc,SAASs3G,GAAiBtB,GAC7CC,EAA8BF,EAAyBz9H,QACvD+jI,WAAY,WACR,GAAIY,GAAgBrlI,KAAKslI,kBACzB,SAAOD,GAAgBA,EAAc7+G,QAAQ3iB,OAAOg7H,GAAuBjnI,OAAS,GAExF4sI,SAAU,WACN,GAAIa,GAAgBrlI,KAAKslI,kBACzB,OAAOD,GAAgBA,EAAc7+G,QAAU9vB,KAEnDgvI,oBAAqB9kI,EACrB+kI,gBAAiB/kI,IAErB+8H,EAAehyH,QAAQyc,SAASu3G,GAAmBtB,GAC/C71C,EAAU3xF,EAAM6J,QAChBC,KAAM,SAAU5I,EAASqI,GACrB,GAAIwG,GAAO5G,IACX4G,GAAK7O,QAAUrB,EAAEqB,GAASuC,SAASykI,GACnCn4H,EAAKxG,QAAUM,KAAWkG,EAAKxG,QAASA,GACxCwG,EAAKu7H,QAAUv7H,EAAKxG,QAAQ+hI,QAC5Bv7H,EAAKo/H,iBACLp/H,EAAKq/H,eACLr/H,EAAKu9H,oBACLv9H,EAAKs/H,wBAETpgH,QAAS,WACL,GAAIlf,GAAO5G,IACX4G,GAAKu/H,uBACLjuI,EAAM4tB,QAAQlf,EAAK7O,SACnB6O,EAAK7O,QAAQmwB,SACbthB,EAAK7O,QAAU,MAEnBqI,SACIi2D,SAAUj0C,GACVw+G,UAEJoF,eAAgB,WACZhmI,KAAKshF,WAAcwM,KAAM/L,EAAc,uMAE3CkkD,aAAc,WAAA,GAMNn4C,GACAhzF,EANA8L,EAAO5G,KACP4gI,EAAQh6H,EAAKxG,QAAQwgI,MACrBwF,EAAcxF,EAAMhpI,OACpByuI,EAAgBz/H,EAAKxG,QAAQshB,SAASk/G,MACtC0F,EAAW1/H,EAAK2/H,iBAGpB,KAAKzrI,EAAI,EAAGA,EAAIsrI,EAAatrI,IACzBgzF,EAAOptF,KAAW8nF,EAAQg+C,aAAa5F,EAAM9lI,KAAOs6B,KAAMixG,EAAczF,EAAM9lI,MAC1EgzF,GACAw4C,EAASxiF,OAAOptD,EAAEkQ,EAAK06E,UAAUwM,KAAKA,IAG9ClnF,GAAK7O,QAAQ+rD,OAAOwiF,IAExBC,gBAAiB,WACb,MAAO7vI,GAAE,2BAEbwvI,qBAAsB,WAClB,GAAIt/H,GAAO5G,IACX4G,GAAK7O,QAAQ2N,GAAG2xE,EAAO2nD,EAAeh5H,EAAMY,EAAK6/H,aAAc7/H,KAEnEu/H,qBAAsB,WAClBnmI,KAAKjI,QAAQ6xB,IAAIi1C,GAAIv3C,KAAK,KAAKsC,IAAIi1C,IAEvC4nE,aAAc,SAAUx+H,GACpBA,EAAE9D,iBACFnE,KAAK0mI,oBAAoBhwI,EAAEuR,EAAE22B,eAAepjC,KAAKqkI,MAErD6G,oBAAqB,SAAUzC,GAAV,GACbr9H,GAAO5G,KACPmiI,EAAUv7H,EAAKu7H,OACfA,IACAA,EAAQF,gBAAgBgC,IAGhCE,kBAAmB,WAAA,GAIXrpI,GAHA8L,EAAO5G,KACP4gI,EAAQh6H,EAAKxG,QAAQwgI,MACrBwF,EAAcxF,EAAMhpI,MAExB,KAAKkD,EAAI,EAAGA,EAAIsrI,EAAatrI,IACzB8L,EAAK+/H,iBAAiB/F,EAAM9lI,KAGpC6rI,iBAAkB,SAAUC,GAAV,GACVhgI,GAAO5G,KACPikI,EAAUtG,EAAehyH,QAAQ08B,OAAOu+F,GAAYzE,QAASv7H,EAAKu7H,UAClE0E,EAAcjgI,EAAK7O,QAAQuvB,KAAK,kBAAqBs/G,EAAW,MAAO,EACvEC,IAAe5C,GAAWA,EAAQQ,aAC9BR,EAAQQ,aACR/tI,EAAEmwI,GAAal8E,YAAYi0E,GAE3BloI,EAAEmwI,GAAavsI,SAASskI,OAKxCp2C,EAAQg+C,cACJt+G,QACI+7G,QAAShJ,GACT6L,UAAW,SAEfjG,QACIoD,QAAS3E,GACTwH,UAAW,mBAEfhG,UACImD,QAAS1E,GACTuH,UAAW,qBAEf/F,YACIkD,QAASzE,GACTsH,UAAW,sBAEf9F,cACIiD,QAASxE,GACTqH,UAAW,qBAEf7F,eACIgD,QAASvE,GACToH,UAAW,6BAEf5F,iBACI+C,QAAStE,GACTmH,UAAW,6BAGnBpmI,EAAOu/H,IAAWz3C,QAASA,KAC7B7xF,OAAOuB,MAAM2sB,QACRluB,OAAOuB,OACE,kBAAVzB,SAAwBA,OAAOgiC,IAAMhiC,OAAS,SAAUiiC,EAAIC,EAAIC,IACrEA,GAAMD,OAEV,SAAUniC,EAAGC,QACVA,OAAO,uBAAwB,cAAeD,IAChD,WAmfE,MA3eC,UAAUE,EAAGE,GAqBV,QAASqL,GAAGiN,GACR,MAAOA,GAAO2vD,EAGlB,QAASkoE,GAAgBC,EAAMC,GAE3B,IADA,GAAInsI,GAAI,EACDA,EAAImsI,EAAKrvI,QACRovI,EAAKlsI,KAAOmsI,EAAKnsI,IAGrBA,GAEJ,OAAOA,GAjCd,GACOioC,GAASpsC,OACTqb,EAAM+wB,EAAOnkC,KAAKoT,IAClB9Z,EAAQ6qC,EAAO7qC,MACf+7B,EAAQ/7B,EAAM+7B,MACdtS,EAAOzpB,EAAMypB,KACbN,EAAKnpB,EAAMmpB,GACXrc,EAASqc,EAAGrc,OACZ65D,EAAK,sBACL74D,EAAQtP,EAAEsP,MACV0jB,EAAa/yB,OAAO+yB,WACpBkgF,EAAgB,mBAChBE,EAAe,kBACfryB,EAAW,WACXsyB,EAAW,WACXtwE,EAAS,SACTytG,EAAU,UACVhiE,EAAO,OACPgU,EAAU,UACViuD,EAAQ,QACRtR,EAAQ,QAIRlsB,EAAmB1nG,EAAG/J,EAAMC,QAAQqlB,oBAAsB,iBAAmBq4G,GAW7EuR,EAAgBpiI,EAAOtE,QACvBC,KAAM,SAAU5I,EAASqI,GAAnB,GAEEu4H,GA6BAr1H,EA9BAsD,EAAO5G,IAEXgF,GAAOf,GAAGtD,KAAKwH,KAAKvB,EAAM7O,EAASqI,GACnCwG,EAAKygI,OAAS3wI,EAAEgK,UAAWkG,EAAKimB,MAAOjmB,EAAKxG,QAAQysB,OACpD90B,EAAU6O,EAAK7O,QACf4gI,EAAa5gI,EAAQ,GACrB6O,EAAK+nG,WACL/nG,EAAK0gI,YACL1gI,EAAKyvF,QACLzvF,EAAK7O,QAAQuC,SAAS,aAAa4I,KAAK,eAAgB,OAAOwC,GAAG,QAAUm5D,EAAI,WAC5E,GAAIjhE,GAAQ+6H,EAAW/6H,KAClBA,GAGDgJ,EAAK2gI,eAAc,GAFnB5O,EAAW/6H,MAAQgJ,EAAK+uF,KAAO/uF,EAAK4gI,WAIxC5gI,EAAKikG,UAAYjtG,EACjBgJ,EAAK6gI,WAAa/9G,EAAW,WACzBuK,EAAMl8B,EAAS,EAAG6F,EAAQgJ,EAAK8gI,YAAc,OAElDhiI,GAAG,WAAam5D,EAAI,WACnB,GAAIjhE,GAAQ7F,EAAQ+0C,KACpBliB,cAAahkB,EAAK6gI,YAClB9O,EAAW/6H,MAAQgJ,EAAK+uF,KAAO,GAC3B/3F,IAAUgJ,EAAK4gI,aACf7O,EAAW/6H,MAAQgJ,EAAK+uF,KAAO/3F,GAEnCgJ,EAAK23C,UACL33C,EAAK2gI,kBAELjkI,EAAWvL,EAAQgC,GAAG,eAAiBrD,EAAEkQ,EAAK7O,SAAS4L,QAAQ,YAAY5J,GAAG,aAC9EuJ,EACAsD,EAAK6Y,QAAO,GAEZ7Y,EAAKgkD,SAAS7yD,EAAQgC,GAAG,eAE7B6M,EAAKhJ,MAAMgJ,EAAKxG,QAAQxC,OAAS7F,EAAQ+0C,OACzClmC,EAAK2wH,gBAAkB7gI,EAAE,4CAA8CorE,YAAY/pE,GACnFG,EAAM0uB,OAAOhgB,IAEjBxG,SACI8O,KAAM,gBACNy4H,iBAAiB,EACjBC,cAAc,EACdC,WAAY,IACZr8H,QAAS,GACTqhB,SACAjvB,MAAO,GACPmqB,KAAM,IAEVrgB,QAAS+xB,GACT5M,OACIi7G,EAAK,KACLC,EAAK,QACLC,IAAK,cACLC,EAAK,WACLC,IAAK,cACLC,IAAK,KACLC,EAAK,IACLC,EAAK,cACLzlI,EAAK,kBAETyiB,WAAY,SAAUjlB,GAClB,GAAIwG,GAAO5G,IACXgF,GAAOf,GAAGohB,WAAWld,KAAKvB,EAAMxG,GAChCwG,EAAKygI,OAAS3wI,EAAEgK,UAAWkG,EAAKimB,MAAOjmB,EAAKxG,QAAQysB,OACpDjmB,EAAK0gI,YACLtnI,KAAKuqG,eACLvqG,KAAKwqG,aACL5jG,EAAKhJ,MAAMgJ,EAAK7O,QAAQ+0C,QAE5BhnB,QAAS,WACL,GAAIlf,GAAO5G,IACX4G,GAAK7O,QAAQ6xB,IAAIi1C,GACbj4D,EAAK8jG,eACL9jG,EAAK8jG,aAAa9gF,IAAI,QAAShjB,EAAK0vF,eACpC1vF,EAAK8jG,aAAa9gF,IAAI,SAAUhjB,EAAK0hI,iBAEzCtjI,EAAOf,GAAG6hB,QAAQ3d,KAAKvB,IAE3B0jC,IAAK,WACD,GAAIi+F,GAAWvoI,KAAKwoI,QAAQxoI,KAAKjI,QAAQ+0C,MAAO,EAChD,OAAOy7F,GAASpxI,QAAY4E,OAAOiE,KAAKI,QAAQynI,WAAY,KAAM,KAEtEjqI,MAAO,SAAUA,GAAV,GACC7F,GAAUiI,KAAKjI,QACf0wI,EAAYzoI,KAAKwnI,UACrB,OAAI5pI,KAAUhH,EACHoJ,KAAKjI,QAAQ+0C,OAEV,OAAVlvC,IACAA,EAAQ,IAEP6qI,GAKL7qI,EAAQoC,KAAKwoI,QAAQ5qI,EAAQ,IAC7B7F,EAAQ+0C,IAAIlvC,EAAQ6qI,EAAY,IAChCzoI,KAAK0oI,MAAM,EAAG1oI,KAAK0nI,YAAa9pI,GAChCoC,KAAK2oI,eAAiB,KACtB/qI,EAAQ7F,EAAQ+0C,MAChB9sC,KAAK6qG,UAAYjtG,EACb1F,EAAMqa,mBAAqBxa,IACvB6F,IAAU6qI,EACV1wI,EAAQ+0C,IAAI,IAEZ9sC,KAAKunI,iBAVb3pI,IAJIoC,KAAK6qG,UAAYjtG,EACjB7F,EAAQ+0C,IAAIlvC,GACZ,KAgBR2pI,cAAe,SAAUvtI,GAAV,GACP2+H,GAAa34H,KAAKjI,QAAQ,GAC1B6F,EAAQ+6H,EAAW/6H,KACnBoC,MAAKI,QAAQunI,kBAIT/pI,EAHC5D,EAGOgG,KAAK6qG,UAFLjtG,EAAMzG,QAAY4E,OAAOiE,KAAKI,QAAQynI,WAAY,KAAM,KAIpElP,EAAW/6H,MAAQoC,KAAK21F,KAAO/3F,IAGvCgtD,SAAU,SAAUA,GAChB5qD,KAAKizF,WACDroC,SAAUA,IAAah0D,GAAmBg0D,EAC1CrrC,SAAS,KAGjBE,OAAQ,SAAUA,GACdzf,KAAKizF,WACDroC,UAAU,EACVrrC,UAAWE,EAASA,IAAW7oB,GAAmB6oB,MAG1D+qF,WAAY,WAAA,GAQI/vG,GAEIiN,EATZd,EAAO5G,IACP4G,GAAK8gI,cACD9gI,EAAKxG,QAAQuzF,UACb/sF,EAAK7O,QAAQ6xB,IAAIisG,GAErBjvH,EAAK7O,QAAQ2N,GAAGzD,EAAGi3E,GAAUlzE,EAAMY,EAAKqxE,SAAUrxE,IAAOlB,GAAGzD,EAAGijE,GAAOl/D,EAAMY,EAAK2hE,MAAO3hE,IAAOlB,GAAGzD,EAAGw3B,GAASzzB,EAAMY,EAAKgiI,aAAchiI,IAAOlB,GAAGikG,EAAkB3jG,EAAMY,EAAKiiI,cAAejiI,IACzL1O,EAAMC,QAAQoB,QAAQgB,OAClBE,EAAUvC,EAAMC,QAAQoB,QAAQkB,QAChCA,EAAU,GAAKA,EAAU,KACrBiN,GACAzF,EAAGilI,GACHjlI,EAAGijE,GACHjjE,EAAGi3E,GACHj3E,EAAGklI,IACLjwI,KAAK,KACP0P,EAAK7O,QAAQ2N,GAAGgC,EAAQ1B,EAAMY,EAAKkiI,sBAAuBliI,QAK1E2jG,aAAc,WACV,GAAI7iG,IACAiiG,EACA1nG,EAAGi3E,GACHj3E,EAAGilI,GACHjlI,EAAGijE,GACHjjE,EAAGklI,IACLjwI,KAAK,IACP8I,MAAKjI,QAAQ6xB,IAAIliB,IAErBurF,UAAW,SAAU7yF,GAAV,GACHwG,GAAO5G,KACPjI,EAAU6O,EAAK7O,QACfsB,EAAUuN,EAAKvN,QACfkmB,EAAUnf,EAAQmf,QAClBqrC,EAAWxqD,EAAQwqD,QACvBhkD,GAAK2jG,eACA3/C,GAAarrC,GAKdxnB,EAAQmL,KAAKu0E,EAAUl4D,GAASrc,KAAK6mG,EAAUn/C,GAC/CvxD,EAAQ+H,YAAYwoG,EAAerqF,KALnCxnB,EAAQqtB,WAAWqyD,GAAUryD,WAAW2kF,GACxC1wG,EAAQsxD,YAAYi/C,GACpBhjG,EAAK4jG,eAMbjsD,QAAS,WAAA,GACD33C,GAAO5G,KACPpC,EAAQgJ,EAAKhJ,OACbA,KAAUgJ,EAAKikG,WACfjkG,EAAKikG,UAAYjtG,EACjBgJ,EAAKoB,QAAQyxB,GACb7yB,EAAK7O,QAAQiQ,QAAQyxB,IACJ,KAAV77B,GAAgBgJ,EAAKmiI,YAC5BniI,EAAK7O,QAAQiQ,QAAQyxB,IAG7BuvG,YAAa,SAAUC,GAAV,GAeLC,GACArtE,EAEAq+C,EACAivB,EACAZ,EAnBA3hI,EAAO5G,KACPwsD,EAAM5lD,EAAK+uF,KACX59F,EAAU6O,EAAK7O,QAAQ,GACvB6F,EAAQ7F,EAAQ6F,MAChB62B,EAAYR,EAAMl8B,GAClBq6E,EAAS39C,EAAU,GACnB20G,EAAaxrI,EAAMhG,OAAS40D,EAAI50D,OAChC0pB,EAASppB,EAAMC,QAAQgf,QACvBvQ,GAAKyiI,YAAcD,EAAa,IAGhCA,QAAqB9nH,EAAO1H,SAA8B,WAAnB0H,EAAO/nB,UAC9C0vI,GAAW,GAEXC,EAAel3H,EAAIogE,EAAQ20D,EAAgBnpI,EAAO4uD,IAClDqP,EAAUj+D,EAAMrG,UAAU2xI,EAAc92D,GAC5Cr6E,EAAQ6F,MAAQA,EAAMrG,UAAU,EAAG2xI,GAAgBtiI,EAAK4gI,WAAWjwI,UAAU2xI,GACzEhvB,EAAWtzG,EAAK8hI,MAAMQ,EAAc92D,EAAQvW,GAC5CstE,EAAaviI,EAAK0iI,sBAAsB1rI,EAAMrG,UAAU66E,GAASpgE,EAAIo3H,EAAYlvB,EAAWgvB,IAC5FX,EAAW3hI,EAAK4hI,QAAQW,EAAY38E,EAAI50D,OAASuxI,EAAWvxI,QAChEgP,EAAK8hI,MAAMxuB,EAAUA,EAAUquB,GAC3BU,IACA/uB,EAAWtzG,EAAK2iI,uBAAuBL,IAE3Cj1G,EAAMl8B,EAASmiH,GACftzG,EAAKyiI,YAAa,IAEtBC,sBAAuB,SAAUztE,EAASnoD,GAEtC,IADA,GAAIm0H,GAAa7nI,KAAKI,QAAQynI,WACvBn0H,KAAU,GAAqC,IAAhCmoD,EAAQ39D,QAAQ2pI,IAClChsE,EAAUA,EAAQtkE,UAAU,EAEhC,OAAOskE,IAEX0tE,uBAAwB,SAAU1qD,GAC9B,GAAIu4B,GAAap3G,KAAKukD,MAAMs6B,GAAK,EAIjC,OAHIu4B,GAAav4B,IACbu4B,GAAc,GAEXA,GAEXyxB,cAAe,WACP3wI,EAAMqa,mBAAqBvS,KAAKjI,QAAQ,IAG5CiI,KAAKgpI,YAAYhpI,KAAKwpI,aAE1BV,sBAAuB,SAAU7gI,GAAV,GACfrB,GAAO5G,KACPF,EAAQ8G,EAAK7O,QAAQ,GACrB6F,EAAQkC,EAAMlC,MACdsB,EAAO+I,EAAE/I,IACb0H,GAAK6iI,UAAqB,UAATvqI,EACjBwqB,EAAW,WACM,YAATxqB,GAAsB0H,EAAK6iI,WAG3B3pI,EAAMlC,QAAUA,GAChBgJ,EAAKoiI,YAAYpiI,EAAK4iI,eAIlCZ,aAAc,WACV,GAAIhiI,GAAO5G,IACX4G,GAAKmiI,YAAa,EAClBr/G,EAAW,WACP9iB,EAAKmiI,YAAa,KAG1B1yC,MAAO,WAAA,GACCzvF,GAAO5G,KACPjI,EAAU6O,EAAK7O,QACfukG,EAASvkG,EAAQmL,KAAK,QACtB+yB,EAAOqmE,EAAS5lG,EAAE,IAAM4lG,GAAUvkG,EAAQkgB,QAAQ,OAClDge,GAAK,KACLrvB,EAAK0vF,cAAgB,WACjB5sE,EAAW,WACP9iB,EAAKhJ,MAAM7F,EAAQ,GAAG6F,UAG9BgJ,EAAK0hI,eAAiB,WAClB1hI,EAAK7O,QAAQ,GAAG6F,MAAQgJ,EAAK+uF,KAAO/uF,EAAK0jC,OAEzC1jC,EAAKxG,QAAQwnI,cACb3xG,EAAKvwB,GAAG,SAAUkB,EAAK0hI,gBAE3B1hI,EAAK8jG,aAAez0E,EAAKvwB,GAAG,QAASkB,EAAK0vF,iBAGlDre,SAAU,SAAUhwE,GAChB,GAAIlJ,GAAMkJ,EAAEmuB,OACZp2B,MAAKwpI,WAAazqI,IAAQ4iB,EAAKG,UAC3B/iB,IAAQ4iB,EAAKK,OACbhiB,KAAKu+C,WAGbgqB,MAAO,WACHvoE,KAAKqpI,YAAa,GAEtB9kF,MAAO,SAAU5mD,EAAKsrI,GAAf,GACCrrI,GAAQoC,KAAKjI,QAAQ+0C,OAAS9sC,KAAKwnI,WACnCrzE,EAAO,CAIX,KAHI80E,KAAa,IACb90E,MAEGx2D,MAAYA,GAAOqC,KAAK0nI,aAAa,CACxC,GAAI9pI,EAAMvG,OAAOsG,KAASqC,KAAK61B,OAAOl4B,GAClC,MAAOA,EAEXA,IAAOw2D,EAEX,UAEJu0E,MAAO,SAAUz5H,EAAOtX,EAAKiG,EAAOqrI,GAA7B,GAICn9E,GAEAy8E,EACAmB,EACA/rI,EAPA5F,EAAUiI,KAAKjI,QAAQ,GACvB4T,EAAU5T,EAAQ6F,OAASoC,KAAKwnI,WAChC13F,EAAQ9vC,KAAKI,QAAQynI,WAErB8B,EAAS,CAiBb,KAbA16H,EAAQjP,KAAKukD,MAAMt1C,EAAOg6H,GACtBh6H,EAAQtX,IACRA,EAAMsX,GAEVs5H,EAAWvoI,KAAKwoI,QAAQ78H,EAAQpU,UAAUI,GAAMA,GAChDiG,EAAQoC,KAAKwoI,QAAQ5qI,EAAOqR,GAC5B68C,EAAcluD,EAAMhG,OAChBgG,IACA2qI,EAAWA,EAASpxI,QAAY4E,OAAO,QAAU+vD,EAAc,KAAM,KAEzEluD,GAAS2qI,EACT58H,EAAUA,EAAQ1U,MAAM,IACxByyI,EAAM9rI,EAAMvG,OAAOsyI,GACZ16H,EAAQjP,KAAK0nI,aAChB/7H,EAAQsD,GAASy6H,GAAO55F,EACxB45F,EAAM9rI,EAAMvG,SAASsyI,GACjBhsI,IAAQ/G,GAAa+yI,EAAS79E,IAC9BnuD,EAAMsR,GAEVA,EAAQjP,KAAKukD,MAAMt1C,EAAQ,EAS/B,OAPAlX,GAAQ6F,MAAQoC,KAAK21F,KAAOhqF,EAAQzU,KAAK,IACrCgB,EAAMqa,mBAAqBxa,IACvB4F,IAAQ/G,IACR+G,EAAMqC,KAAK0nI,aAEfzzG,EAAMl8B,EAAS4F,IAEZA,GAEX6qI,QAAS,SAAU5qI,EAAOD,GAAjB,GAQD+rI,GACAthF,EACAuhF,EACAC,EACA95F,EACAgc,EACA+9E,EACA7qI,CAdJ,KAAKpB,EACD,MAAO,EAEX,IAAIoC,KAAK2oI,iBAAmB/qI,EACxB,MAAOoC,MAAK2oI,cAWhB,KATA/qI,GAASA,EAAQ,IAAI3G,MAAM,IAGvB0yI,EAAS,EACTC,EAAWjsI,GAAO,EAClBmyC,EAAQ9vC,KAAKI,QAAQynI,WACrB/7E,EAAcluD,EAAMhG,OACpBiyI,EAAe7pI,KAAK61B,OAAOj+B,OAC3BoH,EAAS,GACN4qI,EAAWC,IACdH,EAAM9rI,EAAM+rI,GACZvhF,EAAQpoD,KAAK61B,OAAO+zG,GAChBF,IAAQthF,GAASshF,IAAQ55F,GACzB9wC,GAAU0qI,IAAQ55F,EAAQA,EAAQ,GAClC65F,GAAU,EACVC,GAAY,GACY,gBAAVxhF,IACVA,GAASA,EAAMluD,MAAQkuD,EAAMluD,KAAKwvI,IAAQhzI,EAAEwF,WAAWksD,IAAUA,EAAMshF,IACvE1qI,GAAU0qI,EACVE,GAAY,GAEQ,IAAhB99E,GACA9rD,KAAK8pI,qBAGbH,GAAU,GAEVC,GAAY,IAEZD,GAAU79E,MAKlB,MADA9rD,MAAK2oI,eAAiB3pI,EACfA,GAEX2vG,SAAU,WAAA,GACF/nG,GAAO5G,KACPjI,EAAU6O,EAAK7O,QACf4gI,EAAa5gI,EAAQ,GACrBsB,EAAUtB,EAAQe,KAAK,kDAAoDc,QAC/EP,GAAQ,GAAGS,MAAM6d,QAAUghH,EAAW7+H,MAAM6d,QAC5CghH,EAAW7+H,MAAMb,MAAQ,OACzB2N,EAAKvN,QAAUA,EAAQiB,SAASq+H,EAAW16H,YAE/C6rI,mBAAoB,WAChB,GAAIljI,GAAO5G,IACX4G,GAAKvN,QAAQiB,SAASwvG,GACtBl/E,aAAahkB,EAAKmjI,sBAClBnjI,EAAKmjI,qBAAuBrgH,EAAW1jB,EAAMY,EAAKixH,oBAAqBjxH,GAAO,MAElFixH,oBAAqB,WACjB,GAAIjxH,GAAO5G,IACX4G,GAAKvN,QAAQsxD,YAAYm/C,GACzBljG,EAAKmjI,qBAAuB,MAEhCzC,UAAW,WAaP,IAbO,GAOHoC,GACAt9G,EAsBatxB,EAAOurH,EA7BpBxwF,KACA+zG,EAAW,EACX7hH,EAAO/nB,KAAKI,QAAQ2nB,MAAQ,GAC5BiiH,EAAYjiH,EAAK9wB,MAAM,IACvBW,EAASoyI,EAAUpyI,OACnB+F,EAAM,EAGN8qI,EAAY,GACZZ,EAAa7nI,KAAKI,QAAQynI,WAC1Bp8H,EAAevT,EAAMwT,WAAW1L,KAAKI,QAAQoL,SAASC,aACtDohB,EAAQ7sB,KAAKqnI,OACV1pI,EAAM/F,EAAQ+F,IAGjB,GAFA+rI,EAAMM,EAAUrsI,GAChByuB,EAAOS,EAAM68G,GAET7zG,EAAO+zG,GAAYx9G,EACnBq8G,GAAaZ,EACb+B,GAAY,MAWZ,KATY,MAARF,GAAuB,MAARA,EACfA,EAAMj+H,EAAai+H,GACJ,MAARA,EACPA,EAAMj+H,EAAa6D,SAASlC,OACb,OAARs8H,IACP/rI,GAAO,EACP+rI,EAAMM,EAAUrsI,IAEpB+rI,EAAMA,EAAIzyI,MAAM,IACP6D,EAAI,EAAGurH,EAAIqjB,EAAI9xI,OAAQkD,EAAIurH,EAAGvrH,IACnC+6B,EAAO+zG,GAAYF,EAAI5uI,GACvB2tI,GAAaiB,EAAI5uI,GACjB8uI,GAAY,CAIxB5pI,MAAK61B,OAASA,EACd71B,KAAKwnI,WAAaiB,EAClBzoI,KAAK0nI,YAAce,EAAU7wI,SAGrCypB,GAAG8G,OAAOi/G,IACZzwI,OAAOuB,MAAM2sB,QACRluB,OAAOuB,OACE,kBAAVzB,SAAwBA,OAAOgiC,IAAMhiC,OAAS,SAAUiiC,EAAIC,EAAIC,IACrEA,GAAMD,OAEV,SAAUniC,EAAGC,QACVA,OAAO,cAAe,eAAgBD,IACxC,WAuvDE,MA/uDC,UAAUE,EAAGE,GA+GV,QAASqzI,GAAmBrkG,EAAWtM,GAEnC,MADAsM,GAAYA,EAAU3uC,MAAM,MAAMqiC,EAAO,IAAMsM,EACxCA,EAAUzuC,QAAQ,MAAO,MAAMA,QAAQ,SAAU,QAE5D,QAAS+yI,GAAetkG,EAAWtM,EAAMj7B,GACrCunC,EAAYA,EAAU3uC,MAAM,MAAMqiC,EAAO,IAAMsM,CAC/C,IAAIu4C,IACI3mB,QACI,SACAn5D,EAAQ,QAAU,QAEtBg4D,UACI,MACAh4D,EAAQ,QAAU,SAEvB21D,EAAa,aAAa95D,KAAK0rC,EAatC,OAZIouB,IACAmqB,EAAO3mB,QACH,MACA5xB,GAEJu4C,EAAO9nB,SAAS,GAAKn+D,EAAM0M,WAAWghC,GAAWtlC,UAEjD69E,EAAO3mB,OAAO,GAAK5xB,EACnBu4C,EAAO9nB,SAAS,GAAKn+D,EAAM0M,WAAWghC,GAAWtlC,SAErD69E,EAAO3mB,OAAS2mB,EAAO3mB,OAAOtgE,KAAK,KACnCinF,EAAO9nB,SAAW8nB,EAAO9nB,SAASn/D,KAAK,KAChCinF,EAEX,QAASr7E,GAASlJ,EAAQ23B,GACtB,IACI,MAAO76B,GAAEoM,SAASlJ,EAAQ23B,GAC5B,MAAOtpB,GACL,OAAO,GAGf,QAASkiI,GAAkB59F,GACvBA,EAAO71C,EAAE61C,GACTA,EAAKjyC,SAAS,UAAUK,SAASyvI,GAAK9vI,SAAS+vI,GAC/C99F,EAAK5xC,SAAS,KAAKL,SAASgwI,GAAM3vI,SAASyvI,GAAK9vI,SAAS+vI,GACzD99F,EAAK1oC,OAAO,oBAAoBvJ,SAASiwI,IACzCh+F,EAAK1oC,OAAO,gBAAgBisC,QAAQgU,OAAO,UAC3CvX,EAAK1oC,OAAO,gBAAgBvJ,SAASo9E,IAAetyD,WAAW,YAAYliB,KAAK,iBAAiB,GAC5FqpC,EAAK1oC,OAAO,UAAUjM,QACvB20C,EAAKrpC,KAAK,OAAQ,YAEjBqpC,EAAK5xC,SAAS,IAAM2vI,GAAM1yI,QAC3B20C,EAAKuwB,WAAWj5D,OAAO,WACnB,QAAQ7D,KAAKqD,SAAS/K,MAAMkyI,IAA2C,GAAjBxqI,KAAKknB,WAAkBxwB,EAAEu7B,KAAKjyB,KAAKmyB,cAC1F0gB,QAAQ,gBAAmBy3F,EAAO,OAEzCG,EAAYl+F,GACZm+F,EAAgBn+F,GAEpB,QAASk+F,GAAYl+F,GACjBA,EAAO71C,EAAE61C,GACTA,EAAKjlB,KAAK,iDAAiDY,SAC3DqkB,EAAK1oC,OAAO,uBAAuBlJ,SAAS,wDAAwD+C,KAAK,WACrG,GAAI6uC,GAAO71C,EAAEsJ,MAAO2qI,EAAgBC,EAAiBr+F,EACrDA,GAAKuX,OAAO,uBAA0B6mF,EAAgB,SAG9D,QAASC,GAAiBr+F,GACtB,GAAIo+F,GAAe/wI,EAAS2yC,EAAK3yC,SAASA,SAAUyE,EAAQnG,EAAMC,QAAQkG,MAAMzE,EAUhF,OARI+wI,GADA/wI,EAAOC,SAASgxI,EAAO,eACP,qBAEZxsI,EACgB,qBAEA,sBAK5B,QAASqsI,GAAgBn+F,GACrBA,EAAO71C,EAAE61C,GACTA,EAAK1oC,OAAO,8BAA8B8mD,YAAYmuB,GACtDvsC,EAAK1oC,OAAO,4BAA4B8mD,YAAYsuB,GACpD1sC,EAAK1oC,OAAO,gBAAgBvJ,SAASw+E,GACrCvsC,EAAK1oC,OAAO,eAAevJ,SAAS2+E,GAExC,QAAS6xD,GAA4B/yI,EAASqI,GAC1C,GAAI2qI,GAAgBC,EAA0B5qI,EAC1C2qI,IACAE,EAAYlzI,EAASgzI,GAErB3qI,EAAQomB,OACR9vB,EAAEqB,GAAS4C,SAAS,MAAMA,SAAS,MAAM+C,KAAK,SAAU5C,GACpDgwI,EAA4B9qI,KAAMI,EAAQomB,MAAM1rB,MAI5D,QAASmwI,GAAYlzI,EAASgzI,GAC1Br0I,EAAEqB,GAAS4C,SAAS,WAAWa,MAAOuvI,cAAeA,IAEzD,QAASC,GAA0B5qI,GAC/B,GAAI2qI,GAAgB3qI,EAAQ00B,OAAQ54B,EAAahE,EAAMgE,UACvD,OAAI6uI,IAAiB7uI,EAAW6uI,GACrBA,EAEJ,KAEX,QAASG,GAAoBrnH,GACzB,MAAOA,GAAK,wBAA2BA,EAAK,KAAQ,uBAExD,QAASsnH,GAAmBtnH,GACxB,MAAOA,GAAK,kBAAqBA,EAAK,KAAQ,iBAElD,QAASunH,GAAeC,EAAcC,GAAtC,GACQC,GAAmBF,EAAa/jH,KAAK4jH,KACrClsI,IAcJ,OAbAusI,GAAiB7tI,KAAK,SAAU5C,EAAG0wI,GAAb,GAEdC,GACA5tD,CACJ,KAHA2tD,EAAS90I,EAAE80I,GACPC,EAAUD,EAAOhwI,KAAKkwI,IACtB7tD,EAAQwtD,EACLI,GACH5tD,EAAQytD,EAAgBhkH,KAAK6jH,EAAmBM,GAAW,YACvD5tD,EAAMjmF,QACNoH,EAAO8I,KAAK+1E,GAEhB2tD,EAAS3tD,EAAMv2D,KAAK4jH,KACpBO,EAAUD,EAAOhwI,KAAKkwI,MAGvB1sI,EAEX,QAAS2sI,GAAgBl/C,EAAc6+C,GACnC,GAAIG,GAAUh/C,EAAajxF,KAAKowI,GAChC,OAAOH,GAAUH,EAAgBhkH,KAAK4jH,EAAoBO,IAAY/0I,MAE1E,QAASm1I,GAAUt/F,EAAM++F,GACrB,GAAIG,GAAUl/F,EAAK/wC,KAAKkwI,GACxB,OAAOD,GAAUH,EAAgB3wI,SAASmxI,IAA4BnxI,SAASwwI,EAAmBM,IAAY/0I,MAElH,QAASq1I,GAAoBpgI,EAAS2/H,GAAtC,GAUQh8G,GAEIm9D,EAXJ9oF,KACAqoI,EAAa,SAAUz/F,GACvB,KAAOA,EAAK/tB,aAAe8sH,EAAgBvxI,GAAGwyC,EAAK/tB,aAC/C7a,EAAQmE,KAAKykC,EAAK/tB,YAClB+tB,EAAOA,EAAK/tB,YAGhB41C,EAAOzoD,EAAQ,IAAMA,CAGzB,KAFAqgI,EAAW53E,GACP9kC,EAAO3rB,EAAQA,EAAQ/L,OAAS,GAC7BlB,EAAE44B,GAAMv1B,GAAG+xI,MACVr/C,EAAe/1F,EAAE44B,GAAM30B,SAAS,MACpCy5D,EAAOu3E,EAAgBl/C,EAAc6+C,GAAiB,KAItD3nI,EAAQmE,KAAKssD,GACb43E,EAAW53E,GACX9kC,EAAO3rB,EAAQA,EAAQ/L,OAAS,EAEpC,OAAO+L,GAEX,QAASsoI,GAAgBhkI,GACrB,GAAIorB,GAAQ,CAQZ,OAPIprB,GAAEsrB,aACFF,GAASprB,EAAEsrB,WAAa,IACxBF,EAAQA,EAAQ,EAAIz0B,KAAK2iD,KAAKluB,GAASz0B,KAAKpE,MAAM64B,IAElDprB,EAAEurB,SACFH,EAAQz0B,KAAK6Q,MAAMxH,EAAEurB,OAAS,IAE3BH,EAEX,QAAS64G,GAAcvgI,EAASwgI,GAG5B,IAHJ,GACQnuC,GAAS,EACTpkG,EAAS+R,EAAQ6S,WACd5kB,IAAW6b,MAAM7b,EAAOuyI,KAC3BnuC,GAAUpkG,EAAOuyI,GACjBvyI,EAASA,EAAO4kB,UAEpB,OAAOw/E,GAEX,QAASouC,GAAenkI,GACpB,MAAOokI,KAAepkI,EAAEqY,cAAcgsH,cAAeC,IAEzD,QAASC,GAAQvkI,GACb,GAAI61E,GAAK71E,EAAEqY,aACX,OAAOnI,IAAS,SAASje,KAAK4jF,EAAG5+E,MAAQ,IAE7C,QAASutI,GAAyBt6C,GAC9BA,EAAGr1B,WAAWj5D,OAAO,WACjB,MAAwB,MAAjB7D,KAAKqD,WACb6kB,SA5SV,GAg+COwkH,GA/9CAx0I,EAAQvB,OAAOuB,MAAOmpB,EAAKnpB,EAAMmpB,GAAI7O,EAAgBta,EAAMqa,eAAgB4F,EAAQjgB,EAAMC,QAAQggB,OAASjgB,EAAMC,QAAQgf,SAAUgiE,EAAY,YAAa9B,EAAQ,QAASs1D,EAAQ,GAAIC,EAAc,GAAIlsI,EAAShK,EAAEgK,OAAQsF,EAAQtP,EAAEsP,MAAOtI,EAAOhH,EAAEgH,KAAM+E,EAAWvK,EAAMuK,SAAUkf,EAAOzpB,EAAMypB,KAAM3c,EAASqc,EAAGrc,OAAQwlI,EAAsB,gBAAiB3rE,EAAK,aAAcurE,EAAM,MAAOrvD,EAAO,OAAQ8vD,EAAO,SAAUP,EAAO,SAAUrxD,EAAO,SAAU+B,EAAQ,QAAS6xD,EAAQ,QAAS/zD,EAAQ,UAAWuxD,EAAQ,UAAW5qG,EAAS,SAAUqtG,EAAS,SAAU5xD,EAAW,WAAYD,EAAa,aAAc8xD,EAAc,aAAeluE,EAAK,iBAAmBA,EAAK,eAAiBA,EAAIt/D,GAAWrH,EAAMC,QAAQoH,SAAUC,GAAatH,EAAMC,QAAQqH,WAAY6sI,GAAc7sI,IAAcD,GAAUkjG,GAAaljG,GAAW,eAAiBC,GAAa,iBAAmB,aAAcmlG,GAAaplG,GAAW,eAAiBC,GAAa,iBAAmB,aAAcwtI,GAAa,iBAAmBnuE,EAAK,cAAgBA,EAAI8M,GAASzzE,EAAMC,QAAQ8oB,OAAS49C,EAAIouE,GAAc,cAAeC,GAAe,eAAgBC,GAAc,cAAeC,GAAe,eAAgBxB,GAAgB,QAASF,GAAoB,cAAetyD,GAAmB1iF,EAAE6G,SAASmC,iBAAkB2tI,GAAa,aAAc9C,GAAe,kBAAmB+C,GAAa,gBAAiB31D,GAAe,kBAAmBD,GAAgB,mBAAoBE,GAAgB,mBAAoB21D,GAAe,UAAWC,GAAgB,gBAAiB1B,GAA6B,yBAA0B2B,GAAgBD,GAAgB,IAAM1B,GAA4B4B,GAAmB,0BAA2BC,GAAmB,2BAA4BC,GAAe,iCAAkCC,GAAe,2CAA4CC,GAAoB,4BAA6BC,GAAeD,GAAoB,SAAUE,GAAeF,GAAoB,QAASG,GAAmB,oDAAqDC,GAAuB,wBAAyB3B,IACtlEh2H,EAAK,EACL4B,MAAS,GACVmpE,IACCzlB,QAASp5D,EAAS,+EAClBqrC,MAAOrrC,EAAS,+HAChB0rI,YAAa1rI,EAAS,2JACtB8pC,KAAM9pC,EAAS,0ZACf2rI,aAAc3rI,EAAS,uKACvB4rI,MAAO5rI,EAAS,yEAChBkkF,MAAOlkF,EAAS,sDAChB6rI,OAAQ7rI,EAAS,sDACjBqtC,MAAOrtC,EAAS,KACjB8rI,IACCC,gBAAiB,SAAU1gG,EAAOvB,GAC9B,GAAIvtC,GAAS,SAAUmT,EAAQo6B,EAAKp6B,KAqBpC,OAnBInT,IADAutC,EAAKntB,WAAY,EACP,oBAEA,mBAEV0uB,EAAM2gG,YAAwB,IAAVt8H,IACpBnT,GAAU,YAEVmT,GAAS27B,EAAMl2C,OAAS,IACxBoH,GAAU,WAEVutC,EAAKpvB,WACLne,GAAU,IAAMutC,EAAKpvB,UAErBovB,EAAKrpC,MAAQqpC,EAAKrpC,KAAKxG,eAAe,WACtCsC,GAAU,IAAMutC,EAAKrpC,KAAK,UAE1BqpC,EAAK8e,WACLrsD,GAAU,IAAM44E,IAEb54E,GAEX0vI,kBAAmB,SAAUniG,GAAV,GAGNrpC,GAFLlE,EAAS,GACT+qC,EAAawC,EAAKrpC,QACtB,KAASA,IAAQ6mC,GACTA,EAAWrtC,eAAewG,IAAkB,UAATA,IACnClE,GAAUkE,EAAO,KAAO6mC,EAAW7mC,GAAQ,KAGnD,OAAOlE,IAEX2vI,mBAAoB,SAAUpiG,GAAV,GAQPrpC,GAPLlE,EAAS,GACT+qC,EAAawC,EAAKqiG,aACjB7kG,GAAW,SAGZA,EAAW,UAAY,IAAMsgG,EAF7BtgG,EAAW,SAAWsgG,CAI1B,KAASnnI,IAAQ6mC,GACTA,EAAWrtC,eAAewG,KAC1BlE,GAAUkE,EAAO,KAAO6mC,EAAW7mC,GAAQ,KAGnD,OAAOlE,IAEX6vI,qBAAsB,SAAUtiG,GAAV,GASTrpC,GARLlE,EAAS,GACT+qC,EAAawC,EAAKuiG,gBAClBC,EAAiB,gCAChBhlG,GAAW,SAGZA,EAAW,UAAY,IAAMglG,EAF7BhlG,EAAW,SAAWglG,CAI1B,KAAS7rI,IAAQ6mC,GACTA,EAAWrtC,eAAewG,KAC1BlE,GAAUkE,EAAO,KAAO6mC,EAAW7mC,GAAQ,KAGnD,OAAOlE,IAEXgwI,UAAW,WACP,MAAO1E,IAEX2E,eAAgB,SAAU1iG,GACtB,MAAOA,GAAKppB,IAAM,UAAaopB,EAAKppB,IAAM,IAAO,IAErD+rH,WAAY,SAAU3iG,EAAMuB,GACxB,GAAI9uC,GAAS,QAMb,OAJIA,IADA8uC,EAAMkmB,WACI,qBAEA,uBAIlB5+B,KAAM,SAAUmX,GACZ,MAAOA,GAAK4iG,WAAY,EAAQ5iG,EAAKnX,KAAOl9B,EAAMqJ,WAAWgrC,EAAKnX,OAEtEikF,IAAK,SAAU9sE,GACX,MAAOA,GAAKppB,IAAM,IAAM,QAE5BisH,gBAAiB,SAAUthG,GACvB,MAAOA,GAAMuhG,YAAa,EAAO,wBAA4B,IAEjEC,cAAe,WACX,MAAO,wBAEXzzE,QAAS,SAAUtvB,GACf,MAAOA,GAAKsvB,QAAUtvB,EAAKsvB,QAAU,WAkM7C0zE,GAAOvqI,EAAOtE,QACdC,KAAM,SAAU5I,EAASqI,GACrB,GAAIwG,GAAO5G,IACXgF,GAAOf,GAAGtD,KAAKwH,KAAKvB,EAAM7O,EAASqI,GACnCrI,EAAU6O,EAAKvN,QAAUuN,EAAK7O,QAC9BqI,EAAUwG,EAAKxG,QACfwG,EAAK4oI,UAAUpvI,GACfwG,EAAK6oI,iBACL7oI,EAAK8oI,YAAYtvI,GACjBwG,EAAK+oI,eAAiB,IACtB/oI,EAAKqe,YACLre,EAAKgpI,cAAcxvI,GACnBwG,EAAKipI,4BACDzvI,EAAQ0vI,cACRlpI,EAAKmpI,SAAU,GAEnBh4I,EAAQmL,KAAK,OAAQ,WACjBnL,EAAQ,GAAG8rB,KACXjd,EAAKqrH,QAAU/5H,EAAM6Q,OAAO,gBAAiBhR,EAAQ,GAAG8rB,KAE5D3rB,EAAM0uB,OAAOhgB,IAEjBc,QACIqzE,EACAC,EACAE,EACAD,EACAx7C,GAEJr/B,SACI8O,KAAM,OACNktE,WACIC,MAAQh8E,SAAU,KAClBi8E,OAASj8E,SAAU,MAEvB4vE,YAAa,aACbrqC,UAAW,UACXkqG,aAAa,EACbE,cAAc,EACdC,WAAY,IACZC,YAAY,EACZC,eAAgBv5I,GAEpB44I,UAAW,SAAUpvI,GACjB,GAAIwG,GAAO5G,IACPI,GAAQwkB,aACRhe,EAAKke,QAAQ,UAAW,WACpB,OAASyB,SAAU3f,EAAK7O,QAAQ4C,cAEpCiM,EAAK7O,QAAQ+3C,QACblpC,EAAKk9C,OAAO1jD,EAAQwkB,WAAYhe,EAAK7O,SACrC6O,EAAKke,QAAQ,UAAW,WACpB,OAASyB,SAAU3f,EAAK7O,QAAQ4C,gBAI5Ck1I,0BAA2B,WAAA,GACnBjpI,GAAO5G,KACPjI,EAAU6O,EAAK7O,QACfqI,EAAUwG,EAAKxG,QACfkrI,EAAkB1kI,EAAKwpI,oBAC1B9E,GAAmBvzI,GAAS2N,GAAGqnI,EAAaa,GAAc5nI,EAAMY,EAAK4rG,cAAe5rG,IAAOlB,GAAG2xE,EAAQxY,EAAI8uE,IAAkB,GAAOjoI,GAAG2xE,EAAQxY,EAAI+uE,GAAc5nI,EAAMY,EAAKs9B,OAAQt9B,IAAOlB,GAAGqnI,EAAc,IAAM5zD,EAAYta,EAAI,aAAc74D,EAAMY,EAAKypI,cAAezpI,IAAOlB,GAAG+8F,GAAa5jC,EAAI+uE,GAAc5nI,EAAMY,EAAK++E,YAAa/+E,IAAOlB,GAAGi/F,GAAa9lC,EAAI+uE,GAAc5nI,EAAMY,EAAKi/E,YAAaj/E,IAAOlB,GAAG+8F,GAAa5jC,EAAK,IAAM8lC,GAAa9lC,EAAK,IAAMsa,EAAYta,EAAK,IAAMwY,EAAQxY,EAAIgvE,GAAc7nI,EAAMY,EAAKoyF,aAAcpyF,IAChhB7O,EAAQ2N,GAAG,UAAYm5D,EAAI74D,EAAMY,EAAKqxE,SAAUrxE,IAAOlB,GAAG,QAAUm5D,EAAI74D,EAAMY,EAAKmxE,OAAQnxE,IAAOlB,GAAG,QAAUm5D,EAAI,aAAc74D,EAAMY,EAAKmxE,OAAQnxE,IAAOlB,GAAG,OAASm5D,EAAI74D,EAAMY,EAAK0pI,iBAAkB1pI,IAAOlB,GAAG,OAASm5D,EAAI,aAAc74D,EAAMY,EAAK2pI,oBAAqB3pI,IACzQ0kI,GACAA,EAAgB5lI,GAAGi/F,GAAa9lC,EAAI4uE,GAAeznI,EAAMY,EAAK4pI,iBAAkB5pI,IAAOlB,GAAG+8F,GAAa5jC,EAAI4uE,GAAeznI,EAAMY,EAAK6pI,iBAAkB7pI,IAEvJxG,EAAQ0vI,cACRlpI,EAAK8pI,sBAAwB1qI,EAAMY,EAAK+pI,eAAgB/pI,GACxDlQ,EAAE6G,UAAUyjB,MAAMpa,EAAK8pI,yBAG/BE,0BAA2B,WAAA,GACnBhqI,GAAO5G,KACPsrI,EAAkB1kI,EAAKwpI,kBACvB9E,IACAA,EAAgB1hH,IAAIi1C,GAExBj4D,EAAK7O,QAAQ6xB,IAAIi1C,GACbj4D,EAAK8pI,uBACLh6I,EAAE6G,UAAUsK,OAAO,QAASjB,EAAK8pI,wBAGzCd,cAAe,SAAUxvI,GAAV,GAGPywI,GAAaC,EAWTC,EACAC,EAdJpqI,EAAO5G,KACPsnH,EAAsC,cAAvBlnH,EAAQ6vE,WAEvB7vE,GAAQ8vI,aACRtpI,EAAKqqI,iBACLrqI,EAAKsqI,eAAiBtqI,EAAK7O,QAAQe,KAAK,qCAAwCsH,EAAQ6vE,YAAc,YAAar2E,SAC/G0tH,GACAmlB,EAAyB7lI,EAAK7O,SAElC84I,EAAcn6I,EAAE4qF,GAAU8sD,cAAexoG,UAAW0hF,EAAe,OAAS,QAC5EwpB,EAAap6I,EAAE4qF,GAAU8sD,cAAexoG,UAAW0hF,EAAe,QAAU,UAC5EupB,EAAYvvI,IAAIwvI,GAAYh6G,SAASlwB,EAAKsqI,gBAC1CtqI,EAAKuqI,eAAevqI,EAAK7O,QAAS84I,EAAaC,EAAYxpB,GACvDypB,EAAenqI,EAAK7O,QAAQyB,aAC5Bw3I,EAAkBpqI,EAAK7O,QAAQ,GAAG+B,MAAMb,MAC5C+3I,EAAsC,SAApBA,EAA6B,GAAKA,EAChD1pB,GACA5wH,EAAEC,QAAQ+O,GAAGimE,GAAQzzE,EAAMy7B,SAAS,WAChC/sB,EAAKwqI,yBAAyBL,EAAcC,GAC5CpqI,EAAKyqI,qBAAqBzqI,EAAK7O,QAAS84I,EAAaC,EAAYxpB,IAClE,MAEP1gH,EAAKwqI,yBAAyBL,EAAcC,GAC5CpqI,EAAKyqI,qBAAqBzqI,EAAK7O,QAAS84I,EAAaC,EAAYxpB,KAGzE8oB,iBAAkB,WACd,MAAOpwI,MAAKkxI,gBAAkBlxI,KAAKsxI,gBAEvCF,yBAA0B,SAAUL,EAAcC,GAAxB,GAIlB52B,GAEAm3B,EACAC,EAEIv4I,EARJ2N,EAAO5G,KACPyxI,EAAkB7qI,EAAKsqI,eAAej5I,IAAI,QAC9C2O,GAAKsqI,eAAej5I,KAAMgB,MAAO,KAC7BmhH,EAAexzG,EAAKsqI,eAAe13I,aACvCoN,EAAKsqI,eAAej5I,KAAMgB,MAAOw4I,IAC7BF,EAAY3qI,EAAK7O,QAAQyB,aACzBg4I,EAAU5qI,EAAK7O,QAAQ,GAAGggB,YAAcnR,EAAK7O,QAAQ,GAAG4G,YACxD4yI,GAAan3B,IACTnhH,EAAQ+3I,EAAkBpyI,KAAKoT,IAAI++H,EAAc32B,GAAgBA,EACrExzG,EAAK7O,QAAQkB,MAAMA,EAAQu4I,GAC3B5qI,EAAKsqI,eAAej4I,MAAMA,KAGlCy4I,gBAAiB,SAAUtxI,GAAV,GACTwG,GAAO5G,KACP2xI,EAAkBvxI,EAAQ8vI,aAAetpI,EAAKxG,QAAQ8vI,aAAe9vI,EAAQ8vI,YAActpI,EAAKxG,QAAQ8vI,YAAc9vI,EAAQ8vI,YAActpI,EAAKxG,QAAQ8vI,YAAc9vI,EAAQ8vI,WAAWzxG,UAAY73B,EAAKxG,QAAQ8vI,WAAWzxG,UAAYr+B,EAAQ6vE,aAAerpE,EAAKxG,QAAQ6vE,WAC9Q0hE,KACA/qI,EAAKgqI,4BACLhqI,EAAKgrI,mBACLhrI,EAAKgpI,cAAcxvI,GACnBwG,EAAKipI,8BAGb+B,iBAAkB,WAAA,GACVhrI,GAAO5G,KACPsrI,EAAkB1kI,EAAKwpI,kBACvB9E,KACAA,EAAgB1hH,IAAIi1C,GACpBysE,EAAgBhkH,KAAK4mH,IAAsBtkH,IAAIi1C,GAAI32C,SACnDojH,EAAgB3wI,SAASmxI,IAA4BpuI,KAAK,SAAU5C,EAAG+2I,GAAb,GAGlDC,GAFA3/C,EAAKz7F,EAAEm7I,GAAcl3I,SAAS6yI,GAClCr7C,GAAGvoE,IAAIojH,IACH8E,EAAgBnG,EAAgBx5C,EAAIm5C,GACpCwG,EAAcl6I,QACdk6I,EAAchuF,OAAO+tF,KAG7BvG,EAAgBhkH,KAAK4jH,KAAuB9lH,WAAW,oBACvDkmH,EAAgBhkH,KAAK6jH,KAAsB/lH,WAAW,cACtDxe,EAAK7O,QAAQ6xB,IAAIojH,IACjBt2I,EAAEC,QAAQizB,IAAI+hD,IACd2/D,EAAgBxuE,WAAW2qC,SAC3B7gG,EAAKsqI,eAAiBtqI,EAAK0qI,eAAiB1qI,EAAKqqI,cAAgBr6I,IAGzEu6I,eAAgB,SAAU1jE,EAAeojE,EAAaC,EAAYxpB,GAAlD,GACR1gH,GAAO5G,KACPkwI,EAAatpI,EAAKxG,QAAQ8vI,WAC1BzxG,EAAW/nC,EAAEq7I,UAAU7B,EAAWzxG,UAAYyxG,EAAWzxG,SAAWmuG,EACpEoF,EAAqBvzG,EAAW,EAChCwqG,EAAW,KAAOxqG,EAClBxE,EAAU,KAAOwE,EACjBwzG,EAAiB,KAAkB,EAAXxzG,EACxByzG,EAAgB,KAAkB,EAAXzzG,EACvB0zG,GAAY,EACZC,GAAc,EACdp0C,EAAS,SAAUpgG,GACnB,GAAIy0I,GAAc/qB,GAAiBlpH,WAAcR,IAAY+B,UAAa/B,EAC1E6vE,GAAc6kE,SAAStxI,QAAQqxI,EAAa,OAAQ,SAAU,WACtDF,GACAn0C,EAAOpgG,KAGfgJ,EAAKyqI,qBAAqB5jE,EAAeojE,EAAaC,EAAYxpB,IAElEirB,EAAoB,SAAUtqI,GACzBkqI,GAAcC,IACfp0C,EAAO/1F,EAAEzM,KAAKoqC,WACdusG,GAAY,IAGhBK,EAAmB,SAAUvqI,GAC7B,GAAIoqI,GAAc/qB,GAAiBlpH,WAAc6J,EAAEzM,KAAKoqC,YAAgBjmC,UAAasI,EAAEzM,KAAKoqC,UAC5FwsG,GAAc5F,EAAQvkI,IAAMmkI,EAAenkI,GAC3CwlE,EAAc3tD,OAAO9e,QAAQqxI,EAAa,OAAQ,SAAU,WACnDD,GAGDxrI,EAAKyqI,qBAAqB5jE,EAAeojE,EAAaC,EAAYxpB,GAClE6qB,GAAY,GAHZz7I,EAAEuR,EAAE22B,eAAe52B,QAAQy6F,MAMnC0vC,GAAY,EACZlqI,EAAEyiB,kBACFziB,EAAE9D,iBAEN0sI,GAAYnrI,GAAG+8F,GAAa5jC,GAAMj5B,UAAWqjG,GAAYsJ,GAAmB7sI,GAAGxN,EAAMqN,SAASyZ,KAAO6/C,GAAMj5B,UAAWqsG,GAAkBO,GACxI1B,EAAWprI,GAAG+8F,GAAa5jC,GAAMj5B,UAAW3L,GAAWs4G,GAAmB7sI,GAAGxN,EAAMqN,SAASyZ,KAAO6/C,GAAMj5B,UAAWssG,GAAiBM,GACrI3B,EAAYvvI,IAAIwvI,GAAYprI,GAAGi/F,GAAa9lC,EAAI,WAC5C4O,EAAc3tD,OACdqyH,GAAY,EACZvrI,EAAKyqI,qBAAqB5jE,EAAeojE,EAAaC,EAAYxpB,KAEtE75C,EAAc/nE,GAAGsnI,GAAY,SAAU/kI,GAAV,GAEjBsrB,GACAk/G,EACA70I,EACAy0I,CAJHpqI,GAAE8tE,SAAY9tE,EAAEouB,UAAapuB,EAAEglF,SAC5B15D,EAAa04G,EAAgBhkI,EAAEqY,eAC/BmyH,EAAc7zI,KAAKC,IAAI00B,GAAcy+G,EACrCp0I,GAAS21B,EAAa,EAAI,KAAO,MAAQk/G,EACzCJ,EAAc/qB,GAAiBlpH,WAAcR,IAAY+B,UAAa/B,GAC1EgJ,EAAK8rI,kBAAkBjlE,GACvBA,EAAc6kE,SAAStxI,QAAQqxI,EAAa,OAAQ,SAAU,WAC1DzrI,EAAKyqI,qBAAqB5jE,EAAeojE,EAAaC,EAAYxpB,KAEtEr/G,EAAE9D,qBAIdktI,qBAAsB,SAAU5jE,EAAeojE,EAAaC,EAAY98E,GAAlD,GACd2+E,GAAgB3+E,EAAayZ,EAAcrvE,aAAeqvE,EAAc9tE,YACxEimE,EAAa5R,EAAai5E,GAAcC,GACxC9tI,EAAS40D,EAAam5E,GAAcC,EACxCyD,GAAY1wH,OAAyB,IAAlBwyH,GACnB7B,EAAW3wH,OAAOwyH,EAAgBllE,EAAc,GAAG7H,GAAc6H,EAAc,GAAGruE,GAAU,IAEhGimB,WAAY,SAAUjlB,GAClB,GAAIg8E,GAAYp8E,KAAKI,QAAQg8E,SAC7Bp8E,MAAK0vI,YAAYtvI,GACjBA,EAAQg8E,UAAY17E,GAAO,EAAM07E,EAAWh8E,EAAQg8E,WAChD,cAAgBh8E,IAChBJ,KAAKwvI,UAAUpvI,GAEnBJ,KAAKyvI,iBACLzvI,KAAK0xI,gBAAgBtxI,GACrB4E,EAAOf,GAAGohB,WAAWld,KAAKnI,KAAMI,IAEpC0lB,QAAS,WACL,GAAIlf,GAAO5G,IACXgF,GAAOf,GAAG6hB,QAAQ3d,KAAKvB,GACvBA,EAAKgqI,4BACLhqI,EAAKgrI,mBACL15I,EAAM4tB,QAAQlf,EAAK7O,UAEvB0nB,OAAQ,SAAU1nB,EAAS0nB,GAEvB,MADAzf,MAAK4yI,gBAAgB76I,EAAS0nB,KAAW,GAClCzf,MAEXuf,QAAS,SAAUxnB,GAEf,MADAiI,MAAK4yI,gBAAgB76I,GAAS,GACvBiI,MAEX8jD,OAAQ,SAAUvX,EAAMsmG,GACpBA,EAAgB7yI,KAAKjI,QAAQuvB,KAAKurH,EAClC,IAAIC,GAAW9yI,KAAK+yI,QAAQxmG,EAAMsmG,EAAeA,EAAcj7I,OAASi7I,EAAcvrH,KAAK,6DAA+D,KAQ1J,OAPA5pB,GAAKo1I,EAAStsH,MAAO,SAAU1rB,GAC3Bg4I,EAAShlG,MAAMgW,OAAO9jD,MACtByqI,EAAYzqI,MACZ8qI,EAA4B9qI,KAAMusC,EAAKzxC,IAAMyxC,KAEjDk+F,EAAYoI,GACZnI,EAAgBoI,EAAShlG,MAAMxmB,KAAK,qBAAqBhmB,IAAIwxI,EAAStsH,QAC/DxmB,MAEXkrD,aAAc,SAAU3e,EAAMsmG,GAC1BA,EAAgB7yI,KAAKjI,QAAQuvB,KAAKurH,EAClC,IAAIC,GAAW9yI,KAAK+yI,QAAQxmG,EAAMsmG,EAAeA,EAAcj5I,SAQ/D,OAPA8D,GAAKo1I,EAAStsH,MAAO,SAAU1rB,GAC3B+3I,EAAclgE,OAAO3yE,MACrByqI,EAAYzqI,MACZ0qI,EAAgB1qI,MAChB8qI,EAA4B9qI,KAAMusC,EAAKzxC,IAAMyxC,KAEjDm+F,EAAgBmI,GACT7yI,MAEX8hE,YAAa,SAAUv1B,EAAMsmG,GACzBA,EAAgB7yI,KAAKjI,QAAQuvB,KAAKurH,EAClC,IAAIC,GAAW9yI,KAAK+yI,QAAQxmG,EAAMsmG,EAAeA,EAAcj5I,SAQ/D,OAPA8D,GAAKo1I,EAAStsH,MAAO,SAAU1rB,GAC3B+3I,EAAcr1E,MAAMx9D,MACpByqI,EAAYzqI,MACZ0qI,EAAgB1qI,MAChB8qI,EAA4B9qI,KAAMusC,EAAKzxC,IAAMyxC,KAEjDm+F,EAAgBmI,GACT7yI,MAEX+yI,QAAS,SAAUxmG,EAAMsmG,EAAej5I,GAA/B,GACY4sB,GAAOozB,EAIpBo5F,EAA+BC,EAJ/BrsI,EAAO5G,IAoCX,OAnCK6yI,IAAkBA,EAAcj7I,SACjCgC,EAASgN,EAAK7O,SAEdi7I,EAAQt8I,EAAEiyC,cAAc4D,GAAO0mG,GAC3BxE,WAAY70I,EAAOC,SAASgxI,GAC5B72E,WAAYp6D,EAAOC,SAASgxI,EAAO,eACnCwE,UAAU,EACVz3I,OAAQgC,EAAOe,WAAW/C,QAE9Bi7I,IAAkBj5I,EAAOhC,SACzBgC,EAASlD,EAAE64I,GAAK2D,aAAcplG,MAAOmlG,KAAcn8G,SAAS+7G,IAE5DG,GAASt8I,EAAEqP,QAAQwmC,GACnB/lB,EAAQ9vB,EAAEA,EAAEsc,IAAIggI,GAASzmG,GAAQA,EAAM,SAAU3uC,EAAOD,GACpD,MAAqB,gBAAVC,GACAlH,EAAEkH,GAAO6lB,MAET/sB,EAAE64I,GAAK4D,YACVrlG,MAAOmlG,EACP1mG,KAAM7rC,EAAO9C,GAASuU,MAAOxU,OAC7B8lB,UAKR+C,EADe,gBAAR+lB,IAAsC,KAAlBA,EAAKl1C,OAAO,GAC/BuP,EAAK7O,QAAQuvB,KAAKilB,GAElB71C,EAAE61C,GAEdqN,EAASpzB,EAAMc,KAAK,QAAQhtB,SAAS,gBAAgB4I,KAAK,OAAQ,QAClEsjB,EAAQA,EAAM3iB,OAAO,MACrB2iB,EAAMllB,IAAIs4C,EAAOtyB,KAAK,SAAS5pB,KAAK,WAChCysI,EAAkBnqI,UAItBwmB,MAAOA,EACPsnB,MAAOl0C,IAGfsuB,OAAQ,SAAUnwB,GAAV,GAEA6O,GAAahN,EAA+Dk0C,EAGxEnmB,CAYR,OAhBA5vB,GAAUiI,KAAKjI,QAAQuvB,KAAKvvB,GACxB6O,EAAO5G,KAAMpG,EAAS7B,EAAQwmF,aAAa33E,EAAK7O,QAAS21I,IAAmB5/F,EAAQ/1C,EAAQ6B,OAAO,mBACvG7B,EAAQmwB,SACJ4lB,IAAUA,EAAMnzC,SAAS+yI,IAAkB91I,SACvC+vB,EAAYmmB,EAAMl0C,OAAOkyI,IACzBnkH,EAAU/vB,OACV+vB,EAAUO,SAEV4lB,EAAM5lB,UAGVtuB,EAAOhC,SACPgC,EAASA,EAAOmvB,GAAG,GACnB0hH,EAAY7wI,GACZ8wI,EAAgB9wI,IAEbgN,GAEXy1E,KAAM,SAAUtkF,GAAV,GAeEq7I,GACAC,EAfAzsI,EAAO5G,KACPI,EAAUwG,EAAKxG,QACf4zD,EAAoC,cAAvB5zD,EAAQ6vE,YACrBrqC,EAAYxlC,EAAQwlC,UACpBvnC,EAAQnG,EAAMC,QAAQkG,MAAMuI,EAAKvN,SACjCiyI,EAAkB1kI,EAAKwpI,kBAiI3B,OAhIAr4I,IAAWuzI,GAAmB1kI,EAAK7O,SAASuvB,KAAKvvB,GAC7C,yBAAyBmC,KAAK0rC,KAE1BA,EADAvnC,EACY21D,GAAcpuB,EAAY,SAASzuC,QAAQ,UAAW,UAAY,OAElE68D,GAAcpuB,EAAY,UAAUzuC,QAAQ,UAAW,UAAY,SAGnFi8I,EAAgB,6DAChBC,EAAa,WACb,GAAIx1D,GAAQnnF,EAAEsJ,MAAMxE,KAAK6xI,GACrBxvD,IACAA,EAAMvB,OAAM,IAGpBvkF,EAAQunF,WAAWh4D,KAAK8rH,GAAe11I,KAAK21I,GACxC/H,GACAvzI,EAAQuvB,KAAK8rH,GAAe11I,KAAK21I,GAErCt7I,EAAQ2F,KAAK,WACT,GAAIsvF,GAAKt2F,EAAEsJ,KACX4qB,cAAaoiE,EAAGxxF,KAAKqxI,IACrB7/C,EAAGxxF,KAAKqxI,EAAOnjH,WAAW,WAAA,GAElBm0D,GACAy1D,EAaQC,EAAmCC,EAkBvCC,EAMAn6G,EAAmCo6G,EAAuC9uI,EAAqD7E,EAA0C49E,EAvC7KwU,EAAKnF,EAAG1lE,KAAK,+BAGZ6qE,EAAG,IAAMm5C,IACVgI,EAAgB1sI,EAAKuuH,UAAUnoC,GAC/BmF,EAAKmhD,GAAiBA,EAAcv7I,SAEpCo6F,EAAGp4F,GAAG,aAGNo4F,EAAG,IAAMvrF,EAAK+sI,eACVpnG,KAAMygD,EAAG,GACT9tF,KAAM67E,OACH,KACFoX,EAAG7qE,KAAK,iBAAiB,IAAM6qE,EAAGx3F,SAAS,WAAW/C,OAAS,GAC5D27I,EAAe78I,EAAEC,QAAQuC,SAAUs6I,EAAe,WAC9CrhD,EAAGl6F,KACC27I,UAAWL,GAAgBr7I,EAAMyB,aAAaw4F,GAAMA,EAAGj5F,UAAYhB,EAAMJ,WAAWq6F,GAAIt5F,OACxFsF,SAAU,UAGlBjG,EAAMC,QAAQoB,QAAQgB,MAAQrC,EAAMC,QAAQoB,QAAQkB,SAAW,EAC/DivB,WAAW8pH,EAAc,GAEzBA,KAGJrhD,EAAGl6F,KACC27I,UAAW,GACXz1I,SAAU,KAGlB6uF,EAAGxxF,KAAKsxI,EAAQ9/C,EAAG/0F,IAAI60I,IACnB2G,EAAa7sI,EAAK+oI,iBACtB3iD,EAAG/0F,IAAI60I,EAAQ2G,GACX7sI,EAAKxG,QAAQ8vI,YACbljD,EAAGpzF,SAAS0lF,SAAS4uD,IAAsBj2I,KAAMkgE,SAAUs7E,IAE/D51D,EAAQsU,EAAG32F,KAAK6xI,IACZ/zG,EAAO0zD,EAAGpzF,SAASC,SAASgxI,GAAO6I,EAAmBp6G,GAAQ06B,EAAYpvD,EAAaslI,EAAetkG,EAAWtM,EAAMj7B,GAAQ0B,EAAUK,EAAQg8E,UAAUC,KAAKt8E,QAAS49E,EAAc59E,IAAYnJ,EAAYmJ,EAAU,WAAakqI,EAAmBrkG,EAAWtM,GACnQukD,GAqDDA,EAAQsU,EAAG32F,KAAK6xI,IAChBxvD,EAAMz9E,QAAQo3D,OAAS5yD,EAAW4yD,OAClCqmB,EAAMz9E,QAAQi2D,SAAWzxD,EAAWyxD,SACpCwnB,EAAMz9E,QAAQg8E,UAAUC,KAAKt8E,QAAU49E,GAvDvCE,EAAQsU,EAAGpF,YACPvG,SAAU,WACN5/E,EAAK+sI,eACDpnG,KAAMvsC,KAAK3G,QAAQO,SACnBsF,KAAMg8E,KAGdqI,WAAY,SAAUt7E,GAClBA,EAAEC,OAAOnQ,QAAQguB,WAAW,mBAAmB9tB,KAAMwgE,QAAS,KAC9D7xD,EAAK+sI,eACDpnG,KAAMvsC,KAAK3G,QAAQO,SACnBsF,KAAM+7E,KAGdzjB,OAAQ5yD,EAAW4yD,OACnBnB,SAAUzxD,EAAWyxD,SACrB6e,UAAW90E,EAAQ+vI,iBAAmBv5I,EAAYwJ,EAAQ+vI,eAAiBuD,EAAmB,MAAQ,WACtGx3D,OAAQ8Q,EACRl2D,SAAUw0G,GAAmBt+C,EAC7B5Q,WACIC,KAAM37E,GAAO,GAAQX,QAAS49E,GAAev9E,EAAQg8E,UAAUC,MAC/DC,MAAOl8E,EAAQg8E,UAAUE,OAE7BD,KAAMr2E,EAAMY,EAAK0uG,WAAY1uG,GAC7B01E,MAAO,SAAUr0E,GAAV,GAGKwjI,GAFJz+C,EAAK/kF,EAAEC,OAAO7O,QAAQO,QACtB0xI,KACIG,EAAUxjI,EAAEC,OAAOnQ,QAAQyD,KAAKowI,IAChCH,IACAz+C,GAAMs+C,GAAmB1kI,EAAK7O,SAASuvB,KAAK4jH,EAAoBO,KAEpExjI,EAAEC,OAAO7O,QAAQsB,SAASuzI,IAAsBptI,QAE/C8F,EAAK+sI,eACFpnG,KAAMygD,EAAG,GACT9tF,KAAM87E,IAYV/yE,EAAE9D,kBAVF6oF,EAAG/0F,IAAI60I,EAAQ9/C,EAAGxxF,KAAKsxI,IACvB9/C,EAAGjnE,WAAW+mH,GACVlmI,EAAKxG,QAAQ8vI,YACbljD,EAAGpzF,SAAS0lF,SAAS4uD,IAAsBj2I,KAAMkgE,OAAQ,MAEzDhgD,GAASk0H,MACTr/C,EAAGriC,YAAY2iF,IACf1mI,EAAK0pI,wBAMlB90I,KAAK6xI,IAOZl7C,EAAG/sE,WAAW,eACdxe,EAAKitI,wBAAwBh2D,EAAOmP,GACpCnP,EAAMxB,OACNz1E,EAAKktI,oBAAoBj2D,KAE9Bj3E,EAAKxG,QAAQ6vI,eAEbrpI,GAEXitI,wBAAyB,SAAUh2D,EAAOk2D,GAAjB,GAKTC,GAJRptI,EAAO5G,IACP4G,GAAKxG,QAAQ8vI,aACbtpI,EAAKqtI,kBAAkBp2D,GAClBk2D,EAAY7wI,KAAK,sBACd8wI,GAAU,GAAIh4I,OAAOC,UACzB83I,EAAY7wI,KAAK,mBAAoB8wI,GACrCn2D,EAAM9lF,QAAQmL,KAAK,aAAc8wI,MAI7CC,kBAAmB,SAAUp2D,GACpBA,EAAM9lF,QAAQ6B,SAASG,GAAG+xI,MAC3BjuD,EAAMxkF,QAAUnB,EAAMY,KAAK+kF,EAAM9lF,QAAS8lF,EAAMz9E,QAAQrH,UAAUd,KAC9DkG,SAAU,SACVkhB,QAAS,QACTg3C,SAAU,eAItBy9E,oBAAqB,SAAUj2D,EAAOypC,EAAc4sB,GAChD,GAAIttI,GAAO5G,IACP4G,GAAKxG,QAAQ8vI,YAAcryD,EAAM9lF,QAAQ,GAAGglB,aAAe8gE,EAAM9lF,QAAQ,GAAG4uB,cAC5E/f,EAAKutI,wBAAwBt2D,EAAOypC,EAAc4sB,IAG1DC,wBAAyB,SAAUt2D,EAAOypC,EAAc4sB,GAA/B,GACjBttI,GAAO5G,KACPo0I,EAAgBv2D,EAAMxkF,QAAQsB,SAASuzI,IACvC9xD,EAAYx1E,EAAKxG,QAAQg8E,UACzBvoD,GAAWuoD,GAAaA,EAAUC,MAAQD,EAAUC,KAAKh8E,UAAY,GAAKssI,CAC9EjjH,YAAW,WAAA,GAECmnH,GACAC,CAFHsD,GAAcx8I,SACXi5I,EAAcn6I,EAAE4qF,GAAU8sD,cAAexoG,UAAW0hF,EAAe,OAAS,QAC5EwpB,EAAap6I,EAAE4qF,GAAU8sD,cAAexoG,UAAW0hF,EAAe,QAAU,UAChF8sB,EAAgBvD,EAAYvvI,IAAIwvI,GAAYh6G,SAAS+mD,EAAMxkF,SAC3DuN,EAAKuqI,eAAetzD,EAAM9lF,QAAS84I,EAAaC,EAAYxpB,GACvD4sB,GACDE,EAAc1uI,GAAG+8F,GAAa5jC,EAAI,WAC9B,GAAIysE,GAAkB1kI,EAAKwpI,kBAC3B15I,GAAE00I,EAAevtD,EAAM9lF,QAASuzI,IAAkB5tI,KAAK,SAAU5C,EAAGwgH,GAChE,GAAIy4B,GAAczI,EAAgBhkH,KAAK4jH,EAAoB5vB,EAAE9/G,KAAKowI,KAClEhlI,GAAK01E,MAAMy3D,OAEhBruI,GAAGi/F,GAAa9lC,EAAI,WACnBn1C,WAAW,WACHhzB,EAAEywB,cAAcvgB,EAAKqqI,gBACrBrqI,EAAKytI,mBAAmBx2D,EAAM9lF,UAEnC40I,MAIf/lI,EAAKyqI,qBAAqBxzD,EAAM9lF,QAASq8I,EAAch9I,QAASg9I,EAAc9kH,OAAQg4F,IACvFzzF,IAEPyhF,WAAY,SAAUrtG,GAClBA,EAAEC,OAAOnQ,QAAQ4C,SAAS,IAAMg9E,IAAchtB,YAAYgtB,IACtD33E,KAAKI,QAAQ8vI,YACblwI,KAAKs0I,gBAAgBrsI,EAAEC,SAG/BosI,gBAAiB,SAAUz2D,EAAOvnB,GAAjB,GAIT56C,GACA63H,EACAgB,EACAC,EACA70I,EACA80I,EACAb,EACAc,EAEIx7I,EAZJuzF,EAAe5O,EAAM9lF,QACrB8/F,EAASpL,EAAanrF,IAAImrF,EAAa7yF,OAAOkyI,IAClDj0C,GAAO3+F,OAAOuzF,EAAa5yF,SAASgxI,IAAS7qI,KAAK20I,gBAAkB,IAChEj5H,EAAWmiE,EAAML,UAAUlnB,GAC3Bi9E,EAAe78I,EAAEC,QAAQuC,SACzBq7I,EAAmB74H,EAASxiB,OAC5Bs7I,EAAiBl+E,EAAU,EAAI13D,KAAKlG,IAAIgjB,EAASpc,IAAK,GACtDK,EAAY22D,EAAU,EAAI41E,EAAclsI,KAAKowI,mBAAmB,GAAI,aACpEqE,EAAkB99I,OAAOwiB,YAAco6H,EACvCK,EAAYL,EAAer7I,EAAMJ,WAAW20F,GAAc5zF,OAAS47I,EACnEC,EAASd,EAAYj0I,EAAY40I,EAAmBC,EACnDE,IACGx7I,EAAS0F,KAAKoT,IAAI4hI,EAAWA,EAAYY,EAAiB70I,GAC9Dk4F,EAAO5/F,KACHkG,SAAU,SACVjF,OAAQA,EAAS,SAI7BojF,MAAO,SAAU91D,EAAOouH,GAAjB,GAQCC,GAWAC,EAlBAluI,EAAO5G,KACPsrI,EAAkB1kI,EAAKwpI,mBACvBr4I,EAAUuzI,GAAmB1kI,EAAK7O,OA0CtC,OAzCAyuB,GAAQzuB,EAAQuvB,KAAKd,GAChBA,EAAM5uB,SACP4uB,EAAQzuB,EAAQuvB,KAAK,aAErButH,EAAwB,SAAUxJ,GAClC,GAAIrsI,IAAS,CACb,OAAItI,GAAEywB,cAAcvgB,EAAKqqI,eACdjyI,GAEXtI,EAAE00I,EAAeC,EAAcC,IAAkB5tI,KAAK,SAAU5C,EAAG+iF,GAE/D,MADA7+E,KAAW4H,EAAKqqI,cAAcpzD,GAAAA,EAAMriF,KAAKowI,MACjC5sI,IAELA,IAEP81I,EAAqB,SAAUtJ,GAC/B,GAAIwI,GAAUxI,EAAOhwI,KAAKkwI,GAC1B,QAAQJ,IAAoB0I,IAAYptI,EAAKqqI,cAAc+C,GAAAA,IAE/DxtH,EAAM9oB,KAAK,WACP,GAAIsvF,GAAKt2F,EAAEsJ,OACN40I,GAAkBhuI,EAAKmuI,YAAY/nD,KACpCpmF,EAAKmpI,SAAU,GAEnBnlH,aAAaoiE,EAAGxxF,KAAKqxI,IACrB7/C,EAAGxxF,KAAKqxI,EAAOnjH,WAAW,WACtB,GAAIm0D,GAAQj3E,EAAKuuH,UAAUnoC,EAC3B,IAAInP,IAAUi3D,EAAmB9nD,IAAOpmF,EAAKouI,aAAc,CACvD,IAAKpuI,EAAKouI,aAAeH,EAAsBh3D,EAAM9lF,SACjD,MAEJ8lF,GAAMvB,QACNuB,EAAM9lF,QAAQmL,KAAK,eAAe,GAC9BooI,GACI1kI,EAAKouI,aAAexuH,EAAM8I,OAAOv1B,GAAGizF,EAAG,WAChCpmF,GAAKouI,cAIzBpuI,EAAKxG,QAAQ6vI,eAEbrpI,GAEXuuH,UAAW,SAAUnoC,GAAV,GAKCgnD,GAEIvnD,EANR7lF,EAAO5G,KACP69E,EAAQmP,EAAG1lE,KAAK,iFAAiF9rB,KAAK6xI,IACtG/B,EAAkB1kI,EAAKwpI,kBAQ3B,QAPKvyD,GAASytD,IACN0I,EAAUhnD,EAAGxxF,KAAKkwI,IAClBsI,IACIvnD,EAAe6+C,EAAgBhkH,KAAK6jH,EAAmB6I,IAC3Dn2D,EAAQ4O,EAAajxF,KAAK6xI,MAG3BxvD,GAEX+0D,gBAAiB,SAAUpsH,EAAO/G,GAC9Bzf,KAAKjI,QAAQuvB,KAAKd,GAAO9oB,KAAK,WAC1BhH,EAAEsJ,MAAMoB,YAAYmpI,GAAc9qH,GAAQre,YAAYs2E,IAAgBj4D,GAAQvc,KAAK,iBAAkBuc,MAG7Gu5E,aAAc,SAAU/wF,GACpB,GAAImY,GAAS1pB,EAAEwB,EAAM2M,YAAYoD,IAAMA,EAAEmY,QAAQnI,QAAQy1H,IAAmBuH,EAAUhtI,EAAE/I,MAAQujG,IAActpB,EAAUj7E,QAAQ+J,EAAE/I,UAC7HkhB,GAAOzc,QAAQ,MAAQ+zE,IAAe9/E,QACvCwoB,EAAOhf,YAAYksI,GAAY2H,GAAqB,aAAVhtI,EAAE/I,MAAiC,SAAV+I,EAAE/I,MAEzEc,KAAKswI,oBAETD,cAAe,WACNrwI,KAAKI,QAAQ4vI,eACdhwI,KAAKk1I,mBAAoB,IAGjC3E,oBAAqB,SAAUtoI,GAC3B,GAAIrB,GAAO5G,KAAMm1I,EAAYz+I,EAAEuR,EAAIA,EAAE22B,cAAgB5+B,KAAKo1I,cAAeh1H,EAASxZ,EAAKyuI,gBAAgBF,GAAW,EAC7Gn1I,MAAKk1I,mBACNxrH,WAAW,WACFnsB,SAAS+3I,aAAexyI,EAASsd,EAAQloB,EAAMqa,oBAAqBtK,GAAMnF,EAASsd,EAAQnY,EAAE22B,iBAC9Fh4B,EAAK01E,MAAMl8D,IAEhB,GAEPpgB,KAAKk1I,mBAAoB,GAE7B5E,iBAAkB,WACd,GAAIiF,GAAev1I,KAAKo1I,YACpBG,IAAgBA,EAAa17I,SAAS89E,MACtC49D,EAAa5qF,YAAYgtB,IACzB33E,KAAKw1I,cAAgB,OAG7B/F,eAAgB,WACZ,GAA8EjpH,GAA1EzuB,EAAUiI,KAAKjI,QAAS09I,EAA2B,qBACvD19I,GAAQ4yD,YAAY,qCACpB5yD,EAAQuC,SAAS,yCAA2CuwI,GAAMvwI,SAASuwI,EAAO,IAAM7qI,KAAKI,QAAQ6vE,aACrGl4E,EAAQuvB,KAAK,WAAWzjB,OAAO,WAC3B,OAAQ3L,EAAMC,QAAQ8lB,gBAAgB9V,KAAKnI,KAAMy1I,KAClDn7I,SAAS,wBAAwB4I,KAAK,OAAQ,QAAQA,KAAK,cAAenL,EAAQgC,GAAG,aAAapC,MAAM2vB,KAAK,YAAYhtB,SAAS,aAAa4I,KAAK,WAAY,MACnKsjB,EAAQzuB,EAAQuvB,KAAK,2BACrBvvB,EAAQ4yD,YAAY,eACpBnkC,EAAM9oB,KAAK,WACPysI,EAAkBnqI,SAG1B2lF,YAAa,SAAU19E,GAAV,GACLrB,GAAO5G,KACPjI,EAAUrB,EAAEuR,EAAE22B,eACdoS,EAAcpqC,EAAK8uI,iBAAiB39I,GACpC0zI,EAAU1zI,EAAQyD,KAAKkwI,KAAsB3zI,EAAQ6B,SAAS4B,KAAKowI,IACnE+J,EAAevJ,EAAenkI,EAC9BwjI,KACA7kI,EAAKqqI,cAAcxF,GAAAA,IAAsB,GAEzCxjI,EAAE2tI,gBAAkB79I,EAAQ4L,QAAQ4pI,IAAc,IAAMtlI,EAAE2tI,gBAAkB79I,EAAQ4L,QAAQ,4CAA4C,KAGtIiD,EAAKxG,QAAQ0vI,cAAelpI,EAAKmpI,SAAa53H,GAAWw9H,GAAgB/uI,EAAKmuI,YAAYh9I,EAAQkgB,QAAQy1H,OACvG5qI,EAASmF,EAAE22B,cAAe32B,EAAE0jB,gBAAkBqlB,GAC/CpqC,EAAKy1E,KAAKtkF,IAGd6O,EAAKxG,QAAQ0vI,aAAelpI,EAAKmpI,SAAW53H,IAC5CpgB,EAAQunF,WAAW5hF,KAAKsI,EAAM,SAAU6vI,EAAG7iE,GACvCpsE,EAAK01E,MAAMtJ,GAAS,IACrBpsE,MAGXi/E,YAAa,SAAU59E,GAAV,GACLrB,GAAO5G,KACPjI,EAAUrB,EAAEuR,EAAE22B,eACdm1G,EAAch8I,EAAQyD,KAAKkwI,IAC3B16F,EAAcj5C,EAAQ4C,SAASmxI,IAA4Bl0I,QAAUG,EAAQ4C,SAAS6yI,IAAe51I,QAAUm8I,EAC/GpwE,EAAUjtE,EAAEC,OAIhB,OAHIo9I,UACOntI,GAAKqqI,cAAc8C,GAAAA,GAE1Bh8I,EAAQwmF,aAAautD,GAA4B,2CAA2C,IAC5F7jI,EAAE64D,2BACF,GAECl6D,EAAKxG,QAAQ0vI,aAAgB33H,GAAUi0H,EAAenkI,IAAOnF,EAASmF,EAAE22B,cAAe32B,EAAE0jB,eAAiB1jB,EAAEmY,UAAW4wB,GAAgBluC,EAASmF,EAAE22B,cAAe1mC,EAAMqa,qBAIvKtK,EAAE6tI,YAAc7tI,EAAE0jB,eAAiB1jB,EAAEwY,QAAU,GAAKxY,EAAEyY,QAAU,GAAKzY,EAAEyY,QAAUijD,EAAQzqE,UAAY+O,EAAEwY,QAAUkjD,EAAQ1qE,UAC1H2N,EAAK01E,MAAMvkF,GADf,IAHI6O,EAAK01E,MAAMvkF,GACX,IAMR04I,iBAAkB,SAAUxoI,GAAV,GAOVwjI,GANA7kI,EAAO5G,KACPysF,EAAe/1F,EAAEuR,EAAE22B,cACnB6tD,GAAa7yF,SAASG,GAAG+xI,MAG7Br/C,EAAeA,EAAa9xF,SAAS,MACjC8wI,EAAUh/C,EAAajxF,KAAKowI,IAC5BH,IACA7kI,EAAKqqI,cAAcxF,GAAAA,IAAsB;EAGjD+E,iBAAkB,SAAUvoI,GAAV,GACVrB,GAAO5G,KACPysF,EAAe/1F,EAAEuR,EAAE22B,gBAClBwtG,EAAenkI,IAAMwkF,EAAa1yF,GAAG+xI,KACtCllI,EAAKmvI,aAAatpD,EAAa9xF,SAAS,QAGhDo7I,aAAc,SAAUC,GAAV,GAMFC,GALJrvI,EAAO5G,KACPsrI,EAAkB1kI,EAAKwpI,mBACvB3E,EAAUuK,EAAUx6I,KAAKowI,GACzBH,WACO7kI,GAAKqqI,cAAcxF,GAAAA,GACtBwK,EAAc3K,EAAgBhkH,KAAK4jH,EAAoBO,IAC3D/hH,WAAW,WACP,GAAI9iB,EAAKxG,QAAQ0vI,YACblpI,EAAK8rI,kBAAkBsD,OAEvB,IAAIt/I,EAAEywB,cAAcvgB,EAAKqqI,eAAgB,CACrC,GAAIiF,GAAatvI,EAAKuvI,YAAYH,EAClCpvI,GAAKytI,mBAAmB6B,OAExBtvI,GAAK01E,MAAM25D,GAAa,IAGjC,KAGXvD,kBAAmB,SAAU/mI,GAAV,GACX/E,GAAO5G,KACPsrI,EAAkB1kI,EAAKwpI,kBAC3B15I,GAAE00I,EAAez/H,EAAS2/H,IAAkB5tI,KAAK,WAC7C,GAAIq2I,GAAczI,EAAgBhkH,KAAK4jH,EAAoBlrI,KAAKxE,KAAKowI,KACrEhlI,GAAK01E,MAAMy3D,GAAa,MAGhCoC,YAAa,SAAUxqI,GAAV,GACL2/H,GAAkBtrI,KAAKowI,mBACvBv4C,EAASuzC,EAAez/H,EAAS2/H,EACrC,OAAOzzC,GAAOA,EAAOjgG,OAAS,IAAM+T,GAExC0oI,mBAAoB,SAAU1oI,GAAV,GACZ/E,GAAO5G,KACPsrI,EAAkB1kI,EAAKwpI,mBACvB3E,EAAU9/H,EAAQnQ,KAAKowI,IACvBmI,EAAczI,EAAgBhkH,KAAK4jH,EAAoBO,GAG3D,KAFAA,EAAUsI,EAAYn6I,SAAS4B,KAAKowI,IACpChlI,EAAK01E,MAAMy3D,GAAa,GACjBtI,IAAY7kI,EAAKqqI,cAAcxF,KAC9BsI,EAAYn6I,SAASG,GAAGwzI,KAG5BwG,EAAczI,EAAgBhkH,KAAK4jH,EAAoBO,IACvD7kI,EAAK01E,MAAMy3D,GAAa,GACxBtI,EAAUsI,EAAYn6I,SAAS4B,KAAKowI,KAG5C1nG,OAAQ,SAAUj8B,GAEd,IAFI,GACamuI,GAAyYC,EAAYC,EAA+RC,EAiB7rBC,EAUAjqG,EA3BJ3lC,EAAO5G,KAAkBI,EAAUwG,EAAKxG,QAASggB,EAAS1pB,EAAEwB,EAAM2M,YAAYoD,IAAKo7D,EAAgBjjD,EAAO,GAAI/c,EAAW+c,EAAO,GAAKA,EAAO,GAAG/c,SAASnG,cAAgB,GAAIu5I,EAAuB,SAAZpzI,GAAmC,UAAZA,GAAoC,UAAZA,GAAoC,SAAZA,EAAqBgiG,EAAOjlF,EAAOnI,QAAQ,IAAMqyH,GAAOvyI,EAAUqoB,EAAOnI,QAAQy1H,IAAmBgJ,EAAc3+I,EAAQ,GAAIwL,EAAO8hG,EAAKniG,KAAK,QAAwCyzI,EAAav2H,EAAOld,KAAK,QAAS0zI,EAAalgJ,EAAE,kBAAoBwM,KAAK,QAAS2zI,IAAWtzI,GAAQA,IAASqzI,EAAYE,EAAcD,KAAYtzI,EAAKjL,MAAM,MAAOy+I,IAAiBJ,GAAcA,IAAeC,EAAYtL,EAAkB1kI,EAAKwpI,mBAC1qB/sE,GAAiBA,EAAc7kD,YAAck4H,GAChDrzE,EAAgBA,EAAc7kD,UAElC,KAAI9nB,EAAE2sE,GAAetpE,GAAGk0I,IAAxB,CAGA,GAAIl2I,EAAQ8B,SAAS69E,IAEjB,MADAzvE,GAAE9D,iBACF,CAeJ,IAbK8D,EAAEwmG,UAAW7nG,EAAKurH,eAAe/xG,EAAQs2H,IAAiBD,GAC3DxuI,EAAE9D,iBAEN8D,EAAEwmG,SAAU,EACZ4nC,EAAat+I,EAAQ4C,SAAS8yI,IAC1BnC,IACIkL,EAAez+I,EAAQyD,KAAKkwI,IAC5B8K,IACAH,EAAa/K,EAAgBhkH,KAAK6jH,EAAmBqL,MAG7DF,EAAoBD,EAAWt8I,GAAG,YAClCw8I,EAAyBn2I,EAAQ0vI,aAAewG,GAAqB1vI,EAAKmuI,YAAYh9I,GAClFqI,EAAQ4vI,gBAAkB6G,GAAUC,MAAkBT,EAAWz+I,QAAU2+I,GAU3E,MATAx+I,GAAQ4yD,YAAY2iF,IAAYr1I,IAAI,UACpC2O,EAAK4uI,cAAgB5uI,EAAKyuI,gBAAgBt9I,GACtCw0C,EAAO3lC,EAAKowI,cAAc3xC,EAAMz+F,EAAK7O,QAAS21I,IAClD9mI,EAAKouI,cAAgB1J,EACrB1kI,EAAK01E,MAAM/vC,GACX3lC,EAAKmpI,SAAU,EACX,cAAc7xI,QAAQ+J,EAAE/I,WACxB+I,EAAE9D,iBAEN,CAEA0yI,IAAU5uI,EAAEgvI,UACZ5xC,EAAK,GAAGrkF,SAENpa,EAAKmuI,YAAYh9I,IAAaqI,EAAQ0vI,aAAiB53I,EAAMC,QAAQggB,OAAWk0H,IAAezlI,EAAKmuI,YAAYh9I,EAAQkgB,QAAQy1H,QAGjImJ,GAAWJ,GAAaM,GACzB9uI,EAAE9D,iBAENyC,EAAKmpI,SAAU,EACfqG,EAAaC,EAAWt8I,GAAG,YAAcihF,EAAQD,GAC5C36E,EAAQ4vI,cAAgBoG,GAAcp7D,IAG3Cp0E,EAAKwvI,GAAYr+I,MAErBi/I,cAAe,SAAUhzI,EAAS1E,EAAKyE,GAAxB,GAKHJ,GACA3E,EALJssI,EAAkBtrI,KAAKowI,kBAC3B,OAAK9E,IAGG3nI,EAAUooI,EAAoB/nI,EAASsnI,GACvCtsI,KACJtI,EAAEiN,GAASjG,KAAK,WACZ,GAAI9D,GAASlD,EAAEsJ,KACf,QAAIpG,EAAOG,GAAGuF,KAGV1F,EAAOG,GAAGgK,IACV/E,EAAO8I,KAAK9H,MADhB,KAIGtJ,EAAEsI,IAbFgF,EAAQu6E,aAAaj/E,EAAKyE,IAgBzCouH,eAAgB,SAAU/xG,EAAQs2H,GAAlB,GACsCQ,GAK9CC,EACAC,EANArM,EAAgB3qH,EAAO5kB,KAAK,gBAUhC,OATIuvI,KACAmM,EAAsBl3I,KAAKq3I,cAAcj3H,GACzC2qH,EAAc5iI,KAAKnI,KAAMk3I,IAEzBC,EAA+BD,GAAuBA,EAAoB9yI,qBAC1EgzI,EAA2Bp3I,KAAK2zI,eAChCpnG,KAAMmqG,EACNx3I,KAAMugC,IAEH03G,GAAgCC,GAE3CC,cAAe,SAAUj3H,GACrB,GAAIgzD,IACAlrE,OAAQlI,KACRogB,OAAQA,EACRlZ,mBAAmB,EACnB/C,eAAgB,WACZnE,KAAKkH,mBAAoB,GAE7B9C,mBAAoB,WAChB,MAAOpE,MAAKkH,mBAGpB,OAAOksE,IAEXu9D,eAAgB,SAAU1oI,GACtB,GAAIrB,GAAO5G,IACP8C,IAAU8D,EAAKwpI,oBAAsBxpI,EAAK7O,SAAS,GAAIkQ,EAAEmY,UAG7DxZ,EAAKmpI,SAAU,IAEnBh4D,OAAQ,SAAU9vE,GACd,GAAIrB,GAAO5G,KAAMogB,EAASnY,EAAEmY,OAAQ+0H,EAAYvuI,EAAKwuI,aAAchuC,EAAS50F,GAC5E,OAAI4N,IAAUxZ,EAAKvN,QAAQ,IAAO3C,EAAE0pB,GAAQrmB,GAAG,oBAM3CqtG,IAAWn/F,EAAE22B,gBACTu2G,EAAUv9I,OACVgP,EAAK0wI,cAAenC,GACZvuI,EAAK4uI,eACb5uI,EAAK0wI,cAAe1wI,EAAKvN,QAAQsB,WAAWvD,UAJpD,IALI6Q,EAAEyiB,kBACFh0B,EAAE0pB,GAAQnI,QAAQ,cAAcA,QAAQ,iBAAiBA,QAAQ,WAAW3d,SAASq9E,IACrF/wE,EAAKvN,QAAQk7B,QACb,IAUR0jD,SAAU,SAAUhwE,GAChB,GAAkEmY,GAAQm3H,EAAmBvmG,EAAzFpqC,EAAO5G,KAAMjB,EAAMkJ,EAAEmuB,QAAS++G,EAAYvuI,EAAK4uI,cAAuDn3I,EAAQnG,EAAMC,QAAQkG,MAAMuI,EAAKvN,QAC3I,IAAI4O,EAAEmY,QAAUnY,EAAE22B,eAAiB7/B,GAAO4iB,EAAKM,IAA/C,CAQA,GALKkzH,IACDA,EAAYvuI,EAAK4uI,cAAgB5uI,EAAKwuI,cAE1CmC,EAAoB3wI,EAAK4wI,uBAAuBrC,GAChDnkG,EAAcpqC,EAAK8uI,iBAAiBP,GAChCp2I,GAAO4iB,EAAKS,MACZhC,EAASxZ,EAAKvI,EAAQ,YAAc,cAAc82I,EAAWoC,EAAmBvmG,OAC7E,IAAIjyC,GAAO4iB,EAAKO,KACnB9B,EAASxZ,EAAKvI,EAAQ,aAAe,aAAa82I,EAAWoC,EAAmBvmG,OAC7E,IAAIjyC,GAAO4iB,EAAKU,KACnBjC,EAASxZ,EAAK6wI,UAAUtC,EAAWoC,EAAmBvmG,OACnD,IAAIjyC,GAAO4iB,EAAKQ,GACnB/B,EAASxZ,EAAK8wI,QAAQvC,EAAWoC,EAAmBvmG,OACjD,IAAIjyC,GAAO4iB,EAAKM,IACnB7B,EAASxZ,EAAK+wI,SAASxC,EAAWoC,OAC/B,IAAIx4I,GAAO4iB,EAAKK,OAASjjB,GAAO4iB,EAAKa,SACxCpC,EAAS+0H,EAAUx6I,SAAS,WACxBylB,EAAOxoB,OAAS,IAChBgP,EAAKs9B,QACD9jB,OAAQA,EAAO,GACfjc,eAAgB,aAEhB8yI,UAAU,IAEdrwI,EAAK0wI,WAAWnC,EAAWvuI,EAAKyuI,gBAAgBF,SAEjD,IAAIp2I,GAAO4iB,EAAKI,IAInB,MAHA3B,GAASxZ,EAAKyuI,gBAAgBF,GAC9BvuI,EAAK0wI,WAAWnC,EAAW/0H,GAC3BxZ,EAAK2pI,sBACL,CAEAnwH,IAAUA,EAAO,KACjBnY,EAAE9D,iBACF8D,EAAEyiB,qBAGV0qH,WAAY,WACR,MAAOp1I,MAAK3G,QAAQiuB,KAAK,iDAAiDzjB,OAAO,aAErF2zI,uBAAwB,SAAUjrG,GAC9B,GAAIqrG,GAAiB53I,KAAK3G,QAAQQ,SAAS,kBAC3C,OAAK0yC,GAAK30C,OAGH20C,EAAK3yC,SAASC,SAAS,iBAAmB+9I,EAFtCA,GAIflC,iBAAkB,SAAUnpG,GACxB,SAAKA,GAASA,EAAK30C,QAAW20C,EAAK,GAAGrlB,YAG/BqlB,EAAK5xC,SAAS,8CAA8C/C,OAAS,KAAO20C,EAAK/wC,KAAKkwI,OAAwB1rI,KAAKowI,mBAAmBz1I,SAASwwI,EAAmB5+F,EAAK/wC,KAAKkwI,QAEvL4L,WAAY,SAAU/qG,EAAMsrG,GACxB,GAAIjxI,GAAO5G,KAAM6jB,EAAKjd,EAAKqrH,OACvB1lF,GAAK30C,QAAUigJ,EAASjgJ,QACxB20C,EAAKoe,YAAYgtB,IAEjBkgE,EAASjgJ,SACLigJ,EAAS,GAAGh0H,KACZA,EAAKg0H,EAAS,GAAGh0H,IAErBg0H,EAASv9I,SAASq9E,IAClB/wE,EAAK4uI,cAAgBqC,EACjBh0H,IACAjd,EAAK7O,QAAQqtB,WAAW,yBACxB1uB,EAAE,IAAMmtB,GAAIuB,WAAW,MACvByyH,EAAS30I,KAAK,KAAM2gB,GACpBjd,EAAK7O,QAAQmL,KAAK,wBAAyB2gB,IAE/Cjd,EAAKkxI,cAAcD,KAG3BxC,gBAAiB,SAAU9oG,GACvB,MAAIvsC,MAAK+0I,YAAYxoG,GACVA,EAEAvsC,KAAKg3I,cAAczqG,EAAMghG,GAAc,aAAaj+G,QAGnEylH,YAAa,SAAUxoG,GACnB,MAAOA,GAAK3yC,SAASC,SAASgxI,IAElCkN,WAAY,SAAUxrG,EAAMgrG,EAAmBvmG,GAAnC,GACS6mG,GAAUG,EAAY1M,EAgB3B0K,EAhBRpvI,EAAO5G,IACX,KAAIusC,EAAK1yC,SAAS69E,IA2BlB,MAxBK6/D,GAKMvmG,GACPpqC,EAAKy1E,KAAK9vC,GACVsrG,EAAWjxI,EAAKqxI,mBAAmB1rG,GAAM5xC,WAAWvD,SACjB,cAA5BwP,EAAKxG,QAAQ6vE,cACpB+nE,EAAapxI,EAAKyuI,gBAAgB9oG,GAClC++F,EAAkB1kI,EAAKwpI,mBACnB9E,IACI0K,EAAYnK,EAAUmM,EAAY1M,GACtC1kI,EAAK8rI,kBAAkBsD,IAE3BpvI,EAAK01E,MAAM07D,GACXH,EAAWG,EAAWnW,QAAQkM,MAf9B8J,EAAWtrG,EAAKs1F,QAAQkM,IACnB8J,EAASjgJ,SACVigJ,EAAWtrG,EAAKkjD,QAAQu+C,MAe5B6J,IAAaA,EAASjgJ,OACtBigJ,EAAWjxI,EAAKvN,QAAQsB,SAAS,WAAWvD,QACpCygJ,IACRA,MAEJjxI,EAAK0wI,WAAW/qG,EAAMsrG,GACfA,GAEXK,UAAW,SAAU3rG,EAAMgrG,GACvB,GAAiBM,GAAUvM,EAAvB1kI,EAAO5G,IAqBX,OApBKu3I,IAMDM,EAAWtrG,EAAK3yC,SAASqe,QAAQ,WACjCqzH,EAAkB1kI,EAAKwpI,oBAClByH,EAASjgJ,QAAU0zI,IACpBuM,EAAWlM,EAAgBp/F,EAAK3yC,SAAU0xI,IAE9C1kI,EAAK01E,MAAMu7D,GACPjxI,EAAKmuI,YAAY8C,IAAyC,cAA5BjxI,EAAKxG,QAAQ6vE,cAC3C4nE,EAAWA,EAASpoD,QAAQs+C,OAZhC8J,EAAWtrG,EAAKkjD,QAAQs+C,IACnB8J,EAASjgJ,SACVigJ,EAAWtrG,EAAKs1F,QAAQmM,MAa3B6J,EAASjgJ,SACVigJ,EAAWjxI,EAAKvN,QAAQsB,SAAS,WAAW20B,QAEhD1oB,EAAK0wI,WAAW/qG,EAAMsrG,GACfA,GAEXJ,UAAW,SAAUlrG,EAAMgrG,EAAmBvmG,GAC1C,GAAiB6mG,GAAbjxI,EAAO5G,IACX,IAAKu3I,EAQDM,EAAWtrG,EAAKs1F,QAAQkM,QARJ,CACpB,IAAK/8F,GAAezE,EAAK1yC,SAAS69E,IAC9B,MAEA9wE,GAAKy1E,KAAK9vC,GACVsrG,EAAWjxI,EAAKqxI,mBAAmB1rG,GAAM5xC,WAAWvD,QAW5D,OANKygJ,EAASjgJ,QAAU20C,EAAK30C,OACzBigJ,EAAWtrG,EAAK3yC,SAASe,WAAWvD,QAC5Bm1C,EAAK30C,SACbigJ,EAAWjxI,EAAKvN,QAAQsB,SAAS,WAAWvD,SAEhDwP,EAAK0wI,WAAW/qG,EAAMsrG,GACfA,GAEXH,QAAS,SAAUnrG,EAAMgrG,GACrB,GAAiBM,GAAbjxI,EAAO5G,IACX,IAAKu3I,EAWL,MARIM,GAAWtrG,EAAKkjD,QAAQs+C,KAEvB8J,EAASjgJ,QAAU20C,EAAK30C,OACzBigJ,EAAWtrG,EAAK3yC,SAASe,WAAW20B,OAC5Bid,EAAK30C,SACbigJ,EAAWjxI,EAAKvN,QAAQsB,SAAS,WAAW20B,QAEhD1oB,EAAK0wI,WAAW/qG,EAAMsrG,GACfA,GAEXC,cAAe,SAAUvrG,GAAV,GAGH4lD,GACAm1B,EACA6wB,EACA3yH,EACA4yH,EACAC,EACAC,EACAC,EACAnE,EACAoE,EACAC,EAOItG,EAnBRvrI,EAAO5G,IACP4G,GAAKxG,QAAQ8vI,YAAc3jG,GAAQA,EAAK30C,SACpCu6F,EAAK5lD,EAAK3yC,SACV0tH,IAAen1B,EAAGt4F,SAASgxI,IAAoC,cAA5BjkI,EAAKxG,QAAQ6vE,YAChDkoE,EAAY7wB,EAAe,aAAe,YAC1C9hG,EAAU8hG,EAAepvH,EAAMuB,YAAcvB,EAAMyB,aACnDy+I,EAAsBjmD,EAAGgmD,KACzBE,EAAW7yH,EAAQ+mB,GACnB+rG,EAAa/rG,EAAK,GAAG+6E,EAAe,aAAe,aACnDixB,EAAS/yH,EAAQ2sE,GACjBiiD,EAAgBjiD,EAAG7S,SAAS4uD,IAC5BsK,EAAmBpE,EAAcx8I,OAAS4tB,EAAQ4uH,EAAch9I,SAAW,EAE3EghJ,EAAsBG,EAASD,EAAaD,EAAWG,EACvDC,EAAeH,EAAaD,EAAWE,EAASC,EACzCJ,EAAsBE,EAAaE,IAC1CC,EAAeH,EAAaE,GAE3B/iI,MAAMgjI,KACHtG,KACJA,EAAUgG,GAAaM,EACvBtmD,EAAGmgD,SAAStxI,QAAQmxI,EAAW,OAAQ,SAAU,WAC7CvrI,EAAKyqI,qBAAqBl/C,EAAIiiD,EAAch9I,QAASg9I,EAAc9kH,OAAQg4F,QAK3FqwB,SAAU,SAAUprG,EAAMgrG,GACtB,GAAiBM,GAAbjxI,EAAO5G,IACX,OAAKu3I,IAGDM,EAAWtrG,EAAK3yC,SAASqe,QAAQ,WACjCrR,EAAK01E,MAAMu7D,GACXjxI,EAAK0wI,WAAW/qG,EAAMsrG,GAEnBA,GANItrG,GAQf0rG,mBAAoB,SAAU1rG,GAAV,GACZkgD,GAAelgD,EAAKjlB,KAAK,iBACzBjuB,EAAU2G,KAAKowI,kBAInB,QAHK3jD,EAAa70F,QAAUyB,IACxBozF,EAAeo/C,EAAUt/F,EAAMlzC,IAE5BozF,GAEXknD,cAAe,SAAU1rI,GACrB,GAAIrB,GAAO5G,IACX,OAAO4G,GAAKoB,QAAQC,EAAE/I,MAClBA,KAAM+I,EAAE/I,KACRqtC,KAAMtkC,EAAEskC,QAGhBimE,cAAe,SAAUvqG,GACrB,GAAIrB,GAAO5G,KAAMusC,EAAO71C,EAAEwB,EAAM2M,YAAYoD,IAAIgQ,QAAQy1H,GACpDnhG,GAAK1yC,SAAS69E,KAGlBhuD,WAAW,WACP9iB,EAAK0wI,cAAe/qG,GAChBA,EAAK5xC,SAAS,cAAc,IAC5B4xC,EAAK3yC,SAASqe,QAAQ,WAAW0yC,YAAYgtB,KAElD,MAEP+3D,YAAa,SAAUtvI,GACfA,GAAW,aAAeA,KAAYA,EAAQg8E,YAC9Ch8E,EAAQg8E,WACJC,MAAQt8E,YACRu8E,OACIx7E,MAAM,EACNf,gBAMpBW,GAAO6uI,IACH4D,WAAY,SAAU/yI,GAClBA,EAAUM,GACNg4I,QACA5qG,UACD1tC,EACH,IAAI0vC,GAAQwxC,GAAUxxC,MAAOvD,EAAOnsC,EAAQmsC,IAC5C,OAAO+0C,IAAU/0C,KAAK7rC,EAAON,GACzBiuI,MAAO9hG,EAAK8rC,SAAWiJ,GAAU+sD,MAAQv+F,EACzCw+F,OAAQ/hG,EAAK6rC,eAAiBkJ,GAAUgtD,OAASx+F,EACjDq+F,YAAa7sD,GAAU6sD,YACvBwK,cAAepJ,GAAKoJ,cACpBhyD,MAAOp6C,EAAK/lB,OAAS+lB,EAAKsvB,QAAUylB,GAAUqF,MAAQ72C,EACtD8oG,SAAUrJ,GAAK2D,aAChB3E,MAEP2E,YAAa,SAAU9yI,GACnB,MAAOkhF,IAAUxzC,MAAMptC,GACnBm4I,YAAa,SAAUz4I,GAEnB,IADA,GAAIsC,GAAO,GAAI5H,EAAI,EAAG0rB,EAAQpmB,EAAQomB,MAAOlC,EAAMkC,EAAQA,EAAM5uB,OAAS,EAAGk2C,EAAQptC,GAAS9I,OAAQ0sB,GAAOlkB,EAAQ0tC,OAC9GhzC,EAAIwpB,EAAKxpB,IACZ4H,GAAQ6sI,GAAK4D,WAAWzyI,EAAON,GAC3B0tC,MAAOA,EACPvB,KAAM7rC,GAASyR,MAAOrX,GAAK0rB,EAAM1rB,MAGzC,OAAO4H,KAEZtC,EAASmuI,MAEhBoK,cAAe,SAAUv4I,GACrB,MAAOkhF,IAAUzlB,QAAQn7D,EAAON,EAASmuI,QAG7C7B,EAAc6C,GAAK7uI,QACnBC,KAAM,SAAU5I,EAASqI,GACrB,GAAIwG,GAAO5G,IACXuvI,IAAKtrI,GAAGtD,KAAKwH,KAAKvB,EAAM7O,EAASqI,GACjCwG,EAAKkyI,QAAU5gJ,EAAMyrB,OAAOpsB,UAAU,EAAG,GACzCqP,EAAKwZ,OAAS1pB,EAAEkQ,EAAKxG,QAAQggB,QAC7BxZ,EAAKkyF,SACLlyF,EAAKmyI,SAETnJ,cAAe,SAAUxvI,GACrB,GAAIwG,GAAO5G,IACPI,GAAQ8vI,aAAetpI,EAAKwpI,qBAC5BxpI,EAAKqqI,iBACLrqI,EAAK0qI,gBAAkB1qI,EAAK7O,QAAQ6B,SAASG,GAAG+xI,IAA8BllI,EAAK7O,QAAQ6B,SAAWgN,EAAK7O,SAASe,KAAK,gCAAmCsH,EAAQ6vE,YAAc,YAAar2E,SAC/J,cAA5BgN,EAAKxG,QAAQ6vE,aACbw8D,EAAyB7lI,EAAK7O,SAE9BqI,EAAQ02B,UACR12B,EAAQ02B,SAASgtB,OAAOl9C,EAAK0qI,gBAEjC1qI,EAAK+tI,eAAiB/tI,EAAK7O,QAAQ,GAAG+B,MAAMZ,OAC5C0N,EAAKoyI,cAAgBpyI,EAAK7O,QAAQ,GAAG+B,MAAMb,QAGnDmH,SACI8O,KAAM,cACNrL,OAAQ,KACR4hF,OAAQ,cACRxV,YAAa,WACbgpE,eAAe,EACf74H,OAAQ,QAEZ1Y,QACIqzE,EACAC,EACAE,EACAD,EACAx7C,GAEJpa,WAAY,SAAUjlB,GAClB,GAAIwG,GAAO5G,IACXuvI,IAAKtrI,GAAGohB,WAAWld,KAAKvB,EAAMxG,GAC9BwG,EAAKwZ,OAAOwJ,IAAIhjB,EAAK6+E,OAAS5mB,EAAKj4D,EAAKkyI,QAASlyI,EAAKsyI,YAClDtyI,EAAKm6B,YACLn6B,EAAKm6B,WAAWjb,UAEpBlf,EAAKwZ,OAAS1pB,EAAEkQ,EAAKxG,QAAQggB,QACzBhgB,EAAQ6vE,aAAerpE,EAAKi3E,MAAMxkF,QAAQ,IAC1CuN,EAAKi3E,MAAM9lF,QAAQ0vG,SAEvB7gG,EAAKmyI,QACLxJ,GAAKtrI,GAAGohB,WAAWld,KAAKnI,KAAMI,IAElC0lB,QAAS,WACL,GAAIlf,GAAO5G,IACX4G,GAAKwZ,OAAOwJ,IAAIhjB,EAAKxG,QAAQqlF,OAAS5mB,EAAKj4D,EAAKkyI,SAChD1/D,GAAiBxvD,IAAI1xB,EAAMC,QAAQyoB,UAAYi+C,EAAKj4D,EAAKkyI,QAASlyI,EAAKuyI,aACnEvyI,EAAKm6B,YACLn6B,EAAKm6B,WAAWjb,UAEpBypH,GAAKtrI,GAAG6hB,QAAQ3d,KAAKvB,IAEzBy1E,KAAM,SAAUppD,EAAG5hB,GAAb,GAeci6H,GAEIlsI,EAhBhBwH,EAAO5G,IAiCX,OAhCAizB,GAAIv8B,EAAEu8B,GAAG,GACLnwB,EAAS8D,EAAK7O,QAAQ,GAAIrB,EAAEu8B,GAAG,KAAOrsB,EAAK8uI,iBAAiBh/I,EAAEu8B,IAC9Ds8G,GAAKtrI,GAAGo4E,KAAKl0E,KAAKvB,EAAMqsB,GAEpBrsB,EAAK+sI,eACDpnG,KAAM3lC,EAAK7O,QACXmH,KAAM67E,OACH,IACHn0E,EAAKi3E,MAAMr6E,WAAaoD,EAAKxG,QAAQyD,SACrC+C,EAAKi3E,MAAMvB,OAAM,GACjB11E,EAAKi3E,MAAM9lF,QAAQ4nB,WAAU,IAE7BtO,IAAMza,GACF00I,EAAkB1kI,EAAKwpI,mBACvB9E,IACIlsI,EAASksI,EAAgBlsI,SAC7B6zB,GAAK7zB,EAAOzG,KACZ0Y,GAAKjS,EAAOE,KAEhBsH,EAAKi3E,MAAMxkF,QAAQyH,OACnB8F,EAAKwyI,yBAAyBnmH,EAAG5hB,GACjCzK,EAAKi3E,MAAMxB,KAAKppD,EAAG5hB,KAEnBzK,EAAKi3E,MAAMz9E,QAAQ87E,QAAUjpD,EAAIA,EAAIrsB,EAAKi3E,MAAM3B,SAAWt1E,EAAKwZ,OAChExZ,EAAKi3E,MAAM9lF,QAAQ4nB,WAAU,GAC7B/Y,EAAKwyI,2BACLxyI,EAAKi3E,MAAMxB,QAEfjD,GAAiBxvD,IAAIhjB,EAAKi3E,MAAMjE,UAAWhzE,EAAKi3E,MAAMrB,iBACtDpD,GAAiB1zE,GAAGxN,EAAMC,QAAQyoB,UAAYi+C,EAAKj4D,EAAKkyI,QAASlyI,EAAKuyI,cAGvEvyI,GAEXwyI,yBAA0B,SAAUnmH,EAAG5hB,GAAb,GAClBzK,GAAO5G,KACP69E,EAAQj3E,EAAKi3E,MACbypC,EAA2C,cAA5B1gH,EAAKxG,QAAQ6vE,WAC5BrpE,GAAKxG,QAAQ8vI,aACbtpI,EAAKqtI,kBAAkBp2D,GACvBA,EAAM9lF,QAAQ6B,SAAS3B,KACnBo+D,SAAU,GACVn9D,OAAQ,KAEZ2kF,EAAM9lF,QAAQE,KACVi1E,WAAY,SACZ7tD,QAAS,GACTg3C,SAAU,KAEVixD,EACA1gH,EAAKyyI,eAAex7D,EAAOpoE,MAAMwd,GAAKr8B,GAClC0/D,SAAS,EACTrjC,EAAGA,EACH5hB,EAAGA,IAGPzK,EAAK0tI,gBAAgBz2D,EAAOpoE,MAAMwd,GAAKr8B,GACnC0/D,SAAS,EACTrjC,EAAGA,EACH5hB,EAAGA,IAGXwsE,EAAM9lF,QAAQE,KACVi1E,WAAY,GACZ7tD,QAAS,OACTg3C,SAAU,aAEdzvD,EAAKutI,wBAAwBt2D,EAAOypC,GAAc,GAClDzpC,EAAM9lF,QAAQunF,SAAS4uD,IAAsBptI,SAGrDu4I,eAAgB,SAAUx7D,EAAOvnB,GAAjB,GAIR56C,GACA49H,EACAC,EACAC,EACAp7I,EACApG,EACAyhJ,EACA/E,EAVAjoD,EAAe5O,EAAM9lF,QACrB8/F,EAASpL,EAAanrF,IAAImrF,EAAa7yF,OAAOkyI,IAClDj0C,GAAO5+F,MAAM+G,KAAKg5I,eAAiB,IAC/Bt9H,EAAWmiE,EAAML,UAAUlnB,GAC3BgjF,EAAc5iJ,EAAEC,QAAQsC,QACxBsgJ,EAAkB79H,EAASziB,MAC3BugJ,EAAkB56I,KAAKlG,IAAIgjB,EAAS/iB,KAAM,GAC1CyF,EAAak4D,EAAU,EAAI41E,EAAclsI,KAAKowI,mBAAmB,GAAI,cACrEp4I,EAASE,EAAMJ,WAAW20F,GAC1BgtD,EAAWH,EAActhJ,EAAOW,KAAOX,EAAOY,MAC9C87I,EAAS+E,EAAWr7I,EAAam7I,EAAkBC,EAClD9E,GACD78C,EAAO5/F,KACHkG,SAAU,SACVlF,MAAOwgJ,EAAWD,EAAkBp7I,EAAa,QAI7Dk+E,MAAO,WACH,GAAI11E,GAAO5G,IACP8C,GAAS8D,EAAK7O,QAAQ,GAAIrB,EAAEqE,UAAU,IAAI,KAAO6L,EAAK8uI,iBAAiB36I,UAAU,IACjFw0I,GAAKtrI,GAAGq4E,MAAMn0E,KAAKvB,EAAM7L,UAAU,IAE/B6L,EAAKi3E,MAAMr6E,WACPoD,EAAK+sI,eACDpnG,KAAM3lC,EAAK7O,QACXmH,KAAM87E,OACH,IACPp0E,EAAKi3E,MAAMvB,QACXlD,GAAiBxvD,IAAI1xB,EAAMC,QAAQyoB,UAAYi+C,EAAIj4D,EAAKuyI,aACxDvyI,EAAKiB,OAAO43B,EAAQ74B,EAAK8yI,sBAKzCC,aAAc,SAAU1xI,GACpB,GAAY7I,GAAR0+E,EAAK71E,EAAWrB,EAAO5G,KAAMI,EAAUwG,EAAKxG,OAC5C6H,GAAE0Q,QACFmlE,EAAK71E,EAAE0Q,MACPmlE,EAAG35C,MAAQl8B,EAAEgrB,EAAEvX,SACfoiE,EAAG15C,MAAQn8B,EAAEoJ,EAAEqK,UAEf5Y,EAAS8D,EAAK7O,QAAQ,GAAIkQ,EAAE0jB,eAAiB1jB,EAAEmY,UAGnDxZ,EAAKgzI,aAAe97D,EACpBA,EAAG35E,iBACH25E,EAAGhd,2BACHl6D,EAAK7O,QAAQuvB,KAAK,IAAMqwD,IAAchtB,YAAYgtB,KAC9Cv3E,EAAQyD,QAAU3L,EAAMC,QAAQ8lB,gBAAgB9V,KAAK21E,EAAGl/C,cAAex+B,EAAQyD,UAAYzD,EAAQyD,UAC/FzD,EAAQ64I,eACRryI,EAAKi3E,MAAMz9E,QAAQ87E,OAAS4B,EAAGl/C,cAC/Bh4B,EAAKy1E,KAAKyB,EAAGl/C,iBAEbh4B,EAAKi3E,MAAMz9E,QAAQ87E,OAAS4B,EAAGl/C,cAC3Bh4B,EAAKizI,cACLz6I,EAASwH,EAAKwZ,OAAOhhB,SACrBwH,EAAKy1E,KAAKyB,EAAG35C,MAAQ/kC,EAAOzG,KAAMmlF,EAAG15C,MAAQhlC,EAAOE,MAEpDsH,EAAKy1E,KAAKyB,EAAG35C,MAAO25C,EAAG15C,WAKvCi0D,cAAe,SAAUpwF,GAAV,GAGP6xI,GAFAlzI,EAAO5G,KAAMogB,EAAS1pB,EAAEuR,EAAE0jB,eAAiB1jB,EAAEmY,QAAS25H,EAAa35H,EAAOnI,QAAQrR,EAAKwZ,OAAOrc,UAAU,IAAM6C,EAAKwZ,OAAO,GAAImsB,EAAOnsB,EAAOnI,QAAQ21H,IAAejzI,EAAWiM,EAAK8uI,iBAAiBnpG,GAAO++F,EAAkB1kI,EAAKwpI,mBAAoB4J,EAAcl3I,EAAS8D,EAAK7O,QAAQ,GAAIqoB,EAAO,KAAOkrH,GAAmBxoI,EAASwoI,EAAgB,GAAIlrH,EAAO,GACvWxZ,GAAKgzI,aAAe3xI,EAChB6xI,EAA0B,IAAZ7xI,EAAE67B,MAChBl9B,EAAKi3E,MAAMr6E,YAAcs2I,GAAeC,IAAeA,KAAgBnzI,EAAKxG,QAAQ4vI,eAAiBr1I,GAAYq/I,IAAgBA,KAC7HA,GACAh6I,KAAK6H,OAAO43B,EAAQz/B,KAAK05I,oBACzB9yI,EAAKQ,KAAKq4B,EAAQ74B,EAAK8yI,qBAEvB9yI,EAAK01E,UAIjBy8D,MAAO,WACH,GAAInyI,GAAO5G,KAAMI,EAAUwG,EAAKxG,QAASggB,EAASxZ,EAAKwZ,MACvDxZ,GAAKsyI,WAAalzI,EAAMY,EAAK+yI,aAAc/yI,GAC3CA,EAAKuyI,YAAcnzI,EAAMY,EAAKyxF,cAAezxF,GAC7CA,EAAK8yI,mBAAqB1zI,EAAMY,EAAK01E,MAAO11E,GACxCwZ,EAAO,KACHloB,EAAMC,QAAQgf,UAA8B,eAAlB/W,EAAQqlF,QAClC7+E,EAAKm6B,WAAa,GAAI7oC,GAAM0pC,WAAWxhB,GACnCvc,OAAQzD,EAAQyD,OAChB6+B,gBAAgB,IAEpBtiB,EAAO1a,GAAGtF,EAAQqlF,OAAS5mB,EAAKj4D,EAAKkyI,SAAS,GAC9ClyI,EAAKm6B,WAAW35B,KAAK,OAAQR,EAAKsyI,aAE9B94I,EAAQyD,OACRuc,EAAO1a,GAAGtF,EAAQqlF,OAAS5mB,EAAKj4D,EAAKkyI,QAAS14I,EAAQyD,OAAQ+C,EAAKsyI,YAEnE94H,EAAO1a,GAAGtF,EAAQqlF,OAAS5mB,EAAKj4D,EAAKkyI,QAASlyI,EAAKsyI,cAKnEvF,cAAe,SAAU1rI,GACrB,GAAIrB,GAAO5G,KAAMk8E,EAASxlF,EAAEkQ,EAAKi3E,MAAMz9E,QAAQ87E,QAAQ,GAAI1kB,EAAS5wD,EAAKgzI,YAEzE,OADAhzI,GAAKgzI,aAAehjJ,EACbgQ,EAAKoB,QAAQC,EAAE/I,KAAMwB,GACxBxB,KAAM+I,EAAE/I,KACRqtC,KAAMtkC,EAAEskC,MAAQvsC,KAAKjI,QAAQ,GAC7BqoB,OAAQ87D,GACT1kB,GAAW7+C,MAAO6+C,SAEzBshC,OAAQ,WAAA,GACAlyF,GAAO5G,KACPsrI,EAAkB1kI,EAAKwpI,kBAC3BxpI,GAAKqzI,cAAgBj0I,EAAMY,EAAK+sI,cAAe/sI,GAC/CA,EAAKi3E,MAAQj3E,EAAK7O,QAAQuC,SAAS,kBAAkByyF,YACjD7Q,OAAQt1E,EAAKwZ,QAAU,OACvB08D,iBAAkBl2E,EAAKxG,QAAQ08E,iBAC/B5H,UAAWtuE,EAAKxG,QAAQ+vI,gBAAkB,MAC1C/zD,UAAWx1E,EAAKxG,QAAQg8E,UACxBoK,SAAU5/E,EAAKqzI,cACf12D,WAAY38E,EAAKqzI,cACjBnjH,SAAUw0G,GAAmB1kI,EAAKxG,QAAQ02B,SAC1CwlD,MAAQgvD,EAA2B,SAAUrjI,GACzCvR,EAAE00I,EAAenjI,EAAEC,OAAOnQ,QAASuzI,IAAkB5tI,KAAK,SAAU5C,EAAGwgH,GACnE,GAAIz9B,GAAQy9B,EAAE9/G,KAAK6xI,GACfxvD,IACAA,EAAMvB,OAAM,MAJE5lF,EAAEkK,OAQ7BpF,KAAK6xI,IACRzmI,EAAKizI,aAAe/2I,EAAS8D,EAAKwZ,OAAO,GAAIxZ,EAAKi3E,MAAM9lF,QAAQ,OAGxEspB,EAAG8G,OAAOonH,IACVluH,EAAG8G,OAAOukH,IACZ/1I,OAAOuB,MAAM2sB,QACRluB,OAAOuB,OACE,kBAAVzB,SAAwBA,OAAOgiC,IAAMhiC,OAAS,SAAUiiC,EAAIC,EAAIC,IACrEA,GAAMD,OAEV,SAAUniC,EAAGC,QACVA,OAAO,kBAAmB,cAAeD,IAC3C,WA0rCE,MA9qCC,UAAUE,EAAGE,GAuEV,QAAS8zI,GAAgBlkH,GACrBA,EAAQ9vB,EAAE8vB,GACVA,EAAM3iB,OAAO,8BAA8B8mD,YAAYmuB,GACvDtyD,EAAM3iB,OAAO,4BAA4B8mD,YAAYsuB,GACrDzyD,EAAM3iB,OAAO,gBAAgBvJ,SAASw+E,GACtCtyD,EAAM3iB,OAAO,eAAevJ,SAAS2+E,GAEzC,QAASihE,GAAe3tG,GACpB,GAAIlzC,GAAUkzC,EAAMuB,EAAQvB,EAAK5xC,SAAS,MAAOw/I,EAAe9gJ,EAAQsB,SAAS,WAAWA,SAAS,UACjG4xC,GAAK1yC,SAAS,iBAGbsgJ,EAAaviJ,QAAUk2C,EAAMl2C,OAC9BuiJ,EAAezjJ,EAAE,2BAA6BogC,SAASz9B,GAC/Cy0C,EAAMl2C,QAAWk2C,EAAMnzC,WAAW/C,SAC1CuiJ,EAAajyH,SACb4lB,EAAM5lB,WAvFjB,GACOhwB,GAAQvB,OAAOuB,MAAOmpB,EAAKnpB,EAAMmpB,GAAIM,EAAOzpB,EAAMypB,KAAMjhB,EAAShK,EAAEgK,OAAQsF,EAAQtP,EAAEsP,MAAOtI,EAAOhH,EAAEgH,KAAMqI,EAAUrP,EAAEqP,QAAStD,EAAWvK,EAAMuK,SAAUuC,EAASqc,EAAGrc,OAAQrJ,EAAyBzD,EAAMsD,KAAKG,uBAAwB6uI,EAAsB,gBAAiB3rE,EAAK,iBAAkBurE,EAAM,MAAOgQ,EAAO,OAAQnhE,EAAO,SAAUqxD,EAAO,SAAU+P,EAAe,IAAM/P,EAAMh4F,EAAQ,QAASgoG,EAAO,UAAWC,EAAQ,WAAYC,EAAeD,EAAQ,WAAYlQ,EAAQ,UAAWvxD,EAAQ,UAAWr/C,EAAS,SAAUghH,EAAS,SAAUh7G,EAAS,SAAUi7G,EAAU,YAAax/D,EAAW,WAAYy/D,EAAW,WAAY/f,EAAY,YAAan4B,EAAa,aAAckC,EAAa,aAAc7f,EAAc,cAAe1oF,EAAY,YAAaw+I,EAAc,iBAAkBC,EAAS,aAAcC,EAAW,eAAgBt6I,EAAS,SAAUq3G,EAAe,kBAAmBkjC,EAAgB,mBAAoBC,EAAgB,mBAAoBC,EAAmB,IAAMD,EAAeE,EAAiB,oBAAqBC,EAAqBb,EAAO,0BAA2Bc,EAAiB,KAAOD,EAAqB,MAAQd,EAAe,gBAAkBc,EAAqB,MAAQd,EAAcgB,EAAgBf,EAAO,8BAA+BgB,EAAkB,UAAYL,EAAmB,qBAAuBA,EAAkBM,EAAe,kBAAmBz2C,EAAgB,gBAAiBoJ,EAAgB,gBAAiBC,GAAc,cAAepJ,GAAgB,gBAAiBtpB,GAAU,WAAYzsE,GAAQ,SAAUwsI,GAAS,SAAU50F,IACnkDxxB,KAAM,gBACNjS,IAAK,eACLi1D,eAAgB,0BAChBC,SAAU,qBACDk2D,IACT14D,KAAM,SAAUtpC,GACZ,GAAIrpC,GAAO,EAOX,QANIqpC,EAAK/lB,OAAS+lB,EAAKsvB,SAAWtvB,EAAKkvG,YAAclvG,EAAK8iG,YACtDnsI,GAAQgrG,EAAgB,MAAS3hE,EAAK8iG,SAAW,OAAS,SAAW,MAErE9iG,EAAKntB,WAAY,IACjBlc,GAAQ4hG,EAAgB,WAErB5hG,GAEXsrI,gBAAiB,SAAU1gG,EAAOvB,GAC9B,GAAIvtC,GAAS,SAAUmT,EAAQo6B,EAAKp6B,KAiBpC,OAfInT,IADAutC,EAAKntB,WAAY,EACP,IAAM27H,EACTxuG,EAAK8iG,YAAa,EACf,IAAMuL,EAEN,mBAEA,IAAVzoI,IACAnT,GAAU,YAEVmT,GAAS27B,EAAMl2C,OAAS,IACxBoH,GAAU,WAEVutC,EAAKpvB,WACLne,GAAU,IAAMutC,EAAKpvB,UAElBne,GAEXgwI,UAAW,SAAUziG,EAAMuB,GACvB,GAAI9uC,GAASsrI,CAIb,OAHIx8F,GAAM2gG,aACNzvI,GAAU,aAEPA,GAEXiwI,eAAgB,SAAU9rH,GACtB,MAAOA,GAAM,UAAaA,EAAM,IAAO,IAE3C+rH,WAAY,SAAU3iG,GAClB,GAAIvtC,GAAS,QAEb,OADAA,IAAUutC,EAAK8iG,SAAW,mCAAqC,kCAGnEj6G,KAAM,SAAUmX,GACZ,MAAOA,GAAK4iG,WAAY,EAAQ5iG,EAAKnX,KAAOl9B,EAAMqJ,WAAWgrC,EAAKnX,OAEtEg6G,gBAAiB,SAAUthG,GACvB,MAAOA,GAAMuhG,YAAa,EAAO,wBAA4B,IAEjEC,cAAe,WACX,MAAO,mBAEXoM,kBAAmB,SAAU7/E,GACzB,MAAOA,GAAQtvB,KAAK8iG,YAAa,EAAO,wBAA4B,IAExExzE,QAAS,SAAUtvB,GACf,MAAOA,GAAKsvB,QAAUtvB,EAAKsvB,QAAUtvB,EAAKkvG,WAAa,GAAK,UAEhEA,WAAY,SAAUlvG,GAClB,MAAOA,GAAKkvG,WAAa,SAAWlvG,EAAKkvG,WAAa,IAAM,KA9DjEE,GAoFI,SAAUpvG,GACjB,MAAOA,GAAK5xC,SAAS,QAAQA,SAAS,YAEtCihJ,GAAW1jJ,EAAMmpB,GAAGpc,gBAAgBvE,QACpCC,KAAM,SAAU5I,EAASqI,GACrB,GAAiBy7D,GAASo/C,EAAtBr0G,EAAO5G,IACP+F,GAAQ3F,KACRA,GAAYwkB,WAAYxkB,IAE5B66G,EAAgB76G,KAAaA,EAAQwkB,WACrC5f,EAAOf,GAAGtD,KAAKwH,KAAKvB,EAAM7O,EAASqI,GACnCrI,EAAU6O,EAAKvN,QAAUuN,EAAK7O,QAAQuC,SAAS,wCAC/C8F,EAAUwG,EAAKxG,QACXrI,EAAQ,GAAG8rB,KACXjd,EAAKw0H,QAAUrjI,EAAQ,GAAG8rB,GAAK,cAEnCjd,EAAKqe,YACLre,EAAK6rF,aACL7rF,EAAK49C,cACL59C,EAAK82F,aACL92F,EAAK4oI,UAAUv0B,GACfr0G,EAAK6oI,iBACL7oI,EAAK8oI,YAAYtvI,GACjBrI,EAAQ2N,GAAG,QAAUm5D,EAAIu8E,EAAgB,SAAUnzI,GAC3CrB,EAAKs9B,OAAOxtC,EAAEuR,EAAE22B,iBAChB32B,EAAE9D,mBAEPuB,GAAG+8F,EAAa5jC,EAAK,IAAM8lC,EAAa9lC,EAAIu8E,EAAgBx0I,EAAKoyF,cAActzF,GAAG,QAAUm5D,EAAIw8E,GAAe,GAAO31I,GAAG,QAAUm5D,EAAI,mBAAoB74D,EAAMY,EAAKi1I,cAAej1I,IAAOlB,GAAG,UAAYm5D,EAAInoE,EAAEsP,MAAMY,EAAKqxE,SAAUrxE,IAAOlB,GAAG,QAAUm5D,EAAI,WAC7P,GAAItyB,GAAO3lC,EAAKkuB,QAChBluB,GAAK63F,SAASlyD,EAAK,GAAKA,EAAO3lC,EAAKk1I,YACrCp2I,GAAG,OAASm5D,EAAI,WACfj4D,EAAK63F,SAAS,QACfv7F,KAAK,OAAQ,QAChB24D,EAAU9jE,EAAQuvB,KAAK,MAAQszH,EAAc,OAASF,GAClD7+E,EAAQ,IACRj1D,EAAKm1I,OAAOlgF,EAAQjiE,UAAU,GAE7BwG,EAAQwkB,YACThe,EAAKo1I,kBAET9jJ,EAAM0uB,OAAOhgB,IAEjBc,QACI+yI,EACAE,EACAl7G,EACAy7C,EACAzhD,EACA6Y,EACAsoF,EACA91C,GAEJ1kF,SACI8O,KAAM,WACN0V,cACAw3D,WACI2/D,QACIh8I,QAAS,kBACTM,SAAU,KAEds0B,UAAYt0B,SAAU,MAE1BqhB,UACIsG,QAAS,aACTi0H,cAAe,kBACfC,MAAO,SAEXlzF,UAAU,EACVmzF,cAAc,EACdC,WAAY,WACZpwF,cAAe,MAEnBgwF,gBAAiB,WACb,GAAIp1I,GAAO5G,IACX4G,GAAKke,QAAQ,UAAW,WACpB,OACIyB,SAAU3f,EAAK7O,QAAQ4C,SAAS,MAChCa,OAASirB,SAAU7f,EAAKxG,QAAQuzF,eAI5C0oD,wBAAyB,SAAU35I,EAAM8jB,GACrC,GAAI5f,GAAO5G,IACX4G,GAAKke,QAAQ,UAAW,WACpB,OACIyB,SAAU7jB,EACVlH,KAAM9E,EAAEsc,IAAIwT,EAAO,SAAU+lB,GACzB,QAAU9lB,SAAU8lB,UAKpC+vG,gBAAiB,WACb,GAAI11I,GAAO5G,IACX4G,GAAKke,QAAQ,UAAW,WACpB,OAASyB,SAAU3f,EAAK7O,QAAQ4C,SAAS,UAGjDmrB,QAAS,WACL9gB,EAAOf,GAAG6hB,QAAQ3d,KAAKnI,MACvBA,KAAKjI,QAAQ6xB,IAAIi1C,GACjB7+D,KAAKs8I,kBACLpkJ,EAAM4tB,QAAQ9lB,KAAKjI,UAEvBy3I,UAAW,SAAUv0B,GACjB,GAAIr0G,GAAO5G,IACPi7G,KACAr0G,EAAK7O,QAAQ+3C,QACTlpC,EAAKxG,QAAQ4oD,WACbpiD,EAAKg1H,WAAU,GACfh1H,EAAKge,WAAWs8B,WAI5Bw8C,WAAY,WACR,GAAI92F,GAAO5G,KAAMI,EAAUwG,EAAKxG,QAASm8I,EAAgBv2I,EAAMY,EAAK41I,eAAgB51I,EAChFxG,GAAQqC,gBAAmBrC,GAAQqC,UAAYjC,EAC/CJ,EAAQqC,SAAWA,EAASrC,EAAQqC,UAC5BrC,EAAQqC,WAChBrC,EAAQqC,SAAWA,EAAS,gBAAkB85I,EAAc,QAAU,sIAE1E31I,EAAK06E,WACDzlB,QAASp5D,EAAS,6FAClBqrC,MAAOrrC,EAAS,gIAChB0rI,YAAa1rI,EAAS,eAAiB85I,EAAc,OAAS,6BAAoCA,EAAc,YAAc,mCAA0CA,EAAc,kBAAoB,oZAC1MhwG,KAAM9pC,EAAS,6EAAmFvK,EAAMgL,KAAK,OAAS,wQACtH8kB,QAASvlB,EAAS,iGAClBy5I,MAAOz5I,EAAS,+GAChBkkF,MAAOlkF,EAAS,+CAChBqtC,MAAOrtC,EAAS,MAGxB4iB,WAAY,SAAUjlB,GAClB,GAAIg8E,GAAYp8E,KAAKI,QAAQg8E,SAC7Bp8E,MAAK0vI,YAAYtvI,GACjBA,EAAQg8E,UAAY17E,GAAO,EAAM07E,EAAWh8E,EAAQg8E,WAChD,cAAgBh8E,IAChBJ,KAAKu6E,cAAcn6E,EAAQwkB,YAE/B5f,EAAOf,GAAGohB,WAAWld,KAAKnI,KAAMI,IAEpC27I,OAAQ,SAAUhkJ,EAAS0kJ,GACvB,GAAI71I,GAAO5G,KAAM08I,IAEjB,OADA3kJ,GAAUiI,KAAKjI,QAAQuvB,KAAKvvB,GACxB6O,EAAK+1I,YAAc5kJ,EAAQuvB,KAAK,MAAMvtB,GAAG,aACzC6M,EAAKW,IAAI,WAAY,WACjBmiB,WAAW,WACP9iB,EAAKm1I,OAAOhkJ,OAGpB,IAEJ6O,EAAK+1I,YAAa,EAClBF,EAAeA,KAAiB,EAChC1kJ,EAAQ2F,KAAK,SAAUyU,EAAOo6B,GAAjB,GAELlzC,GAIAugD,CACJ,IANArN,EAAO71C,EAAE61C,GACLlzC,EAAUtB,EAAQ4C,SAAS,uBAC1BtB,EAAQzB,SACTyB,EAAUuN,EAAKg2I,iBAAiB7kJ,IAEhC6hD,EAASvgD,EAAQiI,IAAIirC,EAAKjlB,KAAKwzH,KAC9BvuG,EAAK1yC,SAASkhJ,IAAkBnhG,EAAOhiD,OAAS,EAAG,CACpD,GAAIgP,EAAKxG,QAAQg8I,YAAcZ,IAAU50I,EAAKi2I,qBAAqBtwG,GAC/D,MAAO3lC,EAEX7O,GAAQuvB,KAAK,IAAM4zH,GAAgBvwF,YAAYuwF,GAC/C3uG,EAAKjyC,SAAS4gJ,GACTuB,IACDC,EAAa91I,EAAKxG,QAAQg8E,UAC1Bx1E,EAAKxG,QAAQg8E,WACT2/D,QAAUh8I,YACV40B,UACI7zB,MAAM,EACNf,cAIP6G,EAAK+sI,cAAc8G,EAAQluG,IAC5B3lC,EAAKk2I,YAAYvwG,GAAM,GAAO,GAE7BkwG,IACD71I,EAAKxG,QAAQg8E,UAAYsgE,MAI9B91I,IAEX+tB,SAAU,SAAU58B,EAAS0kJ,GACzB,GAAI71I,GAAO5G,KAAM08I,IA2BjB,OA1BA91I,GAAK+1I,YAAa,EAClBF,EAAeA,KAAiB,EAChC1kJ,EAAU6O,EAAK7O,QAAQuvB,KAAKvvB,GAC5BA,EAAQ2F,KAAK,SAAUyU,EAAOo6B,GAC1BA,EAAO71C,EAAE61C,EACT,IAAIqN,GAASrN,EAAKjlB,KAAKuzH,GAAQv5I,IAAIirC,EAAKjlB,KAAKwzH,KACxCvuG,EAAK1yC,SAASkhJ,IAAkBnhG,EAAO7/C,GAAG0hF,MAC3ClvC,EAAKoe,YAAYuwF,GACZuB,IACDC,EAAa91I,EAAKxG,QAAQg8E,UAC1Bx1E,EAAKxG,QAAQg8E,WACT2/D,QAAUh8I,YACV40B,UACI7zB,MAAM,EACNf,cAIP6G,EAAK+sI,cAAcgH,EAAUpuG,IAC9B3lC,EAAKk2I,YAAYvwG,GAAM,GAEtBkwG,IACD71I,EAAKxG,QAAQg8E,UAAYsgE,MAI9B91I,GAEX6jI,YAAa,SAAUjkH,GACnB,GAAI5f,GAAO5G,IACXwmB,GAAQ9vB,EAAE8vB,GACVA,EAAM7rB,SAAS0/I,GAAc1/I,SAAS,4CAA4CutB,SAClF1B,EAAM3iB,OAAO,WACT,GAAI4iB,GAAW7f,EAAK6f,SAASzmB,KAC7B,OAAKymB,GAGEA,EAASuqB,aAAevqB,EAASo1C,SAAWp1C,EAASg1H,WAFjD/kJ,EAAEsJ,MAAMsnB,KAAK,YAAY1vB,OAAS,GAAKlB,EAAEsJ,MAAMsnB,KAAK,cAAc1vB,OAAS,IAGvF+C,SAAS,yCAAyC+C,KAAK,WACtD,GAAI6uC,GAAO71C,EAAEsJ,MAAOpG,EAAS2yC,EAAK3yC,QAClC2yC,GAAKuX,OAAO,wBAA2BlqD,EAAOC,SAAS+gJ,GAAe,mCAAqC,kCAAoC,UAGvJnoD,WAAY,WACR,GAAyC33F,GAAGijB,EAAO2yB,EAA/C9pC,EAAO5G,KAAMI,EAAUwG,EAAKxG,QAA8BrI,EAAU6O,EAAK7O,OAC7E,KAAK+C,IAAK8rD,IACN7oC,EAAQ3d,EAAQwmD,GAAS9rD,IACzB41C,EAAY34C,EAAQmL,KAAKhL,EAAMgL,KAAKpI,EAAI,YACnCijB,GAAS2yB,IACV3yB,EAAQ2yB,GAEP3yB,IACDA,EAAQjjB,GAEPiL,EAAQgY,KACTA,GAASA,IAEb3d,EAAQwmD,GAAS9rD,IAAMijB,GAG/B69G,UAAW,SAAUrvF,EAAMwwG,GAAhB,GACHhlJ,GAAUiI,KAAKjI,QACfilJ,EAAch9I,KAAKshF,UAAUt5D,SAAUtG,SAAU1hB,KAAKI,QAAQshB,UAC1C,IAApB3mB,UAAUnD,QACVmlJ,EAAexwG,EACXwwG,EACAhlJ,EAAQ2K,KAAKs6I,GAEbjlJ,EAAQ+3C,SAGZ6rG,GAASpvG,GAAMnrC,YAAY,cAAe27I,GAAcpyF,YAAY,gBAG5EsyF,aAAc,SAAUz2H,GAAV,GASN02H,GARAt2I,EAAO5G,KACPpG,EAASgN,EAAK7O,QACdk7I,GACAxE,YAAY,EACZY,UAAU,EACVz3I,OAAQgC,EAAOe,WAAW/C,OAE9BoI,MAAKjI,QAAQ+3C,QACTotG,EAAgBxmJ,EAAEsc,IAAIwT,EAAO,SAAU5oB,EAAOD,GAC9C,MAAqB,gBAAVC,GACAlH,EAAEkH,IAETA,EAAM4oB,SACC9vB,EAAEkQ,EAAKusI,YACVrlG,MAAOmlG,EACP1mG,KAAM7rC,EAAO9C,GAASuU,MAAOxU,UAIzCqC,KAAKjI,QAAQ+rD,OAAOo5F,GACpBl9I,KAAKq8I,wBAAwBa,EAAe12H,IAEhD22H,iBAAkB,SAAU5wG,EAAM/tB,GAAhB,GACV1jB,GAAGH,EAAU42B,EAEb/K,CACJ,IAFAhI,EAAW7jB,SAAS,YAAYm1C,QAC5BtpB,EAAQ+lB,EAAK5xC,SAASa,OACrBgrB,EAAM5uB,OAUP,IALAoI,KAAK8jD,OAAOvX,EAAK5xC,SAAU6jB,GACvBxe,KAAKI,QAAQ+7I,cACbn8I,KAAKo9I,aAAa5+H,EAAW7jB,SAAS,aAAa,GAEvDA,EAAW6jB,EAAW7jB,SAAS,YAAYA,SAAS,MAC/CG,EAAI,EAAGA,EAAIH,EAAS/C,OAAQkD,IAC7By2B,EAAQ52B,EAASouB,GAAGjuB,GACpBkF,KAAKgI,QAAQ,cACTukC,KAAMhb,EACN/1B,KAAMwE,KAAKymB,SAAS8K,GACpBtvB,GAAIof,QAdZ64H,GAAe17H,GACf7jB,EAAW6jB,EAAW7jB,SAAS,YAAYA,SAAS,MACpDqF,KAAKq8I,wBAAwB1hJ,EAAU6rB,IAiB/C62H,UAAW,SAAUzuG,GAAV,GAGH5vC,GACKlE,EAHL0rB,EAAQxmB,KAAKjI,QAAQuvB,KAAK,WAC1Bg2H,EAAUplJ,EAAMgL,KAAK,MAEzB,KAASpI,EAAI,EAAGA,EAAI0rB,EAAM5uB,OAAQkD,IAC9B,GAAI0rB,EAAM1rB,GAAGkH,aAAas7I,IAAY1uG,EAAK,CACvC5vC,EAASwnB,EAAM1rB,EACf,OAGR,MAAOpE,GAAEsI,IAEbwY,QAAS,SAAUvP,GAAV,GA6BQwB,GAEG8zI,EA9BZn9I,EAAUJ,KAAKI,QACfuxB,EAAO1pB,EAAE0pB,KACTgF,EAAS1uB,EAAE0uB,OACXnQ,EAAQve,EAAEue,MACVhI,EAAaxe,KAAK3G,QAClB8iJ,EAAe/7I,EAAQ+7I,YAC3B,IAAIl0I,EAAE8V,MAAO,CACT,IAAKyI,EAAM,KAAOA,EAAM,GAAGw9B,MACvB,MAEJ,OAAOhkD,MAAKw9I,aAAah3H,EAAOve,EAAE8V,OAiBtC,GAfI4T,IACAnT,EAAaxe,KAAKq9I,UAAU1rH,EAAKid,KACjC5uC,KAAK47H,UAAUp9G,GAAY,IAEjB,OAAVmY,EACA32B,KAAKy9I,aAAax1I,EAAEkK,MAAOqU,EAAOhI,GACjB,UAAVmY,EACP32B,KAAKkoB,OAAOloB,KAAKq9I,UAAU72H,EAAM,GAAGooB,MACnB,cAAVjY,EACP32B,KAAKw9I,aAAah3H,GACD,cAAVmQ,EACP32B,KAAKm9I,iBAAiBxrH,EAAMnT,GAE5Bxe,KAAKi9I,aAAaz2H,GAER,UAAVmQ,EACA,IAASltB,EAAI,EAAGA,EAAI+c,EAAM5uB,OAAQ6R,IACzB0yI,IAAgB31H,EAAM/c,GAAG4lI,WACtBkO,EAAW/2H,EAAM/c,GACjBzJ,KAAK09I,eAAeH,IACpBA,EAASr5F,OAKzBlkD,MAAKgI,QAAQ4yH,GAAajpG,KAAMA,EAAOnT,EAAa5nB,KAExDilI,OAAQ,SAAU5zH,GAAV,GACA0pB,GAAO1pB,EAAE0pB,MAAQ3xB,KAAKq9I,UAAUp1I,EAAE0pB,KAAKid,KACvC+uG,EAAY39I,KAAKshF,UAAU46D,OAAQx6H,SAAU1hB,KAAKI,QAAQshB,UAC1DiQ,IACA3xB,KAAK47H,UAAUjqG,GAAM,GACrB3xB,KAAK49I,UAAUjsH,GAAM,GACrBgqH,GAAShqH,GAAMr3B,SAAS,eACxB2N,EAAE0pB,KAAKoyB,QAAO,KAEd/jD,KAAK47H,WAAU,GACf57H,KAAKjI,QAAQ2K,KAAKi7I,KAG1B9B,cAAe,SAAU5zI,GACrBA,EAAE9D,iBACFnE,KAAK4kB,WAAWs8B,SAEpB16B,MAAO,WACH,MAAOxmB,MAAKjI,QAAQuvB,KAAK,+BAE7BizD,cAAe,SAAU31D,GACrB,GAAIxkB,GAAUJ,KAAKI,OACnBA,GAAQwkB,WAAaA,EACrB5kB,KAAKwkD,cACDxkD,KAAKI,QAAQ4oD,WACbhpD,KAAK47H,WAAU,GACf57H,KAAK4kB,WAAWs8B,UAGxBkgF,gBAAiB,WACbphI,KAAK25E,gBAAkB3zE,EAAMhG,KAAKwX,QAASxX,MAC3CA,KAAK65F,cAAgB7zF,EAAMhG,KAAK67H,OAAQ77H,MACxCA,KAAK4kB,WAAWxd,KAAKqyB,EAAQz5B,KAAK25E,iBAClC35E,KAAK4kB,WAAWxd,KAAKkrC,EAAOtyC,KAAK65F,gBAErCzD,kBAAmB,WACf,GAAIxxE,GAAa5kB,KAAK4kB,UAClBA,KACAA,EAAW/c,OAAO4xB,EAAQz5B,KAAK25E,iBAC/B/0D,EAAW/c,OAAOyqC,EAAOtyC,KAAK65F,iBAGtC2iD,eAAgB,SAAU1xG,GACtB,GAAI+yG,GAAgB79I,KAAKI,QAAQwmD,GAAS9b,QAAmBp3B,EAAQmqI,EAAcjmJ,OAAQoH,EAAS,mBAWpG,OAVc,KAAV0U,EACA1U,GAAU,gBAAmB8rC,EAAY,OAEzC9rC,GAAU,iBAAmBtI,EAAEsc,IAAI6qI,EAAe,SAAU5qH,GACxD,MAAO,uBAAyB/6B,EAAMuL,KAAKwvB,GAAK,MACjD/7B,KAAK,KAAO,KACf8H,GAAU,uDAAyD0U,EAAQ,mBAC3E1U,GAAU,kBAAoB0U,EAAQ,cAE1C1U,GAAU,MAGdwlD,YAAa,WACT,GAAI59C,GAAO5G,KAAMI,EAAUwG,EAAKxG,QAASwkB,EAAaxkB,EAAQwkB,UACzDA,KAGLA,EAAa7e,EAAQ6e,IAAgBppB,KAAMopB,GAAeA,EAC1Dhe,EAAKwvF,oBACAxxE,EAAWykB,SACZzkB,EAAWykB,SACLtrB,MAAO,SACPA,MAAO,QACPA,MAAO,mBACPA,MAAO,cAGjBnX,EAAKge,WAAajpB,EAAuB0sC,OAAOzjB,GAChDhe,EAAKw6H,oBAETqc,aAAc,SAAUtrI,EAAOqU,EAAOhI,GAAxB,GACO7jB,GAAUtB,EAWvB45I,EAKA6K,EAaKhjJ,EA7BL8L,EAAO5G,IA6BX,KA5BIwe,EAAW3kB,SAAS,eACpBc,EAAW6jB,EAAW7jB,SAAS,MAC/BtB,EAAUmlB,IAEVnlB,EAAUmlB,EAAW7jB,SAAS,YACzBtB,EAAQzB,SACTyB,EAAUuN,EAAKg2I,iBAAiBp+H,IAEpC7jB,EAAWtB,EAAQsB,SAAS,OAE5Bs4I,GACAxE,WAAYjwH,EAAW3kB,SAAS,cAChCw1I,UAAU,EACVz3I,OAAQ+C,EAAS/C,QAEjBkmJ,EAAYpnJ,EAAEsc,IAAIwT,EAAO,SAAU5oB,EAAOD,GAC1C,MACWjH,GADU,gBAAVkH,GACEA,EAEAgJ,EAAKusI,YACVrlG,MAAOmlG,EACP1mG,KAAM7rC,EAAO9C,GAASuU,MAAOxU,eAI9BwU,IAAS/V,IAChB+V,EAAQxX,EAAS/C,QAEZkD,EAAI,EAAGA,EAAIgjJ,EAAUlmJ,OAAQkD,IACV,IAApBH,EAAS/C,QAA0B,IAAVua,EACzB9Y,EAAQyqD,OAAOg6F,EAAUhjJ,IAEzBgjJ,EAAUhjJ,GAAGgnE,YAAYnnE,EAASwX,EAAQ,GAGlDvL,GAAKy1I,wBAAwByB,EAAWt3H,GACpC5f,EAAK6f,SAASjI,KACd5X,EAAK6f,SAASjI,GAAYwyB,aAAc,EACxCpqC,EAAK6jI,YAAYjsH,KAGzBg/H,aAAc,SAAUh3H,EAAOzI,GAAjB,GAENjjB,GAAG62B,EAAMosH,EAAaxxG,EASdyxG,EAQJz3H,EAlBJ3f,EAAO5G,KAEPgE,GACAi6I,SAAUr3I,EAAKxG,QACfmsC,KAAMA,EACNuB,UAEAvlC,EAAkB,YAATwV,CACb,IAAa,YAATA,EACIyI,EAAM,GAAGzI,IACLigI,EAAcp3I,EAAKy2I,UAAU72H,EAAM,GAAGooB,KACrCovG,EAAYnkJ,SAASkhJ,IACtBn0I,EAAKkuB,OAAOkpH,GAAa,IAG7Bp3I,EAAKm2H,qBAEN,CASH,IARIx2G,EAAW7vB,EAAEsc,IAAIwT,EAAO,SAAU+lB,GAClC,MAAO3lC,GAAKy2I,UAAU9wG,EAAKqC,OAE3BrmC,GACA3B,EAAKke,QAAQ,UAAW,WACpB,OAASyB,SAAUA,KAGtBzrB,EAAI,EAAGA,EAAI0rB,EAAM5uB,OAAQkD,IAC1BkJ,EAAQuoC,KAAOA,EAAO/lB,EAAM1rB,GAC5BkJ,EAAQi6I,SAAWr3I,EACnBm3I,EAAcx3H,EAASzrB,GACvB62B,EAAOosH,EAAYnkJ,SACf2O,IACAvE,EAAQ8pC,OACJ2gG,WAAY98G,EAAK93B,SAAS,cAC1Bw1I,SAAU0O,EAAYnkJ,SAASC,SAAS+gJ,GACxChjJ,OAAQmmJ,EAAYpjJ,WAAW/C,QAEnCmmJ,EAAYpjJ,SAAS,WAAWutB,SAChC61H,EAAYvwE,QAAQ5mE,EAAK06E,UAAU6sD,YAAYztI,EAAOsD,GAAW2iF,MAAOp6C,EAAKyE,aAAezE,EAAKsvB,SAAWtvB,EAAKkvG,WAAa70I,EAAK06E,UAAUqF,MAAQ//E,EAAK06E,UAAUxxC,OAASy+F,OAEpK,YAATxwH,EACAnX,EAAKk2I,YAAYiB,GAAcxxG,EAAKxuB,IAAQwuB,EAAKxuB,IAAS,QAC1C,WAATA,IACPnX,EAAK6Y,OAAOs+H,EAAaxxG,EAAKxuB,IACzBwuB,EAAKxuB,IACFwuB,EAAK8e,UACL9e,EAAK7oB,IAAI,YAAY,IAI7Bq6H,EAAYnmJ,QACZoI,KAAKgI,QAAQ,cACTukC,KAAMwxG,EACNviJ,KAAM+wC,EACNtqC,GAAIof,GAIZ9Y,IACA3B,EAAKke,QAAQ,UAAW,WACpB,OACIyB,SAAUA,EACV/qB,KAAM9E,EAAEsc,IAAIwT,EAAO,SAAU+lB,GACzB,QAAU9lB,SAAU8lB,WAO5CqmG,gBAAiB,SAAU76I,EAAS0nB,GAChC1nB,EAAUiI,KAAKjI,QAAQuvB,KAAKvvB,GAC5BA,EAAQqJ,YAAYm6I,EAAc97H,GAAQre,YAAY25I,GAAgBt7H,GAAQvc,KAAK4hG,GAAgBrlF,IAEvGgH,SAAU,SAAU8lB,GAChB,GAAIqC,GAAMl4C,EAAE61C,GAAMt0B,QAAQqiI,GAAMp3I,KAAKhL,EAAMgL,KAAK,QAAS0hB,EAAa5kB,KAAK4kB,UAC3E,OAAOA,IAAcA,EAAW83B,SAAS9N,IAE7C9Z,OAAQ,SAAU/8B,EAASmmJ,GACvB,GAAIt3I,GAAO5G,IACX,OAAIjI,KAAYnB,EACLgQ,EAAK7O,QAAQuvB,KAAKg0H,GAAiB1hJ,UAE9C7B,EAAU6O,EAAK7O,QAAQuvB,KAAKvvB,GACvBA,EAAQH,OAGTG,EAAQ2F,KAAK,WACT,GAAI6uC,GAAO71C,EAAEsJ,MAAOqlG,EAAO94D,EAAK5xC,SAAS0/I,EACzC,OAAI9tG,GAAK1yC,SAASkhJ,GACPn0I,GAEXA,EAAKu3I,gBAAgB94C,EAAM64C,GAA3Bt3I,KAPJ5G,KAAKm+I,gBAAgBpmJ,GAUlB6O,IAEXm2H,eAAgB,WACZ/8H,KAAK80B,OAAOp+B,MAEhB+oB,OAAQ,SAAU1nB,EAASy0C,GAEvB,MADAxsC,MAAK4yI,gBAAgB76I,EAASy0C,KAAU,GACjCxsC,MAEXuf,QAAS,SAAUxnB,GAEf,MADAiI,MAAK4yI,gBAAgB76I,GAAS,GACvBiI,MAEX8jD,OAAQ,SAAUvX,EAAMsmG,GACpBA,EAAgB7yI,KAAKjI,QAAQuvB,KAAKurH,EAClC,IAAIC,GAAW9yI,KAAK+yI,QAAQxmG,EAAMsmG,EAAeA,EAAcj7I,OAASi7I,EAAcvrH,KAAKuzH,GAAU,KAQrG,OAPAn9I,GAAKo1I,EAAStsH,MAAO,WACjBssH,EAAShlG,MAAMgW,OAAO9jD,MACtB0qI,EAAgB1qI,QAEpBA,KAAKyqI,YAAYoI,GACjBnI,EAAgBoI,EAAShlG,MAAMxmB,KAAK,sBACpCwrH,EAAShlG,MAAM50C,OAAO,QACf8G,MAEXkrD,aAAc,SAAU3e,EAAMsmG,GAC1BA,EAAgB7yI,KAAKjI,QAAQuvB,KAAKurH,EAClC,IAAIC,GAAW9yI,KAAK+yI,QAAQxmG,EAAMsmG,EAAeA,EAAcj5I,SAO/D,OANA8D,GAAKo1I,EAAStsH,MAAO,WACjBqsH,EAAclgE,OAAO3yE,MACrB0qI,EAAgB1qI,QAEpB0qI,EAAgBmI,GAChBC,EAAShlG,MAAM50C,OAAO,QACf8G,MAEX8hE,YAAa,SAAUv1B,EAAMsmG,GACzBA,EAAgB7yI,KAAKjI,QAAQuvB,KAAKurH,EAClC,IAAIC,GAAW9yI,KAAK+yI,QAAQxmG,EAAMsmG,EAAeA,EAAcj5I,SAO/D,OANA8D,GAAKo1I,EAAStsH,MAAO,WACjBqsH,EAAcr1E,MAAMx9D,MACpB0qI,EAAgB1qI,QAEpB0qI,EAAgBmI,GAChBC,EAAShlG,MAAM50C,OAAO,QACf8G,MAEXkoB,OAAQ,SAAUnwB,GACdA,EAAUiI,KAAKjI,QAAQuvB,KAAKvvB,EAC5B,IAAI6O,GAAO5G,KAAMpG,EAAS7B,EAAQwmF,aAAa33E,EAAK7O,QAASuiJ,GAAOxsG,EAAQ/1C,EAAQ6B,OAAO,KAU3F,OATA7B,GAAQmwB,UACJ4lB,GAAUA,EAAMj0C,SAAS,eAAkBi0C,EAAMnzC,SAAS2/I,GAAM1iJ,QAChEk2C,EAAM5lB,SAENtuB,EAAOhC,SACPgC,EAASA,EAAOmvB,GAAG,GACnBniB,EAAK6jI,YAAY7wI,GACjB8wI,EAAgB9wI,IAEbgN,GAEXw3I,OAAQ,SAAUrmJ,GACd,GAAI6O,GAAO5G,IACXjI,GAAU6O,EAAK7O,QAAQuvB,KAAKvvB,GAC5BA,EAAQ2F,KAAK,WACT,GAAI6uC,GAAO71C,EAAEsJ,KACb4G,GAAK0/E,aAAa/5C,EAAMA,EAAK5xC,SAAS,IAAM+/I,IAAWnuG,EAAKxyC,GAAG0hF,QAGvEqgE,OAAQ,WACJ,MAAO97I,MAAKjI,QAAQ4C,SAASwgJ,GAAoB/jJ,SAErDk6G,MAAO,WACH,GAAI/kE,GAAOvsC,KAAKjI,QAAQ4C,SAASwgJ,GAAoB7rH,OAAQwe,EAAQvB,EAAK5xC,SAAS6/I,EACnF,OAAI1sG,GAAM,GACCA,EAAMnzC,SAASwgJ,GAAoB7rH,OAEvCid,GAEXkyD,SAAU,SAAUhX,GAChB,GAAI7gF,GAAO5G,KAAMq+I,EAAUz3I,EAAKosF,SAAUnvE,EAAKjd,EAAKw0H,OACpD,OAAI3zC,KAAc7wF,EACPynJ,GAEXz3I,EAAK7O,QAAQqtB,WAAW,yBACpBi5H,GAAWA,EAAQzmJ,SACfymJ,EAAQ,GAAGx6H,KAAOA,GAClBw6H,EAAQj5H,WAAW,MAEvBi5H,EAAQ1jJ,SAAS0/I,GAAc1vF,YAAYktD,IAE3CnhH,EAAE+wF,GAAW7vF,SACbisB,EAAK4jE,EAAU,GAAG5jE,IAAMA,EACxB4jE,EAAUvkF,KAAK,KAAM2gB,GAAIlpB,SAAS0/I,GAAc//I,SAASu9G,GACzDjxG,EAAK7O,QAAQmL,KAAK,wBAAyB2gB,IAE/Cjd,EAAKosF,SAAWvL,EAZhB7gF,IAcJqxE,SAAU,SAAUhwE,GAChB,GAAIrB,GAAO5G,KAAMjB,EAAMkJ,EAAEmuB,QAASzqB,EAAU/E,EAAK63F,UAC7Cx2F,GAAEmY,QAAUnY,EAAE22B,gBAGd7/B,GAAO4iB,EAAKU,MAAQtjB,GAAO4iB,EAAKS,OAChCxb,EAAK63F,SAAS73F,EAAKu0F,UAAUxvF,IAC7B1D,EAAE9D,kBACKpF,GAAO4iB,EAAKQ,IAAMpjB,GAAO4iB,EAAKO,MACrCtb,EAAK63F,SAAS73F,EAAKy0F,UAAU1vF,IAC7B1D,EAAE9D,kBACKpF,GAAO4iB,EAAKK,OAASjjB,GAAO4iB,EAAKa,UACxC5b,EAAKs9B,OAAOv4B,EAAQhR,SAAS0/I,IAC7BpyI,EAAE9D,kBACKpF,GAAO4iB,EAAKY,MACnB3b,EAAK63F,SAAS73F,EAAKk1I,UACnB7zI,EAAE9D,kBACKpF,GAAO4iB,EAAKW,MACnB1b,EAAK63F,SAAS73F,EAAK0qG,SACnBrpG,EAAE9D,oBAGVg3F,UAAW,SAAU5uD,GACjB,IAAKA,EACD,MAAOvsC,MAAK87I,QAEhB,IAAIhuG,GAAQvB,EAAK5xC,SAAS6/I,GAAep5F,EAAO7U,EAAKs1F,QAAQ,YAAYzqI,OAazE,OAZI02C,GAAM,KACNsT,EAAOtT,EAAMnzC,SAAS,IAAMm+E,IAE3B13B,EAAK,KACNA,EAAO7U,EAAK3yC,OAAO4gJ,GAAc5gJ,OAAO0gJ,GAAMl5F,QAE7CA,EAAK,KACNA,EAAOphD,KAAK87I,UAEZ16F,EAAKvnD,SAASkhJ,KACd35F,EAAOphD,KAAKm7F,UAAU/5C,IAEnBA,GAEXi6C,UAAW,SAAU9uD,GACjB,IAAKA,EACD,MAAOvsC,MAAKsxG,OAEhB,IAA6CtyG,GAAzCg9B,EAAOuQ,EAAKkjD,QAAQ,YAAYr4F,OACpC,IAAK4kC,EAAK,GAON,IADAh9B,EAASg9B,EACFh9B,EAAO,IACVA,EAASA,EAAOrE,SAAS6/I,GAAc7/I,SAAS,IAAMs+E,GAClDj6E,EAAO,KACPg9B,EAAOh9B,OATfg9B,GAAOuQ,EAAK3yC,OAAO4gJ,GAAc5gJ,OAAO0gJ,GACnCt+G,EAAK,KACNA,EAAOh8B,KAAKsxG,QAcpB,OAHIt1E,GAAKniC,SAASkhJ,KACd/+G,EAAOh8B,KAAKq7F,UAAUr/D,IAEnBA,GAEX+2G,QAAS,SAAUxmG,EAAMsmG,EAAej5I,GAA/B,GACY4sB,GAA2FysH,EA8BhGxsH,EA9BR7f,EAAO5G,KAAagzI,EAAQt8I,EAAEiyC,cAAc4D,GAAO+xG,EAAkBzL,GAAiBA,EAAc,EAgDxG,OA/CKyL,KACD1kJ,EAASgN,EAAK7O,SAElBk7I,GACIxE,WAAY70I,EAAOC,SAAS,cAC5Bw1I,SAAU34I,EAAEm8I,GAAeh5I,SAAS+gJ,GACpChjJ,OAAQgC,EAAOe,WAAW/C,QAE1B0mJ,IAAoB1kJ,EAAOhC,SAC3BgC,EAASlD,EAAEkQ,EAAKssI,aACZplG,MAAOmlG,EACP7yI,QAASwG,EAAKxG,WACd02B,SAAS+7G,IAEbG,GAASt8I,EAAEqP,QAAQwmC,IAASA,YAAgB5wC,IACxC4wC,YAAgB5wC,KAChB4wC,EAAOA,EAAK/wC,QAEhBgrB,EAAQ9vB,EAAEsc,IAAIggI,GAASzmG,GAAQA,EAAM,SAAU3uC,EAAOD,GAClD,MACWjH,GADU,gBAAVkH,GACEA,EAEAgJ,EAAKusI,YACVrlG,MAAOmlG,EACP1mG,KAAM7rC,EAAO9C,GAASuU,MAAOxU,SAIrC2gJ,IACI73H,EAAW7f,EAAK6f,SAASosH,GACzBpsH,IACAA,EAASuqB,aAAc,GAE3B6hG,EAAc3vI,KAAKgrG,GAAe,MAIlC1nF,EADe,gBAAR+lB,IAAsC,KAAlBA,EAAKl1C,OAAO,GAC/BuP,EAAK7O,QAAQuvB,KAAKilB,GAElB71C,EAAE61C,GAEd3lC,EAAK23I,oBAAoB/3H,IAExB+lB,EAAK30C,SACN20C,GAAQA,IAEZ3lC,EAAKy1I,wBAAwB71H,EAAO+lB,IAEhC/lB,MAAOA,EACPsnB,MAAOl0C,IAGfo/F,aAAc,SAAU/wF,GACpB,GAAImY,GAAS1pB,EAAEuR,EAAE22B,cACZxe,GAAOzc,QAAQ,MAAQo3I,GAAenjJ,QACvCwoB,EAAOhf,YAAY,gBAAiB6G,EAAE/I,MAAQujG,IAGtDgtC,eAAgB,WACZ,GAAiB+O,GAAQh4H,EAArB5f,EAAO5G,IACXw+I,GAAS53I,EAAK7O,QAAQuvB,KAAK,WAAW2tD,IAAI,WACtC,MAAOv+E,GAAEsJ,MAAMu+E,aAAa,cAAe,OAAO3mF,SACnD0C,SAAS,mBAAmB4I,KAAK,OAAQ,SAC5Cs7I,EAAO5kJ,SAASsJ,KAAKgrG,GAAe,GAAOj5B,IAAI,IAAM2lE,GAAajgJ,SAAS,MAAMuI,KAAKirG,IAAa,GAAMrtG,OACzG0lB,EAAQ5f,EAAK7O,QAAQuJ,IAAIk9I,GAAQ7jJ,WACjCiM,EAAK23I,oBAAoB/3H,GACzB5f,EAAK6jI,YAAYjkH,GACjBkkH,EAAgBlkH,IAEpB+3H,oBAAqB,SAAU/3H,GAE3B,IADA,GAAI5uB,GAAS4uB,EAAM5uB,OAAQ+F,EAAM,EAC1BA,EAAM/F,EAAQ+F,IACjBqC,KAAKy+I,mBAAmBj4H,EAAM7oB,GAAMA,IAG5C8gJ,mBAAoB,SAAUlyG,EAAMp6B,GAChC,GAAwIusI,GAAar5C,EAAjJh6C,EAAWrrD,KAAK8gG,UAAW69C,EAAc3+I,KAAKI,QAAQu+I,YAAax7H,EAAMw7H,GAAeA,EAAYxsI,GAAQmnB,EAAOt5B,KAAKjI,QAAQ,EACpIw0C,GAAO71C,EAAE61C,GAAMjyC,SAAS,UAAU4I,KAAK,OAAQ,YAC3ChL,EAAMC,QAAQoB,QAAQgB,MACtBgyC,EAAKt0C,IAAI,sBAAuB,UAAUA,IAAI,sBAAuB,IAEzEs0C,EAAK5xC,SAASyvI,GAAK9vI,SAAS+vI,GAC5BhlC,EAAO94D,EAAK5xC,SAAS,KAAKL,SAASgwI,GAC/BjlC,EAAK,KACLA,EAAKniG,KAAK,OAAQigB,GAClBkiF,EAAK1qG,SAASyvI,GAAK9vI,SAAS+vI,IAEhC99F,EAAK1oC,OAAO,0CAA0CvJ,SAAS,mBAC/DiyC,EAAK1oC,OAAO,gBAAgBvJ,SAAS,oBAAoB4I,KAAK4hG,GAAe,GAAM1/E,WAAW,YAC9FmnB,EAAK5xC,SAAS,OAAOL,SAASogJ,GAASx3I,KAAK,OAAQ,UAAUA,KAAKirG,IAAa,GAAMrtG,OAAOlH,SAASsJ,KAAKgrG,GAAe,GAC1H7I,EAAO94D,EAAK5xC,SAASsgJ,GACjB51C,EAAK,KACDh6C,GACAA,EAASjmC,WAAW2/E,IAAepqG,SAASsgJ,GAAkBtwF,YAAYqwF,GAE9E31C,EAAK/qG,SAAS0gJ,GACdh7I,KAAK8gG,UAAYv0D,EAAKrpC,KAAK6hG,IAAe,IAEzCx4D,EAAK5xC,SAAS0/I,GAAc,KAC7BqE,EAAc,gBAAmBpU,EAAO,MACpCqU,GAAeA,EAAYxsI,IAAUo6B,EAAK,GAAG/tB,YAAc8a,IAC3DolH,EAAc,oCAAsCC,EAAYxsI,GAAS,OAE7Eo6B,EAAKuwB,WAAWj5D,OAAO,WACnB,QAAQ7D,KAAKqD,SAAS/K,MAAMkyI,IAA2C,GAAjBxqI,KAAKknB,WAAkBxwB,EAAEu7B,KAAKjyB,KAAKmyB,cAC1F0gB,QAAQ6rG,IAEXnyG,EAAK3yC,OAAO,eAAe,IAC3B2yC,EAAK5xC,SAAS0/I,GAAc//I,SAAS,aAG7C4pC,OAAQ,SAAU9jB,GAAV,GACqCuiF,GAAS7lC,EAAUv5D,EAAMq7I,EAO9Dv5C,EAAqC94D,EAErClzC,EACAotB,EAuBIymD,EAjCJtmE,EAAO5G,KAAMjI,EAAU6O,EAAK7O,OAChC,KAAIqoB,EAAOzc,QAAQ,MAAQo3I,GAAenjJ,QAGtCwoB,EAAOnI,QAAQ,aAAa,IAAMlgB,EAAQ,GAA9C,CAcA,GAXIstG,EAAOjlF,EAAOnI,QAAQoiI,GAAe9tG,EAAO84D,EAAKptF,QAAQqiI,GAC7D1zI,EAAKu3I,gBAAgB94C,GACjBhsG,EAAUkzC,EAAK5xC,SAAS,uBACxB8rB,EAAWzmB,KAAKymB,SAAS8lB,IACxBlzC,EAAQzB,SAAWgP,EAAKxG,QAAQ+7I,cAAgB11H,GAAYA,EAASuqB,aAAehxC,KAAK09I,eAAenxG,IAASA,EAAKsvB,SAAWtvB,EAAKkvG,cACvIpiJ,EAAUuN,EAAKg2I,iBAAiBrwG,IAEpCuwB,EAAWvwB,EAAKjlB,KAAKuzH,GAAQv5I,IAAIirC,EAAKjlB,KAAKwzH,IAC3Cv3I,EAAO8hG,EAAKniG,KAAKk3I,GACjBwE,EAAWr7I,IAAyC,KAAhCA,EAAKlM,OAAOkM,EAAK3L,OAAS,IAAa2L,EAAKrF,QAAQ,IAAM0I,EAAK7O,QAAQ,GAAG8rB,GAAK,UACnG8+E,KAAai8C,IAAY9hF,EAASllE,QAC9BklE,EAASthE,KAAK,aACd,MAAOmnG,EAKX,IAHI/7F,EAAK+sI,cAAcl0G,EAAQ8M,KAC3Bo2D,GAAU,GAEVA,KAAY,EAGhB,MAAI/7F,GAAKxG,QAAQg8I,YAAcZ,IACvB50I,EAAKi2I,qBAAqBtwG,GACnBo2D,GAGX7lC,EAASllE,SACLs1E,EAAapQ,EAAS/iE,GAAG0hF,IACxB70E,EAAK+sI,cAAezmE,EAAsBytE,EAATF,EAAmBluG,KACrDo2D,EAAU/7F,EAAKk2I,YAAYvwG,EAAM2gC,KAGlCy1B,KAEX+6C,eAAgB,SAAUnxG,GACtB,MAAOA,GAAK/lB,OAAS+lB,EAAK/lB,MAAM5uB,OAAS,GAAK20C,EAAKyE,aAEvD8rG,YAAa,SAAU/kJ,EAAS8mJ,EAAWxP,GAA9B,GACqG1sC,GAAS9mC,EAAnHj1D,EAAO5G,KAAMq2I,EAAat+I,EAAQuvB,KAAKuzH,GAASx1C,EAAOttG,EAAQuvB,KAAK+yH,GAAel3H,EAAMkiF,EAAKniG,KAAKk3I,GAAyB3zH,EAAW7f,EAAK6f,SAAS1uB,GACrJgsD,EAASt9B,GAAYA,EAASs9B,QAClC,OAAIt9B,KAAa4oH,GACb5oH,EAAS/C,IAAI,YAAam7H,GAC1Bl8C,EAAUl8E,EAASuqB,eAAiBvqB,EAASo1C,WAAap1C,EAASg1H,cAGnEh1H,GAAc4oH,GAAyB,SAAbA,GAAyBtrF,GAAWt9B,EAASo1C,SAAYp1C,EAASg1H,WAQxFpF,EAAWz+I,QACXoI,KAAKo9I,aAAa/G,EAAYwI,GAC9Bl8C,GAAU,IAEV9mC,EAAU9jE,EAAQ4C,SAAS,IAAM+/I,GAC7B7+E,EAAQjkE,SACR+qG,GAAU,EACL9mC,EAAQ9hE,GAAGiV,KAAUmU,IAAQvsB,EAG9BgQ,EAAK0/E,aAAavuF,EAAS8jE,EAASgjF,GAFpCj4I,EAAKw2I,aAAavhF,EAASgjF,MAfnCj4I,EAAKxG,QAAQ+7I,cACbn8I,KAAK47H,UAAU7jI,GAAS,GAE5BA,EAAQ4C,SAAS,uBAAuButB,SACxCy6E,EAAUl8E,EAASuqB,YACnBvqB,EAASy9B,QAiBNy+C,IAEXy6C,aAAc,SAAUrlJ,EAASm1E,GAC7B,GAAItmE,GAAO5G,KAAM8+I,EAAoBl4I,EAAKxG,QAAQg8E,UAAWA,EAAY0iE,EAAkB/C,OAAQgD,EAAuBD,EAAkBnqH,UAAY,WAAamqH,GAAkBnqH,SAAUA,EAAWj0B,KAAWo+I,EAAkB/C,OAAQ+C,EAAkBnqH;AAInQ,MAHKoqH,KACDpqH,EAAWj0B,EAAOi0B,GAAYr0B,SAAS,KAEvCvI,EAAQgC,GAAG0hF,KAAYvO,GACvBtmE,EAAK+1I,YAAa,EAClB,IAEJ5kJ,EAAQ6B,SAASsJ,KAAKgrG,GAAgBhhC,GAAYhqE,KAAKirG,GAAajhC,GAAY9rE,YAAYw5I,GAAc1tE,GAAY5lD,KAAK,mEAAmElmB,YAAY,eAAgB8rE,GAAY9rE,YAAY,uBAAwB8rE,GAAY9rE,YAAY,cAAe8rE,GAAY9rE,YAAY,oBAAqB8rE,GAC1VA,GACAkP,EAAY17E,EAAOi0B,GAAY7zB,MAAM,IACrCs7E,EAAU77E,SAAW,WACjBqG,EAAKo4I,uBAGT5iE,EAAY17E,GACRH,SAAU,SAAUxI,GAChB6O,EAAK+sI,cAAcz4D,EAAUnjF,EAAQkgB,QAAQqiI,IAC7C1zI,EAAKo4I,uBAEV5iE,GAEPrkF,EAAQ4nB,WAAU,GAAM,GAAMI,aAAaq8D,GAd3CrkF,IAgBJinJ,mBAAoB,WAChB,GAAIp4I,GAAO5G,IACX4G,GAAKoB,QAAQ,YACbpB,EAAK+1I,YAAa,GAEtBC,iBAAkB,SAAU7kJ,GACxB,GAAI+1C,GAAQp3C,EAAE,yFAEd,OADAqB,GAAQ+rD,OAAOhW,GACRA,GAEX+uG,qBAAsB,SAAUtwG,GAAV,GACD5xC,GAAbiM,EAAO5G,KAAgBi/I,GAAa,EACpCrlG,EAASrN,EAAKjlB,KAAKuzH,GAAQv5I,IAAIirC,EAAKjlB,KAAKwzH,GA0B7C,OAzBIlhG,GAAO7/C,GAAG0hF,MACVwjE,GAAa,GAEXrlG,EAAO7/C,GAAG0hF,KAA8B,IAAlB7hC,EAAOhiD,SAC/B+C,EAAW4xC,EAAK+yC,WAChB3kF,EAAS2sB,KAAKuzH,GAAQv5I,IAAI3G,EAAS2sB,KAAKwzH,IAAWj3I,OAAO,WACtD,MAAOnN,GAAEsJ,MAAMjG,GAAG0hF,MACnB/9E,KAAK,SAAUyU,EAAO0pD,GACrBA,EAAUnlE,EAAEmlE,GACZojF,EAAar4I,EAAK+sI,cAAcgH,EAAU9+E,EAAQ5jD,QAAQqiI,IACrD2E,GACDr4I,EAAKw2I,aAAavhF,GAAS,KAGnCj1D,EAAKW,IAAI,WAAY,WACjBmiB,WAAW,WACP/uB,EAAS+C,KAAK,SAAUyU,EAAOof,GAC3B,GAAI9K,GAAW7f,EAAK6f,SAAS8K,EACzB9K,IACAA,EAAS/C,IAAI,YAAY,UAMtCu7H,GAEX34D,aAAc,SAAUvuF,EAASmnJ,EAAgBL,GAC7C,GAAIj4I,GAAO5G,KAAMm/I,EAAapnJ,EAAQuvB,KAAK,4CAA6C+9E,EAAOttG,EAAQuvB,KAAK+yH,GAAe+E,EAAqB11H,WAAW,WACnJy1H,EAAW7kJ,SAAS,gBACrB,KAAMkB,KAAW2nB,EAAMkiF,EAAKniG,KAAKk3I,EACxC1jJ,GAAEq7C,MACE7yC,KAAM,MACNstB,OAAO,EACPrJ,IAAKA,EACL0kB,SAAU,OACVrsC,KAAMA,EACNu9C,MAAO,SAAUqH,EAAKf,GAClB8/F,EAAWx0F,YAAY,eACnB/jD,EAAKoB,QAAQsqC,GACT8N,IAAKA,EACLf,OAAQA,KAEZr/C,KAAKO,YAGbA,SAAU,WACNqqB,aAAaw0H,GACbD,EAAWx0F,YAAY,gBAE3B9R,QAAS,SAAUr9C,GACf,QAASy6G,KACL,OAAS1vF,SAAU24H,EAAez7H,OAEtC,IACI7c,EAAKke,QAAQ,UAAWmxF,GACxBipC,EAAex8I,KAAKlH,GACpBoL,EAAKke,QAAQ,UAAWmxF,GAC1B,MAAOhuG,GACL,GAAIwc,GAAU9tB,OAAO8tB,OACjBA,IAAWA,EAAQs0B,OACnBt0B,EAAQs0B,MAAM9wC,EAAEiH,KAAO,KAAOjH,EAAEuc,QAAU,OAASrB,GAEvDnjB,KAAK+4C,MAAM/4C,KAAKogD,IAAK,SAEzBx5C,EAAKw2I,aAAa8B,EAAgBL,GAClCj4I,EAAKoB,QAAQ88E,GACTv4C,KAAMx0C,EAAQ,GACdmnJ,eAAgBA,EAAe,SAK/CvL,cAAe,SAAUtsI,EAAWtP,GAChC,GAAI6O,GAAO5G,IACX,OAAO4G,GAAKoB,QAAQX,GAAaklC,KAAMx0C,EAAQ,MAEnDomJ,gBAAiB,SAAU94C,EAAM64C,GAC7B,GAAIt3I,GAAO5G,KAAMjI,EAAU6O,EAAK7O,QAASw0C,EAAO84D,EAAKzrG,OAAO0gJ,GAAOjvF,EAAWzkD,EAAKk6F,UAAWr6E,EAAW7f,EAAK6f,SAAS8lB,EACnH8e,IACAA,EAASjmC,WAAW2/E,IAExBn+F,EAAKk6F,UAAYv0D,EAAKrpC,KAAK6hG,IAAe,GAC1ChtG,EAAQuvB,KAAKg0H,GAAiB3wF,YAAYqwF,GAC1CjjJ,EAAQuvB,KAAK,MAAQ4zH,EAAiB,iBAAmBA,GAAgBvwF,YAAYuwF,GACrF71C,EAAK/qG,SAAS0gJ,GACd31C,EAAK9mB,aAAaxmF,EAASuiJ,GAAMz2I,OAAO,mBAAmBvJ,SAAS4gJ,GACpEt0I,EAAK63F,SAASlyD,EAAK,GAAKA,EAAO,MAC3B9lB,GACAA,EAAS/C,IAAI,YAAY,GAExBw6H,GACDt3I,EAAKoB,QAAQyxB,IAGrBi2G,YAAa,SAAUtvI,GACfA,GAAW,aAAeA,KAAYA,EAAQg8E,YAC9Ch8E,EAAQg8E,WACJ2/D,QAAUh8I,YACV40B,UACI7zB,MAAM,EACNf,eAKhBozI,WAAY,SAAU/yI,GAAV,GAMJ0vC,GAA8BvD,EAL9B3lC,EAAO5G,IAMX,OALAI,GAAUM,GACNu9I,SAAUr3I,EACVknC,UACD1tC,GACC0vC,EAAQlpC,EAAK06E,UAAUxxC,MAAOvD,EAAOnsC,EAAQmsC,KAC1C3lC,EAAK06E,UAAU/0C,KAAK7rC,EAAON,GAC9B+tI,YAAavnI,EAAK06E,UAAU6sD,YAC5BwK,cAAe/xI,EAAK+xI,cACpBhyD,MAAO//E,EAAK82I,eAAenxG,IAASA,EAAKsvB,SAAWtvB,EAAKkvG,WAAa70I,EAAK06E,UAAUqF,MAAQ72C,EAC7F8oG,UAAWx4I,EAAQ+7I,cAAgB5vG,EAAK8iG,SAAWzoI,EAAKssI,YAAcpjG,GACvEy+F,MAEP2E,YAAa,SAAU9yI,GAAV,GACLwG,GAAO5G,KACPshF,EAAY16E,EAAK06E,WAAalhF,EAAQ69I,SAAS38D,SACnD,OAAOA,GAAUxzC,MAAMptC,GACnBm4I,YAAa,SAAUz4I,GAEnB,IADA,GAAIsC,GAAO,GAAI5H,EAAI,EAAG0rB,EAAQpmB,EAAQomB,MAAOlC,EAAMkC,EAAQA,EAAM5uB,OAAS,EAAGk2C,EAAQptC,GAAS9I,OAAQ0sB,GAAOlkB,EAAQ0tC,OAC9GhzC,EAAIwpB,EAAKxpB,IACZ4H,GAAQtC,EAAQ69I,SAAS9K,WAAWzyI,EAAON,GACvC0tC,MAAOA,EACPvB,KAAM7rC,GAASyR,MAAOrX,GAAK0rB,EAAM1rB,MAGzC,OAAO4H,KAEZtC,EAASmuI,MAEhBoK,cAAe,SAAUv4I,GACrB,MAAOA,GAAQ69I,SAAS38D,UAAUzlB,QAAQn7D,EAAON,EAASmuI,OAGlEr2I,GAAMmpB,GAAG8G,OAAOyzH,KAClBjlJ,OAAOuB,MAAM2sB,QACRluB,OAAOuB,OACE,kBAAVzB,SAAwBA,OAAOgiC,IAAMhiC,OAAS,SAAUiiC,EAAIC,EAAIC,IACrEA,GAAMD,OAEV,SAAUniC,EAAGC,QACVA,OAAO,qBAAsB,cAAeD,IAC9C,WAkUE,MA1TC,UAAUE,EAAGE,GAAb,GACOsB,GAAQvB,OAAOuB,MAAOmpB,EAAKnpB,EAAMmpB,GAAIrc,EAASqc,EAAGrc,OAAQ6qE,EAAa,aAAcC,EAAW,WAAYuvE,EAAa,EAAGC,EAAa,IAAKC,EAAe,EAAGC,EAAoB,EAAGC,EAAe,gBAAiBC,EAAsB,wBAAyBC,EAA4B,8BAA+BC,EAAuB,aAAcC,EAAmB,mBAAoBC,EAAkB,oBAAqBC,EAAkB,mBAAoBC,EAAiB,kBAAmBC,EAAiB,mBAAoBC,GAC9hBl2F,MAAO,QACPm2F,QAAS,UACTC,MAAO,SACR3mH,EAAS,SAAU4mH,EAAW,WAAY5/I,EAAU,UAAWhI,EAAOmG,KAAM8B,EAAShK,EAAEgK,OAAQsF,EAAQtP,EAAEsP,MAAOs6I,EAAiB,IAAKC,EAA2B,IAAKC,EAAY,EAAGl/D,GAAcm/D,eAAgB,uFACtNC,EAAc17I,EAAOtE,QACrBC,KAAM,SAAU5I,EAASqI,GACrB,GAAIwG,GAAO5G,IACXgF,GAAOf,GAAGtD,KAAKwH,KAAKnI,KAAMjI,EAASqI,GACnCA,EAAUwG,EAAKxG,QACfwG,EAAK+5I,kBAAoBvgJ,EAAQ6vE,cAAgBJ,EAAa,QAAU,SACxEjpE,EAAKg6I,UACLxgJ,EAAQxC,MAAQgJ,EAAKi6I,eAAezgJ,EAAQxC,OAC5CgJ,EAAKk6I,cAAc1gJ,EAAQlB,MAC3B0H,EAAK+nG,WACL/nG,EAAKm6I,qBACD3gJ,EAAQxC,QAAUwC,EAAQ4R,KAAO5R,EAAQxC,SAAU,GACnDgJ,EAAKo6I,mBAGb37H,WAAY,SAAUjlB,GAClB,GAAIwG,GAAO5G,IACXgF,GAAOf,GAAGohB,WAAWld,KAAKvB,EAAMxG,GAC5BA,EAAQ1D,eAAe,YACvBkK,EAAKvN,QAAQ+H,YAAY,wBAAyBhB,EAAQE,SAE1DF,EAAQ1D,eAAe,WACvBkK,EAAK6Y,OAAOrf,EAAQqf,QAExB7Y,EAAKm6I,qBACLn6I,EAAKi6I,iBACLj6I,EAAKo6I,mBAETt5I,QACI+xB,EACA4mH,GAEJjgJ,SACI8O,KAAM,cACN+gE,YAAaJ,EACbvvE,SAAS,EACT0R,IAAKqtI,EACL3mJ,IAAK4mJ,EACL1hJ,MAAO2hJ,EACP9/H,QAAQ,EACRvgB,KAAMghJ,EAAal2F,MACnBi3F,WAAYzB,EACZ0B,YAAY,EACZ9kE,cAEJwkE,QAAS,WACL,GAAIh6I,GAAO5G,IACX4G,GAAKu6I,YAAa,EAClBv6I,EAAKw6I,gBAAkBx6I,EAAK65I,eAAiB/pJ,KAEjDoqJ,cAAe,SAAUO,GACrB,GAAIlgF,IAAU,CAOd,IANAzqE,EAAEgH,KAAKwiJ,EAAc,SAAUz2I,EAAGvK,GAC9B,GAAIA,IAASmiJ,EAET,MADAlgF,IAAU,GACH,KAGVA,EACD,KAAUr4D,OAAM5Q,EAAM6Q,OAAO,iCAAoCs4I,KAGzE1yC,SAAU,WAAA,GAKF2yC,GAJA16I,EAAO5G,KACP2nB,EAAY/gB,EAAKvN,QAAUuN,EAAK7O,QAChCqI,EAAUwG,EAAKxG,QACf6vE,EAAc7vE,EAAQ6vE,WAE1BtoD,GAAUrtB,SAAS,YAAcmlJ,GACjC93H,EAAUrtB,SAASmlJ,EAAe,KAAOxvE,IAAgBJ,EAAaA,EAAaC,IAC/E1vE,EAAQqf,UAAW,GACnBkI,EAAUrtB,SAAS2lJ,GAEnB7/I,EAAQE,SACRqnB,EAAUrtB,SAASolJ,GAEnBt/I,EAAQxC,SAAU,GAClB+pB,EAAUrtB,SAASqlJ,GAEnBv/I,EAAQlB,OAASghJ,EAAaE,MAC9Bx5I,EAAK26I,2BAEDnhJ,EAAQ8gJ,aACRt6I,EAAK65I,eAAiB75I,EAAKvN,QAAQm0E,QAAQ8T,EAAUm/D,gBAAgBn5H,KAAK,IAAMw4H,GAChFwB,EAAqBlhJ,EAAQxC,SAAU,EAAQwC,EAAQxC,MAAQwC,EAAQ4R,IAEnEpL,EAAK65I,eAAerrH,KADpBh1B,EAAQlB,OAASghJ,EAAal2F,MACLs3F,EAEA16I,EAAK46I,qBAAqBF,GAAoBvvI,UAAY,OAKnGnU,MAAO,SAAUA,GACb,MAAOoC,MAAKy2F,OAAO74F,IAEvB64F,OAAQ,SAAU74F,GAAV,GAGA6jJ,GAFA76I,EAAO5G,KACPI,EAAUwG,EAAKxG,OAEnB,OAAIxC,KAAUhH,EACHwJ,EAAQxC,aAEJA,KAAU6C,GACjB7C,EAAQgJ,EAAK86I,YAAY9jJ,GACpB6X,MAAM7X,KACP6jJ,EAAY76I,EAAKi6I,eAAejjJ,GAC5B6jJ,IAAcrhJ,EAAQxC,QACtBgJ,EAAKvN,QAAQsxD,YAAYg1F,GACzBv/I,EAAQxC,MAAQ6jJ,EAChB76I,EAAKu6I,YAAa,EAClBv6I,EAAKo6I,qBAGLpjJ,IACRgJ,EAAKvN,QAAQiB,SAASqlJ,GACtBv/I,EAAQxC,OAAQ,GAbpB,IAiBR8jJ,YAAa,SAAU9jJ,GACnBA,EAAQuE,WAAWvE,EACnB,IAAI6qH,GAAQhwH,EAAKoiE,IAAI,GAAI2lF,EACzB,OAAO/nJ,GAAK+B,MAAMoD,EAAQ6qH,GAASA,GAEvCo4B,eAAgB,SAAUjjJ,GAAV,GACRgJ,GAAO5G,KACPI,EAAUwG,EAAKxG,OACnB,IAAIxC,KAAU,EAAO,CACjB,GAAIA,GAASwC,EAAQ4R,KAAOpU,KAAU,EAClC,MAAOwC,GAAQ4R,GACZ,IAAIpU,GAASwC,EAAQ1H,IACxB,MAAO0H,GAAQ1H,QAEhB,IAAIkF,KAAU,EACjB,OAAO,CAEX,OAAI6X,OAAM7O,EAAK86I,YAAY9jJ,IAChBwC,EAAQ4R,IAEZpU,GAEXojJ,gBAAiB,WAAA,GACTp6I,GAAO5G,KACPI,EAAUwG,EAAKxG,QACfpH,EAAa4N,EAAK46I,sBAClBphJ,GAAQlB,OAASghJ,EAAaE,OAC9Bx5I,EAAK+6I,cAAc3oJ,GACnB4N,EAAKg7I,wBAAwBxhJ,EAAQxC,QAErCgJ,EAAKi7I,uBAAuB7oJ,IAGpC2oJ,cAAe,SAAU3oJ,GAAV,GAOP8oJ,GANAl7I,EAAO5G,KACPI,EAAUwG,EAAKxG,QACf6gJ,EAAa7gJ,EAAQ6gJ,WACrBc,EAAsB1vI,SAASiuI,EAAiBW,EAAa,IAAK,IAAM,IACxEe,EAAmB3vI,SAAsB,IAAbrZ,EAAkB,IAAM,IACpDipJ,EAAuBxpJ,EAAK+B,MAAMwnJ,EAAmBD,EAGrDD,GAAkBl7I,EAAKvN,QAAQiuB,KAD/BlnB,EAAQ6vE,cAAgBJ,IAAezvE,EAAQE,SAAWF,EAAQ6vE,cAAgBH,GAAY1vE,EAAQE,QAClE,gBAAkB2hJ,EAAuB,IAEzC,kBAAoBA,EAAuB,GAAK,KAExFr7I,EAAKvN,QAAQiuB,KAAK,IAAMy4H,GAAiBp1F,YAAYo1F,GAAiBzlJ,SAAS0lJ,GAC/E8B,EAAgBn3F,YAAYq1F,GAAgB1lJ,SAASylJ,IAEzD8B,uBAAwB,SAAU7oJ,GAAV,GAChB4N,GAAO5G,KACPI,EAAUwG,EAAKxG,QACfghJ,EAAkBx6I,EAAKvN,QAAQiuB,KAAK,IAAMu4H,GAC1CqC,EAAoBt7I,EAAKu6I,WAAav6I,EAAKu7I,WAAW9hJ,SAAW,EACjE+hJ,IAC2B,KAA3BhB,EAAgBxpJ,QAChBgP,EAAKy7I,6BAETD,EAAoBx7I,EAAK+5I,mBAAqB3nJ,EAAa,IAC3D4N,EAAKw6I,gBAAgBpgJ,QAAQohJ,GACzB/hJ,SAAU6hJ,EACVjzI,MAAOjJ,EAAMY,EAAK07I,wBAAyB17I,GAC3C8gB,SAAU1hB,EAAMY,EAAK27I,mBAAoB37I,GACzCrG,SAAUyF,EAAMY,EAAK47I,2BAA4B57I,EAAMxG,EAAQxC,OAC/D6kJ,OAAQz8I,EAAMY,EAAKg7I,wBAAyBh7I,EAAMxG,EAAQxC,UAGlE0kJ,wBAAyB,WACrBtiJ,KAAKohJ,gBAAgBpnJ,QAEzBuoJ,mBAAoB,SAAUt6I,GAAV,GAIZy6I,GAHA97I,EAAO5G,KACPI,EAAUwG,EAAKxG,QACfuiJ,EAAoBxgJ,WAAW8F,EAAEmsD,KAAKt6D,MAAM8M,EAAK+5I,mBAAoB,GAErEvgJ,GAAQ8gJ,aACRwB,EAAyB,IAAQvgJ,WAAWyE,EAAKw6I,gBAAgB,GAAGtnJ,MAAM8M,EAAK+5I,oBAC/E/5I,EAAKw6I,gBAAgB95H,KAAK,2BAA2BrvB,IAAI2O,EAAK+5I,kBAAmB+B,EAAyB,MAE1GtiJ,EAAQlB,OAASghJ,EAAaE,OAASuC,GAAqB,IAC5D/7I,EAAKw6I,gBAAgBz2F,YAAYi1F,IAGzC4C,2BAA4B,SAAUnqG,GAAV,GAIpBuqG,GAHAh8I,EAAO5G,KACPI,EAAUwG,EAAKxG,QACfyiJ,EAAsB1gJ,WAAWyE,EAAKw6I,gBAAgB,GAAGtnJ,MAAM8M,EAAK+5I,mBAEpEvgJ,GAAQlB,OAASghJ,EAAaE,OAASyC,EAAsB,IAC7Dj8I,EAAKw6I,gBAAgB9mJ,SAASslJ,GAE9Bx/I,EAAQ8gJ,aAEJ0B,EADAxiJ,EAAQlB,OAASghJ,EAAal2F,MACd3R,EACTj4C,EAAQlB,MAAQghJ,EAAaC,QACpBv5I,EAAK46I,qBAAqBnpG,GAActmC,UAAY,IAEpDtZ,EAAK+B,MAAMoM,EAAK46I,qBAAqBnpG,IAAiB,IAE1EzxC,EAAK65I,eAAerrH,KAAKwtH,IAEzBvqG,IAAiBj4C,EAAQ4R,KACzBpL,EAAKw6I,gBAAgBtgJ,QAG7B8gJ,wBAAyB,SAAUvpG,GAAV,GACjBzxC,GAAO5G,KACPI,EAAUwG,EAAKxG,OACfwG,GAAKu6I,YACLv6I,EAAKoB,QAAQyxB,GAAU77B,MAAOy6C,IAE9BA,IAAiBj4C,EAAQ1H,KAAOkO,EAAKu6I,YACrCv6I,EAAKoB,QAAQq4I,GAAYziJ,MAAOwC,EAAQ1H,OAGhD+mB,OAAQ,SAAUA,GAAV,GACA7Y,GAAO5G,KACPI,EAAUwG,EAAKxG,OACnBA,GAAQqf,OAA2B,IAAXA,GAAgCA,EACxD7Y,EAAKvN,QAAQ+H,YAAY6+I,GAAiB7/I,EAAQqf,SAEtDqG,QAAS,WACL,GAAIlf,GAAO5G,IACXgF,GAAOf,GAAG6hB,QAAQ3d,KAAKvB,IAE3B26I,yBAA0B,WAAA,GAUbzmJ,GATL8L,EAAO5G,KACPI,EAAUwG,EAAKxG,QACfunB,EAAY/gB,EAAKvN,QACjBypJ,EAAYxC,EAAiBlgJ,EAAQ6gJ,WACrCv+I,EAAO,EAKX,KAJItC,EAAQ6gJ,YAAc,IACtB7gJ,EAAQ6gJ,WAAa,GAEzBv+I,GAAQ,uBACC5H,EAAIsF,EAAQ6gJ,WAAa,EAAGnmJ,GAAK,EAAGA,IACzC4H,GAAQ,0CAEZA,IAAQ,QACRilB,EAAUm8B,OAAOphD,GAAM4kB,KAAK,WAAWrvB,IAAI2O,EAAK+5I,kBAAmBmC,EAAY,KAAK1rJ,QAAQkD,SAAS,WAAW3C,MAAM23B,OAAOh1B,SAAS,UACtIsM,EAAKm8I,uBAETA,oBAAqB,WAAA,GACbn8I,GAAO5G,KACPI,EAAUwG,EAAKxG,QACf4iJ,EAAYp8I,EAAKvN,QAAQiuB,KAAK,gBAC9B7B,EAActjB,WAAW6gJ,EAAU,GAAGlpJ,MAAM8M,EAAK+5I,oBACjD/vH,EAAa0vH,EAAiBlgJ,EAAQ6gJ,WAAax7H,CACnDmL,GAAa,GACboyH,EAAU/qJ,IAAI2O,EAAK+5I,kBAAmBl7H,EAAcmL,EAAa,MAGzEyxH,2BAA4B,WACxB,GAAIz7I,GAAO5G,IACX4G,GAAKw6I,gBAAkB1qJ,EAAE,eAAkBmpJ,EAAmB,YAAa/oH,SAASlwB,EAAKvN,SACrFuN,EAAKxG,QAAQ8gJ,aACbt6I,EAAKw6I,gBAAgBt9F,OAAOw9B,EAAUm/D,gBACtC75I,EAAK65I,eAAiB75I,EAAKvN,QAAQiuB,KAAK,IAAMw4H,KAGtDmD,oBAAqB,WAAA,GACbr8I,GAAO5G,KACPihJ,EAAar6I,EAAKxG,QAAQ6gJ,WAC1BiC,EAAiBt8I,EAAKvN,QAAQiuB,KAAK,aACvC,QAAQjV,SAAS6wI,EAAejrJ,IAAI2O,EAAK+5I,mBAAoB,KAAOM,EAAa,IAAMA,GAE3FO,qBAAsB,SAAUnpG,GAAV,GACdzxC,GAAO5G,KACPI,EAAUwG,EAAKxG,QACfxC,EAAQy6C,IAAiBzhD,EAAYyhD,EAAej4C,EAAQxC,MAC5DoU,EAAM5R,EAAQ4R,IACdtZ,EAAM0H,EAAQ1H,GAElB,OADAkO,GAAKu8I,YAAc1qJ,EAAKoG,KAAKnG,EAAMsZ,GAAO,KACnCvZ,EAAKoG,KAAKjB,EAAQoU,GAAOpL,EAAKu8I,cAEzCpC,mBAAoB,WAAA,GACZn6I,GAAO5G,KACPI,EAAUwG,EAAKxG,QACfg8E,EAAYh8E,EAAQg8E,SAEpBx1E,GAAKu7I,WADL/lE,KAAc,GACM/7E,SAAU,GAEZK,GAASL,SAAUkgJ,GAA4BngJ,EAAQg8E,aAIrFlkF,GAAMmpB,GAAG8G,OAAOu4H,IAClB/pJ,OAAOuB,MAAM2sB,QACRluB,OAAOuB,OACE,kBAAVzB,SAAwBA,OAAOgiC,IAAMhiC,OAAS,SAAUiiC,EAAIC,EAAIC,IACrEA,GAAMD,OAEV,SAAUniC,EAAGC,QACVA,OAAO,yBAA0B,cAAeD,IAClD,WAkGE,MA1FC,UAAUE,EAAGE,GAAb,GACOoP,GAAQtP,EAAEsP,MACV64D,EAAK,wBACLkc,EAAO,OACPC,EAAQ,QACRooE,EAAkB,QAAUvkF,EAAK,cAAgBA,EACjD75D,EAAS9M,MAAMmpB,GAAGrc,OAClBq+I,EAAkBr+I,EAAOtE,QACzBC,KAAM,SAAU5I,EAASqI,GACrB4E,EAAOf,GAAGtD,KAAKwH,KAAKnI,KAAMjI,EAASqI,GACnCJ,KAAKuhF,MAAQ,IAAMrpF,MAAMyrB,OACzB3jB,KAAKsjJ,eAAiBt9I,EAAMhG,KAAKujJ,mBAAoBvjJ,MACrDA,KAAKq4F,cAAgBryF,EAAMhG,KAAKu5G,OAAQv5G,MACxCtJ,EAAE6G,SAASmC,iBAAiBgG,GAAG09I,EAAiBpjJ,KAAKI,QAAQ+5I,aAAcn6I,KAAKsjJ,gBAChFtjJ,KAAKwjJ,sBACLxjJ,KAAKjI,QAAQuC,SAAS,qBAAuB0F,KAAKI,QAAQ6vE,YAAc,IAAMjwE,KAAKuhF,OACnFvhF,KAAK0tF,eAAiB1nF,EAAMhG,KAAKihB,OAAQjhB,MAAM,GAC/CtJ,EAAEC,QAAQ+O,GAAG,SAAWm5D,EAAI7+D,KAAK0tF,iBAErC+1D,YAAa,8+BACbD,oBAAqB,WACjB,GAAIpjJ,GAAUJ,KAAKI,OACnBJ,MAAK0jJ,eAAexrJ,MAAMuK,SAASzC,KAAKyjJ,cACpCE,WAAYvjJ,EAAQujJ,WACpBxJ,aAAc/5I,EAAQ+5I,aACtBx2H,KAAM3jB,KAAKuhF,UAGnBmiE,eAAgB,SAAU/rI,GAAV,GACRisI,GAAOltJ,EAAE,aAAa,GACtBoD,EAAQyD,SAASma,cAAc,QACnCksI,GAAK9rI,YAAYhe,GACbA,EAAM+pJ,WACN/pJ,EAAM+pJ,WAAWlsI,QAAUA,EAE3B7d,EAAMge,YAAYva,SAASumJ,eAAensI,KAGlDvX,SACI8O,KAAM,kBACN+gE,YAAa,OACbkqE,aAAc,mBACdwJ,WAAY,IACZprC,WAAW,GAEf7wG,QACIqzE,EACAC,GAEJr1D,QAAS,WACL3lB,KAAKjI,QAAQ4yD,YAAY,sCACzBj0D,EAAE6G,SAASmC,iBAAiBkqB,IAAIw5H,EAAiBpjJ,KAAKq4F,gBAE1DkrD,mBAAoB,SAAUt7I,GAC1BA,EAAE9D,iBACEnE,KAAKjI,QAAQ8B,SAAS,qBACtBmG,KAAKs8E,QAELt8E,KAAKq8E,QAGbA,KAAM,WACGr8E,KAAKgI,QAAQ+yE,KACd/6E,KAAKjI,QAAQuC,SAAS,sCAClB0F,KAAKI,QAAQm4G,WACb7hH,EAAE6G,SAASmC,iBAAiBgG,GAAG09I,EAAiBpjJ,KAAKq4F,iBAIjE/b,MAAO,WACEt8E,KAAKgI,QAAQgzE,KACdh7E,KAAKjI,QAAQuC,SAAS,oBAAoBqwD,YAAY,qBACtDj0D,EAAE6G,SAASmC,iBAAiBkqB,IAAIw5H,EAAiBpjJ,KAAKq4F,iBAG9DkhB,OAAQ,SAAUtxG,GAAV,GACA87I,GAAY97I,EAAE7D,qBACdujB,EAAYjxB,EAAEuR,EAAEmY,QAAQnI,QAAQjY,KAAKI,QAAQ+5I,aAAe,aAC3DxyH,GAAU/vB,QAAWmsJ,GACtB/jJ,KAAKs8E,SAGbx2D,QAAS,WACL9gB,EAAOf,GAAG6hB,QAAQ3d,KAAKnI,MACvBtJ,EAAEC,QAAQizB,IAAI,SAAWi1C,EAAI7+D,KAAK0tF,gBAClCh3F,EAAE6G,SAASmC,iBAAiBkqB,IAAIw5H,EAAiBpjJ,KAAKq4F,iBAG9DngG,OAAMmpB,GAAG8G,OAAOk7H,IAClB1sJ,OAAOuB,MAAM2sB,QACRluB,OAAOuB,OACE,kBAAVzB,SAAwBA,OAAOgiC,IAAMhiC,OAAS,SAAUiiC,EAAIC,EAAIC,IACrEA,GAAMD,OAEV,SAAUniC,EAAGC,QACVA,OAAO,kBAAmB,cAAeD,IAC3C,WAyiCE,MAjiCC,UAAUE,EAAGE,GA2CV,QAASotJ,GAAiBC,GACtBA,EAAKtpJ,SAASyvI,GAAK9vI,SAAS+vI,GAC5B4Z,EAAKtpJ,SAAS,KAAKL,SAASgwI,GAAM3vI,SAASyvI,GAAK9vI,SAAS+vI,GACzD4Z,EAAKpgJ,OAAO,mDAAmDvJ,SAASiwI,GACxE0Z,EAAKpgJ,OAAO,gBAAgBvJ,SAASo9E,GAAetyD,WAAW,YAC/D6+H,EAAKpgJ,OAAO,0BAA0BlJ,SAAS,KAAKkJ,OAAO,UAAUjK,SAASU,SAAS4pJ,EAAc,IAAMC,GAC3GF,EAAK/gJ,KAAK,OAAQ,OAClB+gJ,EAAKpgJ,OAAO,IAAMqgJ,GAAahhJ,KAAK,iBAAiB,GACrD+gJ,EAAKvmJ,KAAK,WACN,GAAI6uC,GAAO71C,EAAEsJ,KACRusC,GAAK5xC,SAAS,IAAM2vI,GAAM1yI,QAC3B20C,EAAKuwB,WAAWj5D,OAAO,WACnB,QAAQ7D,KAAKqD,SAAS/K,MAAMkyI,IAA2C,GAAjBxqI,KAAKknB,WAAkB+K,EAAKjyB,KAAKmyB,cACxF0gB,QAAQ,kCAAuCy3F,EAAO,SAIrE,QAASI,GAAgB0Z,GACrB,GAAIH,GAAOG,EAASzpJ,SAAS,UAC7BspJ,GAAKpgJ,OAAO,8BAA8B8mD,YAAYmuB,GACtDmrE,EAAKpgJ,OAAO,4BAA4B8mD,YAAYsuB,GACpDgrE,EAAKpgJ,OAAO,gBAAgBvJ,SAASw+E,GACrCmrE,EAAKpgJ,OAAO,eAAevJ,SAAS2+E,GAExC,QAASorE,GAAiBC,EAAaxd,GACnC,MAAO,yDAA4Dwd,EAAc,2CAAiDxd,EAAY,mBApErJ,GACO5uI,GAAQvB,OAAOuB,MAAOmpB,EAAKnpB,EAAMmpB,GAAIM,EAAOzpB,EAAMypB,KAAM3O,EAAMtc,EAAEsc,IAAKtV,EAAOhH,EAAEgH,KAAMu0B,EAAOv7B,EAAEu7B,KAAMvxB,EAAShK,EAAEgK,OAAQxE,EAAahE,EAAMgE,WAAYuG,EAAWvK,EAAMuK,SAAUjJ,EAAatB,EAAMuB,YAAaC,EAAcxB,EAAMyB,aAAcqL,EAASqc,EAAGrc,OAAQwlI,EAAsB,aAAc3rE,EAAK,iBAAkBurE,EAAM,MAAOgQ,EAAO,OAAQrhE,EAAO,OAAQ1d,EAAO,OAAQivE,EAAO,SAAUrxD,EAAO,SAAU5B,EAAQ,QAAS/kC,EAAQ,QAAStjC,EAAQ,SAAUq7H,EAAQ,UAAWvxD,EAAQ,UAAWr5C,EAAS,SAAUy7C,EAAW,WAAYw/D,EAAU,YAAa6J,EAAa,aAAc9hD,EAAa,aAAckC,EAAa,aAAc7f,EAAc,cAAepN,EAAgB,mBAAoB6yD,EAAe,kBAAmB2Z,EAAc,iBAAkBvsE,EAAe,kBAAmB21D,EAAa,gBAAiB6W,EAAW,eAAgBK,EAAmB,gBAAkB9sE,EAAgB,IAAK+sE,EAAiB,uBAAyBD,EAAmB,SAAWN,EAAc,IAAK5iE,GACx/BzlB,QAASp5D,EAAS,+FAClB0rI,YAAa1rI,EAAS,kJACtB8pC,KAAM9pC,EAAS,uIACf4rI,MAAO5rI,EAAS,sDAChB6rI,OAAQ7rI,EAAS,sDACjBqtC,MAAOrtC,EAAS,KACjB8rI,GACCC,gBAAiB,SAAU1gG,EAAOvB,GAC9B,GAAIvtC,GAAS,SAAUmT,EAAQo6B,EAAKp6B,KAYpC,OAVInT,IADAutC,EAAKntB,WAAY,EACP,oBAEA,mBAEA,IAAVjN,IACAnT,GAAU,YAEVmT,GAAS27B,EAAMl2C,OAAS,IACxBoH,GAAU,WAEPA,GAEXiwI,eAAgB,SAAU1iG,GACtB,MAAOA,GAAKppB,IAAM,UAAaopB,EAAKppB,IAAM,IAAO,IAErDiS,KAAM,SAAUmX,GACZ,MAAOA,GAAK4iG,WAAY,EAAQ5iG,EAAKnX,KAAOl9B,EAAMqJ,WAAWgrC,EAAKnX,OAEtEikF,IAAK,SAAU9sE,GACX,MAAOA,GAAKppB,IAAM,IAAM,QAE5Bu4H,kBAAmB,SAAU7/E,GACzB,MAAOA,GAAQurC,UAAW,EAAO,iEAAyE,IAE9GvrC,QAAS,SAAUtvB,GACf,MAAOA,GAAKsvB,QAAUtvB,EAAKsvB,QAAUtvB,EAAKkvG,WAAa,GAAK,UAEhEA,WAAY,SAAUlvG,GAClB,MAAOA,GAAKkvG,WAAavjJ,EAAMgL,KAAK,eAAiB,KAAOqpC,EAAKkvG,WAAa,IAAM,KA8B5FiJ,EAAW1/I,EAAOtE,QAClBC,KAAM,SAAU5I,EAASqI,GAAnB,GACexC,GAqDby8G,EAA6Dx+C,EArD7Dj1D,EAAO5G,IACXgF,GAAOf,GAAGtD,KAAKwH,KAAKvB,EAAM7O,EAASqI,GACnCwG,EAAK8oI,YAAY9oI,EAAKxG,SACtBA,EAAUwG,EAAKxG,QACfwG,EAAK+9I,aAAevkJ,EAAQu+I,gBAC5B/3I,EAAK+nG,WACL/nG,EAAK46E,OAAStpF,EAAMC,QAAQkG,MAAMuI,EAAKvN,SACvCuN,EAAKqe,YACLre,EAAK6oI,iBACL7oI,EAAK49C,cACDpkD,EAAQwkB,YACRhe,EAAKge,WAAWs8B,QAEpBt6C,EAAKg+I,eACLh+I,EAAKi+I,cACDj+I,EAAK+9I,aAAa/sJ,OAClBgP,EAAKvN,QAAQiuB,KAAK,+BAA+B5pB,KAAK,SAAUyU,EAAOo6B,GACnE,GAAIppB,GAAMvc,EAAK+9I,aAAaxyI,EACT,iBAARgR,IACPzsB,EAAE61C,GAAMjlB,KAAK,KAAOgjH,GAAM9uI,KAAK+oJ,EAAYphI,KAInDvc,EAAK+9I,aAAa/sJ,OAASgP,EAAKw9I,SAAS98H,KAAK,aAAa1vB,OAE/DgP,EAAKvN,QAAQqM,GAAG+8F,EAAa5jC,EAAK,IAAM8lC,EAAa9lC,EAAI4lF,EAAgB79I,EAAKoyF,cAActzF,GAAG,QAAUm5D,EAAInoE,EAAEsP,MAAMY,EAAKg/F,QAASh/F,IAAOlB,GAAG,OAASm5D,EAAI,WACtJj4D,EAAK63F,SAAS,QAElB73F,EAAKk+I,cAAgBpuJ,EAAEsP,MAAMY,EAAKqxE,SAAUrxE,GACxCxG,EAAQo7H,aACR50H,EAAKvN,QAAQqM,GAAG,UAAYm5D,EAAIj4D,EAAKk+I,eAErCl+I,EAAKxG,QAAQxC,QACbA,EAAQgJ,EAAKxG,QAAQxC,OAEzBgJ,EAAKvN,QAAQsB,SAAS,qBAAqB+K,GAAG2xE,EAAQxY,EAAI,6BAA6B,GAAOn5D,GAAG2xE,EAAQxY,EAAI,MAAQ2lF,EAAkB,SAAUv8I,GAAV,GAG3H1N,GAFJwqJ,EAAKn+I,EAAKvN,QAAQ,EACtB,IAAI0rJ,IAAOxnJ,SAASiV,cAEhB,GADIjY,EAAOrC,EAAMC,QAAQoB,QAAQgB,KAE7B,IACIwqJ,EAAGC,YACL,MAAOz4F,GACLw4F,EAAGxwH,YAGPwwH,GAAGxwH,OAGP3tB,GAAKs9B,OAAOxtC,EAAEuR,EAAE22B,iBAChB32B,EAAE9D,mBAGNk2G,EAAgBzzG,EAAKw9I,SAASzpJ,SAAS,MAAQupJ,GAAcroF,EAAUj1D,EAAKq+I,cAAc5qC,EAAcloG,SACxGkoG,EAAc,IAAMx+C,EAAQjkE,OAAS,GAAsC,IAAjCikE,EAAQ,GAAG3pC,WAAWt6B,QAChEgP,EAAKs+I,YAAY7qC,EAActxF,GAAG,IAEtCniB,EAAK7O,QAAQmL,KAAK,OAAQ,WACtB0D,EAAK7O,QAAQ,GAAG8rB,KAChBjd,EAAKqrH,QAAUrrH,EAAK7O,QAAQ,GAAG8rB,GAAK,cAExCjd,EAAKhJ,MAAMA,GACX1F,EAAM0uB,OAAOhgB,IAEjBg/F,QAAS,WACL,GAAIr5D,GAAOvsC,KAAKokJ,SAASzpJ,WAAWkJ,OAAO,IAAMqgJ,EACjD33G,GAAOA,EAAK,GAAKA,EAAOvsC,KAAKmlJ,SAAS,SAClC54G,EAAK,IACLvsC,KAAKy+F,SAASlyD,IAGtB44G,SAAU,SAAUxuH,GAChB,MAAO32B,MAAKokJ,SAASzpJ,SAAS6pJ,GAAkB7tH,MAEpDglG,MAAO,SAAUpvF,EAAM5V,GACnB,GAAIyuH,EAMJ,OAJIA,GADAzuH,IAAWoiD,EACD,OAEA,QAETxsC,GAGLA,EAAOA,EAAK5V,KACP4V,EAAK,KACNA,EAAOvsC,KAAKmlJ,SAASC,IAErB74G,EAAK1yC,SAAS69E,KACdnrC,EAAOvsC,KAAK27H,MAAMpvF,EAAM5V,IAErB4V,GATIvsC,KAAKmlJ,SAASC,IAW7B3mD,SAAU,SAAUhX,GAChB,GAAI7gF,GAAO5G,KAAMq+I,EAAUz3I,EAAKosF,SAAUnvE,EAAKjd,EAAKqrH,OACpD,OAAIxqC,KAAc7wF,EACPynJ,GAEPA,IACIA,EAAQ,GAAGx6H,KAAOA,GAClBw6H,EAAQj5H,WAAW,MAEvBi5H,EAAQ1zF,YAAYgtB,IAEpB8P,IACKA,EAAU5tF,SAASqqJ,IACpBz8D,EAAUntF,SAASq9E,GAEvB/wE,EAAK7O,QAAQqtB,WAAW,yBACxBvB,EAAK4jE,EAAU,GAAG5jE,IAAMA,EACpBA,IACA4jE,EAAUvkF,KAAK,KAAM2gB,GACrBjd,EAAK7O,QAAQmL,KAAK,wBAAyB2gB,KAGnDjd,EAAKosF,SAAWvL,EAjBhB,IAmBJxP,SAAU,SAAUhwE,GAChB,GAAgF0uB,GAA5E/vB,EAAO5G,KAAMjB,EAAMkJ,EAAEmuB,QAASzqB,EAAU/E,EAAK63F,WAAY4mD,EAAMz+I,EAAK46E,MACxE,IAAIv5E,EAAEmY,QAAUnY,EAAE22B,cAAlB,CAGA,GAAI7/B,GAAO4iB,EAAKU,MAAQtjB,GAAO4iB,EAAKS,MAChCuU,EAAS0uH,EAAMtsE,EAAO,WACnB,IAAIh6E,GAAO4iB,EAAKQ,IAAMpjB,GAAO4iB,EAAKO,KACrCyU,EAAS0uH,EAAM,OAAStsE,MACrB,IAAIh6E,GAAO4iB,EAAKK,OAASjjB,GAAO4iB,EAAKa,SACxC5b,EAAKs9B,OAAOv4B,GACZ1D,EAAE9D,qBACC,CAAA,GAAIpF,GAAO4iB,EAAKY,KAGnB,MAFA3b,GAAKs9B,OAAOt9B,EAAKu+I,SAAS,UAC1Bl9I,EAAE9D,iBACF,CACG,IAAIpF,GAAO4iB,EAAKW,IAGnB,MAFA1b,GAAKs9B,OAAOt9B,EAAKu+I,SAAS,SAC1Bl9I,EAAE9D,iBACF,EAEAwyB,IACA/vB,EAAKs9B,OAAOt9B,EAAK+0H,MAAMhwH,EAASgrB,IAChC1uB,EAAE9D,oBAGVqgD,YAAa,WACT,GAAI59C,GAAO5G,IACP4G,GAAKge,YAAche,EAAK+yE,gBACxB/yE,EAAKge,WAAW/c,OAAO,SAAUjB,EAAK+yE,iBAEtC/yE,EAAK+yE,gBAAkBjjF,EAAEsP,MAAMY,EAAK4Q,QAAS5Q,GAEjDA,EAAKge,WAAa1sB,EAAMsD,KAAKE,WAAW2sC,OAAOzhC,EAAKxG,QAAQwkB,YAAYxd,KAAK,SAAUR,EAAK+yE,kBAEhGY,cAAe,SAAU31D,GACrB,GAAIhe,GAAO5G,IACX4G,GAAKxG,QAAQwkB,WAAaA,EAC1Bhe,EAAK49C,cACL59C,EAAKge,WAAWs8B,SAEpBwuF,YAAa,SAAUtvI,GACfA,GAAW,aAAeA,KAAYA,EAAQg8E,YAC9Ch8E,EAAQg8E,WACJC,MAAQt8E,YACRu8E,OAASv8E,eAIrByX,QAAS,SAAUvP,GACf,GAA6UtK,GAAgB2nJ,EAAK3uH,EAAuC/+B,EAArYgP,EAAO5G,KAAMI,EAAUwG,EAAKxG,QAASg1B,EAAOl9B,EAAMorB,OAAOljB,EAAQ4rD,eAAgB6P,EAAU3jE,EAAMorB,OAAOljB,EAAQmlJ,kBAAmB9J,EAAavjJ,EAAMorB,OAAOljB,EAAQolJ,qBAAsBnX,EAAQn2I,EAAMorB,OAAOljB,EAAQqlJ,mBAAoBtiI,EAAMjrB,EAAMorB,OAAOljB,EAAQslJ,cAAepX,EAASp2I,EAAMorB,OAAOljB,EAAQulJ,oBAA0B1B,KAAwBt7H,EAAO/hB,EAAKge,WAAW+D,MAMjY,KALA1gB,EAAIA,MACJ0uB,EAAS1uB,EAAE0uB,OACPA,IACAhO,EAAO1gB,EAAEue,OAER7oB,EAAM,EAAG/F,EAAS+wB,EAAK/wB,OAAQ+F,EAAM/F,EAAQ+F,IAC9C2nJ,GAAQlwH,KAAMA,EAAKzM,EAAKhrB,KACpByC,EAAQmlJ,mBACRD,EAAIzpF,QAAUA,EAAQlzC,EAAKhrB,KAE3ByC,EAAQolJ,sBACRF,EAAI7J,WAAaA,EAAW9yH,EAAKhrB,KAEjCyC,EAAQslJ,eACRJ,EAAIniI,IAAMA,EAAIwF,EAAKhrB,KAEnByC,EAAQqlJ,oBACRH,EAAIjtE,SAAWg2D,EAAM1lH,EAAKhrB,KAE1ByC,EAAQulJ,qBACRL,EAAIltE,eAAiBk2D,EAAO3lH,EAAKhrB,KAErCsmJ,EAAKtmJ,GAAO2nJ,CAEhB,IAAgB,OAAZr9I,EAAE0uB,OACE1uB,EAAEkK,MAAQvL,EAAKw9I,SAASzpJ,WAAW/C,OACnCgP,EAAKskD,aAAa+4F,EAAMr9I,EAAKw9I,SAASzpJ,WAAWouB,GAAG9gB,EAAEkK,QAEtDvL,EAAKk9C,OAAOmgG,OAEb,IAAgB,UAAZh8I,EAAE0uB,OACT,IAAKh5B,EAAM,EAAGA,EAAMgrB,EAAK/wB,OAAQ+F,IAC7BiJ,EAAKshB,OAAOjgB,EAAEkK,WAEC,cAAZlK,EAAE0uB,QACTh5B,EAAMiJ,EAAKge,WAAW+D,OAAOzqB,QAAQyqB,EAAK,IACtC1gB,EAAE8V,QAAU3d,EAAQ4rD,eACpBplD,EAAKw9I,SAASzpJ,WAAWouB,GAAGprB,GAAK2pB,KAAK,WAAW8N,KAAKzM,EAAK,GAAGlF,IAAIxb,EAAE8V,QAEpE9V,EAAE8V,QAAU3d,EAAQslJ,eACpB9+I,EAAK+9I,aAAahnJ,GAAOgrB,EAAK,GAAGlF,IAAIxb,EAAE8V,UAG3CnX,EAAKoB,QAAQ,eACbpB,EAAKshB,OAAO,MACZthB,EAAK+9I,gBACL/9I,EAAKk9C,OAAOmgG,GACZr9I,EAAKoB,QAAQ,eAGrBpK,MAAO,SAAUA,GACb,GAAIgJ,GAAO5G,IACX,OAAIpC,KAAUhH,EASHgQ,EAAKkuB,SAASM,QARjBx3B,GAASgJ,EAAKhJ,SACdgJ,EAAKw9I,SAASzpJ,WAAW+C,KAAK,WACtBhH,EAAEu7B,KAAKv7B,EAAEsJ,MAAMo1B,SAAWx3B,GAC1BgJ,EAAKkuB,OAAO90B,QAHxB,IAWRwmB,MAAO,WACH,MAAOxmB,MAAKokJ,SAAS,GAAGzpJ,UAE5B0qB,WAAY,SAAUjlB,GAClB,GAAIwG,GAAO5G,KAAMo8E,EAAYx1E,EAAKxG,QAAQg8E,SAC1Cx1E,GAAK8oI,YAAYtvI,GACbA,EAAQu+I,cACR/3I,EAAK+9I,aAAevkJ,EAAQu+I,aAEhCv+I,EAAQg8E,UAAY17E,GAAO,EAAM07E,EAAWh8E,EAAQg8E,WAChDh8E,EAAQo7H,YACR50H,EAAKvN,QAAQqM,GAAG,UAAYm5D,EAAIj4D,EAAKk+I,eAErCl+I,EAAKvN,QAAQuwB,IAAI,UAAYi1C,EAAIj4D,EAAKk+I,eAE1C9/I,EAAOf,GAAGohB,WAAWld,KAAKvB,EAAMxG,IAEpCsH,QACI+3B,EACAy7C,EACA7f,EACA/oB,EACAwyC,EACA,SACA,cACA,aAEJ1kF,SACI8O,KAAM,WACN88C,cAAe,GACfu5F,iBAAkB,GAClBE,kBAAmB,GACnBC,aAAc,GACdC,mBAAoB,GACpBH,oBAAqB,GACrBI,YAAa,MACbxpE,WACIC,MACIt8E,QAAS,yBACTM,SAAU,KAEdi8E,OAASj8E,SAAU,MAEvBwlJ,aAAa,EACbrqB,aAAa,EACbmjB,aAAa,EACbzO,YAAczxG,SAAU,MAE5B3Y,QAAS,WACL,GAAIlf,GAAO5G,KAAM8lJ,EAAal/I,EAAKk/I,UACnC9gJ,GAAOf,GAAG6hB,QAAQ3d,KAAKvB,GACnBA,EAAK+yE,iBACL/yE,EAAKge,WAAW/c,OAAO,SAAUjB,EAAK+yE,iBAE1C/yE,EAAKvN,QAAQuwB,IAAIi1C,GACjBj4D,EAAKvN,QAAQsB,SAAS,qBAAqBivB,IAAIi1C,GAC3Cj4D,EAAKm/I,wBACLn/I,EAAKo/I,kBAAkBp8H,MAAM1B,SAC7BthB,EAAKq/I,kBAAkBr8H,MAAM1B,UAEjChwB,EAAM4tB,QAAQlf,EAAKvN,SACnBysJ,EAAWnrJ,SAAS,eAAe8sG,UAEvC3yE,OAAQ,SAAU/8B,GACd,GAAI6O,GAAO5G,IACX,OAAyB,KAArBjF,UAAUnD,OACHgP,EAAKw9I,SAASzpJ,SAAS,MAAQupJ,IAErCzuI,MAAM1d,KACPA,EAAU6O,EAAKw9I,SAASzpJ,WAAW8oB,IAAI1rB,IAE3CA,EAAU6O,EAAKw9I,SAAS98H,KAAKvvB,GAC7BrB,EAAEqB,GAAS2F,KAAK,SAAUyU,EAAOo6B,GAC7BA,EAAO71C,EAAE61C,GACJA,EAAK1yC,SAASqqJ,IAAiBt9I,EAAKoB,QAAQy3B,GACzC8M,KAAMA,EAAK,GACX2yG,eAAgBt4I,EAAKq+I,cAAc14G,EAAKp6B,SAAS,MAErDvL,EAAKs+I,YAAY34G,KAGlB3lC,IAEX6Y,OAAQ,SAAU1nB,EAASy0C,GAEvB,MADAxsC,MAAK4yI,gBAAgB76I,EAASy0C,KAAU,GACjCxsC,MAEXuf,QAAS,SAAUxnB,GAEf,MADAiI,MAAK4yI,gBAAgB76I,GAAS,GACvBiI,MAEXo+I,OAAQ,SAAUrmJ,GAAV,GAEA6O,GACA+3I,CAOJ,OATA5mJ,GAAUiI,KAAKokJ,SAAS98H,KAAKvvB,GACzB6O,EAAO5G,KACP2+I,EAAc/3I,EAAK+9I,aACvB5sJ,EAAQ2F,KAAK,WACT,GAAI6uC,GAAO71C,EAAEsJ,MAAOy7I,EAAalvG,EAAKjlB,KAAK,IAAMgjH,GAAM9uI,KAAK+oJ,IAAe5F,EAAYpyG,EAAKp6B,SAAU0pD,EAAUj1D,EAAKq+I,cAAc14G,EAAKp6B,QACpIspI,IACA70I,EAAKs/I,YAAY35G,EAAMsvB,EAAS,KAAM4/E,KAGvC70I,GAEXk9C,OAAQ,SAAUwhG,GACd,GAAI1+I,GAAO5G,KAAM8yI,EAAWlsI,EAAKu/I,QAAQb,EAkBzC,OAjBA5nJ,GAAKo1I,EAASmR,KAAM,SAAUtmJ,GAC1B,GAAIm/D,GAAWg2E,EAASh2E,SAASn/D,EACjCiJ,GAAKw9I,SAAStgG,OAAO9jD,MACW,UAA5B4G,EAAKxG,QAAQwlJ,YACbh/I,EAAKw9I,SAASzxE,OAAO7V,GACdl2D,EAAKm/I,sBACZn/I,EAAKo/I,kBAAkBrzE,OAAO7V,GAE9Bl2D,EAAKvN,QAAQyqD,OAAOgZ,GAExBl2D,EAAKke,QAAQ,UAAW,WACpB,OAASyB,UAAWu2C,QAG5B4tE,EAAgB9jI,EAAKw9I,UACrBx9I,EAAKw/I,yBACLx/I,EAAKqa,QAAO,GACLra,GAEXy/I,eAAgB,SAAUljI,GACtBnjB,KAAK2kJ,aAAa78I,KAAKqb,IAE3BmjI,aAAc,SAAUt5H,EAAMC,GAC1BjtB,KAAK2kJ,aAAav8I,OAAO6kB,EAAI,EAAGjtB,KAAK2kJ,aAAav8I,OAAO4kB,EAAM,GAAG,KAEtEu5H,eAAgB,SAAUp0I,GACtBnS,KAAK2kJ,aAAav8I,OAAO+J,EAAO,IAEpC+4C,aAAc,SAAUo6F,EAAKkB,GAErBA,EADA9vJ,EAAE4uJ,GAAKvrJ,GAAGrD,EAAE8vJ,IACGxmJ,KAAKokJ,SAAS98H,KAAKk/H,GAAcplG,OAEjCphD,KAAKokJ,SAAS98H,KAAKk/H,EAEtC,IAAI5/I,GAAO5G,KAAM8yI,EAAWlsI,EAAKu/I,QAAQb,GAAMmB,EAAmB7/I,EAAK7O,QAAQuvB,KAAK,IAAMk/H,EAAatjJ,KAAK,iBAc5G,OAbAxF,GAAKo1I,EAASmR,KAAM,SAAUtmJ,GAAV,GACZm/D,GAAWg2E,EAASh2E,SAASn/D,GAC7B+oJ,EAAY5T,EAAS6T,eAAiB//I,EAAK+9I,aAAa/sJ,QAAUk7I,EAASmR,KAAKrsJ,OAAS+F,GAAOjH,EAAEomE,GAAU3qD,QAAU,CAC1Hq0I,GAAa7zE,OAAO3yE,MACpBymJ,EAAiB9zE,OAAO7V,GACxBl2D,EAAK0/I,aAAaI,EAAWhwJ,EAAEsJ,MAAMmS,SACrCvL,EAAKke,QAAQ,UAAW,WACpB,OAASyB,UAAWu2C,QAG5B4tE,EAAgB9jI,EAAKw9I,UACrBx9I,EAAKw/I,uBAAuBtT,EAAS6T,gBACrC//I,EAAKqa,QAAO,GACLra,GAEXk7D,YAAa,SAAUwjF,EAAKkB,GAEpBA,EADA9vJ,EAAE4uJ,GAAKvrJ,GAAGrD,EAAE8vJ,IACGxmJ,KAAKokJ,SAAS98H,KAAKk/H,GAAcxqH,OAEjCh8B,KAAKokJ,SAAS98H,KAAKk/H,EAEtC,IAAI5/I,GAAO5G,KAAM8yI,EAAWlsI,EAAKu/I,QAAQb,GAAMmB,EAAmB7/I,EAAK7O,QAAQuvB,KAAK,IAAMk/H,EAAatjJ,KAAK,iBAc5G,OAbAxF,GAAKo1I,EAASmR,KAAM,SAAUtmJ,GAAV,GACZm/D,GAAWg2E,EAASh2E,SAASn/D,GAC7B+oJ,EAAY5T,EAAS6T,eAAiB//I,EAAK+9I,aAAa/sJ,QAAUk7I,EAASmR,KAAKrsJ,OAAS+F,GAAOjH,EAAEomE,GAAU3qD,QAAU,CAC1Hq0I,GAAahpF,MAAMx9D,MACnBymJ,EAAiBjpF,MAAMV,GACvBl2D,EAAK0/I,aAAaI,EAAWhwJ,EAAEsJ,MAAMmS,SACrCvL,EAAKke,QAAQ,UAAW,WACpB,OAASyB,UAAWu2C,QAG5B4tE,EAAgB9jI,EAAKw9I,UACrBx9I,EAAKw/I,uBAAuBtT,EAAS6T,gBACrC//I,EAAKqa,QAAO,GACLra,GAEXshB,OAAQ,SAAU3B,GAAV,GAGAu2C,GAFAl2D,EAAO5G,KACPd,QAAcqnB,EAmBlB,OAjBa,WAATrnB,EACAqnB,EAAW3f,EAAKw9I,SAAS98H,KAAKf,GACd,WAATrnB,IACPqnB,EAAW3f,EAAKw9I,SAASzpJ,WAAWouB,GAAGxC,IAE3Cu2C,EAAWv2C,EAASvT,IAAI,WAAA,GAChBrV,GAAMjH,EAAEsJ,MAAMmS,QACd0pD,EAAUj1D,EAAKs4I,eAAevhJ,EAGlC,OAFAzF,GAAM4tB,QAAQ+1C,GACdj1D,EAAK2/I,eAAe5oJ,GACbk+D,IAEXt1C,EAAS2B,SACT40C,EAAShtB,QACTgtB,EAAS50C,SACTthB,EAAKw/I,yBACLx/I,EAAKqa,QAAO,GACLra,GAEXu/I,QAAS,SAAUb,GACf,GAAiBrB,GAAMnnF,EAAUjB,EAA7Bj1D,EAAO5G,KAA+B2mJ,GAAiB,CAmC3D,OAlCArB,GAAMA,YAAeptJ,GAAMsD,KAAKD,gBAAkB+pJ,EAAIx7I,SAAWw7I,EAC7D5uJ,EAAEiyC,cAAc28G,IAAQ5uJ,EAAEqP,QAAQu/I,IAClCA,EAAM5uJ,EAAEqP,QAAQu/I,GAAOA,GAAOA,GAC9BqB,GAAiB,EACjB1C,EAAOjxI,EAAIsyI,EAAK,SAAU1nJ,EAAOD,GAE7B,MADAiJ,GAAKy/I,eAAef,EAAI3nJ,GAAK89I,YAAc,MACpC/kJ,EAAEguJ,EAASvR,YACdrlG,MAAOlnC,EAAKw9I,SACZ73G,KAAM7rC,EAAO9C,GAASuU,MAAOxU,SAGrCm/D,EAAW9pD,EAAIsyI,EAAK,SAAU1nJ,EAAOD,GACjC,GAA4B,gBAAjBC,GAAMi+D,SAAuBj+D,EAAM69I,WAC1C,MAAO/kJ,GAAEguJ,EAAS/L,eAAgBpsG,KAAM7rC,EAAO9C,GAASuU,MAAOxU,WAKnEsmJ,EADc,gBAAPqB,IAA6B,KAAVA,EAAI,GACvB1+I,EAAK7O,QAAQuvB,KAAKg+H,GAElB5uJ,EAAE4uJ,GAEbxoF,EAAWpmE,IACXutJ,EAAKvmJ,KAAK,WACN,GAAI,mBAAmBxD,KAAK8F,KAAKwe,WAAWvgB,WAAY,CACpD,GAAIlG,GAAU6O,EAAK7O,QAAQuvB,KAAK,IAAMtnB,KAAKgC,aAAa,iBACxD65D,GAAU9jE,MAEV8jE,GAAUnlE,EAAE,eAAkBgkJ,EAAU,MAE5C59E,GAAWA,EAASx7D,IAAIu6D,KAE5BmoF,EAAiBC,KAGjBA,KAAMA,EACNnnF,SAAUA,EACV6pF,eAAgBA,IAGxB/T,gBAAiB,SAAU76I,EAAS0nB,GAChC1nB,EAAUiI,KAAKokJ,SAAS98H,KAAKvvB,GAC7BA,EAAQ2F,KAAK,WACThH,EAAEsJ,MAAMoB,YAAYmpI,EAAc9qH,GAAQre,YAAYs2E,GAAgBj4D,MAG9EgwH,eAAgB,WACZ,GAAiBwU,GAAM2C,EAAYC,EAA/BjgJ,EAAO5G,IACX4G,GAAKvN,QAAQiB,SAAS,gCACtBsM,EAAKw9I,SAAWx9I,EAAKvN,QAAQsB,SAAS,MAAML,SAAS,4BAChDsM,EAAKw9I,SAAS,KACfx9I,EAAKw9I,SAAW1tJ,EAAE,0CAA4CogC,SAASlwB,EAAKvN,UAEhF4qJ,EAAOr9I,EAAKw9I,SAAS98H,KAAK,MAAMhtB,SAAS,UACrC2pJ,EAAKrsJ,SACLgvJ,EAAa3C,EAAKpgJ,OAAO,IAAMqgJ,GAAa/xI,QAC5C00I,EAAYD,GAAc,EAAIA,EAAahwJ,EAC3CgQ,EAAKw9I,SAAStnF,WAAWj5D,OAAO,WAC5B,MAAwB,IAAjB7D,KAAKknB,WAAkB+K,EAAKjyB,KAAKmyB,aACzCjK,UAEH0+H,GAAc,GACd3C,EAAKl7H,GAAG69H,GAAYtsJ,SAAS6pJ,GAEjCv9I,EAAKkgJ,gBAAkBlgJ,EAAKvN,QAAQsB,SAAS,OAC7CiM,EAAKkgJ,gBAAgBxsJ,SAASogJ,GAAS3xH,GAAG89H,GAAWvsJ,SAAS4pJ,GAAajsJ,KAAMonB,QAAS,UACtF4kI,EAAKrsJ,SACLosJ,EAAiBC,GACjBvZ,EAAgB9jI,EAAKw9I,UACrBx9I,EAAKw/I,wBAAuB,KAGpCW,WAAY,SAAUhvJ,EAAS4F,GAAnB,GAIAqpJ,GAHJC,EAAYlvJ,EAAQmL,KAAK,MACzBgkJ,EAAYlnJ,KAAKjI,QAAQmL,KAAK,KAClC,QAAK+jJ,GAAaA,EAAU/oJ,QAAQgpJ,EAAY,SACxCF,GAAcE,GAAahvJ,EAAMyrB,QAAU,IACxCqjI,GAAcrpJ,EAAM,IAExBspJ,GAEXb,uBAAwB,SAAUe,GAC9B,GAAIvgJ,GAAO5G,KAAM2+I,EAAc/3I,EAAK+9I,aAAcn+H,EAAQ5f,EAAKw9I,SAASzpJ,SAAS,WAAYmsJ,EAAkBlgJ,EAAKvN,QAAQsB,SAAS,OAAQosJ,EAAangJ,EAAKmgJ,WAAW3/I,KAAKR,EAC3KkgJ,GAAgBlvJ,QAAU4uB,EAAM5uB,OAASkvJ,EAAgBlvJ,OACzDkvJ,EAAgBppJ,KAAK,SAAUC,GAAV,GACbkmB,GAAKkjI,EAAWrwJ,EAAEsJ,MAAOrC,GACzB4uC,EAAO/lB,EAAM3iB,OAAO,mBAAqB7D,KAAK6jB,IAAM,GAAK,KAAK,IAC7D0oB,GAAQ46G,IACT56G,EAAO/lB,EAAM7oB,IAEb4uC,GACAA,EAAK7uB,aAAa,gBAAiBmG,GAEvC7jB,KAAK0d,aAAa,KAAMmG,KAG5B2C,EAAM9oB,KAAK,SAAUC,GAAV,GACHypJ,GAAiBN,EAAgB/9H,GAAGprB,GACpCkmB,EAAKkjI,EAAWK,EAAgBzpJ,EACpCqC,MAAK0d,aAAa,gBAAiBmG,IAC9BujI,EAAexvJ,QAAU+mJ,EAAYhhJ,GACtCjH,EAAE,eAAkBgkJ,EAAU,OAAQ5jH,SAASlwB,EAAKvN,SAAS6J,KAAK,KAAM2gB,IAExEujI,EAAelkJ,KAAK,KAAM2gB,GACrBntB,EAAEsJ,MAAMrF,SAAS,cAAc,IAAOgkJ,EAAYhhJ,IACnDjH,EAAE,wCAA0CuxB,UAAUjoB,OAG9DonJ,EAAelkJ,KAAK,OAAQ,YAC5BkkJ,EAAevjJ,OAAO,SAAWqgJ,EAAc,KAAKhhJ,KAAK,eAAe,GAAMA,KAAK,iBAAiB,GACpGkkJ,EAAevjJ,OAAO,IAAMqgJ,GAAahhJ,KAAK,iBAAiB,KAGvE0D,EAAKkgJ,gBAAkBlgJ,EAAKygJ,iBAAmBzgJ,EAAKvN,QAAQsB,SAAS,OACrEiM,EAAK0gJ,WAAa5tJ,EAAYkN,EAAKw9I,UAAY/xI,SAASzL,EAAKvN,QAAQpB,IAAI,oBAAqB,IAAMoa,SAASzL,EAAKvN,QAAQpB,IAAI,uBAAwB,IAClJC,EAAM6mB,qBAAuB7mB,EAAMopB,OAAOD,GAAGiI,WAC7CpxB,EAAMkxB,cAAcxiB,EAAKkgJ,iBACzBlgJ,EAAKkgJ,gBAAkBlgJ,EAAKkgJ,gBAAgBnsJ,SAAS,0BAG7Dg0G,SAAU,WACN,GAAI/nG,GAAO5G,IAEP4G,GAAKvN,QADLuN,EAAK7O,QAAQgC,GAAG,MACD6M,EAAK7O,QAAQ86C,QAAQ,WAAWj5C,SAEhCgN,EAAK7O,QAExB6O,EAAKk/I,WAAal/I,EAAKvN,QAAQO,OAAO,uBACjCgN,EAAKk/I,WAAW,KACjBl/I,EAAKk/I,WAAal/I,EAAKvN,QAAQw5C,QAAQ,sCAAwCj5C,WAGvFgrJ,aAAc,WACV,GAAIh+I,GAAO5G,KAAM4lJ,EAAch/I,EAAKxG,QAAQwlJ,WAC5Ch/I,GAAKvN,QAAQiB,SAAS,0BAA4BsrJ,GAC/B,UAAfA,GACAh/I,EAAKw9I,SAASttH,SAASlwB,EAAKvN,SAEhCuN,EAAKqa,QAAO,IAEhBsmI,8BAA+B,WAAA,GAGnBC,GAAmDC,EAA4CC,EAA+CtD,EAA0B7sF,EACxKowF,EAHJ/gJ,EAAO5G,KAAM4lJ,EAAch/I,EAAKxG,QAAQwlJ,WACzB,SAAfA,GAAwC,SAAfA,IACrB4B,EAAc5gJ,EAAKvN,QAAQsB,SAAS,cAAe8sJ,EAAYD,EAAY3jJ,OAAO,YAAa6jJ,EAAsB,UAAY9B,EAAaxB,EAAWx9I,EAAKw9I,SAAU7sF,EAAS/9D,EAAW4qJ,GAC5LuD,EAAY/oJ,KAAK2iD,KAAK6iG,EAASlrJ,UAAYmZ,SAASo1I,EAAUxvJ,IAAI,eAAgB,IAAMoa,SAASo1I,EAAUxvJ,IAAI,kBAAmB,IAAMoa,SAASo1I,EAAUxvJ,IAAI,oBAAqB,IAAMoa,SAASo1I,EAAUxvJ,IAAI,uBAAwB,IAC7OyxB,WAAW,WACP89H,EAAYvvJ,IAAIyvJ,EAAqBnwF,GAAQt/D,IAAI,aAAc0vJ,OAI3EhiI,QAAS,WACL3lB,KAAKunJ,gCACLvnJ,KAAK6kJ,eAET+C,gBAAiB,SAAU7vJ,GAAV,GAEL6tJ,GACA1/B,CAFJnuH,GAAQgC,GAAG,cACP6rJ,EAAc5lJ,KAAKI,QAAQwlJ,YAC3B1/B,EAAItnH,KAAKpE,MAAMd,EAAY3B,GAAS,KAA0B,SAAhB6tJ,GAA0C,UAAhBA,EAA0B,EAAI5lJ,KAAKsnJ,YAC/GtnJ,KAAK8lJ,WAAW7tJ,IAAI,SAAUiuH,GAAGjuH,IAAI,YAG7C+gG,aAAc,SAAU/wF,GACpBvR,EAAEuR,EAAE22B,eAAex9B,YAAYksI,EAAYrlI,EAAE/I,MAAQujG,IAEzDv+D,OAAQ,SAAUqI,GACd,GAA6Ko2D,GAASi8C,EAAlLh4I,EAAO5G,KAAMqlG,EAAO94D,EAAKjlB,KAAK,IAAMgjH,GAAO/mI,EAAO8hG,EAAKniG,KAAKk3I,GAAOzlH,EAAW/tB,EAAKxG,QAAQylJ,YAAa1zI,EAAQo6B,EAAKp6B,QAAS8yI,EAAgBr+I,EAAKq+I,cAAc9yI,EACrK,IAAIo6B,EAAKt0B,QAAQ,aAAa,IAAMrR,EAAKvN,QAAQ,GAAjD,CAGA,GAAIkzC,EAAKxyC,GAAG,IAAM29E,GAAkB/iD,EAAgC,GAArB,KAAOuvH,IAClD,OAAO,CAIX,IAFAtF,EAAWv5C,EAAK7pG,KAAK+oJ,IAAe39I,EAAK+9I,aAAaxyI,IAAU5O,IAAyC,KAAhCA,EAAKlM,OAAOkM,EAAK3L,OAAS,IAAa2L,EAAKrF,QAAQ,IAAM0I,EAAK7O,QAAQ,GAAG8rB,GAAK,UACxJ8+E,GAAWp/F,GAAQq7I,EACfh4I,EAAKw9I,SAASzpJ,SAAS,oBAAoB/C,OAC3C,MAAO+qG,EAEX,IAAI/7F,EAAKoB,QAAQy3B,GACT8M,KAAMA,EAAK,GACX2yG,eAAgB+F,EAAc,KAElC,OAAO,CAEX,IAAItiD,KAAY,EAGhB,MAAIhuE,IAAY4X,EAAKxyC,GAAG,IAAMmqJ,IAC1Bt9I,EAAKihJ,cAAct7G,IACZ,IAEP3lC,EAAKs+I,YAAY34G,KACjBo2D,GAAU,GAEPA,KAEXkiD,YAAa,WAAA,GACgCiD,GAAoBC,EAAqBC,EAAkBC,EAQxFC,EACAC,EATRvhJ,EAAO5G,KAAMI,EAAUwG,EAAKxG,OAC5BwG,GAAKwhJ,uBACLxhJ,EAAKvN,QAAQiB,SAAS,yBACtBwtJ,EAAqBlhJ,EAAKvN,QAAQ,GAAG0e,YACrCgwI,EAAsBnhJ,EAAKw9I,SAAS,GAAG1lJ,YACnCqpJ,EAAsBD,IAAuBlhJ,EAAKm/I,uBAClDn/I,EAAKyhJ,mBAAoB,EACzBzhJ,EAAK46E,OAAStpF,EAAMC,QAAQkG,MAAMuI,EAAK7O,SACnCmwJ,EAAYhwJ,EAAMC,QAAQgf,SAAW,aAAe,YACpDgxI,EAAUjwJ,EAAMC,QAAQgf,SAAW,WAAa,UACpDvQ,EAAKvN,QAAQyqD,OAAOugG,EAAiB,OAAQ,qBAAuBA,EAAiB,OAAQ,uBAC7F2D,EAAmBphJ,EAAKo/I,kBAAoBp/I,EAAKvN,QAAQsB,SAAS,oBAClEstJ,EAAmBrhJ,EAAKq/I,kBAAoBr/I,EAAKvN,QAAQsB,SAAS,oBAClEiM,EAAKw9I,SAASnsJ,KACVy+D,WAAYl9D,EAAWwuJ,GAAoB,EAC3CM,YAAa9uJ,EAAWyuJ,GAAoB,KAEhDD,EAAiBtiJ,GAAGwiJ,EAAYrpF,EAAI,WAChCj4D,EAAKyhJ,mBAAoB,EACzBzhJ,EAAK2hJ,mBAAmBnoJ,EAAQ8vI,WAAWzxG,UAAY73B,EAAK46E,OAAS,SAEzEymE,EAAiBviJ,GAAGwiJ,EAAYrpF,EAAI,WAChCj4D,EAAKyhJ,mBAAoB,EACzBzhJ,EAAK2hJ,mBAAmBnoJ,EAAQ8vI,WAAWzxG,UAAY73B,EAAK46E,UAAc,MAE9EwmE,EAAiB1mJ,IAAI2mJ,GAAkBviJ,GAAGyiJ,EAAUtpF,EAAI,WACpDj4D,EAAKyhJ,mBAAoB,IAE7BzhJ,EAAKm/I,uBAAwB,EAC7Bn/I,EAAKyqI,wBACEzqI,EAAKm/I,uBAAyBgC,GAAuBD,GAC5DlhJ,EAAKm/I,uBAAwB,EAC7Bn/I,EAAKvN,QAAQsxD,YAAY,yBACzB/jD,EAAKo/I,kBAAkBp8H,MAAM1B,SAC7BthB,EAAKq/I,kBAAkBr8H,MAAM1B,SAC7BthB,EAAKw9I,SAASnsJ,KACVy+D,WAAY,GACZ4xF,YAAa,MAET1hJ,EAAKm/I,sBAGbn/I,EAAKyqI,uBAFLzqI,EAAKvN,QAAQsxD,YAAY,2BAMrCy9F,mBAAoB,WAChB,GAAIhoJ,GAAUJ,KAAKI,OACnB,OAAOA,GAAQ8vI,aAAez6H,MAAMrV,EAAQ8vI,WAAWzxG,YAAqC,OAAvBr+B,EAAQwlJ,aAA+C,UAAvBxlJ,EAAQwlJ,cAEjH4C,kBAAmB,SAAUj8G,GACzB,GAA4VksG,GAAxV7xI,EAAO5G,KAAMokJ,EAAWx9I,EAAKw9I,SAAUhM,EAAsBgM,EAAShmJ,aAAc4tH,EAAYxyH,EAAW+yC,GAAO+rG,EAAa1xI,EAAK46E,OAASj1C,EAAK8pB,WAAW19D,KAAO4zC,EAAK8pB,WAAW19D,KAAOyrJ,EAASzpJ,WAAWvD,QAAQi/D,WAAW19D,KAAM8vJ,EAAgBrE,EAAS,GAAGrsI,YAAa2wI,EAAkB9pJ,KAAK2iD,KAAKp/C,WAAWiiJ,EAASnsJ,IAAI,iBACrU2O,GAAK46E,OACD82D,EAAa,EACbG,EAAeL,EAAsBE,GAAcmQ,EAAgBrQ,GAAuBsQ,EACnFpQ,EAAatsB,EAAYy8B,IAChChQ,EAAeL,EAAsBE,EAAatsB,EAA8B,EAAlB08B,GAG9DtQ,EAAsBqQ,EAAgBnQ,EAAatsB,EACnDysB,EAAeH,EAAatsB,EAAYy8B,EAAkC,EAAlBC,EACjDtQ,EAAsBE,IAC7BG,EAAeH,EAAaoQ,GAGpCtE,EAAS9R,SAAStxI,SAAU5C,WAAcq6I,GAAgB,OAAQ,SAAU,WACxE7xI,EAAKyqI,0BAGbkX,mBAAoB,SAAUl1H,GAAV,GACZzsB,GAAO5G,KACPokJ,EAAWx9I,EAAKw9I,SAChBuE,EAAUvE,EAAShmJ,YACvBgmJ,GAAS9R,SAAStxI,SAAU5C,WAAcuqJ,EAAUt1H,GAAS,OAAQ,SAAU,WACvEzsB,EAAKyhJ,kBACLzhJ,EAAK2hJ,mBAAmBl1H,GAExBzsB,EAAKyqI,0BAIjBA,qBAAsB,WAClB,GAAIzqI,GAAO5G,KAAMmyF,EAAKvrF,EAAKw9I,SAAUhmJ,EAAa+zF,EAAG/zF,YACrDwI,GAAKo/I,kBAAkB7lI,OAAOvZ,EAAK46E,OAASpjF,EAAa+zF,EAAG,GAAGzzF,YAAcyzF,EAAG,GAAGp6E,YAAc,EAAmB,IAAf3Z,GACrGwI,EAAKq/I,kBAAkB9lI,OAAOvZ,EAAK46E,OAAwB,IAAfpjF,EAAmBA,EAAa+zF,EAAG,GAAGzzF,YAAcyzF,EAAG,GAAGp6E,YAAc,IAExH8vI,cAAe,SAAUt7G,GACrB,GAAI3lC,GAAO5G,KAAM8+I,EAAoBl4I,EAAKxG,QAAQg8E,UAAWA,EAAY0iE,EAAkBziE,KAAMC,EAAQ57E,KAAWo+I,EAAkBxiE,OAAQssE,EAAoBtsE,GAAS,WAAaA,EACxL/vC,GAAO3lC,EAAKw9I,SAAS98H,KAAKilB,GAC1B+vC,EAAQ57E,EAAOkoJ,EAAoBtsE,EAAQ57E,GAASJ,SAAS,GAAQ87E,IAAct7E,MAAM,IACrF5I,EAAM6F,KAAKq+E,EAAUr8E,UACrBwsC,EAAKvsB,cAAcuqH,GAAgBlqI,SAAU+7E,EAAU/7E,WACvDksC,EAAKtsB,iBAAiBikI,GAAe7jJ,SAAU+7E,EAAU/7E,aAEzDksC,EAAKjyC,SAASiwI,GACdh+F,EAAKoe,YAAYu5F,IAErB33G,EAAKnnB,WAAW,iBAChBxe,EAAKygJ,iBAAiBxjJ,OAAO,IAAMqgJ,GAAavkI,WAAU,GAAM,GAAMI,aAAau8D,GAAO3xB,YAAYu5F,GAAahhJ,KAAK,eAAe,IAE3IgiJ,YAAa,SAAU34G,GAAV,GAKL3lC,GAAak4I,EAA4C1iE,EAAoCE,EAA6CssE,EAAiDC,EAAuCC,EAA+C96G,EASjRq5G,EAgBA0B,EAA8D9D,EAA+C/F,EAQ7G8J,EAAkIC,EAiC/HC,CAtEP,KAAIlpJ,KAAKokJ,SAASzpJ,SAAS,oBAAoB/C,OAkB/C,MAfA20C,GAAOvsC,KAAKokJ,SAAS98H,KAAKilB,GACtB3lC,EAAO5G,KAAM8+I,EAAoBl4I,EAAKxG,QAAQg8E,UAAWA,EAAY0iE,EAAkBziE,KAAMC,EAAQ57E,KAAWo+I,EAAkBxiE,OAAQssE,EAAoBtsE,GAAS,WAAaA,GAAOusE,EAAat8G,EAAK3yC,SAASe,WAAYmuJ,EAASD,EAAWhlJ,OAAO,IAAMqgJ,GAAcl2G,EAAY66G,EAAW12I,MAAMo6B,GAClT+vC,EAAQ57E,EAAOkoJ,EAAoBtsE,EAAQ57E,GAASJ,SAAS,GAAQ87E,IAAct7E,MAAM,IACrF5I,EAAM6F,KAAKq+E,EAAUr8E,UACrB+oJ,EAAO7oI,iBAAiBikI,GAAe7jJ,SAAUi8E,EAAMj8E,WACvDksC,EAAKtsB,iBAAiBqtH,GAAcjtI,SAAUi8E,EAAMj8E,aAEpDyoJ,EAAOn+F,YAAYu5F,GACnB33G,EAAKoe,YAAY2iF,IAEjB+Z,EAAmBzgJ,EAAKygJ,iBACxBzgJ,EAAKuiJ,YACLviJ,EAAKw5C,IAAIgpG,QACTxiJ,EAAKuiJ,WAAY,GAEW,IAA5B9B,EAAiBzvJ,QACjBgP,EAAKw9I,SAAS98H,KAAK,IAAM68H,GAAUx5F,YAAYw5F,GAC/C53G,EAAKjyC,SAAS6pJ,GAAUlsJ,IAAI,WAC5Bs0C,EAAKjyC,SAAS4pJ,GACdt9I,EAAK63F,SAASlyD,GACd3lC,EAAKoB,QAAQ,UACTpB,EAAKm/I,uBACLn/I,EAAK4hJ,kBAAkBj8G,IAEpB,IAEPw8G,EAAkB1B,EAAiBxjJ,OAAO,IAAMqgJ,GAAce,EAAgBr+I,EAAKq+I,cAAcj3G,GAAYkxG,EAAiB+F,EAAchtI,QAAQ,cACxJrR,EAAK0gJ,WAAa5tJ,EAAYkN,EAAKw9I,UAAY/xI,SAASzL,EAAKvN,QAAQpB,IAAI,oBAAqB,IAAMoa,SAASzL,EAAKvN,QAAQpB,IAAI,uBAAwB,IACtJ2O,EAAKghJ,gBAAgBmB,GACQ,IAAzB9D,EAAcrtJ,QACdmxJ,EAAgBp+F,YAAYu5F,GAAahhJ,KAAK,eAAe,GAAMyc,WAAU,GAAM,GAAMI,aAAau8D,IAC/F,IAEX/vC,EAAKrpC,KAAK,kBAAkB,GACxB8lJ,GAAiBz8G,EAAK5xC,SAAS,IAAM2vI,GAAM9uI,KAAK+oJ,IAAe39I,EAAK+9I,aAAa32G,KAAc,IAAUi3G,EAAclrJ,GAAGiV,GAAQi6I,EAAqB,WACnJriJ,EAAKw9I,SAAS98H,KAAK,IAAM68H,GAAUx5F,YAAYw5F,GAC/C53G,EAAKjyC,SAAS6pJ,GAAUlsJ,IAAI,WACxBC,EAAM6F,KAAKq+E,EAAUr8E,UACrB+oJ,EAAO9oI,cAAcuqH,GAAgBlqI,SAAU+7E,EAAU/7E,WACzDksC,EAAKvsB,cAAckkI,GAAe7jJ,SAAU+7E,EAAU/7E,aAEtDyoJ,EAAOxuJ,SAASiwI,GAChBh+F,EAAKjyC,SAAS4pJ,IAElB4E,EAAO1jI,WAAW,iBAClBmnB,EAAKrpC,KAAK,iBAAiB,GAC3B0D,EAAK63F,SAASlyD,GACd3lC,EAAKghJ,gBAAgB1I,GACrBA,EAAe5kJ,SAAS4pJ,GAAa9+H,WAAW,eAAezF,WAAU,GAAM,GAAMzc,KAAK,iBAAiB,GAAM6c,aAAarf,GAC1HC,KAAM,WACFiG,EAAKoB,QAAQqzD,GACT9uB,KAAMA,EAAK,GACX2yG,eAAgB+F,EAAc,KAElC/sJ,EAAM+oB,OAAOgkI,KAElB7oE,GACC77E,SAAU,WACNgsC,EAAKnnB,WAAW,kBAChBxe,EAAKoB,QAAQkzE,GACT3uC,KAAMA,EAAK,GACX2yG,eAAgB+F,EAAc,KAElC/sJ,EAAM+oB,OAAOgkI,GACbr+I,EAAKk/I,WAAW7tJ,IAAI,SAAU,IAAIA,IAAI,eAG/CixJ,EAAc,WACRF,GAIDz8G,EAAKnnB,WAAW,kBAChBxe,EAAKs/I,YAAY35G,EAAM04G,EAAe,WAClC14G,EAAKrpC,KAAK,kBAAkB,GAC5B+lJ,IACAriJ,EAAKoB,QAAQ,cAPjBihJ,IACAriJ,EAAKoB,QAAQ,WASbpB,EAAKm/I,uBACLn/I,EAAK4hJ,kBAAkBj8G,IAGnCw8G,EAAgBp+F,YAAYu5F,GAC5B6E,EAAgB7lJ,KAAK,eAAe,GACpC6lJ,EAAgB7lJ,KAAK,iBAAiB,GAClC6lJ,EAAgBnxJ,OAChBmxJ,EAAgBppI,WAAU,GAAM,GAAMI,aAAarf,GAASH,SAAU2oJ,GAAe5sE,IAErF4sE,KAEG,KAEXhK,eAAgB,SAAUlxG,GAAV,GAIR84G,GACAjjI,EAES/oB,EAAOwpB,CANpB,IAAI7O,MAAMu4B,EAAY,GAClB,MAAOp3C,EAIX,IAFIkwJ,EAAkB9mJ,KAAK8mJ,iBAAmB9mJ,KAAK8mJ,gBAAgB,KAAO5uJ,EAAM6mB,oBAAsB/e,KAAK8mJ,gBAAkB9mJ,KAAKqnJ;AAC9HxjI,EAAKntB,EAAEsJ,KAAKokJ,SAASzpJ,WAAWqzC,IAAY9qC,KAAK,iBACjD4jJ,EACA,IAAShsJ,EAAI,EAAGwpB,EAAMwiI,EAAgBlvJ,OAAQkD,EAAIwpB,EAAKxpB,IACnD,GAAIgsJ,EAAgB/9H,GAAGjuB,GAAGmd,QAAQ,cAAc,GAAG4L,IAAMA,EACrD,MAAOijI,GAAgBhsJ,EAInC,OAAOlE,IAEXquJ,cAAe,SAAUj3G,GACrB,GAAIkxG,GAAiBxoJ,EAAEsJ,KAAKk/I,eAAelxG,IAAaq7G,EAAkBnK,EAAevkJ,SAAS,uBAClG,OAAOzC,GAAMC,QAAQggB,OAASkxI,EAAgB,GAAKA,EAAkBnK,GAEzEgH,YAAa,SAAUnuJ,EAAS8jE,EAASt7D,EAAU4iB,GAAtC,GAELvc,GAAaw5C,EAA0BilD,EAAiC7pG,EAAW8tJ,EAAiCC,EAAsBpK,EAI1IqK,EACAC,EAQAC,CAdJ3xJ,GAAUiI,KAAKokJ,SAAS98H,KAAKvvB,GACzB6O,EAAO5G,KAAMogD,EAAM1pD,EAAEizJ,aAAavpG,IAAKilD,EAAOttG,EAAQuvB,KAAK,IAAMgjH,GAAO9uI,KAAW8tJ,EAAYvxJ,EAAQkB,QAAU,EAAGswJ,GAAe,EAAOpK,EAAapnJ,EAAQuvB,KAAK,cAAcqjC,YAAY,cAC7Lw0F,EAAW,KACZA,EAAazoJ,EAAE,6BAA+BuxB,UAAUlwB,IAExDyxJ,EAAuB,EAAZF,EAAgBnK,EAAWlmJ,QACtCwwJ,EAAuB,WACvBtK,EAAWn+I,SAAU01D,YAAarkD,SAAS8sI,EAAWlnJ,IAAI,cAAe,KAAO,GAAKqxJ,EAAYE,EAAW,GAAK,IAAKC,IAEtHvxJ,EAAMC,QAAQoB,QAAQgB,MAAQrC,EAAMC,QAAQoB,QAAQkB,QAAU,IAC9DivB,WAAW+/H,EAAsB,IAErCtmI,EAAMA,GAAOkiF,EAAK7pG,KAAK+oJ,IAAe39I,EAAK+9I,aAAa5sJ,EAAQoa,UAAYkzF,EAAKniG,KAAKk3I,GACtFxzI,EAAKuiJ,WAAY,EACbO,GACAxqJ,KAAM,MACNstB,OAAO,EACPrJ,IAAKA,EACL0kB,SAAU,OACVrsC,KAAMA,EACN4kD,IAAK,WACD,GAAIz0C,GAAU3L,KAAM4pJ,EAAUxpG,IAAOznC,EAAQhN,EAAQk+I,eAAiB,mBAAmBl+I,EAAQ+b,UAAW,UAgB5G,OAfIkiI,IACAlzJ,EAAEgH,MACEksJ,EACAA,EAAQE,QACT,WACK9pJ,KAAKsd,kBACLtd,KAAKsd,iBAAiB,WAAY,SAAUysI,GACpCpxI,GACAhN,EAAQgN,GAAOoxI,KAEpB,KAIfp+I,EAAQq+I,aAAerzJ,OAAOszJ,gBAAkB,UAAY,IAAIA,iBACzDL,GAEXliI,SAAU,SAAUqiI,GAChB,GAAIA,EAAIG,iBAAkB,CACtB,GAAI36I,GAAU8C,SAAS03I,EAAIhmG,OAASgmG,EAAI9hH,MAAQ,IAAK,IAAM,GAC3Dk3G,GAAWr/H,MAAK,GAAMxlB,SAAS,cAAcrC,KACzCgB,MAASsW,EACTmnD,WAAc,MAI1B3d,MAAO,SAAUqH,EAAKf,GACdz4C,EAAKoB,QAAQ,SACTo4C,IAAKA,EACLf,OAAQA,KAEZr/C,KAAKO,YAGb4pJ,aAAc,WACVjvH,cAAcquH,GACdpK,EAAWr/H,MAAK,GAAMxlB,SAAS,cAAc,GAAGR,MAAM6d,QAAU,IAEpEpX,SAAU,SAAU6/C,GAChBx5C,EAAKuiJ,WAAY,EACbnpJ,KAAKgqJ,WACLtgI,WAAW1pB,KAAKmqJ,aAAc,KAE9BnqJ,KAAKmqJ,eAEa,SAAlB/pG,EAAIgqG,YACJjL,EAAWj3H,UAGnB2wB,QAAS,SAAUr9C,GAAV,GAGGmQ,GAAgBo4C,EAkBhBt/B,CApBR06H,GAAW7kJ,SAAS,aACpB,KACQqR,EAAU3L,KAAM+jD,EAAS,GACzBp4C,EAAQq+I,aACR7K,EAAWlmJ,MAAM8qD,EAAS,KAC1BwlG,EAAetuH,YAAY,WACvBtvB,EAAQ+b,UACJwiI,kBAAkB,EAClBnmG,OAAQnlD,KAAKoT,IAAI+xC,EAAQ,KACzB9b,MAAO,MAEX8b,GAAU,IACX,KAEPn9C,EAAKke,QAAQ,UAAW,WACpB,OAASyB,SAAUs1C,EAAQp4C,SAE/BvrB,EAAM4tB,QAAQ+1C,GACdA,EAAQn5D,KAAKlH,GACf,MAAOyM,GACDwc,EAAU9tB,OAAO8tB,QACjBA,GAAWA,EAAQs0B,OACnBt0B,EAAQs0B,MAAM9wC,EAAEiH,KAAO,KAAOjH,EAAEuc,QAAU,OAASrB,GAEvDnjB,KAAK+4C,MAAM/4C,KAAKogD,IAAK,SAErB7/C,GACAA,EAAS4H,KAAKvB,EAAMi1D,GAExBj1D,EAAKke,QAAQ,UAAW,WACpB,OAASyB,SAAUs1C,EAAQp4C,SAE/B7c,EAAKoB,QAAQ88E,GACTv4C,KAAMx0C,EAAQ,GACdmnJ,eAAgBrjF,EAAQ,OAIjB,gBAAR14C,KACPumI,EAAchzJ,EAAEgK,QAAO,KAAUgpJ,EAAavmI,GAC1CjnB,EAAWwtJ,EAAYvmI,OACvBumI,EAAYvmI,IAAMumI,EAAYvmI,QAGtCvc,EAAKw5C,IAAM1pD,EAAEq7C,KAAK23G,KAG1BhpJ,GAAOgkJ,GACHvR,WAAY,SAAU/yI,GAClBA,EAAUM,GACN2pJ,YACAv8G,UACD1tC,EACH,IAAI0vC,GAAQwxC,EAAUxxC,MAAOvD,EAAOnsC,EAAQmsC,IAC5C,OAAO+0C,GAAU/0C,KAAK7rC,EAAON,GACzBiuI,MAAO9hG,EAAK8rC,SAAWiJ,EAAU+sD,MAAQv+F,EACzCw+F,OAAQ/hG,EAAK6rC,eAAiBkJ,EAAUgtD,OAASx+F,EACjDq+F,YAAa7sD,EAAU6sD,aACxBI,KAEPoK,cAAe,SAAUv4I,GACrB,MAAOkhF,GAAUzlB,QAAQn7D,EAAON,EAASmuI,OAGjDr2I,EAAMmpB,GAAG8G,OAAOu8H,IAClB/tJ,OAAOuB,MAAM2sB,QACRluB,OAAOuB,OACE,kBAAVzB,SAAwBA,OAAOgiC,IAAMhiC,OAAS,SAAUiiC,EAAIC,EAAIC,IACrEA,GAAMD,OAEV,SAAUniC,EAAGC,QACVA,OAAO,oBAAqB,eAAgBD,IAC9C,WA+lBE,MAvlBC,UAAUE,EAAGE,GA0QV,QAAS85B,GAAQ7kB,EAAM0gB,EAAMoE,GACzB,GAAuC25H,GAAnClrJ,EAASyM,EAAKqB,mBAClBrB,GAAK6kB,QAAQ7kB,EAAK5P,UAAYswB,GACzBoE,IACD25H,EAAaz+I,EAAKqB,oBAAsB9N,EACxCyM,EAAK6kB,QAAQ7kB,EAAK5P,UAAYquJ,EAAaz5H,IAGnD,QAAS05H,KACL,GAAIz5H,GAAQ,GAAIgxE,GAAQ0oD,EAAW,GAAI1oD,GAAKhxE,EAAMnkB,cAAemkB,EAAMpkB,WAAYokB,EAAMxkB,UAAW,EAAG,EAAG,GAAIm+I,EAAO,GAAI3oD,GAAKhxE,EAAMnkB,cAAemkB,EAAMpkB,WAAYokB,EAAMxkB,UAAW,GAAI,EAAG,EAC7L,WAAak+I,EAASt9I,oBAAsBu9I,EAAKv9I,qBAErD,QAASH,GAAgBlB,GACrB,MAAyB,IAAlBA,EAAKe,WAAkBikB,EAAgBhlB,EAAKgB,aAAegkB,EAAoC,IAApBhlB,EAAKiB,aAAsBjB,EAAKkB,kBAEtH,QAASi1F,GAAUpkG,EAAOoU,EAAKtZ,GAC3B,GAAgE43B,GAA5DC,EAAQxjB,EAAgBiF,GAAMwe,EAAQzjB,EAAgBrU,EAC1D,QAAKkF,GAAS2yB,GAASC,IAGvBF,EAAUvjB,EAAgBnP,GACtB2yB,EAAQD,IACRA,GAAWP,GAEXS,EAAQD,IACRC,GAAST,GAENO,GAAWC,GAASD,GAAWE,GAsS1C,QAAS+J,GAAUn6B,GACf,GAAIutG,GAAevtG,EAAQutG,YAC3BvtG,GAAQ2I,OAAS+5F,EAAc1iG,EAAQ2I,QAAU7Q,EAAMwT,WAAWtL,EAAQoL,SAASO,UAAUC,SAASG,SAAS+E,GAC/Gy8F,EAAe5nG,EAAQ4nG,GAAgBA,GAAgBA,GACvDA,EAAavlG,OAAO,EAAG,EAAGhI,EAAQ2I,QAClC3I,EAAQutG,aAAeA,EAE3B,QAASxpG,GAAe8D,GACpBA,EAAE9D,iBAnlBT,GAGOumJ,GAsSAC,EAxSAzyJ,EAAQvB,OAAOuB,MAAOypB,EAAOzpB,EAAMypB,KAAMqnB,EAAQ9wC,EAAMwe,UAAWlE,EAAgBta,EAAMqa,eAAgBuwF,EAAgB5qG,EAAMoa,eAAgBna,EAAUD,EAAMC,QAASoB,EAAUpB,EAAQoB,QAAS8nB,EAAKnpB,EAAMmpB,GAAIrc,EAASqc,EAAGrc,OAAQ+1E,EAAO,OAAQC,EAAQ,QAASvhD,EAAS,SAAUx3B,EAAK,mBAAoBo1E,EAAQ,QAAUp1E,EAAI8rG,EAAU,kBAAmBt2B,EAAW,WAAYsyB,EAAW,WAAYyN,EAAK,KAAM1J,EAAO,UAAWzc,EAAU,kBAAmBC,EAAQ,gBAAiB0c,EAAc,aAAe/rG,EAAK,cAAgBA,EAAIk3E,EAAY,YAAcl3E,EAAI4uB,EAAgB,IAAOd,EAAa,MAAUulD,EAAW,mBAAoBs0B,EAAgB,mBAAoB7E,EAAgB,gBAAiBmJ,EAAgB,gBAAiBC,EAAc,cAAerJ,EAAgB,gBAAiB8lD,EAAwB,wBAAyBx5D,EAAK,KAAMrrF,EAAUrP,EAAEqP,QAASrF,EAAShK,EAAEgK,OAAQsF,EAAQtP,EAAEsP,MAAO87F,EAAO9lG,KAAMuoG,EAAQ,GAAIzC,EAC57ByC,GAAQ,GAAIzC,GAAKyC,EAAM53F,cAAe43F,EAAM73F,WAAY63F,EAAMj4F,UAAW,EAAG,EAAG,GAC3Eo+I,EAAW,SAAUtqJ,GACrB,GAAIwG,GAAO5G,KAAM6jB,EAAKzjB,EAAQyjB,EAC9Bjd,GAAKxG,QAAUA,EACfwG,EAAKikJ,UACLjkJ,EAAKurF,GAAKz7F,EAAE,kGAAkGuB,KAAMkG,SAAUhG,EAAQ4mB,oBAAsB,GAAK,SAAUrZ,GAAG2xE,EAAOmgC,EAAIxxG,EAAMY,EAAKs9B,OAAQt9B,IAAOlB,GAAG,aAAezD,EAAIu1G,EAAI,WACzO9gH,EAAEsJ,MAAM1F,SAASg3F,KAClB5rF,GAAG,aAAezD,EAAIu1G,EAAI,WACzB9gH,EAAEsJ,MAAM2qD,YAAY2mC,KAExB1qF,EAAK2pC,KAAO75C,EAAE,qEAAyEotD,OAAOl9C,EAAKurF,IAAIzsF,GAAGyzE,EAAWh1E,GACjH0f,IACAjd,EAAKkkJ,YAAcjnI,EAAK,YACxBjd,EAAKy2F,UAAYx5E,EAAK,mBACtBjd,EAAKurF,GAAGjvF,KAAKkuF,EAAIxqF,EAAKkkJ,cAE1BlkJ,EAAKkyF,SACLlyF,EAAKmkJ,eAAiB/kJ,EAAMY,EAAK+wF,QAAS/wF,GAC1CA,EAAKnE,SAAWvK,EAAMuK,SAAS,iFAAmF6F,cAAc,KAEpIoiJ,EAAS3jJ,WACL4E,QAAS,SAAU87E,GACf,GAAI7gF,GAAO5G,KAAMonG,EAASxgG,EAAKxG,QAAQgnG,MACvC,OAAI3f,KAAc7wF,EAaPgQ,EAAK63F,UAZR73F,EAAK63F,UACL73F,EAAK63F,SAAS9zC,YAAY2qB,GAAUlwD,WAAW2/E,GAAe3/E,WAAWgsE,GAEzE3J,IACAA,EAAY/wF,EAAE+wF,GAAWntF,SAASg7E,GAAUpyE,KAAKkuF,EAAIxqF,EAAKy2F,WAAWn6F,KAAK6hG,GAAe,GACzFn+F,EAAKo3F,OAAOvW,EAAU,KAE1B7gF,EAAK63F,SAAWhX,EACZ2f,GACAA,EAAO3f,GATX,IAeRnL,MAAO,WACHt8E,KAAK69E,MAAMvB,SAEfx2D,QAAS,WACL,GAAIlf,GAAO5G,IACX4G,GAAKurF,GAAGvoE,IAAI3nB,GACZ2E,EAAK2pC,KAAK3mB,IAAI3nB,GACd2E,EAAKi3E,MAAM/3D,WAEfu2D,KAAM,WACF,GAAIz1E,GAAO5G,IACN4G,GAAKurF,GAAG,GAAGloD,YACZrjC,EAAKQ,OAETR,EAAKi3E,MAAMxB,OACPz1E,EAAK63F,UACL73F,EAAKo3F,OAAOp3F,EAAK63F,SAAS,KAGlCusD,SAAU,SAAUhoD,GAEhB,IADA,GAAuJn3F,GAAnJjF,EAAO5G,KAAMI,EAAUwG,EAAKxG,QAAS2I,EAAS3I,EAAQ2I,OAAQQ,EAAWrR,EAAMqR,SAAU9G,EAAWmE,EAAKnE,SAAU7K,EAASorG,EAAMprG,OAAQ+F,EAAM,EAAS+E,EAAO,GAC7J/E,EAAM/F,EAAQ+F,IACjBkO,EAAOm3F,EAAMrlG,GACTqkG,EAAUn2F,EAAMzL,EAAQ4R,IAAK5R,EAAQ1H,OACrCgK,GAAQD,EAAS8G,EAASsC,EAAM9C,EAAQ3I,EAAQoL,UAGxD5E,GAAKqkJ,MAAMvoJ,IAEf8U,QAAS,WACL,GAAoW0zI,GAASC,EAAkBvzJ,EAA3XgP,EAAO5G,KAAMI,EAAUwG,EAAKxG,QAAS2I,EAAS3I,EAAQ2I,OAAQ3J,EAASmrJ,IAAO55H,EAAYvxB,EAAS,EAAG4S,EAAM5R,EAAQ4R,IAAKtZ,EAAM0H,EAAQ1H,IAAK63B,EAAQxjB,EAAgBiF,GAAMwe,EAAQzjB,EAAgBrU,GAAM0yJ,EAAahrJ,EAAQirJ,SAAWx6H,EAAetnB,EAAWrR,EAAMqR,SAAU9G,EAAWmE,EAAKnE,SAAUwM,EAAQ,GAAI6yF,KAAM9vF,IAAMs5I,EAAWr8I,EAAM3C,UAA6B3O,EAAM,EAAW+E,EAAO,EAa9Y,KAXI9K,EADA+4B,GACUZ,EAAa3wB,EAASyxB,GAAiBu6H,EAExCr7H,EAAaq7H,EAEtB76H,GAASC,IACLD,EAAQC,IACRA,GAAST,GAEbn4B,GAAU44B,EAAQD,GAAS66H,EAAa,GAE5CD,EAAU94I,SAASza,EAAQ,IACpB+F,EAAM/F,EAAQ+F,IACbA,GACA+yB,EAAQzhB,EAAOm8I,EAAYz6H,GAE3BH,GAAS26H,GAAWxtJ,IACpButJ,EAAUn+I,EAAgBkC,GACtBq8I,EAAWr8I,EAAM3C,YACjB4+I,GAAWn7H,GAEXm7H,EAAU16H,IACVvhB,EAAQ,GAAI6yF,KAAMppG,MAG1BkO,EAAKikJ,OAAO/iJ,KAAKiF,EAAgBkC,IACjCvM,GAAQD,EAAS8G,EAAS0F,EAAOlG,EAAQ3I,EAAQoL,SAErD5E,GAAKqkJ,MAAMvoJ,IAEf0E,KAAM,WACF,GAAIR,GAAO5G,KAAMgjG,EAAQp8F,EAAKxG,QAAQ4iG,KAClCA,IAASA,EAAM,GACfp8F,EAAKokJ,SAAShoD,GAEdp8F,EAAK4Q,WAGbyzI,MAAO,SAAUvoJ,GACb,GAAIkE,GAAO5G,IACX4G,GAAKurF,GAAG,GAAGv6E,UAAYlV,EACvBkE,EAAKi3E,MAAMh2E,OAAOkzE,EAAMn0E,EAAKmkJ,gBAC7BnkJ,EAAKi3E,MAAMt2E,IAAIwzE,EAAMn0E,EAAKmkJ,gBAC1BnkJ,EAAK+E,QAAQ,MACb/E,EAAKkuB,OAAOluB,EAAK6vF,SAErBuH,OAAQ,SAAUzxD,GACd,GAAKA,EAAL,CAGA,GAAIsvB,GAAU77D,KAAKuwC,KAAK,GAAI0tD,EAAgB1xD,EAAKqrD,UAAWsG,EAAmB3xD,EAAK5lB,aAAcw3E,EAAmBtiC,EAAQl8D,UAAWy+F,EAAsBviC,EAAQ7+C,aAAcqhF,EAAiBJ,EAAgBC,CACjNC,GAAmBF,EACnBE,EAAmBF,EACZI,EAAiBF,EAAmBC,IAC3CD,EAAmBE,EAAiBD,GAExCviC,EAAQl8D,UAAYw+F,IAExBrpE,OAAQ,SAAUk4D,GACd,GAAkEv4D,GAA9D7tB,EAAO5G,KAAMI,EAAUwG,EAAKxG,QAASuL,EAAU/E,EAAK63F,QACpDzR,aAAchxF,QACdgxF,EAAK90F,EAAMqR,SAASyjF,EAAI5sF,EAAQ2I,OAAQ3I,EAAQoL,UAElC,gBAAPwhF,KACFrhF,GAAWA,EAAQypB,SAAW43D,EAM/BA,EAAKrhF,GALLqhF,EAAKt2F,EAAEq2B,KAAKnmB,EAAKurF,GAAG,GAAGjgE,WAAY,SAAUP,GACzC,OAAQA,EAAKK,aAAeL,EAAK45H,YAAcv+D,IAEnDA,EAAKA,EAAG,GAAKA,EAAK,OAK1Bv4D,EAAY7tB,EAAK4kJ,mBAAmBx+D,GACpCpmF,EAAK+E,QAAQ8oB,IAEjB+2H,mBAAoB,SAAU/2H,GAC1B,GAAiB4jB,GAAcozG,EAA3B7kJ,EAAO5G,IAMX,OALIy0B,IAAaA,EAAU78B,OAAS,IAChCygD,EAAetrC,EAAgBnG,EAAK6vF,QACpCg1D,EAAiB/0J,EAAEuM,QAAQo1C,EAAczxC,EAAKikJ,QAC9Cp2H,EAAY7tB,EAAKurF,GAAGx3F,WAAW8wJ,IAE5Bh3H,GAEXpP,WAAY,SAAUjlB,GAClB,GAAIosD,GAAMxsD,KAAKI,OACfA,GAAQ4R,IAAMg3B,EAAM5oC,EAAQ4R,KAC5B5R,EAAQ1H,IAAMswC,EAAM5oC,EAAQ1H,KAC5BsH,KAAKI,QAAUM,EAAO8rD,EAAKpsD,GACvBgnG,OAAQ56C,EAAI46C,OACZ3sE,OAAQ+xB,EAAI/xB,OACZ6hD,MAAO9vB,EAAI8vB,MACXD,KAAM7vB,EAAI6vB,OAEdr8E,KAAKoH,QAET+Y,OAAQ,WACJ,GAAIvZ,GAAO5G,IACP4G,GAAKi3E,MAAMr6E,UACXoD,EAAK01E,QAEL11E,EAAKy1E,QAGbz+E,MAAO,SAAUA,GACb,GAAIgJ,GAAO5G,IACX4G,GAAK6vF,OAAS74F,EACVgJ,EAAKurF,GAAG,GAAGloD,YACXrjC,EAAKkuB,OAAOl3B,IAGpBsmC,OAAQ,SAAUj8B,GACd,GAAIrB,GAAO5G,KAAMgtF,EAAKt2F,EAAEuR,EAAE22B,eAAgB/yB,EAAOmhF,EAAG53D,OAAQ4tE,EAAQp8F,EAAKxG,QAAQ4iG,KAC7EA,IAASA,EAAMprG,OAAS,IACxBiU,EAAOm3F,EAAMhW,EAAG76E,UAEflK,EAAE7D,uBACHwC,EAAKkuB,OAAOk4D,GACZpmF,EAAKxG,QAAQq6B,OAAO5uB,GAAM,GAC1BjF,EAAK01E,UAGbqb,QAAS,WAAA,GACD/wF,GAAO5G,KACPuwC,EAAO3pC,EAAK2pC,KACZ32C,EAAS22C,EAAK32C,OAAO,0BACrBV,EAAS0N,EAAKxG,QAAQlH,MACtB0N,GAAKurF,GAAG,GAAGx3F,SAAS/C,QACpB24C,EAAKjvC,IAAI1H,GAAQI,OAAOd,OAAO0N,EAAKurF,GAAG,GAAGp1E,aAAe7jB,EAASA,EAAS,QAAQ4H,QAG3F4oC,OAAQ,SAAU9rC,GACd,GAAIgJ,GAAO5G,KAAMI,EAAUwG,EAAKxG,QAASuL,EAAU/E,EAAK6vF,QAAU8N,CAClE,OAAI3mG,aAAiBkkG,GACVlkG,GAEXA,EAAQorC,EAAMprC,EAAOwC,EAAQutG,aAAcvtG,EAAQoL,SAC/C5N,IACAA,EAAQ,GAAIkkG,GAAKn2F,EAAQgB,cAAehB,EAAQe,WAAYf,EAAQW,UAAW1O,EAAMgP,WAAYhP,EAAMiP,aAAcjP,EAAMkP,aAAclP,EAAMmP,oBAE5InP,IAEXm6F,iBAAkB,WACd,GAAkF16F,GAAe4pF,EAA7F12C,EAAOvwC,KAAKuwC,KAAMt3C,EAAQs3C,EAAK,GAAGz2C,MAAMb,MAAOI,EAAU2G,KAAKI,QAAQ87E,OAAsC1iF,EAAatB,EAAMuB,aAC9H82C,EAAK/0C,KAAK,UAAYvC,IAG3BoE,EAAgB1G,OAAO8G,iBAAmB9G,OAAO8G,iBAAiBpE,EAAQ,GAAI,MAAQ,EACtF4tF,EAAgB5pF,EAAgB8E,WAAW9E,EAAcpE,OAASO,EAAWH,GACzEgE,IAAkB9D,EAAQiF,SAAWjF,EAAQgB,QAC7C0sF,GAAiB9kF,WAAW9E,EAAcqlF,aAAevgF,WAAW9E,EAAcmlF,cAAgBrgF,WAAW9E,EAAc26F,iBAAmB71F,WAAW9E,EAAc46F,mBAE3Kh/F,EAAQguF,GAAiBztF,EAAW+2C,GAAQA,EAAKt3C,SACjDs3C,EAAKt4C,KACDivF,WAAY7tF,EAAQpB,IAAI,eACxBgB,MAAOA,IACRuC,KAAK,QAASvC,KAErB6/F,OAAQ,WACJ,GAAIlyF,GAAO5G,KAAMuwC,EAAO3pC,EAAK2pC,KAAMnwC,EAAUwG,EAAKxG,QAAS87E,EAAS97E,EAAQ87E,MAC5Et1E,GAAKi3E,MAAQ,GAAIx8D,GAAG06D,MAAMxrC,EAAM7vC,EAAON,EAAQy9E,OAC3C3B,OAAQA,EACRG,KAAMj8E,EAAQi8E,KACdC,MAAOl8E,EAAQk8E,MACfF,UAAWh8E,EAAQg8E,UACnB/9E,MAAOlG,EAAQkG,MAAM+B,EAAQ87E,YAGrCnxD,KAAM,SAAU9iB,GACZ,GAAIrB,GAAO5G,KAAMjB,EAAMkJ,EAAEmuB,QAAS+7D,EAAKvrF,EAAKurF,GAAG,GAAIxmF,EAAU/E,EAAK63F,SAAUz/E,EAAOjgB,IAAQ4iB,EAAKU,IAChG,IAAItjB,IAAQ4iB,EAAKQ,IAAMnD,EAAM,CACzB,GAAI/W,EAAEglF,OAEF,MADArmF,GAAKuZ,OAAOnB,GACZ,CAEArT,GADOqT,EACGrT,EAAUA,EAAQ,GAAGu+B,YAAcioD,EAAGloD,WAEtCt+B,EAAUA,EAAQ,GAAG40F,gBAAkBpO,EAAGmO,UAEpD30F,GACA/E,EAAKkuB,OAAOnpB,GAEhB/E,EAAKxG,QAAQq6B,OAAO7zB,EAAK63F,SAASrpE,QAClCntB,EAAE9D,qBACKpF,KAAQ4iB,EAAKK,OAASjjB,IAAQ4iB,EAAKI,KAAOhjB,IAAQ4iB,EAAKM,MAC9Dha,EAAE9D,iBACEwH,GACA/E,EAAKxG,QAAQq6B,OAAO9uB,EAAQypB,QAAQ,GAExCxuB,EAAK01E,WAiCjBouE,EAAS39I,gBAAkBA,EAC3B7U,EAAMwyJ,SAAWA,EACbC,EAAa3lJ,EAAOtE,QACpBC,KAAM,SAAU5I,EAASqI,GAAnB,GACe+xF,GAAIu5D,EAAUpoJ,EAgEvB0O,EACAtZ,EACAo4B,EAlEJlqB,EAAO5G,IACXgF,GAAOf,GAAGtD,KAAKwH,KAAKvB,EAAM7O,EAASqI,GACnCrI,EAAU6O,EAAK7O,QACfqI,EAAUwG,EAAKxG,QACfA,EAAQ4R,IAAMg3B,EAAMjxC,EAAQmL,KAAK,SAAW8lC,EAAM5oC,EAAQ4R,KAC1D5R,EAAQ1H,IAAMswC,EAAMjxC,EAAQmL,KAAK,SAAW8lC,EAAM5oC,EAAQ1H,KAC1D6hC,EAAUn6B,GACVwG,EAAK8nG,gBAAkBhuG,KAAWN,GAClCwG,EAAK+nG,WACL/nG,EAAK8kJ,SAAWA,EAAW,GAAIhB,GAAShqJ,KAAWN,GAC/CyjB,GAAI9rB,EAAQmL,KAAKkuF,GACjBlV,OAAQt1E,EAAKvN,QACb0P,OAAQ3I,EAAQ2I,OAChB0xB,OAAQ,SAAU78B,EAAOoK,GACjBA,EACApB,EAAK23C,QAAQ3gD,GAEb7F,EAAQ+0C,IAAIlvC,IAGpBy+E,KAAM,SAAUp0E,GACZrB,EAAK8kJ,SAAS3zD,mBACVnxF,EAAKoB,QAAQ+yE,GACb9yE,EAAE9D,kBAEFpM,EAAQmL,KAAKgrG,GAAe,GAC5B/b,EAAGjvF,KAAKirG,GAAa,KAG7B7xB,MAAO,SAAUr0E,GACTrB,EAAKoB,QAAQgzE,GACb/yE,EAAE9D,kBAEFpM,EAAQmL,KAAKgrG,GAAe,GAC5B/b,EAAGjvF,KAAKirG,GAAa,KAG7B/G,OAAQ,SAAUz7F,GACd5T,EAAQqtB,WAAWwlI,GACfj/I,GACA5T,EAAQmL,KAAK0nJ,EAAuBc,EAASruD,eAIzDlL,EAAKu5D,EAASv5D,GACdvrF,EAAKkoG,QACLloG,EAAKg+C,QACL,KACI7sD,EAAQ,GAAG2lB,aAAa,OAAQ,QAClC,MAAOzV,GACLlQ,EAAQ,GAAGmH,KAAO,OAEtBnH,EAAQuC,SAAS,WAAW4I,MACxB6gB,KAAQ,WACRgrF,iBAAiB,EACjBC,YAAa08C,EAASZ,cAE1BxnJ,EAAWvL,EAAQgC,GAAG,eAAiBrD,EAAEkQ,EAAK7O,SAAS4L,QAAQ,YAAY5J,GAAG,aAC1EuJ,EACAsD,EAAK6Y,QAAO,GAEZ7Y,EAAKgkD,SAAS7yD,EAAQgC,GAAG,eAEzBqG,EAAQ6uG,YACJj9F,EAAM5R,EAAQ4R,IACdtZ,EAAM0H,EAAQ1H,IACdo4B,EAAQ,GAAIgxE,GACZ/0F,EAAgBiF,IAAQjF,EAAgBrU,IACxCsZ,EAAM,GAAI8vF,GAAKhxE,EAAMnkB,cAAemkB,EAAMpkB,WAAYokB,EAAMxkB,UAAW,EAAG,EAAG,GAC7E5T,EAAM,GAAIopG,GAAKhxE,EAAMnkB,cAAemkB,EAAMpkB,WAAYokB,EAAMxkB,UAAW,GAAI,EAAG,KAE9E0F,EAAM,GAAI8vF,GAAKhxE,EAAMnkB,cAAemkB,EAAMpkB,WAAYokB,EAAMxkB,UAAW0F,EAAIpF,WAAYoF,EAAInF,aAAcmF,EAAIlF,aAAckF,EAAIjF,mBAC/HrU,EAAM,GAAIopG,GAAKhxE,EAAMnkB,cAAemkB,EAAMpkB,WAAYokB,EAAMxkB,UAAW5T,EAAIkU,WAAYlU,EAAImU,aAAcnU,EAAIoU,aAAcpU,EAAIqU,oBAEnInG,EAAKsoG,WAAa,GAAI7tF,GAAG2oF,UAAUjyG,GAC/ByT,QAASpL,EAAQoL,QACjBzC,OAAQ3I,EAAQ2I,OAChBiJ,IAAKA,EACLtZ,IAAKA,EACLkF,MAAOwC,EAAQxC,SAGvBgJ,EAAK+uF,KAAO/uF,EAAKuoG,QAAQ/uG,EAAQxC,OAASgJ,EAAK7O,QAAQ+0C,OACvDlmC,EAAKokG,SAAWjzG,EAAQ+0C,MACxB50C,EAAM0uB,OAAOhgB,IAEjBxG,SACI8O,KAAM,aACN8C,IAAKuyF,EACL7rG,IAAK6rG,EACLx7F,OAAQ,GACRi6F,SACA2K,gBACA/vG,MAAO,KACPytJ,SAAU,GACVnyJ,OAAQ,IACRkjF,cAEJ10E,QACIqzE,EACAC,EACAvhD,GAEJpU,WAAY,SAAUjlB,GAAV,GACJwG,GAAO5G,KACPpC,EAAQgJ,EAAK6vF,MACjBzxF,GAAOf,GAAGohB,WAAWld,KAAKvB,EAAMxG,GAChCA,EAAUwG,EAAKxG,QACfm6B,EAAUn6B,GACVwG,EAAK8kJ,SAASrmI,WAAWjlB,GACrBxC,GACAgJ,EAAK7O,QAAQ+0C,IAAI50C,EAAMqR,SAAS3L,EAAOwC,EAAQ2I,OAAQ3I,EAAQoL,WAGvEw/I,SAAU,SAAUhoD,GACZj9F,EAAQi9F,IACRhjG,KAAK0rJ,SAASV,SAAShoD,IAG/B/P,UAAW,SAAU7yF,GACjB,GAAIwG,GAAO5G,KAAMuf,EAAUnf,EAAQmf,QAASqrC,EAAWxqD,EAAQwqD,SAAU+7B,EAAQ//E,EAAKysG,OAAOzpF,IAAI3nB,GAAKlK,EAAU6O,EAAK7O,QAAQ6xB,IAAI3nB,GAAK5I,EAAUuN,EAAK0oG,cAAc1lF,IAAI3nB,EAClK2oD,IAAarrC,GAOdlmB,EAAQiB,SAASilB,EAAUqqF,EAAgBmE,GAASpjD,YAAYprC,EAAUwuF,EAAUnE,GACpF7xG,EAAQmL,KAAKu0E,EAAUl4D,GAASrc,KAAK6mG,EAAUn/C,GAAU1nD,KAAK4hG,EAAevlF,KAP7ElmB,EAAQiB,SAASyzG,GAASpjD,YAAYi/C,GAAelkG,GAAGsoG,EAAapnG,EAAKoyF,cAC1EjhG,EAAQqtB,WAAWqyD,GAAUryD,WAAW2kF,GAAU7mG,KAAK4hG,GAAe,GAAOp/F,GAAG,UAAYzD,EAAI+D,EAAMY,EAAKqxE,SAAUrxE,IAAOlB,GAAG,WAAazD,EAAI+D,EAAMY,EAAKoxE,MAAOpxE,IAAOlB,GAAG,QAAUzD,EAAI,WACtL2E,EAAK0oG,cAAch1G,SAAS+2F,KAEhC1K,EAAMjhF,GAAG2xE,EAAOrxE,EAAMY,EAAKs9B,OAAQt9B,IAAOlB,GAAGyzE,EAAWh1E,KAMhEymD,SAAU,SAAUA,GAChB5qD,KAAKizF,WACDroC,SAAUA,IAAah0D,GAAmBg0D,EAC1CrrC,SAAS,KAGjBE,OAAQ,SAAUA,GACdzf,KAAKizF,WACDroC,UAAU,EACVrrC,UAAWE,EAASA,IAAW7oB,GAAmB6oB,MAG1DqG,QAAS,WACL,GAAIlf,GAAO5G,IACXgF,GAAOf,GAAG6hB,QAAQ3d,KAAKvB,GACvBA,EAAK8kJ,SAAS5lI,UACdlf,EAAK7O,QAAQ6xB,IAAI3nB,GACjB2E,EAAKysG,OAAOzpF,IAAI3nB,GAChB2E,EAAK0oG,cAAc1lF,IAAI3nB,GACnB2E,EAAKyvF,OACLzvF,EAAKyvF,MAAMzsE,IAAI,QAAShjB,EAAK0vF,gBAGrCha,MAAO,WACHt8E,KAAK0rJ,SAASpvE,SAElBD,KAAM,WACFr8E,KAAK0rJ,SAASrvE,QAElBrqE,IAAK,SAAUpU,GACX,MAAOoC,MAAKumG,QAAQ,MAAO3oG,IAE/BlF,IAAK,SAAUkF,GACX,MAAOoC,MAAKumG,QAAQ,MAAO3oG,IAE/BA,MAAO,SAAUA,GACb,GAAIgJ,GAAO5G,IACX,OAAIpC,KAAUhH,EACHgQ,EAAK6vF,QAEhB7vF,EAAK+uF,KAAO/uF,EAAKuoG,QAAQvxG,GACP,OAAdgJ,EAAK+uF,MACL/uF,EAAK7O,QAAQ+0C,IAAI,IAErBlmC,EAAKokG,SAAWpkG,EAAK7O,QAAQ+0C,MAJ7BlmC,IAMJoxE,MAAO,WACH,GAAIpxE,GAAO5G,KAAMpC,EAAQgJ,EAAK7O,QAAQ+0C,KACtClmC,GAAK01E,QACD1+E,IAAUgJ,EAAKokG,UACfpkG,EAAK23C,QAAQ3gD,GAEjBgJ,EAAK0oG,cAAc3kD,YAAY0mC,IAEnCntD,OAAQ,WACJ,GAAIt9B,GAAO5G,KAAMjI,EAAU6O,EAAK7O,OAChC6O,GAAK8kJ,SAASvrI,SACThoB,EAAQggB,OAASpgB,EAAQ,KAAOya,KACjCza,EAAQw8B,SAGhBgqB,QAAS,SAAU3gD,GACf,GAAIgJ,GAAO5G,IACXpC,GAAQgJ,EAAKuoG,QAAQvxG,IAChBgJ,EAAK+uF,OAAS/3F,IACfgJ,EAAK+uF,KAAO/3F,EACZgJ,EAAKokG,SAAWpkG,EAAK7O,QAAQ+0C,MACxBlmC,EAAK0wF,SACN1wF,EAAK7O,QAAQiQ,QAAQyxB,GAEzB7yB,EAAKoB,QAAQyxB,IAEjB7yB,EAAK0wF,SAAU,GAEnBwX,MAAO,WACH,GAAyCnoB,GAArC//E,EAAO5G,KAAMjI,EAAU6O,EAAK7O,OAChC4uF,GAAQ5uF,EAAQqpD,KAAK,iBAChBulC,EAAM,KACPA,EAAQjwF,EAAE,8GAA8GorE,YAAY/pE,IAExI6O,EAAKysG,OAAS1sB,EAAMzjF,MAChB6gB,KAAQ,SACR2rF,gBAAiB9oG,EAAK8kJ,SAASZ,eAGvC7yE,SAAU,SAAUhwE,GAChB,GAAIrB,GAAO5G,KAAMjB,EAAMkJ,EAAEmuB,QAASs1H,EAAW9kJ,EAAK8kJ,SAAU9tJ,EAAQgJ,EAAK7O,QAAQ+0C,KAC7E4+G,GAAS7tE,MAAMr6E,WAAayE,EAAEglF,QAC9By+D,EAAS3gI,KAAK9iB,GACVrB,EAAKsoG,YAAcjnG,EAAE64D,0BACrB74D,EAAE64D,4BAEC/hE,IAAQ4iB,EAAKK,OAASpkB,IAAUgJ,EAAKokG,SAC5CpkG,EAAK23C,QAAQ3gD,GAEbgJ,EAAK0wF,SAAU,GAGvBiP,QAAS,SAAUzkG,EAAQlE,GACvB,GAAIgJ,GAAO5G,KAAMI,EAAUwG,EAAKxG,OAChC,OAAIxC,KAAUhH,EACHwJ,EAAQ0B,IAEnBlE,EAAQgJ,EAAK8kJ,SAAShiH,OAAO9rC,GACxBA,IAGLA,EAAQ,GAAIkkG,KAAMlkG,IAClBwC,EAAQ0B,GAAUlE,EAClBgJ,EAAK8kJ,SAAStrJ,QAAQ0B,GAAUlE,EAChCgJ,EAAK8kJ,SAAStkJ,QAPdxJ,IASJo7F,aAAc,SAAU/wF,GACpBvR,EAAEuR,EAAE22B,eAAex9B,YAAYkwF,EAAkB,eAAXrpF,EAAE/I,OAE5CiwG,QAAS,SAAUvxG,GACf,GAAIgJ,GAAO5G,KAAMI,EAAUwG,EAAKxG,QAASsrJ,EAAW9kJ,EAAK8kJ,SAAU7/I,EAAO6/I,EAAShiH,OAAO9rC,EAW1F,OAVKokG,GAAUn2F,EAAMzL,EAAQ4R,IAAK5R,EAAQ1H,OACtCmT,EAAO,MAEXjF,EAAK6vF,OAAS5qF,EACVjF,EAAKsoG,WACLtoG,EAAKsoG,WAAWtxG,MAAMiO,GAAQjO,GAE9BgJ,EAAK7O,QAAQ+0C,IAAI50C,EAAMqR,SAASsC,GAAQjO,EAAOwC,EAAQ2I,OAAQ3I,EAAQoL,UAE3EkgJ,EAAS9tJ,MAAMiO,GACRA,GAEX8iG,SAAU,WACN,GAAyCt1G,GAArCuN,EAAO5G,KAAMjI,EAAU6O,EAAK7O,OAChCsB,GAAUtB,EAAQ4L,QAAQ,iBACrBtK,EAAQ,KACTA,EAAUtB,EAAQe,KAAKg1G,GAAMl0G,SAASU,SAAS,iCAC/CjB,EAAUA,EAAQP,KAAKg1G,GAAMl0G,UAEjCP,EAAQ,GAAGS,MAAM6d,QAAU5f,EAAQ,GAAG+B,MAAM6d,QAC5C/Q,EAAKvN,QAAUA,EAAQiB,SAAS,kCAAkCA,SAASvC,EAAQ,GAAGkG,WACtFlG,EAAQE,KACJgB,MAAO,OACPC,OAAQnB,EAAQ,GAAG+B,MAAMZ,SAE7B0N,EAAK0oG,cAAgB54G,EAAE2C,EAAQ,GAAG4wC,aAEtC2a,OAAQ,WACJ,GAAIh+C,GAAO5G,KAAMjI,EAAU6O,EAAK7O,QAASukG,EAASvkG,EAAQmL,KAAK,QAAS+yB,EAAOqmE,EAAS5lG,EAAE,IAAM4lG,GAAUvkG,EAAQkgB,QAAQ,OACtHge,GAAK,KACLrvB,EAAK0vF,cAAgB,WACjB1vF,EAAKhJ,MAAM7F,EAAQ,GAAG08C,cACtB7tC,EAAKlO,IAAIkO,EAAK8nG,gBAAgBh2G,KAC9BkO,EAAKoL,IAAIpL,EAAK8nG,gBAAgB18F,MAElCpL,EAAKyvF,MAAQpgE,EAAKvwB,GAAG,QAASkB,EAAK0vF,mBAc/Cj1E,EAAG8G,OAAOwiI,IACZh0J,OAAOuB,MAAM2sB,QACRluB,OAAOuB,OACE,kBAAVzB,SAAwBA,OAAOgiC,IAAMhiC,OAAS,SAAUiiC,EAAIC,EAAIC,IACrEA,GAAMD,OAEV,SAAUniC,EAAGC,QACVA,OAAO,wBACH,mBACA,oBACDD,IACL,WA6iBE,MAliBC,UAAUE,EAAGE,GA4gBV,QAAS+0J,GAAeN,GACpB,GAAIx/I,GAAO,GAAI7P,MAAK,KAAM,EAAG,EAE7B,OADA6P,GAAKshG,YAAYk+C,GACVx/I,EAEX,QAAS1H,GAAe8D,GACpBA,EAAE9D,iBAEN,QAASo2B,GAAUn6B,GACf,GAA2HwrJ,GAAvHz/I,EAAWjU,EAAMwT,WAAWtL,EAAQoL,SAASO,UAAUC,SAASG,SAAUwhG,GAAgBvtG,EAAQutG,aAAa/1G,MACnHwI,GAAQ2I,OAAS+5F,EAAc1iG,EAAQ2I,QAAUoD,EAAStP,GAC1DuD,EAAQwrJ,WAAaA,EAAa9oD,EAAc1iG,EAAQwrJ,YAAcz/I,EAAS+E,GAC/EhZ,EAAMk2G,SAAS7zE,UAAUn6B,GACrButG,GACAvtG,EAAQutG,aAAa5lG,QAAQ,uBAE7BrR,EAAEuM,QAAQ2oJ,EAAYxrJ,EAAQutG,oBAC9BvtG,EAAQutG,aAAa7lG,KAAK8jJ,GA7hBrC,GACO1zJ,GAAQvB,OAAOuB,MAAOwyJ,EAAWxyJ,EAAMwyJ,SAAU1hH,EAAQ9wC,EAAMwe,UAAWlE,EAAgBta,EAAMqa,eAAgBuwF,EAAgB5qG,EAAMoa,eAAgBxG,EAAW5T,EAAM4T,SAAUk2F,EAAYl2F,EAASk2F,UAAWK,EAAgBv2F,EAASu2F,cAAee,EAAkBt3F,EAASs3F,gBAAiBr2F,EAAkB29I,EAAS39I,gBAAiBsU,EAAKnpB,EAAMmpB,GAAIrc,EAASqc,EAAGrc,OAAQ+1E,EAAO,OAAQC,EAAQ,QAASvhD,EAAS,SAAUx3B,EAAK,uBAAwBo1E,EAAQ,QAAUp1E,EAAIw1E,EAAW,WAAYsyB,EAAW,WAAYgE,EAAU,kBAAmB1c,EAAU,kBAAmBC,EAAQ,gBAAiBsY,EAAgB,mBAAoBoE,EAAc,aAAe/rG,EAAK,cAAgBA,EAAIk3E,EAAY,YAAcl3E,EAAI8gG,EAAQ,QAAS+K,EAAO,UAAW88C,EAAwB,wBAAyB18C,EAAgB,gBAAiBC,EAAc,cAAe09C,EAAY,YAAa/mD,EAAgB,gBAAiBhD,EAAO9lG,KAAMioG,EAAM,GAAInC,GAAK,KAAM,EAAG,GAAImM,EAAM,GAAInM,GAAK,KAAM,GAAI,IAAKgqD,GAAmBnjI,KAAM,QAAUojI,GAAmBpjI,KAAM,QAAUjoB,EAAShK,EAAEgK,OACvjCsrJ,EAAiBhnJ,EAAOtE,QACxBC,KAAM,SAAU5I,EAASqI,GACrB,GAAiBkD,GAAbsD,EAAO5G,IACXgF,GAAOf,GAAGtD,KAAKwH,KAAKvB,EAAM7O,EAASqI,GACnCrI,EAAU6O,EAAK7O,QACfqI,EAAUwG,EAAKxG,QACfA,EAAQ2hG,aAAe7pG,EAAM4T,SAASxI,SAASlD,EAAQ2hG,cACvD3hG,EAAQ4R,IAAMg3B,EAAMjxC,EAAQmL,KAAK,SAAW8lC,EAAM5oC,EAAQ4R,KAC1D5R,EAAQ1H,IAAMswC,EAAMjxC,EAAQmL,KAAK,SAAW8lC,EAAM5oC,EAAQ1H,KAC1D6hC,EAAUn6B,GACVwG,EAAK8nG,gBAAkBhuG,KAAWN,GAClCwG,EAAK+nG,WACL/nG,EAAKqlJ,SACLrlJ,EAAKslJ,SACLtlJ,EAAKg+C,SACLh+C,EAAKq5F,WACL,KACIloG,EAAQ,GAAG2lB,aAAa,OAAQ,QAClC,MAAOzV,GACLlQ,EAAQ,GAAGmH,KAAO,OAEtBnH,EAAQuC,SAAS,WAAW4I,MACxB6gB,KAAQ,WACRgrF,iBAAiB,IAErBnoG,EAAKulJ,UAAYvlJ,EAAKwlJ,mBAAmBhsJ,EAAQ4R,IAAK5R,EAAQ1H,KAC9D4K,EAAWvL,EAAQgC,GAAG,eAAiBrD,EAAEkQ,EAAK7O,SAAS4L,QAAQ,YAAY5J,GAAG,aAC1EuJ,EACAsD,EAAK6Y,QAAO,GAEZ7Y,EAAKgkD,SAAS7yD,EAAQgC,GAAG,eAEzBqG,EAAQ6uG,YACRroG,EAAKsoG,WAAa,GAAI7tF,GAAG2oF,UAAUjyG,GAC/ByT,QAASpL,EAAQoL,QACjBzC,OAAQ3I,EAAQ2I,OAChBiJ,IAAK5R,EAAQ4R,IACbtZ,IAAK0H,EAAQ1H,IACbkF,MAAOwC,EAAQxC,SAGvBgJ,EAAK+uF,KAAO/uF,EAAKuoG,QAAQ/uG,EAAQxC,OAASgJ,EAAK7O,QAAQ+0C,OACvDlmC,EAAKokG,SAAWjzG,EAAQ+0C,MACxB50C,EAAM0uB,OAAOhgB,IAEjBxG,SACI8O,KAAM,iBACNtR,MAAO,KACPmL,OAAQ,GACR6iJ,WAAY,GACZpgJ,QAAS,GACTmiG,gBACA3K,SACAhxF,IAAK,GAAI8vF,GAAKmC,GACdvrG,IAAK,GAAIopG,GAAKmM,GACdo9C,SAAU,GACVnyJ,OAAQ,IACRs8F,OAAQ,GACRvmF,MAAO8zF,EACPF,MAAOE,EACP3mB,aACApnE,SACAo6F,aAAc,+DACdi9C,eAAgB,qBAChBC,eAAgB,sBAEpB5kJ,QACIqzE,EACAC,EACAvhD,GAEJpU,WAAY,SAAUjlB,GAClB,GAAsC4R,GAAKtZ,EAAK2/C,EAA5CzxC,EAAO5G,KAAMpC,EAAQgJ,EAAK6vF,MAC9BzxF,GAAOf,GAAGohB,WAAWld,KAAKvB,EAAMxG,GAChCA,EAAUwG,EAAKxG,QACfA,EAAQ4R,IAAMA,EAAMg3B,EAAM5oC,EAAQ4R,KAClC5R,EAAQ1H,IAAMA,EAAMswC,EAAM5oC,EAAQ1H,KAClC6hC,EAAUn6B,GACVwG,EAAKulJ,UAAYvlJ,EAAKwlJ,mBAAmBhsJ,EAAQ4R,IAAK5R,EAAQ1H,KAC9D2/C,EAAej4C,EAAQxC,OAASgJ,EAAK6vF,QAAU7vF,EAAKgoG,SAASnQ,SACzDzsF,IAAQoxF,EAAgBpxF,EAAKqmC,KAC7BrmC,EAAM,GAAI8vF,GAAKmC,IAEfvrG,IAAQ0qG,EAAgB1qG,EAAK2/C,KAC7B3/C,EAAM,GAAIopG,GAAKmM,IAEnBrnG,EAAKgoG,SAASvpF,WAAWjlB,GACzBwG,EAAK8kJ,SAASrmI,WAAW3kB,KAAWN,GAChC2I,OAAQ3I,EAAQwrJ,WAChB55I,IAAKA,EACLtZ,IAAKA,KAELkF,IACAgJ,EAAK7O,QAAQ+0C,IAAI50C,EAAMqR,SAAS3L,EAAOwC,EAAQ2I,OAAQ3I,EAAQoL,UAC/D5E,EAAKioG,YAAYjxG,KAGzBq1F,UAAW,SAAU7yF,GACjB,GAAIwG,GAAO5G,KAAMjI,EAAU6O,EAAK7O,QAAQ6xB,IAAI3nB,GAAKsqJ,EAAW3lJ,EAAKyoG,UAAUzlF,IAAI3nB,GAAKuqJ,EAAW5lJ,EAAK6lJ,UAAU7iI,IAAI3nB,GAAK5I,EAAUuN,EAAK0oG,cAAc1lF,IAAI3nB,GAAK2oD,EAAWxqD,EAAQwqD,SAAUrrC,EAAUnf,EAAQmf,OACvMqrC,IAAarrC,GAyBdlmB,EAAQiB,SAASilB,EAAUqqF,EAAgBmE,GAASpjD,YAAYprC,EAAUwuF,EAAUnE,GACpF7xG,EAAQmL,KAAKu0E,EAAUl4D,GAASrc,KAAK6mG,EAAUn/C,GAAU1nD,KAAK4hG,EAAevlF,KAzB7ElmB,EAAQiB,SAASyzG,GAASpjD,YAAYi/C,GAAelkG,GAAGsoG,EAAapnG,EAAKoyF,cAC1EjhG,EAAQqtB,WAAWqyD,GAAUryD,WAAW2kF,GAAU7mG,KAAK4hG,GAAe,GAAOp/F,GAAG,UAAYzD,EAAIvL,EAAEsP,MAAMY,EAAKqxE,SAAUrxE,IAAOlB,GAAG,QAAUzD,EAAI,WAC3I2E,EAAK0oG,cAAch1G,SAAS+2F,KAC7B3rF,GAAG,WAAazD,EAAI,WACnB2E,EAAK0oG,cAAc3kD,YAAY0mC,GAC3Bt5F,EAAQ+0C,QAAUlmC,EAAKokG,UACvBpkG,EAAK23C,QAAQxmD,EAAQ+0C,OAEzBlmC,EAAK01E,MAAM,QACX11E,EAAK01E,MAAM,UAEfiwE,EAAS7mJ,GAAGyzE,EAAWh1E,GAAgBuB,GAAG2xE,EAAO,WAC7CzwE,EAAKuZ,OAAO,QACPjoB,EAAMC,QAAQggB,OAASpgB,EAAQ,KAAOya,KACvCza,EAAQw8B,UAGhBi4H,EAAS9mJ,GAAGyzE,EAAWh1E,GAAgBuB,GAAG2xE,EAAO,WAC7CzwE,EAAKuZ,OAAO,QACPjoB,EAAMC,QAAQggB,OAASpgB,EAAQ,KAAOya,KACvCza,EAAQw8B,YAQxBq2B,SAAU,SAAUA,GAChB5qD,KAAKizF,WACDroC,SAAUA,IAAah0D,GAAmBg0D,EAC1CrrC,SAAS,KAGjBE,OAAQ,SAAUA,GACdzf,KAAKizF,WACDroC,UAAU,EACVrrC,UAAWE,EAASA,IAAW7oB,GAAmB6oB,MAG1DqG,QAAS,WACL,GAAIlf,GAAO5G,IACXgF,GAAOf,GAAG6hB,QAAQ3d,KAAKvB,GACvBA,EAAKgoG,SAAS9oF,UACdlf,EAAK8kJ,SAAS5lI,UACdlf,EAAK7O,QAAQ6xB,IAAI3nB,GACjB2E,EAAKyoG,UAAUzlF,IAAI3nB,GACnB2E,EAAK6lJ,UAAU7iI,IAAI3nB,GACnB2E,EAAK0oG,cAAc1lF,IAAI3nB,GACnB2E,EAAKyvF,OACLzvF,EAAKyvF,MAAMzsE,IAAI,QAAShjB,EAAK0vF,gBAGrCha,MAAO,SAAU3zD,GACA,SAATA,IACAA,EAAO,QAEX3oB,KAAK2oB,EAAO,QAAQ2zD,SAExBD,KAAM,SAAU1zD,GACC,SAATA,IACAA,EAAO,QAEX3oB,KAAK2oB,EAAO,QAAQ0zD,QAExBrqE,IAAK,SAAUpU,GACX,MAAOoC,MAAKumG,QAAQ,MAAO3oG,IAE/BlF,IAAK,SAAUkF,GACX,MAAOoC,MAAKumG,QAAQ,MAAO3oG,IAE/BuiB,OAAQ,SAAUwI,GACd,GAAI+jI,GAAa,UACJ,UAAT/jI,EACAA,EAAO,OAEP+jI,EAAa,WAEjB1sJ,KAAK2oB,EAAO,QAAQxI,SACpBngB,KAAK0sJ,GAAYpwE,SAErB1+E,MAAO,SAAUA,GACb,GAAIgJ,GAAO5G,IACX,OAAIpC,KAAUhH,EACHgQ,EAAK6vF,QAEhB7vF,EAAK+uF,KAAO/uF,EAAKuoG,QAAQvxG,GACP,OAAdgJ,EAAK+uF,MACL/uF,EAAK7O,QAAQ+0C,IAAI,IAErBlmC,EAAKokG,SAAWpkG,EAAK7O,QAAQ+0C,MAJ7BlmC,IAMJ23C,QAAS,SAAU3gD,GAAV,GAC2C2xG,GAG5CC,EACAC,EAJA7oG,EAAO5G,KAAM8jG,EAAWl9F,EAAK7O,QAAQ+0C,KACzClvC,GAAQgJ,EAAKuoG,QAAQvxG,GACrB2xG,GAAe3oG,EAAK+uF,OAAS/3F,EACzB4xG,EAAeD,IAAgB3oG,EAAK0wF,QACpCmY,EAAgB3L,IAAal9F,EAAK7O,QAAQ+0C,OAC1C0iE,GAAgBC,IAChB7oG,EAAK7O,QAAQiQ,QAAQyxB,GAErB81E,IACA3oG,EAAK+uF,KAAO/3F,EACZgJ,EAAKokG,SAAWpkG,EAAK7O,QAAQ+0C,MAC7BlmC,EAAKoB,QAAQyxB,IAEjB7yB,EAAK0wF,SAAU,GAEnBiP,QAAS,SAAUzkG,EAAQlE,GAAlB,GAMD+uJ,GACAC,EANAhmJ,EAAO5G,KACPI,EAAUwG,EAAKxG,QACfsrJ,EAAW9kJ,EAAK8kJ,SAChBmB,EAAkBnB,EAAStrJ,QAC3BuL,EAAU/E,EAAK6vF,QAAU7vF,EAAK+uF,IAGlC,IAAI/3F,IAAUhH,EACV,MAAOwJ,GAAQ0B,EAGnB,IADAlE,EAAQorC,EAAMprC,EAAOwC,EAAQutG,aAAcvtG,EAAQoL,SACnD,CAaA,GAVIpL,EAAQ4R,IAAI/V,YAAcmE,EAAQ1H,IAAIuD,YACtC4wJ,EAAgB7pD,UAEpB5iG,EAAQ0B,GAAU,GAAIggG,GAAKlkG,EAAM3B,WACjC2K,EAAKgoG,SAAS9sG,GAAQlE,GACtBgJ,EAAKulJ,UAAYvlJ,EAAKwlJ,mBAAmBhsJ,EAAQ4R,IAAK5R,EAAQ1H,KAC1DiT,IACAghJ,EAAevpD,EAAgBhjG,EAAQ4R,IAAKrG,GAC5CihJ,EAAexpD,EAAgBhjG,EAAQ1H,IAAKiT,IAE5CghJ,GAAgBC,GAKhB,GAJAC,EAAgB/qJ,GAAUlE,EACtB+uJ,IAAiBC,IACjBC,EAAgBn0J,IAAMizJ,EAAevrJ,EAAQirJ,WAE7CuB,EAAc,CACd,GAAIhmJ,EAAKulJ,UAEL,MADAT,GAASV,UAAU/8C,IACnB,CACQ0+C,KACRE,EAAgB76I,IAAMiyF,QAI9B4oD,GAAgBn0J,IAAMu1G,EACtB4+C,EAAgB76I,IAAMiyF,CAE1BynD,GAAStkJ,SAEb4xF,aAAc,SAAU/wF,GACpBvR,EAAEuR,EAAE22B,eAAex9B,YAAYkwF,EAAkB,eAAXrpF,EAAE/I,OAE5CiwG,QAAS,SAAUvxG,GACf,GAAsTkvJ,GAAQD,EAAiBrgG,EAAKvqB,EAAM0tE,EAAtV/oG,EAAO5G,KAAMI,EAAUwG,EAAKxG,QAAS4R,EAAM5R,EAAQ4R,IAAKtZ,EAAM0H,EAAQ1H,IAAKsqG,EAAQ5iG,EAAQ4iG,MAAO0oD,EAAW9kJ,EAAK8kJ,SAAU//I,EAAU/E,EAAK6vF,OAAQ5qF,EAAOm9B,EAAMprC,EAAOwC,EAAQutG,aAAcvtG,EAAQoL,SAAUokG,EAAsB,OAAT/jG,GAA6B,OAAZF,GAAoBE,YAAgB7P,OAAQ2P,YAAmB3P,KAOhT,OANIoE,GAAQ2hG,cAAgB3hG,EAAQ2hG,aAAal2F,KAC7CA,EAAO,KACFjF,EAAK+uF,MAAS/uF,EAAK7O,QAAQ+0C,QAC5BlvC,EAAQ,QAGXiO,KAAUF,GAAWikG,GACtBD,EAAiBz3G,EAAMqR,SAASsC,EAAMzL,EAAQ2I,OAAQ3I,EAAQoL,SAC1DmkG,IAAmB/xG,IACnBgJ,EAAK7O,QAAQ+0C,IAAa,OAATjhC,EAAgBjO,EAAQ+xG,GACrC/xG,YAAiBqM,SACjBrD,EAAK7O,QAAQiQ,QAAQyxB,IAGtB5tB,IAEE,OAATA,GAAiBu3F,EAAgBv3F,EAAMmG,GACvCnG,EAAOw2F,EAAcx2F,EAAMmG,EAAKtZ,GACxBspG,EAAUn2F,EAAMmG,EAAKtZ,KAC7BmT,EAAO,MAEXjF,EAAK6vF,OAAS5qF,EACd6/I,EAAS9tJ,MAAMiO,GACfjF,EAAKgoG,SAAShxG,MAAMiO,GAChBA,IACA2gD,EAAM5lD,EAAK+uF,KACXk3D,EAAkBnB,EAAStrJ,QACvB4iG,EAAM,KACNA,EAAQtsG,EAAEq2B,KAAKi2E,EAAO,SAAUryF,GAC5B,MAAOyyF,GAAgBv3F,EAAM8E,KAE7BqyF,EAAM,KACN0oD,EAASV,SAAShoD,GAClB/gE,GAAO,IAGVA,IACGmhE,EAAgBv3F,EAAMmG,KACtB66I,EAAgB76I,IAAMA,EACtB66I,EAAgBn0J,IAAMizJ,EAAevrJ,EAAQirJ,UAC7CyB,GAAS,GAET1pD,EAAgBv3F,EAAMnT,KAClBkO,EAAKulJ,WACLT,EAASV,UAAU/8C,IACnBhsE,GAAO,IAEP4qH,EAAgBn0J,IAAMA,EACjBo0J,IACDD,EAAgB76I,IAAMiyF,GAE1B6oD,GAAS,MAIhB7qH,KAAUuqB,GAAOsgG,GAAUtgG,IAAQ42C,EAAgB52C,EAAK3gD,MACpDihJ,IACDD,EAAgBn0J,IAAMu1G,EACtB4+C,EAAgB76I,IAAMiyF,GAE1BynD,EAAStkJ,SAGbR,EAAKsoG,WACLtoG,EAAKsoG,WAAWtxG,MAAMiO,GAAQjO,GAE9BgJ,EAAK7O,QAAQ+0C,IAAI50C,EAAMqR,SAASsC,GAAQjO,EAAOwC,EAAQ2I,OAAQ3I,EAAQoL,UAE3E5E,EAAKioG,YAAYhjG,GACVA,IAEXosE,SAAU,SAAUhwE,GAAV,GACFrB,GAAO5G,KAAM4uG,EAAWhoG,EAAKgoG,SAAU88C,EAAW9kJ,EAAK8kJ,SAAU9tJ,EAAQgJ,EAAK7O,QAAQ+0C,MAAOigH,EAAoBn+C,EAAS/wB,MAAMr6E,UAChIknB,EAAkB9jB,EAAKsoG,YAAcjnG,EAAE64D,wBACvC74D,GAAEglF,QAAUhlF,EAAEmuB,UAAYl+B,EAAMypB,KAAKU,KACrCzb,EAAKuZ,OAAO4sI,EAAoB,OAAS,QAClCA,GACPn+C,EAAS7jF,KAAK9iB,GACdrB,EAAKioG,YAAYD,EAASnQ,WACnBitD,EAAS7tE,MAAMr6E,UACtBkoJ,EAAS3gI,KAAK9iB,GACPA,EAAEmuB,UAAYl+B,EAAMypB,KAAKK,OAASpkB,IAAUgJ,EAAKokG,SACxDpkG,EAAK23C,QAAQ3gD,IAEbgJ,EAAK0wF,SAAU,EACf5sE,GAAkB,GAElBA,GACAziB,EAAE64D,4BAGVmrF,OAAQ,WACJ,GAA0Fr9C,GAAU88C,EAAUj0I,EAAK06E,EAAI5hE,EAAO1kB,EAA1HjF,EAAO5G,KAAMjI,EAAU6O,EAAK7O,QAASqI,EAAUwG,EAAKxG,QAASyjB,EAAK9rB,EAAQmL,KAAK,KACnF0D,GAAKgoG,SAAWA,EAAW,GAAI12G,GAAMk2G,SAAS1tG,KAAWN,GACrDyjB,GAAIA,EACJq4D,OAAQt1E,EAAKvN,QACbohC,OAAQ,WACJ,GAAqG9uB,GAASqhJ,EAA1GpvJ,EAAQgxG,EAAS9iG,SAASlO,QAAS0yB,GAAW1yB,EAAO2yB,GAASnwB,EAAQ4R,IAAKwe,GAASpwB,EAAQ1H,GAC5F43B,KAAYC,GAASD,IAAYE,IACjC7kB,EAAU2kB,IAAYC,EAAQA,EAAQC,EACtC7kB,EAAU,GAAIm2F,GAAKl7F,EAAK6vF,QAAU9qF,GAClCA,EAAQ+J,YAAY9X,EAAM+O,cAAe/O,EAAM8O,WAAY9O,EAAM0O,WAC7D01F,EAAUr2F,EAAS4kB,EAAOC,KAC1B5yB,EAAQ+N,IAGZ/E,EAAK6vF,SACLu2D,EAAe90J,EAAM2T,KAAKsH,SAAS,GAAInX,MAAK4B,GAAQgJ,EAAK6vF,QACrDuL,EAAUgrD,EAAcz8H,EAAOC,KAC/B5yB,EAAQovJ,IAGhBpmJ,EAAK23C,QAAQ3gD,GACbgJ,EAAK01E,MAAM,SAEfA,MAAO,SAAUr0E,GACTrB,EAAKoB,QAAQgzE,EAAO8wE,GACpB7jJ,EAAE9D,kBAEFpM,EAAQmL,KAAKgrG,GAAe,GAC5Bz2F,EAAIvU,KAAKirG,GAAa,GACjBu9C,EAAS7tE,MAAMr6E,WAChBzL,EAAQqtB,WAAWymI,KAI/BxvE,KAAM,SAAUp0E,GACRrB,EAAKoB,QAAQ+yE,EAAM+wE,GACnB7jJ,EAAE9D,kBAEEpM,EAAQ+0C,QAAUlmC,EAAKokG,WACvBn/F,EAAOm9B,EAAMjxC,EAAQ+0C,MAAO1sC,EAAQutG,aAAcvtG,EAAQoL,SAC1D5E,EAAKgoG,SAAS/iG,EAAO,UAAY,SAASA,IAE9C4L,EAAIvU,KAAKirG,GAAa,GACtBp2G,EAAQmL,KAAKgrG,GAAe,GAAMhrG,KAAK2oJ,EAAWj9C,EAASP,aAC3DznG,EAAKioG,YAAYhjG,QAI7B4L,EAAMm3F,EAASn3F,IACf8Y,EAAQnwB,EAAQ4R,IAAI/V,UACpB2K,EAAK8kJ,SAAWA,EAAW,GAAIhB,IAC3B7mI,GAAIA,EACJjmB,MAAOwC,EAAQxC,MACfs+E,OAAQt1E,EAAKvN,QACb+iF,UAAWh8E,EAAQg8E,UACnBrzE,OAAQ3I,EAAQwrJ,WAChBpgJ,QAASpL,EAAQoL,QACjBtS,OAAQkH,EAAQlH,OAChBmyJ,SAAUjrJ,EAAQirJ,SAClBr5I,IAAK,GAAI8vF,GAAKmC,GACdvrG,IAAK,GAAIopG,GAAKmM,GACdjL,MAAOzyE,IAAUnwB,EAAQ1H,IAAIuD,WAAa,GAAID,MAAKu0B,OACnDo9E,aAAcvtG,EAAQutG,aACtBlzE,OAAQ,SAAU78B,EAAOoK,GACrBpK,EAAQ8tJ,EAAShiH,OAAO9rC,GACpBA,EAAQwC,EAAQ4R,KAChBpU,EAAQ,GAAIkkG,KAAM1hG,EAAQ4R,MAC1B05I,EAAStrJ,QAAQ4R,IAAMpU,GAChBA,EAAQwC,EAAQ1H,MACvBkF,EAAQ,GAAIkkG,KAAM1hG,EAAQ1H,MAC1BgzJ,EAAStrJ,QAAQ1H,IAAMkF,GAEvBoK,GACApB,EAAKqmJ,eAAgB,EACrBrmJ,EAAK23C,QAAQ3gD,KAEb7F,EAAQ+0C,IAAI50C,EAAMqR,SAAS3L,EAAOwC,EAAQ2I,OAAQ3I,EAAQoL,UAC1DojG,EAAShxG,MAAMA,GACfgJ,EAAKioG,YAAYjxG,KAGzB0+E,MAAO,SAAUr0E,GACTrB,EAAKoB,QAAQgzE,EAAO+wE,GACpB9jJ,EAAE9D,kBAEFguF,EAAGjvF,KAAKirG,GAAa,GACrBp2G,EAAQmL,KAAKgrG,GAAe,GACvBU,EAAS/wB,MAAMr6E,WAChBzL,EAAQqtB,WAAWymI,KAI/BxvE,KAAM,SAAUp0E,GACZyjJ,EAAS3zD,mBACLnxF,EAAKoB,QAAQ+yE,EAAMgxE,GACnB9jJ,EAAE9D,kBAEEpM,EAAQ+0C,QAAUlmC,EAAKokG,WACvBn/F,EAAOm9B,EAAMjxC,EAAQ+0C,MAAO1sC,EAAQutG,aAAcvtG,EAAQoL,SAC1D5E,EAAK8kJ,SAAS9tJ,MAAMiO,IAExBsmF,EAAGjvF,KAAKirG,GAAa,GACrBp2G,EAAQmL,KAAKgrG,GAAe,GAAMhrG,KAAK2oJ,EAAWH,EAASZ,aAC3DY,EAAStrJ,QAAQgnG,OAAOskD,EAAS//I,aAGzCy7F,OAAQ,SAAUz7F,GACd5T,EAAQqtB,WAAWwlI,GACfj/I,GACA5T,EAAQmL,KAAK0nJ,EAAuBc,EAASruD,cAIzDlL,EAAKu5D,EAASv5D,IAElB+5D,OAAQ,WAAA,GACAtlJ,GAAO5G,KACPjI,EAAU6O,EAAK7O,QACfqI,EAAUwG,EAAKxG,QACf8sJ,EACIn1J,EAAQqpD,KAAK,gBAChB8rG,GAAM,KACPA,EAAQx2J,EAAE,yFAAgG0J,EAAQisJ,eAAiB,oHAA2HjsJ,EAAQksJ,eAAiB,4EAAiFxqF,YAAY/pE,IAExXm1J,EAAQA,EAAMvyJ,WACduyJ,EAAQA,EAAMvyJ,WACdiM,EAAKyoG,UAAY69C,EAAMnkI,GAAG,GAAG7lB,KAAK,gBAAiB0D,EAAKgoG,SAASP,aACjEznG,EAAK6lJ,UAAYS,EAAMnkI,GAAG,GAAG7lB,KAAK,gBAAiB0D,EAAK8kJ,SAASZ,cAErEn8C,SAAU,WACN,GAAyCt1G,GAArCuN,EAAO5G,KAAMjI,EAAU6O,EAAK7O,OAChCsB,GAAUtB,EAAQ4L,QAAQ,qBACrBtK,EAAQ,KACTA,EAAUtB,EAAQe,KAAKg1G,GAAMl0G,SAASU,SAAS,iCAC/CjB,EAAUA,EAAQP,KAAKg1G,GAAMl0G,UAEjCP,EAAQ,GAAGS,MAAM6d,QAAU5f,EAAQ,GAAG+B,MAAM6d,QAC5C5f,EAAQE,KACJgB,MAAO,OACPC,OAAQnB,EAAQ,GAAG+B,MAAMZ,SAE7B0N,EAAKvN,QAAUA,EAAQiB,SAAS,sCAAsCA,SAASvC,EAAQ,GAAGkG,WAC1F2I,EAAK0oG,cAAgB54G,EAAE2C,EAAQ,GAAG4wC,aAEtC2a,OAAQ,WACJ,GAAIh+C,GAAO5G,KAAMjI,EAAU6O,EAAK7O,QAASukG,EAASvkG,EAAQmL,KAAK,QAAS+yB,EAAOqmE,EAAS5lG,EAAE,IAAM4lG,GAAUvkG,EAAQkgB,QAAQ,OACtHge,GAAK,KACLrvB,EAAK0vF,cAAgB,WACjB1vF,EAAKhJ,MAAM7F,EAAQ,GAAG08C,cACtB7tC,EAAKlO,IAAIkO,EAAK8nG,gBAAgBh2G,KAC9BkO,EAAKoL,IAAIpL,EAAK8nG,gBAAgB18F,MAElCpL,EAAKyvF,MAAQpgE,EAAKvwB,GAAG,QAASkB,EAAK0vF,iBAG3C2J,UAAW,WACPjgG,KAAK6vG,cAAgB33G,EAAMuK,SAASzC,KAAKI,QAAQgvG,eAErDg9C,mBAAoB,SAAUp6I,EAAKtZ,GAC/B,MAAOqU,GAAgBiF,GAAOjF,EAAgBrU,KAAS,GAE3Dm2G,YAAa,SAAUhjG,GAAV,GACLgkC,GACAjpC,EAAO5G,KACP8L,EAAWlF,EAAKgoG,SAAS9iG,QAC7BlF,GAAK7O,QAAQqtB,WAAWwlI,GACpB9+I,IACA+jC,EAAO/jC,EAAS+5F,MAChBh2D,EAAK3sC,KAAK,aAAc0D,EAAKipG,eAAgBlkG,QAASE,GAAQC,EAASH,aACvE/E,EAAK7O,QAAQmL,KAAK0nJ,EAAuB/6G,EAAK3sC,KAAK,UAwB/Dme,GAAG8G,OAAO6jI,IACZr1J,OAAOuB,MAAM2sB,QACRluB,OAAOuB,OACE,kBAAVzB,SAAwBA,OAAOgiC,IAAMhiC,OAAS,SAAUiiC,EAAIC,EAAIC,IACrEA,GAAMD,OAEV,SAAUniC,EAAGC,QACVA,OAAO,kBAAmB,mBAAoBD,IAChD,WA4dE,MApdC,UAAUE,EAAGE,GAEV,QAASu2J,GAAiBpvJ,GACtB,MAAOqvJ,GAAqBlzJ,KAAK6D,GAErC,QAASsvJ,GAAYtvJ,GACjB,MAAOuvJ,GAAapzJ,KAAK6D,IAAS,QAAQ7D,KAAK6D,GAEnD,QAASwvJ,GAAQxvJ,GACb,OAAQovJ,EAAiBpvJ,KAAUsvJ,EAAYtvJ,GAEnD,QAASyvJ,GAAczvJ,EAAMkqC,GACzB,GAAIk2C,GAAS9rE,SAAStU,EAAM,GAI5B,OAHIovJ,GAAiBpvJ,KACjBogF,EAASv/E,KAAKpE,MAAM2jF,EAASl2C,EAAQ,MAElCk2C,EAEX,QAASsvE,GAAqBt/F,EAAcu/F,GACxC,MAAO,UAAUtgF,EAAMxvE,GAAhB,GAOK+vJ,GANJC,EAAa5tJ,KAAKjI,QAAQuvB,KAAK8lD,GAAM5xE,KAAKqyJ,EAC9C,OAAwB,IAApB9yJ,UAAUnD,OACHg2J,EAAWz/F,IAEtBy/F,EAAWz/F,GAAgBvwD,EACvB8vJ,IACIC,EAAW3tJ,KAAKjI,QAAQyD,KAAK,QAAUwE,KAAKI,QAAQ8O,MACxDy+I,EAAS1sI,QAAO,IAHpB2sI,IAwWR,QAASE,GAAaH,GAClB,GAAI/mJ,GAAO5G,KAAMiwE,EAAc09E,EAAS19E,WACxCrpE,GAAKuoH,MAAQw+B,EACb/mJ,EAAK4yD,SAAWm0F,EAAS51J,QACzB6O,EAAKqpE,YAAcA,EACnBvvE,EAAOkG,EAAMqpE,IAAgBJ,EAAak+E,EAAqBC,GAC/DpnJ,EAAKqnJ,WAAa,GAAI/1J,GAAMmpB,GAAG2uD,UAAU29E,EAAS51J,SAC9Ck4E,YAAaA,EACbzkD,OAAQ,yBAA2BykD,EAAc,gBAAkB09E,EAAS7U,QAAU,IACtFtvE,KAAMxjE,EAAMY,EAAKsnJ,YAAatnJ,GAC9BqI,MAAOjJ,EAAMY,EAAKk7B,OAAQl7B,GAC1BlO,IAAKsN,EAAMY,EAAK+pE,KAAM/pE,GACtBoL,IAAKhM,EAAMY,EAAKkqE,KAAMlqE,GACtByqE,aAAc,qBAAuBpB,EACrCk+E,UAAWnoJ,EAAMY,EAAK8pE,MAAO9pE,KA9YxC,GAkXOonJ,GAOAD,EAxXA71J,EAAQvB,OAAOuB,MAAOmpB,EAAKnpB,EAAMmpB,GAAIM,EAAOzpB,EAAMypB,KAAMjhB,EAAShK,EAAEgK,OAAQsF,EAAQtP,EAAEsP,MAAOhB,EAASqc,EAAGrc,OAAQsoJ,EAAe,mBAAoBF,EAAuB,kBAAmBvuF,EAAK,iBAAkB47E,EAAS,SAAUE,EAAW,WAAY71D,EAAc,cAAexyC,EAAQ,QAASq5B,EAAS,SAAUyiF,EAAe,eAAgBv+E,EAAa,aAAcC,EAAW,WAAY2yB,EAAa,aAAcprB,EAAQ,QAASw2E,EAAO,OAAQlpD,EAAa,aAActT,EAAU,kBAAmBg9D,EAAQ,KAAOR,EAAMS,EAAY,IAAMD,EA8B1iBE,EAAWvpJ,EAAOtE,QAClBC,KAAM,SAAU5I,EAASqI,GACrB,GAAiBknH,GAAb1gH,EAAO5G,IACXgF,GAAOf,GAAGtD,KAAKwH,KAAKvB,EAAM7O,EAASqI,GACnCwG,EAAKvN,QAAUuN,EAAK7O,QACpBuvH,EAAe1gH,EAAKxG,QAAQ6vE,YAAYnzE,eAAiBgzE,EACzDlpE,EAAKqpE,YAAcq3C,EAAez3C,EAAaC,EAC/ClpE,EAAK4nJ,WAAalnC,EAAe,QAAU,SAC3C1gH,EAAK6nJ,OACDC,SAAUpnC,EAAe3lG,EAAKO,KAAOP,EAAKQ,GAC1CwsI,SAAUrnC,EAAe3lG,EAAKS,MAAQT,EAAKU,MAE/Czb,EAAKgoJ,YAAc,GACnBhoJ,EAAKkyI,QAAU5gJ,EAAMyrB,OAAOpsB,UAAU,EAAG,GACzCqP,EAAKioJ,aACLjoJ,EAAK0qE,SAAW,GAAIw8E,GAAalnJ,GACjCA,EAAK7O,QAAQ+2J,eAAe,OAASjwF,IAEzCn3D,QACI+yI,EACAE,EACA71D,EACAxyC,EACAq5B,EACAyiF,GAEJW,aAAc,WACV/uJ,KAAKgvJ,SAASlrG,OAAO,iDAEzBmrG,gBAAiB,WACbjvJ,KAAKgvJ,SAASr0J,SAAS,uBAAuButB,UAElDm4C,cAAe,WACX,GAAIz5D,GAAO5G,KAAMiwE,EAAcrpE,EAAKxG,QAAQ6vE,WAC5CrpE,GAAK7O,QAAQ4C,SAAS,yBAA2Bs1E,GAAavqE,GAAG,UAAYm5D,EAAI74D,EAAMY,EAAKqxE,SAAUrxE,IAAOlB,GAAG,YAAcm5D,EAAI,SAAU52D,GACxIA,EAAE22B,cAAcrK,UACjB7uB,GAAG,QAAUm5D,EAAI,SAAU52D,GAC1BvR,EAAEuR,EAAE22B,eAAetkC,SAAS+2F,KAC7B3rF,GAAG,OAASm5D,EAAI,SAAU52D,GACzBvR,EAAEuR,EAAE22B,eAAe+rB,YAAY0mC,GAC3BzqF,EAAK0qE,UACL1qE,EAAK0qE,SAAS35E,QAEnB+N,GAAG+8F,EAAa5jC,EAAI,WACnBnoE,EAAEsJ,MAAM1F,SAAS,cAAgBsM,EAAKqpE,YAAc,YACrDvqE,GAAGi/F,EAAa9lC,EAAI,WACnBnoE,EAAEsJ,MAAM2qD,YAAY,cAAgB/jD,EAAKqpE,YAAc,YACxDvqE,GAAG,YAAcm5D,EAAI74D,EAAMY,EAAKmoJ,aAAcnoJ,IAAOjP,MAAMgD,SAAS,eAAe+K,GAAG,WAAam5D,EAAI74D,EAAMY,EAAKsoJ,YAAatoJ,IAAOjM,SAAS,sCAAsC+K,GAAG2xE,EAAQxY,EAAIj4D,EAAK6vG,YAAYkkC,IAAWhjJ,MAAMgD,SAAS,kCAAkC+K,GAAG2xE,EAAQxY,EAAIj4D,EAAK6vG,YAAYgkC,IAAS9iJ,MAAMA,MACnUjB,EAAEC,QAAQ+O,GAAG,SAAWm5D,EAAKj4D,EAAKkyI,QAAS9yI,EAAMY,EAAKqa,OAAQra,GAAM,IACpElQ,EAAE6G,UAAUmI,GAAG,UAAYm5D,EAAKj4D,EAAKkyI,QAAS9yI,EAAMY,EAAKqoJ,gBAAiBroJ,KAE9EuoJ,cAAe,WACX,GAAIvoJ,GAAO5G,IACX4G,GAAK7O,QAAQ4C,SAAS,yBAA2BiM,EAAKqpE,aAAarmD,IAAIi1C,GAAIlnE,MAAMgD,SAAS,eAAeivB,IAAI,WAAai1C,GAAIlkE,SAAS,sEAAsEivB,IAAIi1C,GACjNnoE,EAAEC,QAAQizB,IAAIi1C,EAAKj4D,EAAKkyI,SACxBpiJ,EAAE6G,UAAUqsB,IAAIi1C,EAAKj4D,EAAKkyI,UAE9B14I,SACI8O,KAAM,WACN+gE,YAAaJ,EACbu/E,UAEJtpI,QAAS,WACL9gB,EAAOf,GAAG6hB,QAAQ3d,KAAKnI,MACvBA,KAAKmvJ,gBACDnvJ,KAAKsxE,UACLtxE,KAAKsxE,SAASxrD,UAElB5tB,EAAM4tB,QAAQ9lB,KAAKjI,SACnBiI,KAAK3G,QAAU2G,KAAKjI,QAAU,MAElCkgF,SAAU,SAAUhwE,GAChB,GAA8MmlE,GAA1MxmE,EAAO5G,KAAMjB,EAAMkJ,EAAEmuB,QAASk7C,EAAW1qE,EAAK0qE,SAAUlxD,EAAS1pB,EAAEuR,EAAE22B,eAAgBywH,EAAiBzoJ,EAAK6nJ,MAAOE,EAAW5vJ,IAAQswJ,EAAeV,SAAUD,EAAW3vJ,IAAQswJ,EAAeX,QAChMC,IAAYD,GACRzmJ,EAAE8tE,SACF3I,EAAOhtD,EAAOsuI,EAAW,OAAS,UAC9Bp9E,GAAYA,EAASg+E,cACrBh+E,EAAS35E,MAERy1E,EAAKxmE,EAAK4nJ,cAGX5nJ,EAAK2oJ,eAAe5U,EAAUv6H,EAAOsuI,EAAW,OAAS,WAFzD9nJ,EAAK2oJ,eAAe9U,EAAQrtE,IAIzBkE,GACPA,EAASvmD,MAAM2jI,KAAgB,GAAK9nJ,EAAKgoJ,YAAaxuI,GAE1DnY,EAAE9D,kBACKpF,IAAQ4iB,EAAKK,OAASsvD,IAC7BA,EAAS35E,MACTsQ,EAAE9D,mBAGV0qJ,WAAY,WAAA,GACJW,GAAcxvJ,KAAKI,QAAQgvJ,UAC3BxoJ,EAAO5G,IACXA,MAAKjI,QAAQuC,SAAS,YAAYA,SAAS,cAAcK,WAAW+C,KAAK,SAAU5C,EAAGsyE,GAC/C,UAA/BA,EAAK/pE,SAASvG,eACd8J,EAAK6oJ,UAAUriF,EAAMoiF,EAAY10J,MAGzCkF,KAAKihB,UAETwuI,UAAW,SAAUriF,EAAMsiF,GACvBtiF,EAAO12E,EAAE02E,GAAMlqE,KAAK,OAAQ,SAAS5I,SAAS+zJ,GAC9CjhF,EAAK5xE,KAAKqyJ,EAAM6B,EAASA,MAAatuJ,YAAY,gBAAgBsuJ,GAASA,EAAOxf,cAAe,GACjGlwI,KAAKkmJ,YAAY94E,IAErB84E,YAAa,SAAU94E,EAAMjqD,EAAK3nB,GAC9B,GAAiBoyJ,GAAbhnJ,EAAO5G,IACXotE,GAAOxmE,EAAK7O,QAAQuvB,KAAK8lD,GACzBwgF,EAAaxgF,EAAK5xE,KAAKqyJ,GACvB1qI,EAAMA,GAAOyqI,EAAWnS,WACpBt4H,IACAiqD,EAAKtpB,OAAO,sDACR5rD,EAAMgrB,WAAWC,GACjB0B,OAAOktB,MACH5uB,IAAKA,EACL3nB,KAAMA,MACN0D,KAAM,MACN2oC,SAAU,OACVgR,QAAS,SAAUr9C,GACfoL,EAAKke,QAAQ,UAAW,WACpB,OAASyB,SAAU6mD,EAAK3pD,SAE5B2pD,EAAK1qE,KAAKlH,GACVoL,EAAKke,QAAQ,UAAW,WACpB,OAASyB,SAAU6mD,EAAK3pD,SAE5B7c,EAAKoB,QAAQ88E,GAAe1X,KAAMA,EAAK,MAE3Cr0B,MAAO,SAAUqH,EAAKf,GAClBz4C,EAAKoB,QAAQsqC,GACT86B,KAAMA,EAAK,GACX/tB,OAAQA,EACRe,IAAKA,OAKjBgtB,EAAKziB,YAAY,gBAAgBjoD,KAAK,gBAAmBygB,EAAM,2GAI3EosI,eAAgB,SAAUrwJ,EAAMkuE,GACvBptE,KAAKgI,QAAQ9I,GAAQkuE,KAAMA,EAAK,MACjCptE,KAAKd,GAAMkuE,EAAK,KAGxB8hF,YAAa,SAAUjnJ,GACnB,GAAuC0+E,GAAnC//E,EAAO5G,KAAMogB,EAAS1pB,EAAEuR,EAAEmY,OAC1BA,GAAOnI,QAAQ,eAAe,IAAMrR,EAAK7O,QAAQ,KAGrD4uF,EAAQvmE,EAAOzlB,SAAS,iCACH,IAAjBgsF,EAAM/uF,SAGN+uF,EAAM5sF,GAAG,oBACT6M,EAAK2oJ,eAAe5U,EAAUv6H,EAAO4b,QAC9B2qD,EAAM5sF,GAAG,oBAChB6M,EAAK2oJ,eAAe5U,EAAUv6H,EAAOghC,QAC9BulC,EAAM5sF,GAAG,kBAChB6M,EAAK2oJ,eAAe9U,EAAQr6H,EAAO4b,QAC5B2qD,EAAM5sF,GAAG,mBAChB6M,EAAK2oJ,eAAe9U,EAAQr6H,EAAOghC,WAG3Cq1D,YAAa,SAAUk5C,GACnB,GAAI/oJ,GAAO5G,IACX,OAAO,UAAUiI,GACb,GAA0BmlE,GAAtBhtD,EAAS1pB,EAAEuR,EAAEmY,OACbA,GAAOnI,QAAQ,eAAe,IAAMrR,EAAK7O,QAAQ,KAIjDq1E,EADAhtD,EAAOrmB,GAAG,MAAQ41J,EAAY,SACvBvvI,EAAOxmB,SAASoiC,OAEhB5b,EAAOxmB,SAASwnD,OAE3Bx6C,EAAK2oJ,eAAeI,EAAWviF,MAGvCwiF,gBAAiB,SAAUC,EAAUC,EAAcC,GAC/C,GAAIC,GAAY,SAAUC,EAAUC,GAC5B,MAAOA,GAAY,sBAAyBD,EAAW,OAAU,IAClEhgF,EAAcjwE,KAAKiwE,YAAa9H,EAAY2nF,EAAa1kE,aAAc,GAAS2kE,EAAS3kE,aAAc,EAAO+kE,EAAkBL,EAAajK,YAAauK,EAAgBN,EAAaO,UAAWC,EAAkBP,EAASlK,YAAa0K,EAAgBR,EAASM,SAC1QR,GAASv1J,SAAS,yCAA2C21E,GAAa/sE,KAAK,OAAQ,aAAaA,KAAK,kBAAmBktJ,GAAiBG,IAAgB5lG,YAAY,cAAgBslB,EAAc,UAAU7uE,YAAY,wBAA0B6uE,EAAa9H,IAAcioF,IAAkBG,GAAenvJ,YAAY,qBAAuB6uE,GAAc9H,IAAcgoF,IAAoBG,GAAiB5tJ,KAAKstJ,EAAU,kCAAmCG,IAAoBC,IAAkBG,GAAiBtgF,GAAeH,GAAYkgF,EAAU,oCAAqCG,IAAoBC,IAAkBG,GAAiBtgF,GAAeJ,GAAcmgF,EAAU,kCAAmCG,GAAmBC,IAAkBG,GAAiBtgF,GAAeH,GAAYkgF,EAAU,mCAAoCG,GAAmBC,IAAkBG,GAAiBtgF,GAAeJ,GAAcmgF,EAAU,2BAA4B7nF,GAAa8H,GAAeH,GAAYkgF,EAAU,2BAA4B7nF,GAAa8H,GAAeJ,GAAcmgF,EAAU,oCAAqCM,IAAoBC,IAAkBH,GAAiBngF,GAAeH,GAAYkgF,EAAU,qCAAsCM,IAAoBC,IAAkBH,GAAiBngF,GAAeJ,GAAcmgF,EAAU,gCAAiCM,GAAmBC,IAAkBH,GAAiBngF,GAAeH,GAAYkgF,EAAU,kCAAmCM,GAAmBC,IAAkBH,GAAiBngF,GAAeJ,IACziD1H,GAAcgoF,GAAoBG,GACnCT,EAASzqI,WAAW,aAG5BorI,iBAAkB,WACd,GAAI5pJ,GAAO5G,IACXA,MAAKjI,QAAQ4C,SAAS,eAAe+C,KAAK,WACtC,GAAImyJ,GAAWn5J,EAAEsJ,MAAO8vJ,EAAeD,EAASpgE,QAAQ6+D,GAAWl3J,QAAQoE,KAAKqyJ,GAAOkC,EAAWF,EAAShuB,QAAQysB,GAAWl3J,QAAQoE,KAAKqyJ,EACtIkC,IAGLnpJ,EAAKgpJ,gBAAgBC,EAAUC,EAAcC,MAGrDU,iBAAkB,WACdzwJ,KAAKjI,QAAQ4C,SAAS,eAAeutB,UAEzC8mI,OAAQ,WACJ,MAAKhvJ,MAAKjI,QAGHiI,KAAKjI,QAAQ4C,SAAS2zJ,GAFlB53J,KAIfivB,QAAS,WAAA,GAcD+qI,GAAqBC,EAAqBC,EAqB1CC,EAA4CC,EAE5Ct4G,EAASu4G,EAA6DC,EAAqDC,EAEvHC,EAtCJtqJ,EAAO5G,KAAMjI,EAAU6O,EAAK7O,QAASq3J,EAAQr3J,EAAQ4C,SAAS2zJ,GAAYhnC,EAAe1gH,EAAKqpE,aAAeJ,EAAYshF,EAAYp5J,EAAQ4C,SAAS,eAAgBy2J,EAAiBD,EAAUv5J,OAAQy5J,EAAiB/pC,EAAe,QAAU,SAAUgqC,EAAYv5J,EAAQs5J,IACrRzqJ,GAAKvN,QAAQiB,SAAS,uBACC,IAAnB82J,GACAA,EAAiBhC,EAAMx3J,OAAS,EAChCw3J,EAAM5oJ,MAAM,EAAG4qJ,GAAgB5zF,MAAM,qDAA4D52D,EAAKkyI,QAAU,QAChHlyI,EAAK4pJ,mBACLW,EAAYp5J,EAAQ4C,SAAS,gBAE7BiM,EAAK4pJ,mBAETW,EAAUzzJ,KAAK,WACX4zJ,GAAatxJ,KAAKsnH,EAAe,cAAgB,kBAEjDopC,EAAkB,EAAGC,EAAkB,EAAGC,EAAiBl6J,IAC/D04J,EAAMn3J,KACFo+D,SAAU,WACV/2D,IAAK,IACN+xJ,GAAgB,WACf,GAA0DtzJ,GAAtDhG,EAAUrB,EAAEsJ,MAAO0vJ,EAAS33J,EAAQyD,KAAKqyJ,MAE7C,IADA91J,EAAQ4yD,YAAY,qBAChB+kG,EAAOW,UACPtyJ,EAAO2xJ,EAAO6B,cAAgB/D,EAAckC,EAAO6B,cAAeD,GAAa,EAC/Ev5J,EAAQE,IAAI,WAAY,UAAUqC,SAAS,yBACxC,CAAA,GAAIizJ,EAAQmC,EAAO3xJ,MAEtB,MADA6yJ,GAAiBA,EAAetvJ,IAAItB,MACpC,CAEAjC,GAAOyvJ,EAAckC,EAAO3xJ,KAAMuzJ,GAItC,MAFAX,KACAD,GAAmB3yJ,EACZA,IAEXuzJ,GAAaZ,EACTG,EAAqBD,EAAeh5J,OAAQk5J,EAAoBlyJ,KAAKpE,MAAM82J,EAAYT,GAC3FD,EAAepqJ,MAAM,EAAGqqJ,EAAqB,GAAG54J,IAAIo5J,EAAgBP,GAAmBn5J,MAAMoxB,GAAG8nI,EAAqB,GAAG54J,IAAIo5J,EAAgBC,GAAaT,EAAqB,GAAKC,GAC/Kt4G,EAAM,EAAGu4G,EAA0BzpC,EAAe,SAAW,QAAS0pC,EAAsB1pC,EAAe,OAAS,MAAO2pC,EAAoB3pC,EAAe,cAAgB,eACvJ,IAAvBupC,IACIK,EAAuB9B,EAAMvrJ,OAAO,WACpC,QAASnN,EAAEsJ,MAAMxE,KAAKqyJ,QAAawC,YACpC/gI,OACH4hI,EAAqBG,GAAgBC,EAAYJ,EAAqB,GAAGD,KAE7El5J,EAAQ4C,WAAW1C,IAAI84J,EAAyBh5J,EAAQg5J,MAA4BrzJ,KAAK,SAAU5C,EAAGy2B,GAC/D,UAA/BA,EAAMnN,QAAQtnB,gBACdy0B,EAAMz3B,MAAMk3J,GAAuBpyJ,KAAKpE,MAAMg+C,GAAO,KACrDA,GAAOjnB,EAAM0/H,MAGrBrqJ,EAAKuoJ,gBACLvoJ,EAAKy5D,gBACLz5D,EAAKvN,QAAQsxD,YAAY,uBACzBzyD,EAAM+oB,OAAOmuI,GACbxoJ,EAAKoB,QAAQomJ,IAEjBjuI,OAAQ,SAAUitD,EAAM2uE,GACpB,GAAiB6R,GAAbhnJ,EAAO5G,IACXotE,GAAOxmE,EAAK7O,QAAQuvB,KAAK8lD,GACzBwgF,EAAaxgF,EAAK5xE,KAAKqyJ,IAClB9R,GAAW6R,EAAW/H,eAGH,GAApB9qJ,UAAUnD,SACVmkJ,EAAS6R,EAAWyC,YAAcz5J,GAAoBg3J,EAAWyC,WAErEzC,EAAWyC,WAAatU,EACpB6R,EAAWyC,UACXjjF,EAAKn1E,IAAI,WAAY,UAErBm1E,EAAKn1E,IAAI,WAAY,IAEzB2O,EAAKqa,QAAO,KAEhB0T,SAAU,SAAUy4C,GAChBptE,KAAKmgB,OAAOitD,GAAM,IAEtB2uE,OAAQ,SAAU3uE,GACdptE,KAAKmgB,OAAOitD,GAAM,IAEtBokF,SAAU,SAAU9B,EAAQ/xJ,EAAK8zJ,GAC7B,GAAI7qJ,GAAO5G,IAOX,OANIyxJ,GAAY75J,SACZgP,EAAKxG,QAAQgvJ,MAAMhnJ,OAAOzK,EAAK,EAAG+xJ,GAClC9oJ,EAAK6oJ,UAAUgC,EAAa/B,GAC5B9oJ,EAAK6pJ,mBACL7pJ,EAAKqa,QAAO,IAETwwI,GAEX3tG,OAAQ,SAAU4rG,GACdA,EAASA,KACT,IAAI9oJ,GAAO5G,KAAMyxJ,EAAc/6J,EAAE,WAAWogC,SAASlwB,EAAK7O,QAC1D,OAAO6O,GAAK4qJ,SAAS9B,EAAQ9oJ,EAAKxG,QAAQgvJ,MAAMx3J,OAAQ65J,IAE5DvmG,aAAc,SAAUwkG,EAAQgC,GAC5BA,EAAgBh7J,EAAEg7J,GAClBhC,EAASA,KACT,IAAI9oJ,GAAO5G,KAAMrC,EAAMiJ,EAAKvN,QAAQsB,SAAS,WAAWwX,MAAMu/I,GAAgBD,EAAc/6J,EAAE,WAAWw0D,aAAax0D,EAAEg7J,GACxH,OAAO9qJ,GAAK4qJ,SAAS9B,EAAQ/xJ,EAAK8zJ,IAEtC3vF,YAAa,SAAU4tF,EAAQgC,GAC3BA,EAAgBh7J,EAAEg7J,GAClBhC,EAASA,KACT,IAAI9oJ,GAAO5G,KAAMrC,EAAMiJ,EAAKvN,QAAQsB,SAAS,WAAWwX,MAAMu/I,GAAgBD,EAAc/6J,EAAE,WAAWorE,YAAYprE,EAAEg7J,GACvH,OAAO9qJ,GAAK4qJ,SAAS9B,EAAQ/xJ,EAAM,EAAG8zJ,IAE1CvpI,OAAQ,SAAUklD,GACdA,EAAO12E,EAAE02E,EACT,IAAIxmE,GAAO5G,IAYX,OAXIotE,GAAKx1E,SACLM,EAAM4tB,QAAQsnD,GACdA,EAAK1vE,KAAK,SAAUC,EAAK5F,GACrB6O,EAAKxG,QAAQgvJ,MAAMhnJ,OAAOxB,EAAKvN,QAAQsB,SAAS,WAAWwX,MAAMpa,GAAU,GAC3ErB,EAAEqB,GAASmwB,WAEfthB,EAAK6pJ,mBACD7pJ,EAAKxG,QAAQgvJ,MAAMx3J,QACnBgP,EAAKqa,QAAO,IAGbra,GAEX7I,KAAM0vJ,EAAqB,QAAQ,GACnCz7I,IAAKy7I,EAAqB,OAC1B/0J,IAAK+0J,EAAqB,QAE9BpsI,GAAG8G,OAAOomI,GACNP,GACAqD,eAAgB,SAChBJ,kBAAmB,eACnBF,wBAAyB,QACzBC,oBAAqB,MACrBW,yBAA0B,SAE1B5D,GACAsD,eAAgB;AAChBJ,kBAAmB,cACnBF,wBAAyB,SACzBC,oBAAqB,OACrBW,yBAA0B,SAmB9B7D,EAAa/mJ,WACTu6B,MAAO,SAAUlhB,GACbpgB,KAAKiuJ,WAAW3sH,MAAMlhB,IAE1B2K,KAAM,SAAUsI,EAAOjT,GACdpgB,KAAKijC,UACNjjC,KAAKshC,MAAMlhB,GACXpgB,KAAKijC,SAAU,GAEdjjC,KAAKiuJ,WAAW7tI,QACjBpgB,KAAKiuJ,WAAW3sH,MAAMlhB,GAE1BpgB,KAAKiuJ,WAAWljI,KAAKsI,IAEzB17B,IAAK,WACDqI,KAAKiuJ,WAAWt2J,MAChBqI,KAAKijC,SAAU,GAEnBnd,QAAS,WACL9lB,KAAKiuJ,WAAWnoI,UAChB9lB,KAAKiuJ,WAAajuJ,KAAKw5D,SAAWx5D,KAAKmvH,MAAQ,MAEnDmgC,WAAY,WACR,MAAOtvJ,MAAKiuJ,WAAW38E,UAE3B48E,YAAa,SAAU1iI,GACnB,GAAI5kB,GAAO5G,IACX,OAAOtJ,GAAE,iDAAoDkQ,EAAKqpE,YAAc,wBAAyBh4E,IAAI2O,EAAKmqJ,wBAAyBvlI,EAAO5kB,EAAKmqJ,6BAE3JjvH,OAAQ,SAAU75B,GACd,GAAIrB,GAAO5G,KAAM6vJ,EAAWn5J,EAAEuR,EAAE22B,eAAgBkxH,EAAeD,EAAS7zH,OAAQ+zH,EAAWF,EAASzuG,OAAQwwG,EAAqB9B,EAAat0J,KAAKqyJ,GAAOgE,EAAiB9B,EAASv0J,KAAKqyJ,GAAOiE,EAAez/I,SAASy9I,EAAa,GAAGh2J,MAAM8M,EAAKoqJ,qBAAsB,IAAKe,EAAe1/I,SAAS09I,EAAS,GAAGj2J,MAAM8M,EAAKoqJ,qBAAsB,IAAMjB,EAAS,GAAGnpJ,EAAKqqJ,mBAAqBpB,EAAS,GAAGjpJ,EAAKqqJ,mBAAoBK,EAAYj/I,SAASzL,EAAK4yD,SAASvhE,IAAI2O,EAAKyqJ,gBAAiB,IAAKW,EAAO,SAAUp0J,GAC/e,GAAIkvC,GAAMz6B,SAASzU,EAAO,GAC1B,QAAQyvJ,EAAYzvJ,GAASkvC,EAAMwkH,EAAYxkH,EAAM,MAAQ,GAC9DmlH,EAAcD,EAAKJ,EAAmB5/I,KAAMkgJ,EAAcF,EAAKJ,EAAmBl5J,MAAQq5J,EAAeD,EAAcK,EAAcH,EAAKH,EAAe7/I,KAAMogJ,EAAcJ,EAAKH,EAAen5J,MAAQq5J,EAAeD,CAC/NlrJ,GAAKkpJ,aAAeA,EACpBlpJ,EAAKmpJ,SAAWA,EAChBnpJ,EAAKoqE,aAAepyE,KAAKoT,IAAI+/I,EAAeI,EAAaL,EAAeI,GACxEtrJ,EAAKqqE,aAAeryE,KAAKlG,IAAIo5J,EAAeG,EAAaF,EAAeK,IAE5EzhF,KAAM,WACF,MAAO3wE,MAAKgxE,cAEhBF,KAAM,WACF,MAAO9wE,MAAKixE,cAEhBP,MAAO,SAAUzoE,GAAV,GAIKoqJ,GAA4BvC,EAAgCC,EAA4B6B,EAA8CC,EAAsCS,EAAqGC,EAAyKC,EAH9b5rJ,EAAO5G,KAAM6vJ,EAAWn5J,EAAEuR,EAAE22B,eAAgBuwF,EAAQvoH,EAAKuoH,KAiB7D,OAhBAA,GAAM6/B,SAASr0J,SAAS,uBAAuButB,SAC3CjgB,EAAEmuB,UAAYl+B,EAAMypB,KAAKM,MACrBowI,EAAgBpqJ,EAAEouD,SAAUy5F,EAAeD,EAAS7zH,OAAQ+zH,EAAWF,EAASzuG,OAAQwwG,EAAqB9B,EAAat0J,KAAKqyJ,GAAOgE,EAAiB9B,EAASv0J,KAAKqyJ,GAAOyE,EAAsBD,EAAgBhgJ,SAASy9I,EAAa,GAAGh2J,MAAM8M,EAAKoqJ,qBAAsB,IAAKuB,EAAkBlgJ,SAAS09I,EAAS,GAAGj2J,MAAM8M,EAAKoqJ,qBAAsB,IAAMjB,EAAS,GAAGnpJ,EAAKqqJ,mBAAqBoB,EAAgBxC,EAAS,GAAGjpJ,EAAKqqJ,mBAAoBuB,EAAkB5rJ,EAAK4yD,SAAS7+D,SAAS2zJ,GAAWzqJ,OAAO,WACjf,MAAO0pJ,GAAQ72J,EAAEsJ,MAAMxE,KAAKqyJ,GAAM9vJ,QACnCnG,SACF21J,EAAQqE,EAAmB7zJ,OAASy0J,EAAkB,KACnDjF,EAAQqE,EAAmB7zJ,OAC3By0J,IAEJZ,EAAmB7zJ,KAAOu0J,EAAsB,QAE/C/E,EAAQsE,EAAe9zJ,OAASy0J,EAAkB,KACnDX,EAAe9zJ,KAAOw0J,EAAkB,MAE5CpjC,EAAMluG,QAAO,KAEV,KAGjBtqB,OAAOuB,MAAM2sB,QACRluB,OAAOuB,OACE,kBAAVzB,SAAwBA,OAAOgiC,IAAMhiC,OAAS,SAAUiiC,EAAIC,EAAIC,IACrEA,GAAMD,OAEV,SAAUniC,EAAGC,QACVA,OAAO,gBACH,aACA,eACDD,IACL,WAuqBE,MA5pBC,UAAUE,EAAGE,GAMV,QAAS+xH,GAAQ11F,GACb,MAAmB,KAALA,EAElB,QAASw/H,GAAU70J,EAAO80J,EAAKC,GAC3B,MAAO/zJ,MAAKlG,IAAIkG,KAAKoT,IAAIK,SAASzU,EAAO,IAAK+0J,IAASC,EAAAA,EAAWD,EAAOtgJ,SAASsgJ,EAAM,KAAMtgJ,SAASqgJ,EAAK,KAEhH,QAASG,GAAiB5qJ,GACtB,MAAOA,GAAEmuB,SAAWzU,EAAKK,OAAS/Z,EAAEmuB,SAAWzU,EAAKa,SAb3D,GAK4B8+D,GAggBrBwxE,EAoCAC,EAaAC,EAGAC,EA4BAC,EAIAC,EA2CAC,EAnoBAl7J,EAAQvB,OAAOuB,MAAO8M,EAAS9M,EAAMmpB,GAAGrc,OAAQ81E,EAAa5iF,EAAMmpB,GAAG06D,MAAMjB,WAAY90E,EAAQtP,EAAEsP,MAAOvD,EAAWvK,EAAMuK,SAAUkf,EAAOzpB,EAAMypB,KAAMzlB,EAAaxF,EAAEwF,WAAY2iE,EAAK,cAAew0F,EAAU,YAAaC,EAAU,YAAaC,EAAa,kBAAmBC,EAAgB,8CAA+CC,EAAW,aAAcC,EAAa,qBAAsBC,EAAe,kBAAmBC,EAAkBD,EAAe,MAAOE,EAAe,wBAAyBv8E,EAAU,YAAaw8E,EAAS,UAAWC,EAAW,YAAaC,EAAU,WAAYC,EAAW,aAAcC,EAAW,aAAcz4E,EAAU,WAAYqxD,EAAS,SAAUvxD,EAAO,OAAQ44E,EAAW,WAAYp5E,EAAO,OAAQC,EAAQ,QAAS3f,EAAO,OAAQC,EAAO,OAAQrK,EAAQ,QAASqvF,EAAiB,IAAK5+H,GAC5zB0yI,OAAQ,KACRppI,OAAQ,SACRqpI,YAAa,SACd9yG,EAAO3iD,KAAK2iD,KAAiB+yG,EAAkB,+BAUlDC,EAAavvJ,EAAOtE,QACpBC,KAAM,SAAU5I,EAASqI,GACrB,GAAIwG,GAAO5G,IACXgF,GAAOf,GAAGtD,KAAKwH,KAAKvB,EAAM7O,EAASqI,GACnCwG,EAAK4tJ,MAAM5tJ,EAAK7O,QAAS6O,EAAKxG,SAC9BlI,EAAM0uB,OAAOhgB,IAEjB4tJ,MAAO,SAAUz8J,EAASqI,GACtB,GAAiB/G,GAAbuN,EAAO5G,IACX4G,GAAK6tJ,gBAAkBzuJ,EAAMY,EAAK8tJ,QAAS9tJ,GAC3CA,EAAKkwB,SAAWpgC,EAAE6kF,GACbotC,EAAQvoH,EAAQoD,UAAgC,OAApBpD,EAAQoD,UACrCpD,EAAQoD,QAAUzL,EAAQgC,GAAG0hF,IAE7B70E,EAAK+tJ,kBAAoB/9J,IACzBgQ,EAAK+tJ,gBAAkBrzE,EAAUjoF,SAErCuN,EAAKguJ,gBACLv7J,EAAUuN,EAAKvN,QAAUtB,EAAQkgB,QAAQo7I,GACrCjzJ,EAAQy0J,gBAAkBj+J,IAC1BgQ,EAAKiuJ,cAAgB98J,EAAQ,IAEjC6O,EAAKqe,UAAUltB,GACf6O,EAAKkuJ,cACL90J,KAAK+0J,YAAc,GAAIj6E,GAAWzhF,GAC7BuN,EAAKxG,QAAQoD,SAGdoD,EAAKouJ,UACLpuJ,EAAKquJ,mBACLruJ,EAAKoB,QAAQ+yE,GACT36E,EAAQ28E,QACRn2E,EAAKsuJ,SAAS77J,EAAQU,GAAG0hF,IAAUxjF,KAAMwgE,QAAS,KAClD7xD,EAAKuuJ,iBAPTvuJ,EAAKvN,QAAQyH,OAUbV,EAAQg1J,WACR/7J,EAAQovB,YAAYo2C,GACpB9mE,EAAQ0wB,YAAYo2C,GACpBxlE,EAAQiuB,KAAKisI,GAAY7tJ,GAAG,QAASM,EAAMY,EAAKyuJ,YAAazuJ,IAAOlB,GAAG,UAAWM,EAAMY,EAAK0uJ,iBAAkB1uJ,IAC/G7O,EAAQ2N,GAAG,UAAWM,EAAMY,EAAKqxE,SAAUrxE,MAGnDkuJ,YAAa,WAAA,GAOAh6J,GACD8C,EAPJgJ,EAAO5G,KAAM3G,EAAUuN,EAAKvN,QAAS+G,EAAUwG,EAAKxG,QAASnH,EAAQmH,EAAQnH,MAAOC,EAASkH,EAAQlH,OAAQ0sB,GACzG,WACA,YACA,WACA,YAER,KAAS9qB,EAAI,EAAGA,EAAI8qB,EAAWhuB,OAAQkD,IAC/B8C,EAAQwC,EAAQwlB,EAAW9qB,IAC3B8C,GAASA,GAASg1J,EAAAA,GAClBv5J,EAAQpB,IAAI2tB,EAAW9qB,GAAI8C,EAGnCoC,MAAKu1J,uBACDt8J,GAEII,EAAQJ,OADRA,GAAAA,GAAiBiF,QAAQ,KAAO,EAClBjF,EAEAw5J,EAAUx5J,EAAOmH,EAAQ+3F,SAAU/3F,EAAQq5I,WAG7DvgJ,IAEIG,EAAQH,QADRA,GAAAA,GAAkBgF,QAAQ,KAAO,EAClBhF,EAEAu5J,EAAUv5J,EAAQkH,EAAQunJ,UAAWvnJ,EAAQwzI,YAEhE5zI,KAAKw1J,sBAGbD,qBAAsB,WAClB,GAA6EE,GAAYC,EAArF9uJ,EAAO5G,KAAMjI,EAAU6O,EAAK7O,QAAS67I,EAAYhtI,EAAKxG,QAAQwzI,SAC9DA,IAAagf,EAAAA,IACb6C,EAAa7uJ,EAAK+uJ,YAAY59J,GAC9B29J,EAAmBvzJ,WAAWyxI,EAAW,IAAMhtI,EAAKgvJ,YAAcH,EAAW1kG,SACzE2kG,EAAmB,GACnB39J,EAAQE,KACJ27I,UAAWryF,EAAKm0G,GAAoB,KACpCv3J,SAAU,aAK1Bw3J,YAAa,SAAU59J,GACnB,GAAIwqF,GAAapgF,WAAWpK,EAAQE,IAAI,eAAgB,IAAKyqF,EAAcvgF,WAAWpK,EAAQE,IAAI,gBAAiB,IAAKwqF,EAAgBtgF,WAAWpK,EAAQE,IAAI,kBAAmB,IAAKuqF,EAAergF,WAAWpK,EAAQE,IAAI,iBAAkB,GAC/O,QACI84D,SAAUwxB,EAAaE,EACvBzuB,WAAY0uB,EAAcF,IAGlCgzE,kBAAmB,WACf,GAAI5uJ,GAAO5G,KAAMjI,EAAU6O,EAAK7O,QAASmB,EAAS0N,EAAKxG,QAAQlH,OAAQu8J,EAAa7uJ,EAAK+uJ,YAAY59J,GAAUknF,EAAgB98E,WAAWjJ,EAAQ,IAAM0N,EAAKgvJ,YAAcH,EAAW1kG,QAClLkuB,GAAgB,GAChBr4E,EAAK7O,QAAQE,KACTiB,OAAQqoD,EAAK09B,GAAiB,KAC9B9gF,SAAU,YAItBy3J,UAAW,WACP,GAAIhvJ,GAAO5G,KAAM3G,EAAUuN,EAAKvN,QAASw8J,EAAYx8J,EAAQsB,SAASk5J,GAAeiC,EAAkBD,EAAU,IAAMA,EAAU,GAAGlvI,cAAgB,EAAGovI,EAAW18J,EAAQsB,SAASi5J,GAAkBoC,EAAiBD,EAAS,IAAMA,EAAS,GAAGpvI,cAAgB,CACjQ,OAAOmvI,GAAkBE,GAE7Bd,SAAU,SAAU1xJ,GAChB,GAAIyyJ,GAAUj2J,KAAK82B,SAASn8B,SAASu5J,GAAW76J,EAAU2G,KAAK3G,OAU/D,OATK48J,GAAQr+J,SACTq+J,EAAUv/J,EAAE4qF,EAAU20E,UAE1BA,EAAQ/qG,aAAa7xD,EAAQ,IAAI8mB,OAAO3c,GAASvL,IAAI60I,EAAQz6H,SAAShZ,EAAQpB,IAAI60I,GAAS,IAAM,GAC7FtpI,EACAxD,KAAKk2J,kBAELl2J,KAAKm2J,wBAEFF,GAEXC,gBAAiB,WACb,GAAIvkI,GAAO3xB,KAAK3G,OAChB2G,MAAKo2J,gBAAkBzkI,EAAK89D,QAAQ6kE,GAAiBhzJ,IAAIqwB,EAAKkwG,QAAQyyB,IAAkB52J,KAAK,WACzF,GAAI24J,GAAQ3/J,EAAEsJ,KACdq2J,GAAM76J,KAAK,aAAc66J,EAAMnzJ,KAAK,gBACpCmzJ,EAAMnzJ,KAAK,cAAe,WAGlCizJ,sBAAuB,WACnB,MAAOn2J,MAAKo2J,iBAAmBp2J,KAAKo2J,gBAAgB14J,KAAK,WAAA,GACjDi0B,GAAOj7B,EAAEsJ,MACTs2J,EAAc3kI,EAAKn2B,KAAK,aACxB86J,GACA3kI,EAAKzuB,KAAK,cAAeozJ,GAEzB3kI,EAAKvM,WAAW,kBAI5BiwI,YAAa,SAAUptJ,GACnBA,EAAE9D,iBACFnE,KAAKs8E,SAETg5E,iBAAkB,SAAUrtJ,IACpB4qJ,EAAiB5qJ,IAAMA,EAAEmuB,SAAWzU,EAAKM,MACzCjiB,KAAKs8E,SAGbrE,SAAU,SAAUhwE,GAChB,GAAIrB,GAAO5G,KAAMI,EAAUwG,EAAKxG,QAASg2B,EAAUnuB,EAAEmuB,OACjDA,IAAWzU,EAAKM,MAAQrb,EAAKs2E,UAAY98E,EAAQg1J,UACjDxuJ,EAAK01E,SAGbs4E,cAAe,WACX,GAAIhuJ,GAAO5G,KAAM67D,EAAUj1D,EAAK7O,QAASqI,EAAUwG,EAAKxG,QAAS/B,EAAQnG,EAAMC,QAAQkG,MAAMw9D,GAAUk6F,EAAWr/J,EAAE4qF,EAAUy0E,SAAS31J,IAAWm2J,EAAkBR,EAASzuI,KAAK,qBAAsBkvI,GAAW36F,EAAQh4C,IAAM3rB,EAAMyrB,QAAU,SAAUtqB,EAAU3C,EAAEkQ,EAAK+tJ,gBAAgBv0J,GAC5R/G,GAAQ+H,YAAY,QAAS/C,GAC7Bw9D,EAAQvhE,SAASk5J,GACjB5sJ,EAAKkwB,SAASgtB,OAAOzqD,GACjB+G,EAAQg1J,YAAa,IACjBh1J,EAAQi6B,SAAU,EAClBk8H,EAAgBzyG,OAAOw9B,EAAUhF,MAAMl8E,IAEvC/G,EAAQyqD,OAAOw9B,EAAUhF,MAAMl8E,KAGnCA,EAAQi6B,SAAU,GAClBhhC,EAAQyqD,OAAOiyG,GACfA,EAAS7yJ,KAAK,KAAMszJ,GACpBn9J,EAAQ6J,KAAK,kBAAmBszJ,IAEhCn9J,EAAQiB,SAASo5J,GAErBr6J,EAAQyqD,OAAO+X,GACXz7D,EAAQy7D,UACR3jE,EAAM4tB,QAAQ+1C,EAAQlhE,YACtBkhE,EAAQn5D,KAAKtC,EAAQy7D,UAErBz7D,EAAQq2J,QAAQ7+J,QAChBgP,EAAK8vJ,iBAAiBr9J,IAG9Bq9J,iBAAkB,SAAUr9J,GAAV,GACVs9J,GAAkD,cAA9B32J,KAAKI,QAAQw2J,aACjCA,EAAeD,EAAoB,YAAc,SACjDd,EAAYn/J,EAAE4qF,EAAUu0E,WAAYe,aAAcA,IACtD52J,MAAK62J,YAAYhB,GACbc,GACA32J,KAAK82J,qBAAqBjB,GAE9Bx8J,EAAQyqD,OAAO+xG,IAEnBgB,YAAa,SAAUhB,GAAV,GAC+Nl/H,GAAQvB,EACvOt6B,EAGDi8J,EAJJnwJ,EAAO5G,KAAM4yC,EAAIhsC,EAAKxG,QAAS42J,EAAchxJ,EAAMY,EAAKqwJ,aAAcrwJ,GAAOswJ,EAAmBlxJ,EAAMY,EAAKuwJ,kBAAmBvwJ,GAAO6vJ,EAAU7vJ,EAAKxG,QAAQq2J,QAAS7+J,EAAS6+J,EAAQ7+J,OAAQw/J,EAAa9W,EAAiB1oJ,CAChO,KAASkD,EAAI,EAAGA,EAAIlD,EAAQkD,IACxB67B,EAAS8/H,EAAQ37J,GACjBs6B,EAAOxuB,EAAKywJ,sBAAsB1gI,GAC9BogI,EAAMrgK,EAAE4qF,EAAU3qD,OAAOA,IAASlO,YAAYo2C,GAAIn8D,KAAK0yB,GAAM0B,SAAS++H,GAAWr6J,KAAK,SAAUm7B,EAAOA,QAAQjxB,GAAG,QAASsxJ,GAAatxJ,GAAG,UAAWwxJ,GACnI,cAAnBtkH,EAAEgkH,cACFG,EAAI9+J,IAAIg5D,EAAOmmG,EAAa,MAIxCC,sBAAuB,SAAU1gI,GAC7B,GAAIvB,GAAOuB,EAAOvB,IAClB,OAAOA,GAAO3yB,EAAS2yB,GAAMp1B,KAAKI,SAAW,IAEjD02J,qBAAsB,SAAUjB,GAC5B,GAAIjvJ,GAAO5G,KAAMI,EAAUwG,EAAKxG,QAASk3J,EAAazB,EAAUl7J,SAAS28E,EAAU,SAAU7xD,EAActjB,WAAWm1J,EAAW,GAAGx9J,MAAMm3D,IAASrgC,EAAa0vH,EAAiBlgJ,EAAQq2J,QAAQ7+J,OAAS6tB,CACtMmL,GAAa,GACb0mI,EAAWr/J,IAAIg5D,EAAOxrC,EAAcmL,EAAa,MAGzD3L,UAAW,SAAU7E,GAAV,GAMHsgE,GALA95E,EAAO5G,KACP3G,EAAUuN,EAAKvN,QACfk+J,EAAWl+J,EAAQiuB,KAAKisI,GACxBiE,EAAgBn+J,EAAQiuB,KAAKusI,EAAe,IAAMv8E,EACtDtyE,GAAOf,GAAGghB,UAAU9c,KAAKnI,KAAMogB,GAC3BsgE,EAAWtgE,EAAOld,KAAK,YAC3Bq0J,EAASr0J,KAAK,WAAYw9E,GAC1B82E,EAAct0J,KAAK,WAAYw9E,IAEnCu2E,aAAc,SAAUhvJ,GACpBjI,KAAKy3J,cAAcxvJ,EAAE22B,gBAEzBu4H,kBAAmB,SAAUlvJ,GACrB4qJ,EAAiB5qJ,GACjBjI,KAAKy3J,cAAcxvJ,EAAE22B,eACd32B,EAAEmuB,SAAWzU,EAAKM,KACzBjiB,KAAKs8E,SAGbm7E,cAAe,SAAUr3I,GAAV,GAKPuW,GAAmC+gI,EAJnC9wJ,EAAO5G,IACP4G,GAAKs2E,WAGLvmD,EAASjgC,EAAE0pB,GAAQ5kB,KAAK,UAAWk8J,EAAex7J,EAAWy6B,IAAWA,GAASzuB,OAAQtB,OAAY,EACpG8wJ,GACD9wJ,EAAK01E,UAGbD,KAAM,WAAA,GAC2G45E,GAAS0B,EActGC,EAdZhxJ,EAAO5G,KAAM3G,EAAUuN,EAAKvN,QAASw+J,EAAc73J,KAAK83J,kBAAkB/8E,GAAO36E,EAAUwG,EAAKxG,OA8BpG,OA7BAJ,MAAKi1J,mBACAruJ,EAAKoB,QAAQ+yE,KACVn0E,EAAKs2E,UACL7jF,EAAQsmB,WAAU,GAAM,GAE5B/Y,EAAKs2E,UAAW,EAChBt2E,EAAKouJ,UACL50J,EAAQoD,SAAU,EACdpD,EAAQ28E,QACR46E,IAAuB/wJ,EAAKmxJ,UAAUngK,OACtCq+J,EAAUrvJ,EAAKsuJ,SAASyC,GACxB1B,EAAQt2I,WAAU,GAAM,GACpBk4I,EAAYx3J,UAAYnI,EAAM6H,QAAQi4J,OAASL,GAC3CC,EAAY1/J,EAAM+H,GAAGg2J,GAASgC,SAClCL,EAAUv3J,SAASw3J,EAAYx3J,UAAY,GAC3Cu3J,EAAUvnG,SAAS,IACnBunG,EAAU/gG,QAEVo/F,EAAQh+J,IAAI,UAAW,IAE3Bg+J,EAAQj8J,QAEZX,EAAQW,OAAO2lB,YAAYI,cACvBhgB,QAAS83J,EAAY93J,QACrBM,SAAUw3J,EAAYx3J,SACtBE,SAAUyF,EAAMY,EAAKsxJ,kBAAmBtxJ,KAE5CvN,EAAQW,QAEL4M,GAEXkxJ,kBAAmB,SAAUj0I,GAAV,GACXu4D,GAAYp8E,KAAKI,QAAQg8E,UACzB+7E,GACA97E,MAAQt8E,YACRu8E,OACIx7E,MAAM,EACNf,YAGR,OAAOq8E,IAAaA,EAAUv4D,IAAOs0I,EAAet0I,IAExDq0I,kBAAmB,WACXl4J,KAAKI,QAAQ28E,OACb/8E,KAAKm1J,eAETn1J,KAAKgI,QAAQqzD,IAEjB45F,iBAAkB,WACTtsC,EAAQ3oH,KAAKo4J,sBACdp4J,KAAKo4J,oBAAqB,EAC1Bp4J,KAAKgI,QAAQmsJ,KAGrBa,QAAS,WACL,GAAIpuJ,GAAO5G,KAAM3G,EAAUuN,EAAKvN,QAAS8+D,GAAU9+D,EAAQpB,IAAI60I,GAASurB,EAAiBlgG,CAazF,OAZAvxD,GAAK43B,SACL9nC,EAAE48J,GAAS51J,KAAK,SAAU5C,EAAG/C,GACzB,GAAIugK,GAAe5hK,EAAEqB,GAAUwgK,EAAYD,EAAargK,IAAI60I,EACvDr3H,OAAM8iJ,KACPpgG,EAASv5D,KAAKlG,KAAK6/J,EAAWpgG,QAGjC9+D,EAAQ,GAAGS,MAAMq+D,QAAUkgG,EAAiBlgG,IAC7C9+D,EAAQpB,IAAI60I,EAAQ30E,EAAS,GAEjCvxD,EAAK7O,QAAQuvB,KAAK,gBAAgBY,SAClC7uB,EAAU,KACHuN,GAEX01E,MAAO,WAGH,MAFAt8E,MAAKu5G,QAAO,GACZv5G,KAAKw4J,sBACEx4J,MAEXu5G,OAAQ,SAAUk/C,GACd,GAAI7xJ,GAAO5G,KAAM3G,EAAUuN,EAAKvN,QAAS+G,EAAUwG,EAAKxG,QAASy3J,EAAc73J,KAAK83J,kBAAkB,QAASY,EAAc14J,KAAK83J,kBAAkB,QACpJ,IAAIz+J,EAAQU,GAAG0hF,KAAa70E,EAAKoB,QAAQgzE,GAASue,eAAgBk/D,IAAoB,CAClF,GAAI7xJ,EAAKs2E,SACL,MAEJt2E,GAAKs2E,UAAW,EAChB98E,EAAQoD,SAAU,EAClBxD,KAAK24J,iBACLt/J,EAAQsmB,YAAYI,cAChBhgB,QAAS24J,EAAY34J,SAAW83J,EAAY93J,QAC5CO,QAASo4J,EAAYp4J,WAAY,EACjCD,SAAUq4J,EAAYr4J,SACtBE,SAAUyF,EAAMhG,KAAK44J,mBAAoB54J,QAGjD,MAAO4G,IAEX43B,OAAQ,WACJx+B,KAAK00J,UACL10J,KAAK64J,mBAETnE,QAAS,WACL,GAAI9tJ,GAAO5G,KAAM3G,EAAUuN,EAAKvN,QAASy/J,EAAiBpiK,EAAEC,QAASgJ,EAAY,EAAGvB,EAAa,EAAG26J,EAAU36J,EAAaQ,KAAKlG,IAAI,GAAIogK,EAAe7/J,QAAUI,EAAQJ,SAAW,GAAI+/J,EAASr5J,EAAYf,KAAKlG,IAAI,GAAIogK,EAAe5/J,SAAWG,EAAQH,SAAWmZ,SAAShZ,EAAQpB,IAAI,cAAe,KAAO,EAKlT,OAJAoB,GAAQpB,KACJU,KAAMogK,EACNz5J,IAAK05J,IAEFpyJ,GAEXiyJ,gBAAiB,WACT74J,KAAKi5J,eAGT/gK,EAAMuxB,SAASzpB,KAAKy0J,iBACpBz0J,KAAKi5J,cAAe,IAExBT,oBAAqB,WACjBtgK,EAAMyxB,aAAa3pB,KAAKy0J,iBACxBz0J,KAAKi5J,cAAe,GAExBN,eAAgB,WAAA,GACRO,GAASl5J,KAAK+3J,UACd33J,EAAUJ,KAAKI,QACf+4J,EAAc/4J,EAAQ28E,QAAUm8E,EAAOthK,MACvCuhK,GACAn5J,KAAKk1J,UAAS,GAAOhtI,SACdgxI,EAAOthK,QACdoI,KAAKo5J,QAAQF,EAAO5pI,QAAQ4lI,UAAS,IAG7C0D,mBAAoB,WAAA,GAMRS,GALJzyJ,EAAO5G,IACX4G,GAAKs2E,UAAW,EAChBt2E,EAAKvN,QAAQyH,OAAO7I,IAAI,UAAW,IACnC2O,EAAKoB,QAAQszD,GACT10D,EAAKxG,QAAQ28E,QACTs8E,EAAYzyJ,EAAKwyJ,QAAQxyJ,EAAKmxJ,UAAUzoI,QACxC+pI,GACAA,EAAUrE,YAItB+C,QAAS,WAAA,GACDnxJ,GAAO5G,KACPs5J,EAAS5iK,EAAE48J,GAASzvJ,OAAO,WAAA,GACvBwlD,GAAM3yD,EAAEsJ,MACR+yC,EAASnsC,EAAKwyJ,QAAQ/vG,GACtBjpD,EAAU2yC,GAAUA,EAAO3yC,OAC/B,OAAOA,IAAWA,EAAQ28E,OAASn2E,EAAKxG,QAAQ02B,UAAY12B,EAAQ02B,UAAY12B,EAAQoD,SAAW6lD,EAAItvD,GAAG0hF,KAC3Gz9D,KAAK,SAAUpb,EAAGC,GACjB,OAAQnM,EAAEkM,GAAG3K,IAAI,WAAavB,EAAEmM,GAAG5K,IAAI,WAG3C,OADA2O,GAAO,KACA0yJ,GAEXF,QAAS,SAAUrhK,GAAV,GACD8jE,GAAU9jE,EAAQ4C,SAAS84J,GAC3BzwJ,EAAS9K,EAAMuvB,eAAeo0C,EAClC,OAAI74D,GACOA,EAEJpM,GAEXkvB,QAAS,WACL,GAAIlf,GAAO5G,IACX4G,GAAKof,WACLhhB,EAAOf,GAAG6hB,QAAQ3d,KAAKvB,GACvBA,EAAKvN,QAAQ6uB,SACbthB,EAAKvN,QAAUuN,EAAK7O,QAAUrB,KAElCsvB,SAAU,WAAA,GACFpf,GAAO5G,KACPiC,EAAK,IAAM48D,CACfj4D,GAAKvN,QAAQuwB,IAAI3nB,GACjB2E,EAAK7O,QAAQ6xB,IAAI3nB,GACjB2E,EAAKvN,QAAQiuB,KAAKisI,EAAa,IAAMM,EAAe,MAAQv8E,GAAS1tD,IAAI3nB,GACzE2E,EAAK4xJ,uBAETn+H,MAAO,SAAU33B,GACb,GAAIkE,GAAO5G,KAAM3G,EAAUuN,EAAKvN,QAAS+G,EAAUwG,EAAKxG,QAAS21J,EAAW18J,EAAQsB,SAASi5J,GAAkBv5H,EAAQ07H,EAASp7J,SAASg5J,GAAe4F,EAAcrhK,EAAMqJ,WAAWmB,EACvL,OAAK3H,WAAUnD,QAGX8K,KAAS,GACTqzJ,EAAS7tI,SACT7uB,EAAQiB,SAASo5J,KAEZqC,EAASn+J,SACVm+J,EAAWr/J,EAAE4qF,EAAUy0E,SAAS31J,IAAU6nB,UAAU5uB,GACpDghC,EAAQ07H,EAASp7J,SAASg5J,GAC1Bt6J,EAAQsxD,YAAY+oG,IAExBr5H,EAAM33B,KAAK62J,IAEf3yJ,EAAKxG,QAAQi6B,MAAQk/H,EACd3yJ,GAdIyzB,EAAM33B,QAgBrBm5D,QAAS,SAAUn5D,EAAMlH,GACrB,GAAIoL,GAAO5G,KAAM67D,EAAUj1D,EAAKvN,QAAQsB,SAAS84J,EACjD,OAAK9qC,GAAQjmH,IAGb1C,KAAK8kB,QAAQ,UAAW,WACpB,OAASyB,SAAUs1C,EAAQlhE,cAE/BzC,EAAM4tB,QAAQ+1C,EAAQlhE,YACtBkhE,EAAQn5D,KAAKA,GACb1C,KAAK8kB,QAAQ,UAAW,WAAA,GAEXhqB,GADL8H,IACJ,KAAS9H,EAAI+gE,EAAQjkE,SAAUkD,GAAK,GAChC8H,EAAEkF,MAAO2e,SAAUjrB,GAEvB,QACI+qB,SAAUs1C,EAAQlhE,WAClBa,KAAMoH,KAGdgE,EAAKxG,QAAQy7D,QAAUn5D,EAChBkE,GAlBIi1D,EAAQn5D,QAoBvByyJ,aAAc,WACNn1J,KAAK60J,eACL70J,KAAK+3E,OAAO/3E,KAAK60J,eAErB70J,KAAK+0J,YAAY90E,QAErBlI,OAAQ,SAAUpmD,GACVA,GACAA,EAAK4C,SAGb7sB,QACIysJ,EACAp5E,EACAC,EACA3f,EACAC,GAEJl7D,SACIi6B,MAAO,GACPu8H,aAAc,YACdH,WACA15E,OAAO,EACP9jF,MAAO,KACPC,OAAQ,KACRi/F,SAAU,EACVwvD,UAAW,EACXlO,SAAUmZ,EAAAA,EACVhf,UAAWgf,EAAAA,EACX/2F,QAAS,KACTr4D,QAAS,KACTszB,SAAUykD,EACV65E,UAAU,KAGdoE,EAASjF,EAAW7zJ,QACpBN,SACI8O,KAAM,SACNwS,UAAY46D,MAAO,WAG3BpkF,GAAMmpB,GAAG8G,OAAOqxI,GACZ1G,EAAWyB,EAAW7zJ,QACtB8zJ,MAAO,SAAUz8J,EAASqI,GACtB,GAAIwG,GAAO5G,IACX4G,GAAK+tJ,gBAAkBrzE,EAAUm4E,aACjCr5J,EAAQy0J,cAAgB,KACxBjuJ,EAAK8yJ,iBAAiB3hK,GACtBw8J,EAAWtwJ,GAAGuwJ,MAAMrsJ,KAAKvB,EAAM7O,EAASqI,GACxCwG,EAAKQ,KAAKk0D,EAAMt1D,EAAMY,EAAKkf,QAASlf,IACpCA,EAAK+yJ,mBACL/yJ,EAAKgzJ,cAETF,iBAAkB,SAAU3hK,GACxB,GAAI45B,GAAOj7B,EAAEqB,EACR45B,GAAKzuB,KAAK,OACXyuB,EAAKzuB,KAAK,KAAMhL,EAAMyrB,OAAS,aAGvCg2I,iBAAkB,WACd35J,KAAK3G,QAAQ6J,KAAK,mBAAoBlD,KAAKjI,QAAQmL,KAAK,QAE5D02J,WAAY,WACR,GAAIhnH,GAAI5yC,KAAKI,OACbJ,MAAK60J,cAAgB70J,KAAK65J,oBACtB75J,KAAK60J,eAAiBjiH,EAAEpvC,SAAWovC,EAAEmqC,OACrC/8E,KAAKm1J,gBAGb0E,kBAAmB,WACf,MAAO75J,MAAK3G,QAAQiuB,KAAKusI,EAAe,MAAQv8E,GAAS,IAE7Dl3E,SACIi6B,MAAO1jC,OAAO+kB,SAASud,KACvBm8H,UAAU,EACV1zI,SAAUA,KAGdqxI,EAAQD,EAASpyJ,QACjB8zJ,MAAO,SAAUz8J,EAASqI,GACtB,GAAIwG,GAAO5G,IACX8yJ,GAAS7uJ,GAAGuwJ,MAAMrsJ,KAAKvB,EAAM7O,EAASqI,GACtCwG,EAAKvN,QAAQiB,SAASw5J,IAE1B1zJ,SACI8O,KAAM,QACN6tE,OAAO,EACP05E,UAAYrhI,KAAM,4BAG1Bl9B,EAAMmpB,GAAG8G,OAAO4qI,GACZC,EAAa,SAAU59H,GACvB,MAAO1+B,GAAE4qF,EAAUw4E,OAAO9G,YAAan3F,QAASzmC,IAAQ55B,KAAK,cAAc6gF,QAE3E42E,EAAUH,EAASpyJ,QACnB8zJ,MAAO,SAAUz8J,EAASqI,GACtB,GAAIwG,GAAO5G,IACX8yJ,GAAS7uJ,GAAGuwJ,MAAMrsJ,KAAKvB,EAAM7O,EAASqI,GACtCwG,EAAKvN,QAAQiB,SAASy5J,GACtBntJ,EAAK5H,OAAStI,EAAEylD,YAEpB/7C,SACI8O,KAAM,UACN6tE,OAAO,EACP05E,UAEQrhI,KAAM,uBACNk2D,SAAS,EACT30D,OAAQ,SAAU1uB,GACdA,EAAEC,OAAOlJ,OAAOo9C,aAIpBhnB,KAAM,uBACNuB,OAAQ,SAAU1uB,GACdA,EAAEC,OAAOlJ,OAAOsgD,eAMpCpnD,EAAMmpB,GAAG8G,OAAO8qI,GACZC,EAAe,SAAU99H,GACzB,GAAI2kI,GAAgBrjK,EAAE4qF,EAAU04E,SAAS9G,cAAer3F,QAASzmC,IAAQ55B,KAAK,gBAAgB6gF,MAC9F,OAAO09E,GAAc/6J,QAErBm0J,EAASL,EAASpyJ,QAClB8zJ,MAAO,SAAUz8J,EAASqI,GACtB,GAAIwG,GAAO5G,IACX8yJ,GAAS7uJ,GAAGuwJ,MAAMrsJ,KAAKvB,EAAM7O,EAASqI,GACtCwG,EAAKvN,QAAQiB,SAAS05J,GACtBptJ,EAAKqzJ,gBACLrzJ,EAAK5H,OAAStI,EAAEylD,YAEpB89G,cAAe,WACX,GAAIr8J,GAAQoC,KAAKI,QAAQxC,MAAOs8J,EAAkBxjK,EAAE4qF,EAAU64E,qBAAqBn6J,KAAKI,UAAU0hE,YAAY9hE,KAAKjI,QAC/G6F,IACAs8J,EAAgBv/J,SAASs5J,GAAUnnH,IAAIlvC,GAE3CoC,KAAK60J,cAAgB70J,KAAK65J,oBAC1B75J,KAAKm1J,gBAET0E,kBAAmB,WACf,MAAO75J,MAAK3G,QAAQiuB,KAAK2sI,GAAU,IAEvC7zJ,SACI8O,KAAM,SACN6tE,OAAO,EACPn/E,MAAO,GACP64J,UAEQrhI,KAAM,uBACNk2D,SAAS,EACT30D,OAAQ,SAAU1uB,GACd,GAAIC,GAASD,EAAEC,OAAQtK,EAAQsK,EAAO7O,QAAQiuB,KAAK2sI,GAAUnnH,KAC7D5kC,GAAOlJ,OAAOo9C,QAAQx+C,MAI1Bw3B,KAAM,uBACNuB,OAAQ,SAAU1uB,GACd,GAAIC,GAASD,EAAEC,OAAQtK,EAAQsK,EAAO7O,QAAQiuB,KAAK2sI,GAAUnnH,KAC7D7kC,GAAEC,OAAOlJ,OAAOsgD,OAAO1hD,SAM3C1F,EAAMmpB,GAAG8G,OAAOgrI,GACZC,EAAc,SAAUh+H,EAAMx3B,GAC9B,GAAIw8J,GAAe1jK,EAAE4qF,EAAU+4E,QAAQjH,aACnCv3F,QAASzmC,EACTx3B,MAAOA,IACRpC,KAAK,eAAe6gF,MACvB,OAAO+9E,GAAap7J,QAExBsiF,GACIjoF,QAASoJ,EAAS,4DAClBk0B,OAAQl0B,EAAS,wGACjBszJ,SAAUtzJ,EAAS,kLACnB65E,MAAO75E,EAAS,0OAChBozJ,UAAWpzJ,EAAS,+GACpBwzJ,QAAS,4BACTwD,aAAch3J,EAAS,iEACvBq3J,MAAO,UACPE,QAAS,UACTK,OAAQ,UACRF,qBAAsB13J,EAAS,2JAEnCvK,EAAM4hK,MAAQ9G,EACd96J,EAAM8hK,QAAU9G,EAChBh7J,EAAMmiK,OAASjH,GACjBz8J,OAAOuB,MAAM2sB,QACRluB,OAAOuB,OACE,kBAAVzB,SAAwBA,OAAOgiC,IAAMhiC,OAAS,SAAUiiC,EAAIC,EAAIC,IACrEA,GAAMD,OAEV,SAAUniC,EAAGC,QACVA,OAAO,gBACH,oBACA,eACDD,IACL,WAonCE,MAnmCC,UAAUE,EAAGE,GAEV,QAAS+xH,GAAQ11F,GACb,MAAmB,KAALA,EAElB,QAASw/H,GAAU70J,EAAO80J,EAAKC,GAC3B,MAAO/zJ,MAAKlG,IAAIkG,KAAKoT,IAAIK,SAASzU,EAAO,IAAK+0J,IAASC,EAAAA,EAAWD,EAAOtgJ,SAASsgJ,EAAM,KAAMtgJ,SAASqgJ,EAAK,KAEhH,QAAS4H,KACL,OAAQt6J,KAAKd,MAAQc,KAAKd,KAAKpC,cAAcoB,QAAQ,WAAa,EA23BtE,QAASq8J,GAAe9qC,GACpB,GAAI7oH,GAAO5G,IACX4G,GAAKuoH,MAAQM,EACb7oH,EAAK4zJ,kBAAmB,EACxB5zJ,EAAK85H,WAAa,GAAIp8D,GAAUmrD,EAAIp2H,SAChCwK,OAAQ,IAAM42J,EACd3sH,MAAO2hF,EAAIp2H,QAAQwqB,GAAK,YACxB2sD,UAAWxqE,EAAMY,EAAK4pE,UAAW5pE,GACjC0pE,KAAMtqE,EAAMY,EAAK0pE,KAAM1pE,GACvB6pE,QAASzqE,EAAMY,EAAK6pE,QAAS7pE,KAEjCA,EAAK85H,WAAW3/F,WAAW35B,KAAK,QAASpB,EAAMY,EAAK8zJ,WAAY9zJ,IAChEA,EAAK85H,WAAW3/F,WAAW35B,KAAK,UAAWpB,EAAMY,EAAK+zJ,cAAe/zJ,IAEzE,QAASg0J,GAAYxmG,GAKjB,IALJ,GAQYymG,GACAC,EARJ97J,GACIM,IAAK80D,EAAKwjC,UACVj/F,KAAMy7D,EAAK2mG,YACZnhK,EAASw6D,EAAKorB,aACd5lF,GACHoF,EAAOM,KAAO1F,EAAOg+F,UACrB54F,EAAOrG,MAAQiB,EAAOmhK,WAClBF,EAAkBnkK,EAAEkD,GAAQ3B,IAAI,aAChC6iK,EAAkBpkK,EAAEkD,GAAQ3B,IAAI,aACZ,SAApB6iK,GAAkD,WAApBA,IAC9B97J,EAAOM,KAAO1F,EAAO+F,WAED,SAApBk7J,GAAkD,WAApBA,IAC9B77J,EAAOrG,MAAQiB,EAAOwE,YAE1BxE,EAASA,EAAO4lF,YAEpB,OAAOxgF,GA2GX,QAASg8J,GAAevrC,EAAK1B,GACzB,GAAInnH,GAAO5G,IACX4G,GAAKuoH,MAAQM,EACb7oH,EAAK4zJ,kBAAmB,EACxB5zJ,EAAK85H,WAAa,GAAIp8D,GAAUmrD,EAAIp2H,SAChCwK,OAAQkqH,EACRjgF,MAAO2hF,EAAIp2H,QAAQwqB,GAAK,UACxB2sD,UAAWxqE,EAAMY,EAAK4pE,UAAW5pE,GACjC0pE,KAAMtqE,EAAMY,EAAK0pE,KAAM1pE,GACvB6pE,QAASzqE,EAAMY,EAAK6pE,QAAS7pE,GAC7B2pE,WAAYvqE,EAAMY,EAAK2pE,WAAY3pE,KAEvCA,EAAK85H,WAAW3/F,WAAWrW,iBAAkB,EA3hCpD,GACOxyB,GAAQvB,OAAOuB,MAAO8M,EAAS9M,EAAMmpB,GAAGrc,OAAQ81E,EAAa5iF,EAAMmpB,GAAG06D,MAAMjB,WAAYxW,EAAYpsE,EAAMmpB,GAAGijD,UAAW37B,EAAgBjyC,EAAEiyC,cAAen2B,EAAgBta,EAAMqa,eAAgB/Y,EAAatB,EAAMuB,YAAaC,EAAcxB,EAAMyB,aAAcqM,EAAQtP,EAAEsP,MAAOtF,EAAShK,EAAEgK,OAAQhD,EAAOhH,EAAEgH,KAAM+E,EAAWvK,EAAMuK,SAAU84E,EAAO,OAAmB1c,EAAK,eAAgBy0F,EAAU,YAAa2H,EAAe,kBAAmBC,EAAkBD,EAAe,MAAOE,EAAiB,oBAAqBV,EAAuB,mBAAoBvG,EAAW,aAAcnvE,EAAgB,kBAAmBwM,EAAU,cAAe6pE,EAAc,gBAAiBC,EAAgB,kBAAmBC,EAAiB,qBAAsB7/E,EAAU,WAAYvoB,EAAS,SAAUqoG,EAAS,SAAUxgF,EAAO,OAAQG,EAAW,WAAYD,EAAa,aAAcD,EAAQ,QAASwgF,EAAU,UAAWC,EAAW,WAAYC,EAAW,WAAYC,EAAc,cAAehwF,EAAS,SAAUoE,EAAY,YAAapL,EAAY,YAAaE,EAAU,UAAWvyB,EAAQ,QAAS+gB,EAAW,WAAYy5E,EAAS,SAAU8uB,EAAoB,gFAAiFC,EAAO,WAAYC,EAAS,aAAcC,GAAYF,EAAO,IAAMC,EAAQE,GAAmB,sCAAuCC,GAAc,kCAAmCC,GAAO,aAAch5I,GAAahrB,EAAMgrB,WAUp7Ci5I,GAASn3J,EAAOtE,QAChBC,KAAM,SAAU5I,EAASqI,GACrB,GAAiB/G,GAAsB6zE,EAAY7tD,EAASg3C,EAA6BwF,EAASugG,EAAwFv4I,EAAtLjd,EAAO5G,KAAeZ,KAA4Cy/I,GAAY,EAA+Bwd,EAAkBj8J,GAAWA,EAAQq2J,UAAYr2J,EAAQq2J,QAAQ7+J,MAClLoN,GAAOf,GAAGtD,KAAKwH,KAAKvB,EAAM7O,EAASqI,GACnCA,EAAUwG,EAAKxG,QACfi2D,EAAWj2D,EAAQi2D,SACnBt+D,EAAU6O,EAAK7O,QACf8jE,EAAUz7D,EAAQy7D,QACdwgG,IACAj8J,EAAQq2J,YAEZ7vJ,EAAKkwB,SAAWpgC,EAAE0J,EAAQ02B,UACtB+kC,IAAYlzB,EAAckzB,KAC1BA,EAAUz7D,EAAQy7D,SAAY14C,IAAK04C,IAEvC9jE,EAAQuvB,KAAK,UAAUzjB,OAAOy2J,GAAkBpyI,SAC3CnwB,EAAQ6B,SAASG,GAAG6M,EAAKkwB,WAAcu/B,EAAS/2D,MAAQ1I,GAAay/D,EAAS19D,OAAS/B,IACpFmB,EAAQgC,GAAG0hF,IACXr8E,EAASrH,EAAQqH,SACjBy/I,GAAY,IAEZ3xE,EAAan1E,EAAQE,IAAI,cACzBonB,EAAUtnB,EAAQE,IAAI,WACtBF,EAAQE,KACJi1E,WAAYha,EACZ7zC,QAAS,KAEbjgB,EAASrH,EAAQqH,SACjBrH,EAAQE,KACJi1E,WAAYA,EACZ7tD,QAASA,KAGbg3C,EAAS/2D,MAAQ1I,IACjBy/D,EAAS/2D,IAAMF,EAAOE,KAEtB+2D,EAAS19D,OAAS/B,IAClBy/D,EAAS19D,KAAOyG,EAAOzG,OAG1BgwH,EAAQvoH,EAAQoD,UAAgC,OAApBpD,EAAQoD,UACrCpD,EAAQoD,QAAUzL,EAAQgC,GAAG0hF,IAEjCpiF,EAAUuN,EAAKvN,QAAUtB,EAAQkgB,QAAQq7I,GACpCv7J,EAAQgC,GAAG,eAAkBV,EAAQ,KACtCtB,EAAQuC,SAAS,8BACjBsM,EAAK01J,cAAcvkK,EAASqI,GAC5B/G,EAAUuN,EAAKvN,QAAUtB,EAAQkgB,QAAQq7I,GACzC1sJ,EAAKkuJ,eAETluJ,EAAKupE,YACDtU,GACAj1D,EAAK4Q,QAAQqkD,GAEbz7D,EAAQoD,SACRoD,EAAKouJ,UAEToH,EAAgB/iK,EAAQsB,SAASwgK,GACjCv0J,EAAKqe,UAAUm3I,GACXh8J,EAAQoD,SAAWpD,EAAQ28E,OAC3Bn2E,EAAKsuJ,SAAS77J,EAAQU,GAAG0hF,IAAUxjF,KAAMwgE,QAAS,KAEtDp/D,EAAQqM,GAAG,aAAem5D,EAAIm9F,GAAkBh2J,EAAMY,EAAK21J,aAAc31J,IAAOlB,GAAG,aAAem5D,EAAIm9F,GAAkBh2J,EAAMY,EAAK41J,aAAc51J,IAAOlB,GAAG,QAAUm5D,EAAI,KAAOm9F,GAAkBh2J,EAAMY,EAAK61J,qBAAsB71J,IACnOw1J,EAAc12J,GAAG,UAAYm5D,EAAI74D,EAAMY,EAAKqxE,SAAUrxE,IAAOlB,GAAG,QAAUm5D,EAAI74D,EAAMY,EAAKmxE,OAAQnxE,IAAOlB,GAAG,OAASm5D,EAAI74D,EAAMY,EAAKoxE,MAAOpxE,IAC1I5G,KAAKiuJ,aACLjuJ,KAAK0gI,aACDtgI,EAAQuhF,QACR/6E,EAAK68E,MAET5/D,EAAK9rB,EAAQmL,KAAK,MACd2gB,IACAA,GAAU,aACVxqB,EAAQsB,SAASugK,GAAiBvgK,SAASsgK,GAAc/3J,KAAK,KAAM2gB,GACpEu4I,EAAcl5J,MACV6gB,KAAQ,SACR24I,kBAAmB74I,KAG3BxqB,EAAQiI,IAAIjI,EAAQsB,SAAS,oBAAsBugK,IAAkBx1J,GAAG,YAAcm5D,EAAI74D,EAAMY,EAAKouJ,QAASpuJ,IAC9GA,EAAKwiB,cAAgBlxB,EAAMkxB,cAAcrxB,GACzC6O,EAAK8mF,eAAiB1nF,EAAMY,EAAK+1J,kBAAmB/1J,GACpDA,EAAKkyI,QAAU5gJ,EAAMyrB,OAAOpsB,UAAU,EAAG,GACzCb,EAAEC,QAAQ+O,GAAG,SAAWm5D,EAAKj4D,EAAKkyI,QAASlyI,EAAK8mF,gBAC5CttF,EAAQoD,UACRoD,EAAKoB,QAAQ+yE,GACbn0E,EAAKoB,QAAQkzE,IAEjBhjF,EAAM0uB,OAAOhgB,GACT5G,KAAKI,QAAQ28E,QACb/8E,KAAK+0J,YAAc,GAAIj6E,GAAWzhF,GAClC2G,KAAK+0J,YAAY90E,OACjBjgF,KAAK+0J,YAAY30E,WAAa,WAC1B,MAAOg8E,GAAc5gK,KAAK,cAItC+gK,aAAc,SAAUt0J,GACpBvR,EAAEuR,EAAE22B,eAAetkC,SAAS8gK,IAEhCoB,aAAc,SAAUv0J,GACpBvR,EAAEuR,EAAE22B,eAAe+rB,YAAYywG,IAEnCrjF,OAAQ,WACJ/3E,KAAK3G,QAAQiB,SAAS+gK,IAE1BrjF,MAAO,WACHh4E,KAAK3G,QAAQsxD,YAAY0wG,IAE7BvG,YAAa,WAAA,GAaAh6J,GACD8C,EAbJvE,EAAU2G,KAAK3G,QACf+G,EAAUJ,KAAKI,QACfnH,EAAQmH,EAAQnH,MAChBC,EAASkH,EAAQlH,OACjB06I,EAAYxzI,EAAQwzI,UACpBhuH,GACA,WACA,YACA,WACA,YAGJ,KADA5lB,KAAKq6B,MAAMj6B,EAAQi6B,OACVv/B,EAAI,EAAGA,EAAI8qB,EAAWhuB,OAAQkD,IAC/B8C,EAAQwC,EAAQwlB,EAAW9qB,KAAO,GAClC8C,GAASg1J,EAAAA,GACTv5J,EAAQpB,IAAI2tB,EAAW9qB,GAAI8C,EAG/Bg2I,IAAagf,EAAAA,GACb5yJ,KAAKjI,QAAQE,IAAI,YAAa27I,GAI1Bv6I,EAAQJ,MAFZA,GACIA,GAAAA,GAAiBiF,QAAQ,KAAO,EAClBjF,EAEAw5J,EAAUx5J,EAAOmH,EAAQ+3F,SAAU/3F,EAAQq5I,UAG/C,IAIVpgJ,EAAQH,OAFZA,GACIA,GAAAA,GAAkBgF,QAAQ,KAAO,EAClBhF,EAEAu5J,EAAUv5J,EAAQkH,EAAQunJ,UAAWvnJ,EAAQwzI,WAGjD,IAEdxzI,EAAQoD,SACTnK,EAAQyH,QAGhBqvE,UAAW,WACP,GAAI92E,GAAU2G,KAAK3G,QAASg9D,EAAWr2D,KAAKI,QAAQi2D,QAC/B,KAAjBA,EAAS/2D,MACT+2D,EAAS/2D,IAAM+2D,GAAAA,EAAS/2D,KAEN,IAAlB+2D,EAAS19D,OACT09D,EAAS19D,KAAO09D,GAAAA,EAAS19D,MAE7BU,EAAQpB,KACJqH,IAAK+2D,EAAS/2D,KAAO,GACrB3G,KAAM09D,EAAS19D,MAAQ,MAG/Bm/J,kBAAmB,SAAUj0I,GAAV,GACXu4D,GAAYp8E,KAAKI,QAAQg8E,UACzB+7E,GACA97E,MAAQt8E,YACRu8E,OACIx7E,MAAM,EACNf,YAGR,OAAOq8E,IAAaA,EAAUv4D,IAAOs0I,EAAet0I,IAExD8B,QAAS,WACLztB,EAAM+oB,OAAOjhB,KAAKjI,QAAQ4C,aAE9BszJ,WAAY,WAAA,GACJ7iE,GAAYprF,KAAKI,QAAQgrF,UACzB/xF,EAAU2G,KAAK3G,OACf2G,MAAKsxE,WACLj4E,EAAQuwB,IAAI,WAAai1C,GAAIlkE,SAAS8/J,GAAsBvyI,SAC5DloB,KAAKsxE,SAASxrD,UACd9lB,KAAKsxE,SAAW,MAEhB8Z,IACA/xF,EAAQqM,GAAG,WAAam5D,EAAIq8F,EAAiBl1J,EAAM,SAAUiC,GACpDvR,EAAEuR,EAAEmY,QAAQnI,QAAQ,oBAAoBrgB,QACzCoI,KAAK48J,sBAEV58J,OACHtC,EAAK,sBAAsBzG,MAAM,KAAM,SAAUkb,EAAO1K,GACpDpO,EAAQyqD,OAAOw9B,GAAUu7E,aAAap1J,MAE1CzH,KAAKsxE,SAAW,GAAIipF,GAAev6J,OAEvC3G,EAAU,MAEdqnI,WAAY,WACR,GAAIv4D,GAAYnoE,KAAKI,QAAQ+nE,SACzBnoE,MAAK88J,WACL98J,KAAK88J,SAASh3I,UACd9lB,KAAK88J,SAAW,MAEhB30F,IACAnoE,KAAK88J,SAAW,GAAI9B,GAAeh7J,KAAMmoE,EAAU4lD,YAAcmtC,KAGzE6B,SAAU,WAAA,GACF38J,GAAUJ,KAAKI,QACfq2J,EAAUr2J,EAAQq2J,QAClB90E,EAASvhF,EAAQuhF,OACjBo0E,EAAW/1J,KAAK3G,QAAQsB,SAASugK,GACjCvzI,EAAYouI,EAASzuI,KAAK,qBAC1B01I,GACA,WACA,WAEJvG,GAAU//J,EAAEsc,IAAIyjJ,EAAS,SAAU9/H,GAE/B,MADAA,GAASgrD,GAAmC,QAAzBhrD,EAAO75B,cAA0B,QAAU65B,GACrDznB,KAAM8tJ,EAAuB9+J,QAAQy4B,EAAO75B,kBAAsB,UAAY65B,EAASA,KAEpGhP,EAAUjlB,KAAKxK,EAAMqQ,OAAO+4E,GAAU3qD,OAAQ8/H,KAElDpxI,WAAY,SAAUjlB,GAAV,GAEJ8vI,GAQI1sI,CATRwB,GAAOf,GAAGohB,WAAWld,KAAKnI,KAAMI,GAC5B8vI,EAAalwI,KAAKI,QAAQ8vI,cAAe,EAC7ClwI,KAAKw1D,UACLx1D,KAAK80J,cACL90J,KAAKmwE,YACLnwE,KAAKiuJ,aACLjuJ,KAAK0gI,aACL1gI,KAAK+8J,WACwB,IAAlB38J,EAAQ28E,QACXv5E,EAAUxD,KAAKI,QAAQoD,WAAY,EACvCxD,KAAKk1J,SAAS90J,EAAQ28E,OAASv5E,IAEnCxD,KAAKjI,QAAQE,IAAIo7D,EAAU68E,EAAa,GAAK,WAEjDxoI,QACIqzE,EACAG,EACAD,EACAD,EACAygF,EACAC,EACAF,EACAG,EACAhwF,EACAoE,EACApL,EACAE,EACAvyB,GAEJlyC,SACI8O,KAAM,SACNktE,WACIC,MACIt8E,SACIrF,MAAQkrC,UAAW,MACnBq3H,MAAQr3H,UAAW,OAEvBvlC,SAAU,KAEdi8E,OACIv8E,SACIrF,MACIkrC,UAAW,MACXxoC,YAAcy0D,MAAO,KAEzBorG,MAAQr3H,UAAW,QAEvBvlC,SAAU,IACVS,MAAM,IAGdu5B,MAAO,GACPo8H,SAAU,SACVyG,WAAW,EACXngF,OAAO,EACPqO,WAAW,EACXjjB,WAAW,EACXgwB,SAAU,GACVwvD,UAAW,GACXlO,SAAUmZ,EAAAA,EACVhf,UAAWgf,EAAAA,EACXjxE,QAAQ,EACRuuD,YAAY,EACZ75E,YACAwF,QAAS,KACTr4D,QAAS,KACTtK,OAAQ,KACRD,MAAO,KACP69B,SAAU,OACVqmI,aAAa,EACbC,aAAa,GAEjBC,UAAW,WACP,MAAO3mK,GAAEuM,QAAQ,QAASvM,EAAEsc,IAAIhT,KAAKI,QAAQq2J,QAAS,SAAUxjI,GAC5D,MAAOA,GAAEn2B,qBAGjBm7E,SAAU,SAAUhwE,GAChB,GAAyG7I,GAAQqvG,EAAgE6uD,EAAUC,EAAWC,EAAGt3C,EAArMt/G,EAAO5G,KAAMI,EAAUwG,EAAKxG,QAASuhB,EAAOzpB,EAAMypB,KAAMyU,EAAUnuB,EAAEmuB,QAAS/8B,EAAUuN,EAAKvN,QAA0BolC,EAAW,GAAI0+H,EAAcv2J,EAAKxG,QAAQ+8J,WAChK/mI,IAAWzU,EAAKM,KAAOrb,EAAKy2J,aAC5Bz2J,EAAK2yG,QAAO,GAEZtxG,EAAEmY,QAAUnY,EAAE22B,eAAiBh4B,EAAKs2E,YAGpC98E,EAAQ+nE,WAAclgE,EAAE8tE,SAAYonF,IACpC/9J,EAASlH,EAAM+G,UAAU5F,GACrB+8B,GAAWzU,EAAKQ,GAChBssF,EAAUp1G,EAAQpB,IAAI,MAAOmH,EAAOE,IAAMm/B,GACnCrI,GAAWzU,EAAKU,KACvBosF,EAAUp1G,EAAQpB,IAAI,MAAOmH,EAAOE,IAAMm/B,GACnCrI,GAAWzU,EAAKO,KACvBusF,EAAUp1G,EAAQpB,IAAI,OAAQmH,EAAOzG,KAAO8lC,GACrCrI,GAAWzU,EAAKS,QACvBqsF,EAAUp1G,EAAQpB,IAAI,OAAQmH,EAAOzG,KAAO8lC,KAGhDr+B,EAAQgrF,WAAanjF,EAAE8tE,UAAYonF,IAC/B/mI,GAAWzU,EAAKQ,IAChBssF,GAAU,EACV8uD,EAAYlkK,EAAQH,SAAWulC,GACxBrI,GAAWzU,EAAKU,OACvBosF,GAAU,EACV8uD,EAAYlkK,EAAQH,SAAWulC,GAE/BrI,GAAWzU,EAAKO,MAChBusF,GAAU,EACV6uD,EAAWjkK,EAAQJ,QAAUwlC,GACtBrI,GAAWzU,EAAKS,QACvBqsF,GAAU,EACV6uD,EAAWjkK,EAAQJ,QAAUwlC,GAE7BgwE,IACA+uD,EAAI/K,EAAU6K,EAAUl9J,EAAQ+3F,SAAU/3F,EAAQq5I,UAClDvzB,EAAIusC,EAAU8K,EAAWn9J,EAAQunJ,UAAWvnJ,EAAQwzI,WAC/Cn+H,MAAM+nJ,KACPnkK,EAAQJ,MAAMukK,GACd52J,EAAKxG,QAAQnH,MAAQukK,EAAI,MAExB/nJ,MAAMywG,KACP7sH,EAAQH,OAAOgtH,GACft/G,EAAKxG,QAAQlH,OAASgtH,EAAI,MAE9Bt/G,EAAKqa,WAGTwtF,GACAxmG,EAAE9D,mBAGV+wJ,SAAU,SAAU1xJ,GAChB,GAAIyyJ,GAAUj2J,KAAK82B,SAASn8B,SAASu5J,GAAW76J,EAAU2G,KAAK3G,OAK/D,OAJK48J,GAAQr+J,SACTq+J,EAAUv/J,EAAE,8BAEhBu/J,EAAQ/qG,aAAa7xD,EAAQ,IAAI8mB,OAAO3c,GAASvL,IAAI60I,EAAQz6H,SAAShZ,EAAQpB,IAAI60I,GAAS,IAAM,GAC1FmpB,GAEXwH,eAAgB,SAAUtlF,GACtB,GAAI2uD,GAAY,iBAAiBz3H,KAAK8oE,EAAK,GAAGl6E,WAAW,EACzD,QACIy/J,YAAa,SACbC,sBAAuB,WACvBC,sBAAuB,WACvBC,qBAAsB,UACtBC,cAAe,UACfC,UAAW,MACXC,YAAa,SACfl3B,IAEN21B,qBAAsB,SAAUx0J,GAAV,GAIdkwE,GACAxhD,CAJJ,KAAI32B,KAAKk9E,SAKT,MAFI/E,GAAOzhF,EAAEuR,EAAEmY,QAAQnI,QAAQ,oBAAoBqP,KAAK,WACpDqP,EAAS32B,KAAKy9J,eAAetlF,GAC7BxhD,GACA1uB,EAAE9D,iBACFnE,KAAK22B,MACE,GAHX,GAMJohI,QAAS,WAAA,GACDnxJ,GAAO5G,KACPs5J,EAAS5iK,EAAE48J,GAASzvJ,OAAO,WAAA,GACvBwlD,GAAM3yD,EAAEsJ,MACR+yC,EAASnsC,EAAKwyJ,QAAQ/vG,GACtBjpD,EAAU2yC,GAAUA,EAAO3yC,OAC/B,OAAOA,IAAWA,EAAQ28E,OAAS38E,EAAQoD,SAAWpD,EAAQ02B,WAAalwB,EAAKxG,QAAQ02B,UAAYuyB,EAAItvD,GAAG0hF,KAC5Gz9D,KAAK,SAAUpb,EAAGC,GACjB,OAAQnM,EAAEkM,GAAG3K,IAAI,WAAavB,EAAEmM,GAAG5K,IAAI,WAG3C,OADA2O,GAAO,KACA0yJ,GAEXF,QAAS,SAAUrhK,GAAV,GACD8jE,GAAU9jE,EAAQ4C,SAASwgK,GAC3Bn4J,EAAS9K,EAAMuvB,eAAeo0C,EAClC,OAAI74D,GACOA,EAEJpM,GAEX4nC,OAAQ,WACJ,GAAsIw6H,GAAQD,EAA1InyJ,EAAO5G,KAAMq2D,EAAWzvD,EAAKxG,QAAQi2D,SAAUh9D,EAAUuN,EAAKvN,QAASy/J,EAAiBpiK,EAAEC,QAASgJ,EAAY,EAAGvB,EAAa,CACnI,OAAIwI,GAAKxG,QAAQ+8J,YACNv2J,GAENA,EAAKxG,QAAQuhF,SACdhiF,EAAYm5J,EAAen5J,YAC3BvB,EAAa06J,EAAe16J,cAEhC26J,EAAU36J,EAAaQ,KAAKlG,IAAI,GAAIogK,EAAe7/J,QAAUI,EAAQJ,SAAW,GAChF+/J,EAASr5J,EAAYf,KAAKlG,IAAI,GAAIogK,EAAe5/J,SAAWG,EAAQH,SAAWmZ,SAAShZ,EAAQpB,IAAI,cAAe,KAAO,GAC1HoB,EAAQpB,KACJU,KAAMogK,EACNz5J,IAAK05J,IAET3iG,EAAS/2D,IAAM05J,EACf3iG,EAAS19D,KAAOogK,EACTnyJ,IAEXyzB,MAAO,SAAUjF,GACb,GAAwJ6oI,GAApJr3J,EAAO5G,KAAM3G,EAAUuN,EAAKvN,QAAS+G,EAAUwG,EAAKxG,QAAS89J,EAAW7kK,EAAQsB,SAASugK,GAAkB7gI,EAAQ6jI,EAASvjK,SAASsgK,EACzI,OAAKlgK,WAAUnD,QAGXw9B,KAAS,GACT/7B,EAAQiB,SAAS,sBACjB4jK,EAASh2I,WAEJg2I,EAAStmK,OAKVyiC,EAAM33B,KAAKxK,EAAMqJ,WAAW6zB,KAJ5B/7B,EAAQm0E,QAAQ8T,GAAUy0E,SAAS31J,IACnCwG,EAAKm2J,WACLmB,EAAW7kK,EAAQsB,SAASugK,IAIhC+C,EAAiB5rJ,SAAS3Y,EAAYwkK,GAAW,IACjD7kK,EAAQpB,IAAI,cAAegmK,GAC3BC,EAASjmK,IAAI,cAAegmK,IAEhCr3J,EAAKxG,QAAQi6B,MAAQjF,EACdxuB,GAlBIyzB,EAAM33B,QAoBrBm5D,QAAS,SAAUn5D,EAAMlH,GACrB,GAAIqgE,GAAU77D,KAAK3G,QAAQsB,SAASwgK,GAAiB9R,EAAkBxtF,EAAQlhE,SAAS,uBAExF,OADAkhE,GAAUwtF,EAAgB,GAAKA,EAAkBxtF,EAC5C8sD,EAAQjmH,IAGb1C,KAAK8kB,QAAQ,UAAW,WACpB,OAASyB,SAAUs1C,EAAQlhE,cAE/BzC,EAAM4tB,QAAQ9lB,KAAKjI,QAAQ4C,YAC3BkhE,EAAQ/rB,QAAQptC,KAAKA,GACrB1C,KAAK8kB,QAAQ,UAAW,WAAA,GAEXhqB,GADL8H,IACJ,KAAS9H,EAAI+gE,EAAQjkE,SAAUkD,GAAK,GAChC8H,EAAEkF,MAAO2e,SAAUjrB,GAEvB,QACI+qB,SAAUs1C,EAAQlhE,WAClBa,KAAMoH,KAGP5C,MAjBI67D,EAAQn5D,QAmBvB25E,KAAM,WAAA,GACgK45E,GAAS0B,EAgB3JC,EAhBZhxJ,EAAO5G,KAAM3G,EAAUuN,EAAKvN,QAAS+G,EAAUwG,EAAKxG,QAASy3J,EAAc73J,KAAK83J,kBAAkB,QAAS5Y,EAAiB7lJ,EAAQsB,SAASwgK,GAA8CgD,EAAMznK,EAAE6G,SA4CvM,OA3CKqJ,GAAKoB,QAAQ+yE,KACVn0E,EAAKs2E,UACL7jF,EAAQsmB,WAAU,GAAM,GAE5B/Y,EAAKs2E,UAAW,EAChBt2E,EAAKouJ,UACD50J,EAAQ88J,WACRt2J,EAAK7O,QAAQw8B,QAEjBn0B,EAAQoD,SAAU,EACdpD,EAAQ28E,QACR46E,IAAuB/wJ,EAAKmxJ,UAAUngK,OACtCq+J,EAAUrvJ,EAAKsuJ,SAASyC,GACxB1B,EAAQt2I,WAAU,GAAM,GACpBk4I,EAAYx3J,UAAYnI,EAAM6H,QAAQi4J,OAASL,GAC3CC,EAAY1/J,EAAM+H,GAAGg2J,GAASgC,SAClCL,EAAUv3J,SAASw3J,EAAYx3J,UAAY,GAC3Cu3J,EAAUvnG,SAAS,IACnBunG,EAAU/gG,QAEVo/F,EAAQh+J,IAAI,UAAW,IAE3Bg+J,EAAQj8J,OACRtD,EAAEC,QAAQ+O,GAAG,QAAS,WACdw5I,EAAe1jJ,KAAK,YACpBoL,EAAK7O,QAAQw8B,WAIpBl7B,EAAQU,GAAG0hF,KACZyjE,EAAejnJ,IAAIo7D,EAAUH,GAC7B75D,EAAQW,OAAO2lB,YAAYI,cACvBhgB,QAAS83J,EAAY93J,QACrBM,SAAUw3J,EAAYx3J,SACtBE,SAAUyF,EAAMhG,KAAKo+J,UAAWp+J,UAIxCI,EAAQ+8J,cACRv2J,EAAKy3J,mBAAqBF,EAAIx+J,YAC9BiH,EAAK03J,oBAAsBH,EAAI//J,aAC/B1H,EAAE,cAAcuB,IAAIo7D,EAAUH,IAE3BtsD,GAEXw3J,UAAW,WACP,GAAIluB,GAAalwI,KAAKI,QAAQ8vI,cAAe,CACzClwI,MAAKI,QAAQ88J,WACbl9J,KAAKjI,QAAQw8B,QAEjBv0B,KAAKjI,QAAQE,IAAIo7D,EAAU68E,EAAa,GAAK,UAC7Ch4I,EAAM+oB,OAAOjhB,KAAKjI,QAAQ4C,YAC1BqF,KAAKgI,QAAQkzE,IAEjBy9E,eAAgB,SAAU4F,GAAV,GAQA3G,GAPRsB,EAASl5J,KAAK+3J,UACd33J,EAAUJ,KAAKI,QACf+4J,EAAc/4J,EAAQ28E,QAAUm8E,EAAOthK,OACvCq+J,EAAU71J,EAAQ28E,MAAQ/8E,KAAKk1J,UAAS,GAAQx+J,EAAEE,GAClD8hK,EAAc14J,KAAK83J,kBAAkB,QACrCqB,IACKoF,GAAqB7F,EAAYr4J,UAAYnI,EAAM6H,QAAQi4J,MACxDJ,EAAY1/J,EAAM+H,GAAGg2J,GAASjmC,UAClC4nC,EAAUv3J,SAASq4J,EAAYr4J,UAAY,GAC3Cu3J,EAAUznG,WAAW,IACrBynG,EAAU/gG,QAEV72D,KAAKk1J,UAAS,GAAOhtI,SAElBgxI,EAAOthK,QACdoI,KAAKo5J,QAAQF,EAAO5pI,QAAQ4lI,UAAS,IAG7C37C,OAAQ,SAAUk/C,GACd,GAAI7xJ,GAAO5G,KAAM3G,EAAUuN,EAAKvN,QAAS+G,EAAUwG,EAAKxG,QAASy3J,EAAc73J,KAAK83J,kBAAkB,QAASY,EAAc14J,KAAK83J,kBAAkB,SAAUqG,EAAMznK,EAAE6G,SACtK,IAAIlE,EAAQU,GAAG0hF,KAAa70E,EAAKoB,QAAQgzE,GAASue,eAAgBk/D,IAAoB,CAClF,GAAI7xJ,EAAKs2E,SACL,MAEJt2E,GAAKs2E,UAAW,EAChB98E,EAAQoD,SAAU,EAClB9M,EAAE48J,GAAS51J,KAAK,SAAU5C,EAAG/C,GACzB,GAAImnJ,GAAiBxoJ,EAAEqB,GAAS4C,SAASwgK,EACrCpjK,IAAWsB,GAAW6lJ,EAAe53H,KAAK,MAAQy9D,GAAentF,OAAS,GAC1EsnJ,EAAevkJ,SAASu5J,GAAUhsI,WAG1CloB,KAAK24J,iBACLt/J,EAAQsmB,YAAYI,cAChBhgB,QAAS24J,EAAY34J,SAAW83J,EAAY93J,QAC5CO,QAASo4J,EAAYp4J,WAAY,EACjCD,SAAUq4J,EAAYr4J,SACtBE,SAAUyF,EAAMhG,KAAKw+J,YAAax+J,QAGtC4G,EAAKxG,QAAQ+8J,cACbzmK,EAAE,cAAcuB,IAAIo7D,EAAU,IAC1BzsD,EAAKy3J,oBAAsBz3J,EAAKy3J,mBAAqB,GACrDF,EAAIx+J,UAAUiH,EAAKy3J,oBAEnBz3J,EAAK03J,qBAAuB13J,EAAK03J,oBAAsB,GACvDH,EAAI//J,WAAWwI,EAAK03J,uBAIhCE,YAAa,WAAA,GAKDnF,GAJJzyJ,EAAO5G,IACX4G,GAAKvN,QAAQyH,OAAO7I,IAAI,UAAW,IACnC2O,EAAKoB,QAAQizE,GACTr0E,EAAKxG,QAAQ28E,QACTs8E,EAAYzyJ,EAAKwyJ,QAAQxyJ,EAAKmxJ,UAAUzoI,QACxC+pI,GACAA,EAAUrE,YAItB14E,MAAO,WAEH,MADAt8E,MAAKu5G,QAAO,GACLv5G,MAEXy+J,YAAa,SAAU1mK,GACnB,MAAOrB,GAAEqB,GAASgC,GAAGiiK,GAAmB,IAAMA,GAAmB,sBAErE0C,aAAc,SAAUt+I,GACpB,GAAIgnF,GAAS50F,IAAiBza,EAAUiI,KAAKjI,OAC7C,OAAOiI,MAAKI,QAAQ88J,YAAcxmK,EAAE0wG,GAAQrtG,GAAGhC,KAAaiI,KAAKy+J,YAAYr+I,MAAaroB,EAAQuvB,KAAK8/E,GAAQxvG,SAAWG,EAAQuvB,KAAKlH,GAAQxoB,SAEnJo9J,QAAS,SAAU/sJ,GAAV,GAkBGtI,GAAmCg/J,EAjBvC/3J,EAAO5G,KAAM3G,EAAUuN,EAAKvN,QAASulK,EAAgBvlK,EAAQ,GAAI8+D,GAAU9+D,EAAQpB,IAAI60I,GAASurB,EAAiBlgG,EAAQ/3C,EAASnY,GAAKA,EAAEmY,QAAU,IA2BvJ,OA1BA1pB,GAAE48J,GAAS51J,KAAK,SAAU5C,EAAG/C,GACzB,GAAIugK,GAAe5hK,EAAEqB,GAAUwgK,EAAYD,EAAargK,IAAI60I,GAASoS,EAAiBoZ,EAAa39J,SAASwgK,EACvG1lJ,OAAM8iJ,KACPpgG,EAASv5D,KAAKlG,KAAK6/J,EAAWpgG,IAElC+mF,EAAe1jJ,KAAK,UAAWzD,GAAW6mK,GACtC7mK,GAAW6mK,GAAiB1f,EAAe53H,KAAK,MAAQy9D,GAAentF,OAAS,GAChFsnJ,EAAep7F,OAAOw9B,GAAU20E,aAGnC58J,EAAQ,GAAGS,MAAMq+D,QAAUkgG,EAAiBlgG,IAC7C9+D,EAAQpB,IAAI60I,EAAQ30E,EAAS,GAEjCvxD,EAAK7O,QAAQuvB,KAAK,gBAAgBY,SAC9BthB,EAAK83J,aAAat+I,KAClBxZ,EAAK7O,QAAQw8B,QACT50B,EAAYjJ,EAAEC,QAAQgJ,YAAag/J,EAAYtsJ,SAAShZ,EAAQg9D,WAAW/2D,IAAK,KAC/EsH,EAAKxG,QAAQuhF,QAAUg9E,EAAY,GAAKA,EAAYh/J,IACjDA,EAAY,EACZjJ,EAAEC,QAAQgJ,UAAUg/J,GAEpBtlK,EAAQpB,IAAI,MAAO0H,KAI/BtG,EAAU,KACHuN,GAEXg2J,mBAAoB,WAChB,MAAI58J,MAAKk9E,SACEl9E,KAEJA,KAAKA,KAAKI,QAAQ+8J,YAAc,UAAY,eAEvD3nG,QAAS,WAAA,GACD5uD,GAAO5G,KACPI,EAAUwG,EAAKxG,QACfunJ,EAAYvnJ,EAAQunJ,UACpBkX,EAAiBj4J,EAAKi4J,eACtBV,EAAMznK,EAAE6G,SACZ,OAAK6C,GAAQ+8J,aAAgB/8J,EAAQg9J,aAGjCzV,GAAaA,GAAaiL,EAAAA,GAC1BhsJ,EAAKvN,QAAQpB,IAAI,aAAc0vJ,GAEnC/gJ,EAAKvN,QAAQpB,KACTo+D,SAAUj2D,EAAQuhF,OAAS,QAAU,WACrChpF,KAAMkmK,EAAelmK,KACrB2G,IAAKu/J,EAAev/J,IACpBrG,MAAO4lK,EAAe5lK,MACtBC,OAAQ2lK,EAAe3lK,SACxByxD,YAAY2wG,GAAgBh0I,KAAK,sCAAsCttB,OAAOrC,MAAM2vB,KAAK,0CAA0C1tB,SAASsuB,SAASvwB,MAAMA,MAAM2vB,KAAKs0I,GAAmBhiK,SAASI,OAAOrC,MAAMA,MAAM2vB,KAAKy0I,IAAWniK,SAASI,OACjP4M,EAAKxG,QAAQnH,MAAQ4lK,EAAe5lK,MACpC2N,EAAKxG,QAAQlH,OAAS2lK,EAAe3lK,OACrCxC,EAAE,cAAcuB,IAAIo7D,EAAU,IAC1BrzD,KAAKq+J,oBAAsBr+J,KAAKq+J,mBAAqB,GACrDF,EAAIx+J,UAAUK,KAAKq+J,oBAEnBr+J,KAAKs+J,qBAAuBt+J,KAAKs+J,oBAAsB,GACvDH,EAAI//J,WAAW4B,KAAKs+J,qBAExBl+J,EAAQ+8J,YAAc/8J,EAAQg9J,aAAc,EAC5Cx2J,EAAKqa,SACEra,GAvBIA,GAyBfk4J,cAAe,SAAUC,EAAUp+I,GAC/B,GAAI/Z,GAAO5G,KAAM3G,EAAUuN,EAAKvN,QAASS,EAAQT,EAAQ,GAAGS,MAAOsG,EAAUwG,EAAKxG,OAClF,OAAIA,GAAQ+8J,aAAe/8J,EAAQg9J,YACxBx2J,GAEXA,EAAKi4J,gBACD5lK,MAAOa,EAAMb,MACbC,OAAQY,EAAMZ,QAElBG,EAAQsB,SAAS8/J,GAAsB35J,OAAOnJ,MAAMgD,SAASugK,GAAiB5zI,KAAKs0I,GAAmBhiK,SAASkH,OAAOioB,GAAG,GAAG4pD,OAAO2O,GAAU3qD,QAASznB,KAAM,oBAC5JyR,EAASxY,KAAKvB,GACdA,EAAKvN,QAAQsB,SAASugK,GAAiB5zI,KAAKy0I,IAAWniK,SAASumB,OAAoB,aAAb4+I,GACvEn4J,EAAKoB,QAAQ+2J,GACNn4J,IAEXo4J,SAAU,WAkBN,MAjBAh/J,MAAK8+J,cAAc,WAAY,WAC3B,GAAIl4J,GAAO5G,KAAM3G,EAAUuN,EAAKvN,QAASg9D,EAAWh9D,EAAQg9D,WAAY8nG,EAAMznK,EAAE6G,SAChFmD,GAAOkG,EAAKi4J,gBACRlmK,KAAM09D,EAAS19D,KACf2G,IAAK+2D,EAAS/2D,MAElBjG,EAAQpB,KACJU,KAAM,EACN2G,IAAK,EACL+2D,SAAU,UACX/7D,SAASghK,GACZt7J,KAAKq+J,mBAAqBF,EAAIx+J,YAC9BK,KAAKs+J,oBAAsBH,EAAI//J,aAC/B1H,EAAE,cAAcuB,IAAIo7D,EAAUH,GAC9BtsD,EAAKxG,QAAQ+8J,aAAc,EAC3Bv2J,EAAK+1J,sBAEF38J,MAEXm9J,YAAa,WACT,MAAOn9J,MAAKI,QAAQ+8J,aAExB8B,SAAU,WAUN,MATAj/J,MAAK8+J,cAAc,WAAY,WAC3B,GAAIl4J,GAAO5G,IACX4G,GAAKvN,QAAQpB,KACTiB,OAAQ,GACRyuJ,UAAW,KAEf/gJ,EAAK7O,QAAQ+I,OACb8F,EAAKxG,QAAQg9J,aAAc,IAExBp9J,MAEXo9J,YAAa,WACT,MAAOp9J,MAAKI,QAAQg9J,aAExB35E,IAAK,WACD,GAAI78E,GAAO5G,KAAM0jF,EAAMhtF,EAAEC,QAAS0C,EAAUuN,EAAKvN,QAASiG,EAAM+S,SAAShZ,EAAQpB,IAAI,OAAQ,IAAKU,EAAO0Z,SAAShZ,EAAQpB,IAAI,QAAS,GAClI2O,GAAKxG,QAAQ+8J,cACd9jK,EAAQpB,KACJo+D,SAAU,QACV/2D,IAAKA,EAAMokF,EAAI/jF,YACfhH,KAAMA,EAAO+qF,EAAItlF,eAErB/E,EAAQsB,SAASugK,GAAiB5zI,KAAKu0I,GAAMvhK,SAAS,aAAaqwD,YAAY,WAC/E/jD,EAAKxG,QAAQuhF,QAAS,EACtB/6E,EAAKxG,QAAQ+nE,WAAY,IAGjC+2F,MAAO,WACH,GAAIt4J,GAAO5G,KAAM0jF,EAAMhtF,EAAEC,QAAS0C,EAAUuN,EAAKvN,QAASiG,EAAM+S,SAAShZ,EAAQpB,IAAI,OAAQ,IAAKU,EAAO0Z,SAAShZ,EAAQpB,IAAI,QAAS,GAClI2O,GAAKxG,QAAQ+8J,cACd9jK,EAAQpB,KACJo+D,SAAU,GACV/2D,IAAKA,EAAMokF,EAAI/jF,YACfhH,KAAMA,EAAO+qF,EAAItlF,eAErB/E,EAAQsB,SAASugK,GAAiB5zI,KAAKw0I,GAAQxhK,SAAS,WAAWqwD,YAAY,aAC/E/jD,EAAKxG,QAAQuhF,QAAS,EACtB/6E,EAAKxG,QAAQ+nE,WAAY,IAGjCw0F,kBAAmB,WACf,GAAiGa,GAAGt3C,EAAhGt/G,EAAO5G,KAAM3G,EAAUuN,EAAKvN,QAASo2H,EAAM/4H,EAAEC,QAASimB,EAAY1kB,EAAMC,QAAQykB,WAC/EhW,GAAKxG,QAAQ+8J,cAGlBK,EAAI/tC,EAAIx2H,QAAU2jB,EAClBspG,EAAIuJ,EAAIv2H,SAAW0jB,EAAYvK,SAAShZ,EAAQpB,IAAI,eAAgB,IACpEoB,EAAQpB,KACJgB,MAAOukK,EACPtkK,OAAQgtH,IAEZt/G,EAAKxG,QAAQnH,MAAQukK,EACrB52J,EAAKxG,QAAQlH,OAASgtH,EACtBt/G,EAAKqa,WAETzJ,QAAS,SAAUpX,GACf,GAAwE8lF,GAAQE,EAAYjjE,EAAxFvc,EAAO5G,KAAMm/J,EAAcv4J,EAAKxG,QAASrI,EAAUrB,EAAEkQ,EAAK7O,QA6B9D,OA5BK4wC,GAAcvoC,KACfA,GAAY+iB,IAAK/iB,IAErBA,EAAUM,KAAWy+J,EAAYtjG,QAASz7D,GAC1CgmF,EAAauiC,EAAQw2C,EAAYj5E,QAAUi5E,EAAYj5E,OAAS9lF,EAAQ8lF,OACxE/iE,EAAM/iB,EAAQ+iB,IACVA,GACKwlG,EAAQviC,KACTA,GAAcljE,GAAWC,IAExBijE,GAGDF,EAASnuF,EAAQuvB,KAAK,IAAMy9D,GAAe,GACvCmB,EACAA,EAAOG,IAAMljE,GAAO+iE,EAAOG,IAE3BtuF,EAAQ2K,KAAK4+E,GAAU89E,aAAa1+J,KAAWy+J,GAAetjG,QAASz7D,MAE3ErI,EAAQuvB,KAAK,IAAMy9D,GAAel9E,OAAO,OAASg3D,GAAIn5D,GAAG,OAASm5D,EAAI74D,EAAMhG,KAAKq/J,gBAAiBr/J,QARlG4G,EAAK0/E,aAAalmF,KAWlBA,EAAQqC,UACRmE,EAAKi1D,QAAQp5D,EAASrC,EAAQqC,eAElCmE,EAAKoB,QAAQwzJ,IAEjBzjK,EAAQqJ,YAAY,2BAA4BglF,GACzCx/E,GAEXy4J,gBAAiB,WACbr/J,KAAKgI,QAAQwzJ,IAEjB8D,cAAe,WACX10I,aAAa5qB,KAAKu/J,qBAClBv/J,KAAK3G,QAAQiuB,KAAK20I,IAAatxG,YAAY4mC,IAE/CiuE,WAAY,SAAUp/G,EAAKf,GACvBr/C,KAAKgI,QAAQsqC,GACT+M,OAAQA,EACRe,IAAKA,KAGbq/G,aAAc,SAAUC,GACpB,MAAO,UAAUlkK,GACb,GAAIkH,GAAOlH,CACPkkK,KACAh9J,EAAOD,EAASi9J,GAAiBlkK,QAErCwE,KAAK67D,QAAQn5D,EAAMlH,GACnBwE,KAAKjI,QAAQg5C,KAAK,YAAa,GAC/B/wC,KAAKgI,QAAQwzJ,KAGrBmE,aAAc,WACV3/J,KAAK3G,QAAQiuB,KAAK20I,IAAa3hK,SAASi3F,IAE5CjL,aAAc,SAAUlmF,GACpBJ,KAAKu/J,oBAAsB71I,WAAW1jB,EAAMhG,KAAK2/J,aAAc3/J,MAAO,KACtEtJ,EAAEq7C,KAAKrxC,GACHxB,KAAM,MACN2oC,SAAU,OACVrb,OAAO,EACPusB,MAAO/yC,EAAMhG,KAAKw/J,WAAYx/J,MAC9BO,SAAUyF,EAAMhG,KAAKs/J,cAAet/J,MACpC64C,QAAS7yC,EAAMhG,KAAKy/J,aAAar/J,EAAQqC,UAAWzC,OACrDI,KAEP4lB,SAAU,WACFhmB,KAAKsxE,UACLtxE,KAAKsxE,SAASxrD,UAEd9lB,KAAK88J,UACL98J,KAAK88J,SAASh3I,UAElB9lB,KAAK3G,QAAQuwB,IAAIi1C,GAAIlkE,SAASwgK,GAAgBvxI,IAAIi1C,GAAIlnE,MAAM2vB,KAAK,uCAAuCsC,IAAIi1C,GAC5GnoE,EAAEC,QAAQizB,IAAI,SAAWi1C,EAAK7+D,KAAK84I,SACnCluH,aAAa5qB,KAAKu/J,qBAClBv6J,EAAOf,GAAG6hB,QAAQ3d,KAAKnI,MACvBA,KAAK6H,OAAOjR,GACZsB,EAAM4tB,QAAQ9lB,KAAK3G,SACnB2G,KAAK24J,gBAAe,IAExB7yI,QAAS,WACL9lB,KAAKgmB,WACLhmB,KAAK3G,QAAQy2C,QAAQ5nB,SACrBloB,KAAK3G,QAAU2G,KAAK82B,SAAW92B,KAAKjI,QAAUrB,KAElD4lK,cAAe,WACX,GAAwDsD,GAAqBvmK,EAAzEwmK,EAAc7/J,KAAKjI,QAASqI,EAAUJ,KAAKI,QAAuC/B,EAAQnG,EAAMC,QAAQkG,MAAMwhK,EAC9Gz/J,GAAQ8vI,cAAe,GACvB2vB,EAAY5nK,IAAI,WAAY,UAEhCoB,EAAU3C,EAAE4qF,GAAUjoF,QAAQ+G,IAC9Bw/J,EAAsBC,EAAYv4I,KAAK,0BAA0BtU,IAAI,WACjE,GAAIqzE,GAAMrmF,KAAKgC,aAAa,MAE5B,OADAhC,MAAKqmF,IAAM,GACJA,IAEXhtF,EAAQ+H,YAAY,QAAS/C,GAAOy4B,SAAS92B,KAAK82B,UAAUgtB,OAAO+7G,GAAav4I,KAAK,0BAA0B5pB,KAAK,SAAUyU,GAC1HnS,KAAKqmF,IAAMu5E,EAAoBztJ,KAEnC9Y,EAAQiuB,KAAK,mBAAmBrvB,IAAIoG,EAAQ,OAAS,QAAS7E,EAAWH,EAAQiuB,KAAK,sBAAwB,IAC9Gu4I,EAAY5nK,IAAI,aAAc,IAAI+B,OAClC6lK,EAAYv4I,KAAK,sBAAsB5pB,KAAK,WACxC,GAAIw8H,GAASxjI,EAAEsJ,MAAMxE,KAAK,cACtB0+H,IACAA,EAAO1iH,YAGfne,EAAUwmK,EAAc,QAx3BkUv+E,IA43B9VjoF,QAASoJ,EAAS,qCAClBk0B,OAAQl0B,EAAS;AACjBszJ,SAAUtzJ,EAAS,sIACnBwzJ,QAAS,4BACTmJ,aAAc38J,EAAS,qDAA4DsiF,EAAgB,wFACnG83E,aAAcp6J,EAAS,0DAoC3B83J,GAAexzJ,WACX2zJ,WAAY,WACR16J,KAAKmvH,MAAM91H,QAAQyqD,OAAOw9B,GAAU20E,UAExC0E,cAAe,WACX36J,KAAKmvH,MAAM91H,QAAQiuB,KAAK4sI,GAAUhsI,UAEtCsoD,UAAW,SAAUvoE,GAAV,GAgBHu3E,GAII7oB,EACAD,EACAopG,EAEIC,EACAC,EACAC,EAzBRr5J,EAAO5G,KACPyvH,EAAM7oH,EAAKuoH,MACX91H,EAAUo2H,EAAIp2H,OAClBuN,GAAK4zJ,iBAAmB/qC,EAAIznH,QAAQ2zJ,GAChC/0J,EAAK4zJ,mBAGT5zJ,EAAKs5J,eAAiB7tJ,SAAShZ,EAAQpB,IAAI,eAAgB,IAC3D2O,EAAKu5J,gBAAkBjoK,EAAM+G,UAAU5F,EAAS,YAChDuN,EAAKw5J,gBAAkBn4J,EAAE22B,cAAcmS,KAAK,aAAa55C,QAAQ,4BAA6B,IAC9FyP,EAAKy5J,aACDpnK,MAAOI,EAAQJ,QACfC,OAAQG,EAAQH,UAEpB0N,EAAK05J,gBAAkBpoK,EAAM+G,UAAUwwH,EAAI34F,SAAU,YACjD0oD,EAAenmF,EAAQmmF,eACvBA,EAAazlF,GAAG,QAChB6M,EAAK05J,gBAAgBhhK,IAAMsH,EAAK05J,gBAAgB3nK,KAAO,GAEnDg+D,EAAY6oB,EAAavnF,IAAI,cAC7By+D,EAAa8oB,EAAavnF,IAAI,eAC9B6nK,GAAa5D,GAAKhiK,KAAKy8D,KAAeulG,GAAKhiK,KAAKw8D,GAChDopG,IACIC,EAAkBnF,EAAYvhK,EAAQ,IACtC2mK,EAAuBD,EAAgBpnK,KAAOiO,EAAK05J,gBAAgB3nK,KAAOiO,EAAKu5J,gBAAgBxnK,KAC/FsnK,EAAsBF,EAAgBzgK,IAAMsH,EAAK05J,gBAAgBhhK,IAAMsH,EAAKu5J,gBAAgB7gK,IAChGsH,EAAK25J,sBAAwBP,EAAuB,EAAIA,EAAuB,EAC/Ep5J,EAAK45J,qBAAuBP,EAAsB,EAAIA,EAAsB,EAC5Er5J,EAAKu5J,gBAAgBxnK,MAAQiO,EAAK25J,sBAClC35J,EAAKu5J,gBAAgB7gK,KAAOsH,EAAK45J,uBAGzCnnK,EAAQsB,SAAS8/J,GAAsBxlF,IAAIhtE,EAAE22B,eAAe99B,OAC5DpK,EAAE6kF,GAAMtjF,IAAIsjK,EAAQtzJ,EAAE22B,cAAc3mC,IAAIsjK,MAE5CjrF,KAAM,SAAUroE,GAAV,GAIErB,GAAa6oH,EAAkBp2H,EAAuB+G,EAAuBwlC,EAAkC06H,EAAwCH,EAAwCE,EAAgC/C,EAAUC,EAAWkD,EAAcC,EAAaztI,EAA+B5hB,EAY9SsvJ,CAfA3gK,MAAKw6J,mBAGL5zJ,EAAO5G,KAAMyvH,EAAM7oH,EAAKuoH,MAAO91H,EAAUo2H,EAAIp2H,QAAS+G,EAAUqvH,EAAIrvH,QAASwlC,EAAYh/B,EAAKw5J,gBAAiBE,EAAkB15J,EAAK05J,gBAAiBH,EAAkBv5J,EAAKu5J,gBAAiBE,EAAcz5J,EAAKy5J,YAA6DptI,EAAIr0B,KAAKlG,IAAIuP,EAAEgrB,EAAEvX,SAAU,GAAIrK,EAAIzS,KAAKlG,IAAIuP,EAAEoJ,EAAEqK,SAAU,GACzUkqB,EAAU1nC,QAAQ,MAAQ,GAC1Bo/J,EAAWrqI,EAAIktI,EAAgBxnK,KAAO2nK,EAAgB3nK,KACtDU,EAAQJ,MAAMw5J,EAAU6K,EAAUl9J,EAAQ+3F,SAAU/3F,EAAQq5I,YACrD7zG,EAAU1nC,QAAQ,MAAQ,IACjCwiK,EAAcP,EAAgBxnK,KAAO0nK,EAAYpnK,MAAQqnK,EAAgB3nK,KACzE2kK,EAAW7K,EAAUiO,EAAcztI,EAAG7yB,EAAQ+3F,SAAU/3F,EAAQq5I,UAChEpgJ,EAAQpB,KACJU,KAAM+nK,EAAcpD,EAAWgD,EAAgB3nK,MAAQiO,EAAK25J,uBAAyB,GACrFtnK,MAAOqkK,KAGXqD,EAAetvJ,EACfo+G,EAAIrvH,QAAQuhF,SACZg/E,GAAgBjqK,EAAEC,QAAQgJ,aAE1BimC,EAAU1nC,QAAQ,MAAQ,GAC1Bq/J,EAAYoD,EAAeR,EAAgB7gK,IAAMsH,EAAKs5J,eAAiBI,EAAgBhhK,IACvFjG,EAAQH,OAAOu5J,EAAU8K,EAAWn9J,EAAQunJ,UAAWvnJ,EAAQwzI,aACxDhuG,EAAU1nC,QAAQ,MAAQ,IACjCuiK,EAAeN,EAAgB7gK,IAAM+gK,EAAYnnK,OAASonK,EAAgBhhK,IAC1Ei+J,EAAY9K,EAAUgO,EAAeE,EAAcvgK,EAAQunJ,UAAWvnJ,EAAQwzI,WAC9Ev6I,EAAQpB,KACJqH,IAAKmhK,EAAelD,EAAY+C,EAAgBhhK,KAAOsH,EAAK45J,sBAAwB,GACpFtnK,OAAQqkK,KAGZD,IACA7tC,EAAIrvH,QAAQnH,MAAQqkK,EAAW,MAE/BC,IACA9tC,EAAIrvH,QAAQlH,OAASqkK,EAAY,MAErC9tC,EAAIxuG,WAERwvD,QAAS,SAAUxoE,GACf,IAAIjI,KAAKw6J,iBAAT,CAGA,GAAI5zJ,GAAO5G,KAAMyvH,EAAM7oH,EAAKuoH,MAAO91H,EAAUo2H,EAAIp2H,OAUjD,OATAA,GAAQsB,SAAS8/J,GAAsBxlF,IAAIhtE,EAAE22B,eAAe5kC,OAC5DtD,EAAE6kF,GAAMtjF,IAAIsjK,EAAQ,IAChB9rC,EAAIrmG,eACJqmG,EAAIrmG,cAAco9B,QAEL,IAAbv+C,EAAEmuB,SACF/8B,EAAQpB,IAAI2O,EAAKu5J,iBAAiBloK,IAAI2O,EAAKy5J,aAE/C5wC,EAAIznH,QAAQ+nE,IACL,IAEXjqD,QAAS,WACD9lB,KAAK0gI,YACL1gI,KAAK0gI,WAAW56G,UAEpB9lB,KAAK0gI,WAAa1gI,KAAKmvH,MAAQ,OAiBvC6rC,EAAej0J,WACXypE,UAAW,SAAUvoE,GACjB,GAAIwnH,GAAMzvH,KAAKmvH,MAAOp3H,EAAU03H,EAAI13H,QAAS0+J,EAAU1+J,EAAQuvB,KAAK,qBAAsBg5I,EAAkBpoK,EAAM+G,UAAUwwH,EAAI34F,SAChI92B,MAAKw6J,iBAAmB/qC,EAAIznH,QAAQ28D,KAAe8qD,EAAIrvH,QAAQ+nE,UAC3DnoE,KAAKw6J,mBAGT/qC,EAAImxC,sBAAwB1oK,EAAM+G,UAAUwwH,EAAIp2H,QAAS,YACzDo2H,EAAIoxC,wBACAloK,KAAMsP,EAAEgrB,EAAEC,OACV5zB,IAAK2I,EAAEoJ,EAAE6hB,QAEbu8F,EAAIqxC,eACAnoK,KAAMsP,EAAEgrB,EAAEC,OAASu8F,EAAImxC,sBAAsBjoK,KAC7C2G,IAAK2I,EAAEoJ,EAAE6hB,OAASu8F,EAAImxC,sBAAsBthK,KAG5CmwH,EAAIsxC,gBADJtK,EAAQ7+J,OAAS,EACK4B,EAAWi9J,GAAWpkJ,SAASokJ,EAAQx+J,IAAI,SAAU,IAAMuB,EAAWzB,GAEtE,GAAKyB,EAAWzB,GAE1C03H,EAAIsxC,iBAAmBT,EAAgB3nK,KACvC82H,EAAIuxC,gBAAkBV,EAAgBhhK,IACtCmwH,EAAIp2H,QAAQyqD,OAAOw9B,GAAU20E,SAASt7J,SAAS8/J,GAAsB35J,OACrEpK,EAAE6kF,GAAMtjF,IAAIsjK,EAAQtzJ,EAAE22B,cAAc3mC,IAAIsjK,MAE5CjrF,KAAM,SAAUroE,GAAV,GAIEwnH,GACAp5D,CAJAr2D,MAAKw6J,mBAGL/qC,EAAMzvH,KAAKmvH,MACX94D,EAAWo5D,EAAIrvH,QAAQi2D,SAC3BA,EAAS/2D,IAAMV,KAAKlG,IAAIuP,EAAEoJ,EAAE6hB,OAASu8F,EAAIqxC,cAAcxhK,IAAKmwH,EAAIuxC,gBAChE3qG,EAAS19D,KAAOiG,KAAKlG,IAAIuP,EAAEgrB,EAAEC,OAASu8F,EAAIqxC,cAAcnoK,KAAM82H,EAAIsxC,iBAC9D7oK,EAAMC,QAAQ8e,WACdvgB,EAAE+4H,EAAIp2H,SAASpB,IAAI,YAAa,cAAgBgQ,EAAEgrB,EAAEC,OAASu8F,EAAIoxC,uBAAuBloK,MAAQ,QAAUsP,EAAEoJ,EAAE6hB,OAASu8F,EAAIoxC,uBAAuBvhK,KAAO,OAEzJ5I,EAAE+4H,EAAIp2H,SAASpB,IAAIo+D,KAG3B4qG,YAAa,WACT,GAAIxxC,GAAMzvH,KAAKmvH,KACfM,GAAIp2H,QAAQsB,SAAS8/J,GAAsBt6I,QAAQsvG,EAAIrvH,QAAQg9J,aAAazlK,MAAM2vB,KAAK4sI,GAAUhsI,SACjGxxB,EAAE6kF,GAAMtjF,IAAIsjK,EAAQ,KAExBhrF,WAAY,SAAUtoE,GACdjI,KAAKw6J,mBAGTx6J,KAAKihK,cACLh5J,EAAE22B,cAAc3mB,QAAQq7I,GAASr7J,IAAI+H,KAAKmvH,MAAMyxC,yBAEpDnwF,QAAS,WACL,IAAIzwE,KAAKw6J,iBAMT,MAHA9jK,GAAEsJ,KAAKmvH,MAAM91H,SAASpB,IAAI+H,KAAKmvH,MAAM/uH,QAAQi2D,UAAUp+D,IAAI,YAAa,IACxE+H,KAAKihK,cACLjhK,KAAKmvH,MAAMnnH,QAAQ68D,IACZ,GAEX/+C,QAAS,WACD9lB,KAAK0gI,YACL1gI,KAAK0gI,WAAW56G,UAEpB9lB,KAAK0gI,WAAa1gI,KAAKmvH,MAAQ,OAGvCj3H,EAAMmpB,GAAG8G,OAAOg0I,KAClBxlK,OAAOuB,MAAM2sB,QACRluB,OAAOuB,OACE,kBAAVzB,SAAwBA,OAAOgiC,IAAMhiC,OAAS,SAAUiiC,EAAIC,EAAIC,IACrEA,GAAMD,OAEV,SAAUniC,EAAGC,QACVA,OAAO,qBAAsB,cAAeD,IAC9C,WAwtCE,MAhtCC,UAAUE,EAAGE,GAEV,QAASsqK,GAAS7tJ,GACd,MAAOA,GAAMA,EAAMzb,OAAS,GAEhC,QAASigD,GAAQj6C,GACb,MAAOA,aAAiB9B,OAAQ8B,GAASA,GAE7C,QAASujK,GAAY16I,GACjB,MAA2B,gBAAbA,IAA6C,gBAAbA,IAA6C,iBAAbA,GAElF,QAAS26I,GAAanoJ,EAAcooJ,EAAahhE,GAC7C,MAAOzhG,MAAK2iD,KAAKtoC,EAAeooJ,EAAchhE,GAElD,QAASvoF,GAAYle,EAAQqE,EAAWmmB,GACpC,GAAIrsB,GAAUwF,SAASma,cAAc0M,GAAW,MAKhD,OAJInmB,KACAlG,EAAQkG,UAAYA,GAExBrE,EAAOke,YAAY/f,GACZA,EAEX,QAASupK,KACL,GAAgGC,GAA5FC,EAAW9qK,EAAE,6EASjB,OARA8qK,GAASvpK,KACLo+D,SAAU,WACV19D,KAAM,YACNu0E,WAAY,WAEhBs0F,EAAS1qI,SAASv5B,SAASsa,MAC3B0pJ,EAAap/J,WAAWjK,EAAMiF,kBAAkBqkK,EAASl6I,KAAK,WAAW,IAAK,gBAAgB,gBAC9Fk6I,EAASt5I,SACFq5I,EAEX,QAASE,GAAYxoJ,EAAcooJ,EAAaK,GAC5C,OACI1iJ,KAAM/F,EAAeyoJ,EACrBziJ,GAAIhG,GAAgBooJ,EAAc,EAAIK,IAG9C,QAASC,GAAcvhK,EAAS6Y,GAAhC,GACQ2oJ,IAAiBxhK,EAAQihK,YAAc,EAAIjhK,EAAQyd,WAAa5E,EAChE4oJ,EAAczhK,EAAQyd,UAAY5E,CACtC,OAAO,UAAUs3B,EAAM5wC,EAAWmiK,GAC9B,MAAIniK,GAAYmiK,EACLniK,EAAY4wC,EAAKjxC,IAAMsiK,EAEV,IAAbrxH,EAAKjxC,KAAaK,EAAY4wC,EAAKjxC,IAAMuiK,GAI5D,QAASE,GAAehqK,EAAS4oB,GAC7B,MAAO,UAAU4E,GACb,MAAO5E,GAAS5oB,EAAQ4H,UAAW4lB,IAG3C,QAASy8I,GAASr/B,GACd,MAAO,UAAUpyF,EAAMhrB,GAEnB,MADAo9G,GAAQpyF,EAAK/pB,MAAO+pB,EAAKp+B,MAAOoT,GACzBgrB,GAGf,QAAS8lB,GAASt+D,EAASsZ,GACnBnZ,EAAMC,QAAQoB,QAAQgB,MAAQrC,EAAMC,QAAQoB,QAAQkB,QAAU,GAC9D1C,EAAQ+B,MAAMwF,IAAM+R,EAAI,MAExBtZ,EAAQ+B,MAAMmoK,gBAAkB,cAAgB5wJ,EAAI,MACpDtZ,EAAQ+B,MAAMi1D,UAAY,cAAgB19C,EAAI,OAGtD,QAAS6wJ,GAAKvhJ,EAAU2gE,GACpB,MAAO,UAAU6gF,EAAMC,GACnB,IAAK,GAAItnK,GAAI,EAAGwpB,EAAM69I,EAAKvqK,OAAQkD,EAAIwpB,EAAKxpB,IACxC6lB,EAASwhJ,EAAKrnK,GAAIsnK,EAAKtnK,GAAIwmF,GACvB8gF,EAAKtnK,GAAGyxC,MACRvsC,KAAKgI,QAAQq6J,GACT91H,KAAM71C,EAAEyrK,EAAKrnK,IACbU,KAAM4mK,EAAKtnK,GAAGyxC,KACdtqC,GAAI/J,EAAMmpB,MAM9B,QAASihJ,GAAQ97I,EAAO8iF,GACpB,GAAIxxD,EAQJ,OAPIwxD,GAAO,GACPxxD,EAAQtxB,EAAMpe,OAAO,EAAGkhG,GACxB9iF,EAAM1e,KAAKhB,MAAM0f,EAAOsxB,KAExBA,EAAQtxB,EAAMpe,OAAOkhG,GAAOA,GAC5B9iF,EAAMze,QAAQjB,MAAM0f,EAAOsxB,IAExBA,EAEX,QAASvvC,GAAOxQ,EAASyD,EAAM8lF,GAC3B,GAAIm3B,GAAen3B,EAAU7+E,QAC7B1K,GAAUrB,EAAEqB,GACPyD,EAAK+wC,OACNksE,EAAen3B,EAAUihF,qBAE7BviK,KAAK8kB,QAAQ,UAAW,WACpB,OAASyB,UAAWxuB,MAExBA,EAAQmL,KAAK,WAAY1H,EAAK+wC,KAAO/wC,EAAK+wC,KAAKqC,IAAM,IAAI1rC,KAAK,oBAAqB1H,EAAK2W,OAAOzP,KAAK+1G,EAAaj9G,EAAK+wC,WACtHx0C,EAAQqJ,YAAYiwF,EAAS71F,EAAKmQ,SAClC5T,EAAQqJ,YAAYk0E,EAAU95E,EAAK6vD,UACnCtzD,EAAQqJ,YAAY,UAAW5F,EAAKolG,UACpC7oG,EAAQqJ,YAAY,kBAAmB5F,EAAK+wC,MACzB,IAAf/wC,EAAK2W,OAAe3W,EAAKolG,UACzBlqG,EAAE,cAAgB8rK,EAAY,WAAW1rI,SAAS/+B,GAAS2K,KAAK4+E,EAAUmS,cAAcj4F,EAAKsyC,QAE7FtyC,EAAK8D,MAAQ1I,GACby/D,EAASt+D,EAAQ,GAAIyD,EAAK8D,KAE9BU,KAAK8kB,QAAQ,UAAW,WACpB,OACIyB,UAAWxuB,GACXyD,OACQirB,SAAUjrB,EAAK+wC,KACfuB,MAAOtyC,EAAKsyC,MACZ8yD,SAAUplG,EAAKolG,cAKnC,QAASlQ,GAAgBrlC,EAAUslC,GAAnC,GAGQlqE,GACAg3B,EACA3iD,EAAGyxD,EAJHqkC,EAAcD,EAAa/4F,OAC3Bi5F,EAAiBxlC,EAASzzD,OAI1Bk5F,KACAC,IACJ,IAAIF,EACA,IAAK/1F,EAAI,EAAGA,EAAI+1F,EAAgB/1F,IAAK,CAGjC,IAFA2rB,EAAW4kC,EAASvwD,GACpB2iD,GAAQ,EACH8O,EAAI,EAAGA,EAAIqkC,EAAarkC,IACzB,GAAI9lC,IAAakqE,EAAapkC,GAAI,CAC9B9O,GAAQ,EACRqzC,EAAQhpF,MACJqK,MAAOrX,EACPyxC,KAAM9lB,GAEV,OAGHg3B,GACDszC,EAAUjpF,KAAK2e,GAI3B,OACIqqE,QAASA,EACTC,UAAWA,GAGnB,QAAS0xE,GAAgBthK,GACrB,MAAOA,IAA+B,aAApBA,EAAQqrC,QA/JjC,GACOt0C,GAAQvB,OAAOuB,MAAOmpB,EAAKnpB,EAAMmpB,GAAIrc,EAASqc,EAAGrc,OAAQC,EAAkBoc,EAAGpc,gBAAiBe,EAAQtP,EAAEsP,MAAOi7E,EAAU,iBAAkByhF,EAAc,iBAAkBhoB,EAAU,oBAAqBioB,EAAO,SAAUC,EAAS,iBAAkBC,EAAc,iBAAkBvoB,EAAO,SAAUwoB,EAAkB,qBAAsBN,EAAY,UAAWltF,EAAW,mBAAoB+b,EAAU,kBAAmBC,EAAQ,gBAAiB73D,EAAS,SAAU49C,EAAQ,QAAS0rF,EAAY,YAAaV,EAAa,aAAcnnF,EAAW,WAAYD,EAAa,aAAc+nF,EAAkB,eAgKxlBjvE,EAAc9uF,EAAgBvE,QAC9BC,KAAM,SAAU5I,EAASqI,GACrB,GAAIwG,GAAO5G,IACX4G,GAAKwlD,OAAM,GACXxlD,EAAKq8J,WAAY,EACjBj+J,EAAOf,GAAGtD,KAAKwH,KAAKvB,EAAM7O,EAASqI,GAC9BwG,EAAKxG,QAAQigG,aACdz5F,EAAKxG,QAAQigG,WAAaihE,KAE9BlhK,EAAUwG,EAAKxG,QACfwG,EAAK7O,QAAQuC,SAASqoK,EAAO,IAAMD,GAAax/J,KAAK,OAAQ,WAC7D0D,EAAKi1D,QAAUj1D,EAAK7O,QAAQe,KAAK,iCAAsC4hJ,EAAU,YAAa9gJ,SAC9FgN,EAAKvN,QAAUuN,EAAKi1D,QAAQ/iE,KAAK,eAAkBmoF,EAAU,YAAarnF,SAC1EgN,EAAK6uF,OAAS7uF,EAAKi1D,QAAQ8W,OAAO,eAAkBiwF,EAAS,YAAa5mI,OAC1Ep1B,EAAK7O,QAAQ2N,GAAG,aAAes9J,EAAiB,0BAA2B,WACvEtsK,EAAEsJ,MAAM1F,SAASg3F,KAClB5rF,GAAG,aAAes9J,EAAiB,KAAM,WACxCtsK,EAAEsJ,MAAM2qD,YAAY2mC,KAExB1qF,EAAK42F,QAAU3lD,EAAQjxC,EAAKxG,QAAQxC,OACpCgJ,EAAKs8J,sBACLt8J,EAAKu8J,oBACLv8J,EAAKw8J,eACLx8J,EAAKy8J,iBACLz8J,EAAKy2F,UAAYnlG,EAAMyrB,OACvB/c,EAAK82F,aACL92F,EAAK2zE,cAAcn6E,EAAQwkB,YAC3Bhe,EAAKi1D,QAAQn2D,GAAG,SAAWs9J,EAAiB9qK,EAAMy7B,SAAS,WACvD/sB,EAAK08J,eACL18J,EAAK28J,qBACNnjK,EAAQwzB,QACXhtB,EAAKy0H,eAETj7H,SACI8O,KAAM,cACN85C,UAAU,EACVp1B,MAAO,IACP16B,OAAQ,KACRmoK,YAAa,EACbxjJ,UAAW,GACXwiF,WAAY,KACZmjE,eAAgB,EAChBtkK,KAAM,OACNi4E,YAAY,EACZv5E,SACAoqD,eAAgB,KAChBvlD,SAAU,UACV8/J,oBAAqB,aACrB9uE,cAAe,UACfC,mBAAoB,wBACpBiiB,WAAY,QACZ5b,YAAa,MAEjBryF,QACI+xB,EACA49C,EACA0rF,EACAV,EACAnnF,EACAD,GAEJ51D,WAAY,SAAUjlB,GAClB4E,EAAOf,GAAGohB,WAAWld,KAAKnI,KAAMI,GAC5BJ,KAAKyjK,cAAgBzjK,KAAKI,QAAQ+2E,cAAe,EACjDn3E,KAAKjI,QAAQ6xB,IAAIytD,EAAO,IAAMwrF,EAAa7iK,KAAKyjK,eACxCzjK,KAAKyjK,cAAgBzjK,KAAKI,QAAQ+2E,YAC1Cn3E,KAAKq7H,cAETr7H,KAAK09F,aACL19F,KAAKwX,WAETgP,MAAO,WACH,MAAO9vB,GAAEsJ,KAAKg1E,SAElBlvD,QAAS,WACL9lB,KAAK3G,QAAQuwB,IAAIo5I,GACjBhjK,KAAK4kB,WAAW/c,OAAO4xB,EAAQz5B,KAAK25E,iBACpC30E,EAAOf,GAAG6hB,QAAQ3d,KAAKnI,OAE3Bu6E,cAAe,SAAUt/E,GAAV,GAGP2C,GAFAgJ,EAAO5G,KACP4kB,EAAa3pB,KAEjB2pB,GAAaluB,EAAEqP,QAAQ6e,IAAgBppB,KAAMopB,GAAeA,EAC5DA,EAAa1sB,EAAMsD,KAAKE,WAAW2sC,OAAOzjB,GACtChe,EAAKge,YACLhe,EAAKge,WAAW/c,OAAO4xB,EAAQ7yB,EAAK+yE,iBACpC/yE,EAAK88J,SACL98J,EAAKwlD,OAAM,GACXxlD,EAAK+8J,gBAAiB,EACtB/lK,EAAQgJ,EAAKhJ,QACbgJ,EAAKhJ,UACLgJ,EAAKg9J,KAAK,WACNh9J,EAAKhJ,MAAMA,MAGfgJ,EAAK+yE,gBAAkBjjF,EAAEsP,MAAMY,EAAK4Q,QAAS5Q,GAEjDA,EAAKge,WAAaA,EAAWxd,KAAKqyB,EAAQ7yB,EAAK+yE,iBAC/C/yE,EAAKsuF,YAAYtwE,EAAW/gB,UACK,IAA7B+gB,EAAW+D,OAAO/wB,OAClBgP,EAAK4Q,UACE5Q,EAAKxG,QAAQ4oD,UACpBpkC,EAAWs8B,SAGnBjf,KAAM,WACF,MAAOjiC,MAAK4kB,WAAWq+B,qBAE3BsgH,kBAAmB,WAAA,GACX38J,GAAO5G,KACPiiC,EAAOr7B,EAAKq7B,MACZr7B,GAAKwlD,UAAYxlD,EAAKi9J,iBAAmBj9J,EAAKs5C,QAAUje,IACxDr7B,EAAKs5C,MAAQje,EACbr7B,EAAKoB,QAAQ+6J,KAGrBzkE,WAAY,SAAUn4E,GAClB,GAAI7C,GAAStjB,KAAKu+F,YAClB,OAAO7nG,GAAEsc,IAAImT,EAAW,SAAUM,GAC9B,MAAOnD,GAAOmD,MAGtBjP,QAAS,SAAUvP,GAAV,GAKDjJ,GAJA4H,EAAO5G,KACP22B,EAAS1uB,GAAKA,EAAE0uB,OAChBsqE,EAA0B,eAAXtqE,EACfooE,EAAW/+F,KAAKm/F,YAEhBv4F,GAAKwqG,QAGTxqG,EAAK+8J,gBAAiB,EACjB/8J,EAAKq8J,WAiBFr8J,EAAK08J,cACL18J,EAAK08J,cAAa,GAEtB18J,EAAK28J,sBAnBDxkE,GACAn4F,EAAK2tB,MAAM,GAEf3tB,EAAKk9J,cACAntI,IAAU/vB,EAAK42F,QAAQ5lG,QAAWmnG,GAAan4F,EAAKxG,QAAQ4gG,kBAQ7Dp6F,EAAKwlD,OAAM,GACXxlD,EAAK28J,sBARL38J,EAAKi9J,iBAAkB,EACvBj9J,EAAKhJ,MAAMgJ,EAAK42F,SAAS,GAAMtjC,KAAK,WAChCtzD,EAAKwlD,OAAM,GACXxlD,EAAKi9J,iBAAkB,EACvBj9J,EAAK28J,yBAYbtiE,GAA2B,WAAXtqE,KAChB33B,EAAS0xF,EAAgB9pF,EAAKs8J,mBAAoBj7J,EAAEue,OAChDxnB,EAAO8xF,QAAQl5F,SACXqpG,EACAr6F,EAAKoB,QAAQ,sBAAwBwe,MAAOxnB,EAAO8xF,UAEnDlqF,EAAKhJ,MAAMgJ,EAAK03F,WAAWt/F,EAAO+xF,cAI9CnqF,EAAKq8J,WAAY,IAErB1jE,SAAU,SAAUlpC,GAGhB,MAFAr2D,MAAKmjK,iBAAiB/6J,OAAOiuD,EAAU,GACvCr2D,KAAKw9F,QAAQp1F,OAAOiuD,EAAU,IAE1BA,SAAUA,EACV5vC,SAAUzmB,KAAKkjK,mBAAmB96J,OAAOiuD,EAAU,GAAG,KAG9DmpC,SAAU,SAAU5hG,GAChBoC,KAAKw9F,QAAU3lD,EAAQj6C,IAE3BA,MAAO,SAAUA,EAAOmmK,GAAjB,GAYCC,GAXAp9J,EAAO5G,IACX,OAAIpC,KAAUhH,EACHgQ,EAAK42F,QAAQh3F,SAEV,OAAV5I,IACAA,MAEJA,EAAQi6C,EAAQj6C,GACXgJ,EAAK64F,gBAAkD,aAAhC74F,EAAK64F,eAAejzD,UAC5C5lC,EAAK64F,eAAiB/oG,EAAEylD,YAExB6nH,EAA0C,aAA5Bp9J,EAAKxG,QAAQ+2E,YAA6BvwE,EAAKkuB,SAASl9B,QAAUgG,EAAMhG,QACtFosK,GAAgBpmK,EAAMhG,QACtBgP,EAAKkuB,WAETluB,EAAK42F,QAAU5/F,GACXgJ,EAAKwlD,UAAYxlD,EAAKwqG,QAAUxqG,EAAK+8J,gBAAkBI,IACvDn9J,EAAKq9J,iBAAiBrmK,GAEnBgJ,EAAK64F,iBAEhBwkE,iBAAkB,SAAUrmK,GAAV,GACqG2uC,GAC1GzxC,EACI6C,EAFTiJ,EAAO5G,KAAMkkK,EAAWt9J,EAAKu9J,UAAWnrD,EAAcpyG,EAAK23F,aAAcoX,EAAa/uG,EAAKxG,QAAQu1G,WAAkBr9G,GAAQ,EAAO8rK,IACxI,KAAStpK,EAAI,EAAGA,EAAI8C,EAAMhG,OAAQkD,IAC9B,IAAS6C,EAAM,EAAGA,EAAMumK,EAAStsK,OAAQ+F,IACrC4uC,EAAO23H,EAASvmK,GAAK4uC,KACjBA,IACAj0C,EAAQ6oK,EAAY50H,GAAQ3uC,EAAM9C,KAAOyxC,EAAO3uC,EAAM9C,KAAOk+G,EAAYzsE,GACrEj0C,GACA8rK,EAAat8J,KAAKo8J,EAASvmK,GAAKwU,OAKhD,OAAIiyJ,GAAaxsK,SAAWgG,EAAMhG,QAC9BgP,EAAK42F,WACL52F,EAAKkuB,OAAOsvI,GACZ,IAEoC,kBAA7Bx9J,GAAKxG,QAAQ25F,YACpBnzF,EAAKxG,QAAQ25F,aACTn8F,MAAmC,aAA5BoC,KAAKI,QAAQ+2E,WAA4Bv5E,EAAQA,EAAM,GAC9Di7C,QAAS,SAAUiG,GACI,UAAf62D,EACA/uG,EAAKy9J,gBAAgBvlH,GACC,aAAf62D,GACP/uG,EAAK09J,mBAAmBxlH,MAKpCl4C,EAAKkuB,aAZT,IAeJuvI,gBAAiB,SAAUE,GAMvB,GAJIA,EADAA,IAAY3tK,GAAa2tK,QAA8B,OAAZA,KAGjC1sH,EAAQ0sH,GAEjBA,EAAQ3sK,OAEN,CACH,GAAIo9F,GAAUh1F,KAAKq/F,cAAcrK,OAC7BA,GAAQp9F,QACRoI,KAAKy5F,eAAezE,UAJxBuvE,OAOJvkK,MAAK80B,OAAOyvI,IAEhBD,mBAAoB,SAAUn+I,GAAV,GACZ6uE,GAASkK,EAuBApkG,CAjBb,IAJIqrB,EADAA,IAAcvvB,GAA2B,OAAduvB,KAGf0xB,EAAQ1xB,GAEnBA,EAAUvuB,OAER,CAeH,IAdAo9F,EAAUt+F,EAAEsc,IAAIhT,KAAKkjK,mBAAoB,SAAU32H,EAAMp6B,GACrD,OACIA,MAAOA,EACPsU,SAAU8lB,KAGlB2yD,EAAQxoG,EAAEsc,IAAImT,EAAW,SAAUomB,EAAMp6B,GACrC,OACIA,MAAOA,EACPsU,SAAU8lB,KAGlBvsC,KAAKkjK,mBAAqB/8I,EAC1BnmB,KAAKmjK,oBACIroK,EAAI,EAAGA,EAAIkF,KAAKkjK,mBAAmBtrK,OAAQkD,IAChDkF,KAAKmjK,iBAAiBr7J,KAAKlR,EAE/BoJ,MAAKy5F,eAAezE,EAASkK,GACzBl/F,KAAKy/F,gBACLz/F,KAAKy/F,eAAerjD,cArBxBp8C,MAAK80B,cAyBb0vI,cAAe,SAAUryJ,GAAV,GACPyS,GAAa5kB,KAAK4kB,WAClB6iB,EAAOznC,KAAKykK,UACZn2H,EAAStuC,KAAKojK,YACdpkK,EAAStI,EAAEylD,WACXuoH,KACAhS,EAAM9zJ,KAAKpE,MAAM2X,EAAQs1B,GAAQA,EACjCkrH,EAAO/zJ,KAAK2iD,KAAKpvC,EAAQs1B,GAAQA,EACjCk9H,EAAQhS,IAASD,GAAOC,IACxBD,EACAC,EAuBJ,OArBAj8J,GAAEgH,KAAKinK,EAAO,SAAU9uB,EAAG5zG,GAAb,GAGNsd,GAFA5nD,EAAMsqC,EAAOwF,EACbm9H,EAAgBt2H,EAAOrM,EAEtB2iI,IAAiBA,EAAcjtK,MAAQA,EAUxC4nD,EAAWqlH,EAAcrlH,UATzBA,EAAW7oD,EAAEylD,WACb7N,EAAOrM,IACHtqC,IAAKA,EACL4nD,SAAUA,GAEd36B,EAAWw+B,kBAAkBnhB,EAAMwF,EAAM,WACrC8X,EAASnD,aAKjBsoH,EAAK58J,KAAKy3C,KAEd7oD,EAAE0nD,KAAKt3C,MAAMpQ,EAAGguK,GAAMrmH,KAAK,WACvBr/C,EAAOo9C,YAEJp9C,GAEXqjD,SAAU,SAAUkiH,GAChB,GAAI39J,GAAO5G,KAAMynC,EAAOznC,KAAKykK,UAAWI,GAAej+J,EAAKy8J,cAAczrK,MAc1E,OAbK6qK,GAAgB77J,EAAKk+J,mBACtBl+J,EAAKk+J,gBAAkBpuK,EAAEylD,WACzBv1C,EAAKy8J,kBAET3sK,EAAEgH,KAAK6mK,EAAS,SAAU1uB,EAAG1jI,GACzBvL,EAAKy8J,cAAcv7J,KAAKlB,EAAK49J,cAAc59J,EAAKm+J,SAAS5yJ,EAAOs1B,OAEhEo9H,GACAnuK,EAAE0nD,KAAKt3C,MAAMpQ,EAAGkQ,EAAKy8J,eAAenpG,KAAK,WACrCtzD,EAAKy8J,iBACLz8J,EAAKk+J,gBAAgB1oH,YAGtBx1C,EAAKk+J,iBAEhBE,cAAe,SAAUr8I,EAAMxW,GAAhB,GACP27B,GAEShzC,CADb,IAA0B,UAAtBkF,KAAKI,QAAQlB,KACb,IAASpE,EAAI,EAAGA,EAAI6tB,EAAK/wB,OAAQkD,IAAK,CAElC,GADAgzC,EAAQnlB,EAAK7tB,GAAG0rB,QACZsnB,EAAMl2C,QAAUua,GAGhB,MAAO27B,GAAM37B,EAFbA,IAAgB27B,EAAMl2C,OAMlC,MAAO+wB,GAAKxW,IAEhB8yJ,UAAW,SAAUhjI,EAAMwF,GACvB,MAAOznC,MAAK4kB,WAAW68B,WAAWxf,EAAMrjC,KAAKoT,IAAIiwB,EAAOwF,EAAMznC,KAAK4kB,WAAWqjB,WAElFyzD,gBAAiB,SAAUvpF,GAAV,GACTs1B,GAAOznC,KAAKykK,UACZxiI,EAAOjiC,KAAK+kK,SAAS5yJ,EAAOs1B,GAC5B9e,EAAO3oB,KAAKilK,UAAUhjI,EAAMwF,EAChC,OAAOznC,MAAKglK,cAAcr8I,GAAOxW,EAAQ8vB,KAE7Cs0D,kBAAmB,WACf,MAAOv2F,MAAKkjK,mBAAmB18J,SAEnCs1F,WAAY,SAAUl+F,GAClBoC,KAAK67D,QAAQl8D,UAAUK,KAAK67D,QAAQl8D,YAAc/B,IAEtDqwE,SAAU,SAAU58D,GAChBrR,KAAK67D,QAAQl8D,UAAU0R,IAE3BonF,cAAe,SAAUtmF,GACrBnS,KAAKiuE,SAAS97D,EAAQnS,KAAKI,QAAQigG,aAEvC9rE,MAAO,SAAUkzD,GAAV,GACC1vF,GAASoa,EAAO3W,EAAMmQ,EAObhO,EAmCL04D,EA1C2BgqC,EAAargG,KAAKI,QAAQigG,WAAYx8E,EAAK7jB,KAAKq9F,UAAW6zB,GAAe,CAC7G,IAAIzpC,IAAc7wF,EAEd,MADA+U,GAAU3L,KAAKjI,QAAQuvB,KAAK,IAAM+pE,GAC3B1lF,EAAQ/T,OAAS+T,EAAU,IAEtC,IAAyB,kBAAd87E,GAEP,IADAjsF,EAAOwE,KAAK4kB,WAAWwB,WACdzoB,EAAM,EAAGA,EAAMnC,EAAK5D,OAAQ+F,IACjC,GAAI8pF,EAAUjsF,EAAKmC,IAAO,CACtB8pF,EAAY9pF,CACZ,OAcZ,MAVI8pF,aAAqB3rF,SACrB2rF,EAAYy5E,EAASz5E,IAErBhyE,MAAMgyE,IACN1vF,EAAUrB,EAAE+wF,GACZt1E,EAAQE,SAAS3b,EAAEqB,GAASmL,KAAK,qBAAsB,MAEvDiP,EAAQs1E,EACR1vF,EAAUiI,KAAKklK,mBAAmB/yJ,IAElCA,QACAnS,KAAKjI,QAAQuvB,KAAK,IAAM+pE,GAAS1mC,YAAY0mC,GAC7CrxF,KAAKmlK,cAAgBvuK,EACrB,IAEAmB,EAAQH,QACJG,EAAQ8B,SAASw3F,KACjB6/B,GAAe,GAEflxH,KAAKmlK,gBAAkBvuK,IACvB+U,EAAU3L,KAAKklK,mBAAmBllK,KAAKmlK,eACvCx5J,EAAQg/C,YAAY0mC,GAASjsE,WAAW,MACpC8rG,GACAlxH,KAAKgI,QAAQizE,IAGrBj7E,KAAKmlK,cAAgBhzJ,EACrBpa,EAAQuC,SAAS+2F,GAASnuF,KAAK,KAAM2gB,GACjCwyC,EAAWr2D,KAAKolK,oBAAoBjzJ,GACvB,QAAbkkD,EACAr2D,KAAKiuE,SAAS97D,EAAQkuF,GACF,WAAbhqC,EACPr2D,KAAKiuE,SAAS97D,EAAQkuF,EAAaA,EAAargG,KAAKqlK,eACjC,cAAbhvG,GACPr2D,KAAKiuE,SAAS97D,EAAQkuF,GAEtB6wB,GACAlxH,KAAKgI,QAAQkzE,KAGjBl7E,KAAKmlK,cAAgBhzJ,EACrBnS,KAAKwmB,QAAQmkC,YAAY0mC,GACzBrxF,KAAKy4F,cAActmF,IA3BvB,IA8BJwsF,WAAY,WACR,MAAO3+F,MAAKmlK,eAEhBnqE,WAAY,WACRh7F,KAAKiuE,SAAS,GACdjuE,KAAKu0B,MAAM,IAEf2mE,UAAW,WACP,GAAI/xF,GAAYnJ,KAAK4kB,WAAWqjB,OAChCjoC,MAAKiuE,SAASjuE,KAAKslK,gBAAgB3+I,cACnC3mB,KAAKu0B,MAAMprB,IAEfmyF,UAAW,WAAA,GAEH3vF,GADAwG,EAAQnS,KAAKmlK,aAEjB,QAAK1vJ,MAAMtD,IAAUA,EAAQ,GACzBA,GAAS,EACTnS,KAAKu0B,MAAMpiB,GACXxG,EAAU3L,KAAKu0B,QACX5oB,GAAWA,EAAQ9R,SAAS,oBAC5BsY,GAAS,EACTnS,KAAKu0B,MAAMpiB,IAERA,IAEPA,EAAQnS,KAAK4kB,WAAWqjB,QAAU,EAClCjoC,KAAKu0B,MAAMpiB,GACJA,IAGfipF,UAAW,WAAA,GAGHzvF,GAFAwG,EAAQnS,KAAKmlK,cACbh8J,EAAYnJ,KAAK4kB,WAAWqjB,QAAU,CAE1C,QAAKxyB,MAAMtD,IAAUA,EAAQhJ,GACzBgJ,GAAS,EACTnS,KAAKu0B,MAAMpiB,GACXxG,EAAU3L,KAAKu0B,QACX5oB,GAAWA,EAAQ9R,SAAS,oBAC5BsY,GAAS,EACTnS,KAAKu0B,MAAMpiB,IAERA,IAEPA,EAAQ,EACRnS,KAAKu0B,MAAMpiB,GACJA,IAGfsnF,eAAgB,SAAUzE,EAASkK,GAC/BlK,EAAUA,MACVkK,EAAQA,OACJlK,EAAQp9F,QAAUsnG,EAAMtnG,SACxBoI,KAAKgI,QAAQyxB,GACTu7D,QAASA,EACTkK,MAAOA,KAInBpqE,OAAQ,SAAU2yD,GAAV,GACaqX,GAA0JymE,EAAmBhmH,EAAUvgD,EA6BpMk7D,EA7BAtzD,EAAO5G,KAAeg/F,EAA8C,aAA5Bp4F,EAAKxG,QAAQ+2E,WAA2BquF,EAAkB/C,EAAgB77J,EAAKk+J,iBAAkB/lE,EAAW/+F,KAAKm/F,aAAmDnK,IAChN,OAAIvN,KAAc7wF,EACPgQ,EAAKu8J,iBAAiB38J,SAE5BI,EAAK6+J,iBAAoD,aAAjC7+J,EAAK6+J,gBAAgBj5H,UAC9C5lC,EAAK6+J,gBAAkB/uK,EAAEylD,YAE7B2iD,EAAUl4F,EAAK8+J,aAAaj+E,GAC5B89E,EAAoBvmE,IAAoBD,GAAYmiE,EAASpiE,KAAaoiE,EAASlhK,KAAKmjK,kBACxFnuE,EAAUpuF,EAAK++J,uBAAuB7mE,GAClC9J,EAAQp9F,SAAWknG,EAAQlnG,QAAU2tK,GACrC3+J,EAAK6yF,eAAezE,GAChBpuF,EAAK64F,gBACL74F,EAAK64F,eAAerjD,UAEjBx1C,EAAK6+J,gBAAgBrpH,UAAUj7C,YAEnB,IAAnB29F,EAAQlnG,QAAgBknG,EAAQ,UAChCA,MAEJ9/F,EAAS4H,EAAKy4F,UAAUP,GACxB9J,EAAUh2F,EAAOg2F,QACjB8J,EAAU9/F,EAAO8/F,QACbE,IACAwmE,GAAkB,EACd1mE,EAAQlnG,SACRknG,GAAWoiE,EAASpiE,MAGxB5kC,EAAO,WACP,GAAIglC,GAAQt4F,EAAKi9B,QAAQi7D,EACzBl4F,GAAK2tB,MAAMuqE,GACXl4F,EAAK6yF,eAAezE,EAASkK,GACzBt4F,EAAK64F,gBACL74F,EAAK64F,eAAerjD,UAExBx1C,EAAK6+J,gBAAgBrpH,WAEzBmD,EAAW34C,EAAKy7C,SAASy8C,GACpB0mE,IACGjmH,EACAA,EAAS2a,KAAKA,GAEdA,KAGDtzD,EAAK6+J,gBAAgBtkK,aAEhCirD,MAAO,SAAUA,GACb,MAAIA,KAAUx1D,EACHoJ,KAAK4lK,cAEhB5lK,KAAK4lK,aAAex5G,EAApBpsD,IAEJ4jK,KAAM,SAAUjjJ,GACZ3gB,KAAKoxG,OAAQ,EACbprG,EAAM2a,IAAY3gB,MAClBA,KAAKoxG,OAAQ,GAEjBlc,YAAa,SAAUrxF,GACnB7D,KAAK+gG,cAAgBrqG,EAAEgK,UAAWmD,IAEtCs7F,WAAY,WAIR,MAHKn/F,MAAK+gG,eACN/gG,KAAKk1F,YAAYl1F,KAAK4kB,WAAW/gB,WAE7B3L,EAAMsD,KAAKuvC,MAAMY,eAAe3rC,KAAK4kB,WAAW/gB,SAAU7D,KAAK+gG,gBAE3EnC,WAAYloG,EAAEkK,KACdskK,mBAAoB,SAAU/yJ,GAC1B,MAAOnS,MAAKwmB,QAAQ3iB,OAAO,SAAUlG,EAAK5F,GACtC,MAAOoa,KAAUE,SAAS3b,EAAEqB,GAASmL,KAAK,qBAAsB,OAGxE2iK,sBAAuB,SAAUp/I,GAAV,GAC6C1uB,GAASO,EAChEwC,EADLopK,EAAWlkK,KAAKmkK,UAAWnrD,EAAch5G,KAAKu+F,YAClD,KAASzjG,EAAI,EAAGA,EAAIopK,EAAStsK,OAAQkD,IAEjC,GADAxC,EAAQ4rK,EAASppK,GAAGyxC,MAAQ40H,EAAY+C,EAASppK,GAAGyxC,MAAQ23H,EAASppK,GAAGyxC,OAAS9lB,EAAWuyF,EAAYkrD,EAASppK,GAAGyxC,QAAUysE,EAAYvyF,GAC/H,CACP1uB,EAAUmsK,EAASppK,EACnB,OAGR,MAAO/C,GAAUiI,KAAKklK,mBAAmBntK,EAAQoa,OAASzb,KAE9DgtK,OAAQ,WACJ1jK,KAAKhB,OAASpI,EACdoJ,KAAK8lK,eAAiBlvK,EACtBoJ,KAAKkgD,MAAQtpD,EACbF,EAAEsJ,KAAKslK,iBAAiBp9I,SACxBloB,KAAKslK,gBAAkB1uK,EACvBoJ,KAAKjI,QAAQ+3C,SAEjB6nD,QAAS,WACL,GAAIouE,KAAY/lK,KAAK4kB,WAAW+D,OAAO/wB,OAAQsB,EAAS8G,KAAKI,QAAQlH,OAAQmnG,EAAargG,KAAKI,QAAQigG,WAAYp4D,EAAQjoC,KAAK4kB,WAAWqjB,OAM3I,OALK89H,GAEM7sK,EAASmnG,EAAap4D,IAC7B/uC,EAAS+uC,EAAQo4D,GAFjBnnG,EAAS,EAINA,GAEX8sK,gBAAiB,WACb,GAAI9sK,GAAS8G,KAAK23F,SAClB33F,MAAK67D,QAAQ3iE,OAAOA,GACpB8G,KAAKqlK,cAAgBnsK,GAEzB+f,aAAc,WACV,MAAOjZ,MAAKqlK,eAEhBD,oBAAqB,SAAUjzJ,GAC3B,GAAgOkkD,GAA5N12D,EAAYK,KAAK67D,QAAQl8D,YAAasZ,EAAejZ,KAAKqlK,cAAehlE,EAAargG,KAAKI,QAAQigG,WAAY4lE,EAAY9zJ,EAAQkuF,EAAY6lE,EAAeD,EAAY5lE,EAAY8lE,EAAYxmK,EAAYsZ,CAUlN,OARIo9C,GADA4vG,IAActmK,EAAY0gG,GAAc6lE,EAAevmK,GAAasmK,EAAYtmK,EACrE,MACJsmK,IAAcE,GAAaF,EAAYE,GAAaA,EAAYD,EAC5D,SACJD,GAAatmK,GAAasmK,GAAatmK,GAAasZ,EAAeonF,GAC/D,WAEA,aAInB3C,WAAY,WAAA,GAQC3+F,GAPLqB,EAAUJ,KAAKI,QACfkhF,GACA7+E,SAAUrC,EAAQqC,SAClB8/J,oBAAqBniK,EAAQmiK,oBAC7B9uE,cAAerzF,EAAQqzF,cACvBC,mBAAoBtzF,EAAQszF,mBAEhC,KAAS30F,IAAOuiF,GACkB,kBAAnBA,GAAUviF,KACjBuiF,EAAUviF,GAAO7G,EAAMuK,SAAS6+E,EAAUviF,IAAQ,IAG1DiB,MAAKshF,UAAYA,GAErB8kF,eAAgB,SAAUruK,EAAS2b,GAE/B,IADA,GAAgB64B,GAAZ/lB,KAAkB65E,EAAargG,KAAKI,QAAQigG,WAAa,KACtD3sF,KAAU,GACb64B,EAAOhvC,SAASma,cAAc,MAC9B60B,EAAKm0C,YACLn0C,EAAKtuC,UAAY4kK,EAAc,IAAMvoB,EACrC/tG,EAAK7uB,aAAa,OAAQ,UAC1B6uB,EAAKzyC,MAAMZ,OAASmnG,EACpB9zD,EAAKzyC,MAAM6tJ,UAAYtnD,EACvBtoG,EAAQ+f,YAAYy0B,GACpB/lB,EAAM1e,KAAKykC,EAEf,OAAO/lB,IAEX6/I,mBAAoB,WAAA,GAKPvrK,GAJLwzC,EAAStuC,KAAK4kB,WAAWq1B,QACzBsF,EAAW7oD,EAAEylD,UAGjB,KAFAoD,EAASnD,UACTp8C,KAAKojK,eACItoK,EAAI,EAAGA,EAAIwzC,EAAO12C,OAAQkD,IAC/BkF,KAAKojK,YAAY90H,EAAOxzC,GAAGmU,QACvBtX,IAAK22C,EAAOxzC,GAAGnD,IACf4nD,SAAUA,IAItBukH,YAAa,WACT,GAAIl9J,GAAO5G,KAAM67D,EAAUj1D,EAAKi1D,QAAQp4C,IAAI,GAAIrjB,EAAUwG,EAAKxG,QAASwkB,EAAahe,EAAKge,UACtFhe,GAAKwlD,SACLxlD,EAAK88J,SAET98J,EAAKy/J,qBACLz/J,EAAK0/J,oBACL1/J,EAAKo/J,kBACLp/J,EAAK69J,UAAYrD,EAAax6J,EAAKy+J,cAAejlK,EAAQihK,YAAajhK,EAAQigG,YAC3Ez5F,EAAK69J,UAAY7/I,EAAWqjB,UAC5BrhC,EAAK69J,UAAY7/I,EAAWqjB,SAEhCrhC,EAAKouE,OAASpuE,EAAKw/J,eAAex/J,EAAK7O,QAAQ,GAAI6O,EAAK69J,WACxD79J,EAAK2/J,WAAWnmK,EAAQigG,WAAaz7E,EAAWqjB,SAChDrhC,EAAKxG,QAAQlB,MAAQ0lB,EAAWkpB,aAAel2C,OAAS,QAAU,OACxC,SAAtBgP,EAAKxG,QAAQlB,KACb0H,EAAK6uF,OAAO30F,OAEZ8F,EAAK6uF,OAAOz7F,OAEhB4M,EAAK0c,OAAS1c,EAAK62F,QAAQ,WACvB72F,EAAK08J,cAAa,KAEtB18J,EAAK+2F,UAAY,SAAUh+F,EAAW4lB,GAClC,GAAIihJ,GAAU5/J,EAAK6/J,WAAW7/J,EAAK0c,OACnC,OAAO1c,GAAKk3F,aAAan+F,EAAW6mK,EAAQ7mK,EAAW4lB,KAE3D3e,EAAK08J,aAAe18J,EAAK8/J,aAAa3E,EAAelmG,EAASj1D,EAAK+2F,WAAYqkE,EAASp7J,EAAK+/J,aAAa//J,EAAKouE,OAAQt+E,EAAEsP,MAAMuC,EAAQ3B,MACvIA,EAAK08J,eACL18J,EAAK8xF,uBAAuB9xF,EAAKy+J,gBAErCkB,WAAY,SAAUrtK,GAAV,GACJ0tK,GASQC,EATOvB,EAAkBtlK,KAAKslK,eAM1C,IALKA,EAGDsB,EAAgBtB,EAAgB3+I,aAFhC2+I,EAAkBtlK,KAAKslK,gBAAkBxtJ,EAAY9X,KAAK67D,QAAQ,GAAIinG,GAItE5pK,IAAW0tK,EAEX,IADAtB,EAAgB1tJ,UAAY,GACrB1e,EAAS,GACR2tK,EAAYjoK,KAAKoT,IAAI9Y,EAAQ,MACjC4e,EAAYwtJ,GAAiBxrK,MAAMZ,OAAS2tK,EAAY,KACxD3tK,GAAU2tK,GAItBppE,QAAS,WACL,GAAIqpE,GAAqB,KAAMliJ,EAAa5kB,KAAK4kB,WAAYmiJ,EAAiBniJ,EAAWqd,OAAQ/iC,EAAOc,KAAKI,QAAQlB,KAAM+nC,EAAWjnC,KAAKykK,UAAWuC,IAMtJ,OALIpiJ,GAAWqiB,WAAaA,GACxBjnC,KAAK4jK,KAAK,WACNh/I,EAAWqiB,SAASA,KAGrB,SAAU90B,EAAO80J,GAAjB,GA2BKjoK,GAGQkoK,EACAttH,EACK9+C,EAAOwpB,EACRwpB,EACKye,EAAO46G,EAjC5BvgK,EAAO5G,IACX,IAAK4kB,EAAW48B,QAAQylH,EAAYhgI,GAkB7B,CAQH,GAPI8/H,IAAmBE,GACnBjnK,KAAK4jK,KAAK,WACNh/I,EAAWkzB,MAAMmvH,EAAYhgI,GAC7B8/H,EAAiBE,IAIZ,UAAT/nK,EAAkB,CAClB,IAAK8nK,EAAWC,GAGZ,IAFIC,EAAYF,EAAWC,MACvBrtH,EAASh1B,EAAW+D,OACf7tB,EAAI,EAAGwpB,EAAMs1B,EAAOhiD,OAAQkD,EAAIwpB,EAAKxpB,IAE1C,IADIgzC,EAAQ8L,EAAO9+C,GACVyxD,EAAI,EAAG46G,EAAcr5H,EAAMtnB,MAAM5uB,OAAQ20D,EAAI46G,EAAa56G,IAC/D26G,EAAUp/J,MACNykC,KAAMuB,EAAMtnB,MAAM+lC,GAClBze,MAAOA,EAAMlwC,OAK7BoB,GAASgoK,EAAWC,GAAY90J,EAAQ80J,OAExCjoK,GAAS4lB,EAAW+D,OAAOxW,EAAQ80J,EAEvC,OAAOjoK,GA3BP,MAhBI8nK,KAAuBG,IACvBH,EAAqBG,EACrBF,EAAiBE,EACbrgK,EAAKwgK,iBACLxgK,EAAKwgK,gBAAgB9nH,SAEzB14C,EAAKwgK,gBAAkBxgK,EAAK49J,cAAcyC,GAC1CrgK,EAAKwgK,gBAAgB/oH,KAAK,WACtB,GAAIgpH,GAAiBzgK,EAAK0gK,iBAAiB1gK,EAAKi1D,QAAQ,GAAGl8D,UAC3DiH,GAAKwgK,gBAAkB,KACnBH,GAAcI,GAAkBA,GAAkBJ,EAAahgI,IAC/DrgC,EAAKq8J,WAAY,EACjBr+I,EAAWkzB,MAAMmvH,EAAYhgI,OAIlC,OA+BnB62D,aAAc,SAAUn+F,EAAW4wC,GAArB,GAGFg3H,GAFJz5H,EAAQ9tC,KAAKwnK,oBAAqBnnE,EAAargG,KAAKI,QAAQigG,WAAYonE,EAA4B7oK,KAAKpE,OAAOmF,EAAY4wC,EAAKjxC,KAAO+gG,GAAaqnE,EAAuBn3H,EAAK/pB,MAAMihJ,EAQ3L,OAPIC,IAAwBA,EAAqBn7H,OACzCg7H,EAAoBG,EAAqB55H,MACzCy5H,IAAsBz5H,IACtB9tC,KAAKy1F,OAAO,GAAG79E,UAAY2vJ,GAAqB,GAChDvnK,KAAKwnK,oBAAsBD,IAG5Bh3H,GAEXo3H,YAAa,SAAUp7H,EAAMp6B,EAAOvU,GAAvB,GAWI9C,GAVT8sK,EAAW5nK,KAAKI,QAAQlB,KAAMmhG,EAAargG,KAAKI,QAAQigG,WAAYwnE,EAAe7nK,KAAKmlK,cAAe95G,GAAW,EAAO1/C,GAAU,EAAOi1F,GAAW,EAAO9yD,EAAQ,KAAMx1C,GAAQ,EAAO0gH,EAAch5G,KAAKu+F,YAShN,IARiB,UAAbqpE,IACIr7H,IACAq0D,EAAqB,IAAVzuF,GAAenS,KAAK8nK,eAAiB9nK,KAAK8nK,gBAAkBv7H,EAAKuB,MAC5E9tC,KAAK8nK,cAAgBv7H,EAAKuB,OAE9BA,EAAQvB,EAAOA,EAAKuB,MAAQ,KAC5BvB,EAAOA,EAAOA,EAAKA,KAAO,OAEzBvsC,KAAKm/F,cAAgBvhG,EAAMhG,QAAU20C,EACtC,IAASzxC,EAAI,EAAGA,EAAI8C,EAAMhG,OAAQkD,IAE9B,GADAxC,EAAQ6oK,EAAY50H,GAAQ3uC,EAAM9C,KAAOyxC,EAAO3uC,EAAM9C,KAAOk+G,EAAYzsE,GAC9D,CACP3uC,EAAMwK,OAAOtN,EAAG,GAChBuwD,GAAW,CACX,OAOZ,MAHIw8G,KAAiB11J,IACjBxG,GAAU,IAGV4gC,KAAMA,EAAOA,EAAO,KACpBuB,MAAOA,EACP8yD,SAAUA,EACVv1C,SAAUA,EACV1/C,QAASA,EACTwG,MAAOA,EACP7S,IAAK6S,EAAQkuF,IAGrB0nE,OAAQ,SAAU51J,GAAV,GACsEo6B,GAGjEzxC,EAAWlD,EAHhB6sK,EAAYzkK,KAAKykK,UAAW7mK,EAAQoC,KAAKw9F,QAAQh3F,QAASggB,IAG9D,KAFAxmB,KAAKk6C,SACLl6C,KAAK8nK,cAAgB,KACZhtK,EAAIqX,EAAOva,EAASua,EAAQsyJ,EAAW3pK,EAAIlD,EAAQkD,IACxDyxC,EAAOvsC,KAAK2nK,YAAY3nK,KAAKsjB,OAAOxoB,EAAGqX,GAAQrX,EAAG8C,GAClD4oB,EAAM1e,KAAKykC,GACXvsC,KAAKk6C,MAAM3N,EAAKp6B,OAASo6B,CAG7B,OADAvsC,MAAKmkK,UAAY39I,EACVA,GAEXwhJ,wBAAyB,SAAUroK,EAAWmiK,GAC1C,GAAIt7I,GAAQxmB,KAAK+nK,OAAO/nK,KAAKioK,WAAWtoK,EAAWmiK,GACnD,QACI3vJ,MAAOqU,EAAM5uB,OAAS4uB,EAAM,GAAGrU,MAAQ,EACvC7S,IAAKknB,EAAM5uB,OAAS4uB,EAAM,GAAGlnB,IAAM,EACnCknB,MAAOA,IAGfigJ,WAAY,WAAA,GACJxtJ,GAAejZ,KAAKqlK,cAAejlK,EAAUJ,KAAKI,QAClD8nK,EAAevG,EAAcvhK,EAAS6Y,EAC1C,OAAOviB,GAAEsP,MAAM,SAAUpI,EAAO2nB,GAC5B,GAAIvmB,GAASgB,KAAKhB,OAAQ8iK,EAAgB9hK,KAAK8lK,cAM/C,QALIvgJ,GAAUvmB,GAAWkpK,EAAalpK,EAAQpB,EAAOkkK,KACjD9iK,EAASgB,KAAKgoK,wBAAwBpqK,EAAOkkK,IAEjD9hK,KAAK8lK,eAAiBloK,EACtBoC,KAAKhB,OAASA,EACPA,GACRgB,OAEP0mK,aAAc,SAAUpjJ,EAAQ3C,GAC5B,GAAIhV,EACJ,OAAO,UAAU4Z,GACb,GAAI4iJ,GAAS7kJ,EAAOiC,EAChB4iJ,KAAWx8J,IACXA,EAAUw8J,EACVxnJ,EAASwnJ,EAAQ5iJ,MAI7BohJ,aAAc,SAAUp2H,EAAMoyF,GAAhB,GACN/7H,GAAO5G,KACPpI,EAAS24C,EAAK34C,OACdwwK,IAAiBxV,EAAAA,EAErB,OADAjwB,GAAUjsI,EAAEsP,MAAMk8J,EAAKv/B,EAAS3iI,KAAKshF,WAAYthF,MAC1C,SAAUqoK,EAAOjpK,EAAQmmB,GAAzB,GAECuyB,GAAOwwH,EADPh/D,EAAOlqG,EAASgpK,CAEhB7iJ,IAAS3mB,KAAKC,IAAIyqG,IAAS1xG,GAC3BkgD,EAAQvH,EACR+3H,EAASD,IAETvwH,EAAQwqH,EAAQ/xH,EAAM+4D,GACtBg/D,EAASh/D,EAAO,EAAI++D,EAAM7hK,OAAO8iG,GAAQ++D,EAAM7hK,MAAM,GAAI8iG,IAE7Dq5B,EAAQ7qF,EAAOwwH,EAAQ1hK,EAAKwlD,SAC5Bg8G,EAAgBhpK,IAGxBmpK,aAAc,WACV,GAAInoK,GAAUJ,KAAKI,OACnB,OAAOqhK,GAAYzhK,KAAKqlK,cAAejlK,EAAQihK,YAAajhK,EAAQojK,iBAExE8D,iBAAkB,SAAUjxG,GACxB,GAAIouG,GAAYzkK,KAAKykK,UAAWpkE,EAAargG,KAAKI,QAAQigG,WAAYp4D,EAAQjoC,KAAK4kB,WAAWqjB,OAC9F,OAAOrpC,MAAKoT,IAAIpT,KAAKlG,IAAIuvC,EAAQw8H,EAAW,GAAI7lK,KAAKlG,IAAI,EAAGkG,KAAKpE,MAAM67D,EAAWgqC,MAEtF4nE,WAAY,SAAUtoK,EAAWmiK,GAC7B,GAAmCzrG,GAA/BmyG,EAAUxoK,KAAKuoK,cAEnB,OADAlyG,GAAW12D,GAAaA,EAAYmiK,EAAgB0G,EAAQxpJ,KAAOwpJ,EAAQvpJ,IACpEjf,KAAKsnK,iBAAiBjxG,IAEjCglE,YAAa,WACLr7H,KAAKI,QAAQ+2E,aACbn3E,KAAKyjK,aAAe/sK,EAAEsP,MAAMhG,KAAM,iBAClCA,KAAKjI,QAAQ2N,GAAG2xE,EAAQ2rF,EAAiB,IAAMH,EAAa7iK,KAAKyjK,gBAGzE9nE,gBAAiB,SAAU5jG,GACvB,MAAMA,aAAmB8sB,QAGlBxS,SAASta,EAAQmL,KAAK,qBAAsB,IAFxCtM,GAIf8uK,aAAc,SAAUj+E,GAAV,GACOjsF,GAGJmC,EAUT8qK,EAbAzpK,IACJ,IAAyB,kBAAdyoF,GAEP,IADAjsF,EAAOwE,KAAK4kB,WAAWwB,WACdzoB,EAAM,EAAGA,EAAMnC,EAAK5D,OAAQ+F,IACjC,GAAI8pF,EAAUjsF,EAAKmC,IAAO,CACtBqB,EAAO8I,KAAKnK,EACZ,OAcZ,MAVyB,gBAAd8pF,IACPzoF,EAAO8I,KAAK2/E,GAEZghF,EAAezoK,KAAK27F,gBAAgBlU,GACnChyE,MAAMgzJ,IACPzpK,EAAO8I,KAAK2gK,GAEZhhF,YAAqB3rF,SACrBkD,EAASyoF,GAENzoF,GAEXqgG,UAAW,SAAUP,GAAV,GACW1zC,GAAe3kC,EAAgN8lB,EAAMj0C,EAG1OqF,EAgBA7C,EAKQyxD,EAxBjByoC,KAAuC0zE,EAAkB1oK,KAAKmjK,iBAAkB5sE,EAAoBv2F,KAAKkjK,mBAAoB7sG,EAAW,EAAG8gB,EAAan3E,KAAKI,QAAQ+2E,WAAYwxF,EAAwB,EAAG3vD,EAAch5G,KAAKu+F,aAA2Bv/F,EAAS,IAEvQ,IADA8/F,EAAUA,EAAQt4F,QACd2wE,KAAe,GAAS2nB,EAAQlnG,QAgB7B,GAAmB,aAAfu/E,EACP,IAASr8E,EAAI,EAAGA,EAAIgkG,EAAQlnG,OAAQkD,IAAK,CAIrC,GAHAkE,EAAS,KACTq3D,EAAW3/D,EAAEuM,QAAQ67F,EAAQhkG,GAAI4tK,GACjCjiJ,EAAWzmB,KAAK07F,gBAAgBoD,EAAQhkG,IACpCu7D,QAAmB5vC,EACnB,IAAS8lC,EAAI,EAAGA,EAAIgqC,EAAkB3+F,OAAQ20D,IAC1Cj0D,EAAQ6oK,EAAY16I,GAAY8vE,EAAkBhqC,KAAO9lC,EAAWuyF,EAAYziB,EAAkBhqC,MAAQysD,EAAYvyF,GAClHnuB,IACAi0C,EAAOvsC,KAAKklK,mBAAmBpmE,EAAQhkG,IACvCkE,EAASgB,KAAK4oK,oBAAoBr8H,EAAMggB,EAAGuyC,EAAQhkG,GAAI6tK,QAI/Dv9G,GAAgBs9G,EAAgBryG,GAC5BjL,IAAkBx0D,IAClB21C,EAAOvsC,KAAKklK,mBAAmB95G,GAC/BpsD,EAASgB,KAAK4oK,oBAAoBr8H,EAAM8pB,EAAUjL,EAAeu9G,GAGrE3pK,KACA8/F,EAAQ12F,OAAOtN,EAAG,GAClBk6F,EAAQltF,KAAK9I,GACb2pK,IACA7tK,UAxCgC,CACxC,IAAS6C,EAAM,EAAGA,EAAM+qK,EAAgB9wK,OAAQ+F,IACxC+qK,EAAgB/qK,KAAS/G,EACzBoJ,KAAKklK,mBAAmBwD,EAAgB/qK,IAAMgtD,YAAY2qB,GACnDihB,EAAkB54F,IACzBqC,KAAK6lK,sBAAsBtvE,EAAkB54F,IAAMgtD,YAAY2qB,GAEnE0f,EAAQltF,MACJqK,MAAOu2J,EAAgB/qK,GACvB04D,SAAU14D,EACV8oB,SAAU8vE,EAAkB54F,IAGpCqC,MAAKw9F,WACLx9F,KAAKkjK,sBACLljK,KAAKmjK,oBA6BT,OACIrkE,QAASA,EACT9J,QAASA,IAGjB4zE,oBAAqB,SAAUr8H,EAAM8pB,EAAUjL,EAAeu9G,GAC1D,GAAIliJ,EACJ,IAAK8lB,EAAK1yC,SAAS,oBAOnB,MAJA0yC,GAAKoe,YAAY2qB,GACjBt1E,KAAKw9F,QAAQp1F,OAAOiuD,EAAU,GAC9Br2D,KAAKmjK,iBAAiB/6J,OAAOiuD,EAAU,GACvC5vC,EAAWzmB,KAAKkjK,mBAAmB96J,OAAOiuD,EAAU,GAAG,IAEnDlkD,MAAOi5C,EACPiL,SAAUA,EAAWsyG,EACrBliJ,SAAUA,IAGlBk/I,uBAAwB,SAAU7mE,GAAV,GAEhBlhG,GAAOuU,EAAOkkD,EAId9J,EALA5xD,EAAWqF,KAAKjI,QAAQ,GAAG4C,SAE3BuX,EAASlS,KAAKw9F,QACdxI,KACAr3F,EAAM,CAEV,IAAgC,aAA5BqC,KAAKI,QAAQ+2E,aAA8Bn3E,KAAKm/F,aAChD,QAEJ,IAAIL,EAAQ,QAWR,MAVApoG,GAAEiE,GAAUgwD,YAAY,oBACxBqqC,EAAUt+F,EAAEsc,IAAIhT,KAAKkjK,mBAAmB18J,MAAM,GAAI,SAAUigB,EAAU9oB,GAClE,OACI8oB,SAAUA,EACV4vC,SAAU14D,KAGlBqC,KAAKmjK,oBACLnjK,KAAKkjK,sBACLljK,KAAKw9F,WACExI,CAEX,MAAOr3F,EAAMmhG,EAAQlnG,OAAQ+F,IAAO,CAIhC,IAHA04D,KACAlkD,EAAQ2sF,EAAQnhG,GAChBC,EAAQoC,KAAKu+F,aAAav+F,KAAK07F,gBAAgBvpF,IAC1Co6C,EAAI,EAAGA,EAAIr6C,EAAOta,OAAQ20D,IAC3B,GAAI3uD,GAASsU,EAAOq6C,GAAI,CACpB8J,EAAW9J,CACX,OAGJ8J,OACA2+B,EAAQltF,KAAK9H,KAAKu/F,SAASlpC,IAC3B3/D,EAAEiE,EAASwX,IAAQw4C,YAAY,qBAGvC,MAAOqqC,IAEX+vE,SAAU,SAAU5yJ,EAAOs1B,GACvB,GAAIP,GAAO/0B,EAAQs1B,EAAO,EAAI7oC,KAAKpE,MAAM2X,EAAQs1B,GAAQ,CACzD,QAAQP,EAAO,GAAKO,GAExB5D,QAAS,SAAU0gI,GACf,GAAyG99I,GAAUoiJ,EAA/GjiK,EAAO5G,KAAMg/F,EAA8C,aAA5Bh/F,KAAKI,QAAQ+2E,WAA2BvyD,EAAa5kB,KAAK4kB,WAA+B6iB,EAAOznC,KAAKykK,UAAWzrD,EAAch5G,KAAKu+F,aAAcW,IAuBpL,OAtBIF,KACAp4F,EAAKu8J,oBACLv8J,EAAKs8J,sBACLt8J,EAAK42F,YAETqrE,EAAUjkJ,EAAWqd,OACrBvrC,EAAEgH,KAAK6mK,EAAS,SAAU1uB,EAAG1jI,GACzB,GAAI8vB,GAAOr7B,EAAKm+J,SAAS5yJ,EAAOs1B,EAChC7gC,GAAKg9J,KAAK,WACNh/I,EAAWkzB,MAAM7V,EAAMwF,GACvBhhB,EAAW7f,EAAKo+J,cAAcpgJ,EAAW+D,QAASxW,EAAQ8vB,IAC1Dr7B,EAAKu8J,iBAAiBr7J,KAAKqK,GAC3BvL,EAAKs8J,mBAAmBp7J,KAAK2e,GAC7B7f,EAAK42F,QAAQ11F,KAAKq5J,EAAY16I,GAAYA,EAAWuyF,EAAYvyF,IACjEy4E,EAAMp3F,MACFqK,MAAOA,EACPsU,SAAUA,IAEd7f,EAAKs+J,mBAAmB/yJ,GAAO7X,SAASg7E,GACxC1wD,EAAWkzB,MAAM+wH,EAASphI,OAG3By3D,GAEX4pE,cAAe,SAAU7gK,GACrB,GAAIskC,GAAO71C,EAAEuR,EAAE22B,gBACV32B,EAAE7D,sBAAwBmoC,EAAKrpC,KAAK,aACrClD,KAAKgI,QAAQqvE,GAAS9qC,KAAMA,KAGpC+5H,kBAAmB,WACftmK,KAAKu+F,aAAermG,EAAMorB,OAAOtjB,KAAKI,QAAQ4nD,iBAElD0wC,uBAAwB,SAAUx/F,GAC9B,GAAI6vK,GAAY/oK,KAAKwmB,QAAQpvB,QAASm+F,EAAcv1F,KAAKy1F,OAAQkD,EAAU,CACvEpD,GAAY,IAAuC,SAAjCA,EAAY,GAAGz7F,MAAMulB,UACxB,SAAXnmB,IACAy/F,EAAUzgG,EAAMC,QAAQof,aAE5BohF,GAAWx2F,WAAW4mK,EAAU9wK,IAAI,sBAAuB,IAAMkK,WAAW4mK,EAAUpuK,SAAS,YAAY1C,IAAI,SAAU,IACzHs9F,EAAYt9F,IAAI,gBAAiB0gG,MAI7CzgG,GAAMmpB,GAAG0yE,YAAcA,EACvB77F,EAAMmpB,GAAG8G,OAAO4rE,IAClBp9F,OAAOuB,MAAM2sB,QACRluB,OAAOuB,OACE,kBAAVzB,SAAwBA,OAAOgiC,IAAMhiC,OAAS,SAAUiiC,EAAIC,EAAIC,IACrEA,GAAMD,OAEV,SAAUniC,EAAGC,QACVA,OAAO,qBACH,aACA,WACA,wBACA,cACDD,IACL,WA2gBE,MA7fC,UAAUE,EAAGE,GAEV,QAASoyK,GAAajxK,GAClB,GAAsD4F,GAAK/F,EAAvDqxK,EAAWlxK,EAAQuvB,KAAKxD,EAAa,YAA0BgD,EAAQzF,EAAGyF,KAC9E,KAAKnpB,EAAM,EAAG/F,EAASqxK,EAASrxK,OAAQ+F,EAAM/F,EAAQ+F,IAClDzF,EAAM2uB,WAAWoiJ,EAAStrK,MAAUmpB,GAG5C,QAASoiJ,GAAwBjhK,GACxB/P,EAAMisB,iBAAiBlc,IACxBA,EAAE9D,iBA+NV,QAASglK,GAAY34H,GACjBA,EAAW9yC,KAAK,WACZxF,EAAM2uB,WAAWnwB,EAAEsJ,SAAWqhB,EAAGyF,SA3O5C,GACO5uB,GAAQvB,OAAOuB,MAAOopB,EAASppB,EAAMopB,OAAQD,EAAKC,EAAOD,GAAIne,EAAOhL,EAAMgL,KAAM8B,EAASqc,EAAGrc,OAAQq3D,EAAYnkE,EAAMmkE,UAAWz/B,EAAO,OAAQwsI,EAAa,gHAAiHC,EAAc,aAAchuG,EAAO,OAAQiuG,EAAa,YAAaC,EAAc,aAAc/tG,EAAiB,gBAAiBD,EAAmB,kBAAmBD,EAAO,OAAQnpB,EAAU,UAAWtoB,EAAY3xB,EAAM2xB,UAAW/F,EAAe5rB,EAAM4rB,aAAcE,EAAoB9rB,EAAM8rB,kBAAmBqR,EAAyBn9B,EAAMm9B,uBAYvmBumC,EAAO52D,EAAOtE,QACdC,KAAM,SAAU5I,EAASqI,GACrB4E,EAAOf,GAAGtD,KAAKwH,KAAKnI,KAAMjI,EAASqI,GACnCJ,KAAK6yB,UACLn8B,EAAEgK,OAAOV,KAAMI,GACfJ,KAAK8zD,WAAa9zD,KAAK8zD,YAAc9zD,KAAKwpK,kBAC1CxpK,KAAK+6B,MACA/6B,KAAKI,QAAQuzF,SAMd3zF,KAAKk1J,YALLl1J,KAAKypK,UACLzpK,KAAKk1J,WACLl1J,KAAK0pK,YACL1pK,KAAK2pK,WAKbjiK,QACIk1B,EACAysI,EACAhuG,EACAiuG,EACAC,EACAjuG,EACAnpB,EACAopB,EACAC,GAEJp7D,SACI8O,KAAM,OACNmrB,MAAO,GACPuvI,OAAQ,KACRC,UAAWnzK,EAAEkK,KACbw9I,QAAQ,EACRtqF,WAAY,GACZ01G,kBAAmB,GACnB1gJ,oBAAoB,EACpBghJ,SAAS,EACTpvK,MAAM,EACNquC,MAAO,KACPghI,WAAYpzK,OACZqzK,YACAb,aAAa,GAEjB1pJ,OAAQ,SAAUA,GACO,IAAVA,IACPA,GAAS,GAETA,EACAzf,KAAKi2J,QAAQn1J,OAEbd,KAAKi2J,QAAQj8J,QAGrB8rB,QAAS,WACD9lB,KAAK4pK,QACL5pK,KAAK4pK,OAAOjtG,OAAO38D,MAEvBA,KAAKgI,QAAQmqC,GACbntC,EAAOf,GAAG6hB,QAAQ3d,KAAKnI,MACnBA,KAAKgqK,UACLhqK,KAAKgqK,SAASlkJ,UAEd9lB,KAAKI,QAAQuzF,UACb3zF,KAAKjI,QAAQu9B,QAAQ20I,WAEzB/xK,EAAM4tB,QAAQ9lB,KAAKjI,UAEvBmyK,MAAO,WACHlqK,KAAK8lB,UACL9lB,KAAKjI,QAAQmwB,UAEjBo0C,kBAAmB,WACf,OAAIt8D,KAAKgI,QAAQqhK,GAAe1gJ,KAAM3oB,QAK1Cu8D,kBAAmB,WACf,OAAIv8D,KAAKgI,QAAQuhK,GAAe5gJ,KAAM3oB,QAK1Cw8D,UAAW,WACP,GAAIzkE,GAAUiI,KAAKjI,OACnBA,GAAQE,IAAI,UAAW,IAClB+H,KAAKmqK,OAINnqK,KAAKoqK,uBAHLpqK,KAAKmqK,QAAS,EACdnqK,KAAKgI,QAAQ40B,GAAQjU,KAAM3oB,QAI3BA,KAAK4pK,QACL5pK,KAAK4pK,OAAOtsG,OAAOt9D,MAEvBA,KAAKqqK,wBACLrqK,KAAKgI,QAAQqzD,GAAQ1yC,KAAM3oB,OAC3B9H,EAAM+oB,OAAOlpB,IAEjB0kE,QAAS,WACLz8D,KAAKgI,QAAQshK,GAAc3gJ,KAAM3oB,OACjCA,KAAKqqK,yBAET3tG,QAAS,WACL,GAAI91D,GAAO5G,IACX4G,GAAK7O,QAAQ+I,OACb8F,EAAKoB,QAAQszD,GAAQ3yC,KAAM/hB,IACvBA,EAAKgjK,QACLhjK,EAAKgjK,OAAO5hK,QAAQszD,GAChB3yC,KAAM/hB,EACNgjK,OAAQhjK,EAAKgjK,UAIzBvwG,iBAAkB,SAAUn6D,GACxBc,KAAKgI,QAAQuzD,GAAoBr8D,KAAMA,KAE3Co6D,gBAAiB,SAAUp6D,GACvBc,KAAKgI,QAAQwzD,GAAkBt8D,KAAMA,KAEzCmrK,sBAAuB,WACnB,GAAI/oJ,EAAO0H,0BAA2B,CAClC,GAAIshJ,GAAYpyK,EAAMC,QAAQgf,UAAYjf,EAAMC,QAAQgf,SAASyC,QAAS2wJ,EAAOjpJ,EAAO2H,YAAYshJ,QAAU,GAAIC,EAAkBlpJ,EAAO2H,YAAY1P,GAAGK,SAAW2wJ,EAAKrsK,QAAQ,cAAiBusK,EAAsC,SAATF,GAAmBA,EAAKrsK,QAAQ,eAAkBwsK,GAAgBJ,IAAaE,GAAqBC,EAAwC,SAAX,SAAqBE,GAAmBL,IAAaE,GAAqBC,EAAwC,SAAX,QACxczqK,MAAK67D,QAAQ5jE,KACTsqF,WAAYviF,KAAK0qK,GAAcxxK,SAC/BupF,cAAeziF,KAAK2qK,GAAiBzxK,aAIjDgmJ,eAAgB,WACZ,GAAIt4I,GAAO5G,IACX,OAAO4G,GAAKxG,QAAQ0pK,QAAUljK,EAAKi1D,QAAUj1D,EAAKgkK,iBAEtDzuK,MAAO,WACH,MAAO,IAAIkgE,GAAUr8D,OAEzB0pK,UAAW,WACP,GAAI9iK,GAAO5G,IACPshB,GAAO0H,4BAGPpiB,EAAKxG,QAAQ0pK,QACbljK,EAAKi1D,QAAQvhE,SAAS,sBAEtBsM,EAAKi1D,QAAQtyC,oBAAoB7yB,EAAEgK,OAAOkG,EAAKxG,QAAQ4pK,UACnDtvK,KAAMkM,EAAKxG,QAAQ1F,KACnB2uB,UAAWziB,EAAKxG,QAAQ0oB,sBAE5BliB,EAAKojK,SAAWpjK,EAAKi1D,QAAQrgE,KAAK,uBAClCoL,EAAKgkK,gBAAkBhkK,EAAKojK,SAASv8F,eAErCv1E,EAAMC,QAAQ4mB,sBACdroB,EAAEkQ,EAAK7O,SAAS2N,GAAG,YAAa,aAAcwjK,GACzCtiK,EAAKxG,QAAQ0oB,oBAAuBliB,EAAKxG,QAAQ0pK,SAClDpzK,EAAEkQ,EAAK7O,SAAS2N,GAAG,YAAa,cAAewjK,MAI3DS,OAAQ,WACJ,GAAI/iK,GAAO5G,KAAMjI,EAAU6O,EAAK7O,QAASgxC,EAAQniC,EAAKxG,QAAQ2oC,KACzC,iBAAVA,KACPA,EAAQ7wC,EAAMorB,OAAOylB,GAAOniC,EAAKxG,QAAQ2pK,aAE7CnjK,EAAKmiC,MAAQA,EACbigI,EAAajxK,GACb6O,EAAK7O,QAAQE,IAAI,UAAW,IACxB2O,EAAKxG,QAAQ+oK,cACTpgI,EACA7wC,EAAMkP,KAAKrP,EAASgxC,EAAO1nB,EAAInpB,EAAMmpB,GAAInpB,EAAMqpB,QAAQF,IAEvDC,EAAO3gB,KAAK5I,EAAQ4C,aAG5BiM,EAAK7O,QAAQE,IAAI,UAAW,SAEhC8iC,IAAK,WACD,GAAIhjC,GAAUiI,KAAKjI,QAAS8yK,EAAc9yK,EAAQmL,KAAK,OAAS,EAChElD,MAAK6jB,GAAKgG,EAAU9xB,EAAS,QAAU,IAAM8yK,EAC9B,KAAX7qK,KAAK6jB,KACL7jB,KAAK6jB,GAAK3rB,EAAMyrB,OAChB5rB,EAAQmL,KAAK,KAAMlD,KAAK6jB,MAGhC4lJ,QAAS,WACL,GAAIqB,GAAkBhnJ,EAAa,WAAY/rB,EAAUiI,KAAKjI,OAC9DA,GAAQuC,SAAS,WACjB0F,KAAKy1F,OAAS19F,EAAQ4C,SAASmpB,EAAa,WAAWxpB,SAAS,aAChE0F,KAAKw1F,OAASz9F,EAAQ4C,SAASmpB,EAAa,WAAWxpB,SAAS,aAC3DvC,EAAQ4C,SAASmwK,GAAiB,IACnC/yK,EAAQ41E,UAAU,QAAUzqE,EAAK,QAAU,qBAE/ClD,KAAK67D,QAAU9jE,EAAQ4C,SAASmpB,EAAa,YAAYxpB,SAAS,cAClE0F,KAAKjI,QAAQy1E,QAAQxtE,KAAKy1F,QAAQ3xC,OAAO9jD,KAAKw1F,QAC9Cx1F,KAAK4pK,OAAS5pK,KAAKI,QAAQypK,UAAU7pK,KAAK4pK,QACtC5pK,KAAK4pK,QACL5pK,KAAK4pK,OAAO9wH,MAAM94C,OAG1Bk1J,SAAU,WACNl1J,KAAKi2J,QAAUv/J,EAAE0yK,GAAYtyI,SAAS92B,KAAKjI,UAE/CqyK,oBAAqB,WAAA,GACbW,GAAYz1I,EAKJ3U,CAJR3gB,MAAKI,QAAQuzF,WACbo3E,EAAa/qK,KAAKjI,QAAQgzK,aAC1Bz1I,EAAQt1B,KAAKI,QAAQuzF,SAAS,GAC1Bo3E,IACIpqJ,EAAWjqB,EAAEsP,MAAMhG,KAAM,kBAAmB+qK,EAAYz1I,GACxD,qBAAqBp7B,KAAKo7B,EAAMI,SAChC/U,IAEA2U,EAAM01I,OAAOrqJ,MAK7BsqJ,gBAAiB,SAAUF,EAAYz1I,GACnCt1B,KAAKjI,QAAQw9B,WAAWC,OAAOu1I,EAAWlvK,YAAakvK,GAAcG,OAAQ51I,OAQjF0nC,EAASh4D,EAAOtE,QAChBC,KAAM,SAAU5I,EAASqI,GACrB4E,EAAOf,GAAGtD,KAAKwH,KAAKnI,KAAMjI,EAASqI,GACnCrI,EAAUiI,KAAKjI,QACfiI,KAAKy1F,OAAS19F,EAAQ4C,SAASqF,KAAKmrK,QAAQ,WAAW7wK,SAAS,aAChE0F,KAAKw1F,OAASz9F,EAAQ4C,SAASqF,KAAKmrK,QAAQ,WAAW7wK,SAAS,aAChE0F,KAAKumB,SAAWvmB,KAAKy1F,OAAOn0F,IAAItB,KAAKw1F,QACrCwzE,EAAajxK,GACRiI,KAAKI,QAAQuzF,UACdz7F,EAAMopB,OAAO3gB,KAAKX,KAAKjI,QAAQ4C,YAEnCqF,KAAKjI,QAAQ4kE,SACb38D,KAAKgI,QAAQ40B,GAAQgtI,OAAQ5pK,QAEjCmrK,QAAS,SAAUjnJ,GACf,MAAOlkB,MAAKI,QAAQuzF,SAAW3vE,EAAkBE,GAAaJ,EAAaI,IAE/E9jB,SACI8O,KAAM,SACN2U,GAAI,KACJunJ,SAAU,MAEd1jK,QACIk1B,EACAy+B,EACAC,GAEJxiB,MAAO,SAAUnwB,GACRA,EAAK8sE,OAAO,KACb9sE,EAAK8sE,OAASz1F,KAAKy1F,QAElB9sE,EAAK6sE,OAAO,KACb7sE,EAAK6sE,OAASx1F,KAAKw1F,SAG3B74B,OAAQ,SAAUh0C,GACd,GAAI/hB,GAAO5G,IACP2oB,GAAK8sE,SAAW7uF,EAAK6uF,QAAU7uF,EAAK6uF,OAAO,IAC3C9sE,EAAK5wB,QAAQy1E,QAAQ5mE,EAAK6uF,OAAO94B,SAAS,GAAG3R,WAAU,IAEvDriC,EAAK6sE,SAAW5uF,EAAK4uF,QAAU5uF,EAAK4uF,OAAO59F,QAC3C+wB,EAAK5wB,QAAQ+rD,OAAOl9C,EAAK4uF,OAAO74B,SAAS,GAAG3R,WAAU,KAG9DsS,OAAQ,SAAU30C,GACd,GAAI/hB,GAAO5G,KAAMqrK,EAAezkK,EAAKu8F,WACjCkoE,IACAzkK,EAAK+1D,OAAO0uG,GAEZ1iJ,EAAK8sE,SAAW7uF,EAAK6uF,SACrB7uF,EAAK6uF,OAAO94B,SACZh0C,EAAK5wB,QAAQ4C,SAASmpB,EAAa,WAAWoE,SAC9CS,EAAK5wB,QAAQy1E,QAAQ5mE,EAAK6uF,SAE1B9sE,EAAK6sE,SAAW5uF,EAAK4uF,SACrB5uF,EAAK4uF,OAAO74B,SACZh0C,EAAK5wB,QAAQ4C,SAASmpB,EAAa,WAAWoE,SAC9CS,EAAK5wB,QAAQ+rD,OAAOl9C,EAAK4uF,SAE7B5uF,EAAKoB,QAAQqzD,GACTuuG,OAAQhjK,EACR+hB,KAAMA,IAEV/hB,EAAKu8F,YAAcx6E,KAGvBtkB,EAAanM,EAAMmM,WAAYinK,EAAa,wDAAyDC,EAAa,YAAaC,EAAgB,eAAgBC,EAAa,YAAaC,EAAsB,oBAAqBC,EAAY,WAAYC,EAAuB,qBAAsBC,EAAQ,QACjTC,EAAaznK,EAAW3D,QACxBC,KAAM,SAAUP,GACZ,GAAiB+oB,GAAO4iJ,EAAcpkJ,EAAW6oB,EAA7C5pC,EAAO5G,IAOX,IANAqE,EAAWJ,GAAGtD,KAAKwH,KAAKvB,GACxBlQ,EAAEgK,OAAOkG,EAAMxG,GACfwG,EAAKolK,QAAUt1K,EAAE,WACjBixB,EAAY/gB,EAAK+gB,UACjBwB,EAAQviB,EAAKqlK,WAAWtkJ,GACxB/gB,EAAKslK,SAAW/iJ,EAAM/xB,SACjBwP,EAAKslK,SAAS,IAAM9rK,EAAQ+rK,WAM7B,KAJIJ,GADApkJ,EAAU,IAAMzvB,EAAMopB,OAAO2H,YAAYlxB,QAAQ,GAClC,2MAEA,oGAET+Q,MAAMijK,EAEpBnlK,GAAKwlK,WACLxlK,EAAKylK,cAAgB,GAAIn0K,GAAMklE,cAAcx2D,EAAK+gB,WAClD/gB,EAAKylK,cAAcjlK,KAAK,WAAY,SAAUa,GAC1CA,EAAE0gB,KAAKkK,OAASjsB,EAAKisB,SAEzBjsB,EAAKylK,cAAcjlK,KAAK,WAAY,SAAUa,GAC1CrB,EAAKoB,QAAQ2jK,GAAahjJ,KAAM1gB,EAAE0gB,SAEtC/hB,EAAKylK,cAAcjlK,KAAKykK,EAAO,WAC3BjlK,EAAKoB,QAAQ6jK,KAEjB7rK,KAAKssK,eAAiB51K,EAAEsP,MAAMhG,KAAM,cACpC4G,EAAK2lK,cAAc5kJ,GACnB6oB,EAAa7oB,EAAUhtB,SAASiM,EAAKukK,QAAQ,qBACzCvkK,EAAK+sF,UACL/sF,EAAK+sF,SAAS,GAAG64E,aACbhD,kBAAmB5iK,EAAKktD,WACxB24G,OAAQ7lK,EAAK6lK,OACb9kJ,UAAW/gB,EAAK+gB,UAChBkiJ,UAAWjjK,EAAK0lK,gBAEpB97H,EAAW9yC,KAAK,SAAUC,EAAK5F,GAC3Bs9B,EAAuB3+B,EAAEqB,GAAUqI,EAAQuzF,SAAS,OAGxDw1E,EAAY34H,GAEhBxwC,KAAKoH,KAAKpH,KAAK0H,OAAQtH,IAE3BsH,QACI+jK,EACAI,EACAF,EACAJ,EACAC,EACAE,EACAE,GAEJ9lJ,QAAS,WACL5tB,EAAM4tB,QAAQ9lB,KAAK2nB,UACnB,KAAK,GAAI9D,KAAM7jB,MAAKosK,QAChBpsK,KAAKosK,QAAQvoJ,GAAIiC,WAGzB6C,KAAM,WACF,MAAO3oB,MAAKqsK,cAAc1jJ,MAE9B+jJ,SAAU,SAAUvpJ,EAAK2wC,EAAYjhC,GAKjC,GAJA1P,EAAMA,EAAIhsB,QAAY4E,OAAO,IAAMiE,KAAK2sK,qBAAsB,IAClD,KAARxpJ,GAAcnjB,KAAK2sK,sBACnBxpJ,EAAM,KAENA,EAAIhsB,QAAQ,KAAM,MAAQ6I,KAAKmjB,IAE/B,MADAnjB,MAAKgI,QAAQ0jK,IACN,CAEX1rK,MAAKgI,QAAQyjK,EACb,IAAI7kK,GAAO5G,KAAM4sK,EAAc,SAAUjkJ,GACjC,MAAO/hB,GAAKylK,cAAcryK,KAAK2uB,EAAMmrC,EAAY3wC,IAClDprB,EAAU6O,EAAKimK,iBAAiB1pJ,GAAMwF,EAAOzwB,EAAMuvB,eAAe1vB;AAWzE,MAVA6O,GAAKuc,IAAMA,EAAIhsB,QAAQ,KAAM,IAC7ByP,EAAKisB,OAASA,EACVlK,GAAQA,EAAKy1H,SACbz1H,EAAKuhJ,QACLnyK,MAEJiI,KAAKgI,QAAQ4jK,GACT3qH,OAA2B,IAAnBlpD,EAAQH,OAChBurB,IAAKA,IAELprB,EAAQ,IACH4wB,IACDA,EAAO/hB,EAAKkmK,YAAY/0K,IAErB60K,EAAYjkJ,KAEf3oB,KAAK+sK,iBACLrxJ,SAASnY,KAAO4f,EAEhBvc,EAAKomK,UAAU7pJ,EAAKypJ,IAEjB,IAGf9oH,OAAQ,SAAUphD,EAAMygB,GACpB,GAA6FgG,GAAO8jJ,EAAYtkJ,EAA5GqjJ,EAAUhsK,KAAKgsK,QAASkB,GAAW/pJ,GAAO,IAAIlsB,MAAM,KAAK,GAAI0wB,EAAY3nB,KAAK2nB,SAkBlF,OAjBI2jJ,GAAWpxK,KAAKwI,KAChBA,EAAO3G,OAAO44D,IAElBq3G,EAAQ,GAAGp0J,UAAYlV,EACvBilB,EAAUm8B,OAAOkoH,EAAQrxK,SAAS,kBAClCwuB,EAAQnpB,KAAKisK,WAAWD,GACxBrjJ,EAAOQ,EAAM/xB,QACRuxB,EAAK/wB,SACNuxB,EAAQR,EAAOqjJ,EAAQr+F,UAAU,0BAA0BhzE,YAE3DuyK,GACAvkJ,EAAK7nB,OAAOoC,KAAKA,EAAK,OAAQgqK,GAElCltK,KAAKusK,cAAcP,GACnBiB,EAAajB,EAAQrxK,SAASqF,KAAKmrK,QAAQ,qBAC3CxjJ,EAAUm8B,OAAOkoH,EAAQrxK,SAASqF,KAAKmrK,QAAQ,4BAA4B7pK,IAAI6nB,IAC/EggJ,EAAY8D,GACLjtK,KAAK8sK,YAAYnkJ,IAE5BwiJ,QAAS,SAAUjnJ,GACf,MAAOlkB,MAAK2zF,SAAW3vE,EAAkBE,GAAaJ,EAAaI,IAEvE2oJ,iBAAkB,SAAU1pJ,GACxB,GAAIprB,GAASm1K,EAAU/pJ,EAAIlsB,MAAM,KAAK,EACtC,OAAKi2K,IAGLn1K,EAAUiI,KAAK2nB,UAAUhtB,SAAS,IAAMuI,EAAK,OAAS,KAAQgqK,EAAU,MACnEn1K,EAAQ,IAAMm1K,EAAQhvK,QAAQ,YAC/BnG,EAAUiI,KAAK2nB,UAAUhtB,SAA+B,MAAtBuyK,EAAQ71K,OAAO,GAAa61K,EAAU,IAAMA,IAE3En1K,GANIiI,KAAKksK,UAQpBY,YAAa,SAAU/0K,GACnB,MAAIiI,MAAK2zF,SACEt+D,EAAuBt9B,EAASiI,KAAK2zF,SAAS,IAE9Cz7F,EAAM2uB,WAAW9uB,GACpByxK,kBAAmBxpK,KAAK8zD,WACxB24G,OAAQzsK,KAAKysK,OACb9kJ,UAAW3nB,KAAK2nB,UAChBkiJ,UAAW7pK,KAAKssK,eAChBvC,WAAY/pK,KAAK+pK,WACjB3rB,OAAQv0H,EAAU9xB,EAAS,WAC5BspB,EAAGyF,QAGdqmJ,WAAY,SAAUj+J,GAClB,MAAa,KAATA,EACO,KAEJA,EAAOlP,KAAKosK,QAAQl9J,GAAQlP,KAAKosK,QAAQpsK,KAAK4pK,SAEzDoD,UAAW,SAAU7pJ,EAAKxC,GAClB3gB,KAAKotK,MACLptK,KAAKotK,KAAKhkB,QAEdppJ,KAAKgI,QAAQujK,GACbvrK,KAAKotK,KAAO12K,EAAE+sB,IAAIvrB,EAAM2gC,YAAY1V,EAAKnjB,KAAK2sK,qBAAsB,QAAQlqB,OAAO/rJ,EAAEsP,MAAMhG,KAAM,eAAgB2gB,EAAUwC,KAE/HkqJ,aAAc,SAAU1sJ,EAAUwC,EAAK27B,GACnC,GAAIjG,IAAU,CACd,IAAwB,gBAAbiG,IACiB,IAApBA,EAASO,OAAc,CACvB,KAAIP,EAASwuH,cAAgBxuH,EAASwuH,aAAa11K,OAAS,GAIxD,MAHAihD,IAAU,EACViG,EAAWA,EAASwuH,aAMhCttK,KAAKgI,QAAQwjK,GACT3yH,GACAl4B,EAAS3gB,KAAK8jD,OAAOhF,EAAU37B,KAGvC8oJ,WAAY,SAAUtkJ,GAClB,MAAOA,GAAUhtB,SAASqF,KAAKmrK,QAAQ,mBAAmBrqK,QAE9DyrK,cAAe,SAAUx0K,GACrB,GAAiB6xK,GAAbhjK,EAAO5G,IACXjI,GAAQ4C,SAASiM,EAAKukK,QAAQ,WAAWztK,KAAK,WAEtCksK,EADAhjK,EAAK+sF,SACIt+D,EAAuB3+B,EAAEsJ,MAAO4G,EAAK+sF,SAAS,IAE9Cz7F,EAAM2uB,WAAWnwB,EAAEsJ,SAAWqhB,EAAGyF,MAE9C,IAAIskJ,GAAWxB,EAAOxpK,QAAQgrK,QACzBA,IAAYA,IAAa9pJ,EAAO2H,YAAY1P,GAAGrK,KAGhD06J,EAAO9jJ,UAFPlf,EAAKwlK,QAAQxC,EAAOxpK,QAAQyjB,IAAM+lJ,MAOlD1xK,GAAMopB,OAAOwqJ,WAAaA,EAC1BzqJ,EAAG8G,OAAOyzC,GACVv6C,EAAG8G,OAAO60C,IACZrmE,OAAOuB,MAAM2sB,QACRluB,OAAOuB,OACE,kBAAVzB,SAAwBA,OAAOgiC,IAAMhiC,OAAS,SAAUiiC,EAAIC,EAAIC,IACrEA,GAAMD,OAEV,SAAUniC,EAAGC,QACVA,OAAO,uBAAwB,cAAeD,IAChD,WAsEE,MA7DC,UAAUE,EAAGE,GAAb,GACOsB,GAAQvB,OAAOuB,MAAOmpB,EAAKnpB,EAAMopB,OAAOD,GAAIrc,EAASqc,EAAGrc,OAAQuoK,EAAiB72K,EAAEsc,IAAI9a,EAAMqN,SAAU,SAAU3H,GAC7G,MAAOA,KACR1G,KAAK,KAAKD,MAAM,KACnBu2K,EAASxoK,EAAOtE,QAChBC,KAAM,SAAUgnB,EAAWvnB,GACvB,GAAIwG,GAAO5G,KAAMjI,EAAUrB,EAAE,mJAC7BsO,GAAOf,GAAGtD,KAAKwH,KAAKvB,EAAM7O,EAASqI,GACnCwG,EAAK+gB,UAAYA,EACjB/gB,EAAK6mK,eAAgB,EACrB7mK,EAAK8mK,iBACL31K,EAAQ+rD,OAAOl9C,EAAKxG,QAAQ4nB,SAASlnB,OAAOg2B,SAASnP,IAEzDvnB,SACI8O,KAAM,SACN8Y,QAAS,sBACT6L,QAAS,KAEb75B,KAAM,WACF,GAAI4M,GAAO5G,IACX4qB,cAAahkB,EAAKmrG,UACdnrG,EAAKxG,QAAQ4nB,WAAY,IAG7BphB,EAAK6mK,eAAgB,EACrB7mK,EAAKmrG,SAAWroF,WAAW,WACvB9iB,EAAK7O,QAAQiC,QACd4M,EAAKxG,QAAQyzB,WAEpB/yB,KAAM,WACFd,KAAKytK,eAAgB,EACrB7iJ,aAAa5qB,KAAK+xG,UAClB/xG,KAAKjI,QAAQ+I,QAEjB6sK,cAAe,SAAUnpJ,GACrBxkB,KAAKI,QAAQ4nB,QAAUxD,EACvBxkB,KAAKjI,QAAQuvB,KAAK,OAAO5kB,KAAK8hB,IAElCsvC,WAAY,WACR9zD,KAAKytK,eAAgB,EACrBztK,KAAK2nB,UAAU1vB,IAAI,iBAAkB,SAEzC21K,eAAgB,WACZ5tK,KAAKytK,eAAgB,EACrBztK,KAAK2nB,UAAU1vB,IAAI,iBAAkB,KAEzCy1K,eAAgB,WAGZ,QAASjqI,GAAQx7B,GACTrB,EAAK6mK,eACLxlK,EAAE9D,iBALE,GAQHrJ,GAPL8L,EAAO5G,IAOX,KANA4G,EAAK6mK,eAAgB,EAMZ3yK,EAAI,EAAGA,EAAIyyK,EAAe31K,OAAQkD,IACvC8L,EAAK+gB,UAAU,GAAGrK,iBAAiBiwJ,EAAezyK,GAAI2oC,GAAS,KAI3EpiB,GAAG8G,OAAOqlJ,IACZ72K,OAAOuB,MAAM2sB,QACRluB,OAAOuB,OACE,kBAAVzB,SAAwBA,OAAOgiC,IAAMhiC,OAAS,SAAUiiC,EAAIC,EAAIC,IACrEA,GAAMD,OAEV,SAAUniC,EAAGC,QACVA,OAAO,qBACH,oBACA,uBACDD,IACL,WA4PE,MAhPC,UAAUE,EAAGE,GAAb,GACOsB,GAAQvB,OAAOuB,MAAOopB,EAASppB,EAAMopB,OAAQwC,EAAe5rB,EAAM4rB,aAAczC,EAAKC,EAAOD,GAAIrc,EAASqc,EAAGrc,OAAQ8mK,EAAaxqJ,EAAOwqJ,WAAYlwG,EAAOv6C,EAAGu6C,KAAM4xG,EAASlsJ,EAAOD,GAAGmsJ,OAAQK,EAAW,WAAYzzB,EAAO,OAAQ0zB,EAAa,KAAM1pE,EAAW,WAAYunE,EAAY,WAAYD,EAAsB,oBAAqBvsI,EAAKjnC,EAAMC,QAAQgf,SAAU42J,EAAiC5uI,EAAG3kB,MAAQ2kB,EAAG3jB,SAAW2jB,EAAG9jB,aAAe,IAAK2yJ,EAAc,uCAAwCt0I,EAAO,SAAU7P,EAAY3xB,EAAM2xB,UACzhBs9C,EAAOniE,EAAOtE,QACdC,KAAM,SAAU5I,EAASqI,GACrB,GAAIwG,GAAO5G,IACXgF,GAAOf,GAAGtD,KAAKwH,KAAKvB,EAAM7O,EAASqI,GACnCA,EAAUwG,EAAKxG,QACfrI,EAAU6O,EAAK7O,QACfA,EAAQuC,SAAS,WACbsM,EAAKxG,QAAQylJ,aACb9tJ,EAAQuC,SAAS,uBAErB0F,KAAK0e,WACL1e,KAAKiuK,gBAAkB,SAAU9qJ,EAAK0P,EAAQoJ,GAC1C,GAAI63B,GAAaltD,EAAKktD,UAKtB,OAJAltD,GAAKktD,WAAa,KACdi6G,GAAkC9xI,IAClC63B,EAAa,QAEVltD,EAAKsnK,WAAWxB,SAASvpJ,EAAK2wC,EAAYjhC,IAErD7yB,KAAKmuK,iBAAmB,SAAUhrJ,GAC9B,GAAIA,IAAQuW,EAAM,CACd,GAA4B,IAAxB9yB,EAAK8X,QAAQ9mB,OACb,MAEJgP,GAAK8X,QAAQqN,MACb5I,EAAMvc,EAAK8X,QAAQ9X,EAAK8X,QAAQ9mB,OAAS,OAEzCgP,GAAK8X,QAAQ5W,KAAKqb,EAEtBvc,GAAKqnK,gBAAgB9qJ,EAAKjrB,EAAMy6B,uBAAuBxP,KAE3DnjB,KAAKouK,gBAAkB,SAAUjrJ,GAC7B,GAAI0P,GAAS36B,EAAMy6B,uBAAuBxP,EAC1Cvc,GAAK8X,QAAQ9X,EAAK8X,QAAQ9mB,OAAS,GAAKurB,EACxCvc,EAAKqnK,gBAAgB9qJ,EAAK0P,IAE9BjsB,EAAK6lK,OAAS,GAAIe,GAAOz1K,GAAWiwB,QAASphB,EAAKxG,QAAQ4nB,UAC1DphB,EAAKsnK,WAAa,GAAIpC,IAClBnkJ,UAAW5vB,EACX+7D,WAAY1zD,EAAQ0zD,WACpBi2G,WAAY3pK,EAAQ2pK,WACpBoC,YAAa/rK,EAAQq6D,QACrBsyG,iBAAkB3sK,EAAQ2sK,iBAC1BJ,oBAAqBvsK,EAAQk5B,MAAQ,GACrCswI,OAAQxpK,EAAQwpK,OAChBj2E,SAAUvzF,EAAQuzF,SAClB84E,OAAQ7lK,EAAK6lK,OACbjwG,UAAW,WACP51D,EAAK6lK,OAAO34G,aACZltD,EAAKynK,sBAET7wG,MAAO,WACH52D,EAAK6lK,OAAOmB,kBAEhBU,SAAU,SAAUrmK,GAChBrB,EAAKoB,QAAQ2jK,EAAW1jK,IAE5BsmK,UAAW,WACP3nK,EAAK6lK,OAAOzyK,QAEhBw0K,aAAc,WACV5nK,EAAK6lK,OAAO3rK,QAEhB2tK,kBAAmB,WACf7nK,EAAKoB,QAAQ0jK,IAEjBgD,mBAAoB,SAAUzmK,GACrBA,EAAEg5C,QAAWr6C,EAAKxG,QAAQ2sK,kBAC3BnmK,EAAKoB,QAAQo8F,GAAYjhF,IAAKlb,EAAEkb,SAI5CnjB,KAAK2uK,oBACLz2K,EAAMuxB,SAAS,WACX7iB,EAAK+nK,sBAET/nK,EAAKgoK,kBAETP,mBAAoB,WAChB,GAAIQ,GAAU7uK,KAAKjI,QAAQuvB,KAAKxD,EAAa,kCAAkCjgB,OAAO,WACtFgrK,GAAQnxK,KAAK,WACTxF,EAAMuvB,eAAe/wB,EAAEsJ,MAAOqhB,GAAIi7D,WAG1CwyF,kBAAmB,WACf,GAAIr0G,GAAUz6D,KAAKI,QAAQq6D,OAI3B,OAHIA,IACAz6D,KAAKo6B,SAASqgC,GAEXA,GAEXr6D,SACI8O,KAAM,OACN6/J,cAAe,GACfj7G,WAAY,GACZ81G,OAAQ,GACR/jB,aAAa,EACbprF,QAAS,KACTsvG,WAAYpzK,OACZqxB,QAAS,uBAEbtgB,QACI08F,EACAunE,EACAD,GAEJ5nH,OAAQ,SAAUphD,GACd,MAAO1C,MAAKkuK,WAAWpqH,OAAOphD,IAElCojB,QAAS,WACL9gB,EAAOf,GAAG6hB,QAAQ3d,KAAKnI,MACvBA,KAAKkuK,WAAWpoJ,UAChB9lB,KAAK+gC,WAAWjb,WAEpBsU,SAAU,SAAUjX,EAAK2wC,GACjB3wC,YAAey4C,KACfz4C,EAAMA,EAAIU,IAEd7jB,KAAK8zD,WAAaA,EAClB9zD,KAAKmuK,iBAAiBhrJ,IAE1BhsB,QAAS,SAAUgsB,EAAK2wC,GAChB3wC,YAAey4C,KACfz4C,EAAMA,EAAIU,IAEd7jB,KAAK8zD,WAAaA,EAClB9zD,KAAKouK,gBAAgBjrJ,IAEzB6rJ,aAAc,SAAUC,GACpB,GAAIroK,GAAO5G,KAAM0e,EAAU1e,KAAK0e,QAASwvJ,EAAaluK,KAAKkuK,UAC3De,GAAO7nK,KAAK,OAAQ,SAAUa,GAAV,GAGZrQ,GAFAurB,EAAMlb,EAAEkb,IAAK+rJ,EAAUD,EAAOxwJ,UAAY0E,EAAM,GACpD+qJ,GAAWhC,SAAShpK,KAAKhL,EAAMgL,KAAK,OAAQgsK,GACxCt3K,EAAS8mB,EAAQ9mB,OACT,MAARurB,GAAevrB,IACfq3K,EAAO70I,SAAS1b,EAAQ9mB,EAAS,IAAI,GACrCqQ,EAAE9D,oBAGV8qK,EAAO7nK,KAAK,eAAgB,SAAUa,GAC7BrB,EAAKqnK,gBAAgBhmK,EAAEkb,IAAKlb,EAAE4qB,OAAQ5qB,EAAEg0B,oBACzCh0B,EAAE9D,mBAGV8qK,EAAO7nK,KAAK,OAAQ,WAChBR,EAAKoB,QAAQ0jK,KAEjB9kK,EAAKunK,iBAAmB,SAAUhrJ,GAC9B8rJ,EAAO70I,SAASjX,IAEpBvc,EAAKwnK,gBAAkB,SAAUjrJ,GAC7B8rJ,EAAO93K,QAAQgsB,KAGvBgsJ,YAAa,WACTnvK,KAAKysK,OAAO3rK,QAEhBsuK,YAAa,WACTpvK,KAAKysK,OAAOzyK,QAEhBq1K,qBAAsB,SAAU7qJ,GAC5BxkB,KAAKysK,OAAOkB,cAAcnpJ,IAE9BmE,KAAM,WACF,MAAO3oB,MAAKkuK,WAAWvlJ,QAE3BgmJ,kBAAmB,WACf,GAAI11K,GAAO81K,EAAgB/uK,KAAKI,QAAQ2uK,aACpCA,KACA91K,EAAQf,EAAMopB,OAAO2H,YAAYlxB,QAAQgC,GAAG,gBAAkBg1K,EAAgB,OAC9E/uK,KAAKjI,QAAQE,IAAI,QAASgB,KAGlC21K,eAAgB,WACZ,GAAIhoK,GAAO5G,KAAMsvK,EAAY,MAAOC,EAAwB,SAAWr3K,EAAM+J,GAAK,qBAAsButK,EAAkB94K,EAAEsc,KACpH,SACA,aACA,eACA,iBACD,SAAU+Q,GACT,MAAOD,GAAaC,GAAQ,QAAUwrJ,EAAwB,MAC/Dr4K,KAAK,IACZ8I,MAAKjI,QAAQ0P,QAAQzH,MAAM0F,GAAG,OAAQoe,EAAawrJ,GAAa,IAAMC,EAAuB,YAAY7pK,GAAG,QAASoe,EAAawrJ,GAAa,IAAME,EAAkB,IAAMD,EAAuB,iBACpMvvK,KAAK+gC,WAAa,GAAI7oC,GAAM0pC,WAAW5hC,KAAKjI,SACxC6qC,SAAS,EACT/+B,OAAQ2rK,EACR1qI,IAAK,SAAU78B,GACXA,EAAE0Q,MAAMimB,cAAgB32B,EAAEkQ,MAAMymB,cAChCh4B,EAAK6oK,SAASxnK,EAAE0Q,UAGxB3Y,KAAKjI,QAAQE,IAAI,mBAAoB,KAEzCy3K,cAAe,SAAUznK,GAAV,GACP1E,GAAO7M,EAAEuR,EAAE22B,eAAe17B,KAAK,QAC/B+9C,EAAS19C,GAAoB,MAAZA,EAAK,IAAcvD,KAAKI,QAAQ2sK,gBAChD9rH,IAAUp3B,EAAUnzB,EAAEuR,EAAE22B,eAAgB,QAAUivI,GACnD5lK,EAAE9D,kBAGVsrK,SAAU,SAAUxnK,GAChB,KAAIA,EAAE67B,MAAQ,GAAK77B,EAAE7D,sBAArB,CAGA,GAAIgpE,GAAOptE,KAAMqlG,EAAO3uG,EAAEuR,EAAE22B,eAAgBk1B,EAAajqC,EAAUw7E,EAAM,cAAesqE,EAAM9lJ,EAAUw7E,EAAM,QAAU,GAAIjlF,EAASyJ,EAAUw7E,EAAM,UAAW9hG,EAAO8hG,EAAKniG,KAAKk3I,GAAOw1B,EAAkB7B,GAA2D,IAAzB1oE,EAAK,GAAG1+E,aAAoBs6B,EAAS19C,GAAoB,MAAZA,EAAK,IAAcvD,KAAKI,QAAQ2sK,gBACrT6C,IAAmB3uH,GAAU0uH,IAAQ9B,GAA4B,IAATtqK,GAAwBA,IAASuqK,IAG7FzoE,EAAKniG,KAAKk3I,EAAM0zB,GAChBpkJ,WAAW,WACP27E,EAAKniG,KAAKk3I,EAAM72I,KAEhBosK,EAAIr3K,MAAM01K,IACV91K,EAAMuvB,eAAe/wB,EAAE6M,GAAO8d,GAAIwuJ,QAAQxqE,GAC9B,gBAARsqE,GAAiC,WAARA,GACzB1nK,EAAEyiB,oBAGS,SAAXtK,EACAgtD,EAAO9rD,EAAO2H,YAAYmkD,KACnBhtD,IACPgtD,EAAO12E,EAAE,IAAM0pB,GAAQ5kB,KAAK,oBAEhC4xE,EAAKhzC,SAAS72B,EAAMuwD,IAExB7rD,EAAE9D,qBAGVgjE,GAAKruE,KAAO,SAAUf,GACbA,EAAQgC,GAAG+pB,EAAa,WACzB/rB,EAAUA,EAAQe,KAAK,aAAeZ,EAAM+J,GAAK,0CAA0CrI,SAE/F,IAAIk2K,GAAgB/3K,EAAQe,KAAK,kDAAkDc,SAAUwzE,EAAO,GAAIjG,GAAK2oG,EAE7G,OADA1iG,GAAKhzC,SAAS,IACPgzC,GAEX/rD,EAAG8G,OAAOg/C,IACZxwE,OAAOuB,MAAM2sB,QACRluB,OAAOuB,OACE,kBAAVzB,SAAwBA,OAAOgiC,IAAMhiC,OAAS,SAAUiiC,EAAIC,EAAIC,IACrEA,GAAMD,OAEV,SAAUniC,EAAGC,QACVA,OAAO,wBACH,cACA,qBACDD,IACL,WAuME,MA5LC,UAAUE,EAAGE,GAAb,GACOsB,GAAQvB,OAAOuB,MAAOopB,EAASppB,EAAMopB,OAAQD,EAAKC,EAAOD,GAAIi6C,EAAO,OAAQyf,EAAO,OAAQC,EAAQ,QAASiG,EAAU,mCAAoC8uF,EAAQ,iCAAkCC,EAAU,mCAAoCC,EAAoB,iCAAkCjrK,EAASqc,EAAGrc,OAAQkrK,GACxTlxJ,MACIw4C,OAAQ,gBACRnB,SAAU,cAEdp3C,IACIu4C,OAAQ,aACRnB,SAAU,iBAEd19D,MACI6+D,OAAQ,cACRnB,SAAU,eACV6e,UAAW,YAEft8E,OACI4+D,OAAQ,eACRnB,SAAU,cACV6e,UAAW,aAEhBi7F,GACC/zF,WACIC,MACIt8E,QAAS,UACTM,SAAU,GAEdi8E,OACIv8E,QAAS,WACTM,SAAU,OAGnB+kF,GACCpxB,YACI50D,OAAQ,MACRrB,KAAM,UAEVgzD,UACI3xD,OAAQ,OACRrB,KAAM,UAEXmnF,GACCjmE,GAAM,OACND,KAAQ,KACRrmB,KAAQ,QACRC,MAAS,QAEbmjF,EAAQ/2E,EAAOtE,QACfC,KAAM,SAAU5I,EAASqI,GACrB,GAA4MgwK,GAAc38I,EAAtN7sB,EAAO5G,KAAMqwK,EAAiBt4K,EAAQkgB,QAAQ,yBAA0B4kE,EAAW9kF,EAAQkgB,QAAQ,YAAYtd,SAAS,YAAYvD,QAASuwB,EAAY0oJ,EAAe,GAAKA,EAAiBxzF,CAC9Lz8E,GAAQy8E,SACRA,EAAWz8E,EAAQy8E,SACXA,EAAS,KACjBA,EAAWlmF,QAEXyJ,EAAQunB,UACRA,EAAYvnB,EAAQunB,UACZA,EAAU,KAClBA,EAAYpqB,SAASsa,MAEzBu4J,GACIvzF,SAAUA,EACVC,kBAAkB,EAClB/jF,UAAU,EACVsjF,KAAM,WACFz1E,EAAKqvJ,QAAQj8J,QAEjBwsF,SAAU9vF,EAAEsP,MAAMY,EAAKw3J,UAAWx3J,GAClC28E,WAAY,WACR38E,EAAKqvJ,QAAQn1J,OACR8F,EAAK+8B,UACN/8B,EAAKoB,QAAQszD,GAEjB10D,EAAK+8B,UAAW,IAGxB3+B,EAAOf,GAAGtD,KAAKwH,KAAKvB,EAAM7O,EAASqI,GACnCrI,EAAU6O,EAAK7O,QACfqI,EAAUwG,EAAKxG,QACfrI,EAAQe,KAAKmoF,GAAS3mF,SAAS,YAAYN,OAC3Cy5B,EAAO7sB,EAAKxG,QAAQwlC,UAAUttC,MAAM,cAAgB,aAAe,WACnEsO,EAAKgf,WAAaw/D,EAAW3xD,GAC7B7sB,EAAKvN,QAAUtB,EAAQ6B,SAAS3B,KAC5BgB,MAAOmH,EAAQnH,MACfC,OAAQkH,EAAQlH,SACjBoB,SAAS,uBAAyB8F,EAAQwlC,WAAW9kC,OACxD8F,EAAK+/E,MAAQjwF,EAAEq5K,GAAO9nJ,UAAUrhB,EAAKvN,SAASyH,OAC9C8F,EAAKqvJ,QAAUv/J,EAAEs5K,GAASl5I,SAASnP,GAAW7mB,OAC9CsvK,EAAat5I,SAAWlwB,EAAKqvJ,QACzB71J,EAAQnC,WACR2I,EAAKqvJ,QAAQ37J,SAAS8F,EAAQnC,WAElC2I,EAAKi3E,MAAQ,GAAI3lF,GAAMmpB,GAAG06D,MAAMn1E,EAAKvN,QAAS3C,EAAEgK,QAAO,EAAM0vK,EAAcD,EAAWD,EAAW9vK,EAAQwlC,cAE7GxlC,SACI8O,KAAM,QACNjW,MAAO,IACPC,OAAQ,GACR0sC,UAAW,OACXje,UAAW,KACXk1D,SAAU,MAEdn1E,QAAS4zD,GACTthE,KAAM,SAAUomB,GACZpgB,KAAK69E,MAAMz9E,QAAQ87E,OAASxlF,EAAE0pB,GAC9BpgB,KAAK69E,MAAMxB,QAEfv7E,KAAM,WACFd,KAAK2jC,UAAW,EAChB3jC,KAAK69E,MAAMvB,SAEfx2D,QAAS,WACL9gB,EAAOf,GAAG6hB,QAAQ3d,KAAKnI,MACvBA,KAAK69E,MAAM/3D,UACX9lB,KAAKi2J,QAAQ/tI,UAEjB9H,OAAQ,WACJ,MAAOpgB,MAAK69E,MAAMz9E,QAAQ87E,QAE9BkiF,UAAW,WACP,GAAIx3J,GAAO5G,KAAM4lC,EAAYh/B,EAAKxG,QAAQwlC,UAAWhgB,EAAahf,EAAKgf,WAAYxmB,EAASwmB,EAAWxmB,OAAQy+E,EAAQj3E,EAAKi3E,MAAO3B,EAAS2B,EAAMz9E,QAAQ87E,OAAQ4D,EAAeppF,EAAEwlF,GAAQ98E,SAAU0nF,EAAgBpwF,EAAEmnF,EAAM9lF,SAASqH,SAAU+d,EAAW0gE,EAAMR,QAAU6H,EAAQt/C,GAAaA,EAAW5zB,EAAsC,EAAhCpL,EAAK+/E,MAAM/gE,EAAW7nB,QAAarF,EAAMkO,EAAK7O,QAAQ6tB,EAAW7nB,QAAU6I,EAAK+/E,MAAM/gE,EAAW7nB,QAASA,EAAOrH,EAAEwlF,GAAQt2D,EAAW7nB,QAASgpF,EAAejH,EAAa1gF,GAAU0nF,EAAc1nF,GAAUrB,EAAO,CACjgBgpF,GAAe/0E,IACf+0E,EAAe/0E,GAEf+0E,EAAeruF,IACfquF,EAAeruF,GAEnBkO,EAAKvN,QAAQsxD,YAAYslH,GAAmB31K,SAAS,MAAQ6iB,GAC7DvW,EAAK+/E,MAAM1uF,IAAImH,EAAQ2nF,GAAc/sF,UAGzCs2K,EAAUtrK,EAAOtE,QACjBC,KAAM,SAAU5I,EAASqI,GACrB,GAAiBgwK,GAAbxpK,EAAO5G,IACX4G,GAAK2pK,aAAc,EACnBvrK,EAAOf,GAAGtD,KAAKwH,KAAKvB,EAAM7O,EAASqI,GACnCgwK,EAAe15K,EAAEgK,QACbzC,UAAW,kBACX6C,KAAM,WACF8F,EAAKoB,QAAQgzE,KAElBh7E,KAAKI,QAAQy9E,OAChBj3E,EAAKi3E,MAAQ,GAAI9B,GAAMn1E,EAAK7O,QAASq4K,GACrCxpK,EAAKi3E,MAAMo4E,QAAQvwJ,GAAG,OAAQ,SAAUuC,GAChCA,EAAEmY,QAAUxZ,EAAKi3E,MAAMo4E,QAAQ,IAC/BhuJ,EAAE9D,mBAGVyC,EAAKwmE,KAAO,GAAI/rD,GAAG8lD,KAAKvgE,EAAK7O,QAASrB,EAAEgK,OAAOV,KAAKI,QAAQgtE,MAAQumB,SAAU3zF,KAAKI,QAAQuzF,YAC3Fz7F,EAAM0uB,OAAOhgB,EAAMya,IAEvBjhB,SACI8O,KAAM,UACN2uE,SACAzQ,SAEJ1lE,QACIqzE,EACAC,GAEJqB,KAAM,SAAUj8D,GACZpgB,KAAK69E,MAAM7jF,KAAKomB,GACXpgB,KAAKuwK,YAONvwK,KAAKotE,KAAKzkD,OAAOyhJ,uBANZpqK,KAAKotE,KAAK0hG,qBACX9uK,KAAKotE,KAAKhzC,SAAS,IAEvBp6B,KAAK69E,MAAMA,MAAM1N,YACjBnwE,KAAKuwK,aAAc,IAK3BV,QAAS,SAAUzvJ,GACfpgB,KAAKq8E,KAAKj8D,GACVpgB,KAAKgI,QAAQ+yE,GAAQ36D,OAAQpgB,KAAK69E,MAAMz9D,YAE5Ck8D,MAAO,WACHt8E,KAAK69E,MAAM/8E,QAEfglB,QAAS,WACL9gB,EAAOf,GAAG6hB,QAAQ3d,KAAKnI,MACvBA,KAAKotE,KAAKtnD,UACV9lB,KAAK69E,MAAM/3D,UACX5tB,EAAM4tB,QAAQ9lB,KAAKjI,WAG3BspB,GAAG8G,OAAO4zD,GACV16D,EAAG8G,OAAOmoJ,IACZ35K,OAAOuB,MAAM2sB,QACRluB,OAAOuB,OACE,kBAAVzB,SAAwBA,OAAOgiC,IAAMhiC,OAAS,SAAUiiC,EAAIC,EAAIC,IACrEA,GAAMD,OAEV,SAAUniC,EAAGC,QACVA,OAAO,qBAAsB,eAAgBD,IAC/C,WAuFE,MA9EC,UAAUE,EAAGE,GAAb,GACOsB,GAAQvB,OAAOuB,MAAOmpB,EAAKnpB,EAAMopB,OAAOD,GAAI06D,EAAQ7jF,EAAMmpB,GAAG06D,MAAOy0F,EAAO,yBAA0Bl1G,EAAO,OAAQt2D,EAASqc,EAAGrc,OAChIyrK,EAAOzrK,EAAOtE,QACdC,KAAM,SAAU5I,EAASqI,GACrB,GAAIwG,GAAO5G,KAAM0wK,EAAMx4K,EAAMopB,OAAO2H,YAAa1P,EAAKrhB,EAAMC,QAAQgf,SAAUw5J,EAASD,EAAMA,EAAIn3J,GAAGrK,KAAOqK,EAAKA,EAAGrK,KAAO,MAAO0hK,EAAmB,QAAXD,GAA+B,OAAXA,KAAoBD,GAAMA,EAAIn3J,GAAGgxJ,KAAesG,EAAgB,eAAXF,EAAyB5kF,EAAQ3rF,EAAQ2rF,QAAU6kF,EAAQ,gBAAkBC,EAAK,eAAiB,iBAAkBx6G,EAAWj2D,EAAQi2D,WAAau6G,EAAQ,gBAAkBC,EAAK,eAAiB,iBAAkBh8G,EAASz0D,EAAQy0D,SAAW+7G,EAAQ,aAAeC,EAAK,eAAiB,WAAYC,EAAOp6K,EAAE85K,GAAM/oK,QAAQb,GAAM9F,MAC3hBkE,GAAOf,GAAGtD,KAAKwH,KAAKvB,EAAM7O,EAASqI,GACnCwG,EAAKkqK,KAAOA,EACZ/4K,EAAU6O,EAAK7O,QACfqI,EAAUwG,EAAKxG,QACXA,EAAQnC,WACR2I,EAAKkqK,KAAKx2K,SAAS8F,EAAQnC,WAE1BmC,EAAQ28E,OACTn2E,EAAKkqK,KAAKprK,GAAG,OAAQ,UAExBgrK,EAAMA,EAAI34K,QAAUrB,EAAE6G,SAASsa,OAAOisC,OAAOgtH,GAC9ClqK,EAAKi3E,MAAQ,GAAI9B,GAAMn1E,EAAK7O,SACxBmkF,OAAQ40F,EACR/zF,OAAO,EACPjmD,SAAUg6I,EACVt5G,OAAQu0B,EACR11B,SAAUA,EACV+lB,WACIC,MACIt8E,QAAS80D,EACTx0D,SAAUD,EAAQC,UAEtBi8E,OAASj8E,SAAUD,EAAQC,WAE/Bi8E,MAAO,SAAUr0E,GACb,GAAI87I,IAAY,CACXn9I,GAAK+8B,WACNogH,EAAYn9I,EAAKoB,QAAQszD,IAEzByoF,GACA97I,EAAE9D,iBAENyC,EAAK+8B,UAAW,GAEpB4/C,WAAY,WACRutF,EAAKhwK,QAETu7E,KAAM,WACFy0F,EAAK92K,UAGb9B,EAAM0uB,OAAOhgB,IAEjBc,QAAS4zD,GACTl7D,SACI8O,KAAM,OACN6tE,OAAO,EACPgP,MAAOn1F,EACPy/D,SAAUz/D,EACVi+D,OAAQj+D,EACRyJ,SAAU,KAEdrG,KAAM,WACFgG,KAAK69E,MAAMxB,QAEfv7E,KAAM,WACFd,KAAK2jC,UAAW,EAChB3jC,KAAK69E,MAAMvB,SAEfx2D,QAAS,WACL9gB,EAAOf,GAAG6hB,QAAQ3d,KAAKnI,MACvBA,KAAK8wK,KAAKpoJ,eACV1oB,KAAK69E,MAAM/3D,UACX9lB,KAAK8wK,KAAK5oJ,UAEd6oJ,MAAO,SAAU9oK,GACRA,GAAMvR,EAAEoM,SAAS9C,KAAK8wK,KAAKn2K,WAAWA,SAAS,YAAY,GAAIsN,EAAEmY,SAClEpgB,KAAK69E,MAAMvB,UAIvBj7D,GAAG8G,OAAOsoJ,IACZ95K,OAAOuB,MAAM2sB,QACRluB,OAAOuB,OACE,kBAAVzB,SAAwBA,OAAOgiC,IAAMhiC,OAAS,SAAUiiC,EAAIC,EAAIC,IACrEA,GAAMD,OAEV,SAAUniC,EAAGC,QACVA,OAAO,0BACH,oBACA,qBACDD,IACL,WA8FE,MAnFC,UAAUE,EAAGE,GAAb,GACOsB,GAAQvB,OAAOuB,MAAOmpB,EAAKnpB,EAAMopB,OAAOD,GAAIovJ,EAAOpvJ,EAAGovJ,KAAMzrK,EAASqc,EAAGrc,OAAQgsK,EAAc,aAAcj2F,EAAO,OAAQC,EAAQ,QAASp+C,EAAO,OAAQq0I,EAAO,uCAClKC,EAAY7vJ,EAAGu6C,KAAKl7D,QACpBC,KAAM,SAAU5I,EAASqI,GACrB,GAAIwG,GAAO5G,IACXgF,GAAOf,GAAGtD,KAAKwH,KAAKvB,EAAM7O,EAASqI,GACnCwG,EAAKm0B,MACLn0B,EAAKk1D,QACLl1D,EAAKuqK,QACAnxK,KAAKI,QAAQuzF,WACd/sF,EAAK6iK,UACL7iK,EAAK8iK,YACL9iK,EAAK+iK,UAET/iK,EAAK7O,QAAQE,IAAI,UAAW,IAC5B2O,EAAKoB,QAAQ40B,IAEjBl1B,QACIk1B,EACAo0I,EACAj2F,EACAC,GAEJ56E,SACI8O,KAAM,YACN6tE,OAAO,EACP9jF,MAAO,KACPC,OAAQ,MAEZ4sB,QAAS,WACL9gB,EAAOf,GAAG6hB,QAAQ3d,KAAKnI,MACvBA,KAAK8wK,KAAKhrJ,WAEdu2D,KAAM,SAAUj8D,GACZ,GAAIxZ,GAAO5G,IACX4G,GAAKwZ,OAAS1pB,EAAE0pB,GAChBxZ,EAAKkqK,KAAK92K,OACV4M,EAAKwjK,sBACLxjK,EAAKoB,QAAQ,QAAU2gB,KAAM/hB,KAEjCipK,QAAS,SAAUzvJ,GACVpgB,KAAKgI,QAAQgpK,GAAe5wJ,OAAQA,MACrCpgB,KAAKq8E,KAAKj8D,GACVpgB,KAAKgI,QAAQ+yE,GAAQ36D,OAAQA,MAGrCk8D,MAAO,WACCt8E,KAAKjI,QAAQgC,GAAG,cAAgBiG,KAAKgI,QAAQgzE,IAC7Ch7E,KAAK8wK,KAAKhwK,QAGlBg7D,MAAO,WACH,GAAiE7iE,GAAOC,EAApE0N,EAAO5G,KAAMjI,EAAU6O,EAAK7O,QAASqI,EAAUwG,EAAKxG,OACxDnH,GAAQlB,EAAQ,GAAG+B,MAAMb,OAAS,OAClCC,EAASnB,EAAQ,GAAG+B,MAAMZ,QAAU,OACpCnB,EAAQuC,SAAS,gBAAgBxB,KAAKm4K,GACtCrqK,EAAKvN,QAAUtB,EAAQ6B,SAAS3B,KAC5BgB,MAAOmH,EAAQnH,OAASA,GAAS,IACjCC,OAAQkH,EAAQlH,QAAUA,GAAU,MACrCoB,SAAmB,QAAVpB,EAAmB,kBAAoB,IACnDnB,EAAQE,KACJgB,MAAO,GACPC,OAAQ,MAGhBi4K,MAAO,WACH,GAAIvqK,GAAO5G,IACX4G,GAAKkqK,KAAO,GAAIL,GAAK7pK,EAAKvN,SACtB0jF,MAAOn2E,EAAKxG,QAAQ28E,MACpB1mB,SAAU,gBACV01B,MAAO,gBACPl3B,OAAQ,UACR52D,UAAW,oBACX6C,KAAM,SAAUmH,GACRrB,EAAKoB,QAAQgzE,IACb/yE,EAAE9D,sBAMtBkd,GAAG8G,OAAO+oJ,IACZv6K,OAAOuB,MAAM2sB,QACRluB,OAAOuB,OACE,kBAAVzB,SAAwBA,OAAOgiC,IAAMhiC,OAAS,SAAUiiC,EAAIC,EAAIC,IACrEA,GAAMD,OAEV,SAAUniC,EAAGC,QACVA,OAAO,uBACH,oBACA,oBACDD,IACL,WAuPE,MA5OC,UAAUE,EAAGE,GAAb,GACOsB,GAAQvB,OAAOuB,MAAOopB,EAASppB,EAAMopB,OAAQ/H,EAAKrhB,EAAMC,QAAQgf,SAAUw6C,EAAaz5D,EAAM6H,QAAQ4xD,WAAY7tC,EAAe5rB,EAAM4rB,aAAcstJ,EAAO,IAAK/vJ,EAAKC,EAAOD,GAAIgwJ,IAAkB93J,EAAGiB,KAA0B,GAAnBjB,EAAG6B,eAAsB7B,EAAGiC,SAAU6tJ,EAAc,aAAczsI,EAAO,OAAQy+B,EAAO,OAAQC,EAAO,OAAQg2G,EAAa,YAAaC,GAAc9xJ,OAAQ/oB,EAAEkK,MAC7W4wK,EAASnwJ,EAAGu6C,KAAKl7D,QACjBC,KAAM,SAAU5I,EAASqI,GAAnB,GAQEgtE,GAA2ErsC,EAgBvEpZ,EAUJ8pJ,EACA3wK,CA1BJ,IARApK,EAAEqB,GAAS6B,SAAS4zE,QAAQz1E,GAC5BupB,EAAOD,GAAGrc,OAAOf,GAAGtD,KAAKwH,KAAKnI,KAAMjI,EAASqI,GACxCJ,KAAKI,QAAQuzF,WACd3zF,KAAKypK,UACLzpK,KAAK0pK,aAET1pK,KAAK2pK,SACDv8F,EAAOptE,KAAKjI,QAAQkgB,QAAQ6L,EAAa,SAAStoB,KAAK,mBAEvDwE,KAAKotE,KAAOA,EACZptE,KAAKotE,KAAKhmE,KAAK,WAAY,SAAUa,GACjCwpK,EAAOC,UAAUzpK,KAErBjI,KAAKotE,KAAKhmE,KAAK,oBAAqB,WAChCqqK,EAAO3wK,SAEXigC,EAAa/gC,KAAK+gC,WAAa,GAAI7oC,GAAM0pC,WAAWwrC,EAAKr1E,SACrD6qC,SAAS,EACT/+B,OAAQigB,EAAa,kBACrB4e,gBAAgB,QAEjB,CAGH,GAFA1iC,KAAKmjG,YAAcouE,EACf5pJ,EAAYjxB,EAAEsJ,KAAKI,QAAQunB,YAC1BA,EACD,KAAU7e,OAAM,yDAEpBi4B,GAAa/gC,KAAK+gC,WAAa,GAAI7oC,GAAM0pC,WAAWja,GAChDib,SAAS,EACTF,gBAAgB,IAEpB1iC,KAAK2xK,kBAAkBhqJ,GAEvB8pJ,EAASzxK,KACTc,EAAO,SAAUmH,GACbwpK,EAAOjuK,UACPiuK,EAAO3wK,OACPmH,EAAE9D,mBAGNnE,KAAKI,QAAQwxK,aAAeP,GAC5BtwI,EAAW35B,KAAK,QAAS,WACrBqqK,EAAO39G,WAAW9oC,WAEtB+V,EAAW35B,KAAK,QAAS,SAAUa,GAC/BwpK,EAAO3vI,OAAO75B,KAElB84B,EAAW35B,KAAK,OAAQ,SAAUa,GAC9BwpK,EAAOtiE,QAAQlnG,KAEnB84B,EAAW35B,KAAK,MAAO,SAAUa,GAC7BwpK,EAAOxtI,KAAKh8B,KAEhB84B,EAAW35B,KAAK,MAAOtG,IAEvBigC,EAAW35B,KAAK,QAAStG,GAE7Bd,KAAK6xK,eAA2C,SAA1B7xK,KAAKI,QAAQi2D,SACnCr2D,KAAKwD,SAAU,EACfxD,KAAKjI,QAAQ+I,OAAOxG,SAAS,aAAaA,SAAS0F,KAAK6xK,eAAiB,iBAAmB,mBAC5F7xK,KAAKgI,QAAQ40B,IAEjBx8B,SACI8O,KAAM,SACNmnD,SAAU,OACVltC,SACA2oJ,oBACAF,aAAa,EACbv3I,MAAO,GACP1S,UAAW,MAEfjgB,QACI2hK,EACA/tG,EACAg2G,EACA10I,EACAy+B,GAEJrhE,KAAM,WACEgG,KAAKo+J,aACLp+J,KAAKgmF,SAGbllF,KAAM,WACGd,KAAKmjG,cAGVnjG,KAAKmjG,YAAY1jF,SACjB+xJ,EAAO7lK,QAAU,KACjB3L,KAAK+xK,YAAY,GACjB/xK,KAAKgI,QAAQszD,GAAQ3yC,KAAM3oB,SAE/B6vK,QAAS,WACD7vK,KAAKwD,QACLxD,KAAKc,OAELd,KAAKhG,QAGb8rB,QAAS,WACLzE,EAAGu6C,KAAK33D,GAAG6hB,QAAQ3d,KAAKnI,MACxBA,KAAK+gC,WAAWjb,WAEpBs4I,UAAW,WACP,GAAIp+J,KAAKwD,QACL,OAAO,CAEX,IAAIwuK,GAAuBhyK,KAAKiyK,uBAAuBjyK,KAAKI,QAAQ+oB,MACpE,UAAK6oJ,GAAwBhyK,KAAKgI,QAAQqhK,GAAe1gJ,KAAM3oB,UAG/DA,KAAKkyK,gBACLlyK,KAAKjI,QAAQiC,OACbgG,KAAKgI,QAAQqzD,GAAQ1yC,KAAM3oB,OAC3BA,KAAKoqK,uBACE,IAEX6H,uBAAwB,SAAU9oJ,GAC9B,IAAKnpB,KAAKotE,OAASjkD,EAAMvxB,OACrB,OAAO,CAEX,IAAI+wB,GAAO3oB,KAAKotE,KAAKzkD,MACrB,OAAOjyB,GAAEuM,QAAQ0lB,EAAK9E,GAAG1sB,QAAQ,IAAK,IAAKgyB,OAAezyB,EAAEuM,QAAQ0lB,EAAK5wB,QAAQmL,KAAK,MAAOimB,OAEjG68D,MAAO,WACHhmF,KAAKmjG,YAAY1jF,QAAO,GACxBzf,KAAKwD,SAAU,CACf,IAAIpE,GAASY,KAAKjI,QAAQkB,OACrB+G,MAAK6xK,iBACNzyK,GAAUA,GAEdY,KAAK+xK,YAAY3yK,IAErB8yK,cAAe,WACPV,EAAOliJ,OAAStvB,OACZwxK,EAAOliJ,MACPkiJ,EAAOliJ,KAAKv3B,QAAQ+I,OAExBd,KAAKjI,QAAQiC,QAEjBw3K,EAAOliJ,KAAOtvB,KACdwxK,EAAO7lK,QAAU3L,MAErB+xK,YAAa,SAAU3yK,GACnBY,KAAK+gC,WAAW/V,SAChBhrB,KAAK8zD,WAAWyG,QACZ7+C,SAAUtc,EACViB,SAAU,IACVk0D,KAAM5C,EAAWiJ,eAGzB82G,UAAW,SAAUzpK,GAIjB,MAHIjI,MAAKmjG,aACLnjG,KAAKmjG,YAAY1jF,SAEjBzf,KAAKmjG,cAAgBl7F,EAAE0gB,MACvB3oB,KAAKc,OACL,IAEJd,KAAKmjG,YAAcl7F,EAAE0gB,KACrB3oB,KAAK2xK,kBAAkB1pK,EAAE0gB,KAAK5wB,SAD9BiI,IAGJ2xK,kBAAmB,SAAU55K,GACzB,GAAI6O,GAAO5G,KAAMw6D,EAAUx6D,KAAKw6D,QAAS4tG,EAAgB5tG,GAAWA,EAAQvnC,CACxEjzB,MAAK8zD,aACL9zD,KAAK8zD,WAAW9oC,SAChBhrB,KAAKw6D,QAAQG,SAAS,IAAK,IAE/BH,EAAUx6D,KAAKw6D,QAAU,GAAItiE,GAAMmpB,GAAG8iD,QAAQpsE,GAC9CiI,KAAK8zD,WAAa,GAAInC,IAClBl+B,KAAM29I,EACN52G,QAASx6D,KAAKw6D,QACdL,MAAO,WACmB,IAAlBK,EAAQ42G,KACRr5K,EAAQ,GAAG+B,MAAM6d,QAAU,GAC3B/Q,EAAK7O,QAAQ+I,OACb8F,EAAKoB,QAAQspK,GACb1qK,EAAKpD,SAAU,MAIvB4kK,IACArwK,EAAQuC,SAAS,eACjBpC,EAAM0N,eAAe,WACjB7N,EAAQ4yD,YAAY,eACpB/jD,EAAK4zD,QAAQG,SAASy2G,EAAMhJ,GAC5BxhK,EAAK9F,WAIjBghC,OAAQ,SAAU75B,GAAV,GAMA4pK,GAAsCruK,EAAwB2uK,EAA+EC,EAAgFC,EAL7NtxI,EAAa94B,EAAEC,MACnB,OAAItJ,MAAKC,IAAIoJ,EAAEgrB,EAAEyN,UAAY9hC,KAAKC,IAAIoJ,EAAEoJ,EAAEqvB,WAAaxoC,EAAMisB,iBAAiBlc,EAAE0Q,SAAW3Y,KAAKiyK,uBAAuBjyK,KAAKI,QAAQ0xK,mBAChI/wI,EAAW/V,SACX,IAEA6mJ,EAAiB7xK,KAAK6xK,eAAgBruK,EAAUxD,KAAKwD,QAAS2uK,EAAcN,GAAkBruK,IAAYquK,IAAmBL,EAAO7lK,QAASymK,GAAgBP,GAAkBruK,GAAWquK,IAAmBL,EAAO7lK,QAAS0mK,EAAYpqK,EAAEgrB,EAAEyN,SAAW,GACxPyxI,GAAeE,GAAaD,IAAiBC,IACzCryK,KAAKo+J,aACLr9H,EAAW0C,UACX,IAGR1C,EAAW/V,SAAX+V,KAEJouE,QAAS,SAAUlnG,GACf,GAAiEqqK,GAA7D93G,EAAUx6D,KAAKw6D,QAAS+3G,EAAc/3G,EAAQvnC,EAAIhrB,EAAEgrB,EAAEI,KAEtDi/I,GADAtyK,KAAK6xK,eACajzK,KAAKoT,IAAIpT,KAAKlG,IAAI,EAAG65K,GAAcvyK,KAAKjI,QAAQkB,SAEhD2F,KAAKlG,IAAIkG,KAAKoT,IAAI,EAAGugK,IAAevyK,KAAKjI,QAAQkB,SAEvE+G,KAAKw6D,QAAQG,SAASy2G,EAAMkB,GAC5BrqK,EAAE0Q,MAAMxU,iBACR8D,EAAE0Q,MAAM+R,mBAEZuZ,KAAM,SAAUh8B,GACZ,GAAsHuqK,GAAlH9xI,EAAWz4B,EAAEgrB,EAAEyN,SAAU+xI,EAAW7zK,KAAKC,IAAImB,KAAKw6D,QAAQvnC,GAAKjzB,KAAKjI,QAAQkB,QAAU,EAAGy5K,EAAoB,EAE7GF,GADAxyK,KAAK6xK,eACQnxI,GAAYgyI,IAAsBhyI,EAAWgyI,GAAqBD,GAElE/xI,EAAWgyI,IAAsBhyI,GAAYgyI,GAAqBD,GAE/ED,EACAxyK,KAAKgmF,QAELhmF,KAAKc,SAIjBugB,GAAG8G,OAAOqpJ,IACZ76K,OAAOuB,MAAM2sB,QACRluB,OAAOuB,OACE,kBAAVzB,SAAwBA,OAAOgiC,IAAMhiC,OAAS,SAAUiiC,EAAIC,EAAIC,IACrEA,GAAMD,OAEV,SAAUniC,EAAGC,QACVA,OAAO,0BAA2B,qBAAsBD,IAC1D,WA2GE,MAnGC,UAAUE,EAAGE,GAAb,GACOsB,GAAQvB,OAAOuB,MAAOmpB,EAAKnpB,EAAMopB,OAAOD,GAAIrc,EAASqc,EAAGrc,OAAQ2tK,EAAoB,wCAA2C/2G,EAAOv6C,EAAGu6C,KACzIg3G,EAAYh3G,EAAKl7D,QACjBC,KAAM,SAAU5I,EAASqI,GACrB,GAAiBgtE,GAAM6/F,EAAnBrmK,EAAO5G,IACXgF,GAAOf,GAAGtD,KAAKwH,KAAKvB,EAAM7O,EAASqI,GACnCrI,EAAU6O,EAAK7O,QACfrB,EAAEgK,OAAOkG,EAAMxG,GACfwG,EAAKm0B,MACAn0B,EAAKxG,QAAQuzF,SAId/sF,EAAKsuJ,YAHLtuJ,EAAK6iK,UACL7iK,EAAKsuJ,YAITtuJ,EAAKisK,SACL5F,EAAal1K,EAAQ4C,SAASiM,EAAKukK,QAAQ,cACtCvkK,EAAKxG,QAAQuzF,SAGds5E,EAAWvvK,KAAK,SAAUC,EAAK5F,GAC3BG,EAAMm9B,uBAAuB3+B,EAAEqB,GAAUqI,EAAQuzF,SAAS,MAH9Dz7F,EAAMopB,OAAO3gB,KAAKssK,GAMtBrmK,EAAKwoJ,SACLxoJ,EAAKksK,kBACAlsK,EAAKxG,QAAQuzF,UAMd/sF,EAAK7O,QAAQ4C,SAASzC,EAAM8rB,kBAAkB,SAAStmB,KAAK,WACxD0vE,EAAOl1E,EAAMm9B,uBAAuB3+B,EAAEsJ,MAAOI,EAAQuzF,SAAS,IAC9D/sF,EAAKwoJ,MAAMtnJ,KAAKslE,KAEpBxmE,EAAK7O,QAAQ4C,SAASzC,EAAM8rB,kBAAkB,kBAAkBtmB,KAAK,WACjExF,EAAMm9B,uBAAuB3+B,EAAEsJ,MAAOI,EAAQuzF,SAAS,OAV3D/sF,EAAKi1D,QAAQlhE,SAASzC,EAAM4rB,aAAa,SAASpmB,KAAK,WACnD0vE,EAAOl1E,EAAM2uB,WAAW7mB,QAAUqhB,EAAGyF,OACrClgB,EAAKwoJ,MAAMtnJ,KAAKslE,KAWxBxmE,EAAKmsK,iBAAmBr8K,EAAEi8K,GAAmB77I,SAASlwB,EAAK7O,SAC3D6O,EAAKosK,gBAAkB,GAAI96K,GAAM0pC,WAAWh7B,EAAKmsK,kBAC7CnwI,SAAS,EACTkC,IAAK,WACDl+B,EAAKqsK,oBAIjB9H,QAAS,SAAUjnJ,GACf,MAAOlkB,MAAKI,QAAQuzF,SAAWz7F,EAAM8rB,kBAAkBE,GAAahsB,EAAM4rB,aAAaI,IAE3F9jB,SACI8O,KAAM,YACNpV,MAAO,cAEXo5K,YAAa,WACTlzK,KAAKjI,QAAQuC,SAAS,0BAE1B24K,cAAe,WACXjzK,KAAKjI,QAAQ4yD,YAAY,0BAE7B8+G,QAAS,WACL,GAAI7iK,GAAO5G,KAAMjI,EAAU6O,EAAK7O,OAChC6O,GAAKktD,WAAa57D,EAAM2xB,UAAU9xB,EAAS,cAC3CG,EAAMopB,OAAOD,GAAGu6C,KAAK70D,UAAU0iK,QAAQthK,KAAKnI,MAC5C9H,EAAMopB,OAAO3gB,KAAKX,KAAKy1F,OAAOn0F,IAAItB,KAAKw1F,SACvC5uF,EAAK7O,QAAQuC,SAAS,gBACtBsM,EAAKi1D,QAAQvhE,SAAS,qBAE1Bu4K,OAAQ,WACJ,GAAwDv1K,GAApDxD,EAAQkG,KAAKI,QAAQtG,MAAO/B,EAAUiI,KAAKjI,OAC3C+B,KACAwD,EAASxD,EAAM7C,MAAM,KACrBP,EAAEgH,KAAKJ,EAAQ,WACXvF,EAAQuC,SAAS,YAAc0F,UAI3Cw8D,UAAW,WACP,GAAI51D,GAAO5G,IACX4G,GAAK7O,QAAQE,IAAI,UAAW,IACvB2O,EAAKujK,OAWNnqK,KAAKoqK,uBAVLxjK,EAAKujK,QAAS,EACdzzK,EAAEgH,KAAKkJ,EAAKwoJ,MAAO,WACXpvJ,KAAKI,QAAQq6D,QACbz6D,KAAK8uK,oBAEL9uK,KAAKo6B,SAAS,MAGtBxzB,EAAKoB,QAAQ,QAAU2gB,KAAM/hB,KAIjCA,EAAKoB,QAAQ,QAAU2gB,KAAM/hB,MAGrCya,GAAG8G,OAAOyqJ,IACZj8K,OAAOuB,MAAM2sB,QACRluB,OAAOuB,OACE,kBAAVzB,SAAwBA,OAAOgiC,IAAMhiC,OAAS,SAAUiiC,EAAIC,EAAIC,IACrEA,GAAMD,OAEV,SAAUniC,EAAGC,QACVA,OAAO,4BACH,oBACA,gBACDD,IACL,WAsaE,MA3ZC,UAAUE,EAAGE,GA+DV,QAASu8K,GAAW55J,EAAInZ,GACpB,GAAIiB,KAgCJ,OA/BI89B,IACA99B,EAAQyG,KAAK,SAAWq3B,EAAGjwB,MAG3B7N,EAAQyG,KADRyR,EAAGgxJ,KACU,MAAQhxJ,EAAGgxJ,KAET,OAAXhxJ,EAAGrK,MAAiBqK,EAAG6B,aAAe,EACzB,UAEA,MAAQ7B,EAAGrK,OAGjB,OAAXqK,EAAGrK,MAAiBqK,EAAG6B,aAAe,GAAgB,OAAX7B,EAAGrK,OAC9C7N,EAAQyG,KAAK,MAAQyR,EAAGrK,KAAOqK,EAAG6B,cAEtC/Z,EAAQyG,KAAK,MAAQyR,EAAG6B,cACxB/Z,EAAQyG,KAAK,QAAUyR,EAAGD,aAAeC,EAAGD,aAAa,GAAK,IAC1DC,EAAG65J,UAAY75J,EAAGgxJ,MAAQhxJ,EAAGgxJ,OAAShxJ,EAAGrK,OAASqK,EAAGgxJ,MAAQhxJ,EAAG85J,sBAAuB,IACvFhyK,EAAQyG,KAAK,OAASyR,EAAGgxJ,KAAOhxJ,EAAGgxJ,KAAOhxJ,EAAGrK,MAAQ,IAAMqK,EAAG65J,SAE9D75J,EAAG+B,SACHja,EAAQyG,KAAK,cAGbzG,EAAQyG,KADRyR,EAAGiC,QACU,SAEA,UAEbpb,GAAWA,EAAQkzK,gBACnBjyK,EAAQyG,KAAK,MAAQ1H,EAAQkzK,eAAiB,eAE3CjyK,EAAQnK,KAAK,KAExB,QAASq8K,GAAch6J,GACnB,MAAO,UAAYA,EAAGi6J,aAAqH,IAAtGnhK,SAAS3b,EAAE,0CAA4CuB,IAAI,oBAAoBhB,MAAM,KAAK,GAAI,IAAY,OAAS,QAAUsiB,EAAG65J,QAAU,UAAY75J,EAAG65J,QAAU,UAE5M,QAASK,GAAwB17K,GAC7B,MAAOonC,GAAGzlB,GAAsC,oBAAjC3hB,EAAQE,IAAI,kBAA0C2G,KAAKC,IAAIlI,OAAOs5E,aAAe,IAAM,EAE9G,QAASyjG,GAAoB37K,GACzB,MAAO07K,GAAwB17K,GAAW83E,EAAaC,EAE3D,QAAS6jG,GAAiBvmG,GACtBA,EAAKxzE,SAASgK,UAAU3L,IAAI,aAActB,OAAOwiB,aAErD,QAASy6J,KACLl9K,EAAE,uBAAuBwxB,SACzB2rJ,EAAK/vH,OAAOgwH,GAAmB56K,OAAQ,wBAA0Bu6K,IAA4B,YAAc98K,OAAOwiB,YAAc,KAAOhhB,EAAQgf,SAASkE,aAAe,KAAOljB,EAAQgf,SAASkE,YAAc,IAAM,YAAc1kB,OAAOqiB,WAAa,KAAO,6BAhHnQ,GACO9gB,GAAQvB,OAAOuB,MAAOopB,EAASppB,EAAMopB,OAAQnpB,EAAUD,EAAMC,QAAS6M,EAASsc,EAAOD,GAAGrc,OAAQmiE,EAAO7lD,EAAOD,GAAG8lD,KAAM4sG,EAAa,OAAQ50I,EAAKhnC,EAAQgf,SAAU68J,EAA6B,cAAb70I,EAAGhkB,QAA0BgkB,EAAG9jB,aAAe,KAAO8jB,EAAG9jB,YAAc,KAAQ8jB,EAAG3jB,QAASy4J,EAAiB,IAAMnkG,EAAW,cAAeokG,EAAwB,WAAf/0I,EAAG5lC,QAAsB46K,EAAwBh1I,EAAG3kB,KAAO2kB,EAAG9jB,aAAe,KAAO8jB,EAAG9jB,YAAc,MAAQ8jB,EAAG3jB,SAAW04J,GAASE,EAAuBx1K,KAAKC,IAAIlI,OAAOs5E,aAAe,IAAM,EAAGJ,EAAa,gBAAiBwkG,GACtiBC,MACI95J,KAAK,EACLjhB,QAAS,UACT4hB,OAAQ,SACRE,YAAa,MACbD,aAAc,IACd9B,aAAc,MACdpK,KAAM,MACNyL,QAAQ,GAEZH,KACIA,KAAK,EACLjhB,QAAS,UACT4hB,OAAQ,SACRE,YAAa,MACbD,aAAc,IACd9B,aAAc,MACdpK,KAAM,MACNyL,QAAQ,GAEZf,SACIA,SAAS,EACTrgB,QAAS,UACT4hB,OAAQ,UACRE,YAAa,MACbD,aAAc,IACd9B,aAAc,MACdpK,KAAM,UACNyL,QAAQ,GAEZV,YACIA,YAAY,EACZ1gB,QAAS,UACT4hB,OAAQ,aACRE,YAAa,MACbD,aAAc,IACd9B,aAAc,MACdpK,KAAM,aACNyL,QAAQ,GAEZZ,OACIA,OAAO,EACPxgB,QAAS,UACT4hB,OAAQ,QACRE,YAAa,MACbD,aAAc,IACd9B,aAAc,MACdpK,KAAM,QACNyL,QAAQ,GAEZjB,IACIA,IAAI,EACJngB,QAAS,UACT4hB,OAAQ,KACRE,YAAa,MACbD,aAAc,IACd9B,aAAc,MACdpK,KAAM,KACNyL,QAAQ,IAEbm5J,EAAmB57K,EAAMuK,SAAS,mIAAqI8xK,eAAe,IAAUC,EAAat8K,EAAMuK,SAAS,gQAA4Q8xK,eAAe,IAAUE,EAAev8K,EAAMuK,SAAS,qFAAuF8xK,eAAe,IAAUG,EAAcv1I,EAAGvlB,SAAyB,UAAdulB,EAAG5lC,SAAuB4lC,EAAGllB,WAAY06J,EAAWz8K,EAAMuK,SAAS,+BAAiC08B,EAAGvlB,QAAU,eAAiB,IAAM,yEAA2E26J,eAAe,IAAUK,GAAwB,UAAbz1I,EAAGhkB,QAAmC,QAAbgkB,EAAGhkB,SAAqBgkB,EAAG/jB,aAAe,EAAGy5J,GAAyC,UAAb11I,EAAGhkB,QAAmC,QAAbgkB,EAAGhkB,SAAqBgkB,EAAG/jB,cAAgB,EAAG05J,EAAqBD,EAA2B,OAAS,KAAME,EAAgC,gBAAd51I,EAAG5lC,QAA4B,GAAK,EAAGy7K,EAAoB,GAAIl5F,EAASplF,EAAEC,QAASs+K,EAASt+K,OAAOmiB,OAAQ+6J,EAAOn9K,EAAE,QAASkmC,EAAO,OAAQ52B,EAAQtP,EAAEsP,MAoDrzCkvK,EAAclwK,EAAOtE,QACrBC,KAAM,SAAU5I,EAASqI,GACrBkhB,EAAO2H,YAAcjpB,KACrBtJ,EAAEA,EAAEsP,MAAMhG,KAAM,YAAajI,EAASqI,KAE1C+0K,UAAW,SAAUp9K,EAASqI,GAAnB,GAWHg1K,GAEAxuK,EAAayuK,CAZjBt9K,GAAUrB,EAAEqB,GACPA,EAAQ,KACTA,EAAUrB,EAAE6G,SAASsa,OAEzB7S,EAAOf,GAAGtD,KAAKwH,KAAKnI,KAAMjI,EAASqI,GACnCJ,KAAKjI,QAAQqtB,WAAW,QAAUltB,EAAM+J,GAAK,QAC7CjC,KAAKs1K,iBACLt1K,KAAKu1K,cACLv1K,KAAKw1K,qBACLx1K,KAAKy1K,yBACDL,EAAc1+K,EAAEgK,UAAWV,KAAKI,eAC7Bg1K,GAAYlmK,KACftI,EAAO5G,KAAMq1K,EAAe,WACxBzuK,EAAKwmE,KAAO,GAAIjG,GAAKvgE,EAAK7O,QAASq9K,GACnCxuK,EAAKwmE,KAAK0hG,oBACNloK,EAAKxG,QAAQs1K,qBACb9uK,EAAK+uK,sBAET/uK,EAAKgvK,gBACLhvK,EAAKoB,QAAQ40B,IAEjB58B,KAAKI,QAAQuzF,SACbjqE,WAAW2rJ,GAEXA,KAGRj1K,SACI8O,KAAM,cACN2mK,gBAAgB,EAChBC,gBAAgB,EAChBC,kBAAmBjB,EACnB/K,WAAYpzK,OACZ28K,eAAgB,QAChBx/G,WAAY,GACZkiH,QAAQ,EACR5K,SAAU,KACVb,KAAM,KACNmL,qBAAqB,EACrB5sJ,oBAAoB,GAExBphB,QAASk1B,GACTxC,SAAU,SAAUjX,EAAK2wC,GACrB9zD,KAAKotE,KAAKhzC,SAASjX,EAAK2wC,IAE5B38D,QAAS,SAAUgsB,EAAK2wC,GACpB9zD,KAAKotE,KAAKj2E,QAAQgsB,EAAK2wC,IAE3Bk2G,SAAU,WACN,MAAOhqK,MAAK2oB,OAAOqhJ,UAEvBmF,YAAa,WACT,IAAInvK,KAAKotE,KAGL,KAAUtkE,OAAM,uIAFhB9I,MAAKotE,KAAK+hG,eAKlBC,YAAa,WACT,IAAIpvK,KAAKotE,KAGL,KAAUtkE,OAAM,uIAFhB9I,MAAKotE,KAAKgiG,eAKlBC,qBAAsB,SAAU7qJ,GAC5B,IAAIxkB,KAAKotE,KAGL,KAAUtkE,OAAM,yIAFhB9I,MAAKotE,KAAKiiG,qBAAqB7qJ,IAKvCmE,KAAM,WACF,MAAO3oB,MAAKotE,KAAKzkD,QAErB4hJ,KAAM,SAAUA,GACZ,GAAI3jK,GAAO5G,IACX,OAAKjF,WAAUnD,QAGfgP,EAAKxG,QAAQmqK,KAAOA,GAAQ,GAC5B3jK,EAAK7O,QAAQ,GAAGkG,UAAY,UAC5B2I,EAAK0uK,iBACL1uK,EAAK4uK,qBACE5uK,EAAKxG,QAAQmqK,MANT3jK,EAAKxG,QAAQmqK,MAQ5BzkJ,QAAS,WACL9gB,EAAOf,GAAG6hB,QAAQ3d,KAAKnI,MACvBA,KAAKotE,KAAKtnD,UACN9lB,KAAKI,QAAQ01K,gBACb91K,KAAKivK,OAAOnpJ,WAGpBwvJ,eAAgB,WACZ,GAAI1uK,GAAO5G,KAAMorK,EAAWxkK,EAAKxG,QAAQgrK,SAAUb,EAAO3jK,EAAKxG,QAAQmqK,KAAMtzK,KAAYsiB,EAAK4lB,GAAMk1I,EAAiBN,EACjH3I,KACA7xJ,EAAG85J,oBAAqB,EACA,gBAAbjI,IACPn0K,EAAQm0K,EAASn0K,MAAM,KACvBsiB,EAAK7iB,EAAEgK,QAAS0yK,QAASn8K,EAAM,IAAMsiB,EAAI86J,EAAiBp9K,EAAM,MAEhEsiB,EAAK6xJ,GAGTb,IACAtzK,EAAQszK,EAAKtzK,MAAM,KACdkoC,IACD5lB,EAAG85J,oBAAqB,GAE5B95J,EAAK7iB,EAAEgK,UAAW6Y,GACdgxJ,KAAMtzK,EAAM,GACZm8K,QAASn8K,EAAM,MAGlBsiB,EAAG65J,UACJ75J,EAAGi6J,cAAe,EAClBj6J,EAAG65J,QAAU,QAEjBxsK,EAAK2S,GAAKA,EACV3S,EAAKusK,WAAaA,EAAWvsK,EAAK2S,GAAI3S,EAAKxG,SAC5B,MAAXmZ,EAAGrK,OACEtI,EAAKqvK,8BACNrvK,EAAKqvK,4BAA8Bv/K,EAAEsP,MAAM,YACnCY,EAAK2S,GAAG65J,SAAYxsK,EAAK2S,GAAGgxJ,MAAQ3jK,EAAK2S,GAAGgxJ,OAAS3jK,EAAK2S,GAAGrK,OAAUtI,EAAK2S,GAAGgxJ,OAC/E3jK,EAAK7O,QAAQ4yD,YAAY,6DAA6DrwD,SAASi5K,EAAc3sK,EAAK2S,MAEvH3S,IAEPlQ,EAAE6G,UAAUqsB,IAAI,mBAAoBhjB,EAAKqvK,6BACzCv/K,EAAE6G,UAAUqsB,IAAI,SAAUhjB,EAAKqvK,6BAC1B18J,EAAGgxJ,OACJ3jK,EAAK7O,QAAQ6B,SAAS3B,IAAI,WAAY,UACtCvB,EAAE6G,UAAUmI,GAAG,mBAAoBkB,EAAKqvK,6BACxCv/K,EAAE6G,UAAUmI,GAAG,SAAUkB,EAAKqvK,6BAC9BrvK,EAAKqvK,iCAIjBL,cAAe,WACP51K,KAAKI,QAAQ01K,gBACb91K,KAAKivK,OAAS,GAAI/2K,GAAMilC,QACpB1e,UAAWze,KAAKI,QAAQqe,UACxB6a,KAAMt5B,KAAKI,QAAQk5B,KACnBuB,SAAU76B,KAAKI,QAAQy6B,WAE3B76B,KAAKotE,KAAK4hG,aAAahvK,KAAKivK,QAC5BjvK,KAAKivK,OAAOhgK,SAEPjP,KAAKI,QAAQq6D,SACdz6D,KAAKotE,KAAKhzC,SAAS,KAI/B87I,sBAAuB,WACnB,GAAwJh9K,GAApJi9K,EAAmBz/K,EAAE,oDAAoDwM,KAAK,WAAW5K,MAAM,4BAA6BP,EAAUiI,KAAKjI,OAE3ImB,GADAg7K,EACSv9K,OAAOwiB,YAEZs6J,EAAwB17K,GACpBo+K,EACI/B,EACSa,EAAOl8J,WAAai8J,EAEpBC,EAAOl8J,WAGhBq7J,EACSa,EAAOl8J,WAEPk8J,EAAOl8J,WAAai8J,EAIjCmB,EACI/B,EACSa,EAAO/7J,YAEP+7J,EAAO/7J,YAAc87J,EAG9BZ,EACSa,EAAO/7J,YAAc87J,EAErBC,EAAO/7J,YAKhCnhB,EAAQmB,OAAOA,IAEnBs8K,mBAAoB,WAChB,GAAiBz3K,GAAb6I,EAAO5G,KAAYjI,EAAU6O,EAAK7O,OACtCA,GAAQ6B,SAASU,SAAS,eAAiBsM,EAAK2S,GAAGoB,OAAS,SAAW,UACvE5iB,EAAQuC,SAASsM,EAAKusK,WAAa,IAAMO,EAAoB37K,IACzDiI,KAAKI,QAAQ0oB,oBACb/wB,EAAQ6B,SAASU,SAAS,uBAE1B45K,GACAn8K,EAAQuC,SAAS,iBAEjBnC,EAAQ0jB,oBACR9jB,EAAQ6B,SAAS3B,IAAI,YAAaE,EAAQ0jB,mBAAqB,MAE/D7b,KAAKI,QAAQ41K,SACbj+K,EAAQ6B,SAASU,SAAS,aAC1BvC,EAAQ6B,SAAS3B,IAAI,YAAaE,EAAQygB,iBAAmBq7J,EAAiB,OAE9ED,GACAJ,IAEAhtK,EAAKxG,QAAQ0oB,mBACb/wB,EAAQ6B,SAASU,SAAS,uBACnBo6K,IACP32K,GAAQ+a,OAAOC,WAAaD,OAAOI,YAAcJ,OAAOC,WAAaD,OAAOI,aAAe,IAC3FxiB,EAAE+9K,GACEx7K,MAAO8E,EACP7E,OAAQ6E,KACR+4B,SAAS+8I,IAEbM,GACAvtK,EAAKsvK,wBAETh+K,EAAMuxB,SAAS,WACX1xB,EAAQ4yD,YAAY,6BAA6BrwD,SAASo5K,EAAoB37K,IAC1E6O,EAAKxG,QAAQ0oB,oBACb6qJ,EAAiB57K,GAEjBo8K,GACAvtK,EAAKsvK,wBAELlC,GACAJ,IAEJ17K,EAAM+oB,OAAOlpB,MAGrBq+K,mBAAoB,WAChBvC,EAAKvsJ,KAAK,QAAQzjB,OAAO,gFAAsFqkB,UAEnHqtJ,YAAa,WACT,GAAiDx3K,GAA7CqC,EAAUJ,KAAKI,QAAS+3E,EAAO/3E,EAAQ+3E,IAS3C,IARAn4E,KAAKo2K,qBACApC,GACDH,EAAKrmG,QAAQsmG,GACT56K,OAAQ,GACR24D,MAAO7xD,KAAKI,QAAQ41K,OAAS,EAAI79K,EAAQygB,iBAAmB,SAGpEi7J,EAAKrmG,QAAQgnG,EAAWp0K,IACpB+3E,EAAM,CACc,gBAATA,KACPA,GAAS7sE,GAAI6sE,GAEjB,KAAKp6E,IAAQo6E,GACT07F,EAAKrmG,QAAQmnG,GACTx8F,KAAMA,EAAKp6E,GACXA,KAAMA,KAIdqC,EAAQ0oB,oBACR6qJ,EAAiB3zK,KAAKjI,UAG9B09K,uBAAwB,WACpB,GAAI7uK,GAAO5G,KAAMq2K,EAAUrwK,EAAMY,EAAM,aACnCzO,EAAQgf,SAASqE,SAAY5U,EAAKxG,QAAQy1K,gBAAmBjB,IAAWhuK,EAAKxG,QAAQ0oB,qBAGzFliB,EAAK+tI,kBACL74D,EAAOp2E,GAAG,OAAQ2wK,GAClBn+K,EAAMuxB,SAAS,WACXC,WAAW/yB,OAAOs3E,SAAU,EAAG,EAAG,OAG1C0nG,oBAAqB,WACjB,GAAI/uK,GAAO5G,KAAMs2K,EAAe/4K,SAAS88B,KACzCzzB,GAAKwmE,KAAKhmE,KAAK,WAAY,SAAUa,GACjC,GAAIoyB,GAAQpyB,EAAE0gB,KAAK0R,KACnB98B,UAAS88B,MAAQA,IAAUzjC,EAAYyjC,EAAQi8I,KAGvDC,SAAU,WACN,GAAI3vK,GAAO5G,KAAMjI,EAAU6O,EAAK7O,OAChCA,GAAQmB,OAAOhB,EAAMC,QAAQ8e,WAAWhf,IAAM,eAAiB88K,EAAkB,OACjFr+K,EAAEC,QAAQqR,QAAQ9P,EAAMC,QAAQ8oB,UAGxC/oB,GAAMopB,OAAO4zJ,YAAcA,EAC3Bh9K,EAAMmpB,GAAG8G,OAAO+sJ,EAAah9K,EAAMopB,OAAQ,WAC7C3qB,OAAOuB,MAAM2sB,QACRluB,OAAOuB,OACE,kBAAVzB,SAAwBA,OAAOgiC,IAAMhiC,OAAS,SAAUiiC,EAAIC,EAAIC,IACrEA,GAAMD,OAEV,SAAUniC,EAAGC,QACVA,OAAO,4BACH,uBACA,qBACDD,IACL,WA0HE,MA/GC,UAAUE,EAAGE,GAAb,GACOsB,GAAQvB,OAAOuB,MAAOC,EAAUD,EAAMC,QAASkpB,EAAKnpB,EAAMopB,OAAOD,GAAIovJ,EAAOpvJ,EAAGovJ,KAAM10F,EAAQ16D,EAAG06D,MAAO/2E,EAASqc,EAAGrc,OAAQ+1E,EAAO,OAAQC,EAAQ,QAAS6kD,EAAU,UAAW22C,EAAU,OAAQC,EAAe,qBAAsBxF,EAAO,yCAA0CyF,EAAiBx+K,EAAMuK,SAAS,sEACxTk0K,EAAc3xK,EAAOtE,QACrBC,KAAM,SAAU5I,EAASqI,GACrB,GAAiBw2K,GAAWj8J,EAAQzb,EAAhC0H,EAAO5G,KAA+BuZ,EAAKphB,EAAQgf,QACvDnS,GAAOf,GAAGtD,KAAKwH,KAAKvB,EAAM7O,EAASqI,GACnCA,EAAUwG,EAAKxG,QACflB,EAAOkB,EAAQlB,KACfnH,EAAU6O,EAAK7O,QAEX4iB,EADS,SAATzb,EACSqa,GAAMA,EAAGoB,OAEA,WAATzb,EAEb03K,EAAYj8J,EAASohE,EAAQ00F,EACzBrwK,EAAQs2K,iBACRA,EAAiBx+K,EAAMuK,SAASrC,EAAQs2K,iBAE5C3+K,EAAQuC,SAAS,kBAAkBwpD,OAAO4yH,GAAiB1rJ,OAAQpkB,EAAKxG,QAAQ4qB,UAAWlyB,KAAKm4K,GAAMvrK,GAAG,KAAM8wK,EAAS,UAAU9wK,GAAG,QAAS8wK,EAASt+K,EAAMiM,gBAC7JyC,EAAK+hB,OAAOvhB,KAAK,UAAW,WACxBR,EAAKkf,YAETlf,EAAKvN,QAAUtB,EAAQ6B,SAASU,SAAS4E,EAAO,mBAAqBA,EAAO,IAC5E0H,EAAKkqK,KAAO,GAAI8F,GAAUhwK,EAAKvN,QAAS3C,EAAEgK,QACtCq8E,MAAOxjE,EAAGiB,KAAOjB,EAAG6B,aAAe,EACnCnd,UAAW,uBACZ2I,EAAKxG,QAAQy9E,QAChBj3E,EAAKuyI,YAAcziJ,EAAEsP,MAAMY,EAAM,UACjCA,EAAKiwK,eAAiBngL,EAAEsP,MAAMY,EAAM,aACpCA,EAAKkqK,KAAK1pK,KAAK,OAAQR,EAAKiwK,gBACxBl8J,GACAziB,EAAMuxB,SAAS7iB,EAAKuyI,aAExBjhJ,EAAM0uB,OAAOhgB,EAAMya,IAEvB3Z,QACIqzE,EACAC,EACA6kD,GAEJz/H,SACI8O,KAAM,cACN8b,OAAQ,SACR9rB,KAAM,OACN2+E,OAAS3kF,OAAQ,SAErBmjF,KAAM,SAAUj8D,EAAQpc,GACpB,GAAI4C,GAAO5G,IACX4G,GAAKwZ,OAAS1pB,EAAE0pB,GAChBxZ,EAAK5C,QAAUA,EACf4C,EAAKkqK,KAAK92K,KAAKomB,IAEnBk8D,MAAO,WACHt8E,KAAKgE,QAAUhE,KAAKogB,OAAS,KAC7BpgB,KAAK8wK,KAAKhwK,QAEd+uK,QAAS,SAAUzvJ,GACf,GAAIxZ,GAAO5G,KAAMgE,EAAUoc,EAAO5kB,KAAKi7K,EACvC7vK,GAAKy1E,KAAKj8D,EAAQpc,GAClB4C,EAAKoB,QAAQ+yE,GACT36D,OAAQA,EACRpc,QAASA,KAGjB8hB,QAAS,WACL9gB,EAAOf,GAAG6hB,QAAQ3d,KAAKnI,MACvB9H,EAAMyxB,aAAa3pB,KAAKm5I,aACxBn5I,KAAK8wK,KAAKhrJ,WAEdoe,OAAQ,SAAUj8B,GAAV,GAIA22B,GACAjI,EAEImgJ,EAGGnjF,CATP1rF,GAAE7D,uBAGFw6B,EAAgBloC,EAAEuR,EAAE22B,eACpBjI,EAASiI,EAAcpjC,KAAK,UAC5Bm7B,IACImgJ,GACI12J,OAAQpgB,KAAKogB,OACbpc,QAAShE,KAAKgE,SACf2vF,EAAW3zF,KAAKI,QAAQuzF;AAC3BA,EACA3zF,KAAKjI,QAAQw9B,WAAW9R,IAAI,UAAUkT,GAAQg9D,EAAS,IAAImjF,GAE3D5+K,EAAMorB,OAAOqT,GAAQhgC,QAAQmgL,IAGrC92K,KAAKgI,QAAQ63H,GACTz/G,OAAQpgB,KAAKogB,OACbpc,QAAShE,KAAKgE,QACd46B,cAAeA,IAEnB32B,EAAE9D,iBACFnE,KAAKu5G,WAETw9D,UAAW,SAAU9uK,GACZjI,KAAKgI,QAAQgzE,GAGd/yE,EAAE9D,iBAFFnE,KAAKgE,QAAUhE,KAAKogB,OAAS,MAKrCm5F,OAAQ,SAAUtxG,GACTjI,KAAKgI,QAAQgzE,GAGd/yE,EAAE9D,iBAFFnE,KAAKs8E,UAMjBj7D,GAAG8G,OAAOwuJ,IACZhgL,OAAOuB,MAAM2sB,QACRluB,OAAOuB,OACE,kBAAVzB,SAAwBA,OAAOgiC,IAAMhiC,OAAS,SAAUiiC,EAAIC,EAAIC,IACrEA,GAAMD,OAEV,SAAUniC,EAAGC,QACVA,OAAO,uBAAwB,oBAAqBD,IACtD,WAgME,MAxLC,UAAUE,EAAGE,GAEV,QAASogL,GAAgBh0K,EAAQ2V,EAAOs+J,GACpCvgL,EAAEiiB,EAAMyH,QAAQnI,QAAQ,yBAAyB7W,YAAY,kBAAmB61K,GAC5EC,GAAcl0K,EAAOm0K,sBACrBvsJ,aAAa5nB,EAAOm0K,qBACpBn0K,EAAOm0K,oBAAsB,GAGrC,QAASC,GAAYx5K,GACjB,MAAOlH,GAAE,0BAA4BkH,EAAQ,WAVpD,GACO1F,GAAQvB,OAAOuB,MAAOopB,EAASppB,EAAMopB,OAAQD,EAAKC,EAAOD,GAAIrc,EAASqc,EAAGrc,OAAQ7M,EAAUD,EAAMC,QAASohB,EAAKphB,EAAQgf,SAAU+/J,EAAa39J,EAAGK,SAAWL,EAAG8B,aAAe,IAAKg8D,EAAQ,QAASI,EAAW,WAAYC,EAAgB,oBAW3OG,EAAS7yE,EAAOtE,QAChBC,KAAM,SAAU5I,EAASqI,GAAnB,GAGEi3K,GAFAzwK,EAAO5G,IACXgF,GAAOf,GAAGtD,KAAKwH,KAAKvB,EAAM7O,EAASqI,GAC/Bi3K,EAAkC,OAAzBzwK,EAAKxG,QAAQk3K,QAC1B1wK,EAAKk1D,QACLl1D,EAAKisK,SACAwE,GACDzwK,EAAK7O,QAAQmL,KAAK,0BAA0B,GAEhD0D,EAAKxG,QAAQqf,OAAS7Y,EAAKxG,QAAQqf,SAAW7Y,EAAK7O,QAAQmL,KAAKu0E,GAChE7wE,EAAK6Y,OAAO7Y,EAAKxG,QAAQqf,QACzB7Y,EAAK2wK,YAAc,GAAIr/K,GAAM0pC,WAAWh7B,EAAK7O,SACzC2qC,gBAAiB20I,EACjBz0I,SAAS,EACTtB,MAAO,SAAUr5B,GACbrB,EAAKw3J,UAAUn2J,IAEnB2lF,QAAS,SAAU3lF,GACf+uK,EAAgBpwK,EAAMqB,GAAG,GACpBovK,GACDpvK,EAAE0Q,MAAM+R,qBAIpB9jB,EAAK2wK,YAAYnwK,KAAKiwK,EAAS,MAAQ,QAAS,SAAUpvK,GACtDrB,EAAKy+D,SAASp9D,KAEdivK,GACAtwK,EAAK7O,QAAQ2N,GAAG,OAAQ,SAAUuC,GAC9BrB,EAAK4wK,mBAAmBvvK,MAIpC6d,QAAS,WACL9gB,EAAOf,GAAG6hB,QAAQ3d,KAAKnI,MACvBA,KAAKu3K,YAAYzxJ,WAErBpe,QAAS2vE,GACTj3E,SACI8O,KAAM,SACNipE,KAAM,GACNr+E,MAAO,GACP29K,MAAO,GACPH,QAAS,KACT73J,QAAQ,GAEZg4J,MAAO,SAAU75K,GACb,GAAI65K,GAAQz3K,KAAK03K,aAAe13K,KAAK03K,cAAgBN,EAAYx5K,GAAOk5B,SAAS92B,KAAKjI,QACtF,OAAI6F,IAAmB,IAAVA,GACT65K,EAAM/0K,KAAK9E,GACJoC,MAEPpC,KAAU,GACV65K,EAAM3nI,QAAQ5nB,SACdloB,KAAK03K,cAAe,EACb13K,MAEJy3K,EAAM/0K,QAEjB+c,OAAQ,SAAUA,GACd,GAAI1nB,GAAUiI,KAAKjI,OACE,KAAV0nB,IACPA,GAAS,GAEbzf,KAAKI,QAAQqf,OAASA,EAClBA,EACA1nB,EAAQqtB,WAAWqyD,GAEnB1/E,EAAQmL,KAAKu0E,EAAUA,GAE3B1/E,EAAQqJ,YAAYs2E,GAAgBj4D,IAExC+3J,mBAAoB,SAAUvvK,GACrBjI,KAAKm3K,sBACNn3K,KAAKm3K,oBAAsBztJ,WAAWstJ,EAAiB,IAAKh3K,KAAMiI,GAAG,KAG7Em2J,UAAW,SAAUn2J,GACjB,GAAIuK,GAAgBjV,SAASiV,cAAenP,EAAWmP,EAAgBA,EAAcnP,SAAW,EAC5FrD,MAAKI,QAAQqf,SACbu3J,EAAgBh3K,KAAMiI,GAAG,GACT,SAAZ5E,GAAmC,YAAZA,GACvBmP,EAAcha,SAI1B6sE,SAAU,SAAUp9D,GAChB,GAAIrB,GAAO5G,IACX,MAAIiI,EAAE67B,MAAQ,GAGd,MAAKl9B,GAAKxG,QAAQqf,QAId7Y,EAAKoB,QAAQqvE,GACTj3D,OAAQ1pB,EAAEuR,EAAEmY,QACZ+1D,OAAQvvE,EAAK7O,WAEjBkQ,EAAE9D,iBAJN,IAHI8D,EAAE9D,iBACF,IASR0uK,OAAQ,WACJ,GAAwDv1K,GAApDxD,EAAQkG,KAAKI,QAAQtG,MAAO/B,EAAUiI,KAAKjI,OAC3C+B,KACAwD,EAASxD,EAAM7C,MAAM,KACrBP,EAAEgH,KAAKJ,EAAQ,WACXvF,EAAQuC,SAAS,MAAQ0F,UAIrC87D,MAAO,WACH,GAAIl1D,GAAO5G,KAAMm4E,EAAOvxE,EAAKxG,QAAQ+3E,KAAMs/F,EAAQ7wK,EAAKxG,QAAQq3K,MAAOE,EAAW,2BAA6Bx/F,EAAMpgF,EAAU6O,EAAK7O,QAAQuC,SAAS,aAAci+E,EAAOxgF,EAAQ4C,SAAS,sBAAsBL,SAAS,WAAY+zI,EAAQt2I,EAAQuvB,KAAK,OAAOhtB,SAAS,aACtQi+E,EAAK,IAAMxgF,EAAQ2K,SACpB61E,EAAOxgF,EAAQ41E,UAAU,4BAA4BhzE,SAAS,kBAE7D0zI,EAAM,IAAMl2D,IACRI,EAAK,KACNo/F,GAAY,cAEhB/wK,EAAKgxK,YAAc7/K,EAAQy1E,QAAQ92E,EAAEihL,EAAW,WAEhDF,GAAmB,IAAVA,KACT7wK,EAAK8wK,aAAeN,EAAYK,GAAO3gJ,SAAS/+B,OAIxD8/K,EAAahgG,EAAOn3E,QACpBN,SACI8O,KAAM,aACNpV,MAAO,QAEX6G,KAAM,SAAU5I,EAASqI,GACrB,GAAIwG,GAAO5G,IACX63E,GAAO5zE,GAAGtD,KAAKwH,KAAKvB,EAAM7O,EAASqI,GACM,IAA9BwG,EAAK7O,QAAQmL,KAAK,SACzB0D,EAAK7O,QAAQmL,KAAK,OAAQ,aAIlC40K,EAAejgG,EAAOn3E,QACtBN,SACI8O,KAAM,eACNpV,MAAO,IAEX6G,KAAM,SAAU5I,EAASqI,GACrBy3E,EAAO5zE,GAAGtD,KAAKwH,KAAKnI,KAAMjI,EAASqI,IAEvCyyK,OAAQ,WAAA,GAGIv1K,GAFJxD,EAAQkG,KAAKI,QAAQtG,MAAQ,UAAW/B,EAAUiI,KAAKjI,OACvD+B,KACIwD,EAASxD,EAAM7C,MAAM,KACzBP,EAAEgH,KAAKJ,EAAQ,WACXvF,EAAQuC,SAAS,MAAQ0F,UAIrC87D,MAAO,WACH,GAAIl1D,GAAO5G,KAAMm4E,EAAOvxE,EAAKxG,QAAQ+3E,KAAMw/F,EAAW,2BAA6Bx/F,EAAMpgF,EAAU6O,EAAK7O,QAASwgF,EAAOxgF,EAAQ4C,SAAS,QAAS0zI,EAAQt2I,EAAQuvB,KAAK,OAAOhtB,SAAS,aAClL+zI,EAAM,IAAMl2D,IACRI,EAAK,KACNo/F,GAAY,cAEhB5/K,EAAQy1E,QAAQ92E,EAAEihL,EAAW,YAIzCt2J,GAAG8G,OAAO0vD,GACVx2D,EAAG8G,OAAO0vJ,GACVx2J,EAAG8G,OAAO2vJ,IACZnhL,OAAOuB,MAAM2sB,QACRluB,OAAOuB,OACE,kBAAVzB,SAAwBA,OAAOgiC,IAAMhiC,OAAS,SAAUiiC,EAAIC,EAAIC,IACrEA,GAAMD,OAEV,SAAUniC,EAAGC,QACVA,OAAO,4BAA6B,cAAeD,IACrD,WAsGE,MA9FC,UAAUE,EAAGE,GAEV,QAASqH,GAAUiR,GACf,MAAO,KAAOA,EAAO,OAASA,EAElC,QAASkoK,GAAYx5K,GACjB,MAAOlH,GAAE,gBAAkBuH,EAAU,SAAW,KAAOL,EAAQ,WANtE,GACO1F,GAAQvB,OAAOuB,MAAOmpB,EAAKnpB,EAAMopB,OAAOD,GAAIrc,EAASqc,EAAGrc,OAAQuwE,EAAS,eAAgBwiG,EAAU,iBAAkBt4I,EAAS,SAAUq2E,EAAW,cAAgBvgC,EAAS,IAO5KuS,EAAc9iF,EAAOtE,QACrBC,KAAM,SAAU5I,EAASqI,GACrB,GAAIwG,GAAO5G,IACXgF,GAAOf,GAAGtD,KAAKwH,KAAKvB,EAAM7O,EAASqI,GACnCwG,EAAK7O,QAAQuC,SAAS,0CAA0CgtB,KAAK,MAAM5pB,KAAKkJ,EAAKoxK,SACrFpxK,EAAK7O,QAAQ2N,GAAGkB,EAAKxG,QAAQ63K,SAAUniE,EAAU,WACjDlvG,EAAK4wF,SAAU,EACf5wF,EAAKkuB,OAAOluB,EAAKxG,QAAQ+R,OACpBvL,EAAKxG,QAAQqf,SACd7Y,EAAK4wF,SAAU,EACf5wF,EAAKvN,QAAQiB,SAAS2D,EAAU85K,MAGxCrwK,QAAS+3B,GACTr/B,SACI8O,KAAM,cACN+oK,SAAU,OACV9lK,SACAsN,QAAQ,GAEZ9T,QAAS,WACL,MAAO3L,MAAKjI,QAAQuvB,KAAK,OAASiuD,IAEtCzgD,OAAQ,SAAUk4D,GACd,GAAIpmF,GAAO5G,KAAMmS,IACb66E,KAAOp2F,GAAao2F,QAAcpmF,EAAK4wF,UAAW9gG,EAAEs2F,GAAIjzF,GAAG,OAASg+K,KAGxEnxK,EAAK+E,UAAUg/C,YAAY1sD,EAAUs3E,IACnB,gBAAPyX,IACP76E,EAAQ66E,EACRA,EAAKt2F,EAAEkQ,EAAK7O,QAAQ,GAAG4C,SAASqyF,KACzBA,EAAG9lE,WACV8lE,EAAKt2F,EAAEs2F,GACP76E,EAAQ66E,EAAG76E,SAEf66E,EAAG1yF,SAAS2D,EAAUs3E,IACtB3uE,EAAKwkD,cAAgBj5C,IAEzBslK,MAAO,SAAUlrI,EAAM3uC,GACnB,GAAgC65K,GAA5BS,EAAcl4K,KAAKjI,OAMvB,OALK0d,OAAM82B,KACPA,EAAO2rI,EAAYv9K,WAAW8oB,IAAI8oB,IAEtCA,EAAO2rI,EAAY5wJ,KAAKilB,GACxBkrI,EAAQ/gL,EAAE61C,EAAK5xC,SAAS,aAAa,IAAMy8K,EAAYx5K,GAAOk5B,SAASyV,IACnE3uC,GAAmB,IAAVA,GACT65K,EAAM/0K,KAAK9E,GACJoC,MAEPpC,KAAU,GACV65K,EAAM3nI,QAAQ5nB,SACPloB,MAEJy3K,EAAM/0K,QAEjB+c,OAAQ,SAAUA,GACO,IAAVA,IACPA,GAAS,GAEbzf,KAAK3G,QAAQ+H,YAAYnD,EAAU85K,IAAWt4J,GAC9Czf,KAAKw3F,QAAUx3F,KAAKI,QAAQqf,OAASA,GAEzCu4J,QAAS,WACL,GAAI7hG,GAASz/E,EAAEsJ,MAAM1F,SAAS2D,EAAU,WAAYk6E,EAAOjgF,EAAM2xB,UAAUssD,EAAQ,QAASshG,EAAQv/K,EAAM2xB,UAAUssD,EAAQ,SAAUoC,EAAOpC,EAAOx7E,SAAS,QAAS0zI,EAAQl4D,EAAO7uD,KAAK,OAAOhtB,SAAS2D,EAAU,SAC/Ms6E,GAAK,KACNA,EAAOpC,EAAOxI,UAAU,WAAWhzE,SAAS,SAEhD49E,EAAKj+E,SAAS2D,EAAU,UACnBowI,EAAM,IAAMl2D,GACbhC,EAAO3I,QAAQ92E,EAAE,gBAAkBuH,EAAU,QAAU,IAAMA,EAAUk6E,GAAQ,SAE/Es/F,GAAmB,IAAVA,IACTL,EAAYK,GAAO3gJ,SAASq/C,IAGpCtyC,QAAS,SAAU57B,GACXA,EAAE67B,MAAQ,GAAK77B,EAAE7D,uBAAyBpE,KAAKw3F,UAGnDx3F,KAAK80B,OAAO7sB,EAAE22B,eACd5+B,KAAKgI,QAAQy3B,GAAUttB,MAAOnS,KAAKorD,mBAG3C/pC,GAAG8G,OAAO2/D,IACZnxF,OAAOuB,MAAM2sB,QACRluB,OAAOuB,OACE,kBAAVzB,SAAwBA,OAAOgiC,IAAMhiC,OAAS,SAAUiiC,EAAIC,EAAIC,IACrEA,GAAMD,OAEV,SAAUniC,EAAGC,QACVA,OAAO,4BAA6B,cAAeD,IACrD,WAuIE,MA5HC,UAAUE,EAAGE,GAAb,GACOsB,GAAQvB,OAAOuB,MAAOmpB,EAAKnpB,EAAMopB,OAAOD,GAAIrc,EAASqc,EAAGrc,OAAQmzK,EAAc,iBAAkBvV,EAAS,wBAAyBloB,EAAU,yBAA0B09B,EAAQ,sBAAuBC,EAAiB,8CAAmDzV,EAAS,WAAa0V,EAAkB,+CAAoD59B,EAAU,WAAa69B,EAAY,eAAgBC,EAAW,cAAeC,EAAW,cAAev2J,EAAO,OAAQw2J,EAAS,SAAU/9B,EAAW,WACzfg+B,EAAc3zK,EAAOtE,QACrBC,KAAM,SAAU5I,EAASqI,GACrB,GAAIwG,GAAO5G,KAAM2nB,EAAYjxB,EAAEqB,EAC/BiN,GAAOf,GAAGtD,KAAKwH,KAAKvB,EAAM+gB,EAAWvnB,GACrCunB,EAAUrtB,SAAS69K,GACnBvxK,EAAKgyK,eACLhyK,EAAKi1D,QAAUl0C,EAAUhtB,WAAWs6E,IAAIruE,EAAK6uF,QAAQ5iD,QAAQylI,GAAiB1+K,SAC9EgN,EAAK2wK,YAAc,GAAIr/K,GAAM0pC,WAAWh7B,EAAK6uF,QACzC7yD,SAAS,EACTkC,IAAK,WACDl+B,EAAKuZ,YAGbwH,EAAUrtB,SAASsM,EAAKxG,QAAQiwJ,UAAYkoB,EAAYC,GACpD5xK,EAAKxG,QAAQy4K,OACblxJ,EAAUrtB,SAAS89K,GAEnBxxK,EAAKxG,QAAQg8E,WACbx1E,EAAKi1D,QAAQvhE,SAASm+K,GACtB7xK,EAAKi1D,QAAQ3iE,OAAO,GAChB0N,EAAKxG,QAAQiwJ,WACbzpJ,EAAKi1D,QAAQ/6D,QAEV8F,EAAKxG,QAAQiwJ,WACpBzpJ,EAAKi1D,QAAQ/6D,QAGrB4G,QACIgxK,EACA/9B,GAEJv6I,SACI8O,KAAM,cACNmhJ,WAAW,EACXyoB,aAAc,UACdC,WAAY,UACZC,aAAc92J,EACdk6D,WAAW,EACXy8F,OAAO,GAEX/yJ,QAAS,WACL9gB,EAAOf,GAAG6hB,QAAQ3d,KAAKnI,MACvBA,KAAKu3K,YAAYzxJ,WAErBi2H,OAAQ,SAAUk9B,GACd,GAAI9gG,GAAOn4E,KAAKI,QAAQ04K,aAAcj9G,EAAU77D,KAAK67D,QAASrhD,EAAMtiB,EAAMC,QAAQgf,SAASqD,GACtFxa,MAAKgI,QAAQ0wK,KACVvgG,GACAn4E,KAAKy1F,OAAOnuE,KAAK,YAAYqjC,cAAcrwD,SAAS,cAAgB69E,GAExEn4E,KAAKjI,QAAQ4yD,YAAY4tH,GAAWj+K,SAASk+K,GACzCx4K,KAAKI,QAAQg8E,YAAc68F,GAC3Bp9G,EAAQjyC,IAAI,iBACZiyC,EAAQ7hE,OACJwgB,GACAqhD,EAAQlR,YAAY8tH,GAExB58G,EAAQ3iE,OAAO8G,KAAKk5K,qBAChB1+J,GACAqhD,EAAQvhE,SAASm+K,GAErBvgL,EAAM+oB,OAAO46C,IAEbA,EAAQ7hE,SAIpB26B,SAAU,SAAUskJ,GAChB,GAAI9gG,GAAOn4E,KAAKI,QAAQ24K,WAAYl9G,EAAU77D,KAAK67D,OAC9C77D,MAAKgI,QAAQ2yI,KACVxiE,GACAn4E,KAAKy1F,OAAOnuE,KAAK,YAAYqjC,cAAcrwD,SAAS,cAAgB69E,GAExEn4E,KAAKjI,QAAQ4yD,YAAY6tH,GAAUl+K,SAASi+K,GACxCv4K,KAAKI,QAAQg8E,YAAc68F,GAC3Bp9G,EAAQt0D,IAAI,gBAAiB,WACzBs0D,EAAQ/6D,SAEZ+6D,EAAQ3iE,OAAO,IAEf2iE,EAAQ/6D,SAIpBqf,OAAQ,SAAU84J,GACVj5K,KAAKm5K,cACLn5K,KAAK+7I,OAAOk9B,GAEZj5K,KAAK20B,SAASskJ,IAGtBE,YAAa,WACT,MAAOn5K,MAAKjI,QAAQ8B,SAAS0+K,IAEjCt3J,OAAQ,YACCjhB,KAAKm5K,eAAiBn5K,KAAKI,QAAQg8E,WACpCp8E,KAAK67D,QAAQ3iE,OAAO8G,KAAKk5K,sBAGjCN,aAAc,WACV,GAAInjF,GAASz1F,KAAKjI,QAAQ4C,SAAS,WAAWk4C,QAAQwlI,GAAiBV,EAAWjhL,EAAE,2BAA4ByhF,EAAOn4E,KAAKI,QAAQiwJ,UAAYrwJ,KAAKI,QAAQ24K,WAAa/4K,KAAKI,QAAQ04K,aAAcE,EAAeh5K,KAAKI,QAAQ44K,YAC7N7gG,KACAsd,EAAOjoB,QAAQmqG,GACfA,EAASr9K,SAAS,MAAQ69E,IAE9Bn4E,KAAKy1F,OAASA,EAAO77F,SACrBoG,KAAKy1F,OAAOn7F,SAAS,WAAa0+K,IAEtCE,kBAAmB,WACf,GAAwChgL,GAApCY,EAAQkG,KAAK67D,QAAQ34D,KAAK,QAQ9B,OAPAlD,MAAK67D,QAAQ5jE,KACTo+D,SAAU,WACV6W,WAAY,SACZh0E,OAAQ,SAEZA,EAAS8G,KAAK67D,QAAQ3iE,SACtB8G,KAAK67D,QAAQ34D,KAAK,QAASpJ,EAAQA,EAAQ,IACpCZ,IAGfmoB,GAAG8G,OAAOwwJ,IACZhiL,OAAOuB,MAAM2sB,QACRluB,OAAOuB,OACE,kBAAVzB,SAAwBA,OAAOgiC,IAAMhiC,OAAS,SAAUiiC,EAAIC,EAAIC,IACrEA,GAAMD,OAEV,SAAUniC,EAAGC,QACVA,OAAO,yBACH,aACA,mBACA,uBACDD,IACL,WAu8BE,MA37BC,UAAUE,EAAGE,GAEV,QAASwiL,KACL,MAAOp5K,MAAKknB,WAAa0qB,EAAKynI,WAAar5K,KAAKmyB,UAAU75B,MAAMghL,GAEpE,QAASC,GAAQhtI,EAAM4rC,GACfA,IAAS5rC,EAAK,GAAGitI,cAAc,aAC/BjtI,EAAKihC,QAAQ,2BAA6B2K,EAAO,OAGzD,QAASshG,GAAYltI,GACjBgtI,EAAQhtI,EAAM1iB,EAAU0iB,EAAM,SAC9BgtI,EAAQhtI,EAAM1iB,EAAU0iB,EAAK5xC,SAAS++K,GAAgB,SAE1D,QAASC,GAAgBptI,GACrB,GAAI3yC,GAAS2yC,EAAK3yC,SAAUggL,EAAuBrtI,EAAKjrC,IAAI1H,EAAOe,SAASzC,EAAM4rB,aAAa,kBAAmB+1J,EAAajgL,EAAOkjE,WAAWmY,IAAI2kG,GAAsB3kG,IAAImkG,EAC3KS,GAAWjiL,SAGf20C,EAAKjyC,SAAS,oBAAoB4I,KAAKhL,EAAMgL,KAAK,QAAS,iBAC3Dq2K,EAAQhtI,EAAM1iB,EAAUjwB,EAAQ,SAChC2/K,EAAQhtI,EAAM1iB,EAAU0iB,EAAM,UAElC,QAASutI,GAAoBtqI,GACzB,GAAKA,EAAM,GAAGgqI,cAAc,0CAA5B,CAGA,GAAIjtI,GAAOiD,EAAM51C,QACb2yC,GAAKuwB,WAAWmY,IAAIzlC,GAAOylC,IAAI,WAC3B,MAAwB,IAAjBj1E,KAAKknB,WACb,KAGPsoB,EAAMl1C,SAAS,qBACfk1C,EAAM70C,SAAS,gCAAgCL,SAAS,gCAE5D,QAASy/K,GAAMhiL,EAASuH,GACpB5I,EAAEqB,GAASE,IAAI,YAAa,oBAAsBqH,EAAM,YArC/D,GAsSO06K,GAmCAC,EACAC,EAqBAC,EA2BAC,EAgGAC,EA+FAC,EAgEAn/C,EAxnBAjjI,EAAQvB,OAAOuB,MAAO05C,EAAOj7C,OAAOi7C,KAAMtwB,EAASppB,EAAMopB,OAAQD,EAAKC,EAAOD,GAAI3nB,EAAcxB,EAAMyB,aAAc+B,EAAaxD,EAAMsD,KAAKE,WAAYsJ,EAASqc,EAAGpc,gBAAiBs1K,EAAgB,+CAAgDC,EAAqB,wCAAyCd,EAAgB,IAAMxhL,EAAMgL,KAAK,QAAU,IAAK8C,EAAQtP,EAAEsP,MAAO6jB,EAAY3xB,EAAM2xB,UAAW4wJ,EAAc,iBAAkBC,EAAe,kBAAmBC,EAAgB,eAAiBF,EAAc,sCAAuCG,EAAiB1iL,EAAMuK,SAAS,mBAAqBg4K,EAAc,8HAA+Hx5F,EAAU,sCAAuC45F,EAAkB3iL,EAAMuK,SAAS,6PAA8Po8D,EAAK,uBAAwBi8G,EAAS,SAAUlgD,EAAY,YAAaC,EAAc,cAAekgD,EAAc,aAAc1jG,EAAQ,QAAS59C,EAAS,SAAU+Y,EAAW,WAAYrsC,EAAW,WAAYmzK,EAAmB,QAAS0B,EAAe,SAsCzzCC,EAAc/iL,EAAMrB,MAAM6J,QAC1BC,KAAM,SAAUwrD,GAAV,GASE+uH,GACAC,EATAnR,EAAW79G,EAAS69G,UACnBA,KAGLhqK,KAAKI,QAAU+rD,EAAS/rD,QACxBJ,KAAKjI,QAAUo0D,EAASp0D,QACxBiI,KAAKgqK,SAAW79G,EAAS69G,WACzBhqK,KAAKo7K,oBACDF,EAAcl7K,KACdm7K,EAAe,WACfD,EAAYG,iBAEhBlvH,EAAS/kD,KAAK,SAAU+zK,GACxBhvH,EAAS/kD,KAAK0zK,EAAQK,GACtBhvH,EAAS/kD,KAAKwzH,EAAWugD,GACzBn7K,KAAKs7K,eAAiB,SAAUrzK,GAC5BizK,EAAYK,WAAWtzK,IAE3B+hK,EAAS5iK,KAAK,SAAUpH,KAAKs7K,kBAEjCx1J,QAAS,WACL,GAAIlf,GAAO5G,IACP4G,GAAKojK,UACLpjK,EAAKojK,SAASniK,OAAO,SAAUjB,EAAK00K,iBAG5CC,WAAY,SAAUtzK,GAClB,GAAKjI,KAAKw7K,aAAV,CAGA,GAAsFC,GAAYr8K,EAAQq2F,EAAtG36F,EAAI,EAAGkvK,EAAWhqK,KAAKgqK,SAAU0R,EAAU17K,KAAK07K,QAAS/7K,EAAYsI,EAAEtI,SAC3E,GAAG,CAEC,GADA87K,EAAaC,EAAQ5gL,MAChB2gL,EAAY,CACbhmF,EAAS/+F,EAAE,UACX,OAEJ0I,EAASq8K,EAAWr8K,OACpBq2F,EAASgmF,EAAWhmF,aACfr2F,EAAS,EAAIO,EAClBK,MAAK27K,eAAiB7gL,IACtBkvK,EAASt8F,eAAehrE,KAAK+yF,EAAOt5F,SACpC6D,KAAK27K,cAAgB7gL,KAG7BsgL,kBAAmB,WACfp7K,KAAKw7K,aAAqC,UAAtBx7K,KAAKI,QAAQlB,MAAoBc,KAAKI,QAAQo7K,cAEtEH,cAAe,WAEX,GADAr7K,KAAKo7K,oBACAp7K,KAAKw7K,aAAV,CAGA,GAAIE,MAAct8K,EAASY,KAAKgqK,SAASrqK,SACzCK,MAAKjI,QAAQuvB,KAAK,IAAMmzJ,GAAa/8K,KAAK,SAAUm4I,EAAGpgD,GACnDA,EAAS/+F,EAAE++F,GACXimF,EAAQ3zK,SACJ3I,OAAQq2F,EAAOp/B,WAAW/2D,IAAMF,EAChCq2F,OAAQA,MAGhBz1F,KAAK07K,QAAUA,EACf17K,KAAKu7K,YAAa57K,UAAWP,QAGjCw8K,EAA0B,WAC1B,OAAS10I,KAAM,IAEf20I,EAAiB3jL,EAAMrB,MAAM6J,QAC7BC,KAAM,SAAUwrD,GACZ,GAAI1kD,GAAUzH,KAAMI,EAAU+rD,EAAS/rD,QAAS4pK,EAAW79G,EAAS69G,WAAY8R,EAAiB17K,EAAQ07K,gBAAkBF,CAC3H57K,MAAKmsD,SAAWA,EAChBnsD,KAAKgqK,SAAWA,EAChB79G,EAAS/kD,KAAK,cAAe,SAAUa,GACnCR,EAAQ8yE,cAActyE,EAAE2c,cAE5BolJ,EAAS3kJ,YACLmpD,eAAe,EACfutG,KAAM,WACGt0K,EAAQu0K,UACTv0K,EAAQu0K,SAAU,EAClBv0K,EAAQmd,WAAWgjB,KAAKk0I,EAAe3zK,KAAKgkD,EAAU1kD,EAAQq0I,WAGtEp6H,UACIotD,aAAc1uE,EAAQshB,SAASotD,aAC/BC,gBAAiB3uE,EAAQshB,SAASqtD,gBAClCC,gBAAiB5uE,EAAQshB,SAASstD,oBAI9CuL,cAAe,SAAU31D,GACrB,GAAInd,GAAUzH,IACdA,MAAK87I,OAASl3H,EAAW+D,OAAO,GAChC3oB,KAAK4kB,WAAaA,EAClBA,EAAWxd,KAAK,SAAU,WACtBK,EAAQ82C,YAEZ35B,EAAWxd,KAAK,QAAS,WACrBK,EAAQ82C,aAGhBA,QAAS,WAAA,GAMG51B,GALJqhJ,EAAWhqK,KAAKgqK,SAAUplJ,EAAa5kB,KAAK4kB,UAC5C5kB,MAAKg8K,SACLhS,EAAS36F,eAETrvE,KAAKg8K,SAAYh8K,KAAK87I,SAClBnzH,EAAO/D,EAAW+D,OAClBA,EAAK,KACL3oB,KAAK87I,OAASnzH,EAAK,KAG3B3oB,KAAKg8K,SAAU,KAGnBjoF,EAAc77F,EAAMmM,WAAW3D,QAC/BC,KAAM,SAAUP,GACZ,GAAImwC,GAAOvwC,IACX9H,GAAMmM,WAAWJ,GAAGtD,KAAKwH,KAAKooC,GAC9BA,EAAKlZ,OAASj3B,EAAQi3B,OACtBkZ,EAAKr3C,OAASkH,EAAQlH,OACtBq3C,EAAKhE,KAAOnsC,EAAQmsC,KACpBgE,EAAK/pB,SACL+pB,EAAKilD,OAASp1F,EAAQo1F,OACtBjlD,EAAKlZ,OAAOjwB,KAAK,QAAS,WACtBmpC,EAAK/4B,aAGbA,QAAS,WAEL,IAFK,GAMDykK,GAA6BC,EAAU3vI,EAClC5uC,EANL05B,EAASr3B,KAAKq3B,OAAQ7Q,EAAQxmB,KAAKwmB,MAAO21J,GAAa,EACpD31J,EAAM5uB,QACT4uB,EAAMuF,MAAMjG,SAIhB,KAFA9lB,KAAKZ,OAASi4B,EAAOj4B,OACjB68K,EAAkBj8K,KAAKusC,KAClB5uC,EAAM,EAAGA,EAAM05B,EAAOotB,SAAU9mD,IAAO,CAC5C,GAAIA,IAAQ05B,EAAO4Q,QAAS,CACxBk0I,GAAa,CACb,OAEJ5vI,EAAO0vI,EAAgBj8K,KAAK67D,QAAQ77D,KAAKZ,OAASonB,EAAM5uB,SACxD20C,EAAK6vI,MAAMF,GACXA,EAAW3vI,EACX/lB,EAAM1e,KAAKykC,GAEfvsC,KAAKykK,UAAYj+I,EAAM5uB,OACvBoI,KAAKgI,QAAQ,SACbhI,KAAK2lB,UACDw2J,GACAn8K,KAAKgI,QAAQ,eAGrBq0K,YAAa,WACT,IAAKr8K,KAAKwmB,MAAM,GACZ,MAAO,EAEX,IAAI+pB,GAAOvwC,KAAMwmB,EAAQ+pB,EAAK/pB,MAAOlnB,EAAMknB,EAAM,GAAGlnB,IAAKzG,EAAS2tB,EAAMA,EAAM5uB,OAAS,GAAGiB,OAAQyjL,GAAqBzjL,EAASyG,GAAOixC,EAAKk0H,UAAW8X,EAAsBhsI,EAAKlZ,OAAOz/B,OAAS24C,EAAKnxC,OAASmxC,EAAKk0H,SACrN,QAAQzkK,KAAKw1F,OAASx1F,KAAKw1F,OAAOt8F,OAAS,GAAKL,EAAS0jL,EAAsBD,GAEnFE,YAAa,SAAUl9K,GAAV,GACuCitC,GAiBpCkwI,EAjBRvjL,EAAS8G,KAAK9G,SAAUstB,EAAQxmB,KAAKwmB,MAAak2J,EAAgB18K,KAAKZ,MAC3E,IAAKonB,EAAM,GAAX,CAGA,GAAIxmB,KAAK28K,cACL,KAAOn2J,EAAMA,EAAM5uB,OAAS,GAAGiB,OAASyG,EAAe,EAATpG,GACtB,IAAhB8G,KAAKZ,QAGTY,KAAKZ,SACLmtC,EAAO/lB,EAAMuF,MACbwgB,EAAKnE,OAAOpoC,KAAK67D,QAAQ77D,KAAKZ,SAC9BmtC,EAAKqwI,MAAMp2J,EAAM,IACjBA,EAAMze,QAAQwkC,OAGlB,MAAO/lB,EAAM,GAAGlnB,IAAMA,EAAMpG,GAAQ,CAEhC,GADIujL,EAAYz8K,KAAKZ,OAASY,KAAKykK,UAC/BgY,IAAcz8K,KAAKq3B,OAAO4Q,QAAS,CACnCjoC,KAAKgI,QAAQ,aACb,OAEJ,GAAIy0K,IAAcz8K,KAAKq3B,OAAOz/B,OAC1B,KAEJ20C,GAAO/lB,EAAM1U,QACby6B,EAAKnE,OAAOpoC,KAAK67D,QAAQ77D,KAAKZ,OAASY,KAAKykK,YAC5Cl4H,EAAK6vI,MAAM51J,EAAMA,EAAM5uB,OAAS,IAChC4uB,EAAM1e,KAAKykC,GACXvsC,KAAKZ,SAGTs9K,IAAkB18K,KAAKZ,QACvBY,KAAK2lB,YAGbyiB,OAAQ,SAAU9oC,GAAV,GACiCitC,GAAMw8H,EAAWn0F,EAkB1C6nG,EAlBRlsI,EAAOvwC,KAAMwmB,EAAQxmB,KAAKwmB,MAAkCttB,EAAS8G,KAAK9G,SAAUurK,EAAYzkK,KAAKykK,UAAW9rE,EAAUz/F,EAAS,EAAG+lB,GAAMjf,KAAK68K,SAAW,GAAKv9K,EAAKw9K,EAAYx9K,EAAMq5F,EAASokF,EAAez9K,EAAMpG,EAASy/F,CAC9NnyE,GAAM,KAGXxmB,KAAK68K,QAAUv9K,EACfU,KAAK28K,cAAgB19J,EACjBA,EACIuH,EAAM,GAAGlnB,IAAMw9K,GAAat2J,EAAMA,EAAM5uB,OAAS,GAAGiB,OAASkkL,EAAepkF,GAAW34F,KAAKZ,OAAS,IACrGY,KAAKZ,SACLmtC,EAAO/lB,EAAMuF,MACbg9I,EAAYviJ,EAAM,GAClB+lB,EAAKnE,OAAOpoC,KAAK67D,QAAQ77D,KAAKZ,SAC9BonB,EAAMze,QAAQwkC,GACdA,EAAKqwI,MAAM7T,GACXx4H,EAAK5qB,WAGLa,EAAMA,EAAM5uB,OAAS,GAAGiB,OAASkkL,GAAgBv2J,EAAM,GAAGlnB,IAAMw9K,EAAYnkF,IACxE8jF,EAAYz8K,KAAKZ,OAASqlK,EAC1BgY,IAAcz8K,KAAKq3B,OAAO4Q,QAC1BjoC,KAAKgI,QAAQ,cACNy0K,IAAcz8K,KAAKq3B,OAAOz/B,SACjC20C,EAAO/lB,EAAM1U,QACb8iE,EAAWpuD,EAAMA,EAAM5uB,OAAS,GAChC4uB,EAAM1e,KAAKykC,GACXA,EAAKnE,OAAOpoC,KAAK67D,QAAQ77D,KAAKZ,OAASY,KAAKykK,YAC5Cl0H,EAAKnxC,SACLmtC,EAAK6vI,MAAMxnG,GACXrkC,EAAK5qB,cAKrBk2C,QAAS,SAAU1pD,GACf,MAAOnS,MAAKq3B,OAAO4W,GAAG97B,IAE1B2T,QAAS,WACL9lB,KAAK6H,UAET8d,QAAS,WACL,GAAIa,GAAQxmB,KAAKwmB,MAAOlnB,EAAM,EAAGzG,EAAS,EAAGkwK,EAAYviJ,EAAM,GAAIouD,EAAWpuD,EAAMA,EAAM5uB,OAAS,EAC/FmxK,KACAzpK,EAAMypK,EAAUzpK,IAChBzG,EAAS+7E,EAAS/7E,QAEtBmH,KAAKgI,QAAQ,UACT1I,IAAKA,EACLzG,OAAQA,IAERmH,KAAKw1F,QACLx1F,KAAKw1F,OAAO4mF,MAAMxnG,KAI9B18E,GAAMopB,OAAOD,GAAG0yE,YAAcA,EAC1BimF,EAAsB9hL,EAAMrB,MAAM6J,QAClCC,KAAM,SAAUwrD,EAAU1lC,GACtB,GAAI1uB,GAAUo0D,EAASrI,QAAQr9B,IAAW,GAAM,GAAIvtB,EAASnB,EAAQ4uB,YACrEjwB,GAAEgK,OAAOV,MACLV,IAAK,EACLvH,QAASA,EACTo0D,SAAUA,EACVjzD,OAAQA,EACRL,OAAQK,KAGhBkvC,OAAQ,SAAU3hB,GACdzmB,KAAKjI,QAAUiI,KAAKmsD,SAAS6wH,YAAYh9K,KAAKjI,QAAS0uB,IAE3Dm2J,MAAO,SAAUrwI,GACTA,IACAvsC,KAAK9G,OAAS8G,KAAKjI,QAAQ4uB,aAC3B3mB,KAAKV,IAAMitC,EAAKjtC,IAAMU,KAAK9G,OAC3B8G,KAAKnH,OAAS0zC,EAAKjtC,IACnBy6K,EAAM/5K,KAAKjI,QAASiI,KAAKV,OAGjC88K,MAAO,SAAU7vI,GACTA,IACAvsC,KAAK9G,OAAS8G,KAAKjI,QAAQ4uB,aAC3B3mB,KAAKV,IAAMitC,EAAK1zC,OAChBmH,KAAKnH,OAASmH,KAAKV,IAAMU,KAAK9G,OAC9B6gL,EAAM/5K,KAAKjI,QAASiI,KAAKV,OAGjCwmB,QAAS,WACL5tB,EAAM4tB,QAAQ9lB,KAAKjI,SACnBrB,EAAEsJ,KAAKjI,SAASmwB,YAGpB+xJ,EAAY,sHACZC,EAAkChiL,EAAMrB,MAAM6J,QAC9CC,KAAM,SAAUwrD,GACZnsD,KAAKjI,QAAUrB,EAAE,4EAA4EogC,SAASq1B,EAASp0D,SAC/GiI,KAAKi9K,UAAYvmL,EAAEujL,GAAWnjJ,SAAS92B,KAAKjI,UAEhD0nB,OAAQ,WACJzf,KAAKjI,QAAQiC,OACbgG,KAAK9G,OAASQ,EAAYsG,KAAKjI,SAAS,IAE5CwnB,QAAS,WACLvf,KAAKjI,QAAQ+I,OACbd,KAAK9G,OAAS,GAElBkjL,MAAO,SAAU7vI,GACTA,IACAvsC,KAAKV,IAAMitC,EAAK1zC,OAChBmH,KAAKnH,OAASmH,KAAK9G,OAAS8G,KAAKV,IACjCy6K,EAAM/5K,KAAKjI,QAASiI,KAAKV,SAIjC66K,EAAiCD,EAAgCx5K,QACjEC,KAAM,SAAUwrD,EAAU90B,GACtBr3B,KAAKi9K,UAAYvmL,EAAEujL,GAAWn5K,OAC9Bd,KAAKk9K,YAAcxmL,EAAE,sBAAwBy1D,EAAS/rD,QAAQshB,SAASy7J,aAAe,QAAQr8K,OAC9Fd,KAAKjI,QAAUrB,EAAE,wDAAwDotD,OAAO9jD,KAAKi9K,WAAWn5H,OAAO9jD,KAAKk9K,aAAapmJ,SAASq1B,EAASp0D,QAC3I,IAAIqlL,GAAWp9K,IACfA,MAAKk9K,YAAYG,oBAAoB7hL,KAAK,qBAAqB4L,KAAK,QAAS,WACzEg2K,EAASE,kBACTjmJ,EAAO+pB,SAEX/pB,EAAOjwB,KAAK,SAAU,WAClBg2K,EAASG,oBAEbv9K,KAAK9G,OAASQ,EAAYsG,KAAKjI,SAAS,GACxCiI,KAAKuf,WAET+9J,gBAAiB,WACbt9K,KAAKk9K,YAAYp8K,OACjBd,KAAKjI,QAAQuC,SAAS,uBACtB0F,KAAKi9K,UAAUhlL,IAAI,UAAW,UAElCslL,gBAAiB,WACbv9K,KAAKk9K,YAAYljL,OACjBgG,KAAKjI,QAAQ4yD,YAAY,uBACzB3qD,KAAKi9K,UAAUn8K,UAGnBs5K,EAA4BliL,EAAMrB,MAAM6J,QACxCC,KAAM,SAAUwrD,GACZ,GAAI2B,GAAS9tD,IACbA,MAAKw9K,aAAe9jL,EAAYyyD,EAAS9yD,QAAQsB,WAAWs6E,IAAI9oB,EAASp0D,UACzEiI,KAAKmsD,SAAWA,EAChBnsD,KAAKgqK,SAAW79G,EAAS69G,WACzBhqK,KAAKI,QAAU+rD,EAAS/rD,QACxB+rD,EAAS/kD,KAAK,cAAe,SAAUa,GACnC6lD,EAAOysB,cAActyE,EAAE2c,WAAY3c,EAAE6nC,SAEzCqc,EAAS/kD,KAAK,SAAU,WACf0mD,EAAOvd,KAAK/pB,MAAM5uB,SAGvBk2D,EAAOk8G,SAASxjH,QAChBsH,EAAOz2B,OAAOygB,MAAM,GACpBgW,EAAOvd,KAAK/4B,aAEhBxX,KAAKgqK,SAASnkG,cACd7lE,KAAKqrG,QAAU,SAAUpjG,GACrB6lD,EAAOvd,KAAKnI,OAAOngC,EAAEtI,YAEzBK,KAAKgqK,SAAS5iK,KAAK,SAAUpH,KAAKqrG,SAClCrrG,KAAKy9K,WAAa,SAAUx1K,GACxB6lD,EAAOvd,KAAKisI,YAAYv0K,EAAEtI,YAE9BK,KAAKgqK,SAAS5iK,KAAK,YAAapH,KAAKy9K,aAEzC33J,QAAS,WACL9lB,KAAKuwC,KAAK1oC,SACV7H,KAAKq3B,OAAOxvB,SACZ7H,KAAKgqK,SAASniK,OAAO,SAAU7H,KAAKqrG,SACpCrrG,KAAKgqK,SAASniK,OAAO,YAAa7H,KAAKy9K,aAE3CljG,cAAe,SAAU31D,EAAYkrB,GAAtB,GAC8H7I,GAAU5P,EAAQm+D,EAkBvJjlD,EAlBAud,EAAS9tD,KAAMI,EAAUJ,KAAKI,QAAS+rD,EAAWnsD,KAAKmsD,SAAU69G,EAAW79G,EAAS69G,WAAY0T,EAAkBt9K,EAAQg9K,QAG/H,IAFAp9K,KAAK4kB,WAAaA,EAClBqiB,EAAWriB,EAAWqiB,YAAc7mC,EAAQu9K,iBACvC12I,IAAa6I,EACd,KAAUhnC,OAAM,mJAEhB9I,MAAKq3B,QACLr3B,KAAKq3B,OAAOvR,UAEhBuR,EAAS,GAAIn/B,GAAMsD,KAAKq2C,OAAOjtB,EAAYhmB,KAAKpE,MAAMysC,EAAW,GAAIy2I,GAEjEloF,EADAkoF,EACS,GAAIvD,GAA+BhuH,EAAU90B,GAE7C,GAAI6iJ,GAAgC/tH,GAE7CnsD,KAAKuwC,MACLvwC,KAAKuwC,KAAKzqB,UAEVyqB,EAAO,GAAIwjD,IACX18D,OAAQA,EACRm+D,OAAQA,EACRjpD,KAAM,SAAU9lB,GACZ,MAAO,IAAIuzJ,GAAoB7tH,EAAU1lC,IAE7CvtB,OAAQ,WACJ,MAAO8wK,GAAS9wK,YAGxBq3C,EAAKnpC,KAAK,SAAU,WAChB0mD,EAAO8vH,qBACPzxH,EAAS0xH,eAEbttI,EAAKnpC,KAAK,QAAS,WACf0mD,EAAO0nC,OAAO/1E,WAElB8wB,EAAKnpC,KAAK,aAAc,WACpBouF,EAAOj2E,UACPuuC,EAAO8vH,uBAEXvmJ,EAAOjwB,KAAK,SAAU,WAClBmpC,EAAKosI,eAAgB,EACrBpsI,EAAKisI,YAAYxS,EAASrqK,aAE9BjJ,EAAEgK,OAAOV,MACLq3B,OAAQA,EACR2yI,SAAUA,EACVz5H,KAAMA,EACNilD,OAAQA,KAGhBooF,mBAAoB,WAChB59K,KAAKgqK,SAAS/jG,YAAY,EAAGjmE,KAAKuwC,KAAK8rI,cAAgBr8K,KAAKw9K,eAEhEhmK,QAAS,WACLxX,KAAKuwC,KAAK/4B,WAEdgvC,MAAO,WACHxmD,KAAKq3B,OAAOygB,MAAM,GAClB93C,KAAKuwC,KAAK/4B,aAGd6iK,EAAqBniL,EAAMrB,MAAM6J,QACjCC,KAAM,SAAUwrD,GAAV,GAIE2xH,GAHAhwH,EAAS9tD,IACbA,MAAKmsD,SAAWA,EAChBnsD,KAAKI,QAAU+rD,EAAS/rD,QACpB09K,EAAa99K,KACjBA,KAAK25E,gBAAkB,SAAU1xE,GAC7B61K,EAAWtmK,QAAQvP,IAEvBjI,KAAKkxG,iBAAmB,WACpB/kD,EAASijH,eAEbjjH,EAAS/kD,KAAK,cAAe,SAAUa,GACnC6lD,EAAOysB,cAActyE,EAAE2c,eAG/BkB,QAAS,WACL9lB,KAAKo2F,qBAET5vC,MAAO,aAEPhvC,QAAS,SAAUvP,GAAV,GACoPskC,GAUrP+a,EAAcG,EAAYE,EAC1Bo2H,EACAC,EAkBI7rK,EA9BJwkB,EAAS1uB,GAAKA,EAAE0uB,OAAQxQ,EAAYle,GAAKA,EAAEue,MAAO2lC,EAAWnsD,KAAKmsD,SAAUvnC,EAAa5kB,KAAK4kB,WAAYq5J,EAAmBj+K,KAAKI,QAAQ89K,gBAAiBv1J,EAAO/D,EAAW+D,OAAQixB,EAASh1B,EAAWkpB,QAASqwI,EAAcvkI,GAAUA,EAAO,EACrP,OAAe,eAAXjjB,GACKw1B,EAASpnC,sBACVwnB,EAAO4f,EAASiyH,eAAej4J,GAAW,GACtComB,GACA4f,EAAS6wH,YAAYzwI,EAAMpmB,EAAU,KAG7C,IAGA43J,EAAoB,QAAXpnJ,IAAqBwnJ,GAAeF,IAAqB9xH,EAAS5R,QAC3EyjI,EAAsB,WAAXrnJ,IAAwBwnJ,EACnCJ,EACAz2H,KACO02H,IACP12H,EAAe6E,EAASiyH,eAAej4J,IAEvCgmC,EAASnkD,QAAQ6yH,GACblkG,OAAQA,GAAU,SAClBnQ,MAAOL,EACPmhC,aAAcA,EACdn1C,MAAOlK,GAAKA,EAAEkK,SAEdnS,KAAKq+K,sBACLlyH,EAASgjH,cAEb,IAEW,QAAXx4I,GAAqBwnJ,EAMH,WAAXxnJ,GAAwBwnJ,EAGxBA,EACPhyH,EAASmyH,eAAe31J,GACjBs1J,IAAqB9xH,EAAS5R,SACrCkN,EAAa0E,EAASqhB,QAAQ7kD,GAC9Bg/B,EAAiBh/B,GAEjBwjC,EAASh1D,QAAQwxB,IARjB8+B,KACA0E,EAASjkC,OAAO/B,KAPZhU,EAAQwW,EAAKzqB,QAAQioB,EAAU,IAC/BhU,OACAs1C,EAAa0E,EAASoyH,SAASp4J,EAAWhU,GAC1Cw1C,EAAiBxhC,IAarBnmB,KAAKq+K,sBACLlyH,EAASgjH,cAEbhjH,EAASnkD,QAAQ4yH,GACb34H,GAAIof,EACJomC,WAAYA,EACZE,eAAgBA,IAvBpB,KA0BJ4yB,cAAe,SAAU31D,GACjB5kB,KAAK4kB,YACL5kB,KAAKo2F,oBAETp2F,KAAK4kB,WAAaA,EAClBA,EAAWxd,KAAKqyB,EAAQz5B,KAAK25E,iBACzB35E,KAAKq+K,sBACLr+K,KAAK4kB,WAAWxd,KAAKorC,EAAUxyC,KAAKkxG,mBAG5C9a,kBAAmB,WACfp2F,KAAK4kB,WAAW/c,OAAO4xB,EAAQz5B,KAAK25E,iBAAiB9xE,OAAO2qC,EAAUxyC,KAAKkxG,mBAE/EmtE,mBAAoB,WAChB,GAAIj+K,GAAUJ,KAAKI,OACnB,QAAQA,EAAQouE,gBAAkBpuE,EAAQg9K,WAAah9K,EAAQo+K,iBAGnElE,EAAiBpiL,EAAMrB,MAAM6J,QAC7BC,KAAM,SAAUwrD,GACZ,GAAItoD,GAAS7D,KAAMy+K,EAAatyH,EAAS/rD,QAAQq+K,WAAY/2K,EAAS,eAAgBd,EAAO5G,IAC7FA,MAAKmsD,SAAWA,EAChBnsD,KAAKI,QAAUq+K,EACftyH,EAASp0D,QAAQ46E,OAAOkoG,GAAkBt9J,YAAakhK,EAAWlhK,aAAe,eAC7EkhK,EAAWC,cAAe,IAC1Bh3K,GAAU,UAEd1H,KAAKjI,QAAUo0D,EAAS9yD,QAAQiuB,KAAK,mBACrCtnB,KAAK2+K,YAAcxyH,EAAS9yD,QAAQiuB,KAAK,sBAAsBrP,QAAQ,QAAQvS,GAAG,SAAWm5D,EAAI,SAAU52D,GACvGA,EAAE9D,mBACHxM,MAAM+N,GAAG,QAAUm5D,EAAI,WACtBh7D,EAAO+6K,WAAa/6K,EAAO86K,YAAY7xI,QACxCpnC,GAAGgC,EAAOzQ,MAAM,KAAKC,KAAK2nE,EAAK,KAAOA,EAAI74D,EAAMhG,KAAK6+K,cAAe7+K,OACvEA,KAAKixG,YAAc9kD,EAAS9yD,QAAQiuB,KAAK,oBAAoB5hB,GAAG2xE,EAAOrxE,EAAMhG,KAAM,iBAAiBc,OACpGd,KAAK8+K,kBAAoBpoL,EAAEsP,MAAMhG,KAAK++K,cAAe/+K,MACrDmsD,EAAS/kD,KAAK,cAAe,SAAUa,GACnCA,EAAE2c,WAAWxd,KAAK,SAAUR,EAAKk4K,sBAGzCC,cAAe,WAAA,GACPC,GAAiBh/K,KAAKmsD,SAASvnC,WAAW/gB,SAC1C86K,EAAc3+K,KAAKmsD,SAAS5R,QAAQokI,WAIpCA,GAAY7xI,IAHXkyI,GAAkBA,EAAet7K,QAAQ,GAAGqa,QAAU/d,KAAKmsD,SAAS/rD,QAAQq+K,WAAW1gK,MAGxEihK,EAAet7K,QAAQ,GAAG9F,MAF1B,KAKxB8yG,QAAS,SAAUjtG,GACfzD,KAAKu6C,SAAU,EACfv6C,KAAKixG,YAAYxtG,EAAO,OAAS,UACjCzD,KAAKmsD,SAASvnC,WAAW/gB,OAAOJ,IAEpCo7K,cAAe,SAAU52K,GACrB,GAAIpE,GAAS7D,IACC,UAAViI,EAAE/I,MAAmBc,KAAKI,QAAQs+K,cAAe,EACjDh1J,WAAW,WACP7lB,EAAOo7K,gBACR,GAEHj/K,KAAKi/K,gBAGbA,aAAc,WACV,GAAI7+K,GAAUJ,KAAKI,QAASxC,EAAQoC,KAAK2+K,YAAY7xI,MAAOrpC,EAAO7F,EAAMhG,QACjEmmB,MAAO3d,EAAQ2d,MACfgoB,SAAU3lC,EAAQ2lC,UAAY,aAC9BzJ,WAAYl8B,EAAQk8B,WACpB1+B,MAAOA,GACP,IACJA,KAAUoC,KAAK4+K,aAGnB5+K,KAAK4+K,WAAahhL,EAClBoC,KAAK0wG,QAAQjtG,KAEjBkxF,aAAc,SAAU1sF,GACpBjI,KAAK2+K,YAAY7xI,IAAI,IACrB9sC,KAAK0wG,QAAQ,MACbzoG,EAAE9D,oBAGNg3H,EAAWn2H,EAAOtE,QAClBC,KAAM,SAAU5I,EAASqI,GACrB,GAAI+rD,GAAWnsD,IACfgF,GAAOf,GAAGtD,KAAKwH,KAAKnI,KAAMjI,EAASqI,GACnCrI,EAAUiI,KAAKjI,QACfqI,EAAUJ,KAAKI,QACXA,EAAQ8+K,iBACR9+K,EAAQ++K,gBAAkB/+K,EAAQ8+K,gBAEtCnnL,EAAQ2N,GAAG,OAAQ80K,EAAoB,cAAc90K,GAAG,iBAAkB80K,EAAoB,QAC9Fx6K,KAAKu3K,YAAc,GAAIr/K,GAAM0pC,WAAW7pC,GACpC6qC,SAAS,EACT/+B,OAAQ02K,EACR73I,gBAAgB,EAChBoC,IAAK,SAAU78B,GACXkkD,EAASjoB,OAAOj8B,MAGxBlQ,EAAQE,IAAI,mBAAoB,QAChCF,EAAQe,KAAKmoF,GACbjhF,KAAK3G,QAAU2G,KAAKjI,QAAQ6B,SAC5BoG,KAAKo/K,aAAe,GAAInE,GAAYj7K,MACpCA,KAAKq/K,eACLr/K,KAAK09F,aACL19F,KAAK8lE,QAAU1lE,EAAQo+K,eAAiBp+K,EAAQg9K,SAChDp9K,KAAK6yK,SACD7yK,KAAKI,QAAQuzF,WAAa3zF,KAAK8lE,SAAW9lE,KAAKI,QAAQouE,eACvD9kD,WAAWhzB,EAAEsP,MAAMhG,KAAM,WAEzBA,KAAK8hC,UAGbA,OAAQ,WACJ,GAAI1hC,GAAUJ,KAAKI,OACfJ,MAAKI,QAAQq+K,aACbz+K,KAAKu6C,QAAU,GAAI+/H,GAAet6K,OAGlCA,KAAKs/K,YADLt/K,KAAK8lE,QACc,GAAIs0G,GAA0Bp6K,MAE9B,GAAIq6K,GAAmBr6K,MAE1CA,KAAKI,QAAQouE,gBACbxuE,KAAKu/K,sBAAwB,GAAI1D,GAAe77K,OAEpDA,KAAKu6E,cAAcn6E,EAAQwkB,YAC3B5kB,KAAKw/K,cAAcx/K,KAAKwmB,SACxBtuB,EAAM0uB,OAAO5mB,KAAMqhB,IAEvB3Z,QACI2vE,EACAwjD,EACAD,EACAmgD,GAEJ36K,SACI8O,KAAM,WACNpV,MAAO,GACPoF,KAAM,OACN8pD,UAAU,EACVwyH,cAAc,EACd/4K,SAAU,UACVmwF,eAAgB,wCAChBsrF,iBAAiB,EACjBd,UAAU,EACVoB,eAAe,EACfW,gBAAiB,GACjB3wG,eAAe,EACf9sD,UACIy7J,aAAc,qBACdruG,aAAc,kBACdC,gBAAiB,qBACjBC,gBAAiB,cAErBJ,WAAY,IACZ6vG,YAAY,EACZd,gBAAiB,MAErBnmK,QAAS,WACLxX,KAAKs/K,YAAY9nK,WAErBgvC,MAAO,WACHxmD,KAAKs/K,YAAY94H,SAErB+zB,cAAe,SAAU31D,GACrB,GAAI66J,IAAmB76J,CACvB5kB,MAAK4kB,WAAalpB,EAAW2sC,OAAOzjB,GACpC5kB,KAAKgI,QAAQ,eACT4c,WAAY5kB,KAAK4kB,WACjBkrB,MAAO2vI,IAEPz/K,KAAKI,QAAQ4oD,WAAay2H,IAC1Bz/K,KAAKwmB,QAAQ0B,SACbloB,KAAK4kB,WAAWs8B,UAGxBp7B,QAAS,WACL9gB,EAAOf,GAAG6hB,QAAQ3d,KAAKnI,MACvB9H,EAAM4tB,QAAQ9lB,KAAKjI,SACnBiI,KAAKu3K,YAAYzxJ,UACb9lB,KAAKs/K,aACLt/K,KAAKs/K,YAAYx5J,UAEjB9lB,KAAKo/K,cACLp/K,KAAKo/K,aAAat5J,UAEtB9lB,KAAKjI,QAAQ0vG,eACNznG,MAAKjI,cACLiI,MAAK3G,cACL2G,MAAKu3K,aAEhB/wJ,MAAO,WACH,MAA0B,UAAtBxmB,KAAKI,QAAQlB,KACNc,KAAKjI,QAAQuvB,KAAK,YAAY3sB,WAE9BqF,KAAKjI,QAAQ4C,WAAWs6E,IAAI,kBAG3C+0F,SAAU,WAIN,MAHKhqK,MAAK0/K,oBACN1/K,KAAK0/K,kBAAoB1/K,KAAKjI,QAAQkgB,QAAQ,sBAAsBzc,KAAK,wBAEtEwE,KAAK0/K,mBAEhBtQ,YAAa,WACT,GAAIzmJ,GAAO3oB,KAAK2oB,MACZA,IAAQA,EAAK8jJ,QACb9jJ,EAAK8jJ,OAAOzyK,QAGpBm1K,YAAa,WACT,GAAIxmJ,GAAO3oB,KAAK2oB,MACZA,IAAQA,EAAK8jJ,QACb9jJ,EAAK8jJ,OAAO3rK,QAGpBy9K,SAAU,SAAUp4J,EAAWhU,EAAOwtK,GAClC,GAAIxzH,GAAWnsD,IACf,OAAOmsD,GAASm3G,aAAan9I,EAAW,SAAUK,GAQ9C,GAPc,IAAVrU,EACAg6C,EAASp0D,QAAQy1E,QAAQhnD,GAClBrU,OACPg6C,EAASp0D,QAAQ+rD,OAAOt9B,GAExB2lC,EAAS3lC,QAAQuC,GAAG5W,EAAQ,GAAGqrD,MAAMh3C,GAErCm5J,EACA,IAAK,GAAI7kL,GAAI,EAAGA,EAAI0rB,EAAM5uB,OAAQkD,IAC9BqxD,EAASnkD,QAAQ+yK,GACbxuI,KAAM/lB,EAAMuC,GAAGjuB,GACfU,KAAM2qB,EAAUrrB,GAChBmH,GAAIof,OAMxByiC,OAAQ,SAAU39B,EAAWw5J,GACzB,MAAO3/K,MAAKu+K,SAASp4J,KAAew5J,IAExCnyG,QAAS,SAAUrnD,EAAWw5J,GAC1B,MAAO3/K,MAAKu+K,SAASp4J,EAAW,EAAGw5J,IAEvCxoL,QAAS,SAAUgvB,GAOf,MANAnmB,MAAKI,QAAQlB,KAAO,OACpBc,KAAKqmB,cAAc,WACnBnuB,EAAM4tB,QAAQ9lB,KAAKjI,QAAQ4C,YAC3BqF,KAAKjI,QAAQ+3C,QACb9vC,KAAKu3K,YAAYvsJ,SACjBhrB,KAAK6yK,SACE7yK,KAAKu+K,SAASp4J,EAAW,IAEpCm4J,eAAgB,SAAU1kI,GACtB55C,KAAKI,QAAQlB,KAAO,QACpBc,KAAKqmB,cAAc,WACnBrmB,KAAKjI,QAAQ+3C,OACb,IAAItpB,GAAQ9vB,EAAEwB,EAAMqQ,OAAOvI,KAAKyzF,cAAe75C,GAC/C55C,MAAKw/K,cAAch5J,EAAM7rB,SAAS,MAAMA,SAAS,OACjDqF,KAAKjI,QAAQ+rD,OAAOt9B,GACpBlF,EAAO3gB,KAAK6lB,GACZxmB,KAAK6yK,SACL7yK,KAAKqmB,cAAc,YAEvB6B,OAAQ,SAAU/B,GACd,GAAIK,GAAQxmB,KAAKo+K,eAAej4J,EAChCnmB,MAAK8kB,QAAQ,UAAW,WACpB,OAASyB,SAAUC,KAEvBtuB,EAAM4tB,QAAQU,GACdA,EAAM0B,UAEVk2J,eAAgB,SAAUj4J,GAAV,GAEHxoB,GAAS/F,EADdssB,IACJ,KAASvmB,EAAM,EAAG/F,EAASuuB,EAAUvuB,OAAQ+F,EAAM/F,EAAQ+F,IACvDumB,EAAUvmB,GAAO,SAAWzF,EAAM+J,GAAK,OAASkkB,EAAUxoB,GAAKixC,IAAM,GAEzE,OAAO5uC,MAAKjI,QAAQuvB,KAAKpD,EAAUhtB,KAAK,OAE5C8lL,YAAa,SAAUzwI,EAAM9lB,GACzB,GAAI0lC,GAAWnsD,KAAM4/K,EAAc,SAAUp5J,GACrC,GAAIq5J,GAAUnpL,EAAE8vB,EAAM,GACtBtuB,GAAM4tB,QAAQymB,GACd4f,EAASrnC,QAAQ,UAAW,WACxB,OAASyB,UAAW7vB,EAAE61C,OAE1B71C,EAAE61C,GAAMwwB,YAAY8iH,GACpB1zH,EAASnkD,QAAQ+yK,GACbxuI,KAAMszI,EACNrkL,KAAMirB,EACNxkB,GAAIof,IAGhB,OAAOrhB,MAAKsjK,cAAc78I,GAAWm5J,GAAa,IAEtD/B,WAAY,WACR79K,KAAK0lB,MAAQ1lB,KAAKwlB,WAEtB89I,aAAc,SAAUn9I,EAAWxF,GAC/B,GAAI6F,GAAQ9vB,EAAEwB,EAAMqQ,OAAOvI,KAAKyC,SAAU0jB,GAY1C,OAXAxF,GAAS6F,GACTxmB,KAAK8kB,QAAQ,UAAW,WACpB,OACIyB,SAAUC,EACVhrB,KAAM2qB,EAAUnT,IAAI,SAAUxX,GAC1B,OAASirB,SAAUjrB,QAI/B8lB,EAAO3gB,KAAK6lB,GACZxmB,KAAKw/K,cAAch5J,GACZA,GAEXs5J,KAAM,SAAU73K,GACZjI,KAAK+uF,QAAQ9mF,GAAG,IAEpB83K,WAAY,SAAU93K,GAClBjI,KAAK+uF,QAAQ9mF,GAAG,IAEpB8mF,QAAS,SAAU9mF,EAAGgvK,GAClB,KAAIhvK,EAAE67B,MAAQ,GAAd,CAGA,GAAIisG,GAAUr5I,EAAEuR,EAAE22B,eAAgB2N,EAAOwjG,EAAQn2I,SAAUmqB,EAAO8F,EAAUkmH,EAAS,SAAW,GAAIiwC,GAAaj8J,EAAKzrB,MAAM0iL,GAAej3B,EAAY97I,EAAE7D,oBACrJ47K,IACAzzI,EAAKnrC,YAAYs5K,EAAczD,IAAclzB,KAGrDrmD,WAAY,WACR,GAAIj7F,GAAWzC,KAAKI,QAAQqC,SAAUmwF,EAAiB5yF,KAAKI,QAAQwyF,eAAgBqtF,EAAkB,wCAAyCC,KAAoBC,WACxJ19K,KAAa0D,IACpB+5K,EAAcz9K,SAAWA,EACzBA,EAAW,0BAEfzC,KAAKyC,SAAWuD,EAAM9N,EAAMuK,SAAS,MAAQw9K,EAAkB,IAAMx9K,EAAW,SAAUy9K,GAC1FC,EAAmB19K,SAAWzC,KAAKyC,eACxBmwF,KAAmBzsF,IAC1Bg6K,EAAmBC,gBAAkBxtF,EACrCA,EAAiB,iCAErButF,EAAmBvtF,eAAiB16F,EAAMuK,SAASmwF,GACnD5yF,KAAKyzF,cAAgBztF,EAAM40K,EAAgBuF,IAE/Cj8I,OAAQ,SAAUj8B,GACd,KAAIA,EAAE0Q,MAAMmrB,MAAQ,GAAK77B,EAAE0Q,MAAMvU,sBAAjC,CAGA,GAAIqiB,GAAU8lB,EAAOtkC,EAAEmY,OAAQA,EAAS1pB,EAAEuR,EAAE0Q,MAAMyH,QAASigK,EAAgBjgK,EAAOnI,QAAQ/f,EAAM4rB,aAAa,SAAU,eAAgB,eAAgBqyD,EAASj+E,EAAMuvB,eAAe44J,EAAeh/J,GAAKwC,EAAK0oB,EAAKrpC,KAAKhL,EAAMgL,KAAK,OAC/N2gB,KACA4C,EAAWzmB,KAAK4kB,WAAW83B,SAAS74B,IAEpC7jB,KAAKgI,QAAQqvE,GACTj3D,OAAQA,EACRmsB,KAAMA,EACN9lB,SAAUA,EACV0vD,OAAQA,KAEZluE,EAAE9D,mBAGVm8K,aAAc,WACV,GAAIC,GAAYvgL,KAAKjI,QAAQ4C,UAC7B4lL,GAAU5lL,SAAS,MAAML,SAAS,WAClCimL,EAAU7iL,KAAK,WACX,GAAIsvF,GAAKt2F,EAAEsJ,MAAOu1F,EAAcvI,EAAGlwB,WAAW1lE,OAC9C41F,GAAG1yF,SAAS,sBACPi7F,EAAYx7F,GAAG,OAAUw7F,EAAYx7F,GAAG,OAAS0gL,IAClDllF,EAAYz8F,KAAK6hL,MAI7B9H,OAAQ,WACJ,GAAIzyK,GAAUJ,KAAKI,QAASogL,EAA2B,UAAjBpgL,EAAQlB,KAAkBnH,EAAUiI,KAAKjI,QAAS8gL,EAA0B,UAAlBz4K,EAAQtG,KACxG/B,GAAQuC,SAAS,eAAe8G,YAAY,WAAYo/K,GAASp/K,YAAY,kBAAmBpB,KAAK8lE,SAAS1kE,YAAY,gBAAiBo/K,GAAW3H,GAAOz3K,YAAY,eAAgBo/K,IAAY3H,GAAOz3K,YAAY,oBAAqBo/K,GAAW3H,GACnP9gL,EAAQ4L,QAAQ,gBAAgB,IACjC5L,EAAQkgB,QAAQ,eAAe7W,YAAY,kBAAmBy3K,GAE9D2H,GACAxgL,KAAKsgL,eAETtgL,KAAKgI,QAAQ8yK,IAEjB0E,cAAe,SAAUh5J,GACrBA,EAAM9oB,KAAK,WACP,GAAoB6zB,GAAhBgb,EAAO71C,EAAEsJ,MAAcygL,GAAW,CACtCl0I,GAAK5xC,WAAW+C,KAAK,WACjB6zB,EAAQ76B,EAAEsJ,MACNuxB,EAAMx3B,GAAG,MACT4/K,EAAgBpoJ,GAChBkvJ,GAAW,GACJlvJ,EAAMx3B,GAAG,WAChB+/K,EAAoBvoJ,GACpBkvJ,GAAW,KAGdA,GACDhH,EAAYltI,QAK5BlrB,EAAG8G,OAAOgzG,IACZxkI,OAAOuB,MAAM2sB,QACRluB,OAAOuB,OACE,kBAAVzB,SAAwBA,OAAOgiC,IAAMhiC,OAAS,SAAUiiC,EAAIC,EAAIC,IACrEA,GAAMD,OAEV,SAAUniC,EAAGC,QACVA,OAAO,uBAAwB,cAAeD,IAChD,WAmDE,MA3CC,UAAUE,EAAGE,GAEV,QAAS8pL,GAAgB30F,EAAOh0F,GAC5B,GAAIyuB,GAAQzuB,EAAQuvB,KAAK,IAAMpvB,EAAMgL,KAAK,SAAW,IAAM6oF,EAAQ,IACnE,IAAIvlE,EAAM,GACN,MAAO9vB,GAAE,kBAAoBq1F,EAAQ,YAAYjoC,OAAOt9B,GAAOyB,UAAUlwB,GAGjF,QAAS4oL,GAAYC,GACjB,GAAIthG,GAAWshG,EAActhG,WAAYuhG,IAAYD,EAAcjmL,SAAS,MAAM,GAAImmL,IAAcxhG,EAAS,IAAuC,KAAjC5oF,EAAEu7B,KAAK2uJ,EAAcxrJ,QAAgBxb,KAAa1hB,EAAMopB,OAAO2H,cAAe/wB,EAAMopB,OAAO2H,YAAYlxB,QAAQgC,GAAG,eACrO6mL,GAAcnxF,UAAUruF,YAAY,cAAey/K,GACnDD,EAAcx/K,YAAY,gBAAiB0/K,GAC3CF,EAAcx/K,YAAY,gBAAiB0/K,IAAcpqL,EAAEu7B,KAAK2uJ,EAAcl+K,SAC9Ek+K,EAAcx/K,YAAY,cAAey/K,GACzCD,EAAcx/K,YAAY,gBAAiBwY,IAAY0lE,EAAS3kF,WAAWZ,GAAG,aAdrF,GACO7B,GAAQvB,OAAOuB,MAAOopB,EAASppB,EAAMopB,OAAQD,EAAKC,EAAOD,GAAIrc,EAASqc,EAAGrc,OAezE+7K,EAAS/7K,EAAOtE,QAChBC,KAAM,SAAU5I,EAASqI,GACrB,GAAIwG,GAAO5G,IACXgF,GAAOf,GAAGtD,KAAKwH,KAAKvB,EAAM7O,EAASqI,GACnCrI,EAAU6O,EAAK7O,QACf6O,EAAK+gB,YAAYvgB,KAAK,OAAQ1Q,EAAEsP,MAAMhG,KAAM,YAC5CjI,EAAQuC,SAAS,aAAaqzE,UAAUj3E,EAAE,gDAC1CkQ,EAAKo6K,YAAcN,EAAgB,OAAQ3oL,GAC3C6O,EAAKq6K,aAAeP,EAAgB,QAAS3oL,GAC7C6O,EAAKg6K,cAAgB7oL,EAAQuvB,KAAK,mBAEtClnB,SAAW8O,KAAM,UACjBmrB,MAAO,SAAUz8B,GACboC,KAAKjI,QAAQuvB,KAAKpvB,EAAM4rB,aAAa,eAAesR,KAAKx3B,GACzD+iL,EAAY3gL,KAAK4gL,gBAErBppK,QAAS,SAAUvP,GACf,GAAI0gB,GAAO1gB,EAAE0gB,IACb3oB,MAAKq6B,MAAM1R,EAAKvoB,QAAQi6B,QAE5BvU,QAAS,WACL9gB,EAAOf,GAAG6hB,QAAQ3d,KAAKnI,MACvB9H,EAAM4tB,QAAQ9lB,KAAKjI,WAG3BspB,GAAG8G,OAAO44J,IACZpqL,OAAOuB,MAAM2sB,QACRluB,OAAOuB,OACE,kBAAVzB,SAAwBA,OAAOgiC,IAAMhiC,OAAS,SAAUiiC,EAAIC,EAAIC,IACrEA,GAAMD,OAEV,SAAUniC,EAAGC,QACVA,OAAO,2BACH,WACA,aACA,qBACDD,IACL,WA8pBE,MAlpBC,UAAUE,EAAGE,GAEV,QAASqH,GAAUiR,GACf,MAAO,KAAOA,EAAO,OAASA,EAHrC,GAuCOssD,GAAkC0lH,EAA0BC,EAC5DC,EA+FAC,EA4EAC,EAqOAC,EAmBAC,EA1cAtpL,EAAQvB,OAAOuB,MAAOopB,EAASppB,EAAMopB,OAAQD,EAAKC,EAAOD,GAAIrb,EAAQtP,EAAEsP,MAAO2rD,EAAaz5D,EAAM6H,QAAQ4xD,WAAYwV,EAAOjvE,EAAMmpB,GAAG8lD,KAAMV,EAAiBvuE,EAAMmpB,GAAGolD,eAAgBzhE,EAASqc,EAAGpc,gBAAiBvJ,EAAaxD,EAAMsD,KAAKE,WAAYm2C,EAAS35C,EAAMsD,KAAKq2C,OAAQC,EAAc55C,EAAMsD,KAAKs2C,YAAar5C,EAAOmG,KAAMC,EAAMpG,EAAKoG,IAAK0iD,EAAO9oD,EAAK8oD,KAAM9xC,EAAQhX,EAAKgX,MAAO/W,EAAMD,EAAKC,IAAKsZ,EAAMvZ,EAAKuZ,IAAKxX,EAAQ/B,EAAK+B,MAAOi/B,EAAS,SAAUgoJ,EAAW,WAAYjmB,EAAU,UAAWkmB,EAAqB,eAAgBC,EAAqB,eAAgBx7K,EAAW,WAAY40K,EAAc,aAAc6G,EAAU,UAAWC,EAAqB,EAAGC,KAAgBC,EAAa,EAAGC,EAAa,EAAGC,KAAiBC,EAAQ,EAAGC,EAAc,EAIlvB9oG,EAAQnhF,EAAMrB,MAAM6J,QACpBC,KAAM,SAAUyhL,GACZ,GAAIx7K,GAAO5G,KAAMjI,EAAUrB,EAAE,cAAiBuH,EAAU,SAAW,MACnEmkL,GAAWrqL,QAAQ+rD,OAAO/rD,GAC1BiI,KAAKqiL,aAAer8K,EAAMY,EAAM,WAChC5G,KAAKsiL,cAAgBt8K,EAAMY,EAAM,YACjCw7K,EAAWh7K,KAAKqyB,EAAQz5B,KAAKqiL,cAC7BD,EAAWh7K,KAAKo0J,EAASx7J,KAAKsiL,eAC9B5rL,EAAEgK,OAAOkG,GACL7O,QAASA,EACTqqL,WAAYA,KAGpB57J,MAAO,WACH,MAAOxmB,MAAKjI,QAAQ4C,YAExBswH,SAAU,SAAUhjH,GAAV,GAEGtK,GADL4kL,EAAW,EACf,KAAS5kL,EAAM,EAAGA,EAAMsK,EAAEu6K,UAAW7kL,IACjC4kL,GAAY,OAEhBviL,MAAKjI,QAAQ2K,KAAK6/K,GAClBviL,KAAKwmB,QAAQuC,GAAG9gB,EAAEi/B,MAAM5sC,SAAS2D,EAAUyjL,KAE/CnjI,QAAS,SAAUt2C,GACfjI,KAAKwmB,QAAQmkC,YAAY1sD,EAAUyjL,IAAqB34J,GAAG9gB,EAAEi/B,MAAM5sC,SAAS2D,EAAUyjL,KAE1F57J,QAAS,WACL9lB,KAAKoiL,WAAWv6K,OAAO4xB,EAAQz5B,KAAKqiL,cACpCriL,KAAKoiL,WAAWv6K,OAAO2zJ,EAASx7J,KAAKsiL,eACrCtiL,KAAKjI,QAAQmwB,WAGrBhwB,GAAMopB,OAAOD,GAAGohK,gBAAkBppG,EAC9B7d,EAAiB,gBAAiB0lH,EAAa,YAAaC,EAAW,UACvEC,EAAclpL,EAAMmM,WAAW3D,QAC/BC,KAAM,SAAU5I,EAASqI,GAAnB,GAKEo6D,GAAS1G,EAAY/yB,EAAYnb,EAAYmhD,EAAWqG,EAJxDxmE,EAAO5G,IACX9H,GAAMmM,WAAWJ,GAAGtD,KAAKwH,KAAKnI,MAC9BA,KAAKjI,QAAUA,EACfiI,KAAK2nB,UAAY5vB,EAAQ6B,SAEzB4gE,EAAU,GAAItiE,GAAMmpB,GAAG8iD,QAAQv9D,EAAK7O,SACpC+7D,EAAa,GAAInC,IACbl+B,KAAM,IACN+mC,QAASA,EACTL,MAAO,WACHvzD,EAAKoB,QAAQwzD,MAGrBz6B,EAAa,GAAI7oC,GAAM0pC,WAAW7pC,GAC9B6qC,SAAS,EACT3zB,MAAO,SAAUhH,GACW,EAApBpJ,EAAIoJ,EAAEgrB,EAAEyN,WAAiB7hC,EAAIoJ,EAAEoJ,EAAEqvB,UACjCK,EAAW0C,UAEX1C,EAAW/V,SAEfpkB,EAAKoB,QAAQk5K,EAAYj5K,GACzB6rD,EAAW9oC,UAEf0X,gBAAgB,EAChB/qC,IAAK,SAAUsQ,GACXrB,EAAKoB,QAAQm5K,EAAUl5K,MAG/B2d,EAAa,GAAI6gD,IACb1uE,QAAS6O,EAAK7O,QACd4vB,UAAW/gB,EAAK+gB,YAEpBo/C,EAAYnhD,EAAWqN,EACvB8zC,EAAU3/D,KAAKqyB,EAAQ,WACnB7yB,EAAKoB,QAAQyxB,KAEjB2zC,EAAO,GAAIjG,IACPvhD,WAAYA,EACZmb,WAAYA,EACZy5B,QAASA,EACT4M,SAAS,IAEb1wE,EAAEgK,OAAOkG,GACLvG,SAAUD,GAAWA,EAAQC,UAAY,EACzCm6D,QAASA,EACT1G,WAAYA,EACZ/yB,WAAYA,EACZnb,WAAYA,EACZmhD,UAAWA,EACXqG,KAAMA,IAEVptE,KAAKoH,MACDo0D,EACA0lH,EACAC,EACA1nJ,GACDr5B,IAEPrC,KAAM,WACF,OACI9E,MAAO+G,KAAK4lB,WAAWqN,EAAEzN,UACzBtsB,OAAQ8G,KAAK4lB,WAAWvU,EAAEmU,YAGlCyiB,MAAO,WACH,MAAOjoC,MAAK+mE,UAAUX,YAE1BhnE,OAAQ,WACJ,OAAQY,KAAKw6D,QAAQvnC,GAEzByvJ,gBAAiB,WACb1iL,KAAK+mE,UAAU3+B,QAAO,IAE1B5wB,QAAS,WACLxX,KAAK4lB,WAAWpO,WAEpB+iD,OAAQ,SAAUn7D,GACdY,KAAKw6D,QAAQG,SAAS,KAAMv7D,IAEhCujL,aAAc,SAAUvjL,EAAQm1D,EAAM0kH,GAC9BA,EACAj5K,KAAKu6D,QAAQn7D,GAEbY,KAAK8zD,WAAWyG,QACZ7+C,SAAUtc,EACViB,SAAUL,KAAKK,SACfk0D,KAAMA,OAKtBr8D,EAAMopB,OAAOD,GAAGuhK,sBAAwBxB,EACpCC,EAAoBnpL,EAAMmM,WAAW3D,QACrCC,KAAM,SAAU5I,EAASq1E,EAAMhtE,GAC3B,GAAIwG,GAAO5G,IACX9H,GAAMmM,WAAWJ,GAAGtD,KAAKwH,KAAKnI,MAC9B4G,EAAK7O,QAAUA,EACf6O,EAAKwmE,KAAOA,EACZxmE,EAAKi8K,YACL7iL,KAAKknC,KAAO,EACZlnC,KAAKinC,SAAW7mC,EAAQ6mC,UAAY,EACpCjnC,KAAK8iL,cAAgB1iL,EAAQ0iL,cAC7B9iL,KAAK+iL,YAAc3iL,EAAQ2iL,YAC3B/iL,KAAKgjL,aAAe5iL,EAAQ4iL,cAEhC/0G,SAAU,SAAU/mC,EAAM+xI,GACtBj5K,KAAKknC,KAAOA,EACZlnC,KAAKotE,KAAKu1G,cAAcz7I,EAAOlnC,KAAKotE,KAAKrvE,OAAO9E,MAAO04D,EAAWiJ,YAAaq+G,IAEnFgK,UAAW,SAAUC,EAAWC,EAAQxiK,EAAUs4J,GAC9C,GAA+JmK,GAAMC,EAAjKz8K,EAAO5G,KAAMotE,EAAOxmE,EAAKwmE,KAAMn0E,EAAQm0E,EAAKrvE,OAAO9E,MAAQ2N,EAAKqgC,SAAUq8I,EAAS7zK,EAAO8kD,EAAO4uH,EAASxxH,EAAWmJ,YAAcnJ,EAAWiJ,WAC9IsoH,KAAcjB,EACdqB,EAAS/hI,EACF2hI,IAAcf,IACrBmB,EAAS9oL,GAEb6oL,EAAWC,EAAOl2G,EAAKhuE,SAAWnG,GAClCmqL,EAAO1qL,EAAIkO,EAAK28K,QAASvxK,GAAKqxK,EAAWpqL,EAAO2N,EAAK48K,UACjDH,GAAYz8K,EAAKsgC,MACbvmB,GAAYA,GACR8iK,YAAa78K,EAAKsgC,KAClBm8I,SAAUA,MAEdD,GAAQx8K,EAAKsgC,KAAOkmC,EAAKrvE,OAAO9E,OAGxCm0E,EAAKu1G,aAAaS,EAAM7uH,EAAM0kH,IAElCyK,WAAY,WACR,GAAIt2G,GAAOptE,KAAKotE,KAAMlmC,EAAOz3B,EAAM29D,EAAKhuE,SAAWguE,EAAKrvE,OAAO9E,MAC/D,OAAIiuC,IAAQlnC,KAAKknC,OACblnC,KAAKknC,KAAOA,GACL,IAIfy8I,gBAAiB,WACb,MAAO3jL,MAAK0jL,cAEhBE,SAAU,SAAU7lL,GAAV,GAIE8lL,GAEI5nD,EALR7uD,EAAOptE,KAAKotE,KAAMn0E,EAAQ8E,EAAK9E,KACnC+G,MAAK8jL,aAAa7qL,MAAMA,GACG,SAAvB+G,KAAK8iL,gBACDe,EAAkB7jL,KAAKjI,QAAQ6B,SAASV,SACxC8G,KAAK+iL,eAAgB,IACjB9mD,EAAQj8H,KAAKjI,QAAQ6B,SAAS0tB,KAAK,gBAClCtnB,KAAKgjL,cAAgB/mD,EAAMrkI,SAC5BisL,GAAmB3rL,EAAMyB,aAAasiI,GAAO,KAGrDj8H,KAAKjI,QAAQE,IAAI,SAAU4rL,GAC3B7jL,KAAK8jL,aAAa7rL,IAAI,SAAU4rL,IAEpCz2G,EAAKs1G,kBACA1iL,KAAK+jL,SACN/jL,KAAKknC,KAAO1sC,EAAM4yE,EAAKhuE,SAAWnG,IAEtC+G,KAAKiuE,SAASjuE,KAAKknC,MAAM,GACzBlnC,KAAKwiL,UAAYjhI,EAAK6rB,EAAKnlC,QAAUhvC,GACrC+G,KAAKujL,UAAYvjL,KAAKwiL,UAAY,GAAKvpL,EACvC+G,KAAKwjL,QAAU,GAEnBX,UAAW,WACP7iL,KAAK8jL,aAAe9jL,KAAKjI,QAAQuvB,KAAKpvB,EAAM4rB,aAAa,SACzD9jB,KAAK+jL,OAAS/jL,KAAK8jL,aAAalsL,OAAS,KAGjDM,EAAMopB,OAAOD,GAAGggK,kBAAoBA,EAChCC,EAA2BppL,EAAMmM,WAAW3D,QAC5CC,KAAM,SAAU5I,EAASq1E,EAAMhtE,GAC3B,GAAIwG,GAAO5G,IACX9H,GAAMmM,WAAWJ,GAAGtD,KAAKwH,KAAKnI;AAC9B4G,EAAK7O,QAAUA,EACf6O,EAAKwmE,KAAOA,EACZxmE,EAAKxG,QAAUA,EACfwG,EAAK82F,aACL92F,EAAKsgC,KAAO9mC,EAAQ8mC,MAAQ,EAC5BtgC,EAAK+9J,SACL/9J,EAAKo9K,aACLp9K,EAAKg9K,SAASh9K,EAAKwmE,KAAKrvE,QACxB6I,EAAKwmE,KAAKrG,UAAUZ,gBAExBoU,cAAe,SAAU31D,GACrB5kB,KAAK4kB,WAAalpB,EAAW2sC,OAAOzjB,GACpC5kB,KAAKikL,UACLjkL,KAAKkkL,qBAAsB,EAC3BlkL,KAAKmkL,uBAAwB,GAEjCzS,UAAW,WACP,GAAI9qK,GAAO5G,IACP4G,GAAKu9K,wBACLz6J,WAAW,WACP9iB,EAAKw9K,eACN,GACHx9K,EAAKu9K,uBAAwB,IAGrCF,QAAS,WACL,GAAIjqG,GAAeh6E,KAAKI,QAAQ45E,YAC5Bh6E,MAAKq3B,QACLr3B,KAAKq3B,OAAOvR,UAGZ9lB,KAAKq3B,OADL2iD,EAAe,EACD,GAAIloC,GAAY9xC,KAAK4kB,WAAYo1D,GAEjC,GAAInoC,GAAO7xC,KAAK4kB,WAA2B,EAAfo1D,GAE9Ch6E,KAAK08E,aAAe12E,EAAMhG,KAAM,aAChCA,KAAKqkL,YAAcr+K,EAAMhG,KAAM,YAC/BA,KAAKskL,iBAAmBt+K,EAAMhG,KAAM,iBACpCA,KAAKq3B,OAAOjwB,MACR6Z,OAAUjhB,KAAK08E,aACfl2B,MAASxmD,KAAKqkL,YACdh+H,WAAcrmD,KAAKskL,oBAG3B5mF,WAAY,WACR,GAAIj7F,GAAWzC,KAAKI,QAAQqC,SAAU8hL,EAAgBvkL,KAAKI,QAAQmkL,cAAerE,KAAoBsE,WAC3F/hL,KAAa0D,IACpB+5K,EAAcz9K,SAAWA,EACzBA,EAAW,0BAEfzC,KAAKyC,SAAWuD,EAAM9N,EAAMuK,SAASA,GAAWy9K,SACrCqE,KAAkBp+K,IACzBq+K,EAAmBD,cAAgBA,EACnCA,EAAgB,+BAEpBvkL,KAAKukL,cAAgBv+K,EAAM9N,EAAMuK,SAAS8hL,GAAgBC,IAE9DR,WAAY,WAAA,GACwC98I,GACvCpsC,EADL6pK,EAAQ3kK,KAAK2kK,MAAO5sK,EAAUiI,KAAKjI,OACvC,KAAS+C,EAAI,EAAGA,EAAI+mL,EAAoB/mL,IACpCosC,EAAO,GAAIq6I,GAAKxpL,GAChB4sK,EAAM78J,KAAKo/B,EAEflnC,MAAKotE,KAAKs1G,mBAEdkB,SAAU,SAAU7lL,GAAV,GAEGjD,GAMD+oL,EAEI5nD,EATR0oC,EAAQ3kK,KAAK2kK,MAAOv3F,EAAOptE,KAAKotE,IACpC,KAAStyE,EAAI,EAAGA,EAAI6pK,EAAM/sK,OAAQkD,IAC9B6pK,EAAM7pK,GAAG2pL,SAAS1mL,EAAK9E,MAEQ,UAA/B+G,KAAKI,QAAQ0iL,cACb9iL,KAAKjI,QAAQE,IAAI,SAAU+H,KAAK2kK,MAAM,GAAG5sK,QAAQmB,UACX,SAA/B8G,KAAKI,QAAQ0iL,gBAChBe,EAAkB7jL,KAAKjI,QAAQ6B,SAASV,SACxC8G,KAAKI,QAAQ2iL,eAAgB,IACzB9mD,EAAQj8H,KAAKjI,QAAQ6B,SAAS0tB,KAAK,gBAClCtnB,KAAKI,QAAQ4iL,cAAgB/mD,EAAMrkI,SACpCisL,GAAmB3rL,EAAMyB,aAAasiI,GAAO,KAGrDj8H,KAAKjI,QAAQE,IAAI,SAAU4rL,GAC3Blf,EAAM,GAAG5sK,QAAQE,IAAI,SAAU4rL,GAC/Blf,EAAM,GAAG5sK,QAAQE,IAAI,SAAU4rL,GAC/Blf,EAAM,GAAG5sK,QAAQE,IAAI,SAAU4rL,IAEnCz2G,EAAKs1G,kBACL1iL,KAAK0kL,mBACL1kL,KAAK/G,MAAQ8E,EAAK9E,OAEtBg1E,SAAU,SAAU/mC,GAChB,GAA0BzgB,GAAtB4Q,EAASr3B,KAAKq3B,MAClBA,GAAOwuB,iBACPp/B,EAAW4Q,EAAO4W,GAAG/G,GAChBzgB,IAGLzmB,KAAK2kL,oBAAoBz9I,GACzBlnC,KAAKknC,KAAOA,IAEhB+7I,UAAW,SAAUC,EAAWC,EAAQxiK,EAAUs4J,GAC9C,GAAwRoK,GAApRz8K,EAAO5G,KAAMotE,EAAOxmE,EAAKwmE,KAAMn0E,EAAQm0E,EAAKrvE,OAAO9E,MAAOmG,EAASguE,EAAKhuE,SAAUwlL,EAAkBhmL,KAAKC,IAAIO,IAAWnG,EAAQ,EAAGs7D,EAAO4uH,EAASjrL,EAAM6H,QAAQ4xD,WAAWmJ,YAAc5iE,EAAM6H,QAAQ4xD,WAAWiJ,YAAaiqH,EAAej+K,EAAKsgC,KAAO,EAAItgC,EAAKywB,OAAO4Q,QAAmB5U,EAAQ,CACtS6vJ,KAAcf,EACI,IAAdv7K,EAAKsgC,OACL7T,MAEG6vJ,IAAcjB,GAAe4C,EAE7BzlL,EAAS,GAAMwlL,IAAoBC,EAC1CxxJ,EAAQ,EACDj0B,EAAS,GAAKwlL,GACH,IAAdh+K,EAAKsgC,OACL7T,MALJA,EAAQ,EAQZgwJ,EAAWz8K,EAAKsgC,KACZ7T,IACAgwJ,EAAWhwJ,EAAQ,EAAIgwJ,EAAW,EAAIA,EAAW,GAEjD1iK,GAAYA,GACR8iK,YAAa78K,EAAKsgC,KAClBm8I,SAAUA,MAEdhwJ,EAAQ,GAEE,IAAVA,EACAzsB,EAAKk+K,YAAYvwH,EAAM0kH,GAChB5lJ,OACPzsB,EAAKm+K,cAAc9L,GACF,IAAV5lJ,GACPzsB,EAAKo+K,aAAa/L,IAG1ByK,WAAY,WACR,GAAI/e,GAAQ3kK,KAAK2kK,KACjB,OAA2B,KAAvB3kK,KAAKotE,KAAKhuE,WAGVY,KAAKotE,KAAKhuE,SAAW,GACrBulK,EAAM78J,KAAK9H,KAAK2kK,MAAM7yJ,SACtB9R,KAAKknC,OACLlnC,KAAKilL,eAAetgB,EAAM,GAAI3kK,KAAKknC,KAAO,KAE1Cy9H,EAAM58J,QAAQ/H,KAAK2kK,MAAM54I,OACzB/rB,KAAKknC,OACLlnC,KAAKilL,eAAetgB,EAAM,GAAI3kK,KAAKknC,KAAO,IAE9ClnC,KAAK0kL,mBACL1kL,KAAKklL,iBACE,IAEXvB,gBAAiB,WACb,GAAIvkL,GAASY,KAAKotE,KAAKhuE,SAAUye,EAAqC,EAAzB7d,KAAKotE,KAAKrvE,OAAO9E,MAAY,CAC1E,OAAI4F,GAAIO,GAAUye,GACP7d,KAAK0jL,cAIpBwB,cAAe,WACXllL,KAAKotE,KAAK7S,OAAO,IAErByqH,aAAc,SAAU/L,GACpBj5K,KAAKotE,KAAKu1G,cAAc3iL,KAAK/G,MAAOf,EAAM6H,QAAQ4xD,WAAWiJ,YAAaq+G,IAE9E8L,cAAe,SAAU9L,GACrBj5K,KAAKotE,KAAKu1G,aAAa3iL,KAAK/G,MAAOf,EAAM6H,QAAQ4xD,WAAWiJ,YAAaq+G,IAE7E6L,YAAa,SAAUvwH,EAAM0kH,GACzBj5K,KAAKotE,KAAKu1G,aAAa,EAAGpuH,EAAM0kH,IAEpCmL,YAAa,WACTpkL,KAAKknC,KAAOlnC,KAAKI,QAAQ8mC,MAAQ,EACjClnC,KAAK2kL,oBAAoB3kL,KAAKknC,MAC9BlnC,KAAK0kL,mBACL1kL,KAAKgI,QAAQ,UAEjBm9K,UAAW,WACPnlL,KAAKwiL,UAAYjhI,EAAKvhD,KAAK4kB,WAAWqjB,QAAUjoC,KAAKI,QAAQ45E,cACzDh6E,KAAKkkL,sBACLlkL,KAAK2kL,oBAAoB3kL,KAAKknC,MAC9BlnC,KAAKkkL,qBAAsB,GAE/BlkL,KAAKgI,QAAQ,WAEjBo9K,SAAU,WACNplL,KAAKwiL,UAAYjhI,EAAKvhD,KAAK4kB,WAAWqjB,QAAUjoC,KAAKI,QAAQ45E,cAC7Dh6E,KAAKokL,eAETiB,cAAe,WACXrlL,KAAKkkL,qBAAsB,GAE/BQ,iBAAkB,WACd,GAAI/f,GAAQ3kK,KAAK2kK,KACjBA,GAAM,GAAGtuG,SAASyrH,GAClBnd,EAAM,GAAGtuG,SAAS0rH,GAClBpd,EAAM,GAAGtuG,SAAS2rH,IAEtB2C,oBAAqB,SAAUvlL,GAC3B,GAAIulK,GAAQ3kK,KAAK2kK,MAAO8e,EAAcrkL,GAAU,CAChDY,MAAKilL,eAAetgB,EAAM,GAAI8e,EAAc,GAC5CzjL,KAAKilL,eAAetgB,EAAM,GAAI8e,GAC9BzjL,KAAKilL,eAAetgB,EAAM,GAAI8e,EAAc,IAEhDwB,eAAgB,SAAU/9I,EAAM/0B,GAC5B,GAAIklB,GAASr3B,KAAKq3B,OAAQ50B,EAAWzC,KAAKyC,SAAU8hL,EAAgBvkL,KAAKukL,cAAe57J,EAAO,IAC3FxW,IAAS,IACTwW,EAAO0O,EAAO4W,GAAG97B,GACbzb,EAAEqP,QAAQ4iB,KAAUA,EAAK/wB,SACzB+wB,EAAO,OAGf3oB,KAAKgI,QAAQ45K,GAAWr1I,KAAMrF,EAAKnvC,UAE/BmvC,EAAK20B,QADI,OAATlzC,EACalmB,EAASkmB,GAET47J,OAEjBrsL,EAAMopB,OAAO3gB,KAAKumC,EAAKnvC,SACvBiI,KAAKgI,QAAQ+yK,GACTxuI,KAAMrF,EAAKnvC,QACXyD,KAAMmtB,EACN1mB,GAAI/J,EAAMopB,OAAOD,QAI7BnpB,EAAMopB,OAAOD,GAAGigK,yBAA2BA,EACvCC,EAAOrpL,EAAMrB,MAAM6J,QACnBC,KAAM,SAAUgnB,GACZ3nB,KAAKjI,QAAUrB,EAAE,eAAkBuH,EAAU0jL,GAAsB,YACnE3hL,KAAK/G,MAAQ0uB,EAAU1uB,QACvB+G,KAAKjI,QAAQkB,MAAM+G,KAAK/G,OACxB0uB,EAAUm8B,OAAO9jD,KAAKjI,UAE1B8jE,QAAS,SAAUypH,GACftlL,KAAKjI,QAAQ2K,KAAK4iL,IAEtBjvH,SAAU,SAAUA,GAChBr2D,KAAKjI,QAAQE,IAAI,YAAa,eAAiB+H,KAAK/G,MAAQo9D,EAAW,cAE3EouH,SAAU,SAAUxrL,GAChB+G,KAAK/G,MAAQA,EACb+G,KAAKjI,QAAQkB,MAAMA,MAG3Bf,EAAMopB,OAAOD,GAAGkkK,YAAchE,EAC1BC,EAAax8K,EAAOtE,QACpBC,KAAM,SAAU5I,EAASqI,GAAnB,GA2BE0vC,GACA+rB,EAgCA2pH,EA3DA5+K,EAAO5G,IACXgF,GAAOf,GAAGtD,KAAKwH,KAAKvB,EAAM7O,EAASqI,GACnCA,EAAUwG,EAAKxG,QACfrI,EAAU6O,EAAK7O,QACfG,EAAMm5B,gBAAgBt5B,EAAQ,IAC9BA,EAAQ41E,UAAU,UAAUrzE,SAAS,YAAc2D,EAAU,eACzD+B,KAAKI,QAAQ2iL,cACb/iL,KAAKi8H,MAAQ,GAAI5iD,GAAMr5E,MACnBA,KAAKI,QAAQ4iL,cACbjrL,EAAQuC,SAAS2D,EAAU,wBAGnC2I,EAAKm0D,MAAQhjE,EAAQ4C,WAAWvD,QAChCwP,EAAKsgC,KAAO,EACZtgC,EAAKm0D,MAAM9iE,IAAI,SAAUmI,EAAQ0iL,eACjCl8K,EAAKwmE,KAAO,GAAIg0G,GAAYx6K,EAAKm0D,OAC7B16D,SAAUL,KAAKI,QAAQC,SACvBolL,cAAez/K,EAAMhG,KAAM,kBAC3B0lL,UAAW1/K,EAAMhG,KAAM,cACvB2lL,QAAS3/K,EAAMhG,KAAM,YACrBy6B,OAAQz0B,EAAMhG,KAAMw7J,KAExB50J,EAAKQ,KAAK,SAAU,WAChBR,EAAKwmE,KAAK51D,YAEd5Q,EAAKsgC,KAAO9mC,EAAQ8mC,KAChB4I,EAAyC,IAAjC9vC,KAAK+6D,MAAMpgE,WAAW/C,OAC9BikE,EAAU/rB,EAAQ,GAAIwxI,GAAyB16K,EAAKm0D,MAAOn0D,EAAKwmE,KAAMhtE,GAAW,GAAIihL,GAAkBz6K,EAAKm0D,MAAOn0D,EAAKwmE,KAAMhtE,GAClIy7D,EAAQ30B,KAAOtgC,EAAKsgC,KACpB20B,EAAQz0D,KAAK,QAAS,WAClBpH,KAAKkkL,qBAAsB,EAC3Bt9K,EAAKg/K,mBACLh/K,EAAKoB,QAAQwzJ,GACTgnB,UAAW3mH,EAAQ2mH,UACnBt7I,KAAM20B,EAAQ30B,SAGtB20B,EAAQz0D,KAAK,SAAU,WACnBR,EAAKoB,QAAQwzJ,GACTgnB,UAAW3mH,EAAQ2mH,UACnBt7I,KAAM20B,EAAQ30B,SAGtB20B,EAAQz0D,KAAK2zK,EAAa,SAAU9yK,GAChCrB,EAAKoB,QAAQ+yK,EAAa9yK,GAC1BrB,EAAKke,QAAQ,UAAW,WACpB,OACIyB,SAAUte,EAAEskC,KACZ/wC,OAASirB,SAAUxe,EAAEzM,YAIjCqgE,EAAQz0D,KAAKw6K,EAAS,SAAU35K,GAC5BrB,EAAKke,QAAQ,UAAW,WACpB,OAASyB,SAAUte,EAAEskC,UAG7B3lC,EAAKi/K,SAAWhqH,EAChBj1D,EAAK2zE,cAAcn6E,EAAQwkB,YACvB4gK,EAAkB5+K,EAAK+gB,YACvB69J,EAAgBh9J,YAChB5hB,EAAKk/K,WACLl/K,EAAK0nK,YAELkX,EAAgBp+K,KAAK,OAAQpB,EAAMhG,KAAM,aAAaoH,KAAK,OAAQpB,EAAMhG,KAAM,cAGvFI,SACI8O,KAAM,aACNg4B,KAAM,EACN7mC,SAAU,IACVqyK,kBAAmB,GACnBoQ,cAAe,OACf77I,SAAU,EACV+yC,aAAc,EACd+rG,wBAAyB,IACzBhD,aAAa,EACbC,cAAc,EACdh6H,UAAU,EACVvmD,SAAU,GACV8hL,cAAe,IAEnB78K,QACI+5K,EACAhoJ,EACA+hI,GAEJ11I,QAAS,WACL9gB,EAAOf,GAAG6hB,QAAQ3d,KAAKnI,MACvB9H,EAAM4tB,QAAQ9lB,KAAKjI,UAEvB+tL,SAAU,WACF9lL,KAAKI,QAAQ4oD,UACbhpD,KAAK6lL,SAAS53G,SAASjuE,KAAK6lL,SAAS3+I,MAAM,IAGnDonI,SAAU,WACNtuK,KAAKotE,KAAK51D,WAEdA,QAAS,WACL,GAAIqkD,GAAU77D,KAAK6lL,QACnBhqH,GAAQ+nH,SAAS5jL,KAAKotE,KAAKrvE,QAC3BiC,KAAKknC,KAAO20B,EAAQ30B,KACpBlnC,KAAKgI,QAAQwzJ,GACTgnB,UAAW3mH,EAAQ2mH,UACnBt7I,KAAM20B,EAAQ30B,QAGtB20B,QAAS,SAAUn5D,GACf1C,KAAKjI,QAAQ4C,WAAWvD,QAAQsL,KAAKA,GACrC1C,KAAK6lL,SAAShD,YACd7iL,KAAKotE,KAAK51D,WAEd5Z,MAAO,SAAU2uC,GACb,GAAI3nB,GAAa5kB,KAAK4kB,UACtB,OAAI2nB,IACAvsC,KAAKiuE,SAASrpD,EAAW1mB,QAAQquC,IAAO,GAAxCvsC,GAEO4kB,EAAWqpB,GAAGjuC,KAAKknC,OAGlC+mC,SAAU,SAAU/mC,EAAM+xI,GACtBj5K,KAAK6lL,SAAS53G,SAAS/mC,EAAM+xI,GAC7Bj5K,KAAK4lL,oBAET5pJ,KAAM,WACF,GAAIp1B,GAAO5G,KAAMgmL,EAAWp/K,EAAKsgC,KAAO,CACpCtgC,GAAKi/K,mBAAoBvE,GACzB16K,EAAKi/K,SAAS5C,UAAUd,EAAavrL,EAAW,SAAUw8E,GACtD,MAAOxsE,GAAKoB,QAAQy5K,EAAUruG,KAE3B4yG,MACPp/K,EAAKqnE,SAAS+3G,IAGtB5kI,KAAM,WACF,GAAIx6C,GAAO5G,KAAMqjL,EAAWz8K,EAAKsgC,KAAO,CACpCtgC,GAAKi/K,mBAAoBvE,GACzB16K,EAAKi/K,SAAS5C,UAAUhB,EAAYrrL,EAAW,SAAUw8E,GACrD,MAAOxsE,GAAKoB,QAAQy5K,EAAUruG,KAE3BiwG,EAAWz8K,EAAKi/K,SAASrD,WAChC57K,EAAKqnE,SAASo1G,IAGtB9oG,cAAe,SAAU31D,GACrB,GAAM5kB,KAAK6lL,mBAAoBvE,GAA/B,CAGA,GAAI7B,IAAmB76J,CACvB5kB,MAAK4kB,WAAalpB,EAAW2sC,OAAOzjB,GACpC5kB,KAAK6lL,SAAStrG,cAAcv6E,KAAK4kB,YAC7B5kB,KAAKI,QAAQ4oD,WAAay2H,GAC1Bz/K,KAAK4kB,WAAWs8B,UAGxB16B,MAAO,WACH,MAAOxmB,MAAKjI,QAAQuvB,KAAK,OAASq6J,IAEtCiE,iBAAkB,WACd,GAAgEpqL,GAAMzD,EAAlE4sK,EAAQ3kK,KAAK6lL,SAASlhB,MAAOttI,EAASr3B,KAAK6lL,SAASxuJ,MACxDr3B,MAAKknC,KAAOlnC,KAAK6lL,SAAS3+I,KAC1B1rC,EAAO67B,EAASA,EAAO4W,GAAGjuC,KAAKknC,MAAQtwC,EACjC4E,YAAgBM,SAClBN,GAAQA,IAEZzD,EAAU4sK,EAAQA,EAAM,GAAG5sK,QAAUnB,EACrCoJ,KAAKgI,QAAQyxB,GACTyN,KAAMlnC,KAAKknC,KACXnvC,QAASA,EACTyD,KAAMA,KAGdyqL,WAAY,WACJjmL,KAAK6lL,SAASlC,mBACd3jL,KAAK4lL,oBAGbj2G,SAAU,SAAU1nE,GAChB,GAAIrB,GAAO5G,KAAM0gC,EAAWz4B,EAAEgrB,EAAEyN,SAAUgyI,EAAoB1yK,KAAKI,QAAQsyK,kBAAmBwQ,EAAYhB,EAAOiB,EAAStkL,EAAI6hC,GAAY1gC,KAAKI,QAAQ2lL,uBACnJrlJ,GAAWgyI,EACXwQ,EAAYf,EACLzhJ,GAAYgyI,IACnBwQ,EAAYjB,GAEhBjiL,KAAK6lL,SAAS5C,UAAUC,EAAWC,EAAQ,SAAU/vG,GACjD,MAAOxsE,GAAKoB,QAAQy5K,EAAUruG,MAGtC8yG,eAAgB,WACRlmL,KAAK6lL,SAASnC,cACd1jL,KAAK4lL,sBAIjBvkK,EAAG8G,OAAOq5J,IACZ7qL,OAAOuB,MAAM2sB,QACRluB,OAAOuB,OACE,kBAAVzB,SAAwBA,OAAOgiC,IAAMhiC,OAAS,SAAUiiC,EAAIC,EAAIC,IACrEA,GAAMD,OAEV,SAAUniC,EAAGC,QACVA,OAAO,uBACH,WACA,oBACDD,IACL,WA2KE,MAhKC,UAAUE,EAAGE,GAEV,QAASqH,GAAUiR,GACf,MAAO,KAAOA,EAAO,OAASA,EAElC,QAASi3K,GAAWvoL,EAAOwoL,EAAUC,GACjC,MAAOznL,MAAKlG,IAAI0tL,EAAUxnL,KAAKoT,IAAIq0K,EAAUzoL,IANpD,GACO1F,GAAQvB,OAAOuB,MAAOmpB,EAAKnpB,EAAMopB,OAAOD,GAAI7nB,EAAatB,EAAMuB,YAAauL,EAASqc,EAAGrc,OAAQ7M,EAAUD,EAAMC,QAASshC,EAAS,SAAU6sJ,EAAW,YAAaC,EAAY,aAAcC,EAAa,cAAeC,EAAe,eAAgBC,EAAiB,iBAAkBjvG,EAAW,WAAYkvG,EAAiBxuL,EAAQC,YAAYH,IAAM,YAAa+N,EAAQtP,EAAEsP,MAOrX4gL,EAAgB,gBAAkB3oL,EAAU,UAAY,IAAMA,EAAU,UAAY,0BAA4BA,EAAU,kBAAoB,8BAAgCA,EAAU,qBAAuB,iDAAmDA,EAAU,oBAAsB,8BAAgCA,EAAU,iBAAmB,mCAAqCA,EAAU,mBAAqB,6CAA+CA,EAAU,oBAAsB,8DAClf4oL,EAAS7hL,EAAOtE,QAChBC,KAAM,SAAU5I,EAASqI,GACrB,GAAiB+qD,GAAbvkD,EAAO5G,IACXgF,GAAOf,GAAGtD,KAAKwH,KAAKvB,EAAM7O,EAASqI,GACnCA,EAAUwG,EAAKxG,QACfwG,EAAKvN,QAAU3C,EAAEwB,EAAM6Q,OAAO69K,EAAexmL,EAAQ0mL,QAAS1mL,EAAQ2mL,WACtEngL,EAAK4kB,OAAS5kB,EAAKvN,QAAQiuB,KAAK,qBAChC1gB,EAAKogL,WAAapgL,EAAKvN,QAAQiuB,KAAK,yBACpC1gB,EAAKvN,QAAQ6xD,aAAatkD,EAAK7O,SAASy1E,QAAQ5mE,EAAK7O,SACrD6O,EAAKgiE,QACLhiE,EAAK4wD,OAASnlD,SAASzL,EAAKogL,WAAW/uL,IAAIuuL,GAAa,IACxD5/K,EAAK6rJ,UAAY,EACjB7rJ,EAAKqgL,UAAY,EACjBlvL,EAAU6O,EAAK7O,QAAQ,GACvBA,EAAQmH,KAAO,WACf0H,EAAKsgL,oBAAqB,EAC1B/7H,EAAUvkD,EAAKxG,QAAQ+qD,QACP,OAAZA,IACAA,EAAUpzD,EAAQozD,SAEtBvkD,EAAK8kD,MAAMP,GACXvkD,EAAKxG,QAAQqf,OAAS7Y,EAAKxG,QAAQqf,SAAW7Y,EAAK7O,QAAQmL,KAAKu0E,GAChE7wE,EAAK6Y,OAAO7Y,EAAKxG,QAAQqf,QACzB7Y,EAAK4Q,UACLtf,EAAM0uB,OAAOhgB,EAAM1O,EAAMopB,OAAOD,KAEpC7J,QAAS,WACL,GAAI5Q,GAAO5G,KAAMmnL,EAAc3tL,EAAWoN,EAAK4kB,QAAQ,EACvD5kB,GAAK3N,MAAQ2N,EAAKvN,QAAQJ,QAC1B2N,EAAK6rJ,UAAY7rJ,EAAK3N,MAAQkuL,EAC9BvgL,EAAKqgL,UAAYrgL,EAAK6rJ,UAAY,EACR,gBAAf7rJ,GAAK4wD,SACZ5wD,EAAK4wD,OAASnlD,SAASzL,EAAKogL,WAAW/uL,IAAIuuL,GAAa,KAE5D5/K,EAAKogL,WAAWxrL,KAAK,SAAUoL,EAAK4wD,QACpC5wD,EAAK8kD,MAAM9kD,EAAK7O,QAAQ,GAAGozD,UAE/BzjD,QAAS+xB,GACTr5B,SACI8O,KAAM,SACN43K,QAAS,KACTC,SAAU,MACV57H,QAAS,KACT1rC,QAAQ,GAEZisC,MAAO,SAAUA,GACb,GAAI9kD,GAAO5G,KAAMjI,EAAU6O,EAAK7O,QAAQ,EACxC,OAAI2zD,KAAU90D,EACHmB,EAAQozD,SAEnBvkD,EAAKupE,UAAUzkB,EAAQ9kD,EAAK6rJ,UAAY,GACxC16J,EAAQozD,QAAUO,EAClB9kD,EAAKvN,QAAQ+H,YAAYnD,EAAUqoL,GAAW56H,GAAOtqD,YAAYnD,EAAUsoL,IAAa76H,GAFxF9kD,IAIJhJ,MAAO,WACH,MAAOoC,MAAK0rD,MAAM5kD,MAAM9G,KAAMjF,YAElC+qB,QAAS,WACL9gB,EAAOf,GAAG6hB,QAAQ3d,KAAKnI,MACvBA,KAAK+gC,WAAWjb,WAEpB3F,OAAQ,WACJ,GAAIvZ,GAAO5G,IACX4G,GAAK8kD,OAAO9kD,EAAK7O,QAAQ,GAAGozD,UAEhC1rC,OAAQ,SAAUA,GACd,GAAI1nB,GAAUiI,KAAKjI,QAASsB,EAAU2G,KAAK3G,OACtB,KAAVomB,IACPA,GAAS,GAEbzf,KAAKI,QAAQqf,OAASA,EAClBA,EACA1nB,EAAQqtB,WAAWqyD,GAEnB1/E,EAAQmL,KAAKu0E,EAAUA,GAE3Bp+E,EAAQ+H,YAAYnD,EAAUyoL,IAAkBjnK,IAEpDkG,QAAS,WACL3lB,KAAKwX,WAETusB,MAAO,SAAU97B,GACb,GAAIrB,GAAO5G,IACXiI,GAAE9D,iBACFyC,EAAKupE,UAAUg2G,EAAWv/K,EAAKyvD,SAAWpuD,EAAEgrB,EAAEI,MAAO,EAAGzsB,EAAK3N,MAAQO,EAAWoN,EAAK4kB,QAAQ,MAEjG2kD,UAAW,SAAU9Z,GACjB,GAAIzvD,GAAO5G,IACX4G,GAAKyvD,SAAWA,EAChBzvD,EAAK4kB,OAAOvzB,IAAI0uL,EAAgB,cAAgBtwH,EAAW,OACvDzvD,EAAKsgL,oBACLtgL,EAAKogL,WAAW/uL,IAAIuuL,EAAY5/K,EAAK4wD,OAASnB,IAGtDv0B,OAAQ,WACC9hC,KAAKI,QAAQqf,QAGdzf,KAAK+gC,WAAW0C,UAChBzjC,KAAKwrB,OAAOlxB,SAAS2D,EAAUwoL,KAH/BzmL,KAAK+gC,WAAW/V,UAMxB0lD,MAAO,WACH,GAAI9pE,GAAO5G,IACX4G,GAAK4kB,OAAOm/B,YAAY1sD,EAAUwoL,IAClC7/K,EAAKmoF,QAAQnoF,EAAKyvD,SAAWzvD,EAAKqgL,YAEtCl4F,QAAS,SAAU5jC,GACf,GAA8K1sB,GAA1K73B,EAAO5G,KAAMwrB,EAAS5kB,EAAK4kB,OAAQzzB,EAAU6O,EAAK7O,QAAQ,GAAI6F,EAAQ7F,EAAQozD,QAAS9qD,EAAWnI,EAAMopB,OAAO2H,aAAe/wB,EAAMopB,OAAO2H,YAAY1P,GAAGG,GAAK,IAAM,GACzK9S,GAAKvN,QAAQ+H,YAAYnD,EAAUqoL,GAAWn7H,GAAS/pD,YAAYnD,EAAUsoL,IAAap7H,GAC1FvkD,EAAKyvD,SAAW53B,EAAW0sB,EAAUvkD,EAAK6rJ,UACtC7rJ,EAAKsgL,oBACLtgL,EAAKogL,WAAWrnK,WAAU,GAAM,GAAMI,cAClChgB,QAAS,cACTX,OAAQq/B,EACR+nB,OAAO,EACPlmD,SAAU6qD,EACV13B,KAAM,OACNpzB,SAAUA,IAGlBmrB,EAAO7L,WAAU,GAAM,GAAMI,cACzBhgB,QAAS,UACTM,SAAUA,EACVjB,OAAQq/B,EAAW,OACnB+nB,OAAO,EACPjmD,SAAU,WACF3C,IAAUutD,IACVpzD,EAAQozD,QAAUA,EAClBvkD,EAAKoB,QAAQyxB,GAAU0xB,QAASA,SAKhDyd,MAAO,WACH,GAAIhiE,GAAO5G,IACX4G,GAAKm6B,WAAa,GAAI7oC,GAAM0pC,WAAWh7B,EAAKvN,SACxCupC,SAAS,EACTkC,IAAK,WACGl+B,EAAKxG,QAAQqf,QACb7Y,EAAKmoF,SAASnoF,EAAK7O,QAAQ,GAAGozD,UAGtCl8C,MAAOjJ,EAAMY,EAAKk7B,OAAQl7B,GAC1BmkB,KAAM/kB,EAAMY,EAAKm9B,MAAOn9B,GACxBjP,IAAKqO,EAAMY,EAAK8pE,MAAO9pE,OAInCya,GAAG8G,OAAO0+J,IACZlwL,OAAOuB,MAAM2sB,QACRluB,OAAOuB,OACE,kBAAVzB,SAAwBA,OAAOgiC,IAAMhiC,OAAS,SAAUiiC,EAAIC,EAAIC,IACrEA,GAAMD,OAEV,SAAUniC,EAAGC,QACVA,OAAO,yBAA0B,cAAeD,IAClD,WAqHE,MA7GC,UAAUE,EAAGE,GAEV,QAASwgL,GAAYx5K,GACjB,MAAOlH,GAAE,0BAA4BkH,EAAQ,WAHpD,GACO1F,GAAQvB,OAAOuB,MAAOmpB,EAAKnpB,EAAMopB,OAAOD,GAAIrc,EAASqc,EAAGrc,OAAQoiL,EAAqB,kBAAmB3nJ,EAAS,SAIjHilH,EAAW1/I,EAAOtE,QAClBC,KAAM,SAAU5I,EAASqI,GACrB,GAAIwG,GAAO5G,IACXgF,GAAOf,GAAGtD,KAAKwH,KAAKvB,EAAM7O,EAASqI,GACnCwG,EAAK+gB,YAAYvgB,KAAK,OAAQ1Q,EAAEsP,MAAMhG,KAAM,YAC5C4G,EAAK7O,QAAQuC,SAAS,eAAegtB,KAAK,KAAK5pB,KAAKkJ,EAAKygL,cAAct+J,GAAGniB,EAAKxG,QAAQgrD,eAAe9wD,SAAS8sL,GAC/GxgL,EAAK7O,QAAQ2N,GAAG,OAAQ,IAAK,aAEjCgC,QAAS+3B,GACT6nJ,SAAU,SAAUnkK,GAChB,GAAmCmiI,GAAKxsH,EAApCmrH,EAAOjkJ,KAAKjI,QAAQuvB,KAAK,KAAiB3pB,EAAM,EAAG/F,EAASqsJ,EAAKrsJ,MACrE,KAAI6d,MAAM0N,GAWN,MADAnjB,MAAKunL,eAAetjC,EAAKl7H,GAAG5F,KACrB,CAVP,MAAOxlB,EAAM/F,EAAQ+F,IAGjB,GAFA2nJ,EAAMrB,EAAKtmJ,GACXm7B,EAAOwsH,EAAI/hJ,KAAKpM,QAAQ,gBAAiB,MACrC2hC,EAAK56B,QAAQilB,EAAK2V,EAAKlhC,OAASurB,EAAIvrB,aAEpC,MADAoI,MAAKunL,eAAe7wL,EAAE4uJ,KACf,CAOnB,QAAO,GAEXkiC,gBAAiB,SAAUrkK,GACvB,GAAImiI,EACJA,GAAMtlJ,KAAKjI,QAAQuvB,KAAK,YAAenE,EAAM,MAC7CnjB,KAAKunL,eAAejiC,IAExBnsG,MAAO,WACHn5C,KAAKynL,cAAc98H,YAAYy8H,IAEnCK,YAAa,WACT,MAAOznL,MAAKjI,QAAQ4C,SAAS,IAAMysL,IAEvC3P,MAAO,SAAUlrI,EAAM3uC,GACnB,GAA6B65K,GAAzBiQ,EAAW1nL,KAAKjI,OAMpB,OALK0d,OAAM82B,KACPA,EAAOm7I,EAAS/sL,WAAW8oB,IAAI8oB,IAEnCA,EAAOm7I,EAASpgK,KAAKilB,GACrBkrI,EAAQ/gL,EAAE61C,EAAKjlB,KAAK,aAAa,IAAM8vJ,EAAYx5K,GAAOkkE,YAAYv1B,EAAK5xC,SAAS,cAChFiD,GAAmB,IAAVA,GACT65K,EAAM/0K,KAAK9E,GACJoC,MAEPpC,KAAU,GACV65K,EAAM3nI,QAAQ5nB,SACPloB,MAEJy3K,EAAM/0K,QAEjB2iE,SAAU,SAAUp9D,GAChB,KAAIA,EAAE67B,MAAQ,GAAd,CAGA,GAAIl9B,GAAO5G,KAAMusC,EAAO71C,EAAEuR,EAAE22B,cACxB2N,GAAK,KAAO3lC,EAAK6gL,cAAc,KAG/B7gL,EAAKoB,QAAQy3B,GAAU8M,KAAMA,IAC7BtkC,EAAE9D,iBAEFyC,EAAK2gL,eAAeh7I,MAG5Bg7I,eAAgB,SAAUh7I,GACjBA,EAAK,KAGVvsC,KAAKm5C,QACL5M,EAAKjyC,SAAS8sL,KAElBC,aAAc,WACV,GAAIlxG,GAASz/E,EAAEsJ,MAAOm4E,EAAOjgF,EAAM2xB,UAAUssD,EAAQ,QAASshG,EAAQv/K,EAAM2xB,UAAUssD,EAAQ,SAAUk4D,EAAQl4D,EAAO7uD,KAAK,OAAQqwJ,EAAWjhL,EAAE,0BACjJy/E,GAAO77E,SAAS,aAAa4I,KAAKhL,EAAMgL,KAAK,QAAS,OAAO45D,WAAWmY,IAAIo5D,GAAOx7F,QAAQ,2BACvFw7F,EAAM,GACNA,EAAM/zI,SAAS,YAAY2tB,UAAUkuD,IAErCA,EAAO3I,QAAQmqG,GACXx/F,IACAw/F,EAASr9K,SAAS,MAAQ69E,IACtBs/F,GAAmB,IAAVA,IACTL,EAAYK,GAAO31G,YAAY61G,MAK/CngK,QAAS,SAAUvP,GACf,GAAIkb,GAAMlb,EAAE0gB,KAAK9E,EACbV,KAAQnjB,KAAKsnL,SAASr/K,EAAE0gB,KAAK9E,KAC7B7jB,KAAKsnL,SAASnkK,IAGtB/iB,SACI8O,KAAM,WACNk8C,cAAe,EACf3rC,QAAQ,IAGhB4B,GAAG8G,OAAOu8H,IACZ/tJ,OAAOuB,MAAM2sB,QACRluB,OAAOuB,OACE,kBAAVzB,SAAwBA,OAAOgiC,IAAMhiC,OAAS,SAAUiiC,EAAIC,EAAIC,IACrEA,GAAMD,OAEV,SAAUniC,EAAGC,QACVA,OAAO,iBAAkB,cAAeD,IAC1C,WAyrCE,MAhrCC,UAAUE,EAAGouB,EAASluB,GACnB,YAKA,SAAS+wL,GAAenxL,GACpB,GAAI0hC,GAAO0vJ,CACX,KAII,MAHAA,GAAW,SAAUpxL,GACjB,MAAOA,MAEJA,IACT,QACEoxL,EAAW1vJ,GAkDnB,QAAS2vJ,GAAavyJ,EAAOv9B,EAAS+vL,EAAO9kL,EAAQ+kL,EAAUC,GAoD3D,QAASC,KAAT,GACQ1lD,GAeAxvF,EAGAm1I,EAKIC,EACAlhF,EAOAmhF,EACAC,CAeR,OA9CIP,GAAMQ,UACN/lD,EAAkB7rI,EAAEA,EAAEqB,GAAS,GAAGizD,WAAU,KAEhD5qD,EAAUmC,EAAa+yB,EAAOv9B,EAAS+vL,EAAO9kL,EAAQulL,GAAMnoL,QACxDrI,EAAQgC,GAAG,YACV,SAAUqG,GACP,GAAIA,EAAQxI,OAAS,EAAG,CACpB,GAAIR,GAAQV,EAAE0J,EAAQ,KACjB,KAAKlG,KAAK9C,EAAMg+B,SAAW,MAAMl7B,KAAK9C,EAAM01C,QAC7C11C,EAAM8wB,WAGhBnwB,EAAQ,GAAGqI,SAEb2yC,EAASw1I,EAAKpgL,KAAKpQ,EAASywL,EAAcpoL,GAAS5E,KAAKwH,GAC5DylL,EAAa11I,EAAQzd,EAAOwyJ,EAAO9kL,EAAQ+kL,GAC3CzyJ,EAAMozJ,MAAM,qBAAsB31I,GAC9Bm1I,EAAkBS,EAA4BrzJ,EAAOyd,GACrD+0I,EAAMQ,SACNM,EAAY71I,EAAQzd,EAAOv9B,EAASwqI,EAAiBulD,EAAMQ,QAASJ,EAAiBJ,GAErFA,EAAMK,cACFA,EAAcL,EAAMK,YACpBlhF,EAAa3xE,EAAMuzJ,MAAMV,GACzBlhF,GACAl0D,EAAOtzB,QAAQwnF,GAEnB6hF,EAAkB/1I,EAAQzd,EAAOv9B,EAASowL,IAE1CL,EAAMM,cACFA,EAAcN,EAAMM,YACpBC,EAAa/yJ,EAAMuzJ,MAAMT,GACzBC,GACAt1I,EAAO6X,SAASy9H,GAEpBU,EAAkBh2I,EAAQzd,EAAOv9B,EAASqwL,IAE1CN,EAAMkB,UACNC,EAAel2I,EAAQzd,EAAOwyJ,EAAMkB,UAEpCE,GACAC,EAAcp2I,EAAQzd,EAAOv9B,EAASmxL,EAASE,GAE/Cr2I,GACAs2I,EAA8Bt2I,EAAQh7C,GAEnCg7C,EApGf,GAIQu2I,GAA2BC,EAE3BL,EAA0BE,EAC1Bb,EAKAiB,EACAppL,EAEI69C,EACKnjD,EAAOwpB,EACRmlK,EACAtoL,EAcJm4B,EACAlR,CAhCR,MAAMrwB,YAAmB8sB,SACrB,KAAU/b,OAAM,iIAMpB,IAJIwgL,EAAWxB,EAAMwB,SAAUC,EAAaj0J,EAAMuzJ,MAAMS,GACxDtB,EAAcA,MACVkB,EAAUlB,EAAY,GAAIoB,EAASpB,EAAY,GAC/CO,EAAO7xL,EAAEqB,GAASiL,IACjBulL,EAED,MADA5xL,QAAO8tB,QAAQs0B,MAAM,mBAAqB/1C,GACnC,IAIX,IAFIwmL,EAASjnL,EAAa+yB,EAAOv9B,EAAS+vL,EAAO9kL,EAAQulL,GACrDnoL,EAAUopL,EAAOppL,QACjBopL,EAAOC,WAAW7xL,OAAQ,CAE1B,IADIqmD,KACKnjD,EAAI,EAAGwpB,EAAMklK,EAAOC,WAAW7xL,OAAQkD,EAAIwpB,EAAKxpB,IACjD2uL,EAAaD,EAAOC,WAAW3uL,GAC/BqG,EAAUzK,EAAEylD,SAAS,SAAUxrC,GAC/B,GAAI+4K,GAAUp0J,EAAMq0J,OAAOF,EAAW3wJ,KAAM,SAAU4zB,GAC9CA,IAAa91D,IACb8yL,IACA/4K,EAAEyrC,eAGXj7C,UACH88C,EAASn2C,KAAK3G,EAGlB,OADAzK,GAAE0nD,KAAKt3C,MAAM,KAAMm3C,GAAUI,KAAK4pI,GAClC,EAEJ,MAAIqB,KAAaC,GACTjwJ,EAAOhE,EAAMs0J,OAASt0J,EACtBlN,EAAW,WACX,GAAIyhK,GAAav0J,EAAMq0J,OAAOL,EAAU,SAAU58H,GAC1CA,IAAa91D,IACbizL,IACA9xL,EAAQqtB,WAAW0iK,EAAMgC,MAAMR,UAC/BA,EAAW,KACX1B,EAASK,OAIjB,qBAAqB/tL,KAAKo/B,EAAK5D,SAC/BtN,IAEAkN,EAAM01I,OAAO5iJ,GAEjB,GAEO6/J,IAqDf,QAAS1lL,GAAa+yB,EAAOv9B,EAAS+vL,EAAO9kL,EAAQulL,GAYjD,QAASwB,GAAU76K,EAAMtR,GACrB,GAAIosL,GAAallK,EAAQvI,KAAK+Y,EAAMuzJ,MAAMjrL,GACtCosL,KAAepzL,EACf6yL,EAAW3hL,MACPhG,OAAQoN,EACR4pB,KAAMl7B,IAGVwC,EAAQ8O,GAAQ86K,EApB5B,GAWQ5pL,GAYAy1F,EACAo0F,EAiCArlK,EAxDAb,EAAO/gB,EAAO7L,QAAQ,SAAU,IAChCsyL,KACAS,EAAcpC,EAAMqC,UAAYrC,EAAM1nL,QACtCgqL,EAAe90J,EAAMuzJ,MAAMqB,EA0D/B,OAzDIA,IAAeE,IAAiBxzL,GAChC6yL,EAAW3hL,MACPhG,OAAQ,UACRg3B,KAAMoxJ,IAGV9pL,EAAU0kB,EAAQpkB,UAAWonL,EAAMuC,eAAgBD,GAYnDv0F,EAAgB0yF,EAAKvlL,OAAO+D,UAAU3G,QACtC6pL,EAAe1B,EAAKvlL,OAAO+D,UAAUW,OACzChR,EAAEgH,KAAKoqL,EAAO,SAAU54K,EAAMtR,GAAhB,GAIN0sL,GAEIC,EAYAjyL,EAEIkyL,CAnBC,YAATt7K,GAA8B,gBAATA,GAAmC,gBAATA,GAAmC,eAATA,IAGzEo7K,EAAW,OAASp7K,EAAK7X,OAAO,GAAG6F,cAAgBgS,EAAK1I,MAAM,GACvC,IAAvB0I,EAAKhR,QAAQ,QACTqsL,EAAWr7K,EAAK/X,QAAQ,OAAQ,SAAUshB,GAC1C,MAAOA,GAAOphB,OAAO,GAAGyF,gBAExBmtL,EAAa/rL,QAAQqsL,QACrBnqL,EAAQmqL,GAAY3sL,IAGxBi4F,EAAcn5F,eAAe4tL,GAC7BP,EAAUO,EAAU1sL,GACbi4F,EAAcn5F,eAAewS,KAAUu7K,EAAqBv7K,GACnE66K,EAAU76K,EAAMtR,GACR8sL,EAAkBx7K,KACtB5W,EAAQ4W,EAAK5W,MAAM,oBACnBA,IACIkyL,EAAalyL,EAAM,GAAGjB,OAAO,GAAGyF,cAAgBxE,EAAM,GAAGkO,MAAM,GAC/DlO,EAAM,IAAc,YAAR4W,EACZ9O,EAAQoqL,GAAc5sL,GAEV,YAARsR,IACAs7K,EAAa,WAEjBT,EAAUS,EAAY5sL,SAKlCgnB,EAAakjK,EAAM6C,aAAe7C,EAAM7sL,OACxC2pB,IACAxkB,EAAQwkB,WAAagmK,EAAiBt1J,EAAOv9B,EAASgsB,EAAMa,IAEhExkB,EAAQuzF,UAAYr+D,IAEhBl1B,QAASA,EACTqpL,WAAYA,GAGpB,QAASX,GAAkB9lL,EAAQsyB,EAAOv9B,EAASowL,GAC/C,MAAIjwL,OAAMmpB,GAAGu6H,UAAY54I,YAAkB9K,OAAMmpB,GAAGu6H,UAAY1jJ,MAAMmpB,GAAGkuH,MAAQvsI,YAAkB9K,OAAMmpB,GAAGkuH,MACxGs7C,EAAKt6D,KAAK,+EAAiFvtH,EAAO5C,QAAQ8O,MAC1G,IAEJomB,EAAMq0J,OAAOxB,EAAa,SAAUz7H,EAAUo3C,GACtCp3C,GAAYo3C,GACZ9gG,EAAOyc,QAAQitC,KAFvBp3B,GAMJ,QAASyzJ,GAAkB/lL,EAAQsyB,EAAOv9B,EAASqwL,GAC/C,MAA8B,kBAAnBplL,GAAO4nD,UACdigI,EAAKt6D,KAAK,iFAAmFvtH,EAAO5C,QAAQ8O,MAC5G,IAEJomB,EAAMq0J,OAAOvB,EAAa,SAAU17H,EAAUo3C,GACtCp3C,GAAYo3C,GACZ9gG,EAAO4nD,SAAS8B,KAFxBp3B,GAMJ,QAASmzJ,GAAazlL,EAAQsyB,EAAOwyJ,EAAOgD,EAAa/C,GACrD,GAAID,EAAMC,GAAW,CACjB,GAAIrkK,GAAMqnK,EAAOjD,EAAMC,IAAW91E,MAClC,KAAIvuF,EAGA,KAAU5a,OAAMi/K,EAAW,2DAA6DD,EAAMgD,GAF9FpnK,GAAI4R,EAAOtyB,IAMvB,QAASgoL,GAAUjzL,GACf,MAAI,kBAAkBmC,KAAKnC,EAAQmL,KAAK,SAC7BnL,EAAQg5C,KAAK,WAEjBh5C,EAAQ+0C,MAGnB,QAASm+I,GAAOlzL,GACZ,MAAOmzL,GAAWhxL,KAAKnC,EAAQ,GAAGqsB,SAEtC,QAAS+kK,GAAcnmL,EAAQsyB,EAAOv9B,EAASmxL,EAASE,GAAxD,GAIQxrL,GACAutL,EAUAC,EAsCAC,EAwBAC,CA5ECtoL,GAAOpF,QAIRutL,GAAsB,EAEtBvtL,EADAqtL,EAAOlzL,GACC,WACJ,MAAOizL,GAAUjzL,IAGb,WACJ,MAAOiL,GAAOpF,SAGlBwtL,EAAa,WACb,GAAIt+I,GAAMo8I,EAAQqC,UACdz+I,KAAQl2C,IACRk2C,EAAMo8I,EAAQsC,aAEd1+I,IAAQl2C,IACRk2C,EAAM,MAEVq+I,GAAsB,EACtBzhK,WAAW,WAEP,GADAyhK,GAAsB,EAClBnoL,EAAQ,CACR,GAAIgmL,GAAW1zJ,EAAMtyB,EAAOjL,QAAQmL,KAAK,cACrC8lL,KACAl8I,EAAMk8I,GAENhmL,EAAO5C,QAAQ4oD,YAAa,GAAUhmD,EAAOmpD,SAASC,QAKtDppD,EAAOpF,MAAMkvC,GAJTA,GACA9pC,EAAOpF,MAAMkvC,KAM1B,IAEPo8I,EAAQuC,QAAUL,EAClB1hK,WAAW,WACHw/J,EAAQuC,UAAYL,IACpBlC,EAAQuC,QAAUL,OAItBH,EAAOlzL,IACPA,EAAQ2N,GAAG,SAAU,WACjBylL,GAAsB,IAG1BE,EAAW,SAAUhuI,GACrB,MAAO,YACH,GAAIquI,EACAP,KAAwBpzL,EAAQgC,GAAG,YAGnCsjD,GAAY+rI,IACZsC,EAAetC,EAAOuC,WAE1BzC,EAAQ0C,cAAchuL,KAClBy/C,IACA6rI,EAAQ2C,eACJH,GACAtC,EAAOyC,gBAGfC,EAAOx2J,MAGftyB,EAAO5L,MAAM,SAAUi0L,GAAS,IAChCroL,EAAO5L,MAAM,OAAQi0L,GAAS,IACxBnzL,MAAMmpB,GAAGivF,cAAgBttG,YAAkB9K,OAAMmpB,GAAGivF,cACtDttG,EAAO5L,MAAM,YAAai0L,GAAS,IAEnCC,EAAa1tL,IACZ6X,MAAMyzK,EAAQqC,aAAeD,GAAcpC,EAAQqC,aAC/CrC,EAAQ6C,SAAS7C,EAAQqC,YAEL,MAAdD,GAAqC,KAAfA,GAAqBA,GAAcpC,EAAQqC,YACxErC,EAAQ0C,cAAcN,GAFtBtoL,EAAOpF,MAAMsrL,EAAQqC,aAK7BrC,EAAQ2C,gBAEZ,QAAS5C,GAAejmL,EAAQsyB,EAAO0zJ,GAAvC,GAKQ/yJ,GACAmzJ,EACA9lK,EACAC,EACAyoK,EACAC,EACAr0L,EAGAs0L,EAEAC,EAeAC,CA9BJ,OAA2B,kBAAhBppL,GAAOpF,OACditL,EAAKt6D,KAAK,2EAA6EvtH,EAAO5C,QAAQ8O,MACtG,IAEA+mB,EAAOv/B,EAAEsM,EAAOjL,SAAS4L,QAAQ,QACjCylL,EAASlxL,MAAMorB,OAAO2S,EAAK/yB,KAAK,SAAS,GAAMoyB,GAC/ChS,EAASynK,EAAO/B,GAChBzlK,EAASD,EAAO2uF,OAChB+5E,GAAW,EACXC,EAAoB/zL,MAAMmpB,GAAGymC,aAAe9kD,YAAkB9K,OAAMmpB,GAAGymC,YACvElwD,EAAS,SAAUgG,GACnB,MAAOA,IAASquL,EAAoBruL,EAAMhG,OAAS,GAEnDs0L,EAAqBt0L,EAAO0rB,EAAOgS,IACvCtyB,EAAOqpL,uBAAuB/oK,EAAOgS,IACjC62J,EAAe,SAAUz/H,EAAUo3C,GAC/Bp3C,IAAa91D,IACb81D,EAAW,MAEXs/H,GAAYt/H,GAAYo3C,GAAYlsG,EAAO80D,IAAaw/H,IAG5DA,EAAqBt0L,EAAO80D,GAC5B1pD,EAAOqpL,uBAAuB3/H,KAE9Bu/H,EACA32J,EAAMg3J,iBAAiBtD,EAAUmD,GAEjC72J,EAAMq0J,OAAOX,EAAUmD,GAEvBC,EAAgB,WAChBJ,GAAW,EACP5C,GAAUA,EAAOuC,WACjBvC,EAAOmD,YAEXT,EAAOx2J,EAAO,WACV/R,EAAO+R,EAAOtyB,EAAOwpL,0BACrBN,EAAqBt0L,EAAO0rB,EAAOgS,MAEvC02J,GAAW,GAEfhpL,EAAO5L,MAAM,SAAUg1L,GACvBppL,EAAO5L,MAAM,OAAQg1L,GAtCjBn2J,GAwCR,QAAS0yJ,GAA4BrzJ,EAAOtyB,GACxC,GAAIypL,GAAan3J,EAAMo3J,IAAI,WAAY,WACnCD,IACIzpL,IACA9K,MAAM4tB,QAAQ9iB,EAAOjL,SACrBiL,EAAS,OAGjB,OAAOypL,GAEX,QAASpD,GAA8BrmL,EAAQjL,GA+C3C,QAAS40L,KACLC,EAAGC,aAEP,QAASC,KACLF,EAAGG,QAAQr2L,EAAEqB,GAAS,IAAMgyC,YAAY,IAnDhD,GAIQijJ,GACAJ,CAJEj2L,QAAOs2L,kBAAoBjqL,EAAO3J,UAGpC2zL,KAAmBxmL,MAAM2B,KAAKzR,EAAEqB,GAAS,GAAGm1L,WAC5CN,EAAK,GAAIK,kBAAiB,SAAUE,GACpCR,IACK3pL,IAGLmqL,EAAQ70J,QAAQ,SAAU80J,GAAV,GAIJC,GAHJ7vB,EAAI9mK,EAAEsM,EAAO3J,SAAS,EAC1B,QAAQ+zL,EAAIE,eACZ,IAAK,QACGD,KAAmB7mL,MAAM2B,KAAKilL,EAAIhtK,OAAO8sK,WAC7CG,EAAc/0J,QAAQ,SAAUi1J,GACxBP,EAAc9uL,QAAQqvL,GAAO,IAC7B/vB,EAAE0vB,UAAU5rL,IAAIisL,GACZr1L,MAAMmpB,GAAG2wE,UAAYhvF,YAAkB9K,OAAMmpB,GAAG2wE,UAChDhvF,EAAOlD,MAAM,GAAGotL,UAAU5rL,IAAIisL,MAI1CP,EAAc10J,QAAQ,SAAUi1J,GACxBF,EAAcnvL,QAAQqvL,GAAO,IAC7B/vB,EAAE0vB,UAAUhlK,OAAOqlK,GACfr1L,MAAMmpB,GAAG2wE,UAAYhvF,YAAkB9K,OAAMmpB,GAAG2wE,UAChDhvF,EAAOlD,MAAM,GAAGotL,UAAUhlK,OAAOqlK,MAI7CP,EAAgBK,CAChB,MACJ,KAAK,WAC2B,kBAAjBrqL,GAAOyc,QAAyBzc,EAAOjL,QAAQmL,KAAK,aAC3DF,EAAOyc,QAAQ/oB,EAAE02L,EAAIhtK,QAAQld,KAAK,YAEtC,MACJ,KAAK,WAC6B,kBAAnBF,GAAO4nD,UAA2B5nD,EAAOjL,QAAQmL,KAAK,aAC7DF,EAAO4nD,WAAWl0D,EAAE02L,EAAIhtK,QAAQld,KAAK,gBAKjD4pL,OAQJA,IACA9pL,EAAO5L,MAAM,UAAWu1L,IAE5B,QAAS/D,GAAY5lL,EAAQsyB,EAAOv9B,EAASwqI,EAAiBirD,EAAYtF,EAAiBJ,GACvF,GAAI+B,GAAav0J,EAAMq0J,OAAO6D,EAAY,SAAU9gI,EAAUo3C,GAApB,GAM9B2pF,GASA9+E,EACAn1C,EACAk0H,EAIAllL,CApBHxF,GAAOkjB,aAAewmC,IAAao3C,IACpC+lF,IACI/B,EAAM6F,UACN7F,EAAM6F,WAENF,EAAkBG,EAAwB5qL,EAAO5C,QAAQ8O,MACzDu+K,GACAA,EAAgBn1J,QAAQ,SAAUppB,GAC9B,GAAI2+K,GAAmBv4J,EAAMuzJ,MAAMf,EAAM,IAAM54K,GAC3C2+K,IACAtrD,EAAgBz+E,OAAOptD,EAAEm3L,GAAkB3qL,KAAKhL,MAAMyE,UAAU,IAAMuS,GAAO,OAIrFy/F,EAAWj4G,EAAEsM,EAAO3J,SAAS,GAC7BmgE,EAAW9iE,EAAEsM,EAAOjL,SAAS,GAC7B21L,EAAmC,WAAxB1qL,EAAO5C,QAAQ8O,KAC1Bw+K,IACA31L,EAAUrB,EAAE8iE,IAEZhxD,EAAUzQ,EAAQw9B,WAAW9R,IAAI,YACrCzgB,EAAOgjB,WACHkiK,GACAA,IAEJllL,EAAS,KACLw2D,IACIm1C,GACAA,EAASnwF,WAAWsvK,aAAat0H,EAAUm1C,GAE/Cj4G,EAAEqB,GAASglE,YAAYwlE,IAE3B/5H,EAAQ+5H,GAAiBjtG,MAE9B,EACHw2J,GAAOx2J,GAEX,QAASluB,GAAK5Q,EAAGsI,GACb,MAAO,UAAU8D,EAAGC,GAChB,MAAOrM,GAAE2R,KAAKrJ,EAAK8D,EAAGC,IAG9B,QAASkrL,GAAYhvL,EAAKnB,GACtBoC,KAAKjB,GAAO7G,MAAMiT,UAAUvN,GA0HhC,QAASowL,GAAiBC,EAAO3gG,GAC7B,QAAS4gG,GAAKC,EAAeC,GACzBC,EAAOC,UAAUH,GACb,mBACA,SAAUI,GACN,MAAOA,GAAiBlmJ,OAAO+lJ,EAAYD,MAL3D,GAWQlwL,GACAuwL,EAEAC,EAEIhiL,EAPJyC,EAAOo+E,EAAW,SAAW,EACjCp+E,IAAQ++K,EAAMhqL,GAAG7D,QAAQ8O,KACrBjR,EAAYiR,EACZs/K,EAAW,QAAUt/K,EAAK7X,OAAO,GAAK6X,EAAKoF,OAAO,GAAGxX,cACzDoS,EAAO,QAAUA,EACbu/K,EAASv/K,EAAK/X,QAAQ,WAAY,OAClCu3L,EAAexwL,QAAQgR,EAAK/X,QAAQ,QAAS,WACzCsV,EAAQyC,IAASs/K,GAAYt/K,IAC7BA,EACAs/K,GAEJ1pK,EAAQwT,QAAQ7rB,EAAO,SAAU0hL,GAC7BE,EAAOC,UAAUH,EAAe,WAC5B,OACIQ,SAAU,IACVx3L,SAAS,EACTsL,SAAU,SAAU1K,EAASgyC,GAAnB,GACFsvE,GAAMu1E,EAAS3wL,IAAc,MAC7B4wL,EAAa9kJ,EAAW+kJ,aAAe/kJ,EAAW8kJ,UACtD,OAAO,IAAMx1E,EAAM,IAAMo1E,GAAUI,EAAa,KAAOA,EAAa,IAAM,IAAM,IAAM92L,EAAQ2K,OAAS,KAAO22G,EAAM,WAMpI01E,EAAkB7wL,QAAQgR,EAAK/X,QAAQ,QAAS,UAGpD+2L,EAAKh/K,EAAMA,GACPs/K,GAAYt/K,GACZg/K,EAAKM,EAAUt/K,IAGvB,QAAS8/K,GAAoBvwL,GAEzB,MADAA,GAAK/H,EAAE+H,GACAvG,MAAMuvB,eAAehpB,EAAIvG,MAAMmpB,KAAOnpB,MAAMuvB,eAAehpB,EAAIvG,MAAMopB,OAAOD,KAAOnpB,MAAMuvB,eAAehpB,EAAIvG,MAAMqpB,QAAQF,IAErI,QAASyqK,GAAOx2J,EAAO8Y,GAAvB,GACQ9U,GAAOhE,EAAMs0J,OAASt0J,EACtB25J,EAAc,qBAAqB/0L,KAAKo/B,EAAK5D,QAC7C0Y,GACI6gJ,EACA7gJ,IAEA9U,EAAK0xI,OAAO58H,GAER6gJ,GACR31J,EAAK3D,UAGb,QAASu5J,GAAa55J,EAAO72B,GACzB62B,EAAM20I,WACFxrK,GACA/H,EAAE+H,GAAIsnB,WAAW,UAAUA,WAAW,gBAAgBA,WAAW,iBAAiBA,WAAW,2BAA2B4kC,YAAY,YAI5I,QAASwkI,GAAUlB,EAAO5pJ,EAAY+J,GAAtC,GAOYxrC,GACAqwB,EAcJm8J,CArBJ,IAAI14L,EAAEqP,QAAQkoL,GACV,MAAOnpK,GAAQwT,QAAQ21J,EAAO,SAAUA,GACpCkB,EAAUlB,EAAO5pJ,EAAY+J,IAGrC,IAAoB,gBAAT6/I,GAAmB,CAG1B,IAFIrrL,EAAIqrL,EAAMh3L,MAAM,KAChBg8B,EAAI/6B,MACD+6B,GAAKrwB,EAAEhL,OAAS,GACnBq7B,EAAIA,EAAErwB,EAAEkP,QAEZ,KAAKmhB,EAMD,MALAo8J,GAAevnL,MACXmmL,EACA5pJ,EACA+J,KAEG,CAEX6/I,GAAQh7J,EAAElsB,UAYd,MAVIqoL,GAAanB,EAAM5pJ,GACvB4pJ,EAAM5pJ,GAAc,WAChB,GAAIiwE,GAAOt0G,KAAMsoB,EAAOvtB,SACxB,OAAOqzC,GAAKtnC,OACRwtG,KAAMA,EACNlzD,KAAM,WACF,MAAOguI,GAAWtoL,MAAMwtG,EAAMv5G,UAAUnD,OAAS,EAAImD,UAAYutB,KAEtEA,KAEA,EAnuBd,GAKO+lK,GAAiDiB,EAAsCvE,EAAkCnD,EAAsC2H,EAAiB1E,EAYhLrC,EACAoC,EAkCAF,EAOAD,EAqNAS,EAiTA0D,EAwBAF,EAQAK,EAiGAM,EA4ZAzB,CA5lCC9oK,IAAYA,EAAQyQ,WAGrB84J,EAASvpK,EAAQupK,OAAO,uBAAyBiB,EAAYxqK,EAAQyQ,UAAU,OAAQw1J,EAASuE,EAAU7rK,IAAI,UAAWmkK,EAAW0H,EAAU7rK,IAAI,YAA8BonK,EAAOyE,EAAU7rK,IAAI,QAarMmnK,EAAmB,WAAA,GACfntK,IACA+xK,SAAU,qBACVC,SAAU,yBACVC,UAAW,sBACXC,UAAW,kBACXC,kBAAmB,kBACnBh0C,SAAU,yBACVrM,KAAM,SACN7C,YAAa,UAEbmjD,EAAe,SAAUjrK,EAAY1lB,GACrC,MAAY,UAARA,EACO0lB,EAEJ1sB,MAAMsD,KAAK0D,GAAMmpC,OAAOzjB,GAEnC,OAAO,UAAU0Q,EAAOv9B,EAASgsB,EAAM9oB,GAAhC,GACCiE,GAAOue,EAAMsG,IAAS,aACtBpY,EAAU2pB,EAAMuzJ,MAAM5tL,GACtB60L,EAAKD,EAAalkL,EAASzM,EAW/B,OAVAo2B,GAAMq0J,OAAO1uL,EAAQ,SAAU80L,GAAV,GAILD,GAHR9sL,EAASgsL,EAAoBj3L,EAC7BiL,IAAyC,kBAAxBA,GAAOu3E,eACpBw1G,IAAQpkL,IACJmkL,EAAKD,EAAaE,EAAK7wL,GAC3B8D,EAAOu3E,cAAcu1G,GACrBnkL,EAAUokL,KAIfD,MAGXpF,GACAC,aAAa,EACbR,UAAU,EACV7B,SAAS,EACTU,UAAU,EACVM,UAAU,GAEVmB,GACAv7K,MAAM,EACNmrB,OAAO,EACPvgC,OAAO,GAkNPoxL,EAAa,6BAyPjBmD,EAAO2B,QAAQ,oBACX,WACA,SAAUxnL,GAAV,GACQynL,GAGA5nJ,EAFA6nJ,GAAW,CAiDf,OAhDAX,GAAkB/mL,EACd6/B,EAAS,SAAUtkB,EAAMgkK,GACzB,OACI4G,SAAU,KACVwB,SACI,WACA,UAEJ76J,OAAO,EACPy1I,YACI,SACA,SACA,WACA,SAAUG,EAAQklB,GACdpwL,KAAKyC,SAAW2E,EAAK2mL,EAAaqC,GAClCA,EAAOzC,SAAWvmL,EAAK,WACnBpH,KAAKyC,SAAW,KAChB2tL,EAAOzC,SAAW,MACnB3tL,QAGXqlG,KAAM,SAAU/vE,EAAOv9B,EAAS+vL,EAAOE,GAAjC,GAKEhlL,GAJAqtL,EAAW35L,EAAEqB,GACbu4L,EAAWvsK,EAAK5sB,QAAQ,WAAY,MACxCk5L,GAASntL,KAAKotL,EAAUD,EAASntL,KAAK,QAAUotL,IAChDD,EAAS,GAAG5mI,gBAAgB,QAAU6mI,GAClCttL,EAAS6kL,EAAavyJ,EAAOv9B,EAAS+vL,EAAO/jK,EAAMgkK,EAAUC,GAC5DhlL,IAGDitL,GACArlK,aAAaqlK,GAEjBA,EAAuBvmK,WAAW,WAC9B4L,EAAMozJ,MAAM,iBACPwH,IACDA,GAAW,EACXx5L,EAAE,QAAQgH,KAAK,WACX,GAAIu4B,GAAOv/B,EAAEsJ,MAAM+qK,WAAW,OAC1B90I,IACAA,EAAK41J,yBAQxBxjJ,OAAQA,MAGrBumJ,GACA2B,OAAQ,WACRr6D,eAAgB,QAChBtoB,WAAY,QACZo+C,eAAgB,QAChBrB,WAAY,QACZr6C,aAAc,QACdykB,YAAa,QACbqS,cAAe,QACft/E,YAAa,QACb0oI,OAAQ,QACR5xH,UAAW,OACXiZ,OAAQ,SACR44G,aAAc,IACdC,iBAAkB,IAClBC,mBAAoB,IACpBx1D,SAAU,KACVy1D,eAAgB,KAChBh1C,SAAU,KACV6zC,SAAU,KACVlgD,KAAM,KACN7C,YAAa,KACbiqC,YAAa,MAEb+X,GACA,aACA,eACA,eACA,kBACA,aACA,mBAEAK,GACA,oBACA,aACA,kBACA,eACA,oBACA,eACA,kBACA,aACA,mBACA,iBAEJjqK,EAAQwT,SACJ,eACA,eACA,mBACA,qBACA,iBACA,mBACA,kBACD,SAAUt1B,GACT+rL,EAAkBjnL,KAAK9E,GACvBA,EAAS,QAAUA,EACnBqrL,EAAOC,UAAUtrL,EAAQ,WACrB,OACI2rL,SAAU,IACVtpF,KAAM,SAAU/vE,EAAOv9B,EAAS+vL,GAC5BD,EAAavyJ,EAAOv9B,EAAS+vL,EAAO9kL,EAAQA,SAsExDqsL,KAmCJn3L,MAAMmsB,mBAAmB,SAAUwsK,GAC/BxB,EAAiB34L,EAAEq2B,KAAKsiK,EAAgB,SAAU/mK,GAC9C,OAAQ6mK,EAAUroL,MAAM,KAAMwhB,KAElC0lK,EAAiB6C,EAAM7tL,OAAwB,UAAhB6tL,EAAMp4K,UAEzC02K,GACI,YACA,oBACD,UAAW,SAAU7oK,EAAKwqK,GAAf,GAaNx7J,GAZAg/E,EAAOt0G,KAAKs0G,IAChB,OAAW,QAAPhuF,IACKwqK,GAAOtI,IACRsI,EAAMtI,GAEVA,EAAc,KACVsI,GAAOA,EAAIn9F,WACX2gB,EAAKy8E,eAAiBD,EAAIn9F,SAAS,GACnC2gB,EAAK08E,cAAc18E,EAAKv8G,QAAS+4L,IAErC,IAEAx7J,EAAQg/E,EAAKy8E,eACbz7J,GACAqyJ,EAAe,WAAA,GAaCpyJ,GACA/sB,EAbRyqB,EAAI69J,IAAOvqK,EAAW0M,EAAE1M,SAAU/qB,EAAOy3B,EAAEz3B,IAC/C,IAAI+qB,EAAS3uB,OAAS,EAClB,OAAQ0uB,GACR,IAAK,UACDxB,EAAQwT,QAAQ/R,EAAU,SAAU9nB,GAChC,GAAIwyL,GAAYv6L,EAAE+H,GAAIjD,KAAK,eACvBy1L,IAAaA,IAAc37J,GAAS27J,EAAUC,cAC9ChC,EAAa+B,EAAWxyL,IAGhC,MACJ,KAAK,UACG82B,EAAW++E,EAAKv8G,QAAQw9B,WACxB/sB,EAAU+sB,EAAWA,EAAS9R,IAAI,YAAc8rK,EACpDzqK,EAAQwT,QAAQ/R,EAAU,SAAU9nB,EAAI3D,GAAd,GAClBm2L,GAIIE,CAHJl+J,GAAE42C,UACFonH,EAAYh+J,EAAE42C,WAEVsnH,EAAO31L,GAAQA,EAAKV,GACpBq2L,IAASv6L,GACTq6L,EAAYv6L,EAAEgK,OAAO40B,EAAM87J,OAAQD,GACnCF,EAAUC,cAAe,GAEzBD,EAAY37J,GAGpB5+B,EAAE+H,GAAIjD,KAAK,eAAgBy1L,GAC3BzoL,EAAQ/J,GAAIwyL,KAEhBnF,EAAOx2J,MAjCnBA,KAwCR65J,EAAU,YAAa,yBAA0B,WAC7C,MAAOnvL,MAAKs0G,KAAK12G,UAErBuxL,EAAU,YAAa,yBAA0B,SAAUriJ,GACvD9sC,KAAKs0G,KAAK12G,MAAMkvC,KAEpBqiJ,EAAU,YAAa,yBAA0B,WAC7C,GAAI5iJ,GAAOvsC,KAAKs0G,KAAK7tF,WAAYoiC,EAAa7oD,KAAKs0G,KAAKl0G,QAAQ4nD,cAChE,OAAIzb,GACIvsC,KAAKs0G,KAAKl0G,QAAQ2oD,eACZF,EACKtc,EAAKsc,GAELtc,EAGJA,EAAKziC,SAGT,OAGfqlL,EAAU,YAAa,yBAA0B,SAAUriJ,GAAV,GACzCwnE,GAAOt0G,KAAKs0G,KACZl0G,EAAUk0G,EAAKl0G,QACfyoD,EAAazoD,EAAQ4nD,eACrB5yB,EAAOh1B,EAAQg1B,MAAQ,EACvB0X,KAAQl2C,IACRk2C,EAAM,IAEN+b,IAAezoD,EAAQ2oD,gBAAkBjc,IACzC1X,EAAO0X,EAAI1sC,EAAQ4rD,gBAAkB,GACrClf,EAAMA,EAAI+b,GAAczoD,EAAQ4rD,gBAEhCsoD,EAAKl0G,QAAQ4oD,YAAa,GAAUsrD,EAAKnoD,SAASC,QAOlDkoD,EAAK12G,MAAMkvC,IANN1X,GAAQ0X,GAAO1sC,EAAQ2oD,eACxBurD,EAAK12G,MAAMkvC,GAEXwnE,EAAKjoD,WAAWvf,EAAK1X,KAMjC+5J,EAAU,iBAAkB,yBAA0B,WAAA,GAC9CvxL,GAAQoC,KAAKs0G,KAAKnuF,YAAY3f,MAAM,GACpCqiD,EAAa7oD,KAAKs0G,KAAKl0G,QAAQ4nD,cAMnC,OALIa,IAAc7oD,KAAKs0G,KAAKl0G,QAAQ2oD,iBAChCnrD,EAAQlH,EAAEsc,IAAIpV,EAAO,SAAU2uC,GAC3B,MAAOA,GAAKsc,MAGbjrD,IAEXuxL,EAAU,iBAAkB,yBAA0B,SAAUriJ,GAAV,GAI9CwnE,GACAl0G,EACAyoD,EACArtD,CANO,OAAPsxC,IACAA,MAEAwnE,EAAOt0G,KAAKs0G,KACZl0G,EAAUk0G,EAAKl0G,QACfyoD,EAAazoD,EAAQ4nD,eACrBxsD,EAAOsxC,EACP+b,IAAezoD,EAAQ2oD,iBACvBjc,EAAMp2C,EAAEsc,IAAI85B,EAAK,SAAUP,GACvB,MAAOA,GAAKsc,MAGhBzoD,EAAQ4oD,YAAa,GAAU5oD,EAAQ2oD,gBAAmBurD,EAAKnoD,SAASC,QAGxEkoD,EAAK12G,MAAMkvC,GAFXwnE,EAAKjoD,WAAW7wD,EAAMsxC,KAK9BqiJ,EAAU,YAAa,gBAAiB,SAAUp3L,EAASqI,GAAnB,GAG5Bk1B,GACKx6B,EACD6d,EACAlR,EALR6sG,EAAOt0G,KAAKs0G,IAChB,IAAIl0G,IAAY1J,EAAEqP,QAAQ3F,GAEtB,IADIk1B,EAAQg/E,EAAKy8E,eACRj2L,EAAIw5G,EAAK5sG,OAAO9P,SAAUkD,GAAK,GAChC6d,EAAQ27F,EAAK5sG,OAAO5M,GACpB2M,EAAUrH,EAAQuY,GAClBlR,GAA6B,gBAAXA,KAClBrH,EAAQuY,GAAS27F,EAAK+8E,0BAA0B14K,EAAO2c,EAAO7tB,MAK9E0nL,EAAU,YAAa,4BAA6B,SAAUx2K,EAAO2c,EAAO7tB,GAExE,MADAA,GAAUsjL,EAAOtjL,GACV,SAAUQ,GACb6jL,EAAOx2J,EAAO,WACV7tB,EAAQ6tB,GAASg8J,WAAYrpL,SAIzCknL,GACI,UACA,cACA,cACA,eACD,4BAA6B,SAAUx2K,EAAO2c,EAAO7tB,GACpD,MAAa,UAATkR,EACO3Y,KAAKohD,QAEhB35C,EAAUsjL,EAAOtjL,GACV,SAAUq2E,GAAV,GAGCjuC,GAAMsmB,EAAuCo7H,EAAO/qK,EAAOosG,EAAS4+D,EAQ/D12L,EACDyxC,EACA9lB,EAZJzjB,EAAS86E,EAAG51E,OACZ9H,EAAU4C,EAAO5C,QACDqxL,GAAWH,WAAYxzG,EAQ3C,KAPIh5D,EAAQ4sK,SAAStxL,EAAQ+2E,cACzBtnC,EAAOzvC,EAAQ+2E,WAAWj5E,QAAQ,aAClCi4D,EAAW/1D,EAAQ+2E,WAAWj5E,QAAQ,kBAE1CqzL,EAAQE,EAAOpmI,SAAWrrD,KAAK80B,SAC/BtO,EAAQirK,EAAOj2L,QACfo3H,EAAU6+D,EAAO7+D,WACR93H,EAAI,EAAGA,EAAIy2L,EAAM35L,OAAQkD,IAC1ByxC,EAAOsD,EAAO0hJ,EAAMz2L,GAAG0jB,WAAa+yK,EAAMz2L,GAC1C2rB,EAAWzjB,EAAOyjB,SAAS8lB,GAC3BsD,GACI/qB,EAAQ/sB,QAAQkL,QAAQwjB,EAAUD,GAAS,GAC3CA,EAAM1e,KAAK2e,GAEf+qK,EAAS1sK,EAAQ/sB,QAAQw5L,EAAMz2L,IAAIqX,QAC/B2S,EAAQ/sB,QAAQkL,QAAQuuL,EAAQ5+D,GAAW,GAC3CA,EAAQ9qH,KAAK0pL,IAGjBhrK,EAAM1e,KAAK2e,EAGd0vC,KACDs7H,EAAOhrK,SAAWgrK,EAAOj2L,KAAOgrB,EAAM,GACtCirK,EAAOE,gBAAkBz5L,MAAMkgC,kBAAkBq5J,EAAOhrK,UACxDgrK,EAAOpmI,SAAWkmI,EAAM,IAE5BzF,EAAOx2J,EAAO,WACV7tB,EAAQ6tB,EAAOm8J,SAI3BtC,EAAU,UAAW,gBAAiB,SAAUp3L,EAASqI,GAErD,GADAJ,KAAKohD,OACDhhD,EAAQwyH,QAAS,CACjB,GAAIlqH,GAAWhS,EAAEgK,UAAWxI,MAAMgM,SAAU9D,EAAQwxL,iBACpD9sK,GAAQwT,QAAQl4B,EAAQwyH,QAAS,SAAUi/D,IACnCA,EAAI9zK,OAAU8zK,EAAIpvL,UAAaovL,EAAI9oL,QAAW8oL,EAAI3/K,QAAW2/K,EAAI1iD,UAAYv4I,IAAai7L,EAAI1iD,UAC9F0iD,EAAIpvL,SAAW,kBAAqBvK,MAAMuL,KAAKouL,EAAI9zK,MAAO,YAAc,QAAW7lB,MAAMuL,KAAKouL,EAAI9zK,MAAOrV,EAASL,WAAa,iBAM3I8mL,EAAU,wBAAyB,QAAS,SAAUY,GAClD,GAAIz7E,GAAOt0G,KAAKs0G,IAMhB,OALW,OAAPy7E,IACAz7E,EAAKx/E,OAAOw/E,EAAKv8G,QAAQ4C,SAAS,gBAAgBouB,GAAGgnK,IACrDz7E,EAAKtsG,QAAQ,UACbssG,EAAKtsG,QAAQ,UAAYmK,MAAOmiG,EAAKlpD,iBAElCkpD,EAAKlpD,gBAEhB+jI,EAAU,wBAAyB,UAAW,WAC1CnvL,KAAKohD,OACLphD,KAAKs0G,KAAKtsG,QAAQ,YAG1BqmL,EAAOC,UAAU,yBAA0B,WACvC,OACIwD,UAAU,EACVzsF,KAAM,SAAU/vE,EAAOv9B,EAAS+vL,GAC5BD,EAAavyJ,EAAOv9B,EAAS+vL,EAAO,yBAA0B,8BAGvEwG,UAAU,kBAAmB,WAC5B,OACIh5J,OAAO,EACP+vE,MACI0sF,IAAK,SAAUz8J,EAAOv9B,EAAS+vL,GAC3BA,EAAMuC,eAAiB/0J,EAAMk3I,YAC7Bsb,EAAMkK,UAAYnK,EAAavyJ,EAAOv9B,EAAS+vL,EAAO,kBAAmB,oBAE7EmK,KAAM,SAAU38J,EAAOv9B,EAAS+vL,GAC5BA,EAAMkK,UAAUvoB,UAChBqe,EAAMkK,UAAUtoB,iBAI7B4kB,UAAU,oBAAqB,WAC9B,OACIh5J,OAAO,EACP+vE,MACI0sF,IAAK,SAAUz8J,EAAOv9B,EAAS+vL,GAC3BA,EAAMuC,eAAiB/0J,EAAMk3I,YAC7Bsb,EAAMkK,UAAYnK,EAAavyJ,EAAOv9B,EAAS+vL,EAAO,oBAAqB,sBAE/EmK,KAAM,SAAU38J,EAAOv9B,EAAS+vL,GAC5BA,EAAMkK,UAAUvoB,UAChBqe,EAAMkK,UAAUtoB,iBAI7B4kB,UAAU,uBAAwB,WACjC,OACIh5J,OAAO,EACP+vE,MACI0sF,IAAK,SAAUz8J,EAAOv9B,EAAS+vL,GAC3BA,EAAMuC,eAAiB/0J,EAAMk3I,YAC7Bsb,EAAMkK,UAAYnK,EAAavyJ,EAAOv9B,EAAS+vL,EAAO,uBAAwB,yBAElFmK,KAAM,SAAU38J,EAAOv9B,EAAS+vL,GAC5BA,EAAMkK,UAAUvoB,UAChBqe,EAAMkK,UAAUtoB,iBAI7B4kB,UAAU,uBAAwB,WACjC,OACIwD,UAAU,EACVzsF,MACI0sF,IAAK,SAAUz8J,EAAOv9B,EAAS+vL,GAC3BA,EAAMuC,eAAiB/0J,EAAMk3I,YAC7Bsb,EAAMkK,UAAYnK,EAAavyJ,EAAOv9B,EAAS+vL,EAAO,uBAAwB,yBAElFmK,KAAM,SAAU38J,EAAOv9B,EAAS+vL,GAC5BA,EAAMkK,UAAUvoB,eAI7B6kB,UAAU,kBAAmB,WAC5B,OACIwD,UAAU,EACVzsF,MACI0sF,IAAK,SAAUz8J,EAAOv9B,EAAS+vL,GAC3BA,EAAMuC,eAAiB/0J,EAAMk3I,YAC7Bqb,EAAavyJ,EAAOv9B,EAAS+vL,EAAO,kBAAmB,wBAIpEwG,UAAU,oBAAqB,WAC9B,OACIjpF,MACI0sF,IAAK,SAAUz8J,EAAOv9B,EAAS+vL,GAC3BD,EAAavyJ,EAAOv9B,EAAS+vL,EAAO,oBAAqB,0BAItEwG,UAAU,yBAA0B,WACnC,OACIK,SAAU,IACVtpF,KAAM,SAAU/vE,EAAOv9B,EAAS+vL,GAC5B/vL,EAAQuvB,KAAK,eAAe5pB,KAAK,WAC7BhH,EAAEsJ,MAAMkD,KAAK,QAAUhL,MAAM+J,GAAK,SAAUvL,EAAEsJ,MAAMkD,KAAK,eAE7D2kL,EAAavyJ,EAAOv9B,EAAS+vL,EAAO,yBAA0B,8BAGvEwG,UAAU,qBAAsB,WAC/B,OACIwD,UAAU,EACVzsF,MACI0sF,IAAK,SAAUz8J,EAAOv9B,EAAS+vL,GAC3BA,EAAMuC,eAAiB/0J,EAAMk3I,YAC7Bqb,EAAavyJ,EAAOv9B,EAAS+vL,EAAO,qBAAsB,2BAIvEwG,UAAU,iBAAkB,WAC3B,OACIK,SAAU,IACVx3L,SAAS,EACTsL,SAAU,SAAU1K,GAChB,MAAO,cAAgBG,MAAM+J,GAAK,qBAAyBlK,EAAQ2K,OAAS,cAGrF4rL,UAAU,oBAAqB,WAC9B,OACIK,SAAU,IACVtpF,KAAM,SAAU/vE,EAAOv9B,GACnBA,EAAQuC,SAAS,aAAa4I,KAAK,YAAa,cAGzDorL,UAAU,oBAAqB,WAC9B,OACIK,SAAU,IACVtpF,KAAM,SAAU/vE,EAAOv9B,GACnBA,EAAQuC,SAAS,aAAa4I,KAAK,YAAa,cAGzDorL,UAAU,4BAA6B,WACtC,OACIK,SAAU,IACVx3L,SAAS,EACTsL,SAAU,SAAU1K,GAChB,MAAO,aAAeG,MAAM+J,GAAK,eAAmBlK,EAAQ2K,OAAS,aAIjFoiB,EAAQwT,SACJ,QACA,OACA,MACA,aACA,sBACD,SAAUp1B,GACT,GAAIgvL,GAAQ,IAAMhvL,EAAKsD,MAAM,EAAG,GAAGtJ,cAAgBgG,EAAKsD,MAAM,EAC9D6nL,GAAOC,UAAU4D,EAAO,WACpB,OACIvD,SAAU,IACVwD,SAAU,EACV9sF,KAAM,SAAU/vE,EAAOv9B,EAAS+vL,GAC5B/vL,EAAQmL,KAAKhL,MAAMgL,KAAKhL,MAAMyE,UAAUuG,IAAQoyB,EAAMuzJ,MAAMf,EAAMoK,WAK9EtE,GACAwE,SAAY,YACZxB,gBACI,iBACA,YAEJyB,kBACI,gBACA,YAEJC,MACI,iBACA,iBACA,eAEJn3D,UACI,eACA,WACA,eAEJ9hD,OACI,iBACA,gBAEJs2G,WACI,uBACA,mBACA,qBAEJD,WACI,sBACA,qBACA,gBACA,0BACA,2BAEJ9zC,UAAa,YACb6zC,UAAa,YACb7wH,WAAc,kBAEjB,WACG,GAAI2zH,KACJztK,GAAQwT,QAAQs1J,EAAyB,SAAUtsG,EAAWt+E,GAC1D8hB,EAAQwT,QAAQgpD,EAAW,SAAU7+E,GAC5B8vL,EAAmB9vL,KACpB8vL,EAAmB9vL,OAEvB8vL,EAAmB9vL,GAAUqF,KAAK,WAAa9E,OAGvD8hB,EAAQwT,QAAQi6J,EAAoB,SAAU5uL,EAAS2qL,GAAnB,GAC5BkE,GAAe,IAAMlE,EACrBmE,EAAWv6L,MAAMyE,UAAU61L,EAC/BnE,GAAOC,UAAUkE,EAAc,WAC3B,OACI7D,SAAU,IACVwB,QAASxsL,EACTmuL,UAAU,EACVtpL,QAAS,SAAU6nL,EAAUD,GACzB,GAA6B,KAAzBA,EAAOoC,GAAX,CAGAnC,EAASjrK,WAAWqtK,EACpB,IAAIhwL,GAAW4tL,EAAS,GAAGqC,SAC3B,OAAO,UAAUp9J,EAAOv9B,EAAS+vL,EAAOE,GAEpC,IADA,GAAIjd,IACIA,GAAcid,EAAYpwL,QAC9BmzK,EAAaid,EAAYl2K,OAExBi5J,IAGDA,EAAWtoK,SAAS+vL,EAAc/vL,GAClC1K,EAAQmwB,UAHR2iK,EAAKt6D,KAAKkiE,EAAW,4EAA8E9uL,EAAQzM,KAAK,oBAW9IP,OAAOuB,MAAM2sB,OAAQluB,OAAOmuB,SACvBnuB,OAAOuB,OACE,kBAAVzB,SAAwBA,OAAOgiC,IAAMhiC,OAAS,SAAUiiC,EAAIC,EAAIC,IACrEA,GAAMD,OAEV,SAAUniC,EAAGC,QACVA,OAAO,iBACH,aACA,eACA,cACA,aACA,WACA,mBACA,iBACA,aACA,qBACA,eACA,kBACA,mBACA,oBACA,wBACA,kBACA,iBACA,mBACA,eACA,cACA,cACA,qBACA,gBACA,gBACA,aACA,iBACA,kBACA,mBACA,qBACA,qBACA,iBACA,oBACA,oBACA,iBACA,gBACA,uBACA,sBACA,aACA,iBACA,iBACA,oBACA,wBACA,iBACA,mBACA,uBACA,eACA,iBACA,eACA,eACA,oBACA,uBACA,sBACA,wBACA,oBACA,oBACA,yBACA,sBACA,yBACA,oBACA,2BACA,2BACA,sBACA,2BACA,2BACA,wBACA,sBACA,0BACA,sBACA,wBACA,iBACDD;EACL,WACE,YACA,OAAOG,QAAOuB,OACE,kBAAVzB,SAAwBA,OAAOgiC,IAAMhiC,OAAS,SAAUiiC,EAAIC,EAAIC,IACrEA,GAAMD","file":"kendo.ui.core.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.core', ['jquery'], f);\n}(function () {\n var __meta__ = {\n id: 'core',\n name: 'Core',\n category: 'framework',\n description: 'The core of the Kendo framework.'\n };\n (function ($, window, undefined) {\n var kendo = window.kendo = window.kendo || { cultures: {} }, extend = $.extend, each = $.each, isArray = $.isArray, proxy = $.proxy, noop = $.noop, math = Math, Template, JSON = window.JSON || {}, support = {}, percentRegExp = /%/, formatRegExp = /\\{(\\d+)(:[^\\}]+)?\\}/g, boxShadowRegExp = /(\\d+(?:\\.?)\\d*)px\\s*(\\d+(?:\\.?)\\d*)px\\s*(\\d+(?:\\.?)\\d*)px\\s*(\\d+)?/i, numberRegExp = /^(\\+|-?)\\d+(\\.?)\\d*$/, FUNCTION = 'function', STRING = 'string', NUMBER = 'number', OBJECT = 'object', NULL = 'null', BOOLEAN = 'boolean', UNDEFINED = 'undefined', getterCache = {}, setterCache = {}, slice = [].slice;\n kendo.version = '2017.2.621'.replace(/^\\s+|\\s+$/g, '');\n function Class() {\n }\n Class.extend = function (proto) {\n var base = function () {\n }, member, that = this, subclass = proto && proto.init ? proto.init : function () {\n that.apply(this, arguments);\n }, fn;\n base.prototype = that.prototype;\n fn = subclass.fn = subclass.prototype = new base();\n for (member in proto) {\n if (proto[member] != null && proto[member].constructor === Object) {\n fn[member] = extend(true, {}, base.prototype[member], proto[member]);\n } else {\n fn[member] = proto[member];\n }\n }\n fn.constructor = subclass;\n subclass.extend = that.extend;\n return subclass;\n };\n Class.prototype._initOptions = function (options) {\n this.options = deepExtend({}, this.options, options);\n };\n var isFunction = kendo.isFunction = function (fn) {\n return typeof fn === 'function';\n };\n var preventDefault = function () {\n this._defaultPrevented = true;\n };\n var isDefaultPrevented = function () {\n return this._defaultPrevented === true;\n };\n var Observable = Class.extend({\n init: function () {\n this._events = {};\n },\n bind: function (eventName, handlers, one) {\n var that = this, idx, eventNames = typeof eventName === STRING ? [eventName] : eventName, length, original, handler, handlersIsFunction = typeof handlers === FUNCTION, events;\n if (handlers === undefined) {\n for (idx in eventName) {\n that.bind(idx, eventName[idx]);\n }\n return that;\n }\n for (idx = 0, length = eventNames.length; idx < length; idx++) {\n eventName = eventNames[idx];\n handler = handlersIsFunction ? handlers : handlers[eventName];\n if (handler) {\n if (one) {\n original = handler;\n handler = function () {\n that.unbind(eventName, handler);\n original.apply(that, arguments);\n };\n handler.original = original;\n }\n events = that._events[eventName] = that._events[eventName] || [];\n events.push(handler);\n }\n }\n return that;\n },\n one: function (eventNames, handlers) {\n return this.bind(eventNames, handlers, true);\n },\n first: function (eventName, handlers) {\n var that = this, idx, eventNames = typeof eventName === STRING ? [eventName] : eventName, length, handler, handlersIsFunction = typeof handlers === FUNCTION, events;\n for (idx = 0, length = eventNames.length; idx < length; idx++) {\n eventName = eventNames[idx];\n handler = handlersIsFunction ? handlers : handlers[eventName];\n if (handler) {\n events = that._events[eventName] = that._events[eventName] || [];\n events.unshift(handler);\n }\n }\n return that;\n },\n trigger: function (eventName, e) {\n var that = this, events = that._events[eventName], idx, length;\n if (events) {\n e = e || {};\n e.sender = that;\n e._defaultPrevented = false;\n e.preventDefault = preventDefault;\n e.isDefaultPrevented = isDefaultPrevented;\n events = events.slice();\n for (idx = 0, length = events.length; idx < length; idx++) {\n events[idx].call(that, e);\n }\n return e._defaultPrevented === true;\n }\n return false;\n },\n unbind: function (eventName, handler) {\n var that = this, events = that._events[eventName], idx;\n if (eventName === undefined) {\n that._events = {};\n } else if (events) {\n if (handler) {\n for (idx = events.length - 1; idx >= 0; idx--) {\n if (events[idx] === handler || events[idx].original === handler) {\n events.splice(idx, 1);\n }\n }\n } else {\n that._events[eventName] = [];\n }\n }\n return that;\n }\n });\n function compilePart(part, stringPart) {\n if (stringPart) {\n return '\\'' + part.split('\\'').join('\\\\\\'').split('\\\\\"').join('\\\\\\\\\\\\\"').replace(/\\n/g, '\\\\n').replace(/\\r/g, '\\\\r').replace(/\\t/g, '\\\\t') + '\\'';\n } else {\n var first = part.charAt(0), rest = part.substring(1);\n if (first === '=') {\n return '+(' + rest + ')+';\n } else if (first === ':') {\n return '+$kendoHtmlEncode(' + rest + ')+';\n } else {\n return ';' + part + ';$kendoOutput+=';\n }\n }\n }\n var argumentNameRegExp = /^\\w+/, encodeRegExp = /\\$\\{([^}]*)\\}/g, escapedCurlyRegExp = /\\\\\\}/g, curlyRegExp = /__CURLY__/g, escapedSharpRegExp = /\\\\#/g, sharpRegExp = /__SHARP__/g, zeros = [\n '',\n '0',\n '00',\n '000',\n '0000'\n ];\n Template = {\n paramName: 'data',\n useWithBlock: true,\n render: function (template, data) {\n var idx, length, html = '';\n for (idx = 0, length = data.length; idx < length; idx++) {\n html += template(data[idx]);\n }\n return html;\n },\n compile: function (template, options) {\n var settings = extend({}, this, options), paramName = settings.paramName, argumentName = paramName.match(argumentNameRegExp)[0], useWithBlock = settings.useWithBlock, functionBody = 'var $kendoOutput, $kendoHtmlEncode = kendo.htmlEncode;', fn, parts, idx;\n if (isFunction(template)) {\n return template;\n }\n functionBody += useWithBlock ? 'with(' + paramName + '){' : '';\n functionBody += '$kendoOutput=';\n parts = template.replace(escapedCurlyRegExp, '__CURLY__').replace(encodeRegExp, '#=$kendoHtmlEncode($1)#').replace(curlyRegExp, '}').replace(escapedSharpRegExp, '__SHARP__').split('#');\n for (idx = 0; idx < parts.length; idx++) {\n functionBody += compilePart(parts[idx], idx % 2 === 0);\n }\n functionBody += useWithBlock ? ';}' : ';';\n functionBody += 'return $kendoOutput;';\n functionBody = functionBody.replace(sharpRegExp, '#');\n try {\n fn = new Function(argumentName, functionBody);\n fn._slotCount = Math.floor(parts.length / 2);\n return fn;\n } catch (e) {\n throw new Error(kendo.format('Invalid template:\\'{0}\\' Generated code:\\'{1}\\'', template, functionBody));\n }\n }\n };\n function pad(number, digits, end) {\n number = number + '';\n digits = digits || 2;\n end = digits - number.length;\n if (end) {\n return zeros[digits].substring(0, end) + number;\n }\n return number;\n }\n (function () {\n var escapable = /[\\\\\\\"\\x00-\\x1f\\x7f-\\x9f\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g, gap, indent, meta = {\n '\\b': '\\\\b',\n '\\t': '\\\\t',\n '\\n': '\\\\n',\n '\\f': '\\\\f',\n '\\r': '\\\\r',\n '\"': '\\\\\"',\n '\\\\': '\\\\\\\\'\n }, rep, toString = {}.toString;\n if (typeof Date.prototype.toJSON !== FUNCTION) {\n Date.prototype.toJSON = function () {\n var that = this;\n return isFinite(that.valueOf()) ? pad(that.getUTCFullYear(), 4) + '-' + pad(that.getUTCMonth() + 1) + '-' + pad(that.getUTCDate()) + 'T' + pad(that.getUTCHours()) + ':' + pad(that.getUTCMinutes()) + ':' + pad(that.getUTCSeconds()) + 'Z' : null;\n };\n String.prototype.toJSON = Number.prototype.toJSON = Boolean.prototype.toJSON = function () {\n return this.valueOf();\n };\n }\n function quote(string) {\n escapable.lastIndex = 0;\n return escapable.test(string) ? '\"' + string.replace(escapable, function (a) {\n var c = meta[a];\n return typeof c === STRING ? c : '\\\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4);\n }) + '\"' : '\"' + string + '\"';\n }\n function str(key, holder) {\n var i, k, v, length, mind = gap, partial, value = holder[key], type;\n if (value && typeof value === OBJECT && typeof value.toJSON === FUNCTION) {\n value = value.toJSON(key);\n }\n if (typeof rep === FUNCTION) {\n value = rep.call(holder, key, value);\n }\n type = typeof value;\n if (type === STRING) {\n return quote(value);\n } else if (type === NUMBER) {\n return isFinite(value) ? String(value) : NULL;\n } else if (type === BOOLEAN || type === NULL) {\n return String(value);\n } else if (type === OBJECT) {\n if (!value) {\n return NULL;\n }\n gap += indent;\n partial = [];\n if (toString.apply(value) === '[object Array]') {\n length = value.length;\n for (i = 0; i < length; i++) {\n partial[i] = str(i, value) || NULL;\n }\n v = partial.length === 0 ? '[]' : gap ? '[\\n' + gap + partial.join(',\\n' + gap) + '\\n' + mind + ']' : '[' + partial.join(',') + ']';\n gap = mind;\n return v;\n }\n if (rep && typeof rep === OBJECT) {\n length = rep.length;\n for (i = 0; i < length; i++) {\n if (typeof rep[i] === STRING) {\n k = rep[i];\n v = str(k, value);\n if (v) {\n partial.push(quote(k) + (gap ? ': ' : ':') + v);\n }\n }\n }\n } else {\n for (k in value) {\n if (Object.hasOwnProperty.call(value, k)) {\n v = str(k, value);\n if (v) {\n partial.push(quote(k) + (gap ? ': ' : ':') + v);\n }\n }\n }\n }\n v = partial.length === 0 ? '{}' : gap ? '{\\n' + gap + partial.join(',\\n' + gap) + '\\n' + mind + '}' : '{' + partial.join(',') + '}';\n gap = mind;\n return v;\n }\n }\n if (typeof JSON.stringify !== FUNCTION) {\n JSON.stringify = function (value, replacer, space) {\n var i;\n gap = '';\n indent = '';\n if (typeof space === NUMBER) {\n for (i = 0; i < space; i += 1) {\n indent += ' ';\n }\n } else if (typeof space === STRING) {\n indent = space;\n }\n rep = replacer;\n if (replacer && typeof replacer !== FUNCTION && (typeof replacer !== OBJECT || typeof replacer.length !== NUMBER)) {\n throw new Error('JSON.stringify');\n }\n return str('', { '': value });\n };\n }\n }());\n (function () {\n var dateFormatRegExp = /dddd|ddd|dd|d|MMMM|MMM|MM|M|yyyy|yy|HH|H|hh|h|mm|m|fff|ff|f|tt|ss|s|zzz|zz|z|\"[^\"]*\"|'[^']*'/g, standardFormatRegExp = /^(n|c|p|e)(\\d*)$/i, literalRegExp = /(\\\\.)|(['][^']*[']?)|([\"][^\"]*[\"]?)/g, commaRegExp = /\\,/g, EMPTY = '', POINT = '.', COMMA = ',', SHARP = '#', ZERO = '0', PLACEHOLDER = '??', EN = 'en-US', objectToString = {}.toString;\n kendo.cultures['en-US'] = {\n name: EN,\n numberFormat: {\n pattern: ['-n'],\n decimals: 2,\n ',': ',',\n '.': '.',\n groupSize: [3],\n percent: {\n pattern: [\n '-n %',\n 'n %'\n ],\n decimals: 2,\n ',': ',',\n '.': '.',\n groupSize: [3],\n symbol: '%'\n },\n currency: {\n name: 'US Dollar',\n abbr: 'USD',\n pattern: [\n '($n)',\n '$n'\n ],\n decimals: 2,\n ',': ',',\n '.': '.',\n groupSize: [3],\n symbol: '$'\n }\n },\n calendars: {\n standard: {\n days: {\n names: [\n 'Sunday',\n 'Monday',\n 'Tuesday',\n 'Wednesday',\n 'Thursday',\n 'Friday',\n 'Saturday'\n ],\n namesAbbr: [\n 'Sun',\n 'Mon',\n 'Tue',\n 'Wed',\n 'Thu',\n 'Fri',\n 'Sat'\n ],\n namesShort: [\n 'Su',\n 'Mo',\n 'Tu',\n 'We',\n 'Th',\n 'Fr',\n 'Sa'\n ]\n },\n months: {\n names: [\n 'January',\n 'February',\n 'March',\n 'April',\n 'May',\n 'June',\n 'July',\n 'August',\n 'September',\n 'October',\n 'November',\n 'December'\n ],\n namesAbbr: [\n 'Jan',\n 'Feb',\n 'Mar',\n 'Apr',\n 'May',\n 'Jun',\n 'Jul',\n 'Aug',\n 'Sep',\n 'Oct',\n 'Nov',\n 'Dec'\n ]\n },\n AM: [\n 'AM',\n 'am',\n 'AM'\n ],\n PM: [\n 'PM',\n 'pm',\n 'PM'\n ],\n patterns: {\n d: 'M/d/yyyy',\n D: 'dddd, MMMM dd, yyyy',\n F: 'dddd, MMMM dd, yyyy h:mm:ss tt',\n g: 'M/d/yyyy h:mm tt',\n G: 'M/d/yyyy h:mm:ss tt',\n m: 'MMMM dd',\n M: 'MMMM dd',\n s: 'yyyy\\'-\\'MM\\'-\\'ddTHH\\':\\'mm\\':\\'ss',\n t: 'h:mm tt',\n T: 'h:mm:ss tt',\n u: 'yyyy\\'-\\'MM\\'-\\'dd HH\\':\\'mm\\':\\'ss\\'Z\\'',\n y: 'MMMM, yyyy',\n Y: 'MMMM, yyyy'\n },\n '/': '/',\n ':': ':',\n firstDay: 0,\n twoDigitYearMax: 2029\n }\n }\n };\n function findCulture(culture) {\n if (culture) {\n if (culture.numberFormat) {\n return culture;\n }\n if (typeof culture === STRING) {\n var cultures = kendo.cultures;\n return cultures[culture] || cultures[culture.split('-')[0]] || null;\n }\n return null;\n }\n return null;\n }\n function getCulture(culture) {\n if (culture) {\n culture = findCulture(culture);\n }\n return culture || kendo.cultures.current;\n }\n kendo.culture = function (cultureName) {\n var cultures = kendo.cultures, culture;\n if (cultureName !== undefined) {\n culture = findCulture(cultureName) || cultures[EN];\n culture.calendar = culture.calendars.standard;\n cultures.current = culture;\n } else {\n return cultures.current;\n }\n };\n kendo.findCulture = findCulture;\n kendo.getCulture = getCulture;\n kendo.culture(EN);\n function formatDate(date, format, culture) {\n culture = getCulture(culture);\n var calendar = culture.calendars.standard, days = calendar.days, months = calendar.months;\n format = calendar.patterns[format] || format;\n return format.replace(dateFormatRegExp, function (match) {\n var minutes;\n var result;\n var sign;\n if (match === 'd') {\n result = date.getDate();\n } else if (match === 'dd') {\n result = pad(date.getDate());\n } else if (match === 'ddd') {\n result = days.namesAbbr[date.getDay()];\n } else if (match === 'dddd') {\n result = days.names[date.getDay()];\n } else if (match === 'M') {\n result = date.getMonth() + 1;\n } else if (match === 'MM') {\n result = pad(date.getMonth() + 1);\n } else if (match === 'MMM') {\n result = months.namesAbbr[date.getMonth()];\n } else if (match === 'MMMM') {\n result = months.names[date.getMonth()];\n } else if (match === 'yy') {\n result = pad(date.getFullYear() % 100);\n } else if (match === 'yyyy') {\n result = pad(date.getFullYear(), 4);\n } else if (match === 'h') {\n result = date.getHours() % 12 || 12;\n } else if (match === 'hh') {\n result = pad(date.getHours() % 12 || 12);\n } else if (match === 'H') {\n result = date.getHours();\n } else if (match === 'HH') {\n result = pad(date.getHours());\n } else if (match === 'm') {\n result = date.getMinutes();\n } else if (match === 'mm') {\n result = pad(date.getMinutes());\n } else if (match === 's') {\n result = date.getSeconds();\n } else if (match === 'ss') {\n result = pad(date.getSeconds());\n } else if (match === 'f') {\n result = math.floor(date.getMilliseconds() / 100);\n } else if (match === 'ff') {\n result = date.getMilliseconds();\n if (result > 99) {\n result = math.floor(result / 10);\n }\n result = pad(result);\n } else if (match === 'fff') {\n result = pad(date.getMilliseconds(), 3);\n } else if (match === 'tt') {\n result = date.getHours() < 12 ? calendar.AM[0] : calendar.PM[0];\n } else if (match === 'zzz') {\n minutes = date.getTimezoneOffset();\n sign = minutes < 0;\n result = math.abs(minutes / 60).toString().split('.')[0];\n minutes = math.abs(minutes) - result * 60;\n result = (sign ? '+' : '-') + pad(result);\n result += ':' + pad(minutes);\n } else if (match === 'zz' || match === 'z') {\n result = date.getTimezoneOffset() / 60;\n sign = result < 0;\n result = math.abs(result).toString().split('.')[0];\n result = (sign ? '+' : '-') + (match === 'zz' ? pad(result) : result);\n }\n return result !== undefined ? result : match.slice(1, match.length - 1);\n });\n }\n function formatNumber(number, format, culture) {\n culture = getCulture(culture);\n var numberFormat = culture.numberFormat, decimal = numberFormat[POINT], precision = numberFormat.decimals, pattern = numberFormat.pattern[0], literals = [], symbol, isCurrency, isPercent, customPrecision, formatAndPrecision, negative = number < 0, integer, fraction, integerLength, fractionLength, replacement = EMPTY, value = EMPTY, idx, length, ch, hasGroup, hasNegativeFormat, decimalIndex, sharpIndex, zeroIndex, hasZero, hasSharp, percentIndex, currencyIndex, startZeroIndex, start = -1, end;\n if (number === undefined) {\n return EMPTY;\n }\n if (!isFinite(number)) {\n return number;\n }\n if (!format) {\n return culture.name.length ? number.toLocaleString() : number.toString();\n }\n formatAndPrecision = standardFormatRegExp.exec(format);\n if (formatAndPrecision) {\n format = formatAndPrecision[1].toLowerCase();\n isCurrency = format === 'c';\n isPercent = format === 'p';\n if (isCurrency || isPercent) {\n numberFormat = isCurrency ? numberFormat.currency : numberFormat.percent;\n decimal = numberFormat[POINT];\n precision = numberFormat.decimals;\n symbol = numberFormat.symbol;\n pattern = numberFormat.pattern[negative ? 0 : 1];\n }\n customPrecision = formatAndPrecision[2];\n if (customPrecision) {\n precision = +customPrecision;\n }\n if (format === 'e') {\n return customPrecision ? number.toExponential(precision) : number.toExponential();\n }\n if (isPercent) {\n number *= 100;\n }\n number = round(number, precision);\n negative = number < 0;\n number = number.split(POINT);\n integer = number[0];\n fraction = number[1];\n if (negative) {\n integer = integer.substring(1);\n }\n value = groupInteger(integer, 0, integer.length, numberFormat);\n if (fraction) {\n value += decimal + fraction;\n }\n if (format === 'n' && !negative) {\n return value;\n }\n number = EMPTY;\n for (idx = 0, length = pattern.length; idx < length; idx++) {\n ch = pattern.charAt(idx);\n if (ch === 'n') {\n number += value;\n } else if (ch === '$' || ch === '%') {\n number += symbol;\n } else {\n number += ch;\n }\n }\n return number;\n }\n if (negative) {\n number = -number;\n }\n if (format.indexOf('\\'') > -1 || format.indexOf('\"') > -1 || format.indexOf('\\\\') > -1) {\n format = format.replace(literalRegExp, function (match) {\n var quoteChar = match.charAt(0).replace('\\\\', ''), literal = match.slice(1).replace(quoteChar, '');\n literals.push(literal);\n return PLACEHOLDER;\n });\n }\n format = format.split(';');\n if (negative && format[1]) {\n format = format[1];\n hasNegativeFormat = true;\n } else if (number === 0) {\n format = format[2] || format[0];\n if (format.indexOf(SHARP) == -1 && format.indexOf(ZERO) == -1) {\n return format;\n }\n } else {\n format = format[0];\n }\n percentIndex = format.indexOf('%');\n currencyIndex = format.indexOf('$');\n isPercent = percentIndex != -1;\n isCurrency = currencyIndex != -1;\n if (isPercent) {\n number *= 100;\n }\n if (isCurrency && format[currencyIndex - 1] === '\\\\') {\n format = format.split('\\\\').join('');\n isCurrency = false;\n }\n if (isCurrency || isPercent) {\n numberFormat = isCurrency ? numberFormat.currency : numberFormat.percent;\n decimal = numberFormat[POINT];\n precision = numberFormat.decimals;\n symbol = numberFormat.symbol;\n }\n hasGroup = format.indexOf(COMMA) > -1;\n if (hasGroup) {\n format = format.replace(commaRegExp, EMPTY);\n }\n decimalIndex = format.indexOf(POINT);\n length = format.length;\n if (decimalIndex != -1) {\n fraction = number.toString().split('e');\n if (fraction[1]) {\n fraction = round(number, Math.abs(fraction[1]));\n } else {\n fraction = fraction[0];\n }\n fraction = fraction.split(POINT)[1] || EMPTY;\n zeroIndex = format.lastIndexOf(ZERO) - decimalIndex;\n sharpIndex = format.lastIndexOf(SHARP) - decimalIndex;\n hasZero = zeroIndex > -1;\n hasSharp = sharpIndex > -1;\n idx = fraction.length;\n if (!hasZero && !hasSharp) {\n format = format.substring(0, decimalIndex) + format.substring(decimalIndex + 1);\n length = format.length;\n decimalIndex = -1;\n idx = 0;\n }\n if (hasZero && zeroIndex > sharpIndex) {\n idx = zeroIndex;\n } else if (sharpIndex > zeroIndex) {\n if (hasSharp && idx > sharpIndex) {\n idx = sharpIndex;\n } else if (hasZero && idx < zeroIndex) {\n idx = zeroIndex;\n }\n }\n if (idx > -1) {\n number = round(number, idx);\n }\n } else {\n number = round(number);\n }\n sharpIndex = format.indexOf(SHARP);\n startZeroIndex = zeroIndex = format.indexOf(ZERO);\n if (sharpIndex == -1 && zeroIndex != -1) {\n start = zeroIndex;\n } else if (sharpIndex != -1 && zeroIndex == -1) {\n start = sharpIndex;\n } else {\n start = sharpIndex > zeroIndex ? zeroIndex : sharpIndex;\n }\n sharpIndex = format.lastIndexOf(SHARP);\n zeroIndex = format.lastIndexOf(ZERO);\n if (sharpIndex == -1 && zeroIndex != -1) {\n end = zeroIndex;\n } else if (sharpIndex != -1 && zeroIndex == -1) {\n end = sharpIndex;\n } else {\n end = sharpIndex > zeroIndex ? sharpIndex : zeroIndex;\n }\n if (start == length) {\n end = start;\n }\n if (start != -1) {\n value = number.toString().split(POINT);\n integer = value[0];\n fraction = value[1] || EMPTY;\n integerLength = integer.length;\n fractionLength = fraction.length;\n if (negative && number * -1 >= 0) {\n negative = false;\n }\n number = format.substring(0, start);\n if (negative && !hasNegativeFormat) {\n number += '-';\n }\n for (idx = start; idx < length; idx++) {\n ch = format.charAt(idx);\n if (decimalIndex == -1) {\n if (end - idx < integerLength) {\n number += integer;\n break;\n }\n } else {\n if (zeroIndex != -1 && zeroIndex < idx) {\n replacement = EMPTY;\n }\n if (decimalIndex - idx <= integerLength && decimalIndex - idx > -1) {\n number += integer;\n idx = decimalIndex;\n }\n if (decimalIndex === idx) {\n number += (fraction ? decimal : EMPTY) + fraction;\n idx += end - decimalIndex + 1;\n continue;\n }\n }\n if (ch === ZERO) {\n number += ch;\n replacement = ch;\n } else if (ch === SHARP) {\n number += replacement;\n }\n }\n if (hasGroup) {\n number = groupInteger(number, start + (negative && !hasNegativeFormat ? 1 : 0), Math.max(end, integerLength + start), numberFormat);\n }\n if (end >= start) {\n number += format.substring(end + 1);\n }\n if (isCurrency || isPercent) {\n value = EMPTY;\n for (idx = 0, length = number.length; idx < length; idx++) {\n ch = number.charAt(idx);\n value += ch === '$' || ch === '%' ? symbol : ch;\n }\n number = value;\n }\n length = literals.length;\n if (length) {\n for (idx = 0; idx < length; idx++) {\n number = number.replace(PLACEHOLDER, literals[idx]);\n }\n }\n }\n return number;\n }\n var groupInteger = function (number, start, end, numberFormat) {\n var decimalIndex = number.indexOf(numberFormat[POINT]);\n var groupSizes = numberFormat.groupSize.slice();\n var groupSize = groupSizes.shift();\n var integer, integerLength;\n var idx, parts, value;\n var newGroupSize;\n end = decimalIndex !== -1 ? decimalIndex : end + 1;\n integer = number.substring(start, end);\n integerLength = integer.length;\n if (integerLength >= groupSize) {\n idx = integerLength;\n parts = [];\n while (idx > -1) {\n value = integer.substring(idx - groupSize, idx);\n if (value) {\n parts.push(value);\n }\n idx -= groupSize;\n newGroupSize = groupSizes.shift();\n groupSize = newGroupSize !== undefined ? newGroupSize : groupSize;\n if (groupSize === 0) {\n parts.push(integer.substring(0, idx));\n break;\n }\n }\n integer = parts.reverse().join(numberFormat[COMMA]);\n number = number.substring(0, start) + integer + number.substring(end);\n }\n return number;\n };\n var round = function (value, precision) {\n precision = precision || 0;\n value = value.toString().split('e');\n value = Math.round(+(value[0] + 'e' + (value[1] ? +value[1] + precision : precision)));\n value = value.toString().split('e');\n value = +(value[0] + 'e' + (value[1] ? +value[1] - precision : -precision));\n return value.toFixed(Math.min(precision, 20));\n };\n var toString = function (value, fmt, culture) {\n if (fmt) {\n if (objectToString.call(value) === '[object Date]') {\n return formatDate(value, fmt, culture);\n } else if (typeof value === NUMBER) {\n return formatNumber(value, fmt, culture);\n }\n }\n return value !== undefined ? value : '';\n };\n kendo.format = function (fmt) {\n var values = arguments;\n return fmt.replace(formatRegExp, function (match, index, placeholderFormat) {\n var value = values[parseInt(index, 10) + 1];\n return toString(value, placeholderFormat ? placeholderFormat.substring(1) : '');\n });\n };\n kendo._extractFormat = function (format) {\n if (format.slice(0, 3) === '{0:') {\n format = format.slice(3, format.length - 1);\n }\n return format;\n };\n kendo._activeElement = function () {\n try {\n return document.activeElement;\n } catch (e) {\n return document.documentElement.activeElement;\n }\n };\n kendo._round = round;\n kendo._outerWidth = function (element, includeMargin) {\n return $(element).outerWidth(includeMargin || false) || 0;\n };\n kendo._outerHeight = function (element, includeMargin) {\n return $(element).outerHeight(includeMargin || false) || 0;\n };\n kendo.toString = toString;\n }());\n (function () {\n var nonBreakingSpaceRegExp = /\\u00A0/g, exponentRegExp = /[eE][\\-+]?[0-9]+/, shortTimeZoneRegExp = /[+|\\-]\\d{1,2}/, longTimeZoneRegExp = /[+|\\-]\\d{1,2}:?\\d{2}/, dateRegExp = /^\\/Date\\((.*?)\\)\\/$/, offsetRegExp = /[+-]\\d*/, FORMATS_SEQUENCE = [\n [],\n [\n 'G',\n 'g',\n 'F'\n ],\n [\n 'D',\n 'd',\n 'y',\n 'm',\n 'T',\n 't'\n ]\n ], STANDARD_FORMATS = [\n [\n 'yyyy-MM-ddTHH:mm:ss.fffffffzzz',\n 'yyyy-MM-ddTHH:mm:ss.fffffff',\n 'yyyy-MM-ddTHH:mm:ss.fffzzz',\n 'yyyy-MM-ddTHH:mm:ss.fff',\n 'ddd MMM dd yyyy HH:mm:ss',\n 'yyyy-MM-ddTHH:mm:sszzz',\n 'yyyy-MM-ddTHH:mmzzz',\n 'yyyy-MM-ddTHH:mmzz',\n 'yyyy-MM-ddTHH:mm:ss',\n 'yyyy-MM-dd HH:mm:ss',\n 'yyyy/MM/dd HH:mm:ss'\n ],\n [\n 'yyyy-MM-ddTHH:mm',\n 'yyyy-MM-dd HH:mm',\n 'yyyy/MM/dd HH:mm'\n ],\n [\n 'yyyy/MM/dd',\n 'yyyy-MM-dd',\n 'HH:mm:ss',\n 'HH:mm'\n ]\n ], numberRegExp = {\n 2: /^\\d{1,2}/,\n 3: /^\\d{1,3}/,\n 4: /^\\d{4}/\n }, objectToString = {}.toString;\n function outOfRange(value, start, end) {\n return !(value >= start && value <= end);\n }\n function designatorPredicate(designator) {\n return designator.charAt(0);\n }\n function mapDesignators(designators) {\n return $.map(designators, designatorPredicate);\n }\n function adjustDST(date, hours) {\n if (!hours && date.getHours() === 23) {\n date.setHours(date.getHours() + 2);\n }\n }\n function lowerArray(data) {\n var idx = 0, length = data.length, array = [];\n for (; idx < length; idx++) {\n array[idx] = (data[idx] + '').toLowerCase();\n }\n return array;\n }\n function lowerLocalInfo(localInfo) {\n var newLocalInfo = {}, property;\n for (property in localInfo) {\n newLocalInfo[property] = lowerArray(localInfo[property]);\n }\n return newLocalInfo;\n }\n function parseExact(value, format, culture) {\n if (!value) {\n return null;\n }\n var lookAhead = function (match) {\n var i = 0;\n while (format[idx] === match) {\n i++;\n idx++;\n }\n if (i > 0) {\n idx -= 1;\n }\n return i;\n }, getNumber = function (size) {\n var rg = numberRegExp[size] || new RegExp('^\\\\d{1,' + size + '}'), match = value.substr(valueIdx, size).match(rg);\n if (match) {\n match = match[0];\n valueIdx += match.length;\n return parseInt(match, 10);\n }\n return null;\n }, getIndexByName = function (names, lower) {\n var i = 0, length = names.length, name, nameLength, matchLength = 0, matchIdx = 0, subValue;\n for (; i < length; i++) {\n name = names[i];\n nameLength = name.length;\n subValue = value.substr(valueIdx, nameLength);\n if (lower) {\n subValue = subValue.toLowerCase();\n }\n if (subValue == name && nameLength > matchLength) {\n matchLength = nameLength;\n matchIdx = i;\n }\n }\n if (matchLength) {\n valueIdx += matchLength;\n return matchIdx + 1;\n }\n return null;\n }, checkLiteral = function () {\n var result = false;\n if (value.charAt(valueIdx) === format[idx]) {\n valueIdx++;\n result = true;\n }\n return result;\n }, calendar = culture.calendars.standard, year = null, month = null, day = null, hours = null, minutes = null, seconds = null, milliseconds = null, idx = 0, valueIdx = 0, literal = false, date = new Date(), twoDigitYearMax = calendar.twoDigitYearMax || 2029, defaultYear = date.getFullYear(), ch, count, length, pattern, pmHour, UTC, matches, amDesignators, pmDesignators, hoursOffset, minutesOffset, hasTime, match;\n if (!format) {\n format = 'd';\n }\n pattern = calendar.patterns[format];\n if (pattern) {\n format = pattern;\n }\n format = format.split('');\n length = format.length;\n for (; idx < length; idx++) {\n ch = format[idx];\n if (literal) {\n if (ch === '\\'') {\n literal = false;\n } else {\n checkLiteral();\n }\n } else {\n if (ch === 'd') {\n count = lookAhead('d');\n if (!calendar._lowerDays) {\n calendar._lowerDays = lowerLocalInfo(calendar.days);\n }\n if (day !== null && count > 2) {\n continue;\n }\n day = count < 3 ? getNumber(2) : getIndexByName(calendar._lowerDays[count == 3 ? 'namesAbbr' : 'names'], true);\n if (day === null || outOfRange(day, 1, 31)) {\n return null;\n }\n } else if (ch === 'M') {\n count = lookAhead('M');\n if (!calendar._lowerMonths) {\n calendar._lowerMonths = lowerLocalInfo(calendar.months);\n }\n month = count < 3 ? getNumber(2) : getIndexByName(calendar._lowerMonths[count == 3 ? 'namesAbbr' : 'names'], true);\n if (month === null || outOfRange(month, 1, 12)) {\n return null;\n }\n month -= 1;\n } else if (ch === 'y') {\n count = lookAhead('y');\n year = getNumber(count);\n if (year === null) {\n return null;\n }\n if (count == 2) {\n if (typeof twoDigitYearMax === 'string') {\n twoDigitYearMax = defaultYear + parseInt(twoDigitYearMax, 10);\n }\n year = defaultYear - defaultYear % 100 + year;\n if (year > twoDigitYearMax) {\n year -= 100;\n }\n }\n } else if (ch === 'h') {\n lookAhead('h');\n hours = getNumber(2);\n if (hours == 12) {\n hours = 0;\n }\n if (hours === null || outOfRange(hours, 0, 11)) {\n return null;\n }\n } else if (ch === 'H') {\n lookAhead('H');\n hours = getNumber(2);\n if (hours === null || outOfRange(hours, 0, 23)) {\n return null;\n }\n } else if (ch === 'm') {\n lookAhead('m');\n minutes = getNumber(2);\n if (minutes === null || outOfRange(minutes, 0, 59)) {\n return null;\n }\n } else if (ch === 's') {\n lookAhead('s');\n seconds = getNumber(2);\n if (seconds === null || outOfRange(seconds, 0, 59)) {\n return null;\n }\n } else if (ch === 'f') {\n count = lookAhead('f');\n match = value.substr(valueIdx, count).match(numberRegExp[3]);\n milliseconds = getNumber(count);\n if (milliseconds !== null) {\n milliseconds = parseFloat('0.' + match[0], 10);\n milliseconds = kendo._round(milliseconds, 3);\n milliseconds *= 1000;\n }\n if (milliseconds === null || outOfRange(milliseconds, 0, 999)) {\n return null;\n }\n } else if (ch === 't') {\n count = lookAhead('t');\n amDesignators = calendar.AM;\n pmDesignators = calendar.PM;\n if (count === 1) {\n amDesignators = mapDesignators(amDesignators);\n pmDesignators = mapDesignators(pmDesignators);\n }\n pmHour = getIndexByName(pmDesignators);\n if (!pmHour && !getIndexByName(amDesignators)) {\n return null;\n }\n } else if (ch === 'z') {\n UTC = true;\n count = lookAhead('z');\n if (value.substr(valueIdx, 1) === 'Z') {\n checkLiteral();\n continue;\n }\n matches = value.substr(valueIdx, 6).match(count > 2 ? longTimeZoneRegExp : shortTimeZoneRegExp);\n if (!matches) {\n return null;\n }\n matches = matches[0].split(':');\n hoursOffset = matches[0];\n minutesOffset = matches[1];\n if (!minutesOffset && hoursOffset.length > 3) {\n valueIdx = hoursOffset.length - 2;\n minutesOffset = hoursOffset.substring(valueIdx);\n hoursOffset = hoursOffset.substring(0, valueIdx);\n }\n hoursOffset = parseInt(hoursOffset, 10);\n if (outOfRange(hoursOffset, -12, 13)) {\n return null;\n }\n if (count > 2) {\n minutesOffset = parseInt(minutesOffset, 10);\n if (isNaN(minutesOffset) || outOfRange(minutesOffset, 0, 59)) {\n return null;\n }\n }\n } else if (ch === '\\'') {\n literal = true;\n checkLiteral();\n } else if (!checkLiteral()) {\n return null;\n }\n }\n }\n hasTime = hours !== null || minutes !== null || seconds || null;\n if (year === null && month === null && day === null && hasTime) {\n year = defaultYear;\n month = date.getMonth();\n day = date.getDate();\n } else {\n if (year === null) {\n year = defaultYear;\n }\n if (day === null) {\n day = 1;\n }\n }\n if (pmHour && hours < 12) {\n hours += 12;\n }\n if (UTC) {\n if (hoursOffset) {\n hours += -hoursOffset;\n }\n if (minutesOffset) {\n minutes += -minutesOffset;\n }\n value = new Date(Date.UTC(year, month, day, hours, minutes, seconds, milliseconds));\n } else {\n value = new Date(year, month, day, hours, minutes, seconds, milliseconds);\n adjustDST(value, hours);\n }\n if (year < 100) {\n value.setFullYear(year);\n }\n if (value.getDate() !== day && UTC === undefined) {\n return null;\n }\n return value;\n }\n function parseMicrosoftFormatOffset(offset) {\n var sign = offset.substr(0, 1) === '-' ? -1 : 1;\n offset = offset.substring(1);\n offset = parseInt(offset.substr(0, 2), 10) * 60 + parseInt(offset.substring(2), 10);\n return sign * offset;\n }\n function getDefaultFormats(culture) {\n var length = math.max(FORMATS_SEQUENCE.length, STANDARD_FORMATS.length);\n var patterns = culture.calendar.patterns;\n var cultureFormats, formatIdx, idx;\n var formats = [];\n for (idx = 0; idx < length; idx++) {\n cultureFormats = FORMATS_SEQUENCE[idx];\n for (formatIdx = 0; formatIdx < cultureFormats.length; formatIdx++) {\n formats.push(patterns[cultureFormats[formatIdx]]);\n }\n formats = formats.concat(STANDARD_FORMATS[idx]);\n }\n return formats;\n }\n kendo.parseDate = function (value, formats, culture) {\n if (objectToString.call(value) === '[object Date]') {\n return value;\n }\n var idx = 0;\n var date = null;\n var length;\n var tzoffset;\n if (value && value.indexOf('/D') === 0) {\n date = dateRegExp.exec(value);\n if (date) {\n date = date[1];\n tzoffset = offsetRegExp.exec(date.substring(1));\n date = new Date(parseInt(date, 10));\n if (tzoffset) {\n tzoffset = parseMicrosoftFormatOffset(tzoffset[0]);\n date = kendo.timezone.apply(date, 0);\n date = kendo.timezone.convert(date, 0, -1 * tzoffset);\n }\n return date;\n }\n }\n culture = kendo.getCulture(culture);\n if (!formats) {\n formats = getDefaultFormats(culture);\n }\n formats = isArray(formats) ? formats : [formats];\n length = formats.length;\n for (; idx < length; idx++) {\n date = parseExact(value, formats[idx], culture);\n if (date) {\n return date;\n }\n }\n return date;\n };\n kendo.parseInt = function (value, culture) {\n var result = kendo.parseFloat(value, culture);\n if (result) {\n result = result | 0;\n }\n return result;\n };\n kendo.parseFloat = function (value, culture, format) {\n if (!value && value !== 0) {\n return null;\n }\n if (typeof value === NUMBER) {\n return value;\n }\n value = value.toString();\n culture = kendo.getCulture(culture);\n var number = culture.numberFormat, percent = number.percent, currency = number.currency, symbol = currency.symbol, percentSymbol = percent.symbol, negative = value.indexOf('-'), parts, isPercent;\n if (exponentRegExp.test(value)) {\n value = parseFloat(value.replace(number['.'], '.'));\n if (isNaN(value)) {\n value = null;\n }\n return value;\n }\n if (negative > 0) {\n return null;\n } else {\n negative = negative > -1;\n }\n if (value.indexOf(symbol) > -1 || format && format.toLowerCase().indexOf('c') > -1) {\n number = currency;\n parts = number.pattern[0].replace('$', symbol).split('n');\n if (value.indexOf(parts[0]) > -1 && value.indexOf(parts[1]) > -1) {\n value = value.replace(parts[0], '').replace(parts[1], '');\n negative = true;\n }\n } else if (value.indexOf(percentSymbol) > -1) {\n isPercent = true;\n number = percent;\n symbol = percentSymbol;\n }\n value = value.replace('-', '').replace(symbol, '').replace(nonBreakingSpaceRegExp, ' ').split(number[','].replace(nonBreakingSpaceRegExp, ' ')).join('').replace(number['.'], '.');\n value = parseFloat(value);\n if (isNaN(value)) {\n value = null;\n } else if (negative) {\n value *= -1;\n }\n if (value && isPercent) {\n value /= 100;\n }\n return value;\n };\n }());\n function getShadows(element) {\n var shadow = element.css(kendo.support.transitions.css + 'box-shadow') || element.css('box-shadow'), radius = shadow ? shadow.match(boxShadowRegExp) || [\n 0,\n 0,\n 0,\n 0,\n 0\n ] : [\n 0,\n 0,\n 0,\n 0,\n 0\n ], blur = math.max(+radius[3], +(radius[4] || 0));\n return {\n left: -radius[1] + blur,\n right: +radius[1] + blur,\n bottom: +radius[2] + blur\n };\n }\n function wrap(element, autosize) {\n var browser = support.browser, percentage, outerWidth = kendo._outerWidth, outerHeight = kendo._outerHeight;\n if (!element.parent().hasClass('k-animation-container')) {\n var width = element[0].style.width, height = element[0].style.height, percentWidth = percentRegExp.test(width), percentHeight = percentRegExp.test(height);\n percentage = percentWidth || percentHeight;\n if (!percentWidth && (!autosize || autosize && width)) {\n width = autosize ? outerWidth(element) + 1 : outerWidth(element);\n }\n if (!percentHeight && (!autosize || autosize && height)) {\n height = outerHeight(element);\n }\n element.wrap($('
').addClass('k-animation-container').css({\n width: width,\n height: height\n }));\n if (percentage) {\n element.css({\n width: '100%',\n height: '100%',\n boxSizing: 'border-box',\n mozBoxSizing: 'border-box',\n webkitBoxSizing: 'border-box'\n });\n }\n } else {\n var wrapper = element.parent('.k-animation-container'), wrapperStyle = wrapper[0].style;\n if (wrapper.is(':hidden')) {\n wrapper.show();\n }\n percentage = percentRegExp.test(wrapperStyle.width) || percentRegExp.test(wrapperStyle.height);\n if (!percentage) {\n wrapper.css({\n width: autosize ? outerWidth(element) + 1 : outerWidth(element),\n height: outerHeight(element),\n boxSizing: 'content-box',\n mozBoxSizing: 'content-box',\n webkitBoxSizing: 'content-box'\n });\n }\n }\n if (browser.msie && math.floor(browser.version) <= 7) {\n element.css({ zoom: 1 });\n element.children('.k-menu').width(element.width());\n }\n return element.parent();\n }\n function deepExtend(destination) {\n var i = 1, length = arguments.length;\n for (i = 1; i < length; i++) {\n deepExtendOne(destination, arguments[i]);\n }\n return destination;\n }\n function deepExtendOne(destination, source) {\n var ObservableArray = kendo.data.ObservableArray, LazyObservableArray = kendo.data.LazyObservableArray, DataSource = kendo.data.DataSource, HierarchicalDataSource = kendo.data.HierarchicalDataSource, property, propValue, propType, propInit, destProp;\n for (property in source) {\n propValue = source[property];\n propType = typeof propValue;\n if (propType === OBJECT && propValue !== null) {\n propInit = propValue.constructor;\n } else {\n propInit = null;\n }\n if (propInit && propInit !== Array && propInit !== ObservableArray && propInit !== LazyObservableArray && propInit !== DataSource && propInit !== HierarchicalDataSource && propInit !== RegExp) {\n if (propValue instanceof Date) {\n destination[property] = new Date(propValue.getTime());\n } else if (isFunction(propValue.clone)) {\n destination[property] = propValue.clone();\n } else {\n destProp = destination[property];\n if (typeof destProp === OBJECT) {\n destination[property] = destProp || {};\n } else {\n destination[property] = {};\n }\n deepExtendOne(destination[property], propValue);\n }\n } else if (propType !== UNDEFINED) {\n destination[property] = propValue;\n }\n }\n return destination;\n }\n function testRx(agent, rxs, dflt) {\n for (var rx in rxs) {\n if (rxs.hasOwnProperty(rx) && rxs[rx].test(agent)) {\n return rx;\n }\n }\n return dflt !== undefined ? dflt : agent;\n }\n function toHyphens(str) {\n return str.replace(/([a-z][A-Z])/g, function (g) {\n return g.charAt(0) + '-' + g.charAt(1).toLowerCase();\n });\n }\n function toCamelCase(str) {\n return str.replace(/\\-(\\w)/g, function (strMatch, g1) {\n return g1.toUpperCase();\n });\n }\n function getComputedStyles(element, properties) {\n var styles = {}, computedStyle;\n if (document.defaultView && document.defaultView.getComputedStyle) {\n computedStyle = document.defaultView.getComputedStyle(element, '');\n if (properties) {\n $.each(properties, function (idx, value) {\n styles[value] = computedStyle.getPropertyValue(value);\n });\n }\n } else {\n computedStyle = element.currentStyle;\n if (properties) {\n $.each(properties, function (idx, value) {\n styles[value] = computedStyle[toCamelCase(value)];\n });\n }\n }\n if (!kendo.size(styles)) {\n styles = computedStyle;\n }\n return styles;\n }\n function isScrollable(element) {\n if (element && element.className && typeof element.className === 'string' && element.className.indexOf('k-auto-scrollable') > -1) {\n return true;\n }\n var overflow = getComputedStyles(element, ['overflow']).overflow;\n return overflow == 'auto' || overflow == 'scroll';\n }\n function scrollLeft(element, value) {\n var webkit = support.browser.webkit;\n var mozila = support.browser.mozilla;\n var el = element instanceof $ ? element[0] : element;\n var isRtl;\n if (!element) {\n return;\n }\n isRtl = support.isRtl(element);\n if (value !== undefined) {\n if (isRtl && webkit) {\n el.scrollLeft = el.scrollWidth - el.clientWidth - value;\n } else if (isRtl && mozila) {\n el.scrollLeft = -value;\n } else {\n el.scrollLeft = value;\n }\n } else {\n if (isRtl && webkit) {\n return el.scrollWidth - el.clientWidth - el.scrollLeft;\n } else {\n return Math.abs(el.scrollLeft);\n }\n }\n }\n (function () {\n support._scrollbar = undefined;\n support.scrollbar = function (refresh) {\n if (!isNaN(support._scrollbar) && !refresh) {\n return support._scrollbar;\n } else {\n var div = document.createElement('div'), result;\n div.style.cssText = 'overflow:scroll;overflow-x:hidden;zoom:1;clear:both;display:block';\n div.innerHTML = ' ';\n document.body.appendChild(div);\n support._scrollbar = result = div.offsetWidth - div.scrollWidth;\n document.body.removeChild(div);\n return result;\n }\n };\n support.isRtl = function (element) {\n return $(element).closest('.k-rtl').length > 0;\n };\n var table = document.createElement('table');\n try {\n table.innerHTML = '';\n support.tbodyInnerHtml = true;\n } catch (e) {\n support.tbodyInnerHtml = false;\n }\n support.touch = 'ontouchstart' in window;\n var docStyle = document.documentElement.style;\n var transitions = support.transitions = false, transforms = support.transforms = false, elementProto = 'HTMLElement' in window ? HTMLElement.prototype : [];\n support.hasHW3D = 'WebKitCSSMatrix' in window && 'm11' in new window.WebKitCSSMatrix() || 'MozPerspective' in docStyle || 'msPerspective' in docStyle;\n support.cssFlexbox = 'flexWrap' in docStyle || 'WebkitFlexWrap' in docStyle || 'msFlexWrap' in docStyle;\n each([\n 'Moz',\n 'webkit',\n 'O',\n 'ms'\n ], function () {\n var prefix = this.toString(), hasTransitions = typeof table.style[prefix + 'Transition'] === STRING;\n if (hasTransitions || typeof table.style[prefix + 'Transform'] === STRING) {\n var lowPrefix = prefix.toLowerCase();\n transforms = {\n css: lowPrefix != 'ms' ? '-' + lowPrefix + '-' : '',\n prefix: prefix,\n event: lowPrefix === 'o' || lowPrefix === 'webkit' ? lowPrefix : ''\n };\n if (hasTransitions) {\n transitions = transforms;\n transitions.event = transitions.event ? transitions.event + 'TransitionEnd' : 'transitionend';\n }\n return false;\n }\n });\n table = null;\n support.transforms = transforms;\n support.transitions = transitions;\n support.devicePixelRatio = window.devicePixelRatio === undefined ? 1 : window.devicePixelRatio;\n try {\n support.screenWidth = window.outerWidth || window.screen ? window.screen.availWidth : window.innerWidth;\n support.screenHeight = window.outerHeight || window.screen ? window.screen.availHeight : window.innerHeight;\n } catch (e) {\n support.screenWidth = window.screen.availWidth;\n support.screenHeight = window.screen.availHeight;\n }\n support.detectOS = function (ua) {\n var os = false, minorVersion, match = [], notAndroidPhone = !/mobile safari/i.test(ua), agentRxs = {\n wp: /(Windows Phone(?: OS)?)\\s(\\d+)\\.(\\d+(\\.\\d+)?)/,\n fire: /(Silk)\\/(\\d+)\\.(\\d+(\\.\\d+)?)/,\n android: /(Android|Android.*(?:Opera|Firefox).*?\\/)\\s*(\\d+)\\.(\\d+(\\.\\d+)?)/,\n iphone: /(iPhone|iPod).*OS\\s+(\\d+)[\\._]([\\d\\._]+)/,\n ipad: /(iPad).*OS\\s+(\\d+)[\\._]([\\d_]+)/,\n meego: /(MeeGo).+NokiaBrowser\\/(\\d+)\\.([\\d\\._]+)/,\n webos: /(webOS)\\/(\\d+)\\.(\\d+(\\.\\d+)?)/,\n blackberry: /(BlackBerry|BB10).*?Version\\/(\\d+)\\.(\\d+(\\.\\d+)?)/,\n playbook: /(PlayBook).*?Tablet\\s*OS\\s*(\\d+)\\.(\\d+(\\.\\d+)?)/,\n windows: /(MSIE)\\s+(\\d+)\\.(\\d+(\\.\\d+)?)/,\n tizen: /(tizen).*?Version\\/(\\d+)\\.(\\d+(\\.\\d+)?)/i,\n sailfish: /(sailfish).*rv:(\\d+)\\.(\\d+(\\.\\d+)?).*firefox/i,\n ffos: /(Mobile).*rv:(\\d+)\\.(\\d+(\\.\\d+)?).*Firefox/\n }, osRxs = {\n ios: /^i(phone|pad|pod)$/i,\n android: /^android|fire$/i,\n blackberry: /^blackberry|playbook/i,\n windows: /windows/,\n wp: /wp/,\n flat: /sailfish|ffos|tizen/i,\n meego: /meego/\n }, formFactorRxs = { tablet: /playbook|ipad|fire/i }, browserRxs = {\n omini: /Opera\\sMini/i,\n omobile: /Opera\\sMobi/i,\n firefox: /Firefox|Fennec/i,\n mobilesafari: /version\\/.*safari/i,\n ie: /MSIE|Windows\\sPhone/i,\n chrome: /chrome|crios/i,\n webkit: /webkit/i\n };\n for (var agent in agentRxs) {\n if (agentRxs.hasOwnProperty(agent)) {\n match = ua.match(agentRxs[agent]);\n if (match) {\n if (agent == 'windows' && 'plugins' in navigator) {\n return false;\n }\n os = {};\n os.device = agent;\n os.tablet = testRx(agent, formFactorRxs, false);\n os.browser = testRx(ua, browserRxs, 'default');\n os.name = testRx(agent, osRxs);\n os[os.name] = true;\n os.majorVersion = match[2];\n os.minorVersion = match[3].replace('_', '.');\n minorVersion = os.minorVersion.replace('.', '').substr(0, 2);\n os.flatVersion = os.majorVersion + minorVersion + new Array(3 - (minorVersion.length < 3 ? minorVersion.length : 2)).join('0');\n os.cordova = typeof window.PhoneGap !== UNDEFINED || typeof window.cordova !== UNDEFINED;\n os.appMode = window.navigator.standalone || /file|local|wmapp/.test(window.location.protocol) || os.cordova;\n if (os.android && (support.devicePixelRatio < 1.5 && os.flatVersion < 400 || notAndroidPhone) && (support.screenWidth > 800 || support.screenHeight > 800)) {\n os.tablet = agent;\n }\n break;\n }\n }\n }\n return os;\n };\n var mobileOS = support.mobileOS = support.detectOS(navigator.userAgent);\n support.wpDevicePixelRatio = mobileOS.wp ? screen.width / 320 : 0;\n support.hasNativeScrolling = false;\n if (mobileOS.ios || mobileOS.android && mobileOS.majorVersion > 2 || mobileOS.wp) {\n support.hasNativeScrolling = mobileOS;\n }\n support.delayedClick = function () {\n if (support.touch) {\n if (mobileOS.ios) {\n return true;\n }\n if (mobileOS.android) {\n if (!support.browser.chrome) {\n return true;\n }\n if (support.browser.version < 32) {\n return false;\n }\n return !($('meta[name=viewport]').attr('content') || '').match(/user-scalable=no/i);\n }\n }\n return false;\n };\n support.mouseAndTouchPresent = support.touch && !(support.mobileOS.ios || support.mobileOS.android);\n support.detectBrowser = function (ua) {\n var browser = false, match = [], browserRxs = {\n edge: /(edge)[ \\/]([\\w.]+)/i,\n webkit: /(chrome)[ \\/]([\\w.]+)/i,\n safari: /(webkit)[ \\/]([\\w.]+)/i,\n opera: /(opera)(?:.*version|)[ \\/]([\\w.]+)/i,\n msie: /(msie\\s|trident.*? rv:)([\\w.]+)/i,\n mozilla: /(mozilla)(?:.*? rv:([\\w.]+)|)/i\n };\n for (var agent in browserRxs) {\n if (browserRxs.hasOwnProperty(agent)) {\n match = ua.match(browserRxs[agent]);\n if (match) {\n browser = {};\n browser[agent] = true;\n browser[match[1].toLowerCase().split(' ')[0].split('/')[0]] = true;\n browser.version = parseInt(document.documentMode || match[2], 10);\n break;\n }\n }\n }\n return browser;\n };\n support.browser = support.detectBrowser(navigator.userAgent);\n support.detectClipboardAccess = function () {\n var commands = {\n copy: document.queryCommandSupported ? document.queryCommandSupported('copy') : false,\n cut: document.queryCommandSupported ? document.queryCommandSupported('cut') : false,\n paste: document.queryCommandSupported ? document.queryCommandSupported('paste') : false\n };\n if (support.browser.chrome) {\n commands.paste = false;\n if (support.browser.version >= 43) {\n commands.copy = true;\n commands.cut = true;\n }\n }\n return commands;\n };\n support.clipboard = support.detectClipboardAccess();\n support.zoomLevel = function () {\n try {\n var browser = support.browser;\n var ie11WidthCorrection = 0;\n var docEl = document.documentElement;\n if (browser.msie && browser.version == 11 && docEl.scrollHeight > docEl.clientHeight && !support.touch) {\n ie11WidthCorrection = support.scrollbar();\n }\n return support.touch ? docEl.clientWidth / window.innerWidth : browser.msie && browser.version >= 10 ? ((top || window).document.documentElement.offsetWidth + ie11WidthCorrection) / (top || window).innerWidth : 1;\n } catch (e) {\n return 1;\n }\n };\n support.cssBorderSpacing = typeof docStyle.borderSpacing != 'undefined' && !(support.browser.msie && support.browser.version < 8);\n (function (browser) {\n var cssClass = '', docElement = $(document.documentElement), majorVersion = parseInt(browser.version, 10);\n if (browser.msie) {\n cssClass = 'ie';\n } else if (browser.mozilla) {\n cssClass = 'ff';\n } else if (browser.safari) {\n cssClass = 'safari';\n } else if (browser.webkit) {\n cssClass = 'webkit';\n } else if (browser.opera) {\n cssClass = 'opera';\n } else if (browser.edge) {\n cssClass = 'edge';\n }\n if (cssClass) {\n cssClass = 'k-' + cssClass + ' k-' + cssClass + majorVersion;\n }\n if (support.mobileOS) {\n cssClass += ' k-mobile';\n }\n if (!support.cssFlexbox) {\n cssClass += ' k-no-flexbox';\n }\n docElement.addClass(cssClass);\n }(support.browser));\n support.eventCapture = document.documentElement.addEventListener;\n var input = document.createElement('input');\n support.placeholder = 'placeholder' in input;\n support.propertyChangeEvent = 'onpropertychange' in input;\n support.input = function () {\n var types = [\n 'number',\n 'date',\n 'time',\n 'month',\n 'week',\n 'datetime',\n 'datetime-local'\n ];\n var length = types.length;\n var value = 'test';\n var result = {};\n var idx = 0;\n var type;\n for (; idx < length; idx++) {\n type = types[idx];\n input.setAttribute('type', type);\n input.value = value;\n result[type.replace('-', '')] = input.type !== 'text' && input.value !== value;\n }\n return result;\n }();\n input.style.cssText = 'float:left;';\n support.cssFloat = !!input.style.cssFloat;\n input = null;\n support.stableSort = function () {\n var threshold = 513;\n var sorted = [{\n index: 0,\n field: 'b'\n }];\n for (var i = 1; i < threshold; i++) {\n sorted.push({\n index: i,\n field: 'a'\n });\n }\n sorted.sort(function (a, b) {\n return a.field > b.field ? 1 : a.field < b.field ? -1 : 0;\n });\n return sorted[0].index === 1;\n }();\n support.matchesSelector = elementProto.webkitMatchesSelector || elementProto.mozMatchesSelector || elementProto.msMatchesSelector || elementProto.oMatchesSelector || elementProto.matchesSelector || elementProto.matches || function (selector) {\n var nodeList = document.querySelectorAll ? (this.parentNode || document).querySelectorAll(selector) || [] : $(selector), i = nodeList.length;\n while (i--) {\n if (nodeList[i] == this) {\n return true;\n }\n }\n return false;\n };\n support.pushState = window.history && window.history.pushState;\n var documentMode = document.documentMode;\n support.hashChange = 'onhashchange' in window && !(support.browser.msie && (!documentMode || documentMode <= 8));\n support.customElements = 'registerElement' in window.document;\n var chrome = support.browser.chrome;\n support.msPointers = !chrome && window.MSPointerEvent;\n support.pointers = !chrome && window.PointerEvent;\n support.kineticScrollNeeded = mobileOS && (support.touch || support.msPointers || support.pointers);\n }());\n function size(obj) {\n var result = 0, key;\n for (key in obj) {\n if (obj.hasOwnProperty(key) && key != 'toJSON') {\n result++;\n }\n }\n return result;\n }\n function getOffset(element, type, positioned) {\n if (!type) {\n type = 'offset';\n }\n var offset = element[type]();\n var result = {\n top: offset.top,\n right: offset.right,\n bottom: offset.bottom,\n left: offset.left\n };\n if (support.browser.msie && (support.pointers || support.msPointers) && !positioned) {\n var sign = support.isRtl(element) ? 1 : -1;\n result.top -= window.pageYOffset - document.documentElement.scrollTop;\n result.left -= window.pageXOffset + sign * document.documentElement.scrollLeft;\n }\n return result;\n }\n var directions = {\n left: { reverse: 'right' },\n right: { reverse: 'left' },\n down: { reverse: 'up' },\n up: { reverse: 'down' },\n top: { reverse: 'bottom' },\n bottom: { reverse: 'top' },\n 'in': { reverse: 'out' },\n out: { reverse: 'in' }\n };\n function parseEffects(input) {\n var effects = {};\n each(typeof input === 'string' ? input.split(' ') : input, function (idx) {\n effects[idx] = this;\n });\n return effects;\n }\n function fx(element) {\n return new kendo.effects.Element(element);\n }\n var effects = {};\n $.extend(effects, {\n enabled: true,\n Element: function (element) {\n this.element = $(element);\n },\n promise: function (element, options) {\n if (!element.is(':visible')) {\n element.css({ display: element.data('olddisplay') || 'block' }).css('display');\n }\n if (options.hide) {\n element.data('olddisplay', element.css('display')).hide();\n }\n if (options.init) {\n options.init();\n }\n if (options.completeCallback) {\n options.completeCallback(element);\n }\n element.dequeue();\n },\n disable: function () {\n this.enabled = false;\n this.promise = this.promiseShim;\n },\n enable: function () {\n this.enabled = true;\n this.promise = this.animatedPromise;\n }\n });\n effects.promiseShim = effects.promise;\n function prepareAnimationOptions(options, duration, reverse, complete) {\n if (typeof options === STRING) {\n if (isFunction(duration)) {\n complete = duration;\n duration = 400;\n reverse = false;\n }\n if (isFunction(reverse)) {\n complete = reverse;\n reverse = false;\n }\n if (typeof duration === BOOLEAN) {\n reverse = duration;\n duration = 400;\n }\n options = {\n effects: options,\n duration: duration,\n reverse: reverse,\n complete: complete\n };\n }\n return extend({\n effects: {},\n duration: 400,\n reverse: false,\n init: noop,\n teardown: noop,\n hide: false\n }, options, {\n completeCallback: options.complete,\n complete: noop\n });\n }\n function animate(element, options, duration, reverse, complete) {\n var idx = 0, length = element.length, instance;\n for (; idx < length; idx++) {\n instance = $(element[idx]);\n instance.queue(function () {\n effects.promise(instance, prepareAnimationOptions(options, duration, reverse, complete));\n });\n }\n return element;\n }\n function toggleClass(element, classes, options, add) {\n if (classes) {\n classes = classes.split(' ');\n each(classes, function (idx, value) {\n element.toggleClass(value, add);\n });\n }\n return element;\n }\n if (!('kendoAnimate' in $.fn)) {\n extend($.fn, {\n kendoStop: function (clearQueue, gotoEnd) {\n return this.stop(clearQueue, gotoEnd);\n },\n kendoAnimate: function (options, duration, reverse, complete) {\n return animate(this, options, duration, reverse, complete);\n },\n kendoAddClass: function (classes, options) {\n return kendo.toggleClass(this, classes, options, true);\n },\n kendoRemoveClass: function (classes, options) {\n return kendo.toggleClass(this, classes, options, false);\n },\n kendoToggleClass: function (classes, options, toggle) {\n return kendo.toggleClass(this, classes, options, toggle);\n }\n });\n }\n var ampRegExp = /&/g, ltRegExp = //g;\n function htmlEncode(value) {\n return ('' + value).replace(ampRegExp, '&').replace(ltRegExp, '<').replace(gtRegExp, '>').replace(quoteRegExp, '"').replace(aposRegExp, ''');\n }\n var eventTarget = function (e) {\n return e.target;\n };\n if (support.touch) {\n eventTarget = function (e) {\n var touches = 'originalEvent' in e ? e.originalEvent.changedTouches : 'changedTouches' in e ? e.changedTouches : null;\n return touches ? document.elementFromPoint(touches[0].clientX, touches[0].clientY) : e.target;\n };\n each([\n 'swipe',\n 'swipeLeft',\n 'swipeRight',\n 'swipeUp',\n 'swipeDown',\n 'doubleTap',\n 'tap'\n ], function (m, value) {\n $.fn[value] = function (callback) {\n return this.bind(value, callback);\n };\n });\n }\n if (support.touch) {\n if (!support.mobileOS) {\n support.mousedown = 'mousedown touchstart';\n support.mouseup = 'mouseup touchend';\n support.mousemove = 'mousemove touchmove';\n support.mousecancel = 'mouseleave touchcancel';\n support.click = 'click';\n support.resize = 'resize';\n } else {\n support.mousedown = 'touchstart';\n support.mouseup = 'touchend';\n support.mousemove = 'touchmove';\n support.mousecancel = 'touchcancel';\n support.click = 'touchend';\n support.resize = 'orientationchange';\n }\n } else if (support.pointers) {\n support.mousemove = 'pointermove';\n support.mousedown = 'pointerdown';\n support.mouseup = 'pointerup';\n support.mousecancel = 'pointercancel';\n support.click = 'pointerup';\n support.resize = 'orientationchange resize';\n } else if (support.msPointers) {\n support.mousemove = 'MSPointerMove';\n support.mousedown = 'MSPointerDown';\n support.mouseup = 'MSPointerUp';\n support.mousecancel = 'MSPointerCancel';\n support.click = 'MSPointerUp';\n support.resize = 'orientationchange resize';\n } else {\n support.mousemove = 'mousemove';\n support.mousedown = 'mousedown';\n support.mouseup = 'mouseup';\n support.mousecancel = 'mouseleave';\n support.click = 'click';\n support.resize = 'resize';\n }\n var wrapExpression = function (members, paramName) {\n var result = paramName || 'd', index, idx, length, member, count = 1;\n for (idx = 0, length = members.length; idx < length; idx++) {\n member = members[idx];\n if (member !== '') {\n index = member.indexOf('[');\n if (index !== 0) {\n if (index == -1) {\n member = '.' + member;\n } else {\n count++;\n member = '.' + member.substring(0, index) + ' || {})' + member.substring(index);\n }\n }\n count++;\n result += member + (idx < length - 1 ? ' || {})' : ')');\n }\n }\n return new Array(count).join('(') + result;\n }, localUrlRe = /^([a-z]+:)?\\/\\//i;\n extend(kendo, {\n widgets: [],\n _widgetRegisteredCallbacks: [],\n ui: kendo.ui || {},\n fx: kendo.fx || fx,\n effects: kendo.effects || effects,\n mobile: kendo.mobile || {},\n data: kendo.data || {},\n dataviz: kendo.dataviz || {},\n drawing: kendo.drawing || {},\n spreadsheet: { messages: {} },\n keys: {\n INSERT: 45,\n DELETE: 46,\n BACKSPACE: 8,\n TAB: 9,\n ENTER: 13,\n ESC: 27,\n LEFT: 37,\n UP: 38,\n RIGHT: 39,\n DOWN: 40,\n END: 35,\n HOME: 36,\n SPACEBAR: 32,\n PAGEUP: 33,\n PAGEDOWN: 34,\n F2: 113,\n F10: 121,\n F12: 123,\n NUMPAD_PLUS: 107,\n NUMPAD_MINUS: 109,\n NUMPAD_DOT: 110\n },\n support: kendo.support || support,\n animate: kendo.animate || animate,\n ns: '',\n attr: function (value) {\n return 'data-' + kendo.ns + value;\n },\n getShadows: getShadows,\n wrap: wrap,\n deepExtend: deepExtend,\n getComputedStyles: getComputedStyles,\n webComponents: kendo.webComponents || [],\n isScrollable: isScrollable,\n scrollLeft: scrollLeft,\n size: size,\n toCamelCase: toCamelCase,\n toHyphens: toHyphens,\n getOffset: kendo.getOffset || getOffset,\n parseEffects: kendo.parseEffects || parseEffects,\n toggleClass: kendo.toggleClass || toggleClass,\n directions: kendo.directions || directions,\n Observable: Observable,\n Class: Class,\n Template: Template,\n template: proxy(Template.compile, Template),\n render: proxy(Template.render, Template),\n stringify: proxy(JSON.stringify, JSON),\n eventTarget: eventTarget,\n htmlEncode: htmlEncode,\n isLocalUrl: function (url) {\n return url && !localUrlRe.test(url);\n },\n expr: function (expression, safe, paramName) {\n expression = expression || '';\n if (typeof safe == STRING) {\n paramName = safe;\n safe = false;\n }\n paramName = paramName || 'd';\n if (expression && expression.charAt(0) !== '[') {\n expression = '.' + expression;\n }\n if (safe) {\n expression = expression.replace(/\"([^.]*)\\.([^\"]*)\"/g, '\"$1_$DOT$_$2\"');\n expression = expression.replace(/'([^.]*)\\.([^']*)'/g, '\\'$1_$DOT$_$2\\'');\n expression = wrapExpression(expression.split('.'), paramName);\n expression = expression.replace(/_\\$DOT\\$_/g, '.');\n } else {\n expression = paramName + expression;\n }\n return expression;\n },\n getter: function (expression, safe) {\n var key = expression + safe;\n return getterCache[key] = getterCache[key] || new Function('d', 'return ' + kendo.expr(expression, safe));\n },\n setter: function (expression) {\n return setterCache[expression] = setterCache[expression] || new Function('d,value', kendo.expr(expression) + '=value');\n },\n accessor: function (expression) {\n return {\n get: kendo.getter(expression),\n set: kendo.setter(expression)\n };\n },\n guid: function () {\n var id = '', i, random;\n for (i = 0; i < 32; i++) {\n random = math.random() * 16 | 0;\n if (i == 8 || i == 12 || i == 16 || i == 20) {\n id += '-';\n }\n id += (i == 12 ? 4 : i == 16 ? random & 3 | 8 : random).toString(16);\n }\n return id;\n },\n roleSelector: function (role) {\n return role.replace(/(\\S+)/g, '[' + kendo.attr('role') + '=$1],').slice(0, -1);\n },\n directiveSelector: function (directives) {\n var selectors = directives.split(' ');\n if (selectors) {\n for (var i = 0; i < selectors.length; i++) {\n if (selectors[i] != 'view') {\n selectors[i] = selectors[i].replace(/(\\w*)(view|bar|strip|over)$/, '$1-$2');\n }\n }\n }\n return selectors.join(' ').replace(/(\\S+)/g, 'kendo-mobile-$1,').slice(0, -1);\n },\n triggeredByInput: function (e) {\n return /^(label|input|textarea|select)$/i.test(e.target.tagName);\n },\n onWidgetRegistered: function (callback) {\n for (var i = 0, len = kendo.widgets.length; i < len; i++) {\n callback(kendo.widgets[i]);\n }\n kendo._widgetRegisteredCallbacks.push(callback);\n },\n logToConsole: function (message, type) {\n var console = window.console;\n if (!kendo.suppressLog && typeof console != 'undefined' && console.log) {\n console[type || 'log'](message);\n }\n }\n });\n var Widget = Observable.extend({\n init: function (element, options) {\n var that = this;\n that.element = kendo.jQuery(element).handler(that);\n that.angular('init', options);\n Observable.fn.init.call(that);\n var dataSource = options ? options.dataSource : null;\n if (dataSource) {\n options = extend({}, options, { dataSource: {} });\n }\n options = that.options = extend(true, {}, that.options, options);\n if (dataSource) {\n options.dataSource = dataSource;\n }\n if (!that.element.attr(kendo.attr('role'))) {\n that.element.attr(kendo.attr('role'), (options.name || '').toLowerCase());\n }\n that.element.data('kendo' + options.prefix + options.name, that);\n that.bind(that.events, options);\n },\n events: [],\n options: { prefix: '' },\n _hasBindingTarget: function () {\n return !!this.element[0].kendoBindingTarget;\n },\n _tabindex: function (target) {\n target = target || this.wrapper;\n var element = this.element, TABINDEX = 'tabindex', tabindex = target.attr(TABINDEX) || element.attr(TABINDEX);\n element.removeAttr(TABINDEX);\n target.attr(TABINDEX, !isNaN(tabindex) ? tabindex : 0);\n },\n setOptions: function (options) {\n this._setEvents(options);\n $.extend(this.options, options);\n },\n _setEvents: function (options) {\n var that = this, idx = 0, length = that.events.length, e;\n for (; idx < length; idx++) {\n e = that.events[idx];\n if (that.options[e] && options[e]) {\n that.unbind(e, that.options[e]);\n }\n }\n that.bind(that.events, options);\n },\n resize: function (force) {\n var size = this.getSize(), currentSize = this._size;\n if (force || (size.width > 0 || size.height > 0) && (!currentSize || size.width !== currentSize.width || size.height !== currentSize.height)) {\n this._size = size;\n this._resize(size, force);\n this.trigger('resize', size);\n }\n },\n getSize: function () {\n return kendo.dimensions(this.element);\n },\n size: function (size) {\n if (!size) {\n return this.getSize();\n } else {\n this.setSize(size);\n }\n },\n setSize: $.noop,\n _resize: $.noop,\n destroy: function () {\n var that = this;\n that.element.removeData('kendo' + that.options.prefix + that.options.name);\n that.element.removeData('handler');\n that.unbind();\n },\n _destroy: function () {\n this.destroy();\n },\n angular: function () {\n },\n _muteAngularRebind: function (callback) {\n this._muteRebind = true;\n callback.call(this);\n this._muteRebind = false;\n }\n });\n var DataBoundWidget = Widget.extend({\n dataItems: function () {\n return this.dataSource.flatView();\n },\n _angularItems: function (cmd) {\n var that = this;\n that.angular(cmd, function () {\n return {\n elements: that.items(),\n data: $.map(that.dataItems(), function (dataItem) {\n return { dataItem: dataItem };\n })\n };\n });\n }\n });\n kendo.dimensions = function (element, dimensions) {\n var domElement = element[0];\n if (dimensions) {\n element.css(dimensions);\n }\n return {\n width: domElement.offsetWidth,\n height: domElement.offsetHeight\n };\n };\n kendo.notify = noop;\n var templateRegExp = /template$/i, jsonRegExp = /^\\s*(?:\\{(?:.|\\r\\n|\\n)*\\}|\\[(?:.|\\r\\n|\\n)*\\])\\s*$/, jsonFormatRegExp = /^\\{(\\d+)(:[^\\}]+)?\\}|^\\[[A-Za-z_]+\\]$/, dashRegExp = /([A-Z])/g;\n function parseOption(element, option) {\n var value;\n if (option.indexOf('data') === 0) {\n option = option.substring(4);\n option = option.charAt(0).toLowerCase() + option.substring(1);\n }\n option = option.replace(dashRegExp, '-$1');\n value = element.getAttribute('data-' + kendo.ns + option);\n if (value === null) {\n value = undefined;\n } else if (value === 'null') {\n value = null;\n } else if (value === 'true') {\n value = true;\n } else if (value === 'false') {\n value = false;\n } else if (numberRegExp.test(value)) {\n value = parseFloat(value);\n } else if (jsonRegExp.test(value) && !jsonFormatRegExp.test(value)) {\n value = new Function('return (' + value + ')')();\n }\n return value;\n }\n function parseOptions(element, options) {\n var result = {}, option, value;\n for (option in options) {\n value = parseOption(element, option);\n if (value !== undefined) {\n if (templateRegExp.test(option)) {\n if (typeof value === 'string') {\n value = kendo.template($('#' + value).html());\n } else {\n value = element.getAttribute(option);\n }\n }\n result[option] = value;\n }\n }\n return result;\n }\n kendo.initWidget = function (element, options, roles) {\n var result, option, widget, idx, length, role, value, dataSource, fullPath, widgetKeyRegExp;\n if (!roles) {\n roles = kendo.ui.roles;\n } else if (roles.roles) {\n roles = roles.roles;\n }\n element = element.nodeType ? element : element[0];\n role = element.getAttribute('data-' + kendo.ns + 'role');\n if (!role) {\n return;\n }\n fullPath = role.indexOf('.') === -1;\n if (fullPath) {\n widget = roles[role];\n } else {\n widget = kendo.getter(role)(window);\n }\n var data = $(element).data(), widgetKey = widget ? 'kendo' + widget.fn.options.prefix + widget.fn.options.name : '';\n if (fullPath) {\n widgetKeyRegExp = new RegExp('^kendo.*' + role + '$', 'i');\n } else {\n widgetKeyRegExp = new RegExp('^' + widgetKey + '$', 'i');\n }\n for (var key in data) {\n if (key.match(widgetKeyRegExp)) {\n if (key === widgetKey) {\n result = data[key];\n } else {\n return data[key];\n }\n }\n }\n if (!widget) {\n return;\n }\n dataSource = parseOption(element, 'dataSource');\n options = $.extend({}, parseOptions(element, widget.fn.options), options);\n if (dataSource) {\n if (typeof dataSource === STRING) {\n options.dataSource = kendo.getter(dataSource)(window);\n } else {\n options.dataSource = dataSource;\n }\n }\n for (idx = 0, length = widget.fn.events.length; idx < length; idx++) {\n option = widget.fn.events[idx];\n value = parseOption(element, option);\n if (value !== undefined) {\n options[option] = kendo.getter(value)(window);\n }\n }\n if (!result) {\n result = new widget(element, options);\n } else if (!$.isEmptyObject(options)) {\n result.setOptions(options);\n }\n return result;\n };\n kendo.rolesFromNamespaces = function (namespaces) {\n var roles = [], idx, length;\n if (!namespaces[0]) {\n namespaces = [\n kendo.ui,\n kendo.dataviz.ui\n ];\n }\n for (idx = 0, length = namespaces.length; idx < length; idx++) {\n roles[idx] = namespaces[idx].roles;\n }\n return extend.apply(null, [{}].concat(roles.reverse()));\n };\n kendo.init = function (element) {\n var roles = kendo.rolesFromNamespaces(slice.call(arguments, 1));\n $(element).find('[data-' + kendo.ns + 'role]').addBack().each(function () {\n kendo.initWidget(this, {}, roles);\n });\n };\n kendo.destroy = function (element) {\n $(element).find('[data-' + kendo.ns + 'role]').addBack().each(function () {\n var data = $(this).data();\n for (var key in data) {\n if (key.indexOf('kendo') === 0 && typeof data[key].destroy === FUNCTION) {\n data[key].destroy();\n }\n }\n });\n };\n function containmentComparer(a, b) {\n return $.contains(a, b) ? -1 : 1;\n }\n function resizableWidget() {\n var widget = $(this);\n return $.inArray(widget.attr('data-' + kendo.ns + 'role'), [\n 'slider',\n 'rangeslider'\n ]) > -1 || widget.is(':visible');\n }\n kendo.resize = function (element, force) {\n var widgets = $(element).find('[data-' + kendo.ns + 'role]').addBack().filter(resizableWidget);\n if (!widgets.length) {\n return;\n }\n var widgetsArray = $.makeArray(widgets);\n widgetsArray.sort(containmentComparer);\n $.each(widgetsArray, function () {\n var widget = kendo.widgetInstance($(this));\n if (widget) {\n widget.resize(force);\n }\n });\n };\n kendo.parseOptions = parseOptions;\n extend(kendo.ui, {\n Widget: Widget,\n DataBoundWidget: DataBoundWidget,\n roles: {},\n progress: function (container, toggle) {\n var mask = container.find('.k-loading-mask'), support = kendo.support, browser = support.browser, isRtl, leftRight, webkitCorrection, containerScrollLeft;\n if (toggle) {\n if (!mask.length) {\n isRtl = support.isRtl(container);\n leftRight = isRtl ? 'right' : 'left';\n containerScrollLeft = container.scrollLeft();\n webkitCorrection = browser.webkit ? !isRtl ? 0 : container[0].scrollWidth - container.width() - 2 * containerScrollLeft : 0;\n mask = $('
' + kendo.ui.progress.messages.loading + '
').width('100%').height('100%').css('top', container.scrollTop()).css(leftRight, Math.abs(containerScrollLeft) + webkitCorrection).prependTo(container);\n }\n } else if (mask) {\n mask.remove();\n }\n },\n plugin: function (widget, register, prefix) {\n var name = widget.fn.options.name, getter;\n register = register || kendo.ui;\n prefix = prefix || '';\n register[name] = widget;\n register.roles[name.toLowerCase()] = widget;\n getter = 'getKendo' + prefix + name;\n name = 'kendo' + prefix + name;\n var widgetEntry = {\n name: name,\n widget: widget,\n prefix: prefix || ''\n };\n kendo.widgets.push(widgetEntry);\n for (var i = 0, len = kendo._widgetRegisteredCallbacks.length; i < len; i++) {\n kendo._widgetRegisteredCallbacks[i](widgetEntry);\n }\n $.fn[name] = function (options) {\n var value = this, args;\n if (typeof options === STRING) {\n args = slice.call(arguments, 1);\n this.each(function () {\n var widget = $.data(this, name), method, result;\n if (!widget) {\n throw new Error(kendo.format('Cannot call method \\'{0}\\' of {1} before it is initialized', options, name));\n }\n method = widget[options];\n if (typeof method !== FUNCTION) {\n throw new Error(kendo.format('Cannot find method \\'{0}\\' of {1}', options, name));\n }\n result = method.apply(widget, args);\n if (result !== undefined) {\n value = result;\n return false;\n }\n });\n } else {\n this.each(function () {\n return new widget(this, options);\n });\n }\n return value;\n };\n $.fn[name].widget = widget;\n $.fn[getter] = function () {\n return this.data(name);\n };\n }\n });\n kendo.ui.progress.messages = { loading: 'Loading...' };\n var ContainerNullObject = {\n bind: function () {\n return this;\n },\n nullObject: true,\n options: {}\n };\n var MobileWidget = Widget.extend({\n init: function (element, options) {\n Widget.fn.init.call(this, element, options);\n this.element.autoApplyNS();\n this.wrapper = this.element;\n this.element.addClass('km-widget');\n },\n destroy: function () {\n Widget.fn.destroy.call(this);\n this.element.kendoDestroy();\n },\n options: { prefix: 'Mobile' },\n events: [],\n view: function () {\n var viewElement = this.element.closest(kendo.roleSelector('view splitview modalview drawer'));\n return kendo.widgetInstance(viewElement, kendo.mobile.ui) || ContainerNullObject;\n },\n viewHasNativeScrolling: function () {\n var view = this.view();\n return view && view.options.useNativeScrolling;\n },\n container: function () {\n var element = this.element.closest(kendo.roleSelector('view layout modalview drawer splitview'));\n return kendo.widgetInstance(element.eq(0), kendo.mobile.ui) || ContainerNullObject;\n }\n });\n extend(kendo.mobile, {\n init: function (element) {\n kendo.init(element, kendo.mobile.ui, kendo.ui, kendo.dataviz.ui);\n },\n appLevelNativeScrolling: function () {\n return kendo.mobile.application && kendo.mobile.application.options && kendo.mobile.application.options.useNativeScrolling;\n },\n roles: {},\n ui: {\n Widget: MobileWidget,\n DataBoundWidget: DataBoundWidget.extend(MobileWidget.prototype),\n roles: {},\n plugin: function (widget) {\n kendo.ui.plugin(widget, kendo.mobile.ui, 'Mobile');\n }\n }\n });\n deepExtend(kendo.dataviz, {\n init: function (element) {\n kendo.init(element, kendo.dataviz.ui);\n },\n ui: {\n roles: {},\n themes: {},\n views: [],\n plugin: function (widget) {\n kendo.ui.plugin(widget, kendo.dataviz.ui);\n }\n },\n roles: {}\n });\n kendo.touchScroller = function (elements, options) {\n if (!options) {\n options = {};\n }\n options.useNative = true;\n return $(elements).map(function (idx, element) {\n element = $(element);\n if (support.kineticScrollNeeded && kendo.mobile.ui.Scroller && !element.data('kendoMobileScroller')) {\n element.kendoMobileScroller(options);\n return element.data('kendoMobileScroller');\n } else {\n return false;\n }\n })[0];\n };\n kendo.preventDefault = function (e) {\n e.preventDefault();\n };\n kendo.widgetInstance = function (element, suites) {\n var role = element.data(kendo.ns + 'role'), widgets = [], i, length;\n if (role) {\n if (role === 'content') {\n role = 'scroller';\n }\n if (suites) {\n if (suites[0]) {\n for (i = 0, length = suites.length; i < length; i++) {\n widgets.push(suites[i].roles[role]);\n }\n } else {\n widgets.push(suites.roles[role]);\n }\n } else {\n widgets = [\n kendo.ui.roles[role],\n kendo.dataviz.ui.roles[role],\n kendo.mobile.ui.roles[role]\n ];\n }\n if (role.indexOf('.') >= 0) {\n widgets = [kendo.getter(role)(window)];\n }\n for (i = 0, length = widgets.length; i < length; i++) {\n var widget = widgets[i];\n if (widget) {\n var instance = element.data('kendo' + widget.fn.options.prefix + widget.fn.options.name);\n if (instance) {\n return instance;\n }\n }\n }\n }\n };\n kendo.onResize = function (callback) {\n var handler = callback;\n if (support.mobileOS.android) {\n handler = function () {\n setTimeout(callback, 600);\n };\n }\n $(window).on(support.resize, handler);\n return handler;\n };\n kendo.unbindResize = function (callback) {\n $(window).off(support.resize, callback);\n };\n kendo.attrValue = function (element, key) {\n return element.data(kendo.ns + key);\n };\n kendo.days = {\n Sunday: 0,\n Monday: 1,\n Tuesday: 2,\n Wednesday: 3,\n Thursday: 4,\n Friday: 5,\n Saturday: 6\n };\n function focusable(element, isTabIndexNotNaN) {\n var nodeName = element.nodeName.toLowerCase();\n return (/input|select|textarea|button|object/.test(nodeName) ? !element.disabled : 'a' === nodeName ? element.href || isTabIndexNotNaN : isTabIndexNotNaN) && visible(element);\n }\n function visible(element) {\n return $.expr.filters.visible(element) && !$(element).parents().addBack().filter(function () {\n return $.css(this, 'visibility') === 'hidden';\n }).length;\n }\n $.extend($.expr[':'], {\n kendoFocusable: function (element) {\n var idx = $.attr(element, 'tabindex');\n return focusable(element, !isNaN(idx) && idx > -1);\n }\n });\n var MOUSE_EVENTS = [\n 'mousedown',\n 'mousemove',\n 'mouseenter',\n 'mouseleave',\n 'mouseover',\n 'mouseout',\n 'mouseup',\n 'click'\n ];\n var EXCLUDE_BUST_CLICK_SELECTOR = 'label, input, [data-rel=external]';\n var MouseEventNormalizer = {\n setupMouseMute: function () {\n var idx = 0, length = MOUSE_EVENTS.length, element = document.documentElement;\n if (MouseEventNormalizer.mouseTrap || !support.eventCapture) {\n return;\n }\n MouseEventNormalizer.mouseTrap = true;\n MouseEventNormalizer.bustClick = false;\n MouseEventNormalizer.captureMouse = false;\n var handler = function (e) {\n if (MouseEventNormalizer.captureMouse) {\n if (e.type === 'click') {\n if (MouseEventNormalizer.bustClick && !$(e.target).is(EXCLUDE_BUST_CLICK_SELECTOR)) {\n e.preventDefault();\n e.stopPropagation();\n }\n } else {\n e.stopPropagation();\n }\n }\n };\n for (; idx < length; idx++) {\n element.addEventListener(MOUSE_EVENTS[idx], handler, true);\n }\n },\n muteMouse: function (e) {\n MouseEventNormalizer.captureMouse = true;\n if (e.data.bustClick) {\n MouseEventNormalizer.bustClick = true;\n }\n clearTimeout(MouseEventNormalizer.mouseTrapTimeoutID);\n },\n unMuteMouse: function () {\n clearTimeout(MouseEventNormalizer.mouseTrapTimeoutID);\n MouseEventNormalizer.mouseTrapTimeoutID = setTimeout(function () {\n MouseEventNormalizer.captureMouse = false;\n MouseEventNormalizer.bustClick = false;\n }, 400);\n }\n };\n var eventMap = {\n down: 'touchstart mousedown',\n move: 'mousemove touchmove',\n up: 'mouseup touchend touchcancel',\n cancel: 'mouseleave touchcancel'\n };\n if (support.touch && (support.mobileOS.ios || support.mobileOS.android)) {\n eventMap = {\n down: 'touchstart',\n move: 'touchmove',\n up: 'touchend touchcancel',\n cancel: 'touchcancel'\n };\n } else if (support.pointers) {\n eventMap = {\n down: 'pointerdown',\n move: 'pointermove',\n up: 'pointerup',\n cancel: 'pointercancel pointerleave'\n };\n } else if (support.msPointers) {\n eventMap = {\n down: 'MSPointerDown',\n move: 'MSPointerMove',\n up: 'MSPointerUp',\n cancel: 'MSPointerCancel MSPointerLeave'\n };\n }\n if (support.msPointers && !('onmspointerenter' in window)) {\n $.each({\n MSPointerEnter: 'MSPointerOver',\n MSPointerLeave: 'MSPointerOut'\n }, function (orig, fix) {\n $.event.special[orig] = {\n delegateType: fix,\n bindType: fix,\n handle: function (event) {\n var ret, target = this, related = event.relatedTarget, handleObj = event.handleObj;\n if (!related || related !== target && !$.contains(target, related)) {\n event.type = handleObj.origType;\n ret = handleObj.handler.apply(this, arguments);\n event.type = fix;\n }\n return ret;\n }\n };\n });\n }\n var getEventMap = function (e) {\n return eventMap[e] || e;\n }, eventRegEx = /([^ ]+)/g;\n kendo.applyEventMap = function (events, ns) {\n events = events.replace(eventRegEx, getEventMap);\n if (ns) {\n events = events.replace(eventRegEx, '$1.' + ns);\n }\n return events;\n };\n var on = $.fn.on;\n function kendoJQuery(selector, context) {\n return new kendoJQuery.fn.init(selector, context);\n }\n extend(true, kendoJQuery, $);\n kendoJQuery.fn = kendoJQuery.prototype = new $();\n kendoJQuery.fn.constructor = kendoJQuery;\n kendoJQuery.fn.init = function (selector, context) {\n if (context && context instanceof $ && !(context instanceof kendoJQuery)) {\n context = kendoJQuery(context);\n }\n return $.fn.init.call(this, selector, context, rootjQuery);\n };\n kendoJQuery.fn.init.prototype = kendoJQuery.fn;\n var rootjQuery = kendoJQuery(document);\n extend(kendoJQuery.fn, {\n handler: function (handler) {\n this.data('handler', handler);\n return this;\n },\n autoApplyNS: function (ns) {\n this.data('kendoNS', ns || kendo.guid());\n return this;\n },\n on: function () {\n var that = this, ns = that.data('kendoNS');\n if (arguments.length === 1) {\n return on.call(that, arguments[0]);\n }\n var context = that, args = slice.call(arguments);\n if (typeof args[args.length - 1] === UNDEFINED) {\n args.pop();\n }\n var callback = args[args.length - 1], events = kendo.applyEventMap(args[0], ns);\n if (support.mouseAndTouchPresent && events.search(/mouse|click/) > -1 && this[0] !== document.documentElement) {\n MouseEventNormalizer.setupMouseMute();\n var selector = args.length === 2 ? null : args[1], bustClick = events.indexOf('click') > -1 && events.indexOf('touchend') > -1;\n on.call(this, {\n touchstart: MouseEventNormalizer.muteMouse,\n touchend: MouseEventNormalizer.unMuteMouse\n }, selector, { bustClick: bustClick });\n }\n if (typeof callback === STRING) {\n context = that.data('handler');\n callback = context[callback];\n args[args.length - 1] = function (e) {\n callback.call(context, e);\n };\n }\n args[0] = events;\n on.apply(that, args);\n return that;\n },\n kendoDestroy: function (ns) {\n ns = ns || this.data('kendoNS');\n if (ns) {\n this.off('.' + ns);\n }\n return this;\n }\n });\n kendo.jQuery = kendoJQuery;\n kendo.eventMap = eventMap;\n kendo.timezone = function () {\n var months = {\n Jan: 0,\n Feb: 1,\n Mar: 2,\n Apr: 3,\n May: 4,\n Jun: 5,\n Jul: 6,\n Aug: 7,\n Sep: 8,\n Oct: 9,\n Nov: 10,\n Dec: 11\n };\n var days = {\n Sun: 0,\n Mon: 1,\n Tue: 2,\n Wed: 3,\n Thu: 4,\n Fri: 5,\n Sat: 6\n };\n function ruleToDate(year, rule) {\n var date;\n var targetDay;\n var ourDay;\n var month = rule[3];\n var on = rule[4];\n var time = rule[5];\n var cache = rule[8];\n if (!cache) {\n rule[8] = cache = {};\n }\n if (cache[year]) {\n return cache[year];\n }\n if (!isNaN(on)) {\n date = new Date(Date.UTC(year, months[month], on, time[0], time[1], time[2], 0));\n } else if (on.indexOf('last') === 0) {\n date = new Date(Date.UTC(year, months[month] + 1, 1, time[0] - 24, time[1], time[2], 0));\n targetDay = days[on.substr(4, 3)];\n ourDay = date.getUTCDay();\n date.setUTCDate(date.getUTCDate() + targetDay - ourDay - (targetDay > ourDay ? 7 : 0));\n } else if (on.indexOf('>=') >= 0) {\n date = new Date(Date.UTC(year, months[month], on.substr(5), time[0], time[1], time[2], 0));\n targetDay = days[on.substr(0, 3)];\n ourDay = date.getUTCDay();\n date.setUTCDate(date.getUTCDate() + targetDay - ourDay + (targetDay < ourDay ? 7 : 0));\n }\n return cache[year] = date;\n }\n function findRule(utcTime, rules, zone) {\n rules = rules[zone];\n if (!rules) {\n var time = zone.split(':');\n var offset = 0;\n if (time.length > 1) {\n offset = time[0] * 60 + Number(time[1]);\n }\n return [\n -1000000,\n 'max',\n '-',\n 'Jan',\n 1,\n [\n 0,\n 0,\n 0\n ],\n offset,\n '-'\n ];\n }\n var year = new Date(utcTime).getUTCFullYear();\n rules = jQuery.grep(rules, function (rule) {\n var from = rule[0];\n var to = rule[1];\n return from <= year && (to >= year || from == year && to == 'only' || to == 'max');\n });\n rules.push(utcTime);\n rules.sort(function (a, b) {\n if (typeof a != 'number') {\n a = Number(ruleToDate(year, a));\n }\n if (typeof b != 'number') {\n b = Number(ruleToDate(year, b));\n }\n return a - b;\n });\n var rule = rules[jQuery.inArray(utcTime, rules) - 1] || rules[rules.length - 1];\n return isNaN(rule) ? rule : null;\n }\n function findZone(utcTime, zones, timezone) {\n var zoneRules = zones[timezone];\n if (typeof zoneRules === 'string') {\n zoneRules = zones[zoneRules];\n }\n if (!zoneRules) {\n throw new Error('Timezone \"' + timezone + '\" is either incorrect, or kendo.timezones.min.js is not included.');\n }\n for (var idx = zoneRules.length - 1; idx >= 0; idx--) {\n var until = zoneRules[idx][3];\n if (until && utcTime > until) {\n break;\n }\n }\n var zone = zoneRules[idx + 1];\n if (!zone) {\n throw new Error('Timezone \"' + timezone + '\" not found on ' + utcTime + '.');\n }\n return zone;\n }\n function zoneAndRule(utcTime, zones, rules, timezone) {\n if (typeof utcTime != NUMBER) {\n utcTime = Date.UTC(utcTime.getFullYear(), utcTime.getMonth(), utcTime.getDate(), utcTime.getHours(), utcTime.getMinutes(), utcTime.getSeconds(), utcTime.getMilliseconds());\n }\n var zone = findZone(utcTime, zones, timezone);\n return {\n zone: zone,\n rule: findRule(utcTime, rules, zone[1])\n };\n }\n function offset(utcTime, timezone) {\n if (timezone == 'Etc/UTC' || timezone == 'Etc/GMT') {\n return 0;\n }\n var info = zoneAndRule(utcTime, this.zones, this.rules, timezone);\n var zone = info.zone;\n var rule = info.rule;\n return kendo.parseFloat(rule ? zone[0] - rule[6] : zone[0]);\n }\n function abbr(utcTime, timezone) {\n var info = zoneAndRule(utcTime, this.zones, this.rules, timezone);\n var zone = info.zone;\n var rule = info.rule;\n var base = zone[2];\n if (base.indexOf('/') >= 0) {\n return base.split('/')[rule && +rule[6] ? 1 : 0];\n } else if (base.indexOf('%s') >= 0) {\n return base.replace('%s', !rule || rule[7] == '-' ? '' : rule[7]);\n }\n return base;\n }\n function convert(date, fromOffset, toOffset) {\n if (typeof fromOffset == STRING) {\n fromOffset = this.offset(date, fromOffset);\n }\n if (typeof toOffset == STRING) {\n toOffset = this.offset(date, toOffset);\n }\n var fromLocalOffset = date.getTimezoneOffset();\n date = new Date(date.getTime() + (fromOffset - toOffset) * 60000);\n var toLocalOffset = date.getTimezoneOffset();\n return new Date(date.getTime() + (toLocalOffset - fromLocalOffset) * 60000);\n }\n function apply(date, timezone) {\n return this.convert(date, date.getTimezoneOffset(), timezone);\n }\n function remove(date, timezone) {\n return this.convert(date, timezone, date.getTimezoneOffset());\n }\n function toLocalDate(time) {\n return this.apply(new Date(time), 'Etc/UTC');\n }\n return {\n zones: {},\n rules: {},\n offset: offset,\n convert: convert,\n apply: apply,\n remove: remove,\n abbr: abbr,\n toLocalDate: toLocalDate\n };\n }();\n kendo.date = function () {\n var MS_PER_MINUTE = 60000, MS_PER_DAY = 86400000;\n function adjustDST(date, hours) {\n if (hours === 0 && date.getHours() === 23) {\n date.setHours(date.getHours() + 2);\n return true;\n }\n return false;\n }\n function setDayOfWeek(date, day, dir) {\n var hours = date.getHours();\n dir = dir || 1;\n day = (day - date.getDay() + 7 * dir) % 7;\n date.setDate(date.getDate() + day);\n adjustDST(date, hours);\n }\n function dayOfWeek(date, day, dir) {\n date = new Date(date);\n setDayOfWeek(date, day, dir);\n return date;\n }\n function firstDayOfMonth(date) {\n return new Date(date.getFullYear(), date.getMonth(), 1);\n }\n function lastDayOfMonth(date) {\n var last = new Date(date.getFullYear(), date.getMonth() + 1, 0), first = firstDayOfMonth(date), timeOffset = Math.abs(last.getTimezoneOffset() - first.getTimezoneOffset());\n if (timeOffset) {\n last.setHours(first.getHours() + timeOffset / 60);\n }\n return last;\n }\n function moveDateToWeekStart(date, weekStartDay) {\n if (weekStartDay !== 1) {\n return addDays(dayOfWeek(date, weekStartDay, -1), 4);\n }\n return addDays(date, 4 - (date.getDay() || 7));\n }\n function calcWeekInYear(date, weekStartDay) {\n var firstWeekInYear = new Date(date.getFullYear(), 0, 1, -6);\n var newDate = moveDateToWeekStart(date, weekStartDay);\n var diffInMS = newDate.getTime() - firstWeekInYear.getTime();\n var days = Math.floor(diffInMS / MS_PER_DAY);\n return 1 + Math.floor(days / 7);\n }\n function weekInYear(date, weekStartDay) {\n var prevWeekDate = addDays(date, -7);\n var nextWeekDate = addDays(date, 7);\n var weekNumber = calcWeekInYear(date, weekStartDay);\n if (weekNumber === 0) {\n return calcWeekInYear(prevWeekDate, weekStartDay) + 1;\n }\n if (weekNumber === 53 && calcWeekInYear(nextWeekDate, weekStartDay) > 1) {\n return 1;\n }\n return weekNumber;\n }\n function getDate(date) {\n date = new Date(date.getFullYear(), date.getMonth(), date.getDate(), 0, 0, 0);\n adjustDST(date, 0);\n return date;\n }\n function toUtcTime(date) {\n return Date.UTC(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds());\n }\n function getMilliseconds(date) {\n return date.getTime() - getDate(date);\n }\n function isInTimeRange(value, min, max) {\n var msMin = getMilliseconds(min), msMax = getMilliseconds(max), msValue;\n if (!value || msMin == msMax) {\n return true;\n }\n if (min >= max) {\n max += MS_PER_DAY;\n }\n msValue = getMilliseconds(value);\n if (msMin > msValue) {\n msValue += MS_PER_DAY;\n }\n if (msMax < msMin) {\n msMax += MS_PER_DAY;\n }\n return msValue >= msMin && msValue <= msMax;\n }\n function isInDateRange(value, min, max) {\n var msMin = min.getTime(), msMax = max.getTime(), msValue;\n if (msMin >= msMax) {\n msMax += MS_PER_DAY;\n }\n msValue = value.getTime();\n return msValue >= msMin && msValue <= msMax;\n }\n function addDays(date, offset) {\n var hours = date.getHours();\n date = new Date(date);\n setTime(date, offset * MS_PER_DAY);\n adjustDST(date, hours);\n return date;\n }\n function setTime(date, milliseconds, ignoreDST) {\n var offset = date.getTimezoneOffset();\n var difference;\n date.setTime(date.getTime() + milliseconds);\n if (!ignoreDST) {\n difference = date.getTimezoneOffset() - offset;\n date.setTime(date.getTime() + difference * MS_PER_MINUTE);\n }\n }\n function setHours(date, time) {\n date = new Date(kendo.date.getDate(date).getTime() + kendo.date.getMilliseconds(time));\n adjustDST(date, time.getHours());\n return date;\n }\n function today() {\n return getDate(new Date());\n }\n function isToday(date) {\n return getDate(date).getTime() == today().getTime();\n }\n function toInvariantTime(date) {\n var staticDate = new Date(1980, 1, 1, 0, 0, 0);\n if (date) {\n staticDate.setHours(date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds());\n }\n return staticDate;\n }\n return {\n adjustDST: adjustDST,\n dayOfWeek: dayOfWeek,\n setDayOfWeek: setDayOfWeek,\n getDate: getDate,\n isInDateRange: isInDateRange,\n isInTimeRange: isInTimeRange,\n isToday: isToday,\n nextDay: function (date) {\n return addDays(date, 1);\n },\n previousDay: function (date) {\n return addDays(date, -1);\n },\n toUtcTime: toUtcTime,\n MS_PER_DAY: MS_PER_DAY,\n MS_PER_HOUR: 60 * MS_PER_MINUTE,\n MS_PER_MINUTE: MS_PER_MINUTE,\n setTime: setTime,\n setHours: setHours,\n addDays: addDays,\n today: today,\n toInvariantTime: toInvariantTime,\n firstDayOfMonth: firstDayOfMonth,\n lastDayOfMonth: lastDayOfMonth,\n weekInYear: weekInYear,\n getMilliseconds: getMilliseconds\n };\n }();\n kendo.stripWhitespace = function (element) {\n if (document.createNodeIterator) {\n var iterator = document.createNodeIterator(element, NodeFilter.SHOW_TEXT, function (node) {\n return node.parentNode == element ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_REJECT;\n }, false);\n while (iterator.nextNode()) {\n if (iterator.referenceNode && !iterator.referenceNode.textContent.trim()) {\n iterator.referenceNode.parentNode.removeChild(iterator.referenceNode);\n }\n }\n } else {\n for (var i = 0; i < element.childNodes.length; i++) {\n var child = element.childNodes[i];\n if (child.nodeType == 3 && !/\\S/.test(child.nodeValue)) {\n element.removeChild(child);\n i--;\n }\n if (child.nodeType == 1) {\n kendo.stripWhitespace(child);\n }\n }\n }\n };\n var animationFrame = window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame || function (callback) {\n setTimeout(callback, 1000 / 60);\n };\n kendo.animationFrame = function (callback) {\n animationFrame.call(window, callback);\n };\n var animationQueue = [];\n kendo.queueAnimation = function (callback) {\n animationQueue[animationQueue.length] = callback;\n if (animationQueue.length === 1) {\n kendo.runNextAnimation();\n }\n };\n kendo.runNextAnimation = function () {\n kendo.animationFrame(function () {\n if (animationQueue[0]) {\n animationQueue.shift()();\n if (animationQueue[0]) {\n kendo.runNextAnimation();\n }\n }\n });\n };\n kendo.parseQueryStringParams = function (url) {\n var queryString = url.split('?')[1] || '', params = {}, paramParts = queryString.split(/&|=/), length = paramParts.length, idx = 0;\n for (; idx < length; idx += 2) {\n if (paramParts[idx] !== '') {\n params[decodeURIComponent(paramParts[idx])] = decodeURIComponent(paramParts[idx + 1]);\n }\n }\n return params;\n };\n kendo.elementUnderCursor = function (e) {\n if (typeof e.x.client != 'undefined') {\n return document.elementFromPoint(e.x.client, e.y.client);\n }\n };\n kendo.wheelDeltaY = function (jQueryEvent) {\n var e = jQueryEvent.originalEvent, deltaY = e.wheelDeltaY, delta;\n if (e.wheelDelta) {\n if (deltaY === undefined || deltaY) {\n delta = e.wheelDelta;\n }\n } else if (e.detail && e.axis === e.VERTICAL_AXIS) {\n delta = -e.detail * 10;\n }\n return delta;\n };\n kendo.throttle = function (fn, delay) {\n var timeout;\n var lastExecTime = 0;\n if (!delay || delay <= 0) {\n return fn;\n }\n var throttled = function () {\n var that = this;\n var elapsed = +new Date() - lastExecTime;\n var args = arguments;\n function exec() {\n fn.apply(that, args);\n lastExecTime = +new Date();\n }\n if (!lastExecTime) {\n return exec();\n }\n if (timeout) {\n clearTimeout(timeout);\n }\n if (elapsed > delay) {\n exec();\n } else {\n timeout = setTimeout(exec, delay - elapsed);\n }\n };\n throttled.cancel = function () {\n clearTimeout(timeout);\n };\n return throttled;\n };\n kendo.caret = function (element, start, end) {\n var rangeElement;\n var isPosition = start !== undefined;\n if (end === undefined) {\n end = start;\n }\n if (element[0]) {\n element = element[0];\n }\n if (isPosition && element.disabled) {\n return;\n }\n try {\n if (element.selectionStart !== undefined) {\n if (isPosition) {\n element.focus();\n var mobile = support.mobileOS;\n if (mobile.wp || mobile.android) {\n setTimeout(function () {\n element.setSelectionRange(start, end);\n }, 0);\n } else {\n element.setSelectionRange(start, end);\n }\n } else {\n start = [\n element.selectionStart,\n element.selectionEnd\n ];\n }\n } else if (document.selection) {\n if ($(element).is(':visible')) {\n element.focus();\n }\n rangeElement = element.createTextRange();\n if (isPosition) {\n rangeElement.collapse(true);\n rangeElement.moveStart('character', start);\n rangeElement.moveEnd('character', end - start);\n rangeElement.select();\n } else {\n var rangeDuplicated = rangeElement.duplicate(), selectionStart, selectionEnd;\n rangeElement.moveToBookmark(document.selection.createRange().getBookmark());\n rangeDuplicated.setEndPoint('EndToStart', rangeElement);\n selectionStart = rangeDuplicated.text.length;\n selectionEnd = selectionStart + rangeElement.text.length;\n start = [\n selectionStart,\n selectionEnd\n ];\n }\n }\n } catch (e) {\n start = [];\n }\n return start;\n };\n kendo.compileMobileDirective = function (element, scope) {\n var angular = window.angular;\n element.attr('data-' + kendo.ns + 'role', element[0].tagName.toLowerCase().replace('kendo-mobile-', '').replace('-', ''));\n angular.element(element).injector().invoke([\n '$compile',\n function ($compile) {\n $compile(element)(scope);\n if (!/^\\$(digest|apply)$/.test(scope.$$phase)) {\n scope.$digest();\n }\n }\n ]);\n return kendo.widgetInstance(element, kendo.mobile.ui);\n };\n kendo.antiForgeryTokens = function () {\n var tokens = {}, csrf_token = $('meta[name=csrf-token],meta[name=_csrf]').attr('content'), csrf_param = $('meta[name=csrf-param],meta[name=_csrf_header]').attr('content');\n $('input[name^=\\'__RequestVerificationToken\\']').each(function () {\n tokens[this.name] = this.value;\n });\n if (csrf_param !== undefined && csrf_token !== undefined) {\n tokens[csrf_param] = csrf_token;\n }\n return tokens;\n };\n kendo.cycleForm = function (form) {\n var firstElement = form.find('input, .k-widget').first();\n var lastElement = form.find('button, .k-button').last();\n function focus(el) {\n var widget = kendo.widgetInstance(el);\n if (widget && widget.focus) {\n widget.focus();\n } else {\n el.focus();\n }\n }\n lastElement.on('keydown', function (e) {\n if (e.keyCode == kendo.keys.TAB && !e.shiftKey) {\n e.preventDefault();\n focus(firstElement);\n }\n });\n firstElement.on('keydown', function (e) {\n if (e.keyCode == kendo.keys.TAB && e.shiftKey) {\n e.preventDefault();\n focus(lastElement);\n }\n });\n };\n (function () {\n function postToProxy(dataURI, fileName, proxyURL, proxyTarget) {\n var form = $('
').attr({\n action: proxyURL,\n method: 'POST',\n target: proxyTarget\n });\n var data = kendo.antiForgeryTokens();\n data.fileName = fileName;\n var parts = dataURI.split(';base64,');\n data.contentType = parts[0].replace('data:', '');\n data.base64 = parts[1];\n for (var name in data) {\n if (data.hasOwnProperty(name)) {\n $('').attr({\n value: data[name],\n name: name,\n type: 'hidden'\n }).appendTo(form);\n }\n }\n form.appendTo('body').submit().remove();\n }\n var fileSaver = document.createElement('a');\n var downloadAttribute = 'download' in fileSaver && !kendo.support.browser.edge;\n function saveAsBlob(dataURI, fileName) {\n var blob = dataURI;\n if (typeof dataURI == 'string') {\n var parts = dataURI.split(';base64,');\n var contentType = parts[0];\n var base64 = atob(parts[1]);\n var array = new Uint8Array(base64.length);\n for (var idx = 0; idx < base64.length; idx++) {\n array[idx] = base64.charCodeAt(idx);\n }\n blob = new Blob([array.buffer], { type: contentType });\n }\n navigator.msSaveBlob(blob, fileName);\n }\n function saveAsDataURI(dataURI, fileName) {\n if (window.Blob && dataURI instanceof Blob) {\n dataURI = URL.createObjectURL(dataURI);\n }\n fileSaver.download = fileName;\n fileSaver.href = dataURI;\n var e = document.createEvent('MouseEvents');\n e.initMouseEvent('click', true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);\n fileSaver.dispatchEvent(e);\n setTimeout(function () {\n URL.revokeObjectURL(dataURI);\n });\n }\n kendo.saveAs = function (options) {\n var save = postToProxy;\n if (!options.forceProxy) {\n if (downloadAttribute) {\n save = saveAsDataURI;\n } else if (navigator.msSaveBlob) {\n save = saveAsBlob;\n }\n }\n save(options.dataURI, options.fileName, options.proxyURL, options.proxyTarget);\n };\n }());\n kendo.proxyModelSetters = function proxyModelSetters(data) {\n var observable = {};\n Object.keys(data || {}).forEach(function (property) {\n Object.defineProperty(observable, property, {\n get: function () {\n return data[property];\n },\n set: function (value) {\n data[property] = value;\n data.dirty = true;\n }\n });\n });\n return observable;\n };\n }(jQuery, window));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.router', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'router',\n name: 'Router',\n category: 'framework',\n description: 'The Router class is responsible for tracking the application state and navigating between the application states.',\n depends: ['core'],\n hidden: false\n };\n (function ($, undefined) {\n var kendo = window.kendo, CHANGE = 'change', BACK = 'back', SAME = 'same', support = kendo.support, location = window.location, history = window.history, CHECK_URL_INTERVAL = 50, BROKEN_BACK_NAV = kendo.support.browser.msie, hashStrip = /^#*/, document = window.document;\n function absoluteURL(path, pathPrefix) {\n if (!pathPrefix) {\n return path;\n }\n if (path + '/' === pathPrefix) {\n path = pathPrefix;\n }\n var regEx = new RegExp('^' + pathPrefix, 'i');\n if (!regEx.test(path)) {\n path = pathPrefix + '/' + path;\n }\n return location.protocol + '//' + (location.host + '/' + path).replace(/\\/\\/+/g, '/');\n }\n function hashDelimiter(bang) {\n return bang ? '#!' : '#';\n }\n function locationHash(hashDelimiter) {\n var href = location.href;\n if (hashDelimiter === '#!' && href.indexOf('#') > -1 && href.indexOf('#!') < 0) {\n return null;\n }\n return href.split(hashDelimiter)[1] || '';\n }\n function stripRoot(root, url) {\n if (url.indexOf(root) === 0) {\n return url.substr(root.length).replace(/\\/\\//g, '/');\n } else {\n return url;\n }\n }\n var HistoryAdapter = kendo.Class.extend({\n back: function () {\n if (BROKEN_BACK_NAV) {\n setTimeout(function () {\n history.back();\n });\n } else {\n history.back();\n }\n },\n forward: function () {\n if (BROKEN_BACK_NAV) {\n setTimeout(function () {\n history.forward();\n });\n } else {\n history.forward();\n }\n },\n length: function () {\n return history.length;\n },\n replaceLocation: function (url) {\n location.replace(url);\n }\n });\n var PushStateAdapter = HistoryAdapter.extend({\n init: function (root) {\n this.root = root;\n },\n navigate: function (to) {\n history.pushState({}, document.title, absoluteURL(to, this.root));\n },\n replace: function (to) {\n history.replaceState({}, document.title, absoluteURL(to, this.root));\n },\n normalize: function (url) {\n return stripRoot(this.root, url);\n },\n current: function () {\n var current = location.pathname;\n if (location.search) {\n current += location.search;\n }\n return stripRoot(this.root, current);\n },\n change: function (callback) {\n $(window).bind('popstate.kendo', callback);\n },\n stop: function () {\n $(window).unbind('popstate.kendo');\n },\n normalizeCurrent: function (options) {\n var fixedUrl, root = options.root, pathname = location.pathname, hash = locationHash(hashDelimiter(options.hashBang));\n if (root === pathname + '/') {\n fixedUrl = root;\n }\n if (root === pathname && hash) {\n fixedUrl = absoluteURL(hash.replace(hashStrip, ''), root);\n }\n if (fixedUrl) {\n history.pushState({}, document.title, fixedUrl);\n }\n }\n });\n function fixHash(url) {\n return url.replace(/^(#)?/, '#');\n }\n function fixBang(url) {\n return url.replace(/^(#(!)?)?/, '#!');\n }\n var HashAdapter = HistoryAdapter.extend({\n init: function (bang) {\n this._id = kendo.guid();\n this.prefix = hashDelimiter(bang);\n this.fix = bang ? fixBang : fixHash;\n },\n navigate: function (to) {\n location.hash = this.fix(to);\n },\n replace: function (to) {\n this.replaceLocation(this.fix(to));\n },\n normalize: function (url) {\n if (url.indexOf(this.prefix) < 0) {\n return url;\n } else {\n return url.split(this.prefix)[1];\n }\n },\n change: function (callback) {\n if (support.hashChange) {\n $(window).on('hashchange.' + this._id, callback);\n } else {\n this._interval = setInterval(callback, CHECK_URL_INTERVAL);\n }\n },\n stop: function () {\n $(window).off('hashchange.' + this._id);\n clearInterval(this._interval);\n },\n current: function () {\n return locationHash(this.prefix);\n },\n normalizeCurrent: function (options) {\n var pathname = location.pathname, root = options.root;\n if (options.pushState && root !== pathname) {\n this.replaceLocation(root + this.prefix + stripRoot(root, pathname));\n return true;\n }\n return false;\n }\n });\n var History = kendo.Observable.extend({\n start: function (options) {\n options = options || {};\n this.bind([\n CHANGE,\n BACK,\n SAME\n ], options);\n if (this._started) {\n return;\n }\n this._started = true;\n options.root = options.root || '/';\n var adapter = this.createAdapter(options), current;\n if (adapter.normalizeCurrent(options)) {\n return;\n }\n current = adapter.current();\n $.extend(this, {\n adapter: adapter,\n root: options.root,\n historyLength: adapter.length(),\n current: current,\n locations: [current]\n });\n adapter.change($.proxy(this, '_checkUrl'));\n },\n createAdapter: function (options) {\n return support.pushState && options.pushState ? new PushStateAdapter(options.root) : new HashAdapter(options.hashBang);\n },\n stop: function () {\n if (!this._started) {\n return;\n }\n this.adapter.stop();\n this.unbind(CHANGE);\n this._started = false;\n },\n change: function (callback) {\n this.bind(CHANGE, callback);\n },\n replace: function (to, silent) {\n this._navigate(to, silent, function (adapter) {\n adapter.replace(to);\n this.locations[this.locations.length - 1] = this.current;\n });\n },\n navigate: function (to, silent) {\n if (to === '#:back') {\n this.backCalled = true;\n this.adapter.back();\n return;\n }\n this._navigate(to, silent, function (adapter) {\n adapter.navigate(to);\n this.locations.push(this.current);\n });\n },\n _navigate: function (to, silent, callback) {\n var adapter = this.adapter;\n to = adapter.normalize(to);\n if (this.current === to || this.current === decodeURIComponent(to)) {\n this.trigger(SAME);\n return;\n }\n if (!silent) {\n if (this.trigger(CHANGE, {\n url: to,\n decode: false\n })) {\n return;\n }\n }\n this.current = to;\n callback.call(this, adapter);\n this.historyLength = adapter.length();\n },\n _checkUrl: function () {\n var adapter = this.adapter, current = adapter.current(), newLength = adapter.length(), navigatingInExisting = this.historyLength === newLength, back = current === this.locations[this.locations.length - 2] && navigatingInExisting, backCalled = this.backCalled, prev = this.current;\n if (current === null || this.current === current || this.current === decodeURIComponent(current)) {\n return true;\n }\n this.historyLength = newLength;\n this.backCalled = false;\n this.current = current;\n if (back && this.trigger('back', {\n url: prev,\n to: current\n })) {\n adapter.forward();\n this.current = prev;\n return;\n }\n if (this.trigger(CHANGE, {\n url: current,\n backButtonPressed: !backCalled\n })) {\n if (back) {\n adapter.forward();\n } else {\n adapter.back();\n this.historyLength--;\n }\n this.current = prev;\n return;\n }\n if (back) {\n this.locations.pop();\n } else {\n this.locations.push(current);\n }\n }\n });\n kendo.History = History;\n kendo.History.HistoryAdapter = HistoryAdapter;\n kendo.History.HashAdapter = HashAdapter;\n kendo.History.PushStateAdapter = PushStateAdapter;\n kendo.absoluteURL = absoluteURL;\n kendo.history = new History();\n }(window.kendo.jQuery));\n (function () {\n var kendo = window.kendo, history = kendo.history, Observable = kendo.Observable, INIT = 'init', ROUTE_MISSING = 'routeMissing', CHANGE = 'change', BACK = 'back', SAME = 'same', optionalParam = /\\((.*?)\\)/g, namedParam = /(\\(\\?)?:\\w+/g, splatParam = /\\*\\w+/g, escapeRegExp = /[\\-{}\\[\\]+?.,\\\\\\^$|#\\s]/g;\n function namedParamReplace(match, optional) {\n return optional ? match : '([^/]+)';\n }\n function routeToRegExp(route, ignoreCase) {\n return new RegExp('^' + route.replace(escapeRegExp, '\\\\$&').replace(optionalParam, '(?:$1)?').replace(namedParam, namedParamReplace).replace(splatParam, '(.*?)') + '$', ignoreCase ? 'i' : '');\n }\n function stripUrl(url) {\n return url.replace(/(\\?.*)|(#.*)/g, '');\n }\n var Route = kendo.Class.extend({\n init: function (route, callback, ignoreCase) {\n if (!(route instanceof RegExp)) {\n route = routeToRegExp(route, ignoreCase);\n }\n this.route = route;\n this._callback = callback;\n },\n callback: function (url, back, decode) {\n var params, idx = 0, length, queryStringParams = kendo.parseQueryStringParams(url);\n queryStringParams._back = back;\n url = stripUrl(url);\n params = this.route.exec(url).slice(1);\n length = params.length;\n if (decode) {\n for (; idx < length; idx++) {\n if (typeof params[idx] !== 'undefined') {\n params[idx] = decodeURIComponent(params[idx]);\n }\n }\n }\n params.push(queryStringParams);\n this._callback.apply(null, params);\n },\n worksWith: function (url, back, decode) {\n if (this.route.test(stripUrl(url))) {\n this.callback(url, back, decode);\n return true;\n } else {\n return false;\n }\n }\n });\n var Router = Observable.extend({\n init: function (options) {\n if (!options) {\n options = {};\n }\n Observable.fn.init.call(this);\n this.routes = [];\n this.pushState = options.pushState;\n this.hashBang = options.hashBang;\n this.root = options.root;\n this.ignoreCase = options.ignoreCase !== false;\n this.bind([\n INIT,\n ROUTE_MISSING,\n CHANGE,\n SAME\n ], options);\n },\n destroy: function () {\n history.unbind(CHANGE, this._urlChangedProxy);\n history.unbind(SAME, this._sameProxy);\n history.unbind(BACK, this._backProxy);\n this.unbind();\n },\n start: function () {\n var that = this, sameProxy = function () {\n that._same();\n }, backProxy = function (e) {\n that._back(e);\n }, urlChangedProxy = function (e) {\n that._urlChanged(e);\n };\n history.start({\n same: sameProxy,\n change: urlChangedProxy,\n back: backProxy,\n pushState: that.pushState,\n hashBang: that.hashBang,\n root: that.root\n });\n var initEventObject = {\n url: history.current || '/',\n preventDefault: $.noop\n };\n if (!that.trigger(INIT, initEventObject)) {\n that._urlChanged(initEventObject);\n }\n this._urlChangedProxy = urlChangedProxy;\n this._backProxy = backProxy;\n },\n route: function (route, callback) {\n this.routes.push(new Route(route, callback, this.ignoreCase));\n },\n navigate: function (url, silent) {\n kendo.history.navigate(url, silent);\n },\n replace: function (url, silent) {\n kendo.history.replace(url, silent);\n },\n _back: function (e) {\n if (this.trigger(BACK, {\n url: e.url,\n to: e.to\n })) {\n e.preventDefault();\n }\n },\n _same: function () {\n this.trigger(SAME);\n },\n _urlChanged: function (e) {\n var url = e.url;\n var decode = typeof e.decode === 'undefined';\n var back = e.backButtonPressed;\n if (!url) {\n url = '/';\n }\n if (this.trigger(CHANGE, {\n url: e.url,\n params: kendo.parseQueryStringParams(e.url),\n backButtonPressed: back\n })) {\n e.preventDefault();\n return;\n }\n var idx = 0, routes = this.routes, route, length = routes.length;\n for (; idx < length; idx++) {\n route = routes[idx];\n if (route.worksWith(url, back, decode)) {\n return;\n }\n }\n if (this.trigger(ROUTE_MISSING, {\n url: url,\n params: kendo.parseQueryStringParams(url),\n backButtonPressed: back\n })) {\n e.preventDefault();\n }\n }\n });\n kendo.Router = Router;\n }());\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.userevents', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'userevents',\n name: 'User Events',\n category: 'framework',\n depends: ['core'],\n hidden: true\n };\n (function ($, undefined) {\n var kendo = window.kendo, support = kendo.support, Class = kendo.Class, Observable = kendo.Observable, now = $.now, extend = $.extend, OS = support.mobileOS, invalidZeroEvents = OS && OS.android, DEFAULT_MIN_HOLD = 800, DEFAULT_THRESHOLD = support.browser.msie ? 5 : 0, PRESS = 'press', HOLD = 'hold', SELECT = 'select', START = 'start', MOVE = 'move', END = 'end', CANCEL = 'cancel', TAP = 'tap', RELEASE = 'release', GESTURESTART = 'gesturestart', GESTURECHANGE = 'gesturechange', GESTUREEND = 'gestureend', GESTURETAP = 'gesturetap';\n var THRESHOLD = {\n 'api': 0,\n 'touch': 0,\n 'mouse': 9,\n 'pointer': 9\n };\n var ENABLE_GLOBAL_SURFACE = !support.touch || support.mouseAndTouchPresent;\n function touchDelta(touch1, touch2) {\n var x1 = touch1.x.location, y1 = touch1.y.location, x2 = touch2.x.location, y2 = touch2.y.location, dx = x1 - x2, dy = y1 - y2;\n return {\n center: {\n x: (x1 + x2) / 2,\n y: (y1 + y2) / 2\n },\n distance: Math.sqrt(dx * dx + dy * dy)\n };\n }\n function getTouches(e) {\n var touches = [], originalEvent = e.originalEvent, currentTarget = e.currentTarget, idx = 0, length, changedTouches, touch;\n if (e.api) {\n touches.push({\n id: 2,\n event: e,\n target: e.target,\n currentTarget: e.target,\n location: e,\n type: 'api'\n });\n } else if (e.type.match(/touch/)) {\n changedTouches = originalEvent ? originalEvent.changedTouches : [];\n for (length = changedTouches.length; idx < length; idx++) {\n touch = changedTouches[idx];\n touches.push({\n location: touch,\n event: e,\n target: touch.target,\n currentTarget: currentTarget,\n id: touch.identifier,\n type: 'touch'\n });\n }\n } else if (support.pointers || support.msPointers) {\n touches.push({\n location: originalEvent,\n event: e,\n target: e.target,\n currentTarget: currentTarget,\n id: originalEvent.pointerId,\n type: 'pointer'\n });\n } else {\n touches.push({\n id: 1,\n event: e,\n target: e.target,\n currentTarget: currentTarget,\n location: e,\n type: 'mouse'\n });\n }\n return touches;\n }\n var TouchAxis = Class.extend({\n init: function (axis, location) {\n var that = this;\n that.axis = axis;\n that._updateLocationData(location);\n that.startLocation = that.location;\n that.velocity = that.delta = 0;\n that.timeStamp = now();\n },\n move: function (location) {\n var that = this, offset = location['page' + that.axis], timeStamp = now(), timeDelta = timeStamp - that.timeStamp || 1;\n if (!offset && invalidZeroEvents) {\n return;\n }\n that.delta = offset - that.location;\n that._updateLocationData(location);\n that.initialDelta = offset - that.startLocation;\n that.velocity = that.delta / timeDelta;\n that.timeStamp = timeStamp;\n },\n _updateLocationData: function (location) {\n var that = this, axis = that.axis;\n that.location = location['page' + axis];\n that.client = location['client' + axis];\n that.screen = location['screen' + axis];\n }\n });\n var Touch = Class.extend({\n init: function (userEvents, target, touchInfo) {\n extend(this, {\n x: new TouchAxis('X', touchInfo.location),\n y: new TouchAxis('Y', touchInfo.location),\n type: touchInfo.type,\n useClickAsTap: userEvents.useClickAsTap,\n threshold: userEvents.threshold || THRESHOLD[touchInfo.type],\n userEvents: userEvents,\n target: target,\n currentTarget: touchInfo.currentTarget,\n initialTouch: touchInfo.target,\n id: touchInfo.id,\n pressEvent: touchInfo,\n _moved: false,\n _finished: false\n });\n },\n press: function () {\n this._holdTimeout = setTimeout($.proxy(this, '_hold'), this.userEvents.minHold);\n this._trigger(PRESS, this.pressEvent);\n },\n _hold: function () {\n this._trigger(HOLD, this.pressEvent);\n },\n move: function (touchInfo) {\n var that = this;\n if (that._finished) {\n return;\n }\n that.x.move(touchInfo.location);\n that.y.move(touchInfo.location);\n if (!that._moved) {\n if (that._withinIgnoreThreshold()) {\n return;\n }\n if (!UserEvents.current || UserEvents.current === that.userEvents) {\n that._start(touchInfo);\n } else {\n return that.dispose();\n }\n }\n if (!that._finished) {\n that._trigger(MOVE, touchInfo);\n }\n },\n end: function (touchInfo) {\n this.endTime = now();\n if (this._finished) {\n return;\n }\n this._finished = true;\n this._trigger(RELEASE, touchInfo);\n if (this._moved) {\n this._trigger(END, touchInfo);\n } else {\n if (!this.useClickAsTap) {\n this._trigger(TAP, touchInfo);\n }\n }\n clearTimeout(this._holdTimeout);\n this.dispose();\n },\n dispose: function () {\n var userEvents = this.userEvents, activeTouches = userEvents.touches;\n this._finished = true;\n this.pressEvent = null;\n clearTimeout(this._holdTimeout);\n activeTouches.splice($.inArray(this, activeTouches), 1);\n },\n skip: function () {\n this.dispose();\n },\n cancel: function () {\n this.dispose();\n },\n isMoved: function () {\n return this._moved;\n },\n _start: function (touchInfo) {\n clearTimeout(this._holdTimeout);\n this.startTime = now();\n this._moved = true;\n this._trigger(START, touchInfo);\n },\n _trigger: function (name, touchInfo) {\n var that = this, jQueryEvent = touchInfo.event, data = {\n touch: that,\n x: that.x,\n y: that.y,\n target: that.target,\n event: jQueryEvent\n };\n if (that.userEvents.notify(name, data)) {\n jQueryEvent.preventDefault();\n }\n },\n _withinIgnoreThreshold: function () {\n var xDelta = this.x.initialDelta, yDelta = this.y.initialDelta;\n return Math.sqrt(xDelta * xDelta + yDelta * yDelta) <= this.threshold;\n }\n });\n function withEachUpEvent(callback) {\n var downEvents = kendo.eventMap.up.split(' '), idx = 0, length = downEvents.length;\n for (; idx < length; idx++) {\n callback(downEvents[idx]);\n }\n }\n var UserEvents = Observable.extend({\n init: function (element, options) {\n var that = this, filter, ns = kendo.guid();\n options = options || {};\n filter = that.filter = options.filter;\n that.threshold = options.threshold || DEFAULT_THRESHOLD;\n that.minHold = options.minHold || DEFAULT_MIN_HOLD;\n that.touches = [];\n that._maxTouches = options.multiTouch ? 2 : 1;\n that.allowSelection = options.allowSelection;\n that.captureUpIfMoved = options.captureUpIfMoved;\n that.useClickAsTap = !options.fastTap && !support.delayedClick();\n that.eventNS = ns;\n element = $(element).handler(that);\n Observable.fn.init.call(that);\n extend(that, {\n element: element,\n surface: options.global && ENABLE_GLOBAL_SURFACE ? $(element[0].ownerDocument.documentElement) : $(options.surface || element),\n stopPropagation: options.stopPropagation,\n pressed: false\n });\n that.surface.handler(that).on(kendo.applyEventMap('move', ns), '_move').on(kendo.applyEventMap('up cancel', ns), '_end');\n element.on(kendo.applyEventMap('down', ns), filter, '_start');\n if (that.useClickAsTap) {\n element.on(kendo.applyEventMap('click', ns), filter, '_click');\n }\n if (support.pointers || support.msPointers) {\n if (support.browser.version < 11) {\n element.css('-ms-touch-action', 'pinch-zoom double-tap-zoom');\n } else {\n element.css('touch-action', options.touchAction || 'none');\n }\n }\n if (options.preventDragEvent) {\n element.on(kendo.applyEventMap('dragstart', ns), kendo.preventDefault);\n }\n element.on(kendo.applyEventMap('mousedown', ns), filter, { root: element }, '_select');\n if (that.captureUpIfMoved && support.eventCapture) {\n var surfaceElement = that.surface[0], preventIfMovingProxy = $.proxy(that.preventIfMoving, that);\n withEachUpEvent(function (eventName) {\n surfaceElement.addEventListener(eventName, preventIfMovingProxy, true);\n });\n }\n that.bind([\n PRESS,\n HOLD,\n TAP,\n START,\n MOVE,\n END,\n RELEASE,\n CANCEL,\n GESTURESTART,\n GESTURECHANGE,\n GESTUREEND,\n GESTURETAP,\n SELECT\n ], options);\n },\n preventIfMoving: function (e) {\n if (this._isMoved()) {\n e.preventDefault();\n }\n },\n destroy: function () {\n var that = this;\n if (that._destroyed) {\n return;\n }\n that._destroyed = true;\n if (that.captureUpIfMoved && support.eventCapture) {\n var surfaceElement = that.surface[0];\n withEachUpEvent(function (eventName) {\n surfaceElement.removeEventListener(eventName, that.preventIfMoving);\n });\n }\n that.element.kendoDestroy(that.eventNS);\n that.surface.kendoDestroy(that.eventNS);\n that.element.removeData('handler');\n that.surface.removeData('handler');\n that._disposeAll();\n that.unbind();\n delete that.surface;\n delete that.element;\n delete that.currentTarget;\n },\n capture: function () {\n UserEvents.current = this;\n },\n cancel: function () {\n this._disposeAll();\n this.trigger(CANCEL);\n },\n notify: function (eventName, data) {\n var that = this, touches = that.touches;\n if (this._isMultiTouch()) {\n switch (eventName) {\n case MOVE:\n eventName = GESTURECHANGE;\n break;\n case END:\n eventName = GESTUREEND;\n break;\n case TAP:\n eventName = GESTURETAP;\n break;\n }\n extend(data, { touches: touches }, touchDelta(touches[0], touches[1]));\n }\n return this.trigger(eventName, extend(data, { type: eventName }));\n },\n press: function (x, y, target) {\n this._apiCall('_start', x, y, target);\n },\n move: function (x, y) {\n this._apiCall('_move', x, y);\n },\n end: function (x, y) {\n this._apiCall('_end', x, y);\n },\n _isMultiTouch: function () {\n return this.touches.length > 1;\n },\n _maxTouchesReached: function () {\n return this.touches.length >= this._maxTouches;\n },\n _disposeAll: function () {\n var touches = this.touches;\n while (touches.length > 0) {\n touches.pop().dispose();\n }\n },\n _isMoved: function () {\n return $.grep(this.touches, function (touch) {\n return touch.isMoved();\n }).length;\n },\n _select: function (e) {\n if (!this.allowSelection || this.trigger(SELECT, { event: e })) {\n e.preventDefault();\n }\n },\n _start: function (e) {\n var that = this, idx = 0, filter = that.filter, target, touches = getTouches(e), length = touches.length, touch, which = e.which;\n if (which && which > 1 || that._maxTouchesReached()) {\n return;\n }\n UserEvents.current = null;\n that.currentTarget = e.currentTarget;\n if (that.stopPropagation) {\n e.stopPropagation();\n }\n for (; idx < length; idx++) {\n if (that._maxTouchesReached()) {\n break;\n }\n touch = touches[idx];\n if (filter) {\n target = $(touch.currentTarget);\n } else {\n target = that.element;\n }\n if (!target.length) {\n continue;\n }\n touch = new Touch(that, target, touch);\n that.touches.push(touch);\n touch.press();\n if (that._isMultiTouch()) {\n that.notify('gesturestart', {});\n }\n }\n },\n _move: function (e) {\n this._eachTouch('move', e);\n },\n _end: function (e) {\n this._eachTouch('end', e);\n },\n _click: function (e) {\n var data = {\n touch: {\n initialTouch: e.target,\n target: $(e.currentTarget),\n endTime: now(),\n x: {\n location: e.pageX,\n client: e.clientX\n },\n y: {\n location: e.pageY,\n client: e.clientY\n }\n },\n x: e.pageX,\n y: e.pageY,\n target: $(e.currentTarget),\n event: e,\n type: 'tap'\n };\n if (this.trigger('tap', data)) {\n e.preventDefault();\n }\n },\n _eachTouch: function (methodName, e) {\n var that = this, dict = {}, touches = getTouches(e), activeTouches = that.touches, idx, touch, touchInfo, matchingTouch;\n for (idx = 0; idx < activeTouches.length; idx++) {\n touch = activeTouches[idx];\n dict[touch.id] = touch;\n }\n for (idx = 0; idx < touches.length; idx++) {\n touchInfo = touches[idx];\n matchingTouch = dict[touchInfo.id];\n if (matchingTouch) {\n matchingTouch[methodName](touchInfo);\n }\n }\n },\n _apiCall: function (type, x, y, target) {\n this[type]({\n api: true,\n pageX: x,\n pageY: y,\n clientX: x,\n clientY: y,\n target: $(target || this.element)[0],\n stopPropagation: $.noop,\n preventDefault: $.noop\n });\n }\n });\n UserEvents.defaultThreshold = function (value) {\n DEFAULT_THRESHOLD = value;\n };\n UserEvents.minHold = function (value) {\n DEFAULT_MIN_HOLD = value;\n };\n kendo.getTouches = getTouches;\n kendo.touchDelta = touchDelta;\n kendo.UserEvents = UserEvents;\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.touch', [\n 'kendo.core',\n 'kendo.userevents'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'touch',\n name: 'Touch',\n category: 'mobile',\n description: 'The kendo Touch widget provides a cross-platform compatible API for handling user-initiated touch events, multi-touch gestures and event sequences (drag, swipe, etc.). ',\n depends: [\n 'core',\n 'userevents'\n ]\n };\n (function ($, undefined) {\n var kendo = window.kendo, Widget = kendo.ui.Widget, proxy = $.proxy, abs = Math.abs, MAX_DOUBLE_TAP_DISTANCE = 20;\n var Touch = Widget.extend({\n init: function (element, options) {\n var that = this;\n Widget.fn.init.call(that, element, options);\n options = that.options;\n element = that.element;\n that.wrapper = element;\n function eventProxy(name) {\n return function (e) {\n that._triggerTouch(name, e);\n };\n }\n function gestureEventProxy(name) {\n return function (e) {\n that.trigger(name, {\n touches: e.touches,\n distance: e.distance,\n center: e.center,\n event: e.event\n });\n };\n }\n that.events = new kendo.UserEvents(element, {\n filter: options.filter,\n surface: options.surface,\n minHold: options.minHold,\n multiTouch: options.multiTouch,\n allowSelection: true,\n fastTap: options.fastTap,\n press: eventProxy('touchstart'),\n hold: eventProxy('hold'),\n tap: proxy(that, '_tap'),\n gesturestart: gestureEventProxy('gesturestart'),\n gesturechange: gestureEventProxy('gesturechange'),\n gestureend: gestureEventProxy('gestureend')\n });\n if (options.enableSwipe) {\n that.events.bind('start', proxy(that, '_swipestart'));\n that.events.bind('move', proxy(that, '_swipemove'));\n } else {\n that.events.bind('start', proxy(that, '_dragstart'));\n that.events.bind('move', eventProxy('drag'));\n that.events.bind('end', eventProxy('dragend'));\n }\n kendo.notify(that);\n },\n events: [\n 'touchstart',\n 'dragstart',\n 'drag',\n 'dragend',\n 'tap',\n 'doubletap',\n 'hold',\n 'swipe',\n 'gesturestart',\n 'gesturechange',\n 'gestureend'\n ],\n options: {\n name: 'Touch',\n surface: null,\n global: false,\n fastTap: false,\n filter: null,\n multiTouch: false,\n enableSwipe: false,\n minXDelta: 30,\n maxYDelta: 20,\n maxDuration: 1000,\n minHold: 800,\n doubleTapTimeout: 800\n },\n cancel: function () {\n this.events.cancel();\n },\n destroy: function () {\n this.events.destroy();\n },\n _triggerTouch: function (type, e) {\n if (this.trigger(type, {\n touch: e.touch,\n event: e.event\n })) {\n e.preventDefault();\n }\n },\n _tap: function (e) {\n var that = this, lastTap = that.lastTap, touch = e.touch;\n if (lastTap && touch.endTime - lastTap.endTime < that.options.doubleTapTimeout && kendo.touchDelta(touch, lastTap).distance < MAX_DOUBLE_TAP_DISTANCE) {\n that._triggerTouch('doubletap', e);\n that.lastTap = null;\n } else {\n that._triggerTouch('tap', e);\n that.lastTap = touch;\n }\n },\n _dragstart: function (e) {\n this._triggerTouch('dragstart', e);\n },\n _swipestart: function (e) {\n if (abs(e.x.velocity) * 2 >= abs(e.y.velocity)) {\n e.sender.capture();\n }\n },\n _swipemove: function (e) {\n var that = this, options = that.options, touch = e.touch, duration = e.event.timeStamp - touch.startTime, direction = touch.x.initialDelta > 0 ? 'right' : 'left';\n if (abs(touch.x.initialDelta) >= options.minXDelta && abs(touch.y.initialDelta) < options.maxYDelta && duration < options.maxDuration) {\n that.trigger('swipe', {\n direction: direction,\n touch: e.touch\n });\n touch.cancel();\n }\n }\n });\n kendo.ui.plugin(Touch);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.data.odata', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'data.odata',\n name: 'OData',\n category: 'framework',\n depends: ['core'],\n hidden: true\n };\n (function ($, undefined) {\n var kendo = window.kendo, extend = $.extend, odataFilters = {\n eq: 'eq',\n neq: 'ne',\n gt: 'gt',\n gte: 'ge',\n lt: 'lt',\n lte: 'le',\n contains: 'substringof',\n doesnotcontain: 'substringof',\n endswith: 'endswith',\n startswith: 'startswith',\n isnull: 'eq',\n isnotnull: 'ne',\n isempty: 'eq',\n isnotempty: 'ne'\n }, odataFiltersVersionFour = extend({}, odataFilters, { contains: 'contains' }), mappers = {\n pageSize: $.noop,\n page: $.noop,\n filter: function (params, filter, useVersionFour) {\n if (filter) {\n filter = toOdataFilter(filter, useVersionFour);\n if (filter) {\n params.$filter = filter;\n }\n }\n },\n sort: function (params, orderby) {\n var expr = $.map(orderby, function (value) {\n var order = value.field.replace(/\\./g, '/');\n if (value.dir === 'desc') {\n order += ' desc';\n }\n return order;\n }).join(',');\n if (expr) {\n params.$orderby = expr;\n }\n },\n skip: function (params, skip) {\n if (skip) {\n params.$skip = skip;\n }\n },\n take: function (params, take) {\n if (take) {\n params.$top = take;\n }\n }\n }, defaultDataType = { read: { dataType: 'jsonp' } };\n function toOdataFilter(filter, useOdataFour) {\n var result = [], logic = filter.logic || 'and', idx, length, field, type, format, operator, value, ignoreCase, filters = filter.filters;\n for (idx = 0, length = filters.length; idx < length; idx++) {\n filter = filters[idx];\n field = filter.field;\n value = filter.value;\n operator = filter.operator;\n if (filter.filters) {\n filter = toOdataFilter(filter, useOdataFour);\n } else {\n ignoreCase = filter.ignoreCase;\n field = field.replace(/\\./g, '/');\n filter = odataFilters[operator];\n if (useOdataFour) {\n filter = odataFiltersVersionFour[operator];\n }\n if (operator === 'isnull' || operator === 'isnotnull') {\n filter = kendo.format('{0} {1} null', field, filter);\n } else if (operator === 'isempty' || operator === 'isnotempty') {\n filter = kendo.format('{0} {1} \\'\\'', field, filter);\n } else if (filter && value !== undefined) {\n type = $.type(value);\n if (type === 'string') {\n format = '\\'{1}\\'';\n value = value.replace(/'/g, '\\'\\'');\n if (ignoreCase === true) {\n field = 'tolower(' + field + ')';\n }\n } else if (type === 'date') {\n if (useOdataFour) {\n format = '{1:yyyy-MM-ddTHH:mm:ss+00:00}';\n value = kendo.timezone.apply(value, 'Etc/UTC');\n } else {\n format = 'datetime\\'{1:yyyy-MM-ddTHH:mm:ss}\\'';\n }\n } else {\n format = '{1}';\n }\n if (filter.length > 3) {\n if (filter !== 'substringof') {\n format = '{0}({2},' + format + ')';\n } else {\n format = '{0}(' + format + ',{2})';\n if (operator === 'doesnotcontain') {\n if (useOdataFour) {\n format = '{0}({2},\\'{1}\\') eq -1';\n filter = 'indexof';\n } else {\n format += ' eq false';\n }\n }\n }\n } else {\n format = '{2} {0} ' + format;\n }\n filter = kendo.format(format, filter, value, field);\n }\n }\n result.push(filter);\n }\n filter = result.join(' ' + logic + ' ');\n if (result.length > 1) {\n filter = '(' + filter + ')';\n }\n return filter;\n }\n function stripMetadata(obj) {\n for (var name in obj) {\n if (name.indexOf('@odata') === 0) {\n delete obj[name];\n }\n }\n }\n extend(true, kendo.data, {\n schemas: {\n odata: {\n type: 'json',\n data: function (data) {\n return data.d.results || [data.d];\n },\n total: 'd.__count'\n }\n },\n transports: {\n odata: {\n read: {\n cache: true,\n dataType: 'jsonp',\n jsonp: '$callback'\n },\n update: {\n cache: true,\n dataType: 'json',\n contentType: 'application/json',\n type: 'PUT'\n },\n create: {\n cache: true,\n dataType: 'json',\n contentType: 'application/json',\n type: 'POST'\n },\n destroy: {\n cache: true,\n dataType: 'json',\n type: 'DELETE'\n },\n parameterMap: function (options, type, useVersionFour) {\n var params, value, option, dataType;\n options = options || {};\n type = type || 'read';\n dataType = (this.options || defaultDataType)[type];\n dataType = dataType ? dataType.dataType : 'json';\n if (type === 'read') {\n params = { $inlinecount: 'allpages' };\n if (dataType != 'json') {\n params.$format = 'json';\n }\n for (option in options) {\n if (mappers[option]) {\n mappers[option](params, options[option], useVersionFour);\n } else {\n params[option] = options[option];\n }\n }\n } else {\n if (dataType !== 'json') {\n throw new Error('Only json dataType can be used for ' + type + ' operation.');\n }\n if (type !== 'destroy') {\n for (option in options) {\n value = options[option];\n if (typeof value === 'number') {\n options[option] = value + '';\n }\n }\n params = kendo.stringify(options);\n }\n }\n return params;\n }\n }\n }\n });\n extend(true, kendo.data, {\n schemas: {\n 'odata-v4': {\n type: 'json',\n data: function (data) {\n data = $.extend({}, data);\n stripMetadata(data);\n if (data.value) {\n return data.value;\n }\n return [data];\n },\n total: function (data) {\n return data['@odata.count'];\n }\n }\n },\n transports: {\n 'odata-v4': {\n read: {\n cache: true,\n dataType: 'json'\n },\n update: {\n cache: true,\n dataType: 'json',\n contentType: 'application/json;IEEE754Compatible=true',\n type: 'PUT'\n },\n create: {\n cache: true,\n dataType: 'json',\n contentType: 'application/json;IEEE754Compatible=true',\n type: 'POST'\n },\n destroy: {\n cache: true,\n dataType: 'json',\n type: 'DELETE'\n },\n parameterMap: function (options, type) {\n var result = kendo.data.transports.odata.parameterMap(options, type, true);\n if (type == 'read') {\n result.$count = true;\n delete result.$inlinecount;\n }\n return result;\n }\n }\n }\n });\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.data.xml', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'data.xml',\n name: 'XML',\n category: 'framework',\n depends: ['core'],\n hidden: true\n };\n (function ($, undefined) {\n var kendo = window.kendo, isArray = $.isArray, isPlainObject = $.isPlainObject, map = $.map, each = $.each, extend = $.extend, getter = kendo.getter, Class = kendo.Class;\n var XmlDataReader = Class.extend({\n init: function (options) {\n var that = this, total = options.total, model = options.model, parse = options.parse, errors = options.errors, serialize = options.serialize, data = options.data;\n if (model) {\n if (isPlainObject(model)) {\n var base = options.modelBase || kendo.data.Model;\n if (model.fields) {\n each(model.fields, function (field, value) {\n if (isPlainObject(value) && value.field) {\n if (!$.isFunction(value.field)) {\n value = extend(value, { field: that.getter(value.field) });\n }\n } else {\n value = { field: that.getter(value) };\n }\n model.fields[field] = value;\n });\n }\n var id = model.id;\n if (id) {\n var idField = {};\n idField[that.xpathToMember(id, true)] = { field: that.getter(id) };\n model.fields = extend(idField, model.fields);\n model.id = that.xpathToMember(id);\n }\n model = base.define(model);\n }\n that.model = model;\n }\n if (total) {\n if (typeof total == 'string') {\n total = that.getter(total);\n that.total = function (data) {\n return parseInt(total(data), 10);\n };\n } else if (typeof total == 'function') {\n that.total = total;\n }\n }\n if (errors) {\n if (typeof errors == 'string') {\n errors = that.getter(errors);\n that.errors = function (data) {\n return errors(data) || null;\n };\n } else if (typeof errors == 'function') {\n that.errors = errors;\n }\n }\n if (data) {\n if (typeof data == 'string') {\n data = that.xpathToMember(data);\n that.data = function (value) {\n var result = that.evaluate(value, data), modelInstance;\n result = isArray(result) ? result : [result];\n if (that.model && model.fields) {\n modelInstance = new that.model();\n return map(result, function (value) {\n if (value) {\n var record = {}, field;\n for (field in model.fields) {\n record[field] = modelInstance._parse(field, model.fields[field].field(value));\n }\n return record;\n }\n });\n }\n return result;\n };\n } else if (typeof data == 'function') {\n that.data = data;\n }\n }\n if (typeof parse == 'function') {\n var xmlParse = that.parse;\n that.parse = function (data) {\n var xml = parse.call(that, data);\n return xmlParse.call(that, xml);\n };\n }\n if (typeof serialize == 'function') {\n that.serialize = serialize;\n }\n },\n total: function (result) {\n return this.data(result).length;\n },\n errors: function (data) {\n return data ? data.errors : null;\n },\n serialize: function (data) {\n return data;\n },\n parseDOM: function (element) {\n var result = {}, parsedNode, node, nodeType, nodeName, member, attribute, attributes = element.attributes, attributeCount = attributes.length, idx;\n for (idx = 0; idx < attributeCount; idx++) {\n attribute = attributes[idx];\n result['@' + attribute.nodeName] = attribute.nodeValue;\n }\n for (node = element.firstChild; node; node = node.nextSibling) {\n nodeType = node.nodeType;\n if (nodeType === 3 || nodeType === 4) {\n result['#text'] = node.nodeValue;\n } else if (nodeType === 1) {\n parsedNode = this.parseDOM(node);\n nodeName = node.nodeName;\n member = result[nodeName];\n if (isArray(member)) {\n member.push(parsedNode);\n } else if (member !== undefined) {\n member = [\n member,\n parsedNode\n ];\n } else {\n member = parsedNode;\n }\n result[nodeName] = member;\n }\n }\n return result;\n },\n evaluate: function (value, expression) {\n var members = expression.split('.'), member, result, length, intermediateResult, idx;\n while (member = members.shift()) {\n value = value[member];\n if (isArray(value)) {\n result = [];\n expression = members.join('.');\n for (idx = 0, length = value.length; idx < length; idx++) {\n intermediateResult = this.evaluate(value[idx], expression);\n intermediateResult = isArray(intermediateResult) ? intermediateResult : [intermediateResult];\n result.push.apply(result, intermediateResult);\n }\n return result;\n }\n }\n return value;\n },\n parse: function (xml) {\n var documentElement, tree, result = {};\n documentElement = xml.documentElement || $.parseXML(xml).documentElement;\n tree = this.parseDOM(documentElement);\n result[documentElement.nodeName] = tree;\n return result;\n },\n xpathToMember: function (member, raw) {\n if (!member) {\n return '';\n }\n member = member.replace(/^\\//, '').replace(/\\//g, '.');\n if (member.indexOf('@') >= 0) {\n return member.replace(/\\.?(@.*)/, raw ? '$1' : '[\"$1\"]');\n }\n if (member.indexOf('text()') >= 0) {\n return member.replace(/(\\.?text\\(\\))/, raw ? '#text' : '[\"#text\"]');\n }\n return member;\n },\n getter: function (member) {\n return getter(this.xpathToMember(member), true);\n }\n });\n $.extend(true, kendo.data, {\n XmlDataReader: XmlDataReader,\n readers: { xml: XmlDataReader }\n });\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.data', [\n 'kendo.core',\n 'kendo.data.odata',\n 'kendo.data.xml'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'data',\n name: 'Data source',\n category: 'framework',\n description: 'Powerful component for using local and remote data.Fully supports CRUD, Sorting, Paging, Filtering, Grouping, and Aggregates.',\n depends: ['core'],\n features: [\n {\n id: 'data-odata',\n name: 'OData',\n description: 'Support for accessing Open Data Protocol (OData) services.',\n depends: ['data.odata']\n },\n {\n id: 'data-signalr',\n name: 'SignalR',\n description: 'Support for binding to SignalR hubs.',\n depends: ['data.signalr']\n },\n {\n id: 'data-XML',\n name: 'XML',\n description: 'Support for binding to XML.',\n depends: ['data.xml']\n }\n ]\n };\n (function ($, undefined) {\n var extend = $.extend, proxy = $.proxy, isPlainObject = $.isPlainObject, isEmptyObject = $.isEmptyObject, isArray = $.isArray, grep = $.grep, ajax = $.ajax, map, each = $.each, noop = $.noop, kendo = window.kendo, isFunction = kendo.isFunction, Observable = kendo.Observable, Class = kendo.Class, STRING = 'string', FUNCTION = 'function', CREATE = 'create', READ = 'read', UPDATE = 'update', DESTROY = 'destroy', CHANGE = 'change', SYNC = 'sync', GET = 'get', ERROR = 'error', REQUESTSTART = 'requestStart', PROGRESS = 'progress', REQUESTEND = 'requestEnd', crud = [\n CREATE,\n READ,\n UPDATE,\n DESTROY\n ], identity = function (o) {\n return o;\n }, getter = kendo.getter, stringify = kendo.stringify, math = Math, push = [].push, join = [].join, pop = [].pop, splice = [].splice, shift = [].shift, slice = [].slice, unshift = [].unshift, toString = {}.toString, stableSort = kendo.support.stableSort, dateRegExp = /^\\/Date\\((.*?)\\)\\/$/;\n var ObservableArray = Observable.extend({\n init: function (array, type) {\n var that = this;\n that.type = type || ObservableObject;\n Observable.fn.init.call(that);\n that.length = array.length;\n that.wrapAll(array, that);\n },\n at: function (index) {\n return this[index];\n },\n toJSON: function () {\n var idx, length = this.length, value, json = new Array(length);\n for (idx = 0; idx < length; idx++) {\n value = this[idx];\n if (value instanceof ObservableObject) {\n value = value.toJSON();\n }\n json[idx] = value;\n }\n return json;\n },\n parent: noop,\n wrapAll: function (source, target) {\n var that = this, idx, length, parent = function () {\n return that;\n };\n target = target || [];\n for (idx = 0, length = source.length; idx < length; idx++) {\n target[idx] = that.wrap(source[idx], parent);\n }\n return target;\n },\n wrap: function (object, parent) {\n var that = this, observable;\n if (object !== null && toString.call(object) === '[object Object]') {\n observable = object instanceof that.type || object instanceof Model;\n if (!observable) {\n object = object instanceof ObservableObject ? object.toJSON() : object;\n object = new that.type(object);\n }\n object.parent = parent;\n object.bind(CHANGE, function (e) {\n that.trigger(CHANGE, {\n field: e.field,\n node: e.node,\n index: e.index,\n items: e.items || [this],\n action: e.node ? e.action || 'itemloaded' : 'itemchange'\n });\n });\n }\n return object;\n },\n push: function () {\n var index = this.length, items = this.wrapAll(arguments), result;\n result = push.apply(this, items);\n this.trigger(CHANGE, {\n action: 'add',\n index: index,\n items: items\n });\n return result;\n },\n slice: slice,\n sort: [].sort,\n join: join,\n pop: function () {\n var length = this.length, result = pop.apply(this);\n if (length) {\n this.trigger(CHANGE, {\n action: 'remove',\n index: length - 1,\n items: [result]\n });\n }\n return result;\n },\n splice: function (index, howMany, item) {\n var items = this.wrapAll(slice.call(arguments, 2)), result, i, len;\n result = splice.apply(this, [\n index,\n howMany\n ].concat(items));\n if (result.length) {\n this.trigger(CHANGE, {\n action: 'remove',\n index: index,\n items: result\n });\n for (i = 0, len = result.length; i < len; i++) {\n if (result[i] && result[i].children) {\n result[i].unbind(CHANGE);\n }\n }\n }\n if (item) {\n this.trigger(CHANGE, {\n action: 'add',\n index: index,\n items: items\n });\n }\n return result;\n },\n shift: function () {\n var length = this.length, result = shift.apply(this);\n if (length) {\n this.trigger(CHANGE, {\n action: 'remove',\n index: 0,\n items: [result]\n });\n }\n return result;\n },\n unshift: function () {\n var items = this.wrapAll(arguments), result;\n result = unshift.apply(this, items);\n this.trigger(CHANGE, {\n action: 'add',\n index: 0,\n items: items\n });\n return result;\n },\n indexOf: function (item) {\n var that = this, idx, length;\n for (idx = 0, length = that.length; idx < length; idx++) {\n if (that[idx] === item) {\n return idx;\n }\n }\n return -1;\n },\n forEach: function (callback) {\n var idx = 0, length = this.length;\n for (; idx < length; idx++) {\n callback(this[idx], idx, this);\n }\n },\n map: function (callback) {\n var idx = 0, result = [], length = this.length;\n for (; idx < length; idx++) {\n result[idx] = callback(this[idx], idx, this);\n }\n return result;\n },\n reduce: function (callback) {\n var idx = 0, result, length = this.length;\n if (arguments.length == 2) {\n result = arguments[1];\n } else if (idx < length) {\n result = this[idx++];\n }\n for (; idx < length; idx++) {\n result = callback(result, this[idx], idx, this);\n }\n return result;\n },\n reduceRight: function (callback) {\n var idx = this.length - 1, result;\n if (arguments.length == 2) {\n result = arguments[1];\n } else if (idx > 0) {\n result = this[idx--];\n }\n for (; idx >= 0; idx--) {\n result = callback(result, this[idx], idx, this);\n }\n return result;\n },\n filter: function (callback) {\n var idx = 0, result = [], item, length = this.length;\n for (; idx < length; idx++) {\n item = this[idx];\n if (callback(item, idx, this)) {\n result[result.length] = item;\n }\n }\n return result;\n },\n find: function (callback) {\n var idx = 0, item, length = this.length;\n for (; idx < length; idx++) {\n item = this[idx];\n if (callback(item, idx, this)) {\n return item;\n }\n }\n },\n every: function (callback) {\n var idx = 0, item, length = this.length;\n for (; idx < length; idx++) {\n item = this[idx];\n if (!callback(item, idx, this)) {\n return false;\n }\n }\n return true;\n },\n some: function (callback) {\n var idx = 0, item, length = this.length;\n for (; idx < length; idx++) {\n item = this[idx];\n if (callback(item, idx, this)) {\n return true;\n }\n }\n return false;\n },\n remove: function (item) {\n var idx = this.indexOf(item);\n if (idx !== -1) {\n this.splice(idx, 1);\n }\n },\n empty: function () {\n this.splice(0, this.length);\n }\n });\n if (typeof Symbol !== 'undefined' && Symbol.iterator && !ObservableArray.prototype[Symbol.iterator]) {\n ObservableArray.prototype[Symbol.iterator] = [][Symbol.iterator];\n }\n var LazyObservableArray = ObservableArray.extend({\n init: function (data, type) {\n Observable.fn.init.call(this);\n this.type = type || ObservableObject;\n for (var idx = 0; idx < data.length; idx++) {\n this[idx] = data[idx];\n }\n this.length = idx;\n this._parent = proxy(function () {\n return this;\n }, this);\n },\n at: function (index) {\n var item = this[index];\n if (!(item instanceof this.type)) {\n item = this[index] = this.wrap(item, this._parent);\n } else {\n item.parent = this._parent;\n }\n return item;\n }\n });\n function eventHandler(context, type, field, prefix) {\n return function (e) {\n var event = {}, key;\n for (key in e) {\n event[key] = e[key];\n }\n if (prefix) {\n event.field = field + '.' + e.field;\n } else {\n event.field = field;\n }\n if (type == CHANGE && context._notifyChange) {\n context._notifyChange(event);\n }\n context.trigger(type, event);\n };\n }\n var ObservableObject = Observable.extend({\n init: function (value) {\n var that = this, member, field, parent = function () {\n return that;\n };\n Observable.fn.init.call(this);\n this._handlers = {};\n for (field in value) {\n member = value[field];\n if (typeof member === 'object' && member && !member.getTime && field.charAt(0) != '_') {\n member = that.wrap(member, field, parent);\n }\n that[field] = member;\n }\n that.uid = kendo.guid();\n },\n shouldSerialize: function (field) {\n return this.hasOwnProperty(field) && field !== '_handlers' && field !== '_events' && typeof this[field] !== FUNCTION && field !== 'uid';\n },\n forEach: function (f) {\n for (var i in this) {\n if (this.shouldSerialize(i)) {\n f(this[i], i);\n }\n }\n },\n toJSON: function () {\n var result = {}, value, field;\n for (field in this) {\n if (this.shouldSerialize(field)) {\n value = this[field];\n if (value instanceof ObservableObject || value instanceof ObservableArray) {\n value = value.toJSON();\n }\n result[field] = value;\n }\n }\n return result;\n },\n get: function (field) {\n var that = this, result;\n that.trigger(GET, { field: field });\n if (field === 'this') {\n result = that;\n } else {\n result = kendo.getter(field, true)(that);\n }\n return result;\n },\n _set: function (field, value) {\n var that = this;\n var composite = field.indexOf('.') >= 0;\n if (composite) {\n var paths = field.split('.'), path = '';\n while (paths.length > 1) {\n path += paths.shift();\n var obj = kendo.getter(path, true)(that);\n if (obj instanceof ObservableObject) {\n obj.set(paths.join('.'), value);\n return composite;\n }\n path += '.';\n }\n }\n kendo.setter(field)(that, value);\n return composite;\n },\n set: function (field, value) {\n var that = this, isSetPrevented = false, composite = field.indexOf('.') >= 0, current = kendo.getter(field, true)(that);\n if (current !== value) {\n if (current instanceof Observable && this._handlers[field]) {\n if (this._handlers[field].get) {\n current.unbind(GET, this._handlers[field].get);\n }\n current.unbind(CHANGE, this._handlers[field].change);\n }\n isSetPrevented = that.trigger('set', {\n field: field,\n value: value\n });\n if (!isSetPrevented) {\n if (!composite) {\n value = that.wrap(value, field, function () {\n return that;\n });\n }\n if (!that._set(field, value) || field.indexOf('(') >= 0 || field.indexOf('[') >= 0) {\n that.trigger(CHANGE, { field: field });\n }\n }\n }\n return isSetPrevented;\n },\n parent: noop,\n wrap: function (object, field, parent) {\n var that = this;\n var get;\n var change;\n var type = toString.call(object);\n if (object != null && (type === '[object Object]' || type === '[object Array]')) {\n var isObservableArray = object instanceof ObservableArray;\n var isDataSource = object instanceof DataSource;\n if (type === '[object Object]' && !isDataSource && !isObservableArray) {\n if (!(object instanceof ObservableObject)) {\n object = new ObservableObject(object);\n }\n get = eventHandler(that, GET, field, true);\n object.bind(GET, get);\n change = eventHandler(that, CHANGE, field, true);\n object.bind(CHANGE, change);\n that._handlers[field] = {\n get: get,\n change: change\n };\n } else if (type === '[object Array]' || isObservableArray || isDataSource) {\n if (!isObservableArray && !isDataSource) {\n object = new ObservableArray(object);\n }\n change = eventHandler(that, CHANGE, field, false);\n object.bind(CHANGE, change);\n that._handlers[field] = { change: change };\n }\n object.parent = parent;\n }\n return object;\n }\n });\n function equal(x, y) {\n if (x === y) {\n return true;\n }\n var xtype = $.type(x), ytype = $.type(y), field;\n if (xtype !== ytype) {\n return false;\n }\n if (xtype === 'date') {\n return x.getTime() === y.getTime();\n }\n if (xtype !== 'object' && xtype !== 'array') {\n return false;\n }\n for (field in x) {\n if (!equal(x[field], y[field])) {\n return false;\n }\n }\n return true;\n }\n var parsers = {\n 'number': function (value) {\n return kendo.parseFloat(value);\n },\n 'date': function (value) {\n return kendo.parseDate(value);\n },\n 'boolean': function (value) {\n if (typeof value === STRING) {\n return value.toLowerCase() === 'true';\n }\n return value != null ? !!value : value;\n },\n 'string': function (value) {\n return value != null ? value + '' : value;\n },\n 'default': function (value) {\n return value;\n }\n };\n var defaultValues = {\n 'string': '',\n 'number': 0,\n 'date': new Date(),\n 'boolean': false,\n 'default': ''\n };\n function getFieldByName(obj, name) {\n var field, fieldName;\n for (fieldName in obj) {\n field = obj[fieldName];\n if (isPlainObject(field) && field.field && field.field === name) {\n return field;\n } else if (field === name) {\n return field;\n }\n }\n return null;\n }\n var Model = ObservableObject.extend({\n init: function (data) {\n var that = this;\n if (!data || $.isEmptyObject(data)) {\n data = $.extend({}, that.defaults, data);\n if (that._initializers) {\n for (var idx = 0; idx < that._initializers.length; idx++) {\n var name = that._initializers[idx];\n data[name] = that.defaults[name]();\n }\n }\n }\n ObservableObject.fn.init.call(that, data);\n that.dirty = false;\n if (that.idField) {\n that.id = that.get(that.idField);\n if (that.id === undefined) {\n that.id = that._defaultId;\n }\n }\n },\n shouldSerialize: function (field) {\n return ObservableObject.fn.shouldSerialize.call(this, field) && field !== 'uid' && !(this.idField !== 'id' && field === 'id') && field !== 'dirty' && field !== '_accessors';\n },\n _parse: function (field, value) {\n var that = this, fieldName = field, fields = that.fields || {}, parse;\n field = fields[field];\n if (!field) {\n field = getFieldByName(fields, fieldName);\n }\n if (field) {\n parse = field.parse;\n if (!parse && field.type) {\n parse = parsers[field.type.toLowerCase()];\n }\n }\n return parse ? parse(value) : value;\n },\n _notifyChange: function (e) {\n var action = e.action;\n if (action == 'add' || action == 'remove') {\n this.dirty = true;\n }\n },\n editable: function (field) {\n field = (this.fields || {})[field];\n return field ? field.editable !== false : true;\n },\n set: function (field, value, initiator) {\n var that = this;\n var dirty = that.dirty;\n if (that.editable(field)) {\n value = that._parse(field, value);\n if (!equal(value, that.get(field))) {\n that.dirty = true;\n if (ObservableObject.fn.set.call(that, field, value, initiator) && !dirty) {\n that.dirty = dirty;\n }\n }\n }\n },\n accept: function (data) {\n var that = this, parent = function () {\n return that;\n }, field;\n for (field in data) {\n var value = data[field];\n if (field.charAt(0) != '_') {\n value = that.wrap(data[field], field, parent);\n }\n that._set(field, value);\n }\n if (that.idField) {\n that.id = that.get(that.idField);\n }\n that.dirty = false;\n },\n isNew: function () {\n return this.id === this._defaultId;\n }\n });\n Model.define = function (base, options) {\n if (options === undefined) {\n options = base;\n base = Model;\n }\n var model, proto = extend({ defaults: {} }, options), name, field, type, value, idx, length, fields = {}, originalName, id = proto.id, functionFields = [];\n if (id) {\n proto.idField = id;\n }\n if (proto.id) {\n delete proto.id;\n }\n if (id) {\n proto.defaults[id] = proto._defaultId = '';\n }\n if (toString.call(proto.fields) === '[object Array]') {\n for (idx = 0, length = proto.fields.length; idx < length; idx++) {\n field = proto.fields[idx];\n if (typeof field === STRING) {\n fields[field] = {};\n } else if (field.field) {\n fields[field.field] = field;\n }\n }\n proto.fields = fields;\n }\n for (name in proto.fields) {\n field = proto.fields[name];\n type = field.type || 'default';\n value = null;\n originalName = name;\n name = typeof field.field === STRING ? field.field : name;\n if (!field.nullable) {\n value = proto.defaults[originalName !== name ? originalName : name] = field.defaultValue !== undefined ? field.defaultValue : defaultValues[type.toLowerCase()];\n if (typeof value === 'function') {\n functionFields.push(name);\n }\n }\n if (options.id === name) {\n proto._defaultId = value;\n }\n proto.defaults[originalName !== name ? originalName : name] = value;\n field.parse = field.parse || parsers[type];\n }\n if (functionFields.length > 0) {\n proto._initializers = functionFields;\n }\n model = base.extend(proto);\n model.define = function (options) {\n return Model.define(model, options);\n };\n if (proto.fields) {\n model.fields = proto.fields;\n model.idField = proto.idField;\n }\n return model;\n };\n var Comparer = {\n selector: function (field) {\n return isFunction(field) ? field : getter(field);\n },\n compare: function (field) {\n var selector = this.selector(field);\n return function (a, b) {\n a = selector(a);\n b = selector(b);\n if (a == null && b == null) {\n return 0;\n }\n if (a == null) {\n return -1;\n }\n if (b == null) {\n return 1;\n }\n if (a.localeCompare) {\n return a.localeCompare(b);\n }\n return a > b ? 1 : a < b ? -1 : 0;\n };\n },\n create: function (sort) {\n var compare = sort.compare || this.compare(sort.field);\n if (sort.dir == 'desc') {\n return function (a, b) {\n return compare(b, a, true);\n };\n }\n return compare;\n },\n combine: function (comparers) {\n return function (a, b) {\n var result = comparers[0](a, b), idx, length;\n for (idx = 1, length = comparers.length; idx < length; idx++) {\n result = result || comparers[idx](a, b);\n }\n return result;\n };\n }\n };\n var StableComparer = extend({}, Comparer, {\n asc: function (field) {\n var selector = this.selector(field);\n return function (a, b) {\n var valueA = selector(a);\n var valueB = selector(b);\n if (valueA && valueA.getTime && valueB && valueB.getTime) {\n valueA = valueA.getTime();\n valueB = valueB.getTime();\n }\n if (valueA === valueB) {\n return a.__position - b.__position;\n }\n if (valueA == null) {\n return -1;\n }\n if (valueB == null) {\n return 1;\n }\n if (valueA.localeCompare) {\n return valueA.localeCompare(valueB);\n }\n return valueA > valueB ? 1 : -1;\n };\n },\n desc: function (field) {\n var selector = this.selector(field);\n return function (a, b) {\n var valueA = selector(a);\n var valueB = selector(b);\n if (valueA && valueA.getTime && valueB && valueB.getTime) {\n valueA = valueA.getTime();\n valueB = valueB.getTime();\n }\n if (valueA === valueB) {\n return a.__position - b.__position;\n }\n if (valueA == null) {\n return 1;\n }\n if (valueB == null) {\n return -1;\n }\n if (valueB.localeCompare) {\n return valueB.localeCompare(valueA);\n }\n return valueA < valueB ? 1 : -1;\n };\n },\n create: function (sort) {\n return this[sort.dir](sort.field);\n }\n });\n map = function (array, callback) {\n var idx, length = array.length, result = new Array(length);\n for (idx = 0; idx < length; idx++) {\n result[idx] = callback(array[idx], idx, array);\n }\n return result;\n };\n var operators = function () {\n function quote(str) {\n if (typeof str == 'string') {\n str = str.replace(/[\\r\\n]+/g, '');\n }\n return JSON.stringify(str);\n }\n function textOp(impl) {\n return function (a, b, ignore) {\n b += '';\n if (ignore) {\n a = '(' + a + ' || \\'\\').toLowerCase()';\n b = b.toLowerCase();\n }\n return impl(a, quote(b), ignore);\n };\n }\n function operator(op, a, b, ignore) {\n if (b != null) {\n if (typeof b === STRING) {\n var date = dateRegExp.exec(b);\n if (date) {\n b = new Date(+date[1]);\n } else if (ignore) {\n b = quote(b.toLowerCase());\n a = '((' + a + ' || \\'\\')+\\'\\').toLowerCase()';\n } else {\n b = quote(b);\n }\n }\n if (b.getTime) {\n a = '(' + a + '&&' + a + '.getTime?' + a + '.getTime():' + a + ')';\n b = b.getTime();\n }\n }\n return a + ' ' + op + ' ' + b;\n }\n function getMatchRegexp(pattern) {\n for (var rx = '/^', esc = false, i = 0; i < pattern.length; ++i) {\n var ch = pattern.charAt(i);\n if (esc) {\n rx += '\\\\' + ch;\n } else if (ch == '~') {\n esc = true;\n continue;\n } else if (ch == '*') {\n rx += '.*';\n } else if (ch == '?') {\n rx += '.';\n } else if ('.+^$()[]{}|\\\\/\\n\\r\\u2028\\u2029\\xA0'.indexOf(ch) >= 0) {\n rx += '\\\\' + ch;\n } else {\n rx += ch;\n }\n esc = false;\n }\n return rx + '$/';\n }\n return {\n quote: function (value) {\n if (value && value.getTime) {\n return 'new Date(' + value.getTime() + ')';\n }\n return quote(value);\n },\n eq: function (a, b, ignore) {\n return operator('==', a, b, ignore);\n },\n neq: function (a, b, ignore) {\n return operator('!=', a, b, ignore);\n },\n gt: function (a, b, ignore) {\n return operator('>', a, b, ignore);\n },\n gte: function (a, b, ignore) {\n return operator('>=', a, b, ignore);\n },\n lt: function (a, b, ignore) {\n return operator('<', a, b, ignore);\n },\n lte: function (a, b, ignore) {\n return operator('<=', a, b, ignore);\n },\n startswith: textOp(function (a, b) {\n return a + '.lastIndexOf(' + b + ', 0) == 0';\n }),\n doesnotstartwith: textOp(function (a, b) {\n return a + '.lastIndexOf(' + b + ', 0) == -1';\n }),\n endswith: textOp(function (a, b) {\n var n = b ? b.length - 2 : 0;\n return a + '.indexOf(' + b + ', ' + a + '.length - ' + n + ') >= 0';\n }),\n doesnotendwith: textOp(function (a, b) {\n var n = b ? b.length - 2 : 0;\n return a + '.indexOf(' + b + ', ' + a + '.length - ' + n + ') < 0';\n }),\n contains: textOp(function (a, b) {\n return a + '.indexOf(' + b + ') >= 0';\n }),\n doesnotcontain: textOp(function (a, b) {\n return a + '.indexOf(' + b + ') == -1';\n }),\n matches: textOp(function (a, b) {\n b = b.substring(1, b.length - 1);\n return getMatchRegexp(b) + '.test(' + a + ')';\n }),\n doesnotmatch: textOp(function (a, b) {\n b = b.substring(1, b.length - 1);\n return '!' + getMatchRegexp(b) + '.test(' + a + ')';\n }),\n isempty: function (a) {\n return a + ' === \\'\\'';\n },\n isnotempty: function (a) {\n return a + ' !== \\'\\'';\n },\n isnull: function (a) {\n return '(' + a + ' == null)';\n },\n isnotnull: function (a) {\n return '(' + a + ' != null)';\n }\n };\n }();\n function Query(data) {\n this.data = data || [];\n }\n Query.filterExpr = function (expression) {\n var expressions = [], logic = {\n and: ' && ',\n or: ' || '\n }, idx, length, filter, expr, fieldFunctions = [], operatorFunctions = [], field, operator, filters = expression.filters;\n for (idx = 0, length = filters.length; idx < length; idx++) {\n filter = filters[idx];\n field = filter.field;\n operator = filter.operator;\n if (filter.filters) {\n expr = Query.filterExpr(filter);\n filter = expr.expression.replace(/__o\\[(\\d+)\\]/g, function (match, index) {\n index = +index;\n return '__o[' + (operatorFunctions.length + index) + ']';\n }).replace(/__f\\[(\\d+)\\]/g, function (match, index) {\n index = +index;\n return '__f[' + (fieldFunctions.length + index) + ']';\n });\n operatorFunctions.push.apply(operatorFunctions, expr.operators);\n fieldFunctions.push.apply(fieldFunctions, expr.fields);\n } else {\n if (typeof field === FUNCTION) {\n expr = '__f[' + fieldFunctions.length + '](d)';\n fieldFunctions.push(field);\n } else {\n expr = kendo.expr(field);\n }\n if (typeof operator === FUNCTION) {\n filter = '__o[' + operatorFunctions.length + '](' + expr + ', ' + operators.quote(filter.value) + ')';\n operatorFunctions.push(operator);\n } else {\n filter = operators[(operator || 'eq').toLowerCase()](expr, filter.value, filter.ignoreCase !== undefined ? filter.ignoreCase : true);\n }\n }\n expressions.push(filter);\n }\n return {\n expression: '(' + expressions.join(logic[expression.logic]) + ')',\n fields: fieldFunctions,\n operators: operatorFunctions\n };\n };\n function normalizeSort(field, dir) {\n if (field) {\n var descriptor = typeof field === STRING ? {\n field: field,\n dir: dir\n } : field, descriptors = isArray(descriptor) ? descriptor : descriptor !== undefined ? [descriptor] : [];\n return grep(descriptors, function (d) {\n return !!d.dir;\n });\n }\n }\n var operatorMap = {\n '==': 'eq',\n equals: 'eq',\n isequalto: 'eq',\n equalto: 'eq',\n equal: 'eq',\n '!=': 'neq',\n ne: 'neq',\n notequals: 'neq',\n isnotequalto: 'neq',\n notequalto: 'neq',\n notequal: 'neq',\n '<': 'lt',\n islessthan: 'lt',\n lessthan: 'lt',\n less: 'lt',\n '<=': 'lte',\n le: 'lte',\n islessthanorequalto: 'lte',\n lessthanequal: 'lte',\n '>': 'gt',\n isgreaterthan: 'gt',\n greaterthan: 'gt',\n greater: 'gt',\n '>=': 'gte',\n isgreaterthanorequalto: 'gte',\n greaterthanequal: 'gte',\n ge: 'gte',\n notsubstringof: 'doesnotcontain',\n isnull: 'isnull',\n isempty: 'isempty',\n isnotempty: 'isnotempty'\n };\n function normalizeOperator(expression) {\n var idx, length, filter, operator, filters = expression.filters;\n if (filters) {\n for (idx = 0, length = filters.length; idx < length; idx++) {\n filter = filters[idx];\n operator = filter.operator;\n if (operator && typeof operator === STRING) {\n filter.operator = operatorMap[operator.toLowerCase()] || operator;\n }\n normalizeOperator(filter);\n }\n }\n }\n function normalizeFilter(expression) {\n if (expression && !isEmptyObject(expression)) {\n if (isArray(expression) || !expression.filters) {\n expression = {\n logic: 'and',\n filters: isArray(expression) ? expression : [expression]\n };\n }\n normalizeOperator(expression);\n return expression;\n }\n }\n Query.normalizeFilter = normalizeFilter;\n function compareDescriptor(f1, f2) {\n if (f1.logic || f2.logic) {\n return false;\n }\n return f1.field === f2.field && f1.value === f2.value && f1.operator === f2.operator;\n }\n function normalizeDescriptor(filter) {\n filter = filter || {};\n if (isEmptyObject(filter)) {\n return {\n logic: 'and',\n filters: []\n };\n }\n return normalizeFilter(filter);\n }\n function fieldComparer(a, b) {\n if (b.logic || a.field > b.field) {\n return 1;\n } else if (a.field < b.field) {\n return -1;\n } else {\n return 0;\n }\n }\n function compareFilters(expr1, expr2) {\n expr1 = normalizeDescriptor(expr1);\n expr2 = normalizeDescriptor(expr2);\n if (expr1.logic !== expr2.logic) {\n return false;\n }\n var f1, f2;\n var filters1 = (expr1.filters || []).slice();\n var filters2 = (expr2.filters || []).slice();\n if (filters1.length !== filters2.length) {\n return false;\n }\n filters1 = filters1.sort(fieldComparer);\n filters2 = filters2.sort(fieldComparer);\n for (var idx = 0; idx < filters1.length; idx++) {\n f1 = filters1[idx];\n f2 = filters2[idx];\n if (f1.logic && f2.logic) {\n if (!compareFilters(f1, f2)) {\n return false;\n }\n } else if (!compareDescriptor(f1, f2)) {\n return false;\n }\n }\n return true;\n }\n Query.compareFilters = compareFilters;\n function normalizeAggregate(expressions) {\n return isArray(expressions) ? expressions : [expressions];\n }\n function normalizeGroup(field, dir) {\n var descriptor = typeof field === STRING ? {\n field: field,\n dir: dir\n } : field, descriptors = isArray(descriptor) ? descriptor : descriptor !== undefined ? [descriptor] : [];\n return map(descriptors, function (d) {\n return {\n field: d.field,\n dir: d.dir || 'asc',\n aggregates: d.aggregates\n };\n });\n }\n Query.prototype = {\n toArray: function () {\n return this.data;\n },\n range: function (index, count) {\n return new Query(this.data.slice(index, index + count));\n },\n skip: function (count) {\n return new Query(this.data.slice(count));\n },\n take: function (count) {\n return new Query(this.data.slice(0, count));\n },\n select: function (selector) {\n return new Query(map(this.data, selector));\n },\n order: function (selector, dir) {\n var sort = { dir: dir };\n if (selector) {\n if (selector.compare) {\n sort.compare = selector.compare;\n } else {\n sort.field = selector;\n }\n }\n return new Query(this.data.slice(0).sort(Comparer.create(sort)));\n },\n orderBy: function (selector) {\n return this.order(selector, 'asc');\n },\n orderByDescending: function (selector) {\n return this.order(selector, 'desc');\n },\n sort: function (field, dir, comparer) {\n var idx, length, descriptors = normalizeSort(field, dir), comparers = [];\n comparer = comparer || Comparer;\n if (descriptors.length) {\n for (idx = 0, length = descriptors.length; idx < length; idx++) {\n comparers.push(comparer.create(descriptors[idx]));\n }\n return this.orderBy({ compare: comparer.combine(comparers) });\n }\n return this;\n },\n filter: function (expressions) {\n var idx, current, length, compiled, predicate, data = this.data, fields, operators, result = [], filter;\n expressions = normalizeFilter(expressions);\n if (!expressions || expressions.filters.length === 0) {\n return this;\n }\n compiled = Query.filterExpr(expressions);\n fields = compiled.fields;\n operators = compiled.operators;\n predicate = filter = new Function('d, __f, __o', 'return ' + compiled.expression);\n if (fields.length || operators.length) {\n filter = function (d) {\n return predicate(d, fields, operators);\n };\n }\n for (idx = 0, length = data.length; idx < length; idx++) {\n current = data[idx];\n if (filter(current)) {\n result.push(current);\n }\n }\n return new Query(result);\n },\n group: function (descriptors, allData) {\n descriptors = normalizeGroup(descriptors || []);\n allData = allData || this.data;\n var that = this, result = new Query(that.data), descriptor;\n if (descriptors.length > 0) {\n descriptor = descriptors[0];\n result = result.groupBy(descriptor).select(function (group) {\n var data = new Query(allData).filter([{\n field: group.field,\n operator: 'eq',\n value: group.value,\n ignoreCase: false\n }]);\n return {\n field: group.field,\n value: group.value,\n items: descriptors.length > 1 ? new Query(group.items).group(descriptors.slice(1), data.toArray()).toArray() : group.items,\n hasSubgroups: descriptors.length > 1,\n aggregates: data.aggregate(descriptor.aggregates)\n };\n });\n }\n return result;\n },\n groupBy: function (descriptor) {\n if (isEmptyObject(descriptor) || !this.data.length) {\n return new Query([]);\n }\n var field = descriptor.field, sorted = this._sortForGrouping(field, descriptor.dir || 'asc'), accessor = kendo.accessor(field), item, groupValue = accessor.get(sorted[0], field), group = {\n field: field,\n value: groupValue,\n items: []\n }, currentValue, idx, len, result = [group];\n for (idx = 0, len = sorted.length; idx < len; idx++) {\n item = sorted[idx];\n currentValue = accessor.get(item, field);\n if (!groupValueComparer(groupValue, currentValue)) {\n groupValue = currentValue;\n group = {\n field: field,\n value: groupValue,\n items: []\n };\n result.push(group);\n }\n group.items.push(item);\n }\n return new Query(result);\n },\n _sortForGrouping: function (field, dir) {\n var idx, length, data = this.data;\n if (!stableSort) {\n for (idx = 0, length = data.length; idx < length; idx++) {\n data[idx].__position = idx;\n }\n data = new Query(data).sort(field, dir, StableComparer).toArray();\n for (idx = 0, length = data.length; idx < length; idx++) {\n delete data[idx].__position;\n }\n return data;\n }\n return this.sort(field, dir).toArray();\n },\n aggregate: function (aggregates) {\n var idx, len, result = {}, state = {};\n if (aggregates && aggregates.length) {\n for (idx = 0, len = this.data.length; idx < len; idx++) {\n calculateAggregate(result, aggregates, this.data[idx], idx, len, state);\n }\n }\n return result;\n }\n };\n function groupValueComparer(a, b) {\n if (a && a.getTime && b && b.getTime) {\n return a.getTime() === b.getTime();\n }\n return a === b;\n }\n function calculateAggregate(accumulator, aggregates, item, index, length, state) {\n aggregates = aggregates || [];\n var idx, aggr, functionName, len = aggregates.length;\n for (idx = 0; idx < len; idx++) {\n aggr = aggregates[idx];\n functionName = aggr.aggregate;\n var field = aggr.field;\n accumulator[field] = accumulator[field] || {};\n state[field] = state[field] || {};\n state[field][functionName] = state[field][functionName] || {};\n accumulator[field][functionName] = functions[functionName.toLowerCase()](accumulator[field][functionName], item, kendo.accessor(field), index, length, state[field][functionName]);\n }\n }\n var functions = {\n sum: function (accumulator, item, accessor) {\n var value = accessor.get(item);\n if (!isNumber(accumulator)) {\n accumulator = value;\n } else if (isNumber(value)) {\n accumulator += value;\n }\n return accumulator;\n },\n count: function (accumulator) {\n return (accumulator || 0) + 1;\n },\n average: function (accumulator, item, accessor, index, length, state) {\n var value = accessor.get(item);\n if (state.count === undefined) {\n state.count = 0;\n }\n if (!isNumber(accumulator)) {\n accumulator = value;\n } else if (isNumber(value)) {\n accumulator += value;\n }\n if (isNumber(value)) {\n state.count++;\n }\n if (index == length - 1 && isNumber(accumulator)) {\n accumulator = accumulator / state.count;\n }\n return accumulator;\n },\n max: function (accumulator, item, accessor) {\n var value = accessor.get(item);\n if (!isNumber(accumulator) && !isDate(accumulator)) {\n accumulator = value;\n }\n if (accumulator < value && (isNumber(value) || isDate(value))) {\n accumulator = value;\n }\n return accumulator;\n },\n min: function (accumulator, item, accessor) {\n var value = accessor.get(item);\n if (!isNumber(accumulator) && !isDate(accumulator)) {\n accumulator = value;\n }\n if (accumulator > value && (isNumber(value) || isDate(value))) {\n accumulator = value;\n }\n return accumulator;\n }\n };\n function isNumber(val) {\n return typeof val === 'number' && !isNaN(val);\n }\n function isDate(val) {\n return val && val.getTime;\n }\n function toJSON(array) {\n var idx, length = array.length, result = new Array(length);\n for (idx = 0; idx < length; idx++) {\n result[idx] = array[idx].toJSON();\n }\n return result;\n }\n Query.process = function (data, options) {\n options = options || {};\n var query = new Query(data), group = options.group, sort = normalizeGroup(group || []).concat(normalizeSort(options.sort || [])), total, filterCallback = options.filterCallback, filter = options.filter, skip = options.skip, take = options.take;\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) {\n query = query.sort(sort);\n if (group) {\n data = query.toArray();\n }\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 };\n };\n var LocalTransport = Class.extend({\n init: function (options) {\n this.data = options.data;\n },\n read: function (options) {\n options.success(this.data);\n },\n update: function (options) {\n options.success(options.data);\n },\n create: function (options) {\n options.success(options.data);\n },\n destroy: function (options) {\n options.success(options.data);\n }\n });\n var RemoteTransport = Class.extend({\n init: function (options) {\n var that = this, parameterMap;\n options = that.options = extend({}, that.options, options);\n each(crud, function (index, type) {\n if (typeof options[type] === STRING) {\n options[type] = { url: options[type] };\n }\n });\n that.cache = options.cache ? Cache.create(options.cache) : {\n find: noop,\n add: noop\n };\n parameterMap = options.parameterMap;\n if (isFunction(options.push)) {\n that.push = options.push;\n }\n if (!that.push) {\n that.push = identity;\n }\n that.parameterMap = isFunction(parameterMap) ? parameterMap : function (options) {\n var result = {};\n each(options, function (option, value) {\n if (option in parameterMap) {\n option = parameterMap[option];\n if (isPlainObject(option)) {\n value = option.value(value);\n option = option.key;\n }\n }\n result[option] = value;\n });\n return result;\n };\n },\n options: { parameterMap: identity },\n create: function (options) {\n return ajax(this.setup(options, CREATE));\n },\n read: function (options) {\n var that = this, success, error, result, cache = that.cache;\n options = that.setup(options, READ);\n success = options.success || noop;\n error = options.error || noop;\n result = cache.find(options.data);\n if (result !== undefined) {\n success(result);\n } else {\n options.success = function (result) {\n cache.add(options.data, result);\n success(result);\n };\n $.ajax(options);\n }\n },\n update: function (options) {\n return ajax(this.setup(options, UPDATE));\n },\n destroy: function (options) {\n return ajax(this.setup(options, DESTROY));\n },\n setup: function (options, type) {\n options = options || {};\n var that = this, parameters, operation = that.options[type], data = isFunction(operation.data) ? operation.data(options.data) : operation.data;\n options = extend(true, {}, operation, options);\n parameters = extend(true, {}, data, options.data);\n options.data = that.parameterMap(parameters, type);\n if (isFunction(options.url)) {\n options.url = options.url(parameters);\n }\n return options;\n }\n });\n var Cache = Class.extend({\n init: function () {\n this._store = {};\n },\n add: function (key, data) {\n if (key !== undefined) {\n this._store[stringify(key)] = data;\n }\n },\n find: function (key) {\n return this._store[stringify(key)];\n },\n clear: function () {\n this._store = {};\n },\n remove: function (key) {\n delete this._store[stringify(key)];\n }\n });\n Cache.create = function (options) {\n var store = {\n 'inmemory': function () {\n return new Cache();\n }\n };\n if (isPlainObject(options) && isFunction(options.find)) {\n return options;\n }\n if (options === true) {\n return new Cache();\n }\n return store[options]();\n };\n function serializeRecords(data, getters, modelInstance, originalFieldNames, fieldNames) {\n var record, getter, originalName, idx, setters = {}, length;\n for (idx = 0, length = data.length; idx < length; idx++) {\n record = data[idx];\n for (getter in getters) {\n originalName = fieldNames[getter];\n if (originalName && originalName !== getter) {\n if (!setters[originalName]) {\n setters[originalName] = kendo.setter(originalName);\n }\n setters[originalName](record, getters[getter](record));\n delete record[getter];\n }\n }\n }\n }\n function convertRecords(data, getters, modelInstance, originalFieldNames, fieldNames) {\n var record, getter, originalName, idx, length;\n for (idx = 0, length = data.length; idx < length; idx++) {\n record = data[idx];\n for (getter in getters) {\n record[getter] = modelInstance._parse(getter, getters[getter](record));\n originalName = fieldNames[getter];\n if (originalName && originalName !== getter) {\n delete record[originalName];\n }\n }\n }\n }\n function convertGroup(data, getters, modelInstance, originalFieldNames, fieldNames) {\n var record, idx, fieldName, length;\n for (idx = 0, length = data.length; idx < length; idx++) {\n record = data[idx];\n fieldName = originalFieldNames[record.field];\n if (fieldName && fieldName != record.field) {\n record.field = fieldName;\n }\n record.value = modelInstance._parse(record.field, record.value);\n if (record.hasSubgroups) {\n convertGroup(record.items, getters, modelInstance, originalFieldNames, fieldNames);\n } else {\n convertRecords(record.items, getters, modelInstance, originalFieldNames, fieldNames);\n }\n }\n }\n function wrapDataAccess(originalFunction, model, converter, getters, originalFieldNames, fieldNames) {\n return function (data) {\n data = originalFunction(data);\n if (data && !isEmptyObject(getters)) {\n if (toString.call(data) !== '[object Array]' && !(data instanceof ObservableArray)) {\n data = [data];\n }\n converter(data, getters, new model(), originalFieldNames, fieldNames);\n }\n return data || [];\n };\n }\n var DataReader = Class.extend({\n init: function (schema) {\n var that = this, member, get, model, base;\n schema = schema || {};\n for (member in schema) {\n get = schema[member];\n that[member] = typeof get === STRING ? getter(get) : get;\n }\n base = schema.modelBase || Model;\n if (isPlainObject(that.model)) {\n that.model = model = base.define(that.model);\n }\n var dataFunction = proxy(that.data, that);\n that._dataAccessFunction = dataFunction;\n if (that.model) {\n var groupsFunction = proxy(that.groups, that), serializeFunction = proxy(that.serialize, that), originalFieldNames = {}, getters = {}, serializeGetters = {}, fieldNames = {}, shouldSerialize = false, fieldName;\n model = that.model;\n if (model.fields) {\n each(model.fields, function (field, value) {\n var fromName;\n fieldName = field;\n if (isPlainObject(value) && value.field) {\n fieldName = value.field;\n } else if (typeof value === STRING) {\n fieldName = value;\n }\n if (isPlainObject(value) && value.from) {\n fromName = value.from;\n }\n shouldSerialize = shouldSerialize || fromName && fromName !== field || fieldName !== field;\n getters[field] = getter(fromName || fieldName);\n serializeGetters[field] = getter(field);\n originalFieldNames[fromName || fieldName] = field;\n fieldNames[field] = fromName || fieldName;\n });\n if (!schema.serialize && shouldSerialize) {\n that.serialize = wrapDataAccess(serializeFunction, model, serializeRecords, serializeGetters, originalFieldNames, fieldNames);\n }\n }\n that._dataAccessFunction = dataFunction;\n that.data = wrapDataAccess(dataFunction, model, convertRecords, getters, originalFieldNames, fieldNames);\n that.groups = wrapDataAccess(groupsFunction, model, convertGroup, getters, originalFieldNames, fieldNames);\n }\n },\n errors: function (data) {\n return data ? data.errors : null;\n },\n parse: identity,\n data: identity,\n total: function (data) {\n return data.length;\n },\n groups: identity,\n aggregates: function () {\n return {};\n },\n serialize: function (data) {\n return data;\n }\n });\n function mergeGroups(target, dest, skip, take) {\n var group, idx = 0, items;\n while (dest.length && take) {\n group = dest[idx];\n items = group.items;\n var length = items.length;\n if (target && target.field === group.field && target.value === group.value) {\n if (target.hasSubgroups && target.items.length) {\n mergeGroups(target.items[target.items.length - 1], group.items, skip, take);\n } else {\n items = items.slice(skip, skip + take);\n target.items = target.items.concat(items);\n }\n dest.splice(idx--, 1);\n } else if (group.hasSubgroups && items.length) {\n mergeGroups(group, items, skip, take);\n if (!group.items.length) {\n dest.splice(idx--, 1);\n }\n } else {\n items = items.slice(skip, skip + take);\n group.items = items;\n if (!group.items.length) {\n dest.splice(idx--, 1);\n }\n }\n if (items.length === 0) {\n skip -= length;\n } else {\n skip = 0;\n take -= items.length;\n }\n if (++idx >= dest.length) {\n break;\n }\n }\n if (idx < dest.length) {\n dest.splice(idx, dest.length - idx);\n }\n }\n function flattenGroups(data) {\n var idx, result = [], length, items, itemIndex;\n for (idx = 0, length = data.length; idx < length; idx++) {\n var group = data.at(idx);\n if (group.hasSubgroups) {\n result = result.concat(flattenGroups(group.items));\n } else {\n items = group.items;\n for (itemIndex = 0; itemIndex < items.length; itemIndex++) {\n result.push(items.at(itemIndex));\n }\n }\n }\n return result;\n }\n function wrapGroupItems(data, model) {\n var idx, length, group;\n if (model) {\n for (idx = 0, length = data.length; idx < length; idx++) {\n group = data.at(idx);\n if (group.hasSubgroups) {\n wrapGroupItems(group.items, model);\n } else {\n group.items = new LazyObservableArray(group.items, model);\n }\n }\n }\n }\n function eachGroupItems(data, func) {\n for (var idx = 0, length = data.length; idx < length; idx++) {\n if (data[idx].hasSubgroups) {\n if (eachGroupItems(data[idx].items, func)) {\n return true;\n }\n } else if (func(data[idx].items, data[idx])) {\n return true;\n }\n }\n }\n function replaceInRanges(ranges, data, item, observable) {\n for (var idx = 0; idx < ranges.length; idx++) {\n if (ranges[idx].data === data) {\n break;\n }\n if (replaceInRange(ranges[idx].data, item, observable)) {\n break;\n }\n }\n }\n function replaceInRange(items, item, observable) {\n for (var idx = 0, length = items.length; idx < length; idx++) {\n if (items[idx] && items[idx].hasSubgroups) {\n return replaceInRange(items[idx].items, item, observable);\n } else if (items[idx] === item || items[idx] === observable) {\n items[idx] = observable;\n return true;\n }\n }\n }\n function replaceWithObservable(view, data, ranges, type, serverGrouping) {\n for (var viewIndex = 0, length = view.length; viewIndex < length; viewIndex++) {\n var item = view[viewIndex];\n if (!item || item instanceof type) {\n continue;\n }\n if (item.hasSubgroups !== undefined && !serverGrouping) {\n replaceWithObservable(item.items, data, ranges, type, serverGrouping);\n } else {\n for (var idx = 0; idx < data.length; idx++) {\n if (data[idx] === item) {\n view[viewIndex] = data.at(idx);\n replaceInRanges(ranges, data, item, view[viewIndex]);\n break;\n }\n }\n }\n }\n }\n function removeModel(data, model) {\n var idx, length;\n for (idx = 0, length = data.length; idx < length; idx++) {\n var dataItem = data.at(idx);\n if (dataItem.uid == model.uid) {\n data.splice(idx, 1);\n return dataItem;\n }\n }\n }\n function indexOfPristineModel(data, model) {\n if (model) {\n return indexOf(data, function (item) {\n return item.uid && item.uid == model.uid || item[model.idField] === model.id && model.id !== model._defaultId;\n });\n }\n return -1;\n }\n function indexOfModel(data, model) {\n if (model) {\n return indexOf(data, function (item) {\n return item.uid == model.uid;\n });\n }\n return -1;\n }\n function indexOf(data, comparer) {\n var idx, length;\n for (idx = 0, length = data.length; idx < length; idx++) {\n if (comparer(data[idx])) {\n return idx;\n }\n }\n return -1;\n }\n function fieldNameFromModel(fields, name) {\n if (fields && !isEmptyObject(fields)) {\n var descriptor = fields[name];\n var fieldName;\n if (isPlainObject(descriptor)) {\n fieldName = descriptor.from || descriptor.field || name;\n } else {\n fieldName = fields[name] || name;\n }\n if (isFunction(fieldName)) {\n return name;\n }\n return fieldName;\n }\n return name;\n }\n function convertFilterDescriptorsField(descriptor, model) {\n var idx, length, target = {};\n for (var field in descriptor) {\n if (field !== 'filters') {\n target[field] = descriptor[field];\n }\n }\n if (descriptor.filters) {\n target.filters = [];\n for (idx = 0, length = descriptor.filters.length; idx < length; idx++) {\n target.filters[idx] = convertFilterDescriptorsField(descriptor.filters[idx], model);\n }\n } else {\n target.field = fieldNameFromModel(model.fields, target.field);\n }\n return target;\n }\n function convertDescriptorsField(descriptors, model) {\n var idx, length, result = [], target, descriptor;\n for (idx = 0, length = descriptors.length; idx < length; idx++) {\n target = {};\n descriptor = descriptors[idx];\n for (var field in descriptor) {\n target[field] = descriptor[field];\n }\n target.field = fieldNameFromModel(model.fields, target.field);\n if (target.aggregates && isArray(target.aggregates)) {\n target.aggregates = convertDescriptorsField(target.aggregates, model);\n }\n result.push(target);\n }\n return result;\n }\n var DataSource = Observable.extend({\n init: function (options) {\n var that = this, model, data;\n if (options) {\n data = options.data;\n }\n options = that.options = extend({}, that.options, options);\n that._map = {};\n that._prefetch = {};\n that._data = [];\n that._pristineData = [];\n that._ranges = [];\n that._view = [];\n that._pristineTotal = 0;\n that._destroyed = [];\n that._pageSize = options.pageSize;\n that._page = options.page || (options.pageSize ? 1 : undefined);\n that._sort = normalizeSort(options.sort);\n that._filter = normalizeFilter(options.filter);\n that._group = normalizeGroup(options.group);\n that._aggregate = options.aggregate;\n that._total = options.total;\n that._shouldDetachObservableParents = true;\n Observable.fn.init.call(that);\n that.transport = Transport.create(options, data, that);\n if (isFunction(that.transport.push)) {\n that.transport.push({\n pushCreate: proxy(that._pushCreate, that),\n pushUpdate: proxy(that._pushUpdate, that),\n pushDestroy: proxy(that._pushDestroy, that)\n });\n }\n if (options.offlineStorage != null) {\n if (typeof options.offlineStorage == 'string') {\n var key = options.offlineStorage;\n that._storage = {\n getItem: function () {\n return JSON.parse(localStorage.getItem(key));\n },\n setItem: function (item) {\n localStorage.setItem(key, stringify(that.reader.serialize(item)));\n }\n };\n } else {\n that._storage = options.offlineStorage;\n }\n }\n that.reader = new kendo.data.readers[options.schema.type || 'json'](options.schema);\n model = that.reader.model || {};\n that._detachObservableParents();\n that._data = that._observe(that._data);\n that._online = true;\n that.bind([\n 'push',\n ERROR,\n CHANGE,\n REQUESTSTART,\n SYNC,\n REQUESTEND,\n PROGRESS\n ], options);\n },\n options: {\n data: null,\n schema: { modelBase: Model },\n offlineStorage: null,\n serverSorting: false,\n serverPaging: false,\n serverFiltering: false,\n serverGrouping: false,\n serverAggregates: false,\n batch: false\n },\n clone: function () {\n return this;\n },\n online: function (value) {\n if (value !== undefined) {\n if (this._online != value) {\n this._online = value;\n if (value) {\n return this.sync();\n }\n }\n return $.Deferred().resolve().promise();\n } else {\n return this._online;\n }\n },\n offlineData: function (state) {\n if (this.options.offlineStorage == null) {\n return null;\n }\n if (state !== undefined) {\n return this._storage.setItem(state);\n }\n return this._storage.getItem() || [];\n },\n _isServerGrouped: function () {\n var group = this.group() || [];\n return this.options.serverGrouping && group.length;\n },\n _pushCreate: function (result) {\n this._push(result, 'pushCreate');\n },\n _pushUpdate: function (result) {\n this._push(result, 'pushUpdate');\n },\n _pushDestroy: function (result) {\n this._push(result, 'pushDestroy');\n },\n _push: function (result, operation) {\n var data = this._readData(result);\n if (!data) {\n data = result;\n }\n this[operation](data);\n },\n _flatData: function (data, skip) {\n if (data) {\n if (this._isServerGrouped()) {\n return flattenGroups(data);\n }\n if (!skip) {\n for (var idx = 0; idx < data.length; idx++) {\n data.at(idx);\n }\n }\n }\n return data;\n },\n parent: noop,\n get: function (id) {\n var idx, length, data = this._flatData(this._data);\n for (idx = 0, length = data.length; idx < length; idx++) {\n if (data[idx].id == id) {\n return data[idx];\n }\n }\n },\n getByUid: function (id) {\n var idx, length, data = this._flatData(this._data);\n if (!data) {\n return;\n }\n for (idx = 0, length = data.length; idx < length; idx++) {\n if (data[idx].uid == id) {\n return data[idx];\n }\n }\n },\n indexOf: function (model) {\n return indexOfModel(this._data, model);\n },\n at: function (index) {\n return this._data.at(index);\n },\n data: function (value) {\n var that = this;\n if (value !== undefined) {\n that._detachObservableParents();\n that._data = this._observe(value);\n that._pristineData = value.slice(0);\n that._storeData();\n that._ranges = [];\n that.trigger('reset');\n that._addRange(that._data);\n that._total = that._data.length;\n that._pristineTotal = that._total;\n that._process(that._data);\n } else {\n if (that._data) {\n for (var idx = 0; idx < that._data.length; idx++) {\n that._data.at(idx);\n }\n }\n return that._data;\n }\n },\n view: function (value) {\n if (value === undefined) {\n return this._view;\n } else {\n this._view = this._observeView(value);\n }\n },\n _observeView: function (data) {\n var that = this;\n replaceWithObservable(data, that._data, that._ranges, that.reader.model || ObservableObject, that._isServerGrouped());\n var view = new LazyObservableArray(data, that.reader.model);\n view.parent = function () {\n return that.parent();\n };\n return view;\n },\n flatView: function () {\n var groups = this.group() || [];\n if (groups.length) {\n return flattenGroups(this._view);\n } else {\n return this._view;\n }\n },\n add: function (model) {\n return this.insert(this._data.length, model);\n },\n _createNewModel: function (model) {\n if (this.reader.model) {\n return new this.reader.model(model);\n }\n if (model instanceof ObservableObject) {\n return model;\n }\n return new ObservableObject(model);\n },\n insert: function (index, model) {\n if (!model) {\n model = index;\n index = 0;\n }\n if (!(model instanceof Model)) {\n model = this._createNewModel(model);\n }\n if (this._isServerGrouped()) {\n this._data.splice(index, 0, this._wrapInEmptyGroup(model));\n } else {\n this._data.splice(index, 0, model);\n }\n return model;\n },\n pushInsert: function (index, items) {\n if (!items) {\n items = index;\n index = 0;\n }\n if (!isArray(items)) {\n items = [items];\n }\n var pushed = [];\n var autoSync = this.options.autoSync;\n this.options.autoSync = false;\n try {\n for (var idx = 0; idx < items.length; idx++) {\n var item = items[idx];\n var result = this.insert(index, item);\n pushed.push(result);\n var pristine = result.toJSON();\n if (this._isServerGrouped()) {\n pristine = this._wrapInEmptyGroup(pristine);\n }\n this._pristineData.push(pristine);\n index++;\n }\n } finally {\n this.options.autoSync = autoSync;\n }\n if (pushed.length) {\n this.trigger('push', {\n type: 'create',\n items: pushed\n });\n }\n },\n pushCreate: function (items) {\n this.pushInsert(this._data.length, items);\n },\n pushUpdate: function (items) {\n if (!isArray(items)) {\n items = [items];\n }\n var pushed = [];\n for (var idx = 0; idx < items.length; idx++) {\n var item = items[idx];\n var model = this._createNewModel(item);\n var target = this.get(model.id);\n if (target) {\n pushed.push(target);\n target.accept(item);\n target.trigger(CHANGE);\n this._updatePristineForModel(target, item);\n } else {\n this.pushCreate(item);\n }\n }\n if (pushed.length) {\n this.trigger('push', {\n type: 'update',\n items: pushed\n });\n }\n },\n pushDestroy: function (items) {\n var pushed = this._removeItems(items);\n if (pushed.length) {\n this.trigger('push', {\n type: 'destroy',\n items: pushed\n });\n }\n },\n _removeItems: function (items) {\n if (!isArray(items)) {\n items = [items];\n }\n var destroyed = [];\n var autoSync = this.options.autoSync;\n this.options.autoSync = false;\n try {\n for (var idx = 0; idx < items.length; idx++) {\n var item = items[idx];\n var model = this._createNewModel(item);\n var found = false;\n this._eachItem(this._data, function (items) {\n for (var idx = 0; idx < items.length; idx++) {\n var item = items.at(idx);\n if (item.id === model.id) {\n destroyed.push(item);\n items.splice(idx, 1);\n found = true;\n break;\n }\n }\n });\n if (found) {\n this._removePristineForModel(model);\n this._destroyed.pop();\n }\n }\n } finally {\n this.options.autoSync = autoSync;\n }\n return destroyed;\n },\n remove: function (model) {\n var result, that = this, hasGroups = that._isServerGrouped();\n this._eachItem(that._data, function (items) {\n result = removeModel(items, model);\n if (result && hasGroups) {\n if (!result.isNew || !result.isNew()) {\n that._destroyed.push(result);\n }\n return true;\n }\n });\n this._removeModelFromRanges(model);\n this._updateRangesLength();\n return model;\n },\n destroyed: function () {\n return this._destroyed;\n },\n created: function () {\n var idx, length, result = [], data = this._flatData(this._data);\n for (idx = 0, length = data.length; idx < length; idx++) {\n if (data[idx].isNew && data[idx].isNew()) {\n result.push(data[idx]);\n }\n }\n return result;\n },\n updated: function () {\n var idx, length, result = [], data = this._flatData(this._data);\n for (idx = 0, length = data.length; idx < length; idx++) {\n if (data[idx].isNew && !data[idx].isNew() && data[idx].dirty) {\n result.push(data[idx]);\n }\n }\n return result;\n },\n sync: function () {\n var that = this, created = [], updated = [], destroyed = that._destroyed;\n var promise = $.Deferred().resolve().promise();\n if (that.online()) {\n if (!that.reader.model) {\n return promise;\n }\n created = that.created();\n updated = that.updated();\n var promises = [];\n if (that.options.batch && that.transport.submit) {\n promises = that._sendSubmit(created, updated, destroyed);\n } else {\n promises.push.apply(promises, that._send('create', created));\n promises.push.apply(promises, that._send('update', updated));\n promises.push.apply(promises, that._send('destroy', destroyed));\n }\n promise = $.when.apply(null, promises).then(function () {\n var idx, length;\n for (idx = 0, length = arguments.length; idx < length; idx++) {\n if (arguments[idx]) {\n that._accept(arguments[idx]);\n }\n }\n that._storeData(true);\n that._change({ action: 'sync' });\n that.trigger(SYNC);\n });\n } else {\n that._storeData(true);\n that._change({ action: 'sync' });\n }\n return promise;\n },\n cancelChanges: function (model) {\n var that = this;\n if (model instanceof kendo.data.Model) {\n that._cancelModel(model);\n } else {\n that._destroyed = [];\n that._detachObservableParents();\n that._data = that._observe(that._pristineData);\n if (that.options.serverPaging) {\n that._total = that._pristineTotal;\n }\n that._ranges = [];\n that._addRange(that._data);\n that._change();\n that._markOfflineUpdatesAsDirty();\n }\n },\n _markOfflineUpdatesAsDirty: function () {\n var that = this;\n if (that.options.offlineStorage != null) {\n that._eachItem(that._data, function (items) {\n for (var idx = 0; idx < items.length; idx++) {\n var item = items.at(idx);\n if (item.__state__ == 'update' || item.__state__ == 'create') {\n item.dirty = true;\n }\n }\n });\n }\n },\n hasChanges: function () {\n var idx, length, data = this._flatData(this._data);\n if (this._destroyed.length) {\n return true;\n }\n for (idx = 0, length = data.length; idx < length; idx++) {\n if (data[idx].isNew && data[idx].isNew() || data[idx].dirty) {\n return true;\n }\n }\n return false;\n },\n _accept: function (result) {\n var that = this, models = result.models, response = result.response, idx = 0, serverGroup = that._isServerGrouped(), pristine = that._pristineData, type = result.type, length;\n that.trigger(REQUESTEND, {\n response: response,\n type: type\n });\n if (response && !isEmptyObject(response)) {\n response = that.reader.parse(response);\n if (that._handleCustomErrors(response)) {\n return;\n }\n response = that.reader.data(response);\n if (!isArray(response)) {\n response = [response];\n }\n } else {\n response = $.map(models, function (model) {\n return model.toJSON();\n });\n }\n if (type === 'destroy') {\n that._destroyed = [];\n }\n for (idx = 0, length = models.length; idx < length; idx++) {\n if (type !== 'destroy') {\n models[idx].accept(response[idx]);\n if (type === 'create') {\n pristine.push(serverGroup ? that._wrapInEmptyGroup(models[idx]) : response[idx]);\n } else if (type === 'update') {\n that._updatePristineForModel(models[idx], response[idx]);\n }\n } else {\n that._removePristineForModel(models[idx]);\n }\n }\n },\n _updatePristineForModel: function (model, values) {\n this._executeOnPristineForModel(model, function (index, items) {\n kendo.deepExtend(items[index], values);\n });\n },\n _executeOnPristineForModel: function (model, callback) {\n this._eachPristineItem(function (items) {\n var index = indexOfPristineModel(items, model);\n if (index > -1) {\n callback(index, items);\n return true;\n }\n });\n },\n _removePristineForModel: function (model) {\n this._executeOnPristineForModel(model, function (index, items) {\n items.splice(index, 1);\n });\n },\n _readData: function (data) {\n var read = !this._isServerGrouped() ? this.reader.data : this.reader.groups;\n return read.call(this.reader, data);\n },\n _eachPristineItem: function (callback) {\n this._eachItem(this._pristineData, callback);\n },\n _eachItem: function (data, callback) {\n if (data && data.length) {\n if (this._isServerGrouped()) {\n eachGroupItems(data, callback);\n } else {\n callback(data);\n }\n }\n },\n _pristineForModel: function (model) {\n var pristine, idx, callback = function (items) {\n idx = indexOfPristineModel(items, model);\n if (idx > -1) {\n pristine = items[idx];\n return true;\n }\n };\n this._eachPristineItem(callback);\n return pristine;\n },\n _cancelModel: function (model) {\n var pristine = this._pristineForModel(model);\n this._eachItem(this._data, function (items) {\n var idx = indexOfModel(items, model);\n if (idx >= 0) {\n if (pristine && (!model.isNew() || pristine.__state__)) {\n items[idx].accept(pristine);\n if (pristine.__state__ == 'update') {\n items[idx].dirty = true;\n }\n } else {\n items.splice(idx, 1);\n }\n }\n });\n },\n _submit: function (promises, data) {\n var that = this;\n that.trigger(REQUESTSTART, { type: 'submit' });\n that.trigger(PROGRESS);\n that.transport.submit(extend({\n success: function (response, type) {\n var promise = $.grep(promises, function (x) {\n return x.type == type;\n })[0];\n if (promise) {\n promise.resolve({\n response: response,\n models: promise.models,\n type: type\n });\n }\n },\n error: function (response, status, error) {\n for (var idx = 0; idx < promises.length; idx++) {\n promises[idx].reject(response);\n }\n that.error(response, status, error);\n }\n }, data));\n },\n _sendSubmit: function (created, updated, destroyed) {\n var that = this, promises = [];\n if (that.options.batch) {\n if (created.length) {\n promises.push($.Deferred(function (deferred) {\n deferred.type = 'create';\n deferred.models = created;\n }));\n }\n if (updated.length) {\n promises.push($.Deferred(function (deferred) {\n deferred.type = 'update';\n deferred.models = updated;\n }));\n }\n if (destroyed.length) {\n promises.push($.Deferred(function (deferred) {\n deferred.type = 'destroy';\n deferred.models = destroyed;\n }));\n }\n that._submit(promises, {\n data: {\n created: that.reader.serialize(toJSON(created)),\n updated: that.reader.serialize(toJSON(updated)),\n destroyed: that.reader.serialize(toJSON(destroyed))\n }\n });\n }\n return promises;\n },\n _promise: function (data, models, type) {\n var that = this;\n return $.Deferred(function (deferred) {\n that.trigger(REQUESTSTART, { type: type });\n that.trigger(PROGRESS);\n that.transport[type].call(that.transport, extend({\n success: function (response) {\n deferred.resolve({\n response: response,\n models: models,\n type: type\n });\n },\n error: function (response, status, error) {\n deferred.reject(response);\n that.error(response, status, error);\n }\n }, data));\n }).promise();\n },\n _send: function (method, data) {\n var that = this, idx, length, promises = [], converted = that.reader.serialize(toJSON(data));\n if (that.options.batch) {\n if (data.length) {\n promises.push(that._promise({ data: { models: converted } }, data, method));\n }\n } else {\n for (idx = 0, length = data.length; idx < length; idx++) {\n promises.push(that._promise({ data: converted[idx] }, [data[idx]], method));\n }\n }\n return promises;\n },\n read: function (data) {\n var that = this, params = that._params(data);\n var deferred = $.Deferred();\n that._queueRequest(params, function () {\n var isPrevented = that.trigger(REQUESTSTART, { type: 'read' });\n if (!isPrevented) {\n that.trigger(PROGRESS);\n that._ranges = [];\n that.trigger('reset');\n if (that.online()) {\n that.transport.read({\n data: params,\n success: function (data) {\n that._ranges = [];\n that.success(data, params);\n deferred.resolve();\n },\n error: function () {\n var args = slice.call(arguments);\n that.error.apply(that, args);\n deferred.reject.apply(deferred, args);\n }\n });\n } else if (that.options.offlineStorage != null) {\n that.success(that.offlineData(), params);\n deferred.resolve();\n }\n } else {\n that._dequeueRequest();\n deferred.resolve(isPrevented);\n }\n });\n return deferred.promise();\n },\n _readAggregates: function (data) {\n return this.reader.aggregates(data);\n },\n success: function (data) {\n var that = this, options = that.options;\n that.trigger(REQUESTEND, {\n response: data,\n type: 'read'\n });\n if (that.online()) {\n data = that.reader.parse(data);\n if (that._handleCustomErrors(data)) {\n that._dequeueRequest();\n return;\n }\n that._total = that.reader.total(data);\n if (that._aggregate && options.serverAggregates) {\n that._aggregateResult = that._readAggregates(data);\n }\n data = that._readData(data);\n that._destroyed = [];\n } else {\n data = that._readData(data);\n var items = [];\n var itemIds = {};\n var model = that.reader.model;\n var idField = model ? model.idField : 'id';\n var idx;\n for (idx = 0; idx < this._destroyed.length; idx++) {\n var id = this._destroyed[idx][idField];\n itemIds[id] = id;\n }\n for (idx = 0; idx < data.length; idx++) {\n var item = data[idx];\n var state = item.__state__;\n if (state == 'destroy') {\n if (!itemIds[item[idField]]) {\n this._destroyed.push(this._createNewModel(item));\n }\n } else {\n items.push(item);\n }\n }\n data = items;\n that._total = data.length;\n }\n that._pristineTotal = that._total;\n that._pristineData = data.slice(0);\n that._detachObservableParents();\n that._data = that._observe(data);\n that._markOfflineUpdatesAsDirty();\n that._storeData();\n that._addRange(that._data);\n that._process(that._data);\n that._dequeueRequest();\n },\n _detachObservableParents: function () {\n if (this._data && this._shouldDetachObservableParents) {\n for (var idx = 0; idx < this._data.length; idx++) {\n if (this._data[idx].parent) {\n this._data[idx].parent = noop;\n }\n }\n }\n },\n _storeData: function (updatePristine) {\n var serverGrouping = this._isServerGrouped();\n var model = this.reader.model;\n function items(data) {\n var state = [];\n for (var idx = 0; idx < data.length; idx++) {\n var dataItem = data.at(idx);\n var item = dataItem.toJSON();\n if (serverGrouping && dataItem.items) {\n item.items = items(dataItem.items);\n } else {\n item.uid = dataItem.uid;\n if (model) {\n if (dataItem.isNew()) {\n item.__state__ = 'create';\n } else if (dataItem.dirty) {\n item.__state__ = 'update';\n }\n }\n }\n state.push(item);\n }\n return state;\n }\n if (this.options.offlineStorage != null) {\n var state = items(this._data);\n var destroyed = [];\n for (var idx = 0; idx < this._destroyed.length; idx++) {\n var item = this._destroyed[idx].toJSON();\n item.__state__ = 'destroy';\n destroyed.push(item);\n }\n this.offlineData(state.concat(destroyed));\n if (updatePristine) {\n this._pristineData = this._readData(state);\n }\n }\n },\n _addRange: function (data) {\n var that = this, start = that._skip || 0, end = start + that._flatData(data, true).length;\n that._ranges.push({\n start: start,\n end: end,\n data: data,\n timestamp: new Date().getTime()\n });\n that._ranges.sort(function (x, y) {\n return x.start - y.start;\n });\n },\n error: function (xhr, status, errorThrown) {\n this._dequeueRequest();\n this.trigger(REQUESTEND, {});\n this.trigger(ERROR, {\n xhr: xhr,\n status: status,\n errorThrown: errorThrown\n });\n },\n _params: function (data) {\n var that = this, options = extend({\n take: that.take(),\n skip: that.skip(),\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 }, data);\n if (!that.options.serverPaging) {\n delete options.take;\n delete options.skip;\n delete options.page;\n delete options.pageSize;\n }\n if (!that.options.serverGrouping) {\n delete options.group;\n } else if (that.reader.model && options.group) {\n options.group = convertDescriptorsField(options.group, that.reader.model);\n }\n if (!that.options.serverFiltering) {\n delete options.filter;\n } else if (that.reader.model && options.filter) {\n options.filter = convertFilterDescriptorsField(options.filter, that.reader.model);\n }\n if (!that.options.serverSorting) {\n delete options.sort;\n } else if (that.reader.model && options.sort) {\n options.sort = convertDescriptorsField(options.sort, that.reader.model);\n }\n if (!that.options.serverAggregates) {\n delete options.aggregate;\n } else if (that.reader.model && options.aggregate) {\n options.aggregate = convertDescriptorsField(options.aggregate, that.reader.model);\n }\n return options;\n },\n _queueRequest: function (options, callback) {\n var that = this;\n if (!that._requestInProgress) {\n that._requestInProgress = true;\n that._pending = undefined;\n callback();\n } else {\n that._pending = {\n callback: proxy(callback, that),\n options: options\n };\n }\n },\n _dequeueRequest: function () {\n var that = this;\n that._requestInProgress = false;\n if (that._pending) {\n that._queueRequest(that._pending.options, that._pending.callback);\n }\n },\n _handleCustomErrors: function (response) {\n if (this.reader.errors) {\n var errors = this.reader.errors(response);\n if (errors) {\n this.trigger(ERROR, {\n xhr: null,\n status: 'customerror',\n errorThrown: 'custom error',\n errors: errors\n });\n return true;\n }\n }\n return false;\n },\n _shouldWrap: function (data) {\n var model = this.reader.model;\n if (model && data.length) {\n return !(data[0] instanceof model);\n }\n return false;\n },\n _observe: function (data) {\n var that = this, model = that.reader.model;\n that._shouldDetachObservableParents = true;\n if (data instanceof ObservableArray) {\n that._shouldDetachObservableParents = false;\n if (that._shouldWrap(data)) {\n data.type = that.reader.model;\n data.wrapAll(data, data);\n }\n } else {\n var arrayType = that.pageSize() && !that.options.serverPaging ? LazyObservableArray : ObservableArray;\n data = new arrayType(data, that.reader.model);\n data.parent = function () {\n return that.parent();\n };\n }\n if (that._isServerGrouped()) {\n wrapGroupItems(data, model);\n }\n if (that._changeHandler && that._data && that._data instanceof ObservableArray) {\n that._data.unbind(CHANGE, that._changeHandler);\n } else {\n that._changeHandler = proxy(that._change, that);\n }\n return data.bind(CHANGE, that._changeHandler);\n },\n _updateTotalForAction: function (action, items) {\n var that = this;\n var total = parseInt(that._total, 10);\n if (!isNumber(that._total)) {\n total = parseInt(that._pristineTotal, 10);\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._pristineTotal;\n } else if (action === 'sync') {\n total = that._pristineTotal = parseInt(that._total, 10);\n }\n that._total = total;\n },\n _change: function (e) {\n var that = this, idx, length, action = e ? e.action : '';\n if (action === 'remove') {\n for (idx = 0, length = e.items.length; idx < length; idx++) {\n if (!e.items[idx].isNew || !e.items[idx].isNew()) {\n that._destroyed.push(e.items[idx]);\n }\n }\n }\n if (that.options.autoSync && (action === 'add' || action === 'remove' || action === 'itemchange')) {\n var handler = function (args) {\n if (args.action === 'sync') {\n that.unbind('change', handler);\n that._updateTotalForAction(action, e.items);\n }\n };\n that.first('change', handler);\n that.sync();\n } else {\n that._updateTotalForAction(action, e ? e.items : []);\n that._process(that._data, e);\n }\n },\n _calculateAggregates: function (data, options) {\n options = options || {};\n var query = new Query(data), aggregates = options.aggregate, filter = options.filter;\n if (filter) {\n query = query.filter(filter);\n }\n return query.aggregate(aggregates);\n },\n _process: function (data, e) {\n var that = this, options = {}, result;\n if (that.options.serverPaging !== true) {\n options.skip = that._skip;\n options.take = that._take || that._pageSize;\n if (options.skip === undefined && that._page !== undefined && that._pageSize !== undefined) {\n options.skip = (that._page - 1) * that._pageSize;\n }\n }\n if (that.options.serverSorting !== true) {\n options.sort = that._sort;\n }\n if (that.options.serverFiltering !== true) {\n options.filter = that._filter;\n }\n if (that.options.serverGrouping !== true) {\n options.group = that._group;\n }\n if (that.options.serverAggregates !== true) {\n options.aggregate = that._aggregate;\n that._aggregateResult = that._calculateAggregates(data, options);\n }\n result = that._queryProcess(data, options);\n that.view(result.data);\n if (result.total !== undefined && !that.options.serverFiltering) {\n that._total = result.total;\n }\n e = e || {};\n e.items = e.items || that._view;\n that.trigger(CHANGE, e);\n },\n _queryProcess: function (data, options) {\n return Query.process(data, options);\n },\n _mergeState: function (options) {\n var that = this;\n if (options !== undefined) {\n that._pageSize = options.pageSize;\n that._page = options.page;\n that._sort = options.sort;\n that._filter = options.filter;\n that._group = options.group;\n that._aggregate = options.aggregate;\n that._skip = that._currentRangeStart = options.skip;\n that._take = options.take;\n if (that._skip === undefined) {\n that._skip = that._currentRangeStart = that.skip();\n options.skip = that.skip();\n }\n if (that._take === undefined && that._pageSize !== undefined) {\n that._take = that._pageSize;\n options.take = that._take;\n }\n if (options.sort) {\n that._sort = options.sort = normalizeSort(options.sort);\n }\n if (options.filter) {\n that._filter = options.filter = normalizeFilter(options.filter);\n }\n if (options.group) {\n that._group = options.group = normalizeGroup(options.group);\n }\n if (options.aggregate) {\n that._aggregate = options.aggregate = normalizeAggregate(options.aggregate);\n }\n }\n return options;\n },\n query: function (options) {\n var result;\n var remote = this.options.serverSorting || this.options.serverPaging || this.options.serverFiltering || this.options.serverGrouping || this.options.serverAggregates;\n if (remote || (this._data === undefined || this._data.length === 0) && !this._destroyed.length) {\n return this.read(this._mergeState(options));\n }\n var isPrevented = this.trigger(REQUESTSTART, { type: 'read' });\n if (!isPrevented) {\n this.trigger(PROGRESS);\n result = this._queryProcess(this._data, this._mergeState(options));\n if (!this.options.serverFiltering) {\n if (result.total !== undefined) {\n this._total = result.total;\n } else {\n this._total = this._data.length;\n }\n }\n this._aggregateResult = this._calculateAggregates(this._data, options);\n this.view(result.data);\n this.trigger(REQUESTEND, { type: 'read' });\n this.trigger(CHANGE, { items: result.data });\n }\n return $.Deferred().resolve(isPrevented).promise();\n },\n fetch: function (callback) {\n var that = this;\n var fn = function (isPrevented) {\n if (isPrevented !== true && isFunction(callback)) {\n callback.call(that);\n }\n };\n return this._query().then(fn);\n },\n _query: function (options) {\n var that = this;\n return that.query(extend({}, {\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 }, options));\n },\n next: function (options) {\n var that = this, page = that.page(), total = that.total();\n options = options || {};\n if (!page || total && page + 1 > that.totalPages()) {\n return;\n }\n that._skip = that._currentRangeStart = page * that.take();\n page += 1;\n options.page = page;\n that._query(options);\n return page;\n },\n prev: function (options) {\n var that = this, page = that.page();\n options = options || {};\n if (!page || page === 1) {\n return;\n }\n that._skip = that._currentRangeStart = that._skip - that.take();\n page -= 1;\n options.page = page;\n that._query(options);\n return page;\n },\n page: function (val) {\n var that = this, skip;\n if (val !== undefined) {\n val = math.max(math.min(math.max(val, 1), that.totalPages()), 1);\n that._query({ page: val });\n return;\n }\n skip = that.skip();\n return skip !== undefined ? math.round((skip || 0) / (that.take() || 1)) + 1 : undefined;\n },\n pageSize: function (val) {\n var that = this;\n if (val !== undefined) {\n that._query({\n pageSize: val,\n page: 1\n });\n return;\n }\n return that.take();\n },\n sort: function (val) {\n var that = this;\n if (val !== undefined) {\n that._query({ sort: val });\n return;\n }\n return that._sort;\n },\n filter: function (val) {\n var that = this;\n if (val === undefined) {\n return that._filter;\n }\n that.trigger('reset');\n that._query({\n filter: val,\n page: 1\n });\n },\n group: function (val) {\n var that = this;\n if (val !== undefined) {\n that._query({ group: val });\n return;\n }\n return that._group;\n },\n total: function () {\n return parseInt(this._total || 0, 10);\n },\n aggregate: function (val) {\n var that = this;\n if (val !== undefined) {\n that._query({ aggregate: val });\n return;\n }\n return that._aggregate;\n },\n aggregates: function () {\n var result = this._aggregateResult;\n if (isEmptyObject(result)) {\n result = this._emptyAggregates(this.aggregate());\n }\n return result;\n },\n _emptyAggregates: function (aggregates) {\n var result = {};\n if (!isEmptyObject(aggregates)) {\n var aggregate = {};\n if (!isArray(aggregates)) {\n aggregates = [aggregates];\n }\n for (var idx = 0; idx < aggregates.length; idx++) {\n aggregate[aggregates[idx].aggregate] = 0;\n result[aggregates[idx].field] = aggregate;\n }\n }\n return result;\n },\n _wrapInEmptyGroup: function (model) {\n var groups = this.group(), parent, group, idx, length;\n for (idx = groups.length - 1, length = 0; idx >= length; idx--) {\n group = groups[idx];\n parent = {\n value: model.get(group.field),\n field: group.field,\n items: parent ? [parent] : [model],\n hasSubgroups: !!parent,\n aggregates: this._emptyAggregates(group.aggregates)\n };\n }\n return parent;\n },\n totalPages: function () {\n var that = this, pageSize = that.pageSize() || that.total();\n return math.ceil((that.total() || 0) / pageSize);\n },\n inRange: function (skip, take) {\n var that = this, end = math.min(skip + take, that.total());\n if (!that.options.serverPaging && that._data.length > 0) {\n return true;\n }\n return that._findRange(skip, end).length > 0;\n },\n lastRange: function () {\n var ranges = this._ranges;\n return ranges[ranges.length - 1] || {\n start: 0,\n end: 0,\n data: []\n };\n },\n firstItemUid: function () {\n var ranges = this._ranges;\n return ranges.length && ranges[0].data.length && ranges[0].data[0].uid;\n },\n enableRequestsInProgress: function () {\n this._skipRequestsInProgress = false;\n },\n _timeStamp: function () {\n return new Date().getTime();\n },\n range: function (skip, take) {\n this._currentRequestTimeStamp = this._timeStamp();\n this._skipRequestsInProgress = true;\n skip = math.min(skip || 0, this.total());\n var that = this, pageSkip = math.max(math.floor(skip / take), 0) * take, size = math.min(pageSkip + take, that.total()), data;\n data = that._findRange(skip, math.min(skip + take, that.total()));\n if (data.length) {\n that._pending = undefined;\n that._skip = skip > that.skip() ? math.min(size, (that.totalPages() - 1) * that.take()) : pageSkip;\n that._currentRangeStart = skip;\n that._take = take;\n var paging = that.options.serverPaging;\n var sorting = that.options.serverSorting;\n var filtering = that.options.serverFiltering;\n var aggregates = that.options.serverAggregates;\n try {\n that.options.serverPaging = true;\n if (!that._isServerGrouped() && !(that.group() && that.group().length)) {\n that.options.serverSorting = true;\n }\n that.options.serverFiltering = true;\n that.options.serverPaging = true;\n that.options.serverAggregates = true;\n if (paging) {\n that._detachObservableParents();\n that._data = data = that._observe(data);\n }\n that._process(data);\n } finally {\n that.options.serverPaging = paging;\n that.options.serverSorting = sorting;\n that.options.serverFiltering = filtering;\n that.options.serverAggregates = aggregates;\n }\n return;\n }\n if (take !== undefined) {\n if (!that._rangeExists(pageSkip, size)) {\n that.prefetch(pageSkip, take, function () {\n if (skip > pageSkip && size < that.total() && !that._rangeExists(size, math.min(size + take, that.total()))) {\n that.prefetch(size, take, function () {\n that.range(skip, take);\n });\n } else {\n that.range(skip, take);\n }\n });\n } else if (pageSkip < skip) {\n that.prefetch(size, take, function () {\n that.range(skip, take);\n });\n }\n }\n },\n _findRange: function (start, end) {\n var that = this, ranges = that._ranges, range, data = [], skipIdx, takeIdx, startIndex, endIndex, rangeData, rangeEnd, processed, options = that.options, remote = options.serverSorting || options.serverPaging || options.serverFiltering || options.serverGrouping || options.serverAggregates, flatData, count, length;\n for (skipIdx = 0, length = ranges.length; skipIdx < length; skipIdx++) {\n range = ranges[skipIdx];\n if (start >= range.start && start <= range.end) {\n count = 0;\n for (takeIdx = skipIdx; takeIdx < length; takeIdx++) {\n range = ranges[takeIdx];\n flatData = that._flatData(range.data, true);\n if (flatData.length && start + count >= range.start) {\n rangeData = range.data;\n rangeEnd = range.end;\n if (!remote) {\n var sort = normalizeGroup(that.group() || []).concat(normalizeSort(that.sort() || []));\n processed = that._queryProcess(range.data, {\n sort: sort,\n filter: that.filter()\n });\n flatData = rangeData = processed.data;\n if (processed.total !== undefined) {\n rangeEnd = processed.total;\n }\n }\n startIndex = 0;\n if (start + count > range.start) {\n startIndex = start + count - range.start;\n }\n endIndex = flatData.length;\n if (rangeEnd > end) {\n endIndex = endIndex - (rangeEnd - end);\n }\n count += endIndex - startIndex;\n data = that._mergeGroups(data, rangeData, startIndex, endIndex);\n if (end <= range.end && count == end - start) {\n return data;\n }\n }\n }\n break;\n }\n }\n return [];\n },\n _mergeGroups: function (data, range, skip, take) {\n if (this._isServerGrouped()) {\n var temp = range.toJSON(), prevGroup;\n if (data.length) {\n prevGroup = data[data.length - 1];\n }\n mergeGroups(prevGroup, temp, skip, take);\n return data.concat(temp);\n }\n return data.concat(range.slice(skip, take));\n },\n skip: function () {\n var that = this;\n if (that._skip === undefined) {\n return that._page !== undefined ? (that._page - 1) * (that.take() || 1) : undefined;\n }\n return that._skip;\n },\n currentRangeStart: function () {\n return this._currentRangeStart || 0;\n },\n take: function () {\n return this._take || this._pageSize;\n },\n _prefetchSuccessHandler: function (skip, size, callback, force) {\n var that = this;\n var timestamp = that._timeStamp();\n return function (data) {\n var found = false, range = {\n start: skip,\n end: size,\n data: [],\n timestamp: that._timeStamp()\n }, idx, length, temp;\n that._dequeueRequest();\n that.trigger(REQUESTEND, {\n response: data,\n type: 'read'\n });\n data = that.reader.parse(data);\n temp = that._readData(data);\n if (temp.length) {\n for (idx = 0, length = that._ranges.length; idx < length; idx++) {\n if (that._ranges[idx].start === skip) {\n found = true;\n range = that._ranges[idx];\n break;\n }\n }\n if (!found) {\n that._ranges.push(range);\n }\n }\n range.data = that._observe(temp);\n range.end = range.start + that._flatData(range.data, true).length;\n that._ranges.sort(function (x, y) {\n return x.start - y.start;\n });\n that._total = that.reader.total(data);\n if (force || (timestamp >= that._currentRequestTimeStamp || !that._skipRequestsInProgress)) {\n if (callback && temp.length) {\n callback();\n } else {\n that.trigger(CHANGE, {});\n }\n }\n };\n },\n prefetch: function (skip, take, callback) {\n var that = this, size = math.min(skip + take, that.total()), options = {\n take: take,\n skip: skip,\n page: skip / take + 1,\n pageSize: take,\n sort: that._sort,\n filter: that._filter,\n group: that._group,\n aggregate: that._aggregate\n };\n if (!that._rangeExists(skip, size)) {\n clearTimeout(that._timeout);\n that._timeout = setTimeout(function () {\n that._queueRequest(options, function () {\n if (!that.trigger(REQUESTSTART, { type: 'read' })) {\n that.transport.read({\n data: that._params(options),\n success: that._prefetchSuccessHandler(skip, size, callback),\n error: function () {\n var args = slice.call(arguments);\n that.error.apply(that, args);\n }\n });\n } else {\n that._dequeueRequest();\n }\n });\n }, 100);\n } else if (callback) {\n callback();\n }\n },\n _multiplePrefetch: function (skip, take, callback) {\n var that = this, size = math.min(skip + take, that.total()), options = {\n take: take,\n skip: skip,\n page: skip / take + 1,\n pageSize: take,\n sort: that._sort,\n filter: that._filter,\n group: that._group,\n aggregate: that._aggregate\n };\n if (!that._rangeExists(skip, size)) {\n if (!that.trigger(REQUESTSTART, { type: 'read' })) {\n that.transport.read({\n data: that._params(options),\n success: that._prefetchSuccessHandler(skip, size, callback, true)\n });\n }\n } else if (callback) {\n callback();\n }\n },\n _rangeExists: function (start, end) {\n var that = this, ranges = that._ranges, idx, length;\n for (idx = 0, length = ranges.length; idx < length; idx++) {\n if (ranges[idx].start <= start && ranges[idx].end >= end) {\n return true;\n }\n }\n return false;\n },\n _removeModelFromRanges: function (model) {\n var result, found, range;\n for (var idx = 0, length = this._ranges.length; idx < length; idx++) {\n range = this._ranges[idx];\n this._eachItem(range.data, function (items) {\n result = removeModel(items, model);\n if (result) {\n found = true;\n }\n });\n if (found) {\n break;\n }\n }\n },\n _updateRangesLength: function () {\n var startOffset = 0, range, rangeLength;\n for (var idx = 0, length = this._ranges.length; idx < length; idx++) {\n range = this._ranges[idx];\n range.start = range.start - startOffset;\n rangeLength = this._flatData(range.data, true).length;\n startOffset = range.end - rangeLength;\n range.end = range.start + rangeLength;\n }\n }\n });\n var Transport = {};\n Transport.create = function (options, data, dataSource) {\n var transport, transportOptions = options.transport ? $.extend({}, options.transport) : null;\n if (transportOptions) {\n transportOptions.read = typeof transportOptions.read === STRING ? { url: transportOptions.read } : transportOptions.read;\n if (options.type === 'jsdo') {\n transportOptions.dataSource = dataSource;\n }\n if (options.type) {\n kendo.data.transports = kendo.data.transports || {};\n kendo.data.schemas = kendo.data.schemas || {};\n if (!kendo.data.transports[options.type]) {\n kendo.logToConsole('Unknown DataSource transport type \\'' + options.type + '\\'.\\nVerify that registration scripts for this type are included after Kendo UI on the page.', 'warn');\n } else if (!isPlainObject(kendo.data.transports[options.type])) {\n transport = new kendo.data.transports[options.type](extend(transportOptions, { data: data }));\n } else {\n transportOptions = extend(true, {}, kendo.data.transports[options.type], transportOptions);\n }\n options.schema = extend(true, {}, kendo.data.schemas[options.type], options.schema);\n }\n if (!transport) {\n transport = isFunction(transportOptions.read) ? transportOptions : new RemoteTransport(transportOptions);\n }\n } else {\n transport = new LocalTransport({ data: options.data || [] });\n }\n return transport;\n };\n DataSource.create = function (options) {\n if (isArray(options) || options instanceof ObservableArray) {\n options = { data: options };\n }\n var dataSource = options || {}, data = dataSource.data, fields = dataSource.fields, table = dataSource.table, select = dataSource.select, idx, length, model = {}, field;\n if (!data && fields && !dataSource.transport) {\n if (table) {\n data = inferTable(table, fields);\n } else if (select) {\n data = inferSelect(select, fields);\n if (dataSource.group === undefined && data[0] && data[0].optgroup !== undefined) {\n dataSource.group = 'optgroup';\n }\n }\n }\n if (kendo.data.Model && fields && (!dataSource.schema || !dataSource.schema.model)) {\n for (idx = 0, length = fields.length; idx < length; idx++) {\n field = fields[idx];\n if (field.type) {\n model[field.field] = field;\n }\n }\n if (!isEmptyObject(model)) {\n dataSource.schema = extend(true, dataSource.schema, { model: { fields: model } });\n }\n }\n dataSource.data = data;\n select = null;\n dataSource.select = null;\n table = null;\n dataSource.table = null;\n return dataSource instanceof DataSource ? dataSource : new DataSource(dataSource);\n };\n function inferSelect(select, fields) {\n select = $(select)[0];\n var options = select.options;\n var firstField = fields[0];\n var secondField = fields[1];\n var data = [];\n var idx, length;\n var optgroup;\n var option;\n var record;\n var value;\n for (idx = 0, length = options.length; idx < length; idx++) {\n record = {};\n option = options[idx];\n optgroup = option.parentNode;\n if (optgroup === select) {\n optgroup = null;\n }\n if (option.disabled || optgroup && optgroup.disabled) {\n continue;\n }\n if (optgroup) {\n record.optgroup = optgroup.label;\n }\n record[firstField.field] = option.text;\n value = option.attributes.value;\n if (value && value.specified) {\n value = option.value;\n } else {\n value = option.text;\n }\n record[secondField.field] = value;\n data.push(record);\n }\n return data;\n }\n function inferTable(table, fields) {\n var tbody = $(table)[0].tBodies[0], rows = tbody ? tbody.rows : [], idx, length, fieldIndex, fieldCount = fields.length, data = [], cells, record, cell, empty;\n for (idx = 0, length = rows.length; idx < length; idx++) {\n record = {};\n empty = true;\n cells = rows[idx].cells;\n for (fieldIndex = 0; fieldIndex < fieldCount; fieldIndex++) {\n cell = cells[fieldIndex];\n if (cell.nodeName.toLowerCase() !== 'th') {\n empty = false;\n record[fields[fieldIndex].field] = cell.innerHTML;\n }\n }\n if (!empty) {\n data.push(record);\n }\n }\n return data;\n }\n var Node = Model.define({\n idField: 'id',\n init: function (value) {\n var that = this, hasChildren = that.hasChildren || value && value.hasChildren, childrenField = 'items', childrenOptions = {};\n kendo.data.Model.fn.init.call(that, value);\n if (typeof that.children === STRING) {\n childrenField = that.children;\n }\n childrenOptions = {\n schema: {\n data: childrenField,\n model: {\n hasChildren: hasChildren,\n id: that.idField,\n fields: that.fields\n }\n }\n };\n if (typeof that.children !== STRING) {\n extend(childrenOptions, that.children);\n }\n childrenOptions.data = value;\n if (!hasChildren) {\n hasChildren = childrenOptions.schema.data;\n }\n if (typeof hasChildren === STRING) {\n hasChildren = kendo.getter(hasChildren);\n }\n if (isFunction(hasChildren)) {\n var hasChildrenObject = hasChildren.call(that, that);\n if (hasChildrenObject && hasChildrenObject.length === 0) {\n that.hasChildren = false;\n } else {\n that.hasChildren = !!hasChildrenObject;\n }\n }\n that._childrenOptions = childrenOptions;\n if (that.hasChildren) {\n that._initChildren();\n }\n that._loaded = !!(value && value._loaded);\n },\n _initChildren: function () {\n var that = this;\n var children, transport, parameterMap;\n if (!(that.children instanceof HierarchicalDataSource)) {\n children = that.children = new HierarchicalDataSource(that._childrenOptions);\n transport = children.transport;\n parameterMap = transport.parameterMap;\n transport.parameterMap = function (data, type) {\n data[that.idField || 'id'] = that.id;\n if (parameterMap) {\n data = parameterMap(data, type);\n }\n return data;\n };\n children.parent = function () {\n return that;\n };\n children.bind(CHANGE, function (e) {\n e.node = e.node || that;\n that.trigger(CHANGE, e);\n });\n children.bind(ERROR, function (e) {\n var collection = that.parent();\n if (collection) {\n e.node = e.node || that;\n collection.trigger(ERROR, e);\n }\n });\n that._updateChildrenField();\n }\n },\n append: function (model) {\n this._initChildren();\n this.loaded(true);\n this.children.add(model);\n },\n hasChildren: false,\n level: function () {\n var parentNode = this.parentNode(), level = 0;\n while (parentNode && parentNode.parentNode) {\n level++;\n parentNode = parentNode.parentNode ? parentNode.parentNode() : null;\n }\n return level;\n },\n _updateChildrenField: function () {\n var fieldName = this._childrenOptions.schema.data;\n this[fieldName || 'items'] = this.children.data();\n },\n _childrenLoaded: function () {\n this._loaded = true;\n this._updateChildrenField();\n },\n load: function () {\n var options = {};\n var method = '_query';\n var children, promise;\n if (this.hasChildren) {\n this._initChildren();\n children = this.children;\n options[this.idField || 'id'] = this.id;\n if (!this._loaded) {\n children._data = undefined;\n method = 'read';\n }\n children.one(CHANGE, proxy(this._childrenLoaded, this));\n if (this._matchFilter) {\n options.filter = {\n field: '_matchFilter',\n operator: 'eq',\n value: true\n };\n }\n promise = children[method](options);\n } else {\n this.loaded(true);\n }\n return promise || $.Deferred().resolve().promise();\n },\n parentNode: function () {\n var array = this.parent();\n return array.parent();\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 !== 'children' && field !== '_loaded' && field !== 'hasChildren' && field !== '_childrenOptions';\n }\n });\n function dataMethod(name) {\n return function () {\n var data = this._data, result = DataSource.fn[name].apply(this, slice.call(arguments));\n if (this._data != data) {\n this._attachBubbleHandlers();\n }\n return result;\n };\n }\n var HierarchicalDataSource = DataSource.extend({\n init: function (options) {\n var node = Node.define({ children: options });\n if (options.filter && !options.serverFiltering) {\n this._hierarchicalFilter = options.filter;\n options.filter = null;\n }\n DataSource.fn.init.call(this, extend(true, {}, {\n schema: {\n modelBase: node,\n model: node\n }\n }, options));\n this._attachBubbleHandlers();\n },\n _attachBubbleHandlers: function () {\n var that = this;\n that._data.bind(ERROR, function (e) {\n that.trigger(ERROR, e);\n });\n },\n read: function (data) {\n var result = DataSource.fn.read.call(this, data);\n if (this._hierarchicalFilter) {\n this.filter(this._hierarchicalFilter);\n }\n return result;\n },\n remove: function (node) {\n var parentNode = node.parentNode(), dataSource = this, result;\n if (parentNode && parentNode._initChildren) {\n dataSource = parentNode.children;\n }\n result = DataSource.fn.remove.call(dataSource, node);\n if (parentNode && !dataSource.data().length) {\n parentNode.hasChildren = false;\n }\n return result;\n },\n success: dataMethod('success'),\n data: dataMethod('data'),\n insert: function (index, model) {\n var parentNode = this.parent();\n if (parentNode && parentNode._initChildren) {\n parentNode.hasChildren = true;\n parentNode._initChildren();\n }\n return DataSource.fn.insert.call(this, index, model);\n },\n filter: function (val) {\n if (val === undefined) {\n return this._filter;\n }\n if (!this.options.serverFiltering) {\n this._markHierarchicalQuery(val);\n val = {\n logic: 'or',\n filters: [\n val,\n {\n field: '_matchFilter',\n operator: 'equals',\n value: true\n }\n ]\n };\n }\n this.trigger('reset');\n this._query({\n filter: val,\n page: 1\n });\n },\n _markHierarchicalQuery: function (expressions) {\n var compiled;\n var predicate;\n var fields;\n var operators;\n var filter;\n expressions = normalizeFilter(expressions);\n if (!expressions || expressions.filters.length === 0) {\n return this;\n }\n compiled = Query.filterExpr(expressions);\n fields = compiled.fields;\n operators = compiled.operators;\n predicate = filter = new Function('d, __f, __o', 'return ' + compiled.expression);\n if (fields.length || operators.length) {\n filter = function (d) {\n return predicate(d, fields, operators);\n };\n }\n this._updateHierarchicalFilter(filter);\n },\n _updateHierarchicalFilter: function (filter) {\n var current;\n var data = this._data;\n var result = false;\n for (var idx = 0; idx < data.length; idx++) {\n current = data[idx];\n if (current.hasChildren) {\n current._matchFilter = current.children._updateHierarchicalFilter(filter);\n if (!current._matchFilter) {\n current._matchFilter = filter(current);\n }\n } else {\n current._matchFilter = filter(current);\n }\n if (current._matchFilter) {\n result = true;\n }\n }\n return result;\n },\n _find: function (method, value) {\n var idx, length, node, children;\n var data = this._data;\n if (!data) {\n return;\n }\n node = DataSource.fn[method].call(this, value);\n if (node) {\n return node;\n }\n data = this._flatData(this._data);\n for (idx = 0, length = data.length; idx < length; idx++) {\n children = data[idx].children;\n if (!(children instanceof HierarchicalDataSource)) {\n continue;\n }\n node = children[method](value);\n if (node) {\n return node;\n }\n }\n },\n get: function (id) {\n return this._find('get', id);\n },\n getByUid: function (uid) {\n return this._find('getByUid', uid);\n }\n });\n function inferList(list, fields) {\n var items = $(list).children(), idx, length, data = [], record, textField = fields[0].field, urlField = fields[1] && fields[1].field, spriteCssClassField = fields[2] && fields[2].field, imageUrlField = fields[3] && fields[3].field, item, id, textChild, className, children;\n function elements(collection, tagName) {\n return collection.filter(tagName).add(collection.find(tagName));\n }\n for (idx = 0, length = items.length; idx < length; idx++) {\n record = { _loaded: true };\n item = items.eq(idx);\n textChild = item[0].firstChild;\n children = item.children();\n list = children.filter('ul');\n children = children.filter(':not(ul)');\n id = item.attr('data-id');\n if (id) {\n record.id = id;\n }\n if (textChild) {\n record[textField] = textChild.nodeType == 3 ? textChild.nodeValue : children.text();\n }\n if (urlField) {\n record[urlField] = elements(children, 'a').attr('href');\n }\n if (imageUrlField) {\n record[imageUrlField] = elements(children, 'img').attr('src');\n }\n if (spriteCssClassField) {\n className = elements(children, '.k-sprite').prop('className');\n record[spriteCssClassField] = className && $.trim(className.replace('k-sprite', ''));\n }\n if (list.length) {\n record.items = inferList(list.eq(0), fields);\n }\n if (item.attr('data-hasChildren') == 'true') {\n record.hasChildren = true;\n }\n data.push(record);\n }\n return data;\n }\n HierarchicalDataSource.create = function (options) {\n options = options && options.push ? { data: options } : options;\n var dataSource = options || {}, data = dataSource.data, fields = dataSource.fields, list = dataSource.list;\n if (data && data._dataSource) {\n return data._dataSource;\n }\n if (!data && fields && !dataSource.transport) {\n if (list) {\n data = inferList(list, fields);\n }\n }\n dataSource.data = data;\n return dataSource instanceof HierarchicalDataSource ? dataSource : new HierarchicalDataSource(dataSource);\n };\n var Buffer = kendo.Observable.extend({\n init: function (dataSource, viewSize, disablePrefetch) {\n kendo.Observable.fn.init.call(this);\n this._prefetching = false;\n this.dataSource = dataSource;\n this.prefetch = !disablePrefetch;\n var buffer = this;\n dataSource.bind('change', function () {\n buffer._change();\n });\n dataSource.bind('reset', function () {\n buffer._reset();\n });\n this._syncWithDataSource();\n this.setViewSize(viewSize);\n },\n setViewSize: function (viewSize) {\n this.viewSize = viewSize;\n this._recalculate();\n },\n at: function (index) {\n var pageSize = this.pageSize, itemPresent = true;\n if (index >= this.total()) {\n this.trigger('endreached', { index: index });\n return null;\n }\n if (!this.useRanges) {\n return this.dataSource.view()[index];\n }\n if (this.useRanges) {\n if (index < this.dataOffset || index >= this.skip + pageSize) {\n itemPresent = this.range(Math.floor(index / pageSize) * pageSize);\n }\n if (index === this.prefetchThreshold) {\n this._prefetch();\n }\n if (index === this.midPageThreshold) {\n this.range(this.nextMidRange, true);\n } else if (index === this.nextPageThreshold) {\n this.range(this.nextFullRange);\n } else if (index === this.pullBackThreshold) {\n if (this.offset === this.skip) {\n this.range(this.previousMidRange);\n } else {\n this.range(this.previousFullRange);\n }\n }\n if (itemPresent) {\n return this.dataSource.at(index - this.dataOffset);\n } else {\n this.trigger('endreached', { index: index });\n return null;\n }\n }\n },\n indexOf: function (item) {\n return this.dataSource.data().indexOf(item) + this.dataOffset;\n },\n total: function () {\n return parseInt(this.dataSource.total(), 10);\n },\n next: function () {\n var buffer = this, pageSize = buffer.pageSize, offset = buffer.skip - buffer.viewSize + pageSize, pageSkip = math.max(math.floor(offset / pageSize), 0) * pageSize;\n this.offset = offset;\n this.dataSource.prefetch(pageSkip, pageSize, function () {\n buffer._goToRange(offset, true);\n });\n },\n range: function (offset, nextRange) {\n if (this.offset === offset) {\n return true;\n }\n var buffer = this, pageSize = this.pageSize, pageSkip = math.max(math.floor(offset / pageSize), 0) * pageSize, dataSource = this.dataSource;\n if (nextRange) {\n pageSkip += pageSize;\n }\n if (dataSource.inRange(offset, pageSize)) {\n this.offset = offset;\n this._recalculate();\n this._goToRange(offset);\n return true;\n } else if (this.prefetch) {\n dataSource.prefetch(pageSkip, pageSize, function () {\n buffer.offset = offset;\n buffer._recalculate();\n buffer._goToRange(offset, true);\n });\n return false;\n }\n return true;\n },\n syncDataSource: function () {\n var offset = this.offset;\n this.offset = null;\n this.range(offset);\n },\n destroy: function () {\n this.unbind();\n },\n _prefetch: function () {\n var buffer = this, pageSize = this.pageSize, prefetchOffset = this.skip + pageSize, dataSource = this.dataSource;\n if (!dataSource.inRange(prefetchOffset, pageSize) && !this._prefetching && this.prefetch) {\n this._prefetching = true;\n this.trigger('prefetching', {\n skip: prefetchOffset,\n take: pageSize\n });\n dataSource.prefetch(prefetchOffset, pageSize, function () {\n buffer._prefetching = false;\n buffer.trigger('prefetched', {\n skip: prefetchOffset,\n take: pageSize\n });\n });\n }\n },\n _goToRange: function (offset, expanding) {\n if (this.offset !== offset) {\n return;\n }\n this.dataOffset = offset;\n this._expanding = expanding;\n this.dataSource.range(offset, this.pageSize);\n this.dataSource.enableRequestsInProgress();\n },\n _reset: function () {\n this._syncPending = true;\n },\n _change: function () {\n var dataSource = this.dataSource;\n this.length = this.useRanges ? dataSource.lastRange().end : dataSource.view().length;\n if (this._syncPending) {\n this._syncWithDataSource();\n this._recalculate();\n this._syncPending = false;\n this.trigger('reset', { offset: this.offset });\n }\n this.trigger('resize');\n if (this._expanding) {\n this.trigger('expand');\n }\n delete this._expanding;\n },\n _syncWithDataSource: function () {\n var dataSource = this.dataSource;\n this._firstItemUid = dataSource.firstItemUid();\n this.dataOffset = this.offset = dataSource.skip() || 0;\n this.pageSize = dataSource.pageSize();\n this.useRanges = dataSource.options.serverPaging;\n },\n _recalculate: function () {\n var pageSize = this.pageSize, offset = this.offset, viewSize = this.viewSize, skip = Math.ceil(offset / pageSize) * pageSize;\n this.skip = skip;\n this.midPageThreshold = skip + pageSize - 1;\n this.nextPageThreshold = skip + viewSize - 1;\n this.prefetchThreshold = skip + Math.floor(pageSize / 3 * 2);\n this.pullBackThreshold = this.offset - 1;\n this.nextMidRange = skip + pageSize - viewSize;\n this.nextFullRange = skip;\n this.previousMidRange = offset - viewSize;\n this.previousFullRange = skip - pageSize;\n }\n });\n var BatchBuffer = kendo.Observable.extend({\n init: function (dataSource, batchSize) {\n var batchBuffer = this;\n kendo.Observable.fn.init.call(batchBuffer);\n this.dataSource = dataSource;\n this.batchSize = batchSize;\n this._total = 0;\n this.buffer = new Buffer(dataSource, batchSize * 3);\n this.buffer.bind({\n 'endreached': function (e) {\n batchBuffer.trigger('endreached', { index: e.index });\n },\n 'prefetching': function (e) {\n batchBuffer.trigger('prefetching', {\n skip: e.skip,\n take: e.take\n });\n },\n 'prefetched': function (e) {\n batchBuffer.trigger('prefetched', {\n skip: e.skip,\n take: e.take\n });\n },\n 'reset': function () {\n batchBuffer._total = 0;\n batchBuffer.trigger('reset');\n },\n 'resize': function () {\n batchBuffer._total = Math.ceil(this.length / batchBuffer.batchSize);\n batchBuffer.trigger('resize', {\n total: batchBuffer.total(),\n offset: this.offset\n });\n }\n });\n },\n syncDataSource: function () {\n this.buffer.syncDataSource();\n },\n at: function (index) {\n var buffer = this.buffer, skip = index * this.batchSize, take = this.batchSize, view = [], item;\n if (buffer.offset > skip) {\n buffer.at(buffer.offset - 1);\n }\n for (var i = 0; i < take; i++) {\n item = buffer.at(skip + i);\n if (item === null) {\n break;\n }\n view.push(item);\n }\n return view;\n },\n total: function () {\n return this._total;\n },\n destroy: function () {\n this.buffer.destroy();\n this.unbind();\n }\n });\n extend(true, kendo.data, {\n readers: { json: DataReader },\n Query: Query,\n DataSource: DataSource,\n HierarchicalDataSource: HierarchicalDataSource,\n Node: Node,\n ObservableObject: ObservableObject,\n ObservableArray: ObservableArray,\n LazyObservableArray: LazyObservableArray,\n LocalTransport: LocalTransport,\n RemoteTransport: RemoteTransport,\n Cache: Cache,\n DataReader: DataReader,\n Model: Model,\n Buffer: Buffer,\n BatchBuffer: BatchBuffer\n });\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.binder', [\n 'kendo.core',\n 'kendo.data'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'binder',\n name: 'MVVM',\n category: 'framework',\n description: 'Model View ViewModel (MVVM) is a design pattern which helps developers separate the Model (the data) from the View (the UI).',\n depends: [\n 'core',\n 'data'\n ]\n };\n (function ($, undefined) {\n var kendo = window.kendo, Observable = kendo.Observable, ObservableObject = kendo.data.ObservableObject, ObservableArray = kendo.data.ObservableArray, toString = {}.toString, binders = {}, Class = kendo.Class, proxy = $.proxy, VALUE = 'value', SOURCE = 'source', EVENTS = 'events', CHECKED = 'checked', CSS = 'css', deleteExpando = true, FUNCTION = 'function', CHANGE = 'change';\n (function () {\n var a = document.createElement('a');\n try {\n delete a.test;\n } catch (e) {\n deleteExpando = false;\n }\n }());\n var Binding = Observable.extend({\n init: function (parents, path) {\n var that = this;\n Observable.fn.init.call(that);\n that.source = parents[0];\n that.parents = parents;\n that.path = path;\n that.dependencies = {};\n that.dependencies[path] = true;\n that.observable = that.source instanceof Observable;\n that._access = function (e) {\n that.dependencies[e.field] = true;\n };\n if (that.observable) {\n that._change = function (e) {\n that.change(e);\n };\n that.source.bind(CHANGE, that._change);\n }\n },\n _parents: function () {\n var parents = this.parents;\n var value = this.get();\n if (value && typeof value.parent == 'function') {\n var parent = value.parent();\n if ($.inArray(parent, parents) < 0) {\n parents = [parent].concat(parents);\n }\n }\n return parents;\n },\n change: function (e) {\n var dependency, ch, field = e.field, that = this;\n if (that.path === 'this') {\n that.trigger(CHANGE, e);\n } else {\n for (dependency in that.dependencies) {\n if (dependency.indexOf(field) === 0) {\n ch = dependency.charAt(field.length);\n if (!ch || ch === '.' || ch === '[') {\n that.trigger(CHANGE, e);\n break;\n }\n }\n }\n }\n },\n start: function (source) {\n source.bind('get', this._access);\n },\n stop: function (source) {\n source.unbind('get', this._access);\n },\n get: function () {\n var that = this, source = that.source, index = 0, path = that.path, result = source;\n if (!that.observable) {\n return result;\n }\n that.start(that.source);\n result = source.get(path);\n while (result === undefined && source) {\n source = that.parents[++index];\n if (source instanceof ObservableObject) {\n result = source.get(path);\n }\n }\n if (result === undefined) {\n source = that.source;\n while (result === undefined && source) {\n source = source.parent();\n if (source instanceof ObservableObject) {\n result = source.get(path);\n }\n }\n }\n if (typeof result === 'function') {\n index = path.lastIndexOf('.');\n if (index > 0) {\n source = source.get(path.substring(0, index));\n }\n that.start(source);\n if (source !== that.source) {\n result = result.call(source, that.source);\n } else {\n result = result.call(source);\n }\n that.stop(source);\n }\n if (source && source !== that.source) {\n that.currentSource = source;\n source.unbind(CHANGE, that._change).bind(CHANGE, that._change);\n }\n that.stop(that.source);\n return result;\n },\n set: function (value) {\n var source = this.currentSource || this.source;\n var field = kendo.getter(this.path)(source);\n if (typeof field === 'function') {\n if (source !== this.source) {\n field.call(source, this.source, value);\n } else {\n field.call(source, value);\n }\n } else {\n source.set(this.path, value);\n }\n },\n destroy: function () {\n if (this.observable) {\n this.source.unbind(CHANGE, this._change);\n if (this.currentSource) {\n this.currentSource.unbind(CHANGE, this._change);\n }\n }\n this.unbind();\n }\n });\n var EventBinding = Binding.extend({\n get: function () {\n var source = this.source, path = this.path, index = 0, handler;\n handler = source.get(path);\n while (!handler && source) {\n source = this.parents[++index];\n if (source instanceof ObservableObject) {\n handler = source.get(path);\n }\n }\n return proxy(handler, source);\n }\n });\n var TemplateBinding = Binding.extend({\n init: function (source, path, template) {\n var that = this;\n Binding.fn.init.call(that, source, path);\n that.template = template;\n },\n render: function (value) {\n var html;\n this.start(this.source);\n html = kendo.render(this.template, value);\n this.stop(this.source);\n return html;\n }\n });\n var Binder = Class.extend({\n init: function (element, bindings, options) {\n this.element = element;\n this.bindings = bindings;\n this.options = options;\n },\n bind: function (binding, attribute) {\n var that = this;\n binding = attribute ? binding[attribute] : binding;\n binding.bind(CHANGE, function (e) {\n that.refresh(attribute || e);\n });\n that.refresh(attribute);\n },\n destroy: function () {\n }\n });\n var TypedBinder = Binder.extend({\n dataType: function () {\n var dataType = this.element.getAttribute('data-type') || this.element.type || 'text';\n return dataType.toLowerCase();\n },\n parsedValue: function () {\n return this._parseValue(this.element.value, this.dataType());\n },\n _parseValue: function (value, dataType) {\n if (dataType == 'date') {\n value = kendo.parseDate(value, 'yyyy-MM-dd');\n } else if (dataType == 'datetime-local') {\n value = kendo.parseDate(value, [\n 'yyyy-MM-ddTHH:mm:ss',\n 'yyyy-MM-ddTHH:mm'\n ]);\n } else if (dataType == 'number') {\n value = kendo.parseFloat(value);\n } else if (dataType == 'boolean') {\n value = value.toLowerCase();\n if (kendo.parseFloat(value) !== null) {\n value = Boolean(kendo.parseFloat(value));\n } else {\n value = value.toLowerCase() === 'true';\n }\n }\n return value;\n }\n });\n binders.attr = Binder.extend({\n refresh: function (key) {\n this.element.setAttribute(key, this.bindings.attr[key].get());\n }\n });\n binders.css = Binder.extend({\n init: function (element, bindings, options) {\n Binder.fn.init.call(this, element, bindings, options);\n this.classes = {};\n },\n refresh: function (className) {\n var element = $(this.element), binding = this.bindings.css[className], hasClass = this.classes[className] = binding.get();\n if (hasClass) {\n element.addClass(className);\n } else {\n element.removeClass(className);\n }\n }\n });\n binders.style = Binder.extend({\n refresh: function (key) {\n this.element.style[key] = this.bindings.style[key].get() || '';\n }\n });\n binders.enabled = Binder.extend({\n refresh: function () {\n if (this.bindings.enabled.get()) {\n this.element.removeAttribute('disabled');\n } else {\n this.element.setAttribute('disabled', 'disabled');\n }\n }\n });\n binders.readonly = Binder.extend({\n refresh: function () {\n if (this.bindings.readonly.get()) {\n this.element.setAttribute('readonly', 'readonly');\n } else {\n this.element.removeAttribute('readonly');\n }\n }\n });\n binders.disabled = Binder.extend({\n refresh: function () {\n if (this.bindings.disabled.get()) {\n this.element.setAttribute('disabled', 'disabled');\n } else {\n this.element.removeAttribute('disabled');\n }\n }\n });\n binders.events = Binder.extend({\n init: function (element, bindings, options) {\n Binder.fn.init.call(this, element, bindings, options);\n this.handlers = {};\n },\n refresh: function (key) {\n var element = $(this.element), binding = this.bindings.events[key], handler = this.handlers[key];\n if (handler) {\n element.off(key, handler);\n }\n handler = this.handlers[key] = binding.get();\n element.on(key, binding.source, handler);\n },\n destroy: function () {\n var element = $(this.element), handler;\n for (handler in this.handlers) {\n element.off(handler, this.handlers[handler]);\n }\n }\n });\n binders.text = Binder.extend({\n refresh: function () {\n var text = this.bindings.text.get();\n var dataFormat = this.element.getAttribute('data-format') || '';\n if (text == null) {\n text = '';\n }\n $(this.element).text(kendo.toString(text, dataFormat));\n }\n });\n binders.visible = Binder.extend({\n refresh: function () {\n if (this.bindings.visible.get()) {\n this.element.style.display = '';\n } else {\n this.element.style.display = 'none';\n }\n }\n });\n binders.invisible = Binder.extend({\n refresh: function () {\n if (!this.bindings.invisible.get()) {\n this.element.style.display = '';\n } else {\n this.element.style.display = 'none';\n }\n }\n });\n binders.html = Binder.extend({\n refresh: function () {\n this.element.innerHTML = this.bindings.html.get();\n }\n });\n binders.value = TypedBinder.extend({\n init: function (element, bindings, options) {\n TypedBinder.fn.init.call(this, element, bindings, options);\n this._change = proxy(this.change, this);\n this.eventName = options.valueUpdate || CHANGE;\n $(this.element).on(this.eventName, this._change);\n this._initChange = false;\n },\n change: function () {\n this._initChange = this.eventName != CHANGE;\n this.bindings[VALUE].set(this.parsedValue());\n this._initChange = false;\n },\n refresh: function () {\n if (!this._initChange) {\n var value = this.bindings[VALUE].get();\n if (value == null) {\n value = '';\n }\n var type = this.dataType();\n if (type == 'date') {\n value = kendo.toString(value, 'yyyy-MM-dd');\n } else if (type == 'datetime-local') {\n value = kendo.toString(value, 'yyyy-MM-ddTHH:mm:ss');\n }\n this.element.value = value;\n }\n this._initChange = false;\n },\n destroy: function () {\n $(this.element).off(this.eventName, this._change);\n }\n });\n binders.source = Binder.extend({\n init: function (element, bindings, options) {\n Binder.fn.init.call(this, element, bindings, options);\n var source = this.bindings.source.get();\n if (source instanceof kendo.data.DataSource && options.autoBind !== false) {\n source.fetch();\n }\n },\n refresh: function (e) {\n var that = this, source = that.bindings.source.get();\n if (source instanceof ObservableArray || source instanceof kendo.data.DataSource) {\n e = e || {};\n if (e.action == 'add') {\n that.add(e.index, e.items);\n } else if (e.action == 'remove') {\n that.remove(e.index, e.items);\n } else if (e.action != 'itemchange') {\n that.render();\n }\n } else {\n that.render();\n }\n },\n container: function () {\n var element = this.element;\n if (element.nodeName.toLowerCase() == 'table') {\n if (!element.tBodies[0]) {\n element.appendChild(document.createElement('tbody'));\n }\n element = element.tBodies[0];\n }\n return element;\n },\n template: function () {\n var options = this.options, template = options.template, nodeName = this.container().nodeName.toLowerCase();\n if (!template) {\n if (nodeName == 'select') {\n if (options.valueField || options.textField) {\n template = kendo.format('', options.valueField || options.textField, options.textField || options.valueField);\n } else {\n template = '';\n }\n } else if (nodeName == 'tbody') {\n template = '#:data#';\n } else if (nodeName == 'ul' || nodeName == 'ol') {\n template = '
  • #:data#
  • ';\n } else {\n template = '#:data#';\n }\n template = kendo.template(template);\n }\n return template;\n },\n add: function (index, items) {\n var element = this.container(), parents, idx, length, child, clone = element.cloneNode(false), reference = element.children[index];\n $(clone).html(kendo.render(this.template(), items));\n if (clone.children.length) {\n parents = this.bindings.source._parents();\n for (idx = 0, length = items.length; idx < length; idx++) {\n child = clone.children[0];\n element.insertBefore(child, reference || null);\n bindElement(child, items[idx], this.options.roles, [items[idx]].concat(parents));\n }\n }\n },\n remove: function (index, items) {\n var idx, element = this.container();\n for (idx = 0; idx < items.length; idx++) {\n var child = element.children[index];\n unbindElementTree(child, true);\n if (child.parentNode == element) {\n element.removeChild(child);\n }\n }\n },\n render: function () {\n var source = this.bindings.source.get(), parents, idx, length, element = this.container(), template = this.template();\n if (source == null) {\n return;\n }\n if (source instanceof kendo.data.DataSource) {\n source = source.view();\n }\n if (!(source instanceof ObservableArray) && toString.call(source) !== '[object Array]') {\n source = [source];\n }\n if (this.bindings.template) {\n unbindElementChildren(element, true);\n $(element).html(this.bindings.template.render(source));\n if (element.children.length) {\n parents = this.bindings.source._parents();\n for (idx = 0, length = source.length; idx < length; idx++) {\n bindElement(element.children[idx], source[idx], this.options.roles, [source[idx]].concat(parents));\n }\n }\n } else {\n $(element).html(kendo.render(template, source));\n }\n }\n });\n binders.input = {\n checked: TypedBinder.extend({\n init: function (element, bindings, options) {\n TypedBinder.fn.init.call(this, element, bindings, options);\n this._change = proxy(this.change, this);\n $(this.element).change(this._change);\n },\n change: function () {\n var element = this.element;\n var value = this.value();\n if (element.type == 'radio') {\n value = this.parsedValue();\n this.bindings[CHECKED].set(value);\n } else if (element.type == 'checkbox') {\n var source = this.bindings[CHECKED].get();\n var index;\n if (source instanceof ObservableArray) {\n value = this.parsedValue();\n if (value instanceof Date) {\n for (var i = 0; i < source.length; i++) {\n if (source[i] instanceof Date && +source[i] === +value) {\n index = i;\n break;\n }\n }\n } else {\n index = source.indexOf(value);\n }\n if (index > -1) {\n source.splice(index, 1);\n } else {\n source.push(value);\n }\n } else {\n this.bindings[CHECKED].set(value);\n }\n }\n },\n refresh: function () {\n var value = this.bindings[CHECKED].get(), source = value, type = this.dataType(), element = this.element;\n if (element.type == 'checkbox') {\n if (source instanceof ObservableArray) {\n var index = -1;\n value = this.parsedValue();\n if (value instanceof Date) {\n for (var i = 0; i < source.length; i++) {\n if (source[i] instanceof Date && +source[i] === +value) {\n index = i;\n break;\n }\n }\n } else {\n index = source.indexOf(value);\n }\n element.checked = index >= 0;\n } else {\n element.checked = source;\n }\n } else if (element.type == 'radio' && value != null) {\n if (type == 'date') {\n value = kendo.toString(value, 'yyyy-MM-dd');\n } else if (type == 'datetime-local') {\n value = kendo.toString(value, 'yyyy-MM-ddTHH:mm:ss');\n }\n if (element.value === value.toString()) {\n element.checked = true;\n } else {\n element.checked = false;\n }\n }\n },\n value: function () {\n var element = this.element, value = element.value;\n if (element.type == 'checkbox') {\n value = element.checked;\n }\n return value;\n },\n destroy: function () {\n $(this.element).off(CHANGE, this._change);\n }\n })\n };\n binders.select = {\n source: binders.source.extend({\n refresh: function (e) {\n var that = this, source = that.bindings.source.get();\n if (source instanceof ObservableArray || source instanceof kendo.data.DataSource) {\n e = e || {};\n if (e.action == 'add') {\n that.add(e.index, e.items);\n } else if (e.action == 'remove') {\n that.remove(e.index, e.items);\n } else if (e.action == 'itemchange' || e.action === undefined) {\n that.render();\n if (that.bindings.value) {\n if (that.bindings.value) {\n var val = retrievePrimitiveValues(that.bindings.value.get(), $(that.element).data('valueField'));\n if (val === null) {\n that.element.selectedIndex = -1;\n } else {\n that.element.value = val;\n }\n }\n }\n }\n } else {\n that.render();\n }\n }\n }),\n value: TypedBinder.extend({\n init: function (target, bindings, options) {\n TypedBinder.fn.init.call(this, target, bindings, options);\n this._change = proxy(this.change, this);\n $(this.element).change(this._change);\n },\n parsedValue: function () {\n var dataType = this.dataType();\n var values = [];\n var value, option, idx, length;\n for (idx = 0, length = this.element.options.length; idx < length; idx++) {\n option = this.element.options[idx];\n if (option.selected) {\n value = option.attributes.value;\n if (value && value.specified) {\n value = option.value;\n } else {\n value = option.text;\n }\n values.push(this._parseValue(value, dataType));\n }\n }\n return values;\n },\n change: function () {\n var values = [], element = this.element, source, field = this.options.valueField || this.options.textField, valuePrimitive = this.options.valuePrimitive, option, valueIndex, value, idx, length;\n for (idx = 0, length = element.options.length; idx < length; idx++) {\n option = element.options[idx];\n if (option.selected) {\n value = option.attributes.value;\n if (value && value.specified) {\n value = option.value;\n } else {\n value = option.text;\n }\n if (field) {\n values.push(value);\n } else {\n values.push(this._parseValue(value, this.dataType()));\n }\n }\n }\n if (field) {\n source = this.bindings.source.get();\n if (source instanceof kendo.data.DataSource) {\n source = source.view();\n }\n for (valueIndex = 0; valueIndex < values.length; valueIndex++) {\n for (idx = 0, length = source.length; idx < length; idx++) {\n var sourceValue = source[idx].get(field);\n var match = String(sourceValue) === values[valueIndex];\n if (match) {\n values[valueIndex] = source[idx];\n break;\n }\n }\n }\n }\n value = this.bindings[VALUE].get();\n if (value instanceof ObservableArray) {\n value.splice.apply(value, [\n 0,\n value.length\n ].concat(values));\n } else if (!valuePrimitive && (value instanceof ObservableObject || value === null || value === undefined || !field)) {\n this.bindings[VALUE].set(values[0]);\n } else {\n this.bindings[VALUE].set(values[0].get(field));\n }\n },\n refresh: function () {\n var optionIndex, element = this.element, options = element.options, value = this.bindings[VALUE].get(), values = value, field = this.options.valueField || this.options.textField, found = false, type = this.dataType(), optionValue;\n if (!(values instanceof ObservableArray)) {\n values = new ObservableArray([value]);\n }\n element.selectedIndex = -1;\n for (var valueIndex = 0; valueIndex < values.length; valueIndex++) {\n value = values[valueIndex];\n if (field && value instanceof ObservableObject) {\n value = value.get(field);\n }\n if (type == 'date') {\n value = kendo.toString(values[valueIndex], 'yyyy-MM-dd');\n } else if (type == 'datetime-local') {\n value = kendo.toString(values[valueIndex], 'yyyy-MM-ddTHH:mm:ss');\n }\n for (optionIndex = 0; optionIndex < options.length; optionIndex++) {\n optionValue = options[optionIndex].value;\n if (optionValue === '' && value !== '') {\n optionValue = options[optionIndex].text;\n }\n if (value != null && optionValue == value.toString()) {\n options[optionIndex].selected = true;\n found = true;\n }\n }\n }\n },\n destroy: function () {\n $(this.element).off(CHANGE, this._change);\n }\n })\n };\n function dataSourceBinding(bindingName, fieldName, setter) {\n return Binder.extend({\n init: function (widget, bindings, options) {\n var that = this;\n Binder.fn.init.call(that, widget.element[0], bindings, options);\n that.widget = widget;\n that._dataBinding = proxy(that.dataBinding, that);\n that._dataBound = proxy(that.dataBound, that);\n that._itemChange = proxy(that.itemChange, that);\n },\n itemChange: function (e) {\n bindElement(e.item[0], e.data, this._ns(e.ns), [e.data].concat(this.bindings[bindingName]._parents()));\n },\n dataBinding: function (e) {\n var idx, length, widget = this.widget, items = e.removedItems || widget.items();\n for (idx = 0, length = items.length; idx < length; idx++) {\n unbindElementTree(items[idx], false);\n }\n },\n _ns: function (ns) {\n ns = ns || kendo.ui;\n var all = [\n kendo.ui,\n kendo.dataviz.ui,\n kendo.mobile.ui\n ];\n all.splice($.inArray(ns, all), 1);\n all.unshift(ns);\n return kendo.rolesFromNamespaces(all);\n },\n dataBound: function (e) {\n var idx, length, widget = this.widget, items = e.addedItems || widget.items(), dataSource = widget[fieldName], view, parents, hds = kendo.data.HierarchicalDataSource;\n if (hds && dataSource instanceof hds) {\n return;\n }\n if (items.length) {\n view = e.addedDataItems || dataSource.flatView();\n parents = this.bindings[bindingName]._parents();\n for (idx = 0, length = view.length; idx < length; idx++) {\n bindElement(items[idx], view[idx], this._ns(e.ns), [view[idx]].concat(parents));\n }\n }\n },\n refresh: function (e) {\n var that = this, source, widget = that.widget, select, multiselect;\n e = e || {};\n if (!e.action) {\n that.destroy();\n widget.bind('dataBinding', that._dataBinding);\n widget.bind('dataBound', that._dataBound);\n widget.bind('itemChange', that._itemChange);\n source = that.bindings[bindingName].get();\n if (widget[fieldName] instanceof kendo.data.DataSource && widget[fieldName] != source) {\n if (source instanceof kendo.data.DataSource) {\n widget[setter](source);\n } else if (source && source._dataSource) {\n widget[setter](source._dataSource);\n } else {\n widget[fieldName].data(source);\n select = kendo.ui.Select && widget instanceof kendo.ui.Select;\n multiselect = kendo.ui.MultiSelect && widget instanceof kendo.ui.MultiSelect;\n if (that.bindings.value && (select || multiselect)) {\n widget.value(retrievePrimitiveValues(that.bindings.value.get(), widget.options.dataValueField));\n }\n }\n }\n }\n },\n destroy: function () {\n var widget = this.widget;\n widget.unbind('dataBinding', this._dataBinding);\n widget.unbind('dataBound', this._dataBound);\n widget.unbind('itemChange', this._itemChange);\n }\n });\n }\n binders.widget = {\n events: Binder.extend({\n init: function (widget, bindings, options) {\n Binder.fn.init.call(this, widget.element[0], bindings, options);\n this.widget = widget;\n this.handlers = {};\n },\n refresh: function (key) {\n var binding = this.bindings.events[key], handler = this.handlers[key];\n if (handler) {\n this.widget.unbind(key, handler);\n }\n handler = binding.get();\n this.handlers[key] = function (e) {\n e.data = binding.source;\n handler(e);\n if (e.data === binding.source) {\n delete e.data;\n }\n };\n this.widget.bind(key, this.handlers[key]);\n },\n destroy: function () {\n var handler;\n for (handler in this.handlers) {\n this.widget.unbind(handler, this.handlers[handler]);\n }\n }\n }),\n checked: Binder.extend({\n init: function (widget, bindings, options) {\n Binder.fn.init.call(this, widget.element[0], bindings, options);\n this.widget = widget;\n this._change = proxy(this.change, this);\n this.widget.bind(CHANGE, this._change);\n },\n change: function () {\n this.bindings[CHECKED].set(this.value());\n },\n refresh: function () {\n this.widget.check(this.bindings[CHECKED].get() === true);\n },\n value: function () {\n var element = this.element, value = element.value;\n if (value == 'on' || value == 'off') {\n value = element.checked;\n }\n return value;\n },\n destroy: function () {\n this.widget.unbind(CHANGE, this._change);\n }\n }),\n visible: Binder.extend({\n init: function (widget, bindings, options) {\n Binder.fn.init.call(this, widget.element[0], bindings, options);\n this.widget = widget;\n },\n refresh: function () {\n var visible = this.bindings.visible.get();\n this.widget.wrapper[0].style.display = visible ? '' : 'none';\n }\n }),\n invisible: Binder.extend({\n init: function (widget, bindings, options) {\n Binder.fn.init.call(this, widget.element[0], bindings, options);\n this.widget = widget;\n },\n refresh: function () {\n var invisible = this.bindings.invisible.get();\n this.widget.wrapper[0].style.display = invisible ? 'none' : '';\n }\n }),\n enabled: Binder.extend({\n init: function (widget, bindings, options) {\n Binder.fn.init.call(this, widget.element[0], bindings, options);\n this.widget = widget;\n },\n refresh: function () {\n if (this.widget.enable) {\n this.widget.enable(this.bindings.enabled.get());\n }\n }\n }),\n disabled: Binder.extend({\n init: function (widget, bindings, options) {\n Binder.fn.init.call(this, widget.element[0], bindings, options);\n this.widget = widget;\n },\n refresh: function () {\n if (this.widget.enable) {\n this.widget.enable(!this.bindings.disabled.get());\n }\n }\n }),\n source: dataSourceBinding('source', 'dataSource', 'setDataSource'),\n value: Binder.extend({\n init: function (widget, bindings, options) {\n Binder.fn.init.call(this, widget.element[0], bindings, options);\n this.widget = widget;\n this._change = $.proxy(this.change, this);\n this.widget.first(CHANGE, this._change);\n var value = this.bindings.value.get();\n this._valueIsObservableObject = !options.valuePrimitive && (value == null || value instanceof ObservableObject);\n this._valueIsObservableArray = value instanceof ObservableArray;\n this._initChange = false;\n },\n _source: function () {\n var source;\n if (this.widget.dataItem) {\n source = this.widget.dataItem();\n if (source && source instanceof ObservableObject) {\n return [source];\n }\n }\n if (this.bindings.source) {\n source = this.bindings.source.get();\n }\n if (!source || source instanceof kendo.data.DataSource) {\n source = this.widget.dataSource.flatView();\n }\n return source;\n },\n change: function () {\n var value = this.widget.value(), field = this.options.dataValueField || this.options.dataTextField, isArray = toString.call(value) === '[object Array]', isObservableObject = this._valueIsObservableObject, valueIndex, valueLength, values = [], sourceItem, sourceValue, idx, length, source;\n this._initChange = true;\n if (field) {\n if (value === '' && (isObservableObject || this.options.valuePrimitive)) {\n value = null;\n } else {\n source = this._source();\n if (isArray) {\n valueLength = value.length;\n values = value.slice(0);\n }\n for (idx = 0, length = source.length; idx < length; idx++) {\n sourceItem = source[idx];\n sourceValue = sourceItem.get(field);\n if (isArray) {\n for (valueIndex = 0; valueIndex < valueLength; valueIndex++) {\n if (sourceValue == values[valueIndex]) {\n values[valueIndex] = sourceItem;\n break;\n }\n }\n } else if (sourceValue == value) {\n value = isObservableObject ? sourceItem : sourceValue;\n break;\n }\n }\n if (values[0]) {\n if (this._valueIsObservableArray) {\n value = values;\n } else if (isObservableObject || !field) {\n value = values[0];\n } else {\n value = values[0].get(field);\n }\n }\n }\n }\n this.bindings.value.set(value);\n this._initChange = false;\n },\n refresh: function () {\n if (!this._initChange) {\n var widget = this.widget;\n var options = widget.options;\n var textField = options.dataTextField;\n var valueField = options.dataValueField || textField;\n var value = this.bindings.value.get();\n var text = options.text || '';\n var idx = 0, length;\n var values = [];\n if (value === undefined) {\n value = null;\n }\n if (valueField) {\n if (value instanceof ObservableArray) {\n for (length = value.length; idx < length; idx++) {\n values[idx] = value[idx].get(valueField);\n }\n value = values;\n } else if (value instanceof ObservableObject) {\n text = value.get(textField);\n value = value.get(valueField);\n }\n }\n if (options.autoBind === false && !options.cascadeFrom && widget.listView && !widget.listView.bound()) {\n if (textField === valueField && !text) {\n text = value;\n }\n if (!text && (value || value === 0) && options.valuePrimitive) {\n widget.value(value);\n } else {\n widget._preselect(value, text);\n }\n } else {\n widget.value(value);\n }\n }\n this._initChange = false;\n },\n destroy: function () {\n this.widget.unbind(CHANGE, this._change);\n }\n }),\n gantt: { dependencies: dataSourceBinding('dependencies', 'dependencies', 'setDependenciesDataSource') },\n multiselect: {\n value: Binder.extend({\n init: function (widget, bindings, options) {\n Binder.fn.init.call(this, widget.element[0], bindings, options);\n this.widget = widget;\n this._change = $.proxy(this.change, this);\n this.widget.first(CHANGE, this._change);\n this._initChange = false;\n },\n change: function () {\n var that = this, oldValues = that.bindings[VALUE].get(), valuePrimitive = that.options.valuePrimitive, newValues = valuePrimitive ? that.widget.value() : that.widget.dataItems();\n var field = this.options.dataValueField || this.options.dataTextField;\n newValues = newValues.slice(0);\n that._initChange = true;\n if (oldValues instanceof ObservableArray) {\n var remove = [];\n var newLength = newValues.length;\n var i = 0, j = 0;\n var old = oldValues[i];\n var same = false;\n var removeIndex;\n var newValue;\n var found;\n while (old !== undefined) {\n found = false;\n for (j = 0; j < newLength; j++) {\n if (valuePrimitive) {\n same = newValues[j] == old;\n } else {\n newValue = newValues[j];\n newValue = newValue.get ? newValue.get(field) : newValue;\n same = newValue == (old.get ? old.get(field) : old);\n }\n if (same) {\n newValues.splice(j, 1);\n newLength -= 1;\n found = true;\n break;\n }\n }\n if (!found) {\n remove.push(old);\n arraySplice(oldValues, i, 1);\n removeIndex = i;\n } else {\n i += 1;\n }\n old = oldValues[i];\n }\n arraySplice(oldValues, oldValues.length, 0, newValues);\n if (remove.length) {\n oldValues.trigger('change', {\n action: 'remove',\n items: remove,\n index: removeIndex\n });\n }\n if (newValues.length) {\n oldValues.trigger('change', {\n action: 'add',\n items: newValues,\n index: oldValues.length - 1\n });\n }\n } else {\n that.bindings[VALUE].set(newValues);\n }\n that._initChange = false;\n },\n refresh: function () {\n if (!this._initChange) {\n var options = this.options, widget = this.widget, field = options.dataValueField || options.dataTextField, value = this.bindings.value.get(), data = value, idx = 0, length, values = [], selectedValue;\n if (value === undefined) {\n value = null;\n }\n if (field) {\n if (value instanceof ObservableArray) {\n for (length = value.length; idx < length; idx++) {\n selectedValue = value[idx];\n values[idx] = selectedValue.get ? selectedValue.get(field) : selectedValue;\n }\n value = values;\n } else if (value instanceof ObservableObject) {\n value = value.get(field);\n }\n }\n if (options.autoBind === false && options.valuePrimitive !== true && !widget._isBound()) {\n widget._preselect(data, value);\n } else {\n widget.value(value);\n }\n }\n },\n destroy: function () {\n this.widget.unbind(CHANGE, this._change);\n }\n })\n },\n scheduler: {\n source: dataSourceBinding('source', 'dataSource', 'setDataSource').extend({\n dataBound: function (e) {\n var idx;\n var length;\n var widget = this.widget;\n var elements = e.addedItems || widget.items();\n var data, parents;\n if (elements.length) {\n data = e.addedDataItems || widget.dataItems();\n parents = this.bindings.source._parents();\n for (idx = 0, length = data.length; idx < length; idx++) {\n bindElement(elements[idx], data[idx], this._ns(e.ns), [data[idx]].concat(parents));\n }\n }\n }\n })\n }\n };\n var arraySplice = function (arr, idx, remove, add) {\n add = add || [];\n remove = remove || 0;\n var addLength = add.length;\n var oldLength = arr.length;\n var shifted = [].slice.call(arr, idx + remove);\n var shiftedLength = shifted.length;\n var index;\n if (addLength) {\n addLength = idx + addLength;\n index = 0;\n for (; idx < addLength; idx++) {\n arr[idx] = add[index];\n index++;\n }\n arr.length = addLength;\n } else if (remove) {\n arr.length = idx;\n remove += idx;\n while (idx < remove) {\n delete arr[--remove];\n }\n }\n if (shiftedLength) {\n shiftedLength = idx + shiftedLength;\n index = 0;\n for (; idx < shiftedLength; idx++) {\n arr[idx] = shifted[index];\n index++;\n }\n arr.length = shiftedLength;\n }\n idx = arr.length;\n while (idx < oldLength) {\n delete arr[idx];\n idx++;\n }\n };\n var BindingTarget = Class.extend({\n init: function (target, options) {\n this.target = target;\n this.options = options;\n this.toDestroy = [];\n },\n bind: function (bindings) {\n var key, hasValue, hasSource, hasEvents, hasChecked, hasCss, widgetBinding = this instanceof WidgetBindingTarget, specificBinders = this.binders();\n for (key in bindings) {\n if (key == VALUE) {\n hasValue = true;\n } else if (key == SOURCE) {\n hasSource = true;\n } else if (key == EVENTS && !widgetBinding) {\n hasEvents = true;\n } else if (key == CHECKED) {\n hasChecked = true;\n } else if (key == CSS) {\n hasCss = true;\n } else {\n this.applyBinding(key, bindings, specificBinders);\n }\n }\n if (hasSource) {\n this.applyBinding(SOURCE, bindings, specificBinders);\n }\n if (hasValue) {\n this.applyBinding(VALUE, bindings, specificBinders);\n }\n if (hasChecked) {\n this.applyBinding(CHECKED, bindings, specificBinders);\n }\n if (hasEvents && !widgetBinding) {\n this.applyBinding(EVENTS, bindings, specificBinders);\n }\n if (hasCss && !widgetBinding) {\n this.applyBinding(CSS, bindings, specificBinders);\n }\n },\n binders: function () {\n return binders[this.target.nodeName.toLowerCase()] || {};\n },\n applyBinding: function (name, bindings, specificBinders) {\n var binder = specificBinders[name] || binders[name], toDestroy = this.toDestroy, attribute, binding = bindings[name];\n if (binder) {\n binder = new binder(this.target, bindings, this.options);\n toDestroy.push(binder);\n if (binding instanceof Binding) {\n binder.bind(binding);\n toDestroy.push(binding);\n } else {\n for (attribute in binding) {\n binder.bind(binding, attribute);\n toDestroy.push(binding[attribute]);\n }\n }\n } else if (name !== 'template') {\n throw new Error('The ' + name + ' binding is not supported by the ' + this.target.nodeName.toLowerCase() + ' element');\n }\n },\n destroy: function () {\n var idx, length, toDestroy = this.toDestroy;\n for (idx = 0, length = toDestroy.length; idx < length; idx++) {\n toDestroy[idx].destroy();\n }\n }\n });\n var WidgetBindingTarget = BindingTarget.extend({\n binders: function () {\n return binders.widget[this.target.options.name.toLowerCase()] || {};\n },\n applyBinding: function (name, bindings, specificBinders) {\n var binder = specificBinders[name] || binders.widget[name], toDestroy = this.toDestroy, attribute, binding = bindings[name];\n if (binder) {\n binder = new binder(this.target, bindings, this.target.options);\n toDestroy.push(binder);\n if (binding instanceof Binding) {\n binder.bind(binding);\n toDestroy.push(binding);\n } else {\n for (attribute in binding) {\n binder.bind(binding, attribute);\n toDestroy.push(binding[attribute]);\n }\n }\n } else {\n throw new Error('The ' + name + ' binding is not supported by the ' + this.target.options.name + ' widget');\n }\n }\n });\n function bindingTargetForRole(element, roles) {\n var widget = kendo.initWidget(element, {}, roles);\n if (widget) {\n return new WidgetBindingTarget(widget);\n }\n }\n var keyValueRegExp = /[A-Za-z0-9_\\-]+:(\\{([^}]*)\\}|[^,}]+)/g, whiteSpaceRegExp = /\\s/g;\n function parseBindings(bind) {\n var result = {}, idx, length, token, colonIndex, key, value, tokens;\n tokens = bind.match(keyValueRegExp);\n for (idx = 0, length = tokens.length; idx < length; idx++) {\n token = tokens[idx];\n colonIndex = token.indexOf(':');\n key = token.substring(0, colonIndex);\n value = token.substring(colonIndex + 1);\n if (value.charAt(0) == '{') {\n value = parseBindings(value);\n }\n result[key] = value;\n }\n return result;\n }\n function createBindings(bindings, source, type) {\n var binding, result = {};\n for (binding in bindings) {\n result[binding] = new type(source, bindings[binding]);\n }\n return result;\n }\n function bindElement(element, source, roles, parents) {\n var role = element.getAttribute('data-' + kendo.ns + 'role'), idx, bind = element.getAttribute('data-' + kendo.ns + 'bind'), childrenCopy = [], deep = true, bindings, options = {}, target;\n parents = parents || [source];\n if (role || bind) {\n unbindElement(element, false);\n }\n if (role) {\n target = bindingTargetForRole(element, roles);\n }\n if (bind) {\n bind = parseBindings(bind.replace(whiteSpaceRegExp, ''));\n if (!target) {\n options = kendo.parseOptions(element, {\n textField: '',\n valueField: '',\n template: '',\n valueUpdate: CHANGE,\n valuePrimitive: false,\n autoBind: true\n });\n options.roles = roles;\n target = new BindingTarget(element, options);\n }\n target.source = source;\n bindings = createBindings(bind, parents, Binding);\n if (options.template) {\n bindings.template = new TemplateBinding(parents, '', options.template);\n }\n if (bindings.click) {\n bind.events = bind.events || {};\n bind.events.click = bind.click;\n bindings.click.destroy();\n delete bindings.click;\n }\n if (bindings.source) {\n deep = false;\n }\n if (bind.attr) {\n bindings.attr = createBindings(bind.attr, parents, Binding);\n }\n if (bind.style) {\n bindings.style = createBindings(bind.style, parents, Binding);\n }\n if (bind.events) {\n bindings.events = createBindings(bind.events, parents, EventBinding);\n }\n if (bind.css) {\n bindings.css = createBindings(bind.css, parents, Binding);\n }\n target.bind(bindings);\n }\n if (target) {\n element.kendoBindingTarget = target;\n }\n var children = element.children;\n if (deep && children) {\n for (idx = 0; idx < children.length; idx++) {\n childrenCopy[idx] = children[idx];\n }\n for (idx = 0; idx < childrenCopy.length; idx++) {\n bindElement(childrenCopy[idx], source, roles, parents);\n }\n }\n }\n function bind(dom, object) {\n var idx, length, node, roles = kendo.rolesFromNamespaces([].slice.call(arguments, 2));\n object = kendo.observable(object);\n dom = $(dom);\n for (idx = 0, length = dom.length; idx < length; idx++) {\n node = dom[idx];\n if (node.nodeType === 1) {\n bindElement(node, object, roles);\n }\n }\n }\n function unbindElement(element, destroyWidget) {\n var bindingTarget = element.kendoBindingTarget;\n if (bindingTarget) {\n bindingTarget.destroy();\n if (deleteExpando) {\n delete element.kendoBindingTarget;\n } else if (element.removeAttribute) {\n element.removeAttribute('kendoBindingTarget');\n } else {\n element.kendoBindingTarget = null;\n }\n }\n if (destroyWidget) {\n var widget = kendo.widgetInstance($(element));\n if (widget && typeof widget.destroy === FUNCTION) {\n widget.destroy();\n }\n }\n }\n function unbindElementTree(element, destroyWidgets) {\n unbindElement(element, destroyWidgets);\n unbindElementChildren(element, destroyWidgets);\n }\n function unbindElementChildren(element, destroyWidgets) {\n var children = element.children;\n if (children) {\n for (var idx = 0, length = children.length; idx < length; idx++) {\n unbindElementTree(children[idx], destroyWidgets);\n }\n }\n }\n function unbind(dom) {\n var idx, length;\n dom = $(dom);\n for (idx = 0, length = dom.length; idx < length; idx++) {\n unbindElementTree(dom[idx], false);\n }\n }\n function notify(widget, namespace) {\n var element = widget.element, bindingTarget = element[0].kendoBindingTarget;\n if (bindingTarget) {\n bind(element, bindingTarget.source, namespace);\n }\n }\n function retrievePrimitiveValues(value, valueField) {\n var values = [];\n var idx = 0;\n var length;\n var item;\n if (!valueField) {\n return value;\n }\n if (value instanceof ObservableArray) {\n for (length = value.length; idx < length; idx++) {\n item = value[idx];\n values[idx] = item.get ? item.get(valueField) : item[valueField];\n }\n value = values;\n } else if (value instanceof ObservableObject) {\n value = value.get(valueField);\n }\n return value;\n }\n kendo.unbind = unbind;\n kendo.bind = bind;\n kendo.data.binders = binders;\n kendo.data.Binder = Binder;\n kendo.notify = notify;\n kendo.observable = function (object) {\n if (!(object instanceof ObservableObject)) {\n object = new ObservableObject(object);\n }\n return object;\n };\n kendo.observableHierarchy = function (array) {\n var dataSource = kendo.data.HierarchicalDataSource.create(array);\n function recursiveRead(data) {\n var i, children;\n for (i = 0; i < data.length; i++) {\n data[i]._initChildren();\n children = data[i].children;\n children.fetch();\n data[i].items = children.data();\n recursiveRead(data[i].items);\n }\n }\n dataSource.fetch();\n recursiveRead(dataSource.data());\n dataSource._data._dataSource = dataSource;\n return dataSource._data;\n };\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.fx', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'fx',\n name: 'Effects',\n category: 'framework',\n description: 'Required for animation effects in all Kendo UI widgets.',\n depends: ['core']\n };\n (function ($, undefined) {\n var kendo = window.kendo, fx = kendo.effects, each = $.each, extend = $.extend, proxy = $.proxy, support = kendo.support, browser = support.browser, transforms = support.transforms, transitions = support.transitions, scaleProperties = {\n scale: 0,\n scalex: 0,\n scaley: 0,\n scale3d: 0\n }, translateProperties = {\n translate: 0,\n translatex: 0,\n translatey: 0,\n translate3d: 0\n }, hasZoom = typeof document.documentElement.style.zoom !== 'undefined' && !transforms, matrix3dRegExp = /matrix3?d?\\s*\\(.*,\\s*([\\d\\.\\-]+)\\w*?,\\s*([\\d\\.\\-]+)\\w*?,\\s*([\\d\\.\\-]+)\\w*?,\\s*([\\d\\.\\-]+)\\w*?/i, cssParamsRegExp = /^(-?[\\d\\.\\-]+)?[\\w\\s]*,?\\s*(-?[\\d\\.\\-]+)?[\\w\\s]*/i, translateXRegExp = /translatex?$/i, oldEffectsRegExp = /(zoom|fade|expand)(\\w+)/, singleEffectRegExp = /(zoom|fade|expand)/, unitRegExp = /[xy]$/i, transformProps = [\n 'perspective',\n 'rotate',\n 'rotatex',\n 'rotatey',\n 'rotatez',\n 'rotate3d',\n 'scale',\n 'scalex',\n 'scaley',\n 'scalez',\n 'scale3d',\n 'skew',\n 'skewx',\n 'skewy',\n 'translate',\n 'translatex',\n 'translatey',\n 'translatez',\n 'translate3d',\n 'matrix',\n 'matrix3d'\n ], transform2d = [\n 'rotate',\n 'scale',\n 'scalex',\n 'scaley',\n 'skew',\n 'skewx',\n 'skewy',\n 'translate',\n 'translatex',\n 'translatey',\n 'matrix'\n ], transform2units = {\n 'rotate': 'deg',\n scale: '',\n skew: 'px',\n translate: 'px'\n }, cssPrefix = transforms.css, round = Math.round, BLANK = '', PX = 'px', NONE = 'none', AUTO = 'auto', WIDTH = 'width', HEIGHT = 'height', HIDDEN = 'hidden', ORIGIN = 'origin', ABORT_ID = 'abortId', OVERFLOW = 'overflow', TRANSLATE = 'translate', POSITION = 'position', COMPLETE_CALLBACK = 'completeCallback', TRANSITION = cssPrefix + 'transition', TRANSFORM = cssPrefix + 'transform', BACKFACE = cssPrefix + 'backface-visibility', PERSPECTIVE = cssPrefix + 'perspective', DEFAULT_PERSPECTIVE = '1500px', TRANSFORM_PERSPECTIVE = 'perspective(' + DEFAULT_PERSPECTIVE + ')', directions = {\n left: {\n reverse: 'right',\n property: 'left',\n transition: 'translatex',\n vertical: false,\n modifier: -1\n },\n right: {\n reverse: 'left',\n property: 'left',\n transition: 'translatex',\n vertical: false,\n modifier: 1\n },\n down: {\n reverse: 'up',\n property: 'top',\n transition: 'translatey',\n vertical: true,\n modifier: 1\n },\n up: {\n reverse: 'down',\n property: 'top',\n transition: 'translatey',\n vertical: true,\n modifier: -1\n },\n top: { reverse: 'bottom' },\n bottom: { reverse: 'top' },\n 'in': {\n reverse: 'out',\n modifier: -1\n },\n out: {\n reverse: 'in',\n modifier: 1\n },\n vertical: { reverse: 'vertical' },\n horizontal: { reverse: 'horizontal' }\n };\n kendo.directions = directions;\n extend($.fn, {\n kendoStop: function (clearQueue, gotoEnd) {\n if (transitions) {\n return fx.stopQueue(this, clearQueue || false, gotoEnd || false);\n } else {\n return this.stop(clearQueue, gotoEnd);\n }\n }\n });\n if (transforms && !transitions) {\n each(transform2d, function (idx, value) {\n $.fn[value] = function (val) {\n if (typeof val == 'undefined') {\n return animationProperty(this, value);\n } else {\n var that = $(this)[0], transformValue = value + '(' + val + transform2units[value.replace(unitRegExp, '')] + ')';\n if (that.style.cssText.indexOf(TRANSFORM) == -1) {\n $(this).css(TRANSFORM, transformValue);\n } else {\n that.style.cssText = that.style.cssText.replace(new RegExp(value + '\\\\(.*?\\\\)', 'i'), transformValue);\n }\n }\n return this;\n };\n $.fx.step[value] = function (fx) {\n $(fx.elem)[value](fx.now);\n };\n });\n var curProxy = $.fx.prototype.cur;\n $.fx.prototype.cur = function () {\n if (transform2d.indexOf(this.prop) != -1) {\n return parseFloat($(this.elem)[this.prop]());\n }\n return curProxy.apply(this, arguments);\n };\n }\n kendo.toggleClass = function (element, classes, options, add) {\n if (classes) {\n classes = classes.split(' ');\n if (transitions) {\n options = extend({\n exclusive: 'all',\n duration: 400,\n ease: 'ease-out'\n }, options);\n element.css(TRANSITION, options.exclusive + ' ' + options.duration + 'ms ' + options.ease);\n setTimeout(function () {\n element.css(TRANSITION, '').css(HEIGHT);\n }, options.duration);\n }\n each(classes, function (idx, value) {\n element.toggleClass(value, add);\n });\n }\n return element;\n };\n kendo.parseEffects = function (input, mirror) {\n var effects = {};\n if (typeof input === 'string') {\n each(input.split(' '), function (idx, value) {\n var redirectedEffect = !singleEffectRegExp.test(value), resolved = value.replace(oldEffectsRegExp, function (match, $1, $2) {\n return $1 + ':' + $2.toLowerCase();\n }), effect = resolved.split(':'), direction = effect[1], effectBody = {};\n if (effect.length > 1) {\n effectBody.direction = mirror && redirectedEffect ? directions[direction].reverse : direction;\n }\n effects[effect[0]] = effectBody;\n });\n } else {\n each(input, function (idx) {\n var direction = this.direction;\n if (direction && mirror && !singleEffectRegExp.test(idx)) {\n this.direction = directions[direction].reverse;\n }\n effects[idx] = this;\n });\n }\n return effects;\n };\n function parseInteger(value) {\n return parseInt(value, 10);\n }\n function parseCSS(element, property) {\n return parseInteger(element.css(property));\n }\n function keys(obj) {\n var acc = [];\n for (var propertyName in obj) {\n acc.push(propertyName);\n }\n return acc;\n }\n function strip3DTransforms(properties) {\n for (var key in properties) {\n if (transformProps.indexOf(key) != -1 && transform2d.indexOf(key) == -1) {\n delete properties[key];\n }\n }\n return properties;\n }\n function normalizeCSS(element, properties) {\n var transformation = [], cssValues = {}, lowerKey, key, value, isTransformed;\n for (key in properties) {\n lowerKey = key.toLowerCase();\n isTransformed = transforms && transformProps.indexOf(lowerKey) != -1;\n if (!support.hasHW3D && isTransformed && transform2d.indexOf(lowerKey) == -1) {\n delete properties[key];\n } else {\n value = properties[key];\n if (isTransformed) {\n transformation.push(key + '(' + value + ')');\n } else {\n cssValues[key] = value;\n }\n }\n }\n if (transformation.length) {\n cssValues[TRANSFORM] = transformation.join(' ');\n }\n return cssValues;\n }\n if (transitions) {\n extend(fx, {\n transition: function (element, properties, options) {\n var css, delay = 0, oldKeys = element.data('keys') || [], timeoutID;\n options = extend({\n duration: 200,\n ease: 'ease-out',\n complete: null,\n exclusive: 'all'\n }, options);\n var stopTransitionCalled = false;\n var stopTransition = function () {\n if (!stopTransitionCalled) {\n stopTransitionCalled = true;\n if (timeoutID) {\n clearTimeout(timeoutID);\n timeoutID = null;\n }\n element.removeData(ABORT_ID).dequeue().css(TRANSITION, '').css(TRANSITION);\n options.complete.call(element);\n }\n };\n options.duration = $.fx ? $.fx.speeds[options.duration] || options.duration : options.duration;\n css = normalizeCSS(element, properties);\n $.merge(oldKeys, keys(css));\n element.data('keys', $.unique(oldKeys)).height();\n element.css(TRANSITION, options.exclusive + ' ' + options.duration + 'ms ' + options.ease).css(TRANSITION);\n element.css(css).css(TRANSFORM);\n if (transitions.event) {\n element.one(transitions.event, stopTransition);\n if (options.duration !== 0) {\n delay = 500;\n }\n }\n timeoutID = setTimeout(stopTransition, options.duration + delay);\n element.data(ABORT_ID, timeoutID);\n element.data(COMPLETE_CALLBACK, stopTransition);\n },\n stopQueue: function (element, clearQueue, gotoEnd) {\n var cssValues, taskKeys = element.data('keys'), retainPosition = !gotoEnd && taskKeys, completeCallback = element.data(COMPLETE_CALLBACK);\n if (retainPosition) {\n cssValues = kendo.getComputedStyles(element[0], taskKeys);\n }\n if (completeCallback) {\n completeCallback();\n }\n if (retainPosition) {\n element.css(cssValues);\n }\n return element.removeData('keys').stop(clearQueue);\n }\n });\n }\n function animationProperty(element, property) {\n if (transforms) {\n var transform = element.css(TRANSFORM);\n if (transform == NONE) {\n return property == 'scale' ? 1 : 0;\n }\n var match = transform.match(new RegExp(property + '\\\\s*\\\\(([\\\\d\\\\w\\\\.]+)')), computed = 0;\n if (match) {\n computed = parseInteger(match[1]);\n } else {\n match = transform.match(matrix3dRegExp) || [\n 0,\n 0,\n 0,\n 0,\n 0\n ];\n property = property.toLowerCase();\n if (translateXRegExp.test(property)) {\n computed = parseFloat(match[3] / match[2]);\n } else if (property == 'translatey') {\n computed = parseFloat(match[4] / match[2]);\n } else if (property == 'scale') {\n computed = parseFloat(match[2]);\n } else if (property == 'rotate') {\n computed = parseFloat(Math.atan2(match[2], match[1]));\n }\n }\n return computed;\n } else {\n return parseFloat(element.css(property));\n }\n }\n var EffectSet = kendo.Class.extend({\n init: function (element, options) {\n var that = this;\n that.element = element;\n that.effects = [];\n that.options = options;\n that.restore = [];\n },\n run: function (effects) {\n var that = this, effect, idx, jdx, length = effects.length, element = that.element, options = that.options, deferred = $.Deferred(), start = {}, end = {}, target, children, childrenLength;\n that.effects = effects;\n deferred.then($.proxy(that, 'complete'));\n element.data('animating', true);\n for (idx = 0; idx < length; idx++) {\n effect = effects[idx];\n effect.setReverse(options.reverse);\n effect.setOptions(options);\n that.addRestoreProperties(effect.restore);\n effect.prepare(start, end);\n children = effect.children();\n for (jdx = 0, childrenLength = children.length; jdx < childrenLength; jdx++) {\n children[jdx].duration(options.duration).run();\n }\n }\n for (var effectName in options.effects) {\n extend(end, options.effects[effectName].properties);\n }\n if (!element.is(':visible')) {\n extend(start, { display: element.data('olddisplay') || 'block' });\n }\n if (transforms && !options.reset) {\n target = element.data('targetTransform');\n if (target) {\n start = extend(target, start);\n }\n }\n start = normalizeCSS(element, start);\n if (transforms && !transitions) {\n start = strip3DTransforms(start);\n }\n element.css(start).css(TRANSFORM);\n for (idx = 0; idx < length; idx++) {\n effects[idx].setup();\n }\n if (options.init) {\n options.init();\n }\n element.data('targetTransform', end);\n fx.animate(element, end, extend({}, options, { complete: deferred.resolve }));\n return deferred.promise();\n },\n stop: function () {\n $(this.element).kendoStop(true, true);\n },\n addRestoreProperties: function (restore) {\n var element = this.element, value, i = 0, length = restore.length;\n for (; i < length; i++) {\n value = restore[i];\n this.restore.push(value);\n if (!element.data(value)) {\n element.data(value, element.css(value));\n }\n }\n },\n restoreCallback: function () {\n var element = this.element;\n for (var i = 0, length = this.restore.length; i < length; i++) {\n var value = this.restore[i];\n element.css(value, element.data(value));\n }\n },\n complete: function () {\n var that = this, idx = 0, element = that.element, options = that.options, effects = that.effects, length = effects.length;\n element.removeData('animating').dequeue();\n if (options.hide) {\n element.data('olddisplay', element.css('display')).hide();\n }\n this.restoreCallback();\n if (hasZoom && !transforms) {\n setTimeout($.proxy(this, 'restoreCallback'), 0);\n }\n for (; idx < length; idx++) {\n effects[idx].teardown();\n }\n if (options.completeCallback) {\n options.completeCallback(element);\n }\n }\n });\n fx.promise = function (element, options) {\n var effects = [], effectClass, effectSet = new EffectSet(element, options), parsedEffects = kendo.parseEffects(options.effects), effect;\n options.effects = parsedEffects;\n for (var effectName in parsedEffects) {\n effectClass = fx[capitalize(effectName)];\n if (effectClass) {\n effect = new effectClass(element, parsedEffects[effectName].direction);\n effects.push(effect);\n }\n }\n if (effects[0]) {\n effectSet.run(effects);\n } else {\n if (!element.is(':visible')) {\n element.css({ display: element.data('olddisplay') || 'block' }).css('display');\n }\n if (options.init) {\n options.init();\n }\n element.dequeue();\n effectSet.complete();\n }\n };\n extend(fx, {\n animate: function (elements, properties, options) {\n var useTransition = options.transition !== false;\n delete options.transition;\n if (transitions && 'transition' in fx && useTransition) {\n fx.transition(elements, properties, options);\n } else {\n if (transforms) {\n elements.animate(strip3DTransforms(properties), {\n queue: false,\n show: false,\n hide: false,\n duration: options.duration,\n complete: options.complete\n });\n } else {\n elements.each(function () {\n var element = $(this), multiple = {};\n each(transformProps, function (idx, value) {\n var params, currentValue = properties ? properties[value] + ' ' : null;\n if (currentValue) {\n var single = properties;\n if (value in scaleProperties && properties[value] !== undefined) {\n params = currentValue.match(cssParamsRegExp);\n if (transforms) {\n extend(single, { scale: +params[0] });\n }\n } else {\n if (value in translateProperties && properties[value] !== undefined) {\n var position = element.css(POSITION), isFixed = position == 'absolute' || position == 'fixed';\n if (!element.data(TRANSLATE)) {\n if (isFixed) {\n element.data(TRANSLATE, {\n top: parseCSS(element, 'top') || 0,\n left: parseCSS(element, 'left') || 0,\n bottom: parseCSS(element, 'bottom'),\n right: parseCSS(element, 'right')\n });\n } else {\n element.data(TRANSLATE, {\n top: parseCSS(element, 'marginTop') || 0,\n left: parseCSS(element, 'marginLeft') || 0\n });\n }\n }\n var originalPosition = element.data(TRANSLATE);\n params = currentValue.match(cssParamsRegExp);\n if (params) {\n var dX = value == TRANSLATE + 'y' ? +null : +params[1], dY = value == TRANSLATE + 'y' ? +params[1] : +params[2];\n if (isFixed) {\n if (!isNaN(originalPosition.right)) {\n if (!isNaN(dX)) {\n extend(single, { right: originalPosition.right - dX });\n }\n } else {\n if (!isNaN(dX)) {\n extend(single, { left: originalPosition.left + dX });\n }\n }\n if (!isNaN(originalPosition.bottom)) {\n if (!isNaN(dY)) {\n extend(single, { bottom: originalPosition.bottom - dY });\n }\n } else {\n if (!isNaN(dY)) {\n extend(single, { top: originalPosition.top + dY });\n }\n }\n } else {\n if (!isNaN(dX)) {\n extend(single, { marginLeft: originalPosition.left + dX });\n }\n if (!isNaN(dY)) {\n extend(single, { marginTop: originalPosition.top + dY });\n }\n }\n }\n }\n }\n if (!transforms && value != 'scale' && value in single) {\n delete single[value];\n }\n if (single) {\n extend(multiple, single);\n }\n }\n });\n if (browser.msie) {\n delete multiple.scale;\n }\n element.animate(multiple, {\n queue: false,\n show: false,\n hide: false,\n duration: options.duration,\n complete: options.complete\n });\n });\n }\n }\n }\n });\n fx.animatedPromise = fx.promise;\n var Effect = kendo.Class.extend({\n init: function (element, direction) {\n var that = this;\n that.element = element;\n that._direction = direction;\n that.options = {};\n that._additionalEffects = [];\n if (!that.restore) {\n that.restore = [];\n }\n },\n reverse: function () {\n this._reverse = true;\n return this.run();\n },\n play: function () {\n this._reverse = false;\n return this.run();\n },\n add: function (additional) {\n this._additionalEffects.push(additional);\n return this;\n },\n direction: function (value) {\n this._direction = value;\n return this;\n },\n duration: function (duration) {\n this._duration = duration;\n return this;\n },\n compositeRun: function () {\n var that = this, effectSet = new EffectSet(that.element, {\n reverse: that._reverse,\n duration: that._duration\n }), effects = that._additionalEffects.concat([that]);\n return effectSet.run(effects);\n },\n run: function () {\n if (this._additionalEffects && this._additionalEffects[0]) {\n return this.compositeRun();\n }\n var that = this, element = that.element, idx = 0, restore = that.restore, length = restore.length, value, deferred = $.Deferred(), start = {}, end = {}, target, children = that.children(), childrenLength = children.length;\n deferred.then($.proxy(that, '_complete'));\n element.data('animating', true);\n for (idx = 0; idx < length; idx++) {\n value = restore[idx];\n if (!element.data(value)) {\n element.data(value, element.css(value));\n }\n }\n for (idx = 0; idx < childrenLength; idx++) {\n children[idx].duration(that._duration).run();\n }\n that.prepare(start, end);\n if (!element.is(':visible')) {\n extend(start, { display: element.data('olddisplay') || 'block' });\n }\n if (transforms) {\n target = element.data('targetTransform');\n if (target) {\n start = extend(target, start);\n }\n }\n start = normalizeCSS(element, start);\n if (transforms && !transitions) {\n start = strip3DTransforms(start);\n }\n element.css(start).css(TRANSFORM);\n that.setup();\n element.data('targetTransform', end);\n fx.animate(element, end, {\n duration: that._duration,\n complete: deferred.resolve\n });\n return deferred.promise();\n },\n stop: function () {\n var idx = 0, children = this.children(), childrenLength = children.length;\n for (idx = 0; idx < childrenLength; idx++) {\n children[idx].stop();\n }\n $(this.element).kendoStop(true, true);\n return this;\n },\n restoreCallback: function () {\n var element = this.element;\n for (var i = 0, length = this.restore.length; i < length; i++) {\n var value = this.restore[i];\n element.css(value, element.data(value));\n }\n },\n _complete: function () {\n var that = this, element = that.element;\n element.removeData('animating').dequeue();\n that.restoreCallback();\n if (that.shouldHide()) {\n element.data('olddisplay', element.css('display')).hide();\n }\n if (hasZoom && !transforms) {\n setTimeout($.proxy(that, 'restoreCallback'), 0);\n }\n that.teardown();\n },\n setOptions: function (options) {\n extend(true, this.options, options);\n },\n children: function () {\n return [];\n },\n shouldHide: $.noop,\n setup: $.noop,\n prepare: $.noop,\n teardown: $.noop,\n directions: [],\n setReverse: function (reverse) {\n this._reverse = reverse;\n return this;\n }\n });\n function capitalize(word) {\n return word.charAt(0).toUpperCase() + word.substring(1);\n }\n function createEffect(name, definition) {\n var effectClass = Effect.extend(definition), directions = effectClass.prototype.directions;\n fx[capitalize(name)] = effectClass;\n fx.Element.prototype[name] = function (direction, opt1, opt2, opt3) {\n return new effectClass(this.element, direction, opt1, opt2, opt3);\n };\n each(directions, function (idx, theDirection) {\n fx.Element.prototype[name + capitalize(theDirection)] = function (opt1, opt2, opt3) {\n return new effectClass(this.element, theDirection, opt1, opt2, opt3);\n };\n });\n }\n var FOUR_DIRECTIONS = [\n 'left',\n 'right',\n 'up',\n 'down'\n ], IN_OUT = [\n 'in',\n 'out'\n ];\n createEffect('slideIn', {\n directions: FOUR_DIRECTIONS,\n divisor: function (value) {\n this.options.divisor = value;\n return this;\n },\n prepare: function (start, end) {\n var that = this, tmp, element = that.element, outerWidth = kendo._outerWidth, outerHeight = kendo._outerHeight, direction = directions[that._direction], offset = -direction.modifier * (direction.vertical ? outerHeight(element) : outerWidth(element)), startValue = offset / (that.options && that.options.divisor || 1) + PX, endValue = '0px';\n if (that._reverse) {\n tmp = start;\n start = end;\n end = tmp;\n }\n if (transforms) {\n start[direction.transition] = startValue;\n end[direction.transition] = endValue;\n } else {\n start[direction.property] = startValue;\n end[direction.property] = endValue;\n }\n }\n });\n createEffect('tile', {\n directions: FOUR_DIRECTIONS,\n init: function (element, direction, previous) {\n Effect.prototype.init.call(this, element, direction);\n this.options = { previous: previous };\n },\n previousDivisor: function (value) {\n this.options.previousDivisor = value;\n return this;\n },\n children: function () {\n var that = this, reverse = that._reverse, previous = that.options.previous, divisor = that.options.previousDivisor || 1, dir = that._direction;\n var children = [kendo.fx(that.element).slideIn(dir).setReverse(reverse)];\n if (previous) {\n children.push(kendo.fx(previous).slideIn(directions[dir].reverse).divisor(divisor).setReverse(!reverse));\n }\n return children;\n }\n });\n function createToggleEffect(name, property, defaultStart, defaultEnd) {\n createEffect(name, {\n directions: IN_OUT,\n startValue: function (value) {\n this._startValue = value;\n return this;\n },\n endValue: function (value) {\n this._endValue = value;\n return this;\n },\n shouldHide: function () {\n return this._shouldHide;\n },\n prepare: function (start, end) {\n var that = this, startValue, endValue, out = this._direction === 'out', startDataValue = that.element.data(property), startDataValueIsSet = !(isNaN(startDataValue) || startDataValue == defaultStart);\n if (startDataValueIsSet) {\n startValue = startDataValue;\n } else if (typeof this._startValue !== 'undefined') {\n startValue = this._startValue;\n } else {\n startValue = out ? defaultStart : defaultEnd;\n }\n if (typeof this._endValue !== 'undefined') {\n endValue = this._endValue;\n } else {\n endValue = out ? defaultEnd : defaultStart;\n }\n if (this._reverse) {\n start[property] = endValue;\n end[property] = startValue;\n } else {\n start[property] = startValue;\n end[property] = endValue;\n }\n that._shouldHide = end[property] === defaultEnd;\n }\n });\n }\n createToggleEffect('fade', 'opacity', 1, 0);\n createToggleEffect('zoom', 'scale', 1, 0.01);\n createEffect('slideMargin', {\n prepare: function (start, end) {\n var that = this, element = that.element, options = that.options, origin = element.data(ORIGIN), offset = options.offset, margin, reverse = that._reverse;\n if (!reverse && origin === null) {\n element.data(ORIGIN, parseFloat(element.css('margin-' + options.axis)));\n }\n margin = element.data(ORIGIN) || 0;\n end['margin-' + options.axis] = !reverse ? margin + offset : margin;\n }\n });\n createEffect('slideTo', {\n prepare: function (start, end) {\n var that = this, element = that.element, options = that.options, offset = options.offset.split(','), reverse = that._reverse;\n if (transforms) {\n end.translatex = !reverse ? offset[0] : 0;\n end.translatey = !reverse ? offset[1] : 0;\n } else {\n end.left = !reverse ? offset[0] : 0;\n end.top = !reverse ? offset[1] : 0;\n }\n element.css('left');\n }\n });\n createEffect('expand', {\n directions: [\n 'horizontal',\n 'vertical'\n ],\n restore: [OVERFLOW],\n prepare: function (start, end) {\n var that = this, element = that.element, options = that.options, reverse = that._reverse, property = that._direction === 'vertical' ? HEIGHT : WIDTH, setLength = element[0].style[property], oldLength = element.data(property), length = parseFloat(oldLength || setLength), realLength = round(element.css(property, AUTO)[property]());\n start.overflow = HIDDEN;\n length = options && options.reset ? realLength || length : length || realLength;\n end[property] = (reverse ? 0 : length) + PX;\n start[property] = (reverse ? length : 0) + PX;\n if (oldLength === undefined) {\n element.data(property, setLength);\n }\n },\n shouldHide: function () {\n return this._reverse;\n },\n teardown: function () {\n var that = this, element = that.element, property = that._direction === 'vertical' ? HEIGHT : WIDTH, length = element.data(property);\n if (length == AUTO || length === BLANK) {\n setTimeout(function () {\n element.css(property, AUTO).css(property);\n }, 0);\n }\n }\n });\n var TRANSFER_START_STATE = {\n position: 'absolute',\n marginLeft: 0,\n marginTop: 0,\n scale: 1\n };\n createEffect('transfer', {\n init: function (element, target) {\n this.element = element;\n this.options = { target: target };\n this.restore = [];\n },\n setup: function () {\n this.element.appendTo(document.body);\n },\n prepare: function (start, end) {\n var that = this, element = that.element, outerBox = fx.box(element), innerBox = fx.box(that.options.target), currentScale = animationProperty(element, 'scale'), scale = fx.fillScale(innerBox, outerBox), transformOrigin = fx.transformOrigin(innerBox, outerBox);\n extend(start, TRANSFER_START_STATE);\n end.scale = 1;\n element.css(TRANSFORM, 'scale(1)').css(TRANSFORM);\n element.css(TRANSFORM, 'scale(' + currentScale + ')');\n start.top = outerBox.top;\n start.left = outerBox.left;\n start.transformOrigin = transformOrigin.x + PX + ' ' + transformOrigin.y + PX;\n if (that._reverse) {\n start.scale = scale;\n } else {\n end.scale = scale;\n }\n }\n });\n var CLIPS = {\n top: 'rect(auto auto $size auto)',\n bottom: 'rect($size auto auto auto)',\n left: 'rect(auto $size auto auto)',\n right: 'rect(auto auto auto $size)'\n };\n var ROTATIONS = {\n top: {\n start: 'rotatex(0deg)',\n end: 'rotatex(180deg)'\n },\n bottom: {\n start: 'rotatex(-180deg)',\n end: 'rotatex(0deg)'\n },\n left: {\n start: 'rotatey(0deg)',\n end: 'rotatey(-180deg)'\n },\n right: {\n start: 'rotatey(180deg)',\n end: 'rotatey(0deg)'\n }\n };\n function clipInHalf(container, direction) {\n var vertical = kendo.directions[direction].vertical, size = container[vertical ? HEIGHT : WIDTH]() / 2 + 'px';\n return CLIPS[direction].replace('$size', size);\n }\n createEffect('turningPage', {\n directions: FOUR_DIRECTIONS,\n init: function (element, direction, container) {\n Effect.prototype.init.call(this, element, direction);\n this._container = container;\n },\n prepare: function (start, end) {\n var that = this, reverse = that._reverse, direction = reverse ? directions[that._direction].reverse : that._direction, rotation = ROTATIONS[direction];\n start.zIndex = 1;\n if (that._clipInHalf) {\n start.clip = clipInHalf(that._container, kendo.directions[direction].reverse);\n }\n start[BACKFACE] = HIDDEN;\n end[TRANSFORM] = TRANSFORM_PERSPECTIVE + (reverse ? rotation.start : rotation.end);\n start[TRANSFORM] = TRANSFORM_PERSPECTIVE + (reverse ? rotation.end : rotation.start);\n },\n setup: function () {\n this._container.append(this.element);\n },\n face: function (value) {\n this._face = value;\n return this;\n },\n shouldHide: function () {\n var that = this, reverse = that._reverse, face = that._face;\n return reverse && !face || !reverse && face;\n },\n clipInHalf: function (value) {\n this._clipInHalf = value;\n return this;\n },\n temporary: function () {\n this.element.addClass('temp-page');\n return this;\n }\n });\n createEffect('staticPage', {\n directions: FOUR_DIRECTIONS,\n init: function (element, direction, container) {\n Effect.prototype.init.call(this, element, direction);\n this._container = container;\n },\n restore: ['clip'],\n prepare: function (start, end) {\n var that = this, direction = that._reverse ? directions[that._direction].reverse : that._direction;\n start.clip = clipInHalf(that._container, direction);\n start.opacity = 0.999;\n end.opacity = 1;\n },\n shouldHide: function () {\n var that = this, reverse = that._reverse, face = that._face;\n return reverse && !face || !reverse && face;\n },\n face: function (value) {\n this._face = value;\n return this;\n }\n });\n createEffect('pageturn', {\n directions: [\n 'horizontal',\n 'vertical'\n ],\n init: function (element, direction, face, back) {\n Effect.prototype.init.call(this, element, direction);\n this.options = {};\n this.options.face = face;\n this.options.back = back;\n },\n children: function () {\n var that = this, options = that.options, direction = that._direction === 'horizontal' ? 'left' : 'top', reverseDirection = kendo.directions[direction].reverse, reverse = that._reverse, temp, faceClone = options.face.clone(true).removeAttr('id'), backClone = options.back.clone(true).removeAttr('id'), element = that.element;\n if (reverse) {\n temp = direction;\n direction = reverseDirection;\n reverseDirection = temp;\n }\n return [\n kendo.fx(options.face).staticPage(direction, element).face(true).setReverse(reverse),\n kendo.fx(options.back).staticPage(reverseDirection, element).setReverse(reverse),\n kendo.fx(faceClone).turningPage(direction, element).face(true).clipInHalf(true).temporary().setReverse(reverse),\n kendo.fx(backClone).turningPage(reverseDirection, element).clipInHalf(true).temporary().setReverse(reverse)\n ];\n },\n prepare: function (start, end) {\n start[PERSPECTIVE] = DEFAULT_PERSPECTIVE;\n start.transformStyle = 'preserve-3d';\n start.opacity = 0.999;\n end.opacity = 1;\n },\n teardown: function () {\n this.element.find('.temp-page').remove();\n }\n });\n createEffect('flip', {\n directions: [\n 'horizontal',\n 'vertical'\n ],\n init: function (element, direction, face, back) {\n Effect.prototype.init.call(this, element, direction);\n this.options = {};\n this.options.face = face;\n this.options.back = back;\n },\n children: function () {\n var that = this, options = that.options, direction = that._direction === 'horizontal' ? 'left' : 'top', reverseDirection = kendo.directions[direction].reverse, reverse = that._reverse, temp, element = that.element;\n if (reverse) {\n temp = direction;\n direction = reverseDirection;\n reverseDirection = temp;\n }\n return [\n kendo.fx(options.face).turningPage(direction, element).face(true).setReverse(reverse),\n kendo.fx(options.back).turningPage(reverseDirection, element).setReverse(reverse)\n ];\n },\n prepare: function (start) {\n start[PERSPECTIVE] = DEFAULT_PERSPECTIVE;\n start.transformStyle = 'preserve-3d';\n }\n });\n var RESTORE_OVERFLOW = !support.mobileOS.android;\n var IGNORE_TRANSITION_EVENT_SELECTOR = '.km-touch-scrollbar, .km-actionsheet-wrapper';\n createEffect('replace', {\n _before: $.noop,\n _after: $.noop,\n init: function (element, previous, transitionClass) {\n Effect.prototype.init.call(this, element);\n this._previous = $(previous);\n this._transitionClass = transitionClass;\n },\n duration: function () {\n throw new Error('The replace effect does not support duration setting; the effect duration may be customized through the transition class rule');\n },\n beforeTransition: function (callback) {\n this._before = callback;\n return this;\n },\n afterTransition: function (callback) {\n this._after = callback;\n return this;\n },\n _both: function () {\n return $().add(this._element).add(this._previous);\n },\n _containerClass: function () {\n var direction = this._direction, containerClass = 'k-fx k-fx-start k-fx-' + this._transitionClass;\n if (direction) {\n containerClass += ' k-fx-' + direction;\n }\n if (this._reverse) {\n containerClass += ' k-fx-reverse';\n }\n return containerClass;\n },\n complete: function (e) {\n if (!this.deferred || e && $(e.target).is(IGNORE_TRANSITION_EVENT_SELECTOR)) {\n return;\n }\n var container = this.container;\n container.removeClass('k-fx-end').removeClass(this._containerClass()).off(transitions.event, this.completeProxy);\n this._previous.hide().removeClass('k-fx-current');\n this.element.removeClass('k-fx-next');\n if (RESTORE_OVERFLOW) {\n container.css(OVERFLOW, '');\n }\n if (!this.isAbsolute) {\n this._both().css(POSITION, '');\n }\n this.deferred.resolve();\n delete this.deferred;\n },\n run: function () {\n if (this._additionalEffects && this._additionalEffects[0]) {\n return this.compositeRun();\n }\n var that = this, element = that.element, previous = that._previous, container = element.parents().filter(previous.parents()).first(), both = that._both(), deferred = $.Deferred(), originalPosition = element.css(POSITION), originalOverflow;\n if (!container.length) {\n container = element.parent();\n }\n this.container = container;\n this.deferred = deferred;\n this.isAbsolute = originalPosition == 'absolute';\n if (!this.isAbsolute) {\n both.css(POSITION, 'absolute');\n }\n if (RESTORE_OVERFLOW) {\n originalOverflow = container.css(OVERFLOW);\n container.css(OVERFLOW, 'hidden');\n }\n if (!transitions) {\n this.complete();\n } else {\n element.addClass('k-fx-hidden');\n container.addClass(this._containerClass());\n this.completeProxy = $.proxy(this, 'complete');\n container.on(transitions.event, this.completeProxy);\n kendo.animationFrame(function () {\n element.removeClass('k-fx-hidden').addClass('k-fx-next');\n previous.css('display', '').addClass('k-fx-current');\n that._before(previous, element);\n kendo.animationFrame(function () {\n container.removeClass('k-fx-start').addClass('k-fx-end');\n that._after(previous, element);\n });\n });\n }\n return deferred.promise();\n },\n stop: function () {\n this.complete();\n }\n });\n var Animation = kendo.Class.extend({\n init: function () {\n var that = this;\n that._tickProxy = proxy(that._tick, that);\n that._started = false;\n },\n tick: $.noop,\n done: $.noop,\n onEnd: $.noop,\n onCancel: $.noop,\n start: function () {\n if (!this.enabled()) {\n return;\n }\n if (!this.done()) {\n this._started = true;\n kendo.animationFrame(this._tickProxy);\n } else {\n this.onEnd();\n }\n },\n enabled: function () {\n return true;\n },\n cancel: function () {\n this._started = false;\n this.onCancel();\n },\n _tick: function () {\n var that = this;\n if (!that._started) {\n return;\n }\n that.tick();\n if (!that.done()) {\n kendo.animationFrame(that._tickProxy);\n } else {\n that._started = false;\n that.onEnd();\n }\n }\n });\n var Transition = Animation.extend({\n init: function (options) {\n var that = this;\n extend(that, options);\n Animation.fn.init.call(that);\n },\n done: function () {\n return this.timePassed() >= this.duration;\n },\n timePassed: function () {\n return Math.min(this.duration, new Date() - this.startDate);\n },\n moveTo: function (options) {\n var that = this, movable = that.movable;\n that.initial = movable[that.axis];\n that.delta = options.location - that.initial;\n that.duration = typeof options.duration == 'number' ? options.duration : 300;\n that.tick = that._easeProxy(options.ease);\n that.startDate = new Date();\n that.start();\n },\n _easeProxy: function (ease) {\n var that = this;\n return function () {\n that.movable.moveAxis(that.axis, ease(that.timePassed(), that.initial, that.delta, that.duration));\n };\n }\n });\n extend(Transition, {\n easeOutExpo: function (t, b, c, d) {\n return t == d ? b + c : c * (-Math.pow(2, -10 * t / d) + 1) + b;\n },\n easeOutBack: function (t, b, c, d, s) {\n s = 1.70158;\n return c * ((t = t / d - 1) * t * ((s + 1) * t + s) + 1) + b;\n }\n });\n fx.Animation = Animation;\n fx.Transition = Transition;\n fx.createEffect = createEffect;\n fx.box = function (element) {\n element = $(element);\n var result = element.offset();\n result.width = kendo._outerWidth(element);\n result.height = kendo._outerHeight(element);\n return result;\n };\n fx.transformOrigin = function (inner, outer) {\n var x = (inner.left - outer.left) * outer.width / (outer.width - inner.width), y = (inner.top - outer.top) * outer.height / (outer.height - inner.height);\n return {\n x: isNaN(x) ? 0 : x,\n y: isNaN(y) ? 0 : y\n };\n };\n fx.fillScale = function (inner, outer) {\n return Math.min(inner.width / outer.width, inner.height / outer.height);\n };\n fx.fitScale = function (inner, outer) {\n return Math.max(inner.width / outer.width, inner.height / outer.height);\n };\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.view', [\n 'kendo.core',\n 'kendo.binder',\n 'kendo.fx'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'view',\n name: 'View',\n category: 'framework',\n description: 'The View class instantiates and handles the events of a certain screen from the application.',\n depends: [\n 'core',\n 'binder',\n 'fx'\n ],\n hidden: false\n };\n (function ($, undefined) {\n var kendo = window.kendo, Observable = kendo.Observable, SCRIPT = 'SCRIPT', INIT = 'init', SHOW = 'show', HIDE = 'hide', TRANSITION_START = 'transitionStart', TRANSITION_END = 'transitionEnd', ATTACH = 'attach', DETACH = 'detach', sizzleErrorRegExp = /unrecognized expression/;\n var View = Observable.extend({\n init: function (content, options) {\n var that = this;\n options = options || {};\n Observable.fn.init.call(that);\n that.content = content;\n that.id = kendo.guid();\n that.tagName = options.tagName || 'div';\n that.model = options.model;\n that._wrap = options.wrap !== false;\n this._evalTemplate = options.evalTemplate || false;\n that._fragments = {};\n that.bind([\n INIT,\n SHOW,\n HIDE,\n TRANSITION_START,\n TRANSITION_END\n ], options);\n },\n render: function (container) {\n var that = this, notInitialized = !that.element;\n if (notInitialized) {\n that.element = that._createElement();\n }\n if (container) {\n $(container).append(that.element);\n }\n if (notInitialized) {\n kendo.bind(that.element, that.model);\n that.trigger(INIT);\n }\n if (container) {\n that._eachFragment(ATTACH);\n that.trigger(SHOW);\n }\n return that.element;\n },\n clone: function () {\n return new ViewClone(this);\n },\n triggerBeforeShow: function () {\n return true;\n },\n triggerBeforeHide: function () {\n return true;\n },\n showStart: function () {\n this.element.css('display', '');\n },\n showEnd: function () {\n },\n hideEnd: function () {\n this.hide();\n },\n beforeTransition: function (type) {\n this.trigger(TRANSITION_START, { type: type });\n },\n afterTransition: function (type) {\n this.trigger(TRANSITION_END, { type: type });\n },\n hide: function () {\n this._eachFragment(DETACH);\n this.element.detach();\n this.trigger(HIDE);\n },\n destroy: function () {\n var element = this.element;\n if (element) {\n kendo.unbind(element);\n kendo.destroy(element);\n element.remove();\n }\n },\n fragments: function (fragments) {\n $.extend(this._fragments, fragments);\n },\n _eachFragment: function (methodName) {\n for (var placeholder in this._fragments) {\n this._fragments[placeholder][methodName](this, placeholder);\n }\n },\n _createElement: function () {\n var that = this, wrapper = '<' + that.tagName + ' />', element, content;\n try {\n content = $(document.getElementById(that.content) || that.content);\n if (content[0].tagName === SCRIPT) {\n content = content.html();\n }\n } catch (e) {\n if (sizzleErrorRegExp.test(e.message)) {\n content = that.content;\n }\n }\n if (typeof content === 'string') {\n content = content.replace(/^\\s+|\\s+$/g, '');\n if (that._evalTemplate) {\n content = kendo.template(content)(that.model || {});\n }\n element = $(wrapper).append(content);\n if (!that._wrap) {\n element = element.contents();\n }\n } else {\n element = content;\n if (that._evalTemplate) {\n var result = $(kendo.template($('
    ').append(element.clone(true)).html())(that.model || {}));\n if ($.contains(document, element[0])) {\n element.replaceWith(result);\n }\n element = result;\n }\n if (that._wrap) {\n element = element.wrapAll(wrapper).parent();\n }\n }\n return element;\n }\n });\n var ViewClone = kendo.Class.extend({\n init: function (view) {\n $.extend(this, {\n element: view.element.clone(true),\n transition: view.transition,\n id: view.id\n });\n view.element.parent().append(this.element);\n },\n hideEnd: function () {\n this.element.remove();\n },\n beforeTransition: $.noop,\n afterTransition: $.noop\n });\n var Layout = View.extend({\n init: function (content, options) {\n View.fn.init.call(this, content, options);\n this.containers = {};\n },\n container: function (selector) {\n var container = this.containers[selector];\n if (!container) {\n container = this._createContainer(selector);\n this.containers[selector] = container;\n }\n return container;\n },\n showIn: function (selector, view, transition) {\n this.container(selector).show(view, transition);\n },\n _createContainer: function (selector) {\n var root = this.render(), element = root.find(selector), container;\n if (!element.length && root.is(selector)) {\n if (root.is(selector)) {\n element = root;\n } else {\n throw new Error('can\\'t find a container with the specified ' + selector + ' selector');\n }\n }\n container = new ViewContainer(element);\n container.bind('accepted', function (e) {\n e.view.render(element);\n });\n return container;\n }\n });\n var Fragment = View.extend({\n attach: function (view, placeholder) {\n view.element.find(placeholder).replaceWith(this.render());\n },\n detach: function () {\n }\n });\n var transitionRegExp = /^(\\w+)(:(\\w+))?( (\\w+))?$/;\n function parseTransition(transition) {\n if (!transition) {\n return {};\n }\n var matches = transition.match(transitionRegExp) || [];\n return {\n type: matches[1],\n direction: matches[3],\n reverse: matches[5] === 'reverse'\n };\n }\n var ViewContainer = Observable.extend({\n init: function (container) {\n Observable.fn.init.call(this);\n this.container = container;\n this.history = [];\n this.view = null;\n this.running = false;\n },\n after: function () {\n this.running = false;\n this.trigger('complete', { view: this.view });\n this.trigger('after');\n },\n end: function () {\n this.view.showEnd();\n this.previous.hideEnd();\n this.after();\n },\n show: function (view, transition, locationID) {\n if (!view.triggerBeforeShow() || this.view && !this.view.triggerBeforeHide()) {\n this.trigger('after');\n return false;\n }\n locationID = locationID || view.id;\n var that = this, current = view === that.view ? view.clone() : that.view, history = that.history, previousEntry = history[history.length - 2] || {}, back = previousEntry.id === locationID, theTransition = transition || (back ? history[history.length - 1].transition : view.transition), transitionData = parseTransition(theTransition);\n if (that.running) {\n that.effect.stop();\n }\n if (theTransition === 'none') {\n theTransition = null;\n }\n that.trigger('accepted', { view: view });\n that.view = view;\n that.previous = current;\n that.running = true;\n if (!back) {\n history.push({\n id: locationID,\n transition: theTransition\n });\n } else {\n history.pop();\n }\n if (!current) {\n view.showStart();\n view.showEnd();\n that.after();\n return true;\n }\n if (!theTransition || !kendo.effects.enabled) {\n view.showStart();\n that.end();\n } else {\n view.element.addClass('k-fx-hidden');\n view.showStart();\n if (back && !transition) {\n transitionData.reverse = !transitionData.reverse;\n }\n that.effect = kendo.fx(view.element).replace(current.element, transitionData.type).beforeTransition(function () {\n view.beforeTransition('show');\n current.beforeTransition('hide');\n }).afterTransition(function () {\n view.afterTransition('show');\n current.afterTransition('hide');\n }).direction(transitionData.direction).setReverse(transitionData.reverse);\n that.effect.run().then(function () {\n that.end();\n });\n }\n return true;\n }\n });\n kendo.ViewContainer = ViewContainer;\n kendo.Fragment = Fragment;\n kendo.Layout = Layout;\n kendo.View = View;\n kendo.ViewClone = ViewClone;\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.data.signalr', ['kendo.data'], f);\n}(function () {\n var __meta__ = {\n id: 'data.signalr',\n name: 'SignalR',\n category: 'framework',\n depends: ['data'],\n hidden: true\n };\n (function ($) {\n var transport = kendo.data.RemoteTransport.extend({\n init: function (options) {\n var signalr = options && options.signalr ? options.signalr : {};\n var promise = signalr.promise;\n if (!promise) {\n throw new Error('The \"promise\" option must be set.');\n }\n if (typeof promise.done != 'function' || typeof promise.fail != 'function') {\n throw new Error('The \"promise\" option must be a Promise.');\n }\n this.promise = promise;\n var hub = signalr.hub;\n if (!hub) {\n throw new Error('The \"hub\" option must be set.');\n }\n if (typeof hub.on != 'function' || typeof hub.invoke != 'function') {\n throw new Error('The \"hub\" option is not a valid SignalR hub proxy.');\n }\n this.hub = hub;\n kendo.data.RemoteTransport.fn.init.call(this, options);\n },\n push: function (callbacks) {\n var client = this.options.signalr.client || {};\n if (client.create) {\n this.hub.on(client.create, callbacks.pushCreate);\n }\n if (client.update) {\n this.hub.on(client.update, callbacks.pushUpdate);\n }\n if (client.destroy) {\n this.hub.on(client.destroy, callbacks.pushDestroy);\n }\n },\n _crud: function (options, type) {\n var hub = this.hub;\n var server = this.options.signalr.server;\n if (!server || !server[type]) {\n throw new Error(kendo.format('The \"server.{0}\" option must be set.', type));\n }\n var args = [server[type]];\n var data = this.parameterMap(options.data, type);\n if (!$.isEmptyObject(data)) {\n args.push(data);\n }\n this.promise.done(function () {\n hub.invoke.apply(hub, args).done(options.success).fail(options.error);\n });\n },\n read: function (options) {\n this._crud(options, 'read');\n },\n create: function (options) {\n this._crud(options, 'create');\n },\n update: function (options) {\n this._crud(options, 'update');\n },\n destroy: function (options) {\n this._crud(options, 'destroy');\n }\n });\n $.extend(true, kendo.data, { transports: { signalr: transport } });\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.validator', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'validator',\n name: 'Validator',\n category: 'web',\n description: 'The Validator offers an easy way to do a client-side form validation.',\n depends: ['core']\n };\n (function ($, undefined) {\n var kendo = window.kendo, Widget = kendo.ui.Widget, NS = '.kendoValidator', INVALIDMSG = 'k-invalid-msg', invalidMsgRegExp = new RegExp(INVALIDMSG, 'i'), INVALIDINPUT = 'k-invalid', VALIDINPUT = 'k-valid', emailRegExp = /^[a-zA-Z0-9.!#$%&'*+\\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/i, urlRegExp = /^(https?|ftp):\\/\\/(((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:)*@)?(((\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5]))|((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.?)(:\\d*)?)(\\/((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)+(\\/(([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)*)*)?)?(\\?((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)|[\\uE000-\\uF8FF]|\\/|\\?)*)?(\\#((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)|\\/|\\?)*)?$/i, INPUTSELECTOR = ':input:not(:button,[type=submit],[type=reset],[disabled],[readonly])', CHECKBOXSELECTOR = ':checkbox:not([disabled],[readonly])', NUMBERINPUTSELECTOR = '[type=number],[type=range]', BLUR = 'blur', NAME = 'name', FORM = 'form', NOVALIDATE = 'novalidate', VALIDATE = 'validate', CHANGE = 'change', VALIDATE_INPUT = 'validateInput', proxy = $.proxy, patternMatcher = function (value, pattern) {\n if (typeof pattern === 'string') {\n pattern = new RegExp('^(?:' + pattern + ')$');\n }\n return pattern.test(value);\n }, matcher = function (input, selector, pattern) {\n var value = input.val();\n if (input.filter(selector).length && value !== '') {\n return patternMatcher(value, pattern);\n }\n return true;\n }, hasAttribute = function (input, name) {\n if (input.length) {\n return input[0].attributes[name] != null;\n }\n return false;\n };\n if (!kendo.ui.validator) {\n kendo.ui.validator = {\n rules: {},\n messages: {}\n };\n }\n function resolveRules(element) {\n var resolvers = kendo.ui.validator.ruleResolvers || {}, rules = {}, name;\n for (name in resolvers) {\n $.extend(true, rules, resolvers[name].resolve(element));\n }\n return rules;\n }\n function decode(value) {\n return value.replace(/&/g, '&').replace(/"/g, '\"').replace(/'/g, '\\'').replace(/</g, '<').replace(/>/g, '>');\n }\n function numberOfDecimalDigits(value) {\n value = (value + '').split('.');\n if (value.length > 1) {\n return value[1].length;\n }\n return 0;\n }\n function parseHtml(text) {\n if ($.parseHTML) {\n return $($.parseHTML(text));\n }\n return $(text);\n }\n function searchForMessageContainer(elements, fieldName) {\n var containers = $(), element, attr;\n for (var idx = 0, length = elements.length; idx < length; idx++) {\n element = elements[idx];\n if (invalidMsgRegExp.test(element.className)) {\n attr = element.getAttribute(kendo.attr('for'));\n if (attr === fieldName) {\n containers = containers.add(element);\n }\n }\n }\n return containers;\n }\n var Validator = Widget.extend({\n init: function (element, options) {\n var that = this, resolved = resolveRules(element), validateAttributeSelector = '[' + kendo.attr('validate') + '!=false]';\n options = options || {};\n options.rules = $.extend({}, kendo.ui.validator.rules, resolved.rules, options.rules);\n options.messages = $.extend({}, kendo.ui.validator.messages, resolved.messages, options.messages);\n Widget.fn.init.call(that, element, options);\n that._errorTemplate = kendo.template(that.options.errorTemplate);\n if (that.element.is(FORM)) {\n that.element.attr(NOVALIDATE, NOVALIDATE);\n }\n that._inputSelector = INPUTSELECTOR + validateAttributeSelector;\n that._checkboxSelector = CHECKBOXSELECTOR + validateAttributeSelector;\n that._errors = {};\n that._attachEvents();\n that._isValidated = false;\n },\n events: [\n VALIDATE,\n CHANGE,\n VALIDATE_INPUT\n ],\n options: {\n name: 'Validator',\n errorTemplate: '' + ' #=message#',\n messages: {\n required: '{0} is required',\n pattern: '{0} is not valid',\n min: '{0} should be greater than or equal to {1}',\n max: '{0} should be smaller than or equal to {1}',\n step: '{0} is not valid',\n email: '{0} is not valid email',\n url: '{0} is not valid URL',\n date: '{0} is not valid date',\n dateCompare: 'End date should be greater than or equal to the start date'\n },\n rules: {\n required: function (input) {\n var checkbox = input.filter('[type=checkbox]').length && !input.is(':checked'), value = input.val();\n return !(hasAttribute(input, 'required') && (!value || value === '' || value.length === 0 || checkbox));\n },\n pattern: function (input) {\n if (input.filter('[type=text],[type=email],[type=url],[type=tel],[type=search],[type=password]').filter('[pattern]').length && input.val() !== '') {\n return patternMatcher(input.val(), input.attr('pattern'));\n }\n return true;\n },\n min: function (input) {\n if (input.filter(NUMBERINPUTSELECTOR + ',[' + kendo.attr('type') + '=number]').filter('[min]').length && input.val() !== '') {\n var min = parseFloat(input.attr('min')) || 0, val = kendo.parseFloat(input.val());\n return min <= val;\n }\n return true;\n },\n max: function (input) {\n if (input.filter(NUMBERINPUTSELECTOR + ',[' + kendo.attr('type') + '=number]').filter('[max]').length && input.val() !== '') {\n var max = parseFloat(input.attr('max')) || 0, val = kendo.parseFloat(input.val());\n return max >= val;\n }\n return true;\n },\n step: function (input) {\n if (input.filter(NUMBERINPUTSELECTOR + ',[' + kendo.attr('type') + '=number]').filter('[step]').length && input.val() !== '') {\n var min = parseFloat(input.attr('min')) || 0, step = parseFloat(input.attr('step')) || 1, val = parseFloat(input.val()), decimals = numberOfDecimalDigits(step), raise;\n if (decimals) {\n raise = Math.pow(10, decimals);\n return Math.floor((val - min) * raise) % (step * raise) / Math.pow(100, decimals) === 0;\n }\n return (val - min) % step === 0;\n }\n return true;\n },\n email: function (input) {\n return matcher(input, '[type=email],[' + kendo.attr('type') + '=email]', emailRegExp);\n },\n url: function (input) {\n return matcher(input, '[type=url],[' + kendo.attr('type') + '=url]', urlRegExp);\n },\n date: function (input) {\n if (input.filter('[type^=date],[' + kendo.attr('type') + '=date]').length && input.val() !== '') {\n return kendo.parseDate(input.val(), input.attr(kendo.attr('format'))) !== null;\n }\n return true;\n }\n },\n validateOnBlur: true\n },\n destroy: function () {\n Widget.fn.destroy.call(this);\n this.element.off(NS);\n },\n value: function () {\n if (!this._isValidated) {\n return false;\n }\n return this.errors().length === 0;\n },\n _submit: function (e) {\n if (!this.validate()) {\n e.stopPropagation();\n e.stopImmediatePropagation();\n e.preventDefault();\n return false;\n }\n return true;\n },\n _checkElement: function (element) {\n var state = this.value();\n this.validateInput(element);\n if (this.value() !== state) {\n this.trigger(CHANGE);\n }\n },\n _attachEvents: function () {\n var that = this;\n if (that.element.is(FORM)) {\n that.element.on('submit' + NS, proxy(that._submit, that));\n }\n if (that.options.validateOnBlur) {\n if (!that.element.is(INPUTSELECTOR)) {\n that.element.on(BLUR + NS, that._inputSelector, function () {\n that._checkElement($(this));\n });\n that.element.on('click' + NS, that._checkboxSelector, function () {\n that._checkElement($(this));\n });\n } else {\n that.element.on(BLUR + NS, function () {\n that._checkElement(that.element);\n });\n if (that.element.is(CHECKBOXSELECTOR)) {\n that.element.on('click' + NS, function () {\n that._checkElement(that.element);\n });\n }\n }\n }\n },\n validate: function () {\n var inputs;\n var idx;\n var result = false;\n var length;\n var isValid = this.value();\n this._errors = {};\n if (!this.element.is(INPUTSELECTOR)) {\n var invalid = false;\n inputs = this.element.find(this._inputSelector);\n for (idx = 0, length = inputs.length; idx < length; idx++) {\n if (!this.validateInput(inputs.eq(idx))) {\n invalid = true;\n }\n }\n result = !invalid;\n } else {\n result = this.validateInput(this.element);\n }\n this.trigger(VALIDATE, { valid: result });\n if (isValid !== result) {\n this.trigger(CHANGE);\n }\n return result;\n },\n validateInput: function (input) {\n input = $(input);\n this._isValidated = true;\n var that = this, template = that._errorTemplate, result = that._checkValidity(input), valid = result.valid, className = '.' + INVALIDMSG, fieldName = input.attr(NAME) || '', lbl = that._findMessageContainer(fieldName).add(input.next(className).filter(function () {\n var element = $(this);\n if (element.filter('[' + kendo.attr('for') + ']').length) {\n return element.attr(kendo.attr('for')) === fieldName;\n }\n return true;\n })).hide(), messageText, wasValid = !input.attr('aria-invalid');\n input.removeAttr('aria-invalid');\n if (!valid) {\n messageText = that._extractMessage(input, result.key);\n that._errors[fieldName] = messageText;\n var messageLabel = parseHtml(template({ message: decode(messageText) }));\n var lblId = lbl.attr('id');\n that._decorateMessageContainer(messageLabel, fieldName);\n if (lblId) {\n messageLabel.attr('id', lblId);\n }\n if (!lbl.replaceWith(messageLabel).length) {\n messageLabel.insertAfter(input);\n }\n messageLabel.show();\n input.attr('aria-invalid', true);\n } else {\n delete that._errors[fieldName];\n }\n if (wasValid !== valid) {\n this.trigger(VALIDATE_INPUT, {\n valid: valid,\n input: input\n });\n }\n input.toggleClass(INVALIDINPUT, !valid);\n input.toggleClass(VALIDINPUT, valid);\n return valid;\n },\n hideMessages: function () {\n var that = this, className = '.' + INVALIDMSG, element = that.element;\n if (!element.is(INPUTSELECTOR)) {\n element.find(className).hide();\n } else {\n element.next(className).hide();\n }\n },\n _findMessageContainer: function (fieldName) {\n var locators = kendo.ui.validator.messageLocators, name, containers = $();\n for (var idx = 0, length = this.element.length; idx < length; idx++) {\n containers = containers.add(searchForMessageContainer(this.element[idx].getElementsByTagName('*'), fieldName));\n }\n for (name in locators) {\n containers = containers.add(locators[name].locate(this.element, fieldName));\n }\n return containers;\n },\n _decorateMessageContainer: function (container, fieldName) {\n var locators = kendo.ui.validator.messageLocators, name;\n container.addClass(INVALIDMSG).attr(kendo.attr('for'), fieldName || '');\n for (name in locators) {\n locators[name].decorate(container, fieldName);\n }\n container.attr('role', 'alert');\n },\n _extractMessage: function (input, ruleKey) {\n var that = this, customMessage = that.options.messages[ruleKey], fieldName = input.attr(NAME);\n customMessage = kendo.isFunction(customMessage) ? customMessage(input) : customMessage;\n return kendo.format(input.attr(kendo.attr(ruleKey + '-msg')) || input.attr('validationMessage') || input.attr('title') || customMessage || '', fieldName, input.attr(ruleKey) || input.attr(kendo.attr(ruleKey)));\n },\n _checkValidity: function (input) {\n var rules = this.options.rules, rule;\n for (rule in rules) {\n if (!rules[rule].call(this, input)) {\n return {\n valid: false,\n key: rule\n };\n }\n }\n return { valid: true };\n },\n errors: function () {\n var results = [], errors = this._errors, error;\n for (error in errors) {\n results.push(errors[error]);\n }\n return results;\n }\n });\n kendo.ui.plugin(Validator);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.draganddrop', [\n 'kendo.core',\n 'kendo.userevents'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'draganddrop',\n name: 'Drag & drop',\n category: 'framework',\n description: 'Drag & drop functionality for any DOM element.',\n depends: [\n 'core',\n 'userevents'\n ]\n };\n (function ($, undefined) {\n var kendo = window.kendo, support = kendo.support, document = window.document, $window = $(window), Class = kendo.Class, Widget = kendo.ui.Widget, Observable = kendo.Observable, UserEvents = kendo.UserEvents, proxy = $.proxy, extend = $.extend, getOffset = kendo.getOffset, draggables = {}, dropTargets = {}, dropAreas = {}, lastDropTarget, elementUnderCursor = kendo.elementUnderCursor, KEYUP = 'keyup', CHANGE = 'change', DRAGSTART = 'dragstart', HOLD = 'hold', DRAG = 'drag', DRAGEND = 'dragend', DRAGCANCEL = 'dragcancel', HINTDESTROYED = 'hintDestroyed', DRAGENTER = 'dragenter', DRAGLEAVE = 'dragleave', DROP = 'drop';\n function contains(parent, child) {\n try {\n return $.contains(parent, child) || parent == child;\n } catch (e) {\n return false;\n }\n }\n function numericCssPropery(element, property) {\n return parseInt(element.css(property), 10) || 0;\n }\n function within(value, range) {\n return Math.min(Math.max(value, range.min), range.max);\n }\n function containerBoundaries(container, element) {\n var offset = getOffset(container), outerWidth = kendo._outerWidth, outerHeight = kendo._outerHeight, minX = offset.left + numericCssPropery(container, 'borderLeftWidth') + numericCssPropery(container, 'paddingLeft'), minY = offset.top + numericCssPropery(container, 'borderTopWidth') + numericCssPropery(container, 'paddingTop'), maxX = minX + container.width() - outerWidth(element, true), maxY = minY + container.height() - outerHeight(element, true);\n return {\n x: {\n min: minX,\n max: maxX\n },\n y: {\n min: minY,\n max: maxY\n }\n };\n }\n function checkTarget(target, targets, areas) {\n var theTarget, theFilter, i = 0, targetLen = targets && targets.length, areaLen = areas && areas.length;\n while (target && target.parentNode) {\n for (i = 0; i < targetLen; i++) {\n theTarget = targets[i];\n if (theTarget.element[0] === target) {\n return {\n target: theTarget,\n targetElement: target\n };\n }\n }\n for (i = 0; i < areaLen; i++) {\n theFilter = areas[i];\n if ($.contains(theFilter.element[0], target) && support.matchesSelector.call(target, theFilter.options.filter)) {\n return {\n target: theFilter,\n targetElement: target\n };\n }\n }\n target = target.parentNode;\n }\n return undefined;\n }\n var TapCapture = Observable.extend({\n init: function (element, options) {\n var that = this, domElement = element[0];\n that.capture = false;\n if (domElement.addEventListener) {\n $.each(kendo.eventMap.down.split(' '), function () {\n domElement.addEventListener(this, proxy(that._press, that), true);\n });\n $.each(kendo.eventMap.up.split(' '), function () {\n domElement.addEventListener(this, proxy(that._release, that), true);\n });\n } else {\n $.each(kendo.eventMap.down.split(' '), function () {\n domElement.attachEvent(this, proxy(that._press, that));\n });\n $.each(kendo.eventMap.up.split(' '), function () {\n domElement.attachEvent(this, proxy(that._release, that));\n });\n }\n Observable.fn.init.call(that);\n that.bind([\n 'press',\n 'release'\n ], options || {});\n },\n captureNext: function () {\n this.capture = true;\n },\n cancelCapture: function () {\n this.capture = false;\n },\n _press: function (e) {\n var that = this;\n that.trigger('press');\n if (that.capture) {\n e.preventDefault();\n }\n },\n _release: function (e) {\n var that = this;\n that.trigger('release');\n if (that.capture) {\n e.preventDefault();\n that.cancelCapture();\n }\n }\n });\n var PaneDimension = Observable.extend({\n init: function (options) {\n var that = this;\n Observable.fn.init.call(that);\n that.forcedEnabled = false;\n $.extend(that, options);\n that.scale = 1;\n if (that.horizontal) {\n that.measure = 'offsetWidth';\n that.scrollSize = 'scrollWidth';\n that.axis = 'x';\n } else {\n that.measure = 'offsetHeight';\n that.scrollSize = 'scrollHeight';\n that.axis = 'y';\n }\n },\n makeVirtual: function () {\n $.extend(this, {\n virtual: true,\n forcedEnabled: true,\n _virtualMin: 0,\n _virtualMax: 0\n });\n },\n virtualSize: function (min, max) {\n if (this._virtualMin !== min || this._virtualMax !== max) {\n this._virtualMin = min;\n this._virtualMax = max;\n this.update();\n }\n },\n outOfBounds: function (offset) {\n return offset > this.max || offset < this.min;\n },\n forceEnabled: function () {\n this.forcedEnabled = true;\n },\n getSize: function () {\n return this.container[0][this.measure];\n },\n getTotal: function () {\n return this.element[0][this.scrollSize];\n },\n rescale: function (scale) {\n this.scale = scale;\n },\n update: function (silent) {\n var that = this, total = that.virtual ? that._virtualMax : that.getTotal(), scaledTotal = total * that.scale, size = that.getSize();\n if (total === 0 && !that.forcedEnabled) {\n return;\n }\n that.max = that.virtual ? -that._virtualMin : 0;\n that.size = size;\n that.total = scaledTotal;\n that.min = Math.min(that.max, size - scaledTotal);\n that.minScale = size / total;\n that.centerOffset = (scaledTotal - size) / 2;\n that.enabled = that.forcedEnabled || scaledTotal > size;\n if (!silent) {\n that.trigger(CHANGE, that);\n }\n }\n });\n var PaneDimensions = Observable.extend({\n init: function (options) {\n var that = this;\n Observable.fn.init.call(that);\n that.x = new PaneDimension(extend({ horizontal: true }, options));\n that.y = new PaneDimension(extend({ horizontal: false }, options));\n that.container = options.container;\n that.forcedMinScale = options.minScale;\n that.maxScale = options.maxScale || 100;\n that.bind(CHANGE, options);\n },\n rescale: function (newScale) {\n this.x.rescale(newScale);\n this.y.rescale(newScale);\n this.refresh();\n },\n centerCoordinates: function () {\n return {\n x: Math.min(0, -this.x.centerOffset),\n y: Math.min(0, -this.y.centerOffset)\n };\n },\n refresh: function () {\n var that = this;\n that.x.update();\n that.y.update();\n that.enabled = that.x.enabled || that.y.enabled;\n that.minScale = that.forcedMinScale || Math.min(that.x.minScale, that.y.minScale);\n that.fitScale = Math.max(that.x.minScale, that.y.minScale);\n that.trigger(CHANGE);\n }\n });\n var PaneAxis = Observable.extend({\n init: function (options) {\n var that = this;\n extend(that, options);\n Observable.fn.init.call(that);\n },\n outOfBounds: function () {\n return this.dimension.outOfBounds(this.movable[this.axis]);\n },\n dragMove: function (delta) {\n var that = this, dimension = that.dimension, axis = that.axis, movable = that.movable, position = movable[axis] + delta;\n if (!dimension.enabled) {\n return;\n }\n if (position < dimension.min && delta < 0 || position > dimension.max && delta > 0) {\n delta *= that.resistance;\n }\n movable.translateAxis(axis, delta);\n that.trigger(CHANGE, that);\n }\n });\n var Pane = Class.extend({\n init: function (options) {\n var that = this, x, y, resistance, movable;\n extend(that, { elastic: true }, options);\n resistance = that.elastic ? 0.5 : 0;\n movable = that.movable;\n that.x = x = new PaneAxis({\n axis: 'x',\n dimension: that.dimensions.x,\n resistance: resistance,\n movable: movable\n });\n that.y = y = new PaneAxis({\n axis: 'y',\n dimension: that.dimensions.y,\n resistance: resistance,\n movable: movable\n });\n that.userEvents.bind([\n 'press',\n 'move',\n 'end',\n 'gesturestart',\n 'gesturechange'\n ], {\n gesturestart: function (e) {\n that.gesture = e;\n that.offset = that.dimensions.container.offset();\n },\n press: function (e) {\n if ($(e.event.target).closest('a').is('[data-navigate-on-press=true]')) {\n e.sender.cancel();\n }\n },\n gesturechange: function (e) {\n var previousGesture = that.gesture, previousCenter = previousGesture.center, center = e.center, scaleDelta = e.distance / previousGesture.distance, minScale = that.dimensions.minScale, maxScale = that.dimensions.maxScale, coordinates;\n if (movable.scale <= minScale && scaleDelta < 1) {\n scaleDelta += (1 - scaleDelta) * 0.8;\n }\n if (movable.scale * scaleDelta >= maxScale) {\n scaleDelta = maxScale / movable.scale;\n }\n var offsetX = movable.x + that.offset.left, offsetY = movable.y + that.offset.top;\n coordinates = {\n x: (offsetX - previousCenter.x) * scaleDelta + center.x - offsetX,\n y: (offsetY - previousCenter.y) * scaleDelta + center.y - offsetY\n };\n movable.scaleWith(scaleDelta);\n x.dragMove(coordinates.x);\n y.dragMove(coordinates.y);\n that.dimensions.rescale(movable.scale);\n that.gesture = e;\n e.preventDefault();\n },\n move: function (e) {\n if (e.event.target.tagName.match(/textarea|input/i)) {\n return;\n }\n if (x.dimension.enabled || y.dimension.enabled) {\n x.dragMove(e.x.delta);\n y.dragMove(e.y.delta);\n e.preventDefault();\n } else {\n e.touch.skip();\n }\n },\n end: function (e) {\n e.preventDefault();\n }\n });\n }\n });\n var TRANSFORM_STYLE = support.transitions.prefix + 'Transform', translate;\n if (support.hasHW3D) {\n translate = function (x, y, scale) {\n return 'translate3d(' + x + 'px,' + y + 'px,0) scale(' + scale + ')';\n };\n } else {\n translate = function (x, y, scale) {\n return 'translate(' + x + 'px,' + y + 'px) scale(' + scale + ')';\n };\n }\n var Movable = Observable.extend({\n init: function (element) {\n var that = this;\n Observable.fn.init.call(that);\n that.element = $(element);\n that.element[0].style.webkitTransformOrigin = 'left top';\n that.x = 0;\n that.y = 0;\n that.scale = 1;\n that._saveCoordinates(translate(that.x, that.y, that.scale));\n },\n translateAxis: function (axis, by) {\n this[axis] += by;\n this.refresh();\n },\n scaleTo: function (scale) {\n this.scale = scale;\n this.refresh();\n },\n scaleWith: function (scaleDelta) {\n this.scale *= scaleDelta;\n this.refresh();\n },\n translate: function (coordinates) {\n this.x += coordinates.x;\n this.y += coordinates.y;\n this.refresh();\n },\n moveAxis: function (axis, value) {\n this[axis] = value;\n this.refresh();\n },\n moveTo: function (coordinates) {\n extend(this, coordinates);\n this.refresh();\n },\n refresh: function () {\n var that = this, x = that.x, y = that.y, newCoordinates;\n if (that.round) {\n x = Math.round(x);\n y = Math.round(y);\n }\n newCoordinates = translate(x, y, that.scale);\n if (newCoordinates != that.coordinates) {\n if (kendo.support.browser.msie && kendo.support.browser.version < 10) {\n that.element[0].style.position = 'absolute';\n that.element[0].style.left = that.x + 'px';\n that.element[0].style.top = that.y + 'px';\n } else {\n that.element[0].style[TRANSFORM_STYLE] = newCoordinates;\n }\n that._saveCoordinates(newCoordinates);\n that.trigger(CHANGE);\n }\n },\n _saveCoordinates: function (coordinates) {\n this.coordinates = coordinates;\n }\n });\n function destroyDroppable(collection, widget) {\n var groupName = widget.options.group, droppables = collection[groupName], i;\n Widget.fn.destroy.call(widget);\n if (droppables.length > 1) {\n for (i = 0; i < droppables.length; i++) {\n if (droppables[i] == widget) {\n droppables.splice(i, 1);\n break;\n }\n }\n } else {\n droppables.length = 0;\n delete collection[groupName];\n }\n }\n var DropTarget = Widget.extend({\n init: function (element, options) {\n var that = this;\n Widget.fn.init.call(that, element, options);\n var group = that.options.group;\n if (!(group in dropTargets)) {\n dropTargets[group] = [that];\n } else {\n dropTargets[group].push(that);\n }\n },\n events: [\n DRAGENTER,\n DRAGLEAVE,\n DROP\n ],\n options: {\n name: 'DropTarget',\n group: 'default'\n },\n destroy: function () {\n destroyDroppable(dropTargets, this);\n },\n _trigger: function (eventName, e) {\n var that = this, draggable = draggables[that.options.group];\n if (draggable) {\n return that.trigger(eventName, extend({}, e.event, {\n draggable: draggable,\n dropTarget: e.dropTarget\n }));\n }\n },\n _over: function (e) {\n this._trigger(DRAGENTER, e);\n },\n _out: function (e) {\n this._trigger(DRAGLEAVE, e);\n },\n _drop: function (e) {\n var that = this, draggable = draggables[that.options.group];\n if (draggable) {\n draggable.dropped = !that._trigger(DROP, e);\n }\n }\n });\n DropTarget.destroyGroup = function (groupName) {\n var group = dropTargets[groupName] || dropAreas[groupName], i;\n if (group) {\n for (i = 0; i < group.length; i++) {\n Widget.fn.destroy.call(group[i]);\n }\n group.length = 0;\n delete dropTargets[groupName];\n delete dropAreas[groupName];\n }\n };\n DropTarget._cache = dropTargets;\n var DropTargetArea = DropTarget.extend({\n init: function (element, options) {\n var that = this;\n Widget.fn.init.call(that, element, options);\n var group = that.options.group;\n if (!(group in dropAreas)) {\n dropAreas[group] = [that];\n } else {\n dropAreas[group].push(that);\n }\n },\n destroy: function () {\n destroyDroppable(dropAreas, this);\n },\n options: {\n name: 'DropTargetArea',\n group: 'default',\n filter: null\n }\n });\n var Draggable = Widget.extend({\n init: function (element, options) {\n var that = this;\n Widget.fn.init.call(that, element, options);\n that._activated = false;\n that.userEvents = new UserEvents(that.element, {\n global: true,\n allowSelection: true,\n filter: that.options.filter,\n threshold: that.options.distance,\n start: proxy(that._start, that),\n hold: proxy(that._hold, that),\n move: proxy(that._drag, that),\n end: proxy(that._end, that),\n cancel: proxy(that._cancel, that),\n select: proxy(that._select, that)\n });\n that._afterEndHandler = proxy(that._afterEnd, that);\n that._captureEscape = proxy(that._captureEscape, that);\n },\n events: [\n HOLD,\n DRAGSTART,\n DRAG,\n DRAGEND,\n DRAGCANCEL,\n HINTDESTROYED\n ],\n options: {\n name: 'Draggable',\n distance: kendo.support.touch ? 0 : 5,\n group: 'default',\n cursorOffset: null,\n axis: null,\n container: null,\n filter: null,\n ignore: null,\n holdToDrag: false,\n autoScroll: false,\n dropped: false\n },\n cancelHold: function () {\n this._activated = false;\n },\n _captureEscape: function (e) {\n var that = this;\n if (e.keyCode === kendo.keys.ESC) {\n that._trigger(DRAGCANCEL, { event: e });\n that.userEvents.cancel();\n }\n },\n _updateHint: function (e) {\n var that = this, coordinates, options = that.options, boundaries = that.boundaries, axis = options.axis, cursorOffset = that.options.cursorOffset;\n if (cursorOffset) {\n coordinates = {\n left: e.x.location + cursorOffset.left,\n top: e.y.location + cursorOffset.top\n };\n } else {\n that.hintOffset.left += e.x.delta;\n that.hintOffset.top += e.y.delta;\n coordinates = $.extend({}, that.hintOffset);\n }\n if (boundaries) {\n coordinates.top = within(coordinates.top, boundaries.y);\n coordinates.left = within(coordinates.left, boundaries.x);\n }\n if (axis === 'x') {\n delete coordinates.top;\n } else if (axis === 'y') {\n delete coordinates.left;\n }\n that.hint.css(coordinates);\n },\n _shouldIgnoreTarget: function (target) {\n var ignoreSelector = this.options.ignore;\n return ignoreSelector && $(target).is(ignoreSelector);\n },\n _select: function (e) {\n if (!this._shouldIgnoreTarget(e.event.target)) {\n e.preventDefault();\n }\n },\n _start: function (e) {\n var that = this, options = that.options, container = options.container, hint = options.hint;\n if (this._shouldIgnoreTarget(e.touch.initialTouch) || options.holdToDrag && !that._activated) {\n that.userEvents.cancel();\n return;\n }\n that.currentTarget = e.target;\n that.currentTargetOffset = getOffset(that.currentTarget);\n if (hint) {\n if (that.hint) {\n that.hint.stop(true, true).remove();\n }\n that.hint = kendo.isFunction(hint) ? $(hint.call(that, that.currentTarget)) : hint;\n var offset = getOffset(that.currentTarget);\n that.hintOffset = offset;\n that.hint.css({\n position: 'absolute',\n zIndex: 20000,\n left: offset.left,\n top: offset.top\n }).appendTo(document.body);\n that.angular('compile', function () {\n that.hint.removeAttr('ng-repeat');\n var scopeTarget = $(e.target);\n while (!scopeTarget.data('$$kendoScope') && scopeTarget.length) {\n scopeTarget = scopeTarget.parent();\n }\n return {\n elements: that.hint.get(),\n scopeFrom: scopeTarget.data('$$kendoScope')\n };\n });\n }\n draggables[options.group] = that;\n that.dropped = false;\n if (container) {\n that.boundaries = containerBoundaries(container, that.hint);\n }\n $(document).on(KEYUP, that._captureEscape);\n if (that._trigger(DRAGSTART, e)) {\n that.userEvents.cancel();\n that._afterEnd();\n }\n that.userEvents.capture();\n },\n _hold: function (e) {\n this.currentTarget = e.target;\n if (this._trigger(HOLD, e)) {\n this.userEvents.cancel();\n } else {\n this._activated = true;\n }\n },\n _drag: function (e) {\n e.preventDefault();\n var cursorElement = this._elementUnderCursor(e);\n if (this.options.autoScroll && this._cursorElement !== cursorElement) {\n this._scrollableParent = findScrollableParent(cursorElement);\n this._cursorElement = cursorElement;\n }\n this._lastEvent = e;\n this._processMovement(e, cursorElement);\n if (this.options.autoScroll) {\n if (this._scrollableParent[0]) {\n var velocity = autoScrollVelocity(e.x.location, e.y.location, scrollableViewPort(this._scrollableParent));\n this._scrollCompenstation = $.extend({}, this.hintOffset);\n this._scrollVelocity = velocity;\n if (velocity.y === 0 && velocity.x === 0) {\n clearInterval(this._scrollInterval);\n this._scrollInterval = null;\n } else if (!this._scrollInterval) {\n this._scrollInterval = setInterval($.proxy(this, '_autoScroll'), 50);\n }\n }\n }\n if (this.hint) {\n this._updateHint(e);\n }\n },\n _processMovement: function (e, cursorElement) {\n this._withDropTarget(cursorElement, function (target, targetElement) {\n if (!target) {\n if (lastDropTarget) {\n lastDropTarget._trigger(DRAGLEAVE, extend(e, { dropTarget: $(lastDropTarget.targetElement) }));\n lastDropTarget = null;\n }\n return;\n }\n if (lastDropTarget) {\n if (targetElement === lastDropTarget.targetElement) {\n return;\n }\n lastDropTarget._trigger(DRAGLEAVE, extend(e, { dropTarget: $(lastDropTarget.targetElement) }));\n }\n target._trigger(DRAGENTER, extend(e, { dropTarget: $(targetElement) }));\n lastDropTarget = extend(target, { targetElement: targetElement });\n });\n this._trigger(DRAG, extend(e, {\n dropTarget: lastDropTarget,\n elementUnderCursor: cursorElement\n }));\n },\n _autoScroll: function () {\n var parent = this._scrollableParent[0], velocity = this._scrollVelocity, compensation = this._scrollCompenstation;\n if (!parent) {\n return;\n }\n var cursorElement = this._elementUnderCursor(this._lastEvent);\n this._processMovement(this._lastEvent, cursorElement);\n var yIsScrollable, xIsScrollable;\n var isRootNode = parent === scrollableRoot()[0];\n if (isRootNode) {\n yIsScrollable = document.body.scrollHeight > $window.height();\n xIsScrollable = document.body.scrollWidth > $window.width();\n } else {\n yIsScrollable = parent.offsetHeight <= parent.scrollHeight;\n xIsScrollable = parent.offsetWidth <= parent.scrollWidth;\n }\n var yDelta = parent.scrollTop + velocity.y;\n var yInBounds = yIsScrollable && yDelta > 0 && yDelta < parent.scrollHeight;\n var xDelta = parent.scrollLeft + velocity.x;\n var xInBounds = xIsScrollable && xDelta > 0 && xDelta < parent.scrollWidth;\n if (yInBounds) {\n parent.scrollTop += velocity.y;\n }\n if (xInBounds) {\n parent.scrollLeft += velocity.x;\n }\n if (this.hint && isRootNode && (xInBounds || yInBounds)) {\n if (yInBounds) {\n compensation.top += velocity.y;\n }\n if (xInBounds) {\n compensation.left += velocity.x;\n }\n this.hint.css(compensation);\n }\n },\n _end: function (e) {\n this._withDropTarget(this._elementUnderCursor(e), function (target, targetElement) {\n if (target) {\n target._drop(extend({}, e, { dropTarget: $(targetElement) }));\n lastDropTarget = null;\n }\n });\n this._cancel(this._trigger(DRAGEND, e));\n },\n _cancel: function (isDefaultPrevented) {\n var that = this;\n that._scrollableParent = null;\n this._cursorElement = null;\n clearInterval(this._scrollInterval);\n that._activated = false;\n if (that.hint && !that.dropped) {\n setTimeout(function () {\n that.hint.stop(true, true);\n if (isDefaultPrevented) {\n that._afterEndHandler();\n } else {\n that.hint.animate(that.currentTargetOffset, 'fast', that._afterEndHandler);\n }\n }, 0);\n } else {\n that._afterEnd();\n }\n },\n _trigger: function (eventName, e) {\n var that = this;\n return that.trigger(eventName, extend({}, e.event, {\n x: e.x,\n y: e.y,\n currentTarget: that.currentTarget,\n initialTarget: e.touch ? e.touch.initialTouch : null,\n dropTarget: e.dropTarget,\n elementUnderCursor: e.elementUnderCursor\n }));\n },\n _elementUnderCursor: function (e) {\n var target = elementUnderCursor(e), hint = this.hint;\n if (hint && contains(hint[0], target)) {\n hint.hide();\n target = elementUnderCursor(e);\n if (!target) {\n target = elementUnderCursor(e);\n }\n hint.show();\n }\n return target;\n },\n _withDropTarget: function (element, callback) {\n var result, group = this.options.group, targets = dropTargets[group], areas = dropAreas[group];\n if (targets && targets.length || areas && areas.length) {\n result = checkTarget(element, targets, areas);\n if (result) {\n callback(result.target, result.targetElement);\n } else {\n callback();\n }\n }\n },\n destroy: function () {\n var that = this;\n Widget.fn.destroy.call(that);\n that._afterEnd();\n that.userEvents.destroy();\n this._scrollableParent = null;\n this._cursorElement = null;\n clearInterval(this._scrollInterval);\n that.currentTarget = null;\n },\n _afterEnd: function () {\n var that = this;\n if (that.hint) {\n that.hint.remove();\n }\n delete draggables[that.options.group];\n that.trigger('destroy');\n that.trigger(HINTDESTROYED);\n $(document).off(KEYUP, that._captureEscape);\n }\n });\n kendo.ui.plugin(DropTarget);\n kendo.ui.plugin(DropTargetArea);\n kendo.ui.plugin(Draggable);\n kendo.TapCapture = TapCapture;\n kendo.containerBoundaries = containerBoundaries;\n extend(kendo.ui, {\n Pane: Pane,\n PaneDimensions: PaneDimensions,\n Movable: Movable\n });\n function scrollableViewPort(element) {\n var root = scrollableRoot()[0], offset, top, left;\n if (element[0] === root) {\n top = root.scrollTop;\n left = root.scrollLeft;\n return {\n top: top,\n left: left,\n bottom: top + $window.height(),\n right: left + $window.width()\n };\n } else {\n offset = element.offset();\n offset.bottom = offset.top + element.height();\n offset.right = offset.left + element.width();\n return offset;\n }\n }\n function scrollableRoot() {\n return $(kendo.support.browser.chrome ? document.body : document.documentElement);\n }\n function findScrollableParent(element) {\n var root = scrollableRoot();\n if (!element || element === document.body || element === document.documentElement) {\n return root;\n }\n var parent = $(element)[0];\n while (parent && !kendo.isScrollable(parent) && parent !== document.body) {\n parent = parent.parentNode;\n }\n if (parent === document.body) {\n return root;\n }\n return $(parent);\n }\n function autoScrollVelocity(mouseX, mouseY, rect) {\n var velocity = {\n x: 0,\n y: 0\n };\n var AUTO_SCROLL_AREA = 50;\n if (mouseX - rect.left < AUTO_SCROLL_AREA) {\n velocity.x = -(AUTO_SCROLL_AREA - (mouseX - rect.left));\n } else if (rect.right - mouseX < AUTO_SCROLL_AREA) {\n velocity.x = AUTO_SCROLL_AREA - (rect.right - mouseX);\n }\n if (mouseY - rect.top < AUTO_SCROLL_AREA) {\n velocity.y = -(AUTO_SCROLL_AREA - (mouseY - rect.top));\n } else if (rect.bottom - mouseY < AUTO_SCROLL_AREA) {\n velocity.y = AUTO_SCROLL_AREA - (rect.bottom - mouseY);\n }\n return velocity;\n }\n kendo.ui.Draggable.utils = {\n autoScrollVelocity: autoScrollVelocity,\n scrollableViewPort: scrollableViewPort,\n findScrollableParent: findScrollableParent\n };\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.mobile.scroller', [\n 'kendo.fx',\n 'kendo.draganddrop'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'mobile.scroller',\n name: 'Scroller',\n category: 'mobile',\n description: 'The Kendo Mobile Scroller widget enables touch friendly kinetic scrolling for the contents of a given DOM element.',\n depends: [\n 'fx',\n 'draganddrop'\n ]\n };\n (function ($, undefined) {\n var kendo = window.kendo, mobile = kendo.mobile, fx = kendo.effects, ui = mobile.ui, proxy = $.proxy, extend = $.extend, Widget = ui.Widget, Class = kendo.Class, Movable = kendo.ui.Movable, Pane = kendo.ui.Pane, PaneDimensions = kendo.ui.PaneDimensions, Transition = fx.Transition, Animation = fx.Animation, abs = Math.abs, SNAPBACK_DURATION = 500, SCROLLBAR_OPACITY = 0.7, FRICTION = 0.96, VELOCITY_MULTIPLIER = 10, MAX_VELOCITY = 55, OUT_OF_BOUNDS_FRICTION = 0.5, ANIMATED_SCROLLER_PRECISION = 5, RELEASECLASS = 'km-scroller-release', REFRESHCLASS = 'km-scroller-refresh', PULL = 'pull', CHANGE = 'change', RESIZE = 'resize', SCROLL = 'scroll', MOUSE_WHEEL_ID = 2;\n var ZoomSnapBack = Animation.extend({\n init: function (options) {\n var that = this;\n Animation.fn.init.call(that);\n extend(that, options);\n that.userEvents.bind('gestureend', proxy(that.start, that));\n that.tapCapture.bind('press', proxy(that.cancel, that));\n },\n enabled: function () {\n return this.movable.scale < this.dimensions.minScale;\n },\n done: function () {\n return this.dimensions.minScale - this.movable.scale < 0.01;\n },\n tick: function () {\n var movable = this.movable;\n movable.scaleWith(1.1);\n this.dimensions.rescale(movable.scale);\n },\n onEnd: function () {\n var movable = this.movable;\n movable.scaleTo(this.dimensions.minScale);\n this.dimensions.rescale(movable.scale);\n }\n });\n var DragInertia = Animation.extend({\n init: function (options) {\n var that = this;\n Animation.fn.init.call(that);\n extend(that, options, {\n transition: new Transition({\n axis: options.axis,\n movable: options.movable,\n onEnd: function () {\n that._end();\n }\n })\n });\n that.tapCapture.bind('press', function () {\n that.cancel();\n });\n that.userEvents.bind('end', proxy(that.start, that));\n that.userEvents.bind('gestureend', proxy(that.start, that));\n that.userEvents.bind('tap', proxy(that.onEnd, that));\n },\n onCancel: function () {\n this.transition.cancel();\n },\n freeze: function (location) {\n var that = this;\n that.cancel();\n that._moveTo(location);\n },\n onEnd: function () {\n var that = this;\n if (that.paneAxis.outOfBounds()) {\n that._snapBack();\n } else {\n that._end();\n }\n },\n done: function () {\n return abs(this.velocity) < 1;\n },\n start: function (e) {\n var that = this, velocity;\n if (!that.dimension.enabled) {\n return;\n }\n if (that.paneAxis.outOfBounds()) {\n that._snapBack();\n } else {\n velocity = e.touch.id === MOUSE_WHEEL_ID ? 0 : e.touch[that.axis].velocity;\n that.velocity = Math.max(Math.min(velocity * that.velocityMultiplier, MAX_VELOCITY), -MAX_VELOCITY);\n that.tapCapture.captureNext();\n Animation.fn.start.call(that);\n }\n },\n tick: function () {\n var that = this, dimension = that.dimension, friction = that.paneAxis.outOfBounds() ? OUT_OF_BOUNDS_FRICTION : that.friction, delta = that.velocity *= friction, location = that.movable[that.axis] + delta;\n if (!that.elastic && dimension.outOfBounds(location)) {\n location = Math.max(Math.min(location, dimension.max), dimension.min);\n that.velocity = 0;\n }\n that.movable.moveAxis(that.axis, location);\n },\n _end: function () {\n this.tapCapture.cancelCapture();\n this.end();\n },\n _snapBack: function () {\n var that = this, dimension = that.dimension, snapBack = that.movable[that.axis] > dimension.max ? dimension.max : dimension.min;\n that._moveTo(snapBack);\n },\n _moveTo: function (location) {\n this.transition.moveTo({\n location: location,\n duration: SNAPBACK_DURATION,\n ease: Transition.easeOutExpo\n });\n }\n });\n var AnimatedScroller = Animation.extend({\n init: function (options) {\n var that = this;\n kendo.effects.Animation.fn.init.call(this);\n extend(that, options, {\n origin: {},\n destination: {},\n offset: {}\n });\n },\n tick: function () {\n this._updateCoordinates();\n this.moveTo(this.origin);\n },\n done: function () {\n return abs(this.offset.y) < ANIMATED_SCROLLER_PRECISION && abs(this.offset.x) < ANIMATED_SCROLLER_PRECISION;\n },\n onEnd: function () {\n this.moveTo(this.destination);\n if (this.callback) {\n this.callback.call();\n }\n },\n setCoordinates: function (from, to) {\n this.offset = {};\n this.origin = from;\n this.destination = to;\n },\n setCallback: function (callback) {\n if (callback && kendo.isFunction(callback)) {\n this.callback = callback;\n } else {\n callback = undefined;\n }\n },\n _updateCoordinates: function () {\n this.offset = {\n x: (this.destination.x - this.origin.x) / 4,\n y: (this.destination.y - this.origin.y) / 4\n };\n this.origin = {\n y: this.origin.y + this.offset.y,\n x: this.origin.x + this.offset.x\n };\n }\n });\n var ScrollBar = Class.extend({\n init: function (options) {\n var that = this, horizontal = options.axis === 'x', element = $('
    ');\n extend(that, options, {\n element: element,\n elementSize: 0,\n movable: new Movable(element),\n scrollMovable: options.movable,\n alwaysVisible: options.alwaysVisible,\n size: horizontal ? 'width' : 'height'\n });\n that.scrollMovable.bind(CHANGE, proxy(that.refresh, that));\n that.container.append(element);\n if (options.alwaysVisible) {\n that.show();\n }\n },\n refresh: function () {\n var that = this, axis = that.axis, dimension = that.dimension, paneSize = dimension.size, scrollMovable = that.scrollMovable, sizeRatio = paneSize / dimension.total, position = Math.round(-scrollMovable[axis] * sizeRatio), size = Math.round(paneSize * sizeRatio);\n if (sizeRatio >= 1) {\n this.element.css('display', 'none');\n } else {\n this.element.css('display', '');\n }\n if (position + size > paneSize) {\n size = paneSize - position;\n } else if (position < 0) {\n size += position;\n position = 0;\n }\n if (that.elementSize != size) {\n that.element.css(that.size, size + 'px');\n that.elementSize = size;\n }\n that.movable.moveAxis(axis, position);\n },\n show: function () {\n this.element.css({\n opacity: SCROLLBAR_OPACITY,\n visibility: 'visible'\n });\n },\n hide: function () {\n if (!this.alwaysVisible) {\n this.element.css({ opacity: 0 });\n }\n }\n });\n var Scroller = Widget.extend({\n init: function (element, options) {\n var that = this;\n Widget.fn.init.call(that, element, options);\n element = that.element;\n that._native = that.options.useNative && kendo.support.hasNativeScrolling;\n if (that._native) {\n element.addClass('km-native-scroller').prepend('
    ');\n extend(that, {\n scrollElement: element,\n fixedContainer: element.children().first()\n });\n return;\n }\n element.css('overflow', 'hidden').addClass('km-scroll-wrapper').wrapInner('
    ').prepend('
    ');\n var inner = element.children().eq(1), tapCapture = new kendo.TapCapture(element), movable = new Movable(inner), dimensions = new PaneDimensions({\n element: inner,\n container: element,\n forcedEnabled: that.options.zoom\n }), avoidScrolling = this.options.avoidScrolling, userEvents = new kendo.UserEvents(element, {\n touchAction: 'pan-y',\n fastTap: true,\n allowSelection: true,\n preventDragEvent: true,\n captureUpIfMoved: true,\n multiTouch: that.options.zoom,\n start: function (e) {\n dimensions.refresh();\n var velocityX = abs(e.x.velocity), velocityY = abs(e.y.velocity), horizontalSwipe = velocityX * 2 >= velocityY, originatedFromFixedContainer = $.contains(that.fixedContainer[0], e.event.target), verticalSwipe = velocityY * 2 >= velocityX;\n if (!originatedFromFixedContainer && !avoidScrolling(e) && that.enabled && (dimensions.x.enabled && horizontalSwipe || dimensions.y.enabled && verticalSwipe)) {\n userEvents.capture();\n } else {\n userEvents.cancel();\n }\n }\n }), pane = new Pane({\n movable: movable,\n dimensions: dimensions,\n userEvents: userEvents,\n elastic: that.options.elastic\n }), zoomSnapBack = new ZoomSnapBack({\n movable: movable,\n dimensions: dimensions,\n userEvents: userEvents,\n tapCapture: tapCapture\n }), animatedScroller = new AnimatedScroller({\n moveTo: function (coordinates) {\n that.scrollTo(coordinates.x, coordinates.y);\n }\n });\n movable.bind(CHANGE, function () {\n that.scrollTop = -movable.y;\n that.scrollLeft = -movable.x;\n that.trigger(SCROLL, {\n scrollTop: that.scrollTop,\n scrollLeft: that.scrollLeft\n });\n });\n if (that.options.mousewheelScrolling) {\n element.on('DOMMouseScroll mousewheel', proxy(this, '_wheelScroll'));\n }\n extend(that, {\n movable: movable,\n dimensions: dimensions,\n zoomSnapBack: zoomSnapBack,\n animatedScroller: animatedScroller,\n userEvents: userEvents,\n pane: pane,\n tapCapture: tapCapture,\n pulled: false,\n enabled: true,\n scrollElement: inner,\n scrollTop: 0,\n scrollLeft: 0,\n fixedContainer: element.children().first()\n });\n that._initAxis('x');\n that._initAxis('y');\n that._wheelEnd = function () {\n that._wheel = false;\n that.userEvents.end(0, that._wheelY);\n };\n dimensions.refresh();\n if (that.options.pullToRefresh) {\n that._initPullToRefresh();\n }\n },\n _wheelScroll: function (e) {\n if (!this._wheel) {\n this._wheel = true;\n this._wheelY = 0;\n this.userEvents.press(0, this._wheelY);\n }\n clearTimeout(this._wheelTimeout);\n this._wheelTimeout = setTimeout(this._wheelEnd, 50);\n var delta = kendo.wheelDeltaY(e);\n if (delta) {\n this._wheelY += delta;\n this.userEvents.move(0, this._wheelY);\n }\n e.preventDefault();\n },\n makeVirtual: function () {\n this.dimensions.y.makeVirtual();\n },\n virtualSize: function (min, max) {\n this.dimensions.y.virtualSize(min, max);\n },\n height: function () {\n return this.dimensions.y.size;\n },\n scrollHeight: function () {\n return this.scrollElement[0].scrollHeight;\n },\n scrollWidth: function () {\n return this.scrollElement[0].scrollWidth;\n },\n options: {\n name: 'Scroller',\n zoom: false,\n pullOffset: 140,\n visibleScrollHints: false,\n elastic: true,\n useNative: false,\n mousewheelScrolling: true,\n avoidScrolling: function () {\n return false;\n },\n pullToRefresh: false,\n messages: {\n pullTemplate: 'Pull to refresh',\n releaseTemplate: 'Release to refresh',\n refreshTemplate: 'Refreshing'\n }\n },\n events: [\n PULL,\n SCROLL,\n RESIZE\n ],\n _resize: function () {\n if (!this._native) {\n this.contentResized();\n }\n },\n setOptions: function (options) {\n var that = this;\n Widget.fn.setOptions.call(that, options);\n if (options.pullToRefresh) {\n that._initPullToRefresh();\n }\n },\n reset: function () {\n if (this._native) {\n this.scrollElement.scrollTop(0);\n } else {\n this.movable.moveTo({\n x: 0,\n y: 0\n });\n this._scale(1);\n }\n },\n contentResized: function () {\n this.dimensions.refresh();\n if (this.pane.x.outOfBounds()) {\n this.movable.moveAxis('x', this.dimensions.x.min);\n }\n if (this.pane.y.outOfBounds()) {\n this.movable.moveAxis('y', this.dimensions.y.min);\n }\n },\n zoomOut: function () {\n var dimensions = this.dimensions;\n dimensions.refresh();\n this._scale(dimensions.fitScale);\n this.movable.moveTo(dimensions.centerCoordinates());\n },\n enable: function () {\n this.enabled = true;\n },\n disable: function () {\n this.enabled = false;\n },\n scrollTo: function (x, y) {\n if (this._native) {\n this.scrollElement.scrollLeft(abs(x));\n this.scrollElement.scrollTop(abs(y));\n } else {\n this.dimensions.refresh();\n this.movable.moveTo({\n x: x,\n y: y\n });\n }\n },\n animatedScrollTo: function (x, y, callback) {\n var from, to;\n if (this._native) {\n this.scrollTo(x, y);\n } else {\n from = {\n x: this.movable.x,\n y: this.movable.y\n };\n to = {\n x: x,\n y: y\n };\n this.animatedScroller.setCoordinates(from, to);\n this.animatedScroller.setCallback(callback);\n this.animatedScroller.start();\n }\n },\n pullHandled: function () {\n var that = this;\n that.refreshHint.removeClass(REFRESHCLASS);\n that.hintContainer.html(that.pullTemplate({}));\n that.yinertia.onEnd();\n that.xinertia.onEnd();\n that.userEvents.cancel();\n },\n destroy: function () {\n Widget.fn.destroy.call(this);\n if (this.userEvents) {\n this.userEvents.destroy();\n }\n },\n _scale: function (scale) {\n this.dimensions.rescale(scale);\n this.movable.scaleTo(scale);\n },\n _initPullToRefresh: function () {\n var that = this;\n that.dimensions.y.forceEnabled();\n that.pullTemplate = kendo.template(that.options.messages.pullTemplate);\n that.releaseTemplate = kendo.template(that.options.messages.releaseTemplate);\n that.refreshTemplate = kendo.template(that.options.messages.refreshTemplate);\n that.scrollElement.prepend('' + that.pullTemplate({}) + '');\n that.refreshHint = that.scrollElement.children().first();\n that.hintContainer = that.refreshHint.children('.km-template');\n that.pane.y.bind('change', proxy(that._paneChange, that));\n that.userEvents.bind('end', proxy(that._dragEnd, that));\n },\n _dragEnd: function () {\n var that = this;\n if (!that.pulled) {\n return;\n }\n that.pulled = false;\n that.refreshHint.removeClass(RELEASECLASS).addClass(REFRESHCLASS);\n that.hintContainer.html(that.refreshTemplate({}));\n that.yinertia.freeze(that.options.pullOffset / 2);\n that.trigger('pull');\n },\n _paneChange: function () {\n var that = this;\n if (that.movable.y / OUT_OF_BOUNDS_FRICTION > that.options.pullOffset) {\n if (!that.pulled) {\n that.pulled = true;\n that.refreshHint.removeClass(REFRESHCLASS).addClass(RELEASECLASS);\n that.hintContainer.html(that.releaseTemplate({}));\n }\n } else if (that.pulled) {\n that.pulled = false;\n that.refreshHint.removeClass(RELEASECLASS);\n that.hintContainer.html(that.pullTemplate({}));\n }\n },\n _initAxis: function (axis) {\n var that = this, movable = that.movable, dimension = that.dimensions[axis], tapCapture = that.tapCapture, paneAxis = that.pane[axis], scrollBar = new ScrollBar({\n axis: axis,\n movable: movable,\n dimension: dimension,\n container: that.element,\n alwaysVisible: that.options.visibleScrollHints\n });\n dimension.bind(CHANGE, function () {\n scrollBar.refresh();\n });\n paneAxis.bind(CHANGE, function () {\n scrollBar.show();\n });\n that[axis + 'inertia'] = new DragInertia({\n axis: axis,\n paneAxis: paneAxis,\n movable: movable,\n tapCapture: tapCapture,\n userEvents: that.userEvents,\n dimension: dimension,\n elastic: that.options.elastic,\n friction: that.options.friction || FRICTION,\n velocityMultiplier: that.options.velocityMultiplier || VELOCITY_MULTIPLIER,\n end: function () {\n scrollBar.hide();\n that.trigger('scrollEnd', {\n axis: axis,\n scrollTop: that.scrollTop,\n scrollLeft: that.scrollLeft\n });\n }\n });\n }\n });\n ui.plugin(Scroller);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.resizable', [\n 'kendo.core',\n 'kendo.draganddrop'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'resizable',\n name: 'Resizable',\n category: 'framework',\n depends: [\n 'core',\n 'draganddrop'\n ],\n advanced: true\n };\n (function ($, undefined) {\n var kendo = window.kendo, ui = kendo.ui, Widget = ui.Widget, proxy = $.proxy, isFunction = kendo.isFunction, extend = $.extend, HORIZONTAL = 'horizontal', VERTICAL = 'vertical', START = 'start', RESIZE = 'resize', RESIZEEND = 'resizeend';\n var Resizable = Widget.extend({\n init: function (element, options) {\n var that = this;\n Widget.fn.init.call(that, element, options);\n that.orientation = that.options.orientation.toLowerCase() != VERTICAL ? HORIZONTAL : VERTICAL;\n that._positionMouse = that.orientation == HORIZONTAL ? 'x' : 'y';\n that._position = that.orientation == HORIZONTAL ? 'left' : 'top';\n that._sizingDom = that.orientation == HORIZONTAL ? 'outerWidth' : 'outerHeight';\n that.draggable = new ui.Draggable(options.draggableElement || element, {\n distance: 1,\n filter: options.handle,\n drag: proxy(that._resize, that),\n dragcancel: proxy(that._cancel, that),\n dragstart: proxy(that._start, that),\n dragend: proxy(that._stop, that)\n });\n that.userEvents = that.draggable.userEvents;\n },\n events: [\n RESIZE,\n RESIZEEND,\n START\n ],\n options: {\n name: 'Resizable',\n orientation: HORIZONTAL\n },\n resize: function () {\n },\n _max: function (e) {\n var that = this, hintSize = that.hint ? that.hint[that._sizingDom]() : 0, size = that.options.max;\n return isFunction(size) ? size(e) : size !== undefined ? that._initialElementPosition + size - hintSize : size;\n },\n _min: function (e) {\n var that = this, size = that.options.min;\n return isFunction(size) ? size(e) : size !== undefined ? that._initialElementPosition + size : size;\n },\n _start: function (e) {\n var that = this, hint = that.options.hint, el = $(e.currentTarget);\n that._initialElementPosition = el.position()[that._position];\n that._initialMousePosition = e[that._positionMouse].startLocation;\n if (hint) {\n that.hint = isFunction(hint) ? $(hint(el)) : hint;\n that.hint.css({ position: 'absolute' }).css(that._position, that._initialElementPosition).appendTo(that.element);\n }\n that.trigger(START, e);\n that._maxPosition = that._max(e);\n that._minPosition = that._min(e);\n $(document.body).css('cursor', el.css('cursor'));\n },\n _resize: function (e) {\n var that = this, maxPosition = that._maxPosition, minPosition = that._minPosition, currentPosition = that._initialElementPosition + (e[that._positionMouse].location - that._initialMousePosition), position;\n position = minPosition !== undefined ? Math.max(minPosition, currentPosition) : currentPosition;\n that.position = position = maxPosition !== undefined ? Math.min(maxPosition, position) : position;\n if (that.hint) {\n that.hint.toggleClass(that.options.invalidClass || '', position == maxPosition || position == minPosition).css(that._position, position);\n }\n that.resizing = true;\n that.trigger(RESIZE, extend(e, { position: position }));\n },\n _stop: function (e) {\n var that = this;\n if (that.hint) {\n that.hint.remove();\n }\n that.resizing = false;\n that.trigger(RESIZEEND, extend(e, { position: that.position }));\n $(document.body).css('cursor', '');\n },\n _cancel: function (e) {\n var that = this;\n if (that.hint) {\n that.position = undefined;\n that.hint.css(that._position, that._initialElementPosition);\n that._stop(e);\n }\n },\n destroy: function () {\n var that = this;\n Widget.fn.destroy.call(that);\n if (that.draggable) {\n that.draggable.destroy();\n }\n },\n press: function (target) {\n if (!target) {\n return;\n }\n var position = target.position(), that = this;\n that.userEvents.press(position.left, position.top, target[0]);\n that.targetPosition = position;\n that.target = target;\n },\n move: function (delta) {\n var that = this, orientation = that._position, position = that.targetPosition, current = that.position;\n if (current === undefined) {\n current = position[orientation];\n }\n position[orientation] = current + delta;\n that.userEvents.move(position.left, position.top);\n },\n end: function () {\n this.userEvents.end();\n this.target = this.position = undefined;\n }\n });\n kendo.ui.plugin(Resizable);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.sortable', ['kendo.draganddrop'], f);\n}(function () {\n var __meta__ = {\n id: 'sortable',\n name: 'Sortable',\n category: 'framework',\n depends: ['draganddrop']\n };\n (function ($, undefined) {\n var kendo = window.kendo, Widget = kendo.ui.Widget, outerWidth = kendo._outerWidth, outerHeight = kendo._outerHeight, START = 'start', BEFORE_MOVE = 'beforeMove', MOVE = 'move', END = 'end', CHANGE = 'change', CANCEL = 'cancel', ACTION_SORT = 'sort', ACTION_REMOVE = 'remove', ACTION_RECEIVE = 'receive', DEFAULT_FILTER = '>*', MISSING_INDEX = -1;\n function containsOrEqualTo(parent, child) {\n try {\n return $.contains(parent, child) || parent == child;\n } catch (e) {\n return false;\n }\n }\n function defaultHint(element) {\n return element.clone();\n }\n function defaultPlaceholder(element) {\n return element.clone().removeAttr('id').css('visibility', 'hidden');\n }\n var Sortable = Widget.extend({\n init: function (element, options) {\n var that = this;\n Widget.fn.init.call(that, element, options);\n if (!that.options.placeholder) {\n that.options.placeholder = defaultPlaceholder;\n }\n if (!that.options.hint) {\n that.options.hint = defaultHint;\n }\n that.draggable = that._createDraggable();\n },\n events: [\n START,\n BEFORE_MOVE,\n MOVE,\n END,\n CHANGE,\n CANCEL\n ],\n options: {\n name: 'Sortable',\n hint: null,\n placeholder: null,\n filter: DEFAULT_FILTER,\n holdToDrag: false,\n disabled: null,\n container: null,\n connectWith: null,\n handler: null,\n cursorOffset: null,\n axis: null,\n ignore: null,\n autoScroll: false,\n cursor: 'auto',\n moveOnDragEnter: false\n },\n destroy: function () {\n this.draggable.destroy();\n Widget.fn.destroy.call(this);\n },\n _createDraggable: function () {\n var that = this, element = that.element, options = that.options;\n return new kendo.ui.Draggable(element, {\n filter: options.filter,\n hint: kendo.isFunction(options.hint) ? options.hint : $(options.hint),\n holdToDrag: options.holdToDrag,\n container: options.container ? $(options.container) : null,\n cursorOffset: options.cursorOffset,\n axis: options.axis,\n ignore: options.ignore,\n autoScroll: options.autoScroll,\n dragstart: $.proxy(that._dragstart, that),\n dragcancel: $.proxy(that._dragcancel, that),\n drag: $.proxy(that._drag, that),\n dragend: $.proxy(that._dragend, that)\n });\n },\n _dragstart: function (e) {\n var draggedElement = this.draggedElement = e.currentTarget, disabled = this.options.disabled, handler = this.options.handler, _placeholder = this.options.placeholder, placeholder = this.placeholder = kendo.isFunction(_placeholder) ? $(_placeholder.call(this, draggedElement)) : $(_placeholder);\n if (disabled && draggedElement.is(disabled)) {\n e.preventDefault();\n } else if (handler && !$(e.initialTarget).is(handler)) {\n e.preventDefault();\n } else {\n if (this.trigger(START, {\n item: draggedElement,\n draggableEvent: e\n })) {\n e.preventDefault();\n } else {\n draggedElement.css('display', 'none');\n draggedElement.before(placeholder);\n this._setCursor();\n }\n }\n },\n _dragcancel: function () {\n this._cancel();\n this.trigger(CANCEL, { item: this.draggedElement });\n this._resetCursor();\n },\n _drag: function (e) {\n var draggedElement = this.draggedElement, target = this._findTarget(e), targetCenter, cursorOffset = {\n left: e.x.location,\n top: e.y.location\n }, offsetDelta, axisDelta = {\n x: e.x.delta,\n y: e.y.delta\n }, direction, sibling, getSibling, axis = this.options.axis, moveOnDragEnter = this.options.moveOnDragEnter, eventData = {\n item: draggedElement,\n list: this,\n draggableEvent: e\n };\n if (axis === 'x' || axis === 'y') {\n this._movementByAxis(axis, cursorOffset, axisDelta[axis], eventData);\n return;\n }\n if (target) {\n targetCenter = this._getElementCenter(target.element);\n offsetDelta = {\n left: Math.round(cursorOffset.left - targetCenter.left),\n top: Math.round(cursorOffset.top - targetCenter.top)\n };\n $.extend(eventData, { target: target.element });\n if (target.appendToBottom) {\n this._movePlaceholder(target, null, eventData);\n return;\n }\n if (target.appendAfterHidden) {\n this._movePlaceholder(target, 'next', eventData);\n }\n if (this._isFloating(target.element)) {\n if (axisDelta.x < 0 && moveOnDragEnter || !moveOnDragEnter && offsetDelta.left < 0) {\n direction = 'prev';\n } else if (axisDelta.x > 0 && moveOnDragEnter || !moveOnDragEnter && offsetDelta.left > 0) {\n direction = 'next';\n }\n } else {\n if (axisDelta.y < 0 && moveOnDragEnter || !moveOnDragEnter && offsetDelta.top < 0) {\n direction = 'prev';\n } else if (axisDelta.y > 0 && moveOnDragEnter || !moveOnDragEnter && offsetDelta.top > 0) {\n direction = 'next';\n }\n }\n if (direction) {\n getSibling = direction === 'prev' ? jQuery.fn.prev : jQuery.fn.next;\n sibling = getSibling.call(target.element);\n while (sibling.length && !sibling.is(':visible')) {\n sibling = getSibling.call(sibling);\n }\n if (sibling[0] != this.placeholder[0]) {\n this._movePlaceholder(target, direction, eventData);\n }\n }\n }\n },\n _dragend: function (e) {\n var placeholder = this.placeholder, draggedElement = this.draggedElement, draggedIndex = this.indexOf(draggedElement), placeholderIndex = this.indexOf(placeholder), connectWith = this.options.connectWith, connectedList, isDefaultPrevented, eventData, connectedListEventData;\n this._resetCursor();\n eventData = {\n action: ACTION_SORT,\n item: draggedElement,\n oldIndex: draggedIndex,\n newIndex: placeholderIndex,\n draggableEvent: e\n };\n if (placeholderIndex >= 0) {\n isDefaultPrevented = this.trigger(END, eventData);\n } else {\n connectedList = placeholder.parents(connectWith).getKendoSortable();\n eventData.action = ACTION_REMOVE;\n connectedListEventData = $.extend({}, eventData, {\n action: ACTION_RECEIVE,\n oldIndex: MISSING_INDEX,\n newIndex: connectedList.indexOf(placeholder)\n });\n isDefaultPrevented = !(!this.trigger(END, eventData) && !connectedList.trigger(END, connectedListEventData));\n }\n if (isDefaultPrevented || placeholderIndex === draggedIndex) {\n this._cancel();\n return;\n }\n placeholder.replaceWith(draggedElement);\n draggedElement.show();\n this.draggable.dropped = true;\n eventData = {\n action: this.indexOf(draggedElement) != MISSING_INDEX ? ACTION_SORT : ACTION_REMOVE,\n item: draggedElement,\n oldIndex: draggedIndex,\n newIndex: this.indexOf(draggedElement),\n draggableEvent: e\n };\n this.trigger(CHANGE, eventData);\n if (connectedList) {\n connectedListEventData = $.extend({}, eventData, {\n action: ACTION_RECEIVE,\n oldIndex: MISSING_INDEX,\n newIndex: connectedList.indexOf(draggedElement)\n });\n connectedList.trigger(CHANGE, connectedListEventData);\n }\n },\n _findTarget: function (e) {\n var element = this._findElementUnderCursor(e), items, connectWith = this.options.connectWith, node;\n if ($.contains(this.element[0], element)) {\n items = this.items();\n node = items.filter(element)[0] || items.has(element)[0];\n return node ? {\n element: $(node),\n sortable: this\n } : null;\n } else if (this.element[0] == element && this._isEmpty()) {\n return {\n element: this.element,\n sortable: this,\n appendToBottom: true\n };\n } else if (this.element[0] == element && this._isLastHidden()) {\n node = this.items().eq(0);\n return {\n element: node,\n sortable: this,\n appendAfterHidden: true\n };\n } else if (connectWith) {\n return this._searchConnectedTargets(element, e);\n }\n },\n _findElementUnderCursor: function (e) {\n var elementUnderCursor = kendo.elementUnderCursor(e), draggable = e.sender;\n if (containsOrEqualTo(draggable.hint[0], elementUnderCursor)) {\n draggable.hint.hide();\n elementUnderCursor = kendo.elementUnderCursor(e);\n if (!elementUnderCursor) {\n elementUnderCursor = kendo.elementUnderCursor(e);\n }\n draggable.hint.show();\n }\n return elementUnderCursor;\n },\n _searchConnectedTargets: function (element, e) {\n var connected = $(this.options.connectWith), sortableInstance, items, node;\n for (var i = 0; i < connected.length; i++) {\n sortableInstance = connected.eq(i).getKendoSortable();\n if ($.contains(connected[i], element)) {\n if (sortableInstance) {\n items = sortableInstance.items();\n node = items.filter(element)[0] || items.has(element)[0];\n if (node) {\n sortableInstance.placeholder = this.placeholder;\n return {\n element: $(node),\n sortable: sortableInstance\n };\n } else {\n return null;\n }\n }\n } else if (connected[i] == element) {\n if (sortableInstance && sortableInstance._isEmpty()) {\n return {\n element: connected.eq(i),\n sortable: sortableInstance,\n appendToBottom: true\n };\n } else if (this._isCursorAfterLast(sortableInstance, e)) {\n node = sortableInstance.items().last();\n return {\n element: node,\n sortable: sortableInstance\n };\n }\n }\n }\n },\n _isCursorAfterLast: function (sortable, e) {\n var lastItem = sortable.items().last(), cursorOffset = {\n left: e.x.location,\n top: e.y.location\n }, lastItemOffset, delta;\n lastItemOffset = kendo.getOffset(lastItem);\n lastItemOffset.top += outerHeight(lastItem);\n lastItemOffset.left += outerWidth(lastItem);\n if (this._isFloating(lastItem)) {\n delta = lastItemOffset.left - cursorOffset.left;\n } else {\n delta = lastItemOffset.top - cursorOffset.top;\n }\n return delta < 0 ? true : false;\n },\n _movementByAxis: function (axis, cursorOffset, delta, eventData) {\n var cursorPosition = axis === 'x' ? cursorOffset.left : cursorOffset.top, target = delta < 0 ? this.placeholder.prev() : this.placeholder.next(), targetCenter;\n if (target.length && !target.is(':visible')) {\n target = delta < 0 ? target.prev() : target.next();\n }\n $.extend(eventData, { target: target });\n targetCenter = this._getElementCenter(target);\n if (targetCenter) {\n targetCenter = axis === 'x' ? targetCenter.left : targetCenter.top;\n }\n if (target.length && delta < 0 && cursorPosition - targetCenter < 0) {\n this._movePlaceholder({\n element: target,\n sortable: this\n }, 'prev', eventData);\n } else if (target.length && delta > 0 && cursorPosition - targetCenter > 0) {\n this._movePlaceholder({\n element: target,\n sortable: this\n }, 'next', eventData);\n }\n },\n _movePlaceholder: function (target, direction, eventData) {\n var placeholder = this.placeholder;\n if (!target.sortable.trigger(BEFORE_MOVE, eventData)) {\n if (!direction) {\n target.element.append(placeholder);\n } else if (direction === 'prev') {\n target.element.before(placeholder);\n } else if (direction === 'next') {\n target.element.after(placeholder);\n }\n target.sortable.trigger(MOVE, eventData);\n }\n },\n _setCursor: function () {\n var cursor = this.options.cursor, body;\n if (cursor && cursor !== 'auto') {\n body = $(document.body);\n this._originalCursorType = body.css('cursor');\n body.css({ 'cursor': cursor });\n if (!this._cursorStylesheet) {\n this._cursorStylesheet = $('');\n }\n this._cursorStylesheet.appendTo(body);\n }\n },\n _resetCursor: function () {\n if (this._originalCursorType) {\n $(document.body).css('cursor', this._originalCursorType);\n this._originalCursorType = null;\n this._cursorStylesheet.remove();\n }\n },\n _getElementCenter: function (element) {\n var center = element.length ? kendo.getOffset(element) : null;\n if (center) {\n center.top += outerHeight(element) / 2;\n center.left += outerWidth(element) / 2;\n }\n return center;\n },\n _isFloating: function (item) {\n return /left|right/.test(item.css('float')) || /inline|table-cell/.test(item.css('display'));\n },\n _cancel: function () {\n this.draggedElement.show();\n this.placeholder.remove();\n },\n _items: function () {\n var filter = this.options.filter, items;\n if (filter) {\n items = this.element.find(filter);\n } else {\n items = this.element.children();\n }\n return items;\n },\n indexOf: function (element) {\n var items = this._items(), placeholder = this.placeholder, draggedElement = this.draggedElement;\n if (placeholder && element[0] == placeholder[0]) {\n return items.not(draggedElement).index(element);\n } else {\n return items.not(placeholder).index(element);\n }\n },\n items: function () {\n var placeholder = this.placeholder, items = this._items();\n if (placeholder) {\n items = items.not(placeholder);\n }\n return items;\n },\n _isEmpty: function () {\n return !this.items().length;\n },\n _isLastHidden: function () {\n return this.items().length === 1 && this.items().is(':hidden');\n }\n });\n kendo.ui.plugin(Sortable);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.selectable', [\n 'kendo.core',\n 'kendo.userevents'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'selectable',\n name: 'Selectable',\n category: 'framework',\n depends: [\n 'core',\n 'userevents'\n ],\n advanced: true\n };\n (function ($, undefined) {\n var kendo = window.kendo, Widget = kendo.ui.Widget, proxy = $.proxy, abs = Math.abs, ARIASELECTED = 'aria-selected', SELECTED = 'k-state-selected', ACTIVE = 'k-state-selecting', SELECTABLE = 'k-selectable', CHANGE = 'change', NS = '.kendoSelectable', UNSELECTING = 'k-state-unselecting', INPUTSELECTOR = 'input,a,textarea,.k-multiselect-wrap,select,button,.k-button>span,.k-button>img,span.k-icon.k-i-arrow-60-down,span.k-icon.k-i-arrow-60-up', msie = kendo.support.browser.msie, supportEventDelegation = false;\n (function ($) {\n (function () {\n $('
    ').on('click', '>*', function () {\n supportEventDelegation = true;\n }).find('span').click().end().off();\n }());\n }($));\n var Selectable = Widget.extend({\n init: function (element, options) {\n var that = this, multiple;\n Widget.fn.init.call(that, element, options);\n that._marquee = $('
    ');\n that._lastActive = null;\n that.element.addClass(SELECTABLE);\n that.relatedTarget = that.options.relatedTarget;\n multiple = that.options.multiple;\n if (this.options.aria && multiple) {\n that.element.attr('aria-multiselectable', true);\n }\n that.userEvents = new kendo.UserEvents(that.element, {\n global: true,\n allowSelection: true,\n filter: (!supportEventDelegation ? '.' + SELECTABLE + ' ' : '') + that.options.filter,\n tap: proxy(that._tap, that)\n });\n if (multiple) {\n that.userEvents.bind('start', proxy(that._start, that)).bind('move', proxy(that._move, that)).bind('end', proxy(that._end, that)).bind('select', proxy(that._select, that));\n }\n },\n events: [CHANGE],\n options: {\n name: 'Selectable',\n filter: '>*',\n multiple: false,\n relatedTarget: $.noop\n },\n _isElement: function (target) {\n var elements = this.element;\n var idx, length = elements.length, result = false;\n target = target[0];\n for (idx = 0; idx < length; idx++) {\n if (elements[idx] === target) {\n result = true;\n break;\n }\n }\n return result;\n },\n _tap: function (e) {\n var target = $(e.target), that = this, ctrlKey = e.event.ctrlKey || e.event.metaKey, multiple = that.options.multiple, shiftKey = multiple && e.event.shiftKey, selected, whichCode = e.event.which, buttonCode = e.event.button;\n if (!that._isElement(target.closest('.' + SELECTABLE)) || whichCode && whichCode == 3 || buttonCode && buttonCode == 2) {\n return;\n }\n if (!this._allowSelection(e.event.target)) {\n return;\n }\n selected = target.hasClass(SELECTED);\n if (!multiple || !ctrlKey) {\n that.clear();\n }\n target = target.add(that.relatedTarget(target));\n if (shiftKey) {\n that.selectRange(that._firstSelectee(), target);\n } else {\n if (selected && ctrlKey) {\n that._unselect(target);\n that._notify(CHANGE);\n } else {\n that.value(target);\n }\n that._lastActive = that._downTarget = target;\n }\n },\n _start: function (e) {\n var that = this, target = $(e.target), selected = target.hasClass(SELECTED), currentElement, ctrlKey = e.event.ctrlKey || e.event.metaKey;\n if (!this._allowSelection(e.event.target)) {\n return;\n }\n that._downTarget = target;\n if (!that._isElement(target.closest('.' + SELECTABLE))) {\n that.userEvents.cancel();\n return;\n }\n if (that.options.useAllItems) {\n that._items = that.element.find(that.options.filter);\n } else {\n currentElement = target.closest(that.element);\n that._items = currentElement.find(that.options.filter);\n }\n e.sender.capture();\n that._marquee.appendTo(document.body).css({\n left: e.x.client + 1,\n top: e.y.client + 1,\n width: 0,\n height: 0\n });\n if (!ctrlKey) {\n that.clear();\n }\n target = target.add(that.relatedTarget(target));\n if (selected) {\n that._selectElement(target, true);\n if (ctrlKey) {\n target.addClass(UNSELECTING);\n }\n }\n },\n _move: function (e) {\n var that = this, position = {\n left: e.x.startLocation > e.x.location ? e.x.location : e.x.startLocation,\n top: e.y.startLocation > e.y.location ? e.y.location : e.y.startLocation,\n width: abs(e.x.initialDelta),\n height: abs(e.y.initialDelta)\n };\n that._marquee.css(position);\n that._invalidateSelectables(position, e.event.ctrlKey || e.event.metaKey);\n e.preventDefault();\n },\n _end: function () {\n var that = this;\n that._marquee.remove();\n that._unselect(that.element.find(that.options.filter + '.' + UNSELECTING)).removeClass(UNSELECTING);\n var target = that.element.find(that.options.filter + '.' + ACTIVE);\n target = target.add(that.relatedTarget(target));\n that.value(target);\n that._lastActive = that._downTarget;\n that._items = null;\n },\n _invalidateSelectables: function (position, ctrlKey) {\n var idx, length, target = this._downTarget[0], items = this._items, related, toSelect;\n for (idx = 0, length = items.length; idx < length; idx++) {\n toSelect = items.eq(idx);\n related = toSelect.add(this.relatedTarget(toSelect));\n if (collision(toSelect, position)) {\n if (toSelect.hasClass(SELECTED)) {\n if (ctrlKey && target !== toSelect[0]) {\n related.removeClass(SELECTED).addClass(UNSELECTING);\n }\n } else if (!toSelect.hasClass(ACTIVE) && !toSelect.hasClass(UNSELECTING)) {\n related.addClass(ACTIVE);\n }\n } else {\n if (toSelect.hasClass(ACTIVE)) {\n related.removeClass(ACTIVE);\n } else if (ctrlKey && toSelect.hasClass(UNSELECTING)) {\n related.removeClass(UNSELECTING).addClass(SELECTED);\n }\n }\n }\n },\n value: function (val) {\n var that = this, selectElement = proxy(that._selectElement, that);\n if (val) {\n val.each(function () {\n selectElement(this);\n });\n that._notify(CHANGE);\n return;\n }\n return that.element.find(that.options.filter + '.' + SELECTED);\n },\n _firstSelectee: function () {\n var that = this, selected;\n if (that._lastActive !== null) {\n return that._lastActive;\n }\n selected = that.value();\n return selected.length > 0 ? selected[0] : that.element.find(that.options.filter)[0];\n },\n _selectElement: function (element, preventNotify) {\n var toSelect = $(element), isPrevented = !preventNotify && this._notify('select', { element: element });\n toSelect.removeClass(ACTIVE);\n if (!isPrevented) {\n toSelect.addClass(SELECTED);\n if (this.options.aria) {\n toSelect.attr(ARIASELECTED, true);\n }\n }\n },\n _notify: function (name, args) {\n args = args || {};\n return this.trigger(name, args);\n },\n _unselect: function (element) {\n element.removeClass(SELECTED);\n if (this.options.aria) {\n element.attr(ARIASELECTED, false);\n }\n return element;\n },\n _select: function (e) {\n if (this._allowSelection(e.event.target)) {\n if (!msie || msie && !$(kendo._activeElement()).is(INPUTSELECTOR)) {\n e.preventDefault();\n }\n }\n },\n _allowSelection: function (target) {\n if ($(target).is(INPUTSELECTOR)) {\n this.userEvents.cancel();\n this._downTarget = null;\n return false;\n }\n return true;\n },\n resetTouchEvents: function () {\n this.userEvents.cancel();\n },\n clear: function () {\n var items = this.element.find(this.options.filter + '.' + SELECTED);\n this._unselect(items);\n },\n selectRange: function (start, end) {\n var that = this, idx, tmp, items;\n that.clear();\n if (that.element.length > 1) {\n items = that.options.continuousItems();\n }\n if (!items || !items.length) {\n items = that.element.find(that.options.filter);\n }\n start = $.inArray($(start)[0], items);\n end = $.inArray($(end)[0], items);\n if (start > end) {\n tmp = start;\n start = end;\n end = tmp;\n }\n if (!that.options.useAllItems) {\n end += that.element.length - 1;\n }\n for (idx = start; idx <= end; idx++) {\n that._selectElement(items[idx]);\n }\n that._notify(CHANGE);\n },\n destroy: function () {\n var that = this;\n Widget.fn.destroy.call(that);\n that.element.off(NS);\n that.userEvents.destroy();\n that._marquee = that._lastActive = that.element = that.userEvents = null;\n }\n });\n Selectable.parseOptions = function (selectable) {\n var asLowerString = typeof selectable === 'string' && selectable.toLowerCase();\n return {\n multiple: asLowerString && asLowerString.indexOf('multiple') > -1,\n cell: asLowerString && asLowerString.indexOf('cell') > -1\n };\n };\n function collision(element, position) {\n if (!element.is(':visible')) {\n return false;\n }\n var elementPosition = kendo.getOffset(element), right = position.left + position.width, bottom = position.top + position.height;\n elementPosition.right = elementPosition.left + kendo._outerWidth(element);\n elementPosition.bottom = elementPosition.top + kendo._outerHeight(element);\n return !(elementPosition.left > right || elementPosition.right < position.left || elementPosition.top > bottom || elementPosition.bottom < position.top);\n }\n kendo.ui.plugin(Selectable);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.button', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'button',\n name: 'Button',\n category: 'web',\n description: 'The Button widget displays styled buttons.',\n depends: ['core']\n };\n (function ($, undefined) {\n var kendo = window.kendo, Widget = kendo.ui.Widget, proxy = $.proxy, keys = kendo.keys, CLICK = 'click', KBUTTON = 'k-button', KBUTTONICON = 'k-button-icon', KBUTTONICONTEXT = 'k-button-icontext', NS = '.kendoButton', DISABLED = 'disabled', DISABLEDSTATE = 'k-state-disabled', FOCUSEDSTATE = 'k-state-focused', SELECTEDSTATE = 'k-state-selected';\n var Button = Widget.extend({\n init: function (element, options) {\n var that = this;\n Widget.fn.init.call(that, element, options);\n element = that.wrapper = that.element;\n options = that.options;\n element.addClass(KBUTTON).attr('role', 'button');\n options.enable = options.enable && !element.attr(DISABLED);\n that.enable(options.enable);\n that._tabindex();\n that._graphics();\n element.on(CLICK + NS, proxy(that._click, that)).on('focus' + NS, proxy(that._focus, that)).on('blur' + NS, proxy(that._blur, that)).on('keydown' + NS, proxy(that._keydown, that)).on('keyup' + NS, proxy(that._keyup, that));\n kendo.notify(that);\n },\n destroy: function () {\n var that = this;\n that.wrapper.off(NS);\n Widget.fn.destroy.call(that);\n },\n events: [CLICK],\n options: {\n name: 'Button',\n icon: '',\n spriteCssClass: '',\n imageUrl: '',\n enable: true\n },\n _isNativeButton: function () {\n return this.element.prop('tagName').toLowerCase() == 'button';\n },\n _click: function (e) {\n if (this.options.enable) {\n if (this.trigger(CLICK, { event: e })) {\n e.preventDefault();\n }\n }\n },\n _focus: function () {\n if (this.options.enable) {\n this.element.addClass(FOCUSEDSTATE);\n }\n },\n _blur: function () {\n this.element.removeClass(FOCUSEDSTATE);\n },\n _keydown: function (e) {\n var that = this;\n if (!that._isNativeButton()) {\n if (e.keyCode == keys.ENTER || e.keyCode == keys.SPACEBAR) {\n if (e.keyCode == keys.SPACEBAR) {\n e.preventDefault();\n if (that.options.enable) {\n that.element.addClass(SELECTEDSTATE);\n }\n }\n that._click(e);\n }\n }\n },\n _keyup: function () {\n this.element.removeClass(SELECTEDSTATE);\n },\n _graphics: function () {\n var that = this, element = that.element, options = that.options, icon = options.icon, spriteCssClass = options.spriteCssClass, imageUrl = options.imageUrl, span, img, isEmpty;\n if (spriteCssClass || imageUrl || icon) {\n isEmpty = true;\n element.contents().filter(function () {\n return !$(this).hasClass('k-sprite') && !$(this).hasClass('k-icon') && !$(this).hasClass('k-image');\n }).each(function (idx, el) {\n if (el.nodeType == 1 || el.nodeType == 3 && $.trim(el.nodeValue).length > 0) {\n isEmpty = false;\n }\n });\n if (isEmpty) {\n element.addClass(KBUTTONICON);\n } else {\n element.addClass(KBUTTONICONTEXT);\n }\n }\n if (icon) {\n span = element.children('span.k-icon').first();\n if (!span[0]) {\n span = $('').prependTo(element);\n }\n span.addClass('k-i-' + icon);\n } else if (spriteCssClass) {\n span = element.children('span.k-sprite').first();\n if (!span[0]) {\n span = $('').prependTo(element);\n }\n span.addClass(spriteCssClass);\n } else if (imageUrl) {\n img = element.children('img.k-image').first();\n if (!img[0]) {\n img = $('\"icon\"').prependTo(element);\n }\n img.attr('src', imageUrl);\n }\n },\n enable: function (enable) {\n var that = this, element = that.element;\n if (enable === undefined) {\n enable = true;\n }\n enable = !!enable;\n that.options.enable = enable;\n element.toggleClass(DISABLEDSTATE, !enable).attr('aria-disabled', !enable).attr(DISABLED, !enable);\n try {\n element.blur();\n } catch (err) {\n }\n }\n });\n kendo.ui.plugin(Button);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.pager', ['kendo.data'], f);\n}(function () {\n var __meta__ = {\n id: 'pager',\n name: 'Pager',\n category: 'framework',\n depends: ['data'],\n advanced: true\n };\n (function ($, undefined) {\n var kendo = window.kendo, ui = kendo.ui, Widget = ui.Widget, proxy = $.proxy, FIRST = '.k-i-seek-w', LAST = '.k-i-seek-e', PREV = '.k-i-arrow-w', NEXT = '.k-i-arrow-e', CHANGE = 'change', NS = '.kendoPager', CLICK = 'click', KEYDOWN = 'keydown', DISABLED = 'disabled', MOUSEDOWN = 'down', DOCUMENT_ELEMENT = $(document.documentElement), iconTemplate = kendo.template('');\n function button(template, idx, text, numeric, title) {\n return template({\n idx: idx,\n text: text,\n ns: kendo.ns,\n numeric: numeric,\n title: title || ''\n });\n }\n function icon(className, text, wrapClassName) {\n return iconTemplate({\n className: className.substring(1),\n text: text,\n wrapClassName: wrapClassName || ''\n });\n }\n function update(element, selector, page, disabled) {\n element.find(selector).parent().attr(kendo.attr('page'), page).attr('tabindex', -1).toggleClass('k-state-disabled', disabled);\n }\n function first(element, page) {\n update(element, FIRST, 1, page <= 1);\n }\n function prev(element, page) {\n update(element, PREV, Math.max(1, page - 1), page <= 1);\n }\n function next(element, page, totalPages) {\n update(element, NEXT, Math.min(totalPages, page + 1), page >= totalPages);\n }\n function last(element, page, totalPages) {\n update(element, LAST, totalPages, page >= totalPages);\n }\n var Pager = Widget.extend({\n init: function (element, options) {\n var that = this, page, totalPages;\n Widget.fn.init.call(that, element, options);\n options = that.options;\n that.dataSource = kendo.data.DataSource.create(options.dataSource);\n that.linkTemplate = kendo.template(that.options.linkTemplate);\n that.selectTemplate = kendo.template(that.options.selectTemplate);\n that.currentPageTemplate = kendo.template(that.options.currentPageTemplate);\n page = that.page();\n totalPages = that.totalPages();\n that._refreshHandler = proxy(that.refresh, that);\n that.dataSource.bind(CHANGE, that._refreshHandler);\n that.downEvent = kendo.applyEventMap(MOUSEDOWN, kendo.guid());\n if (options.previousNext) {\n if (!that.element.find(FIRST).length) {\n that.element.append(icon(FIRST, options.messages.first, 'k-pager-first'));\n first(that.element, page, totalPages);\n }\n if (!that.element.find(PREV).length) {\n that.element.append(icon(PREV, options.messages.previous));\n prev(that.element, page, totalPages);\n }\n }\n if (options.numeric) {\n that.list = that.element.find('.k-pager-numbers');\n if (!that.list.length) {\n that.list = $('
      ').appendTo(that.element);\n }\n }\n if (options.input) {\n if (!that.element.find('.k-pager-input').length) {\n that.element.append('' + options.messages.page + '' + kendo.format(options.messages.of, totalPages) + '');\n }\n that.element.on(KEYDOWN + NS, '.k-pager-input input', proxy(that._keydown, that));\n }\n if (options.previousNext) {\n if (!that.element.find(NEXT).length) {\n that.element.append(icon(NEXT, options.messages.next));\n next(that.element, page, totalPages);\n }\n if (!that.element.find(LAST).length) {\n that.element.append(icon(LAST, options.messages.last, 'k-pager-last'));\n last(that.element, page, totalPages);\n }\n }\n if (options.pageSizes) {\n if (!that.element.find('.k-pager-sizes').length) {\n var pageSizes = options.pageSizes.length ? options.pageSizes : [\n 'all',\n 5,\n 10,\n 20\n ];\n var pageItems = $.map(pageSizes, function (size) {\n if (size.toLowerCase && size.toLowerCase() === 'all') {\n return '';\n }\n return '';\n });\n $('' + kendo.format(options.messages.of, totalPages)).find('input').val(page).attr(DISABLED, total < 1).toggleClass('k-state-disabled', total < 1);\n }\n if (options.previousNext) {\n first(that.element, page, totalPages);\n prev(that.element, page, totalPages);\n next(that.element, page, totalPages);\n last(that.element, page, totalPages);\n }\n if (options.pageSizes) {\n var hasAll = that.element.find('.k-pager-sizes option[value=\\'all\\']').length > 0;\n var selectAll = hasAll && pageSize === this.dataSource.total();\n var text = pageSize;\n if (selectAll) {\n pageSize = 'all';\n text = options.messages.allPages;\n }\n that.element.find('.k-pager-sizes select').val(pageSize).attr('aria-label', pageSize).filter('[' + kendo.attr('role') + '=dropdownlist]').kendoDropDownList('value', pageSize).kendoDropDownList('text', text);\n }\n },\n _keydown: function (e) {\n if (e.keyCode === kendo.keys.ENTER) {\n var input = this.element.find('.k-pager-input').find('input'), page = parseInt(input.val(), 10);\n if (isNaN(page) || page < 1 || page > this.totalPages()) {\n page = this.page();\n }\n input.val(page);\n this.page(page);\n }\n },\n _refreshClick: function (e) {\n e.preventDefault();\n this.dataSource.read();\n },\n _change: function (e) {\n var value = e.currentTarget.value;\n var pageSize = parseInt(value, 10);\n var dataSource = this.dataSource;\n if (!isNaN(pageSize)) {\n dataSource.pageSize(pageSize);\n } else if ((value + '').toLowerCase() == 'all') {\n dataSource.pageSize(dataSource.total());\n }\n },\n _toggleActive: function () {\n var that = this;\n if (that.list.hasClass('k-state-expanded')) {\n DOCUMENT_ELEMENT.unbind(that.downEvent, $.proxy(that._hideList, that));\n } else {\n DOCUMENT_ELEMENT.bind(that.downEvent, $.proxy(that._hideList, that));\n }\n that.list.toggleClass('k-state-expanded');\n },\n _hideList: function (e) {\n var that = this, target = kendo.eventTarget(e);\n if (!$.contains(that.list[0], target)) {\n DOCUMENT_ELEMENT.unbind(that.downEvent, $.proxy(that._hideList, that));\n that.list.removeClass('k-state-expanded');\n }\n },\n _click: function (e) {\n var target = $(e.currentTarget);\n e.preventDefault();\n if (!target.is('.k-state-disabled')) {\n this.page(target.attr(kendo.attr('page')));\n }\n },\n totalPages: function () {\n return Math.ceil((this.dataSource.total() || 0) / (this.pageSize() || 1));\n },\n pageSize: function () {\n return this.dataSource.pageSize() || this.dataSource.total();\n },\n page: function (page) {\n if (page !== undefined) {\n if (this.trigger('pageChange', { index: page })) {\n return;\n }\n this.dataSource.page(page);\n this.trigger(CHANGE, { index: page });\n } else {\n if (this.dataSource.total() > 0) {\n return this.dataSource.page();\n } else {\n return 0;\n }\n }\n }\n });\n ui.plugin(Pager);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.popup', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'popup',\n name: 'Pop-up',\n category: 'framework',\n depends: ['core'],\n advanced: true\n };\n (function ($, undefined) {\n var kendo = window.kendo, ui = kendo.ui, Widget = ui.Widget, Class = kendo.Class, support = kendo.support, getOffset = kendo.getOffset, outerWidth = kendo._outerWidth, outerHeight = kendo._outerHeight, OPEN = 'open', CLOSE = 'close', DEACTIVATE = 'deactivate', ACTIVATE = 'activate', CENTER = 'center', LEFT = 'left', RIGHT = 'right', TOP = 'top', BOTTOM = 'bottom', ABSOLUTE = 'absolute', HIDDEN = 'hidden', BODY = 'body', LOCATION = 'location', POSITION = 'position', VISIBLE = 'visible', EFFECTS = 'effects', ACTIVE = 'k-state-active', ACTIVEBORDER = 'k-state-border', ACTIVEBORDERREGEXP = /k-state-border-(\\w+)/, ACTIVECHILDREN = '.k-picker-wrap, .k-dropdown-wrap, .k-link', MOUSEDOWN = 'down', DOCUMENT_ELEMENT = $(document.documentElement), proxy = $.proxy, WINDOW = $(window), SCROLL = 'scroll', cssPrefix = support.transitions.css, TRANSFORM = cssPrefix + 'transform', extend = $.extend, NS = '.kendoPopup', styles = [\n 'font-size',\n 'font-family',\n 'font-stretch',\n 'font-style',\n 'font-weight',\n 'line-height'\n ];\n function contains(container, target) {\n if (!container || !target) {\n return false;\n }\n return container === target || $.contains(container, target);\n }\n var Popup = Widget.extend({\n init: function (element, options) {\n var that = this, parentPopup;\n options = options || {};\n if (options.isRtl) {\n options.origin = options.origin || BOTTOM + ' ' + RIGHT;\n options.position = options.position || TOP + ' ' + RIGHT;\n }\n Widget.fn.init.call(that, element, options);\n element = that.element;\n options = that.options;\n that.collisions = options.collision ? options.collision.split(' ') : [];\n that.downEvent = kendo.applyEventMap(MOUSEDOWN, kendo.guid());\n if (that.collisions.length === 1) {\n that.collisions.push(that.collisions[0]);\n }\n parentPopup = $(that.options.anchor).closest('.k-popup,.k-group').filter(':not([class^=km-])');\n options.appendTo = $($(options.appendTo)[0] || parentPopup[0] || document.body);\n that.element.hide().addClass('k-popup k-group k-reset').toggleClass('k-rtl', !!options.isRtl).css({ position: ABSOLUTE }).appendTo(options.appendTo).on('mouseenter' + NS, function () {\n that._hovered = true;\n }).on('mouseleave' + NS, function () {\n that._hovered = false;\n });\n that.wrapper = $();\n if (options.animation === false) {\n options.animation = {\n open: { effects: {} },\n close: {\n hide: true,\n effects: {}\n }\n };\n }\n extend(options.animation.open, {\n complete: function () {\n that.wrapper.css({ overflow: VISIBLE });\n that._activated = true;\n that._trigger(ACTIVATE);\n }\n });\n extend(options.animation.close, {\n complete: function () {\n that._animationClose();\n }\n });\n that._mousedownProxy = function (e) {\n that._mousedown(e);\n };\n if (support.mobileOS.android) {\n that._resizeProxy = function (e) {\n setTimeout(function () {\n that._resize(e);\n }, 600);\n };\n } else {\n that._resizeProxy = function (e) {\n that._resize(e);\n };\n }\n if (options.toggleTarget) {\n $(options.toggleTarget).on(options.toggleEvent + NS, $.proxy(that.toggle, that));\n }\n },\n events: [\n OPEN,\n ACTIVATE,\n CLOSE,\n DEACTIVATE\n ],\n options: {\n name: 'Popup',\n toggleEvent: 'click',\n origin: BOTTOM + ' ' + LEFT,\n position: TOP + ' ' + LEFT,\n anchor: BODY,\n appendTo: null,\n collision: 'flip fit',\n viewport: window,\n copyAnchorStyles: true,\n autosize: false,\n modal: false,\n adjustSize: {\n width: 0,\n height: 0\n },\n animation: {\n open: {\n effects: 'slideIn:down',\n transition: true,\n duration: 200\n },\n close: {\n duration: 100,\n hide: true\n }\n }\n },\n _animationClose: function () {\n var that = this;\n var location = that.wrapper.data(LOCATION);\n that.wrapper.hide();\n if (location) {\n that.wrapper.css(location);\n }\n if (that.options.anchor != BODY) {\n that._hideDirClass();\n }\n that._closing = false;\n that._trigger(DEACTIVATE);\n },\n destroy: function () {\n var that = this, options = that.options, element = that.element.off(NS), parent;\n Widget.fn.destroy.call(that);\n if (options.toggleTarget) {\n $(options.toggleTarget).off(NS);\n }\n if (!options.modal) {\n DOCUMENT_ELEMENT.unbind(that.downEvent, that._mousedownProxy);\n that._toggleResize(false);\n }\n kendo.destroy(that.element.children());\n element.removeData();\n if (options.appendTo[0] === document.body) {\n parent = element.parent('.k-animation-container');\n if (parent[0]) {\n parent.remove();\n } else {\n element.remove();\n }\n }\n },\n open: function (x, y) {\n var that = this, fixed = {\n isFixed: !isNaN(parseInt(y, 10)),\n x: x,\n y: y\n }, element = that.element, options = that.options, animation, wrapper, anchor = $(options.anchor), mobile = element[0] && element.hasClass('km-widget');\n if (!that.visible()) {\n if (options.copyAnchorStyles) {\n if (mobile && styles[0] == 'font-size') {\n styles.shift();\n }\n element.css(kendo.getComputedStyles(anchor[0], styles));\n }\n if (element.data('animating') || that._trigger(OPEN)) {\n return;\n }\n that._activated = false;\n if (!options.modal) {\n DOCUMENT_ELEMENT.unbind(that.downEvent, that._mousedownProxy).bind(that.downEvent, that._mousedownProxy);\n that._toggleResize(false);\n that._toggleResize(true);\n }\n that.wrapper = wrapper = kendo.wrap(element, options.autosize).css({\n overflow: HIDDEN,\n display: 'block',\n position: ABSOLUTE\n });\n if (support.mobileOS.android) {\n wrapper.css(TRANSFORM, 'translatez(0)');\n }\n wrapper.css(POSITION);\n if ($(options.appendTo)[0] == document.body) {\n wrapper.css(TOP, '-10000px');\n }\n that.flipped = that._position(fixed);\n animation = that._openAnimation();\n if (options.anchor != BODY) {\n that._showDirClass(animation);\n }\n element.data(EFFECTS, animation.effects).kendoStop(true).kendoAnimate(animation);\n }\n },\n _location: function (isFixed) {\n var that = this, element = that.element, options = that.options, wrapper, anchor = $(options.anchor), mobile = element[0] && element.hasClass('km-widget');\n if (options.copyAnchorStyles) {\n if (mobile && styles[0] == 'font-size') {\n styles.shift();\n }\n element.css(kendo.getComputedStyles(anchor[0], styles));\n }\n that.wrapper = wrapper = kendo.wrap(element, options.autosize).css({\n overflow: HIDDEN,\n display: 'block',\n position: ABSOLUTE\n });\n if (support.mobileOS.android) {\n wrapper.css(TRANSFORM, 'translatez(0)');\n }\n wrapper.css(POSITION);\n if ($(options.appendTo)[0] == document.body) {\n wrapper.css(TOP, '-10000px');\n }\n that._position(isFixed || {});\n var offset = wrapper.offset();\n return {\n width: kendo._outerWidth(wrapper),\n height: kendo._outerHeight(wrapper),\n left: offset.left,\n top: offset.top\n };\n },\n _openAnimation: function () {\n var animation = extend(true, {}, this.options.animation.open);\n animation.effects = kendo.parseEffects(animation.effects, this.flipped);\n return animation;\n },\n _hideDirClass: function () {\n var anchor = $(this.options.anchor);\n var direction = ((anchor.attr('class') || '').match(ACTIVEBORDERREGEXP) || [\n '',\n 'down'\n ])[1];\n var dirClass = ACTIVEBORDER + '-' + direction;\n anchor.removeClass(dirClass).children(ACTIVECHILDREN).removeClass(ACTIVE).removeClass(dirClass);\n this.element.removeClass(ACTIVEBORDER + '-' + kendo.directions[direction].reverse);\n },\n _showDirClass: function (animation) {\n var direction = animation.effects.slideIn ? animation.effects.slideIn.direction : 'down';\n var dirClass = ACTIVEBORDER + '-' + direction;\n $(this.options.anchor).addClass(dirClass).children(ACTIVECHILDREN).addClass(ACTIVE).addClass(dirClass);\n this.element.addClass(ACTIVEBORDER + '-' + kendo.directions[direction].reverse);\n },\n position: function () {\n if (this.visible()) {\n this.flipped = this._position();\n }\n },\n toggle: function () {\n var that = this;\n that[that.visible() ? CLOSE : OPEN]();\n },\n visible: function () {\n return this.element.is(':' + VISIBLE);\n },\n close: function (skipEffects) {\n var that = this, options = that.options, wrap, animation, openEffects, closeEffects;\n if (that.visible()) {\n wrap = that.wrapper[0] ? that.wrapper : kendo.wrap(that.element).hide();\n that._toggleResize(false);\n if (that._closing || that._trigger(CLOSE)) {\n that._toggleResize(true);\n return;\n }\n that.element.find('.k-popup').each(function () {\n var that = $(this), popup = that.data('kendoPopup');\n if (popup) {\n popup.close(skipEffects);\n }\n });\n DOCUMENT_ELEMENT.unbind(that.downEvent, that._mousedownProxy);\n if (skipEffects) {\n animation = {\n hide: true,\n effects: {}\n };\n } else {\n animation = extend(true, {}, options.animation.close);\n openEffects = that.element.data(EFFECTS);\n closeEffects = animation.effects;\n if (!closeEffects && !kendo.size(closeEffects) && openEffects && kendo.size(openEffects)) {\n animation.effects = openEffects;\n animation.reverse = true;\n }\n that._closing = true;\n }\n that.element.kendoStop(true);\n wrap.css({ overflow: HIDDEN });\n that.element.kendoAnimate(animation);\n if (skipEffects) {\n that._animationClose();\n }\n }\n },\n _trigger: function (ev) {\n return this.trigger(ev, { type: ev });\n },\n _resize: function (e) {\n var that = this;\n if (support.resize.indexOf(e.type) !== -1) {\n clearTimeout(that._resizeTimeout);\n that._resizeTimeout = setTimeout(function () {\n that._position();\n that._resizeTimeout = null;\n }, 50);\n } else {\n if (!that._hovered || that._activated && that.element.hasClass('k-list-container')) {\n that.close();\n }\n }\n },\n _toggleResize: function (toggle) {\n var method = toggle ? 'on' : 'off';\n var eventNames = support.resize;\n if (!(support.mobileOS.ios || support.mobileOS.android)) {\n eventNames += ' ' + SCROLL;\n }\n this._scrollableParents()[method](SCROLL, this._resizeProxy);\n WINDOW[method](eventNames, this._resizeProxy);\n },\n _mousedown: function (e) {\n var that = this, container = that.element[0], options = that.options, anchor = $(options.anchor)[0], toggleTarget = options.toggleTarget, target = kendo.eventTarget(e), popup = $(target).closest('.k-popup'), mobile = popup.parent().parent('.km-shim').length;\n popup = popup[0];\n if (!mobile && popup && popup !== that.element[0]) {\n return;\n }\n if ($(e.target).closest('a').data('rel') === 'popover') {\n return;\n }\n if (!contains(container, target) && !contains(anchor, target) && !(toggleTarget && contains($(toggleTarget)[0], target))) {\n that.close();\n }\n },\n _fit: function (position, size, viewPortSize) {\n var output = 0;\n if (position + size > viewPortSize) {\n output = viewPortSize - (position + size);\n }\n if (position < 0) {\n output = -position;\n }\n return output;\n },\n _flip: function (offset, size, anchorSize, viewPortSize, origin, position, boxSize) {\n var output = 0;\n boxSize = boxSize || size;\n if (position !== origin && position !== CENTER && origin !== CENTER) {\n if (offset + boxSize > viewPortSize) {\n output += -(anchorSize + size);\n }\n if (offset + output < 0) {\n output += anchorSize + size;\n }\n }\n return output;\n },\n _scrollableParents: function () {\n return $(this.options.anchor).parentsUntil('body').filter(function (index, element) {\n return kendo.isScrollable(element);\n });\n },\n _position: function (fixed) {\n var that = this, element = that.element, wrapper = that.wrapper, options = that.options, viewport = $(options.viewport), zoomLevel = support.zoomLevel(), isWindow = !!(viewport[0] == window && window.innerWidth && zoomLevel <= 1.02), anchor = $(options.anchor), origins = options.origin.toLowerCase().split(' '), positions = options.position.toLowerCase().split(' '), collisions = that.collisions, siblingContainer, parents, parentZIndex, zIndex = 10002, idx = 0, docEl = document.documentElement, length, viewportOffset, viewportWidth, viewportHeight;\n if (options.viewport === window) {\n viewportOffset = {\n top: window.pageYOffset || document.documentElement.scrollTop || 0,\n left: window.pageXOffset || document.documentElement.scrollLeft || 0\n };\n } else {\n viewportOffset = viewport.offset();\n }\n if (isWindow) {\n viewportWidth = window.innerWidth;\n viewportHeight = window.innerHeight;\n } else {\n viewportWidth = viewport.width();\n viewportHeight = viewport.height();\n }\n if (isWindow && docEl.scrollHeight - docEl.clientHeight > 0) {\n var sign = options.isRtl ? -1 : 1;\n viewportWidth -= sign * kendo.support.scrollbar();\n }\n siblingContainer = anchor.parents().filter(wrapper.siblings());\n if (siblingContainer[0]) {\n parentZIndex = Math.max(Number(siblingContainer.css('zIndex')), 0);\n if (parentZIndex) {\n zIndex = parentZIndex + 10;\n } else {\n parents = anchor.parentsUntil(siblingContainer);\n for (length = parents.length; idx < length; idx++) {\n parentZIndex = Number($(parents[idx]).css('zIndex'));\n if (parentZIndex && zIndex < parentZIndex) {\n zIndex = parentZIndex + 10;\n }\n }\n }\n }\n wrapper.css('zIndex', zIndex);\n if (fixed && fixed.isFixed) {\n wrapper.css({\n left: fixed.x,\n top: fixed.y\n });\n } else {\n wrapper.css(that._align(origins, positions));\n }\n var pos = getOffset(wrapper, POSITION, anchor[0] === wrapper.offsetParent()[0]), offset = getOffset(wrapper), anchorParent = anchor.offsetParent().parent('.k-animation-container,.k-popup,.k-group');\n if (anchorParent.length) {\n pos = getOffset(wrapper, POSITION, true);\n offset = getOffset(wrapper);\n }\n offset.top -= viewportOffset.top;\n offset.left -= viewportOffset.left;\n if (!that.wrapper.data(LOCATION)) {\n wrapper.data(LOCATION, extend({}, pos));\n }\n var offsets = extend({}, offset), location = extend({}, pos), adjustSize = options.adjustSize;\n if (collisions[0] === 'fit') {\n location.top += that._fit(offsets.top, outerHeight(wrapper) + adjustSize.height, viewportHeight / zoomLevel);\n }\n if (collisions[1] === 'fit') {\n location.left += that._fit(offsets.left, outerWidth(wrapper) + adjustSize.width, viewportWidth / zoomLevel);\n }\n var flipPos = extend({}, location);\n var elementHeight = outerHeight(element);\n var wrapperHeight = outerHeight(wrapper);\n if (!wrapper.height() && elementHeight) {\n wrapperHeight = wrapperHeight + elementHeight;\n }\n if (collisions[0] === 'flip') {\n location.top += that._flip(offsets.top, elementHeight, outerHeight(anchor), viewportHeight / zoomLevel, origins[0], positions[0], wrapperHeight);\n }\n if (collisions[1] === 'flip') {\n location.left += that._flip(offsets.left, outerWidth(element), outerWidth(anchor), viewportWidth / zoomLevel, origins[1], positions[1], outerWidth(wrapper));\n }\n element.css(POSITION, ABSOLUTE);\n wrapper.css(location);\n return location.left != flipPos.left || location.top != flipPos.top;\n },\n _align: function (origin, position) {\n var that = this, element = that.wrapper, anchor = $(that.options.anchor), verticalOrigin = origin[0], horizontalOrigin = origin[1], verticalPosition = position[0], horizontalPosition = position[1], anchorOffset = getOffset(anchor), appendTo = $(that.options.appendTo), appendToOffset, width = outerWidth(element), height = outerHeight(element), anchorWidth = outerWidth(anchor), anchorHeight = outerHeight(anchor), top = anchorOffset.top, left = anchorOffset.left, round = Math.round;\n if (appendTo[0] != document.body) {\n appendToOffset = getOffset(appendTo);\n top -= appendToOffset.top;\n left -= appendToOffset.left;\n }\n if (verticalOrigin === BOTTOM) {\n top += anchorHeight;\n }\n if (verticalOrigin === CENTER) {\n top += round(anchorHeight / 2);\n }\n if (verticalPosition === BOTTOM) {\n top -= height;\n }\n if (verticalPosition === CENTER) {\n top -= round(height / 2);\n }\n if (horizontalOrigin === RIGHT) {\n left += anchorWidth;\n }\n if (horizontalOrigin === CENTER) {\n left += round(anchorWidth / 2);\n }\n if (horizontalPosition === RIGHT) {\n left -= width;\n }\n if (horizontalPosition === CENTER) {\n left -= round(width / 2);\n }\n return {\n top: top,\n left: left\n };\n }\n });\n ui.plugin(Popup);\n var tabKeyTrapNS = 'kendoTabKeyTrap';\n var focusableNodesSelector = 'a[href], area[href], input:not([disabled]), select:not([disabled]), textarea:not([disabled]), button:not([disabled]), iframe, object, embed, [tabindex], *[contenteditable]';\n var TabKeyTrap = Class.extend({\n init: function (element) {\n this.element = $(element);\n this.element.autoApplyNS(tabKeyTrapNS);\n },\n trap: function () {\n this.element.on('keydown', proxy(this._keepInTrap, this));\n },\n removeTrap: function () {\n this.element.kendoDestroy(tabKeyTrapNS);\n },\n destroy: function () {\n this.element.kendoDestroy(tabKeyTrapNS);\n this.element = undefined;\n },\n shouldTrap: function () {\n return true;\n },\n _keepInTrap: function (e) {\n if (e.which !== 9 || !this.shouldTrap()) {\n return;\n }\n var target = e.target;\n var elements = this.element.find(focusableNodesSelector).filter(':visible[tabindex!=-1]');\n var focusableItems = elements.sort(function (prevEl, nextEl) {\n return prevEl.tabIndex - nextEl.tabIndex;\n });\n var focusableItemsCount = focusableItems.length;\n var lastIndex = focusableItemsCount - 1;\n var focusedItemIndex = focusableItems.index(target);\n if (e.shiftKey) {\n if (focusedItemIndex === 0) {\n focusableItems.get(lastIndex).focus();\n } else {\n focusableItems.get(focusedItemIndex - 1).focus();\n }\n } else {\n if (focusedItemIndex === lastIndex) {\n focusableItems.get(0).focus();\n } else {\n focusableItems.get(focusedItemIndex + 1).focus();\n }\n }\n e.preventDefault();\n }\n });\n ui.Popup.TabKeyTrap = TabKeyTrap;\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.notification', [\n 'kendo.core',\n 'kendo.popup'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'notification',\n name: 'Notification',\n category: 'web',\n description: 'The Notification widget displays user alerts.',\n depends: [\n 'core',\n 'popup'\n ],\n features: [{\n id: 'notification-fx',\n name: 'Animation',\n description: 'Support for animation',\n depends: ['fx']\n }]\n };\n (function ($, undefined) {\n var kendo = window.kendo, Widget = kendo.ui.Widget, proxy = $.proxy, extend = $.extend, setTimeout = window.setTimeout, CLICK = 'click', SHOW = 'show', HIDE = 'hide', KNOTIFICATION = 'k-notification', KICLOSE = '.k-notification-wrap .k-i-close', KHIDING = 'k-hiding', INFO = 'info', SUCCESS = 'success', WARNING = 'warning', ERROR = 'error', TOP = 'top', LEFT = 'left', BOTTOM = 'bottom', RIGHT = 'right', UP = 'up', NS = '.kendoNotification', WRAPPER = '
      ', TEMPLATE = '
      ' + '' + '#=content#' + '' + '
      ', SAFE_TEMPLATE = TEMPLATE.replace('#=content#', '#:content#');\n var Notification = Widget.extend({\n init: function (element, options) {\n var that = this;\n Widget.fn.init.call(that, element, options);\n options = that.options;\n if (!options.appendTo || !$(options.appendTo).is(element)) {\n that.element.hide();\n }\n that._compileTemplates(options.templates);\n that._guid = '_' + kendo.guid();\n that._isRtl = kendo.support.isRtl(element);\n that._compileStacking(options.stacking, options.position.top, options.position.left);\n kendo.notify(that);\n },\n events: [\n SHOW,\n HIDE\n ],\n options: {\n name: 'Notification',\n position: {\n pinned: true,\n top: null,\n left: null,\n bottom: 20,\n right: 20\n },\n stacking: 'default',\n hideOnClick: true,\n button: false,\n allowHideAfter: 0,\n autoHideAfter: 5000,\n appendTo: null,\n width: null,\n height: null,\n templates: [],\n animation: {\n open: {\n effects: 'fade:in',\n duration: 300\n },\n close: {\n effects: 'fade:out',\n duration: 600,\n hide: true\n }\n }\n },\n _compileTemplates: function (templates) {\n var that = this;\n var kendoTemplate = kendo.template;\n that._compiled = {};\n $.each(templates, function (key, value) {\n that._compiled[value.type] = kendoTemplate(value.template || $('#' + value.templateId).html());\n });\n that._defaultCompiled = kendoTemplate(TEMPLATE);\n that._safeCompiled = kendoTemplate(SAFE_TEMPLATE);\n },\n _getCompiled: function (type, safe) {\n var defaultCompiled = safe ? this._safeCompiled : this._defaultCompiled;\n return type ? this._compiled[type] || defaultCompiled : defaultCompiled;\n },\n _compileStacking: function (stacking, top, left) {\n var that = this, paddings = {\n paddingTop: 0,\n paddingRight: 0,\n paddingBottom: 0,\n paddingLeft: 0\n }, horizontalAlignment = left !== null ? LEFT : RIGHT, origin, position;\n switch (stacking) {\n case 'down':\n origin = BOTTOM + ' ' + horizontalAlignment;\n position = TOP + ' ' + horizontalAlignment;\n delete paddings.paddingBottom;\n break;\n case RIGHT:\n origin = TOP + ' ' + RIGHT;\n position = TOP + ' ' + LEFT;\n delete paddings.paddingRight;\n break;\n case LEFT:\n origin = TOP + ' ' + LEFT;\n position = TOP + ' ' + RIGHT;\n delete paddings.paddingLeft;\n break;\n case UP:\n origin = TOP + ' ' + horizontalAlignment;\n position = BOTTOM + ' ' + horizontalAlignment;\n delete paddings.paddingTop;\n break;\n default:\n if (top !== null) {\n origin = BOTTOM + ' ' + horizontalAlignment;\n position = TOP + ' ' + horizontalAlignment;\n delete paddings.paddingBottom;\n } else {\n origin = TOP + ' ' + horizontalAlignment;\n position = BOTTOM + ' ' + horizontalAlignment;\n delete paddings.paddingTop;\n }\n break;\n }\n that._popupOrigin = origin;\n that._popupPosition = position;\n that._popupPaddings = paddings;\n },\n _attachPopupEvents: function (options, popup) {\n var that = this, allowHideAfter = options.allowHideAfter, attachDelay = !isNaN(allowHideAfter) && allowHideAfter > 0, closeIcon;\n function attachClick(target) {\n target.on(CLICK + NS, function () {\n that._hidePopup(popup);\n });\n }\n if (options.hideOnClick) {\n popup.bind('activate', function () {\n if (attachDelay) {\n setTimeout(function () {\n attachClick(popup.element);\n }, allowHideAfter);\n } else {\n attachClick(popup.element);\n }\n });\n } else if (options.button) {\n closeIcon = popup.element.find(KICLOSE);\n if (attachDelay) {\n setTimeout(function () {\n attachClick(closeIcon);\n }, allowHideAfter);\n } else {\n attachClick(closeIcon);\n }\n }\n },\n _showPopup: function (wrapper, options) {\n var that = this, autoHideAfter = options.autoHideAfter, x = options.position.left, y = options.position.top, popup, openPopup;\n openPopup = $('.' + that._guid + ':not(.' + KHIDING + ')').last();\n popup = new kendo.ui.Popup(wrapper, {\n anchor: openPopup[0] ? openPopup : document.body,\n origin: that._popupOrigin,\n position: that._popupPosition,\n animation: options.animation,\n modal: true,\n collision: '',\n isRtl: that._isRtl,\n close: function () {\n that._triggerHide(this.element);\n },\n deactivate: function (e) {\n e.sender.element.off(NS);\n e.sender.element.find(KICLOSE).off(NS);\n e.sender.destroy();\n }\n });\n that._attachPopupEvents(options, popup);\n if (openPopup[0]) {\n popup.open();\n } else {\n if (x === null) {\n x = $(window).width() - wrapper.width() - options.position.right;\n }\n if (y === null) {\n y = $(window).height() - wrapper.height() - options.position.bottom;\n }\n popup.open(x, y);\n }\n popup.wrapper.addClass(that._guid).css(extend({\n margin: 0,\n zIndex: 10050\n }, that._popupPaddings));\n if (options.position.pinned) {\n popup.wrapper.css('position', 'fixed');\n if (openPopup[0]) {\n that._togglePin(popup.wrapper, true);\n }\n } else if (!openPopup[0]) {\n that._togglePin(popup.wrapper, false);\n }\n if (autoHideAfter > 0) {\n setTimeout(function () {\n that._hidePopup(popup);\n }, autoHideAfter);\n }\n },\n _hidePopup: function (popup) {\n popup.wrapper.addClass(KHIDING);\n popup.close();\n },\n _togglePin: function (wrapper, pin) {\n var win = $(window), sign = pin ? -1 : 1;\n wrapper.css({\n top: parseInt(wrapper.css(TOP), 10) + sign * win.scrollTop(),\n left: parseInt(wrapper.css(LEFT), 10) + sign * win.scrollLeft()\n });\n },\n _attachStaticEvents: function (options, wrapper) {\n var that = this, allowHideAfter = options.allowHideAfter, attachDelay = !isNaN(allowHideAfter) && allowHideAfter > 0;\n function attachClick(target) {\n target.on(CLICK + NS, proxy(that._hideStatic, that, wrapper));\n }\n if (options.hideOnClick) {\n if (attachDelay) {\n setTimeout(function () {\n attachClick(wrapper);\n }, allowHideAfter);\n } else {\n attachClick(wrapper);\n }\n } else if (options.button) {\n if (attachDelay) {\n setTimeout(function () {\n attachClick(wrapper.find(KICLOSE));\n }, allowHideAfter);\n } else {\n attachClick(wrapper.find(KICLOSE));\n }\n }\n },\n _showStatic: function (wrapper, options) {\n var that = this, autoHideAfter = options.autoHideAfter, animation = options.animation, insertionMethod = options.stacking == UP || options.stacking == LEFT ? 'prependTo' : 'appendTo';\n wrapper.addClass(that._guid)[insertionMethod](options.appendTo).hide().kendoAnimate(animation.open || false);\n that._attachStaticEvents(options, wrapper);\n if (autoHideAfter > 0) {\n setTimeout(function () {\n that._hideStatic(wrapper);\n }, autoHideAfter);\n }\n },\n _hideStatic: function (wrapper) {\n wrapper.kendoAnimate(extend(this.options.animation.close || false, {\n complete: function () {\n wrapper.off(NS).find(KICLOSE).off(NS);\n wrapper.remove();\n }\n }));\n this._triggerHide(wrapper);\n },\n _triggerHide: function (element) {\n this.trigger(HIDE, { element: element });\n this.angular('cleanup', function () {\n return { elements: element };\n });\n },\n show: function (content, type, safe) {\n var that = this, options = that.options, wrapper = $(WRAPPER), args, defaultArgs;\n if (!type) {\n type = INFO;\n }\n if (content !== null && content !== undefined && content !== '') {\n if (kendo.isFunction(content)) {\n content = content();\n }\n defaultArgs = {\n typeIcon: type,\n content: ''\n };\n if ($.isPlainObject(content)) {\n args = extend(defaultArgs, content);\n } else {\n args = extend(defaultArgs, { content: content });\n }\n wrapper.addClass(KNOTIFICATION + '-' + type).toggleClass(KNOTIFICATION + '-button', options.button).attr('data-role', 'alert').css({\n width: options.width,\n height: options.height\n }).append(that._getCompiled(type, safe)(args));\n that.angular('compile', function () {\n return {\n elements: wrapper,\n data: [{ dataItem: args }]\n };\n });\n if ($(options.appendTo)[0]) {\n that._showStatic(wrapper, options);\n } else {\n that._showPopup(wrapper, options);\n }\n that.trigger(SHOW, { element: wrapper });\n }\n return that;\n },\n showText: function (content, type) {\n this.show(content, type, true);\n },\n info: function (content) {\n return this.show(content, INFO);\n },\n success: function (content) {\n return this.show(content, SUCCESS);\n },\n warning: function (content) {\n return this.show(content, WARNING);\n },\n error: function (content) {\n return this.show(content, ERROR);\n },\n hide: function () {\n var that = this, openedNotifications = that.getNotifications();\n if (that.options.appendTo) {\n openedNotifications.each(function (idx, element) {\n that._hideStatic($(element));\n });\n } else {\n openedNotifications.each(function (idx, element) {\n var popup = $(element).data('kendoPopup');\n if (popup) {\n that._hidePopup(popup);\n }\n });\n }\n return that;\n },\n getNotifications: function () {\n var that = this, guidElements = $('.' + that._guid + ':not(.' + KHIDING + ')');\n if (that.options.appendTo) {\n return guidElements;\n } else {\n return guidElements.children('.' + KNOTIFICATION);\n }\n },\n setOptions: function (newOptions) {\n var that = this, options;\n Widget.fn.setOptions.call(that, newOptions);\n options = that.options;\n if (newOptions.templates !== undefined) {\n that._compileTemplates(options.templates);\n }\n if (newOptions.stacking !== undefined || newOptions.position !== undefined) {\n that._compileStacking(options.stacking, options.position.top, options.position.left);\n }\n },\n destroy: function () {\n Widget.fn.destroy.call(this);\n this.getNotifications().off(NS).find(KICLOSE).off(NS);\n }\n });\n kendo.ui.plugin(Notification);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.tooltip', [\n 'kendo.core',\n 'kendo.popup'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'tooltip',\n name: 'Tooltip',\n category: 'web',\n description: 'The Tooltip widget displays a popup hint for a given html element.',\n depends: [\n 'core',\n 'popup'\n ],\n features: [{\n id: 'tooltip-fx',\n name: 'Animation',\n description: 'Support for animation',\n depends: ['fx']\n }]\n };\n (function ($, undefined) {\n var kendo = window.kendo, Widget = kendo.ui.Widget, Popup = kendo.ui.Popup, isFunction = kendo.isFunction, isPlainObject = $.isPlainObject, extend = $.extend, proxy = $.proxy, DOCUMENT = $(document), isLocalUrl = kendo.isLocalUrl, ARIAIDSUFFIX = '_tt_active', DESCRIBEDBY = 'aria-describedby', SHOW = 'show', HIDE = 'hide', ERROR = 'error', CONTENTLOAD = 'contentLoad', REQUESTSTART = 'requestStart', KCONTENTFRAME = 'k-content-frame', TEMPLATE = '
      #if (!autoHide) {#
      #}#' + '
      ' + '#if (callout){ #
      #}#' + '
      ', IFRAMETEMPLATE = kendo.template(''), NS = '.kendoTooltip', POSITIONS = {\n bottom: {\n origin: 'bottom center',\n position: 'top center'\n },\n top: {\n origin: 'top center',\n position: 'bottom center'\n },\n left: {\n origin: 'center left',\n position: 'center right',\n collision: 'fit flip'\n },\n right: {\n origin: 'center right',\n position: 'center left',\n collision: 'fit flip'\n },\n center: {\n position: 'center center',\n origin: 'center center'\n }\n }, REVERSE = {\n 'top': 'bottom',\n 'bottom': 'top',\n 'left': 'right',\n 'right': 'left',\n 'center': 'center'\n }, DIRCLASSES = {\n bottom: 'n',\n top: 's',\n left: 'e',\n right: 'w',\n center: 'n'\n }, DIMENSIONS = {\n 'horizontal': {\n offset: 'top',\n size: 'outerHeight'\n },\n 'vertical': {\n offset: 'left',\n size: 'outerWidth'\n }\n }, DEFAULTCONTENT = function (e) {\n return e.target.data(kendo.ns + 'title');\n };\n function restoreTitle(element) {\n while (element.length) {\n restoreTitleAttributeForElement(element);\n element = element.parent();\n }\n }\n function restoreTitleAttributeForElement(element) {\n var title = element.data(kendo.ns + 'title');\n if (title) {\n element.attr('title', title);\n element.removeData(kendo.ns + 'title');\n }\n }\n function saveTitleAttributeForElement(element) {\n var title = element.attr('title');\n if (title) {\n element.data(kendo.ns + 'title', title);\n element.attr('title', '');\n }\n }\n function saveTitleAttributes(element) {\n while (element.length && !element.is('body')) {\n saveTitleAttributeForElement(element);\n element = element.parent();\n }\n }\n var Tooltip = Widget.extend({\n init: function (element, options) {\n var that = this, axis;\n Widget.fn.init.call(that, element, options);\n axis = that.options.position.match(/left|right/) ? 'horizontal' : 'vertical';\n that.dimensions = DIMENSIONS[axis];\n that._documentKeyDownHandler = proxy(that._documentKeyDown, that);\n that.element.on(that.options.showOn + NS, that.options.filter, proxy(that._showOn, that)).on('mouseenter' + NS, that.options.filter, proxy(that._mouseenter, that));\n if (this.options.autoHide) {\n that.element.on('mouseleave' + NS, that.options.filter, proxy(that._mouseleave, that));\n }\n },\n options: {\n name: 'Tooltip',\n filter: '',\n content: DEFAULTCONTENT,\n showAfter: 100,\n callout: true,\n position: 'bottom',\n showOn: 'mouseenter',\n autoHide: true,\n width: null,\n height: null,\n animation: {\n open: {\n effects: 'fade:in',\n duration: 0\n },\n close: {\n effects: 'fade:out',\n duration: 40,\n hide: true\n }\n }\n },\n events: [\n SHOW,\n HIDE,\n CONTENTLOAD,\n ERROR,\n REQUESTSTART\n ],\n _mouseenter: function (e) {\n saveTitleAttributes($(e.currentTarget));\n },\n _showOn: function (e) {\n var that = this;\n var currentTarget = $(e.currentTarget);\n if (that.options.showOn && that.options.showOn.match(/click|focus/)) {\n that._show(currentTarget);\n } else {\n clearTimeout(that.timeout);\n that.timeout = setTimeout(function () {\n that._show(currentTarget);\n }, that.options.showAfter);\n }\n },\n _appendContent: function (target) {\n var that = this, contentOptions = that.options.content, element = that.content, showIframe = that.options.iframe, iframe;\n if (isPlainObject(contentOptions) && contentOptions.url) {\n if (!('iframe' in that.options)) {\n showIframe = !isLocalUrl(contentOptions.url);\n }\n that.trigger(REQUESTSTART, {\n options: contentOptions,\n target: target\n });\n if (!showIframe) {\n element.empty();\n kendo.ui.progress(element, true);\n that._ajaxRequest(contentOptions);\n } else {\n element.hide();\n iframe = element.find('.' + KCONTENTFRAME)[0];\n if (iframe) {\n iframe.src = contentOptions.url || iframe.src;\n } else {\n element.html(IFRAMETEMPLATE({ content: contentOptions }));\n }\n element.find('.' + KCONTENTFRAME).off('load' + NS).on('load' + NS, function () {\n that.trigger(CONTENTLOAD);\n element.show();\n });\n }\n } else if (contentOptions && isFunction(contentOptions)) {\n contentOptions = contentOptions({\n sender: this,\n target: target\n });\n element.html(contentOptions || '');\n } else {\n element.html(contentOptions);\n }\n that.angular('compile', function () {\n return { elements: element };\n });\n },\n _ajaxRequest: function (options) {\n var that = this;\n jQuery.ajax(extend({\n type: 'GET',\n dataType: 'html',\n cache: false,\n error: function (xhr, status) {\n kendo.ui.progress(that.content, false);\n that.trigger(ERROR, {\n status: status,\n xhr: xhr\n });\n },\n success: proxy(function (data) {\n kendo.ui.progress(that.content, false);\n that.content.html(data);\n that.trigger(CONTENTLOAD);\n }, that)\n }, options));\n },\n _documentKeyDown: function (e) {\n if (e.keyCode === kendo.keys.ESC) {\n this.hide();\n }\n },\n refresh: function () {\n var that = this, popup = that.popup;\n if (popup && popup.options.anchor) {\n that._appendContent(popup.options.anchor);\n }\n },\n hide: function () {\n if (this.popup) {\n this.popup.close();\n }\n },\n show: function (target) {\n target = target || this.element;\n saveTitleAttributes(target);\n this._show(target);\n },\n _show: function (target) {\n var that = this, current = that.target();\n if (!that.popup) {\n that._initPopup();\n }\n if (current && current[0] != target[0]) {\n that.popup.close();\n that.popup.element.kendoStop(true, true);\n }\n if (!current || current[0] != target[0]) {\n that._appendContent(target);\n that.popup.options.anchor = target;\n }\n that.popup.one('deactivate', function () {\n restoreTitle(target);\n target.removeAttr(DESCRIBEDBY);\n this.element.removeAttr('id').attr('aria-hidden', true);\n DOCUMENT.off('keydown' + NS, that._documentKeyDownHandler);\n });\n that.popup.open();\n },\n _initPopup: function () {\n var that = this, options = that.options, wrapper = $(kendo.template(TEMPLATE)({\n callout: options.callout && options.position !== 'center',\n dir: DIRCLASSES[options.position],\n autoHide: options.autoHide\n }));\n that.popup = new Popup(wrapper, extend({\n activate: function () {\n var anchor = this.options.anchor, ariaId = anchor[0].id || that.element[0].id;\n if (ariaId) {\n anchor.attr(DESCRIBEDBY, ariaId + ARIAIDSUFFIX);\n this.element.attr('id', ariaId + ARIAIDSUFFIX);\n }\n if (options.callout) {\n that._positionCallout();\n }\n this.element.removeAttr('aria-hidden');\n DOCUMENT.on('keydown' + NS, that._documentKeyDownHandler);\n that.trigger(SHOW);\n },\n close: function () {\n that.trigger(HIDE);\n },\n copyAnchorStyles: false,\n animation: options.animation\n }, POSITIONS[options.position]));\n wrapper.css({\n width: options.width,\n height: options.height\n });\n that.content = wrapper.find('.k-tooltip-content');\n that.arrow = wrapper.find('.k-callout');\n if (options.autoHide) {\n wrapper.on('mouseleave' + NS, proxy(that._mouseleave, that));\n } else {\n wrapper.on('click' + NS, '.k-tooltip-button', proxy(that._closeButtonClick, that));\n }\n },\n _closeButtonClick: function (e) {\n e.preventDefault();\n this.hide();\n },\n _mouseleave: function (e) {\n if (this.popup) {\n var element = $(e.currentTarget), offset = element.offset(), pageX = e.pageX, pageY = e.pageY;\n offset.right = offset.left + kendo._outerWidth(element);\n offset.bottom = offset.top + kendo._outerHeight(element);\n if (pageX > offset.left && pageX < offset.right && pageY > offset.top && pageY < offset.bottom) {\n return;\n }\n this.popup.close();\n } else {\n restoreTitle($(e.currentTarget));\n }\n clearTimeout(this.timeout);\n },\n _positionCallout: function () {\n var that = this, position = that.options.position, dimensions = that.dimensions, offset = dimensions.offset, popup = that.popup, anchor = popup.options.anchor, anchorOffset = $(anchor).offset(), arrowBorder = parseInt(that.arrow.css('border-top-width'), 10), elementOffset = $(popup.element).offset(), cssClass = DIRCLASSES[popup.flipped ? REVERSE[position] : position], offsetAmount = anchorOffset[offset] - elementOffset[offset] + $(anchor)[dimensions.size]() / 2 - arrowBorder;\n that.arrow.removeClass('k-callout-n k-callout-s k-callout-w k-callout-e').addClass('k-callout-' + cssClass).css(offset, offsetAmount);\n },\n target: function () {\n if (this.popup) {\n return this.popup.options.anchor;\n }\n return null;\n },\n destroy: function () {\n var popup = this.popup;\n if (popup) {\n popup.element.off(NS);\n popup.destroy();\n }\n clearTimeout(this.timeout);\n this.element.off(NS);\n DOCUMENT.off('keydown' + NS, this._documentKeyDownHandler);\n Widget.fn.destroy.call(this);\n }\n });\n kendo.ui.plugin(Tooltip);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.toolbar', [\n 'kendo.core',\n 'kendo.userevents',\n 'kendo.popup'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'toolbar',\n name: 'ToolBar',\n category: 'web',\n description: 'The ToolBar widget displays one or more command buttons divided into groups.',\n depends: ['core']\n };\n (function ($, undefined) {\n var kendo = window.kendo, Class = kendo.Class, Widget = kendo.ui.Widget, proxy = $.proxy, isFunction = kendo.isFunction, keys = kendo.keys, outerWidth = kendo._outerWidth, TOOLBAR = 'k-toolbar', BUTTON = 'k-button', OVERFLOW_BUTTON = 'k-overflow-button', TOGGLE_BUTTON = 'k-toggle-button', BUTTON_GROUP = 'k-button-group', SPLIT_BUTTON = 'k-split-button', SEPARATOR = 'k-separator', POPUP = 'k-popup', RESIZABLE_TOOLBAR = 'k-toolbar-resizable', STATE_ACTIVE = 'k-state-active', STATE_DISABLED = 'k-state-disabled', STATE_HIDDEN = 'k-state-hidden', GROUP_START = 'k-group-start', GROUP_END = 'k-group-end', PRIMARY = 'k-primary', ICON = 'k-icon', ICON_PREFIX = 'k-i-', BUTTON_ICON = 'k-button-icon', BUTTON_ICON_TEXT = 'k-button-icontext', LIST_CONTAINER = 'k-list-container k-split-container', SPLIT_BUTTON_ARROW = 'k-split-button-arrow', OVERFLOW_ANCHOR = 'k-overflow-anchor', OVERFLOW_CONTAINER = 'k-overflow-container', FIRST_TOOLBAR_VISIBLE = 'k-toolbar-first-visible', LAST_TOOLBAR_VISIBLE = 'k-toolbar-last-visible', CLICK = 'click', TOGGLE = 'toggle', OPEN = 'open', CLOSE = 'close', OVERFLOW_OPEN = 'overflowOpen', OVERFLOW_CLOSE = 'overflowClose', OVERFLOW_NEVER = 'never', OVERFLOW_AUTO = 'auto', OVERFLOW_ALWAYS = 'always', OVERFLOW_HIDDEN = 'k-overflow-hidden', KENDO_UID_ATTR = kendo.attr('uid');\n kendo.toolbar = {};\n var components = {\n overflowAnchor: '
      ',\n overflowContainer: '
        '\n };\n kendo.toolbar.registerComponent = function (name, toolbar, overflow) {\n components[name] = {\n toolbar: toolbar,\n overflow: overflow\n };\n };\n var Item = kendo.Class.extend({\n addOverflowAttr: function () {\n this.element.attr(kendo.attr('overflow'), this.options.overflow || OVERFLOW_AUTO);\n },\n addUidAttr: function () {\n this.element.attr(KENDO_UID_ATTR, this.options.uid);\n },\n addIdAttr: function () {\n if (this.options.id) {\n this.element.attr('id', this.options.id);\n }\n },\n addOverflowIdAttr: function () {\n if (this.options.id) {\n this.element.attr('id', this.options.id + '_overflow');\n }\n },\n attributes: function () {\n if (this.options.attributes) {\n this.element.attr(this.options.attributes);\n }\n },\n show: function () {\n this.element.removeClass(STATE_HIDDEN).show();\n this.options.hidden = false;\n },\n hide: function () {\n this.element.addClass(STATE_HIDDEN).hide();\n this.options.hidden = true;\n },\n remove: function () {\n this.element.remove();\n },\n enable: function (isEnabled) {\n if (isEnabled === undefined) {\n isEnabled = true;\n }\n this.element.toggleClass(STATE_DISABLED, !isEnabled);\n this.options.enable = isEnabled;\n },\n twin: function () {\n var uid = this.element.attr(KENDO_UID_ATTR);\n if (this.overflow) {\n return this.toolbar.element.find('[' + KENDO_UID_ATTR + '=\\'' + uid + '\\']').data(this.options.type);\n } else if (this.toolbar.options.resizable) {\n return this.toolbar.popup.element.find('[' + KENDO_UID_ATTR + '=\\'' + uid + '\\']').data(this.options.type);\n }\n }\n });\n kendo.toolbar.Item = Item;\n var Button = Item.extend({\n init: function (options, toolbar) {\n var element = options.useButtonTag ? $('') : $('');\n this.element = element;\n this.options = options;\n this.toolbar = toolbar;\n this.attributes();\n if (options.primary) {\n element.addClass(PRIMARY);\n }\n if (options.togglable) {\n element.addClass(TOGGLE_BUTTON);\n this.toggle(options.selected);\n }\n if (options.url !== undefined && !options.useButtonTag) {\n element.attr('href', options.url);\n if (options.mobile) {\n element.attr(kendo.attr('role'), 'button');\n }\n }\n if (options.group) {\n element.attr(kendo.attr('group'), options.group);\n this.group = this.toolbar.addToGroup(this, options.group);\n }\n if (!options.togglable && options.click && isFunction(options.click)) {\n this.clickHandler = options.click;\n }\n if (options.togglable && options.toggle && isFunction(options.toggle)) {\n this.toggleHandler = options.toggle;\n }\n },\n toggle: function (state, propagate) {\n state = !!state;\n if (this.group && state) {\n this.group.select(this);\n } else if (!this.group) {\n this.select(state);\n }\n if (propagate && this.twin()) {\n this.twin().toggle(state);\n }\n },\n getParentGroup: function () {\n if (this.options.isChild) {\n return this.element.closest('.' + BUTTON_GROUP).data('buttonGroup');\n }\n },\n _addGraphics: function () {\n var element = this.element, icon = this.options.icon, spriteCssClass = this.options.spriteCssClass, imageUrl = this.options.imageUrl, isEmpty, span, img;\n if (spriteCssClass || imageUrl || icon) {\n isEmpty = true;\n element.contents().filter(function () {\n return !$(this).hasClass('k-sprite') && !$(this).hasClass(ICON) && !$(this).hasClass('k-image');\n }).each(function (idx, el) {\n if (el.nodeType == 1 || el.nodeType == 3 && $.trim(el.nodeValue).length > 0) {\n isEmpty = false;\n }\n });\n if (isEmpty) {\n element.addClass(BUTTON_ICON);\n } else {\n element.addClass(BUTTON_ICON_TEXT);\n }\n }\n if (icon) {\n span = element.children('span.' + ICON).first();\n if (!span[0]) {\n span = $('').prependTo(element);\n }\n span.addClass(ICON_PREFIX + icon);\n } else if (spriteCssClass) {\n span = element.children('span.k-sprite').first();\n if (!span[0]) {\n span = $('').prependTo(element);\n }\n span.addClass(spriteCssClass);\n } else if (imageUrl) {\n img = element.children('img.k-image').first();\n if (!img[0]) {\n img = $('\"icon\"').prependTo(element);\n }\n img.attr('src', imageUrl);\n }\n }\n });\n kendo.toolbar.Button = Button;\n var ToolBarButton = Button.extend({\n init: function (options, toolbar) {\n Button.fn.init.call(this, options, toolbar);\n var element = this.element;\n element.addClass(BUTTON);\n this.addIdAttr();\n if (options.align) {\n element.addClass('k-align-' + options.align);\n }\n if (options.showText != 'overflow' && options.text) {\n if (options.mobile) {\n element.html('' + options.text + '');\n } else {\n element.html(options.text);\n }\n }\n options.hasIcon = options.showIcon != 'overflow' && (options.icon || options.spriteCssClass || options.imageUrl);\n if (options.hasIcon) {\n this._addGraphics();\n }\n this.addUidAttr();\n this.addOverflowAttr();\n this.enable(options.enable);\n if (options.hidden) {\n this.hide();\n }\n this.element.data({\n type: 'button',\n button: this\n });\n },\n select: function (selected) {\n if (selected === undefined) {\n selected = false;\n }\n this.element.toggleClass(STATE_ACTIVE, selected);\n this.options.selected = selected;\n }\n });\n kendo.toolbar.ToolBarButton = ToolBarButton;\n var OverflowButton = Button.extend({\n init: function (options, toolbar) {\n this.overflow = true;\n Button.fn.init.call(this, options, toolbar);\n var element = this.element;\n if (options.showText != 'toolbar' && options.text) {\n if (options.mobile) {\n element.html('' + options.text + '');\n } else {\n element.html('' + options.text + '');\n }\n }\n options.hasIcon = options.showIcon != 'toolbar' && (options.icon || options.spriteCssClass || options.imageUrl);\n if (options.hasIcon) {\n this._addGraphics();\n }\n if (!options.isChild) {\n this._wrap();\n }\n this.addOverflowIdAttr();\n this.attributes();\n this.addUidAttr();\n this.addOverflowAttr();\n this.enable(options.enable);\n element.addClass(OVERFLOW_BUTTON + ' ' + BUTTON);\n if (options.hidden) {\n this.hide();\n }\n if (options.togglable) {\n this.toggle(options.selected);\n }\n this.element.data({\n type: 'button',\n button: this\n });\n },\n _wrap: function () {\n this.element = this.element.wrap('
      • ').parent();\n },\n overflowHidden: function () {\n this.element.addClass(OVERFLOW_HIDDEN);\n },\n select: function (selected) {\n if (selected === undefined) {\n selected = false;\n }\n if (this.options.isChild) {\n this.element.toggleClass(STATE_ACTIVE, selected);\n } else {\n this.element.find('.k-button').toggleClass(STATE_ACTIVE, selected);\n }\n this.options.selected = selected;\n }\n });\n kendo.toolbar.OverflowButton = OverflowButton;\n kendo.toolbar.registerComponent('button', ToolBarButton, OverflowButton);\n var ButtonGroup = Item.extend({\n createButtons: function (buttonConstructor) {\n var options = this.options;\n var items = options.buttons || [];\n var item;\n for (var i = 0; i < items.length; i++) {\n if (!items[i].uid) {\n items[i].uid = kendo.guid();\n }\n item = new buttonConstructor($.extend({\n mobile: options.mobile,\n isChild: true,\n type: 'button'\n }, items[i]), this.toolbar);\n item.element.appendTo(this.element);\n }\n },\n refresh: function () {\n this.element.children().filter(':not(\\'.' + STATE_HIDDEN + '\\'):first').addClass(GROUP_START);\n this.element.children().filter(':not(\\'.' + STATE_HIDDEN + '\\'):last').addClass(GROUP_END);\n }\n });\n kendo.toolbar.ButtonGroup = ButtonGroup;\n var ToolBarButtonGroup = ButtonGroup.extend({\n init: function (options, toolbar) {\n var element = this.element = $('
        ');\n this.options = options;\n this.toolbar = toolbar;\n this.addIdAttr();\n if (options.align) {\n element.addClass('k-align-' + options.align);\n }\n this.createButtons(ToolBarButton);\n this.attributes();\n this.addUidAttr();\n this.addOverflowAttr();\n this.refresh();\n element.addClass(BUTTON_GROUP);\n this.element.data({\n type: 'buttonGroup',\n buttonGroup: this\n });\n }\n });\n kendo.toolbar.ToolBarButtonGroup = ToolBarButtonGroup;\n var OverflowButtonGroup = ButtonGroup.extend({\n init: function (options, toolbar) {\n var element = this.element = $('
      • ');\n this.options = options;\n this.toolbar = toolbar;\n this.overflow = true;\n this.addOverflowIdAttr();\n this.createButtons(OverflowButton);\n this.attributes();\n this.addUidAttr();\n this.addOverflowAttr();\n this.refresh();\n element.addClass((options.mobile ? '' : BUTTON_GROUP) + ' k-overflow-group');\n this.element.data({\n type: 'buttonGroup',\n buttonGroup: this\n });\n },\n overflowHidden: function () {\n this.element.addClass(OVERFLOW_HIDDEN);\n }\n });\n kendo.toolbar.OverflowButtonGroup = OverflowButtonGroup;\n kendo.toolbar.registerComponent('buttonGroup', ToolBarButtonGroup, OverflowButtonGroup);\n var ToolBarSplitButton = Item.extend({\n init: function (options, toolbar) {\n var element = this.element = $('
        ');\n this.options = options;\n this.toolbar = toolbar;\n this.mainButton = new ToolBarButton($.extend({}, options, { hidden: false }), toolbar);\n this.arrowButton = $('');\n this.popupElement = $('
          ');\n this.mainButton.element.removeAttr('href tabindex').appendTo(element);\n this.arrowButton.appendTo(element);\n this.popupElement.appendTo(element);\n if (options.align) {\n element.addClass('k-align-' + options.align);\n }\n if (!options.id) {\n options.id = options.uid;\n }\n element.attr('id', options.id + '_wrapper');\n this.addOverflowAttr();\n this.addUidAttr();\n this.createMenuButtons();\n this.createPopup();\n this._navigatable();\n this.mainButton.main = true;\n this.enable(options.enable);\n if (options.hidden) {\n this.hide();\n }\n element.data({\n type: 'splitButton',\n splitButton: this,\n kendoPopup: this.popup\n });\n },\n _navigatable: function () {\n var that = this;\n that.popupElement.on('keydown', '.' + BUTTON, function (e) {\n var li = $(e.target).parent();\n e.preventDefault();\n if (e.keyCode === keys.ESC || e.keyCode === keys.TAB || e.altKey && e.keyCode === keys.UP) {\n that.toggle();\n that.focus();\n } else if (e.keyCode === keys.DOWN) {\n findFocusableSibling(li, 'next').focus();\n } else if (e.keyCode === keys.UP) {\n findFocusableSibling(li, 'prev').focus();\n } else if (e.keyCode === keys.SPACEBAR || e.keyCode === keys.ENTER) {\n that.toolbar.userEvents.trigger('tap', { target: $(e.target) });\n }\n });\n },\n createMenuButtons: function () {\n var options = this.options;\n var items = options.menuButtons;\n var item;\n for (var i = 0; i < items.length; i++) {\n item = new ToolBarButton($.extend({\n mobile: options.mobile,\n type: 'button',\n click: options.click\n }, items[i]), this.toolbar);\n item.element.wrap('
        • ').parent().appendTo(this.popupElement);\n }\n },\n createPopup: function () {\n var options = this.options;\n var element = this.element;\n this.popupElement.attr('id', options.id + '_optionlist').attr(KENDO_UID_ATTR, options.rootUid);\n if (options.mobile) {\n this.popupElement = actionSheetWrap(this.popupElement);\n }\n this.popup = this.popupElement.kendoPopup({\n appendTo: options.mobile ? $(options.mobile).children('.km-pane') : null,\n anchor: element,\n isRtl: this.toolbar._isRtl,\n copyAnchorStyles: false,\n animation: options.animation,\n open: adjustPopupWidth,\n activate: function () {\n this.element.find(':kendoFocusable').first().focus();\n },\n close: function () {\n element.focus();\n }\n }).data('kendoPopup');\n this.popup.element.on(CLICK, 'a.k-button', preventClick);\n },\n remove: function () {\n this.popup.element.off(CLICK, 'a.k-button');\n this.popup.destroy();\n this.element.remove();\n },\n toggle: function () {\n this.popup.toggle();\n },\n enable: function (isEnabled) {\n if (isEnabled === undefined) {\n isEnabled = true;\n }\n this.mainButton.enable(isEnabled);\n this.options.enable = isEnabled;\n },\n focus: function () {\n this.element.focus();\n },\n hide: function () {\n if (this.popup) {\n this.popup.close();\n }\n this.element.addClass(STATE_HIDDEN).hide();\n this.options.hidden = true;\n },\n show: function () {\n this.element.removeClass(STATE_HIDDEN).hide();\n this.options.hidden = false;\n }\n });\n kendo.toolbar.ToolBarSplitButton = ToolBarSplitButton;\n var OverflowSplitButton = Item.extend({\n init: function (options, toolbar) {\n var element = this.element = $('
        • '), items = options.menuButtons, item;\n this.options = options;\n this.toolbar = toolbar;\n this.overflow = true;\n this.mainButton = new OverflowButton($.extend({ isChild: true }, options));\n this.mainButton.element.appendTo(element);\n for (var i = 0; i < items.length; i++) {\n item = new OverflowButton($.extend({\n mobile: options.mobile,\n isChild: true\n }, items[i]), this.toolbar);\n item.element.appendTo(element);\n }\n this.addUidAttr();\n this.addOverflowAttr();\n this.mainButton.main = true;\n element.data({\n type: 'splitButton',\n splitButton: this\n });\n },\n overflowHidden: function () {\n this.element.addClass(OVERFLOW_HIDDEN);\n }\n });\n kendo.toolbar.OverflowSplitButton = OverflowSplitButton;\n kendo.toolbar.registerComponent('splitButton', ToolBarSplitButton, OverflowSplitButton);\n var ToolBarSeparator = Item.extend({\n init: function (options, toolbar) {\n var element = this.element = $('
           
          ');\n this.element = element;\n this.options = options;\n this.toolbar = toolbar;\n this.attributes();\n this.addIdAttr();\n this.addUidAttr();\n this.addOverflowAttr();\n element.addClass(SEPARATOR);\n element.data({\n type: 'separator',\n separator: this\n });\n }\n });\n var OverflowSeparator = Item.extend({\n init: function (options, toolbar) {\n var element = this.element = $('
        •  
        • ');\n this.element = element;\n this.options = options;\n this.toolbar = toolbar;\n this.overflow = true;\n this.attributes();\n this.addUidAttr();\n this.addOverflowIdAttr();\n element.addClass(SEPARATOR);\n element.data({\n type: 'separator',\n separator: this\n });\n },\n overflowHidden: function () {\n this.element.addClass(OVERFLOW_HIDDEN);\n }\n });\n kendo.toolbar.registerComponent('separator', ToolBarSeparator, OverflowSeparator);\n var TemplateItem = Item.extend({\n init: function (template, options, toolbar) {\n var element = isFunction(template) ? template(options) : template;\n if (!(element instanceof jQuery)) {\n element = $('
          ').html(element);\n } else {\n element = element.wrap('
          ').parent();\n }\n this.element = element;\n this.options = options;\n this.options.type = 'template';\n this.toolbar = toolbar;\n this.attributes();\n this.addUidAttr();\n this.addIdAttr();\n this.addOverflowAttr();\n element.data({\n type: 'template',\n template: this\n });\n }\n });\n kendo.toolbar.TemplateItem = TemplateItem;\n var OverflowTemplateItem = Item.extend({\n init: function (template, options, toolbar) {\n var element = isFunction(template) ? $(template(options)) : $(template);\n if (!(element instanceof jQuery)) {\n element = $('
        • ').html(element);\n } else {\n element = element.wrap('
        • ').parent();\n }\n this.element = element;\n this.options = options;\n this.options.type = 'template';\n this.toolbar = toolbar;\n this.overflow = true;\n this.attributes();\n this.addUidAttr();\n this.addOverflowIdAttr();\n this.addOverflowAttr();\n element.data({\n type: 'template',\n template: this\n });\n },\n overflowHidden: function () {\n this.element.addClass(OVERFLOW_HIDDEN);\n }\n });\n kendo.toolbar.OverflowTemplateItem = OverflowTemplateItem;\n function adjustPopupWidth() {\n var anchor = this.options.anchor, computedWidth = outerWidth(anchor), width;\n kendo.wrap(this.element).addClass('k-split-wrapper');\n if (this.element.css('box-sizing') !== 'border-box') {\n width = computedWidth - (outerWidth(this.element) - this.element.width());\n } else {\n width = computedWidth;\n }\n this.element.css({\n fontFamily: anchor.css('font-family'),\n 'min-width': width\n });\n }\n function toggleActive(e) {\n if (!e.target.is('.k-toggle-button')) {\n e.target.toggleClass(STATE_ACTIVE, e.type == 'press');\n }\n }\n function actionSheetWrap(element) {\n element = $(element);\n return element.hasClass('km-actionsheet') ? element.closest('.km-popup-wrapper') : element.addClass('km-widget km-actionsheet').wrap('
          ').parent().wrap('
          ').parent();\n }\n function preventClick(e) {\n e.preventDefault();\n }\n function findFocusableSibling(element, dir) {\n var getSibling = dir === 'next' ? $.fn.next : $.fn.prev;\n var getter = dir === 'next' ? $.fn.first : $.fn.last;\n var candidate = getSibling.call(element);\n if (candidate.is(':kendoFocusable') || !candidate.length) {\n return candidate;\n }\n if (candidate.find(':kendoFocusable').length) {\n return getter.call(candidate.find(':kendoFocusable'));\n }\n return findFocusableSibling(candidate, dir);\n }\n var Group = Class.extend({\n init: function (name) {\n this.name = name;\n this.buttons = [];\n },\n add: function (button) {\n this.buttons[this.buttons.length] = button;\n },\n remove: function (button) {\n var index = $.inArray(button, this.buttons);\n this.buttons.splice(index, 1);\n },\n select: function (button) {\n var tmp;\n for (var i = 0; i < this.buttons.length; i++) {\n tmp = this.buttons[i];\n tmp.select(false);\n }\n button.select(true);\n if (button.twin()) {\n button.twin().select(true);\n }\n }\n });\n var ToolBar = Widget.extend({\n init: function (element, options) {\n var that = this;\n Widget.fn.init.call(that, element, options);\n options = that.options;\n element = that.wrapper = that.element;\n element.addClass(TOOLBAR + ' k-widget');\n this.uid = kendo.guid();\n this._isRtl = kendo.support.isRtl(element);\n this._groups = {};\n element.attr(KENDO_UID_ATTR, this.uid);\n that.isMobile = typeof options.mobile === 'boolean' ? options.mobile : that.element.closest('.km-root')[0];\n that.animation = that.isMobile ? { open: { effects: 'fade' } } : {};\n if (that.isMobile) {\n element.addClass('km-widget');\n ICON = 'km-icon';\n ICON_PREFIX = 'km-';\n BUTTON = 'km-button';\n BUTTON_GROUP = 'km-buttongroup km-widget';\n STATE_ACTIVE = 'km-state-active';\n STATE_DISABLED = 'km-state-disabled';\n }\n if (options.resizable) {\n that._renderOverflow();\n element.addClass(RESIZABLE_TOOLBAR);\n that.overflowUserEvents = new kendo.UserEvents(that.element, {\n threshold: 5,\n allowSelection: true,\n filter: '.' + OVERFLOW_ANCHOR,\n tap: proxy(that._toggleOverflow, that)\n });\n that._resizeHandler = kendo.onResize(function () {\n that.resize();\n });\n } else {\n that.popup = { element: $([]) };\n }\n if (options.items && options.items.length) {\n for (var i = 0; i < options.items.length; i++) {\n that.add(options.items[i]);\n }\n }\n that.userEvents = new kendo.UserEvents(document, {\n threshold: 5,\n allowSelection: true,\n filter: '[' + KENDO_UID_ATTR + '=' + this.uid + '] a.' + BUTTON + ', ' + '[' + KENDO_UID_ATTR + '=' + this.uid + '] .' + OVERFLOW_BUTTON,\n tap: proxy(that._buttonClick, that),\n press: toggleActive,\n release: toggleActive\n });\n that.element.on(CLICK, 'a.k-button', preventClick);\n that._navigatable();\n if (options.resizable) {\n that.popup.element.on(CLICK, +'a.k-button', preventClick);\n }\n if (options.resizable) {\n this._toggleOverflowAnchor();\n }\n kendo.notify(that);\n },\n events: [\n CLICK,\n TOGGLE,\n OPEN,\n CLOSE,\n OVERFLOW_OPEN,\n OVERFLOW_CLOSE\n ],\n options: {\n name: 'ToolBar',\n items: [],\n resizable: true,\n mobile: null\n },\n addToGroup: function (button, groupName) {\n var group;\n if (!this._groups[groupName]) {\n group = this._groups[groupName] = new Group();\n } else {\n group = this._groups[groupName];\n }\n group.add(button);\n return group;\n },\n destroy: function () {\n var that = this;\n that.element.find('.' + SPLIT_BUTTON).each(function (idx, element) {\n $(element).data('kendoPopup').destroy();\n });\n that.element.off(CLICK, 'a.k-button');\n that.userEvents.destroy();\n if (that.options.resizable) {\n kendo.unbindResize(that._resizeHandler);\n that.overflowUserEvents.destroy();\n that.popup.element.off(CLICK, 'a.k-button');\n that.popup.destroy();\n }\n Widget.fn.destroy.call(that);\n },\n add: function (options) {\n var component = components[options.type], template = options.template, tool, that = this, itemClasses = that.isMobile ? '' : 'k-item k-state-default', overflowTemplate = options.overflowTemplate, overflowTool;\n $.extend(options, {\n uid: kendo.guid(),\n animation: that.animation,\n mobile: that.isMobile,\n rootUid: that.uid\n });\n if (options.menuButtons) {\n for (var i = 0; i < options.menuButtons.length; i++) {\n $.extend(options.menuButtons[i], { uid: kendo.guid() });\n }\n }\n if (template && !overflowTemplate) {\n options.overflow = OVERFLOW_NEVER;\n } else if (!options.overflow) {\n options.overflow = OVERFLOW_AUTO;\n }\n if (options.overflow !== OVERFLOW_NEVER && that.options.resizable) {\n if (overflowTemplate) {\n overflowTool = new OverflowTemplateItem(overflowTemplate, options, that);\n } else if (component) {\n overflowTool = new component.overflow(options, that);\n overflowTool.element.addClass(itemClasses);\n }\n if (overflowTool) {\n if (options.overflow === OVERFLOW_AUTO) {\n overflowTool.overflowHidden();\n }\n overflowTool.element.appendTo(that.popup.container);\n that.angular('compile', function () {\n return { elements: overflowTool.element.get() };\n });\n }\n }\n if (options.overflow !== OVERFLOW_ALWAYS) {\n if (template) {\n tool = new TemplateItem(template, options, that);\n } else if (component) {\n tool = new component.toolbar(options, that);\n }\n if (tool) {\n if (that.options.resizable) {\n tool.element.appendTo(that.element).css('visibility', 'hidden');\n that._shrink(that.element.innerWidth());\n tool.element.css('visibility', 'visible');\n } else {\n tool.element.appendTo(that.element);\n }\n that.angular('compile', function () {\n return { elements: tool.element.get() };\n });\n }\n }\n },\n _getItem: function (candidate) {\n var element, toolbarItem, overflowItem, isResizable = this.options.resizable, type;\n element = this.element.find(candidate);\n if (!element.length) {\n element = $('.k-split-container[data-uid=' + this.uid + ']').find(candidate);\n }\n type = element.length ? element.data('type') : '';\n toolbarItem = element.data(type);\n if (toolbarItem) {\n if (toolbarItem.main) {\n element = element.parent('.' + SPLIT_BUTTON);\n type = 'splitButton';\n toolbarItem = element.data(type);\n }\n if (isResizable) {\n overflowItem = toolbarItem.twin();\n }\n } else if (isResizable) {\n element = this.popup.element.find(candidate);\n type = element.length ? element.data('type') : '';\n overflowItem = element.data(type);\n if (overflowItem && overflowItem.main) {\n element = element.parent('.' + SPLIT_BUTTON);\n type = 'splitButton';\n overflowItem = element.data(type);\n }\n }\n return {\n type: type,\n toolbar: toolbarItem,\n overflow: overflowItem\n };\n },\n remove: function (candidate) {\n var item = this._getItem(candidate);\n if (item.toolbar) {\n item.toolbar.remove();\n }\n if (item.overflow) {\n item.overflow.remove();\n }\n this.resize(true);\n },\n hide: function (candidate) {\n var item = this._getItem(candidate);\n if (item.toolbar) {\n if (item.toolbar.options.type === 'button' && item.toolbar.options.isChild) {\n item.toolbar.hide();\n item.toolbar.getParentGroup().refresh();\n } else if (!item.toolbar.options.hidden) {\n item.toolbar.hide();\n }\n }\n if (item.overflow) {\n if (item.overflow.options.type === 'button' && item.overflow.options.isChild) {\n item.overflow.hide();\n item.overflow.getParentGroup().refresh();\n } else if (!item.overflow.options.hidden) {\n item.overflow.hide();\n }\n }\n this.resize(true);\n },\n show: function (candidate) {\n var item = this._getItem(candidate);\n if (item.toolbar) {\n if (item.toolbar.options.type === 'button' && item.toolbar.options.isChild) {\n item.toolbar.show();\n item.toolbar.getParentGroup().refresh();\n } else if (item.toolbar.options.hidden) {\n item.toolbar.show();\n }\n }\n if (item.overflow) {\n if (item.overflow.options.type === 'button' && item.overflow.options.isChild) {\n item.toolbar.show();\n item.overflow.getParentGroup().refresh();\n } else if (item.overflow.options.hidden) {\n item.overflow.show();\n }\n }\n this.resize(true);\n },\n enable: function (element, enable) {\n var item = this._getItem(element);\n if (typeof enable == 'undefined') {\n enable = true;\n }\n if (item.toolbar) {\n item.toolbar.enable(enable);\n }\n if (item.overflow) {\n item.overflow.enable(enable);\n }\n },\n getSelectedFromGroup: function (groupName) {\n return this.element.find('.' + TOGGLE_BUTTON + '[data-group=\\'' + groupName + '\\']').filter('.' + STATE_ACTIVE);\n },\n toggle: function (button, checked) {\n var element = $(button), item = element.data('button');\n if (item.options.togglable) {\n if (checked === undefined) {\n checked = true;\n }\n item.toggle(checked, true);\n }\n },\n _renderOverflow: function () {\n var that = this, overflowContainer = components.overflowContainer, isRtl = that._isRtl, horizontalDirection = isRtl ? 'left' : 'right';\n that.overflowAnchor = $(components.overflowAnchor).addClass(BUTTON);\n that.element.append(that.overflowAnchor);\n if (that.isMobile) {\n that.overflowAnchor.append('');\n overflowContainer = actionSheetWrap(overflowContainer);\n } else {\n that.overflowAnchor.append('');\n }\n that.popup = new kendo.ui.Popup(overflowContainer, {\n origin: 'bottom ' + horizontalDirection,\n position: 'top ' + horizontalDirection,\n anchor: that.overflowAnchor,\n isRtl: isRtl,\n animation: that.animation,\n appendTo: that.isMobile ? $(that.isMobile).children('.km-pane') : null,\n copyAnchorStyles: false,\n open: function (e) {\n var wrapper = kendo.wrap(that.popup.element).addClass('k-overflow-wrapper');\n if (!that.isMobile) {\n wrapper.css('margin-left', (isRtl ? -1 : 1) * ((outerWidth(wrapper) - wrapper.width()) / 2 + 1));\n } else {\n that.popup.container.css('max-height', parseFloat($('.km-content:visible').innerHeight()) - 15 + 'px');\n }\n if (that.trigger(OVERFLOW_OPEN)) {\n e.preventDefault();\n }\n },\n activate: function () {\n this.element.find(':kendoFocusable').first().focus();\n },\n close: function (e) {\n if (that.trigger(OVERFLOW_CLOSE)) {\n e.preventDefault();\n }\n this.element.focus();\n }\n });\n that.popup.element.on('keydown', '.' + BUTTON, function (e) {\n var target = $(e.target), li = target.parent(), isComplexTool = li.is('.' + BUTTON_GROUP) || li.is('.' + SPLIT_BUTTON), element;\n e.preventDefault();\n if (e.keyCode === keys.ESC || e.keyCode === keys.TAB || e.altKey && e.keyCode === keys.UP) {\n that._toggleOverflow();\n that.overflowAnchor.focus();\n } else if (e.keyCode === keys.DOWN) {\n element = !isComplexTool || isComplexTool && target.is(':last-child') ? li : target;\n findFocusableSibling(element, 'next').focus();\n } else if (e.keyCode === keys.UP) {\n element = !isComplexTool || isComplexTool && target.is(':first-child') ? li : target;\n findFocusableSibling(element, 'prev').focus();\n } else if (e.keyCode === keys.SPACEBAR || e.keyCode === keys.ENTER) {\n that.userEvents.trigger('tap', { target: $(e.target) });\n }\n });\n if (that.isMobile) {\n that.popup.container = that.popup.element.find('.' + OVERFLOW_CONTAINER);\n } else {\n that.popup.container = that.popup.element;\n }\n that.popup.container.attr(KENDO_UID_ATTR, this.uid);\n },\n _toggleOverflowAnchor: function () {\n var hasVisibleChildren = false;\n if (this.options.mobile) {\n hasVisibleChildren = this.popup.element.find('.' + OVERFLOW_CONTAINER).children(':not(.' + OVERFLOW_HIDDEN + ', .' + POPUP + ')').length > 0;\n } else {\n hasVisibleChildren = this.popup.element.children(':not(.' + OVERFLOW_HIDDEN + ', .' + POPUP + ')').length > 0;\n }\n if (hasVisibleChildren) {\n this.overflowAnchor.css({\n visibility: 'visible',\n width: ''\n });\n } else {\n this.overflowAnchor.css({\n visibility: 'hidden',\n width: '1px'\n });\n }\n },\n _buttonClick: function (e) {\n var that = this, popup, target, item, splitContainer, isSplitButtonArrow = e.target.closest('.' + SPLIT_BUTTON_ARROW).length, handler, eventData, urlTarget;\n e.preventDefault();\n if (isSplitButtonArrow) {\n that._toggle(e);\n return;\n }\n target = $(e.target).closest('.' + BUTTON, that.element);\n if (target.hasClass(OVERFLOW_ANCHOR)) {\n return;\n }\n item = target.data('button');\n if (!item && that.popup) {\n target = $(e.target).closest('.' + OVERFLOW_BUTTON, that.popup.container);\n item = target.parent('li').data('button');\n }\n if (!item || !item.options.enable) {\n return;\n }\n if (item.options.togglable) {\n handler = isFunction(item.toggleHandler) ? item.toggleHandler : null;\n item.toggle(!item.options.selected, true);\n eventData = {\n target: target,\n group: item.options.group,\n checked: item.options.selected,\n id: item.options.id\n };\n if (handler) {\n handler.call(that, eventData);\n }\n that.trigger(TOGGLE, eventData);\n } else {\n handler = isFunction(item.clickHandler) ? item.clickHandler : null;\n eventData = {\n sender: that,\n target: target,\n id: item.options.id\n };\n if (handler) {\n handler.call(that, eventData);\n }\n that.trigger(CLICK, eventData);\n }\n if (item.options.url) {\n if (item.options.attributes && item.options.attributes.target) {\n urlTarget = item.options.attributes.target;\n }\n window.open(item.options.url, urlTarget || '_self');\n }\n if (target.hasClass(OVERFLOW_BUTTON)) {\n that.popup.close();\n }\n splitContainer = target.closest('.k-split-container');\n if (splitContainer[0]) {\n popup = splitContainer.data('kendoPopup');\n (popup ? popup : splitContainer.parents('.km-popup-wrapper').data('kendoPopup')).close();\n }\n },\n _navigatable: function () {\n var that = this;\n that.element.attr('tabindex', 0).focus(function () {\n var element = $(this).find(':kendoFocusable:first');\n if (element.length === 0) {\n return;\n }\n if (element.is('.' + OVERFLOW_ANCHOR)) {\n element = findFocusableSibling(element, 'next');\n }\n element[0].focus();\n }).on('keydown', proxy(that._keydown, that));\n },\n _keydown: function (e) {\n var target = $(e.target), keyCode = e.keyCode, items = this.element.children(':not(.k-separator):visible');\n if (keyCode === keys.TAB) {\n var element = target.parentsUntil(this.element).last(), lastHasFocus = false, firstHasFocus = false;\n if (!element.length) {\n element = target;\n }\n if (element.is('.' + OVERFLOW_ANCHOR)) {\n if (e.shiftKey) {\n e.preventDefault();\n }\n if (items.last().is(':kendoFocusable')) {\n items.last().focus();\n } else {\n items.last().find(':kendoFocusable').last().focus();\n }\n }\n if (!e.shiftKey && items.index(element) === items.length - 1) {\n if (element.is('.' + BUTTON_GROUP)) {\n lastHasFocus = target.is(':last-child');\n } else {\n lastHasFocus = true;\n }\n }\n var isFirstTool = items.index(element) === items.not('.k-overflow-anchor').first().index();\n if (e.shiftKey && isFirstTool) {\n if (element.is('.' + BUTTON_GROUP)) {\n firstHasFocus = target.is(':first-child');\n } else {\n firstHasFocus = true;\n }\n }\n if (lastHasFocus && this.overflowAnchor && this.overflowAnchor.css('visibility') !== 'hidden') {\n e.preventDefault();\n this.overflowAnchor.focus();\n }\n if (firstHasFocus) {\n e.preventDefault();\n var prevFocusable = this._getPrevFocusable(this.wrapper);\n if (prevFocusable) {\n prevFocusable.focus();\n }\n }\n }\n if (e.altKey && keyCode === keys.DOWN) {\n var splitButton = $(document.activeElement).data('splitButton');\n var isOverflowAnchor = $(document.activeElement).is('.' + OVERFLOW_ANCHOR);\n if (splitButton) {\n splitButton.toggle();\n } else if (isOverflowAnchor) {\n this._toggleOverflow();\n }\n return;\n }\n if ((keyCode === keys.SPACEBAR || keyCode === keys.ENTER) && !target.is('input, checkbox')) {\n e.preventDefault();\n if (target.is('.' + SPLIT_BUTTON)) {\n target = target.children().first();\n }\n this.userEvents.trigger('tap', { target: target });\n return;\n }\n },\n _getPrevFocusable: function (element) {\n if (element.is('html')) {\n return element;\n }\n var elementToFocus, prevElement, prevElements = element.prevAll();\n prevElements.each(function () {\n prevElement = $(this);\n if (prevElement.is(':kendoFocusable')) {\n elementToFocus = prevElement;\n return false;\n } else if (prevElement.find(':kendoFocusable').length > 0) {\n elementToFocus = prevElement.find(':kendoFocusable').last();\n return false;\n }\n });\n if (elementToFocus) {\n return elementToFocus;\n } else {\n return this._getPrevFocusable(element.parent());\n }\n },\n _toggle: function (e) {\n var splitButton = $(e.target).closest('.' + SPLIT_BUTTON).data('splitButton'), isDefaultPrevented;\n e.preventDefault();\n if (!splitButton.options.enable) {\n return;\n }\n if (splitButton.popup.element.is(':visible')) {\n isDefaultPrevented = this.trigger(CLOSE, { target: splitButton.element });\n } else {\n isDefaultPrevented = this.trigger(OPEN, { target: splitButton.element });\n }\n if (!isDefaultPrevented) {\n splitButton.toggle();\n }\n },\n _toggleOverflow: function () {\n this.popup.toggle();\n },\n _resize: function (e) {\n var containerWidth = e.width;\n if (!this.options.resizable) {\n return;\n }\n this.popup.close();\n this._shrink(containerWidth);\n this._stretch(containerWidth);\n this._markVisibles();\n this._toggleOverflowAnchor();\n },\n _childrenWidth: function () {\n var childrenWidth = 0;\n this.element.children(':visible:not(\\'.' + STATE_HIDDEN + '\\')').each(function () {\n childrenWidth += outerWidth($(this), true);\n });\n return Math.ceil(childrenWidth);\n },\n _shrink: function (containerWidth) {\n var commandElement, visibleCommands;\n if (containerWidth < this._childrenWidth()) {\n visibleCommands = this.element.children(':visible:not([data-overflow=\\'never\\'], .' + OVERFLOW_ANCHOR + ')');\n for (var i = visibleCommands.length - 1; i >= 0; i--) {\n commandElement = visibleCommands.eq(i);\n if (containerWidth > this._childrenWidth()) {\n break;\n } else {\n this._hideItem(commandElement);\n }\n }\n }\n },\n _stretch: function (containerWidth) {\n var commandElement, hiddenCommands;\n if (containerWidth > this._childrenWidth()) {\n hiddenCommands = this.element.children(':hidden:not(\\'.' + STATE_HIDDEN + '\\')');\n for (var i = 0; i < hiddenCommands.length; i++) {\n commandElement = hiddenCommands.eq(i);\n if (containerWidth < this._childrenWidth() || !this._showItem(commandElement, containerWidth)) {\n break;\n }\n }\n }\n },\n _hideItem: function (item) {\n item.hide();\n if (this.popup) {\n this.popup.container.find('>li[data-uid=\\'' + item.data('uid') + '\\']').removeClass(OVERFLOW_HIDDEN);\n }\n },\n _showItem: function (item, containerWidth) {\n if (item.length && containerWidth > this._childrenWidth() + outerWidth(item, true)) {\n item.show();\n if (this.popup) {\n this.popup.container.find('>li[data-uid=\\'' + item.data('uid') + '\\']').addClass(OVERFLOW_HIDDEN);\n }\n return true;\n }\n return false;\n },\n _markVisibles: function () {\n var overflowItems = this.popup.container.children(), toolbarItems = this.element.children(':not(.k-overflow-anchor)'), visibleOverflowItems = overflowItems.filter(':not(.k-overflow-hidden)'), visibleToolbarItems = toolbarItems.filter(':visible');\n overflowItems.add(toolbarItems).removeClass(FIRST_TOOLBAR_VISIBLE + ' ' + LAST_TOOLBAR_VISIBLE);\n visibleOverflowItems.first().add(visibleToolbarItems.first()).addClass(FIRST_TOOLBAR_VISIBLE);\n visibleOverflowItems.last().add(visibleToolbarItems.last()).addClass(LAST_TOOLBAR_VISIBLE);\n }\n });\n kendo.ui.plugin(ToolBar);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.list', [\n 'kendo.data',\n 'kendo.popup'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'list',\n name: 'List',\n category: 'framework',\n depends: [\n 'data',\n 'popup'\n ],\n hidden: true\n };\n (function ($, undefined) {\n var kendo = window.kendo, ui = kendo.ui, outerWidth = kendo._outerWidth, outerHeight = kendo._outerHeight, Widget = ui.Widget, keys = kendo.keys, support = kendo.support, htmlEncode = kendo.htmlEncode, activeElement = kendo._activeElement, ObservableArray = kendo.data.ObservableArray, ID = 'id', CHANGE = 'change', FOCUSED = 'k-state-focused', HOVER = 'k-state-hover', LOADING = 'k-i-loading', HIDDENCLASS = 'k-hidden', GROUPHEADER = '.k-group-header', LABELIDPART = '_label', OPEN = 'open', CLOSE = 'close', CASCADE = 'cascade', SELECT = 'select', SELECTED = 'selected', REQUESTSTART = 'requestStart', REQUESTEND = 'requestEnd', WIDTH = 'width', extend = $.extend, proxy = $.proxy, isArray = $.isArray, browser = support.browser, isIE = browser.msie, isIE8 = isIE && browser.version < 9, quotRegExp = /\"/g, alternativeNames = {\n 'ComboBox': 'DropDownList',\n 'DropDownList': 'ComboBox'\n };\n var List = kendo.ui.DataBoundWidget.extend({\n init: function (element, options) {\n var that = this, ns = that.ns, id;\n Widget.fn.init.call(that, element, options);\n element = that.element;\n options = that.options;\n that._isSelect = element.is(SELECT);\n if (that._isSelect && that.element[0].length) {\n if (!options.dataSource) {\n options.dataTextField = options.dataTextField || 'text';\n options.dataValueField = options.dataValueField || 'value';\n }\n }\n that.ul = $('
            ').attr({\n tabIndex: -1,\n 'aria-hidden': true\n });\n that.list = $('
            ').append(that.ul).on('mousedown' + ns, proxy(that._listMousedown, that));\n id = element.attr(ID);\n if (id) {\n that.list.attr(ID, id + '-list');\n that.ul.attr(ID, id + '_listbox');\n }\n that._header();\n that._noData();\n that._footer();\n that._accessors();\n that._initValue();\n },\n options: {\n valuePrimitive: false,\n footerTemplate: '',\n headerTemplate: '',\n noDataTemplate: 'No data found.'\n },\n setOptions: function (options) {\n Widget.fn.setOptions.call(this, options);\n if (options && options.enable !== undefined) {\n options.enabled = options.enable;\n }\n this._header();\n this._noData();\n this._footer();\n this._renderFooter();\n this._renderNoData();\n },\n focus: function () {\n this._focused.focus();\n },\n readonly: function (readonly) {\n this._editable({\n readonly: readonly === undefined ? true : readonly,\n disable: false\n });\n },\n enable: function (enable) {\n this._editable({\n readonly: false,\n disable: !(enable = enable === undefined ? true : enable)\n });\n },\n _listOptions: function (options) {\n var that = this;\n var currentOptions = that.options;\n var virtual = currentOptions.virtual;\n var listBoundHandler = proxy(that._listBound, that);\n virtual = typeof virtual === 'object' ? virtual : {};\n options = $.extend({\n autoBind: false,\n selectable: true,\n dataSource: that.dataSource,\n click: proxy(that._click, that),\n change: proxy(that._listChange, that),\n activate: proxy(that._activateItem, that),\n deactivate: proxy(that._deactivateItem, that),\n dataBinding: function () {\n that.trigger('dataBinding');\n },\n dataBound: listBoundHandler,\n height: currentOptions.height,\n dataValueField: currentOptions.dataValueField,\n dataTextField: currentOptions.dataTextField,\n groupTemplate: currentOptions.groupTemplate,\n fixedGroupTemplate: currentOptions.fixedGroupTemplate,\n template: currentOptions.template\n }, options, virtual);\n if (!options.template) {\n options.template = '#:' + kendo.expr(options.dataTextField, 'data') + '#';\n }\n if (currentOptions.$angular) {\n options.$angular = currentOptions.$angular;\n }\n return options;\n },\n _initList: function () {\n var that = this;\n var listOptions = that._listOptions({ selectedItemChange: proxy(that._listChange, that) });\n if (!that.options.virtual) {\n that.listView = new kendo.ui.StaticList(that.ul, listOptions);\n } else {\n that.listView = new kendo.ui.VirtualList(that.ul, listOptions);\n }\n that.listView.bind('listBound', proxy(that._listBound, that));\n that._setListValue();\n },\n _setListValue: function (value) {\n value = value || this.options.value;\n if (value !== undefined) {\n this.listView.value(value).done(proxy(this._updateSelectionState, this));\n }\n },\n _updateSelectionState: $.noop,\n _listMousedown: function (e) {\n if (!this.filterInput || this.filterInput[0] !== e.target) {\n e.preventDefault();\n }\n },\n _isFilterEnabled: function () {\n var filter = this.options.filter;\n return filter && filter !== 'none';\n },\n _hideClear: function () {\n var that = this;\n if (that._clear) {\n this._clear.addClass(HIDDENCLASS);\n }\n },\n _showClear: function () {\n var that = this;\n if (that._clear) {\n this._clear.removeClass(HIDDENCLASS);\n }\n },\n _clearValue: function () {\n this._clearText();\n this._accessor('');\n this.listView.value([]);\n if (this._isFilterEnabled() && !this.options.enforceMinLength) {\n this._filter({\n word: '',\n open: false\n });\n }\n this._change();\n },\n _clearText: function () {\n this.text('');\n },\n _clearFilter: function () {\n if (!this.options.virtual) {\n this.listView.bound(false);\n }\n this._filterSource();\n },\n _filterSource: function (filter, force) {\n var that = this;\n var options = that.options;\n var dataSource = that.dataSource;\n var expression = extend({}, dataSource.filter() || {});\n var resetPageSettings = filter || expression.filters && expression.filters.length && !filter;\n var removed = removeFiltersForField(expression, options.dataTextField);\n if ((filter || removed) && that.trigger('filtering', { filter: filter })) {\n return;\n }\n var newExpression = {\n filters: [],\n logic: 'and'\n };\n if (isValidFilterExpr(filter)) {\n newExpression.filters.push(filter);\n }\n if (isValidFilterExpr(expression)) {\n if (newExpression.logic === expression.logic) {\n newExpression.filters = newExpression.filters.concat(expression.filters);\n } else {\n newExpression.filters.push(expression);\n }\n }\n if (that._cascading) {\n this.listView.setDSFilter(newExpression);\n }\n var dataSourceState = extend({}, {\n page: resetPageSettings ? 1 : dataSource.page(),\n pageSize: resetPageSettings ? dataSource.options.pageSize : dataSource.pageSize(),\n sort: dataSource.sort(),\n filter: dataSource.filter(),\n group: dataSource.group(),\n aggregate: dataSource.aggregate()\n }, { filter: newExpression });\n dataSource[force ? 'read' : 'query'](dataSource._mergeState(dataSourceState));\n },\n _angularElement: function (element, action) {\n if (!element) {\n return;\n }\n this.angular(action, function () {\n return { elements: element };\n });\n },\n _noData: function () {\n var noData = $(this.noData);\n var template = this.options.noDataTemplate;\n this.angular('cleanup', function () {\n return { elements: noData };\n });\n kendo.destroy(noData);\n noData.remove();\n if (!template) {\n this.noData = null;\n return;\n }\n this.noData = $('
            ').appendTo(this.list);\n this.noDataTemplate = typeof template !== 'function' ? kendo.template(template) : template;\n },\n _renderNoData: function () {\n var noData = this.noData;\n if (!noData) {\n return;\n }\n this._angularElement(noData, 'cleanup');\n noData.children(':first').html(this.noDataTemplate({ instance: this }));\n this._angularElement(noData, 'compile');\n },\n _toggleNoData: function (show) {\n $(this.noData).toggle(show);\n },\n _toggleHeader: function (show) {\n var groupHeader = this.listView.content.prev(GROUPHEADER);\n groupHeader.toggle(show);\n },\n _footer: function () {\n var footer = $(this.footer);\n var template = this.options.footerTemplate;\n this._angularElement(footer, 'cleanup');\n kendo.destroy(footer);\n footer.remove();\n if (!template) {\n this.footer = null;\n return;\n }\n this.footer = $('
            ').appendTo(this.list);\n this.footerTemplate = typeof template !== 'function' ? kendo.template(template) : template;\n },\n _renderFooter: function () {\n var footer = this.footer;\n if (!footer) {\n return;\n }\n this._angularElement(footer, 'cleanup');\n footer.html(this.footerTemplate({ instance: this }));\n this._angularElement(footer, 'compile');\n },\n _header: function () {\n var header = $(this.header);\n var template = this.options.headerTemplate;\n this._angularElement(header, 'cleanup');\n kendo.destroy(header);\n header.remove();\n if (!template) {\n this.header = null;\n return;\n }\n var headerTemplate = typeof template !== 'function' ? kendo.template(template) : template;\n header = $(headerTemplate({}));\n this.header = header[0] ? header : null;\n this.list.prepend(header);\n this._angularElement(this.header, 'compile');\n },\n _allowOpening: function () {\n return this.options.noDataTemplate || this.dataSource.flatView().length;\n },\n _initValue: function () {\n var that = this, value = that.options.value;\n if (value !== null) {\n that.element.val(value);\n } else {\n value = that._accessor();\n that.options.value = value;\n }\n that._old = value;\n },\n _ignoreCase: function () {\n var that = this, model = that.dataSource.reader.model, field;\n if (model && model.fields) {\n field = model.fields[that.options.dataTextField];\n if (field && field.type && field.type !== 'string') {\n that.options.ignoreCase = false;\n }\n }\n },\n _focus: function (candidate) {\n return this.listView.focus(candidate);\n },\n _filter: function (options) {\n var that = this;\n var widgetOptions = that.options;\n var ignoreCase = widgetOptions.ignoreCase;\n var field = widgetOptions.dataTextField;\n var expression = {\n value: ignoreCase ? options.word.toLowerCase() : options.word,\n field: field,\n operator: widgetOptions.filter,\n ignoreCase: ignoreCase\n };\n that._open = options.open;\n that._filterSource(expression);\n },\n search: function (word) {\n var options = this.options;\n word = typeof word === 'string' ? word : this._inputValue();\n clearTimeout(this._typingTimeout);\n if (!options.enforceMinLength && !word.length || word.length >= options.minLength) {\n this._state = 'filter';\n if (!this._isFilterEnabled()) {\n this._searchByWord(word);\n } else {\n this._filter({\n word: word,\n open: true\n });\n }\n }\n },\n current: function (candidate) {\n return this._focus(candidate);\n },\n items: function () {\n return this.ul[0].children;\n },\n destroy: function () {\n var that = this;\n var ns = that.ns;\n Widget.fn.destroy.call(that);\n that._unbindDataSource();\n that.listView.destroy();\n that.list.off(ns);\n that.popup.destroy();\n if (that._form) {\n that._form.off('reset', that._resetHandler);\n }\n },\n dataItem: function (index) {\n var that = this;\n if (index === undefined) {\n return that.listView.selectedDataItems()[0];\n }\n if (typeof index !== 'number') {\n if (that.options.virtual) {\n return that.dataSource.getByUid($(index).data('uid'));\n }\n index = $(that.items()).index(index);\n }\n return that.dataSource.flatView()[index];\n },\n _activateItem: function () {\n var current = this.listView.focus();\n if (current) {\n this._focused.add(this.filterInput).attr('aria-activedescendant', current.attr('id'));\n }\n },\n _deactivateItem: function () {\n this._focused.add(this.filterInput).removeAttr('aria-activedescendant');\n },\n _accessors: function () {\n var that = this;\n var element = that.element;\n var options = that.options;\n var getter = kendo.getter;\n var textField = element.attr(kendo.attr('text-field'));\n var valueField = element.attr(kendo.attr('value-field'));\n if (!options.dataTextField && textField) {\n options.dataTextField = textField;\n }\n if (!options.dataValueField && valueField) {\n options.dataValueField = valueField;\n }\n that._text = getter(options.dataTextField);\n that._value = getter(options.dataValueField);\n },\n _aria: function (id) {\n var that = this, options = that.options, element = that._focused.add(that.filterInput);\n if (options.suggest !== undefined) {\n element.attr('aria-autocomplete', options.suggest ? 'both' : 'list');\n }\n id = id ? id + ' ' + that.ul[0].id : that.ul[0].id;\n element.attr('aria-owns', id);\n that.ul.attr('aria-live', !that._isFilterEnabled() ? 'off' : 'polite');\n that._ariaLabel();\n },\n _ariaLabel: function () {\n var that = this;\n var focusedElm = that._focused;\n var inputElm = that.element;\n var inputId = inputElm.attr('id');\n var labelElm = $('label[for=\\'' + inputId + '\\']');\n var ariaLabel = inputElm.attr('aria-label');\n var ariaLabelledBy = inputElm.attr('aria-labelledby');\n if (focusedElm === inputElm) {\n return;\n }\n if (ariaLabel) {\n focusedElm.attr('aria-label', ariaLabel);\n } else if (ariaLabelledBy) {\n focusedElm.attr('aria-labelledby', ariaLabelledBy);\n } else if (labelElm.length) {\n var labelId = labelElm.attr('id') || that._generateLabelId(labelElm, inputId);\n focusedElm.attr('aria-labelledby', labelId);\n }\n },\n _generateLabelId: function (label, inputId) {\n var labelId = inputId + LABELIDPART;\n label.attr('id', labelId);\n return labelId;\n },\n _blur: function () {\n var that = this;\n that._change();\n that.close();\n },\n _change: function () {\n var that = this;\n var index = that.selectedIndex;\n var optionValue = that.options.value;\n var value = that.value();\n var trigger;\n if (that._isSelect && !that.listView.bound() && optionValue) {\n value = optionValue;\n }\n if (value !== unifyType(that._old, typeof value)) {\n trigger = true;\n } else if (index !== undefined && index !== that._oldIndex) {\n trigger = true;\n }\n if (trigger) {\n that._old = value;\n that._oldIndex = index;\n if (!that._typing) {\n that.element.trigger(CHANGE);\n }\n that.trigger(CHANGE);\n }\n that.typing = false;\n },\n _data: function () {\n return this.dataSource.view();\n },\n _enable: function () {\n var that = this, options = that.options, disabled = that.element.is('[disabled]');\n if (options.enable !== undefined) {\n options.enabled = options.enable;\n }\n if (!options.enabled || disabled) {\n that.enable(false);\n } else {\n that.readonly(that.element.is('[readonly]'));\n }\n },\n _dataValue: function (dataItem) {\n var value = this._value(dataItem);\n if (value === undefined) {\n value = this._text(dataItem);\n }\n return value;\n },\n _offsetHeight: function () {\n var offsetHeight = 0;\n var siblings = this.listView.content.prevAll(':visible');\n siblings.each(function () {\n var element = $(this);\n offsetHeight += outerHeight(element, true);\n });\n return offsetHeight;\n },\n _height: function (length) {\n var that = this;\n var list = that.list;\n var height = that.options.height;\n var visible = that.popup.visible();\n var offsetTop;\n var popups;\n var footerHeight;\n if (length || that.options.noDataTemplate) {\n popups = list.add(list.parent('.k-animation-container')).show();\n if (!list.is(':visible')) {\n popups.hide();\n return;\n }\n height = that.listView.content[0].scrollHeight > height ? height : 'auto';\n popups.height(height);\n if (height !== 'auto') {\n offsetTop = that._offsetHeight();\n footerHeight = outerHeight($(that.footer)) || 0;\n height = height - offsetTop - footerHeight;\n }\n that.listView.content.height(height);\n if (!visible) {\n popups.hide();\n }\n }\n return height;\n },\n _adjustListWidth: function () {\n var list = this.list, width = list[0].style.width, wrapper = this.wrapper, computedStyle, computedWidth;\n if (!list.data(WIDTH) && width) {\n return;\n }\n computedStyle = window.getComputedStyle ? window.getComputedStyle(wrapper[0], null) : 0;\n computedWidth = parseFloat(computedStyle && computedStyle.width) || outerWidth(wrapper);\n if (computedStyle && browser.msie) {\n computedWidth += parseFloat(computedStyle.paddingLeft) + parseFloat(computedStyle.paddingRight) + parseFloat(computedStyle.borderLeftWidth) + parseFloat(computedStyle.borderRightWidth);\n }\n if (list.css('box-sizing') !== 'border-box') {\n width = computedWidth - (outerWidth(list) - list.width());\n } else {\n width = computedWidth;\n }\n list.css({\n fontFamily: wrapper.css('font-family'),\n width: this.options.autoWidth ? 'auto' : width,\n minWidth: width\n }).data(WIDTH, width);\n return true;\n },\n _openHandler: function (e) {\n this._adjustListWidth();\n if (this.trigger(OPEN)) {\n e.preventDefault();\n } else {\n this._focused.attr('aria-expanded', true);\n this.ul.attr('aria-hidden', false);\n }\n },\n _closeHandler: function (e) {\n if (this.trigger(CLOSE)) {\n e.preventDefault();\n } else {\n this._focused.attr('aria-expanded', false);\n this.ul.attr('aria-hidden', true);\n }\n },\n _focusItem: function () {\n var listView = this.listView;\n var noFocusedItem = !listView.focus();\n var index = last(listView.select());\n if (index === undefined && this.options.highlightFirst && noFocusedItem) {\n index = 0;\n }\n if (index !== undefined) {\n listView.focus(index);\n } else if (noFocusedItem) {\n listView.scrollToIndex(0);\n }\n },\n _calculateGroupPadding: function (height) {\n var li = this.ul.children('.k-first:first');\n var groupHeader = this.listView.content.prev(GROUPHEADER);\n var padding = 0;\n if (groupHeader[0] && groupHeader[0].style.display !== 'none') {\n if (height !== 'auto') {\n padding = kendo.support.scrollbar();\n }\n padding += parseFloat(li.css('border-right-width'), 10) + parseFloat(li.children('.k-group').css('padding-right'), 10);\n groupHeader.css('padding-right', padding);\n }\n },\n _calculatePopupHeight: function (force) {\n var height = this._height(this.dataSource.flatView().length || force);\n this._calculateGroupPadding(height);\n },\n _resizePopup: function (force) {\n if (this.options.virtual) {\n return;\n }\n if (!this.popup.element.is(':visible')) {\n this.popup.one('open', function (force) {\n return proxy(function () {\n this._calculatePopupHeight(force);\n }, this);\n }.call(this, force));\n } else {\n this._calculatePopupHeight(force);\n }\n },\n _popup: function () {\n var that = this;\n that.popup = new ui.Popup(that.list, extend({}, that.options.popup, {\n anchor: that.wrapper,\n open: proxy(that._openHandler, that),\n close: proxy(that._closeHandler, that),\n animation: that.options.animation,\n isRtl: support.isRtl(that.wrapper),\n autosize: that.options.autoWidth\n }));\n },\n _makeUnselectable: function () {\n if (isIE8) {\n this.list.find('*').not('.k-textbox').attr('unselectable', 'on');\n }\n },\n _toggleHover: function (e) {\n $(e.currentTarget).toggleClass(HOVER, e.type === 'mouseenter');\n },\n _toggle: function (open, preventFocus) {\n var that = this;\n var touchEnabled = support.mobileOS && (support.touch || support.MSPointers || support.pointers);\n open = open !== undefined ? open : !that.popup.visible();\n if (!preventFocus && !touchEnabled && that._focused[0] !== activeElement()) {\n that._prevent = true;\n that._focused.focus();\n that._prevent = false;\n }\n that[open ? OPEN : CLOSE]();\n },\n _triggerCascade: function () {\n var that = this;\n if (!that._cascadeTriggered || that._old !== that.value() || that._oldIndex !== that.selectedIndex) {\n that._cascadeTriggered = true;\n that.trigger(CASCADE, { userTriggered: that._userTriggered });\n }\n },\n _triggerChange: function () {\n if (this._valueBeforeCascade !== this.value()) {\n this.trigger(CHANGE);\n }\n },\n _unbindDataSource: function () {\n var that = this;\n that.dataSource.unbind(REQUESTSTART, that._requestStartHandler).unbind(REQUESTEND, that._requestEndHandler).unbind('error', that._errorHandler);\n },\n requireValueMapper: function (options, value) {\n var hasValue = (options.value instanceof Array ? options.value.length : options.value) || (value instanceof Array ? value.length : value);\n if (hasValue && options.virtual && typeof options.virtual.valueMapper !== 'function') {\n throw new Error('ValueMapper is not provided while the value is being set. See http://docs.telerik.com/kendo-ui/controls/editors/combobox/virtualization#the-valuemapper-function');\n }\n }\n });\n function unifyType(value, type) {\n if (value !== undefined && value !== '' && value !== null) {\n if (type === 'boolean') {\n value = Boolean(value);\n } else if (type === 'number') {\n value = Number(value);\n } else if (type === 'string') {\n value = value.toString();\n }\n }\n return value;\n }\n extend(List, {\n inArray: function (node, parentNode) {\n var idx, length, siblings = parentNode.children;\n if (!node || node.parentNode !== parentNode) {\n return -1;\n }\n for (idx = 0, length = siblings.length; idx < length; idx++) {\n if (node === siblings[idx]) {\n return idx;\n }\n }\n return -1;\n },\n unifyType: unifyType\n });\n kendo.ui.List = List;\n ui.Select = List.extend({\n init: function (element, options) {\n List.fn.init.call(this, element, options);\n this._initial = this.element.val();\n },\n setDataSource: function (dataSource) {\n var that = this;\n var parent;\n that.options.dataSource = dataSource;\n that._dataSource();\n if (that.listView.bound()) {\n that._initialIndex = null;\n }\n that.listView.setDataSource(that.dataSource);\n if (that.options.autoBind) {\n that.dataSource.fetch();\n }\n parent = that._parentWidget();\n if (parent) {\n that._cascadeSelect(parent);\n }\n },\n close: function () {\n this.popup.close();\n },\n select: function (candidate) {\n var that = this;\n if (candidate === undefined) {\n return that.selectedIndex;\n } else {\n return that._select(candidate).done(function () {\n that._old = that._accessor();\n that._oldIndex = that.selectedIndex;\n });\n }\n },\n _accessor: function (value, idx) {\n return this[this._isSelect ? '_accessorSelect' : '_accessorInput'](value, idx);\n },\n _accessorInput: function (value) {\n var element = this.element[0];\n if (value === undefined) {\n return element.value;\n } else {\n if (value === null) {\n value = '';\n }\n element.value = value;\n }\n },\n _accessorSelect: function (value, idx) {\n var element = this.element[0];\n var hasValue;\n if (value === undefined) {\n return getSelectedOption(element).value || '';\n }\n getSelectedOption(element).selected = false;\n if (idx === undefined) {\n idx = -1;\n }\n hasValue = value !== null && value !== '';\n if (hasValue && idx == -1) {\n this._custom(value);\n } else {\n if (value) {\n element.value = value;\n } else {\n element.selectedIndex = idx;\n }\n }\n },\n _custom: function (value) {\n var that = this;\n var element = that.element;\n var custom = that._customOption;\n if (!custom) {\n custom = $('
            ').parent();\n this.header = this.content.before('
            ').prev();\n this.bound(false);\n this._optionID = kendo.guid();\n this._selectedIndices = [];\n this._view = [];\n this._dataItems = [];\n this._values = [];\n var value = this.options.value;\n if (value) {\n this._values = $.isArray(value) ? value.slice(0) : [value];\n }\n this._getter();\n this._templates();\n this.setDataSource(this.options.dataSource);\n this._onScroll = proxy(function () {\n var that = this;\n clearTimeout(that._scrollId);\n that._scrollId = setTimeout(function () {\n that._renderHeader();\n }, 50);\n }, this);\n },\n options: {\n name: 'StaticList',\n dataValueField: null,\n valuePrimitive: false,\n selectable: true,\n template: null,\n groupTemplate: null,\n fixedGroupTemplate: null\n },\n events: [\n 'click',\n CHANGE,\n 'activate',\n 'deactivate',\n 'dataBinding',\n 'dataBound',\n 'selectedItemChange'\n ],\n setDataSource: function (source) {\n var that = this;\n var dataSource = source || {};\n var value;\n dataSource = $.isArray(dataSource) ? { data: dataSource } : dataSource;\n dataSource = kendo.data.DataSource.create(dataSource);\n if (that.dataSource) {\n that.dataSource.unbind(CHANGE, that._refreshHandler);\n value = that.value();\n that.value([]);\n that.bound(false);\n that.value(value);\n } else {\n that._refreshHandler = proxy(that.refresh, that);\n }\n that.setDSFilter(dataSource.filter());\n that.dataSource = dataSource.bind(CHANGE, that._refreshHandler);\n that._fixedHeader();\n },\n skip: function () {\n return this.dataSource.skip();\n },\n setOptions: function (options) {\n Widget.fn.setOptions.call(this, options);\n this._getter();\n this._templates();\n this._render();\n },\n destroy: function () {\n this.element.off(STATIC_LIST_NS);\n if (this._refreshHandler) {\n this.dataSource.unbind(CHANGE, this._refreshHandler);\n }\n clearTimeout(this._scrollId);\n Widget.fn.destroy.call(this);\n },\n dataItemByIndex: function (index) {\n return this.dataSource.flatView()[index];\n },\n screenHeight: function () {\n return this.content[0].clientHeight;\n },\n scrollToIndex: function (index) {\n var item = this.element[0].children[index];\n if (item) {\n this.scroll(item);\n }\n },\n scrollWith: function (value) {\n this.content.scrollTop(this.content.scrollTop() + value);\n },\n scroll: function (item) {\n if (!item) {\n return;\n }\n if (item[0]) {\n item = item[0];\n }\n var content = this.content[0], itemOffsetTop = item.offsetTop, itemOffsetHeight = item.offsetHeight, contentScrollTop = content.scrollTop, contentOffsetHeight = content.clientHeight, bottomDistance = itemOffsetTop + itemOffsetHeight;\n if (contentScrollTop > itemOffsetTop) {\n contentScrollTop = itemOffsetTop;\n } else if (bottomDistance > contentScrollTop + contentOffsetHeight) {\n contentScrollTop = bottomDistance - contentOffsetHeight;\n }\n content.scrollTop = contentScrollTop;\n },\n selectedDataItems: function (dataItems) {\n if (dataItems === undefined) {\n return this._dataItems.slice();\n }\n this._dataItems = dataItems;\n this._values = this._getValues(dataItems);\n },\n _getValues: function (dataItems) {\n var getter = this._valueGetter;\n return $.map(dataItems, function (dataItem) {\n return getter(dataItem);\n });\n },\n focusNext: function () {\n var current = this.focus();\n if (!current) {\n current = 0;\n } else {\n current = current.next();\n }\n this.focus(current);\n },\n focusPrev: function () {\n var current = this.focus();\n if (!current) {\n current = this.element[0].children.length - 1;\n } else {\n current = current.prev();\n }\n this.focus(current);\n },\n focusFirst: function () {\n this.focus(this.element[0].children[0]);\n },\n focusLast: function () {\n this.focus(last(this.element[0].children));\n },\n focus: function (candidate) {\n var that = this;\n var id = that._optionID;\n var hasCandidate;\n if (candidate === undefined) {\n return that._current;\n }\n candidate = last(that._get(candidate));\n candidate = $(this.element[0].children[candidate]);\n if (that._current) {\n that._current.removeClass(FOCUSED).removeAttr('aria-selected').removeAttr(ID);\n that.trigger('deactivate');\n }\n hasCandidate = !!candidate[0];\n if (hasCandidate) {\n candidate.addClass(FOCUSED);\n that.scroll(candidate);\n candidate.attr('id', id);\n }\n that._current = hasCandidate ? candidate : null;\n that.trigger('activate');\n },\n focusIndex: function () {\n return this.focus() ? this.focus().index() : undefined;\n },\n skipUpdate: function (skipUpdate) {\n this._skipUpdate = skipUpdate;\n },\n select: function (indices) {\n var that = this;\n var selectable = that.options.selectable;\n var singleSelection = selectable !== 'multiple' && selectable !== false;\n var selectedIndices = that._selectedIndices;\n var added = [];\n var removed = [];\n var result;\n if (indices === undefined) {\n return selectedIndices.slice();\n }\n indices = that._get(indices);\n if (indices.length === 1 && indices[0] === -1) {\n indices = [];\n }\n var deferred = $.Deferred().resolve();\n var filtered = that.isFiltered();\n if (filtered && !singleSelection && that._deselectFiltered(indices)) {\n return deferred;\n }\n if (singleSelection && !filtered && $.inArray(last(indices), selectedIndices) !== -1) {\n if (that._dataItems.length && that._view.length) {\n that._dataItems = [that._view[selectedIndices[0]].item];\n }\n return deferred;\n }\n result = that._deselect(indices);\n removed = result.removed;\n indices = result.indices;\n if (indices.length) {\n if (singleSelection) {\n indices = [last(indices)];\n }\n added = that._select(indices);\n }\n if (added.length || removed.length) {\n that._valueComparer = null;\n that.trigger(CHANGE, {\n added: added,\n removed: removed\n });\n }\n return deferred;\n },\n removeAt: function (position) {\n this._selectedIndices.splice(position, 1);\n this._values.splice(position, 1);\n this._valueComparer = null;\n return {\n position: position,\n dataItem: this._dataItems.splice(position, 1)[0]\n };\n },\n setValue: function (value) {\n value = $.isArray(value) || value instanceof ObservableArray ? value.slice(0) : [value];\n this._values = value;\n this._valueComparer = null;\n },\n value: function (value) {\n var that = this;\n var deferred = that._valueDeferred;\n var indices;\n if (value === undefined) {\n return that._values.slice();\n }\n that.setValue(value);\n if (!deferred || deferred.state() === 'resolved') {\n that._valueDeferred = deferred = $.Deferred();\n }\n if (that.bound()) {\n indices = that._valueIndices(that._values);\n if (that.options.selectable === 'multiple') {\n that.select(-1);\n }\n that.select(indices);\n deferred.resolve();\n }\n that._skipUpdate = false;\n return deferred;\n },\n items: function () {\n return this.element.children('.k-item');\n },\n _click: function (e) {\n if (!e.isDefaultPrevented()) {\n if (!this.trigger('click', { item: $(e.currentTarget) })) {\n this.select(e.currentTarget);\n }\n }\n },\n _valueExpr: function (type, values) {\n var that = this;\n var idx = 0;\n var body;\n var comparer;\n var normalized = [];\n if (!that._valueComparer || that._valueType !== type) {\n that._valueType = type;\n for (; idx < values.length; idx++) {\n normalized.push(unifyType(values[idx], type));\n }\n body = 'for (var idx = 0; idx < ' + normalized.length + '; idx++) {' + ' if (current === values[idx]) {' + ' return idx;' + ' }' + '} ' + 'return -1;';\n comparer = new Function('current', 'values', body);\n that._valueComparer = function (current) {\n return comparer(current, normalized);\n };\n }\n return that._valueComparer;\n },\n _dataItemPosition: function (dataItem, values) {\n var value = this._valueGetter(dataItem);\n var valueExpr = this._valueExpr(typeof value, values);\n return valueExpr(value);\n },\n _getter: function () {\n this._valueGetter = kendo.getter(this.options.dataValueField);\n },\n _deselect: function (indices) {\n var that = this;\n var children = that.element[0].children;\n var selectable = that.options.selectable;\n var selectedIndices = that._selectedIndices;\n var dataItems = that._dataItems;\n var values = that._values;\n var removed = [];\n var i = 0;\n var j;\n var index, selectedIndex;\n var removedIndices = 0;\n indices = indices.slice();\n if (selectable === true || !indices.length) {\n for (; i < selectedIndices.length; i++) {\n $(children[selectedIndices[i]]).removeClass('k-state-selected');\n removed.push({\n position: i,\n dataItem: dataItems[i]\n });\n }\n that._values = [];\n that._dataItems = [];\n that._selectedIndices = [];\n } else if (selectable === 'multiple') {\n for (; i < indices.length; i++) {\n index = indices[i];\n if (!$(children[index]).hasClass('k-state-selected')) {\n continue;\n }\n for (j = 0; j < selectedIndices.length; j++) {\n selectedIndex = selectedIndices[j];\n if (selectedIndex === index) {\n $(children[selectedIndex]).removeClass('k-state-selected');\n removed.push({\n position: j + removedIndices,\n dataItem: dataItems.splice(j, 1)[0]\n });\n selectedIndices.splice(j, 1);\n indices.splice(i, 1);\n values.splice(j, 1);\n removedIndices += 1;\n i -= 1;\n j -= 1;\n break;\n }\n }\n }\n }\n return {\n indices: indices,\n removed: removed\n };\n },\n _deselectFiltered: function (indices) {\n var children = this.element[0].children;\n var dataItem, index, position;\n var removed = [];\n var idx = 0;\n for (; idx < indices.length; idx++) {\n index = indices[idx];\n dataItem = this._view[index].item;\n position = this._dataItemPosition(dataItem, this._values);\n if (position > -1) {\n removed.push(this.removeAt(position));\n $(children[index]).removeClass('k-state-selected');\n }\n }\n if (removed.length) {\n this.trigger(CHANGE, {\n added: [],\n removed: removed\n });\n return true;\n }\n return false;\n },\n _select: function (indices) {\n var that = this;\n var children = that.element[0].children;\n var data = that._view;\n var dataItem, index;\n var added = [];\n var idx = 0;\n if (last(indices) !== -1) {\n that.focus(indices);\n }\n for (; idx < indices.length; idx++) {\n index = indices[idx];\n dataItem = data[index];\n if (index === -1 || !dataItem) {\n continue;\n }\n dataItem = dataItem.item;\n that._selectedIndices.push(index);\n that._dataItems.push(dataItem);\n that._values.push(that._valueGetter(dataItem));\n $(children[index]).addClass('k-state-selected').attr('aria-selected', true);\n added.push({ dataItem: dataItem });\n }\n return added;\n },\n getElementIndex: function (element) {\n return $(element).data('offset-index');\n },\n _get: function (candidate) {\n if (typeof candidate === 'number') {\n candidate = [candidate];\n } else if (!isArray(candidate)) {\n candidate = this.getElementIndex(candidate);\n candidate = [candidate !== undefined ? candidate : -1];\n }\n return candidate;\n },\n _template: function () {\n var that = this;\n var options = that.options;\n var template = options.template;\n if (!template) {\n template = kendo.template('
          • ${' + kendo.expr(options.dataTextField, 'data') + '}
          • ', { useWithBlock: false });\n } else {\n template = kendo.template(template);\n template = function (data) {\n return '
          • ' + template(data) + '
          • ';\n };\n }\n return template;\n },\n _templates: function () {\n var template;\n var options = this.options;\n var templates = {\n template: options.template,\n groupTemplate: options.groupTemplate,\n fixedGroupTemplate: options.fixedGroupTemplate\n };\n for (var key in templates) {\n template = templates[key];\n if (template && typeof template !== 'function') {\n templates[key] = kendo.template(template);\n }\n }\n this.templates = templates;\n },\n _normalizeIndices: function (indices) {\n var newIndices = [];\n var idx = 0;\n for (; idx < indices.length; idx++) {\n if (indices[idx] !== undefined) {\n newIndices.push(indices[idx]);\n }\n }\n return newIndices;\n },\n _valueIndices: function (values, indices) {\n var data = this._view;\n var idx = 0;\n var index;\n indices = indices ? indices.slice() : [];\n if (!values.length) {\n return [];\n }\n for (; idx < data.length; idx++) {\n index = this._dataItemPosition(data[idx].item, values);\n if (index !== -1) {\n indices[index] = idx;\n }\n }\n return this._normalizeIndices(indices);\n },\n _firstVisibleItem: function () {\n var element = this.element[0];\n var content = this.content[0];\n var scrollTop = content.scrollTop;\n var itemHeight = $(element.children[0]).height();\n var itemIndex = Math.floor(scrollTop / itemHeight) || 0;\n var item = element.children[itemIndex] || element.lastChild;\n var forward = item.offsetTop < scrollTop;\n while (item) {\n if (forward) {\n if (item.offsetTop + itemHeight > scrollTop || !item.nextSibling) {\n break;\n }\n item = item.nextSibling;\n } else {\n if (item.offsetTop <= scrollTop || !item.previousSibling) {\n break;\n }\n item = item.previousSibling;\n }\n }\n return this._view[$(item).data('offset-index')];\n },\n _fixedHeader: function () {\n if (this.isGrouped() && this.templates.fixedGroupTemplate) {\n this.header.show();\n this.content.scroll(this._onScroll);\n } else {\n this.header.hide();\n this.content.off('scroll', this._onScroll);\n }\n },\n _renderHeader: function () {\n var template = this.templates.fixedGroupTemplate;\n if (!template) {\n return;\n }\n var visibleItem = this._firstVisibleItem();\n if (visibleItem) {\n this.header.html(template(visibleItem.group));\n }\n },\n _renderItem: function (context) {\n var item = '
          • ';\n item += this.templates.template(dataItem);\n if (notFirstItem && context.newGroup) {\n item += '
            ' + this.templates.groupTemplate(context.group) + '
            ';\n }\n return item + '
          • ';\n },\n _render: function () {\n var html = '';\n var i = 0;\n var idx = 0;\n var context;\n var dataContext = [];\n var view = this.dataSource.view();\n var values = this.value();\n var group, newGroup, j;\n var isGrouped = this.isGrouped();\n if (isGrouped) {\n for (i = 0; i < view.length; i++) {\n group = view[i];\n newGroup = true;\n for (j = 0; j < group.items.length; j++) {\n context = {\n selected: this._selected(group.items[j], values),\n item: group.items[j],\n group: group.value,\n newGroup: newGroup,\n index: idx\n };\n dataContext[idx] = context;\n idx += 1;\n html += this._renderItem(context);\n newGroup = false;\n }\n }\n } else {\n for (i = 0; i < view.length; i++) {\n context = {\n selected: this._selected(view[i], values),\n item: view[i],\n index: i\n };\n dataContext[i] = context;\n html += this._renderItem(context);\n }\n }\n this._view = dataContext;\n this.element[0].innerHTML = html;\n if (isGrouped && dataContext.length) {\n this._renderHeader();\n }\n },\n _selected: function (dataItem, values) {\n var select = !this.isFiltered() || this.options.selectable === 'multiple';\n return select && this._dataItemPosition(dataItem, values) !== -1;\n },\n setDSFilter: function (filter) {\n this._lastDSFilter = extend({}, filter);\n },\n isFiltered: function () {\n if (!this._lastDSFilter) {\n this.setDSFilter(this.dataSource.filter());\n }\n return !kendo.data.Query.compareFilters(this.dataSource.filter(), this._lastDSFilter);\n },\n refresh: function (e) {\n var that = this;\n var action = e && e.action;\n var skipUpdateOnBind = that.options.skipUpdateOnBind;\n var isItemChange = action === 'itemchange';\n var result;\n that.trigger('dataBinding');\n that._angularItems('cleanup');\n that._fixedHeader();\n that._render();\n that.bound(true);\n if (isItemChange || action === 'remove') {\n result = mapChangedItems(that._dataItems, e.items);\n if (result.changed.length) {\n if (isItemChange) {\n that.trigger('selectedItemChange', { items: result.changed });\n } else {\n that.value(that._getValues(result.unchanged));\n }\n }\n } else if (that.isFiltered() || that._skipUpdate) {\n that.focus(0);\n if (that._skipUpdate) {\n that._skipUpdate = false;\n that._selectedIndices = that._valueIndices(that._values, that._selectedIndices);\n }\n } else if (!skipUpdateOnBind && (!action || action === 'add')) {\n that.value(that._values);\n }\n if (that._valueDeferred) {\n that._valueDeferred.resolve();\n }\n that._angularItems('compile');\n that.trigger('dataBound');\n },\n bound: function (bound) {\n if (bound === undefined) {\n return this._bound;\n }\n this._bound = bound;\n },\n isGrouped: function () {\n return (this.dataSource.group() || []).length;\n }\n });\n ui.plugin(StaticList);\n function last(list) {\n return list[list.length - 1];\n }\n function getSelectedOption(select) {\n var index = select.selectedIndex;\n return index > -1 ? select.options[index] : {};\n }\n function mapChangedItems(selected, itemsToMatch) {\n var itemsLength = itemsToMatch.length;\n var selectedLength = selected.length;\n var dataItem;\n var found;\n var i, j;\n var changed = [];\n var unchanged = [];\n if (selectedLength) {\n for (i = 0; i < selectedLength; i++) {\n dataItem = selected[i];\n found = false;\n for (j = 0; j < itemsLength; j++) {\n if (dataItem === itemsToMatch[j]) {\n found = true;\n changed.push({\n index: i,\n item: dataItem\n });\n break;\n }\n }\n if (!found) {\n unchanged.push(dataItem);\n }\n }\n }\n return {\n changed: changed,\n unchanged: unchanged\n };\n }\n function isValidFilterExpr(expression) {\n if (!expression || $.isEmptyObject(expression)) {\n return false;\n }\n if (expression.filters && !expression.filters.length) {\n return false;\n }\n return true;\n }\n function removeFiltersForField(expression, field) {\n var filters;\n var found = false;\n if (expression.filters) {\n filters = $.grep(expression.filters, function (filter) {\n found = removeFiltersForField(filter, field);\n if (filter.filters) {\n return filter.filters.length;\n } else {\n return filter.field != field;\n }\n });\n if (!found && expression.filters.length !== filters.length) {\n found = true;\n }\n expression.filters = filters;\n }\n return found;\n }\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.calendar', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'calendar',\n name: 'Calendar',\n category: 'web',\n description: 'The Calendar widget renders a graphical calendar that supports navigation and selection.',\n depends: ['core']\n };\n (function ($, undefined) {\n var kendo = window.kendo, support = kendo.support, ui = kendo.ui, Widget = ui.Widget, keys = kendo.keys, parse = kendo.parseDate, adjustDST = kendo.date.adjustDST, getDate = kendo.date.getDate, weekInYear = kendo.date.weekInYear, extractFormat = kendo._extractFormat, template = kendo.template, getCulture = kendo.getCulture, transitions = kendo.support.transitions, transitionOrigin = transitions ? transitions.css + 'transform-origin' : '', cellTemplate = template('#=data.value#', { useWithBlock: false }), emptyCellTemplate = template(' ', { useWithBlock: false }), weekNumberTemplate = template('#= data.weekNumber #', { useWithBlock: false }), browser = kendo.support.browser, isIE8 = browser.msie && browser.version < 9, outerHeight = kendo._outerHeight, outerWidth = kendo._outerWidth, ns = '.kendoCalendar', CLICK = 'click' + ns, KEYDOWN_NS = 'keydown' + ns, ID = 'id', MIN = 'min', LEFT = 'left', SLIDE = 'slideIn', MONTH = 'month', CENTURY = 'century', CHANGE = 'change', NAVIGATE = 'navigate', VALUE = 'value', HOVER = 'k-state-hover', DISABLED = 'k-state-disabled', FOCUSED = 'k-state-focused', OTHERMONTH = 'k-other-month', OTHERMONTHCLASS = ' class=\"' + OTHERMONTH + '\"', TODAY = 'k-nav-today', CELLSELECTOR = 'td:has(.k-link)', BLUR = 'blur' + ns, FOCUS = 'focus', FOCUS_WITH_NS = FOCUS + ns, MOUSEENTER = support.touch ? 'touchstart' : 'mouseenter', MOUSEENTER_WITH_NS = support.touch ? 'touchstart' + ns : 'mouseenter' + ns, MOUSELEAVE = support.touch ? 'touchend' + ns + ' touchmove' + ns : 'mouseleave' + ns, MS_PER_MINUTE = 60000, MS_PER_DAY = 86400000, PREVARROW = '_prevArrow', NEXTARROW = '_nextArrow', ARIA_DISABLED = 'aria-disabled', ARIA_SELECTED = 'aria-selected', ARIA_LABEL = 'aria-label', proxy = $.proxy, extend = $.extend, DATE = Date, views = {\n month: 0,\n year: 1,\n decade: 2,\n century: 3\n };\n var Calendar = Widget.extend({\n init: function (element, options) {\n var that = this, value, id;\n Widget.fn.init.call(that, element, options);\n element = that.wrapper = that.element;\n options = that.options;\n options.url = window.unescape(options.url);\n that.options.disableDates = getDisabledExpr(that.options.disableDates);\n that._templates();\n that._header();\n that._footer(that.footer);\n id = element.addClass('k-widget k-calendar ' + (options.weekNumber ? ' k-week-number' : '')).on(MOUSEENTER_WITH_NS + ' ' + MOUSELEAVE, CELLSELECTOR, mousetoggle).on(KEYDOWN_NS, 'table.k-content', proxy(that._move, that)).on(CLICK, CELLSELECTOR, function (e) {\n var link = e.currentTarget.firstChild, value = that._toDateObject(link);\n if (link.href.indexOf('#') != -1) {\n e.preventDefault();\n }\n if (that._view.name == 'month' && that.options.disableDates(value)) {\n return;\n }\n that._click($(link));\n }).on('mouseup' + ns, 'table.k-content, .k-footer', function () {\n that._focusView(that.options.focusOnNav !== false);\n }).attr(ID);\n if (id) {\n that._cellID = id + '_cell_selected';\n }\n normalize(options);\n value = parse(options.value, options.format, options.culture);\n that._index = views[options.start];\n that._current = new DATE(+restrictValue(value, options.min, options.max));\n that._addClassProxy = function () {\n that._active = true;\n if (that._cell.hasClass(DISABLED)) {\n var todayString = that._view.toDateString(getToday());\n that._cell = that._cellByDate(todayString);\n }\n that._cell.addClass(FOCUSED);\n };\n that._removeClassProxy = function () {\n that._active = false;\n that._cell.removeClass(FOCUSED);\n };\n that.value(value);\n kendo.notify(that);\n },\n options: {\n name: 'Calendar',\n value: null,\n min: new DATE(1900, 0, 1),\n max: new DATE(2099, 11, 31),\n dates: [],\n url: '',\n culture: '',\n footer: '',\n format: '',\n month: {},\n weekNumber: false,\n start: MONTH,\n depth: MONTH,\n animation: {\n horizontal: {\n effects: SLIDE,\n reverse: true,\n duration: 500,\n divisor: 2\n },\n vertical: {\n effects: 'zoomIn',\n duration: 400\n }\n },\n messages: { weekColumnHeader: '' }\n },\n events: [\n CHANGE,\n NAVIGATE\n ],\n setOptions: function (options) {\n var that = this;\n normalize(options);\n options.disableDates = getDisabledExpr(options.disableDates);\n Widget.fn.setOptions.call(that, options);\n that._templates();\n that._footer(that.footer);\n that._index = views[that.options.start];\n that.navigate();\n },\n destroy: function () {\n var that = this, today = that._today;\n that.element.off(ns);\n that._title.off(ns);\n that[PREVARROW].off(ns);\n that[NEXTARROW].off(ns);\n kendo.destroy(that._table);\n if (today) {\n kendo.destroy(today.off(ns));\n }\n Widget.fn.destroy.call(that);\n },\n current: function () {\n return this._current;\n },\n view: function () {\n return this._view;\n },\n focus: function (table) {\n table = table || this._table;\n this._bindTable(table);\n table.focus();\n },\n min: function (value) {\n return this._option(MIN, value);\n },\n max: function (value) {\n return this._option('max', value);\n },\n navigateToPast: function () {\n this._navigate(PREVARROW, -1);\n },\n navigateToFuture: function () {\n this._navigate(NEXTARROW, 1);\n },\n navigateUp: function () {\n var that = this, index = that._index;\n if (that._title.hasClass(DISABLED)) {\n return;\n }\n that.navigate(that._current, ++index);\n },\n navigateDown: function (value) {\n var that = this, index = that._index, depth = that.options.depth;\n if (!value) {\n return;\n }\n if (index === views[depth]) {\n if (!isEqualDate(that._value, that._current) || !isEqualDate(that._value, value)) {\n that.value(value);\n that.trigger(CHANGE);\n }\n return;\n }\n that.navigate(value, --index);\n },\n navigate: function (value, view) {\n view = isNaN(view) ? views[view] : view;\n var that = this, options = that.options, culture = options.culture, min = options.min, max = options.max, title = that._title, from = that._table, old = that._oldTable, selectedValue = that._value, currentValue = that._current, future = value && +value > +currentValue, vertical = view !== undefined && view !== that._index, to, currentView, compare, disabled;\n if (!value) {\n value = currentValue;\n }\n that._current = value = new DATE(+restrictValue(value, min, max));\n if (view === undefined) {\n view = that._index;\n } else {\n that._index = view;\n }\n that._view = currentView = calendar.views[view];\n compare = currentView.compare;\n disabled = view === views[CENTURY];\n title.toggleClass(DISABLED, disabled).attr(ARIA_DISABLED, disabled);\n disabled = compare(value, min) < 1;\n that[PREVARROW].toggleClass(DISABLED, disabled).attr(ARIA_DISABLED, disabled);\n disabled = compare(value, max) > -1;\n that[NEXTARROW].toggleClass(DISABLED, disabled).attr(ARIA_DISABLED, disabled);\n if (from && old && old.data('animating')) {\n old.kendoStop(true, true);\n from.kendoStop(true, true);\n }\n that._oldTable = from;\n if (!from || that._changeView) {\n title.html(currentView.title(value, min, max, culture));\n that._table = to = $(currentView.content(extend({\n min: min,\n max: max,\n date: value,\n url: options.url,\n dates: options.dates,\n format: options.format,\n culture: culture,\n disableDates: options.disableDates,\n isWeekColumnVisible: options.weekNumber,\n messages: options.messages\n }, that[currentView.name])));\n addClassToViewContainer(to, currentView.name);\n makeUnselectable(to);\n var replace = from && from.data('start') === to.data('start');\n that._animate({\n from: from,\n to: to,\n vertical: vertical,\n future: future,\n replace: replace\n });\n that.trigger(NAVIGATE);\n that._focus(value);\n }\n if (view === views[options.depth] && selectedValue && !that.options.disableDates(selectedValue)) {\n that._class('k-state-selected', selectedValue);\n }\n that._class(FOCUSED, value);\n if (!from && that._cell) {\n that._cell.removeClass(FOCUSED);\n }\n that._changeView = true;\n },\n value: function (value) {\n var that = this, view = that._view, options = that.options, old = that._view, min = options.min, max = options.max;\n if (value === undefined) {\n return that._value;\n }\n if (value === null) {\n that._current = new Date(that._current.getFullYear(), that._current.getMonth(), that._current.getDate());\n }\n value = parse(value, options.format, options.culture);\n if (value !== null) {\n value = new DATE(+value);\n if (!isInRange(value, min, max)) {\n value = null;\n }\n }\n if (value === null || !that.options.disableDates(value)) {\n that._value = value;\n } else if (that._value === undefined) {\n that._value = null;\n }\n if (old && value === null && that._cell) {\n that._cell.removeClass('k-state-selected');\n } else {\n that._changeView = !value || view && view.compare(value, that._current) !== 0;\n that.navigate(value);\n }\n },\n _move: function (e) {\n var that = this, options = that.options, key = e.keyCode, view = that._view, index = that._index, min = that.options.min, max = that.options.max, currentValue = new DATE(+that._current), isRtl = kendo.support.isRtl(that.wrapper), isDisabled = that.options.disableDates, value, prevent, method, temp;\n if (e.target === that._table[0]) {\n that._active = true;\n }\n if (e.ctrlKey) {\n if (key == keys.RIGHT && !isRtl || key == keys.LEFT && isRtl) {\n that.navigateToFuture();\n prevent = true;\n } else if (key == keys.LEFT && !isRtl || key == keys.RIGHT && isRtl) {\n that.navigateToPast();\n prevent = true;\n } else if (key == keys.UP) {\n that.navigateUp();\n prevent = true;\n } else if (key == keys.DOWN) {\n that._click($(that._cell[0].firstChild));\n prevent = true;\n }\n } else {\n if (key == keys.RIGHT && !isRtl || key == keys.LEFT && isRtl) {\n value = 1;\n prevent = true;\n } else if (key == keys.LEFT && !isRtl || key == keys.RIGHT && isRtl) {\n value = -1;\n prevent = true;\n } else if (key == keys.UP) {\n value = index === 0 ? -7 : -4;\n prevent = true;\n } else if (key == keys.DOWN) {\n value = index === 0 ? 7 : 4;\n prevent = true;\n } else if (key == keys.ENTER) {\n that._click($(that._cell[0].firstChild));\n prevent = true;\n } else if (key == keys.HOME || key == keys.END) {\n method = key == keys.HOME ? 'first' : 'last';\n temp = view[method](currentValue);\n currentValue = new DATE(temp.getFullYear(), temp.getMonth(), temp.getDate(), currentValue.getHours(), currentValue.getMinutes(), currentValue.getSeconds(), currentValue.getMilliseconds());\n prevent = true;\n } else if (key == keys.PAGEUP) {\n prevent = true;\n that.navigateToPast();\n } else if (key == keys.PAGEDOWN) {\n prevent = true;\n that.navigateToFuture();\n }\n if (value || method) {\n if (!method) {\n view.setDate(currentValue, value);\n }\n if (isDisabled(currentValue)) {\n currentValue = that._nextNavigatable(currentValue, value);\n }\n min = getDate(min);\n if (isInRange(currentValue, min, max)) {\n that._focus(restrictValue(currentValue, options.min, options.max));\n }\n }\n }\n if (prevent) {\n e.preventDefault();\n }\n return that._current;\n },\n _nextNavigatable: function (currentValue, value) {\n var that = this, disabled = true, view = that._view, min = that.options.min, max = that.options.max, isDisabled = that.options.disableDates, navigatableDate = new Date(currentValue.getTime());\n view.setDate(navigatableDate, -value);\n while (disabled) {\n view.setDate(currentValue, value);\n if (!isInRange(currentValue, min, max)) {\n currentValue = navigatableDate;\n break;\n }\n disabled = isDisabled(currentValue);\n }\n return currentValue;\n },\n _animate: function (options) {\n var that = this, from = options.from, to = options.to, active = that._active;\n if (!from) {\n to.insertAfter(that.element[0].firstChild);\n that._bindTable(to);\n } else if (from.parent().data('animating')) {\n from.off(ns);\n from.parent().kendoStop(true, true).remove();\n from.remove();\n to.insertAfter(that.element[0].firstChild);\n that._focusView(active);\n } else if (!from.is(':visible') || that.options.animation === false || options.replace) {\n to.insertAfter(from);\n from.off(ns).remove();\n that._focusView(active);\n } else {\n that[options.vertical ? '_vertical' : '_horizontal'](from, to, options.future);\n }\n },\n _horizontal: function (from, to, future) {\n var that = this, active = that._active, horizontal = that.options.animation.horizontal, effects = horizontal.effects, viewWidth = outerWidth(from);\n if (effects && effects.indexOf(SLIDE) != -1) {\n from.add(to).css({ width: viewWidth });\n from.wrap('
            ');\n that._focusView(active, from);\n from.parent().css({\n position: 'relative',\n width: viewWidth * 2,\n 'float': LEFT,\n 'margin-left': future ? 0 : -viewWidth\n });\n to[future ? 'insertAfter' : 'insertBefore'](from);\n extend(horizontal, {\n effects: SLIDE + ':' + (future ? 'right' : LEFT),\n complete: function () {\n from.off(ns).remove();\n that._oldTable = null;\n to.unwrap();\n that._focusView(active);\n }\n });\n from.parent().kendoStop(true, true).kendoAnimate(horizontal);\n }\n },\n _vertical: function (from, to) {\n var that = this, vertical = that.options.animation.vertical, effects = vertical.effects, active = that._active, cell, position;\n if (effects && effects.indexOf('zoom') != -1) {\n to.css({\n position: 'absolute',\n top: outerHeight(from.prev()),\n left: 0\n }).insertBefore(from);\n if (transitionOrigin) {\n cell = that._cellByDate(that._view.toDateString(that._current));\n position = cell.position();\n position = position.left + parseInt(cell.width() / 2, 10) + 'px' + ' ' + (position.top + parseInt(cell.height() / 2, 10) + 'px');\n to.css(transitionOrigin, position);\n }\n from.kendoStop(true, true).kendoAnimate({\n effects: 'fadeOut',\n duration: 600,\n complete: function () {\n from.off(ns).remove();\n that._oldTable = null;\n to.css({\n position: 'static',\n top: 0,\n left: 0\n });\n that._focusView(active);\n }\n });\n to.kendoStop(true, true).kendoAnimate(vertical);\n }\n },\n _cellByDate: function (value) {\n return this._table.find('td:not(.' + OTHERMONTH + ')').filter(function () {\n return $(this.firstChild).attr(kendo.attr(VALUE)) === value;\n });\n },\n _class: function (className, date) {\n var that = this, id = that._cellID, cell = that._cell, value = that._view.toDateString(date), disabledDate;\n if (cell) {\n cell.removeAttr(ARIA_SELECTED).removeAttr(ARIA_LABEL).removeAttr(ID);\n }\n if (date && that._view.name == 'month') {\n disabledDate = that.options.disableDates(date);\n }\n cell = that._table.find('td:not(.' + OTHERMONTH + ')').removeClass(className).filter(function () {\n return $(this.firstChild).attr(kendo.attr(VALUE)) === value;\n }).attr(ARIA_SELECTED, true);\n if (className === FOCUSED && !that._active && that.options.focusOnNav !== false || disabledDate) {\n className = '';\n }\n cell.addClass(className);\n if (cell[0]) {\n that._cell = cell;\n }\n if (id) {\n cell.attr(ID, id);\n that._table.removeAttr('aria-activedescendant').attr('aria-activedescendant', id);\n }\n },\n _bindTable: function (table) {\n table.on(FOCUS_WITH_NS, this._addClassProxy).on(BLUR, this._removeClassProxy);\n },\n _click: function (link) {\n var that = this, options = that.options, currentValue = new Date(+that._current), value = that._toDateObject(link);\n adjustDST(value, 0);\n if (that._view.name == 'month' && that.options.disableDates(value)) {\n value = that._value;\n }\n that._view.setDate(currentValue, value);\n that.navigateDown(restrictValue(currentValue, options.min, options.max));\n },\n _focus: function (value) {\n var that = this, view = that._view;\n if (view.compare(value, that._current) !== 0) {\n that.navigate(value);\n } else {\n that._current = value;\n that._class(FOCUSED, value);\n }\n },\n _focusView: function (active, table) {\n if (active) {\n this.focus(table);\n }\n },\n _footer: function (template) {\n var that = this, today = getToday(), element = that.element, footer = element.find('.k-footer');\n if (!template) {\n that._toggle(false);\n footer.hide();\n return;\n }\n if (!footer[0]) {\n footer = $('
            ').appendTo(element);\n }\n that._today = footer.show().find('.k-link').html(template(today)).attr('title', kendo.toString(today, 'D', that.options.culture));\n that._toggle();\n },\n _header: function () {\n var that = this, element = that.element, links;\n if (!element.find('.k-header')[0]) {\n element.html('
            ' + '' + '' + '' + '
            ');\n }\n links = element.find('.k-link').on(MOUSEENTER_WITH_NS + ' ' + MOUSELEAVE + ' ' + FOCUS_WITH_NS + ' ' + BLUR, mousetoggle).click(false);\n that._title = links.eq(1).on(CLICK, function () {\n that._active = that.options.focusOnNav !== false;\n that.navigateUp();\n });\n that[PREVARROW] = links.eq(0).on(CLICK, function () {\n that._active = that.options.focusOnNav !== false;\n that.navigateToPast();\n });\n that[NEXTARROW] = links.eq(2).on(CLICK, function () {\n that._active = that.options.focusOnNav !== false;\n that.navigateToFuture();\n });\n },\n _navigate: function (arrow, modifier) {\n var that = this, index = that._index + 1, currentValue = new DATE(+that._current);\n arrow = that[arrow];\n if (!arrow.hasClass(DISABLED)) {\n if (index > 3) {\n currentValue.setFullYear(currentValue.getFullYear() + 100 * modifier);\n } else {\n calendar.views[index].setDate(currentValue, modifier);\n }\n that.navigate(currentValue);\n }\n },\n _option: function (option, value) {\n var that = this, options = that.options, currentValue = that._value || that._current, isBigger;\n if (value === undefined) {\n return options[option];\n }\n value = parse(value, options.format, options.culture);\n if (!value) {\n return;\n }\n options[option] = new DATE(+value);\n if (option === MIN) {\n isBigger = value > currentValue;\n } else {\n isBigger = currentValue > value;\n }\n if (isBigger || isEqualMonth(currentValue, value)) {\n if (isBigger) {\n that._value = null;\n }\n that._changeView = true;\n }\n if (!that._changeView) {\n that._changeView = !!(options.month.content || options.month.empty);\n }\n that.navigate(that._value);\n that._toggle();\n },\n _toggle: function (toggle) {\n var that = this, options = that.options, isTodayDisabled = that.options.disableDates(getToday()), link = that._today;\n if (toggle === undefined) {\n toggle = isInRange(getToday(), options.min, options.max);\n }\n if (link) {\n link.off(CLICK);\n if (toggle && !isTodayDisabled) {\n link.addClass(TODAY).removeClass(DISABLED).on(CLICK, proxy(that._todayClick, that));\n } else {\n link.removeClass(TODAY).addClass(DISABLED).on(CLICK, prevent);\n }\n }\n },\n _todayClick: function (e) {\n var that = this, depth = views[that.options.depth], disabled = that.options.disableDates, today = getToday();\n e.preventDefault();\n if (disabled(today)) {\n return;\n }\n if (that._view.compare(that._current, today) === 0 && that._index == depth) {\n that._changeView = false;\n }\n that._value = today;\n that.navigate(today, depth);\n that.trigger(CHANGE);\n },\n _toDateObject: function (link) {\n var value = $(link).attr(kendo.attr(VALUE)).split('/');\n value = new DATE(value[0], value[1], value[2]);\n return value;\n },\n _templates: function () {\n var that = this, options = that.options, footer = options.footer, month = options.month, content = month.content, weekNumber = month.weekNumber, empty = month.empty;\n that.month = {\n content: template('' + (content || '#=data.value#') + '', { useWithBlock: !!content }),\n empty: template('' + (empty || ' ') + '', { useWithBlock: !!empty }),\n weekNumber: template('' + (weekNumber || '#= data.weekNumber #') + '', { useWithBlock: !!weekNumber })\n };\n that.footer = footer !== false ? template(footer || '#= kendo.toString(data,\"D\",\"' + options.culture + '\") #', { useWithBlock: false }) : null;\n }\n });\n ui.plugin(Calendar);\n var calendar = {\n firstDayOfMonth: function (date) {\n return new DATE(date.getFullYear(), date.getMonth(), 1);\n },\n firstVisibleDay: function (date, calendarInfo) {\n calendarInfo = calendarInfo || kendo.culture().calendar;\n var firstDay = calendarInfo.firstDay, firstVisibleDay = new DATE(date.getFullYear(), date.getMonth(), 0, date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds());\n while (firstVisibleDay.getDay() != firstDay) {\n calendar.setTime(firstVisibleDay, -1 * MS_PER_DAY);\n }\n return firstVisibleDay;\n },\n setTime: function (date, time) {\n var tzOffsetBefore = date.getTimezoneOffset(), resultDATE = new DATE(date.getTime() + time), tzOffsetDiff = resultDATE.getTimezoneOffset() - tzOffsetBefore;\n date.setTime(resultDATE.getTime() + tzOffsetDiff * MS_PER_MINUTE);\n },\n views: [\n {\n name: MONTH,\n title: function (date, min, max, culture) {\n return getCalendarInfo(culture).months.names[date.getMonth()] + ' ' + date.getFullYear();\n },\n content: function (options) {\n var that = this, idx = 0, min = options.min, max = options.max, date = options.date, dates = options.dates, format = options.format, culture = options.culture, navigateUrl = options.url, isWeekColumnVisible = options.isWeekColumnVisible, hasUrl = navigateUrl && dates[0], currentCalendar = getCalendarInfo(culture), firstDayIdx = currentCalendar.firstDay, days = currentCalendar.days, names = shiftArray(days.names, firstDayIdx), shortNames = shiftArray(days.namesShort, firstDayIdx), start = calendar.firstVisibleDay(date, currentCalendar), firstDayOfMonth = that.first(date), lastDayOfMonth = that.last(date), toDateString = that.toDateString, today = new DATE(), html = '';\n if (isWeekColumnVisible) {\n html += '';\n }\n for (; idx < 7; idx++) {\n html += '';\n }\n today = new DATE(today.getFullYear(), today.getMonth(), today.getDate());\n adjustDST(today, 0);\n today = +today;\n return view({\n cells: 42,\n perRow: 7,\n html: html += '',\n start: start,\n isWeekColumnVisible: isWeekColumnVisible,\n weekNumber: options.weekNumber,\n min: new DATE(min.getFullYear(), min.getMonth(), min.getDate()),\n max: new DATE(max.getFullYear(), max.getMonth(), max.getDate()),\n content: options.content,\n empty: options.empty,\n setter: that.setDate,\n disableDates: options.disableDates,\n build: function (date, idx, disableDates) {\n var cssClass = [], day = date.getDay(), linkClass = '', url = '#';\n if (date < firstDayOfMonth || date > lastDayOfMonth) {\n cssClass.push(OTHERMONTH);\n }\n if (disableDates(date)) {\n cssClass.push(DISABLED);\n }\n if (+date === today) {\n cssClass.push('k-today');\n }\n if (day === 0 || day === 6) {\n cssClass.push('k-weekend');\n }\n if (hasUrl && inArray(+date, dates)) {\n url = navigateUrl.replace('{0}', kendo.toString(date, format, culture));\n linkClass = ' k-action-link';\n }\n return {\n date: date,\n dates: dates,\n ns: kendo.ns,\n title: kendo.toString(date, 'D', culture),\n value: date.getDate(),\n dateString: toDateString(date),\n cssClass: cssClass[0] ? ' class=\"' + cssClass.join(' ') + '\"' : '',\n linkClass: linkClass,\n url: url\n };\n },\n weekNumberBuild: function (date) {\n return {\n weekNumber: weekInYear(date, kendo.culture().calendar.firstDay),\n currentDate: date\n };\n }\n });\n },\n first: function (date) {\n return calendar.firstDayOfMonth(date);\n },\n last: function (date) {\n var last = new DATE(date.getFullYear(), date.getMonth() + 1, 0), first = calendar.firstDayOfMonth(date), timeOffset = Math.abs(last.getTimezoneOffset() - first.getTimezoneOffset());\n if (timeOffset) {\n last.setHours(first.getHours() + timeOffset / 60);\n }\n return last;\n },\n compare: function (date1, date2) {\n var result, month1 = date1.getMonth(), year1 = date1.getFullYear(), month2 = date2.getMonth(), year2 = date2.getFullYear();\n if (year1 > year2) {\n result = 1;\n } else if (year1 < year2) {\n result = -1;\n } else {\n result = month1 == month2 ? 0 : month1 > month2 ? 1 : -1;\n }\n return result;\n },\n setDate: function (date, value) {\n var hours = date.getHours();\n if (value instanceof DATE) {\n date.setFullYear(value.getFullYear(), value.getMonth(), value.getDate());\n } else {\n calendar.setTime(date, value * MS_PER_DAY);\n }\n adjustDST(date, hours);\n },\n toDateString: function (date) {\n return date.getFullYear() + '/' + date.getMonth() + '/' + date.getDate();\n }\n },\n {\n name: 'year',\n title: function (date) {\n return date.getFullYear();\n },\n content: function (options) {\n var namesAbbr = getCalendarInfo(options.culture).months.namesAbbr, toDateString = this.toDateString, min = options.min, max = options.max;\n return view({\n min: new DATE(min.getFullYear(), min.getMonth(), 1),\n max: new DATE(max.getFullYear(), max.getMonth(), 1),\n start: new DATE(options.date.getFullYear(), 0, 1),\n setter: this.setDate,\n build: function (date) {\n return {\n value: namesAbbr[date.getMonth()],\n ns: kendo.ns,\n dateString: toDateString(date),\n cssClass: ''\n };\n }\n });\n },\n first: function (date) {\n return new DATE(date.getFullYear(), 0, date.getDate());\n },\n last: function (date) {\n return new DATE(date.getFullYear(), 11, date.getDate());\n },\n compare: function (date1, date2) {\n return compare(date1, date2);\n },\n setDate: function (date, value) {\n var month, hours = date.getHours();\n if (value instanceof DATE) {\n month = value.getMonth();\n date.setFullYear(value.getFullYear(), month, date.getDate());\n if (month !== date.getMonth()) {\n date.setDate(0);\n }\n } else {\n month = date.getMonth() + value;\n date.setMonth(month);\n if (month > 11) {\n month -= 12;\n }\n if (month > 0 && date.getMonth() != month) {\n date.setDate(0);\n }\n }\n adjustDST(date, hours);\n },\n toDateString: function (date) {\n return date.getFullYear() + '/' + date.getMonth() + '/1';\n }\n },\n {\n name: 'decade',\n title: function (date, min, max) {\n return title(date, min, max, 10);\n },\n content: function (options) {\n var year = options.date.getFullYear(), toDateString = this.toDateString;\n return view({\n start: new DATE(year - year % 10 - 1, 0, 1),\n min: new DATE(options.min.getFullYear(), 0, 1),\n max: new DATE(options.max.getFullYear(), 0, 1),\n setter: this.setDate,\n build: function (date, idx) {\n return {\n value: date.getFullYear(),\n ns: kendo.ns,\n dateString: toDateString(date),\n cssClass: idx === 0 || idx == 11 ? OTHERMONTHCLASS : ''\n };\n }\n });\n },\n first: function (date) {\n var year = date.getFullYear();\n return new DATE(year - year % 10, date.getMonth(), date.getDate());\n },\n last: function (date) {\n var year = date.getFullYear();\n return new DATE(year - year % 10 + 9, date.getMonth(), date.getDate());\n },\n compare: function (date1, date2) {\n return compare(date1, date2, 10);\n },\n setDate: function (date, value) {\n setDate(date, value, 1);\n },\n toDateString: function (date) {\n return date.getFullYear() + '/0/1';\n }\n },\n {\n name: CENTURY,\n title: function (date, min, max) {\n return title(date, min, max, 100);\n },\n content: function (options) {\n var year = options.date.getFullYear(), min = options.min.getFullYear(), max = options.max.getFullYear(), toDateString = this.toDateString, minYear = min, maxYear = max;\n minYear = minYear - minYear % 10;\n maxYear = maxYear - maxYear % 10;\n if (maxYear - minYear < 10) {\n maxYear = minYear + 9;\n }\n return view({\n start: new DATE(year - year % 100 - 10, 0, 1),\n min: new DATE(minYear, 0, 1),\n max: new DATE(maxYear, 0, 1),\n setter: this.setDate,\n build: function (date, idx) {\n var start = date.getFullYear(), end = start + 9;\n if (start < min) {\n start = min;\n }\n if (end > max) {\n end = max;\n }\n return {\n ns: kendo.ns,\n value: start + ' - ' + end,\n dateString: toDateString(date),\n cssClass: idx === 0 || idx == 11 ? OTHERMONTHCLASS : ''\n };\n }\n });\n },\n first: function (date) {\n var year = date.getFullYear();\n return new DATE(year - year % 100, date.getMonth(), date.getDate());\n },\n last: function (date) {\n var year = date.getFullYear();\n return new DATE(year - year % 100 + 99, date.getMonth(), date.getDate());\n },\n compare: function (date1, date2) {\n return compare(date1, date2, 100);\n },\n setDate: function (date, value) {\n setDate(date, value, 10);\n },\n toDateString: function (date) {\n var year = date.getFullYear();\n return year - year % 10 + '/0/1';\n }\n }\n ]\n };\n function title(date, min, max, modular) {\n var start = date.getFullYear(), minYear = min.getFullYear(), maxYear = max.getFullYear(), end;\n start = start - start % modular;\n end = start + (modular - 1);\n if (start < minYear) {\n start = minYear;\n }\n if (end > maxYear) {\n end = maxYear;\n }\n return start + '-' + end;\n }\n function view(options) {\n var idx = 0, data, min = options.min, max = options.max, start = options.start, setter = options.setter, build = options.build, weekNumberBuild = options.weekNumberBuild, length = options.cells || 12, isWeekColumnVisible = options.isWeekColumnVisible, cellsPerRow = options.perRow || 4, weekNumber = options.weekNumber || weekNumberTemplate, content = options.content || cellTemplate, empty = options.empty || emptyCellTemplate, html = options.html || '
            ' + options.messages.weekColumnHeader + '' + shortNames[idx] + '
            ';\n if (isWeekColumnVisible) {\n html += weekNumber(weekNumberBuild(start));\n }\n for (; idx < length; idx++) {\n if (idx > 0 && idx % cellsPerRow === 0) {\n html += '';\n if (isWeekColumnVisible) {\n html += weekNumber(weekNumberBuild(start));\n }\n }\n start = new DATE(start.getFullYear(), start.getMonth(), start.getDate(), 0, 0, 0);\n adjustDST(start, 0);\n data = build(start, idx, options.disableDates);\n html += isInRange(start, min, max) ? content(data) : empty(data);\n setter(start, 1);\n }\n return html + '
            ';\n }\n function compare(date1, date2, modifier) {\n var year1 = date1.getFullYear(), start = date2.getFullYear(), end = start, result = 0;\n if (modifier) {\n start = start - start % modifier;\n end = start - start % modifier + modifier - 1;\n }\n if (year1 > end) {\n result = 1;\n } else if (year1 < start) {\n result = -1;\n }\n return result;\n }\n function getToday() {\n var today = new DATE();\n return new DATE(today.getFullYear(), today.getMonth(), today.getDate());\n }\n function restrictValue(value, min, max) {\n var today = getToday();\n if (value) {\n today = new DATE(+value);\n }\n if (min > today) {\n today = new DATE(+min);\n } else if (max < today) {\n today = new DATE(+max);\n }\n return today;\n }\n function isInRange(date, min, max) {\n return +date >= +min && +date <= +max;\n }\n function shiftArray(array, idx) {\n return array.slice(idx).concat(array.slice(0, idx));\n }\n function setDate(date, value, multiplier) {\n value = value instanceof DATE ? value.getFullYear() : date.getFullYear() + multiplier * value;\n date.setFullYear(value);\n }\n function mousetoggle(e) {\n var disabled = $(this).hasClass('k-state-disabled');\n if (!disabled) {\n $(this).toggleClass(HOVER, MOUSEENTER.indexOf(e.type) > -1 || e.type == FOCUS);\n }\n }\n function prevent(e) {\n e.preventDefault();\n }\n function getCalendarInfo(culture) {\n return getCulture(culture).calendars.standard;\n }\n function normalize(options) {\n var start = views[options.start], depth = views[options.depth], culture = getCulture(options.culture);\n options.format = extractFormat(options.format || culture.calendars.standard.patterns.d);\n if (isNaN(start)) {\n start = 0;\n options.start = MONTH;\n }\n if (depth === undefined || depth > start) {\n options.depth = MONTH;\n }\n if (options.dates === null) {\n options.dates = [];\n }\n }\n function makeUnselectable(element) {\n if (isIE8) {\n element.find('*').attr('unselectable', 'on');\n }\n }\n function addClassToViewContainer(element, currentView) {\n element.addClass('k-' + currentView);\n }\n function inArray(date, dates) {\n for (var i = 0, length = dates.length; i < length; i++) {\n if (date === +dates[i]) {\n return true;\n }\n }\n return false;\n }\n function isEqualDatePart(value1, value2) {\n if (value1) {\n return value1.getFullYear() === value2.getFullYear() && value1.getMonth() === value2.getMonth() && value1.getDate() === value2.getDate();\n }\n return false;\n }\n function isEqualMonth(value1, value2) {\n if (value1) {\n return value1.getFullYear() === value2.getFullYear() && value1.getMonth() === value2.getMonth();\n }\n return false;\n }\n function getDisabledExpr(option) {\n if (kendo.isFunction(option)) {\n return option;\n }\n if ($.isArray(option)) {\n return createDisabledExpr(option);\n }\n return $.noop;\n }\n function convertDatesArray(dates) {\n var result = [];\n for (var i = 0; i < dates.length; i++) {\n result.push(dates[i].setHours(0, 0, 0, 0));\n }\n return result;\n }\n function createDisabledExpr(dates) {\n var body, callback, disabledDates = [], days = [\n 'su',\n 'mo',\n 'tu',\n 'we',\n 'th',\n 'fr',\n 'sa'\n ], searchExpression = 'if (found) {' + ' return true ' + '} else {' + 'return false' + '}';\n if (dates[0] instanceof DATE) {\n disabledDates = convertDatesArray(dates);\n body = 'var found = date && $.inArray(date.setHours(0, 0, 0, 0),[' + disabledDates + ']) > -1;' + searchExpression;\n } else {\n for (var i = 0; i < dates.length; i++) {\n var day = dates[i].slice(0, 2).toLowerCase();\n var index = $.inArray(day, days);\n if (index > -1) {\n disabledDates.push(index);\n }\n }\n body = 'var found = date && $.inArray(date.getDay(),[' + disabledDates + ']) > -1;' + searchExpression;\n }\n callback = new Function('date', body);\n return callback;\n }\n function isEqualDate(oldValue, newValue) {\n if (oldValue instanceof Date && newValue instanceof Date) {\n oldValue = oldValue.getTime();\n newValue = newValue.getTime();\n }\n return oldValue === newValue;\n }\n calendar.isEqualDatePart = isEqualDatePart;\n calendar.isEqualDate = isEqualDate;\n calendar.makeUnselectable = makeUnselectable;\n calendar.restrictValue = restrictValue;\n calendar.isInRange = isInRange;\n calendar.addClassToViewContainer = addClassToViewContainer;\n calendar.normalize = normalize;\n calendar.viewsEnum = views;\n calendar.disabled = getDisabledExpr;\n kendo.calendar = calendar;\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.dateinput', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'dateinput',\n name: 'DateInput',\n category: 'web',\n description: 'The DateInput widget allows to edit date by typing.',\n depends: ['core']\n };\n (function ($, undefined) {\n var global = window;\n var kendo = global.kendo;\n var caret = kendo.caret;\n var ui = kendo.ui;\n var Widget = ui.Widget;\n var keys = kendo.keys;\n var ns = '.kendoDateInput';\n var proxy = $.proxy;\n var objectToString = {}.toString;\n var INPUT_EVENT_NAME = (kendo.support.propertyChangeEvent ? 'propertychange.kendoDateInput input' : 'input') + ns;\n var STATEDISABLED = 'k-state-disabled';\n var STATEDEFAULT = 'k-state-default';\n var STATEINVALID = 'k-state-invalid';\n var DISABLED = 'disabled';\n var READONLY = 'readonly';\n var CHANGE = 'change';\n var knownSymbols = 'dMyHhmftsz';\n var DateInput = Widget.extend({\n init: function (element, options) {\n var that = this;\n Widget.fn.init.call(that, element, options);\n element = that.element;\n options = that.options;\n options.format = kendo._extractFormat(options.format || kendo.getCulture(options.culture).calendars.standard.patterns.d);\n options.min = kendo.parseDate(element.attr('min')) || kendo.parseDate(options.min);\n options.max = kendo.parseDate(element.attr('max')) || kendo.parseDate(options.max);\n var insidePicker = (element.parent().attr('class') || '').indexOf('k-picker-wrap') >= 0;\n if (insidePicker) {\n that.wrapper = element.parent();\n } else {\n that.wrapper = element.wrap('').parent();\n that.wrapper.addClass(element[0].className);\n that.wrapper[0].style.cssText = element[0].style.cssText;\n element.css({\n width: '100%',\n height: element[0].style.height\n });\n }\n $('').insertAfter(element);\n that._form();\n that.element.addClass(insidePicker ? ' ' : 'k-textbox').attr('autocomplete', 'off').on('focusout' + ns, function () {\n that._change();\n });\n try {\n element[0].setAttribute('type', 'text');\n } catch (e) {\n element[0].type = 'text';\n }\n var disabled = element.is('[disabled]') || $(that.element).parents('fieldset').is(':disabled');\n if (disabled) {\n that.enable(false);\n } else {\n that.readonly(element.is('[readonly]'));\n }\n that.value(that.options.value || element.val());\n kendo.notify(that);\n },\n options: {\n name: 'DateInput',\n culture: '',\n value: '',\n format: '',\n min: new Date(1900, 0, 1),\n max: new Date(2099, 11, 31),\n messages: {\n 'year': 'year',\n 'month': 'month',\n 'day': 'day',\n 'weekday': 'day of the week',\n 'hour': 'hours',\n 'minute': 'minutes',\n 'second': 'seconds',\n 'dayperiod': 'AM/PM'\n }\n },\n events: [CHANGE],\n min: function (value) {\n if (value !== undefined) {\n this.options.min = value;\n } else {\n return this.options.min;\n }\n },\n max: function (value) {\n if (value !== undefined) {\n this.options.max = value;\n } else {\n return this.options.max;\n }\n },\n setOptions: function (options) {\n var that = this;\n Widget.fn.setOptions.call(that, options);\n this._unbindInput();\n this._bindInput();\n this._updateElementValue();\n },\n destroy: function () {\n var that = this;\n that.element.off(ns);\n if (that._formElement) {\n that._formElement.off('reset', that._resetHandler);\n }\n Widget.fn.destroy.call(that);\n },\n value: function (value) {\n if (value === undefined) {\n return this._dateTime.getDateObject();\n }\n if (value === null) {\n value = '';\n }\n if (objectToString.call(value) !== '[object Date]') {\n value = kendo.parseDate(value, this.options.format, this.options.culture);\n }\n if (value && !value.getTime()) {\n value = null;\n }\n this._dateTime = new customDateTime(value, this.options.format, this.options.culture, this.options.messages);\n this._updateElementValue();\n this._oldValue = value;\n },\n _updateElementValue: function () {\n var stringAndFromat = this._dateTime.toPair(this.options.format, this.options.culture, this.options.messages);\n this.element.val(stringAndFromat[0]);\n this._oldText = stringAndFromat[0];\n this._format = stringAndFromat[1];\n },\n readonly: function (readonly) {\n this._editable({\n readonly: readonly === undefined ? true : readonly,\n disable: false\n });\n },\n enable: function (enable) {\n this._editable({\n readonly: false,\n disable: !(enable = enable === undefined ? true : enable)\n });\n },\n _bindInput: function () {\n var that = this;\n that.element.on('paste' + ns, proxy(that._paste, that)).on('keydown' + ns, proxy(that._keydown, that)).on(INPUT_EVENT_NAME, proxy(that._input, that)).on('mouseup' + ns, proxy(that._mouseUp, that)).on('DOMMouseScroll' + ns + ' mousewheel' + ns, proxy(that._scroll, that));\n },\n _unbindInput: function () {\n this.element.off('keydown' + ns).off('paste' + ns).off(INPUT_EVENT_NAME).off('mouseup' + ns).off('DOMMouseScroll' + ns + ' mousewheel' + ns);\n },\n _editable: function (options) {\n var that = this;\n var element = that.element;\n var disable = options.disable;\n var readonly = options.readonly;\n var wrapper = that.wrapper;\n that._unbindInput();\n if (!readonly && !disable) {\n wrapper.addClass(STATEDEFAULT).removeClass(STATEDISABLED);\n element.removeAttr(DISABLED).removeAttr(READONLY);\n that._bindInput();\n } else {\n wrapper.addClass(STATEDISABLED).removeClass(STATEDEFAULT);\n element.attr(DISABLED, disable).attr(READONLY, readonly);\n }\n },\n _change: function () {\n var that = this;\n var oldValue = that._oldValue;\n var value = that.value();\n if (value && that.min() && value < that.min()) {\n that.value(that.min());\n value = that.value();\n }\n if (value && that.max() && value > that.max()) {\n that.value(that.max());\n value = that.value();\n }\n if (oldValue && value && value.getTime() !== oldValue.getTime() || oldValue && !value || !oldValue && value) {\n that._oldValue = value;\n that.trigger(CHANGE);\n that.element.trigger(CHANGE);\n }\n },\n _input: function () {\n var that = this;\n var element = that.element[0];\n var blinkInvalid = false;\n if (kendo._activeElement() !== element) {\n return;\n }\n var diff = approximateStringMatching(this._oldText, this._format, this.element[0].value, caret(this.element[0])[0]);\n var navigationOnly = diff.length === 1 && diff[0][1] === ' ';\n if (!navigationOnly) {\n for (var i = 0; i < diff.length; i++) {\n var valid = this._dateTime.parsePart(diff[i][0], diff[i][1]);\n blinkInvalid = blinkInvalid || !valid;\n }\n }\n this._updateElementValue();\n if (diff.length && diff[0][0] !== ' ') {\n this._selectSegment(diff[0][0]);\n if (!navigationOnly) {\n var difSym = diff[0][0];\n setTimeout(function () {\n that._selectSegment(difSym);\n });\n }\n }\n if (navigationOnly) {\n var newEvent = {\n keyCode: 39,\n preventDefault: function () {\n }\n };\n this._keydown(newEvent);\n }\n if (blinkInvalid) {\n clearTimeout(that._blinkInvalidTimeout);\n var stateInvalid = STATEINVALID;\n that.wrapper.addClass(STATEINVALID);\n that._blinkInvalidTimeout = setTimeout(function () {\n that.wrapper.removeClass(stateInvalid);\n }, 100);\n }\n },\n _mouseUp: function () {\n var selection = caret(this.element[0]);\n if (selection[0] === selection[1]) {\n this._selectNearestSegment();\n }\n },\n _scroll: function (e) {\n if (kendo._activeElement() !== this.element[0] || this.element.is('[readonly]')) {\n return;\n }\n e = window.event || e;\n var newEvent = {\n keyCode: 37,\n preventDefault: function () {\n }\n };\n if (e.shiftKey) {\n newEvent.keyCode = (e.wheelDelta || -e.detail) > 0 ? 37 : 39;\n } else {\n newEvent.keyCode = (e.wheelDelta || -e.detail) > 0 ? 38 : 40;\n }\n this._keydown(newEvent);\n e.returnValue = false;\n if (e.preventDefault) {\n e.preventDefault();\n }\n if (e.stopPropagation) {\n e.stopPropagation();\n }\n },\n _form: function () {\n var that = this;\n var element = that.element;\n var formId = element.attr('form');\n var form = formId ? $('#' + formId) : element.closest('form');\n if (form[0]) {\n that._resetHandler = function () {\n setTimeout(function () {\n that.value(element[0].value);\n });\n };\n that._formElement = form.on('reset', that._resetHandler);\n }\n },\n _paste: function (e) {\n e.preventDefault();\n },\n _keydown: function (e) {\n var key = e.keyCode;\n var selection;\n if (key == 37 || key == 39) {\n e.preventDefault();\n selection = caret(this.element[0]);\n if (selection[0] != selection[1]) {\n this._selectNearestSegment();\n }\n var dir = key == 37 ? -1 : 1;\n var index = dir == -1 ? caret(this.element[0])[0] - 1 : caret(this.element[0])[1] + 1;\n while (index >= 0 && index < this._format.length) {\n if (knownSymbols.indexOf(this._format[index]) >= 0) {\n this._selectSegment(this._format[index]);\n break;\n }\n index += dir;\n }\n }\n if (key == 38 || key == 40) {\n e.preventDefault();\n selection = caret(this.element[0]);\n var symbol = this._format[selection[0]];\n if (knownSymbols.indexOf(symbol) >= 0) {\n this._dateTime.modifyPart(symbol, key == 38 ? 1 : -1);\n this._updateElementValue();\n this._selectSegment(symbol);\n }\n }\n if (kendo.support.browser.msie && kendo.support.browser.version < 10) {\n var keycode = e.keyCode ? e.keyCode : e.which;\n if (keycode === 8 || keycode === 46) {\n var that = this;\n setTimeout(function () {\n that._input();\n }, 0);\n }\n }\n if (key === keys.ENTER) {\n this._change();\n }\n },\n _selectNearestSegment: function () {\n var selection = caret(this.element[0]);\n var start = selection[0];\n for (var i = start, j = start - 1; i < this._format.length || j >= 0; i++, j--) {\n if (i < this._format.length && knownSymbols.indexOf(this._format[i]) !== -1) {\n this._selectSegment(this._format[i]);\n return;\n }\n if (j >= 0 && knownSymbols.indexOf(this._format[j]) !== -1) {\n this._selectSegment(this._format[j]);\n return;\n }\n }\n },\n _selectSegment: function (symbol) {\n var begin = -1, end = 0;\n for (var i = 0; i < this._format.length; i++) {\n if (this._format[i] === symbol) {\n end = i + 1;\n if (begin === -1) {\n begin = i;\n }\n }\n }\n if (begin < 0) {\n begin = 0;\n }\n caret(this.element, begin, end);\n }\n });\n ui.plugin(DateInput);\n var customDateTime = function (initDate, initFormat, initCulture, initMessages) {\n var value = null;\n var year = true, month = true, date = true, hours = true, minutes = true, seconds = true, milliseconds = true;\n var typedMonthPart = '';\n var typedDayPeriodPart = '';\n var placeholders = {};\n var zeros = [\n '',\n '0',\n '00',\n '000',\n '0000'\n ];\n function pad(number, digits, end) {\n number = number + '';\n digits = digits || 2;\n end = digits - number.length;\n if (end) {\n return zeros[digits].substring(0, end) + number;\n }\n return number;\n }\n var dateFormatRegExp = /dddd|ddd|dd|d|MMMM|MMM|MM|M|yyyy|yy|HH|H|hh|h|mm|m|fff|ff|f|tt|ss|s|zzz|zz|z|\"[^\"]*\"|'[^']*'/g;\n var months = null, calendar = null, days = null, returnsFormat = false;\n var matcher = function (match) {\n var mins, sign;\n var result;\n switch (match) {\n case 'd':\n result = date ? value.getDate() : placeholders.day;\n break;\n case 'dd':\n result = date ? pad(value.getDate()) : placeholders.day;\n break;\n case 'ddd':\n result = date && month && year ? days.namesAbbr[value.getDay()] : placeholders.weekday;\n break;\n case 'dddd':\n result = date && month && year ? days.names[value.getDay()] : placeholders.weekday;\n break;\n case 'M':\n result = month ? value.getMonth() + 1 : placeholders.month;\n break;\n case 'MM':\n result = month ? pad(value.getMonth() + 1) : placeholders.month;\n break;\n case 'MMM':\n result = month ? months.namesAbbr[value.getMonth()] : placeholders.month;\n break;\n case 'MMMM':\n result = month ? months.names[value.getMonth()] : placeholders.month;\n break;\n case 'yy':\n result = year ? pad(value.getFullYear() % 100) : placeholders.year;\n break;\n case 'yyyy':\n result = year ? pad(value.getFullYear(), 4) : placeholders.year;\n break;\n case 'h':\n result = hours ? value.getHours() % 12 || 12 : placeholders.hour;\n break;\n case 'hh':\n result = hours ? pad(value.getHours() % 12 || 12) : placeholders.hour;\n break;\n case 'H':\n result = hours ? value.getHours() : placeholders.hour;\n break;\n case 'HH':\n result = hours ? pad(value.getHours()) : placeholders.hour;\n break;\n case 'm':\n result = minutes ? value.getMinutes() : placeholders.minute;\n break;\n case 'mm':\n result = minutes ? pad(value.getMinutes()) : placeholders.minute;\n break;\n case 's':\n result = seconds ? value.getSeconds() : placeholders.second;\n break;\n case 'ss':\n result = seconds ? pad(value.getSeconds()) : placeholders.second;\n break;\n case 'f':\n result = milliseconds ? Math.floor(value.getMilliseconds() / 100) : milliseconds;\n break;\n case 'ff':\n result = value.getMilliseconds();\n if (result > 99) {\n result = Math.floor(result / 10);\n }\n result = milliseconds ? pad(result) : match;\n break;\n case 'fff':\n result = milliseconds ? pad(value.getMilliseconds(), 3) : match;\n break;\n case 'tt':\n result = hours ? value.getHours() < 12 ? calendar.AM[0] : calendar.PM[0] : placeholders.dayperiod;\n break;\n case 'zzz':\n mins = value.getTimezoneOffset();\n sign = mins < 0;\n result = Math.abs(mins / 60).toString().split('.')[0];\n mins = Math.abs(mins) - result * 60;\n result = (sign ? '+' : '-') + pad(result);\n result += ':' + pad(mins);\n break;\n case 'z':\n case 'zz':\n result = value.getTimezoneOffset() / 60;\n sign = result < 0;\n result = Math.abs(result).toString().split('.')[0];\n result = (sign ? '+' : '-') + (match === 'zz' ? pad(result) : result);\n break;\n }\n result = result !== undefined ? result : match.slice(1, match.length - 1);\n if (returnsFormat) {\n result = '' + result;\n var formatResult = '';\n if (match == 'ddd') {\n match = 'EEE';\n }\n if (match == 'dddd') {\n match = 'EEEE';\n }\n for (var i = 0; i < result.length; i++) {\n formatResult += match[0];\n }\n return formatResult;\n } else {\n return result;\n }\n };\n function generateMatcher(retFormat) {\n returnsFormat = retFormat;\n return matcher;\n }\n function setExisting(symbol, val) {\n switch (symbol) {\n case 'y':\n year = val;\n break;\n case 'M':\n month = val;\n if (!val) {\n value.setMonth(0);\n typedMonthPart = '';\n }\n break;\n case 'd':\n date = val;\n break;\n case 'H':\n case 'h':\n hours = val;\n if (!val) {\n typedDayPeriodPart = '';\n }\n break;\n case 'm':\n minutes = val;\n break;\n case 's':\n seconds = val;\n break;\n default:\n return;\n }\n }\n this.setValue = function (val) {\n date = val;\n };\n this.getValue = function () {\n return date;\n };\n this.modifyPart = function (symbol, offset) {\n var newValue = new Date(value && value.getTime ? value.getTime() : value);\n switch (symbol) {\n case 'y':\n newValue.setFullYear(newValue.getFullYear() + offset);\n break;\n case 'M':\n var newMonth = newValue.getMonth() + offset;\n newValue.setMonth(newMonth);\n if (newValue.getMonth() % 12 !== (newMonth + 12) % 12) {\n newValue.setDate(1);\n newValue.setMonth(newMonth);\n }\n break;\n case 'd':\n case 'E':\n newValue.setDate(newValue.getDate() + offset);\n break;\n case 'H':\n case 'h':\n newValue.setHours(newValue.getHours() + offset);\n break;\n case 'm':\n newValue.setMinutes(newValue.getMinutes() + offset);\n break;\n case 's':\n newValue.setSeconds(newValue.getSeconds() + offset);\n break;\n case 't':\n newValue.setHours((newValue.getHours() + 12) % 24);\n break;\n default:\n break;\n }\n if (newValue.getFullYear() > 0) {\n setExisting(symbol, true);\n value = newValue;\n }\n };\n this.parsePart = function (symbol, currentChar) {\n if (!currentChar) {\n setExisting(symbol, false);\n return true;\n }\n var newValue = new Date(value && value.getTime ? value.getTime() : value);\n var newHours;\n switch (symbol) {\n case 'd':\n var newDate = (date ? newValue.getDate() * 10 : 0) + parseInt(currentChar, 10);\n if (isNaN(newDate)) {\n return;\n }\n while (newDate > 31) {\n newDate = parseInt(newDate.toString().slice(1), 10);\n }\n if (newDate < 1) {\n date = false;\n } else {\n newValue.setDate(newDate);\n if (newValue.getMonth() !== value.getMonth()) {\n return;\n }\n date = true;\n }\n break;\n case 'M':\n var newMonth = (month ? (newValue.getMonth() + 1) * 10 : 0) + parseInt(currentChar, 10);\n if (!isNaN(newMonth)) {\n while (newMonth > 12) {\n newMonth = parseInt(newMonth.toString().slice(1), 10);\n }\n if (newMonth < 1) {\n month = false;\n } else {\n newValue.setMonth(newMonth - 1);\n if (newValue.getMonth() !== newMonth - 1) {\n newValue.setDate(1);\n newValue.setMonth(newMonth - 1);\n }\n month = true;\n }\n } else {\n var monthNames = calendar.months.names;\n typedMonthPart += currentChar.toLowerCase();\n while (typedMonthPart.length > 0) {\n for (var i = 0; i < monthNames.length; i++) {\n if (monthNames[i].toLowerCase().indexOf(typedMonthPart) === 0) {\n newValue.setMonth(i);\n month = true;\n value = newValue;\n return true;\n }\n }\n typedMonthPart = typedMonthPart.substring(1, typedMonthPart.length);\n }\n return false;\n }\n break;\n case 'y':\n var newYear = (year ? newValue.getFullYear() * 10 : 0) + parseInt(currentChar, 10);\n if (isNaN(newYear)) {\n return;\n }\n while (newYear > 9999) {\n newYear = parseInt(newYear.toString().slice(1), 10);\n }\n if (newYear < 1) {\n year = false;\n } else {\n newValue.setFullYear(newYear);\n year = true;\n }\n break;\n case 'h':\n newHours = (hours ? (newValue.getHours() % 12 || 12) * 10 : 0) + parseInt(currentChar, 10);\n if (isNaN(newHours)) {\n return;\n }\n while (newHours > 12) {\n newHours = parseInt(newHours.toString().slice(1), 10);\n }\n newValue.setHours(Math.floor(newValue.getHours() / 12) * 12 + newHours % 12);\n hours = true;\n break;\n case 'H':\n newHours = (hours ? newValue.getHours() * 10 : 0) + parseInt(currentChar, 10);\n if (isNaN(newHours)) {\n return;\n }\n while (newHours > 23) {\n newHours = parseInt(newHours.toString().slice(1), 10);\n }\n newValue.setHours(newHours);\n hours = true;\n break;\n case 'm':\n var newMinutes = (minutes ? newValue.getMinutes() * 10 : 0) + parseInt(currentChar, 10);\n if (isNaN(newMinutes)) {\n return;\n }\n while (newMinutes > 59) {\n newMinutes = parseInt(newMinutes.toString().slice(1), 10);\n }\n newValue.setMinutes(newMinutes);\n minutes = true;\n break;\n case 's':\n var newSeconds = (seconds ? newValue.getSeconds() * 10 : 0) + parseInt(currentChar, 10);\n if (isNaN(newSeconds)) {\n return;\n }\n while (newSeconds > 59) {\n newSeconds = parseInt(newSeconds.toString().slice(1), 10);\n }\n newValue.setSeconds(newSeconds);\n seconds = true;\n break;\n case 't':\n if (hours) {\n typedDayPeriodPart += currentChar.toLowerCase();\n while (typedDayPeriodPart.length > 0) {\n if (calendar.AM[0].toLowerCase().indexOf(typedDayPeriodPart) === 0 && newValue.getHours() >= 12 || calendar.PM[0].toLowerCase().indexOf(typedDayPeriodPart) === 0 && newValue.getHours() < 12) {\n newValue.setHours((newValue.getHours() + 12) % 24);\n value = newValue;\n return true;\n }\n typedDayPeriodPart = typedDayPeriodPart.substring(1, typedDayPeriodPart.length);\n }\n return false;\n }\n break;\n default:\n break;\n }\n value = newValue;\n return true;\n };\n this.toPair = function (format, culture, messages) {\n if (!format) {\n return [\n '',\n ''\n ];\n }\n culture = kendo.getCulture(culture);\n calendar = culture.calendars.standard;\n format = calendar.patterns[format] || format;\n days = calendar.days;\n months = calendar.months;\n placeholders = messages;\n return [\n format.replace(dateFormatRegExp, generateMatcher(false)),\n format.replace(dateFormatRegExp, generateMatcher(true))\n ];\n };\n this.getDateObject = function () {\n return year && month && date && hours && minutes && seconds && milliseconds ? new Date(value.getTime()) : null;\n };\n if (!initDate) {\n value = new Date();\n var sampleFormat = this.toPair(initFormat, initCulture, initMessages)[1];\n for (var i = 0; i < sampleFormat.length; i++) {\n setExisting(sampleFormat[i], false);\n }\n } else {\n value = new Date(initDate.getTime());\n }\n };\n function approximateStringMatching(oldText, oldFormat, newText, caret) {\n var oldTextSeparator = oldText[caret + oldText.length - newText.length];\n oldText = oldText.substring(0, caret + oldText.length - newText.length);\n newText = newText.substring(0, caret);\n var diff = [];\n var i;\n if (oldText === newText && caret > 0) {\n diff.push([\n oldFormat[caret - 1],\n newText[caret - 1]\n ]);\n return diff;\n }\n if (oldText.indexOf(newText) === 0 && (newText.length === 0 || oldFormat[newText.length - 1] !== oldFormat[newText.length])) {\n var deletedSymbol = '';\n for (i = newText.length; i < oldText.length; i++) {\n if (oldFormat[i] !== deletedSymbol && knownSymbols.indexOf(oldFormat[i]) >= 0) {\n deletedSymbol = oldFormat[i];\n diff.push([\n deletedSymbol,\n ''\n ]);\n }\n }\n return diff;\n }\n if (newText[newText.length - 1] === ' ' || newText[newText.length - 1] === oldTextSeparator) {\n return [[\n oldFormat[caret - 1],\n ' '\n ]];\n }\n if (newText.indexOf(oldText) === 0 || knownSymbols.indexOf(oldFormat[caret - 1]) === -1) {\n var symbol = oldFormat[0];\n for (i = Math.max(0, oldText.length - 1); i < oldFormat.length; i++) {\n if (knownSymbols.indexOf(oldFormat[i]) >= 0) {\n symbol = oldFormat[i];\n break;\n }\n }\n return [[\n symbol,\n newText[caret - 1]\n ]];\n }\n return [[\n oldFormat[caret - 1],\n newText[caret - 1]\n ]];\n }\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.datepicker', [\n 'kendo.calendar',\n 'kendo.popup'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'datepicker',\n name: 'DatePicker',\n category: 'web',\n description: 'The DatePicker widget allows the user to select a date from a calendar or by direct input.',\n depends: [\n 'calendar',\n 'popup'\n ]\n };\n (function ($, undefined) {\n var kendo = window.kendo, ui = kendo.ui, Widget = ui.Widget, parse = kendo.parseDate, keys = kendo.keys, template = kendo.template, activeElement = kendo._activeElement, DIV = '
            ', SPAN = '', ns = '.kendoDatePicker', CLICK = 'click' + ns, OPEN = 'open', CLOSE = 'close', CHANGE = 'change', DISABLED = 'disabled', READONLY = 'readonly', DEFAULT = 'k-state-default', FOCUSED = 'k-state-focused', SELECTED = 'k-state-selected', STATEDISABLED = 'k-state-disabled', HOVER = 'k-state-hover', HOVEREVENTS = 'mouseenter' + ns + ' mouseleave' + ns, MOUSEDOWN = 'mousedown' + ns, ID = 'id', MIN = 'min', MAX = 'max', MONTH = 'month', ARIA_DISABLED = 'aria-disabled', ARIA_EXPANDED = 'aria-expanded', ARIA_HIDDEN = 'aria-hidden', calendar = kendo.calendar, isInRange = calendar.isInRange, restrictValue = calendar.restrictValue, isEqualDatePart = calendar.isEqualDatePart, extend = $.extend, proxy = $.proxy, DATE = Date;\n function normalize(options) {\n var parseFormats = options.parseFormats, format = options.format;\n calendar.normalize(options);\n parseFormats = $.isArray(parseFormats) ? parseFormats : [parseFormats];\n if (!parseFormats.length) {\n parseFormats.push('yyyy-MM-dd');\n }\n if ($.inArray(format, parseFormats) === -1) {\n parseFormats.splice(0, 0, options.format);\n }\n options.parseFormats = parseFormats;\n }\n function preventDefault(e) {\n e.preventDefault();\n }\n var DateView = function (options) {\n var that = this, id, body = document.body, div = $(DIV).attr(ARIA_HIDDEN, 'true').addClass('k-calendar-container').appendTo(body);\n that.options = options = options || {};\n id = options.id;\n if (id) {\n id += '_dateview';\n div.attr(ID, id);\n that._dateViewID = id;\n }\n that.popup = new ui.Popup(div, extend(options.popup, options, {\n name: 'Popup',\n isRtl: kendo.support.isRtl(options.anchor)\n }));\n that.div = div;\n that.value(options.value);\n };\n DateView.prototype = {\n _calendar: function () {\n var that = this;\n var calendar = that.calendar;\n var options = that.options;\n var div;\n if (!calendar) {\n div = $(DIV).attr(ID, kendo.guid()).appendTo(that.popup.element).on(MOUSEDOWN, preventDefault).on(CLICK, 'td:has(.k-link)', proxy(that._click, that));\n that.calendar = calendar = new ui.Calendar(div);\n that._setOptions(options);\n kendo.calendar.makeUnselectable(calendar.element);\n calendar.navigate(that._value || that._current, options.start);\n that.value(that._value);\n }\n },\n _setOptions: function (options) {\n this.calendar.setOptions({\n focusOnNav: false,\n change: options.change,\n culture: options.culture,\n dates: options.dates,\n depth: options.depth,\n footer: options.footer,\n format: options.format,\n max: options.max,\n min: options.min,\n month: options.month,\n weekNumber: options.weekNumber,\n start: options.start,\n disableDates: options.disableDates\n });\n },\n setOptions: function (options) {\n var old = this.options;\n var disableDates = options.disableDates;\n if (disableDates) {\n options.disableDates = calendar.disabled(disableDates);\n }\n this.options = extend(old, options, {\n change: old.change,\n close: old.close,\n open: old.open\n });\n if (this.calendar) {\n this._setOptions(this.options);\n }\n },\n destroy: function () {\n this.popup.destroy();\n },\n open: function () {\n var that = this;\n that._calendar();\n that.popup.open();\n },\n close: function () {\n this.popup.close();\n },\n min: function (value) {\n this._option(MIN, value);\n },\n max: function (value) {\n this._option(MAX, value);\n },\n toggle: function () {\n var that = this;\n that[that.popup.visible() ? CLOSE : OPEN]();\n },\n move: function (e) {\n var that = this, key = e.keyCode, calendar = that.calendar, selectIsClicked = e.ctrlKey && key == keys.DOWN || key == keys.ENTER, handled = false;\n if (e.altKey) {\n if (key == keys.DOWN) {\n that.open();\n e.preventDefault();\n handled = true;\n } else if (key == keys.UP) {\n that.close();\n e.preventDefault();\n handled = true;\n }\n } else if (that.popup.visible()) {\n if (key == keys.ESC || selectIsClicked && calendar._cell.hasClass(SELECTED)) {\n that.close();\n e.preventDefault();\n return true;\n }\n that._current = calendar._move(e);\n handled = true;\n }\n return handled;\n },\n current: function (date) {\n this._current = date;\n this.calendar._focus(date);\n },\n value: function (value) {\n var that = this, calendar = that.calendar, options = that.options, disabledDate = options.disableDates;\n if (disabledDate && disabledDate(value)) {\n value = null;\n }\n that._value = value;\n that._current = new DATE(+restrictValue(value, options.min, options.max));\n if (calendar) {\n calendar.value(value);\n }\n },\n _click: function (e) {\n if (e.currentTarget.className.indexOf(SELECTED) !== -1) {\n this.close();\n }\n },\n _option: function (option, value) {\n var that = this;\n var calendar = that.calendar;\n that.options[option] = value;\n if (calendar) {\n calendar[option](value);\n }\n }\n };\n DateView.normalize = normalize;\n kendo.DateView = DateView;\n var DatePicker = Widget.extend({\n init: function (element, options) {\n var that = this, disabled, div;\n Widget.fn.init.call(that, element, options);\n element = that.element;\n options = that.options;\n options.disableDates = kendo.calendar.disabled(options.disableDates);\n options.min = parse(element.attr('min')) || parse(options.min);\n options.max = parse(element.attr('max')) || parse(options.max);\n normalize(options);\n that._initialOptions = extend({}, options);\n that._wrapper();\n that.dateView = new DateView(extend({}, options, {\n id: element.attr(ID),\n anchor: that.wrapper,\n change: function () {\n that._change(this.value());\n that.close();\n },\n close: function (e) {\n if (that.trigger(CLOSE)) {\n e.preventDefault();\n } else {\n element.attr(ARIA_EXPANDED, false);\n div.attr(ARIA_HIDDEN, true);\n }\n },\n open: function (e) {\n var options = that.options, date;\n if (that.trigger(OPEN)) {\n e.preventDefault();\n } else {\n if (that.element.val() !== that._oldText) {\n date = parse(element.val(), options.parseFormats, options.culture);\n that.dateView[date ? 'current' : 'value'](date);\n }\n element.attr(ARIA_EXPANDED, true);\n div.attr(ARIA_HIDDEN, false);\n that._updateARIA(date);\n }\n }\n }));\n div = that.dateView.div;\n that._icon();\n try {\n element[0].setAttribute('type', 'text');\n } catch (e) {\n element[0].type = 'text';\n }\n element.addClass('k-input').attr({\n role: 'combobox',\n 'aria-expanded': false,\n 'aria-owns': that.dateView._dateViewID\n });\n that._reset();\n that._template();\n disabled = element.is('[disabled]') || $(that.element).parents('fieldset').is(':disabled');\n if (disabled) {\n that.enable(false);\n } else {\n that.readonly(element.is('[readonly]'));\n }\n if (options.dateInput) {\n that._dateInput = new ui.DateInput(element, {\n culture: options.culture,\n format: options.format,\n min: options.min,\n max: options.max,\n value: options.value\n });\n }\n that._old = that._update(options.value || that.element.val());\n that._oldText = element.val();\n kendo.notify(that);\n },\n events: [\n OPEN,\n CLOSE,\n CHANGE\n ],\n options: {\n name: 'DatePicker',\n value: null,\n footer: '',\n format: '',\n culture: '',\n parseFormats: [],\n min: new Date(1900, 0, 1),\n max: new Date(2099, 11, 31),\n start: MONTH,\n depth: MONTH,\n animation: {},\n month: {},\n dates: [],\n ARIATemplate: 'Current focused date is #=kendo.toString(data.current, \"D\")#',\n dateInput: false\n },\n setOptions: function (options) {\n var that = this;\n var value = that._value;\n Widget.fn.setOptions.call(that, options);\n options = that.options;\n options.min = parse(options.min);\n options.max = parse(options.max);\n normalize(options);\n that.dateView.setOptions(options);\n if (that._dateInput) {\n that._dateInput.setOptions({\n culture: options.culture,\n format: options.format,\n min: options.min,\n max: options.max,\n value: options.value\n });\n }\n if (value) {\n that.element.val(kendo.toString(value, options.format, options.culture));\n that._updateARIA(value);\n }\n },\n _editable: function (options) {\n var that = this, icon = that._dateIcon.off(ns), element = that.element.off(ns), wrapper = that._inputWrapper.off(ns), readonly = options.readonly, disable = options.disable;\n if (!readonly && !disable) {\n wrapper.addClass(DEFAULT).removeClass(STATEDISABLED).on(HOVEREVENTS, that._toggleHover);\n element.removeAttr(DISABLED).removeAttr(READONLY).attr(ARIA_DISABLED, false).on('keydown' + ns, proxy(that._keydown, that)).on('focusout' + ns, proxy(that._blur, that)).on('focus' + ns, function () {\n that._inputWrapper.addClass(FOCUSED);\n });\n icon.on(CLICK, proxy(that._click, that)).on(MOUSEDOWN, preventDefault);\n } else {\n wrapper.addClass(disable ? STATEDISABLED : DEFAULT).removeClass(disable ? DEFAULT : STATEDISABLED);\n element.attr(DISABLED, disable).attr(READONLY, readonly).attr(ARIA_DISABLED, disable);\n }\n },\n readonly: function (readonly) {\n this._editable({\n readonly: readonly === undefined ? true : readonly,\n disable: false\n });\n },\n enable: function (enable) {\n this._editable({\n readonly: false,\n disable: !(enable = enable === undefined ? true : enable)\n });\n },\n destroy: function () {\n var that = this;\n Widget.fn.destroy.call(that);\n that.dateView.destroy();\n that.element.off(ns);\n that._dateIcon.off(ns);\n that._inputWrapper.off(ns);\n if (that._form) {\n that._form.off('reset', that._resetHandler);\n }\n },\n open: function () {\n this.dateView.open();\n },\n close: function () {\n this.dateView.close();\n },\n min: function (value) {\n return this._option(MIN, value);\n },\n max: function (value) {\n return this._option(MAX, value);\n },\n value: function (value) {\n var that = this;\n if (value === undefined) {\n return that._value;\n }\n that._old = that._update(value);\n if (that._old === null) {\n that.element.val('');\n }\n that._oldText = that.element.val();\n },\n _toggleHover: function (e) {\n $(e.currentTarget).toggleClass(HOVER, e.type === 'mouseenter');\n },\n _blur: function () {\n var that = this, value = that.element.val();\n that.close();\n if (value !== that._oldText) {\n that._change(value);\n }\n that._inputWrapper.removeClass(FOCUSED);\n },\n _click: function () {\n var that = this, element = that.element;\n that.dateView.toggle();\n if (!kendo.support.touch && element[0] !== activeElement()) {\n element.focus();\n }\n },\n _change: function (value) {\n var that = this, oldValue = that.element.val(), dateChanged;\n value = that._update(value);\n dateChanged = !kendo.calendar.isEqualDate(that._old, value);\n var valueUpdated = dateChanged && !that._typing;\n var textFormatted = oldValue !== that.element.val();\n if (valueUpdated || textFormatted) {\n that.element.trigger(CHANGE);\n }\n if (dateChanged) {\n that._old = value;\n that._oldText = that.element.val();\n that.trigger(CHANGE);\n }\n that._typing = false;\n },\n _keydown: function (e) {\n var that = this, dateView = that.dateView, value = that.element.val(), handled = false;\n if (!dateView.popup.visible() && e.keyCode == keys.ENTER && value !== that._oldText) {\n that._change(value);\n } else {\n handled = dateView.move(e);\n that._updateARIA(dateView._current);\n if (!handled) {\n that._typing = true;\n } else if (that._dateInput && e.stopImmediatePropagation) {\n e.stopImmediatePropagation();\n }\n }\n },\n _icon: function () {\n var that = this, element = that.element, icon;\n icon = element.next('span.k-select');\n if (!icon[0]) {\n icon = $('').insertAfter(element);\n }\n that._dateIcon = icon.attr({\n 'role': 'button',\n 'aria-controls': that.dateView._dateViewID\n });\n },\n _option: function (option, value) {\n var that = this, options = that.options;\n if (value === undefined) {\n return options[option];\n }\n value = parse(value, options.parseFormats, options.culture);\n if (!value) {\n return;\n }\n options[option] = new DATE(+value);\n that.dateView[option](value);\n },\n _update: function (value) {\n var that = this, options = that.options, min = options.min, max = options.max, current = that._value, date = parse(value, options.parseFormats, options.culture), isSameType = date === null && current === null || date instanceof Date && current instanceof Date, formattedValue;\n if (options.disableDates(date)) {\n date = null;\n if (!that._old && !that.element.val()) {\n value = null;\n }\n }\n if (+date === +current && isSameType) {\n formattedValue = kendo.toString(date, options.format, options.culture);\n if (formattedValue !== value) {\n that.element.val(date === null ? value : formattedValue);\n }\n return date;\n }\n if (date !== null && isEqualDatePart(date, min)) {\n date = restrictValue(date, min, max);\n } else if (!isInRange(date, min, max)) {\n date = null;\n }\n that._value = date;\n that.dateView.value(date);\n if (that._dateInput) {\n that._dateInput.value(date || value);\n } else {\n that.element.val(kendo.toString(date || value, options.format, options.culture));\n }\n that._updateARIA(date);\n return date;\n },\n _wrapper: function () {\n var that = this, element = that.element, wrapper;\n wrapper = element.parents('.k-datepicker');\n if (!wrapper[0]) {\n wrapper = element.wrap(SPAN).parent().addClass('k-picker-wrap k-state-default');\n wrapper = wrapper.wrap(SPAN).parent();\n }\n wrapper[0].style.cssText = element[0].style.cssText;\n element.css({\n width: '100%',\n height: element[0].style.height\n });\n that.wrapper = wrapper.addClass('k-widget k-datepicker k-header').addClass(element[0].className);\n that._inputWrapper = $(wrapper[0].firstChild);\n },\n _reset: function () {\n var that = this, element = that.element, formId = element.attr('form'), form = formId ? $('#' + formId) : element.closest('form');\n if (form[0]) {\n that._resetHandler = function () {\n that.value(element[0].defaultValue);\n that.max(that._initialOptions.max);\n that.min(that._initialOptions.min);\n };\n that._form = form.on('reset', that._resetHandler);\n }\n },\n _template: function () {\n this._ariaTemplate = template(this.options.ARIATemplate);\n },\n _updateARIA: function (date) {\n var cell;\n var that = this;\n var calendar = that.dateView.calendar;\n that.element.removeAttr('aria-activedescendant');\n if (calendar) {\n cell = calendar._cell;\n cell.attr('aria-label', that._ariaTemplate({ current: date || calendar.current() }));\n that.element.attr('aria-activedescendant', cell.attr('id'));\n }\n }\n });\n ui.plugin(DatePicker);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.autocomplete', [\n 'kendo.list',\n 'kendo.mobile.scroller'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'autocomplete',\n name: 'AutoComplete',\n category: 'web',\n description: 'The AutoComplete widget provides suggestions depending on the typed text.It also allows multiple value entries.',\n depends: ['list'],\n features: [\n {\n id: 'mobile-scroller',\n name: 'Mobile scroller',\n description: 'Support for kinetic scrolling in mobile device',\n depends: ['mobile.scroller']\n },\n {\n id: 'virtualization',\n name: 'VirtualList',\n description: 'Support for virtualization',\n depends: ['virtuallist']\n }\n ]\n };\n (function ($, undefined) {\n var kendo = window.kendo, support = kendo.support, caret = kendo.caret, activeElement = kendo._activeElement, placeholderSupported = support.placeholder, ui = kendo.ui, List = ui.List, keys = kendo.keys, DataSource = kendo.data.DataSource, ARIA_DISABLED = 'aria-disabled', ARIA_READONLY = 'aria-readonly', CHANGE = 'change', DEFAULT = 'k-state-default', DISABLED = 'disabled', READONLY = 'readonly', FOCUSED = 'k-state-focused', SELECTED = 'k-state-selected', STATEDISABLED = 'k-state-disabled', HOVER = 'k-state-hover', ns = '.kendoAutoComplete', HOVEREVENTS = 'mouseenter' + ns + ' mouseleave' + ns, proxy = $.proxy;\n function indexOfWordAtCaret(caretIdx, text, separator) {\n return separator ? text.substring(0, caretIdx).split(separator).length - 1 : 0;\n }\n function wordAtCaret(caretIdx, text, separator) {\n return text.split(separator)[indexOfWordAtCaret(caretIdx, text, separator)];\n }\n function replaceWordAtCaret(caretIdx, text, word, separator, defaultSeparator) {\n var words = text.split(separator);\n words.splice(indexOfWordAtCaret(caretIdx, text, separator), 1, word);\n if (separator && words[words.length - 1] !== '') {\n words.push('');\n }\n return words.join(defaultSeparator);\n }\n var AutoComplete = List.extend({\n init: function (element, options) {\n var that = this, wrapper, disabled;\n that.ns = ns;\n options = $.isArray(options) ? { dataSource: options } : options;\n List.fn.init.call(that, element, options);\n element = that.element;\n options = that.options;\n options.placeholder = options.placeholder || element.attr('placeholder');\n if (placeholderSupported) {\n element.attr('placeholder', options.placeholder);\n }\n that._wrapper();\n that._loader();\n that._clearButton();\n that._dataSource();\n that._ignoreCase();\n element[0].type = 'text';\n wrapper = that.wrapper;\n that._popup();\n element.addClass('k-input').on('keydown' + ns, proxy(that._keydown, that)).on('keypress' + ns, proxy(that._keypress, that)).on('paste' + ns, proxy(that._search, that)).on('focus' + ns, function () {\n that._prev = that._accessor();\n that._oldText = that._prev;\n that._placeholder(false);\n wrapper.addClass(FOCUSED);\n }).on('focusout' + ns, function () {\n that._change();\n that._placeholder();\n wrapper.removeClass(FOCUSED);\n }).attr({\n autocomplete: 'off',\n role: 'textbox',\n 'aria-haspopup': true\n });\n that._clear.on('click' + ns, proxy(that._clearValue, that));\n that._enable();\n that._old = that._accessor();\n if (element[0].id) {\n element.attr('aria-owns', that.ul[0].id);\n }\n that._aria();\n that._placeholder();\n that._initList();\n disabled = $(that.element).parents('fieldset').is(':disabled');\n if (disabled) {\n that.enable(false);\n }\n that.listView.bind('click', function (e) {\n e.preventDefault();\n });\n that._resetFocusItemHandler = $.proxy(that._resetFocusItem, that);\n kendo.notify(that);\n that._toggleCloseVisibility();\n },\n options: {\n name: 'AutoComplete',\n enabled: true,\n suggest: false,\n template: '',\n groupTemplate: '#:data#',\n fixedGroupTemplate: '#:data#',\n dataTextField: '',\n minLength: 1,\n enforceMinLength: false,\n delay: 200,\n height: 200,\n filter: 'startswith',\n ignoreCase: true,\n highlightFirst: false,\n separator: null,\n placeholder: '',\n animation: {},\n virtual: false,\n value: null,\n clearButton: true\n },\n _dataSource: function () {\n var that = this;\n if (that.dataSource && that._refreshHandler) {\n that._unbindDataSource();\n } else {\n that._progressHandler = proxy(that._showBusy, that);\n that._errorHandler = proxy(that._hideBusy, that);\n }\n that.dataSource = DataSource.create(that.options.dataSource).bind('progress', that._progressHandler).bind('error', that._errorHandler);\n },\n setDataSource: function (dataSource) {\n this.options.dataSource = dataSource;\n this._dataSource();\n this.listView.setDataSource(this.dataSource);\n },\n events: [\n 'open',\n 'close',\n CHANGE,\n 'select',\n 'filtering',\n 'dataBinding',\n 'dataBound'\n ],\n setOptions: function (options) {\n var listOptions = this._listOptions(options);\n List.fn.setOptions.call(this, options);\n this.listView.setOptions(listOptions);\n this._accessors();\n this._aria();\n },\n _listOptions: function (options) {\n var listOptions = List.fn._listOptions.call(this, $.extend(options, { skipUpdateOnBind: true }));\n listOptions.dataValueField = listOptions.dataTextField;\n listOptions.selectedItemChange = null;\n return listOptions;\n },\n _editable: function (options) {\n var that = this, element = that.element, wrapper = that.wrapper.off(ns), readonly = options.readonly, disable = options.disable;\n if (!readonly && !disable) {\n wrapper.addClass(DEFAULT).removeClass(STATEDISABLED).on(HOVEREVENTS, that._toggleHover);\n element.removeAttr(DISABLED).removeAttr(READONLY).attr(ARIA_DISABLED, false).attr(ARIA_READONLY, false);\n } else {\n wrapper.addClass(disable ? STATEDISABLED : DEFAULT).removeClass(disable ? DEFAULT : STATEDISABLED);\n element.attr(DISABLED, disable).attr(READONLY, readonly).attr(ARIA_DISABLED, disable).attr(ARIA_READONLY, readonly);\n }\n },\n close: function () {\n var that = this;\n var current = that.listView.focus();\n if (current) {\n current.removeClass(SELECTED);\n }\n that.popup.close();\n },\n destroy: function () {\n var that = this;\n that.element.off(ns);\n that._clear.off(ns);\n that.wrapper.off(ns);\n List.fn.destroy.call(that);\n },\n refresh: function () {\n this.listView.refresh();\n },\n select: function (li) {\n this._select(li);\n },\n search: function (word) {\n var that = this, options = that.options, ignoreCase = options.ignoreCase, separator = that._separator(), length;\n word = word || that._accessor();\n clearTimeout(that._typingTimeout);\n if (separator) {\n word = wordAtCaret(caret(that.element)[0], word, separator);\n }\n length = word.length;\n if (!options.enforceMinLength && !length || length >= options.minLength) {\n that._open = true;\n that._mute(function () {\n this.listView.value([]);\n });\n that._filterSource({\n value: ignoreCase ? word.toLowerCase() : word,\n operator: options.filter,\n field: options.dataTextField,\n ignoreCase: ignoreCase\n });\n that.one('close', $.proxy(that._unifySeparators, that));\n }\n that._toggleCloseVisibility();\n },\n suggest: function (word) {\n var that = this, key = that._last, value = that._accessor(), element = that.element[0], caretIdx = caret(element)[0], separator = that._separator(), words = value.split(separator), wordIndex = indexOfWordAtCaret(caretIdx, value, separator), selectionEnd = caretIdx, idx;\n if (key == keys.BACKSPACE || key == keys.DELETE) {\n that._last = undefined;\n return;\n }\n word = word || '';\n if (typeof word !== 'string') {\n if (word[0]) {\n word = that.dataSource.view()[List.inArray(word[0], that.ul[0])];\n }\n word = word ? that._text(word) : '';\n }\n if (caretIdx <= 0) {\n caretIdx = value.toLowerCase().indexOf(word.toLowerCase()) + 1;\n }\n idx = value.substring(0, caretIdx).lastIndexOf(separator);\n idx = idx > -1 ? caretIdx - (idx + separator.length) : caretIdx;\n value = words[wordIndex].substring(0, idx);\n if (word) {\n word = word.toString();\n idx = word.toLowerCase().indexOf(value.toLowerCase());\n if (idx > -1) {\n word = word.substring(idx + value.length);\n selectionEnd = caretIdx + word.length;\n value += word;\n }\n if (separator && words[words.length - 1] !== '') {\n words.push('');\n }\n }\n words[wordIndex] = value;\n that._accessor(words.join(separator || ''));\n if (element === activeElement()) {\n caret(element, caretIdx, selectionEnd);\n }\n },\n value: function (value) {\n if (value !== undefined) {\n this.listView.value(value);\n this._accessor(value);\n this._old = this._accessor();\n this._oldText = this._accessor();\n } else {\n return this._accessor();\n }\n },\n _click: function (e) {\n var item = e.item;\n var that = this;\n var element = that.element;\n var dataItem = that.listView.dataItemByIndex(that.listView.getElementIndex(item));\n e.preventDefault();\n that._active = true;\n if (that.trigger('select', {\n dataItem: dataItem,\n item: item\n })) {\n that.close();\n return;\n }\n that._oldText = element.val();\n that._select(item).done(function () {\n that._blur();\n caret(element, element.val().length);\n });\n },\n _clearText: $.noop,\n _resetFocusItem: function () {\n var index = this.options.highlightFirst ? 0 : -1;\n if (this.options.virtual) {\n this.listView.scrollTo(0);\n }\n this.listView.focus(index);\n },\n _listBound: function () {\n var that = this;\n var popup = that.popup;\n var options = that.options;\n var data = that.dataSource.flatView();\n var length = data.length;\n var groupsLength = that.dataSource._group.length;\n var isActive = that.element[0] === activeElement();\n var action;\n that._renderFooter();\n that._renderNoData();\n that._toggleNoData(!length);\n that._toggleHeader(!!groupsLength && !!length);\n that._resizePopup();\n popup.position();\n if (length) {\n if (options.suggest && isActive) {\n that.suggest(data[0]);\n }\n }\n if (that._open) {\n that._open = false;\n action = that._allowOpening() ? 'open' : 'close';\n if (that._typingTimeout && !isActive) {\n action = 'close';\n }\n if (length) {\n that._resetFocusItem();\n if (options.virtual) {\n that.popup.unbind('activate', that._resetFocusItemHandler).one('activate', that._resetFocusItemHandler);\n }\n }\n popup[action]();\n that._typingTimeout = undefined;\n }\n if (that._touchScroller) {\n that._touchScroller.reset();\n }\n that._hideBusy();\n that._makeUnselectable();\n that.trigger('dataBound');\n },\n _mute: function (callback) {\n this._muted = true;\n callback.call(this);\n this._muted = false;\n },\n _listChange: function () {\n var isActive = this._active || this.element[0] === activeElement();\n if (isActive && !this._muted) {\n this._selectValue(this.listView.selectedDataItems()[0]);\n }\n },\n _selectValue: function (dataItem) {\n var separator = this._separator();\n var text = '';\n if (dataItem) {\n text = this._text(dataItem);\n }\n if (text === null) {\n text = '';\n }\n if (separator) {\n text = replaceWordAtCaret(caret(this.element)[0], this._accessor(), text, separator, this._defaultSeparator());\n }\n this._prev = text;\n this._accessor(text);\n this._placeholder();\n },\n _unifySeparators: function () {\n this._accessor(this.value().split(this._separator()).join(this._defaultSeparator()));\n return this;\n },\n _change: function () {\n var that = this;\n var value = that._unifySeparators().value();\n var trigger = value !== List.unifyType(that._old, typeof value);\n var valueUpdated = trigger && !that._typing;\n var itemSelected = that._oldText !== value;\n that._old = value;\n that._oldText = value;\n if (valueUpdated || itemSelected) {\n that.element.trigger(CHANGE);\n }\n if (trigger) {\n that.trigger(CHANGE);\n }\n that.typing = false;\n that._toggleCloseVisibility();\n },\n _accessor: function (value) {\n var that = this, element = that.element[0];\n if (value !== undefined) {\n element.value = value === null ? '' : value;\n that._placeholder();\n } else {\n value = element.value;\n if (element.className.indexOf('k-readonly') > -1) {\n if (value === that.options.placeholder) {\n return '';\n } else {\n return value;\n }\n }\n return value;\n }\n },\n _keydown: function (e) {\n var that = this;\n var key = e.keyCode;\n var listView = that.listView;\n var visible = that.popup.visible();\n var current = listView.focus();\n that._last = key;\n if (key === keys.DOWN) {\n if (visible) {\n this._move(current ? 'focusNext' : 'focusFirst');\n }\n e.preventDefault();\n } else if (key === keys.UP) {\n if (visible) {\n this._move(current ? 'focusPrev' : 'focusLast');\n }\n e.preventDefault();\n } else if (key === keys.ENTER || key === keys.TAB) {\n if (key === keys.ENTER && visible) {\n e.preventDefault();\n }\n if (visible && current) {\n var dataItem = listView.dataItemByIndex(listView.getElementIndex(current));\n if (that.trigger('select', {\n dataItem: dataItem,\n item: current\n })) {\n return;\n }\n this._select(current);\n }\n this._blur();\n } else if (key === keys.ESC) {\n if (visible) {\n e.preventDefault();\n }\n that.close();\n } else if (that.popup.visible() && (key === keys.PAGEDOWN || key === keys.PAGEUP)) {\n e.preventDefault();\n var direction = key === keys.PAGEDOWN ? 1 : -1;\n listView.scrollWith(direction * listView.screenHeight());\n } else {\n that._search();\n }\n },\n _keypress: function () {\n this._oldText = this.element.val();\n this._typing = true;\n },\n _move: function (action) {\n this.listView[action]();\n if (this.options.suggest) {\n this.suggest(this.listView.focus());\n }\n },\n _hideBusy: function () {\n var that = this;\n clearTimeout(that._busy);\n that._loading.hide();\n that.element.attr('aria-busy', false);\n that._busy = null;\n that._showClear();\n },\n _showBusy: function () {\n var that = this;\n if (that._busy) {\n return;\n }\n that._busy = setTimeout(function () {\n that.element.attr('aria-busy', true);\n that._loading.show();\n that._hideClear();\n }, 100);\n },\n _placeholder: function (show) {\n if (placeholderSupported) {\n return;\n }\n var that = this, element = that.element, placeholder = that.options.placeholder, value;\n if (placeholder) {\n value = element.val();\n if (show === undefined) {\n show = !value;\n }\n if (!show) {\n if (value !== placeholder) {\n placeholder = value;\n } else {\n placeholder = '';\n }\n }\n if (value === that._old && !show) {\n return;\n }\n element.toggleClass('k-readonly', show).val(placeholder);\n if (!placeholder && element[0] === document.activeElement) {\n caret(element[0], 0, 0);\n }\n }\n },\n _separator: function () {\n var separator = this.options.separator;\n if (separator instanceof Array) {\n return new RegExp(separator.join('|'), 'gi');\n }\n return separator;\n },\n _defaultSeparator: function () {\n var separator = this.options.separator;\n if (separator instanceof Array) {\n return separator[0];\n }\n return separator;\n },\n _inputValue: function () {\n return this.element.val();\n },\n _search: function () {\n var that = this;\n clearTimeout(that._typingTimeout);\n that._typingTimeout = setTimeout(function () {\n if (that._prev !== that._accessor()) {\n that._prev = that._accessor();\n that.search();\n }\n }, that.options.delay);\n },\n _select: function (candidate) {\n var that = this;\n that._active = true;\n return that.listView.select(candidate).done(function () {\n that._active = false;\n });\n },\n _loader: function () {\n this._loading = $('').insertAfter(this.element);\n },\n _clearButton: function () {\n this._clear = $('').attr({\n 'role': 'button',\n 'tabIndex': -1\n });\n if (this.options.clearButton) {\n this._clear.insertAfter(this.element);\n }\n },\n _toggleHover: function (e) {\n $(e.currentTarget).toggleClass(HOVER, e.type === 'mouseenter');\n },\n _toggleCloseVisibility: function () {\n if (this.value()) {\n this._showClear();\n } else {\n this._hideClear();\n }\n },\n _wrapper: function () {\n var that = this, element = that.element, DOMelement = element[0], wrapper;\n wrapper = element.parent();\n if (!wrapper.is('span.k-widget')) {\n wrapper = element.wrap('').parent();\n }\n wrapper.attr('tabindex', -1);\n wrapper.attr('role', 'presentation');\n wrapper[0].style.cssText = DOMelement.style.cssText;\n element.css({\n width: '100%',\n height: DOMelement.style.height\n });\n that._focused = that.element;\n that.wrapper = wrapper.addClass('k-widget k-autocomplete k-header').addClass(DOMelement.className);\n }\n });\n ui.plugin(AutoComplete);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.dropdownlist', [\n 'kendo.list',\n 'kendo.mobile.scroller'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'dropdownlist',\n name: 'DropDownList',\n category: 'web',\n description: 'The DropDownList widget displays a list of values and allows the selection of a single value from the list.',\n depends: ['list'],\n features: [\n {\n id: 'mobile-scroller',\n name: 'Mobile scroller',\n description: 'Support for kinetic scrolling in mobile device',\n depends: ['mobile.scroller']\n },\n {\n id: 'virtualization',\n name: 'VirtualList',\n description: 'Support for virtualization',\n depends: ['virtuallist']\n }\n ]\n };\n (function ($, undefined) {\n var kendo = window.kendo, ui = kendo.ui, List = ui.List, Select = ui.Select, support = kendo.support, activeElement = kendo._activeElement, ObservableObject = kendo.data.ObservableObject, keys = kendo.keys, ns = '.kendoDropDownList', DISABLED = 'disabled', READONLY = 'readonly', CHANGE = 'change', FOCUSED = 'k-state-focused', DEFAULT = 'k-state-default', STATEDISABLED = 'k-state-disabled', ARIA_DISABLED = 'aria-disabled', HOVEREVENTS = 'mouseenter' + ns + ' mouseleave' + ns, TABINDEX = 'tabindex', STATE_FILTER = 'filter', STATE_ACCEPT = 'accept', MSG_INVALID_OPTION_LABEL = 'The `optionLabel` option is not valid due to missing fields. Define a custom optionLabel as shown here http://docs.telerik.com/kendo-ui/api/javascript/ui/dropdownlist#configuration-optionLabel', proxy = $.proxy;\n var DropDownList = Select.extend({\n init: function (element, options) {\n var that = this;\n var index = options && options.index;\n var optionLabel, text, disabled;\n that.ns = ns;\n options = $.isArray(options) ? { dataSource: options } : options;\n Select.fn.init.call(that, element, options);\n options = that.options;\n element = that.element.on('focus' + ns, proxy(that._focusHandler, that));\n that._focusInputHandler = $.proxy(that._focusInput, that);\n that.optionLabel = $();\n that._optionLabel();\n that._inputTemplate();\n that._reset();\n that._prev = '';\n that._word = '';\n that._wrapper();\n that._tabindex();\n that.wrapper.data(TABINDEX, that.wrapper.attr(TABINDEX));\n that._span();\n that._popup();\n that._mobile();\n that._dataSource();\n that._ignoreCase();\n that._filterHeader();\n that._aria();\n that._enable();\n that._oldIndex = that.selectedIndex = -1;\n if (index !== undefined) {\n options.index = index;\n }\n that._initialIndex = options.index;\n that.requireValueMapper(that.options);\n that._initList();\n that._cascade();\n if (options.autoBind) {\n that.dataSource.fetch();\n } else if (that.selectedIndex === -1) {\n text = options.text || '';\n if (!text) {\n optionLabel = options.optionLabel;\n if (optionLabel && options.index === 0) {\n text = optionLabel;\n } else if (that._isSelect) {\n text = element.children(':selected').text();\n }\n }\n that._textAccessor(text);\n }\n disabled = $(that.element).parents('fieldset').is(':disabled');\n if (disabled) {\n that.enable(false);\n }\n that.listView.bind('click', function (e) {\n e.preventDefault();\n });\n kendo.notify(that);\n },\n options: {\n name: 'DropDownList',\n enabled: true,\n autoBind: true,\n index: 0,\n text: null,\n value: null,\n delay: 500,\n height: 200,\n dataTextField: '',\n dataValueField: '',\n optionLabel: '',\n cascadeFrom: '',\n cascadeFromField: '',\n ignoreCase: true,\n animation: {},\n filter: 'none',\n minLength: 1,\n enforceMinLength: false,\n virtual: false,\n template: null,\n valueTemplate: null,\n optionLabelTemplate: null,\n groupTemplate: '#:data#',\n fixedGroupTemplate: '#:data#'\n },\n events: [\n 'open',\n 'close',\n CHANGE,\n 'select',\n 'filtering',\n 'dataBinding',\n 'dataBound',\n 'cascade',\n 'set'\n ],\n setOptions: function (options) {\n Select.fn.setOptions.call(this, options);\n this.listView.setOptions(this._listOptions(options));\n this._optionLabel();\n this._inputTemplate();\n this._accessors();\n this._filterHeader();\n this._enable();\n this._aria();\n if (!this.value() && this.hasOptionLabel()) {\n this.select(0);\n }\n },\n destroy: function () {\n var that = this;\n Select.fn.destroy.call(that);\n that.wrapper.off(ns);\n that.element.off(ns);\n that._inputWrapper.off(ns);\n that._arrow.off();\n that._arrow = null;\n that._arrowIcon = null;\n that.optionLabel.off();\n },\n open: function () {\n var that = this;\n if (that.popup.visible()) {\n return;\n }\n if (!that.listView.bound() || that._state === STATE_ACCEPT) {\n that._open = true;\n that._state = 'rebind';\n if (that.filterInput) {\n that.filterInput.val('');\n that._prev = '';\n }\n if (that.filterInput && that.options.minLength !== 1) {\n that.refresh();\n that.popup.one('activate', that._focusInputHandler);\n that.popup.open();\n that._resizeFilterInput();\n } else {\n that._filterSource();\n }\n } else if (that._allowOpening()) {\n that.popup.one('activate', that._focusInputHandler);\n that.popup.open();\n that._resizeFilterInput();\n that._focusItem();\n }\n },\n _focusInput: function () {\n this._focusElement(this.filterInput);\n },\n _resizeFilterInput: function () {\n var filterInput = this.filterInput;\n var originalPrevent = this._prevent;\n if (!filterInput) {\n return;\n }\n var isInputActive = this.filterInput[0] === activeElement();\n var caret = kendo.caret(this.filterInput[0])[0];\n this._prevent = true;\n filterInput.css('display', 'none').css('width', this.popup.element.css('width')).css('display', 'inline-block');\n if (isInputActive) {\n filterInput.focus();\n kendo.caret(filterInput[0], caret);\n }\n this._prevent = originalPrevent;\n },\n _allowOpening: function () {\n return this.hasOptionLabel() || this.filterInput || Select.fn._allowOpening.call(this);\n },\n toggle: function (toggle) {\n this._toggle(toggle, true);\n },\n current: function (candidate) {\n var current;\n if (candidate === undefined) {\n current = this.listView.focus();\n if (!current && this.selectedIndex === 0 && this.hasOptionLabel()) {\n return this.optionLabel;\n }\n return current;\n }\n this._focus(candidate);\n },\n dataItem: function (index) {\n var that = this;\n var dataItem = null;\n if (index === null) {\n return index;\n }\n if (index === undefined) {\n dataItem = that.listView.selectedDataItems()[0];\n } else {\n if (typeof index !== 'number') {\n if (that.options.virtual) {\n return that.dataSource.getByUid($(index).data('uid'));\n }\n if (index.hasClass('k-list-optionlabel')) {\n index = -1;\n } else {\n index = $(that.items()).index(index);\n }\n } else if (that.hasOptionLabel()) {\n index -= 1;\n }\n dataItem = that.dataSource.flatView()[index];\n }\n if (!dataItem) {\n dataItem = that._optionLabelDataItem();\n }\n return dataItem;\n },\n refresh: function () {\n this.listView.refresh();\n },\n text: function (text) {\n var that = this;\n var loweredText;\n var ignoreCase = that.options.ignoreCase;\n text = text === null ? '' : text;\n if (text !== undefined) {\n if (typeof text !== 'string') {\n that._textAccessor(text);\n return;\n }\n loweredText = ignoreCase ? text.toLowerCase() : text;\n that._select(function (data) {\n data = that._text(data);\n if (ignoreCase) {\n data = (data + '').toLowerCase();\n }\n return data === loweredText;\n }).done(function () {\n that._textAccessor(that.dataItem() || text);\n });\n } else {\n return that._textAccessor();\n }\n },\n _clearFilter: function () {\n $(this.filterInput).val('');\n Select.fn._clearFilter.call(this);\n },\n value: function (value) {\n var that = this;\n var listView = that.listView;\n var dataSource = that.dataSource;\n if (value === undefined) {\n value = that._accessor() || that.listView.value()[0];\n return value === undefined || value === null ? '' : value;\n }\n that.requireValueMapper(that.options, value);\n if (value || !that.hasOptionLabel()) {\n that._initialIndex = null;\n }\n this.trigger('set', { value: value });\n if (that._request && that.options.cascadeFrom && that.listView.bound()) {\n if (that._valueSetter) {\n dataSource.unbind(CHANGE, that._valueSetter);\n }\n that._valueSetter = proxy(function () {\n that.value(value);\n }, that);\n dataSource.one(CHANGE, that._valueSetter);\n return;\n }\n if (that._isFilterEnabled() && listView.bound() && listView.isFiltered()) {\n that._clearFilter();\n } else {\n that._fetchData();\n }\n listView.value(value).done(function () {\n that._old = that._accessor();\n that._oldIndex = that.selectedIndex;\n });\n },\n hasOptionLabel: function () {\n return this.optionLabel && !!this.optionLabel[0];\n },\n _optionLabel: function () {\n var that = this;\n var options = that.options;\n var optionLabel = options.optionLabel;\n var template = options.optionLabelTemplate;\n if (!optionLabel) {\n that.optionLabel.off().remove();\n that.optionLabel = $();\n return;\n }\n if (!template) {\n template = '#:';\n if (typeof optionLabel === 'string') {\n template += 'data';\n } else {\n template += kendo.expr(options.dataTextField, 'data');\n }\n template += '#';\n }\n if (typeof template !== 'function') {\n template = kendo.template(template);\n }\n that.optionLabelTemplate = template;\n if (!that.hasOptionLabel()) {\n that.optionLabel = $('
            ').prependTo(that.list);\n }\n that.optionLabel.html(template(optionLabel)).off().click(proxy(that._click, that)).on(HOVEREVENTS, that._toggleHover);\n that.angular('compile', function () {\n return {\n elements: that.optionLabel,\n data: [{ dataItem: that._optionLabelDataItem() }]\n };\n });\n },\n _optionLabelText: function () {\n var optionLabel = this.options.optionLabel;\n return typeof optionLabel === 'string' ? optionLabel : this._text(optionLabel);\n },\n _optionLabelDataItem: function () {\n var that = this;\n var optionLabel = that.options.optionLabel;\n if (that.hasOptionLabel()) {\n return $.isPlainObject(optionLabel) ? new ObservableObject(optionLabel) : that._assignInstance(that._optionLabelText(), '');\n }\n return null;\n },\n _buildOptions: function (data) {\n var that = this;\n if (!that._isSelect) {\n return;\n }\n var value = that.listView.value()[0];\n var optionLabel = that._optionLabelDataItem();\n var optionLabelValue = optionLabel && that._value(optionLabel);\n if (value === undefined || value === null) {\n value = '';\n }\n if (optionLabel) {\n if (optionLabelValue === undefined || optionLabelValue === null) {\n optionLabelValue = '';\n }\n optionLabel = '';\n }\n that._options(data, optionLabel, value);\n if (value !== List.unifyType(that._accessor(), typeof value)) {\n that._customOption = null;\n that._custom(value);\n }\n },\n _listBound: function () {\n var that = this;\n var initialIndex = that._initialIndex;\n var filtered = that._state === STATE_FILTER;\n var data = that.dataSource.flatView();\n var dataItem;\n that._presetValue = false;\n that._renderFooter();\n that._renderNoData();\n that._toggleNoData(!data.length);\n that._resizePopup(true);\n that.popup.position();\n that._buildOptions(data);\n that._makeUnselectable();\n if (!filtered) {\n if (that._open) {\n that.toggle(that._allowOpening());\n }\n that._open = false;\n if (!that._fetch) {\n if (data.length) {\n if (!that.listView.value().length && initialIndex > -1 && initialIndex !== null) {\n that.select(initialIndex);\n }\n that._initialIndex = null;\n dataItem = that.listView.selectedDataItems()[0];\n if (dataItem && that.text() !== that._text(dataItem)) {\n that._selectValue(dataItem);\n }\n } else if (that._textAccessor() !== that._optionLabelText()) {\n that.listView.value('');\n that._selectValue(null);\n that._oldIndex = that.selectedIndex;\n }\n }\n }\n that._hideBusy();\n that.trigger('dataBound');\n },\n _listChange: function () {\n this._selectValue(this.listView.selectedDataItems()[0]);\n if (this._presetValue || this._old && this._oldIndex === -1) {\n this._oldIndex = this.selectedIndex;\n }\n },\n _filterPaste: function () {\n this._search();\n },\n _focusHandler: function () {\n this.wrapper.focus();\n },\n _focusinHandler: function () {\n this._inputWrapper.addClass(FOCUSED);\n this._prevent = false;\n },\n _focusoutHandler: function () {\n var that = this;\n var isIFrame = window.self !== window.top;\n if (!that._prevent) {\n clearTimeout(that._typingTimeout);\n if (support.mobileOS.ios && isIFrame) {\n that._change();\n } else {\n that._blur();\n }\n that._inputWrapper.removeClass(FOCUSED);\n that._prevent = true;\n that._open = false;\n that.element.blur();\n }\n },\n _wrapperMousedown: function () {\n this._prevent = !!this.filterInput;\n },\n _wrapperClick: function (e) {\n e.preventDefault();\n this.popup.unbind('activate', this._focusInputHandler);\n this._focused = this.wrapper;\n this._toggle();\n },\n _editable: function (options) {\n var that = this;\n var element = that.element;\n var disable = options.disable;\n var readonly = options.readonly;\n var wrapper = that.wrapper.add(that.filterInput).off(ns);\n var dropDownWrapper = that._inputWrapper.off(HOVEREVENTS);\n if (!readonly && !disable) {\n element.removeAttr(DISABLED).removeAttr(READONLY);\n dropDownWrapper.addClass(DEFAULT).removeClass(STATEDISABLED).on(HOVEREVENTS, that._toggleHover);\n wrapper.attr(TABINDEX, wrapper.data(TABINDEX)).attr(ARIA_DISABLED, false).on('keydown' + ns, proxy(that._keydown, that)).on('focusin' + ns, proxy(that._focusinHandler, that)).on('focusout' + ns, proxy(that._focusoutHandler, that)).on('mousedown' + ns, proxy(that._wrapperMousedown, that)).on('paste' + ns, proxy(that._filterPaste, that));\n that.wrapper.on('click' + ns, proxy(that._wrapperClick, that));\n if (!that.filterInput) {\n wrapper.on('keypress' + ns, proxy(that._keypress, that));\n }\n } else if (disable) {\n wrapper.removeAttr(TABINDEX);\n dropDownWrapper.addClass(STATEDISABLED).removeClass(DEFAULT);\n } else {\n dropDownWrapper.addClass(DEFAULT).removeClass(STATEDISABLED);\n wrapper.on('focusin' + ns, proxy(that._focusinHandler, that)).on('focusout' + ns, proxy(that._focusoutHandler, that));\n }\n element.attr(DISABLED, disable).attr(READONLY, readonly);\n wrapper.attr(ARIA_DISABLED, disable);\n },\n _keydown: function (e) {\n var that = this;\n var key = e.keyCode;\n var altKey = e.altKey;\n var isInputActive;\n var handled;\n var isPopupVisible = that.popup.visible();\n if (that.filterInput) {\n isInputActive = that.filterInput[0] === activeElement();\n }\n if (key === keys.LEFT) {\n key = keys.UP;\n handled = true;\n } else if (key === keys.RIGHT) {\n key = keys.DOWN;\n handled = true;\n }\n if (handled && isInputActive) {\n return;\n }\n e.keyCode = key;\n if (altKey && key === keys.UP || key === keys.ESC) {\n that._focusElement(that.wrapper);\n }\n if (that._state === STATE_FILTER && key === keys.ESC) {\n that._clearFilter();\n }\n if (key === keys.ENTER && that._typingTimeout && that.filterInput && isPopupVisible) {\n e.preventDefault();\n return;\n }\n handled = that._move(e);\n if (handled) {\n return;\n }\n if (!isPopupVisible || !that.filterInput) {\n var current = that._focus();\n if (key === keys.HOME) {\n handled = true;\n that._firstItem();\n } else if (key === keys.END) {\n handled = true;\n that._lastItem();\n }\n if (handled) {\n if (that.trigger('select', {\n dataItem: that._getElementDataItem(that._focus()),\n item: that._focus()\n })) {\n that._focus(current);\n return;\n }\n that._select(that._focus(), true).done(function () {\n if (!isPopupVisible) {\n that._blur();\n }\n });\n e.preventDefault();\n }\n }\n if (!altKey && !handled && that.filterInput) {\n that._search();\n }\n },\n _matchText: function (text, word) {\n var ignoreCase = this.options.ignoreCase;\n if (text === undefined || text === null) {\n return false;\n }\n text = text + '';\n if (ignoreCase) {\n text = text.toLowerCase();\n }\n return text.indexOf(word) === 0;\n },\n _shuffleData: function (data, splitIndex) {\n var optionDataItem = this._optionLabelDataItem();\n if (optionDataItem) {\n data = [optionDataItem].concat(data);\n }\n return data.slice(splitIndex).concat(data.slice(0, splitIndex));\n },\n _selectNext: function () {\n var that = this;\n var data = that.dataSource.flatView();\n var dataLength = data.length + (that.hasOptionLabel() ? 1 : 0);\n var isInLoop = sameCharsOnly(that._word, that._last);\n var startIndex = that.selectedIndex;\n var oldFocusedItem;\n var text;\n if (startIndex === -1) {\n startIndex = 0;\n } else {\n startIndex += isInLoop ? 1 : 0;\n startIndex = normalizeIndex(startIndex, dataLength);\n }\n data = data.toJSON ? data.toJSON() : data.slice();\n data = that._shuffleData(data, startIndex);\n for (var idx = 0; idx < dataLength; idx++) {\n text = that._text(data[idx]);\n if (isInLoop && that._matchText(text, that._last)) {\n break;\n } else if (that._matchText(text, that._word)) {\n break;\n }\n }\n if (idx !== dataLength) {\n oldFocusedItem = that._focus();\n that._select(normalizeIndex(startIndex + idx, dataLength)).done(function () {\n var done = function () {\n if (!that.popup.visible()) {\n that._change();\n }\n };\n if (that.trigger('select', {\n dataItem: that._getElementDataItem(that._focus()),\n item: that._focus()\n })) {\n that._select(oldFocusedItem).done(done);\n } else {\n done();\n }\n });\n }\n },\n _keypress: function (e) {\n var that = this;\n if (e.which === 0 || e.keyCode === kendo.keys.ENTER) {\n return;\n }\n var character = String.fromCharCode(e.charCode || e.keyCode);\n if (that.options.ignoreCase) {\n character = character.toLowerCase();\n }\n if (character === ' ') {\n e.preventDefault();\n }\n that._word += character;\n that._last = character;\n that._search();\n },\n _popupOpen: function () {\n var popup = this.popup;\n popup.wrapper = kendo.wrap(popup.element);\n if (popup.element.closest('.km-root')[0]) {\n popup.wrapper.addClass('km-popup km-widget');\n this.wrapper.addClass('km-widget');\n }\n },\n _popup: function () {\n Select.fn._popup.call(this);\n this.popup.one('open', proxy(this._popupOpen, this));\n },\n _getElementDataItem: function (element) {\n if (!element || !element[0]) {\n return null;\n }\n if (element[0] === this.optionLabel[0]) {\n return this._optionLabelDataItem();\n }\n return this.listView.dataItemByIndex(this.listView.getElementIndex(element));\n },\n _click: function (e) {\n var that = this;\n var item = e.item || $(e.currentTarget);\n e.preventDefault();\n if (that.trigger('select', {\n dataItem: that._getElementDataItem(item),\n item: item\n })) {\n that.close();\n return;\n }\n that._userTriggered = true;\n that._select(item).done(function () {\n that._focusElement(that.wrapper);\n that._blur();\n });\n },\n _focusElement: function (element) {\n var active = activeElement();\n var wrapper = this.wrapper;\n var filterInput = this.filterInput;\n var compareElement = element === filterInput ? wrapper : filterInput;\n var touchEnabled = support.mobileOS && (support.touch || support.MSPointers || support.pointers);\n if (filterInput && filterInput[0] === element[0] && touchEnabled) {\n return;\n }\n if (filterInput && compareElement[0] === active) {\n this._prevent = true;\n this._focused = element.focus();\n }\n },\n _searchByWord: function (word) {\n if (!word) {\n return;\n }\n var that = this;\n var ignoreCase = that.options.ignoreCase;\n if (ignoreCase) {\n word = word.toLowerCase();\n }\n that._select(function (dataItem) {\n return that._matchText(that._text(dataItem), word);\n });\n },\n _inputValue: function () {\n return this.text();\n },\n _search: function () {\n var that = this;\n var dataSource = that.dataSource;\n clearTimeout(that._typingTimeout);\n if (that._isFilterEnabled()) {\n that._typingTimeout = setTimeout(function () {\n var value = that.filterInput.val();\n if (that._prev !== value) {\n that._prev = value;\n that.search(value);\n that._resizeFilterInput();\n }\n that._typingTimeout = null;\n }, that.options.delay);\n } else {\n that._typingTimeout = setTimeout(function () {\n that._word = '';\n }, that.options.delay);\n if (!that.listView.bound()) {\n dataSource.fetch().done(function () {\n that._selectNext();\n });\n return;\n }\n that._selectNext();\n }\n },\n _get: function (candidate) {\n var data, found, idx;\n var isFunction = typeof candidate === 'function';\n var jQueryCandidate = !isFunction ? $(candidate) : $();\n if (this.hasOptionLabel()) {\n if (typeof candidate === 'number') {\n if (candidate > -1) {\n candidate -= 1;\n }\n } else if (jQueryCandidate.hasClass('k-list-optionlabel')) {\n candidate = -1;\n }\n }\n if (isFunction) {\n data = this.dataSource.flatView();\n for (idx = 0; idx < data.length; idx++) {\n if (candidate(data[idx])) {\n candidate = idx;\n found = true;\n break;\n }\n }\n if (!found) {\n candidate = -1;\n }\n }\n return candidate;\n },\n _firstItem: function () {\n if (this.hasOptionLabel()) {\n this._focus(this.optionLabel);\n } else {\n this.listView.focusFirst();\n }\n },\n _lastItem: function () {\n this._resetOptionLabel();\n this.listView.focusLast();\n },\n _nextItem: function () {\n if (this.optionLabel.hasClass('k-state-focused')) {\n this._resetOptionLabel();\n this.listView.focusFirst();\n } else {\n this.listView.focusNext();\n }\n },\n _prevItem: function () {\n if (this.optionLabel.hasClass('k-state-focused')) {\n return;\n }\n this.listView.focusPrev();\n if (!this.listView.focus()) {\n this._focus(this.optionLabel);\n }\n },\n _focusItem: function () {\n var options = this.options;\n var listView = this.listView;\n var focusedItem = listView.focus();\n var index = listView.select();\n index = index[index.length - 1];\n if (index === undefined && options.highlightFirst && !focusedItem) {\n index = 0;\n }\n if (index !== undefined) {\n listView.focus(index);\n } else {\n if (options.optionLabel && (!options.virtual || options.virtual.mapValueTo !== 'dataItem')) {\n this._focus(this.optionLabel);\n this._select(this.optionLabel);\n } else {\n listView.scrollToIndex(0);\n }\n }\n },\n _resetOptionLabel: function (additionalClass) {\n this.optionLabel.removeClass('k-state-focused' + (additionalClass || '')).removeAttr('id');\n },\n _focus: function (candidate) {\n var listView = this.listView;\n var optionLabel = this.optionLabel;\n if (candidate === undefined) {\n candidate = listView.focus();\n if (!candidate && optionLabel.hasClass('k-state-focused')) {\n candidate = optionLabel;\n }\n return candidate;\n }\n this._resetOptionLabel();\n candidate = this._get(candidate);\n listView.focus(candidate);\n if (candidate === -1) {\n optionLabel.addClass('k-state-focused').attr('id', listView._optionID);\n this._focused.add(this.filterInput).removeAttr('aria-activedescendant').attr('aria-activedescendant', listView._optionID);\n }\n },\n _select: function (candidate, keepState) {\n var that = this;\n candidate = that._get(candidate);\n return that.listView.select(candidate).done(function () {\n if (!keepState && that._state === STATE_FILTER) {\n that._state = STATE_ACCEPT;\n }\n if (candidate === -1) {\n that._selectValue(null);\n }\n });\n },\n _selectValue: function (dataItem) {\n var that = this;\n var optionLabel = that.options.optionLabel;\n var idx = that.listView.select();\n var value = '';\n var text = '';\n idx = idx[idx.length - 1];\n if (idx === undefined) {\n idx = -1;\n }\n this._resetOptionLabel(' k-state-selected');\n if (dataItem || dataItem === 0) {\n text = dataItem;\n value = that._dataValue(dataItem);\n if (optionLabel) {\n idx += 1;\n }\n } else if (optionLabel) {\n that._focus(that.optionLabel.addClass('k-state-selected'));\n text = that._optionLabelText();\n if (typeof optionLabel === 'string') {\n value = '';\n } else {\n value = that._value(optionLabel);\n }\n idx = 0;\n }\n that.selectedIndex = idx;\n if (value === null) {\n value = '';\n }\n that._textAccessor(text);\n that._accessor(value, idx);\n that._triggerCascade();\n },\n _mobile: function () {\n var that = this, popup = that.popup, mobileOS = support.mobileOS, root = popup.element.parents('.km-root').eq(0);\n if (root.length && mobileOS) {\n popup.options.animation.open.effects = mobileOS.android || mobileOS.meego ? 'fadeIn' : mobileOS.ios || mobileOS.wp ? 'slideIn:up' : popup.options.animation.open.effects;\n }\n },\n _filterHeader: function () {\n var icon;\n if (this.filterInput) {\n this.filterInput.off(ns).parent().remove();\n this.filterInput = null;\n }\n if (this._isFilterEnabled()) {\n icon = '';\n this.filterInput = $('').attr({\n placeholder: this.element.attr('placeholder'),\n title: this.element.attr('title'),\n role: 'listbox',\n 'aria-haspopup': true,\n 'aria-expanded': false\n });\n this.list.prepend($('').append(this.filterInput.add(icon)));\n }\n },\n _span: function () {\n var that = this, wrapper = that.wrapper, SELECTOR = 'span.k-input', span;\n span = wrapper.find(SELECTOR);\n if (!span[0]) {\n wrapper.append(' ').append(that.element);\n span = wrapper.find(SELECTOR);\n }\n that.span = span;\n that._inputWrapper = $(wrapper[0].firstChild);\n that._arrow = wrapper.find('.k-select');\n that._arrowIcon = that._arrow.find('.k-icon');\n },\n _wrapper: function () {\n var that = this, element = that.element, DOMelement = element[0], wrapper;\n wrapper = element.parent();\n if (!wrapper.is('span.k-widget')) {\n wrapper = element.wrap('').parent();\n wrapper[0].style.cssText = DOMelement.style.cssText;\n wrapper[0].title = DOMelement.title;\n }\n that._focused = that.wrapper = wrapper.addClass('k-widget k-dropdown k-header').addClass(DOMelement.className).css('display', '').attr({\n accesskey: element.attr('accesskey'),\n unselectable: 'on',\n role: 'listbox',\n 'aria-haspopup': true,\n 'aria-expanded': false\n });\n element.hide().removeAttr('accesskey');\n },\n _clearSelection: function (parent) {\n this.select(parent.value() ? 0 : -1);\n },\n _inputTemplate: function () {\n var that = this, template = that.options.valueTemplate;\n if (!template) {\n template = $.proxy(kendo.template('#:this._text(data)#', { useWithBlock: false }), that);\n } else {\n template = kendo.template(template);\n }\n that.valueTemplate = template;\n if (that.hasOptionLabel() && !that.options.optionLabelTemplate) {\n try {\n that.valueTemplate(that._optionLabelDataItem());\n } catch (e) {\n throw new Error(MSG_INVALID_OPTION_LABEL);\n }\n }\n },\n _textAccessor: function (text) {\n var dataItem = null;\n var template = this.valueTemplate;\n var optionLabelText = this._optionLabelText();\n var span = this.span;\n if (text === undefined) {\n return span.text();\n }\n if ($.isPlainObject(text) || text instanceof ObservableObject) {\n dataItem = text;\n } else if (optionLabelText && optionLabelText === text) {\n dataItem = this.options.optionLabel;\n }\n if (!dataItem) {\n dataItem = this._assignInstance(text, this._accessor());\n }\n if (this.hasOptionLabel()) {\n if (dataItem === optionLabelText || this._text(dataItem) === optionLabelText) {\n template = this.optionLabelTemplate;\n if (typeof this.options.optionLabel === 'string' && !this.options.optionLabelTemplate) {\n dataItem = optionLabelText;\n }\n }\n }\n var getElements = function () {\n return {\n elements: span.get(),\n data: [{ dataItem: dataItem }]\n };\n };\n this.angular('cleanup', getElements);\n try {\n span.html(template(dataItem));\n } catch (e) {\n span.html('');\n }\n this.angular('compile', getElements);\n },\n _preselect: function (value, text) {\n if (!value && !text) {\n text = this._optionLabelText();\n }\n this._accessor(value);\n this._textAccessor(text);\n this._old = this._accessor();\n this._oldIndex = this.selectedIndex;\n this.listView.setValue(value);\n this._initialIndex = null;\n this._presetValue = true;\n },\n _assignInstance: function (text, value) {\n var dataTextField = this.options.dataTextField;\n var dataItem = {};\n if (dataTextField) {\n assign(dataItem, dataTextField.split('.'), text);\n assign(dataItem, this.options.dataValueField.split('.'), value);\n dataItem = new ObservableObject(dataItem);\n } else {\n dataItem = text;\n }\n return dataItem;\n }\n });\n function assign(instance, fields, value) {\n var idx = 0, lastIndex = fields.length - 1, field;\n for (; idx < lastIndex; ++idx) {\n field = fields[idx];\n if (!(field in instance)) {\n instance[field] = {};\n }\n instance = instance[field];\n }\n instance[fields[lastIndex]] = value;\n }\n function normalizeIndex(index, length) {\n if (index >= length) {\n index -= length;\n }\n return index;\n }\n function sameCharsOnly(word, character) {\n for (var idx = 0; idx < word.length; idx++) {\n if (word.charAt(idx) !== character) {\n return false;\n }\n }\n return true;\n }\n ui.plugin(DropDownList);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.combobox', [\n 'kendo.list',\n 'kendo.mobile.scroller'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'combobox',\n name: 'ComboBox',\n category: 'web',\n description: 'The ComboBox widget allows the selection from pre-defined values or entering a new value.',\n depends: ['list'],\n features: [\n {\n id: 'mobile-scroller',\n name: 'Mobile scroller',\n description: 'Support for kinetic scrolling in mobile device',\n depends: ['mobile.scroller']\n },\n {\n id: 'virtualization',\n name: 'VirtualList',\n description: 'Support for virtualization',\n depends: ['virtuallist']\n }\n ]\n };\n (function ($, undefined) {\n var kendo = window.kendo, ui = kendo.ui, List = ui.List, Select = ui.Select, caret = kendo.caret, support = kendo.support, placeholderSupported = support.placeholder, activeElement = kendo._activeElement, keys = kendo.keys, ns = '.kendoComboBox', CLICK = 'click' + ns, MOUSEDOWN = 'mousedown' + ns, DISABLED = 'disabled', READONLY = 'readonly', CHANGE = 'change', DEFAULT = 'k-state-default', FOCUSED = 'k-state-focused', STATEDISABLED = 'k-state-disabled', ARIA_DISABLED = 'aria-disabled', STATE_FILTER = 'filter', STATE_ACCEPT = 'accept', STATE_REBIND = 'rebind', HOVEREVENTS = 'mouseenter' + ns + ' mouseleave' + ns, proxy = $.proxy;\n var ComboBox = Select.extend({\n init: function (element, options) {\n var that = this, text, disabled;\n that.ns = ns;\n options = $.isArray(options) ? { dataSource: options } : options;\n Select.fn.init.call(that, element, options);\n options = that.options;\n element = that.element.on('focus' + ns, proxy(that._focusHandler, that));\n options.placeholder = options.placeholder || element.attr('placeholder');\n that._reset();\n that._wrapper();\n that._input();\n that._clearButton();\n that._tabindex(that.input);\n that._popup();\n that._dataSource();\n that._ignoreCase();\n that._enable();\n that._oldIndex = that.selectedIndex = -1;\n that._aria();\n that._initialIndex = options.index;\n that.requireValueMapper(that.options);\n that._initList();\n that._cascade();\n if (options.autoBind) {\n that._filterSource();\n } else {\n text = options.text;\n if (!text && that._isSelect) {\n text = element.children(':selected').text();\n }\n if (text) {\n that._setText(text);\n }\n }\n if (!text) {\n that._placeholder();\n }\n disabled = $(that.element).parents('fieldset').is(':disabled');\n if (disabled) {\n that.enable(false);\n }\n kendo.notify(that);\n that._toggleCloseVisibility();\n },\n options: {\n name: 'ComboBox',\n enabled: true,\n index: -1,\n text: null,\n value: null,\n autoBind: true,\n delay: 200,\n dataTextField: '',\n dataValueField: '',\n minLength: 1,\n enforceMinLength: false,\n height: 200,\n highlightFirst: true,\n filter: 'none',\n placeholder: '',\n suggest: false,\n cascadeFrom: '',\n cascadeFromField: '',\n ignoreCase: true,\n animation: {},\n virtual: false,\n template: null,\n groupTemplate: '#:data#',\n fixedGroupTemplate: '#:data#',\n clearButton: true,\n syncValueAndText: true\n },\n events: [\n 'open',\n 'close',\n CHANGE,\n 'select',\n 'filtering',\n 'dataBinding',\n 'dataBound',\n 'cascade',\n 'set'\n ],\n setOptions: function (options) {\n Select.fn.setOptions.call(this, options);\n this.listView.setOptions(options);\n this._accessors();\n this._aria();\n },\n destroy: function () {\n var that = this;\n that.input.off(ns);\n that.element.off(ns);\n that._inputWrapper.off(ns);\n clearTimeout(that._pasteTimeout);\n that._arrow.off(CLICK + ' ' + MOUSEDOWN);\n that._clear.off(CLICK + ' ' + MOUSEDOWN);\n Select.fn.destroy.call(that);\n },\n _change: function () {\n var that = this;\n var text = that.text();\n var hasText = text && text !== that._oldText && text !== that.options.placeholder;\n var index = that.selectedIndex;\n var isCustom = index === -1;\n if (!that.options.syncValueAndText && !that.value() && isCustom && hasText) {\n that._old = '';\n that._oldIndex = index;\n that._oldText = text;\n if (!that._typing) {\n that.element.trigger(CHANGE);\n }\n that.trigger(CHANGE);\n that._typing = false;\n return;\n }\n Select.fn._change.call(that);\n that._toggleCloseVisibility();\n },\n _focusHandler: function () {\n this.input.focus();\n },\n _arrowClick: function () {\n this._toggle();\n },\n _inputFocus: function () {\n this._inputWrapper.addClass(FOCUSED);\n this._placeholder(false);\n },\n _inputFocusout: function () {\n var that = this;\n var value = that.value();\n that._inputWrapper.removeClass(FOCUSED);\n clearTimeout(that._typingTimeout);\n that._typingTimeout = null;\n that.text(that.text());\n var item = that._focus();\n var dataItem = this.listView.dataItemByIndex(this.listView.getElementIndex(item));\n if (value !== that.value() && that.trigger('select', {\n dataItem: dataItem,\n item: item\n })) {\n that.value(value);\n return;\n }\n that._placeholder();\n that._blur();\n that.element.blur();\n },\n _inputPaste: function () {\n var that = this;\n clearTimeout(that._pasteTimeout);\n that._pasteTimeout = null;\n that._pasteTimeout = setTimeout(function () {\n that.search();\n });\n },\n _editable: function (options) {\n var that = this, disable = options.disable, readonly = options.readonly, wrapper = that._inputWrapper.off(ns), input = that.element.add(that.input.off(ns)), arrow = that._arrow.off(CLICK + ' ' + MOUSEDOWN), clear = that._clear;\n if (!readonly && !disable) {\n wrapper.addClass(DEFAULT).removeClass(STATEDISABLED).on(HOVEREVENTS, that._toggleHover);\n input.removeAttr(DISABLED).removeAttr(READONLY).attr(ARIA_DISABLED, false);\n arrow.on(CLICK, proxy(that._arrowClick, that)).on(MOUSEDOWN, function (e) {\n e.preventDefault();\n });\n clear.on(CLICK, proxy(that._clearValue, that)).on(MOUSEDOWN, function (e) {\n e.preventDefault();\n });\n that.input.on('keydown' + ns, proxy(that._keydown, that)).on('focus' + ns, proxy(that._inputFocus, that)).on('focusout' + ns, proxy(that._inputFocusout, that)).on('paste' + ns, proxy(that._inputPaste, that));\n } else {\n wrapper.addClass(disable ? STATEDISABLED : DEFAULT).removeClass(disable ? DEFAULT : STATEDISABLED);\n input.attr(DISABLED, disable).attr(READONLY, readonly).attr(ARIA_DISABLED, disable);\n }\n },\n open: function () {\n var that = this;\n var state = that._state;\n if (that.popup.visible()) {\n return;\n }\n if (!that.listView.bound() && state !== STATE_FILTER || state === STATE_ACCEPT) {\n that._open = true;\n that._state = STATE_REBIND;\n if (that.options.minLength !== 1) {\n that.refresh();\n that._openPopup();\n } else {\n that._filterSource();\n }\n } else if (that._allowOpening()) {\n that._openPopup();\n that._focusItem();\n }\n },\n _scrollToFocusedItem: function () {\n var listView = this.listView;\n listView.scrollToIndex(listView.getElementIndex(listView.focus()));\n },\n _openPopup: function () {\n this.popup.one('activate', proxy(this._scrollToFocusedItem, this));\n this.popup.open();\n },\n _updateSelectionState: function () {\n var that = this;\n var text = that.options.text;\n var value = that.options.value;\n if (that.listView.isFiltered()) {\n return;\n }\n if (that.selectedIndex === -1) {\n if (text === undefined || text === null) {\n text = value;\n }\n that._accessor(value);\n that.input.val(text || that.input.val());\n that._placeholder();\n } else if (that._oldIndex === -1) {\n that._oldIndex = that.selectedIndex;\n }\n },\n _buildOptions: function (data) {\n var that = this;\n if (!that._isSelect) {\n return;\n }\n var custom = that._customOption;\n if (that._state === STATE_REBIND) {\n that._state = '';\n }\n that._customOption = undefined;\n that._options(data, '', that.value());\n if (custom && custom[0].selected) {\n that._custom(custom.val());\n }\n },\n _updateSelection: function () {\n var that = this;\n var listView = that.listView;\n var initialIndex = that._initialIndex;\n var hasInitialIndex = initialIndex !== null && initialIndex > -1;\n var filtered = that._state === STATE_FILTER;\n if (filtered) {\n $(listView.focus()).removeClass('k-state-selected');\n return;\n }\n if (that._fetch) {\n return;\n }\n if (!listView.value().length) {\n if (hasInitialIndex) {\n that.select(initialIndex);\n } else if (that._accessor()) {\n listView.value(that._accessor());\n }\n }\n that._initialIndex = null;\n var dataItem = listView.selectedDataItems()[0];\n if (!dataItem) {\n return;\n }\n if (that._value(dataItem) !== that.value()) {\n that._custom(that._value(dataItem));\n }\n if (that.text() && that.text() !== that._text(dataItem)) {\n that._selectValue(dataItem);\n }\n },\n _updateItemFocus: function () {\n var listView = this.listView;\n if (!this.options.highlightFirst) {\n listView.focus(-1);\n } else if (!listView.focus() && !listView.focusIndex()) {\n listView.focus(0);\n }\n },\n _listBound: function () {\n var that = this;\n var isActive = that.input[0] === activeElement();\n var data = that.dataSource.flatView();\n var skip = that.listView.skip();\n var length = data.length;\n var groupsLength = that.dataSource._group.length;\n var isFirstPage = skip === undefined || skip === 0;\n that._presetValue = false;\n that._renderFooter();\n that._renderNoData();\n that._toggleNoData(!length);\n that._toggleHeader(!!groupsLength && !!length);\n that._resizePopup();\n that.popup.position();\n that._buildOptions(data);\n that._makeUnselectable();\n that._updateSelection();\n if (data.length && isFirstPage) {\n that._updateItemFocus();\n if (that.options.suggest && isActive && that.input.val()) {\n that.suggest(data[0]);\n }\n }\n if (that._open) {\n that._open = false;\n if (that._typingTimeout && !isActive) {\n that.popup.close();\n } else {\n that.toggle(that._allowOpening());\n }\n that._typingTimeout = null;\n }\n that._hideBusy();\n that.trigger('dataBound');\n },\n _listChange: function () {\n this._selectValue(this.listView.selectedDataItems()[0]);\n if (this._presetValue) {\n this._oldIndex = this.selectedIndex;\n }\n },\n _get: function (candidate) {\n var data, found, idx;\n if (typeof candidate === 'function') {\n data = this.dataSource.flatView();\n for (idx = 0; idx < data.length; idx++) {\n if (candidate(data[idx])) {\n candidate = idx;\n found = true;\n break;\n }\n }\n if (!found) {\n candidate = -1;\n }\n }\n return candidate;\n },\n _select: function (candidate, keepState) {\n var that = this;\n candidate = that._get(candidate);\n if (candidate === -1) {\n that.input[0].value = '';\n that._accessor('');\n }\n return that.listView.select(candidate).done(function () {\n if (!keepState && that._state === STATE_FILTER) {\n that._state = STATE_ACCEPT;\n }\n });\n },\n _selectValue: function (dataItem) {\n var idx = this.listView.select();\n var value = '';\n var text = '';\n idx = idx[idx.length - 1];\n if (idx === undefined) {\n idx = -1;\n }\n this.selectedIndex = idx;\n if (idx === -1 && !dataItem) {\n text = this.input[0].value;\n if (this.options.syncValueAndText) {\n value = text;\n }\n this.listView.focus(-1);\n } else {\n if (dataItem || dataItem === 0) {\n value = this._dataValue(dataItem);\n text = this._text(dataItem);\n }\n if (value === null) {\n value = '';\n }\n }\n this._setDomInputValue(text);\n this._accessor(value !== undefined ? value : text, idx);\n this._placeholder();\n this._triggerCascade();\n },\n _setDomInputValue: function (text) {\n var that = this;\n var currentCaret = caret(this.input);\n var caretStart;\n if (currentCaret && currentCaret.length) {\n caretStart = currentCaret[0];\n }\n this._prev = this.input[0].value = text;\n if (caretStart && this.selectedIndex === -1) {\n var mobile = support.mobileOS;\n if (mobile.wp || mobile.android) {\n setTimeout(function () {\n that.input[0].setSelectionRange(caretStart, caretStart);\n }, 0);\n } else {\n this.input[0].setSelectionRange(caretStart, caretStart);\n }\n }\n },\n refresh: function () {\n this.listView.refresh();\n },\n _toggleCloseVisibility: function () {\n if (this.text()) {\n this._showClear();\n } else {\n this._hideClear();\n }\n },\n suggest: function (word) {\n var that = this;\n var element = that.input[0];\n var value = that.text();\n var caretIdx = caret(element)[0];\n var key = that._last;\n var idx;\n if (key == keys.BACKSPACE || key == keys.DELETE) {\n that._last = undefined;\n return;\n }\n word = word || '';\n if (typeof word !== 'string') {\n if (word[0]) {\n word = that.dataSource.view()[List.inArray(word[0], that.ul[0])];\n }\n word = word ? that._text(word) : '';\n }\n if (caretIdx <= 0) {\n caretIdx = value.toLowerCase().indexOf(word.toLowerCase()) + 1;\n }\n if (word) {\n word = word.toString();\n idx = word.toLowerCase().indexOf(value.toLowerCase());\n if (idx > -1) {\n value += word.substring(idx + value.length);\n }\n } else {\n value = value.substring(0, caretIdx);\n }\n if (value.length !== caretIdx || !word) {\n element.value = value;\n if (element === activeElement()) {\n caret(element, caretIdx, value.length);\n }\n }\n },\n text: function (text) {\n text = text === null ? '' : text;\n var that = this;\n var input = that.input[0];\n var ignoreCase = that.options.ignoreCase;\n var loweredText = text;\n var dataItem;\n var value;\n if (text === undefined) {\n return input.value;\n }\n if (that.options.autoBind === false && !that.listView.bound()) {\n that._setText(text);\n return;\n }\n dataItem = that.dataItem();\n if (dataItem && that._text(dataItem) === text) {\n value = that._value(dataItem);\n if (value === List.unifyType(that._old, typeof value)) {\n that._triggerCascade();\n return;\n }\n }\n if (ignoreCase && !that.listView.value().length) {\n loweredText = loweredText.toLowerCase();\n }\n that._select(function (data) {\n data = that._text(data);\n if (ignoreCase && !that.listView.value().length) {\n data = (data + '').toLowerCase();\n }\n return data === loweredText;\n }).done(function () {\n if (that.selectedIndex < 0) {\n input.value = text;\n if (that.options.syncValueAndText) {\n that._accessor(text);\n }\n that._triggerCascade();\n }\n that._prev = input.value;\n });\n },\n toggle: function (toggle) {\n this._toggle(toggle, true);\n },\n value: function (value) {\n var that = this;\n var options = that.options;\n var listView = that.listView;\n if (value === undefined) {\n value = that._accessor() || that.listView.value()[0];\n return value === undefined || value === null ? '' : value;\n }\n that.requireValueMapper(that.options, value);\n that.trigger('set', { value: value });\n if (value === options.value && that.input.val() === options.text) {\n return;\n }\n that._accessor(value);\n if (that._isFilterEnabled() && listView.bound() && listView.isFiltered()) {\n that._clearFilter();\n } else {\n that._fetchData();\n }\n listView.value(value).done(function () {\n if (that.selectedIndex === -1) {\n that._accessor(value);\n that.input.val(value);\n that._placeholder(true);\n }\n that._old = that._accessor();\n that._oldIndex = that.selectedIndex;\n that._prev = that.input.val();\n if (that._state === STATE_FILTER) {\n that._state = STATE_ACCEPT;\n }\n });\n },\n _click: function (e) {\n var that = this;\n var item = e.item;\n var dataItem = that.listView.dataItemByIndex(that.listView.getElementIndex(item));\n e.preventDefault();\n if (that.trigger('select', {\n dataItem: dataItem,\n item: item\n })) {\n that.close();\n return;\n }\n that._userTriggered = true;\n that._select(item).done(function () {\n that._blur();\n });\n },\n _inputValue: function () {\n return this.text();\n },\n _searchByWord: function (word) {\n var that = this;\n var options = that.options;\n var dataSource = that.dataSource;\n var ignoreCase = options.ignoreCase;\n var predicate = function (dataItem) {\n var text = that._text(dataItem);\n if (text !== undefined) {\n text = text + '';\n if (text !== '' && word === '') {\n return false;\n }\n if (ignoreCase) {\n text = text.toLowerCase();\n }\n return text.indexOf(word) === 0;\n }\n };\n if (ignoreCase) {\n word = word.toLowerCase();\n }\n if (!that.ul[0].firstChild) {\n dataSource.one(CHANGE, function () {\n if (dataSource.view()[0]) {\n that.search(word);\n }\n }).fetch();\n return;\n }\n this.listView.focus(this._get(predicate));\n var current = this.listView.focus();\n if (current) {\n if (options.suggest) {\n that.suggest(current);\n }\n this.open();\n }\n if (this.options.highlightFirst && !word) {\n this.listView.focusFirst();\n }\n },\n _input: function () {\n var that = this, element = that.element.removeClass('k-input')[0], accessKey = element.accessKey, wrapper = that.wrapper, SELECTOR = 'input.k-input', name = element.name || '', input, maxLength;\n if (name) {\n name = 'name=\"' + name + '_input\" ';\n }\n input = wrapper.find(SELECTOR);\n if (!input[0]) {\n wrapper.append('').append(that.element);\n input = wrapper.find(SELECTOR);\n }\n input[0].style.cssText = element.style.cssText;\n input[0].title = element.title;\n maxLength = parseInt(this.element.prop('maxlength') || this.element.attr('maxlength'), 10);\n if (maxLength > -1) {\n input[0].maxLength = maxLength;\n }\n input.addClass(element.className).css({\n width: '100%',\n height: element.style.height\n }).attr({\n 'role': 'combobox',\n 'aria-expanded': false\n }).show();\n if (placeholderSupported) {\n input.attr('placeholder', that.options.placeholder);\n }\n if (accessKey) {\n element.accessKey = '';\n input[0].accessKey = accessKey;\n }\n that._focused = that.input = input;\n that._inputWrapper = $(wrapper[0].firstChild);\n that._arrow = wrapper.find('.k-select').attr({\n 'role': 'button',\n 'tabIndex': -1\n });\n that._arrowIcon = that._arrow.find('.k-icon');\n if (element.id) {\n that._arrow.attr('aria-controls', that.ul[0].id);\n }\n },\n _clearButton: function () {\n this._clear = $('').attr({\n 'role': 'button',\n 'tabIndex': -1\n });\n if (this.options.clearButton) {\n this._clear.insertAfter(this.input);\n this.wrapper.addClass('k-combobox-clearable');\n }\n },\n _keydown: function (e) {\n var that = this, key = e.keyCode;\n that._last = key;\n clearTimeout(that._typingTimeout);\n that._typingTimeout = null;\n if (key != keys.TAB && !that._move(e)) {\n that._search();\n }\n },\n _placeholder: function (show) {\n if (placeholderSupported) {\n return;\n }\n var that = this, input = that.input, placeholder = that.options.placeholder, value;\n if (placeholder) {\n value = that.value();\n if (show === undefined) {\n show = !value;\n }\n input.toggleClass('k-readonly', show);\n if (!show) {\n if (!value) {\n placeholder = '';\n } else {\n return;\n }\n }\n input.val(placeholder);\n if (!placeholder && input[0] === activeElement()) {\n caret(input[0], 0, 0);\n }\n }\n },\n _search: function () {\n var that = this;\n that._typingTimeout = setTimeout(function () {\n var value = that.text();\n if (that._prev !== value) {\n that._prev = value;\n if (that.options.filter === 'none') {\n that.listView.select(-1);\n }\n that.search(value);\n that._toggleCloseVisibility();\n }\n that._typingTimeout = null;\n }, that.options.delay);\n },\n _setText: function (text) {\n this.input.val(text);\n this._prev = text;\n },\n _wrapper: function () {\n var that = this, element = that.element, wrapper = element.parent();\n if (!wrapper.is('span.k-widget')) {\n wrapper = element.hide().wrap('').parent();\n wrapper[0].style.cssText = element[0].style.cssText;\n }\n that.wrapper = wrapper.addClass('k-widget k-combobox k-header').addClass(element[0].className).css('display', '');\n },\n _clearSelection: function (parent, isFiltered) {\n var that = this;\n var hasValue = parent.value();\n var custom = hasValue && parent.selectedIndex === -1;\n if (this.selectedIndex == -1 && this.value()) {\n return;\n }\n if (isFiltered || !hasValue || custom) {\n that.options.value = '';\n that.value('');\n }\n },\n _preselect: function (value, text) {\n this.input.val(text);\n this._accessor(value);\n this._old = this._accessor();\n this._oldIndex = this.selectedIndex;\n this.listView.setValue(value);\n this._placeholder();\n this._initialIndex = null;\n this._presetValue = true;\n }\n });\n ui.plugin(ComboBox);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.multiselect', [\n 'kendo.list',\n 'kendo.mobile.scroller'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'multiselect',\n name: 'MultiSelect',\n category: 'web',\n description: 'The MultiSelect widget allows the selection from pre-defined values.',\n depends: ['list'],\n features: [\n {\n id: 'mobile-scroller',\n name: 'Mobile scroller',\n description: 'Support for kinetic scrolling in mobile device',\n depends: ['mobile.scroller']\n },\n {\n id: 'virtualization',\n name: 'VirtualList',\n description: 'Support for virtualization',\n depends: ['virtuallist']\n }\n ]\n };\n (function ($, undefined) {\n var kendo = window.kendo, ui = kendo.ui, List = ui.List, keys = kendo.keys, activeElement = kendo._activeElement, ObservableArray = kendo.data.ObservableArray, proxy = $.proxy, ID = 'id', LI = 'li', ACCEPT = 'accept', FILTER = 'filter', REBIND = 'rebind', OPEN = 'open', CLOSE = 'close', CHANGE = 'change', PROGRESS = 'progress', SELECT = 'select', DESELECT = 'deselect', ARIA_DISABLED = 'aria-disabled', FOCUSEDCLASS = 'k-state-focused', HIDDENCLASS = 'k-hidden', HOVERCLASS = 'k-state-hover', STATEDISABLED = 'k-state-disabled', DISABLED = 'disabled', READONLY = 'readonly', ns = '.kendoMultiSelect', CLICK = 'click' + ns, KEYDOWN = 'keydown' + ns, MOUSEENTER = 'mouseenter' + ns, MOUSELEAVE = 'mouseleave' + ns, HOVEREVENTS = MOUSEENTER + ' ' + MOUSELEAVE, quotRegExp = /\"/g, isArray = $.isArray, styles = [\n 'font-family',\n 'font-size',\n 'font-stretch',\n 'font-style',\n 'font-weight',\n 'letter-spacing',\n 'text-transform',\n 'line-height'\n ];\n var MultiSelect = List.extend({\n init: function (element, options) {\n var that = this, id, disabled;\n that.ns = ns;\n List.fn.init.call(that, element, options);\n that._optionsMap = {};\n that._customOptions = {};\n that._wrapper();\n that._tagList();\n that._input();\n that._textContainer();\n that._loader();\n that._clearButton();\n that._tabindex(that.input);\n element = that.element.attr('multiple', 'multiple').hide();\n options = that.options;\n if (!options.placeholder) {\n options.placeholder = element.data('placeholder');\n }\n id = element.attr(ID);\n if (id) {\n that._tagID = id + '_tag_active';\n id = id + '_taglist';\n that.tagList.attr(ID, id);\n }\n that._aria(id);\n that._dataSource();\n that._ignoreCase();\n that._popup();\n that._tagTemplate();\n that.requireValueMapper(that.options);\n that._initList();\n that._reset();\n that._enable();\n that._placeholder();\n if (options.autoBind) {\n that.dataSource.fetch();\n } else if (options.value) {\n that._preselect(options.value);\n }\n disabled = $(that.element).parents('fieldset').is(':disabled');\n if (disabled) {\n that.enable(false);\n }\n kendo.notify(that);\n that._toggleCloseVisibility();\n },\n options: {\n name: 'MultiSelect',\n tagMode: 'multiple',\n enabled: true,\n autoBind: true,\n autoClose: true,\n highlightFirst: true,\n dataTextField: '',\n dataValueField: '',\n filter: 'startswith',\n ignoreCase: true,\n minLength: 1,\n enforceMinLength: false,\n delay: 100,\n value: null,\n maxSelectedItems: null,\n placeholder: '',\n height: 200,\n animation: {},\n virtual: false,\n itemTemplate: '',\n tagTemplate: '',\n groupTemplate: '#:data#',\n fixedGroupTemplate: '#:data#',\n clearButton: true\n },\n events: [\n OPEN,\n CLOSE,\n CHANGE,\n SELECT,\n DESELECT,\n 'filtering',\n 'dataBinding',\n 'dataBound'\n ],\n setDataSource: function (dataSource) {\n this.options.dataSource = dataSource;\n this._state = '';\n this._dataSource();\n this.listView.setDataSource(this.dataSource);\n if (this.options.autoBind) {\n this.dataSource.fetch();\n }\n },\n setOptions: function (options) {\n var listOptions = this._listOptions(options);\n List.fn.setOptions.call(this, options);\n this.listView.setOptions(listOptions);\n this._accessors();\n this._aria(this.tagList.attr(ID));\n this._tagTemplate();\n },\n currentTag: function (candidate) {\n var that = this;\n if (candidate !== undefined) {\n if (that._currentTag) {\n that._currentTag.removeClass(FOCUSEDCLASS).removeAttr(ID);\n that.input.removeAttr('aria-activedescendant');\n }\n if (candidate) {\n candidate.addClass(FOCUSEDCLASS).attr(ID, that._tagID);\n that.input.attr('aria-activedescendant', that._tagID);\n }\n that._currentTag = candidate;\n } else {\n return that._currentTag;\n }\n },\n dataItems: function () {\n return this.listView.selectedDataItems();\n },\n destroy: function () {\n var that = this, ns = that.ns;\n clearTimeout(that._busy);\n clearTimeout(that._typingTimeout);\n that.wrapper.off(ns);\n that.tagList.off(ns);\n that.input.off(ns);\n that._clear.off(ns);\n List.fn.destroy.call(that);\n },\n _activateItem: function () {\n List.fn._activateItem.call(this);\n this.currentTag(null);\n },\n _listOptions: function (options) {\n var that = this;\n var listOptions = List.fn._listOptions.call(that, $.extend(options, {\n selectedItemChange: proxy(that._selectedItemChange, that),\n selectable: 'multiple'\n }));\n var itemTemplate = this.options.itemTemplate || this.options.template;\n var template = listOptions.itemTemplate || itemTemplate || listOptions.template;\n if (!template) {\n template = '#:' + kendo.expr(listOptions.dataTextField, 'data') + '#';\n }\n listOptions.template = template;\n return listOptions;\n },\n _setListValue: function () {\n List.fn._setListValue.call(this, this._initialValues.slice(0));\n },\n _listChange: function (e) {\n var data = this.dataSource.flatView();\n var optionsMap = this._optionsMap;\n var valueGetter = this._value;\n if (this._state === REBIND) {\n this._state = '';\n }\n for (var i = 0; i < e.added.length; i++) {\n if (optionsMap[valueGetter(e.added[i].dataItem)] === undefined) {\n this._render(data);\n break;\n }\n }\n this._selectValue(e.added, e.removed);\n },\n _selectedItemChange: function (e) {\n var items = e.items;\n var context;\n var idx;\n for (idx = 0; idx < items.length; idx++) {\n context = items[idx];\n this.tagList.children().eq(context.index).children('span:first').html(this.tagTextTemplate(context.item));\n }\n },\n _wrapperMousedown: function (e) {\n var that = this;\n var notInput = e.target.nodeName.toLowerCase() !== 'input';\n var target = $(e.target);\n var closeButton = target.hasClass('k-select') || target.hasClass('k-icon');\n if (closeButton) {\n closeButton = !target.closest('.k-select').children('.k-i-arrow-60-down').length;\n }\n if (notInput && !(closeButton && kendo.support.mobileOS)) {\n e.preventDefault();\n }\n if (!closeButton) {\n if (that.input[0] !== activeElement() && notInput) {\n that.input.focus();\n }\n if (that.options.minLength === 1) {\n that.open();\n }\n }\n },\n _inputFocus: function () {\n this._placeholder(false);\n this.wrapper.addClass(FOCUSEDCLASS);\n },\n _inputFocusout: function () {\n var that = this;\n clearTimeout(that._typingTimeout);\n that.wrapper.removeClass(FOCUSEDCLASS);\n that._placeholder(!that.listView.selectedDataItems()[0], true);\n that.close();\n if (that._state === FILTER) {\n that._state = ACCEPT;\n that.listView.skipUpdate(true);\n }\n that.element.blur();\n },\n _removeTag: function (tag) {\n var that = this;\n var state = that._state;\n var position = tag.index();\n var listView = that.listView;\n var value = listView.value()[position];\n var dataItem = that.listView.selectedDataItems()[position];\n var customIndex = that._customOptions[value];\n var option;\n if (that.trigger(DESELECT, {\n dataItem: dataItem,\n item: tag\n })) {\n that._close();\n return;\n }\n if (customIndex === undefined && (state === ACCEPT || state === FILTER)) {\n customIndex = that._optionsMap[value];\n }\n var done = function () {\n that.currentTag(null);\n that._change();\n that._close();\n };\n if (customIndex === undefined) {\n listView.select(listView.select()[position]).done(done);\n } else {\n option = that.element[0].children[customIndex];\n option.selected = false;\n listView.removeAt(position);\n tag.remove();\n done();\n }\n },\n _tagListClick: function (e) {\n var target = $(e.currentTarget);\n if (!target.children('.k-i-arrow-60-down').length) {\n this._removeTag(target.closest(LI));\n }\n },\n _clearClick: function () {\n var that = this;\n that.tagList.children().each(function (index, tag) {\n that._removeTag($(tag));\n });\n that.input.val('');\n that._search();\n that.trigger('change');\n that.focus();\n },\n _editable: function (options) {\n var that = this, disable = options.disable, readonly = options.readonly, wrapper = that.wrapper.off(ns), tagList = that.tagList.off(ns), input = that.element.add(that.input.off(ns));\n if (!readonly && !disable) {\n wrapper.removeClass(STATEDISABLED).on(HOVEREVENTS, that._toggleHover).on('mousedown' + ns + ' touchend' + ns, proxy(that._wrapperMousedown, that));\n that.input.on(KEYDOWN, proxy(that._keydown, that)).on('paste' + ns, proxy(that._search, that)).on('focus' + ns, proxy(that._inputFocus, that)).on('focusout' + ns, proxy(that._inputFocusout, that));\n that._clear.on('click' + ns, proxy(that._clearClick, that));\n input.removeAttr(DISABLED).removeAttr(READONLY).attr(ARIA_DISABLED, false);\n tagList.on(MOUSEENTER, LI, function () {\n $(this).addClass(HOVERCLASS);\n }).on(MOUSELEAVE, LI, function () {\n $(this).removeClass(HOVERCLASS);\n }).on(CLICK, 'li.k-button .k-select', proxy(that._tagListClick, that));\n } else {\n if (disable) {\n wrapper.addClass(STATEDISABLED);\n } else {\n wrapper.removeClass(STATEDISABLED);\n }\n input.attr(DISABLED, disable).attr(READONLY, readonly).attr(ARIA_DISABLED, disable);\n }\n },\n _close: function () {\n var that = this;\n if (that.options.autoClose) {\n that.close();\n } else {\n that.popup.position();\n }\n },\n _filterSource: function (filter, force) {\n if (!force) {\n force = this._retrieveData;\n }\n this._retrieveData = false;\n List.fn._filterSource.call(this, filter, force);\n },\n close: function () {\n this.popup.close();\n },\n open: function () {\n var that = this;\n if (that._request) {\n that._retrieveData = false;\n }\n if (that._retrieveData || !that.listView.bound() || that._state === ACCEPT) {\n that._open = true;\n that._state = REBIND;\n that.listView.skipUpdate(true);\n that._filterSource();\n } else if (that._allowOpening()) {\n that.popup.open();\n that._focusItem();\n }\n },\n toggle: function (toggle) {\n toggle = toggle !== undefined ? toggle : !this.popup.visible();\n this[toggle ? OPEN : CLOSE]();\n },\n refresh: function () {\n this.listView.refresh();\n },\n _listBound: function () {\n var that = this;\n var data = that.dataSource.flatView();\n var skip = that.listView.skip();\n that._render(data);\n that._renderFooter();\n that._renderNoData();\n that._toggleNoData(!data.length);\n that._resizePopup();\n if (that._open) {\n that._open = false;\n that.toggle(that._allowOpening());\n }\n that.popup.position();\n if (that.options.highlightFirst && (skip === undefined || skip === 0)) {\n that.listView.focusFirst();\n }\n if (that._touchScroller) {\n that._touchScroller.reset();\n }\n that._hideBusy();\n that._makeUnselectable();\n that.trigger('dataBound');\n },\n _inputValue: function () {\n var that = this;\n var inputValue = that.input.val();\n if (that.options.placeholder === inputValue) {\n inputValue = '';\n }\n return inputValue;\n },\n value: function (value) {\n var that = this;\n var listView = that.listView;\n var oldValue = listView.value().slice();\n var maxSelectedItems = that.options.maxSelectedItems;\n var clearFilters = listView.bound() && listView.isFiltered();\n if (value === undefined) {\n return oldValue;\n }\n that.requireValueMapper(that.options, value);\n value = that._normalizeValues(value);\n if (maxSelectedItems !== null && value.length > maxSelectedItems) {\n value = value.slice(0, maxSelectedItems);\n }\n if (clearFilters) {\n that._clearFilter();\n }\n listView.value(value);\n that._old = listView.value();\n if (!clearFilters) {\n that._fetchData();\n }\n },\n _preselect: function (data, value) {\n var that = this;\n if (!isArray(data) && !(data instanceof kendo.data.ObservableArray)) {\n data = [data];\n }\n if ($.isPlainObject(data[0]) || data[0] instanceof kendo.data.ObservableObject || !that.options.dataValueField) {\n that.dataSource.data(data);\n that.value(value || that._initialValues);\n that._retrieveData = true;\n }\n },\n _setOption: function (value, selected) {\n var option = this.element[0].children[this._optionsMap[value]];\n if (option) {\n option.selected = selected;\n }\n },\n _fetchData: function () {\n var that = this;\n var hasItems = !!that.dataSource.view().length;\n var isEmptyArray = that.listView.value().length === 0;\n if (isEmptyArray || that._request) {\n return;\n }\n if (that._retrieveData || !that._fetch && !hasItems) {\n that._fetch = true;\n that._retrieveData = false;\n that.dataSource.read().done(function () {\n that._fetch = false;\n });\n }\n },\n _isBound: function () {\n return this.listView.bound() && !this._retrieveData;\n },\n _dataSource: function () {\n var that = this, element = that.element, options = that.options, dataSource = options.dataSource || {};\n dataSource = isArray(dataSource) ? { data: dataSource } : dataSource;\n dataSource.select = element;\n dataSource.fields = [\n { field: options.dataTextField },\n { field: options.dataValueField }\n ];\n if (that.dataSource && that._refreshHandler) {\n that._unbindDataSource();\n } else {\n that._progressHandler = proxy(that._showBusy, that);\n that._errorHandler = proxy(that._hideBusy, that);\n }\n that.dataSource = kendo.data.DataSource.create(dataSource).bind(PROGRESS, that._progressHandler).bind('error', that._errorHandler);\n },\n _reset: function () {\n var that = this, element = that.element, formId = element.attr('form'), form = formId ? $('#' + formId) : element.closest('form');\n if (form[0]) {\n that._resetHandler = function () {\n setTimeout(function () {\n that.value(that._initialValues);\n that._placeholder();\n });\n };\n that._form = form.on('reset', that._resetHandler);\n }\n },\n _initValue: function () {\n var value = this.options.value || this.element.val();\n this._old = this._initialValues = this._normalizeValues(value);\n },\n _normalizeValues: function (value) {\n var that = this;\n if (value === null) {\n value = [];\n } else if (value && $.isPlainObject(value)) {\n value = [that._value(value)];\n } else if (value && $.isPlainObject(value[0])) {\n value = $.map(value, function (dataItem) {\n return that._value(dataItem);\n });\n } else if (!isArray(value) && !(value instanceof ObservableArray)) {\n value = [value];\n } else if (isArray(value)) {\n value = value.slice();\n }\n return value;\n },\n _change: function () {\n var that = this, value = that.value();\n if (!compare(value, that._old)) {\n that._old = value.slice();\n that.trigger(CHANGE);\n that.element.trigger(CHANGE);\n }\n that._toggleCloseVisibility();\n },\n _click: function (e) {\n var that = this;\n var item = e.item;\n e.preventDefault();\n that._select(item).done(function () {\n that._change();\n that._close();\n });\n },\n _keydown: function (e) {\n var that = this;\n var key = e.keyCode;\n var tag = that._currentTag;\n var listView = that.listView;\n var current = listView.focus();\n var hasValue = that.input.val();\n var isRtl = kendo.support.isRtl(that.wrapper);\n var visible = that.popup.visible();\n if (key === keys.DOWN) {\n e.preventDefault();\n if (!visible) {\n that.open();\n if (!current) {\n listView.focusFirst();\n }\n return;\n }\n if (current) {\n listView.focusNext();\n if (!listView.focus()) {\n listView.focusLast();\n }\n } else {\n listView.focusFirst();\n }\n } else if (key === keys.UP) {\n if (visible) {\n if (current) {\n listView.focusPrev();\n }\n if (!listView.focus()) {\n that.close();\n }\n }\n e.preventDefault();\n } else if (key === keys.LEFT && !isRtl || key === keys.RIGHT && isRtl) {\n if (!hasValue) {\n tag = tag ? tag.prev() : $(that.tagList[0].lastChild);\n if (tag[0]) {\n that.currentTag(tag);\n }\n }\n } else if (key === keys.RIGHT && !isRtl || key === keys.LEFT && isRtl) {\n if (!hasValue && tag) {\n tag = tag.next();\n that.currentTag(tag[0] ? tag : null);\n }\n } else if (key === keys.ENTER && visible) {\n that._select(current).done(function () {\n that._change();\n that._close();\n });\n e.preventDefault();\n } else if (key === keys.ESC) {\n if (visible) {\n e.preventDefault();\n } else {\n that.currentTag(null);\n }\n that.close();\n } else if (key === keys.HOME) {\n if (visible) {\n listView.focusFirst();\n } else if (!hasValue) {\n tag = that.tagList[0].firstChild;\n if (tag) {\n that.currentTag($(tag));\n }\n }\n } else if (key === keys.END) {\n if (visible) {\n listView.focusLast();\n } else if (!hasValue) {\n tag = that.tagList[0].lastChild;\n if (tag) {\n that.currentTag($(tag));\n }\n }\n } else if ((key === keys.DELETE || key === keys.BACKSPACE) && !hasValue) {\n if (that.options.tagMode === 'single') {\n listView.value([]);\n that._change();\n that._close();\n return;\n }\n if (key === keys.BACKSPACE && !tag) {\n tag = $(that.tagList[0].lastChild);\n }\n if (tag && tag[0]) {\n that._removeTag(tag);\n }\n } else if (that.popup.visible() && (key === keys.PAGEDOWN || key === keys.PAGEUP)) {\n e.preventDefault();\n var direction = key === keys.PAGEDOWN ? 1 : -1;\n listView.scrollWith(direction * listView.screenHeight());\n } else {\n clearTimeout(that._typingTimeout);\n setTimeout(function () {\n that._scale();\n });\n that._search();\n }\n },\n _hideBusy: function () {\n var that = this;\n clearTimeout(that._busy);\n that.input.attr('aria-busy', false);\n that._loading.addClass(HIDDENCLASS);\n that._request = false;\n that._busy = null;\n that._showClear();\n },\n _showBusyHandler: function () {\n this.input.attr('aria-busy', true);\n this._loading.removeClass(HIDDENCLASS);\n this._hideClear();\n },\n _showBusy: function () {\n var that = this;\n that._request = true;\n if (that._busy) {\n return;\n }\n that._busy = setTimeout(proxy(that._showBusyHandler, that), 100);\n },\n _placeholder: function (show, skipCaret) {\n var that = this;\n var input = that.input;\n var active = activeElement();\n var placeholder = that.options.placeholder;\n var inputValue = input.val();\n var isActive = input[0] === active;\n var caretPos = inputValue.length;\n if (!isActive || that.options.autoClose || inputValue === placeholder) {\n caretPos = 0;\n inputValue = '';\n }\n if (show === undefined) {\n show = false;\n if (input[0] !== active) {\n show = !that.listView.selectedDataItems()[0];\n }\n }\n that._prev = inputValue;\n input.toggleClass('k-readonly', show).val(show ? placeholder : inputValue);\n if (isActive && !skipCaret) {\n kendo.caret(input[0], caretPos, caretPos);\n }\n that._scale();\n },\n _scale: function () {\n var that = this, wrapper = that.wrapper, wrapperWidth = wrapper.width(), span = that._span.text(that.input.val()), textWidth;\n if (!wrapper.is(':visible')) {\n span.appendTo(document.documentElement);\n wrapperWidth = textWidth = span.width() + 25;\n span.appendTo(wrapper);\n } else {\n textWidth = span.width() + 25;\n }\n that.input.width(textWidth > wrapperWidth ? wrapperWidth : textWidth);\n },\n _option: function (dataValue, dataText, selected) {\n var option = ' this.listView.value().length;\n },\n _angularTagItems: function (cmd) {\n var that = this;\n that.angular(cmd, function () {\n return {\n elements: that.tagList[0].children,\n data: $.map(that.dataItems(), function (dataItem) {\n return { dataItem: dataItem };\n })\n };\n });\n },\n _selectValue: function (added, removed) {\n var that = this;\n var values = that.value();\n var total = that.dataSource.total();\n var tagList = that.tagList;\n var getter = that._value;\n var removedItem;\n var addedItem;\n var idx;\n that._angularTagItems('cleanup');\n if (that.options.tagMode === 'multiple') {\n for (idx = removed.length - 1; idx > -1; idx--) {\n removedItem = removed[idx];\n tagList[0].removeChild(tagList[0].children[removedItem.position]);\n that._setOption(getter(removedItem.dataItem), false);\n }\n for (idx = 0; idx < added.length; idx++) {\n addedItem = added[idx];\n tagList.append(that.tagTemplate(addedItem.dataItem));\n that._setOption(getter(addedItem.dataItem), true);\n }\n } else {\n if (!that._maxTotal || that._maxTotal < total) {\n that._maxTotal = total;\n }\n tagList.html('');\n if (values.length) {\n tagList.append(that.tagTemplate({\n values: values,\n dataItems: that.dataItems(),\n maxTotal: that._maxTotal,\n currentTotal: total\n }));\n }\n for (idx = removed.length - 1; idx > -1; idx--) {\n that._setOption(getter(removed[idx].dataItem), false);\n }\n for (idx = 0; idx < added.length; idx++) {\n that._setOption(getter(added[idx].dataItem), true);\n }\n }\n that._angularTagItems('compile');\n that._placeholder();\n },\n _select: function (candidate) {\n var resolved = $.Deferred().resolve();\n if (!candidate) {\n return resolved;\n }\n var that = this;\n var listView = that.listView;\n var dataItem = listView.dataItemByIndex(listView.getElementIndex(candidate));\n var isSelected = candidate.hasClass('k-state-selected');\n if (that._state === REBIND) {\n that._state = '';\n }\n if (!that._allowSelection()) {\n return resolved;\n }\n if (that.trigger(isSelected ? DESELECT : SELECT, {\n dataItem: dataItem,\n item: candidate\n })) {\n that._close();\n return resolved;\n }\n return listView.select(candidate).done(function () {\n that._placeholder();\n if (that._state === FILTER) {\n that._state = ACCEPT;\n listView.skipUpdate(true);\n }\n });\n },\n _input: function () {\n var that = this;\n var element = that.element;\n var accessKey = element[0].accessKey;\n var input = that._innerWrapper.children('input.k-input');\n if (!input[0]) {\n input = $('').appendTo(that._innerWrapper);\n }\n element.removeAttr('accesskey');\n that._focused = that.input = input.attr({\n 'accesskey': accessKey,\n 'autocomplete': 'off',\n 'role': 'listbox',\n 'title': element[0].title,\n 'aria-expanded': false\n });\n },\n _tagList: function () {\n var that = this, tagList = that._innerWrapper.children('ul');\n if (!tagList[0]) {\n tagList = $('
              ').appendTo(that._innerWrapper);\n }\n that.tagList = tagList;\n },\n _tagTemplate: function () {\n var that = this;\n var options = that.options;\n var tagTemplate = options.tagTemplate;\n var hasDataSource = options.dataSource;\n var isMultiple = options.tagMode === 'multiple';\n var defaultTemplate;\n if (that.element[0].length && !hasDataSource) {\n options.dataTextField = options.dataTextField || 'text';\n options.dataValueField = options.dataValueField || 'value';\n }\n defaultTemplate = isMultiple ? kendo.template('#:' + kendo.expr(options.dataTextField, 'data') + '#', { useWithBlock: false }) : kendo.template('#:values.length# item(s) selected');\n that.tagTextTemplate = tagTemplate = tagTemplate ? kendo.template(tagTemplate) : defaultTemplate;\n that.tagTemplate = function (data) {\n return '
            • ' + tagTemplate(data) + '' + '
            • ';\n };\n },\n _loader: function () {\n this._loading = $('').insertAfter(this.input);\n },\n _clearButton: function () {\n this._clear = $('').attr({\n 'role': 'button',\n 'tabIndex': -1\n });\n if (this.options.clearButton) {\n this._clear.insertAfter(this.input);\n }\n },\n _textContainer: function () {\n var computedStyles = kendo.getComputedStyles(this.input[0], styles);\n computedStyles.position = 'absolute';\n computedStyles.visibility = 'hidden';\n computedStyles.top = -3333;\n computedStyles.left = -3333;\n this._span = $('').css(computedStyles).appendTo(this.wrapper);\n },\n _wrapper: function () {\n var that = this, element = that.element, wrapper = element.parent('span.k-multiselect');\n if (!wrapper[0]) {\n wrapper = element.wrap('
              ').parent();\n wrapper[0].style.cssText = element[0].style.cssText;\n wrapper[0].title = element[0].title;\n $('
              ').insertBefore(element);\n }\n that.wrapper = wrapper.addClass(element[0].className).css('display', '');\n that._innerWrapper = $(wrapper[0].firstChild);\n }\n });\n function compare(a, b) {\n var length;\n if (a === null && b !== null || a !== null && b === null) {\n return false;\n }\n length = a.length;\n if (length !== b.length) {\n return false;\n }\n while (length--) {\n if (a[length] !== b[length]) {\n return false;\n }\n }\n return true;\n }\n ui.plugin(MultiSelect);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.color', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'color',\n name: 'Color utils',\n category: 'framework',\n advanced: true,\n description: 'Color utilities used across components',\n depends: ['core']\n };\n window.kendo = window.kendo || {};\n var Class = kendo.Class;\n var support = kendo.support;\n var namedColors = {\n aliceblue: 'f0f8ff',\n antiquewhite: 'faebd7',\n aqua: '00ffff',\n aquamarine: '7fffd4',\n azure: 'f0ffff',\n beige: 'f5f5dc',\n bisque: 'ffe4c4',\n black: '000000',\n blanchedalmond: 'ffebcd',\n blue: '0000ff',\n blueviolet: '8a2be2',\n brown: 'a52a2a',\n burlywood: 'deb887',\n cadetblue: '5f9ea0',\n chartreuse: '7fff00',\n chocolate: 'd2691e',\n coral: 'ff7f50',\n cornflowerblue: '6495ed',\n cornsilk: 'fff8dc',\n crimson: 'dc143c',\n cyan: '00ffff',\n darkblue: '00008b',\n darkcyan: '008b8b',\n darkgoldenrod: 'b8860b',\n darkgray: 'a9a9a9',\n darkgrey: 'a9a9a9',\n darkgreen: '006400',\n darkkhaki: 'bdb76b',\n darkmagenta: '8b008b',\n darkolivegreen: '556b2f',\n darkorange: 'ff8c00',\n darkorchid: '9932cc',\n darkred: '8b0000',\n darksalmon: 'e9967a',\n darkseagreen: '8fbc8f',\n darkslateblue: '483d8b',\n darkslategray: '2f4f4f',\n darkslategrey: '2f4f4f',\n darkturquoise: '00ced1',\n darkviolet: '9400d3',\n deeppink: 'ff1493',\n deepskyblue: '00bfff',\n dimgray: '696969',\n dimgrey: '696969',\n dodgerblue: '1e90ff',\n firebrick: 'b22222',\n floralwhite: 'fffaf0',\n forestgreen: '228b22',\n fuchsia: 'ff00ff',\n gainsboro: 'dcdcdc',\n ghostwhite: 'f8f8ff',\n gold: 'ffd700',\n goldenrod: 'daa520',\n gray: '808080',\n grey: '808080',\n green: '008000',\n greenyellow: 'adff2f',\n honeydew: 'f0fff0',\n hotpink: 'ff69b4',\n indianred: 'cd5c5c',\n indigo: '4b0082',\n ivory: 'fffff0',\n khaki: 'f0e68c',\n lavender: 'e6e6fa',\n lavenderblush: 'fff0f5',\n lawngreen: '7cfc00',\n lemonchiffon: 'fffacd',\n lightblue: 'add8e6',\n lightcoral: 'f08080',\n lightcyan: 'e0ffff',\n lightgoldenrodyellow: 'fafad2',\n lightgray: 'd3d3d3',\n lightgrey: 'd3d3d3',\n lightgreen: '90ee90',\n lightpink: 'ffb6c1',\n lightsalmon: 'ffa07a',\n lightseagreen: '20b2aa',\n lightskyblue: '87cefa',\n lightslategray: '778899',\n lightslategrey: '778899',\n lightsteelblue: 'b0c4de',\n lightyellow: 'ffffe0',\n lime: '00ff00',\n limegreen: '32cd32',\n linen: 'faf0e6',\n magenta: 'ff00ff',\n maroon: '800000',\n mediumaquamarine: '66cdaa',\n mediumblue: '0000cd',\n mediumorchid: 'ba55d3',\n mediumpurple: '9370d8',\n mediumseagreen: '3cb371',\n mediumslateblue: '7b68ee',\n mediumspringgreen: '00fa9a',\n mediumturquoise: '48d1cc',\n mediumvioletred: 'c71585',\n midnightblue: '191970',\n mintcream: 'f5fffa',\n mistyrose: 'ffe4e1',\n moccasin: 'ffe4b5',\n navajowhite: 'ffdead',\n navy: '000080',\n oldlace: 'fdf5e6',\n olive: '808000',\n olivedrab: '6b8e23',\n orange: 'ffa500',\n orangered: 'ff4500',\n orchid: 'da70d6',\n palegoldenrod: 'eee8aa',\n palegreen: '98fb98',\n paleturquoise: 'afeeee',\n palevioletred: 'd87093',\n papayawhip: 'ffefd5',\n peachpuff: 'ffdab9',\n peru: 'cd853f',\n pink: 'ffc0cb',\n plum: 'dda0dd',\n powderblue: 'b0e0e6',\n purple: '800080',\n red: 'ff0000',\n rosybrown: 'bc8f8f',\n royalblue: '4169e1',\n saddlebrown: '8b4513',\n salmon: 'fa8072',\n sandybrown: 'f4a460',\n seagreen: '2e8b57',\n seashell: 'fff5ee',\n sienna: 'a0522d',\n silver: 'c0c0c0',\n skyblue: '87ceeb',\n slateblue: '6a5acd',\n slategray: '708090',\n slategrey: '708090',\n snow: 'fffafa',\n springgreen: '00ff7f',\n steelblue: '4682b4',\n tan: 'd2b48c',\n teal: '008080',\n thistle: 'd8bfd8',\n tomato: 'ff6347',\n turquoise: '40e0d0',\n violet: 'ee82ee',\n wheat: 'f5deb3',\n white: 'ffffff',\n whitesmoke: 'f5f5f5',\n yellow: 'ffff00',\n yellowgreen: '9acd32'\n };\n var browser = support.browser;\n var namedColorRegexp = ['transparent'];\n for (var i in namedColors) {\n if (namedColors.hasOwnProperty(i)) {\n namedColorRegexp.push(i);\n }\n }\n namedColorRegexp = new RegExp('^(' + namedColorRegexp.join('|') + ')(\\\\W|$)', 'i');\n var BaseColor = Class.extend({\n init: function () {\n },\n toHSV: function () {\n return this;\n },\n toRGB: function () {\n return this;\n },\n toHex: function () {\n return this.toBytes().toHex();\n },\n toBytes: function () {\n return this;\n },\n toCss: function () {\n return '#' + this.toHex();\n },\n toCssRgba: function () {\n var rgb = this.toBytes();\n return 'rgba(' + rgb.r + ', ' + rgb.g + ', ' + rgb.b + ', ' + parseFloat(Number(this.a).toFixed(3)) + ')';\n },\n toDisplay: function () {\n if (browser.msie && browser.version < 9) {\n return this.toCss();\n }\n return this.toCssRgba();\n },\n equals: function (c) {\n return c === this || c !== null && this.toCssRgba() === parseColor(c).toCssRgba();\n },\n diff: function (other) {\n if (other === null) {\n return NaN;\n }\n var c1 = this.toBytes();\n var c2 = other.toBytes();\n return Math.sqrt(Math.pow((c1.r - c2.r) * 0.3, 2) + Math.pow((c1.g - c2.g) * 0.59, 2) + Math.pow((c1.b - c2.b) * 0.11, 2));\n },\n clone: function () {\n var c = this.toBytes();\n if (c === this) {\n c = new Bytes(c.r, c.g, c.b, c.a);\n }\n return c;\n }\n });\n var RGB = BaseColor.extend({\n init: function (r, g, b, a) {\n BaseColor.fn.init.call(this);\n this.r = r;\n this.g = g;\n this.b = b;\n this.a = a;\n },\n toHSV: function () {\n var ref = this;\n var r = ref.r;\n var g = ref.g;\n var b = ref.b;\n var min = Math.min(r, g, b);\n var max = Math.max(r, g, b);\n var delta = max - min;\n var v = max;\n var h, s;\n if (delta === 0) {\n return new HSV(0, 0, v, this.a);\n }\n if (max !== 0) {\n s = delta / max;\n if (r === max) {\n h = (g - b) / delta;\n } else if (g === max) {\n h = 2 + (b - r) / delta;\n } else {\n h = 4 + (r - g) / delta;\n }\n h *= 60;\n if (h < 0) {\n h += 360;\n }\n } else {\n s = 0;\n h = -1;\n }\n return new HSV(h, s, v, this.a);\n },\n toHSL: function () {\n var ref = this;\n var r = ref.r;\n var g = ref.g;\n var b = ref.b;\n var max = Math.max(r, g, b);\n var min = Math.min(r, g, b);\n var h, s, l = (max + min) / 2;\n if (max === min) {\n h = s = 0;\n } else {\n var d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n default:\n break;\n }\n h *= 60;\n s *= 100;\n l *= 100;\n }\n return new HSL(h, s, l, this.a);\n },\n toBytes: function () {\n return new Bytes(this.r * 255, this.g * 255, this.b * 255, this.a);\n }\n });\n var Bytes = RGB.extend({\n init: function (r, g, b, a) {\n RGB.fn.init.call(this, Math.round(r), Math.round(g), Math.round(b), a);\n },\n toRGB: function () {\n return new RGB(this.r / 255, this.g / 255, this.b / 255, this.a);\n },\n toHSV: function () {\n return this.toRGB().toHSV();\n },\n toHSL: function () {\n return this.toRGB().toHSL();\n },\n toHex: function () {\n return hex(this.r, 2) + hex(this.g, 2) + hex(this.b, 2);\n },\n toBytes: function () {\n return this;\n }\n });\n function hex(n, width, pad) {\n if (pad === void 0) {\n pad = '0';\n }\n var result = n.toString(16);\n while (width > result.length) {\n result = pad + result;\n }\n return result;\n }\n var HSV = BaseColor.extend({\n init: function (h, s, v, a) {\n BaseColor.fn.init.call(this);\n this.h = h;\n this.s = s;\n this.v = v;\n this.a = a;\n },\n toRGB: function () {\n var ref = this;\n var h = ref.h;\n var s = ref.s;\n var v = ref.v;\n var r, g, b;\n if (s === 0) {\n r = g = b = v;\n } else {\n h /= 60;\n var i = Math.floor(h);\n var f = h - i;\n var p = v * (1 - s);\n var q = v * (1 - s * f);\n var t = v * (1 - s * (1 - f));\n switch (i) {\n case 0:\n r = v;\n g = t;\n b = p;\n break;\n case 1:\n r = q;\n g = v;\n b = p;\n break;\n case 2:\n r = p;\n g = v;\n b = t;\n break;\n case 3:\n r = p;\n g = q;\n b = v;\n break;\n case 4:\n r = t;\n g = p;\n b = v;\n break;\n default:\n r = v;\n g = p;\n b = q;\n break;\n }\n }\n return new RGB(r, g, b, this.a);\n },\n toHSL: function () {\n return this.toRGB().toHSL();\n },\n toBytes: function () {\n return this.toRGB().toBytes();\n }\n });\n var HSL = BaseColor.extend({\n init: function (h, s, l, a) {\n BaseColor.fn.init.call(this);\n this.h = h;\n this.s = s;\n this.l = l;\n this.a = a;\n },\n toRGB: function () {\n var ref = this;\n var h = ref.h;\n var s = ref.s;\n var l = ref.l;\n var r, g, b;\n if (s === 0) {\n r = g = b = l;\n } else {\n h /= 360;\n s /= 100;\n l /= 100;\n var q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n var p = 2 * l - q;\n r = hue2rgb(p, q, h + 1 / 3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1 / 3);\n }\n return new RGB(r, g, b, this.a);\n },\n toHSV: function () {\n return this.toRGB().toHSV();\n },\n toBytes: function () {\n return this.toRGB().toBytes();\n }\n });\n function hue2rgb(p, q, s) {\n var t = s;\n if (t < 0) {\n t += 1;\n }\n if (t > 1) {\n t -= 1;\n }\n if (t < 1 / 6) {\n return p + (q - p) * 6 * t;\n }\n if (t < 1 / 2) {\n return q;\n }\n if (t < 2 / 3) {\n return p + (q - p) * (2 / 3 - t) * 6;\n }\n return p;\n }\n function parseColor(value, safe) {\n var m, ret;\n if (value == null || value === 'none') {\n return null;\n }\n if (value instanceof BaseColor) {\n return value;\n }\n var color = value.toLowerCase();\n if (m = namedColorRegexp.exec(color)) {\n if (m[1] === 'transparent') {\n color = new RGB(1, 1, 1, 0);\n } else {\n color = parseColor(namedColors[m[1]], safe);\n }\n color.match = [m[1]];\n return color;\n }\n if (m = /^#?([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})\\b/i.exec(color)) {\n ret = new Bytes(parseInt(m[1], 16), parseInt(m[2], 16), parseInt(m[3], 16), 1);\n } else if (m = /^#?([0-9a-f])([0-9a-f])([0-9a-f])\\b/i.exec(color)) {\n ret = new Bytes(parseInt(m[1] + m[1], 16), parseInt(m[2] + m[2], 16), parseInt(m[3] + m[3], 16), 1);\n } else if (m = /^rgb\\(\\s*([0-9]+)\\s*,\\s*([0-9]+)\\s*,\\s*([0-9]+)\\s*\\)/.exec(color)) {\n ret = new Bytes(parseInt(m[1], 10), parseInt(m[2], 10), parseInt(m[3], 10), 1);\n } else if (m = /^rgba\\(\\s*([0-9]+)\\s*,\\s*([0-9]+)\\s*,\\s*([0-9]+)\\s*,\\s*([0-9.]+)\\s*\\)/.exec(color)) {\n ret = new Bytes(parseInt(m[1], 10), parseInt(m[2], 10), parseInt(m[3], 10), parseFloat(m[4]));\n } else if (m = /^rgb\\(\\s*([0-9]*\\.?[0-9]+)%\\s*,\\s*([0-9]*\\.?[0-9]+)%\\s*,\\s*([0-9]*\\.?[0-9]+)%\\s*\\)/.exec(color)) {\n ret = new RGB(parseFloat(m[1]) / 100, parseFloat(m[2]) / 100, parseFloat(m[3]) / 100, 1);\n } else if (m = /^rgba\\(\\s*([0-9]*\\.?[0-9]+)%\\s*,\\s*([0-9]*\\.?[0-9]+)%\\s*,\\s*([0-9]*\\.?[0-9]+)%\\s*,\\s*([0-9.]+)\\s*\\)/.exec(color)) {\n ret = new RGB(parseFloat(m[1]) / 100, parseFloat(m[2]) / 100, parseFloat(m[3]) / 100, parseFloat(m[4]));\n }\n if (ret) {\n ret.match = m;\n } else if (!safe) {\n throw new Error('Cannot parse color: ' + color);\n }\n return ret;\n }\n var Color = Class.extend({\n init: function (value) {\n var this$1 = this;\n if (arguments.length === 1) {\n var formats = Color.formats;\n var resolvedColor = this.resolveColor(value);\n for (var idx = 0; idx < formats.length; idx++) {\n var formatRegex = formats[idx].re;\n var processor = formats[idx].process;\n var parts = formatRegex.exec(resolvedColor);\n if (parts) {\n var channels = processor(parts);\n this$1.r = channels[0];\n this$1.g = channels[1];\n this$1.b = channels[2];\n }\n }\n } else {\n this.r = arguments[0];\n this.g = arguments[1];\n this.b = arguments[2];\n }\n this.r = this.normalizeByte(this.r);\n this.g = this.normalizeByte(this.g);\n this.b = this.normalizeByte(this.b);\n },\n toHex: function () {\n var pad = this.padDigit;\n var r = this.r.toString(16);\n var g = this.g.toString(16);\n var b = this.b.toString(16);\n return '#' + pad(r) + pad(g) + pad(b);\n },\n resolveColor: function (value) {\n var color = value || 'black';\n if (color.charAt(0) === '#') {\n color = color.substr(1, 6);\n }\n color = color.replace(/ /g, '');\n color = color.toLowerCase();\n color = Color.namedColors[color] || color;\n return color;\n },\n normalizeByte: function (value) {\n if (value < 0 || isNaN(value)) {\n return 0;\n }\n return value > 255 ? 255 : value;\n },\n padDigit: function (value) {\n return value.length === 1 ? '0' + value : value;\n },\n brightness: function (value) {\n var round = Math.round;\n this.r = round(this.normalizeByte(this.r * value));\n this.g = round(this.normalizeByte(this.g * value));\n this.b = round(this.normalizeByte(this.b * value));\n return this;\n },\n percBrightness: function () {\n return Math.sqrt(0.241 * this.r * this.r + 0.691 * this.g * this.g + 0.068 * this.b * this.b);\n }\n });\n Color.fromBytes = function (r, g, b, a) {\n return new Bytes(r, g, b, a != null ? a : 1);\n };\n Color.fromRGB = function (r, g, b, a) {\n return new RGB(r, g, b, a != null ? a : 1);\n };\n Color.fromHSV = function (h, s, v, a) {\n return new HSV(h, s, v, a != null ? a : 1);\n };\n Color.fromHSL = function (h, s, l, a) {\n return new HSL(h, s, l, a != null ? a : 1);\n };\n Color.formats = [\n {\n re: /^rgb\\((\\d{1,3}),\\s*(\\d{1,3}),\\s*(\\d{1,3})\\)$/,\n process: function (parts) {\n return [\n parseInt(parts[1], 10),\n parseInt(parts[2], 10),\n parseInt(parts[3], 10)\n ];\n }\n },\n {\n re: /^(\\w{2})(\\w{2})(\\w{2})$/,\n process: function (parts) {\n return [\n parseInt(parts[1], 16),\n parseInt(parts[2], 16),\n parseInt(parts[3], 16)\n ];\n }\n },\n {\n re: /^(\\w{1})(\\w{1})(\\w{1})$/,\n process: function (parts) {\n return [\n parseInt(parts[1] + parts[1], 16),\n parseInt(parts[2] + parts[2], 16),\n parseInt(parts[3] + parts[3], 16)\n ];\n }\n }\n ];\n Color.namedColors = namedColors;\n kendo.deepExtend(kendo, {\n parseColor: parseColor,\n Color: Color\n });\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.slider', ['kendo.draganddrop'], f);\n}(function () {\n var __meta__ = {\n id: 'slider',\n name: 'Slider',\n category: 'web',\n description: 'The Slider widget provides a rich input for selecting values or ranges of values.',\n depends: ['draganddrop']\n };\n (function ($, undefined) {\n var kendo = window.kendo, Widget = kendo.ui.Widget, Draggable = kendo.ui.Draggable, outerWidth = kendo._outerWidth, outerHeight = kendo._outerHeight, extend = $.extend, format = kendo.format, parse = kendo.parseFloat, proxy = $.proxy, isArray = $.isArray, math = Math, support = kendo.support, pointers = support.pointers, msPointers = support.msPointers, CHANGE = 'change', SLIDE = 'slide', NS = '.slider', MOUSE_DOWN = 'touchstart' + NS + ' mousedown' + NS, TRACK_MOUSE_DOWN = pointers ? 'pointerdown' + NS : msPointers ? 'MSPointerDown' + NS : MOUSE_DOWN, MOUSE_UP = 'touchend' + NS + ' mouseup' + NS, TRACK_MOUSE_UP = pointers ? 'pointerup' : msPointers ? 'MSPointerUp' + NS : MOUSE_UP, MOVE_SELECTION = 'moveSelection', KEY_DOWN = 'keydown' + NS, CLICK = 'click' + NS, MOUSE_OVER = 'mouseover' + NS, FOCUS = 'focus' + NS, BLUR = 'blur' + NS, DRAG_HANDLE = '.k-draghandle', TRACK_SELECTOR = '.k-slider-track', TICK_SELECTOR = '.k-tick', STATE_SELECTED = 'k-state-selected', STATE_FOCUSED = 'k-state-focused', STATE_DEFAULT = 'k-state-default', STATE_DISABLED = 'k-state-disabled', DISABLED = 'disabled', UNDEFINED = 'undefined', TABINDEX = 'tabindex', getTouches = kendo.getTouches;\n var SliderBase = Widget.extend({\n init: function (element, options) {\n var that = this;\n Widget.fn.init.call(that, element, options);\n options = that.options;\n that._isHorizontal = options.orientation == 'horizontal';\n that._isRtl = that._isHorizontal && kendo.support.isRtl(element);\n that._position = that._isHorizontal ? 'left' : 'bottom';\n that._sizeFn = that._isHorizontal ? 'width' : 'height';\n that._outerSize = that._isHorizontal ? outerWidth : outerHeight;\n options.tooltip.format = options.tooltip.enabled ? options.tooltip.format || '{0}' : '{0}';\n if (options.smallStep <= 0) {\n throw new Error('Kendo UI Slider smallStep must be a positive number.');\n }\n that._createHtml();\n that.wrapper = that.element.closest('.k-slider');\n that._trackDiv = that.wrapper.find(TRACK_SELECTOR);\n that._setTrackDivWidth();\n that._maxSelection = that._trackDiv[that._sizeFn]();\n that._sliderItemsInit();\n that._reset();\n that._tabindex(that.wrapper.find(DRAG_HANDLE));\n that[options.enabled ? 'enable' : 'disable']();\n var rtlDirectionSign = kendo.support.isRtl(that.wrapper) ? -1 : 1;\n that._keyMap = {\n 37: step(-1 * rtlDirectionSign * options.smallStep),\n 40: step(-options.smallStep),\n 39: step(+1 * rtlDirectionSign * options.smallStep),\n 38: step(+options.smallStep),\n 35: setValue(options.max),\n 36: setValue(options.min),\n 33: step(+options.largeStep),\n 34: step(-options.largeStep)\n };\n kendo.notify(that);\n },\n events: [\n CHANGE,\n SLIDE\n ],\n options: {\n enabled: true,\n min: 0,\n max: 10,\n smallStep: 1,\n largeStep: 5,\n orientation: 'horizontal',\n tickPlacement: 'both',\n tooltip: {\n enabled: true,\n format: '{0}'\n }\n },\n _distance: function () {\n return round(this.options.max - this.options.min);\n },\n _resize: function () {\n this._setTrackDivWidth();\n this.wrapper.find('.k-slider-items').remove();\n this._maxSelection = this._trackDiv[this._sizeFn]();\n this._sliderItemsInit();\n this._refresh();\n if (this.options.enabled) {\n this.enable(true);\n }\n },\n _sliderItemsInit: function () {\n var that = this, options = that.options;\n var sizeBetweenTicks = that._maxSelection / ((options.max - options.min) / options.smallStep);\n var pixelWidths = that._calculateItemsWidth(math.floor(that._distance() / options.smallStep));\n if (options.tickPlacement != 'none' && sizeBetweenTicks >= 2) {\n $(this.element).parent().find('.k-slider-items').remove();\n that._trackDiv.before(createSliderItems(options, that._distance()));\n that._setItemsWidth(pixelWidths);\n that._setItemsTitle();\n }\n that._calculateSteps(pixelWidths);\n if (options.tickPlacement != 'none' && sizeBetweenTicks >= 2 && options.largeStep >= options.smallStep) {\n that._setItemsLargeTick();\n }\n },\n getSize: function () {\n return kendo.dimensions(this.wrapper);\n },\n _setTrackDivWidth: function () {\n var that = this, trackDivPosition = parseFloat(that._trackDiv.css(that._isRtl ? 'right' : that._position), 10) * 2;\n that._trackDiv[that._sizeFn](that.wrapper[that._sizeFn]() - 2 - trackDivPosition);\n },\n _setItemsWidth: function (pixelWidths) {\n var that = this, options = that.options, first = 0, last = pixelWidths.length - 1, items = that.wrapper.find(TICK_SELECTOR), i, paddingTop = 0, bordersWidth = 2, count = items.length, selection = 0;\n for (i = 0; i < count - 2; i++) {\n $(items[i + 1])[that._sizeFn](pixelWidths[i]);\n }\n if (that._isHorizontal) {\n $(items[first]).addClass('k-first')[that._sizeFn](pixelWidths[last - 1]);\n $(items[last]).addClass('k-last')[that._sizeFn](pixelWidths[last]);\n } else {\n $(items[last]).addClass('k-first')[that._sizeFn](pixelWidths[last]);\n $(items[first]).addClass('k-last')[that._sizeFn](pixelWidths[last - 1]);\n }\n if (that._distance() % options.smallStep !== 0 && !that._isHorizontal) {\n for (i = 0; i < pixelWidths.length; i++) {\n selection += pixelWidths[i];\n }\n paddingTop = that._maxSelection - selection;\n paddingTop += parseFloat(that._trackDiv.css(that._position), 10) + bordersWidth;\n that.wrapper.find('.k-slider-items').css('padding-top', paddingTop);\n }\n },\n _setItemsTitle: function () {\n var that = this, options = that.options, items = that.wrapper.find(TICK_SELECTOR), titleNumber = options.min, count = items.length, i = that._isHorizontal && !that._isRtl ? 0 : count - 1, limit = that._isHorizontal && !that._isRtl ? count : -1, increment = that._isHorizontal && !that._isRtl ? 1 : -1;\n for (; i - limit !== 0; i += increment) {\n $(items[i]).attr('title', format(options.tooltip.format, round(titleNumber)));\n titleNumber += options.smallStep;\n }\n },\n _setItemsLargeTick: function () {\n var that = this, options = that.options, items = that.wrapper.find(TICK_SELECTOR), i = 0, item, value;\n if (removeFraction(options.largeStep) % removeFraction(options.smallStep) === 0 || that._distance() / options.largeStep >= 3) {\n if (!that._isHorizontal && !that._isRtl) {\n items = $.makeArray(items).reverse();\n }\n for (i = 0; i < items.length; i++) {\n item = $(items[i]);\n value = that._values[i];\n var valueWithoutFraction = round(removeFraction(value - this.options.min));\n if (valueWithoutFraction % removeFraction(options.smallStep) === 0 && valueWithoutFraction % removeFraction(options.largeStep) === 0) {\n item.addClass('k-tick-large').html('' + item.attr('title') + '');\n if (i !== 0 && i !== items.length - 1) {\n item.css('line-height', item[that._sizeFn]() + 'px');\n }\n }\n }\n }\n },\n _calculateItemsWidth: function (itemsCount) {\n var that = this, options = that.options, trackDivSize = parseFloat(that._trackDiv.css(that._sizeFn)) + 1, distance = that._distance(), pixelStep = trackDivSize / distance, itemWidth, pixelWidths, i;\n if (distance / options.smallStep - math.floor(distance / options.smallStep) > 0) {\n trackDivSize -= distance % options.smallStep * pixelStep;\n }\n itemWidth = trackDivSize / itemsCount;\n pixelWidths = [];\n for (i = 0; i < itemsCount - 1; i++) {\n pixelWidths[i] = itemWidth;\n }\n pixelWidths[itemsCount - 1] = pixelWidths[itemsCount] = itemWidth / 2;\n return that._roundWidths(pixelWidths);\n },\n _roundWidths: function (pixelWidthsArray) {\n var balance = 0, count = pixelWidthsArray.length, i;\n for (i = 0; i < count; i++) {\n balance += pixelWidthsArray[i] - math.floor(pixelWidthsArray[i]);\n pixelWidthsArray[i] = math.floor(pixelWidthsArray[i]);\n }\n balance = math.round(balance);\n return this._addAdditionalSize(balance, pixelWidthsArray);\n },\n _addAdditionalSize: function (additionalSize, pixelWidthsArray) {\n if (additionalSize === 0) {\n return pixelWidthsArray;\n }\n var step = parseFloat(pixelWidthsArray.length - 1) / parseFloat(additionalSize == 1 ? additionalSize : additionalSize - 1), i;\n for (i = 0; i < additionalSize; i++) {\n pixelWidthsArray[parseInt(math.round(step * i), 10)] += 1;\n }\n return pixelWidthsArray;\n },\n _calculateSteps: function (pixelWidths) {\n var that = this, options = that.options, val = options.min, selection = 0, distance = that._distance(), itemsCount = math.ceil(distance / options.smallStep), i = 1, lastItem;\n itemsCount += distance / options.smallStep % 1 === 0 ? 1 : 0;\n pixelWidths.splice(0, 0, pixelWidths[itemsCount - 2] * 2);\n pixelWidths.splice(itemsCount - 1, 1, pixelWidths.pop() * 2);\n that._pixelSteps = [selection];\n that._values = [val];\n if (itemsCount === 0) {\n return;\n }\n while (i < itemsCount) {\n selection += (pixelWidths[i - 1] + pixelWidths[i]) / 2;\n that._pixelSteps[i] = selection;\n val += options.smallStep;\n that._values[i] = round(val);\n i++;\n }\n lastItem = distance % options.smallStep === 0 ? itemsCount - 1 : itemsCount;\n that._pixelSteps[lastItem] = that._maxSelection;\n that._values[lastItem] = options.max;\n if (that._isRtl) {\n that._pixelSteps.reverse();\n that._values.reverse();\n }\n },\n _getValueFromPosition: function (mousePosition, dragableArea) {\n var that = this, options = that.options, step = math.max(options.smallStep * (that._maxSelection / that._distance()), 0), position = 0, halfStep = step / 2, i;\n if (that._isHorizontal) {\n position = mousePosition - dragableArea.startPoint;\n if (that._isRtl) {\n position = that._maxSelection - position;\n }\n } else {\n position = dragableArea.startPoint - mousePosition;\n }\n if (that._maxSelection - (parseInt(that._maxSelection % step, 10) - 3) / 2 < position) {\n return options.max;\n }\n for (i = 0; i < that._pixelSteps.length; i++) {\n if (math.abs(that._pixelSteps[i] - position) - 1 <= halfStep) {\n return round(that._values[i]);\n }\n }\n },\n _getFormattedValue: function (val, drag) {\n var that = this, html = '', tooltip = that.options.tooltip, tooltipTemplate, selectionStart, selectionEnd;\n if (isArray(val)) {\n selectionStart = val[0];\n selectionEnd = val[1];\n } else if (drag && drag.type) {\n selectionStart = drag.selectionStart;\n selectionEnd = drag.selectionEnd;\n }\n if (drag) {\n tooltipTemplate = drag.tooltipTemplate;\n }\n if (!tooltipTemplate && tooltip.template) {\n tooltipTemplate = kendo.template(tooltip.template);\n }\n if (isArray(val) || drag && drag.type) {\n if (tooltipTemplate) {\n html = tooltipTemplate({\n selectionStart: selectionStart,\n selectionEnd: selectionEnd\n });\n } else {\n selectionStart = format(tooltip.format, selectionStart);\n selectionEnd = format(tooltip.format, selectionEnd);\n html = selectionStart + ' - ' + selectionEnd;\n }\n } else {\n if (drag) {\n drag.val = val;\n }\n if (tooltipTemplate) {\n html = tooltipTemplate({ value: val });\n } else {\n html = format(tooltip.format, val);\n }\n }\n return html;\n },\n _getDraggableArea: function () {\n var that = this, offset = kendo.getOffset(that._trackDiv);\n return {\n startPoint: that._isHorizontal ? offset.left : offset.top + that._maxSelection,\n endPoint: that._isHorizontal ? offset.left + that._maxSelection : offset.top\n };\n },\n _createHtml: function () {\n var that = this, element = that.element, options = that.options, inputs = element.find('input');\n if (inputs.length == 2) {\n inputs.eq(0).prop('value', formatValue(options.selectionStart));\n inputs.eq(1).prop('value', formatValue(options.selectionEnd));\n } else {\n element.prop('value', formatValue(options.value));\n }\n element.wrap(createWrapper(options, element, that._isHorizontal)).hide();\n if (options.showButtons) {\n element.before(createButton(options, 'increase', that._isHorizontal, that._isRtl)).before(createButton(options, 'decrease', that._isHorizontal, that._isRtl));\n }\n element.before(createTrack(options, element));\n },\n _focus: function (e) {\n var that = this, target = e.target, val = that.value(), drag = that._drag;\n if (!drag) {\n if (target == that.wrapper.find(DRAG_HANDLE).eq(0)[0]) {\n drag = that._firstHandleDrag;\n that._activeHandle = 0;\n } else {\n drag = that._lastHandleDrag;\n that._activeHandle = 1;\n }\n val = val[that._activeHandle];\n }\n $(target).addClass(STATE_FOCUSED + ' ' + STATE_SELECTED);\n if (drag) {\n that._activeHandleDrag = drag;\n drag.selectionStart = that.options.selectionStart;\n drag.selectionEnd = that.options.selectionEnd;\n drag._updateTooltip(val);\n }\n },\n _focusWithMouse: function (target) {\n target = $(target);\n var that = this, idx = target.is(DRAG_HANDLE) ? target.index() : 0;\n window.setTimeout(function () {\n that.wrapper.find(DRAG_HANDLE)[idx == 2 ? 1 : 0].focus();\n }, 1);\n that._setTooltipTimeout();\n },\n _blur: function (e) {\n var that = this, drag = that._activeHandleDrag;\n $(e.target).removeClass(STATE_FOCUSED + ' ' + STATE_SELECTED);\n if (drag) {\n drag._removeTooltip();\n delete that._activeHandleDrag;\n delete that._activeHandle;\n }\n },\n _setTooltipTimeout: function () {\n var that = this;\n that._tooltipTimeout = window.setTimeout(function () {\n var drag = that._drag || that._activeHandleDrag;\n if (drag) {\n drag._removeTooltip();\n }\n }, 300);\n },\n _clearTooltipTimeout: function () {\n var that = this;\n window.clearTimeout(this._tooltipTimeout);\n var drag = that._drag || that._activeHandleDrag;\n if (drag && drag.tooltipDiv) {\n drag.tooltipDiv.stop(true, false).css('opacity', 1);\n }\n },\n _reset: function () {\n var that = this, element = that.element, formId = element.attr('form'), form = formId ? $('#' + formId) : element.closest('form');\n if (form[0]) {\n that._form = form.on('reset', proxy(that._formResetHandler, that));\n }\n },\n min: function (value) {\n if (!value) {\n return this.options.min;\n }\n this.setOptions({ 'min': value });\n },\n max: function (value) {\n if (!value) {\n return this.options.max;\n }\n this.setOptions({ 'max': value });\n },\n setOptions: function (options) {\n Widget.fn.setOptions.call(this, options);\n this._sliderItemsInit();\n this._refresh();\n },\n destroy: function () {\n if (this._form) {\n this._form.off('reset', this._formResetHandler);\n }\n Widget.fn.destroy.call(this);\n }\n });\n function createWrapper(options, element, isHorizontal) {\n var orientationCssClass = isHorizontal ? ' k-slider-horizontal' : ' k-slider-vertical', style = options.style ? options.style : element.attr('style'), cssClasses = element.attr('class') ? ' ' + element.attr('class') : '', tickPlacementCssClass = '';\n if (options.tickPlacement == 'bottomRight') {\n tickPlacementCssClass = ' k-slider-bottomright';\n } else if (options.tickPlacement == 'topLeft') {\n tickPlacementCssClass = ' k-slider-topleft';\n }\n style = style ? ' style=\\'' + style + '\\'' : '';\n return '
              ' + '
              ';\n }\n function createButton(options, type, isHorizontal, isRtl) {\n var buttonCssClass = '';\n if (isHorizontal) {\n if (!isRtl && type == 'increase' || isRtl && type != 'increase') {\n buttonCssClass = 'k-i-arrow-60-right';\n } else {\n buttonCssClass = 'k-i-arrow-60-left';\n }\n } else {\n if (type == 'increase') {\n buttonCssClass = 'k-i-arrow-60-up';\n } else {\n buttonCssClass = 'k-i-arrow-60-down';\n }\n }\n return '' + '';\n }\n function createSliderItems(options, distance) {\n var result = '
                ', count = math.floor(round(distance / options.smallStep)) + 1, i;\n for (i = 0; i < count; i++) {\n result += '
              •  
              • ';\n }\n result += '
              ';\n return result;\n }\n function createTrack(options, element) {\n var dragHandleCount = element.is('input') ? 1 : 2, firstDragHandleTitle = dragHandleCount == 2 ? options.leftDragHandleTitle : options.dragHandleTitle;\n return '';\n }\n function step(stepValue) {\n return function (value) {\n return value + stepValue;\n };\n }\n function setValue(value) {\n return function () {\n return value;\n };\n }\n function formatValue(value) {\n return (value + '').replace('.', kendo.cultures.current.numberFormat['.']);\n }\n function calculatePrecision(value) {\n var number = value.toString();\n var precision = 0;\n number = number.split('.');\n if (number[1]) {\n precision = number[1].length;\n }\n precision = precision > 10 ? 10 : precision;\n return precision;\n }\n function round(value) {\n var precision, power;\n value = parseFloat(value, 10);\n precision = calculatePrecision(value);\n power = math.pow(10, precision || 0);\n return math.round(value * power) / power;\n }\n function parseAttr(element, name) {\n var value = parse(element.getAttribute(name));\n if (value === null) {\n value = undefined;\n }\n return value;\n }\n function defined(value) {\n return typeof value !== UNDEFINED;\n }\n function removeFraction(value) {\n return value * 10000;\n }\n var Slider = SliderBase.extend({\n init: function (element, options) {\n var that = this, dragHandle;\n element.type = 'text';\n options = extend({}, {\n value: parseAttr(element, 'value'),\n min: parseAttr(element, 'min'),\n max: parseAttr(element, 'max'),\n smallStep: parseAttr(element, 'step')\n }, options);\n element = $(element);\n if (options && options.enabled === undefined) {\n options.enabled = !element.is('[disabled]');\n }\n SliderBase.fn.init.call(that, element, options);\n options = that.options;\n if (!defined(options.value) || options.value === null) {\n options.value = options.min;\n element.prop('value', formatValue(options.min));\n }\n options.value = math.max(math.min(options.value, options.max), options.min);\n dragHandle = that.wrapper.find(DRAG_HANDLE);\n this._selection = new Slider.Selection(dragHandle, that, options);\n that._drag = new Slider.Drag(dragHandle, '', that, options);\n },\n options: {\n name: 'Slider',\n showButtons: true,\n increaseButtonTitle: 'Increase',\n decreaseButtonTitle: 'Decrease',\n dragHandleTitle: 'drag',\n tooltip: { format: '{0:#,#.##}' },\n value: null\n },\n enable: function (enable) {\n var that = this, options = that.options, clickHandler, move;\n that.disable();\n if (enable === false) {\n return;\n }\n that.wrapper.removeClass(STATE_DISABLED).addClass(STATE_DEFAULT);\n that.wrapper.find('input').removeAttr(DISABLED);\n clickHandler = function (e) {\n var touch = getTouches(e)[0];\n if (!touch) {\n return;\n }\n var mousePosition = that._isHorizontal ? touch.location.pageX : touch.location.pageY, dragableArea = that._getDraggableArea(), target = $(e.target);\n if (target.hasClass('k-draghandle')) {\n target.addClass(STATE_FOCUSED + ' ' + STATE_SELECTED);\n return;\n }\n that._update(that._getValueFromPosition(mousePosition, dragableArea));\n that._focusWithMouse(e.target);\n that._drag.dragstart(e);\n e.preventDefault();\n };\n that.wrapper.find(TICK_SELECTOR + ', ' + TRACK_SELECTOR).on(TRACK_MOUSE_DOWN, clickHandler).end().on(TRACK_MOUSE_DOWN, function () {\n $(document.documentElement).one('selectstart', kendo.preventDefault);\n }).on(TRACK_MOUSE_UP, function () {\n that._drag._end();\n });\n that.wrapper.find(DRAG_HANDLE).attr(TABINDEX, 0).on(MOUSE_UP, function () {\n that._setTooltipTimeout();\n }).on(CLICK, function (e) {\n that._focusWithMouse(e.target);\n e.preventDefault();\n }).on(FOCUS, proxy(that._focus, that)).on(BLUR, proxy(that._blur, that));\n move = proxy(function (sign) {\n var newVal = that._nextValueByIndex(that._valueIndex + sign * 1);\n that._setValueInRange(newVal);\n that._drag._updateTooltip(newVal);\n }, that);\n if (options.showButtons) {\n var mouseDownHandler = proxy(function (e, sign) {\n this._clearTooltipTimeout();\n if (e.which === 1 || support.touch && e.which === 0) {\n move(sign);\n this.timeout = setTimeout(proxy(function () {\n this.timer = setInterval(function () {\n move(sign);\n }, 60);\n }, this), 200);\n }\n }, that);\n that.wrapper.find('.k-button').on(MOUSE_UP, proxy(function (e) {\n this._clearTimer();\n that._focusWithMouse(e.target);\n }, that)).on(MOUSE_OVER, function (e) {\n $(e.currentTarget).addClass('k-state-hover');\n }).on('mouseout' + NS, proxy(function (e) {\n $(e.currentTarget).removeClass('k-state-hover');\n this._clearTimer();\n }, that)).eq(0).on(MOUSE_DOWN, proxy(function (e) {\n mouseDownHandler(e, 1);\n }, that)).click(false).end().eq(1).on(MOUSE_DOWN, proxy(function (e) {\n mouseDownHandler(e, -1);\n }, that)).click(kendo.preventDefault);\n }\n that.wrapper.find(DRAG_HANDLE).off(KEY_DOWN, false).on(KEY_DOWN, proxy(this._keydown, that));\n options.enabled = true;\n },\n disable: function () {\n var that = this;\n that.wrapper.removeClass(STATE_DEFAULT).addClass(STATE_DISABLED);\n $(that.element).prop(DISABLED, DISABLED);\n that.wrapper.find('.k-button').off(MOUSE_DOWN).on(MOUSE_DOWN, function (e) {\n e.preventDefault();\n $(this).addClass('k-state-active');\n }).off(MOUSE_UP).on(MOUSE_UP, function (e) {\n e.preventDefault();\n $(this).removeClass('k-state-active');\n }).off('mouseleave' + NS).on('mouseleave' + NS, kendo.preventDefault).off(MOUSE_OVER).on(MOUSE_OVER, kendo.preventDefault);\n that.wrapper.find(TICK_SELECTOR + ', ' + TRACK_SELECTOR).off(TRACK_MOUSE_DOWN).off(TRACK_MOUSE_UP);\n that.wrapper.find(DRAG_HANDLE).attr(TABINDEX, -1).off(MOUSE_UP).off(KEY_DOWN).off(CLICK).off(FOCUS).off(BLUR);\n that.options.enabled = false;\n },\n _update: function (val) {\n var that = this, change = that.value() != val;\n that.value(val);\n if (change) {\n that.trigger(CHANGE, { value: that.options.value });\n }\n },\n value: function (value) {\n var that = this, options = that.options;\n value = round(value);\n if (isNaN(value)) {\n return options.value;\n }\n if (value >= options.min && value <= options.max) {\n if (options.value != value) {\n that.element.prop('value', formatValue(value));\n options.value = value;\n that._refreshAriaAttr(value);\n that._refresh();\n }\n }\n },\n _refresh: function () {\n this.trigger(MOVE_SELECTION, { value: this.options.value });\n },\n _refreshAriaAttr: function (value) {\n var that = this, drag = that._drag, formattedValue;\n if (drag && drag._tooltipDiv) {\n formattedValue = drag._tooltipDiv.text();\n } else {\n formattedValue = that._getFormattedValue(value, null);\n }\n this.wrapper.find(DRAG_HANDLE).attr('aria-valuenow', value).attr('aria-valuetext', formattedValue);\n },\n _clearTimer: function () {\n clearTimeout(this.timeout);\n clearInterval(this.timer);\n },\n _keydown: function (e) {\n var that = this;\n if (e.keyCode in that._keyMap) {\n that._clearTooltipTimeout();\n that._setValueInRange(that._keyMap[e.keyCode](that.options.value));\n that._drag._updateTooltip(that.value());\n e.preventDefault();\n }\n },\n _setValueInRange: function (val) {\n var that = this, options = that.options;\n val = round(val);\n if (isNaN(val)) {\n that._update(options.min);\n return;\n }\n val = math.max(math.min(val, options.max), options.min);\n that._update(val);\n },\n _nextValueByIndex: function (index) {\n var count = this._values.length;\n if (this._isRtl) {\n index = count - 1 - index;\n }\n return this._values[math.max(0, math.min(index, count - 1))];\n },\n _formResetHandler: function () {\n var that = this, min = that.options.min;\n setTimeout(function () {\n var value = that.element[0].value;\n that.value(value === '' || isNaN(value) ? min : value);\n });\n },\n destroy: function () {\n var that = this;\n SliderBase.fn.destroy.call(that);\n that.wrapper.off(NS).find('.k-button').off(NS).end().find(DRAG_HANDLE).off(NS).end().find(TICK_SELECTOR + ', ' + TRACK_SELECTOR).off(NS).end();\n that._drag.draggable.destroy();\n that._drag._removeTooltip(true);\n }\n });\n Slider.Selection = function (dragHandle, that, options) {\n function moveSelection(val) {\n var selectionValue = val - options.min, index = that._valueIndex = math.ceil(round(selectionValue / options.smallStep)), selection = parseInt(that._pixelSteps[index], 10), selectionDiv = that._trackDiv.find('.k-slider-selection'), halfDragHanndle = parseInt(that._outerSize(dragHandle) / 2, 10), rtlCorrection = that._isRtl ? 2 : 0;\n selectionDiv[that._sizeFn](that._isRtl ? that._maxSelection - selection : selection);\n dragHandle.css(that._position, selection - halfDragHanndle - rtlCorrection);\n }\n moveSelection(options.value);\n that.bind([\n SLIDE,\n MOVE_SELECTION\n ], function (e) {\n moveSelection(parseFloat(e.value, 10));\n });\n that.bind(CHANGE, function (e) {\n moveSelection(parseFloat(e.sender.value(), 10));\n });\n };\n Slider.Drag = function (element, type, owner, options) {\n var that = this;\n that.owner = owner;\n that.options = options;\n that.element = element;\n that.type = type;\n that.draggable = new Draggable(element, {\n distance: 0,\n dragstart: proxy(that._dragstart, that),\n drag: proxy(that.drag, that),\n dragend: proxy(that.dragend, that),\n dragcancel: proxy(that.dragcancel, that)\n });\n element.click(false);\n };\n Slider.Drag.prototype = {\n dragstart: function (e) {\n this.owner._activeDragHandle = this;\n this.draggable.userEvents.cancel();\n this._dragstart(e);\n this.dragend();\n },\n _dragstart: function (e) {\n var that = this, owner = that.owner, options = that.options;\n if (!options.enabled) {\n e.preventDefault();\n return;\n }\n this.owner._activeDragHandle = this;\n owner.element.off(MOUSE_OVER);\n owner.wrapper.find('.' + STATE_FOCUSED).removeClass(STATE_FOCUSED + ' ' + STATE_SELECTED);\n that.element.addClass(STATE_FOCUSED + ' ' + STATE_SELECTED);\n $(document.documentElement).css('cursor', 'pointer');\n that.dragableArea = owner._getDraggableArea();\n that.step = math.max(options.smallStep * (owner._maxSelection / owner._distance()), 0);\n if (that.type) {\n that.selectionStart = options.selectionStart;\n that.selectionEnd = options.selectionEnd;\n owner._setZIndex(that.type);\n } else {\n that.oldVal = that.val = options.value;\n }\n that._removeTooltip(true);\n that._createTooltip();\n },\n _createTooltip: function () {\n var that = this, owner = that.owner, tooltip = that.options.tooltip, html = '', wnd = $(window), tooltipTemplate, colloutCssClass;\n if (!tooltip.enabled) {\n return;\n }\n if (tooltip.template) {\n tooltipTemplate = that.tooltipTemplate = kendo.template(tooltip.template);\n }\n $('.k-slider-tooltip').remove();\n that.tooltipDiv = $('
              ').appendTo(document.body);\n html = owner._getFormattedValue(that.val || owner.value(), that);\n if (!that.type) {\n colloutCssClass = 'k-callout-' + (owner._isHorizontal ? 's' : 'e');\n that.tooltipInnerDiv = '
              ';\n html += that.tooltipInnerDiv;\n }\n that.tooltipDiv.html(html);\n that._scrollOffset = {\n top: wnd.scrollTop(),\n left: wnd.scrollLeft()\n };\n that.moveTooltip();\n },\n drag: function (e) {\n var that = this, owner = that.owner, x = e.x.location, y = e.y.location, startPoint = that.dragableArea.startPoint, endPoint = that.dragableArea.endPoint, slideParams;\n e.preventDefault();\n if (owner._isHorizontal) {\n if (owner._isRtl) {\n that.val = that.constrainValue(x, startPoint, endPoint, x < endPoint);\n } else {\n that.val = that.constrainValue(x, startPoint, endPoint, x >= endPoint);\n }\n } else {\n that.val = that.constrainValue(y, endPoint, startPoint, y <= endPoint);\n }\n if (that.oldVal != that.val) {\n that.oldVal = that.val;\n if (that.type) {\n if (that.type == 'firstHandle') {\n if (that.val < that.selectionEnd) {\n that.selectionStart = that.val;\n } else {\n that.selectionStart = that.selectionEnd = that.val;\n }\n } else {\n if (that.val > that.selectionStart) {\n that.selectionEnd = that.val;\n } else {\n that.selectionStart = that.selectionEnd = that.val;\n }\n }\n slideParams = {\n values: [\n that.selectionStart,\n that.selectionEnd\n ],\n value: [\n that.selectionStart,\n that.selectionEnd\n ]\n };\n } else {\n slideParams = { value: that.val };\n }\n owner.trigger(SLIDE, slideParams);\n }\n that._updateTooltip(that.val);\n },\n _updateTooltip: function (val) {\n var that = this, options = that.options, tooltip = options.tooltip, html = '';\n if (!tooltip.enabled) {\n return;\n }\n if (!that.tooltipDiv) {\n that._createTooltip();\n }\n html = that.owner._getFormattedValue(round(val), that);\n if (!that.type) {\n html += that.tooltipInnerDiv;\n }\n that.tooltipDiv.html(html);\n that.moveTooltip();\n },\n dragcancel: function () {\n this.owner._refresh();\n $(document.documentElement).css('cursor', '');\n return this._end();\n },\n dragend: function () {\n var that = this, owner = that.owner;\n $(document.documentElement).css('cursor', '');\n if (that.type) {\n owner._update(that.selectionStart, that.selectionEnd);\n } else {\n owner._update(that.val);\n that.draggable.userEvents._disposeAll();\n }\n that.draggable.userEvents.cancel();\n return that._end();\n },\n _end: function () {\n var that = this, owner = that.owner;\n owner._focusWithMouse(that.element);\n owner.element.on(MOUSE_OVER);\n return false;\n },\n _removeTooltip: function (noAnimation) {\n var that = this, owner = that.owner;\n if (that.tooltipDiv && owner.options.tooltip.enabled && owner.options.enabled) {\n if (noAnimation) {\n that.tooltipDiv.remove();\n that.tooltipDiv = null;\n } else {\n that.tooltipDiv.fadeOut('slow', function () {\n $(this).remove();\n that.tooltipDiv = null;\n });\n }\n }\n },\n moveTooltip: function () {\n var that = this, owner = that.owner, top = 0, left = 0, element = that.element, offset = kendo.getOffset(element), margin = 8, viewport = $(window), callout = that.tooltipDiv.find('.k-callout'), width = outerWidth(that.tooltipDiv), height = outerHeight(that.tooltipDiv), dragHandles, sdhOffset, diff, anchorSize;\n if (that.type) {\n dragHandles = owner.wrapper.find(DRAG_HANDLE);\n offset = kendo.getOffset(dragHandles.eq(0));\n sdhOffset = kendo.getOffset(dragHandles.eq(1));\n if (owner._isHorizontal) {\n top = sdhOffset.top;\n left = offset.left + (sdhOffset.left - offset.left) / 2;\n } else {\n top = offset.top + (sdhOffset.top - offset.top) / 2;\n left = sdhOffset.left;\n }\n anchorSize = outerWidth(dragHandles.eq(0)) + 2 * margin;\n } else {\n top = offset.top;\n left = offset.left;\n anchorSize = outerWidth(element) + 2 * margin;\n }\n if (owner._isHorizontal) {\n left -= parseInt((width - owner._outerSize(element)) / 2, 10);\n top -= height + callout.height() + margin;\n } else {\n top -= parseInt((height - owner._outerSize(element)) / 2, 10);\n left -= width + callout.width() + margin;\n }\n if (owner._isHorizontal) {\n diff = that._flip(top, height, anchorSize, outerHeight(viewport) + that._scrollOffset.top);\n top += diff;\n left += that._fit(left, width, outerWidth(viewport) + that._scrollOffset.left);\n } else {\n diff = that._flip(left, width, anchorSize, outerWidth(viewport) + that._scrollOffset.left);\n top += that._fit(top, height, outerHeight(viewport) + that._scrollOffset.top);\n left += diff;\n }\n if (diff > 0 && callout) {\n callout.removeClass();\n callout.addClass('k-callout k-callout-' + (owner._isHorizontal ? 'n' : 'w'));\n }\n that.tooltipDiv.css({\n top: top,\n left: left\n });\n },\n _fit: function (position, size, viewPortEnd) {\n var output = 0;\n if (position + size > viewPortEnd) {\n output = viewPortEnd - (position + size);\n }\n if (position < 0) {\n output = -position;\n }\n return output;\n },\n _flip: function (offset, size, anchorSize, viewPortEnd) {\n var output = 0;\n if (offset + size > viewPortEnd) {\n output += -(anchorSize + size);\n }\n if (offset + output < 0) {\n output += anchorSize + size;\n }\n return output;\n },\n constrainValue: function (position, min, max, maxOverflow) {\n var that = this, val = 0;\n if (min < position && position < max) {\n val = that.owner._getValueFromPosition(position, that.dragableArea);\n } else {\n if (maxOverflow) {\n val = that.options.max;\n } else {\n val = that.options.min;\n }\n }\n return val;\n }\n };\n kendo.ui.plugin(Slider);\n var RangeSlider = SliderBase.extend({\n init: function (element, options) {\n var that = this, inputs = $(element).find('input'), firstInput = inputs.eq(0)[0], secondInput = inputs.eq(1)[0];\n firstInput.type = 'text';\n secondInput.type = 'text';\n if (options && options.showButtons) {\n if (window.console) {\n window.console.warn('showbuttons option is not supported for the range slider, ignoring');\n }\n options.showButtons = false;\n }\n options = extend({}, {\n selectionStart: parseAttr(firstInput, 'value'),\n min: parseAttr(firstInput, 'min'),\n max: parseAttr(firstInput, 'max'),\n smallStep: parseAttr(firstInput, 'step')\n }, {\n selectionEnd: parseAttr(secondInput, 'value'),\n min: parseAttr(secondInput, 'min'),\n max: parseAttr(secondInput, 'max'),\n smallStep: parseAttr(secondInput, 'step')\n }, options);\n if (options && options.enabled === undefined) {\n options.enabled = !inputs.is('[disabled]');\n }\n SliderBase.fn.init.call(that, element, options);\n options = that.options;\n if (!defined(options.selectionStart) || options.selectionStart === null) {\n options.selectionStart = options.min;\n inputs.eq(0).prop('value', formatValue(options.min));\n }\n if (!defined(options.selectionEnd) || options.selectionEnd === null) {\n options.selectionEnd = options.max;\n inputs.eq(1).prop('value', formatValue(options.max));\n }\n var dragHandles = that.wrapper.find(DRAG_HANDLE);\n this._selection = new RangeSlider.Selection(dragHandles, that, options);\n that._firstHandleDrag = new Slider.Drag(dragHandles.eq(0), 'firstHandle', that, options);\n that._lastHandleDrag = new Slider.Drag(dragHandles.eq(1), 'lastHandle', that, options);\n },\n options: {\n name: 'RangeSlider',\n leftDragHandleTitle: 'drag',\n rightDragHandleTitle: 'drag',\n tooltip: { format: '{0:#,#.##}' },\n selectionStart: null,\n selectionEnd: null\n },\n enable: function (enable) {\n var that = this, options = that.options, clickHandler;\n that.disable();\n if (enable === false) {\n return;\n }\n that.wrapper.removeClass(STATE_DISABLED).addClass(STATE_DEFAULT);\n that.wrapper.find('input').removeAttr(DISABLED);\n clickHandler = function (e) {\n var touch = getTouches(e)[0];\n if (!touch) {\n return;\n }\n var mousePosition = that._isHorizontal ? touch.location.pageX : touch.location.pageY, dragableArea = that._getDraggableArea(), val = that._getValueFromPosition(mousePosition, dragableArea), target = $(e.target), from, to, drag;\n if (target.hasClass('k-draghandle')) {\n that.wrapper.find('.' + STATE_FOCUSED).removeClass(STATE_FOCUSED + ' ' + STATE_SELECTED);\n target.addClass(STATE_FOCUSED + ' ' + STATE_SELECTED);\n return;\n }\n if (val < options.selectionStart) {\n from = val;\n to = options.selectionEnd;\n drag = that._firstHandleDrag;\n } else if (val > that.selectionEnd) {\n from = options.selectionStart;\n to = val;\n drag = that._lastHandleDrag;\n } else {\n if (val - options.selectionStart <= options.selectionEnd - val) {\n from = val;\n to = options.selectionEnd;\n drag = that._firstHandleDrag;\n } else {\n from = options.selectionStart;\n to = val;\n drag = that._lastHandleDrag;\n }\n }\n drag.dragstart(e);\n that._setValueInRange(from, to);\n that._focusWithMouse(drag.element);\n };\n that.wrapper.find(TICK_SELECTOR + ', ' + TRACK_SELECTOR).on(TRACK_MOUSE_DOWN, clickHandler).end().on(TRACK_MOUSE_DOWN, function () {\n $(document.documentElement).one('selectstart', kendo.preventDefault);\n }).on(TRACK_MOUSE_UP, function () {\n if (that._activeDragHandle) {\n that._activeDragHandle._end();\n }\n });\n that.wrapper.find(DRAG_HANDLE).attr(TABINDEX, 0).on(MOUSE_UP, function () {\n that._setTooltipTimeout();\n }).on(CLICK, function (e) {\n that._focusWithMouse(e.target);\n e.preventDefault();\n }).on(FOCUS, proxy(that._focus, that)).on(BLUR, proxy(that._blur, that));\n that.wrapper.find(DRAG_HANDLE).off(KEY_DOWN, kendo.preventDefault).eq(0).on(KEY_DOWN, proxy(function (e) {\n this._keydown(e, 'firstHandle');\n }, that)).end().eq(1).on(KEY_DOWN, proxy(function (e) {\n this._keydown(e, 'lastHandle');\n }, that));\n that.options.enabled = true;\n },\n disable: function () {\n var that = this;\n that.wrapper.removeClass(STATE_DEFAULT).addClass(STATE_DISABLED);\n that.wrapper.find('input').prop(DISABLED, DISABLED);\n that.wrapper.find(TICK_SELECTOR + ', ' + TRACK_SELECTOR).off(TRACK_MOUSE_DOWN).off(TRACK_MOUSE_UP);\n that.wrapper.find(DRAG_HANDLE).attr(TABINDEX, -1).off(MOUSE_UP).off(KEY_DOWN).off(CLICK).off(FOCUS).off(BLUR);\n that.options.enabled = false;\n },\n _keydown: function (e, handle) {\n var that = this, selectionStartValue = that.options.selectionStart, selectionEndValue = that.options.selectionEnd, dragSelectionStart, dragSelectionEnd, activeHandleDrag;\n if (e.keyCode in that._keyMap) {\n that._clearTooltipTimeout();\n if (handle == 'firstHandle') {\n activeHandleDrag = that._activeHandleDrag = that._firstHandleDrag;\n selectionStartValue = that._keyMap[e.keyCode](selectionStartValue);\n if (selectionStartValue > selectionEndValue) {\n selectionEndValue = selectionStartValue;\n }\n } else {\n activeHandleDrag = that._activeHandleDrag = that._lastHandleDrag;\n selectionEndValue = that._keyMap[e.keyCode](selectionEndValue);\n if (selectionStartValue > selectionEndValue) {\n selectionStartValue = selectionEndValue;\n }\n }\n that._setValueInRange(round(selectionStartValue), round(selectionEndValue));\n dragSelectionStart = Math.max(selectionStartValue, that.options.selectionStart);\n dragSelectionEnd = Math.min(selectionEndValue, that.options.selectionEnd);\n activeHandleDrag.selectionEnd = Math.max(dragSelectionEnd, that.options.selectionStart);\n activeHandleDrag.selectionStart = Math.min(dragSelectionStart, that.options.selectionEnd);\n activeHandleDrag._updateTooltip(that.value()[that._activeHandle]);\n e.preventDefault();\n }\n },\n _update: function (selectionStart, selectionEnd) {\n var that = this, values = that.value();\n var change = values[0] != selectionStart || values[1] != selectionEnd;\n that.value([\n selectionStart,\n selectionEnd\n ]);\n if (change) {\n that.trigger(CHANGE, {\n values: [\n selectionStart,\n selectionEnd\n ],\n value: [\n selectionStart,\n selectionEnd\n ]\n });\n }\n },\n value: function (value) {\n if (value && value.length) {\n return this._value(value[0], value[1]);\n } else {\n return this._value();\n }\n },\n _value: function (start, end) {\n var that = this, options = that.options, selectionStart = options.selectionStart, selectionEnd = options.selectionEnd;\n if (isNaN(start) && isNaN(end)) {\n return [\n selectionStart,\n selectionEnd\n ];\n } else {\n start = round(start);\n end = round(end);\n }\n if (start >= options.min && start <= options.max && end >= options.min && end <= options.max && start <= end) {\n if (selectionStart != start || selectionEnd != end) {\n that.element.find('input').eq(0).prop('value', formatValue(start)).end().eq(1).prop('value', formatValue(end));\n options.selectionStart = start;\n options.selectionEnd = end;\n that._refresh();\n that._refreshAriaAttr(start, end);\n }\n }\n },\n values: function (start, end) {\n if (isArray(start)) {\n return this._value(start[0], start[1]);\n } else {\n return this._value(start, end);\n }\n },\n _refresh: function () {\n var that = this, options = that.options;\n that.trigger(MOVE_SELECTION, {\n values: [\n options.selectionStart,\n options.selectionEnd\n ],\n value: [\n options.selectionStart,\n options.selectionEnd\n ]\n });\n if (options.selectionStart == options.max && options.selectionEnd == options.max) {\n that._setZIndex('firstHandle');\n }\n },\n _refreshAriaAttr: function (start, end) {\n var that = this, dragHandles = that.wrapper.find(DRAG_HANDLE), drag = that._activeHandleDrag, formattedValue;\n formattedValue = that._getFormattedValue([\n start,\n end\n ], drag);\n dragHandles.eq(0).attr('aria-valuenow', start);\n dragHandles.eq(1).attr('aria-valuenow', end);\n dragHandles.attr('aria-valuetext', formattedValue);\n },\n _setValueInRange: function (selectionStart, selectionEnd) {\n var options = this.options;\n selectionStart = math.max(math.min(selectionStart, options.max), options.min);\n selectionEnd = math.max(math.min(selectionEnd, options.max), options.min);\n if (selectionStart == options.max && selectionEnd == options.max) {\n this._setZIndex('firstHandle');\n }\n this._update(math.min(selectionStart, selectionEnd), math.max(selectionStart, selectionEnd));\n },\n _setZIndex: function (type) {\n this.wrapper.find(DRAG_HANDLE).each(function (index) {\n $(this).css('z-index', type == 'firstHandle' ? 1 - index : index);\n });\n },\n _formResetHandler: function () {\n var that = this, options = that.options;\n setTimeout(function () {\n var inputs = that.element.find('input');\n var start = inputs[0].value;\n var end = inputs[1].value;\n that.values(start === '' || isNaN(start) ? options.min : start, end === '' || isNaN(end) ? options.max : end);\n });\n },\n destroy: function () {\n var that = this;\n SliderBase.fn.destroy.call(that);\n that.wrapper.off(NS).find(TICK_SELECTOR + ', ' + TRACK_SELECTOR).off(NS).end().find(DRAG_HANDLE).off(NS);\n that._firstHandleDrag.draggable.destroy();\n that._lastHandleDrag.draggable.destroy();\n }\n });\n RangeSlider.Selection = function (dragHandles, that, options) {\n function moveSelection(value) {\n value = value || [];\n var selectionStartValue = value[0] - options.min, selectionEndValue = value[1] - options.min, selectionStartIndex = math.ceil(round(selectionStartValue / options.smallStep)), selectionEndIndex = math.ceil(round(selectionEndValue / options.smallStep)), selectionStart = that._pixelSteps[selectionStartIndex], selectionEnd = that._pixelSteps[selectionEndIndex], halfHandle = parseInt(that._outerSize(dragHandles.eq(0)) / 2, 10), rtlCorrection = that._isRtl ? 2 : 0;\n dragHandles.eq(0).css(that._position, selectionStart - halfHandle - rtlCorrection).end().eq(1).css(that._position, selectionEnd - halfHandle - rtlCorrection);\n makeSelection(selectionStart, selectionEnd);\n }\n function makeSelection(selectionStart, selectionEnd) {\n var selection, selectionPosition, selectionDiv = that._trackDiv.find('.k-slider-selection');\n selection = math.abs(selectionStart - selectionEnd);\n selectionDiv[that._sizeFn](selection);\n if (that._isRtl) {\n selectionPosition = math.max(selectionStart, selectionEnd);\n selectionDiv.css('right', that._maxSelection - selectionPosition - 1);\n } else {\n selectionPosition = math.min(selectionStart, selectionEnd);\n selectionDiv.css(that._position, selectionPosition - 1);\n }\n }\n moveSelection(that.value());\n that.bind([\n CHANGE,\n SLIDE,\n MOVE_SELECTION\n ], function (e) {\n moveSelection(e.values);\n });\n };\n kendo.ui.plugin(RangeSlider);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.colorpicker', [\n 'kendo.core',\n 'kendo.color',\n 'kendo.popup',\n 'kendo.slider',\n 'kendo.userevents',\n 'kendo.button'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'colorpicker',\n name: 'Color tools',\n category: 'web',\n description: 'Color selection widgets',\n depends: [\n 'core',\n 'color',\n 'popup',\n 'slider',\n 'userevents',\n 'button'\n ]\n };\n (function ($, parseInt, undefined) {\n var kendo = window.kendo, ui = kendo.ui, Widget = ui.Widget, parseColor = kendo.parseColor, Color = kendo.Color, KEYS = kendo.keys, BACKGROUNDCOLOR = 'background-color', ITEMSELECTEDCLASS = 'k-state-selected', SIMPLEPALETTE = '000000,7f7f7f,880015,ed1c24,ff7f27,fff200,22b14c,00a2e8,3f48cc,a349a4,ffffff,c3c3c3,b97a57,ffaec9,ffc90e,efe4b0,b5e61d,99d9ea,7092be,c8bfe7', WEBPALETTE = 'FFFFFF,FFCCFF,FF99FF,FF66FF,FF33FF,FF00FF,CCFFFF,CCCCFF,CC99FF,CC66FF,CC33FF,CC00FF,99FFFF,99CCFF,9999FF,9966FF,9933FF,9900FF,FFFFCC,FFCCCC,FF99CC,FF66CC,FF33CC,FF00CC,CCFFCC,CCCCCC,CC99CC,CC66CC,CC33CC,CC00CC,99FFCC,99CCCC,9999CC,9966CC,9933CC,9900CC,FFFF99,FFCC99,FF9999,FF6699,FF3399,FF0099,CCFF99,CCCC99,CC9999,CC6699,CC3399,CC0099,99FF99,99CC99,999999,996699,993399,990099,FFFF66,FFCC66,FF9966,FF6666,FF3366,FF0066,CCFF66,CCCC66,CC9966,CC6666,CC3366,CC0066,99FF66,99CC66,999966,996666,993366,990066,FFFF33,FFCC33,FF9933,FF6633,FF3333,FF0033,CCFF33,CCCC33,CC9933,CC6633,CC3333,CC0033,99FF33,99CC33,999933,996633,993333,990033,FFFF00,FFCC00,FF9900,FF6600,FF3300,FF0000,CCFF00,CCCC00,CC9900,CC6600,CC3300,CC0000,99FF00,99CC00,999900,996600,993300,990000,66FFFF,66CCFF,6699FF,6666FF,6633FF,6600FF,33FFFF,33CCFF,3399FF,3366FF,3333FF,3300FF,00FFFF,00CCFF,0099FF,0066FF,0033FF,0000FF,66FFCC,66CCCC,6699CC,6666CC,6633CC,6600CC,33FFCC,33CCCC,3399CC,3366CC,3333CC,3300CC,00FFCC,00CCCC,0099CC,0066CC,0033CC,0000CC,66FF99,66CC99,669999,666699,663399,660099,33FF99,33CC99,339999,336699,333399,330099,00FF99,00CC99,009999,006699,003399,000099,66FF66,66CC66,669966,666666,663366,660066,33FF66,33CC66,339966,336666,333366,330066,00FF66,00CC66,009966,006666,003366,000066,66FF33,66CC33,669933,666633,663333,660033,33FF33,33CC33,339933,336633,333333,330033,00FF33,00CC33,009933,006633,003333,000033,66FF00,66CC00,669900,666600,663300,660000,33FF00,33CC00,339900,336600,333300,330000,00FF00,00CC00,009900,006600,003300,000000', WHITE = '#ffffff', MESSAGES = {\n apply: 'Apply',\n cancel: 'Cancel',\n noColor: 'no color',\n clearColor: 'Clear color',\n previewInput: 'Color Hexadecimal Code'\n }, NS = '.kendoColorTools', CLICK_NS = 'click' + NS, KEYDOWN_NS = 'keydown' + NS, browser = kendo.support.browser, isIE8 = browser.msie && browser.version < 9;\n var ColorSelector = Widget.extend({\n init: function (element, options) {\n var that = this, ariaId;\n Widget.fn.init.call(that, element, options);\n element = that.element;\n options = that.options;\n that._value = options.value = parseColor(options.value);\n that._tabIndex = element.attr('tabIndex') || 0;\n ariaId = that._ariaId = options.ariaId;\n if (ariaId) {\n element.attr('aria-labelledby', ariaId);\n }\n if (options._standalone) {\n that._triggerSelect = that._triggerChange;\n }\n },\n options: {\n name: 'ColorSelector',\n value: null,\n _standalone: true\n },\n events: [\n 'change',\n 'select',\n 'cancel'\n ],\n color: function (value) {\n if (value !== undefined) {\n this._value = parseColor(value);\n this._updateUI(this._value);\n }\n return this._value;\n },\n value: function (color) {\n color = this.color(color);\n if (color) {\n if (this.options.opacity) {\n color = color.toCssRgba();\n } else {\n color = color.toCss();\n }\n }\n return color || null;\n },\n enable: function (enable) {\n if (arguments.length === 0) {\n enable = true;\n }\n $('.k-disabled-overlay', this.wrapper).remove();\n if (!enable) {\n this.wrapper.append('
              ');\n }\n this._onEnable(enable);\n },\n _select: function (color, nohooks) {\n var prev = this._value;\n color = this.color(color);\n if (!nohooks) {\n this.element.trigger('change');\n if (!color.equals(prev)) {\n this.trigger('change', { value: this.value() });\n } else if (!this._standalone) {\n this.trigger('cancel');\n }\n }\n },\n _triggerSelect: function (color) {\n triggerEvent(this, 'select', color);\n },\n _triggerChange: function (color) {\n triggerEvent(this, 'change', color);\n },\n destroy: function () {\n if (this.element) {\n this.element.off(NS);\n }\n if (this.wrapper) {\n this.wrapper.off(NS).find('*').off(NS);\n }\n this.wrapper = null;\n Widget.fn.destroy.call(this);\n },\n _updateUI: $.noop,\n _selectOnHide: function () {\n return null;\n },\n _cancel: function () {\n this.trigger('cancel');\n }\n });\n function triggerEvent(self, type, color) {\n color = parseColor(color);\n if (color && !color.equals(self.color())) {\n if (type == 'change') {\n self._value = color;\n }\n if (color.a != 1) {\n color = color.toCssRgba();\n } else {\n color = color.toCss();\n }\n self.trigger(type, { value: color });\n }\n }\n var ColorPalette = ColorSelector.extend({\n init: function (element, options) {\n var that = this;\n ColorSelector.fn.init.call(that, element, options);\n element = that.wrapper = that.element;\n options = that.options;\n var colors = options.palette;\n if (colors == 'websafe') {\n colors = WEBPALETTE;\n options.columns = 18;\n } else if (colors == 'basic') {\n colors = SIMPLEPALETTE;\n }\n if (typeof colors == 'string') {\n colors = colors.split(',');\n }\n if ($.isArray(colors)) {\n colors = $.map(colors, function (x) {\n return parseColor(x);\n });\n }\n that._selectedID = (options.ariaId || kendo.guid()) + '_selected';\n element.addClass('k-widget k-colorpalette').attr('role', 'grid').attr('aria-readonly', 'true').append($(that._template({\n colors: colors,\n columns: options.columns,\n tileSize: options.tileSize,\n value: that._value,\n id: options.ariaId\n }))).on(CLICK_NS, '.k-item', function (ev) {\n that._select($(ev.currentTarget).css(BACKGROUNDCOLOR));\n }).attr('tabIndex', that._tabIndex).on(KEYDOWN_NS, bind(that._keydown, that));\n var tileSize = options.tileSize, width, height;\n if (tileSize) {\n if (/number|string/.test(typeof tileSize)) {\n width = height = parseFloat(tileSize);\n } else if (typeof tileSize == 'object') {\n width = parseFloat(tileSize.width);\n height = parseFloat(tileSize.height);\n } else {\n throw new Error('Unsupported value for the \\'tileSize\\' argument');\n }\n element.find('.k-item').css({\n width: width,\n height: height\n });\n }\n },\n focus: function () {\n this.wrapper.focus();\n },\n options: {\n name: 'ColorPalette',\n columns: 10,\n tileSize: null,\n palette: 'basic'\n },\n _onEnable: function (enable) {\n if (enable) {\n this.wrapper.attr('tabIndex', this._tabIndex);\n } else {\n this.wrapper.removeAttr('tabIndex');\n }\n },\n _keydown: function (e) {\n var selected, wrapper = this.wrapper, items = wrapper.find('.k-item'), current = items.filter('.' + ITEMSELECTEDCLASS).get(0), keyCode = e.keyCode;\n if (keyCode == KEYS.LEFT) {\n selected = relative(items, current, -1);\n } else if (keyCode == KEYS.RIGHT) {\n selected = relative(items, current, 1);\n } else if (keyCode == KEYS.DOWN) {\n selected = relative(items, current, this.options.columns);\n } else if (keyCode == KEYS.UP) {\n selected = relative(items, current, -this.options.columns);\n } else if (keyCode == KEYS.ENTER) {\n preventDefault(e);\n if (current) {\n this._select($(current).css(BACKGROUNDCOLOR));\n }\n } else if (keyCode == KEYS.ESC) {\n this._cancel();\n }\n if (selected) {\n preventDefault(e);\n this._current(selected);\n try {\n var color = parseColor(selected.css(BACKGROUNDCOLOR));\n this._triggerSelect(color);\n } catch (ex) {\n }\n }\n },\n _current: function (item) {\n this.wrapper.find('.' + ITEMSELECTEDCLASS).removeClass(ITEMSELECTEDCLASS).attr('aria-selected', false).removeAttr('id');\n $(item).addClass(ITEMSELECTEDCLASS).attr('aria-selected', true).attr('id', this._selectedID);\n this.element.removeAttr('aria-activedescendant').attr('aria-activedescendant', this._selectedID);\n },\n _updateUI: function (color) {\n var item = null;\n this.wrapper.find('.k-item').each(function () {\n var c = parseColor($(this).css(BACKGROUNDCOLOR));\n if (c && c.equals(color)) {\n item = this;\n return false;\n }\n });\n this._current(item);\n },\n _template: kendo.template('' + '# for (var i = 0; i < colors.length; ++i) { #' + '# var selected = colors[i].equals(value); #' + '# if (i && i % columns == 0) { # # } #' + '' + '# } #' + '
              ')\n });\n var FlatColorPicker = ColorSelector.extend({\n init: function (element, options) {\n var that = this;\n ColorSelector.fn.init.call(that, element, options);\n options = that.options;\n options.messages = options.options ? $.extend(that.options.messages, options.options.messages) : that.options.messages;\n element = that.element;\n that.wrapper = element.addClass('k-widget k-flatcolorpicker').append(that._template(options));\n that._hueElements = $('.k-hsv-rectangle, .k-transparency-slider .k-slider-track', element);\n that._selectedColor = $('.k-selected-color-display', element);\n that._colorAsText = $('input.k-color-value', element);\n that._sliders();\n that._hsvArea();\n that._updateUI(that._value || parseColor('#f00'));\n element.find('input.k-color-value').on(KEYDOWN_NS, function (ev) {\n var input = this;\n if (ev.keyCode == KEYS.ENTER) {\n try {\n var color = parseColor(input.value);\n var val = that.color();\n that._select(color, color.equals(val));\n } catch (ex) {\n $(input).addClass('k-state-error');\n }\n } else if (that.options.autoupdate) {\n setTimeout(function () {\n var color = parseColor(input.value, true);\n if (color) {\n that._updateUI(color, true);\n }\n }, 10);\n }\n }).end().on(CLICK_NS, '.k-controls button.apply', function () {\n if (that.options._clearedColor) {\n that.trigger('change');\n } else {\n that._select(that._getHSV());\n }\n }).on(CLICK_NS, '.k-controls button.cancel', function () {\n that._updateUI(that.color());\n that._cancel();\n });\n if (isIE8) {\n that._applyIEFilter();\n }\n },\n destroy: function () {\n this._hueSlider.destroy();\n if (this._opacitySlider) {\n this._opacitySlider.destroy();\n }\n this._hueSlider = this._opacitySlider = this._hsvRect = this._hsvHandle = this._hueElements = this._selectedColor = this._colorAsText = null;\n ColorSelector.fn.destroy.call(this);\n },\n options: {\n name: 'FlatColorPicker',\n opacity: false,\n buttons: false,\n input: true,\n preview: true,\n clearButton: false,\n autoupdate: true,\n messages: MESSAGES\n },\n _applyIEFilter: function () {\n var track = this.element.find('.k-hue-slider .k-slider-track')[0], url = track.currentStyle.backgroundImage;\n url = url.replace(/^url\\([\\'\\\"]?|[\\'\\\"]?\\)$/g, '');\n track.style.filter = 'progid:DXImageTransform.Microsoft.AlphaImageLoader(src=\\'' + url + '\\', sizingMethod=\\'scale\\')';\n },\n _sliders: function () {\n var that = this, element = that.element, hueSlider = element.find('.k-hue-slider'), opacitySlider = element.find('.k-transparency-slider');\n function hueChange(e) {\n that._updateUI(that._getHSV(e.value, null, null, null));\n }\n hueSlider.attr('aria-label', 'hue saturation');\n that._hueSlider = hueSlider.kendoSlider({\n min: 0,\n max: 360,\n tickPlacement: 'none',\n showButtons: false,\n slide: hueChange,\n change: hueChange\n }).data('kendoSlider');\n function opacityChange(e) {\n that._updateUI(that._getHSV(null, null, null, e.value / 100));\n }\n opacitySlider.attr('aria-label', 'opacity');\n that._opacitySlider = opacitySlider.kendoSlider({\n min: 0,\n max: 100,\n tickPlacement: 'none',\n showButtons: false,\n slide: opacityChange,\n change: opacityChange\n }).data('kendoSlider');\n },\n _hsvArea: function () {\n var that = this, element = that.element, hsvRect = element.find('.k-hsv-rectangle'), hsvHandle = hsvRect.find('.k-draghandle').attr('tabIndex', 0).on(KEYDOWN_NS, bind(that._keydown, that));\n function update(x, y) {\n var offset = this.offset, dx = x - offset.left, dy = y - offset.top, rw = this.width, rh = this.height;\n dx = dx < 0 ? 0 : dx > rw ? rw : dx;\n dy = dy < 0 ? 0 : dy > rh ? rh : dy;\n that._svChange(dx / rw, 1 - dy / rh);\n }\n that._hsvEvents = new kendo.UserEvents(hsvRect, {\n global: true,\n press: function (e) {\n this.offset = kendo.getOffset(hsvRect);\n this.width = hsvRect.width();\n this.height = hsvRect.height();\n hsvHandle.focus();\n update.call(this, e.x.location, e.y.location);\n },\n start: function () {\n hsvRect.addClass('k-dragging');\n hsvHandle.focus();\n },\n move: function (e) {\n e.preventDefault();\n update.call(this, e.x.location, e.y.location);\n },\n end: function () {\n hsvRect.removeClass('k-dragging');\n }\n });\n that._hsvRect = hsvRect;\n that._hsvHandle = hsvHandle;\n },\n _onEnable: function (enable) {\n this._hueSlider.enable(enable);\n if (this._opacitySlider) {\n this._opacitySlider.enable(enable);\n }\n this.wrapper.find('input').attr('disabled', !enable);\n var handle = this._hsvRect.find('.k-draghandle');\n if (enable) {\n handle.attr('tabIndex', this._tabIndex);\n } else {\n handle.removeAttr('tabIndex');\n }\n },\n _keydown: function (ev) {\n var that = this;\n function move(prop, d) {\n var c = that._getHSV();\n c[prop] += d * (ev.shiftKey ? 0.01 : 0.05);\n if (c[prop] < 0) {\n c[prop] = 0;\n }\n if (c[prop] > 1) {\n c[prop] = 1;\n }\n that._updateUI(c);\n preventDefault(ev);\n }\n function hue(d) {\n var c = that._getHSV();\n c.h += d * (ev.shiftKey ? 1 : 5);\n if (c.h < 0) {\n c.h = 0;\n }\n if (c.h > 359) {\n c.h = 359;\n }\n that._updateUI(c);\n preventDefault(ev);\n }\n switch (ev.keyCode) {\n case KEYS.LEFT:\n if (ev.ctrlKey) {\n hue(-1);\n } else {\n move('s', -1);\n }\n break;\n case KEYS.RIGHT:\n if (ev.ctrlKey) {\n hue(1);\n } else {\n move('s', 1);\n }\n break;\n case KEYS.UP:\n move(ev.ctrlKey && that._opacitySlider ? 'a' : 'v', 1);\n break;\n case KEYS.DOWN:\n move(ev.ctrlKey && that._opacitySlider ? 'a' : 'v', -1);\n break;\n case KEYS.ENTER:\n that._select(that._getHSV());\n break;\n case KEYS.F2:\n that.wrapper.find('input.k-color-value').focus().select();\n break;\n case KEYS.ESC:\n that._cancel();\n break;\n }\n },\n focus: function () {\n this._hsvHandle.focus();\n },\n _getHSV: function (h, s, v, a) {\n var rect = this._hsvRect, width = rect.width(), height = rect.height(), handlePosition = this._hsvHandle.position();\n if (h == null) {\n h = this._hueSlider.value();\n }\n if (s == null) {\n s = handlePosition.left / width;\n }\n if (v == null) {\n v = 1 - handlePosition.top / height;\n }\n if (a == null) {\n a = this._opacitySlider ? this._opacitySlider.value() / 100 : 1;\n }\n return Color.fromHSV(h, s, v, a);\n },\n _svChange: function (s, v) {\n var color = this._getHSV(null, s, v, null);\n this._updateUI(color);\n },\n _updateUI: function (color, dontChangeInput) {\n var that = this, rect = that._hsvRect;\n if (!color) {\n return;\n }\n this._colorAsText.attr('title', that.options.messages.previewInput);\n this._colorAsText.removeClass('k-state-error');\n that._selectedColor.css(BACKGROUNDCOLOR, color.toDisplay());\n if (!dontChangeInput) {\n that._colorAsText.val(that._opacitySlider ? color.toCssRgba() : color.toCss());\n }\n that._triggerSelect(color);\n color = color.toHSV();\n that._hsvHandle.css({\n left: color.s * rect.width() + 'px',\n top: (1 - color.v) * rect.height() + 'px'\n });\n that._hueElements.css(BACKGROUNDCOLOR, Color.fromHSV(color.h, 1, 1, 1).toCss());\n that._hueSlider.value(color.h);\n if (that._opacitySlider) {\n that._opacitySlider.value(100 * color.a);\n }\n },\n _selectOnHide: function () {\n return this.options.buttons ? null : this._getHSV();\n },\n _template: kendo.template('# if (preview) { #' + '
              ' + '# if (clearButton && !_standalone) { #' + '' + '# } #' + '
              ' + '# } #' + '# if (clearButton && !_standalone && !preview) { #' + '
              #: messages.clearColor #
              ' + '# } #' + '
              ' + '' + '# if (opacity) { #' + '' + '# } #' + '# if (buttons) { #' + '
              ' + '# } #')\n });\n function relative(array, element, delta) {\n array = Array.prototype.slice.call(array);\n var n = array.length;\n var pos = array.indexOf(element);\n if (pos < 0) {\n return delta < 0 ? array[n - 1] : array[0];\n }\n pos += delta;\n if (pos < 0) {\n pos += n;\n } else {\n pos %= n;\n }\n return array[pos];\n }\n var ColorPicker = Widget.extend({\n init: function (element, options) {\n var that = this;\n Widget.fn.init.call(that, element, options);\n options = that.options;\n element = that.element;\n var value = element.attr('value') || element.val();\n if (value) {\n value = parseColor(value, true);\n } else {\n value = parseColor(options.value, true);\n }\n that._value = options.value = value;\n var content = that.wrapper = $(that._template(options));\n element.hide().after(content);\n if (element.is('input')) {\n element.appendTo(content);\n var label = element.closest('label');\n var id = element.attr('id');\n if (id) {\n label = label.add('label[for=\"' + id + '\"]');\n }\n label.click(function (ev) {\n that.open();\n ev.preventDefault();\n });\n }\n that._tabIndex = element.attr('tabIndex') || 0;\n that.enable(!element.attr('disabled'));\n var accesskey = element.attr('accesskey');\n if (accesskey) {\n element.attr('accesskey', null);\n content.attr('accesskey', accesskey);\n }\n that.bind('activate', function (ev) {\n if (!ev.isDefaultPrevented()) {\n that.toggle();\n }\n });\n that._updateUI(value);\n },\n destroy: function () {\n this.wrapper.off(NS).find('*').off(NS);\n if (this._popup) {\n this._selector.destroy();\n this._popup.destroy();\n }\n this._selector = this._popup = this.wrapper = null;\n Widget.fn.destroy.call(this);\n },\n enable: function (enable) {\n var that = this, wrapper = that.wrapper, innerWrapper = wrapper.children('.k-picker-wrap'), arrow = innerWrapper.find('.k-select');\n if (arguments.length === 0) {\n enable = true;\n }\n that.element.attr('disabled', !enable);\n wrapper.attr('aria-disabled', !enable);\n arrow.off(NS).on('mousedown' + NS, preventDefault);\n wrapper.addClass('k-state-disabled').removeAttr('tabIndex').add('*', wrapper).off(NS);\n if (enable) {\n wrapper.removeClass('k-state-disabled').attr('tabIndex', that._tabIndex).on('mouseenter' + NS, function () {\n innerWrapper.addClass('k-state-hover');\n }).on('mouseleave' + NS, function () {\n innerWrapper.removeClass('k-state-hover');\n }).on('focus' + NS, function () {\n innerWrapper.addClass('k-state-focused');\n }).on('blur' + NS, function () {\n innerWrapper.removeClass('k-state-focused');\n }).on(KEYDOWN_NS, bind(that._keydown, that)).on(CLICK_NS, '.k-select', bind(that.toggle, that)).on(CLICK_NS, that.options.toolIcon ? '.k-tool-icon' : '.k-selected-color', function () {\n that.trigger('activate');\n });\n } else {\n that.close();\n }\n },\n _template: kendo.template('' + '' + '# if (toolIcon) { #' + '' + '' + '' + '# } else { #' + '' + '# } #' + '' + '' + '' + '' + ''),\n options: {\n name: 'ColorPicker',\n palette: null,\n columns: 10,\n toolIcon: null,\n value: null,\n messages: MESSAGES,\n opacity: false,\n buttons: true,\n preview: true,\n clearButton: false,\n ARIATemplate: 'Current selected color is #=data || \"\"#'\n },\n events: [\n 'activate',\n 'change',\n 'select',\n 'open',\n 'close'\n ],\n open: function () {\n if (!this.element.prop('disabled')) {\n this._getPopup().open();\n }\n },\n close: function () {\n var selOptions = this._selector && this._selector.options || {};\n selOptions._closing = true;\n this._getPopup().close();\n delete selOptions._closing;\n },\n toggle: function () {\n if (!this.element.prop('disabled')) {\n this._getPopup().toggle();\n }\n },\n _noColorIcon: function () {\n return this.wrapper.find('.k-picker-wrap > .k-selected-color > .k-icon.k-i-line');\n },\n color: ColorSelector.fn.color,\n value: ColorSelector.fn.value,\n _select: ColorSelector.fn._select,\n _triggerSelect: ColorSelector.fn._triggerSelect,\n _isInputTypeColor: function () {\n var el = this.element[0];\n return /^input$/i.test(el.tagName) && /^color$/i.test(el.type);\n },\n _updateUI: function (value) {\n var formattedValue = '';\n if (value) {\n if (this._isInputTypeColor() || value.a == 1) {\n formattedValue = value.toCss();\n } else {\n formattedValue = value.toCssRgba();\n }\n this.element.val(formattedValue);\n }\n if (!this._ariaTemplate) {\n this._ariaTemplate = kendo.template(this.options.ARIATemplate);\n }\n this.wrapper.attr('aria-label', this._ariaTemplate(formattedValue));\n this._triggerSelect(value);\n this.wrapper.find('.k-selected-color').css(BACKGROUNDCOLOR, value ? value.toDisplay() : WHITE);\n this._noColorIcon()[formattedValue ? 'hide' : 'show']();\n },\n _keydown: function (ev) {\n var key = ev.keyCode;\n if (this._getPopup().visible()) {\n if (key == KEYS.ESC) {\n this._selector._cancel();\n } else {\n this._selector._keydown(ev);\n }\n preventDefault(ev);\n } else if (key == KEYS.ENTER || key == KEYS.DOWN) {\n this.open();\n preventDefault(ev);\n }\n },\n _getPopup: function () {\n var that = this, popup = that._popup;\n if (!popup) {\n var options = that.options;\n var selectorType;\n if (options.palette) {\n selectorType = ColorPalette;\n } else {\n selectorType = FlatColorPicker;\n }\n options._standalone = false;\n delete options.select;\n delete options.change;\n delete options.cancel;\n var id = kendo.guid();\n var selector = that._selector = new selectorType($('
              ').appendTo(document.body), options);\n that.wrapper.attr('aria-owns', id);\n that._popup = popup = selector.wrapper.kendoPopup({\n anchor: that.wrapper,\n adjustSize: {\n width: 5,\n height: 0\n }\n }).data('kendoPopup');\n selector.element.find('.k-clear-color').kendoButton({\n icon: 'reset-color',\n click: function (e) {\n selector.options._clearedColor = true;\n that.value(null);\n that.element.val(null);\n that._updateUI(null);\n selector._colorAsText.val('');\n selector._hsvHandle.css({\n top: '0px',\n left: '0px'\n });\n selector._selectedColor.css(BACKGROUNDCOLOR, WHITE);\n that.trigger('change', { value: that.value() });\n e.preventDefault();\n }\n });\n selector.bind({\n select: function (ev) {\n that._updateUI(parseColor(ev.value));\n delete selector.options._clearedColor;\n },\n change: function () {\n if (!selector.options._clearedColor) {\n that._select(selector.color());\n }\n that.close();\n },\n cancel: function () {\n if (selector.options._clearedColor && !that.value() && selector.value()) {\n that._select(selector.color(), true);\n }\n that.close();\n }\n });\n popup.bind({\n close: function (ev) {\n if (that.trigger('close')) {\n ev.preventDefault();\n return;\n }\n that.wrapper.children('.k-picker-wrap').removeClass('k-state-focused');\n var color = selector._selectOnHide();\n var selectorColor = selector.value();\n var value = that.value();\n var options = selector.options;\n if (!color) {\n setTimeout(function () {\n if (that.wrapper) {\n that.wrapper.focus();\n }\n });\n if (!options._closing && options._clearedColor && !value && selectorColor) {\n that._select(selectorColor, true);\n } else {\n that._updateUI(that.color());\n }\n } else if (!(options._clearedColor && !value)) {\n that._select(color);\n }\n },\n open: function (ev) {\n if (that.trigger('open')) {\n ev.preventDefault();\n } else {\n that.wrapper.children('.k-picker-wrap').addClass('k-state-focused');\n }\n },\n activate: function () {\n selector._select(that.color(), true);\n selector.focus();\n that.wrapper.children('.k-picker-wrap').addClass('k-state-focused');\n }\n });\n }\n return popup;\n }\n });\n function preventDefault(ev) {\n ev.preventDefault();\n }\n function bind(callback, obj) {\n return function () {\n return callback.apply(obj, arguments);\n };\n }\n ui.plugin(ColorPalette);\n ui.plugin(FlatColorPicker);\n ui.plugin(ColorPicker);\n }(jQuery, parseInt));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.numerictextbox', [\n 'kendo.core',\n 'kendo.userevents'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'numerictextbox',\n name: 'NumericTextBox',\n category: 'web',\n description: 'The NumericTextBox widget can format and display numeric, percentage or currency textbox.',\n depends: [\n 'core',\n 'userevents'\n ]\n };\n (function ($, undefined) {\n var kendo = window.kendo, caret = kendo.caret, keys = kendo.keys, ui = kendo.ui, Widget = ui.Widget, activeElement = kendo._activeElement, extractFormat = kendo._extractFormat, parse = kendo.parseFloat, placeholderSupported = kendo.support.placeholder, getCulture = kendo.getCulture, CHANGE = 'change', DISABLED = 'disabled', READONLY = 'readonly', INPUT = 'k-input', SPIN = 'spin', ns = '.kendoNumericTextBox', TOUCHEND = 'touchend', MOUSELEAVE = 'mouseleave' + ns, HOVEREVENTS = 'mouseenter' + ns + ' ' + MOUSELEAVE, DEFAULT = 'k-state-default', FOCUSED = 'k-state-focused', HOVER = 'k-state-hover', FOCUS = 'focus', POINT = '.', CLASS_ICON = 'k-icon', SELECTED = 'k-state-selected', STATEDISABLED = 'k-state-disabled', STATE_INVALID = 'k-state-invalid', ARIA_DISABLED = 'aria-disabled', INTEGER_REGEXP = /^(-)?(\\d*)$/, NULL = null, proxy = $.proxy, extend = $.extend;\n var NumericTextBox = Widget.extend({\n init: function (element, options) {\n var that = this, isStep = options && options.step !== undefined, min, max, step, value, disabled;\n Widget.fn.init.call(that, element, options);\n options = that.options;\n element = that.element.on('focusout' + ns, proxy(that._focusout, that)).attr('role', 'spinbutton');\n options.placeholder = options.placeholder || element.attr('placeholder');\n that._initialOptions = extend({}, options);\n min = that.min(element.attr('min'));\n max = that.max(element.attr('max'));\n step = that._parse(element.attr('step'));\n if (options.min === NULL && min !== NULL) {\n options.min = min;\n }\n if (options.max === NULL && max !== NULL) {\n options.max = max;\n }\n if (!isStep && step !== NULL) {\n options.step = step;\n }\n that._reset();\n that._wrapper();\n that._arrows();\n that._validation();\n that._input();\n if (!kendo.support.mobileOS) {\n that._text.on(FOCUS + ns, proxy(that._click, that));\n } else {\n that._text.on(TOUCHEND + ns + ' ' + FOCUS + ns, function () {\n if (kendo.support.browser.edge) {\n that._text.one(FOCUS + ns, function () {\n that._toggleText(false);\n element.focus();\n });\n } else {\n that._toggleText(false);\n element.focus();\n }\n });\n }\n element.attr('aria-valuemin', options.min !== NULL ? options.min * options.factor : options.min).attr('aria-valuemax', options.max !== NULL ? options.max * options.factor : options.max);\n options.format = extractFormat(options.format);\n value = options.value;\n that.value(value !== NULL ? value : element.val());\n disabled = element.is('[disabled]') || $(that.element).parents('fieldset').is(':disabled');\n if (disabled) {\n that.enable(false);\n } else {\n that.readonly(element.is('[readonly]'));\n }\n kendo.notify(that);\n },\n options: {\n name: 'NumericTextBox',\n decimals: NULL,\n restrictDecimals: false,\n min: NULL,\n max: NULL,\n value: NULL,\n step: 1,\n round: true,\n culture: '',\n format: 'n',\n spinners: true,\n placeholder: '',\n factor: 1,\n upArrowText: 'Increase value',\n downArrowText: 'Decrease value'\n },\n events: [\n CHANGE,\n SPIN\n ],\n _editable: function (options) {\n var that = this, element = that.element, disable = options.disable, readonly = options.readonly, text = that._text.add(element), wrapper = that._inputWrapper.off(HOVEREVENTS);\n that._toggleText(true);\n that._upArrowEventHandler.unbind('press');\n that._downArrowEventHandler.unbind('press');\n element.off('keydown' + ns).off('keypress' + ns).off('keyup' + ns).off('paste' + ns);\n if (!readonly && !disable) {\n wrapper.addClass(DEFAULT).removeClass(STATEDISABLED).on(HOVEREVENTS, that._toggleHover);\n text.removeAttr(DISABLED).removeAttr(READONLY).attr(ARIA_DISABLED, false);\n that._upArrowEventHandler.bind('press', function (e) {\n e.preventDefault();\n that._spin(1);\n that._upArrow.addClass(SELECTED);\n });\n that._downArrowEventHandler.bind('press', function (e) {\n e.preventDefault();\n that._spin(-1);\n that._downArrow.addClass(SELECTED);\n });\n that.element.on('keydown' + ns, proxy(that._keydown, that)).on('keypress' + ns, proxy(that._keypress, that)).on('keyup' + ns, proxy(that._keyup, that)).on('paste' + ns, proxy(that._paste, that));\n } else {\n wrapper.addClass(disable ? STATEDISABLED : DEFAULT).removeClass(disable ? DEFAULT : STATEDISABLED);\n text.attr(DISABLED, disable).attr(READONLY, readonly).attr(ARIA_DISABLED, disable);\n }\n },\n readonly: function (readonly) {\n this._editable({\n readonly: readonly === undefined ? true : readonly,\n disable: false\n });\n },\n enable: function (enable) {\n this._editable({\n readonly: false,\n disable: !(enable = enable === undefined ? true : enable)\n });\n },\n destroy: function () {\n var that = this;\n that.element.add(that._text).add(that._upArrow).add(that._downArrow).add(that._inputWrapper).off(ns);\n that._upArrowEventHandler.destroy();\n that._downArrowEventHandler.destroy();\n if (that._form) {\n that._form.off('reset', that._resetHandler);\n }\n Widget.fn.destroy.call(that);\n },\n min: function (value) {\n return this._option('min', value);\n },\n max: function (value) {\n return this._option('max', value);\n },\n step: function (value) {\n return this._option('step', value);\n },\n value: function (value) {\n var that = this, adjusted;\n if (value === undefined) {\n return that._value;\n }\n value = that._parse(value);\n adjusted = that._adjust(value);\n if (value !== adjusted) {\n return;\n }\n that._update(value);\n that._old = that._value;\n },\n focus: function () {\n this._focusin();\n },\n _adjust: function (value) {\n var that = this, options = that.options, min = options.min, max = options.max;\n if (value === NULL) {\n return value;\n }\n if (min !== NULL && value < min) {\n value = min;\n } else if (max !== NULL && value > max) {\n value = max;\n }\n return value;\n },\n _arrows: function () {\n var that = this, arrows, _release = function () {\n clearTimeout(that._spinning);\n arrows.removeClass(SELECTED);\n }, options = that.options, spinners = options.spinners, element = that.element;\n arrows = element.siblings('.' + CLASS_ICON);\n if (!arrows[0]) {\n arrows = $(buttonHtml('increase', options.upArrowText) + buttonHtml('decrease', options.downArrowText)).insertAfter(element);\n arrows.wrapAll('');\n }\n if (!spinners) {\n arrows.parent().toggle(spinners);\n that._inputWrapper.addClass('k-expand-padding');\n }\n that._upArrow = arrows.eq(0);\n that._upArrowEventHandler = new kendo.UserEvents(that._upArrow, { release: _release });\n that._downArrow = arrows.eq(1);\n that._downArrowEventHandler = new kendo.UserEvents(that._downArrow, { release: _release });\n },\n _validation: function () {\n var that = this;\n var element = that.element;\n that._validationIcon = $('').hide().insertAfter(element);\n },\n _blur: function () {\n var that = this;\n that._toggleText(true);\n that._change(that.element.val());\n },\n _click: function (e) {\n var that = this;\n clearTimeout(that._focusing);\n that._focusing = setTimeout(function () {\n var input = e.target, idx = caret(input)[0], value = input.value.substring(0, idx), format = that._format(that.options.format), group = format[','], result, groupRegExp, extractRegExp, caretPosition = 0;\n if (group) {\n groupRegExp = new RegExp('\\\\' + group, 'g');\n extractRegExp = new RegExp('([\\\\d\\\\' + group + ']+)(\\\\' + format[POINT] + ')?(\\\\d+)?');\n }\n if (extractRegExp) {\n result = extractRegExp.exec(value);\n }\n if (result) {\n caretPosition = result[0].replace(groupRegExp, '').length;\n if (value.indexOf('(') != -1 && that._value < 0) {\n caretPosition++;\n }\n }\n that._focusin();\n caret(that.element[0], caretPosition);\n });\n },\n _change: function (value) {\n var that = this, factor = that.options.factor;\n if (factor && factor !== 1) {\n value = parseFloat(value);\n if (value !== null) {\n value = value / factor;\n }\n }\n that._update(value);\n value = that._value;\n if (that._old != value) {\n that._old = value;\n if (!that._typing) {\n that.element.trigger(CHANGE);\n }\n that.trigger(CHANGE);\n }\n that._typing = false;\n },\n _culture: function (culture) {\n return culture || getCulture(this.options.culture);\n },\n _focusin: function () {\n var that = this;\n that._inputWrapper.addClass(FOCUSED);\n that._toggleText(false);\n that.element[0].focus();\n },\n _focusout: function () {\n var that = this;\n clearTimeout(that._focusing);\n that._inputWrapper.removeClass(FOCUSED).removeClass(HOVER);\n that._blur();\n that._removeInvalidState();\n },\n _format: function (format, culture) {\n var numberFormat = this._culture(culture).numberFormat;\n format = format.toLowerCase();\n if (format.indexOf('c') > -1) {\n numberFormat = numberFormat.currency;\n } else if (format.indexOf('p') > -1) {\n numberFormat = numberFormat.percent;\n }\n return numberFormat;\n },\n _input: function () {\n var that = this, options = that.options, CLASSNAME = 'k-formatted-value', element = that.element.addClass(INPUT).show()[0], accessKey = element.accessKey, wrapper = that.wrapper, text;\n text = wrapper.find(POINT + CLASSNAME);\n if (!text[0]) {\n text = $('').insertBefore(element).addClass(CLASSNAME);\n }\n try {\n element.setAttribute('type', 'text');\n } catch (e) {\n element.type = 'text';\n }\n that._initialTitle = element.title;\n text[0].title = element.title;\n text[0].tabIndex = element.tabIndex;\n text[0].style.cssText = element.style.cssText;\n text.prop('placeholder', options.placeholder);\n if (accessKey) {\n text.attr('accesskey', accessKey);\n element.accessKey = '';\n }\n that._text = text.addClass(element.className).attr({\n 'role': 'spinbutton',\n 'aria-valuemin': options.min !== NULL ? options.min * options.factor : options.min,\n 'aria-valuemax': options.max !== NULL ? options.max * options.factor : options.max\n });\n },\n _keydown: function (e) {\n var that = this, key = e.keyCode;\n that._key = key;\n if (key == keys.DOWN) {\n that._step(-1);\n } else if (key == keys.UP) {\n that._step(1);\n } else if (key == keys.ENTER) {\n that._change(that.element.val());\n } else {\n that._typing = true;\n }\n },\n _keypress: function (e) {\n if (e.which === 0 || e.metaKey || e.ctrlKey || e.keyCode === keys.BACKSPACE || e.keyCode === keys.ENTER) {\n return;\n }\n var that = this;\n var min = that.options.min;\n var element = that.element;\n var selection = caret(element);\n var selectionStart = selection[0];\n var selectionEnd = selection[1];\n var character = String.fromCharCode(e.which);\n var numberFormat = that._format(that.options.format);\n var isNumPadDecimal = that._key === keys.NUMPAD_DOT;\n var value = element.val();\n var isValid;\n if (isNumPadDecimal) {\n character = numberFormat[POINT];\n }\n value = value.substring(0, selectionStart) + character + value.substring(selectionEnd);\n isValid = that._numericRegex(numberFormat).test(value);\n if (isValid && isNumPadDecimal) {\n element.val(value);\n caret(element, selectionStart + character.length);\n e.preventDefault();\n } else if (min !== null && min >= 0 && value.charAt(0) === '-' || !isValid) {\n that._addInvalidState();\n e.preventDefault();\n }\n that._key = 0;\n },\n _keyup: function () {\n this._removeInvalidState();\n },\n _addInvalidState: function () {\n var that = this;\n that._inputWrapper.addClass(STATE_INVALID);\n that._validationIcon.show();\n },\n _removeInvalidState: function () {\n var that = this;\n that._inputWrapper.removeClass(STATE_INVALID);\n that._validationIcon.hide();\n },\n _numericRegex: function (numberFormat) {\n var that = this;\n var separator = numberFormat[POINT];\n var precision = that.options.decimals;\n var fractionRule = '*';\n if (separator === POINT) {\n separator = '\\\\' + separator;\n }\n if (precision === NULL) {\n precision = numberFormat.decimals;\n }\n if (precision === 0) {\n return INTEGER_REGEXP;\n }\n if (that.options.restrictDecimals) {\n fractionRule = '{0,' + precision + '}';\n }\n if (that._separator !== separator) {\n that._separator = separator;\n that._floatRegExp = new RegExp('^(-)?(((\\\\d+(' + separator + '\\\\d' + fractionRule + ')?)|(' + separator + '\\\\d' + fractionRule + ')))?$');\n }\n return that._floatRegExp;\n },\n _paste: function (e) {\n var that = this;\n var element = e.target;\n var value = element.value;\n var numberFormat = that._format(that.options.format);\n setTimeout(function () {\n var result = that._parse(element.value);\n if (result === NULL) {\n that._update(value);\n } else {\n element.value = result.toString().replace(POINT, numberFormat[POINT]);\n if (that._adjust(result) !== result || !that._numericRegex(numberFormat).test(element.value)) {\n that._update(value);\n }\n }\n });\n },\n _option: function (option, value) {\n var that = this, element = that.element, options = that.options;\n if (value === undefined) {\n return options[option];\n }\n value = that._parse(value);\n if (!value && option === 'step') {\n return;\n }\n options[option] = value;\n element.add(that._text).attr('aria-value' + option, value);\n element.attr(option, value);\n },\n _spin: function (step, timeout) {\n var that = this;\n timeout = timeout || 500;\n clearTimeout(that._spinning);\n that._spinning = setTimeout(function () {\n that._spin(step, 50);\n }, timeout);\n that._step(step);\n },\n _step: function (step) {\n var that = this, element = that.element, value = that._parse(element.val()) || 0;\n if (activeElement() != element[0]) {\n that._focusin();\n }\n if (that.options.factor && value) {\n value = value / that.options.factor;\n }\n value += that.options.step * step;\n that._update(that._adjust(value));\n that._typing = false;\n that.trigger(SPIN);\n },\n _toggleHover: function (e) {\n $(e.currentTarget).toggleClass(HOVER, e.type === 'mouseenter');\n },\n _toggleText: function (toggle) {\n var that = this;\n that._text.toggle(toggle);\n that.element.toggle(!toggle);\n },\n _parse: function (value, culture) {\n return parse(value, this._culture(culture), this.options.format);\n },\n _round: function (value, precision) {\n var rounder = this.options.round ? kendo._round : truncate;\n return rounder(value, precision);\n },\n _update: function (value) {\n var that = this, options = that.options, factor = options.factor, format = options.format, decimals = options.decimals, culture = that._culture(), numberFormat = that._format(format, culture), isNotNull;\n if (decimals === NULL) {\n decimals = numberFormat.decimals;\n }\n value = that._parse(value, culture);\n isNotNull = value !== NULL;\n if (isNotNull) {\n value = parseFloat(that._round(value, decimals), 10);\n }\n that._value = value = that._adjust(value);\n that._placeholder(kendo.toString(value, format, culture));\n if (isNotNull) {\n if (factor) {\n value = parseFloat(that._round(value * factor, decimals), 10);\n }\n value = value.toString();\n if (value.indexOf('e') !== -1) {\n value = that._round(+value, decimals);\n }\n value = value.replace(POINT, numberFormat[POINT]);\n } else {\n value = null;\n }\n that.element.val(value);\n that.element.add(that._text).attr('aria-valuenow', value);\n },\n _placeholder: function (value) {\n var input = this._text;\n input.val(value);\n if (!placeholderSupported && !value) {\n input.val(this.options.placeholder);\n }\n input.attr('title', this._initialTitle || input.val());\n },\n _wrapper: function () {\n var that = this, element = that.element, DOMElement = element[0], wrapper;\n wrapper = element.parents('.k-numerictextbox');\n if (!wrapper.is('span.k-numerictextbox')) {\n wrapper = element.hide().wrap('').parent();\n wrapper = wrapper.wrap('').parent();\n }\n wrapper[0].style.cssText = DOMElement.style.cssText;\n DOMElement.style.width = '';\n that.wrapper = wrapper.addClass('k-widget k-numerictextbox').addClass(DOMElement.className).css('display', '');\n that._inputWrapper = $(wrapper[0].firstChild);\n },\n _reset: function () {\n var that = this, element = that.element, formId = element.attr('form'), form = formId ? $('#' + formId) : element.closest('form');\n if (form[0]) {\n that._resetHandler = function () {\n setTimeout(function () {\n that.value(element[0].value);\n that.max(that._initialOptions.max);\n that.min(that._initialOptions.min);\n });\n };\n that._form = form.on('reset', that._resetHandler);\n }\n }\n });\n function buttonHtml(direction, text) {\n var className = 'k-i-arrow-' + (direction === 'increase' ? '60-up' : '60-down');\n return '' + '' + '';\n }\n function truncate(value, precision) {\n var parts = parseFloat(value, 10).toString().split(POINT);\n if (parts[1]) {\n parts[1] = parts[1].substring(0, precision);\n }\n return parts.join(POINT);\n }\n ui.plugin(NumericTextBox);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.editable', [\n 'kendo.datepicker',\n 'kendo.numerictextbox',\n 'kendo.validator',\n 'kendo.binder'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'editable',\n name: 'Editable',\n category: 'framework',\n depends: [\n 'datepicker',\n 'numerictextbox',\n 'validator',\n 'binder'\n ],\n hidden: true\n };\n (function ($, undefined) {\n var kendo = window.kendo, ui = kendo.ui, Widget = ui.Widget, extend = $.extend, oldIE = kendo.support.browser.msie && kendo.support.browser.version < 9, isFunction = kendo.isFunction, isPlainObject = $.isPlainObject, inArray = $.inArray, nameSpecialCharRegExp = /(\"|\\%|'|\\[|\\]|\\$|\\.|\\,|\\:|\\;|\\+|\\*|\\&|\\!|\\#|\\(|\\)|<|>|\\=|\\?|\\@|\\^|\\{|\\}|\\~|\\/|\\||`)/g, ERRORTEMPLATE = '
              ' + '#=message#
              ', CHANGE = 'change';\n var specialRules = [\n 'url',\n 'email',\n 'number',\n 'date',\n 'boolean'\n ];\n function fieldType(field) {\n field = field != null ? field : '';\n return field.type || $.type(field) || 'string';\n }\n function convertToValueBinding(container) {\n container.find(':input:not(:button, [' + kendo.attr('role') + '=upload], [' + kendo.attr('skip') + '], [type=file]), select').each(function () {\n var bindAttr = kendo.attr('bind'), binding = this.getAttribute(bindAttr) || '', bindingName = this.type === 'checkbox' || this.type === 'radio' ? 'checked:' : 'value:', fieldName = this.name;\n if (binding.indexOf(bindingName) === -1 && fieldName) {\n binding += (binding.length ? ',' : '') + bindingName + fieldName;\n $(this).attr(bindAttr, binding);\n }\n });\n }\n function createAttributes(options) {\n var field = (options.model.fields || options.model)[options.field], type = fieldType(field), validation = field ? field.validation : {}, ruleName, DATATYPE = kendo.attr('type'), BINDING = kendo.attr('bind'), rule, attr = {\n name: options.field,\n title: options.title\n };\n for (ruleName in validation) {\n rule = validation[ruleName];\n if (inArray(ruleName, specialRules) >= 0) {\n attr[DATATYPE] = ruleName;\n } else if (!isFunction(rule)) {\n attr[ruleName] = isPlainObject(rule) ? rule.value || ruleName : rule;\n }\n attr[kendo.attr(ruleName + '-msg')] = rule.message;\n }\n if (inArray(type, specialRules) >= 0) {\n attr[DATATYPE] = type;\n }\n attr[BINDING] = (type === 'boolean' ? 'checked:' : 'value:') + options.field;\n return attr;\n }\n function convertItems(items) {\n var idx, length, item, value, text, result;\n if (items && items.length) {\n result = [];\n for (idx = 0, length = items.length; idx < length; idx++) {\n item = items[idx];\n text = item.text || item.value || item;\n value = item.value == null ? item.text || item : item.value;\n result[idx] = {\n text: text,\n value: value\n };\n }\n }\n return result;\n }\n var editors = {\n 'number': function (container, options) {\n var attr = createAttributes(options);\n $('').attr(attr).appendTo(container).kendoNumericTextBox({ format: options.format });\n $('').hide().appendTo(container);\n },\n 'date': function (container, options) {\n var attr = createAttributes(options), format = options.format;\n if (format) {\n format = kendo._extractFormat(format);\n }\n attr[kendo.attr('format')] = format;\n $('').attr(attr).appendTo(container).kendoDatePicker({ format: options.format });\n $('').hide().appendTo(container);\n },\n 'string': function (container, options) {\n var attr = createAttributes(options);\n $('').attr(attr).appendTo(container);\n },\n 'boolean': function (container, options) {\n var attr = createAttributes(options);\n $('').attr(attr).appendTo(container);\n },\n 'values': function (container, options) {\n var attr = createAttributes(options);\n var items = kendo.stringify(convertItems(options.values));\n $('
              ')\n };\n kendo.alert = kendoAlert;\n kendo.confirm = kendoConfirm;\n kendo.prompt = kendoPrompt;\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.window', [\n 'kendo.draganddrop',\n 'kendo.popup'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'window',\n name: 'Window',\n category: 'web',\n description: 'The Window widget displays content in a modal or non-modal HTML window.',\n depends: [\n 'draganddrop',\n 'popup'\n ],\n features: [{\n id: 'window-fx',\n name: 'Animation',\n description: 'Support for animation',\n depends: ['fx']\n }]\n };\n (function ($, undefined) {\n var kendo = window.kendo, Widget = kendo.ui.Widget, TabKeyTrap = kendo.ui.Popup.TabKeyTrap, Draggable = kendo.ui.Draggable, isPlainObject = $.isPlainObject, activeElement = kendo._activeElement, outerWidth = kendo._outerWidth, outerHeight = kendo._outerHeight, proxy = $.proxy, extend = $.extend, each = $.each, template = kendo.template, BODY = 'body', templates, NS = '.kendoWindow', KWINDOW = '.k-window', KWINDOWTITLE = '.k-window-title', KWINDOWTITLEBAR = KWINDOWTITLE + 'bar', KWINDOWCONTENT = '.k-window-content', KWINDOWRESIZEHANDLES = '.k-resize-handle', KOVERLAY = '.k-overlay', KCONTENTFRAME = 'k-content-frame', LOADING = 'k-i-loading', KHOVERSTATE = 'k-state-hover', KFOCUSEDSTATE = 'k-state-focused', MAXIMIZEDSTATE = 'k-window-maximized', VISIBLE = ':visible', HIDDEN = 'hidden', CURSOR = 'cursor', OPEN = 'open', ACTIVATE = 'activate', DEACTIVATE = 'deactivate', CLOSE = 'close', REFRESH = 'refresh', MINIMIZE = 'minimize', MAXIMIZE = 'maximize', RESIZESTART = 'resizeStart', RESIZE = 'resize', RESIZEEND = 'resizeEnd', DRAGSTART = 'dragstart', DRAGEND = 'dragend', ERROR = 'error', OVERFLOW = 'overflow', ZINDEX = 'zIndex', MINIMIZE_MAXIMIZE = '.k-window-actions .k-i-window-minimize,.k-window-actions .k-i-window-maximize', KPIN = '.k-i-pin', KUNPIN = '.k-i-unpin', PIN_UNPIN = KPIN + ',' + KUNPIN, TITLEBAR_BUTTONS = '.k-window-titlebar .k-window-action', REFRESHICON = '.k-window-titlebar .k-i-refresh', zero = /^0[a-z]*$/i, isLocalUrl = kendo.isLocalUrl;\n function defined(x) {\n return typeof x != 'undefined';\n }\n function constrain(value, low, high) {\n return Math.max(Math.min(parseInt(value, 10), high === Infinity ? high : parseInt(high, 10)), parseInt(low, 10));\n }\n function executableScript() {\n return !this.type || this.type.toLowerCase().indexOf('script') >= 0;\n }\n var Window = Widget.extend({\n init: function (element, options) {\n var that = this, wrapper, offset = {}, visibility, display, position, isVisible = false, content, windowContent, suppressActions = options && options.actions && !options.actions.length, id;\n Widget.fn.init.call(that, element, options);\n options = that.options;\n position = options.position;\n element = that.element;\n content = options.content;\n if (suppressActions) {\n options.actions = [];\n }\n that.appendTo = $(options.appendTo);\n if (content && !isPlainObject(content)) {\n content = options.content = { url: content };\n }\n element.find('script').filter(executableScript).remove();\n if (!element.parent().is(that.appendTo) && (position.top === undefined || position.left === undefined)) {\n if (element.is(VISIBLE)) {\n offset = element.offset();\n isVisible = true;\n } else {\n visibility = element.css('visibility');\n display = element.css('display');\n element.css({\n visibility: HIDDEN,\n display: ''\n });\n offset = element.offset();\n element.css({\n visibility: visibility,\n display: display\n });\n }\n if (position.top === undefined) {\n position.top = offset.top;\n }\n if (position.left === undefined) {\n position.left = offset.left;\n }\n }\n if (!defined(options.visible) || options.visible === null) {\n options.visible = element.is(VISIBLE);\n }\n wrapper = that.wrapper = element.closest(KWINDOW);\n if (!element.is('.k-content') || !wrapper[0]) {\n element.addClass('k-window-content k-content');\n that._createWindow(element, options);\n wrapper = that.wrapper = element.closest(KWINDOW);\n that._dimensions();\n }\n that._position();\n if (content) {\n that.refresh(content);\n }\n if (options.visible) {\n that.toFront();\n }\n windowContent = wrapper.children(KWINDOWCONTENT);\n that._tabindex(windowContent);\n if (options.visible && options.modal) {\n that._overlay(wrapper.is(VISIBLE)).css({ opacity: 0.5 });\n }\n wrapper.on('mouseenter' + NS, TITLEBAR_BUTTONS, proxy(that._buttonEnter, that)).on('mouseleave' + NS, TITLEBAR_BUTTONS, proxy(that._buttonLeave, that)).on('click' + NS, '> ' + TITLEBAR_BUTTONS, proxy(that._windowActionHandler, that));\n windowContent.on('keydown' + NS, proxy(that._keydown, that)).on('focus' + NS, proxy(that._focus, that)).on('blur' + NS, proxy(that._blur, that));\n this._resizable();\n this._draggable();\n if (options.pinned) {\n that.pin();\n }\n id = element.attr('id');\n if (id) {\n id = id + '_wnd_title';\n wrapper.children(KWINDOWTITLEBAR).children(KWINDOWTITLE).attr('id', id);\n windowContent.attr({\n 'role': 'dialog',\n 'aria-labelledby': id\n });\n }\n wrapper.add(wrapper.children('.k-resize-handle,' + KWINDOWTITLEBAR)).on('mousedown' + NS, proxy(that.toFront, that));\n that.touchScroller = kendo.touchScroller(element);\n that._resizeHandler = proxy(that._onDocumentResize, that);\n that._marker = kendo.guid().substring(0, 8);\n $(window).on('resize' + NS + that._marker, that._resizeHandler);\n if (options.visible) {\n that.trigger(OPEN);\n that.trigger(ACTIVATE);\n }\n kendo.notify(that);\n if (this.options.modal) {\n this._tabKeyTrap = new TabKeyTrap(wrapper);\n this._tabKeyTrap.trap();\n this._tabKeyTrap.shouldTrap = function () {\n return windowContent.data('isFront');\n };\n }\n },\n _buttonEnter: function (e) {\n $(e.currentTarget).addClass(KHOVERSTATE);\n },\n _buttonLeave: function (e) {\n $(e.currentTarget).removeClass(KHOVERSTATE);\n },\n _focus: function () {\n this.wrapper.addClass(KFOCUSEDSTATE);\n },\n _blur: function () {\n this.wrapper.removeClass(KFOCUSEDSTATE);\n },\n _dimensions: function () {\n var wrapper = this.wrapper;\n var options = this.options;\n var width = options.width;\n var height = options.height;\n var maxHeight = options.maxHeight;\n var dimensions = [\n 'minWidth',\n 'minHeight',\n 'maxWidth',\n 'maxHeight'\n ];\n this.title(options.title);\n for (var i = 0; i < dimensions.length; i++) {\n var value = options[dimensions[i]] || '';\n if (value != Infinity) {\n wrapper.css(dimensions[i], value);\n }\n }\n if (maxHeight != Infinity) {\n this.element.css('maxHeight', maxHeight);\n }\n if (width) {\n if (width.toString().indexOf('%') > 0) {\n wrapper.width(width);\n } else {\n wrapper.width(constrain(width, options.minWidth, options.maxWidth));\n }\n } else {\n wrapper.width('');\n }\n if (height) {\n if (height.toString().indexOf('%') > 0) {\n wrapper.height(height);\n } else {\n wrapper.height(constrain(height, options.minHeight, options.maxHeight));\n }\n } else {\n wrapper.height('');\n }\n if (!options.visible) {\n wrapper.hide();\n }\n },\n _position: function () {\n var wrapper = this.wrapper, position = this.options.position;\n if (position.top === 0) {\n position.top = position.top.toString();\n }\n if (position.left === 0) {\n position.left = position.left.toString();\n }\n wrapper.css({\n top: position.top || '',\n left: position.left || ''\n });\n },\n _animationOptions: function (id) {\n var animation = this.options.animation;\n var basicAnimation = {\n open: { effects: {} },\n close: {\n hide: true,\n effects: {}\n }\n };\n return animation && animation[id] || basicAnimation[id];\n },\n _resize: function () {\n kendo.resize(this.element.children());\n },\n _resizable: function () {\n var resizable = this.options.resizable;\n var wrapper = this.wrapper;\n if (this.resizing) {\n wrapper.off('dblclick' + NS).children(KWINDOWRESIZEHANDLES).remove();\n this.resizing.destroy();\n this.resizing = null;\n }\n if (resizable) {\n wrapper.on('dblclick' + NS, KWINDOWTITLEBAR, proxy(function (e) {\n if (!$(e.target).closest('.k-window-action').length) {\n this.toggleMaximization();\n }\n }, this));\n each('n e s w se sw ne nw'.split(' '), function (index, handler) {\n wrapper.append(templates.resizeHandle(handler));\n });\n this.resizing = new WindowResizing(this);\n }\n wrapper = null;\n },\n _draggable: function () {\n var draggable = this.options.draggable;\n if (this.dragging) {\n this.dragging.destroy();\n this.dragging = null;\n }\n if (draggable) {\n this.dragging = new WindowDragging(this, draggable.dragHandle || KWINDOWTITLEBAR);\n }\n },\n _actions: function () {\n var options = this.options;\n var actions = options.actions;\n var pinned = options.pinned;\n var titlebar = this.wrapper.children(KWINDOWTITLEBAR);\n var container = titlebar.find('.k-window-actions');\n var windowSpecificCommands = [\n 'maximize',\n 'minimize'\n ];\n actions = $.map(actions, function (action) {\n action = pinned && action.toLowerCase() === 'pin' ? 'unpin' : action;\n return { name: windowSpecificCommands.indexOf(action.toLowerCase()) > -1 ? 'window-' + action : action };\n });\n container.html(kendo.render(templates.action, actions));\n },\n setOptions: function (options) {\n Widget.fn.setOptions.call(this, options);\n var scrollable = this.options.scrollable !== false;\n this.restore();\n this._dimensions();\n this._position();\n this._resizable();\n this._draggable();\n this._actions();\n if (typeof options.modal !== 'undefined') {\n var visible = this.options.visible !== false;\n this._overlay(options.modal && visible);\n }\n this.element.css(OVERFLOW, scrollable ? '' : 'hidden');\n },\n events: [\n OPEN,\n ACTIVATE,\n DEACTIVATE,\n CLOSE,\n MINIMIZE,\n MAXIMIZE,\n REFRESH,\n RESIZESTART,\n RESIZE,\n RESIZEEND,\n DRAGSTART,\n DRAGEND,\n ERROR\n ],\n options: {\n name: 'Window',\n animation: {\n open: {\n effects: {\n zoom: { direction: 'in' },\n fade: { direction: 'in' }\n },\n duration: 350\n },\n close: {\n effects: {\n zoom: {\n direction: 'out',\n properties: { scale: 0.7 }\n },\n fade: { direction: 'out' }\n },\n duration: 350,\n hide: true\n }\n },\n title: '',\n actions: ['Close'],\n autoFocus: true,\n modal: false,\n resizable: true,\n draggable: true,\n minWidth: 90,\n minHeight: 50,\n maxWidth: Infinity,\n maxHeight: Infinity,\n pinned: false,\n scrollable: true,\n position: {},\n content: null,\n visible: null,\n height: null,\n width: null,\n appendTo: 'body',\n isMaximized: false,\n isMinimized: false\n },\n _closable: function () {\n return $.inArray('close', $.map(this.options.actions, function (x) {\n return x.toLowerCase();\n })) > -1;\n },\n _keydown: function (e) {\n var that = this, options = that.options, keys = kendo.keys, keyCode = e.keyCode, wrapper = that.wrapper, offset, handled, distance = 10, isMaximized = that.options.isMaximized, newWidth, newHeight, w, h;\n if (keyCode == keys.ESC && that._closable()) {\n that._close(false);\n }\n if (e.target != e.currentTarget || that._closing) {\n return;\n }\n if (options.draggable && !e.ctrlKey && !isMaximized) {\n offset = kendo.getOffset(wrapper);\n if (keyCode == keys.UP) {\n handled = wrapper.css('top', offset.top - distance);\n } else if (keyCode == keys.DOWN) {\n handled = wrapper.css('top', offset.top + distance);\n } else if (keyCode == keys.LEFT) {\n handled = wrapper.css('left', offset.left - distance);\n } else if (keyCode == keys.RIGHT) {\n handled = wrapper.css('left', offset.left + distance);\n }\n }\n if (options.resizable && e.ctrlKey && !isMaximized) {\n if (keyCode == keys.UP) {\n handled = true;\n newHeight = wrapper.height() - distance;\n } else if (keyCode == keys.DOWN) {\n handled = true;\n newHeight = wrapper.height() + distance;\n }\n if (keyCode == keys.LEFT) {\n handled = true;\n newWidth = wrapper.width() - distance;\n } else if (keyCode == keys.RIGHT) {\n handled = true;\n newWidth = wrapper.width() + distance;\n }\n if (handled) {\n w = constrain(newWidth, options.minWidth, options.maxWidth);\n h = constrain(newHeight, options.minHeight, options.maxHeight);\n if (!isNaN(w)) {\n wrapper.width(w);\n that.options.width = w + 'px';\n }\n if (!isNaN(h)) {\n wrapper.height(h);\n that.options.height = h + 'px';\n }\n that.resize();\n }\n }\n if (handled) {\n e.preventDefault();\n }\n },\n _overlay: function (visible) {\n var overlay = this.appendTo.children(KOVERLAY), wrapper = this.wrapper;\n if (!overlay.length) {\n overlay = $('
              ');\n }\n overlay.insertBefore(wrapper[0]).toggle(visible).css(ZINDEX, parseInt(wrapper.css(ZINDEX), 10) - 1);\n return overlay;\n },\n _actionForIcon: function (icon) {\n var iconClass = /\\bk-i(-\\w+)+\\b/.exec(icon[0].className)[0];\n return {\n 'k-i-close': '_close',\n 'k-i-window-maximize': 'maximize',\n 'k-i-window-minimize': 'minimize',\n 'k-i-window-restore': 'restore',\n 'k-i-refresh': 'refresh',\n 'k-i-pin': 'pin',\n 'k-i-unpin': 'unpin'\n }[iconClass];\n },\n _windowActionHandler: function (e) {\n if (this._closing) {\n return;\n }\n var icon = $(e.target).closest('.k-window-action').find('.k-icon');\n var action = this._actionForIcon(icon);\n if (action) {\n e.preventDefault();\n this[action]();\n return false;\n }\n },\n _modals: function () {\n var that = this;\n var zStack = $(KWINDOW).filter(function () {\n var dom = $(this);\n var object = that._object(dom);\n var options = object && object.options;\n return options && options.modal && options.visible && options.appendTo === that.options.appendTo && dom.is(VISIBLE);\n }).sort(function (a, b) {\n return +$(a).css('zIndex') - +$(b).css('zIndex');\n });\n that = null;\n return zStack;\n },\n _object: function (element) {\n var content = element.children(KWINDOWCONTENT);\n var widget = kendo.widgetInstance(content);\n if (widget) {\n return widget;\n }\n return undefined;\n },\n center: function () {\n var that = this, position = that.options.position, wrapper = that.wrapper, documentWindow = $(window), scrollTop = 0, scrollLeft = 0, newTop, newLeft;\n if (that.options.isMaximized) {\n return that;\n }\n if (!that.options.pinned) {\n scrollTop = documentWindow.scrollTop();\n scrollLeft = documentWindow.scrollLeft();\n }\n newLeft = scrollLeft + Math.max(0, (documentWindow.width() - wrapper.width()) / 2);\n newTop = scrollTop + Math.max(0, (documentWindow.height() - wrapper.height() - parseInt(wrapper.css('paddingTop'), 10)) / 2);\n wrapper.css({\n left: newLeft,\n top: newTop\n });\n position.top = newTop;\n position.left = newLeft;\n return that;\n },\n title: function (text) {\n var that = this, wrapper = that.wrapper, options = that.options, titleBar = wrapper.children(KWINDOWTITLEBAR), title = titleBar.children(KWINDOWTITLE), titleBarHeight;\n if (!arguments.length) {\n return title.html();\n }\n if (text === false) {\n wrapper.addClass('k-window-titleless');\n titleBar.remove();\n } else {\n if (!titleBar.length) {\n wrapper.prepend(templates.titlebar(options));\n that._actions();\n titleBar = wrapper.children(KWINDOWTITLEBAR);\n } else {\n title.html(kendo.htmlEncode(text));\n }\n titleBarHeight = parseInt(outerHeight(titleBar), 10);\n wrapper.css('padding-top', titleBarHeight);\n titleBar.css('margin-top', -titleBarHeight);\n }\n that.options.title = text;\n return that;\n },\n content: function (html, data) {\n var content = this.wrapper.children(KWINDOWCONTENT), scrollContainer = content.children('.km-scroll-container');\n content = scrollContainer[0] ? scrollContainer : content;\n if (!defined(html)) {\n return content.html();\n }\n this.angular('cleanup', function () {\n return { elements: content.children() };\n });\n kendo.destroy(this.element.children());\n content.empty().html(html);\n this.angular('compile', function () {\n var a = [];\n for (var i = content.length; --i >= 0;) {\n a.push({ dataItem: data });\n }\n return {\n elements: content.children(),\n data: a\n };\n });\n return this;\n },\n open: function () {\n var that = this, wrapper = that.wrapper, options = that.options, showOptions = this._animationOptions('open'), contentElement = wrapper.children(KWINDOWCONTENT), overlay, otherModalsVisible, doc = $(document);\n if (!that.trigger(OPEN)) {\n if (that._closing) {\n wrapper.kendoStop(true, true);\n }\n that._closing = false;\n that.toFront();\n if (options.autoFocus) {\n that.element.focus();\n }\n options.visible = true;\n if (options.modal) {\n otherModalsVisible = !!that._modals().length;\n overlay = that._overlay(otherModalsVisible);\n overlay.kendoStop(true, true);\n if (showOptions.duration && kendo.effects.Fade && !otherModalsVisible) {\n var overlayFx = kendo.fx(overlay).fadeIn();\n overlayFx.duration(showOptions.duration || 0);\n overlayFx.endValue(0.5);\n overlayFx.play();\n } else {\n overlay.css('opacity', 0.5);\n }\n overlay.show();\n $(window).on('focus', function () {\n if (contentElement.data('isFront')) {\n that.element.focus();\n }\n });\n }\n if (!wrapper.is(VISIBLE)) {\n contentElement.css(OVERFLOW, HIDDEN);\n wrapper.show().kendoStop().kendoAnimate({\n effects: showOptions.effects,\n duration: showOptions.duration,\n complete: proxy(this._activate, this)\n });\n }\n }\n if (options.isMaximized) {\n that._documentScrollTop = doc.scrollTop();\n that._documentScrollLeft = doc.scrollLeft();\n $('html, body').css(OVERFLOW, HIDDEN);\n }\n return that;\n },\n _activate: function () {\n var scrollable = this.options.scrollable !== false;\n if (this.options.autoFocus) {\n this.element.focus();\n }\n this.element.css(OVERFLOW, scrollable ? '' : 'hidden');\n kendo.resize(this.element.children());\n this.trigger(ACTIVATE);\n },\n _removeOverlay: function (suppressAnimation) {\n var modals = this._modals();\n var options = this.options;\n var hideOverlay = options.modal && !modals.length;\n var overlay = options.modal ? this._overlay(true) : $(undefined);\n var hideOptions = this._animationOptions('close');\n if (hideOverlay) {\n if (!suppressAnimation && hideOptions.duration && kendo.effects.Fade) {\n var overlayFx = kendo.fx(overlay).fadeOut();\n overlayFx.duration(hideOptions.duration || 0);\n overlayFx.startValue(0.5);\n overlayFx.play();\n } else {\n this._overlay(false).remove();\n }\n } else if (modals.length) {\n this._object(modals.last())._overlay(true);\n }\n },\n _close: function (systemTriggered) {\n var that = this, wrapper = that.wrapper, options = that.options, showOptions = this._animationOptions('open'), hideOptions = this._animationOptions('close'), doc = $(document);\n if (wrapper.is(VISIBLE) && !that.trigger(CLOSE, { userTriggered: !systemTriggered })) {\n if (that._closing) {\n return;\n }\n that._closing = true;\n options.visible = false;\n $(KWINDOW).each(function (i, element) {\n var contentElement = $(element).children(KWINDOWCONTENT);\n if (element != wrapper && contentElement.find('> .' + KCONTENTFRAME).length > 0) {\n contentElement.children(KOVERLAY).remove();\n }\n });\n this._removeOverlay();\n wrapper.kendoStop().kendoAnimate({\n effects: hideOptions.effects || showOptions.effects,\n reverse: hideOptions.reverse === true,\n duration: hideOptions.duration,\n complete: proxy(this._deactivate, this)\n });\n }\n if (that.options.isMaximized) {\n $('html, body').css(OVERFLOW, '');\n if (that._documentScrollTop && that._documentScrollTop > 0) {\n doc.scrollTop(that._documentScrollTop);\n }\n if (that._documentScrollLeft && that._documentScrollLeft > 0) {\n doc.scrollLeft(that._documentScrollLeft);\n }\n }\n },\n _deactivate: function () {\n var that = this;\n that.wrapper.hide().css('opacity', '');\n that.trigger(DEACTIVATE);\n if (that.options.modal) {\n var lastModal = that._object(that._modals().last());\n if (lastModal) {\n lastModal.toFront();\n }\n }\n },\n close: function () {\n this._close(true);\n return this;\n },\n _actionable: function (element) {\n return $(element).is(TITLEBAR_BUTTONS + ',' + TITLEBAR_BUTTONS + ' .k-icon,:input,a');\n },\n _shouldFocus: function (target) {\n var active = activeElement(), element = this.element;\n return this.options.autoFocus && !$(active).is(element) && !this._actionable(target) && (!element.find(active).length || !element.find(target).length);\n },\n toFront: function (e) {\n var that = this, wrapper = that.wrapper, currentWindow = wrapper[0], zIndex = +wrapper.css(ZINDEX), originalZIndex = zIndex, target = e && e.target || null;\n $(KWINDOW).each(function (i, element) {\n var windowObject = $(element), zIndexNew = windowObject.css(ZINDEX), contentElement = windowObject.children(KWINDOWCONTENT);\n if (!isNaN(zIndexNew)) {\n zIndex = Math.max(+zIndexNew, zIndex);\n }\n contentElement.data('isFront', element == currentWindow);\n if (element != currentWindow && contentElement.find('> .' + KCONTENTFRAME).length > 0) {\n contentElement.append(templates.overlay);\n }\n });\n if (!wrapper[0].style.zIndex || originalZIndex < zIndex) {\n wrapper.css(ZINDEX, zIndex + 2);\n }\n that.element.find('> .k-overlay').remove();\n if (that._shouldFocus(target)) {\n that.element.focus();\n var scrollTop = $(window).scrollTop(), windowTop = parseInt(wrapper.position().top, 10);\n if (!that.options.pinned && windowTop > 0 && windowTop < scrollTop) {\n if (scrollTop > 0) {\n $(window).scrollTop(windowTop);\n } else {\n wrapper.css('top', scrollTop);\n }\n }\n }\n wrapper = null;\n return that;\n },\n toggleMaximization: function () {\n if (this._closing) {\n return this;\n }\n return this[this.options.isMaximized ? 'restore' : 'maximize']();\n },\n restore: function () {\n var that = this;\n var options = that.options;\n var minHeight = options.minHeight;\n var restoreOptions = that.restoreOptions;\n var doc = $(document);\n if (!options.isMaximized && !options.isMinimized) {\n return that;\n }\n if (minHeight && minHeight != Infinity) {\n that.wrapper.css('min-height', minHeight);\n }\n that.wrapper.css({\n position: options.pinned ? 'fixed' : 'absolute',\n left: restoreOptions.left,\n top: restoreOptions.top,\n width: restoreOptions.width,\n height: restoreOptions.height\n }).removeClass(MAXIMIZEDSTATE).find('.k-window-content,.k-resize-handle').show().end().find('.k-window-titlebar .k-i-window-restore').parent().remove().end().end().find(MINIMIZE_MAXIMIZE).parent().show().end().end().find(PIN_UNPIN).parent().show();\n that.options.width = restoreOptions.width;\n that.options.height = restoreOptions.height;\n $('html, body').css(OVERFLOW, '');\n if (this._documentScrollTop && this._documentScrollTop > 0) {\n doc.scrollTop(this._documentScrollTop);\n }\n if (this._documentScrollLeft && this._documentScrollLeft > 0) {\n doc.scrollLeft(this._documentScrollLeft);\n }\n options.isMaximized = options.isMinimized = false;\n that.resize();\n return that;\n },\n _sizingAction: function (actionId, callback) {\n var that = this, wrapper = that.wrapper, style = wrapper[0].style, options = that.options;\n if (options.isMaximized || options.isMinimized) {\n return that;\n }\n that.restoreOptions = {\n width: style.width,\n height: style.height\n };\n wrapper.children(KWINDOWRESIZEHANDLES).hide().end().children(KWINDOWTITLEBAR).find(MINIMIZE_MAXIMIZE).parent().hide().eq(0).before(templates.action({ name: 'window-restore' }));\n callback.call(that);\n that.wrapper.children(KWINDOWTITLEBAR).find(PIN_UNPIN).parent().toggle(actionId !== 'maximize');\n that.trigger(actionId);\n return that;\n },\n maximize: function () {\n this._sizingAction('maximize', function () {\n var that = this, wrapper = that.wrapper, position = wrapper.position(), doc = $(document);\n extend(that.restoreOptions, {\n left: position.left,\n top: position.top\n });\n wrapper.css({\n left: 0,\n top: 0,\n position: 'fixed'\n }).addClass(MAXIMIZEDSTATE);\n this._documentScrollTop = doc.scrollTop();\n this._documentScrollLeft = doc.scrollLeft();\n $('html, body').css(OVERFLOW, HIDDEN);\n that.options.isMaximized = true;\n that._onDocumentResize();\n });\n return this;\n },\n isMaximized: function () {\n return this.options.isMaximized;\n },\n minimize: function () {\n this._sizingAction('minimize', function () {\n var that = this;\n that.wrapper.css({\n height: '',\n minHeight: ''\n });\n that.element.hide();\n that.options.isMinimized = true;\n });\n return this;\n },\n isMinimized: function () {\n return this.options.isMinimized;\n },\n pin: function () {\n var that = this, win = $(window), wrapper = that.wrapper, top = parseInt(wrapper.css('top'), 10), left = parseInt(wrapper.css('left'), 10);\n if (!that.options.isMaximized) {\n wrapper.css({\n position: 'fixed',\n top: top - win.scrollTop(),\n left: left - win.scrollLeft()\n });\n wrapper.children(KWINDOWTITLEBAR).find(KPIN).addClass('k-i-unpin').removeClass('k-i-pin');\n that.options.pinned = true;\n that.options.draggable = false;\n }\n },\n unpin: function () {\n var that = this, win = $(window), wrapper = that.wrapper, top = parseInt(wrapper.css('top'), 10), left = parseInt(wrapper.css('left'), 10);\n if (!that.options.isMaximized) {\n wrapper.css({\n position: '',\n top: top + win.scrollTop(),\n left: left + win.scrollLeft()\n });\n wrapper.children(KWINDOWTITLEBAR).find(KUNPIN).addClass('k-i-pin').removeClass('k-i-unpin');\n that.options.pinned = false;\n that.options.draggable = true;\n }\n },\n _onDocumentResize: function () {\n var that = this, wrapper = that.wrapper, wnd = $(window), zoomLevel = kendo.support.zoomLevel(), w, h;\n if (!that.options.isMaximized) {\n return;\n }\n w = wnd.width() / zoomLevel;\n h = wnd.height() / zoomLevel - parseInt(wrapper.css('padding-top'), 10);\n wrapper.css({\n width: w,\n height: h\n });\n that.options.width = w;\n that.options.height = h;\n that.resize();\n },\n refresh: function (options) {\n var that = this, initOptions = that.options, element = $(that.element), iframe, showIframe, url;\n if (!isPlainObject(options)) {\n options = { url: options };\n }\n options = extend({}, initOptions.content, options);\n showIframe = defined(initOptions.iframe) ? initOptions.iframe : options.iframe;\n url = options.url;\n if (url) {\n if (!defined(showIframe)) {\n showIframe = !isLocalUrl(url);\n }\n if (!showIframe) {\n that._ajaxRequest(options);\n } else {\n iframe = element.find('.' + KCONTENTFRAME)[0];\n if (iframe) {\n iframe.src = url || iframe.src;\n } else {\n element.html(templates.contentFrame(extend({}, initOptions, { content: options })));\n }\n element.find('.' + KCONTENTFRAME).unbind('load' + NS).on('load' + NS, proxy(this._triggerRefresh, this));\n }\n } else {\n if (options.template) {\n that.content(template(options.template)({}));\n }\n that.trigger(REFRESH);\n }\n element.toggleClass('k-window-iframecontent', !!showIframe);\n return that;\n },\n _triggerRefresh: function () {\n this.trigger(REFRESH);\n },\n _ajaxComplete: function () {\n clearTimeout(this._loadingIconTimeout);\n this.wrapper.find(REFRESHICON).removeClass(LOADING);\n },\n _ajaxError: function (xhr, status) {\n this.trigger(ERROR, {\n status: status,\n xhr: xhr\n });\n },\n _ajaxSuccess: function (contentTemplate) {\n return function (data) {\n var html = data;\n if (contentTemplate) {\n html = template(contentTemplate)(data || {});\n }\n this.content(html, data);\n this.element.prop('scrollTop', 0);\n this.trigger(REFRESH);\n };\n },\n _showLoading: function () {\n this.wrapper.find(REFRESHICON).addClass(LOADING);\n },\n _ajaxRequest: function (options) {\n this._loadingIconTimeout = setTimeout(proxy(this._showLoading, this), 100);\n $.ajax(extend({\n type: 'GET',\n dataType: 'html',\n cache: false,\n error: proxy(this._ajaxError, this),\n complete: proxy(this._ajaxComplete, this),\n success: proxy(this._ajaxSuccess(options.template), this)\n }, options));\n },\n _destroy: function () {\n if (this.resizing) {\n this.resizing.destroy();\n }\n if (this.dragging) {\n this.dragging.destroy();\n }\n this.wrapper.off(NS).children(KWINDOWCONTENT).off(NS).end().find('.k-resize-handle,.k-window-titlebar').off(NS);\n $(window).off('resize' + NS + this._marker);\n clearTimeout(this._loadingIconTimeout);\n Widget.fn.destroy.call(this);\n this.unbind(undefined);\n kendo.destroy(this.wrapper);\n this._removeOverlay(true);\n },\n destroy: function () {\n this._destroy();\n this.wrapper.empty().remove();\n this.wrapper = this.appendTo = this.element = $();\n },\n _createWindow: function () {\n var contentHtml = this.element, options = this.options, iframeSrcAttributes, wrapper, isRtl = kendo.support.isRtl(contentHtml);\n if (options.scrollable === false) {\n contentHtml.css('overflow', 'hidden');\n }\n wrapper = $(templates.wrapper(options));\n iframeSrcAttributes = contentHtml.find('iframe:not(.k-content)').map(function () {\n var src = this.getAttribute('src');\n this.src = '';\n return src;\n });\n wrapper.toggleClass('k-rtl', isRtl).appendTo(this.appendTo).append(contentHtml).find('iframe:not(.k-content)').each(function (index) {\n this.src = iframeSrcAttributes[index];\n });\n wrapper.find('.k-window-title').css(isRtl ? 'left' : 'right', outerWidth(wrapper.find('.k-window-actions')) + 10);\n contentHtml.css('visibility', '').show();\n contentHtml.find('[data-role=editor]').each(function () {\n var editor = $(this).data('kendoEditor');\n if (editor) {\n editor.refresh();\n }\n });\n wrapper = contentHtml = null;\n }\n });\n templates = {\n wrapper: template('
              '),\n action: template('' + '' + ''),\n titlebar: template('
               ' + '#: title #' + '
              ' + '
              '),\n overlay: '
              ',\n contentFrame: template(''),\n resizeHandle: template('
              ')\n };\n function WindowResizing(wnd) {\n var that = this;\n that.owner = wnd;\n that._preventDragging = false;\n that._draggable = new Draggable(wnd.wrapper, {\n filter: '>' + KWINDOWRESIZEHANDLES,\n group: wnd.wrapper.id + '-resizing',\n dragstart: proxy(that.dragstart, that),\n drag: proxy(that.drag, that),\n dragend: proxy(that.dragend, that)\n });\n that._draggable.userEvents.bind('press', proxy(that.addOverlay, that));\n that._draggable.userEvents.bind('release', proxy(that.removeOverlay, that));\n }\n function getPosition(elem) {\n var result = {\n top: elem.offsetTop,\n left: elem.offsetLeft\n }, parent = elem.offsetParent;\n while (parent) {\n result.top += parent.offsetTop;\n result.left += parent.offsetLeft;\n var parentOverflowX = $(parent).css('overflowX');\n var parentOverflowY = $(parent).css('overflowY');\n if (parentOverflowY === 'auto' || parentOverflowY === 'scroll') {\n result.top -= parent.scrollTop;\n }\n if (parentOverflowX === 'auto' || parentOverflowX === 'scroll') {\n result.left -= parent.scrollLeft;\n }\n parent = parent.offsetParent;\n }\n return result;\n }\n WindowResizing.prototype = {\n addOverlay: function () {\n this.owner.wrapper.append(templates.overlay);\n },\n removeOverlay: function () {\n this.owner.wrapper.find(KOVERLAY).remove();\n },\n dragstart: function (e) {\n var that = this;\n var wnd = that.owner;\n var wrapper = wnd.wrapper;\n that._preventDragging = wnd.trigger(RESIZESTART);\n if (that._preventDragging) {\n return;\n }\n that.elementPadding = parseInt(wrapper.css('padding-top'), 10);\n that.initialPosition = kendo.getOffset(wrapper, 'position');\n that.resizeDirection = e.currentTarget.prop('className').replace('k-resize-handle k-resize-', '');\n that.initialSize = {\n width: wrapper.width(),\n height: wrapper.height()\n };\n that.containerOffset = kendo.getOffset(wnd.appendTo, 'position');\n var offsetParent = wrapper.offsetParent();\n if (offsetParent.is('html')) {\n that.containerOffset.top = that.containerOffset.left = 0;\n } else {\n var marginTop = offsetParent.css('margin-top');\n var marginLeft = offsetParent.css('margin-left');\n var hasMargin = !zero.test(marginTop) || !zero.test(marginLeft);\n if (hasMargin) {\n var wrapperPosition = getPosition(wrapper[0]);\n var relativeElMarginLeft = wrapperPosition.left - that.containerOffset.left - that.initialPosition.left;\n var relativeElMarginTop = wrapperPosition.top - that.containerOffset.top - that.initialPosition.top;\n that._relativeElMarginLeft = relativeElMarginLeft > 1 ? relativeElMarginLeft : 0;\n that._relativeElMarginTop = relativeElMarginTop > 1 ? relativeElMarginTop : 0;\n that.initialPosition.left += that._relativeElMarginLeft;\n that.initialPosition.top += that._relativeElMarginTop;\n }\n }\n wrapper.children(KWINDOWRESIZEHANDLES).not(e.currentTarget).hide();\n $(BODY).css(CURSOR, e.currentTarget.css(CURSOR));\n },\n drag: function (e) {\n if (this._preventDragging) {\n return;\n }\n var that = this, wnd = that.owner, wrapper = wnd.wrapper, options = wnd.options, direction = that.resizeDirection, containerOffset = that.containerOffset, initialPosition = that.initialPosition, initialSize = that.initialSize, newWidth, newHeight, windowBottom, windowRight, x = Math.max(e.x.location, 0), y = Math.max(e.y.location, 0);\n if (direction.indexOf('e') >= 0) {\n newWidth = x - initialPosition.left - containerOffset.left;\n wrapper.width(constrain(newWidth, options.minWidth, options.maxWidth));\n } else if (direction.indexOf('w') >= 0) {\n windowRight = initialPosition.left + initialSize.width + containerOffset.left;\n newWidth = constrain(windowRight - x, options.minWidth, options.maxWidth);\n wrapper.css({\n left: windowRight - newWidth - containerOffset.left - (that._relativeElMarginLeft || 0),\n width: newWidth\n });\n }\n var newWindowTop = y;\n if (wnd.options.pinned) {\n newWindowTop -= $(window).scrollTop();\n }\n if (direction.indexOf('s') >= 0) {\n newHeight = newWindowTop - initialPosition.top - that.elementPadding - containerOffset.top;\n wrapper.height(constrain(newHeight, options.minHeight, options.maxHeight));\n } else if (direction.indexOf('n') >= 0) {\n windowBottom = initialPosition.top + initialSize.height + containerOffset.top;\n newHeight = constrain(windowBottom - newWindowTop, options.minHeight, options.maxHeight);\n wrapper.css({\n top: windowBottom - newHeight - containerOffset.top - (that._relativeElMarginTop || 0),\n height: newHeight\n });\n }\n if (newWidth) {\n wnd.options.width = newWidth + 'px';\n }\n if (newHeight) {\n wnd.options.height = newHeight + 'px';\n }\n wnd.resize();\n },\n dragend: function (e) {\n if (this._preventDragging) {\n return;\n }\n var that = this, wnd = that.owner, wrapper = wnd.wrapper;\n wrapper.children(KWINDOWRESIZEHANDLES).not(e.currentTarget).show();\n $(BODY).css(CURSOR, '');\n if (wnd.touchScroller) {\n wnd.touchScroller.reset();\n }\n if (e.keyCode == 27) {\n wrapper.css(that.initialPosition).css(that.initialSize);\n }\n wnd.trigger(RESIZEEND);\n return false;\n },\n destroy: function () {\n if (this._draggable) {\n this._draggable.destroy();\n }\n this._draggable = this.owner = null;\n }\n };\n function WindowDragging(wnd, dragHandle) {\n var that = this;\n that.owner = wnd;\n that._preventDragging = false;\n that._draggable = new Draggable(wnd.wrapper, {\n filter: dragHandle,\n group: wnd.wrapper.id + '-moving',\n dragstart: proxy(that.dragstart, that),\n drag: proxy(that.drag, that),\n dragend: proxy(that.dragend, that),\n dragcancel: proxy(that.dragcancel, that)\n });\n that._draggable.userEvents.stopPropagation = false;\n }\n WindowDragging.prototype = {\n dragstart: function (e) {\n var wnd = this.owner, element = wnd.element, actions = element.find('.k-window-actions'), containerOffset = kendo.getOffset(wnd.appendTo);\n this._preventDragging = wnd.trigger(DRAGSTART) || !wnd.options.draggable;\n if (this._preventDragging) {\n return;\n }\n wnd.initialWindowPosition = kendo.getOffset(wnd.wrapper, 'position');\n wnd.initialPointerPosition = {\n left: e.x.client,\n top: e.y.client\n };\n wnd.startPosition = {\n left: e.x.client - wnd.initialWindowPosition.left,\n top: e.y.client - wnd.initialWindowPosition.top\n };\n if (actions.length > 0) {\n wnd.minLeftPosition = outerWidth(actions) + parseInt(actions.css('right'), 10) - outerWidth(element);\n } else {\n wnd.minLeftPosition = 20 - outerWidth(element);\n }\n wnd.minLeftPosition -= containerOffset.left;\n wnd.minTopPosition = -containerOffset.top;\n wnd.wrapper.append(templates.overlay).children(KWINDOWRESIZEHANDLES).hide();\n $(BODY).css(CURSOR, e.currentTarget.css(CURSOR));\n },\n drag: function (e) {\n if (this._preventDragging) {\n return;\n }\n var wnd = this.owner;\n var position = wnd.options.position;\n position.top = Math.max(e.y.client - wnd.startPosition.top, wnd.minTopPosition);\n position.left = Math.max(e.x.client - wnd.startPosition.left, wnd.minLeftPosition);\n if (kendo.support.transforms) {\n $(wnd.wrapper).css('transform', 'translate(' + (e.x.client - wnd.initialPointerPosition.left) + 'px, ' + (e.y.client - wnd.initialPointerPosition.top) + 'px)');\n } else {\n $(wnd.wrapper).css(position);\n }\n },\n _finishDrag: function () {\n var wnd = this.owner;\n wnd.wrapper.children(KWINDOWRESIZEHANDLES).toggle(!wnd.options.isMinimized).end().find(KOVERLAY).remove();\n $(BODY).css(CURSOR, '');\n },\n dragcancel: function (e) {\n if (this._preventDragging) {\n return;\n }\n this._finishDrag();\n e.currentTarget.closest(KWINDOW).css(this.owner.initialWindowPosition);\n },\n dragend: function () {\n if (this._preventDragging) {\n return;\n }\n $(this.owner.wrapper).css(this.owner.options.position).css('transform', '');\n this._finishDrag();\n this.owner.trigger(DRAGEND);\n return false;\n },\n destroy: function () {\n if (this._draggable) {\n this._draggable.destroy();\n }\n this._draggable = this.owner = null;\n }\n };\n kendo.ui.plugin(Window);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.virtuallist', ['kendo.data'], f);\n}(function () {\n var __meta__ = {\n id: 'virtuallist',\n name: 'VirtualList',\n category: 'framework',\n depends: ['data'],\n hidden: true\n };\n (function ($, undefined) {\n var kendo = window.kendo, ui = kendo.ui, Widget = ui.Widget, DataBoundWidget = ui.DataBoundWidget, proxy = $.proxy, WRAPPER = 'k-virtual-wrap', VIRTUALLIST = 'k-virtual-list', CONTENT = 'k-virtual-content', LIST = 'k-list', HEADER = 'k-group-header', VIRTUALITEM = 'k-virtual-item', ITEM = 'k-item', HEIGHTCONTAINER = 'k-height-container', GROUPITEM = 'k-group', SELECTED = 'k-state-selected', FOCUSED = 'k-state-focused', HOVER = 'k-state-hover', CHANGE = 'change', CLICK = 'click', LISTBOUND = 'listBound', ITEMCHANGE = 'itemChange', ACTIVATE = 'activate', DEACTIVATE = 'deactivate', VIRTUAL_LIST_NS = '.VirtualList';\n function lastFrom(array) {\n return array[array.length - 1];\n }\n function toArray(value) {\n return value instanceof Array ? value : [value];\n }\n function isPrimitive(dataItem) {\n return typeof dataItem === 'string' || typeof dataItem === 'number' || typeof dataItem === 'boolean';\n }\n function getItemCount(screenHeight, listScreens, itemHeight) {\n return Math.ceil(screenHeight * listScreens / itemHeight);\n }\n function appendChild(parent, className, tagName) {\n var element = document.createElement(tagName || 'div');\n if (className) {\n element.className = className;\n }\n parent.appendChild(element);\n return element;\n }\n function getDefaultItemHeight() {\n var mockList = $('
              '), lineHeight;\n mockList.css({\n position: 'absolute',\n left: '-200000px',\n visibility: 'hidden'\n });\n mockList.appendTo(document.body);\n lineHeight = parseFloat(kendo.getComputedStyles(mockList.find('.k-item')[0], ['line-height'])['line-height']);\n mockList.remove();\n return lineHeight;\n }\n function bufferSizes(screenHeight, listScreens, opposite) {\n return {\n down: screenHeight * opposite,\n up: screenHeight * (listScreens - 1 - opposite)\n };\n }\n function listValidator(options, screenHeight) {\n var downThreshold = (options.listScreens - 1 - options.threshold) * screenHeight;\n var upThreshold = options.threshold * screenHeight;\n return function (list, scrollTop, lastScrollTop) {\n if (scrollTop > lastScrollTop) {\n return scrollTop - list.top < downThreshold;\n } else {\n return list.top === 0 || scrollTop - list.top > upThreshold;\n }\n };\n }\n function scrollCallback(element, callback) {\n return function (force) {\n return callback(element.scrollTop, force);\n };\n }\n function syncList(reorder) {\n return function (list, force) {\n reorder(list.items, list.index, force);\n return list;\n };\n }\n function position(element, y) {\n if (kendo.support.browser.msie && kendo.support.browser.version < 10) {\n element.style.top = y + 'px';\n } else {\n element.style.webkitTransform = 'translateY(' + y + 'px)';\n element.style.transform = 'translateY(' + y + 'px)';\n }\n }\n function map2(callback, templates) {\n return function (arr1, arr2) {\n for (var i = 0, len = arr1.length; i < len; i++) {\n callback(arr1[i], arr2[i], templates);\n if (arr2[i].item) {\n this.trigger(ITEMCHANGE, {\n item: $(arr1[i]),\n data: arr2[i].item,\n ns: kendo.ui\n });\n }\n }\n };\n }\n function reshift(items, diff) {\n var range;\n if (diff > 0) {\n range = items.splice(0, diff);\n items.push.apply(items, range);\n } else {\n range = items.splice(diff, -diff);\n items.unshift.apply(items, range);\n }\n return range;\n }\n function render(element, data, templates) {\n var itemTemplate = templates.template;\n element = $(element);\n if (!data.item) {\n itemTemplate = templates.placeholderTemplate;\n }\n this.angular('cleanup', function () {\n return { elements: [element] };\n });\n element.attr('data-uid', data.item ? data.item.uid : '').attr('data-offset-index', data.index).html(itemTemplate(data.item || {}));\n element.toggleClass(FOCUSED, data.current);\n element.toggleClass(SELECTED, data.selected);\n element.toggleClass('k-first', data.newGroup);\n element.toggleClass('k-loading-item', !data.item);\n if (data.index !== 0 && data.newGroup) {\n $('
              ').appendTo(element).html(templates.groupTemplate(data.group));\n }\n if (data.top !== undefined) {\n position(element[0], data.top);\n }\n this.angular('compile', function () {\n return {\n elements: [element],\n data: [{\n dataItem: data.item,\n group: data.group,\n newGroup: data.newGroup\n }]\n };\n });\n }\n function mapChangedItems(selected, itemsToMatch) {\n var itemsLength = itemsToMatch.length;\n var selectedLength = selected.length;\n var dataItem;\n var found;\n var i, j;\n var changed = [];\n var unchanged = [];\n if (selectedLength) {\n for (i = 0; i < selectedLength; i++) {\n dataItem = selected[i];\n found = false;\n for (j = 0; j < itemsLength; j++) {\n if (dataItem === itemsToMatch[j]) {\n found = true;\n changed.push({\n index: i,\n item: dataItem\n });\n break;\n }\n }\n if (!found) {\n unchanged.push(dataItem);\n }\n }\n }\n return {\n changed: changed,\n unchanged: unchanged\n };\n }\n function isActivePromise(promise) {\n return promise && promise.state() !== 'resolved';\n }\n var VirtualList = DataBoundWidget.extend({\n init: function (element, options) {\n var that = this;\n that.bound(false);\n that._fetching = false;\n Widget.fn.init.call(that, element, options);\n if (!that.options.itemHeight) {\n that.options.itemHeight = getDefaultItemHeight();\n }\n options = that.options;\n that.element.addClass(LIST + ' ' + VIRTUALLIST).attr('role', 'listbox');\n that.content = that.element.wrap('
              ').parent();\n that.wrapper = that.content.wrap('
              ').parent();\n that.header = that.content.before('
              ').prev();\n that.element.on('mouseenter' + VIRTUAL_LIST_NS, 'li:not(.k-loading-item)', function () {\n $(this).addClass(HOVER);\n }).on('mouseleave' + VIRTUAL_LIST_NS, 'li', function () {\n $(this).removeClass(HOVER);\n });\n that._values = toArray(that.options.value);\n that._selectedDataItems = [];\n that._selectedIndexes = [];\n that._rangesList = {};\n that._promisesList = [];\n that._optionID = kendo.guid();\n that._templates();\n that.setDataSource(options.dataSource);\n that.content.on('scroll' + VIRTUAL_LIST_NS, kendo.throttle(function () {\n that._renderItems();\n that._triggerListBound();\n }, options.delay));\n that._selectable();\n },\n options: {\n name: 'VirtualList',\n autoBind: true,\n delay: 100,\n height: null,\n listScreens: 4,\n threshold: 0.5,\n itemHeight: null,\n oppositeBuffer: 1,\n type: 'flat',\n selectable: false,\n value: [],\n dataValueField: null,\n template: '#:data#',\n placeholderTemplate: 'loading...',\n groupTemplate: '#:data#',\n fixedGroupTemplate: 'fixed header template',\n mapValueTo: 'index',\n valueMapper: null\n },\n events: [\n CHANGE,\n CLICK,\n LISTBOUND,\n ITEMCHANGE,\n ACTIVATE,\n DEACTIVATE\n ],\n setOptions: function (options) {\n Widget.fn.setOptions.call(this, options);\n if (this._selectProxy && this.options.selectable === false) {\n this.element.off(CLICK, '.' + VIRTUALITEM, this._selectProxy);\n } else if (!this._selectProxy && this.options.selectable) {\n this._selectable();\n }\n this._templates();\n this.refresh();\n },\n items: function () {\n return $(this._items);\n },\n destroy: function () {\n this.wrapper.off(VIRTUAL_LIST_NS);\n this.dataSource.unbind(CHANGE, this._refreshHandler);\n Widget.fn.destroy.call(this);\n },\n setDataSource: function (source) {\n var that = this;\n var dataSource = source || {};\n var value;\n dataSource = $.isArray(dataSource) ? { data: dataSource } : dataSource;\n dataSource = kendo.data.DataSource.create(dataSource);\n if (that.dataSource) {\n that.dataSource.unbind(CHANGE, that._refreshHandler);\n that._clean();\n that.bound(false);\n that._deferValueSet = true;\n value = that.value();\n that.value([]);\n that.mute(function () {\n that.value(value);\n });\n } else {\n that._refreshHandler = $.proxy(that.refresh, that);\n }\n that.dataSource = dataSource.bind(CHANGE, that._refreshHandler);\n that.setDSFilter(dataSource.filter());\n if (dataSource.view().length !== 0) {\n that.refresh();\n } else if (that.options.autoBind) {\n dataSource.fetch();\n }\n },\n skip: function () {\n return this.dataSource.currentRangeStart();\n },\n _triggerListBound: function () {\n var that = this;\n var skip = that.skip();\n if (that.bound() && !that._selectingValue && that._skip !== skip) {\n that._skip = skip;\n that.trigger(LISTBOUND);\n }\n },\n _getValues: function (dataItems) {\n var getter = this._valueGetter;\n return $.map(dataItems, function (dataItem) {\n return getter(dataItem);\n });\n },\n refresh: function (e) {\n var that = this;\n var action = e && e.action;\n var isItemChange = action === 'itemchange';\n var filtered = this.isFiltered();\n var result;\n if (that._mute) {\n return;\n }\n that._deferValueSet = false;\n if (!that._fetching) {\n if (filtered) {\n that.focus(0);\n }\n that._createList();\n if (!action && that._values.length && !filtered && !that.options.skipUpdateOnBind) {\n that._selectingValue = true;\n that.value(that._values, true).done(function () {\n that.bound(true);\n that._selectingValue = false;\n that._triggerListBound();\n });\n } else {\n that.bound(true);\n that._triggerListBound();\n }\n } else {\n if (that._renderItems) {\n that._renderItems(true);\n }\n that._triggerListBound();\n }\n if (isItemChange || action === 'remove') {\n result = mapChangedItems(that._selectedDataItems, e.items);\n if (result.changed.length) {\n if (isItemChange) {\n that.trigger('selectedItemChange', { items: result.changed });\n } else {\n that.value(that._getValues(result.unchanged));\n }\n }\n }\n that._fetching = false;\n },\n removeAt: function (position) {\n this._selectedIndexes.splice(position, 1);\n this._values.splice(position, 1);\n return {\n position: position,\n dataItem: this._selectedDataItems.splice(position, 1)[0]\n };\n },\n setValue: function (value) {\n this._values = toArray(value);\n },\n value: function (value, _forcePrefetch) {\n var that = this;\n if (value === undefined) {\n return that._values.slice();\n }\n if (value === null) {\n value = [];\n }\n value = toArray(value);\n if (!that._valueDeferred || that._valueDeferred.state() === 'resolved') {\n that._valueDeferred = $.Deferred();\n }\n var shouldClear = that.options.selectable === 'multiple' && that.select().length && value.length;\n if (shouldClear || !value.length) {\n that.select(-1);\n }\n that._values = value;\n if (that.bound() && !that._mute && !that._deferValueSet || _forcePrefetch) {\n that._prefetchByValue(value);\n }\n return that._valueDeferred;\n },\n _prefetchByValue: function (value) {\n var that = this, dataView = that._dataView, valueGetter = that._valueGetter, mapValueTo = that.options.mapValueTo, item, match = false, forSelection = [];\n for (var i = 0; i < value.length; i++) {\n for (var idx = 0; idx < dataView.length; idx++) {\n item = dataView[idx].item;\n if (item) {\n match = isPrimitive(item) ? value[i] === item : value[i] === valueGetter(item);\n if (match) {\n forSelection.push(dataView[idx].index);\n }\n }\n }\n }\n if (forSelection.length === value.length) {\n that._values = [];\n that.select(forSelection);\n return;\n }\n if (typeof that.options.valueMapper === 'function') {\n that.options.valueMapper({\n value: this.options.selectable === 'multiple' ? value : value[0],\n success: function (response) {\n if (mapValueTo === 'index') {\n that.mapValueToIndex(response);\n } else if (mapValueTo === 'dataItem') {\n that.mapValueToDataItem(response);\n }\n }\n });\n } else {\n that.select([-1]);\n }\n },\n mapValueToIndex: function (indexes) {\n if (indexes === undefined || indexes === -1 || indexes === null) {\n indexes = [];\n } else {\n indexes = toArray(indexes);\n }\n if (!indexes.length) {\n indexes = [-1];\n } else {\n var removed = this._deselect([]).removed;\n if (removed.length) {\n this._triggerChange(removed, []);\n }\n }\n this.select(indexes);\n },\n mapValueToDataItem: function (dataItems) {\n var removed, added;\n if (dataItems === undefined || dataItems === null) {\n dataItems = [];\n } else {\n dataItems = toArray(dataItems);\n }\n if (!dataItems.length) {\n this.select([-1]);\n } else {\n removed = $.map(this._selectedDataItems, function (item, index) {\n return {\n index: index,\n dataItem: item\n };\n });\n added = $.map(dataItems, function (item, index) {\n return {\n index: index,\n dataItem: item\n };\n });\n this._selectedDataItems = dataItems;\n this._selectedIndexes = [];\n for (var i = 0; i < this._selectedDataItems.length; i++) {\n this._selectedIndexes.push(undefined);\n }\n this._triggerChange(removed, added);\n if (this._valueDeferred) {\n this._valueDeferred.resolve();\n }\n }\n },\n deferredRange: function (index) {\n var dataSource = this.dataSource;\n var take = this.itemCount;\n var ranges = this._rangesList;\n var result = $.Deferred();\n var defs = [];\n var low = Math.floor(index / take) * take;\n var high = Math.ceil(index / take) * take;\n var pages = high === low ? [high] : [\n low,\n high\n ];\n $.each(pages, function (_, skip) {\n var end = skip + take;\n var existingRange = ranges[skip];\n var deferred;\n if (!existingRange || existingRange.end !== end) {\n deferred = $.Deferred();\n ranges[skip] = {\n end: end,\n deferred: deferred\n };\n dataSource._multiplePrefetch(skip, take, function () {\n deferred.resolve();\n });\n } else {\n deferred = existingRange.deferred;\n }\n defs.push(deferred);\n });\n $.when.apply($, defs).then(function () {\n result.resolve();\n });\n return result;\n },\n prefetch: function (indexes) {\n var that = this, take = this.itemCount, isEmptyList = !that._promisesList.length;\n if (!isActivePromise(that._activeDeferred)) {\n that._activeDeferred = $.Deferred();\n that._promisesList = [];\n }\n $.each(indexes, function (_, index) {\n that._promisesList.push(that.deferredRange(that._getSkip(index, take)));\n });\n if (isEmptyList) {\n $.when.apply($, that._promisesList).done(function () {\n that._promisesList = [];\n that._activeDeferred.resolve();\n });\n }\n return that._activeDeferred;\n },\n _findDataItem: function (view, index) {\n var group;\n if (this.options.type === 'group') {\n for (var i = 0; i < view.length; i++) {\n group = view[i].items;\n if (group.length <= index) {\n index = index - group.length;\n } else {\n return group[index];\n }\n }\n }\n return view[index];\n },\n _getRange: function (skip, take) {\n return this.dataSource._findRange(skip, Math.min(skip + take, this.dataSource.total()));\n },\n dataItemByIndex: function (index) {\n var take = this.itemCount;\n var skip = this._getSkip(index, take);\n var view = this._getRange(skip, take);\n return this._findDataItem(view, [index - skip]);\n },\n selectedDataItems: function () {\n return this._selectedDataItems.slice();\n },\n scrollWith: function (value) {\n this.content.scrollTop(this.content.scrollTop() + value);\n },\n scrollTo: function (y) {\n this.content.scrollTop(y);\n },\n scrollToIndex: function (index) {\n this.scrollTo(index * this.options.itemHeight);\n },\n focus: function (candidate) {\n var element, index, data, current, itemHeight = this.options.itemHeight, id = this._optionID, triggerEvent = true;\n if (candidate === undefined) {\n current = this.element.find('.' + FOCUSED);\n return current.length ? current : null;\n }\n if (typeof candidate === 'function') {\n data = this.dataSource.flatView();\n for (var idx = 0; idx < data.length; idx++) {\n if (candidate(data[idx])) {\n candidate = idx;\n break;\n }\n }\n }\n if (candidate instanceof Array) {\n candidate = lastFrom(candidate);\n }\n if (isNaN(candidate)) {\n element = $(candidate);\n index = parseInt($(element).attr('data-offset-index'), 10);\n } else {\n index = candidate;\n element = this._getElementByIndex(index);\n }\n if (index === -1) {\n this.element.find('.' + FOCUSED).removeClass(FOCUSED);\n this._focusedIndex = undefined;\n return;\n }\n if (element.length) {\n if (element.hasClass(FOCUSED)) {\n triggerEvent = false;\n }\n if (this._focusedIndex !== undefined) {\n current = this._getElementByIndex(this._focusedIndex);\n current.removeClass(FOCUSED).removeAttr('id');\n if (triggerEvent) {\n this.trigger(DEACTIVATE);\n }\n }\n this._focusedIndex = index;\n element.addClass(FOCUSED).attr('id', id);\n var position = this._getElementLocation(index);\n if (position === 'top') {\n this.scrollTo(index * itemHeight);\n } else if (position === 'bottom') {\n this.scrollTo(index * itemHeight + itemHeight - this._screenHeight);\n } else if (position === 'outScreen') {\n this.scrollTo(index * itemHeight);\n }\n if (triggerEvent) {\n this.trigger(ACTIVATE);\n }\n } else {\n this._focusedIndex = index;\n this.items().removeClass(FOCUSED);\n this.scrollToIndex(index);\n }\n },\n focusIndex: function () {\n return this._focusedIndex;\n },\n focusFirst: function () {\n this.scrollTo(0);\n this.focus(0);\n },\n focusLast: function () {\n var lastIndex = this.dataSource.total();\n this.scrollTo(this.heightContainer.offsetHeight);\n this.focus(lastIndex);\n },\n focusPrev: function () {\n var index = this._focusedIndex;\n var current;\n if (!isNaN(index) && index > 0) {\n index -= 1;\n this.focus(index);\n current = this.focus();\n if (current && current.hasClass('k-loading-item')) {\n index += 1;\n this.focus(index);\n }\n return index;\n } else {\n index = this.dataSource.total() - 1;\n this.focus(index);\n return index;\n }\n },\n focusNext: function () {\n var index = this._focusedIndex;\n var lastIndex = this.dataSource.total() - 1;\n var current;\n if (!isNaN(index) && index < lastIndex) {\n index += 1;\n this.focus(index);\n current = this.focus();\n if (current && current.hasClass('k-loading-item')) {\n index -= 1;\n this.focus(index);\n }\n return index;\n } else {\n index = 0;\n this.focus(index);\n return index;\n }\n },\n _triggerChange: function (removed, added) {\n removed = removed || [];\n added = added || [];\n if (removed.length || added.length) {\n this.trigger(CHANGE, {\n removed: removed,\n added: added\n });\n }\n },\n select: function (candidate) {\n var that = this, indices, singleSelection = that.options.selectable !== 'multiple', prefetchStarted = isActivePromise(that._activeDeferred), filtered = this.isFiltered(), isAlreadySelected, deferred, result, removed = [];\n if (candidate === undefined) {\n return that._selectedIndexes.slice();\n }\n if (!that._selectDeferred || that._selectDeferred.state() === 'resolved') {\n that._selectDeferred = $.Deferred();\n }\n indices = that._getIndecies(candidate);\n isAlreadySelected = singleSelection && !filtered && lastFrom(indices) === lastFrom(this._selectedIndexes);\n removed = that._deselectCurrentValues(indices);\n if (removed.length || !indices.length || isAlreadySelected) {\n that._triggerChange(removed);\n if (that._valueDeferred) {\n that._valueDeferred.resolve();\n }\n return that._selectDeferred.resolve().promise();\n }\n if (indices.length === 1 && indices[0] === -1) {\n indices = [];\n }\n result = that._deselect(indices);\n removed = result.removed;\n indices = result.indices;\n if (singleSelection) {\n prefetchStarted = false;\n if (indices.length) {\n indices = [lastFrom(indices)];\n }\n }\n var done = function () {\n var added = that._select(indices);\n that.focus(indices);\n that._triggerChange(removed, added);\n if (that._valueDeferred) {\n that._valueDeferred.resolve();\n }\n that._selectDeferred.resolve();\n };\n deferred = that.prefetch(indices);\n if (!prefetchStarted) {\n if (deferred) {\n deferred.done(done);\n } else {\n done();\n }\n }\n return that._selectDeferred.promise();\n },\n bound: function (bound) {\n if (bound === undefined) {\n return this._listCreated;\n }\n this._listCreated = bound;\n },\n mute: function (callback) {\n this._mute = true;\n proxy(callback(), this);\n this._mute = false;\n },\n setDSFilter: function (filter) {\n this._lastDSFilter = $.extend({}, filter);\n },\n isFiltered: function () {\n if (!this._lastDSFilter) {\n this.setDSFilter(this.dataSource.filter());\n }\n return !kendo.data.Query.compareFilters(this.dataSource.filter(), this._lastDSFilter);\n },\n skipUpdate: $.noop,\n _getElementByIndex: function (index) {\n return this.items().filter(function (idx, element) {\n return index === parseInt($(element).attr('data-offset-index'), 10);\n });\n },\n _getElementByDataItem: function (dataItem) {\n var dataView = this._dataView, valueGetter = this._valueGetter, element, match;\n for (var i = 0; i < dataView.length; i++) {\n match = dataView[i].item && isPrimitive(dataView[i].item) ? dataView[i].item === dataItem : valueGetter(dataView[i].item) === valueGetter(dataItem);\n if (match) {\n element = dataView[i];\n break;\n }\n }\n return element ? this._getElementByIndex(element.index) : $();\n },\n _clean: function () {\n this.result = undefined;\n this._lastScrollTop = undefined;\n this._skip = undefined;\n $(this.heightContainer).remove();\n this.heightContainer = undefined;\n this.element.empty();\n },\n _height: function () {\n var hasData = !!this.dataSource.view().length, height = this.options.height, itemHeight = this.options.itemHeight, total = this.dataSource.total();\n if (!hasData) {\n height = 0;\n } else if (height / itemHeight > total) {\n height = total * itemHeight;\n }\n return height;\n },\n setScreenHeight: function () {\n var height = this._height();\n this.content.height(height);\n this._screenHeight = height;\n },\n screenHeight: function () {\n return this._screenHeight;\n },\n _getElementLocation: function (index) {\n var scrollTop = this.content.scrollTop(), screenHeight = this._screenHeight, itemHeight = this.options.itemHeight, yPosition = index * itemHeight, yDownPostion = yPosition + itemHeight, screenEnd = scrollTop + screenHeight, position;\n if (yPosition === scrollTop - itemHeight || yDownPostion > scrollTop && yPosition < scrollTop) {\n position = 'top';\n } else if (yPosition === screenEnd || yPosition < screenEnd && screenEnd < yDownPostion) {\n position = 'bottom';\n } else if (yPosition >= scrollTop && yPosition <= scrollTop + (screenHeight - itemHeight)) {\n position = 'inScreen';\n } else {\n position = 'outScreen';\n }\n return position;\n },\n _templates: function () {\n var options = this.options;\n var templates = {\n template: options.template,\n placeholderTemplate: options.placeholderTemplate,\n groupTemplate: options.groupTemplate,\n fixedGroupTemplate: options.fixedGroupTemplate\n };\n for (var key in templates) {\n if (typeof templates[key] !== 'function') {\n templates[key] = kendo.template(templates[key] || '');\n }\n }\n this.templates = templates;\n },\n _generateItems: function (element, count) {\n var items = [], item, itemHeight = this.options.itemHeight + 'px';\n while (count-- > 0) {\n item = document.createElement('li');\n item.tabIndex = -1;\n item.className = VIRTUALITEM + ' ' + ITEM;\n item.setAttribute('role', 'option');\n item.style.height = itemHeight;\n item.style.minHeight = itemHeight;\n element.appendChild(item);\n items.push(item);\n }\n return items;\n },\n _saveInitialRanges: function () {\n var ranges = this.dataSource._ranges;\n var deferred = $.Deferred();\n deferred.resolve();\n this._rangesList = {};\n for (var i = 0; i < ranges.length; i++) {\n this._rangesList[ranges[i].start] = {\n end: ranges[i].end,\n deferred: deferred\n };\n }\n },\n _createList: function () {\n var that = this, content = that.content.get(0), options = that.options, dataSource = that.dataSource;\n if (that.bound()) {\n that._clean();\n }\n that._saveInitialRanges();\n that._buildValueGetter();\n that.setScreenHeight();\n that.itemCount = getItemCount(that._screenHeight, options.listScreens, options.itemHeight);\n if (that.itemCount > dataSource.total()) {\n that.itemCount = dataSource.total();\n }\n that._items = that._generateItems(that.element[0], that.itemCount);\n that._setHeight(options.itemHeight * dataSource.total());\n that.options.type = (dataSource.group() || []).length ? 'group' : 'flat';\n if (that.options.type === 'flat') {\n that.header.hide();\n } else {\n that.header.show();\n }\n that.getter = that._getter(function () {\n that._renderItems(true);\n });\n that._onScroll = function (scrollTop, force) {\n var getList = that._listItems(that.getter);\n return that._fixedHeader(scrollTop, getList(scrollTop, force));\n };\n that._renderItems = that._whenChanged(scrollCallback(content, that._onScroll), syncList(that._reorderList(that._items, $.proxy(render, that))));\n that._renderItems();\n that._calculateGroupPadding(that._screenHeight);\n },\n _setHeight: function (height) {\n var currentHeight, heightContainer = this.heightContainer;\n if (!heightContainer) {\n heightContainer = this.heightContainer = appendChild(this.content[0], HEIGHTCONTAINER);\n } else {\n currentHeight = heightContainer.offsetHeight;\n }\n if (height !== currentHeight) {\n heightContainer.innerHTML = '';\n while (height > 0) {\n var padHeight = Math.min(height, 250000);\n appendChild(heightContainer).style.height = padHeight + 'px';\n height -= padHeight;\n }\n }\n },\n _getter: function () {\n var lastRequestedRange = null, dataSource = this.dataSource, lastRangeStart = dataSource.skip(), type = this.options.type, pageSize = this.itemCount, flatGroups = {};\n if (dataSource.pageSize() < pageSize) {\n this.mute(function () {\n dataSource.pageSize(pageSize);\n });\n }\n return function (index, rangeStart) {\n var that = this;\n if (!dataSource.inRange(rangeStart, pageSize)) {\n if (lastRequestedRange !== rangeStart) {\n lastRequestedRange = rangeStart;\n lastRangeStart = rangeStart;\n if (that._getterDeferred) {\n that._getterDeferred.reject();\n }\n that._getterDeferred = that.deferredRange(rangeStart);\n that._getterDeferred.then(function () {\n var firstItemIndex = that._indexConstraint(that.content[0].scrollTop);\n that._getterDeferred = null;\n if (rangeStart <= firstItemIndex && firstItemIndex <= rangeStart + pageSize) {\n that._fetching = true;\n dataSource.range(rangeStart, pageSize);\n }\n });\n }\n return null;\n } else {\n if (lastRangeStart !== rangeStart) {\n this.mute(function () {\n dataSource.range(rangeStart, pageSize);\n lastRangeStart = rangeStart;\n });\n }\n var result;\n if (type === 'group') {\n if (!flatGroups[rangeStart]) {\n var flatGroup = flatGroups[rangeStart] = [];\n var groups = dataSource.view();\n for (var i = 0, len = groups.length; i < len; i++) {\n var group = groups[i];\n for (var j = 0, groupLength = group.items.length; j < groupLength; j++) {\n flatGroup.push({\n item: group.items[j],\n group: group.value\n });\n }\n }\n }\n result = flatGroups[rangeStart][index - rangeStart];\n } else {\n result = dataSource.view()[index - rangeStart];\n }\n return result;\n }\n };\n },\n _fixedHeader: function (scrollTop, list) {\n var group = this.currentVisibleGroup, itemHeight = this.options.itemHeight, firstVisibleDataItemIndex = Math.floor((scrollTop - list.top) / itemHeight), firstVisibleDataItem = list.items[firstVisibleDataItemIndex];\n if (firstVisibleDataItem && firstVisibleDataItem.item) {\n var firstVisibleGroup = firstVisibleDataItem.group;\n if (firstVisibleGroup !== group) {\n this.header[0].innerHTML = firstVisibleGroup || '';\n this.currentVisibleGroup = firstVisibleGroup;\n }\n }\n return list;\n },\n _itemMapper: function (item, index, value) {\n var listType = this.options.type, itemHeight = this.options.itemHeight, currentIndex = this._focusedIndex, selected = false, current = false, newGroup = false, group = null, match = false, valueGetter = this._valueGetter;\n if (listType === 'group') {\n if (item) {\n newGroup = index === 0 || this._currentGroup && this._currentGroup !== item.group;\n this._currentGroup = item.group;\n }\n group = item ? item.group : null;\n item = item ? item.item : null;\n }\n if (!this.isFiltered() && value.length && item) {\n for (var i = 0; i < value.length; i++) {\n match = isPrimitive(item) ? value[i] === item : value[i] === valueGetter(item);\n if (match) {\n value.splice(i, 1);\n selected = true;\n break;\n }\n }\n }\n if (currentIndex === index) {\n current = true;\n }\n return {\n item: item ? item : null,\n group: group,\n newGroup: newGroup,\n selected: selected,\n current: current,\n index: index,\n top: index * itemHeight\n };\n },\n _range: function (index) {\n var itemCount = this.itemCount, value = this._values.slice(), items = [], item;\n this._view = {};\n this._currentGroup = null;\n for (var i = index, length = index + itemCount; i < length; i++) {\n item = this._itemMapper(this.getter(i, index), i, value);\n items.push(item);\n this._view[item.index] = item;\n }\n this._dataView = items;\n return items;\n },\n _getDataItemsCollection: function (scrollTop, lastScrollTop) {\n var items = this._range(this._listIndex(scrollTop, lastScrollTop));\n return {\n index: items.length ? items[0].index : 0,\n top: items.length ? items[0].top : 0,\n items: items\n };\n },\n _listItems: function () {\n var screenHeight = this._screenHeight, options = this.options;\n var theValidator = listValidator(options, screenHeight);\n return $.proxy(function (value, force) {\n var result = this.result, lastScrollTop = this._lastScrollTop;\n if (force || !result || !theValidator(result, value, lastScrollTop)) {\n result = this._getDataItemsCollection(value, lastScrollTop);\n }\n this._lastScrollTop = value;\n this.result = result;\n return result;\n }, this);\n },\n _whenChanged: function (getter, callback) {\n var current;\n return function (force) {\n var theNew = getter(force);\n if (theNew !== current) {\n current = theNew;\n callback(theNew, force);\n }\n };\n },\n _reorderList: function (list, reorder) {\n var that = this;\n var length = list.length;\n var currentOffset = -Infinity;\n reorder = $.proxy(map2(reorder, this.templates), this);\n return function (list2, offset, force) {\n var diff = offset - currentOffset;\n var range, range2;\n if (force || Math.abs(diff) >= length) {\n range = list;\n range2 = list2;\n } else {\n range = reshift(list, diff);\n range2 = diff > 0 ? list2.slice(-diff) : list2.slice(0, -diff);\n }\n reorder(range, range2, that.bound());\n currentOffset = offset;\n };\n },\n _bufferSizes: function () {\n var options = this.options;\n return bufferSizes(this._screenHeight, options.listScreens, options.oppositeBuffer);\n },\n _indexConstraint: function (position) {\n var itemCount = this.itemCount, itemHeight = this.options.itemHeight, total = this.dataSource.total();\n return Math.min(Math.max(total - itemCount, 0), Math.max(0, Math.floor(position / itemHeight)));\n },\n _listIndex: function (scrollTop, lastScrollTop) {\n var buffers = this._bufferSizes(), position;\n position = scrollTop - (scrollTop > lastScrollTop ? buffers.down : buffers.up);\n return this._indexConstraint(position);\n },\n _selectable: function () {\n if (this.options.selectable) {\n this._selectProxy = $.proxy(this, '_clickHandler');\n this.element.on(CLICK + VIRTUAL_LIST_NS, '.' + VIRTUALITEM, this._selectProxy);\n }\n },\n getElementIndex: function (element) {\n if (!(element instanceof jQuery)) {\n return undefined;\n }\n return parseInt(element.attr('data-offset-index'), 10);\n },\n _getIndecies: function (candidate) {\n var result = [], data;\n if (typeof candidate === 'function') {\n data = this.dataSource.flatView();\n for (var idx = 0; idx < data.length; idx++) {\n if (candidate(data[idx])) {\n result.push(idx);\n break;\n }\n }\n }\n if (typeof candidate === 'number') {\n result.push(candidate);\n }\n var elementIndex = this.getElementIndex(candidate);\n if (!isNaN(elementIndex)) {\n result.push(elementIndex);\n }\n if (candidate instanceof Array) {\n result = candidate;\n }\n return result;\n },\n _deselect: function (indices) {\n var removed = [], selectedIndex, dataItem, selectedIndexes = this._selectedIndexes, selectedDataItems = this._selectedDataItems, position = 0, selectable = this.options.selectable, removedindexesCounter = 0, valueGetter = this._valueGetter, item, match, result = null;\n indices = indices.slice();\n if (selectable === true || !indices.length) {\n for (var idx = 0; idx < selectedIndexes.length; idx++) {\n if (selectedIndexes[idx] !== undefined) {\n this._getElementByIndex(selectedIndexes[idx]).removeClass(SELECTED);\n } else if (selectedDataItems[idx]) {\n this._getElementByDataItem(selectedDataItems[idx]).removeClass(SELECTED);\n }\n removed.push({\n index: selectedIndexes[idx],\n position: idx,\n dataItem: selectedDataItems[idx]\n });\n }\n this._values = [];\n this._selectedDataItems = [];\n this._selectedIndexes = [];\n } else if (selectable === 'multiple') {\n for (var i = 0; i < indices.length; i++) {\n result = null;\n position = $.inArray(indices[i], selectedIndexes);\n dataItem = this.dataItemByIndex(indices[i]);\n if (position === -1 && dataItem) {\n for (var j = 0; j < selectedDataItems.length; j++) {\n match = isPrimitive(dataItem) ? selectedDataItems[j] === dataItem : valueGetter(selectedDataItems[j]) === valueGetter(dataItem);\n if (match) {\n item = this._getElementByIndex(indices[i]);\n result = this._deselectSingleItem(item, j, indices[i], removedindexesCounter);\n }\n }\n } else {\n selectedIndex = selectedIndexes[position];\n if (selectedIndex !== undefined) {\n item = this._getElementByIndex(selectedIndex);\n result = this._deselectSingleItem(item, position, selectedIndex, removedindexesCounter);\n }\n }\n if (result) {\n indices.splice(i, 1);\n removed.push(result);\n removedindexesCounter++;\n i--;\n }\n }\n }\n return {\n indices: indices,\n removed: removed\n };\n },\n _deselectSingleItem: function (item, position, selectedIndex, removedindexesCounter) {\n var dataItem;\n if (!item.hasClass('k-state-selected')) {\n return;\n }\n item.removeClass(SELECTED);\n this._values.splice(position, 1);\n this._selectedIndexes.splice(position, 1);\n dataItem = this._selectedDataItems.splice(position, 1)[0];\n return {\n index: selectedIndex,\n position: position + removedindexesCounter,\n dataItem: dataItem\n };\n },\n _deselectCurrentValues: function (indices) {\n var children = this.element[0].children;\n var value, index, position;\n var values = this._values;\n var removed = [];\n var idx = 0;\n var j;\n if (this.options.selectable !== 'multiple' || !this.isFiltered()) {\n return [];\n }\n if (indices[0] === -1) {\n $(children).removeClass('k-state-selected');\n removed = $.map(this._selectedDataItems.slice(0), function (dataItem, idx) {\n return {\n dataItem: dataItem,\n position: idx\n };\n });\n this._selectedIndexes = [];\n this._selectedDataItems = [];\n this._values = [];\n return removed;\n }\n for (; idx < indices.length; idx++) {\n position = -1;\n index = indices[idx];\n value = this._valueGetter(this.dataItemByIndex(index));\n for (j = 0; j < values.length; j++) {\n if (value == values[j]) {\n position = j;\n break;\n }\n }\n if (position > -1) {\n removed.push(this.removeAt(position));\n $(children[index]).removeClass('k-state-selected');\n }\n }\n return removed;\n },\n _getSkip: function (index, take) {\n var page = index < take ? 1 : Math.floor(index / take) + 1;\n return (page - 1) * take;\n },\n _select: function (indexes) {\n var that = this, singleSelection = this.options.selectable !== 'multiple', dataSource = this.dataSource, dataItem, oldSkip, take = this.itemCount, valueGetter = this._valueGetter, added = [];\n if (singleSelection) {\n that._selectedIndexes = [];\n that._selectedDataItems = [];\n that._values = [];\n }\n oldSkip = dataSource.skip();\n $.each(indexes, function (_, index) {\n var skip = that._getSkip(index, take);\n that.mute(function () {\n dataSource.range(skip, take);\n dataItem = that._findDataItem(dataSource.view(), [index - skip]);\n that._selectedIndexes.push(index);\n that._selectedDataItems.push(dataItem);\n that._values.push(isPrimitive(dataItem) ? dataItem : valueGetter(dataItem));\n added.push({\n index: index,\n dataItem: dataItem\n });\n that._getElementByIndex(index).addClass(SELECTED);\n dataSource.range(oldSkip, take);\n });\n });\n return added;\n },\n _clickHandler: function (e) {\n var item = $(e.currentTarget);\n if (!e.isDefaultPrevented() && item.attr('data-uid')) {\n this.trigger(CLICK, { item: item });\n }\n },\n _buildValueGetter: function () {\n this._valueGetter = kendo.getter(this.options.dataValueField);\n },\n _calculateGroupPadding: function (height) {\n var firstItem = this.items().first(), groupHeader = this.header, padding = 0;\n if (groupHeader[0] && groupHeader[0].style.display !== 'none') {\n if (height !== 'auto') {\n padding = kendo.support.scrollbar();\n }\n padding += parseFloat(firstItem.css('border-right-width'), 10) + parseFloat(firstItem.children('.k-group').css('right'), 10);\n groupHeader.css('padding-right', padding);\n }\n }\n });\n kendo.ui.VirtualList = VirtualList;\n kendo.ui.plugin(VirtualList);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.mobile.view', [\n 'kendo.core',\n 'kendo.fx',\n 'kendo.mobile.scroller',\n 'kendo.view'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'mobile.view',\n name: 'View',\n category: 'mobile',\n description: 'Mobile View',\n depends: [\n 'core',\n 'fx',\n 'mobile.scroller',\n 'view'\n ],\n hidden: true\n };\n (function ($, undefined) {\n var kendo = window.kendo, mobile = kendo.mobile, ui = mobile.ui, attr = kendo.attr, Widget = ui.Widget, ViewClone = kendo.ViewClone, INIT = 'init', UI_OVERLAY = '
              ', BEFORE_SHOW = 'beforeShow', SHOW = 'show', AFTER_SHOW = 'afterShow', BEFORE_HIDE = 'beforeHide', TRANSITION_END = 'transitionEnd', TRANSITION_START = 'transitionStart', HIDE = 'hide', DESTROY = 'destroy', attrValue = kendo.attrValue, roleSelector = kendo.roleSelector, directiveSelector = kendo.directiveSelector, compileMobileDirective = kendo.compileMobileDirective;\n function initPopOvers(element) {\n var popovers = element.find(roleSelector('popover')), idx, length, roles = ui.roles;\n for (idx = 0, length = popovers.length; idx < length; idx++) {\n kendo.initWidget(popovers[idx], {}, roles);\n }\n }\n function preventScrollIfNotInput(e) {\n if (!kendo.triggeredByInput(e)) {\n e.preventDefault();\n }\n }\n var View = Widget.extend({\n init: function (element, options) {\n Widget.fn.init.call(this, element, options);\n this.params = {};\n $.extend(this, options);\n this.transition = this.transition || this.defaultTransition;\n this._id();\n if (!this.options.$angular) {\n this._layout();\n this._overlay();\n this._scroller();\n this._model();\n } else {\n this._overlay();\n }\n },\n events: [\n INIT,\n BEFORE_SHOW,\n SHOW,\n AFTER_SHOW,\n BEFORE_HIDE,\n HIDE,\n DESTROY,\n TRANSITION_START,\n TRANSITION_END\n ],\n options: {\n name: 'View',\n title: '',\n layout: null,\n getLayout: $.noop,\n reload: false,\n transition: '',\n defaultTransition: '',\n useNativeScrolling: false,\n stretch: false,\n zoom: false,\n model: null,\n modelScope: window,\n scroller: {},\n initWidgets: true\n },\n enable: function (enable) {\n if (typeof enable == 'undefined') {\n enable = true;\n }\n if (enable) {\n this.overlay.hide();\n } else {\n this.overlay.show();\n }\n },\n destroy: function () {\n if (this.layout) {\n this.layout.detach(this);\n }\n this.trigger(DESTROY);\n Widget.fn.destroy.call(this);\n if (this.scroller) {\n this.scroller.destroy();\n }\n if (this.options.$angular) {\n this.element.scope().$destroy();\n }\n kendo.destroy(this.element);\n },\n purge: function () {\n this.destroy();\n this.element.remove();\n },\n triggerBeforeShow: function () {\n if (this.trigger(BEFORE_SHOW, { view: this })) {\n return false;\n }\n return true;\n },\n triggerBeforeHide: function () {\n if (this.trigger(BEFORE_HIDE, { view: this })) {\n return false;\n }\n return true;\n },\n showStart: function () {\n var element = this.element;\n element.css('display', '');\n if (!this.inited) {\n this.inited = true;\n this.trigger(INIT, { view: this });\n } else {\n this._invokeNgController();\n }\n if (this.layout) {\n this.layout.attach(this);\n }\n this._padIfNativeScrolling();\n this.trigger(SHOW, { view: this });\n kendo.resize(element);\n },\n showEnd: function () {\n this.trigger(AFTER_SHOW, { view: this });\n this._padIfNativeScrolling();\n },\n hideEnd: function () {\n var that = this;\n that.element.hide();\n that.trigger(HIDE, { view: that });\n if (that.layout) {\n that.layout.trigger(HIDE, {\n view: that,\n layout: that.layout\n });\n }\n },\n beforeTransition: function (type) {\n this.trigger(TRANSITION_START, { type: type });\n },\n afterTransition: function (type) {\n this.trigger(TRANSITION_END, { type: type });\n },\n _padIfNativeScrolling: function () {\n if (mobile.appLevelNativeScrolling()) {\n var isAndroid = kendo.support.mobileOS && kendo.support.mobileOS.android, skin = mobile.application.skin() || '', isAndroidForced = mobile.application.os.android || skin.indexOf('android') > -1, hasPlatformIndependentSkin = skin === 'flat' || skin.indexOf('material') > -1, topContainer = (isAndroid || isAndroidForced) && !hasPlatformIndependentSkin ? 'footer' : 'header', bottomContainer = (isAndroid || isAndroidForced) && !hasPlatformIndependentSkin ? 'header' : 'footer';\n this.content.css({\n paddingTop: this[topContainer].height(),\n paddingBottom: this[bottomContainer].height()\n });\n }\n },\n contentElement: function () {\n var that = this;\n return that.options.stretch ? that.content : that.scrollerContent;\n },\n clone: function () {\n return new ViewClone(this);\n },\n _scroller: function () {\n var that = this;\n if (mobile.appLevelNativeScrolling()) {\n return;\n }\n if (that.options.stretch) {\n that.content.addClass('km-stretched-view');\n } else {\n that.content.kendoMobileScroller($.extend(that.options.scroller, {\n zoom: that.options.zoom,\n useNative: that.options.useNativeScrolling\n }));\n that.scroller = that.content.data('kendoMobileScroller');\n that.scrollerContent = that.scroller.scrollElement;\n }\n if (kendo.support.kineticScrollNeeded) {\n $(that.element).on('touchmove', '.km-header', preventScrollIfNotInput);\n if (!that.options.useNativeScrolling && !that.options.stretch) {\n $(that.element).on('touchmove', '.km-content', preventScrollIfNotInput);\n }\n }\n },\n _model: function () {\n var that = this, element = that.element, model = that.options.model;\n if (typeof model === 'string') {\n model = kendo.getter(model)(that.options.modelScope);\n }\n that.model = model;\n initPopOvers(element);\n that.element.css('display', '');\n if (that.options.initWidgets) {\n if (model) {\n kendo.bind(element, model, ui, kendo.ui, kendo.dataviz.ui);\n } else {\n mobile.init(element.children());\n }\n }\n that.element.css('display', 'none');\n },\n _id: function () {\n var element = this.element, idAttrValue = element.attr('id') || '';\n this.id = attrValue(element, 'url') || '#' + idAttrValue;\n if (this.id == '#') {\n this.id = kendo.guid();\n element.attr('id', this.id);\n }\n },\n _layout: function () {\n var contentSelector = roleSelector('content'), element = this.element;\n element.addClass('km-view');\n this.header = element.children(roleSelector('header')).addClass('km-header');\n this.footer = element.children(roleSelector('footer')).addClass('km-footer');\n if (!element.children(contentSelector)[0]) {\n element.wrapInner('
              ');\n }\n this.content = element.children(roleSelector('content')).addClass('km-content');\n this.element.prepend(this.header).append(this.footer);\n this.layout = this.options.getLayout(this.layout);\n if (this.layout) {\n this.layout.setup(this);\n }\n },\n _overlay: function () {\n this.overlay = $(UI_OVERLAY).appendTo(this.element);\n },\n _invokeNgController: function () {\n var controller, scope;\n if (this.options.$angular) {\n controller = this.element.controller();\n scope = this.options.$angular[0];\n if (controller) {\n var callback = $.proxy(this, '_callController', controller, scope);\n if (/^\\$(digest|apply)$/.test(scope.$$phase)) {\n callback();\n } else {\n scope.$apply(callback);\n }\n }\n }\n },\n _callController: function (controller, scope) {\n this.element.injector().invoke(controller.constructor, controller, { $scope: scope });\n }\n });\n function initWidgets(collection) {\n collection.each(function () {\n kendo.initWidget($(this), {}, ui.roles);\n });\n }\n var Layout = Widget.extend({\n init: function (element, options) {\n Widget.fn.init.call(this, element, options);\n element = this.element;\n this.header = element.children(this._locate('header')).addClass('km-header');\n this.footer = element.children(this._locate('footer')).addClass('km-footer');\n this.elements = this.header.add(this.footer);\n initPopOvers(element);\n if (!this.options.$angular) {\n kendo.mobile.init(this.element.children());\n }\n this.element.detach();\n this.trigger(INIT, { layout: this });\n },\n _locate: function (selectors) {\n return this.options.$angular ? directiveSelector(selectors) : roleSelector(selectors);\n },\n options: {\n name: 'Layout',\n id: null,\n platform: null\n },\n events: [\n INIT,\n SHOW,\n HIDE\n ],\n setup: function (view) {\n if (!view.header[0]) {\n view.header = this.header;\n }\n if (!view.footer[0]) {\n view.footer = this.footer;\n }\n },\n detach: function (view) {\n var that = this;\n if (view.header === that.header && that.header[0]) {\n view.element.prepend(that.header.detach()[0].cloneNode(true));\n }\n if (view.footer === that.footer && that.footer.length) {\n view.element.append(that.footer.detach()[0].cloneNode(true));\n }\n },\n attach: function (view) {\n var that = this, previousView = that.currentView;\n if (previousView) {\n that.detach(previousView);\n }\n if (view.header === that.header) {\n that.header.detach();\n view.element.children(roleSelector('header')).remove();\n view.element.prepend(that.header);\n }\n if (view.footer === that.footer) {\n that.footer.detach();\n view.element.children(roleSelector('footer')).remove();\n view.element.append(that.footer);\n }\n that.trigger(SHOW, {\n layout: that,\n view: view\n });\n that.currentView = view;\n }\n });\n var Observable = kendo.Observable, bodyRegExp = /]*>(([\\u000a\\u000d\\u2028\\u2029]|.)*)<\\/body>/i, LOAD_START = 'loadStart', LOAD_COMPLETE = 'loadComplete', SHOW_START = 'showStart', SAME_VIEW_REQUESTED = 'sameViewRequested', VIEW_SHOW = 'viewShow', VIEW_TYPE_DETERMINED = 'viewTypeDetermined', AFTER = 'after';\n var ViewEngine = Observable.extend({\n init: function (options) {\n var that = this, views, errorMessage, container, collection;\n Observable.fn.init.call(that);\n $.extend(that, options);\n that.sandbox = $('
              ');\n container = that.container;\n views = that._hideViews(container);\n that.rootView = views.first();\n if (!that.rootView[0] && options.rootNeeded) {\n if (container[0] == kendo.mobile.application.element[0]) {\n errorMessage = 'Your kendo mobile application element does not contain any direct child elements with data-role=\"view\" attribute set. Make sure that you instantiate the mobile application using the correct container.';\n } else {\n errorMessage = 'Your pane element does not contain any direct child elements with data-role=\"view\" attribute set.';\n }\n throw new Error(errorMessage);\n }\n that.layouts = {};\n that.viewContainer = new kendo.ViewContainer(that.container);\n that.viewContainer.bind('accepted', function (e) {\n e.view.params = that.params;\n });\n that.viewContainer.bind('complete', function (e) {\n that.trigger(VIEW_SHOW, { view: e.view });\n });\n that.viewContainer.bind(AFTER, function () {\n that.trigger(AFTER);\n });\n this.getLayoutProxy = $.proxy(this, '_getLayout');\n that._setupLayouts(container);\n collection = container.children(that._locate('modalview drawer'));\n if (that.$angular) {\n that.$angular[0].viewOptions = {\n defaultTransition: that.transition,\n loader: that.loader,\n container: that.container,\n getLayout: that.getLayoutProxy\n };\n collection.each(function (idx, element) {\n compileMobileDirective($(element), options.$angular[0]);\n });\n } else {\n initWidgets(collection);\n }\n this.bind(this.events, options);\n },\n events: [\n SHOW_START,\n AFTER,\n VIEW_SHOW,\n LOAD_START,\n LOAD_COMPLETE,\n SAME_VIEW_REQUESTED,\n VIEW_TYPE_DETERMINED\n ],\n destroy: function () {\n kendo.destroy(this.container);\n for (var id in this.layouts) {\n this.layouts[id].destroy();\n }\n },\n view: function () {\n return this.viewContainer.view;\n },\n showView: function (url, transition, params) {\n url = url.replace(new RegExp('^' + this.remoteViewURLPrefix), '');\n if (url === '' && this.remoteViewURLPrefix) {\n url = '/';\n }\n if (url.replace(/^#/, '') === this.url) {\n this.trigger(SAME_VIEW_REQUESTED);\n return false;\n }\n this.trigger(SHOW_START);\n var that = this, showClosure = function (view) {\n return that.viewContainer.show(view, transition, url);\n }, element = that._findViewElement(url), view = kendo.widgetInstance(element);\n that.url = url.replace(/^#/, '');\n that.params = params;\n if (view && view.reload) {\n view.purge();\n element = [];\n }\n this.trigger(VIEW_TYPE_DETERMINED, {\n remote: element.length === 0,\n url: url\n });\n if (element[0]) {\n if (!view) {\n view = that._createView(element);\n }\n return showClosure(view);\n } else {\n if (this.serverNavigation) {\n location.href = url;\n } else {\n that._loadView(url, showClosure);\n }\n return true;\n }\n },\n append: function (html, url) {\n var sandbox = this.sandbox, urlPath = (url || '').split('?')[0], container = this.container, views, modalViews, view;\n if (bodyRegExp.test(html)) {\n html = RegExp.$1;\n }\n sandbox[0].innerHTML = html;\n container.append(sandbox.children('script, style'));\n views = this._hideViews(sandbox);\n view = views.first();\n if (!view.length) {\n views = view = sandbox.wrapInner('
              ').children();\n }\n if (urlPath) {\n view.hide().attr(attr('url'), urlPath);\n }\n this._setupLayouts(sandbox);\n modalViews = sandbox.children(this._locate('modalview drawer'));\n container.append(sandbox.children(this._locate('layout modalview drawer')).add(views));\n initWidgets(modalViews);\n return this._createView(view);\n },\n _locate: function (selectors) {\n return this.$angular ? directiveSelector(selectors) : roleSelector(selectors);\n },\n _findViewElement: function (url) {\n var element, urlPath = url.split('?')[0];\n if (!urlPath) {\n return this.rootView;\n }\n element = this.container.children('[' + attr('url') + '=\\'' + urlPath + '\\']');\n if (!element[0] && urlPath.indexOf('/') === -1) {\n element = this.container.children(urlPath.charAt(0) === '#' ? urlPath : '#' + urlPath);\n }\n return element;\n },\n _createView: function (element) {\n if (this.$angular) {\n return compileMobileDirective(element, this.$angular[0]);\n } else {\n return kendo.initWidget(element, {\n defaultTransition: this.transition,\n loader: this.loader,\n container: this.container,\n getLayout: this.getLayoutProxy,\n modelScope: this.modelScope,\n reload: attrValue(element, 'reload')\n }, ui.roles);\n }\n },\n _getLayout: function (name) {\n if (name === '') {\n return null;\n }\n return name ? this.layouts[name] : this.layouts[this.layout];\n },\n _loadView: function (url, callback) {\n if (this._xhr) {\n this._xhr.abort();\n }\n this.trigger(LOAD_START);\n this._xhr = $.get(kendo.absoluteURL(url, this.remoteViewURLPrefix), 'html').always($.proxy(this, '_xhrComplete', callback, url));\n },\n _xhrComplete: function (callback, url, response) {\n var success = true;\n if (typeof response === 'object') {\n if (response.status === 0) {\n if (response.responseText && response.responseText.length > 0) {\n success = true;\n response = response.responseText;\n } else {\n return;\n }\n }\n }\n this.trigger(LOAD_COMPLETE);\n if (success) {\n callback(this.append(response, url));\n }\n },\n _hideViews: function (container) {\n return container.children(this._locate('view splitview')).hide();\n },\n _setupLayouts: function (element) {\n var that = this, layout;\n element.children(that._locate('layout')).each(function () {\n if (that.$angular) {\n layout = compileMobileDirective($(this), that.$angular[0]);\n } else {\n layout = kendo.initWidget($(this), {}, ui.roles);\n }\n var platform = layout.options.platform;\n if (!platform || platform === mobile.application.os.name) {\n that.layouts[layout.options.id] = layout;\n } else {\n layout.destroy();\n }\n });\n }\n });\n kendo.mobile.ViewEngine = ViewEngine;\n ui.plugin(View);\n ui.plugin(Layout);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.mobile.loader', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'mobile.loader',\n name: 'Loader',\n category: 'mobile',\n description: 'Mobile Loader',\n depends: ['core'],\n hidden: true\n };\n (function ($, undefined) {\n var kendo = window.kendo, ui = kendo.mobile.ui, Widget = ui.Widget, CAPTURE_EVENTS = $.map(kendo.eventMap, function (value) {\n return value;\n }).join(' ').split(' ');\n var Loader = Widget.extend({\n init: function (container, options) {\n var that = this, element = $('
              ');\n Widget.fn.init.call(that, element, options);\n that.container = container;\n that.captureEvents = false;\n that._attachCapture();\n element.append(that.options.loading).hide().appendTo(container);\n },\n options: {\n name: 'Loader',\n loading: '

              Loading...

              ',\n timeout: 100\n },\n show: function () {\n var that = this;\n clearTimeout(that._loading);\n if (that.options.loading === false) {\n return;\n }\n that.captureEvents = true;\n that._loading = setTimeout(function () {\n that.element.show();\n }, that.options.timeout);\n },\n hide: function () {\n this.captureEvents = false;\n clearTimeout(this._loading);\n this.element.hide();\n },\n changeMessage: function (message) {\n this.options.loading = message;\n this.element.find('>h1').html(message);\n },\n transition: function () {\n this.captureEvents = true;\n this.container.css('pointer-events', 'none');\n },\n transitionDone: function () {\n this.captureEvents = false;\n this.container.css('pointer-events', '');\n },\n _attachCapture: function () {\n var that = this;\n that.captureEvents = false;\n function capture(e) {\n if (that.captureEvents) {\n e.preventDefault();\n }\n }\n for (var i = 0; i < CAPTURE_EVENTS.length; i++) {\n that.container[0].addEventListener(CAPTURE_EVENTS[i], capture, true);\n }\n }\n });\n ui.plugin(Loader);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.mobile.pane', [\n 'kendo.mobile.view',\n 'kendo.mobile.loader'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'mobile.pane',\n name: 'Pane',\n category: 'mobile',\n description: 'Mobile Pane',\n depends: [\n 'mobile.view',\n 'mobile.loader'\n ],\n hidden: true\n };\n (function ($, undefined) {\n var kendo = window.kendo, mobile = kendo.mobile, roleSelector = kendo.roleSelector, ui = mobile.ui, Widget = ui.Widget, ViewEngine = mobile.ViewEngine, View = ui.View, Loader = mobile.ui.Loader, EXTERNAL = 'external', HREF = 'href', DUMMY_HREF = '#!', NAVIGATE = 'navigate', VIEW_SHOW = 'viewShow', SAME_VIEW_REQUESTED = 'sameViewRequested', OS = kendo.support.mobileOS, SKIP_TRANSITION_ON_BACK_BUTTON = OS.ios && !OS.appMode && OS.flatVersion >= 700, WIDGET_RELS = /popover|actionsheet|modalview|drawer/, BACK = '#:back', attrValue = kendo.attrValue;\n var Pane = Widget.extend({\n init: function (element, options) {\n var that = this;\n Widget.fn.init.call(that, element, options);\n options = that.options;\n element = that.element;\n element.addClass('km-pane');\n if (that.options.collapsible) {\n element.addClass('km-collapsible-pane');\n }\n this.history = [];\n this.historyCallback = function (url, params, backButtonPressed) {\n var transition = that.transition;\n that.transition = null;\n if (SKIP_TRANSITION_ON_BACK_BUTTON && backButtonPressed) {\n transition = 'none';\n }\n return that.viewEngine.showView(url, transition, params);\n };\n this._historyNavigate = function (url) {\n if (url === BACK) {\n if (that.history.length === 1) {\n return;\n }\n that.history.pop();\n url = that.history[that.history.length - 1];\n } else {\n that.history.push(url);\n }\n that.historyCallback(url, kendo.parseQueryStringParams(url));\n };\n this._historyReplace = function (url) {\n var params = kendo.parseQueryStringParams(url);\n that.history[that.history.length - 1] = url;\n that.historyCallback(url, params);\n };\n that.loader = new Loader(element, { loading: that.options.loading });\n that.viewEngine = new ViewEngine({\n container: element,\n transition: options.transition,\n modelScope: options.modelScope,\n rootNeeded: !options.initial,\n serverNavigation: options.serverNavigation,\n remoteViewURLPrefix: options.root || '',\n layout: options.layout,\n $angular: options.$angular,\n loader: that.loader,\n showStart: function () {\n that.loader.transition();\n that.closeActiveDialogs();\n },\n after: function () {\n that.loader.transitionDone();\n },\n viewShow: function (e) {\n that.trigger(VIEW_SHOW, e);\n },\n loadStart: function () {\n that.loader.show();\n },\n loadComplete: function () {\n that.loader.hide();\n },\n sameViewRequested: function () {\n that.trigger(SAME_VIEW_REQUESTED);\n },\n viewTypeDetermined: function (e) {\n if (!e.remote || !that.options.serverNavigation) {\n that.trigger(NAVIGATE, { url: e.url });\n }\n }\n });\n this._setPortraitWidth();\n kendo.onResize(function () {\n that._setPortraitWidth();\n });\n that._setupAppLinks();\n },\n closeActiveDialogs: function () {\n var dialogs = this.element.find(roleSelector('actionsheet popover modalview')).filter(':visible');\n dialogs.each(function () {\n kendo.widgetInstance($(this), ui).close();\n });\n },\n navigateToInitial: function () {\n var initial = this.options.initial;\n if (initial) {\n this.navigate(initial);\n }\n return initial;\n },\n options: {\n name: 'Pane',\n portraitWidth: '',\n transition: '',\n layout: '',\n collapsible: false,\n initial: null,\n modelScope: window,\n loading: '

              Loading...

              '\n },\n events: [\n NAVIGATE,\n VIEW_SHOW,\n SAME_VIEW_REQUESTED\n ],\n append: function (html) {\n return this.viewEngine.append(html);\n },\n destroy: function () {\n Widget.fn.destroy.call(this);\n this.viewEngine.destroy();\n this.userEvents.destroy();\n },\n navigate: function (url, transition) {\n if (url instanceof View) {\n url = url.id;\n }\n this.transition = transition;\n this._historyNavigate(url);\n },\n replace: function (url, transition) {\n if (url instanceof View) {\n url = url.id;\n }\n this.transition = transition;\n this._historyReplace(url);\n },\n bindToRouter: function (router) {\n var that = this, history = this.history, viewEngine = this.viewEngine;\n router.bind('init', function (e) {\n var url = e.url, attrUrl = router.pushState ? url : '/';\n viewEngine.rootView.attr(kendo.attr('url'), attrUrl);\n var length = history.length;\n if (url === '/' && length) {\n router.navigate(history[length - 1], true);\n e.preventDefault();\n }\n });\n router.bind('routeMissing', function (e) {\n if (!that.historyCallback(e.url, e.params, e.backButtonPressed)) {\n e.preventDefault();\n }\n });\n router.bind('same', function () {\n that.trigger(SAME_VIEW_REQUESTED);\n });\n that._historyNavigate = function (url) {\n router.navigate(url);\n };\n that._historyReplace = function (url) {\n router.replace(url);\n };\n },\n hideLoading: function () {\n this.loader.hide();\n },\n showLoading: function () {\n this.loader.show();\n },\n changeLoadingMessage: function (message) {\n this.loader.changeMessage(message);\n },\n view: function () {\n return this.viewEngine.view();\n },\n _setPortraitWidth: function () {\n var width, portraitWidth = this.options.portraitWidth;\n if (portraitWidth) {\n width = kendo.mobile.application.element.is('.km-vertical') ? portraitWidth : 'auto';\n this.element.css('width', width);\n }\n },\n _setupAppLinks: function () {\n var that = this, linkRoles = 'tab', pressedButtonSelector = '[data-' + kendo.ns + 'navigate-on-press]', buttonSelectors = $.map([\n 'button',\n 'backbutton',\n 'detailbutton',\n 'listview-link'\n ], function (role) {\n return roleSelector(role) + ':not(' + pressedButtonSelector + ')';\n }).join(',');\n this.element.handler(this).on('down', roleSelector(linkRoles) + ',' + pressedButtonSelector, '_mouseup').on('click', roleSelector(linkRoles) + ',' + buttonSelectors + ',' + pressedButtonSelector, '_appLinkClick');\n this.userEvents = new kendo.UserEvents(this.element, {\n fastTap: true,\n filter: buttonSelectors,\n tap: function (e) {\n e.event.currentTarget = e.touch.currentTarget;\n that._mouseup(e.event);\n }\n });\n this.element.css('-ms-touch-action', '');\n },\n _appLinkClick: function (e) {\n var href = $(e.currentTarget).attr('href');\n var remote = href && href[0] !== '#' && this.options.serverNavigation;\n if (!remote && attrValue($(e.currentTarget), 'rel') != EXTERNAL) {\n e.preventDefault();\n }\n },\n _mouseup: function (e) {\n if (e.which > 1 || e.isDefaultPrevented()) {\n return;\n }\n var pane = this, link = $(e.currentTarget), transition = attrValue(link, 'transition'), rel = attrValue(link, 'rel') || '', target = attrValue(link, 'target'), href = link.attr(HREF), delayedTouchEnd = SKIP_TRANSITION_ON_BACK_BUTTON && link[0].offsetHeight === 0, remote = href && href[0] !== '#' && this.options.serverNavigation;\n if (delayedTouchEnd || remote || rel === EXTERNAL || typeof href === 'undefined' || href === DUMMY_HREF) {\n return;\n }\n link.attr(HREF, DUMMY_HREF);\n setTimeout(function () {\n link.attr(HREF, href);\n });\n if (rel.match(WIDGET_RELS)) {\n kendo.widgetInstance($(href), ui).openFor(link);\n if (rel === 'actionsheet' || rel === 'drawer') {\n e.stopPropagation();\n }\n } else {\n if (target === '_top') {\n pane = mobile.application.pane;\n } else if (target) {\n pane = $('#' + target).data('kendoMobilePane');\n }\n pane.navigate(href, transition);\n }\n e.preventDefault();\n }\n });\n Pane.wrap = function (element) {\n if (!element.is(roleSelector('view'))) {\n element = element.wrap('
              ').parent();\n }\n var paneContainer = element.wrap('
              ').parent(), pane = new Pane(paneContainer);\n pane.navigate('');\n return pane;\n };\n ui.plugin(Pane);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.mobile.popover', [\n 'kendo.popup',\n 'kendo.mobile.pane'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'mobile.popover',\n name: 'PopOver',\n category: 'mobile',\n description: 'The mobile PopOver widget represents a transient view which is displayed when the user taps on a navigational widget or area on the screen. ',\n depends: [\n 'popup',\n 'mobile.pane'\n ]\n };\n (function ($, undefined) {\n var kendo = window.kendo, mobile = kendo.mobile, ui = mobile.ui, HIDE = 'hide', OPEN = 'open', CLOSE = 'close', WRAPPER = '
              ', ARROW = '
              ', OVERLAY = '
              ', DIRECTION_CLASSES = 'km-up km-down km-left km-right', Widget = ui.Widget, DIRECTIONS = {\n 'down': {\n origin: 'bottom center',\n position: 'top center'\n },\n 'up': {\n origin: 'top center',\n position: 'bottom center'\n },\n 'left': {\n origin: 'center left',\n position: 'center right',\n collision: 'fit flip'\n },\n 'right': {\n origin: 'center right',\n position: 'center left',\n collision: 'fit flip'\n }\n }, ANIMATION = {\n animation: {\n open: {\n effects: 'fade:in',\n duration: 0\n },\n close: {\n effects: 'fade:out',\n duration: 400\n }\n }\n }, DIMENSIONS = {\n 'horizontal': {\n offset: 'top',\n size: 'height'\n },\n 'vertical': {\n offset: 'left',\n size: 'width'\n }\n }, REVERSE = {\n 'up': 'down',\n 'down': 'up',\n 'left': 'right',\n 'right': 'left'\n };\n var Popup = Widget.extend({\n init: function (element, options) {\n var that = this, containerPopup = element.closest('.km-modalview-wrapper'), viewport = element.closest('.km-root').children('.km-pane').first(), container = containerPopup[0] ? containerPopup : viewport, popupOptions, axis;\n if (options.viewport) {\n viewport = options.viewport;\n } else if (!viewport[0]) {\n viewport = window;\n }\n if (options.container) {\n container = options.container;\n } else if (!container[0]) {\n container = document.body;\n }\n popupOptions = {\n viewport: viewport,\n copyAnchorStyles: false,\n autosize: true,\n open: function () {\n that.overlay.show();\n },\n activate: $.proxy(that._activate, that),\n deactivate: function () {\n that.overlay.hide();\n if (!that._apiCall) {\n that.trigger(HIDE);\n }\n that._apiCall = false;\n }\n };\n Widget.fn.init.call(that, element, options);\n element = that.element;\n options = that.options;\n element.wrap(WRAPPER).addClass('km-popup').show();\n axis = that.options.direction.match(/left|right/) ? 'horizontal' : 'vertical';\n that.dimensions = DIMENSIONS[axis];\n that.wrapper = element.parent().css({\n width: options.width,\n height: options.height\n }).addClass('km-popup-wrapper km-' + options.direction).hide();\n that.arrow = $(ARROW).prependTo(that.wrapper).hide();\n that.overlay = $(OVERLAY).appendTo(container).hide();\n popupOptions.appendTo = that.overlay;\n if (options.className) {\n that.overlay.addClass(options.className);\n }\n that.popup = new kendo.ui.Popup(that.wrapper, $.extend(true, popupOptions, ANIMATION, DIRECTIONS[options.direction]));\n },\n options: {\n name: 'Popup',\n width: 240,\n height: '',\n direction: 'down',\n container: null,\n viewport: null\n },\n events: [HIDE],\n show: function (target) {\n this.popup.options.anchor = $(target);\n this.popup.open();\n },\n hide: function () {\n this._apiCall = true;\n this.popup.close();\n },\n destroy: function () {\n Widget.fn.destroy.call(this);\n this.popup.destroy();\n this.overlay.remove();\n },\n target: function () {\n return this.popup.options.anchor;\n },\n _activate: function () {\n var that = this, direction = that.options.direction, dimensions = that.dimensions, offset = dimensions.offset, popup = that.popup, anchor = popup.options.anchor, anchorOffset = $(anchor).offset(), elementOffset = $(popup.element).offset(), cssClass = popup.flipped ? REVERSE[direction] : direction, min = that.arrow[dimensions.size]() * 2, max = that.element[dimensions.size]() - that.arrow[dimensions.size](), size = $(anchor)[dimensions.size](), offsetAmount = anchorOffset[offset] - elementOffset[offset] + size / 2;\n if (offsetAmount < min) {\n offsetAmount = min;\n }\n if (offsetAmount > max) {\n offsetAmount = max;\n }\n that.wrapper.removeClass(DIRECTION_CLASSES).addClass('km-' + cssClass);\n that.arrow.css(offset, offsetAmount).show();\n }\n });\n var PopOver = Widget.extend({\n init: function (element, options) {\n var that = this, popupOptions;\n that.initialOpen = false;\n Widget.fn.init.call(that, element, options);\n popupOptions = $.extend({\n className: 'km-popover-root',\n hide: function () {\n that.trigger(CLOSE);\n }\n }, this.options.popup);\n that.popup = new Popup(that.element, popupOptions);\n that.popup.overlay.on('move', function (e) {\n if (e.target == that.popup.overlay[0]) {\n e.preventDefault();\n }\n });\n that.pane = new ui.Pane(that.element, $.extend(this.options.pane, { $angular: this.options.$angular }));\n kendo.notify(that, ui);\n },\n options: {\n name: 'PopOver',\n popup: {},\n pane: {}\n },\n events: [\n OPEN,\n CLOSE\n ],\n open: function (target) {\n this.popup.show(target);\n if (!this.initialOpen) {\n if (!this.pane.navigateToInitial()) {\n this.pane.navigate('');\n }\n this.popup.popup._position();\n this.initialOpen = true;\n } else {\n this.pane.view()._invokeNgController();\n }\n },\n openFor: function (target) {\n this.open(target);\n this.trigger(OPEN, { target: this.popup.target() });\n },\n close: function () {\n this.popup.hide();\n },\n destroy: function () {\n Widget.fn.destroy.call(this);\n this.pane.destroy();\n this.popup.destroy();\n kendo.destroy(this.element);\n }\n });\n ui.plugin(Popup);\n ui.plugin(PopOver);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.mobile.shim', ['kendo.popup'], f);\n}(function () {\n var __meta__ = {\n id: 'mobile.shim',\n name: 'Shim',\n category: 'mobile',\n description: 'Mobile Shim',\n depends: ['popup'],\n hidden: true\n };\n (function ($, undefined) {\n var kendo = window.kendo, ui = kendo.mobile.ui, Popup = kendo.ui.Popup, SHIM = '
              ', HIDE = 'hide', Widget = ui.Widget;\n var Shim = Widget.extend({\n init: function (element, options) {\n var that = this, app = kendo.mobile.application, os = kendo.support.mobileOS, osname = app ? app.os.name : os ? os.name : 'ios', ioswp = osname === 'ios' || osname === 'wp' || (app ? app.os.skin : false), bb = osname === 'blackberry', align = options.align || (ioswp ? 'bottom center' : bb ? 'center right' : 'center center'), position = options.position || (ioswp ? 'bottom center' : bb ? 'center right' : 'center center'), effect = options.effect || (ioswp ? 'slideIn:up' : bb ? 'slideIn:left' : 'fade:in'), shim = $(SHIM).handler(that).hide();\n Widget.fn.init.call(that, element, options);\n that.shim = shim;\n element = that.element;\n options = that.options;\n if (options.className) {\n that.shim.addClass(options.className);\n }\n if (!options.modal) {\n that.shim.on('down', '_hide');\n }\n (app ? app.element : $(document.body)).append(shim);\n that.popup = new Popup(that.element, {\n anchor: shim,\n modal: true,\n appendTo: shim,\n origin: align,\n position: position,\n animation: {\n open: {\n effects: effect,\n duration: options.duration\n },\n close: { duration: options.duration }\n },\n close: function (e) {\n var prevented = false;\n if (!that._apiCall) {\n prevented = that.trigger(HIDE);\n }\n if (prevented) {\n e.preventDefault();\n }\n that._apiCall = false;\n },\n deactivate: function () {\n shim.hide();\n },\n open: function () {\n shim.show();\n }\n });\n kendo.notify(that);\n },\n events: [HIDE],\n options: {\n name: 'Shim',\n modal: false,\n align: undefined,\n position: undefined,\n effect: undefined,\n duration: 200\n },\n show: function () {\n this.popup.open();\n },\n hide: function () {\n this._apiCall = true;\n this.popup.close();\n },\n destroy: function () {\n Widget.fn.destroy.call(this);\n this.shim.kendoDestroy();\n this.popup.destroy();\n this.shim.remove();\n },\n _hide: function (e) {\n if (!e || !$.contains(this.shim.children().children('.k-popup')[0], e.target)) {\n this.popup.close();\n }\n }\n });\n ui.plugin(Shim);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.mobile.modalview', [\n 'kendo.mobile.shim',\n 'kendo.mobile.view'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'mobile.modalview',\n name: 'ModalView',\n category: 'mobile',\n description: 'The Kendo ModalView is used to present self-contained functionality in the context of the current task.',\n depends: [\n 'mobile.shim',\n 'mobile.view'\n ]\n };\n (function ($, undefined) {\n var kendo = window.kendo, ui = kendo.mobile.ui, Shim = ui.Shim, Widget = ui.Widget, BEFORE_OPEN = 'beforeOpen', OPEN = 'open', CLOSE = 'close', INIT = 'init', WRAP = '
              ';\n var ModalView = ui.View.extend({\n init: function (element, options) {\n var that = this;\n Widget.fn.init.call(that, element, options);\n that._id();\n that._wrap();\n that._shim();\n if (!this.options.$angular) {\n that._layout();\n that._scroller();\n that._model();\n }\n that.element.css('display', '');\n that.trigger(INIT);\n },\n events: [\n INIT,\n BEFORE_OPEN,\n OPEN,\n CLOSE\n ],\n options: {\n name: 'ModalView',\n modal: true,\n width: null,\n height: null\n },\n destroy: function () {\n Widget.fn.destroy.call(this);\n this.shim.destroy();\n },\n open: function (target) {\n var that = this;\n that.target = $(target);\n that.shim.show();\n that._invokeNgController();\n that.trigger('show', { view: that });\n },\n openFor: function (target) {\n if (!this.trigger(BEFORE_OPEN, { target: target })) {\n this.open(target);\n this.trigger(OPEN, { target: target });\n }\n },\n close: function () {\n if (this.element.is(':visible') && !this.trigger(CLOSE)) {\n this.shim.hide();\n }\n },\n _wrap: function () {\n var that = this, element = that.element, options = that.options, width, height;\n width = element[0].style.width || 'auto';\n height = element[0].style.height || 'auto';\n element.addClass('km-modalview').wrap(WRAP);\n that.wrapper = element.parent().css({\n width: options.width || width || 300,\n height: options.height || height || 300\n }).addClass(height == 'auto' ? ' km-auto-height' : '');\n element.css({\n width: '',\n height: ''\n });\n },\n _shim: function () {\n var that = this;\n that.shim = new Shim(that.wrapper, {\n modal: that.options.modal,\n position: 'center center',\n align: 'center center',\n effect: 'fade:in',\n className: 'km-modalview-root',\n hide: function (e) {\n if (that.trigger(CLOSE)) {\n e.preventDefault();\n }\n }\n });\n }\n });\n ui.plugin(ModalView);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.mobile.drawer', [\n 'kendo.mobile.view',\n 'kendo.userevents'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'mobile.drawer',\n name: 'Drawer',\n category: 'mobile',\n description: 'The Kendo Mobile Drawer widget provides slide to reveal global application toolbox',\n depends: [\n 'mobile.view',\n 'userevents'\n ]\n };\n (function ($, undefined) {\n var kendo = window.kendo, mobile = kendo.mobile, os = kendo.support.mobileOS, Transition = kendo.effects.Transition, roleSelector = kendo.roleSelector, AXIS = 'x', ui = mobile.ui, SWIPE_TO_OPEN = !(os.ios && os.majorVersion == 7 && !os.appMode), BEFORE_SHOW = 'beforeShow', INIT = 'init', SHOW = 'show', HIDE = 'hide', AFTER_HIDE = 'afterHide', NULL_VIEW = { enable: $.noop };\n var Drawer = ui.View.extend({\n init: function (element, options) {\n $(element).parent().prepend(element);\n mobile.ui.Widget.fn.init.call(this, element, options);\n if (!this.options.$angular) {\n this._layout();\n this._scroller();\n }\n this._model();\n var pane = this.element.closest(roleSelector('pane')).data('kendoMobilePane'), userEvents;\n if (pane) {\n this.pane = pane;\n this.pane.bind('viewShow', function (e) {\n drawer._viewShow(e);\n });\n this.pane.bind('sameViewRequested', function () {\n drawer.hide();\n });\n userEvents = this.userEvents = new kendo.UserEvents(pane.element, {\n fastTap: true,\n filter: roleSelector('view splitview'),\n allowSelection: true\n });\n } else {\n this.currentView = NULL_VIEW;\n var container = $(this.options.container);\n if (!container) {\n throw new Error('The drawer needs a container configuration option set.');\n }\n userEvents = this.userEvents = new kendo.UserEvents(container, {\n fastTap: true,\n allowSelection: true\n });\n this._attachTransition(container);\n }\n var drawer = this;\n var hide = function (e) {\n if (drawer.visible) {\n drawer.hide();\n e.preventDefault();\n }\n };\n if (this.options.swipeToOpen && SWIPE_TO_OPEN) {\n userEvents.bind('press', function () {\n drawer.transition.cancel();\n });\n userEvents.bind('start', function (e) {\n drawer._start(e);\n });\n userEvents.bind('move', function (e) {\n drawer._update(e);\n });\n userEvents.bind('end', function (e) {\n drawer._end(e);\n });\n userEvents.bind('tap', hide);\n } else {\n userEvents.bind('press', hide);\n }\n this.leftPositioned = this.options.position === 'left';\n this.visible = false;\n this.element.hide().addClass('km-drawer').addClass(this.leftPositioned ? 'km-left-drawer' : 'km-right-drawer');\n this.trigger(INIT);\n },\n options: {\n name: 'Drawer',\n position: 'left',\n views: [],\n swipeToOpenViews: [],\n swipeToOpen: true,\n title: '',\n container: null\n },\n events: [\n BEFORE_SHOW,\n HIDE,\n AFTER_HIDE,\n INIT,\n SHOW\n ],\n show: function () {\n if (this._activate()) {\n this._show();\n }\n },\n hide: function () {\n if (!this.currentView) {\n return;\n }\n this.currentView.enable();\n Drawer.current = null;\n this._moveViewTo(0);\n this.trigger(HIDE, { view: this });\n },\n openFor: function () {\n if (this.visible) {\n this.hide();\n } else {\n this.show();\n }\n },\n destroy: function () {\n ui.View.fn.destroy.call(this);\n this.userEvents.destroy();\n },\n _activate: function () {\n if (this.visible) {\n return true;\n }\n var visibleOnCurrentView = this._currentViewIncludedIn(this.options.views);\n if (!visibleOnCurrentView || this.trigger(BEFORE_SHOW, { view: this })) {\n return false;\n }\n this._setAsCurrent();\n this.element.show();\n this.trigger(SHOW, { view: this });\n this._invokeNgController();\n return true;\n },\n _currentViewIncludedIn: function (views) {\n if (!this.pane || !views.length) {\n return true;\n }\n var view = this.pane.view();\n return $.inArray(view.id.replace('#', ''), views) > -1 || $.inArray(view.element.attr('id'), views) > -1;\n },\n _show: function () {\n this.currentView.enable(false);\n this.visible = true;\n var offset = this.element.width();\n if (!this.leftPositioned) {\n offset = -offset;\n }\n this._moveViewTo(offset);\n },\n _setAsCurrent: function () {\n if (Drawer.last !== this) {\n if (Drawer.last) {\n Drawer.last.element.hide();\n }\n this.element.show();\n }\n Drawer.last = this;\n Drawer.current = this;\n },\n _moveViewTo: function (offset) {\n this.userEvents.cancel();\n this.transition.moveTo({\n location: offset,\n duration: 400,\n ease: Transition.easeOutExpo\n });\n },\n _viewShow: function (e) {\n if (this.currentView) {\n this.currentView.enable();\n }\n if (this.currentView === e.view) {\n this.hide();\n return;\n }\n this.currentView = e.view;\n this._attachTransition(e.view.element);\n },\n _attachTransition: function (element) {\n var that = this, movable = this.movable, currentOffset = movable && movable.x;\n if (this.transition) {\n this.transition.cancel();\n this.movable.moveAxis('x', 0);\n }\n movable = this.movable = new kendo.ui.Movable(element);\n this.transition = new Transition({\n axis: AXIS,\n movable: this.movable,\n onEnd: function () {\n if (movable[AXIS] === 0) {\n element[0].style.cssText = '';\n that.element.hide();\n that.trigger(AFTER_HIDE);\n that.visible = false;\n }\n }\n });\n if (currentOffset) {\n element.addClass('k-fx-hidden');\n kendo.animationFrame(function () {\n element.removeClass('k-fx-hidden');\n that.movable.moveAxis(AXIS, currentOffset);\n that.hide();\n });\n }\n },\n _start: function (e) {\n var userEvents = e.sender;\n if (Math.abs(e.x.velocity) < Math.abs(e.y.velocity) || kendo.triggeredByInput(e.event) || !this._currentViewIncludedIn(this.options.swipeToOpenViews)) {\n userEvents.cancel();\n return;\n }\n var leftPositioned = this.leftPositioned, visible = this.visible, canMoveLeft = leftPositioned && visible || !leftPositioned && !Drawer.current, canMoveRight = !leftPositioned && visible || leftPositioned && !Drawer.current, leftSwipe = e.x.velocity < 0;\n if (canMoveLeft && leftSwipe || canMoveRight && !leftSwipe) {\n if (this._activate()) {\n userEvents.capture();\n return;\n }\n }\n userEvents.cancel();\n },\n _update: function (e) {\n var movable = this.movable, newPosition = movable.x + e.x.delta, limitedPosition;\n if (this.leftPositioned) {\n limitedPosition = Math.min(Math.max(0, newPosition), this.element.width());\n } else {\n limitedPosition = Math.max(Math.min(0, newPosition), -this.element.width());\n }\n this.movable.moveAxis(AXIS, limitedPosition);\n e.event.preventDefault();\n e.event.stopPropagation();\n },\n _end: function (e) {\n var velocity = e.x.velocity, pastHalf = Math.abs(this.movable.x) > this.element.width() / 2, velocityThreshold = 0.8, shouldShow;\n if (this.leftPositioned) {\n shouldShow = velocity > -velocityThreshold && (velocity > velocityThreshold || pastHalf);\n } else {\n shouldShow = velocity < velocityThreshold && (velocity < -velocityThreshold || pastHalf);\n }\n if (shouldShow) {\n this._show();\n } else {\n this.hide();\n }\n }\n });\n ui.plugin(Drawer);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.mobile.splitview', ['kendo.mobile.pane'], f);\n}(function () {\n var __meta__ = {\n id: 'mobile.splitview',\n name: 'SplitView',\n category: 'mobile',\n description: 'The mobile SplitView is a tablet-specific view that consists of two or more mobile Pane widgets.',\n depends: ['mobile.pane']\n };\n (function ($, undefined) {\n var kendo = window.kendo, ui = kendo.mobile.ui, Widget = ui.Widget, EXPANED_PANE_SHIM = '
              ', View = ui.View;\n var SplitView = View.extend({\n init: function (element, options) {\n var that = this, pane, modalViews;\n Widget.fn.init.call(that, element, options);\n element = that.element;\n $.extend(that, options);\n that._id();\n if (!that.options.$angular) {\n that._layout();\n that._overlay();\n } else {\n that._overlay();\n }\n that._style();\n modalViews = element.children(that._locate('modalview'));\n if (!that.options.$angular) {\n kendo.mobile.init(modalViews);\n } else {\n modalViews.each(function (idx, element) {\n kendo.compileMobileDirective($(element), options.$angular[0]);\n });\n }\n that.panes = [];\n that._paramsHistory = [];\n if (!that.options.$angular) {\n that.content.children(kendo.roleSelector('pane')).each(function () {\n pane = kendo.initWidget(this, {}, ui.roles);\n that.panes.push(pane);\n });\n } else {\n that.element.children(kendo.directiveSelector('pane')).each(function () {\n pane = kendo.compileMobileDirective($(this), options.$angular[0]);\n that.panes.push(pane);\n });\n that.element.children(kendo.directiveSelector('header footer')).each(function () {\n kendo.compileMobileDirective($(this), options.$angular[0]);\n });\n }\n that.expandedPaneShim = $(EXPANED_PANE_SHIM).appendTo(that.element);\n that._shimUserEvents = new kendo.UserEvents(that.expandedPaneShim, {\n fastTap: true,\n tap: function () {\n that.collapsePanes();\n }\n });\n },\n _locate: function (selectors) {\n return this.options.$angular ? kendo.directiveSelector(selectors) : kendo.roleSelector(selectors);\n },\n options: {\n name: 'SplitView',\n style: 'horizontal'\n },\n expandPanes: function () {\n this.element.addClass('km-expanded-splitview');\n },\n collapsePanes: function () {\n this.element.removeClass('km-expanded-splitview');\n },\n _layout: function () {\n var that = this, element = that.element;\n that.transition = kendo.attrValue(element, 'transition');\n kendo.mobile.ui.View.prototype._layout.call(this);\n kendo.mobile.init(this.header.add(this.footer));\n that.element.addClass('km-splitview');\n that.content.addClass('km-split-content');\n },\n _style: function () {\n var style = this.options.style, element = this.element, styles;\n if (style) {\n styles = style.split(' ');\n $.each(styles, function () {\n element.addClass('km-split-' + this);\n });\n }\n },\n showStart: function () {\n var that = this;\n that.element.css('display', '');\n if (!that.inited) {\n that.inited = true;\n $.each(that.panes, function () {\n if (this.options.initial) {\n this.navigateToInitial();\n } else {\n this.navigate('');\n }\n });\n that.trigger('init', { view: that });\n } else {\n this._invokeNgController();\n }\n that.trigger('show', { view: that });\n }\n });\n ui.plugin(SplitView);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.mobile.application', [\n 'kendo.mobile.pane',\n 'kendo.router'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'mobile.application',\n name: 'Application',\n category: 'mobile',\n description: 'The Mobile application provides a framework to build native looking web applications on mobile devices.',\n depends: [\n 'mobile.pane',\n 'router'\n ]\n };\n (function ($, undefined) {\n var kendo = window.kendo, mobile = kendo.mobile, support = kendo.support, Widget = mobile.ui.Widget, Pane = mobile.ui.Pane, DEFAULT_OS = 'ios7', OS = support.mobileOS, BERRYPHONEGAP = OS.device == 'blackberry' && OS.flatVersion >= 600 && OS.flatVersion < 1000 && OS.appMode, FONT_SIZE_COEF = 0.93, VERTICAL = 'km-vertical', CHROME = OS.browser === 'chrome', BROKEN_WEBVIEW_RESIZE = OS.ios && OS.flatVersion >= 700 && OS.flatVersion < 800 && (OS.appMode || CHROME), INITIALLY_HORIZONTAL = Math.abs(window.orientation) / 90 == 1, HORIZONTAL = 'km-horizontal', MOBILE_PLATFORMS = {\n ios7: {\n ios: true,\n browser: 'default',\n device: 'iphone',\n flatVersion: '700',\n majorVersion: '7',\n minorVersion: '0.0',\n name: 'ios',\n tablet: false\n },\n ios: {\n ios: true,\n browser: 'default',\n device: 'iphone',\n flatVersion: '612',\n majorVersion: '6',\n minorVersion: '1.2',\n name: 'ios',\n tablet: false\n },\n android: {\n android: true,\n browser: 'default',\n device: 'android',\n flatVersion: '442',\n majorVersion: '4',\n minorVersion: '4.2',\n name: 'android',\n tablet: false\n },\n blackberry: {\n blackberry: true,\n browser: 'default',\n device: 'blackberry',\n flatVersion: '710',\n majorVersion: '7',\n minorVersion: '1.0',\n name: 'blackberry',\n tablet: false\n },\n meego: {\n meego: true,\n browser: 'default',\n device: 'meego',\n flatVersion: '850',\n majorVersion: '8',\n minorVersion: '5.0',\n name: 'meego',\n tablet: false\n },\n wp: {\n wp: true,\n browser: 'default',\n device: 'wp',\n flatVersion: '800',\n majorVersion: '8',\n minorVersion: '0.0',\n name: 'wp',\n tablet: false\n }\n }, viewportTemplate = kendo.template('', { usedWithBlock: false }), systemMeta = kendo.template(' ' + ' ' + ' ', { usedWithBlock: false }), clipTemplate = kendo.template('', { usedWithBlock: false }), ENABLE_CLIP = OS.android && OS.browser != 'chrome' || OS.blackberry, iconMeta = kendo.template('', { usedWithBlock: false }), HIDEBAR = (OS.device == 'iphone' || OS.device == 'ipod') && OS.majorVersion < 7, SUPPORT_SWIPE_TO_GO_BACK = (OS.device == 'iphone' || OS.device == 'ipod') && OS.majorVersion >= 7, HISTORY_TRANSITION = SUPPORT_SWIPE_TO_GO_BACK ? 'none' : null, BARCOMPENSATION = OS.browser == 'mobilesafari' ? 60 : 0, STATUS_BAR_HEIGHT = 20, WINDOW = $(window), SCREEN = window.screen, HEAD = $('head'), INIT = 'init', proxy = $.proxy;\n function osCssClass(os, options) {\n var classes = [];\n if (OS) {\n classes.push('km-on-' + OS.name);\n }\n if (os.skin) {\n classes.push('km-' + os.skin);\n } else {\n if (os.name == 'ios' && os.majorVersion > 6) {\n classes.push('km-ios7');\n } else {\n classes.push('km-' + os.name);\n }\n }\n if (os.name == 'ios' && os.majorVersion < 7 || os.name != 'ios') {\n classes.push('km-' + os.name + os.majorVersion);\n }\n classes.push('km-' + os.majorVersion);\n classes.push('km-m' + (os.minorVersion ? os.minorVersion[0] : 0));\n if (os.variant && (os.skin && os.skin === os.name || !os.skin || os.setDefaultPlatform === false)) {\n classes.push('km-' + (os.skin ? os.skin : os.name) + '-' + os.variant);\n }\n if (os.cordova) {\n classes.push('km-cordova');\n }\n if (os.appMode) {\n classes.push('km-app');\n } else {\n classes.push('km-web');\n }\n if (options && options.statusBarStyle) {\n classes.push('km-' + options.statusBarStyle + '-status-bar');\n }\n return classes.join(' ');\n }\n function wp8Background(os) {\n return 'km-wp-' + (os.noVariantSet ? parseInt($('
              ').css('background-color').split(',')[1], 10) === 0 ? 'dark' : 'light' : os.variant + ' km-wp-' + os.variant + '-force');\n }\n function isOrientationHorizontal(element) {\n return OS.wp ? element.css('animation-name') == '-kendo-landscape' : Math.abs(window.orientation) / 90 == 1;\n }\n function getOrientationClass(element) {\n return isOrientationHorizontal(element) ? HORIZONTAL : VERTICAL;\n }\n function setMinimumHeight(pane) {\n pane.parent().addBack().css('min-height', window.innerHeight);\n }\n function applyViewportHeight() {\n $('meta[name=viewport]').remove();\n HEAD.append(viewportTemplate({ height: ', width=device-width' + (isOrientationHorizontal() ? ', height=' + window.innerHeight + 'px' : support.mobileOS.flatVersion >= 600 && support.mobileOS.flatVersion < 700 ? ', height=' + window.innerWidth + 'px' : ', height=device-height') }));\n }\n var Application = Widget.extend({\n init: function (element, options) {\n mobile.application = this;\n $($.proxy(this, 'bootstrap', element, options));\n },\n bootstrap: function (element, options) {\n element = $(element);\n if (!element[0]) {\n element = $(document.body);\n }\n Widget.fn.init.call(this, element, options);\n this.element.removeAttr('data-' + kendo.ns + 'role');\n this._setupPlatform();\n this._attachMeta();\n this._setupElementClass();\n this._attachHideBarHandlers();\n var paneOptions = $.extend({}, this.options);\n delete paneOptions.name;\n var that = this, startHistory = function () {\n that.pane = new Pane(that.element, paneOptions);\n that.pane.navigateToInitial();\n if (that.options.updateDocumentTitle) {\n that._setupDocumentTitle();\n }\n that._startHistory();\n that.trigger(INIT);\n };\n if (this.options.$angular) {\n setTimeout(startHistory);\n } else {\n startHistory();\n }\n },\n options: {\n name: 'Application',\n hideAddressBar: true,\n browserHistory: true,\n historyTransition: HISTORY_TRANSITION,\n modelScope: window,\n statusBarStyle: 'black',\n transition: '',\n retina: false,\n platform: null,\n skin: null,\n updateDocumentTitle: true,\n useNativeScrolling: false\n },\n events: [INIT],\n navigate: function (url, transition) {\n this.pane.navigate(url, transition);\n },\n replace: function (url, transition) {\n this.pane.replace(url, transition);\n },\n scroller: function () {\n return this.view().scroller;\n },\n hideLoading: function () {\n if (this.pane) {\n this.pane.hideLoading();\n } else {\n throw new Error('The mobile application instance is not fully instantiated. Please consider activating loading in the application init event handler.');\n }\n },\n showLoading: function () {\n if (this.pane) {\n this.pane.showLoading();\n } else {\n throw new Error('The mobile application instance is not fully instantiated. Please consider activating loading in the application init event handler.');\n }\n },\n changeLoadingMessage: function (message) {\n if (this.pane) {\n this.pane.changeLoadingMessage(message);\n } else {\n throw new Error('The mobile application instance is not fully instantiated. Please consider changing the message in the application init event handler.');\n }\n },\n view: function () {\n return this.pane.view();\n },\n skin: function (skin) {\n var that = this;\n if (!arguments.length) {\n return that.options.skin;\n }\n that.options.skin = skin || '';\n that.element[0].className = 'km-pane';\n that._setupPlatform();\n that._setupElementClass();\n return that.options.skin;\n },\n destroy: function () {\n Widget.fn.destroy.call(this);\n this.pane.destroy();\n if (this.options.browserHistory) {\n this.router.destroy();\n }\n },\n _setupPlatform: function () {\n var that = this, platform = that.options.platform, skin = that.options.skin, split = [], os = OS || MOBILE_PLATFORMS[DEFAULT_OS];\n if (platform) {\n os.setDefaultPlatform = true;\n if (typeof platform === 'string') {\n split = platform.split('-');\n os = $.extend({ variant: split[1] }, os, MOBILE_PLATFORMS[split[0]]);\n } else {\n os = platform;\n }\n }\n if (skin) {\n split = skin.split('-');\n if (!OS) {\n os.setDefaultPlatform = false;\n }\n os = $.extend({}, os, {\n skin: split[0],\n variant: split[1]\n });\n }\n if (!os.variant) {\n os.noVariantSet = true;\n os.variant = 'dark';\n }\n that.os = os;\n that.osCssClass = osCssClass(that.os, that.options);\n if (os.name == 'wp') {\n if (!that.refreshBackgroundColorProxy) {\n that.refreshBackgroundColorProxy = $.proxy(function () {\n if (that.os.variant && (that.os.skin && that.os.skin === that.os.name) || !that.os.skin) {\n that.element.removeClass('km-wp-dark km-wp-light km-wp-dark-force km-wp-light-force').addClass(wp8Background(that.os));\n }\n }, that);\n }\n $(document).off('visibilitychange', that.refreshBackgroundColorProxy);\n $(document).off('resume', that.refreshBackgroundColorProxy);\n if (!os.skin) {\n that.element.parent().css('overflow', 'hidden');\n $(document).on('visibilitychange', that.refreshBackgroundColorProxy);\n $(document).on('resume', that.refreshBackgroundColorProxy);\n that.refreshBackgroundColorProxy();\n }\n }\n },\n _startHistory: function () {\n if (this.options.browserHistory) {\n this.router = new kendo.Router({\n pushState: this.options.pushState,\n root: this.options.root,\n hashBang: this.options.hashBang\n });\n this.pane.bindToRouter(this.router);\n this.router.start();\n } else {\n if (!this.options.initial) {\n this.pane.navigate('');\n }\n }\n },\n _resizeToScreenHeight: function () {\n var includeStatusBar = $('meta[name=apple-mobile-web-app-status-bar-style]').attr('content').match(/black-translucent|hidden/), element = this.element, height;\n if (CHROME) {\n height = window.innerHeight;\n } else {\n if (isOrientationHorizontal(element)) {\n if (includeStatusBar) {\n if (INITIALLY_HORIZONTAL) {\n height = SCREEN.availWidth + STATUS_BAR_HEIGHT;\n } else {\n height = SCREEN.availWidth;\n }\n } else {\n if (INITIALLY_HORIZONTAL) {\n height = SCREEN.availWidth;\n } else {\n height = SCREEN.availWidth - STATUS_BAR_HEIGHT;\n }\n }\n } else {\n if (includeStatusBar) {\n if (INITIALLY_HORIZONTAL) {\n height = SCREEN.availHeight;\n } else {\n height = SCREEN.availHeight + STATUS_BAR_HEIGHT;\n }\n } else {\n if (INITIALLY_HORIZONTAL) {\n height = SCREEN.availHeight - STATUS_BAR_HEIGHT;\n } else {\n height = SCREEN.availHeight;\n }\n }\n }\n }\n element.height(height);\n },\n _setupElementClass: function () {\n var that = this, size, element = that.element;\n element.parent().addClass('km-root km-' + (that.os.tablet ? 'tablet' : 'phone'));\n element.addClass(that.osCssClass + ' ' + getOrientationClass(element));\n if (this.options.useNativeScrolling) {\n element.parent().addClass('km-native-scrolling');\n }\n if (CHROME) {\n element.addClass('km-ios-chrome');\n }\n if (support.wpDevicePixelRatio) {\n element.parent().css('font-size', support.wpDevicePixelRatio + 'em');\n }\n if (this.options.retina) {\n element.parent().addClass('km-retina');\n element.parent().css('font-size', support.devicePixelRatio * FONT_SIZE_COEF + 'em');\n }\n if (BERRYPHONEGAP) {\n applyViewportHeight();\n }\n if (that.options.useNativeScrolling) {\n element.parent().addClass('km-native-scrolling');\n } else if (ENABLE_CLIP) {\n size = (screen.availWidth > screen.availHeight ? screen.availWidth : screen.availHeight) + 200;\n $(clipTemplate({\n width: size,\n height: size\n })).appendTo(HEAD);\n }\n if (BROKEN_WEBVIEW_RESIZE) {\n that._resizeToScreenHeight();\n }\n kendo.onResize(function () {\n element.removeClass('km-horizontal km-vertical').addClass(getOrientationClass(element));\n if (that.options.useNativeScrolling) {\n setMinimumHeight(element);\n }\n if (BROKEN_WEBVIEW_RESIZE) {\n that._resizeToScreenHeight();\n }\n if (BERRYPHONEGAP) {\n applyViewportHeight();\n }\n kendo.resize(element);\n });\n },\n _clearExistingMeta: function () {\n HEAD.find('meta').filter('[name|=\\'apple-mobile-web-app\\'],[name|=\\'msapplication-tap\\'],[name=\\'viewport\\']').remove();\n },\n _attachMeta: function () {\n var options = this.options, icon = options.icon, size;\n this._clearExistingMeta();\n if (!BERRYPHONEGAP) {\n HEAD.prepend(viewportTemplate({\n height: '',\n scale: this.options.retina ? 1 / support.devicePixelRatio : '1.0'\n }));\n }\n HEAD.prepend(systemMeta(options));\n if (icon) {\n if (typeof icon === 'string') {\n icon = { '': icon };\n }\n for (size in icon) {\n HEAD.prepend(iconMeta({\n icon: icon[size],\n size: size\n }));\n }\n }\n if (options.useNativeScrolling) {\n setMinimumHeight(this.element);\n }\n },\n _attachHideBarHandlers: function () {\n var that = this, hideBar = proxy(that, '_hideBar');\n if (support.mobileOS.appMode || !that.options.hideAddressBar || !HIDEBAR || that.options.useNativeScrolling) {\n return;\n }\n that._initialHeight = {};\n WINDOW.on('load', hideBar);\n kendo.onResize(function () {\n setTimeout(window.scrollTo, 0, 0, 1);\n });\n },\n _setupDocumentTitle: function () {\n var that = this, defaultTitle = document.title;\n that.pane.bind('viewShow', function (e) {\n var title = e.view.title;\n document.title = title !== undefined ? title : defaultTitle;\n });\n },\n _hideBar: function () {\n var that = this, element = that.element;\n element.height(kendo.support.transforms.css + 'calc(100% + ' + BARCOMPENSATION + 'px)');\n $(window).trigger(kendo.support.resize);\n }\n });\n kendo.mobile.Application = Application;\n kendo.ui.plugin(Application, kendo.mobile, 'Mobile');\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.mobile.actionsheet', [\n 'kendo.mobile.popover',\n 'kendo.mobile.shim'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'mobile.actionsheet',\n name: 'ActionSheet',\n category: 'mobile',\n description: 'The mobile ActionSheet widget displays a set of choices related to a task the user initiates.',\n depends: [\n 'mobile.popover',\n 'mobile.shim'\n ]\n };\n (function ($, undefined) {\n var kendo = window.kendo, support = kendo.support, ui = kendo.mobile.ui, Shim = ui.Shim, Popup = ui.Popup, Widget = ui.Widget, OPEN = 'open', CLOSE = 'close', COMMAND = 'command', BUTTONS = 'li>a', CONTEXT_DATA = 'actionsheetContext', WRAP = '
              ', cancelTemplate = kendo.template('
            • #:cancel#
            • ');\n var ActionSheet = Widget.extend({\n init: function (element, options) {\n var that = this, ShimClass, tablet, type, os = support.mobileOS;\n Widget.fn.init.call(that, element, options);\n options = that.options;\n type = options.type;\n element = that.element;\n if (type === 'auto') {\n tablet = os && os.tablet;\n } else {\n tablet = type === 'tablet';\n }\n ShimClass = tablet ? Popup : Shim;\n if (options.cancelTemplate) {\n cancelTemplate = kendo.template(options.cancelTemplate);\n }\n element.addClass('km-actionsheet').append(cancelTemplate({ cancel: that.options.cancel })).wrap(WRAP).on('up', BUTTONS, '_click').on('click', BUTTONS, kendo.preventDefault);\n that.view().bind('destroy', function () {\n that.destroy();\n });\n that.wrapper = element.parent().addClass(type ? ' km-actionsheet-' + type : '');\n that.shim = new ShimClass(that.wrapper, $.extend({\n modal: os.ios && os.majorVersion < 7,\n className: 'km-actionsheet-root'\n }, that.options.popup));\n that._closeProxy = $.proxy(that, '_close');\n that._shimHideProxy = $.proxy(that, '_shimHide');\n that.shim.bind('hide', that._shimHideProxy);\n if (tablet) {\n kendo.onResize(that._closeProxy);\n }\n kendo.notify(that, ui);\n },\n events: [\n OPEN,\n CLOSE,\n COMMAND\n ],\n options: {\n name: 'ActionSheet',\n cancel: 'Cancel',\n type: 'auto',\n popup: { height: 'auto' }\n },\n open: function (target, context) {\n var that = this;\n that.target = $(target);\n that.context = context;\n that.shim.show(target);\n },\n close: function () {\n this.context = this.target = null;\n this.shim.hide();\n },\n openFor: function (target) {\n var that = this, context = target.data(CONTEXT_DATA);\n that.open(target, context);\n that.trigger(OPEN, {\n target: target,\n context: context\n });\n },\n destroy: function () {\n Widget.fn.destroy.call(this);\n kendo.unbindResize(this._closeProxy);\n this.shim.destroy();\n },\n _click: function (e) {\n if (e.isDefaultPrevented()) {\n return;\n }\n var currentTarget = $(e.currentTarget);\n var action = currentTarget.data('action');\n if (action) {\n var actionData = {\n target: this.target,\n context: this.context\n }, $angular = this.options.$angular;\n if ($angular) {\n this.element.injector().get('$parse')(action)($angular[0])(actionData);\n } else {\n kendo.getter(action)(window)(actionData);\n }\n }\n this.trigger(COMMAND, {\n target: this.target,\n context: this.context,\n currentTarget: currentTarget\n });\n e.preventDefault();\n this._close();\n },\n _shimHide: function (e) {\n if (!this.trigger(CLOSE)) {\n this.context = this.target = null;\n } else {\n e.preventDefault();\n }\n },\n _close: function (e) {\n if (!this.trigger(CLOSE)) {\n this.close();\n } else {\n e.preventDefault();\n }\n }\n });\n ui.plugin(ActionSheet);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.mobile.button', ['kendo.userevents'], f);\n}(function () {\n var __meta__ = {\n id: 'mobile.button',\n name: 'Button',\n category: 'mobile',\n description: 'The Button widget navigates between mobile Application views when pressed.',\n depends: ['userevents']\n };\n (function ($, undefined) {\n var kendo = window.kendo, mobile = kendo.mobile, ui = mobile.ui, Widget = ui.Widget, support = kendo.support, os = support.mobileOS, ANDROID3UP = os.android && os.flatVersion >= 300, CLICK = 'click', DISABLED = 'disabled', DISABLEDSTATE = 'km-state-disabled';\n function highlightButton(widget, event, highlight) {\n $(event.target).closest('.km-button,.km-detail').toggleClass('km-state-active', highlight);\n if (ANDROID3UP && widget.deactivateTimeoutID) {\n clearTimeout(widget.deactivateTimeoutID);\n widget.deactivateTimeoutID = 0;\n }\n }\n function createBadge(value) {\n return $('' + value + '');\n }\n var Button = Widget.extend({\n init: function (element, options) {\n var that = this;\n Widget.fn.init.call(that, element, options);\n var useTap = that.options.clickOn === 'up';\n that._wrap();\n that._style();\n if (!useTap) {\n that.element.attr('data-navigate-on-press', true);\n }\n that.options.enable = that.options.enable && !that.element.attr(DISABLED);\n that.enable(that.options.enable);\n that._userEvents = new kendo.UserEvents(that.element, {\n allowSelection: !useTap,\n fastTap: true,\n press: function (e) {\n that._activate(e);\n },\n release: function (e) {\n highlightButton(that, e, false);\n if (!useTap) {\n e.event.stopPropagation();\n }\n }\n });\n that._userEvents.bind(useTap ? 'tap' : 'press', function (e) {\n that._release(e);\n });\n if (ANDROID3UP) {\n that.element.on('move', function (e) {\n that._timeoutDeactivate(e);\n });\n }\n },\n destroy: function () {\n Widget.fn.destroy.call(this);\n this._userEvents.destroy();\n },\n events: [CLICK],\n options: {\n name: 'Button',\n icon: '',\n style: '',\n badge: '',\n clickOn: 'up',\n enable: true\n },\n badge: function (value) {\n var badge = this.badgeElement = this.badgeElement || createBadge(value).appendTo(this.element);\n if (value || value === 0) {\n badge.html(value);\n return this;\n }\n if (value === false) {\n badge.empty().remove();\n this.badgeElement = false;\n return this;\n }\n return badge.html();\n },\n enable: function (enable) {\n var element = this.element;\n if (typeof enable == 'undefined') {\n enable = true;\n }\n this.options.enable = enable;\n if (enable) {\n element.removeAttr(DISABLED);\n } else {\n element.attr(DISABLED, DISABLED);\n }\n element.toggleClass(DISABLEDSTATE, !enable);\n },\n _timeoutDeactivate: function (e) {\n if (!this.deactivateTimeoutID) {\n this.deactivateTimeoutID = setTimeout(highlightButton, 500, this, e, false);\n }\n },\n _activate: function (e) {\n var activeElement = document.activeElement, nodeName = activeElement ? activeElement.nodeName : '';\n if (this.options.enable) {\n highlightButton(this, e, true);\n if (nodeName == 'INPUT' || nodeName == 'TEXTAREA') {\n activeElement.blur();\n }\n }\n },\n _release: function (e) {\n var that = this;\n if (e.which > 1) {\n return;\n }\n if (!that.options.enable) {\n e.preventDefault();\n return;\n }\n if (that.trigger(CLICK, {\n target: $(e.target),\n button: that.element\n })) {\n e.preventDefault();\n }\n },\n _style: function () {\n var style = this.options.style, element = this.element, styles;\n if (style) {\n styles = style.split(' ');\n $.each(styles, function () {\n element.addClass('km-' + this);\n });\n }\n },\n _wrap: function () {\n var that = this, icon = that.options.icon, badge = that.options.badge, iconSpan = '').children('span.km-text');\n }\n if (!image[0] && icon) {\n if (!span[0]) {\n iconSpan += ' km-notext';\n }\n that.iconElement = element.prepend($(iconSpan + '\" />'));\n }\n if (badge || badge === 0) {\n that.badgeElement = createBadge(badge).appendTo(element);\n }\n }\n });\n var BackButton = Button.extend({\n options: {\n name: 'BackButton',\n style: 'back'\n },\n init: function (element, options) {\n var that = this;\n Button.fn.init.call(that, element, options);\n if (typeof that.element.attr('href') === 'undefined') {\n that.element.attr('href', '#:back');\n }\n }\n });\n var DetailButton = Button.extend({\n options: {\n name: 'DetailButton',\n style: ''\n },\n init: function (element, options) {\n Button.fn.init.call(this, element, options);\n },\n _style: function () {\n var style = this.options.style + ' detail', element = this.element;\n if (style) {\n var styles = style.split(' ');\n $.each(styles, function () {\n element.addClass('km-' + this);\n });\n }\n },\n _wrap: function () {\n var that = this, icon = that.options.icon, iconSpan = ''));\n }\n }\n });\n ui.plugin(Button);\n ui.plugin(BackButton);\n ui.plugin(DetailButton);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.mobile.buttongroup', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'mobile.buttongroup',\n name: 'ButtonGroup',\n category: 'mobile',\n description: 'The Kendo mobile ButtonGroup widget is a linear set of grouped buttons.',\n depends: ['core']\n };\n (function ($, undefined) {\n var kendo = window.kendo, ui = kendo.mobile.ui, Widget = ui.Widget, ACTIVE = 'state-active', DISABLE = 'state-disabled', SELECT = 'select', SELECTOR = 'li:not(.km-' + ACTIVE + ')';\n function className(name) {\n return 'k-' + name + ' km-' + name;\n }\n function createBadge(value) {\n return $('' + value + '');\n }\n var ButtonGroup = Widget.extend({\n init: function (element, options) {\n var that = this;\n Widget.fn.init.call(that, element, options);\n that.element.addClass('km-buttongroup k-widget k-button-group').find('li').each(that._button);\n that.element.on(that.options.selectOn, SELECTOR, '_select');\n that._enable = true;\n that.select(that.options.index);\n if (!that.options.enable) {\n that._enable = false;\n that.wrapper.addClass(className(DISABLE));\n }\n },\n events: [SELECT],\n options: {\n name: 'ButtonGroup',\n selectOn: 'down',\n index: -1,\n enable: true\n },\n current: function () {\n return this.element.find('.km-' + ACTIVE);\n },\n select: function (li) {\n var that = this, index = -1;\n if (li === undefined || li === -1 || !that._enable || $(li).is('.km-' + DISABLE)) {\n return;\n }\n that.current().removeClass(className(ACTIVE));\n if (typeof li === 'number') {\n index = li;\n li = $(that.element[0].children[li]);\n } else if (li.nodeType) {\n li = $(li);\n index = li.index();\n }\n li.addClass(className(ACTIVE));\n that.selectedIndex = index;\n },\n badge: function (item, value) {\n var buttongroup = this.element, badge;\n if (!isNaN(item)) {\n item = buttongroup.children().get(item);\n }\n item = buttongroup.find(item);\n badge = $(item.children('.km-badge')[0] || createBadge(value).appendTo(item));\n if (value || value === 0) {\n badge.html(value);\n return this;\n }\n if (value === false) {\n badge.empty().remove();\n return this;\n }\n return badge.html();\n },\n enable: function (enable) {\n if (typeof enable == 'undefined') {\n enable = true;\n }\n this.wrapper.toggleClass(className(DISABLE), !enable);\n this._enable = this.options.enable = enable;\n },\n _button: function () {\n var button = $(this).addClass(className('button')), icon = kendo.attrValue(button, 'icon'), badge = kendo.attrValue(button, 'badge'), span = button.children('span'), image = button.find('img').addClass(className('image'));\n if (!span[0]) {\n span = button.wrapInner('').children('span');\n }\n span.addClass(className('text'));\n if (!image[0] && icon) {\n button.prepend($(''));\n }\n if (badge || badge === 0) {\n createBadge(badge).appendTo(button);\n }\n },\n _select: function (e) {\n if (e.which > 1 || e.isDefaultPrevented() || !this._enable) {\n return;\n }\n this.select(e.currentTarget);\n this.trigger(SELECT, { index: this.selectedIndex });\n }\n });\n ui.plugin(ButtonGroup);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.mobile.collapsible', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'mobile.collapsible',\n name: 'Collapsible',\n category: 'mobile',\n description: 'The Kendo mobile Collapsible widget provides ability for creating collapsible blocks of content.',\n depends: [\n 'core',\n 'userevents'\n ]\n };\n (function ($, undefined) {\n var kendo = window.kendo, ui = kendo.mobile.ui, Widget = ui.Widget, COLLAPSIBLE = 'km-collapsible', HEADER = 'km-collapsible-header', CONTENT = 'km-collapsible-content', INSET = 'km-collapsibleinset', HEADER_WRAPPER = '
              ', CONTENT_WRAPPER = '
              ', COLLAPSED = 'km-collapsed', EXPANDED = 'km-expanded', ANIMATED = 'km-animated', LEFT = 'left', EXAPND = 'expand', COLLAPSE = 'collapse';\n var Collapsible = Widget.extend({\n init: function (element, options) {\n var that = this, container = $(element);\n Widget.fn.init.call(that, container, options);\n container.addClass(COLLAPSIBLE);\n that._buildHeader();\n that.content = container.children().not(that.header).wrapAll(CONTENT_WRAPPER).parent();\n that._userEvents = new kendo.UserEvents(that.header, {\n fastTap: true,\n tap: function () {\n that.toggle();\n }\n });\n container.addClass(that.options.collapsed ? COLLAPSED : EXPANDED);\n if (that.options.inset) {\n container.addClass(INSET);\n }\n if (that.options.animation) {\n that.content.addClass(ANIMATED);\n that.content.height(0);\n if (that.options.collapsed) {\n that.content.hide();\n }\n } else if (that.options.collapsed) {\n that.content.hide();\n }\n },\n events: [\n EXAPND,\n COLLAPSE\n ],\n options: {\n name: 'Collapsible',\n collapsed: true,\n collapseIcon: 'arrow-n',\n expandIcon: 'arrow-s',\n iconPosition: LEFT,\n animation: true,\n inset: false\n },\n destroy: function () {\n Widget.fn.destroy.call(this);\n this._userEvents.destroy();\n },\n expand: function (instant) {\n var icon = this.options.collapseIcon, content = this.content, ios = kendo.support.mobileOS.ios;\n if (!this.trigger(EXAPND)) {\n if (icon) {\n this.header.find('.km-icon').removeClass().addClass('km-icon km-' + icon);\n }\n this.element.removeClass(COLLAPSED).addClass(EXPANDED);\n if (this.options.animation && !instant) {\n content.off('transitionend');\n content.show();\n if (ios) {\n content.removeClass(ANIMATED);\n }\n content.height(this._getContentHeight());\n if (ios) {\n content.addClass(ANIMATED);\n }\n kendo.resize(content);\n } else {\n content.show();\n }\n }\n },\n collapse: function (instant) {\n var icon = this.options.expandIcon, content = this.content;\n if (!this.trigger(COLLAPSE)) {\n if (icon) {\n this.header.find('.km-icon').removeClass().addClass('km-icon km-' + icon);\n }\n this.element.removeClass(EXPANDED).addClass(COLLAPSED);\n if (this.options.animation && !instant) {\n content.one('transitionend', function () {\n content.hide();\n });\n content.height(0);\n } else {\n content.hide();\n }\n }\n },\n toggle: function (instant) {\n if (this.isCollapsed()) {\n this.expand(instant);\n } else {\n this.collapse(instant);\n }\n },\n isCollapsed: function () {\n return this.element.hasClass(COLLAPSED);\n },\n resize: function () {\n if (!this.isCollapsed() && this.options.animation) {\n this.content.height(this._getContentHeight());\n }\n },\n _buildHeader: function () {\n var header = this.element.children(':header').wrapAll(HEADER_WRAPPER), iconSpan = $(''), icon = this.options.collapsed ? this.options.expandIcon : this.options.collapseIcon, iconPosition = this.options.iconPosition;\n if (icon) {\n header.prepend(iconSpan);\n iconSpan.addClass('km-' + icon);\n }\n this.header = header.parent();\n this.header.addClass('km-icon-' + iconPosition);\n },\n _getContentHeight: function () {\n var style = this.content.attr('style'), height;\n this.content.css({\n position: 'absolute',\n visibility: 'hidden',\n height: 'auto'\n });\n height = this.content.height();\n this.content.attr('style', style ? style : '');\n return height;\n }\n });\n ui.plugin(Collapsible);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.mobile.listview', [\n 'kendo.data',\n 'kendo.userevents',\n 'kendo.mobile.button'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'mobile.listview',\n name: 'ListView',\n category: 'mobile',\n description: 'The Kendo Mobile ListView widget is used to display flat or grouped list of items.',\n depends: [\n 'data',\n 'userevents',\n 'mobile.button'\n ]\n };\n (function ($, undefined) {\n var kendo = window.kendo, Node = window.Node, mobile = kendo.mobile, ui = mobile.ui, outerHeight = kendo._outerHeight, DataSource = kendo.data.DataSource, Widget = ui.DataBoundWidget, ITEM_SELECTOR = '.km-list > li, > li:not(.km-group-container)', HIGHLIGHT_SELECTOR = '.km-listview-link, .km-listview-label', ICON_SELECTOR = '[' + kendo.attr('icon') + ']', proxy = $.proxy, attrValue = kendo.attrValue, GROUP_CLASS = 'km-group-title', ACTIVE_CLASS = 'km-state-active', GROUP_WRAPPER = '
              ', GROUP_TEMPLATE = kendo.template('
            • #= this.headerTemplate(data) #
                #= kendo.render(this.template, data.items)#
            • '), WRAPPER = '
              ', SEARCH_TEMPLATE = kendo.template(''), NS = '.kendoMobileListView', STYLED = 'styled', DATABOUND = 'dataBound', DATABINDING = 'dataBinding', ITEM_CHANGE = 'itemChange', CLICK = 'click', CHANGE = 'change', PROGRESS = 'progress', FUNCTION = 'function', whitespaceRegExp = /^\\s+$/, buttonRegExp = /button/;\n function whitespace() {\n return this.nodeType === Node.TEXT_NODE && this.nodeValue.match(whitespaceRegExp);\n }\n function addIcon(item, icon) {\n if (icon && !item[0].querySelector('.km-icon')) {\n item.prepend('');\n }\n }\n function enhanceItem(item) {\n addIcon(item, attrValue(item, 'icon'));\n addIcon(item, attrValue(item.children(ICON_SELECTOR), 'icon'));\n }\n function enhanceLinkItem(item) {\n var parent = item.parent(), itemAndDetailButtons = item.add(parent.children(kendo.roleSelector('detailbutton'))), otherNodes = parent.contents().not(itemAndDetailButtons).not(whitespace);\n if (otherNodes.length) {\n return;\n }\n item.addClass('km-listview-link').attr(kendo.attr('role'), 'listview-link');\n addIcon(item, attrValue(parent, 'icon'));\n addIcon(item, attrValue(item, 'icon'));\n }\n function enhanceCheckBoxItem(label) {\n if (!label[0].querySelector('input[type=checkbox],input[type=radio]')) {\n return;\n }\n var item = label.parent();\n if (item.contents().not(label).not(function () {\n return this.nodeType == 3;\n })[0]) {\n return;\n }\n label.addClass('km-listview-label');\n label.children('[type=checkbox],[type=radio]').addClass('km-widget km-icon km-check');\n }\n function putAt(element, top) {\n $(element).css('transform', 'translate3d(0px, ' + top + 'px, 0px)');\n }\n var HeaderFixer = kendo.Class.extend({\n init: function (listView) {\n var scroller = listView.scroller();\n if (!scroller) {\n return;\n }\n this.options = listView.options;\n this.element = listView.element;\n this.scroller = listView.scroller();\n this._shouldFixHeaders();\n var headerFixer = this;\n var cacheHeaders = function () {\n headerFixer._cacheHeaders();\n };\n listView.bind('resize', cacheHeaders);\n listView.bind(STYLED, cacheHeaders);\n listView.bind(DATABOUND, cacheHeaders);\n this._scrollHandler = function (e) {\n headerFixer._fixHeader(e);\n };\n scroller.bind('scroll', this._scrollHandler);\n },\n destroy: function () {\n var that = this;\n if (that.scroller) {\n that.scroller.unbind('scroll', that._scrollHandler);\n }\n },\n _fixHeader: function (e) {\n if (!this.fixedHeaders) {\n return;\n }\n var i = 0, scroller = this.scroller, headers = this.headers, scrollTop = e.scrollTop, headerPair, offset, header;\n do {\n headerPair = headers[i++];\n if (!headerPair) {\n header = $('
              ');\n break;\n }\n offset = headerPair.offset;\n header = headerPair.header;\n } while (offset + 1 > scrollTop);\n if (this.currentHeader != i) {\n scroller.fixedContainer.html(header.clone());\n this.currentHeader = i;\n }\n },\n _shouldFixHeaders: function () {\n this.fixedHeaders = this.options.type === 'group' && this.options.fixedHeaders;\n },\n _cacheHeaders: function () {\n this._shouldFixHeaders();\n if (!this.fixedHeaders) {\n return;\n }\n var headers = [], offset = this.scroller.scrollTop;\n this.element.find('.' + GROUP_CLASS).each(function (_, header) {\n header = $(header);\n headers.unshift({\n offset: header.position().top + offset,\n header: header\n });\n });\n this.headers = headers;\n this._fixHeader({ scrollTop: offset });\n }\n });\n var DEFAULT_PULL_PARAMETERS = function () {\n return { page: 1 };\n };\n var RefreshHandler = kendo.Class.extend({\n init: function (listView) {\n var handler = this, options = listView.options, scroller = listView.scroller(), pullParameters = options.pullParameters || DEFAULT_PULL_PARAMETERS;\n this.listView = listView;\n this.scroller = scroller;\n listView.bind('_dataSource', function (e) {\n handler.setDataSource(e.dataSource);\n });\n scroller.setOptions({\n pullToRefresh: true,\n pull: function () {\n if (!handler._pulled) {\n handler._pulled = true;\n handler.dataSource.read(pullParameters.call(listView, handler._first));\n }\n },\n messages: {\n pullTemplate: options.messages.pullTemplate,\n releaseTemplate: options.messages.releaseTemplate,\n refreshTemplate: options.messages.refreshTemplate\n }\n });\n },\n setDataSource: function (dataSource) {\n var handler = this;\n this._first = dataSource.view()[0];\n this.dataSource = dataSource;\n dataSource.bind('change', function () {\n handler._change();\n });\n dataSource.bind('error', function () {\n handler._change();\n });\n },\n _change: function () {\n var scroller = this.scroller, dataSource = this.dataSource;\n if (this._pulled) {\n scroller.pullHandled();\n }\n if (this._pulled || !this._first) {\n var view = dataSource.view();\n if (view[0]) {\n this._first = view[0];\n }\n }\n this._pulled = false;\n }\n });\n var VirtualList = kendo.Observable.extend({\n init: function (options) {\n var list = this;\n kendo.Observable.fn.init.call(list);\n list.buffer = options.buffer;\n list.height = options.height;\n list.item = options.item;\n list.items = [];\n list.footer = options.footer;\n list.buffer.bind('reset', function () {\n list.refresh();\n });\n },\n refresh: function () {\n var buffer = this.buffer, items = this.items, endReached = false;\n while (items.length) {\n items.pop().destroy();\n }\n this.offset = buffer.offset;\n var itemConstructor = this.item, prevItem, item;\n for (var idx = 0; idx < buffer.viewSize; idx++) {\n if (idx === buffer.total()) {\n endReached = true;\n break;\n }\n item = itemConstructor(this.content(this.offset + items.length));\n item.below(prevItem);\n prevItem = item;\n items.push(item);\n }\n this.itemCount = items.length;\n this.trigger('reset');\n this._resize();\n if (endReached) {\n this.trigger('endReached');\n }\n },\n totalHeight: function () {\n if (!this.items[0]) {\n return 0;\n }\n var list = this, items = list.items, top = items[0].top, bottom = items[items.length - 1].bottom, averageItemHeight = (bottom - top) / list.itemCount, remainingItemsCount = list.buffer.length - list.offset - list.itemCount;\n return (this.footer ? this.footer.height : 0) + bottom + remainingItemsCount * averageItemHeight;\n },\n batchUpdate: function (top) {\n var height = this.height(), items = this.items, item, initialOffset = this.offset;\n if (!items[0]) {\n return;\n }\n if (this.lastDirection) {\n while (items[items.length - 1].bottom > top + height * 2) {\n if (this.offset === 0) {\n break;\n }\n this.offset--;\n item = items.pop();\n item.update(this.content(this.offset));\n item.above(items[0]);\n items.unshift(item);\n }\n } else {\n while (items[0].top < top - height) {\n var nextIndex = this.offset + this.itemCount;\n if (nextIndex === this.buffer.total()) {\n this.trigger('endReached');\n break;\n }\n if (nextIndex === this.buffer.length) {\n break;\n }\n item = items.shift();\n item.update(this.content(this.offset + this.itemCount));\n item.below(items[items.length - 1]);\n items.push(item);\n this.offset++;\n }\n }\n if (initialOffset !== this.offset) {\n this._resize();\n }\n },\n update: function (top) {\n var list = this, items = this.items, item, firstItem, lastItem, height = this.height(), itemCount = this.itemCount, padding = height / 2, up = (this.lastTop || 0) > top, topBorder = top - padding, bottomBorder = top + height + padding;\n if (!items[0]) {\n return;\n }\n this.lastTop = top;\n this.lastDirection = up;\n if (up) {\n if (items[0].top > topBorder && items[items.length - 1].bottom > bottomBorder + padding && this.offset > 0) {\n this.offset--;\n item = items.pop();\n firstItem = items[0];\n item.update(this.content(this.offset));\n items.unshift(item);\n item.above(firstItem);\n list._resize();\n }\n } else {\n if (items[items.length - 1].bottom < bottomBorder && items[0].top < topBorder - padding) {\n var nextIndex = this.offset + itemCount;\n if (nextIndex === this.buffer.total()) {\n this.trigger('endReached');\n } else if (nextIndex !== this.buffer.length) {\n item = items.shift();\n lastItem = items[items.length - 1];\n items.push(item);\n item.update(this.content(this.offset + this.itemCount));\n list.offset++;\n item.below(lastItem);\n list._resize();\n }\n }\n }\n },\n content: function (index) {\n return this.buffer.at(index);\n },\n destroy: function () {\n this.unbind();\n },\n _resize: function () {\n var items = this.items, top = 0, bottom = 0, firstItem = items[0], lastItem = items[items.length - 1];\n if (firstItem) {\n top = firstItem.top;\n bottom = lastItem.bottom;\n }\n this.trigger('resize', {\n top: top,\n bottom: bottom\n });\n if (this.footer) {\n this.footer.below(lastItem);\n }\n }\n });\n kendo.mobile.ui.VirtualList = VirtualList;\n var VirtualListViewItem = kendo.Class.extend({\n init: function (listView, dataItem) {\n var element = listView.append([dataItem], true)[0], height = element.offsetHeight;\n $.extend(this, {\n top: 0,\n element: element,\n listView: listView,\n height: height,\n bottom: height\n });\n },\n update: function (dataItem) {\n this.element = this.listView.setDataItem(this.element, dataItem);\n },\n above: function (item) {\n if (item) {\n this.height = this.element.offsetHeight;\n this.top = item.top - this.height;\n this.bottom = item.top;\n putAt(this.element, this.top);\n }\n },\n below: function (item) {\n if (item) {\n this.height = this.element.offsetHeight;\n this.top = item.bottom;\n this.bottom = this.top + this.height;\n putAt(this.element, this.top);\n }\n },\n destroy: function () {\n kendo.destroy(this.element);\n $(this.element).remove();\n }\n });\n var LOAD_ICON = '
              ';\n var VirtualListViewLoadingIndicator = kendo.Class.extend({\n init: function (listView) {\n this.element = $('
            • ').appendTo(listView.element);\n this._loadIcon = $(LOAD_ICON).appendTo(this.element);\n },\n enable: function () {\n this.element.show();\n this.height = outerHeight(this.element, true);\n },\n disable: function () {\n this.element.hide();\n this.height = 0;\n },\n below: function (item) {\n if (item) {\n this.top = item.bottom;\n this.bottom = this.height + this.top;\n putAt(this.element, this.top);\n }\n }\n });\n var VirtualListViewPressToLoadMore = VirtualListViewLoadingIndicator.extend({\n init: function (listView, buffer) {\n this._loadIcon = $(LOAD_ICON).hide();\n this._loadButton = $('' + listView.options.messages.loadMoreText + '').hide();\n this.element = $('
            • ').append(this._loadIcon).append(this._loadButton).appendTo(listView.element);\n var loadMore = this;\n this._loadButton.kendoMobileButton().data('kendoMobileButton').bind('click', function () {\n loadMore._hideShowButton();\n buffer.next();\n });\n buffer.bind('resize', function () {\n loadMore._showLoadButton();\n });\n this.height = outerHeight(this.element, true);\n this.disable();\n },\n _hideShowButton: function () {\n this._loadButton.hide();\n this.element.addClass('km-scroller-refresh');\n this._loadIcon.css('display', 'block');\n },\n _showLoadButton: function () {\n this._loadButton.show();\n this.element.removeClass('km-scroller-refresh');\n this._loadIcon.hide();\n }\n });\n var VirtualListViewItemBinder = kendo.Class.extend({\n init: function (listView) {\n var binder = this;\n this.chromeHeight = outerHeight(listView.wrapper.children().not(listView.element));\n this.listView = listView;\n this.scroller = listView.scroller();\n this.options = listView.options;\n listView.bind('_dataSource', function (e) {\n binder.setDataSource(e.dataSource, e.empty);\n });\n listView.bind('resize', function () {\n if (!binder.list.items.length) {\n return;\n }\n binder.scroller.reset();\n binder.buffer.range(0);\n binder.list.refresh();\n });\n this.scroller.makeVirtual();\n this._scroll = function (e) {\n binder.list.update(e.scrollTop);\n };\n this.scroller.bind('scroll', this._scroll);\n this._scrollEnd = function (e) {\n binder.list.batchUpdate(e.scrollTop);\n };\n this.scroller.bind('scrollEnd', this._scrollEnd);\n },\n destroy: function () {\n this.list.unbind();\n this.buffer.unbind();\n this.scroller.unbind('scroll', this._scroll);\n this.scroller.unbind('scrollEnd', this._scrollEnd);\n },\n setDataSource: function (dataSource, empty) {\n var binder = this, options = this.options, listView = this.listView, scroller = listView.scroller(), pressToLoadMore = options.loadMore, pageSize, buffer, footer;\n this.dataSource = dataSource;\n pageSize = dataSource.pageSize() || options.virtualViewSize;\n if (!pageSize && !empty) {\n throw new Error('the DataSource does not have page size configured. Page Size setting is mandatory for the mobile listview virtual scrolling to work as expected.');\n }\n if (this.buffer) {\n this.buffer.destroy();\n }\n buffer = new kendo.data.Buffer(dataSource, Math.floor(pageSize / 2), pressToLoadMore);\n if (pressToLoadMore) {\n footer = new VirtualListViewPressToLoadMore(listView, buffer);\n } else {\n footer = new VirtualListViewLoadingIndicator(listView);\n }\n if (this.list) {\n this.list.destroy();\n }\n var list = new VirtualList({\n buffer: buffer,\n footer: footer,\n item: function (dataItem) {\n return new VirtualListViewItem(listView, dataItem);\n },\n height: function () {\n return scroller.height();\n }\n });\n list.bind('resize', function () {\n binder.updateScrollerSize();\n listView.updateSize();\n });\n list.bind('reset', function () {\n binder.footer.enable();\n });\n list.bind('endReached', function () {\n footer.disable();\n binder.updateScrollerSize();\n });\n buffer.bind('expand', function () {\n list.lastDirection = false;\n list.batchUpdate(scroller.scrollTop);\n });\n $.extend(this, {\n buffer: buffer,\n scroller: scroller,\n list: list,\n footer: footer\n });\n },\n updateScrollerSize: function () {\n this.scroller.virtualSize(0, this.list.totalHeight() + this.chromeHeight);\n },\n refresh: function () {\n this.list.refresh();\n },\n reset: function () {\n this.buffer.range(0);\n this.list.refresh();\n }\n });\n var ListViewItemBinder = kendo.Class.extend({\n init: function (listView) {\n var binder = this;\n this.listView = listView;\n this.options = listView.options;\n var itemBinder = this;\n this._refreshHandler = function (e) {\n itemBinder.refresh(e);\n };\n this._progressHandler = function () {\n listView.showLoading();\n };\n listView.bind('_dataSource', function (e) {\n binder.setDataSource(e.dataSource);\n });\n },\n destroy: function () {\n this._unbindDataSource();\n },\n reset: function () {\n },\n refresh: function (e) {\n var action = e && e.action, dataItems = e && e.items, listView = this.listView, dataSource = this.dataSource, prependOnRefresh = this.options.appendOnRefresh, view = dataSource.view(), groups = dataSource.group(), groupedMode = groups && groups[0], item;\n if (action === 'itemchange') {\n if (!listView._hasBindingTarget()) {\n item = listView.findByDataItem(dataItems)[0];\n if (item) {\n listView.setDataItem(item, dataItems[0]);\n }\n }\n return;\n }\n var removedItems, addedItems, addedDataItems;\n var adding = action === 'add' && !groupedMode || prependOnRefresh && !listView._filter;\n var removing = action === 'remove' && !groupedMode;\n if (adding) {\n removedItems = [];\n } else if (removing) {\n removedItems = listView.findByDataItem(dataItems);\n }\n if (listView.trigger(DATABINDING, {\n action: action || 'rebind',\n items: dataItems,\n removedItems: removedItems,\n index: e && e.index\n })) {\n if (this._shouldShowLoading()) {\n listView.hideLoading();\n }\n return;\n }\n if (action === 'add' && !groupedMode) {\n var index = view.indexOf(dataItems[0]);\n if (index > -1) {\n addedItems = listView.insertAt(dataItems, index);\n addedDataItems = dataItems;\n }\n } else if (action === 'remove' && !groupedMode) {\n addedItems = [];\n listView.remove(dataItems);\n } else if (groupedMode) {\n listView.replaceGrouped(view);\n } else if (prependOnRefresh && !listView._filter) {\n addedItems = listView.prepend(view);\n addedDataItems = view;\n } else {\n listView.replace(view);\n }\n if (this._shouldShowLoading()) {\n listView.hideLoading();\n }\n listView.trigger(DATABOUND, {\n ns: ui,\n addedItems: addedItems,\n addedDataItems: addedDataItems\n });\n },\n setDataSource: function (dataSource) {\n if (this.dataSource) {\n this._unbindDataSource();\n }\n this.dataSource = dataSource;\n dataSource.bind(CHANGE, this._refreshHandler);\n if (this._shouldShowLoading()) {\n this.dataSource.bind(PROGRESS, this._progressHandler);\n }\n },\n _unbindDataSource: function () {\n this.dataSource.unbind(CHANGE, this._refreshHandler).unbind(PROGRESS, this._progressHandler);\n },\n _shouldShowLoading: function () {\n var options = this.options;\n return !options.pullToRefresh && !options.loadMore && !options.endlessScroll;\n }\n });\n var ListViewFilter = kendo.Class.extend({\n init: function (listView) {\n var filter = this, filterable = listView.options.filterable, events = 'change paste', that = this;\n this.listView = listView;\n this.options = filterable;\n listView.element.before(SEARCH_TEMPLATE({ placeholder: filterable.placeholder || 'Search...' }));\n if (filterable.autoFilter !== false) {\n events += ' keyup';\n }\n this.element = listView.wrapper.find('.km-search-form');\n this.searchInput = listView.wrapper.find('input[type=search]').closest('form').on('submit' + NS, function (e) {\n e.preventDefault();\n }).end().on('focus' + NS, function () {\n filter._oldFilter = filter.searchInput.val();\n }).on(events.split(' ').join(NS + ' ') + NS, proxy(this._filterChange, this));\n this.clearButton = listView.wrapper.find('.km-filter-reset').on(CLICK, proxy(this, '_clearFilter')).hide();\n this._dataSourceChange = $.proxy(this._refreshInput, this);\n listView.bind('_dataSource', function (e) {\n e.dataSource.bind('change', that._dataSourceChange);\n });\n },\n _refreshInput: function () {\n var appliedFilters = this.listView.dataSource.filter();\n var searchInput = this.listView._filter.searchInput;\n if (!appliedFilters || appliedFilters.filters[0].field !== this.listView.options.filterable.field) {\n searchInput.val('');\n } else {\n searchInput.val(appliedFilters.filters[0].value);\n }\n },\n _search: function (expr) {\n this._filter = true;\n this.clearButton[expr ? 'show' : 'hide']();\n this.listView.dataSource.filter(expr);\n },\n _filterChange: function (e) {\n var filter = this;\n if (e.type == 'paste' && this.options.autoFilter !== false) {\n setTimeout(function () {\n filter._applyFilter();\n }, 1);\n } else {\n this._applyFilter();\n }\n },\n _applyFilter: function () {\n var options = this.options, value = this.searchInput.val(), expr = value.length ? {\n field: options.field,\n operator: options.operator || 'startswith',\n ignoreCase: options.ignoreCase,\n value: value\n } : null;\n if (value === this._oldFilter) {\n return;\n }\n this._oldFilter = value;\n this._search(expr);\n },\n _clearFilter: function (e) {\n this.searchInput.val('');\n this._search(null);\n e.preventDefault();\n }\n });\n var ListView = Widget.extend({\n init: function (element, options) {\n var listView = this;\n Widget.fn.init.call(this, element, options);\n element = this.element;\n options = this.options;\n if (options.scrollTreshold) {\n options.scrollThreshold = options.scrollTreshold;\n }\n element.on('down', HIGHLIGHT_SELECTOR, '_highlight').on('move up cancel', HIGHLIGHT_SELECTOR, '_dim');\n this._userEvents = new kendo.UserEvents(element, {\n fastTap: true,\n filter: ITEM_SELECTOR,\n allowSelection: true,\n tap: function (e) {\n listView._click(e);\n }\n });\n element.css('-ms-touch-action', 'auto');\n element.wrap(WRAPPER);\n this.wrapper = this.element.parent();\n this._headerFixer = new HeaderFixer(this);\n this._itemsCache = {};\n this._templates();\n this.virtual = options.endlessScroll || options.loadMore;\n this._style();\n if (this.options.$angular && (this.virtual || this.options.pullToRefresh)) {\n setTimeout($.proxy(this, '_start'));\n } else {\n this._start();\n }\n },\n _start: function () {\n var options = this.options;\n if (this.options.filterable) {\n this._filter = new ListViewFilter(this);\n }\n if (this.virtual) {\n this._itemBinder = new VirtualListViewItemBinder(this);\n } else {\n this._itemBinder = new ListViewItemBinder(this);\n }\n if (this.options.pullToRefresh) {\n this._pullToRefreshHandler = new RefreshHandler(this);\n }\n this.setDataSource(options.dataSource);\n this._enhanceItems(this.items());\n kendo.notify(this, ui);\n },\n events: [\n CLICK,\n DATABINDING,\n DATABOUND,\n ITEM_CHANGE\n ],\n options: {\n name: 'ListView',\n style: '',\n type: 'flat',\n autoBind: true,\n fixedHeaders: false,\n template: '#:data#',\n headerTemplate: '#:value#',\n appendOnRefresh: false,\n loadMore: false,\n endlessScroll: false,\n scrollThreshold: 30,\n pullToRefresh: false,\n messages: {\n loadMoreText: 'Press to load more',\n pullTemplate: 'Pull to refresh',\n releaseTemplate: 'Release to refresh',\n refreshTemplate: 'Refreshing'\n },\n pullOffset: 140,\n filterable: false,\n virtualViewSize: null\n },\n refresh: function () {\n this._itemBinder.refresh();\n },\n reset: function () {\n this._itemBinder.reset();\n },\n setDataSource: function (dataSource) {\n var emptyDataSource = !dataSource;\n this.dataSource = DataSource.create(dataSource);\n this.trigger('_dataSource', {\n dataSource: this.dataSource,\n empty: emptyDataSource\n });\n if (this.options.autoBind && !emptyDataSource) {\n this.items().remove();\n this.dataSource.fetch();\n }\n },\n destroy: function () {\n Widget.fn.destroy.call(this);\n kendo.destroy(this.element);\n this._userEvents.destroy();\n if (this._itemBinder) {\n this._itemBinder.destroy();\n }\n if (this._headerFixer) {\n this._headerFixer.destroy();\n }\n this.element.unwrap();\n delete this.element;\n delete this.wrapper;\n delete this._userEvents;\n },\n items: function () {\n if (this.options.type === 'group') {\n return this.element.find('.km-list').children();\n } else {\n return this.element.children().not('.km-load-more');\n }\n },\n scroller: function () {\n if (!this._scrollerInstance) {\n this._scrollerInstance = this.element.closest('.km-scroll-wrapper').data('kendoMobileScroller');\n }\n return this._scrollerInstance;\n },\n showLoading: function () {\n var view = this.view();\n if (view && view.loader) {\n view.loader.show();\n }\n },\n hideLoading: function () {\n var view = this.view();\n if (view && view.loader) {\n view.loader.hide();\n }\n },\n insertAt: function (dataItems, index, triggerChange) {\n var listView = this;\n return listView._renderItems(dataItems, function (items) {\n if (index === 0) {\n listView.element.prepend(items);\n } else if (index === -1) {\n listView.element.append(items);\n } else {\n listView.items().eq(index - 1).after(items);\n }\n if (triggerChange) {\n for (var i = 0; i < items.length; i++) {\n listView.trigger(ITEM_CHANGE, {\n item: items.eq(i),\n data: dataItems[i],\n ns: ui\n });\n }\n }\n });\n },\n append: function (dataItems, triggerChange) {\n return this.insertAt(dataItems, -1, triggerChange);\n },\n prepend: function (dataItems, triggerChange) {\n return this.insertAt(dataItems, 0, triggerChange);\n },\n replace: function (dataItems) {\n this.options.type = 'flat';\n this._angularItems('cleanup');\n kendo.destroy(this.element.children());\n this.element.empty();\n this._userEvents.cancel();\n this._style();\n return this.insertAt(dataItems, 0);\n },\n replaceGrouped: function (groups) {\n this.options.type = 'group';\n this._angularItems('cleanup');\n this.element.empty();\n var items = $(kendo.render(this.groupTemplate, groups));\n this._enhanceItems(items.children('ul').children('li'));\n this.element.append(items);\n mobile.init(items);\n this._style();\n this._angularItems('compile');\n },\n remove: function (dataItems) {\n var items = this.findByDataItem(dataItems);\n this.angular('cleanup', function () {\n return { elements: items };\n });\n kendo.destroy(items);\n items.remove();\n },\n findByDataItem: function (dataItems) {\n var selectors = [];\n for (var idx = 0, length = dataItems.length; idx < length; idx++) {\n selectors[idx] = '[data-' + kendo.ns + 'uid=' + dataItems[idx].uid + ']';\n }\n return this.element.find(selectors.join(','));\n },\n setDataItem: function (item, dataItem) {\n var listView = this, replaceItem = function (items) {\n var newItem = $(items[0]);\n kendo.destroy(item);\n listView.angular('cleanup', function () {\n return { elements: [$(item)] };\n });\n $(item).replaceWith(newItem);\n listView.trigger(ITEM_CHANGE, {\n item: newItem,\n data: dataItem,\n ns: ui\n });\n };\n return this._renderItems([dataItem], replaceItem)[0];\n },\n updateSize: function () {\n this._size = this.getSize();\n },\n _renderItems: function (dataItems, callback) {\n var items = $(kendo.render(this.template, dataItems));\n callback(items);\n this.angular('compile', function () {\n return {\n elements: items,\n data: dataItems.map(function (data) {\n return { dataItem: data };\n })\n };\n });\n mobile.init(items);\n this._enhanceItems(items);\n return items;\n },\n _dim: function (e) {\n this._toggle(e, false);\n },\n _highlight: function (e) {\n this._toggle(e, true);\n },\n _toggle: function (e, highlight) {\n if (e.which > 1) {\n return;\n }\n var clicked = $(e.currentTarget), item = clicked.parent(), role = attrValue(clicked, 'role') || '', plainItem = !role.match(buttonRegExp), prevented = e.isDefaultPrevented();\n if (plainItem) {\n item.toggleClass(ACTIVE_CLASS, highlight && !prevented);\n }\n },\n _templates: function () {\n var template = this.options.template, headerTemplate = this.options.headerTemplate, dataIDAttribute = ' data-uid=\"#=arguments[0].uid || \"\"#\"', templateProxy = {}, groupTemplateProxy = {};\n if (typeof template === FUNCTION) {\n templateProxy.template = template;\n template = '#=this.template(data)#';\n }\n this.template = proxy(kendo.template('' + template + ''), templateProxy);\n groupTemplateProxy.template = this.template;\n if (typeof headerTemplate === FUNCTION) {\n groupTemplateProxy._headerTemplate = headerTemplate;\n headerTemplate = '#=this._headerTemplate(data)#';\n }\n groupTemplateProxy.headerTemplate = kendo.template(headerTemplate);\n this.groupTemplate = proxy(GROUP_TEMPLATE, groupTemplateProxy);\n },\n _click: function (e) {\n if (e.event.which > 1 || e.event.isDefaultPrevented()) {\n return;\n }\n var dataItem, item = e.target, target = $(e.event.target), buttonElement = target.closest(kendo.roleSelector('button', 'detailbutton', 'backbutton')), button = kendo.widgetInstance(buttonElement, ui), id = item.attr(kendo.attr('uid'));\n if (id) {\n dataItem = this.dataSource.getByUid(id);\n }\n if (this.trigger(CLICK, {\n target: target,\n item: item,\n dataItem: dataItem,\n button: button\n })) {\n e.preventDefault();\n }\n },\n _styleGroups: function () {\n var rootItems = this.element.children();\n rootItems.children('ul').addClass('km-list');\n rootItems.each(function () {\n var li = $(this), groupHeader = li.contents().first();\n li.addClass('km-group-container');\n if (!groupHeader.is('ul') && !groupHeader.is('div.' + GROUP_CLASS)) {\n groupHeader.wrap(GROUP_WRAPPER);\n }\n });\n },\n _style: function () {\n var options = this.options, grouped = options.type === 'group', element = this.element, inset = options.style === 'inset';\n element.addClass('km-listview').toggleClass('km-list', !grouped).toggleClass('km-virtual-list', this.virtual).toggleClass('km-listinset', !grouped && inset).toggleClass('km-listgroup', grouped && !inset).toggleClass('km-listgroupinset', grouped && inset);\n if (!element.parents('.km-listview')[0]) {\n element.closest('.km-content').toggleClass('km-insetcontent', inset);\n }\n if (grouped) {\n this._styleGroups();\n }\n this.trigger(STYLED);\n },\n _enhanceItems: function (items) {\n items.each(function () {\n var item = $(this), child, enhanced = false;\n item.children().each(function () {\n child = $(this);\n if (child.is('a')) {\n enhanceLinkItem(child);\n enhanced = true;\n } else if (child.is('label')) {\n enhanceCheckBoxItem(child);\n enhanced = true;\n }\n });\n if (!enhanced) {\n enhanceItem(item);\n }\n });\n }\n });\n ui.plugin(ListView);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.mobile.navbar', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'mobile.navbar',\n name: 'NavBar',\n category: 'mobile',\n description: 'The Kendo mobile NavBar widget is used inside a mobile View or Layout Header element to display an application navigation bar.',\n depends: ['core']\n };\n (function ($, undefined) {\n var kendo = window.kendo, mobile = kendo.mobile, ui = mobile.ui, Widget = ui.Widget;\n function createContainer(align, element) {\n var items = element.find('[' + kendo.attr('align') + '=' + align + ']');\n if (items[0]) {\n return $('
              ').append(items).prependTo(element);\n }\n }\n function toggleTitle(centerElement) {\n var siblings = centerElement.siblings(), noTitle = !!centerElement.children('ul')[0], showTitle = !!siblings[0] && $.trim(centerElement.text()) === '', android = !!(kendo.mobile.application && kendo.mobile.application.element.is('.km-android'));\n centerElement.prevAll().toggleClass('km-absolute', noTitle);\n centerElement.toggleClass('km-show-title', showTitle);\n centerElement.toggleClass('km-fill-title', showTitle && !$.trim(centerElement.html()));\n centerElement.toggleClass('km-no-title', noTitle);\n centerElement.toggleClass('km-hide-title', android && !siblings.children().is(':visible'));\n }\n var NavBar = Widget.extend({\n init: function (element, options) {\n var that = this;\n Widget.fn.init.call(that, element, options);\n element = that.element;\n that.container().bind('show', $.proxy(this, 'refresh'));\n element.addClass('km-navbar').wrapInner($('
              '));\n that.leftElement = createContainer('left', element);\n that.rightElement = createContainer('right', element);\n that.centerElement = element.find('.km-view-title');\n },\n options: { name: 'NavBar' },\n title: function (value) {\n this.element.find(kendo.roleSelector('view-title')).text(value);\n toggleTitle(this.centerElement);\n },\n refresh: function (e) {\n var view = e.view;\n this.title(view.options.title);\n },\n destroy: function () {\n Widget.fn.destroy.call(this);\n kendo.destroy(this.element);\n }\n });\n ui.plugin(NavBar);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.mobile.scrollview', [\n 'kendo.fx',\n 'kendo.data',\n 'kendo.draganddrop'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'mobile.scrollview',\n name: 'ScrollView',\n category: 'mobile',\n description: 'The Kendo Mobile ScrollView widget is used to scroll content wider than the device screen.',\n depends: [\n 'fx',\n 'data',\n 'draganddrop'\n ]\n };\n (function ($, undefined) {\n var kendo = window.kendo, mobile = kendo.mobile, ui = mobile.ui, proxy = $.proxy, Transition = kendo.effects.Transition, Pane = kendo.ui.Pane, PaneDimensions = kendo.ui.PaneDimensions, Widget = ui.DataBoundWidget, DataSource = kendo.data.DataSource, Buffer = kendo.data.Buffer, BatchBuffer = kendo.data.BatchBuffer, math = Math, abs = math.abs, ceil = math.ceil, round = math.round, max = math.max, min = math.min, floor = math.floor, CHANGE = 'change', CHANGING = 'changing', REFRESH = 'refresh', CURRENT_PAGE_CLASS = 'current-page', VIRTUAL_PAGE_CLASS = 'virtual-page', FUNCTION = 'function', ITEM_CHANGE = 'itemChange', CLEANUP = 'cleanup', VIRTUAL_PAGE_COUNT = 3, LEFT_PAGE = -1, CETER_PAGE = 0, RIGHT_PAGE = 1, LEFT_SWIPE = -1, NUDGE = 0, RIGHT_SWIPE = 1;\n function className(name) {\n return 'k-' + name + ' km-' + name;\n }\n var Pager = kendo.Class.extend({\n init: function (scrollView) {\n var that = this, element = $('
                ');\n scrollView.element.append(element);\n this._changeProxy = proxy(that, '_change');\n this._refreshProxy = proxy(that, '_refresh');\n scrollView.bind(CHANGE, this._changeProxy);\n scrollView.bind(REFRESH, this._refreshProxy);\n $.extend(that, {\n element: element,\n scrollView: scrollView\n });\n },\n items: function () {\n return this.element.children();\n },\n _refresh: function (e) {\n var pageHTML = '';\n for (var idx = 0; idx < e.pageCount; idx++) {\n pageHTML += '
              1. ';\n }\n this.element.html(pageHTML);\n this.items().eq(e.page).addClass(className(CURRENT_PAGE_CLASS));\n },\n _change: function (e) {\n this.items().removeClass(className(CURRENT_PAGE_CLASS)).eq(e.page).addClass(className(CURRENT_PAGE_CLASS));\n },\n destroy: function () {\n this.scrollView.unbind(CHANGE, this._changeProxy);\n this.scrollView.unbind(REFRESH, this._refreshProxy);\n this.element.remove();\n }\n });\n kendo.mobile.ui.ScrollViewPager = Pager;\n var TRANSITION_END = 'transitionEnd', DRAG_START = 'dragStart', DRAG_END = 'dragEnd';\n var ElasticPane = kendo.Observable.extend({\n init: function (element, options) {\n var that = this;\n kendo.Observable.fn.init.call(this);\n this.element = element;\n this.container = element.parent();\n var movable, transition, userEvents, dimensions, dimension, pane;\n movable = new kendo.ui.Movable(that.element);\n transition = new Transition({\n axis: 'x',\n movable: movable,\n onEnd: function () {\n that.trigger(TRANSITION_END);\n }\n });\n userEvents = new kendo.UserEvents(element, {\n fastTap: true,\n start: function (e) {\n if (abs(e.x.velocity) * 2 >= abs(e.y.velocity)) {\n userEvents.capture();\n } else {\n userEvents.cancel();\n }\n that.trigger(DRAG_START, e);\n transition.cancel();\n },\n allowSelection: true,\n end: function (e) {\n that.trigger(DRAG_END, e);\n }\n });\n dimensions = new PaneDimensions({\n element: that.element,\n container: that.container\n });\n dimension = dimensions.x;\n dimension.bind(CHANGE, function () {\n that.trigger(CHANGE);\n });\n pane = new Pane({\n dimensions: dimensions,\n userEvents: userEvents,\n movable: movable,\n elastic: true\n });\n $.extend(that, {\n duration: options && options.duration || 1,\n movable: movable,\n transition: transition,\n userEvents: userEvents,\n dimensions: dimensions,\n dimension: dimension,\n pane: pane\n });\n this.bind([\n TRANSITION_END,\n DRAG_START,\n DRAG_END,\n CHANGE\n ], options);\n },\n size: function () {\n return {\n width: this.dimensions.x.getSize(),\n height: this.dimensions.y.getSize()\n };\n },\n total: function () {\n return this.dimension.getTotal();\n },\n offset: function () {\n return -this.movable.x;\n },\n updateDimension: function () {\n this.dimension.update(true);\n },\n refresh: function () {\n this.dimensions.refresh();\n },\n moveTo: function (offset) {\n this.movable.moveAxis('x', -offset);\n },\n transitionTo: function (offset, ease, instant) {\n if (instant) {\n this.moveTo(-offset);\n } else {\n this.transition.moveTo({\n location: offset,\n duration: this.duration,\n ease: ease\n });\n }\n }\n });\n kendo.mobile.ui.ScrollViewElasticPane = ElasticPane;\n var ScrollViewContent = kendo.Observable.extend({\n init: function (element, pane, options) {\n var that = this;\n kendo.Observable.fn.init.call(this);\n that.element = element;\n that.pane = pane;\n that._getPages();\n this.page = 0;\n this.pageSize = options.pageSize || 1;\n this.contentHeight = options.contentHeight;\n this.enablePager = options.enablePager;\n this.pagerOverlay = options.pagerOverlay;\n },\n scrollTo: function (page, instant) {\n this.page = page;\n this.pane.transitionTo(-page * this.pane.size().width, Transition.easeOutExpo, instant);\n },\n paneMoved: function (swipeType, bounce, callback, instant) {\n var that = this, pane = that.pane, width = pane.size().width * that.pageSize, approx = round, ease = bounce ? Transition.easeOutBack : Transition.easeOutExpo, snap, nextPage;\n if (swipeType === LEFT_SWIPE) {\n approx = ceil;\n } else if (swipeType === RIGHT_SWIPE) {\n approx = floor;\n }\n nextPage = approx(pane.offset() / width);\n snap = max(that.minSnap, min(-nextPage * width, that.maxSnap));\n if (nextPage != that.page) {\n if (callback && callback({\n currentPage: that.page,\n nextPage: nextPage\n })) {\n snap = -that.page * pane.size().width;\n }\n }\n pane.transitionTo(snap, ease, instant);\n },\n updatePage: function () {\n var pane = this.pane, page = round(pane.offset() / pane.size().width);\n if (page != this.page) {\n this.page = page;\n return true;\n }\n return false;\n },\n forcePageUpdate: function () {\n return this.updatePage();\n },\n resizeTo: function (size) {\n var pane = this.pane, width = size.width;\n this.pageElements.width(width);\n if (this.contentHeight === '100%') {\n var containerHeight = this.element.parent().height();\n if (this.enablePager === true) {\n var pager = this.element.parent().find('ol.km-pages');\n if (!this.pagerOverlay && pager.length) {\n containerHeight -= kendo._outerHeight(pager, true);\n }\n }\n this.element.css('height', containerHeight);\n this.pageElements.css('height', containerHeight);\n }\n pane.updateDimension();\n if (!this._paged) {\n this.page = floor(pane.offset() / width);\n }\n this.scrollTo(this.page, true);\n this.pageCount = ceil(pane.total() / width);\n this.minSnap = -(this.pageCount - 1) * width;\n this.maxSnap = 0;\n },\n _getPages: function () {\n this.pageElements = this.element.find(kendo.roleSelector('page'));\n this._paged = this.pageElements.length > 0;\n }\n });\n kendo.mobile.ui.ScrollViewContent = ScrollViewContent;\n var VirtualScrollViewContent = kendo.Observable.extend({\n init: function (element, pane, options) {\n var that = this;\n kendo.Observable.fn.init.call(this);\n that.element = element;\n that.pane = pane;\n that.options = options;\n that._templates();\n that.page = options.page || 0;\n that.pages = [];\n that._initPages();\n that.resizeTo(that.pane.size());\n that.pane.dimension.forceEnabled();\n },\n setDataSource: function (dataSource) {\n this.dataSource = DataSource.create(dataSource);\n this._buffer();\n this._pendingPageRefresh = false;\n this._pendingWidgetRefresh = false;\n },\n _viewShow: function () {\n var that = this;\n if (that._pendingWidgetRefresh) {\n setTimeout(function () {\n that._resetPages();\n }, 0);\n that._pendingWidgetRefresh = false;\n }\n },\n _buffer: function () {\n var itemsPerPage = this.options.itemsPerPage;\n if (this.buffer) {\n this.buffer.destroy();\n }\n if (itemsPerPage > 1) {\n this.buffer = new BatchBuffer(this.dataSource, itemsPerPage);\n } else {\n this.buffer = new Buffer(this.dataSource, itemsPerPage * 3);\n }\n this._resizeProxy = proxy(this, '_onResize');\n this._resetProxy = proxy(this, '_onReset');\n this._endReachedProxy = proxy(this, '_onEndReached');\n this.buffer.bind({\n 'resize': this._resizeProxy,\n 'reset': this._resetProxy,\n 'endreached': this._endReachedProxy\n });\n },\n _templates: function () {\n var template = this.options.template, emptyTemplate = this.options.emptyTemplate, templateProxy = {}, emptyTemplateProxy = {};\n if (typeof template === FUNCTION) {\n templateProxy.template = template;\n template = '#=this.template(data)#';\n }\n this.template = proxy(kendo.template(template), templateProxy);\n if (typeof emptyTemplate === FUNCTION) {\n emptyTemplateProxy.emptyTemplate = emptyTemplate;\n emptyTemplate = '#=this.emptyTemplate(data)#';\n }\n this.emptyTemplate = proxy(kendo.template(emptyTemplate), emptyTemplateProxy);\n },\n _initPages: function () {\n var pages = this.pages, element = this.element, page;\n for (var i = 0; i < VIRTUAL_PAGE_COUNT; i++) {\n page = new Page(element);\n pages.push(page);\n }\n this.pane.updateDimension();\n },\n resizeTo: function (size) {\n var pages = this.pages, pane = this.pane;\n for (var i = 0; i < pages.length; i++) {\n pages[i].setWidth(size.width);\n }\n if (this.options.contentHeight === 'auto') {\n this.element.css('height', this.pages[1].element.height());\n } else if (this.options.contentHeight === '100%') {\n var containerHeight = this.element.parent().height();\n if (this.options.enablePager === true) {\n var pager = this.element.parent().find('ol.km-pages');\n if (!this.options.pagerOverlay && pager.length) {\n containerHeight -= kendo._outerHeight(pager, true);\n }\n }\n this.element.css('height', containerHeight);\n pages[0].element.css('height', containerHeight);\n pages[1].element.css('height', containerHeight);\n pages[2].element.css('height', containerHeight);\n }\n pane.updateDimension();\n this._repositionPages();\n this.width = size.width;\n },\n scrollTo: function (page) {\n var buffer = this.buffer, dataItem;\n buffer.syncDataSource();\n dataItem = buffer.at(page);\n if (!dataItem) {\n return;\n }\n this._updatePagesContent(page);\n this.page = page;\n },\n paneMoved: function (swipeType, bounce, callback, instant) {\n var that = this, pane = that.pane, width = pane.size().width, offset = pane.offset(), thresholdPassed = Math.abs(offset) >= width / 3, ease = bounce ? kendo.effects.Transition.easeOutBack : kendo.effects.Transition.easeOutExpo, isEndReached = that.page + 2 > that.buffer.total(), nextPage, delta = 0;\n if (swipeType === RIGHT_SWIPE) {\n if (that.page !== 0) {\n delta = -1;\n }\n } else if (swipeType === LEFT_SWIPE && !isEndReached) {\n delta = 1;\n } else if (offset > 0 && (thresholdPassed && !isEndReached)) {\n delta = 1;\n } else if (offset < 0 && thresholdPassed) {\n if (that.page !== 0) {\n delta = -1;\n }\n }\n nextPage = that.page;\n if (delta) {\n nextPage = delta > 0 ? nextPage + 1 : nextPage - 1;\n }\n if (callback && callback({\n currentPage: that.page,\n nextPage: nextPage\n })) {\n delta = 0;\n }\n if (delta === 0) {\n that._cancelMove(ease, instant);\n } else if (delta === -1) {\n that._moveBackward(instant);\n } else if (delta === 1) {\n that._moveForward(instant);\n }\n },\n updatePage: function () {\n var pages = this.pages;\n if (this.pane.offset() === 0) {\n return false;\n }\n if (this.pane.offset() > 0) {\n pages.push(this.pages.shift());\n this.page++;\n this.setPageContent(pages[2], this.page + 1);\n } else {\n pages.unshift(this.pages.pop());\n this.page--;\n this.setPageContent(pages[0], this.page - 1);\n }\n this._repositionPages();\n this._resetMovable();\n return true;\n },\n forcePageUpdate: function () {\n var offset = this.pane.offset(), threshold = this.pane.size().width * 3 / 4;\n if (abs(offset) > threshold) {\n return this.updatePage();\n }\n return false;\n },\n _resetMovable: function () {\n this.pane.moveTo(0);\n },\n _moveForward: function (instant) {\n this.pane.transitionTo(-this.width, kendo.effects.Transition.easeOutExpo, instant);\n },\n _moveBackward: function (instant) {\n this.pane.transitionTo(this.width, kendo.effects.Transition.easeOutExpo, instant);\n },\n _cancelMove: function (ease, instant) {\n this.pane.transitionTo(0, ease, instant);\n },\n _resetPages: function () {\n this.page = this.options.page || 0;\n this._updatePagesContent(this.page);\n this._repositionPages();\n this.trigger('reset');\n },\n _onResize: function () {\n this.pageCount = ceil(this.dataSource.total() / this.options.itemsPerPage);\n if (this._pendingPageRefresh) {\n this._updatePagesContent(this.page);\n this._pendingPageRefresh = false;\n }\n this.trigger('resize');\n },\n _onReset: function () {\n this.pageCount = ceil(this.dataSource.total() / this.options.itemsPerPage);\n this._resetPages();\n },\n _onEndReached: function () {\n this._pendingPageRefresh = true;\n },\n _repositionPages: function () {\n var pages = this.pages;\n pages[0].position(LEFT_PAGE);\n pages[1].position(CETER_PAGE);\n pages[2].position(RIGHT_PAGE);\n },\n _updatePagesContent: function (offset) {\n var pages = this.pages, currentPage = offset || 0;\n this.setPageContent(pages[0], currentPage - 1);\n this.setPageContent(pages[1], currentPage);\n this.setPageContent(pages[2], currentPage + 1);\n },\n setPageContent: function (page, index) {\n var buffer = this.buffer, template = this.template, emptyTemplate = this.emptyTemplate, view = null;\n if (index >= 0) {\n view = buffer.at(index);\n if ($.isArray(view) && !view.length) {\n view = null;\n }\n }\n this.trigger(CLEANUP, { item: page.element });\n if (view !== null) {\n page.content(template(view));\n } else {\n page.content(emptyTemplate({}));\n }\n kendo.mobile.init(page.element);\n this.trigger(ITEM_CHANGE, {\n item: page.element,\n data: view,\n ns: kendo.mobile.ui\n });\n }\n });\n kendo.mobile.ui.VirtualScrollViewContent = VirtualScrollViewContent;\n var Page = kendo.Class.extend({\n init: function (container) {\n this.element = $('
                ');\n this.width = container.width();\n this.element.width(this.width);\n container.append(this.element);\n },\n content: function (theContent) {\n this.element.html(theContent);\n },\n position: function (position) {\n this.element.css('transform', 'translate3d(' + this.width * position + 'px, 0, 0)');\n },\n setWidth: function (width) {\n this.width = width;\n this.element.width(width);\n }\n });\n kendo.mobile.ui.VirtualPage = Page;\n var ScrollView = Widget.extend({\n init: function (element, options) {\n var that = this;\n Widget.fn.init.call(that, element, options);\n options = that.options;\n element = that.element;\n kendo.stripWhitespace(element[0]);\n element.wrapInner('
                ').addClass('k-widget ' + className('scrollview'));\n if (this.options.enablePager) {\n this.pager = new Pager(this);\n if (this.options.pagerOverlay) {\n element.addClass(className('scrollview-overlay'));\n }\n }\n that.inner = element.children().first();\n that.page = 0;\n that.inner.css('height', options.contentHeight);\n that.pane = new ElasticPane(that.inner, {\n duration: this.options.duration,\n transitionEnd: proxy(this, '_transitionEnd'),\n dragStart: proxy(this, '_dragStart'),\n dragEnd: proxy(this, '_dragEnd'),\n change: proxy(this, REFRESH)\n });\n that.bind('resize', function () {\n that.pane.refresh();\n });\n that.page = options.page;\n var empty = this.inner.children().length === 0;\n var content = empty ? new VirtualScrollViewContent(that.inner, that.pane, options) : new ScrollViewContent(that.inner, that.pane, options);\n content.page = that.page;\n content.bind('reset', function () {\n this._pendingPageRefresh = false;\n that._syncWithContent();\n that.trigger(REFRESH, {\n pageCount: content.pageCount,\n page: content.page\n });\n });\n content.bind('resize', function () {\n that.trigger(REFRESH, {\n pageCount: content.pageCount,\n page: content.page\n });\n });\n content.bind(ITEM_CHANGE, function (e) {\n that.trigger(ITEM_CHANGE, e);\n that.angular('compile', function () {\n return {\n elements: e.item,\n data: [{ dataItem: e.data }]\n };\n });\n });\n content.bind(CLEANUP, function (e) {\n that.angular('cleanup', function () {\n return { elements: e.item };\n });\n });\n that._content = content;\n that.setDataSource(options.dataSource);\n var mobileContainer = that.container();\n if (mobileContainer.nullObject) {\n that.viewInit();\n that.viewShow();\n } else {\n mobileContainer.bind('show', proxy(this, 'viewShow')).bind('init', proxy(this, 'viewInit'));\n }\n },\n options: {\n name: 'ScrollView',\n page: 0,\n duration: 400,\n velocityThreshold: 0.8,\n contentHeight: 'auto',\n pageSize: 1,\n itemsPerPage: 1,\n bounceVelocityThreshold: 1.6,\n enablePager: true,\n pagerOverlay: false,\n autoBind: true,\n template: '',\n emptyTemplate: ''\n },\n events: [\n CHANGING,\n CHANGE,\n REFRESH\n ],\n destroy: function () {\n Widget.fn.destroy.call(this);\n kendo.destroy(this.element);\n },\n viewInit: function () {\n if (this.options.autoBind) {\n this._content.scrollTo(this._content.page, true);\n }\n },\n viewShow: function () {\n this.pane.refresh();\n },\n refresh: function () {\n var content = this._content;\n content.resizeTo(this.pane.size());\n this.page = content.page;\n this.trigger(REFRESH, {\n pageCount: content.pageCount,\n page: content.page\n });\n },\n content: function (html) {\n this.element.children().first().html(html);\n this._content._getPages();\n this.pane.refresh();\n },\n value: function (item) {\n var dataSource = this.dataSource;\n if (item) {\n this.scrollTo(dataSource.indexOf(item), true);\n } else {\n return dataSource.at(this.page);\n }\n },\n scrollTo: function (page, instant) {\n this._content.scrollTo(page, instant);\n this._syncWithContent();\n },\n prev: function () {\n var that = this, prevPage = that.page - 1;\n if (that._content instanceof VirtualScrollViewContent) {\n that._content.paneMoved(RIGHT_SWIPE, undefined, function (eventData) {\n return that.trigger(CHANGING, eventData);\n });\n } else if (prevPage > -1) {\n that.scrollTo(prevPage);\n }\n },\n next: function () {\n var that = this, nextPage = that.page + 1;\n if (that._content instanceof VirtualScrollViewContent) {\n that._content.paneMoved(LEFT_SWIPE, undefined, function (eventData) {\n return that.trigger(CHANGING, eventData);\n });\n } else if (nextPage < that._content.pageCount) {\n that.scrollTo(nextPage);\n }\n },\n setDataSource: function (dataSource) {\n if (!(this._content instanceof VirtualScrollViewContent)) {\n return;\n }\n var emptyDataSource = !dataSource;\n this.dataSource = DataSource.create(dataSource);\n this._content.setDataSource(this.dataSource);\n if (this.options.autoBind && !emptyDataSource) {\n this.dataSource.fetch();\n }\n },\n items: function () {\n return this.element.find('.km-' + VIRTUAL_PAGE_CLASS);\n },\n _syncWithContent: function () {\n var pages = this._content.pages, buffer = this._content.buffer, data, element;\n this.page = this._content.page;\n data = buffer ? buffer.at(this.page) : undefined;\n if (!(data instanceof Array)) {\n data = [data];\n }\n element = pages ? pages[1].element : undefined;\n this.trigger(CHANGE, {\n page: this.page,\n element: element,\n data: data\n });\n },\n _dragStart: function () {\n if (this._content.forcePageUpdate()) {\n this._syncWithContent();\n }\n },\n _dragEnd: function (e) {\n var that = this, velocity = e.x.velocity, velocityThreshold = this.options.velocityThreshold, swipeType = NUDGE, bounce = abs(velocity) > this.options.bounceVelocityThreshold;\n if (velocity > velocityThreshold) {\n swipeType = RIGHT_SWIPE;\n } else if (velocity < -velocityThreshold) {\n swipeType = LEFT_SWIPE;\n }\n this._content.paneMoved(swipeType, bounce, function (eventData) {\n return that.trigger(CHANGING, eventData);\n });\n },\n _transitionEnd: function () {\n if (this._content.updatePage()) {\n this._syncWithContent();\n }\n }\n });\n ui.plugin(ScrollView);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.mobile.switch', [\n 'kendo.fx',\n 'kendo.userevents'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'mobile.switch',\n name: 'Switch',\n category: 'mobile',\n description: 'The mobile Switch widget is used to display two exclusive choices.',\n depends: [\n 'fx',\n 'userevents'\n ]\n };\n (function ($, undefined) {\n var kendo = window.kendo, ui = kendo.mobile.ui, outerWidth = kendo._outerWidth, Widget = ui.Widget, support = kendo.support, CHANGE = 'change', SWITCHON = 'switch-on', SWITCHOFF = 'switch-off', MARGINLEFT = 'margin-left', ACTIVE_STATE = 'state-active', DISABLED_STATE = 'state-disabled', DISABLED = 'disabled', TRANSFORMSTYLE = support.transitions.css + 'transform', proxy = $.proxy;\n function className(name) {\n return 'k-' + name + ' km-' + name;\n }\n function limitValue(value, minLimit, maxLimit) {\n return Math.max(minLimit, Math.min(maxLimit, value));\n }\n var SWITCH_MARKUP = ' {0} {1} ';\n var Switch = Widget.extend({\n init: function (element, options) {\n var that = this, checked;\n Widget.fn.init.call(that, element, options);\n options = that.options;\n that.wrapper = $(kendo.format(SWITCH_MARKUP, options.onLabel, options.offLabel));\n that.handle = that.wrapper.find('.km-switch-handle');\n that.background = that.wrapper.find('.km-switch-background');\n that.wrapper.insertBefore(that.element).prepend(that.element);\n that._drag();\n that.origin = parseInt(that.background.css(MARGINLEFT), 10);\n that.constrain = 0;\n that.snapPoint = 0;\n element = that.element[0];\n element.type = 'checkbox';\n that._animateBackground = true;\n checked = that.options.checked;\n if (checked === null) {\n checked = element.checked;\n }\n that.check(checked);\n that.options.enable = that.options.enable && !that.element.attr(DISABLED);\n that.enable(that.options.enable);\n that.refresh();\n kendo.notify(that, kendo.mobile.ui);\n },\n refresh: function () {\n var that = this, handleWidth = outerWidth(that.handle, true);\n that.width = that.wrapper.width();\n that.constrain = that.width - handleWidth;\n that.snapPoint = that.constrain / 2;\n if (typeof that.origin != 'number') {\n that.origin = parseInt(that.background.css(MARGINLEFT), 10);\n }\n that.background.data('origin', that.origin);\n that.check(that.element[0].checked);\n },\n events: [CHANGE],\n options: {\n name: 'Switch',\n onLabel: 'on',\n offLabel: 'off',\n checked: null,\n enable: true\n },\n check: function (check) {\n var that = this, element = that.element[0];\n if (check === undefined) {\n return element.checked;\n }\n that._position(check ? that.constrain : 0);\n element.checked = check;\n that.wrapper.toggleClass(className(SWITCHON), check).toggleClass(className(SWITCHOFF), !check);\n },\n value: function () {\n return this.check.apply(this, arguments);\n },\n destroy: function () {\n Widget.fn.destroy.call(this);\n this.userEvents.destroy();\n },\n toggle: function () {\n var that = this;\n that.check(!that.element[0].checked);\n },\n enable: function (enable) {\n var element = this.element, wrapper = this.wrapper;\n if (typeof enable == 'undefined') {\n enable = true;\n }\n this.options.enable = enable;\n if (enable) {\n element.removeAttr(DISABLED);\n } else {\n element.attr(DISABLED, DISABLED);\n }\n wrapper.toggleClass(className(DISABLED_STATE), !enable);\n },\n _resize: function () {\n this.refresh();\n },\n _move: function (e) {\n var that = this;\n e.preventDefault();\n that._position(limitValue(that.position + e.x.delta, 0, that.width - outerWidth(that.handle, true)));\n },\n _position: function (position) {\n var that = this;\n that.position = position;\n that.handle.css(TRANSFORMSTYLE, 'translatex(' + position + 'px)');\n if (that._animateBackground) {\n that.background.css(MARGINLEFT, that.origin + position);\n }\n },\n _start: function () {\n if (!this.options.enable) {\n this.userEvents.cancel();\n } else {\n this.userEvents.capture();\n this.handle.addClass(className(ACTIVE_STATE));\n }\n },\n _stop: function () {\n var that = this;\n that.handle.removeClass(className(ACTIVE_STATE));\n that._toggle(that.position > that.snapPoint);\n },\n _toggle: function (checked) {\n var that = this, handle = that.handle, element = that.element[0], value = element.checked, duration = kendo.mobile.application && kendo.mobile.application.os.wp ? 100 : 200, distance;\n that.wrapper.toggleClass(className(SWITCHON), checked).toggleClass(className(SWITCHOFF), !checked);\n that.position = distance = checked * that.constrain;\n if (that._animateBackground) {\n that.background.kendoStop(true, true).kendoAnimate({\n effects: 'slideMargin',\n offset: distance,\n reset: true,\n reverse: !checked,\n axis: 'left',\n duration: duration\n });\n }\n handle.kendoStop(true, true).kendoAnimate({\n effects: 'slideTo',\n duration: duration,\n offset: distance + 'px,0',\n reset: true,\n complete: function () {\n if (value !== checked) {\n element.checked = checked;\n that.trigger(CHANGE, { checked: checked });\n }\n }\n });\n },\n _drag: function () {\n var that = this;\n that.userEvents = new kendo.UserEvents(that.wrapper, {\n fastTap: true,\n tap: function () {\n if (that.options.enable) {\n that._toggle(!that.element[0].checked);\n }\n },\n start: proxy(that._start, that),\n move: proxy(that._move, that),\n end: proxy(that._stop, that)\n });\n }\n });\n ui.plugin(Switch);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.mobile.tabstrip', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'mobile.tabstrip',\n name: 'TabStrip',\n category: 'mobile',\n description: 'The mobile TabStrip widget is used inside a mobile view or layout footer element to display an application-wide group of navigation buttons.',\n depends: ['core']\n };\n (function ($, undefined) {\n var kendo = window.kendo, ui = kendo.mobile.ui, Widget = ui.Widget, ACTIVE_STATE_CLASS = 'km-state-active', SELECT = 'select';\n function createBadge(value) {\n return $('' + value + '');\n }\n var TabStrip = Widget.extend({\n init: function (element, options) {\n var that = this;\n Widget.fn.init.call(that, element, options);\n that.container().bind('show', $.proxy(this, 'refresh'));\n that.element.addClass('km-tabstrip').find('a').each(that._buildButton).eq(that.options.selectedIndex).addClass(ACTIVE_STATE_CLASS);\n that.element.on('down', 'a', '_release');\n },\n events: [SELECT],\n switchTo: function (url) {\n var tabs = this.element.find('a'), tab, path, idx = 0, length = tabs.length;\n if (isNaN(url)) {\n for (; idx < length; idx++) {\n tab = tabs[idx];\n path = tab.href.replace(/(\\#.+)(\\?.+)$/, '$1');\n if (path.indexOf(url, path.length - url.length) !== -1) {\n this._setActiveItem($(tab));\n return true;\n }\n }\n } else {\n this._setActiveItem(tabs.eq(url));\n return true;\n }\n return false;\n },\n switchByFullUrl: function (url) {\n var tab;\n tab = this.element.find('a[href$=\\'' + url + '\\']');\n this._setActiveItem(tab);\n },\n clear: function () {\n this.currentItem().removeClass(ACTIVE_STATE_CLASS);\n },\n currentItem: function () {\n return this.element.children('.' + ACTIVE_STATE_CLASS);\n },\n badge: function (item, value) {\n var tabstrip = this.element, badge;\n if (!isNaN(item)) {\n item = tabstrip.children().get(item);\n }\n item = tabstrip.find(item);\n badge = $(item.find('.km-badge')[0] || createBadge(value).insertAfter(item.children('.km-icon')));\n if (value || value === 0) {\n badge.html(value);\n return this;\n }\n if (value === false) {\n badge.empty().remove();\n return this;\n }\n return badge.html();\n },\n _release: function (e) {\n if (e.which > 1) {\n return;\n }\n var that = this, item = $(e.currentTarget);\n if (item[0] === that.currentItem()[0]) {\n return;\n }\n if (that.trigger(SELECT, { item: item })) {\n e.preventDefault();\n } else {\n that._setActiveItem(item);\n }\n },\n _setActiveItem: function (item) {\n if (!item[0]) {\n return;\n }\n this.clear();\n item.addClass(ACTIVE_STATE_CLASS);\n },\n _buildButton: function () {\n var button = $(this), icon = kendo.attrValue(button, 'icon'), badge = kendo.attrValue(button, 'badge'), image = button.find('img'), iconSpan = $('');\n button.addClass('km-button').attr(kendo.attr('role'), 'tab').contents().not(image).wrapAll('');\n if (image[0]) {\n image.addClass('km-image').prependTo(button);\n } else {\n button.prepend(iconSpan);\n if (icon) {\n iconSpan.addClass('km-' + icon);\n if (badge || badge === 0) {\n createBadge(badge).insertAfter(iconSpan);\n }\n }\n }\n },\n refresh: function (e) {\n var url = e.view.id;\n if (url && !this.switchTo(e.view.id)) {\n this.switchTo(url);\n }\n },\n options: {\n name: 'TabStrip',\n selectedIndex: 0,\n enable: true\n }\n });\n ui.plugin(TabStrip);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.angular', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'angular',\n name: 'AngularJS Directives',\n category: 'framework',\n description: 'Adds Kendo UI for AngularJS directives',\n depends: ['core'],\n defer: true\n };\n (function ($, angular, undefined) {\n 'use strict';\n if (!angular || !angular.injector) {\n return;\n }\n var module = angular.module('kendo.directives', []), $injector = angular.injector(['ng']), $parse = $injector.get('$parse'), $timeout = $injector.get('$timeout'), $defaultCompile, $log = $injector.get('$log');\n function withoutTimeout(f) {\n var save = $timeout;\n try {\n $timeout = function (f) {\n return f();\n };\n return f();\n } finally {\n $timeout = save;\n }\n }\n var OPTIONS_NOW;\n var createDataSource = function () {\n var types = {\n TreeList: 'TreeListDataSource',\n TreeView: 'HierarchicalDataSource',\n Scheduler: 'SchedulerDataSource',\n PivotGrid: 'PivotDataSource',\n PivotConfigurator: 'PivotDataSource',\n PanelBar: 'HierarchicalDataSource',\n Menu: '$PLAIN',\n ContextMenu: '$PLAIN'\n };\n var toDataSource = function (dataSource, type) {\n if (type == '$PLAIN') {\n return dataSource;\n }\n return kendo.data[type].create(dataSource);\n };\n return function (scope, element, role, source) {\n var type = types[role] || 'DataSource';\n var current = scope.$eval(source);\n var ds = toDataSource(current, type);\n scope.$watch(source, function (mew) {\n var widget = kendoWidgetInstance(element);\n if (widget && typeof widget.setDataSource == 'function') {\n if (mew !== current) {\n var ds = toDataSource(mew, type);\n widget.setDataSource(ds);\n current = mew;\n }\n }\n });\n return ds;\n };\n }();\n var ignoredAttributes = {\n kDataSource: true,\n kOptions: true,\n kRebind: true,\n kNgModel: true,\n kNgDelay: true\n };\n var ignoredOwnProperties = {\n name: true,\n title: true,\n style: true\n };\n function createWidget(scope, element, attrs, widget, origAttr, controllers) {\n if (!(element instanceof jQuery)) {\n throw new Error('The Kendo UI directives require jQuery to be available before AngularJS. Please include jquery before angular in the document.');\n }\n var kNgDelay = attrs.kNgDelay, delayValue = scope.$eval(kNgDelay);\n controllers = controllers || [];\n var ngModel = controllers[0], ngForm = controllers[1];\n var ctor = $(element)[widget];\n if (!ctor) {\n window.console.error('Could not find: ' + widget);\n return null;\n }\n var parsed = parseOptions(scope, element, attrs, widget, ctor);\n var options = parsed.options;\n if (parsed.unresolved.length) {\n var promises = [];\n for (var i = 0, len = parsed.unresolved.length; i < len; i++) {\n var unresolved = parsed.unresolved[i];\n var promise = $.Deferred(function (d) {\n var unwatch = scope.$watch(unresolved.path, function (newValue) {\n if (newValue !== undefined) {\n unwatch();\n d.resolve();\n }\n });\n }).promise();\n promises.push(promise);\n }\n $.when.apply(null, promises).then(createIt);\n return;\n }\n if (kNgDelay && !delayValue) {\n var root = scope.$root || scope;\n var register = function () {\n var unregister = scope.$watch(kNgDelay, function (newValue) {\n if (newValue !== undefined) {\n unregister();\n element.removeAttr(attrs.$attr.kNgDelay);\n kNgDelay = null;\n $timeout(createIt);\n }\n });\n };\n if (/^\\$(digest|apply)$/.test(root.$$phase)) {\n register();\n } else {\n scope.$apply(register);\n }\n return;\n } else {\n return createIt();\n }\n function createIt() {\n var originalElement;\n if (attrs.kRebind) {\n originalElement = $($(element)[0].cloneNode(true));\n }\n options = parseOptions(scope, element, attrs, widget, ctor).options;\n if (element.is('select')) {\n (function (options) {\n if (options.length > 0) {\n var first = $(options[0]);\n if (!/\\S/.test(first.text()) && /^\\?/.test(first.val())) {\n first.remove();\n }\n }\n }(element[0].options));\n }\n var object = ctor.call(element, OPTIONS_NOW = options).data(widget);\n exposeWidget(object, scope, attrs, widget, origAttr);\n scope.$emit('kendoWidgetCreated', object);\n var destroyRegister = destroyWidgetOnScopeDestroy(scope, object);\n if (attrs.kRebind) {\n setupRebind(object, scope, element, originalElement, attrs.kRebind, destroyRegister, attrs);\n }\n if (attrs.kNgDisabled) {\n var kNgDisabled = attrs.kNgDisabled;\n var isDisabled = scope.$eval(kNgDisabled);\n if (isDisabled) {\n object.enable(!isDisabled);\n }\n bindToKNgDisabled(object, scope, element, kNgDisabled);\n }\n if (attrs.kNgReadonly) {\n var kNgReadonly = attrs.kNgReadonly;\n var isReadonly = scope.$eval(kNgReadonly);\n if (isReadonly) {\n object.readonly(isReadonly);\n }\n bindToKNgReadonly(object, scope, element, kNgReadonly);\n }\n if (attrs.kNgModel) {\n bindToKNgModel(object, scope, attrs.kNgModel);\n }\n if (ngModel) {\n bindToNgModel(object, scope, element, ngModel, ngForm);\n }\n if (object) {\n propagateClassToWidgetWrapper(object, element);\n }\n return object;\n }\n }\n function parseOptions(scope, element, attrs, widget, ctor) {\n var role = widget.replace(/^kendo/, '');\n var unresolved = [];\n var optionsPath = attrs.kOptions || attrs.options;\n var optionsValue = scope.$eval(optionsPath);\n if (optionsPath && optionsValue === undefined) {\n unresolved.push({\n option: 'options',\n path: optionsPath\n });\n }\n var options = angular.extend({}, attrs.defaultOptions, optionsValue);\n function addOption(name, value) {\n var scopeValue = angular.copy(scope.$eval(value));\n if (scopeValue === undefined) {\n unresolved.push({\n option: name,\n path: value\n });\n } else {\n options[name] = scopeValue;\n }\n }\n var widgetOptions = ctor.widget.prototype.options;\n var widgetEvents = ctor.widget.prototype.events;\n $.each(attrs, function (name, value) {\n if (name === 'source' || name === 'kDataSource' || name === 'kScopeField' || name === 'scopeField') {\n return;\n }\n var dataName = 'data' + name.charAt(0).toUpperCase() + name.slice(1);\n if (name.indexOf('on') === 0) {\n var eventKey = name.replace(/^on./, function (prefix) {\n return prefix.charAt(2).toLowerCase();\n });\n if (widgetEvents.indexOf(eventKey) > -1) {\n options[eventKey] = value;\n }\n }\n if (widgetOptions.hasOwnProperty(dataName)) {\n addOption(dataName, value);\n } else if (widgetOptions.hasOwnProperty(name) && !ignoredOwnProperties[name]) {\n addOption(name, value);\n } else if (!ignoredAttributes[name]) {\n var match = name.match(/^k(On)?([A-Z].*)/);\n if (match) {\n var optionName = match[2].charAt(0).toLowerCase() + match[2].slice(1);\n if (match[1] && name != 'kOnLabel') {\n options[optionName] = value;\n } else {\n if (name == 'kOnLabel') {\n optionName = 'onLabel';\n }\n addOption(optionName, value);\n }\n }\n }\n });\n var dataSource = attrs.kDataSource || attrs.source;\n if (dataSource) {\n options.dataSource = createDataSource(scope, element, role, dataSource);\n }\n options.$angular = [scope];\n return {\n options: options,\n unresolved: unresolved\n };\n }\n function bindToKNgDisabled(widget, scope, element, kNgDisabled) {\n if (kendo.ui.PanelBar && widget instanceof kendo.ui.PanelBar || kendo.ui.Menu && widget instanceof kendo.ui.Menu) {\n $log.warn('k-ng-disabled specified on a widget that does not have the enable() method: ' + widget.options.name);\n return;\n }\n scope.$watch(kNgDisabled, function (newValue, oldValue) {\n if (newValue != oldValue) {\n widget.enable(!newValue);\n }\n });\n }\n function bindToKNgReadonly(widget, scope, element, kNgReadonly) {\n if (typeof widget.readonly != 'function') {\n $log.warn('k-ng-readonly specified on a widget that does not have the readonly() method: ' + widget.options.name);\n return;\n }\n scope.$watch(kNgReadonly, function (newValue, oldValue) {\n if (newValue != oldValue) {\n widget.readonly(newValue);\n }\n });\n }\n function exposeWidget(widget, scope, attrs, kendoWidget, origAttr) {\n if (attrs[origAttr]) {\n var set = $parse(attrs[origAttr]).assign;\n if (set) {\n set(scope, widget);\n } else {\n throw new Error(origAttr + ' attribute used but expression in it is not assignable: ' + attrs[kendoWidget]);\n }\n }\n }\n function formValue(element) {\n if (/checkbox|radio/i.test(element.attr('type'))) {\n return element.prop('checked');\n }\n return element.val();\n }\n var formRegExp = /^(input|select|textarea)$/i;\n function isForm(element) {\n return formRegExp.test(element[0].tagName);\n }\n function bindToNgModel(widget, scope, element, ngModel, ngForm) {\n if (!widget.value) {\n return;\n }\n var value;\n var haveChangeOnElement = false;\n if (isForm(element)) {\n value = function () {\n return formValue(element);\n };\n } else {\n value = function () {\n return widget.value();\n };\n }\n var viewRender = function () {\n var val = ngModel.$viewValue;\n if (val === undefined) {\n val = ngModel.$modelValue;\n }\n if (val === undefined) {\n val = null;\n }\n haveChangeOnElement = true;\n setTimeout(function () {\n haveChangeOnElement = false;\n if (widget) {\n var kNgModel = scope[widget.element.attr('k-ng-model')];\n if (kNgModel) {\n val = kNgModel;\n }\n if (widget.options.autoBind === false && !widget.listView.bound()) {\n if (val) {\n widget.value(val);\n }\n } else {\n widget.value(val);\n }\n }\n }, 0);\n };\n ngModel.$render = viewRender;\n setTimeout(function () {\n if (ngModel.$render !== viewRender) {\n ngModel.$render = viewRender;\n ngModel.$render();\n }\n });\n if (isForm(element)) {\n element.on('change', function () {\n haveChangeOnElement = true;\n });\n }\n var onChange = function (pristine) {\n return function () {\n var formPristine;\n if (haveChangeOnElement && !element.is('select')) {\n return;\n }\n if (pristine && ngForm) {\n formPristine = ngForm.$pristine;\n }\n ngModel.$setViewValue(value());\n if (pristine) {\n ngModel.$setPristine();\n if (formPristine) {\n ngForm.$setPristine();\n }\n }\n digest(scope);\n };\n };\n widget.first('change', onChange(false));\n widget.first('spin', onChange(false));\n if (!(kendo.ui.AutoComplete && widget instanceof kendo.ui.AutoComplete)) {\n widget.first('dataBound', onChange(true));\n }\n var currentVal = value();\n if (!isNaN(ngModel.$viewValue) && currentVal != ngModel.$viewValue) {\n if (!ngModel.$isEmpty(ngModel.$viewValue)) {\n widget.value(ngModel.$viewValue);\n } else if (currentVal != null && currentVal !== '' && currentVal != ngModel.$viewValue) {\n ngModel.$setViewValue(currentVal);\n }\n }\n ngModel.$setPristine();\n }\n function bindToKNgModel(widget, scope, kNgModel) {\n if (typeof widget.value != 'function') {\n $log.warn('k-ng-model specified on a widget that does not have the value() method: ' + widget.options.name);\n return;\n }\n var form = $(widget.element).parents('form');\n var ngForm = kendo.getter(form.attr('name'), true)(scope);\n var getter = $parse(kNgModel);\n var setter = getter.assign;\n var updating = false;\n var valueIsCollection = kendo.ui.MultiSelect && widget instanceof kendo.ui.MultiSelect;\n var length = function (value) {\n return value && valueIsCollection ? value.length : 0;\n };\n var currentValueLength = length(getter(scope));\n widget.$angular_setLogicValue(getter(scope));\n var watchHandler = function (newValue, oldValue) {\n if (newValue === undefined) {\n newValue = null;\n }\n if (updating || newValue == oldValue && length(newValue) == currentValueLength) {\n return;\n }\n currentValueLength = length(newValue);\n widget.$angular_setLogicValue(newValue);\n };\n if (valueIsCollection) {\n scope.$watchCollection(kNgModel, watchHandler);\n } else {\n scope.$watch(kNgModel, watchHandler);\n }\n var changeHandler = function () {\n updating = true;\n if (ngForm && ngForm.$pristine) {\n ngForm.$setDirty();\n }\n digest(scope, function () {\n setter(scope, widget.$angular_getLogicValue());\n currentValueLength = length(getter(scope));\n });\n updating = false;\n };\n widget.first('change', changeHandler);\n widget.first('spin', changeHandler);\n }\n function destroyWidgetOnScopeDestroy(scope, widget) {\n var deregister = scope.$on('$destroy', function () {\n deregister();\n if (widget) {\n kendo.destroy(widget.element);\n widget = null;\n }\n });\n return deregister;\n }\n function propagateClassToWidgetWrapper(widget, element) {\n if (!(window.MutationObserver && widget.wrapper)) {\n return;\n }\n var prevClassList = [].slice.call($(element)[0].classList);\n var mo = new MutationObserver(function (changes) {\n suspend();\n if (!widget) {\n return;\n }\n changes.forEach(function (chg) {\n var w = $(widget.wrapper)[0];\n switch (chg.attributeName) {\n case 'class':\n var currClassList = [].slice.call(chg.target.classList);\n currClassList.forEach(function (cls) {\n if (prevClassList.indexOf(cls) < 0) {\n w.classList.add(cls);\n if (kendo.ui.ComboBox && widget instanceof kendo.ui.ComboBox) {\n widget.input[0].classList.add(cls);\n }\n }\n });\n prevClassList.forEach(function (cls) {\n if (currClassList.indexOf(cls) < 0) {\n w.classList.remove(cls);\n if (kendo.ui.ComboBox && widget instanceof kendo.ui.ComboBox) {\n widget.input[0].classList.remove(cls);\n }\n }\n });\n prevClassList = currClassList;\n break;\n case 'disabled':\n if (typeof widget.enable == 'function' && !widget.element.attr('readonly')) {\n widget.enable(!$(chg.target).attr('disabled'));\n }\n break;\n case 'readonly':\n if (typeof widget.readonly == 'function' && !widget.element.attr('disabled')) {\n widget.readonly(!!$(chg.target).attr('readonly'));\n }\n break;\n }\n });\n resume();\n });\n function suspend() {\n mo.disconnect();\n }\n function resume() {\n mo.observe($(element)[0], { attributes: true });\n }\n resume();\n widget.first('destroy', suspend);\n }\n function setupRebind(widget, scope, element, originalElement, rebindAttr, destroyRegister, attrs) {\n var unregister = scope.$watch(rebindAttr, function (newValue, oldValue) {\n if (!widget._muteRebind && newValue !== oldValue) {\n unregister();\n if (attrs._cleanUp) {\n attrs._cleanUp();\n }\n var templateOptions = WIDGET_TEMPLATE_OPTIONS[widget.options.name];\n if (templateOptions) {\n templateOptions.forEach(function (name) {\n var templateContents = scope.$eval(attrs['k' + name]);\n if (templateContents) {\n originalElement.append($(templateContents).attr(kendo.toHyphens('k' + name), ''));\n }\n });\n }\n var _wrapper = $(widget.wrapper)[0];\n var _element = $(widget.element)[0];\n var isUpload = widget.options.name === 'Upload';\n if (isUpload) {\n element = $(_element);\n }\n var compile = element.injector().get('$compile');\n widget._destroy();\n if (destroyRegister) {\n destroyRegister();\n }\n widget = null;\n if (_element) {\n if (_wrapper) {\n _wrapper.parentNode.replaceChild(_element, _wrapper);\n }\n $(element).replaceWith(originalElement);\n }\n compile(originalElement)(scope);\n }\n }, true);\n digest(scope);\n }\n function bind(f, obj) {\n return function (a, b) {\n return f.call(obj, a, b);\n };\n }\n function setTemplate(key, value) {\n this[key] = kendo.stringify(value);\n }\n module.factory('directiveFactory', [\n '$compile',\n function (compile) {\n var kendoRenderedTimeout;\n var RENDERED = false;\n $defaultCompile = compile;\n var create = function (role, origAttr) {\n return {\n restrict: 'AC',\n require: [\n '?ngModel',\n '^?form'\n ],\n scope: false,\n controller: [\n '$scope',\n '$attrs',\n '$element',\n function ($scope, $attrs) {\n this.template = bind(setTemplate, $attrs);\n $attrs._cleanUp = bind(function () {\n this.template = null;\n $attrs._cleanUp = null;\n }, this);\n }\n ],\n link: function (scope, element, attrs, controllers) {\n var $element = $(element);\n var roleattr = role.replace(/([A-Z])/g, '-$1');\n $element.attr(roleattr, $element.attr('data-' + roleattr));\n $element[0].removeAttribute('data-' + roleattr);\n var widget = createWidget(scope, element, attrs, role, origAttr, controllers);\n if (!widget) {\n return;\n }\n if (kendoRenderedTimeout) {\n clearTimeout(kendoRenderedTimeout);\n }\n kendoRenderedTimeout = setTimeout(function () {\n scope.$emit('kendoRendered');\n if (!RENDERED) {\n RENDERED = true;\n $('form').each(function () {\n var form = $(this).controller('form');\n if (form) {\n form.$setPristine();\n }\n });\n }\n });\n }\n };\n };\n return { create: create };\n }\n ]);\n var TAGNAMES = {\n Editor: 'textarea',\n NumericTextBox: 'input',\n DatePicker: 'input',\n DateTimePicker: 'input',\n TimePicker: 'input',\n AutoComplete: 'input',\n ColorPicker: 'input',\n MaskedTextBox: 'input',\n MultiSelect: 'input',\n Upload: 'input',\n Validator: 'form',\n Button: 'button',\n MobileButton: 'a',\n MobileBackButton: 'a',\n MobileDetailButton: 'a',\n ListView: 'ul',\n MobileListView: 'ul',\n PanelBar: 'ul',\n TreeView: 'ul',\n Menu: 'ul',\n ContextMenu: 'ul',\n ActionSheet: 'ul'\n };\n var SKIP_SHORTCUTS = [\n 'MobileView',\n 'MobileDrawer',\n 'MobileLayout',\n 'MobileSplitView',\n 'MobilePane',\n 'MobileModalView'\n ];\n var MANUAL_DIRECTIVES = [\n 'MobileApplication',\n 'MobileView',\n 'MobileModalView',\n 'MobileLayout',\n 'MobileActionSheet',\n 'MobileDrawer',\n 'MobileSplitView',\n 'MobilePane',\n 'MobileScrollView',\n 'MobilePopOver'\n ];\n angular.forEach([\n 'MobileNavBar',\n 'MobileButton',\n 'MobileBackButton',\n 'MobileDetailButton',\n 'MobileTabStrip',\n 'MobileScrollView',\n 'MobileScroller'\n ], function (widget) {\n MANUAL_DIRECTIVES.push(widget);\n widget = 'kendo' + widget;\n module.directive(widget, function () {\n return {\n restrict: 'A',\n link: function (scope, element, attrs) {\n createWidget(scope, element, attrs, widget, widget);\n }\n };\n });\n });\n function createDirectives(klass, isMobile) {\n function make(directiveName, widgetName) {\n module.directive(directiveName, [\n 'directiveFactory',\n function (directiveFactory) {\n return directiveFactory.create(widgetName, directiveName);\n }\n ]);\n }\n var name = isMobile ? 'Mobile' : '';\n name += klass.fn.options.name;\n var className = name;\n var shortcut = 'kendo' + name.charAt(0) + name.substr(1).toLowerCase();\n name = 'kendo' + name;\n var dashed = name.replace(/([A-Z])/g, '-$1');\n if (SKIP_SHORTCUTS.indexOf(name.replace('kendo', '')) == -1) {\n var names = name === shortcut ? [name] : [\n name,\n shortcut\n ];\n angular.forEach(names, function (directiveName) {\n module.directive(directiveName, function () {\n return {\n restrict: 'E',\n replace: true,\n template: function (element, attributes) {\n var tag = TAGNAMES[className] || 'div';\n var scopeField = attributes.kScopeField || attributes.scopeField;\n return '<' + tag + ' ' + dashed + (scopeField ? '=\"' + scopeField + '\"' : '') + '>' + element.html() + '';\n }\n };\n });\n });\n }\n if (MANUAL_DIRECTIVES.indexOf(name.replace('kendo', '')) > -1) {\n return;\n }\n make(name, name);\n if (shortcut != name) {\n make(shortcut, name);\n }\n }\n function kendoWidgetInstance(el) {\n el = $(el);\n return kendo.widgetInstance(el, kendo.ui) || kendo.widgetInstance(el, kendo.mobile.ui) || kendo.widgetInstance(el, kendo.dataviz.ui);\n }\n function digest(scope, func) {\n var root = scope.$root || scope;\n var isDigesting = /^\\$(digest|apply)$/.test(root.$$phase);\n if (func) {\n if (isDigesting) {\n func();\n } else {\n root.$apply(func);\n }\n } else if (!isDigesting) {\n root.$digest();\n }\n }\n function destroyScope(scope, el) {\n scope.$destroy();\n if (el) {\n $(el).removeData('$scope').removeData('$$kendoScope').removeData('$isolateScope').removeData('$isolateScopeNoTemplate').removeClass('ng-scope');\n }\n }\n var pendingPatches = [];\n function defadvice(klass, methodName, func) {\n if ($.isArray(klass)) {\n return angular.forEach(klass, function (klass) {\n defadvice(klass, methodName, func);\n });\n }\n if (typeof klass == 'string') {\n var a = klass.split('.');\n var x = kendo;\n while (x && a.length > 0) {\n x = x[a.shift()];\n }\n if (!x) {\n pendingPatches.push([\n klass,\n methodName,\n func\n ]);\n return false;\n }\n klass = x.prototype;\n }\n var origMethod = klass[methodName];\n klass[methodName] = function () {\n var self = this, args = arguments;\n return func.apply({\n self: self,\n next: function () {\n return origMethod.apply(self, arguments.length > 0 ? arguments : args);\n }\n }, args);\n };\n return true;\n }\n kendo.onWidgetRegistered(function (entry) {\n pendingPatches = $.grep(pendingPatches, function (args) {\n return !defadvice.apply(null, args);\n });\n createDirectives(entry.widget, entry.prefix == 'Mobile');\n });\n defadvice([\n 'ui.Widget',\n 'mobile.ui.Widget'\n ], 'angular', function (cmd, arg) {\n var self = this.self;\n if (cmd == 'init') {\n if (!arg && OPTIONS_NOW) {\n arg = OPTIONS_NOW;\n }\n OPTIONS_NOW = null;\n if (arg && arg.$angular) {\n self.$angular_scope = arg.$angular[0];\n self.$angular_init(self.element, arg);\n }\n return;\n }\n var scope = self.$angular_scope;\n if (scope) {\n withoutTimeout(function () {\n var x = arg(), elements = x.elements, data = x.data;\n if (elements.length > 0) {\n switch (cmd) {\n case 'cleanup':\n angular.forEach(elements, function (el) {\n var itemScope = $(el).data('$$kendoScope');\n if (itemScope && itemScope !== scope && itemScope.$$kendoScope) {\n destroyScope(itemScope, el);\n }\n });\n break;\n case 'compile':\n var injector = self.element.injector();\n var compile = injector ? injector.get('$compile') : $defaultCompile;\n angular.forEach(elements, function (el, i) {\n var itemScope;\n if (x.scopeFrom) {\n itemScope = x.scopeFrom;\n } else {\n var vars = data && data[i];\n if (vars !== undefined) {\n itemScope = $.extend(scope.$new(), vars);\n itemScope.$$kendoScope = true;\n } else {\n itemScope = scope;\n }\n }\n $(el).data('$$kendoScope', itemScope);\n compile(el)(itemScope);\n });\n digest(scope);\n break;\n }\n }\n });\n }\n });\n defadvice('ui.Widget', '$angular_getLogicValue', function () {\n return this.self.value();\n });\n defadvice('ui.Widget', '$angular_setLogicValue', function (val) {\n this.self.value(val);\n });\n defadvice('ui.Select', '$angular_getLogicValue', function () {\n var item = this.self.dataItem(), valueField = this.self.options.dataValueField;\n if (item) {\n if (this.self.options.valuePrimitive) {\n if (!!valueField) {\n return item[valueField];\n } else {\n return item;\n }\n } else {\n return item.toJSON();\n }\n } else {\n return null;\n }\n });\n defadvice('ui.Select', '$angular_setLogicValue', function (val) {\n var self = this.self;\n var options = self.options;\n var valueField = options.dataValueField;\n var text = options.text || '';\n if (val === undefined) {\n val = '';\n }\n if (valueField && !options.valuePrimitive && val) {\n text = val[options.dataTextField] || '';\n val = val[valueField || options.dataTextField];\n }\n if (self.options.autoBind === false && !self.listView.bound()) {\n if (!text && val && options.valuePrimitive) {\n self.value(val);\n } else {\n self._preselect(val, text);\n }\n } else {\n self.value(val);\n }\n });\n defadvice('ui.MultiSelect', '$angular_getLogicValue', function () {\n var value = this.self.dataItems().slice(0);\n var valueField = this.self.options.dataValueField;\n if (valueField && this.self.options.valuePrimitive) {\n value = $.map(value, function (item) {\n return item[valueField];\n });\n }\n return value;\n });\n defadvice('ui.MultiSelect', '$angular_setLogicValue', function (val) {\n if (val == null) {\n val = [];\n }\n var self = this.self;\n var options = self.options;\n var valueField = options.dataValueField;\n var data = val;\n if (valueField && !options.valuePrimitive) {\n val = $.map(val, function (item) {\n return item[valueField];\n });\n }\n if (options.autoBind === false && !options.valuePrimitive && !self.listView.bound()) {\n self._preselect(data, val);\n } else {\n self.value(val);\n }\n });\n defadvice('ui.Widget', '$angular_init', function (element, options) {\n var self = this.self;\n if (options && !$.isArray(options)) {\n var scope = self.$angular_scope;\n for (var i = self.events.length; --i >= 0;) {\n var event = self.events[i];\n var handler = options[event];\n if (handler && typeof handler == 'string') {\n options[event] = self.$angular_makeEventHandler(event, scope, handler);\n }\n }\n }\n });\n defadvice('ui.Widget', '$angular_makeEventHandler', function (event, scope, handler) {\n handler = $parse(handler);\n return function (e) {\n digest(scope, function () {\n handler(scope, { kendoEvent: e });\n });\n };\n });\n defadvice([\n 'ui.Grid',\n 'ui.ListView',\n 'ui.TreeView',\n 'ui.PanelBar'\n ], '$angular_makeEventHandler', function (event, scope, handler) {\n if (event != 'change') {\n return this.next();\n }\n handler = $parse(handler);\n return function (ev) {\n var widget = ev.sender;\n var options = widget.options;\n var cell, multiple, locals = { kendoEvent: ev }, elems, items, columns, colIdx;\n if (angular.isString(options.selectable)) {\n cell = options.selectable.indexOf('cell') !== -1;\n multiple = options.selectable.indexOf('multiple') !== -1;\n }\n elems = locals.selected = this.select();\n items = locals.data = [];\n columns = locals.columns = [];\n for (var i = 0; i < elems.length; i++) {\n var item = cell ? elems[i].parentNode : elems[i];\n var dataItem = widget.dataItem(item);\n if (cell) {\n if (angular.element.inArray(dataItem, items) < 0) {\n items.push(dataItem);\n }\n colIdx = angular.element(elems[i]).index();\n if (angular.element.inArray(colIdx, columns) < 0) {\n columns.push(colIdx);\n }\n } else {\n items.push(dataItem);\n }\n }\n if (!multiple) {\n locals.dataItem = locals.data = items[0];\n locals.angularDataItem = kendo.proxyModelSetters(locals.dataItem);\n locals.selected = elems[0];\n }\n digest(scope, function () {\n handler(scope, locals);\n });\n };\n });\n defadvice('ui.Grid', '$angular_init', function (element, options) {\n this.next();\n if (options.columns) {\n var settings = $.extend({}, kendo.Template, options.templateSettings);\n angular.forEach(options.columns, function (col) {\n if (col.field && !col.template && !col.format && !col.values && (col.encoded === undefined || col.encoded)) {\n col.template = '#: ' + kendo.expr(col.field, settings.paramName) + '#';\n }\n });\n }\n });\n {\n defadvice('mobile.ui.ButtonGroup', 'value', function (mew) {\n var self = this.self;\n if (mew != null) {\n self.select(self.element.children('li.km-button').eq(mew));\n self.trigger('change');\n self.trigger('select', { index: self.selectedIndex });\n }\n return self.selectedIndex;\n });\n defadvice('mobile.ui.ButtonGroup', '_select', function () {\n this.next();\n this.self.trigger('change');\n });\n }\n module.directive('kendoMobileApplication', function () {\n return {\n terminal: true,\n link: function (scope, element, attrs) {\n createWidget(scope, element, attrs, 'kendoMobileApplication', 'kendoMobileApplication');\n }\n };\n }).directive('kendoMobileView', function () {\n return {\n scope: true,\n link: {\n pre: function (scope, element, attrs) {\n attrs.defaultOptions = scope.viewOptions;\n attrs._instance = createWidget(scope, element, attrs, 'kendoMobileView', 'kendoMobileView');\n },\n post: function (scope, element, attrs) {\n attrs._instance._layout();\n attrs._instance._scroller();\n }\n }\n };\n }).directive('kendoMobileDrawer', function () {\n return {\n scope: true,\n link: {\n pre: function (scope, element, attrs) {\n attrs.defaultOptions = scope.viewOptions;\n attrs._instance = createWidget(scope, element, attrs, 'kendoMobileDrawer', 'kendoMobileDrawer');\n },\n post: function (scope, element, attrs) {\n attrs._instance._layout();\n attrs._instance._scroller();\n }\n }\n };\n }).directive('kendoMobileModalView', function () {\n return {\n scope: true,\n link: {\n pre: function (scope, element, attrs) {\n attrs.defaultOptions = scope.viewOptions;\n attrs._instance = createWidget(scope, element, attrs, 'kendoMobileModalView', 'kendoMobileModalView');\n },\n post: function (scope, element, attrs) {\n attrs._instance._layout();\n attrs._instance._scroller();\n }\n }\n };\n }).directive('kendoMobileSplitView', function () {\n return {\n terminal: true,\n link: {\n pre: function (scope, element, attrs) {\n attrs.defaultOptions = scope.viewOptions;\n attrs._instance = createWidget(scope, element, attrs, 'kendoMobileSplitView', 'kendoMobileSplitView');\n },\n post: function (scope, element, attrs) {\n attrs._instance._layout();\n }\n }\n };\n }).directive('kendoMobilePane', function () {\n return {\n terminal: true,\n link: {\n pre: function (scope, element, attrs) {\n attrs.defaultOptions = scope.viewOptions;\n createWidget(scope, element, attrs, 'kendoMobilePane', 'kendoMobilePane');\n }\n }\n };\n }).directive('kendoMobileLayout', function () {\n return {\n link: {\n pre: function (scope, element, attrs) {\n createWidget(scope, element, attrs, 'kendoMobileLayout', 'kendoMobileLayout');\n }\n }\n };\n }).directive('kendoMobileActionSheet', function () {\n return {\n restrict: 'A',\n link: function (scope, element, attrs) {\n element.find('a[k-action]').each(function () {\n $(this).attr('data-' + kendo.ns + 'action', $(this).attr('k-action'));\n });\n createWidget(scope, element, attrs, 'kendoMobileActionSheet', 'kendoMobileActionSheet');\n }\n };\n }).directive('kendoMobilePopOver', function () {\n return {\n terminal: true,\n link: {\n pre: function (scope, element, attrs) {\n attrs.defaultOptions = scope.viewOptions;\n createWidget(scope, element, attrs, 'kendoMobilePopOver', 'kendoMobilePopOver');\n }\n }\n };\n }).directive('kendoViewTitle', function () {\n return {\n restrict: 'E',\n replace: true,\n template: function (element) {\n return '' + element.html() + '';\n }\n };\n }).directive('kendoMobileHeader', function () {\n return {\n restrict: 'E',\n link: function (scope, element) {\n element.addClass('km-header').attr('data-role', 'header');\n }\n };\n }).directive('kendoMobileFooter', function () {\n return {\n restrict: 'E',\n link: function (scope, element) {\n element.addClass('km-footer').attr('data-role', 'footer');\n }\n };\n }).directive('kendoMobileScrollViewPage', function () {\n return {\n restrict: 'E',\n replace: true,\n template: function (element) {\n return '
                ' + element.html() + '
                ';\n }\n };\n });\n angular.forEach([\n 'align',\n 'icon',\n 'rel',\n 'transition',\n 'actionsheetContext'\n ], function (attr) {\n var kAttr = 'k' + attr.slice(0, 1).toUpperCase() + attr.slice(1);\n module.directive(kAttr, function () {\n return {\n restrict: 'A',\n priority: 2,\n link: function (scope, element, attrs) {\n element.attr(kendo.attr(kendo.toHyphens(attr)), scope.$eval(attrs[kAttr]));\n }\n };\n });\n });\n var WIDGET_TEMPLATE_OPTIONS = {\n 'TreeMap': ['Template'],\n 'MobileListView': [\n 'HeaderTemplate',\n 'Template'\n ],\n 'MobileScrollView': [\n 'EmptyTemplate',\n 'Template'\n ],\n 'Grid': [\n 'AltRowTemplate',\n 'DetailTemplate',\n 'RowTemplate'\n ],\n 'ListView': [\n 'EditTemplate',\n 'Template',\n 'AltTemplate'\n ],\n 'Pager': [\n 'SelectTemplate',\n 'LinkTemplate'\n ],\n 'PivotGrid': [\n 'ColumnHeaderTemplate',\n 'DataCellTemplate',\n 'RowHeaderTemplate'\n ],\n 'Scheduler': [\n 'AllDayEventTemplate',\n 'DateHeaderTemplate',\n 'EventTemplate',\n 'MajorTimeHeaderTemplate',\n 'MinorTimeHeaderTemplate'\n ],\n 'PanelBar': ['Template'],\n 'TreeView': ['Template'],\n 'Validator': ['ErrorTemplate']\n };\n (function () {\n var templateDirectives = {};\n angular.forEach(WIDGET_TEMPLATE_OPTIONS, function (templates, widget) {\n angular.forEach(templates, function (template) {\n if (!templateDirectives[template]) {\n templateDirectives[template] = [];\n }\n templateDirectives[template].push('?^^kendo' + widget);\n });\n });\n angular.forEach(templateDirectives, function (parents, directive) {\n var templateName = 'k' + directive;\n var attrName = kendo.toHyphens(templateName);\n module.directive(templateName, function () {\n return {\n restrict: 'A',\n require: parents,\n terminal: true,\n compile: function ($element, $attrs) {\n if ($attrs[templateName] !== '') {\n return;\n }\n $element.removeAttr(attrName);\n var template = $element[0].outerHTML;\n return function (scope, element, attrs, controllers) {\n var controller;\n while (!controller && controllers.length) {\n controller = controllers.shift();\n }\n if (!controller) {\n $log.warn(attrName + ' without a matching parent widget found. It can be one of the following: ' + parents.join(', '));\n } else {\n controller.template(templateName, template);\n element.remove();\n }\n };\n }\n };\n });\n });\n }());\n }(window.kendo.jQuery, window.angular));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.ui.core', [\n 'kendo.core',\n 'kendo.router',\n 'kendo.touch',\n 'kendo.view',\n 'kendo.fx',\n 'kendo.data.odata',\n 'kendo.data.xml',\n 'kendo.data',\n 'kendo.data.signalr',\n 'kendo.binder',\n 'kendo.validator',\n 'kendo.userevents',\n 'kendo.draganddrop',\n 'kendo.mobile.scroller',\n 'kendo.resizable',\n 'kendo.sortable',\n 'kendo.selectable',\n 'kendo.button',\n 'kendo.pager',\n 'kendo.popup',\n 'kendo.notification',\n 'kendo.tooltip',\n 'kendo.toolbar',\n 'kendo.list',\n 'kendo.calendar',\n 'kendo.dateinput',\n 'kendo.datepicker',\n 'kendo.autocomplete',\n 'kendo.dropdownlist',\n 'kendo.combobox',\n 'kendo.multiselect',\n 'kendo.colorpicker',\n 'kendo.listview',\n 'kendo.listbox',\n 'kendo.numerictextbox',\n 'kendo.maskedtextbox',\n 'kendo.menu',\n 'kendo.editable',\n 'kendo.panelbar',\n 'kendo.progressbar',\n 'kendo.responsivepanel',\n 'kendo.tabstrip',\n 'kendo.timepicker',\n 'kendo.datetimepicker',\n 'kendo.slider',\n 'kendo.splitter',\n 'kendo.dialog',\n 'kendo.window',\n 'kendo.virtuallist',\n 'kendo.mobile.popover',\n 'kendo.mobile.loader',\n 'kendo.mobile.scroller',\n 'kendo.mobile.shim',\n 'kendo.mobile.view',\n 'kendo.mobile.modalview',\n 'kendo.mobile.drawer',\n 'kendo.mobile.splitview',\n 'kendo.mobile.pane',\n 'kendo.mobile.application',\n 'kendo.mobile.actionsheet',\n 'kendo.mobile.button',\n 'kendo.mobile.buttongroup',\n 'kendo.mobile.collapsible',\n 'kendo.mobile.listview',\n 'kendo.mobile.navbar',\n 'kendo.mobile.scrollview',\n 'kendo.mobile.switch',\n 'kendo.mobile.tabstrip',\n 'kendo.angular'\n ], f);\n}(function () {\n 'bundle all';\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));"]}