{"version":3,"sources":["kendo.dataviz.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","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","direction","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","val","transformValue","step","elem","now","cur","prop","exclusive","ease","mirror","redirectedEffect","resolved","$1","$2","effect","effectBody","timeoutID","stopTransitionCalled","stopTransition","oldKeys","speeds","merge","unique","taskKeys","retainPosition","restore","run","jdx","childrenLength","effectName","deferred","Deferred","then","setReverse","addRestoreProperties","reset","setup","resolve","restoreCallback","effectSet","parsedEffects","useTransition","multiple","single","position","isFixed","originalPosition","dX","dY","currentValue","marginLeft","marginTop","_additionalEffects","play","additional","_duration","compositeRun","_complete","divisor","tmp","previous","previousDivisor","slideIn","margin","origin","setLength","oldLength","realLength","outerBox","box","innerBox","currentScale","fillScale","transformOrigin","_container","rotation","zIndex","_clipInHalf","clip","append","face","_face","temporary","opacity","back","temp","reverseDirection","faceClone","backClone","staticPage","turningPage","transformStyle","_before","_after","transitionClass","_previous","_transitionClass","beforeTransition","afterTransition","_both","_element","_containerClass","containerClass","removeClass","completeProxy","isAbsolute","originalOverflow","both","_tickProxy","_tick","_started","tick","done","onEnd","onCancel","timePassed","startDate","moveTo","movable","initial","_easeProxy","moveAxis","easeOutExpo","pow","easeOutBack","inner","outer","fitScale","absoluteURL","path","pathPrefix","regEx","host","hashDelimiter","bang","locationHash","stripRoot","root","fixHash","fixBang","CHANGE","BACK","SAME","CHECK_URL_INTERVAL","BROKEN_BACK_NAV","hashStrip","HistoryAdapter","forward","replaceLocation","PushStateAdapter","navigate","title","replaceState","normalize","pathname","change","normalizeCurrent","fixedUrl","hash","hashBang","HashAdapter","_id","_interval","setInterval","clearInterval","History","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","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","$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","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","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","_sortForGrouping","groupValue","sum","average","process","query","filterCallback","success","error","parameters","operation","_store","clear","store","inmemory","schema","dataFunction","groupsFunction","serializeFunction","serializeGetters","_dataAccessFunction","groups","fromName","_map","_prefetch","_pristineData","_ranges","_view","_pristineTotal","_destroyed","_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","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","_accept","_change","cancelChanges","_cancelModel","_markOfflineUpdatesAsDirty","__state__","hasChanges","models","response","serverGroup","_handleCustomErrors","_executeOnPristineForModel","_eachPristineItem","_pristineForModel","_submit","status","reject","_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","currentRangeStart","_prefetchSuccessHandler","_timeout","_multiplePrefetch","rangeLength","startOffset","transportOptions","hasChildrenObject","childrenField","childrenOptions","_childrenOptions","_initChildren","_updateChildrenField","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","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","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","shifted","shiftedLength","toDestroy","hasValue","hasSource","hasEvents","hasChecked","hasCss","widgetBinding","specificBinders","applyBinding","binder","observableHierarchy","recursiveRead","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","methodName","getElementById","contents","replaceWith","Layout","containers","_createContainer","showIn","ViewContainer","Fragment","attach","running","after","locationID","previousEntry","theTransition","transitionData","hub","signalr","fail","callbacks","_crud","server","touchDelta","touch1","touch2","x1","y1","x2","y2","dx","dy","center","distance","sqrt","getTouches","currentTarget","api","identifier","pointerId","withEachUpEvent","downEvents","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","isMoved","startTime","xDelta","yDelta","surfaceElement","preventIfMovingProxy","_maxTouches","multiTouch","allowSelection","captureUpIfMoved","fastTap","eventNS","surface","global","ownerDocument","pressed","touchAction","preventDragEvent","preventIfMoving","_isMoved","removeEventListener","_disposeAll","capture","_isMultiTouch","_apiCall","_maxTouchesReached","_select","which","_move","_eachTouch","_end","_click","pageX","pageY","matchingTouch","dict","defaultThreshold","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","gesturestart","gesture","gesturechange","coordinates","offsetX","offsetY","previousGesture","previousCenter","scaleDelta","scaleWith","TRANSFORM_STYLE","webkitTransformOrigin","_saveCoordinates","by","scaleTo","newCoordinates","draggable","dropTarget","_over","_out","_drop","dropped","destroyGroup","_cache","_activated","hold","_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","tabKeyTrapNS","focusableNodesSelector","TabKeyTrap","OPEN","CLOSE","DEACTIVATE","ACTIVATE","CENTER","TOP","BOTTOM","ABSOLUTE","BODY","LOCATION","VISIBLE","EFFECTS","ACTIVE","ACTIVEBORDER","ACTIVEBORDERREGEXP","ACTIVECHILDREN","MOUSEDOWN","DOCUMENT_ELEMENT","WINDOW","NS","Popup","parentPopup","collisions","collision","downEvent","anchor","_hovered","animation","open","close","_animationClose","_mousedownProxy","_mousedown","_resizeProxy","toggleTarget","toggleEvent","viewport","copyAnchorStyles","modal","adjustSize","_hideDirClass","_closing","_toggleResize","fixed","flipped","_position","_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","restoreTitle","restoreTitleAttributeForElement","saveTitleAttributeForElement","saveTitleAttributes","DOCUMENT","ARIAIDSUFFIX","DESCRIBEDBY","CONTENTLOAD","KCONTENTFRAME","TEMPLATE","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","createPromise","promiseAll","util","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","diff","other","c1","c2","NaN","h","ref","toHSL","l","resolvedColor","formatRegex","processor","channels","this$1","resolveColor","re","normalizeByte","padDigit","brightness","percBrightness","fromBytes","fromRGB","fromHSV","fromHSL","objectKey","hashKey","zeroSize","baseline","measureText","measureBox","TextMetrics","LRUCache","DEFAULT_OPTIONS","defaultMeasureBox","_length","put","entry","_head","_tail","newer","older","baselineMarkerSize","styleKey","cacheKey","cachedResult","baselineMarker","_baselineMarker","offsetTop","marker","second","arabicToRoman","roman","defined","definitionId","defId","deg","radians","DEG_TO_RAD","encodeUTF8","fromCharCode","encodeBase64","chr1","chr2","chr3","enc1","enc2","enc3","enc4","utfInput","KEY_STR","eventCoordinates","eventElement","isTransparent","limitValue","mergeSort","cmp","ai","bi","rad","degrees","power","valueOrDefault","bindEvents","getBoundingClientRect","clientTop","clientLeft","elementStyles","stylesArray","getPixels","size$1","unbindEvents","setAccessor","geometryChange","getAccessor","defineAccessors","capitalized","toMatrix","matrix","Transformation","ellipseExtremeAngles","ry","extremeX","extremeY","geometryAccessor","_observerField","defineGeometryAccessors","tolerance","PRECISION","closeOrLess","lineIntersection","p0","p1","p2","p3","s1x","s2x","s1y","s2y","nx","ny","Point","calculateAngle","cx","cy","cos","sin","normalizeArcParameters","cosine","sine","xT","yT","xt2","yt2","rx2","ry2","constT","cxT","cyT","uX","uY","vX","vY","startAngle","angleCosine","angle","endAngle","signEndAngle","largeArc","swipe","acos","radiusX","radiusY","xRotation","bboxStartAngle","pointAccessor","definePointAccessors","isOutOfEndPoint","endPoint","controlPoint","point","rotatedPoint","transformCopy","calculateCurveAt","points","t1","toCubicPolynomial","numberSign","solveQuadraticEquation","squareRoot","solveCubicEquation","Q","b3a","y3","z1","z2","ComplexNumber","nthRoot","multiplyConstant","negate","multiply","isReal","real","hasRootsInRange","rootField","intersection","polynomial","roots","curveIntersectionsCount","bbox","rayIntersection","intersectsRay","bottomRight","lineIntersectionsCount","intersects","arrayLimits","MAX_NUM","MIN_NUM","elementsBoundingBox","applyTransform","boundingBox","elementBoundingBox","rawBBox","Rect","union","elementsClippedBoundingBox","clippedBBox","translateToPoint","transofrm","alignStart","align","sizeField","alignElements","alignment","vAlign","stackElements","stackAxis","otherAxis","previousBBox","createStackElements","stack","vStack","getStacks","maxSize","stacks","stackSize","addElementToStack","wrapElements","startElement","elementIdx","vWrap","fit","rectSize","transform$$1","optionsAccessor","defineOptionsAccessors","swing","PI","linear","easeOutElastic","asin","toLineParamaters","isVertical","insertPosition","reflectionPoint","scaleCopy","quadraticToCubicControlPoints","scaledPoint","controlOut","translateWith","third","controlIn","parseParameters","SPLIT_REGEX","renderAttr","renderAllAttr","attrs","renderStyle","isDefinition","baseUrl","getElementsByTagName","hashIndex","refUrl","skipBaseHref","alignToScreen","ctm","getScreenCTM","decodeEntities","innerText","exportGroup","exportRoot","svg","RootNode","rootGroup","getOrigin","Group","SVG_NS","renderPath","ctx","segment","prevSeg","prevOut","segments","bezierCurveTo","lineTo","closed","closePath","zIndexComparer","_zIndex","addGradientStops","gradient","stops","addColorStop","exportImage","surfaceOptions","cors","Surface$3","suspendTracking","draw","image","exportSVG","slice$1","thing","cls","classList","setCSS","getXY","drawDOM","doOne","setTransform","nodeInfo","_clipbox","_matrix","Matrix","unit","_stackingContext","_avoidLinks","avoidLinks","renderElement","makeTemplate","template$$1","firstElementChild","handlePageBreaks","forceBreak","pageWidth","pageHeight","doPageBreak","whenImagesAreActuallyLoaded","pages","splitElement","makePage","pageNum","cacheImages","keepTogether","adjust","tag","bottomPadding","bottomBorder","saveAdjust","isFirst","fall","tableLayout","breakAtElement","fallsOnMargin","splitText","firstInParent","colgroup","thead","grid","gridHead","querySelector","repeatHeaders","doc","setStartBefore","setEndBefore","extractContents","preventBulletOnListItem","padding","pageClassName","available","nextnode","selectNodeContents","findEOP","setEnd","endOffset","li","_destructive","cloneNodes","tfoot","ol","paddingLeft","paddingRight","beforePageBreak","pdf","defineFont","getFontFaces","forcePageBreak","hasPaperSize","paperSize","paperOptions","getPaperOptions","def","hasMargin","multiPage","_ignoreMargin","canceled","doStylesheet","ss","cssRules","ex","addRules","findFonts","font","splitProperty","getFontURL","styleSheet","family","bold","italic","addRule","styleSheets","getCounter","getAllCounters","getPrototypeOf","incCounter","inc","_root","resetCounter","doCounters","updateCounters","counterIncrement","counterReset","parseColor$1","pending","img","images","onload","onerror","IMAGE_CACHE","urls","dive","parseBackgroundImage","bg","Image","crossOrigin","alphaNumeral","pushNodeInfo","decoration","createsStackingContext","popNodeInfo","updateClipbox","intersect","emptyClipbox","cb","pseudoElt","defa","pleaseSetPropertyValue","important","setProperty","getBorder","side","saveStyle","getBorderRadius","sanitizeRadius","getContentBox","wt","wr","wb","wl","getTransform","radiansToDegrees","parseAngle","num","shape","setClipping","clipPath","addArcToPath","Arc$2","curvePoints","curveTo","adjustBorderRadiusForBox","rTL","rTR","rBR","rBL","tl_x","tl_y","tr_x","tr_y","br_x","br_y","bl_x","bl_y","tl","tr","br","bl","elementRoundBox","bt","bb","pt","pr","pb","pl","roundBox","rTL0","rTR0","rBR0","rBL0","Path","fill","stroke","formatCounter","evalPseudoElementContent","displayCounter","separator","getCssText","_renderWithPseudoElements","pseudo","kind","place","psel","KENDO_PSEUDO_ELEMENT","fake","saveClass","_renderElement","adjustBoxes","boxes","tableBorderLeft","tableBorderTop","tableBox","firstCell","firstCellBox","drawEdge","Wtop","Wleft","Wright","rl","rr","drawRoundCorner","ri","anticlockwise","drawBackground","background","_pdfLink","backgroundColor","backgroundImage","drawOneBackground","backgroundRepeat","backgroundPosition","backgroundOrigin","backgroundSize","drawBackgroundImage","img_width","img_height","renderBG","rewX","rewY","repeatX","aspect_ratio","orgBox","Image$1","gradientRenderer","drawBullet","_drawBullet","bullet","listStylePosition","textAlign","elementIndex","listStyleType","fontSize","lineHeight","fontFamily","disc","circle","square","drawOneBox","isLast","inv","shouldDrawLeft","shouldDrawRight","innerbox","getClientRects","clipit","isFormField","maybeRenderWidget","renderContents","pxlen","scaledAngle","implicit","atan","fromRect","LinearGradient","userSpace","visual","wrap$$1","exportDOMVisual","exportVisual","renderImage","zIndexSort","sa","sb","za","zb","pa","getSelectedOption","selectedOptions","renderCheckbox","Circle","Circle$2","renderFormField","whiteSpace","floats","floating","toDataURL","renderText","actuallyGetRangeBoundingRect","rectangles","Infinity","prevLineBottom","doChunk","cc","code","origStart","setStart","isJustified","columnCount","findEOL","eol","estimateLineLength","drawText","getFontHeight","TextRect","decorate","line","ypos","underline","lineThrough","overline","align$$1","textOverflow","saveTextOverflow","hasDecoration","selectNode","groupInStackingContext","main","_dom_zIndex","invert","mmul","multiplyCopy","b1","d1","e1","b2","d2","e2","kendoDrawing","kendoDrawingUtil","kendoUtil","ObserversMixin","OptionsStore","Size","Element$1","PI_DIV_2","GRADIENT","Paintable","IDENTITY_MATRIX_HASH","Measurable","DEFAULT_STROKE","MAX_INTERVAL","pow$1","ElementsArray","GeometryElementsArray","Segment","DEFAULT_STROKE$1","Arc","MultiPath","DEFAULT_FONT","DEFAULT_FILL","Text","Traversable","Rect$2","StopsArray","GradientStop","Gradient","RadialGradient","easingFunctions","AnimationFactory","ShapeMap","SEGMENT_REGEX","PathParser","SurfaceFactory","Surface","BaseNode","NODE_MAP","renderSVG","testFragment","testContainer","hasParser","renderSVG$1","DefinitionMap","GradientStopNode","GradientNode","LinearGradientNode","RadialGradientNode","ClipNode","DefinitionNode","RTL","Surface$1","GroupNode","DASH_ARRAYS","SOLID","BUTT","ATTRIBUTE_MAP","SPACE","PathNode","ArcNode","CircleNode","RectNode","ImageNode","TextNode","MultiPathNode","geometry","NODE_MAP$2","Node$2","GroupNode$2","FRAME_DELAY","RootNode$2","QuadRoot","QuadNode","ROOT_SIZE","LEVEL_STEP","MAX_LEVEL","ShapesQuadTree","SurfaceCursor","PathNode$2","ArcNode$2","CircleNode$2","RectNode$2","ImageNode$2","TextNode$2","MultiPathNode$2","canvas","observers","_observers","addObserver","removeObserver","observer","_suspended","optionsChange","suspend","resume","1","10","100","20","200","30","300","40","400","5","50","500","6","60","600","7","70","700","8","80","800","9","90","900","1000","MAX_VALUE","parentObj","_clear","wrapped","det","scaleX","scaleY","IDENTITY","originPoint","distanceTo","doRound","arg0","arg1","arguments$1","minPoint","maxPoint","defineProperties","setOrigin","topLeft","topRight","bottomLeft","fromPoints","expand","expandCopy","containsPoint","_isOnPath","rectOuter","rectInner","rect1","rect2","_optionsChange","parentTransform","parentMatrix","currentTransform","elementTransform","elementMatrix","combinedMatrix","_clippedBBox","transformedPoint","_hasFill","_containsPoint","_hasStroke","setCenter","setRadius","getCenter","pointAt","_pointAt","currentPointX","currentPointY","currentPoint","extremeAngles","inCircle","pointDistance","newFill","strokeWidth","matrixHash","_bboxCache","_matrixHash","_bbox","_geometry","radian","nextAngle","interval","_arcInterval","intervalAngle","subIntervalsCount","subIntervalAngle","currentAngle","_intervalCurvePoints","cp1","cp2","currentAngleX","currentAngleY","oldStart","p1Derivative","_derivativeAt","p2Derivative","inAngleRange","angleRad","pointRadius","startPoint","arcParameters","_splice","_add","_remove","_clearObserver","_setObserver","cNumber","addConstant","rad$$1","nthR","bboxTo","toSegment","segmentAnchor","toSegmentAnchor","_curveBoundingBox","_lineBoundingBox","extremesX","_curveExtremesFor","extremesY","xLimits","yLimits","extremes","_curveExtremes","x3","x4","t2","_intersectionsTo","intersectionsCount","_isOnCurveTo","endSegment","p4","rotatedPoints","_isOnLineTo","_isOnPathTo","isOnPath","lineJoin","lastSegment","arc","_addArcSegments","arcTo","pathWidth","segmentBox","fromArc","toPath","metrics","_rect","traverse","childrenChange","_reparent","insertAt","removeAt","newParent","alignContent","justifyContent","alignItems","spacing","orientation","lineSpacing","_fieldMap","_initMap","fieldMap","groupsSizeField","groupAxis","groupsAxis","reflow","groupsSize","ref$1","groupOrigin","elementOrigin","groupStart","elementStart","groupBox","groupIdx","scaledStart","scaledSize","newStart","_initGroups","lineSize","bboxes","_newGroup","addGroup","_addToGroup","arg","_createStops","_userSpace","addStop","removeStop","_radius","_fallbackFill","fallbackFill","easing","finish","abort","loop","wallTime","easingPosition","_stopped","_items","isRelative","lastControlIn","previousCommand","cubicControlPoints","multiPath","command","preferred","_handler","_mousemove","_visual","_enableTracking","domNode","_kendoNode","parentElement","srcElement","_suspendedTracking","resumeTracking","_elementOffset","paddingTop","_surfacePoint","coord","observe","removeSelf","invalidate","DOMParser","namespaceURI","parser","chartDoc","parseFromString","importedDoc","adoptNode","definitions","clearDefinitions","childNode","createDefinitions","attachTo","setElement","nodes","childElement","renderChildren","updateDefinition","allAttr","allCss","mapTransform","renderTransform","transformChange","mapStyle","cursor","renderOpacity","hasDefinitions","definitionChange","renderDefinitions","mapDefinitions","renderOffset","loadStops","stopNode","mapCoordinates","renderCoordinates","mapSpace","definitionMap","addDefinitions","removeDefinitions","createDefinition","addDefinition","mapItem","removeDefinition","defs","rtl","_template","_rootElement","mouseover","mouseout","viewBox","_offset","implementation","hasFeature","dot","dash","longdash","dashdot","longdashdot","longdashdotdot","fill.opacity","stroke.color","stroke.width","stroke.opacity","renderData","mapFill","mapStroke","printPath","currentType","segmentType","printPoints","segmentStart","segmentEnd","renderLinecap","dashType","renderDashType","renderStroke","dashArray","lineCap","renderFill","mapPosition","mapSource","renderPosition","encode","renderSource","setY","renderContent","renderTextAnchor","initClip","clearClip","setClip","beginPath","loadElements","setOpacity","globalAlpha","opactity","renderTo","getContext","invalidateHandler","_invalidate","clearRect","shapes","_quadNode","pointShapes","inBounds","nodeRect","nodeBottomRight","inserted","halfWidth","halfHeight","initRoots","rootMap","rootElements","pointShape","sectorRoot","assignZindex","levelWeight","bboxChange","_insertShape","elementsArray","_insert","sectors","getSectors","inRoot","bottomX","bottomY","_resetCursor","_shapeCursor","_current","_defaultCursor","_getCursor","_setCursor","_mouseTrackHandler","_trackMouse","_searchTree","_cursor","resolveDataURL","rootElement","loadingStates","currentShape","_currentShape","renderPoints","setLineDash","setLineCap","setLineJoin","setFill","setStroke","hasFill","setGradientFill","fillStyle","createLinearGradient","createRadialGradient","strokeStyle","lineWidth","mozDash","webkitLineDash","onLoad","onError","drawImage","fillText","strokeText","_pdfRect","$el","$clone","canvases","canvas$$1","skip_ws","tok_whitespace","read_stop","tok_length","tok_percent","read_linear_gradient","propName","to1","to2","tok_popen","tok_angle","tok_comma","tok_keyword","tok_pclose","read_url","tok_content","tok","cache1","tok_linear_gradient","tok_url","cache2","looking_at","last$$1","in_paren","in_string","TOOLTIP_TEMPLATE","TOOLTIP_CLOSE_TEMPLATE","SurfaceTooltip","_tooltipOptions","popupOptions","_openPopupHandler","_openPopup","_bindEvents","hideDelay","_showHandler","_showEvent","_surfaceLeaveHandler","_surfaceLeave","_mouseleaveHandler","_mousemoveHandler","_hideClick","getPopup","shared","_tooltipShape","tooltip","_updateContent","tooltipOffset","_instance","surfaceOffset","_showTimeout","_autoHide","_measure","_closeButton","_popupRelatedTarget","DrawingSurface","_triggerInstanceHandler","_triggerInstanceEvent","_bindHandler","hideTooltip","_tooltip","showTooltip","classArray","SPACE_REGEX","alignPathToPixel","clockwise","angle1","angle2","isObject","isString","styleValue","isSizeField","SIZE_STYLES_REGEX","field$1","getSpacing","defaultSpacing","getTemplate","TemplateService","hasClasses","classNames","interpolateValue","COORD_PRECISION","mousewheelDelta","setDefaultOptions","sparseArrayLimits","MIN_VALUE","rotatePoint","theta","numericComparer","boxDiff","Box","innerRadialStops","currentStop","usedSpace","innerRadius","currentStops","rectToBox","createAxisTick","tickOptions","tickX","tickY","createAxisGridLine","gridLine","lineStart","lineEnd","absoluteDateDiff","offsetDiff","TIME_PER_MINUTE","addTicks","ticks","toDate","startOfWeek","daysToSubtract","TIME_PER_DAY","addHours","tzDiff","roundedDate","setMinutes","TIME_PER_HOUR","addDuration","dateValue","YEARS","MONTHS","WEEKS","DAYS","HOURS","MINUTES","setSeconds","SECONDS","TIME_PER_SECOND","MILLISECONDS","setMilliseconds","floorDate","ceilDate","dateComparer","dateDiff","toTime","dateEquals","timeIndex","baseUnit","TIME_PER_UNIT","dateIndex","baseUnitStep","lteDateIndex","sortedDates","currentDate","low","high","intlService","parseDates","dates","autoMajorUnit","relativeValue","scaleMultiplier","DEFAULT_PRECISION","autoAxisMin","narrow","axisMin","minValue","ZERO_THRESHOLD","autoAxisMax","axisMax","maxValue","limitCoordinate","COORDINATE_LIMIT","autoAxisOptions","seriesMin","seriesMax","narrowRange","autoMin","autoMax","majorUnit","autoOptions","roundToMajorUnit","remainderClose","totalAxisOptions","axisOptions","userOptions","userSetLimits","minorUnit","ratio","remainder","timeUnits","TIME_PER_YEAR","TIME_PER_MONTH","TIME_PER_WEEK","applyDefaults","baseUnitTime","userMajorUnit","actualUnits","totalUnits","unitsToAdd","head","tail","initRange","axisCrossingValue","throwNegativeValuesError","autoAxisMin$1","autoAxisMax$1","logMaxRemainder","angularDistance","geometryTransform","__common_getter_js","X","DEFAULT_WIDTH","DEFAULT_HEIGHT","WHITE","BLACK","AXIS_LABEL_CLICK","NOTE_CLICK","NOTE_HOVER","OUTSIDE","CIRCLE","TRIANGLE","CROSS","ARC","INSIDE","DATE","FORMAT_REGEX","HIGHLIGHT_ZINDEX","constants","defaultImplementation","IntlService","FORMAT_REPLACE_REGEX","FormatService","ChartService","current$1","DomEventsBuilder","current$2","services","TRIGGER","InstanceObserver","FontLoader","Ring","Sector","ShapeBuilder","ChartElement","BoxElement","ShapeElement","LINEAR","RADIAL","GRADIENTS","RootElement","FloatElement","DrawingText","ROWS_SPLIT_REGEX","TextBox","Title","AxisLabel","DEFAULT_ICON_SIZE","DEFAULT_LABEL_COLOR","Note","Axis","TIME_PER_MILLISECOND","MIN_CATEGORY_POINTS_RANGE","CategoryAxis","DateLabelFormats","BASE_UNITS","FIT","DateCategoryAxis","MIN_VALUE_RANGE","NumericAxis","DateValueAxis","DEFAULT_MAJOR_UNIT","LogarithmicAxis","GridLinesMixin","RadarCategoryAxis","PolarAxis","RadarNumericAxisMixin","RadarNumericAxis","RadarLogarithmicAxis","WEIGHT","EXTREMUM_ALLOWED_DEVIATION","CurveProcessor","userImplementation","_intlService","auto","formatString","intl","localeAuto","locale","chart","handlerMap","callObserver","fnName","requiresHandlers","fetchFonts","fonts","depth","MAX_DEPTH","loadFonts","Promise","preloadFonts","cosT","sinT","onCircle","targetBox","wrapPoint","arrayPoint","snapTo","alignTo","targetCenter","shrink","dw","dh","unpad","getHash","overlaps","r1","r2","r3","r4","toRect","hasSize","sizeFunc","middle","newRadius","radianAngle","ax","ay","adjacentBox","sector","midAndle","midPoint","hw","hh","ca","vector","startVector","endVector","dist","getBBox","angles","allAngles","startAngleIndex","endAngleIndex","createRing","innerEnd","currentChild","getRoot","getSender","service","getService","chartService","translateChildren","childrenCount","renderVisual","createVisual","addVisual","createAnimation","renderComplete","chartElement","appendVisual","childVisual","noclip","clipRoot","stackRoot","stackVisual","isStackRoot","sibling","here","visuals","matched","hasHighlight","highlight","createHighlight","toggleHighlight","highlightOptions","customVisual","_highlight","highlightVisualArgs","series","category","runningTotal","createGradientOverlay","gradientOptions","overlay","createGradient","shrinkToFit","hasSetSize","borderWidth","border","reflowPaddingBox","paddingBox","contentBox","hasBox","visualStyle","pointData","getElement","visualOptions","glass","sharpBevel","roundedBevel","roundedGlass","supportVML","sharpGlass","bubbleShadow","rootOptions","gradients","currentBox","createBackground","drawingGradient","hashCode","_initDirection","elementAxis","groupSizeField","elementSizeField","groupSpacing","elementSpacing","vSpacing","reflowChildren","groupElements","groupElementsCount","elementSize$$1","groupElementStart","elementBox","groupOptions","maxGroupElementsSize","groupsCount","groupsStart","groupElementsSize","_initContainer","_autoReflow","rowIdx","floatElement","textOptions","visualBox","visualFn","_boxReflow","visualContext","normalBox","rotatedBox","rotationTransform","getDefaultVisual","boxCenter","buildTitle","defaultOptions","titleOptions","alignRotation","rotationMatrix","rotationOrigin","alignAxis","distanceAxis","axisAnchor","distanceLeft","distanceRight","alignEnd","alignCenter","icon","noteTemplate","wrapperBox","linePoints","createLine","defaultVisual","eventArgs","hover","leave","_unsetActivePoint","labels","majorTickSize","minorTickSize","minorTicks","minorTickType","majorTicks","majorTickType","_deferLabels","createLabels","createTitle","createNotes","labelsRange","labelsCount","labelOptions","autoRotateLabels","createAxisLabel","lineBox","axisX","axisY","visualSize","note","notes","parseNoteValue","createPlotBands","gridLinesVisual","gridLines","_gridLines","createTicks","lineGroup","tickPositions","skipUnit","tickLineOptions","getMajorTickPositions","getMinorTickPositions","_alignLines","_lineGroup","getActualTickSize","tickSize","_backgroundPath","altAxis","slotX","slotY","bandRect","plotBands","plotArea","_plotbandGroup","axes","getSlot","createGridLines","axisLineVisible","linePos","lineOptions","minorGridLines","majorGridLines","labelSize","sizeFn","titleSize","rootBox","maxLabelSize","arrangeTitle","arrangeLabels","arrangeNotes","getLabelsTickPositions","labelTickIndex","tickIx","labelPos","labelBox","firstTickPosition","nextTickPosition","labelX","labelY","labelsBetweenTicks","justified","labelOffset","idx$1","slot","shouldRenderNote","noteSlot","secondAxis","axisLabelText","tmpl","limit","lastLabel","limitRange","rangeSize","valueRange","years","weeks","_ticks","_initCategories","categories","definedMin","definedMax","srcCategories","rangeIndices","totalRange","totalRangeIndices","_seriesMax","getScale","getTickPositions","stepSize","hideOutOfRangeLabels","valueAxis","firstLabel","getTicks","_hash","slotBox","singleSlot","categoryIndex","pointCategoryIndex","getCategory","translateRange","zoomRange","rate","totalMin","totalMax","scaleRange","hideOutOfRangeNotes","pan","pointsRange","diffStart","diffEnd","rangeMin","rangeMax","useDefault","roundToBaseUnit","userSetBaseUnit","userSetBaseUnitStep","defaultBaseUnit","autoBaseUnit","_groupsStart","groupCategories","rounds","lastCategory","categoryIx","minDiff","_categoryRange","_range","categoryLimits","categoriesRange","minIdx","maxIdx","_roundToTotalStep","currentRange","round$$1","datesRange","totalLimits","panRange","indicesRange","autoBaseUnitSteps","maxDateGroups","maxDiff","rangeDiff","baseUnitIndex","autoBaseUnitStep","stepIndex","rangeOptions","autoUnit","stepOptions","unitSteps","nextStep","span","autoUnitIx","units","nextDate","maxCategory","upper","roundToNext","roundedStep","unitFormat","dateFormats","totalOptions","totalMajorUnit","getDivisions","stepValue","divisions","startEdge","skipStep","getValue","valueOffset","isValidRange","newRange","axisCrossingValues","timeRange","exact","limittedRange","logMin","logMax","floorMax","traverseMajorTicksPositions","tickPosition","traverseMinorTicksPositions","_lineOptions","minorOptions","ref$2","_minorIntervalOptions","minorStep","acceptOptionsRange","acceptNewRange","nextValue","majorAngles","minorAngles","skipMajor","majorGridLineAngles","renderMajorGridLines","minorGridLineAngles","renderMinorGridLines","renderGridLines","radiusCallback","gridLineAngles","skipAngles","divs","intervals","altAxisVisible","alpha","reflowLabels","skipOption","stepOption","divCount","divAngle","majorIntervals","minorIntervals","minorAngle","minorRadius","band","ring","plotBandSlot","slotStart","toValue","slots","totalDivs","slotAngle","fromValue","instanceOptions","bandStyle","polarAxis","plotBandPoints","innerPoints","outerPoints","innerCircle","outerCircle","radarMajorGridLinePositions","radarMinorGridLinePositions","tickRadius","angleIx","midAngle","gamma","beta","axisType","minorSkipStep","dataPoints","tangent","initialControlPoint","lastControlPoint","controlPoints","tangent$1","cp0","controlPoints$1","controlPoints$2","tangent$2","removeDuplicates","firstControlPoint","secondControlPoint","invertAxis","lineFunction","calculateFunction","isLine","monotonic","oldXField","xField","yField","restrict","switchOrientation","isMonotonicByField","restrictControlPoint","cp","xValue","yValue","Gradients","ExportMixin","skipLegacy","exportPDF","imageDataURL","Point2D","Box2D","mwDelta","BAR_GAP","BAR_SPACING","SANS","SANS11","SANS12","SANS16","TRANSPARENT","axisDefaults","areaSeries","barSeries","boxPlotSeries","bubbleSeries","bulletSeries","candlestickSeries","columnSeries","donutSeries","lineSeries","ohlcSeries","radarAreaSeries","radarLineSeries","rangeBarSeries","rangeColumnSeries","scatterLineSeries","waterfallSeries","pieSeries","funnelSeries","seriesDefaults","legend","baseTheme","markers","outliersField","meanField","_brightness","downColor","whiskers","mean","median","area","bar","boxPlot","bubble","candlestick","column","pie","donut","funnel","horizontalWaterfall","ohlc","radarArea","radarLine","polarArea","polarLine","rangeBar","rangeColumn","scatterLine","verticalArea","verticalBoxPlot","verticalBullet","verticalLine","waterfall","categoryAxis","chartBaseTheme","autoTheme","mapColor","varName","queryStyle","hook","theme","defaultFont","titleFont","labelFont","letterPos","letter","seriesPos","seriesColors","fuse","arr1","arr2","gaugeBaseTheme","diagramBaseTheme","shapeDefaults","handles","selectable","connectionDefaults","tools","registerTheme","themeName","gauge","diagram","treeMap","inactiveItems","errorBars","scatter","chartArea","crosshair","rangePlaceholderColor","connectorDefaults","thumb","colors","connectors","noteStyle","AXIS","TEXT","INACTIVE","INACTIVE_SHAPE","AXIS_MINOR","SERIES","SERIES_LIGHT","PRIMARY","DIAGRAM_HOVER","sass","countNumbers","getField","row","evalOptions","dryRun","needsEval","excluded","MAX_EXPAND_DEPTH","categoriesCount","seriesCount","anyHasZIndex","hasGradientOverlay","areNumbers","wrapData","seriesItem","paneID","ID","axisGroupBox","axisBox","paneAnchor","setValue","filterSeriesByType","currentSeries","seriesTypes","equalsIgnoreCase","isDateAxis","sampleCategory","dateCategory","appendIfNotNull","singleItemOrArray","getDateField","groupSeries","axisIx","acceptKey","mouseKey","ctrlKey","altKey","toChartAxisRanges","axisRanges","axisRange","createDiv","closestHandle","tooltipAlignment","RAD_60","RAD_30","segmentVisible","pointVisibility","bindSegments","SeriesBinder","bindPoint","valueFields","uat","ub","xComparer","resolveAxisAliases","alias","aliases","AXIS_NAMES","pointByCategoryName","applyAxisDefaults","themeOptions","mapAxisOptions","axisColor","themeAxisDefaults","axisName","applySeriesDefaults","seriesType","baseOptions","seriesLength","commonDefaults","themeSeriesDefaults","commonThemeDefaults","cleanupNestedSeriesDefaults","_defaults","sortDates","uniqueDates","srcDates","transpose","rowIx","colCount","colIx","rowCount","clearMissingValues","originalOptions","fieldValue","originalValue","nullValue","datavizConstants","GeometryPoint","ChartAxis","ChartPlotArea","Aggregates","STD_ERR","STD_DEV","percentRegex","standardDeviationRegex","ErrorRangeCalculator","INITIAL_ANIMATION_DURATION","FADEIN","GLASS","BORDER_BRIGHTNESS","TOOLTIP_OFFSET","START_SCALE","ERROR_LOW_FIELD","ERROR_HIGH_FIELD","X_ERROR_LOW_FIELD","X_ERROR_HIGH_FIELD","Y_ERROR_LOW_FIELD","Y_ERROR_HIGH_FIELD","LINE_MARKER_SIZE","INTERPOLATE","GAP","SMOOTH","STEP","AREA","BAR","BOX_PLOT","BUBBLE","BULLET","CANDLESTICK","COLUMN","DONUT","FUNNEL","HORIZONTAL_WATERFALL","LINE","OHLC","PIE","POLAR_AREA","POLAR_LINE","POLAR_SCATTER","RADAR_AREA","RADAR_COLUMN","RADAR_LINE","RANGE_BAR","RANGE_COLUMN","SCATTER","SCATTER_LINE","VERTICAL_AREA","VERTICAL_BOX_PLOT","VERTICAL_BULLET","VERTICAL_LINE","WATERFALL","EQUALLY_SPACED_SERIES","LEGEND_ITEM_CLICK","LEGEND_ITEM_HOVER","SERIES_CLICK","SERIES_HOVER","PLOT_AREA_CLICK","PLOT_AREA_HOVER","DRAG_END","DRAG_START","ZOOM_START","ZOOM","ZOOM_END","SELECT_START","SELECT_END","RENDER","SHOW_TOOLTIP","HIDE_TOOLTIP","LOGARITHMIC","CATEGORY","INSIDE_END","INSIDE_BASE","OUTSIDE_END","MOUSEWHEEL","MOUSEWHEEL_DELAY","DEFAULT_ERROR_BAR_WIDTH","ErrorBarBase","CategoricalErrorBar","CategoricalChart","PointEventsMixin","NoteMixin","ABOVE","BELOW","LinePoint","LineSegment","StepLineSegment","SplineSegment","LineChartMixin","ClipAnimation","ClipAnimationMixin","LineChart","AreaSegmentMixin","AreaSegment","StepAreaSegment","SplineAreaSegment","AreaChart","AxisGroupRangeTracker","BarLabel","BAR_ALIGN_MIN_WIDTH","Bar","ClusterLayout","StackWrap","BarChart","Candlestick","CandlestickChart","BoxPlot","VerticalBoxPlot","BoxPlotChart","ScatterErrorBar","ScatterChart","Bubble","BubbleChart","Target","Bullet","BulletChart","BaseTooltip","CrosshairTooltip","Crosshair","ChartContainer","PlotAreaBase","PlotAreaEventsMixin","SeriesAggregator","DefaultAggregates","RangeBar","RangeBarChart","OHLCPoint","OHLCChart","WaterfallSegment","WaterfallChart","CategoricalPlotArea","Highlight","Pannable","ZoomSelection","MousewheelZoom","LegendLayout","LegendItem","HORIZONTAL","POINTER","CUSTOM","Legend","PlotAreaFactory","ZOOM_ACCELERATION","SELECTOR_HEIGHT_ADJUST","Selection","SharedTooltip","BarChartAnimation","BubbleAnimation","FadeInAnimation","PieAnimation","ScatterLineChart","XYPlotArea","PieSegment","PieChartMixin","PIE_SECTOR_ANIM_DELAY","PieChart","PiePlotArea","DonutSegment","DONUT_SECTOR_ANIM_DELAY","DonutChart","DonutPlotArea","DEFAULT_PADDING","PolarPlotAreaBase","PolarScatterChart","PolarLineChart","SplinePolarAreaSegment","PolarAreaSegment","PolarAreaChart","PolarPlotArea","RadarLineChart","SplineRadarAreaSegment","RadarAreaSegment","RadarAreaChart","RadarSegment","RadarClusterLayout","RadarStackLayout","RadarBarChart","RadarPlotArea","FunnelSegment","FunnelChart","FunnelPlotArea","COLOR","FIRST","FROM","MAX","MIN","NOTE_TEXT","SUMMARY_FIELD","TO","MOUSEMOVE","CONTEXTMENU","MOUSEMOVE_DELAY","Chart","_axis","_plotArea","backgroundVisual","_bgVisual","sumOrNull","avg","_valueFields","_otherFields","_nullValue","_undefinedValue","otherFields","_makeValue","canonicalFields","pointIx","fieldData","srcValueFields","srcPointFields","_bindFromArray","sourceFields","_bindFromObject","initialValue","srcFields","srcFieldName","sourceFieldName","errorValue","initGlobalRanges","deviation","errorRange","standardError","deviationMatch","valueGetter","createValueGetter","getAverage","getStandardDeviation","globalRange","getStandardError","getErrorRange","pointValue","percentValue","isSample","squareDifferenceSum","endCaps","getAxis","valueBox","centerBox","capsWidth","getCapsWidth","capValue","capStart","capEnd","createDefaultVisual","seriesValueAxis","seriesCategoryAxis","valueAxisRanges","categoryPoints","seriesPoints","seriesOptions","_evalSeries","traverseDataPoints","addValue","pointOptions","seriesIx","pointType","invertAxes","plotValue","otherValues","categorySum","otherStack","isStacked100","plotRange","positive","prevValue","isStackedBar","otherValue","isStacked","categoryAxisCrossingValue","stackLimits","stackName","pIx","updateStackRange","limits","errorTotals","chartSeries","limitsCache","addErrorBar","lowValue","highValue","seriesErrorRanges","addPointErrorBar","stackedErrorRange","errorBar","updateRange","createPoint","owner","noteText","evalPointOptions","doEval","namedValueAxes","categorySlots","chartPoints","valueSlot","pointSlot","categorySlot","aboveAxis","stackValue","reflowPoint","reflowCategories","crossingValues","axisIndex","seriesIx$1","currentCategory","seriesIx$2","_outOfRangeCallback","_bindPoint","outOfRangePoint","bindCache","_bindCache","formatPointValue","createNote","tooltipTracking","labelTemplate","labelText","_rendered","createMarker","formatValue","markerBorder","markerBox","_childBox","childBox","noteTargetBox","reflowLabel","defaultColor","highlightVisual","halfSize","tooltipAnchor","horizontalAlign","verticalAlign","clipBox","overlapsBox","visualPoints","aliasFor","coords","getNearestPoint","calculateStepPoints","prevPoint","prevMarkerBoxCenter","markerBoxCenter","isInterpolate","seriesMissingValues","revDir","curveProcessor","curve","renderSegments","sortedPoints","pointCount","_segments","sortPoints","createSegment","_addSegment","missingValues","assumeZero","nearestPoint","pointBox","allPoints","nearestPointDistance","_setEnd","setX","_setChildrenAnimation","animationPoints","firstPoint","lastPoint","valueAxisLineBox","categoryAxisLineBox","stackPoints","_linePoints","createArea","prevSegment","strokeSegments","_strokeSegments","createFill","createStroke","prevStrokeSegments","prevAnchor","stackSegments","firstAnchor","fillSegments","closeFill","fillPath","_gapStackPoints","stackPoint","_stackPoints","endIdx","pointOffset","currentSeriesIx","gapStackPoint","startIdx","_outOfRangeMinPoint","_previousSegmentPoint","_createGapStackPoint","segmentIx","seriesIdx","chartAxisRanges","chartRange","textBox","alignToClipBox","parentBox","createLabel","rectVisual","createRect","strokeOpacity","getBorderColor","baseColor","borderColor","slotSize","positionAxis","clusterType","stackType","cluster","stackWrap","negativeColor","getStackWrap","stackGroup","wraps","_stackGroup","zeroSlot","_setAnimationOptions","pointVisual","mid","ocSlot","lhSlot","realBody","lines","reflowNote","_mainVisual","mainVisual","createOverlay","createBody","createLines","drawLines","lineStyle","normalColor","valueParts","splitValue","whiskerSlot","boxSlot","medianSlot","meanSlot","q1","q3","reflowBoxSlot","reflowWhiskerSlot","meanPoints","calcMeanPoints","whiskerPoints","calcWhiskerPoints","medianPoints","calcMedianPoints","renderOutliers","outlierValue","markersBorder","outliers","outerFence","reflowOutliers","filterOutliers","seriesAxes","_initFields","xAxisRanges","yAxisRanges","valueErrorField","lowField","highField","createMissingValue","xAxisName","xAxis","yAxisName","yAxis","xAxisRange","yAxisRange","namedXAxes","namedYAxes","currentSeriesPoints","highlightGroup","_maxSize","negativeValues","updateBubblesSize","pointsCount","animationOptions","minSize","minR","maxR","minArea","maxArea","areaRange","areaRatio","baseZIndex","targetValueSlot","targetSlotX","targetSlotY","targetSlot","bodyVisual","bulletOptions","getStyle","pointColor","paddingBottom","tooltipOptions","formatService","initAxisName","showAt","stickyMode","formattedValue","getAnchor","ref_options","moveLine","getBox","dim","axisLineBox","currentAxis","shouldClip","_clipBox","chartsBox","clipRect","unclipLabels","charts","chartContainer","appendAxis","appendChart","i$1","removeAxis","removeChart","allAxes","vGridLines","hGridLines","axisValueField","length$1","axis$1","lineBox$1","initFields","initSeries","crosshairs","createPanes","createCrosshairs","setTitle","currentPane","panes","paneOptions","panesLength","paneIndex","currentCrosshair","removeCrosshairs","hideCrosshairs","findPane","matchingPane","findPointPane","axisToRemove","filteredAxes","chartToRemove","filteredCharts","addToLegend","seriesVisible","itemLabelOptions","markerColor","inactiveItemsLabels","visibleInLegend","active","groupAxes","paneIx","paneAxes","xAxes","yAxes","any","groupSeriesByPane","seriesByPane","seriesPaneName","filterVisibleSeries","reflowPanes","reflowAxes","reflowCharts","redraw","panesArray","crossingAxes","valuesToAdd","alignAxisTo","targetAxis","crossingValue","targetCrossingValue","slotEdge","targetEdge","alignAxes","paneId","anchorCrossings","pane$1","paneId$1","visible$1","anchor$1","anchorCrossings$1","xAnchor","yAnchor","xAnchorCrossings","yAnchorCrossings","leftAnchors","rightAnchors","topAnchors","bottomAnchors","_overlap","_mirrored","shrinkAxisWidth","overflowX","shrinkAxisHeight","shrinked","overflowY","fitAxes","paneBox","currentAxis$1","reflowPaneAxes","autoRotateAxisLabels","groupedAxes","rotated","chartPane","percents","currentPane$1","i$2","currentPane$2","remainingHeight","remainingPanes","autoHeightPanes","backgroundBox","axisA","axisB","axesCount","chartsBoxes","addBackgroundPaths","multipath","backgroundContainsPoint","pointsByCategoryIndex","pointsBySeriesIndex","seriesIndex","filterPoints","pointsBySeriesName","findPoint","paneByPoint","_dispatchEvent","defaultAggregates","fieldAggregate","seriesFields","_seriesFields","rootAggregate","_series","_binder","canonicalName","aggregatePoints","srcPoints","srcValues","_bindPoints","firstDataItem","_bindField","fromOptions","toOptions","labelFrom","_createLabel","labelTo","plotLimits","oPoints","cPoints","lhPoints","oSlot","cSlot","fromBox","toBox","createSegments","summary","totalCategories","namedCategoryAxes","valueAxisRangeTracker","stack100","createCategoryAxes","aggregateCategories","createCategoryAxesLabels","createCharts","createValueAxes","paneSeries","visibleSeries","groupIx","groupSeriesByCategoryAxis","createChartGroup","createAreaChart","createBarChart","createRangeBarChart","createBulletChart","createCandlestickChart","createBoxPlotChart","createOHLCChart","createWaterfallChart","createLineChart","axisPane","dateAxis","srcSeries","processedSeries","categoryField","aggregateSeries","filterSeries","minCategory","outOfRangePoints","_outOfRangeMaxPoint","aggregatorSeries","srcData","outOfRangeMinIdx","outOfRangeMaxIdx","getFn","outOfRangeMinCategory","outOfRangeMaxCategory","aggregator","categoriesToAdd","defaultPaneName","paneName","stackableChartOptions","firstSeries","axisSeries","categoryAxes","barChart","rangeColumnChart","bulletChart","lineChart","areaChart","waterfallChart","axisRequiresRounding","categoryAxisName","categoryAxisIndex","seriesAxis","centeredSeries","aggregatedAxis","primaryAxis","defaultAxisRange","tracker","defaultRange","eventType","_eventCoordinates","pointPane","updateAxisOptions","axesOptions","_points","arrayPoints","togglePointHighlight","toggleHandler","isHighlighted","_active","_panAxes","lock","updatedAxes","marqueeColor","marquee","_marquee","removeElement","setStyles","zoomPane","_zoomPane","_zoomPaneClipBox","_selectionPosition","elementOffset$$1","selectionPosition","_updateAxisRanges","updateRanges","legendItem","createContainer","markerOptions","eventSink","_itemOverlay","_legendItemHover","pointIndex","createItems","userAlign","innerElement","hasItems","legendBox","containerCustomReflow","containerReflow","alignTarget","containerBox","_registry","registry","_dateAxis","initOptions","createElements","_index","leftHandle","rightHandle","selectionStyles","leftHandleHeight","rightHandleHeight","leftMask","rightMask","borderLeftWidth","borderRightWidth","_mousewheelHandler","mousewheel","_mousewheel","_domEvents","tap","_tap","_gesturestart","_gesturechange","gestureend","_gestureend","_mwTimeout","_state","_rangeEventArgs","_value","moveTarget","oldRange","rightClick","_toModelCoordinates","_slot","rightMaskWidth","leftMaskWidth","zDir","tooltipPoints","_slotAnchor","_defaultAnchor","categoryText","categoryFormat","centerPoint","slotCenter","fromScale","fadeTo","missingValue","xAxisRangeTracker","yAxisRangeTracker","filteredSeries","createScatterChart","createScatterLineChart","createBubbleChart","createAxes","xAxisOptions","yAxisOptions","createXYAxis","seriesAxisName","firstPointValue","inferredDate","namedAxes","isLog","typeSamples","axisPane$1","xAxesOptions","yAxesOptions","xValues","yValues","brightnessValue","themeLabels","animationDelay","labelHeight","labelWidth","lp","labelsOptions","labelsDistance","createSegmentVisual","borderOptions","singleSegment","createLegendItem","pointVisible","legendOptions","legendItems","colorsCount","anglePerValue","constantAngle","explode","evalSegmentOptions","segmentOptions","minWidth","halfMinWidth","defaultPadding","newBox","newBoxCenter","leftSideLabels","rightSideLabels","seriesConfig","seriesConfigs","labelComparator","leftLabelsReflow","rightLabelsReflow","distances","distanceBetweenLabels","distributeLabels","secondBox","lr","firstBox","remaining","_takeDistance","amount","boxX","labelDistance","boxY","hAlignLabel","connectorsColor","connectorLine","sr","crossing","_connectorLines","pointInCircle","reverseValue","originalX","sector_center","createPieChart","pieChart","totalSize","seriesWithoutSize","holeSize","currentSeries$1","createDonutChart","donutChart","createPolarAxis","createValueAxis","axisDefaultRange","valueAxisOptions","valueAxisBox","heightDiff","valueRadius","_polarAxisCenter","_hasMissingValuesGap","scatterChart","slotSector","childSector","_hasBarCharts","_isStacked100","chartOptions","chartBox","createPath","labelPadding","dynamicSlopeReflow","totalHeight","lastUpperSide","previousOffset","previousHeight","nextSegment","nextPercentage","firstSegment","maxSegment","dynamicHeight","segmentSpacing","constantSlopeReflow","decreasingWidth","neckRatio","topMostWidth","finalNarrow","dynamicSlope","createFunnelChart","funnelChart","errorLow","errorHigh","_initElement","_originalOptions","_theme","_initTheme","_initSurface","_initHandlers","bindCategories","_redraw","_attachEvents","_setElementClass","seriesCopies","applySeriesColors","_noTransitionsRedraw","_model","findAxisByName","seriesName","categoryName","togglePointsHighlight","_sharedTooltip","_surfaceWrap","renderAs","_getModel","_destroyView","_createTooltip","_setupSelection","_createPannable","_createZoomSelection","_createMousewheelZoom","_navState","_cancelDomEvents","originalChartArea","pannable","_pannable","zoomable","_zoomSelection","_mousewheelZoom","_createSharedTooltip","seriesColor","_createPlotArea","_modelOptions","skipSeries","_hasSelection","_selections","selections","_selectStart","_selectEnd","_clickHandler","_surfaceMouseenterHandler","_mouseover","_surfaceMouseleaveHandler","_mouseout","_toDocumentCoordinates","obj$1","_shouldAttachMouseMove","domEvents","_stopDragEvent","_gestureDistance","_zooming","previousGestureDistance","mousewheelZoom","_drawingChartElement","_startNavigation","_suppressHover","ranges$1","_endNavigation","prevented","totalDelta","chartEvent","_getChartElement","_elementPadding","_padding","drawingElement","_activePoint","_propagateClick","_startHover","handlingTap","_mouseMoveTrackHandler","_mouseMoveTracking","seriesPoint","_trackCrosshairs","_trackSharedTooltip","pointArgs","hoverArgs","_tooltipCategoryIx","hideElements","_deferRedraw","_clearRedrawTimeout","_redrawTimeout","bindCategoryAxisFromSeries","onAxis","dataLength","dataIx","dataRow","uniqueCategories","_isBindable","transitionsState","updateMouseMoveHandler","applyOptions","createProxyMember","nameTemplate","seriesClone","legacyTemplate","groupNameTemplate","_groupIx","_groupValue","ChartInstanceObserver","proxyMembers","SeriesVisibilityState","geom","ChartPane","ChartSeries","KendoChart","MOUSELEAVE_NS","DATABOUND","LEAVE","TOOLTIP_ANIMATION_DURATION","TOOLTIP_SHOW_DELAY","TOOLTIP_INVERSE","SHARED_TOOLTIP_CLASS","legendItemClick","_seriesVisibility","_initDataSource","_bindSeries","_bindCategories","_getThemeOptions","_sourceSeries","setDataSource","_hasDataSource","_onDataChanged","_dataChangeHandler","_hasData","_destroyCrosshairTooltips","findPaneByName","findPaneByIndex","findSeries","findSeriesByName","_createSeries","findSeriesByIndex","_seriesOptions","_initChart","_createChart","_onInit","_initTooltip","tooltips","_crosshairTooltips","_getCrosshairTooltip","_showTooltip","_hideTooltip","_onRender","_copyMembers","_tooltipleave","_onLegendItemClick","_legendItemClick","_bindData","groupedSeries","grouped","seriesVisibility","applyByGroup","applyByIndex","seriesData","categoriesData","_bindCategoryAxis","PDFMixin","mobileScrollerSelector","_mobileScroller","_clearShowTimeout","sharedTemplate","_ensureElement","showTimeout","_sharedContent","_pointContent","_hideElement","nameColumn","colorMarker","colspan","fadeOut","always","tooltipTemplate","xLow","xHigh","yLow","yHigh","_chart","_pane","chartsVisual","_options","_filterPoints","_clearFields","toggleVisibility","hasFilter","_filterData","_buildLabel","styleGeometry","_pad","styleBox","getRange","_unpad","ArrowLinearPointerAnimation","BarLinearPointerAnimation","geo","ANGULAR_SPEED","LINEAR_SPEED","ARROW","ARROW_POINTER","BAR_POINTER","CAP_SIZE","DEFAULT_LINE_WIDTH","DEFAULT_MIN_WIDTH","DEFAULT_MIN_HEIGHT","DEFAULT_MARGIN","DEGREE","GEO_ARC_ADJUST_ANGLE","NEEDLE","RADIAL_POINTER","Pointer","scaleOptions","_oldValue","repaint","RadialPointer","cap","setAngle","oldAngle","newAngle","RadialPointerAnimation","_renderNeedle","_renderCap","_renderArrow","getRadiusX","capSize","needleColor","needlePath","capColor","RadialScale","renderArc","labelElements","renderLabels","renderTicks","renderRanges","repositionRanges","labelAngle","isInside","lbl","prevLabelPos","labelTransform","tickAngles","rangeDistance","labelsGroup","setRadiusX","setRadiusY","rangeRadius","getRangeRadius","rangeGeom","rangeSegments","segmentsCount","rangeSegment","drawTicks","tickStart","tickEnd","labelsPosition","allTicks","tickArc","majorTickAngles","_tickDifference","minorTickAngles","normalizeTickAngles","tickCount","repositionTicks","minor","newPoint","xDiff","yDiff","Gauge","_createSurface","gaugeArea","_setValueOptions","_draw","_visuals","allValues","_getSize","_createGaugeArea","_createModel","_gaugeAreaMargin","areaGeometry","RadialGauge","radialGauge","_initialPlotArea","alignScale","_buildVisual","midDiff","oldDiff","plotAreaBox","getDiff","staleFlag","getPlotBox","plotBbox","plotBox","plotBoxCenter","paddingX","paddingY","LinearGauge","linearGauge","bboxX","bboxY","bbox2D","_getBox","_alignElements","_shrinkElements","scaleElements","currentOptions","LinearScale","ArrowLinearPointer","BarLinearPointer","scaleBox","pointerBox","scaleLine","renderLine","scaleTicks","linePath","renderAxisTick","tickPath","LinearPointer","track","pointerRangeBox","trackBox","trackSize","pointerHalfSize","getElementOptions","_margin","pointerShape","elementOptions","minSlot","sizeAxis","pointerPath","oldShape","oldPoints","newPoints","anim","toScale","translateX","translateY","speed","getNext","state128","state128AB","states128","code128Base","msiBase","Barcode","DEFAULT_QUIETZONE_LENGTH","numberRegex","alphanumericRegex","InvalidCharacterErrorTemplate","Encoding","quietZoneLength","addQuietZone","initValue","addData","addCheckSum","invalidCharacterError","character","encodings","code39Base","minBaseUnitLength","addStart","addCharacter","pushCheckSum","prepareValues","charData","characterMap","addBase","code39ExtendedBase","addExtended","extendedMappings","shiftCharacters","dataCharacter","specialAsciiCodes","0","64","96","127","shiftValuesAsciiCodes","39","41","42","+","%","code39","checkSumMod","minRatio","maxRatio","gapWidth","splitCharacter","patternString","minBaseUnit","minHeight","getBaseUnit","getBaseWidth","characterLength","addPattern","addCharacterGap","patternMappings","w","B","W","A","C","E","H","I","J","K","L","N","O","P","R","S","U","V","Z","-"," ","code39extended","SHIFT0","SHIFT1","SHIFT2","SHIFT3","code93","cCheckSumTotal","kCheckSumTotal","setBaseUnit","checkSumLength","TERMINATION_BAR","checkValues","_getCheckValues","checksum","_findCharacterByValue","cValue","kValue","wightedSum","weightedValue","code93extended","encoding","FNC4","states","_initMoves","isCode","encodingState","_moves","numberMatch","maxLength","_moveFNC","_shiftState","_moveState","fnc","previousState","SHIFT","next4","dependentStates","_initSubStates","subState","_getSubState","_initSubState","_pushStart","pushData","subStates","_getAll","FNC1","startState","startAI","endAI","nextStart","separatorLength","regexSeparators","getBySeparator","getByLength","validate","getAI","unsupportedAIError","applicationIdentifiers","multiKey","ids","22","402","7004","242","8020","703","8008","253","8003","_initStates","checkSum","getNextState","STOP","code128a","code128b","code128c","code128","startStopLength","checkSumFunction","checkSums","checkSumType","Modulo10","evenSum","oddSum","odd","Modulo11","weight","checkValue","weightedSum","mod","Modulo11Modulo10","mod11Value","Modulo10Modulo10","mod10Value","msimod10","msimod11","msimod1110","msimod1010","code11","kCheckSumMinLength","DASH_VALUE","DASH","getWeightedSum","postnet","VALID_CODE_LENGTHS","DIGIT_SEPARATOR","baseHeight","ean13","calculateChecksum","leftKey","leftPart","rightPart","addPieces","addSide","keyTable","arrToAdd","limitedHeight","even","ean8","surfaceWrap","_render","textToDisplay","textHeight","textMargin","barHeight","_getBackground","_getText","_bandsGroup","_getBands","_textbox","toDecimal","toBitsString","splitInto","fillFunctionCell","matrices","bit","fillDataCell","maskPatternConditions","generatePowersOfTwo","powersOfTwoResult","powersOfTwo","generateGeneratorPolynomials","firstPolynomial","secondPolynomial","maxErrorCorrectionCodeWordsCount","generatorPolynomials","multiplyPolynomials","multiplyByConstant","getNumberAt","scoreFinderPatternOccurance","scores","rowColumn","finderPatternValue","scoreAdjacentSameBits","previousBits","adjacentBits","calculateDarkModulesRatioScore","darkModules","mod5","score","modeInstances","mode","FreeCellVisitor","fillData","padDataString","xorPolynomials","generateErrorCodewords","getBlocks","chooseMode","getModes","getDataCodewordsCount","getVersion","getDataString","encodeFormatInformation","encodeBCH","dividePolynomials","initMatrices","addFormatInformation","encodeVersionInformation","addVersionInformation","addCentricPattern","addFinderSeparator","addFinderPatterns","addAlignmentPatterns","addTimingFunctions","scoreMaskMatrixes","EncodingResult","IsoEncoder","UTF8Encoder","QRCodeDataEncoder","encodeData","QRCodeDefaults","QRCode","terminator","NUMERIC","ALPHA_NUMERIC","BYTE","irregularAlignmentPatternsStartDistance","15","16","18","19","24","26","28","31","32","33","36","37","versionsCodewordsInformation","totalDataCodewords","errorCodewordsPerBlock","finderPattern","alignmentPattern","errorCorrectionPatterns","formatMaskPattern","formatGeneratorPolynomial","versionGeneratorPolynomial","paddingCodewords","alphaPattern","alphaExclusiveSet","alphaRegex","alphaNumericRegex","byteRegex","initMinNumericBeforeAlpha","initMinNumericBeforeByte","initMinAlphaBeforeByte","minNumericBeforeAlpha","minNumericBeforeByte","minAlphaBeforeByte","QRDataMode","getVersionIndex","getBitsCharacterCount","bitsInCharacterCount","getModeCountString","modeIndicator","getStringBitsLength","modes","inputLength","mod3","characters","*","startColumn","getNextCell","getNextRemainderCell","blocks","block","codewordIdx","blockIdx","cellVisitor","dataString","dataBitsCount","terminatorIndex","paddingCodewordIndex","errorCodewordsCount","generator","generatorPolynomial","steps","errorCodewords","dataStream","versionCodewordsInformation","dataBlock","blockCodewordsCount","groupBlocksCount","messagePolynomial","codeword","codewordStart","dataBlocks","errorBlocks","versionGroups","previousMode","modeString","numeric","numericMatch","alphaMatch","alphaNumeric","alphaNumericMatch","nextMode","dataCodewordsCount","errorCorrectionLevel","encodedString","codeLength","generatorNumber","polynomialLength","valueNumber","valueString","numberX","numberY","yLength","xLength","modules","quotient","nextX","nextY","startDistance","adjacentSameBits","getEncodingResult","inputString","encodingMode","utfBOM","initialModeCountStringLength","encodeCharacter","significantOnes","bytesCount","getBytesCount","bc","optimalMatrix","encoder","encodingResult","versionInformation","DEFAULT_SIZE","QUIET_ZONE_LENGTH","DEFAULT_ERROR_CORRECTION_LEVEL","DEFAULT_BACKGROUND","DEFAULT_DARK_MODULE_COLOR","MIN_BASE_UNIT_SIZE","quietZoneSize","dataSize","contentSize","errorCorrection","_calculateBaseUnit","_renderBackground","_renderMatrix","matrixSize","QRCodeFunctions","QRCodeFields","ClonedObject","FadeOutAnimation","NavigatorHint","NAVIGATOR_PANE","NAVIGATOR_AXIS","Navigator","AUTO_CATEGORY_WIDTH","StockChart","_initialOpacity","chartPadding","scroll","tooltipStyle","minPos","maxPos","posRange","clearHideTimeout","_visible","borderTopWidth","_hideTimeout","_hideAnimation","chartObserver","_redrawSelf","initSelection","mainAxis","axisClone","selectStart","selectEnd","setRange","filterAxes","redrawSlaves","slavePanes","navigatorAxis","naviRange","inNavigator","liveDrag","showHint","readSelection","ref_selection_options","_zoom","fromIx","toIx","_zoomEnd","naviOptions","__navi","attachAxes","attachSeries","valueAxes","equallySpacedSeries","justifyAxis","_collapse","autoBindElements","user","navigatorSeries","dateField","stockDefaults","destroyNavigator","_fullRedraw","_dirty","partialRedraw","_seriesCount","copyNavigatorCategories","buildFilter","KendoStockChart","StockInstanceObserver","navigatorFilter","navigatorCreated","_initNavigatorOptions","navigatorOptions","isTouch","isFirefox","dummyAxis","hasServerFiltering","hasSelect","_onNavigatorCreated","_navigator","_initNavigatorDataSource","dsOptions","_navigatorDataChangedHandler","_onNavigatorDataChanged","_navigatorDataSource","naviCategories","axesLength","_removeNavigatorDataSource","_onNavigatorFilter","navigatorDataSource","wrapNumber","TOP_OFFSET","SharedTooltip$1","DEAULT_BAR_WIDTH","DEAULT_BULLET_WIDTH","NO_CROSSHAIR","Sparkline","_initialWidth","stage","displayState","_autoWidth","inline","_calculateWidth","currentChart","pointWidth","normalizeOptions","SparklineTooltip","KendoSparkline","sqr","renderSize","renderPos","romanToArabic","memoize","isUnicodeLetter","RX_UNICODE_LETTER","Extent","Location","lat","lng","DISTANCE_ITERATIONS","DISTANCE_CONVERGENCE","DISTANCE_PRECISION","FORMAT","loc","datum","greatCircleTo","bearing","fromLat","fromLng","dToR","datums","WGS84","U1","sinU1","cosU1","U2","sinU2","cosU2","lambda","prevLambda","converged","sinLambda","cosLambda","sino","cosA2","coso","cos2om","sigma","sinA","u2","deltao","azimuthFrom","azimuthTo","fromLngLat","ll","fromLatLng","nw","se","containsAny","locs","include","includeAll","edges","sw","extent","World","Attribution","itemTemplate","_extent","_itemText","inZoomLevel","_inZoomLevel","minZoom","maxZoom","inArea","_inArea","button","BUTTONS","_keyroot","_keydown","panStep","_pan","iconClass","PLUS","MINUS","FF_PLUS","FF_MINUS","ZoomControl","zoomStep","exp","PI_DIV_4","Mercator","MAX_LNG","MAX_LAT","INVERSE_ITERATIONS","INVERSE_CONVERGENCE","centralMeridian","clamp","proj","lng0","_projectLat","ecc","ts","con","inverse","_inverseY","dphi","ecch","phi","SphericalMercator","Equirectangular","EPSG3857","crs","_proj","_tm","_itm","toPoint","toLocation","EPSG3395","EPSG4326","projections","Layer","_beforeReset","_panEnd","_activate","_updateAttribution","_deactivate","_applyExtent","_setVisibility","matchMinZoom","matchMaxZoom","inside","attribution","layers","ShapeLayer","_initRoot","_markers","_dataChange","_translateSurface","_load","_clearMarkers","_loader","GeoJSONLoader","shapeCreated","cancelled","_createMarker","layer","featureCreated","_panning","locationToView","locator","defaultStyle","unwrap","_loadGeometryTo","_featureCreated","_shapeCreated","_loadPolygon","_setLineFill","_loadPoint","_loadShape","rings","_buildPolygon","geojson","features","geometries","BubbleLayer","locationField","opt","scaleType","_scaleType","_createSymbol","_drawSymbol","scales","symbols","SqrtScale","domain","domainRange","outputRange","_domain","_ratio","rel","Symbols","roundPoint","drawingUtil","TileLayer","subdomains","viewType","_viewType","locationToLayer","viewOrigin","_updateView","TileView","extentToPoint","pool","TilePool","tileSize","urlTemplate","_center","_viewOrigin","pointToTileIndex","tileCount","firstTileIndex","indexToPoint","subdomainText","subdomainIndex","tile","createTile","currentIndex","tileOptions","wrapIndex","subdomain","errorUrlTemplate","boundary","wrapValue","ImageTile","errorUrl","urlResult","urlOptions","z","quadkey","_create","maxDist","BingLayer","_scheme","_onMetadata","_fetchMetadata","imagerySet","uriScheme","resource","resourceSets","resources","imageUrl","imageUrlSubdomains","zoomMin","zoomMax","_addAttribution","BingView","imageryProviders","coverageAreas","tileQuadKey","digit","quadKey","bing","MarkerLayer","_markerClick","titleField","_addOne","Marker","addTo","getLocation","getTitle","renderTooltip","contentTemplate","contentUrl","CSS_PREFIX","FRICTION_MOBILE","Map","_getOrigin","_initScroller","_initMarkers","_initControls","_initLayers","controls","layerDefaults","markerDefaults","wraparound","scroller","zoomControl","_setExtent","_getExtent","_layerSize","layerToLocation","viewToLocation","eventOffset","eventToView","eventToLayer","eventToLocation","_setOrigin","_origin","layerWidth","layerHeight","_zoomAround","pivot","_createAttribution","_createNavigator","_createZoomControl","_createControlElement","defaultPos","posSelector","_navigatorPan","_navigatorCenter","bounds","_virtualSize","_scrollEnd","_zoomControlChange","_scroll","_scaleStart","_scrollOffset","_panComplete","_panEndTS","_scaleToZoom","gestureCenter","centerLocation","tiles","_resetScroller","xBounds","yBounds","_renderLayers","scrollWrap","fromZoom","toZoom","postZoom","Range","rangeIntegerScale","Utils","findRadian","sngXComp","sngYComp","Easing","Ticker","EPSILON","isNearZero","isDefined","isUndefined","has","isBoolean","isType","isEmpty","simpleExtend","initArray","serializePoints","res","deserializePoints","randomInteger","DFT","getMatrixAngle","getMatrixScaling","sX","sY","findAngle","thisRef","what","fold","constraint","bisort","sortfunc","addRange","easeInOut","adapters","lastTime","_this","timerDelegate","onTimerEvent","addAdapter","onComplete","removeHandler","caller","onStep","seekTo","seekFromTo","intervalId","initState","propagate","movement","intersectLine","start1","end1","start2","end2","isSegment","num1","num2","tangensdiff","normalVariable","randomId","chars","PathDefiner","Intersect","RectAlign","Polar","MatrixVector","Geometry","HashTable","Dictionary","Queue","Set","Link","Graph","HITTESTAREA","plus","minus","times","lengthSquared","middleOf","toPolar","useDegrees","halfpi","factor","isOnLine","o1","u1","inflate","tempStr","xy","rotatedBounds","delimiter","staicPoint","adornerCenter","scaled","thisCenter","rectBottomRight","Empty","rectWithLine","rects","reverseAngle","alignValues","_singleAlign","_left","_right","stretch","_stretch","_top","_middle","_bottom","alignCalc","applyRect","fromSVGMatrix","vm","fromMatrixVector","fromList","translation","scaling","nums","fromMatrix","_distanceToLineSquared","pt1","pt2","vx","vy","distanceToLine","distanceToPolyline","minimum","_buckets","_createGetBucket","_bucketExists","containsKey","hashId","bucket","hashes","_hashes","ht","_hashString","_objectHashId","_hashId","dictionary","_hashTable","forEachValue","forEachKey","enqueue","kv","links","outgoing","incoming","associatedShape","shortForm","isVirtual","isIsolated","isLinkedTo","link","getComplement","getChildren","getParents","balance","adjacentTo","removeLink","hasLinkTo","degree","incidentWith","getLinksWith","getNeighbors","neighbors","connection","sourceFound","targetFound","associatedConnection","getCommonNode","isBridging","v1","v2","getNodes","changeSource","changeTarget","changesNodes","oldSource","oldTarget","directTo","createReverseEdge","reversed","idOrDiagram","_nodeMap","_hasCachedRelationships","cacheRelationships","forceRebuild","assignLevels","startNode","visited","getConnectedComponents","componentId","components","graph","componentIndex","setItemIndices","_collectConnectedNodes","addNodeAndOutgoings","setIds","nodeIndex","nextId","calcBounds","getSpanningTree","levelCount","ni","cn","newLink","treeLevels","_addNode","addLink","takeRandomNode","excludedNodes","incidenceLessThan","isHealthy","hasNode","sourceOrLink","foundSource","foundTarget","addExistingLink","getNode","addNode","removeAllLinks","hasLink","linkOrId","nodeOrId","_removeNode","removeNode","areConnected","n1","n2","layoutRect","newNode","newLinks","saveMapping","nodeMap","linkMap","nOriginal","nCopy","linkOriginal","linkCopy","linearize","addIds","depthFirstTraversal","foundNode","_dftIterator","breadthFirstTraversal","_stronglyConnectedComponents","excludeSingleItems","indices","lowLinks","connected","component","findCycles","isAcyclic","isSubGraph","otherArray","thisArray","makeAcyclic","oneLink","oneNode","rev","intensityCatalog","flowIntensity","catalogEqualIntensity","sourceStack","targetStack","intensity","targetLink","sources","si","sourceLink","maxdiff","ril","vertexOrder","kk","reversedEdges","Predefined","EightGraph","Mindmap","ThreeGraph","BinaryTree","levels","createBalancedTree","Linear","Tree","siblingsCount","Forest","trees","createBalancedForest","Workflow","Grid","graphString","previousLink","lin","_addShape","kendoDiagram","undoable","addShape","_addConnection","connect","createDiagramFromGraph","doLayout","randomSize","gli","sourceShape","targetShape","shi","SpringLayout","layoutGraph","limitToView","counter","lastAdded","news","treeCount","createRandomConnectedGraph","nodeCount","maxIncidence","isTree","poolNode","randomAdditions","randomDiagram","shapeCount","diffNumericOptions","sizeOptionsOrDefault","normalizeDrawingOptions","drawingOptions","getColor","lineAngle","toDrawingRect","Scale","Translation","Rotation","CompositeTransform","AutoSizeableMixin","VisualBase","TextBlock","Rectangle","MarkerBase","CircleMarker","ArrowMarker","MarkerPathMixin","Line","Polyline","Canvas","Markers","none","arrowStart","filledCircle","arrowEnd","FULL_CIRCLE_ANGLE","toMatrixVector","Length","_transform","_renderTransform","rotateMatrix","scaleMatrix","translatePoint","_setScale","originWidth","_originWidth","originHeight","_originHeight","_setTranslate","_initSize","autoSize","_updateSize","_diffNumericOptions","_originSize","drawingContainer","_hover","_measured","_boundingBox","_fill","_stroke","strokeOptions","fillOptions","GradientClass","_textColor","_font","_initText","fontOptions","fontStyle","fontWeight","sizeChanged","_initPath","_setPosition","_drawPath","sizeOptions","_transformToPath","positionMarker","targetSegment","_getPath","_normalizeMarkerOptions","startCap","endCap","_removeMarker","_createMarkers","markerType","_positionMarker","_capMap","_redrawMarker","pathChange","pathOptions","pathCapType","optionsCap","_redrawMarkers","_createElements","_setData","_updatePath","_pointsDiffer","currentPoints","differ","_initImage","_childrenChange","toFront","toBack","_reorderChildren","toIndex","drawingChildren","fixedPosition","childBoundingBox","_includeInBBox","drawingRect","_initCircle","circleOptions","_circle","_translate","_viewBox","clearHtml","testKey","hitToOppositeSide","hit","canDrag","drag","hitTestShapeConnectors","connector","HIT_TEST_DISTANCE","noMeta","PositionAdapter","LayoutUndoUnit","CompositeUnit","ConnectionEditUnit","ConnectionEditUndoUnit","DeleteConnectionUnit","DeleteShapeUnit","TransformUnit","AddConnectionUnit","AddShapeUnit","PanUndoUnit","RotateUnit","ToFrontUnit","ToBackUnit","UndoRedoService","EmptyTool","ScrollerTool","PointerTool","SelectionTool","ConnectionTool","ConnectionEditTool","ToolService","ConnectionRouterBase","LinearConnectionRouter","PolylineRouter","CascadingRouter","AdornerBase","ConnectionEditAdorner","ConnectorsAdorner","ResizingAdorner","Selector","ConnectorVisual","Cursors","grip","cross","south","east","west","north","rowresize","colresize","DEFAULT_SNAP_SIZE","DEFAULT_SNAP_ANGLE","ITEMROTATE","ITEMBOUNDSCHANGE","MIN_SNAP_SIZE","MIN_SNAP_ANGLE","MOUSE_ENTER","MOUSE_LEAVE","SCROLL_MIN","SCROLL_MAX","PAN","ROTATED","TARGET","HANDLE_NAMES","-1","layoutState","pusher","getShapeById","subjects","froms","tos","initialState","finalState","_initialState","_finalState","undo","setState","redo","ticker","conn","undoUnit","redoSource","redoTarget","_redoSource","_redoTarget","_undoSource","_undoTarget","_updateConnector","updateModel","undoSource","undoTarget","targetConnector","undoStates","adorner","redoStates","layout","refreshBounds","deselect","initialPosition","finalPosition","finalPos","undoRotates","redoRotates","redoAngle","_angle","_innerBounds","_initialize","initialIndices","_toIndex","capacity","begin","commit","execute","_restart","addCompositeItem","toolService","tryActivate","getCursor","virtualScroll","tool","scrollable","movableCanvas","hoveredItem","hoveredAdorner","_hoveredConnector","scrollPos","_storePan","selectSingle","_hitTest","_resizingAdorner","isDragHandle","connections","undoRedoService","isSelected","selectArea","_createConnection","_c","connectionHandle","_connectionManipulation","_removeHover","activeConnection","_cachedTouchTarget","cachedTouchTarget","sourceConnector","Shape","getConnector","_syncConnectionChanges","_connectorsAdorner","isActive","handleName","activeTool","_updateHoveredItem","_activateTool","_updateCursor","updateHovered","keyDown","toRemove","metaKey","_triggerRemove","_syncChanges","_destroyToolBar","_discardNewConnection","selectAll","wheel","zoomRate","zoomOptions","setTool","addToSelection","newConnection","disabledShape","selectedConnections","_selectedItems","Connection","_hitTestItems","_hitTestElements","mainLayer","shapeIdx","connectionIdx","shapeHit","connectionHit","hitTest","rec","getBounds","SAME_SIDE_DISTANCE_RATIO","routePoints","_connectorPoints","_floatingPoints","_resolvedSourceConnector","_resolvedTargetConnector","sourcePoint","targetPoint","_connectorSides","boundsPoint","secondarySign","_connectorSide","sideDistance","minSide","shapeBounds","sides","_sameSideDistance","pointX","pointY","sourceConnectorSide","targetConnectorSide","deltaX","sameSideDistance","shiftX","shiftY","cascadeStartHorizontal","_startHorizontal","sourceSide","_adorners","sp","tp","_ts","spVisual","epVisual","_initialSource","_initialTarget","sourcePointDistance","targetPointDistance","sourceHandle","targetHandle","modelToLayer","_refreshHandler","ctr","_clearVisual","_keepCachedTouchTarget","visualChildren","_manipulating","_initSelection","_createHandles","_internalChange","_rotatedHandler","_resizable","_handleOptions","_bounds","handleBounds","handlesCount","_getHandleBounds","_rotationOffset","_startAngle","_rotates","_positions","initialRotates","initialStates","handleOptions","_sp","_cp","_lp","shapeStates","visibleHandles","dragging","newBounds","staticPoint","thr","newCenter","oldBounds","dtl","dbr","changed","_truncateAngle","_rotating","shouldSnap","_truncateDistance","_displaceBounds","_truncatePositionToGuides","ruler","truncatePositionToGuides","_truncateSizeToGuides","truncateSizeToGuides","snap","snapOptions","snapAngle","snapSize","_diffStates","_syncShapeChanges","rotationThumb","_rotationThumbBounds","_ep","_adorn","visualBounds","modelToView","relative","_visualBounds","HyperTree","LayoutBase","subtype","nodeDistance","iterations","horizontalSeparation","verticalSeparation","underneathVerticalTopOffset","underneathHorizontalOffset","underneathVerticalSeparation","componentSpacingX","componentSpacingY","layerSeparation","layeredIterations","startRadialAngle","endRadialAngle","radialSeparation","radialFirstLevelSeparation","keepComponentsInOneRadialLayout","ignoreContainers","layoutContainerChildren","ignoreInvisible","animateTransitions","gridLayoutComponents","maxWidth","startX","startY","resultLinkSet","resultNodeSet","boundingRect","currentHeight","currentWidth","moveToOffset","nodeBounds","newpoints","deltax","deltay","currentHorizontalOffset","transferOptions","DiagramToHyperTreeAdapter","shapeMap","edgeMap","finalNodes","finalLinks","ignoredConnections","ignoredShapes","hyperMap","hyperTree","finalGraph","_renormalizeShapes","_renormalizeConnections","mapConnection","mapShape","getEdge","listToRoot","containerGraph","parentContainer","firstNonIgnorableContainer","isContainer","_isIgnorableItem","isContainerConnection","isDescendantOf","isIgnorableItem","isCollapsed","_isVisible","_isTop","isShapeMapped","leastCommonAncestor","al","xa","xb","_isCollapsed","sink","sourceNode","sinkNode","newEdge","areConnectedAlready","finalNodeSet","LayoutState","initialTemperature","guessBounds","temperature","_expectedBounds","refineStage","_repulsion","_attraction","_shake","rho","_InverseSquareForce","wn","hn","wm","hm","_SquareForce","av","squareSize","multiplier","TreeLayoutProcessor","treeGraph","layoutSwitch","layoutLeft","setChildrenDirection","setChildrenLayout","TreeDirection","Width","arrange","layoutRight","layoutUp","layoutDown","treeDirection","layoutRadialTree","previousRoot","maxDepth","calculateAngularWidth","radialLayout","Angle","tipOverTree","startFromLevel","aw","diameter","sectorAngle","sortChildren","nl","col","basevalue","normalizeAngle","childAngleFraction","deltaTheta","deltaThetaHalf","parentSector","setPolarLocation","BoundingRectangle","includeStart","rootDirection","rootLayout","childrenLayout","givenSize","shapeWidth","shapeHeight","AngleToParent","SectorAngle","pp","childrenwidth","selfLocation","male","female","leftcount","tipOverTreeStartLevel","TreeLayout","layoutComponents","getTree","givenRootShape","getTreeForRoot","LayeredLayout","_initRuntimeProperties","downstreamLinkCount","upstreamLinkCount","uBaryCenter","dBaryCenter","upstreamPriority","downstreamPriority","gridPosition","_prepare","targetLayer","sortedNodes","minLayer","layerMap","layerCount","o2","o1layer","o2layer","linksTo","_dummify","_optimizeCrossings","_swapPairs","arrangeNodes","_moveThingsAround","_dedummify","setMinDist","minDist","layerIndex","minDistances","getMinDist","i1","i2","placeLeftToRight","leftClasses","classNodes","rightSibling","neighbor","leftPos","placeLeft","POSITIVE_INFINITY","nodeLeftClass","upNodes","downNodes","intDiv","placeRightToLeft","rightClasses","leftSibling","rightPos","placeRight","NEGATIVE_INFINITY","nodeRightClass","_getLeftWing","leftWing","computeClasses","_getRightWing","rightWing","wingPair","ndsinl","vnode","wings","currentWing","wing","_nodesInLink","classIndex","_isVerticalLayout","_isHorizontalLayout","_isIncreasingLayout","maximumHeight","currentNode","currDown","downNode","placed","sequenceStart","sequenceEnd","fromLayerIndex","reachedFinalLayerIndex","layerIncrement","_gridPositionComparer","virtualStartIndex","virtualStart","sequence","virtualEnd","virtualEndIndex","_firstVirtualNode","_sequencer","nextVirtualNode","adjustDirections","prevBridge","prevBridgeTarget","nextBridge","nextBridgeTarget","clayer","j1","j2","getNeighborOnLayer","_sequenceSingle","combineSequences","pair","rightHeap","leftRes","rightRes","leftHeap","_positionDescendingComparer","_positionAscendingComparer","leftClass","_getComposite","rightClass","maxLayoutIterations","it","gridPos","layoutLayer","iconsidered","considered","n1Priority","n2Priority","nodeGridPos","nodeBaryCenter","calcBaryCenter","nodePriority","moveRight","moveLeft","calcDownData","calcUpData","priority","rightNode","rightNodePriority","leftNode","leftNodePriority","mapVirtualNode","nodeToLinkMap","linkToNodeMap","addLinkBetweenLayers","oLayer","dLayer","oPos","dPos","upLayer","downLayer","depthOfDumminess","prevLink","dedum","moves","maxIterations","iter","optimizeLayerCrossings","presorted","inode","compareValue","n1BaryCenter","n2BaryCenter","compareByIndex","downwards","secondPass","hasSwapped","calcCrossings","memCrossings","crossBefore","node1","node2","node1GridPos","node2GridPos","crossAfter","revert","countLinksCrossingBetweenTwoLayers","ulayer","dlayer","link1","link2","n11","n12","n21","n22","l1","l2","n11gp","n12gp","n21gp","n22gp","crossings","numerator","denominator","graphOrNodes","diagramOrGraphOrNodes","GraphAdapter","adjustPopupWidth","computedWidth","min-width","toggleActive","STATE_ACTIVE","actionSheetWrap","preventClick","findFocusableSibling","getSibling","candidate","Item","Button","ToolBarButton","OverflowButton","ButtonGroup","ToolBarButtonGroup","OverflowButtonGroup","ToolBarSplitButton","OverflowSplitButton","ToolBarSeparator","OverflowSeparator","TemplateItem","OverflowTemplateItem","ToolBar","TOOLBAR","BUTTON","OVERFLOW_BUTTON","TOGGLE_BUTTON","BUTTON_GROUP","SPLIT_BUTTON","SEPARATOR","POPUP","RESIZABLE_TOOLBAR","STATE_DISABLED","STATE_HIDDEN","GROUP_START","GROUP_END","ICON","ICON_PREFIX","BUTTON_ICON","BUTTON_ICON_TEXT","LIST_CONTAINER","SPLIT_BUTTON_ARROW","OVERFLOW_ANCHOR","OVERFLOW_CONTAINER","FIRST_TOOLBAR_VISIBLE","LAST_TOOLBAR_VISIBLE","CLICK","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","getParentGroup","isChild","_addGraphics","spriteCssClass","showText","hasIcon","showIcon","overflowHidden","createButtons","buttonConstructor","buttons","buttonGroup","mainButton","arrowButton","popupElement","createMenuButtons","createPopup","_navigatable","splitButton","kendoPopup","menuButtons","rootUid","_isRtl","_groups","isMobile","_renderOverflow","overflowUserEvents","_toggleOverflow","_resizeHandler","_buttonClick","release","_toggleOverflowAnchor","overflowTool","itemClasses","overflowTemplate","_shrink","_getItem","toolbarItem","overflowItem","isResizable","getSelectedFromGroup","horizontalDirection","isComplexTool","hasVisibleChildren","splitContainer","eventData","urlTarget","isSplitButtonArrow","_toggle","lastHasFocus","firstHasFocus","isFirstTool","prevFocusable","isOverflowAnchor","not","_getPrevFocusable","elementToFocus","prevElement","prevElements","prevAll","containerWidth","_markVisibles","_childrenWidth","childrenWidth","commandElement","visibleCommands","_hideItem","hiddenCommands","_showItem","overflowItems","toolbarItems","visibleOverflowItems","visibleToolbarItems","modular","minYear","maxYear","build","weekNumberBuild","isWeekColumnVisible","cellsPerRow","perRow","weekNumberTemplate","cellTemplate","emptyCellTemplate","disableDates","isInRange","date1","date2","year1","getToday","restrictValue","shiftArray","mousetoggle","HOVER","MOUSEENTER","FOCUS","prevent","getCalendarInfo","extractFormat","MONTH","makeUnselectable","isIE8","addClassToViewContainer","currentView","isEqualDatePart","value1","value2","isEqualMonth","getDisabledExpr","createDisabledExpr","convertDatesArray","disabledDates","searchExpression","isEqualDate","oldValue","transitionOrigin","KEYDOWN_NS","SLIDE","CENTURY","NAVIGATE","DISABLED","FOCUSED","OTHERMONTH","OTHERMONTHCLASS","TODAY","CELLSELECTOR","BLUR","FOCUS_WITH_NS","MOUSEENTER_WITH_NS","MOUSELEAVE","PREVARROW","NEXTARROW","ARIA_DISABLED","ARIA_SELECTED","ARIA_LABEL","decade","century","Calendar","unescape","_templates","_header","_footer","footer","_toDateObject","_focusView","focusOnNav","_cellID","_addClassProxy","_cell","todayString","toDateString","_cellByDate","_removeClassProxy","weekColumnHeader","_today","_title","_table","_bindTable","_option","navigateToPast","navigateToFuture","navigateUp","navigateDown","future","_oldTable","_changeView","_animate","_focus","_class","isDisabled","_nextNavigatable","navigatableDate","insertAfter","_horizontal","viewWidth","float","margin-left","_vertical","disabledDate","isBigger","isTodayDisabled","_todayClick","firstVisibleDay","calendarInfo","tzOffsetBefore","resultDATE","tzOffsetDiff","navigateUrl","hasUrl","currentCalendar","firstDayIdx","shortNames","linkClass","dateString","month1","month2","year2","setMonth","viewsEnum","parseFormats","DatePicker","DIV","SPAN","READONLY","DEFAULT","SELECTED","STATEDISABLED","HOVEREVENTS","ARIA_EXPANDED","ARIA_HIDDEN","DateView","_dateViewID","_calendar","_setOptions","selectIsClicked","handled","_initialOptions","_wrapper","dateView","_oldText","_updateARIA","_icon","aria-expanded","aria-owns","dateInput","_dateInput","DateInput","_old","_update","ARIATemplate","_editable","_dateIcon","_inputWrapper","_toggleHover","_blur","_form","_resetHandler","dateChanged","valueUpdated","textFormatted","_typing","stopImmediatePropagation","aria-controls","isSameType","formId","_ariaTemplate","buttonHtml","CLASS_ICON","truncate","placeholderSupported","INPUT","SPIN","TOUCHEND","STATE_INVALID","INTEGER_REGEXP","NumericTextBox","isStep","_focusout","_arrows","_validation","_input","_text","_toggleText","restrictDecimals","spinners","upArrowText","downArrowText","_upArrowEventHandler","_downArrowEventHandler","_spin","_upArrow","_downArrow","_keypress","_keyup","_paste","adjusted","_adjust","_focusin","arrows","_spinning","_validationIcon","_focusing","groupRegExp","extractRegExp","_format","caretPosition","_culture","_removeInvalidState","CLASSNAME","accessKey","_initialTitle","aria-valuemin","aria-valuemax","_key","_step","isNumPadDecimal","isValid","_numericRegex","_addInvalidState","fractionRule","_separator","_floatRegExp","rounder","isNotNull","_placeholder","DOMElement","resolveRules","resolvers","validator","ruleResolvers","numberOfDecimalDigits","parseHtml","parseHTML","searchForMessageContainer","invalidMsgRegExp","Validator","INVALIDMSG","INVALIDINPUT","VALIDINPUT","emailRegExp","urlRegExp","INPUTSELECTOR","CHECKBOXSELECTOR","NUMBERINPUTSELECTOR","NAME","FORM","NOVALIDATE","VALIDATE","VALIDATE_INPUT","patternMatcher","matcher","hasAttribute","validateAttributeSelector","_errorTemplate","errorTemplate","_inputSelector","_checkboxSelector","_errors","_isValidated","required","email","dateCompare","checkbox","raise","validateOnBlur","_checkElement","validateInput","inputs","invalid","valid","messageText","wasValid","messageLabel","lblId","_checkValidity","_findMessageContainer","_extractMessage","_decorateMessageContainer","hideMessages","locators","messageLocators","locate","ruleKey","customMessage","fieldType","convertToValueBinding","bindAttr","createAttributes","ruleName","validation","DATATYPE","BINDING","specialRules","convertItems","addValidationRules","modelField","oldIE","nameSpecialCharRegExp","ERRORTEMPLATE","editors","kendoNumericTextBox","kendoDatePicker","Editable","$angular","_validateProxy","_validate","clearContainer","editor","isValuesEditor","isCustomEditor","preventChangeTrigger","_validationEventInProgress","bindAttribute","bindingRegex","validatable","modelFields","constrain","executableScript","WindowResizing","wnd","_preventDragging","_draggable","KWINDOWRESIZEHANDLES","dragstart","dragend","addOverlay","removeOverlay","getPosition","parentOverflowX","parentOverflowY","offsetLeft","WindowDragging","dragHandle","dragcancel","KWINDOW","KWINDOWTITLE","KWINDOWTITLEBAR","KWINDOWCONTENT","KOVERLAY","LOADING","KHOVERSTATE","KFOCUSEDSTATE","MAXIMIZEDSTATE","CURSOR","REFRESH","MINIMIZE","MAXIMIZE","RESIZESTART","RESIZEEND","ZINDEX","MINIMIZE_MAXIMIZE","KPIN","KUNPIN","PIN_UNPIN","TITLEBAR_BUTTONS","REFRESHICON","zero","Window","windowContent","isVisible","suppressActions","actions","_createWindow","_dimensions","_overlay","_buttonEnter","_buttonLeave","_windowActionHandler","pinned","pin","aria-labelledby","_onDocumentResize","_marker","_tabKeyTrap","maxHeight","_animationOptions","basicAnimation","resizing","toggleMaximization","templates","resizeHandle","_actions","titlebar","windowSpecificCommands","fade","autoFocus","isMaximized","isMinimized","_closable","newWidth","newHeight","_close","_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","_modals","zStack","_object","newTop","newLeft","documentWindow","titleBarHeight","titleBar","scrollContainer","otherModalsVisible","overlayFx","showOptions","contentElement","Fade","fadeIn","_documentScrollTop","_documentScrollLeft","_removeOverlay","suppressAnimation","modals","hideOverlay","hideOptions","systemTriggered","userTriggered","lastModal","_actionable","_shouldFocus","windowTop","currentWindow","originalZIndex","windowObject","zIndexNew","restoreOptions","_sizingAction","actionId","before","maximize","minimize","win","unpin","contentFrame","_triggerRefresh","_ajaxComplete","_loadingIconTimeout","_ajaxError","_ajaxSuccess","_showLoading","iframeSrcAttributes","contentHtml","wrapperPosition","relativeElMarginLeft","relativeElMarginTop","elementPadding","resizeDirection","initialSize","containerOffset","_relativeElMarginLeft","_relativeElMarginTop","windowBottom","windowRight","newWindowTop","initialWindowPosition","initialPointerPosition","startPosition","minLeftPosition","minTopPosition","_finishDrag","unifyType","mapChangedItems","itemsToMatch","itemsLength","selectedLength","unchanged","isValidFilterExpr","removeFiltersForField","STATIC_LIST_NS","StaticList","HIDDENCLASS","GROUPHEADER","LABELIDPART","CASCADE","isIE","quotRegExp","alternativeNames","ComboBox","DropDownList","List","_isSelect","ul","aria-hidden","_listMousedown","_noData","_accessors","_initValue","footerTemplate","headerTemplate","noDataTemplate","_renderFooter","_renderNoData","_focused","_listOptions","listBoundHandler","_listBound","_listChange","_activateItem","deactivate","_deactivateItem","groupTemplate","fixedGroupTemplate","_initList","listOptions","selectedItemChange","VirtualList","_setListValue","_updateSelectionState","filterInput","_isFilterEnabled","_hideClear","_showClear","_clearValue","_clearText","_accessor","enforceMinLength","_clearFilter","_filterSource","newExpression","dataSourceState","resetPageSettings","removed","_cascading","setDSFilter","_angularElement","noData","_toggleNoData","_toggleHeader","groupHeader","header","_allowOpening","_ignoreCase","widgetOptions","_open","_inputValue","_typingTimeout","minLength","_searchByWord","_unbindDataSource","selectedDataItems","_aria","suggest","_ariaLabel","labelId","focusedElm","inputElm","inputId","labelElm","ariaLabel","ariaLabelledBy","_generateLabelId","_oldIndex","typing","_enable","_dataValue","_offsetHeight","_height","popups","footerHeight","_adjustListWidth","autoWidth","_openHandler","_closeHandler","_focusItem","noFocusedItem","highlightFirst","scrollToIndex","_calculateGroupPadding","_calculatePopupHeight","_resizePopup","_popup","_makeUnselectable","preventFocus","touchEnabled","MSPointers","_prevent","_triggerCascade","_cascadeTriggered","_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","optionLabel","dataText","dataValue","htmlElement","_cascade","cascade","_cascadeHandlerProxy","_cascadeHandler","_cascadeFilterRequests","_selectedValue","_toggleCascadeOnFocus","valueBeforeCascade","_clearSelection","_cascadeChange","filterValue","cascadeFromField","currentHandler","_optionID","_selectedIndices","_dataItems","_values","_getter","_onScroll","_scrollId","_renderHeader","_fixedHeader","itemOffsetTop","itemOffsetHeight","contentScrollTop","contentOffsetHeight","bottomDistance","_getValues","_valueGetter","hasCandidate","_get","focusIndex","skipUpdate","_skipUpdate","filtered","singleSelection","selectedIndices","added","isFiltered","_deselectFiltered","_deselect","_valueComparer","_valueDeferred","_valueIndices","_valueExpr","normalized","_valueType","_dataItemPosition","valueExpr","removedIndices","_normalizeIndices","newIndices","_firstVisibleItem","itemHeight","lastChild","previousSibling","isGrouped","visibleItem","_renderItem","notFirstItem","newGroup","dataContext","_selected","_lastDSFilter","skipUpdateOnBind","isItemChange","_bound","assign","normalizeIndex","sameCharsOnly","STATE_FILTER","STATE_ACCEPT","MSG_INVALID_OPTION_LABEL","_focusHandler","_focusInputHandler","_focusInput","_optionLabel","_inputTemplate","_prev","_word","_span","_mobile","_filterHeader","_textAccessor","valueTemplate","optionLabelTemplate","hasOptionLabel","_arrow","_resizeFilterInput","isInputActive","originalPrevent","_optionLabelDataItem","loweredText","_valueSetter","_optionLabelText","_assignInstance","_buildOptions","optionLabelValue","initialIndex","_presetValue","_selectValue","_filterPaste","_search","_focusinHandler","_focusoutHandler","isIFrame","self","_wrapperMousedown","_wrapperClick","dropDownWrapper","isPopupVisible","_getElementDataItem","_matchText","_shuffleData","splitIndex","optionDataItem","_selectNext","oldFocusedItem","isInLoop","_last","charCode","_popupOpen","compareElement","jQueryCandidate","_resetOptionLabel","focusedItem","mapValueTo","additionalClass","keepState","aria-haspopup","SELECTOR","DOMelement","accesskey","unselectable","getElements","optionLabelText","origEvent","isAutoConnector","closestConnector","resCtr","minimumDistance","MAXINT","indicesOfItems","filterShapeDataItem","filterConnectionDataItem","fromConnector","fromX","fromY","toConnector","toX","toY","connectionSelector","kendoDropDownList","InactiveItem","InactiveItemsCollection","cloneDataItem","splitDiagramElements","createModel","clearField","copyDefaultOptions","mainOptions","translateToOrigin","defaultButtons","DiagramElement","Connector","Diagram","DiagramToolBar","Editor","PopupEditor","SASS_THEMES","CASCADING","DEFAULT_CANVAS_WIDTH","DEFAULT_CANVAS_HEIGHT","DEFAULT_SHAPE_TYPE","DEFAULT_SHAPE_WIDTH","DEFAULT_SHAPE_HEIGHT","DEFAULT_SHAPE_MINWIDTH","DEFAULT_SHAPE_MINHEIGHT","DEFAULT_SHAPE_POSITION","DEFAULT_CONNECTION_BACKGROUND","TRANSFORMED","MOUSEWHEEL_NS","MOBILE_ZOOM_RATE","MOBILE_PAN_DISTANCE","BUTTON_TEMPLATE","CONNECTION_CONTENT_OFFSET","DefaultConnectors","imageClass","extra","serializable","_content","contentVisual","_contentVisual","_updateContentVisual","_createContentVisual","elementTemplate","_canSelect","shapeId","updateOptionsFromModel","createShapeVisual","updateBounds","_createConnectors","_setOptionsFromModel","modelOptions","redrawVisual","_isEditable","_redrawVisual","syncChanges","_suspendModelRefresh","_resumeModelRefresh","_rotate","_alignContent","containerRect","aligner","contentBounds","contentRect","alignedBounds","_transformedBounds","_rotatedBounds","_setBounds","_triggerBoundsChange","_layouting","refreshConnections","deselected","_internalSelection","_selectionChanged","sc","deltaAngle","newPosition","cons","nameOrPoint","toLocaleLowerCase","_transformPoint","shapeOptions","boundsChange","shapeVisual","_visualOptions","_updateConnectors","_showConnectors","visualTemplate","_initRouter","_sourcePoint","_targetPoint","_setSource","_setTarget","definers","dataMap","_dataMap","connectionsDataSource","shapeSource","defaultConnector","_removeFromSourceConnector","_clearSourceConnector","_setFromOptions","fromPoint","sourceDefiner","_sourceDefiner","shapeTarget","_removeFromTargetConnector","_clearTargetConnector","_setToOptions","targetDefiner","_targetDefiner","connectorName","setNewTarget","inactiveItem","_inactiveShapeItems","_deferredConnectionUpdates","onActivate","alignToPath","midIdx","_router","pts","_resolveConnectors","_refreshPath","sourceConnectors","targetConnectors","_resolveAutoConnectors","minNonConflictSource","minNonConflictTarget","minSource","minTarget","sourceIdx","targetIdx","minNonConflict","_testRoutePoints","exclude","router","passRoute","_getRouteExclude","_shapesQuadTree","hitTestRect","_isPointInsideShape","boundsX","boundsY","_initElements","_extendLayoutOptions","_initDefaults","_interactionDefaults","_initCanvas","adornerLayer","_createHandlers","_clipboard","pauseMouseHandlers","_fetchFreshData","_createGlobalToolBar","_createOptionElements","toolBar","_toolBarClick","createShape","_createShape","edit","createConnection","_connectionsDataMap","addConnection","editModel","editorType","connectionSelectorHandler","cancelEdit","shapeEditors","shapeTemplate","connectionEditors","connectionTemplate","_editArgs","_getEditDataSource","_destroyEditor","saveEdit","userShapeDefaults","canvasContainer","viewPort","_userEvents","_dragStart","_gestureStart","_gestureChange","_gestureEnd","_mouseMove","_mouseDown","_mouseUp","_syncHandler","_pauseMouseHandlers","_eventPositions","_meta","_createToolBar","ctrlPressed","focused","documentToModel","initialCenter","_gesture","_initialCenter","zoomedPoint","documentToView","updateZoom","_getValidZoom","_panTransform","_updateAdorners","shapesLength","_createShapes","_createConnections","_findConnectionTarget","destroyScroller","_destroyGlobalToolBar","_removeItem","_removeShapeDataItem","_removeConnectionDataItem","_getDiagramItems","_fixOrdering","bringIntoView","newPan","_zoomMainLayer","alignShapes","viewportVector","_getPan","_copyOffset","copied","mapping","_updateCopiedConnection","sourceConnection","di","_containerOffset","viewToDocument","viewToModel","_transformWithMatrix","_matrixInvert","_layerMatrix","layerToModel","_layerMatrixInvert","viewPoint","modelToDocument","setConnectionsDataSource","_connectionDataSource","_redrawConnections","getShapeByModelId","getShapeByModelUid","getConnectionByModelId","getConnectionByModelUid","_transformMainLayer","_finishPan","_storeViewMatrix","_storeLayerMatrix","canvasTransform","shapePos","conPos","removedConnections","_removeShape","_removeConnection","_removeDataItems","recursive","_removeShapeConnections","_addDataItem","_addDataItemByUid","_addDataItems","parentShape","_refreshSource","_bindingRoots","_addItem","preventClosing","popupWidth","popupHeight","connectionBounds","singleToolBar","_normalizePointZoom","undone","redone","_loadingShapes","_loadingConnections","ds","_shapesRefreshHandler","_shapesRequestStartHandler","_shapesErrorHandler","_refreshShapes","_shapesRequestStart","_error","_treeDataSource","_connectionsRefreshHandler","_connectionsRequestStartHandler","_connectionsErrorHandler","_refreshConnections","_connectionsRequestStart","_connectionsError","_shouldRefresh","_removeShapes","_updateShapes","_syncShapes","_rebindShapesAndConnections","_addShapes","_addConnections","_removeConnections","_updateConnections","_addConnectionDataItem","_validateConnector","adorners","_refresh","scrollOffset","viewRect","clipWrap","deferredConnectionUpdates","_tools","createToolBar","createTools","appendTools","getKendoPopup","_toolBar","kendoToolBar","getKendoToolBar","createTool","toolName","_setAttributes","editTool","deleteTool","rotateAnticlockwiseTool","_appendGroup","_rotateGroup","rotateClockwiseTool","createShapeTool","_createGroup","createConnectionTool","undoTool","_historyGroup","redoTool","_getAttributes","selectedElements","delete","selectedElemens","rotateClockwise","rotateAnticlockwise","_getFields","createEditable","columns","formContent","_renderTemplate","_renderFields","_renderButtons","_cancelClick","_attachButtonEvents","_createButton","_cancelClickHandler","_updateClickHandler","_updateClick","_editUpdateClickHandler","deffered","_testRect","overlapsBounds","childIdx","boundsChangeHandler","_boundsChange","rootSize","xIdx","yIdx","colorsByLength","rgbColor","minRGBtoDecimal","rgbToDecimal","maxRGBtoDecimal","isDarker","colorBrightness","colorByIndex","buildColorFromRGB","minColor","maxColor","currentStep","decimalToRgb","colorToRGB","rgbToHex","colorLength","DATA_BOUND","ITEM_CREATED","MOUSEOVER_NS","TreeMap","_setLayout","colorField","_layout","SliceAndDice","SliceAndDiceView","Squarified","SquarifiedView","_onDataChange","htmlSize","_getByUid","_wrapItem","compute","_setColors","_cleanItems","createRoot","_colorIdx","colorRange","leafNodes","colorIdx","_contentSize","renderHeight","findByUid","_removeActiveState","_resizeItems","setItemSize","leaf","layoutChildren","minimumSideValue","parentArea","totalArea","itemsArea","layoutHorizontal","squarify","initElement","computeDim","newCoords","layoutLast","layoutRow","worstAspectRatio","layoutV","layoutH","layoutVertical","layoutChange","areaSum","rootCoord","newRootCoord","ans","_totalArea","_clean","_createTitle","_compile","_createWrap","rootWrap","_createLeaf","_createTile","_tileColorBrightness","_itemCoordinates","titleTemplate","sliceAndDice","withoutTimeout","$timeout","createWidget","origAttr","controllers","createIt","originalElement","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","$apply","addOption","scopeValue","widgetEvents","optionsPath","kOptions","optionsValue","dataName","eventKey","optionName","ignoredOwnProperties","ignoredAttributes","kDataSource","createDataSource","PanelBar","Menu","$log","warn","kendoWidget","$parse","formValue","isForm","formRegExp","haveChangeOnElement","viewRender","onChange","currentVal","$viewValue","$modelValue","$render","formPristine","$pristine","$setViewValue","$setPristine","digest","AutoComplete","$isEmpty","updating","valueIsCollection","currentValueLength","watchHandler","changeHandler","$angular_setLogicValue","$watchCollection","$setDirty","$angular_getLogicValue","deregister","$on","mo","disconnect","prevClassList","MutationObserver","changes","chg","currClassList","attributeName","rebindAttr","templateOptions","isUpload","_cleanUp","WIDGET_TEMPLATE_OPTIONS","templateContents","replaceChild","setTemplate","createDirectives","klass","make","directiveName","widgetName","module","directive","directiveFactory","shortcut","dashed","SKIP_SHORTCUTS","TAGNAMES","scopeField","kScopeField","MANUAL_DIRECTIVES","kendoWidgetInstance","isDigesting","destroyScope","$destroy","defadvice","origMethod","pendingPatches","$injector","$defaultCompile","TreeList","TreeView","Scheduler","PivotGrid","PivotConfigurator","ContextMenu","toDataSource","mew","factory","kendoRenderedTimeout","RENDERED","require","controller","$scope","$attrs","$element","roleattr","DateTimePicker","TimePicker","ColorPicker","MaskedTextBox","Upload","MobileButton","MobileBackButton","MobileDetailButton","ListView","MobileListView","ActionSheet","$angular_scope","$angular_init","itemScope","$$kendoScope","vars","$new","$angular_makeEventHandler","kendoEvent","elems","colIdx","locals","angularDataItem","templateSettings","encoded","terminal","pre","viewOptions","post","_scroller","kAttr","MobileScrollView","Pager","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,YAAa,cAAeD,IACrC,WAupCE,MA/oCC,UAAUE,EAAGE,GA4KV,QAASiiC,GAAaj7B,GAClB,MAAOyU,UAASzU,EAAO,IAE3B,QAASk7B,GAAS/gC,EAASmD,GACvB,MAAO29B,GAAa9gC,EAAQE,IAAIiD,IAEpC,QAASymB,GAAK7iB,GAAd,GAEai6B,GADLC,IACJ,KAASD,IAAgBj6B,GACrBk6B,EAAIlxB,KAAKixB,EAEb,OAAOC,GAEX,QAASC,GAAkB77B,GACvB,IAAK,GAAI2B,KAAO3B,GACR87B,EAAeh7B,QAAQa,QAAco6B,EAAYj7B,QAAQa,cAClD3B,GAAW2B,EAG1B,OAAO3B,GAEX,QAASg8B,GAAarhC,EAASqF,GAC3B,GAAyCi8B,GAAUt6B,EAAKnB,EAAO07B,EAA3DC,KAAqBC,IACzB,KAAKz6B,IAAO3B,GACRi8B,EAAWt6B,EAAIjC,cACfw8B,EAAgBriB,GAAciiB,EAAeh7B,QAAQm7B,QAChDlhC,EAAQkgB,SAAWihB,GAAiBH,EAAYj7B,QAAQm7B,aAClDj8B,GAAW2B,IAElBnB,EAAQR,EAAW2B,GACfu6B,EACAC,EAAezxB,KAAK/I,EAAM,IAAMnB,EAAQ,KAExC47B,EAAUz6B,GAAOnB,EAO7B,OAHI27B,GAAe3hC,SACf4hC,EAAUC,IAAaF,EAAeriC,KAAK,MAExCsiC,EAuDX,QAASE,GAAkB3hC,EAASmD,GAApC,GAEYy+B,GAIArhC,EAAyEshC,CALjF,OAAI3iB,IACI0iB,EAAY5hC,EAAQE,IAAIwhC,IACxBE,GAAaE,EACM,SAAZ3+B,EAAsB,EAAI,GAEjC5C,EAAQqhC,EAAUrhC,MAAUyD,OAAOb,EAAW,0BAA2B0+B,EAAW,EACpFthC,EACAshC,EAAWf,EAAavgC,EAAM,KAE9BA,EAAQqhC,EAAUrhC,MAAMwhC,KACpB,EACA,EACA,EACA,EACA,GAEJ5+B,EAAWA,EAAS4B,cAChBi9B,EAAiB7/B,KAAKgB,GACtB0+B,EAAWz3B,WAAW7J,EAAM,GAAKA,EAAM,IACpB,cAAZ4C,EACP0+B,EAAWz3B,WAAW7J,EAAM,GAAKA,EAAM,IACpB,SAAZ4C,EACP0+B,EAAWz3B,WAAW7J,EAAM,IACT,UAAZ4C,IACP0+B,EAAWz3B,WAAWvD,KAAKo7B,MAAM1hC,EAAM,GAAIA,EAAM,OAGlDshC,IAEAz3B,WAAWpK,EAAQE,IAAIiD,IAkVtC,QAAS++B,GAAWC,GAChB,MAAOA,GAAK7iC,OAAO,GAAG6F,cAAgBg9B,EAAK3iC,UAAU,GAEzD,QAAS4iC,GAAajrB,EAAMkrB,GACxB,GAAIC,GAAcC,EAAO55B,OAAO05B,GAAax1B,EAAay1B,EAAYtzB,UAAUnC,UAChF3E,GAAGg6B,EAAW/qB,IAASmrB,EACvBp6B,EAAGC,QAAQ6G,UAAUmI,GAAQ,SAAUqrB,EAAWC,EAAMC,EAAMC,GAC1D,MAAO,IAAIL,GAAYr6B,KAAKjI,QAASwiC,EAAWC,EAAMC,EAAMC,IAEhEh9B,EAAKkH,EAAY,SAAUjH,EAAKg9B,GAC5B16B,EAAGC,QAAQ6G,UAAUmI,EAAO+qB,EAAWU,IAAiB,SAAUH,EAAMC,EAAMC,GAC1E,MAAO,IAAIL,GAAYr6B,KAAKjI,QAAS4iC,EAAcH,EAAMC,EAAMC,MAsD3E,QAASE,GAAmB1rB,EAAMhU,EAAU2/B,EAAcC,GACtDX,EAAajrB,GACTtK,WAAYm2B,EACZC,WAAY,SAAUp9B,GAElB,MADAoC,MAAKi7B,YAAcr9B,EACZoC,MAEXk7B,SAAU,SAAUt9B,GAEhB,MADAoC,MAAKm7B,UAAYv9B,EACVoC,MAEXo7B,WAAY,WACR,MAAOp7B,MAAKq7B,aAEhBC,QAAS,SAAUrsB,EAAOtX,GACtB,GAAiBqjC,GAAYE,EAAzBt0B,EAAO5G,KAA4Bmf,EAA0B,QAApBnf,KAAKu7B,WAAsBC,EAAiB50B,EAAK7O,QAAQyD,KAAKN,GAAWugC,IAAwBhmB,MAAM+lB,IAAmBA,GAAkBX,EAErLG,GADAS,EACaD,EACsB,IAArBx7B,KAAKi7B,YACNj7B,KAAKi7B,YAEL9b,EAAM0b,EAAeC,EAGlCI,EAD0B,IAAnBl7B,KAAKm7B,UACDn7B,KAAKm7B,UAELhc,EAAM2b,EAAaD,EAE9B76B,KAAK07B,UACLzsB,EAAM/T,GAAYggC,EAClBvjC,EAAIuD,GAAY8/B,IAEhB/rB,EAAM/T,GAAY8/B,EAClBrjC,EAAIuD,GAAYggC,GAEpBt0B,EAAKy0B,YAAc1jC,EAAIuD,KAAc4/B,KAgHjD,QAASa,GAAWhU,EAAW4S,GAC3B,GAAIqB,GAAW1jC,EAAM0M,WAAW21B,GAAWqB,SAAU79B,EAAO4pB,EAAUiU,EAAWC,EAASC,KAAW,EAAI,IACzG,OAAOC,GAAMxB,GAAWpjC,QAAQ,QAAS4G,GAj1BhD,GAyHWi+B,GAmLJC,EAuNA3B,EAuIA4B,EAKGnB,EAyIHoB,EA+BAJ,EAMAK,EA+IAC,EACAC,EA2FAC,EA0CAC,EAjlCAtkC,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,YAAaqkC,GACjNC,MAAO,EACPC,OAAQ,EACRC,OAAQ,EACRC,QAAS,GACVC,GACCC,UAAW,EACXC,WAAY,EACZC,WAAY,EACZC,YAAa,GACdC,EAAyD,IAAxC5/B,SAASmC,gBAAgB5F,MAAMY,OAAyBuc,EAAY6iB,EAAiB,iGAAkGsD,EAAkB,oDAAqDrD,EAAmB,gBAAiBsD,EAAmB,0BAA2BC,EAAqB,qBAAsBC,EAAa,SAAUrE,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,UACDqE,GACCC,OAAU,MACVf,MAAO,GACPgB,KAAM,KACNX,UAAW,MACZY,EAAY1mB,EAAWhf,IAAKwX,EAAQ7Q,KAAK6Q,MAAOmuB,EAAQ,GAAIC,EAAK,KAAMhE,EAAO,OAAQiE,EAAO,OAAQhC,EAAQ,QAASD,EAAS,SAAUkC,EAAS,SAAUC,GAAS,SAAUC,GAAW,UAAWC,GAAW,WAAYC,GAAY,YAAaC,GAAW,WAAYC,GAAoB,mBAAoBC,GAAaX,EAAY,aAAclE,GAAYkE,EAAY,YAAaY,GAAWZ,EAAY,sBAAuBa,GAAcb,EAAY,cAAec,GAAsB,SAAUC,GAAwB,eAAiBD,GAAsB,IAAK75B,IAC1jBjM,MACI2H,QAAS,QACTpF,SAAU,OACVyjC,WAAY,aACZ/C,UAAU,EACVgD,aAEJhmC,OACI0H,QAAS,OACTpF,SAAU,OACVyjC,WAAY,aACZ/C,UAAU,EACVgD,SAAU,GAEd5f,MACI1e,QAAS,KACTpF,SAAU,MACVyjC,WAAY,aACZ/C,UAAU,EACVgD,SAAU,GAEd3f,IACI3e,QAAS,OACTpF,SAAU,MACVyjC,WAAY,aACZ/C,UAAU,EACVgD,aAEJt/B,KAAOgB,QAAS,UAChBzH,QAAUyH,QAAS,OACnB4e,MACI5e,QAAS,MACTs+B,aAEJzf,KACI7e,QAAS,KACTs+B,SAAU,GAEdhD,UAAYt7B,QAAS,YACrBu+B,YAAcv+B,QAAS,cAE/BpI,GAAM0M,WAAaA,GACnBlE,EAAOhK,EAAEuN,IACL0b,UAAW,SAAUC,EAAYC,GAC7B,MAAIznB,GACO6H,EAAG6+B,UAAU9+B,KAAM4f,IAAc,EAAOC,IAAW,GAEnD7f,KAAK8f,KAAKF,EAAYC,MAIrC5I,IAAe7e,IACfsF,EAAKy7B,EAAa,SAAUx7B,EAAKC,GAC7BlH,EAAEuN,GAAGrG,GAAS,SAAUmhC,GACpB,GAAkB,IAAPA,EACP,MAAOrF,GAAkB15B,KAAMpC,EAE/B,IAAIgJ,GAAOlQ,EAAEsJ,MAAM,GAAIg/B,EAAiBphC,EAAQ,IAAMmhC,EAAMvB,EAAgB5/B,EAAMzG,QAAQomC,EAAY,KAAO,GAOjH,OANQ32B,GAAK9M,MAAM6d,QAAQzZ,QAAQu7B,QAC3B/iC,EAAEsJ,MAAM/H,IAAIwhC,GAAWuF,GAEvBp4B,EAAK9M,MAAM6d,QAAU/Q,EAAK9M,MAAM6d,QAAQxgB,QAAY4E,OAAO6B,EAAQ,YAAa,KAAMohC,GAGvFh/B,MAEXtJ,EAAEuJ,GAAGg/B,KAAKrhC,GAAS,SAAUqC,GACzBvJ,EAAEuJ,EAAGi/B,MAAMthC,GAAOqC,EAAGk/B,QAGzBnD,EAAWtlC,EAAEuJ,GAAG8G,UAAUq4B,IAC9B1oC,EAAEuJ,GAAG8G,UAAUq4B,IAAM,WACjB,MAAIjG,GAAYj7B,QAAQ8B,KAAKq/B,UAClBl9B,WAAWzL,EAAEsJ,KAAKk/B,MAAMl/B,KAAKq/B,SAEjCrD,EAASl1B,MAAM9G,KAAMjF,aAGpC7C,EAAMkJ,YAAc,SAAUrJ,EAASsJ,EAASjB,EAASkB,GAkBrD,MAjBID,KACAA,EAAUA,EAAQpK,MAAM,KACpBmB,IACAgI,EAAUM,GACN4+B,UAAW,MACXj/B,SAAU,IACVk/B,KAAM,YACPn/B,GACHrI,EAAQE,IAAIqmC,GAAYl+B,EAAQk/B,UAAY,IAAMl/B,EAAQC,SAAW,MAAQD,EAAQm/B,MACrF7V,WAAW,WACP3xB,EAAQE,IAAIqmC,GAAY,IAAIrmC,IAAI4jC,IACjCz7B,EAAQC,WAEf3C,EAAK2D,EAAS,SAAU1D,EAAKC,GACzB7F,EAAQqJ,YAAYxD,EAAO0D,MAG5BvJ,GAEXG,EAAM2H,aAAe,SAAUC,EAAO0/B,GAClC,GAAIz/B,KAoBJ,OAnBqB,gBAAVD,GACPpC,EAAKoC,EAAM7I,MAAM,KAAM,SAAU0G,EAAKC,GAClC,GAAI6hC,IAAoBnC,EAAmBpjC,KAAK0D,GAAQ8hC,EAAW9hC,EAAMzG,QAAQkmC,EAAkB,SAAU/kC,EAAOqnC,EAAIC,GAChH,MAAOD,GAAK,IAAMC,EAAG9iC,gBACrB+iC,EAASH,EAASzoC,MAAM,KAAMsjC,EAAYsF,EAAO,GAAIC,IACzDD,GAAOjoC,OAAS,IAChBkoC,EAAWvF,UAAYiF,GAAUC,EAAmB76B,GAAW21B,GAAWj6B,QAAUi6B,GAExFx6B,EAAQ8/B,EAAO,IAAMC,IAGzBpiC,EAAKoC,EAAO,SAAUnC,GAClB,GAAI48B,GAAYv6B,KAAKu6B,SACjBA,IAAaiF,IAAWlC,EAAmBpjC,KAAKyD,KAChDqC,KAAKu6B,UAAY31B,GAAW21B,GAAWj6B,SAE3CP,EAAQpC,GAAOqC,OAGhBD,GA4CP3H,GACAsI,EAAOT,GACH0+B,WAAY,SAAU5mC,EAASqF,EAAYgD,GAA/B,GACJnI,GAAsD8nC,EAOtDC,EACAC,EARKrM,EAAQ,EAAGsM,EAAUnoC,EAAQyD,KAAK,WAC3C4E,GAAUM,GACNL,SAAU,IACVk/B,KAAM,WACNh/B,SAAU,KACV++B,UAAW,OACZl/B,GACC4/B,GAAuB,EACvBC,EAAiB,WACZD,IACDA,GAAuB,EACnBD,IACAnV,aAAamV,GACbA,EAAY,MAEhBhoC,EAAQguB,WAAWkY,IAAU3e,UAAUrnB,IAAIqmC,GAAY,IAAIrmC,IAAIqmC,IAC/Dl+B,EAAQG,SAAS4H,KAAKpQ,KAG9BqI,EAAQC,SAAW3J,EAAEuJ,GAAKvJ,EAAEuJ,GAAGkgC,OAAO//B,EAAQC,WAAaD,EAAQC,SAAWD,EAAQC,SACtFpI,EAAMmhC,EAAarhC,EAASqF,GAC5B1G,EAAE0pC,MAAMF,EAASve,EAAK1pB,IACtBF,EAAQyD,KAAK,OAAQ9E,EAAE2pC,OAAOH,IAAUhnC,SACxCnB,EAAQE,IAAIqmC,GAAYl+B,EAAQk/B,UAAY,IAAMl/B,EAAQC,SAAW,MAAQD,EAAQm/B,MAAMtnC,IAAIqmC,IAC/FvmC,EAAQE,IAAIA,GAAKA,IAAIwhC,IACjBrhC,EAAYugB,QACZ5gB,EAAQwP,IAAInP,EAAYugB,MAAOsnB,GACN,IAArB7/B,EAAQC,WACRuzB,EAAQ,MAGhBmM,EAAYrW,WAAWuW,EAAgB7/B,EAAQC,SAAWuzB,GAC1D77B,EAAQyD,KAAKyiC,GAAU8B,GACvBhoC,EAAQyD,KAAK6iC,GAAmB4B,IAEpCnB,UAAW,SAAU/mC,EAAS6nB,EAAYC,GACtC,GAAI2Z,GAAW8G,EAAWvoC,EAAQyD,KAAK,QAAS+kC,GAAkB1gB,GAAWygB,EAAUv/B,EAAmBhJ,EAAQyD,KAAK6iC,GAUvH,OATIkC,KACA/G,EAAYthC,EAAMiF,kBAAkBpF,EAAQ,GAAIuoC,IAEhDv/B,GACAA,IAEAw/B,GACAxoC,EAAQE,IAAIuhC,GAETzhC,EAAQguB,WAAW,QAAQjG,KAAKF,MAqC/Cqc,EAAY/jC,EAAMrB,MAAM6J,QACxBC,KAAM,SAAU5I,EAASqI,GACrB,GAAIwG,GAAO5G,IACX4G,GAAK7O,QAAUA,EACf6O,EAAK7G,WACL6G,EAAKxG,QAAUA,EACfwG,EAAK45B,YAETC,IAAK,SAAU1gC,GAAV,GACgB8/B,GAAQliC,EAAK+iC,EAA6HtgB,EAAQzlB,EAAUgmC,EAepKC,EAfLh6B,EAAO5G,KAAwBpI,EAASmI,EAAQnI,OAAQG,EAAU6O,EAAK7O,QAASqI,EAAUwG,EAAKxG,QAASygC,EAAWnqC,EAAEoqC,WAAY7xB,KAAYtX,IAIjJ,KAHAiP,EAAK7G,QAAUA,EACf8gC,EAASE,KAAKrqC,EAAEsP,MAAMY,EAAM,aAC5B7O,EAAQyD,KAAK,aAAa,GACrBmC,EAAM,EAAGA,EAAM/F,EAAQ+F,IAOxB,IANAkiC,EAAS9/B,EAAQpC,GACjBkiC,EAAOmB,WAAW5gC,EAAQE,SAC1Bu/B,EAAOxa,WAAWjlB,GAClBwG,EAAKq6B,qBAAqBpB,EAAOW,SACjCX,EAAOvE,QAAQrsB,EAAOtX,GACtBgD,EAAWklC,EAAOllC,WACb+lC,EAAM,EAAGC,EAAiBhmC,EAAS/C,OAAQ8oC,EAAMC,EAAgBD,IAClE/lC,EAAS+lC,GAAKrgC,SAASD,EAAQC,UAAUogC,KAGjD,KAASG,IAAcxgC,GAAQL,QAC3BW,EAAO/I,EAAKyI,EAAQL,QAAQ6gC,GAAYxjC,WAgB5C,KAdKrF,EAAQgC,GAAG,aACZ2G,EAAOuO,GAASoQ,QAAStnB,EAAQyD,KAAK,eAAiB,UAEvDyb,IAAe7W,EAAQ8gC,QACvB9gB,EAASroB,EAAQyD,KAAK,mBAClB4kB,IACAnR,EAAQvO,EAAO0f,EAAQnR,KAG/BA,EAAQmqB,EAAarhC,EAASkX,GAC1BgI,IAAe7e,IACf6W,EAAQgqB,EAAkBhqB,IAE9BlX,EAAQE,IAAIgX,GAAOhX,IAAIwhC,IAClB97B,EAAM,EAAGA,EAAM/F,EAAQ+F,IACxBoC,EAAQpC,GAAKwjC,OAOjB,OALI/gC,GAAQO,MACRP,EAAQO,OAEZ5I,EAAQyD,KAAK,kBAAmB7D,GAChCsI,EAAGe,QAAQjJ,EAASJ,EAAK+I,KAAWN,GAAWG,SAAUsgC,EAASO,WAC3DP,EAAS1/B,WAEpB2e,KAAM,WACFppB,EAAEsJ,KAAKjI,SAAS4nB,WAAU,GAAM,IAEpCshB,qBAAsB,SAAUT,GAE5B,IADA,GAA4B5iC,GAAxB7F,EAAUiI,KAAKjI,QAAgB+C,EAAI,EAAGlD,EAAS4oC,EAAQ5oC,OACpDkD,EAAIlD,EAAQkD,IACf8C,EAAQ4iC,EAAQ1lC,GAChBkF,KAAKwgC,QAAQ14B,KAAKlK,GACb7F,EAAQyD,KAAKoC,IACd7F,EAAQyD,KAAKoC,EAAO7F,EAAQE,IAAI2F,KAI5CyjC,gBAAiB,WAAA,GAEJvmC,GAAOlD,EACRgG,EAFJ7F,EAAUiI,KAAKjI,OACnB,KAAS+C,EAAI,EAAGlD,EAASoI,KAAKwgC,QAAQ5oC,OAAQkD,EAAIlD,EAAQkD,IAClD8C,EAAQoC,KAAKwgC,QAAQ1lC,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,KAAKqhC,kBACDlE,IAAYlmB,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,GACSi6B,GAA+GwF,EAExHe,EAFL7gC,KAA2BuhC,EAAY,GAAIrF,GAAUlkC,EAASqI,GAAUmhC,EAAgBrpC,EAAM2H,aAAaO,EAAQL,QACvHK,GAAQL,QAAUwhC,CAClB,KAASX,IAAcW,GACnBlH,EAAcp6B,EAAGg6B,EAAW2G,IACxBvG,IACAwF,EAAS,GAAIxF,GAAYtiC,EAASwpC,EAAcX,GAAYrG,WAC5Dx6B,EAAQ+H,KAAK+3B,GAGjB9/B,GAAQ,GACRuhC,EAAUb,IAAI1gC,IAEThI,EAAQgC,GAAG,aACZhC,EAAQE,KAAMonB,QAAStnB,EAAQyD,KAAK,eAAiB,UAAWvD,IAAI,WAEpEmI,EAAQO,MACRP,EAAQO,OAEZ5I,EAAQunB,UACRgiB,EAAU/gC,aAGlBG,EAAOT,GACHe,QAAS,SAAUulB,EAAUnpB,EAAYgD,GACrC,GAAIohC,GAAgBphC,EAAQu+B,cAAe,QACpCv+B,GAAQu+B,WACXvmC,GAAe,cAAgB6H,IAAMuhC,EACrCvhC,EAAG0+B,WAAWpY,EAAUnpB,EAAYgD,GAEhC6W,EACAsP,EAASvlB,QAAQi4B,EAAkB77B,IAC/B8D,OAAO,EACPlH,MAAM,EACN8G,MAAM,EACNT,SAAUD,EAAQC,SAClBE,SAAUH,EAAQG,WAGtBgmB,EAAS7oB,KAAK,WACV,GAAI3F,GAAUrB,EAAEsJ,MAAOyhC,IACvB/jC,GAAKw7B,EAAgB,SAAUv7B,EAAKC,GAAf,GACbi1B,GAEI6O,EAQQC,EAAkCC,EAgBlCC,EAGIC,EAAoDC,EA7B5DC,EAAe5kC,EAAaA,EAAWQ,GAAS,IAAM,IAC9DokC,KACIN,EAAStkC,EACTQ,IAAS6+B,IAAmBr/B,EAAWQ,KAAWhH,GAClDi8B,EAASmP,EAAa1pC,MAAM8kC,GACxBnmB,GACAvW,EAAOghC,GAAUhF,OAAQ7J,EAAO,MAGhCj1B,IAASk/B,IAAuB1/B,EAAWQ,KAAWhH,IAClD+qC,EAAW5pC,EAAQE,IAAImmC,IAAWwD,EAAsB,YAAZD,GAAsC,SAAZA,EACrE5pC,EAAQyD,KAAK2iC,MACVyD,EACA7pC,EAAQyD,KAAK2iC,IACT7+B,IAAKw5B,EAAS/gC,EAAS,QAAU,EACjCY,KAAMmgC,EAAS/gC,EAAS,SAAW,EACnCc,OAAQigC,EAAS/gC,EAAS,UAC1Ba,MAAOkgC,EAAS/gC,EAAS,WAG7BA,EAAQyD,KAAK2iC,IACT7+B,IAAKw5B,EAAS/gC,EAAS,cAAgB,EACvCY,KAAMmgC,EAAS/gC,EAAS,eAAiB,KAIjD8pC,EAAmB9pC,EAAQyD,KAAK2iC,IACpCtL,EAASmP,EAAa1pC,MAAM8kC,GACxBvK,IACIiP,EAAKlkC,GAASugC,GAAY,IAAM,GAAStL,EAAO,GAAIkP,EAAKnkC,GAASugC,GAAY,KAAOtL,EAAO,IAAMA,EAAO,GACzG+O,GACKnsB,MAAMosB,EAAiBjpC,OAKnB6c,MAAMqsB,IACPphC,EAAOghC,GAAU/oC,KAAMkpC,EAAiBlpC,KAAOmpC,IAL9CrsB,MAAMqsB,IACPphC,EAAOghC,GAAU9oC,MAAOipC,EAAiBjpC,MAAQkpC,IAOpDrsB,MAAMosB,EAAiBhpC,QAKnB4c,MAAMssB,IACPrhC,EAAOghC,GAAUpiC,IAAKuiC,EAAiBviC,IAAMyiC,IAL5CtsB,MAAMssB,IACPrhC,EAAOghC,GAAU7oC,OAAQgpC,EAAiBhpC,OAASkpC,MAQtDtsB,MAAMqsB,IACPphC,EAAOghC,GAAUO,WAAYJ,EAAiBlpC,KAAOmpC,IAEpDrsB,MAAMssB,IACPrhC,EAAOghC,GAAUQ,UAAWL,EAAiBviC,IAAMyiC,QAMlE9qB,GAAuB,SAATrZ,GAAoBA,IAAS8jC,UACrCA,GAAO9jC,GAEd8jC,GACAhhC,EAAO+gC,EAAUC,MAIzBnoC,EAAQgB,YACDknC,GAAS/E,MAEpB3kC,EAAQiJ,QAAQygC,GACZvgC,OAAO,EACPlH,MAAM,EACN8G,MAAM,EACNT,SAAUD,EAAQC,SAClBE,SAAUH,EAAQG,gBAO1CN,EAAGyf,gBAAkBzf,EAAGkB,QACpBm5B,EAASpiC,EAAMrB,MAAM6J,QACrBC,KAAM,SAAU5I,EAASwiC,GACrB,GAAI3zB,GAAO5G,IACX4G,GAAK7O,QAAUA,EACf6O,EAAK20B,WAAahB,EAClB3zB,EAAKxG,WACLwG,EAAKu7B,sBACAv7B,EAAK45B,UACN55B,EAAK45B,aAGblgC,QAAS,WAEL,MADAN,MAAK07B,UAAW,EACT17B,KAAKygC,OAEhB2B,KAAM,WAEF,MADApiC,MAAK07B,UAAW,EACT17B,KAAKygC,OAEhBn/B,IAAK,SAAU+gC,GAEX,MADAriC,MAAKmiC,mBAAmBr6B,KAAKu6B,GACtBriC,MAEXu6B,UAAW,SAAU38B,GAEjB,MADAoC,MAAKu7B,WAAa39B,EACXoC,MAEXK,SAAU,SAAUA,GAEhB,MADAL,MAAKsiC,UAAYjiC,EACVL,MAEXuiC,aAAc,WACV,GAAI37B,GAAO5G,KAAMshC,EAAY,GAAIrF,GAAUr1B,EAAK7O,SACxCuI,QAASsG,EAAK80B,SACdr7B,SAAUuG,EAAK07B,YACfviC,EAAU6G,EAAKu7B,mBAAmBjsB,QAAQtP,GAClD,OAAO06B,GAAUb,IAAI1gC,IAEzB0gC,IAAK,WACD,GAAIzgC,KAAKmiC,oBAAsBniC,KAAKmiC,mBAAmB,GACnD,MAAOniC,MAAKuiC,cAEhB,IAAmG3kC,GAAsDwiB,EAArJxZ,EAAO5G,KAAMjI,EAAU6O,EAAK7O,QAAS4F,EAAM,EAAG6iC,EAAU55B,EAAK45B,QAAS5oC,EAAS4oC,EAAQ5oC,OAAeipC,EAAWnqC,EAAEoqC,WAAY7xB,KAAYtX,KAAkBgD,EAAWiM,EAAKjM,WAAYgmC,EAAiBhmC,EAAS/C,MAGvN,KAFAipC,EAASE,KAAKrqC,EAAEsP,MAAMY,EAAM,cAC5B7O,EAAQyD,KAAK,aAAa,GACrBmC,EAAM,EAAGA,EAAM/F,EAAQ+F,IACxBC,EAAQ4iC,EAAQ7iC,GACX5F,EAAQyD,KAAKoC,IACd7F,EAAQyD,KAAKoC,EAAO7F,EAAQE,IAAI2F,GAGxC,KAAKD,EAAM,EAAGA,EAAMgjC,EAAgBhjC,IAChChD,EAASgD,GAAK0C,SAASuG,EAAK07B,WAAW7B,KAuB3C,OArBA75B,GAAK00B,QAAQrsB,EAAOtX,GACfI,EAAQgC,GAAG,aACZ2G,EAAOuO,GAASoQ,QAAStnB,EAAQyD,KAAK,eAAiB,UAEvDyb,IACAmJ,EAASroB,EAAQyD,KAAK,mBAClB4kB,IACAnR,EAAQvO,EAAO0f,EAAQnR,KAG/BA,EAAQmqB,EAAarhC,EAASkX,GAC1BgI,IAAe7e,IACf6W,EAAQgqB,EAAkBhqB,IAE9BlX,EAAQE,IAAIgX,GAAOhX,IAAIwhC,IACvB7yB,EAAKu6B,QACLppC,EAAQyD,KAAK,kBAAmB7D,GAChCsI,EAAGe,QAAQjJ,EAASJ,GAChB0I,SAAUuG,EAAK07B,UACf/hC,SAAUsgC,EAASO,UAEhBP,EAAS1/B,WAEpB2e,KAAM,WACF,GAAIniB,GAAM,EAAGhD,EAAWqF,KAAKrF,WAAYgmC,EAAiBhmC,EAAS/C,MACnE,KAAK+F,EAAM,EAAGA,EAAMgjC,EAAgBhjC,IAChChD,EAASgD,GAAKmiB,MAGlB,OADAppB,GAAEsJ,KAAKjI,SAAS4nB,WAAU,GAAM,GACzB3f,MAEXqhC,gBAAiB,WAAA,GAEJvmC,GAAOlD,EACRgG,EAFJ7F,EAAUiI,KAAKjI,OACnB,KAAS+C,EAAI,EAAGlD,EAASoI,KAAKwgC,QAAQ5oC,OAAQkD,EAAIlD,EAAQkD,IAClD8C,EAAQoC,KAAKwgC,QAAQ1lC,GACzB/C,EAAQE,IAAI2F,EAAO7F,EAAQyD,KAAKoC,KAGxC4kC,UAAW,WACP,GAAI57B,GAAO5G,KAAMjI,EAAU6O,EAAK7O,OAChCA,GAAQguB,WAAW,aAAazG,UAChC1Y,EAAKy6B,kBACDz6B,EAAKw0B,cACLrjC,EAAQyD,KAAK,aAAczD,EAAQE,IAAI,YAAY6I,OAEnDq8B,IAAYlmB,GACZyS,WAAWhzB,EAAEsP,MAAMY,EAAM,mBAAoB,GAEjDA,EAAK/F,YAETwkB,WAAY,SAAUjlB,GAClBM,GAAO,EAAMV,KAAKI,QAASA,IAE/BzF,SAAU,WACN,UAEJygC,WAAY1kC,EAAEkK,KACdugC,MAAOzqC,EAAEkK,KACT06B,QAAS5kC,EAAEkK,KACXC,SAAUnK,EAAEkK,KACZgE,cACAo8B,WAAY,SAAU1gC,GAElB,MADAN,MAAK07B,SAAWp7B,EACTN,QAkBXk8B,GACI,OACA,QACA,KACA,QACDnB,GACC,KACA,OAERZ,EAAa,WACTv1B,WAAYs3B,EACZuG,QAAS,SAAU7kC,GAEf,MADAoC,MAAKI,QAAQqiC,QAAU7kC,EAChBoC,MAEXs7B,QAAS,SAAUrsB,EAAOtX,GACtB,GAAiB+qC,GAAb97B,EAAO5G,KAAWjI,EAAU6O,EAAK7O,QAASyB,EAAatB,EAAMuB,YAAaC,EAAcxB,EAAMyB,aAAc4gC,EAAY31B,GAAWgC,EAAK20B,YAAan8B,GAAUm7B,EAAUqE,UAAYrE,EAAUqB,SAAWliC,EAAY3B,GAAWyB,EAAWzB,IAAWijC,EAAa57B,GAAUwH,EAAKxG,SAAWwG,EAAKxG,QAAQqiC,SAAW,GAAK5E,EAAI3C,EAAW,KAC1Ut0B,GAAK80B,WACLgH,EAAMzzB,EACNA,EAAQtX,EACRA,EAAM+qC,GAENzrB,GACAhI,EAAMsrB,EAAUoE,YAAc3D,EAC9BrjC,EAAI4iC,EAAUoE,YAAczD,IAE5BjsB,EAAMsrB,EAAUr/B,UAAY8/B,EAC5BrjC,EAAI4iC,EAAUr/B,UAAYggC,MAItCf,EAAa,QACTv1B,WAAYs3B,EACZv7B,KAAM,SAAU5I,EAASwiC,EAAWoI,GAChCrI,EAAOvzB,UAAUpG,KAAKwH,KAAKnI,KAAMjI,EAASwiC,GAC1Cv6B,KAAKI,SAAYuiC,SAAUA,IAE/BC,gBAAiB,SAAUhlC,GAEvB,MADAoC,MAAKI,QAAQwiC,gBAAkBhlC,EACxBoC,MAEXrF,SAAU,WAAA,GACFiM,GAAO5G,KAAMM,EAAUsG,EAAK80B,SAAUiH,EAAW/7B,EAAKxG,QAAQuiC,SAAUF,EAAU77B,EAAKxG,QAAQwiC,iBAAmB,EAAG3T,EAAMroB,EAAK20B,WAChI5gC,GAAYzC,EAAM+H,GAAG2G,EAAK7O,SAAS8qC,QAAQ5T,GAAK+R,WAAW1gC,GAI/D,OAHIqiC,IACAhoC,EAASmN,KAAK5P,EAAM+H,GAAG0iC,GAAUE,QAAQj+B,GAAWqqB,GAAK3uB,SAASmiC,QAAQA,GAASzB,YAAY1gC,IAE5F3F,KA0CfigC,EAAmB,OAAQ,UAAW,EAAG,GACzCA,EAAmB,OAAQ,QAAS,EAAG,KACvCT,EAAa,eACTmB,QAAS,SAAUrsB,EAAOtX,GACtB,GAAyHmrC,GAArHl8B,EAAO5G,KAAMjI,EAAU6O,EAAK7O,QAASqI,EAAUwG,EAAKxG,QAAS2iC,EAAShrC,EAAQyD,KAAKwiC,IAAS5+B,EAASgB,EAAQhB,OAAgBkB,EAAUsG,EAAK80B,QAC3Ip7B,IAAsB,OAAXyiC,GACZhrC,EAAQyD,KAAKwiC,GAAQ77B,WAAWpK,EAAQE,IAAI,UAAYmI,EAAQqzB,QAEpEqP,EAAS/qC,EAAQyD,KAAKwiC,KAAW,EACjCrmC,EAAI,UAAYyI,EAAQqzB,MAASnzB,EAA4BwiC,EAAlBA,EAAS1jC,KAG5D+6B,EAAa,WACTmB,QAAS,SAAUrsB,EAAOtX,GACtB,GAAIiP,GAAO5G,KAAMjI,EAAU6O,EAAK7O,QAASqI,EAAUwG,EAAKxG,QAAShB,EAASgB,EAAQhB,OAAOnI,MAAM,KAAMqJ,EAAUsG,EAAK80B,QAChHzkB,IACAtf,EAAIqlC,WAAc18B,EAAsB,EAAZlB,EAAO,GACnCzH,EAAIslC,WAAc38B,EAAsB,EAAZlB,EAAO,KAEnCzH,EAAIgB,KAAQ2H,EAAsB,EAAZlB,EAAO,GAC7BzH,EAAI2H,IAAOgB,EAAsB,EAAZlB,EAAO,IAEhCrH,EAAQE,IAAI,WAGpBkiC,EAAa,UACTv1B,YACI,aACA,YAEJ47B,SAAUtC,IACV5C,QAAS,SAAUrsB,EAAOtX,GACtB,GAAIiP,GAAO5G,KAAMjI,EAAU6O,EAAK7O,QAASqI,EAAUwG,EAAKxG,QAASE,EAAUsG,EAAK80B,SAAUxgC,EAA+B,aAApB0L,EAAK20B,WAA4BM,EAASC,EAAOkH,EAAYjrC,EAAQ,GAAG+B,MAAMoB,GAAW+nC,EAAYlrC,EAAQyD,KAAKN,GAAWtD,EAASuK,WAAW8gC,GAAaD,GAAYE,EAAazzB,EAAM1X,EAAQE,IAAIiD,EAAU4iC,GAAM5iC,KAC9T+T,GAAM9Q,SAAW4/B,EACjBnmC,EAASwI,GAAWA,EAAQ8gC,MAAQgC,GAActrC,EAASA,GAAUsrC,EACrEvrC,EAAIuD,IAAaoF,EAAU,EAAI1I,GAAUimC,EACzC5uB,EAAM/T,IAAaoF,EAAU1I,EAAS,GAAKimC,EACvCoF,IAAcrsC,GACdmB,EAAQyD,KAAKN,EAAU8nC,IAG/B5H,WAAY,WACR,MAAOp7B,MAAK07B,UAEhB76B,SAAU,WACN,GAAI+F,GAAO5G,KAAMjI,EAAU6O,EAAK7O,QAASmD,EAA+B,aAApB0L,EAAK20B,WAA4BM,EAASC,EAAOlkC,EAASG,EAAQyD,KAAKN,EACvHtD,IAAUkmC,GAAQlmC,IAAWgmC,GAC7BlU,WAAW,WACP3xB,EAAQE,IAAIiD,EAAU4iC,GAAM7lC,IAAIiD,IACjC,MAIXihC,GACAwF,SAAU,WACVM,WAAY,EACZC,UAAW,EACXxF,MAAO,GAEXvC,EAAa,YACTx5B,KAAM,SAAU5I,EAASqoB,GACrBpgB,KAAKjI,QAAUA,EACfiI,KAAKI,SAAYggB,OAAQA,GACzBpgB,KAAKwgC,YAETW,MAAO,WACHnhC,KAAKjI,QAAQ++B,SAASv5B,SAASsa,OAEnCyjB,QAAS,SAAUrsB,EAAOtX,GACtB,GAAIiP,GAAO5G,KAAMjI,EAAU6O,EAAK7O,QAASorC,EAAWljC,EAAGmjC,IAAIrrC,GAAUsrC,EAAWpjC,EAAGmjC,IAAIx8B,EAAKxG,QAAQggB,QAASkjB,EAAe5J,EAAkB3hC,EAAS,SAAU2kC,EAAQz8B,EAAGsjC,UAAUF,EAAUF,GAAWK,EAAkBvjC,EAAGujC,gBAAgBH,EAAUF,EAC1PziC,GAAOuO,EAAOktB,GACdxkC,EAAI+kC,MAAQ,EACZ3kC,EAAQE,IAAIwhC,GAAW,YAAYxhC,IAAIwhC,IACvC1hC,EAAQE,IAAIwhC,GAAW,SAAW6J,EAAe,KACjDr0B,EAAM3P,IAAM6jC,EAAS7jC,IACrB2P,EAAMtW,KAAOwqC,EAASxqC,KACtBsW,EAAMu0B,gBAAkBA,EAAgBvQ,EAAI4K,EAAK,IAAM2F,EAAgBnyB,EAAIwsB,EACvEj3B,EAAK80B,SACLzsB,EAAMytB,MAAQA,EAEd/kC,EAAI+kC,MAAQA,KAIpBX,GACAz8B,IAAK,6BACLzG,OAAQ,6BACRF,KAAM,6BACNC,MAAO,8BAEPwjC,GACA98B,KACI2P,MAAO,gBACPtX,IAAK,mBAETkB,QACIoW,MAAO,mBACPtX,IAAK,iBAETgB,MACIsW,MAAO,gBACPtX,IAAK,oBAETiB,OACIqW,MAAO,kBACPtX,IAAK,kBAObwiC,EAAa,eACTv1B,WAAYs3B,EACZv7B,KAAM,SAAU5I,EAASwiC,EAAW5S,GAChC2S,EAAOvzB,UAAUpG,KAAKwH,KAAKnI,KAAMjI,EAASwiC,GAC1Cv6B,KAAKyjC,WAAa9b,GAEtB2T,QAAS,SAAUrsB,EAAOtX,GACtB,GAAIiP,GAAO5G,KAAMM,EAAUsG,EAAK80B,SAAUnB,EAAYj6B,EAAUsE,GAAWgC,EAAK20B,YAAYj7B,QAAUsG,EAAK20B,WAAYmI,EAAWtH,EAAU7B,EAC5ItrB,GAAM00B,OAAS,EACX/8B,EAAKg9B,cACL30B,EAAM40B,KAAOlI,EAAW/0B,EAAK68B,WAAYvrC,EAAM0M,WAAW21B,GAAWj6B,UAEzE2O,EAAMsvB,IAAYR,EAClBpmC,EAAI8hC,IAAaiF,IAAyBp+B,EAAUojC,EAASz0B,MAAQy0B,EAAS/rC,KAC9EsX,EAAMwqB,IAAaiF,IAAyBp+B,EAAUojC,EAAS/rC,IAAM+rC,EAASz0B,QAElFkyB,MAAO,WACHnhC,KAAKyjC,WAAWK,OAAO9jC,KAAKjI,UAEhCgsC,KAAM,SAAUnmC,GAEZ,MADAoC,MAAKgkC,MAAQpmC,EACNoC,MAEXo7B,WAAY,WACR,GAAIx0B,GAAO5G,KAAMM,EAAUsG,EAAK80B,SAAUqI,EAAOn9B,EAAKo9B,KACtD,OAAO1jC,KAAYyjC,IAASzjC,GAAWyjC,GAE3CpI,WAAY,SAAU/9B,GAElB,MADAoC,MAAK4jC,YAAchmC,EACZoC,MAEXikC,UAAW,WAEP,MADAjkC,MAAKjI,QAAQuC,SAAS,aACf0F,QAGfm6B,EAAa;AACTv1B,WAAYs3B,EACZv7B,KAAM,SAAU5I,EAASwiC,EAAW5S,GAChC2S,EAAOvzB,UAAUpG,KAAKwH,KAAKnI,KAAMjI,EAASwiC,GAC1Cv6B,KAAKyjC,WAAa9b,GAEtB6Y,SAAU,QACVlF,QAAS,SAAUrsB,EAAOtX,GACtB,GAAIiP,GAAO5G,KAAMu6B,EAAY3zB,EAAK80B,SAAW92B,GAAWgC,EAAK20B,YAAYj7B,QAAUsG,EAAK20B,UACxFtsB,GAAM40B,KAAOlI,EAAW/0B,EAAK68B,WAAYlJ,GACzCtrB,EAAMi1B,QAAU,KAChBvsC,EAAIusC,QAAU,GAElB9I,WAAY,WACR,GAAIx0B,GAAO5G,KAAMM,EAAUsG,EAAK80B,SAAUqI,EAAOn9B,EAAKo9B,KACtD,OAAO1jC,KAAYyjC,IAASzjC,GAAWyjC,GAE3CA,KAAM,SAAUnmC,GAEZ,MADAoC,MAAKgkC,MAAQpmC,EACNoC,QAGfm6B,EAAa,YACTv1B,YACI,aACA,YAEJjE,KAAM,SAAU5I,EAASwiC,EAAWwJ,EAAMI,GACtC7J,EAAOvzB,UAAUpG,KAAKwH,KAAKnI,KAAMjI,EAASwiC,GAC1Cv6B,KAAKI,WACLJ,KAAKI,QAAQ2jC,KAAOA,EACpB/jC,KAAKI,QAAQ+jC,KAAOA,GAExBxpC,SAAU,WACN,GAAyLypC,GAArLx9B,EAAO5G,KAAMI,EAAUwG,EAAKxG,QAASm6B,EAAgC,eAApB3zB,EAAK20B,WAA8B,OAAS,MAAO8I,EAAmBnsC,EAAM0M,WAAW21B,GAAWj6B,QAASA,EAAUsG,EAAK80B,SAAgB4I,EAAYlkC,EAAQ2jC,KAAK5nC,OAAM,GAAMipB,WAAW,MAAOmf,EAAYnkC,EAAQ+jC,KAAKhoC,OAAM,GAAMipB,WAAW,MAAOrtB,EAAU6O,EAAK7O,OAM5T,OALIuI,KACA8jC,EAAO7J,EACPA,EAAY8J,EACZA,EAAmBD,IAGnBlsC,EAAM+H,GAAGG,EAAQ2jC,MAAMS,WAAWjK,EAAWxiC,GAASgsC,MAAK,GAAM/C,WAAW1gC,GAC5EpI,EAAM+H,GAAGG,EAAQ+jC,MAAMK,WAAWH,EAAkBtsC,GAASipC,WAAW1gC,GACxEpI,EAAM+H,GAAGqkC,GAAWG,YAAYlK,EAAWxiC,GAASgsC,MAAK,GAAMpI,YAAW,GAAMsI,YAAYjD,WAAW1gC,GACvGpI,EAAM+H,GAAGskC,GAAWE,YAAYJ,EAAkBtsC,GAAS4jC,YAAW,GAAMsI,YAAYjD,WAAW1gC,KAG3Gg7B,QAAS,SAAUrsB,EAAOtX,GACtBsX,EAAMuvB,IAAeC,GACrBxvB,EAAMy1B,eAAiB,cACvBz1B,EAAMi1B,QAAU,KAChBvsC,EAAIusC,QAAU,GAElBrjC,SAAU,WACNb,KAAKjI,QAAQuvB,KAAK,cAAcY,YAGxCiS,EAAa,QACTv1B,YACI,aACA,YAEJjE,KAAM,SAAU5I,EAASwiC,EAAWwJ,EAAMI,GACtC7J,EAAOvzB,UAAUpG,KAAKwH,KAAKnI,KAAMjI,EAASwiC,GAC1Cv6B,KAAKI,WACLJ,KAAKI,QAAQ2jC,KAAOA,EACpB/jC,KAAKI,QAAQ+jC,KAAOA,GAExBxpC,SAAU,WACN,GAAyLypC,GAArLx9B,EAAO5G,KAAMI,EAAUwG,EAAKxG,QAASm6B,EAAgC,eAApB3zB,EAAK20B,WAA8B,OAAS,MAAO8I,EAAmBnsC,EAAM0M,WAAW21B,GAAWj6B,QAASA,EAAUsG,EAAK80B,SAAgB3jC,EAAU6O,EAAK7O,OAM9M,OALIuI,KACA8jC,EAAO7J,EACPA,EAAY8J,EACZA,EAAmBD,IAGnBlsC,EAAM+H,GAAGG,EAAQ2jC,MAAMU,YAAYlK,EAAWxiC,GAASgsC,MAAK,GAAM/C,WAAW1gC,GAC7EpI,EAAM+H,GAAGG,EAAQ+jC,MAAMM,YAAYJ,EAAkBtsC,GAASipC,WAAW1gC,KAGjFg7B,QAAS,SAAUrsB,GACfA,EAAMuvB,IAAeC,GACrBxvB,EAAMy1B,eAAiB,iBAG3BrI,GAAoBlkC,EAAQgf,SAASyC,QACrC0iB,EAAmC,+CACvCnC,EAAa,WACTwK,QAASjuC,EAAEkK,KACXgkC,OAAQluC,EAAEkK,KACVD,KAAM,SAAU5I,EAAS4qC,EAAUkC,GAC/BvK,EAAOvzB,UAAUpG,KAAKwH,KAAKnI,KAAMjI,GACjCiI,KAAK8kC,UAAYpuC,EAAEisC,GACnB3iC,KAAK+kC,iBAAmBF,GAE5BxkC,SAAU,WACN,KAAUyI,OAAM,kIAEpBk8B,iBAAkB,SAAUrkB,GAExB,MADA3gB,MAAK2kC,QAAUhkB,EACR3gB,MAEXilC,gBAAiB,SAAUtkB,GAEvB,MADA3gB,MAAK4kC,OAASjkB,EACP3gB,MAEXklC,MAAO,WACH,MAAOxuC,KAAI4K,IAAItB,KAAKmlC,UAAU7jC,IAAItB,KAAK8kC,YAE3CM,gBAAiB,WACb,GAAI7K,GAAYv6B,KAAKu7B,WAAY8J,EAAiB,wBAA0BrlC,KAAK+kC,gBAOjF,OANIxK,KACA8K,GAAkB,SAAW9K,GAE7Bv6B,KAAK07B,WACL2J,GAAkB,iBAEfA,GAEX9kC,SAAU,SAAU0H,GAChB,MAAKjI,KAAK6gC,UAAY54B,GAAKvR,EAAEuR,EAAEmY,QAAQrmB,GAAGuiC,IAA1C,CAGA,GAAI3U,GAAY3nB,KAAK2nB,SACrBA,GAAU2d,YAAY,YAAYA,YAAYtlC,KAAKolC,mBAAmBxb,IAAIxxB,EAAYugB,MAAO3Y,KAAKulC,eAClGvlC,KAAK8kC,UAAUhkC,OAAOwkC,YAAY,gBAClCtlC,KAAKjI,QAAQutC,YAAY,aACrBjJ,GACA1U,EAAU1vB,IAAIimC,GAAU,IAEvBl+B,KAAKwlC,YACNxlC,KAAKklC,QAAQjtC,IAAImmC,GAAU,IAE/Bp+B,KAAK6gC,SAASO,gBACPphC,MAAK6gC,WAEhBJ,IAAK,WACD,GAAIzgC,KAAKmiC,oBAAsBniC,KAAKmiC,mBAAmB,GACnD,MAAOniC,MAAKuiC,cAEhB,IAA8NkD,GAA1N7+B,EAAO5G,KAAMjI,EAAU6O,EAAK7O,QAAS4qC,EAAW/7B,EAAKk+B,UAAWnd,EAAY5vB,EAAQ4L,UAAUE,OAAO8+B,EAASh/B,WAAWvM,QAASsuC,EAAO9+B,EAAKs+B,QAASrE,EAAWnqC,EAAEoqC,WAAYe,EAAmB9pC,EAAQE,IAAImmC,GA+BnN,OA9BKzW,GAAU/vB,SACX+vB,EAAY5vB,EAAQ6B,UAExBoG,KAAK2nB,UAAYA,EACjB3nB,KAAK6gC,SAAWA,EAChB7gC,KAAKwlC,WAAiC,YAApB3D,EACb7hC,KAAKwlC,YACNE,EAAKztC,IAAImmC,GAAU,YAEnB/B,IACAoJ,EAAmB9d,EAAU1vB,IAAIimC,IACjCvW,EAAU1vB,IAAIimC,GAAU,WAEvB9lC,GAGDL,EAAQuC,SAAS,eACjBqtB,EAAUrtB,SAAS0F,KAAKolC,mBACxBplC,KAAKulC,cAAgB7uC,EAAEsP,MAAMhG,KAAM,YACnC2nB,EAAUjiB,GAAGtN,EAAYugB,MAAO3Y,KAAKulC,eACrCrtC,EAAM0N,eAAe,WACjB7N,EAAQutC,YAAY,eAAehrC,SAAS,aAC5CqoC,EAAS1qC,IAAI,UAAW,IAAIqC,SAAS,gBACrCsM,EAAK+9B,QAAQhC,EAAU5qC,GACvBG,EAAM0N,eAAe,WACjB+hB,EAAU2d,YAAY,cAAchrC,SAAS,YAC7CsM,EAAKg+B,OAAOjC,EAAU5qC,QAZ9BiI,KAAKO,WAgBFsgC,EAAS1/B,WAEpB2e,KAAM,WACF9f,KAAKO,cAGTg8B,EAAYrkC,EAAMrB,MAAM6J,QACxBC,KAAM,WACF,GAAIiG,GAAO5G,IACX4G,GAAK++B,WAAa3/B,EAAMY,EAAKg/B,MAAOh/B,GACpCA,EAAKi/B,UAAW,GAEpBC,KAAMpvC,EAAEkK,KACRmlC,KAAMrvC,EAAEkK,KACRolC,MAAOtvC,EAAEkK,KACTqlC,SAAUvvC,EAAEkK,KACZqO,MAAO,WACEjP,KAAKof,YAGLpf,KAAK+lC,OAIN/lC,KAAKgmC,SAHLhmC,KAAK6lC,UAAW,EAChB3tC,EAAM0N,eAAe5F,KAAK2lC,eAKlCvmB,QAAS,WACL,OAAO,GAEX4L,OAAQ,WACJhrB,KAAK6lC,UAAW,EAChB7lC,KAAKimC,YAETL,MAAO,WACH,GAAIh/B,GAAO5G,IACN4G,GAAKi/B,WAGVj/B,EAAKk/B,OACAl/B,EAAKm/B,QAGNn/B,EAAKi/B,UAAW,EAChBj/B,EAAKo/B,SAHL9tC,EAAM0N,eAAegB,EAAK++B,gBAOlCnJ,EAAaD,EAAU77B,QACvBC,KAAM,SAAUP,GACZ,GAAIwG,GAAO5G,IACXU,GAAOkG,EAAMxG,GACbm8B,EAAUt4B,GAAGtD,KAAKwH,KAAKvB,IAE3Bm/B,KAAM,WACF,MAAO/lC,MAAKkmC,cAAgBlmC,KAAKK,UAErC6lC,WAAY,WACR,MAAOtnC,MAAKoT,IAAIhS,KAAKK,SAAU,GAAIrE,MAASgE,KAAKmmC,YAErDC,OAAQ,SAAUhmC,GACd,GAAIwG,GAAO5G,KAAMqmC,EAAUz/B,EAAKy/B,OAChCz/B,GAAK0/B,QAAUD,EAAQz/B,EAAK6sB,MAC5B7sB,EAAKysB,MAAQjzB,EAAQsb,SAAW9U,EAAK0/B,QACrC1/B,EAAKvG,SAAsC,gBAApBD,GAAQC,SAAuBD,EAAQC,SAAW,IACzEuG,EAAKk/B,KAAOl/B,EAAK2/B,WAAWnmC,EAAQm/B,MACpC34B,EAAKu/B,UAAY,GAAInqC,MACrB4K,EAAKqI,SAETs3B,WAAY,SAAUhH,GAClB,GAAI34B,GAAO5G,IACX,OAAO,YACH4G,EAAKy/B,QAAQG,SAAS5/B,EAAK6sB,KAAM8L,EAAK34B,EAAKs/B,aAAct/B,EAAK0/B,QAAS1/B,EAAKysB,MAAOzsB,EAAKvG,eAIpGK,EAAO87B,GACHiK,YAAa,SAAUv1B,EAAGrO,EAAGuG,EAAGuH,GAC5B,MAAOO,IAAKP,EAAI9N,EAAIuG,EAAIA,IAAMxK,KAAK8nC,IAAI,MAASx1B,EAAIP,GAAK,GAAK9N,GAElE8jC,YAAa,SAAUz1B,EAAGrO,EAAGuG,EAAGuH,EAAGM,GAE/B,MADAA,GAAI,QACG7H,IAAM8H,EAAIA,EAAIP,EAAI,GAAKO,IAAMD,EAAI,GAAKC,EAAID,GAAK,GAAKpO,KAGnE5C,EAAGs8B,UAAYA,EACft8B,EAAGu8B,WAAaA,EAChBv8B,EAAGk6B,aAAeA,EAClBl6B,EAAGmjC,IAAM,SAAUrrC,GACfA,EAAUrB,EAAEqB,EACZ,IAAIiH,GAASjH,EAAQqH,QAGrB,OAFAJ,GAAO/F,MAAQf,EAAMuB,YAAY1B,GACjCiH,EAAO9F,OAAShB,EAAMyB,aAAa5B,GAC5BiH,GAEXiB,EAAGujC,gBAAkB,SAAUoD,EAAOC,GAClC,GAAI5T,IAAK2T,EAAMjuC,KAAOkuC,EAAMluC,MAAQkuC,EAAM5tC,OAAS4tC,EAAM5tC,MAAQ2tC,EAAM3tC,OAAQoY,GAAKu1B,EAAMtnC,IAAMunC,EAAMvnC,KAAOunC,EAAM3tC,QAAU2tC,EAAM3tC,OAAS0tC,EAAM1tC,OAClJ,QACI+5B,EAAGxd,MAAMwd,GAAK,EAAIA,EAClB5hB,EAAGoE,MAAMpE,GAAK,EAAIA,IAG1BpR,EAAGsjC,UAAY,SAAUqD,EAAOC,GAC5B,MAAOjoC,MAAKoT,IAAI40B,EAAM3tC,MAAQ4tC,EAAM5tC,MAAO2tC,EAAM1tC,OAAS2tC,EAAM3tC,SAEpE+G,EAAG6mC,SAAW,SAAUF,EAAOC,GAC3B,MAAOjoC,MAAKlG,IAAIkuC,EAAM3tC,MAAQ4tC,EAAM5tC,MAAO2tC,EAAM1tC,OAAS2tC,EAAM3tC,UAEtEvC,OAAOuB,MAAM2sB,QACRluB,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,QAASmwC,GAAYC,EAAMC,GACvB,IAAKA,EACD,MAAOD,EAEPA,GAAO,MAAQC,IACfD,EAAOC,EAEX,IAAIC,GAAYnrC,OAAO,IAAMkrC,EAAY,IAIzC,OAHKC,GAAMhtC,KAAK8sC,KACZA,EAAOC,EAAa,IAAMD,GAEvBtrB,EAASC,SAAW,MAAQD,EAASyrB,KAAO,IAAMH,GAAM7vC,QAAQ,SAAU,KAErF,QAASiwC,GAAcC,GACnB,MAAOA,GAAO,KAAO,IAEzB,QAASC,GAAaF,GAClB,GAAI7jC,GAAOmY,EAASnY,IACpB,OAAsB,OAAlB6jC,GAA0B7jC,EAAKrF,QAAQ,SAAaqF,EAAKrF,QAAQ,MAAQ,EAClE,KAEJqF,EAAKtM,MAAMmwC,GAAe,IAAM,GAE3C,QAASG,GAAUC,EAAMrkB,GACrB,MAA0B,KAAtBA,EAAIjlB,QAAQspC,GACLrkB,EAAI7O,OAAOkzB,EAAK5vC,QAAQT,QAAQ,QAAS,KAEzCgsB,EAoEf,QAASskB,GAAQtkB,GACb,MAAOA,GAAIhsB,QAAQ,QAAS,KAEhC,QAASuwC,GAAQvkB,GACb,MAAOA,GAAIhsB,QAAQ,YAAa,MArGvC,GACOe,GAAQvB,OAAOuB,MAAOyvC,EAAS,SAAUC,EAAO,OAAQC,EAAO,OAAQ1vC,EAAUD,EAAMC,QAASujB,EAAW/kB,OAAO+kB,SAAUgD,EAAU/nB,OAAO+nB,QAASopB,EAAqB,GAAIC,EAAkB7vC,EAAMC,QAAQoB,QAAQgB,KAAMytC,EAAY,MAAOzqC,EAAW5G,OAAO4G,SA+BlQ0qC,EAAiB/vC,EAAMrB,MAAM6J,QAC7ByjC,KAAM,WACE4D,EACAre,WAAW,WACPhL,EAAQylB,SAGZzlB,EAAQylB,QAGhB+D,QAAS,WACDH,EACAre,WAAW,WACPhL,EAAQwpB,YAGZxpB,EAAQwpB,WAGhBtwC,OAAQ,WACJ,MAAO8mB,GAAQ9mB,QAEnBuwC,gBAAiB,SAAUhlB,GACvBzH,EAASvkB,QAAQgsB,MAGrBilB,EAAmBH,EAAevnC,QAClCC,KAAM,SAAU6mC,GACZxnC,KAAKwnC,KAAOA,GAEhBa,SAAU,SAAUpb,GAChBvO,EAAQD,aAAclhB,EAAS+qC,MAAOvB,EAAY9Z,EAAIjtB,KAAKwnC,QAE/DrwC,QAAS,SAAU81B,GACfvO,EAAQ6pB,gBAAiBhrC,EAAS+qC,MAAOvB,EAAY9Z,EAAIjtB,KAAKwnC,QAElEgB,UAAW,SAAUrlB,GACjB,MAAOokB,GAAUvnC,KAAKwnC,KAAMrkB,IAEhCxX,QAAS,WACL,GAAIA,GAAU+P,EAAS+sB,QAIvB,OAHI/sB,GAASsQ,SACTrgB,GAAW+P,EAASsQ,QAEjBub,EAAUvnC,KAAKwnC,KAAM77B,IAEhC+8B,OAAQ,SAAU/nB,GACdjqB,EAAEC,QAAQyQ,KAAK,iBAAkBuZ,IAErCb,KAAM,WACFppB,EAAEC,QAAQkR,OAAO,mBAErB8gC,iBAAkB,SAAUvoC,GACxB,GAAIwoC,GAAUpB,EAAOpnC,EAAQonC,KAAMiB,EAAW/sB,EAAS+sB,SAAUI,EAAOvB,EAAaF,EAAchnC,EAAQ0oC,UACvGtB,KAASiB,EAAW,MACpBG,EAAWpB,GAEXA,IAASiB,GAAYI,IACrBD,EAAW7B,EAAY8B,EAAK1xC,QAAQ6wC,EAAW,IAAKR,IAEpDoB,GACAlqB,EAAQD,aAAclhB,EAAS+qC,MAAOM,MAU9CG,EAAcd,EAAevnC,QAC7BC,KAAM,SAAU0mC,GACZrnC,KAAKgpC,IAAM9wC,EAAMyrB,OACjB3jB,KAAKyY,OAAS2uB,EAAcC,GAC5BrnC,KAAKorB,IAAMic,EAAOK,EAAUD,GAEhCY,SAAU,SAAUpb,GAChBvR,EAASmtB,KAAO7oC,KAAKorB,IAAI6B,IAE7B91B,QAAS,SAAU81B,GACfjtB,KAAKmoC,gBAAgBnoC,KAAKorB,IAAI6B,KAElCub,UAAW,SAAUrlB,GACjB,MAAIA,GAAIjlB,QAAQ8B,KAAKyY,QAAU,EACpB0K,EAEAA,EAAIlsB,MAAM+I,KAAKyY,QAAQ,IAGtCiwB,OAAQ,SAAU/nB,GACVxoB,EAAQwmB,WACRjoB,EAAEC,QAAQ+O,GAAG,cAAgB1F,KAAKgpC,IAAKroB,GAEvC3gB,KAAKipC,UAAYC,YAAYvoB,EAAUmnB,IAG/ChoB,KAAM,WACFppB,EAAEC,QAAQizB,IAAI,cAAgB5pB,KAAKgpC,KACnCG,cAAcnpC,KAAKipC,YAEvBt9B,QAAS,WACL,MAAO27B,GAAatnC,KAAKyY,SAE7BkwB,iBAAkB,SAAUvoC,GACxB,GAAIqoC,GAAW/sB,EAAS+sB,SAAUjB,EAAOpnC,EAAQonC,IACjD,UAAIpnC,EAAQqe,WAAa+oB,IAASiB,KAC9BzoC,KAAKmoC,gBAAgBX,EAAOxnC,KAAKyY,OAAS8uB,EAAUC,EAAMiB,KACnD,MAKfW,EAAUlxC,EAAMmM,WAAW3D,QAC3BuO,MAAO,SAAU7O,GAOb,GANAA,EAAUA,MACVJ,KAAKoH,MACDugC,EACAC,EACAC,GACDznC,IACCJ,KAAK6lC,SAAT,CAGA7lC,KAAK6lC,UAAW,EAChBzlC,EAAQonC,KAAOpnC,EAAQonC,MAAQ,GAC/B,IAA2C77B,GAAvC09B,EAAUrpC,KAAKspC,cAAclpC,EAC7BipC,GAAQV,iBAAiBvoC,KAG7BuL,EAAU09B,EAAQ19B,UAClBjV,EAAEgK,OAAOV,MACLqpC,QAASA,EACT7B,KAAMpnC,EAAQonC,KACd+B,cAAeF,EAAQzxC,SACvB+T,QAASA,EACT69B,WAAY79B,KAEhB09B,EAAQX,OAAOhyC,EAAEsP,MAAMhG,KAAM,iBAEjCspC,cAAe,SAAUlpC,GACrB,MAAOjI,GAAQsmB,WAAare,EAAQqe,UAAY,GAAI2pB,GAAiBhoC,EAAQonC,MAAQ,GAAIuB,GAAY3oC,EAAQ0oC,WAEjHhpB,KAAM,WACG9f,KAAK6lC,WAGV7lC,KAAKqpC,QAAQvpB,OACb9f,KAAK6H,OAAO8/B,GACZ3nC,KAAK6lC,UAAW,IAEpB6C,OAAQ,SAAU/nB,GACd3gB,KAAKoH,KAAKugC,EAAQhnB,IAEtBxpB,QAAS,SAAU81B,EAAIwc,GACnBzpC,KAAK0pC,UAAUzc,EAAIwc,EAAQ,SAAUJ,GACjCA,EAAQlyC,QAAQ81B,GAChBjtB,KAAKwpC,UAAUxpC,KAAKwpC,UAAU5xC,OAAS,GAAKoI,KAAK2L,WAGzD08B,SAAU,SAAUpb,EAAIwc,GACpB,MAAW,WAAPxc,GACAjtB,KAAK2pC,YAAa,EAClB3pC,KAAKqpC,QAAQlF,OACb,IAEJnkC,KAAK0pC,UAAUzc,EAAIwc,EAAQ,SAAUJ,GACjCA,EAAQhB,SAASpb,GACjBjtB,KAAKwpC,UAAU1hC,KAAK9H,KAAK2L,WAF7B3L,IAKJ0pC,UAAW,SAAUzc,EAAIwc,EAAQ9oB,GAC7B,GAAI0oB,GAAUrpC,KAAKqpC,OAEnB,OADApc,GAAKoc,EAAQb,UAAUvb,GACnBjtB,KAAK2L,UAAYshB,GAAMjtB,KAAK2L,UAAYonB,mBAAmB9F,IAC3DjtB,KAAKgI,QAAQ6/B,GACb,KAEC4B,GACGzpC,KAAKgI,QAAQ2/B,GACTxkB,IAAK8J,EACL2c,QAAQ,MAKpB5pC,KAAK2L,QAAUshB,EACftM,EAASxY,KAAKnI,KAAMqpC,GACpBrpC,KAAKupC,cAAgBF,EAAQzxC,UAV7B,IAYJiyC,UAAW,WACP,GAAIR,GAAUrpC,KAAKqpC,QAAS19B,EAAU09B,EAAQ19B,UAAWm+B,EAAYT,EAAQzxC,SAAUmyC,EAAuB/pC,KAAKupC,gBAAkBO,EAAW3F,EAAOx4B,IAAY3L,KAAKwpC,UAAUxpC,KAAKwpC,UAAU5xC,OAAS,IAAMmyC,EAAsBJ,EAAa3pC,KAAK2pC,WAAYK,EAAOhqC,KAAK2L,OAChR,OAAgB,QAAZA,GAAoB3L,KAAK2L,UAAYA,GAAW3L,KAAK2L,UAAYonB,mBAAmBpnB,KAGxF3L,KAAKupC,cAAgBO,EACrB9pC,KAAK2pC,YAAa,EAClB3pC,KAAK2L,QAAUA,EACXw4B,GAAQnkC,KAAKgI,QAAQ,QACjBmb,IAAK6mB,EACL/c,GAAIthB,KAER09B,EAAQnB,UACRloC,KAAK2L,QAAUq+B,EACf,GAEAhqC,KAAKgI,QAAQ2/B,GACTxkB,IAAKxX,EACLs+B,mBAAoBN,KAEpBxF,EACAkF,EAAQnB,WAERmB,EAAQlF,OACRnkC,KAAKupC,iBAETvpC,KAAK2L,QAAUq+B,EACf,IAEA7F,EACAnkC,KAAKwpC,UAAUzd,MAEf/rB,KAAKwpC,UAAU1hC,KAAK6D,GAHxB,MAORzT,GAAMkxC,QAAUA,EAChBlxC,EAAMkxC,QAAQnB,eAAiBA,EAC/B/vC,EAAMkxC,QAAQL,YAAcA,EAC5B7wC,EAAMkxC,QAAQhB,iBAAmBA,EACjClwC,EAAM6uC,YAAcA,EACpB7uC,EAAMwmB,QAAU,GAAI0qB,IACtBzyC,OAAOuB,MAAM2sB,QACd,WAEG,QAASqlB,GAAkB5xC,EAAO6xC,GAC9B,MAAOA,GAAW7xC,EAAQ,UAE9B,QAAS8xC,GAAcC,EAAOC,GAC1B,MAAWvuC,QAAO,IAAMsuC,EAAMlzC,QAAQozC,EAAc,QAAQpzC,QAAQqzC,EAAe,WAAWrzC,QAAQszC,EAAYP,GAAmB/yC,QAAQuzC,EAAY,SAAW,IAAKJ,EAAa,IAAM,IAEhM,QAASK,GAASxnB,GACd,MAAOA,GAAIhsB,QAAQ,gBAAiB,IAT3C,GACOe,GAAQvB,OAAOuB,MAAOwmB,EAAUxmB,EAAMwmB,QAASra,EAAanM,EAAMmM,WAAYumC,EAAO,OAAQC,EAAgB,eAAgBlD,EAAS,SAAUC,EAAO,OAAQC,EAAO,OAAQ2C,EAAgB,aAAcC,EAAa,eAAgBC,EAAa,SAAUH,EAAe,2BAU/QO,EAAQ5yC,EAAMrB,MAAM6J,QACpBC,KAAM,SAAU0pC,EAAO1pB,EAAU2pB,GACvBD,YAAiBtuC,UACnBsuC,EAAQD,EAAcC,EAAOC,IAEjCtqC,KAAKqqC,MAAQA,EACbrqC,KAAK+qC,UAAYpqB,GAErBA,SAAU,SAAUwC,EAAKghB,EAAMyF,GAC3B,GAAI/W,GAAiBj7B,EAAT+F,EAAM,EAAWqtC,EAAoB9yC,EAAMy6B,uBAAuBxP,EAK9E,IAJA6nB,EAAkBC,MAAQ9G,EAC1BhhB,EAAMwnB,EAASxnB,GACf0P,EAAS7yB,KAAKqqC,MAAMh7B,KAAK8T,GAAK3c,MAAM,GACpC5O,EAASi7B,EAAOj7B,OACZgyC,EACA,KAAOjsC,EAAM/F,EAAQ+F,IACU,SAAhBk1B,EAAOl1B,KACdk1B,EAAOl1B,GAAOo1B,mBAAmBF,EAAOl1B,IAIpDk1B,GAAO/qB,KAAKkjC,GACZhrC,KAAK+qC,UAAUjkC,MAAM,KAAM+rB,IAE/BqY,UAAW,SAAU/nB,EAAKghB,EAAMyF,GAC5B,QAAI5pC,KAAKqqC,MAAMnwC,KAAKywC,EAASxnB,MACzBnjB,KAAK2gB,SAASwC,EAAKghB,EAAMyF,IAClB,MAMfuB,EAAS9mC,EAAW3D,QACpBC,KAAM,SAAUP,GACPA,IACDA,MAEJiE,EAAWJ,GAAGtD,KAAKwH,KAAKnI,MACxBA,KAAKorC,UACLprC,KAAKye,UAAYre,EAAQqe,UACzBze,KAAK8oC,SAAW1oC,EAAQ0oC,SACxB9oC,KAAKwnC,KAAOpnC,EAAQonC,KACpBxnC,KAAKsqC,WAAalqC,EAAQkqC,cAAe,EACzCtqC,KAAKoH,MACDwjC,EACAC,EACAlD,EACAE,GACDznC,IAEP0lB,QAAS,WACLpH,EAAQ7W,OAAO8/B,EAAQ3nC,KAAKqrC,kBAC5B3sB,EAAQ7W,OAAOggC,EAAM7nC,KAAKsrC,YAC1B5sB,EAAQ7W,OAAO+/B,EAAM5nC,KAAKurC,YAC1BvrC,KAAK6H,UAEToH,MAAO,WAAA,GAgBCu8B,GAfA5kC,EAAO5G,KAAMyrC,EAAY,WACrB7kC,EAAK8kC,SACNC,EAAY,SAAU1jC,GACrBrB,EAAKqkC,MAAMhjC,IACZ2jC,EAAkB,SAAU3jC,GAC3BrB,EAAKilC,YAAY5jC,GAEzByW,GAAQzP,OACJ68B,KAAML,EACN/C,OAAQkD,EACRzH,KAAMwH,EACNltB,UAAW7X,EAAK6X,UAChBqqB,SAAUliC,EAAKkiC,SACftB,KAAM5gC,EAAK4gC,OAEXgE,GACAroB,IAAKzE,EAAQ/S,SAAW,IACxBxH,eAAgBzN,EAAEkK,MAEjBgG,EAAKoB,QAAQ4iC,EAAMY,IACpB5kC,EAAKilC,YAAYL,GAErBxrC,KAAKqrC,iBAAmBO,EACxB5rC,KAAKurC,WAAaI,GAEtBtB,MAAO,SAAUA,EAAO1pB,GACpB3gB,KAAKorC,OAAOtjC,KAAK,GAAIgjC,GAAMT,EAAO1pB,EAAU3gB,KAAKsqC,cAErDjC,SAAU,SAAUllB,EAAKsmB,GACrBvxC,EAAMwmB,QAAQ2pB,SAASllB,EAAKsmB,IAEhCtyC,QAAS,SAAUgsB,EAAKsmB,GACpBvxC,EAAMwmB,QAAQvnB,QAAQgsB,EAAKsmB,IAE/BwB,MAAO,SAAUhjC,GACTjI,KAAKgI,QAAQ4/B,GACTzkB,IAAKlb,EAAEkb,IACP8J,GAAIhlB,EAAEglB,MAEVhlB,EAAE9D,kBAGVunC,MAAO,WACH1rC,KAAKgI,QAAQ6/B,IAEjBgE,YAAa,SAAU5jC,GAAV,GAeLtK,GAASytC,EAAsBf,EAAOzyC,EAdtCurB,EAAMlb,EAAEkb,IACRymB,EAA6B,SAAb3hC,EAAE2hC,OAClBzF,EAAOl8B,EAAEgiC,iBAIb,IAHK9mB,IACDA,EAAM,KAENnjB,KAAKgI,QAAQ2/B,GACTxkB,IAAKlb,EAAEkb,IACP0P,OAAQ36B,EAAMy6B,uBAAuB1qB,EAAEkb,KACvC8mB,kBAAmB9F,IAGvB,WADAl8B,GAAE9D,gBAIN,KADIxG,EAAM,EAAGytC,EAASprC,KAAKorC,OAAexzC,EAASwzC,EAAOxzC,OACnD+F,EAAM/F,EAAQ+F,IAEjB,GADA0sC,EAAQe,EAAOztC,GACX0sC,EAAMa,UAAU/nB,EAAKghB,EAAMyF,GAC3B,MAGJ5pC,MAAKgI,QAAQ6iC,GACT1nB,IAAKA,EACL0P,OAAQ36B,EAAMy6B,uBAAuBxP,GACrC8mB,kBAAmB9F,KAEvBl8B,EAAE9D,mBAIdjM,GAAMizC,OAASA,KAEZx0C,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,QAASm1C,GAAcloC,EAAQmoC,GAC3B,GAAgDruC,GAAK/F,EAAQmmB,EAAO7e,EAAM6J,EAAQkjC,EAAUruC,EAAO0sC,EAA/FtrC,KAAaktC,EAAQroC,EAAOqoC,OAAS,MAAsExoC,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,MACfquC,EAAWpoC,EAAOooC,SACdpoC,EAAOH,QACPG,EAASkoC,EAAcloC,EAAQmoC,IAE/B1B,EAAazmC,EAAOymC,WACpBvsB,EAAQA,EAAM5mB,QAAQ,MAAO,KAC7B0M,EAASsoC,EAAaF,GAClBD,IACAnoC,EAASuoC,EAAwBH,IAEpB,WAAbA,GAAsC,cAAbA,EACzBpoC,EAAS3L,EAAM6Q,OAAO,eAAgBgV,EAAOla,GACzB,YAAbooC,GAAuC,eAAbA,EACjCpoC,EAAS3L,EAAM6Q,OAAO,aAAgBgV,EAAOla,GACtCA,GAAUjG,IAAUhH,IAC3BsI,EAAOxI,EAAEwI,KAAKtB,GACD,WAATsB,GACA6J,EAAS,QACTnL,EAAQA,EAAMzG,QAAQ,KAAM,MACxBmzC,KAAe,IACfvsB,EAAQ,WAAaA,EAAQ,MAEjB,SAAT7e,EACH8sC,GACAjjC,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,mBAAbkjC,IACID,GACAjjC,EAAS,uBACTlF,EAAS,WAETkF,GAAU,cAKtBA,EAAS,WAAaA,EAE1BlF,EAAS3L,EAAM6Q,OAAOA,EAAQlF,EAAQjG,EAAOmgB,KAGrD/e,EAAO8I,KAAKjE,EAMhB,OAJAA,GAAS7E,EAAO9H,KAAK,IAAMg1C,EAAQ,KAC/BltC,EAAOpH,OAAS,IAChBiM,EAAS,IAAMA,EAAS,KAErBA,EAEX,QAASwoC,GAAcvtC,GACnB,IAAK,GAAIoQ,KAAQpQ,GACkB,IAA3BoQ,EAAKhR,QAAQ,iBACNY,GAAIoQ,GAtHvB,GAAIhX,GAAQvB,OAAOuB,MAAOwI,EAAShK,EAAEgK,OAAQyrC,GACrCpjB,GAAI,KACJujB,IAAK,KACLC,GAAI,KACJC,IAAK,KACLC,GAAI,KACJC,IAAK,KACL5pC,SAAU,cACV6pC,eAAgB,cAChBC,SAAU,WACVC,WAAY,aACZC,OAAQ,KACRC,UAAW,KACXC,QAAS,KACTC,WAAY,MACbb,EAA0B1rC,KAAWyrC,GAAgBrpC,SAAU,aAAeoqC,GAC7EC,SAAUz2C,EAAEkK,KACZwsC,KAAM12C,EAAEkK,KACRiD,OAAQ,SAAUgvB,EAAQhvB,EAAQwpC,GAC1BxpC,IACAA,EAASkoC,EAAcloC,EAAQwpC,GAC3BxpC,IACAgvB,EAAOya,QAAUzpC,KAI7Bma,KAAM,SAAU6U,EAAQ0a,GACpB,GAAI9pC,GAAO/M,EAAEsc,IAAIu6B,EAAS,SAAU3vC,GAChC,GAAI4vC,GAAQ5vC,EAAMmgB,MAAM5mB,QAAQ,MAAO,IAIvC,OAHkB,SAAdyG,EAAMqxB,MACNue,GAAS,SAENA,IACRt2C,KAAK,IACJuM,KACAovB,EAAO4a,SAAWhqC,IAG1BiqC,KAAM,SAAU7a,EAAQ6a,GAChBA,IACA7a,EAAO8a,MAAQD,IAGvBE,KAAM,SAAU/a,EAAQ+a,GAChBA,IACA/a,EAAOgb,KAAOD,KAGvBE,GAAoBC,MAAQC,SAAU,SA0E7CttC,IAAO,EAAMxI,EAAMsD,MACfyyC,SACIC,OACIhvC,KAAM,OACN1D,KAAM,SAAUA,GACZ,MAAOA,GAAKmV,EAAEw9B,UAAY3yC,EAAKmV,IAEnCy9B,MAAO,cAGfC,YACIH,OACIH,MACIvhB,OAAO,EACPwhB,SAAU,QACVM,MAAO,aAEXC,QACI/hB,OAAO,EACPwhB,SAAU,OACVpX,YAAa,mBACb13B,KAAM,OAEVsvC,QACIhiB,OAAO,EACPwhB,SAAU,OACVpX,YAAa,mBACb13B,KAAM,QAEV4mB,SACI0G,OAAO,EACPwhB,SAAU,OACV9uC,KAAM,UAEVuvC,aAAc,SAAUruC,EAASlB,EAAMmuC,GACnC,GAAIxa,GAAQj1B,EAAOkE,EAAQksC,CAK3B,IAJA5tC,EAAUA,MACVlB,EAAOA,GAAQ,OACf8uC,GAAYhuC,KAAKI,SAAW0tC,GAAiB5uC,GAC7C8uC,EAAWA,EAAWA,EAASA,SAAW,OAC7B,SAAT9uC,EAAiB,CACjB2zB,GAAW6b,aAAc,YACT,QAAZV,IACAnb,EAAO8b,QAAU,OAErB,KAAK7sC,IAAU1B,GACP8sC,EAAQprC,GACRorC,EAAQprC,GAAQ+wB,EAAQzyB,EAAQ0B,GAASurC,GAEzCxa,EAAO/wB,GAAU1B,EAAQ0B,OAG9B,CACH,GAAiB,SAAbksC,EACA,KAAUllC,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,MACfyyC,SACIW,YACI1vC,KAAM,OACN1D,KAAM,SAAUA,GAGZ,MAFAA,GAAO9E,EAAEgK,UAAWlF,GACpB6wC,EAAc7wC,GACVA,EAAKoC,MACEpC,EAAKoC,OAERpC,IAEZ4yC,MAAO,SAAU5yC,GACb,MAAOA,GAAK,mBAIxB6yC,YACIO,YACIb,MACIvhB,OAAO,EACPwhB,SAAU,QAEdO,QACI/hB,OAAO,EACPwhB,SAAU,OACVpX,YAAa,0CACb13B,KAAM,OAEVsvC,QACIhiB,OAAO,EACPwhB,SAAU,OACVpX,YAAa,0CACb13B,KAAM,QAEV4mB,SACI0G,OAAO,EACPwhB,SAAU,OACV9uC,KAAM,UAEVuvC,aAAc,SAAUruC,EAASlB,GAC7B,GAAIF,GAAS9G,EAAMsD,KAAK6yC,WAAWH,MAAMO,aAAaruC,EAASlB,GAAM,EAKrE,OAJY,QAARA,IACAF,EAAO6vC,QAAS,QACT7vC,GAAO0vC,cAEX1vC,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,QAAS+oC,EAAgBp4C,EAAEo4C,cAAe97B,EAAMtc,EAAEsc,IAAKtV,EAAOhH,EAAEgH,KAAMgD,EAAShK,EAAEgK,OAAQ4iB,EAASprB,EAAMorB,OAAQzsB,EAAQqB,EAAMrB,MAChKk4C,EAAgBl4C,EAAM6J,QACtBC,KAAM,SAAUP,GAAV,GAIUuG,GAaAkd,EAEImrB,EAsDRC,EAxEJroC,EAAO5G,KAAMouC,EAAQhuC,EAAQguC,MAAOc,EAAQ9uC,EAAQ8uC,MAAOC,EAAQ/uC,EAAQ+uC,MAAOC,EAAShvC,EAAQgvC,OAAQC,EAAYjvC,EAAQivC,UAAW7zC,EAAO4E,EAAQ5E,IACzJ0zC,KACIJ,EAAcI,KACVvoC,EAAOvG,EAAQkvC,WAAap3C,EAAMsD,KAAK+zC,MACvCL,EAAMM,QACN9xC,EAAKwxC,EAAMM,OAAQ,SAAUzxB,EAAOngB,GAC5BkxC,EAAclxC,IAAUA,EAAMmgB,MACzBrnB,EAAEwF,WAAW0B,EAAMmgB,SACpBngB,EAAQ8C,EAAO9C,GAASmgB,MAAOnX,EAAK0c,OAAO1lB,EAAMmgB,UAGrDngB,GAAUmgB,MAAOnX,EAAK0c,OAAO1lB,IAEjCsxC,EAAMM,OAAOzxB,GAASngB,IAG1BimB,EAAKqrB,EAAMrrB,GACXA,IACImrB,KACJA,EAAQpoC,EAAK6oC,cAAc5rB,GAAI,KAAW9F,MAAOnX,EAAK0c,OAAOO,IAC7DqrB,EAAMM,OAAS9uC,EAAOsuC,EAASE,EAAMM,QACrCN,EAAMrrB,GAAKjd,EAAK6oC,cAAc5rB,IAElCqrB,EAAQvoC,EAAKlQ,OAAOy4C,IAExBtoC,EAAKsoC,MAAQA,GAEbd,IACoB,gBAATA,IACPA,EAAQxnC,EAAK0c,OAAO8qB,GACpBxnC,EAAKwnC,MAAQ,SAAU5yC,GACnB,MAAO6W,UAAS+7B,EAAM5yC,GAAO,MAEV,kBAAT4yC,KACdxnC,EAAKwnC,MAAQA,IAGjBgB,IACqB,gBAAVA,IACPA,EAASxoC,EAAK0c,OAAO8rB,GACrBxoC,EAAKwoC,OAAS,SAAU5zC,GACpB,MAAO4zC,GAAO5zC,IAAS,OAEH,kBAAV4zC,KACdxoC,EAAKwoC,OAASA,IAGlB5zC,IACmB,gBAARA,IACPA,EAAOoL,EAAK6oC,cAAcj0C,GAC1BoL,EAAKpL,KAAO,SAAUoC,GAClB,GAAyC8xC,GAArC1wC,EAAS4H,EAAK+oC,SAAS/xC,EAAOpC,EAElC,OADAwD,GAAS+G,EAAQ/G,GAAUA,GAAUA,GACjC4H,EAAKsoC,OAASA,EAAMM,QACpBE,EAAgB,GAAI9oC,GAAKsoC,MAClBl8B,EAAIhU,EAAQ,SAAUpB,GACzB,GAAIA,EAAO,CACP,GAAiBmgB,GAAb6xB,IACJ,KAAK7xB,IAASmxB,GAAMM,OAChBI,EAAO7xB,GAAS2xB,EAAcG,OAAO9xB,EAAOmxB,EAAMM,OAAOzxB,GAAOA,MAAMngB,GAE1E,OAAOgyC,OAIZ5wC,IAEW,kBAARxD,KACdoL,EAAKpL,KAAOA,IAGA,kBAAT2zC,KACHF,EAAWroC,EAAKuoC,MACpBvoC,EAAKuoC,MAAQ,SAAU3zC,GACnB,GAAIs0C,GAAMX,EAAMhnC,KAAKvB,EAAMpL,EAC3B,OAAOyzC,GAAS9mC,KAAKvB,EAAMkpC,KAGX,kBAAbT,KACPzoC,EAAKyoC,UAAYA,IAGzBjB,MAAO,SAAUpvC,GACb,MAAOgB,MAAKxE,KAAKwD,GAAQpH,QAE7Bw3C,OAAQ,SAAU5zC,GACd,MAAOA,GAAOA,EAAK4zC,OAAS,MAEhCC,UAAW,SAAU7zC,GACjB,MAAOA,IAEXu0C,SAAU,SAAUh4C,GAChB,GAAiBi4C,GAAYre,EAAMzK,EAAU7jB,EAAUqD,EAAQupC,EAAgFtyC,EAA3IqB,KAAsEkxC,EAAan4C,EAAQm4C,WAAYC,EAAiBD,EAAWt4C,MACvI,KAAK+F,EAAM,EAAGA,EAAMwyC,EAAgBxyC,IAChCsyC,EAAYC,EAAWvyC,GACvBqB,EAAO,IAAMixC,EAAU5sC,UAAY4sC,EAAU9d,SAEjD,KAAKR,EAAO55B,EAAQq4C,WAAYze,EAAMA,EAAOA,EAAK0e,YAC9CnpB,EAAWyK,EAAKzK,SACC,IAAbA,GAA+B,IAAbA,EAClBloB,EAAO,SAAW2yB,EAAKQ,UACH,IAAbjL,IACP8oB,EAAahwC,KAAK+vC,SAASpe,GAC3BtuB,EAAWsuB,EAAKtuB,SAChBqD,EAAS1H,EAAOqE,GACZ0C,EAAQW,GACRA,EAAOoB,KAAKkoC,GAEZtpC,EADOA,IAAW9P,GAEd8P,EACAspC,GAGKA,EAEbhxC,EAAOqE,GAAYqD,EAG3B,OAAO1H,IAEX2wC,SAAU,SAAU/xC,EAAOwlB,GAEvB,IADA,GAAqC1c,GAAQ1H,EAAQpH,EAAQ04C,EAAoB3yC,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/C2yC,EAAqBtwC,KAAK2vC,SAAS/xC,EAAMD,GAAMylB,GAC/CktB,EAAqBvqC,EAAQuqC,GAAsBA,GAAsBA,GACzEtxC,EAAO8I,KAAKhB,MAAM9H,EAAQsxC,EAE9B,OAAOtxC,GAGf,MAAOpB,IAEXuxC,MAAO,SAAUW,GACb,GAAIpwC,GAAiB6wC,EAAMvxC,IAI3B,OAHAU,GAAkBowC,EAAIpwC,iBAAmBhJ,EAAE85C,SAASV,GAAKpwC,gBACzD6wC,EAAOvwC,KAAK+vC,SAASrwC,GACrBV,EAAOU,EAAgB2D,UAAYktC,EAC5BvxC,GAEXywC,cAAe,SAAU/oC,EAAQ+pC,GAC7B,MAAK/pC,IAGLA,EAASA,EAAOvP,QAAQ,MAAO,IAAIA,QAAQ,MAAO,KAC9CuP,EAAOxI,QAAQ,MAAQ,EAChBwI,EAAOvP,QAAQ,WAAYs5C,EAAM,KAAO,UAE/C/pC,EAAOxI,QAAQ,WAAa,EACrBwI,EAAOvP,QAAQ,gBAAiBs5C,EAAM,QAAU,aAEpD/pC,GATI,IAWf4c,OAAQ,SAAU5c,GACd,MAAO4c,GAAOtjB,KAAKyvC,cAAc/oC,IAAS,KAGlDhQ,GAAEgK,QAAO,EAAMxI,EAAMsD,MACjBuzC,cAAeA,EACf2B,SAAWZ,IAAKf,MAEtBp4C,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,QAAS+5C,GAAa3sC,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,GAAQyoC,IAAU3jC,EAAQ4sC,eAC1B5sC,EAAQ4sC,cAAcj4B,GAE1B3U,EAAQgE,QAAQ9I,EAAMyZ,IAkI9B,QAASk4B,GAAM5d,EAAG5hB,GACd,GAAI4hB,IAAM5hB,EACN,OAAO,CAEX,IAA0C0M,GAAtC+yB,EAAQp6C,EAAEwI,KAAK+zB,GAAI8d,EAAQr6C,EAAEwI,KAAKmS,EACtC,IAAIy/B,IAAUC,EACV,OAAO,CAEX,IAAc,SAAVD,EACA,MAAO7d,GAAEh3B,YAAcoV,EAAEpV,SAE7B,IAAc,WAAV60C,GAAgC,UAAVA,EACtB,OAAO,CAEX,KAAK/yB,IAASkV,GACV,IAAK4d,EAAM5d,EAAElV,GAAQ1M,EAAE0M,IACnB,OAAO,CAGf,QAAO,EA6BX,QAASizB,GAAelyC,EAAKoQ,GACzB,GAAI6O,GAAOkzB,CACX,KAAKA,IAAanyC,GAAK,CAEnB,GADAif,EAAQjf,EAAImyC,GACRnC,GAAc/wB,IAAUA,EAAMA,OAASA,EAAMA,QAAU7O,EACvD,MAAO6O,EACJ,IAAIA,IAAU7O,EACjB,MAAO6O,GAGf,MAAO,MAgXX,QAASmzB,GAAM11C,GACXwE,KAAKxE,KAAOA,MA4ChB,QAAS21C,GAAcpzB,EAAOkR,GAC1B,GAAIlR,EAAO,CACP,GAAIqzB,SAAoBrzB,KAAUvd,IAC1Bud,MAAOA,EACPkR,IAAKA,GACLlR,EAAOszB,EAActrC,GAAQqrC,GAAcA,EAAaA,IAAex6C,GAAaw6C,KAC5F,OAAOrkB,IAAKskB,EAAa,SAAU1gC,GAC/B,QAASA,EAAEse,OAqCvB,QAASqiB,GAAkBluB,GACvB,GAAIzlB,GAAK/F,EAAQiM,EAAQooC,EAAUvoC,EAAU0f,EAAW1f,OACxD,IAAIA,EACA,IAAK/F,EAAM,EAAG/F,EAAS8L,EAAQ9L,OAAQ+F,EAAM/F,EAAQ+F,IACjDkG,EAASH,EAAQ/F,GACjBsuC,EAAWpoC,EAAOooC,SACdA,SAAmBA,KAAazrC,KAChCqD,EAAOooC,SAAWsF,EAAYtF,EAASnvC,gBAAkBmvC,GAE7DqF,EAAkBztC,GAI9B,QAAS2tC,GAAgBpuB,GACrB,GAAIA,IAAe+D,GAAc/D,GAQ7B,OAPIrd,GAAQqd,IAAgBA,EAAW1f,UACnC0f,GACI8oB,MAAO,MACPxoC,QAASqC,GAAQqd,GAAcA,GAAcA,KAGrDkuB,EAAkBluB,GACXA,EAIf,QAASquB,GAAkBC,EAAIC,GAC3B,OAAID,EAAGxF,QAASyF,EAAGzF,QAGZwF,EAAG3zB,QAAU4zB,EAAG5zB,OAAS2zB,EAAG9zC,QAAU+zC,EAAG/zC,OAAS8zC,EAAGzF,WAAa0F,EAAG1F,UAEhF,QAAS2F,GAAoB/tC,GAEzB,MADAA,GAASA,MACLsjB,GAActjB,IAEVqoC,MAAO,MACPxoC,YAGD8tC,EAAgB3tC,GAE3B,QAASguC,GAAcjvC,EAAGC,GACtB,MAAIA,GAAEqpC,OAAStpC,EAAEmb,MAAQlb,EAAEkb,MAChB,EACAnb,EAAEmb,MAAQlb,EAAEkb,SAGZ,EAGf,QAAS+zB,GAAeC,EAAOC,GAA/B,GAMQN,GAAIC,EACJM,EACAC,EAMKv0C,CAXT,IAFAo0C,EAAQH,EAAoBG,GAC5BC,EAAQJ,EAAoBI,GACxBD,EAAM7F,QAAU8F,EAAM9F,MACtB,OAAO,CAKX,IAFI+F,GAAYF,EAAMruC,aAAe8C,QACjC0rC,GAAYF,EAAMtuC,aAAe8C,QACjCyrC,EAASr6C,SAAWs6C,EAASt6C,OAC7B,OAAO,CAIX,KAFAq6C,EAAWA,EAASj0B,KAAK6zB,GACzBK,EAAWA,EAASl0B,KAAK6zB,GAChBl0C,EAAM,EAAGA,EAAMs0C,EAASr6C,OAAQ+F,IAGrC,GAFA+zC,EAAKO,EAASt0C,GACdg0C,EAAKO,EAASv0C,GACV+zC,EAAGxF,OAASyF,EAAGzF,OACf,IAAK4F,EAAeJ,EAAIC,GACpB,OAAO,MAER,KAAKF,EAAkBC,EAAIC,GAC9B,OAAO,CAGf,QAAO,EAGX,QAASQ,GAAmBC,GACxB,MAAOrsC,IAAQqsC,GAAeA,GAAeA,GAEjD,QAASC,GAAet0B,EAAOkR,GAC3B,GAAImiB,SAAoBrzB,KAAUvd,IAC1Bud,MAAOA,EACPkR,IAAKA,GACLlR,EAAOszB,EAActrC,GAAQqrC,GAAcA,EAAaA,IAAex6C,GAAaw6C,KAC5F,OAAOp+B,GAAIq+B,EAAa,SAAU1gC,GAC9B,OACIoN,MAAOpN,EAAEoN,MACTkR,IAAKte,EAAEse,KAAO,MACdqjB,WAAY3hC,EAAE2hC,cAgJ1B,QAASC,GAAmB3vC,EAAGC,GAC3B,MAAID,IAAKA,EAAE3G,SAAW4G,GAAKA,EAAE5G,QAClB2G,EAAE3G,YAAc4G,EAAE5G,UAEtB2G,IAAMC,EAEjB,QAAS2vC,GAAmBC,EAAaH,EAAYI,EAAMvgC,EAAOva,EAAQ+6C,GAA1E,GAEQh1C,GAAKi1C,EAAMC,EAAcvuB,EAIrBvG,CAHR,KAFAu0B,EAAaA,MACgBhuB,EAAMguB,EAAW16C,OACzC+F,EAAM,EAAGA,EAAM2mB,EAAK3mB,IACrBi1C,EAAON,EAAW30C,GAClBk1C,EAAeD,EAAKE,UAChB/0B,EAAQ60B,EAAK70B,MACjB00B,EAAY10B,GAAS00B,EAAY10B,OACjC40B,EAAM50B,GAAS40B,EAAM50B,OACrB40B,EAAM50B,GAAO80B,GAAgBF,EAAM50B,GAAO80B,OAC1CJ,EAAY10B,GAAO80B,GAAgBE,EAAUF,EAAa/1C,eAAe21C,EAAY10B,GAAO80B,GAAeH,EAAMx6C,GAAMsrB,SAASzF,GAAQ5L,EAAOva,EAAQ+6C,EAAM50B,GAAO80B,IAuD5K,QAASG,GAASjU,GACd,MAAsB,gBAARA,KAAqBtpB,MAAMspB,GAE7C,QAASkU,GAAOlU,GACZ,MAAOA,IAAOA,EAAI9iC,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,QAASk0C,GAAiB13C,EAAM23C,EAASzD,EAAe0D,EAAoBC,GACxE,GAAIzD,GAAQtsB,EAAQgwB,EAAc31C,EAAmB/F,EAAd27C,IACvC,KAAK51C,EAAM,EAAG/F,EAAS4D,EAAK5D,OAAQ+F,EAAM/F,EAAQ+F,IAAO,CACrDiyC,EAASp0C,EAAKmC,EACd,KAAK2lB,IAAU6vB,GACXG,EAAeD,EAAW/vB,GACtBgwB,GAAgBA,IAAiBhwB,IAC5BiwB,EAAQD,KACTC,EAAQD,GAAgBp7C,GAAMqrB,OAAO+vB,IAEzCC,EAAQD,GAAc1D,EAAQuD,EAAQ7vB,GAAQssB,UACvCA,GAAOtsB,KAK9B,QAASkwB,GAAeh4C,EAAM23C,EAASzD,EAAe0D,EAAoBC,GACtE,GAAIzD,GAAQtsB,EAAQgwB,EAAc31C,EAAK/F,CACvC,KAAK+F,EAAM,EAAG/F,EAAS4D,EAAK5D,OAAQ+F,EAAM/F,EAAQ+F,IAAO,CACrDiyC,EAASp0C,EAAKmC,EACd,KAAK2lB,IAAU6vB,GACXvD,EAAOtsB,GAAUosB,EAAcG,OAAOvsB,EAAQ6vB,EAAQ7vB,GAAQssB,IAC9D0D,EAAeD,EAAW/vB,GACtBgwB,GAAgBA,IAAiBhwB,SAC1BssB,GAAO0D,IAK9B,QAASG,GAAaj4C,EAAM23C,EAASzD,EAAe0D,EAAoBC,GACpE,GAAIzD,GAAQjyC,EAAKszC,EAAWr5C,CAC5B,KAAK+F,EAAM,EAAG/F,EAAS4D,EAAK5D,OAAQ+F,EAAM/F,EAAQ+F,IAC9CiyC,EAASp0C,EAAKmC,GACdszC,EAAYmC,EAAmBxD,EAAO7xB,OAClCkzB,GAAaA,GAAarB,EAAO7xB,QACjC6xB,EAAO7xB,MAAQkzB,GAEnBrB,EAAOhyC,MAAQ8xC,EAAcG,OAAOD,EAAO7xB,MAAO6xB,EAAOhyC,OACrDgyC,EAAO8D,aACPD,EAAa7D,EAAOppB,MAAO2sB,EAASzD,EAAe0D,EAAoBC,GAEvEG,EAAe5D,EAAOppB,MAAO2sB,EAASzD,EAAe0D,EAAoBC,GAIrF,QAASM,GAAeC,EAAkB1E,EAAO2E,EAAWV,EAASC,EAAoBC,GACrF,MAAO,UAAU73C,GAQb,MAPAA,GAAOo4C,EAAiBp4C,GACpBA,IAAS2rB,GAAcgsB,KACK,mBAAxB5pC,GAASpB,KAAK3M,IAAgCA,YAAgBD,MAC9DC,GAAQA,IAEZq4C,EAAUr4C,EAAM23C,EAAS,GAAIjE,GAASkE,EAAoBC,IAEvD73C,OA+Df,QAASs4C,GAAY1zB,EAAQ2zB,EAAMrG,EAAME,GAErC,IAFJ,GACQoG,GAAgBxtB,EAIZ5uB,EAJG+F,EAAM,EACVo2C,EAAKn8C,QAAUg2C,IAClBoG,EAAQD,EAAKp2C,GACb6oB,EAAQwtB,EAAMxtB,MACV5uB,EAAS4uB,EAAM5uB,OACfwoB,GAAUA,EAAOrC,QAAUi2B,EAAMj2B,OAASqC,EAAOxiB,QAAUo2C,EAAMp2C,OAC7DwiB,EAAOszB,cAAgBtzB,EAAOoG,MAAM5uB,OACpCk8C,EAAY1zB,EAAOoG,MAAMpG,EAAOoG,MAAM5uB,OAAS,GAAIo8C,EAAMxtB,MAAOknB,EAAME,IAEtEpnB,EAAQA,EAAMhgB,MAAMknC,EAAMA,EAAOE,GACjCxtB,EAAOoG,MAAQpG,EAAOoG,MAAMtQ,OAAOsQ,IAEvCutB,EAAK3rC,OAAOzK,IAAO,IACZq2C,EAAMN,cAAgBltB,EAAM5uB,QACnCk8C,EAAYE,EAAOxtB,EAAOknB,EAAME,GAC3BoG,EAAMxtB,MAAM5uB,QACbm8C,EAAK3rC,OAAOzK,IAAO,KAGvB6oB,EAAQA,EAAMhgB,MAAMknC,EAAMA,EAAOE,GACjCoG,EAAMxtB,MAAQA,EACTwtB,EAAMxtB,MAAM5uB,QACbm8C,EAAK3rC,OAAOzK,IAAO,IAGN,IAAjB6oB,EAAM5uB,OACN81C,GAAQ91C,GAER81C,EAAO,EACPE,GAAQpnB,EAAM5uB,YAEZ+F,GAAOo2C,EAAKn8C,WAIlB+F,EAAMo2C,EAAKn8C,QACXm8C,EAAK3rC,OAAOzK,EAAKo2C,EAAKn8C,OAAS+F,GAGvC,QAASs2C,GAAcz4C,GAAvB,GACQmC,GAAkB/F,EAAQ4uB,EAAO0tB,EAE7BF,EAFCh1C,IACT,KAAKrB,EAAM,EAAG/F,EAAS4D,EAAK5D,OAAQ+F,EAAM/F,EAAQ+F,IAE9C,GADIq2C,EAAQx4C,EAAK24C,GAAGx2C,GAChBq2C,EAAMN,aACN10C,EAASA,EAAOkX,OAAO+9B,EAAcD,EAAMxtB,YAG3C,KADAA,EAAQwtB,EAAMxtB,MACT0tB,EAAY,EAAGA,EAAY1tB,EAAM5uB,OAAQs8C,IAC1Cl1C,EAAO8I,KAAK0e,EAAM2tB,GAAGD,GAIjC,OAAOl1C,GAEX,QAASo1C,GAAe54C,EAAM0zC,GAC1B,GAAIvxC,GAAK/F,EAAQo8C,CACjB,IAAI9E,EACA,IAAKvxC,EAAM,EAAG/F,EAAS4D,EAAK5D,OAAQ+F,EAAM/F,EAAQ+F,IAC9Cq2C,EAAQx4C,EAAK24C,GAAGx2C,GACZq2C,EAAMN,aACNU,EAAeJ,EAAMxtB,MAAO0oB,GAE5B8E,EAAMxtB,MAAQ,GAAI/qB,GAAoBu4C,EAAMxtB,MAAO0oB,GAKnE,QAASmF,GAAe74C,EAAM84C,GAC1B,IAAK,GAAI32C,GAAM,EAAG/F,EAAS4D,EAAK5D,OAAQ+F,EAAM/F,EAAQ+F,IAClD,GAAInC,EAAKmC,GAAK+1C,cACV,GAAIW,EAAe74C,EAAKmC,GAAK6oB,MAAO8tB,GAChC,OAAO,MAER,IAAIA,EAAK94C,EAAKmC,GAAK6oB,MAAOhrB,EAAKmC,IAClC,OAAO,EAInB,QAAS42C,GAAgBC,EAAQh5C,EAAMk3C,EAAMra,GACzC,IAAK,GAAI16B,GAAM,EAAGA,EAAM62C,EAAO58C,QACvB48C,EAAO72C,GAAKnC,OAASA,IAGrBi5C,EAAeD,EAAO72C,GAAKnC,KAAMk3C,EAAMra,GAJR16B,MAS3C,QAAS82C,GAAejuB,EAAOksB,EAAMra,GACjC,IAAK,GAAI16B,GAAM,EAAG/F,EAAS4uB,EAAM5uB,OAAQ+F,EAAM/F,EAAQ+F,IAAO,CAC1D,GAAI6oB,EAAM7oB,IAAQ6oB,EAAM7oB,GAAK+1C,aACzB,MAAOe,GAAejuB,EAAM7oB,GAAK6oB,MAAOksB,EAAMra,EAC3C,IAAI7R,EAAM7oB,KAAS+0C,GAAQlsB,EAAM7oB,KAAS06B,EAE7C,MADA7R,GAAM7oB,GAAO06B,GACN,GAInB,QAASqc,GAAsB/rB,EAAMntB,EAAMg5C,EAAQt1C,EAAMy1C,GAAzD,GACaC,GAAeh9C,EAChB86C,EAOS/0C,CARjB,KAASi3C,EAAY,EAAGh9C,EAAS+wB,EAAK/wB,OAAQg9C,EAAYh9C,EAAQg9C,IAE9D,GADIlC,EAAO/pB,EAAKisB,GACXlC,KAAQA,YAAgBxzC,IAG7B,GAAIwzC,EAAKgB,eAAiB98C,GAAc+9C,GAGpC,IAASh3C,EAAM,EAAGA,EAAMnC,EAAK5D,OAAQ+F,IACjC,GAAInC,EAAKmC,KAAS+0C,EAAM,CACpB/pB,EAAKisB,GAAap5C,EAAK24C,GAAGx2C,GAC1B42C,EAAgBC,EAAQh5C,EAAMk3C,EAAM/pB,EAAKisB,GACzC,YANRF,GAAsBhC,EAAKlsB,MAAOhrB,EAAMg5C,EAAQt1C,EAAMy1C,GAYlE,QAASE,GAAYr5C,EAAM0zC,GAA3B,GACQvxC,GAAK/F,EAED6uB,CADR,KAAK9oB,EAAM,EAAG/F,EAAS4D,EAAK5D,OAAQ+F,EAAM/F,EAAQ+F,IAE9C,GADI8oB,EAAWjrB,EAAK24C,GAAGx2C,GACnB8oB,EAASquB,KAAO5F,EAAM4F,IAEtB,MADAt5C,GAAK4M,OAAOzK,EAAK,GACV8oB,EAInB,QAASsuB,GAAqBv5C,EAAM0zC,GAChC,MAAIA,GACOhxC,EAAQ1C,EAAM,SAAUk3C,GAC3B,MAAOA,GAAKoC,KAAOpC,EAAKoC,KAAO5F,EAAM4F,KAAOpC,EAAKxD,EAAMF,WAAaE,EAAMrrB,IAAMqrB,EAAMrrB,KAAOqrB,EAAM8F,gBAK/G,QAASC,GAAaz5C,EAAM0zC,GACxB,MAAIA,GACOhxC,EAAQ1C,EAAM,SAAUk3C,GAC3B,MAAOA,GAAKoC,KAAO5F,EAAM4F,SAKrC,QAAS52C,GAAQ1C,EAAM05C,GACnB,GAAIv3C,GAAK/F,CACT,KAAK+F,EAAM,EAAG/F,EAAS4D,EAAK5D,OAAQ+F,EAAM/F,EAAQ+F,IAC9C,GAAIu3C,EAAS15C,EAAKmC,IACd,MAAOA,EAGf,UAEJ,QAASw3C,GAAmB3F,EAAQtgC,GAApC,GAEYkiC,GACAH,CAFR,OAAIzB,KAAWroB,GAAcqoB,IACrB4B,EAAa5B,EAAOtgC,GAGpB+hC,EADAnC,GAAcsC,GACFA,EAAWpkB,MAAQokB,EAAWrzB,OAAS7O,EAEvCsgC,EAAOtgC,IAASA,EAE5BhT,GAAW+0C,GACJ/hC,EAEJ+hC,GAEJ/hC,EAEX,QAASkmC,GAA8BhE,EAAYlC,GAAnD,GACQvxC,GAAK/F,EACAmmB,EADQqC,IACjB,KAASrC,IAASqzB,GACA,YAAVrzB,IACAqC,EAAOrC,GAASqzB,EAAWrzB,GAGnC,IAAIqzB,EAAW1tC,QAEX,IADA0c,EAAO1c,WACF/F,EAAM,EAAG/F,EAASw5C,EAAW1tC,QAAQ9L,OAAQ+F,EAAM/F,EAAQ+F,IAC5DyiB,EAAO1c,QAAQ/F,GAAOy3C,EAA8BhE,EAAW1tC,QAAQ/F,GAAMuxC,OAGjF9uB,GAAOrC,MAAQo3B,EAAmBjG,EAAMM,OAAQpvB,EAAOrC,MAE3D,OAAOqC,GAEX,QAASi1B,GAAwBhE,EAAanC,GAA9C,GACQvxC,GAAK/F,EAAqBwoB,EAAQgxB,EAIzBrzB,EAJI/e,IACjB,KAAKrB,EAAM,EAAG/F,EAASy5C,EAAYz5C,OAAQ+F,EAAM/F,EAAQ+F,IAAO,CAC5DyiB,KACAgxB,EAAaC,EAAY1zC,EACzB,KAASogB,IAASqzB,GACdhxB,EAAOrC,GAASqzB,EAAWrzB,EAE/BqC,GAAOrC,MAAQo3B,EAAmBjG,EAAMM,OAAQpvB,EAAOrC,OACnDqC,EAAOkyB,YAAcvsC,GAAQqa,EAAOkyB,cACpClyB,EAAOkyB,WAAa+C,EAAwBj1B,EAAOkyB,WAAYpD,IAEnElwC,EAAO8I,KAAKsY,GAEhB,MAAOphB,GAk/CX,QAASs2C,GAAYxgB,EAAQ0a,GAA7B,GAEQpvC,GACAm1C,EACAC,EACAh6C,EACAmC,EAAK/F,EACL69C,EACA3zC,EACA8tC,EACAhyC,CACJ,KAVAk3B,EAASp+B,EAAEo+B,GAAQ,GACf10B,EAAU00B,EAAO10B,QACjBm1C,EAAa/F,EAAO,GACpBgG,EAAchG,EAAO,GACrBh0C,KAMCmC,EAAM,EAAG/F,EAASwI,EAAQxI,OAAQ+F,EAAM/F,EAAQ+F,IACjDiyC,KACA9tC,EAAS1B,EAAQzC,GACjB83C,EAAW3zC,EAAO0c,WACdi3B,IAAa3gB,IACb2gB,EAAW,MAEX3zC,EAAOwB,UAAYmyC,GAAYA,EAASnyC,WAGxCmyC,IACA7F,EAAO6F,SAAWA,EAASC,OAE/B9F,EAAO2F,EAAWx3B,OAASjc,EAAOszB,KAClCx3B,EAAQkE,EAAOouC,WAAWtyC,MAEtBA,EADAA,GAASA,EAAM+3C,UACP7zC,EAAOlE,MAEPkE,EAAOszB,KAEnBwa,EAAO4F,EAAYz3B,OAASngB,EAC5BpC,EAAKsM,KAAK8nC,GAEd,OAAOp0C,GAEX,QAASo6C,GAAW7+B,EAAOy4B,GACvB,GAAoE7xC,GAAK/F,EAAQi+C,EAAmDC,EAAOlG,EAAQmG,EAAMC,EAArJC,EAAQv/C,EAAEqgB,GAAO,GAAGm/B,QAAQ,GAAIC,EAAOF,EAAQA,EAAME,QAAoCC,EAAa5G,EAAO53C,OAAQ4D,IACzH,KAAKmC,EAAM,EAAG/F,EAASu+C,EAAKv+C,OAAQ+F,EAAM/F,EAAQ+F,IAAO,CAIrD,IAHAiyC,KACAoG,GAAQ,EACRF,EAAQK,EAAKx4C,GAAKm4C,MACbD,EAAa,EAAGA,EAAaO,EAAYP,IAC1CE,EAAOD,EAAMD,GACuB,OAAhCE,EAAK1yC,SAASvG,gBACdk5C,GAAQ,EACRpG,EAAOJ,EAAOqG,GAAY93B,OAASg4B,EAAKn+B,UAG3Co+B,IACDx6C,EAAKsM,KAAK8nC,GAGlB,MAAOp0C,GA0IX,QAAS66C,GAAWnnC,GAChB,MAAO,YACH,GAAI1T,GAAOwE,KAAKs2C,MAAOt3C,EAAStD,GAAWuI,GAAGiL,GAAMpI,MAAM9G,KAAMwG,GAAM2B,KAAKpN,WAI3E,OAHIiF,MAAKs2C,OAAS96C,GACdwE,KAAKu2C,wBAEFv3C,GAkJf,QAASw3C,GAAUC,EAAMjH,GAErB,QAASjpB,GAASmwB,EAAYtyB,GAC1B,MAAOsyB,GAAW7yC,OAAOugB,GAAS9iB,IAAIo1C,EAAWpvB,KAAKlD,IAF1D,GAAgCzmB,GAAK/F,EAAmBg4C,EAAgL8C,EAAM7uB,EAAI8yB,EAAW14C,EAAWtD,EAApQ6rB,EAAQ9vB,EAAE+/C,GAAM97C,WAAyBa,KAAmBo7C,EAAYpH,EAAO,GAAGzxB,MAAO84B,EAAWrH,EAAO,IAAMA,EAAO,GAAGzxB,MAAO+4B,EAAsBtH,EAAO,IAAMA,EAAO,GAAGzxB,MAAOg5B,EAAgBvH,EAAO,IAAMA,EAAO,GAAGzxB,KAIjO,KAAKpgB,EAAM,EAAG/F,EAAS4uB,EAAM5uB,OAAQ+F,EAAM/F,EAAQ+F,IAC/CiyC,GAAWoH,SAAS,GACpBtE,EAAOlsB,EAAMuC,GAAGprB,GAChBg5C,EAAYjE,EAAK,GAAGtC,WACpBz1C,EAAW+3C,EAAK/3C,WAChB87C,EAAO97C,EAASkJ,OAAO,MACvBlJ,EAAWA,EAASkJ,OAAO,YAC3BggB,EAAK6uB,EAAKxvC,KAAK,WACX2gB,IACA+rB,EAAO/rB,GAAKA,GAEZ8yB,IACA/G,EAAOgH,GAAmC,GAAtBD,EAAUzvB,SAAgByvB,EAAUxkB,UAAYx3B,EAASy6B,QAE7EyhB,IACAjH,EAAOiH,GAAYtwB,EAAS5rB,EAAU,KAAKuI,KAAK,SAEhD6zC,IACAnH,EAAOmH,GAAiBxwB,EAAS5rB,EAAU,OAAOuI,KAAK,QAEvD4zC,IACA74C,EAAYsoB,EAAS5rB,EAAU,aAAa0kC,KAAK,aACjDuQ,EAAOkH,GAAuB74C,GAAavH,EAAEu7B,KAAKh0B,EAAU9G,QAAQ,WAAY,MAEhFs/C,EAAK7+C,SACLg4C,EAAOppB,MAAQgwB,EAAUC,EAAK1tB,GAAG,GAAIymB,IAEJ,QAAjCkD,EAAKxvC,KAAK,sBACV0sC,EAAOqH,aAAc,GAEzBz7C,EAAKsM,KAAK8nC,EAEd,OAAOp0C,GAlhHd,GACgKwX,GAwOzJvX,EAuCAy7C,EAoJAC,EAoBAC,EAmBA7H,EA0IA8H,EA2CAC,EA4DAC,EAqLAhG,EA+RAwB,EA4FAyE,EAiBAC,GAyEAC,GA0FAC,GAsQAj8C,GAm7CAk8C,GAoHAC,GAiJAl8C,GAoMAm8C,GAmKAC,GApsHAr3C,GAAShK,EAAEgK,OAAQsF,GAAQtP,EAAEsP,MAAO8oC,GAAgBp4C,EAAEo4C,cAAe3nB,GAAgBzwB,EAAEywB,cAAephB,GAAUrP,EAAEqP,QAASgnB,GAAOr2B,EAAEq2B,KAAMirB,GAAOthD,EAAEshD,KAAWt6C,GAAOhH,EAAEgH,KAAMkD,GAAOlK,EAAEkK,KAAM1I,GAAQvB,OAAOuB,MAAOgE,GAAahE,GAAMgE,WAAYmI,GAAanM,GAAMmM,WAAYxN,GAAQqB,GAAMrB,MAAO2J,GAAS,SAAU2F,GAAW,WAAY8xC,GAAS,SAAUC,GAAO,OAAQC,GAAS,SAAUC,GAAU,UAAWzQ,GAAS,SAAU0Q,GAAO,OAAQC,GAAM,MAAOC,GAAQ,QAASC,GAAe,eAAgBC,GAAW,WAAYC,GAAa,aAAcC,IACtiBV,GACAC,GACAC,GACAC,IACDQ,GAAW,SAAUC,GACpB,MAAOA,IACRv1B,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,GAAQg4C,EACpB7yC,GAAWJ,GAAGtD,KAAKwH,KAAKvB,GACxBA,EAAKhP,OAASyb,EAAMzb,OACpBgP,EAAKkyC,QAAQzlC,EAAOzM,IAExButC,GAAI,SAAUhiC,GACV,MAAOnS,MAAKmS,IAEhBrI,OAAQ,WACJ,GAAInM,GAA2BC,EAAtBhG,EAASoI,KAAKpI,OAAemhD,EAAWj9C,MAAMlE,EACvD,KAAK+F,EAAM,EAAGA,EAAM/F,EAAQ+F,IACxBC,EAAQoC,KAAKrC,GACTC,YAAiBs5C,KACjBt5C,EAAQA,EAAMkM,UAElBivC,EAAKp7C,GAAOC,CAEhB,OAAOm7C,IAEXn/C,OAAQgH,GACRk4C,QAAS,SAAU79C,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,SAAUkgD,EAAQp/C,GACpB,GAAiBy+B,GAAbzxB,EAAO5G,IAkBX,OAjBe,QAAXg5C,GAA6C,oBAA1BzvC,GAASpB,KAAK6wC,KACjC3gB,EAAa2gB,YAAkBpyC,GAAK1H,MAAQ85C,YAAkBzJ,GACzDlX,IACD2gB,EAASA,YAAkB9B,GAAmB8B,EAAOlvC,SAAWkvC,EAChEA,EAAS,GAAIpyC,GAAK1H,KAAK85C,IAE3BA,EAAOp/C,OAASA,EAChBo/C,EAAO5xC,KAAKugC,GAAQ,SAAU1/B,GAC1BrB,EAAKoB,QAAQ2/B,IACT5pB,MAAO9V,EAAE8V,MACT4T,KAAM1pB,EAAE0pB,KACRxf,MAAOlK,EAAEkK,MACTqU,MAAOve,EAAEue,QAAUxmB,MACnB22B,OAAQ1uB,EAAE0pB,KAAO1pB,EAAE0uB,QAAU,aAAe,kBAIjDqiB,GAEXlxC,KAAM,WACF,GAA0D9I,GAAtDmT,EAAQnS,KAAKpI,OAAQ4uB,EAAQxmB,KAAK84C,QAAQ/9C,UAO9C,OANAiE,GAAS8I,GAAKhB,MAAM9G,KAAMwmB,GAC1BxmB,KAAKgI,QAAQ2/B,IACThR,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,QAAQ2/B,IACThR,OAAQ,SACRxkB,MAAOva,EAAS,EAChB4uB,OAAQxnB,KAGTA,GAEXoJ,OAAQ,SAAU+J,EAAO8mC,EAASvG,GAC9B,GAAoD1zC,GAAQlE,EAAGwpB,EAA3DkC,EAAQxmB,KAAK84C,QAAQtyC,GAAM2B,KAAKpN,UAAW,GAK/C,IAJAiE,EAASoJ,GAAOtB,MAAM9G,MAClBmS,EACA8mC,GACF/iC,OAAOsQ,IACLxnB,EAAOpH,OAMP,IALAoI,KAAKgI,QAAQ2/B,IACThR,OAAQ,SACRxkB,MAAOA,EACPqU,MAAOxnB,IAENlE,EAAI,EAAGwpB,EAAMtlB,EAAOpH,OAAQkD,EAAIwpB,EAAKxpB,IAClCkE,EAAOlE,IAAMkE,EAAOlE,GAAGH,UACvBqE,EAAOlE,GAAG+M,OAAO8/B,GAW7B,OAPI+K,IACA1yC,KAAKgI,QAAQ2/B,IACThR,OAAQ,MACRxkB,MAAOA,EACPqU,MAAOA,IAGRxnB,GAEX8S,MAAO,WACH,GAAIla,GAASoI,KAAKpI,OAAQoH,EAAS8S,GAAMhL,MAAM9G,KAQ/C,OAPIpI,IACAoI,KAAKgI,QAAQ2/B,IACThR,OAAQ,SACRxkB,MAAO,EACPqU,OAAQxnB,KAGTA,GAEX+I,QAAS,WACL,GAAqC/I,GAAjCwnB,EAAQxmB,KAAK84C,QAAQ/9C,UAOzB,OANAiE,GAAS+I,GAAQjB,MAAM9G,KAAMwmB,GAC7BxmB,KAAKgI,QAAQ2/B,IACThR,OAAQ,MACRxkB,MAAO,EACPqU,MAAOA,IAEJxnB,GAEXd,QAAS,SAAUw0C,GACf,GAAiB/0C,GAAK/F,EAAlBgP,EAAO5G,IACX,KAAKrC,EAAM,EAAG/F,EAASgP,EAAKhP,OAAQ+F,EAAM/F,EAAQ+F,IAC9C,GAAIiJ,EAAKjJ,KAAS+0C,EACd,MAAO/0C,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,IAEXk6C,OAAQ,SAAUv4B,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,IAEXm6C,YAAa,SAAUx4B,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,GAA0B+xB,GAAtB/0C,EAAM,EAAGqB,KAAmBpH,EAASoI,KAAKpI,OACvC+F,EAAM/F,EAAQ+F,IACjB+0C,EAAO1yC,KAAKrC,GACRgjB,EAAS+xB,EAAM/0C,EAAKqC,QACpBhB,EAAOA,EAAOpH,QAAU86C,EAGhC,OAAO1zC,IAEXsoB,KAAM,SAAU3G,GAEZ,IADA,GAAa+xB,GAAT/0C,EAAM,EAAS/F,EAASoI,KAAKpI,OAC1B+F,EAAM/F,EAAQ+F,IAEjB,GADA+0C,EAAO1yC,KAAKrC,GACRgjB,EAAS+xB,EAAM/0C,EAAKqC,MACpB,MAAO0yC,IAInB0G,MAAO,SAAUz4B,GAEb,IADA,GAAa+xB,GAAT/0C,EAAM,EAAS/F,EAASoI,KAAKpI,OAC1B+F,EAAM/F,EAAQ+F,IAEjB,GADA+0C,EAAO1yC,KAAKrC,IACPgjB,EAAS+xB,EAAM/0C,EAAKqC,MACrB,OAAO,CAGf,QAAO,GAEXq5C,KAAM,SAAU14B,GAEZ,IADA,GAAa+xB,GAAT/0C,EAAM,EAAS/F,EAASoI,KAAKpI,OAC1B+F,EAAM/F,EAAQ+F,IAEjB,GADA+0C,EAAO1yC,KAAKrC,GACRgjB,EAAS+xB,EAAM/0C,EAAKqC,MACpB,OAAO,CAGf,QAAO,GAEXkoB,OAAQ,SAAUwqB,GACd,GAAI/0C,GAAMqC,KAAK9B,QAAQw0C,EACnB/0C,SACAqC,KAAKoI,OAAOzK,EAAK,IAGzBq4C,MAAO,WACHh2C,KAAKoI,OAAO,EAAGpI,KAAKpI,UAGN,oBAAX0hD,SAA0BA,OAAOhoB,WAAa/1B,GAAgBwL,UAAUuyC,OAAOhoB,YACtF/1B,GAAgBwL,UAAUuyC,OAAOhoB,aAAegoB,OAAOhoB,WAEvD71B,EAAsBF,GAAgBmF,QACtCC,KAAM,SAAUnF,EAAM0D,GAClBmF,GAAWJ,GAAGtD,KAAKwH,KAAKnI,MACxBA,KAAKd,KAAOA,GAAQg4C,CACpB,KAAK,GAAIv5C,GAAM,EAAGA,EAAMnC,EAAK5D,OAAQ+F,IACjCqC,KAAKrC,GAAOnC,EAAKmC,EAErBqC,MAAKpI,OAAS+F,EACdqC,KAAKu5C,QAAUvzC,GAAM,WACjB,MAAOhG,OACRA,OAEPm0C,GAAI,SAAUhiC,GACV,GAAIugC,GAAO1yC,KAAKmS,EAMhB,OALMugC,aAAgB1yC,MAAKd,KAGvBwzC,EAAK94C,OAASoG,KAAKu5C,QAFnB7G,EAAO1yC,KAAKmS,GAASnS,KAAKlH,KAAK45C,EAAM1yC,KAAKu5C,SAIvC7G,KAoBXwE,EAAmB7yC,GAAW3D,QAC9BC,KAAM,SAAU/C,GACZ,GAAiB8I,GAAQqX,EAArBnX,EAAO5G,KAAqBpG,EAAS,WACjC,MAAOgN,GAEfvC,IAAWJ,GAAGtD,KAAKwH,KAAKnI,MACxBA,KAAKw5C,YACL,KAAKz7B,IAASngB,GACV8I,EAAS9I,EAAMmgB,GACO,gBAAXrX,IAAuBA,IAAWA,EAAOzK,SAA8B,KAAnB8hB,EAAM1mB,OAAO,KACxEqP,EAASE,EAAK9N,KAAK4N,EAAQqX,EAAOnkB,IAEtCgN,EAAKmX,GAASrX,CAElBE,GAAKkuC,IAAM58C,GAAMyrB,QAErB81B,gBAAiB,SAAU17B,GACvB,MAAO/d,MAAKtD,eAAeqhB,IAAoB,cAAVA,GAAmC,YAAVA,SAA8B/d,MAAK+d,KAAW5X,IAAsB,QAAV4X,GAE5Hua,QAAS,SAAU9hC,GACf,IAAK,GAAIsE,KAAKkF,MACNA,KAAKy5C,gBAAgB3+C,IACrBtE,EAAEwJ,KAAKlF,GAAIA,IAIvBgP,OAAQ,WACJ,GAAiBlM,GAAOmgB,EAApB/e,IACJ,KAAK+e,IAAS/d,MACNA,KAAKy5C,gBAAgB17B,KACrBngB,EAAQoC,KAAK+d,IACTngB,YAAiBs5C,IAAoBt5C,YAAiBrC,OACtDqC,EAAQA,EAAMkM,UAElB9K,EAAO+e,GAASngB,EAGxB,OAAOoB,IAEXykB,IAAK,SAAU1F,GACX,GAAiB/e,GAAb4H,EAAO5G,IAOX,OANA4G,GAAKoB,QAAQswC,IAAOv6B,MAAOA,IAEvB/e,EADU,SAAV+e,EACSnX,EAEA1O,GAAMorB,OAAOvF,GAAO,GAAMnX,IAI3C8yC,KAAM,SAAU37B,EAAOngB,GAAjB,GAIM+7C,GAA0B3S,EAGtBloC,EANR8H,EAAO5G,KACP45C,EAAY77B,EAAM7f,QAAQ,MAAQ,CACtC,IAAI07C,EAEA,IADID,EAAQ57B,EAAM9mB,MAAM,KAAM+vC,EAAO,GAC9B2S,EAAM/hD,OAAS,GAAG,CAGrB,GAFAovC,GAAQ2S,EAAM7nC,QACVhT,EAAM5G,GAAMorB,OAAO0jB,GAAM,GAAMpgC,GAC/B9H,YAAeo4C,GAEf,MADAp4C,GAAI4kB,IAAIi2B,EAAMziD,KAAK,KAAM0G,GAClBg8C,CAEX5S,IAAQ,IAIhB,MADA9uC,IAAMqrB,OAAOxF,GAAOnX,EAAMhJ,GACnBg8C,GAEXl2B,IAAK,SAAU3F,EAAOngB,GAClB,GAAIgJ,GAAO5G,KAAM65C,GAAiB,EAAOD,EAAY77B,EAAM7f,QAAQ,MAAQ,EAAGyN,EAAUzT,GAAMorB,OAAOvF,GAAO,GAAMnX,EAuBlH,OAtBI+E,KAAY/N,IACR+N,YAAmBtH,KAAcrE,KAAKw5C,UAAUz7B,KAC5C/d,KAAKw5C,UAAUz7B,GAAO0F,KACtB9X,EAAQ9D,OAAOywC,GAAKt4C,KAAKw5C,UAAUz7B,GAAO0F,KAE9C9X,EAAQ9D,OAAO8/B,GAAQ3nC,KAAKw5C,UAAUz7B,GAAO2qB,SAEjDmR,EAAiBjzC,EAAKoB,QAAQ,OAC1B+V,MAAOA,EACPngB,MAAOA,IAENi8C,IACID,IACDh8C,EAAQgJ,EAAK9N,KAAK8E,EAAOmgB,EAAO,WAC5B,MAAOnX,QAGVA,EAAK8yC,KAAK37B,EAAOngB,IAAUmgB,EAAM7f,QAAQ,MAAQ,GAAK6f,EAAM7f,QAAQ,MAAQ,IAC7E0I,EAAKoB,QAAQ2/B,IAAU5pB,MAAOA,MAInC87B,GAEXjgD,OAAQgH,GACR9H,KAAM,SAAUkgD,EAAQj7B,EAAOnkB,GAAzB,GAEE6pB,GACAilB,EAGIoR,EACAC,EANJnzC,EAAO5G,KAGPd,EAAOqK,GAASpB,KAAK6wC,EA0BzB,OAzBc,OAAVA,GAA4B,oBAAT95C,GAAuC,mBAATA,IAC7C46C,EAAoBd,YAAkBz9C,IACtCw+C,EAAef,YAAkBt9C,IACxB,oBAATwD,GAA+B66C,GAAiBD,GAYhC,mBAAT56C,GAA6B46C,GAAqBC,KACpDD,GAAsBC,IACvBf,EAAS,GAAIz9C,IAAgBy9C,IAEjCtQ,EAASiI,EAAa/pC,EAAM+gC,GAAQ5pB,GAAO,GAC3Ci7B,EAAO5xC,KAAKugC,GAAQe,GACpB9hC,EAAK4yC,UAAUz7B,IAAW2qB,OAAQA,KAjB5BsQ,YAAkB9B,KACpB8B,EAAS,GAAI9B,GAAiB8B,IAElCv1B,EAAMktB,EAAa/pC,EAAM0xC,GAAKv6B,GAAO,GACrCi7B,EAAO5xC,KAAKkxC,GAAK70B,GACjBilB,EAASiI,EAAa/pC,EAAM+gC,GAAQ5pB,GAAO,GAC3Ci7B,EAAO5xC,KAAKugC,GAAQe,GACpB9hC,EAAK4yC,UAAUz7B,IACX0F,IAAKA,EACLilB,OAAQA,IAUhBsQ,EAAOp/C,OAASA,GAEbo/C,KAwBX7B,GACA1/C,OAAU,SAAUmG,GAChB,MAAO1F,IAAMiK,WAAWvE,IAE5BiO,KAAQ,SAAUjO,GACd,MAAO1F,IAAMwe,UAAU9Y,IAE3Bo8C,UAAW,SAAUp8C,GACjB,aAAWA,KAAU4C,GACc,SAAxB5C,EAAMd,cAED,MAATc,IAAkBA,EAAQA,GAErCqL,OAAU,SAAUrL,GAChB,MAAgB,OAATA,EAAgBA,EAAQ,GAAKA,GAExCq8C,UAAW,SAAUr8C,GACjB,MAAOA,KAGXw5C,GACAnuC,OAAU,GACVxR,OAAU,EACVoU,KAAQ,GAAI7P,MACZg+C,WAAW,EACXC,UAAW,IAcX1K,EAAQ2H,EAAiBx2C,QACzBC,KAAM,SAAUnF,GAAV,GAKemC,GACDuR,EALZtI,EAAO5G,IACX,MAAKxE,GAAQ9E,EAAEywB,cAAc3rB,MACzBA,EAAO9E,EAAEgK,UAAWkG,EAAKszC,SAAU1+C,GAC/BoL,EAAKuzC,eACL,IAASx8C,EAAM,EAAGA,EAAMiJ,EAAKuzC,cAAcviD,OAAQ+F,IAC3CuR,EAAOtI,EAAKuzC,cAAcx8C,GAC9BnC,EAAK0T,GAAQtI,EAAKszC,SAAShrC,IAIvCgoC,GAAiBjzC,GAAGtD,KAAKwH,KAAKvB,EAAMpL,GACpCoL,EAAK4xB,OAAQ,EACT5xB,EAAKooC,UACLpoC,EAAKid,GAAKjd,EAAK6c,IAAI7c,EAAKooC,SACpBpoC,EAAKid,KAAOjtB,IACZgQ,EAAKid,GAAKjd,EAAKouC,cAI3ByE,gBAAiB,SAAU17B,GACvB,MAAOm5B,GAAiBjzC,GAAGw1C,gBAAgBtxC,KAAKnI,KAAM+d,IAAoB,QAAVA,KAAsC,OAAjB/d,KAAKgvC,SAA8B,OAAVjxB,IAA6B,UAAVA,GAA+B,eAAVA,GAE1J8xB,OAAQ,SAAU9xB,EAAOngB,GACrB,GAAgEuxC,GAA5DvoC,EAAO5G,KAAMixC,EAAYlzB,EAAOyxB,EAAS5oC,EAAK4oC,UAWlD,OAVAzxB,GAAQyxB,EAAOzxB,GACVA,IACDA,EAAQizB,EAAexB,EAAQyB,IAE/BlzB,IACAoxB,EAAQpxB,EAAMoxB,OACTA,GAASpxB,EAAM7e,OAChBiwC,EAAQgI,EAAQp5B,EAAM7e,KAAKpC,iBAG5BqyC,EAAQA,EAAMvxC,GAASA,GAElCgzC,cAAe,SAAU3oC,GACrB,GAAI0uB,GAAS1uB,EAAE0uB,MACD,QAAVA,GAA6B,UAAVA,IACnB32B,KAAKw4B,OAAQ,IAGrB4hB,SAAU,SAAUr8B,GAEhB,MADAA,IAAS/d,KAAKwvC,YAAczxB,IACrBA,GAAQA,EAAMq8B,YAAa,GAEtC12B,IAAK,SAAU3F,EAAOngB,EAAOy8C,GAAxB,GACGzzC,GAAO5G,KACPw4B,EAAQ5xB,EAAK4xB,KACb5xB,GAAKwzC,SAASr8B,KACdngB,EAAQgJ,EAAKipC,OAAO9xB,EAAOngB,GACtBizC,EAAMjzC,EAAOgJ,EAAK6c,IAAI1F,MACvBnX,EAAK4xB,OAAQ,EACT0e,EAAiBjzC,GAAGyf,IAAIvb,KAAKvB,EAAMmX,EAAOngB,EAAOy8C,KAAe7hB,IAChE5xB,EAAK4xB,MAAQA,MAK7B8hB,OAAQ,SAAU9+C,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,EAAK8yC,KAAK37B,EAAOngB,EAEjBgJ,GAAKooC,UACLpoC,EAAKid,GAAKjd,EAAK6c,IAAI7c,EAAKooC,UAE5BpoC,EAAK4xB,OAAQ,GAEjB+hB,MAAO,WACH,MAAOv6C,MAAK6jB,KAAO7jB,KAAKg1C,cAGhCzF,EAAM94C,OAAS,SAAUkQ,EAAMvG,GACvBA,IAAYxJ,IACZwJ,EAAUuG,EACVA,EAAO4oC,EAEX,IAAIL,GAAkDhgC,EAAM6O,EAAO7e,EAAMtB,EAAOD,EAAK/F,EAAqB07C,EAA/F7sC,EAAQ/F,IAASw5C,aAAgB95C,GAAiDovC,KAA2B3rB,EAAKpd,EAAMod,GAAI22B,IAUvI,IATI32B,IACApd,EAAMuoC,QAAUnrB,GAEhBpd,EAAMod,UACCpd,GAAMod,GAEbA,IACApd,EAAMyzC,SAASr2B,GAAMpd,EAAMuuC,WAAa,IAER,mBAAhCzrC,GAASpB,KAAK1B,EAAM+oC,QAA8B,CAClD,IAAK7xC,EAAM,EAAG/F,EAAS6O,EAAM+oC,OAAO53C,OAAQ+F,EAAM/F,EAAQ+F,IACtDogB,EAAQtX,EAAM+oC,OAAO7xC,SACVogB,KAAUvd,GACjBgvC,EAAOzxB,MACAA,EAAMA,QACbyxB,EAAOzxB,EAAMA,OAASA,EAG9BtX,GAAM+oC,OAASA,EAEnB,IAAKtgC,IAAQzI,GAAM+oC,OACfzxB,EAAQtX,EAAM+oC,OAAOtgC,GACrBhQ,EAAO6e,EAAM7e,MAAQ,UACrBtB,EAAQ,KACR01C,EAAepkC,EACfA,QAAc6O,GAAMA,QAAUvd,GAASud,EAAMA,MAAQ7O,EAChD6O,EAAM08B,WACP78C,EAAQ6I,EAAMyzC,SAAS5G,IAAiBpkC,EAAOokC,EAAepkC,GAAQ6O,EAAM28B,eAAiB9jD,EAAYmnB,EAAM28B,aAAetD,EAAcl4C,EAAKpC,eAC5H,kBAAVc,IACP48C,EAAe1yC,KAAKoH,IAGxB9O,EAAQyjB,KAAO3U,IACfzI,EAAMuuC,WAAap3C,GAEvB6I,EAAMyzC,SAAS5G,IAAiBpkC,EAAOokC,EAAepkC,GAAQtR,EAC9DmgB,EAAMoxB,MAAQpxB,EAAMoxB,OAASgI,EAAQj4C,EAazC,OAXIs7C,GAAe5iD,OAAS,IACxB6O,EAAM0zC,cAAgBK,GAE1BtL,EAAQvoC,EAAKjG,OAAO+F,GACpByoC,EAAMz4C,OAAS,SAAU2J,GACrB,MAAOmvC,GAAM94C,OAAOy4C,EAAO9uC,IAE3BqG,EAAM+oC,SACNN,EAAMM,OAAS/oC,EAAM+oC,OACrBN,EAAMF,QAAUvoC,EAAMuoC,SAEnBE,GAEPmI,GACAtzC,SAAU,SAAUga,GAChB,MAAO7hB,IAAW6hB,GAASA,EAAQuF,GAAOvF,IAE9C48B,QAAS,SAAU58B,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,EAAEg4C,cACKh4C,EAAEg4C,cAAc/3C,GAEpBD,EAAIC,EAAI,EAAID,EAAIC,KAAS,IAGxC2rC,OAAQ,SAAUxwB,GACd,GAAI28B,GAAU38B,EAAK28B,SAAW36C,KAAK26C,QAAQ38B,EAAKD,MAChD,OAAgB,QAAZC,EAAKiR,IACE,SAAUrsB,EAAGC,GAChB,MAAO83C,GAAQ93C,EAAGD,GAAG,IAGtB+3C,GAEXE,QAAS,SAAUC,GACf,MAAO,UAAUl4C,EAAGC,GAChB,GAAiClF,GAAK/F,EAAlCoH,EAAS87C,EAAU,GAAGl4C,EAAGC,EAC7B,KAAKlF,EAAM,EAAG/F,EAASkjD,EAAUljD,OAAQ+F,EAAM/F,EAAQ+F,IACnDqB,EAASA,GAAU87C,EAAUn9C,GAAKiF,EAAGC,EAEzC,OAAO7D,MAIfs4C,EAAiB52C,MAAW22C,GAC5B0D,IAAK,SAAUh9B,GACX,GAAIha,GAAW/D,KAAK+D,SAASga,EAC7B,OAAO,UAAUnb,EAAGC,GAAb,GACCm4C,GAASj3C,EAASnB,GAClBq4C,EAASl3C,EAASlB,EAKtB,OAJIm4C,IAAUA,EAAO/+C,SAAWg/C,GAAUA,EAAOh/C,UAC7C++C,EAASA,EAAO/+C,UAChBg/C,EAASA,EAAOh/C,WAEhB++C,IAAWC,EACJr4C,EAAEs4C,WAAar4C,EAAEq4C,WAEd,MAAVF,KAGU,MAAVC,EACO,EAEPD,EAAOJ,cACAI,EAAOJ,cAAcK,GAEzBD,EAASC,EAAS,OAGjCE,KAAM,SAAUp9B,GACZ,GAAIha,GAAW/D,KAAK+D,SAASga,EAC7B,OAAO,UAAUnb,EAAGC,GAAb,GACCm4C,GAASj3C,EAASnB,GAClBq4C,EAASl3C,EAASlB,EAKtB,OAJIm4C,IAAUA,EAAO/+C,SAAWg/C,GAAUA,EAAOh/C,UAC7C++C,EAASA,EAAO/+C,UAChBg/C,EAASA,EAAOh/C,WAEhB++C,IAAWC,EACJr4C,EAAEs4C,WAAar4C,EAAEq4C,WAEd,MAAVF,EACO,EAEG,MAAVC,KAGAA,EAAOL,cACAK,EAAOL,cAAcI,GAEzBA,EAASC,EAAS,OAGjCzM,OAAQ,SAAUxwB,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,IAEPu4C,EAAY,WACZ,QAASvuC,GAAMpM,GAIX,MAHkB,gBAAPA,KACPA,EAAMA,EAAIzF,QAAQ,WAAY,KAE3B8O,KAAKkF,UAAUvO;CAE1B,QAASw+C,GAAOC,GACZ,MAAO,UAAUz4C,EAAGC,EAAGy4C,GAMnB,MALAz4C,IAAK,GACDy4C,IACA14C,EAAI,IAAMA,EAAI,wBACdC,EAAIA,EAAE/F,eAEHu+C,EAAKz4C,EAAGoG,EAAMnG,GAAIy4C,IAGjC,QAASrP,GAASsP,EAAI34C,EAAGC,EAAGy4C,GACxB,GAAS,MAALz4C,EAAW,CACX,SAAWA,KAAMrC,GAAQ,CACrB,GAAIqL,GAAOwK,GAAWhH,KAAKxM,EACvBgJ,GACAhJ,EAAI,GAAI7G,QAAM6P,EAAK,KACZyvC,GACPz4C,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,IAAM24C,EAAK,IAAM14C,EAEhC,QAAS24C,GAAe5sC,GAAxB,GACanS,GAAWg/C,EAAa3gD,EACzB+S,CADR,KAASpR,EAAK,KAAMg/C,GAAM,EAAO3gD,EAAI,EAAGA,EAAI8T,EAAQhX,SAAUkD,EAAG,CAE7D,GADI+S,EAAKe,EAAQvX,OAAOyD,GACpB2gD,EACAh/C,GAAM,KAAOoR,MACV,CAAA,GAAU,KAANA,EAAW,CAClB4tC,GAAM,CACN,UAEAh/C,GADa,KAANoR,EACD,KACO,KAANA,EACD,IACC,kCAAqC3P,QAAQ2P,IAAO,EACrD,KAAOA,EAEPA,EAEV4tC,GAAM,EAEV,MAAOh/C,GAAK,KAEhB,OACIuM,MAAO,SAAUpL,GACb,MAAIA,IAASA,EAAM3B,QACR,YAAc2B,EAAM3B,UAAY,IAEpC+M,EAAMpL,IAEjBmrB,GAAI,SAAUnmB,EAAGC,EAAGy4C,GAChB,MAAOrP,GAAS,KAAMrpC,EAAGC,EAAGy4C,IAEhChP,IAAK,SAAU1pC,EAAGC,EAAGy4C,GACjB,MAAOrP,GAAS,KAAMrpC,EAAGC,EAAGy4C,IAEhC/O,GAAI,SAAU3pC,EAAGC,EAAGy4C,GAChB,MAAOrP,GAAS,IAAKrpC,EAAGC,EAAGy4C,IAE/B9O,IAAK,SAAU5pC,EAAGC,EAAGy4C,GACjB,MAAOrP,GAAS,KAAMrpC,EAAGC,EAAGy4C,IAEhC7O,GAAI,SAAU7pC,EAAGC,EAAGy4C,GAChB,MAAOrP,GAAS,IAAKrpC,EAAGC,EAAGy4C,IAE/B5O,IAAK,SAAU9pC,EAAGC,EAAGy4C,GACjB,MAAOrP,GAAS,KAAMrpC,EAAGC,EAAGy4C,IAEhCzO,WAAYuO,EAAO,SAAUx4C,EAAGC,GAC5B,MAAOD,GAAI,gBAAkBC,EAAI,cAErC64C,iBAAkBN,EAAO,SAAUx4C,EAAGC,GAClC,MAAOD,GAAI,gBAAkBC,EAAI,eAErC+pC,SAAUwO,EAAO,SAAUx4C,EAAGC,GAC1B,GAAI84C,GAAI94C,EAAIA,EAAEjL,OAAS,EAAI,CAC3B,OAAOgL,GAAI,YAAcC,EAAI,KAAOD,EAAI,aAAe+4C,EAAI,WAE/DC,eAAgBR,EAAO,SAAUx4C,EAAGC,GAChC,GAAI84C,GAAI94C,EAAIA,EAAEjL,OAAS,EAAI,CAC3B,OAAOgL,GAAI,YAAcC,EAAI,KAAOD,EAAI,aAAe+4C,EAAI,UAE/D74C,SAAUs4C,EAAO,SAAUx4C,EAAGC,GAC1B,MAAOD,GAAI,YAAcC,EAAI,WAEjC8pC,eAAgByO,EAAO,SAAUx4C,EAAGC,GAChC,MAAOD,GAAI,YAAcC,EAAI,YAEjCgR,QAASunC,EAAO,SAAUx4C,EAAGC,GAEzB,MADAA,GAAIA,EAAEtL,UAAU,EAAGsL,EAAEjL,OAAS,GACvB4jD,EAAe34C,GAAK,SAAWD,EAAI,MAE9Ci5C,aAAcT,EAAO,SAAUx4C,EAAGC,GAE9B,MADAA,GAAIA,EAAEtL,UAAU,EAAGsL,EAAEjL,OAAS,GACvB,IAAM4jD,EAAe34C,GAAK,SAAWD,EAAI,MAEpDoqC,QAAS,SAAUpqC,GACf,MAAOA,GAAI,WAEfqqC,WAAY,SAAUrqC,GAClB,MAAOA,GAAI,WAEfkqC,OAAQ,SAAUlqC,GACd,MAAO,IAAMA,EAAI,aAErBmqC,UAAW,SAAUnqC,GACjB,MAAO,IAAMA,EAAI,iBAO7BsuC,EAAM4K,WAAa,SAAU14B,GACzB,GAGOzlB,GAAK/F,EAAQiM,EAAQJ,EAAmDsa,EAAOkuB,EAHlFmG,KAAkBlG,GACd6P,IAAK,OACLC,GAAI,QACsBC,KAAqBC,KAAyCx4C,EAAU0f,EAAW1f,OACrH,KAAK/F,EAAM,EAAG/F,EAAS8L,EAAQ9L,OAAQ+F,EAAM/F,EAAQ+F,IACjDkG,EAASH,EAAQ/F,GACjBogB,EAAQla,EAAOka,MACfkuB,EAAWpoC,EAAOooC,SACdpoC,EAAOH,SACPD,EAAOytC,EAAM4K,WAAWj4C,GACxBA,EAASJ,EAAK2f,WAAWjsB,QAAQ,gBAAiB,SAAUmB,EAAO6Z,GAE/D,MADAA,IAASA,EACF,QAAU+pC,EAAkBtkD,OAASua,GAAS,MACtDhb,QAAQ,gBAAiB,SAAUmB,EAAO6Z,GAEzC,MADAA,IAASA,EACF,QAAU8pC,EAAerkD,OAASua,GAAS,MAEtD+pC,EAAkBp0C,KAAKhB,MAAMo1C,EAAmBz4C,EAAK8zC,WACrD0E,EAAen0C,KAAKhB,MAAMm1C,EAAgBx4C,EAAK+rC,gBAEpCzxB,KAAU5X,IACjB1C,EAAO,OAASw4C,EAAerkD,OAAS,OACxCqkD,EAAen0C,KAAKiW,IAEpBta,EAAOvL,GAAMuL,KAAKsa,SAEXkuB,KAAa9lC,IACpBtC,EAAS,OAASq4C,EAAkBtkD,OAAS,KAAO6L,EAAO,KAAO8zC,EAAUvuC,MAAMnF,EAAOjG,OAAS,IAClGs+C,EAAkBp0C,KAAKmkC,IAEvBpoC,EAAS0zC,GAAWtL,GAAY,MAAMnvC,eAAe2G,EAAMI,EAAOjG,MAAOiG,EAAOymC,aAAe1zC,GAAYiN,EAAOymC,aAG1H8H,EAAYtqC,KAAKjE,EAErB,QACIuf,WAAY,IAAMgvB,EAAYl7C,KAAKg1C,EAAM9oB,EAAW8oB,QAAU,IAC9DsD,OAAQyM,EACR1E,UAAW2E,IAcf3K,GACA4K,KAAM,KACNC,OAAQ,KACRC,UAAW,KACXC,QAAS,KACTzL,MAAO,KACP0L,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,iBAChB/Q,OAAQ,SACRE,QAAS,UACTC,WAAY,cA2BhBiE,EAAMM,gBAAkBA,EAqDxBN,EAAMY,eAAiBA,EAiBvBZ,EAAMnqC,WACF+2C,QAAS,WACL,MAAO99C,MAAKxE,MAEhBuiD,MAAO,SAAU5rC,EAAOuB,GACpB,MAAO,IAAIw9B,GAAMlxC,KAAKxE,KAAKgL,MAAM2L,EAAOA,EAAQuB,KAEpDg6B,KAAM,SAAUh6B,GACZ,MAAO,IAAIw9B,GAAMlxC,KAAKxE,KAAKgL,MAAMkN,KAErCk6B,KAAM,SAAUl6B,GACZ,MAAO,IAAIw9B,GAAMlxC,KAAKxE,KAAKgL,MAAM,EAAGkN,KAExCohB,OAAQ,SAAU/wB,GACd,MAAO,IAAImtC,GAAMl+B,EAAIhT,KAAKxE,KAAMuI,KAEpCypC,MAAO,SAAUzpC,EAAUkrB,GACvB,GAAIjR,IAASiR,IAAKA,EAQlB,OAPIlrB,KACIA,EAAS42C,QACT38B,EAAK28B,QAAU52C,EAAS42C,QAExB38B,EAAKD,MAAQha,GAGd,GAAImtC,GAAMlxC,KAAKxE,KAAKgL,MAAM,GAAGwX,KAAKq5B,EAAS7I,OAAOxwB,MAE7DggC,QAAS,SAAUj6C,GACf,MAAO/D,MAAKwtC,MAAMzpC,EAAU,QAEhCk6C,kBAAmB,SAAUl6C,GACzB,MAAO/D,MAAKwtC,MAAMzpC,EAAU,SAEhCia,KAAM,SAAUD,EAAOkR,EAAKimB,GACxB,GAAIv3C,GAAK/F,EAAQy5C,EAAcF,EAAcpzB,EAAOkR,GAAM6rB,IAE1D,IADA5F,EAAWA,GAAYmC,EACnBhG,EAAYz5C,OAAQ,CACpB,IAAK+F,EAAM,EAAG/F,EAASy5C,EAAYz5C,OAAQ+F,EAAM/F,EAAQ+F,IACrDm9C,EAAUhzC,KAAKotC,EAAS1G,OAAO6C,EAAY1zC,IAE/C,OAAOqC,MAAKg+C,SAAUrD,QAASzF,EAAS2F,QAAQC,KAEpD,MAAO96C,OAEX6D,OAAQ,SAAUuuC,GACd,GAAIz0C,GAAKgO,EAAS/T,EAAQsmD,EAAUC,EAA6B3O,EAAQ+H,EAAwB1zC,EAAlDrI,EAAOwE,KAAKxE,KAAyBwD,IAEpF,IADAozC,EAAcZ,EAAgBY,IACzBA,GAA8C,IAA/BA,EAAY1uC,QAAQ9L,OACpC,MAAOoI,KAWX,KATAk+C,EAAWhN,EAAM4K,WAAW1J,GAC5B5C,EAAS0O,EAAS1O,OAClB+H,EAAY2G,EAAS3G,UACrB4G,EAAYt6C,EAAavB,SAAS,cAAe,UAAY47C,EAAS96B,aAClEosB,EAAO53C,QAAU2/C,EAAU3/C,UAC3BiM,EAAS,SAAU8M,GACf,MAAOwtC,GAAUxtC,EAAG6+B,EAAQ+H,KAG/B55C,EAAM,EAAG/F,EAAS4D,EAAK5D,OAAQ+F,EAAM/F,EAAQ+F,IAC9CgO,EAAUnQ,EAAKmC,GACXkG,EAAO8H,IACP3M,EAAO8I,KAAK6D,EAGpB,OAAO,IAAIulC,GAAMlyC,IAErBg1C,MAAO,SAAU3C,EAAa+M,GAC1B/M,EAAcgB,EAAehB,OAC7B+M,EAAUA,GAAWp+C,KAAKxE,IAC1B,IAAgD41C,GAA5CxqC,EAAO5G,KAAMhB,EAAS,GAAIkyC,GAAMtqC,EAAKpL,KAmBzC,OAlBI61C,GAAYz5C,OAAS,IACrBw5C,EAAaC,EAAY,GACzBryC,EAASA,EAAOq/C,QAAQjN,GAAYtc,OAAO,SAAUkf,GACjD,GAAIx4C,GAAO,GAAI01C,GAAMkN,GAASv6C,SACtBka,MAAOi2B,EAAMj2B,MACbkuB,SAAU,KACVruC,MAAOo2C,EAAMp2C,MACb0sC,YAAY,IAEpB,QACIvsB,MAAOi2B,EAAMj2B,MACbngB,MAAOo2C,EAAMp2C,MACb4oB,MAAO6qB,EAAYz5C,OAAS,EAAI,GAAIs5C,GAAM8C,EAAMxtB,OAAOwtB,MAAM3C,EAAY7qC,MAAM,GAAIhL,EAAKsiD,WAAWA,UAAY9J,EAAMxtB,MACrHktB,aAAcrC,EAAYz5C,OAAS,EACnC06C,WAAY92C,EAAKs3C,UAAU1B,EAAWkB,gBAI3CtzC,GAEXq/C,QAAS,SAAUjN,GACf,GAAIjqB,GAAciqB,KAAgBpxC,KAAKxE,KAAK5D,OACxC,MAAO,IAAIs5C,MAEf,IAAgIwB,GAIzH1Q,EAAcrkC,EAAK2mB,EAJtBvG,EAAQqzB,EAAWrzB,MAAOD,EAAS9d,KAAKs+C,iBAAiBvgC,EAAOqzB,EAAWniB,KAAO,OAAQzL,EAAWtrB,GAAMsrB,SAASzF,GAAcwgC,EAAa/6B,EAASC,IAAI3F,EAAO,GAAIC,GAAQi2B,GAC3Kj2B,MAAOA,EACPngB,MAAO2gD,EACP/3B,UACuBxnB,GAAUg1C,EACzC,KAAKr2C,EAAM,EAAG2mB,EAAMxG,EAAOlmB,OAAQ+F,EAAM2mB,EAAK3mB,IAC1C+0C,EAAO50B,EAAOngB,GACdqkC,EAAexe,EAASC,IAAIivB,EAAM30B,GAC7Bw0B,EAAmBgM,EAAYvc,KAChCuc,EAAavc,EACbgS,GACIj2B,MAAOA,EACPngB,MAAO2gD,EACP/3B,UAEJxnB,EAAO8I,KAAKksC,IAEhBA,EAAMxtB,MAAM1e,KAAK4qC,EAErB,OAAO,IAAIxB,GAAMlyC,IAErBs/C,iBAAkB,SAAUvgC,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,GAAKu9C,WAAav9C,CAG3B,KADAnC,EAAO,GAAI01C,GAAM11C,GAAMwiB,KAAKD,EAAOkR,EAAKqoB,GAAgBwG,UACnDngD,EAAM,EAAG/F,EAAS4D,EAAK5D,OAAQ+F,EAAM/F,EAAQ+F,UACvCnC,GAAKmC,GAAKu9C,UAErB,OAAO1/C,GAEX,MAAOwE,MAAKge,KAAKD,EAAOkR,GAAK6uB,WAEjChL,UAAW,SAAUR,GACjB,GAAI30C,GAAK2mB,EAAKtlB,KAAa2zC,IAC3B,IAAIL,GAAcA,EAAW16C,OACzB,IAAK+F,EAAM,EAAG2mB,EAAMtkB,KAAKxE,KAAK5D,OAAQ+F,EAAM2mB,EAAK3mB,IAC7C60C,EAAmBxzC,EAAQszC,EAAYtyC,KAAKxE,KAAKmC,GAAMA,EAAK2mB,EAAKquB,EAGzE,OAAO3zC,KAsBX+zC,GACAyL,IAAK,SAAU/L,EAAaC,EAAMlvB,GAC9B,GAAI5lB,GAAQ4lB,EAASC,IAAIivB,EAMzB,OALKM,GAASP,GAEHO,EAASp1C,KAChB60C,GAAe70C,GAFf60C,EAAc70C,EAIX60C,GAEX/+B,MAAO,SAAU++B,GACb,OAAQA,GAAe,GAAK,GAEhCgM,QAAS,SAAUhM,EAAaC,EAAMlvB,EAAUrR,EAAOva,EAAQ+6C,GAC3D,GAAI/0C,GAAQ4lB,EAASC,IAAIivB,EAezB,OAdIC,GAAMj/B,QAAU9c,IAChB+7C,EAAMj/B,MAAQ,GAEbs/B,EAASP,GAEHO,EAASp1C,KAChB60C,GAAe70C,GAFf60C,EAAc70C,EAIdo1C,EAASp1C,IACT+0C,EAAMj/B,QAENvB,GAASva,EAAS,GAAKo7C,EAASP,KAChCA,GAA4BE,EAAMj/B,OAE/B++B,GAEX/5C,IAAK,SAAU+5C,EAAaC,EAAMlvB,GAC9B,GAAI5lB,GAAQ4lB,EAASC,IAAIivB,EAOzB,OANKM,GAASP,IAAiBQ,EAAOR,KAClCA,EAAc70C,GAEd60C,EAAc70C,IAAUo1C,EAASp1C,IAAUq1C,EAAOr1C,MAClD60C,EAAc70C,GAEX60C,GAEXzgC,IAAK,SAAUygC,EAAaC,EAAMlvB,GAC9B,GAAI5lB,GAAQ4lB,EAASC,IAAIivB,EAOzB,OANKM,GAASP,IAAiBQ,EAAOR,KAClCA,EAAc70C,GAEd60C,EAAc70C,IAAUo1C,EAASp1C,IAAUq1C,EAAOr1C,MAClD60C,EAAc70C,GAEX60C,IAgBfvB,EAAMwN,QAAU,SAAUljD,EAAM4E,GAC5BA,EAAUA,KACV,IAAkIguC,GAA9HuQ,EAAQ,GAAIzN,GAAM11C,GAAOw4C,EAAQ5zC,EAAQ4zC,MAAOh2B,EAAOq0B,EAAe2B,OAAa99B,OAAOi7B,EAAc/wC,EAAQ4d,WAAqB4gC,EAAiBx+C,EAAQw+C,eAAgB/6C,EAASzD,EAAQyD,OAAQ6pC,EAAOttC,EAAQstC,KAAME,EAAOxtC,EAAQwtC,IAoB/O,OAnBI/pC,KACA86C,EAAQA,EAAM96C,OAAOA,GACjB+6C,IACAD,EAAQC,EAAeD,IAE3BvQ,EAAQuQ,EAAMb,UAAUlmD,QAExBomB,IACA2gC,EAAQA,EAAM3gC,KAAKA,GACfg2B,IACAx4C,EAAOmjD,EAAMb,YAGjBpQ,IAAS92C,GAAag3C,IAASh3C,IAC/B+nD,EAAQA,EAAMZ,MAAMrQ,EAAME,IAE1BoG,IACA2K,EAAQA,EAAM3K,MAAMA,EAAOx4C,KAG3B4yC,MAAOA,EACP5yC,KAAMmjD,EAAMb,YAGhBtG,EAAiB3gD,GAAM6J,QACvBC,KAAM,SAAUP,GACZJ,KAAKxE,KAAO4E,EAAQ5E,MAExBuyC,KAAM,SAAU3tC,GACZA,EAAQy+C,QAAQ7+C,KAAKxE,OAEzB+yC,OAAQ,SAAUnuC,GACdA,EAAQy+C,QAAQz+C,EAAQ5E,OAE5BgzC,OAAQ,SAAUpuC,GACdA,EAAQy+C,QAAQz+C,EAAQ5E,OAE5BsqB,QAAS,SAAU1lB,GACfA,EAAQy+C,QAAQz+C,EAAQ5E,SAG5Bi8C,GAAkB5gD,GAAM6J,QACxBC,KAAM,SAAUP,GACZ,GAAiBquC,GAAb7nC,EAAO5G,IACXI,GAAUwG,EAAKxG,QAAUM,MAAWkG,EAAKxG,QAASA,GAClD1C,GAAKi7C,GAAM,SAAUxmC,EAAOjT,SACbkB,GAAQlB,KAAUsB,KACzBJ,EAAQlB,IAAUikB,IAAK/iB,EAAQlB,OAGvC0H,EAAK4lB,MAAQpsB,EAAQosB,MAAQkrB,GAAMlJ,OAAOpuC,EAAQosB,QAC9ClF,KAAM1mB,GACNU,IAAKV,IAET6tC,EAAeruC,EAAQquC,aACnBvyC,GAAWkE,EAAQ0H,QACnBlB,EAAKkB,KAAO1H,EAAQ0H,MAEnBlB,EAAKkB,OACNlB,EAAKkB,KAAO8wC,IAEhBhyC,EAAK6nC,aAAevyC,GAAWuyC,GAAgBA,EAAe,SAAUruC,GACpE,GAAIpB,KAWJ,OAVAtB,IAAK0C,EAAS,SAAU0B,EAAQlE,GACxBkE,IAAU2sC,KACV3sC,EAAS2sC,EAAa3sC,GAClBgtC,GAAchtC,KACdlE,EAAQkE,EAAOlE,MAAMA,GACrBkE,EAASA,EAAO/C,MAGxBC,EAAO8C,GAAUlE,IAEdoB,IAGfoB,SAAWquC,aAAcmK,IACzBpK,OAAQ,SAAUpuC,GACd,MAAO43C,IAAKh4C,KAAKmhC,MAAM/gC,EAAS63C,MAEpClK,KAAM,SAAU3tC,GACZ,GAAiBy+C,GAASC,EAAO9/C,EAA7B4H,EAAO5G,KAA8BwsB,EAAQ5lB,EAAK4lB,KACtDpsB,GAAUwG,EAAKu6B,MAAM/gC,EAAS83C,IAC9B2G,EAAUz+C,EAAQy+C,SAAWj+C,GAC7Bk+C,EAAQ1+C,EAAQ0+C,OAASl+C,GACzB5B,EAASwtB,EAAMlF,KAAKlnB,EAAQ5E,MACxBwD,IAAWpI,EACXioD,EAAQ7/C,IAERoB,EAAQy+C,QAAU,SAAU7/C,GACxBwtB,EAAMlrB,IAAIlB,EAAQ5E,KAAMwD,GACxB6/C,EAAQ7/C,IAEZtI,EAAEshD,KAAK53C,KAGfmuC,OAAQ,SAAUnuC,GACd,MAAO43C,IAAKh4C,KAAKmhC,MAAM/gC,EAAS+3C,MAEpCryB,QAAS,SAAU1lB,GACf,MAAO43C,IAAKh4C,KAAKmhC,MAAM/gC,EAASg4C,MAEpCjX,MAAO,SAAU/gC,EAASlB,GACtBkB,EAAUA,KACV,IAAiB2+C,GAAbn4C,EAAO5G,KAAkBg/C,EAAYp4C,EAAKxG,QAAQlB,GAAO1D,EAAOU,GAAW8iD,EAAUxjD,MAAQwjD,EAAUxjD,KAAK4E,EAAQ5E,MAAQwjD,EAAUxjD,IAO1I,OANA4E,GAAUM,IAAO,KAAUs+C,EAAW5+C,GACtC2+C,EAAar+C,IAAO,KAAUlF,EAAM4E,EAAQ5E,MAC5C4E,EAAQ5E,KAAOoL,EAAK6nC,aAAasQ,EAAY7/C,GACzChD,GAAWkE,EAAQ+iB,OACnB/iB,EAAQ+iB,IAAM/iB,EAAQ+iB,IAAI47B,IAEvB3+C,KAGXs3C,GAAQ7gD,GAAM6J,QACdC,KAAM,WACFX,KAAKi/C,WAET39C,IAAK,SAAUvC,EAAKvD,GACZuD,IAAQnI,IACRoJ,KAAKi/C,OAAO9zC,GAAUpM,IAAQvD,IAGtC8rB,KAAM,SAAUvoB,GACZ,MAAOiB,MAAKi/C,OAAO9zC,GAAUpM,KAEjCmgD,MAAO,WACHl/C,KAAKi/C,WAET/2B,OAAQ,SAAUnpB,SACPiB,MAAKi/C,OAAO9zC,GAAUpM,OAGrC24C,GAAMlJ,OAAS,SAAUpuC,GACrB,GAAI++C,IACAC,SAAY,WACR,MAAO,IAAI1H,KAGnB,OAAI5I,IAAc1uC,IAAYlE,GAAWkE,EAAQknB,MACtClnB,EAEPA,KAAY,EACL,GAAIs3C,IAERyH,EAAM/+C,MA2Dbu3C,GAAa9gD,GAAM6J,QACnBC,KAAM,SAAU0+C,GAAV,GACe34C,GAAQ+c,EAAKyrB,EAAOvoC,EAUjC24C,EAGIC,EAA2CC,EAAiDpM,EAAyBD,EAAcsM,EAAuBpM,EAAiBoG,EAAyBxI,EAbxMrqC,EAAO5G,IACXq/C,GAASA,KACT,KAAK34C,IAAU24C,GACX57B,EAAM47B,EAAO34C,GACbE,EAAKF,SAAiB+c,KAAQjjB,GAAS8iB,GAAOG,GAAOA,CAEzD9c,GAAO04C,EAAO/P,WAAaC,EACvBT,GAAcloC,EAAKsoC,SACnBtoC,EAAKsoC,MAAQA,EAAQvoC,EAAKlQ,OAAOmQ,EAAKsoC,QAEtCoQ,EAAet5C,GAAMY,EAAKpL,KAAMoL,GACpCA,EAAK84C,oBAAsBJ,EACvB14C,EAAKsoC,QACDqQ,EAAiBv5C,GAAMY,EAAK+4C,OAAQ/4C,GAAO44C,EAAoBx5C,GAAMY,EAAKyoC,UAAWzoC,GAAOwsC,KAAyBD,KAAcsM,KAAuBpM,KAAiBoG,GAAkB,EACjMvK,EAAQtoC,EAAKsoC,MACTA,EAAMM,SACN9xC,GAAKwxC,EAAMM,OAAQ,SAAUzxB,EAAOngB,GAChC,GAAIgiD,EACJ3O,GAAYlzB,EACR+wB,GAAclxC,IAAUA,EAAMmgB,MAC9BkzB,EAAYrzC,EAAMmgB,YACJngB,KAAU4C,KACxBywC,EAAYrzC,GAEZkxC,GAAclxC,IAAUA,EAAMovB,OAC9B4yB,EAAWhiD,EAAMovB,MAErBysB,EAAkBA,GAAmBmG,GAAYA,IAAa7hC,GAASkzB,IAAclzB,EACrFo1B,EAAQp1B,GAASuF,GAAOs8B,GAAY3O,GACpCwO,EAAiB1hC,GAASuF,GAAOvF,GACjCq1B,EAAmBwM,GAAY3O,GAAalzB,EAC5Cs1B,EAAWt1B,GAAS6hC,GAAY3O,KAE/BoO,EAAOhQ,WAAaoK,IACrB7yC,EAAKyoC,UAAYsE,EAAe6L,EAAmBtQ,EAAOgE,EAAkBuM,EAAkBrM,EAAoBC,KAG1HzsC,EAAK84C,oBAAsBJ,EAC3B14C,EAAKpL,KAAOm4C,EAAe2L,EAAcpQ,EAAOsE,EAAgBL,EAASC,EAAoBC,GAC7FzsC,EAAK+4C,OAAShM,EAAe4L,EAAgBrQ,EAAOuE,EAAcN,EAASC,EAAoBC,KAGvGjE,OAAQ,SAAU5zC,GACd,MAAOA,GAAOA,EAAK4zC,OAAS,MAEhCD,MAAOyJ,GACPp9C,KAAMo9C,GACNxK,MAAO,SAAU5yC,GACb,MAAOA,GAAK5D,QAEhB+nD,OAAQ/G,GACRtG,WAAY,WACR,UAEJjD,UAAW,SAAU7zC,GACjB,MAAOA,MA6MXE,GAAa2I,GAAW3D,QACxBC,KAAM,SAAUP,GAAV,GACe8uC,GAAO1zC,EAgCZuD,EAhCR6H,EAAO5G,IACPI,KACA5E,EAAO4E,EAAQ5E,MAEnB4E,EAAUwG,EAAKxG,QAAUM,MAAWkG,EAAKxG,QAASA,GAClDwG,EAAKi5C,QACLj5C,EAAKk5C,aACLl5C,EAAK0vC,SACL1vC,EAAKm5C,iBACLn5C,EAAKo5C,WACLp5C,EAAKq5C,SACLr5C,EAAKs5C,eAAiB,EACtBt5C,EAAKu5C,cACLv5C,EAAKw5C,UAAYhgD,EAAQ+sC,SACzBvmC,EAAKy5C,MAAQjgD,EAAQgtC,OAAShtC,EAAQ+sC,SAAW,EAAIv2C,GACrDgQ,EAAK05C,MAAQnP,EAAc/wC,EAAQ4d,MACnCpX,EAAK25C,QAAU/O,EAAgBpxC,EAAQyD,QACvC+C,EAAK45C,OAASnO,EAAejyC,EAAQ4zC,OACrCptC,EAAK65C,WAAargD,EAAQ0yC,UAC1BlsC,EAAK85C,OAAStgD,EAAQguC,MACtBxnC,EAAK+5C,gCAAiC,EACtCt8C,GAAWJ,GAAGtD,KAAKwH,KAAKvB,GACxBA,EAAKg6C,UAAYhJ,GAAUpJ,OAAOpuC,EAAS5E,EAAMoL,GAC7C1K,GAAW0K,EAAKg6C,UAAU94C,OAC1BlB,EAAKg6C,UAAU94C,MACX+4C,WAAY76C,GAAMY,EAAKk6C,YAAal6C,GACpCm6C,WAAY/6C,GAAMY,EAAKo6C,YAAap6C,GACpCq6C,YAAaj7C,GAAMY,EAAKs6C,aAAct6C,KAGhB,MAA1BxG,EAAQ+gD,iBAC6B,gBAA1B/gD,GAAQ+gD,gBACXpiD,EAAMqB,EAAQ+gD,eAClBv6C,EAAKw6C,UACDC,QAAS,WACL,MAAOp7C,MAAKkpC,MAAMmS,aAAaD,QAAQtiD,KAE3CwiD,QAAS,SAAU7O,GACf4O,aAAaC,QAAQxiD,EAAKoM,GAAUvE,EAAK46C,OAAOnS,UAAUqD,QAIlE9rC,EAAKw6C,SAAWhhD,EAAQ+gD,gBAGhCv6C,EAAK46C,OAAS,GAAItpD,IAAMsD,KAAKk1C,QAAQtwC,EAAQi/C,OAAOngD,MAAQ,QAAQkB,EAAQi/C,QAC5EnQ,EAAQtoC,EAAK46C,OAAOtS,UACpBtoC,EAAK66C,2BACL76C,EAAK0vC,MAAQ1vC,EAAK86C,SAAS96C,EAAK0vC,OAChC1vC,EAAK+6C,SAAU,EACf/6C,EAAKQ,MACD,OACAmxC,GACA5Q,GACA6Q,GACAH,GACAK,GACAD,IACDr4C,IAEPA,SACI5E,KAAM,KACN6jD,QAAU/P,UAAWC,GACrB4R,eAAgB,KAChBS,eAAe,EACfC,cAAc,EACdC,iBAAiB,EACjBnN,gBAAgB,EAChBoN,kBAAkB,EAClBC,OAAO,GAEX7lD,MAAO,WACH,MAAO6D,OAEXiiD,OAAQ,SAAUrkD,GACd,MAAIA,KAAUhH,EACNoJ,KAAK2hD,SAAW/jD,IAChBoC,KAAK2hD,QAAU/jD,EACXA,GACOoC,KAAKkiD,OAGbxrD,EAAEoqC,WAAWM,UAAUjgC,UAEvBnB,KAAK2hD,SAGpBQ,YAAa,SAAUxP,GACnB,MAAmC,OAA/B3yC,KAAKI,QAAQ+gD,eACN,KAEPxO,IAAU/7C,EACHoJ,KAAKohD,SAASG,QAAQ5O,GAE1B3yC,KAAKohD,SAASC,eAEzBe,iBAAkB,WACd,GAAIpO,GAAQh0C,KAAKg0C,WACjB,OAAOh0C,MAAKI,QAAQu0C,gBAAkBX,EAAMp8C,QAEhDkpD,YAAa,SAAU9hD,GACnBgB,KAAKqiD,MAAMrjD,EAAQ,eAEvBgiD,YAAa,SAAUhiD,GACnBgB,KAAKqiD,MAAMrjD,EAAQ,eAEvBkiD,aAAc,SAAUliD,GACpBgB,KAAKqiD,MAAMrjD,EAAQ,gBAEvBqjD,MAAO,SAAUrjD,EAAQggD,GACrB,GAAIxjD,GAAOwE,KAAKsiD,UAAUtjD,EACrBxD,KACDA,EAAOwD,GAEXgB,KAAKg/C,GAAWxjD,IAEpB+mD,UAAW,SAAU/mD,EAAMkyC,GACvB,GAAIlyC,EAAM,CACN,GAAIwE,KAAKoiD,mBACL,MAAOnO,GAAcz4C,EAEzB,KAAKkyC,EACD,IAAK,GAAI/vC,GAAM,EAAGA,EAAMnC,EAAK5D,OAAQ+F,IACjCnC,EAAK24C,GAAGx2C,GAIpB,MAAOnC,IAEX5B,OAAQgH,GACR6iB,IAAK,SAAUI,GACX,GAAIlmB,GAAK/F,EAAQ4D,EAAOwE,KAAKuiD,UAAUviD,KAAKs2C,MAC5C,KAAK34C,EAAM,EAAG/F,EAAS4D,EAAK5D,OAAQ+F,EAAM/F,EAAQ+F,IAC9C,GAAInC,EAAKmC,GAAKkmB,IAAMA,EAChB,MAAOroB,GAAKmC,IAIxB6kD,SAAU,SAAU3+B,GAChB,GAAIlmB,GAAK/F,EAAQ4D,EAAOwE,KAAKuiD,UAAUviD,KAAKs2C,MAC5C,IAAK96C,EAGL,IAAKmC,EAAM,EAAG/F,EAAS4D,EAAK5D,OAAQ+F,EAAM/F,EAAQ+F,IAC9C,GAAInC,EAAKmC,GAAKm3C,KAAOjxB,EACjB,MAAOroB,GAAKmC,IAIxBO,QAAS,SAAUgxC,GACf,MAAO+F,GAAaj1C,KAAKs2C,MAAOpH,IAEpCiF,GAAI,SAAUhiC,GACV,MAAOnS,MAAKs2C,MAAMnC,GAAGhiC,IAEzB3W,KAAM,SAAUoC,GAAV,GAeeD,GAdbiJ,EAAO5G,IACX,IAAIpC,IAAUhH,EAWP,CACH,GAAIgQ,EAAK0vC,MACL,IAAS34C,EAAM,EAAGA,EAAMiJ,EAAK0vC,MAAM1+C,OAAQ+F,IACvCiJ,EAAK0vC,MAAMnC,GAAGx2C,EAGtB,OAAOiJ,GAAK0vC,MAhBZ1vC,EAAK66C,2BACL76C,EAAK0vC,MAAQt2C,KAAK0hD,SAAS9jD,GAC3BgJ,EAAKm5C,cAAgBniD,EAAM4I,MAAM,GACjCI,EAAK67C,aACL77C,EAAKo5C,WACLp5C,EAAKoB,QAAQ,SACbpB,EAAK87C,UAAU97C,EAAK0vC,OACpB1vC,EAAK85C,OAAS95C,EAAK0vC,MAAM1+C,OACzBgP,EAAKs5C,eAAiBt5C,EAAK85C,OAC3B95C,EAAK+7C,SAAS/7C,EAAK0vC,QAU3B3tB,KAAM,SAAU/qB,GACZ,MAAIA,KAAUhH,EACHoJ,KAAKigD,OAEZjgD,KAAKigD,MAAQjgD,KAAK4iD,aAAahlD,GAA/BoC,IAGR4iD,aAAc,SAAUpnD,GAAV,GAGNmtB,GAFA/hB,EAAO5G,IAMX,OALA00C,GAAsBl5C,EAAMoL,EAAK0vC,MAAO1vC,EAAKo5C,QAASp5C,EAAK46C,OAAOtS,OAASgI,EAAkBtwC,EAAKw7C,oBAC9Fz5B,EAAO,GAAIltB,GAAoBD,EAAMoL,EAAK46C,OAAOtS,OACrDvmB,EAAK/uB,OAAS,WACV,MAAOgN,GAAKhN,UAET+uB,GAEXvC,SAAU,WACN,GAAIu5B,GAAS3/C,KAAKg0C,WAClB,OAAI2L,GAAO/nD,OACAq8C,EAAcj0C,KAAKigD,OAEnBjgD,KAAKigD,OAGpB3+C,IAAK,SAAU4tC,GACX,MAAOlvC,MAAK6iD,OAAO7iD,KAAKs2C,MAAM1+C,OAAQs3C,IAE1C4T,gBAAiB,SAAU5T,GACvB,MAAIlvC,MAAKwhD,OAAOtS,MACL,GAAIlvC,MAAKwhD,OAAOtS,MAAMA,GAE7BA,YAAiBgI,GACVhI,EAEJ,GAAIgI,GAAiBhI,IAEhC2T,OAAQ,SAAU1wC,EAAO+8B,GAarB,MAZKA,KACDA,EAAQ/8B,EACRA,EAAQ,GAEN+8B,YAAiBK,KACnBL,EAAQlvC,KAAK8iD,gBAAgB5T,IAE7BlvC,KAAKoiD,mBACLpiD,KAAKs2C,MAAMluC,OAAO+J,EAAO,EAAGnS,KAAK+iD,kBAAkB7T,IAEnDlvC,KAAKs2C,MAAMluC,OAAO+J,EAAO,EAAG+8B,GAEzBA,GAEX8T,WAAY,SAAU7wC,EAAOqU,GAAjB,GAQJy8B,GACAC,EAGSvlD,EACD+0C,EACA1zC,EAEAmkD,CAfP38B,KACDA,EAAQrU,EACRA,EAAQ,GAEPpM,GAAQygB,KACTA,GAASA,IAETy8B,KACAC,EAAWljD,KAAKI,QAAQ8iD,SAC5BljD,KAAKI,QAAQ8iD,UAAW,CACxB,KACI,IAASvlD,EAAM,EAAGA,EAAM6oB,EAAM5uB,OAAQ+F,IAC9B+0C,EAAOlsB,EAAM7oB,GACbqB,EAASgB,KAAK6iD,OAAO1wC,EAAOugC,GAChCuQ,EAAOn7C,KAAK9I,GACRmkD,EAAWnkD,EAAO8K,SAClB9J,KAAKoiD,qBACLe,EAAWnjD,KAAK+iD,kBAAkBI,IAEtCnjD,KAAK+/C,cAAcj4C,KAAKq7C,GACxBhxC,IAEN,QACEnS,KAAKI,QAAQ8iD,SAAWA,EAExBD,EAAOrrD,QACPoI,KAAKgI,QAAQ,QACT9I,KAAM,SACNsnB,MAAOy8B,KAInBpC,WAAY,SAAUr6B,GAClBxmB,KAAKgjD,WAAWhjD,KAAKs2C,MAAM1+C,OAAQ4uB,IAEvCu6B,WAAY,SAAUv6B,GAAV,GAIJy8B,GACKtlD,EACD+0C,EACAxD,EACA9uB,CAHR,KAJKra,GAAQygB,KACTA,GAASA,IAETy8B,KACKtlD,EAAM,EAAGA,EAAM6oB,EAAM5uB,OAAQ+F,IAC9B+0C,EAAOlsB,EAAM7oB,GACbuxC,EAAQlvC,KAAK8iD,gBAAgBpQ,GAC7BtyB,EAASpgB,KAAKyjB,IAAIyrB,EAAMrrB,IACxBzD,GACA6iC,EAAOn7C,KAAKsY,GACZA,EAAOk6B,OAAO5H,GACdtyB,EAAOpY,QAAQ2/B,IACf3nC,KAAKojD,wBAAwBhjC,EAAQsyB,IAErC1yC,KAAK6gD,WAAWnO,EAGpBuQ,GAAOrrD,QACPoI,KAAKgI,QAAQ,QACT9I,KAAM,SACNsnB,MAAOy8B,KAInBhC,YAAa,SAAUz6B,GACnB,GAAIy8B,GAASjjD,KAAKqjD,aAAa78B,EAC3By8B,GAAOrrD,QACPoI,KAAKgI,QAAQ,QACT9I,KAAM,UACNsnB,MAAOy8B,KAInBI,aAAc,SAAU78B,GAAV,GAIN88B,GACAJ,EAGSvlD,EACD+0C,EACAxD,EACAqU,CAVPx9C,IAAQygB,KACTA,GAASA,IAET88B,KACAJ,EAAWljD,KAAKI,QAAQ8iD,SAC5BljD,KAAKI,QAAQ8iD,UAAW,CACxB,KACI,IAASvlD,EAAM,EAAGA,EAAM6oB,EAAM5uB,OAAQ+F,IAC9B+0C,EAAOlsB,EAAM7oB,GACbuxC,EAAQlvC,KAAK8iD,gBAAgBpQ,GAC7B6Q,GAAQ,EACZvjD,KAAKwjD,UAAUxjD,KAAKs2C,MAAO,SAAU9vB,GAAV,GACd7oB,GACD+0C,CADR,KAAS/0C,EAAM,EAAGA,EAAM6oB,EAAM5uB,OAAQ+F,IAElC,GADI+0C,EAAOlsB,EAAM2tB,GAAGx2C,GAChB+0C,EAAK7uB,KAAOqrB,EAAMrrB,GAAI,CACtBy/B,EAAUx7C,KAAK4qC,GACflsB,EAAMpe,OAAOzK,EAAK,GAClB4lD,GAAQ,CACR,UAIRA,IACAvjD,KAAKyjD,wBAAwBvU,GAC7BlvC,KAAKmgD,WAAWp0B,OAG1B,QACE/rB,KAAKI,QAAQ8iD,SAAWA,EAE5B,MAAOI,IAEXp7B,OAAQ,SAAUgnB,GACd,GAAIlwC,GAAQ4H,EAAO5G,KAAM0jD,EAAY98C,EAAKw7C,kBAY1C,OAXApiD,MAAKwjD,UAAU58C,EAAK0vC,MAAO,SAAU9vB,GAEjC,GADAxnB,EAAS61C,EAAYruB,EAAO0oB,GACxBlwC,GAAU0kD,EAIV,MAHK1kD,GAAOu7C,OAAUv7C,EAAOu7C,SACzB3zC,EAAKu5C,WAAWr4C,KAAK9I,IAElB,IAGfgB,KAAK2jD,uBAAuBzU,GAC5BlvC,KAAK4jD,sBACE1U,GAEXoU,UAAW,WACP,MAAOtjD,MAAKmgD,YAEhB0D,QAAS,WACL,GAAIlmD,GAAK/F,EAAQoH,KAAaxD,EAAOwE,KAAKuiD,UAAUviD,KAAKs2C,MACzD,KAAK34C,EAAM,EAAG/F,EAAS4D,EAAK5D,OAAQ+F,EAAM/F,EAAQ+F,IAC1CnC,EAAKmC,GAAK48C,OAAS/+C,EAAKmC,GAAK48C,SAC7Bv7C,EAAO8I,KAAKtM,EAAKmC,GAGzB,OAAOqB,IAEX8kD,QAAS,WACL,GAAInmD,GAAK/F,EAAQoH,KAAaxD,EAAOwE,KAAKuiD,UAAUviD,KAAKs2C,MACzD,KAAK34C,EAAM,EAAG/F,EAAS4D,EAAK5D,OAAQ+F,EAAM/F,EAAQ+F,IAC1CnC,EAAKmC,GAAK48C,QAAU/+C,EAAKmC,GAAK48C,SAAW/+C,EAAKmC,GAAK66B,OACnDx5B,EAAO8I,KAAKtM,EAAKmC,GAGzB,OAAOqB,IAEXkjD,KAAM,WAAA,GASM6B,GARJn9C,EAAO5G,KAAM6jD,KAAcC,KAAcR,EAAY18C,EAAKu5C,WAC1Dh/C,EAAUzK,EAAEoqC,WAAWM,UAAUjgC,SACrC,IAAIyF,EAAKq7C,SAAU,CACf,IAAKr7C,EAAK46C,OAAOtS,MACb,MAAO/tC,EAEX0iD,GAAUj9C,EAAKi9C,UACfC,EAAUl9C,EAAKk9C,UACXC,KACAn9C,EAAKxG,QAAQ4hD,OAASp7C,EAAKg6C,UAAU7pB,OACrCgtB,EAAWn9C,EAAKo9C,YAAYH,EAASC,EAASR,IAE9CS,EAASj8C,KAAKhB,MAAMi9C,EAAUn9C,EAAKq9C,MAAM,SAAUJ,IACnDE,EAASj8C,KAAKhB,MAAMi9C,EAAUn9C,EAAKq9C,MAAM,SAAUH,IACnDC,EAASj8C,KAAKhB,MAAMi9C,EAAUn9C,EAAKq9C,MAAM,UAAWX,KAExDniD,EAAUzK,EAAEwtD,KAAKp9C,MAAM,KAAMi9C,GAAUhjB,KAAK,WACxC,GAAIpjC,GAAK/F,CACT,KAAK+F,EAAM,EAAG/F,EAASmD,UAAUnD,OAAQ+F,EAAM/F,EAAQ+F,IAC/C5C,UAAU4C,IACViJ,EAAKu9C,QAAQppD,UAAU4C,GAG/BiJ,GAAK67C,YAAW,GAChB77C,EAAKw9C,SAAUztB,OAAQ,SACvB/vB,EAAKoB,QAAQqwC,UAGjBzxC,GAAK67C,YAAW,GAChB77C,EAAKw9C,SAAUztB,OAAQ,QAE3B,OAAOx1B,IAEXkjD,cAAe,SAAUnV,GACrB,GAAItoC,GAAO5G,IACPkvC,aAAiBh3C,IAAMsD,KAAK+zC,MAC5B3oC,EAAK09C,aAAapV,IAElBtoC,EAAKu5C,cACLv5C,EAAK66C,2BACL76C,EAAK0vC,MAAQ1vC,EAAK86C,SAAS96C,EAAKm5C,eAC5Bn5C,EAAKxG,QAAQyhD,eACbj7C,EAAK85C,OAAS95C,EAAKs5C,gBAEvBt5C,EAAKo5C,WACLp5C,EAAK87C,UAAU97C,EAAK0vC,OACpB1vC,EAAKw9C,UACLx9C,EAAK29C,+BAGbA,2BAA4B,WACxB,GAAI39C,GAAO5G,IACwB,OAA/B4G,EAAKxG,QAAQ+gD,gBACbv6C,EAAK48C,UAAU58C,EAAK0vC,MAAO,SAAU9vB,GAAV,GACd7oB,GACD+0C,CADR,KAAS/0C,EAAM,EAAGA,EAAM6oB,EAAM5uB,OAAQ+F,IAC9B+0C,EAAOlsB,EAAM2tB,GAAGx2C,GACE,UAAlB+0C,EAAK8R,WAA2C,UAAlB9R,EAAK8R,YACnC9R,EAAKla,OAAQ,MAMjCisB,WAAY,WACR,GAAI9mD,GAAK/F,EAAQ4D,EAAOwE,KAAKuiD,UAAUviD,KAAKs2C,MAC5C,IAAIt2C,KAAKmgD,WAAWvoD,OAChB,OAAO,CAEX,KAAK+F,EAAM,EAAG/F,EAAS4D,EAAK5D,OAAQ+F,EAAM/F,EAAQ+F,IAC9C,GAAInC,EAAKmC,GAAK48C,OAAS/+C,EAAKmC,GAAK48C,SAAW/+C,EAAKmC,GAAK66B,MAClD,OAAO,CAGf,QAAO,GAEX2rB,QAAS,SAAUnlD,GACf,GAAwKpH,GAApKgP,EAAO5G,KAAM0kD,EAAS1lD,EAAO0lD,OAAQC,EAAW3lD,EAAO2lD,SAAUhnD,EAAM,EAAGinD,EAAch+C,EAAKw7C,mBAAoBe,EAAWv8C,EAAKm5C,cAAe7gD,EAAOF,EAAOE,IAKlK,IAJA0H,EAAKoB,QAAQ0wC,IACTiM,SAAUA,EACVzlD,KAAMA,IAENylD,IAAax9B,GAAcw9B,GAAW,CAEtC,GADAA,EAAW/9C,EAAK46C,OAAOrS,MAAMwV,GACzB/9C,EAAKi+C,oBAAoBF,GACzB,MAEJA,GAAW/9C,EAAK46C,OAAOhmD,KAAKmpD,GACvB5+C,GAAQ4+C,KACTA,GAAYA,QAGhBA,GAAWjuD,EAAEsc,IAAI0xC,EAAQ,SAAUxV,GAC/B,MAAOA,GAAMplC,UAMrB,KAHa,YAAT5K,IACA0H,EAAKu5C,eAEJxiD,EAAM,EAAG/F,EAAS8sD,EAAO9sD,OAAQ+F,EAAM/F,EAAQ+F,IACnC,YAATuB,GACAwlD,EAAO/mD,GAAK28C,OAAOqK,EAAShnD,IACf,WAATuB,EACAikD,EAASr7C,KAAK88C,EAAch+C,EAAKm8C,kBAAkB2B,EAAO/mD,IAAQgnD,EAAShnD,IAC3D,WAATuB,GACP0H,EAAKw8C,wBAAwBsB,EAAO/mD,GAAMgnD,EAAShnD,KAGvDiJ,EAAK68C,wBAAwBiB,EAAO/mD,KAIhDylD,wBAAyB,SAAUlU,EAAOh9B,GACtClS,KAAK8kD,2BAA2B5V,EAAO,SAAU/8B,EAAOqU,GACpDtuB,GAAM0C,WAAW4rB,EAAMrU,GAAQD,MAGvC4yC,2BAA4B,SAAU5V,EAAOvuB,GACzC3gB,KAAK+kD,kBAAkB,SAAUv+B,GAC7B,GAAIrU,GAAQ4iC,EAAqBvuB,EAAO0oB,EACxC,IAAI/8B,KAEA,MADAwO,GAASxO,EAAOqU,IACT,KAInBi9B,wBAAyB,SAAUvU,GAC/BlvC,KAAK8kD,2BAA2B5V,EAAO,SAAU/8B,EAAOqU,GACpDA,EAAMpe,OAAO+J,EAAO,MAG5BmwC,UAAW,SAAU9mD,GACjB,GAAIuyC,GAAQ/tC,KAAKoiD,mBAAwCpiD,KAAKwhD,OAAO7B,OAA/B3/C,KAAKwhD,OAAOhmD,IAClD,OAAOuyC,GAAK5lC,KAAKnI,KAAKwhD,OAAQhmD,IAElCupD,kBAAmB,SAAUpkC,GACzB3gB,KAAKwjD,UAAUxjD,KAAK+/C,cAAep/B,IAEvC6iC,UAAW,SAAUhoD,EAAMmlB,GACnBnlB,GAAQA,EAAK5D,SACToI,KAAKoiD,mBACL/N,EAAe74C,EAAMmlB,GAErBA,EAASnlB,KAIrBwpD,kBAAmB,SAAU9V,GACzB,GAAIiU,GAAUxlD,EAAKgjB,EAAW,SAAU6F,GAEhC,GADA7oB,EAAMo3C,EAAqBvuB,EAAO0oB,GAC9BvxC,KAEA,MADAwlD,GAAW38B,EAAM7oB,IACV,EAInB,OADAqC,MAAK+kD,kBAAkBpkC,GAChBwiC,GAEXmB,aAAc,SAAUpV,GACpB,GAAIiU,GAAWnjD,KAAKglD,kBAAkB9V,EACtClvC,MAAKwjD,UAAUxjD,KAAKs2C,MAAO,SAAU9vB,GACjC,GAAI7oB,GAAMs3C,EAAazuB,EAAO0oB,EAC1BvxC,IAAO,KACHwlD,GAAcjU,EAAMqL,UAAW4I,EAASqB,UAMxCh+B,EAAMpe,OAAOzK,EAAK,IALlB6oB,EAAM7oB,GAAK28C,OAAO6I,GACQ,UAAtBA,EAASqB,YACTh+B,EAAM7oB,GAAK66B,OAAQ,QAQvCysB,QAAS,SAAUlB,EAAUvoD,GACzB,GAAIoL,GAAO5G,IACX4G,GAAKoB,QAAQwwC,IAAgBt5C,KAAM,WACnC0H,EAAKoB,QAAQywC,IACb7xC,EAAKg6C,UAAU7pB,OAAOr2B,IAClBm+C,QAAS,SAAU8F,EAAUzlD,GACzB,GAAIiC,GAAUzK,EAAEq2B,KAAKg3B,EAAU,SAAU9wB,GACrC,MAAOA,GAAE/zB,MAAQA,IAClB,EACCiC,IACAA,EAAQigC,SACJujB,SAAUA,EACVD,OAAQvjD,EAAQujD,OAChBxlD,KAAMA,KAIlB4/C,MAAO,SAAU6F,EAAUO,EAAQpG,GAC/B,IAAK,GAAInhD,GAAM,EAAGA,EAAMomD,EAASnsD,OAAQ+F,IACrComD,EAASpmD,GAAKwnD,OAAOR,EAEzB/9C,GAAKk4C,MAAM6F,EAAUO,EAAQpG,KAElCtjD,KAEPwoD,YAAa,SAAUH,EAASC,EAASR,GACrC,GAAI18C,GAAO5G,KAAM+jD,IA4BjB,OA3BIn9C,GAAKxG,QAAQ4hD,QACT6B,EAAQjsD,QACRmsD,EAASj8C,KAAKpR,EAAEoqC,SAAS,SAAUD,GAC/BA,EAAS3hC,KAAO,SAChB2hC,EAAS6jB,OAASb,KAGtBC,EAAQlsD,QACRmsD,EAASj8C,KAAKpR,EAAEoqC,SAAS,SAAUD,GAC/BA,EAAS3hC,KAAO,SAChB2hC,EAAS6jB,OAASZ,KAGtBR,EAAU1rD,QACVmsD,EAASj8C,KAAKpR,EAAEoqC,SAAS,SAAUD,GAC/BA,EAAS3hC,KAAO,UAChB2hC,EAAS6jB,OAASpB,KAG1B18C,EAAKq+C,QAAQlB,GACTvoD,MACIqoD,QAASj9C,EAAK46C,OAAOnS,UAAUvlC,EAAO+5C,IACtCC,QAASl9C,EAAK46C,OAAOnS,UAAUvlC,EAAOg6C,IACtCR,UAAW18C,EAAK46C,OAAOnS,UAAUvlC,EAAOw5C,QAI7CS,GAEXqB,SAAU,SAAU5pD,EAAMkpD,EAAQxlD,GAC9B,GAAI0H,GAAO5G,IACX,OAAOtJ,GAAEoqC,SAAS,SAAUD,GACxBj6B,EAAKoB,QAAQwwC,IAAgBt5C,KAAMA,IACnC0H,EAAKoB,QAAQywC,IACb7xC,EAAKg6C,UAAU1hD,GAAMiJ,KAAKvB,EAAKg6C,UAAWlgD,IACtCm+C,QAAS,SAAU8F,GACf9jB,EAASO,SACLujB,SAAUA,EACVD,OAAQA,EACRxlD,KAAMA,KAGd4/C,MAAO,SAAU6F,EAAUO,EAAQpG,GAC/Bje,EAASskB,OAAOR,GAChB/9C,EAAKk4C,MAAM6F,EAAUO,EAAQpG,KAElCtjD,MACJ2F,WAEP8iD,MAAO,SAAU17B,EAAQ/sB,GACrB,GAAiBmC,GAAK/F,EAAlBgP,EAAO5G,KAAmB+jD,KAAesB,EAAYz+C,EAAK46C,OAAOnS,UAAUvlC,EAAOtO,GACtF,IAAIoL,EAAKxG,QAAQ4hD,MACTxmD,EAAK5D,QACLmsD,EAASj8C,KAAKlB,EAAKw+C,UAAW5pD,MAAQkpD,OAAQW,IAAe7pD,EAAM+sB,QAGvE,KAAK5qB,EAAM,EAAG/F,EAAS4D,EAAK5D,OAAQ+F,EAAM/F,EAAQ+F,IAC9ComD,EAASj8C,KAAKlB,EAAKw+C,UAAW5pD,KAAM6pD,EAAU1nD,KAASnC,EAAKmC,IAAO4qB,GAG3E,OAAOw7B,IAEXhW,KAAM,SAAUvyC,GAAV,GACEoL,GAAO5G,KAAM6yB,EAASjsB,EAAK0+C,QAAQ9pD,GACnCqlC,EAAWnqC,EAAEoqC,UA8BjB,OA7BAl6B,GAAK2+C,cAAc1yB,EAAQ,WACvB,GAAI2yB,GAAc5+C,EAAKoB,QAAQwwC,IAAgBt5C,KAAM,QAChDsmD,IAuBD5+C,EAAK6+C,kBACL5kB,EAASO,QAAQokB,KAvBjB5+C,EAAKoB,QAAQywC,IACb7xC,EAAKo5C,WACLp5C,EAAKoB,QAAQ,SACTpB,EAAKq7C,SACLr7C,EAAKg6C,UAAU7S,MACXvyC,KAAMq3B,EACNgsB,QAAS,SAAUrjD,GACfoL,EAAKo5C,WACLp5C,EAAKi4C,QAAQrjD,EAAMq3B,GACnBgO,EAASO,WAEb0d,MAAO,WACH,GAAIx2B,GAAO9hB,GAAM2B,KAAKpN,UACtB6L,GAAKk4C,MAAMh4C,MAAMF,EAAM0hB,GACvBuY,EAASskB,OAAOr+C,MAAM+5B,EAAUvY,MAGF,MAA/B1hB,EAAKxG,QAAQ+gD,iBACpBv6C,EAAKi4C,QAAQj4C,EAAKu7C,cAAetvB,GACjCgO,EAASO,cAOdP,EAAS1/B,WAEpBukD,gBAAiB,SAAUlqD,GACvB,MAAOwE,MAAKwhD,OAAOlP,WAAW92C,IAElCqjD,QAAS,SAAUrjD,GAAV,GAoBGgrB,GACAm/B,EACAzW,EACAF,EACArxC,EAEIkmB,EAIA6uB,EACAC,EA9BR/rC,EAAO5G,KAAMI,EAAUwG,EAAKxG,OAKhC,IAJAwG,EAAKoB,QAAQ0wC,IACTiM,SAAUnpD,EACV0D,KAAM,SAEN0H,EAAKq7C,SAAU,CAEf,GADAzmD,EAAOoL,EAAK46C,OAAOrS,MAAM3zC,GACrBoL,EAAKi+C,oBAAoBrpD,GAEzB,MADAoL,GAAK6+C,kBACL,CAEJ7+C,GAAK85C,OAAS95C,EAAK46C,OAAOpT,MAAM5yC,GAC5BoL,EAAK65C,YAAcrgD,EAAQ2hD,mBAC3Bn7C,EAAKg/C,iBAAmBh/C,EAAK8+C,gBAAgBlqD,IAEjDA,EAAOoL,EAAK07C,UAAU9mD,GACtBoL,EAAKu5C,kBACF,CAOH,IANA3kD,EAAOoL,EAAK07C,UAAU9mD,GAClBgrB,KACAm/B,KACAzW,EAAQtoC,EAAK46C,OAAOtS,MACpBF,EAAUE,EAAQA,EAAMF,QAAU,KAEjCrxC,EAAM,EAAGA,EAAMqC,KAAKmgD,WAAWvoD,OAAQ+F,IACpCkmB,EAAK7jB,KAAKmgD,WAAWxiD,GAAKqxC,GAC9B2W,EAAQ9hC,GAAMA,CAElB,KAAKlmB,EAAM,EAAGA,EAAMnC,EAAK5D,OAAQ+F,IACzB+0C,EAAOl3C,EAAKmC,GACZg1C,EAAQD,EAAK8R,UACJ,WAAT7R,EACKgT,EAAQjT,EAAK1D,KACdhvC,KAAKmgD,WAAWr4C,KAAK9H,KAAK8iD,gBAAgBpQ,IAG9ClsB,EAAM1e,KAAK4qC,EAGnBl3C,GAAOgrB,EACP5f,EAAK85C,OAASllD,EAAK5D,OAEvBgP,EAAKs5C,eAAiBt5C,EAAK85C,OAC3B95C,EAAKm5C,cAAgBvkD,EAAKgL,MAAM,GAChCI,EAAK66C,2BACL76C,EAAK0vC,MAAQ1vC,EAAK86C,SAASlmD,GAC3BoL,EAAK29C,6BACL39C,EAAK67C,aACL77C,EAAK87C,UAAU97C,EAAK0vC,OACpB1vC,EAAK+7C,SAAS/7C,EAAK0vC,OACnB1vC,EAAK6+C,mBAEThE,yBAA0B,WACtB,GAAIzhD,KAAKs2C,OAASt2C,KAAK2gD,+BACnB,IAAK,GAAIhjD,GAAM,EAAGA,EAAMqC,KAAKs2C,MAAM1+C,OAAQ+F,IACnCqC,KAAKs2C,MAAM34C,GAAK/D,SAChBoG,KAAKs2C,MAAM34C,GAAK/D,OAASgH,KAKzC6hD,WAAY,SAAUoD,GAGlB,QAASr/B,GAAMhrB,GAAf,GAEamC,GACD8oB,EACAisB,EAHJC,IACJ,KAASh1C,EAAM,EAAGA,EAAMnC,EAAK5D,OAAQ+F,IAC7B8oB,EAAWjrB,EAAK24C,GAAGx2C,GACnB+0C,EAAOjsB,EAAS3c,SAChB6qC,GAAkBluB,EAASD,MAC3BksB,EAAKlsB,MAAQA,EAAMC,EAASD,QAE5BksB,EAAKoC,IAAMruB,EAASquB,IAChB5F,IACIzoB,EAAS8zB,QACT7H,EAAK8R,UAAY,SACV/9B,EAAS+R,QAChBka,EAAK8R,UAAY,YAI7B7R,EAAM7qC,KAAK4qC,EAEf,OAAOC,GAtBH,GAyBAA,GACA2Q,EACK3lD,EACD+0C,EA3BRiC,EAAiB30C,KAAKoiD,mBACtBlT,EAAQlvC,KAAKwhD,OAAOtS,KAsBxB,IAAmC,MAA/BlvC,KAAKI,QAAQ+gD,eAAwB,CAGrC,IAFIxO,EAAQnsB,EAAMxmB,KAAKs2C,OACnBgN,KACK3lD,EAAM,EAAGA,EAAMqC,KAAKmgD,WAAWvoD,OAAQ+F,IACxC+0C,EAAO1yC,KAAKmgD,WAAWxiD,GAAKmM,SAChC4oC,EAAK8R,UAAY,UACjBlB,EAAUx7C,KAAK4qC,EAEnB1yC,MAAKmiD,YAAYxP,EAAMz8B,OAAOotC,IAC1BuC,IACA7lD,KAAK+/C,cAAgB//C,KAAKsiD,UAAU3P,MAIhD+P,UAAW,SAAUlnD,GACjB,GAAIoL,GAAO5G,KAAMiP,EAAQrI,EAAKk/C,OAAS,EAAGnuD,EAAMsX,EAAQrI,EAAK27C,UAAU/mD,GAAM,GAAM5D,MACnFgP,GAAKo5C,QAAQl4C,MACTmH,MAAOA,EACPtX,IAAKA,EACL6D,KAAMA,EACNuqD,WAAW,GAAI/pD,OAAOC,YAE1B2K,EAAKo5C,QAAQhiC,KAAK,SAAUiV,EAAG5hB,GAC3B,MAAO4hB,GAAEhkB,MAAQoC,EAAEpC,SAG3B6vC,MAAO,SAAUkH,EAAKd,EAAQe,GAC1BjmD,KAAKylD,kBACLzlD,KAAKgI,QAAQ0wC,OACb14C,KAAKgI,QAAQuwC,IACTyN,IAAKA,EACLd,OAAQA,EACRe,YAAaA,KAGrBX,QAAS,SAAU9pD,GACf,GAAIoL,GAAO5G,KAAMI,EAAUM,IACnBktC,KAAMhnC,EAAKgnC,OACXF,KAAM9mC,EAAK8mC,OACXN,KAAMxmC,EAAKwmC,OACXD,SAAUvmC,EAAKumC,WACfnvB,KAAMpX,EAAK05C,MACXz8C,OAAQ+C,EAAK25C,QACbvM,MAAOptC,EAAK45C,OACZ1N,UAAWlsC,EAAK65C,YACjBjlD,EA2BP,OA1BKoL,GAAKxG,QAAQyhD,qBACPzhD,GAAQwtC,WACRxtC,GAAQstC,WACRttC,GAAQgtC,WACRhtC,GAAQ+sC,UAEdvmC,EAAKxG,QAAQu0C,eAEP/tC,EAAK46C,OAAOtS,OAAS9uC,EAAQ4zC,QACpC5zC,EAAQ4zC,MAAQqB,EAAwBj1C,EAAQ4zC,MAAOptC,EAAK46C,OAAOtS,cAF5D9uC,GAAQ4zC,MAIdptC,EAAKxG,QAAQ0hD,gBAEPl7C,EAAK46C,OAAOtS,OAAS9uC,EAAQyD,SACpCzD,EAAQyD,OAASuxC,EAA8Bh1C,EAAQyD,OAAQ+C,EAAK46C,OAAOtS,cAFpE9uC,GAAQyD,OAId+C,EAAKxG,QAAQwhD,cAEPh7C,EAAK46C,OAAOtS,OAAS9uC,EAAQ4d,OACpC5d,EAAQ4d,KAAOq3B,EAAwBj1C,EAAQ4d,KAAMpX,EAAK46C,OAAOtS,cAF1D9uC,GAAQ4d,KAIdpX,EAAKxG,QAAQ2hD,iBAEPn7C,EAAK46C,OAAOtS,OAAS9uC,EAAQ0yC,YACpC1yC,EAAQ0yC,UAAYuC,EAAwBj1C,EAAQ0yC,UAAWlsC,EAAK46C,OAAOtS,cAFpE9uC,GAAQ0yC,UAIZ1yC,GAEXmlD,cAAe,SAAUnlD,EAASugB,GAC9B,GAAI/Z,GAAO5G,IACN4G,GAAKs/C,mBAKNt/C,EAAKu/C,UACDxlC,SAAU3a,GAAM2a,EAAU/Z,GAC1BxG,QAASA,IANbwG,EAAKs/C,oBAAqB,EAC1Bt/C,EAAKu/C,SAAWvvD,EAChB+pB,MAQR8kC,gBAAiB,WACb,GAAI7+C,GAAO5G,IACX4G,GAAKs/C,oBAAqB,EACtBt/C,EAAKu/C,UACLv/C,EAAK2+C,cAAc3+C,EAAKu/C,SAAS/lD,QAASwG,EAAKu/C,SAASxlC,WAGhEkkC,oBAAqB,SAAUF,GAC3B,GAAI3kD,KAAKwhD,OAAOpS,OAAQ,CACpB,GAAIA,GAASpvC,KAAKwhD,OAAOpS,OAAOuV,EAChC,IAAIvV,EAOA,MANApvC,MAAKgI,QAAQuwC,IACTyN,IAAK,KACLd,OAAQ,cACRe,YAAa,eACb7W,OAAQA,KAEL,EAGf,OAAO,GAEXgX,YAAa,SAAU5qD,GACnB,GAAI0zC,GAAQlvC,KAAKwhD,OAAOtS,KACxB,UAAIA,IAAS1zC,EAAK5D,WACL4D,EAAK,YAAc0zC,KAIpCwS,SAAU,SAAUlmD,GAAV,GAUE6qD,GATJz/C,EAAO5G,KAAMkvC,EAAQtoC,EAAK46C,OAAOtS,KAuBrC,OAtBAtoC,GAAK+5C,gCAAiC,EAClCnlD,YAAgBD,KAChBqL,EAAK+5C,gCAAiC,EAClC/5C,EAAKw/C,YAAY5qD,KACjBA,EAAK0D,KAAO0H,EAAK46C,OAAOtS,MACxB1zC,EAAKs9C,QAAQt9C,EAAMA,MAGnB6qD,EAAYz/C,EAAKumC,aAAevmC,EAAKxG,QAAQyhD,aAAepmD,EAAsBF,GACtFC,EAAO,GAAI6qD,GAAU7qD,EAAMoL,EAAK46C,OAAOtS,OACvC1zC,EAAK5B,OAAS,WACV,MAAOgN,GAAKhN,WAGhBgN,EAAKw7C,oBACLhO,EAAe54C,EAAM0zC,GAErBtoC,EAAK0/C,gBAAkB1/C,EAAK0vC,OAAS1vC,EAAK0vC,gBAAiB/6C,IAC3DqL,EAAK0vC,MAAMzuC,OAAO8/B,GAAQ/gC,EAAK0/C,gBAE/B1/C,EAAK0/C,eAAiBtgD,GAAMY,EAAKw9C,QAASx9C,GAEvCpL,EAAK4L,KAAKugC,GAAQ/gC,EAAK0/C,iBAElCC,sBAAuB,SAAU5vB,EAAQnQ,GAAlB,GACf5f,GAAO5G,KACPouC,EAAQ/7B,SAASzL,EAAK85C,OAAQ,GAC7B1N,GAASpsC,EAAK85C,UACftS,EAAQ/7B,SAASzL,EAAKs5C,eAAgB,KAE3B,QAAXvpB,EACAyX,GAAS5nB,EAAM5uB,OACG,WAAX++B,EACPyX,GAAS5nB,EAAM5uB,OACG,eAAX++B,GAAsC,SAAXA,GAAsB/vB,EAAKxG,QAAQyhD,aAEnD,SAAXlrB,IACPyX,EAAQxnC,EAAKs5C,eAAiB7tC,SAASzL,EAAK85C,OAAQ,KAFpDtS,EAAQxnC,EAAKs5C,eAIjBt5C,EAAK85C,OAAStS,GAElBgW,QAAS,SAAUn8C,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,GAAK48C,OAAUtyC,EAAEue,MAAM7oB,GAAK48C,SACrC3zC,EAAKu5C,WAAWr4C,KAAKG,EAAEue,MAAM7oB,KAIrCiJ,EAAKxG,QAAQ8iD,UAAwB,QAAXvsB,GAA+B,WAAXA,GAAkC,eAAXA,GAUrE/vB,EAAK2/C,sBAAsB5vB,EAAQ1uB,EAAIA,EAAEue,UACzC5f,EAAK+7C,SAAS/7C,EAAK0vC,MAAOruC,KAVtBR,EAAU,SAAU6gB,GACA,SAAhBA,EAAKqO,SACL/vB,EAAKiB,OAAO,SAAUJ,GACtBb,EAAK2/C,sBAAsB5vB,EAAQ1uB,EAAEue,SAG7C5f,EAAKxP,MAAM,SAAUqQ,GACrBb,EAAKs7C,SAMbsE,qBAAsB,SAAUhrD,EAAM4E,GAClCA,EAAUA,KACV,IAAIu+C,GAAQ,GAAIzN,GAAM11C,GAAO82C,EAAalyC,EAAQ0yC,UAAWjvC,EAASzD,EAAQyD,MAI9E,OAHIA,KACA86C,EAAQA,EAAM96C,OAAOA,IAElB86C,EAAM7L,UAAUR,IAE3BqQ,SAAU,SAAUnnD,EAAMyM,GACtB,GAA+BjJ,GAA3B4H,EAAO5G,KAAMI,IACbwG,GAAKxG,QAAQyhD,gBAAiB,IAC9BzhD,EAAQstC,KAAO9mC,EAAKk/C,MACpB1lD,EAAQwtC,KAAOhnC,EAAK6/C,OAAS7/C,EAAKw5C,UAC9BhgD,EAAQstC,OAAS92C,GAAagQ,EAAKy5C,QAAUzpD,GAAagQ,EAAKw5C,YAAcxpD,IAC7EwJ,EAAQstC,MAAQ9mC,EAAKy5C,MAAQ,GAAKz5C,EAAKw5C,YAG3Cx5C,EAAKxG,QAAQwhD,iBAAkB,IAC/BxhD,EAAQ4d,KAAOpX,EAAK05C,OAEpB15C,EAAKxG,QAAQ0hD,mBAAoB,IACjC1hD,EAAQyD,OAAS+C,EAAK25C,SAEtB35C,EAAKxG,QAAQu0C,kBAAmB,IAChCv0C,EAAQ4zC,MAAQptC,EAAK45C,QAErB55C,EAAKxG,QAAQ2hD,oBAAqB,IAClC3hD,EAAQ0yC,UAAYlsC,EAAK65C,WACzB75C,EAAKg/C,iBAAmBh/C,EAAK4/C,qBAAqBhrD,EAAM4E,IAE5DpB,EAAS4H,EAAK8/C,cAAclrD,EAAM4E,GAClCwG,EAAK+hB,KAAK3pB,EAAOxD,MACbwD,EAAOovC,QAAUx3C,GAAcgQ,EAAKxG,QAAQ0hD,kBAC5Cl7C,EAAK85C,OAAS1hD,EAAOovC,OAEzBnmC,EAAIA,MACJA,EAAEue,MAAQve,EAAEue,OAAS5f,EAAKq5C,MAC1Br5C,EAAKoB,QAAQ2/B,GAAQ1/B,IAEzBy+C,cAAe,SAAUlrD,EAAM4E,GAC3B,MAAO8wC,GAAMwN,QAAQljD,EAAM4E,IAE/BumD,YAAa,SAAUvmD,GACnB,GAAIwG,GAAO5G,IA+BX,OA9BII,KAAYxJ,IACZgQ,EAAKw5C,UAAYhgD,EAAQ+sC,SACzBvmC,EAAKy5C,MAAQjgD,EAAQgtC,KACrBxmC,EAAK05C,MAAQlgD,EAAQ4d,KACrBpX,EAAK25C,QAAUngD,EAAQyD,OACvB+C,EAAK45C,OAASpgD,EAAQ4zC,MACtBptC,EAAK65C,WAAargD,EAAQ0yC,UAC1BlsC,EAAKk/C,MAAQl/C,EAAKggD,mBAAqBxmD,EAAQstC,KAC/C9mC,EAAK6/C,MAAQrmD,EAAQwtC,KACjBhnC,EAAKk/C,QAAUlvD,IACfgQ,EAAKk/C,MAAQl/C,EAAKggD,mBAAqBhgD,EAAK8mC,OAC5CttC,EAAQstC,KAAO9mC,EAAK8mC,QAEpB9mC,EAAK6/C,QAAU7vD,GAAagQ,EAAKw5C,YAAcxpD,IAC/CgQ,EAAK6/C,MAAQ7/C,EAAKw5C,UAClBhgD,EAAQwtC,KAAOhnC,EAAK6/C,OAEpBrmD,EAAQ4d,OACRpX,EAAK05C,MAAQlgD,EAAQ4d,KAAOmzB,EAAc/wC,EAAQ4d,OAElD5d,EAAQyD,SACR+C,EAAK25C,QAAUngD,EAAQyD,OAAS2tC,EAAgBpxC,EAAQyD,SAExDzD,EAAQ4zC,QACRptC,EAAK45C,OAASpgD,EAAQ4zC,MAAQ3B,EAAejyC,EAAQ4zC,QAErD5zC,EAAQ0yC,YACRlsC,EAAK65C,WAAargD,EAAQ0yC,UAAYX,EAAmB/xC,EAAQ0yC,aAGlE1yC,GAEXu+C,MAAO,SAAUv+C,GAAV,GACCpB,GAKAwmD,EAJAqB,EAAS7mD,KAAKI,QAAQwhD,eAAiB5hD,KAAKI,QAAQyhD,cAAgB7hD,KAAKI,QAAQ0hD,iBAAmB9hD,KAAKI,QAAQu0C,gBAAkB30C,KAAKI,QAAQ2hD,gBACpJ,OAAI8E,KAAW7mD,KAAKs2C,QAAU1/C,GAAmC,IAAtBoJ,KAAKs2C,MAAM1+C,UAAkBoI,KAAKmgD,WAAWvoD,OAC7EoI,KAAK+tC,KAAK/tC,KAAK2mD,YAAYvmD,KAElColD,EAAcxlD,KAAKgI,QAAQwwC,IAAgBt5C,KAAM,SAChDsmD,IACDxlD,KAAKgI,QAAQywC,IACbz5C,EAASgB,KAAK0mD,cAAc1mD,KAAKs2C,MAAOt2C,KAAK2mD,YAAYvmD,IACpDJ,KAAKI,QAAQ0hD,kBAEV9hD,KAAK0gD,OADL1hD,EAAOovC,QAAUx3C,EACHoI,EAAOovC,MAEPpuC,KAAKs2C,MAAM1+C,QAGjCoI,KAAK4lD,iBAAmB5lD,KAAKwmD,qBAAqBxmD,KAAKs2C,MAAOl2C,GAC9DJ,KAAK2oB,KAAK3pB,EAAOxD,MACjBwE,KAAKgI,QAAQ0wC,IAAcx5C,KAAM,SACjCc,KAAKgI,QAAQ2/B,IAAUnhB,MAAOxnB,EAAOxD,QAElC9E,EAAEoqC,WAAWM,QAAQokB,GAAarkD,YAE7C2lD,MAAO,SAAUnmC,GAAV,GACC/Z,GAAO5G,KACPiE,EAAK,SAAUuhD,GACXA,KAAgB,GAAQtpD,GAAWykB,IACnCA,EAASxY,KAAKvB,GAGtB,OAAO5G,MAAK+mD,SAAShmB,KAAK98B,IAE9B8iD,OAAQ,SAAU3mD,GACd,GAAIwG,GAAO5G,IACX,OAAO4G,GAAK+3C,MAAMj+C,OACd0sC,KAAMxmC,EAAKwmC,OACXD,SAAUvmC,EAAKumC,WACfnvB,KAAMpX,EAAKoX,OACXna,OAAQ+C,EAAK/C,SACbmwC,MAAOptC,EAAKotC,QACZlB,UAAWlsC,EAAKksC,aACjB1yC,KAEP4mD,KAAM,SAAU5mD,GACZ,GAAIwG,GAAO5G,KAAMotC,EAAOxmC,EAAKwmC,OAAQgB,EAAQxnC,EAAKwnC,OAElD,IADAhuC,EAAUA,MACLgtC,KAAQgB,GAAShB,EAAO,EAAIxmC,EAAKqgD,cAOtC,MAJArgD,GAAKk/C,MAAQl/C,EAAKggD,mBAAqBxZ,EAAOxmC,EAAKgnC,OACnDR,GAAQ,EACRhtC,EAAQgtC,KAAOA,EACfxmC,EAAKmgD,OAAO3mD,GACLgtC,GAEXpD,KAAM,SAAU5pC,GACZ,GAAIwG,GAAO5G,KAAMotC,EAAOxmC,EAAKwmC,MAE7B,IADAhtC,EAAUA,MACLgtC,GAAiB,IAATA,EAOb,MAJAxmC,GAAKk/C,MAAQl/C,EAAKggD,mBAAqBhgD,EAAKk/C,MAAQl/C,EAAKgnC,OACzDR,GAAQ,EACRhtC,EAAQgtC,KAAOA,EACfxmC,EAAKmgD,OAAO3mD,GACLgtC,GAEXA,KAAM,SAAUrO,GACZ,GAAiB2O,GAAb9mC,EAAO5G,IACX,OAAI++B,KAAQnoC,GACRmoC,EAAMtmC,GAAKC,IAAID,GAAKuZ,IAAIvZ,GAAKC,IAAIqmC,EAAK,GAAIn4B,EAAKqgD,cAAe,GAC9DrgD,EAAKmgD,QAAS3Z,KAAMrO,IACpB,IAEJ2O,EAAO9mC,EAAK8mC,OACLA,IAAS92C,EAAY6B,GAAKgX,OAAOi+B,GAAQ,IAAM9mC,EAAKgnC,QAAU,IAAM,EAAIh3C,IAEnFu2C,SAAU,SAAUpO,GAChB,GAAIn4B,GAAO5G,IACX,OAAI++B,KAAQnoC,GACRgQ,EAAKmgD,QACD5Z,SAAUpO,EACVqO,KAAM,IAEV,GAEGxmC,EAAKgnC,QAEhB5vB,KAAM,SAAU+gB,GACZ,GAAIn4B,GAAO5G,IACX,OAAI++B,KAAQnoC,GACRgQ,EAAKmgD,QAAS/oC,KAAM+gB,IACpB,GAEGn4B,EAAK05C,OAEhBz8C,OAAQ,SAAUk7B,GACd,GAAIn4B,GAAO5G,IACX,OAAI++B,KAAQnoC,EACDgQ,EAAK25C,SAEhB35C,EAAKoB,QAAQ,SACbpB,EAAKmgD,QACDljD,OAAQk7B,EACRqO,KAAM,IAHVxmC,IAMJotC,MAAO,SAAUjV,GACb,GAAIn4B,GAAO5G,IACX,OAAI++B,KAAQnoC,GACRgQ,EAAKmgD,QAAS/S,MAAOjV,IACrB,GAEGn4B,EAAK45C,QAEhBpS,MAAO,WACH,MAAO/7B,UAASrS,KAAK0gD,QAAU,EAAG,KAEtC5N,UAAW,SAAU/T,GACjB,GAAIn4B,GAAO5G,IACX,OAAI++B,KAAQnoC,GACRgQ,EAAKmgD,QAASjU,UAAW/T,IACzB,GAEGn4B,EAAK65C,YAEhBnO,WAAY,WACR,GAAItzC,GAASgB,KAAK4lD,gBAIlB,OAHIz+B,IAAcnoB,KACdA,EAASgB,KAAKknD,iBAAiBlnD,KAAK8yC,cAEjC9zC,GAEXkoD,iBAAkB,SAAU5U,GAAV,GAGNQ,GAIKn1C,EANTqB,IACJ,KAAKmoB,GAAcmrB,GAKf,IAJIQ,KACC/sC,GAAQusC,KACTA,GAAcA,IAET30C,EAAM,EAAGA,EAAM20C,EAAW16C,OAAQ+F,IACvCm1C,EAAUR,EAAW30C,GAAKm1C,WAAa,EACvC9zC,EAAOszC,EAAW30C,GAAKogB,OAAS+0B,CAGxC,OAAO9zC,IAEX+jD,kBAAmB,SAAU7T,GACzB,GAA2Bt1C,GAAQo6C,EAAOr2C,EAAK/F,EAA3C+nD,EAAS3/C,KAAKg0C,OAClB,KAAKr2C,EAAMgiD,EAAO/nD,OAAS,EAAGA,EAAS,EAAG+F,GAAO/F,EAAQ+F,IACrDq2C,EAAQ2L,EAAOhiD,GACf/D,GACIgE,MAAOsxC,EAAMzrB,IAAIuwB,EAAMj2B,OACvBA,MAAOi2B,EAAMj2B,MACbyI,MAAO5sB,GAAUA,IAAWs1C,GAC5BwE,eAAgB95C,EAChB04C,WAAYtyC,KAAKknD,iBAAiBlT,EAAM1B,YAGhD,OAAO14C,IAEXqtD,WAAY,WACR,GAAIrgD,GAAO5G,KAAMmtC,EAAWvmC,EAAKumC,YAAcvmC,EAAKwnC,OACpD,OAAO31C,IAAK0uD,MAAMvgD,EAAKwnC,SAAW,GAAKjB,IAE3Cia,QAAS,SAAU1Z,EAAME,GACrB,GAAIhnC,GAAO5G,KAAMrI,EAAMc,GAAKuZ,IAAI07B,EAAOE,EAAMhnC,EAAKwnC,QAClD,QAAKxnC,EAAKxG,QAAQyhD,cAAgBj7C,EAAK0vC,MAAM1+C,OAAS,GAG/CgP,EAAKygD,WAAW3Z,EAAM/1C,GAAKC,OAAS,GAE/C0vD,UAAW,WACP,GAAI9S,GAASx0C,KAAKggD,OAClB,OAAOxL,GAAOA,EAAO58C,OAAS,KAC1BqX,MAAO,EACPtX,IAAK,EACL6D,UAGR+rD,aAAc,WACV,GAAI/S,GAASx0C,KAAKggD,OAClB,OAAOxL,GAAO58C,QAAU48C,EAAO,GAAGh5C,KAAK5D,QAAU48C,EAAO,GAAGh5C,KAAK,GAAGs5C,KAEvE0S,yBAA0B,WACtBxnD,KAAKynD,yBAA0B,GAEnCC,WAAY,WACR,OAAO,GAAI1rD,OAAOC,WAEtB8hD,MAAO,SAAUrQ,EAAME,GAAhB,GAIChnC,GAAa+gD,EAAwD5pD,EAAgDvC,EAOjHosD,EACAC,EACAC,EACAxV,CARR,IALAtyC,KAAK+nD,yBAA2B/nD,KAAK0nD,aACrC1nD,KAAKynD,yBAA0B,EAC/B/Z,EAAOj1C,GAAKuZ,IAAI07B,GAAQ,EAAG1tC,KAAKouC,SAC5BxnC,EAAO5G,KAAM2nD,EAAWlvD,GAAKC,IAAID,GAAK+B,MAAMkzC,EAAOE,GAAO,GAAKA,EAAM7vC,EAAOtF,GAAKuZ,IAAI21C,EAAW/Z,EAAMhnC,EAAKwnC,SAC/G5yC,EAAOoL,EAAKygD,WAAW3Z,EAAMj1C,GAAKuZ,IAAI07B,EAAOE,EAAMhnC,EAAKwnC,UACpD5yC,EAAK5D,OAAT,CACIgP,EAAKu/C,SAAWvvD,EAChBgQ,EAAKk/C,MAAQpY,EAAO9mC,EAAK8mC,OAASj1C,GAAKuZ,IAAIjU,GAAO6I,EAAKqgD,aAAe,GAAKrgD,EAAKgnC,QAAU+Z,EAC1F/gD,EAAKggD,mBAAqBlZ,EAC1B9mC,EAAK6/C,MAAQ7Y,EACTga,EAAShhD,EAAKxG,QAAQyhD,aACtBgG,EAAUjhD,EAAKxG,QAAQwhD,cACvBkG,EAAYlhD,EAAKxG,QAAQ0hD,gBACzBxP,EAAa1rC,EAAKxG,QAAQ2hD,gBAC9B,KACIn7C,EAAKxG,QAAQyhD,cAAe,EACvBj7C,EAAKw7C,oBAAwBx7C,EAAKotC,SAAWptC,EAAKotC,QAAQp8C,SAC3DgP,EAAKxG,QAAQwhD,eAAgB,GAEjCh7C,EAAKxG,QAAQ0hD,iBAAkB,EAC/Bl7C,EAAKxG,QAAQyhD,cAAe,EAC5Bj7C,EAAKxG,QAAQ2hD,kBAAmB,EAC5B6F,IACAhhD,EAAK66C,2BACL76C,EAAK0vC,MAAQ96C,EAAOoL,EAAK86C,SAASlmD,IAEtCoL,EAAK+7C,SAASnnD,GAChB,QACEoL,EAAKxG,QAAQyhD,aAAe+F,EAC5BhhD,EAAKxG,QAAQwhD,cAAgBiG,EAC7BjhD,EAAKxG,QAAQ0hD,gBAAkBgG,EAC/BlhD,EAAKxG,QAAQ2hD,iBAAmBzP,OAIpC1E,KAASh3C,IACJgQ,EAAKohD,aAAaL,EAAU5pD,GAUtB4pD,EAAWja,GAClB9mC,EAAKqhD,SAASlqD,EAAM6vC,EAAM,WACtBhnC,EAAKm3C,MAAMrQ,EAAME,KAXrBhnC,EAAKqhD,SAASN,EAAU/Z,EAAM,WACtBF,EAAOia,GAAY5pD,EAAO6I,EAAKwnC,UAAYxnC,EAAKohD,aAAajqD,EAAMtF,GAAKuZ,IAAIjU,EAAO6vC,EAAMhnC,EAAKwnC,UAC9FxnC,EAAKqhD,SAASlqD,EAAM6vC,EAAM,WACtBhnC,EAAKm3C,MAAMrQ,EAAME,KAGrBhnC,EAAKm3C,MAAMrQ,EAAME,OAUrCyZ,WAAY,SAAUp4C,EAAOtX,GAAjB,GACgComD,GAAkBmK,EAASC,EAASC,EAAYC,EAAUC,EAAWC,EAAUC,EAA4KC,EAAU/0C,EAAO9b,EAY5RomB,EAZpBpX,EAAO5G,KAAMw0C,EAAS5tC,EAAKo5C,QAAgBxkD,KAAmF4E,EAAUwG,EAAKxG,QAASymD,EAASzmD,EAAQwhD,eAAiBxhD,EAAQyhD,cAAgBzhD,EAAQ0hD,iBAAmB1hD,EAAQu0C,gBAAkBv0C,EAAQ2hD,gBACjR,KAAKmG,EAAU,EAAGtwD,EAAS48C,EAAO58C,OAAQswD,EAAUtwD,EAAQswD,IAExD,GADAnK,EAAQvJ,EAAO0T,GACXj5C,GAAS8uC,EAAM9uC,OAASA,GAAS8uC,EAAMpmD,IAAK,CAE5C,IADA+b,EAAQ,EACHy0C,EAAUD,EAASC,EAAUvwD,EAAQuwD,IAGtC,GAFApK,EAAQvJ,EAAO2T,GACfM,EAAW7hD,EAAK27C,UAAUxE,EAAMviD,MAAM,GAClCitD,EAAS7wD,QAAUqX,EAAQyE,GAASqqC,EAAM9uC,QAC1Cq5C,EAAYvK,EAAMviD,KAClB+sD,EAAWxK,EAAMpmD,IACZkvD,IACG7oC,EAAOq0B,EAAezrC,EAAKotC,aAAe99B,OAAOi7B,EAAcvqC,EAAKoX,aACxEwqC,EAAY5hD,EAAK8/C,cAAc3I,EAAMviD,MACjCwiB,KAAMA,EACNna,OAAQ+C,EAAK/C,WAEjB4kD,EAAWH,EAAYE,EAAUhtD,KAC7BgtD,EAAUpa,QAAUx3C,IACpB2xD,EAAWC,EAAUpa,QAG7Bga,EAAa,EACTn5C,EAAQyE,EAAQqqC,EAAM9uC,QACtBm5C,EAAan5C,EAAQyE,EAAQqqC,EAAM9uC,OAEvCo5C,EAAWI,EAAS7wD,OAChB2wD,EAAW5wD,IACX0wD,GAAuBE,EAAW5wD,GAEtC+b,GAAS20C,EAAWD,EACpB5sD,EAAOoL,EAAK8hD,aAAaltD,EAAM8sD,EAAWF,EAAYC,GAClD1wD,GAAOomD,EAAMpmD,KAAO+b,GAAS/b,EAAMsX,GACnC,MAAOzT,EAInB,OAGR,UAEJktD,aAAc,SAAUltD,EAAMuiD,EAAOrQ,EAAME,GACvC,GAAI5tC,KAAKoiD,mBAAoB,CACzB,GAA2BuG,GAAvBvkB,EAAO2Z,EAAMj0C,QAKjB,OAJItO,GAAK5D,SACL+wD,EAAYntD,EAAKA,EAAK5D,OAAS,IAEnCk8C,EAAY6U,EAAWvkB,EAAMsJ,EAAME,GAC5BpyC,EAAK0a,OAAOkuB,GAEvB,MAAO5oC,GAAK0a,OAAO6nC,EAAMv3C,MAAMknC,EAAME,KAEzCF,KAAM,WACF,GAAI9mC,GAAO5G,IACX,OAAI4G,GAAKk/C,QAAUlvD,EACRgQ,EAAKy5C,QAAUzpD,GAAagQ,EAAKy5C,MAAQ,IAAMz5C,EAAKgnC,QAAU,GAAKh3C,EAEvEgQ,EAAKk/C,OAEhB8C,kBAAmB,WACf,MAAO5oD,MAAK4mD,oBAAsB,GAEtChZ,KAAM,WACF,MAAO5tC,MAAKymD,OAASzmD,KAAKogD,WAE9ByI,wBAAyB,SAAUnb,EAAM3vC,EAAM4iB,EAAU4E,GAAhC,GACjB3e,GAAO5G,KACP+lD,EAAYn/C,EAAK8gD,YACrB,OAAO,UAAUlsD,GACb,GAKOmC,GAAK/F,EAAQwsC,EALhBmf,GAAQ,EAAOxF,GACX9uC,MAAOy+B,EACP/1C,IAAKoG,EACLvC,QACAuqD,UAAWn/C,EAAK8gD,aASxB,IAPA9gD,EAAK6+C,kBACL7+C,EAAKoB,QAAQ0wC,IACTiM,SAAUnpD,EACV0D,KAAM,SAEV1D,EAAOoL,EAAK46C,OAAOrS,MAAM3zC,GACzB4oC,EAAOx9B,EAAK07C,UAAU9mD,GAClB4oC,EAAKxsC,OAAQ,CACb,IAAK+F,EAAM,EAAG/F,EAASgP,EAAKo5C,QAAQpoD,OAAQ+F,EAAM/F,EAAQ+F,IACtD,GAAIiJ,EAAKo5C,QAAQriD,GAAKsR,QAAUy+B,EAAM,CAClC6V,GAAQ,EACRxF,EAAQn3C,EAAKo5C,QAAQriD,EACrB,OAGH4lD,GACD38C,EAAKo5C,QAAQl4C,KAAKi2C,GAG1BA,EAAMviD,KAAOoL,EAAK86C,SAAStd,GAC3B2Z,EAAMpmD,IAAMomD,EAAM9uC,MAAQrI,EAAK27C,UAAUxE,EAAMviD,MAAM,GAAM5D,OAC3DgP,EAAKo5C,QAAQhiC,KAAK,SAAUiV,EAAG5hB,GAC3B,MAAO4hB,GAAEhkB,MAAQoC,EAAEpC,QAEvBrI,EAAK85C,OAAS95C,EAAK46C,OAAOpT,MAAM5yC,IAC5B+pB,GAAUwgC,GAAan/C,EAAKmhD,2BAA6BnhD,EAAK6gD,2BAC1D9mC,GAAYyjB,EAAKxsC,OACjB+oB,IAEA/Z,EAAKoB,QAAQ2/B,UAK7BsgB,SAAU,SAAUva,EAAME,EAAMjtB,GAC5B,GAAI/Z,GAAO5G,KAAMjC,EAAOtF,GAAKuZ,IAAI07B,EAAOE,EAAMhnC,EAAKwnC,SAAUhuC,GACrDwtC,KAAMA,EACNF,KAAMA,EACNN,KAAMM,EAAOE,EAAO,EACpBT,SAAUS,EACV5vB,KAAMpX,EAAK05C,MACXz8C,OAAQ+C,EAAK25C,QACbvM,MAAOptC,EAAK45C,OACZ1N,UAAWlsC,EAAK65C,WAEnB75C,GAAKohD,aAAata,EAAM3vC,GAkBlB4iB,GACPA,KAlBAiK,aAAahkB,EAAKkiD,UAClBliD,EAAKkiD,SAAWp/B,WAAW,WACvB9iB,EAAK2+C,cAAcnlD,EAAS,WACnBwG,EAAKoB,QAAQwwC,IAAgBt5C,KAAM,SAUpC0H,EAAK6+C,kBATL7+C,EAAKg6C,UAAU7S,MACXvyC,KAAMoL,EAAK0+C,QAAQllD,GACnBy+C,QAASj4C,EAAKiiD,wBAAwBnb,EAAM3vC,EAAM4iB,GAClDm+B,MAAO,WACH,GAAIx2B,GAAO9hB,GAAM2B,KAAKpN,UACtB6L,GAAKk4C,MAAMh4C,MAAMF,EAAM0hB,SAOxC,OAKXygC,kBAAmB,SAAUrb,EAAME,EAAMjtB,GACrC,GAAI/Z,GAAO5G,KAAMjC,EAAOtF,GAAKuZ,IAAI07B,EAAOE,EAAMhnC,EAAKwnC,SAAUhuC,GACrDwtC,KAAMA,EACNF,KAAMA,EACNN,KAAMM,EAAOE,EAAO,EACpBT,SAAUS,EACV5vB,KAAMpX,EAAK05C,MACXz8C,OAAQ+C,EAAK25C,QACbvM,MAAOptC,EAAK45C,OACZ1N,UAAWlsC,EAAK65C,WAEnB75C,GAAKohD,aAAata,EAAM3vC,GAOlB4iB,GACPA,IAPK/Z,EAAKoB,QAAQwwC,IAAgBt5C,KAAM,UACpC0H,EAAKg6C,UAAU7S,MACXvyC,KAAMoL,EAAK0+C,QAAQllD,GACnBy+C,QAASj4C,EAAKiiD,wBAAwBnb,EAAM3vC,EAAM4iB,GAAU,MAO5EqnC,aAAc,SAAU/4C,EAAOtX,GAC3B,GAAwCgG,GAAK/F,EAAzCgP,EAAO5G,KAAMw0C,EAAS5tC,EAAKo5C,OAC/B,KAAKriD,EAAM,EAAG/F,EAAS48C,EAAO58C,OAAQ+F,EAAM/F,EAAQ+F,IAChD,GAAI62C,EAAO72C,GAAKsR,OAASA,GAASulC,EAAO72C,GAAKhG,KAAOA,EACjD,OAAO,CAGf,QAAO,GAEXgsD,uBAAwB,SAAUzU,GAAV,GAChBlwC,GAAQukD,EAAOxF,EACVpgD,EAAS/F,CAAlB,KAAS+F,EAAM,EAAG/F,EAASoI,KAAKggD,QAAQpoD,OAAQ+F,EAAM/F,IAClDmmD,EAAQ/9C,KAAKggD,QAAQriD,GACrBqC,KAAKwjD,UAAUzF,EAAMviD,KAAM,SAAUgrB,GACjCxnB,EAAS61C,EAAYruB,EAAO0oB,GACxBlwC,IACAukD,GAAQ,MAGZA,GARsD5lD,OAalEimD,oBAAqB,WAAA,GACI7F,GAAOiL,EACnBrrD,EAAS/F,EADdqxD,EAAc,CAClB,KAAStrD,EAAM,EAAG/F,EAASoI,KAAKggD,QAAQpoD,OAAQ+F,EAAM/F,EAAQ+F,IAC1DogD,EAAQ/9C,KAAKggD,QAAQriD,GACrBogD,EAAM9uC,MAAQ8uC,EAAM9uC,MAAQg6C,EAC5BD,EAAchpD,KAAKuiD,UAAUxE,EAAMviD,MAAM,GAAM5D,OAC/CqxD,EAAclL,EAAMpmD,IAAMqxD,EAC1BjL,EAAMpmD,IAAMomD,EAAM9uC,MAAQ+5C,KAIlCpR,MACJA,GAAUpJ,OAAS,SAAUpuC,EAAS5E,EAAMopB,GACxC,GAAIg8B,GAAWsI,EAAmB9oD,EAAQwgD,UAAYlqD,EAAEgK,UAAWN,EAAQwgD,WAAa,IAwBxF,OAvBIsI,IACAA,EAAiBnb,WAAcmb,GAAiBnb,OAASvtC,IAAW2iB,IAAK+lC,EAAiBnb,MAASmb,EAAiBnb,KAC/F,SAAjB3tC,EAAQlB,OACRgqD,EAAiBtkC,WAAaA,GAE9BxkB,EAAQlB,OACRhH,GAAMsD,KAAK6yC,WAAan2C,GAAMsD,KAAK6yC,eACnCn2C,GAAMsD,KAAKyyC,QAAU/1C,GAAMsD,KAAKyyC,YAC3B/1C,GAAMsD,KAAK6yC,WAAWjuC,EAAQlB,MAEvB4vC,GAAc52C,GAAMsD,KAAK6yC,WAAWjuC,EAAQlB,OAGpDgqD,EAAmBxoD,IAAO,KAAUxI,GAAMsD,KAAK6yC,WAAWjuC,EAAQlB,MAAOgqD,GAFzEtI,EAAY,GAAI1oD,IAAMsD,KAAK6yC,WAAWjuC,EAAQlB,MAAMwB,GAAOwoD,GAAoB1tD,KAAMA,KAFrFtD,GAAMqsB,aAAa,sCAAyCnkB,EAAQlB,KAAO,8FAAgG,QAM/KkB,EAAQi/C,OAAS3+C,IAAO,KAAUxI,GAAMsD,KAAKyyC,QAAQ7tC,EAAQlB,MAAOkB,EAAQi/C,SAE3EuB,IACDA,EAAY1kD,GAAWgtD,EAAiBnb,MAAQmb,EAAmB,GAAIzR,IAAgByR,KAG3FtI,EAAY,GAAIpJ,IAAiBh8C,KAAM4E,EAAQ5E,WAE5ColD,GAEXllD,GAAW8yC,OAAS,SAAUpuC,IACtB2F,GAAQ3F,IAAYA,YAAmB7E,OACvC6E,GAAY5E,KAAM4E,GAEtB,IAA0IzC,GAAK/F,EAAoBmmB,EAA/J6G,EAAaxkB,MAAe5E,EAAOopB,EAAWppB,KAAMg0C,EAAS5qB,EAAW4qB,OAAQz4B,EAAQ6N,EAAW7N,MAAO+d,EAASlQ,EAAWkQ,OAAqBoa,IAWvJ,IAVK1zC,IAAQg0C,GAAW5qB,EAAWg8B,YAC3B7pC,EACAvb,EAAOo6C,EAAW7+B,EAAOy4B,GAClB1a,IACPt5B,EAAO85C,EAAYxgB,EAAQ0a,GACvB5qB,EAAWovB,QAAUp9C,GAAa4E,EAAK,IAAMA,EAAK,GAAGi6C,WAAa7+C,IAClEguB,EAAWovB,MAAQ,cAI3B97C,GAAMsD,KAAK+zC,OAASC,KAAY5qB,EAAWy6B,SAAWz6B,EAAWy6B,OAAOnQ,OAAQ,CAChF,IAAKvxC,EAAM,EAAG/F,EAAS43C,EAAO53C,OAAQ+F,EAAM/F,EAAQ+F,IAChDogB,EAAQyxB,EAAO7xC,GACXogB,EAAM7e,OACNgwC,EAAMnxB,EAAMA,OAASA,EAGxBoJ,IAAc+nB,KACftqB,EAAWy6B,OAAS3+C,IAAO,EAAMkkB,EAAWy6B,QAAUnQ,OAASM,OAAQN,MAQ/E,MALAtqB,GAAWppB,KAAOA,EAClBs5B,EAAS,KACTlQ,EAAWkQ,OAAS,KACpB/d,EAAQ,KACR6N,EAAW7N,MAAQ,KACZ6N,YAAsBlpB,IAAakpB,EAAa,GAAIlpB,IAAWkpB,IAyDtEizB,GAAOtI,EAAM94C,QACbu4C,QAAS,KACTruC,KAAM,SAAU/C,GAAV,GA2BMurD,GA1BJviD,EAAO5G,KAAMi3C,EAAcrwC,EAAKqwC,aAAer5C,GAASA,EAAMq5C,YAAamS,EAAgB,QAASC,IACxGnxD,IAAMsD,KAAK+zC,MAAMtrC,GAAGtD,KAAKwH,KAAKvB,EAAMhJ,SACzBgJ,GAAKjM,WAAa6F,KACzB4oD,EAAgBxiD,EAAKjM,UAEzB0uD,GACIhK,QACI7jD,KAAM4tD,EACNla,OACI+H,YAAaA,EACbpzB,GAAIjd,EAAKooC,QACTQ,OAAQ5oC,EAAK4oC,gBAId5oC,GAAKjM,WAAa6F,IACzBE,GAAO2oD,EAAiBziD,EAAKjM,UAEjC0uD,EAAgB7tD,KAAOoC,EAClBq5C,IACDA,EAAcoS,EAAgBhK,OAAO7jD,YAE9By7C,KAAgBz2C,KACvBy2C,EAAc/+C,GAAMorB,OAAO2zB,IAE3B/6C,GAAW+6C,KACPkS,EAAoBlS,EAAY9uC,KAAKvB,EAAMA,GAE3CA,EAAKqwC,cADLkS,GAAkD,IAA7BA,EAAkBvxD,WAGlBuxD,GAG7BviD,EAAK0iD,iBAAmBD,EACpBziD,EAAKqwC,aACLrwC,EAAK2iD,gBAET3iD,EAAKowC,WAAap5C,IAASA,EAAMo5C,UAErCuS,cAAe,WAAA,GAEP5uD,GAAUimD,EAAWnS,EADrB7nC,EAAO5G,IAEL4G,GAAKjM,mBAAoBgB,MAC3BhB,EAAWiM,EAAKjM,SAAW,GAAIgB,IAAuBiL,EAAK0iD,kBAC3D1I,EAAYjmD,EAASimD,UACrBnS,EAAemS,EAAUnS,aACzBmS,EAAUnS,aAAe,SAAUjzC,EAAM0D,GAKrC,MAJA1D,GAAKoL,EAAKooC,SAAW,MAAQpoC,EAAKid,GAC9B4qB,IACAjzC,EAAOizC,EAAajzC,EAAM0D,IAEvB1D,GAEXb,EAASf,OAAS,WACd,MAAOgN,IAEXjM,EAASyM,KAAKugC,GAAQ,SAAU1/B,GAC5BA,EAAE0pB,KAAO1pB,EAAE0pB,MAAQ/qB,EACnBA,EAAKoB,QAAQ2/B,GAAQ1/B,KAEzBtN,EAASyM,KAAKmxC,GAAO,SAAUtwC,GAC3B,GAAIyuC,GAAa9vC,EAAKhN,QAClB88C,KACAzuC,EAAE0pB,KAAO1pB,EAAE0pB,MAAQ/qB,EACnB8vC,EAAW1uC,QAAQuwC,GAAOtwC;GAGlCrB,EAAK4iD,yBAGb1lB,OAAQ,SAAUoL,GACdlvC,KAAKupD,gBACLvpD,KAAKypD,QAAO,GACZzpD,KAAKrF,SAAS2G,IAAI4tC,IAEtB+H,aAAa,EACbyS,MAAO,WAEH,IADA,GAAIlrC,GAAaxe,KAAKwe,aAAckrC,EAAQ,EACrClrC,GAAcA,EAAWA,YAC5BkrC,IACAlrC,EAAaA,EAAWA,WAAaA,EAAWA,aAAe,IAEnE,OAAOkrC,IAEXF,qBAAsB,WAClB,GAAIvY,GAAYjxC,KAAKspD,iBAAiBjK,OAAO7jD,IAC7CwE,MAAKixC,GAAa,SAAWjxC,KAAKrF,SAASa,QAE/CmuD,gBAAiB,WACb3pD,KAAKg3C,SAAU,EACfh3C,KAAKwpD,wBAETI,KAAM,WAAA,GAGEjvD,GAAUwG,EAFVf,KACAmoB,EAAS,QAsBb,OApBIvoB,MAAKi3C,aACLj3C,KAAKupD,gBACL5uD,EAAWqF,KAAKrF,SAChByF,EAAQJ,KAAKgvC,SAAW,MAAQhvC,KAAK6jB,GAChC7jB,KAAKg3C,UACNr8C,EAAS27C,MAAQ1/C,EACjB2xB,EAAS,QAEb5tB,EAAS4M,IAAIogC,GAAQ3hC,GAAMhG,KAAK2pD,gBAAiB3pD,OAC7CA,KAAK6pD,eACLzpD,EAAQyD,QACJka,MAAO,eACPkuB,SAAU,KACVruC,OAAO,IAGfuD,EAAUxG,EAAS4tB,GAAQnoB,IAE3BJ,KAAKypD,QAAO,GAETtoD,GAAWzK,EAAEoqC,WAAWM,UAAUjgC,WAE7Cqd,WAAY,WACR,GAAInL,GAAQrT,KAAKpG,QACjB,OAAOyZ,GAAMzZ,UAEjB6vD,OAAQ,SAAU7rD,GACd,MAAIA,KAAUhH,EAGHoJ,KAAKg3C,SAFZh3C,KAAKg3C,QAAUp5C,EAAfoC,IAKRy5C,gBAAiB,SAAU17B,GACvB,MAAOwxB,GAAMtrC,GAAGw1C,gBAAgBtxC,KAAKnI,KAAM+d,IAAoB,aAAVA,GAAkC,YAAVA,GAAiC,gBAAVA,GAAqC,qBAAVA,KAYnIpiB,GAAyBD,GAAWgF,QACpCC,KAAM,SAAUP,GACZ,GAAIuxB,GAAOkmB,GAAKphD,QAASkE,SAAUyF,GAC/BA,GAAQyD,SAAWzD,EAAQ0hD,kBAC3B9hD,KAAK8pD,oBAAsB1pD,EAAQyD,OACnCzD,EAAQyD,OAAS,MAErBnI,GAAWuI,GAAGtD,KAAKwH,KAAKnI,KAAMU,IAAO,MACjC2+C,QACI/P,UAAW3d,EACXud,MAAOvd,IAEZvxB,IACHJ,KAAKu2C,yBAETA,sBAAuB,WACnB,GAAI3vC,GAAO5G,IACX4G,GAAK0vC,MAAMlvC,KAAKmxC,GAAO,SAAUtwC,GAC7BrB,EAAKoB,QAAQuwC,GAAOtwC,MAG5B8lC,KAAM,SAAUvyC,GACZ,GAAIwD,GAAStD,GAAWuI,GAAG8pC,KAAK5lC,KAAKnI,KAAMxE,EAI3C,OAHIwE,MAAK8pD,qBACL9pD,KAAK6D,OAAO7D,KAAK8pD,qBAEd9qD,GAEXkpB,OAAQ,SAAUyJ,GACd,GAAuD3yB,GAAnDwf,EAAamT,EAAKnT,aAAcoG,EAAa5kB,IAQjD,OAPIwe,IAAcA,EAAW+qC,gBACzB3kC,EAAapG,EAAW7jB,UAE5BqE,EAAStD,GAAWuI,GAAGikB,OAAO/f,KAAKyc,EAAY+M,GAC3CnT,IAAeoG,EAAWppB,OAAO5D,SACjC4mB,EAAWy4B,aAAc,GAEtBj4C,GAEX6/C,QAASxI,EAAW,WACpB76C,KAAM66C,EAAW,QACjBwM,OAAQ,SAAU1wC,EAAO+8B,GACrB,GAAI1wB,GAAaxe,KAAKpG,QAKtB,OAJI4kB,IAAcA,EAAW+qC,gBACzB/qC,EAAWy4B,aAAc,EACzBz4B,EAAW+qC,iBAER7tD,GAAWuI,GAAG4+C,OAAO16C,KAAKnI,KAAMmS,EAAO+8B,IAElDrrC,OAAQ,SAAUk7B,GACd,MAAIA,KAAQnoC,EACDoJ,KAAKugD,SAEXvgD,KAAKI,QAAQ0hD,kBACd9hD,KAAK+pD,uBAAuBhrB,GAC5BA,GACImN,MAAO,KACPxoC,SACIq7B,GAEIhhB,MAAO,eACPkuB,SAAU,SACVruC,OAAO,MAKvBoC,KAAKgI,QAAQ,SACbhI,KAAK+mD,QACDljD,OAAQk7B,EACRqO,KAAM,IAjBV,IAoBJ2c,uBAAwB,SAAU3X,GAAV,GAChB8L,GACAC,EACA3O,EACA+H,EACA1zC,CAEJ,OADAuuC,GAAcZ,EAAgBY,GACzBA,GAA8C,IAA/BA,EAAY1uC,QAAQ9L,QAGxCsmD,EAAWhN,EAAM4K,WAAW1J,GAC5B5C,EAAS0O,EAAS1O,OAClB+H,EAAY2G,EAAS3G,UACrB4G,EAAYt6C,EAAavB,SAAS,cAAe,UAAY47C,EAAS96B,aAClEosB,EAAO53C,QAAU2/C,EAAU3/C,UAC3BiM,EAAS,SAAU8M,GACf,MAAOwtC,GAAUxtC,EAAG6+B,EAAQ+H,KAGpCv3C,KAAKgqD,0BAA0BnmD,GAT/Bq6C,GAFWl+C,MAafgqD,0BAA2B,SAAUnmD,GAAV,GACnB8H,GAGKhO,EAFLnC,EAAOwE,KAAKs2C,MACZt3C,GAAS,CACb,KAASrB,EAAM,EAAGA,EAAMnC,EAAK5D,OAAQ+F,IACjCgO,EAAUnQ,EAAKmC,GACXgO,EAAQsrC,aACRtrC,EAAQk+C,aAAel+C,EAAQhR,SAASqvD,0BAA0BnmD,GAC7D8H,EAAQk+C,eACTl+C,EAAQk+C,aAAehmD,EAAO8H,KAGlCA,EAAQk+C,aAAehmD,EAAO8H,GAE9BA,EAAQk+C,eACR7qD,GAAS,EAGjB,OAAOA,IAEXirD,MAAO,SAAU1hC,EAAQ3qB,GAAlB,GACCD,GAAK/F,EAAQ+5B,EAAMh3B,EACnBa,EAAOwE,KAAKs2C,KAChB,IAAK96C,EAAL,CAIA,GADAm2B,EAAOj2B,GAAWuI,GAAGskB,GAAQpgB,KAAKnI,KAAMpC,GAEpC,MAAO+zB,EAGX,KADAn2B,EAAOwE,KAAKuiD,UAAUviD,KAAKs2C,OACtB34C,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,MAAKiqD,MAAM,MAAOpmC,IAE7B2+B,SAAU,SAAU1N,GAChB,MAAO90C,MAAKiqD,MAAM,WAAYnV,MA0CtCn5C,GAAuB6yC,OAAS,SAAUpuC,GACtCA,EAAUA,GAAWA,EAAQ0H,MAAStM,KAAM4E,GAAYA,CACxD,IAAIwkB,GAAaxkB,MAAe5E,EAAOopB,EAAWppB,KAAMg0C,EAAS5qB,EAAW4qB,OAAQiH,EAAO7xB,EAAW6xB,IACtG,OAAIj7C,IAAQA,EAAK0uD,YACN1uD,EAAK0uD,aAEX1uD,IAAQg0C,GAAW5qB,EAAWg8B,WAC3BnK,IACAj7C,EAAOg7C,EAAUC,EAAMjH,IAG/B5qB,EAAWppB,KAAOA,EACXopB,YAAsBjpB,IAAyBipB,EAAa,GAAIjpB,IAAuBipB,KAE9FkzB,GAAS5/C,GAAMmM,WAAW3D,QAC1BC,KAAM,SAAUikB,EAAYulC,EAAUC,GAClClyD,GAAMmM,WAAWJ,GAAGtD,KAAKwH,KAAKnI,MAC9BA,KAAKqqD,cAAe,EACpBrqD,KAAK4kB,WAAaA,EAClB5kB,KAAKioD,UAAYmC,CACjB,IAAI/yB,GAASr3B,IACb4kB,GAAWxd,KAAK,SAAU,WACtBiwB,EAAO+sB,YAEXx/B,EAAWxd,KAAK,QAAS,WACrBiwB,EAAOizB,WAEXtqD,KAAKuqD,sBACLvqD,KAAKwqD,YAAYL,IAErBK,YAAa,SAAUL,GACnBnqD,KAAKmqD,SAAWA,EAChBnqD,KAAKyqD,gBAETtW,GAAI,SAAUhiC,GACV,GAAIg7B,GAAWntC,KAAKmtC,SAAUud,GAAc,CAC5C,OAAIv4C,IAASnS,KAAKouC,SACdpuC,KAAKgI,QAAQ,cAAgBmK,MAAOA,IAC7B,MAENnS,KAAK2qD,UAGN3qD,KAAK2qD,YACDx4C,EAAQnS,KAAK4qD,YAAcz4C,GAASnS,KAAK0tC,KAAOP,KAChDud,EAAc1qD,KAAK+9C,MAAMn/C,KAAKpE,MAAM2X,EAAQg7B,GAAYA,IAExDh7B,IAAUnS,KAAK6qD,mBACf7qD,KAAK8/C,YAEL3tC,IAAUnS,KAAK8qD,iBACf9qD,KAAK+9C,MAAM/9C,KAAK+qD,cAAc,GACvB54C,IAAUnS,KAAKgrD,kBACtBhrD,KAAK+9C,MAAM/9C,KAAKirD,eACT94C,IAAUnS,KAAKkrD,mBAElBlrD,KAAK+9C,MADL/9C,KAAKZ,SAAWY,KAAK0tC,KACV1tC,KAAKmrD,iBAELnrD,KAAKorD,mBAGpBV,EACO1qD,KAAK4kB,WAAWuvB,GAAGhiC,EAAQnS,KAAK4qD,aAEvC5qD,KAAKgI,QAAQ,cAAgBmK,MAAOA,IAC7B,OAtBf,EAFWnS,KAAK4kB,WAAW+D,OAAOxW,IA4BtCjU,QAAS,SAAUw0C,GACf,MAAO1yC,MAAK4kB,WAAWppB,OAAO0C,QAAQw0C,GAAQ1yC,KAAK4qD,YAEvDxc,MAAO,WACH,MAAO/7B,UAASrS,KAAK4kB,WAAWwpB,QAAS,KAE7C4Y,KAAM,WACF,GAAI3vB,GAASr3B,KAAMmtC,EAAW9V,EAAO8V,SAAU/tC,EAASi4B,EAAOqW,KAAOrW,EAAO8yB,SAAWhd,EAAUwa,EAAWlvD,GAAKC,IAAID,GAAK+B,MAAM4E,EAAS+tC,GAAW,GAAKA,CAC1JntC,MAAKZ,OAASA,EACdY,KAAK4kB,WAAWqjC,SAASN,EAAUxa,EAAU,WACzC9V,EAAOg0B,WAAWjsD,GAAQ,MAGlC2+C,MAAO,SAAU3+C,EAAQksD,GACrB,GAAItrD,KAAKZ,SAAWA,EAChB,OAAO,CAEX,IAAIi4B,GAASr3B,KAAMmtC,EAAWntC,KAAKmtC,SAAUwa,EAAWlvD,GAAKC,IAAID,GAAK+B,MAAM4E,EAAS+tC,GAAW,GAAKA,EAAUvoB,EAAa5kB,KAAK4kB,UAIjI,OAHI0mC,KACA3D,GAAYxa,GAEZvoB,EAAWwiC,QAAQhoD,EAAQ+tC,IAC3BntC,KAAKZ,OAASA,EACdY,KAAKyqD,eACLzqD,KAAKqrD,WAAWjsD,IACT,IACAY,KAAKioD,WACZrjC,EAAWqjC,SAASN,EAAUxa,EAAU,WACpC9V,EAAOj4B,OAASA,EAChBi4B,EAAOozB,eACPpzB,EAAOg0B,WAAWjsD,GAAQ,MAEvB,IAIfmsD,eAAgB,WACZ,GAAInsD,GAASY,KAAKZ,MAClBY,MAAKZ,OAAS,KACdY,KAAK+9C,MAAM3+C,IAEf0mB,QAAS,WACL9lB,KAAK6H,UAETi4C,UAAW,WACP,GAAIzoB,GAASr3B,KAAMmtC,EAAWntC,KAAKmtC,SAAUqe,EAAiBxrD,KAAK0tC,KAAOP,EAAUvoB,EAAa5kB,KAAK4kB,UACjGA,GAAWwiC,QAAQoE,EAAgBre,IAAcntC,KAAKqqD,eAAgBrqD,KAAKioD,WAC5EjoD,KAAKqqD,cAAe,EACpBrqD,KAAKgI,QAAQ,eACT0lC,KAAM8d,EACN5d,KAAMT,IAEVvoB,EAAWqjC,SAASuD,EAAgBre,EAAU,WAC1C9V,EAAOgzB,cAAe,EACtBhzB,EAAOrvB,QAAQ,cACX0lC,KAAM8d,EACN5d,KAAMT,QAKtBke,WAAY,SAAUjsD,EAAQqsD,GACtBzrD,KAAKZ,SAAWA,IAGpBY,KAAK4qD,WAAaxrD,EAClBY,KAAK0rD,WAAaD,EAClBzrD,KAAK4kB,WAAWm5B,MAAM3+C,EAAQY,KAAKmtC,UACnCntC,KAAK4kB,WAAW4iC,6BAEpB8C,OAAQ,WACJtqD,KAAK2rD,cAAe,GAExBvH,QAAS,WACL,GAAIx/B,GAAa5kB,KAAK4kB,UACtB5kB,MAAKpI,OAASoI,KAAK2qD,UAAY/lC,EAAW0iC,YAAY3vD,IAAMitB,EAAW+D,OAAO/wB,OAC1EoI,KAAK2rD,eACL3rD,KAAKuqD,sBACLvqD,KAAKyqD,eACLzqD,KAAK2rD,cAAe,EACpB3rD,KAAKgI,QAAQ,SAAW5I,OAAQY,KAAKZ,UAEzCY,KAAKgI,QAAQ,UACThI,KAAK0rD,YACL1rD,KAAKgI,QAAQ,gBAEVhI,MAAK0rD,YAEhBnB,oBAAqB,WACjB,GAAI3lC,GAAa5kB,KAAK4kB,UACtB5kB,MAAK4rD,cAAgBhnC,EAAW2iC,eAChCvnD,KAAK4qD,WAAa5qD,KAAKZ,OAASwlB,EAAW8oB,QAAU,EACrD1tC,KAAKmtC,SAAWvoB,EAAWuoB,WAC3BntC,KAAK2qD,UAAY/lC,EAAWxkB,QAAQyhD,cAExC4I,aAAc,WACV,GAAItd,GAAWntC,KAAKmtC,SAAU/tC,EAASY,KAAKZ,OAAQ+qD,EAAWnqD,KAAKmqD,SAAUzc,EAAO9uC,KAAKuoD,KAAK/nD,EAAS+tC,GAAYA,CACpHntC,MAAK0tC,KAAOA,EACZ1tC,KAAK8qD,iBAAmBpd,EAAOP,EAAW,EAC1CntC,KAAKgrD,kBAAoBtd,EAAOyc,EAAW,EAC3CnqD,KAAK6qD,kBAAoBnd,EAAO9uC,KAAKpE,MAAM2yC,EAAW,EAAI,GAC1DntC,KAAKkrD,kBAAoBlrD,KAAKZ,OAAS,EACvCY,KAAK+qD,aAAerd,EAAOP,EAAWgd,EACtCnqD,KAAKirD,cAAgBvd,EACrB1tC,KAAKmrD,iBAAmB/rD,EAAS+qD,EACjCnqD,KAAKorD,kBAAoB1d,EAAOP,KAGpC4K,GAAc7/C,GAAMmM,WAAW3D,QAC/BC,KAAM,SAAUikB,EAAYinC,GACxB,GAAIC,GAAc9rD,IAClB9H,IAAMmM,WAAWJ,GAAGtD,KAAKwH,KAAK2jD,GAC9B9rD,KAAK4kB,WAAaA,EAClB5kB,KAAK6rD,UAAYA,EACjB7rD,KAAK0gD,OAAS,EACd1gD,KAAKq3B,OAAS,GAAIygB,IAAOlzB,EAAwB,EAAZinC,GACrC7rD,KAAKq3B,OAAOjwB,MACR2kD,WAAc,SAAU9jD,GACpB6jD,EAAY9jD,QAAQ,cAAgBmK,MAAOlK,EAAEkK,SAEjD65C,YAAe,SAAU/jD,GACrB6jD,EAAY9jD,QAAQ,eAChB0lC,KAAMzlC,EAAEylC,KACRE,KAAM3lC,EAAE2lC,QAGhBqe,WAAc,SAAUhkD,GACpB6jD,EAAY9jD,QAAQ,cAChB0lC,KAAMzlC,EAAEylC,KACRE,KAAM3lC,EAAE2lC,QAGhB1M,MAAS,WACL4qB,EAAYpL,OAAS,EACrBoL,EAAY9jD,QAAQ,UAExBiZ,OAAU,WACN6qC,EAAYpL,OAAS9hD,KAAKuoD,KAAKnnD,KAAKpI,OAASk0D,EAAYD,WACzDC,EAAY9jD,QAAQ,UAChBomC,MAAO0d,EAAY1d,QACnBhvC,OAAQY,KAAKZ,aAK7BmsD,eAAgB,WACZvrD,KAAKq3B,OAAOk0B,kBAEhBpX,GAAI,SAAUhiC,GAAV,GAC2FugC,GAIlF53C,EAJLu8B,EAASr3B,KAAKq3B,OAAQqW,EAAOv7B,EAAQnS,KAAK6rD,UAAWje,EAAO5tC,KAAK6rD,UAAWljC,IAIhF,KAHI0O,EAAOj4B,OAASsuC,GAChBrW,EAAO8c,GAAG9c,EAAOj4B,OAAS,GAErBtE,EAAI,EAAGA,EAAI8yC,IAChB8E,EAAOrb,EAAO8c,GAAGzG,EAAO5yC,GACX,OAAT43C,GAFkB53C,IAKtB6tB,EAAK7gB,KAAK4qC,EAEd,OAAO/pB,IAEXylB,MAAO,WACH,MAAOpuC,MAAK0gD,QAEhB56B,QAAS,WACL9lB,KAAKq3B,OAAOvR,UACZ9lB,KAAK6H,YAGbnH,IAAO,EAAMxI,GAAMsD,MACfk1C,SAAWqI,KAAMpB,IACjBzG,MAAOA,EACPx1C,WAAYA,GACZC,uBAAwBA,GACxBk8C,KAAMA,GACNX,iBAAkBA,EAClB37C,gBAAiBA,GACjBE,oBAAqBA,EACrB+7C,eAAgBA,EAChBC,gBAAiBA,GACjBC,MAAOA,GACPC,WAAYA,GACZpI,MAAOA,EACPuI,OAAQA,GACRC,YAAaA,MAEnBphD,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,QAASs1D,GAAkBC,EAAalb,EAAW1tB,GAC/C,MAAO6oC,GAAO1rD,QACVC,KAAM,SAAUqC,EAAQqpD,EAAUjsD,GAC9B,GAAIwG,GAAO5G,IACXosD,GAAOnoD,GAAGtD,KAAKwH,KAAKvB,EAAM5D,EAAOjL,QAAQ,GAAIs0D,EAAUjsD,GACvDwG,EAAK5D,OAASA,EACd4D,EAAK0lD,aAAetmD,EAAMY,EAAK2lD,YAAa3lD,GAC5CA,EAAK4lD,WAAaxmD,EAAMY,EAAK6lD,UAAW7lD,GACxCA,EAAK8lD,YAAc1mD,EAAMY,EAAK+lD,WAAY/lD,IAE9C+lD,WAAY,SAAU1kD,GAClB2kD,EAAY3kD,EAAEyqC,KAAK,GAAIzqC,EAAEzM,KAAMwE,KAAK6sD,IAAI5kD,EAAEhG,KAAMgG,EAAEzM,MAAM0a,OAAOlW,KAAKqsD,SAASF,GAAaW,cAE9FP,YAAa,SAAUtkD,GACnB,GAAItK,GAAK/F,EAAQoL,EAAShD,KAAKgD,OAAQwjB,EAAQve,EAAE8kD,cAAgB/pD,EAAOwjB,OACxE,KAAK7oB,EAAM,EAAG/F,EAAS4uB,EAAM5uB,OAAQ+F,EAAM/F,EAAQ+F,IAC/CqvD,EAAkBxmC,EAAM7oB,IAAM,IAGtCkvD,IAAK,SAAU5qD,GACXA,EAAKA,GAAM/J,EAAMmpB,EACjB,IAAI4rC,IACA/0D,EAAMmpB,GACNnpB,EAAMqpB,QAAQF,GACdnpB,EAAMopB,OAAOD,GAIjB,OAFA4rC,GAAI7kD,OAAO1R,EAAEuM,QAAQhB,EAAIgrD,GAAM,GAC/BA,EAAIllD,QAAQ9F,GACL/J,EAAMkvB,oBAAoB6lC,IAErCR,UAAW,SAAUxkD,GACjB,GAAItK,GAAK/F,EAAsG+wB,EAAMhlB,EAApGX,EAAShD,KAAKgD,OAAQwjB,EAAQve,EAAEilD,YAAclqD,EAAOwjB,QAAS5B,EAAa5hB,EAAOiuC,GAA2Bkc,EAAMj1D,EAAMsD,KAAKG,sBAC/I,MAAIwxD,GAAOvoC,YAAsBuoC,KAG7B3mC,EAAM5uB,OAGN,IAFA+wB,EAAO1gB,EAAEmlD,gBAAkBxoC,EAAWwB,WACtCziB,EAAU3D,KAAKqsD,SAASF,GAAaW,WAChCnvD,EAAM,EAAG/F,EAAS+wB,EAAK/wB,OAAQ+F,EAAM/F,EAAQ+F,IAC9CivD,EAAYpmC,EAAM7oB,GAAMgrB,EAAKhrB,GAAMqC,KAAK6sD,IAAI5kD,EAAEhG,KAAM0mB,EAAKhrB,IAAMuY,OAAOvS,KAIlF6T,QAAS,SAAUvP,GACf,GAAiBhN,GAA8B65B,EAAQu4B,EAAnDzmD,EAAO5G,KAAcgD,EAAS4D,EAAK5D,MACvCiF,GAAIA,MACCA,EAAE0uB,SACH/vB,EAAKkf,UACL9iB,EAAOoE,KAAK,cAAeR,EAAK0lD,cAChCtpD,EAAOoE,KAAK,YAAaR,EAAK4lD,YAC9BxpD,EAAOoE,KAAK,aAAcR,EAAK8lD,aAC/BzxD,EAAS2L,EAAKylD,SAASF,GAAa1oC,MAChCzgB,EAAOiuC,YAAsB/4C,GAAMsD,KAAKE,YAAcsH,EAAOiuC,IAAch2C,IACvEA,YAAkB/C,GAAMsD,KAAKE,WAC7BsH,EAAOugB,GAAQtoB,GACRA,GAAUA,EAAOivD,YACxBlnD,EAAOugB,GAAQtoB,EAAOivD,cAEtBlnD,EAAOiuC,GAAWz1C,KAAKP,GACvB65B,EAAS58B,EAAMmpB,GAAGisC,QAAUtqD,YAAkB9K,GAAMmpB,GAAGisC,OACvDD,EAAcn1D,EAAMmpB,GAAGksC,aAAevqD,YAAkB9K,GAAMmpB,GAAGksC,YAC7D3mD,EAAKylD,SAASzuD,QAAUk3B,GAAUu4B,IAClCrqD,EAAOpF,MAAM4vD,EAAwB5mD,EAAKylD,SAASzuD,MAAM6lB,MAAOzgB,EAAO5C,QAAQqtD,qBAMnG3nC,QAAS,WACL,GAAI9iB,GAAShD,KAAKgD,MAClBA,GAAO6E,OAAO,cAAe7H,KAAKssD,cAClCtpD,EAAO6E,OAAO,YAAa7H,KAAKwsD,YAChCxpD,EAAO6E,OAAO,aAAc7H,KAAK0sD,gBAyc7C,QAASgB,GAAqB31D,EAAS+uB,GACnC,GAAI9jB,GAAS9K,EAAM2uB,WAAW9uB,KAAa+uB,EAC3C,IAAI9jB,EACA,MAAO,IAAI2qD,GAAoB3qD,GAIvC,QAAS4qD,GAAcxmD,GACnB,GAAiBzJ,GAAK/F,EAAQi2D,EAAOC,EAAY/uD,EAAKnB,EAAOi4B,EAAzD72B,IAEJ,KADA62B,EAASzuB,EAAK9O,MAAMy1D,GACfpwD,EAAM,EAAG/F,EAASi+B,EAAOj+B,OAAQ+F,EAAM/F,EAAQ+F,IAChDkwD,EAAQh4B,EAAOl4B,GACfmwD,EAAaD,EAAM3vD,QAAQ,KAC3Ba,EAAM8uD,EAAMt2D,UAAU,EAAGu2D,GACzBlwD,EAAQiwD,EAAMt2D,UAAUu2D,EAAa,GACd,KAAnBlwD,EAAMvG,OAAO,KACbuG,EAAQgwD,EAAchwD,IAE1BoB,EAAOD,GAAOnB,CAElB,OAAOoB,GAEX,QAASgvD,GAAe3B,EAAUpxD,EAAQiE,GACtC,GAAI+uD,GAASjvD,IACb,KAAKivD,IAAW5B,GACZrtD,EAAOivD,GAAW,GAAI/uD,GAAKjE,EAAQoxD,EAAS4B,GAEhD,OAAOjvD,GAEX,QAAS4tD,GAAY70D,EAASkD,EAAQ6rB,EAAOnjB,GAA7C,GACkEhG,GAA+F0uD,EAAwBjsC,EAqDjLzlB,EArDAopB,EAAOhsB,EAAQiK,aAAa,QAAU9J,EAAM+J,GAAK,QAAcmF,EAAOrP,EAAQiK,aAAa,QAAU9J,EAAM+J,GAAK,QAASisD,KAAmBC,GAAO,EAAgB/tD,IAsDvK,IArDAuD,EAAUA,IAAY1I,IAClB8oB,GAAQ3c,IACRgnD,EAAcr2D,GAAS,GAEvBgsB,IACA3D,EAASstC,EAAqB31D,EAAS+uB,IAEvC1f,IACAA,EAAOwmD,EAAcxmD,EAAKjQ,QAAQk3D,EAAkB,KAC/CjuC,IACDhgB,EAAUlI,EAAMqK,aAAaxK,GACzB6+C,UAAW,GACX0X,WAAY,GACZ7rD,SAAU,GACV8rD,YAAa5mB,EACb6mB,gBAAgB,EAChBC,UAAU,IAEdruD,EAAQ0mB,MAAQA,EAChB1G,EAAS,GAAIsuC,GAAc32D,EAASqI,IAExCggB,EAAOnlB,OAASA,EAChBoxD,EAAW2B,EAAe5mD,EAAMzD,EAASgrD,GACrCvuD,EAAQqC,WACR4pD,EAAS5pD,SAAW,GAAImsD,GAAgBjrD,EAAS,GAAIvD,EAAQqC,WAE7D4pD,EAASrrC,QACT5Z,EAAKM,OAASN,EAAKM,WACnBN,EAAKM,OAAOsZ,MAAQ5Z,EAAK4Z,MACzBqrC,EAASrrC,MAAM8E,gBACRumC,GAASrrC,OAEhBqrC,EAASpxD,SACTkzD,GAAO,GAEP/mD,EAAKlE,OACLmpD,EAASnpD,KAAO8qD,EAAe5mD,EAAKlE,KAAMS,EAASgrD,IAEnDvnD,EAAKtN,QACLuyD,EAASvyD,MAAQk0D,EAAe5mD,EAAKtN,MAAO6J,EAASgrD,IAErDvnD,EAAKM,SACL2kD,EAAS3kD,OAASsmD,EAAe5mD,EAAKM,OAAQ/D,EAASkrD,IAEvDznD,EAAKnP,MACLo0D,EAASp0D,IAAM+1D,EAAe5mD,EAAKnP,IAAK0L,EAASgrD,IAErDvuC,EAAOhZ,KAAKilD,IAEZjsC,IACAroB,EAAQitB,mBAAqB5E,GAE7BzlB,EAAW5C,EAAQ4C,SACnBwzD,GAAQxzD,EAAU,CAClB,IAAKgD,EAAM,EAAGA,EAAMhD,EAAS/C,OAAQ+F,IACjCuwD,EAAavwD,GAAOhD,EAASgD,EAEjC,KAAKA,EAAM,EAAGA,EAAMuwD,EAAat2D,OAAQ+F,IACrCivD,EAAYsB,EAAavwD,GAAM1C,EAAQ6rB,EAAOnjB,IAI1D,QAASyD,GAAK0nD,EAAK9V,GACf,GAAIr7C,GAAK/F,EAAQ+5B,EAAM7K,EAAQ5uB,EAAMkvB,uBAAuB5gB,MAAM2B,KAAKpN,UAAW,GAGlF,KAFAi+C,EAAS9gD,EAAMmgC,WAAW2gB,GAC1B8V,EAAMp4D,EAAEo4D,GACHnxD,EAAM,EAAG/F,EAASk3D,EAAIl3D,OAAQ+F,EAAM/F,EAAQ+F,IAC7Cg0B,EAAOm9B,EAAInxD,GACW,IAAlBg0B,EAAKzK,UACL0lC,EAAYj7B,EAAMqnB,EAAQlyB,GAItC,QAASsnC,GAAcr2D,EAASg3D,GAAhC,GAaY/rD,GAZJgsD,EAAgBj3D,EAAQitB,kBACxBgqC,KACAA,EAAclpC,UACVmpC,QACOl3D,GAAQitB,mBACRjtB,EAAQm3D,gBACfn3D,EAAQm3D,gBAAgB,sBAExBn3D,EAAQitB,mBAAqB,MAGjC+pC,IACI/rD,EAAS9K,EAAMuvB,eAAe/wB,EAAEqB,IAChCiL,SAAiBA,GAAO8iB,UAAY3f,GACpCnD,EAAO8iB,WAInB,QAASknC,GAAkBj1D,EAASo3D,GAChCf,EAAcr2D,EAASo3D,GACvBC,EAAsBr3D,EAASo3D,GAEnC,QAASC,GAAsBr3D,EAASo3D,GAAxC,GAGiBxxD,GAAS/F,EAFlB+C,EAAW5C,EAAQ4C,QACvB,IAAIA,EACA,IAASgD,EAAM,EAAG/F,EAAS+C,EAAS/C,OAAQ+F,EAAM/F,EAAQ+F,IACtDqvD,EAAkBryD,EAASgD,GAAMwxD,GAI7C,QAAStnD,GAAOinD,GACZ,GAAInxD,GAAK/F,CAET,KADAk3D,EAAMp4D,EAAEo4D,GACHnxD,EAAM,EAAG/F,EAASk3D,EAAIl3D,OAAQ+F,EAAM/F,EAAQ+F,IAC7CqvD,EAAkB8B,EAAInxD,IAAM,GAGpC,QAASipB,GAAO5jB,EAAQqsD,GACpB,GAAIt3D,GAAUiL,EAAOjL,QAASi3D,EAAgBj3D,EAAQ,GAAGitB,kBACrDgqC,IACA5nD,EAAKrP,EAASi3D,EAAc/zD,OAAQo0D,GAG5C,QAAS7B,GAAwB5vD,EAAO0wD,GAAxC,GAGQ12D,GACA86C,EAHAxgC,KACAvU,EAAM,CAGV,KAAK2wD,EACD,MAAO1wD,EAEX,IAAIA,YAAiBrC,GAAiB,CAClC,IAAK3D,EAASgG,EAAMhG,OAAQ+F,EAAM/F,EAAQ+F,IACtC+0C,EAAO90C,EAAMD,GACbuU,EAAOvU,GAAO+0C,EAAKjvB,IAAMivB,EAAKjvB,IAAI6qC,GAAc5b,EAAK4b,EAEzD1wD,GAAQsU,MACDtU,aAAiBs5C,KACxBt5C,EAAQA,EAAM6lB,IAAI6qC,GAEtB,OAAO1wD,GAl0Cd,GAUO+wD,GAsHAE,EAaAD,EAcAxC,EAiBAkD,EAi3BAC,EAsCAb,EAmEAf,EA6BAI,EAA0DM,EAlqC1Dn2D,EAAQvB,OAAOuB,MAAOmM,EAAanM,EAAMmM,WAAY6yC,EAAmBh/C,EAAMsD,KAAK07C,iBAAkB37C,EAAkBrD,EAAMsD,KAAKD,gBAAiBgO,KAAcA,SAAUimD,KAAc34D,EAAQqB,EAAMrB,MAAOmP,EAAQtP,EAAEsP,MAAOypD,EAAQ,QAASC,EAAS,SAAUC,EAAS,SAAUC,EAAU,UAAWC,EAAM,MAAOZ,GAAgB,EAAM9oD,EAAW,WAAYwhC,EAAS,UACjX,WACG,GAAI/kC,GAAIrF,SAASma,cAAc,IAC/B,WACW9U,GAAE1I,KACX,MAAO+N,GACLgnD,GAAgB,MAGpBN,EAAUtqD,EAAW3D,QACrBC,KAAM,SAAUgD,EAASqjC,GACrB,GAAIpgC,GAAO5G,IACXqE,GAAWJ,GAAGtD,KAAKwH,KAAKvB,GACxBA,EAAK3L,OAAS0I,EAAQ,GACtBiD,EAAKjD,QAAUA,EACfiD,EAAKogC,KAAOA,EACZpgC,EAAKkpD,gBACLlpD,EAAKkpD,aAAa9oB,IAAQ,EAC1BpgC,EAAKyxB,WAAazxB,EAAK3L,iBAAkBoJ,GACzCuC,EAAKmpD,QAAU,SAAU9nD,GACrBrB,EAAKkpD,aAAa7nD,EAAE8V,QAAS,GAE7BnX,EAAKyxB,aACLzxB,EAAKw9C,QAAU,SAAUn8C,GACrBrB,EAAK8hC,OAAOzgC,IAEhBrB,EAAK3L,OAAOmM,KAAKugC,EAAQ/gC,EAAKw9C,WAGtC0I,SAAU,WAAA,GAIElzD,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,GAEX+kC,OAAQ,SAAUzgC,GACd,GAAI+nD,GAAYniD,EAAIkQ,EAAQ9V,EAAE8V,MAAOnX,EAAO5G,IAC5C,IAAkB,SAAd4G,EAAKogC,KACLpgC,EAAKoB,QAAQ2/B,EAAQ1/B,OAErB,KAAK+nD,IAAcppD,GAAKkpD,aACpB,GAAkC,IAA9BE,EAAW9xD,QAAQ6f,KACnBlQ,EAAKmiD,EAAW34D,OAAO0mB,EAAMnmB,SACxBiW,GAAa,MAAPA,GAAqB,MAAPA,GAAY,CACjCjH,EAAKoB,QAAQ2/B,EAAQ1/B,EACrB,SAMpBgH,MAAO,SAAUhU,GACbA,EAAOmM,KAAK,MAAOpH,KAAK+vD,UAE5BjwC,KAAM,SAAU7kB,GACZA,EAAO4M,OAAO,MAAO7H,KAAK+vD,UAE9BtsC,IAAK,WACD,GAAI7c,GAAO5G,KAAM/E,EAAS2L,EAAK3L,OAAQkX,EAAQ,EAAG60B,EAAOpgC,EAAKogC,KAAMhoC,EAAS/D,CAC7E,KAAK2L,EAAKyxB,WACN,MAAOr5B,EAIX,KAFA4H,EAAKqI,MAAMrI,EAAK3L,QAChB+D,EAAS/D,EAAOwoB,IAAIujB,GACbhoC,IAAWpI,GAAaqE,GAC3BA,EAAS2L,EAAKjD,UAAUwO,GACpBlX,YAAkBi8C,KAClBl4C,EAAS/D,EAAOwoB,IAAIujB,GAG5B,IAAIhoC,IAAWpI,EAEX,IADAqE,EAAS2L,EAAK3L,OACP+D,IAAWpI,GAAaqE,GAC3BA,EAASA,EAAOrB,SACZqB,YAAkBi8C,KAClBl4C,EAAS/D,EAAOwoB,IAAIujB,GAsBhC,OAlBsB,kBAAXhoC,KACPmT,EAAQ60B,EAAK72B,YAAY,KACrBgC,EAAQ,IACRlX,EAASA,EAAOwoB,IAAIujB,EAAKzvC,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,EAAKqpD,cAAgBh1D,EACrBA,EAAO4M,OAAO8/B,EAAQ/gC,EAAKw9C,SAASh9C,KAAKugC,EAAQ/gC,EAAKw9C,UAE1Dx9C,EAAKkZ,KAAKlZ,EAAK3L,QACR+D,GAEX0kB,IAAK,SAAU9lB,GAAV,GACG3C,GAAS+E,KAAKiwD,eAAiBjwD,KAAK/E,OACpC8iB,EAAQ7lB,EAAMorB,OAAOtjB,KAAKgnC,MAAM/rC,EACf,mBAAV8iB,GACH9iB,IAAW+E,KAAK/E,OAChB8iB,EAAM5V,KAAKlN,EAAQ+E,KAAK/E,OAAQ2C,GAEhCmgB,EAAM5V,KAAKlN,EAAQ2C,GAGvB3C,EAAOyoB,IAAI1jB,KAAKgnC,KAAMppC,IAG9BkoB,QAAS,WACD9lB,KAAKq4B,aACLr4B,KAAK/E,OAAO4M,OAAO8/B,EAAQ3nC,KAAKokD,SAC5BpkD,KAAKiwD,eACLjwD,KAAKiwD,cAAcpoD,OAAO8/B,EAAQ3nC,KAAKokD,UAG/CpkD,KAAK6H,YAGTgnD,EAAeF,EAAQjuD,QACvB+iB,IAAK,WACD,GAAuDhc,GAAnDxM,EAAS+E,KAAK/E,OAAQ+rC,EAAOhnC,KAAKgnC,KAAM70B,EAAQ,CAEpD,KADA1K,EAAUxM,EAAOwoB,IAAIujB,IACbv/B,GAAWxM,GACfA,EAAS+E,KAAK2D,UAAUwO,GACpBlX,YAAkBi8C,KAClBzvC,EAAUxM,EAAOwoB,IAAIujB,GAG7B,OAAOhhC,GAAMyB,EAASxM,MAG1B2zD,EAAkBD,EAAQjuD,QAC1BC,KAAM,SAAU1F,EAAQ+rC,EAAMvkC,GAC1B,GAAImE,GAAO5G,IACX2uD,GAAQ1qD,GAAGtD,KAAKwH,KAAKvB,EAAM3L,EAAQ+rC,GACnCpgC,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,KAGX0pD,EAASv1D,EAAM6J,QACfC,KAAM,SAAU5I,EAASs0D,EAAUjsD,GAC/BJ,KAAKjI,QAAUA,EACfiI,KAAKqsD,SAAWA,EAChBrsD,KAAKI,QAAUA,GAEnBgH,KAAM,SAAU6mD,EAAShe,GACrB,GAAIrpC,GAAO5G,IACXiuD,GAAUhe,EAAYge,EAAQhe,GAAage,EAC3CA,EAAQ7mD,KAAKugC,EAAQ,SAAU1/B,GAC3BrB,EAAK4Q,QAAQy4B,GAAahoC,KAE9BrB,EAAK4Q,QAAQy4B,IAEjBnqB,QAAS,eAGTwpC,EAAclD,EAAO1rD,QACrBstC,SAAU,WACN,GAAIA,GAAWhuC,KAAKjI,QAAQiK,aAAa,cAAgBhC,KAAKjI,QAAQmH,MAAQ,MAC9E,OAAO8uC,GAASlxC,eAEpBozD,YAAa,WACT,MAAOlwD,MAAKmwD,YAAYnwD,KAAKjI,QAAQ6F,MAAOoC,KAAKguC,aAErDmiB,YAAa,SAAUvyD,EAAOowC,GAkB1B,MAjBgB,QAAZA,EACApwC,EAAQ1F,EAAMwe,UAAU9Y,EAAO,cACZ,kBAAZowC,EACPpwC,EAAQ1F,EAAMwe,UAAU9Y,GACpB,sBACA,qBAEe,UAAZowC,EACPpwC,EAAQ1F,EAAMiK,WAAWvE,GACN,WAAZowC,IACPpwC,EAAQA,EAAMd,cAEVc,EAD4B,OAA5B1F,EAAMiK,WAAWvE,KACD1F,EAAMiK,WAAWvE,GAED,SAAxBA,EAAMd,eAGfc,KAGf4xD,EAAQtsD,KAAOkpD,EAAO1rD,QAClB8W,QAAS,SAAUzY,GACfiB,KAAKjI,QAAQ2lB,aAAa3e,EAAKiB,KAAKqsD,SAASnpD,KAAKnE,GAAK0kB,UAG/D+rC,EAAQv3D,IAAMm0D,EAAO1rD,QACjBC,KAAM,SAAU5I,EAASs0D,EAAUjsD,GAC/BgsD,EAAOnoD,GAAGtD,KAAKwH,KAAKnI,KAAMjI,EAASs0D,EAAUjsD,GAC7CJ,KAAKqB,YAETmW,QAAS,SAAUvZ,GACf,GAAIlG,GAAUrB,EAAEsJ,KAAKjI,SAAUk2D,EAAUjuD,KAAKqsD,SAASp0D,IAAIgG,GAAYpE,EAAWmG,KAAKqB,QAAQpD,GAAagwD,EAAQxqC,KAChH5pB,GACA9B,EAAQuC,SAAS2D,GAEjBlG,EAAQutC,YAAYrnC,MAIhCuxD,EAAQ11D,MAAQsyD,EAAO1rD,QACnB8W,QAAS,SAAUzY,GACfiB,KAAKjI,QAAQ+B,MAAMiF,GAAOiB,KAAKqsD,SAASvyD,MAAMiF,GAAK0kB,OAAS,MAGpE+rC,EAAQpwC,QAAUgtC,EAAO1rD,QACrB8W,QAAS,WACDxX,KAAKqsD,SAASjtC,QAAQqE,MACtBzjB,KAAKjI,QAAQm3D,gBAAgB,YAE7BlvD,KAAKjI,QAAQ2lB,aAAa,WAAY,eAIlD8xC,EAAQY,SAAWhE,EAAO1rD,QACtB8W,QAAS,WACDxX,KAAKqsD,SAAS+D,SAAS3sC,MACvBzjB,KAAKjI,QAAQ2lB,aAAa,WAAY,YAEtC1d,KAAKjI,QAAQm3D,gBAAgB,eAIzCM,EAAQlsD,SAAW8oD,EAAO1rD,QACtB8W,QAAS,WACDxX,KAAKqsD,SAAS/oD,SAASmgB,MACvBzjB,KAAKjI,QAAQ2lB,aAAa,WAAY,YAEtC1d,KAAKjI,QAAQm3D,gBAAgB,eAIzCM,EAAQ9nD,OAAS0kD,EAAO1rD,QACpBC,KAAM,SAAU5I,EAASs0D,EAAUjsD,GAC/BgsD,EAAOnoD,GAAGtD,KAAKwH,KAAKnI,KAAMjI,EAASs0D,EAAUjsD,GAC7CJ,KAAKsH,aAETkQ,QAAS,SAAUzY,GACf,GAAIhH,GAAUrB,EAAEsJ,KAAKjI,SAAUk2D,EAAUjuD,KAAKqsD,SAAS3kD,OAAO3I,GAAM0I,EAAUzH,KAAKsH,SAASvI,EACxF0I,IACA1P,EAAQ6xB,IAAI7qB,EAAK0I,GAErBA,EAAUzH,KAAKsH,SAASvI,GAAOkvD,EAAQxqC,MACvC1rB,EAAQ2N,GAAG3G,EAAKkvD,EAAQhzD,OAAQwM,IAEpCqe,QAAS,WACL,GAA+Bre,GAA3B1P,EAAUrB,EAAEsJ,KAAKjI,QACrB,KAAK0P,IAAWzH,MAAKsH,SACjBvP,EAAQ6xB,IAAIniB,EAASzH,KAAKsH,SAASG,OAI/C+nD,EAAQp6B,KAAOg3B,EAAO1rD,QAClB8W,QAAS,WAAA,GACD4d,GAAOp1B,KAAKqsD,SAASj3B,KAAK3R,MAC1B4sC,EAAarwD,KAAKjI,QAAQiK,aAAa,gBAAkB,EACjD,OAARozB,IACAA,EAAO,IAEX1+B,EAAEsJ,KAAKjI,SAASq9B,KAAKl9B,EAAMqR,SAAS6rB,EAAMi7B,OAGlDb,EAAQhsD,QAAU4oD,EAAO1rD,QACrB8W,QAAS,WAEDxX,KAAKjI,QAAQ+B,MAAMulB,QADnBrf,KAAKqsD,SAAS7oD,QAAQigB,MACO,GAEA,UAIzC+rC,EAAQc,UAAYlE,EAAO1rD,QACvB8W,QAAS,WAIDxX,KAAKjI,QAAQ+B,MAAMulB,QAHlBrf,KAAKqsD,SAASiE,UAAU7sC,MAGI,OAFA,MAMzC+rC,EAAQ9sD,KAAO0pD,EAAO1rD,QAClB8W,QAAS,WACLxX,KAAKjI,QAAQ6f,UAAY5X,KAAKqsD,SAAS3pD,KAAK+gB,SAGpD+rC,EAAQ5xD,MAAQ0xD,EAAY5uD,QACxBC,KAAM,SAAU5I,EAASs0D,EAAUjsD,GAC/BkvD,EAAYrrD,GAAGtD,KAAKwH,KAAKnI,KAAMjI,EAASs0D,EAAUjsD,GAClDJ,KAAKokD,QAAUp+C,EAAMhG,KAAK0oC,OAAQ1oC,MAClCA,KAAKqH,UAAYjH,EAAQmuD,aAAe5mB,EACxCjxC,EAAEsJ,KAAKjI,SAAS2N,GAAG1F,KAAKqH,UAAWrH,KAAKokD,SACxCpkD,KAAKuwD,aAAc,GAEvB7nB,OAAQ,WACJ1oC,KAAKuwD,YAAcvwD,KAAKqH,WAAasgC,EACrC3nC,KAAKqsD,SAASoD,GAAO/rC,IAAI1jB,KAAKkwD,eAC9BlwD,KAAKuwD,aAAc,GAEvB/4C,QAAS,WAAA,GAEG5Z,GAIAsB,CALHc,MAAKuwD,cACF3yD,EAAQoC,KAAKqsD,SAASoD,GAAOhsC,MACpB,MAAT7lB,IACAA,EAAQ,IAERsB,EAAOc,KAAKguC,WACJ,QAAR9uC,EACAtB,EAAQ1F,EAAMqR,SAAS3L,EAAO,cACf,kBAARsB,IACPtB,EAAQ1F,EAAMqR,SAAS3L,EAAO,wBAElCoC,KAAKjI,QAAQ6F,MAAQA,GAEzBoC,KAAKuwD,aAAc,GAEvBzqC,QAAS,WACLpvB,EAAEsJ,KAAKjI,SAAS6xB,IAAI5pB,KAAKqH,UAAWrH,KAAKokD,YAGjDoL,EAAQv0D,OAASmxD,EAAO1rD,QACpBC,KAAM,SAAU5I,EAASs0D,EAAUjsD,GAC/BgsD,EAAOnoD,GAAGtD,KAAKwH,KAAKnI,KAAMjI,EAASs0D,EAAUjsD,EAC7C,IAAInF,GAAS+E,KAAKqsD,SAASpxD,OAAOwoB,KAC9BxoB,aAAkB/C,GAAMsD,KAAKE,YAAc0E,EAAQquD,YAAa,GAChExzD,EAAO6rD,SAGftvC,QAAS,SAAUvP,GACf,GAAIrB,GAAO5G,KAAM/E,EAAS2L,EAAKylD,SAASpxD,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,EAAQm+C,QAAQ,IACjBn+C,EAAQ+f,YAAYva,SAASma,cAAc,UAE/C3f,EAAUA,EAAQm+C,QAAQ,IAEvBn+C,GAEX0K,SAAU,WACN,GAAIrC,GAAUJ,KAAKI,QAASqC,EAAWrC,EAAQqC,SAAUY,EAAWrD,KAAK2nB,YAAYtkB,SAASvG,aAiB9F,OAhBK2F,KAGOA,EAFQ,UAAZY,EACIjD,EAAQkuD,YAAcluD,EAAQw2C,UACnB1+C,EAAM6Q,OAAO,yCAA0C3I,EAAQkuD,YAAcluD,EAAQw2C,UAAWx2C,EAAQw2C,WAAax2C,EAAQkuD,YAE7H,2BAEI,SAAZjrD,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,EAAQy4D,WAAU,GAAQC,EAAY14D,EAAQ4C,SAASwX,EAE5H,IADAzb,EAAEyF,GAAOuG,KAAKxK,EAAMqQ,OAAOvI,KAAKyC,WAAY+jB,IACxCrqB,EAAMxB,SAAS/C,OAEf,IADA+L,EAAU3D,KAAKqsD,SAASpxD,OAAO6xD,WAC1BnvD,EAAM,EAAG/F,EAAS4uB,EAAM5uB,OAAQ+F,EAAM/F,EAAQ+F,IAC/C4zB,EAAQp1B,EAAMxB,SAAS,GACvB5C,EAAQ24D,aAAan/B,EAAOk/B,GAAa,MACzC7D,EAAYr7B,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,GAC7B66C,EAAkBz7B,GAAO,GACrBA,EAAM/S,YAAczmB,GACpBA,EAAQigB,YAAYuZ,IAIhChpB,OAAQ,WACJ,GAAyC5E,GAAShG,EAAK/F,EAAnDqD,EAAS+E,KAAKqsD,SAASpxD,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,KAAKqsD,SAAS5pD,UAGd,GAFA2sD,EAAsBr3D,GAAS,GAC/BrB,EAAEqB,GAAS2K,KAAK1C,KAAKqsD,SAAS5pD,SAAS8F,OAAOtN,IAC1ClD,EAAQ4C,SAAS/C,OAEjB,IADA+L,EAAU3D,KAAKqsD,SAASpxD,OAAO6xD,WAC1BnvD,EAAM,EAAG/F,EAASqD,EAAOrD,OAAQ+F,EAAM/F,EAAQ+F,IAChDivD,EAAY70D,EAAQ4C,SAASgD,GAAM1C,EAAO0C,GAAMqC,KAAKI,QAAQ0mB,OAAQ7rB,EAAO0C,IAAMuY,OAAOvS,QAIjGjN,GAAEqB,GAAS2K,KAAKxK,EAAMqQ,OAAO9F,EAAUxH,OAInDu0D,EAAQ1vD,OACJ6wD,QAASrB,EAAY5uD,QACjBC,KAAM,SAAU5I,EAASs0D,EAAUjsD,GAC/BkvD,EAAYrrD,GAAGtD,KAAKwH,KAAKnI,KAAMjI,EAASs0D,EAAUjsD,GAClDJ,KAAKokD,QAAUp+C,EAAMhG,KAAK0oC,OAAQ1oC,MAClCtJ,EAAEsJ,KAAKjI,SAAS2wC,OAAO1oC,KAAKokD,UAEhC1b,OAAQ,WAAA,GAOIztC,GACAkX,EAIarX,EAXjB/C,EAAUiI,KAAKjI,QACf6F,EAAQoC,KAAKpC,OACjB,IAAoB,SAAhB7F,EAAQmH,KACRtB,EAAQoC,KAAKkwD,cACblwD,KAAKqsD,SAASuD,GAASlsC,IAAI9lB,OACxB,IAAoB,YAAhB7F,EAAQmH,KAGf,GAFIjE,EAAS+E,KAAKqsD,SAASuD,GAASnsC,MAEhCxoB,YAAkBM,GAAiB,CAEnC,GADAqC,EAAQoC,KAAKkwD,cACTtyD,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,MAAKqsD,SAASuD,GAASlsC,IAAI9lB,IAIvC4Z,QAAS,WAAA,GAIOrF,GAGSrX,EANjB8C,EAAQoC,KAAKqsD,SAASuD,GAASnsC,MAAOxoB,EAAS2C,EAAOsB,EAAOc,KAAKguC,WAAYj2C,EAAUiI,KAAKjI,OACjG,IAAoB,YAAhBA,EAAQmH,KACR,GAAIjE,YAAkBM,GAAiB,CAGnC,GAFI4W,KACJvU,EAAQoC,KAAKkwD,cACTtyD,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,GAAQ44D,QAAUx+C,GAAS,MAE3Bpa,GAAQ44D,QAAU11D,MAEC,SAAhBlD,EAAQmH,MAA4B,MAATtB,IACtB,QAARsB,EACAtB,EAAQ1F,EAAMqR,SAAS3L,EAAO,cACf,kBAARsB,IACPtB,EAAQ1F,EAAMqR,SAAS3L,EAAO,wBAG9B7F,EAAQ44D,QADR54D,EAAQ6F,QAAUA,GAAAA,IAO9BA,MAAO,WACH,GAAI7F,GAAUiI,KAAKjI,QAAS6F,EAAQ7F,EAAQ6F,KAI5C,OAHoB,YAAhB7F,EAAQmH,OACRtB,EAAQ7F,EAAQ44D,SAEb/yD,GAEXkoB,QAAS,WACLpvB,EAAEsJ,KAAKjI,SAAS6xB,IAAI+d,EAAQ3nC,KAAKokD,aAI7CoL,EAAQ16B,QACJ75B,OAAQu0D,EAAQv0D,OAAOyF,QACnB8W,QAAS,SAAUvP,GAAV,GAYe82B,GAXhBn4B,EAAO5G,KAAM/E,EAAS2L,EAAKylD,SAASpxD,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,EAAKylD,SAASzuD,OACVgJ,EAAKylD,SAASzuD,QACVmhC,EAAMyuB,EAAwB5mD,EAAKylD,SAASzuD,MAAM6lB,MAAO/sB,EAAEkQ,EAAK7O,SAASyD,KAAK,eACtE,OAARujC,EACAn4B,EAAK7O,QAAQ64D,iBAEbhqD,EAAK7O,QAAQ6F,MAAQmhC,KAMrCn4B,EAAK2B,YAIjB3K,MAAO0xD,EAAY5uD,QACfC,KAAM,SAAUyf,EAAQisC,EAAUjsD,GAC9BkvD,EAAYrrD,GAAGtD,KAAKwH,KAAKnI,KAAMogB,EAAQisC,EAAUjsD,GACjDJ,KAAKokD,QAAUp+C,EAAMhG,KAAK0oC,OAAQ1oC,MAClCtJ,EAAEsJ,KAAKjI,SAAS2wC,OAAO1oC,KAAKokD,UAEhC8L,YAAa,WAAA,GAGLtyD,GAAOkE,EAAQnE,EAAK/F,EAFpBo2C,EAAWhuC,KAAKguC,WAChB97B,IAEJ,KAAKvU,EAAM,EAAG/F,EAASoI,KAAKjI,QAAQqI,QAAQxI,OAAQ+F,EAAM/F,EAAQ+F,IAC9DmE,EAAS9B,KAAKjI,QAAQqI,QAAQzC,GAC1BmE,EAAO+uD,WACPjzD,EAAQkE,EAAOouC,WAAWtyC,MAEtBA,EADAA,GAASA,EAAM+3C,UACP7zC,EAAOlE,MAEPkE,EAAOszB,KAEnBljB,EAAOpK,KAAK9H,KAAKmwD,YAAYvyD,EAAOowC,IAG5C,OAAO97B,IAEXw2B,OAAQ,WAAA,GACqCztC,GAAiH6G,EAAQgvD,EAAYlzD,EAAOD,EAAK/F,EAwB1Km5D,EACAz4D,EAzBZ4Z,KAAana,EAAUiI,KAAKjI,QAAiBgmB,EAAQ/d,KAAKI,QAAQkuD,YAActuD,KAAKI,QAAQw2C,UAAW4X,EAAiBxuD,KAAKI,QAAQouD,cAC1I,KAAK7wD,EAAM,EAAG/F,EAASG,EAAQqI,QAAQxI,OAAQ+F,EAAM/F,EAAQ+F,IACzDmE,EAAS/J,EAAQqI,QAAQzC,GACrBmE,EAAO+uD,WACPjzD,EAAQkE,EAAOouC,WAAWtyC,MAEtBA,EADAA,GAASA,EAAM+3C,UACP7zC,EAAOlE,MAEPkE,EAAOszB,KAGfljB,EAAOpK,KADPiW,EACYngB,EAEAoC,KAAKmwD,YAAYvyD,EAAOoC,KAAKguC,aAIrD,IAAIjwB,EAKA,IAJA9iB,EAAS+E,KAAKqsD,SAASpxD,OAAOwoB,MAC1BxoB,YAAkB/C,GAAMsD,KAAKE,aAC7BT,EAASA,EAAO0tB,QAEfmoC,EAAa,EAAGA,EAAa5+C,EAAOta,OAAQk5D,IAC7C,IAAKnzD,EAAM,EAAG/F,EAASqD,EAAOrD,OAAQ+F,EAAM/F,EAAQ+F,IAGhD,GAFIozD,EAAc91D,EAAO0C,GAAK8lB,IAAI1F,GAC9BzlB,EAAey4D,EAAP9mD,KAAwBiI,EAAO4+C,GAChC,CACP5+C,EAAO4+C,GAAc71D,EAAO0C,EAC5B,OAKhBC,EAAQoC,KAAKqsD,SAASoD,GAAOhsC,MACzB7lB,YAAiBrC,GACjBqC,EAAMwK,OAAOtB,MAAMlJ,GACf,EACAA,EAAMhG,QACRse,OAAOhE,IAITlS,KAAKqsD,SAASoD,GAAO/rC,IAHb8qC,KAAmB5wD,YAAiBs5C,IAA8B,OAAVt5C,GAAkBA,IAAUhH,IAAcmnB,EAGjF7L,EAAO,GAAGuR,IAAI1F,GAFd7L,EAAO,KAKxCsF,QAAS,WAAA,GACDw5C,GAAsNC,EAKjNH,EALQ/4D,EAAUiI,KAAKjI,QAASqI,EAAUrI,EAAQqI,QAASxC,EAAQoC,KAAKqsD,SAASoD,GAAOhsC,MAAOvR,EAAStU,EAAOmgB,EAAQ/d,KAAKI,QAAQkuD,YAActuD,KAAKI,QAAQw2C,UAAW2M,GAAQ,EAAOrkD,EAAOc,KAAKguC,UAK9M,KAJM97B,YAAkB3W,KACpB2W,EAAS,GAAI3W,IAAiBqC,KAElC7F,EAAQ64D,iBACCE,EAAa,EAAGA,EAAa5+C,EAAOta,OAAQk5D,IAUjD,IATAlzD,EAAQsU,EAAO4+C,GACX/yC,GAASngB,YAAiBs5C,KAC1Bt5C,EAAQA,EAAM6lB,IAAI1F,IAEV,QAAR7e,EACAtB,EAAQ1F,EAAMqR,SAAS2I,EAAO4+C,GAAa,cAC5B,kBAAR5xD,IACPtB,EAAQ1F,EAAMqR,SAAS2I,EAAO4+C,GAAa,wBAE1CE,EAAc,EAAGA,EAAc5wD,EAAQxI,OAAQo5D,IAChDC,EAAc7wD,EAAQ4wD,GAAapzD,MACf,KAAhBqzD,GAAgC,KAAVrzD,IACtBqzD,EAAc7wD,EAAQ4wD,GAAa57B,MAE1B,MAATx3B,GAAiBqzD,GAAerzD,GAAAA,IAChCwC,EAAQ4wD,GAAaH,UAAW,EAChCtN,GAAQ,IAKxBz9B,QAAS,WACLpvB,EAAEsJ,KAAKjI,SAAS6xB,IAAI+d,EAAQ3nC,KAAKokD,aAgF7CoL,EAAQxsD,QACJ0E,OAAQ0kD,EAAO1rD,QACXC,KAAM,SAAUqC,EAAQqpD,EAAUjsD,GAC9BgsD,EAAOnoD,GAAGtD,KAAKwH,KAAKnI,KAAMgD,EAAOjL,QAAQ,GAAIs0D,EAAUjsD,GACvDJ,KAAKgD,OAASA,EACdhD,KAAKsH,aAETkQ,QAAS,SAAUzY,GACf,GAAIkvD,GAAUjuD,KAAKqsD,SAAS3kD,OAAO3I,GAAM0I,EAAUzH,KAAKsH,SAASvI,EAC7D0I,IACAzH,KAAKgD,OAAO6E,OAAO9I,EAAK0I,GAE5BA,EAAUwmD,EAAQxqC,MAClBzjB,KAAKsH,SAASvI,GAAO,SAAUkJ,GAC3BA,EAAEzM,KAAOyyD,EAAQhzD,OACjBwM,EAAQQ,GACJA,EAAEzM,OAASyyD,EAAQhzD,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,OAItDkpD,QAASvE,EAAO1rD,QACZC,KAAM,SAAUqC,EAAQqpD,EAAUjsD,GAC9BgsD,EAAOnoD,GAAGtD,KAAKwH,KAAKnI,KAAMgD,EAAOjL,QAAQ,GAAIs0D,EAAUjsD,GACvDJ,KAAKgD,OAASA,EACdhD,KAAKokD,QAAUp+C,EAAMhG,KAAK0oC,OAAQ1oC,MAClCA,KAAKgD,OAAOoE,KAAKugC,EAAQ3nC,KAAKokD,UAElC1b,OAAQ,WACJ1oC,KAAKqsD,SAASuD,GAASlsC,IAAI1jB,KAAKpC,UAEpC4Z,QAAS,WACLxX,KAAKgD,OAAOkuD,MAAMlxD,KAAKqsD,SAASuD,GAASnsC,SAAU,IAEvD7lB,MAAO,WACH,GAAI7F,GAAUiI,KAAKjI,QAAS6F,EAAQ7F,EAAQ6F,KAI5C,OAHa,MAATA,GAA0B,OAATA,IACjBA,EAAQ7F,EAAQ44D,SAEb/yD,GAEXkoB,QAAS,WACL9lB,KAAKgD,OAAO6E,OAAO8/B,EAAQ3nC,KAAKokD,YAGxC5gD,QAAS4oD,EAAO1rD,QACZC,KAAM,SAAUqC,EAAQqpD,EAAUjsD,GAC9BgsD,EAAOnoD,GAAGtD,KAAKwH,KAAKnI,KAAMgD,EAAOjL,QAAQ,GAAIs0D,EAAUjsD,GACvDJ,KAAKgD,OAASA,GAElBwU,QAAS,WACL,GAAIhU,GAAUxD,KAAKqsD,SAAS7oD,QAAQigB,KACpCzjB,MAAKgD,OAAO3J,QAAQ,GAAGS,MAAMulB,QAAU7b,EAAU,GAAK,UAG9D8sD,UAAWlE,EAAO1rD,QACdC,KAAM,SAAUqC,EAAQqpD,EAAUjsD,GAC9BgsD,EAAOnoD,GAAGtD,KAAKwH,KAAKnI,KAAMgD,EAAOjL,QAAQ,GAAIs0D,EAAUjsD,GACvDJ,KAAKgD,OAASA,GAElBwU,QAAS,WACL,GAAI84C,GAAYtwD,KAAKqsD,SAASiE,UAAU7sC,KACxCzjB,MAAKgD,OAAO3J,QAAQ,GAAGS,MAAMulB,QAAUixC,EAAY,OAAS,MAGpElxC,QAASgtC,EAAO1rD,QACZC,KAAM,SAAUqC,EAAQqpD,EAAUjsD,GAC9BgsD,EAAOnoD,GAAGtD,KAAKwH,KAAKnI,KAAMgD,EAAOjL,QAAQ,GAAIs0D,EAAUjsD,GACvDJ,KAAKgD,OAASA,GAElBwU,QAAS,WACDxX,KAAKgD,OAAOyc,QACZzf,KAAKgD,OAAOyc,OAAOzf,KAAKqsD,SAASjtC,QAAQqE,UAIrDngB,SAAU8oD,EAAO1rD,QACbC,KAAM,SAAUqC,EAAQqpD,EAAUjsD,GAC9BgsD,EAAOnoD,GAAGtD,KAAKwH,KAAKnI,KAAMgD,EAAOjL,QAAQ,GAAIs0D,EAAUjsD,GACvDJ,KAAKgD,OAASA,GAElBwU,QAAS,WACDxX,KAAKgD,OAAOyc,QACZzf,KAAKgD,OAAOyc,QAAQzf,KAAKqsD,SAAS/oD,SAASmgB,UAIvDxoB,OAAQixD,EAAkB,SAAU,aAAc,iBAClDtuD,MAAOwuD,EAAO1rD,QACVC,KAAM,SAAUqC,EAAQqpD,EAAUjsD,GAC9BgsD,EAAOnoD,GAAGtD,KAAKwH,KAAKnI,KAAMgD,EAAOjL,QAAQ,GAAIs0D,EAAUjsD,GACvDJ,KAAKgD,OAASA,EACdhD,KAAKokD,QAAU1tD,EAAEsP,MAAMhG,KAAK0oC,OAAQ1oC,MACpCA,KAAKgD,OAAO5L,MAAMuwC,EAAQ3nC,KAAKokD,QAC/B,IAAIxmD,GAAQoC,KAAKqsD,SAASzuD,MAAM6lB,KAChCzjB,MAAKmxD,0BAA4B/wD,EAAQouD,iBAA4B,MAAT5wD,GAAiBA,YAAiBs5C,IAC9Fl3C,KAAKoxD,wBAA0BxzD,YAAiBrC,GAChDyE,KAAKuwD,aAAc,GAEvBc,QAAS,WACL,GAAIp2D,EACJ,OAAI+E,MAAKgD,OAAOyjB,WACZxrB,EAAS+E,KAAKgD,OAAOyjB,WACjBxrB,GAAUA,YAAkBi8C,KACpBj8C,IAGZ+E,KAAKqsD,SAASpxD,SACdA,EAAS+E,KAAKqsD,SAASpxD,OAAOwoB,SAE7BxoB,GAAUA,YAAkB/C,GAAMsD,KAAKE,cACxCT,EAAS+E,KAAKgD,OAAO4hB,WAAWwB,YAE7BnrB,IAEXytC,OAAQ,WACJ,GAA6MooB,GAAYQ,EAA0BC,EAAYR,EAAapzD,EAAK/F,EAAQqD,EAArR2C,EAAQoC,KAAKgD,OAAOpF,QAASmgB,EAAQ/d,KAAKI,QAAQqtD,gBAAkBztD,KAAKI,QAAQoxD,cAAezrD,EAAmC,mBAAzBwD,EAASpB,KAAKvK,GAA6B6zD,EAAqBzxD,KAAKmxD,yBAAmDj/C,IAEtO,IADAlS,KAAKuwD,aAAc,EACfxyC,EACA,GAAc,KAAVngB,IAAiB6zD,GAAsBzxD,KAAKI,QAAQouD,gBACpD5wD,EAAQ,SACL,CAMH,IALA3C,EAAS+E,KAAKqxD,UACVtrD,IACAurD,EAAc1zD,EAAMhG,OACpBsa,EAAStU,EAAM4I,MAAM,IAEpB7I,EAAM,EAAG/F,EAASqD,EAAOrD,OAAQ+F,EAAM/F,EAAQ+F,IAGhD,GAFA4zD,EAAat2D,EAAO0C,GACpBozD,EAAcQ,EAAW9tC,IAAI1F,GACzBhY,GACA,IAAK+qD,EAAa,EAAGA,EAAaQ,EAAaR,IAC3C,GAAIC,GAAe7+C,EAAO4+C,GAAa,CACnC5+C,EAAO4+C,GAAcS,CACrB,YAGL,IAAIR,GAAenzD,EAAO,CAC7BA,EAAQ6zD,EAAqBF,EAAaR,CAC1C,OAGJ7+C,EAAO,KAEHtU,EADAoC,KAAKoxD,wBACGl/C,EACDu/C,IAAuB1zC,EACtB7L,EAAO,GAEPA,EAAO,GAAGuR,IAAI1F,IAKtC/d,KAAKqsD,SAASzuD,MAAM8lB,IAAI9lB,GACxBoC,KAAKuwD,aAAc,GAEvB/4C,QAAS,WAAA,GAEGxU,GACA5C,EACAw2C,EACA0X,EACA1wD,EACAw3B,EACAz3B,EAAS/F,EACTsa,CARR,KAAKlS,KAAKuwD,YAAa,CAYnB,GAXIvtD,EAAShD,KAAKgD,OACd5C,EAAU4C,EAAO5C,QACjBw2C,EAAYx2C,EAAQoxD,cACpBlD,EAAaluD,EAAQqtD,gBAAkB7W,EACvCh5C,EAAQoC,KAAKqsD,SAASzuD,MAAM6lB,MAC5B2R,EAAOh1B,EAAQg1B,MAAQ,GACvBz3B,EAAM,EACNuU,KACAtU,IAAUhH,IACVgH,EAAQ,MAER0wD,EACA,GAAI1wD,YAAiBrC,GAAiB,CAClC,IAAK3D,EAASgG,EAAMhG,OAAQ+F,EAAM/F,EAAQ+F,IACtCuU,EAAOvU,GAAOC,EAAMD,GAAK8lB,IAAI6qC,EAEjC1wD,GAAQsU,MACDtU,aAAiBs5C,KACxB9hB,EAAOx3B,EAAM6lB,IAAImzB,GACjBh5C,EAAQA,EAAM6lB,IAAI6qC,GAGtBluD,GAAQquD,YAAa,GAAUruD,EAAQsxD,cAAe1uD,EAAO2uD,UAAa3uD,EAAO2uD,SAASC,QAU1F5uD,EAAOpF,MAAMA,IATTg5C,IAAc0X,GAAel5B,IAC7BA,EAAOx3B,GAENw3B,IAASx3B,GAAmB,IAAVA,IAAgBwC,EAAQouD,eAG3CxrD,EAAO6uD,WAAWj0D,EAAOw3B,GAFzBpyB,EAAOpF,MAAMA,IAQzBoC,KAAKuwD,aAAc,GAEvBzqC,QAAS,WACL9lB,KAAKgD,OAAO6E,OAAO8/B,EAAQ3nC,KAAKokD,YAGxC0N,OAAShC,aAAc5D,EAAkB,eAAgB,eAAgB,8BACzEmB,aACIzvD,MAAOwuD,EAAO1rD,QACVC,KAAM,SAAUqC,EAAQqpD,EAAUjsD,GAC9BgsD,EAAOnoD,GAAGtD,KAAKwH,KAAKnI,KAAMgD,EAAOjL,QAAQ,GAAIs0D,EAAUjsD,GACvDJ,KAAKgD,OAASA,EACdhD,KAAKokD,QAAU1tD,EAAEsP,MAAMhG,KAAK0oC,OAAQ1oC,MACpCA,KAAKgD,OAAO5L,MAAMuwC,EAAQ3nC,KAAKokD,SAC/BpkD,KAAKuwD,aAAc,GAEvB7nB,OAAQ,WAAA,GAMIxgB,GACA4hB,EACAhvC,EAAOi3D,EACPC,EACAlmB,EACAmmB,EACAC,EACA3O,EAZJ38C,EAAO5G,KAAMmyD,EAAYvrD,EAAKylD,SAASoD,GAAOhsC,MAAO+qC,EAAiB5nD,EAAKxG,QAAQouD,eAAgB4D,EAAY5D,EAAiB5nD,EAAK5D,OAAOpF,QAAUgJ,EAAK5D,OAAOmjB,YAClKpI,EAAQ/d,KAAKI,QAAQqtD,gBAAkBztD,KAAKI,QAAQoxD,aAGxD,IAFAY,EAAYA,EAAU5rD,MAAM,GAC5BI,EAAK2pD,aAAc,EACf4B,YAAqB52D,GAAiB,CAStC,IARI2sB,KACA4hB,EAAYsoB,EAAUx6D,OACtBkD,EAAI,EAAGi3D,EAAI,EACXC,EAAMG,EAAUr3D,GAChBgxC,GAAO,EAIJkmB,IAAQp7D,GAAW,CAEtB,IADA2sD,GAAQ,EACHwO,EAAI,EAAGA,EAAIjoB,EAAWioB,IAQvB,GAPIvD,EACA1iB,EAAOsmB,EAAUL,IAAMC,GAEvBE,EAAWE,EAAUL,GACrBG,EAAWA,EAASzuC,IAAMyuC,EAASzuC,IAAI1F,GAASm0C,EAChDpmB,EAAOomB,IAAaF,EAAIvuC,IAAMuuC,EAAIvuC,IAAI1F,GAASi0C,IAE/ClmB,EAAM,CACNsmB,EAAUhqD,OAAO2pD,EAAG,GACpBjoB,GAAa,EACbyZ,GAAQ,CACR,OAGHA,EAKDzoD,GAAK,GAJLotB,EAAOpgB,KAAKkqD,GACZzC,EAAY4C,EAAWr3D,EAAG,GAC1Bm3D,EAAcn3D,GAIlBk3D,EAAMG,EAAUr3D,GAEpBy0D,EAAY4C,EAAWA,EAAUv6D,OAAQ,EAAGw6D,GACxClqC,EAAOtwB,QACPu6D,EAAUnqD,QAAQ,UACd2uB,OAAQ,SACRnQ,MAAO0B,EACP/V,MAAO8/C,IAGXG,EAAUx6D,QACVu6D,EAAUnqD,QAAQ,UACd2uB,OAAQ,MACRnQ,MAAO4rC,EACPjgD,MAAOggD,EAAUv6D,OAAS,QAIlCgP,GAAKylD,SAASoD,GAAO/rC,IAAI0uC,EAE7BxrD,GAAK2pD,aAAc,GAEvB/4C,QAAS,WACL,IAAKxX,KAAKuwD,YAAa,CACnB,GAAqK34D,GAAqBy6D,EAAtLjyD,EAAUJ,KAAKI,QAAS4C,EAAShD,KAAKgD,OAAQ+a,EAAQ3d,EAAQqtD,gBAAkBrtD,EAAQoxD,cAAe5zD,EAAQoC,KAAKqsD,SAASzuD,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,IACtC00D,EAAgBz0D,EAAMD,GACtBuU,EAAOvU,GAAO00D,EAAc5uC,IAAM4uC,EAAc5uC,IAAI1F,GAASs0C,CAEjEz0D,GAAQsU,MACDtU,aAAiBs5C,KACxBt5C,EAAQA,EAAM6lB,IAAI1F,GAGtB3d,GAAQquD,YAAa,GAASruD,EAAQouD,kBAAmB,GAASxrD,EAAOsvD,WAGzEtvD,EAAOpF,MAAMA,GAFboF,EAAO6uD,WAAWr2D,EAAMoC,KAMpCkoB,QAAS,WACL9lB,KAAKgD,OAAO6E,OAAO8/B,EAAQ3nC,KAAKokD,aAI5CmO,WACIt3D,OAAQixD,EAAkB,SAAU,aAAc,iBAAiBxrD,QAC/D+rD,UAAW,SAAUxkD,GAAV,GACHtK,GACA/F,EAGA4D,EAAMmI,EAFNX,EAAShD,KAAKgD,OACdujB,EAAWte,EAAEilD,YAAclqD,EAAOwjB,OAEtC,IAAID,EAAS3uB,OAGT,IAFA4D,EAAOyM,EAAEmlD,gBAAkBpqD,EAAOmjB,YAClCxiB,EAAU3D,KAAKqsD,SAASpxD,OAAO6xD,WAC1BnvD,EAAM,EAAG/F,EAAS4D,EAAK5D,OAAQ+F,EAAM/F,EAAQ+F,IAC9CivD,EAAYrmC,EAAS5oB,GAAMnC,EAAKmC,GAAMqC,KAAK6sD,IAAI5kD,EAAEhG,KAAMzG,EAAKmC,IAAMuY,OAAOvS,SAO7F4rD,EAAc,SAAUiD,EAAK70D,EAAKuqB,EAAQ5mB,GAA5B,GAGVmxD,GACAxvB,EACAyvB,EACAC,EACAxgD,CACJ,IAPA7Q,EAAMA,MACN4mB,EAASA,GAAU,EACfuqC,EAAYnxD,EAAI1J,OAChBqrC,EAAYuvB,EAAI56D,OAChB86D,KAAalsD,MAAM2B,KAAKqqD,EAAK70D,EAAMuqB,GACnCyqC,EAAgBD,EAAQ96D,OAExB66D,EAAW,CAGX,IAFAA,EAAY90D,EAAM80D,EAClBtgD,EAAQ,EACDxU,EAAM80D,EAAW90D,IACpB60D,EAAI70D,GAAO2D,EAAI6Q,GACfA,GAEJqgD,GAAI56D,OAAS66D,MACV,IAAIvqC,EAGP,IAFAsqC,EAAI56D,OAAS+F,EACbuqB,GAAUvqB,EACHA,EAAMuqB,SACFsqC,KAAMtqC,EAGrB,IAAIyqC,EAAe,CAGf,IAFAA,EAAgBh1D,EAAMg1D,EACtBxgD,EAAQ,EACDxU,EAAMg1D,EAAeh1D,IACxB60D,EAAI70D,GAAO+0D,EAAQvgD,GACnBA,GAEJqgD,GAAI56D,OAAS+6D,EAGjB,IADAh1D,EAAM60D,EAAI56D,OACH+F,EAAMslC,SACFuvB,GAAI70D,GACXA,KAGJ+wD,EAAgB73D,EAAM6J,QACtBC,KAAM,SAAUyf,EAAQhgB,GACpBJ,KAAKogB,OAASA,EACdpgB,KAAKI,QAAUA,EACfJ,KAAK4yD,cAETxrD,KAAM,SAAUilD,GACZ,GAAIttD,GAAK8zD,EAAUC,EAAWC,EAAWC,EAAYC,EAAQC,EAAgBlzD,eAAgB2tD,GAAqBwF,EAAkBnzD,KAAKwvD,SACzI,KAAKzwD,IAAOstD,GACJttD,GAAO0wD,EACPoD,GAAW,EACJ9zD,GAAO2wD,EACdoD,GAAY,EACL/zD,GAAO4wD,GAAWuD,EAElBn0D,GAAO6wD,EACdoD,GAAa,EACNj0D,GAAO8wD,EACdoD,GAAS,EAETjzD,KAAKozD,aAAar0D,EAAKstD,EAAU8G,GANjCJ,GAAY,CAShBD,IACA9yD,KAAKozD,aAAa1D,EAAQrD,EAAU8G,GAEpCN,GACA7yD,KAAKozD,aAAa3D,EAAOpD,EAAU8G,GAEnCH,GACAhzD,KAAKozD,aAAaxD,EAASvD,EAAU8G,GAErCJ,IAAcG,GACdlzD,KAAKozD,aAAazD,EAAQtD,EAAU8G,GAEpCF,IAAWC,GACXlzD,KAAKozD,aAAavD,EAAKxD,EAAU8G,IAGzC3D,QAAS,WACL,MAAOA,GAAQxvD,KAAKogB,OAAO/c,SAASvG,oBAExCs2D,aAAc,SAAUlkD,EAAMm9C,EAAU8G,GACpC,GAAiFljB,GAA7EojB,EAASF,EAAgBjkD,IAASsgD,EAAQtgD,GAAO0jD,EAAY5yD,KAAK4yD,UAAsB3E,EAAU5B,EAASn9C,EAC/G,IAAImkD,EAGA,GAFAA,EAAS,GAAIA,GAAOrzD,KAAKogB,OAAQisC,EAAUrsD,KAAKI,SAChDwyD,EAAU9qD,KAAKurD,GACXpF,YAAmBU,GACnB0E,EAAOjsD,KAAK6mD,GACZ2E,EAAU9qD,KAAKmmD,OAEf,KAAKhe,IAAage,GACdoF,EAAOjsD,KAAK6mD,EAAShe,GACrB2iB,EAAU9qD,KAAKmmD,EAAQhe,QAG5B,IAAa,aAAT/gC,EACP,KAAUpG,OAAM,OAASoG,EAAO,oCAAsClP,KAAKogB,OAAO/c,SAASvG,cAAgB,aAGnHgpB,QAAS,WACL,GAAInoB,GAAK/F,EAAQg7D,EAAY5yD,KAAK4yD,SAClC,KAAKj1D,EAAM,EAAG/F,EAASg7D,EAAUh7D,OAAQ+F,EAAM/F,EAAQ+F,IACnDi1D,EAAUj1D,GAAKmoB,aAIvB6nC,EAAsBe,EAAchuD,QACpC8uD,QAAS,WACL,MAAOA,GAAQxsD,OAAOhD,KAAKogB,OAAOhgB,QAAQ8O,KAAKpS,oBAEnDs2D,aAAc,SAAUlkD,EAAMm9C,EAAU8G,GACpC,GAAwFljB,GAApFojB,EAASF,EAAgBjkD,IAASsgD,EAAQxsD,OAAOkM,GAAO0jD,EAAY5yD,KAAK4yD,UAAsB3E,EAAU5B,EAASn9C,EACtH,KAAImkD,EAaA,KAAUvqD,OAAM,OAASoG,EAAO,oCAAsClP,KAAKogB,OAAOhgB,QAAQ8O,KAAO,UAVjG,IAFAmkD,EAAS,GAAIA,GAAOrzD,KAAKogB,OAAQisC,EAAUrsD,KAAKogB,OAAOhgB,SACvDwyD,EAAU9qD,KAAKurD,GACXpF,YAAmBU,GACnB0E,EAAOjsD,KAAK6mD,GACZ2E,EAAU9qD,KAAKmmD,OAEf,KAAKhe,IAAage,GACdoF,EAAOjsD,KAAK6mD,EAAShe,GACrB2iB,EAAU9qD,KAAKmmD,EAAQhe,OAcvC8d,EAAiB,wCAAyCM,EAAmB,MAiKjFn2D,EAAM2P,OAASA,EACf3P,EAAMkP,KAAOA,EACblP,EAAMsD,KAAKg0D,QAAUA,EACrBt3D,EAAMsD,KAAK4wD,OAASA,EACpBl0D,EAAM0uB,OAASA,EACf1uB,EAAMmgC,WAAa,SAAU2gB,GAIzB,MAHMA,aAAkB9B,KACpB8B,EAAS,GAAI9B,GAAiB8B,IAE3BA,GAEX9gD,EAAMo7D,oBAAsB,SAAUjgD,GAElC,QAASkgD,GAAc/3D,GACnB,GAAIV,GAAGH,CACP,KAAKG,EAAI,EAAGA,EAAIU,EAAK5D,OAAQkD,IACzBU,EAAKV,GAAGyuD,gBACR5uD,EAAWa,EAAKV,GAAGH,SACnBA,EAASmsD,QACTtrD,EAAKV,GAAG0rB,MAAQ7rB,EAASa,OACzB+3D,EAAc/3D,EAAKV,GAAG0rB,OAR9B,GAAI5B,GAAa1sB,EAAMsD,KAAKG,uBAAuB6yC,OAAOn7B,EAc1D,OAHAuR,GAAWkiC,QACXyM,EAAc3uC,EAAWppB,QACzBopB,EAAW0xB,MAAM4T,YAActlC,EACxBA,EAAW0xB,QAExB3/C,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,QAAS48D,GAAgB70B,GACrB,IAAKA,EACD,QAEJ,IAAI9qB,GAAU8qB,EAAWrmC,MAAMm7D,MAC/B,QACIv0D,KAAM2U,EAAQ,GACd0mB,UAAW1mB,EAAQ,GACnBvT,QAAwB,YAAfuT,EAAQ,IAxL5B,GACO3b,GAAQvB,OAAOuB,MAAOmM,EAAanM,EAAMmM,WAAYqvD,EAAS,SAAU9oB,EAAO,OAAQ+oB,EAAO,OAAQC,EAAO,OAAQC,EAAmB,kBAAmBC,EAAiB,gBAAiBC,EAAS,SAAUC,EAAS,SAAUC,EAAoB,0BACvPC,EAAO7vD,EAAW3D,QAClBC,KAAM,SAAUwzD,EAAS/zD,GACrB,GAAIwG,GAAO5G,IACXI,GAAUA,MACViE,EAAWJ,GAAGtD,KAAKwH,KAAKvB,GACxBA,EAAKutD,QAAUA,EACfvtD,EAAKid,GAAK3rB,EAAMyrB,OAChB/c,EAAKwd,QAAUhkB,EAAQgkB,SAAW,MAClCxd,EAAKsoC,MAAQ9uC,EAAQ8uC,MACrBtoC,EAAKwtD,MAAQh0D,EAAQtH,QAAS,EAC9BkH,KAAKq0D,cAAgBj0D,EAAQk0D,eAAgB,EAC7C1tD,EAAK2tD,cACL3tD,EAAKQ,MACDwjC,EACA+oB,EACAC,EACAC,EACAC,GACD1zD,IAEPmI,OAAQ,SAAUof,GACd,GAAI/gB,GAAO5G,KAAMw0D,GAAkB5tD,EAAK7O,OAexC,OAdIy8D,KACA5tD,EAAK7O,QAAU6O,EAAK6tD,kBAEpB9sC,GACAjxB,EAAEixB,GAAWmc,OAAOl9B,EAAK7O,SAEzBy8D,IACAt8D,EAAMkP,KAAKR,EAAK7O,QAAS6O,EAAKsoC,OAC9BtoC,EAAKoB,QAAQ4iC,IAEbjjB,IACA/gB,EAAK8tD,cAAcX,GACnBntD,EAAKoB,QAAQ2rD,IAEV/sD,EAAK7O,SAEhBoE,MAAO,WACH,MAAO,IAAIw4D,GAAU30D,OAEzB40D,kBAAmB,WACf,OAAO,GAEXC,kBAAmB,WACf,OAAO,GAEXC,UAAW,WACP90D,KAAKjI,QAAQE,IAAI,UAAW,KAEhC88D,QAAS,aAETC,QAAS,WACLh1D,KAAKc,QAETkkC,iBAAkB,SAAU9lC,GACxBc,KAAKgI,QAAQ6rD,GAAoB30D,KAAMA,KAE3C+lC,gBAAiB,SAAU/lC,GACvBc,KAAKgI,QAAQ8rD,GAAkB50D,KAAMA,KAEzC4B,KAAM,WACFd,KAAK00D,cAAcV,GACnBh0D,KAAKjI,QAAQk9D,SACbj1D,KAAKgI,QAAQ4rD,IAEjB9tC,QAAS,WACL,GAAI/tB,GAAUiI,KAAKjI,OACfA,KACAG,EAAM2P,OAAO9P,GACbG,EAAM4tB,QAAQ/tB,GACdA,EAAQmwB,WAGhBgtC,UAAW,SAAUA,GACjBx+D,EAAEgK,OAAOV,KAAKu0D,WAAYW,IAE9BR,cAAe,SAAUS,GACrB,IAAK,GAAI53C,KAAevd,MAAKu0D,WACzBv0D,KAAKu0D,WAAWh3C,GAAa43C,GAAYn1D,KAAMud,IAGvDk3C,eAAgB,WAAA,GAC2C18D,GAASo8D,EAuBpDn1D,EAvBR4H,EAAO5G,KAAM3G,EAAU,IAAMuN,EAAKwd,QAAU,KAChD,KACI+vC,EAAUz9D,EAAE6G,SAAS63D,eAAexuD,EAAKutD,UAAYvtD,EAAKutD,SACtDA,EAAQ,GAAG/vC,UAAYsvC,IACvBS,EAAUA,EAAQzxD,QAExB,MAAOuF,GACDgsD,EAAkB/5D,KAAK+N,EAAEuc,WACzB2vC,EAAUvtD,EAAKutD,SAyBvB,MAtBuB,gBAAZA,IACPA,EAAUA,EAAQh9D,QAAQ,aAAc,IACpCyP,EAAKytD,gBACLF,EAAUj8D,EAAMuK,SAAS0xD,GAASvtD,EAAKsoC,YAE3Cn3C,EAAUrB,EAAE2C,GAASyqC,OAAOqwB,GACvBvtD,EAAKwtD,QACNr8D,EAAUA,EAAQs9D,cAGtBt9D,EAAUo8D,EACNvtD,EAAKytD,gBACDr1D,EAAStI,EAAEwB,EAAMuK,SAAS/L,EAAE,WAAWotC,OAAO/rC,EAAQoE,OAAM,IAAOuG,QAAQkE,EAAKsoC,YAChFx4C,EAAEoM,SAASvF,SAAUxF,EAAQ,KAC7BA,EAAQu9D,YAAYt2D,GAExBjH,EAAUiH,GAEV4H,EAAKwtD,QACLr8D,EAAUA,EAAQ+gD,QAAQz/C,GAASO,WAGpC7B,KAGX48D,EAAYz8D,EAAMrB,MAAM6J,QACxBC,KAAM,SAAUgoB,GACZjyB,EAAEgK,OAAOV,MACLjI,QAAS4wB,EAAK5wB,QAAQoE,OAAM,GAC5BwiC,WAAYhW,EAAKgW,WACjB9a,GAAI8E,EAAK9E,KAEb8E,EAAK5wB,QAAQ6B,SAASkqC,OAAO9jC,KAAKjI,UAEtCi9D,QAAS,WACLh1D,KAAKjI,QAAQmwB,UAEjB8c,iBAAkBtuC,EAAEkK,KACpBqkC,gBAAiBvuC,EAAEkK,OAEnB20D,EAASrB,EAAKxzD,QACdC,KAAM,SAAUwzD,EAAS/zD,GACrB8zD,EAAKjwD,GAAGtD,KAAKwH,KAAKnI,KAAMm0D,EAAS/zD,GACjCJ,KAAKw1D,eAET7tC,UAAW,SAAU5jB,GACjB,GAAI4jB,GAAY3nB,KAAKw1D,WAAWzxD,EAKhC,OAJK4jB,KACDA,EAAY3nB,KAAKy1D,iBAAiB1xD,GAClC/D,KAAKw1D,WAAWzxD,GAAY4jB,GAEzBA,GAEX+tC,OAAQ,SAAU3xD,EAAU4kB,EAAMgW,GAC9B3+B,KAAK2nB,UAAU5jB,GAAU/J,KAAK2uB,EAAMgW,IAExC82B,iBAAkB,SAAU1xD,GACxB,GAAyD4jB,GAArD6f,EAAOxnC,KAAKuI,SAAUxQ,EAAUyvC,EAAKlgB,KAAKvjB,EAC9C,KAAKhM,EAAQH,QAAU4vC,EAAKztC,GAAGgK,GAAW,CACtC,IAAIyjC,EAAKztC,GAAGgK,GAGR,KAAU+E,OAAM,6CAAgD/E,EAAW,YAF3EhM,GAAUyvC,EASlB,MAJA7f,GAAY,GAAIguC,GAAc59D,GAC9B4vB,EAAUvgB,KAAK,WAAY,SAAUa,GACjCA,EAAE0gB,KAAKpgB,OAAOxQ,KAEX4vB,KAGXiuC,EAAW1B,EAAKxzD,QAChBm1D,OAAQ,SAAUltC,EAAMpL,GACpBoL,EAAK5wB,QAAQuvB,KAAK/J,GAAa+3C,YAAYt1D,KAAKuI,WAEpD0sD,OAAQ,eAGRxB,EAAmB,4BAYnBkC,EAAgBtxD,EAAW3D,QAC3BC,KAAM,SAAUgnB,GACZtjB,EAAWJ,GAAGtD,KAAKwH,KAAKnI,MACxBA,KAAK2nB,UAAYA,EACjB3nB,KAAK0e,WACL1e,KAAK2oB,KAAO,KACZ3oB,KAAK81D,SAAU,GAEnBC,MAAO,WACH/1D,KAAK81D,SAAU,EACf91D,KAAKgI,QAAQ,YAAc2gB,KAAM3oB,KAAK2oB,OACtC3oB,KAAKgI,QAAQ,UAEjBrQ,IAAK,WACDqI,KAAK2oB,KAAKosC,UACV/0D,KAAK2iC,SAASqyB,UACdh1D,KAAK+1D,SAET/7D,KAAM,SAAU2uB,EAAMgW,EAAYq3B,GAC9B,IAAKrtC,EAAKisC,qBAAuB50D,KAAK2oB,OAAS3oB,KAAK2oB,KAAKksC,oBAErD,MADA70D,MAAKgI,QAAQ,UACN,CAEXguD,GAAaA,GAAcrtC,EAAK9E,EAChC,IAAIjd,GAAO5G,KAAM2L,EAAUgd,IAAS/hB,EAAK+hB,KAAOA,EAAKxsB,QAAUyK,EAAK+hB,KAAMjK,EAAU9X,EAAK8X,QAASu3C,EAAgBv3C,EAAQA,EAAQ9mB,OAAS,OAAUusC,EAAO8xB,EAAcpyC,KAAOmyC,EAAYE,EAAgBv3B,IAAewF,EAAOzlB,EAAQA,EAAQ9mB,OAAS,GAAG+mC,WAAahW,EAAKgW,YAAaw3B,EAAiB3C,EAAgB0C,EAmB/T,OAlBItvD,GAAKkvD,SACLlvD,EAAKi5B,OAAO/f,OAEM,SAAlBo2C,IACAA,EAAgB,MAEpBtvD,EAAKoB,QAAQ,YAAc2gB,KAAMA,IACjC/hB,EAAK+hB,KAAOA,EACZ/hB,EAAK+7B,SAAWh3B,EAChB/E,EAAKkvD,SAAU,EACV3xB,EAMDzlB,EAAQqN,MALRrN,EAAQ5W,MACJ+b,GAAImyC,EACJr3B,WAAYu3B,IAKfvqD,GAMAuqD,GAAkBh+D,EAAM6H,QAAQqf,SAIjCuJ,EAAK5wB,QAAQuC,SAAS,eACtBquB,EAAKmsC,YACD3wB,IAASxF,IACTw3B,EAAe71D,SAAW61D,EAAe71D,SAE7CsG,EAAKi5B,OAAS3nC,EAAM+H,GAAG0oB,EAAK5wB,SAASZ,QAAQwU,EAAQ5T,QAASo+D,EAAej3D,MAAM8lC,iBAAiB,WAChGrc,EAAKqc,iBAAiB,QACtBr5B,EAAQq5B,iBAAiB,UAC1BC,gBAAgB,WACftc,EAAKsc,gBAAgB,QACrBt5B,EAAQs5B,gBAAgB;GACzB1K,UAAU47B,EAAe57B,WAAWyG,WAAWm1B,EAAe71D,SACjEsG,EAAKi5B,OAAOY,MAAMM,KAAK,WACnBn6B,EAAKjP,UAhBTgxB,EAAKmsC,YACLluD,EAAKjP,QAkBF,IAzBHgxB,EAAKmsC,YACLnsC,EAAKosC,UACLnuD,EAAKmvD,SACE,KAyBnB79D,GAAMy9D,cAAgBA,EACtBz9D,EAAM09D,SAAWA,EACjB19D,EAAMq9D,OAASA,EACfr9D,EAAMg8D,KAAOA,EACbh8D,EAAMy8D,UAAYA,GACpBh+D,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,GAAIkqD,GAAY1oD,MAAMsD,KAAKi8C,gBAAgB/2C,QACvCC,KAAM,SAAUP,GAAV,GAUEg2D,GATAC,EAAUj2D,GAAWA,EAAQi2D,QAAUj2D,EAAQi2D,WAC/Cl1D,EAAUk1D,EAAQl1D,OACtB,KAAKA,EACD,KAAU2H,OAAM,oCAEpB,IAA2B,kBAAhB3H,GAAQ4kC,MAA6C,kBAAhB5kC,GAAQm1D,KACpD,KAAUxtD,OAAM,0CAIpB,IAFA9I,KAAKmB,QAAUA,EACXi1D,EAAMC,EAAQD,KACbA,EACD,KAAUttD,OAAM,gCAEpB,IAAqB,kBAAVstD,GAAI1wD,IAAyC,kBAAd0wD,GAAI5gC,OAC1C,KAAU1sB,OAAM,qDAEpB9I,MAAKo2D,IAAMA,EACXl+D,MAAMsD,KAAKi8C,gBAAgBxzC,GAAGtD,KAAKwH,KAAKnI,KAAMI,IAElD0H,KAAM,SAAUyuD,GACZ,GAAIrjC,GAASlzB,KAAKI,QAAQi2D,QAAQnjC,UAC9BA,GAAOsb,QACPxuC,KAAKo2D,IAAI1wD,GAAGwtB,EAAOsb,OAAQ+nB,EAAU1V,YAErC3tB,EAAOqb,QACPvuC,KAAKo2D,IAAI1wD,GAAGwtB,EAAOqb,OAAQgoB,EAAUxV,YAErC7tB,EAAOpN,SACP9lB,KAAKo2D,IAAI1wD,GAAGwtB,EAAOpN,QAASywC,EAAUtV,cAG9CuV,MAAO,SAAUp2D,EAASlB,GAAnB,GAMCopB,GACA9sB,EANA46D,EAAMp2D,KAAKo2D,IACXK,EAASz2D,KAAKI,QAAQi2D,QAAQI,MAClC,KAAKA,IAAWA,EAAOv3D,GACnB,KAAU4J,OAAM5Q,MAAM6Q,OAAO,uCAAwC7J,GAErEopB,IAAQmuC,EAAOv3D,IACf1D,EAAOwE,KAAKyuC,aAAaruC,EAAQ5E,KAAM0D,GACtCxI,EAAEywB,cAAc3rB,IACjB8sB,EAAKxgB,KAAKtM,GAEdwE,KAAKmB,QAAQ4kC,KAAK,WACdqwB,EAAI5gC,OAAO1uB,MAAMsvD,EAAK9tC,GAAMyd,KAAK3lC,EAAQy+C,SAASyX,KAAKl2D,EAAQ0+C,UAGvE/Q,KAAM,SAAU3tC,GACZJ,KAAKw2D,MAAMp2D,EAAS,SAExBouC,OAAQ,SAAUpuC,GACdJ,KAAKw2D,MAAMp2D,EAAS,WAExBmuC,OAAQ,SAAUnuC,GACdJ,KAAKw2D,MAAMp2D,EAAS,WAExB0lB,QAAS,SAAU1lB,GACfJ,KAAKw2D,MAAMp2D,EAAS,aAG5B1J,GAAEgK,QAAO,EAAMxI,MAAMsD,MAAQ6yC,YAAcgoB,QAASzV,MACtDjqD,OAAOuB,MAAM2sB,QACRluB,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,QAAS8/D,GAAWC,EAAQC,GACxB,GAAIC,GAAKF,EAAO1jC,EAAEvX,SAAUo7C,EAAKH,EAAOtlD,EAAEqK,SAAUq7C,EAAKH,EAAO3jC,EAAEvX,SAAUs7C,EAAKJ,EAAOvlD,EAAEqK,SAAUu7C,EAAKJ,EAAKE,EAAIG,EAAKJ,EAAKE,CAC5H,QACIG,QACIlkC,GAAI4jC,EAAKE,GAAM,EACf1lD,GAAIylD,EAAKE,GAAM,GAEnBI,SAAUx4D,KAAKy4D,KAAKJ,EAAKA,EAAKC,EAAKA,IAG3C,QAASI,GAAWrvD,GAChB,GAA6FrQ,GAAQ2oB,EAAgBpI,EAAjHkI,KAAcC,EAAgBrY,EAAEqY,cAAei3C,EAAgBtvD,EAAEsvD,cAAe55D,EAAM,CAC1F,IAAIsK,EAAEuvD,IACFn3C,EAAQvY,MACJ+b,GAAI,EACJlL,MAAO1Q,EACPmY,OAAQnY,EAAEmY,OACVm3C,cAAetvD,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,OACdm3C,cAAeA,EACf1zC,GAAI1L,EAAMs/C,WACVv4D,KAAM,cAIdmhB,GAAQvY,KADD3P,EAAQoH,UAAYpH,EAAQqH,YAE/Bkc,SAAU4E,EACV3H,MAAO1Q,EACPmY,OAAQnY,EAAEmY,OACVm3C,cAAeA,EACf1zC,GAAIvD,EAAco3C,UAClBx4D,KAAM,YAIN2kB,GAAI,EACJlL,MAAO1Q,EACPmY,OAAQnY,EAAEmY,OACVm3C,cAAeA,EACf77C,SAAUzT,EACV/I,KAAM,SAGd,OAAOmhB,GAmIX,QAASs3C,GAAgBh3C,GAErB,IADA,GAAIi3C,GAAa1/D,EAAMqN,SAAS0Z,GAAGhoB,MAAM,KAAM0G,EAAM,EAAG/F,EAASggE,EAAWhgE,OACrE+F,EAAM/F,EAAQ+F,IACjBgjB,EAASi3C,EAAWj6D,IApM/B,GACOzF,GAAQvB,OAAOuB,MAAOC,EAAUD,EAAMC,QAAStB,EAAQqB,EAAMrB,MAAOwN,EAAanM,EAAMmM,WAAY86B,EAAMzoC,EAAEyoC,IAAKz+B,EAAShK,EAAEgK,OAAQm3D,EAAK1/D,EAAQgf,SAAU2gD,EAAoBD,GAAMA,EAAGj+C,QAASm+C,EAAmB,IAAKC,EAAoB7/D,EAAQoB,QAAQgB,KAAO,EAAI,EAAG09D,EAAQ,QAASC,EAAO,OAAQC,EAAS,SAAUC,EAAQ,QAASC,EAAO,OAAQ/1C,EAAM,MAAOg2C,EAAS,SAAUC,EAAM,MAAOC,EAAU,UAAWC,EAAe,eAAgBC,EAAgB,gBAAiBC,EAAa,aAAcC,EAAa,aACvgBC,GACArB,IAAO,EACPr/C,MAAS,EACT2gD,MAAS,EACTC,QAAW,GAEXC,GAAyB7gE,EAAQggB,OAAShgB,EAAQ6jB,qBAwDlDi9C,EAAYpiE,EAAM6J,QAClBC,KAAM,SAAU8yB,EAAM/X,GAClB,GAAI9U,GAAO5G,IACX4G,GAAK6sB,KAAOA,EACZ7sB,EAAKsyD,oBAAoBx9C,GACzB9U,EAAKuyD,cAAgBvyD,EAAK8U,SAC1B9U,EAAKwyD,SAAWxyD,EAAKysB,MAAQ,EAC7BzsB,EAAKyyD,UAAYl6B,KAErBpU,KAAM,SAAUrP,GACZ,GAAI9U,GAAO5G,KAAMZ,EAASsc,EAAS,OAAS9U,EAAK6sB,MAAO4lC,EAAYl6B,IAAOm6B,EAAYD,EAAYzyD,EAAKyyD,WAAa,GAChHj6D,GAAU04D,IAGflxD,EAAKysB,MAAQj0B,EAASwH,EAAK8U,SAC3B9U,EAAKsyD,oBAAoBx9C,GACzB9U,EAAK2yD,aAAen6D,EAASwH,EAAKuyD,cAClCvyD,EAAKwyD,SAAWxyD,EAAKysB,MAAQimC,EAC7B1yD,EAAKyyD,UAAYA,IAErBH,oBAAqB,SAAUx9C,GAC3B,GAAI9U,GAAO5G,KAAMyzB,EAAO7sB,EAAK6sB,IAC7B7sB,GAAK8U,SAAWA,EAAS,OAAS+X,GAClC7sB,EAAKssB,OAASxX,EAAS,SAAW+X,GAClC7sB,EAAKkS,OAAS4C,EAAS,SAAW+X,MAGtC+lC,EAAQ3iE,EAAM6J,QACdC,KAAM,SAAU84D,EAAYr5C,EAAQs5C,GAChCh5D,EAAOV,MACHizB,EAAG,GAAIgmC,GAAU,IAAKS,EAAUh+C,UAChCrK,EAAG,GAAI4nD,GAAU,IAAKS,EAAUh+C,UAChCxc,KAAMw6D,EAAUx6D,KAChBy6D,cAAeF,EAAWE,cAC1B97C,UAAW47C,EAAW57C,WAAag7C,EAAUa,EAAUx6D,MACvDu6D,WAAYA,EACZr5C,OAAQA,EACRm3C,cAAemC,EAAUnC,cACzBqC,aAAcF,EAAUt5C,OACxByD,GAAI61C,EAAU71C,GACdg2C,WAAYH,EACZI,QAAQ,EACRC,WAAW,KAGnBC,MAAO,WACHh6D,KAAKi6D,aAAevwC,WAAWhzB,EAAEsP,MAAMhG,KAAM,SAAUA,KAAKy5D,WAAWS,SACvEl6D,KAAKm6D,SAASlC,EAAOj4D,KAAK65D,aAE9BO,MAAO,WACHp6D,KAAKm6D,SAASjC,EAAMl4D,KAAK65D,aAE7B9uC,KAAM,SAAU2uC,GACZ,GAAI9yD,GAAO5G,IACX,KAAI4G,EAAKmzD,UAAT,CAKA,GAFAnzD,EAAKqsB,EAAElI,KAAK2uC,EAAUh+C,UACtB9U,EAAKyK,EAAE0Z,KAAK2uC,EAAUh+C,WACjB9U,EAAKkzD,OAAQ,CACd,GAAIlzD,EAAKyzD,yBACL,MAEJ,IAAKC,EAAW3uD,SAAW2uD,EAAW3uD,UAAY/E,EAAK6yD,WAGnD,MAAO7yD,GAAK2zD,SAFZ3zD,GAAK4zD,OAAOd,GAKf9yD,EAAKmzD,WACNnzD,EAAKuzD,SAAS9B,EAAMqB,KAG5B/hE,IAAK,SAAU+hE,GACX15D,KAAKy6D,QAAUt7B,IACXn/B,KAAK+5D,YAGT/5D,KAAK+5D,WAAY,EACjB/5D,KAAKm6D,SAAS3B,EAASkB,GACnB15D,KAAK85D,OACL95D,KAAKm6D,SAAS73C,EAAKo3C,GAEd15D,KAAK25D,eACN35D,KAAKm6D,SAAS5B,EAAKmB,GAG3B9uC,aAAa5qB,KAAKi6D,cAClBj6D,KAAKu6D,YAETA,QAAS,WACL,GAAId,GAAaz5D,KAAKy5D,WAAYiB,EAAgBjB,EAAWp5C,OAC7DrgB,MAAK+5D,WAAY,EACjB/5D,KAAK65D,WAAa,KAClBjvC,aAAa5qB,KAAKi6D,cAClBS,EAActyD,OAAO1R,EAAEuM,QAAQjD,KAAM06D,GAAgB,IAEzDhtB,KAAM,WACF1tC,KAAKu6D,WAETvvC,OAAQ,WACJhrB,KAAKu6D,WAETI,QAAS,WACL,MAAO36D,MAAK85D,QAEhBU,OAAQ,SAAUd,GACd9uC,aAAa5qB,KAAKi6D,cAClBj6D,KAAK46D,UAAYz7B,IACjBn/B,KAAK85D,QAAS,EACd95D,KAAKm6D,SAAS/B,EAAOsB,IAEzBS,SAAU,SAAUjrD,EAAMwqD,GACtB,GAAI9yD,GAAO5G,KAAMozB,EAAcsmC,EAAU/gD,MAAOnd,GACxC2c,MAAOvR,EACPqsB,EAAGrsB,EAAKqsB,EACR5hB,EAAGzK,EAAKyK,EACR+O,OAAQxZ,EAAKwZ,OACbzH,MAAOya,EAEXxsB,GAAK6yD,WAAW7yC,OAAO1X,EAAM1T,IAC7B43B,EAAYjvB,kBAGpBk2D,uBAAwB,WACpB,GAAIQ,GAAS76D,KAAKizB,EAAEsmC,aAAcuB,EAAS96D,KAAKqR,EAAEkoD,YAClD,OAAO36D,MAAKy4D,KAAKwD,EAASA,EAASC,EAASA,IAAW96D,KAAK6d,aAShEy8C,EAAaj2D,EAAW3D,QACxBC,KAAM,SAAU5I,EAASqI,GAAnB,GACeyD,GAoCTk3D,EAAkCC,EApCtCp0D,EAAO5G,KAAciC,EAAK/J,EAAMyrB,MACpCvjB,GAAUA,MACVyD,EAAS+C,EAAK/C,OAASzD,EAAQyD,OAC/B+C,EAAKiX,UAAYzd,EAAQyd,WAAam6C,EACtCpxD,EAAKszD,QAAU95D,EAAQ85D,SAAWnC,EAClCnxD,EAAKyZ,WACLzZ,EAAKq0D,YAAc76D,EAAQ86D,WAAa,EAAI,EAC5Ct0D,EAAKu0D,eAAiB/6D,EAAQ+6D,eAC9Bv0D,EAAKw0D,iBAAmBh7D,EAAQg7D,iBAChCx0D,EAAK+yD,eAAiBv5D,EAAQi7D,UAAYljE,EAAQ4jB,eAClDnV,EAAK00D,QAAUr5D,EACflK,EAAUrB,EAAEqB,GAAS0P,QAAQb,GAC7BvC,EAAWJ,GAAGtD,KAAKwH,KAAKvB,GACxBlG,EAAOkG,GACH7O,QAASA,EACTwjE,QAAmD7kE,EAA1C0J,EAAQo7D,QAAUxC,EAA0BjhE,EAAQ,GAAG0jE,cAAc/7D,gBAAqBU,EAAQm7D,SAAWxjE,GACtH2yB,gBAAiBtqB,EAAQsqB,gBACzBgxC,SAAS,IAEb90D,EAAK20D,QAAQ9zD,QAAQb,GAAMlB,GAAGxN,EAAM4zB,cAAc,OAAQ7pB,GAAK,SAASyD,GAAGxN,EAAM4zB,cAAc,YAAa7pB,GAAK,QACjHlK,EAAQ2N,GAAGxN,EAAM4zB,cAAc,OAAQ7pB,GAAK4B,EAAQ,UAChD+C,EAAK+yD,eACL5hE,EAAQ2N,GAAGxN,EAAM4zB,cAAc,QAAS7pB,GAAK4B,EAAQ,WAErD1L,EAAQoH,UAAYpH,EAAQqH,cACxBrH,EAAQoB,QAAQkB,QAAU,GAC1B1C,EAAQE,IAAI,mBAAoB,8BAEhCF,EAAQE,IAAI,eAAgBmI,EAAQu7D,aAAe,SAGvDv7D,EAAQw7D,kBACR7jE,EAAQ2N,GAAGxN,EAAM4zB,cAAc,YAAa7pB,GAAK/J,EAAMiM,gBAE3DpM,EAAQ2N,GAAGxN,EAAM4zB,cAAc,YAAa7pB,GAAK4B,GAAU2jC,KAAMzvC,GAAW,WACxE6O,EAAKw0D,kBAAoBjjE,EAAQklB,eAC7B09C,EAAiBn0D,EAAK20D,QAAQ,GAAIP,EAAuBtkE,EAAEsP,MAAMY,EAAKi1D,gBAAiBj1D,GAC3F+wD,EAAgB,SAAUtwD,GACtB0zD,EAAez9C,iBAAiBjW,EAAW2zD,GAAsB,MAGzEp0D,EAAKQ,MACD6wD,EACAC,EACAK,EACAH,EACAC,EACA/1C,EACAk2C,EACAF,EACAG,EACAC,EACAC,EACAC,EACAT,GACD/3D,IAEPy7D,gBAAiB,SAAU5zD,GACnBjI,KAAK87D,YACL7zD,EAAE9D,kBAGV2hB,QAAS,WAAA,GAOGi1C,GANJn0D,EAAO5G,IACP4G,GAAKu5C,aAGTv5C,EAAKu5C,YAAa,EACdv5C,EAAKw0D,kBAAoBjjE,EAAQklB,eAC7B09C,EAAiBn0D,EAAK20D,QAAQ,GAClC5D,EAAgB,SAAUtwD,GACtB0zD,EAAegB,oBAAoB10D,EAAWT,EAAKi1D,oBAG3Dj1D,EAAK7O,QAAQ2wB,aAAa9hB,EAAK00D,SAC/B10D,EAAK20D,QAAQ7yC,aAAa9hB,EAAK00D,SAC/B10D,EAAK7O,QAAQguB,WAAW,WACxBnf,EAAK20D,QAAQx1C,WAAW,WACxBnf,EAAKo1D,cACLp1D,EAAKiB,eACEjB,GAAK20D,cACL30D,GAAK7O,cACL6O,GAAK2wD,gBAEhB0E,QAAS,WACL3B,EAAW3uD,QAAU3L,MAEzBgrB,OAAQ,WACJhrB,KAAKg8D,cACLh8D,KAAKgI,QAAQswD,IAEjB1xC,OAAQ,SAAUvf,EAAW7L,GACzB,GAAIoL,GAAO5G,KAAMqgB,EAAUzZ,EAAKyZ,OAChC,IAAIrgB,KAAKk8D,gBAAiB,CACtB,OAAQ70D,GACR,IAAKgxD,GACDhxD,EAAYqxD,CACZ,MACJ,KAAKp2C,GACDjb,EAAYsxD,CACZ,MACJ,KAAKJ,GACDlxD,EAAYuxD,EAGhBl4D,EAAOlF,GAAQ6kB,QAASA,GAAWq2C,EAAWr2C,EAAQ,GAAIA,EAAQ,KAEtE,MAAOrgB,MAAKgI,QAAQX,EAAW3G,EAAOlF,GAAQ0D,KAAMmI,MAExD2yD,MAAO,SAAU/mC,EAAG5hB,EAAG+O,GACnBpgB,KAAKm8D,SAAS,SAAUlpC,EAAG5hB,EAAG+O,IAElC2K,KAAM,SAAUkI,EAAG5hB,GACfrR,KAAKm8D,SAAS,QAASlpC,EAAG5hB,IAE9B1Z,IAAK,SAAUs7B,EAAG5hB,GACdrR,KAAKm8D,SAAS,OAAQlpC,EAAG5hB,IAE7B6qD,cAAe,WACX,MAAOl8D,MAAKqgB,QAAQzoB,OAAS,GAEjCwkE,mBAAoB,WAChB,MAAOp8D,MAAKqgB,QAAQzoB,QAAUoI,KAAKi7D,aAEvCe,YAAa,WAET,IADA,GAAI37C,GAAUrgB,KAAKqgB,QACZA,EAAQzoB,OAAS,GACpByoB,EAAQ0L,MAAMwuC,WAGtBuB,SAAU,WACN,MAAOplE,GAAEq2B,KAAK/sB,KAAKqgB,QAAS,SAAUlI,GAClC,MAAOA,GAAMwiD,YACd/iE,QAEPykE,QAAS,SAAUp0D,GACVjI,KAAKm7D,iBAAkBn7D,KAAKgI,QAAQmwD,GAAUx/C,MAAO1Q,KACtDA,EAAE9D,kBAGVq2D,OAAQ,SAAUvyD,GACd,GAAgDmY,GAA0DjI,EAAtGvR,EAAO5G,KAAMrC,EAAM,EAAGkG,EAAS+C,EAAK/C,OAAgBwc,EAAUi3C,EAAWrvD,GAAIrQ,EAASyoB,EAAQzoB,OAAe0kE,EAAQr0D,EAAEq0D,KAC3H,MAAIA,GAASA,EAAQ,GAAK11D,EAAKw1D,sBAQ/B,IALA9B,EAAW3uD,QAAU,KACrB/E,EAAK2wD,cAAgBtvD,EAAEsvD,cACnB3wD,EAAK8jB,iBACLziB,EAAEyiB,kBAEC/sB,EAAM/F,IACLgP,EAAKw1D,qBADQz+D,IAIjBwa,EAAQkI,EAAQ1iB,GAEZyiB,EADAvc,EACSnN,EAAEyhB,EAAMo/C,eAER3wD,EAAK7O,QAEbqoB,EAAOxoB,SAGZugB,EAAQ,GAAIqhD,GAAM5yD,EAAMwZ,EAAQjI,GAChCvR,EAAKyZ,QAAQvY,KAAKqQ,GAClBA,EAAM6hD,QACFpzD,EAAKs1D,iBACLt1D,EAAKggB,OAAO,qBAIxB21C,MAAO,SAAUt0D,GACbjI,KAAKw8D,WAAW,OAAQv0D,IAE5Bw0D,KAAM,SAAUx0D,GACZjI,KAAKw8D,WAAW,MAAOv0D,IAE3By0D,OAAQ,SAAUz0D,GACd,GAAIzM,IACA2c,OACIyhD,aAAc3xD,EAAEmY,OAChBA,OAAQ1pB,EAAEuR,EAAEsvD,eACZkD,QAASt7B,IACTlM,GACIvX,SAAUzT,EAAE00D,MACZzpC,OAAQjrB,EAAEwY,SAEdpP,GACIqK,SAAUzT,EAAE20D,MACZ1pC,OAAQjrB,EAAEyY,UAGlBuS,EAAGhrB,EAAE00D,MACLtrD,EAAGpJ,EAAE20D,MACLx8C,OAAQ1pB,EAAEuR,EAAEsvD,eACZ5+C,MAAO1Q,EACP/I,KAAM,MAENc,MAAKgI,QAAQ,MAAOxM,IACpByM,EAAE9D,kBAGVq4D,WAAY,SAAUrH,EAAYltD,GAC9B,GAAmFtK,GAAKwa,EAAOuhD,EAAWmD,EAAtGj2D,EAAO5G,KAAM88D,KAAWz8C,EAAUi3C,EAAWrvD,GAAIyyD,EAAgB9zD,EAAKyZ,OAC1E,KAAK1iB,EAAM,EAAGA,EAAM+8D,EAAc9iE,OAAQ+F,IACtCwa,EAAQuiD,EAAc/8D,GACtBm/D,EAAK3kD,EAAM0L,IAAM1L,CAErB,KAAKxa,EAAM,EAAGA,EAAM0iB,EAAQzoB,OAAQ+F,IAChC+7D,EAAYr5C,EAAQ1iB,GACpBk/D,EAAgBC,EAAKpD,EAAU71C,IAC3Bg5C,GACAA,EAAc1H,GAAYuE,IAItCyC,SAAU,SAAUj9D,EAAM+zB,EAAG5hB,EAAG+O,GAC5BpgB,KAAKd,IACDs4D,KAAK,EACLmF,MAAO1pC,EACP2pC,MAAOvrD,EACPoP,QAASwS,EACTvS,QAASrP,EACT+O,OAAQ1pB,EAAE0pB,GAAUpgB,KAAKjI,SAAS,GAClC2yB,gBAAiBh0B,EAAEkK,KACnBuD,eAAgBzN,EAAEkK,SAI9B05D,GAAWyC,iBAAmB,SAAUn/D,GACpCo6D,EAAoBp6D,GAExB08D,EAAWJ,QAAU,SAAUt8D,GAC3Bm6D,EAAmBn6D,GAEvB1F,EAAMo/D,WAAaA,EACnBp/D,EAAMw+D,WAAaA,EACnBx+D,EAAMoiE,WAAaA,GACrB3jE,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,QAAS+0D,GAAkBjlE,EAASmD,GAChC,MAAOmX,UAASta,EAAQE,IAAIiD,GAAW,KAAO,EAElD,QAAS+hE,GAAOr/D,EAAOmgD,GACnB,MAAOn/C,MAAKoT,IAAIpT,KAAKlG,IAAIkF,EAAOmgD,EAAM/rC,KAAM+rC,EAAMrlD,KAEtD,QAASwkE,GAAoBv1C,EAAW5vB,GACpC,GAAIqH,GAASH,EAAU0oB,GAAYnuB,EAAatB,EAAMuB,YAAaC,EAAcxB,EAAMyB,aAAcwjE,EAAO/9D,EAAOzG,KAAOqkE,EAAkBr1C,EAAW,mBAAqBq1C,EAAkBr1C,EAAW,eAAgBy1C,EAAOh+D,EAAOE,IAAM09D,EAAkBr1C,EAAW,kBAAoBq1C,EAAkBr1C,EAAW,cAAe01C,EAAOF,EAAOx1C,EAAU1uB,QAAUO,EAAWzB,GAAS,GAAOulE,EAAOF,EAAOz1C,EAAUzuB,SAAWQ,EAAY3B,GAAS,EAC/b,QACIk7B,GACIjhB,IAAKmrD,EACLzkE,IAAK2kE,GAEThsD,GACIW,IAAKorD,EACL1kE,IAAK4kE,IAIjB,QAASC,GAAYn9C,EAAQo9C,EAASC,GAElC,IADA,GAAIC,GAAWC,EAAW7iE,EAAI,EAAG8iE,EAAYJ,GAAWA,EAAQ5lE,OAAQimE,EAAUJ,GAASA,EAAM7lE,OAC1FwoB,GAAUA,EAAO5B,YAAY,CAChC,IAAK1jB,EAAI,EAAGA,EAAI8iE,EAAW9iE,IAEvB,GADA4iE,EAAYF,EAAQ1iE,GAChB4iE,EAAU3lE,QAAQ,KAAOqoB,EACzB,OACIA,OAAQs9C,EACRI,cAAe19C,EAI3B,KAAKtlB,EAAI,EAAGA,EAAI+iE,EAAS/iE,IAErB,GADA6iE,EAAYF,EAAM3iE,GACdpE,EAAEoM,SAAS66D,EAAU5lE,QAAQ,GAAIqoB,IAAWjoB,EAAQ8lB,gBAAgB9V,KAAKiY,EAAQu9C,EAAUv9D,QAAQyD,QACnG,OACIuc,OAAQu9C,EACRG,cAAe19C,EAI3BA,GAASA,EAAO5B,WAEpB,MAAO5nB,GAmTX,QAASmnE,GAAiBrnB,EAAY1zC,GAClC,GAA0ElI,GAAtEkjE,EAAYh7D,EAAO5C,QAAQ4zC,MAAOiqB,EAAavnB,EAAWsnB,EAE9D,IADAh5D,EAAOf,GAAG6hB,QAAQ3d,KAAKnF,GACnBi7D,EAAWrmE,OAAS,GACpB,IAAKkD,EAAI,EAAGA,EAAImjE,EAAWrmE,OAAQkD,IAC/B,GAAImjE,EAAWnjE,IAAMkI,EAAQ,CACzBi7D,EAAW71D,OAAOtN,EAAG,EACrB,YAIRmjE,GAAWrmE,OAAS,QACb8+C,GAAWsnB,GA0Y1B,QAASE,GAAmBnmE,GACxB,GAAgCqH,GAAQE,EAAK3G,EAAzC6uC,EAAO22B,IAAiB,EAC5B,OAAIpmE,GAAQ,KAAOyvC,GACfloC,EAAMkoC,EAAK7nC,UACXhH,EAAO6uC,EAAKppC,YAERkB,IAAKA,EACL3G,KAAMA,EACNE,OAAQyG,EAAM8+D,EAAQllE,SACtBN,MAAOD,EAAOylE,EAAQnlE,WAG1BmG,EAASrH,EAAQqH,SACjBA,EAAOvG,OAASuG,EAAOE,IAAMvH,EAAQmB,SACrCkG,EAAOxG,MAAQwG,EAAOzG,KAAOZ,EAAQkB,QAC9BmG,GAGf,QAAS++D,KACL,MAAOznE,GAAEwB,EAAMC,QAAQoB,QAAQ8d,OAAS9Z,EAASsa,KAAOta,EAASmC,iBAErE,QAAS2+D,GAAqBtmE,GAA9B,GAKQ6B,GAJA4tC,EAAO22B,GACX,KAAKpmE,GAAWA,IAAYwF,EAASsa,MAAQ9f,IAAYwF,EAASmC,gBAC9D,MAAO8nC,EAGX,KADI5tC,EAASlD,EAAEqB,GAAS,GACjB6B,IAAW1B,EAAM8F,aAAapE,IAAWA,IAAW2D,EAASsa,MAChEje,EAASA,EAAO4kB,UAEpB,OAAI5kB,KAAW2D,EAASsa,KACb2vB,EAEJ9wC,EAAEkD,GAEb,QAAS0kE,GAAmBC,EAAQC,EAAQC,GAA5C,GACQrF,IACAnmC,EAAG,EACH5hB,EAAG,GAEHqtD,EAAmB,EAWvB,OAVIH,GAASE,EAAK9lE,KAAO+lE,EACrBtF,EAASnmC,IAAMyrC,GAAoBH,EAASE,EAAK9lE,OAC1C8lE,EAAK7lE,MAAQ2lE,EAASG,IAC7BtF,EAASnmC,EAAIyrC,GAAoBD,EAAK7lE,MAAQ2lE,IAE9CC,EAASC,EAAKn/D,IAAMo/D,EACpBtF,EAAS/nD,IAAMqtD,GAAoBF,EAASC,EAAKn/D,MAC1Cm/D,EAAK5lE,OAAS2lE,EAASE,IAC9BtF,EAAS/nD,EAAIqtD,GAAoBD,EAAK5lE,OAAS2lE,IAE5CpF,EA/yBd,GACwUuF,GAgSrQ5hC,EAU5D6hC,EA0EAC,EAyDAC,EAoBAC,EAjcA7mE,EAAQvB,OAAOuB,MAAOC,EAAUD,EAAMC,QAASoF,EAAW5G,OAAO4G,SAAU6gE,EAAU1nE,EAAEC,QAASE,EAAQqB,EAAMrB,MAAOmO,EAAS9M,EAAMmpB,GAAGrc,OAAQX,EAAanM,EAAMmM,WAAYi2D,EAAapiE,EAAMoiE,WAAYt0D,EAAQtP,EAAEsP,MAAOtF,EAAShK,EAAEgK,OAAQzB,EAAY/G,EAAM+G,UAAW+/D,KAAiBC,KAAkBC,KAAgClsC,EAAqB96B,EAAM86B,mBAAoBmsC,EAAQ,QAASx3B,EAAS,SAAUy3B,EAAY,YAAalH,EAAO,OAAQmH,EAAO,OAAQC,EAAU,UAAWC,EAAa,aAAcC,EAAgB,gBAAiBC,EAAY,YAAaC,EAAY,YAAaC,EAAO,OAoDrmBC,EAAav7D,EAAW3D,QACxBC,KAAM,SAAU5I,EAASqI,GACrB,GAAIwG,GAAO5G,KAAM0mB,EAAa3uB,EAAQ,EACtC6O,GAAKq1D,SAAU,EACXv1C,EAAWpJ,kBACX5mB,EAAEgH,KAAKxF,EAAMqN,SAASyZ,KAAK/nB,MAAM,KAAM,WACnCyvB,EAAWpJ,iBAAiBtd,KAAMgG,EAAMY,EAAKi5D,OAAQj5D,IAAO,KAEhElQ,EAAEgH,KAAKxF,EAAMqN,SAAS0Z,GAAGhoB,MAAM,KAAM,WACjCyvB,EAAWpJ,iBAAiBtd,KAAMgG,EAAMY,EAAKk5D,SAAUl5D,IAAO,OAGlElQ,EAAEgH,KAAKxF,EAAMqN,SAASyZ,KAAK/nB,MAAM,KAAM,WACnCyvB,EAAWq5C,YAAY//D,KAAMgG,EAAMY,EAAKi5D,OAAQj5D,MAEpDlQ,EAAEgH,KAAKxF,EAAMqN,SAAS0Z,GAAGhoB,MAAM,KAAM,WACjCyvB,EAAWq5C,YAAY//D,KAAMgG,EAAMY,EAAKk5D,SAAUl5D,OAG1DvC,EAAWJ,GAAGtD,KAAKwH,KAAKvB,GACxBA,EAAKQ,MACD,QACA,WACDhH,QAEP4/D,YAAa,WACThgE,KAAKi8D,SAAU,GAEnBgE,cAAe,WACXjgE,KAAKi8D,SAAU,GAEnB4D,OAAQ,SAAU53D,GACd,GAAIrB,GAAO5G,IACX4G,GAAKoB,QAAQ,SACTpB,EAAKq1D,SACLh0D,EAAE9D,kBAGV27D,SAAU,SAAU73D,GAChB,GAAIrB,GAAO5G,IACX4G,GAAKoB,QAAQ,WACTpB,EAAKq1D,UACLh0D,EAAE9D,iBACFyC,EAAKq5D,oBAIbC,EAAgB77D,EAAW3D,QAC3BC,KAAM,SAAUP,GACZ,GAAIwG,GAAO5G,IACXqE,GAAWJ,GAAGtD,KAAKwH,KAAKvB,GACxBA,EAAKu5D,eAAgB,EACrBzpE,EAAEgK,OAAOkG,EAAMxG,GACfwG,EAAK81B,MAAQ,EACT91B,EAAKi4B,YACLj4B,EAAKw5D,QAAU,cACfx5D,EAAKy5D,WAAa,cAClBz5D,EAAK6sB,KAAO,MAEZ7sB,EAAKw5D,QAAU,eACfx5D,EAAKy5D,WAAa,eAClBz5D,EAAK6sB,KAAO,MAGpB6sC,YAAa,WACT5pE,EAAEgK,OAAOV,MACLugE,SAAS,EACTJ,eAAe,EACfK,YAAa,EACbC,YAAa,KAGrBC,YAAa,SAAU1uD,EAAKtZ,GACpBsH,KAAKwgE,cAAgBxuD,GAAOhS,KAAKygE,cAAgB/nE,IACjDsH,KAAKwgE,YAAcxuD,EACnBhS,KAAKygE,YAAc/nE,EACnBsH,KAAKuuC,WAGboyB,YAAa,SAAUvhE,GACnB,MAAOA,GAASY,KAAKtH,KAAO0G,EAASY,KAAKgS,KAE9C4uD,aAAc,WACV5gE,KAAKmgE,eAAgB,GAEzB36C,QAAS,WACL,MAAOxlB,MAAK2nB,UAAU,GAAG3nB,KAAKogE,UAElCS,SAAU,WACN,MAAO7gE,MAAKjI,QAAQ,GAAGiI,KAAKqgE,aAEhCS,QAAS,SAAUpkC,GACf18B,KAAK08B,MAAQA,GAEjB6R,OAAQ,SAAU9E,GACd,GAAI7iC,GAAO5G,KAAMouC,EAAQxnC,EAAK25D,QAAU35D,EAAK65D,YAAc75D,EAAKi6D,WAAYE,EAAc3yB,EAAQxnC,EAAK81B,MAAO3+B,EAAO6I,EAAK4e,WAC5G,IAAV4oB,GAAgBxnC,EAAKu5D,iBAGzBv5D,EAAKlO,IAAMkO,EAAK25D,SAAW35D,EAAK45D,YAAc,EAC9C55D,EAAK7I,KAAOA,EACZ6I,EAAKwnC,MAAQ2yB,EACbn6D,EAAKoL,IAAMpT,KAAKoT,IAAIpL,EAAKlO,IAAKqF,EAAOgjE,GACrCn6D,EAAKo6D,SAAWjjE,EAAOqwC,EACvBxnC,EAAKq6D,cAAgBF,EAAchjE,GAAQ,EAC3C6I,EAAKwY,QAAUxY,EAAKu5D,eAAiBY,EAAchjE,EAC9C0rC,GACD7iC,EAAKoB,QAAQ2/B,EAAQ/gC,OAI7Bs6D,EAAiB78D,EAAW3D,QAC5BC,KAAM,SAAUP,GACZ,GAAIwG,GAAO5G,IACXqE,GAAWJ,GAAGtD,KAAKwH,KAAKvB,GACxBA,EAAKqsB,EAAI,GAAIitC,GAAcx/D,GAASm+B,YAAY,GAAQz+B,IACxDwG,EAAKyK,EAAI,GAAI6uD,GAAcx/D,GAASm+B,YAAY,GAASz+B,IACzDwG,EAAK+gB,UAAYvnB,EAAQunB,UACzB/gB,EAAKu6D,eAAiB/gE,EAAQ4gE,SAC9Bp6D,EAAKw6D,SAAWhhE,EAAQghE,UAAY,IACpCx6D,EAAKQ,KAAKugC,EAAQvnC,IAEtB0gE,QAAS,SAAUO,GACfrhE,KAAKizB,EAAE6tC,QAAQO,GACfrhE,KAAKqR,EAAEyvD,QAAQO,GACfrhE,KAAKwX,WAET8pD,kBAAmB,WACf,OACIruC,EAAGr0B,KAAKoT,IAAI,GAAIhS,KAAKizB,EAAEguC,cACvB5vD,EAAGzS,KAAKoT,IAAI,GAAIhS,KAAKqR,EAAE4vD,gBAG/BzpD,QAAS,WACL,GAAI5Q,GAAO5G,IACX4G,GAAKqsB,EAAEsb,SACP3nC,EAAKyK,EAAEk9B,SACP3nC,EAAKwY,QAAUxY,EAAKqsB,EAAE7T,SAAWxY,EAAKyK,EAAE+N,QACxCxY,EAAKo6D,SAAWp6D,EAAKu6D,gBAAkBviE,KAAKoT,IAAIpL,EAAKqsB,EAAE+tC,SAAUp6D,EAAKyK,EAAE2vD,UACxEp6D,EAAKkgC,SAAWloC,KAAKlG,IAAIkO,EAAKqsB,EAAE+tC,SAAUp6D,EAAKyK,EAAE2vD,UACjDp6D,EAAKoB,QAAQ2/B,MAGjB45B,EAAWl9D,EAAW3D,QACtBC,KAAM,SAAUP,GACZ,GAAIwG,GAAO5G,IACXU,GAAOkG,EAAMxG,GACbiE,EAAWJ,GAAGtD,KAAKwH,KAAKvB,IAE5B+5D,YAAa,WACT,MAAO3gE,MAAKwhE,UAAUb,YAAY3gE,KAAKqmC,QAAQrmC,KAAKyzB,QAExDguC,SAAU,SAAUpuC,GAChB,GAAIzsB,GAAO5G,KAAMwhE,EAAY56D,EAAK46D,UAAW/tC,EAAO7sB,EAAK6sB,KAAM4S,EAAUz/B,EAAKy/B,QAAS1E,EAAW0E,EAAQ5S,GAAQJ,CAC7GmuC,GAAUpiD,WAGXuiB,EAAW6/B,EAAUxvD,KAAOqhB,EAAQ,GAAKsO,EAAW6/B,EAAU9oE,KAAO26B,EAAQ,KAC7EA,GAASzsB,EAAK86D,YAElBr7B,EAAQs7B,cAAcluC,EAAMJ,GAC5BzsB,EAAKoB,QAAQ2/B,EAAQ/gC,OAGzBg7D,EAAO/qE,EAAM6J,QACbC,KAAM,SAAUP,GACZ,GAAiB6yB,GAAG5hB,EAAGqwD,EAAYr7B,EAA/Bz/B,EAAO5G,IACXU,GAAOkG,GAAQi7D,SAAS,GAAQzhE,GAChCshE,EAAa96D,EAAKi7D,QAAU,GAAM,EAClCx7B,EAAUz/B,EAAKy/B,QACfz/B,EAAKqsB,EAAIA,EAAI,GAAIsuC,IACb9tC,KAAM,IACN+tC,UAAW56D,EAAKgf,WAAWqN,EAC3ByuC,WAAYA,EACZr7B,QAASA,IAEbz/B,EAAKyK,EAAIA,EAAI,GAAIkwD,IACb9tC,KAAM,IACN+tC,UAAW56D,EAAKgf,WAAWvU,EAC3BqwD,WAAYA,EACZr7B,QAASA,IAEbz/B,EAAK6yD,WAAWryD,MACZ,QACA,OACA,MACA,eACA,kBAEA06D,aAAc,SAAU75D,GACpBrB,EAAKm7D,QAAU95D,EACfrB,EAAKxH,OAASwH,EAAKgf,WAAW+B,UAAUvoB,UAE5C46D,MAAO,SAAU/xD,GACTvR,EAAEuR,EAAE0Q,MAAMyH,QAAQnI,QAAQ,KAAKle,GAAG,kCAClCkO,EAAEC,OAAO8iB,UAGjBg3C,cAAe,SAAU/5D,GAAV,GACmNg6D,GAO1NC,EAAwCC,EAPxCC,EAAkBx7D,EAAKm7D,QAASM,EAAiBD,EAAgBjL,OAAQA,EAASlvD,EAAEkvD,OAAQmL,EAAar6D,EAAEmvD,SAAWgL,EAAgBhL,SAAU4J,EAAWp6D,EAAKgf,WAAWo7C,SAAUI,EAAWx6D,EAAKgf,WAAWw7C,QAChN/6B,GAAQ3J,OAASskC,GAAYsB,EAAa,IAC1CA,GAAiC,IAAlB,EAAIA,IAEnBj8B,EAAQ3J,MAAQ4lC,GAAclB,IAC9BkB,EAAalB,EAAW/6B,EAAQ3J,OAEhCwlC,EAAU77B,EAAQpT,EAAIrsB,EAAKxH,OAAOzG,KAAMwpE,EAAU97B,EAAQh1B,EAAIzK,EAAKxH,OAAOE,IAC9E2iE,GACIhvC,GAAIivC,EAAUG,EAAepvC,GAAKqvC,EAAanL,EAAOlkC,EAAIivC,EAC1D7wD,GAAI8wD,EAAUE,EAAehxD,GAAKixD,EAAanL,EAAO9lD,EAAI8wD,GAE9D97B,EAAQk8B,UAAUD,GAClBrvC,EAAEwuC,SAASQ,EAAYhvC,GACvB5hB,EAAEowD,SAASQ,EAAY5wD,GACvBzK,EAAKgf,WAAWk7C,QAAQz6B,EAAQ3J,OAChC91B,EAAKm7D,QAAU95D,EACfA,EAAE9D,kBAEN4mB,KAAM,SAAU9iB,GACRA,EAAE0Q,MAAMyH,OAAOgE,QAAQ9rB,MAAM,qBAG7B26B,EAAEuuC,UAAUpiD,SAAW/N,EAAEmwD,UAAUpiD,SACnC6T,EAAEwuC,SAASx5D,EAAEgrB,EAAEI,OACfhiB,EAAEowD,SAASx5D,EAAEoJ,EAAEgiB,OACfprB,EAAE9D,kBAEF8D,EAAEkQ,MAAMu1B,SAGhB/1C,IAAK,SAAUsQ,GACXA,EAAE9D,uBAKdq+D,EAAkBrqE,EAAQC,YAAYqgB,OAAS,WAE/CskB,GADA5kC,EAAQkgB,QACI,SAAU4a,EAAG5hB,EAAGqrB,GACxB,MAAO,eAAiBzJ,EAAI,MAAQ5hB,EAAI,eAAiBqrB,EAAQ,KAGzD,SAAUzJ,EAAG5hB,EAAGqrB,GACxB,MAAO,aAAezJ,EAAI,MAAQ5hB,EAAI,aAAeqrB,EAAQ,KAGjEkiC,EAAUv6D,EAAW3D,QACrBC,KAAM,SAAU5I,GACZ,GAAI6O,GAAO5G,IACXqE,GAAWJ,GAAGtD,KAAKwH,KAAKvB,GACxBA,EAAK7O,QAAUrB,EAAEqB,GACjB6O,EAAK7O,QAAQ,GAAG+B,MAAM2oE,sBAAwB,WAC9C77D,EAAKqsB,EAAI,EACTrsB,EAAKyK,EAAI,EACTzK,EAAK81B,MAAQ,EACb91B,EAAK87D,iBAAiB3lC,EAAUn2B,EAAKqsB,EAAGrsB,EAAKyK,EAAGzK,EAAK81B,SAEzDilC,cAAe,SAAUluC,EAAMkvC,GAC3B3iE,KAAKyzB,IAASkvC,EACd3iE,KAAKwX,WAETorD,QAAS,SAAUlmC,GACf18B,KAAK08B,MAAQA,EACb18B,KAAKwX,WAET+qD,UAAW,SAAUD,GACjBtiE,KAAK08B,OAAS4lC,EACdtiE,KAAKwX,WAETulB,UAAW,SAAUklC,GACjBjiE,KAAKizB,GAAKgvC,EAAYhvC,EACtBjzB,KAAKqR,GAAK4wD,EAAY5wD,EACtBrR,KAAKwX,WAETgvB,SAAU,SAAU/S,EAAM71B,GACtBoC,KAAKyzB,GAAQ71B,EACboC,KAAKwX,WAET4uB,OAAQ,SAAU67B,GACdvhE,EAAOV,KAAMiiE,GACbjiE,KAAKwX,WAETA,QAAS,WACL,GAAyCqrD,GAArCj8D,EAAO5G,KAAMizB,EAAIrsB,EAAKqsB,EAAG5hB,EAAIzK,EAAKyK,CAClCzK,GAAK6I,QACLwjB,EAAIr0B,KAAK6Q,MAAMwjB,GACf5hB,EAAIzS,KAAK6Q,MAAM4B,IAEnBwxD,EAAiB9lC,EAAU9J,EAAG5hB,EAAGzK,EAAK81B,OAClCmmC,GAAkBj8D,EAAKq7D,cACnB/pE,EAAMC,QAAQoB,QAAQgB,MAAQrC,EAAMC,QAAQoB,QAAQkB,QAAU,IAC9DmM,EAAK7O,QAAQ,GAAG+B,MAAM6nC,SAAW,WACjC/6B,EAAK7O,QAAQ,GAAG+B,MAAMnB,KAAOiO,EAAKqsB,EAAI,KACtCrsB,EAAK7O,QAAQ,GAAG+B,MAAMwF,IAAMsH,EAAKyK,EAAI,MAErCzK,EAAK7O,QAAQ,GAAG+B,MAAM0oE,GAAmBK,EAE7Cj8D,EAAK87D,iBAAiBG,GACtBj8D,EAAKoB,QAAQ2/B,KAGrB+6B,iBAAkB,SAAUT,GACxBjiE,KAAKiiE,YAAcA,KAkBvBpD,EAAa75D,EAAOtE,QACpBC,KAAM,SAAU5I,EAASqI,GAAnB,GAGE4zC,GAFAptC,EAAO5G,IACXgF,GAAOf,GAAGtD,KAAKwH,KAAKvB,EAAM7O,EAASqI,GAC/B4zC,EAAQptC,EAAKxG,QAAQ4zC,MACnBA,IAASirB,GAGXA,EAAYjrB,GAAOlsC,KAAKlB,GAFxBq4D,EAAYjrB,IAAUptC,IAK9Bc,QACI+3D,EACAC,EACAC,GAEJv/D,SACI8O,KAAM,aACN8kC,MAAO,WAEXluB,QAAS,WACLi4C,EAAiBkB,EAAaj/D,OAElCm6D,SAAU,SAAU9yD,EAAWY,GAC3B,GAAIrB,GAAO5G,KAAM8iE,EAAY9D,EAAWp4D,EAAKxG,QAAQ4zC,MACrD,IAAI8uB,EACA,MAAOl8D,GAAKoB,QAAQX,EAAW3G,KAAWuH,EAAE0Q,OACxCmqD,UAAWA,EACXC,WAAY96D,EAAE86D,eAI1BC,MAAO,SAAU/6D,GACbjI,KAAKm6D,SAASsF,EAAWx3D,IAE7Bg7D,KAAM,SAAUh7D,GACZjI,KAAKm6D,SAASuF,EAAWz3D,IAE7Bi7D,MAAO,SAAUj7D,GACb,GAAIrB,GAAO5G,KAAM8iE,EAAY9D,EAAWp4D,EAAKxG,QAAQ4zC,MACjD8uB,KACAA,EAAUK,SAAWv8D,EAAKuzD,SAASwF,EAAM13D,OAIrD42D,EAAWuE,aAAe,SAAUpF,GAChC,GAA4DljE,GAAxDk5C,EAAQirB,EAAYjB,IAAckB,EAAUlB,EAChD,IAAIhqB,EAAO,CACP,IAAKl5C,EAAI,EAAGA,EAAIk5C,EAAMp8C,OAAQkD,IAC1BkK,EAAOf,GAAG6hB,QAAQ3d,KAAK6rC,EAAMl5C,GAEjCk5C,GAAMp8C,OAAS,QACRqnE,GAAYjB,SACZkB,GAAUlB,KAGzBa,EAAWwE,OAASpE,EAChBH,EAAiBD,EAAWn+D,QAC5BC,KAAM,SAAU5I,EAASqI,GAAnB,GAGE4zC,GAFAptC,EAAO5G,IACXgF,GAAOf,GAAGtD,KAAKwH,KAAKvB,EAAM7O,EAASqI,GAC/B4zC,EAAQptC,EAAKxG,QAAQ4zC,MACnBA,IAASkrB,GAGXA,EAAUlrB,GAAOlsC,KAAKlB,GAFtBs4D,EAAUlrB,IAAUptC,IAK5Bkf,QAAS,WACLi4C,EAAiBmB,EAAWl/D,OAEhCI,SACI8O,KAAM,iBACN8kC,MAAO,UACPnwC,OAAQ,QAGZk7D,EAAY/5D,EAAOtE,QACnBC,KAAM,SAAU5I,EAASqI,GACrB,GAAIwG,GAAO5G,IACXgF,GAAOf,GAAGtD,KAAKwH,KAAKvB,EAAM7O,EAASqI,GACnCwG,EAAK08D,YAAa,EAClB18D,EAAK6yD,WAAa,GAAIa,GAAW1zD,EAAK7O,SAClCyjE,QAAQ,EACRL,gBAAgB,EAChBt3D,OAAQ+C,EAAKxG,QAAQyD,OACrBga,UAAWjX,EAAKxG,QAAQg3D,SACxBnoD,MAAOjJ,EAAMY,EAAK4zD,OAAQ5zD,GAC1B28D,KAAMv9D,EAAMY,EAAKwzD,MAAOxzD,GACxBmkB,KAAM/kB,EAAMY,EAAK48D,MAAO58D,GACxBjP,IAAKqO,EAAMY,EAAK61D,KAAM71D,GACtBokB,OAAQhlB,EAAMY,EAAK68D,QAAS78D,GAC5BkuB,OAAQ9uB,EAAMY,EAAKy1D,QAASz1D,KAEhCA,EAAK88D,iBAAmB19D,EAAMY,EAAK+8D,UAAW/8D,GAC9CA,EAAKg9D,eAAiB59D,EAAMY,EAAKg9D,eAAgBh9D,IAErDc,QACIwwD,EACAkH,EACAC,EACAC,EACAC,EACAC,GAEJp/D,SACI8O,KAAM,YACNkoD,SAAUl/D,EAAMC,QAAQggB,MAAQ,EAAI,EACpC67B,MAAO,UACP6vB,aAAc,KACdpwC,KAAM,KACN9L,UAAW,KACX9jB,OAAQ,KACRy3C,OAAQ,KACRwoB,YAAY,EACZC,YAAY,EACZZ,SAAS,GAEba,WAAY,WACRhkE,KAAKsjE,YAAa,GAEtBM,eAAgB,SAAU37D,GACtB,GAAIrB,GAAO5G,IACPiI,GAAEmuB,UAAYl+B,EAAMypB,KAAKM,MACzBrb,EAAKuzD,SAASoF,GAAc5mD,MAAO1Q,IACnCrB,EAAK6yD,WAAWzuC,WAGxBi5C,YAAa,SAAUh8D,GACnB,GAAiBg6D,GAAbr7D,EAAO5G,KAAmBI,EAAUwG,EAAKxG,QAAS8jE,EAAat9D,EAAKs9D,WAAYzwC,EAAOrzB,EAAQqzB,KAAMowC,EAAej9D,EAAKxG,QAAQyjE,YACjIA,GACA5B,GACItpE,KAAMsP,EAAEgrB,EAAEvX,SAAWmoD,EAAalrE,KAClC2G,IAAK2I,EAAEoJ,EAAEqK,SAAWmoD,EAAavkE,MAGrCsH,EAAKu9D,WAAWxrE,MAAQsP,EAAEgrB,EAAEI,MAC5BzsB,EAAKu9D,WAAW7kE,KAAO2I,EAAEoJ,EAAEgiB,MAC3B4uC,EAAcvrE,EAAEgK,UAAWkG,EAAKu9D,aAEhCD,IACAjC,EAAY3iE,IAAM29D,EAAOgF,EAAY3iE,IAAK4kE,EAAW7yD,GACrD4wD,EAAYtpE,KAAOskE,EAAOgF,EAAYtpE,KAAMurE,EAAWjxC,IAE9C,MAATQ,QACOwuC,GAAY3iE,IACH,MAATm0B,SACAwuC,GAAYtpE,KAEvBiO,EAAKw9D,KAAKnsE,IAAIgqE,IAElBoC,oBAAqB,SAAUjkD,GAC3B,GAAIkkD,GAAiBtkE,KAAKI,QAAQk7C,MAClC,OAAOgpB,IAAkB5tE,EAAE0pB,GAAQrmB,GAAGuqE,IAE1CjI,QAAS,SAAUp0D,GACVjI,KAAKqkE,oBAAoBp8D,EAAE0Q,MAAMyH,SAClCnY,EAAE9D,kBAGVq2D,OAAQ,SAAUvyD,GAAV,GAaI7I,GAZJwH,EAAO5G,KAAMI,EAAUwG,EAAKxG,QAASunB,EAAYvnB,EAAQunB,UAAWy8C,EAAOhkE,EAAQgkE,IACvF,OAAIpkE,MAAKqkE,oBAAoBp8D,EAAEkQ,MAAMyhD,eAAiBx5D,EAAQ0jE,aAAel9D,EAAK08D,YAC9E18D,EAAK6yD,WAAWzuC,SAChB,IAEJpkB,EAAK2wD,cAAgBtvD,EAAEmY,OACvBxZ,EAAK29D,oBAAsBtlE,EAAU2H,EAAK2wD,eACtC6M,IACIx9D,EAAKw9D,MACLx9D,EAAKw9D,KAAKtkD,MAAK,GAAM,GAAMoI,SAE/BthB,EAAKw9D,KAAOlsE,EAAMgE,WAAWkoE,GAAQ1tE,EAAE0tE,EAAKj8D,KAAKvB,EAAMA,EAAK2wD,gBAAkB6M,EAC1EhlE,EAASH,EAAU2H,EAAK2wD,eAC5B3wD,EAAKu9D,WAAa/kE,EAClBwH,EAAKw9D,KAAKnsE,KACN0pC,SAAU,WACVgC,OAAQ,IACRhrC,KAAMyG,EAAOzG,KACb2G,IAAKF,EAAOE,MACbw3B,SAASv5B,EAASsa,MACrBjR,EAAKke,QAAQ,UAAW,WACpBle,EAAKw9D,KAAKh/C,WAAW,YAErB,KADA,GAAIo/C,GAAc9tE,EAAEuR,EAAEmY,SACdokD,EAAYhpE,KAAK,iBAAmBgpE,EAAY5sE,QACpD4sE,EAAcA,EAAY5qE,QAE9B,QACI2sB,SAAU3f,EAAKw9D,KAAK3gD,MACpBghD,UAAWD,EAAYhpE,KAAK,oBAIxCwjE,EAAW5+D,EAAQ4zC,OAASptC,EAC5BA,EAAKu8D,SAAU,EACXx7C,IACA/gB,EAAKs9D,WAAahH,EAAoBv1C,EAAW/gB,EAAKw9D,OAE1D1tE,EAAE6G,GAAUmI,GAAGy5D,EAAOv4D,EAAKg9D,gBACvBh9D,EAAKuzD,SAASiF,EAAWn3D,KACzBrB,EAAK6yD,WAAWzuC,SAChBpkB,EAAK+8D,aAET/8D,EAAK6yD,WAAWwC,UArChBr1D,IAuCJwzD,MAAO,SAAUnyD,GACbjI,KAAKu3D,cAAgBtvD,EAAEmY,OACnBpgB,KAAKm6D,SAASjC,EAAMjwD,GACpBjI,KAAKy5D,WAAWzuC,SAEhBhrB,KAAKsjE,YAAa,GAG1BE,MAAO,SAAUv7D,GAAV,GAECy8D,GASQtL,CAVZnxD,GAAE9D,iBACEugE,EAAgB1kE,KAAK2kE,oBAAoB18D,GACzCjI,KAAKI,QAAQ2jE,YAAc/jE,KAAK4kE,iBAAmBF,IACnD1kE,KAAK6kE,kBAAoBxG,EAAqBqG,GAC9C1kE,KAAK4kE,eAAiBF,GAE1B1kE,KAAK8kE,WAAa78D,EAClBjI,KAAK+kE,iBAAiB98D,EAAGy8D,GACrB1kE,KAAKI,QAAQ2jE,YACT/jE,KAAK6kE,kBAAkB,KACnBzL,EAAWkF,EAAmBr2D,EAAEgrB,EAAEvX,SAAUzT,EAAEoJ,EAAEqK,SAAUwiD,EAAmBl+D,KAAK6kE,oBACtF7kE,KAAKglE,qBAAuBtuE,EAAEgK,UAAWV,KAAKmkE,YAC9CnkE,KAAKilE,gBAAkB7L,EACJ,IAAfA,EAAS/nD,GAA0B,IAAf+nD,EAASnmC,GAC7BkW,cAAcnpC,KAAKklE,iBACnBllE,KAAKklE,gBAAkB,MACfllE,KAAKklE,kBACbllE,KAAKklE,gBAAkBh8B,YAAYxyC,EAAEsP,MAAMhG,KAAM,eAAgB,MAIzEA,KAAKokE,MACLpkE,KAAKikE,YAAYh8D,IAGzB88D,iBAAkB,SAAU98D,EAAGy8D,GAC3B1kE,KAAKmlE,gBAAgBT,EAAe,SAAUtkD,EAAQ09C,GAClD,IAAK19C,EAKD,MAJIu+C,KACAA,EAAexE,SAASuF,EAAWh/D,EAAOuH,GAAK86D,WAAYrsE,EAAEioE,EAAeb,kBAC5Ea,EAAiB,MAErB,CAEJ,IAAIA,EAAgB,CAChB,GAAIb,IAAkBa,EAAeb,cACjC,MAEJa,GAAexE,SAASuF,EAAWh/D,EAAOuH,GAAK86D,WAAYrsE,EAAEioE,EAAeb,kBAEhF19C,EAAO+5C,SAASsF,EAAW/+D,EAAOuH,GAAK86D,WAAYrsE,EAAEonE,MACrDa,EAAiBj+D,EAAO0f,GAAU09C,cAAeA,MAErD99D,KAAKm6D,SAASkF,EAAM3+D,EAAOuH,GACvB86D,WAAYpE,EACZ3rC,mBAAoB0xC,MAG5BU,YAAa,WAAA,GAKLV,GAEAW,EAAeC,EACfC,EAQAzK,EACA0K,EACA3K,EACA4K,EAlBA7rE,EAASoG,KAAK6kE,kBAAkB,GAAIzL,EAAWp5D,KAAKilE,gBAAiBS,EAAe1lE,KAAKglE,oBACxFprE,KAGD8qE,EAAgB1kE,KAAK2kE,oBAAoB3kE,KAAK8kE,YAClD9kE,KAAK+kE,iBAAiB/kE,KAAK8kE,WAAYJ,GAEnCa,EAAa3rE,IAAWukE,IAAiB,GACzCoH,GACAF,EAAgB9nE,EAASsa,KAAKkF,aAAeqhD,EAAQllE,SACrDosE,EAAgB/nE,EAASsa,KAAKnZ,YAAc0/D,EAAQnlE,UAEpDosE,EAAgBzrE,EAAO+sB,cAAgB/sB,EAAOmjB,aAC9CuoD,EAAgB1rE,EAAOme,aAAene,EAAO8E,aAE7Co8D,EAASlhE,EAAO+F,UAAYy5D,EAAS/nD,EACrCm0D,EAAYH,GAAiBvK,EAAS,GAAKA,EAASlhE,EAAOmjB,aAC3D89C,EAASjhE,EAAOwE,WAAag7D,EAASnmC,EACtCwyC,EAAYH,GAAiBzK,EAAS,GAAKA,EAASjhE,EAAO8E,YAC3D8mE,IACA5rE,EAAO+F,WAAay5D,EAAS/nD,GAE7Bo0D,IACA7rE,EAAOwE,YAAcg7D,EAASnmC,GAE9BjzB,KAAKokE,MAAQmB,IAAeE,GAAaD,KACrCA,IACAE,EAAapmE,KAAO85D,EAAS/nD,GAE7Bo0D,IACAC,EAAa/sE,MAAQygE,EAASnmC,GAElCjzB,KAAKokE,KAAKnsE,IAAIytE,MAGtBjJ,KAAM,SAAUx0D,GACZjI,KAAKmlE,gBAAgBnlE,KAAK2kE,oBAAoB18D,GAAI,SAAUmY,EAAQ09C,GAC5D19C,IACAA,EAAO8iD,MAAMxiE,KAAWuH,GAAK86D,WAAYrsE,EAAEonE,MAC3Ca,EAAiB,QAGzB3+D,KAAKyjE,QAAQzjE,KAAKm6D,SAASmF,EAASr3D,KAExCw7D,QAAS,SAAUr/D,GACf,GAAIwC,GAAO5G,IACX4G,GAAKi+D,kBAAoB,KACzB7kE,KAAK4kE,eAAiB,KACtBz7B,cAAcnpC,KAAKklE,iBACnBt+D,EAAK08D,YAAa,EACd18D,EAAKw9D,OAASx9D,EAAKu8D,QACnBz5C,WAAW,WACP9iB,EAAKw9D,KAAKtkD,MAAK,GAAM,GACjB1b,EACAwC,EAAK88D,mBAEL98D,EAAKw9D,KAAKpjE,QAAQ4F,EAAK29D,oBAAqB,OAAQ39D,EAAK88D,mBAE9D,GAEH98D,EAAK+8D,aAGbxJ,SAAU,SAAU9yD,EAAWY,GAC3B,GAAIrB,GAAO5G,IACX,OAAO4G,GAAKoB,QAAQX,EAAW3G,KAAWuH,EAAE0Q,OACxCsa,EAAGhrB,EAAEgrB,EACL5hB,EAAGpJ,EAAEoJ,EACLkmD,cAAe3wD,EAAK2wD,cACpBoO,cAAe19D,EAAEkQ,MAAQlQ,EAAEkQ,MAAMyhD,aAAe,KAChDmJ,WAAY96D,EAAE86D,WACd/vC,mBAAoB/qB,EAAE+qB,uBAG9B2xC,oBAAqB,SAAU18D,GAC3B,GAAImY,GAAS4S,EAAmB/qB,GAAIm8D,EAAOpkE,KAAKokE,IAShD,OARIA,IAAQthE,EAASshE,EAAK,GAAIhkD,KAC1BgkD,EAAKtjE,OACLsf,EAAS4S,EAAmB/qB,GACvBmY,IACDA,EAAS4S,EAAmB/qB,IAEhCm8D,EAAKpqE,QAEFomB,GAEX+kD,gBAAiB,SAAUptE,EAAS4oB,GAChC,GAAI3hB,GAAQg1C,EAAQh0C,KAAKI,QAAQ4zC,MAAOwpB,EAAUyB,EAAYjrB,GAAQypB,EAAQyB,EAAUlrB,IACpFwpB,GAAWA,EAAQ5lE,QAAU6lE,GAASA,EAAM7lE,UAC5CoH,EAASu+D,EAAYxlE,EAASylE,EAASC,GACnCz+D,EACA2hB,EAAS3hB,EAAOohB,OAAQphB,EAAO8+D,eAE/Bn9C,MAIZmF,QAAS,WACL,GAAIlf,GAAO5G,IACXgF,GAAOf,GAAG6hB,QAAQ3d,KAAKvB,GACvBA,EAAK+8D,YACL/8D,EAAK6yD,WAAW3zC,UAChB9lB,KAAK6kE,kBAAoB,KACzB7kE,KAAK4kE,eAAiB,KACtBz7B,cAAcnpC,KAAKklE,iBACnBt+D,EAAK2wD,cAAgB,MAEzBoM,UAAW,WACP,GAAI/8D,GAAO5G,IACP4G,GAAKw9D,MACLx9D,EAAKw9D,KAAKl8C,eAEP82C,GAAWp4D,EAAKxG,QAAQ4zC,OAC/BptC,EAAKoB,QAAQ,WACbpB,EAAKoB,QAAQw3D,GACb9oE,EAAE6G,GAAUqsB,IAAIu1C,EAAOv4D,EAAKg9D,mBAGpC1rE,EAAMmpB,GAAG8G,OAAO02C,GAChB3mE,EAAMmpB,GAAG8G,OAAO22C,GAChB5mE,EAAMmpB,GAAG8G,OAAO42C,GAChB7mE,EAAM0nE,WAAaA,EACnB1nE,EAAMglE,oBAAsBA,EAC5Bx8D,EAAOxI,EAAMmpB,IACTugD,KAAMA,EACNV,eAAgBA,EAChBtC,QAASA,IAuDb1mE,EAAMmpB,GAAG09C,UAAU6G,OACftH,mBAAoBA,EACpBJ,mBAAoBA,EACpBG,qBAAsBA,IAE5B1nE,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,MAAO+nE,EAAU1mE,EAAMmpB,GAAGu9C,QAASgD,EAAO1pE,EAAMmpB,GAAGugD,KAAMV,EAAiBhpE,EAAMmpB,GAAG6/C,eAAgB1kC,EAAav8B,EAAGu8B,WAAYD,EAAYt8B,EAAGs8B,UAAW19B,EAAMD,KAAKC,IAAKgnE,EAAoB,IAAKC,EAAoB,GAAKC,EAAW,IAAMC,EAAsB,GAAIC,EAAe,GAAIC,EAAyB,GAAKC,EAA8B,EAAGC,EAAe,sBAAuBC,EAAe,sBAAuBC,EAAO,OAAQ3+B,EAAS,SAAU4+B,EAAS,SAAUC,EAAS,SAAUC,EAAiB,EACppBC,EAAenqC,EAAU77B,QACzBC,KAAM,SAAUP,GACZ,GAAIwG,GAAO5G,IACXu8B,GAAUt4B,GAAGtD,KAAKwH,KAAKvB,GACvBlG,EAAOkG,EAAMxG,GACbwG,EAAK6yD,WAAWryD,KAAK,aAAcpB,EAAMY,EAAKqI,MAAOrI,IACrDA,EAAK+/D,WAAWv/D,KAAK,QAASpB,EAAMY,EAAKokB,OAAQpkB,KAErDwY,QAAS,WACL,MAAOpf,MAAKqmC,QAAQ3J,MAAQ18B,KAAK4lB,WAAWo7C,UAEhDj7B,KAAM,WACF,MAAO/lC,MAAK4lB,WAAWo7C,SAAWhhE,KAAKqmC,QAAQ3J,MAAQ,KAE3DoJ,KAAM,WACF,GAAIO,GAAUrmC,KAAKqmC,OACnBA,GAAQk8B,UAAU,KAClBviE,KAAK4lB,WAAWk7C,QAAQz6B,EAAQ3J,QAEpCsJ,MAAO,WACH,GAAIK,GAAUrmC,KAAKqmC,OACnBA,GAAQu8B,QAAQ5iE,KAAK4lB,WAAWo7C,UAChChhE,KAAK4lB,WAAWk7C,QAAQz6B,EAAQ3J,UAGpCkqC,EAAcrqC,EAAU77B,QACxBC,KAAM,SAAUP,GACZ,GAAIwG,GAAO5G,IACXu8B,GAAUt4B,GAAGtD,KAAKwH,KAAKvB,GACvBlG,EAAOkG,EAAMxG,GACTu+B,WAAY,GAAInC,IACZ/I,KAAMrzB,EAAQqzB,KACd4S,QAASjmC,EAAQimC,QACjBL,MAAO,WACHp/B,EAAK61D,YAIjB71D,EAAK+/D,WAAWv/D,KAAK,QAAS,WAC1BR,EAAKokB,WAETpkB,EAAK6yD,WAAWryD,KAAK,MAAOpB,EAAMY,EAAKqI,MAAOrI,IAC9CA,EAAK6yD,WAAWryD,KAAK,aAAcpB,EAAMY,EAAKqI,MAAOrI,IACrDA,EAAK6yD,WAAWryD,KAAK,MAAOpB,EAAMY,EAAKo/B,MAAOp/B,KAElDq/B,SAAU,WACNjmC,KAAK2+B,WAAW3T,UAEpB67C,OAAQ,SAAUnrD,GACd,GAAI9U,GAAO5G,IACX4G,GAAKokB,SACLpkB,EAAKkgE,QAAQprD,IAEjBsqB,MAAO,WACH,GAAIp/B,GAAO5G,IACP4G,GAAKmgE,SAASpG,cACd/5D,EAAKogE,YAELpgE,EAAK61D,QAGb12B,KAAM,WACF,MAAOlnC,GAAImB,KAAKo5D,UAAY,GAEhCnqD,MAAO,SAAUhH,GACb,GAAiBmxD,GAAbxyD,EAAO5G,IACN4G,GAAK46D,UAAUpiD,UAGhBxY,EAAKmgE,SAASpG,cACd/5D,EAAKogE,aAEL5N,EAAWnxD,EAAEkQ,MAAM0L,KAAO4iD,EAAiB,EAAIx+D,EAAEkQ,MAAMvR,EAAK6sB,MAAM2lC,SAClExyD,EAAKwyD,SAAWx6D,KAAKlG,IAAIkG,KAAKoT,IAAIonD,EAAWxyD,EAAKqgE,mBAAoBhB,IAAgBA,GACtFr/D,EAAK+/D,WAAW3G,cAChBzjC,EAAUt4B,GAAGgL,MAAM9G,KAAKvB,MAGhCk/B,KAAM,WACF,GAAIl/B,GAAO5G,KAAMwhE,EAAY56D,EAAK46D,UAAW0F,EAAWtgE,EAAKmgE,SAASpG,cAAgBuF,EAAyBt/D,EAAKsgE,SAAU7zC,EAAQzsB,EAAKwyD,UAAY8N,EAAUxrD,EAAW9U,EAAKy/B,QAAQz/B,EAAK6sB,MAAQJ,GACjMzsB,EAAKi7D,SAAWL,EAAUb,YAAYjlD,KACvCA,EAAW9c,KAAKlG,IAAIkG,KAAKoT,IAAI0J,EAAU8lD,EAAU9oE,KAAM8oE,EAAUxvD,KACjEpL,EAAKwyD,SAAW,GAEpBxyD,EAAKy/B,QAAQG,SAAS5/B,EAAK6sB,KAAM/X,IAErC+gD,KAAM,WACFz8D,KAAK2mE,WAAW1G,gBAChBjgE,KAAKrI,OAETqvE,UAAW,WACP,GAAIpgE,GAAO5G,KAAMwhE,EAAY56D,EAAK46D,UAAW2F,EAAWvgE,EAAKy/B,QAAQz/B,EAAK6sB,MAAQ+tC,EAAU9oE,IAAM8oE,EAAU9oE,IAAM8oE,EAAUxvD,GAC5HpL,GAAKkgE,QAAQK,IAEjBL,QAAS,SAAUprD,GACf1b,KAAK2+B,WAAWyH,QACZ1qB,SAAUA,EACVrb,SAAUwlE,EACVtmC,KAAM/C,EAAWiK,iBAIzB2gC,EAAmB7qC,EAAU77B,QAC7BC,KAAM,SAAUP,GACZ,GAAIwG,GAAO5G,IACX9H,GAAM6H,QAAQw8B,UAAUt4B,GAAGtD,KAAKwH,KAAKnI,MACrCU,EAAOkG,EAAMxG,GACT2iC,UACAloC,eACAuE,aAGR0mC,KAAM,WACF9lC,KAAKqnE,qBACLrnE,KAAKomC,OAAOpmC,KAAK+iC,SAErBgD,KAAM,WACF,MAAOlnC,GAAImB,KAAKZ,OAAOiS,GAAK80D,GAA+BtnE,EAAImB,KAAKZ,OAAO6zB,GAAKkzC,GAEpFngC,MAAO,WACHhmC,KAAKomC,OAAOpmC,KAAKnF,aACbmF,KAAK2gB,UACL3gB,KAAK2gB,SAASxY,QAGtBm/D,eAAgB,SAAUt6C,EAAMC,GAC5BjtB,KAAKZ,UACLY,KAAK+iC,OAAS/V,EACdhtB,KAAKnF,YAAcoyB,GAEvBs6C,YAAa,SAAU5mD,GACfA,GAAYzoB,EAAMgE,WAAWykB,GAC7B3gB,KAAK2gB,SAAWA,EAEhBA,EAAW/pB,GAGnBywE,mBAAoB,WAChBrnE,KAAKZ,QACD6zB,GAAIjzB,KAAKnF,YAAYo4B,EAAIjzB,KAAK+iC,OAAO9P,GAAK,EAC1C5hB,GAAIrR,KAAKnF,YAAYwW,EAAIrR,KAAK+iC,OAAO1xB,GAAK,GAE9CrR,KAAK+iC,QACD1xB,EAAGrR,KAAK+iC,OAAO1xB,EAAIrR,KAAKZ,OAAOiS,EAC/B4hB,EAAGjzB,KAAK+iC,OAAO9P,EAAIjzB,KAAKZ,OAAO6zB,MAIvCu0C,EAAY3wE,EAAM6J,QAClBC,KAAM,SAAUP,GACZ,GAAIwG,GAAO5G,KAAM6+B,EAA8B,MAAjBz+B,EAAQqzB,KAAc17B,EAAUrB,EAAE,sCAAwCmoC,EAAa,aAAe,YAAc,iBAClJn+B,GAAOkG,EAAMxG,GACTrI,QAASA,EACT0vE,YAAa,EACbphC,QAAS,GAAIu4B,GAAQ7mE,GACrB2vE,cAAetnE,EAAQimC,QACvBshC,cAAevnE,EAAQunE,cACvB5pE,KAAM8gC,EAAa,QAAU,WAEjCj4B,EAAK8gE,cAActgE,KAAKugC,EAAQ3hC,EAAMY,EAAK4Q,QAAS5Q,IACpDA,EAAK+gB,UAAUmc,OAAO/rC,GAClBqI,EAAQunE,eACR/gE,EAAK5M,QAGbwd,QAAS,WACL,GAAI5Q,GAAO5G,KAAMyzB,EAAO7sB,EAAK6sB,KAAM+tC,EAAY56D,EAAK46D,UAAWoG,EAAWpG,EAAUzjE,KAAM2pE,EAAgB9gE,EAAK8gE,cAAeG,EAAYD,EAAWpG,EAAUpzB,MAAOzM,EAAW/iC,KAAK6Q,OAAOi4D,EAAcj0C,GAAQo0C,GAAY9pE,EAAOa,KAAK6Q,MAAMm4D,EAAWC,EACxPA,IAAa,EACb7nE,KAAKjI,QAAQE,IAAI,UAAW,QAE5B+H,KAAKjI,QAAQE,IAAI,UAAW,IAE5B0pC,EAAW5jC,EAAO6pE,EAClB7pE,EAAO6pE,EAAWjmC,EACXA,EAAW,IAClB5jC,GAAQ4jC,EACRA,EAAW,GAEX/6B,EAAK6gE,aAAe1pE,IACpB6I,EAAK7O,QAAQE,IAAI2O,EAAK7I,KAAMA,EAAO,MACnC6I,EAAK6gE,YAAc1pE,GAEvB6I,EAAKy/B,QAAQG,SAAS/S,EAAMkO,IAEhC3nC,KAAM,WACFgG,KAAKjI,QAAQE,KACTisC,QAAS4hC,EACTgC,WAAY,aAGpBhnE,KAAM,WACGd,KAAK2nE,eACN3nE,KAAKjI,QAAQE,KAAMisC,QAAS,OAIpC5a,EAAWtkB,EAAOtE,QAClBC,KAAM,SAAU5I,EAASqI,GAAnB,GAcEwmC,GAAkC+/B,EAA4CtgC,EAA8BzgB,EAIxGmiD,EAA8CtO,EAgB9CuO,EAKAC,EAKAC,EA3CJthE,EAAO5G,IAIX,OAHAgF,GAAOf,GAAGtD,KAAKwH,KAAKvB,EAAM7O,EAASqI,GACnCrI,EAAU6O,EAAK7O,SACf6O,EAAKuhE,QAAUvhE,EAAKxG,QAAQipB,WAAanxB,EAAMC,QAAQ2jB,qBAEnD/jB,EAAQuC,SAAS,sBAAsB8tE,QAAQ,mCAC/C1nE,EAAOkG,GACHyhE,cAAetwE,EACfuwE,eAAgBvwE,EAAQ4C,WAAWvD,UAEvC,IAEJW,EAAQE,IAAI,WAAY,UAAUqC,SAAS,qBAAqBiuE,UAAU,sCAAsCH,QAAQ,mCACpHxhC,EAAQ7uC,EAAQ4C,WAAWouB,GAAG,GAAI49C,EAAa,GAAIzuE,GAAM0nE,WAAW7nE,GAAUsuC,EAAU,GAAIu4B,GAAQh4B,GAAQhhB,EAAa,GAAIs7C,IACzHnpE,QAAS6uC,EACTjf,UAAW5vB,EACXooE,cAAev5D,EAAKxG,QAAQ1F,OAC5BqtE,EAAiB/nE,KAAKI,QAAQ2nE,eAAgBtO,EAAa,GAAIvhE,GAAMoiE,WAAWviE,GAChF4jE,YAAa,QACbN,SAAS,EACTF,gBAAgB,EAChBS,kBAAkB,EAClBR,kBAAkB,EAClBF,WAAYt0D,EAAKxG,QAAQ1F,KACzBuU,MAAO,SAAUhH,GACb2d,EAAWpO,SACX,IAAIgxD,GAAY3pE,EAAIoJ,EAAEgrB,EAAEmmC,UAAWqP,EAAY5pE,EAAIoJ,EAAEoJ,EAAE+nD,UAAWsP,EAA8B,EAAZF,GAAiBC,EAAWE,EAA+BjyE,EAAEoM,SAAS8D,EAAK0hE,eAAe,GAAIrgE,EAAE0Q,MAAMyH,QAASwoD,EAA4B,EAAZH,GAAiBD,GAC/NG,IAAiCZ,EAAe9/D,IAAMrB,EAAKwY,UAAYwG,EAAWqN,EAAE7T,SAAWspD,GAAmB9iD,EAAWvU,EAAE+N,SAAWwpD,GAC3InP,EAAWwC,UAEXxC,EAAWzuC,YAGnBg9C,EAAO,GAAIpG,IACXv7B,QAASA,EACTzgB,WAAYA,EACZ6zC,WAAYA,EACZoI,QAASj7D,EAAKxG,QAAQyhE,UACtBoG,EAAe,GAAIvB,IACnBrgC,QAASA,EACTzgB,WAAYA,EACZ6zC,WAAYA,EACZkN,WAAYA,IACZuB,EAAmB,GAAId,IACvBhhC,OAAQ,SAAU67B,GACdr7D,EAAKiiE,SAAS5G,EAAYhvC,EAAGgvC,EAAY5wD,MAGrDg1B,EAAQj/B,KAAKugC,EAAQ,WACjB/gC,EAAKjH,WAAa0mC,EAAQh1B,EAC1BzK,EAAKxI,YAAcioC,EAAQpT,EAC3BrsB,EAAKoB,QAAQw+D,GACT7mE,UAAWiH,EAAKjH,UAChBvB,WAAYwI,EAAKxI,eAGrBwI,EAAKxG,QAAQ0oE,qBACb/wE,EAAQ2N,GAAG,4BAA6BM,EAAMhG,KAAM,iBAExDU,EAAOkG,GACHy/B,QAASA,EACTzgB,WAAYA,EACZqiD,aAAcA,EACdC,iBAAkBA,EAClBzO,WAAYA,EACZuO,KAAMA,EACNrB,WAAYA,EACZoC,QAAQ,EACR3pD,SAAS,EACTipD,cAAezhC,EACfjnC,UAAW,EACXvB,WAAY,EACZkqE,eAAgBvwE,EAAQ4C,WAAWvD,UAEvCwP,EAAKoiE,UAAU,KACfpiE,EAAKoiE,UAAU,KACfpiE,EAAKqiE,UAAY,WACbriE,EAAKsiE,QAAS,EACdtiE,EAAK6yD,WAAW9hE,IAAI,EAAGiP,EAAKuiE,UAEhCvjD,EAAWpO,UACP5Q,EAAKxG,QAAQgpE,eACbxiE,EAAKyiE,qBAtETtxE,IAyEJuxE,aAAc,SAAUrhE,GACfjI,KAAKkpE,SACNlpE,KAAKkpE,QAAS,EACdlpE,KAAKmpE,QAAU,EACfnpE,KAAKy5D,WAAWO,MAAM,EAAGh6D,KAAKmpE,UAElCv+C,aAAa5qB,KAAKupE,eAClBvpE,KAAKupE,cAAgB7/C,WAAW1pB,KAAKipE,UAAW,GAChD,IAAI51C,GAAQn7B,EAAMi7B,YAAYlrB,EAC1BorB,KACArzB,KAAKmpE,SAAW91C,EAChBrzB,KAAKy5D,WAAW1uC,KAAK,EAAG/qB,KAAKmpE,UAEjClhE,EAAE9D,kBAENm8D,YAAa,WACTtgE,KAAK4lB,WAAWvU,EAAEivD,eAEtBI,YAAa,SAAU1uD,EAAKtZ,GACxBsH,KAAK4lB,WAAWvU,EAAEqvD,YAAY1uD,EAAKtZ,IAEvCQ,OAAQ,WACJ,MAAO8G,MAAK4lB,WAAWvU,EAAEtT,MAE7Bgf,aAAc,WACV,MAAO/c,MAAKqoE,cAAc,GAAGtrD,cAEjCre,YAAa,WACT,MAAOsB,MAAKqoE,cAAc,GAAG3pE,aAEjC0B,SACI8O,KAAM,WACNxU,MAAM,EACN8uE,WAAY,IACZC,oBAAoB,EACpB5H,SAAS,EACTx4C,WAAW,EACXy/C,qBAAqB,EACrBf,eAAgB,WACZ,OAAO,GAEXqB,eAAe,EACf1nD,UACIgoD,aAAc,kBACdC,gBAAiB,qBACjBC,gBAAiB,eAGzBliE,QACI4+D,EACAE,EACAD,GAEJ5gD,QAAS,WACA3lB,KAAKmoE,SACNnoE,KAAK6pE,kBAGbxkD,WAAY,SAAUjlB,GAClB,GAAIwG,GAAO5G,IACXgF,GAAOf,GAAGohB,WAAWld,KAAKvB,EAAMxG,GAC5BA,EAAQgpE,eACRxiE,EAAKyiE,sBAGbnoC,MAAO,WACClhC,KAAKmoE,QACLnoE,KAAKqoE,cAAc1oE,UAAU,IAE7BK,KAAKqmC,QAAQD,QACTnT,EAAG,EACH5hB,EAAG,IAEPrR,KAAK8pE,OAAO,KAGpBD,eAAgB,WACZ7pE,KAAK4lB,WAAWpO,UACZxX,KAAKgoE,KAAK/0C,EAAE0tC,eACZ3gE,KAAKqmC,QAAQG,SAAS,IAAKxmC,KAAK4lB,WAAWqN,EAAEjhB,KAE7ChS,KAAKgoE,KAAK32D,EAAEsvD,eACZ3gE,KAAKqmC,QAAQG,SAAS,IAAKxmC,KAAK4lB,WAAWvU,EAAEW,MAGrD+3D,QAAS,WACL,GAAInkD,GAAa5lB,KAAK4lB,UACtBA,GAAWpO,UACXxX,KAAK8pE,OAAOlkD,EAAWkhB,UACvB9mC,KAAKqmC,QAAQD,OAAOxgB,EAAW07C,sBAEnC7hD,OAAQ,WACJzf,KAAKof,SAAU,GAEnBG,QAAS,WACLvf,KAAKof,SAAU,GAEnBypD,SAAU,SAAU51C,EAAG5hB,GACfrR,KAAKmoE,SACLnoE,KAAKqoE,cAAcjqE,WAAWS,EAAIo0B,IAClCjzB,KAAKqoE,cAAc1oE,UAAUd,EAAIwS,MAEjCrR,KAAK4lB,WAAWpO,UAChBxX,KAAKqmC,QAAQD,QACTnT,EAAGA,EACH5hB,EAAGA,MAIf24D,iBAAkB,SAAU/2C,EAAG5hB,EAAGsP,GAC9B,GAAIqM,GAAMC,CACNjtB,MAAKmoE,QACLnoE,KAAK6oE,SAAS51C,EAAG5hB,IAEjB2b,GACIiG,EAAGjzB,KAAKqmC,QAAQpT,EAChB5hB,EAAGrR,KAAKqmC,QAAQh1B,GAEpB4b,GACIgG,EAAGA,EACH5hB,EAAGA,GAEPrR,KAAKkoE,iBAAiBZ,eAAet6C,EAAMC,GAC3CjtB,KAAKkoE,iBAAiBX,YAAY5mD,GAClC3gB,KAAKkoE,iBAAiBj5D,UAG9Bg7D,YAAa,WACT,GAAIrjE,GAAO5G,IACX4G,GAAKsjE,YAAY5kC,YAAY+gC,GAC7Bz/D,EAAKujE,cAAcznE,KAAKkE,EAAK8iE,kBAC7B9iE,EAAKwjE,SAASpkC,QACdp/B,EAAKyjE,SAASrkC,QACdp/B,EAAK6yD,WAAWzuC,UAEpBlF,QAAS,WACL9gB,EAAOf,GAAG6hB,QAAQ3d,KAAKnI,MACnBA,KAAKy5D,YACLz5D,KAAKy5D,WAAW3zC,WAGxBgkD,OAAQ,SAAUptC,GACd18B,KAAK4lB,WAAWk7C,QAAQpkC,GACxB18B,KAAKqmC,QAAQu8B,QAAQlmC,IAEzB2sC,mBAAoB,WAChB,GAAIziE,GAAO5G,IACX4G,GAAKgf,WAAWvU,EAAEuvD,eAClBh6D,EAAK8iE,aAAexxE,EAAMuK,SAASmE,EAAKxG,QAAQshB,SAASgoD,cACzD9iE,EAAK+iE,gBAAkBzxE,EAAMuK,SAASmE,EAAKxG,QAAQshB,SAASioD,iBAC5D/iE,EAAKgjE,gBAAkB1xE,EAAMuK,SAASmE,EAAKxG,QAAQshB,SAASkoD,iBAC5DhjE,EAAKyhE,cAAcD,QAAQ,oKAAsKxhE,EAAK8iE,iBAAmB,kBACzN9iE,EAAKsjE,YAActjE,EAAKyhE,cAAc1tE,WAAWvD,QACjDwP,EAAKujE,cAAgBvjE,EAAKsjE,YAAYvvE,SAAS,gBAC/CiM,EAAKohE,KAAK32D,EAAEjK,KAAK,SAAUpB,EAAMY,EAAK0jE,YAAa1jE,IACnDA,EAAK6yD,WAAWryD,KAAK,MAAOpB,EAAMY,EAAK2jE,SAAU3jE,KAErD2jE,SAAU,WACN,GAAI3jE,GAAO5G,IACN4G,GAAKmiE,SAGVniE,EAAKmiE,QAAS,EACdniE,EAAKsjE,YAAY5kC,YAAY8gC,GAAc9rE,SAAS+rE,GACpDz/D,EAAKujE,cAAcznE,KAAKkE,EAAKgjE,qBAC7BhjE,EAAKwjE,SAASvD,OAAOjgE,EAAKxG,QAAQopE,WAAa,GAC/C5iE,EAAKoB,QAAQ,UAEjBsiE,YAAa,WACT,GAAI1jE,GAAO5G,IACP4G,GAAKy/B,QAAQh1B,EAAI60D,EAAyBt/D,EAAKxG,QAAQopE,WAClD5iE,EAAKmiE,SACNniE,EAAKmiE,QAAS,EACdniE,EAAKsjE,YAAY5kC,YAAY+gC,GAAc/rE,SAAS8rE,GACpDx/D,EAAKujE,cAAcznE,KAAKkE,EAAK+iE,sBAE1B/iE,EAAKmiE,SACZniE,EAAKmiE,QAAS,EACdniE,EAAKsjE,YAAY5kC,YAAY8gC,GAC7Bx/D,EAAKujE,cAAcznE,KAAKkE,EAAK8iE,oBAGrCV,UAAW,SAAUv1C,GACjB,GAAI7sB,GAAO5G,KAAMqmC,EAAUz/B,EAAKy/B,QAASm7B,EAAY56D,EAAKgf,WAAW6N,GAAOkzC,EAAa//D,EAAK+/D,WAAYI,EAAWngE,EAAKohE,KAAKv0C,GAAO+2C,EAAY,GAAIhD,IAC9I/zC,KAAMA,EACN4S,QAASA,EACTm7B,UAAWA,EACX75C,UAAW/gB,EAAK7O,QAChB4vE,cAAe/gE,EAAKxG,QAAQqpE,oBAEpCjI,GAAUp6D,KAAKugC,EAAQ,WACnB6iC,EAAUhzD,YAEduvD,EAAS3/D,KAAKugC,EAAQ,WAClB6iC,EAAUxwE,SAEd4M,EAAK6sB,EAAO,WAAa,GAAImzC,IACzBnzC,KAAMA,EACNszC,SAAUA,EACV1gC,QAASA,EACTsgC,WAAYA,EACZlN,WAAY7yD,EAAK6yD,WACjB+H,UAAWA,EACXK,QAASj7D,EAAKxG,QAAQyhE,QACtBqF,SAAUtgE,EAAKxG,QAAQ8mE,UAAYnB,EACnCkB,mBAAoBrgE,EAAKxG,QAAQ6mE,oBAAsBjB,EACvDruE,IAAK,WACD6yE,EAAU1pE,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,eAAgB,cAAeD,IACxC,WAkhBE,MA1gBC,UAAUE,EAAGE,GASV,QAASkM,GAAS6kB,EAAWvH,GACzB,SAAKuH,IAAcvH,KAGZuH,IAAcvH,GAAU1pB,EAAEoM,SAAS6kB,EAAWvH,IAb5D,GAwdOqqD,GACAC,EACAC,EAzdAzyE,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,aAAcixE,EAAO,OAAQC,EAAQ,QAASC,EAAa,aAAcC,EAAW,WAAYC,EAAS,SAAU9oD,EAAO,OAAQE,EAAQ,QAAS6oD,EAAM,MAAOC,EAAS,SAAUC,EAAW,WAAYptC,EAAS,SAAUqtC,EAAO,OAAQC,EAAW,WAAYjtC,EAAW,WAAYktC,EAAU,UAAWC,EAAU,UAAWC,EAAS,iBAAkBC,EAAe,iBAAkBC,EAAqB,uBAAwBC,EAAiB,4CAA6CC,EAAY,OAAQC,EAAmBn1E,EAAE6G,SAASmC,iBAAkBsG,EAAQtP,EAAEsP,MAAO8lE,EAASp1E,EAAEC,QAAS6vE,EAAS,SAAU7oC,EAAYxlC,EAAQC,YAAYH,IAAKwhC,EAAYkE,EAAY,YAAaj9B,EAAShK,EAAEgK,OAAQqrE,EAAK,cAAezuE,GAC54B,YACA,cACA,eACA,aACA,cACA,eAQJ0uE,EAAQhnE,EAAOtE,QACfC,KAAM,SAAU5I,EAASqI;AACrB,GAAiB6rE,GAAbrlE,EAAO5G,IACXI,GAAUA,MACNA,EAAQ/B,QACR+B,EAAQ2iC,OAAS3iC,EAAQ2iC,QAAUmoC,EAAS,IAAM9oD,EAClDhiB,EAAQuhC,SAAWvhC,EAAQuhC,UAAYspC,EAAM,IAAM7oD,GAEvDpd,EAAOf,GAAGtD,KAAKwH,KAAKvB,EAAM7O,EAASqI,GACnCrI,EAAU6O,EAAK7O,QACfqI,EAAUwG,EAAKxG,QACfwG,EAAKslE,WAAa9rE,EAAQ+rE,UAAY/rE,EAAQ+rE,UAAUl1E,MAAM,QAC9D2P,EAAKwlE,UAAYl0E,EAAM4zB,cAAc8/C,EAAW1zE,EAAMyrB,QACvB,IAA3B/c,EAAKslE,WAAWt0E,QAChBgP,EAAKslE,WAAWpkE,KAAKlB,EAAKslE,WAAW,IAEzCD,EAAcv1E,EAAEkQ,EAAKxG,QAAQisE,QAAQp0D,QAAQ,qBAAqBpU,OAAO,sBACzEzD,EAAQ02B,SAAWpgC,EAAEA,EAAE0J,EAAQ02B,UAAU,IAAMm1C,EAAY,IAAM1uE,SAASsa,MAC1EjR,EAAK7O,QAAQ+I,OAAOxG,SAAS,2BAA2B8G,YAAY,UAAWhB,EAAQ/B,OAAOpG,KAAM0pC,SAAUwpC,IAAYr0C,SAAS12B,EAAQ02B,UAAUpxB,GAAG,aAAeqmE,EAAI,WACvKnlE,EAAK0lE,UAAW,IACjB5mE,GAAG,aAAeqmE,EAAI,WACrBnlE,EAAK0lE,UAAW,IAEpB1lE,EAAKvN,QAAU3C,IACX0J,EAAQmsE,aAAc,IACtBnsE,EAAQmsE,WACJC,MAAQzsE,YACR0sE,OACI3rE,MAAM,EACNf,cAIZW,EAAON,EAAQmsE,UAAUC,MACrBjsE,SAAU,WACNqG,EAAKvN,QAAQpB,KAAMkG,SAAUmtE,IAC7B1kE,EAAK08D,YAAa,EAClB18D,EAAKuzD,SAAS4Q,MAGtBrqE,EAAON,EAAQmsE,UAAUE,OACrBlsE,SAAU,WACNqG,EAAK8lE,qBAGb9lE,EAAK+lE,gBAAkB,SAAU1kE,GAC7BrB,EAAKgmE,WAAW3kE,IAGhBrB,EAAKimE,aADL10E,EAAQgf,SAASyC,QACG,SAAU3R,GAC1ByhB,WAAW,WACP9iB,EAAK+e,QAAQ1d,IACd,MAGa,SAAUA,GAC1BrB,EAAK+e,QAAQ1d,IAGjB7H,EAAQ0sE,cACRp2E,EAAE0J,EAAQ0sE,cAAcpnE,GAAGtF,EAAQ2sE,YAAchB,EAAIr1E,EAAEsP,MAAMY,EAAKuZ,OAAQvZ,KAGlFc,QACIkjE,EACAG,EACAF,EACAC,GAEJ1qE,SACI8O,KAAM,QACN69D,YAAa,QACbhqC,OAAQmoC,EAAS,IAAMhpD,EACvByf,SAAUspC,EAAM,IAAM/oD,EACtBmqD,OAAQjB,EACRt0C,SAAU,KACVq1C,UAAW,WACXa,SAAUr2E,OACVs2E,kBAAkB,EAClBl0E,UAAU,EACVm0E,OAAO,EACPC,YACIl0E,MAAO,EACPC,OAAQ,GAEZqzE,WACIC,MACIzsE,QAAS,eACT4+B,YAAY,EACZt+B,SAAU,KAEdosE,OACIpsE,SAAU,IACVS,MAAM,KAIlB4rE,gBAAiB,WAAA,GACT9lE,GAAO5G,KACP0b,EAAW9U,EAAKvN,QAAQmC,KAAK6vE,EACjCzkE,GAAKvN,QAAQyH,OACT4a,GACA9U,EAAKvN,QAAQpB,IAAIyjB,GAEjB9U,EAAKxG,QAAQisE,QAAUjB,GACvBxkE,EAAKwmE,gBAETxmE,EAAKymE,UAAW,EAChBzmE,EAAKuzD,SAAS2Q,IAElBhlD,QAAS,WACL,GAAyElsB,GAArEgN,EAAO5G,KAAMI,EAAUwG,EAAKxG,QAASrI,EAAU6O,EAAK7O,QAAQ6xB,IAAImiD,EACpE/mE,GAAOf,GAAG6hB,QAAQ3d,KAAKvB,GACnBxG,EAAQ0sE,cACRp2E,EAAE0J,EAAQ0sE,cAAcljD,IAAImiD,GAE3B3rE,EAAQ8sE,QACTrB,EAAiBhkE,OAAOjB,EAAKwlE,UAAWxlE,EAAK+lE,iBAC7C/lE,EAAK0mE,eAAc,IAEvBp1E,EAAM4tB,QAAQlf,EAAK7O,QAAQ4C,YAC3B5C,EAAQguB,aACJ3lB,EAAQ02B,SAAS,KAAOv5B,SAASsa,OACjCje,EAAS7B,EAAQ6B,OAAO,0BACpBA,EAAO,GACPA,EAAOsuB,SAEPnwB,EAAQmwB,WAIpBskD,KAAM,SAAUv5C,EAAG5hB,GACf,GAIuDk7D,GAAWlzE,EAJ9DuN,EAAO5G,KAAMutE,GACT3rC,SAAUnsB,MAAMpD,SAAShB,EAAG,KAC5B4hB,EAAGA,EACH5hB,EAAGA,GACJtZ,EAAU6O,EAAK7O,QAASqI,EAAUwG,EAAKxG,QAA6BisE,EAAS31E,EAAE0J,EAAQisE,QAAS/qD,EAASvpB,EAAQ,IAAMA,EAAQ8B,SAAS,YAC/I,KAAK+M,EAAKpD,UAAW,CAOjB,GANIpD,EAAQ6sE,mBACJ3rD,GAAuB,aAAbhkB,EAAO,IACjBA,EAAOwU,QAEX/Z,EAAQE,IAAIC,EAAMiF,kBAAkBkvE,EAAO,GAAI/uE,KAE/CvF,EAAQyD,KAAK,cAAgBoL,EAAKuzD,SAASyQ,GAC3C,MAEJhkE,GAAK08D,YAAa,EACbljE,EAAQ8sE,QACTrB,EAAiBhkE,OAAOjB,EAAKwlE,UAAWxlE,EAAK+lE,iBAAiBvlE,KAAKR,EAAKwlE,UAAWxlE,EAAK+lE,iBACxF/lE,EAAK0mE,eAAc,GACnB1mE,EAAK0mE,eAAc,IAEvB1mE,EAAKvN,QAAUA,EAAUnB,EAAMY,KAAKf,EAASqI,EAAQrH,UAAUd,KAC3DkG,SAAU4/B,EACV1e,QAAS,QACTsiB,SAAUwpC,IAEVhzE,EAAQgf,SAASyC,SACjBvgB,EAAQpB,IAAIwhC,EAAW,iBAE3BpgC,EAAQpB,IAAImmC,GACR1nC,EAAE0J,EAAQ02B,UAAU,IAAMv5B,SAASsa,MACnCxe,EAAQpB,IAAIgzE,EAAK,YAErBrkE,EAAK4mE,QAAU5mE,EAAK6mE,UAAUF,GAC9BhB,EAAY3lE,EAAK8mE,iBACbttE,EAAQisE,QAAUjB,GAClBxkE,EAAK+mE,cAAcpB,GAEvBx0E,EAAQyD,KAAK+vE,EAASgB,EAAUxsE,SAAS4f,WAAU,GAAMI,aAAawsD,KAG9EqB,UAAW,SAAUhsC,GAAV,GAC0DvoC,GAoB7D+F,EApBAwH,EAAO5G,KAAMjI,EAAU6O,EAAK7O,QAASqI,EAAUwG,EAAKxG,QAAkBisE,EAAS31E,EAAE0J,EAAQisE,QAAS/qD,EAASvpB,EAAQ,IAAMA,EAAQ8B,SAAS,YAqB9I,OApBIuG,GAAQ6sE,mBACJ3rD,GAAuB,aAAbhkB,EAAO,IACjBA,EAAOwU,QAEX/Z,EAAQE,IAAIC,EAAMiF,kBAAkBkvE,EAAO,GAAI/uE,KAEnDsJ,EAAKvN,QAAUA,EAAUnB,EAAMY,KAAKf,EAASqI,EAAQrH,UAAUd,KAC3DkG,SAAU4/B,EACV1e,QAAS,QACTsiB,SAAUwpC,IAEVhzE,EAAQgf,SAASyC,SACjBvgB,EAAQpB,IAAIwhC,EAAW,iBAE3BpgC,EAAQpB,IAAImmC,GACR1nC,EAAE0J,EAAQ02B,UAAU,IAAMv5B,SAASsa,MACnCxe,EAAQpB,IAAIgzE,EAAK,YAErBrkE,EAAK6mE,UAAU7rC,OACXxiC,EAAS/F,EAAQ+F,UAEjBnG,MAAOf,EAAMuB,YAAYJ,GACzBH,OAAQhB,EAAMyB,aAAaN,GAC3BV,KAAMyG,EAAOzG,KACb2G,IAAKF,EAAOE,MAGpBouE,eAAgB,WACZ,GAAInB,GAAY7rE,GAAO,KAAUV,KAAKI,QAAQmsE,UAAUC,KAExD,OADAD,GAAUxsE,QAAU7H,EAAM2H,aAAa0sE,EAAUxsE,QAASC,KAAKwtE,SACxDjB,GAEXa,cAAe,WAAA,GACPf,GAAS31E,EAAEsJ,KAAKI,QAAQisE,QACxB9xC,IAAc8xC,EAAOnpE,KAAK,UAAY,IAAI5K,MAAMozE,KAChD,GACA,SACD,GACCmC,EAAWpC,EAAe,IAAMlxC,CACpC8xC,GAAO/mC,YAAYuoC,GAAUlzE,SAASgxE,GAAgBrmC,YAAYkmC,GAAQlmC,YAAYuoC,GACtF7tE,KAAKjI,QAAQutC,YAAYmmC,EAAe,IAAMvzE,EAAM0M,WAAW21B,GAAWj6B,UAE9EqtE,cAAe,SAAUpB,GAAV,GACPhyC,GAAYgyC,EAAUxsE,QAAQ8iC,QAAU0pC,EAAUxsE,QAAQ8iC,QAAQtI,UAAY,OAC9EszC,EAAWpC,EAAe,IAAMlxC,CACpC7jC,GAAEsJ,KAAKI,QAAQisE,QAAQ/xE,SAASuzE,GAAUlzE,SAASgxE,GAAgBrxE,SAASkxE,GAAQlxE,SAASuzE,GAC7F7tE,KAAKjI,QAAQuC,SAASmxE,EAAe,IAAMvzE,EAAM0M,WAAW21B,GAAWj6B,UAE3EqhC,SAAU,WACF3hC,KAAKwD,YACLxD,KAAKwtE,QAAUxtE,KAAKytE,cAG5BttD,OAAQ,WACJ,GAAIvZ,GAAO5G,IACX4G,GAAKA,EAAKpD,UAAYqnE,EAAQD,MAElCpnE,QAAS,WACL,MAAOxD,MAAKjI,QAAQgC,GAAG,IAAMuxE,IAEjCmB,MAAO,SAAUqB,GACb,GAAyCh1E,GAAMyzE,EAAWwB,EAAaC,EAAnEpnE,EAAO5G,KAAMI,EAAUwG,EAAKxG,OAChC,IAAIwG,EAAKpD,UAAW,CAGhB,GAFA1K,EAAO8N,EAAKvN,QAAQ,GAAKuN,EAAKvN,QAAUnB,EAAMY,KAAK8N,EAAK7O,SAAS+I,OACjE8F,EAAK0mE,eAAc,GACf1mE,EAAKymE,UAAYzmE,EAAKuzD,SAAS0Q,GAE/B,MADAjkE,GAAK0mE,eAAc,GACnB,CAEJ1mE,GAAK7O,QAAQuvB,KAAK,YAAY5pB,KAAK,WAC/B,GAAIkJ,GAAOlQ,EAAEsJ,MAAOiuE,EAAQrnE,EAAKpL,KAAK,aAClCyyE,IACAA,EAAMxB,MAAMqB,KAGpBjC,EAAiBhkE,OAAOjB,EAAKwlE,UAAWxlE,EAAK+lE,iBACzCmB,EACAvB,GACIzrE,MAAM,EACNf,aAGJwsE,EAAY7rE,GAAO,KAAUN,EAAQmsE,UAAUE,OAC/CsB,EAAcnnE,EAAK7O,QAAQyD,KAAK+vE,GAChCyC,EAAezB,EAAUxsE,SACpBiuE,IAAiB91E,EAAM6F,KAAKiwE,IAAiBD,GAAe71E,EAAM6F,KAAKgwE,KACxExB,EAAUxsE,QAAUguE,EACpBxB,EAAUjsE,SAAU,GAExBsG,EAAKymE,UAAW,GAEpBzmE,EAAK7O,QAAQ4nB,WAAU,GACvB7mB,EAAKb,KAAMkG,SAAU4/B,IACrBn3B,EAAK7O,QAAQgoB,aAAawsD,GACtBuB,GACAlnE,EAAK8lE,oBAIjBvS,SAAU,SAAU+T,GAChB,MAAOluE,MAAKgI,QAAQkmE,GAAMhvE,KAAMgvE,KAEpCvoD,QAAS,SAAU1d,GACf,GAAIrB,GAAO5G,IACP7H,GAAQ8oB,OAAO/iB,QAAQ+J,EAAE/I,YACzB0rB,aAAahkB,EAAKunE,gBAClBvnE,EAAKunE,eAAiBzkD,WAAW,WAC7B9iB,EAAK6mE,YACL7mE,EAAKunE,eAAiB,MACvB,OAEEvnE,EAAK0lE,UAAY1lE,EAAK08D,YAAc18D,EAAK7O,QAAQ8B,SAAS,sBAC3D+M,EAAK6lE,SAIjBa,cAAe,SAAUntD,GAAV,GACPoI,GAASpI,EAAS,KAAO,MACzBxY,EAAaxP,EAAQ8oB,MACnB9oB,GAAQgf,SAASqD,KAAOriB,EAAQgf,SAASyC,UAC3CjS,GAAc,IAAM6+D,GAExBxmE,KAAKouE,qBAAqB7lD,GAAQi+C,EAAQxmE,KAAK6sE,cAC/Cf,EAAOvjD,GAAQ5gB,EAAY3H,KAAK6sE,eAEpCD,WAAY,SAAU3kE,GAClB,GAAIrB,GAAO5G,KAAM2nB,EAAY/gB,EAAK7O,QAAQ,GAAIqI,EAAUwG,EAAKxG,QAASisE,EAAS31E,EAAE0J,EAAQisE,QAAQ,GAAIS,EAAe1sE,EAAQ0sE,aAAc1sD,EAASloB,EAAM2M,YAAYoD,GAAIgmE,EAAQv3E,EAAE0pB,GAAQnI,QAAQ,YAAaqJ,EAAS2sD,EAAMr0E,SAASA,OAAO,YAAYhC,MAC3Pq2E,GAAQA,EAAM,IACT3sD,GAAU2sD,GAASA,IAAUrnE,EAAK7O,QAAQ,IAGF,YAAzCrB,EAAEuR,EAAEmY,QAAQnI,QAAQ,KAAKzc,KAAK,SAG7BsH,EAAS6kB,EAAWvH,IAAYtd,EAASupE,EAAQjsD,IAAa0sD,GAAgBhqE,EAASpM,EAAEo2E,GAAc,GAAI1sD,IAC5GxZ,EAAK6lE,UAGb4B,KAAM,SAAU1sC,EAAU5jC,EAAMuwE,GAC5B,GAAIC,GAAS,CAOb,OANI5sC,GAAW5jC,EAAOuwE,IAClBC,EAASD,GAAgB3sC,EAAW5jC,IAEpC4jC,EAAW,IACX4sC,GAAU5sC,GAEP4sC,GAEXC,MAAO,SAAUpvE,EAAQrB,EAAM0wE,EAAYH,EAAcvrC,EAAQpB,EAAU+sC,GACvE,GAAIH,GAAS,CAUb,OATAG,GAAUA,GAAW3wE,EACjB4jC,IAAaoB,GAAUpB,IAAaqpC,GAAUjoC,IAAWioC,IACrD5rE,EAASsvE,EAAUJ,IACnBC,KAAYE,EAAa1wE,IAEzBqB,EAASmvE,EAAS,IAClBA,GAAUE,EAAa1wE,IAGxBwwE,GAEXH,mBAAoB,WAChB,MAAO13E,GAAEsJ,KAAKI,QAAQisE,QAAQsC,aAAa,QAAQ9qE,OAAO,SAAUsO,EAAOpa,GACvE,MAAOG,GAAM8F,aAAajG,MAGlC01E,UAAW,SAAUF,GAAV,GACuYqB,GAAkBjrE,EAASkrE,EAAyEj3E,EAAQk3E,EAAgBC,EAAeC,EAiBjhB3vE,EA2BJ4vE,EAA6E7vE,EAA6B8vE,EAU1GC,EAA8BzzD,EAA4ByxD,EAO1DiC,EACAC,EACAC,EA/DA1oE,EAAO5G,KAAMjI,EAAU6O,EAAK7O,QAASsB,EAAUuN,EAAKvN,QAAS+G,EAAUwG,EAAKxG,QAAS4sE,EAAWt2E,EAAE0J,EAAQ4sE,UAAWpwD,EAAYzkB,EAAQykB,YAAa2yD,KAAcvC,EAAS,IAAMr2E,QAAUA,OAAOqiB,YAAc4D,GAAa,MAAOyvD,EAAS31E,EAAE0J,EAAQisE,QAASmD,EAAUpvE,EAAQ2iC,OAAOjmC,cAAc7F,MAAM,KAAMw4E,EAAYrvE,EAAQuhC,SAAS7kC,cAAc7F,MAAM,KAAMi1E,EAAatlE,EAAKslE,WAAqDvoC,EAAS,MAAOhmC,EAAM,EAAGmf,EAAQvf,SAASmC,eAqBje,IAnBIovE,EADA1uE,EAAQ4sE,WAAar2E,QAEjB2I,IAAK3I,OAAO8I,aAAelC,SAASmC,gBAAgBC,WAAa,EACjEhH,KAAMhC,OAAOiJ,aAAerC,SAASmC,gBAAgBtB,YAAc,GAGtD4uE,EAAS5tE,SAE1BmwE,GACAR,EAAgBp4E,OAAOqiB,WACvBg2D,EAAiBr4E,OAAOwiB,cAExB41D,EAAgB/B,EAAS/zE,QACzB+1E,EAAiBhC,EAAS9zE,UAE1Bq2E,GAAYzyD,EAAMC,aAAeD,EAAME,aAAe,IAClD3d,EAAOe,EAAQ/B,SAAa,EAChC0wE,GAAiB1vE,EAAOnH,EAAMC,QAAQof,aAE1Cq3D,EAAmBvC,EAAO1oE,UAAUE,OAAOxK,EAAQq2E,YAC/Cd,EAAiB,GAEjB,GADAC,EAAejwE,KAAKlG,KAAWk2E,EAAiB32E,IAAI,UAAY,GAE5D0rC,EAASkrC,EAAe,OAGxB,KADAlrE,EAAU0oE,EAAOsC,aAAaC,GACzBh3E,EAAS+L,EAAQ/L,OAAQ+F,EAAM/F,EAAQ+F,IACxCkxE,GAAsBn4E,EAAEiN,EAAQhG,IAAM1F,IAAI,UACtC42E,GAAgBlrC,EAASkrC,IACzBlrC,EAASkrC,EAAe,GA6CxC,OAxCAx1E,GAAQpB,IAAI,SAAU0rC,GAElBtqC,EAAQpB,IADRs1E,GAASA,EAAM3rC,SAEXjpC,KAAM40E,EAAMt6C,EACZ3zB,IAAKiuE,EAAMl8D,GAGHzK,EAAK+oE,OAAOH,EAASC,IAEjCR,EAAMhwE,EAAU5F,EAAS+kC,EAAUiuC,EAAO,KAAOhzE,EAAQu2E,eAAe,IAAKxwE,EAASH,EAAU5F,GAAU61E,EAAe7C,EAAOuD,eAAeh2E,OAAO,4CACtJs1E,EAAat3E,SACbq3E,EAAMhwE,EAAU5F,EAAS+kC,GAAU,GACnCh/B,EAASH,EAAU5F,IAEvB+F,EAAOE,KAAOwvE,EAAexvE,IAC7BF,EAAOzG,MAAQm2E,EAAen2E,KACzBiO,EAAKvN,QAAQmC,KAAK6vE,IACnBhyE,EAAQmC,KAAK6vE,EAAU3qE,KAAWuuE,IAElCE,EAAUzuE,KAAWtB,GAASsc,EAAWhb,KAAWuuE,GAAM9B,EAAa/sE,EAAQ+sE,WAC7D,QAAlBjB,EAAW,KACXxwD,EAASpc,KAAOsH,EAAKynE,KAAKc,EAAQ7vE,IAAK5F,EAAYL,GAAW8zE,EAAWj0E,OAAQ81E,EAAiBpyD,IAEhF,QAAlBsvD,EAAW,KACXxwD,EAAS/iB,MAAQiO,EAAKynE,KAAKc,EAAQx2E,KAAMa,EAAWH,GAAW8zE,EAAWl0E,MAAO81E,EAAgBnyD,IAEjGwyD,EAAU1uE,KAAWgb,GACrB2zD,EAAgB31E,EAAY3B,GAC5Bu3E,EAAgB51E,EAAYL,IAC3BA,EAAQH,UAAYm2E,IACrBC,GAAgCD,GAEd,SAAlBnD,EAAW,KACXxwD,EAASpc,KAAOsH,EAAK4nE,MAAMW,EAAQ7vE,IAAK+vE,EAAe31E,EAAY2yE,GAAS2C,EAAiBpyD,EAAW4yD,EAAQ,GAAIC,EAAU,GAAIH,IAEhH,SAAlBpD,EAAW,KACXxwD,EAAS/iB,MAAQiO,EAAK4nE,MAAMW,EAAQx2E,KAAMa,EAAWzB,GAAUyB,EAAW6yE,GAAS0C,EAAgBnyD,EAAW4yD,EAAQ,GAAIC,EAAU,GAAIj2E,EAAWH,KAEvJtB,EAAQE,IAAImmC,EAAU+sC,GACtB9xE,EAAQpB,IAAIyjB,GACLA,EAAS/iB,MAAQy2E,EAAQz2E,MAAQ+iB,EAASpc,KAAO8vE,EAAQ9vE,KAEpEqwE,OAAQ,SAAU5sC,EAAQpB,GACtB,GAA6QkuC,GAAzQjpE,EAAO5G,KAAMjI,EAAU6O,EAAKvN,QAASgzE,EAAS31E,EAAEkQ,EAAKxG,QAAQisE,QAASyD,EAAiB/sC,EAAO,GAAIgtC,EAAmBhtC,EAAO,GAAIitC,EAAmBruC,EAAS,GAAIsuC,EAAqBtuC,EAAS,GAAIuuC,EAAejxE,EAAUotE,GAASv1C,EAAWpgC,EAAEkQ,EAAKxG,QAAQ02B,UAA2B79B,EAAQO,EAAWzB,GAAUmB,EAASQ,EAAY3B,GAAUo4E,EAAc32E,EAAW6yE,GAAS+D,EAAe12E,EAAY2yE,GAAS/sE,EAAM4wE,EAAa5wE,IAAK3G,EAAOu3E,EAAav3E,KAAM8W,EAAQ7Q,KAAK6Q,KA8B9d,OA7BIqnB,GAAS,IAAMv5B,SAASsa,OACxBg4D,EAAiB5wE,EAAU63B,GAC3Bx3B,GAAOuwE,EAAevwE,IACtB3G,GAAQk3E,EAAel3E,MAEvBm3E,IAAmB5E,IACnB5rE,GAAO8wE,GAEPN,IAAmB9E,IACnB1rE,GAAOmQ,EAAM2gE,EAAe,IAE5BJ,IAAqB9E,IACrB5rE,GAAOpG,GAEP82E,IAAqBhF,IACrB1rE,GAAOmQ,EAAMvW,EAAS,IAEtB62E,IAAqB3tD,IACrBzpB,GAAQw3E,GAERJ,IAAqB/E,IACrBryE,GAAQ8W,EAAM0gE,EAAc,IAE5BF,IAAuB7tD,IACvBzpB,GAAQM,GAERg3E,IAAuBjF,IACvBryE,GAAQ8W,EAAMxW,EAAQ,KAGtBqG,IAAKA,EACL3G,KAAMA,KAIlB0oB,GAAG8G,OAAO6jD,GACNvB,EAAe,kBACfC,EAAyB,8KACzBC,EAAa9zE,EAAM6J,QACnBC,KAAM,SAAU5I,GACZiI,KAAKjI,QAAUrB,EAAEqB,GACjBiI,KAAKjI,QAAQ0wB,YAAYgiD,IAE7B4F,KAAM,WACFrwE,KAAKjI,QAAQ2N,GAAG,UAAWM,EAAMhG,KAAKswE,YAAatwE,QAEvDuwE,WAAY,WACRvwE,KAAKjI,QAAQ2wB,aAAa+hD,IAE9B3kD,QAAS,WACL9lB,KAAKjI,QAAQ2wB,aAAa+hD,GAC1BzqE,KAAKjI,QAAUnB,GAEnB45E,WAAY,WACR,OAAO,GAEXF,YAAa,SAAUroE,GAAV,GAILmY,GACAmG,EACAkqD,EAGAC,EACAvnE,EACAwnE,CAVY,KAAZ1oE,EAAEq0D,OAAgBt8D,KAAKwwE,eAGvBpwD,EAASnY,EAAEmY,OACXmG,EAAWvmB,KAAKjI,QAAQuvB,KAAKojD,GAAwB7mE,OAAO,0BAC5D4sE,EAAiBlqD,EAASvI,KAAK,SAAU4yD,EAAQC,GACjD,MAAOD,GAAOE,SAAWD,EAAOC,WAEhCJ,EAAsBD,EAAe74E,OACrCuR,EAAYunE,EAAsB,EAClCC,EAAmBF,EAAet+D,MAAMiO,GACxCnY,EAAEouB,SACuB,IAArBs6C,EACAF,EAAehtD,IAAIta,GAAWorB,QAE9Bk8C,EAAehtD,IAAIktD,EAAmB,GAAGp8C,QAGzCo8C,IAAqBxnE,EACrBsnE,EAAehtD,IAAI,GAAG8Q,QAEtBk8C,EAAehtD,IAAIktD,EAAmB,GAAGp8C,QAGjDtsB,EAAE9D,qBAGVkd,EAAG2qD,MAAMrB,WAAaA,GACxBh0E,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,QAASm6E,GAAah5E,GAClB,KAAOA,EAAQH,QACXo5E,EAAgCj5E,GAChCA,EAAUA,EAAQ6B,SAG1B,QAASo3E,GAAgCj5E,GACrC,GAAIuwC,GAAQvwC,EAAQyD,KAAKtD,EAAM+J,GAAK,QAChCqmC,KACAvwC,EAAQmL,KAAK,QAASolC,GACtBvwC,EAAQguB,WAAW7tB,EAAM+J,GAAK,UAGtC,QAASgvE,GAA6Bl5E,GAClC,GAAIuwC,GAAQvwC,EAAQmL,KAAK,QACrBolC,KACAvwC,EAAQyD,KAAKtD,EAAM+J,GAAK,QAASqmC,GACjCvwC,EAAQmL,KAAK,QAAS,KAG9B,QAASguE,GAAoBn5E,GACzB,KAAOA,EAAQH,SAAWG,EAAQgC,GAAG,SACjCk3E,EAA6Bl5E,GAC7BA,EAAUA,EAAQ6B,SAvE7B,GACO1B,GAAQvB,OAAOuB,MAAO8M,EAAS9M,EAAMmpB,GAAGrc,OAAQgnE,EAAQ9zE,EAAMmpB,GAAG2qD,MAAO9vE,EAAahE,EAAMgE,WAAY4yC,EAAgBp4C,EAAEo4C,cAAepuC,EAAShK,EAAEgK,OAAQsF,EAAQtP,EAAEsP,MAAOmrE,EAAWz6E,EAAE6G,UAAW2lB,EAAahrB,EAAMgrB,WAAYkuD,EAAe,aAAcC,EAAc,mBAAoB1d,EAAO,OAAQC,EAAO,OAAQrb,EAAQ,QAAS+4B,EAAc,cAAe94B,EAAe,eAAgB+4B,EAAgB,kBAAmBC,EAAW,0TAA0UC,EAAiBv5E,EAAMuK,SAAS,kCAAuC8uE,EAAgB,wFAA2GxF,EAAK,gBAAiB2F,GACz9B74E,QACIkqC,OAAQ,gBACRpB,SAAU,cAEdriC,KACIyjC,OAAQ,aACRpB,SAAU,iBAEdhpC,MACIoqC,OAAQ,cACRpB,SAAU,eACVwqC,UAAW,YAEfvzE,OACImqC,OAAQ,eACRpB,SAAU,cACVwqC,UAAW,YAEfhV,QACIx1B,SAAU,gBACVoB,OAAQ,kBAEb4uC,GACCryE,IAAO,SACPzG,OAAU,MACVF,KAAQ,QACRC,MAAS,OACTu+D,OAAU,UACXya,GACC/4E,OAAQ,IACRyG,IAAK,IACL3G,KAAM,IACNC,MAAO,IACPu+D,OAAQ,KACT0a,GACChzC,YACIz/B,OAAQ,MACRrB,KAAM,eAEV69B,UACIx8B,OAAQ,OACRrB,KAAM,eAEX+zE,EAAiB,SAAU7pE,GAC1B,MAAOA,GAAEmY,OAAO5kB,KAAKtD,EAAM+J,GAAK,UA4BpC8vE,EAAU/sE,EAAOtE,QACjBC,KAAM,SAAU5I,EAASqI,GACrB,GAAiBqzB,GAAb7sB,EAAO5G,IACXgF,GAAOf,GAAGtD,KAAKwH,KAAKvB,EAAM7O,EAASqI,GACnCqzB,EAAO7sB,EAAKxG,QAAQuhC,SAASrpC,MAAM,cAAgB,aAAe,WAClEsO,EAAKgf,WAAaisD,EAAWp+C,GAC7B7sB,EAAKorE,wBAA0BhsE,EAAMY,EAAKqrE,iBAAkBrrE,GAC5DA,EAAK7O,QAAQ2N,GAAGkB,EAAKxG,QAAQ8xE,OAASnG,EAAInlE,EAAKxG,QAAQyD,OAAQmC,EAAMY,EAAKurE,QAASvrE,IAAOlB,GAAG,aAAeqmE,EAAInlE,EAAKxG,QAAQyD,OAAQmC,EAAMY,EAAKwrE,YAAaxrE,IACzJ5G,KAAKI,QAAQiyE,UACbzrE,EAAK7O,QAAQ2N,GAAG,aAAeqmE,EAAInlE,EAAKxG,QAAQyD,OAAQmC,EAAMY,EAAK0rE,YAAa1rE,KAGxFxG,SACI8O,KAAM,UACNrL,OAAQ,GACRswD,QAAS2d,EACTS,UAAW,IACXC,SAAS,EACT7wC,SAAU,SACVuwC,OAAQ,aACRG,UAAU,EACVp5E,MAAO,KACPC,OAAQ,KACRqzE,WACIC,MACIzsE,QAAS,UACTM,SAAU,GAEdosE,OACI1sE,QAAS,WACTM,SAAU,GACVS,MAAM,KAIlB4G,QACIisD,EACAC,EACA0d,EACA/4B,EACAC,GAEJ45B,YAAa,SAAUnqE,GACnBipE,EAAoBx6E,EAAEuR,EAAEsvD,iBAE5B4a,QAAS,SAAUlqE,GAAV,GACDrB,GAAO5G,KACPu3D,EAAgB7gE,EAAEuR,EAAEsvD,cACpB3wD,GAAKxG,QAAQ8xE,QAAUtrE,EAAKxG,QAAQ8xE,OAAO55E,MAAM,eACjDsO,EAAK6rE,MAAMlb,IAEX3sC,aAAahkB,EAAKitB,SAClBjtB,EAAKitB,QAAUnK,WAAW,WACtB9iB,EAAK6rE,MAAMlb,IACZ3wD,EAAKxG,QAAQmyE,aAGxBG,eAAgB,SAAUtyD,GACtB,GAAkHuyD,GAA9G/rE,EAAO5G,KAAM4yE,EAAiBhsE,EAAKxG,QAAQ+zD,QAASp8D,EAAU6O,EAAKutD,QAAS0e,EAAajsE,EAAKxG,QAAQuyE,MACtG7jC,GAAc8jC,IAAmBA,EAAezvD,KAC1C,UAAYvc,GAAKxG,UACnByyE,GAAc3vD,EAAW0vD,EAAezvD,MAE5Cvc,EAAKoB,QAAQwwC,GACTp4C,QAASwyE,EACTxyD,OAAQA,IAEPyyD,GAKD96E,EAAQ+I,OACR6xE,EAAS56E,EAAQuvB,KAAK,IAAMiqD,GAAe,GACvCoB,EACAA,EAAOG,IAAMF,EAAezvD,KAAOwvD,EAAOG,IAE1C/6E,EAAQ2K,KAAK+uE,GAAiBtd,QAASye,KAE3C76E,EAAQuvB,KAAK,IAAMiqD,GAAe3nD,IAAI,OAASmiD,GAAIrmE,GAAG,OAASqmE,EAAI,WAC/DnlE,EAAKoB,QAAQspE,GACbv5E,EAAQiC,WAbZjC,EAAQi+C,QACR99C,EAAMmpB,GAAGqG,SAAS3vB,GAAS,GAC3B6O,EAAKmsE,aAAaH,KAcfA,GAAkB12E,EAAW02E,IACpCA,EAAiBA,GACb1qE,OAAQlI,KACRogB,OAAQA,IAEZroB,EAAQ2K,KAAKkwE,GAAkB,KAE/B76E,EAAQ2K,KAAKkwE,GAEjBhsE,EAAKke,QAAQ,UAAW,WACpB,OAASyB,SAAUxuB,MAG3Bg7E,aAAc,SAAU3yE,GACpB,GAAIwG,GAAO5G,IACX6kB,QAAOmzB,KAAKt3C,GACRxB,KAAM,MACN8uC,SAAU,OACVxhB,OAAO,EACPsyB,MAAO,SAAUkH,EAAKd,GAClBhtD,EAAMmpB,GAAGqG,SAAS9gB,EAAKutD,SAAS,GAChCvtD,EAAKoB,QAAQuwC,GACT2M,OAAQA,EACRc,IAAKA,KAGbnH,QAAS74C,EAAM,SAAUxK,GACrBtD,EAAMmpB,GAAGqG,SAAS9gB,EAAKutD,SAAS,GAChCvtD,EAAKutD,QAAQzxD,KAAKlH,GAClBoL,EAAKoB,QAAQspE,IACd1qE,IACJxG,KAEP6xE,iBAAkB,SAAUhqE,GACpBA,EAAEmuB,UAAYl+B,EAAMypB,KAAKM,KACzBjiB,KAAKc,QAGb0W,QAAS,WACL,GAAI5Q,GAAO5G,KAAMiuE,EAAQrnE,EAAKqnE,KAC1BA,IAASA,EAAM7tE,QAAQisE,QACvBzlE,EAAK8rE,eAAezE,EAAM7tE,QAAQisE,SAG1CvrE,KAAM,WACEd,KAAKiuE,OACLjuE,KAAKiuE,MAAMxB,SAGnBzyE,KAAM,SAAUomB,GACZA,EAASA,GAAUpgB,KAAKjI,QACxBm5E,EAAoB9wD,GACpBpgB,KAAKyyE,MAAMryD,IAEfqyD,MAAO,SAAUryD,GACb,GAAIxZ,GAAO5G,KAAM2L,EAAU/E,EAAKwZ,QAC3BxZ,GAAKqnE,OACNrnE,EAAKosE,aAELrnE,GAAWA,EAAQ,IAAMyU,EAAO,KAChCxZ,EAAKqnE,MAAMxB,QACX7lE,EAAKqnE,MAAMl2E,QAAQ4nB,WAAU,GAAM,IAElChU,GAAWA,EAAQ,IAAMyU,EAAO,KACjCxZ,EAAK8rE,eAAetyD,GACpBxZ,EAAKqnE,MAAM7tE,QAAQisE,OAASjsD,GAEhCxZ,EAAKqnE,MAAM1mE,IAAI,aAAc,WACzBwpE,EAAa3wD,GACbA,EAAOgF,WAAWisD,GAClBrxE,KAAKjI,QAAQqtB,WAAW,MAAMliB,KAAK,eAAe,GAClDiuE,EAASvnD,IAAI,UAAYmiD,EAAInlE,EAAKorE,2BAEtCprE,EAAKqnE,MAAMzB,QAEfwG,WAAY,WACR,GAAIpsE,GAAO5G,KAAMI,EAAUwG,EAAKxG,QAAS/G,EAAU3C,EAAEwB,EAAMuK,SAAS+uE,IAC5DgB,QAASpyE,EAAQoyE,SAAgC,WAArBpyE,EAAQuhC,SACpC1S,IAAK2iD,EAAWxxE,EAAQuhC,UACxB0wC,SAAUjyE,EAAQiyE,WAE1BzrE,GAAKqnE,MAAQ,GAAIjC,GAAM3yE,EAASqH,GAC5BuyE,SAAU,WACN,GAAI5G,GAASrsE,KAAKI,QAAQisE,OAAQ6G,EAAS7G,EAAO,GAAGxoD,IAAMjd,EAAK7O,QAAQ,GAAG8rB,EACvEqvD,KACA7G,EAAOnpE,KAAKmuE,EAAa6B,EAAS9B,GAClCpxE,KAAKjI,QAAQmL,KAAK,KAAMgwE,EAAS9B,IAEjChxE,EAAQoyE,SACR5rE,EAAKusE,mBAETnzE,KAAKjI,QAAQqtB,WAAW,eACxB+rD,EAASzrE,GAAG,UAAYqmE,EAAInlE,EAAKorE,yBACjCprE,EAAKoB,QAAQ2rD,IAEjB8Y,MAAO,WACH7lE,EAAKoB,QAAQ4rD,IAEjBqZ,kBAAkB,EAClBV,UAAWnsE,EAAQmsE,WACpBmF,EAAUtxE,EAAQuhC,YACrBtoC,EAAQpB,KACJgB,MAAOmH,EAAQnH,MACfC,OAAQkH,EAAQlH,SAEpB0N,EAAKutD,QAAU96D,EAAQiuB,KAAK,sBAC5B1gB,EAAKwsE,MAAQ/5E,EAAQiuB,KAAK,cACtBlnB,EAAQiyE,SACRh5E,EAAQqM,GAAG,aAAeqmE,EAAI/lE,EAAMY,EAAK0rE,YAAa1rE,IAEtDvN,EAAQqM,GAAG,QAAUqmE,EAAI,oBAAqB/lE,EAAMY,EAAKysE,kBAAmBzsE,KAGpFysE,kBAAmB,SAAUprE,GACzBA,EAAE9D,iBACFnE,KAAKc,QAETwxE,YAAa,SAAUrqE,GACnB,GAAIjI,KAAKiuE,MAAO,CACZ,GAAIl2E,GAAUrB,EAAEuR,EAAEsvD,eAAgBn4D,EAASrH,EAAQqH,SAAUu9D,EAAQ10D,EAAE00D,MAAOC,EAAQ30D,EAAE20D,KAGxF,IAFAx9D,EAAOxG,MAAQwG,EAAOzG,KAAOT,EAAMuB,YAAY1B,GAC/CqH,EAAOvG,OAASuG,EAAOE,IAAMpH,EAAMyB,aAAa5B,GAC5C4kE,EAAQv9D,EAAOzG,MAAQgkE,EAAQv9D,EAAOxG,OAASgkE,EAAQx9D,EAAOE,KAAOs9D,EAAQx9D,EAAOvG,OACpF,MAEJmH,MAAKiuE,MAAMxB,YAEXsE,GAAar6E,EAAEuR,EAAEsvD,eAErB3sC,cAAa5qB,KAAK6zB,UAEtBs/C,iBAAkB,WACd,GAAIvsE,GAAO5G,KAAM2hC,EAAW/6B,EAAKxG,QAAQuhC,SAAU/b,EAAahf,EAAKgf,WAAYxmB,EAASwmB,EAAWxmB,OAAQ6uE,EAAQrnE,EAAKqnE,MAAO5B,EAAS4B,EAAM7tE,QAAQisE,OAAQ6D,EAAex5E,EAAE21E,GAAQjtE,SAAUk0E,EAAcjhE,SAASzL,EAAKwsE,MAAMn7E,IAAI,oBAAqB,IAAKs7E,EAAgB78E,EAAEu3E,EAAMl2E,SAASqH,SAAU+d,EAAWy0D,EAAW3D,EAAMT,QAAUmE,EAAQhwC,GAAYA,GAAW6xC,EAAetD,EAAa9wE,GAAUm0E,EAAcn0E,GAAU1I,EAAE21E,GAAQzmD,EAAW7nB,QAAU,EAAIu1E,CACpd1sE,GAAKwsE,MAAM9tC,YAAY,mDAAmDhrC,SAAS,aAAe6iB,GAAUllB,IAAImH,EAAQo0E,IAE5HpzD,OAAQ,WACJ,MAAIpgB,MAAKiuE,MACEjuE,KAAKiuE,MAAM7tE,QAAQisE,OAEvB,MAEXvmD,QAAS,WACL,GAAImoD,GAAQjuE,KAAKiuE,KACbA,KACAA,EAAMl2E,QAAQ6xB,IAAImiD,GAClBkC,EAAMnoD,WAEV8E,aAAa5qB,KAAK6zB,SAClB7zB,KAAKjI,QAAQ6xB,IAAImiD,GACjBoF,EAASvnD,IAAI,UAAYmiD,EAAI/rE,KAAKgyE,yBAClChtE,EAAOf,GAAG6hB,QAAQ3d,KAAKnI,QAG/B9H,GAAMmpB,GAAG8G,OAAO4pD,IAClBp7E,OAAOuB,MAAM2sB,QACRluB,OAAOuB,OACE,kBAAVzB,SAAwBA,OAAOgiC,IAAMhiC,OAAS,SAAUiiC,EAAIC,EAAIC,IACrEA,GAAMD,OAEV,SAAUniC,EAAGC,QACVA,OAAO,gBAAiB,cAAeD,IACzC,WAcE,MAbC,UAAUE,GACP,QAAS+8E,KACL,MAAO/8E,GAAEoqC,WAEb,QAAS4yC,GAAW3vB,GAChB,MAAOrtD,GAAEwtD,KAAKp9C,MAAMpQ,EAAGqtD,GAE3B7rD,MAAMspB,QAAQmyD,KAAOz7E,MAAMspB,QAAQmyD,SACnCz7E,MAAM0C,WAAW1C,MAAMspB,QAAQmyD,MAC3BF,cAAeA,EACfC,WAAYA,KAElB/8E,OAAOuB,MAAM2sB,QACRluB,OAAOuB,OACE,kBAAVzB,SAAwBA,OAAOgiC,IAAMhiC,OAAS,SAAUiiC,EAAIC,EAAIC,IACrEA,GAAMD,OAEV,SAAUniC,EAAGC,QACVA,OAAO,eAAgB,cAAeD,IACxC,WAwTE,QAASo9E,GAAIj4B,EAAG1iD,EAAOzB,GACP,SAARA,IACAA,EAAM,IAGV,KADA,GAAIwH,GAAS28C,EAAEpyC,SAAS,IACjBtQ,EAAQ+F,EAAOpH,QAClBoH,EAASxH,EAAMwH,CAEnB,OAAOA,GAsGX,QAAS60E,GAAQC,EAAGC,EAAG9iE,GACnB,GAAIC,GAAID,CAOR,OANIC,GAAI,IACJA,GAAK,GAELA,EAAI,IACJA,GAAK,GAELA,EAAI,EAAI,EACD4iE,EAAc,GAATC,EAAID,GAAS5iE,EAEzBA,EAAI,GACG6iE,EAEP7iE,EAAI,EAAI,EACD4iE,GAAKC,EAAID,IAAM,EAAI,EAAI5iE,GAAK,EAEhC4iE,EAEX,QAASE,GAAWp2E,EAAOylB,GAA3B,GACQtS,GAAG0a,EAOHwoD,CANJ,IAAa,MAATr2E,GAA2B,SAAVA,EACjB,MAAO,KAEX,IAAIA,YAAiBs2E,GACjB,MAAOt2E,EAGX,IADIq2E,EAAQr2E,EAAMd,cACdiU,EAAIojE,EAAiB9kE,KAAK4kE,GAO1B,MALIA,GADS,gBAATljE,EAAE,GACM,GAAIqjE,GAAI,EAAG,EAAG,EAAG,GAEjBJ,EAAWK,EAAYtjE,EAAE,IAAKsS,GAE1C4wD,EAAM37E,OAASyY,EAAE,IACVkjE,CAeX,KAbIljE,EAAI,gDAAgD1B,KAAK4kE,IACzDxoD,EAAM,GAAI6oD,GAAMjiE,SAAStB,EAAE,GAAI,IAAKsB,SAAStB,EAAE,GAAI,IAAKsB,SAAStB,EAAE,GAAI,IAAK,IACrEA,EAAI,uCAAuC1B,KAAK4kE,IACvDxoD,EAAM,GAAI6oD,GAAMjiE,SAAStB,EAAE,GAAKA,EAAE,GAAI,IAAKsB,SAAStB,EAAE,GAAKA,EAAE,GAAI,IAAKsB,SAAStB,EAAE,GAAKA,EAAE,GAAI,IAAK,IAC1FA,EAAI,uDAAuD1B,KAAK4kE,IACvExoD,EAAM,GAAI6oD,GAAMjiE,SAAStB,EAAE,GAAI,IAAKsB,SAAStB,EAAE,GAAI,IAAKsB,SAAStB,EAAE,GAAI,IAAK,IACrEA,EAAI,wEAAwE1B,KAAK4kE,IACxFxoD,EAAM,GAAI6oD,GAAMjiE,SAAStB,EAAE,GAAI,IAAKsB,SAAStB,EAAE,GAAI,IAAKsB,SAAStB,EAAE,GAAI,IAAK5O,WAAW4O,EAAE,MAClFA,EAAI,qFAAqF1B,KAAK4kE,IACrGxoD,EAAM,GAAI2oD,GAAIjyE,WAAW4O,EAAE,IAAM,IAAK5O,WAAW4O,EAAE,IAAM,IAAK5O,WAAW4O,EAAE,IAAM,IAAK,IAC/EA,EAAI,sGAAsG1B,KAAK4kE,MACtHxoD,EAAM,GAAI2oD,GAAIjyE,WAAW4O,EAAE,IAAM,IAAK5O,WAAW4O,EAAE,IAAM,IAAK5O,WAAW4O,EAAE,IAAM,IAAK5O,WAAW4O,EAAE,MAEnG0a,EACAA,EAAInzB,MAAQyY,MACT,KAAKsS,EACR,KAAUva,OAAM,uBAAyBmrE,EAE7C,OAAOxoD,GA7db,GAUM50B,GACAsB,EACAk8E,EAqJA96E,EACA46E,EACKr5E,EAMLo5E,EA+CAE,EA4EAE,EA8BAC,EAiEAC,EA4FAC,CAtdJ99E,QAAOuB,MAAQvB,OAAOuB,UAClBrB,EAAQqB,MAAMrB,MACdsB,EAAUD,MAAMC,QAChBk8E,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,UAEbrkF,EAAUpB,EAAQoB,QAClB46E,GAAoB,cACxB,KAASr5E,IAAKu5E,GACNA,EAAY33E,eAAe5B,IAC3Bq5E,EAAiBrsE,KAAKhN,EAG9Bq5E,GAAuBp4E,OAAO,KAAOo4E,EAAiBj9E,KAAK,KAAO,WAAY,KAC1Eg9E,EAAYr9E,EAAM6J,QAClBC,KAAM,aAENk9E,MAAO,WACH,MAAO79E,OAEX89E,MAAO,WACH,MAAO99E,OAEX+9E,MAAO,WACH,MAAO/9E,MAAKg+E,UAAUD,SAE1BC,QAAS,WACL,MAAOh+E,OAEXi+E,MAAO,WACH,MAAO,IAAMj+E,KAAK+9E,SAEtBG,UAAW,WACP,GAAIC,GAAMn+E,KAAKg+E,SACf,OAAO,QAAUG,EAAIC,EAAI,KAAOD,EAAIthF,EAAI,KAAOshF,EAAIt7E,EAAI,KAAOV,aAAkBnC,KAAK4C,GAAGmP,QAAQ,IAAM,KAE1GssE,UAAW,WACP,MAAI9kF,GAAQgB,MAAQhB,EAAQkB,QAAU,EAC3BuF,KAAKi+E,QAETj+E,KAAKk+E,aAEhB9hC,OAAQ,SAAUhzC,GACd,MAAOA,KAAMpJ,MAAc,OAANoJ,GAAcpJ,KAAKk+E,cAAgBlK,EAAW5qE,GAAG80E,aAE1EI,KAAM,SAAUC,GAAV,GAIEC,GACAC,CAJJ,OAAc,QAAVF,EACOG,KAEPF,EAAKx+E,KAAKg+E,UACVS,EAAKF,EAAMP,UACRp/E,KAAKy4D,KAAKz4D,KAAK8nC,IAAoB,IAAf83C,EAAGJ,EAAIK,EAAGL,GAAU,GAAKx/E,KAAK8nC,IAAoB,KAAf83C,EAAG3hF,EAAI4hF,EAAG5hF,GAAW,GAAK+B,KAAK8nC,IAAoB,KAAf83C,EAAG37E,EAAI47E,EAAG57E,GAAW,MAE3H1G,MAAO,WACH,GAAIiN,GAAIpJ,KAAKg+E,SAIb,OAHI50E,KAAMpJ,OACNoJ,EAAI,GAAIkrE,GAAMlrE,EAAEg1E,EAAGh1E,EAAEvM,EAAGuM,EAAEvG,EAAGuG,EAAExG,IAE5BwG,KAGXgrE,EAAMF,EAAUxzE,QAChBC,KAAM,SAAUy9E,EAAGvhF,EAAGgG,EAAGD,GACrBsxE,EAAUjwE,GAAGtD,KAAKwH,KAAKnI,MACvBA,KAAKo+E,EAAIA,EACTp+E,KAAKnD,EAAIA,EACTmD,KAAK6C,EAAIA,EACT7C,KAAK4C,EAAIA,GAEbi7E,MAAO,WAAA,GASCc,GAAG1tE,EARH2tE,EAAM5+E,KACNo+E,EAAIQ,EAAIR,EACRvhF,EAAI+hF,EAAI/hF,EACRgG,EAAI+7E,EAAI/7E,EACRmP,EAAMpT,KAAKoT,IAAIosE,EAAGvhF,EAAGgG,GACrBnK,EAAMkG,KAAKlG,IAAI0lF,EAAGvhF,EAAGgG,GACrBwwB,EAAQ36B,EAAMsZ,EACdtI,EAAIhR,CAER,OAAc,KAAV26B,EACO,GAAIkhD,GAAI,EAAG,EAAG7qE,EAAG1J,KAAK4C,IAErB,IAARlK,GACAuY,EAAIoiB,EAAQ36B,EAERimF,EADAP,IAAM1lF,GACDmE,EAAIgG,GAAKwwB,EACPx2B,IAAMnE,EACT,GAAKmK,EAAIu7E,GAAK/qD,EAEd,GAAK+qD,EAAIvhF,GAAKw2B,EAEtBsrD,GAAK,GACDA,EAAI,IACJA,GAAK,OAGT1tE,EAAI,EACJ0tE,MAEG,GAAIpK,GAAIoK,EAAG1tE,EAAGvH,EAAG1J,KAAK4C,KAEjCi8E,MAAO,WAAA,GAOCF,GAAG1tE,EAICN,EAVJiuE,EAAM5+E,KACNo+E,EAAIQ,EAAIR,EACRvhF,EAAI+hF,EAAI/hF,EACRgG,EAAI+7E,EAAI/7E,EACRnK,EAAMkG,KAAKlG,IAAI0lF,EAAGvhF,EAAGgG,GACrBmP,EAAMpT,KAAKoT,IAAIosE,EAAGvhF,EAAGgG,GACfi8E,GAAKpmF,EAAMsZ,GAAO,CAC5B,IAAItZ,IAAQsZ,EACR2sE,EAAI1tE,EAAI,MACL,CAGH,OAFIN,EAAIjY,EAAMsZ,EACdf,EAAI6tE,EAAI,GAAMnuE,GAAK,EAAIjY,EAAMsZ,GAAOrB,GAAKjY,EAAMsZ,GACvCtZ,GACR,IAAK0lF,GACDO,GAAK9hF,EAAIgG,GAAK8N,GAAK9T,EAAIgG,EAAI,EAAI,EAC/B,MACJ,KAAKhG,GACD8hF,GAAK97E,EAAIu7E,GAAKztE,EAAI,CAClB,MACJ,KAAK9N,GACD87E,GAAKP,EAAIvhF,GAAK8T,EAAI,EAKtBguE,GAAK,GACL1tE,GAAK,IACL6tE,GAAK,IAET,MAAO,IAAItK,GAAImK,EAAG1tE,EAAG6tE,EAAG9+E,KAAK4C,IAEjCo7E,QAAS,WACL,MAAO,IAAI1J,GAAe,IAATt0E,KAAKo+E,EAAkB,IAATp+E,KAAKnD,EAAkB,IAATmD,KAAK6C,EAAS7C,KAAK4C,MAGpE0xE,EAAQF,EAAI1zE,QACZC,KAAM,SAAUy9E,EAAGvhF,EAAGgG,EAAGD,GACrBwxE,EAAInwE,GAAGtD,KAAKwH,KAAKnI,KAAMpB,KAAK6Q,MAAM2uE,GAAIx/E,KAAK6Q,MAAM5S,GAAI+B,KAAK6Q,MAAM5M,GAAID,IAExEk7E,MAAO,WACH,MAAO,IAAI1J,GAAIp0E,KAAKo+E,EAAI,IAAKp+E,KAAKnD,EAAI,IAAKmD,KAAK6C,EAAI,IAAK7C,KAAK4C,IAElEi7E,MAAO,WACH,MAAO79E,MAAK89E,QAAQD,SAExBgB,MAAO,WACH,MAAO7+E,MAAK89E,QAAQe,SAExBd,MAAO,WACH,MAAOnK,GAAI5zE,KAAKo+E,EAAG,GAAKxK,EAAI5zE,KAAKnD,EAAG,GAAK+2E,EAAI5zE,KAAK6C,EAAG,IAEzDm7E,QAAS,WACL,MAAOh+E,SAaXu0E,EAAML,EAAUxzE,QAChBC,KAAM,SAAUg+E,EAAG1tE,EAAGvH,EAAG9G,GACrBsxE,EAAUjwE,GAAGtD,KAAKwH,KAAKnI,MACvBA,KAAK2+E,EAAIA,EACT3+E,KAAKiR,EAAIA,EACTjR,KAAK0J,EAAIA,EACT1J,KAAK4C,EAAIA,GAEbk7E,MAAO,WAAA,GAKCM,GAAGvhF,EAAGgG,EAKF/H,EACAtE,EACAs9E,EACAC,EACA7iE,EAbJ0tE,EAAM5+E,KACN2+E,EAAIC,EAAID,EACR1tE,EAAI2tE,EAAI3tE,EACRvH,EAAIk1E,EAAIl1E,CAEZ,IAAU,IAANuH,EACAmtE,EAAIvhF,EAAIgG,EAAI6G,MAQZ,QANAi1E,GAAK,GACD7jF,EAAI8D,KAAKpE,MAAMmkF,GACfnoF,EAAImoF,EAAI7jF,EACRg5E,EAAIpqE,GAAK,EAAIuH,GACb8iE,EAAIrqE,GAAK,EAAIuH,EAAIza,GACjB0a,EAAIxH,GAAK,EAAIuH,GAAK,EAAIza,IAClBsE,GACR,IAAK,GACDsjF,EAAI10E,EACJ7M,EAAIqU,EACJrO,EAAIixE,CACJ,MACJ,KAAK,GACDsK,EAAIrK,EACJl3E,EAAI6M,EACJ7G,EAAIixE,CACJ,MACJ,KAAK,GACDsK,EAAItK,EACJj3E,EAAI6M,EACJ7G,EAAIqO,CACJ,MACJ,KAAK,GACDktE,EAAItK,EACJj3E,EAAIk3E,EACJlxE,EAAI6G,CACJ,MACJ,KAAK,GACD00E,EAAIltE,EACJrU,EAAIi3E,EACJjxE,EAAI6G,CACJ,MACJ,SACI00E,EAAI10E,EACJ7M,EAAIi3E,EACJjxE,EAAIkxE,EAIZ,MAAO,IAAIK,GAAIgK,EAAGvhF,EAAGgG,EAAG7C,KAAK4C,IAEjCi8E,MAAO,WACH,MAAO7+E,MAAK89E,QAAQe,SAExBb,QAAS,WACL,MAAOh+E,MAAK89E,QAAQE,aAGxBxJ,EAAMN,EAAUxzE,QAChBC,KAAM,SAAUg+E,EAAG1tE,EAAG6tE,EAAGl8E,GACrBsxE,EAAUjwE,GAAGtD,KAAKwH,KAAKnI,MACvBA,KAAK2+E,EAAIA,EACT3+E,KAAKiR,EAAIA,EACTjR,KAAK8+E,EAAIA,EACT9+E,KAAK4C,EAAIA,GAEbk7E,MAAO,WAAA,GAKCM,GAAGvhF,EAAGgG,EAOFkxE,EACAD,EAZJ8K,EAAM5+E,KACN2+E,EAAIC,EAAID,EACR1tE,EAAI2tE,EAAI3tE,EACR6tE,EAAIF,EAAIE,CAcZ,OAZU,KAAN7tE,EACAmtE,EAAIvhF,EAAIgG,EAAIi8E,GAEZH,GAAK,IACL1tE,GAAK,IACL6tE,GAAK,IACD/K,EAAI+K,EAAI,GAAMA,GAAK,EAAI7tE,GAAK6tE,EAAI7tE,EAAI6tE,EAAI7tE,EACxC6iE,EAAI,EAAIgL,EAAI/K,EAChBqK,EAAIvK,EAAQC,EAAGC,EAAG4K,EAAI,EAAI,GAC1B9hF,EAAIg3E,EAAQC,EAAGC,EAAG4K,GAClB97E,EAAIgxE,EAAQC,EAAGC,EAAG4K,EAAI,EAAI,IAEvB,GAAIvK,GAAIgK,EAAGvhF,EAAGgG,EAAG7C,KAAK4C,IAEjCi7E,MAAO,WACH,MAAO79E,MAAK89E,QAAQD,SAExBG,QAAS,WACL,MAAOh+E,MAAK89E,QAAQE,aA4DxBvJ,EAAQ59E,EAAM6J,QACdC,KAAM,SAAU/C,GAAV,GAGMqY,GACA8oE,EACKphF,EACDqhF,EACAC,EACAx2E,EAEIy2E,EATZC,EAASn/E,IACb,IAAyB,IAArBjF,UAAUnD,OAGV,IAFIqe,EAAUw+D,EAAMx+D,QAChB8oE,EAAgB/+E,KAAKo/E,aAAaxhF,GAC7BD,EAAM,EAAGA,EAAMsY,EAAQre,OAAQ+F,IAChCqhF,EAAc/oE,EAAQtY,GAAK0hF,GAC3BJ,EAAYhpE,EAAQtY,GAAK+gD,QACzBj2C,EAAQu2E,EAAY3vE,KAAK0vE,GACzBt2E,IACIy2E,EAAWD,EAAUx2E,GACzB02E,EAAOf,EAAIc,EAAS,GACpBC,EAAOtiF,EAAIqiF,EAAS,GACpBC,EAAOt8E,EAAIq8E,EAAS,QAI5Bl/E,MAAKo+E,EAAIrjF,UAAU,GACnBiF,KAAKnD,EAAI9B,UAAU,GACnBiF,KAAK6C,EAAI9H,UAAU,EAEvBiF,MAAKo+E,EAAIp+E,KAAKs/E,cAAct/E,KAAKo+E,GACjCp+E,KAAKnD,EAAImD,KAAKs/E,cAAct/E,KAAKnD,GACjCmD,KAAK6C,EAAI7C,KAAKs/E,cAAct/E,KAAK6C,IAErCk7E,MAAO,WAAA,GACCvmF,GAAMwI,KAAKu/E,SACXnB,EAAIp+E,KAAKo+E,EAAE70E,SAAS,IACpB1M,EAAImD,KAAKnD,EAAE0M,SAAS,IACpB1G,EAAI7C,KAAK6C,EAAE0G,SAAS,GACxB,OAAO,IAAM/R,EAAI4mF,GAAK5mF,EAAIqF,GAAKrF,EAAIqL,IAEvCu8E,aAAc,SAAUxhF,GACpB,GAAIq2E,GAAQr2E,GAAS,OAOrB,OANwB,MAApBq2E,EAAM58E,OAAO,KACb48E,EAAQA,EAAM3/D,OAAO,EAAG,IAE5B2/D,EAAQA,EAAM98E,QAAQ,KAAM,IAC5B88E,EAAQA,EAAMn3E,cACdm3E,EAAQQ,EAAMJ,YAAYJ,IAAUA,GAGxCqL,cAAe,SAAU1hF,GACrB,MAAIA,GAAQ,GAAK6X,MAAM7X,GACZ,EAEJA,EAAQ,IAAM,IAAMA,GAE/B2hF,SAAU,SAAU3hF,GAChB,MAAwB,KAAjBA,EAAMhG,OAAe,IAAMgG,EAAQA,GAE9C4hF,WAAY,SAAU5hF,GAClB,GAAI6R,GAAQ7Q,KAAK6Q,KAIjB,OAHAzP,MAAKo+E,EAAI3uE,EAAMzP,KAAKs/E,cAAct/E,KAAKo+E,EAAIxgF,IAC3CoC,KAAKnD,EAAI4S,EAAMzP,KAAKs/E,cAAct/E,KAAKnD,EAAIe,IAC3CoC,KAAK6C,EAAI4M,EAAMzP,KAAKs/E,cAAct/E,KAAK6C,EAAIjF,IACpCoC,MAEXy/E,eAAgB,WACZ,MAAO7gF,MAAKy4D,KAAK,KAAQr3D,KAAKo+E,EAAIp+E,KAAKo+E,EAAI,KAAQp+E,KAAKnD,EAAImD,KAAKnD,EAAI,KAAQmD,KAAK6C,EAAI7C,KAAK6C,MAGnG4xE,EAAMiL,UAAY,SAAUtB,EAAGvhF,EAAGgG,EAAGD,GACjC,MAAO,IAAI0xE,GAAM8J,EAAGvhF,EAAGgG,EAAQ,MAALD,EAAYA,EAAI,IAE9C6xE,EAAMkL,QAAU,SAAUvB,EAAGvhF,EAAGgG,EAAGD,GAC/B,MAAO,IAAIwxE,GAAIgK,EAAGvhF,EAAGgG,EAAQ,MAALD,EAAYA,EAAI,IAE5C6xE,EAAMmL,QAAU,SAAUjB,EAAG1tE,EAAGvH,EAAG9G,GAC/B,MAAO,IAAI2xE,GAAIoK,EAAG1tE,EAAGvH,EAAQ,MAAL9G,EAAYA,EAAI,IAE5C6xE,EAAMoL,QAAU,SAAUlB,EAAG1tE,EAAG6tE,EAAGl8E,GAC/B,MAAO,IAAI4xE,GAAImK,EAAG1tE,EAAG6tE,EAAQ,MAALl8E,EAAYA,EAAI,IAE5C6xE,EAAMx+D,UAEEopE,GAAI,+CACJ3gC,QAAS,SAAUj2C,GACf,OACI4J,SAAS5J,EAAM,GAAI,IACnB4J,SAAS5J,EAAM,GAAI,IACnB4J,SAAS5J,EAAM,GAAI,QAK3B42E,GAAI,0BACJ3gC,QAAS,SAAUj2C,GACf,OACI4J,SAAS5J,EAAM,GAAI,IACnB4J,SAAS5J,EAAM,GAAI,IACnB4J,SAAS5J,EAAM,GAAI,QAK3B42E,GAAI,0BACJ3gC,QAAS,SAAUj2C,GACf,OACI4J,SAAS5J,EAAM,GAAKA,EAAM,GAAI,IAC9B4J,SAAS5J,EAAM,GAAKA,EAAM,GAAI,IAC9B4J,SAAS5J,EAAM,GAAKA,EAAM,GAAI,QAK9CgsE,EAAMJ,YAAcA,EACpBn8E,MAAM0C,WAAW1C,OACb87E,WAAYA,EACZS,MAAOA,KAEK,kBAAVh+E,SAAwBA,OAAOgiC,IAAMhiC,OAAS,SAAUiiC,EAAIC,EAAIC,IACrEA,GAAMD,OAEV,SAAUniC,EAAGC,QACVA,OAAO,qBAAsB,cAAeD,IAC9C,YACG,SAAUE,GAmDP,QAASopF,GAAU9mC,GAAnB,GAEaj6C,GADL0J,IACJ,KAAS1J,IAAOi6C,GACZvwC,EAAMX,KAAK/I,EAAMi6C,EAAOj6C,GAE5B,OAAO0J,GAAMuV,OAAO9mB,KAAK,IAE7B,QAAS6oF,GAAQnjF,GAAjB,GAEa9B,GADL+tC,EAAO,UACX,KAAS/tC,EAAI,EAAGA,EAAI8B,EAAIhF,SAAUkD,EAC9B+tC,IAASA,GAAQ,IAAMA,GAAQ,IAAMA,GAAQ,IAAMA,GAAQ,IAAMA,GAAQ,IACzEA,GAAQjsC,EAAI0M,WAAWxO,EAE3B,OAAO+tC,KAAS,EAEpB,QAASm3C,KACL,OACI/mF,MAAO,EACPC,OAAQ,EACR+mF,SAAU,GAsDlB,QAASC,GAAY9qD,EAAMt7B,EAAOqmF,GAC9B,MAAOC,GAAYz0E,QAAQy0D,QAAQhrC,EAAMt7B,EAAOqmF,GA7HvD,GAEOE,GAuEAC,EACAC,EAKAH,CA9EJzpF,QAAOuB,MAAMy7E,KAAOh9E,OAAOuB,MAAMy7E,SAC7B0M,EAAWnoF,MAAMrB,MAAM6J,QACvBC,KAAM,SAAU5C,GACZiC,KAAK0lB,MAAQ3nB,EACbiC,KAAKwgF,QAAU,EACfxgF,KAAK6/C,SAET4gC,IAAK,SAAU1hF,EAAKnB,GAAf,GACGoV,GAAMhT,KAAK6/C,KACX6gC,GACA3hF,IAAKA,EACLnB,MAAOA,EAEXoV,GAAIjU,GAAO2hF,EACN1gF,KAAK2gF,OAGN3gF,KAAK4gF,MAAMC,MAAQH,EACnBA,EAAMI,MAAQ9gF,KAAK4gF,MACnB5gF,KAAK4gF,MAAQF,GAJb1gF,KAAK2gF,MAAQ3gF,KAAK4gF,MAAQF,EAM1B1gF,KAAKwgF,SAAWxgF,KAAK0lB,OACrB1S,EAAIhT,KAAK2gF,MAAM5hF,KAAO,KACtBiB,KAAK2gF,MAAQ3gF,KAAK2gF,MAAME,MACxB7gF,KAAK2gF,MAAMG,MAAQ,MAEnB9gF,KAAKwgF,WAGb/8D,IAAK,SAAU1kB,GACX,GAAI2hF,GAAQ1gF,KAAK6/C,KAAK9gD,EACtB,IAAI2hF,EAeA,MAdIA,KAAU1gF,KAAK2gF,OAASD,IAAU1gF,KAAK4gF,QACvC5gF,KAAK2gF,MAAQD,EAAMG,MACnB7gF,KAAK2gF,MAAMG,MAAQ,MAEnBJ,IAAU1gF,KAAK4gF,QACXF,EAAMI,QACNJ,EAAMI,MAAMD,MAAQH,EAAMG,MAC1BH,EAAMG,MAAMC,MAAQJ,EAAMI,OAE9BJ,EAAMI,MAAQ9gF,KAAK4gF,MACnBF,EAAMG,MAAQ,KACd7gF,KAAK4gF,MAAMC,MAAQH,EACnB1gF,KAAK4gF,MAAQF,GAEVA,EAAM9iF,SA0BrB0iF,GAAoBS,mBAAoB,GAEpB,mBAAbxjF,YACPgjF,EAAoBhjF,SAASma,cAAc,OAC3C6oE,EAAkBzmF,MAAM6d,QAAU,2QAElCyoE,EAAcloF,MAAMrB,MAAM6J,QAC1BC,KAAM,SAAUP,GACZJ,KAAKqjE,OAAS,GAAIgd,GAAS,KAC3BrgF,KAAKI,QAAU1J,EAAEgK,UAAW4/E,EAAiBlgF,IAEjDggE,QAAS,SAAUhrC,EAAMt7B,EAAOspC,GAAvB,GAID49C,GACAC,EACAC,EAIAnjF,EACAoiF,EACAgB,EACKpiF,EACDnB,CAbR,KAAKw3B,EACD,MAAO4qD,IAKX,IAHIgB,EAAWlB,EAAUhmF,GACrBmnF,EAAWlB,EAAQ3qD,EAAO4rD,GAC1BE,EAAelhF,KAAKqjE,OAAO5/C,IAAIw9D,GAE/B,MAAOC,EAEPnjF,GAAOiiF,IACPG,EAAa/8C,GAAOm9C,EACpBY,EAAiBnhF,KAAKohF,kBAAkB5wB,WAAU,EACtD,KAASzxD,IAAOjF,GACR8D,EAAQ9D,EAAMiF,GACG,SAAVnB,IACPuiF,EAAWrmF,MAAMiF,GAAOnB,EAehC,OAZAuiF,GAAWnuD,YAAcoD,EACzB+qD,EAAWroE,YAAYqpE,GACvB5jF,SAASsa,KAAKC,YAAYqoE,IACf/qD,EAAPnrB,IAAarS,SACbmG,EAAK9E,MAAQknF,EAAWpoE,YAAc/X,KAAKI,QAAQ2gF,mBACnDhjF,EAAK7E,OAASinF,EAAWx5D,aACzB5oB,EAAKkiF,SAAWkB,EAAeE,UAAYrhF,KAAKI,QAAQ2gF,oBAExDhjF,EAAK9E,MAAQ,GAAK8E,EAAK7E,OAAS,GAChC8G,KAAKqjE,OAAOod,IAAIQ,EAAUljF,GAE9BoiF,EAAW3hE,WAAWxG,YAAYmoE,GAC3BpiF,GAEXqjF,gBAAiB,WACb,GAAIE,GAAS/jF,SAASma,cAAc,MAEpC,OADA4pE,GAAOxnF,MAAM6d,QAAU,0DAA4D3X,KAAKI,QAAQ2gF,mBAAqB,eAAiB/gF,KAAKI,QAAQ2gF,mBAAqB,uBACjKO,KAGflB,EAAYz0E,QAAU,GAAIy0E,GAI1BloF,MAAM0C,WAAW1C,MAAMy7E,MACnB0M,SAAUA,EACVD,YAAaA,EACbF,YAAaA,EACbJ,UAAWA,EACXC,QAASA,KAEfppF,OAAOuB,MAAM2sB,SACC,kBAAVpuB,SAAwBA,OAAOgiC,IAAMhiC,OAAS,SAAUiiC,EAAIC,EAAIC,IACrEA,GAAMD,OAEV,SAAUniC,EAAGC,QACVA,OAAO,yBACH,eACA,cACA,qBACDD,IACL,YACG,SAAUE,GA4EP,QAASotC,GAAO1sC,EAAOmqF,GAEnB,MADAnqF,GAAM0Q,KAAKhB,MAAM1P,EAAOmqF,GACjBnqF,EAgCX,QAASoqF,GAAc7lC,GAgCnB,IAhCJ,GACQzpC,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,GAEAuvE,EAAQ,GACL9lC,EAAI,GACHA,EAAIzpC,EAAO,GACXA,EAAOJ,SAEP2vE,GAAS5yE,GAASqD,EAAO,IACzBypC,GAAKzpC,EAAO,GAGpB,OAAOuvE,GAGX,QAASC,GAAQ9jF,GACb,aAAcA,KAAUxB,GAG5B,QAASulF,KACL,MAAO,OAASC,KAKpB,QAASC,GAAIC,GACT,MAAOA,GAAUC,GAIrB,QAASC,GAAWliF,GAApB,GAEahF,GACDsO,EAFJmlE,EAAS,EACb,KAASzzE,EAAI,EAAGA,EAAIgF,EAAMlI,OAAQkD,IAC1BsO,EAAItJ,EAAMwJ,WAAWxO,GACrBsO,EAAI,IACJmlE,GAAU0T,GAAa74E,GAChBA,EAAI,MACXmlE,GAAU0T,GAAa,IAAM74E,IAAM,GACnCmlE,GAAU0T,GAAa,IAAU,GAAJ74E,IACtBA,EAAI,QACXmlE,GAAU0T,GAAa,IAAM74E,IAAM,IACnCmlE,GAAU0T,GAAa,IAAM74E,IAAM,EAAI,IACvCmlE,GAAU0T,GAAa,IAAU,GAAJ74E,GAGrC,OAAOmlE,GAEX,QAAS2T,GAAapiF,GAIlB,IAJJ,GAKYqiF,GACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EAVJlU,EAAS,GACTzzE,EAAI,EACJ4nF,EAAWV,EAAWliF,GACnBhF,EAAI4nF,EAAS9qF,QACZuqF,EAAOO,EAASp5E,WAAWxO,KAC3BsnF,EAAOM,EAASp5E,WAAWxO,KAC3BunF,EAAOK,EAASp5E,WAAWxO,KAC3BwnF,EAAOH,GAAQ,EACfI,GAAe,EAAPJ,IAAa,EAAIC,GAAQ,EACjCI,GAAe,GAAPJ,IAAc,EAAIC,GAAQ,EAClCI,EAAc,GAAPJ,EACP5sE,MAAM2sE,GACNI,EAAOC,EAAO,GACPhtE,MAAM4sE,KACbI,EAAO,IAEXlU,EAASA,EAASoU,GAAQtrF,OAAOirF,GAAQK,GAAQtrF,OAAOkrF,GAAQI,GAAQtrF,OAAOmrF,GAAQG,GAAQtrF,OAAOorF,EAE1G,OAAOlU,GAEX,QAASqU,GAAiB36E,GACtB,MAAIy5E,IAASz5E,EAAEgrB,OAASvX,WAEhBuX,EAAGhrB,EAAEgrB,EAAEvX,SACPrK,EAAGpJ,EAAEoJ,EAAEqK,WAIXuX,EAAGhrB,EAAE00D,OAAS10D,EAAEwY,SAAW,EAC3BpP,EAAGpJ,EAAE20D,OAAS30D,EAAEyY,SAAW,GAGnC,QAASmiE,GAAa56E,GAIlB,MAHU,UAANA,IACAA,MAEGA,EAAEkQ,MAAQlQ,EAAEkQ,MAAMyhD,aAAe3xD,EAAEmY,OAE9C,QAAS0iE,GAAc7O,GACnB,MAAiB,KAAVA,GAA0B,OAAVA,GAA4B,SAAVA,GAA8B,gBAAVA,IAA4ByN,EAAQzN,GAErG,QAAS3kD,GAAKjc,GACV,GAAIA,EACA,MAAOA,GAAMA,EAAMzb,OAAS,GAGpC,QAASmrF,GAAWnlF,EAAOoU,EAAKtZ,GAC5B,MAAOkG,MAAKlG,IAAIkG,KAAKoT,IAAIpU,EAAOlF,GAAMsZ,GAE1C,QAASgxE,GAAUpgF,EAAGqgF,GAIlB,QAAS7iD,GAAMx9B,EAAGC,GAEd,IADA,GAAIu7E,MAAQ8E,EAAK,EAAGC,EAAK,EAAGroF,EAAI,EACzBooF,EAAKtgF,EAAEhL,QAAUurF,EAAKtgF,EAAEjL,QACvBqrF,EAAIrgF,EAAEsgF,GAAKrgF,EAAEsgF,KAAQ,EACrB/E,EAAEtjF,KAAO8H,EAAEsgF,KAEX9E,EAAEtjF,KAAO+H,EAAEsgF,IASnB,OANID,GAAKtgF,EAAEhL,QACPwmF,EAAEt2E,KAAKhB,MAAMs3E,EAAGx7E,EAAE4D,MAAM08E,IAExBC,EAAKtgF,EAAEjL,QACPwmF,EAAEt2E,KAAKhB,MAAMs3E,EAAGv7E,EAAE2D,MAAM28E,IAErB/E,EAlBX,MAAIx7E,GAAEhL,OAAS,EACJgL,EAAE4D,QAmBN,QAASwX,GAAKpb,GAAd,GAICmO,GACApY,EACAC,CALJ,OAAIgK,GAAEhL,QAAU,EACLgL,GAEPmO,EAAInS,KAAKpE,MAAMoI,EAAEhL,OAAS,GAC1Be,EAAOiK,EAAE4D,MAAM,EAAGuK,GAClBnY,EAAQgK,EAAE4D,MAAMuK,GACpBpY,EAAOqlB,EAAKrlB,GACZC,EAAQolB,EAAKplB,GACNwnC,EAAMznC,EAAMC,KACrBgK,GAEN,QAASwgF,GAAIC,GACT,MAAOA,GAAUtB,GAErB,QAASr7C,GAAIotC,GACT,MAAIA,GACOl1E,KAAK8nC,IAAI,GAAIotC,GAEjB,EAEX,QAASrkE,GAAM7R,EAAO8Q,GAClB,GAAI40E,GAAQ58C,EAAIh4B,EAChB,OAAO9P,MAAK6Q,MAAM7R,EAAQ0lF,GAASA,EAEvC,QAASC,GAAe3lF,EAAO88C,GAC3B,MAAOgnC,GAAQ9jF,GAASA,EAAQ88C,EAEpC,QAAS8oC,GAAWzrF,EAAS2P,GAA7B,GACaL,GACDM,EACKhK,CAFb,KAAS0J,IAAaK,GAElB,IADIC,EAAaN,EAAU4qB,OAAOh7B,MAAM,KAC/B0G,EAAM,EAAGA,EAAMgK,EAAW/P,OAAQ+F,IACvC5F,EAAQulB,iBAAiB3V,EAAWhK,GAAM+J,EAAOL,IAAY,GAIzE,QAASksE,GAAcx7E,GAAvB,GACQqrC,GAAMrrC,EAAQ0rF,wBACd/jF,EAAkBnC,SAASmC,eAC/B,QACIJ,IAAK8jC,EAAI9jC,KAAO3I,OAAO8I,aAAeC,EAAgBC,YAAcD,EAAgBgkF,WAAa,GACjG/qF,KAAMyqC,EAAIzqC,MAAQhC,OAAOiJ,aAAeF,EAAgBtB,aAAesB,EAAgBikF,YAAc,IAG7G,QAASC,GAAc7rF,EAASuF,GAAhC,GAIaK,GACDogB,EAJJ/e,KACAlF,EAAQnD,OAAO8G,iBAAiB1F,GAChC8rF,EAAc/nF,MAAMiK,QAAQzI,GAAUA,GAAUA,EACpD,KAASK,EAAM,EAAGA,EAAMkmF,EAAYjsF,OAAQ+F,IACpCogB,EAAQ8lE,EAAYlmF,GACxBqB,EAAO+e,GAASjkB,EAAMikB,EAE1B,OAAO/e,GAEX,QAAS8kF,GAAUlmF,GACf,MAAI6X,OAAM7X,GACCA,EAEJA,EAAQ,KAEnB,QAAS6pE,GAAY1vE,EAASgG,GAA9B,GAEY9E,GACAC,EAQA6qF,CAVR,OAAIhmF,IACI9E,EAAQ8E,EAAK9E,MACbC,EAAS6E,EAAK7E,OACdwoF,EAAQzoF,KACRlB,EAAQ+B,MAAMb,MAAQ6qF,EAAU7qF,IAEhCyoF,EAAQxoF,KACRnB,EAAQ+B,MAAMZ,OAAS4qF,EAAU5qF,IANjCD,SASA8qF,EAASH,EAAc7rF,GACvB,QACA,YAGAkB,MAAOoZ,SAAS0xE,EAAO9qF,MAAO,IAC9BC,OAAQmZ,SAAS0xE,EAAO7qF,OAAQ,MAI5C,QAAS8qF,GAAajsF,EAAS2P,GAA/B,GAIawH,GACDvH,EACKhK,CALE,UAAX+J,IACAA,KAEJ,KAASwH,IAAQxH,GAEb,IADIC,EAAauH,EAAK+iB,OAAOh7B,MAAM,KAC1B0G,EAAM,EAAGA,EAAMgK,EAAW/P,OAAQ+F,IACvC5F,EAAQgkE,oBAAoBp0D,EAAWhK,GAAM+J,EAAOwH,IAAO,GA2GvE,QAAS+0E,GAAYlmE,GACjB,MAAO,UAAUngB,GAKb,MAJIoC,MAAK+d,KAAWngB,IAChBoC,KAAK+d,GAASngB,EACdoC,KAAKkkF,kBAEFlkF,MAGf,QAASmkF,GAAYpmE,GACjB,MAAO,YACH,MAAO/d,MAAK+d,IAGpB,QAASqmE,GAAgBngF,EAAIurC,GAA7B,GACa10C,GACDoU,EACAm1E,CAFR,KAASvpF,EAAI,EAAGA,EAAI00C,EAAO53C,OAAQkD,IAC3BoU,EAAOsgC,EAAO10C,GACdupF,EAAcn1E,EAAK7X,OAAO,GAAG6F,cAAgBgS,EAAK3X,UAAU,EAAG2X,EAAKtX,QACxEqM,EAAG,MAAQogF,GAAeJ,EAAY/0E,GACtCjL,EAAG,MAAQogF,GAAeF,EAAYj1E,GA4G9C,QAASo1E,GAAS/qD,GACd,MAAIA,IAAmD,kBAA1BA,GAAegrD,OACjChrD,EAAegrD,SAEnBhrD,EAiXX,QAASI,GAAU4qD,GACf,MAAe,QAAXA,EACO,KAEPA,YAAkBC,IACXD,EAEJ,GAAIC,IAAeD,GAoH9B,QAASE,GAAqBttB,EAAQ16D,EAAIioF,EAAIH,GAA9C,GACQI,GAAW,EACXC,EAAW,CAOf,OANIL,KACAI,EAAW/lF,KAAKo7B,MAAMuqD,EAAOn7E,EAAIs7E,EAAIH,EAAO3hF,EAAInG,GAC/B,IAAb8nF,EAAO1hF,IACP+hF,EAAWhmF,KAAKo7B,MAAMuqD,EAAO5zE,EAAI+zE,EAAIH,EAAO1hF,EAAIpG,MAIpDw2B,EAAG0xD,EACHtzE,EAAGuzE,GAqIX,QAASC,GAAiB31E,GACtB,GAAI+hC,GAAY,IAAM/hC,CACtB,OAAO,UAAUtR,GACb,MAAI8jF,GAAQ9jF,IACRoC,KAAK8kF,eAAe7zC,EAAWrzC,GAC/BoC,KAAKkkF,iBACElkF,MAEJA,KAAKixC,IAGpB,QAAS8zC,GAAwB9gF,EAAIwI,GACjC,IAAK,GAAI3R,GAAI,EAAGA,EAAI2R,EAAM7U,OAAQkD,IAC9BmJ,EAAGwI,EAAM3R,IAAM+pF,EAAiBp4E,EAAM3R,IAoC9C,QAAS2xE,GAAM7pE,EAAGC,EAAGmiF,GAIjB,MAHkB,UAAdA,IACAA,EAAYC,IAE6B,IAAtCx1E,EAAM7Q,KAAKC,IAAI+D,EAAIC,GAAImiF,GAElC,QAASE,GAAYtiF,EAAGC,EAAGmiF,GACvB,MAAOpiF,GAAIC,GAAK4pE,EAAM7pE,EAAGC,EAAGmiF,GAEhC,QAASG,GAAiBC,EAAIC,EAAIC,EAAIC,GAAtC,GACQC,GAAMH,EAAGpyD,EAAImyD,EAAGnyD,EAChBwyD,EAAMF,EAAGtyD,EAAIqyD,EAAGryD,EAChByyD,EAAML,EAAGh0E,EAAI+zE,EAAG/zE,EAChBs0E,EAAMJ,EAAGl0E,EAAIi0E,EAAGj0E,EAChBu0E,EAAKR,EAAGnyD,EAAIqyD,EAAGryD,EACf4yD,EAAKT,EAAG/zE,EAAIi0E,EAAGj0E,EACfV,EAAI60E,EAAMG,EAAMF,EAAMC,EACtBz0E,GAAKu0E,EAAMK,EAAKH,EAAME,GAAMj1E,EAC5BO,GAAKu0E,EAAMI,EAAKF,EAAMC,GAAMj1E,CAChC,IAAIM,GAAK,GAAKA,GAAK,GAAKC,GAAK,GAAKA,GAAK,EACnC,MAAO,IAAI40E,IAAMV,EAAGnyD,EAAI/hB,EAAIs0E,EAAKJ,EAAG/zE,EAAIH,EAAIw0E,GA6MpD,QAASK,GAAeC,EAAIC,EAAIxpF,EAAIioF,EAAIzxD,EAAG5hB,GAA3C,GACQ60E,GAAMz2E,GAAOwjB,EAAI+yD,GAAMvpF,EAAI,GAC3B0pF,EAAM12E,GAAO4B,EAAI40E,GAAMvB,EAAI,EAC/B,OAAOj1E,GAAMoyE,EAAIjjF,KAAKo7B,MAAMmsD,EAAKD,KAErC,QAASE,GAAuBrnC,GAAhC,GAaQ+iC,GACAuE,EACAC,EACAC,EACAC,EACAnnF,EACAonF,EACAC,EACAC,EACAC,EACAvzD,EAQAwzD,EAIAC,EACAC,EACAf,EACAC,EACAe,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EAOAC,EACAC,EApDA3wB,EAAK9X,EAAW8X,GAChBC,EAAK/X,EAAW+X,GAChBC,EAAKhY,EAAWgY,GAChBC,EAAKjY,EAAWiY,GAChBv6D,EAAKsiD,EAAWtiD,GAChBioF,EAAK3lC,EAAW2lC,GAChB+C,EAAW1oC,EAAW0oC,SACtBC,EAAQ3oC,EAAW2oC,MACnBhkD,EAAWqb,EAAWrb,QA8C1B,OA7CiB,UAAbA,IACAA,EAAW,GAEXo+C,EAAUsB,EAAI1/C,GACd2iD,EAASznF,KAAKsnF,IAAIpE,GAClBwE,EAAO1nF,KAAKunF,IAAIrE,GAChByE,EAAKF,GAAUxvB,EAAKE,GAAM,EAAIuvB,GAAQxvB,EAAKE,GAAM,EACjDwvB,GAAMF,GAAQzvB,EAAKE,GAAM,EAAIsvB,GAAUvvB,EAAKE,GAAM,EAClD33D,EAAOooF,IAAaC,EAAQ,KAC5BjB,EAAM7nF,KAAK8nC,IAAI6/C,EAAI,GACnBG,EAAM9nF,KAAK8nC,IAAI8/C,EAAI,GACnBG,EAAM/nF,KAAK8nC,IAAIjqC,EAAI,GACnBmqF,EAAMhoF,KAAK8nC,IAAIg+C,EAAI,GACnBrxD,EAAQozD,EAAME,EAAMD,EAAME,EAC1BvzD,EAAQ,IACRA,EAAQz0B,KAAKy4D,KAAKovB,EAAME,EAAMD,EAAME,GACpCnqF,EAAK42B,EAAQ52B,EACbkqF,EAAM/nF,KAAK8nC,IAAIjqC,EAAI,GACnBioF,EAAKrxD,EAAQqxD,EACbkC,EAAMhoF,KAAK8nC,IAAIg+C,EAAI,IAEnBmC,EAASxnF,EAAOT,KAAKy4D,MAAMsvB,EAAMC,EAAMD,EAAMD,EAAME,EAAMH,IAAQE,EAAMD,EAAME,EAAMH,IACnFhxE,MAAMoxE,KACNA,EAAS,GAETC,EAAMD,GAAUpqF,EAAK+pF,GAAM9B,EAC3BqC,GAAOF,GAAUnC,EAAK6B,GAAM9pF,EAC5BupF,EAAKK,EAASS,EAAMR,EAAOS,GAAOlwB,EAAKE,GAAM,EAC7CkvB,EAAKK,EAAOQ,EAAMT,EAASU,GAAOjwB,EAAKE,GAAM,EAC7CgwB,GAAMT,EAAKO,GAAOrqF,EAClBwqF,GAAMT,EAAKO,GAAOrC,EAClBwC,IAAOX,EAAKO,GAAOrqF,EACnB0qF,IAAOX,EAAKO,GAAOrC,EACnB0C,GAAcH,GAAM,EAAI,MAAUpF,EAAIjjF,KAAK+oF,KAAKX,EAAKpoF,KAAKy4D,KAAK2vB,EAAKA,EAAKC,EAAKA,KAC9EI,EAAc53E,GAAOu3E,EAAKE,EAAKD,EAAKE,IAAOvoF,KAAKy4D,KAAK2vB,EAAKA,EAAKC,EAAKA,GAAMroF,KAAKy4D,KAAK6vB,EAAKA,EAAKC,EAAKA,IAAM,IACzGG,GAASN,EAAKG,EAAKF,EAAKC,GAAM,EAAI,MAAUrF,EAAIjjF,KAAK+oF,KAAKN,KACzDK,GAASJ,EAAQ,IAClBA,GAAS,KAETI,GAASJ,EAAQ,IACjBA,GAAS,KAETC,EAAWH,EAAaE,EACxBE,EAAeD,GAAY,EAAI,KACnCA,EAAW3oF,KAAKC,IAAI0oF,GAAY,IAAMC,GAElCrwB,OAAQ,GAAI2uB,IAAME,EAAIC,GACtBmB,WAAYA,EACZG,SAAUA,EACVK,QAASnrF,EACTorF,QAASnD,EACToD,UAAWpkD,GAGnB,QAASqkD,GAAeT,EAAOr4E,GAE3B,IADA,GAAIm4E,GAAaE,EACVF,EAAan4E,GAChBm4E,GAAc,EAElB,OAAOA,GA6GX,QAASY,GAAc94E,GACnB,GAAI+hC,GAAY,IAAM/hC,CACtB,OAAO,UAAUtR,GACb,MAAI8jF,GAAQ9jF,IACRoC,KAAK8kF,eAAe7zC,EAAW60C,GAAMt3C,OAAO5wC,IAC5CoC,KAAKkkF,iBACElkF,MAEJA,KAAKixC,IAGpB,QAASg3C,GAAqBhkF,EAAIwI,GAC9B,IAAK,GAAI3R,GAAI,EAAGA,EAAI2R,EAAM7U,OAAQkD,IAC9BmJ,EAAGwI,EAAM3R,IAAMktF,EAAcv7E,EAAM3R,IAG3C,QAASotF,GAAgBC,EAAUC,EAAcC,GAAjD,GACQf,GAAQzF,EAAIjjF,KAAKo7B,MAAMouD,EAAa/2E,EAAI82E,EAAS92E,EAAG+2E,EAAan1D,EAAIk1D,EAASl1D,IAC9Eq1D,EAAeD,EAAME,cAAc5uD,IAAY8D,QAAQ6pD,EAAOa,GAClE,OAAOG,GAAar1D,EAAIk1D,EAASl1D,EAErC,QAASu1D,GAAiBt3E,EAAG6M,EAAO0qE,GAChC,GAAIC,GAAK,EAAIx3E,CACb,OAAOtS,MAAK8nC,IAAIgiD,EAAI,GAAKD,EAAO,GAAG1qE,GAAS,EAAInf,KAAK8nC,IAAIgiD,EAAI,GAAKx3E,EAAIu3E,EAAO,GAAG1qE,GAAS,EAAInf,KAAK8nC,IAAIx1B,EAAG,GAAKw3E,EAAKD,EAAO,GAAG1qE,GAASnf,KAAK8nC,IAAIx1B,EAAG,GAAKu3E,EAAO,GAAG1qE,GAErK,QAAS4qE,GAAkBF,EAAQ1qE,GAC/B,QACK0qE,EAAO,GAAG1qE,GAAS,EAAI0qE,EAAO,GAAG1qE,GAAS,EAAI0qE,EAAO,GAAG1qE,GAAS0qE,EAAO,GAAG1qE,GAC5E,GAAK0qE,EAAO,GAAG1qE,GAAS,EAAI0qE,EAAO,GAAG1qE,GAAS0qE,EAAO,GAAG1qE,IACzD,IAAM0qE,EAAO,GAAG1qE,GAAS0qE,EAAO,GAAG1qE,IACnC0qE,EAAO,GAAG1qE,IA0ClB,QAAS6qE,GAAW31D,GAChB,MAAOA,GAAI,KAAS,EAExB,QAAS41D,GAAuBjmF,EAAGC,EAAGuG,GAClC,GAAI0/E,GAAalqF,KAAKy4D,KAAKz4D,KAAK8nC,IAAI7jC,EAAG,GAAK,EAAID,EAAIwG,EACpD,UACMvG,EAAIimF,IAAe,EAAIlmF,KACvBC,EAAIimF,IAAe,EAAIlmF,IAGjC,QAASmmF,GAAmBnmF,EAAGC,EAAGuG,EAAGuH,GAArC,GAIQmjE,GACAC,EACAiV,EACAluF,EACAmuF,EACApyB,EAAIE,EAAID,EAAIE,EAAIkyB,EAAIC,EAAIC,EAexBpqF,CAvBJ,OAAU,KAAN4D,EACOimF,EAAuBhmF,EAAGuG,EAAGuH,IAEpCmjE,GAAK,EAAIlxE,EAAIwG,EAAIxK,KAAK8nC,IAAI7jC,EAAG,KAAO,EAAIjE,KAAK8nC,IAAI9jC,EAAG,IACpDmxE,GAAK,EAAIn1E,KAAK8nC,IAAI7jC,EAAG,GAAK,EAAID,EAAIC,EAAIuG,EAAI,GAAKxK,KAAK8nC,IAAI9jC,EAAG,GAAK+N,IAAM,GAAK/R,KAAK8nC,IAAI9jC,EAAG,IACvFomF,EAAIpqF,KAAK8nC,IAAIotC,EAAI,EAAG,GAAKl1E,KAAK8nC,IAAIqtC,EAAI,EAAG,GACzCj5E,EAAI,GAAIuuF,IAAc,EAAG,GACzBJ,GAAOpmF,GAAK,EAAID,GAEhBomF,EAAI,GACJnyB,EAAK,GAAIwyB,KAAetV,EAAI,EAAGn1E,KAAKy4D,MAAM2xB,IAAIM,QAAQ,GACtDvyB,EAAK,GAAIsyB,KAAetV,EAAI,IAAIn1E,KAAKy4D,MAAM2xB,KAAIM,QAAQ,KAEvDzyB,GAAMkd,EAAI,EAAIn1E,KAAKy4D,KAAK2xB,GACxBnyB,EAAK,GAAIwyB,IAAcT,EAAW/xB,GAAMj4D,KAAK8nC,IAAI9nC,KAAKC,IAAIg4D,GAAK,EAAI,IACnEE,GAAMgd,EAAI,EAAIn1E,KAAKy4D,KAAK2xB,GACxBjyB,EAAK,GAAIsyB,IAAcT,EAAW7xB,GAAMn4D,KAAK8nC,IAAI9nC,KAAKC,IAAIk4D,GAAK,EAAI,KAEvED,EAAKD,EAAGv1D,IAAIy1D,GACZoyB,EAAKtyB,EAAGv1D,IAAIy1D,GAAIwyB,sBAChBH,EAAKvyB,EAAGv1D,IAAIy1D,EAAGyyB,UAAUD,iBAAiB3qF,KAAKy4D,KAAK,GAAK,GACzDL,EAAKmyB,EAAG7nF,IAAIxG,EAAE2uF,SAASL,IACvBF,EAAKC,EAAG7nF,IAAIxG,EAAE0uF,SAASC,SAASL,IAC5BpqF,KACA83D,EAAG4yB,UACH1qF,EAAO8I,KAAK2H,EAAMqnD,EAAG6yB,KAAOV,EAAKhE;AAEjCjuB,EAAG0yB,UACH1qF,EAAO8I,KAAK2H,EAAMunD,EAAG2yB,KAAOV,EAAKhE,KAEjCiE,EAAGQ,UACH1qF,EAAO8I,KAAK2H,EAAMy5E,EAAGS,KAAOV,EAAKhE,KAE9BjmF,GAEX,QAAS4qF,GAAgBnB,EAAQJ,EAAOtqE,EAAO8rE,EAAW9rC,GAA1D,GAGQ+rC,GACKnsF,EAHLosF,EAAapB,EAAkBF,EAAQoB,GACvCG,EAAQjB,EAAmBgB,EAAW,GAAIA,EAAW,GAAIA,EAAW,GAAIA,EAAW,GAAK1B,EAAMwB,GAElG,KAASlsF,EAAM,EAAGA,EAAMqsF,EAAMpyF,OAAQ+F,IAClC,GAAI,GAAKqsF,EAAMrsF,IAAQqsF,EAAMrsF,IAAQ,IACjCmsF,EAAetB,EAAiBwB,EAAMrsF,GAAMogB,EAAO0qE,GAC/C7pF,KAAKC,IAAIirF,EAAezB,EAAMtqE,KAAWggC,GACzC,OAAO,EAKvB,QAASksC,GAAwBxB,EAAQJ,EAAO6B,GAAhD,GAGQC,GAAiBC,EAEZtvF,EAJLivF,EAAapB,EAAkBF,EAAQ,KACvCuB,EAAQjB,EAAmBgB,EAAW,GAAIA,EAAW,GAAIA,EAAW,GAAIA,EAAW,GAAK1B,EAAMp1D,GAE9Fvf,EAAQ,CACZ,KAAS5Y,EAAI,EAAGA,EAAIkvF,EAAMpyF,OAAQkD,IAC9BqvF,EAAkB3B,EAAiBwB,EAAMlvF,GAAI,IAAK2tF,GAClD2B,EAAgB3d,EAAM0d,EAAiB9B,EAAMh3E,IAAM84E,EAAkB9B,EAAMh3E,EACvE+4E,KAAgC,IAAbJ,EAAMlvF,IAAyB,IAAbkvF,EAAMlvF,KAAaovF,EAAKG,cAAcp3D,EAAIo1D,EAAMp1D,GAAK,EAAI+2D,EAAMlvF,IAAMkvF,EAAMlvF,GAAK,IACrH4Y,GAGR,OAAOA,GAEX,QAAS42E,GAAuB1nF,EAAGC,EAAGwlF,GAAtC,GACQkC,GAEIptB,EACAE,EACAD,EACAE,EACAlW,CAOR,OAZIxkD,GAAEqwB,IAAMpwB,EAAEowB,IACNkqC,EAAOv+D,KAAKoT,IAAIpP,EAAEqwB,EAAGpwB,EAAEowB,GACvBoqC,EAAOz+D,KAAKlG,IAAIkK,EAAEqwB,EAAGpwB,EAAEowB,GACvBmqC,EAAOx+D,KAAKoT,IAAIpP,EAAEyO,EAAGxO,EAAEwO,GACvBisD,EAAO1+D,KAAKlG,IAAIkK,EAAEyO,EAAGxO,EAAEwO,GACvB+1C,EAAU+V,GAAQkrB,EAAMp1D,GAAKo1D,EAAMp1D,EAAIoqC,EAEvCktB,EADAntB,IAASE,EACI+qB,EAAMh3E,GAAK+rD,GAAQhW,EAEnBA,IAAYkW,EAAOF,KAAUx6D,EAAEqwB,EAAIpwB,EAAEowB,IAAMrwB,EAAEyO,EAAIxO,EAAEwO,GAAK,EAAIg3E,EAAMp1D,EAAIkqC,EAAOE,EAAOgrB,EAAMp1D,IAAMoqC,EAAOF,GAAQC,EAAOirB,EAAMh3E,GAAK,GAG/Ik5E,EAAa,EAAI,EA0J5B,QAASC,GAAYh4B,GAArB,GAIa13D,GAHLlD,EAAS46D,EAAI56D,OACboa,EAAMy4E,GACN/xF,EAAMgyF,EACV,KAAS5vF,EAAI,EAAGA,EAAIlD,EAAQkD,IACxBpC,EAAMkG,KAAKlG,IAAIA,EAAK85D,EAAI13D,IACxBkX,EAAMpT,KAAKoT,IAAIA,EAAKwgD,EAAI13D,GAE5B,QACIkX,IAAKA,EACLtZ,IAAKA,GAkNb,QAASiyF,GAAoBpkE,EAAUqkE,EAAgBrxD,GAAvD,GACQsxD,GACK/vF,EACD/C,EAEI+yF,CAHZ,KAAShwF,EAAI,EAAGA,EAAIyrB,EAAS3uB,OAAQkD,IAC7B/C,EAAUwuB,EAASzrB,GACnB/C,EAAQyL,YACJsnF,EAAqBF,EAAiB7yF,EAAQmyF,KAAK3wD,GAAkBxhC,EAAQgzF,UAC7ED,IAEID,EADAA,EACcG,GAAKC,MAAMJ,EAAaC,GAExBA,GAK9B,OAAOD,GAEX,QAASK,GAA2B3kE,EAAUgT,GAA9C,GACQsxD,GACK/vF,EACD/C,EAEI+yF,CAHZ,KAAShwF,EAAI,EAAGA,EAAIyrB,EAAS3uB,OAAQkD,IAC7B/C,EAAUwuB,EAASzrB,GACnB/C,EAAQyL,YACJsnF,EAAqB/yF,EAAQozF,YAAY5xD,GACzCuxD,IAEID,EADAA,EACcG,GAAKC,MAAMJ,EAAaC,GAExBA,GAK9B,OAAOD,GAiRX,QAASO,GAAiB/C,EAAO6B,EAAMnyF,GAAvC,GACQszF,GAAYtzF,EAAQ4hC,aAAeA,IACnC4qD,EAAS8G,EAAU9G,QACvBA,GAAOt8E,GAAKogF,EAAMp1D,EAAIi3D,EAAKnnD,OAAO9P,EAClCsxD,EAAO/tF,GAAK6xF,EAAMh3E,EAAI64E,EAAKnnD,OAAO1xB,EAClCg6E,EAAU9G,OAAOA,GACjBxsF,EAAQ4hC,UAAU0xD,GAEtB,QAASC,GAAWvtF,EAAM0gE,EAAM8sB,EAAO93D,EAAM+3D,GACzC,GAAIv8E,EAQJ,OANIA,GADU,UAAVs8E,EACQ9sB,EAAK17B,OAAOtP,GACH,QAAV83D,EACC9sB,EAAK17B,OAAOtP,GAAQgrC,EAAK1gE,KAAKytF,GAAaztF,EAE3C0gE,EAAK17B,OAAOtP,IAASgrC,EAAK1gE,KAAKytF,GAAaztF,GAAQ,EAyLpE,QAAS0tF,IAAcllE,EAAUk4C,EAAMitB,EAAWj4D,EAAM+3D,GAAxD,GACa7tF,GACDusF,EAEI7B,CAHZ,KAAS1qF,EAAM,EAAGA,EAAM4oB,EAAS3uB,OAAQ+F,IACjCusF,EAAO3jE,EAAS5oB,GAAKwtF,cACrBjB,IACI7B,EAAQ6B,EAAKnnD,OAAO5mC,QACxBksF,EAAM50D,GAAQ63D,EAAWpB,EAAKnsF,KAAKytF,GAAY/sB,EAAMitB,GAAa,QAASj4D,EAAM+3D,GACjFJ,EAAiB/C,EAAO6B,EAAM3jE,EAAS5oB,KAInD,QAAS4tF,IAAMhlE,EAAUk4C,EAAMitB,GAC3BD,GAAcllE,EAAUk4C,EAAMitB,EAAW,IAAK,SAElD,QAASC,IAAOplE,EAAUk4C,EAAMitB,GAC5BD,GAAcllE,EAAUk4C,EAAMitB,EAAW,IAAK,UAElD,QAASE,IAAcrlE,EAAUslE,EAAWC,EAAWN,GAAvD,GAEYzoD,GACAgpD,EACKpuF,EACD5F,EACAmyF,CALZ,IAAI3jE,EAAS3uB,OAAS,EAGlB,IAFImrC,EAAS,GAAI+iD,IACbiG,EAAexlE,EAAS,GAAG2jE,KACtBvsF,EAAM,EAAGA,EAAM4oB,EAAS3uB,OAAQ+F,IACjC5F,EAAUwuB,EAAS5oB,GAAK5F,QACxBmyF,EAAO3jE,EAAS5oB,GAAKusF,KACzBnnD,EAAO8oD,GAAaE,EAAahpD,OAAO8oD,GAAaE,EAAahuF,KAAKytF,GACvEzoD,EAAO+oD,GAAa5B,EAAKnnD,OAAO+oD,GAChCV,EAAiBroD,EAAQmnD,EAAMnyF,GAC/BmyF,EAAKnnD,OAAO8oD,GAAa9oD,EAAO8oD,GAChCE,EAAe7B,EAI3B,QAAS8B,IAAoBzlE,GAA7B,GAEa5oB,GACD5F,EACAmyF,EAHJ0B,IACJ,KAASjuF,EAAM,EAAGA,EAAM4oB,EAAS3uB,OAAQ+F,IACjC5F,EAAUwuB,EAAS5oB,GACnBusF,EAAOnyF,EAAQozF,cACfjB,GACA0B,EAAc9jF,MACV/P,QAASA,EACTmyF,KAAMA,GAIlB,OAAO0B,GAEX,QAASK,IAAM1lE,GACXqlE,GAAcI,GAAoBzlE,GAAW,IAAK,IAAK,SAE3D,QAAS2lE,IAAO3lE,GACZqlE,GAAcI,GAAoBzlE,GAAW,IAAK,IAAK,UAE3D,QAAS4lE,IAAU5lE,EAAUk4C,EAAM+sB,GAAnC,GAKQzzF,GAASmyF,EAOJvsF,EAIGI,EAfRquF,EAAU3tB,EAAK1gE,KAAKytF,GACpBa,KACAJ,KACAK,EAAY,EAEZC,EAAoB,WACpBN,EAAMnkF,MACF/P,QAASA,EACTmyF,KAAMA,IAGd,KAASvsF,EAAM,EAAGA,EAAM4oB,EAAS3uB,OAAQ+F,IACrC5F,EAAUwuB,EAAS5oB,GACnBusF,EAAOnyF,EAAQozF,cACXjB,IACInsF,EAAOmsF,EAAKnsF,KAAKytF,GACjBc,EAAYvuF,EAAOquF,EACfH,EAAMr0F,QACNy0F,EAAOvkF,KAAKmkF,GACZA,KACAM,IACAD,EAAYvuF,IAEZwuF,IACAF,EAAOvkF,KAAKmkF,GACZA,KACAK,EAAY,IAGhBC,IACAD,GAAavuF,GAOzB,OAHIkuF,GAAMr0F,QACNy0F,EAAOvkF,KAAKmkF,GAETI,EAEX,QAASG,IAAajmE,EAAUk4C,EAAMhrC,EAAMq4D,EAAWN,GAAvD,GAIa7tF,GACDsuF,EACAQ,EAMKC,EAXTL,EAASF,GAAU5lE,EAAUk4C,EAAM+sB,GACnCzoD,EAAS07B,EAAK17B,OAAO5mC,QACrB6C,IACJ,KAASrB,EAAM,EAAGA,EAAM0uF,EAAOz0F,OAAQ+F,IAQnC,IAPIsuF,EAAQI,EAAO1uF,GACf8uF,EAAeR,EAAM,GACzBlpD,EAAO+oD,GAAaW,EAAavC,KAAKnnD,OAAO+oD,GAC7CV,EAAiBroD,EAAQ0pD,EAAavC,KAAMuC,EAAa10F,SACzD00F,EAAavC,KAAKnnD,OAAOtP,GAAQsP,EAAOtP,GACxCm4D,GAAcK,EAAOx4D,EAAMq4D,EAAWN,GACtCxsF,EAAO8I,SACE4kF,EAAa,EAAGA,EAAaT,EAAMr0F,OAAQ80F,IAChD1tF,EAAOrB,GAAKmK,KAAKmkF,EAAMS,GAAY30F,QAG3C,OAAOiH,GAEX,QAASlG,IAAKytB,EAAUk4C,GACpB,MAAO+tB,IAAajmE,EAAUk4C,EAAM,IAAK,IAAK,SAElD,QAASkuB,IAAMpmE,EAAUk4C,GACrB,MAAO+tB,IAAajmE,EAAUk4C,EAAM,IAAK,IAAK,UAElD,QAASmuB,IAAI70F,EAAS0mE,GAAtB,GAGYgJ,GACAolB,EAEInwD,EACAowD,EANR5C,EAAOnyF,EAAQozF,aACfjB,KACIziB,EAAcyiB,EAAKnsF,KACnB8uF,EAAWpuB,EAAK1gE,MAChB8uF,EAAS5zF,MAAQwuE,EAAYxuE,OAAS4zF,EAAS3zF,OAASuuE,EAAYvuE,UAChEwjC,EAAQ99B,KAAKoT,IAAI66E,EAAS5zF,MAAQwuE,EAAYxuE,MAAO4zF,EAAS3zF,OAASuuE,EAAYvuE,QACnF4zF,EAAe/0F,EAAQ4hC,aAAeA,IAC1CmzD,EAAapwD,MAAMA,EAAOA,GAC1B3kC,EAAQ4hC,UAAUmzD,KAS9B,QAASC,IAAgB79E,GACrB,MAAO,UAAUtR,GACb,MAAI8jF,GAAQ9jF,IACRoC,KAAKI,QAAQsjB,IAAIxU,EAAMtR,GAChBoC,MAEJA,KAAKI,QAAQqjB,IAAIvU,IAGhC,QAAS89E,IAAuB/oF,EAAIwI,GAChC,IAAK,GAAI3R,GAAI,EAAGA,EAAI2R,EAAM7U,OAAQkD,IAC9BmJ,EAAGwI,EAAM3R,IAAMiyF,GAAgBtgF,EAAM3R,IA6H7C,QAASmyF,IAAMtrD,GACX,MAAO,GAAM/iC,KAAKsnF,IAAIvkD,EAAW/iC,KAAKsuF,IAAM,EAEhD,QAASC,IAAOxrD,GACZ,MAAOA,GAEX,QAASyrD,IAAezrD,EAAUpV,EAAMtd,EAAOqvE,GAC3C,GAAIrtE,GAAI,QAAS6iE,EAAI,EAAGlxE,EAAI07E,CAC5B,OAAiB,KAAb38C,EACO1yB,EAEM,IAAb0yB,EACO1yB,EAAQqvE,GAEdxK,IACDA,EAAI,IAEJlxE,EAAIhE,KAAKC,IAAIy/E,IACb17E,EAAI07E,EACJrtE,EAAI6iE,EAAI,GAER7iE,EAAI6iE,GAAK,EAAIl1E,KAAKsuF,IAAMtuF,KAAKyuF,KAAK/O,EAAO17E,GAEtCA,EAAIhE,KAAK8nC,IAAI,MAAS/E,GAAY/iC,KAAKunF,MAAYxkD,EAAY1wB,IAAM,IAAMrS,KAAKsuF,IAAMpZ,GAAKwK,EAAOrvE,GAkO7G,QAASq+E,IAAiBvuC,EAAYwuC,EAAY3vF,GAAlD,GAEa9C,GADL0yF,EAAiBD,EAAa,EAAI,CACtC,KAASzyF,EAAI,EAAGA,EAAIikD,EAAWnnD,OAAQkD,GAAK,EACxCikD,EAAW32C,OAAOtN,EAAI0yF,EAAgB,EAAG5vF,GAGjD,QAAS6vF,IAAgBpF,EAAOlxB,GAC5B,GAAIkxB,GAASlxB,EACT,MAAOA,GAAOu2B,UAAU,GAAG3wD,WAAWsrD,EAAMp1D,GAAIo1D,EAAMh3E,GAI9D,QAASs8E,IAA8BhsD,EAAUymD,EAAcD,GAC3D,GAAIyF,GAAcxF,EAAajsF,QAAQugC,MAAM,EAAI,EACjD,QACImxD,WAAYD,EAAYzxF,QAAQ2xF,cAAcnsD,EAAS+rD,UAAUK,KACjEC,UAAWJ,EAAYE,cAAc3F,EAASuF,UAAUK,MAOhE,QAASE,IAAgBrxF,GACrB,GAAImiD,KAIJ,OAHAniD,GAAIzF,QAAQ+2F,GAAa,SAAU51F,EAAOb,GACtCsnD,EAAWj3C,KAAK3F,WAAW1K,MAExBsnD,EA8RX,QAASovC,IAAWj/E,EAAMtR,GACtB,MAAO8jF,GAAQ9jF,IAAoB,OAAVA,EAAiB,IAAMsR,EAAO,KAAQtR,EAAQ,KAAQ,GAEnF,QAASwwF,IAAcC,GAAvB,GAEavzF,GADLyzE,EAAS,EACb,KAASzzE,EAAI,EAAGA,EAAIuzF,EAAMz2F,OAAQkD,IAC9ByzE,GAAU4f,GAAWE,EAAMvzF,GAAG,GAAIuzF,EAAMvzF,GAAG,GAE/C,OAAOyzE,GAEX,QAAS+f,IAAYD,GAArB,GAEavzF,GACD8C,EAFJ2wE,EAAS,EACb,KAASzzE,EAAI,EAAGA,EAAIuzF,EAAMz2F,OAAQkD,IAC1B8C,EAAQywF,EAAMvzF,GAAG,GACjB4mF,EAAQ9jF,KACR2wE,GAAU8f,EAAMvzF,GAAG,GAAK,IAAM8C,EAAQ,IAG9C,IAAe,KAAX2wE,EACA,MAAOA,GA8Bf,QAASggB,IAAarvF,EAAMtB,GACxB,MAAgB,SAATsB,GAA4B,SAATA,KAAqBtB,GAA4B,aAAnBA,EAAMspB,UAElE,QAASsnE,MAAT,GACQ7nF,GAAOpJ,SAASkxF,qBAAqB,QAAQ,GAC7ClrF,EAAOhG,SAASme,SAASnY,KACzBmrF,EAAYnrF,EAAKrF,QAAQ,KACzBilB,EAAM,EAOV,OANIxc,KAASxO,GAAQoB,QAAQgB,OACrBm0F,SACAnrF,EAAOA,EAAKhM,UAAU,EAAGm3F,IAE7BvrE,EAAM5f,GAEH4f,EAEX,QAASwrE,IAAO9qE,EAAI+qE,GAChB,GAAIjoF,GAAOioF,EAAe,GAAKJ,IAC/B,OAAO,OAAS7nF,EAAO,IAAMkd,EAAK,IAgftC,QAASgrE,IAAc92F,GAAvB,GACQ+2F,GAMIn2F,EACA2G,EACAxF,CAPR,KACIg1F,EAAM/2F,EAAQg3F,aAAeh3F,EAAQg3F,eAAiB,KACxD,MAAO9mF,IAEL6mF,IACIn2F,GAAQm2F,EAAI7mF,EAAI,EAChB3I,GAAOwvF,EAAIt4F,EAAI,EACfsD,EAAQ/B,EAAQ+B,MACP,IAATnB,GAAsB,IAAR2G,IACdxF,EAAMnB,KAAOA,EAAO,KACpBmB,EAAMwF,IAAMA,EAAM,OAqZ9B,QAAS0vF,IAAe55D,GACpB,IAAKA,IAASA,EAAKl3B,SAAWk3B,EAAKl3B,QAAQ,KAAO,EAC9C,MAAOk3B,EAEX,IAAIr9B,GAAUi3F,GAAe7pD,QAE7B,OADAptC,GAAQ6f,UAAYwd,EACbr9B,EAAQi6B,aAAej6B,EAAQk3F,UAkF1C,QAASC,IAAYl7C,GAArB,GAKYjR,GACAosD,EAMJC,EAXA5nD,EAAO,GAAI6nD,KAAWT,cAAc,IACpC1E,EAAOl2C,EAAMm3C,cACbmE,EAAYt7C,CAWhB,OAVIk2C,KACInnD,EAASmnD,EAAKqF,YACdJ,EAAa,GAAIK,IACrBL,EAAWx1D,UAAUA,IAAYoD,WAAWgG,EAAO9P,GAAI8P,EAAO1xB,IAC9D89E,EAAWx0F,SAASmN,KAAKksC,GACzBs7C,EAAYH,GAEhB3nD,EAAKoiB,MAAM0lC,IACPF,EAAM,qCAA0CK,GAAS,8DAAqEjoD,EAAKj/B,SAAW,SAClJi/B,EAAK1hB,UACEspE,EAsBX,QAASM,IAAWC,EAAK3oD,GAAzB,GAKQ4oD,GACAvjB,EAEKvxE,EAGD+0F,EACAC,EACA9B,EAZJ+B,EAAW/oD,EAAK+oD,QACpB,IAAwB,IAApBA,EAASn4F,OAAb,CAMA,IAHIg4F,EAAUG,EAAS,GACnB1jB,EAASujB,EAAQvjB,SACrBsjB,EAAIvpD,OAAOimC,EAAOp5C,EAAGo5C,EAAOh7D,GACnBvW,EAAI,EAAGA,EAAIi1F,EAASn4F,OAAQkD,IACjC80F,EAAUG,EAASj1F,GACnBuxE,EAASujB,EAAQvjB,SACbwjB,EAAUE,EAASj1F,EAAI,GACvBg1F,EAAUD,EAAQhC,aAClBG,EAAY4B,EAAQ5B,YACpB8B,GAAW9B,EACX2B,EAAIK,cAAcF,EAAQ78D,EAAG68D,EAAQz+E,EAAG28E,EAAU/6D,EAAG+6D,EAAU38E,EAAGg7D,EAAOp5C,EAAGo5C,EAAOh7D,GAEnFs+E,EAAIM,OAAO5jB,EAAOp5C,EAAGo5C,EAAOh7D,EAGhC21B,GAAK5mC,QAAQ8vF,QACbP,EAAIQ,aAmaZ,QAASC,IAAev5B,EAAIE,GACxB,MAAIF,GAAGw5B,QAAUt5B,EAAGs5B,QACT,EAEPx5B,EAAGw5B,QAAUt5B,EAAGs5B,WAGb,EAmNX,QAASC,IAAiBC,EAAUC,GAApC,GACa7yF,GACDmiB,EACAm0D,CAFR,KAASt2E,EAAM,EAAGA,EAAM6yF,EAAM54F,OAAQ+F,IAC9BmiB,EAAO0wE,EAAM7yF,GACbs2E,EAAQ/7E,MAAM87E,WAAWl0D,EAAKm0D,SAClCA,EAAMrxE,GAAKkd,EAAKokB,UAChBqsD,EAASE,aAAa3wE,EAAK1gB,SAAU60E,EAAMiK,aAiOnD,QAASwS,IAAY18C,EAAO5zC,GAA5B,GASY2iC,GAIAhlC,EAIJ4yF,EACAhpE,EACA7tB,EAKAyhE,EAGAp6D,EACA2kB,EA3BAo0B,GACAjhD,MAAO,QACPC,OAAQ,QACR03F,KAAM,aAENzB,EAAan7C,EACbk2C,EAAOl2C,EAAMm3C,aA0BjB,OAzBIjB,KACInnD,EAASmnD,EAAKqF,YAClBJ,EAAa,GAAIK,IACjBL,EAAWx1D,UAAUA,IAAYoD,WAAWgG,EAAO9P,GAAI8P,EAAO1xB,IAC9D89E,EAAWx0F,SAASmN,KAAKksC,GACrBj2C,EAAOmsF,EAAK1kE,UAChB00B,EAASjhD,MAAQ8E,EAAK9E,MAAQ,KAC9BihD,EAAShhD,OAAS6E,EAAK7E,OAAS,MAEhCy3F,EAAiBj6F,EAAEgK,OAAOw5C,EAAU95C,GACpCunB,EAAYpqB,SAASma,cAAc,OACnC5d,EAAQ6tB,EAAU7tB,MACtBA,EAAMulB,QAAU,OAChBvlB,EAAMb,MAAQ03F,EAAe13F,MAC7Ba,EAAMZ,OAASy3F,EAAez3F,OAC9BqE,SAASsa,KAAKC,YAAY6P,GACtB4zC,EAAU,GAAIs1B,IAAUlpE,EAAWgpE,GACvCp1B,EAAQu1B,kBACRv1B,EAAQw1B,KAAK5B,GACThuF,EAAUo6D,EAAQy1B,QAClBlrE,EAAU,WACVy1C,EAAQz1C,UACRvoB,SAASsa,KAAKG,YAAY2P,IAE9BxmB,EAAQ4/B,KAAKjb,EAASA,GACf3kB,EAEX,QAAS8vF,IAAUj9C,EAAO5zC,GACtB,GAAIgvF,GAAMF,GAAYl7C,EAItB,OAHK5zC,IAAYA,EAAQqwC,MACrB2+C,EAAM,6BAA+BlN,EAAakN,IAE/C3b,KAAgBryC,QAAQguD,GAGnC,QAAS8B,IAAQC,GACb,MAAOr1F,OAAMiL,UAAUP,MAAM2B,KAAKgpF,GAkBtC,QAAS72F,IAASmE,EAAI2yF,GACd3yF,EAAG4yF,UACH5yF,EAAG4yF,UAAU/vF,IAAI8vF,GAEjB3yF,EAAGR,WAAa,IAAMmzF,EAG9B,QAAS9rD,IAAY7mC,EAAI2yF,GACjB3yF,EAAG4yF,UACH5yF,EAAG4yF,UAAUnpE,OAAOkpE,GAEpB3yF,EAAGR,UAAYQ,EAAGR,UAAUhH,MAAM,OAAOiiD,OAAO,SAAUt2C,EAAGs3B,GAIzD,MAHIA,IAAQk3D,GACRxuF,EAAEkF,KAAKoyB,GAEJt3B,OACJ1L,KAAK,KAGpB,QAASo6F,IAAO7yF,EAAInB,GAChB0J,OAAO2a,KAAKrkB,GAAQg7B,QAAQ,SAAUv5B,GAClCN,EAAG3E,MAAMiF,GAAOzB,EAAOyB,KA4B/B,QAASkZ,IAAQxZ,EAAIsF,GACjB,GAAItF,EAAGwZ,QACH,MAAOxZ,GAAGwZ,QAAQlU,EAEtB,MAAOtF,IAAO,iCAAiCvE,KAAYuE,EAAPwL,KAAa,CAC7D,GAAI4J,GAAQpV,EAAIsF,GACZ,MAAOtF,EAEXA,GAAKA,EAAG+f,YAiDhB,QAAS+yE,IAAMJ,GACX,MAAoB,gBAATA,IAEHl+D,EAAGk+D,EACH9/E,EAAG8/E,GAGPr1F,MAAMiK,QAAQorF,IAEVl+D,EAAGk+D,EAAM,GACT9/E,EAAG8/E,EAAM,KAIbl+D,EAAGk+D,EAAMl+D,EACT5hB,EAAG8/E,EAAM9/E,GAGjB,QAASmgF,IAAQz5F,EAASqI,GAatB,QAASqxF,GAAM15F,GAAf,GACQi8C,GAAQ,GAAIw7C,IACZvgB,EAAMl3E,EAAQ0rF,uBAuBlB,OAtBAiO,IAAa19C,GACTtX,EAAMzJ,EACN,EACA,EACAyJ,EAAMrrB,GACL49D,EAAIt2E,KAAO+jC,EAAMzJ,GACjBg8C,EAAI3vE,IAAMo9B,EAAMrrB,IAErBsgF,GAASC,UAAW,EACpBD,GAASE,QAAUC,GAAOC,OAC1BJ,GAASK,kBACLj6F,QAASA,EACTi8C,MAAOA,GAGP29C,GAASM,YADT7xF,EAAQ8xF,cAAe,EACA,IAEA9xF,EAAQ8xF,WAEnC53F,GAASvC,EAAS,gBAClBo6F,GAAcp6F,EAASi8C,GACvB1O,GAAYvtC,EAAS,gBACdi8C,EA8EX,QAASo+C,GAAaC,GAClB,GAAmB,MAAfA,EAIA,MAH0B,gBAAfA,KACPA,EAAcn6F,MAAMuK,SAAS4vF,EAAYl7F,QAAQ,aAAc,MAEzC,kBAAfk7F,GACA,SAAU72F,GAAV,GAGKic,GAFJhZ,EAAK4zF,EAAY72F,EAMrB,OALIiD,IAAmB,gBAANA,KACTgZ,EAAMla,SAASma,cAAc,OACjCD,EAAIG,UAAYnZ,EAChBA,EAAKgZ,EAAI66E,mBAEN7zF,GAGR,WACH,MAAO4zF,GAAY7hC,WAAU,IAIzC,QAAS+hC,GAAiB5xE,EAAU5oB,EAASy6F,EAAYC,EAAWC,EAAY5vD,EAAQ1iC,GAuCpF,QAASuyF,KA2BL,QAAS3rC,KACL4rC,GAA4BC,EAAO,WAC/BlyE,GACIkyE,MAAOA,EACPlrE,UAAWA,MA/B3B,GAIQylB,GAII15B,GAPU,KAAd8+E,GAAqBE,IACrBI,EAAav2E,GAEb6wB,EAAO2lD,IACXx2E,EAAKiC,WAAWkyC,aAAatjB,EAAM7wB,GACnC6wB,EAAKt1B,YAAYyE,GACb81E,GACI3+E,EAAQm/E,EAAMj7F,OAClBi7F,EAAMv6D,QAAQ,SAAU8U,EAAMtyC,GAC1B,GAAI2D,GAAK4zF,GACLt6F,QAASq1C,EACT4lD,QAASl4F,EAAI,EACbmsD,WAAY4rC,EAAMj7F,QAElB6G,KACA2uC,EAAKt1B,YAAYrZ,GACjBw0F,GAAYx0F,EAAI,WACI,MAAViV,GACFszC,UAMhBA,IAWR,QAASksC,GAAaz0F,GAClB,GAAI2B,EAAQ8yF,cAAgBr/E,GAAQpV,EAAI2B,EAAQ8yF,eAAiBz0F,EAAGkoB,cAAgB+rE,EAAaS,EAC7F,OAAO,CAEX,IAAIC,GAAM30F,EAAG2lB,OACb,SAAI,YAAYlqB,KAAKk5F,IAAQ30F,EAAGkoB,cAAgB+rE,EAAaS,KAGtD10F,EAAGuD,aAAa,qBAAuB,0FAA0F9H,KAAKuE,EAAG2lB,UAEpJ,QAAS0uE,GAAa/6F,GAAtB,GAIQ+B,GACAu5F,EACAC,EACAC,EAEAC,EACK/0F,EAcGg1F,CAdZ,KATuB,SAAnB17F,EAAQqsB,SACRktE,GAAOv5F,GAAW27F,YAAa,UAE/B55F,EAAQ2D,GAAiB1F,GACzBs7F,EAAgBlxF,WAAWtE,GAAiB/D,EAAO,mBACnDw5F,EAAenxF,WAAWtE,GAAiB/D,EAAO,wBAClDy5F,EAAaJ,EACjBA,GAAUE,EAAgBC,EACtBE,GAAU,EACL/0F,EAAK1G,EAAQq4C,WAAY3xC,EAAIA,EAAKA,EAAG4xC,YAC1C,GAAmB,GAAf5xC,EAAGyoB,SAAe,CAElB,GADAssE,GAAU,EACN3/E,GAAQpV,EAAI+zF,GAAa,CACzBmB,EAAel1F,EACf,UAEJ,IAAKi0F,EAAY,CACbI,EAAar0F,EACb,UAEJ,IAAK,wBAAwBvE,KAAK2D,GAAiBJ,GAAiBgB,GAAK,aACrE,QAEAg1F,GAAOG,EAAcn1F,GACb,GAARg1F,EACAE,EAAel1F,GACRg1F,GACHP,EAAaz0F,GACbk1F,EAAel1F,GAKnBq0F,EAAar0F,OAEK,IAAfA,EAAGyoB,UAAiBwrE,IAC3BmB,EAAUp1F,EAAI+0F,GACdA,GAAU,EAGlBL,GAASI,EAEb,QAASO,GAAcr1F,GACnB,GAAIq1E,GAAIr1E,EAAG+f,WAAYpnB,EAAQ08E,EAAE1jC,UACjC,IAAI3xC,IAAOrH,EACP,OAAO,CAEX,IAAIqH,IAAOq1E,EAAEn5E,SAAS,GAAI,CACtB,GAAsB,GAAlBvD,EAAM8vB,UAAmC,GAAlB9vB,EAAM8vB,SAC7B,OAAO,CAEX,IAAsB,GAAlB9vB,EAAM8vB,SACN,OAAQ,KAAKhtB,KAAK9C,EAAMoE,MAGhC,OAAO,EAEX,QAASm4F,GAAel1F,GAAxB,GAIQsY,GAAOg9E,EAAUC,EAAOC,EAAMC,EAU9B9mD,EACA2Q,CAdJ,OAAmB,IAAft/C,EAAGyoB,UAAiBzoB,IAAO8d,GAAQu3E,EAAcr1F,GAC1Ck1F,EAAel1F,EAAG+f,aAG7BzH,EAAQkB,GAAQxZ,EAAI,SACpBs1F,EAAWh9E,GAASA,EAAMo9E,cAAc,YACpC/zF,EAAQg0F,gBACRJ,EAAQj9E,GAASA,EAAMo9E,cAAc,SACrCF,EAAOh8E,GAAQxZ,EAAI,oBACfw1F,GAAQA,EAAKE,cAAc,wBAC3BD,EAAWD,EAAKE,cAAc,oBAGlC/mD,EAAO2lD,IACPh1C,EAAQs2C,EAAIp/D,cAChB8oB,EAAMu2C,eAAe/3E,GACrBwhC,EAAMw2C,aAAa91F,GACnB2uC,EAAKt1B,YAAYimC,EAAMy2C,mBACvBj4E,EAAKiC,WAAWkyC,aAAatjB,EAAM7wB,GACnCk4E,EAAwBh2F,EAAG+f,YACvBzH,IACAA,EAAQkB,GAAQxZ,EAAI,SAChB2B,EAAQg0F,eAAiBJ,GACzBj9E,EAAM25C,aAAasjC,EAAMxjC,WAAU,GAAOz5C,EAAMq5B,YAEhD2jD,GACAh9E,EAAM25C,aAAaqjC,EAASvjC,WAAU,GAAOz5C,EAAMq5B,kBAGvDhwC,EAAQg0F,eAAiBF,IACzBD,EAAOh8E,GAAQxZ,EAAI,oBACnBw1F,EAAKvjC,aAAawjC,EAAS1jC,WAAU,GAAOyjC,EAAK7jD,eAGzD,QAAS2iD,KACL,GAAI3lD,GAAOinD,EAAI38E,cAAc,iBAe7B,OAdA45E,IAAOlkD,GACH/tB,QAAS,QACTllB,UAAW,cACXlB,MAAOw5F,EAAYA,EAAY,KAAO,OACtCiC,QAAS5xD,EAAOxjC,IAAM,MAAQwjC,EAAOlqC,MAAQ,MAAQkqC,EAAOjqC,OAAS,MAAQiqC,EAAOnqC,KAAO,KAC3FgpC,SAAU,WACVzoC,OAAQw5F,EAAaA,EAAa,KAAO,OACzCv0F,SAAUu0F,GAAcD,EAAY,SAAW,UAC/CvzC,MAAO,SAEP9+C,GAAWA,EAAQu0F,gBACnBvnD,EAAKnvC,UAAYmC,EAAQu0F,eAE7B9B,EAAM/qF,KAAKslC,GACJA,EAEX,QAASwmD,GAAczC,GAAvB,GAKQ7xF,GACAs1F,EALAxxD,EAAM+tD,EAAM1N,uBAChB,OAAkB,KAAdrgD,EAAInqC,OAA8B,IAAfmqC,EAAIlqC,OAChB,GAEPoG,EAAMid,EAAKknE,wBAAwBnkF,IACnCs1F,EAAYlC,EAAaS,EACtB/vD,EAAIlqC,OAAS07F,EAAY,EAAIxxD,EAAI9jC,IAAMA,EAAMs1F,EAAY,EAAIxxD,EAAIvqC,OAASyG,EAAMs1F,EAAY,EAAI,GAE3G,QAASf,GAAUliE,EAAM6hE,GAAzB,GAIQlvE,GACAy5B,EAEA01C,EAIAoB,EAuBQznD,CAjCP,MAAKlzC,KAAKy3B,EAAKn2B,QAGhB8oB,EAAMqN,EAAKn2B,KAAK5D,OAChBmmD,EAAQs2C,EAAIp/D,cAChB8oB,EAAM+2C,mBAAmBnjE,GACrB8hE,EAAOG,EAAc71C,GACpB01C,IAGDoB,EAAWljE,EACH,GAAR8hE,EAEIE,EADAH,EACe7hE,EAAKnT,WAELmT,KAGlB,QAASojE,GAAQ/iF,EAAKi9D,EAAKv2E,GAExB,MADAqlD,GAAMi3C,OAAOrjE,EAAMs9C,GACfj9D,GAAOi9D,GAAOA,GAAOv2E,EACdu2E,EAEP2kB,EAAc71C,GACPg3C,EAAQ/iF,EAAKA,EAAMi9D,GAAO,EAAGA,GAE7B8lB,EAAQ9lB,EAAKA,EAAMv2E,GAAO,EAAGA,IAE1C,EAAG4rB,GAAO,EAAGA,IACV,KAAKpqB,KAAK6jD,GAAAA,IAAqBy1C,EAChCG,EAAehiE,EAAKnT,aAEpBq2E,EAAWljE,EAAKkiE,UAAU91C,EAAMk3C,WAC5B7nD,EAAO2lD,IACXh1C,EAAMu2C,eAAe/3E,GACrB6wB,EAAKt1B,YAAYimC,EAAMy2C,mBACvBj4E,EAAKiC,WAAWkyC,aAAatjB,EAAM7wB,GACnCk4E,EAAwBI,EAASr2E,cAGzCq1E,EAAUgB,KAEd,QAASJ,GAAwBh2F,GAC7B,GAAIy2F,GAAKj9E,GAAQxZ,EAAI,KACjBy2F,KACAA,EAAGx3E,aAAa,kBAAmB,KACnC+2E,EAAwBS,EAAG12E,aA5PvC,GACQ6zE,GAAcD,EAAahyF,EAAQqC,UACnC4xF,EAAMt8F,EAAQ0jE,cACdo3B,KACAt2E,EAAOnc,EAAQ+0F,aAAep9F,EAAUq9F,GAAWr9F,GACnD4vB,EAAY0sE,EAAI38E,cAAc,sBAC9By7E,EAAS,CACbjC,IAAQ30E,EAAKgC,iBAAiB,UAAU+Z,QAAQ,SAAU+8D,GACtDA,EAAM72E,WAAW1G,YAAYu9E,KAEjCnE,GAAQ30E,EAAKgC,iBAAiB,OAAO+Z,QAAQ,SAAUg9D,GACnDpE,GAAQoE,EAAG36F,UAAU29B,QAAQ,SAAU48D,EAAI/iF,GACvC+iF,EAAGx3E,aAAa,oBAAqBvL,OAG7Cm/E,GAAO3pE,GACHtI,QAAS,QACTsiB,SAAU,WACVxnC,UAAW,cACXxB,KAAM,WACN2G,IAAK,aAELmzF,IACAnB,GAAO3pE,GACH1uB,MAAOw5F,EAAY,KACnB8C,YAAazyD,EAAOnqC,KAAO,KAC3B68F,aAAc1yD,EAAOlqC,MAAQ,OAEjC04F,GAAO/0E,GAAQpe,SAAU,YAE7BpG,EAAQymB,WAAWkyC,aAAa/oC,EAAW5vB,GAC3C4vB,EAAU7P,YAAYyE,GAClBnc,EAAQq1F,gBACR/rE,WAAW,WACPtpB,EAAQq1F,gBAAgB9tE,EAAWgrE,IACpC,IAEHjpE,WAAWipE,EAAa,IA9KpC,GAIQxxF,GAQAu7B,CAPJ,IAJKt8B,IACDA,MAEAe,EAAUsyE,MACT17E,EACD,MAAOoJ,GAAQgkD,OAAO,uBAE1B,IAAsC,kBAA3BxuD,QAAO8G,iBACd,KAAUqL,OAAM,mLAgYpB,OA9XA5Q,OAAMw9F,IAAIC,WAAWC,GAAa79F,EAAQ0jE,gBACtC/+B,EAAQ60D,GAAMnxF,EAAQs8B,OAAS,GA4BnCu2D,GAAYl7F,EAAS,WAAA,GAgCTi8C,GA/BJw+C,EAAapyF,GAAWA,EAAQy1F,eAChCC,EAAe11F,GAAWA,EAAQ21F,WAAkC,QAArB31F,EAAQ21F,UACvDC,EAAe99F,MAAMw9F,IAAIO,gBAAgB,SAAUl3F,EAAKm3F,GACxD,MAAW,aAAPn3F,EACO+2F,EAAe11F,EAAQrB,GAAO,KAElCA,IAAOqB,GAAUA,EAAQrB,GAAOm3F,IAEvCzD,EAAYqD,GAAgBE,EAAaD,UAAU,GACnDrD,EAAaoD,GAAgBE,EAAaD,UAAU,GACpDjzD,EAAS1iC,EAAQ0iC,QAAUkzD,EAAalzD,OACxCqzD,IAAoBrzD,CACpB0vD,IAAcE,GACT5vD,IACDA,GACInqC,KAAM,EACN2G,IAAK,EACL1G,MAAO,EACPC,OAAQ,IAGZ45F,IACAA,GAAa/1D,EAAMzJ,GAEnBy/D,IACAA,GAAch2D,EAAMrrB,GAExByxB,EAAOnqC,MAAQ+jC,EAAMzJ,EACrB6P,EAAOlqC,OAAS8jC,EAAMzJ,EACtB6P,EAAOxjC,KAAOo9B,EAAMrrB,EACpByxB,EAAOjqC,QAAU6jC,EAAMrrB,EACnB2iC,EAAQ,GAAIw7C,KACZkG,KACIU,WAAW,EACXL,UAAWD,EAAeE,EAAaD,UAAY,OACnDM,cAAeF,KAGvB5D,EAAiB,SAAUt/D,GACvB,GAAI7yB,EAAQsnB,SAAU,CAClB,GAAI4uE,IAAW,EAAOtD,EAAU,GAC/B,QAAShsC,KACN,GAAIgsC,EAAU//D,EAAE4/D,MAAMj7F,OAAQ,CAC1B,GAAIw1C,GAAOqkD,EAAMx+D,EAAE4/D,MAAMG,GACzBh/C,GAAMlQ,OAAOsJ,GACbhtC,EAAQsnB,UACJ0lB,KAAMA,EACN4lD,UAAWA,EACX/rC,WAAYh0B,EAAE4/D,MAAMj7F,OACpBozB,OAAQ,WACJsrE,GAAW,KAGdA,EAGDrjE,EAAEtL,UAAUnJ,WAAWxG,YAAYib,EAAEtL,WAFrC+B,WAAWs9B,OAKf/zB,GAAEtL,UAAUnJ,WAAWxG,YAAYib,EAAEtL,WACrCxmB,EAAQigC,QAAQ4S,UAIxB/gB,GAAE4/D,MAAMv6D,QAAQ,SAAU8U,GACtB4G,EAAMlQ,OAAO2tD,EAAMrkD,MAEvBna,EAAEtL,UAAUnJ,WAAWxG,YAAYib,EAAEtL,WACrCxmB,EAAQigC,QAAQ4S,IAErBj8C,EAASy6F,EAAYC,EAAYA,EAAY3vD,EAAOnqC,KAAOmqC,EAAOlqC,MAAQ,KAAM85F,EAAaA,EAAa5vD,EAAOxjC,IAAMwjC,EAAOjqC,OAAS,KAAMiqC,EAAQ1iC,IAExJe,EAAQigC,QAAQqwD,EAAM15F,MAwRvBoJ,EAmOX,QAASy0F,IAAavB,GASlB,QAASkC,GAAaC,GAClB,GAAIA,EAAI,CACJ,GAAI3pE,GAAQ,IACZ,KACIA,EAAQ2pE,EAAGC,SACb,MAAOC,IAEL7pE,GACA8pE,EAASH,EAAI3pE,IAIzB,QAAS+pE,GAAUxqE,GAAnB,GAWYyqE,GAVJ/jB,EAAMj1E,GAAiBuuB,EAAKtyB,MAAO,MACvC,OAAIg5E,GACOgkB,GAAchkB,GAAK55B,OAAO,SAAUt2C,EAAGnE,GAC1C,GAAIo4F,GAAOE,GAAWt4F,EAItB,OAHIo4F,IACAj0F,EAAEkF,KAAK+uF,GAEJj0F,QAGPi0F,EAAOE,GAAW3qE,EAAKzU,SACpBk/E,GAAQA,OAGvB,QAASF,GAASK,EAAYnqE,GAA9B,GACa/xB,GACDsjF,EAMItkF,EACAm9F,EACAC,EACAC,EACArkB,CAXZ,KAASh4E,EAAI,EAAGA,EAAI+xB,EAAMj1B,SAAUkD,EAEhC,OADIsjF,EAAIvxD,EAAM/xB,GACNsjF,EAAEl/E,MACV,IAAK,GACDq3F,EAAanY,EAAE4Y,WACf,MACJ,KAAK,GACGl9F,EAAQskF,EAAEtkF,MACVm9F,EAASH,GAAcj5F,GAAiB/D,EAAO,gBAC/Co9F,EAAO,sBAAsBh9F,KAAK2D,GAAiB/D,EAAO,gBAC1Dq9F,EAAS,UAAYt5F,GAAiB/D,EAAO,cAC7Cg5E,EAAM8jB,EAAUxY,GAChBtL,EAAIl7E,OAAS,GACbw/F,EAAQJ,EAAYC,EAAQC,EAAMC,EAAQrkB,EAAI,KAK9D,QAASskB,GAAQJ,EAAYvqF,EAAOyqF,EAAMC,EAAQh0E,GACzC,UAAUjpB,KAAKipB,IACV,gBAAgBjpB,KAAKipB,IAAQ,MAAMjpB,KAAKipB,KAC1CA,GAAa6zE,EAAWzzF,KAAlB0G,IAAwB9S,QAAQ,UAAW,IAAMgsB,GAG/D1W,EAAM6rB,QAAQ,SAAUppB,GACpBA,EAAOA,EAAK/X,QAAQ,mBAAoB,MACpC+/F,IACAhoF,GAAQ,SAERioF,IACAjoF,GAAQ,WAEZlQ,EAAOkQ,GAAQiU,IArE3B,GAIQnkB,GACKlE,CAAT,KAJW,MAAPu5F,IACAA,EAAM92F,UAENyB,KACKlE,EAAI,EAAGA,EAAIu5F,EAAIgD,YAAYz/F,SAAUkD,EAC1Cy7F,EAAalC,EAAIgD,YAAYv8F,GAEjC,OAAOkE,GAiEX,QAAStC,IAAeoC,EAAKC,GACzB,MAAOiI,QAAOD,UAAUrK,eAAeyL,KAAKrJ,EAAKC,GAErD,QAASu4F,IAAWpoF,GAEhB,MADAA,GAAO,YAAcA,EACdyiF,GAASziF,GAEpB,QAASqoF,IAAeroF,GACpB,GAAIgD,MAAa4hE,EAAI6d,EAErB,KADAziF,EAAO,YAAcA,EACd4kE,GACCp3E,GAAeo3E,EAAG5kE,IAClBgD,EAAOpK,KAAKgsE,EAAE5kE,IAElB4kE,EAAI9sE,OAAOwwF,eAAe1jB,EAE9B,OAAO5hE,GAAO5R,UAElB,QAASm3F,IAAWvoF,EAAMwoF,GACtB,GAAI5jB,GAAI6d,EAER,KADAziF,EAAO,YAAcA,EACd4kE,IAAMp3E,GAAeo3E,EAAG5kE,IAC3B4kE,EAAI9sE,OAAOwwF,eAAe1jB,EAEzBA,KACDA,EAAI6d,GAASgG,OAEjB7jB,EAAE5kE,IAAS4kE,EAAE5kE,IAAS,IAAa,MAAPwoF,EAAc,EAAIA,GAElD,QAASE,IAAa1oF,EAAM6vB,GACxB7vB,EAAO,YAAcA,EACrByiF,GAASziF,GAAe,MAAP6vB,EAAc,EAAIA,EAEvC,QAAS84D,IAAWj1F,EAAGpM,EAAG0/F,GAA1B,GACap7F,GACDoU,EACA6vB,CAFR,KAASjkC,EAAI,EAAGA,EAAI8H,EAAEhL,QACdsX,EAAOtM,EAAE9H,KACTikC,EAAM58B,WAAWS,EAAE9H,IACnB2a,MAAMspB,GACNvoC,EAAE0Y,EAAMgnF,IAER1/F,EAAE0Y,EAAM6vB,KACNjkC,GAId,QAASg9F,IAAeh+F,GAAxB,GAKQi+F,GAJAC,EAAen6F,GAAiB/D,EAAO,gBACvCk+F,IACAH,GAAWf,GAAckB,EAAc,QAASJ,GAAc,GAE9DG,EAAmBl6F,GAAiB/D,EAAO,qBAC3Ci+F,GACAF,GAAWf,GAAciB,EAAkB,QAASN,GAAY,GAGxE,QAASQ,IAAar7F,EAAK3E,GACvB,GAAIg8E,GAAQ/7E,MAAM87E,WAAWp3E,GAAK,EASlC,OARIq3E,KACAA,EAAQA,EAAM6J,QACV7lF,EACAg8E,EAAQA,EAAMiK,YACK,IAAZjK,EAAMrxE,IACbqxE,EAAQ,OAGTA,EAEX,QAAS2e,IAA4BrsE,EAAU5F,GAe3C,QAASqmC,OACCkxC,GAAW,GACbv3E,IAhBR,GAAIu3E,GAAU,CACd3xE,GAAS+R,QAAQ,SAAU75B,GAAV,GAEJ3D,GACDq9F,EAFJC,EAAS35F,EAAG8f,iBAAiB,MACjC,KAASzjB,EAAI,EAAGA,EAAIs9F,EAAOxgG,SAAUkD,EAC7Bq9F,EAAMC,EAAOt9F,GACZq9F,EAAI53F,WACL23F,IACAC,EAAIE,OAASF,EAAIG,QAAUtxC,KAIlCkxC,GACDlxC,IAQR,QAASisC,IAAYl7F,EAAS4oB,GAE1B,QAASrf,GAAI6hB,GACJo1E,GAAYp1E,KACbo1E,GAAYp1E,IAAO,EACnBq1E,EAAK1wF,KAAKqb,IAiBlB,QAAS6jC,OACCtzC,GAAS,GACXiN,IAxBZ,GAqBQjN,GApBA8kF,MAOH,QAASC,GAAK1gG,GACP,SAASmC,KAAKnC,EAAQqsB,UACtB9iB,EAAIvJ,EAAQ+6E,KAEhB4lB,GAAqB76F,GAAiBJ,GAAiB1F,GAAU,qBAAqBugC,QAAQ,SAAUqgE,GACrF,OAAXA,EAAGz5F,MACHoC,EAAIq3F,EAAGx1E,OAGXprB,EAAQ4C,UACRu2F,GAAQn5F,EAAQ4C,UAAU29B,QAAQmgE,IAExC1gG,GACE2b,EAAQ8kF,EAAK5gG,OAMH,IAAV8b,GACAszC,IAEJwxC,EAAKlgE,QAAQ,SAAUnV,GACnB,GAAIg1E,GAAMI,GAAYp1E,GAAO,GAAIxsB,QAAOiiG,KACnC,WAAU1+F,KAAKipB,KAChBg1E,EAAIU,YAAc,aAEtBV,EAAIrlB,IAAM3vD,EACNg1E,EAAI53F,SACJymD,KAEAmxC,EAAIE,OAASrxC,EACbmxC,EAAIG,QAAU,WACVC,GAAYp1E,GAAO,KACnB6jC,QAKhB,QAAS8xC,IAAan9C,GAAtB,GAGYyiC,GAFJp/E,EAAS,EACb,GACQo/E,GAAIziC,EAAI,GACZ38C,EAASiL,OAAOg4E,aAAa,GAAK7D,GAAKp/E,EACvC28C,EAAI/8C,KAAKpE,MAAMmhD,EAAI,UACdA,EAAI,EACb,OAAO38C,GAEX,QAAS+5F,IAAahhG,EAAS+B,EAAOk6C,GAAtC,GAMQglD,GAEI/kB,CAPR0d,IAAW3qF,OAAOwnC,OAAOmjD,IACzBA,GAAS55F,EAAQqsB,QAAQtnB,gBACrB/E,QAASA,EACT+B,MAAOA,GAEPk/F,EAAan7F,GAAiB/D,EAAO,mBACrCk/F,GAA4B,QAAdA,IACV/kB,EAAQp2E,GAAiB/D,EAAO,SACpCk/F,EAAW/hG,MAAM,QAAQqhC,QAAQ,SAAUppB,GAClCyiF,GAASziF,KACVyiF,GAASziF,GAAQ+kE,MAIzBglB,GAAuBn/F,KACvB63F,GAASK,kBACLj6F,QAASA,EACTi8C,MAAOA,IAInB,QAASklD,MACLvH,GAAW3qF,OAAOwwF,eAAe7F,IAErC,QAASwH,IAAcnyD,GACnB,GAAyB,MAArB2qD,GAASC,SAAkB,CAC3B,GAAIxuD,GAAM4D,EAAKkjD,KAAKyH,GAASE,QAEzBF,IAASC,SADTD,GAASC,SACW5G,GAAKoO,UAAUzH,GAASC,SAAUxuD,GAElCA,GAIhC,QAASi2D,MACL,GAAIC,GAAK3H,GAASC,QAClB,OAAU,OAAN0H,IAGAA,EACsB,IAAfA,EAAGrgG,SAAiC,IAAhBqgG,EAAGpgG,SADlC,QAIJ,QAAS+/F,IAAuBn/F,GAC5B,QAASulC,GAAKnwB,GACV,MAAOrR,IAAiB/D,EAAOoV,GAEnC,GAAyB,QAArBmwB,EAAK,cAA8C,UAApBA,EAAK,aAA8C,QAAnBA,EAAK,YAAwBA,EAAK,WAAa,EAC9G,OAAO,EAGf,QAAS5hC,IAAiB1F,EAASwhG,GAC/B,MAAO5iG,QAAO8G,iBAAiB1F,EAASwhG,GAAa,MAEzD,QAAS17F,IAAiB/D,EAAOulC,EAAMm6D,GACnC,GAAIz6D,GAAMjlC,EAAM+D,iBAAiBwhC,EAYjC,OAXW,OAAPN,GAAuB,KAARA,IACXxlC,GAAQ+E,OACRygC,EAAMjlC,EAAM+D,iBAAiB,WAAawhC,GACnC9lC,GAAQiF,QACfugC,EAAMjlC,EAAM+D,iBAAiB,QAAUwhC,GAChC9lC,GAAQ6iB,MACf2iB,EAAMjlC,EAAM+D,iBAAiB,MAAQwhC,GAC9B9lC,GAAQgB,OACfwkC,EAAMjlC,EAAM+D,iBAAiB,OAASwhC,KAG1CtkC,UAAUnD,OAAS,IAAa,MAAPmnC,GAAuB,KAARA,GACjCy6D,EAEAz6D,EAGf,QAAS06D,IAAuB3/F,EAAOulC,EAAMzhC,EAAO87F,GAChD5/F,EAAM6/F,YAAYt6D,EAAMzhC,EAAO87F,GAC3BngG,GAAQ+E,OACRxE,EAAM6/F,YAAY,WAAat6D,EAAMzhC,EAAO87F,GACrCngG,GAAQiF,QACf1E,EAAM6/F,YAAY,QAAUt6D,EAAMzhC,EAAO87F,GAClCngG,GAAQ6iB,MACftiB,EAAM6/F,YAAY,MAAQt6D,EAAMzhC,EAAO87F,GAChCngG,GAAQgB,OACfT,EAAM6/F,YAAY,OAASt6D,EAAMzhC,EAAO87F,GACxCr6D,EAAO,KAAOA,EAAKloC,QAAQ,gBAAiB,SAAU8Z,EAAGo0E,EAAIC,GACzD,MAAOD,GAAKC,EAAGpoF,gBAEnBpD,EAAMulC,GAAQzhC,GAGtB,QAASg8F,IAAU9/F,EAAO+/F,GAEtB,MADAA,GAAO,UAAYA,GAEf5gG,MAAOkJ,WAAWtE,GAAiB/D,EAAO+/F,EAAO,WACjD//F,MAAO+D,GAAiB/D,EAAO+/F,EAAO,UACtC5lB,MAAOgkB,GAAap6F,GAAiB/D,EAAO+/F,EAAO,WAAW,IAGtE,QAASC,IAAU/hG,EAASu8C,GAA5B,GACQtK,GAAOjyC,EAAQ+B,MAAM6d,QACrB3Y,EAASs1C,GAEb,OADAv8C,GAAQ+B,MAAM6d,QAAUqyB,EACjBhrC,EAEX,QAAS+6F,IAAgBjgG,EAAO+/F,GAC5B,GAAIzb,GAAIvgF,GAAiB/D,EAAO,UAAY+/F,EAAO,WAAW5iG,MAAM,QAAQ+b,IAAI7Q,WAIhF,OAHgB,IAAZi8E,EAAExmF,QACFwmF,EAAEt2E,KAAKs2E,EAAE,IAEN4b,IACH/mE,EAAGmrD,EAAE,GACL/sE,EAAG+sE,EAAE,KAGb,QAAS6b,IAAcliG,GACnB,GAAIqrC,GAAMrrC,EAAQ0rF,uBAGlB,OAFArgD,GAAMC,GAASD,EAAK,iBAAkBrrC,GACtCqrC,EAAMC,GAASD,EAAK,YAAarrC,GAGrC,QAASsrC,IAASD,EAAK/D,EAAMtnC,GACzB,GAAI+B,GAAOogG,EAAIC,EAAIC,EAAIC,CAUvB,OATmB,gBAARh7D,IACPvlC,EAAQ2D,GAAiB1F,GACzBmiG,EAAK/3F,WAAWtE,GAAiB/D,EAAOulC,EAAKloC,QAAQ,IAAK,SAC1DgjG,EAAKh4F,WAAWtE,GAAiB/D,EAAOulC,EAAKloC,QAAQ,IAAK,WAC1DijG,EAAKj4F,WAAWtE,GAAiB/D,EAAOulC,EAAKloC,QAAQ,IAAK,YAC1DkjG,EAAKl4F,WAAWtE,GAAiB/D,EAAOulC,EAAKloC,QAAQ,IAAK,WACpC,gBAARkoC,KACd66D,EAAKC,EAAKC,EAAKC,EAAKh7D,IAGpB//B,IAAK8jC,EAAI9jC,IAAM46F,EACfthG,MAAOwqC,EAAIxqC,MAAQuhG,EACnBthG,OAAQuqC,EAAIvqC,OAASuhG,EACrBzhG,KAAMyqC,EAAIzqC,KAAO0hG,EACjBphG,MAAOmqC,EAAIxqC,MAAQwqC,EAAIzqC,KAAOwhG,EAAKE,EACnCnhG,OAAQkqC,EAAIvqC,OAASuqC,EAAI9jC,IAAM86F,EAAKF,GAG5C,QAASI,IAAaxgG,GAAtB,GAKQyqF,GAEIxhD,EANJ+pD,EAAejvF,GAAiB/D,EAAO,YAC3C,OAAoB,QAAhBgzF,EACO,MAEPvI,EAAS,gCAAgCl1E,KAAKy9E,GAC9CvI,GACIxhD,EAASllC,GAAiB/D,EAAO,oBACrCyqF,EAASA,EAAO,GAAGttF,MAAM,YAAY+b,IAAI7Q,YACzC4gC,EAASA,EAAO9rC,MAAM,QAAQ+b,IAAI7Q,aAE9BoiF,OAAQA,EACRxhD,OAAQA,IANhB,QAUJ,QAASw3D,IAAiBzY,GACtB,MAAO,KAAMA,EAAUljF,KAAKsuF,GAAK,IAErC,QAASsN,IAAWlT,GAChB,GAAImT,GAAMt4F,WAAWmlF,EACrB,OAAI,QAAQptF,KAAKotF,GACN1oF,KAAKsuF,GAAKuN,EAAM,IAChB,OAAOvgG,KAAKotF,GACZmT,EACA,QAAQvgG,KAAKotF,GACb1oF,KAAKsuF,GAAKuN,EAAM,EAChB,OAAOvgG,KAAKotF,GACZ1oF,KAAKsuF,GAAKuN,EAAM,IADpB,OAIX,QAAS/I,IAAagJ,EAAO3pF,GAGzB,MAFAA,GAAI,GAAI+gF,IAAO/gF,EAAE,GAAIA,EAAE,GAAIA,EAAE,GAAIA,EAAE,GAAIA,EAAE,GAAIA,EAAE,IAC/C2pF,EAAM/gE,UAAU5oB,GACTA,EAEX,QAAS4pF,IAAYD,EAAOE,GACxBF,EAAM72D,KAAK+2D,GAEf,QAASC,IAAa7zD,EAAM/T,EAAG5hB,EAAGjR,GAK9B,IAJA,GAAIqoF,GAAS,GAAIqS,KACT7nE,EACA5hB,GACDjR,GAAS26F,cAAejgG,EAAI,EAC5BA,EAAI2tF,EAAO7wF,QACdovC,EAAKg0D,QAAQvS,EAAO3tF,KAAM2tF,EAAO3tF,KAAM2tF,EAAO3tF,MAGtD,QAASk/F,IAAe5b,GAIpB,OAHIA,EAAEnrD,GAAK,GAAKmrD,EAAE/sE,GAAK,KACnB+sE,EAAEnrD,EAAImrD,EAAE/sE,EAAI,GAET+sE,EAEX,QAAS6c,IAAyB73D,EAAK83D,EAAKC,EAAKC,EAAKC,GAAtD,GACQC,GAAO18F,KAAKlG,IAAI,EAAGwiG,EAAIjoE,GAAIsoE,EAAO38F,KAAKlG,IAAI,EAAGwiG,EAAI7pF,GAClDmqF,EAAO58F,KAAKlG,IAAI,EAAGyiG,EAAIloE,GAAIwoE,EAAO78F,KAAKlG,IAAI,EAAGyiG,EAAI9pF,GAClDqqF,EAAO98F,KAAKlG,IAAI,EAAG0iG,EAAInoE,GAAI0oE,EAAO/8F,KAAKlG,IAAI,EAAG0iG,EAAI/pF,GAClDuqF,EAAOh9F,KAAKlG,IAAI,EAAG2iG,EAAIpoE,GAAI4oE,EAAOj9F,KAAKlG,IAAI,EAAG2iG,EAAIhqF,GAClD7a,EAAIoI,KAAKoT,IAAIoxB,EAAInqC,OAASqiG,EAAOE,GAAOp4D,EAAIlqC,QAAUuiG,EAAOE,GAAOv4D,EAAInqC,OAASyiG,EAAOE,GAAOx4D,EAAIlqC,QAAU2iG,EAAON,GAWxH,OAVI/kG,GAAI,IACJ8kG,GAAQ9kG,EACR+kG,GAAQ/kG,EACRglG,GAAQhlG,EACRilG,GAAQjlG,EACRklG,GAAQllG,EACRmlG,GAAQnlG,EACRolG,GAAQplG,EACRqlG,GAAQrlG,IAGRslG,IACI7oE,EAAGqoE,EACHjqF,EAAGkqF,GAEPQ,IACI9oE,EAAGuoE,EACHnqF,EAAGoqF,GAEPO,IACI/oE,EAAGyoE,EACHrqF,EAAGsqF,GAEPM,IACIhpE,EAAG2oE,EACHvqF,EAAGwqF,IAIf,QAASK,IAAgBnkG,EAASqrC,EAAKlkC,GAAvC,GAOYi9F,GACAH,EACAI,EACAH,EAUII,EACAC,EACAC,EACAC,EAtBR1iG,EAAQ2D,GAAiB1F,GACzBmjG,EAAMnB,GAAgBjgG,EAAO,YAC7BqhG,EAAMpB,GAAgBjgG,EAAO,aAC7BuhG,EAAMtB,GAAgBjgG,EAAO,eAC7BshG,EAAMrB,GAAgBjgG,EAAO,eAuCjC,OAtCY,WAARoF,GAA6B,WAARA,IACjBi9F,EAAKvC,GAAU9/F,EAAO,OACtBkiG,EAAKpC,GAAU9/F,EAAO,SACtBsiG,EAAKxC,GAAU9/F,EAAO,UACtBmiG,EAAKrC,GAAU9/F,EAAO,QAC1BohG,EAAIjoE,GAAKgpE,EAAGhjG,MACZiiG,EAAI7pF,GAAK8qF,EAAGljG,MACZkiG,EAAIloE,GAAK+oE,EAAG/iG,MACZkiG,EAAI9pF,GAAK8qF,EAAGljG,MACZmiG,EAAInoE,GAAK+oE,EAAG/iG,MACZmiG,EAAI/pF,GAAK+qF,EAAGnjG,MACZoiG,EAAIpoE,GAAKgpE,EAAGhjG,MACZoiG,EAAIhqF,GAAK+qF,EAAGnjG,MACA,WAARiG,IACIm9F,EAAKl6F,WAAWtE,GAAiB/D,EAAO,gBACxCwiG,EAAKn6F,WAAWtE,GAAiB/D,EAAO,kBACxCyiG,EAAKp6F,WAAWtE,GAAiB/D,EAAO,mBACxC0iG,EAAKr6F,WAAWtE,GAAiB/D,EAAO,iBAC5CohG,EAAIjoE,GAAKupE,EACTtB,EAAI7pF,GAAKgrF,EACTlB,EAAIloE,GAAKqpE,EACTnB,EAAI9pF,GAAKgrF,EACTjB,EAAInoE,GAAKqpE,EACTlB,EAAI/pF,GAAKkrF,EACTlB,EAAIpoE,GAAKupE,EACTnB,EAAIhqF,GAAKkrF,IAGE,gBAARr9F,KACPg8F,EAAIjoE,GAAK/zB,EACTg8F,EAAI7pF,GAAKnS,EACTi8F,EAAIloE,GAAK/zB,EACTi8F,EAAI9pF,GAAKnS,EACTk8F,EAAInoE,GAAK/zB,EACTk8F,EAAI/pF,GAAKnS,EACTm8F,EAAIpoE,GAAK/zB,EACTm8F,EAAIhqF,GAAKnS,GAENu9F,GAASr5D,EAAK83D,EAAKC,EAAKC,EAAKC,GAExC,QAASoB,IAASr5D,EAAKs5D,EAAMC,EAAMC,EAAMC,GAAzC,GACQn6D,GAAMu4D,GAAyB73D,EAAKs5D,EAAMC,EAAMC,EAAMC,GACtD3B,EAAMx4D,EAAIo5D,GACVX,EAAMz4D,EAAIq5D,GACVX,EAAM14D,EAAIs5D,GACVX,EAAM34D,EAAIu5D,GACVj1D,EAAO,GAAI81D,KACXC,KAAM,KACNC,OAAQ,MAsCZ,OApCAh2D,GAAKZ,OAAOhD,EAAIzqC,KAAMyqC,EAAI9jC,IAAM47F,EAAI7pF,GAChC6pF,EAAIjoE,GACJ4nE,GAAa7zD,EAAM5D,EAAIzqC,KAAOuiG,EAAIjoE,EAAGmQ,EAAI9jC,IAAM47F,EAAI7pF,GAC/C+1E,gBACAG,aACAK,QAASsT,EAAIjoE,EACb40D,QAASqT,EAAI7pF,IAGrB21B,EAAKipD,OAAO7sD,EAAIxqC,MAAQuiG,EAAIloE,EAAGmQ,EAAI9jC,KAC/B67F,EAAIloE,GACJ4nE,GAAa7zD,EAAM5D,EAAIxqC,MAAQuiG,EAAIloE,EAAGmQ,EAAI9jC,IAAM67F,EAAI9pF,GAChD+1E,eACAG,SAAU,EACVK,QAASuT,EAAIloE,EACb40D,QAASsT,EAAI9pF,IAGrB21B,EAAKipD,OAAO7sD,EAAIxqC,MAAOwqC,EAAIvqC,OAASuiG,EAAI/pF,GACpC+pF,EAAInoE,GACJ4nE,GAAa7zD,EAAM5D,EAAIxqC,MAAQwiG,EAAInoE,EAAGmQ,EAAIvqC,OAASuiG,EAAI/pF,GACnD+1E,WAAY,EACZG,SAAU,GACVK,QAASwT,EAAInoE,EACb40D,QAASuT,EAAI/pF,IAGrB21B,EAAKipD,OAAO7sD,EAAIzqC,KAAO0iG,EAAIpoE,EAAGmQ,EAAIvqC,QAC9BwiG,EAAIpoE,GACJ4nE,GAAa7zD,EAAM5D,EAAIzqC,KAAO0iG,EAAIpoE,EAAGmQ,EAAIvqC,OAASwiG,EAAIhqF,GAClD+1E,WAAY,GACZG,SAAU,IACVK,QAASyT,EAAIpoE,EACb40D,QAASwT,EAAIhqF,IAGd21B,EAAKylC,QAEhB,QAASwwB,IAAcl+D,EAAKjlC,GACxB,GAAI8C,GAAauF,WAAW48B,GAAlB90B,EACV,QAAQnQ,GACR,IAAK,uBAID,MAHI8C,GAAIhF,OAAS,IACbgF,EAAM,IAAMA,GAETA,CACX,KAAK,cACD,MAAO4kF,GAAcziD,GAAKjiC,aAC9B,KAAK,cACD,MAAO0kF,GAAcziD,GAAK7hC,aAC9B,KAAK,cACL,IAAK,cACD,MAAO47F,IAAa/5D,EAAM,EAC9B,KAAK,cACL,IAAK,cACD,MAAO+5D,IAAa/5D,EAAM,GAAG7hC,aACjC,SACI,MAAON,IAGf,QAASsgG,IAAyBnlG,EAASo8D,GACvC,QAASgpC,GAAejuF,EAAMpV,EAAOsjG,GACjC,MAAKA,IAGLA,EAAYA,EAAUjmG,QAAQ,uBAAwB,MAC/CogG,GAAeroF,GAAM8D,IAAI,SAAU+rB,GACtC,MAAOk+D,IAAcl+D,EAAKjlC,KAC3B5C,KAAKkmG,IALGH,GAAc3F,GAAWpoF,IAAS,EAAGpV,GAHxD,GAWqBiX,GADbnO,EAAIk0F,GAAc3iC,EAAS,QAC3Bn1D,IAmBJ,OAlBA4D,GAAE01B,QAAQ,SAAU75B,GAChB,GAAIikC,IACA3xB,EAAI,uBAAuB1B,KAAK5Q,IAChCO,EAAO8I,KAAKiJ,EAAE,GAAG5Z,QAAQ,oBAAqB,SAAU8Z,EAAG6iE,GACvD,MAAO7pE,QAAOg4E,aAAa5vE,SAASyhE,EAAG,SAEpC/iE,EAAI,2BAA2B1B,KAAK5Q,KAC3CikC,EAAMo0D,GAAc/lF,EAAE,IACtB/R,EAAO8I,KAAKq1F,EAAez6D,EAAI,GAAIA,EAAI,OAChC3xB,EAAI,4BAA4B1B,KAAK5Q,KAC5CikC,EAAMo0D,GAAc/lF,EAAE,IACtB/R,EAAO8I,KAAKq1F,EAAez6D,EAAI,GAAIA,EAAI,GAAIA,EAAI,MAE/C1jC,EAAO8I,MADAiJ,EAAI,wBAAwB1B,KAAK5Q,IAC5B1G,EAAQiK,aAAa+O,EAAE,KAAO,GAE9BtS,KAGbO,EAAO9H,KAAK,IAEvB,QAASmmG,IAAWvjG,GAApB,GAIQkF,GACKlE,CAJT,IAAIhB,EAAM6d,QACN,MAAO7d,GAAM6d,OAGjB,KADI3Y,KACKlE,EAAI,EAAGA,EAAIhB,EAAMlC,SAAUkD,EAChCkE,EAAO8I,KAAKhO,EAAMgB,GAAK,KAAO+C,GAAiB/D,EAAOA,EAAMgB,IAEhE,OAAOkE,GAAO9H,KAAK,OAEvB,QAASomG,IAA0BvlG,EAASi8C,GAMxC,QAASupD,GAAOC,EAAMC,GAAtB,GAIYC,GAHJ5jG,EAAQ2D,GAAiB1F,EAASylG,EACtC1F,IAAeh+F,GACXA,EAAMq6D,SAA4B,UAAjBr6D,EAAMq6D,SAAwC,QAAjBr6D,EAAMq6D,SAAoC,OAAfr6D,EAAMb,QAC3EykG,EAAO3lG,EAAQ0jE,cAAc/jD,cAAcimF,IAC/CD,EAAK5jG,MAAM6d,QAAU0lF,GAAWvjG,GAChC4jG,EAAK1rE,YAAckrE,GAAyBnlG,EAAS+B,EAAMq6D,SAC3Dp8D,EAAQ24D,aAAagtC,EAAMD,GAC3BG,EAAK91F,KAAK41F,IAdtB,GAKQE,GAcAC,CAlBJ,OAAI9lG,GAAQqsB,SAAWu5E,OACnBG,IAAe/lG,EAASi8C,IAGxB4pD,KAYJL,EAAO,UAAWxlG,EAAQq4C,YAC1BmtD,EAAO,SAAU,MACbM,EAAY9lG,EAAQkG,UACxBlG,EAAQkG,WAAa,kCACrB6/F,GAAe/lG,EAASi8C,GACxBj8C,EAAQkG,UAAY4/F,MACpBD,GAAKtlE,QAAQ,SAAU75B,GACnB1G,EAAQigB,YAAYvZ,MAG5B,QAASq/F,IAAe/lG,EAASi8C,GAkF7B,QAAS+pD,GAAYC,GAArB,GAEYjnF,GAEIknF,EACAC,EAIAC,EACAC,EACAC,CAVZ,IAAI,QAAQnkG,KAAKnC,EAAQqsB,WACjBrN,EAAQ46E,GAAS56E,MACjBA,GAA6D,YAApDlZ,GAAiBkZ,EAAMjd,MAAO,oBAAkC,CAGzE,GAFImkG,EAAkBrE,GAAU7iF,EAAMjd,MAAO,QAAQb,MACjDilG,EAAiBtE,GAAU7iF,EAAMjd,MAAO,OAAOb,MAC3B,IAApBglG,GAA4C,IAAnBC,EACzB,MAAOF,EAKX,IAHIG,EAAWpnF,EAAMhf,QAAQ0rF,wBACzB2a,EAAYrnF,EAAMhf,QAAQo+C,KAAK,GAAGL,MAAM,GACxCuoD,EAAeD,EAAU3a,wBACzB4a,EAAa/+F,KAAO6+F,EAAS7+F,KAAO++F,EAAa1lG,MAAQwlG,EAASxlG,KAClE,MAAOu4F,IAAQ8M,GAAOhrF,IAAI,SAAUowB,GAChC,OACIzqC,KAAMyqC,EAAIzqC,KAAOslG,EACjB3+F,IAAK8jC,EAAI9jC,IAAM4+F,EACftlG,MAAOwqC,EAAIxqC,MAAQqlG,EACnBplG,OAAQuqC,EAAIvqC,OAASqlG,EACrBhlG,OAAQkqC,EAAIlqC,OACZD,MAAOmqC,EAAInqC,SAM/B,MAAO+kG,GAEX,QAASM,GAASrqB,EAAO3vD,EAAKi6E,EAAMC,EAAOC,EAAQC,EAAIC,EAAI7R,GAmCvD,QAAS8R,GAAgBH,EAAQrgB,EAAG0O,GAApC,GACQxF,GAAQ1oF,KAAKsuF,GAAK,EAAIuR,GAAUA,EAASF,GACzCM,GACA5rE,EAAGmrD,EAAEnrD,EAAIwrE,EACTptF,EAAG+sE,EAAE/sE,EAAIktF,GAETv3D,EAAO,GAAI81D,KACXC,MAAQ9oB,MAAOA,GACf+oB,OAAQ,OACT52D,OAAO,EAAG,EACbsrD,IAAa1qD,EAAM8lD,GACnB+N,GAAa7zD,EAAM,EAAGo3C,EAAE/sE,GACpB+1E,eACAG,UAAWgT,GAAiBjT,GAC5BM,QAASxJ,EAAEnrD,EACX40D,QAASzJ,EAAE/sE,IAEXwtF,EAAG5rE,EAAI,GAAK4rE,EAAGxtF,EAAI,GACnB21B,EAAKipD,OAAO4O,EAAG5rE,EAAIr0B,KAAKsnF,IAAIoB,GAAQlJ,EAAE/sE,EAAIwtF,EAAGxtF,EAAIzS,KAAKunF,IAAImB,IAC1DuT,GAAa7zD,EAAM,EAAGo3C,EAAE/sE,GACpB+1E,YAAamT,GAAiBjT,GAC9BC,aACAK,QAASiX,EAAG5rE,EACZ40D,QAASgX,EAAGxtF,EACZytF,eAAe,KAEZD,EAAG5rE,EAAI,EACd+T,EAAKipD,OAAO4O,EAAG5rE,EAAGsrE,GAAMtO,OAAO,EAAGsO,GAElCv3D,EAAKipD,OAAO4O,EAAG5rE,EAAGsrE,GAAMtO,OAAO4O,EAAG5rE,EAAG,GAEzC/W,EAAK4nB,OAAOkD,EAAKylC,SAjErB,KAAI8xB,GAAQ,GAAZ,CAGA,GAAIv3D,GAAM9qB,EAAO,GAAIszE,GACrBkC,IAAax1E,EAAM4wE,GACnB94C,EAAMlQ,OAAO5nB,GACb89E,GAAe0E,GACf1E,GAAe2E,GACf33D,EAAO,GAAI81D,KACPC,MAAQ9oB,MAAOA,GACf+oB,OAAQ,OAEZ9gF,EAAK4nB,OAAOkD,GACZA,EAAKZ,OAAOs4D,EAAGzrE,EAAIr0B,KAAKlG,IAAIgmG,EAAGzrE,EAAGurE,GAAS,EAAG,GAAGvO,OAAO3rE,GAAOq6E,EAAG1rE,EAAIr0B,KAAKlG,IAAIimG,EAAG1rE,EAAGwrE,GAAU,GAAI,GAAGxO,OAAO3rE,EAAM1lB,KAAKlG,IAAIimG,EAAG1rE,EAAGwrE,GAASF,GAAMtO,OAAOrxF,KAAKlG,IAAIgmG,EAAGzrE,EAAGurE,GAAQD,GAAM9xB,QACjLiyB,EAAGzrE,GACH2rE,EAAgBJ,EAAOE,MAEnB,EACA,EACA,EACAA,EAAGzrE,EACH,IAGJ0rE,EAAG1rE,GACH2rE,EAAgBH,EAAQE,GACpB,EACA,EACA,EACA,EACAr6E,EAAMq6E,EAAG1rE,EACT,KAqCZ,QAAS8rE,GAAe37D,GAAxB,GAgBY4D,GAOClsC,EAtBLkkG,EAAa,GAAIxP,GAsBrB,KArBAmL,GAAYqE,EAAYvC,GAASr5D,EAAKs5D,EAAMC,EAAMC,EAAMC,IACxD7oD,EAAMlQ,OAAOk7D,GACU,KAAnBjnG,EAAQqsB,SAAkBrsB,EAAQwL,OAAS,OAAOrJ,KAAKnC,EAAQiK,aAAa,WACvE2vF,GAASM,aAAgBp+E,GAAQ9b,EAAS45F,GAASM,eACpD+M,EAAWC,UACP97E,IAAKprB,EAAQwL,KACbjE,IAAK8jC,EAAI9jC,IACT1G,MAAOwqC,EAAIxqC,MACXC,OAAQuqC,EAAIvqC,OACZF,KAAMyqC,EAAIzqC,QAIlBumG,IACIl4D,EAAO,GAAI81D,KACXC,MAAQ9oB,MAAOirB,EAAgBhhB,aAC/B8e,OAAQ,OAEZh2D,EAAKZ,OAAOhD,EAAIzqC,KAAMyqC,EAAI9jC,KAAK2wF,OAAO7sD,EAAIxqC,MAAOwqC,EAAI9jC,KAAK2wF,OAAO7sD,EAAIxqC,MAAOwqC,EAAIvqC,QAAQo3F,OAAO7sD,EAAIzqC,KAAMyqC,EAAIvqC,QAAQ4zE,QACrHuyB,EAAWl7D,OAAOkD,IAEblsC,EAAIqkG,EAAgBvnG,SAAUkD,GAAK,GACxCskG,EAAkBJ,EAAY57D,EAAK+7D,EAAgBrkG,GAAIukG,EAAiBvkG,EAAIukG,EAAiBznG,QAAS0nG,EAAmBxkG,EAAIwkG,EAAmB1nG,QAAS2nG,EAAiBzkG,EAAIykG,EAAiB3nG,QAAS4nG,EAAe1kG,EAAI0kG,EAAe5nG,SAGlP,QAASwnG,GAAkBprD,EAAO5Q,EAAK47D,EAAYK,EAAkBC,EAAoBC,EAAkBC,GAmBvG,QAASC,GAAoBzrD,EAAO5Q,EAAKs8D,EAAWC,EAAYC,GAyE5D,QAASC,KACL,KAAOphC,EAAK17B,OAAO9P,EAAImQ,EAAIzqC,MACvB8lE,EAAK17B,OAAO9P,GAAKysE,EAGzB,QAASI,KACL,KAAOrhC,EAAK17B,OAAO1xB,EAAI+xB,EAAI9jC,KACvBm/D,EAAK17B,OAAO1xB,GAAKsuF,EAGzB,QAASI,KACL,KAAOthC,EAAK17B,OAAO9P,EAAImQ,EAAIxqC,OACvBgnG,EAAS5rD,EAAOyqB,EAAKtiE,SACrBsiE,EAAK17B,OAAO9P,GAAKysE,EAtF7B,GAC+ClpG,GAkB/BuH,EAeRkxE,EAgCAxQ,EAqCI17B,EAtGJi9D,EAAeN,EAAYC,EAC3BM,EAAS78D,CAiCb,QAhCwB,eAApBm8D,GACAU,EAAS58D,GAAS48D,EAAQ,iBAAkBloG,GAC5CkoG,EAAS58D,GAAS48D,EAAQ,YAAaloG,IACZ,eAApBwnG,IACPU,EAAS58D,GAAS48D,EAAQ,iBAAkBloG,IAE3C,yBAAyBmC,KAAKslG,KACT,WAAlBA,GACAhpG,EAAIoI,KAAKoT,IAAIiuF,EAAOhnG,MAAQymG,EAAWO,EAAO/mG,OAASymG,GACvDD,GAAalpG,EACbmpG,GAAcnpG,GACW,SAAlBgpG,GACPhpG,EAAIoI,KAAKlG,IAAIunG,EAAOhnG,MAAQymG,EAAWO,EAAO/mG,OAASymG,GACvDD,GAAalpG,EACbmpG,GAAcnpG,IAEVuH,EAAOyhG,EAAevoG,MAAM,QAE5ByoG,EADA,KAAKxlG,KAAK6D,EAAK,IACHkiG,EAAOhnG,MAAQkJ,WAAWpE,EAAK,IAAM,IAErCoE,WAAWpE,EAAK,IAG5B4hG,EADe,GAAf5hG,EAAKnG,QAA0B,QAAXmG,EAAK,GACZ2hG,EAAYM,EAClB,KAAK9lG,KAAK6D,EAAK,IACTkiG,EAAO/mG,OAASiJ,WAAWpE,EAAK,IAAM,IAEtCoE,WAAWpE,EAAK,MAIrCkxE,EAAaqwB,EAAPr1F,IAEV,IAAK,SACDglE,EAAM,UACN,MACJ,KAAK,MACDA,EAAM,OACN,MACJ,KAAK,OACDA,EAAM,OACN,MACJ,KAAK,QACDA,EAAM,UACN,MACJ,KAAK,SACDA,EAAM,UAwCV,GArCAA,EAAMA,EAAIh4E,MAAM,OACE,GAAdg4E,EAAIr3E,SACJq3E,EAAI,GAAK,OAGTA,EAAI,GADJ,KAAK/0E,KAAK+0E,EAAI,IACL9sE,WAAW8sE,EAAI,IAAM,KAAOgxB,EAAOhnG,MAAQymG,GAE3Cv9F,WAAW8sE,EAAI,IAGxBA,EAAI,GADJ,KAAK/0E,KAAK+0E,EAAI,IACL9sE,WAAW8sE,EAAI,IAAM,KAAOgxB,EAAO/mG,OAASymG,GAE5Cx9F,WAAW8sE,EAAI,IAExBxQ,EAAO,GAAIusB,KACXiV,EAAOtnG,KAAOs2E,EAAI,GAClBgxB,EAAO3gG,IAAM2vE,EAAI,KAEjBywB,EACAC,IAkBoB,aAApBN,EACAO,EAAS5rD,EAAOyqB,OACb,IAAwB,YAApB4gC,EACPQ,IACAE,QACG,IAAwB,YAApBV,EAEP,IADAS,IACOrhC,EAAK17B,OAAO1xB,EAAI+xB,EAAIvqC,QACvB+mG,EAAS5rD,EAAOyqB,EAAKtiE,SACrBsiE,EAAK17B,OAAO1xB,GAAKsuF,MAElB,IAAwB,UAApBN,EAIP,IAHAQ,IACAC,IACI/8D,EAAS07B,EAAK17B,OAAO5mC,QAClBsiE,EAAK17B,OAAO1xB,EAAI+xB,EAAIvqC,QACvB4lE,EAAK17B,OAAO9P,EAAI8P,EAAO9P,EACvB8sE,IACAthC,EAAK17B,OAAO1xB,GAAKsuF,EA7H7B,GAAKX,GAA4B,QAAdA,EAGnB,GAAuB,OAAnBA,EAAW9/F,KAAe,CAC1B,GAAI,2BAA2BhF,KAAK8kG,EAAW77E,KAC3C,MAEJ,IAAIg1E,GAAMI,GAAYyG,EAAW77E,IAC7Bg1E,IAAOA,EAAIl/F,MAAQ,GAAKk/F,EAAIj/F,OAAS,GACrCumG,EAAoBzrD,EAAO5Q,EAAK+0D,EAAIl/F,MAAOk/F,EAAIj/F,OAAQ,SAAU86C,EAAOyqB,GACpEzqB,EAAMlQ,OAAO,GAAIo8D,IAAQlB,EAAW77E,IAAKs7C,UAG9C,CAAA,GAAuB,UAAnBugC,EAAW9/F,KAGlB,MAFAugG,GAAoBzrD,EAAO5Q,EAAKA,EAAInqC,MAAOmqC,EAAIlqC,OAAQinG,GAAiBnB,KAoHhF,QAASoB,KAML,QAASC,GAAY7pG,GACjBsjG,GAAU/hG,EAAS,WACfA,EAAQ+B,MAAM6nC,SAAW,UACzB,IAAI2+D,GAASvoG,EAAQ0jE,cAAc/jD,cAAcimF,GACjD2C,GAAOxmG,MAAM6nC,SAAW,WACxB2+D,EAAOxmG,MAAMK,UAAY,aACA,WAArBomG,GACAD,EAAOxmG,MAAMb,MAAQ,MACrBqnG,EAAOxmG,MAAMnB,KAAO,SACpB2nG,EAAOxmG,MAAM0mG,UAAY,SAEzBF,EAAOxmG,MAAMnB,KAAO,MAExBnC,EAAE8pG,GACFvoG,EAAQ24D,aAAa4vC,EAAQvoG,EAAQq4C,YACrC+hD,GAAcmO,EAAQtsD,GACtBj8C,EAAQigB,YAAYsoF,KAG5B,QAASG,GAAajqG,GAAtB,GAMasE,GALL8H,EAAI7K,EAAQymB,WAAW7jB,SACvB8O,EAAI1R,EAAQiK,aAAa,oBAC7B,IAAS,MAALyH,EACA,MAAOjT,GAAM,EAAJiT,EAAO7G,EAAEhL,OAEtB,KAASkD,EAAI,EAAGA,EAAI8H,EAAEhL,SAAUkD,EAC5B,GAAI8H,EAAE9H,KAAO/C,EACT,MAAOvB,GAAEsE,EAAG8H,EAAEhL,QAjC9B,GAKQ2oG,GAJAG,EAAgB7iG,GAAiB/D,EAAO,kBAC5C,IAAqB,QAAjB4mG,EAmCJ,OAhCIH,EAAoB1iG,GAAiB/D,EAAO,uBAgCxC4mG,GACR,IAAK,SACL,IAAK,OACL,IAAK,SACDL,EAAY,SAAUC,GAClBA,EAAOxmG,MAAM6mG,SAAW,MACxBL,EAAOxmG,MAAM8mG,WAAa,OAC1BN,EAAOxmG,MAAM07F,aAAe,QAC5B8K,EAAOxmG,MAAM+mG,WAAa,eAC1BP,EAAO1oF,WACHkpF,KAAQ,IACRC,OAAU,IACVC,OAAU,KACZN,IAEN,MACJ,KAAK,UACL,IAAK,uBACDL,EAAY,SAAUC,GAClBG,EAAa,SAAU9iG,KACjBA,EACmB,wBAAjB+iG,GAA2C/iG,EAAM,KACjDA,EAAM,IAAMA,GAEhB2iG,EAAO1oF,UAAYja,EAAM,OAGjC,MACJ,KAAK,cACL,IAAK,cACD0iG,EAAY,SAAUC,GAClBG,EAAa,SAAU9iG,GACnBA,EAAM6jF,EAAc7jF,EAAM,GACL,eAAjB+iG,IACA/iG,EAAMA,EAAIT,eAEdojG,EAAO1oF,UAAYja,EAAM,OAGjC,MACJ,KAAK,cACL,IAAK,cACL,IAAK,cACL,IAAK,cACD0iG,EAAY,SAAUC,GAClBG,EAAa,SAAU9iG,GACnBA,EAAMm7F,GAAan7F,GACf,UAAUzD,KAAKwmG,KACf/iG,EAAMA,EAAIT,eAEdojG,EAAO1oF,UAAYja,EAAM,SAMzC,QAASsjG,GAAW79D,EAAKowD,EAAS0N,GAkF9B,QAASC,GAAIrtB,GACT,OACI7gD,EAAG6gD,EAAEziE,EACLA,EAAGyiE,EAAE7gD,GArFjB,GAKQmuE,GACAC,EAQYr6D,EA+CZtE,EACAw4D,EACAC,EACAC,EACAC,CAhEJ,IAAkB,IAAdj4D,EAAInqC,OAA8B,IAAfmqC,EAAIlqC,SAG3B6lG,EAAe37D,GACXg+D,EAAiBzoG,EAAKM,MAAQ,IAAMu6F,GAAkB,OAAPvkE,GAAgBiyE,GAAiB,OAAPjyE,GACzEoyE,EAAkBzoG,EAAMK,MAAQ,IAAMioG,GAAiB,OAAPjyE,GAAgBukE,GAAkB,OAAPvkE,GAC7D,IAAd3vB,EAAIrG,OAA8B,IAAfN,EAAKM,OAA+B,IAAhBL,EAAMK,OAAgC,IAAjBJ,EAAOI,OAAvE,CAGA,GAAIqG,EAAI20E,OAASr7E,EAAMq7E,OAAS30E,EAAI20E,OAASp7E,EAAOo7E,OAAS30E,EAAI20E,OAASt7E,EAAKs7E,OACvE30E,EAAIrG,OAASL,EAAMK,OAASqG,EAAIrG,OAASJ,EAAOI,OAASqG,EAAIrG,OAASN,EAAKM,OACvEmoG,GAAkBC,EAQlB,MAPAj+D,GAAMC,GAASD,EAAK9jC,EAAIrG,MAAQ,GAC5B+tC,EAAOk1D,GAAgBnkG,EAASqrC,EAAK9jC,EAAIrG,MAAQ,GACrD+tC,EAAK5mC,QAAQ48F,QACT/oB,MAAO30E,EAAI20E,MACXh7E,MAAOqG,EAAIrG,WAEf+6C,GAAMlQ,OAAOkD,EAKzB,IAAe,IAAX01D,EAAKzpE,GAAsB,IAAX0pE,EAAK1pE,GAAsB,IAAX2pE,EAAK3pE,GAAsB,IAAX4pE,EAAK5pE,GACjD3zB,EAAIrG,MAAQ,GAAKN,EAAKM,MAAQ,GAAKL,EAAMK,MAAQ,GAAKJ,EAAOI,MAAQ,EAiCrE,MAhCIqG,GAAIrG,MAAQ,GACZ+6C,EAAMlQ,OAAO,GAAIg5D,KACbE,QACI/jG,MAAOqG,EAAIrG,MACXg7E,MAAO30E,EAAI20E,SAEhB7tC,OAAOhD,EAAIzqC,KAAMyqC,EAAI9jC,IAAMA,EAAIrG,MAAQ,GAAGg3F,OAAO7sD,EAAIxqC,MAAOwqC,EAAI9jC,IAAMA,EAAIrG,MAAQ,IAErFJ,EAAOI,MAAQ,GACf+6C,EAAMlQ,OAAO,GAAIg5D,KACbE,QACI/jG,MAAOJ,EAAOI,MACdg7E,MAAOp7E,EAAOo7E,SAEnB7tC,OAAOhD,EAAIzqC,KAAMyqC,EAAIvqC,OAASA,EAAOI,MAAQ,GAAGg3F,OAAO7sD,EAAIxqC,MAAOwqC,EAAIvqC,OAASA,EAAOI,MAAQ,IAEjGmoG,GACAptD,EAAMlQ,OAAO,GAAIg5D,KACbE,QACI/jG,MAAON,EAAKM,MACZg7E,MAAOt7E,EAAKs7E,SAEjB7tC,OAAOhD,EAAIzqC,KAAOA,EAAKM,MAAQ,EAAGmqC,EAAI9jC,KAAK2wF,OAAO7sD,EAAIzqC,KAAOA,EAAKM,MAAQ,EAAGmqC,EAAIvqC,cAEpFwoG,GACArtD,EAAMlQ,OAAO,GAAIg5D,KACbE,QACI/jG,MAAOL,EAAMK,MACbg7E,MAAOr7E,EAAMq7E,SAElB7tC,OAAOhD,EAAIxqC,MAAQA,EAAMK,MAAQ,EAAGmqC,EAAI9jC,KAAK2wF,OAAO7sD,EAAIxqC,MAAQA,EAAMK,MAAQ,EAAGmqC,EAAIvqC,SAKhG6pC,GAAMu4D,GAAyB73D,EAAKs5D,EAAMC,EAAMC,EAAMC,GACtD3B,EAAMx4D,EAAIo5D,GACVX,EAAMz4D,EAAIq5D,GACVX,EAAM14D,EAAIs5D,GACVX,EAAM34D,EAAIu5D,GACdqC,EAASh/F,EAAI20E,MAAO7wC,EAAInqC,MAAOqG,EAAIrG,MAAON,EAAKM,MAAOL,EAAMK,MAAOiiG,EAAKC,GACpE,EACA,EACA,EACA,EACA/3D,EAAIzqC,KACJyqC,EAAI9jC,MAERg/F,EAASzlG,EAAOo7E,MAAO7wC,EAAInqC,MAAOJ,EAAOI,MAAOL,EAAMK,MAAON,EAAKM,MAAOmiG,EAAKC,MAE1E,EACA,KAEAj4D,EAAIxqC,MACJwqC,EAAIvqC,SAQRylG,EAAS3lG,EAAKs7E,MAAO7wC,EAAIlqC,OAAQP,EAAKM,MAAOJ,EAAOI,MAAOqG,EAAIrG,MAAOkoG,EAAI9F,GAAM8F,EAAIjG,IAChF,KAEA,EACA,EACA93D,EAAIzqC,KACJyqC,EAAIvqC,SAERylG,EAAS1lG,EAAMq7E,MAAO7wC,EAAIlqC,OAAQN,EAAMK,MAAOqG,EAAIrG,MAAOJ,EAAOI,MAAOkoG,EAAIhG,GAAMgG,EAAI/F,IAClF,EACA,KAEA,EACAh4D,EAAIxqC,MACJwqC,EAAI9jC,OAphBhB,GAaQ6/F,GACAE,EACAC,EACAC,EACAC,EAIA8B,EAkBAtD,EAAOljG,EAAGg7C,EACVz2B,EAvCAvlB,EAAQ2D,GAAiB1F,GACzBuH,EAAMs6F,GAAU9/F,EAAO,OACvBlB,EAAQghG,GAAU9/F,EAAO,SACzBjB,EAAS+gG,GAAU9/F,EAAO,UAC1BnB,EAAOihG,GAAU9/F,EAAO,QACxB4iG,EAAO3C,GAAgBjgG,EAAO,YAC9B6iG,EAAO5C,GAAgBjgG,EAAO,aAC9B+iG,EAAO9C,GAAgBjgG,EAAO,eAC9B8iG,EAAO7C,GAAgBjgG,EAAO,gBAC9Bm1B,EAAMpxB,GAAiB/D,EAAO,aAC9BolG,EAAkBrhG,GAAiB/D,EAAO,mBA8B9C,IA7BAolG,EAAkBjH,GAAaiH,GAC3BC,EAAkBzG,GAAqB76F,GAAiB/D,EAAO,qBAC/DulG,EAAmBvI,GAAcj5F,GAAiB/D,EAAO,sBACzDwlG,EAAqBxI,GAAcj5F,GAAiB/D,EAAO,wBAC3DylG,EAAmBzI,GAAcj5F,GAAiB/D,EAAO,sBACzD0lG,EAAiB1I,GAAcj5F,GAAiB/D,EAAO,oBACvDP,GAAQgB,MAAQhB,GAAQkB,QAAU,KAClC6kG,EAAqBxI,GAAc/+F,EAAQ+F,aAAawhG,qBAExDgC,EAAWj+D,GAAStrC,EAAQ0rF,wBAAyB,iBAAkB1rF,GAC1E,WAAA,GAIW6K,GACAtD,EACA1G,EACAC,EACAF,EACA+pC,EACAk4D,EATJ/2D,EAAOhmC,GAAiB/D,EAAO,QAC/BiX,EAAI,uBAAuB1B,KAAKw0B,EAChC9yB,KACInO,EAAImO,EAAE,GAAG9Z,MAAM,UACfqI,EAAc,QAARsD,EAAE,GAAe0+F,EAAShiG,IAAM6C,WAAWS,EAAE,IAAM0+F,EAAShiG,IAClE1G,EAAgB,QAARgK,EAAE,GAAe0+F,EAAS1oG,MAAQuJ,WAAWS,EAAE,IAAM0+F,EAAS3oG,KACtEE,EAAiB,QAAR+J,EAAE,GAAe0+F,EAASzoG,OAASsJ,WAAWS,EAAE,IAAM0+F,EAAShiG,IACxE3G,EAAe,QAARiK,EAAE,GAAe0+F,EAAS3oG,KAAOwJ,WAAWS,EAAE,IAAM0+F,EAAS3oG,KACpE+pC,EAAM,GAAI8sD,IACVoL,GAAW,GAAIkC,KAAO12D,OAAOztC,EAAM2G,GAAK2wF,OAAOr3F,EAAO0G,GAAK2wF,OAAOr3F,EAAOC,GAAQo3F,OAAOt3F,EAAME,GAAQ4zE,QAC1GkuB,GAAYj4D,EAAKk4D,GACjB5mD,EAAMlQ,OAAOpB,GACbsR,EAAQtR,EACRy2D,GAAcyB,OAIlBv7E,EAAUxhB,GAAiB/D,EAAO,WACvB,aAAXulB,EAEA,IADA2+E,KACKljG,EAAI,EAAGg7C,EAAQ/9C,EAAQ4C,SAAUG,EAAIg7C,EAAMl+C,SAAUkD,EACtDkjG,EAAMl2F,KAAKguC,EAAMh7C,GAAG2oF,6BAGxBua,GAAQjmG,EAAQwpG,iBACI,GAAhBvD,EAAMpmG,SACNomG,GAASjmG,EAAQ0rF,yBAIzB,KADAua,EAAQD,EAAYC,GACfljG,EAAI,EAAGA,EAAIkjG,EAAMpmG,SAAUkD,EAC5BmmG,EAAWjD,EAAMljG,GAAU,IAANA,EAASA,GAAKkjG,EAAMpmG,OAAS,EA2BtD,OAzBIomG,GAAMpmG,OAAS,GAAgB,aAAXynB,IAA2BtnB,EAAQiK,aAAa,oBACpEo+F,EAAWpC,EAAM,IAEpB,WACG,QAASwD,KAAT,GACQ5G,GAAWsB,GAAgBnkG,EAASupG,EAAU,WAC9C5+D,EAAM,GAAI8sD,GACdmL,IAAYj4D,EAAKk4D,GACjB5mD,EAAMlQ,OAAOpB,GACbsR,EAAQtR,EACRy2D,GAAcyB,GAEd6G,GAAY1pG,GACZypG,IACO,wBAAwBtnG,KAAK2D,GAAiB/D,EAAO,aAC5D0nG,IACO,wBAAwBtnG,KAAK2D,GAAiB/D,EAAO,eAC5D0nG,IACO,wBAAwBtnG,KAAK2D,GAAiB/D,EAAO,gBAC5D0nG,OAGHE,GAAkB3pG,EAASi8C,IAC5B2tD,GAAe5pG,EAASi8C,GAErBA,EAucX,QAASmsD,IAAiB5P,GACtB,MAAO,UAAUv8C,EAAOyqB,GAAjB,GAIK6oB,GAsCAsa,EACAC,EACA1b,EAA6BD,EAC7B5hE,EACA2O,EACA5hB,EAKAywF,EAAelpG,EACf43F,EA8BAvhF,EAIAtX,EAtFJsB,EAAQwlE,EAAKxlE,QAASC,EAASulE,EAAKvlE,QACxC,QAAQq3F,EAASrxF,MACjB,IAAK,SAED,OADIooF,EAA0B,MAAlBiJ,EAASjJ,MAAgBiJ,EAASjJ,MAAQ1oF,KAAKsuF,GACnDqD,EAAStjE,IACjB,IAAK,MACDq6D,EAAQ,CACR,MACJ,KAAK,OACDA,GAAS1oF,KAAKsuF,GAAK,CACnB,MACJ,KAAK,SACD5F,EAAQ1oF,KAAKsuF,EACb,MACJ,KAAK,QACD5F,EAAQ1oF,KAAKsuF,GAAK,CAClB,MACJ,KAAK,WACL,IAAK,WACD5F,GAAS1oF,KAAKo7B,MAAM9gC,EAAQD,EAC5B,MACJ,KAAK,YACL,IAAK,YACDquF,EAAQ1oF,KAAKo7B,MAAM9gC,EAAQD,EAC3B,MACJ,KAAK,cACL,IAAK,cACDquF,EAAQ1oF,KAAKsuF,GAAKtuF,KAAKo7B,MAAM9gC,EAAQD,EACrC,MACJ,KAAK,eACL,IAAK,eACDquF,EAAQ1oF,KAAKsuF,GAAKtuF,KAAKo7B,MAAM9gC,EAAQD,GAGrCs3F,EAASjwF,UACTgnF,GAAS1oF,KAAKsuF,IAElB5F,GAAS,EAAI1oF,KAAKsuF,GACd5F,EAAQ,IACRA,GAAS,EAAI1oF,KAAKsuF,IAElB0U,EAAQhjG,KAAKC,IAAI5F,EAAQ2F,KAAKunF,IAAImB,IAAU1oF,KAAKC,IAAI3F,EAAS0F,KAAKsnF,IAAIoB,IACvEua,EAAcjjG,KAAKmjG,KAAK9oG,EAAQ2F,KAAKs+E,IAAIoK,GAASpuF,GAClDitF,EAAMvnF,KAAKunF,IAAI0b,GAAc3b,EAAMtnF,KAAKsnF,IAAI2b,GAC5Cv9E,EAAM1lB,KAAKC,IAAIsnF,GAAOvnF,KAAKC,IAAIqnF,GAC/BjzD,EAAI3O,EAAM,EAAI6hE,EACd90E,EAAIiT,EAAM,EAAI4hE,EACdoB,EAAQ1oF,KAAKsuF,GAAK,GAAK5F,GAAS,EAAI1oF,KAAKsuF,GAAK,IAC9Cj6D,GAAKA,EACL5hB,GAAKA,GAELywF,KAAelpG,EAAQ,EACvB43F,EAAQD,EAASC,MAAMx9E,IAAI,SAAU/B,EAAGnW,GAAb,GAWvBglB,GAVA1gB,EAAS6R,EAAE1B,OA2Bf,OA1BInQ,GACAA,EAAS+C,WAAW/C,GAAU,IACvB6R,EAAErZ,OACTwH,EAAS+C,WAAW8O,EAAErZ,QAAUgqG,EACnB,IAAN9mG,EACPsE,EAAS,EACFtE,GAAKy1F,EAASC,MAAM54F,OAAS,IACpCwH,EAAS,GAET0gB,GACAm0D,MAAOhjE,EAAEgjE,MAAMiK,YACf9+E,OAAQA,GAEE,MAAVA,GACAxG,EAAQwG,EACR0iG,EAASxpE,QAAQ,SAAUrnB,EAAGnW,GAC1B,GAAIglB,GAAO7O,EAAE6O,IACbA,GAAK1gB,OAAS6R,EAAEtY,MAAQC,EAAQqY,EAAEtY,OAASmC,EAAI,IAAMgnG,EAASlqG,OAAS,KAE3EkqG,MAEAA,EAASh6F,MACLnP,KAAMC,EACNknB,KAAMA,IAGPA,IAEP7Q,GACA,GAAMgkB,EACN,GAAM5hB,GAEN1Z,GACA,GAAMs7B,EACN,GAAM5hB,GAEV2iC,EAAMlQ,OAAOg5D,GAAKkF,SAASvjC,GAAMu+B,OAAO,MAAMD,KAAK,GAAIkF,KACnDhzF,MAAOA,EACPtX,IAAKA,EACL64F,MAAOA,EACP0R,WAAW,KAEf,MACJ,KAAK,SACGvrG,OAAO8tB,SAAW9tB,OAAO8tB,QAAQE,KACjChuB,OAAO8tB,QAAQE,IAAI,6DAMnC,QAAS+8E,IAAkB3pG,EAASi8C,GAApC,GAEYhxC,GAEIm/F,EASAC,EAEAlY,CAdZ,IAAIvzF,OAAOuB,OAASvB,OAAOuB,MAAM2sB,QAAU9sB,EAAQiK,aAAarL,OAAOuB,MAAMgL,KAAK,WAC1EF,EAASrM,OAAOuB,MAAMuvB,eAAe9wB,OAAOuB,MAAM2sB,OAAO9sB,IACzDiL,IAAWA,EAAOq/F,iBAAmBr/F,EAAOs/F,eAO5C,SAJIH,EADAn/F,EAAOq/F,gBACEr/F,EAAOq/F,kBAEPr/F,EAAOs/F,kBAKhBF,EAAU,GAAI5S,IAClB4S,EAAQznG,SAASmN,KAAKq6F,GAClBjY,EAAOnyF,EAAQ0rF,wBACnB2e,EAAQzoE,UAAUA,IAAYoD,UAAUmtD,EAAKvxF,KAAMuxF,EAAK5qF,MACxD00C,EAAMlQ,OAAOs+D,IACN,GAInB,QAASG,IAAYxqG,EAASorB,EAAK6wB,GAAnC,GACQ5Q,GAAM62D,GAAcliG,GACpB0mE,EAAO,GAAIusB,KACX5nD,EAAIzqC,KACJyqC,EAAI9jC,MAEJ8jC,EAAInqC,MACJmqC,EAAIlqC,SAEJ83F,EAAQ,GAAIkP,IAAQ/8E,EAAKs7C,EAC7Bk8B,IAAY3J,EAAOkL,GAAgBnkG,EAASqrC,EAAK,YACjD4Q,EAAMlQ,OAAOktD,GAEjB,QAASwR,IAAW5/F,EAAGC,GAAvB,GACQ4/F,GAAKhlG,GAAiBmF,GACtB8/F,EAAKjlG,GAAiBoF,GACtB8/F,EAAKxgG,WAAWtE,GAAiB4kG,EAAI,YACrCG,EAAKzgG,WAAWtE,GAAiB6kG,EAAI,YACrCG,EAAKhlG,GAAiB4kG,EAAI,YAC1BlG,EAAK1+F,GAAiB6kG,EAAI,WAC9B,OAAIjtF,OAAMktF,IAAOltF,MAAMmtF,GACf,kBAAkB1oG,KAAK2oG,IAAO,kBAAkB3oG,KAAKqiG,GAC9C,EAED,UAANsG,KAGM,UAANtG,EACO,EAEJ,EAEP9mF,MAAMktF,GACQ,IAAPC,EAAW,EAAIA,EAAK,KAAS,EAEpCntF,MAAMmtF,GACQ,IAAPD,EAAW,EAAIA,EAAK,EAAI,KAE5BxgG,WAAWwgG,GAAMxgG,WAAWygG,GAEvC,QAASnB,IAAY1pG,GACjB,MAAO,+BAA+BmC,KAAKnC,EAAQqsB,SAEvD,QAAS0+E,IAAkB/qG,GACvB,MAAIA,GAAQgrG,iBAAmBhrG,EAAQgrG,gBAAgBnrG,OAAS,EACrDG,EAAQgrG,gBAAgB,GAE5BhrG,EAAQqI,QAAQrI,EAAQ64D,eAEnC,QAASoyC,IAAejrG,EAASi8C,GAAjC,GACQl6C,GAAQ2D,GAAiB1F,GACzBk8E,EAAQp2E,GAAiB/D,EAAO,SAChCspC,EAAMrrC,EAAQ0rF,uBACE,aAAhB1rF,EAAQmH,MACR80C,EAAMlQ,OAAOg5D,GAAKkF,SAAS,GAAIhX,KAC3B5nD,EAAIzqC,KAAO,EACXyqC,EAAI9jC,IAAM,IAEV8jC,EAAInqC,MAAQ,EACZmqC,EAAIlqC,OAAS,KACb8jG,OAAO/oB,EAAO,IACdl8E,EAAQ44D,SACR3c,EAAMlQ,QAAO,GAAIg5D,KAAOE,OAAO/oB,EAAO,KAAK7tC,OAAOhD,EAAIzqC,KAAO,IAAOyqC,EAAInqC,MAAOmqC,EAAI9jC,IAAM,IAAO8jC,EAAIlqC,QAAQ+2F,OAAO7sD,EAAIzqC,KAAO,IAAOyqC,EAAInqC,MAAOmqC,EAAI9jC,IAAM,IAAO8jC,EAAIlqC,QAAQ+2F,OAAO7sD,EAAIzqC,KAAO,IAAOyqC,EAAInqC,MAAOmqC,EAAI9jC,IAAM,IAAO8jC,EAAInqC,UAG1O+6C,EAAMlQ,OAAO,GAAIm/D,IAAO,GAAIC,MACvB9/D,EAAIzqC,KAAOyqC,EAAIxqC,OAAS,GACxBwqC,EAAI9jC,IAAM8jC,EAAIvqC,QAAU,GAC1B+F,KAAKoT,IAAIoxB,EAAInqC,MAAQ,EAAGmqC,EAAIlqC,OAAS,GAAK,IAAI8jG,OAAO/oB,EAAO,IAC3Dl8E,EAAQ44D,SACR3c,EAAMlQ,OAAO,GAAIm/D,IAAO,GAAIC,MACvB9/D,EAAIzqC,KAAOyqC,EAAIxqC,OAAS,GACxBwqC,EAAI9jC,IAAM8jC,EAAIvqC,QAAU,GAC1B+F,KAAKoT,IAAIoxB,EAAInqC,MAAQ,EAAGmqC,EAAIlqC,OAAS,GAAK,IAAI6jG,KAAK9oB,GAAO+oB,OAAO,QAIhF,QAASmG,IAAgBprG,EAASi8C,GAAlC,GAKQ8/B,GACAugB,EACA51F,EACAqD,EAUahH,EAjBbs4F,EAAMr7F,EAAQqsB,QAAQtnB,aAC1B,IAAW,SAAPs2F,IAAmC,YAAhBr7F,EAAQmH,MAAsC,SAAhBnH,EAAQmH,MACzD,MAAO8jG,IAAejrG,EAASi8C,EAanC,IAXI8/B,EAAI/7E,EAAQymB,WACZ61E,EAAMt8F,EAAQ0jE,cACdh9D,EAAK41F,EAAI38E,cAAcimF,IAE3Bl/F,EAAG3E,MAAM6d,QAAU0lF,GAAW5/F,GAAiB1F,IACpC,SAAPq7F,IACA30F,EAAG3E,MAAMspG,WAAa,OAEf,UAAPhQ,GAA0B,YAAPA,IACnB30F,EAAG3E,MAAMqE,SAAW,QAEb,UAAPi1F,EACA,GAAIr7F,EAAQ0pC,SACR,IAAS3mC,EAAI,EAAGA,EAAI/C,EAAQqI,QAAQxI,SAAUkD,EAC1CgH,EAASuyF,EAAI38E,cAAcimF,IAC3B77F,EAAOhI,MAAM6d,QAAU0lF,GAAW5/F,GAAiB1F,EAAQqI,QAAQtF,KACnEgH,EAAOhI,MAAMulB,QAAU,QACvBvd,EAAOkwB,YAAcj6B,EAAQqI,QAAQtF,GAAGk3B,YACxCvzB,EAAGqZ,YAAYhW,OAGnBA,GAASghG,GAAkB/qG,GACvB+J,IACArD,EAAGuzB,YAAclwB,EAAOkwB,iBAIhCvzB,GAAGuzB,YAAcj6B,EAAQ6F,KAE7Bk2E,GAAEpjB,aAAajyD,EAAI1G,GACnB0G,EAAGL,WAAarG,EAAQqG,WACxBK,EAAGkB,UAAY5H,EAAQ4H,UACvB5H,EAAQ+B,MAAMulB,QAAU,OACxBsiF,GAAeljG,EAAIu1C,GACnBj8C,EAAQ+B,MAAMulB,QAAU,GACxBy0D,EAAE97D,YAAYvZ,GAElB,QAASkjG,IAAe5pG,EAASi8C,GAAjC,GAoBYr5C,GAAe0oG,EAAalkG,EACvBrE,EAQGhB,EACAwpG,EACA3hE,CA3BhB,QAHIgwD,GAASK,iBAAiBj6F,UAAYA,IACtC45F,GAASK,iBAAiBh+C,MAAQA,GAE9Bj8C,EAAQqsB,QAAQtnB,eACxB,IAAK,MACDylG,GAAYxqG,EAASA,EAAQ+6E,IAAK9+B,EAClC,MACJ,KAAK,SACD,IACIuuD,GAAYxqG,EAASA,EAAQwrG,UAAU,aAAcvvD,GACvD,MAAO0iD,IAET,KACJ,KAAK,WACL,IAAK,QACL,IAAK,SACDyM,GAAgBprG,EAASi8C,EACzB,MACJ,SAEI,IADIr5C,KAAe0oG,KAAalkG,KACvBrE,EAAI/C,EAAQq4C,WAAYt1C,EAAGA,EAAIA,EAAEu1C,YACtC,OAAQv1C,EAAEosB,UACV,IAAK,GACG,KAAKhtB,KAAKY,EAAEU,OACZgoG,GAAWzrG,EAAS+C,EAAGk5C,EAE3B,MACJ,KAAK,GACGl6C,EAAQ2D,GAAiB3C,GACzBwoG,EAAWzlG,GAAiB/D,EAAO,SACnC6nC,EAAW9jC,GAAiB/D,EAAO,YACvB,UAAZ6nC,EACAxiC,EAAW2I,KAAKhN,GACG,QAAZwoG,EACPD,EAAOv7F,KAAKhN,GAEZH,EAASmN,KAAKhN,GAK1BkoF,EAAUroF,EAAU6nG,IAAYlqE,QAAQ,SAAU75B,GAC9C0zF,GAAc1zF,EAAIu1C,KAEtBgvC,EAAUqgB,EAAQb,IAAYlqE,QAAQ,SAAU75B,GAC5C0zF,GAAc1zF,EAAIu1C,KAEtBgvC,EAAU7jF,EAAYqjG,IAAYlqE,QAAQ,SAAU75B,GAChD0zF,GAAc1zF,EAAIu1C,MAI9B,QAASwvD,IAAWzrG,EAAS45B,EAAMqiB,GA6D/B,QAASyvD,GAA6B1lD,GAAtC,GAEY2lD,GAAqCtgE,EAMhCtoC,EACD+H,CARZ,IAAItJ,GAAQgB,MAAQhB,GAAQ8d,OAAQ,CAOhC,IANIqsF,EAAa3lD,EAAMwjD,iBAAkBn+D,GACjC9jC,IAAKqkG,EAAAA,EACL/qG,QAAQ+qG,EAAAA,GACR9qG,SAAS8qG,EAAAA,GACThrG,KAAMgrG,EAAAA;EAEL7oG,EAAI,EAAGA,EAAI4oG,EAAW9rG,SAAUkD,EACjC+H,EAAI6gG,EAAW5oG,GACf+H,EAAE5J,OAAS,GAAK4J,EAAEhK,SAAW+qG,IAGjCxgE,EAAIzqC,KAAOiG,KAAKoT,IAAInP,EAAElK,KAAMyqC,EAAIzqC,MAChCyqC,EAAI9jC,IAAMV,KAAKoT,IAAInP,EAAEvD,IAAK8jC,EAAI9jC,KAC9B8jC,EAAIxqC,MAAQgG,KAAKlG,IAAImK,EAAEjK,MAAOwqC,EAAIxqC,OAClCwqC,EAAIvqC,OAAS+F,KAAKlG,IAAImK,EAAEhK,OAAQuqC,EAAIvqC,QAIxC,OAFAuqC,GAAInqC,MAAQmqC,EAAIxqC,MAAQwqC,EAAIzqC,KAC5ByqC,EAAIlqC,OAASkqC,EAAIvqC,OAASuqC,EAAI9jC,IACvB8jC,EAEX,MAAO2a,GAAM0lC,wBAEjB,QAASogB,KAAT,GAEQzgE,GAQAmgB,EAKQ66B,EAyCRxhF,EAIIknG,EAEIC,EAUA75F,EAvER85F,EAAY/0F,EACPggE,EAAM75C,EAAK9gB,OAAOrF,GAAO+c,OAAO,KAEzC,IADA/c,GAASggE,EACLA,EAAM,GAAKhgE,GAAStX,EACpB,OAAO,CAkBX,IAhBAomD,EAAMkmD,SAAStyE,EAAM1iB,GACrB8uC,EAAMi3C,OAAOrjE,EAAM1iB,EAAQ,GAC3Bm0B,EAAMqgE,EAA6B1lD,GAC/BwF,GAAQ,GACR2gD,GAAeC,EAAc,KAC7Bl1B,EAAM75C,EAAK9gB,OAAOrF,GAAO+c,OAAO,MAC5BijD,GAAO,IACPlxB,EAAMi3C,OAAOrjE,EAAM1iB,EAAQggE,GACvBmP,EAAIqlB,EAA6B1lD,GACjCqgC,EAAEvlF,QAAUuqC,EAAIvqC,SAChBuqC,EAAMg7C,EACN76B,GAAQ,EACRt0C,GAASggE,MAIhB1rB,EAAO,CAiBR,GAhBA0rB,EAAM,QAASm1B,GAAQpyF,EAAKqyF,EAAK3rG,GAC7BqlD,EAAMi3C,OAAOrjE,EAAM0yE,EACnB,IAAIjmB,GAAIqlB,EAA6B1lD,EACrC,OAAIqgC,GAAEvlF,QAAUuqC,EAAIvqC,QAAUmZ,EAAMqyF,EACzBD,EAAQpyF,EAAKA,EAAMqyF,GAAO,EAAGA,GAC7BjmB,EAAExlF,OAASwqC,EAAIxqC,OACtBwqC,EAAMg7C,EACFimB,EAAM3rG,EACC0rG,EAAQC,EAAKA,EAAM3rG,GAAO,EAAGA,GAE7B2rG,GAGJA,GAEbp1F,EAAOrQ,KAAKoT,IAAIra,EAAKsX,EAAQq1F,GAAqB3sG,GAChDs3E,GAAOhgE,EACP,OAAO,CAIX,IAFAA,EAAQggE,EACRA,GAAMlxB,GAAAA,GAAiB/xB,OAAO,QAClB,IAARijD,EACA,OAAO,CAEPA,GAAM,IACNlxB,EAAMi3C,OAAOrjE,EAAMosB,EAAMkL,YAAcgmB,GACvC7rC,EAAMqgE,EAA6B1lD,IAO3C,GAJIxkD,GAAQgB,OACR6oC,EAAM2a,EAAMwjD,iBAAiB,IAE7B3kG,EAAMmhD,GAAAA,EACL,sBAAsB7jD,KAAKkpG,IAEzB,GAAI,KAAKlpG,KAAK0C,GAAM,CAEvB,IADIknG,EAAK,EACJ70B,EAAM+0B,EAAW/0B,EAAMlxB,EAAMkL,cAAegmB,EACzC80B,EAAO3uE,EAAK9rB,WAAW2lE,GACf,GAAR80B,EACAD,GAAM,EAAIA,EAAK,EACA,IAARC,GAAsB,IAARA,EACrBD,EAAK,EAELA,GAGR,OAAQ70B,EAAMryE,EAAIovB,OAAO,QAAU,GAC3B9hB,EAAS,WAAWoK,OAAO,EAAG,GAAKwvF,EAAK70B,GAAO,GACnDryE,EAAMA,EAAI0X,OAAO,EAAG26D,GAAO/kE,EAAStN,EAAI0X,OAAO26D,EAAM,QAfzDryE,GAAMA,EAAIzF,QAAQ,OAAQ,IAkBzBosD,KACDqgD,EAAiBxgE,EAAIvqC,QAEzB0rG,EAAS3nG,EAAKwmC,GAElB,QAASmhE,GAAS3nG,EAAKwmC,GAAvB,GAEYlqC,GACAoG,EAUJ81B,CAZA77B,IAAQgB,OAASkb,MAAMmrF,KACnB1nG,EAASsrG,GAAc3N,GACvBv3F,GAAO8jC,EAAI9jC,IAAM8jC,EAAIvqC,OAASK,GAAU,EAC5CkqC,GACI9jC,IAAKA,EACL1G,MAAOwqC,EAAIxqC,MACXC,OAAQyG,EAAMpG,EACdP,KAAMyqC,EAAIzqC,KACVO,OAAQA,EACRD,MAAOmqC,EAAIxqC,MAAQwqC,EAAIzqC,OAG3By8B,EAAO,GAAIqvE,IAAS7nG,EAAK,GAAIouF,KAC7B5nD,EAAIzqC,KACJyqC,EAAI9jC,MAEJ8jC,EAAInqC,MACJmqC,EAAIlqC,UAEJ29F,KAAMA,EACNkG,MAAQ9oB,MAAOA,KAEnBjgC,EAAMlQ,OAAO1O,GAEjB,QAASsvE,GAASthE,GAId,QAASuhE,GAAK1wB,EAAO2wB,GAArB,GAEY3rG,GACA+tC,CAFJitC,KACIh7E,EAAQ0nG,EAAW,GACnB35D,EAAO,GAAI81D,KACXE,QACI/jG,MAAOA,EACPg7E,MAAOA,KAGf2wB,GAAQ3rG,EACR+tC,EAAKZ,OAAOhD,EAAIzqC,KAAMisG,GAAM3U,OAAO7sD,EAAIxqC,MAAOgsG,GAC9C5wD,EAAMlQ,OAAOkD,IAdrB29D,EAAKE,EAAWzhE,EAAIvqC,QACpB8rG,EAAKG,EAAa1hE,EAAIvqC,OAASuqC,EAAIlqC,OAAS,KAC5CyrG,EAAKI,EAAU3hE,EAAI9jC,KAlM3B,GAIQxF,GAIAs7B,EACAnmB,EACAtX,EAIAgpG,EACAC,EACA/J,EAYA5iB,EACAl2B,EACAinD,EACAd,EACAC,EACAf,EACA6B,EAAcC,EAQdZ,EAIAV,EACAiB,EACAC,EACAC,EACAI,CAjDJ,KAAI9L,OAGAv/F,EAAQ2D,GAAiB1F,KACzBoK,WAAWtE,GAAiB/D,EAAO,wBAGnCs7B,EAAOzD,EAAKn2B,KACZyT,EAAQ,EACRtX,EAAMy9B,EAAKpJ,OAAO,UAAY,EAC7Br0B,IAGDgpG,EAAW9iG,GAAiB/D,EAAO,aACnC8mG,EAAa/iG,GAAiB/D,EAAO,eACrC+8F,GACAh5F,GAAiB/D,EAAO,cACxB+D,GAAiB/D,EAAO,gBACxB+D,GAAiB/D,EAAO,eACxB6mG,EACA9iG,GAAiB/D,EAAO,gBAC1B5C,KAAK,KACPypG,EAAWx+F,WAAWw+F,GACtBC,EAAaz+F,WAAWy+F,GACP,IAAbD,KAAJ,CA0BA,IAvBI1sB,EAAQp2E,GAAiB/D,EAAO,SAChCikD,EAAQhmD,EAAQ0jE,cAAcxmC,cAC9B+vE,EAAWnnG,GAAiB/D,EAAO,cACnCoqG,EAA0B,WAAZc,EACdb,EAActmG,GAAiB/D,EAAO,eAAgB,GACtDspG,EAAavlG,GAAiB/D,EAAO,eAErCP,GAAQgB,OACR0qG,EAAenrG,EAAMmrG,aACD,YAAhBA,IACAC,EAAmBntG,EAAQ+B,MAAMmrG,aACjCltG,EAAQ+B,MAAMmrG,aAAe,SAGjCX,EAAqBvsG,EAAQ0rF,wBAAwBxqF,MAAQ0nG,EAAW,EACjD,IAAvB2D,IACAA,EAAqB,KAErBV,EAAiB,KACjBiB,EAAYlT,GAAoB,UAChCmT,EAAcnT,GAAS,gBACvBoT,EAAWpT,GAAmB,SAC9BwT,EAAgBN,GAAaC,GAAeC,GACxClB,MAEJtqG,GAAQgB,MAAwB,YAAhB0qG,IAChBltG,EAAQ+B,MAAMmrG,aAAeC,GAE7BC,IACApnD,EAAMqnD,WAAWzzE,GACjBu/D,GAAQnzC,EAAMwjD,kBAAkBjpE,QAAQosE,KAyJhD,QAASW,IAAuBttG,EAASi8C,EAAOrQ,GAAhD,GACQ2hE,GAQA1iG,EACK9H,EAKL4nC,EAKQ3xB,EACAqtE,CAXZ,KARc,QAAVz6C,GACA2hE,EAAO3T,GAASK,iBAAiBh+C,MACjCrQ,EAASxhC,WAAWwhC,KAEpB2hE,EAAOtxD,EACPrQ,EAAS,GAET/gC,EAAI0iG,EAAK3qG,SACJG,EAAI,EAAGA,EAAI8H,EAAEhL,UACM,MAApBgL,EAAE9H,GAAGyqG,aAAuB3iG,EAAE9H,GAAGyqG,YAAc5hE,KADvB7oC,GAehC,MAVI4nC,GAAM,GAAI8sD,IACd8V,EAAKziD,OAAO/nD,EAAG4nC,GACfA,EAAI6iE,YAAc5hE,EACd2hE,IAAStxD,GACL29C,GAASC,WACL7gF,EAAI4gF,GAASE,QAAQ2T,SACrBpnB,EAAIuT,GAASC,SAASrJ,cAAcx3E,GACxC4pF,GAAYj4D,EAAKo6D,GAAKkF,SAAS5jB,KAGhC17C,EAEX,QAASyvD,IAAcp6F,EAAS4vB,GAAhC,GASQuc,GACA4jC,EACAzoD,EAIA08E,EACA/nD,EACArQ,EAhBA7pC,EAAQ2D,GAAiB1F,EAC7B+/F,IAAeh+F,GACX,sDAAsDI,KAAKnC,EAAQqsB,UAG9C,MAArButE,GAASC,WAGT1tD,EAAU/hC,WAAWtE,GAAiB/D,EAAO,YAC7CguE,EAAajqE,GAAiB/D,EAAO,cACrCulB,EAAUxhB,GAAiB/D,EAAO,WACtB,IAAZoqC,GAA+B,UAAd4jC,GAAqC,QAAXzoD,IAG3C08E,EAAKzB,GAAaxgG,GAElB6pC,EAAS9lC,GAAiB/D,EAAO,YAChCiiG,GAAM73D,EAAU,IAAgB,QAAVP,IACvBA,EAAS,GAEbqQ,EAAQqxD,GAAuBttG,EAAS4vB,EAAWgc,GAC/CO,EAAU,GACV8P,EAAM9P,QAAQA,EAAU8P,EAAM9P,WAElC60D,GAAahhG,EAAS+B,EAAOk6C,GACxB+nD,EAGDjC,GAAU/hG,EAAS,WAAA,GAMXmyF,GACAj3D,EACA5hB,EACAN,CARJ0oF,IAAuB1hG,EAAQ+B,MAAO,YAAa,OAAQ,aAC3D2/F,GAAuB1hG,EAAQ+B,MAAO,aAAc,OAAQ,aACjB,UAAvC+D,GAAiB/D,EAAO,aACxB2/F,GAAuB1hG,EAAQ+B,MAAO,WAAY,WAAY,aAE9DowF,EAAOnyF,EAAQ0rF,wBACfxwD,EAAIi3D,EAAKvxF,KAAOojG,EAAGh5D,OAAO,GAC1B1xB,EAAI64E,EAAK5qF,IAAMy8F,EAAGh5D,OAAO,GACzBhyB,GACA,EACA,EACA,EACA,GACCkiB,GACA5hB,GAELN,EAAI00F,GAAK10F,EAAGgrF,EAAGxX,QACfxzE,EAAI00F,GAAK10F,GACL,EACA,EACA,EACA,EACAkiB,EACA5hB,IAEJN,EAAI2gF,GAAa19C,EAAOjjC,GACxB4gF,GAASE,QAAUF,GAASE,QAAQ6T,aAAa30F,GACjDusF,GAA0BvlG,EAASi8C,KA9BvCspD,GAA0BvlG,EAASi8C,GAiCvCklD,OAEJ,QAASuM,IAAK7iG,EAAGC,GAAjB,GACQ61B,GAAK91B,EAAE,GAAI+iG,EAAK/iG,EAAE,GAAI47E,EAAK57E,EAAE,GAAIgjG,EAAKhjG,EAAE,GAAIijG,EAAKjjG,EAAE,GAAI8uC,EAAK9uC,EAAE,GAC9D+1B,EAAK91B,EAAE,GAAIijG,EAAKjjG,EAAE,GAAI47E,EAAK57E,EAAE,GAAIkjG,EAAKljG,EAAE,GAAImjG,EAAKnjG,EAAE,GAAI8uC,EAAK9uC,EAAE,EAClE,QACI61B,EAAKC,EAAKgtE,EAAKlnB,EACf/lD,EAAKotE,EAAKH,EAAKI,EACfvnB,EAAK7lD,EAAKitE,EAAKnnB,EACfD,EAAKsnB,EAAKF,EAAKG,EACfF,EAAKltE,EAAK+Y,EAAK+sC,EAAKunB,EACpBH,EAAKC,EAAKp0D,EAAKq0D,EAAKp0D,GAx7P/B,GAEOs0D,IACAC,GACArvG,GACAsvG,GACAhuG,GACAs7E,GACAC,GACA0yB,GAuEAv3F,GAwEAzS,GAIAwlF,GAIAG,GACA0I,GACAC,GAIA/H,GACAV,GAqLAtO,GA2BApqE,GACA88F,GAiGAvU,GA+GAhM,GA+IAwgB,GA6CAtb,GAkHAxG,GA0EA+hB,GAgIAC,GACAtD,GAiEAuD,GACAC,GAmCAC,GACAC,GA2CAC,GACA5D,GA+BAhe,GAwBA6hB,GACAC,GACAjM,GAoRAhzF,GACAikB,GACA3jB,GACA0J,GACAtL,GACAuB,GACAi/F,GAgGAC,GAsCA5d,GAgIA6d,GAqKApK,GAoKAqK,GACAC,GA4EAC,GA6EAC,GACAC,GACAC,GAmDAtH,GAmCAuH,GAgBAjY,GA6GAlP,GASA/qB,GA6IAmyC,GA+JAC,GAmBAC,GA6BAC,GAmDA5F,GAcA6F,GAqDAC,GAKA5oE,GAGA5C,GAuDAyrE,GA+BAC,GA6IAla,GAQAma,GACAha,GACA71B,GACAwS,GAQAs9B,GA6CAC,GAqCA1gG,GASA2gG,GA2HAC,GA4FAC,GACA9Y,GACA51D,GACA2uE,GAIIC,GACAC,GACAC,GAYJC,GACAnvE,GACAovE,GAwBAhxD,GAwQAixD,GA4BAC,GAoCAC,GA8BAC,GA0BAC,GAWAC,GA8EA9Z,GAoBA+Z,GAiBAC,GAwEAC,GAYAC,GAkCAC,GACAC,GACAC,GAMAC,GACAC,GA+KAC,GAMAC,GAmBAC,GAoBAC,GAiEAC,GAmDAC,GAcAC,GA4BA/a,GAmBAgb,GAyBAC,GAyFAC,GAqBAC,GACAC,GA4BAC,GAoCAC,GAgFAC,GACAC,GACAC,GACAC,GAuKAC,GAsDAla,GAmKAma,GAuGAC,GAOAC,GASAC,GASAC,GAiDAC,GAuBAC,GASAC,GAuDAhyG,GAIAokG,GACApF,GACA5G,GAEA8S,GAoCA5wF,GAoCAuhF,GA6dAsD,GA+HA5B,GAyDAC,GAcAyN,GA6vDAhjF,EA17PJ7qB,QAAOuB,MAAQvB,OAAOuB,UAClB+tG,GAAe/tG,MAAMspB,QACrB0kF,GAAmBD,GAAatyB,KAChC98E,GAAQqB,MAAMrB,MACdsvG,GAAYjuG,MAAMy7E,KAClBx7E,GAAUD,MAAMC,QAChBs7E,GAAgByyB,GAAiBzyB,cACjCC,GAAawyB,GAAiBxyB,WAC9B0yB,IACA1lG,OAAQ,SAAU+F,GAAV,GAEK8hB,GADL42D,EAASn/E,IACb,KAASuoB,IAAUvoB,MACA,WAAXuoB,IACA9hB,EAAM8hB,GAAU42D,EAAO52D,KAInCijF,UAAW,WAEP,MADAxrG,MAAKyrG,WAAazrG,KAAKyrG,gBAG3BC,YAAa,SAAU3zG,GAMnB,MALKiI,MAAKyrG,WAGNzrG,KAAKyrG,WAAW3jG,KAAK/P,GAFrBiI,KAAKyrG,YAAc1zG,GAIhBiI,MAEX2rG,eAAgB,SAAU5zG,GAAV,GACRyzG,GAAYxrG,KAAKwrG,YACjBr5F,EAAQq5F,EAAUttG,QAAQnG,EAI9B,OAHIoa,SACAq5F,EAAUpjG,OAAO+J,EAAO,GAErBnS,MAEXgI,QAAS,SAAUmtD,EAAYx8C,GAAtB,GAGQhb,GACDiuG,EAHRJ,EAAYxrG,KAAKyrG,UACrB,IAAID,IAAcxrG,KAAK6rG,WACnB,IAASluG,EAAM,EAAGA,EAAM6tG,EAAU5zG,OAAQ+F,IAClCiuG,EAAWJ,EAAU7tG,GACrBiuG,EAASz2C,IACTy2C,EAASz2C,GAAYx8C,EAIjC,OAAO3Y,OAEX8rG,cAAe,SAAU7jG,GACX,SAANA,IACAA,MAEJA,EAAElQ,QAAUiI,KACZA,KAAKgI,QAAQ,gBAAiBC,IAElCi8E,eAAgB,WACZlkF,KAAKgI,QAAQ,kBAAoBjQ,QAASiI,QAE9C+rG,QAAS,WAEL,MADA/rG,MAAK6rG,YAAc7rG,KAAK6rG,YAAc,GAAK,EACpC7rG,MAEXgsG,OAAQ,WAEJ,MADAhsG,MAAK6rG,WAAajtG,KAAKlG,KAAKsH,KAAK6rG,YAAc,GAAK,EAAG,GAChD7rG,MAEX8kF,eAAgB,SAAU/mE,EAAOngB,GACzBoC,KAAK+d,IACL/d,KAAK+d,GAAO4tF,eAAe3rG,MAE/BA,KAAK+d,GAASngB,EACdA,EAAM8tG,YAAY1rG,QAOtB6O,IACAo9F,EAAG,IACHC,GAAI,IACJC,IAAK,IACL51F,EAAG,KACH61F,GAAI,KACJC,IAAK,KACL71F,EAAG,MACH81F,GAAI,MACJC,IAAK,MACL91F,EAAG,KACH+1F,GAAI,KACJC,IAAK,KACLC,EAAG,IACHC,GAAI,IACJC,IAAK,IACLC,EAAG,KACHC,GAAI,KACJC,IAAK,KACLC,EAAG,MACHC,GAAI,MACJC,IAAK,MACLC,EAAG,OACHC,GAAI,OACJC,IAAK,OACLC,EAAG,KACHC,GAAI,KACJC,IAAK,KACLC,IAAM,KA4CNrxG,GAAY,YAIZwlF,GAAQ,EAIRG,GAAanjF,KAAKsuF,GAAK,IACvBzC,GAAUx/E,OAAOyiG,UACjBhjB,IAAWz/E,OAAOyiG,UAIlB/qB,GAAU,oEACVV,GAAeh4E,OAAOg4E,aAqLtBtO,IACA7vC,OAAQA,EACR09C,cAAeA,EACf/N,cAAeA,GACfiO,QAASA,EACTC,aAAcA,EACdE,IAAKA,EACLK,aAAcA,EACdU,iBAAkBA,EAClBC,aAAcA,EACdC,cAAeA,EACfxzD,KAAMA,EACNyzD,WAAYA,EACZC,UAAWA,EACXtP,WAAYA,GACZ0P,IAAKA,EACL3zE,MAAOA,EACP8zE,eAAgBA,EAChBC,WAAYA,EACZjQ,cAAeA,EACf9L,YAAaA,EACbmc,cAAeA,EACfI,aAAcA,EACdjC,WAAYA,GACZ0I,QAASA,GACTC,QAASA,IAETnhF,MAAcA,SACd88F,GAAexvG,GAAM6J,QACrBC,KAAM,SAAUP,EAASqY,GAAnB,GAMOsF,GACDrX,EANJy4E,EAASn/E,IACE,UAAXyY,IACAA,EAAS,IAEbzY,KAAKyY,OAASA,CACd,KAASsF,IAAS3d,GACVsG,EAAStG,EAAQ2d,GACrBrX,EAASy4E,EAAO/qB,MAAM1tD,EAAQqX,GAC9BohE,EAAOphE,GAASrX,GAGxB+c,IAAK,SAAU1F,GAGX,IAHC,GAIOhnB,GAHJ0R,EAAQsV,EAAM9mB,MAAM,KACpB+H,EAASgB,KACNyI,EAAM7Q,QAAUoH,GACfjI,EAAO0R,EAAMqJ,QACjB9S,EAASA,EAAOjI,EAEpB,OAAOiI,IAEX0kB,IAAK,SAAU3F,EAAOngB,GAClB,GAAI+N,GAAU3L,KAAKyjB,IAAI1F,EACnBpS,KAAY/N,IACZoC,KAAK05C,KAAK37B,EAAO/d,KAAKo0D,MAAMx2D,EAAOmgB,IACnC/d,KAAK8rG,eACD/tF,MAAO/d,KAAKyY,OAASsF,EACrBngB,MAAOA,MAInB87C,KAAM,SAAU37B,EAAOngB,GAAjB,GAMM6K,GACAgQ,EAII3Z,EAVRqgF,EAASn/E,KACT45C,EAAY77B,EAAM7f,QAAQ,MAAQ,EAClCyvG,EAAY3tG,KACZixC,EAAYlzB,CAChB,IAAI67B,EAAW,CAGX,IAFInxC,EAAQwoC,EAAUh6C,MAAM,KACxBwhB,EAASzY,KAAKyY,OACXhQ,EAAM7Q,OAAS,GAClBq5C,EAAYxoC,EAAMqJ,QAClB2G,GAAUw4B,EAAY,IAClBnyC,EAAM6uG,EAAU18D,GACfnyC,IACDA,EAAM,GAAIunG,OAAiB5tF,GAC3B3Z,EAAI4sG,YAAYvsB,GAChBwuB,EAAU18D,GAAanyC,GAE3B6uG,EAAY7uG,CAEhBmyC,GAAYxoC,EAAM,GAEtBklG,EAAUC,OAAO38D,GACjB08D,EAAU18D,GAAarzC,GAE3BgwG,OAAQ,SAAU7vF,GACd,GAAIpS,GAAU3L,KAAK+d,EACfpS,IAAWA,EAAQggG,gBACnBhgG,EAAQggG,eAAe3rG,OAG/Bo0D,MAAO,SAAUpb,EAAQj7B,GAAlB,GACC7e,GAAOqK,GAASpB,KAAK6wC,GACrB60D,EAAU70D,CAOd,OANgB,QAAZ60D,GAAoBnsB,EAAQmsB,IAAqB,oBAAT3uG,IAClC85C,YAAkBqtD,KAAmBrtD,YAAkBniD,MACzDg3G,EAAU,GAAIxH,IAAawH,EAAS7tG,KAAKyY,OAASsF,EAAQ,MAE9D8vF,EAAQnC,YAAY1rG,OAEjB6tG,KAGfzH,GAAe1lG,OAAO2lG,GAAat/F,WAuB/B+qF,GAASj7F,GAAM6J,QACfC,KAAM,SAAUiC,EAAGC,EAAGuG,EAAGuH,EAAG1I,EAAGzR,GACjB,SAANoM,IACAA,EAAI,GAEE,SAANC,IACAA,EAAI,GAEE,SAANuG,IACAA,EAAI,GAEE,SAANuH,IACAA,EAAI,GAEE,SAAN1I,IACAA,EAAI,GAEE,SAANzR,IACAA,EAAI,GAERwJ,KAAK4C,EAAIA,EACT5C,KAAK6C,EAAIA,EACT7C,KAAKoJ,EAAIA,EACTpJ,KAAK2Q,EAAIA,EACT3Q,KAAKiI,EAAIA,EACTjI,KAAKxJ,EAAIA,GAEbkvG,aAAc,SAAUnhB,GACpB,MAAO,IAAIuN,IAAO9xF,KAAK4C,EAAI2hF,EAAO3hF,EAAI5C,KAAKoJ,EAAIm7E,EAAO1hF,EAAG7C,KAAK6C,EAAI0hF,EAAO3hF,EAAI5C,KAAK2Q,EAAI4zE,EAAO1hF,EAAG7C,KAAK4C,EAAI2hF,EAAOn7E,EAAIpJ,KAAKoJ,EAAIm7E,EAAO5zE,EAAG3Q,KAAK6C,EAAI0hF,EAAOn7E,EAAIpJ,KAAK2Q,EAAI4zE,EAAO5zE,EAAG3Q,KAAK4C,EAAI2hF,EAAOt8E,EAAIjI,KAAKoJ,EAAIm7E,EAAO/tF,EAAIwJ,KAAKiI,EAAGjI,KAAK6C,EAAI0hF,EAAOt8E,EAAIjI,KAAK2Q,EAAI4zE,EAAO/tF,EAAIwJ,KAAKxJ,IAE/QgvG,OAAQ,WAAA,GACA5mB,GAAM5+E,KACN4C,EAAIg8E,EAAIh8E,EACRC,EAAI+7E,EAAI/7E,EACR8N,EAAIiuE,EAAIx1E,EACRnB,EAAI22E,EAAIjuE,EACR9T,EAAI+hF,EAAI32E,EACR02E,EAAIC,EAAIpoF,EACRs3G,EAAMlrG,EAAIqF,EAAIpF,EAAI8N,CACtB,OAAY,KAARm9F,EACO,KAEJ,GAAIhc,IAAO7pF,EAAI6lG,GAAMjrG,EAAIirG,GAAMn9F,EAAIm9F,EAAKlrG,EAAIkrG,GAAMn9F,EAAIguE,EAAI12E,EAAIpL,GAAKixG,GAAMjrG,EAAIhG,EAAI+F,EAAI+7E,GAAKmvB,IAErG3xG,MAAO,WACH,MAAO,IAAI21F,IAAO9xF,KAAK4C,EAAG5C,KAAK6C,EAAG7C,KAAKoJ,EAAGpJ,KAAK2Q,EAAG3Q,KAAKiI,EAAGjI,KAAKxJ,IAEnE4lD,OAAQ,SAAUmiC,GACd,QAAKA,IAGEv+E,KAAK4C,IAAM27E,EAAM37E,GAAK5C,KAAK6C,IAAM07E,EAAM17E,GAAK7C,KAAKoJ,IAAMm1E,EAAMn1E,GAAKpJ,KAAK2Q,IAAM4tE,EAAM5tE,GAAK3Q,KAAKiI,IAAMs2E,EAAMt2E,GAAKjI,KAAKxJ,IAAM+nF,EAAM/nF,IAE1IiZ,MAAO,SAAUf,GAOb,MANA1O,MAAK4C,EAAI6M,EAAMzP,KAAK4C,EAAG8L,GACvB1O,KAAK6C,EAAI4M,EAAMzP,KAAK6C,EAAG6L,GACvB1O,KAAKoJ,EAAIqG,EAAMzP,KAAKoJ,EAAGsF,GACvB1O,KAAK2Q,EAAIlB,EAAMzP,KAAK2Q,EAAGjC,GACvB1O,KAAKiI,EAAIwH,EAAMzP,KAAKiI,EAAGyG,GACvB1O,KAAKxJ,EAAIiZ,EAAMzP,KAAKxJ,EAAGkY,GAChB1O,MAEX89C,QAAS,SAAUpvC,GAAV,GAUQ5T,GATTkE,GACAgB,KAAK4C,EACL5C,KAAK6C,EACL7C,KAAKoJ,EACLpJ,KAAK2Q,EACL3Q,KAAKiI,EACLjI,KAAKxJ,EAET,IAAIkrF,EAAQhzE,GACR,IAAS5T,EAAI,EAAGA,EAAIkE,EAAOpH,OAAQkD,IAC/BkE,EAAOlE,GAAK2U,EAAMzQ,EAAOlE,GAAI4T,EAGrC,OAAO1P,IAEXuK,SAAU,SAAUmF,EAAW0uF,GAI3B,MAHkB,UAAdA,IACAA,EAAY,KAETp9F,KAAK89C,QAAQpvC,GAAWxX,KAAKkmG,MAG5CtL,GAAO/0D,UAAY,SAAU9J,EAAG5hB,GAC5B,MAAO,IAAIygF,IAAO,EAAG,EAAG,EAAG,EAAG7+D,EAAG5hB,IAErCygF,GAAOC,KAAO,WACV,MAAO,IAAID,IAAO,EAAG,EAAG,EAAG,EAAG,EAAG,IAErCA,GAAOr0D,OAAS,SAAU6pD,EAAOr0D,EAAG5hB,GAChC,GAAIkzE,GAAS,GAAIuN,GAOjB,OANAvN,GAAO3hF,EAAIhE,KAAKsnF,IAAI9C,EAAIkE,IACxB/C,EAAO1hF,EAAIjE,KAAKunF,IAAI/C,EAAIkE,IACxB/C,EAAOn7E,GAAKm7E,EAAO1hF,EACnB0hF,EAAO5zE,EAAI4zE,EAAO3hF,EAClB2hF,EAAOt8E,EAAIgrB,EAAIA,EAAIsxD,EAAO3hF,EAAIyO,EAAIkzE,EAAO1hF,GAAK,EAC9C0hF,EAAO/tF,EAAI6a,EAAIA,EAAIkzE,EAAO3hF,EAAIqwB,EAAIsxD,EAAO1hF,GAAK,EACvC0hF,GAEXuN,GAAOp1D,MAAQ,SAAUqxE,EAAQC,GAC7B,MAAO,IAAIlc,IAAOic,EAAQ,EAAG,EAAGC,EAAQ,EAAG,IAE/Clc,GAAOmc,SAAWnc,GAAOC,OAOrBjM,GAAQjvF,GAAM6J,QACdC,KAAM,SAAUsyB,EAAG5hB,GACfrR,KAAKizB,EAAIA,GAAK,EACdjzB,KAAKqR,EAAIA,GAAK,GAElB+qC,OAAQ,SAAUmiC,GACd,MAAOA,IAASA,EAAMtrD,IAAMjzB,KAAKizB,GAAKsrD,EAAMltE,IAAMrR,KAAKqR,GAE3DlV,MAAO,WACH,MAAO,IAAI2pF,IAAM9lF,KAAKizB,EAAGjzB,KAAKqR,IAElCosB,OAAQ,SAAU6pD,EAAOvkD,GACrB,GAAImrE,GAAcpoB,GAAMt3C,OAAOzL,IAAW+iD,GAAM91E,IAChD,OAAOhQ,MAAK25B,UAAUm4D,GAAOr0D,OAAO6pD,EAAO4mB,EAAYj7E,EAAGi7E,EAAY78F,KAE1E0rB,UAAW,SAAU9J,EAAG5hB,GAIpB,MAHArR,MAAKizB,GAAKA,EACVjzB,KAAKqR,GAAKA,EACVrR,KAAKkkF,iBACElkF,MAEX8tF,cAAe,SAAUzF,GACrB,MAAOroF,MAAK+8B,UAAUsrD,EAAMp1D,EAAGo1D,EAAMh3E,IAEzC0Z,KAAM,SAAUkI,EAAG5hB,GAEf,MADArR,MAAKizB,EAAIjzB,KAAKqR,EAAI,EACXrR,KAAK+8B,UAAU9J,EAAG5hB,IAE7BqrB,MAAO,SAAUqxE,EAAQC,GAOrB,MANe,UAAXA,IACAA,EAASD,GAEb/tG,KAAKizB,GAAK86E,EACV/tG,KAAKqR,GAAK28F,EACVhuG,KAAKkkF,iBACElkF,MAEX0tF,UAAW,SAAUqgB,EAAQC,GACzB,MAAOhuG,MAAK7D,QAAQugC,MAAMqxE,EAAQC,IAEtCr0E,UAAW,SAAUJ,GAAV,GACHgrD,GAASD,EAAS/qD,GAClBqlD,EAAM5+E,KACNizB,EAAI2rD,EAAI3rD,EACR5hB,EAAIutE,EAAIvtE,CAIZ,OAHArR,MAAKizB,EAAIsxD,EAAO3hF,EAAIqwB,EAAIsxD,EAAOn7E,EAAIiI,EAAIkzE,EAAOt8E,EAC9CjI,KAAKqR,EAAIkzE,EAAO1hF,EAAIowB,EAAIsxD,EAAO5zE,EAAIU,EAAIkzE,EAAO/tF,EAC9CwJ,KAAKkkF,iBACElkF,MAEXuoF,cAAe,SAAUhvD,GACrB,GAAI8uD,GAAQroF,KAAK7D,OAIjB,OAHIo9B,IACA8uD,EAAM1uD,UAAUJ,GAEb8uD,GAEX8lB,WAAY,SAAU9lB,GAAV,GACJpxB,GAAKj3D,KAAKizB,EAAIo1D,EAAMp1D,EACpBikC,EAAKl3D,KAAKqR,EAAIg3E,EAAMh3E,CACxB,OAAOzS,MAAKy4D,KAAKJ,EAAKA,EAAKC,EAAKA,IAEpCznD,MAAO,SAAU/X,GAIb,MAHAsI,MAAKizB,EAAIxjB,EAAMzP,KAAKizB,EAAGv7B,GACvBsI,KAAKqR,EAAI5B,EAAMzP,KAAKqR,EAAG3Z,GACvBsI,KAAKkkF,iBACElkF,MAEX89C,QAAS,SAAUpmD,GAAV,GACD02G,GAAU1sB,EAAQhqF,GAClBu7B,EAAIm7E,EAAU3+F,EAAMzP,KAAKizB,EAAGv7B,GAAUsI,KAAKizB,EAC3C5hB,EAAI+8F,EAAU3+F,EAAMzP,KAAKqR,EAAG3Z,GAAUsI,KAAKqR,CAC/C,QACI4hB,EACA5hB,IAGR9H,SAAU,SAAU7R,EAAQ0lG,GAAlB,GAIFxe,GACA3rD,EACA5hB,CAKJ,OAVkB,UAAd+rF,IACAA,EAAY,KAEZxe,EAAM5+E,KACNizB,EAAI2rD,EAAI3rD,EACR5hB,EAAIutE,EAAIvtE,EACRqwE,EAAQhqF,KACRu7B,EAAIxjB,EAAMwjB,EAAGv7B,GACb2Z,EAAI5B,EAAM4B,EAAG3Z,IAEVu7B,EAAImqE,EAAY/rF,KAG/By0E,GAAMt3C,OAAS,SAAU6/D,EAAMC,GAC3B,GAAI5sB,EAAQ2sB,GACR,MAAIA,aAAgBvoB,IACTuoB,EACqB,IAArBtzG,UAAUnD,QAAgC,IAAhBy2G,EAAKz2G,OAC/B,GAAIkuF,IAAMuoB,EAAK,GAAIA,EAAK,IAE5B,GAAIvoB,IAAMuoB,EAAMC,IAG/BxoB,GAAM9zE,IAAM,WAAA,GAIClX,GACDutF,EAJJkmB,EAAcxzG,UACdoiE,EAAOstB,GACPrtB,EAAOqtB,EACX,KAAS3vF,EAAI,EAAGA,EAAIC,UAAUnD,OAAQkD,IAC9ButF,EAAQkmB,EAAYzzG,GACxBqiE,EAAOv+D,KAAKoT,IAAIq2E,EAAMp1D,EAAGkqC,GACzBC,EAAOx+D,KAAKoT,IAAIq2E,EAAMh3E,EAAG+rD,EAE7B,OAAO,IAAI0oB,IAAM3oB,EAAMC,IAE3B0oB,GAAMptF,IAAM,WAAA,GAICoC,GACDutF,EAJJkmB,EAAcxzG,UACdsiE,EAAOqtB,GACPptB,EAAOotB,EACX,KAAS5vF,EAAI,EAAGA,EAAIC,UAAUnD,OAAQkD,IAC9ButF,EAAQkmB,EAAYzzG,GACxBuiE,EAAOz+D,KAAKlG,IAAI2vF,EAAMp1D,EAAGoqC,GACzBC,EAAO1+D,KAAKlG,IAAI2vF,EAAMh3E,EAAGisD,EAE7B,OAAO,IAAIwoB,IAAMzoB,EAAMC,IAE3BwoB,GAAM0oB,SAAW,WACb,MAAO,IAAI1oB,IAAM4E,GAASA,KAE9B5E,GAAM2oB,SAAW,WACb,MAAO,IAAI3oB,IAAM2E,GAASA,KAE1BzjF,OAAO0nG,kBACP1nG,OAAO0nG,iBAAiB5oB,IACpB91E,MACIyT,IAAK,WACD,MAAO,IAAIqiE,IAAM,EAAG,OAKpC1B,EAAgB0B,GAAM/+E,WAClB,IACA,MAEJq/F,GAAe1lG,OAAOolF,GAAM/+E,WACxBu/F,GAAOzvG,GAAM6J,QACbC,KAAM,SAAU1H,EAAOC,GACnB8G,KAAK/G,MAAQA,GAAS,EACtB+G,KAAK9G,OAASA,GAAU,GAE5BkjD,OAAQ,SAAUmiC,GACd,MAAOA,IAASA,EAAMtlF,QAAU+G,KAAK/G,OAASslF,EAAMrlF,SAAW8G,KAAK9G,QAExEiD,MAAO,WACH,MAAO,IAAImqG,IAAKtmG,KAAK/G,MAAO+G,KAAK9G,SAErC4kD,QAAS,SAAUpmD,GAAV,GACD02G,GAAU1sB,EAAQhqF,GAClBuB,EAAQm1G,EAAU3+F,EAAMzP,KAAK/G,MAAOvB,GAAUsI,KAAK/G,MACnDC,EAASk1G,EAAU3+F,EAAMzP,KAAK9G,OAAQxB,GAAUsI,KAAK9G,MACzD,QACID,EACAC,MAIZotG,GAAK93D,OAAS,SAAU6/D,EAAMC,GAC1B,GAAI5sB,EAAQ2sB,GACR,MAAIA,aAAgB/H,IACT+H,EACqB,IAArBtzG,UAAUnD,QAAgC,IAAhBy2G,EAAKz2G,OAC/B,GAAI0uG,IAAK+H,EAAK,GAAIA,EAAK,IAE3B,GAAI/H,IAAK+H,EAAMC,IAG1BtnG,OAAO0nG,kBACP1nG,OAAO0nG,iBAAiBpI,IACpBt2F,MACIyT,IAAK,WACD,MAAO,IAAI6iF,IAAK,EAAG,OAKnCliB,EAAgBkiB,GAAKv/F,WACjB,QACA,WAEJq/F,GAAe1lG,OAAO4lG,GAAKv/F,WACvBikF,GAAOn0F,GAAM6J,QACbC,KAAM,SAAUoiC,EAAQhlC,GACL,SAAXglC,IACAA,EAAS,GAAI+iD,KAEJ,SAAT/nF,IACAA,EAAO,GAAIuoG,KAEftmG,KAAK2uG,UAAU5rE,GACf/iC,KAAK6lB,QAAQ9nB,IAEjB5B,MAAO,WACH,MAAO,IAAI6uF,IAAKhrF,KAAK+iC,OAAO5mC,QAAS6D,KAAKjC,KAAK5B,UAEnDigD,OAAQ,SAAUmiC,GACd,MAAOA,IAASA,EAAMx7C,OAAOqZ,OAAOp8C,KAAK+iC,SAAWw7C,EAAMxgF,KAAKq+C,OAAOp8C,KAAKjC,OAE/E4wG,UAAW,SAAU/wG,GAGjB,MAFAoC,MAAK8kF,eAAe,SAAUgB,GAAMt3C,OAAO5wC,IAC3CoC,KAAKkkF,iBACElkF,MAEXuvF,UAAW,WACP,MAAOvvF,MAAK+iC,QAEhBld,QAAS,SAAUjoB,GAGf,MAFAoC,MAAK8kF,eAAe,OAAQwhB,GAAK93D,OAAO5wC,IACxCoC,KAAKkkF,iBACElkF,MAEXwlB,QAAS,WACL,MAAOxlB,MAAKjC,MAEhB9E,MAAO,WACH,MAAO+G,MAAKjC,KAAK9E,OAErBC,OAAQ,WACJ,MAAO8G,MAAKjC,KAAK7E,QAErB01G,QAAS,WACL,MAAO5uG,MAAK+iC,OAAO5mC,SAEvBkuF,YAAa,WACT,MAAOrqF,MAAK+iC,OAAO5mC,QAAQ4gC,UAAU/8B,KAAK/G,QAAS+G,KAAK9G,WAE5D21G,SAAU,WACN,MAAO7uG,MAAK+iC,OAAO5mC,QAAQ4gC,UAAU/8B,KAAK/G,QAAS,IAEvD61G,WAAY,WACR,MAAO9uG,MAAK+iC,OAAO5mC,QAAQ4gC,UAAU,EAAG/8B,KAAK9G,WAEjDi+D,OAAQ,WACJ,MAAOn3D,MAAK+iC,OAAO5mC,QAAQ4gC,UAAU/8B,KAAK/G,QAAU,EAAG+G,KAAK9G,SAAW,IAE3EgxF,KAAM,SAAU3F,GAAV,GACEuX,GAAK97F,KAAK4uG,UAAUrmB,cAAchE,GAClCwX,EAAK/7F,KAAK6uG,WAAWtmB,cAAchE,GACnCyX,EAAKh8F,KAAKqqF,cAAc9B,cAAchE,GACtC0X,EAAKj8F,KAAK8uG,aAAavmB,cAAchE,EACzC,OAAOyG,IAAK+jB,WAAWjT,EAAIC,EAAIC,EAAIC,IAEvC1T,cAAe,SAAUx3E,GACrB,MAAOi6E,IAAK+jB,WAAW/uG,KAAK4uG,UAAUj1E,UAAU5oB,GAAI/Q,KAAKqqF,cAAc1wD,UAAU5oB,KAErFi+F,OAAQ,SAAU/7E,EAAG5hB,GAOjB,MANU,UAANA,IACAA,EAAI4hB,GAERjzB,KAAKjC,KAAK9E,OAAS,EAAIg6B,EACvBjzB,KAAKjC,KAAK7E,QAAU,EAAImY,EACxBrR,KAAK+iC,OAAOhG,WAAW9J,GAAI5hB,GACpBrR,MAEXivG,WAAY,SAAUh8E,EAAG5hB,GACrB,MAAOrR,MAAK7D,QAAQ6yG,OAAO/7E,EAAG5hB,IAElC69F,cAAe,SAAU7mB,GAAV,GACPtlD,GAAS/iC,KAAK+iC,OACdsnD,EAAcrqF,KAAKqqF,aACvB,SAAShC,EAAMp1D,EAAI8P,EAAO9P,GAAKo1D,EAAMh3E,EAAI0xB,EAAO1xB,GAAKg5E,EAAYp3D,EAAIo1D,EAAMp1D,GAAKo3D,EAAYh5E,EAAIg3E,EAAMh3E,IAE1G89F,UAAW,SAAU9mB,EAAOpvF,GAAjB,GACHm2G,GAAYpvG,KAAKivG,WAAWh2G,EAAOA,GACnCo2G,EAAYrvG,KAAKivG,YAAYh2G,GAAQA,EACzC,OAAOm2G,GAAUF,cAAc7mB,KAAWgnB,EAAUH,cAAc7mB,MAG1E2C,GAAK+jB,WAAa,WAAA,GACVH,GAAU9oB,GAAM9zE,IAAIlL,MAAM,KAAM/L,WAChCsvF,EAAcvE,GAAMptF,IAAIoO,MAAM,KAAM/L,WACpCgD,EAAO,GAAIuoG,IAAKjc,EAAYp3D,EAAI27E,EAAQ37E,EAAGo3D,EAAYh5E,EAAIu9F,EAAQv9F,EACvE,OAAO,IAAI25E,IAAK4jB,EAAS7wG,IAE7BitF,GAAKC,MAAQ,SAAUroF,EAAGC,GACtB,MAAOmoF,IAAK+jB,WAAWjpB,GAAM9zE,IAAIpP,EAAEgsG,UAAW/rG,EAAE+rG,WAAY9oB,GAAMptF,IAAIkK,EAAEynF,cAAexnF,EAAEwnF,iBAE7FW,GAAKoO,UAAY,SAAUx2F,EAAGC,GAAb,GACTysG,IACA32G,KAAMiK,EAAEgsG,UAAU37E,EAClB3zB,IAAKsD,EAAEgsG,UAAUv9F,EACjBzY,MAAOgK,EAAEynF,cAAcp3D,EACvBp6B,OAAQ+J,EAAEynF,cAAch5E,GAExBk+F,GACA52G,KAAMkK,EAAE+rG,UAAU37E,EAClB3zB,IAAKuD,EAAE+rG,UAAUv9F,EACjBzY,MAAOiK,EAAEwnF,cAAcp3D,EACvBp6B,OAAQgK,EAAEwnF,cAAch5E,EAE5B,IAAIi+F,EAAM32G,MAAQ42G,EAAM32G,OAAS22G,EAAM52G,MAAQ22G,EAAM12G,OAAS02G,EAAMhwG,KAAOiwG,EAAM12G,QAAU02G,EAAMjwG,KAAOgwG,EAAMz2G,OAC1G,MAAOmyF,IAAK+jB,WAAW,GAAIjpB,IAAMlnF,KAAKlG,IAAI42G,EAAM32G,KAAM42G,EAAM52G,MAAOiG,KAAKlG,IAAI42G,EAAMhwG,IAAKiwG,EAAMjwG,MAAO,GAAIwmF,IAAMlnF,KAAKoT,IAAIs9F,EAAM12G,MAAO22G,EAAM32G,OAAQgG,KAAKoT,IAAIs9F,EAAMz2G,OAAQ02G,EAAM12G,WAGvLutG,GAAe1lG,OAAOsqF,GAAKjkF,WACvBy9E,GAAiB3tF,GAAM6J,QACvBC,KAAM,SAAU4jF,GACG,SAAXA,IACAA,EAASuN,GAAOC,QAEpB/xF,KAAK6xF,QAAUtN,GAEnBpoF,MAAO,WACH,MAAO,IAAIqoF,IAAexkF,KAAK6xF,QAAQ11F,UAE3CigD,OAAQ,SAAUmiC,GACd,MAAOA,IAASA,EAAMsT,QAAQz1C,OAAOp8C,KAAK6xF,UAE9C90D,UAAW,SAAU9J,EAAG5hB,GAGpB,MAFArR,MAAK6xF,QAAU7xF,KAAK6xF,QAAQ6T,aAAa5T,GAAO/0D,UAAU9J,EAAG5hB,IAC7DrR,KAAKwvG,iBACExvG,MAEX08B,MAAO,SAAUqxE,EAAQC,EAAQjrE,GACd,SAAXirE,IACAA,EAASD,GAEE,SAAXhrE,IACAA,EAAS,KAEb,IAAImrE,GAAcnrE,CAUlB,OATImrE,KACAA,EAAcpoB,GAAMt3C,OAAO0/D,GAC3BluG,KAAK6xF,QAAU7xF,KAAK6xF,QAAQ6T,aAAa5T,GAAO/0D,UAAUmxE,EAAYj7E,EAAGi7E,EAAY78F,KAEzFrR,KAAK6xF,QAAU7xF,KAAK6xF,QAAQ6T,aAAa5T,GAAOp1D,MAAMqxE,EAAQC,IAC1DE,IACAluG,KAAK6xF,QAAU7xF,KAAK6xF,QAAQ6T,aAAa5T,GAAO/0D,WAAWmxE,EAAYj7E,GAAIi7E,EAAY78F,KAE3FrR,KAAKwvG,iBACExvG,MAEXy9B,OAAQ,SAAU6pD,EAAOvkD,GACrB,GAAImrE,GAAcpoB,GAAMt3C,OAAOzL,IAAW+iD,GAAM91E,IAGhD,OAFAhQ,MAAK6xF,QAAU7xF,KAAK6xF,QAAQ6T,aAAa5T,GAAOr0D,OAAO6pD,EAAO4mB,EAAYj7E,EAAGi7E,EAAY78F,IACzFrR,KAAKwvG,iBACExvG,MAEXypF,SAAU,SAAUlwD,GAChB,GAAIgrD,GAASD,EAAS/qD,EAGtB,OAFAv5B,MAAK6xF,QAAU7xF,KAAK6xF,QAAQ6T,aAAanhB,GACzCvkF,KAAKwvG,iBACExvG,MAEXukF,OAAQ,SAAU3mF,GACd,MAAIA,IACAoC,KAAK6xF,QAAUj0F,EACfoC,KAAKwvG,iBACExvG,MAEJA,KAAK6xF,SAEhB2d,eAAgB,WACZxvG,KAAK8rG,eACD/tF,MAAO,YACPngB,MAAOoC,UAInBomG,GAAe1lG,OAAO8jF,GAAez9E,WAUjCw/F,GAAY1vG,GAAM6J,QAClBC,KAAM,SAAUP,GACZJ,KAAKiH,aAAa7G,IAEtB6G,aAAc,SAAU7G,GAAV,GAINyjC,GACAipD,CAJY,UAAZ1sF,IACAA,MAEAyjC,EAAOzjC,EAAQyjC,KACfipD,EAAe1sF,EAAQu5B,UACvBmzD,IACA1sF,EAAQu5B,UAAYA,EAAUmzD,IAE9BjpD,IAASA,EAAKhgB,KACdggB,EAAKhgB,GAAK89D,KAEd3hF,KAAKI,QAAU,GAAIimG,IAAajmG,GAChCJ,KAAKI,QAAQsrG,YAAY1rG,OAE7B25B,UAAW,SAAU/7B,GACjB,MAAI8jF,GAAQ9jF,OACRoC,MAAKI,QAAQsjB,IAAI,YAAaiW,EAAU/7B,IAEjCoC,KAAKI,QAAQqjB,IAAI,cAGhCgsF,gBAAiB,WAGb,IAHa,GAETC,GAGIn2E,EAJJxhC,EAAUiI,KAEPjI,EAAQ6B,QACX7B,EAAUA,EAAQ6B,OACd2/B,EAAiBxhC,EAAQ4hC,YACzBJ,IACAm2E,EAAen2E,EAAegrD,SAASmhB,aAAagK,GAAgB5d,GAAOC,QAGnF,IAAI2d,EACA,MAAO/1E,GAAU+1E,IAGzBC,iBAAkB,SAAUF,GAAV,GAIVG,GACAC,EACAH,EACAI,CAMJ,IAZwB,SAApBL,IACAA,EAAkBzvG,KAAKyvG,mBAEvBG,EAAmB5vG,KAAK25B,YACxBk2E,EAAgBvrB,EAASsrB,GACzBF,EAAeprB,EAASmrB,GAGxBK,EADAD,GAAiBH,EACAA,EAAahK,aAAamK,GAE1BA,GAAiBH,EAGlC,MAAO/1E,GAAUm2E,IAGzBtsG,QAAS,SAAU5F,GACf,MAAI8jF,GAAQ9jF,IACRoC,KAAKI,QAAQsjB,IAAI,UAAW9lB,GACrBoC,MAEJA,KAAKI,QAAQqjB,IAAI,cAAe,GAE3CogB,KAAM,SAAUjmC,GACZ,GAAIwC,GAAUJ,KAAKI,OACnB,OAAIshF,GAAQ9jF,IACJA,IAAUA,EAAMimB,KAChBjmB,EAAMimB,GAAK89D,KAEfvhF,EAAQsjB,IAAI,OAAQ9lB,GACboC,MAEJI,EAAQqjB,IAAI,SAEvBygB,QAAS,SAAUtmC,GACf,MAAI8jF,GAAQ9jF,IACRoC,KAAKI,QAAQsjB,IAAI,UAAW9lB,GACrBoC,MAEJujF,EAAevjF,KAAKI,QAAQqjB,IAAI,WAAY,IAEvD0nE,YAAa,SAAU5xD,GAAV,GAGDsK,GAFJqmD,EAAOlqF,KAAK+vG,aAAax2E,EAC7B,IAAI2wD,EAEA,MADIrmD,GAAO7jC,KAAK6jC,OACTA,EAAOmnD,GAAKoO,UAAUlP,EAAMrmD,EAAKqmD,KAAK3wD,IAAmB2wD,GAGxEglB,cAAe,SAAU7mB,EAAOonB,GAAjB,GAEH3iB,GACAkjB,CAFR,SAAIhwG,KAAKwD,YACDspF,EAAe9sF,KAAK2vG,iBAAiBF,GACrCO,EAAmB3nB,EACnByE,IACAkjB,EAAmB3nB,EAAME,cAAcuE,EAAavI,SAASihB,WAE1DxlG,KAAKiwG,YAAcjwG,KAAKkwG,eAAeF,IAAqBhwG,KAAKmvG,WAAanvG,KAAKmwG,cAAgBnwG,KAAKmvG,UAAUa,KAIjIC,SAAU,WACN,GAAIlT,GAAO/8F,KAAKI,QAAQ28F,IACxB,OAAOA,KAASja,EAAcia,EAAK9oB,QAEvCk8B,WAAY,WACR,GAAInT,GAASh9F,KAAKI,QAAQ48F,MAC1B,OAAOA,IAAUA,EAAO/jG,MAAQ,IAAM6pF,EAAcka,EAAO/oB,QAE/D87B,aAAc,SAAUx2E,GACpB,MAAOv5B,MAAKkqF,KAAK3wD,MAGzBgtE,GAAUx/F,UAAUmgB,SAAW,UAC/Bk/E,GAAe1lG,OAAO6lG,GAAUx/F,WAe5By/F,GAAW5nG,KAAKsuF,GAAK,EACrBgW,GAAWrsG,GAAM6J,QACjBC,KAAM,SAAUw2D,EAAQ9+D,GACL,SAAX8+D,IACAA,EAAS,GAAI2uB,KAEF,SAAXztF,IACAA,EAAS,GAEb2H,KAAKowG,UAAUj5C,GACfn3D,KAAKqwG,UAAUh4G,IAEnB+3G,UAAW,SAAUxyG,GAGjB,MAFAoC,MAAK8kF,eAAe,SAAUgB,GAAMt3C,OAAO5wC,IAC3CoC,KAAKkkF,iBACElkF,MAEXswG,UAAW,WACP,MAAOtwG,MAAKm3D,QAEhB/a,OAAQ,SAAUmiC,GACd,MAAOA,IAASA,EAAMpnB,OAAO/a,OAAOp8C,KAAKm3D,SAAWonB,EAAMlmF,SAAW2H,KAAK3H,QAE9E8D,MAAO,WACH,MAAO,IAAI+mG,IAASljG,KAAKm3D,OAAOh7D,QAAS6D,KAAK3H,SAElDk4G,QAAS,SAAUjpB,GACf,MAAOtnF,MAAKwwG,SAASptB,EAAIkE,KAE7B4C,KAAM,SAAU3F,GAAV,GAKOzpF,GACD21G,EACAC,EACAC,EAPJxxB,EAASn/E,KACT4wG,EAAgBnsB,EAAqBzkF,KAAKm3D,OAAQn3D,KAAK3H,OAAQ2H,KAAK3H,OAAQksF,GAC5EiqB,EAAW1oB,GAAM2oB,WACjBA,EAAW3oB,GAAM0oB,UACrB,KAAS1zG,EAAI,EAAGA,EAAI,EAAGA,IACf21G,EAAgBtxB,EAAOqxB,SAASI,EAAc39E,EAAIn4B,EAAI0rG,IAAUje,cAAchE,GAC9EmsB,EAAgBvxB,EAAOqxB,SAASI,EAAcv/F,EAAIvW,EAAI0rG,IAAUje,cAAchE,GAC9EosB,EAAe,GAAI7qB,IAAM2qB,EAAcx9E,EAAGy9E,EAAcr/F,GAC5Dm9F,EAAW1oB,GAAM9zE,IAAIw8F,EAAUmC,GAC/BlC,EAAW3oB,GAAMptF,IAAI+1G,EAAUkC,EAEnC,OAAO3lB,IAAK+jB,WAAWP,EAAUC,IAErC+B,SAAU,SAAUlpB,GAAV,GACF1I,GAAM5+E,KACNm3D,EAASynB,EAAIznB,OACb9+D,EAASumF,EAAIvmF,MACjB,OAAO,IAAIytF,IAAM3uB,EAAOlkC,EAAI56B,EAASuG,KAAKsnF,IAAIoB,GAAQnwB,EAAO9lD,EAAIhZ,EAASuG,KAAKunF,IAAImB,KAEvF4nB,cAAe,SAAU7mB,GAAV,GACPzJ,GAAM5+E,KACNm3D,EAASynB,EAAIznB,OACb9+D,EAASumF,EAAIvmF,OACbw4G,EAAWjyG,KAAK8nC,IAAI2hD,EAAMp1D,EAAIkkC,EAAOlkC,EAAG,GAAKr0B,KAAK8nC,IAAI2hD,EAAMh3E,EAAI8lD,EAAO9lD,EAAG,IAAMzS,KAAK8nC,IAAIruC,EAAQ,EACrG,OAAOw4G,IAEX1B,UAAW,SAAU9mB,EAAOpvF,GAAjB,GACH2lF,GAAM5+E,KACNm3D,EAASynB,EAAIznB,OACb9+D,EAASumF,EAAIvmF,OACby4G,EAAgB35C,EAAOg3C,WAAW9lB,EACtC,OAAOhwF,GAASY,GAAS63G,GAAiBA,GAAiBz4G,EAASY,KAG5EmrF,EAAgB8e,GAASn8F,WAAY,WACrCq/F,GAAe1lG,OAAOwiG,GAASn8F,WAC3B0/F,GAAW,WACXC,IACAhmG,OAAQ,SAAU+F,GACdA,EAAMs2F,KAAO/8F,KAAK+8F,KAClBt2F,EAAMu2F,OAASh9F,KAAKg9F,QAExBD,KAAM,SAAU9oB,EAAO/vC,GAAjB,GAIU6sE,GAHR3wG,EAAUJ,KAAKI,OACnB,OAAIshF,GAAQzN,IACJA,GAASA,EAAM/sD,WAAau/E,IACxBsK,GAAY98B,MAAOA,GACnByN,EAAQx9C,KACR6sE,EAAQ7sE,QAAUA,GAEtB9jC,EAAQsjB,IAAI,OAAQqtF,IAEpB3wG,EAAQsjB,IAAI,OAAQuwD,GAEjBj0E,MAEJI,EAAQqjB,IAAI,SAEvBu5E,OAAQ,SAAU/oB,EAAOh7E,EAAOirC,GAC5B,MAAIw9C,GAAQzN,IACRj0E,KAAKI,QAAQsjB,IAAI,eAAgBuwD,GAC7ByN,EAAQzoF,IACR+G,KAAKI,QAAQsjB,IAAI,eAAgBzqB,GAEjCyoF,EAAQx9C,IACRlkC,KAAKI,QAAQsjB,IAAI,iBAAkBwgB,GAEhClkC,MAEJA,KAAKI,QAAQqjB,IAAI,YAG5BkjF,GAAuB7U,GAAAA,GAAOmc,SAC9BrH,IACAlmG,OAAQ,SAAU+F,GACdA,EAAMyjF,KAAOlqF,KAAKkqF,KAClBzjF,EAAMy9E,eAAiBlkF,KAAKkkF,gBAEhCgG,KAAM,SAAU3wD,GAAV,GAGE2wD,GAQA8mB,EAVAlB,EAAiBxrB,EAAStkF,KAAK2vG,iBAAiBp2E,IAChD03E,EAAanB,EAAiBA,GAAAA,EAA4BnJ,EAa9D,OAXI3mG,MAAKkxG,YAAclxG,KAAKmxG,cAAgBF,EACxC/mB,EAAOlqF,KAAKkxG,WAAW/0G,SAEvB+tF,EAAOlqF,KAAKoxG,MAAMtB,GAClB9vG,KAAKkxG,WAAahnB,EAAOA,EAAK/tF,QAAU,KACxC6D,KAAKmxG,YAAcF,GAEnBD,EAAchxG,KAAKI,QAAQqjB,IAAI,gBAC/ButF,GAAe9mB,GACfA,EAAK8kB,OAAOgC,EAAc,GAEvB9mB,GAEXhG,eAAgB,iBACLlkF,MAAKkxG,WACZlxG,KAAKgI,QAAQ,kBAAoBjQ,QAASiI,SAmB9C6mG,GAAiB,OACjB5D,GAASsD,GAAU7lG,QACnBC,KAAM,SAAUwpG,EAAU/pG,GACL,SAAb+pG,IACAA,EAAW,GAAIjH,KAEH,SAAZ9iG,IACAA,MAEJmmG,GAAUtiG,GAAGtD,KAAKwH,KAAKnI,KAAMI,GAC7BJ,KAAKmqG,SAASA,GACTzoB,EAAQ1hF,KAAKI,QAAQ48F,SACtBh9F,KAAKg9F,OAAO6J,KAGpB9b,QAAS,WACL,MAAO/qF,MAAKqxG,UAAUnnB,QAE1BknB,MAAO,SAAU7sB,GACb,MAAOvkF,MAAKqxG,UAAUnnB,KAAK3F,IAE/B2rB,eAAgB,SAAU7nB,GACtB,MAAOroF,MAAKmqG,WAAW+E,cAAc7mB,IAEzC8mB,UAAW,SAAU9mB,GACjB,MAAOroF,MAAKmqG,WAAWgF,UAAU9mB,EAAOroF,KAAKI,QAAQ48F,OAAO/jG,MAAQ,MAG5EgqG,GAAOl8F,UAAUmgB,SAAW,SAC5Bw/E,GAAUhmG,OAAOuiG,GAAOl8F,WACxB6/F,GAAWlmG,OAAOuiG,GAAOl8F,WACzBg+E,EAAwBke,GAAOl8F,WAAY,aACvCk+E,GAAY,GAwBZ6hB,GAAe,GACfC,GAAQnoG,KAAK8nC,IACbo0D,GAAQjkG,GAAM6J,QACdC,KAAM,SAAUw2D,EAAQ/2D,GACL,SAAX+2D,IACAA,EAAS,GAAI2uB,KAED,SAAZ1lF,IACAA,MAEJJ,KAAKowG,UAAUj5C,GACfn3D,KAAK4nF,QAAUxnF,EAAQwnF,QACvB5nF,KAAK6nF,QAAUznF,EAAQynF,SAAWznF,EAAQwnF,QAC1C5nF,KAAKonF,WAAahnF,EAAQgnF,WAC1BpnF,KAAKunF,SAAWnnF,EAAQmnF,SACxBvnF,KAAK8+F,cAAgB1+F,EAAQ0+F,gBAAiB,EAC9C9+F,KAAK8nF,UAAY1nF,EAAQ0nF,WAE7B3rF,MAAO,WACH,MAAO,IAAI2+F,IAAM96F,KAAKm3D,QAClBywB,QAAS5nF,KAAK4nF,QACdC,QAAS7nF,KAAK6nF,QACdT,WAAYpnF,KAAKonF,WACjBG,SAAUvnF,KAAKunF,SACfuX,cAAe9+F,KAAK8+F,iBAG5BsR,UAAW,SAAUxyG,GAGjB,MAFAoC,MAAK8kF,eAAe,SAAUgB,GAAMt3C,OAAO5wC,IAC3CoC,KAAKkkF,iBACElkF,MAEXswG,UAAW,WACP,MAAOtwG,MAAKm3D,QAEhBo5C,QAAS,SAAUjpB,GAAV,GACDnwB,GAASn3D,KAAKm3D,OACdm6C,EAASluB,EAAIkE,EACjB,OAAO,IAAIxB,IAAM3uB,EAAOlkC,EAAIjzB,KAAK4nF,QAAUhpF,KAAKsnF,IAAIorB,GAASn6C,EAAO9lD,EAAIrR,KAAK6nF,QAAUjpF,KAAKunF,IAAImrB,KAEpGvW,YAAa,WAAA,GAULxhE,GAIKz+B,EACDy2G,EACA9oB,EAfJtJ,EAASn/E,KACTonF,EAAapnF,KAAKonF,WAClBn4D,EAAMjvB,KAAK8+F,iBAAqB,EAChC/D,GAAe/6F,KAAKuwG,QAAQnpB,IAC5BoqB,EAAWxxG,KAAKyxG,eAChBC,EAAgBF,EAASjqB,SAAWiqB,EAASpqB,WAC7CuqB,EAAoB/yG,KAAKuoD,KAAKuqD,EAAgB5K,IAC9C8K,EAAmBF,EAAgBC,EACnCE,EAAezqB,CAKnB,KAHIpnF,KAAK8nF,YACLvuD,EAAiBI,IAAY8D,OAAOz9B,KAAK8nF,UAAW9nF,KAAKm3D,SAEpDr8D,EAAI,EAAGA,GAAK62G,EAAmB72G,IAChCy2G,EAAYM,EAAe5iF,EAAM2iF,EACjCnpB,EAAStJ,EAAO2yB,qBAAqBD,EAAcN,EAAWh4E,GAClEwhE,EAAYjzF,KAAK2gF,EAAOspB,IAAKtpB,EAAOupB,IAAKvpB,EAAOnD,IAChDusB,EAAeN,CAEnB,OAAOxW,IAEX7Q,KAAM,SAAU3F,GAcZ,IAdE,GAeMksB,GAKAC,EAnBJvxB,EAASn/E,KACTwxG,EAAWxxG,KAAKyxG,eAChBrqB,EAAaoqB,EAASpqB,WACtBG,EAAWiqB,EAASjqB,SACpBqpB,EAAgBnsB,EAAqBzkF,KAAKm3D,OAAQn3D,KAAK4nF,QAAS5nF,KAAK6nF,QAAStD,GAC9EI,EAAW9C,EAAI+uB,EAAc39E,GAC7B2xD,EAAW/C,EAAI+uB,EAAcv/F,GAC7B82E,EAAWnoF,KAAKuwG,QAAQhpB,GAAUgB,cAAchE,GAChD0tB,EAAgBlqB,EAAepD,EAAUyC,GACzC8qB,EAAgBnqB,EAAenD,EAAUwC,GACzCupB,EAAe3wG,KAAKuwG,QAAQnpB,GAAYmB,cAAchE,GACtDiqB,EAAW1oB,GAAM9zE,IAAI2+F,EAAcxoB,GACnCsmB,EAAW3oB,GAAMptF,IAAIi4G,EAAcxoB,GAChC8pB,EAAgB1qB,GAAY2qB,EAAgB3qB,GAC3CkpB,EAAgB,OAChBwB,EAAgB1qB,IAChBkpB,EAAgBtxB,EAAOoxB,QAAQ0B,GAAe1pB,cAAchE,GAC5D0tB,GAAiB,IAEjBvB,EAAgB,OAChBwB,EAAgB3qB,IAChBmpB,EAAgBvxB,EAAOoxB,QAAQ2B,GAAe3pB,cAAchE,GAC5D2tB,GAAiB,IAErBvB,EAAe,GAAI7qB,IAAM2qB,EAAcx9E,EAAGy9E,EAAcr/F,GACxDm9F,EAAW1oB,GAAM9zE,IAAIw8F,EAAUmC,GAC/BlC,EAAW3oB,GAAMptF,IAAI+1G,EAAUkC,EAEnC,OAAO3lB,IAAK+jB,WAAWP,EAAUC,IAErCgD,aAAc,WAAA,GAMFU,GALJvzB,EAAM5+E,KACNonF,EAAaxI,EAAIwI,WACjBG,EAAW3I,EAAI2I,SACfuX,EAAgBlgB,EAAIkgB,aASxB,OARIA,KACIqT,EAAW/qB,EACfA,EAAaG,EACbA,EAAW4qB,IAEX/qB,EAAaG,GAAYuX,GAAiB1X,IAAeG,KACzDA,GAAY,MAGZH,WAAYA,EACZG,SAAUA,IAGlBuqB,qBAAsB,SAAU1qB,EAAYG,EAAUhuD,GAAhC,GACd8rD,GAAKrlF,KAAKuwG,QAAQnpB,GAClB9B,EAAKtlF,KAAKuwG,QAAQhpB,GAClB6qB,EAAepyG,KAAKqyG,cAAcjrB,GAClCkrB,EAAetyG,KAAKqyG,cAAc9qB,GAClCr2E,GAAKkyE,EAAImE,GAAYnE,EAAIgE,IAAe,EACxC2qB,EAAM,GAAIjsB,IAAMT,EAAGpyD,EAAI/hB,EAAIkhG,EAAan/E,EAAGoyD,EAAGh0E,EAAIH,EAAIkhG,EAAa/gG,GACnE2gG,EAAM,GAAIlsB,IAAMR,EAAGryD,EAAI/hB,EAAIohG,EAAar/E,EAAGqyD,EAAGj0E,EAAIH,EAAIohG,EAAajhG,EAOvE,OANIkoB,KACA8rD,EAAG1rD,UAAUJ,GACb+rD,EAAG3rD,UAAUJ,GACbw4E,EAAIp4E,UAAUJ,GACdy4E,EAAIr4E,UAAUJ,KAGd8rD,GAAIA,EACJ0sB,IAAKA,EACLC,IAAKA,EACL1sB,GAAIA,IAGZ+sB,cAAe,SAAU/qB,GACrB,GAAIgqB,GAASluB,EAAIkE,EACjB,OAAO,IAAIxB,KAAO9lF,KAAK4nF,QAAUhpF,KAAKunF,IAAImrB,GAAStxG,KAAK6nF,QAAUjpF,KAAKsnF,IAAIorB,KAE/EpC,cAAe,SAAU7mB,GAAV,GAaP6mB,GAII5nB,EAIAirB,EApBJf,EAAWxxG,KAAKyxG,eAChBC,EAAgBF,EAASjqB,SAAWiqB,EAASpqB,WAC7CxI,EAAM5+E,KACNm3D,EAASynB,EAAIznB,OACbywB,EAAUhJ,EAAIgJ,QACdC,EAAUjJ,EAAIiJ,QACdzwB,EAAWD,EAAOg3C,WAAW9lB,GAC7BmqB,EAAW5zG,KAAKo7B,MAAMquD,EAAMh3E,EAAI8lD,EAAO9lD,EAAGg3E,EAAMp1D,EAAIkkC,EAAOlkC,GAC3Dw/E,EAAc7qB,EAAUC,EAAUjpF,KAAKy4D,KAAK0vC,GAAMnf,EAAS,GAAKmf,GAAMnoG,KAAKunF,IAAIqsB,GAAW,GAAKzL,GAAMlf,EAAS,GAAKkf,GAAMnoG,KAAKsnF,IAAIssB,GAAW,IAC7IE,EAAa1yG,KAAKuwG,QAAQvwG,KAAKonF,YAAY33E,MAAMw1E,IACjDkD,EAAWnoF,KAAKuwG,QAAQvwG,KAAKunF,UAAU93E,MAAMw1E,IAC7C6E,EAAe3E,EAAiBhuB,EAAQkxB,EAAM54E,MAAMw1E,IAAYytB,EAAYvqB,EAYhF,OAVIupB,GAAgB,IAChBxC,EAAgBplB,GAAgB5E,EAAY/tB,EAAOg3C,WAAWrkB,GAAe1yB,IAAa8tB,EAAY9tB,EAAUq7C,IAE5GnrB,EAAQvB,EAAe5uB,EAAOlkC,EAAGkkC,EAAO9lD,EAAGu2E,EAASC,EAASQ,EAAMp1D,EAAGo1D,EAAMh3E,GAClE,MAAVi2E,IACAA,GAAS,IAAMA,GAAS,KAExBirB,EAAef,EAASpqB,YAAcE,GAASA,GAASkqB,EAASjqB,SACrE2nB,EAAgBqD,GAAgBrtB,EAAY9tB,EAAUq7C,KAAiBF,KAAkBzoB,GAAgBA,EAAa1tC,OAAOisC,KAE1H6mB,GAEXC,UAAW,SAAU9mB,EAAOpvF,GAAjB,GAOHs5G,GANAf,EAAWxxG,KAAKyxG,eAChBt6C,EAASn3D,KAAKm3D,OACdmwB,EAAQvB,EAAe5uB,EAAOlkC,EAAGkkC,EAAO9lD,EAAGrR,KAAK4nF,QAAS5nF,KAAK6nF,QAASQ,EAAMp1D,EAAGo1D,EAAMh3E,EAK1F,OAJc,OAAVi2E,IACAA,GAAS,IAAMA,GAAS,KAExBirB,EAAef,EAASpqB,YAAcE,GAASA,GAASkqB,EAASjqB,SAC9DgrB,GAAgBvyG,KAAKuwG,QAAQjpB,GAAO6mB,WAAW9lB,IAAUpvF,KAGxE6hG,GAAMiU,WAAa,SAAU9/F,EAAOtX,EAAK8E,EAAIioF,EAAI+C,EAAUC,EAAOhkD,GAC9D,GAAIivE,GAAgBvsB,GAChBvvB,GAAI5nD,EAAMgkB,EACV6jC,GAAI7nD,EAAMoC,EACV0lD,GAAIp/D,EAAIs7B,EACR+jC,GAAIr/D,EAAI0Z,EACR5U,GAAIA,EACJioF,GAAIA,EACJ+C,SAAUA,EACVC,MAAOA,EACPhkD,SAAUA,GAEd,OAAO,IAAIo3D,IAAM6X,EAAcx7C,QAC3BiwB,WAAYurB,EAAcvrB,WAC1BG,SAAUorB,EAAcprB,SACxBK,QAAS+qB,EAAc/qB,QACvBC,QAAS8qB,EAAc9qB,QACvBC,UAAW6qB,EAAc7qB,UACzBgX,cAAyB,IAAVpX,KAGvBtD,EAAgB0W,GAAM/zF,WAClB,UACA,UACA,aACA,WACA,kBAEJq/F,GAAe1lG,OAAOo6F,GAAM/zF,WA6ExBe,MAAUA,KACVikB,MAASA,IACT3jB,MAAYA,OACZ0J,MAAWA,MACXtL,MAAWA,MACXuB,MAAaA,QACbi/F,GAAgBnwG,GAAM6J,QACtBC,KAAM,SAAU0S,GACE,SAAVA,IACAA,MAEJrT,KAAKpI,OAAS,EACdoI,KAAK4yG,QAAQ,EAAGv/F,EAAMzb,OAAQyb,IAElCkT,SAAU,SAAU3oB,GAChB,MAAIA,IACAoC,KAAK4yG,QAAQ,EAAG5yG,KAAKpI,OAAQgG,GAC7BoC,KAAKokD,UACEpkD,MAEJA,KAAKwG,MAAM,IAEtBsB,KAAM,WAAA,GACEye,GAAWxrB,UACXiE,EAAS8I,GAAKhB,MAAM9G,KAAMumB,EAE9B,OADAvmB,MAAK6yG,KAAKtsF,GACHvnB,GAEXwH,MAAO,WACH,MAAOA,IAAM2B,KAAKnI,OAEtB+rB,IAAK,WAAA,GACGn0B,GAASoI,KAAKpI,OACdoH,EAAS+sB,GAAIjlB,MAAM9G,KAIvB,OAHIpI,IACAoI,KAAK8yG,SAAS9zG,IAEXA,GAEXoJ,OAAQ,SAAU+J,EAAO8mC,GAAjB,GACA1yB,GAAW/f,GAAM2B,KAAKpN,UAAW,GACjCiE,EAASgB,KAAK4yG,QAAQzgG,EAAO8mC,EAAS1yB,EAE1C,OADAvmB,MAAKokD,UACEplD,GAEX8S,MAAO,WAAA,GACCla,GAASoI,KAAKpI,OACdoH,EAAS8S,GAAMhL,MAAM9G,KAIzB,OAHIpI,IACAoI,KAAK8yG,SAAS9zG,IAEXA,GAEX+I,QAAS,WAAA,GACDwe,GAAWxrB,UACXiE,EAAS+I,GAAQjB,MAAM9G,KAAMumB,EAEjC,OADAvmB,MAAK6yG,KAAKtsF,GACHvnB,GAEXd,QAAS,SAAUnG,GAAV,GAGI4F,GAFLwhF,EAASn/E,KACTpI,EAASoI,KAAKpI,MAClB,KAAS+F,EAAM,EAAGA,EAAM/F,EAAQ+F,IAC5B,GAAIwhF,EAAOxhF,KAAS5F,EAChB,MAAO4F,EAGf,WAEJi1G,QAAS,SAAUzgG,EAAO8mC,EAAS1yB,GAC/B,GAAIvnB,GAASoJ,GAAOtB,MAAM9G,MACtBmS,EACA8mC,GACF/iC,OAAOqQ,GAGT,OAFAvmB,MAAK+yG,eAAe/zG,GACpBgB,KAAKgzG,aAAazsF,GACXvnB,GAEX6zG,KAAM,SAAUtsF,GACZvmB,KAAKgzG,aAAazsF,GAClBvmB,KAAKokD,WAET0uD,QAAS,SAAUvsF,GACfvmB,KAAK+yG,eAAexsF,GACpBvmB,KAAKokD,WAET4uD,aAAc,SAAUzsF,GAAV,GAED5oB,GADLwhF,EAASn/E,IACb,KAASrC,EAAM,EAAGA,EAAM4oB,EAAS3uB,OAAQ+F,IACrC4oB,EAAS5oB,GAAK+tG,YAAYvsB,IAGlC4zB,eAAgB,SAAUxsF,GAAV,GAEH5oB,GADLwhF,EAASn/E,IACb,KAASrC,EAAM,EAAGA,EAAM4oB,EAAS3uB,OAAQ+F,IACrC4oB,EAAS5oB,GAAKguG,eAAexsB,IAGrC/6B,QAAS,eAGbgiD,GAAe1lG,OAAOsmG,GAAcjgG,WAChCkgG,GAAwBD,GAActmG,QACtC0jD,QAAS,WACLpkD,KAAKkkF,oBAoCTmF,GAAgBxyF,GAAM6J,QACtBC,KAAM,SAAUgpF,EAAMwO,GACL,SAATxO,IACAA,EAAO,GAEC,SAARwO,IACAA,EAAM,GAEVn4F,KAAK2pF,KAAOA,EACZ3pF,KAAKm4F,IAAMA,GAEf72F,IAAK,SAAU2xG,GACX,MAAO,IAAI5pB,IAAc55E,EAAMzP,KAAK2pF,KAAOspB,EAAQtpB,KAAM1E,IAAYx1E,EAAMzP,KAAKm4F,IAAM8a,EAAQ9a,IAAKlT,MAEvGiuB,YAAa,SAAUt1G,GACnB,MAAO,IAAIyrF,IAAcrpF,KAAK2pF,KAAO/rF,EAAOoC,KAAKm4F,MAErD3O,OAAQ,WACJ,MAAO,IAAIH,MAAerpF,KAAK2pF,QAAO3pF,KAAKm4F,OAE/C1O,SAAU,SAAUwpB,GAChB,MAAO,IAAI5pB,IAAcrpF,KAAK2pF,KAAOspB,EAAQtpB,KAAO3pF,KAAKm4F,IAAM8a,EAAQ9a,IAAKn4F,KAAK2pF,KAAOspB,EAAQ9a,IAAMn4F,KAAKm4F,IAAM8a,EAAQtpB,OAE7HJ,iBAAkB,SAAU3rF,GACxB,MAAO,IAAIyrF,IAAcrpF,KAAK2pF,KAAO/rF,EAAOoC,KAAKm4F,IAAMv6F,IAE3D0rF,QAAS,SAAU3tC,GAAV,GACDw3D,GAASv0G,KAAKo7B,MAAMh6B,KAAKm4F,IAAKn4F,KAAK2pF,MACnCvL,EAAIx/E,KAAKy4D,KAAKz4D,KAAK8nC,IAAI1mC,KAAKm4F,IAAK,GAAKv5F,KAAK8nC,IAAI1mC,KAAK2pF,KAAM,IAC1DypB,EAAOx0G,KAAK8nC,IAAI03C,EAAG,EAAIziC,EAC3B,OAAO,IAAI0tC,IAAc+pB,EAAOx0G,KAAKsnF,IAAIitB,EAASx3D,GAAIy3D,EAAOx0G,KAAKunF,IAAIgtB,EAASx3D,KAEnFS,OAAQ,SAAU62D,GACd,MAAOjzG,MAAK2pF,OAASspB,EAAQtpB,MAAQ3pF,KAAKm4F,MAAQ8a,EAAQ9a,KAE9DzO,OAAQ,WACJ,MAAoB,KAAb1pF,KAAKm4F,OA4FhB+O,GAAUrwG,GAAM6J,QAChBC,KAAM,SAAU0rE,EAAQ2hB,EAAWH,GAC/B7tF,KAAKqsE,OAAOA,GAAU,GAAIyZ,KAC1B9lF,KAAKguF,UAAUA,GACfhuF,KAAK6tF,WAAWA,IAEpBwlB,OAAQ,SAAUC,EAAW/uB,GAArB,GAGA9lB,GAFA80C,EAAgBvzG,KAAKqsE,SAASkc,cAAchE,GAC5CivB,EAAkBF,EAAUjnC,SAASkc,cAAchE,EAOvD,OAJI9lB,GADAz+D,KAAK6tF,cAAgBylB,EAAUtlB,YACxBhuF,KAAKyzG,kBAAkBF,EAAevzG,KAAK6tF,aAAatF,cAAchE,GAAS+uB,EAAUtlB,YAAYzF,cAAchE,GAASivB,GAE5HxzG,KAAK0zG,iBAAiBH,EAAeC,IAIpDE,iBAAkB,SAAUruB,EAAIC,GAC5B,MAAO0F,IAAK+jB,WAAW1pB,EAAIC,IAE/BmuB,kBAAmB,SAAUpuB,EAAI0sB,EAAKC,EAAK1sB,GAAxB,GACXmD,IACApD,EACA0sB,EACAC,EACA1sB,GAEAquB,EAAY3zG,KAAK4zG,kBAAkBnrB,EAAQ,KAC3CorB,EAAY7zG,KAAK4zG,kBAAkBnrB,EAAQ,KAC3CqrB,EAAUtpB,GACVmpB,EAAU3hG,IACV2hG,EAAUj7G,IACV2sF,EAAGpyD,EACHqyD,EAAGryD,IAEH8gF,EAAUvpB,GACVqpB,EAAU7hG,IACV6hG,EAAUn7G,IACV2sF,EAAGh0E,EACHi0E,EAAGj0E,GAEP,OAAO25E,IAAK+jB,WAAW,GAAIjpB,IAAMguB,EAAQ9hG,IAAK+hG,EAAQ/hG,KAAM,GAAI8zE,IAAMguB,EAAQp7G,IAAKq7G,EAAQr7G,OAE/Fk7G,kBAAmB,SAAUnrB,EAAQ1qE,GACjC,GAAIi2F,GAAWh0G,KAAKi0G,eAAexrB,EAAO,GAAG1qE,GAAQ0qE,EAAO,GAAG1qE,GAAQ0qE,EAAO,GAAG1qE,GAAQ0qE,EAAO,GAAG1qE,GACnG,QACI/L,IAAKw2E,EAAiBwrB,EAAShiG,IAAK+L,EAAO0qE,GAC3C/vF,IAAK8vF,EAAiBwrB,EAASt7G,IAAKqlB,EAAO0qE,KAGnDwrB,eAAgB,SAAUp9C,EAAIE,EAAIm9C,EAAIC,GAAtB,GAeRniG,GAIAtZ,EAlBAkK,EAAIi0D,EAAK,EAAIE,EAAK,EAAIm9C,EAAKC,EAC3BtxG,MAAUg0D,EAAK,EAAIE,EAAKm9C,GACxB9qG,EAAIytD,EAAKE,EACTM,EAAOz4D,KAAKy4D,KAAKx0D,EAAIA,EAAI,EAAID,EAAIwG,GACjCs/E,EAAK,EACL0rB,EAAK,CAiBT,OAhBU,KAANxxG,EACU,IAANC,IACA6lF,EAAK0rB,GAAMhrG,EAAIvG,GAEX4S,MAAM4hD,KACdqxB,IAAO7lF,EAAIw0D,IAAS,EAAIz0D,GACxBwxG,IAAOvxG,EAAIw0D,IAAS,EAAIz0D,IAExBoP,EAAMpT,KAAKlG,IAAIkG,KAAKoT,IAAI02E,EAAI0rB,GAAK,IACjCpiG,EAAM,GAAKA,EAAM,KACjBA,EAAM,GAENtZ,EAAMkG,KAAKoT,IAAIpT,KAAKlG,IAAIgwF,EAAI0rB,GAAK,IACjC17G,EAAM,GAAKA,EAAM,KACjBA,EAAM,IAGNsZ,IAAKA,EACLtZ,IAAKA,IAGb27G,iBAAkB,SAAUzkB,EAASvH,GACjC,GAAIisB,EAWJ,OATIA,GADAt0G,KAAK6tF,cAAgB+B,EAAQ5B,YACR/D,GACjBjqF,KAAKqsE,SACLrsE,KAAK6tF,aACL+B,EAAQ5B,YACR4B,EAAQvjB,UACTgc,EAAOroF,KAAKqzG,OAAOzjB,IAEDtF,EAAuBtqF,KAAKqsE,SAAUujB,EAAQvjB,SAAUgc,IAIrFksB,aAAc,SAAU3kB,EAASvH,EAAOpvF,EAAOu7G,GAAjC,GAGFnvB,GACAC,EACAC,EACAkvB,EAMAhsB,EASA/kD,EACAgxE,EArBJxqB,EAAOlqF,KAAKqzG,OAAOzjB,GAASof,OAAO/1G,EAAOA,EAC9C,IAAIixF,EAAKglB,cAAc7mB,GAKnB,MAJIhD,GAAKrlF,KAAKqsE,SACViZ,EAAKtlF,KAAK6tF,aACVtI,EAAKqK,EAAQ5B,YACbymB,EAAK7kB,EAAQvjB,SACE,UAAfmoC,GAA0BnvB,EAAG8oB,WAAW9lB,IAAUpvF,GAC1CivF,EAAgB7C,EAAIC,EAAI+C,GACV,QAAfmsB,GAAwBC,EAAGtG,WAAW9lB,IAAUpvF,GAC/CivF,EAAgBusB,EAAIlvB,EAAI8C,IAEhCI,GACApD,EACAC,EACAC,EACAkvB,MAEA7qB,EAAgBnB,EAAQJ,EAAO,IAAK,IAAKpvF,KAAU2wF,EAAgBnB,EAAQJ,EAAO,IAAK,IAAKpvF,MAG5FyqC,EAAW/J,IAAY8D,OAAO,GAAI4qD,GAClCqsB,GACArvB,EAAGkD,cAAc7kD,GACjB4hD,EAAGiD,cAAc7kD,GACjB6hD,EAAGgD,cAAc7kD,GACjB+wE,EAAGlsB,cAAc7kD,IAEdkmD,EAAgB8qB,EAAersB,EAAO,IAAK,IAAKpvF,IAAU2wF,EAAgB8qB,EAAersB,EAAO,IAAK,IAAKpvF,MAGzH07G,YAAa,SAAU/kB,EAASvH,EAAOpvF,GAA1B,GACLosF,GAAKrlF,KAAKqsE,SACViZ,EAAKsK,EAAQvjB,SACbib,EAAQzF,EAAIjjF,KAAKo7B,MAAMsrD,EAAGj0E,EAAIg0E,EAAGh0E,EAAGi0E,EAAGryD,EAAIoyD,EAAGpyD,IAC9CwrC,EAAO,GAAIusB,KACX3F,EAAGpyD,EACHoyD,EAAGh0E,EAAIpY,EAAQ,IAEfosF,EAAG8oB,WAAW7oB,GACdrsF,GAEJ,OAAOwlE,GAAKywC,cAAc7mB,EAAME,cAAc5uD,IAAY8D,QAAQ6pD,EAAOjC,MAE7EuvB,YAAa,SAAUhlB,EAASvH,EAAOpvF,EAAOu7G,GAC1C,GAAIK,EAMJ,OAJIA,GADA70G,KAAK6tF,cAAgB+B,EAAQ5B,YAClBhuF,KAAKu0G,aAAa3kB,EAASvH,EAAOpvF,EAAQ,EAAGu7G,GAE7Cx0G,KAAK20G,YAAY/kB,EAASvH,EAAOpvF,MAKxDgvF,EAAqBif,GAAQngG,WACzB,SACA,YACA,eAEJq/F,GAAe1lG,OAAOwmG,GAAQngG,WAc1B+1F,GAAOyJ,GAAU7lG,QACjBC,KAAM,SAAUP,GACZmmG,GAAUtiG,GAAGtD,KAAKwH,KAAKnI,KAAMI,GAC7BJ,KAAK+vF,SAAW,GAAIkX,IACpBjnG,KAAK+vF,SAAS2b,YAAY1rG,MACrB0hF,EAAQ1hF,KAAKI,QAAQ48F,UACtBh9F,KAAKg9F,OAAO,QACPtb,EAAQ1hF,KAAKI,QAAQ48F,OAAO8X,WAC7B90G,KAAKI,QAAQsjB,IAAI,kBAAmB,WAIhD0iB,OAAQ,SAAUnT,EAAG5hB,GAKjB,MAJArR,MAAK+rG,UACL/rG,KAAK+vF,SAASxpE,aACdvmB,KAAKgsG,SACLhsG,KAAKiwF,OAAOh9D,EAAG5hB,GACRrR,MAEXiwF,OAAQ,SAAUh9D,EAAG5hB,GAAb,GACAg3E,GAAQ3G,EAAQrwE,GAAK,GAAIy0E,IAAM7yD,EAAG5hB,GAAK4hB,EACvC28D,EAAU,GAAIsX,IAAQ7e,EAE1B,OADAroF,MAAK+vF,SAASjoF,KAAK8nF,GACZ5vF,MAEXg7F,QAAS,SAAUnN,EAAYG,EAAW3F,GAAjC,GAEG0sB,GACAnlB,CAMR,OARI5vF,MAAK+vF,SAASn4F,OAAS,IACnBm9G,EAAczlF,EAAKtvB,KAAK+vF,UACxBH,EAAU,GAAIsX,IAAQ7e,EAAO2F,GACjChuF,KAAK+rG,UACLgJ,EAAYlnB,WAAWA,GACvB7tF,KAAKgsG,SACLhsG,KAAK+vF,SAASjoF,KAAK8nF,IAEhB5vF,MAEXg1G,IAAK,SAAU5tB,EAAYG,EAAUK,EAASC,EAASiX,GAAlD,GAEOiW,GACA1oC,EACAp9D,EACAkoD,EACA69C,CASR,OAdIh1G,MAAK+vF,SAASn4F,OAAS,IACnBm9G,EAAczlF,EAAKtvB,KAAK+vF,UACxB1jB,EAAS0oC,EAAY1oC,SACrBp9D,EAAQm0E,EAAIgE,GACZjwB,EAAS,GAAI2uB,IAAMzZ,EAAOp5C,EAAI20D,EAAUhpF,KAAKsnF,IAAIj3E,GAAQo9D,EAAOh7D,EAAIw2E,EAAUjpF,KAAKunF,IAAIl3E,IACvF+lG,EAAM,GAAIla,IAAM3jC,GAChBiwB,WAAYA,EACZG,SAAUA,EACVK,QAASA,EACTC,QAASA,EACTiX,cAAeA,IAEnB9+F,KAAKi1G,gBAAgBD,IAElBh1G,MAEXk1G,MAAO,SAAUv9G,EAAK8E,EAAIioF,EAAI+C,EAAUC,EAAOhkD,GAAxC,GAEKqxE,GACA1oC,EACA2oC,CAGR,OANIh1G,MAAK+vF,SAASn4F,OAAS,IACnBm9G,EAAczlF,EAAKtvB,KAAK+vF,UACxB1jB,EAAS0oC,EAAY1oC,SACrB2oC,EAAMla,GAAMiU,WAAW1iC,EAAQ10E,EAAK8E,EAAIioF,EAAI+C,EAAUC,EAAOhkD,GACjE1jC,KAAKi1G,gBAAgBD,IAElBh1G,MAEXi1G,gBAAiB,SAAUD,GAAV,GAGTja,GACKjgG,EAHLqkF,EAASn/E,IAGb,KAFAA,KAAK+rG,UACDhR,EAAcia,EAAIja,cACbjgG,EAAI,EAAGA,EAAIigG,EAAYnjG,OAAQkD,GAAK,EACzCqkF,EAAO6b,QAAQD,EAAYjgG,GAAIigG,EAAYjgG,EAAI,GAAIigG,EAAYjgG,EAAI,GAEvEkF,MAAKgsG,SACLhsG,KAAKkkF,kBAETzX,MAAO,WAGH,MAFAzsE,MAAKI,QAAQ8vF,QAAS,EACtBlwF,KAAKkkF,iBACElkF,MAEX+qF,QAAS,WACL,MAAO/qF,MAAKoxG,SAEhBlB,eAAgB,SAAU7nB,GAAV,GAIR1lD,GAAUh3B,EACLhO,EAJLoyF,EAAW/vF,KAAK+vF,SAChBn4F,EAASm4F,EAASn4F,OAClB08G,EAAqB,CAEzB,KAAS32G,EAAM,EAAGA,EAAM/F,EAAQ+F,IAC5BglC,EAAWotD,EAASpyF,EAAM,GAC1BgO,EAAUokF,EAASpyF,GACnB22G,GAAsB3xE,EAAS0xE,iBAAiB1oG,EAAS08E,EAK7D,QAHIroF,KAAKI,QAAQ8vF,QAAWH,EAAS,GAAG1jB,SAASjwB,OAAO2zC,EAASn4F,EAAS,GAAGy0E,YACzEioC,GAAsBhqB,EAAuByF,EAAS,GAAG1jB,SAAU0jB,EAASn4F,EAAS,GAAGy0E,SAAUgc,IAE/FisB,EAAqB,IAAM,GAEtCnF,UAAW,SAAU9mB,EAAOpvF,GAAjB,GAQM0E,GAPToyF,EAAW/vF,KAAK+vF,SAChBn4F,EAASm4F,EAASn4F,OAClBu9G,EAAYl8G,GAAS+G,KAAKI,QAAQ48F,OAAO/jG,KAC7C,IAAIrB,EAAS,EAAG,CACZ,GAAIm4F,EAAS,GAAG6kB,YAAY7kB,EAAS,GAAI1H,EAAO8sB,EAAW,SACvD,OAAO,CAEX,KAASx3G,EAAM,EAAGA,GAAO/F,EAAS,EAAG+F,IACjC,GAAIoyF,EAASpyF,EAAM,GAAGi3G,YAAY7kB,EAASpyF,GAAM0qF,EAAO8sB,GACpD,OAAO,CAGf,IAAIplB,EAASn4F,EAAS,GAAGg9G,YAAY7kB,EAASn4F,EAAS,GAAIywF,EAAO8sB,EAAW,OACzE,OAAO,EAGf,OAAO,GAEX/D,MAAO,SAAU7sB,GAAV,GAGCsG,GAEIxe,EAGKvxE,EACDs6G,EARRrlB,EAAW/vF,KAAK+vF,SAChBn4F,EAASm4F,EAASn4F,MAEtB,IAAe,IAAXA,EACIy0E,EAAS0jB,EAAS,GAAG1jB,SAASkc,cAAchE,GAChDsG,EAAc,GAAIG,IAAK3e,EAAQi6B,GAAKt2F,UACjC,IAAIpY,EAAS,EAChB,IAASkD,EAAI,EAAGA,EAAIlD,EAAQkD,IACpBs6G,EAAarlB,EAASj1F,EAAI,GAAGu4G,OAAOtjB,EAASj1F,GAAIypF,GAEjDsG,EADAA,EACcG,GAAKC,MAAMJ,EAAauqB,GAExBA,CAI1B,OAAOvqB,MAGfiS,GAAKkF,SAAW,SAAUvjC,EAAMr+D,GAC5B,MAAO,IAAI08F,IAAK18F,GAASgmC,OAAOq4B,EAAKmwC,WAAW3e,OAAOxxB,EAAKowC,YAAY5e,OAAOxxB,EAAK4rB,eAAe4F,OAAOxxB,EAAKqwC,cAAcriC,SAEjIqwB,GAAKiS,WAAa,SAAUtmB,EAAQroF,GAAlB,GAEN4mC,GACKlsC,EACDutF,CAHZ,IAAII,EAAQ,CAER,IADIzhD,EAAO,GAAI81D,IAAK18F,GACXtF,EAAI,EAAGA,EAAI2tF,EAAO7wF,OAAQkD,IAC3ButF,EAAQvC,GAAMt3C,OAAOi6C,EAAO3tF,IAC5ButF,IACU,IAANvtF,EACAksC,EAAKZ,OAAOiiD,GAEZrhD,EAAKipD,OAAO5H,GAIxB,OAAOrhD,KAGf81D,GAAKuY,QAAU,SAAUL,EAAK50G,GAAf,GACP4mC,GAAO,GAAI81D,IAAK18F,GAChBgnF,EAAa4tB,EAAI5tB,WACjBn4E,EAAQ+lG,EAAIzE,QAAQnpB,EAGxB,OAFApgD,GAAKZ,OAAOn3B,EAAMgkB,EAAGhkB,EAAMoC,GAC3B21B,EAAKguE,IAAI5tB,EAAY4tB,EAAIztB,SAAUytB,EAAIptB,QAASotB,EAAIntB,QAASmtB,EAAIlW,eAC1D93D,GAEX81D,GAAK/1F,UAAUmgB,SAAW,OAC1Bw/E,GAAUhmG,OAAOo8F,GAAK/1F,WACtB6/F,GAAWlmG,OAAOo8F,GAAK/1F,WACnBogG,GAAmB,OACnBC,GAAMb,GAAU7lG,QAChBC,KAAM,SAAUwpG,EAAU/pG,GACL,SAAb+pG,IACAA,EAAW,GAAIrP,KAEH,SAAZ16F,IACAA,MAEJmmG,GAAUtiG,GAAGtD,KAAKwH,KAAKnI,KAAMI,GAC7BJ,KAAKmqG,SAASA,GACTzoB,EAAQ1hF,KAAKI,QAAQ48F,SACtBh9F,KAAKg9F,OAAOmK,KAGpBiK,MAAO,SAAU7sB,GACb,MAAOvkF,MAAKqxG,UAAUnnB,KAAK3F,IAE/BwG,QAAS,WACL,MAAO/qF,MAAKmqG,WAAWjgB,QAE3BorB,OAAQ,WAAA,GAKSx6G,GAJTksC,EAAO,GAAI81D,IACX/B,EAAc/6F,KAAKmqG,WAAWpP,aAClC,IAAIA,EAAYnjG,OAAS,EAErB,IADAovC,EAAKZ,OAAO20D,EAAY,GAAG9nE,EAAG8nE,EAAY,GAAG1pF,GACpCvW,EAAI,EAAGA,EAAIigG,EAAYnjG,OAAQkD,GAAK,EACzCksC,EAAKg0D,QAAQD,EAAYjgG,GAAIigG,EAAYjgG,EAAI,GAAIigG,EAAYjgG,EAAI,GAGzE,OAAOksC,IAEXkpE,eAAgB,SAAU7nB,GACtB,MAAOroF,MAAKmqG,WAAW+E,cAAc7mB,IAEzC8mB,UAAW,SAAU9mB,GACjB,MAAOroF,MAAKmqG,WAAWgF,UAAU9mB,EAAOroF,KAAKI,QAAQ48F,OAAO/jG,MAAQ,MAG5EmuG,GAAIrgG,UAAUmgB,SAAW,MACzBw/E,GAAUhmG,OAAO0mG,GAAIrgG,WACrB6/F,GAAWlmG,OAAO0mG,GAAIrgG,WACtBg+E,EAAwBqiB,GAAIrgG,WAAY,aAmCpCsgG,GAAYd,GAAU7lG,QACtBC,KAAM,SAAUP,GACZmmG,GAAUtiG,GAAGtD,KAAKwH,KAAKnI,KAAMI,GAC7BJ,KAAK25C,MAAQ,GAAIstD,IACjBjnG,KAAK25C,MAAM+xD,YAAY1rG,MAClB0hF,EAAQ1hF,KAAKI,QAAQ48F,SACtBh9F,KAAKg9F,OAAO,SAGpB52D,OAAQ,SAAUnT,EAAG5hB,GACjB,GAAI21B,GAAO,GAAI81D,GAGf,OAFA91D,GAAKZ,OAAOnT,EAAG5hB,GACfrR,KAAK25C,MAAM7xC,KAAKk/B,GACThnC,MAEXiwF,OAAQ,SAAUh9D,EAAG5hB,GAIjB,MAHIrR,MAAK25C,MAAM/hD,OAAS,GACpB03B,EAAKtvB,KAAK25C,OAAOs2C,OAAOh9D,EAAG5hB,GAExBrR,MAEXg7F,QAAS,SAAUnN,EAAYG,EAAW3F,GAItC,MAHIroF,MAAK25C,MAAM/hD,OAAS,GACpB03B,EAAKtvB,KAAK25C,OAAOqhD,QAAQnN,EAAYG,EAAW3F,GAE7CroF,MAEXg1G,IAAK,SAAU5tB,EAAYG,EAAUK,EAASC,EAASiX,GAInD,MAHI9+F,MAAK25C,MAAM/hD,OAAS,GACpB03B,EAAKtvB,KAAK25C,OAAOq7D,IAAI5tB,EAAYG,EAAUK,EAASC,EAASiX,GAE1D9+F,MAEXk1G,MAAO,SAAUv9G,EAAK8E,EAAIioF,EAAI+C,EAAUC,EAAOhkD,GAI3C,MAHI1jC,MAAK25C,MAAM/hD,OAAS,GACpB03B,EAAKtvB,KAAK25C,OAAOu7D,MAAMv9G,EAAK8E,EAAIioF,EAAI+C,EAAUC,EAAOhkD,GAElD1jC,MAEXysE,MAAO,WAIH,MAHIzsE,MAAK25C,MAAM/hD,OAAS,GACpB03B,EAAKtvB,KAAK25C,OAAO8yB,QAEdzsE,MAEXoxG,MAAO,SAAU7sB,GACb,MAAOoG,GAAoB3qF,KAAK25C,OAAO,EAAM4qC,IAEjDwG,QAAS,WACL,MAAOJ,GAAoB3qF,KAAK25C,OAAO,IAE3Cu2D,eAAgB,SAAU7nB,GAAV,GAEH1qF,GADLg8C,EAAQ35C,KAAK25C,KACjB,KAASh8C,EAAM,EAAGA,EAAMg8C,EAAM/hD,OAAQ+F,IAClC,GAAIg8C,EAAMh8C,GAAKuyG,eAAe7nB,GAC1B,OAAO,CAGf,QAAO,GAEX8mB,UAAW,SAAU9mB,GAAV,GAGE1qF,GAFLg8C,EAAQ35C,KAAK25C,MACb1gD,EAAQ+G,KAAKI,QAAQ48F,OAAO/jG,KAChC,KAAS0E,EAAM,EAAGA,EAAMg8C,EAAM/hD,OAAQ+F,IAClC,GAAIg8C,EAAMh8C,GAAKwxG,UAAU9mB,EAAOpvF,GAC5B,OAAO,CAGf,QAAO,GAEX82G,aAAc,SAAUx2E,GACpB,MAAO2xD,GAA2BlrF,KAAK25C,MAAO35C,KAAK2vG,iBAAiBp2E,OAG5E8tE,GAAUtgG,UAAUmgB,SAAW,YAC/Bw/E,GAAUhmG,OAAO2mG,GAAUtgG,WAC3B6/F,GAAWlmG,OAAO2mG,GAAUtgG,WACxBugG,GAAe,kBACfC,GAAe,OACfC,GAAOjB,GAAU7lG,QACjBC,KAAM,SAAUwzD,EAASxyB,EAAUvhC,GACd,SAAbuhC,IACAA,EAAW,GAAImkD,KAEH,SAAZ1lF,IACAA,MAEJmmG,GAAUtiG,GAAGtD,KAAKwH,KAAKnI,KAAMI,GAC7BJ,KAAKm0D,QAAQA,GACbn0D,KAAK2hC,SAASA,GACT3hC,KAAKI,QAAQy2F,OACd72F,KAAKI,QAAQy2F,KAAOyQ,IAEnB5lB,EAAQ1hF,KAAKI,QAAQ28F,OACtB/8F,KAAK+8F,KAAKwK,KAGlBpzC,QAAS,SAAUv2D,GACf,MAAI8jF,GAAQ9jF,IACRoC,KAAKI,QAAQsjB,IAAI,UAAW9lB,GACrBoC,MAEJA,KAAKI,QAAQqjB,IAAI,YAE5B28C,QAAS,WACL,GAAIm1C,GAAUpP,GAAUjmB,YAAYlgF,KAAKm0D,WAAa0iC,KAAM72F,KAAKI,QAAQqjB,IAAI,SAC7E,OAAO8xF,IAEX92C,KAAM,WAAA,GACE1gE,GAAOiC,KAAKogE,UACZ6O,EAAMjvE,KAAK2hC,WAAWxlC,OAC1B,OAAO,IAAI6uF,IAAK/b,GACZlxE,EAAK9E,MACL8E,EAAK7E,UAGbgxF,KAAM,SAAU3wD,GACZ,GAAIu2E,GAAiBxrB,EAAStkF,KAAK2vG,iBAAiBp2E,GACpD,OAAOv5B,MAAKy+D,OAAOyrB,KAAK4lB,IAE5B/kB,QAAS,WACL,MAAO/qF,MAAKy+D,OAAOyrB,QAEvBgmB,eAAgB,SAAU7nB,GACtB,MAAOroF,MAAKy+D,OAAOywC,cAAc7mB,MAGzCmf,GAAKzgG,UAAUmgB,SAAW,OAC1Bw/E,GAAUhmG,OAAO8mG,GAAKzgG,WACtBkhF,EAAqBuf,GAAKzgG,WAAY,aAClCm5F,GAAUqG,GAAU7lG,QACpBC,KAAM,SAAUmyE,EAAKrU,EAAMr+D,GACV,SAATq+D,IACAA,EAAO,GAAIusB,KAEC,SAAZ5qF,IACAA,MAEJmmG,GAAUtiG,GAAGtD,KAAKwH,KAAKnI,KAAMI,GAC7BJ,KAAK8yE,IAAIA,GACT9yE,KAAKy+D,KAAKA,IAEdqU,IAAK,SAAUl1E,GACX,MAAI8jF,GAAQ9jF,IACRoC,KAAKI,QAAQsjB,IAAI,MAAO9lB,GACjBoC,MAEJA,KAAKI,QAAQqjB,IAAI,QAE5BymE,KAAM,SAAU3wD,GACZ,GAAIu2E,GAAiBxrB,EAAStkF,KAAK2vG,iBAAiBp2E,GACpD,OAAOv5B,MAAKw1G,MAAMtrB,KAAK4lB,IAE3B/kB,QAAS,WACL,MAAO/qF,MAAKw1G,MAAMtrB,QAEtBgmB,eAAgB,SAAU7nB,GACtB,MAAOroF,MAAKw1G,MAAMtG,cAAc7mB,IAEpC4nB,SAAU,WACN,MAAOjwG,MAAK8yE,SAGpBotB,GAAQn5F,UAAUmgB,SAAW,QAC7B69D,EAAwBmb,GAAQn5F,WAAY,SACxC0gG,IACA/mG,OAAQ,SAAU+F,EAAO2iD,GACrB3iD,EAAMgvG,SAAW,SAAU90F,GAAV,GAEJ7lB,GACDy2B,EAFJ52B,EAAWqF,KAAKopD,EACpB,KAAStuD,EAAI,EAAGA,EAAIH,EAAS/C,OAAQkD,IAC7By2B,EAAQ52B,EAASG,GACjBy2B,EAAMkkF,SACNlkF,EAAMkkF,SAAS90F,GAEfA,EAAS4Q,EAGjB,OAAOvxB,SAIfwvF,GAAQ+W,GAAU7lG,QAClBC,KAAM,SAAUP,GACZmmG,GAAUtiG,GAAGtD,KAAKwH,KAAKnI,KAAMI,GAC7BJ,KAAKrF,aAET+6G,eAAgB,SAAU/+E,EAAQnQ,EAAOrU,GACrCnS,KAAKgI,QAAQ,kBACT2uB,OAAQA,EACRnQ,MAAOA,EACPrU,MAAOA,KAGf2xB,OAAQ,WAIJ,MAHAA,GAAO9jC,KAAKrF,SAAUI,WACtBiF,KAAK21G,UAAU56G,UAAWiF,MAC1BA,KAAK01G,eAAe,MAAO36G,WACpBiF,MAEX6iD,OAAQ,SAAU1wC,EAAOpa,GAIrB,MAHAiI,MAAKrF,SAASyN,OAAO+J,EAAO,EAAGpa,GAC/BA,EAAQ6B,OAASoG,KACjBA,KAAK01G,eAAe,OAAQ39G,GAAUoa,GAC/BnS,MAEX41G,SAAU,SAAU79G,EAASoa,GACzB,MAAOnS,MAAK6iD,OAAO1wC,EAAOpa,IAE9BmwB,OAAQ,SAAUnwB,GACd,GAAIoa,GAAQnS,KAAKrF,SAASuD,QAAQnG,EAMlC,OALIoa,IAAS,IACTnS,KAAKrF,SAASyN,OAAO+J,EAAO,GAC5Bpa,EAAQ6B,OAAS,KACjBoG,KAAK01G,eAAe,UAAW39G,GAAUoa,IAEtCnS,MAEX61G,SAAU,SAAU1jG,GAChB,GAAI,GAAKA,GAASA,EAAQnS,KAAKrF,SAAS/C,OAAQ,CAC5C,GAAIG,GAAUiI,KAAKrF,SAASwX,EAC5BnS,MAAKrF,SAASyN,OAAO+J,EAAO,GAC5Bpa,EAAQ6B,OAAS,KACjBoG,KAAK01G,eAAe,UAAW39G,GAAUoa,GAE7C,MAAOnS,OAEXk/C,MAAO,WACH,GAAI14B,GAAQxmB,KAAKrF,QAIjB,OAHAqF,MAAKrF,YACLqF,KAAK21G,UAAUnvF,EAAO;AACtBxmB,KAAK01G,eAAe,SAAUlvF,EAAO,GAC9BxmB,MAEXkqF,KAAM,SAAU3wD,GACZ,MAAOoxD,GAAoB3qF,KAAKrF,UAAU,EAAMqF,KAAK2vG,iBAAiBp2E,KAE1EwxD,QAAS,WACL,MAAOJ,GAAoB3qF,KAAKrF,UAAU,IAE9Co1G,aAAc,SAAUx2E,GACpB,MAAO2xD,GAA2BlrF,KAAKrF,SAAUqF,KAAK2vG,iBAAiBp2E,KAE3Eo2E,iBAAkB,SAAUp2E,GACxB,MAAOgtE,IAAUx/F,UAAU4oG,iBAAiBxnG,KAAKnI,KAAMu5B,IAAmB,MAE9E21E,cAAe,SAAU7mB,EAAOonB,GAAjB,GAEH90G,GACAg/B,EACKh8B,CAHb,IAAIqC,KAAKwD,UAGL,IAFI7I,EAAWqF,KAAKrF,SAChBg/B,EAAY35B,KAAK2vG,iBAAiBF,GAC7B9xG,EAAM,EAAGA,EAAMhD,EAAS/C,OAAQ+F,IACrC,GAAIhD,EAASgD,GAAKuxG,cAAc7mB,EAAO1uD,GACnC,OAAO,CAInB,QAAO,GAEXg8E,UAAW,SAAUpvF,EAAUuvF,GAApB,GAEEh7G,GACDy2B,EACA33B,EAHJulF,EAASn/E,IACb,KAASlF,EAAI,EAAGA,EAAIyrB,EAAS3uB,OAAQkD,IAC7By2B,EAAQhL,EAASzrB,GACjBlB,EAAS23B,EAAM33B,OACfA,GAAUA,IAAWulF,GAAUvlF,EAAOsuB,QACtCtuB,EAAOsuB,OAAOqJ,GAElBA,EAAM33B,OAASk8G,KAI3BtmB,GAAMzoF,UAAUmgB,SAAW,QAC3BugF,GAAY/mG,OAAO8uF,GAAMzoF,UAAW,YAoBhCu5E,IACAy1B,aAAc,QACdC,eAAgB,QAChBC,WAAY,QACZC,QAAS,EACTC,YAAa,aACbC,YAAa,EACbt9G,MAAM,GAENy8D,GAASi6B,GAAM9uF,QACfC,KAAM,SAAU89D,EAAMr+D,GAClBovF,GAAMvrF,GAAGtD,KAAKwH,KAAKnI,KAAMtJ,EAAEgK,UAAW4/E,GAAiBlgF,IACvDJ,KAAKw1G,MAAQ/2C,EACbz+D,KAAKq2G,cAET53C,KAAM,SAAU7gE,GACZ,MAAIA,IACAoC,KAAKw1G,MAAQ53G,EACNoC,MAEJA,KAAKw1G,OAEhBc,SAAU,WAAA,GACFl2G,GAAUJ,KAAKI,QACfm2G,EAAWv2G,KAAKq2G,SACQ,gBAAxBj2G,EAAQ+1G,aACRI,EAAS/qB,UAAY,QACrB+qB,EAASC,gBAAkB,SAC3BD,EAASE,UAAY,IACrBF,EAASG,WAAa,MAEtBH,EAAS/qB,UAAY,SACrB+qB,EAASC,gBAAkB,QAC3BD,EAASE,UAAY,IACrBF,EAASG,WAAa,MAG9BC,OAAQ,WAAA,GAQAv2G,GACAq+D,EACAmgB,EACAj/B,EACAi3D,EACAC,EACArrB,EACAgrB,EACAC,EACAC,EACAI,EACAC,EACAh5G,EACAi5G,EACAC,EAAc/sB,EAAMnyF,EAASi8C,EAAOkjE,EAC/BC,EAOIx5G,EAWL++B,EACA06E,EACAC,EACAC,EACAxqB,CA5CR,IAAK9sF,KAAKw1G,OAAkC,IAAzBx1G,KAAKrF,SAAS/C,OAAjC,CAsBA,IAnBAoI,KAAKs2G,WACDt2G,KAAKI,QAAQu5B,WACb35B,KAAK25B,UAAU,MAEfv5B,EAAUJ,KAAKI,QACfq+D,EAAOz+D,KAAKw1G,MACZ52B,EAAM5+E,KAAKu3G,cACX53D,EAASi/B,EAAIj/B,OACbi3D,EAAah4B,EAAIg4B,WACjBC,EAAQ72G,KAAKq2G,UACb7qB,EAAYqrB,EAAMrrB,UAClBgrB,EAAkBK,EAAML,gBACxBC,EAAYI,EAAMJ,UAClBC,EAAaG,EAAMH,WACnBI,EAAc,GAAIhxB,IAClBixB,EAAgB,GAAIjxB,IACpB/nF,EAAO,GAAIuoG,IACX0Q,EAAa1rB,EAAWsrB,EAAYn4C,EAAMr+D,EAAQ21G,aAAcW,EAAYF,GAEvEW,EAAW,EAAGA,EAAWx3D,EAAO/nD,OAAQu/G,IAAY,CAOzD,IANAnjE,EAAQ2L,EAAOw3D,GACfL,EAAYL,GAAaQ,EAAe3rB,EAAWt3C,EAAMj2C,KAAM0gE,EAAMr+D,EAAQ41G,eAAgBS,EAAWjrB,GACxGsrB,EAAYJ,GAAcM,EAC1Bj5G,EAAKytF,GAAax3C,EAAMj2C,KACxBA,EAAKy4G,GAAmBxiE,EAAMwjE,SAC9BN,EAAW,GAAIlsB,IAAK8rB,EAAa/4G,GACxBJ,EAAM,EAAGA,EAAMq2C,EAAMyjE,OAAO7/G,OAAQ+F,IACzC5F,EAAUi8C,EAAMztB,SAAS5oB,GACzBusF,EAAOl2C,EAAMyjE,OAAO95G,GACpBo5G,EAAcN,GAAaQ,EAC3BF,EAAcL,GAAcprB,EAAWpB,EAAKnsF,KAAKy4G,GAAkBU,EAAU92G,EAAQ61G,WAAYS,EAAYF,GAC7GprB,EAAiB2rB,EAAe7sB,EAAMnyF,GACtCk/G,GAAgB/sB,EAAKnsF,KAAKytF,GAAaprF,EAAQ81G,OAEnDc,IAAchjE,EAAMwjE,SAAWp3G,EAAQg2G,aAEtCh2G,EAAQtH,MAAQk7C,EAAMj2C,KAAO0gE,EAAK1gE,KAAKytF,KACpC9uD,EAAQ+hC,EAAK1gE,KAAKytF,GAAa0rB,EAASn5G,KAAKytF,GAC7C4rB,EAAcF,EAAStI,UAAUlyE,MAAMA,EAAOA,GAC9C26E,EAAaH,EAASn5G,KAAKy4G,GAAmB95E,EAC9C46E,EAAWhsB,EAAW+rB,EAAY54C,EAAMr+D,EAAQ21G,aAAcW,EAAYF,GAC1E1pB,EAAenzD,IACD,MAAd88E,EACA3pB,EAAa/vD,UAAU0hC,EAAK17B,OAAO9P,EAAImkF,EAAYnkF,EAAGqkF,EAAWF,EAAY/lG,GAE7Ey7E,EAAa/vD,UAAUu6E,EAAWF,EAAYnkF,EAAGwrC,EAAK17B,OAAO1xB,EAAI+lG,EAAY/lG,GAEjFy7E,EAAapwD,MAAMA,EAAOA,GAC1B18B,KAAK25B,UAAUmzD,MAGvByqB,YAAa,WAAA,GAgBA55G,GACD5F,EACAmyF,EAjBJ/K,EAASn/E,KACT4+E,EAAM5+E,KACNI,EAAUw+E,EAAIx+E,QACdzF,EAAWikF,EAAIjkF,SACfy7G,EAAch2G,EAAQg2G,YACtBt9G,EAAOsH,EAAQtH,KACfo9G,EAAU91G,EAAQ81G,QAClB1qB,EAAYxrF,KAAKq2G,UAAU7qB,UAC3Bx3C,EAAQh0C,KAAK03G,YACb/3D,KACAg4D,EAAW,WACXh4D,EAAO73C,KAAKksC,GACZ4iE,GAAc5iE,EAAMwjE,SAAWpB,GAE/BQ,GAAcR,CAClB,KAASz4G,EAAM,EAAGA,EAAMhD,EAAS/C,OAAQ+F,IACjC5F,EAAU4C,EAASgD,GACnBusF,EAAOvvF,EAASgD,GAAKwtF,cACrBpzF,EAAQyL,WAAa0mF,IACjBpxF,GAAQk7C,EAAMj2C,KAAOmsF,EAAKnsF,KAAKytF,GAAa0qB,EAAU/2B,EAAOq2B,MAAMz3G,KAAKytF,GAC5C,IAAxBx3C,EAAMyjE,OAAO7/G,QACbunF,EAAOy4B,YAAY5jE,EAAOk2C,EAAMnyF,GAChC4/G,IACA3jE,EAAQmrC,EAAOu4B,cAEfC,IACA3jE,EAAQmrC,EAAOu4B,YACfv4B,EAAOy4B,YAAY5jE,EAAOk2C,EAAMnyF,IAGpConF,EAAOy4B,YAAY5jE,EAAOk2C,EAAMnyF,GAO5C,OAHIi8C,GAAMyjE,OAAO7/G,QACb+/G,KAGAh4D,OAAQA,EACRi3D,WAAYA,IAGpBgB,YAAa,SAAU5jE,EAAOk2C,EAAMnyF,GAChCi8C,EAAMj2C,MAAQmsF,EAAKnsF,KAAKiC,KAAKq2G,UAAU7qB,WAAaxrF,KAAKI,QAAQ81G,QACjEliE,EAAMwjE,SAAW54G,KAAKlG,IAAIwxF,EAAKnsF,KAAKiC,KAAKq2G,UAAUG,iBAAkBxiE,EAAMwjE,UAC3ExjE,EAAMyjE,OAAO3vG,KAAKoiF,GAClBl2C,EAAMztB,SAASze,KAAK/P,IAExB2/G,UAAW,WACP,OACIF,SAAU,EACVz5G,MAAOiC,KAAKI,QAAQ81G,QACpBuB,UACAlxF,gBAIRmhF,GAASnB,GAAU7lG,QACnBC,KAAM,SAAUwpG,EAAU/pG,GACL,SAAb+pG,IACAA,EAAW,GAAInf,KAEH,SAAZ5qF,IACAA,MAEJmmG,GAAUtiG,GAAGtD,KAAKwH,KAAKnI,KAAMI,GAC7BJ,KAAKmqG,SAASA,GACTzoB,EAAQ1hF,KAAKI,QAAQ48F,SACtBh9F,KAAKg9F,OAAO,SAGpBoU,MAAO,SAAU7sB,GACb,MAAOvkF,MAAKqxG,UAAUnnB,KAAK3F,IAE/BwG,QAAS,WACL,MAAO/qF,MAAKqxG,UAAUnnB,QAE1BgmB,eAAgB,SAAU7nB,GACtB,MAAOroF,MAAKqxG,UAAUnC,cAAc7mB,IAExC8mB,UAAW,SAAU9mB,GACjB,MAAOroF,MAAKmqG,WAAWgF,UAAU9mB,EAAOroF,KAAKI,QAAQ48F,OAAO/jG,MAAQ,MAG5EyuG,GAAO3gG,UAAUmgB,SAAW,OAC5Bw/E,GAAUhmG,OAAOgnG,GAAO3gG,WACxB6/F,GAAWlmG,OAAOgnG,GAAO3gG,WACzBg+E,EAAwB2iB,GAAO3gG,WAAY,aAiIvC4gG,GAAaX,GAActmG,QAC3B0jD,QAAS,WACLpkD,KAAK8rG,eAAgB/tF,MAAO,aAiBhC6pF,GAAe/wG,GAAM6J,QACrBC,KAAM,SAAUvB,EAAQ60E,EAAO/vC,GAC3BlkC,KAAKI,QAAU,GAAIimG,KACfjnG,OAAQA,EACR60E,MAAOA,EACP/vC,QAASw9C,EAAQx9C,GAAWA,EAAU,IAE1ClkC,KAAKI,QAAQsrG,YAAY1rG,SAGjC4nG,GAAap5D,OAAS,SAAUqpE,GAC5B,GAAIn2B,EAAQm2B,GAAM,CACd,GAAI/3F,EAQJ,OANIA,GADA+3F,YAAejQ,IACRiQ,EACAA,EAAIjgH,OAAS,EACb,GAAIgwG,IAAaiQ,EAAI,GAAIA,EAAI,GAAIA,EAAI,IAErC,GAAIjQ,IAAaiQ,EAAIz4G,OAAQy4G,EAAI5jC,MAAO4jC,EAAI3zE,WAK/D8oD,GAAuB4a,GAAa7gG,WAChC,SACA,QACA,YAEJq/F,GAAe1lG,OAAOknG,GAAa7gG,WAC/B8gG,GAAWhxG,GAAM6J,QACjBC,KAAM,SAAUP,GACI,SAAZA,IACAA,MAEJJ,KAAKwwF,MAAQ,GAAImX,IAAW3nG,KAAK83G,aAAa13G,EAAQowF,QACtDxwF,KAAKwwF,MAAMkb,YAAY1rG,MACvBA,KAAK+3G,WAAa33G,EAAQ8hG,UAC1BliG,KAAK6jB,GAAK89D,KAEdugB,UAAW,SAAUtkG,GACjB,MAAI8jF,GAAQ9jF,IACRoC,KAAK+3G,WAAan6G,EAClBoC,KAAK8rG,gBACE9rG,MAEJA,KAAK+3G,YAEhBD,aAAc,SAAUtnB,GAAV,GAINxxF,GACKrB,CAAT,KAJc,SAAV6yF,IACAA,MAEAxxF,KACKrB,EAAM,EAAGA,EAAM6yF,EAAM54F,OAAQ+F,IAClCqB,EAAO8I,KAAK8/F,GAAap5D,OAAOgiD,EAAM7yF,IAE1C,OAAOqB,IAEXg5G,QAAS,SAAU54G,EAAQ60E,EAAO/vC,GAC9BlkC,KAAKwwF,MAAM1oF,KAAK,GAAI8/F,IAAaxoG,EAAQ60E,EAAO/vC,KAEpD+zE,WAAY,SAAUn4F,GAClB,GAAI3N,GAAQnS,KAAKwwF,MAAMtyF,QAAQ4hB,EAC3B3N,IAAS,GACTnS,KAAKwwF,MAAMpoF,OAAO+J,EAAO,MAIrC01F,GAAS9gG,UAAUmgB,SAAW,WAC9Bk/E,GAAe1lG,OAAOmnG,GAAS9gG,WAC/BrQ,EAAEgK,OAAOmnG,GAAS9gG,WACd+kG,cAAe,SAAU7jG,GACrBjI,KAAKgI,QAAQ,iBACT+V,MAAO,YAAc9V,EAAI,IAAMA,EAAE8V,MAAQ,IACzCngB,MAAOoC,QAGfkkF,eAAgB,WACZlkF,KAAK8rG,mBAGT7J,GAAiB4F,GAASnnG,QAC1BC,KAAM,SAAUP,GACI,SAAZA,IACAA,MAEJynG,GAAS5jG,GAAGtD,KAAKwH,KAAKnI,KAAMI,GAC5BJ,KAAKiP,MAAM7O,EAAQ6O,OAAS,GAAI62E,KAChC9lF,KAAKrI,IAAIyI,EAAQzI,KAAO,GAAImuF,IAAM,EAAG,OAG7CmC,EAAqBga,GAAel7F,WAChC,QACA,QAEA+gG,GAAiBD,GAASnnG,QAC1BC,KAAM,SAAUP,GACI,SAAZA,IACAA,MAEJynG,GAAS5jG,GAAGtD,KAAKwH,KAAKnI,KAAMI,GAC5BJ,KAAKm3D,OAAO/2D,EAAQ+2D,QAAU,GAAI2uB,KAClC9lF,KAAKk4G,QAAUx2B,EAAQthF,EAAQ/H,QAAU+H,EAAQ/H,OAAS,EAC1D2H,KAAKm4G,cAAgB/3G,EAAQg4G,cAEjC//G,OAAQ,SAAUuF,GACd,MAAI8jF,GAAQ9jF,IACRoC,KAAKk4G,QAAUt6G,EACfoC,KAAKkkF,iBACElkF,MAEJA,KAAKk4G,SAEhBE,aAAc,SAAUx6G,GACpB,MAAI8jF,GAAQ9jF,IACRoC,KAAKm4G,cAAgBv6G,EACrBoC,KAAK8rG,gBACE9rG,MAEJA,KAAKm4G,iBAGpBlwB,EAAqB6f,GAAe/gG,WAAY,WA0B5CghG,IACA9a,MAAOA,GACPE,OAAQA,GACRC,eAAgBA,IAEhBjuD,GAAMnjC,KAAKmjC,KAAO,WAClB,OAAO,GAAInjC,OAAOC,WAElBsgC,GAAY1lC,GAAM6J,QAClBC,KAAM,SAAU5I,EAASqI,GACrBJ,KAAKI,QAAU1J,EAAEgK,UAAWV,KAAKI,QAASA,GAC1CJ,KAAKjI,QAAUA,GAEnBopC,MAAO,aAEPlC,KAAM,aAENmD,KAAM,WAAA,GAQEi2E,GACAppG,EACAqpG,EATAn5B,EAASn/E,KACTI,EAAUJ,KAAKI,QACfC,EAAWD,EAAQC,SACnBuzB,EAAQxzB,EAAQwzB,KACN,UAAVA,IACAA,EAAQ,GAERykF,EAAStQ,GAAgB3nG,EAAQi4G,QACjCppG,EAAQkwB,KAAQvL,EAChB0kF,EAASrpG,EAAQ5O,EACJ,IAAbA,GACAL,KAAKi/B,KAAK,GACVj/B,KAAKu4G,SAEL7uF,WAAW,WACP,GAAI8uF,GAAO,WAAA,GAIHC,GACAlsF,EACAoV,EACA+2E,CANAv5B,GAAOw5B,WAGPF,EAAWt5E,KACX5S,EAAOw2D,EAAW01B,EAAWxpG,EAAO,EAAG5O,GACvCshC,EAAWpV,EAAOlsB,EAClBq4G,EAAiBL,EAAO12E,EAAUpV,EAAM,EAAG,EAAGlsB,GAClD8+E,EAAOlgD,KAAKy5E,GACRD,EAAWH,EACXpgH,MAAM0N,eAAe4yG,GAErBr5B,EAAOo5B,SAGfC,MACD5kF,IAGX2kF,MAAO,WACHv4G,KAAK24G,UAAW,GAEpB7yF,QAAS,WACL9lB,KAAKu4G,WAGbh8E,GAAUx1B,UAAU3G,SAChBC,SAAU,IACVg4G,OAAQ,SAERrQ,GAAmBnxG,GAAM6J,QACzBC,KAAM,WACFX,KAAK44G,WAETxwF,SAAU,SAAUlZ,EAAMhQ,GACtBc,KAAK44G,OAAO9wG,MACRoH,KAAMA,EACNhQ,KAAMA,KAGdsvC,OAAQ,SAAUz2C,EAASqI,GAAnB,GAEA9H,GAEI4G,EACKpE,EAJT0rB,EAAQxmB,KAAK44G,MAEjB,IAAIx4G,GAAWA,EAAQlB,KAEnB,IADIA,EAAOkB,EAAQlB,KAAKpC,cACfhC,EAAI,EAAGA,EAAI0rB,EAAM5uB,OAAQkD,IAC9B,GAAI0rB,EAAM1rB,GAAGoU,KAAKpS,gBAAkBoC,EAAM,CACtC5G,EAAQkuB,EAAM1rB,EACd,OAIZ,GAAIxC,EACA,MAAO,IAAIA,GAAM4G,KAAKnH,EAASqI,MAI3C4nG,GAAiBr8F,QAAU,GAAIq8F,IAC/BzrE,GAAUiS,OAAS,SAAUtvC,EAAMnH,EAASqI,GACxC,MAAO4nG,IAAiBr8F,QAAQ6iC,OAAOtvC,EAAMnH,EAASqI,IAEtD6nG,IACAnpB,EAAG,SAAU93C,EAAM5mC,GAAhB,GAGUtF,GACDutF,EAHJtpC,EAAa3+C,EAAQ2+C,WACrBpd,EAAWvhC,EAAQuhC,QACvB,KAAS7mC,EAAI,EAAGA,EAAIikD,EAAWnnD,OAAQkD,GAAK,EACpCutF,EAAQ,GAAIvC,IAAM/mC,EAAWjkD,GAAIikD,EAAWjkD,EAAI,IAChDsF,EAAQy4G,YACRxwB,EAAMyF,cAAcnsD,GAExBqF,EAAKipD,OAAO5H,EAAMp1D,EAAGo1D,EAAMh3E,GAC3BswB,EAAS1O,EAAIo1D,EAAMp1D,EACnB0O,EAAStwB,EAAIg3E,EAAMh3E,GAG3BjI,EAAG,SAAU49B,EAAM5mC,GAAhB,GAGUtF,GACD+yF,EACAG,EACA3F,EALJtpC,EAAa3+C,EAAQ2+C,WACrBpd,EAAWvhC,EAAQuhC,QACvB,KAAS7mC,EAAI,EAAGA,EAAIikD,EAAWnnD,OAAQkD,GAAK,EACpC+yF,EAAa,GAAI/H,IAAM/mC,EAAWjkD,GAAIikD,EAAWjkD,EAAI,IACrDkzF,EAAY,GAAIlI,IAAM/mC,EAAWjkD,EAAI,GAAIikD,EAAWjkD,EAAI,IACxDutF,EAAQ,GAAIvC,IAAM/mC,EAAWjkD,EAAI,GAAIikD,EAAWjkD,EAAI,IACpDsF,EAAQy4G,aACR7qB,EAAUF,cAAcnsD,GACxBksD,EAAWC,cAAcnsD,GACzB0mD,EAAMyF,cAAcnsD,IAExBqF,EAAKg0D,QAAQnN,EAAYG,EAAW3F,GACpC1mD,EAAS1O,EAAIo1D,EAAMp1D,EACnB0O,EAAStwB,EAAIg3E,EAAMh3E,GAG3B3H,EAAG,SAAUs9B,EAAM5mC,GACf,GAAIxC,GAAQwC,EAAQy4G,WAAa,EAAIz4G,EAAQuhC,SAAS1O,CACtDq6D,IAAiBltF,EAAQ2+C,YAAY,EAAMnhD,GAC3CoC,KAAK8+E,EAAE93C,EAAM5mC,IAEjBu+E,EAAG,SAAU33C,EAAM5mC,GACf,GAAIxC,GAAQwC,EAAQy4G,WAAa,EAAIz4G,EAAQuhC,SAAStwB,CACtDi8E,IAAiBltF,EAAQ2+C,YAAY,EAAOnhD,GAC5CoC,KAAK8+E,EAAE93C,EAAM5mC,IAEjBwC,EAAG,SAAUokC,EAAM5mC,GAAhB,GAGUtF,GACD8sF,EACAC,EACAnkD,EACA+jD,EACAC,EACAS,EARJppC,EAAa3+C,EAAQ2+C,WACrBpd,EAAWvhC,EAAQuhC,QACvB,KAAS7mC,EAAI,EAAGA,EAAIikD,EAAWnnD,OAAQkD,GAAK,EACpC8sF,EAAU7oC,EAAWjkD,GACrB+sF,EAAU9oC,EAAWjkD,EAAI,GACzB4oC,EAAWqb,EAAWjkD,EAAI,GAC1B2sF,EAAW1oC,EAAWjkD,EAAI,GAC1B4sF,EAAQ3oC,EAAWjkD,EAAI,GACvBqtF,EAAW,GAAIrC,IAAM/mC,EAAWjkD,EAAI,GAAIikD,EAAWjkD,EAAI,IACvDsF,EAAQy4G,YACR1wB,EAAS2F,cAAcnsD,GAEvBA,EAAS1O,IAAMk1D,EAASl1D,GAAK0O,EAAStwB,IAAM82E,EAAS92E,IACrD21B,EAAKkuE,MAAM/sB,EAAUP,EAASC,EAASJ,EAAUC,EAAOhkD,GACxD/B,EAAS1O,EAAIk1D,EAASl1D,EACtB0O,EAAStwB,EAAI82E,EAAS92E,IAIlCJ,EAAG,SAAU+1B,EAAM5mC,GAAhB,GAIK04G,GAIKh+G,EACDkzF,EACA7F,EACA0F,EAVJ9uC,EAAa3+C,EAAQ2+C,WACrBpd,EAAWvhC,EAAQuhC,SACnBo3E,EAAkB34G,EAAQ24G,eAK9B,KAHwB,MAApBA,GAA+C,MAApBA,IAC3BD,EAAgBxpF,EAAKA,EAAK0X,EAAK2S,OAAOo2C,UAAU/B,aAE3ClzF,EAAI,EAAGA,EAAIikD,EAAWnnD,OAAQkD,GAAK,EACpCkzF,EAAY,GAAIlI,IAAM/mC,EAAWjkD,GAAIikD,EAAWjkD,EAAI,IACpDqtF,EAAW,GAAIrC,IAAM/mC,EAAWjkD,EAAI,GAAIikD,EAAWjkD,EAAI,IACvD+yF,EAAa,OACbztF,EAAQy4G,aACR7qB,EAAUF,cAAcnsD,GACxBwmD,EAAS2F,cAAcnsD,IAGvBksD,EADAirB,EACarrB,GAAgBqrB,EAAen3E,GAE/BA,EAASxlC,QAE1B28G,EAAgB9qB,EAChBhnD,EAAKg0D,QAAQnN,EAAYG,EAAW7F,GACpCxmD,EAAS1O,EAAIk1D,EAASl1D,EACtB0O,EAAStwB,EAAI82E,EAAS92E,GAG9B0iE,EAAG,SAAU/sC,EAAM5mC,GAAhB,GAGUtF,GACDstF,EACAD,EAKA6wB,EATJj6D,EAAa3+C,EAAQ2+C,WACrBpd,EAAWvhC,EAAQuhC,QACvB,KAAS7mC,EAAI,EAAGA,EAAIikD,EAAWnnD,OAAQkD,GAAK,EACpCstF,EAAe,GAAItC,IAAM/mC,EAAWjkD,GAAIikD,EAAWjkD,EAAI,IACvDqtF,EAAW,GAAIrC,IAAM/mC,EAAWjkD,EAAI,GAAIikD,EAAWjkD,EAAI,IACvDsF,EAAQy4G,aACRzwB,EAAa0F,cAAcnsD,GAC3BwmD,EAAS2F,cAAcnsD,IAEvBq3E,EAAqBrrB,GAA8BhsD,EAAUymD,EAAcD,GAC/EnhD,EAAKg0D,QAAQge,EAAmBnrB,WAAYmrB,EAAmBhrB,UAAW7F,GAC1ExmD,EAAS1O,EAAIk1D,EAASl1D,EACtB0O,EAAStwB,EAAI82E,EAAS92E,GAG9BH,EAAG,SAAU81B,EAAM5mC,GAAhB,GAIKgoF,GAEI2sB,EAGCj6G,EACDqtF,EASA6wB,EAlBJj6D,EAAa3+C,EAAQ2+C,WACrBpd,EAAWvhC,EAAQuhC,SACnBo3E,EAAkB34G,EAAQ24G,eAM9B,KAJwB,MAApBA,GAA+C,MAApBA,IACvBhE,EAAczlF,EAAKA,EAAK0X,EAAK2S,OAAOo2C,UACxC3H,EAAe2sB,EAAY/mB,YAAY7xF,QAAQ2xF,cAAcnsD,EAAS+rD,aAAe,IAAIhxD,MAAM,MAE1F5hC,EAAI,EAAGA,EAAIikD,EAAWnnD,OAAQkD,GAAK,EACpCqtF,EAAW,GAAIrC,IAAM/mC,EAAWjkD,GAAIikD,EAAWjkD,EAAI,IACnDsF,EAAQy4G,YACR1wB,EAAS2F,cAAcnsD,GAGvBymD,EADAA,EACeqF,GAAgBrF,EAAczmD,GAE9BA,EAASxlC,QAExB68G,EAAqBrrB,GAA8BhsD,EAAUymD,EAAcD,GAC/EnhD,EAAKg0D,QAAQge,EAAmBnrB,WAAYmrB,EAAmBhrB,UAAW7F,GAC1ExmD,EAAS1O,EAAIk1D,EAASl1D,EACtB0O,EAAStwB,EAAI82E,EAAS92E,IAe9B08E,GAAQ,EAAI,EAQZma,GAAgB,kCAChBha,GAAc,oDACd71B,GAAO,IACPwS,GAAQ,IAQRs9B,GAAatxG,GAAM6J,QACnByuC,MAAO,SAAUvyC,EAAKwD,GAAf,GAGC24G,GAFAE,EAAY,GAAI5R,IAAUjnG,GAC1BuhC,EAAW,GAAImkD,GAmCnB,OAjCAlpF,GAAIzF,QAAQ+wG,GAAe,SAAU5vG,EAAOP,EAAS86B,EAAQs9D,GAAlC,GACnB+oB,GAAUnhH,EAAQ+E,cAClB+7G,EAAaK,IAAYnhH,EACzBgnD,EAAakvC,GAAgBp7D,EAAOZ,OAexC,IAdIinF,IAAY7gD,KACRwgD,GACAl3E,EAAS1O,GAAK8rB,EAAW,GACzBpd,EAAStwB,GAAK0tC,EAAW,KAEzBpd,EAAS1O,EAAI8rB,EAAW,GACxBpd,EAAStwB,EAAI0tC,EAAW,IAE5Bk6D,EAAU7yE,OAAOzE,EAAS1O,EAAG0O,EAAStwB,GAClC0tC,EAAWnnD,OAAS,IACpBshH,EAAU,IACVn6D,EAAW32C,OAAO,EAAG,KAGzB6/F,GAASiR,GACTjR,GAASiR,GAASD,GACdl6D,WAAYA,EACZpd,SAAUA,EACVk3E,WAAYA,EACZE,gBAAiBA,IAEjB5oB,GAAaA,EAAUrzF,gBAAkB+tE,IACzCouC,EAAUxsC,YAEX,IAAIysC,IAAY7gD,GACnB,KAAUvvD,OAAM,sDAAwDowG,EAE5EH,GAAkBG,IAEfD,KAGf9Q,GAAWx8F,QAAU,GAAIw8F,IACzBrL,GAAK3tD,MAAQ,SAAUvyC,EAAKwD,GACxB,MAAO+nG,IAAWx8F,QAAQwjC,MAAMvyC,EAAKwD,IAErCgoG,GAAiBvxG,GAAM6J,QACvBC,KAAM,WACFX,KAAK44G,WAETxwF,SAAU,SAAUlZ,EAAMhQ,EAAMsuC,GAAtB,GACFhnB,GAAQxmB,KAAK44G,OACbxhH,EAAQovB,EAAM,GACdk6D,GACAxxE,KAAMA,EACNhQ,KAAMA,EACNsuC,MAAOA,IAENp2C,GAASo2C,EAAQp2C,EAAMo2C,MACxBhnB,EAAMze,QAAQ24E,GAEdl6D,EAAM1e,KAAK44E,IAGnBlyC,OAAQ,SAAUz2C,EAASqI,GAAnB,GAII+4G,GACKr+G,EAJT0rB,EAAQxmB,KAAK44G,OACbtgH,EAAQkuB,EAAM,EAClB,IAAIpmB,GAAWA,EAAQlB,KAEnB,IADIi6G,EAAY/4G,EAAQlB,KAAKpC,cACpBhC,EAAI,EAAGA,EAAI0rB,EAAM5uB,OAAQkD,IAC9B,GAAI0rB,EAAM1rB,GAAGoU,OAASiqG,EAAW,CAC7B7gH,EAAQkuB,EAAM1rB,EACd,OAIZ,MAAIxC,GACO,GAAIA,GAAM4G,KAAKnH,EAASqI,OAEnClI,OAAMqsB,aAAa,oIAA2IrJ,UAAUU,cAGhLwsF,GAAez8F,QAAU,GAAIy8F,IACzB1gG,IACA,QACA,aACA,aACA,YACA,SACA,cACA,gBAEA2gG,GAAUnwG,MAAMmM,WAAW3D,QAC3BC,KAAM,SAAU5I,EAASqI,GACrBlI,MAAMmM,WAAWJ,GAAGtD,KAAKwH,KAAKnI,MAC9BA,KAAKI,QAAU1J,EAAEgK,UAAWN,GAC5BJ,KAAKjI,QAAUA,EACfiI,KAAK08D,OAAS18D,KAAKo5G,SAAS,SAC5Bp5G,KAAKoyE,YAAcpyE,KAAKo5G,SAAS,cACjCp5G,KAAKsyE,YAActyE,KAAKo5G,SAAS,cACjCp5G,KAAKq5G,WAAar5G,KAAKo5G,SAAS,aAChCp5G,KAAKs5G,QAAU,GAAI9pB,IACnB/nB,EAAY1vE,EAASiI,KAAKI,SAC1BJ,KAAKoH,KAAKM,GAAQ1H,KAAKI,SACvBJ,KAAKu5G,mBAETxoB,KAAM,SAAUh5F,GACZiI,KAAKs5G,QAAQ3+G,SAASmN,KAAK/P,IAE/BmnD,MAAO,WACHl/C,KAAKs5G,QAAQ3+G,aAEjBmrB,QAAS,WACL9lB,KAAKs5G,QAAU,KACft5G,KAAK6H,UAEThD,YAAa,SAAUoD,GAInB,IAJS,GAGL0pB,GAFAwtD,EAASn/E,KACTw5G,EAAU32B,EAAa56E,IAEnB0pB,GAAQ6nF,IACZ7nF,EAAO6nF,EAAQC,WACXD,IAAYr6B,EAAOpnF,UAGvByhH,EAAUA,EAAQE,aAEtB,IAAI/nF,EACA,MAAOA,GAAKgoF,YAGpBrX,aAAc,WACV,MAAOtiG,MAAKs5G,SAEhB9zF,QAAS,WACL,MAAOiiD,GAAYznE,KAAKjI,UAE5B0tB,YAAa,SAAU1nB,GACnB,MAAIA,QACAiC,KAAK0lB,MAAQ3nB,GAENiC,KAAK0lB,OAGpBG,QAAS,SAAU9nB,GACf0pE,EAAYznE,KAAKjI,QAASgG,GAC1BiC,KAAKylB,YAAY1nB,GACjBiC,KAAK2lB,WAET1E,OAAQ,SAAUsE,GAAV,GACAxnB,GAAOiC,KAAKwlB,UACZC,EAAczlB,KAAKylB,eACnBF,IAAUxnB,EAAK9E,MAAQ,GAAK8E,EAAK7E,OAAS,MAAQusB,GAAe1nB,EAAK9E,QAAUwsB,EAAYxsB,OAAS8E,EAAK7E,SAAWusB,EAAYvsB,WACjI8G,KAAKylB,YAAY1nB,GACjBiC,KAAK2lB,QAAQ5nB,EAAMwnB,GACnBvlB,KAAKgI,QAAQ,SAAUjK,KAG/BA,KAAM,SAAUH,GACZ,MAAKA,OAGLoC,MAAK6lB,QAAQjoB,GAFFoC,KAAKwlB,WAIpBsrE,gBAAiB,WACb9wF,KAAK45G,oBAAqB,GAE9BC,eAAgB,WACZ75G,KAAK45G,oBAAqB,GAE9BL,gBAAiB,aAEjB5zF,QAAS,aAETyzF,SAAU,SAAU/xG,GAChB,GAAI83E,GAASn/E,IACb,OAAO,UAAUiI,GACb,GAAI0pB,GAAOwtD,EAAOt6E,YAAYoD,EAC1B0pB,KAASwtD,EAAOy6B,oBAChBz6B,EAAOn3E,QAAQX,GACXtP,QAAS45B,EACTrR,cAAerY,EACf/I,KAAMmI,MAKtByyG,eAAgB,WAAA,GACR/hH,GAAUiI,KAAKjI,QACf6mF,EAAMgF,EAAc7rF,GACpB,cACA,eAEAw9F,EAAc3W,EAAI2W,YAClBwkB,EAAan7B,EAAIm7B,WACjBlD,EAAQtjC,EAAcx7E,GACtBY,EAAOk+G,EAAMl+G,KACb2G,EAAMu3G,EAAMv3G,GAChB,QACI3G,KAAMA,EAAO0Z,SAASkjF,EAAa,IACnCj2F,IAAKA,EAAM+S,SAAS0nG,EAAY,MAGxCC,cAAe,SAAU/xG,GAAV,GACP7I,GAASY,KAAK85G,iBACdG,EAAQr3B,EAAiB36E,GACzBgrB,EAAIgnF,EAAMhnF,EAAI7zB,EAAOzG,KACrB0Y,EAAI4oG,EAAM5oG,EAAIjS,EAAOE,GACzB,OAAO,IAAIwmF,IAAM7yD,EAAG5hB,MAG5Bg3F,GAAQ75D,OAAS,SAAUz2C,EAASqI,GAChC,MAAOgoG,IAAez8F,QAAQ6iC,OAAOz2C,EAASqI,IAElDioG,GAAQlwG,WACJmwG,GAAWzxG,GAAM6J,QACjBC,KAAM,SAAUg5G,GACZ35G,KAAKkyB,cACLlyB,KAAKpG,OAAS,KACV+/G,IACA35G,KAAK25G,WAAaA,EAClB35G,KAAKk6G,YAGbp0F,QAAS,WAAA,GAKDnrB,GACKG,EALLqkF,EAASn/E,IAKb,KAJIA,KAAK25G,YACL35G,KAAK25G,WAAWhO,eAAe3rG,MAE/BrF,EAAWqF,KAAKkyB,WACXp3B,EAAI,EAAGA,EAAIH,EAAS/C,OAAQkD,IACjCqkF,EAAOjtD,WAAWp3B,GAAGgrB,SAEzB9lB,MAAKpG,OAAS,MAElBgwD,KAAM,aAENswD,QAAS,WACDl6G,KAAK25G,YACL35G,KAAK25G,WAAWjO,YAAY1rG,OAGpC8jC,OAAQ,SAAUnS,GACd3xB,KAAKkyB,WAAWpqB,KAAK6pB,GACrBA,EAAK/3B,OAASoG,MAElB41G,SAAU,SAAUjkF,EAAMs9C,GACtBjvE,KAAKkyB,WAAW9pB,OAAO6mE,EAAK,EAAGt9C,GAC/BA,EAAK/3B,OAASoG,MAElBkoB,OAAQ,SAAU/V,EAAOuB,GAAjB,GAGK5Y,GAFLqkF,EAASn/E,KACTrI,EAAMwa,EAAQuB,CAClB,KAAS5Y,EAAIqX,EAAOrX,EAAInD,EAAKmD,IACzBqkF,EAAOjtD,WAAWp3B,GAAGq/G,YAEzBn6G,MAAKkyB,WAAW9pB,OAAO+J,EAAOuB,IAElCymG,WAAY,WACRn6G,KAAKk/C,QACLl/C,KAAK8lB,WAETo5B,MAAO,WACHl/C,KAAKkoB,OAAO,EAAGloB,KAAKkyB,WAAWt6B,SAEnCwiH,WAAY,WACJp6G,KAAKpG,QACLoG,KAAKpG,OAAOwgH,cAGpBl2B,eAAgB,WACZlkF,KAAKo6G,cAETtO,cAAe,WACX9rG,KAAKo6G,cAET1E,eAAgB,SAAUztG,GACL,QAAbA,EAAE0uB,OACF32B,KAAK4pD,KAAK3hD,EAAEue,MAAOve,EAAEkK,OACD,WAAblK,EAAE0uB,QACT32B,KAAKkoB,OAAOjgB,EAAEkK,MAAOlK,EAAEue,MAAM5uB,QAEjCoI,KAAKo6G,gBAyBT7R,MACA9Y,GAAS,6BACT51D,GAAO,OACP2uE,GAAY,SAAU7gF,EAAWynE,GACjCznE,EAAU/P,UAAYw3E,GAEF,mBAAb7xF,YACHkrG,GAAe,eAAkBhZ,GAAS,WAC1CiZ,GAAgBnrG,SAASma,cAAc,OACvCixF,GAAiC,mBAAd0R,WACvB3R,GAAc9wF,UAAY6wF,GACtBE,IAAaD,GAAct4D,WAAWkqE,eAAiB7qB,KACvD+Y,GAAY,SAAU7gF,EAAWynE,GAArB,GACJmrB,GAAS,GAAIF,WACbG,EAAWD,EAAOE,gBAAgBrrB,EAAK,YACvCsrB,EAAcn9G,SAASo9G,UAAUH,EAAS96G,gBAC9CioB,GAAU/P,UAAY,GACtB+P,EAAU7P,YAAY4iG,MAI9B9R,GAAcJ,GACd/uE,GAAY,YACZovE,IACAhlE,KAAM,YACNk5D,KAAM,QAsBNllD,GAAOywD,GAAS5nG,QAChBC,KAAM,SAAUg5G,EAAYv5G,GACxBkoG,GAASrkG,GAAGtD,KAAKwH,KAAKnI,KAAM25G,GAC5B35G,KAAK46G,eACL56G,KAAKI,QAAUA,GAEnB0lB,QAAS,WACD9lB,KAAKjI,UACLiI,KAAKjI,QAAQ0hH,WAAa,KAC1Bz5G,KAAKjI,QAAU,MAEnBiI,KAAK66G,mBACLvS,GAASrkG,GAAG6hB,QAAQ3d,KAAKnI,OAE7B4pD,KAAM,SAAUrjC,EAAU0oD,GAApB,GAEOn0E,GACD6+G,EACAh/G,EACAmgH,EAUA/iH,EAdJonF,EAASn/E,IACb,KAASlF,EAAI,EAAGA,EAAIyrB,EAAS3uB,OAAQkD,IAC7B6+G,EAAapzF,EAASzrB,GACtBH,EAAWg/G,EAAWh/G,SACtBmgH,EAAY,GAAIvS,IAASoR,EAAWzyF,UAAUyyF,EAAYx6B,EAAO/+E,SACjEshF,EAAQzS,GACRkQ,EAAOy2B,SAASkF,EAAW7rC,GAE3BkQ,EAAOr7C,OAAOg3E,GAElBA,EAAUC,oBACNpgH,GAAYA,EAAS/C,OAAS,GAC9BkjH,EAAUlxD,KAAKjvD,GAEf5C,EAAUonF,EAAOpnF,QACjBA,GACA+iH,EAAUE,SAASjjH,EAASk3E,IAIxCznC,KAAM,WAEF,IADA,GAAIA,GAAOxnC,KACJwnC,EAAK5tC,QACR4tC,EAAOA,EAAK5tC,MAEhB,OAAO4tC,IAEXwzE,SAAU,SAAUt0F,EAAYuoD,GAAtB,GAGFl3E,GAFA4vB,EAAYpqB,SAASma,cAAc,MACvCkxF,IAAYjhF,EAAW,eAAkB8nE,GAAS,mBAAwBzvF,KAAKuI,SAAW,UACtFxQ,EAAU4vB,EAAUyoB,WAAWA,WAC/Br4C,IACI2pF,EAAQzS,GACRvoD,EAAWgqC,aAAa34D,EAAS2uB,EAAWwL,WAAW+8C,IAAQ,MAE/DvoD,EAAW5O,YAAY/f,GAE3BiI,KAAKi7G,WAAWljH,KAGxBkjH,WAAY,SAAUljH,GAAV,GAMJmjH,GACKpgH,EACDqgH,CADR,KANIn7G,KAAKjI,UACLiI,KAAKjI,QAAQ0hH,WAAa,MAE9Bz5G,KAAKjI,QAAUA,EACfiI,KAAKjI,QAAQ0hH,WAAaz5G,KACtBk7G,EAAQl7G,KAAKkyB,WACRp3B,EAAI,EAAGA,EAAIogH,EAAMtjH,OAAQkD,IAC1BqgH,EAAepjH,EAAQm6B,WAAWp3B,GACtCogH,EAAMpgH,GAAGmgH,WAAWE,IAG5Bj8D,MAAO,WAAA,GAKCvkD,GACKG,CAAT,KALAkF,KAAK66G,mBACD76G,KAAKjI,UACLiI,KAAKjI,QAAQ6f,UAAY,IAEzBjd,EAAWqF,KAAKkyB,WACXp3B,EAAI,EAAGA,EAAIH,EAAS/C,OAAQkD,IACjCH,EAASG,GAAGgrB,SAEhB9lB,MAAKkyB,eAETioF,WAAY,WACR,GAAIn6G,KAAKjI,QAAS,CACd,GAAIymB,GAAaxe,KAAKjI,QAAQymB,UAC1BA,IACAA,EAAWxG,YAAYhY,KAAKjI,SAEhCiI,KAAKjI,QAAU,KAEnBuwG,GAASrkG,GAAGk2G,WAAWhyG,KAAKnI,OAEhCyC,SAAU,WACN,MAAOzC,MAAKo7G,kBAEhB7yG,OAAQ,WACJ,MAAOvI,MAAKyC,YAEhB24G,eAAgB,WAAA,GAGHtgH,GAFLogH,EAAQl7G,KAAKkyB,WACbq8C,EAAS,EACb,KAASzzE,EAAI,EAAGA,EAAIogH,EAAMtjH,OAAQkD,IAC9ByzE,GAAU2sC,EAAMpgH,GAAGyN,QAEvB,OAAOgmE,IAEXu9B,cAAe,SAAU7jG,GAAV,GACP8V,GAAQ9V,EAAE8V,MACVngB,EAAQqK,EAAErK,KACA,aAAVmgB,EACA/d,KAAK/H,IAAI,UAAW2F,EAAQ,GAAKi8B,IAC1BgvE,GAAc9qF,IAAUwwE,GAAaxwE,EAAOngB,GACnDoC,KAAKq7G,iBAAiBt9F,EAAOngB,GACZ,YAAVmgB,EACP/d,KAAKkD,KAAK,UAAWtF,GACJ,WAAVmgB,GACP/d,KAAK/H,IAAI,SAAU2F,GAEvB0qG,GAASrkG,GAAG6nG,cAAc3jG,KAAKnI,KAAMiI,IAEzC/E,KAAM,SAAUgM,EAAMtR,GACdoC,KAAKjI,SACLiI,KAAKjI,QAAQ2lB,aAAaxO,EAAMtR,IAGxC09G,QAAS,SAAUjtB,GAAV,GAEIvzF,GADLqkF,EAASn/E,IACb,KAASlF,EAAI,EAAGA,EAAIuzF,EAAMz2F,OAAQkD,IAC9BqkF,EAAOj8E,KAAKmrF,EAAMvzF,GAAG,GAAIuzF,EAAMvzF,GAAG,KAG1C7C,IAAK,SAAUiX,EAAMtR,GACboC,KAAKjI,UACLiI,KAAKjI,QAAQ+B,MAAMoV,GAAQtR,IAGnC29G,OAAQ,SAAUj+G,GAAV,GAEKxC,GADLqkF,EAASn/E,IACb,KAASlF,EAAI,EAAGA,EAAIwC,EAAO1F,OAAQkD,IAC/BqkF,EAAOlnF,IAAIqF,EAAOxC,GAAG,GAAIwC,EAAOxC,GAAG,KAG3CsqB,WAAY,SAAUlW,GACdlP,KAAKjI,SACLiI,KAAKjI,QAAQm3D,gBAAgBhgD,IAGrCssG,aAAc,SAAU7hF,GACpB,GAAI00D,KAOJ,OANI10D,IACA00D,EAAMvmF,MACF2xB,GACA,UAAYE,EAAU4qD,SAASh7E,SAAS,GAAK,MAG9C8kF,GAEXotB,gBAAiB,WACb,MAAOrtB,IAAcpuF,KAAKw7G,aAAax7G,KAAK25G,WAAWhgF,eAE3D+hF,gBAAiB,SAAU99G,GACnBA,EACAoC,KAAKs7G,QAAQt7G,KAAKw7G,aAAa59G,IAE/BoC,KAAKolB,WAAWqU,KAGxBkiF,SAAU,WAAA,GACFv7G,GAAUJ,KAAK25G,WAAWv5G,QAC1BtG,IACI,SACAsG,EAAQw7G,QAQhB,OANIx7G,GAAQoD,WAAY,GACpB1J,EAAMgO,MACF,UACA+xB,KAGD//B,GAEXw0F,YAAa,WACT,MAAOH,IAAW,QAASG,GAAYtuF,KAAK27G,UAAS,MAEzDE,cAAe,WACX,MAAO1tB,IAAW,UAAWnuF,KAAK25G,WAAWv5G,QAAQ8jC,UAEzD62E,kBAAmB,WAAA,GAIP36G,GACA07G,EACK/9F,EACDqc,EANRu/E,EAAa35G,KAAK25G,WAClBiB,EAAc56G,KAAK46G,WACvB,IAAIjB,EAAY,CACRv5G,EAAUu5G,EAAWv5G,OAEzB,KAAS2d,IAAS8qF,IACVzuE,EAAah6B,EAAQqjB,IAAI1F,GACzBqc,GAAcm0D,GAAaxwE,EAAOqc,KAClCwgF,EAAY78F,GAASqc,EACrB0hF,GAAiB,EAGrBA,IACA97G,KAAK+7G,kBACDplF,OAAQ,MACRikF,YAAaA,MAK7BmB,iBAAkB,SAAU9zG,GACpBjI,KAAKpG,QACLoG,KAAKpG,OAAOmiH,iBAAiB9zG,IAGrCozG,iBAAkB,SAAUn8G,EAAMtB,GAAhB,GACVg9G,GAAc56G,KAAK46G,YACnBjvG,EAAUivG,EAAY17G,GACtBgE,EAAO2lG,GAAc3pG,GACrBk7B,IACAzuB,KACAyuB,EAAWl7B,GAAQyM,EACnB3L,KAAK+7G,kBACDplF,OAAQ,SACRikF,YAAaxgF,UAEVwgF,GAAY17G,IAElBtB,GAKDw8B,EAAWl7B,GAAQtB,EACnBoC,KAAK+7G,kBACDplF,OAAQ,MACRikF,YAAaxgF,IAEjBwgF,EAAY17G,GAAQtB,EACpBoC,KAAKkD,KAAKA,EAAMlD,KAAK2uF,OAAO/wF,EAAMimB,MAV9BlY,GACA3L,KAAKolB,WAAWliB,IAY5B23G,iBAAkB,WACd,GAAID,GAAc56G,KAAK46G,WACvB56G,MAAK+7G,kBACDplF,OAAQ,SACRikF,YAAaA,IAEjB56G,KAAK46G,gBAEToB,kBAAmB,WACf,MAAO5tB,IAAcpuF,KAAKi8G,mBAE9BA,eAAgB,WAAA,GAIHl+F,GAHLohE,EAASn/E,KACT46G,EAAc56G,KAAK46G,YACnBvsB,IACJ,KAAStwE,IAAS68F,GACdvsB,EAAMvmF,MACF+gG,GAAc9qF,GACdohE,EAAOwP,OAAOisB,EAAY78F,GAAO8F,KAGzC,OAAOwqE,IAEXM,OAAQ,SAAU9qE,GACd,GAAI+qE,IAAgB5uF,KAAKI,aAAewuF,YACxC,OAAOD,IAAO9qE,EAAI+qE,MAGtBka,GAAmBjxD,GAAKn3C,QACxB+B,SAAU,WACN,MAAO,SAAWzC,KAAKk8G,eAAiB,IAAMl8G,KAAKsuF,cAAgB,OAEvE4tB,aAAc,WACV,MAAO/tB,IAAW,SAAUnuF,KAAK25G,WAAWv6G,WAEhDu8G,SAAU,WACN,GAAIhC,GAAa35G,KAAK25G,UACtB,SAEQ,aACAA,EAAW1lC,UAGX,eACA0lC,EAAWz1E,aAIvB4nE,cAAe,SAAU7jG,GACL,WAAZA,EAAE8V,MACF/d,KAAKkD,KAAK+E,EAAE8V,MAAO9V,EAAErK,OACF,UAAZqK,EAAE8V,OAAiC,YAAZ9V,EAAE8V,OAChC/d,KAAK/H,IAAI,QAAUgQ,EAAE8V,MAAO9V,EAAErK,UAItCmrG,GAAelxD,GAAKn3C,QACpBC,KAAM,SAAUg5G,GACZ9hE,GAAK5zC,GAAGtD,KAAKwH,KAAKnI,KAAM25G,GACxB35G,KAAK6jB,GAAK81F,EAAW91F,GACrB7jB,KAAKm8G,aAETA,UAAW,WAAA,GAIEx+G,GACDy+G,EAJJj9B,EAASn/E,KACTwwF,EAAQxwF,KAAK25G,WAAWnpB,MACxBz4F,EAAUiI,KAAKjI,OACnB,KAAS4F,EAAM,EAAGA,EAAM6yF,EAAM54F,OAAQ+F,IAC9By+G,EAAW,GAAItT,IAAiBtY,EAAM7yF,IAC1CwhF,EAAOr7C,OAAOs4E,GACVrkH,GACAqkH,EAASpB,SAASjjH,IAI9B+zG,cAAe,SAAU7jG,GACL,mBAAZA,EAAE8V,OACFuqF,GAASvhG,UAAUm4C,MAAM/2C,KAAKnI,MAC9BA,KAAKm8G,aACc,aAAZl0G,EAAE8V,OACT/d,KAAKs7G,QAAQt7G,KAAKq8G,mBAG1BC,kBAAmB,WACf,MAAOluB,IAAcpuF,KAAKq8G,mBAE9BE,SAAU,WACN,OACI,gBACAv8G,KAAK25G,WAAWzX,YAAc,iBAAmB,wBAIzD8G,GAAqBD,GAAaroG,QAClC+B,SAAU,WACN,MAAO,uBAA0BzC,KAAK6jB,GAAK,KAAQ7jB,KAAKs8G,oBAAsB,IAAMt8G,KAAKo7G,iBAAmB,qBAEhHiB,eAAgB,WAAA,GACR1C,GAAa35G,KAAK25G,WAClB1qG,EAAQ0qG,EAAW1qG,QACnBtX,EAAMgiH,EAAWhiH,MACjB02F,IAEI,KACAp/E,EAAMgkB,IAGN,KACAhkB,EAAMoC,IAGN,KACA1Z,EAAIs7B,IAGJ,KACAt7B,EAAI0Z,GAERrR,KAAKu8G,WAET,OAAOluB,MAGX4a,GAAqBF,GAAaroG,QAClC+B,SAAU,WACN,MAAO,uBAA0BzC,KAAK6jB,GAAK,KAAQ7jB,KAAKs8G,oBAAsB,IAAMt8G,KAAKo7G,iBAAmB,qBAEhHiB,eAAgB,WAAA,GACR1C,GAAa35G,KAAK25G,WAClBxiD,EAASwiD,EAAWxiD,SACpB9+D,EAASshH,EAAWthH,SACpBg2F,IAEI,KACAl3B,EAAOlkC,IAGP,KACAkkC,EAAO9lD,IAGP,IACAhZ,GAEJ2H,KAAKu8G,WAET,OAAOluB,MAGX6a,GAAWrxD,GAAKn3C,QAChBC,KAAM,SAAUg5G,GACZ9hE,GAAK5zC,GAAGtD,KAAKwH,KAAKnI,MAClBA,KAAK25G,WAAaA,EAClB35G,KAAK6jB,GAAK81F,EAAW91F,GACrB7jB,KAAK4pD,MAAM+vD,KAEfl3G,SAAU,WACN,MAAO,iBAAoBzC,KAAK6jB,GAAK,KAAQ7jB,KAAKo7G,iBAAmB,iBAGzEjS,GAAiBtxD,GAAKn3C,QACtBC,KAAM,WACFk3C,GAAK5zC,GAAGtD,KAAKwH,KAAKnI,MAClBA,KAAKw8G,kBAETxB,SAAU,SAAUt0F,GAChB1mB,KAAKjI,QAAU2uB,GAEnBjkB,SAAU,WACN,MAAO,SAAWzC,KAAKo7G,iBAAmB,WAE9CW,iBAAkB,SAAU9zG,GAAV,GACV2yG,GAAc3yG,EAAE2yG,YAChBjkF,EAAS1uB,EAAE0uB,MACA,SAAXA,EACA32B,KAAKy8G,eAAe7B,GACF,WAAXjkF,GACP32B,KAAK08G,kBAAkB9B,IAG/B+B,iBAAkB,SAAUz9G,EAAMwzC,GAC9B,GAAIxrB,EAUJ,OATa,SAAThoB,EACAgoB,EAAWgiF,GACK,SAAThqG,IACHwzC,YAAgBuvD,IAChB/6E,EAAW8hF,GACJt2D,YAAgBo1D,MACvB5gF,EAAW+hF,KAGZ,GAAI/hF,GAASwrB,IAExB+pE,eAAgB,SAAU7B,GAAV,GAEH78F,GADLohE,EAASn/E,IACb,KAAS+d,IAAS68F,GACdz7B,EAAOy9B,cAAc7+F,EAAO68F,EAAY78F,KAGhD6+F,cAAe,SAAU19G,EAAMy6G,GAAhB,GAOHhoF,GANJitD,EAAM5+E,KACNjI,EAAU6mF,EAAI7mF,QACdykH,EAAgB59B,EAAI49B,cACpB34F,EAAK81F,EAAW91F,GAChBg5F,EAAUL,EAAc34F,EACvBg5F,GAWDA,EAAQnpG,SAVJie,EAAO3xB,KAAK28G,iBAAiBz9G,EAAMy6G,GACvC6C,EAAc34F,IACV9rB,QAAS45B,EACTje,MAAO,GAEX1T,KAAK8jC,OAAOnS,GACR55B,GACA45B,EAAKqpF,SAASh7G,KAAKjI,WAM/B2kH,kBAAmB,SAAU9B,GAAV,GAEN78F,GADLohE,EAASn/E,IACb,KAAS+d,IAAS68F,GACdz7B,EAAO29B,iBAAiBlC,EAAY78F,KAG5C++F,iBAAkB,SAAUnD,GAAV,GACV6C,GAAgBx8G,KAAKw8G,cACrB34F,EAAK81F,EAAW91F,GAChBg5F,EAAUL,EAAc34F,EACxBg5F,KACAA,EAAQnpG,QACc,IAAlBmpG,EAAQnpG,QACR1T,KAAKkoB,OAAOloB,KAAKkyB,WAAWh0B,QAAQ2+G,EAAQ9kH,SAAU,SAC/CykH,GAAc34F,QAKjCwrE,GAAWx3C,GAAKn3C,QAChBC,KAAM,SAAUP,GACZy3C,GAAK5zC,GAAGtD,KAAKwH,KAAKnI,MAClBA,KAAKI,QAAUA,EACfJ,KAAK+8G,KAAO,GAAI5T,KAEpB6R,SAAU,SAAUt0F,GAChB1mB,KAAKjI,QAAU2uB,EACf1mB,KAAK+8G,KAAK/B,SAASt0F,EAAW4rE,oBAElCpzC,MAAO,WACHopD,GAASvhG,UAAUm4C,MAAM/2C,KAAKnI,OAElCyC,SAAU,WACN,MAAOzC,MAAK+8G,KAAKx0G,SAAWvI,KAAKo7G,kBAErCW,iBAAkB,SAAU9zG,GACxBjI,KAAK+8G,KAAKhB,iBAAiB9zG,MAG/BmhG,GAAM,MAiBNC,GAAYhB,GAAQ3nG,QACpBC,KAAM,SAAU5I,EAASqI,GACrBioG,GAAQpkG,GAAGtD,KAAKwH,KAAKnI,KAAMjI,EAASqI,GACpCJ,KAAK23F,MAAQ,GAAItI,IAAS34F,EAAEgK,QAASs8G,IAAKp5B,EAAc7rF,EAAS,aAAawiC,YAAc6uE,IAAOppG,KAAKI,UACxGwoG,GAAY5oG,KAAKjI,QAASiI,KAAKi9G,aAC/Bj9G,KAAKk9G,aAAel9G,KAAKjI,QAAQu6F,kBACjCzD,GAAc7uF,KAAKk9G,cACnBl9G,KAAK23F,MAAMqjB,SAASh7G,KAAKk9G,cACzB15B,EAAWxjF,KAAKjI,SACZipB,MAAOhhB,KAAK08D,OACZygD,UAAWn9G,KAAKoyE,YAChBgrC,SAAUp9G,KAAKsyE,YACfxxD,UAAW9gB,KAAKq5G,aAEpBr5G,KAAKihB,UAET6E,QAAS,WACD9lB,KAAK23F,QACL33F,KAAK23F,MAAM7xE,UACX9lB,KAAK23F,MAAQ,KACb33F,KAAKk9G,aAAe,KACpBl5B,EAAahkF,KAAKjI,SACdipB,MAAOhhB,KAAK08D,OACZygD,UAAWn9G,KAAKoyE,YAChBgrC,SAAUp9G,KAAKsyE,YACfxxD,UAAW9gB,KAAKq5G,cAGxBhR,GAAQpkG,GAAG6hB,QAAQ3d,KAAKnI,OAE5B+8B,UAAW,SAAU39B,GACjB,GAAIi+G,GAAUz+G,KAAK6Q,MAAMrQ,EAAO6zB,GAAK,IAAMr0B,KAAK6Q,MAAMrQ,EAAOiS,GAAK,IAAMrR,KAAK0lB,MAAMzsB,MAAQ,IAAM+G,KAAK0lB,MAAMxsB,MAC5G8G,MAAKs9G,QAAUl+G,EACfY,KAAKk9G,aAAax/F,aAAa,UAAW2/F,IAE9CtsB,KAAM,SAAUh5F,GACZswG,GAAQpkG,GAAG8sF,KAAK5oF,KAAKnI,KAAMjI,GAC3BiI,KAAK23F,MAAM/tC,MAAM7xD,KAErBmnD,MAAO,WACHmpD,GAAQpkG,GAAGi7C,MAAM/2C,KAAKnI,MACtBA,KAAK23F,MAAMz4C,SAEfkwC,IAAK,WACD,MAAO,yBAA6BpvF,KAAKi9G,aAE7C3a,aAAc,WAAA,GAKFxpG,GAJJ8lF,EAAM5+E,KACNmiG,EAASvjB,EAAI06B,QACbl6G,EAASw/E,EAAI0+B,OAOjB,OANIl+G,KACItG,EAAO,GAAI02F,IACf12F,EAAK6B,SAASmN,KAAKq6F,GACnBrpG,EAAK6gC,UAAUA,IAAYoD,WAAW39B,EAAO6zB,GAAI7zB,EAAOiS,IACxD8wF,EAASrpG,GAENqpG,GAEXx8E,QAAS,WACD3lB,KAAKs9G,SACLt9G,KAAK+8B,UAAU/8B,KAAKs9G,UAG5BL,UAAW,WACP,MAAO,oEAAyExtB,GAAS,8DAAqEzvF,KAAK23F,MAAMpvF,SAAW,YAG5L8gG,GAAUtiG,UAAU7H,KAAO,MACH,mBAAb3B,WAA4BA,SAASggH,eAAeC,WAAW,oDAAqD,SAC3HnV,GAAQlwG,QAAQi3F,KAAM,EACtBgZ,GAAez8F,QAAQyc,SAAS,MAAOihF,GAAW,KAElDC,GAAYzxD,GAAKn3C,QACjB+B,SAAU,WACN,MAAO,MAAQzC,KAAKy7G,kBAAoBz7G,KAAKsuF,cAAgBtuF,KAAK67G,gBAAkB77G,KAAKg8G,qBAAuB,IAAMh8G,KAAKo7G,iBAAmB,QAElJtP,cAAe,SAAU7jG,GACL,cAAZA,EAAE8V,OACF/d,KAAK07G,gBAAgBzzG,EAAErK,OAE3Bi6C,GAAK5zC,GAAG6nG,cAAc3jG,KAAKnI,KAAMiI,MAGzCsgG,GAAS/Y,MAAQ8Z,GACbC,IACAkU,KACI,IACA,KAEJC,MACI,EACA,KAEJC,UACI,EACA,KAEJC,SACI,IACA,IACA,IACA,KAEJC,aACI,EACA,IACA,IACA,KAEJC,gBACI,EACA,IACA,IACA,IACA,IACA,MAGJtU,GAAQ,QACRC,GAAO,OACPC,IACAqU,eAAgB,eAChBC,eAAgB,SAChBC,eAAgB,eAChBC,iBAAkB,kBAElBvU,GAAQ,IACRC,GAAW/xD,GAAKn3C,QAChBwjF,eAAgB,WACZlkF,KAAKkD,KAAK,IAAKlD,KAAKm+G,cACpBn+G,KAAKo6G,cAETtO,cAAe,SAAU7jG,GACrB,OAAQA,EAAE8V,OACV,IAAK,OACG9V,EAAErK,MACFoC,KAAKs7G,QAAQt7G,KAAKo+G,QAAQn2G,EAAErK,QAE5BoC,KAAKolB,WAAW,OAEpB,MACJ,KAAK,aACDplB,KAAKs7G,QAAQt7G,KAAKo+G,SAAUnqC,MAAOhsE,EAAErK,QACrC,MACJ,KAAK,SACGqK,EAAErK,MACFoC,KAAKs7G,QAAQt7G,KAAKq+G,UAAUp2G,EAAErK,QAE9BoC,KAAKolB,WAAW,SAEpB,MACJ,KAAK,YACDplB,KAAK07G,gBAAgBzzG,EAAErK,MACvB,MACJ,SACI,GAAIsR,GAAOw6F,GAAczhG,EAAE8V,MACvB7O,IACAlP,KAAKkD,KAAKgM,EAAMjH,EAAErK,OAI1Bi6C,GAAK5zC,GAAG6nG,cAAc3jG,KAAKnI,KAAMiI,IAErCksD,QAAS,WACDn0D,KAAKjI,UACLiI,KAAKjI,QAAQi6B,YAAchyB,KAAK25G,WAAWxlD,YAGnDgqD,WAAY,WACR,MAAOn+G,MAAKs+G,UAAUt+G,KAAK25G,aAE/B2E,UAAW,SAAUt3E,GAAV,GAKCv+B,GACA8lE,EAAQgwC,EACHzjH,EACD0jH,EAPRr/B,EAASn/E,KACT+vF,EAAW/oD,EAAK+oD,SAChBn4F,EAASm4F,EAASn4F,MACtB,IAAIA,EAAS,EAAG,CAGZ,IAFI6Q,KAEK3N,EAAI,EAAGA,EAAIlD,EAAQkD,IACpB0jH,EAAcr/B,EAAOq/B,YAAYzuB,EAASj1F,EAAI,GAAIi1F,EAASj1F,IAC3D0jH,IAAgBD,IAChBA,EAAcC,EACd/1G,EAAMX,KAAK02G,IAGX/1G,EAAMX,KADU,MAAhB02G,EACWr/B,EAAOs/B,YAAY1uB,EAASj1F,GAAGuxE,UAE/B8S,EAAOs/B,YAAY1uB,EAASj1F,EAAI,GAAG+yF,aAAckC,EAASj1F,GAAGkzF,YAAa+B,EAASj1F,GAAGuxE,UAOzG,OAJAkC,GAAS,IAAMvuE,KAAKy+G,YAAY1uB,EAAS,GAAG1jB,UAAYs9B,GAAQlhG,EAAMvR,KAAKyyG,IACvE3iE,EAAK5mC,QAAQ8vF,SACb3hB,GAAU,KAEPA,IAGfkwC,YAAa,WAAA,GAIA3jH,GAHL2tF,EAAS1tF,UACTnD,EAAS6wF,EAAO7wF,OAChBoH,IACJ,KAASlE,EAAI,EAAGA,EAAIlD,EAAQkD,IACxBkE,EAAO8I,KAAK2gF,EAAO3tF,GAAGyO,SAAS,GAEnC,OAAOvK,GAAO9H,KAAK,MAEvBsnH,YAAa,SAAUE,EAAcC,GACjC,MAAOD,GAAa7wB,cAAgB8wB,EAAW3wB,YAAc,IAAM,KAEvEqwB,UAAW,SAAUrhB,GACjB,GAAI3O,KAoCJ,OAnCI2O,KAAWla,EAAcka,EAAO/oB,QAChCoa,EAAMvmF,MACF,SACAk1F,EAAO/oB,QAEXoa,EAAMvmF,MACF,eACAk1F,EAAO/jG,QAEXo1F,EAAMvmF,MACF,iBACA9H,KAAK4+G,cAAc5hB,KAEvB3O,EAAMvmF,MACF,kBACAk1F,EAAO8X,WAEPpzB,EAAQsb,EAAO94D,UACfmqD,EAAMvmF,MACF,iBACAk1F,EAAO94D,UAGXw9C,EAAQsb,EAAO6hB,WACfxwB,EAAMvmF,MACF,mBACA9H,KAAK8+G,eAAe9hB,MAI5B3O,EAAMvmF,MACF,SACA+xB,KAGDw0D,GAEX0wB,aAAc,WACV,MAAO3wB,IAAcpuF,KAAKq+G,UAAUr+G,KAAK25G,WAAWv5G,QAAQ48F,UAEhE8hB,eAAgB,SAAU9hB,GAAV,GAOJgiB,GACAhgH,EACKlE,EART+jH,EAAW7hB,EAAO6hB,SAClB5lH,EAAQ+jG,EAAO/jG,KAInB,IAHc,SAAVA,IACAA,EAAQ,GAER4lH,GAAYA,IAAarV,GAAO,CAGhC,IAFIwV,EAAYzV,GAAYsV,EAAS/hH,eACjCkC,KACKlE,EAAI,EAAGA,EAAIkkH,EAAUpnH,OAAQkD,IAClCkE,EAAO8I,KAAKk3G,EAAUlkH,GAAK7B,EAE/B,OAAO+F,GAAO9H,KAAK,OAG3B0nH,cAAe,SAAU5hB,GAAV,GACP6hB,GAAW7hB,EAAO6hB,SAClBI,EAAUjiB,EAAOiiB,OACrB,OAAOJ,IAAyB,UAAbA,EAAuBpV,GAAOwV,GAErDb,QAAS,SAAUrhB,GACf,GAAI1O,KAoBJ,OAnBM0O,IAA0B,aAAlBA,EAAK71E,WACX61E,IAASja,EAAcia,EAAK9oB,QAC5Boa,EAAMvmF,MACF,OACAi1F,EAAK9oB,QAELyN,EAAQqb,EAAK74D,UACbmqD,EAAMvmF,MACF,eACAi1F,EAAK74D,WAIbmqD,EAAMvmF,MACF,OACA+xB,MAILw0D,GAEX6wB,WAAY,WACR,MAAO9wB,IAAcpuF,KAAKo+G,QAAQp+G,KAAK25G,WAAWv5G,QAAQ28F,QAE9Dt6F,SAAU,WACN,MAAO,SAAWzC,KAAKsuF,cAAgB,IAAMtuF,KAAK67G,gBAAkB,IAAM1tB,GAAW,IAAKnuF,KAAKm+G,cAAqBn+G,KAAK++G,eAAiB/+G,KAAKk/G,aAAel/G,KAAKg8G,oBAAsBh8G,KAAKy7G,kBAAoB,cAG1NlT,GAASzL,KAAO8M,GACZC,GAAUD,GAASlpG,QACnBy9G,WAAY,WACR,MAAOn+G,MAAKs+G,UAAUt+G,KAAK25G,WAAWrE,aAG9C/M,GAASnB,IAAMyC,GACXC,GAAaF,GAASlpG,QACtBwjF,eAAgB,WACZ,GAAI/sB,GAASn3D,KAAKm3D,QAClBn3D,MAAKkD,KAAK,KAAMi0D,EAAOlkC,GACvBjzB,KAAKkD,KAAK,KAAMi0D,EAAO9lD,GACvBrR,KAAKkD,KAAK,IAAKlD,KAAK3H,UACpB2H,KAAKo6G,cAETjjD,OAAQ,WACJ,MAAOn3D,MAAK25G,WAAWxP,WAAWhzC,QAEtC9+D,OAAQ,WACJ,MAAO2H,MAAK25G,WAAWxP,WAAW9xG,QAEtCoK,SAAU,WACN,MAAO,WAAazC,KAAKsuF,cAAgB,IAAMtuF,KAAK67G,gBAAkB,OAAU77G,KAAKm3D,SAASlkC,EAAI,SAAajzB,KAAKm3D,SAAS9lD,EAAI,QAAYrR,KAAK3H,SAAW,IAAO2H,KAAK++G,eAAiB,IAAM/+G,KAAKk/G,aAAe,IAAMl/G,KAAKg8G,oBAAsBh8G,KAAKy7G,kBAAoB,iBAGtRlT,GAAStF,OAAS6G,GACdC,GAAWH,GAASlpG,QACpBwjF,eAAgB,WACZ,GAAIimB,GAAWnqG,KAAK25G,WAAWxP,UAC/BnqG,MAAKkD,KAAK,IAAKinG,EAASpnE,OAAO9P,GAC/BjzB,KAAKkD,KAAK,IAAKinG,EAASpnE,OAAO1xB,GAC/BrR,KAAKkD,KAAK,QAASinG,EAASpsG,KAAK9E,OACjC+G,KAAKkD,KAAK,SAAUinG,EAASpsG,KAAK7E,QAClC8G,KAAKo6G,cAETr8G,KAAM,WACF,MAAOiC,MAAK25G,WAAWxP,WAAWpsG,MAEtCglC,OAAQ,WACJ,MAAO/iC,MAAK25G,WAAWxP,WAAWpnE,QAEtCtgC,SAAU,WACN,MAAO,SAAWzC,KAAKsuF,cAAgB,IAAMtuF,KAAK67G,gBAAkB,OAAU77G,KAAK+iC,SAAS9P,EAAI,QAAYjzB,KAAK+iC,SAAS1xB,EAAI,YAAqBrR,KAAKjC,OAAO9E,MAAQ,aAAiB+G,KAAKjC,OAAO7E,OAAS,KAAQ8G,KAAK++G,eAAiB,IAAM/+G,KAAKk/G,aAAe,IAAMl/G,KAAKg8G,oBAAsB,IAAMh8G,KAAKy7G,kBAAoB,SAG7UlT,GAASvd,KAAO+e,GACZC,GAAYJ,GAASlpG,QACrBwjF,eAAgB,WACZlkF,KAAKs7G,QAAQt7G,KAAKm/G,eAClBn/G,KAAKo6G,cAETtO,cAAe,SAAU7jG,GACL,QAAZA,EAAE8V,OACF/d,KAAKs7G,QAAQt7G,KAAKo/G,aAEtBxV,GAAS3lG,GAAG6nG,cAAc3jG,KAAKnI,KAAMiI,IAEzCk3G,YAAa,WAAA,GACL1gD,GAAOz+D,KAAK25G,WAAWl7C,OACvBq9B,EAAKr9B,EAAKmwC,SACd,SAEQ,IACA9S,EAAG7oE,IAGH,IACA6oE,EAAGzqF,IAGH,QACAotD,EAAKxlE,QAAU,OAGf,SACAwlE,EAAKvlE,SAAW,QAI5BmmH,eAAgB,WACZ,MAAOjxB,IAAcpuF,KAAKm/G,gBAE9BC,UAAW,SAAUE,GACjB,GAAIxsC,GAAM9yE,KAAK25G,WAAW7mC,KAI1B,OAHIwsC,KACAxsC,EAAM56E,MAAMqJ,WAAWuxE,MAGnB,aACAA,KAGZysC,aAAc,WACV,MAAOnxB,IAAcpuF,KAAKo/G,WAAU,KAExC38G,SAAU,WACN,MAAO,qCAAyCzC,KAAKsuF,cAAgB,IAAMtuF,KAAKy7G,kBAAoB,IAAMz7G,KAAK67G,gBAAkB77G,KAAKq/G,iBAAmB,IAAMr/G,KAAKu/G,eAAiB,IAAMv/G,KAAKg8G,oBAAsB,eAG9NzT,GAAS3P,MAAQoR,GASO,mBAAbzsG,YACPyxF,GAAe7pD,SAAW5nC,SAASma,cAAc,SAEjDuyF,GAAWL,GAASlpG,QACpBwjF,eAAgB,WACZ,GAAIjV,GAAMjvE,KAAKivE,KACfjvE,MAAKkD,KAAK,IAAK+rE,EAAIh8C,GACnBjzB,KAAKkD,KAAK,IAAK+rE,EAAI59D,GACnBrR,KAAKo6G,cAETtO,cAAe,SAAU7jG,GACL,SAAZA,EAAE8V,OACF/d,KAAKkD,KAAK,QAASorF,GAAYtuF,KAAK27G,aACpC37G,KAAKkkF,kBACc,YAAZj8E,EAAE8V,OACT6rF,GAAS3lG,GAAGkwD,QAAQhsD,KAAKnI,KAAMA,KAAK25G,WAAWxlD,WAEnDy1C,GAAS3lG,GAAG6nG,cAAc3jG,KAAKnI,KAAMiI,IAEzC0zG,SAAU,SAAU2D,GAAV,GACFxlH,GAAQ8vG,GAAS3lG,GAAG03G,SAASxzG,KAAKnI,KAAMs/G,GACxCzoB,EAAO72F,KAAK25G,WAAWv5G,QAAQy2F,IAQnC,OAPIyoB,KACAzoB,EAAO3+F,MAAMqJ,WAAWs1F,IAE5B/8F,EAAMgO,MACF,OACA+uF,IAEG/8F,GAEXm1E,IAAK,WAAA,GACGA,GAAMjvE,KAAK25G,WAAWh4E,WACtB5jC,EAAOiC,KAAK25G,WAAWv5C,SAC3B,OAAO6O,GAAI9yE,QAAQqjH,KAAKvwC,EAAI59D,EAAItT,EAAKkiF,WAEzCw/B,cAAe,WACX,GAAItrD,GAAUn0D,KAAK25G,WAAWxlD,SAG9B,OAFAA,GAAU66B,GAAe76B,GACzBA,EAAUj8D,MAAMqJ,WAAW4yD,IAG/BurD,iBAAkB,WACd,GAAIrzC,EAIJ,QAHKrsE,KAAKI,aAAe48G,MACrB3wC,EAAS,OAEN8hB,GAAW,cAAe9hB,IAErC5pE,SAAU,WACN,MAAO,SAAWzC,KAAK0/G,mBAAqB,IAAM1/G,KAAKsuF,cAAgB,IAAMtuF,KAAK67G,gBAAkB,OAAU77G,KAAKivE,MAAMh8C,EAAI,QAAYjzB,KAAKivE,MAAM59D,EAAI,IAAOrR,KAAK++G,eAAiB,IAAM/+G,KAAKy7G,kBAAoB,IAAMz7G,KAAKg8G,oBAAsBh8G,KAAKk/G,aAAe,IAAMl/G,KAAKy/G,gBAAkB,aAG9SlX,GAASf,KAAOyC,GACZC,GAAgBN,GAASlpG,QACzBy9G,WAAY,WAAA,GAIAn/G,GACKlE,EAJTqkF,EAASn/E,KACT25C,EAAQ35C,KAAK25G,WAAWhgE,KAC5B,IAAIA,EAAM/hD,OAAS,EAAG,CAElB,IADIoH,KACKlE,EAAI,EAAGA,EAAI6+C,EAAM/hD,OAAQkD,IAC9BkE,EAAO8I,KAAKq3E,EAAOm/B,UAAU3kE,EAAM7+C,IAEvC,OAAOkE,GAAO9H,KAAK,SAI/BqxG,GAASlB,UAAY6C,GACjBC,IACAlH,OAAQC,GACRkE,IAAKtM,GACL9P,KAAMA,GACNlF,MAAOA,GACPohB,QAASA,GACTpV,OAAQA,GACRwU,KAAMA,GACNhiB,SAAUA,EACVE,eAAgBA,GAChB7qD,UAAWA,GAkBXy1D,IACAiZ,QAASgB,GACTha,SAAUA,GACVx3C,KAAMA,GACNyxD,UAAWA,GACXO,QAASA,GACTC,WAAYA,GACZC,SAAUA,GACVC,UAAWA,GACXC,SAAUA,GACVL,SAAUA,GACVM,cAAeA,GACff,eAAgBA,GAChBD,SAAUA,GACVJ,iBAAkBA,GAClBE,mBAAoBA,GACpBC,mBAAoBA,GACpB/Z,YAAaA,IAEbkb,MAyBAC,GAAS/B,GAAS5nG,QAClBC,KAAM,SAAUg5G,GACZrR,GAASrkG,GAAGtD,KAAKwH,KAAKnI,KAAM25G,GACxBA,GACA35G,KAAK2/G,YAGbA,SAAU,WACN,GAAI97E,GAAO7jC,KAAK25G,WAAW91E,MACvBA,KACA7jC,KAAK6jC,KAAOA,EACZA,EAAK6nE,YAAY1rG,QAGzBk/C,MAAO,WACCl/C,KAAK25G,YACL35G,KAAK25G,WAAWhO,eAAe3rG,MAEnCA,KAAK4/G,YACLtX,GAASrkG,GAAGi7C,MAAM/2C,KAAKnI,OAE3B4/G,UAAW,WACH5/G,KAAK6jC,OACL7jC,KAAK6jC,KAAK8nE,eAAe3rG,YAClBA,MAAK6jC,OAGpBg8E,QAAS,SAAUlwB,GACX3vF,KAAK6jC,OACL8rD,EAAImwB,YACJpwB,GAAWC,EAAK3vF,KAAK6jC,MACrB8rD,EAAI9rD,SAGZioE,cAAe,SAAU7jG,GACL,SAAZA,EAAE8V,QACF/d,KAAK4/G,YACL5/G,KAAK2/G,YAETrX,GAASrkG,GAAG6nG,cAAc3jG,KAAKnI,KAAMiI,IAEzCypF,aAAc,SAAU/B,GACpB,GAAI3vF,KAAK25G,WAAY,CACjB,GAAIhgF,GAAY35B,KAAK25G,WAAWhgF,WAC5BA,IACAg2D,EAAIh2D,UAAU7yB,MAAM6oF,EAAKh2D,EAAU4qD,SAASzmC,QAAQ,MAIhEiiE,aAAc,SAAUx5F,EAAU0oD,EAAK2hB,GAAzB,GAED91F,GACD6+G,EACAh/G,EACAmgH,EAJJ37B,EAASn/E,IACb,KAASlF,EAAI,EAAGA,EAAIyrB,EAAS3uB,OAAQkD,IAC7B6+G,EAAapzF,EAASzrB,GACtBH,EAAWg/G,EAAWh/G,SACtBmgH,EAAY,GAAI1Q,IAAWuP,EAAWzyF,UAAUyyF,EAAY/oB,GAC5Dj2F,GAAYA,EAAS/C,OAAS,GAC9BkjH,EAAUlxD,KAAKjvD,EAAUs0E,EAAK2hB,GAE9BlP,EAAQzS,GACRkQ,EAAOy2B,SAASkF,EAAW7rC,GAE3BkQ,EAAOr7C,OAAOg3E,IAI1BlxD,KAAM,SAAUrjC,EAAU0oD,EAAK2hB,GAC3B5wF,KAAK+/G,aAAax5F,EAAU0oD,EAAK2hB,GACjC5wF,KAAKo6G,cAET4F,WAAY,SAAUrwB,GAClB,GAAI3vF,KAAK25G,WAAY,CACjB,GAAIz1E,GAAUlkC,KAAK25G,WAAWz1E,SAC1Bw9C,GAAQx9C,IACRlkC,KAAKigH,YAAYtwB,EAAKzrD,KAIlC+7E,YAAa,SAAUtwB,EAAK/xF,GACxB,GAAIsiH,GAAWtiH,CACXsiH,IAAYvwB,EAAIswB,cAChBC,GAAYvwB,EAAIswB,aAEpBtwB,EAAIswB,YAAcC,GAEtB18G,QAAS,WACL,GAAIsvE,GAAM9yE,KAAK25G,UACf,QAAQ7mC,GAAOA,GAAOA,EAAI1yE,QAAQoD,WAAY,KAGlD8mG,GAAcD,GAAO3pG,QACrBy/G,SAAU,SAAUxwB,GAAV,GAQFz9D,GACKp3B,EACDy2B,CATR,IAAKvxB,KAAKwD,UAAV,CAQA,IALAmsF,EAAIz3D,OACJl4B,KAAK0xF,aAAa/B,GAClB3vF,KAAK6/G,QAAQlwB,GACb3vF,KAAKggH,WAAWrwB,GACZz9D,EAAalyB,KAAKkyB,WACbp3B,EAAI,EAAGA,EAAIo3B,EAAWt6B,OAAQkD,IAC/By2B,EAAQW,EAAWp3B,GACnBy2B,EAAM/tB,WACN+tB,EAAM4uF,SAASxwB,EAGvBA,GAAInvD,cAGZinE,GAAY/mG,OAAO4pG,GAAYvjG,UAAW,cAC1CqjG,GAAW5a,MAAQ8a,GACfC,GAAc,IAAO,GACrBC,GAAaF,GAAY5pG,QACzBC,KAAM,SAAU4qG,GACZjB,GAAYrmG,GAAGtD,KAAKwH,KAAKnI,MACzBA,KAAKurG,OAASA,EACdvrG,KAAK2vF,IAAM4b,EAAO6U,WAAW,KAC7B,IAAIC,GAAoBrgH,KAAKsgH,YAAYl5G,KAAKpH,KAC9CA,MAAKo6G,WAAaliH,MAAMy7B,SAAS,WAC7Bz7B,MAAM0N,eAAey6G,IACtB9V,KAEPzkF,QAAS,WACLwkF,GAAYrmG,GAAG6hB,QAAQ3d,KAAKnI,MAC5BA,KAAKurG,OAAS,KACdvrG,KAAK2vF,IAAM,MAEf/lC,KAAM,SAAUrjC,EAAU0oD,EAAK2hB,GAC3B5wF,KAAK+/G,aAAax5F,EAAU0oD,EAAK2hB,GACjC5wF,KAAKsgH,eAETA,YAAa,WACJtgH,KAAK2vF,MAGV3vF,KAAK2vF,IAAI4wB,UAAU,EAAG,EAAGvgH,KAAKurG,OAAOtyG,MAAO+G,KAAKurG,OAAOryG,QACxD8G,KAAKmgH,SAASngH,KAAK2vF,SAG3B8X,GAAY/mG,OAAO8pG,GAAWzjG,UAAW,cACrC0jG,GAAW5zG,GAAM6J,QACjBC,KAAM,WACFX,KAAKwgH,WAET3N,KAAM,SAAUnY,EAAOxQ,GACnBlqF,KAAKwgH,OAAO14G,MACRoiF,KAAMA,EACNwQ,MAAOA,IAEXA,EAAM+lB,UAAYzgH,MAEtB0gH,YAAa,SAAUr4B,GAAV,GAIA1qF,GAHL6iH,EAASxgH,KAAKwgH,OACd5oH,EAAS4oH,EAAO5oH,OAChBoH,IACJ,KAASrB,EAAM,EAAGA,EAAM/F,EAAQ+F,IACxB6iH,EAAO7iH,GAAKusF,KAAKglB,cAAc7mB,IAC/BrpF,EAAO8I,KAAK04G,EAAO7iH,GAAK+8F,MAGhC,OAAO17F,IAEX6jD,OAAQ,SAAU63C,EAAOxQ,GACrBlqF,KAAK6yG,KAAKnY,EAAOxQ,IAErBhiE,OAAQ,SAAUwyE,GAAV,GAGK/8F,GAFL6iH,EAASxgH,KAAKwgH,OACd5oH,EAAS4oH,EAAO5oH,MACpB,KAAS+F,EAAM,EAAGA,EAAM/F,EAAQ+F,IAC5B,GAAI6iH,EAAO7iH,GAAK+8F,QAAUA,EAAO,CAC7B8lB,EAAOp4G,OAAOzK,EAAK,EACnB,WAKZ+sG,GAAWD,GAAS/pG,QACpBC,KAAM,SAAU89D,GACZgsC,GAASxmG,GAAGtD,KAAKwH,KAAKnI,MACtBA,KAAKrF,YACLqF,KAAKy+D,KAAOA,GAEhBkiD,SAAU,SAAUliD,GAAV,GACFmiD,GAAW5gH,KAAKy+D,KAChBoiD,EAAkBD,EAASv2B,cAC3BA,EAAc5rB,EAAK4rB,cACnBs2B,EAAWC,EAAS79E,OAAO9P,GAAKwrC,EAAK17B,OAAO9P,GAAK2tF,EAAS79E,OAAO1xB,GAAKotD,EAAK17B,OAAO1xB,GAAKg5E,EAAYp3D,GAAK4tF,EAAgB5tF,GAAKo3D,EAAYh5E,GAAKwvG,EAAgBxvG,CAClK,OAAOsvG,IAEXD,YAAa,SAAUr4B,GAAV,GAIA1qF,GAHLhD,EAAWqF,KAAKrF,SAChB/C,EAAS+C,EAAS/C,OAClBoH,EAASyrG,GAASxmG,GAAGy8G,YAAYv4G,KAAKnI,KAAMqoF,EAChD,KAAS1qF,EAAM,EAAGA,EAAM/F,EAAQ+F,IAC5BmmC,EAAO9kC,EAAQrE,EAASgD,GAAK+iH,YAAYr4B,GAE7C,OAAOrpF,IAEX6jD,OAAQ,SAAU63C,EAAOxQ,GAAjB,GAUavsF,GATbhD,EAAWqF,KAAKrF,SAChBmmH,GAAW,CACf,IAAI9gH,KAAK2gH,SAASz2B,GAAO,CACrB,GAAIlqF,KAAKwgH,OAAO5oH,OAAS,EACrBoI,KAAK6yG,KAAKnY,EAAOxQ,OACd,CAIH,IAHKvvF,EAAS/C,QACVoI,KAAKupD,gBAEA5rD,EAAM,EAAGA,EAAMhD,EAAS/C,OAAQ+F,IACrC,GAAIhD,EAASgD,GAAKklD,OAAO63C,EAAOxQ,GAAO,CACnC42B,GAAW,CACX,OAGHA,GACD9gH,KAAK6yG,KAAKnY,EAAOxQ,GAGzB42B,GAAW,EAEf,MAAOA,IAEXv3D,cAAe,WAAA,GACPq1B,GAAM5+E,KACNy+D,EAAOmgB,EAAIngB,KACX9jE,EAAWikF,EAAIjkF,SACfw8D,EAASsH,EAAKtH,SACd4pD,EAAYtiD,EAAKxlE,QAAU,EAC3B+nH,EAAaviD,EAAKvlE,SAAW,CACjCyB,GAASmN,KAAK,GAAI4iG,IAAS,GAAI1f,KAC3BvsB,EAAK17B,OAAO9P,EACZwrC,EAAK17B,OAAO1xB,IAEZ0vG,EACAC,KACC,GAAItW,IAAS,GAAI1f,KAClB7zB,EAAOlkC,EACPwrC,EAAK17B,OAAO1xB,IAEZ0vG,EACAC,KACC,GAAItW,IAAS,GAAI1f,KAClBvsB,EAAK17B,OAAO9P,EACZkkC,EAAO9lD,IAEP0vG,EACAC,KACC,GAAItW,IAAS,GAAI1f,KAClB7zB,EAAOlkC,EACPkkC,EAAO9lD,IAEP0vG,EACAC,SAIRrW,GAAY,IACZC,GAAa,IACbC,GAAY,GACZC,GAAiBj0G,GAAM6J,QACvBC,KAAM,WACFX,KAAKihH,aAETA,UAAW,WACPjhH,KAAKkhH,WACLlhH,KAAKwnC,KAAO,GAAIijE,IAChBzqG,KAAKmhH,iBAETjiE,MAAO,WAAA,GAGMvhD,GAFLwhF,EAASn/E,KACTmhH,EAAenhH,KAAKmhH,YACxB,KAASxjH,EAAM,EAAGA,EAAMwjH,EAAavpH,OAAQ+F,IACzCwhF,EAAOj3D,OAAOi5F,EAAaxjH,GAE/BqC,MAAKihH,aAETG,WAAY,SAAU/4B,GAAV,GAQC1qF,GAPL0jH,GAAcrhH,KAAKkhH,QAAQtiH,KAAKpE,MAAM6tF,EAAMp1D,EAAI03E,UAAmB/rG,KAAKpE,MAAM6tF,EAAMh3E,EAAIs5F,KACxF3rG,EAASgB,KAAKwnC,KAAKk5E,YAAYr4B,EAMnC,KALIg5B,IACAriH,EAASA,EAAOkX,OAAOmrG,EAAWX,YAAYr4B,KAElDroF,KAAKshH,aAAatiH,GAClBA,EAAOgf,KAAKoyE,IACHzyF,EAAM,EAAGA,EAAMqB,EAAOpH,OAAQ+F,IACnC,GAAIqB,EAAOrB,GAAKuxG,cAAc7mB,GAC1B,MAAOrpF,GAAOrB,IAI1B2jH,aAAc,SAAU/6F,GAAV,GAED5oB,GACD5F,EACA4rC,EACA49E,EACA59G,EALJw7E,EAASn/E,IACb,KAASrC,EAAM,EAAGA,EAAM4oB,EAAS3uB,OAAQ+F,IAAO,CAK5C,IAJI5F,EAAUwuB,EAAS5oB,GACnBgmC,EAAS,EACT49E,EAAc3iH,KAAK8nC,IAAIkkE,GAAYC,IACnClnG,KACG5L,GACH4L,EAAQmE,KAAK/P,GACbA,EAAUA,EAAQ6B,MAEtB,MAAO+J,EAAQ/L,QACXG,EAAU4L,EAAQooB,MAClB4X,KAAY5rC,EAAQ6B,OAAS7B,EAAQ6B,OAAOe,SAAWwkF,EAAOgiC,cAAcjjH,QAAQnG,GAAW,GAAKwpH,EACpGA,GAAe3W,EAEnBrkF,GAAS5oB,GAAK0yF,QAAU1sD,IAGhCmoE,cAAe,SAAU7jG,GACL,cAAZA,EAAE8V,OAAqC,iBAAZ9V,EAAE8V,OAC7B/d,KAAKwhH,WAAWv5G,EAAElQ,UAG1BmsF,eAAgB,SAAUj8E,GACtBjI,KAAKwhH,WAAWv5G,EAAElQ,UAEtBypH,WAAY,SAAUzpH,GAAV,GAGK4F,GAFTwhF,EAASn/E,IACb,IAAyB,UAArBjI,EAAQmvB,SACR,IAASvpB,EAAM,EAAGA,EAAM5F,EAAQ4C,SAAS/C,OAAQ+F,IAC7CwhF,EAAOqiC,WAAWzpH,EAAQ4C,SAASgD,QAGnC5F,GAAQ0oH,WACR1oH,EAAQ0oH,UAAUv4F,OAAOnwB,GAE7BiI,KAAKyhH,aAAa1pH,IAG1BuJ,IAAK,SAAUilB,GACX,GAAIm7F,GAAgB5lH,MAAMiK,QAAQwgB,GAAYA,EAAS/f,MAAM,IAAM+f,EACnEud,GAAO9jC,KAAKmhH,aAAcO,GAC1B1hH,KAAK2hH,QAAQD,IAEjBhM,eAAgB,SAAUztG,GAAV,GAGCtK,GAFTwhF,EAASn/E,IACb,IAAiB,WAAbiI,EAAE0uB,OACF,IAASh5B,EAAM,EAAGA,EAAMsK,EAAEue,MAAM5uB,OAAQ+F,IACpCwhF,EAAOj3D,OAAOjgB,EAAEue,MAAM7oB,QAG1BqC,MAAK2hH,QAAQ7lH,MAAMiL,UAAUP,MAAM2B,KAAKF,EAAEue,MAAO;EAGzDm7F,QAAS,SAAUp7F,GAGf,IAHK,GAEDxuB,GADAonF,EAASn/E,KAENumB,EAAS3uB,OAAS,GACrBG,EAAUwuB,EAASwF,MACnBh0B,EAAQ2zG,YAAYvsB,GACK,UAArBpnF,EAAQmvB,SACR4c,EAAOvd,EAAUxuB,EAAQ4C,UAEzBwkF,EAAOsiC,aAAa1pH,IAIhC0pH,aAAc,SAAU/mB,GAAV,GAGFknB,GACA3uF,EACA5hB,EAII6vG,EARRh3B,EAAOwQ,EAAMxQ,MACbA,KACI03B,EAAU5hH,KAAK6hH,WAAW33B,GAC1Bj3D,EAAI2uF,EAAQ,GAAG,GACfvwG,EAAIuwG,EAAQ,GAAG,GACf5hH,KAAK8hH,OAAOF,GACZ5hH,KAAKwnC,KAAKqb,OAAO63C,EAAOxQ,IAEpBg3B,EAAUlhH,KAAKkhH,QACdA,EAAQjuF,KACTiuF,EAAQjuF,OAEPiuF,EAAQjuF,GAAG5hB,KACZ6vG,EAAQjuF,GAAG5hB,GAAK,GAAIq5F,IAAS,GAAI1f,KAC7B/3D,EAAI03E,GACJt5F,EAAIs5F,KAEJA,GACAA,OAGRuW,EAAQjuF,GAAG5hB,GAAGwxC,OAAO63C,EAAOxQ,MAIxChiE,OAAQ,SAAUnwB,GAAV,GAII4C,GACKgD,EAJTwhF,EAASn/E,IAEb,IADAjI,EAAQ4zG,eAAe3rG,MACE,UAArBjI,EAAQmvB,SAER,IADIvsB,EAAW5C,EAAQ4C,SACdgD,EAAM,EAAGA,EAAMhD,EAAS/C,OAAQ+F,IACrCwhF,EAAOj3D,OAAOvtB,EAASgD,QAEpB5F,GAAQ0oH,YACf1oH,EAAQ0oH,UAAUv4F,OAAOnwB,SAClBA,GAAQ0oH,YAGvBqB,OAAQ,SAAUF,GACd,MAAOA,GAAQ,GAAGhqH,OAAS,GAAKgqH,EAAQ,GAAGhqH,OAAS,GAExDiqH,WAAY,SAAUpjD,GAAV,GAQCxrC,GAGA5hB,EAVLg5E,EAAc5rB,EAAK4rB,cACnB03B,EAAUnjH,KAAKpE,MAAM6vF,EAAYp3D,EAAI03E,IACrCqX,EAAUpjH,KAAKpE,MAAM6vF,EAAYh5E,EAAIs5F,IACrCiX,SAIJ,KAAS3uF,EAAIr0B,KAAKpE,MAAMikE,EAAK17B,OAAO9P,EAAI03E,IAAY13E,GAAK8uF,EAAS9uF,IAC9D2uF,EAAQ,GAAG95G,KAAKmrB,EAEpB,KAAS5hB,EAAIzS,KAAKpE,MAAMikE,EAAK17B,OAAO1xB,EAAIs5F,IAAYt5F,GAAK2wG,EAAS3wG,IAC9DuwG,EAAQ,GAAG95G,KAAKuJ,EAEpB,OAAOuwG,MAYX7W,GAAgBl0G,GAAM6J,QACtBC,KAAM,SAAU46D,GACZA,EAAQn0D,KAAK,aAAcpH,KAAKoyE,YAAYhrE,KAAKpH,OACjDu7D,EAAQn0D,KAAK,aAAcpH,KAAKsyE,YAAYlrE,KAAKpH,OACjDA,KAAKjI,QAAUwjE,EAAQxjE,SAE3BmnD,MAAO,WACHl/C,KAAKiiH,gBAETn8F,QAAS,WACL9lB,KAAKiiH,qBACEjiH,MAAKjI,SAEhBq6E,YAAa,SAAUnqE,GACnB,GAAI2zG,GAAS57G,KAAKkiH,aAAaj6G,EAC1B2zG,IAGI57G,KAAKmiH,WACNniH,KAAKoiH,eAAiBpiH,KAAKqiH,cAE/BriH,KAAKsiH,WAAW1G,IALhB57G,KAAKiiH,gBAQb3vC,YAAa,WACTtyE,KAAKiiH,gBAETC,aAAc,SAAUj6G,GAEpB,IADA,GAAIyyF,GAAQzyF,EAAElQ,QACP2iG,IAAUhZ,EAAQgZ,EAAMt6F,QAAQw7G,SACnClhB,EAAQA,EAAM9gG,MAElB,IAAI8gG,EACA,MAAOA,GAAMt6F,QAAQw7G,QAG7ByG,WAAY,WACR,GAAIriH,KAAKjI,QACL,MAAOiI,MAAKjI,QAAQ+B,MAAM8hH,QAGlC0G,WAAY,SAAU1G,GACd57G,KAAKjI,UACLiI,KAAKjI,QAAQ+B,MAAM8hH,OAASA,EAC5B57G,KAAKmiH,SAAWvG,IAGxBqG,aAAc,WACNjiH,KAAKmiH,WACLniH,KAAKsiH,WAAWtiH,KAAKoiH,gBAAkB,UAChCpiH,MAAKmiH,aAIpBtxB,GAAYwX,GAAQ3nG,QACpBC,KAAM,SAAU5I,EAASqI,GAAnB,GAGEmrG,GACAxtG,CAHJsqG,IAAQpkG,GAAGtD,KAAKwH,KAAKnI,KAAMjI,EAASqI,GACpCJ,KAAKjI,QAAQ6f,UAAY5X,KAAKi9G,UAAUj9G,MACpCurG,EAASvrG,KAAKjI,QAAQu6F,kBACtBv0F,EAAO0pE,EAAY1vE,GACvBwzG,EAAOtyG,MAAQ8E,EAAK9E,MACpBsyG,EAAOryG,OAAS6E,EAAK7E,OACrB8G,KAAKk9G,aAAe3R,EACpBvrG,KAAK23F,MAAQ,GAAI6S,IAAWe,GAC5BvrG,KAAKuiH,mBAAqBviH,KAAKwiH,YAAYp7G,KAAKpH,MAChDwjF,EAAWxjF,KAAKjI,SACZipB,MAAOhhB,KAAKuiH,mBACZzhG,UAAW9gB,KAAKuiH,sBAGxBz8F,QAAS,WACLuiF,GAAQpkG,GAAG6hB,QAAQ3d,KAAKnI,MACpBA,KAAK23F,QACL33F,KAAK23F,MAAM7xE,UACX9lB,KAAK23F,MAAQ,MAEb33F,KAAKyiH,cACLziH,KAAKyiH,YAAYvjE,cACVl/C,MAAKyiH,aAEZziH,KAAK0iH,UACL1iH,KAAK0iH,QAAQ58F,gBACN9lB,MAAK0iH,SAEhB1+B,EAAahkF,KAAKjI,SACdipB,MAAOhhB,KAAKuiH,mBACZzhG,UAAW9gB,KAAKuiH,sBAGxBxxB,KAAM,SAAUh5F,GACZswG,GAAQpkG,GAAG8sF,KAAK5oF,KAAKnI,KAAMjI,GAC3BiI,KAAK23F,MAAM/tC,MAAM7xD,GAAUnB,OAAWoJ,KAAKI,QAAQwwF,MAC/C5wF,KAAKyiH,aACLziH,KAAKyiH,YAAYnhH,KAAKvJ,KAG9BmnD,MAAO,WACHmpD,GAAQpkG,GAAGi7C,MAAM/2C,KAAKnI,MACtBA,KAAK23F,MAAMz4C,QACPl/C,KAAKyiH,aACLziH,KAAKyiH,YAAYvjE,QAEjBl/C,KAAK0iH,SACL1iH,KAAK0iH,QAAQxjE,SAGrBr6C,YAAa,SAAUoD,GAAV,GAEDogF,GACAqS,CAFR,IAAI16F,KAAKyiH,YAGL,MAFIp6B,GAAQroF,KAAKg6G,cAAc/xG,GAC3ByyF,EAAQ16F,KAAKyiH,YAAYrB,WAAW/4B,IAIhD2I,MAAO,WAAA,GAUC7vF,GACAwhH,EAVA/jC,EAAM5+E,KACNwnC,EAAOo3C,EAAI+Y,MACXirB,EAAchkC,EAAIs+B,aAClB2F,IAiBJ,OAhBAr7E,GAAKiuE,SAAS,SAAUqF,GAChBA,EAAU9yF,SACV66F,EAAc/6G,KAAKgzG,EAAU9yF,WAGjC7mB,EAAUsyE,KACVkvC,EAAiB,WACjBn7E,EAAK84E,aACL,KACI,GAAI9kH,GAAOonH,EAAYrf,WACvBpiG,GAAQigC,QAAQ5lC,GAClB,MAAOyM,GACL9G,EAAQgkD,OAAOl9C,KAGvByrE,GAAWmvC,GAAe9hF,KAAK4hF,EAAgBA,GACxCxhH,GAEX2vF,gBAAiB,WACbuX,GAAQpkG,GAAG6sF,gBAAgB3oF,KAAKnI,MAC5BA,KAAKyiH,cACLziH,KAAKyiH,YAAYvjE,cACVl/C,MAAKyiH,cAGpB5I,eAAgB,WAAA,GAIJ3nF,GACAivF,EACKxjH,CAJb,IADA0qG,GAAQpkG,GAAG41G,eAAe1xG,KAAKnI,OAC1BA,KAAKyiH,YAAa,CAInB,IAHAziH,KAAKyiH,YAAc,GAAI3X,IACnB54E,EAAalyB,KAAK23F,MAAMzlE,WACxBivF,KACKxjH,EAAM,EAAGA,EAAMu0B,EAAWt6B,OAAQ+F,IACvCwjH,EAAar5G,KAAKoqB,EAAWv0B,GAAKg8G,WAEtC35G,MAAKyiH,YAAYnhH,IAAI6/G,KAG7Bx7F,QAAS,WACL3lB,KAAKk9G,aAAajkH,MAAQ+G,KAAK0lB,MAAMzsB,MACrC+G,KAAKk9G,aAAahkH,OAAS8G,KAAK0lB,MAAMxsB,OACtC8G,KAAK23F,MAAMyiB,cAEf6C,UAAW,WACP,MAAO,wDAEX1D,gBAAiB,WACbv5G,KAAKyiH,YAAc,GAAI3X,IACvB9qG,KAAK0iH,QAAU,GAAI3X,IAAc/qG,MACjCqoG,GAAQpkG,GAAGs1G,gBAAgBpxG,KAAKnI,OAEpCwiH,YAAa,SAAUv6G,GAAV,GAILyyF,GAEIooB,CALJ9iH,MAAK45G,qBAGLlf,EAAQ16F,KAAK6E,YAAYoD,GACd,UAAXA,EAAE/I,MACE4jH,EAAe9iH,KAAK+iH,cACpBD,GAAgBA,IAAiBpoB,GACjC16F,KAAKgI,QAAQ,cACTjQ,QAAS+qH,EACTxiG,cAAerY,EACf/I,KAAM,eAGVw7F,GAASooB,IAAiBpoB,GAC1B16F,KAAKgI,QAAQ,cACTjQ,QAAS2iG,EACTp6E,cAAerY,EACf/I,KAAM,eAGdc,KAAKgI,QAAQ,aACTjQ,QAAS2iG,EACTp6E,cAAerY,EACf/I,KAAM,cAEVc,KAAK+iH,cAAgBroB,GACdA,GACP16F,KAAKgI,QAAQ,SACTjQ,QAAS2iG,EACTp6E,cAAerY,EACf/I,KAAM,cAKtB2xF,GAAU9pF,UAAU7H,KAAO,SACH,mBAAb3B,WAA4BA,SAASma,cAAc,UAAU0oG,aACpE/X,GAAQlwG,QAAQozG,QAAS,EACzBnD,GAAez8F,QAAQyc,SAAS,SAAUyoE,GAAW,KAUrDma,GAAaX,GAAO3pG,QACpBy/G,SAAU,SAAUxwB,GAChBA,EAAIz3D,OACJl4B,KAAK0xF,aAAa/B,GAClB3vF,KAAK6/G,QAAQlwB,GACb3vF,KAAKggH,WAAWrwB,GAChBA,EAAImwB,YACJ9/G,KAAKgjH,aAAarzB,EAAK3vF,KAAK25G,YAC5B35G,KAAKijH,YAAYtzB,GACjB3vF,KAAKkjH,WAAWvzB,GAChB3vF,KAAKmjH,YAAYxzB,GACjB3vF,KAAKojH,QAAQzzB,GACb3vF,KAAKqjH,UAAU1zB,GACfA,EAAInvD,WAER4iF,QAAS,SAAUzzB,GAAV,GACDoN,GAAO/8F,KAAK25G,WAAWv5G,QAAQ28F,KAC/BumB,GAAU,CAcd,OAbIvmB,KACsB,aAAlBA,EAAK71E,UACLlnB,KAAKujH,gBAAgB5zB,EAAKoN,GAC1BumB,GAAU,GACFxgC,EAAcia,EAAK9oB,SAC3B0b,EAAI6zB,UAAYzmB,EAAK9oB,MACrB0b,EAAIz3D,OACJl4B,KAAKigH,YAAYtwB,EAAKoN,EAAK74D,SAC3ByrD,EAAIoN,OACJpN,EAAInvD,UACJ8iF,GAAU,IAGXA,GAEXC,gBAAiB,SAAU5zB,EAAKoN,GAAf,GAETxM,GAEIthF,EACAtX,EAGAw/D,EAPJ+yB,EAAOlqF,KAAK25G,WAAW5uB,SAEvBgS,aAAgBkF,KACZhzF,EAAQ8tF,EAAK9tF,QACbtX,EAAMolG,EAAKplG,MACf44F,EAAWZ,EAAI8zB,qBAAqBx0G,EAAMgkB,EAAGhkB,EAAMoC,EAAG1Z,EAAIs7B,EAAGt7B,EAAI0Z,IAC1D0rF,YAAgB+K,MACnB3wC,EAAS4lC,EAAK5lC,SAClBo5B,EAAWZ,EAAI+zB,qBAAqBvsD,EAAOlkC,EAAGkkC,EAAO9lD,EAAG,EAAG8lD,EAAOlkC,EAAGkkC,EAAO9lD,EAAG0rF,EAAK1kG,WAExFi4F,GAAiBC,EAAUwM,EAAKvM,OAChCb,EAAIz3D,OACC6kE,EAAKmF,aACNvS,EAAIh2D,UAAUuwD,EAAKjxF,QAAS,EAAG,EAAGixF,EAAKhxF,SAAUgxF,EAAKnnD,OAAO9P,EAAGi3D,EAAKnnD,OAAO1xB,GAEhFs+E,EAAI6zB,UAAYjzB,EAChBZ,EAAIoN,OACJpN,EAAInvD,WAER6iF,UAAW,SAAU1zB,GACjB,GAAIqN,GAASh9F,KAAK25G,WAAWv5G,QAAQ48F,MACrC,IAAIA,IAAWla,EAAcka,EAAO/oB,QAAU+oB,EAAO/jG,MAAQ,EAOzD,MANA02F,GAAIg0B,YAAc3mB,EAAO/oB,MACzB0b,EAAIi0B,UAAYrgC,EAAeyZ,EAAO/jG,MAAO,GAC7C02F,EAAIz3D,OACJl4B,KAAKigH,YAAYtwB,EAAKqN,EAAO94D,SAC7ByrD,EAAIqN,SACJrN,EAAInvD,WACG,GAGfq+E,SAAU,WACN,GAAI7hB,GAASh9F,KAAK25G,WAAWv5G,QAAQ48F,MACrC,IAAIA,GAAUA,EAAO6hB,SACjB,MAAO7hB,GAAO6hB,SAAS/hH,eAG/BmmH,YAAa,SAAUtzB,GAAV,GAGDqvB,GAFJH,EAAW7+G,KAAK6+G,UAChBA,IAAYA,IAAarV,KACrBwV,EAAYzV,GAAYsV,GACxBlvB,EAAIszB,YACJtzB,EAAIszB,YAAYjE,IAEhBrvB,EAAIk0B,QAAU7E,EACdrvB,EAAIm0B,eAAiB9E,KAIjCkE,WAAY,SAAUvzB,GAAV,GACJkvB,GAAW7+G,KAAK6+G,WAChB7hB,EAASh9F,KAAK25G,WAAWv5G,QAAQ48F,MACjC6hB,IAAYA,IAAarV,GACzB7Z,EAAIsvB,QAAUxV,GACPzM,GAAUA,EAAOiiB,UACxBtvB,EAAIsvB,QAAUjiB,EAAOiiB,UAG7BkE,YAAa,SAAUxzB,GACnB,GAAIqN,GAASh9F,KAAK25G,WAAWv5G,QAAQ48F,MACjCA,IAAUA,EAAO8X,WACjBnlB,EAAImlB,SAAW9X,EAAO8X,WAG9BkO,aAAc,SAAUrzB,EAAK3oD,GACzB0oD,GAAWC,EAAK3oD,MAGxBojE,GAAWtN,KAAOkO,GACdC,GAAYD,GAAWtqG,QACvBsiH,aAAc,SAAUrzB,GACpB,GAAI3oD,GAAOhnC,KAAK25G,WAAWrE,QAC3B5lB,IAAWC,EAAK3oD,MAGxBojE,GAAWhD,IAAM6D,GACbC,GAAeF,GAAWtqG,QAC1BsiH,aAAc,SAAUrzB,GAAV,GACN/Q,GAAM5+E,KAAK25G,WAAWxP,WACtBhzC,EAASynB,EAAIznB,OACb9+D,EAASumF,EAAIvmF,MACjBs3F,GAAIqlB,IAAI79C,EAAOlkC,EAAGkkC,EAAO9lD,EAAGhZ,EAAQ,EAAa,EAAVuG,KAAKsuF,OAGpDkd,GAAWnH,OAASiI,GAChBC,GAAaH,GAAWtqG,QACxBsiH,aAAc,SAAUrzB,GAAV,GACN/Q,GAAM5+E,KAAK25G,WAAWxP,WACtBpnE,EAAS67C,EAAI77C,OACbhlC,EAAO6gF,EAAI7gF,IACf4xF,GAAIlxB,KAAK17B,EAAO9P,EAAG8P,EAAO1xB,EAAGtT,EAAK9E,MAAO8E,EAAK7E,WAGtDkxG,GAAWpf,KAAOmgB,GACdC,GAAcJ,GAAWtqG,QACzBC,KAAM,SAAUg5G,EAAY/oB,GACxBoa,GAAW/mG,GAAGtD,KAAKwH,KAAKnI,KAAM25G,GAC9B35G,KAAK+jH,OAAS/jH,KAAK+jH,OAAO38G,KAAKpH,MAC/BA,KAAKgkH,QAAUhkH,KAAKgkH,QAAQ58G,KAAKpH,MACjCA,KAAKgoB,QAAUyrD,IACf,IAAI0kB,GAAMn4F,KAAKm4F,IAAM,GAAIS,MACrBhI,KAAS,UAAU12F,KAAKy/G,EAAW7mC,SACnCqlB,EAAIU,YAAcjI,GAEtBuH,EAAIrlB,IAAM6mC,EAAW7mC,MACjBqlB,EAAI53F,SACJP,KAAK+jH,UAEL5rB,EAAIE,OAASr4F,KAAK+jH,OAClB5rB,EAAIG,QAAUt4F,KAAKgkH,UAG3B7D,SAAU,SAAUxwB,GACa,aAAzB3vF,KAAKgoB,QAAQ2qB,UACbg9C,EAAIz3D,OACJl4B,KAAK0xF,aAAa/B,GAClB3vF,KAAK6/G,QAAQlwB,GACb3vF,KAAKikH,UAAUt0B,GACfA,EAAInvD,YAGZsrE,cAAe,SAAU7jG,GACL,QAAZA,EAAE8V,OACF/d,KAAKgoB,QAAUyrD,KACfzzE,KAAKm4F,IAAIrlB,IAAM9yE,KAAK25G,WAAW7mC,OAE/Bk4B,GAAW/mG,GAAG6nG,cAAc3jG,KAAKnI,KAAMiI,IAG/C87G,OAAQ,WACJ/jH,KAAKgoB,QAAQoZ,UACbphC,KAAKo6G,cAET4J,QAAS,WACLhkH,KAAKgoB,QAAQm9B,OAAWr8C,MAAM,yBAA4B9I,KAAKm4F,IAAIrlB,IAAM,wDAE7EmxC,UAAW,SAAUt0B,GAAV,GACHlxB,GAAOz+D,KAAK25G,WAAWl7C,OACvBmwC,EAAUnwC,EAAKmwC,SACnBjf,GAAIs0B,UAAUjkH,KAAKm4F,IAAKyW,EAAQ37E,EAAG27E,EAAQv9F,EAAGotD,EAAKxlE,QAASwlE,EAAKvlE,aAGzEkxG,GAAWxR,MAAQwS,GACfC,GAAaL,GAAWtqG,QACxBy/G,SAAU,SAAUxwB,GAAV,GACFv6D,GAAOp1B,KAAK25G,WACZ1qC,EAAM75C,EAAKuM,WACX5jC,EAAOq3B,EAAKgrC,SAChBuvB,GAAIz3D,OACJl4B,KAAK0xF,aAAa/B,GAClB3vF,KAAK6/G,QAAQlwB,GACb3vF,KAAKggH,WAAWrwB,GAChBA,EAAImwB,YACJnwB,EAAIkH,KAAOzhE,EAAKh1B,QAAQy2F,KACxBlH,EAAI6Q,UAAY,OACZxgG,KAAKojH,QAAQzzB,IACbA,EAAIu0B,SAAS9uF,EAAK++B,UAAW8a,EAAIh8C,EAAGg8C,EAAI59D,EAAItT,EAAKkiF,UAEjDjgF,KAAKqjH,UAAU1zB,KACf3vF,KAAKijH,YAAYtzB,GACjBA,EAAIw0B,WAAW/uF,EAAK++B,UAAW8a,EAAIh8C,EAAGg8C,EAAI59D,EAAItT,EAAKkiF,WAEvD0P,EAAInvD,aAGZ4pE,GAAW5C,KAAO6D,GACdC,GAAkBN,GAAWtqG,QAC7BsiH,aAAc,SAAUrzB,GAAV,GAED70F,GADL6+C,EAAQ35C,KAAK25G,WAAWhgE,KAC5B,KAAS7+C,EAAI,EAAGA,EAAI6+C,EAAM/hD,OAAQkD,IAC9B40F,GAAWC,EAAKh2C,EAAM7+C,OAIlCsvG,GAAW/C,UAAYiE,GACnBC,IACAlD,QAASxX,GACTxB,SAAUmb,GACV3yD,KAAMwyD,GACNf,UAAWgB,GACXT,QAASoB,GACTnB,WAAYoB,GACZnB,SAAUoB,GACVnB,UAAWoB,GACXnB,SAAUoB,GACVzB,SAAUoB,GACVd,cAAeoB,IA4Cf/xG,GAAUpB,GAAQoB,QAIlBokG,GAAuB,uBACvBpF,MACA5G,MACJA,GAASgG,MAAQhG,GACb8S,GAAW+C,GAAK9mG,QAChBC,KAAM,SAAU/D,EAAK6hE,EAAMr+D,GACvBonG,GAAKvjG,GAAGtD,KAAKwH,KAAKnI,KAAMpD,EAAK6hE,EAAK8wB,YAAanvF,GAC/CJ,KAAKokH,SAAW3lD,GAEpBA,KAAM,WACF,MAAOz+D,MAAKokH,UAEhBr5B,QAAS,WACL,MAAO/qF,MAAKokH,YA2BhBvwG,GAA6B,mBAAZ3T,UAA2BA,QAAQ6G,WAAa,SAAU+sE,GAC3E,MAAIA,GAAEjgE,QACK,SAAUpV,EAAIsF,GACjB,MAAOtF,GAAGoV,QAAQ9P,IAGtB+vE,EAAE51D,sBACK,SAAUzf,EAAIsF,GACjB,MAAOtF,GAAGyf,sBAAsBna,IAGpC+vE,EAAE31D,mBACK,SAAU1f,EAAIsF,GACjB,MAAOtF,GAAG0f,mBAAmBpa,IAGjC+vE,EAAE11D,kBACK,SAAU3f,EAAIsF,GACjB,MAAOtF,GAAG2f,kBAAkBra,IAG7B,SAAUkN,GACb,SAAU/S,QAAQiK,KAAK5K,SAASghB,iBAAiBtN,GAAIjR,aAE3DE,QAAQ6G,WAYNquF,GAAa,SAAU1+F,GACvB,MAAIA,GACO,QAAS0+F,GAAW32F,GAApB,GAGK4lH,GAAaC,EAAmBxpH,EAChCU,EAHJW,EAAQsC,EAAG+xD,WAAU,EACzB,IAAmB,GAAf/xD,EAAGyoB,SAAe,CACdm9F,EAAM3tH,EAAE+H,GAAK6lH,EAAS5tH,EAAEyF,GACxBX,EAAO6oH,EAAI7oH,MACf,KAAKV,IAAKU,GACN8oH,EAAO9oH,KAAKV,EAAGU,EAAKV,GAWxB,KATI,YAAYZ,KAAKuE,EAAG2lB,SACpBjoB,EAAMikH,WAAW,MAAM6D,UAAUxlH,EAAI,EAAG,GACjC,sCAAsCvE,KAAKuE,EAAG2lB,WACrDjoB,EAAM+yD,gBAAgB,MACtB/yD,EAAM+yD,gBAAgB,QACtB/yD,EAAMyB,MAAQa,EAAGb,MACjBzB,EAAMw0D,QAAUlyD,EAAGkyD,QACnBx0D,EAAM00D,SAAWpyD,EAAGoyD,UAEnB/1D,EAAI2D,EAAG2xC,WAAYt1C,EAAGA,EAAIA,EAAEu1C,YAC7Bl0C,EAAM2b,YAAYs9E,EAAWt6F,IAGrC,MAAOqB,IAGJ,SAAoBsC,GAApB,GAQC0sB,GAPAhvB,EAAQsC,EAAG+xD,WAAU,GACrB+zD,EAAW9lH,EAAG8f,iBAAiB,SAcnC,OAbIgmG,GAAS3sH,QACTs5F,GAAQ/0F,EAAMoiB,iBAAiB,WAAW+Z,QAAQ,SAAUksF,EAAW1pH,GACnE0pH,EAAUpE,WAAW,MAAM6D,UAAUM,EAASzpH,GAAI,EAAG,KAGzDqwB,EAAO1sB,EAAG8f,iBAAiB,mCAC/B2yE,GAAQ/0F,EAAMoiB,iBAAiB,oCAAoC+Z,QAAQ,SAAU75B,EAAI3D,GACrF2D,EAAGywD,gBAAgB,MACnBzwD,EAAGywD,gBAAgB,QACnBzwD,EAAGb,MAAQutB,EAAKrwB,GAAG8C,MACnBa,EAAGkyD,QAAUxlC,EAAKrwB,GAAG61D,QACrBlyD,EAAGoyD,SAAW1lC,EAAKrwB,GAAG+1D,WAEnB10D,IAGC,mBAAXxF,SAA0BA,OAAOuB,OAASvB,OAAOuB,MAAM2sB,QA8ZhE2sE,GAAQoE,aAAeA,GACvBpE,GAAQ+S,SAAW,SAAUxsG,GACzB,GAAIi8C,GAAQ,GAAIw7C,GAchB,OAbAmC,IAASC,UAAW,EACpBD,GAASE,QAAUC,GAAOC,OAC1BJ,GAASK,kBACLj6F,QAASA,EACTi8C,MAAOA,GAEX+kD,GAAahhG,EAAS0F,GAAiB1F,GAAUi8C,GACd,GAA/Bj8C,EAAQq4C,WAAWlpB,SACnBs8E,GAAWzrG,EAASA,EAAQq4C,WAAY4D,GAExC8pD,GAAe/lG,EAASi8C,GAE5BklD,KACOllD,GAEP0kD,GAAuB,WAavB,QAASvpD,GAAMrvC,GAKX,QAAS2kH,KACL,GAAI1zG,GAAI2zG,EAAer1G,KAAKvP,EACxBiR,KACAjR,EAAQA,EAAMwU,OAAOvD,EAAE,GAAGnZ,SAGlC,QAASm2C,GAAK8f,GACV42D,GACA,IAAI1zG,GAAI88C,EAAMx+C,KAAKvP,EACnB,IAAIiR,EAEA,MADAjR,GAAQA,EAAMwU,OAAOvD,EAAE,GAAGnZ,QACnBmZ,EAAE,GAGjB,QAAS4zG,KAAT,GAEQ/sH,GAAQ2X,EAEJjX,EAHJ27E,EAAQ/7E,MAAM87E,WAAWl0E,GAAO,EAEpC,IAAIm0E,EAOA,MANI37E,GAAQ,eAAe+W,KAAKvP,IAAU,iBAAiBuP,KAAKvP,IAAU,UAAUuP,KAAKvP,GACzFA,EAAQA,EAAMwU,OAAOhc,EAAM,GAAGV,QAC9Bq8E,EAAQA,EAAM6J,SACRlmF,EAASm2C,EAAK62E,MAChBr1G,EAAUw+B,EAAK82E,KAGf5wC,MAAOA,EACPr8E,OAAQA,EACR2X,QAASA,GAIrB,QAASu1G,GAAqBC,GAA9B,GACQz9B,GACA09B,EAAKC,EAmBGhyF,EAAuB5hB,EAevByO,EAjCR0wE,KACAlwF,GAAU,CACd,IAAIytC,EAAKm3E,GAAY,CA8BjB,IA7BA59B,EAAQv5C,EAAKo3E,GACT79B,GACAA,EAAQkT,GAAWlT,GACnBv5C,EAAKq3E,KAELJ,EAAMj3E,EAAKs3E,GACA,MAAPL,EACAA,EAAMj3E,EAAKs3E,GACJL,GAAO,KAAK9qH,KAAK6qH,KACxBzkH,GAAU,GAEd2kH,EAAMl3E,EAAKs3E,GACXt3E,EAAKq3E,IAEL,QAAQlrH,KAAK6qH,IAAsB,MAATz9B,GAAwB,MAAP09B,IACvC/xF,EAAI8a,EAAK82E,GAAcxzG,EAAI08B,EAAK82E,GACpCvkH,GAAU,EACD,MAAL2yB,EACA+xF,EAAM,OACM,QAAL/xF,IACP+xF,EAAM,SAED,MAAL3zG,EACA4zG,EAAM,MACM,QAAL5zG,IACP4zG,EAAM,UAEVl3E,EAAKq3E,IAEFtlH,IAAUiuC,EAAKu3E,KACdxlG,EAAO6kG,MAIXn0B,EAAM1oF,KAAKgY,GACXiuB,EAAKq3E,EAET,QACIlmH,KAAM,SACNooF,MAAOA,EACPr6D,GAAI+3F,GAAOC,EAAMD,EAAM,IAAMC,EAAMD,EAAMA,EAAMC,EAAMA,EAAM,KAC3Dz0B,MAAOA,EACPlwF,QAASA,IAIrB,QAASilH,KACL,GAAIx3E,EAAKm3E,GAAY,CACjB,GAAI/hG,GAAM4qB,EAAKy3E,EAGf,OAFAriG,GAAMA,EAAIhsB,QAAQ,iBAAkB,IACpC42C,EAAKu3E,IAEDpmH,KAAM,MACNikB,IAAKA,IA/FrB,GAmGQsiG,GAlGAt6F,EAAOrrB,CACX,OAAIpD,IAAegpH,EAAQv6F,GAChBu6F,EAAOv6F,KAiGds6F,EAAM13E,EAAK43E,IACXF,EAAMX,EAAqBW,IACpBA,EAAM13E,EAAK63E,MAClBH,EAAMF,KAEHG,EAAOv6F,GAAQs6F,IAASvmH,KAAM,SAtHlB,GACnBymH,GAAsB,oDACtBd,EAAc,eACdD,EAAa,gBACbS,EAAc,uCACdF,EAAY,iCACZT,EAAiB,SACjBQ,EAAY,QACZI,EAAa,QACbF,EAAY,OACZQ,EAAU,WACVJ,EAAc,WACdE,KAAaG,IA4GjB,OAAO,UAAU/lH,GACb,MAAIpD,IAAempH,EAAQ/lH,GAChB+lH,EAAO/lH,GAEX+lH,EAAO/lH,GAASg3F,GAAch3F,GAAOkT,IAAIm8B,OAGpD2nD,GAAgB,WAChB,GAAItqE,KACJ,OAAO,UAAU1sB,EAAOs9F,GAapB,QAAS0oB,GAAWrpH,GAChB,MAAOsU,GAAItU,EAAG4S,KAAKvP,EAAMwU,OAAO26D,IAEpC,QAASh9C,GAAKr1B,GACV,MAAOA,GAAIzF,QAAQ,aAAc,IAjBlC,GAIC8pF,GAIAx1D,EACAs6F,EAAa92C,EACb+2C,EACAC,EACAl1G,CAPJ,IAJKqsF,IACDA,EAAY,YAEZnc,EAAWnhF,EAAQs9F,EACnB1gG,GAAe8vB,EAAOy0D,GACtB,MAAOz0D,GAAMy0D,EAajB,KAXIx1D,KACAs6F,EAAU,EAAG92C,EAAM,EACnB+2C,EAAW,EACXC,GAAY,EAQTh3C,EAAMnvE,EAAMlI,SACVquH,GAAaH,EAAW,cACzBE,IACA/2C,MACQg3C,GAAaH,EAAW,cAChCE,IACA/2C,MACQg3C,GAAaH,EAAW,YAChCG,EAAYl1G,EAAE,GACdk+D,KACoB,KAAbg3C,GAAqBH,EAAW,SACvC72C,GAAO,EACa,KAAbg3C,GAAoBH,EAAW,SACtC72C,GAAO,EACa,KAAbg3C,GAAqBH,EAAW,QACvCG,GAAY,EACZh3C,KACoB,KAAbg3C,GAAoBH,EAAW,QACtCG,GAAY,EACZh3C,KACO62C,EAAW1oB,KACb6oB,IAAcD,GAAY/2C,EAAM82C,IACjCt6F,EAAI3jB,KAAKmqB,EAAKnyB,EAAMvI,UAAUwuH,EAAS92C,KACvC82C,EAAU92C,EAAMl+D,EAAE,GAAGnZ,QAEzBq3E,GAAOl+D,EAAE,GAAGnZ,QAEZq3E,GAMR,OAHI82C,GAAU92C,GACVxjD,EAAI3jB,KAAKmqB,EAAKnyB,EAAMvI,UAAUwuH,EAAS92C,KAEpCziD,EAAMy0D,GAAYx1D,MAG7BsrE,GAAa,SAAUvqE,GACvB,MAAO,UAAU/tB,GAAV,GAGKsS,GAFJoS,EAAMqJ,EAAM/tB,EAShB,OARK0kB,MAEGpS,EAAI,2DAA2D1B,KAAK5Q,IACpE0kB,EAAMqJ,EAAM/tB,GAAMsS,EAAE,IACbA,EAAI,kCAAkC1B,KAAK5Q,MAClD0kB,EAAMqJ,EAAM/tB,GAAMsS,EAAE,KAGrBoS,IAEbnc,OAAOwnC,OAASxnC,OAAOwnC,OAAO,UAC5Bg2D,GAAgB,SAAUh4E,GAC1B,MAAO,UAAUqqE,GACb,GAAI39F,GAASszB,EAAMqqE,EAInB,OAHc,OAAV39F,IACAA,EAASszB,EAAMqqE,GAAQsP,GAAUjmB,YAAY,QAAU2W,KAAMA,IAAQ39F,QAElEA,IAEb8N,OAAOwnC,OAASxnC,OAAOwnC,OAAO,UAqvD5BhtB,IACA4tE,IAAKA,GACLmc,OAAQA,GACR53B,KAAMA,GACNw0B,WAAYA,GACZE,QAASA,GACTC,SAAUA,GACVF,eAAgBA,GAChB/B,aAAcA,GACd3V,YAAaA,GACbO,UAAWA,GACXyZ,SAAUA,GACVI,eAAgBA,GAChB1E,eAAgBA,GAChBlmG,QAASqmG,GACTtD,OAAQA,GACRmE,IAAKA,GACLtK,KAAMA,GACNuK,UAAWA,GACXG,KAAMA,GACN5O,MAAOsH,GACP1Q,MAAOA,GACPj6B,OAAQA,GACRy1B,KAAM0c,GACNnc,MAAOA,GACPI,OAAQA,GACRM,MAAOA,GACPC,OAAQA,GACRpzF,KAAMA,GACN6zF,MAAOA,GACPC,IAAKA,GACLqV,eAAgBA,GAChB6F,eAAgBA,GAChBF,aAAcA,GACdC,SAAUA,GACVtrE,UAAWA,GACXyrE,iBAAkBA,GAClBxW,QAASA,IAEbt5F,MAAM0C,WAAW1C,OACbspB,QAASA,GACT2oF,SAAUA,KAEdjyG,MAAMspB,QAAQ0lF,QAAUhvG,MAAMiyG,SAASjD,QACvChvG,MAAMqpB,QAAQC,QAAUtpB,MAAMspB,QAC9BtpB,MAAMqpB,QAAQ4oF,SAAWjyG,MAAMiyG,SAC/BjyG,MAAMspB,QAAQmyD,KAAKuM,YAAchoF,MAAMy7E,KAAKuM,YAC5ChoF,MAAMspB,QAAQmyD,KAAKmM,UAAY5nF,MAAMy7E,KAAKmM,UAC1C5nF,MAAMspB,QAAQizD,MAAQv8E,MAAMu8E,MAC5Bv8E,MAAMy7E,KAAKuO,aAAehqF,MAAMspB,QAAQmyD,KAAKuO,cAC/CvrF,OAAOuB,MAAM2sB,SACC,kBAAVpuB,SAAwBA,OAAOgiC,IAAMhiC,OAAS,SAAUiiC,EAAIC,EAAIC,IACrEA,GAAMD,OAEV,SAAUniC,EAAGC,QACVA,OAAO,2BACH,cACA,yBACDD,IACL,YACG,SAAUE,GAAV,GACOq1E,GAAK,SACL7zE,EAAQvB,OAAOuB,MACf0C,EAAa1C,EAAM0C,WACnBgrE,EAAQ1tE,EAAMspB,QAAQmyD,KACtB+N,EAAU9b,EAAM8b,QAChBqB,EAAand,EAAMmd,WACnBH,EAAmBhd,EAAMgd,iBACzBppF,EAAatB,EAAMuB,YACnBC,EAAcxB,EAAMyB,aACpBqM,EAAQtP,EAAEsP,MACVkgH,EAAmB,qEACnBC,EAAyB,uFACzBC,EAAiBluH,EAAMrB,MAAM6J,QAC7BC,KAAM,SAAU46D,EAASn7D,GACrBJ,KAAKjI,QAAUrB,EAAEwvH,GACjBlmH,KAAKm0D,QAAUn0D,KAAKjI,QAAQ4C,SAAS,sBACrCyF,EAAUA,MACVJ,KAAKI,QAAUxF,KAAeoF,KAAKI,QAASJ,KAAKqmH,gBAAgBjmH,IACjEJ,KAAKsmH,cACDxvF,SAAU12B,EAAQ02B,SAClBy1C,UAAWnsE,EAAQmsE,UACnBU,kBAAkB,EAClBd,UAAW,WAEfnsE,KAAKumH,kBAAoB7vH,EAAEsP,MAAMhG,KAAKwmH,WAAYxmH,MAClDA,KAAKu7D,QAAUA,EACfv7D,KAAKymH,eAETrmH,SACIuhC,SAAU,MACVuwC,OAAQ,aACR9yE,OAAQ,EACRizE,UAAU,EACVq0C,UAAW,EACXn0C,UAAW,KAEfk0C,YAAa,WACTzmH,KAAK2mH,aAAe3gH,EAAMhG,KAAK4mH,WAAY5mH,MAC3CA,KAAK6mH,qBAAuB7gH,EAAMhG,KAAK8mH,cAAe9mH,MACtDA,KAAK+mH,mBAAqB/gH,EAAMhG,KAAKsyE,YAAatyE,MAClDA,KAAKgnH,kBAAoBhhH,EAAMhG,KAAKq5G,WAAYr5G,MAChDA,KAAKu7D,QAAQn0D,KAAK,QAASpH,KAAK2mH,cAChC3mH,KAAKu7D,QAAQn0D,KAAK,aAAcpH,KAAK2mH,cACrC3mH,KAAKu7D,QAAQn0D,KAAK,aAAcpH,KAAK+mH,oBACrC/mH,KAAKu7D,QAAQn0D,KAAK,YAAapH,KAAKgnH,mBACpChnH,KAAKu7D,QAAQxjE,QAAQ2N,GAAG,aAAeqmE,EAAI/rE,KAAK6mH,sBAChD7mH,KAAKjI,QAAQ2N,GAAG,QAAUqmE,EAAI,oBAAqB/lE,EAAMhG,KAAKinH,WAAYjnH,QAE9EknH,SAAU,WAIN,MAHKlnH,MAAKiuE,QACNjuE,KAAKiuE,MAAQ,GAAI/1E,GAAMmpB,GAAG2qD,MAAMhsE,KAAKjI,QAASiI,KAAKsmH,eAEhDtmH,KAAKiuE,OAEhBnoD,QAAS,WACL,GAAImoD,GAAQjuE,KAAKiuE,KACjBjuE,MAAKu7D,QAAQ1zD,OAAO,QAAS7H,KAAK2mH,cAClC3mH,KAAKu7D,QAAQ1zD,OAAO,aAAc7H,KAAK2mH,cACvC3mH,KAAKu7D,QAAQ1zD,OAAO,aAAc7H,KAAK+mH,oBACvC/mH,KAAKu7D,QAAQ1zD,OAAO,YAAa7H,KAAKgnH,mBACtChnH,KAAKu7D,QAAQxjE,QAAQ6xB,IAAI,aAAemiD,EAAI/rE,KAAK6mH,sBACjD7mH,KAAKjI,QAAQ6xB,IAAI,QAAUmiD,GACvBkC,IACAA,EAAMnoD,gBACC9lB,MAAKiuE,aAETjuE,MAAKsmH,aACZ17F,aAAa5qB,KAAK8oD,gBACX9oD,MAAKjI,cACLiI,MAAKm0D,cACLn0D,MAAKu7D,SAEhB8qD,gBAAiB,SAAUjmH,GAEvB,MADAA,GAAUA,OAENuhC,SAAUvhC,EAAQuhC,SAClBuwC,OAAQ9xE,EAAQ8xE,OAChB9yE,OAAQgB,EAAQhB,OAChBizE,SAAUjyE,EAAQiyE,SAClBp5E,MAAOmH,EAAQnH,MACfC,OAAQkH,EAAQlH,OAChBi7D,QAAS/zD,EAAQ+zD,QACjBgzD,OAAQ/mH,EAAQ+mH,OAChBT,UAAWtmH,EAAQsmH,UACnBn0C,UAAWnyE,EAAQmyE,YAG3B60C,cAAe,SAAU1sB,GACrB,KAAOA,IAAUA,EAAMt6F,QAAQinH,SAC3B3sB,EAAQA,EAAM9gG,MAElB,OAAO8gG,IAEX4sB,eAAgB,SAAUlnG,EAAQs6E,EAAOt6F,GACrC,GAAI+zD,GAAU/zD,EAAQ+zD,OAOtB,IANIj8D,EAAMgE,WAAWi4D,KACjBA,EAAUA,GACNp8D,QAAS2iG,EACTt6E,OAAQA,KAGZ+zC,EAEA,MADAn0D,MAAKm0D,QAAQzxD,KAAKyxD,IACX,GAGfsZ,UAAW,SAAUitB,EAAOt6F,EAASqnE,EAAa9uD,GAAvC,GAgBCshG,GAfJt4E,EAAWvhC,EAAQuhC,SACnB4lF,EAAgBnnH,EAAQhB,QAAU,EAClCm8D,EAAUv7D,KAAKu7D,QACfn8D,EAASm8D,EAAQisD,UAAU1N,iBAC3B/7G,EAAOw9D,EAAQ/1C,UACfiiG,EAAgBlsD,EAAQisD,UAAUlK,QAClCpzB,EAAOwQ,EAAMxQ,OACbjxF,EAAQwuE,EAAYxuE,MACpBC,EAASuuE,EAAYvuE,OACrBP,EAAO,EAAG2G,EAAM,CAsBpB,OArBA4qF,GAAKnnD,OAAOhG,UAAU39B,EAAOzG,KAAMyG,EAAOE,KACtCmoH,GACAv9B,EAAKnnD,OAAOhG,WAAW0qF,EAAcx0F,GAAIw0F,EAAcp2G,GAE3C,UAAZswB,GAAwBhpB,GACpBshG,EAAQr3B,EAAiBjqE,GAC7BhgB,EAAOshH,EAAMhnF,EAAIh6B,EAAQ,EACzBqG,EAAM26G,EAAM5oG,EAAInY,EAASquH,GACN,QAAZ5lF,GACPhpC,EAAOuxF,EAAKnnD,OAAO9P,EAAIh6B,EAAQsuH,EAC/BjoH,EAAM4qF,EAAK/yB,SAAS9lD,EAAInY,EAAS,GACd,SAAZyoC,GACPhpC,EAAOuxF,EAAKG,cAAcp3D,EAAIs0F,EAC9BjoH,EAAM4qF,EAAK/yB,SAAS9lD,EAAInY,EAAS,GACd,UAAZyoC,GACPhpC,EAAOuxF,EAAK/yB,SAASlkC,EAAIh6B,EAAQ,EACjCqG,EAAM4qF,EAAKG,cAAch5E,EAAIk2G,IAE7B5uH,EAAOuxF,EAAK/yB,SAASlkC,EAAIh6B,EAAQ,EACjCqG,EAAM4qF,EAAKnnD,OAAO1xB,EAAInY,EAASquH,IAG/B5uH,KAAMoqF,EAAWpqF,EAAMyG,EAAOzG,KAAMyG,EAAOzG,KAAOoF,EAAK9E,OACvDqG,IAAKyjF,EAAWzjF,EAAKF,EAAOE,IAAKF,EAAOE,IAAMvB,EAAK7E,UAG3Dc,KAAM,SAAU0gG,EAAOt6F,GACnBJ,KAAKyyE,MAAMioB,EAAOA,EAAO9/F,KAAeoF,KAAKI,QAASJ,KAAKqmH,gBAAgB3rB,EAAMt6F,QAAQinH,SAAUjnH,KAEvGU,KAAM,WAAA,GACEmtE,GAAQjuE,KAAKiuE,MACbtiE,EAAU3L,KAAKmiH,eACZniH,MAAKmiH,SACZv3F,aAAa5qB,KAAK0nH,cACdz5C,GAASA,EAAMzqE,WAAamI,IAAY3L,KAAKu7D,QAAQvzD,QAAQ,gBACzDjQ,QAAS4T,EAAQ+uF,MACjBt6E,OAAQzU,EAAQyU,OAChB6tD,MAAOA,KAEXA,EAAMxB,SAGdw6C,WAAY,SAAUh/G,GAClBA,EAAE9D,iBACFnE,KAAKc,QAET2xE,MAAO,SAAUryD,EAAQs6E,EAAOt6F,EAASuY,EAAOib,GAAzC,GAOCq6C,GAOIxG,EAbJ97D,EAAU3L,KAAKmiH,QACnBv3F,cAAa5qB,KAAK8oD,UACdn9C,IAAYA,EAAQ+uF,QAAUA,GAASt6F,EAAQ+mH,QAAUx7G,EAAQyU,SAAWA,KAGhFwK,aAAa5qB,KAAK0nH,cACdz5C,EAAQjuE,KAAKknH,YACZlnH,KAAKu7D,QAAQvzD,QAAQ,eAClBjQ,QAAS2iG,EACTt6E,OAAQA,EACR6tD,MAAOA,KACLjuE,KAAKsnH,eAAelnG,EAAQs6E,EAAOt6F,KACzCJ,KAAK2nH,UAAUvnH,GACXqnE,EAAcznE,KAAK4nH,SAASxnH,GAC5B6tE,EAAMzqE,WACNyqE,EAAMxB,OAAM,GAEhBzsE,KAAKmiH,UACD/hH,QAASA,EACTqnE,YAAaA,EACbizB,MAAOA,EACPt6E,OAAQA,EACRuhB,SAAU3hC,KAAKytE,UAAUrtE,EAAQ+mH,OAASzsB,EAAQt6E,EAAQhgB,EAASqnE,EAAa9uD,IAEhFib,EACA5zB,KAAK0nH,aAAeh+F,WAAW1pB,KAAKumH,kBAAmBnmH,EAAQmyE,WAAa,GAE5EvyE,KAAKwmH,gBAIjBA,WAAY,WAAA,GACJ76G,GAAU3L,KAAKmiH,SACfxgF,EAAWh2B,EAAQg2B,QACvB3hC,MAAKknH,WAAW16C,KAAK7qC,EAAShpC,KAAMgpC,EAASriC,MAEjDqoH,UAAW,SAAUvnH,GACbA,EAAQiyE,UAAYryE,KAAK6nH,eACzB7nH,KAAKjI,QAAQutC,YAAY,sBACzBtlC,KAAK6nH,aAAa3/F,eACXloB,MAAK6nH,cAEXznH,EAAQiyE,UAAaryE,KAAK6nH,eAC3B7nH,KAAKjI,QAAQuC,SAAS,sBACtB0F,KAAK6nH,aAAenxH,EAAEyvH,GAAwBl+F,UAAUjoB,KAAKjI,WAGrE6uH,WAAY,SAAU3+G,GAAV,GAGA7H,GAFJs6F,EAAQ16F,KAAKonH,cAAcn/G,EAAElQ,QAC7B2iG,KACIt6F,EAAUxF,KAAeoF,KAAKI,QAASJ,KAAKqmH,gBAAgB3rB,EAAMt6F,QAAQinH,UAC1EjnH,GAAWA,EAAQ8xE,QAAUjqE,EAAE/I,MAC/Bc,KAAKyyE,MAAMxqE,EAAElQ,QAAS2iG,EAAOt6F,EAAS6H,EAAEqY,eAAe,KAInEsnG,SAAU,SAAUxnH,GAAV,GAEFnH,GAAOC,EAKPsK,EANAyqE,EAAQjuE,KAAKknH,UAmBjB,OAjBAlnH,MAAKjI,QAAQE,KACTgB,MAAO,OACPC,OAAQ,SAERsK,EAAUyqE,EAAMzqE,UACfA,GACDyqE,EAAM50E,QAAQW,OAElBgG,KAAKjI,QAAQE,KACTgB,MAAOyoF,EAAQthF,EAAQnH,OAASmH,EAAQnH,MAAQ,OAChDC,OAAQwoF,EAAQthF,EAAQlH,QAAUkH,EAAQlH,OAAS,SAEvDD,EAAQO,EAAWwG,KAAKjI,SACxBmB,EAASQ,EAAYsG,KAAKjI,SACrByL,GACDyqE,EAAM50E,QAAQyH,QAGd7H,MAAOA,EACPC,OAAQA,IAGhBo5E,YAAa,SAAUrqE,GAAV,GAEDo/G,GACA17G,CAFJ3L,MAAKiuE,QAAUjuE,KAAK8nH,oBAAoB7/G,EAAEqY,iBACtC+mG,EAAUrnH,KACV2L,EAAU07G,EAAQlF,SAClBx2G,GAAWA,EAAQvL,QAAQiyE,WAC3Bg1C,EAAQv+D,SAAWp/B,WAAW,WAC1BkB,aAAay8F,EAAQK,cACrBL,EAAQvmH,QACT6K,EAAQvL,QAAQsmH,WAAa,MAI5CrN,WAAY,SAAUpxG,GAAV,GAGA7H,GAEIuhC,EAJRh2B,EAAU3L,KAAKmiH,QACfx2G,IAAW1D,EAAElQ,UACTqI,EAAUuL,EAAQvL,QACE,UAApBA,EAAQuhC,WACJA,EAAW3hC,KAAKytE,UAAUxlE,EAAElQ,QAASqI,EAASuL,EAAQ87D,YAAax/D,EAAEqY,eACzE3U,EAAQg2B,SAAWA,EACnB3hC,KAAKknH,WAAW7tH,QAAQpB,KACpBU,KAAMgpC,EAAShpC,KACf2G,IAAKqiC,EAASriC,SAK9BwnH,cAAe,SAAU7+G,GACjBjI,KAAKiuE,QAAUjuE,KAAK8nH,oBAAoB7/G,KACxC2iB,aAAa5qB,KAAK0nH,cAClB1nH,KAAKc,SAGbgnH,oBAAqB,SAAU7/G,GAC3B,MAAOA,GAAE0jB,eAAiBj1B,EAAEuR,EAAE0jB,eAAe1T,QAAQjY,KAAKiuE,MAAM50E,SAASzB,SAGjFM,GAAMspB,QAAQ4kG,eAAiBA,GACjCzvH,OAAOuB,MAAM2sB,SACC,kBAAVpuB,SAAwBA,OAAOgiC,IAAMhiC,OAAS,SAAUiiC,EAAIC,EAAIC,IACrEA,GAAMD,OAEV,SAAUniC,EAAGC,QACVA,OAAO,mBACH,wBACA,2BACDD,IACL,YACG,SAAUE,GAoHP,QAASqmC,GAAU39B,GACfY,KAAKwnH,UAAUzqF,UAAU39B,GArHhC,GASOipG,GARAnwG,EAAQvB,OAAOuB,MACf64F,EAAO74F,EAAMspB,QACbumG,EAAiBh3B,EAAKsX,QACtBrjG,EAAS9M,EAAMmpB,GAAGrc,OAClBpK,EAAa1C,EAAM0C,WACnBoL,EAAQtP,EAAEsP,KACd9N,GAAMC,QAAQi3F,IAAM24B,EAAe5vH,QAAQi3F,IAC3Cl3F,EAAMC,QAAQozG,OAASwc,EAAe5vH,QAAQozG,OAC1ClD,EAAUrjG,EAAOtE,QACjBC,KAAM,SAAU5I,EAASqI,GACrBJ,KAAKI,QAAUxF,KAAeoF,KAAKI,QAASA,GAC5C4E,EAAOf,GAAGtD,KAAKwH,KAAKnI,KAAMjI,EAASiI,KAAKI,SACxCJ,KAAKwnH,UAAYO,EAAev5E,OAAOxuC,KAAKjI,QAAQ,GAAIqI,GACpDJ,KAAKwnH,UAAUzqF,YACf/8B,KAAK+8B,UAAYA,GAErB/8B,KAAKgoH,wBAA0BhiH,EAAMhG,KAAKioH,sBAAuBjoH,MACjEA,KAAKkoH,aAAa,SAClBloH,KAAKkoH,aAAa,cAClBloH,KAAKkoH,aAAa,cAClBloH,KAAKkoH,aAAa,aAClBloH,KAAKu5G,mBAETn5G,SACI8O,KAAM,UACNm4G,YAEJ3/G,QACI,QACA,aACA,aACA,YACA,SACA,cACA,gBAEJugH,sBAAuB,SAAUhgH,GAC7BjI,KAAKgI,QAAQC,EAAE/I,KAAM+I,IAEzBigH,aAAc,SAAUvvG,GACpB3Y,KAAKwnH,UAAUpgH,KAAKuR,EAAO3Y,KAAKgoH,0BAEpCj3B,KAAM,SAAUh5F,GACZiI,KAAKwnH,UAAUz2B,KAAKh5F,IAExBmnD,MAAO,WACCl/C,KAAKwnH,WACLxnH,KAAKwnH,UAAUtoE,QAEnBl/C,KAAKmoH,eAETriG,QAAS,WACD9lB,KAAKwnH,YACLxnH,KAAKwnH,UAAU1hG,gBACR9lB,MAAKwnH,WAEZxnH,KAAKooH,WACLpoH,KAAKooH,SAAStiG,gBACP9lB,MAAKooH,UAEhBpjH,EAAOf,GAAG6hB,QAAQ3d,KAAKnI,OAE3BsiG,aAAc,WACV,MAAOtiG,MAAKwnH,UAAUllB,gBAE1Bz9F,YAAa,SAAUoD,GACnB,MAAOjI,MAAKwnH,UAAU3iH,YAAYoD,IAEtCogH,YAAa,SAAU3tB,EAAOt6F,GACtBJ,KAAKooH,UACLpoH,KAAKooH,SAASpuH,KAAK0gG,EAAOt6F,IAGlC+nH,YAAa,WACLnoH,KAAKooH,UACLpoH,KAAKooH,SAAStnH,QAGtBgwF,gBAAiB,WACb9wF,KAAKwnH,UAAU12B,kBACf9wF,KAAKmoH,eAETtO,eAAgB,WACZ75G,KAAKwnH,UAAU3N,kBAEnBr0F,QAAS,WACL,OACIvsB,MAAO+G,KAAKjI,QAAQkB,QACpBC,OAAQ8G,KAAKjI,QAAQmB,WAG7B2sB,QAAS,SAAU9nB,GACfiC,KAAKjI,QAAQE,KACTgB,MAAO8E,EAAK9E,MACZC,OAAQ6E,EAAK7E,SAEjB8G,KAAK0lB,MAAQ3nB,EACbiC,KAAKwnH,UAAU/hG,YAAY1nB,GAC3BiC,KAAK2lB,WAETA,QAAS,WACL3lB,KAAKwnH,UAAU/hG,YAAYzlB,KAAK0lB,OAChC1lB,KAAKwnH,UAAU7hG,WAEnB4zF,gBAAiB,WACTrhH,EAAMmpB,GAAG2qD,QACThsE,KAAKooH,SAAW,GAAIr3B,GAAKq1B,eAAepmH,KAAMA,KAAKI,QAAQinH,iBAIvEnvH,EAAMmpB,GAAG8G,OAAOkgF,GAChBA,EAAQ75D,OAAS,SAAUz2C,EAASqI,GAChC,MAAO,IAAIioG,GAAQtwG,EAASqI,IAEhClI,EAAMspB,QAAQ6mF,QAAUA,GAI1B1xG,OAAOuB,MAAM2sB,SACC,kBAAVpuB,SAAwBA,OAAOgiC,IAAMhiC,OAAS,SAAUiiC,EAAIC,EAAIC,IACrEA,GAAMD,OAEV,SAAUniC,EAAGC,QACVA,OAAO,gBAAiB,yBAA0BD,IACpD,YACG,SAAUE,GAAV,GACOwB,GAAQvB,OAAOuB,MACfspB,EAAUtpB,EAAMspB,QAChBgwE,EAAUhwE,EAAQgwE,OACtBhwE,GAAQgwE,QAAU,SAAUz5F,EAASqI,GACjC,MAAOoxF,GAAQ96F,EAAEqB,GAAS,GAAIqI,IAElCohB,EAAQgwE,QAAQ+S,SAAW/S,EAAQ+S,SACnC/iF,EAAQgwE,QAAQoE,aAAepE,EAAQoE,cACzCj/F,OAAOuB,MAAM2sB,SACC,kBAAVpuB,SAAwBA,OAAOgiC,IAAMhiC,OAAS,SAAUiiC,EAAIC,EAAIC,IACrEA,GAAMD,OAEV,SAAUniC,EAAGC,QACVA,OAAO,iBACH,eACA,wBACA,0BACA,kBACA,gBACDD,IACL,aAYkB,kBAAVC,SAAwBA,OAAOgiC,IAAMhiC,OAAS,SAAUiiC,EAAIC,EAAIC,IACrEA,GAAMD,OAEV,SAAUniC,EAAGC,QACVA,OAAO,2BACH,aACA,iBACDD,IACL,YACG,SAAUE,GAsFP,QAASqP,GAAQnI,GACb,MAAO9B,OAAMiK,QAAQnI,GAEzB,QAAStD,GAASvC,EAASsJ,GAA3B,GAEa1D,GACDM,EAFJqqH,EAAaviH,EAAQ1E,GAAWA,GAAWA,EAC/C,KAAS1D,EAAM,EAAGA,EAAM2qH,EAAW1wH,OAAQ+F,IACnCM,EAAYqqH,EAAW3qH,GACvB5F,EAAQkG,UAAUC,QAAQD,UAC1BlG,EAAQkG,WAAa,IAAMA,GAKvC,QAASqnC,GAAYvtC,EAASkG,GACtBlG,GAAWA,EAAQkG,YACnBlG,EAAQkG,UAAYlG,EAAQkG,UAAU9G,QAAQ8G,EAAW,IAAI9G,QAAQoxH,GAAa,MAG1F,QAASC,GAAiBxhF,GAA1B,GAOalsC,GANLsE,EAAS,EAMb,KALI4nC,EAAK5mC,QAAQ48F,QAAU9kG,MAAMspB,QAAQmyD,KAAK+N,QAAQ16C,EAAK5mC,QAAQ48F,OAAO/jG,QAClE+tC,EAAK5mC,QAAQ48F,OAAO/jG,MAAQ,IAAM,IAClCmG,EAAS,GAGRtE,EAAI,EAAGA,EAAIksC,EAAK+oD,SAASn4F,OAAQkD,IACtCksC,EAAK+oD,SAASj1F,GAAGuxE,SAAS58D,MAAM,GAAGstB,UAAU39B,EAAQA,EAEzD,OAAO4nC,GAEX,QAASyhF,GAAUC,EAAQC,GACvB,OAAQD,EAAOz1F,EAAI01F,EAAOt3G,EAAIq3G,EAAOr3G,EAAIs3G,EAAO11F,EAAI,EAExD,QAAS21F,GAAShrH,GACd,MAAwB,gBAAVA,GAElB,QAASirH,GAASjrH,GACd,aAAcA,KAAU4C,GAE5B,QAASwyC,GAASp1C,GACd,MAAwB,gBAAVA,KAAuB6X,MAAM7X,GAE/C,QAASkrH,GAAWlrH,GAChB,MAAIo1C,GAASp1C,GACFA,EAAQ,KAEZA,EAGX,QAASmrH,GAAYhrG,GACjB,MAAOirG,IAAkB9uH,KAAK6jB,GAElC,QAAS6lE,GAAc7rF,EAASuF,GAAhC,GAGY0B,GACAlF,EACK6D,EACDogB,EAKCkrG,EAVTplC,EAAcglC,EAASvrH,IAAWA,GAAUA,CAChD,IAAIyI,EAAQ89E,GAAc,CAGtB,IAFI7kF,KACAlF,EAAQnD,OAAO8G,iBAAiB1F,GAC3B4F,EAAM,EAAGA,EAAMkmF,EAAYjsF,OAAQ+F,IACpCogB,EAAQ8lE,EAAYlmF,GACxBqB,EAAO+e,GAASgrG,EAAYhrG,GAAS5b,WAAWrI,EAAMikB,IAAUjkB,EAAMikB,EAE1E,OAAO/e,GACJ,GAAI4pH,EAAStrH,GAChB,IAAS2rH,IAAW3rH,GAChBvF,EAAQ+B,MAAMmvH,GAAWH,EAAWxrH,EAAO2rH,IAIvD,QAASC,GAAWtrH,EAAOurH,GACA,SAAnBA,IACAA,EAAiB,EAErB,IAAIjT,IACA52G,IAAK,EACL1G,MAAO,EACPC,OAAQ,EACRF,KAAM,EAUV,OARqB,gBAAViF,GACPs4G,EAAQjrC,IAAOirC,EAAQ9zF,IAAS8zF,EAAQhrC,IAAUgrC,EAAQh0F,IAAQtkB,GAElEs4G,EAAQjrC,IAAOrtE,EAAMqtE,KAAQk+C,EAC7BjT,EAAQ9zF,IAASxkB,EAAMwkB,KAAU+mG,EACjCjT,EAAQhrC,IAAUttE,EAAMstE,KAAWi+C,EACnCjT,EAAQh0F,IAAQtkB,EAAMskB,KAASinG,GAE5BjT,EAsHX,QAASkT,GAAYhpH,GACD,SAAZA,IACAA,KAEJ,IAAIqC,EAMJ,OALIrC,GAAQqC,SACRrC,EAAQqC,SAAWA,EAAW4mH,GAAgB7gH,QAAQpI,EAAQqC,UACvDvG,GAAWkE,EAAQ+zD,WAC1B1xD,EAAWrC,EAAQ+zD,SAEhB1xD,EAEX,QAASsqB,GAAK1Z,EAAOsN,GAArB,GAGahjB,GAFL/F,EAASyb,EAAMzb,OACfoH,IACJ,KAASrB,EAAM,EAAGA,EAAM/F,EAAQ+F,IACxBgjB,EAAStN,EAAM1V,KACfqB,EAAO8I,KAAKuL,EAAM1V,GAG1B,OAAOqB,GAEX,QAASsqH,GAAWvxH,EAASwxH,GAA7B,GAEY98G,GACK9O,CAFb,IAAI5F,EAAQkG,UAER,IADIwO,EAAQ88G,EAAWtyH,MAAM,KACpB0G,EAAM,EAAGA,EAAM8O,EAAM7U,OAAQ+F,IAClC,GAAI5F,EAAQkG,UAAUC,QAAQuO,EAAM9O,SAChC,OAAO,EAKvB,QAASsF,GAAQrF,EAAOyV,GACpB,GAAIA,EACA,MAAOA,GAAMnV,QAAQN,QAG7B,QAAS4rH,GAAiBv6G,EAAOtX,EAAK+vB,GAClC,MAAOxvB,OAAMspB,QAAQmyD,KAAKlkE,MAAMR,GAAStX,EAAMsX,GAASyY,EAAU+hG,IAsCtE,QAASz2G,GAAIK,EAAOsN,GAApB,GAGahjB,GACDC,EAHJhG,EAASyb,EAAMzb,OACfoH,IACJ,KAASrB,EAAM,EAAGA,EAAM/F,EAAQ+F,IACxBC,EAAQ+iB,EAAStN,EAAM1V,IACvBzF,MAAMspB,QAAQmyD,KAAK+N,QAAQ9jF,IAC3BoB,EAAO8I,KAAKlK,EAGpB,OAAOoB,GAEX,QAAS0qH,GAAgBzhH,GACrB,GAAIorB,GAAQ,CAQZ,OAPIprB,GAAEsrB,aACFF,GAASprB,EAAEsrB,WAAa,IACxBF,EAAQA,EAAQ,EAAIz0B,KAAKuoD,KAAK9zB,GAASz0B,KAAKpE,MAAM64B,IAElDprB,EAAEurB,SACFH,EAAQn7B,MAAMspB,QAAQmyD,KAAKlkE,MAAMxH,EAAEurB,OAAS,IAEzCH,EA6DX,QAASs2F,GAAkBzqH,EAAMkB,GAC7B,GAAIqG,GAAQvH,EAAK6H,SAEbN,GAAMrG,QADNqG,EAAMrG,QACUxF,MAAe6L,EAAMrG,QAASA,GAE9BA,EAGxB,QAASwpH,GAAkBp3D,GAA3B,GAGa70D,GAAS/F,EACVgG,EAHJoU,EAAM07F,GACNh1G,EAAMmxH,EACV,KAASlsH,EAAM,EAAG/F,EAAS46D,EAAI56D,OAAQ+F,EAAM/F,EAAQ+F,IAC7CC,EAAQ40D,EAAI70D,GACF,OAAVC,GAAkBoM,SAASpM,KAC3BoU,EAAMpT,KAAKoT,IAAIA,EAAKpU,GACpBlF,EAAMkG,KAAKlG,IAAIA,EAAKkF,GAG5B,QACIoU,IAAKA,IAAQ07F,GAAY92G,OAAYob,EACrCtZ,IAAKA,IAAQmxH,GAAYjzH,OAAY8B,GA+N7C,QAASoxH,GAAY72F,EAAG5hB,EAAG20E,EAAIC,EAAIqB,GAC/B,GAAIyiC,GAAQ3mC,GAAIkE,EAChB,OAAO,IAAIxB,IAAME,GAAM/yD,EAAI+yD,GAAMpnF,KAAKsnF,IAAI6jC,IAAU14G,EAAI40E,GAAMrnF,KAAKunF,IAAI4jC,GAAQ9jC,GAAMhzD,EAAI+yD,GAAMpnF,KAAKunF,IAAI4jC,IAAU14G,EAAI40E,GAAMrnF,KAAKsnF,IAAI6jC,IA4GzI,QAASC,GAAgBpnH,EAAGC,GACxB,MAAOD,GAAIC,EAolBf,QAASonH,GAAQ7rC,EAAGntE,GAApB,GAIQrO,GACAC,EACAuG,EACAuH,EACA1I,EACAzR,EACAqG,EACA8hF,EACAqf,CAXJ,OAAI5f,GAAEvnB,KAAO5lD,EAAE4lD,IAAMunB,EAAEtnB,KAAO7lD,EAAE6lD,IAAMsnB,EAAErnB,KAAO9lD,EAAE8lD,IAAMqnB,EAAEpnB,KAAO/lD,EAAE+lD,GACvD/lD,GAEPrO,EAAIhE,KAAKoT,IAAIosE,EAAEvnB,GAAI5lD,EAAE4lD,IACrBh0D,EAAIjE,KAAKlG,IAAI0lF,EAAEvnB,GAAI5lD,EAAE4lD,IACrBztD,EAAIxK,KAAKoT,IAAIosE,EAAErnB,GAAI9lD,EAAE8lD,IACrBpmD,EAAI/R,KAAKlG,IAAI0lF,EAAErnB,GAAI9lD,EAAE8lD,IACrB9uD,EAAIrJ,KAAKoT,IAAIosE,EAAEtnB,GAAI7lD,EAAE6lD,IACrBtgE,EAAIoI,KAAKlG,IAAI0lF,EAAEtnB,GAAI7lD,EAAE6lD,IACrBj6D,EAAI+B,KAAKoT,IAAIosE,EAAEpnB,GAAI/lD,EAAE+lD,IACrB2nB,EAAI//E,KAAKlG,IAAI0lF,EAAEpnB,GAAI/lD,EAAE+lD,IACrBgnC,KACJA,EAAM,GAAK,GAAIksB,IAAIrnH,EAAGoF,EAAGmB,EAAG5S,GAC5BwnG,EAAM,GAAK,GAAIksB,IAAItnH,EAAGpM,EAAGqM,EAAGhG,GAC5BmhG,EAAM,GAAK,GAAIksB,IAAI9gH,EAAG5S,EAAGma,EAAG9T,GAC5BmhG,EAAM,GAAK,GAAIksB,IAAIrnH,EAAGhG,EAAGuM,EAAGu1E,GACxBP,EAAEvnB,KAAOj0D,GAAKw7E,EAAEtnB,KAAO7uD,GAAKgJ,EAAE4lD,KAAOj0D,GAAKqO,EAAE6lD,KAAO7uD,GACnD+1F,EAAM,GAAK,GAAIksB,IAAItnH,EAAGqF,EAAGpF,EAAGrM,GAC5BwnG,EAAM,GAAK,GAAIksB,IAAI9gH,EAAGvM,EAAG8T,EAAGguE,KAE5Bqf,EAAM,GAAK,GAAIksB,IAAI9gH,EAAGnB,EAAG0I,EAAGna,GAC5BwnG,EAAM,GAAK,GAAIksB,IAAItnH,EAAG/F,EAAGgG,EAAG87E,IAEzB5xD,EAAKixE,EAAO,SAAU56D,GACzB,MAAOA,GAAIlqC,SAAW,GAAKkqC,EAAInqC,QAAU,IAC1C,IAgFP,QAASkxH,GAAiB/pH,GAA1B,GAKatF,GACDsvH,EALJ55B,EAAQpwF,EAAQowF,MAChB65B,EAAYjqH,EAAQkqH,YAAclqH,EAAQ/H,OAAS,IACnDT,EAAS44F,EAAM54F,OACf2yH,IACJ,KAASzvH,EAAI,EAAGA,EAAIlD,EAAQkD,IACpBsvH,EAAc1zH,EAAEgK,UAAW8vF,EAAM11F,IACrCsvH,EAAYhrH,QAAUgrH,EAAYhrH,QAAU,IAAMirH,GAAaA,GAAa,IAC5EE,EAAaziH,KAAKsiH,EAEtB,OAAOG,GAsLX,QAASC,GAAU/rD,GAAnB,GACQ17B,GAAS07B,EAAK17B,OACdsnD,EAAc5rB,EAAK4rB,aACvB,OAAO,IAAI6/B,IAAInnF,EAAO9P,EAAG8P,EAAO1xB,EAAGg5E,EAAYp3D,EAAGo3D,EAAYh5E,GAoflE,QAASo5G,GAAerqH,EAASsqH,GAAjC,GACQC,GAAQvqH,EAAQuqH,MAChBC,EAAQxqH,EAAQwqH,MAChBjpF,EAAWvhC,EAAQuhC,SACnBmE,EAAO,GAAIg3D,KACXE,QACI/jG,MAAOyxH,EAAYzxH,MACnBg7E,MAAOy2C,EAAYz2C,QAS3B,OANI7zE,GAAQw7B,SACRkK,EAAKM,OAAOukF,EAAOhpF,GAAUsuD,OAAO06B,EAAQD,EAAY3sH,KAAM4jC,GAE9DmE,EAAKM,OAAOzE,EAAUipF,GAAO36B,OAAOtuD,EAAUipF,EAAQF,EAAY3sH,MAEtEyqH,EAAiB1iF,GACVA,EAEX,QAAS+kF,GAAmBzqH,EAAS0qH,GAArC,GACQC,GAAY3qH,EAAQ2qH,UACpBC,EAAU5qH,EAAQ4qH,QAClBrpF,EAAWvhC,EAAQuhC,SACnBgjE,EAAO,GAAI7H,KACXE,QACI/jG,MAAO6xH,EAAS7xH,MAChBg7E,MAAO62C,EAAS72C,MAChB4qC,SAAUiM,EAASjM,WAS3B,OANIz+G,GAAQw7B,SACR+oE,EAAKv+D,OAAO2kF,EAAWppF,GAAUsuD,OAAO+6B,EAASrpF,GAEjDgjE,EAAKv+D,OAAOzE,EAAUopF,GAAW96B,OAAOtuD,EAAUqpF,GAEtDxC,EAAiB7jB,GACVA,EAgnBX,QAASsmB,GAAiBroH,EAAGC,GAA7B,GACQy7E,GAAO17E,EAAE3G,UAAY4G,EACrBqoH,EAAatoH,EAAEsK,oBAAsBrK,EAAEqK,mBAC3C,OAAOoxE,GAAO4sC,EAAaC,GAE/B,QAASC,GAASv/G,EAAMw/G,GACpB,MAAO,IAAIrvH,MAAK6P,EAAK5P,UAAYovH,GAErC,QAASC,GAAO1tH,GACZ,GAAIoB,EAMJ,OALIpB,aAAiB5B,MACjBgD,EAASpB,EACFA,IACPoB,EAAS,GAAIhD,MAAK4B,IAEfoB,EAEX,QAASusH,GAAY1/G,EAAM4jB,GAA3B,GAIQ+7F,GACAv2G,CACJ,IALqB,SAAjBwa,IACAA,EAAe,GAEf+7F,EAAiB,EACjBv2G,EAAMpJ,EAAKW,UACViJ,MAAMR,GACP,KAAOA,IAAQwa,GACC,IAARxa,EACAA,EAAM,EAENA,IAEJu2G,GAGR,OAAOJ,GAASv/G,GAAO2/G,EAAiBC,IAE5C,QAASx4G,GAAUpH,EAAMqH,GACrB,MAAc,KAAVA,GAAmC,KAApBrH,EAAKe,aACpBf,EAAKsH,SAAStH,EAAKe,WAAa,IACzB,GAIf,QAAS8+G,GAAS7/G,EAAMqH,GAAxB,GAGQy4G,GAFAC,EAAc,GAAI5vH,MAAK6P,EAG3B,OAFA+/G,GAAYC,WAAW,EAAG,EAAG,GACzBF,GAAU9/G,EAAKqB,oBAAsB0+G,EAAY1+G,qBAAuBi+G,GACrEC,EAASQ,EAAaD,EAASz4G,EAAQ44G,IAElD,QAASC,GAAYC,EAAWpuH,EAAOm0F,EAAMtiE,GAA7C,GAGY5jB,GACAqH,EAHJlU,EAASgtH,CAgCb,OA/BIA,KACIngH,EAAOy/G,EAAOU,GACd94G,EAAQrH,EAAKe,WACbmlF,IAASk6B,IACTjtH,EAAS,GAAIhD,MAAK6P,EAAKc,cAAgB/O,EAAO,EAAG,GACjDqV,EAAUjU,EAAQ,IACX+yF,IAASm6B,IAChBltH,EAAS,GAAIhD,MAAK6P,EAAKc,cAAed,EAAKa,WAAa9O,EAAO,GAC/DqV,EAAUjU,EAAQkU,IACX6+E,IAASo6B,IAChBntH,EAAS+sH,EAAYR,EAAY1/G,EAAM4jB,GAAuB,EAAR7xB,EAAWwuH,IACjEn5G,EAAUjU,EAAQkU,IACX6+E,IAASq6B,IAChBptH,EAAS,GAAIhD,MAAK6P,EAAKc,cAAed,EAAKa,WAAYb,EAAKS,UAAY1O,GACxEqV,EAAUjU,EAAQkU,IACX6+E,IAASs6B,GAChBrtH,EAAS0sH,EAAS7/G,EAAMjO,GACjBm0F,IAASu6B,IAChBttH,EAASosH,EAASv/G,EAAMjO,EAAQutH,IAC5BnsH,EAAO8N,aAAe,GACtB9N,EAAOutH,WAAW,IAEfx6B,IAASy6B,GAChBxtH,EAASosH,EAASv/G,EAAMjO,EAAQ6uH,IACzB16B,IAAS26B,KAChB1tH,EAASosH,EAASv/G,EAAMjO,IAExBm0F,IAAS26B,IAAgB1tH,EAAO+N,kBAAoB,GACpD/N,EAAO2tH,gBAAgB,IAGxB3tH,EAEX,QAAS4tH,GAAU/gH,EAAMkmF,EAAMtiE,GAC3B,MAAOs8F,GAAYT,EAAOz/G,GAAO,EAAGkmF,EAAMtiE,GAE9C,QAASo9F,GAASb,EAAWj6B,EAAMtiE,GAC/B,GAAI5jB,GAAOy/G,EAAOU,EAClB,OAAIngH,IAAQ+gH,EAAU/gH,EAAMkmF,EAAMtiE,GAAcxzB,YAAc4P,EAAK5P,UACxD4P,EAEJkgH,EAAYlgH,EAAM,EAAGkmF,EAAMtiE,GAEtC,QAASq9F,GAAalqH,EAAGC,GACrB,MAAID,IAAKC,EACED,EAAE3G,UAAY4G,EAAE5G,aAI/B,QAAS8wH,GAASnqH,EAAGC,GACjB,MAAOD,GAAE3G,UAAY4G,EAEzB,QAASmqH,GAAOpvH,GAAhB,GAEYoB,GACKrB,CAFb,IAAIoI,EAAQnI,GAAQ,CAEhB,IADIoB,KACKrB,EAAM,EAAGA,EAAMC,EAAMhG,OAAQ+F,IAClCqB,EAAO8I,KAAKklH,EAAOpvH,EAAMD,IAE7B,OAAOqB,GACJ,GAAIpB,EACP,MAAO0tH,GAAO1tH,GAAO3B,UAG7B,QAASgxH,GAAWrqH,EAAGC,GACnB,MAAID,IAAKC,EACEmqH,EAAOpqH,KAAOoqH,EAAOnqH,GAEzBD,IAAMC,EAEjB,QAASqqH,GAAUrhH,EAAMoD,EAAOk+G,GAC5B,MAAOlC,GAAiBp/G,EAAMoD,GAASm+G,GAAcD,GAEzD,QAASE,GAAUzvH,EAAOqR,EAAOk+G,EAAUG,GAA3C,GAGQn7G,GAFAtG,EAAOy/G,EAAO1tH,GACduoC,EAAYmlF,EAAOr8G,EAWvB,OARIkD,GADAg7G,IAAajB,GACLrgH,EAAKa,WAAay5B,EAAUz5B,WAA8D,IAAhDb,EAAKc,cAAgBw5B,EAAUx5B,eAAsBugH,EAAUrhH,EAAM,GAAI7P,MAAK6P,EAAKc,cAAed,EAAKa,YAAa0/G,IAAQ,GAAIpwH,MAAK6P,EAAKc,cAAed,EAAKa,WAAa,EAAG,GAAGJ,UAC5N6gH,IAAalB,GACZpgH,EAAKc,cAAgBw5B,EAAUx5B,cAAgB0gH,EAAUxhH,EAAM,GAAI7P,MAAK6P,EAAKc,cAAe,GAAIu/G,GAAQ,GAAK,GAC9GiB,IAAaf,IAAQe,IAAahB,GACjCe,EAAUrhH,EAAMs6B,EAAWgnF,GAE3BJ,EAASlhH,EAAMoD,GAASm+G,GAAcD,GAE3Ch7G,EAAQm7G,EAEnB,QAASjtH,GAASuC,EAAGC,EAAGkvF,GACpB,GAAIzT,EAUJ,OARIA,GADAyT,IAASk6B,GACFppH,EAAE8J,cAAgB/J,EAAE+J,cACpBolF,IAASm6B,GACe,GAAxB7rH,EAASuC,EAAGC,EAAGopH,IAAcppH,EAAE6J,WAAa9J,EAAE8J,WAC9CqlF,IAASq6B,GACTxtH,KAAKpE,MAAMuyH,EAASlqH,EAAGD,GAAK6oH,IAE5B7sH,KAAKpE,MAAMuyH,EAASlqH,EAAGD,GAAKwqH,GAAcr7B,IAIzD,QAASw7B,GAAa1hH,EAAM2hH,GAIxB,IAJJ,GAGQr7G,GAGIs7G,EALJC,EAAM,EACNC,EAAOH,EAAY51H,OAAS,EAEzB81H,GAAOC,GAGV,GAFAx7G,EAAQvT,KAAKpE,OAAOkzH,EAAMC,GAAQ,GAC9BF,EAAcD,EAAYr7G,GAC1Bs7G,EAAc5hH,EACd6hH,EAAMv7G,EAAQ,MADlB,CAIA,KAAIs7G,EAAc5hH,GAAlB,CAIA,KAAOohH,EAAWO,EAAYr7G,EAAQ,GAAItG,IACtCsG,GAEJ,OAAOA,GANHw7G,EAAOx7G,EAAQ,EAQvB,MAAIq7G,GAAYr7G,IAAUtG,EACfsG,EAEJA,EAAQ,EAEnB,QAASuE,GAAUk3G,EAAa/hH,GAC5B,GAAI7M,EAMJ,OAJIA,GADA6pH,EAASh9G,GACA+hH,EAAYl3G,UAAU7K,IAASy/G,EAAOz/G,GAEtCy/G,EAAOz/G,GAIxB,QAASgiH,GAAWD,EAAaE,GAAjC,GAEY9uH,GACKrB,CAFb,IAAIoI,EAAQ+nH,GAAQ,CAEhB,IADI9uH,KACKrB,EAAM,EAAGA,EAAMmwH,EAAMl2H,OAAQ+F,IAClCqB,EAAO8I,KAAK4O,EAAUk3G,EAAaE,EAAMnwH,IAE7C,OAAOqB,GAEX,MAAO0X,GAAUk3G,EAAaE,GAGlC,QAAS5vH,GAAQN,EAAO40D,GAAxB,GAEY56D,GACK+F,CAFb,IAAIC,YAAiB5B,MAAM,CAEvB,IADIpE,EAAS46D,EAAI56D,OACR+F,EAAM,EAAGA,EAAM/F,EAAQ+F,IAC5B,GAAIsvH,EAAWz6D,EAAI70D,GAAMC,GACrB,MAAOD,EAGf,UAEJ,MAAO60D,GAAIt0D,QAAQN,GAy5BvB,QAASmwH,GAAc/7G,EAAKtZ,GAA5B,GAQQgkC,GACAsxF,EACAC,EATA3vC,EAAO7uE,GAAM/W,EAAMsZ,EAAKk8G,GAAoB,EAChD,IAAa,IAAT5vC,EAAY,CACZ,GAAY,IAAR5lF,EACA,MAAO,EAEX4lF,GAAO1/E,KAAKC,IAAInG,GAcpB,MAZIgkC,GAAQ99B,KAAK8nC,IAAI,GAAI9nC,KAAKpE,MAAMoE,KAAK+lB,IAAI25D,GAAQ1/E,KAAK+lB,IAAI,MAC1DqpG,EAAgBv+G,GAAM6uE,EAAO5hD,EAAOwxF,IACpCD,EAAkB,EAElBA,EADAD,EAAgB,SACE,GACXA,EAAgB,SACL,GACXA,EAAgB,SACL,EAEA,EAEfv+G,GAAMitB,EAAQuxF,EAAiBC,IAE1C,QAASC,GAAYn8G,EAAKtZ,EAAK01H,GAA/B,GAIQC,GAEIC,EACAhwC,CANR,KAAKtsE,IAAQtZ,EACT,MAAO,EAGX,IAAIsZ,GAAO,GAAKtZ,GAAO,EAAG,CAGtB,GAFI41H,EAAWt8G,IAAQtZ,EAAM,EAAIsZ,EAC7BssE,GAAQ5lF,EAAM41H,GAAY51H,EAC1B01H,KAAW,IAAUA,GAAU9vC,EAAOiwC,GACtC,MAAO,EAEXF,GAAUzvH,KAAKlG,IAAI,EAAG41H,GAAY51H,EAAM41H,GAAY,OAEpDD,GAAUr8G,CAEd,OAAOq8G,GAEX,QAASG,GAAYx8G,EAAKtZ,EAAK01H,GAA/B,GAIQK,GAEIC,EACApwC,CANR,KAAKtsE,IAAQtZ,EACT,MAAO,EAGX,IAAIsZ,GAAO,GAAKtZ,GAAO,EAAG,CAGtB,GAFIg2H,EAAW18G,IAAQtZ,EAAM,EAAIA,EAC7B4lF,EAAO1/E,KAAKC,KAAK6vH,EAAW18G,GAAO08G,GACnCN,KAAW,IAAUA,GAAU9vC,EAAOiwC,GACtC,MAAO,EAEXE,GAAU7vH,KAAKoT,IAAI,EAAG08G,GAAY18G,EAAM08G,GAAY,OAEpDD,GAAU/1H,CAEd,OAAO+1H,GAEX,QAASj0H,GAAMoD,EAAOqhC,GAClB,MAAOxvB,IAAM7Q,KAAKpE,MAAMoD,EAAQqhC,GAAQA,EAAMivF,IAElD,QAAS/mE,GAAKvpD,EAAOqhC,GACjB,MAAOxvB,IAAM7Q,KAAKuoD,KAAKvpD,EAAQqhC,GAAQA,EAAMivF,IAEjD,QAASS,IAAgB/wH,GACrB,MAAOgB,MAAKlG,IAAIkG,KAAKoT,IAAIpU,EAAOgxH,KAAoBA,IAoMxD,QAASC,IAAgBC,EAAWC,EAAW3uH,GAA/C,GACQ4uH,GAAc5uH,EAAQ4uH,YACtBC,EAAUd,EAAYW,EAAWC,EAAWC,GAC5CE,EAAUV,EAAYM,EAAWC,EAAWC,GAC5CG,EAAYpB,EAAckB,EAASC,GACnCE,GAAgBD,UAAWA,EAW/B,OAVI/uH,GAAQivH,oBAAqB,IACzBJ,EAAU,GAAKK,GAAeL,EAASE,EAAW,EAAI,KACtDF,GAAWE,GAEXD,EAAU,GAAKI,GAAeJ,EAASC,EAAW,EAAI,KACtDD,GAAWC,IAGnBC,EAAYp9G,IAAMxX,EAAMy0H,EAASE,GACjCC,EAAY12H,IAAMyuD,EAAK+nE,EAASC,GACzBC,EAEX,QAASG,IAAiBH,EAAahvH,GACnC,OACI4R,IAAK0vE,GAAQthF,EAAQ4R,KAAOpT,KAAKoT,IAAIo9G,EAAYp9G,IAAK5R,EAAQ4R,KAAOo9G,EAAYp9G,IACjFtZ,IAAKgpF,GAAQthF,EAAQ1H,KAAOkG,KAAKlG,IAAI02H,EAAY12H,IAAK0H,EAAQ1H,KAAO02H,EAAY12H,IACjFy2H,UAAWC,EAAYD,WAG/B,QAASK,IAAYJ,EAAaK,GAAlC,GAGYC,GAFJtvH,EAAUqvH,CAqBd,OApBIA,KACIC,EAAgBhuC,GAAQ+tC,EAAYz9G,MAAQ0vE,GAAQ+tC,EAAY/2H,KAChEg3H,GACID,EAAYz9G,MAAQy9G,EAAY/2H,MAC5B+2H,EAAYz9G,IAAM,EAClBy9G,EAAYz9G,IAAM,EAElBy9G,EAAY/2H,IAAM,GAI1B+2H,EAAYN,WACZC,EAAYp9G,IAAMxX,EAAM40H,EAAYp9G,IAAKy9G,EAAYN,WACrDC,EAAY12H,IAAMyuD,EAAKioE,EAAY12H,IAAK+2H,EAAYN,YAC7CO,IACPtvH,EAAUxF,GAAWw0H,EAAaK,GAClCL,EAAYD,UAAYpB,EAAc3tH,EAAQ4R,IAAK5R,EAAQ1H,OAGnE02H,EAAYO,WAAavvH,EAAQ+uH,WAAaC,EAAYD,WAAa,EAChEv0H,GAAWw0H,EAAahvH,GAEnC,QAASkvH,IAAe1xH,EAAO6kC,EAASmtF,GAAxC,GACQC,GAAYpgH,GAAM7Q,KAAKC,IAAIjB,EAAQ6kC,GAAUyrF,IAC7CrwG,EAAY4kB,GAAW,EAAImtF,EAC/B,OAAqB,KAAdC,GAAmBA,EAAYhyG,EAsK1C,QAASiyG,IAAUz8F,GACf,GAAI0+D,GAAOs6B,EAUX,OATIh5F,IAAS08F,GACTh+B,EAAOk6B,GACA54F,GAAS28F,GAChBj+B,EAAOm6B,GACA74F,GAAS48F,GAChBl+B,EAAOo6B,GACA94F,GAASo4F,KAChB15B,EAAOq6B,IAEJr6B,EAEX,QAASm+B,IAAcpB,EAAWC,EAAW3uH,GAA7C,GACQ4R,GAAM5R,EAAQ4R,KAAO88G,EACrBp2H,EAAM0H,EAAQ1H,KAAOq2H,EACrB5B,EAAW/sH,EAAQ+sH,WAAaz0H,GAAOsZ,EAAM89G,GAAU7E,EAAiBvyH,EAAKsZ,IAAQq6G,IACrF8D,EAAe/C,GAAcD,GAC7B8B,EAAUrC,EAAUI,EAAOh7G,GAAO,EAAGm7G,IAAa7B,EAAO5yH,GACzDw2H,EAAUrC,EAASG,EAAOt0H,GAAO,EAAGy0H,GACpCiD,EAAgBhwH,EAAQ+uH,UAAY/uH,EAAQ+uH,UAAYv4H,OACxDu4H,EAAYiB,GAAiBjpE,EAAK4mE,EAAckB,EAAQhzH,UAAWizH,EAAQjzH,WAAYk0H,GAAgBA,EACvGE,EAAchwH,EAAS4uH,EAASC,EAAS/B,GACzCmD,EAAanpE,EAAKkpE,EAAalB,GAC/BoB,EAAaD,EAAaD,EAC1BG,EAAO5xH,KAAKpE,MAAM+1H,EAAa,GAC/BE,EAAOF,EAAaC,CASxB,OARKpwH,GAAQ+sH,gBACF/sH,GAAQ+sH,SAEnB/sH,EAAQ+sH,SAAW/sH,EAAQ+sH,UAAYA,EACvC/sH,EAAQ4R,IAAM5R,EAAQ4R,KAAO+5G,EAAYkD,GAAUuB,EAAMrD,GACzD/sH,EAAQ1H,IAAM0H,EAAQ1H,KAAOqzH,EAAYmD,EAASuB,EAAMtD,GACxD/sH,EAAQuvH,UAAYvvH,EAAQuvH,WAAaR,EAAY,EACrD/uH,EAAQ+uH,UAAYA,EACb/uH,EA+TX,QAASswH,IAAUzB,EAASC,EAASM,EAAapvH,GAAlD,GACQ4R,GAAMw9G,EAAYx9G,IAClBtZ,EAAM82H,EAAY92H,GActB,OAbIgpF,IAAQ8tC,EAAYmB,oBAAsBnB,EAAYmB,mBAAqB,GAC3EC,KAEClvC,GAAQthF,EAAQ1H,KAEV0H,EAAQ1H,KAAO,GACtBk4H,KAFAl4H,EAAMw2H,EAILxtC,GAAQthF,EAAQ4R,KAEV5R,EAAQ4R,KAAO,GACtB4+G,KAFA5+G,EAAMi9G,GAKNj9G,IAAKA,EACLtZ,IAAKA,GAGb,QAASm4H,IAAc7+G,EAAKtZ,EAAK0H,GAAjC,GACQuG,GAAOvG,EAAQ+uH,UACfF,EAAUj9G,CAMd,OALIA,IAAO,EACPi9G,EAAUv2H,GAAO,EAAIkG,KAAK8nC,IAAI//B,MAAY,EAClCvG,EAAQ4uH,cAChBC,EAAUrwH,KAAK8nC,IAAI//B,EAAM/H,KAAKpE,MAAMmqB,GAAI3S,EAAKrL,MAE1CsoH,EAEX,QAAS6B,IAAcp4H,EAAKiO,GAA5B,GAEQuoH,GADA6B,EAAkBthH,GAAMkV,GAAIjsB,EAAKiO,GAAOunH,IAAqB,CASjE,OANIgB,GADAx2H,GAAO,EACGiO,EACiB,IAApBoqH,IAA0BA,EAAkB,IAAOA,EAAkB,IAClEnyH,KAAK8nC,IAAI//B,EAAMge,GAAIjsB,EAAKiO,GAAQ,IAEhC/H,KAAK8nC,IAAI//B,EAAM/H,KAAKuoD,KAAKxiC,GAAIjsB,EAAKiO,KAIpD,QAASiqH,MACL,KAAU9nH,OAAM,6DAEpB,QAAS6b,IAAItT,EAAG4hB,GACZ,MAAOr0B,MAAK+lB,IAAItT,GAAKzS,KAAK+lB,IAAIsO,GA0iBlC,QAAS+9F,IAAgBpuH,EAAGC,GACxB,MAAO,KAAMjE,KAAKC,IAAID,KAAKC,IAAI+D,EAAIC,GAAK,KAsQ5C,QAAS+lF,IAAWhrF,GAChB,MAAOA,IAAS,KAAS,EA/iLhC,GAEO4jB,IACAmyD,GACAmpB,GACAtN,GACA34F,GACAszG,GACAnf,GACAiY,GACAguB,GACA/pB,GACA3lF,GACA3mB,GACAsB,GACAg1H,GACAC,GACA7/G,GACA25D,GACAC,GACAhpD,GACAE,GACA4oD,GACAlvC,GACAD,GACA4tF,GACA/b,GACAmc,GACAuH,GACAC,GACAC,GACAC,GACAjqB,GACA4mB,GACAsD,GACAC,GACAC,GACAC,GACA93F,GACA+3F,GACAC,GACAC,GACAC,GACAC,GACAviE,GACAjvD,GACA5E,GACAq2H,GACAC,GACAC,GACAC,GAgDA7J,GAoCAS,GAwCAqJ,GAWA1mH,GACA2mH,GAaAC,GACAC,GAqCAC,GAwBAC,GACAC,GASAC,GAKAvJ,GAOAwJ,GA+CAC,GACAC,GAyDAn0C,GACA96C,GACA0/C,GACA9B,GACAG,GACAtO,GACA9L,GACAob,GACAD,GACAtzD,GACAyzD,GACAjD,GACAsD,GACA3zE,GACAu0E,GACAT,GACAyvC,GAkEAltC,GAuCAokC,GAyLA+I,GA6GAC,GAeAC,GA0BAC,GAmOAC,GAkGAC,GAkGAC,GACAC,GACAC,GA4JAC,GA0FAC,GAmJAC,GACApsB,GAqCAqsB,GACAC,GA4IAC,GA8BAC,GA+EAC,GACAC,GACAC,GA2RAC,GAolBA1H,GACAF,GACAF,GACAD,GACAD,GACAD,GACAD,GACAD,GACAoI,GACA5H,GACAtB,GACAW,GACAL,GACAwE,GACAD,GACAD,GACA3C,GA4MAkH,GAaAC,GA2YA3F,GACA4F,GAUAjG,GACAzwF,GACA22F,GAUAC,GACAC,GAqjBAC,GACAC,GAoQAC,GAqMAC,GACAC,GAkXAC,GA8DAC,GAqLAC,GAsKAC,GAoIAC,GAiBAC,GAoBAC,GACAC,GACAC,EAh1KJ9+H,QAAOuB,MAAMqpB,QAAU5qB,OAAOuB,MAAMqpB,YAChCC,GAAUtpB,MAAMspB,QAChBmyD,GAAOnyD,GAAQmyD,KACfmpB,GAAOt7E,GAAQs7E,KACftN,GAAQhuE,GAAQguE,MAChB34F,GAAQqB,MAAMrB,MACdszG,GAAWjyG,MAAMiyG,SACjBnf,GAAOmf,GAASnf,KAChBiY,GAASkH,GAASlH,OAClBguB,GAAoB9mB,GAASxwE,UAC7ButE,GAAUiD,GAASjD,QACnB3lF,GAAUrpB,MAAMqpB,QAChB3mB,GAAa1C,MAAM0C,WACnBsB,GAAahE,MAAMgE,WACnBg1H,GAAqBh5H,MAAMorB,OAC3B6tG,GAAI,IACJ7/G,GAAI,IACJ25D,GAAM,MACNC,GAAS,SACThpD,GAAO,OACPE,GAAQ,QACR4oD,GAAS,SACTlvC,GAAQ,QACRD,GAAS,SACT4tF,GAAkB,EAClB/b,GAAYziG,OAAOyiG,UACnBmc,IAAa5+G,OAAOyiG,UACpB0jB,GAAgB,IAChBC,GAAiB,IACjBC,GAAQ,OACRC,GAAQ,OACRjqB,GAAe,kBACf4mB,GAAoB,GACpBsD,GAAmB,iBACnBC,GAAa,YACbC,GAAa,YACbC,GAAU,UACV93F,GAAO,OACP+3F,GAAS,SACTC,GAAW,WACXC,GAAQ,QACRC,GAAM,MACNC,GAAS,SACTviE,GAAQ,QACRjvD,GAAS,SACT5E,GAAS,SACTq2H,GAAO,OACPC,GAAe,UACfC,GAAmB,IACnBC,IACAjB,EAAGA,GACH7/G,EAAGA,GACHwqB,MAAOA,GACPD,OAAQA,GACRw1F,eAAgBA,GAChBD,cAAeA,GACfnmD,IAAKA,GACL/oD,KAAMA,GACNgpD,OAAQA,GACR9oD,MAAOA,GACP4oD,OAAQA,GACRy+C,gBAAiBA,GACjByE,kBAAmBA,GACnB0D,OAAQA,GACRC,SAAUA,GACVC,MAAOA,GACPpkB,UAAWA,GACXmc,UAAWA,GACXyH,MAAOA,GACPC,MAAOA,GACPjqB,aAAcA,GACdkqB,iBAAkBA,GAClBG,QAASA,GACTK,OAAQA,GACRn4F,KAAMA,GACN43F,WAAYA,GACZC,WAAYA,GACZjiE,MAAOA,GACPjvD,OAAQA,GACR5E,OAAQA,GACRq2H,KAAMA,GACNF,IAAKA,GACLG,aAAcA,GACdC,iBAAkBA,IAclB5J,GAAc,OAoCdS,GAAoB,sCAwCpBqJ,IACAtpH,OAAQ,SAAUA,EAAQnL,GACtB,MAAOA,IAEX2L,SAAU,SAAU3L,GAChB,MAAOA,IAEX8Y,UAAW,SAAU9Y,GACjB,MAAO,IAAI5B,MAAK4B,KAGpB+N,GAAU0mH,GACVC,GAAcz7H,GAAM6J,WACxB4xH,GAAYlqG,SAAW,SAAUstG,GAC7B/pH,GAAU+pH,GAEV1uH,OAAO0nG,kBACP1nG,OAAO0nG,iBAAiB4jB,IACpB/U,gBACI95F,IAAK,WACD,MAAO9X,QAKnB4mH,GAAuB,uBACvBC,GAAgB37H,GAAM6J,QACtBC,KAAM,SAAUitH,GACZ5tH,KAAK21H,aAAe/H,GAExBgI,KAAM,SAAUC,GAEZ,IAFE,GAIEC,GAHA5jH,KAAaoS,EAAMvpB,UAAUnD,OAAS,EACnC0sB,KAAQ,GACXpS,EAAOoS,GAAOvpB,UAAUupB,EAAM,EAElC,OADIwxG,GAAO91H,KAAK4tH,YACZ/E,EAASgN,IAAiBA,EAAav9H,MAAM45H,IACtC4D,EAAK/sH,OAAOjC,MAAMgvH,GAAOD,GAAc3/G,OAAOhE,IAElD4jH,EAAKvsH,SAAS2I,EAAO,GAAI2jH,IAEpCE,WAAY,SAAUF,EAAc3jH,EAAQ8jH,GAAhC,GAEJh3H,GADA82H,EAAO91H,KAAK4tH,WAUhB,OAPI5uH,GADA6pH,EAASgN,IAAiBA,EAAav9H,MAAM45H,IACpC2D,EAAa1+H,QAAQo7H,GAAsB,SAAUj6H,EAAO6Z,EAAOC,GACxE,GAAIxU,GAAQsU,EAAOG,SAASF,EAAO,IACnC,OAAO2jH,GAAKvsH,SAAS3L,EAAOwU,EAAoBA,EAAkB7a,UAAU,GAAK,GAAIy+H,KAGhFF,EAAKvsH,SAAS2I,EAAO,GAAI2jH,EAAcG,MAKxDhvH,OAAO0nG,kBACP1nG,OAAO0nG,iBAAiB8jB,GAAcvuH,IAClC2pH,aACInqG,IAAK,WACD,MAAOzjB,MAAK21H,cAAgBrD,GAAY/U,mBAKpDkV,GAAe57H,GAAM6J,QACrBC,KAAM,SAAUs1H,EAAOjyH,GACH,SAAZA,IACAA,MAEJhE,KAAK21H,aAAe3xH,EAAQ4pH,YAC5B5tH,KAAKkI,OAASlE,EAAQkE,QAAU+tH,EAChCj2H,KAAK+I,OAAS,GAAIypH,IAAcxuH,EAAQ4pH,aACxC5tH,KAAKi2H,MAAQA,EACbj2H,KAAKg9G,IAAMh5G,EAAQg5G,KAEvBp2F,OAAQ,SAAU1X,EAAMoZ,GACpBtoB,KAAKi2H,MAAMjuH,QAAQkH,EAAMoZ;AAG7BthB,OAAO0nG,kBACP1nG,OAAO0nG,iBAAiB+jB,GAAaxuH,IACjC6xH,MACIryG,IAAK,WACD,MAAOzjB,MAAK21H,cAAgBrD,GAAY/U,mBAMpDoV,GAAmB97H,GAAM6J,WAC7BiyH,GAAiBvqG,SAAW,SAAUstG,GAClChD,GAAYgD,GAEhB/C,GAAiBnkF,OAAS,SAAUz2C,EAAS2P,GACzC,GAAIgrH,GACA,MAAOA,IAAUlkF,OAAOz2C,EAAS2P,IAGrCkrH,IACApqH,QAAS,SAAU/F,GACf,MAAOA,KAGX4mH,GAAkBxyH,GAAM6J,WAC5B2oH,GAAgBjhG,SAAW,SAAUstG,GACjC9C,GAAY8C,GAEhBrM,GAAgB7gH,QAAU,SAAU/F,GAChC,MAAOmwH,IAAUpqH,QAAQ/F,IAEzBowH,IACAJ,aAAcA,GACdE,iBAAkBA,GAClBH,cAAeA,GACfF,YAAaA,GACbjJ,gBAAiBA,IA0CjByJ,GAAU,UACVC,GAAmBl8H,GAAM6J,QACzBC,KAAM,SAAUirG,EAAUtkG,GACtBtH,KAAK4rG,SAAWA,EAChB5rG,KAAKk2H,WAAat7H,MAAeoF,KAAKk2H,WAAY5uH,IAEtDU,QAAS,SAAUkH,EAAMoZ,GAAhB,GAIDlkB,GAHAw6E,EAAM5+E,KACN4rG,EAAWhtB,EAAIgtB,SACfsqB,EAAat3C,EAAIs3C,UAOrB,OALIA,GAAWhnH,GACX9K,EAAqBpE,KAAKm2H,aAAaD,EAAWhnH,GAAOoZ,GAClDsjF,EAASknB,MAChB1uH,EAAqBpE,KAAKm2H,aAAarD,GAAS5jH,EAAMoZ,IAEnDlkB,GAEX+xH,aAAc,SAAUC,GAEpB,IADA,GAAI9tG,MAAWhE,EAAMvpB,UAAUnD,OAAS,EACjC0sB,KAAQ,GACXgE,EAAKhE,GAAOvpB,UAAUupB,EAAM,EAChC,OAAOtkB,MAAK4rG,SAASwqB,GAAQtvH,MAAM9G,KAAK4rG,SAAUtjF,IAEtD+tG,iBAAkB,SAAU5pH,GAAV,GAKL9O,GAJLwhF,EAASn/E,IACb,IAAIA,KAAK4rG,SAASyqB,iBACd,MAAOr2H,MAAK4rG,SAASyqB,iBAAiB5pH,EAE1C,KAAS9O,EAAM,EAAGA,EAAM8O,EAAM7U,OAAQ+F,IAClC,GAAIwhF,EAAO+2C,WAAWzpH,EAAM9O,IACxB,OAAO,KA2BnBihF,GAAM1mF,MAAMspB,QAAQmyD,KACpB7vC,GAAS86C,GAAI96C,OACb0/C,GAAa5E,GAAI4E,WACjB9B,GAAU9C,GAAI8C,QACdG,GAAMjD,GAAIiD,IACVtO,GAAgBqL,GAAIrL,cACpB9L,GAAcmX,GAAInX,YAClBob,GAAejE,GAAIiE,aACnBD,GAAmBhE,GAAIgE,iBACvBtzD,GAAOsvD,GAAItvD,KACXyzD,GAAanE,GAAImE,WACjBjD,GAAYlB,GAAIkB,UAChBsD,GAAMxE,GAAIwE,IACV3zE,GAAQmvE,GAAInvE,MACZu0E,GAAepF,GAAIoF,aACnBT,GAAiB3E,GAAI2E,eACrByvC,GAAan8H,GAAM6J,WACvBsyH,GAAWsD,WAAa,SAAUl2H,EAASm2H,EAAO5jF,GAChC,SAAVA,IACAA,GAAU6jF,MAAO,GAErB,IAAIC,GAAY,GACXr2H,GAAWuyC,EAAM6jF,MAAQC,IAAcl5H,SAASg5H,OAGrDvvH,OAAO2a,KAAKvhB,GAASk4B,QAAQ,SAAUv5B,GACnC,GAAInB,GAAQwC,EAAQrB,EACR,gBAARA,GAAmC,MAAXA,EAAI,IAAenB,IAGnC,SAARmB,EACAw3H,EAAMzuH,KAAKlK,GACa,gBAAVA,KACd+0C,EAAM6jF,QACNxD,GAAWsD,WAAW14H,EAAO24H,EAAO5jF,GACpCA,EAAM6jF,aAIlBxD,GAAW0D,UAAY,SAAUH,EAAO51G,GACpC,GAAIojC,KACJ,IAAIwyE,EAAM3+H,OAAS,GAAK2F,SAASg5H,MAAO,CACpC,IACIxyE,EAAWwyE,EAAMvjH,IAAI,SAAU6jF,GAC3B,MAAOt5F,UAASg5H,MAAM3sE,KAAKitC,KAEjC,MAAO5uF,GACL/P,MAAMqsB,aAAatc,GAEvB0uH,QAAQ1pE,IAAIlJ,GAAUhjB,KAAKpgB,EAAUA,OAErCA,MAGRqyG,GAAW4D,aAAe,SAAUx2H,EAASugB,GACzC,GAAI41G,KACJvD,IAAWsD,WAAWl2H,EAASm2H,GAC/BvD,GAAW0D,UAAUH,EAAO51G,IAyB5BmlE,GAAQjvF,GAAM6J,QACdC,KAAM,SAAUsyB,EAAG5hB,GACfrR,KAAKizB,EAAIA,GAAK,EACdjzB,KAAKqR,EAAIA,GAAK,GAElBlV,MAAO,WACH,MAAO,IAAI2pF,IAAM9lF,KAAKizB,EAAGjzB,KAAKqR,IAElC+qC,OAAQ,SAAUisC,GACd,MAAOA,IAASroF,KAAKizB,IAAMo1D,EAAMp1D,GAAKjzB,KAAKqR,IAAMg3E,EAAMh3E,GAE3DosB,OAAQ,SAAU05B,EAAQksB,GAAlB,GACA0mC,GAAQ3mC,GAAIC,GACZwzC,EAAOj4H,KAAKsnF,IAAI6jC,GAChB+M,EAAOl4H,KAAKunF,IAAI4jC,GAChB/jC,EAAK7uB,EAAOlkC,EACZgzD,EAAK9uB,EAAO9lD,EACZutE,EAAM5+E,KACNizB,EAAI2rD,EAAI3rD,EACR5hB,EAAIutE,EAAIvtE,CAGZ,OAFArR,MAAKizB,EAAIxjB,GAAMu2E,GAAM/yD,EAAI+yD,GAAM6wC,GAAQxlH,EAAI40E,GAAM6wC,EAAMrN,IACvDzpH,KAAKqR,EAAI5B,GAAMw2E,GAAM50E,EAAI40E,GAAM4wC,GAAQ5jG,EAAI+yD,GAAM8wC,EAAMrN,IAChDzpH,MAEXypF,SAAU,SAAU7mF,GAGhB,MAFA5C,MAAKizB,GAAKrwB,EACV5C,KAAKqR,GAAKzO,EACH5C,MAEXmuG,WAAY,SAAU9lB,GAAV,GACJpxB,GAAKj3D,KAAKizB,EAAIo1D,EAAMp1D,EACpBikC,EAAKl3D,KAAKqR,EAAIg3E,EAAMh3E,CACxB,OAAOzS,MAAKy4D,KAAKJ,EAAKA,EAAKC,EAAKA,MAGxC4uB,GAAMixC,SAAW,SAAU5/D,EAAQmwB,EAAOjvF,GACtC,GAAIypF,GAAUsB,GAAIkE,EAClB,OAAO,IAAIxB,IAAM3uB,EAAOlkC,EAAI56B,EAASuG,KAAKsnF,IAAIpE,GAAU3qB,EAAO9lD,EAAIhZ,EAASuG,KAAKunF,IAAIrE,KAErFooC,GAAMrzH,GAAM6J,QACZC,KAAM,SAAUk2D,EAAIC,EAAIC,EAAIC,GACxBh3D,KAAK62D,GAAKA,GAAM,EAChB72D,KAAK82D,GAAKA,GAAM,EAChB92D,KAAK+2D,GAAKA,GAAM,EAChB/2D,KAAKg3D,GAAKA,GAAM,GAEpB/9D,MAAO,WACH,MAAO+G,MAAK+2D,GAAK/2D,KAAK62D,IAE1B39D,OAAQ,WACJ,MAAO8G,MAAKg3D,GAAKh3D,KAAK82D,IAE1B/5B,UAAW,SAAUk6B,EAAIC,GAKrB,MAJAl3D,MAAK62D,IAAMI,EACXj3D,KAAK+2D,IAAME,EACXj3D,KAAK82D,IAAMI,EACXl3D,KAAKg3D,IAAME,EACJl3D,MAEX+qB,KAAM,SAAUkI,EAAG5hB,GAAb,GACEnY,GAAS8G,KAAK9G,SACdD,EAAQ+G,KAAK/G,OASjB,OARIyoF,IAAQzuD,KACRjzB,KAAK62D,GAAK5jC,EACVjzB,KAAK+2D,GAAK/2D,KAAK62D,GAAK59D,GAEpByoF,GAAQrwE,KACRrR,KAAK82D,GAAKzlD,EACVrR,KAAKg3D,GAAKh3D,KAAK82D,GAAK59D,GAEjB8G,MAEXlH,KAAM,SAAUk+H,GAKZ,MAJAh3H,MAAK62D,GAAKj4D,KAAKoT,IAAIhS,KAAK62D,GAAImgE,EAAUngE,IACtC72D,KAAK82D,GAAKl4D,KAAKoT,IAAIhS,KAAK82D,GAAIkgE,EAAUlgE,IACtC92D,KAAK+2D,GAAKn4D,KAAKlG,IAAIsH,KAAK+2D,GAAIigE,EAAUjgE,IACtC/2D,KAAKg3D,GAAKp4D,KAAKlG,IAAIsH,KAAKg3D,GAAIggE,EAAUhgE,IAC/Bh3D,MAEXi3H,UAAW,SAAU5uC,GAAV,GACH6uC,GAAanxH,EAAQsiF,GACrBp1D,EAAIikG,EAAa7uC,EAAM,GAAKA,EAAMp1D,EAClC5hB,EAAI6lH,EAAa7uC,EAAM,GAAKA,EAAMh3E,CAEtC,OADArR,MAAKlH,KAAK,GAAIoxH,IAAIj3F,EAAG5hB,EAAG4hB,EAAG5hB,IACpBrR,MAEXm3H,OAAQ,SAAUH,EAAWvjG,GASzB,MARIA,KAAS09F,IAAM19F,IACfzzB,KAAK62D,GAAKmgE,EAAUngE,GACpB72D,KAAK+2D,GAAKigE,EAAUjgE,IAEpBtjC,IAASniB,IAAMmiB,IACfzzB,KAAK82D,GAAKkgE,EAAUlgE,GACpB92D,KAAKg3D,GAAKggE,EAAUhgE,IAEjBh3D,MAEXo3H,QAAS,SAAUJ,EAAW3qD,GAArB,GAMGgrD,GACAlgE,EANJj+D,EAAS8G,KAAK9G,SACdD,EAAQ+G,KAAK/G,QACbw6B,EAAO44C,IAAWpB,IAAOoB,IAAWnB,GAAS55D,GAAI6/G,GACjD/xH,EAASq0B,IAASniB,GAAIpY,EAASD,CAanC,OAZIozE,KAAWrB,IACPqsD,EAAeL,EAAU7/D,SACzBA,EAASn3D,KAAKm3D,SAClBn3D,KAAK62D,IAAMwgE,EAAapkG,EAAIkkC,EAAOlkC,EACnCjzB,KAAK82D,IAAMugE,EAAahmH,EAAI8lD,EAAO9lD,GAEnCrR,KAAKyzB,EAAO,GADL44C,IAAWpB,IAAOoB,IAAWnqD,GACnB80G,EAAUvjG,EAAO,GAAKr0B,EAEtB43H,EAAUvjG,EAAO,GAEtCzzB,KAAK+2D,GAAK/2D,KAAK62D,GAAK59D,EACpB+G,KAAKg3D,GAAKh3D,KAAK82D,GAAK59D,EACb8G,MAEXs3H,OAAQ,SAAUC,EAAIC,GAGlB,MAFAx3H,MAAK+2D,IAAMwgE,EACXv3H,KAAKg3D,IAAMwgE,EACJx3H,MAEXgvG,OAAQ,SAAUuoB,EAAIC,GAElB,MADAx3H,MAAKs3H,QAAQC,GAAKC,GACXx3H,MAEXxI,IAAK,SAAUk9F,GACX,GAAIwhB,GAAUgT,EAAWx0B,EAKzB,OAJA10F,MAAK62D,IAAMq/C,EAAQv9G,KACnBqH,KAAK+2D,IAAMm/C,EAAQt9G,MACnBoH,KAAK82D,IAAMo/C,EAAQ52G,IACnBU,KAAKg3D,IAAMk/C,EAAQr9G,OACZmH,MAEXy3H,MAAO,SAAU/iC,GACb,GAAIwhB,GAAUgT,EAAWx0B,EAKzB,OAJAwhB,GAAQv9G,MAAQu9G,EAAQv9G,KACxBu9G,EAAQ52G,KAAO42G,EAAQ52G,IACvB42G,EAAQt9G,OAASs9G,EAAQt9G,MACzBs9G,EAAQr9G,QAAUq9G,EAAQr9G,OACnBmH,KAAKxI,IAAI0+G,IAEpB/5G,MAAO,WACH,MAAO,IAAI+tH,IAAIlqH,KAAK62D,GAAI72D,KAAK82D,GAAI92D,KAAK+2D,GAAI/2D,KAAKg3D,KAEnDG,OAAQ,WACJ,MAAO,IAAI2uB,IAAM9lF,KAAK62D,GAAK72D,KAAK/G,QAAU,EAAG+G,KAAK82D,GAAK92D,KAAK9G,SAAW,IAE3Eg2G,cAAe,SAAU7mB,GACrB,MAAOA,GAAMp1D,GAAKjzB,KAAK62D,IAAMwxB,EAAMp1D,GAAKjzB,KAAK+2D,IAAMsxB,EAAMh3E,GAAKrR,KAAK82D,IAAMuxB,EAAMh3E,GAAKrR,KAAKg3D,IAE7FyxB,OAAQ,WACJ,OACI,GAAI3C,IAAM9lF,KAAK62D,GAAI72D,KAAK82D,IACxB,GAAIgvB,IAAM9lF,KAAK+2D,GAAI/2D,KAAK82D,IACxB,GAAIgvB,IAAM9lF,KAAK+2D,GAAI/2D,KAAKg3D,IACxB,GAAI8uB,IAAM9lF,KAAK62D,GAAI72D,KAAKg3D,MAGhC0gE,QAAS,WACL,OACI13H,KAAK62D,GACL72D,KAAK82D,GACL92D,KAAK+2D,GACL/2D,KAAKg3D,IACP9/D,KAAK,MAEXygI,SAAU,SAAUv0F,GAChB,QAASA,EAAI4zB,GAAKh3D,KAAK82D,IAAM92D,KAAKg3D,GAAK5zB,EAAI0zB,IAAM1zB,EAAI2zB,GAAK/2D,KAAK62D,IAAM72D,KAAK+2D,GAAK3zB,EAAIyzB,KAEvFp5B,OAAQ,SAAUiG,GAAV,GACAzqC,GAAQ+G,KAAK/G,QACbC,EAAS8G,KAAK9G,SACd0lF,EAAM5+E,KAAKm3D,SACX6uB,EAAKpH,EAAI3rD,EACTgzD,EAAKrH,EAAIvtE,EACTumH,EAAK9N,EAAY,EAAG,EAAG9jC,EAAIC,EAAIviD,GAC/Bm0F,EAAK/N,EAAY7wH,EAAO,EAAG+sF,EAAIC,EAAIviD,GACnCo0F,EAAKhO,EAAY7wH,EAAOC,EAAQ8sF,EAAIC,EAAIviD,GACxCq0F,EAAKjO,EAAY,EAAG5wH,EAAQ8sF,EAAIC,EAAIviD,EAKxC,OAJAzqC,GAAQ2F,KAAKlG,IAAIk/H,EAAG3kG,EAAG4kG,EAAG5kG,EAAG6kG,EAAG7kG,EAAG8kG,EAAG9kG,GAAKr0B,KAAKoT,IAAI4lH,EAAG3kG,EAAG4kG,EAAG5kG,EAAG6kG,EAAG7kG,EAAG8kG,EAAG9kG,GACzE/5B,EAAS0F,KAAKlG,IAAIk/H,EAAGvmH,EAAGwmH,EAAGxmH,EAAGymH,EAAGzmH,EAAG0mH,EAAG1mH,GAAKzS,KAAKoT,IAAI4lH,EAAGvmH,EAAGwmH,EAAGxmH,EAAGymH,EAAGzmH,EAAG0mH,EAAG1mH,GAC1ErR,KAAK+2D,GAAK/2D,KAAK62D,GAAK59D,EACpB+G,KAAKg3D,GAAKh3D,KAAK82D,GAAK59D,EACb8G,MAEXg4H,OAAQ,WACJ,MAAO,IAAIhtC,KACPhrF,KAAK62D,GACL72D,KAAK82D,KAEL92D,KAAK/G,QACL+G,KAAK9G,YAGb++H,QAAS,WACL,MAAwB,KAAjBj4H,KAAK/G,SAAmC,IAAlB+G,KAAK9G,UAEtCqyF,MAAO,SAAUyrC,EAAWvjG,EAAMi4D,GAA3B,GACClN,GAAK/qD,EAAO,EACZgrD,EAAKhrD,EAAO,EACZykG,EAAWzkG,IAAS09F,GAAIr1F,GAAQD,GAChC99B,EAAOiC,KAAKk4H,IACZj1H,GAAQyoF,GACJxpE,GACA+oD,MAEJjrE,KAAKw+E,GAAMw4C,EAAUx4C,GACrBx+E,KAAKy+E,GAAMz+E,KAAKw+E,GAAMzgF,GACfkF,EAAQyoF,GACXtpE,GACA8oD,MAEJlrE,KAAKy+E,GAAMu4C,EAAUv4C,GACrBz+E,KAAKw+E,GAAMx+E,KAAKy+E,GAAM1gF,GACf2tF,IAAc1gB,KACrBhrE,KAAKw+E,GAAMw4C,EAAUx4C,IAAOw4C,EAAUkB,KAAcn6H,GAAQ,EAC5DiC,KAAKy+E,GAAMz+E,KAAKw+E,GAAMzgF,MAQ9Bk1H,GAAOp8H,GAAM6J,QACbC,KAAM,SAAUw2D,EAAQmzD,EAAajyH,EAAQ+uF,EAAYE,GACrDtnF,KAAKm3D,OAASA,EACdn3D,KAAKsqH,YAAcA,EACnBtqH,KAAK3H,OAASA,EACd2H,KAAKonF,WAAaA,EAClBpnF,KAAKsnF,MAAQA,GAEjBnrF,MAAO,WACH,MAAO,IAAI82H,IAAKjzH,KAAKm3D,OAAQn3D,KAAKsqH,YAAatqH,KAAK3H,OAAQ2H,KAAKonF,WAAYpnF,KAAKsnF,QAEtF6wC,OAAQ,WACJ,MAAOn4H,MAAKonF,WAAapnF,KAAKsnF,MAAQ,GAE1C+oB,UAAW,SAAU+nB,EAAW9N,GAM5B,MALIA,GACAtqH,KAAKsqH,YAAc8N,EAEnBp4H,KAAK3H,OAAS+/H,EAEXp4H,MAEXqoF,MAAO,SAAUf,EAAOgjC,GAAjB,GACC+N,GAAcj1C,GAAIkE,GAClBgxC,EAAK15H,KAAKsnF,IAAImyC,GACdE,EAAK35H,KAAKunF,IAAIkyC,GACdhgI,EAASiyH,EAActqH,KAAKsqH,YAActqH,KAAK3H,OAC/C46B,EAAIxjB,GAAMzP,KAAKm3D,OAAOlkC,EAAIqlG,EAAKjgI,EAAQoxH,IACvCp4G,EAAI5B,GAAMzP,KAAKm3D,OAAO9lD,EAAIknH,EAAKlgI,EAAQoxH,GAC3C,OAAO,IAAI3jC,IAAM7yD,EAAG5hB,IAExBmnH,YAAa,SAAUphE,EAAUn+D,EAAOC,GAA3B,GACLu/H,GAASz4H,KAAK7D,QAAQ6yG,OAAO53C,GAC7BshE,EAAWD,EAAON,SAClBQ,EAAWF,EAAOpwC,MAAMqwC,GACxBE,EAAK3/H,EAAQ,EACb4/H,EAAK3/H,EAAS,EACdupG,EAAK7jG,KAAKunF,IAAI/C,GAAIs1C,IAClBI,EAAKl6H,KAAKsnF,IAAI9C,GAAIs1C,IAClBzlG,EAAI0lG,EAAS1lG,EAAI2lG,EACjBvnH,EAAIsnH,EAAStnH,EAAIwnH,CAOrB,OANIj6H,MAAKC,IAAI4jG,GAAM,KACfxvE,GAAK2lG,GAAME,EAAKl6H,KAAKC,IAAIi6H,IAEzBl6H,KAAKC,IAAIi6H,GAAM,KACfznH,GAAKwnH,GAAMp2B,EAAK7jG,KAAKC,IAAI4jG,IAEtB,GAAIynB,IAAIj3F,EAAG5hB,EAAG4hB,EAAIh6B,EAAOoY,EAAInY,IAExCg2G,cAAe,SAAUp7B,GAAV,GACP3c,GAASn3D,KAAKm3D,OACdmzD,EAActqH,KAAKsqH,YACnBjyH,EAAS2H,KAAK3H,OACd+uF,EAAapnF,KAAKonF,WAClBG,EAAWvnF,KAAKonF,WAAapnF,KAAKsnF,MAClCrwB,EAAK6c,EAAE7gD,EAAIkkC,EAAOlkC,EAClBikC,EAAK4c,EAAEziE,EAAI8lD,EAAO9lD,EAClB0nH,EAAS,GAAIjzC,IAAM7uB,EAAIC,GACvBw7C,EAAa1yG,KAAKqoF,MAAMjB,GACxB4xC,EAAc,GAAIlzC,IAAM4sB,EAAWz/E,EAAIkkC,EAAOlkC,EAAGy/E,EAAWrhG,EAAI8lD,EAAO9lD,GACvE82E,EAAWnoF,KAAKqoF,MAAMd,GACtB0xC,EAAY,GAAInzC,IAAMqC,EAASl1D,EAAIkkC,EAAOlkC,EAAGk1D,EAAS92E,EAAI8lD,EAAO9lD,GACjE6nH,EAAOzpH,GAAMwnD,EAAKA,EAAKC,EAAKA,EAAIuyD,GACpC,QAAQuP,EAAY58E,OAAO28E,IAAWtQ,EAAUuQ,EAAaD,MAAatQ,EAAUwQ,EAAWF,IAAWG,GAAQ5O,EAAcA,GAAe4O,GAAQ7gI,EAASA,GAEpK8gI,QAAS,WAAA,GAgBDC,GAUKt+H,EACDutF,EA1BJlJ,EAASn/E,KACTojC,EAAM,GAAI8mF,IAAIxc,GAAWA,GAAWmc,GAAWA,IAC/CziC,EAAa33E,GAAMzP,KAAKonF,WAAa,KACrCG,EAAW93E,IAAO23E,EAAapnF,KAAKsnF,OAAS,KAC7CgjC,EAActqH,KAAKsqH,YACnB+O,GACA,EACA,GACA,IACA,IACAjyC,EACAG,GACFvpE,KAAKgsG,GACHsP,EAAkBD,EAAUn7H,QAAQkpF,GACpCmyC,EAAgBF,EAAUn7H,QAAQqpF,EAWtC,KARI6xC,EADAhyC,IAAeG,EACN8xC,EAELC,EAAkBC,EACTF,EAAU7yH,MAAM8yH,EAAiBC,EAAgB,MAE9CrjH,OAAOmjH,EAAU7yH,MAAM,EAAG+yH,EAAgB,GAAIF,EAAU7yH,MAAM8yH,EAAiBD,EAAUzhI,SAGpGkD,EAAI,EAAGA,EAAIs+H,EAAOxhI,OAAQkD,IAC3ButF,EAAQlJ,EAAOkJ,MAAM+wC,EAAOt+H,IAChCsoC,EAAI6zF,UAAU5uC,GACdjlD,EAAI6zF,UAAU5uC,EAAOiiC,EAKzB,OAHKA,IACDlnF,EAAI6zF,UAAUj3H,KAAKm3D,QAEhB/zB,GAEX4rE,OAAQ,SAAUpxG,GAEd,MADAoC,MAAK3H,QAAUuF,EACRoC,QAMXkzH,GAASD,GAAKvyH,QACdC,KAAM,SAAUw2D,EAAQ9+D,EAAQ+uF,EAAYE,GACxC2rC,GAAKhvH,GAAGtD,KAAKwH,KAAKnI,KAAMm3D,EAAQ,EAAG9+D,EAAQ+uF,EAAYE,IAE3D0nB,OAAQ,SAAUpxG,GACd,MAAOq1H,IAAKhvH,GAAG+qG,OAAO7mG,KAAKnI,KAAMpC,IAErCzB,MAAO,WACH,MAAO,IAAI+2H,IAAOlzH,KAAKm3D,OAAQn3D,KAAK3H,OAAQ2H,KAAKonF,WAAYpnF,KAAKsnF,QAEtE+oB,UAAW,SAAU+nB,GAEjB,MADAp4H,MAAK3H,OAAS+/H,EACPp4H,QAGXmzH,GAAet8H,GAAM6J,QACrB84H,WAAY,SAAUf,EAAQr4H,GAAlB,GAeAq5H,GAdJryC,EAAaqxC,EAAOrxC,WAAa,IACjCG,EAAWkxC,EAAOnxC,MAAQF,EAC1BjwB,EAAS,GAAIgzC,IAASrkB,MAAM2yC,EAAOthE,OAAOlkC,EAAGwlG,EAAOthE,OAAO9lD,GAC3DhZ,EAASuG,KAAKlG,IAAI+/H,EAAOpgI,OAAQ,GACjCiyH,EAAc1rH,KAAKlG,IAAI+/H,EAAOnO,YAAa,GAC3CtV,EAAM,GAAI7K,IAAS/C,IAAIjwC,GACvBiwB,WAAYA,EACZG,SAAUA,EACVK,QAASvvF,EACTwvF,QAASxvF,IAET2uC,EAAO81D,GAAKuY,QAAQL,EAAK50G,GAASqsE,OAStC,OARI69C,IACAtV,EAAIptB,QAAUotB,EAAIntB,QAAUyiC,EACxBmP,EAAWzkB,EAAIzE,QAAQhpB,GAC3BvgD,EAAKipD,OAAOwpC,EAASxmG,EAAGwmG,EAASpoH,GACjC21B,EAAKguE,IAAIztB,EAAUH,EAAYkjC,EAAaA,GAAa,IAEzDtjF,EAAKipD,OAAO94B,EAAOlkC,EAAGkkC,EAAO9lD,GAE1B21B,KAGfmsF,GAAaxnH,QAAU,GAAIwnH,IACvBC,GAAev8H,GAAM6J,QACrBC,KAAM,SAAUP,GACZJ,KAAKrF,YACLqF,KAAKI,QAAUxF,MAAeoF,KAAKI,QAASA,IAEhDu2G,OAAQ,SAAUqgB,GAAV,GAEA5zF,GACKtoC,EACD4+H,EAHJ/+H,EAAWqF,KAAKrF,QAEpB,KAASG,EAAI,EAAGA,EAAIH,EAAS/C,OAAQkD,IAC7B4+H,EAAe/+H,EAASG,GAC5B4+H,EAAa/iB,OAAOqgB,GACpB5zF,EAAMA,EAAMA,EAAItqC,KAAK4gI,EAAat2F,KAAOs2F,EAAat2F,IAAIjnC,OAE9D6D,MAAKojC,IAAMA,GAAO4zF,GAEtBlxG,QAAS,WAAA,GAKIhrB,GAJLH,EAAWqF,KAAKrF,QAIpB,KAHIqF,KAAKusE,WACLvsE,KAAKusE,UAAUzmD,UAEVhrB,EAAI,EAAGA,EAAIH,EAAS/C,OAAQkD,IACjCH,EAASG,GAAGgrB,WAGpB6zG,QAAS,WACL,GAAI//H,GAASoG,KAAKpG,MAClB,OAAOA,GAASA,EAAO+/H,UAAY,MAEvCC,UAAW,WACP,GAAIC,GAAU75H,KAAK85H,YACnB,IAAID,EACA,MAAOA,GAAQ3xH,QAGvB4xH,WAAY,WAER,IADA,GAAI/hI,GAAUiI,KACPjI,GAAS,CACZ,GAAIA,EAAQgiI,aACR,MAAOhiI,GAAQgiI,YAEnBhiI,GAAUA,EAAQ6B,SAG1BogI,kBAAmB,SAAU/iE,EAAIC,GAAd,GAGNp8D,GAFLH,EAAWqF,KAAKrF,SAChBs/H,EAAgBt/H,EAAS/C,MAC7B,KAASkD,EAAI,EAAGA,EAAIm/H,EAAen/H,IAC/BH,EAASG,GAAGsoC,IAAIrG,UAAUk6B,EAAIC,IAGtCpzB,OAAQ,WAAA,GAGKhpC,GACD43C,EAHJ67D,EAAcxzG,UACdokF,EAASn/E,IACb,KAASlF,EAAI,EAAGA,EAAIC,UAAUnD,OAAQkD,IAC9B43C,EAAO67D,EAAYzzG,GACvBqkF,EAAOxkF,SAASmN,KAAK4qC,GACrBA,EAAK94C,OAASulF,GAGtB+6C,aAAc,WACNl6H,KAAKI,QAAQoD,WAAY,IAG7BxD,KAAKm6H,eACLn6H,KAAKo6H,YACLp6H,KAAKo7G,iBACLp7G,KAAKq6H,kBACLr6H,KAAKs6H,mBAETF,UAAW,WACHp6H,KAAKmiG,SACLniG,KAAKmiG,OAAOo4B,aAAev6H,KACvBA,KAAKpG,QACLoG,KAAKpG,OAAO4gI,aAAax6H,KAAKmiG,UAI1CiZ,eAAgB,WAAA,GAGHtgH,GAFLH,EAAWqF,KAAKrF,SAChB/C,EAAS+C,EAAS/C,MACtB,KAASkD,EAAI,EAAGA,EAAIlD,EAAQkD,IACxBH,EAASG,GAAGo/H,gBAGpBC,aAAc,WACVn6H,KAAKmiG,OAAS,GAAI3S,KACd7rD,OAAQ3jC,KAAKI,QAAQujC,OACrBngC,QAAS+/E,GAAevjF,KAAKI,QAAQoD,SAAS,MAGtD62H,gBAAiB,WACTr6H,KAAKmiG,SACLniG,KAAKusE,UAAY/qD,GAAQ+a,UAAUiS,OAAOxuC,KAAKmiG,OAAQniG,KAAKI,QAAQmsE,aAG5EiuD,aAAc,SAAUC,GACfA,EAAYF,eACbE,EAAYF,aAAev6H,MAE3By6H,EAAYr6H,QAAQs6H,OACpB16H,KAAK26H,WAAWx4B,OAAOr+D,OAAO22F,GACvB/4C,GAAQ+4C,EAAYr6H,QAAQujC,QACnC3jC,KAAK46H,YAAYC,YAAYJ,GACtBz6H,KAAK86H,YACZ96H,KAAK66H,YAAYJ,GACVz6H,KAAKmiG,OACZniG,KAAKmiG,OAAOr+D,OAAO22F,GAEnBz6H,KAAKpG,OAAO4gI,aAAaC,IAGjCE,SAAU,WACN,MAAI36H,MAAKpG,OACEoG,KAAKpG,OAAO+gI,WAEhB36H,MAEX46H,UAAW,WACP,MAAI56H,MAAKpG,OACEoG,KAAKpG,OAAOghI,YAEhB56H,MAEX66H,YAAa,SAAUJ,GAAV,GAILxrD,GAEI8rD,EACAC,EANJr3F,EAAS82F,EAAYr6H,QAAQujC,QAAU,EACvCs3F,EAAUj7H,KAAKmiG,OAAOxnG,SACtB/C,EAASqjI,EAAQrjI,MAErB,KAAKq3E,EAAM,EAAGA,EAAMr3E,IACZmjI,EAAUE,EAAQhsD,GAClB+rD,EAAOz3C,GAAew3C,EAAQ36H,QAAQujC,OAAQ,KAC9Cq3F,EAAOr3F,IAHasrC,KAO5BjvE,KAAKmiG,OAAOt/C,OAAOosB,EAAKwrD,IAE5BhlB,SAAU,SAAU90F,GAAV,GAGG7lB,GACDy2B,EAHJ52B,EAAWqF,KAAKrF,SAChB/C,EAAS+C,EAAS/C,MACtB,KAASkD,EAAI,EAAGA,EAAIlD,EAAQkD,IACpBy2B,EAAQ52B,EAASG,GACrB6lB,EAAS4Q,GACLA,EAAMkkF,UACNlkF,EAAMkkF,SAAS90F,IAI3B1I,QAAS,SAAU3f,GAGf,IAHK,GACDP,GAAUiI,KACVk7H,GAAU,EACPnjI,IAAYmjI,GACfA,EAAU5iI,EAAMP,GACXmjI,IACDnjI,EAAUA,EAAQ6B,OAG1B,IAAIshI,EACA,MAAOnjI,IAGfuiI,eAAgB,aAEhBa,aAAc,WACV,GAAI/6H,IAAWJ,KAAKI,aAAeg7H,SACnC,UAAUp7H,KAAKq7H,iBAAmBj7H,GAAWA,EAAQoD,WAAY,IAErE83H,gBAAiB,SAAUthI,GAAV,GAMLuhI,GALJp8C,EAASn/E,KACTI,GAAWJ,KAAKI,aAAeg7H,cAC/BI,EAAep7H,EAAQ+hG,OACvBi5B,EAAYp7H,KAAKy7H,UACrB,KAAKL,EAAW,CAYZ,GAXIG,GACAx+B,MACI9oB,MAAOq9C,GACPptF,QAAS,IAEb84D,QACI/oB,MAAOq9C,GACPr4H,MAAO,EACPirC,QAAS,KAGbs3F,GAcA,GAbAJ,EAAYp7H,KAAKy7H,WAAaD,EAAa9kI,EAAEgK,OAAOV,KAAK07H,uBACrDvB,aAAc,WACV,MAAOh7C,GAAOk8C,gBAAgBE,IAElCrzH,OAAQlI,KAAK45H,YACb+B,OAAQ37H,KAAK27H,OACbl1G,SAAUzmB,KAAKymB,SACfm1G,SAAU57H,KAAK47H,SACfh+H,MAAOoC,KAAKpC,MACZ5E,WAAYgH,KAAKhH,WACjB6iI,aAAc77H,KAAK67H,aACnBztF,MAAOpuC,KAAKouC,UAEXgtF,EACD,WAGJA,GAAYp7H,KAAKy7H,WAAaz7H,KAAKq7H,gBAAgBE,EAElD75C,IAAQ05C,EAAUh7H,QAAQujC,UAC3By3F,EAAUh7H,QAAQujC,OAAS4/C,GAAenjF,EAAQujC,OAAQwuF,KAE9DnyH,KAAKw6H,aAAaY,GAEtBA,EAAU53H,QAAQxJ,IAEtB8hI,sBAAuB,SAAU/jI,EAASqI,EAAS27H,GAC/C,GAAIC,GAAU,GAAIl/B,IAAKpmG,EAAEgK,QACrBs8F,QAAU/oB,MAAO,QACjB8oB,KAAM/8F,KAAKi8H,eAAeF,GAC1B7rC,OAAQn4F,EAAQqI,QAAQ8vF,QACzB9vF,GAEH,OADA47H,GAAQjsC,SAASxpE,SAASxuB,EAAQg4F,SAASxpE,YACpCy1G,GAEXC,eAAgB,SAAU77H,GACtB,GAAIJ,KAAKpG,OACL,MAAOoG,MAAKpG,OAAOqiI,eAAe77H,MAI9CgzH,GAAarsH,UAAU3G,WACnBizH,GAAaD,GAAa1yH,QAC1BC,KAAM,SAAUP,GACZgzH,GAAanvH,GAAGtD,KAAKwH,KAAKnI,KAAMI,GAChCJ,KAAKI,QAAQ0iC,OAASomF,EAAWlpH,KAAKI,QAAQ0iC,QAC9C9iC,KAAKI,QAAQs0F,QAAUw0B,EAAWlpH,KAAKI,QAAQs0F,UAEnDiiB,OAAQ,SAAUqgB,GAAV,GAUA5zF,GA6BAzoC,EACKG,EACD43C,EAxCJysC,EAASn/E,KACTI,EAAUJ,KAAKI,QACfnH,EAAQmH,EAAQnH,MAChBC,EAASkH,EAAQlH,OACjBgjI,EAAc97H,EAAQ87H,YACtBC,EAAaljI,GAASC,EACtB4pC,EAAS1iC,EAAQ0iC,OACjB4xD,EAAUt0F,EAAQs0F,QAClB0nC,EAAch8H,EAAQi8H,OAAOpjI,MAE7BqjI,EAAmB,WACnBn9C,EAAOoM,MAAMyrC,EAAW7F,GAAG/wH,EAAQmrF,OACnCpM,EAAOoM,MAAMyrC,EAAW1lH,GAAGlR,EAAQurF,QACnCxM,EAAOo9C,WAAan5F,EAAIjnC,QAAQs7H,MAAM30F,GAAQ20F,MAAM2E,IAEpDI,EAAaxF,EAAU76H,OAwB3B,KAvBIggI,IACAK,EAAWzlE,GAAKylE,EAAW3lE,GAAK59D,EAChCujI,EAAWxlE,GAAKwlE,EAAW1lE,GAAK59D,GAEhCgjI,GACAM,EAAW/E,MAAM30F,GAAQ20F,MAAM2E,GAAa3E,MAAM/iC,GAEtD0+B,GAAanvH,GAAG0yG,OAAOxuG,KAAKnI,KAAMw8H,GAE9Bp5F,EADA+4F,EACMn8H,KAAKojC,IAAM,GAAI8mF,IAAI,EAAG,EAAGjxH,EAAOC,GAEhC8G,KAAKojC,IAEX84F,GAAeC,GACfG,IACAE,EAAax8H,KAAKw8H,WAAax8H,KAAKu8H,WAAWpgI,QAAQs7H,MAAM/iC,KAE7D8nC,EAAax8H,KAAKw8H,WAAap5F,EAAIjnC,QACnCinC,EAAI5rC,IAAIk9F,GAASl9F,IAAI4kI,GAAa5kI,IAAIsrC,GACtCw5F,KAEJt8H,KAAKg6H,kBAAkB52F,EAAIyzB,GAAK2lE,EAAW3lE,GAAK/zB,EAAOnqC,KAAOyjI,EAAc1nC,EAAQ/7F,KAAMyqC,EAAI0zB,GAAK0lE,EAAW1lE,GAAKh0B,EAAOxjC,IAAM88H,EAAc1nC,EAAQp1F,KAClJ3E,EAAWqF,KAAKrF,SACXG,EAAI,EAAGA,EAAIH,EAAS/C,OAAQkD,IAC7B43C,EAAO/3C,EAASG,GACpB43C,EAAKikE,OAAOjkE,EAAKtP,MAGzBmoD,MAAO,SAAUyrC,EAAWvjG,EAAMi4D,GAC9B1rF,KAAKojC,IAAImoD,MAAMyrC,EAAWvjG,EAAMi4D,IAEpC+wC,OAAQ,WACJ,GAAIr8H,GAAUJ,KAAKI,OACnB,OAAOA,GAAQi8H,OAAOpjI,OAASmH,EAAQ4+F,YAE3Cm7B,aAAc,WACV/G,GAAanvH,GAAGk2H,aAAahyH,KAAKnI,KAClC,IAAII,GAAUJ,KAAKI,OACfA,GAAQoD,SAAWxD,KAAKy8H,UACxBz8H,KAAKmiG,OAAOr+D,OAAOg5D,GAAKkF,SAAShiG,KAAKu8H,WAAWvE,SAAUh4H,KAAK08H,iBAGxEA,YAAa,WAAA,GACLt8H,GAAUJ,KAAKI,QACfi8H,EAASj8H,EAAQi8H,UACrB,QACIr/B,QACI/jG,MAAOojI,EAAOpjI,MACdg7E,MAAOooD,EAAOpoD,MACd/vC,QAASq/C,GAAe84C,EAAOn4F,QAAS9jC,EAAQ8jC,SAChD26E,SAAUwd,EAAOxd,UAErB9hB,MACI9oB,MAAO7zE,EAAQ4+F,WACf96D,QAAS9jC,EAAQ8jC,SAErB03E,OAAQx7G,EAAQw7G,WAI5B+N,EAAkB0J,IACd9nC,MAAOrpE,GACPypE,OAAQ1gB,GACRnoC,UACA4xD,WACA2nC,QACIpoD,MAAOs9C,GACPt4H,MAAO,GAEX+lG,WAAY,GACZk9B,aAAa,EACbjjI,MAAO,EACPC,OAAQ,EACRsK,SAAS,IAET8vH,GAAeD,GAAW3yH,QAC1BC,KAAM,SAAUP,EAASu8H,GACrBtJ,GAAWpvH,GAAGtD,KAAKwH,KAAKnI,KAAMI,GAC9BJ,KAAK28H,UAAYA,GAErBC,WAAY,WAAA,GAWJ9iI,GACA/B,EAXA6mF,EAAM5+E,KACNI,EAAUw+E,EAAIx+E,QACdgjC,EAAMw7C,EAAI29C,WACVr9H,EAAOkB,EAAQlB,KACfwkC,EAAWtjC,EAAQsjC,SACnByzB,EAAS/zB,EAAI+zB,SACb4pD,EAAY39E,EAAInqC,QAAU,CAC9B,OAAKmH,GAAQoD,SAAYxD,KAAKy8H,UAG1B3iI,EAAQkG,KAAK08H,cAEbx9H,IAAS0yH,GACT75H,EAAU,GAAIypB,IAAQyhF,OAAO,GAAIA,KAC7BxzF,GAAM2zB,EAAIyzB,GAAKkqD,EAAW0I,IAC1Bh6G,GAAM2zB,EAAI0zB,GAAK1zB,EAAIlqC,SAAW,EAAGuwH,KAClC1I,GAAYjnH,GACRoF,IAAS2yH,GAChB95H,EAAU+kG,GAAKiS,aAEP3rE,EAAIyzB,GAAKkqD,EACT39E,EAAI0zB,KAGJ1zB,EAAIyzB,GACJzzB,EAAI4zB,KAGJ5zB,EAAI2zB,GACJ3zB,EAAI4zB,KAETl9D,GAAO2yE,QACHvtE,IAAS4yH,IAChB/5H,EAAU,GAAIypB,IAAQ6lF,UAAUvtG,GAChC/B,EAAQquC,OAAOhD,EAAIyzB,GAAIzzB,EAAI0zB,IAAIm5B,OAAO7sD,EAAI2zB,GAAI3zB,EAAI4zB,IAClDj/D,EAAQquC,OAAOhD,EAAIyzB,GAAIzzB,EAAI4zB,IAAIi5B,OAAO7sD,EAAI2zB,GAAI3zB,EAAI0zB,KAElD/+D,EAAU+kG,GAAKkF,SAAS5+D,EAAI40F,SAAUl+H,GAEtC4pC,GACA3rC,EAAQ4hC,UAAUs3F,KAAoBxzF,QAAQiG,GAC1CyzB,EAAOlkC,EACPkkC,EAAO9lD,KAGftZ,EAAQqI,QAAQujC,OAASvjC,EAAQujC,OAC1B5rC,GAtCI,MAwCf2f,cAAe,WAAA,GAIPyqF,GAHAhjB,EAASn/E,KACTw7H,EAAex7H,KAAKI,QAAQ+hG,OAC5Bw6B,EAAY38H,KAAK28H,aAkBrB,OAfIx6B,GADAq5B,EACSA,GACL59H,MAAO++H,EAAU/+H,MACjB6oB,SAAUk2G,EAAUl2G,SACpBve,OAAQlI,KAAK45H,YACb+B,OAAQgB,EAAUhB,OAClBC,SAAUe,EAAUf,SACpBn9D,KAAMz+D,KAAKu8H,WAAWvE,SACtB53H,QAASJ,KAAK68H,gBACd1C,aAAc,WACV,MAAOh7C,GAAOy9C,gBAIb58H,KAAK48H,cAItBC,cAAe,WACX,GAAIz8H,GAAUJ,KAAKI,OACnB,QACI4+F,WAAY5+F,EAAQ4+F,WACpBq9B,OAAQj8H,EAAQi8H,OAChBv5F,OAAQ1iC,EAAQ0iC,OAChB4xD,QAASt0F,EAAQs0F,QACjBx1F,KAAMkB,EAAQlB,KACdnB,KAAMqC,EAAQnH,MACduK,QAASpD,EAAQoD,UAGzB22H,aAAc,WACVn6H,KAAKmiG,OAASniG,KAAK0X,mBAG3BiyG,EAAkB2J,IACdp0H,KAAM0yH,GACNrmC,MAAOvgB,GACP2gB,OAAQ3gB,KAERuoD,GAAS,SACTC,GAAS,SACTC,IACAqJ,OACI59H,KAAMq0H,GACN7vF,SAAU,EACV8sD,QAEQpxF,OAAQ,EACR60E,MAAOq9C,GACPptF,QAAS,IAGT9kC,OAAQ,IACR60E,MAAOq9C,GACPptF,QAAS,KAGT9kC,OAAQ,EACR60E,MAAOq9C,GACPptF,QAAS,KAIrB64F,YACI79H,KAAMs0H,GACNhjC,QAEQpxF,OAAQ,EACR60E,MAAOq9C,GACPptF,QAAS,MAGT9kC,OAAQ,IACR60E,MAAOq9C,GACPptF,QAAS,IAGT9kC,OAAQ,IACR60E,MAAOq9C,GACPptF,QAAS,OAIrB84F,cACI99H,KAAMs0H,GACNhjC,QAEQpxF,OAAQ,IACR60E,MAAOq9C,GACPptF,QAAS,MAGT9kC,OAAQ,IACR60E,MAAOq9C,GACPptF,QAAS,KAGT9kC,OAAQ,IACR60E,MAAOq9C,GACPptF,QAAS,KAIrB+4F,cACI/9H,KAAMs0H,GACN0J,YAAY,EACZ1sC,QAEQpxF,OAAQ,EACR60E,MAAOq9C,GACPptF,QAAS,IAGT9kC,OAAQ,GACR60E,MAAOq9C,GACPptF,QAAS,KAGT9kC,OAAQ,IACR60E,MAAOq9C,GACPptF,QAAS,KAIrBi5F,YACIj+H,KAAMs0H,GACN0J,YAAY,EACZ1sC,QAEQpxF,OAAQ,EACR60E,MAAOq9C,GACPptF,QAAS,KAGT9kC,OAAQ,IACR60E,MAAOq9C,GACPptF,QAAS,MAGT9kC,OAAQ,IACR60E,MAAOq9C,GACPptF,QAAS,MAGT9kC,OAAQ,IACR60E,MAAOq9C,GACPptF,QAAS,MAGT9kC,OAAQ,IACR60E,MAAOq9C,GACPptF,QAAS,MAGT9kC,OAAQ,IACR60E,MAAOq9C,GACPptF,QAAS,KAIrBk5F,cACIl+H,KAAMs0H,GACNr8D,QACI,GACA,IAEJ9+D,OAAQ,KA+BZq7H,GAAcN,GAAa1yH,QAC3BC,KAAM,SAAUP,GACZgzH,GAAanvH,GAAGtD,KAAKwH,KAAKnI,KAAMI,EAChC,IAAIi9H,GAAcr9H,KAAKI,OACvBi9H,GAAYpkI,MAAQoZ,SAASgrH,EAAYpkI,MAAO,IAChDokI,EAAYnkI,OAASmZ,SAASgrH,EAAYnkI,OAAQ,IAClD8G,KAAKs9H,cAET3mB,OAAQ,WAAA,GAMK77G,GALL8jF,EAAM5+E,KACNI,EAAUw+E,EAAIx+E,QACdzF,EAAWikF,EAAIjkF,SACf4iI,EAAa,GAAIrT,IAAI,EAAG,EAAG9pH,EAAQnH,MAAOmH,EAAQlH,OAEtD,KADA8G,KAAKojC,IAAMm6F,EAAW9F,MAAMr3H,EAAQ0iC,QAC3BhoC,EAAI,EAAGA,EAAIH,EAAS/C,OAAQkD,IACjCH,EAASG,GAAG67G,OAAO4mB,GACnBA,EAAatT,EAAQsT,EAAY5iI,EAASG,GAAGsoC,MAAQ,GAAI8mF,KAGjEiQ,aAAc,WACVn6H,KAAKmiG,OAAS,GAAI3S,IAClBxvF,KAAKw9H,oBAETA,iBAAkB,WAAA,GACVp9H,GAAUJ,KAAKI,QACfi8H,EAASj8H,EAAQi8H,WACjBj5F,EAAMpjC,KAAKojC,IAAIjnC,QAAQ3E,IAAI4I,EAAQ0iC,QAAQ20F,MAAM4E,EAAOpjI,OACxD+lG,EAAalC,GAAKkF,SAAS5+D,EAAI40F,UAC/Bh7B,QACI/oB,MAAOooD,EAAOpjI,MAAQojI,EAAOpoD,MAAQ,GACrCh7E,MAAOojI,EAAOpjI,MACd4lH,SAAUwd,EAAOxd,UAErB9hB,MACI9oB,MAAO7zE,EAAQ4+F,WACf96D,QAAS9jC,EAAQ8jC,SAErBP,YAEJ3jC,MAAKmiG,OAAOr+D,OAAOk7D,IAEvB26B,QAAS,WACL,MAAO35H,OAEXi8H,eAAgB,SAAU77H,GAAV,GAIRq9H,GAII1B,EAPJuB,EAAYt9H,KAAKs9H,UACjBI,EAAW59C,GAAU1/E,GACrBmwF,EAAWkjC,GAAUrzH,EAAQmwF,SAiBjC,OAfI+sC,GAAUI,GACVD,EAAkBH,EAAUI,IAExB3B,EAAkBrlI,EAAEgK,UAAW6vF,EAAUnwF,GACvB,WAAlBmwF,EAASrxF,KACTu+H,EAAkB,GAAIj8G,IAAQygF,eAAe85B,IAEzC37H,EAAQkqH,cACRyR,EAAgBvrC,MAAQ25B,EAAiB4R,IAE7C0B,EAAkB,GAAIj8G,IAAQsmF,eAAei0B,GAC7C0B,EAAgBP,WAAa3sC,EAAS2sC,cAAe,GAEzDI,EAAUI,GAAYD,GAEnBA,KAGf9T,EAAkB+J,IACdz6H,MAAOm4H,GACPl4H,OAAQm4H,GACRryB,WAAYsyB,GACZ+K,QACIpoD,MAAOs9C,GACPt4H,MAAO,GAEX6pC,OAAQomF,EAAW,GACnBvlF,YAcAgwF,GAAeP,GAAa1yH,QAC5BC,KAAM,SAAUP,GACZgzH,GAAanvH,GAAGtD,KAAKwH,KAAKnI,KAAMI,GAChCJ,KAAK29H,kBAETA,eAAgB,WACZ,GAAIv9H,GAAUJ,KAAKI,OACfA,GAAQw7B,UACR57B,KAAKy2G,UAAY0a,GACjBnxH,KAAK49H,YAActsH,GACnBtR,KAAK69H,eAAiB/hG,GACtB97B,KAAK89H,iBAAmBjiG,GACxB77B,KAAK+9H,aAAe39H,EAAQ81G,QAC5Bl2G,KAAKg+H,eAAiB59H,EAAQ69H,WAE9Bj+H,KAAKy2G,UAAYnlG,GACjBtR,KAAK49H,YAAczM,GACnBnxH,KAAK69H,eAAiBhiG,GACtB77B,KAAK89H,iBAAmBhiG,GACxB97B,KAAK+9H,aAAe39H,EAAQ69H,SAC5Bj+H,KAAKg+H,eAAiB59H,EAAQ81G,UAGtCS,OAAQ,SAAUqgB,GACdh3H,KAAKojC,IAAM4zF,EAAU76H,QACrB6D,KAAKk+H,kBAETA,eAAgB,WAAA,GAeJlnB,GACKG,EACDnjE,EACAmqF,EACAlnB,EACAmnB,EACKzgI,EACD5F,EACAsmI,EACAC,EACAC,EAxBZp/C,EAASn/E,KACT4+E,EAAM5+E,KACNojC,EAAMw7C,EAAIx7C,IACVw6F,EAAch/C,EAAIg/C,YAClBnnB,EAAY73B,EAAI63B,UAChBqnB,EAAmBl/C,EAAIk/C,iBACvBD,EAAiBj/C,EAAIi/C,eACrBhnB,EAAQ72G,KAAKw+H,eACb7+E,EAASk3D,EAAMl3D,OACfi3D,EAAaC,EAAMD,WACnB6nB,EAAuB5nB,EAAM4nB,qBAC7BC,EAAc/+E,EAAO/nD,OACrB+mI,EAAcv7F,EAAIqzE,EAAY,GAAKz2G,KAAKsrF,WAAWsrB,EAAYxzE,EAAIy6F,KACvE,IAAIa,EAAa,CAEb,IADI1nB,EAAa2nB,EACRxnB,EAAW,EAAGA,EAAWunB,EAAavnB,IAAY,CAKvD,IAJInjE,EAAQ2L,EAAOw3D,GACfgnB,EAAgBnqF,EAAMmqF,cACtBlnB,EAAe7zE,EAAIw6F,EAAc,GACjCQ,EAAqBD,EAAcvmI,OAC9B+F,EAAM,EAAGA,EAAMygI,EAAoBzgI,IACpC5F,EAAUomI,EAAcxgI,GACxB0gI,EAAiBl/C,EAAO1X,YAAY1vE,GACpCumI,EAAoBtnB,EAAa73B,EAAOmM,WAAW+yC,EAAeR,GAAiB7pF,EAAMxjC,WACzF+tH,EAAa,GAAIrU,IACrBqU,EAAW9nB,EAAY,GAAK6nB,EAC5BC,EAAW9nB,EAAY,GAAK6nB,EAAoBD,EAAeR,GAC/DU,EAAWX,EAAc,GAAK3mB,EAC9BsnB,EAAWX,EAAc,GAAK3mB,EAAeonB,EAAeP,GAC5D/lI,EAAQ4+G,OAAO4nB,GACftnB,GAAgBonB,EAAeP,GAAoB3+C,EAAO6+C,cAE9DhnB,IAAchjE,EAAMxjC,UAAY2uE,EAAO4+C,aAE3C36F,EAAIqzE,EAAY,GAAKkoB,EACrBv7F,EAAIqzE,EAAY,GAAKkoB,EAAc/nB,EACnCxzE,EAAIw6F,EAAc,GAAKx6F,EAAIw6F,EAAc,GAAKa,IAGtDnzC,WAAY,SAAUvtF,EAAMquF,GAAhB,GACJn9E,GAAQ,EACRs8E,EAAQvrF,KAAKI,QAAQmrF,KAMzB,OALIA,KAAUnpE,IAASmpE,IAAUrgB,GAC7Bj8D,EAAQm9E,EAAUruF,EACXwtF,IAAUvgB,KACjB/7D,GAASm9E,EAAUruF,GAAQ,GAExBkR,GAEXuvH,aAAc,WAAA,GAiBD7gI,GACD5F,EAIAsmI,EArBJl/C,EAASn/E,KACT4+E,EAAM5+E,KACNojC,EAAMw7C,EAAIx7C,IACVzoC,EAAWikF,EAAIjkF,SACfmjI,EAAmBl/C,EAAIk/C,iBACvBD,EAAiBj/C,EAAIi/C,eACrBG,EAAiBp/C,EAAIo/C,eACrBD,EAAen/C,EAAIm/C,aACnB3xC,EAAU38E,GAAM2zB,EAAI06F,MACpB7D,EAAgBt/H,EAAS/C,OACzB+nD,KACAnvC,EAAY,EACZouH,EAAoB,EACpBhoB,EAAa,EACb6nB,EAAuB,EACvBN,IACJ,KAASxgI,EAAM,EAAGA,EAAMs8H,EAAet8H,IAC/B5F,EAAU4C,EAASgD,GAClB5F,EAAQqrC,KACTrrC,EAAQ4+G,OAAOvzE,GAEfi7F,EAAiBl/C,EAAO1X,YAAY1vE,GACpConF,EAAO/+E,QAAQtH,MAAQ2W,GAAMmvH,EAAoBZ,EAAiBK,EAAeP,IAAqB1xC,IACtGzsC,EAAO73C,MACHq2H,cAAeA,EACf3tH,UAAWA,EACXouH,kBAAmBA,IAEvBH,EAAuB7/H,KAAKlG,IAAI+lI,EAAsBG,GACtDhoB,GAAcmnB,EAAevtH,EAC7BA,EAAY,EACZouH,EAAoB,EACpBT,MAEJ3tH,EAAY5R,KAAKlG,IAAI8X,EAAW6tH,EAAeR,IAC3Ce,EAAoB,IACpBA,GAAqBZ,GAEzBY,GAAqBP,EAAeP,GACpCK,EAAcr2H,KAAK/P,EASvB,OAPA4nD,GAAO73C,MACHq2H,cAAeA,EACf3tH,UAAWA,EACXouH,kBAAmBA,IAEvBH,EAAuB7/H,KAAKlG,IAAI+lI,EAAsBG,GACtDhoB,GAAcpmG,GAEVmvC,OAAQA,EACRi3D,WAAYA,EACZ6nB,qBAAsBA,IAG9Bh3D,YAAa,SAAU1vE,GACnB,OACIkB,MAAOlB,EAAQqrC,IAAInqC,QACnBC,OAAQnB,EAAQqrC,IAAIlqC,WAG5BihI,aAAc,eAGlBxQ,EAAkBgK,IACd/3F,UAAU,EACV9iC,MAAM,EACNmlI,SAAU,EACV/nB,QAAS,IAET0d,GAAcpyG,GAAQgmF,KACtBA,GAAO4rB,GAAa1yH,QACpBC,KAAM,SAAUwzD,EAAS/zD,GACrBgzH,GAAanvH,GAAGtD,KAAKwH,KAAKnI,KAAMI,GAChCJ,KAAKm0D,QAAUA,EACfn0D,KAAK22G,OAAO,GAAIuT,MAEpBvT,OAAQ,SAAUqgB,GAAV,GACA52H,GAAUJ,KAAKI,QACfrC,EAAOqC,EAAQrC,KAAO41E,GAAKuM,YAAYlgF,KAAKm0D,SAAW0iC,KAAMz2F,EAAQy2F,MACzE72F,MAAKigF,SAAWliF,EAAKkiF,SACrBjgF,KAAKojC,IAAM,GAAI8mF,IAAI8M,EAAUngE,GAAImgE,EAAUlgE,GAAIkgE,EAAUngE,GAAK94D,EAAK9E,MAAO+9H,EAAUlgE,GAAK/4D,EAAK7E,SAElGihI,aAAc,WAAA,GACNv7C,GAAM5+E,KAAKI,QACXy2F,EAAOjY,EAAIiY,KACX5iB,EAAQ2K,EAAI3K,MACZ/vC,EAAU06C,EAAI16C,QACd03E,EAASh9B,EAAIg9B,MACjB57G,MAAKmiG,OAAS,GAAIyxB,IAAY5zH,KAAKm0D,QAASn0D,KAAKojC,IAAI40F,SAASppB,WAC1D/X,KAAMA,EACNkG,MACI9oB,MAAOA,EACP/vC,QAASA,GAEb03E,OAAQA,OAIpB+N,EAAkBniB,IACd3Q,KAAMyQ,GACNrzB,MAAOs9C,KAOPsC,GAAmB,UACnBC,GAAUT,GAAW3yH,QACrBC,KAAM,SAAUwzD,EAAS/zD,GACrBizH,GAAWpvH,GAAGtD,KAAKwH,KAAKnI,KAAMI,GAC9BJ,KAAKm0D,QAAUA,EACfn0D,KAAK6+H,iBACD7+H,KAAKI,QAAQ0+H,eAAgB,GAC7B9+H,KAAK22G,OAAO,GAAIuT,MAGxB2U,eAAgB,WAAA,GAcHE,GACD3pG,EAdJh1B,EAAUJ,KAAKI,QACf+1C,GAAcn2C,KAAKm0D,QAAZlqD,IAAqBhT,MAAM48H,IAClCmL,EAAe,GAAIrL,KACnB/3F,UAAU,EACV2vD,MAAOnrF,EAAQmrF,MACfzyF,MAAM,IAENmmI,EAAcrkI,MAAewF,GAC7B8jC,QAAS,EACTqoC,UAAW,MAIf,KAFAvsE,KAAK2nB,UAAYq3G,EACjBh/H,KAAK8jC,OAAOk7F,GACHD,EAAS,EAAGA,EAAS5oF,EAAKv+C,OAAQmnI,IACnC3pG,EAAO,GAAIoyE,IAAKrxD,EAAK4oF,GAAQ9sG,OAAQgtG,GACzCD,EAAal7F,OAAO1O,IAG5BuhF,OAAQ,SAAUqgB,GAAV,GAKIkI,GAOA/8B,EAUIr/D,EACAM,EAtBRhjC,EAAUJ,KAAKI,QACf++H,EAAW/+H,EAAQ+hG,MACvBniG,MAAK2nB,UAAUvnB,QAAQmrF,MAAQnrF,EAAQmrF,MACnC4zC,IAAan/H,KAAKo/H,YACdF,EAAYlI,EACXkI,EAAUjH,YACXj4H,KAAKo/H,YAAa,EAClBp/H,KAAK22G,OAAOuoB,GACZl/H,KAAKo/H,YAAa,EAClBF,EAAYl/H,KAAKojC,KAEjB++D,EAASniG,KAAKmiG,OAASg9B,EAASn/H,KAAKq/H,cAAcH,IACnD/8B,IACA+8B,EAAY1U,EAAUroB,EAAOhX,eAAiB,GAAIH,KAClDmX,EAAO/hG,QAAQujC,OAASvjC,EAAQujC,OAChCw+D,EAAO/hG,QAAQs6H,OAASt6H,EAAQs6H,QAEpC16H,KAAKojC,IAAMpjC,KAAKw8H,WAAax8H,KAAKu8H,WAAa2C,IAE/C7L,GAAWpvH,GAAG0yG,OAAOxuG,KAAKnI,KAAMg3H,GAC5B52H,EAAQsjC,WACJZ,EAASomF,EAAW9oH,EAAQ0iC,QAC5BM,EAAMpjC,KAAKojC,IAAIq0F,MAAM30F,GACzB9iC,KAAKg3H,UAAYA,EACjBh3H,KAAKs/H,UAAYl8F,EAAIjnC,QACrBinC,EAAMpjC,KAAKy9B,SACX2F,EAAIrG,UAAU+F,EAAOnqC,KAAOmqC,EAAOlqC,MAAOkqC,EAAOxjC,IAAMwjC,EAAOjqC,QAC9DmH,KAAKu/H,WAAan8F,EAAIjnC,QACtBinC,EAAI5rC,IAAIsrC,MAIpBq3F,aAAc,WAAA,GAWF/2F,GAVJhjC,EAAUJ,KAAKI,OACdA,GAAQoD,UAGbxD,KAAKmiG,OAAS,GAAI3S,KACd71D,UAAW35B,KAAKw/H,oBAChB77F,OAAQvjC,EAAQujC,OAChB+2F,OAAQt6H,EAAQs6H,SAEhB16H,KAAKy8H,WACDr5F,EAAM05D,GAAKkF,SAAShiG,KAAKu8H,WAAWvE,SAAUh4H,KAAK08H,eACvD18H,KAAKmiG,OAAOr+D,OAAOV,MAG3B82F,aAAc,WACNl6H,KAAKI,QAAQ+hG,QACbniG,KAAKo6H,YACLp6H,KAAKq6H,mBAELhH,GAAWpvH,GAAGi2H,aAAa/xH,KAAKnI,OAGxC68H,cAAe,WACX,GAAIz8H,GAAUJ,KAAKI,OACnB,QACI4+F,WAAY5+F,EAAQ4+F,WACpBq9B,OAAQj8H,EAAQi8H,OAChBpoD,MAAO7zE,EAAQ6zE,MACf4iB,KAAMz2F,EAAQy2F,KACd/zD,OAAQ1iC,EAAQ0iC,OAChB4xD,QAASt0F,EAAQs0F,QACjBlxF,QAASpD,EAAQoD,UAGzB67H,cAAe,SAAUrI,GACrB,GAAI73C,GAASn/E,IACb,QACIo1B,KAAMp1B,KAAKm0D,QACXsK,KAAMu4D,EAAUgB,SAChB9vH,OAAQlI,KAAK45H,YACbx5H,QAASJ,KAAK68H,gBACd1C,aAAc,WAIV,MAHAh7C,GAAOigD,YAAa,EACpBjgD,EAAOw3B,OAAOqgB,GACd73C,EAAOigD,YAAa,EACbjgD,EAAOsgD,sBAI1BA,iBAAkB,WACdz/H,KAAKm6H,eACLn6H,KAAKo7G,gBACL,IAAIjZ,GAASniG,KAAKmiG,MAElB,cADOniG,MAAKmiG,OACLA,GAEX1kE,OAAQ,WACJ,GAAIr9B,GAAUJ,KAAKI,OAInB,OAHAJ,MAAKojC,IAAI3F,OAAOr9B,EAAQsjC,UACxB1jC,KAAKurF,MAAMvrF,KAAKg3H,UAAW7F,GAAG/wH,EAAQmrF,OACtCvrF,KAAKurF,MAAMvrF,KAAKg3H,UAAW1lH,GAAGlR,EAAQurF,QAC/B3rF,KAAKojC,KAEhBo8F,kBAAmB,WAAA,GAKX5gD,GACAoH,EACAC,EACAy5C,EAPAh8F,EAAW1jC,KAAKI,QAAQsjC,QAC5B,OAAKA,IAGDk7C,EAAM5+E,KAAKs/H,UAAUnoE,SACrB6uB,EAAKpH,EAAI3rD,EACTgzD,EAAKrH,EAAIvtE,EACTquH,EAAY1/H,KAAKu/H,WAAWpoE,SACzB85D,KAAoBl0F,UAAU2iG,EAAUzsG,EAAI+yD,EAAI05C,EAAUruH,EAAI40E,GAAIxoD,OAAOiG,GAC5EsiD,EACAC,KARO,QAYf8tC,GAAQX,GAAa1yH,QACrBC,KAAM,SAAUP,GACZgzH,GAAanvH,GAAGtD,KAAKwH,KAAKnI,KAAMI,GAChCJ,KAAK8jC,OAAO,GAAIgwF,IAAQ9zH,KAAKI,QAAQg1B,KAAM1+B,EAAEgK,UAAWV,KAAKI,SAAWurF,OAAQ3rF,KAAKI,QAAQuhC,cAEjGg1E,OAAQ,SAAUqgB,GACd5D,GAAanvH,GAAG0yG,OAAOxuG,KAAKnI,KAAMg3H,GAClCh3H,KAAKojC,IAAI+zF,OAAOH,EAAW7F,OAGnC4C,GAAM4L,WAAa,SAAUv/H,EAASxG,EAAQgmI,GAA3B,GAMXt3F,GALAu3F,EAAez/H,CAUnB,OATuB,gBAAZA,KACPy/H,GAAiBzqG,KAAMh1B,IAE3By/H,EAAenpI,EAAEgK,QAAS8C,SAAS,GAAQo8H,EAAgBC,GAEvDA,GAAgBA,EAAar8H,SAAWq8H,EAAazqG,OACrDkT,EAAQ,GAAIyrF,IAAM8L,GAClBjmI,EAAOkqC,OAAOwE,IAEXA,GAEXqhF,EAAkBoK,IACd9/C,MAAOs9C,GACP5vF,SAAUspC,GACVsgB,MAAOvgB,GACPloC,OAAQomF,EAAW,GACnBx0B,QAASw0B,EAAW,KAEpB8K,GAAYF,GAAQpzH,QACpBC,KAAM,SAAU/C,EAAOw3B,EAAMjjB,EAAOsU,EAAUrmB,GAC1C0zH,GAAQ7vH,GAAGtD,KAAKwH,KAAKnI,KAAMo1B,EAAMh1B,GACjCJ,KAAKo1B,KAAOA,EACZp1B,KAAKpC,MAAQA,EACboC,KAAKmS,MAAQA,EACbnS,KAAKymB,SAAWA,EAChBzmB,KAAK22G,OAAO,GAAIuT,MAEpBmV,cAAe,SAAUrI,GACrB,GAAIhzH,GAAU8vH,GAAQ7vH,GAAGo7H,cAAcl3H,KAAKnI,KAAMg3H,EAKlD,OAJAhzH,GAAQpG,MAAQoC,KAAKpC,MACrBoG,EAAQyiB,SAAWzmB,KAAKymB,SACxBziB,EAAQ+E,OAAS/I,KAAKI,QAAQ2I,OAC9B/E,EAAQwH,QAAUxL,KAAKI,QAAQoL,QACxBxH,GAEXgd,MAAO,SAAUhe,EAAQiF,GACrBjF,EAAOgF,QAAQwpH,IACXz5H,QAAS8qF,GAAa56E,GACtBrK,MAAOoC,KAAKpC,MACZw3B,KAAMp1B,KAAKo1B,KACXjjB,MAAOnS,KAAKmS,MACZsU,SAAUzmB,KAAKymB,SACfgN,KAAMzzB,KAAKpG,OAAOwG,WAG1Bq9B,OAAQ,WAAA,GAEI2F,GACAzJ,CAKR,OAPI35B,MAAKI,QAAQ0/H,gBAAkB90D,IAC3B5nC,EAAMpjC,KAAKs/H,UAAUtH,SACrBr+F,EAAY35B,KAAKw/H,oBACrBx/H,KAAKojC,IAAMonF,EAAUpnF,EAAI8mD,KAAKvwD,EAAU4qD,YAExCuvC,GAAQ7vH,GAAGw5B,OAAOt1B,KAAKnI,MAEpBA,KAAKojC,KAEhBo8F,kBAAmB,WAAA,GASXO,GACA38F,EACAq7B,EACAuhE,EACAC,EACAC,EACAC,EACAvxB,EACAC,EACAxkB,EACAykB,EACAywB,EACAxiG,EAEAqjG,EACAC,EACA/0C,EAAYg1C,EAWZC,EAnCAngI,EAAUJ,KAAKI,QACfsjC,EAAWtjC,EAAQsjC,QACvB,OAAKA,GAGDtjC,EAAQ0/H,gBAAkB90D,GACnB8oD,GAAQ7vH,GAAGu7H,kBAAkBr3H,KAAKnI,OAEzC+/H,EAAiB9O,KAAoBxzF,OAAOiG,GAAU6gD,SACtDnhD,EAAMpjC,KAAKs/H,UAAUtH,SACrBv5D,EAAOz+D,KAAKg3H,UAAUgB,SACtBgI,EAAiB5/H,EAAQ4/H,gBAAkB/0D,GAC3Cg1D,EAAYD,IAAmB/0D,IAAO+0D,IAAmB90D,GAASimD,GAAI7/G,GACtE4uH,EAAeF,IAAmB/0D,IAAO+0D,IAAmB90D,GAAS55D,GAAI6/G,GACzEgP,EAAaH,IAAmB/0D,IAAO+0D,IAAmB99G,GAAOu8C,EAAK17B,OAAS07B,EAAK4rB,cACpFukB,EAAUxrE,EAAIwrE,UAAUrmB,cAAcw3C,GACtClxB,EAAWzrE,EAAIyrE,WAAWtmB,cAAcw3C,GACxC11C,EAAcjnD,EAAIinD,cAAc9B,cAAcw3C,GAC9CjxB,EAAa1rE,EAAI0rE,aAAavmB,cAAcw3C,GAC5CR,EAAav0C,GAAK+jB,WAAWH,EAASC,EAAUxkB,EAAaykB,GAC7D/xE,KACJA,EAAUmjG,GAAgBzhE,EAAK17B,OAAOm9F,GAAgBX,EAAWx8F,OAAOm9F,GACpEE,EAAexhI,KAAKC,IAAI+vG,EAAQsxB,GAAgBnjG,EAAUmjG,GAAgBC,EAAWD,IACrFG,EAAgBzhI,KAAKC,IAAIgwG,EAASqxB,GAAgBnjG,EAAUmjG,GAAgBC,EAAWD,IAEvFzwH,GAAM2wH,EAAclS,MAAuBz+G,GAAM4wH,EAAenS,KAChE5iC,EAAasjB,EACb0xB,EAAWzxB,GACJwxB,EAAgBD,GACvB90C,EAAaujB,EACbyxB,EAAWj2C,IAEXiB,EAAasjB,EACb0xB,EAAWxxB,GAEXyxB,EAAcj1C,EAAW20C,IAAcK,EAASL,GAAa30C,EAAW20C,IAAc,EAC1FljG,EAAUkjG,GAAaxhE,EAAKtH,SAAS8oE,GAAaM,EAC3CtP,KAAoBl0F,UAAUA,EAAU9J,EAAG8J,EAAU1rB,GAAGosB,OAAOiG,IAlC3D,QAqCnBimF,EAAkBqK,IAAa8K,aAAa,IACxC7K,GAAoB,EACpBC,GAAsB,OACtBC,GAAOd,GAAW3yH,QAClBC,KAAM,SAAU6uC,EAAQpvC,EAAS25H,GAC7B1G,GAAWpvH,GAAGtD,KAAKwH,KAAKnI,KAAMI,GAC9BJ,KAAKwvC,OAASA,EACdxvC,KAAK+5H,aAAeA,EACpB/5H,KAAKuI,UAETzH,KAAM,WACFd,KAAKI,QAAQoD,SAAU,GAE3BxJ,KAAM,WACFgG,KAAKI,QAAQoD,SAAU,GAE3B+E,OAAQ,WAAA,GAGImtC,GACA8qF,EACAp9F,EACArlC,EACAq3B,EACAn8B,EAAOC,EAEHunI,EAsBJn/C,EA/BJlhF,EAAUJ,KAAKI,OACfA,GAAQoD,UACJkyC,EAAQt1C,EAAQs1C,MAChB8qF,EAAOpgI,EAAQogI,KACfp9F,EAAM,GAAI8mF,IACVnsH,EAAOyiI,EAAKziI,KACZq3B,EAAOp1B,KAAKwvC,OAAOpa,KAEnBssD,GAAQhsC,IAAUA,EAAMlyC,UACpBi9H,EAAerX,EAAY1zE,GAC3B+qF,EACArrG,EAAOqrG,EAAazgI,KAAKwvC,QAClBkG,EAAM3sC,SACbqsB,EAAOp1B,KAAK+5H,aAAahxH,OAAO6sH,KAAKlgF,EAAM3sC,OAAQqsB,IAElDsgB,EAAMu+B,QACPv+B,EAAMu+B,MAAQv+B,EAAM/T,WAAaqwF,GAASkC,GAAsBsM,EAAKxhC,YAEzEh/F,KAAK01C,MAAQ,GAAIo+E,IAAQ1+F,EAAMx6B,MAAe86C,IAC1CA,EAAM/T,WAAaqwF,IAAWtwC,GAAQ3jF,KAClCyiI,EAAKthI,OAAS0yH,GACd7zH,EAAOa,KAAKlG,IAAIsH,KAAK01C,MAAMtS,IAAInqC,QAAS+G,KAAK01C,MAAMtS,IAAIlqC,WAEvDD,EAAQ+G,KAAK01C,MAAMtS,IAAInqC,QACvBC,EAAS8G,KAAK01C,MAAMtS,IAAIlqC,UAE5BkqC,EAAItqC,KAAKkH,KAAK01C,MAAMtS,OAG5Bo9F,EAAKvnI,MAAQA,GAAS8E,GAAQk2H,GAC9BuM,EAAKtnI,OAASA,GAAU6E,GAAQk2H,GAC5B3yC,EAAS,GAAIgyC,IAAa14H,MAAe4lI,IAC7CxgI,KAAKshF,OAASA,EACdthF,KAAK8jC,OAAOw9C,GACRthF,KAAK01C,OACL11C,KAAK8jC,OAAO9jC,KAAK01C,OAErB4rC,EAAOq1B,OAAO,GAAIuT,KAClBlqH,KAAK0gI,WAAat9F,EAAItqC,KAAKwoF,EAAOl+C,OAG1CuzE,OAAQ,SAAUqgB,GAAV,GAUIjM,GAAW3nF,EAAKo5F,EATpB59C,EAAM5+E,KACNI,EAAUw+E,EAAIx+E,QACds1C,EAAQkpC,EAAIlpC,MACZ4rC,EAAS1C,EAAI0C,OACbo/C,EAAa9hD,EAAI8hD,WACjBvpE,EAAS6/D,EAAU7/D,SACnBv/D,EAASwI,EAAQukG,KAAK/sG,OACtB+pC,EAAWvhC,EAAQuhC,QACnBvhC,GAAQoD,UAEJP,EAAQ0+B,GACJzf,GACAE,KAEAuf,IAAazf,IACbs6G,EAAakE,EAAWtJ,QAAQJ,EAAWr1F,GAAU5E,WAAWnlC,EAAQo/H,EAAU7/D,SAAS9lD,EAAIqvH,EAAWvpE,SAAS9lD,GAC/GjR,EAAQukG,KAAKnhG,UACbunH,GACIiM,EAAUngE,GACVM,EAAO9lD,GAEXrR,KAAK2gI,YACD5V,GAEIyR,EAAWzlE,GACXI,EAAO9lD,IAGf+xB,EAAMo5F,EAAWrgI,QAAQ86H,UAAUlM,MAGvCyR,EAAakE,EAAWtJ,QAAQJ,EAAWr1F,GAAU5E,UAAUnlC,EAAQo/H,EAAU7/D,SAAS9lD,EAAIqvH,EAAWvpE,SAAS9lD,GAC9GjR,EAAQukG,KAAKnhG,UACbunH,GACIiM,EAAUjgE,GACVI,EAAO9lD,GAEXrR,KAAK2gI,YACD5V,GAEIyR,EAAW3lE,GACXM,EAAO9lD,IAGf+xB,EAAMo5F,EAAWrgI,QAAQ86H,UAAUlM,KAIvCppF,IAAaupC,IACbsxD,EAAakE,EAAWtJ,QAAQJ,EAAWr1F,GAAU5E,UAAUi6F,EAAU7/D,SAASlkC,EAAIytG,EAAWvpE,SAASlkC,EAAGr7B,GACzGwI,EAAQukG,KAAKnhG,UACbunH,GACI5zD,EAAOlkC,EACP+jG,EAAUhgE,IAEdh3D,KAAK2gI,YACD5V,GAEI5zD,EAAOlkC,EACPupG,EAAW1lE,KAGnB1zB,EAAMo5F,EAAWrgI,QAAQ86H,UAAUlM,MAGvCyR,EAAakE,EAAWtJ,QAAQJ,EAAWr1F,GAAU5E,UAAUi6F,EAAU7/D,SAASlkC,EAAIytG,EAAWvpE,SAASlkC,GAAIr7B,GAC1GwI,EAAQukG,KAAKnhG,UACbunH,GACI5zD,EAAOlkC,EACP+jG,EAAUlgE,IAEd92D,KAAK2gI,YACD5V,GAEI5zD,EAAOlkC,EACPupG,EAAWxlE,KAGnB5zB,EAAMo5F,EAAWrgI,QAAQ86H,UAAUlM,KAI3CzpC,GACAA,EAAOq1B,OAAO6lB,GAEd9mF,IACAA,EAAMihE,OAAO6lB,GACTl7C,IACIlhF,EAAQs1C,MAAM/T,WAAagwF,IAC3Bj8E,EAAMtS,IAAIg0F,QAAQ91C,EAAOl+C,IAAKzB,GAElC+T,EAAMihE,OAAOjhE,EAAMtS,OAG3BpjC,KAAKw8H,WAAaA,EAClBx8H,KAAKg3H,UAAYA,EACjBh3H,KAAKojC,IAAMA,GAAOo5F,IAG1BrC,aAAc,WACV9G,GAAWpvH,GAAGk2H,aAAahyH,KAAKnI,MAChCA,KAAKmiG,OAAO/hG,QAAQs6H,OAAS16H,KAAKI,QAAQs6H,OACtC16H,KAAKI,QAAQoD,SACbxD,KAAK4gI,cAGb1G,aAAc,WAAA,GACN/6C,GAASn/E,KACTI,EAAUJ,KAAKI,QACfo7H,EAAep7H,EAAQ+hG,MACvB/hG,GAAQoD,SAAWg4H,GACnBx7H,KAAKmiG,OAASq5B,EAAa9kI,EAAEgK,OAAOV,KAAKwvC,QACrCtnC,OAAQlI,KAAK45H,YACbn7D,KAAMz+D,KAAKg3H,UAAUgB,SACrB53H,SACI4+F,WAAY5+F,EAAQ4+F,WACpBq9B,OAAQj8H,EAAQ4+F,WAChBwhC,KAAMpgI,EAAQogI,KACd9qF,MAAOt1C,EAAQs1C,MACfivD,KAAMvkG,EAAQukG,KACdhjE,SAAUvhC,EAAQuhC,SAClBn+B,QAASpD,EAAQoD,SAErB22H,aAAc,WACVh7C,EAAOg7C,eACPh7C,EAAOi8B,gBACP,IAAIylB,GAAgB1hD,EAAOgjB,MAE3B,cADOhjB,GAAOgjB,OACP0+B,MAGf7gI,KAAKo6H,aAEL/G,GAAWpvH,GAAGi2H,aAAa/xH,KAAKnI,OAGxC4gI,WAAY,WAAA,GAGA55F,GAFJ5mC,EAAUJ,KAAKI,QAAQukG,IACvB3kG,MAAK2gI,aACD35F,EAAO81D,GAAKiS,WAAW/uG,KAAK2gI,YAC5B3jC,QACI/oB,MAAO7zE,EAAQ6zE,MACfh7E,MAAOmH,EAAQnH,MACf4lH,SAAUz+G,EAAQy+G,YAG1B2J,EAAiBxhF,GACjBhnC,KAAKmiG,OAAOr+D,OAAOkD,KAG3BhmB,MAAO,SAAUhe,EAAQiF,GACrB,GAAIqgB,GAAOtoB,KAAK8gI,UAAU74H,EACrBjF,GAAOgF,QAAQypH,GAAYnpG,IAC5BrgB,EAAE9D,kBAGV48H,MAAO,SAAU/9H,EAAQiF,GACrB,GAAIqgB,GAAOtoB,KAAK8gI,UAAU74H,EACrBjF,GAAOgF,QAAQ0pH,GAAYppG,IAC5BrgB,EAAE9D,kBAGV68H,MAAO,SAAUh+H,GACbA,EAAOi+H,qBAEXH,UAAW,SAAU74H,GACjB,GAAI7H,GAAUJ,KAAKI,OACnB,OAAO1J,GAAEgK,OAAOV,KAAKwvC,QACjBz3C,QAAS8qF,GAAa56E,GACtBmtB,KAAMssD,GAAQthF,EAAQs1C,OAASt1C,EAAQs1C,MAAMtgB,KAAO,GACpD+sE,OAAQniG,KAAKmiG,YAIzBwnB,EAAkBwK,IACdqM,MACIh9H,SAAS,EACTtE,KAAM0yH,IAEVl8E,OACI/T,SAAUqwF,GACVxuH,SAAS,EACT+nF,MAAOvgB,GACP2gB,OAAQ3gB,IAEZ25B,MAAQnhG,SAAS,GACjBA,SAAS,EACTm+B,SAAUspC,GACVtnC,OAAQ,IAuCRywF,GAAOhB,GAAa1yH,QACpBC,KAAM,SAAUP,EAAS25H,GACA,SAAjBA,IACAA,EAAe,GAAItH,KAEvBW,GAAanvH,GAAGtD,KAAKwH,KAAKnI,KAAMI,GAChCJ,KAAK+5H,aAAeA,EACf/5H,KAAKI,QAAQoD,UACdxD,KAAKI,QAAUxF,MAAeoF,KAAKI,SAC/B8gI,QAAU19H,SAAS,GACnBmhG,MAAQnhG,SAAS,GACjBs/B,OAAQ,EACRq+F,cAAe,EACfC,cAAe,KAGvBphI,KAAKI,QAAQihI,WAAazmI,OACtBq5E,MAAOj0E,KAAKI,QAAQukG,KAAK1wB,MACzBh7E,MAAO+G,KAAKI,QAAQukG,KAAK1rG,MACzBuK,QAASxD,KAAKI,QAAQkhI,gBAAkBznG,IACzC75B,KAAKI,QAAQihI,YACZtjI,KAAMiC,KAAKI,QAAQghI,cACnB71C,MAAOvrF,KAAKI,QAAQkhI,gBAExBthI,KAAKI,QAAQmhI,WAAa3mI,OACtBq5E,MAAOj0E,KAAKI,QAAQukG,KAAK1wB,MACzBh7E,MAAO+G,KAAKI,QAAQukG,KAAK1rG,MACzBuK,QAASxD,KAAKI,QAAQohI,gBAAkB3nG,IACzC75B,KAAKI,QAAQmhI,YACZxjI,KAAMiC,KAAKI,QAAQ+gI,cACnB51C,MAAOvrF,KAAKI,QAAQohI,gBAEnBxhI,KAAKI,QAAQqhI,cACdzhI,KAAK0hI,eAET1hI,KAAK2hI,cACL3hI,KAAK4hI,eAETC,YAAa,WACT,OACI7vH,IAAKhS,KAAKI,QAAQ8gI,OAAOxzF,KACzBh1C,IAAKsH,KAAK8hI,gBAGlBJ,aAAc,WAAA,GAcF3jF,GACAra,EASK/lC,EACD+3C,EAxBRypC,EAASn/E,KACTI,EAAUJ,KAAKI,QACfmrF,EAAQnrF,EAAQw7B,SAAWxZ,GAAQ4oD,GACnC+2D,EAAennI,MAAewF,EAAQ8gI,QACtC31C,MAAOA,EACP5nD,OAAQvjC,EAAQujC,SAEhB1E,EAAOrgC,KAAKlG,IAAI,EAAGqpI,EAAa9iG,KAKpC,IAJAj/B,KAAKrF,SAAWoyB,EAAK/sB,KAAKrF,SAAU,SAAU42B,GAC1C,QAASA,YAAiByiG,OAE9Bh0H,KAAKkhI,UACDa,EAAav+H,QAWb,IAVIu6C,EAAQ/9C,KAAK6hI,cACbn+F,EAAWq+F,EAAar+F,SACxBklF,EAASllF,KACTq+F,EAAajC,cAAgBp8F,EAAS6nD,MACtCw2C,EAAar+F,SAAWA,EAAS4jD,OAEP,SAA1By6C,EAAar+F,WACbq+F,EAAar+F,SAAW,EACxBtjC,EAAQ4hI,kBAAmB,GAEtBrkI,EAAMogD,EAAM/rC,IAAKrU,EAAMogD,EAAMrlD,IAAKiF,GAAOshC,EAC1CyW,EAAQypC,EAAO8iD,gBAAgBtkI,EAAKokI,GACpCrsF,IACAypC,EAAOr7C,OAAO4R,GACdypC,EAAO+hD,OAAOp5H,KAAK4tC,KAKnCwsF,QAAS,WAAA,GACDtjD,GAAM5+E,KACNI,EAAUw+E,EAAIx+E,QACdgjC,EAAMw7C,EAAIx7C,IACVxH,EAAWx7B,EAAQw7B,SACnB4D,EAASp/B,EAAQ8gI,OAAO1hG,OACxB2iG,EAAQ3iG,EAAS4D,EAAIyzB,GAAKzzB,EAAI2zB,GAC9BqrE,EAAQ5iG,EAAS4D,EAAI4zB,GAAK5zB,EAAI0zB,GAC9B8sD,EAAYxjH,EAAQukG,KAAK1rG,OAAS,CACtC,OAAO2iC,GAAW,GAAIsuF,IAAIiY,EAAO/+F,EAAI0zB,GAAIqrE,EAAO/+F,EAAI4zB,GAAK4sD,GAAa,GAAIsG,IAAI9mF,EAAIyzB,GAAIurE,EAAOh/F,EAAI2zB,GAAK6sD,EAAWwe,IAErHT,YAAa,WAAA,GASDr5F,GARJloC,EAAUJ,KAAKI,QACfy/H,EAAejlI,IACf8oC,SAAUtjC,EAAQw7B,aAAiB,EACnCxG,KAAM,GACNuO,OAAQ,EACR0+F,YAAY,GACbjiI,EAAQkoC,MACPu3F,GAAar8H,SAAWq8H,EAAazqG,OACjCkT,EAAQ,GAAIwrF,IAAQ+L,EAAazqG,KAAMyqG,GAC3C7/H,KAAK8jC,OAAOwE,GACZtoC,KAAKsoC,MAAQA,IAGrBs5F,YAAa,WAAA,GAMA9mI,GACD43C,EAEA4vF,EARJnjD,EAASn/E,KACTI,EAAUJ,KAAKI,QACfmiI,EAAQniI,EAAQmiI,MAChB/7G,EAAQ+7G,EAAM/mI,QAElB,KADAwE,KAAKuiI,SACIznI,EAAI,EAAGA,EAAI0rB,EAAM5uB,OAAQkD,IAC1B43C,EAAO93C,MAAe2nI,EAAO/7G,EAAM1rB,IACvC43C,EAAK90C,MAAQuhF,EAAOqjD,eAAe9vF,EAAK90C,OACpC0kI,EAAO,GAAInO,KACXv2H,MAAO80C,EAAK90C,MACZw3B,KAAMsd,EAAKgD,MAAMtgB,KACjB3O,SAAUisB,GACXA,EAAMysC,EAAO46C,cACZuI,EAAKliI,QAAQoD,UACTk+E,GAAQ4gD,EAAKliI,QAAQuhC,UACjBvhC,EAAQw7B,WAAa34B,EAAQq/H,EAAKliI,QAAQuhC,UACtCzf,GACAE,KAEJkgH,EAAKliI,QAAQuhC,SAAWvhC,EAAQE,QAAU4hB,GAAOE,GACzChiB,EAAQw7B,UAAa34B,EAAQq/H,EAAKliI,QAAQuhC,UAC9CspC,GACAC,OAEJo3D,EAAKliI,QAAQuhC,SAAWvhC,EAAQE,QAAU4qE,GAASD,IAInDq3D,EAAKliI,QAAQuhC,SADbvhC,EAAQw7B,SACgBx7B,EAAQE,QAAU4hB,GAAOE,GAEzBhiB,EAAQE,QAAU4qE,GAASD,GAG3DkU,EAAOr7C,OAAOw+F,GACdnjD,EAAOojD,MAAMz6H,KAAKw6H,KAI9BE,eAAgB,SAAU5kI,GACtB,MAAOA,IAEXs8H,aAAc,WACV9G,GAAanvH,GAAGi2H,aAAa/xH,KAAKnI,MAClCA,KAAKyiI,mBAETtI,aAAc,WACV/G,GAAanvH,GAAGk2H,aAAahyH,KAAKnI,MAClCA,KAAKw9H,mBACLx9H,KAAK4gI,cAET8B,gBAAiB,WACb,GAAIC,GAAY3iI,KAAK4iI,UAKrB,OAJKD,KACDA,EAAY3iI,KAAK4iI,WAAa,GAAIpzC,KAAQ7rD,YAC1C3jC,KAAKw6H,aAAax6H,KAAK4iI,aAEpBD,GAEXE,YAAa,SAAUC,GAMnB,QAASv6H,GAAOw6H,EAAerY,EAAasY,GAA5C,GAIiBloI,GAHT4Y,EAAQqvH,EAAcnrI,OACtBqnC,EAAOrgC,KAAKlG,IAAI,EAAGgyH,EAAYzrF,KACnC,IAAIyrF,EAAYlnH,QACZ,IAAS1I,EAAI4vH,EAAYh9E,KAAM5yC,EAAI4Y,EAAO5Y,GAAKmkC,EACvCyiD,GAAQshD,IAAaloI,EAAIkoI,IAAa,IAG1CC,EAAgBtY,MAAQnrF,EAAS0iG,EAAQnrE,GAAKmrE,EAAQnrE,GAAK2zD,EAAY3sH,KACvEklI,EAAgBrY,MAAQprF,EAAS0iG,EAAQprE,GAAK4zD,EAAY3sH,KAAOmkI,EAAQprE,GACzEmsE,EAAgBthG,SAAWohG,EAAcjoI,GACzCgoI,EAAUh/F,OAAO2mF,EAAewY,EAAiBvY,KAjBpD,GACLtqH,GAAUJ,KAAKI,QACf8hI,EAAUliI,KAAKkiI,UACf1iG,EAASp/B,EAAQ8gI,OAAO1hG,OACxB2vF,EAAY/uH,EAAQmhI,WAAW/9H,QAAUpD,EAAQ+uH,UAAY,EAC7D8T,GAAoBrnG,SAAUx7B,EAAQw7B,SAgB1CrzB,GAAOvI,KAAKkjI,wBAAyB9iI,EAAQmhI,YAC7Ch5H,EAAOvI,KAAKmjI,wBAAyB/iI,EAAQihI,WAAYlS,EAAY/uH,EAAQuvH,YAEjFiR,WAAY,WAAA,GAKA55F,GAWAgN,EAfJ5zC,EAAUJ,KAAKI,QACfukG,EAAOvkG,EAAQukG,KACfu9B,EAAUliI,KAAKkiI,SACfv9B,GAAK1rG,MAAQ,GAAK0rG,EAAKnhG,UACnBwjC,EAAO,GAAI81D,KACXE,QACI/jG,MAAO0rG,EAAK1rG,MACZg7E,MAAO0wB,EAAK1wB,MACZ4qC,SAAUla,EAAKka,YAGvB73E,EAAKZ,OAAO87F,EAAQrrE,GAAIqrE,EAAQprE,IAAIm5B,OAAOiyC,EAAQnrE,GAAImrE,EAAQlrE,IAC3D52D,EAAQgjI,aACR5a,EAAiBxhF,GAEjBgN,EAAQh0C,KAAKqjI,WAAa,GAAI7zC,IAClCx7C,EAAMlQ,OAAOkD,GACbhnC,KAAKmiG,OAAOr+D,OAAOkQ,GACnBh0C,KAAK6iI,YAAY7uF,KAGzBsvF,kBAAmB,WAAA,GACXljI,GAAUJ,KAAKI,QACfmjI,EAAW,CAQf,OAPInjI,GAAQmhI,WAAW/9H,SAAWpD,EAAQihI,WAAW79H,QACjD+/H,EAAW3kI,KAAKlG,IAAI0H,EAAQmhI,WAAWxjI,KAAMqC,EAAQihI,WAAWtjI,MACzDqC,EAAQmhI,WAAW/9H,QAC1B+/H,EAAWnjI,EAAQmhI,WAAWxjI,KACvBqC,EAAQihI,WAAW79H,UAC1B+/H,EAAWnjI,EAAQihI,WAAWtjI,MAE3BwlI,GAEX/F,iBAAkB,WAAA,GACV5+C,GAAM5+E,KACNI,EAAUw+E,EAAIx+E,QACdgjC,EAAMw7C,EAAIx7C,IACV47D,EAAa5+F,EAAQ4+F,UACrBA,KACAh/F,KAAKwjI,gBAAkB1mC,GAAKkF,SAAS5+D,EAAI40F,UACrCj7B,MAAQ9oB,MAAO+qB,GACfhC,OAAQ,OAEZh9F,KAAKmiG,OAAOr+D,OAAO9jC,KAAKwjI,mBAGhCf,gBAAiB,WAAA,GASTzuF,GACAyvF,EAGK9lI,EACD+0C,EACAgxF,EAAgBC,EASZC,EAOA58F,EA9BRm4C,EAASn/E,KACTI,EAAUJ,KAAKI,QACfyjI,EAAYzjI,EAAQyjI,cACpBjoG,EAAWx7B,EAAQw7B,SACnBkoG,EAAW9jI,KAAK8jI,QACpB,IAAyB,IAArBD,EAAUjsI,OAAd,CAOA,IAJIo8C,EAAQh0C,KAAK+jI,eAAiB,GAAIv0C,KAAQ7rD,YAC1C8/F,EAAU12G,EAAK/sB,KAAKgoE,KAAKg8D,KAAM,SAAUvwG,GACzC,MAAOA,GAAKrzB,QAAQw7B,WAAaujD,EAAO/+E,QAAQw7B,WACjD,GACMj+B,EAAM,EAAGA,EAAMkmI,EAAUjsI,OAAQ+F,IAClC+0C,EAAOmxF,EAAUlmI,GACjB+lI,EAAQ,OAAQC,EAAQ,OACxB/nG,GACA8nG,GAASD,GAAWK,EAAS3B,OAAOD,UACpCyB,EAAQxkD,EAAO8kD,QAAQvxF,EAAK1lB,KAAM0lB,EAAKzlB,IAAI,KAE3Cy2G,EAAQvkD,EAAO8kD,QAAQvxF,EAAK1lB,KAAM0lB,EAAKzlB,IAAI,GAC3C02G,GAASF,GAAWK,EAAS1B,OAAOF,WAElB,IAAlBwB,EAAMzqI,SAAoC,IAAnB0qI,EAAMzqI,WACzB0qI,EAAW,GAAI54C,KACf04C,EAAM7sE,GACN8sE,EAAM7sE,KAEN4sE,EAAMzqI,QACN0qI,EAAMzqI,WAEN8tC,EAAO81D,GAAKkF,SAAS4hC,GACrB7mC,MACI9oB,MAAOvhC,EAAKuhC,MACZ/vC,QAASwO,EAAKxO,SAElB84D,OAAQ,OAEZhpD,EAAMlQ,OAAOkD,GAGrBhnC,MAAKw6H,aAAaxmF,KAEtBkwF,gBAAiB,SAAUT,GAiBvB,QAASl7H,GAAOw6H,EAAejY,EAAUkY,GAAzC,GAIiBloI,GACDm0E,EAJRv7D,EAAQqvH,EAAcnrI,OACtBqnC,EAAOrgC,KAAKlG,IAAI,EAAGoyH,EAAS7rF,KAChC,IAAI6rF,EAAStnH,QACT,IAAS1I,EAAIgwH,EAASp9E,KAAM5yC,EAAI4Y,EAAO5Y,GAAKmkC,EACpCgwC,EAAMx/D,GAAMszH,EAAcjoI,IACzBmI,EAAQgsE,EAAKsyD,IACVzmI,EAAIkoI,IAAa,GAAOmB,GAAmBC,IAAYn1D,IACvDo1D,EAAY1iG,SAAWstC,EACvBtnD,EAAUmc,OAAO+mF,EAAmBwZ,EAAavZ,IACjDyW,EAAWz5H,KAAKmnE,IA3BvB,GACT7uE,GAAUJ,KAAKI,QACfkkI,EAAiBlkI,EAAQkkI,eACzBC,EAAiBnkI,EAAQmkI,eACzB5U,EAAYvvH,EAAQuvH,UACpB/zF,EAAWx7B,EAAQw7B,SACnBuoG,EAAkBV,EAAQrjI,QAAQukG,KAAKnhG,QACvC2rH,EAAYoV,EAAe/gI,QAAUpD,EAAQ+uH,UAAY,EACzD+S,EAAUuB,EAAQvB,UAClBkC,EAAUlC,EAAQtmG,EAAW,KAAO,MACpCyoG,GACAtZ,UAAWmX,EAAQtmG,EAAW,KAAO,MACrCovF,QAASkX,EAAQtmG,EAAW,KAAO,MACnCA,SAAUA,GAEV2lG,KACA55G,EAAY3nB,KAAK0iI,iBAmBrB,OAFAn6H,GAAOvI,KAAKkjI,wBAAyBqB,GACrCh8H,EAAOvI,KAAKmjI,wBAAyBmB,EAAgBnV,EAAYQ,GAC1DhoG,EAAUhtB,UAErBg8G,OAAQ,SAAUvzE,GAAV,GAaKtoC,GACD0pI,EAbJ5lD,EAAM5+E,KACNI,EAAUw+E,EAAIx+E,QACd8gI,EAAStiD,EAAIsiD,OACb54F,EAAQs2C,EAAIt2C,MACZ1M,EAAWx7B,EAAQw7B,SACnBloB,EAAQwtH,EAAOtpI,OACf6sI,EAAS7oG,EAAWE,GAAQD,GAC5B6oG,EAAYp8F,EAAQA,EAAMlF,IAAIqhG,KAAY,EAC1Cp5H,EAAQrL,KAAKsjI,oBAAsBljI,EAAQ0iC,OAAS4hG,EACpDC,GAAW3kI,KAAK25H,eAAiBv2F,KAAOA,EACxCsrC,EAAUi2D,EAAQF,KAClBG,EAAe,CACnB,KAAS9pI,EAAI,EAAGA,EAAI4Y,EAAO5Y,IACnB0pI,EAAYtD,EAAOpmI,GAAGsoC,IAAIqhG,KAC1BD,EAAYn5H,GAASqjE,IACrBk2D,EAAehmI,KAAKlG,IAAIksI,EAAcJ,GAI1CxkI,MAAKojC,IADLxH,EACW,GAAIsuF,IAAI9mF,EAAIyzB,GAAIzzB,EAAI0zB,GAAI1zB,EAAIyzB,GAAK+tE,EAAev5H,EAAO+3B,EAAI4zB,IAE3D,GAAIkzD,IAAI9mF,EAAIyzB,GAAIzzB,EAAI0zB,GAAI1zB,EAAI2zB,GAAI3zB,EAAI0zB,GAAK8tE,EAAev5H,GAEvErL,KAAK6kI,eACL7kI,KAAK8kI,gBACL9kI,KAAK+kI,gBAETC,uBAAwB,WACpB,MAAOhlI,MAAKkjI,yBAEhB+B,eAAgB,SAAUvvF,GACtB,MAAOA,GAAMvjC,OAEjB2yH,cAAe,WAAA,GAWFnnI,GACD+3C,EACAwvF,EACAV,EACAW,EACAC,EAAmBC,EAA4BC,EAKvCnN,EAGJoN,EAiBAC,EAxCRrmD,EAASn/E,KACT4+E,EAAM5+E,KACNI,EAAUw+E,EAAIx+E,QACd8gI,EAAStiD,EAAIsiD,OACbuE,GAAsBrlI,EAAQslI,UAC9B9pG,EAAWx7B,EAAQw7B,SACnBsmG,EAAUliI,KAAKkiI,UACf1iG,EAASp/B,EAAQ8gI,OAAO1hG,OACxBujG,EAAgB/iI,KAAKglI,yBACrBW,EAAc3lI,KAAKsjI,oBAAsBljI,EAAQ0iC,MACrD,KAASnlC,EAAM,EAAGA,EAAMujI,EAAOtpI,OAAQ+F,IAC/B+3C,EAAQwrF,EAAOvjI,GACfunI,EAAS/lD,EAAO8lD,eAAevvF,GAC/B8uF,EAAY5oG,EAAW8Z,EAAMtS,IAAIlqC,SAAWw8C,EAAMtS,IAAInqC,QACtDksI,EAAWpC,EAAcmC,GAAUV,EAAY,EAC/CY,EAAW,OAAQC,EAAoB,OAAQC,EAAmB,OAClE1pG,GACI6pG,IACAJ,EAAoBtC,EAAcmC,GAClCI,EAAmBvC,EAAcmC,EAAS,GACtC/M,EAASkN,GAAqBC,EAAmBD,GAAqB,EAC1EF,EAAWhN,EAASqM,EAAY,GAEhCe,EAASrD,EAAQnrE,GACjBv3B,GACA+lG,GAAUI,EACVjwF,EAAMt1C,QAAQ4/H,eAAiB99G,KAE/BqjH,GAAUI,EAAcjwF,EAAMtS,IAAInqC,QAClCy8C,EAAMt1C,QAAQ4/H,eAAiB59G,IAEnCgjH,EAAW1vF,EAAMtS,IAAIrY,KAAKw6G,EAAQJ,KAE9BM,GACAJ,EAAoBtC,EAAcmC,GAClCI,EAAmBvC,EAAcmC,EAAS,KAE1CG,EAAoBF,EACpBG,EAAmBH,EAAWX,GAE9BgB,EAAStD,EAAQprE,GACjBt3B,GACAgmG,GAAUG,EAAcjwF,EAAMtS,IAAIlqC,SAClCw8C,EAAMt1C,QAAQ4/H,eAAiB90D,KAE/Bs6D,GAAUG,EACVjwF,EAAMt1C,QAAQ4/H,eAAiB/0D,IAEnCm6D,EAAW,GAAIlb,IAAImb,EAAmBG,EAAQF,EAAkBE,EAAS9vF,EAAMtS,IAAIlqC,WAEvFw8C,EAAMihE,OAAOyuB,IAGrBpD,iBAAkB,WAAA,GAENe,GACA7B,EACA55C,EACK3pF,EACD1E,EACAmsI,EAUKQ,CAhBjB,IAAI5lI,KAAKI,QAAQ4hI,mBAAqBhiI,KAAKI,QAAQw7B,SAAU,CAIzD,IAHImnG,EAAgB/iI,KAAKkjI,wBACrBhC,EAASlhI,KAAKkhI,OAETvjI,EAAM,EAAGA,EAAMujI,EAAOtpI,OAAQ+F,IAGnC,GAFI1E,EAAQ8pI,EAAcplI,EAAM,GAAKolI,EAAcplI,GAC/CynI,EAAWlE,EAAOvjI,GAAKylC,IACvBgiG,EAASnsI,QAAUA,EAAO,CAC1B,GAAImsI,EAASlsI,SAAWD,EAAO,CAC3BquF,KACA,OAEJA,MAGR,GAAIA,EAAO,CACP,IAASs+C,EAAQ,EAAGA,EAAQ1E,EAAOtpI,OAAQguI,IACvC1E,EAAO0E,GAAOxlI,QAAQsjC,SAAW4jD,EACjC45C,EAAO0E,GAAOjvB,OAAO,GAAIuT,IAE7B,QAAO,KAInB2a,aAAc,WAAA,GACNjmD,GAAM5+E,KACNI,EAAUw+E,EAAIx+E,QACdkoC,EAAQs2C,EAAIt2C,MACZ9I,EAASp/B,EAAQ8gI,OAAO1hG,OACxB5D,EAAWx7B,EAAQw7B,QACnB0M,KACI1M,GACA0M,EAAMloC,QAAQmrF,MAAQ/rD,EAASpd,GAAQF,GACvComB,EAAMloC,QAAQurF,OAASrjD,EAAMloC,QAAQuhC,WAErC2G,EAAMloC,QAAQmrF,MAAQjjD,EAAMloC,QAAQuhC,SACpC2G,EAAMloC,QAAQurF,OAASnsD,EAASyrC,GAAMC,IAE1C5iC,EAAMquE,OAAO32G,KAAKojC,OAG1B2hG,aAAc,WAAA,GAEDpnI,GACD+0C,EACA90C,EACAioI,EAJJ1mD,EAASn/E,IACb,KAASrC,EAAM,EAAGA,EAAMqC,KAAKuiI,MAAM3qI,OAAQ+F,IACnC+0C,EAAOysC,EAAOojD,MAAM5kI,GACpBC,EAAQ80C,EAAKtyC,QAAQxC,MACrBioI,EAAO,OACPnkD,GAAQ9jF,IACJuhF,EAAO2mD,iBAAiBloI,GACxB80C,EAAK14C,OAEL04C,EAAK5xC,OAET+kI,EAAO1mD,EAAO4mD,SAASnoI,IAEvB80C,EAAK5xC,OAET4xC,EAAKikE,OAAOkvB,GAAQ1mD,EAAO+iD,YAGnC6D,SAAU,SAAUnoI,GAChB,MAAOoC,MAAKikI,QAAQrmI,IAExBw5H,QAAS,SAAU4O,GAAV,GACD9D,GAAU8D,EAAW9D,UACrBtmG,EAAW57B,KAAKI,QAAQw7B,SACxBqzC,EAAMrzC,EAAWtqB,GAAI6/G,EACzBnxH,MAAKojC,IAAI+zF,OAAO+K,EAASjzD,GACrBrzC,EACA57B,KAAKojC,IAAIk0F,OAAO,EAAGt3H,KAAKkiI,UAAUhpI,SAAWgpI,EAAQhpI,UAErD8G,KAAKojC,IAAIk0F,OAAOt3H,KAAKkiI,UAAUjpI,QAAUipI,EAAQjpI,QAAS,GAE9D+G,KAAKojC,IAAI6rC,EAAM,IAAMjvE,KAAKkiI,UAAUjzD,EAAM,GAAKizD,EAAQjzD,EAAM,GAC7DjvE,KAAKojC,IAAI6rC,EAAM,IAAMjvE,KAAKkiI,UAAUjzD,EAAM,GAAKizD,EAAQjzD,EAAM,IAEjEg3D,cAAe,SAAUroI,EAAO6oB,EAAUrmB,GAA3B,GACP8lI,GAAO9c,EAAYhpH,GACnBg1B,EAAOx3B,CAWX,OAVIsoI,GACA9wG,EAAO8wG,GACHtoI,MAAOA,EACP6oB,SAAUA,EACV1d,OAAQ3I,EAAQ2I,OAChByC,QAASpL,EAAQoL,UAEdpL,EAAQ2I,SACfqsB,EAAOp1B,KAAK+5H,aAAahxH,OAAOgtH,WAAW31H,EAAQ2I,QAASnL,GAAQwC,EAAQoL,UAEzE4pB,GAEXywG,KAAM,SAAU74G,EAAMC,EAAIk5G,GACtB,GAAIN,GAAO7lI,KAAKikI,QAAQj3G,EAAMC,EAAIk5G,EAClC,IAAIN,EACA,MAAOA,GAAK7N,UAGpBwE,WAAY,WAAA,GAOA4J,GANJhjG,EAAMpjC,KAAKojC,IAAIjnC,QACf+kI,EAASlhI,KAAKkhI,MAUlB,OATIA,GAAOtpI,SACHspI,EAAO,GAAG9gI,QAAQoD,SAClB4/B,EAAItqC,KAAKooI,EAAO,GAAG99F,KAEnBgjG,EAAYlF,EAAOA,EAAOtpI,OAAS,GACnCwuI,EAAUhmI,QAAQoD,SAClB4/B,EAAItqC,KAAKstI,EAAUhjG,MAGpBA,GAEXijG,WAAY,SAAUr5G,EAAMC,EAAIjb,EAAKtZ,EAAK0G,GAA9B,GAWJknI,GACAhY,EACAI,EAZAtuH,EAAUJ,KAAKI,OACnB,OAAI4sB,GAAOhb,GAAO5S,EAAS,KAAOsiF,GAAQthF,EAAQ4R,MAAQ5R,EAAQ4R,KAAOA,IAAQtZ,EAAMu0B,GAAM7tB,EAAS,KAAOsiF,GAAQthF,EAAQ1H,MAAQA,GAAO0H,EAAQ1H,KACzI,KAEPu0B,EAAKjb,GAAO5S,EAAS,GAAK1G,EAAMs0B,GAAQ5tB,EAAS;AAE7C4S,IAAKgb,EACLt0B,IAAKu0B,IAGTq5G,EAAYr5G,EAAKD,EACjBshG,EAAWthG,EACX0hG,EAAWzhG,EACXD,EAAOhb,GACPs8G,EAAWvrC,GAAW/1D,EAAMhb,EAAKtZ,GACjCg2H,EAAW3rC,GAAW/1D,EAAOs5G,EAAWt0H,EAAMs0H,EAAW5tI,IAClDu0B,EAAKv0B,IACZg2H,EAAW3rC,GAAW91D,EAAIjb,EAAKtZ,GAC/B41H,EAAWvrC,GAAW91D,EAAKq5G,EAAWt0H,EAAKtZ,EAAM4tI,KAGjDt0H,IAAKs8G,EACL51H,IAAKg2H,KAGb6X,WAAY,WACR,OACIv0H,IAAKhS,KAAK8uH,UACVp2H,IAAKsH,KAAK+uH,cAItBpF,EAAkByK,IACd8M,QACI19H,SAAS,EACTkgC,SAAU,EACVlE,QAAQ,EACRP,KAAM,EACNyO,KAAM,GAEVi3D,MACI1rG,MAAO,EACPg7E,MAAOs9C,GACP/tH,SAAS,GAEb8kC,OACI9kC,SAAS,EACTm+B,SAAUqpC,IAEdu2D,YACIh2C,MAAOomC,GACP5zH,KAAM,EACN2vC,KAAM,EACNzO,KAAM,GAEVoiG,YACI91C,MAAOomC,GACP5zH,KAAM,EACN2vC,KAAM,EACNzO,KAAM,GAEV0xF,kBAAmB,EACnB6Q,cAAe7P,GACf2P,cAAeznG,GACf0qG,gBACI72F,KAAM,EACNzO,KAAM,GAEVqlG,gBACI9gI,SAAS,EACTvK,MAAO,EACPg7E,MAAOs9C,GACP7jF,KAAM,EACNzO,KAAM,GAEV6D,OAAQ,EACRt/B,SAAS,EACTlD,SAAS,EACTolI,WAAW,EACXnD,OAAS7sF,OAAStgB,KAAM,KACxBguG,aAAa,EACb3B,cAAc,IAEd/U,GAAe,eACfF,GAAU,UACVF,GAAU,UACVD,GAAQ,QACRD,GAAO,OACPD,GAAQ,QACRD,GAAS,SACTD,GAAQ,QACRoI,GAAuB,EACvB5H,GAAkB,IAClBtB,GAAkB,GAAKsB,GACvBX,GAAgB,GAAKX,GACrBM,GAAe,GAAKK,GACpBmE,GAAgB,EAAIxE,GACpBuE,GAAiB,GAAKvE,GACtBsE,GAAgB,IAAMtE,GACtB2B,IACAoZ,MAASzW,GACT7jH,OAAU8jH,GACVyW,MAASxW,GACThkH,KAAQw/G,GACRv4G,MAAS44G,GACTz/G,QAAW8+G,GACXj2G,QAAWu3G,GACXt3G,aAAgBk/G,IAoMhBC,GAA4B,IAa5BC,GAAeH,GAAK1zH,QACpBC,KAAM,SAAUP,EAAS25H,GACrB3F,GAAKnwH,GAAGtD,KAAKwH,KAAKnI,KAAMI,EAAS25H,GACjC/5H,KAAK0mI,UACL1mI,KAAK2mI,gBAAgB3mI,KAAKI,UAE9BumI,gBAAiB,SAAUvmI,GAAV,GAOL4R,GACAtZ,EAPJkuI,GAAcxmI,EAAQwmI,gBAAkBpgI,MAAM,GAC9CqgI,EAAanlD,GAAQthF,EAAQ4R,KAC7B80H,EAAaplD,GAAQthF,EAAQ1H,IACjC0H,GAAQwmI,WAAaA,GAChBC,GAAcC,IAAeF,EAAWhvI,SACzCwI,EAAQ2mI,cAAgB3mI,EAAQwmI,WAC5B50H,EAAM60H,EAAajoI,KAAKpE,MAAM4F,EAAQ4R,KAAO,EAG7CtZ,EADAouI,EACM1mI,EAAQslI,UAAY9mI,KAAKpE,MAAM4F,EAAQ1H,KAAO,EAAIkG,KAAKuoD,KAAK/mD,EAAQ1H,KAEpEkuI,EAAWhvI,OAErBwI,EAAQwmI,WAAaxmI,EAAQwmI,WAAWpgI,MAAMwL,EAAKtZ,KAG3DsuI,aAAc,WAAA,GAINtuI,GAHA0H,EAAUJ,KAAKI,QACfxI,EAASwI,EAAQwmI,WAAWhvI,QAAU,EACtCoa,EAAMghC,EAAS5yC,EAAQ4R,KAAO5R,EAAQ4R,IAAM,EAAI,CAOpD,OAJItZ,GADAs6C,EAAS5yC,EAAQ1H,MAAQ0H,EAAQ1H,IAAM,IAAM,GAAK0H,EAAQ1H,IAAMsH,KAAKinI,aAAavuI,IAC5Ed,GAAU,EAAIwI,EAAQ1H,IAAM,GAE5Bd,GAAUwI,EAAQslI,UAAY,EAAI,IAGxC1zH,IAAKA,EACLtZ,IAAKA,IAGbwuI,kBAAmB,SAAUf,GAAV,GAGXztI,GASIuuI,EAXJ7mI,EAAUJ,KAAKI,QACf4R,EAAMghC,EAAS5yC,EAAQ4R,KAAO5R,EAAQ4R,IAAM,CAchD,OAXItZ,GADAs6C,EAAS5yC,EAAQ1H,KACX0H,EAAQ1H,IACPs6C,EAAS5yC,EAAQ4R,KAClBA,EAAM5R,EAAQwmI,WAAWhvI,QAExBwI,EAAQ2mI,eAAiB3mI,EAAQwmI,YAAYhvI,QAAUwI,EAAQslI,UAAY,EAAI,IAAM,EAE5FS,IACIc,EAAajnI,KAAKinI,aACtBj1H,EAAM+wE,GAAW/wE,EAAK,EAAGi1H,EAAWvuI,KACpCA,EAAMqqF,GAAWrqF,EAAK,EAAGuuI,EAAWvuI,OAGpCsZ,IAAKA,EACLtZ,IAAKA,IAGbqlD,MAAO,WACH,GAAI39C,GAAUJ,KAAKI,OACnB,QACI4R,IAAKghC,EAAS5yC,EAAQ4R,KAAO5R,EAAQ4R,IAAM,EAC3CtZ,IAAKs6C,EAAS5yC,EAAQ1H,KAAO0H,EAAQ1H,IAAM0H,EAAQwmI,WAAWhvI,SAGtEqvI,WAAY,WACR,GAAI7mI,GAAUJ,KAAKI,OACnB,QACI4R,IAAK,EACLtZ,IAAKkG,KAAKlG,IAAIsH,KAAKmnI,YAAc,GAAI/mI,EAAQ2mI,eAAiB3mI,EAAQwmI,YAAYhvI,SAAWwI,EAAQslI,UAAY,EAAI,KAG7H0B,SAAU,WAAA,GACFxoD,GAAM5+E,KAAKgnI,eACXh1H,EAAM4sE,EAAI5sE,IACVtZ,EAAMkmF,EAAIlmF,IACVwpI,EAAUliI,KAAKkiI,UACfnkI,EAAOiC,KAAKI,QAAQw7B,SAAWsmG,EAAQhpI,SAAWgpI,EAAQjpI,QAC1DyjC,EAAQ3+B,GAAQrF,EAAMsZ,GAAO,EACjC,OAAO0qB,IAAS18B,KAAKI,QAAQE,WAAe,IAEhD+mI,iBAAkB,SAAUC,GAYxB,IAZc,GACV1oD,GAAM5+E,KAAKI,QACXw7B,EAAWgjD,EAAIhjD,SACft7B,EAAUs+E,EAAIt+E,QACdu2G,EAAQ72G,KAAKgnI,eACbh1H,EAAM6kG,EAAM7kG,IACZtZ,EAAMm+G,EAAMn+G,IACZwpI,EAAUliI,KAAKkiI,UACfxlG,EAAQ18B,KAAKonI,WACbn4D,EAAMizD,GAAStmG,EAAWtqB,GAAI6/G,KAAM7wH,EAAU,EAAI,IAClDmvE,KACA9jE,EAAUqG,EAAM,IAAM,EAAIpT,KAAKpE,MAAMwX,EAAM,GAAKs1H,EAAWt1H,EACxDrG,GAAWjT,GACd+2E,EAAU3nE,KAAKmnE,EAAMx/D,GAAMitB,GAAS/wB,EAAUqG,GAAMy3G,KACpD99G,GAAW27H,CAEf,OAAO73D,IAEXu1D,uBAAwB,WAAA,GAChBjC,GAAgB/iI,KAAKkjI,wBAAwB18H,MAAM,GACnDu3C,EAAQ/9C,KAAKgnI,eACbtqG,EAAQ18B,KAAKonI,WACbhkG,EAAMpjC,KAAKkiI,UACX9hI,EAAUJ,KAAKI,QACfqzB,EAAOrzB,EAAQw7B,SAAWtqB,GAAI6/G,GAC9BliH,EAAQ7O,EAAQE,QAAU,EAAI,EAC9B3I,EAAMyI,EAAQE,QAAU,EAAI,CAOhC,OANIy9C,GAAM/rC,IAAM,IAAM,GAClB+wH,EAAch7H,QAAQq7B,EAAI3P,EAAOxkB,GAASytB,GAASqhB,EAAM/rC,IAAM,IAE/D+rC,EAAMrlD,IAAM,IAAM,GAClBqqI,EAAcj7H,KAAKs7B,EAAI3P,EAAO97B,GAAO+kC,GAAS,EAAIqhB,EAAMrlD,IAAM,IAE3DqqI,GAEXkC,eAAgB,SAAUvvF,GAAV,GACRqI,GAAQ/9C,KAAKgnI,eACb70H,EAAQujC,EAAMvjC,KAIlB,OAHI4rC,GAAM/rC,IAAM,IACZG,GAAgBvT,KAAKpE,MAAMujD,EAAM/rC,MAE9BG,GAEX2yH,cAAe,WACX1Q,GAAKnwH,GAAG6gI,cAAc38H,KAAKnI,MAC3BA,KAAKunI,wBAETA,qBAAsB,WAAA,GAKVC,GACAv4H,EACAtX,EACA8vI,EACArB,EARJxnD,EAAM5+E,KACNojC,EAAMw7C,EAAIx7C,IACV89F,EAAStiD,EAAIsiD,MACbA,GAAOtpI,SACH4vI,EAAYxnI,KAAKI,QAAQw7B,SAAWtqB,GAAI6/G,GACxCliH,EAAQm0B,EAAIokG,EAAY,GACxB7vI,EAAMyrC,EAAIokG,EAAY,GACtBC,EAAavG,EAAO,GACpBkF,EAAY92G,GAAK4xG,IACjBuG,EAAWrkG,IAAIokG,EAAY,GAAK7vI,GAAO8vI,EAAWrkG,IAAIokG,EAAY,GAAKv4H,KACvEw4H,EAAWrnI,QAAQoD,SAAU,IAE7B4iI,EAAUhjG,IAAIokG,EAAY,GAAK7vI,GAAOyuI,EAAUhjG,IAAIokG,EAAY,GAAKv4H,KACrEm3H,EAAUhmI,QAAQoD,SAAU,KAIxC0/H,sBAAuB,WACnB,MAAOljI,MAAK0nI,WAAWnG,YAE3B4B,sBAAuB,WACnB,MAAOnjI,MAAK0nI,WAAWrG,YAE3BqG,SAAU,WAAA,GACF9oD,GAAM5+E,KAAKI,QACXE,EAAUs+E,EAAIt+E,QACdolI,EAAY9mD,EAAI8mD,UAChBl5G,EAAQxsB,KAAK0mI,OACb3oF,EAAQ/9C,KAAKgnI,eACb9E,EAAUliI,KAAKkiI,UACfr5F,EAAOq5F,EAAQxK,UAAY35E,EAAM/rC,IAAM,IAAM+rC,EAAMrlD,IAAM4H,EAAUolI,CAMvE,OALIl5G,GAAMm7G,QAAU9+F,IAChBrc,EAAMm7G,MAAQ9+F,EACdrc,EAAM+0G,WAAavhI,KAAKqnI,iBAAiB,GACzC76G,EAAM60G,WAAarhI,KAAKqnI,iBAAiB,KAEtC76G,GAEXy3G,QAAS,SAAUj3G,EAAMC,EAAIk5G,GAApB,GAkBD9gD,GACAC,EAlBA1G,EAAM5+E,KACNI,EAAUw+E,EAAIx+E,QACdE,EAAUF,EAAQE,QAClBolI,EAAYtlI,EAAQslI,UACpB9pG,EAAWx7B,EAAQw7B,SACnBi7E,EAAQ72G,KAAKgnI,eACbh1H,EAAM6kG,EAAM7kG,IACZw1H,EAAY5rG,EAAWtqB,GAAI6/G,GAC3B+Q,EAAUliI,KAAKkiI,UACfxlG,EAAQ18B,KAAKonI,WACbrc,EAAYmX,EAAQsF,GAAalnI,EAAU,EAAI,IAC/CsnI,EAAU1F,EAAQ/lI,QAClB0rI,GAAcnmD,GAAQz0D,GACtBhe,EAAQs0E,GAAev2D,EAAM,GAC7Br1B,EAAM4rF,GAAet2D,EAAIhe,EAc7B,OAbAtX,GAAMiH,KAAKlG,IAAIf,EAAM,EAAGsX,GACxBtX,EAAMiH,KAAKlG,IAAIuW,EAAOtX,GAClB0tF,EAAK0lC,GAAa97G,EAAQ+C,GAAO0qB,EACjC4oD,EAAKylC,GAAapzH,EAAM,EAAIqa,GAAO0qB,EACnCmrG,GAAcnC,IACdpgD,EAAKD,GAEL8gD,IACA9gD,EAAKtC,GAAWsC,EAAI68C,EAAQsF,EAAY,GAAItF,EAAQsF,EAAY,IAChEliD,EAAKvC,GAAWuC,EAAI48C,EAAQsF,EAAY,GAAItF,EAAQsF,EAAY,KAEpEI,EAAQJ,EAAY,GAAKlnI,EAAUglF,EAAKD,EACxCuiD,EAAQJ,EAAY,GAAKlnI,EAAU+kF,EAAKC,EACjCsiD,GAEX/B,KAAM,SAAU74G,EAAMC,EAAIk5G,GAApB,GACEl3H,GAAQ+d,EACRr1B,EAAMs1B,CAOV,OANqB,gBAAVhe,KACPA,EAAQjP,KAAK8nI,cAAc74H,IAEZ,gBAARtX,KACPA,EAAMqI,KAAK8nI,cAAcnwI,IAEtBy8H,GAAKnwH,GAAG4hI,KAAK19H,KAAKnI,KAAMiP,EAAOtX,EAAKwuI,IAE/C4B,mBAAoB,SAAU1/C,GAAV,GAgBZzqF,GACA0gF,EAhBAM,EAAM5+E,KAAKI,QACXE,EAAUs+E,EAAIt+E,QACdolI,EAAY9mD,EAAI8mD,UAChB9pG,EAAWgjD,EAAIhjD,SACf4rG,EAAY5rG,EAAWtqB,GAAI6/G,GAC3B+Q,EAAUliI,KAAKkiI,UACfnkF,EAAQ/9C,KAAKgnI,eACbhsG,EAAa16B,EAAUy9C,EAAMrlD,IAAMqlD,EAAM/rC,IACzC0qB,EAAQ18B,KAAKonI,WACbrc,EAAYmX,EAAQsF,EAAY,GAChCxc,EAAUkX,EAAQsF,EAAY,GAC9Bv4D,EAAMoZ,EAAMm/C,EAChB,OAAIv4D,GAAM87C,GAAa97C,EAAM+7C,EAClB,MAEPptH,EAAQo9B,GAAci0C,EAAM87C,GAAaruF,EACzC4hD,EAAO1gF,EAAQ,EACf8nI,EACA9nI,EAAQgB,KAAK6Q,MAAM7R,GACH,IAAT0gF,GAAc1gF,EAAQ,GAC7BA,IAEGgB,KAAKpE,MAAMoD,KAEtBoqI,YAAa,SAAU3/C,GACnB,GAAIl2E,GAAQnS,KAAK+nI,mBAAmB1/C,EACpC,OAAc,QAAVl2E,EACO,KAEJnS,KAAKI,QAAQwmI,WAAWz0H,IAEnC21H,cAAe,SAAUlqI,GAAV,GACPwC,GAAUJ,KAAKI,QACf+R,EAAQjU,EAAQN,EAAOwC,EAAQ2mI,eAAiB3mI,EAAQwmI,WAC5D,OAAOz0H,GAAQvT,KAAKpE,MAAM4F,EAAQ4R,KAAO,IAE7Ci2H,eAAgB,SAAU50G,GAAV,GACRjzB,GAAUJ,KAAKI,QACf8hI,EAAUliI,KAAKkiI,UACfnkI,EAAOqC,EAAQw7B,SAAWsmG,EAAQhpI,SAAWgpI,EAAQjpI,QACrD8kD,EAAQ39C,EAAQwmI,WAAWhvI,OAC3B8kC,EAAQ3+B,EAAOggD,EACf3+C,EAASqQ,GAAM4jB,EAAQqJ,EAAOwxF,GAClC,QACIl8G,IAAK5S,EACL1G,IAAKqlD,EAAQ3+C,IAGrB8oI,UAAW,SAAUC,GAAV,GACHnB,GAAehnI,KAAKknI,oBACpBtoD,EAAM5+E,KAAKinI,aACXmB,EAAWxpD,EAAI5sE,IACfq2H,EAAWzpD,EAAIlmF,IACfsZ,EAAM+wE,GAAWikD,EAAah1H,IAAMm2H,EAAMC,EAAUC,GACpD3vI,EAAMqqF,GAAWikD,EAAatuI,IAAMyvI,EAAMC,EAAUC,EACxD,IAAI3vI,EAAMsZ,EAAM,EACZ,OACIA,IAAKA,EACLtZ,IAAKA,IAIjB4vI,WAAY,SAAU5rG,GAAV,GACJqhB,GAAQ/9C,KAAKI,QAAQwmI,WAAWhvI,OAChCy7B,EAAQqJ,EAAQqhB,CACpB,QACI/rC,KAAMqhB,EACN36B,IAAKqlD,EAAQ1qB,IAGrByuG,YAAa,WACT,GAAID,GAAc7hI,KAAK6hI,aACvB,OAAOA,GAAYnpI,IAAMmpI,EAAY7vH,KAEzC6vH,YAAa,WAAA,GAeLn0F,GAdAttC,EAAUJ,KAAKI,QACfslI,EAAYtlI,EAAQslI,UACpB3D,EAAe3hI,EAAQ8gI,OACvBtiD,EAAM5+E,KAAKknI,mBAAkB,GAC7Bl1H,EAAM4sE,EAAI5sE,IACVtZ,EAAMkmF,EAAIlmF,IACVuW,EAAQrQ,KAAKpE,MAAMwX,EAcvB,OAbK0zH,IAID1zH,EAAMpT,KAAKuoD,KAAKn1C,GAChBtZ,EAAMkG,KAAKpE,MAAM9B,KAJjBsZ,EAAMpT,KAAKpE,MAAMwX,GACjBtZ,EAAMkG,KAAKuoD,KAAKzuD,IAOhBg1C,EADA17B,EAAM+vH,EAAar0F,KACZq0F,EAAar0F,KAAOq0F,EAAa9iG,KAAOrgC,KAAKuoD,MAAMn1C,EAAM+vH,EAAar0F,MAAQq0F,EAAa9iG,MAE3F8iG,EAAar0F,MAGpB17B,IAAK07B,EAAOz+B,EACZvW,KAAM0H,EAAQwmI,WAAWhvI,OAASc,GAAOgtI,EAAY,EAAI,GAAK,GAAKz2H,IAG3EgzH,gBAAiB,SAAU9vH,EAAO4vH,GAAjB,GACT3hI,GAAUJ,KAAKI,QACfqmB,EAAWrmB,EAAQ+lB,UAAY/lB,EAAQ+lB,UAAUhU,GAAS,KAC1DypH,EAAWr4C,GAAenjF,EAAQwmI,WAAWz0H,GAAQ,IACrDijB,EAAOp1B,KAAKimI,cAAcrK,EAAUn1G,EAAUs7G,EAClD,OAAO,IAAI/N,IAAU4H,EAAUxmG,EAAMjjB,EAAOsU,EAAUs7G,IAE1D+D,iBAAkB,SAAUloI,GACxB,GAAImgD,GAAQ/9C,KAAKknI,mBACjB,OAAOtoI,MAAKpE,MAAMujD,EAAM/rC,MAAQpU,GAASA,GAASgB,KAAKuoD,KAAKpJ,EAAMrlD,MAEtEqtI,SAAU,SAAUnoI,GAAV,GACFwC,GAAUJ,KAAKI,QACf+R,EAAQvU,EAAQgB,KAAKpE,MAAM4F,EAAQ4R,KAAO,EAC9C,OAAOhS,MAAKikI,QAAQ9xH,IAExB4yH,aAAc,WACV3Q,GAAKnwH,GAAG8gI,aAAa58H,KAAKnI,MAC1BA,KAAKuoI,uBAETA,oBAAqB,WAAA,GAKTf,GACAv4H,EACAtX,EACKgG,EACD2kI,EARR1jD,EAAM5+E,KACNuiI,EAAQ3jD,EAAI2jD,MACZn/F,EAAMw7C,EAAIx7C,GACd,IAAIm/F,GAASA,EAAM3qI,OAIf,IAHI4vI,EAAYxnI,KAAKI,QAAQw7B,SAAWtqB,GAAI6/G,GACxCliH,EAAQm0B,EAAIokG,EAAY,GACxB7vI,EAAMyrC,EAAIokG,EAAY,GACjB7pI,EAAM,EAAGA,EAAM4kI,EAAM3qI,OAAQ+F,IAC9B2kI,EAAOC,EAAM5kI,GACb2kI,EAAKl/F,MAAQzrC,EAAM2qI,EAAKl/F,IAAIokG,EAAY,IAAMlF,EAAKl/F,IAAIokG,EAAY,GAAKv4H,IACxEqzH,EAAKxhI,QAKrB0nI,IAAK,SAAUn1G,GAAV,GACG0qB,GAAQ/9C,KAAKknI,mBAAkB,GAC/BxqG,EAAQ18B,KAAKonI,WACbhoI,EAASqQ,GAAM4jB,EAAQqJ,EAAOwxF,IAC9B+Y,EAAajnI,KAAKinI,aAClBj1H,EAAM+rC,EAAM/rC,IAAM5S,EAClB1G,EAAMqlD,EAAMrlD,IAAM0G,CACtB,OAAOY,MAAKqmI,WAAWr0H,EAAKtZ,EAAK,EAAGuuI,EAAWvuI,IAAK0G,IAExDqpI,YAAa,SAAUx5H,EAAOtX,GAAjB,GACLinF,GAAM5+E,KAAKI,QACXE,EAAUs+E,EAAIt+E,QACds7B,EAAWgjD,EAAIhjD,SACf4rG,EAAY5rG,EAAWtqB,GAAI6/G,GAC3B+Q,EAAUliI,KAAKkiI,UACfnkF,EAAQ/9C,KAAKknI,mBAAkB,GAC/BxqG,EAAQ18B,KAAKonI,WACbrc,EAAYmX,EAAQsF,GAAalnI,EAAU,EAAI,IAC/CooI,EAAYz5H,EAAMu4H,GAAazc,EAC/B4d,EAAUhxI,EAAI6vI,GAAazc,EAC3B/4G,EAAM+rC,EAAM/rC,IAAM02H,EAAYhsG,EAC9BhkC,EAAMqlD,EAAM/rC,IAAM22H,EAAUjsG,EAC5BksG,EAAWhqI,KAAKoT,IAAIA,EAAKtZ,GACzBmwI,EAAWjqI,KAAKlG,IAAIsZ,EAAKtZ,EAC7B,IAAImwI,EAAWD,GAAYtU,GACvB,OACItiH,IAAK42H,EACLlwI,IAAKmwI,IAIjBtC,WAAY,WACR,MAAOvmI,MAAK+9C,WAGpB4rE,EAAkB4K,IACdr1H,KAAM,WACN0nI,cACAhrG,UAAU,EACV2oG,gBACI/gI,SAAS,EACTvK,MAAO,EACPg7E,MAAOs9C,IAEX2P,QAAUv9F,OAAQ,GAClB+hG,WAAW,EACXjE,cAAc,IAEd7S,GAAmB,IACnB4F,IACAr/G,aAAc,eACdD,QAAS,WACT7I,QAAS,QACT6G,MAAO,QACPjH,KAAM,MACNw6H,MAAO,MACPv6H,OAAQ,UACRs6H,MAAO,QAEPjY,GAAiB,GACjBzwF,GAAO,OACP22F,IACA/H,GACAF,GACAF,GACAD,GACAD,GACAD,GACAD,GACAD,IAEAyI,GAAM,MACNC,GAAmBJ,GAAa7zH,QAChCC,KAAM,SAAU6uH,EAAauK,GAAvB,GAEEnM,GACAxtH,EASI+sH,EACA2b,CAZRvU,IAAatwH,GAAGtD,KAAKwH,KAAKnI,KAAMwvH,EAAauK,GACzCnM,EAAcmM,EAAajE,KAC3B11H,EAAUJ,KAAKI,QACnBA,EAAUxF,IAAamuI,iBAAiB,GAAQ3oI,GAC5CwmI,WAAY/Y,EAAWD,EAAaxtH,EAAQwmI,YAC5C50H,IAAK0E,EAAUk3G,EAAaxtH,EAAQ4R,KACpCtZ,IAAKge,EAAUk3G,EAAaxtH,EAAQ1H,OAExC0H,EAAQ4oI,gBAAkB5oI,EAAQ4oI,iBAAmB5oI,EAAQ+sH,SAC7D/sH,EAAQ6oI,oBAAsB7oI,EAAQ6oI,qBAAuB7oI,EAAQktH,aACjEltH,EAAQwmI,YAAcxmI,EAAQwmI,WAAWhvI,OAAS,GAC9Cu1H,GAAY/sH,EAAQ+sH,UAAY,IAAIrwH,cACpCgsI,EAAa3b,IAAauH,KAAQzxH,EAAQkqH,EAAUsH,IACpDqU,IACA1oI,EAAQ+sH,SAAWntH,KAAKkpI,gBAAgB9oI,IAExC+sH,IAAauH,IAAOt0H,EAAQktH,eAAiBxvF,IAC7C99B,KAAKmpI,aAAa/oI,GAEtBJ,KAAKopI,aAAerd,EAAY3rH,EAAQwmI,WAAW,GAAI,EAAGxmI,EAAQ+sH,SAAU/sH,EAAQqvB,cACpFzvB,KAAKqpI,gBAAgBjpI,IAErBA,EAAQ+sH,SAAW/sH,EAAQ+sH,UAAYf,GAE3CpsH,KAAKI,QAAUA,GAEnBumI,gBAAiB,aAEjBb,iBAAkB,SAAUloI,GAAV,GACVmgD,GAAQ/9C,KAAK+9C,QACb6oF,EAAa5mI,KAAKI,QAAQwmI,cAC9B,OAAO9Z,GAAalvH,EAAOmgD,EAAM/rC,MAAQ,GAAK86G,EAAalvH,EAAOmgD,EAAMrlD,MAAQ,GAAKkuI,EAAWhvI,QAEpG4qI,eAAgB,SAAU5kI,GACtB,MAAO8Y,GAAU1W,KAAK+5H,aAAajE,KAAMl4H,IAE7CmoI,SAAU,SAAUnoI,GAChB,MAAOoC,MAAKikI,QAAQrmI,IAExBqqI,eAAgB,SAAU50G,GAAV,GAWJrG,GACAC,EAXJ7sB,EAAUJ,KAAKI,QACf+sH,EAAW/sH,EAAQ+sH,SACnB19F,EAAervB,EAAQqvB,aACvBmM,EAAWx7B,EAAQw7B,SACnBsmG,EAAUliI,KAAKkiI,UACfnkI,EAAO69B,EAAWsmG,EAAQhpI,SAAWgpI,EAAQjpI,QAC7C8kD,EAAQ/9C,KAAK+9C,QACbrhB,EAAQ3+B,GAAQggD,EAAMrlD,IAAMqlD,EAAM/rC,KAClC5S,EAASqQ,GAAM4jB,EAAQqJ,EAAOwxF,GASlC,OARInwE,GAAM/rC,KAAO+rC,EAAMrlD,MACfs0B,EAAOo+F,EAAShrH,EAAQ4R,KAAO+rC,EAAM/rC,IAAK5S,GAC1C6tB,EAAKm+F,EAAShrH,EAAQ1H,KAAOqlD,EAAMrlD,IAAK0G,GAC5C2+C,GACI/rC,IAAK+5G,EAAY/+F,EAAM,EAAGmgG,EAAU19F,GACpC/2B,IAAKqzH,EAAY9+F,EAAI,EAAGkgG,EAAU19F,KAGnCsuB,GAEXuqF,WAAY,SAAUj1G,GAAV,GAOI0qB,GACA9e,EAPRqqG,EAAS1qI,KAAKC,IAAIw0B,GAClBr0B,EAASgB,KAAK+9C,QACd/wB,EAAOhuB,EAAOgT,IACdib,EAAKjuB,EAAOtG,GAChB,IAAIs0B,GAAQC,EAAI,CACZ,KAAOq8G,KACCvrF,EAAQgvE,EAAS//F,EAAMC,GACvBgS,EAAOrgC,KAAK6Q,MAAc,GAARsuC,GAClB1qB,EAAQ,GACRrG,EAAOo+F,EAASp+F,EAAMiS,GACtBhS,EAAKm+F,EAASn+F,GAAKgS,KAEnBjS,EAAOo+F,EAASp+F,GAAOiS,GACvBhS,EAAKm+F,EAASn+F,EAAIgS,GAG1BjgC,IACIgT,IAAKgb,EACLt0B,IAAKu0B,GAGb,MAAOjuB,IAEXkqI,gBAAiB,SAAU9oI,GAAV,GAITmpI,GAAcx3C,EACTy3C,EACD5N,EAEIt9C,EAPRsoD,EAAaxmI,EAAQwmI,WACrBlzH,EAAQguE,GAAQklD,GAAcA,EAAWhvI,OAAS,EAClD6xI,EAAU/7B,EAEd,KAAS87B,EAAa,EAAGA,EAAa91H,EAAO81H,IACrC5N,EAAWgL,EAAW4C,GACtB5N,GAAY2N,IACRjrD,EAAO2sC,EAAiB2Q,EAAU2N,GAClCjrD,EAAO,IACPmrD,EAAU7qI,KAAKoT,IAAIy3H,EAASnrD,GAExByT,EADA03C,GAAW1Z,GACJ9D,GACAwd,GAAWzZ,GAAgC,EAAfvE,GAC5BS,GACAud,GAAWxZ,GACX9D,GACAsd,GAAWhe,GACXW,GACAqd,GAAW3d,GACXO,GACAod,GAAWte,GACXmB,GAEAE,KAInB+c,EAAe3N,CAEnB,OAAO7pC,IAAQq6B,IAEnBsd,eAAgB,SAAU9C,GACtB,GAAI7oF,GAAQ6oF,EAAW+C,MAIvB,OAHK5rF,KACDA,EAAQ6oF,EAAW+C,OAAS/f,EAAkBgd,IAE3C7oF,GAEXkpF,WAAY,WACR,OACIj1H,IAAK,EACLtZ,IAAKsH,KAAKI,QAAQwmI,WAAWhvI,SAGrCovI,aAAc,WAAA,GACN5mI,GAAUJ,KAAKI,QACfwmI,EAAaxmI,EAAQwmI,WACrBzZ,EAAW/sH,EAAQ+sH,SACnBG,EAAeltH,EAAQktH,cAAgB,EACvCsc,EAAiB5pI,KAAK6pI,kBACtB73H,EAAMs5G,EAAOlrH,EAAQ4R,KAAO43H,EAAe53H,KAC3CtZ,EAAM4yH,EAAOlrH,EAAQ1H,KAAOkxI,EAAelxI,KAC3CoxI,EAAS,EAAGC,EAAS,CASzB,OARInD,GAAWhvI,SACXkyI,EAASzc,EAAUr7G,EAAK40H,EAAW,GAAIzZ,EAAUG,GACjDyc,EAAS1c,EAAU30H,EAAKkuI,EAAW,GAAIzZ,EAAUG,GAC7CltH,EAAQ2oI,kBACRe,EAASlrI,KAAKpE,MAAMsvI,GACpBC,EAAS3pI,EAAQslI,UAAY9mI,KAAKpE,MAAMuvI,GAAUnrI,KAAKuoD,KAAK4iF,MAIhE/3H,IAAK83H,EACLpxI,IAAKqxI,IAGblI,YAAa,WAAA,GACLzhI,GAAUJ,KAAKI,QACf2hI,EAAe3hI,EAAQ8gI,OACvBnjF,EAAQ/9C,KAAKgnI,eACbh1H,EAAMpT,KAAKpE,MAAMujD,EAAM/rC,KACvBtZ,EAAMkG,KAAKuoD,KAAKpJ,EAAMrlD,IAC1B,QACIsZ,IAAKA,EAAM+vH,EAAar0F,KACxBh1C,IAAK0H,EAAQwmI,WAAWhvI,OAASc,GAAO0H,EAAQslI,UAAY,EAAI,GAAK,IAG7EmE,gBAAiB,WAAA,GACTzpI,GAAUJ,KAAKI,QACf29C,EAAQ/9C,KAAK0pI,eAAetpI,EAAQ2mI,eAAiB3mI,EAAQwmI,YAC7DluI,EAAM4yH,EAAOvtE,EAAMrlD,IAIvB,QAHK0H,EAAQslI,WAAazY,EAAWv0H,EAAKsH,KAAKgqI,kBAAkBtxI,EAAK0H,GAAS,MAC3E1H,EAAMsH,KAAKgqI,kBAAkBtxI,EAAK0H,GAAS,GAAM,KAGjD4R,IAAKs5G,EAAOvtE,EAAM/rC,KAClBtZ,IAAKA,IAGbuxI,aAAc,WAAA,GACN7pI,GAAUJ,KAAKI,QACf8pI,EAAW9pI,EAAQ2oI,mBAAoB,EACvC9B,EAAajnI,KAAK6pI,kBAClB73H,EAAM5R,EAAQ4R,IACdtZ,EAAM0H,EAAQ1H,GAOlB,OANKsZ,KACDA,EAAMk4H,EAAWlqI,KAAKgqI,kBAAkB/C,EAAWj1H,IAAK5R,GAAS,GAAS6mI,EAAWj1H,KAEpFtZ,IACDA,EAAMwxI,EAAWlqI,KAAKgqI,kBAAkB/C,EAAWvuI,IAAK0H,GAAUA,EAAQslI,WAAauB,EAAWvuI,MAGlGsZ,IAAKA,EACLtZ,IAAKA,IAGbyxI,WAAY,WACR,GAAIpsF,GAAQ/9C,KAAK0pI,eAAe1pI,KAAKI,QAAQ2mI,eAAiB/mI,KAAKI,QAAQwmI,WAC3E,QACI50H,IAAKs5G,EAAOvtE,EAAM/rC,KAClBtZ,IAAK4yH,EAAOvtE,EAAMrlD,OAG1B8vI,IAAK,SAAUn1G,GAAV,GACGjzB,GAAUJ,KAAKI,QACf8hI,EAAUliI,KAAKkiI,UACfnkI,EAAOqC,EAAQw7B,SAAWsmG,EAAQhpI,SAAWgpI,EAAQjpI,QACrD2lF,EAAM5+E,KAAKiqI,eACXj4H,EAAM4sE,EAAI5sE,IACVtZ,EAAMkmF,EAAIlmF,IACV0xI,EAAcpqI,KAAKoqI,cACnB1tG,EAAQ3+B,GAAQrF,EAAMsZ,GACtB5S,EAASqQ,GAAM4jB,EAAQqJ,EAAOwxF,IAC9BlhG,EAAOo+F,EAASp5G,EAAK5S,GACrB6tB,EAAKm+F,EAAS1yH,EAAK0G,GACnBirI,EAAWrqI,KAAKqmI,WAAWrZ,EAAOhgG,GAAOggG,EAAO//F,GAAK+/F,EAAOod,EAAYp4H,KAAMg7G,EAAOod,EAAY1xI,KAAM0G,EAC3G,IAAIirI,EAOA,MANAA,GAASr4H,IAAMs5G,EAAO+e,EAASr4H,KAC/Bq4H,EAAS3xI,IAAM4yH,EAAO+e,EAAS3xI,KAC/B2xI,EAASld,SAAW/sH,EAAQ+sH,SAC5Bkd,EAAS/c,aAAeltH,EAAQktH,cAAgB,EAChD+c,EAASrB,gBAAkB5oI,EAAQ4oI,gBACnCqB,EAASpB,oBAAsB7oI,EAAQ6oI,oBAChCoB,GAGf5B,YAAa,SAAUx5H,EAAOtX,GAAjB,GACL8wI,GAAclU,GAAatwH,GAAGwkI,YAAYtgI,KAAKnI,KAAMiP,EAAOtX,GAC5DwyI,EAAanqI,KAAKiqI,eAClBK,EAAetqI,KAAKgnI,eACpBtqG,EAAQqwF,EAASod,EAAWzxI,IAAKyxI,EAAWn4H,MAAQs4H,EAAa5xI,IAAM4xI,EAAat4H,KACpF5R,EAAUJ,KAAKI,QACf4R,EAAMo5G,EAAS+e,EAAWn4H,IAAKy2H,EAAYz2H,IAAM0qB,GACjDhkC,EAAM0yH,EAAS+e,EAAWn4H,IAAKy2H,EAAY/vI,IAAMgkC,EACrD,QACI1qB,IAAKA,EACLtZ,IAAKA,EACLy0H,SAAU/sH,EAAQ4oI,gBAClB1b,aAAcltH,EAAQ6oI,sBAG9Bf,UAAW,SAAU70G,GAAV,GAYCk3G,GACAC,EACAC,EACAC,EACApsD,EACAqsD,EACAC,EAAkBvf,EAQdwf,EAzBRzqI,EAAUJ,KAAKI,QACfgqI,EAAcpqI,KAAKoqI,cACnB36G,EAAervB,EAAQqvB,aACvB09F,EAAW/sH,EAAQ+sH,SACnBG,EAAeltH,EAAQktH,cAAgB,EACvC1uC,EAAM5+E,KAAKiqI,eACXrB,EAAWhqD,EAAI5sE,IACf62H,EAAWjqD,EAAIlmF,IACfsZ,EAAM+5G,EAAY6c,EAAUv1G,EAAQi6F,EAAcH,EAAU19F,GAC5D/2B,EAAMqzH,EAAY8c,GAAWx1G,EAAQi6F,EAAcH,EAAU19F,EACjE,IAAIrvB,EAAQ4oI,kBAAoBtU,GAQ5B,GAPI6V,EAAoBnqI,EAAQmqI,kBAC5BC,EAAgBpqI,EAAQoqI,cACxBC,EAAUn7G,GAAKi7G,EAAkBpd,IAAaqd,EAAgBpd,GAAcD,GAC5Eud,EAAY3d,EAAS8b,EAAUD,GAC/BtqD,EAAOyuC,EAASr0H,EAAKsZ,GACrB24H,EAAgBlW,GAAWv2H,QAAQivH,GAEnC7uC,EAAO8uC,GAAcD,IAAaA,IAAaT,GAC/CS,EAAWsH,GAAWkW,EAAgB,GACtCC,EAAmBt7G,GAAKi7G,EAAkBpd,IAC1C9B,GAASqf,GAAaF,EAAgB,GAAKI,EAAmBxd,GAAcD,IAAa,EACzFn7G,EAAMo5G,EAASwd,EAAUvd,GACzB3yH,EAAM0yH,EAASyd,GAAWxd,OACvB,IAAI/sC,EAAOmsD,GAAWtd,IAAalB,GAAO,CACzC4e,EAAY,CAChB,GAAG,CACCF,IACAxd,EAAWsH,GAAWkW,GACtBE,EAAY,EACZxf,EAAQ,EAAI+B,GAAcD,EAC1B,GACIyd,GAAmBL,EAAkBpd,GAAU0d,GAC/CA,UACKA,EAAYN,EAAkBpd,GAAUv1H,QAAUyzH,EAAQuf,EAAmBF,SACjFvd,IAAalB,IAASZ,EAAQuf,EAAmBF,EAC1Drf,IAASA,EAAQuf,EAAmBF,GAAa,EAC7Crf,EAAQ,IACRr5G,EAAMo5G,EAASwd,GAAWvd,GAC1B3yH,EAAM0yH,EAASyd,EAAUxd,GACzBr5G,EAAMo5G,EAASp5G,EAAK+wE,GAAWrqF,EAAK0xI,EAAYp4H,IAAKo4H,EAAY1xI,KAAOA,GACxEA,EAAM0yH,EAAS1yH,EAAKqqF,GAAW/wE,EAAKo4H,EAAYp4H,IAAKo4H,EAAY1xI,KAAOsZ,IAMpF,GAFAA,EAAMs5G,EAAOvoC,GAAW/wE,EAAKo4H,EAAYp4H,IAAKo4H,EAAY1xI,MAC1DA,EAAM4yH,EAAOvoC,GAAWrqF,EAAK0xI,EAAYp4H,IAAKo4H,EAAY1xI,MACtDsZ,GAAOtZ,GAAOq0H,EAASr0H,EAAKsZ,GAAO,EACnC,OACIA,IAAKA,EACLtZ,IAAKA,EACLy0H,SAAU/sH,EAAQ4oI,gBAClB1b,aAAcltH,EAAQ6oI,sBAIlCmB,YAAa,WAAA,GACLhqI,GAAUJ,KAAKI,QACf+pI,EAAanqI,KAAKmqI,aAClBn4H,EAAMhS,KAAKgqI,kBAAkB1e,EAAO6e,EAAWn4H,KAAM5R,GAAS,GAC9D1H,EAAMyxI,EAAWzxI,GAIrB,OAHK0H,GAAQslI,YACThtI,EAAMsH,KAAKgqI,kBAAkBtxI,EAAK0H,GAAS,EAAM6sH,EAAWv0H,EAAKsH,KAAKgqI,kBAAkBtxI,EAAK0H,GAAS,OAGtG4R,IAAKA,EACLtZ,IAAKA,IAGbqlD,MAAO,SAAU+sF,GAAV,GACC1qI,GAAU0qI,GAAgB9qI,KAAKI,QAC/BwmI,EAAaxmI,EAAQwmI,WACrBmE,EAAW3qI,EAAQ+sH,WAAauH,GAChCvH,EAAW4d,EAAWtW,GAAW,GAAKr0H,EAAQ+sH,SAC9CG,EAAeltH,EAAQktH,cAAgB,EACvC0d,GACA7d,SAAUA,EACVG,aAAcA,EACd79F,aAAcrvB,EAAQqvB,cAEtBm6G,EAAiB5pI,KAAK0pI,eAAe9C,GACrC50H,EAAMs5G,EAAOlrH,EAAQ4R,KAAO43H,EAAe53H,KAC3CtZ,EAAM4yH,EAAOlrH,EAAQ1H,KAAOkxI,EAAelxI,IAC/C,QACIsZ,IAAKhS,KAAKgqI,kBAAkBh4H,EAAKg5H,GAAa,GAC9CtyI,IAAKsH,KAAKgqI,kBAAkBtxI,EAAKsyI,GAAa,GAAM,KAG5D7B,aAAc,SAAU/oI,GAWpB,IAXU,GAUN6qI,GAAWhsG,EAAMisG,EATjBtB,EAAiB5pI,KAAK0pI,eAAetpI,EAAQwmI,YAC7CuE,EAAO7f,EAAOlrH,EAAQ1H,KAAOkxI,EAAelxI,KAAO4yH,EAAOlrH,EAAQ4R,KAAO43H,EAAe53H,KACxFw4H,EAAgBpqI,EAAQoqI,eAAiBxqI,KAAKI,QAAQoqI,cACtDO,EAAW3qI,EAAQ+sH,WAAauH,GAChC0W,EAAa,EACbje,EAAW4d,EAAWtW,GAAW2W,KAAgBhrI,EAAQ+sH,SACzDke,EAAQF,EAAO/d,GAAcD,GAC7BmD,EAAa+a,EACbd,EAAoB3vI,MAAeoF,KAAKI,QAAQmqI,kBAAmBnqI,EAAQmqI,oBAEvEtrG,GAAQosG,GAASb,GAGrB,GAFAS,EAAYA,GAAaV,EAAkBpd,GAAU3mH,MAAM,GAC3D0kI,EAAWD,EAAUn5H,QAEjBmtB,EAAOisG,EACPG,EAAQ/a,EAAarxF,MAClB,CAAA,GAAIkuF,IAAa79F,GAAKmlG,IAAa,CACtCx1F,EAAOrgC,KAAKuoD,KAAKmpE,EAAaka,EAC9B,OACG,IAAIO,EAIJ,CACCM,EAAQb,IACRvrG,EAAOrgC,KAAKuoD,KAAKmpE,EAAaka,GAElC,OAPArd,EAAWsH,GAAW2W,MAAiB97G,GAAKmlG,IAC5CnE,EAAa6a,EAAO/d,GAAcD,GAClC8d,EAAY,KAQpB7qI,EAAQktH,aAAeruF,EACvB7+B,EAAQ+sH,SAAWA,GAEvBkc,gBAAiB,SAAUjpI,GAAV,GASTkrI,GACKz/H,EATL+6H,EAAaxmI,EAAQwmI,WACrBzZ,EAAW/sH,EAAQ+sH,SACnBG,EAAeltH,EAAQktH,cAAgB,EACvCie,EAAcjgB,EAAO1B,EAAkBgd,GAAYluI,KACnDkmF,EAAM5+E,KAAK+9C,MAAM39C,GACjB4R,EAAM4sE,EAAI5sE,IACVtZ,EAAMkmF,EAAIlmF,IACVinD,IAEJ,KAAS9zC,EAAOmG,EAAKnG,EAAOnT,IACxBinD,EAAO73C,KAAK+D,GACZy/H,EAAWvf,EAAYlgH,EAAMyhH,EAAcH,EAAU/sH,EAAQqvB,gBACzD67G,EAAWC,IAAgBnrI,EAAQ1H,KAHVmT,EAAOy/H,GAOxClrI,EAAQ2mI,cAAgBH,EACxBxmI,EAAQwmI,WAAajnF,GAEzBqqF,kBAAmB,SAAUpsI,EAAO4xH,EAAagc,EAAOC,GAArC,GAMPxsG,GACAysG,EANJtrI,EAAUovH,GAAexvH,KAAKI,QAC9B+sH,EAAW/sH,EAAQ+sH,SACnBG,EAAeltH,EAAQktH,cAAgB,EACvCr+G,EAAQjP,KAAKopI,YACjB,OAAIn6H,IACIgwB,EAAOouF,EAAUzvH,EAAOqR,EAAOk+G,EAAUG,GACzCoe,EAAcF,EAAQ5sI,KAAKuoD,KAAKloB,GAAQrgC,KAAKpE,MAAMykC,GACnDwsG,GACAC,IAEG3f,EAAY98G,EAAOy8H,EAAcpe,EAAcH,EAAU/sH,EAAQqvB,eAErEs8F,EAAYnuH,EAAO4tI,EAAQle,EAAe,EAAGH,EAAU/sH,EAAQqvB,eAE1EwyG,gBAAiB,SAAU9vH,EAAO4vH,GAAjB,GAQLnW,GAOAx2F,EAdJh1B,EAAUJ,KAAKI,QACfqmB,EAAWrmB,EAAQ+lB,UAAY/lB,EAAQ+lB,UAAUhU,GAAS,KAC1DtG,EAAOzL,EAAQwmI,WAAWz0H,GAC1Bg7G,EAAW/sH,EAAQ+sH,SACnBwe,EAAa5J,EAAa6J,YAAYze,GACtC3pH,GAAU,CAOd,IANIpD,EAAQslI,WACJ9Z,EAAcgB,EAAU/gH,EAAMshH,EAAU/sH,EAAQqvB,cACpDjsB,EAAUypH,EAAWrB,EAAa//G,IAC1BzL,EAAQ2oI,kBAChBvlI,GAAWypH,EAAWjtH,KAAK+9C,QAAQrlD,IAAKmT,IAExCrI,IACAu+H,EAAah5H,OAASg5H,EAAah5H,QAAU4iI,EACzCv2G,EAAOp1B,KAAKimI,cAAcp6H,EAAM4a,EAAUs7G,IAE1C,MAAO,IAAI/N,IAAUnoH,EAAMupB,EAAMjjB,EAAOsU,EAAUs7G,IAI9D+F,cAAe,SAAUlqI,GAAV,GACPwC,GAAUJ,KAAKI,QACfwmI,EAAaxmI,EAAQwmI,WACrBz0H,IAIJ,OAHIy0H,GAAWhvI,SACXua,EAAQvT,KAAKpE,MAAM6yH,EAAU/B,EAAO1tH,GAAQgpI,EAAW,GAAIxmI,EAAQ+sH,SAAU/sH,EAAQktH,cAAgB,KAElGn7G,GAEX8xH,QAAS,SAAUrhI,EAAGC,EAAGsjI,GAAhB,GACDl3H,GAAQrM,EACRjL,EAAMkL,CAOV,cANWoM,KAAUrT,KACjBqT,EAAQjP,KAAK8nI,cAAc74H,UAEpBtX,KAAQiE,KACfjE,EAAMqI,KAAK8nI,cAAcnwI,IAEtB48H,GAAatwH,GAAGggI,QAAQ97H,KAAKnI,KAAMiP,EAAOtX,EAAKwuI,IAE1DI,WAAY,WAAA,GACJnmI,GAAUJ,KAAKI,QACf29C,EAAQ/9C,KAAK0pI,eAAetpI,EAAQ2mI,eAAiB3mI,EAAQwmI,WACjE,QACI50H,IAAKs5G,EAAOvtE,EAAM/rC,KAClBtZ,IAAK4yH,EAAOvtE,EAAMrlD,SAI9BixH,EAAkBgL,IACdz1H,KAAM+yH,GACNiP,QAAU0K,YAAapX,IACvB+V,mBACIp1H,cACI,EACA,GACA,KAEJD,SACI,EACA,EACA,EACA,GACA,IAEJ7I,SACI,EACA,EACA,EACA,GACA,IAEJ6G,OACI,EACA,EACA,GAEJjH,MACI,EACA,EACA,GAEJw6H,OACI,EACA,GAEJv6H,QACI,EACA,EACA,EACA,GAEJs6H,OACI,EACA,EACA,EACA,EACA,GACA,GACA,KAGRgE,cAAe,KAmEf5V,GAAkBh2H,KAAK8nC,IAAI,IAAKwnF,GAAoB,GACpD2G,GAAcT,GAAK1zH,QACnBC,KAAM,SAAUmuH,EAAWC,EAAW3uH,EAAS25H,GAAzC,GACE3K,GAAcP,GAAgBC,EAAWC,EAAW3uH,GACpDyrI,EAAetc,GAAiBH,EAAahvH,EACjDg0H,IAAKnwH,GAAGtD,KAAKwH,KAAKnI,KAAMwvH,GAAYJ,EAAahvH,GAAU25H,GAC3D/5H,KAAKooI,SAAWyD,EAAa75H,IAC7BhS,KAAKqoI,SAAWwD,EAAanzI,IAC7BsH,KAAK8rI,eAAiBD,EAAa1c,UACnCnvH,KAAK8uH,UAAYA,EACjB9uH,KAAK+uH,UAAYA,GAErB/zF,WAAY,WACR,MAAO,IAEX+iB,MAAO,WACH,GAAI39C,GAAUJ,KAAKI,OACnB,QACI4R,IAAK5R,EAAQ4R,IACbtZ,IAAK0H,EAAQ1H,MAGrBqzI,aAAc,SAAUC,GAAV,GAIN5rI,GACA29C,CAJJ,OAAkB,KAAdiuF,EACO,GAEP5rI,EAAUJ,KAAKI,QACf29C,EAAQ39C,EAAQ1H,IAAM0H,EAAQ4R,IAC3BpT,KAAKpE,MAAMiV,GAAMsuC,EAAQiuF,EAAWviB,KAAoB,IAEnE4d,iBAAkB,SAAUt1C,EAAMixC,GAAhB,GAkBLrlI,GAjBLyC,EAAUJ,KAAKI,QACfw7B,EAAWx7B,EAAQw7B,SACnBt7B,EAAUF,EAAQE,QAClB4hI,EAAUliI,KAAKkiI,UACf1qB,EAAW57E,EAAWsmG,EAAQhpI,SAAWgpI,EAAQjpI,QACjD8kD,EAAQ39C,EAAQ1H,IAAM0H,EAAQ4R,IAC9B0qB,EAAQ86E,EAAWz5D,EACnB9e,EAAO8yD,EAAOr1D,EACduvG,EAAYjsI,KAAK+rI,aAAah6C,GAC9B9iE,GAAO2M,KAAgB,IAAMt7B,KAAe,GAC5C4rI,EAAoB,IAARj9G,EAAY,EAAI,EAC5BwgD,KACAR,EAAMizD,GAAStmG,EAAWtqB,GAAI6/G,IAAK+a,GACnCC,EAAW,CAIf,KAHInJ,IACAmJ,EAAWnJ,EAAWjxC,GAEjBp0F,EAAM,EAAGA,EAAMsuI,EAAWtuI,IAC3BA,EAAMwuI,IAAa,GACnB18D,EAAU3nE,KAAK2H,GAAMw/D,EAAKw6C,KAE9Bx6C,GAAYhwC,EAAOhQ,CAEvB,OAAOwgD,IAEXyzD,sBAAuB,WACnB,MAAOljI,MAAKqnI,iBAAiBrnI,KAAKI,QAAQ+uH,YAE9CgU,sBAAuB,WACnB,MAAOnjI,MAAKqnI,iBAAiBrnI,KAAKI,QAAQuvH,YAE9CsU,QAAS,SAAUrhI,EAAGC,EAAGsjI,GAAhB,GAID/lI,GACAw7B,EACAt7B,EACAknI,EACAtF,EACAnX,EACAvT,EACAvoF,EACAgQ,EACA2oG,EACA34H,EACAtX,EAWA0tF,EAAIC,CAUR,OAnCc,UAAV6gD,IACAA,GAAQ,GAER/lI,EAAUJ,KAAKI,QACfw7B,EAAWx7B,EAAQw7B,SACnBt7B,EAAUF,EAAQE,QAClBknI,EAAY5rG,EAAWtqB,GAAI6/G,GAC3B+Q,EAAUliI,KAAKkiI,UACfnX,EAAYmX,EAAQsF,GAAalnI,EAAU,EAAI,IAC/Ck3G,EAAW57E,EAAWsmG,EAAQhpI,SAAWgpI,EAAQjpI,QACjDg2B,EAAM3uB,KAAe,EACrB2+B,EAAOhQ,GAAOuoF,GAAYp3G,EAAQ1H,IAAM0H,EAAQ4R,MAChD41H,EAAU,GAAI1d,IAAIgY,EAAQrrE,GAAIqrE,EAAQprE,GAAIorE,EAAQrrE,GAAIqrE,EAAQprE,IAC9D7nD,EAAQrM,EACRjL,EAAMkL,EACL6+E,GAAQzyE,KACTA,EAAQtX,GAAO,GAEd+pF,GAAQ/pF,KACTA,EAAMsX,GAAS,GAEfk3H,IACAl3H,EAAQrQ,KAAKlG,IAAIkG,KAAKoT,IAAI/C,EAAO7O,EAAQ1H,KAAM0H,EAAQ4R,KACvDra,EAAMiH,KAAKlG,IAAIkG,KAAKoT,IAAIra,EAAKyI,EAAQ1H,KAAM0H,EAAQ4R,MAGnD4pB,GACAypD,EAAKjlF,EAAQ1H,IAAMkG,KAAKlG,IAAIuW,EAAOtX,GACnC2tF,EAAKllF,EAAQ1H,IAAMkG,KAAKoT,IAAI/C,EAAOtX,KAEnC0tF,EAAKzmF,KAAKoT,IAAI/C,EAAOtX,GAAOyI,EAAQ4R,IACpCszE,EAAK1mF,KAAKlG,IAAIuW,EAAOtX,GAAOyI,EAAQ4R,KAExC41H,EAAQJ,EAAY,GAAK7Y,GAAgB5D,EAAY9rF,GAAQ3+B,EAAUglF,EAAKD,IAC5EuiD,EAAQJ,EAAY,GAAK7Y,GAAgB5D,EAAY9rF,GAAQ3+B,EAAU+kF,EAAKC,IACrEsiD,GAEXwE,SAAU,SAAU/jD,GAAV,GAiBFzqF,GAhBAwC,EAAUJ,KAAKI,QACfw7B,EAAWx7B,EAAQw7B,SACnBt7B,EAAUF,EAAQE,QAClB5H,GAAa0H,EAAQ1H,IACrBsZ,GAAa5R,EAAQ4R,IACrBw1H,EAAY5rG,EAAWtqB,GAAI6/G,GAC3B+Q,EAAUliI,KAAKkiI,UACfnX,EAAYmX,EAAQsF,GAAalnI,EAAU,EAAI,IAC/Ck3G,EAAW57E,EAAWsmG,EAAQhpI,SAAWgpI,EAAQjpI,QACjDg2B,EAAM3uB,KAAe,EACrBlB,EAAS6vB,GAAOo5D,EAAMm/C,GAAazc,GACnC9rF,GAAQvmC,EAAMsZ,GAAOwlG,EACrB60B,EAAcjtI,EAAS6/B,CAC3B,OAAI7/B,GAAS,GAAKA,EAASo4G,EAChB,MAEP55G,EAAQg+B,EAAWljC,EAAM2zI,EAAcr6H,EAAMq6H,EAC1C58H,GAAM7R,EAAOswH,MAExB+Z,eAAgB,SAAU50G,GAAV,GACRjzB,GAAUJ,KAAKI,QACfw7B,EAAWx7B,EAAQw7B,SACnBt7B,EAAUF,EAAQE,QAClB5H,EAAM0H,EAAQ1H,IACdsZ,EAAM5R,EAAQ4R,IACdkwH,EAAUliI,KAAKkiI,UACfnkI,EAAO69B,EAAWsmG,EAAQhpI,SAAWgpI,EAAQjpI,QAC7C8kD,EAAQrlD,EAAMsZ,EACd0qB,EAAQ3+B,EAAOggD,EACf3+C,EAASqQ,GAAM4jB,EAAQqJ,EAAOwxF,GAIlC,QAHKtyF,IAAYt7B,GAAcs7B,GAAYt7B,IACvClB,GAAUA,IAGV4S,IAAKA,EAAM5S,EACX1G,IAAKA,EAAM0G,IAGnBkpI,WAAY,SAAUj1G,GAAV,GACJjzB,GAAUJ,KAAKI,QACfhB,GAAUi0B,EAAQjzB,EAAQ+uH,SAC9B,QACIn9G,IAAK5R,EAAQ4R,IAAM5S,EACnB1G,IAAK0H,EAAQ1H,IAAM0G,IAG3B0iI,YAAa,WACT,MAAO9hI,MAAK+rI,aAAa/rI,KAAKI,QAAQ+uH,YAE1C8S,gBAAiB,SAAU9vH,EAAO4vH,GAAjB,GACT3hI,GAAUJ,KAAKI,QACfxC,EAAQ6R,GAAMrP,EAAQ4R,IAAMG,EAAQ/R,EAAQ+uH,UAAWjB,IACvD94F,EAAOp1B,KAAKimI,cAAcroI,EAAO,KAAMmkI,EAC3C,OAAO,IAAI/N,IAAUp2H,EAAOw3B,EAAMjjB,EAAO,KAAM4vH,IAEnD+D,iBAAkB,SAAUloI,GACxB,GAAImgD,GAAQ/9C,KAAK+9C,OACjB,OAAOA,GAAM/rC,KAAOpU,GAASA,GAASmgD,EAAMrlD,KAEhD8vI,IAAK,SAAUn1G,GACX,GAAI0qB,GAAQ/9C,KAAKioI,eAAe50G,EAChC,OAAOrzB,MAAKqmI,WAAWtoF,EAAM/rC,IAAK+rC,EAAMrlD,IAAKsH,KAAKooI,SAAUpoI,KAAKqoI,WAErEI,YAAa,SAAUx5H,EAAOtX,GAAjB,GACLqjC,GAAah7B,KAAKosI,SAASn9H,GAC3BisB,EAAWl7B,KAAKosI,SAASz0I,GACzBqa,EAAMpT,KAAKoT,IAAIgpB,EAAYE,GAC3BxiC,EAAMkG,KAAKlG,IAAIsiC,EAAYE,EAC/B,IAAIl7B,KAAKssI,aAAat6H,EAAKtZ,GACvB,OACIsZ,IAAKA,EACLtZ,IAAKA,IAIjBwvI,UAAW,SAAU70G,GAAV,GACHurD,GAAM5+E,KACNooI,EAAWxpD,EAAIwpD,SACfC,EAAWzpD,EAAIypD,SACfkE,EAAWvsI,KAAKsoI,WAAWj1G,GAC3BrhB,EAAM+wE,GAAWwpD,EAASv6H,IAAKo2H,EAAUC,GACzC3vI,EAAMqqF,GAAWwpD,EAAS7zI,IAAK0vI,EAAUC,EAC7C,IAAIroI,KAAKssI,aAAat6H,EAAKtZ,GACvB,OACIsZ,IAAKA,EACLtZ,IAAKA,IAIjB4zI,aAAc,SAAUt6H,EAAKtZ,GACzB,MAAOA,GAAMsZ,EAAM4iH,MAyD3BjL,EAAkBkL,IACd31H,KAAM,UACN8S,IAAK,EACLtZ,IAAK,EACLkjC,UAAU,EACV2oG,gBACI/gI,SAAS,EACTvK,MAAO,EACPg7E,MAAOs9C,IAEX2P,QAAUn4H,OAAQ,0BAClB46B,OAAQ,IAERmxF,GAAgBV,GAAK1zH,QACrBC,KAAM,SAAUmuH,EAAWC,EAAWS,EAAauK,GAA7C,GACE/nH,GAAMs5G,EAAOwD,GACbp2H,EAAM4yH,EAAOyD,GACbnB,EAAcmM,EAAajE,KAC3B11H,EAAUovH,KACdpvH,GAAUxF,GAAWwF,OACjB4R,IAAK0E,EAAUk3G,EAAaxtH,EAAQ4R,KACpCtZ,IAAKge,EAAUk3G,EAAaxtH,EAAQ1H,KACpCi4H,kBAAmB9C,EAAWD,EAAaxtH,EAAQosI,oBAAsBpsI,EAAQuwH,qBAErFvwH,EAAU8vH,GAAcl+G,EAAKtZ,EAAK0H,GAClCg0H,GAAKnwH,GAAGtD,KAAKwH,KAAKnI,KAAMI,EAAS25H,GACjC/5H,KAAK8uH,UAAY98G,EACjBhS,KAAK+uH,UAAYr2H,EACjBsH,KAAKooI,SAAWpb,EAAOJ,EAAUI,EAAOh7G,GAAO,EAAG5R,EAAQ+sH,WAC1DntH,KAAKqoI,SAAWrb,EAAOH,EAASG,EAAOt0H,GAAO,EAAG0H,EAAQ+sH,YAE7DpvE,MAAO,WACH,GAAI39C,GAAUJ,KAAKI,OACnB,QACI4R,IAAK5R,EAAQ4R,IACbtZ,IAAK0H,EAAQ1H,MAGrBqzI,aAAc,SAAUC,GACpB,GAAI5rI,GAAUJ,KAAKI,OACnB,OAAOxB,MAAKpE,MAAM6F,EAASD,EAAQ4R,IAAK5R,EAAQ1H,IAAK0H,EAAQ+sH,UAAY6e,EAAY,IAEzF3E,iBAAkB,SAAUpoG,GAAV,GAYLnkC,GACD+Q,EACAojE,EAbJ7uE,EAAUJ,KAAKI,QACfw7B,EAAWx7B,EAAQw7B,SACnBsmG,EAAUliI,KAAKkiI,UACfjzG,GAAO2M,KAAgB,IAAMx7B,EAAQE,WAAe,GACpD4rI,EAAoB,IAARj9G,EAAY,EAAI,EAC5BhgB,EAAQizH,GAAStmG,EAAWtqB,GAAI6/G,IAAK+a,GACrCD,EAAYjsI,KAAK+rI,aAAa9sG,GAC9BwtG,EAAY1f,EAAS3sH,EAAQ1H,IAAK0H,EAAQ4R,KAC1CwlG,EAAW57E,EAAWsmG,EAAQhpI,SAAWgpI,EAAQjpI,QACjDyjC,EAAQ86E,EAAWi1B,EACnBh9D,GAAaxgE,EACjB,KAASnU,EAAI,EAAGA,EAAImxI,EAAWnxI,IACvB+Q,EAAOkgH,EAAY3rH,EAAQ4R,IAAKlX,EAAImkC,EAAM7+B,EAAQ+sH,UAClDl+C,EAAMhgE,EAAQ89G,EAASlhH,EAAMzL,EAAQ4R,KAAO0qB,EAAQzN,EACxDwgD,EAAU3nE,KAAK2H,GAAMw/D,EAAKw6C,IAE9B,OAAOh6C,IAEXyzD,sBAAuB,WACnB,MAAOljI,MAAKqnI,iBAAiBrnI,KAAKI,QAAQ+uH,YAE9CgU,sBAAuB,WACnB,MAAOnjI,MAAKqnI,iBAAiBrnI,KAAKI,QAAQuvH,YAE9CsU,QAAS,SAAUrhI,EAAGC,EAAGsjI,GACrB,MAAOtR,IAAY9tH,UAAUk9H,QAAQ97H,KAAKnI,KAAMsrH,EAAO1oH,GAAI0oH,EAAOzoH,GAAIsjI,IAE1EiG,SAAU,SAAU/jD,GAChB,GAAIzqF,GAAQi3H,GAAY9tH,UAAUqlI,SAASjkI,KAAKnI,KAAMqoF,EACtD,OAAiB,QAAVzqF,EAAiB0tH,EAAO1tH,GAAS,MAE5CkkI,YAAa,WACT,MAAO9hI,MAAK+rI,aAAa/rI,KAAKI,QAAQ+uH,YAE1C8S,gBAAiB,SAAU9vH,EAAO4vH,GAAjB,GAOT4J,GAEAv2G,EARAh1B,EAAUJ,KAAKI,QACfhB,EAAS+S,EAAQ/R,EAAQ+uH,UACzBtjH,EAAOzL,EAAQ4R,GAOnB,OANI5S,GAAS,IACTyM,EAAOkgH,EAAYlgH,EAAMzM,EAAQgB,EAAQ+sH,WAEzCwe,EAAa5J,EAAa6J,YAAYxrI,EAAQ+sH,UAClD4U,EAAah5H,OAASg5H,EAAah5H,QAAU4iI,EACzCv2G,EAAOp1B,KAAKimI,cAAcp6H,EAAM,KAAMk2H,GACnC,GAAI/N,IAAUnoH,EAAMupB,EAAMjjB,EAAO,KAAM4vH,IAElDkG,eAAgB,SAAU50G,EAAOq5G,GAAjB,GACRtsI,GAAUJ,KAAKI,QACf+sH,EAAW/sH,EAAQ+sH,SACnB19F,EAAervB,EAAQqvB,aACvByyG,EAAUliI,KAAKkiI,UACfnkI,EAAOqC,EAAQw7B,SAAWsmG,EAAQhpI,SAAWgpI,EAAQjpI,QACrD8kD,EAAQ/9C,KAAK+9C,QACbrhB,EAAQ3+B,EAAOgvH,EAAShvE,EAAMrlD,IAAKqlD,EAAM/rC,KACzC5S,EAASqQ,GAAM4jB,EAAQqJ,EAAOwxF,IAC9BlhG,EAAOo+F,EAAShrH,EAAQ4R,IAAK5S,GAC7B6tB,EAAKm+F,EAAShrH,EAAQ1H,IAAK0G,EAK/B,OAJKstI,KACD1/G,EAAO++F,EAAY/+F,EAAM,EAAGmgG,EAAU19F,GACtCxC,EAAK8+F,EAAY9+F,EAAI,EAAGkgG,EAAU19F,KAGlCzd,IAAKgb,EACLt0B,IAAKu0B,IAGbq7G,WAAY,SAAUj1G,GAKlB,IALQ,GAMA0qB,GACA9e,EANJ2/C,EAAM5+E,KAAKI,QACX4sB,EAAO4xD,EAAI5sE,IACXib,EAAK2xD,EAAIlmF,IACT4wI,EAAS1qI,KAAKC,IAAIw0B,GACfi2G,KACCvrF,EAAQgvE,EAAS//F,EAAMC,GACvBgS,EAAOrgC,KAAK6Q,MAAc,GAARsuC,GAClB1qB,EAAQ,GACRrG,EAAOo+F,EAASp+F,EAAMiS,GACtBhS,EAAKm+F,EAASn+F,GAAKgS,KAEnBjS,EAAOo+F,EAASp+F,GAAOiS,GACvBhS,EAAKm+F,EAASn+F,EAAIgS,GAG1B,QACIjtB,IAAKgb,EACLt0B,IAAKu0B,IAGb64G,iBAAkB,SAAUloI,GACxB,GAAImgD,GAAQ/9C,KAAK+9C,OACjB,OAAO+uE,GAAalvH,EAAOmgD,EAAM/rC,MAAQ,GAAK86G,EAAalvH,EAAOmgD,EAAMrlD,MAAQ,GAEpF8vI,IAAK,SAAUn1G,GAAV,GACG0qB,GAAQ/9C,KAAKioI,eAAe50G,GAAO,GACnCs5G,EAAgB3sI,KAAKqmI,WAAWrZ,EAAOjvE,EAAM/rC,KAAMg7G,EAAOjvE,EAAMrlD,KAAMsH,KAAKooI,SAAUpoI,KAAKqoI,SAC9F,IAAIsE,EACA,OACI36H,IAAKs5G,EAAOqhB,EAAc36H,KAC1BtZ,IAAK4yH,EAAOqhB,EAAcj0I,OAItC+vI,YAAa,SAAUx5H,EAAOtX,GAAjB,GACLqjC,GAAah7B,KAAKosI,SAASn9H,GAC3BisB,EAAWl7B,KAAKosI,SAASz0I,GACzBqa,EAAMpT,KAAKoT,IAAIgpB,EAAYE,GAC3BxiC,EAAMkG,KAAKlG,IAAIsiC,EAAYE,EAC/B,QACIlpB,IAAKs5G,EAAOt5G,GACZtZ,IAAK4yH,EAAO5yH,KAGpBwvI,UAAW,SAAU70G,GAAV,GACH0qB,GAAQ/9C,KAAKsoI,WAAWj1G,GACxBrhB,EAAMs5G,EAAOvoC,GAAWiqC,EAAOjvE,EAAM/rC,KAAMhS,KAAKooI,SAAUpoI,KAAKqoI,WAC/D3vI,EAAM4yH,EAAOvoC,GAAWiqC,EAAOjvE,EAAMrlD,KAAMsH,KAAKooI,SAAUpoI,KAAKqoI,UACnE,QACIr2H,IAAKA,EACLtZ,IAAKA,MAyCjBixH,EAAkBmL,IACd51H,KAAM+yH,GACNsS,gBACI/gI,SAAS,EACTvK,MAAO,EACPg7E,MAAOs9C,IAEX2P,QAAU0K,YAAapX,MAEvBO,GAAqB,GACrBC,GAAkBZ,GAAK1zH,QACvBC,KAAM,SAAUmuH,EAAWC,EAAW3uH,EAAS25H,GAAzC,GACEvK,GAAc50H,IACdu0H,UAAW4F,GACX/iH,IAAK88G,EACLp2H,IAAKq2H,GACN3uH,GACCuG,EAAO6oH,EAAYL,UACnBD,EAAU4B,GAAc/B,EAAWpoH,GACnCsoH,EAAU4B,GAAc/B,EAAWC,EAAWS,GAC9CzxE,EAAQ2yE,GAAUzB,EAASC,EAASM,EAAapvH,EACrDovH,GAAY92H,IAAMqlD,EAAMrlD,IACxB82H,EAAYx9G,IAAM+rC,EAAM/rC,IACxBw9G,EAAYG,UAAYvvH,EAAQuvH,WAAalgH,GAAM9I,EAAO,EAAGunH,IAC7DkG,GAAKnwH,GAAGtD,KAAKwH,KAAKnI,KAAMwvH,EAAauK,GACrC/5H,KAAKooI,SAAW1mD,GAAQthF,EAAQ4R,KAAOpT,KAAKoT,IAAIi9G,EAAS7uH,EAAQ4R,KAAOi9G,EACxEjvH,KAAKqoI,SAAW3mD,GAAQthF,EAAQ1H,KAAOkG,KAAKlG,IAAIw2H,EAAS9uH,EAAQ1H,KAAOw2H,EACxElvH,KAAK4sI,OAASn9H,GAAMkV,GAAIo5B,EAAM/rC,IAAKrL,GAAOunH,IAC1CluH,KAAK6sI,OAASp9H,GAAMkV,GAAIo5B,EAAMrlD,IAAKiO,GAAOunH,IAC1CluH,KAAK8uH,UAAYA,EACjB9uH,KAAK+uH,UAAYA,EACjB/uH,KAAK0hI,gBAET1mG,WAAY,WACR,MAAOh7B,MAAKI,QAAQ4R,KAExBiyH,QAAS,SAAUrhI,EAAGC,EAAGsjI,GAAhB,GAgCD9gD,GAAIC,EA/BJ1G,EAAM5+E,KACNI,EAAUw+E,EAAIx+E,QACdwsI,EAAShuD,EAAIguD,OACbC,EAASjuD,EAAIiuD,OACbvsI,EAAUF,EAAQE,QAClBs7B,EAAWx7B,EAAQw7B,SACnBj1B,EAAOvG,EAAQ+uH,UACfqY,EAAY5rG,EAAWtqB,GAAI6/G,GAC3B+Q,EAAUliI,KAAKkiI,UACfnX,EAAYmX,EAAQsF,GAAalnI,EAAU,EAAI,IAC/Ck3G,EAAW57E,EAAWsmG,EAAQhpI,SAAWgpI,EAAQjpI,QACjDg2B,EAAM3uB,KAAe,EACrB2+B,EAAOhQ,GAAOuoF,GAAYq1B,EAASD,IACnChF,EAAU,GAAI1d,IAAIgY,EAAQrrE,GAAIqrE,EAAQprE,GAAIorE,EAAQrrE,GAAIqrE,EAAQprE,IAC9D7nD,EAAQrM,EACRjL,EAAMkL,CAOV,OANK6+E,IAAQzyE,KACTA,EAAQtX,GAAO,GAEd+pF,GAAQ/pF,KACTA,EAAMsX,GAAS,GAEfA,GAAS,GAAKtX,GAAO,EACd,MAEPwuI,IACAl3H,EAAQrQ,KAAKlG,IAAIkG,KAAKoT,IAAI/C,EAAO7O,EAAQ1H,KAAM0H,EAAQ4R,KACvDra,EAAMiH,KAAKlG,IAAIkG,KAAKoT,IAAIra,EAAKyI,EAAQ1H,KAAM0H,EAAQ4R,MAEvD/C,EAAQ0V,GAAI1V,EAAOtI,GACnBhP,EAAMgtB,GAAIhtB,EAAKgP,GAEXi1B,GACAypD,EAAKwnD,EAASjuI,KAAKlG,IAAIuW,EAAOtX,GAC9B2tF,EAAKunD,EAASjuI,KAAKoT,IAAI/C,EAAOtX,KAE9B0tF,EAAKzmF,KAAKoT,IAAI/C,EAAOtX,GAAOi1I,EAC5BtnD,EAAK1mF,KAAKlG,IAAIuW,EAAOtX,GAAOi1I,GAEhChF,EAAQJ,EAAY,GAAK7Y,GAAgB5D,EAAY9rF,GAAQ3+B,EAAUglF,EAAKD,IAC5EuiD,EAAQJ,EAAY,GAAK7Y,GAAgB5D,EAAY9rF,GAAQ3+B,EAAU+kF,EAAKC,IACrEsiD,IAEXwE,SAAU,SAAU/jD,GAAV,GAoBFzqF,GAnBAghF,EAAM5+E,KACNI,EAAUw+E,EAAIx+E,QACdwsI,EAAShuD,EAAIguD,OACbC,EAASjuD,EAAIiuD,OACbvsI,EAAUF,EAAQE,QAClBs7B,EAAWx7B,EAAQw7B,SACnBj1B,EAAOvG,EAAQ+uH,UACf+S,EAAUliI,KAAKkiI,UACfjzG,EAAM2M,IAAat7B,EAAU,KAC7B4rI,EAAoB,IAARj9G,EAAY,EAAI,EAC5BuoF,EAAW57E,EAAWsmG,EAAQhpI,SAAWgpI,EAAQjpI,QACjDgmC,GAAQ4tG,EAASD,GAAUp1B,EAC3BgwB,EAAY5rG,EAAWtqB,GAAI6/G,GAC3BpG,EAAYmX,EAAQsF,EAAY0E,GAChC9sI,EAAS6vB,GAAOo5D,EAAMm/C,GAAazc,GACnCshB,EAAcjtI,EAAS6/B,CAC3B,OAAI7/B,GAAS,GAAKA,EAASo4G,EAChB,MAEP55G,EAAQgvI,EAASP,EACd58H,GAAM7Q,KAAK8nC,IAAI//B,EAAM/I,GAAQswH,MAExCnwE,MAAO,WACH,GAAI39C,GAAUJ,KAAKI,OACnB,QACI4R,IAAK5R,EAAQ4R,IACbtZ,IAAK0H,EAAQ1H,MAGrB4vI,WAAY,SAAUj1G,GAAV,GACJ1sB,GAAO3G,KAAKI,QAAQ+uH,UACpB/vH,GAAUi0B,CACd,QACIrhB,IAAKpT,KAAK8nC,IAAI//B,EAAM3G,KAAK4sI,OAASxtI,GAClC1G,IAAKkG,KAAK8nC,IAAI//B,EAAM3G,KAAK6sI,OAASztI,KAG1C6oI,eAAgB,SAAU50G,GAAV,GACRurD,GAAM5+E,KACNI,EAAUw+E,EAAIx+E,QACdwsI,EAAShuD,EAAIguD,OACbC,EAASjuD,EAAIiuD,OACbvsI,EAAUF,EAAQE,QAClBs7B,EAAWx7B,EAAQw7B,SACnBj1B,EAAOvG,EAAQ+uH,UACf+S,EAAUliI,KAAKkiI,UACfnkI,EAAO69B,EAAWsmG,EAAQhpI,SAAWgpI,EAAQjpI,QAC7CyjC,EAAQ3+B,GAAQ8uI,EAASD,GACzBxtI,EAASqQ,GAAM4jB,EAAQqJ,EAAOwxF,GAIlC,QAHKtyF,IAAYt7B,GAAcs7B,GAAYt7B,IACvClB,GAAUA,IAGV4S,IAAKpT,KAAK8nC,IAAI//B,EAAMimI,EAASxtI,GAC7B1G,IAAKkG,KAAK8nC,IAAI//B,EAAMkmI,EAASztI,KAGrC0iI,YAAa,WAAA,GACLgL,GAAWluI,KAAKpE,MAAMwF,KAAK6sI,QAC3Bn5H,EAAQ9U,KAAKpE,MAAMsyI,EAAW9sI,KAAK4sI,QAAU,CACjD,OAAOl5H,IAEXwvH,sBAAuB,WACnB,GAAI7X,KAOJ,OANArrH,MAAK+sI,4BAA4B,SAAUprG,GACvC0pF,EAAMvjH,KAAK65B,KAEX1C,KAAM,EACNyO,KAAM,IAEH29E,GAEXwX,YAAa,SAAUC,GASnB,QAASv6H,GAAOykI,EAActiB,GAC1BuY,EAAgBtY,MAAQnrF,EAAS0iG,EAAQnrE,GAAKmrE,EAAQnrE,GAAK2zD,EAAY3sH,KACvEklI,EAAgBrY,MAAQprF,EAAS0iG,EAAQprE,GAAK4zD,EAAY3sH,KAAOmkI,EAAQprE,GACzEmsE,EAAgBthG,SAAWqrG,EAC3BlK,EAAUh/F,OAAO2mF,EAAewY,EAAiBvY,IAb5C,GACLtqH,GAAUJ,KAAKI,QACfmhI,EAAanhI,EAAQmhI,WACrBF,EAAajhI,EAAQihI,WACrBzlG,EAAWx7B,EAAQw7B,SACnB4D,EAASp/B,EAAQ8gI,OAAO1hG,OACxB0iG,EAAUliI,KAAKkiI,UACf7W,KACA4X,GAAoBrnG,SAAUA,EAalC,OANI2lG,GAAW/9H,SACXxD,KAAK+sI,4BAA4BxkI,EAAQg5H,GAEzCF,EAAW79H,SACXxD,KAAKitI,4BAA4B1kI,EAAQ84H,GAEtChW,GAEX6Y,gBAAiB,SAAUT,GAavB,QAASl7H,GAAOykI,EAAcliB,GACrB7nH,EAAQ+pI,EAAczL,KACvB8C,EAAY1iG,SAAWqrG,EACvBrlH,EAAUmc,OAAO+mF,EAAmBwZ,EAAavZ,IACjDyW,EAAWz5H,KAAKklI,IAjBX,GACT5sI,GAAUJ,KAAKI,QACfkkI,EAAiBlkI,EAAQkkI,eACzBC,EAAiBnkI,EAAQmkI,eACzB3oG,EAAWx7B,EAAQw7B,SACnBsmG,EAAUuB,EAAQvB,UAClBmC,GACAtZ,UAAWmX,EAAQtmG,EAAW,KAAO,MACrCovF,QAASkX,EAAQtmG,EAAW,KAAO,MACnCA,SAAUA,GAEV2lG,KACA55G,EAAY3nB,KAAK0iI,iBAcrB,OANI6B,GAAe/gI,SACfxD,KAAK+sI,4BAA4BxkI,EAAQg8H,GAEzCD,EAAe9gI,SACfxD,KAAKitI,4BAA4B1kI,EAAQ+7H,GAEtC38G,EAAUhtB,UAErBoyI,4BAA6B,SAAUpsH,EAAU+pG,GAApB,GAOhBpnC,GACD3hD,EAPJi9C,EAAM5+E,KAAKktI,eACXniB,EAAYnsC,EAAImsC,UAChB9rF,EAAO2/C,EAAI3/C,KACX43E,EAAQ72G,KACR4sI,EAAS/1B,EAAM+1B,OACfC,EAASh2B,EAAMg2B,MACnB,KAASvpD,EAAQ1kF,KAAKuoD,KAAKylF,GAAUliB,EAAYh9E,KAAM41C,GAASupD,EAAQvpD,GAASonC,EAAYzrF,KACrF0C,EAAWlyB,GAAMs7G,EAAY9rF,GAAQqkD,EAAQspD,GAAS1e,IAC1DvtG,EAASghB,EAAU+oF,IAG3BuiB,4BAA6B,SAAUtsH,EAAU+pG,GAApB,GAchBpnC,GACD6pD,EACKxvI,EACDC,EAKI+jC,EArBZw9C,EAASn/E,KACT4+E,EAAM5+E,KAAKI,QACX4R,EAAM4sE,EAAI5sE,IACVtZ,EAAMkmF,EAAIlmF,IACVi3H,EAAY/wC,EAAI+wC,UAChBhpH,EAAOi4E,EAAIuwC,UACXtY,EAAQ72G,KAAKktI,eACbniB,EAAYlU,EAAMkU,UAClB9rF,EAAO43E,EAAM53E,KACbmuG,EAAQptI,KACR4sI,EAASQ,EAAMR,OACfC,EAASO,EAAMP,OACf59H,EAAQrQ,KAAKpE,MAAMoyI,EACvB,KAAStpD,EAAQr0E,EAAOq0E,EAAQupD,EAAQvpD,IAEpC,IADI6pD,EAAehuD,EAAOkuD,sBAAsB/pD,GACvC3lF,EAAM+sH,EAAYh9E,KAAM/vC,EAAMgyH,IAC/B/xH,EAAQuvI,EAAavvI,MAAQD,EAAMwvI,EAAaG,YAChD1vI,EAAQlF,IAFkCiF,GAAO+sH,EAAYzrF,KAK7DrhC,GAASoU,IACL2vB,EAAWlyB,GAAMs7G,EAAY9rF,GAAQta,GAAI/mB,EAAO+I,GAAQimI,GAAS1e,IACrEvtG,EAASghB,EAAU+oF,KAKnCuX,gBAAiB,SAAU9vH,EAAO4vH,GAAjB,GACTz+C,GAAQ1kF,KAAKuoD,KAAKnnD,KAAK4sI,OAASz6H,GAChCvU,EAAQgB,KAAK8nC,IAAI1mC,KAAKI,QAAQ+uH,UAAW7rC,GACzCluD,EAAOp1B,KAAKimI,cAAcroI,EAAO,KAAMmkI,EAC3C,OAAO,IAAI/N,IAAUp2H,EAAOw3B,EAAMjjB,EAAO,KAAM4vH,IAEnD+D,iBAAkB,SAAUloI,GACxB,GAAImgD,GAAQ/9C,KAAK+9C,OACjB,OAAOA,GAAM/rC,KAAOpU,GAASA,GAASmgD,EAAMrlD,KAEhD8vI,IAAK,SAAUn1G,GACX,GAAI0qB,GAAQ/9C,KAAKioI,eAAe50G,EAChC,OAAOrzB,MAAKqmI,WAAWtoF,EAAM/rC,IAAK+rC,EAAMrlD,IAAKsH,KAAKooI,SAAUpoI,KAAKqoI,UAAWh1G,IAEhFo1G,YAAa,SAAUx5H,EAAOtX,GAAjB,GACLqjC,GAAah7B,KAAKosI,SAASn9H,GAC3BisB,EAAWl7B,KAAKosI,SAASz0I,GACzBqa,EAAMpT,KAAKoT,IAAIgpB,EAAYE,GAC3BxiC,EAAMkG,KAAKlG,IAAIsiC,EAAYE,EAC/B,QACIlpB,IAAKA,EACLtZ,IAAKA,IAGbwvI,UAAW,SAAU70G,GAAV,GACHurD,GAAM5+E,KACNI,EAAUw+E,EAAIx+E,QACdgoI,EAAWxpD,EAAIwpD,SACfC,EAAWzpD,EAAIypD,SACfkE,EAAWvsI,KAAKsoI,WAAWj1G,GAC3BrhB,EAAM+wE,GAAWwpD,EAASv6H,IAAKo2H,EAAUC,GACzC3vI,EAAMqqF,GAAWwpD,EAAS7zI,IAAK0vI,EAAUC,GACzC1hI,EAAOvG,EAAQ+uH,UACfoe,EAAqB70I,EAAMsZ,GAAO5R,EAAQ4R,KAAO5R,EAAQ1H,KAAO+W,GAAMkV,GAAIvkB,EAAQ1H,IAAKiO,GAAQge,GAAIvkB,EAAQ4R,IAAKrL,GAAOunH,IAAqB,EAC5Isf,IAAmBptI,EAAQ4R,MAAQo2H,GAAYhoI,EAAQ1H,MAAQ2vI,IAAa54H,GAAMkV,GAAIjsB,EAAKiO,GAAQge,GAAI3S,EAAKrL,GAAOunH,KAAsB,CAC7I,IAAIqf,GAAsBC,EACtB,OACIx7H,IAAKA,EACLtZ,IAAKA,IAIjB20I,sBAAuB,SAAU/pD,GAAV,GACf1E,GAAM5+E,KAAKI,QACXuvH,EAAY/wC,EAAI+wC,UAChBhpH,EAAOi4E,EAAIuwC,UACXvxH,EAAQgB,KAAK8nC,IAAI//B,EAAM28E,GACvBmqD,EAAY7uI,KAAK8nC,IAAI//B,EAAM28E,EAAQ,GACnC1yD,EAAa68G,EAAY7vI,EACzB0vI,EAAY18G,EAAa++F,CAC7B,QACI/xH,MAAOA,EACP0vI,UAAWA,IAGnBJ,aAAc,WAAA,GACNtuD,GAAM5+E,KAAKI,QACXE,EAAUs+E,EAAIt+E,QACds7B,EAAWgjD,EAAIhjD,SACf4rG,EAAY5rG,EAAWtqB,GAAI6/G,GAC3B+Q,EAAUliI,KAAKkiI,UACfjzG,EAAM2M,IAAat7B,EAAU,KAC7B4rI,EAAoB,IAARj9G,EAAY,EAAI,EAC5BuoF,EAAW57E,EAAWsmG,EAAQhpI,SAAWgpI,EAAQjpI,QACjDgmC,EAAOhQ,GAAOuoF,GAAYx3G,KAAK6sI,OAAS7sI,KAAK4sI,SAC7C7hB,EAAYmX,EAAQsF,EAAY0E,EACpC,QACIjtG,KAAMA,EACN8rF,UAAWA,EACXmX,QAASA,MAqDrBvY,EAAkBqL,IACd91H,KAAM,MACNiwH,UAAW4F,GACXpF,UAAW,EACXgB,kBAAmB,EACnB/0F,UAAU,EACV2oG,gBACI/gI,SAAS,EACTvK,MAAO,EACPg7E,MAAOs9C,IAEX5tF,OAAQ,EACR89F,cAAc,IAEdxM,IACAiP,gBAAiB,SAAUT,GAAV,GAKTiK,GAAaC,EAJbvtI,EAAUJ,KAAKI,QACf/H,EAASuG,KAAKC,IAAImB,KAAKojC,IAAI+zB,SAAS9lD,EAAIoyH,EAAQvB,UAAUprE,IAC1D6rE,KACAiL,GAAY,CAWhB,OATIxtI,GAAQmkI,eAAe/gI,UACvBkqI,EAAc1tI,KAAK6tI,oBAAoBpK,GACvCmK,GAAY,EACZjL,EAAY3iI,KAAK8tI,qBAAqBJ,EAAar1I,EAAQ+H,EAAQmkI,iBAEnEnkI,EAAQkkI,eAAe9gI,UACvBmqI,EAAc3tI,KAAK+tI,oBAAoBtK,EAASmK,GAChD9pG,GAAO6+F,EAAW3iI,KAAKguI,qBAAqBL,EAAat1I,EAAQ+H,EAAQkkI,eAAgBb,EAASmK,KAE/FjL,GAEXmL,qBAAsB,SAAU1U,EAAQ/gI,EAAQ+H,GAC5C,MAAOJ,MAAKiuI,gBAAgB7U,EAAQ/gI,EAAQ+H,IAEhD4tI,qBAAsB,SAAU5U,EAAQ/gI,EAAQ+H,EAASqjI,EAASmK,GAC9D,GAAIM,GAAiBluI,KAAKkuI,gBAAkBluI,KAAKkuI,eAAe71I,EAAQorI,EAASmK,EACjF,OAAO5tI,MAAKiuI,gBAAgB7U,EAAQ/gI,EAAQ+H,EAAS8tI,IAEzDD,gBAAiB,SAAU7U,EAAQ/gI,EAAQ+H,EAAS8tI,GAAnC,GAcJpzI,GACD6pG,EAdJ7qG,GACAkjG,QACI/jG,MAAOmH,EAAQnH,MACfg7E,MAAO7zE,EAAQ6zE,MACf4qC,SAAUz+G,EAAQy+G,WAGtB1nD,EAASn3D,KAAKojC,IAAI+zB,SAClB4pC,EAAS,GAAIkC,KACb9rC,EAAOlkC,EACPkkC,EAAO9lD,GACRhZ,GACCsvB,EAAY3nB,KAAK0iI,iBACrB,KAAS5nI,EAAI,EAAGA,EAAIs+H,EAAOxhI,OAAQkD,IAC3B6pG,EAAO,GAAI7H,IAAKhjG,GAChBo0I,IACAntC,EAAO1oG,OAAS61I,EAAe9U,EAAOt+H,KAE1C6pG,EAAKv+D,OAAO26D,EAAO5pC,QAAQ84B,OAAO8Q,EAAOwP,QAAQ6oB,EAAOt+H,GAAK,MAC7D6sB,EAAUmc,OAAO6gE,EAErB,OAAOh9E,GAAUhtB,UAErBwzI,eAAgB,SAAU1K,EAAS1lI,EAAM2vC,EAAMzO,EAAMmvG,GAArC,GACRjvD,GAASn/E,KACTquI,EAAOruI,KAAKsuI,UAAUvwI,EAAM2vC,EAAMzO,EAAMmvG,GACxChuI,EAAUqjI,EAAQrjI,QAClBmuI,EAAiBnuI,EAAQoD,UAAYpD,EAAQukG,UAAYnhG,WAAY,CACzE,OAAOwP,GAAIq7H,EAAM,SAAU19H,GACvB,GAAI69H,GAAQrvD,EAAOuyB,cAAc/gG,EACjC,KAAK49H,GAA4B,KAAVC,EACnB,MAAOA,OAKnBtZ,GAAoBX,GAAa7zH,QACjCq9C,MAAO,WACH,OACI/rC,IAAK,EACLtZ,IAAKsH,KAAKI,QAAQwmI,WAAWhvI,SAGrC++G,OAAQ,SAAUvzE,GACdpjC,KAAKojC,IAAMA,EACXpjC,KAAKyuI,gBAETvM,QAAS,WACL,MAAOliI,MAAKojC,KAEhBqrG,aAAc,WAAA,GAQD3zI,GAEDsqI,EATJjmD,EAASn/E,KACT4+E,EAAM5+E,KACNkhI,EAAStiD,EAAIsiD,OACba,EAAenjD,EAAIx+E,QAAQ8gI,OAC3BxzF,EAAOq0F,EAAar0F,MAAQ,EAC5BzO,EAAO8iG,EAAa9iG,MAAQ,EAC5BkhD,EAAa,GAAI+pC,GACrB,KAASpvH,EAAI,EAAGA,EAAIomI,EAAOtpI,OAAQkD,IAC/BomI,EAAOpmI,GAAG67G,OAAOx2B,GACbilD,EAAWlE,EAAOpmI,GAAGsoC,IACzB89F,EAAOpmI,GAAG67G,OAAOx3B,EAAO8kD,QAAQv2F,EAAO5yC,EAAImkC,GAAMu5F,YAAY,EAAG4M,EAASnsI,QAASmsI,EAASlsI,YAGnGo1I,UAAW,SAAUvwI,EAAM2wI,EAAYC,EAAYP,GAAxC,GAIHhuI,GACAwmI,EACAgI,EACAC,EACAnhG,EACAzO,EACAovG,EACA/mD,EACKxsF,CAAT,KAXmB,SAAfszI,IACAA,GAAa,GAEbhuI,EAAUJ,KAAKI,QACfwmI,EAAaxmI,EAAQwmI,WAAWhvI,OAChCg3I,EAAWhI,EAAa7oI,GAAQ,EAChC8wI,EAAW,IAAMD,EACjBlhG,EAAOghG,GAAc,EACrBzvG,EAAO0vG,GAAc,EACrBN,KACA/mD,EAAQ,EACHxsF,EAAI4yC,EAAM5yC,EAAI8zI,EAAU9zI,GAAKmkC,EAE9BqoD,EADAlnF,EAAQE,QACA,IAAMxF,EAAI+zI,EAEV/zI,EAAI+zI,EAEhBvnD,EAAQ73E,GAAM63E,EAAOmiC,IAAmB,IAClC2kB,GAAcnrI,EAAQqkF,EAAO8mD,IAC/BC,EAAKvmI,KAAKw/E,EAGlB,OAAO+mD,IAEXS,eAAgB,WACZ,MAAO9uI,MAAKsuI,UAAU,IAE1BS,eAAgB,WACZ,MAAO/uI,MAAKsuI,UAAU,KAE1B58B,cAAe,SAAUF,GACrB,OAAQ,IAAMA,EAAWxxG,KAAKI,QAAQgnF,YAAc,KAExDsmD,YAAa,WACT,GAAIvuD,GAASn/E,IACb,OAAOgT,GAAIhT,KAAK8uI,iBAAkB,SAAUt9B,GACxC,MAAOryB,GAAOuyB,cAAcF,MAGpCovB,WAAY,WACR,UAEJiN,oBAAqB,SAAUpK,GAC3B,GAAIc,GAAiBvkI,KAAKI,QAAQmkI,cAClC,OAAOvkI,MAAKmuI,eAAe1K,EAAS,EAAGc,EAAe72F,KAAM62F,EAAetlG,OAE/E8uG,oBAAqB,SAAUtK,EAASmK,GAAnB,GACbhvD,GAAM5+E,KAAKI,QACXkkI,EAAiB1lD,EAAI0lD,eACrBC,EAAiB3lD,EAAI2lD,eACrBsJ,EAAsBD,EAAY5tI,KAAKsuI,UAAU,EAAG/J,EAAe72F,KAAM62F,EAAetlG,MAAQ,IACpG,OAAOj/B,MAAKmuI,eAAe1K,EAAS,GAAKa,EAAe52F,KAAM42F,EAAerlG,KAAM4uG,IAEvFK,eAAgB,SAAU71I,EAAQorI,EAASmK,GAA3B,GAEJoB,GACAC,EACAvB,EACAQ,CAJR,IAAIzK,EAAQrjI,QAAQlB,OAAS6yH,GAUzB,MATIid,GAAa5rD,GAAI,KAAwC,EAAjCpjF,KAAKI,QAAQwmI,WAAWhvI,SAChDq3I,EAAcrwI,KAAKsnF,IAAI8oD,GAAc32I,EACrCq1I,EAAc1tI,KAAK0tI,cACnBQ,EAAiB,SAAU5mD,GAC3B,OAAKsmD,GAAa3qI,EAAQqkF,EAAOomD,GACtBr1I,EAEJ42I,IAKnBxM,gBAAiB,WAAA,GAIJ3nI,GACDo0I,EACArJ,EACAgC,EACArX,EAEAC,EAEA0e,EAXJhwD,EAASn/E,KACT6jI,EAAY7jI,KAAKI,QAAQyjI,cACzB7vF,EAAQh0C,KAAK+jI,eAAiB,GAAIv0C,KAAQ7rD,WAC9C,KAAS7oC,EAAI,EAAGA,EAAI+oI,EAAUjsI,OAAQkD,IAC9Bo0I,EAAOrL,EAAU/oI,GACjB+qI,EAAO1mD,EAAOiwD,aAAaF,GAC3BrH,EAAa1oD,EAAO8kD,QAAQiL,EAAKliH,MACjCwjG,EAAO0e,EAAKliH,KAAOpuB,KAAKpE,MAAM00I,EAAKliH,MACvC64G,EAAKz+C,YAAcopC,EAAOqX,EAAWvgD,MACjCmpC,EAAO7xH,KAAKuoD,KAAK+nF,EAAKjiH,IAAMiiH,EAAKjiH,GACrC44G,EAAKv+C,QAAUmpC,EAAOD,GAAQqX,EAAWvgD,MACrC6nD,EAAOhc,GAAaxnH,QAAQ6tH,WAAWqM,GACvC9oC,MACI9oB,MAAOi7D,EAAKj7D,MACZ/vC,QAASgrG,EAAKhrG,SAElB84D,QAAU94D,QAASgrG,EAAKhrG,WAE5B8P,EAAMlQ,OAAOqrG,EAEjBnvI,MAAKw6H,aAAaxmF,IAEtBo7F,aAAc,SAAUF,GACpB,MAAOlvI,MAAKikI,QAAQiL,EAAKliH,KAAMkiH,EAAKjiH,GAAK,IAE7Cg3G,QAAS,SAAUj3G,EAAMC,GAAhB,GAYDoiH,GAOAC,EACAC,EACAjoD,EApBAlnF,EAAUJ,KAAKI,QACfslI,EAAYtlI,EAAQslI,UACpBtiG,EAAMpjC,KAAKojC,IACXirG,EAAOruI,KAAK0tI,cACZ8B,EAAYnB,EAAKz2I,OACjB63I,EAAY,IAAMD,EAClBE,EAAY1iH,CAehB,OAdI5sB,GAAQE,UAAYolI,IACpBgK,GAAaA,EAAY,GAAKF,GAElCE,EAAY3sD,GAAWnkF,KAAKpE,MAAMk1I,GAAY,EAAGF,EAAY,GACzDH,EAAYhB,EAAKqB,GACjBhK,IACA2J,GAAwBI,EAAY,EAChCJ,EAAY,IACZA,GAAa,MAGjBC,EAAUvsD,GAAWnkF,KAAKuoD,KAAKl6B,GAAMyiH,GAAYA,EAAWF,EAAY,GACxED,EAAQD,EAAUI,EAAY,EAC9BpoD,EAAQmoD,EAAYF,EACjB,GAAItc,IAAK7vF,EAAI+zB,SAAU,EAAG/zB,EAAIlqC,SAAW,EAAGm2I,EAAW/nD,IAElEu+C,KAAM,SAAU74G,EAAMC,GAAhB,GACE44G,GAAO7lI,KAAKikI,QAAQj3G,EAAMC,GAC1Bm6D,EAAay+C,EAAKz+C,WAAa,IAC/BG,EAAWH,EAAay+C,EAAKv+C,KACjC,OAAO,IAAI6iB,IAAS/C,KAChBy+B,EAAK1uE,OAAOlkC,EACZ4yG,EAAK1uE,OAAO9lD,IAEZ+1E,WAAYA,EACZG,SAAUA,EACVK,QAASi+C,EAAKxtI,OACdwvF,QAASg+C,EAAKxtI,UAGtB0vI,mBAAoB,SAAU1/C,GAAV,GAIPvtF,GACD+qI,EAJJ1mD,EAASn/E,KACTpI,EAASoI,KAAKI,QAAQwmI,WAAWhvI,OACjCua,EAAQ,IACZ,KAASrX,EAAI,EAAGA,EAAIlD,EAAQkD,IAExB,GADI+qI,EAAO1mD,EAAO8kD,QAAQnpI,GACtB+qI,EAAK32B,cAAc7mB,GAAQ,CAC3Bl2E,EAAQrX,CACR,OAGR,MAAOqX,MAGfw3G,EAAkBuL,IACd9tC,WAAY,GACZ85C,QAAUp+F,OAAQomF,EAAW,KAC7Bqb,gBAAkB/gI,SAAS,GAC3BkiI,WAAW,IAEf9qI,GAAWs6H,GAAkBnuH,UAAWkuH,IACpCE,GAAYf,GAAK1zH,QACjBC,KAAM,SAAUP,EAAS25H,GACrB3F,GAAKnwH,GAAGtD,KAAKwH,KAAKnI,KAAMI,EAAS25H,EACjC,IAAI4V,GAAkB3vI,KAAKI,OAC3BuvI,GAAgBhgB,UAAYggB,EAAgBhgB,WAAaggB,EAAgBxgB,UAAY,GAEzF4c,aAAc,SAAUC,GACpB,MAAOnX,IAAY9tH,UAAUglI,aAAa5jI,KAAKnI,KAAMgsI,GAAa,GAEtEr1B,OAAQ,SAAUvzE,GACdpjC,KAAKojC,IAAMA,EACXpjC,KAAKyuI,gBAETA,aAAc,WAAA,GAUD3zI,GAEDsqI,EAXJjmD,EAASn/E,KACT4+E,EAAM5+E,KACNI,EAAUw+E,EAAIx+E,QACd8gI,EAAStiD,EAAIsiD,OACba,EAAenjD,EAAIx+E,QAAQ8gI,OAC3BxzF,EAAOq0F,EAAar0F,MAAQ,EAC5BzO,EAAO8iG,EAAa9iG,MAAQ,EAC5BkhD,EAAa,GAAI+pC,IACjBmkB,EAAOruI,KAAKsuI,UAAUluI,EAAQ+uH,UAAWzhF,EAAMzO,EACnD,KAASnkC,EAAI,EAAGA,EAAIomI,EAAOtpI,OAAQkD,IAC/BomI,EAAOpmI,GAAG67G,OAAOx2B,GACbilD,EAAWlE,EAAOpmI,GAAGsoC,IACzB89F,EAAOpmI,GAAG67G,OAAOx3B,EAAO8kD,QAAQoK,EAAKvzI,IAAI09H,YAAY,EAAG4M,EAASnsI,QAASmsI,EAASlsI,YAG3FgpI,QAAS,WACL,MAAOliI,MAAKojC,KAEhBkrG,UAAW,SAAUvwI,EAAM2wI,EAAYC,EAAYP,GAAxC,GAIHp8H,GACAi6H,EACAoC,EACA3gG,EACAzO,EACKnkC,EACD6Q,CADR,KARmB,SAAfyiI,IACAA,GAAa,GAEbp8H,EAAMhS,KAAKI,QAAQ4R,IACnBi6H,EAAYjsI,KAAK+rI,aAAahuI,GAC9BswI,KACA3gG,EAAOghG,GAAc,EACrBzvG,EAAO0vG,GAAc,EAChB7zI,EAAI4yC,EAAM5yC,EAAImxI,EAAWnxI,GAAKmkC,EAC/BtzB,GAAW,IAAMqG,EAAMlX,EAAIiD,GAAQ,IACjCqwI,GAAcnrI,EAAQ0I,EAASyiI,IACjCC,EAAKvmI,KAAK6D,EAGlB,OAAO0iI,IAEXS,eAAgB,WACZ,MAAO9uI,MAAKsuI,UAAUtuI,KAAKI,QAAQ+uH,YAEvC4f,eAAgB,WACZ,MAAO/uI,MAAKsuI,UAAUtuI,KAAKI,QAAQuvH,YAEvCje,cAAe,SAAU52G,GACrB,OAAQ,IAAMA,EAAIkF,KAAKI,QAAQgnF,YAAc,KAEjDw5C,WAAY,WACR,UAEJiN,oBAAqB,SAAUpK,GAC3B,GAAIc,GAAiBvkI,KAAKI,QAAQmkI,cAClC,OAAOvkI,MAAKmuI,eAAe1K,EAASzjI,KAAKI,QAAQ+uH,UAAWoV,EAAe72F,KAAM62F,EAAetlG,OAEpG8uG,oBAAqB,SAAUtK,EAASmK,GAAnB,GACbxtI,GAAUJ,KAAKI,QACfkkI,EAAiBlkI,EAAQkkI,eACzBC,EAAiBnkI,EAAQmkI,eACzBsJ,EAAsBD,EAAY5tI,KAAKsuI,UAAUluI,EAAQ+uH,UAAWoV,EAAe72F,KAAM62F,EAAetlG,MAAQ,IACpH,OAAOj/B,MAAKmuI,eAAe1K,EAASrjI,EAAQuvH,UAAW2U,EAAe52F,KAAM42F,EAAerlG,KAAM4uG,IAErGuB,aAAc,SAAUF,GACpB,MAAOlvI,MAAKikI,QAAQiL,EAAKliH,KAAMkiH,EAAKjiH,KAExCg3G,QAAS,SAAUrhI,EAAGC,GAAb,GAcG6/B,GAbJk8C,EAAM5+E,KACNI,EAAUw+E,EAAIx+E,QACdgjC,EAAMw7C,EAAIx7C,IACVgkD,EAAahnF,EAAQgnF,WACrBn4E,EAAQ8zE,GAAWngF,EAAGxC,EAAQ4R,IAAK5R,EAAQ1H,KAC3Cf,EAAMorF,GAAWlgF,GAAKoM,EAAOA,EAAO7O,EAAQ1H,IAYhD,OAXI0H,GAAQE,UACR2O,MACAtX,OAEJsX,GAAS,IAAMA,EAAQm4E,GAAc,IACrCzvF,GAAO,IAAMA,EAAMyvF,GAAc,IAC7BzvF,EAAMsX,IACFyzB,EAAMzzB,EACVA,EAAQtX,EACRA,EAAM+qC,GAEH,GAAIuwF,IAAK7vF,EAAI+zB,SAAU,EAAG/zB,EAAIlqC,SAAW,EAAG+V,EAAOtX,EAAMsX,IAEpE42H,KAAM,SAAU74G,EAAMC,GAAhB,GAIE7sB,GACA6O,EACA42H,EACA7zH,EACAtZ,EACA0uF,EAAYG,CAUhB,OAlBW,UAAPt6D,IACAA,EAAKD,GAEL5sB,EAAUJ,KAAKI,QACf6O,EAAQ,IAAM7O,EAAQgnF,WACtBy+C,EAAO7lI,KAAKikI,QAAQj3G,EAAMC,GAC1Bjb,EAAMpT,KAAKoT,IAAIgb,EAAMC,GACrBv0B,EAAMkG,KAAKlG,IAAIs0B,EAAMC,GAErB7sB,EAAQE,SACR8mF,EAAap1E,EACbu1E,EAAW7uF,IAEX0uF,EAAa,IAAM1uF,EACnB6uF,EAAW,IAAMv1E,GAErBo1E,GAAcA,EAAan4E,GAAS,IACpCs4E,GAAYA,EAAWt4E,GAAS,IACzB,GAAIk7F,IAAS/C,KAChBy+B,EAAK1uE,OAAOlkC,EACZ4yG,EAAK1uE,OAAO9lD,IAEZ+1E,WAAYA,EACZG,SAAUA,EACVK,QAASi+C,EAAKxtI,OACdwvF,QAASg+C,EAAKxtI,UAGtB+zI,SAAU,SAAU/jD,GAAV,GACFjoF,GAAUJ,KAAKI,QACf+2D,EAASn3D,KAAKojC,IAAI+zB,SAClBF,EAAKoxB,EAAMp1D,EAAIkkC,EAAOlkC,EACtBikC,EAAKmxB,EAAMh3E,EAAI8lD,EAAO9lD,EACtB04G,EAAQnrH,KAAK6Q,MAAMoyE,GAAIjjF,KAAKo7B,MAAMk9B,EAAID,KACtChoD,EAAQ7O,EAAQgnF,UAKpB,OAJKhnF,GAAQE,UACTypH,MACA96G,QAEI86G,EAAQ96G,EAAQ,KAAO,KAEnCs3H,WAAY,WACR,OACIv0H,IAAK,EACLtZ,IAAe,EAAVkG,KAAKsuF,OAItBy8B,EAAkBwL,IACdj2H,KAAM,QACNkoF,WAAY,EACZ9mF,SAAS,EACT6uH,UAAW,GACXn9G,IAAK,EACLtZ,IAAK,IACLwoI,QAAUp+F,OAAQomF,EAAW,KAC7Bqb,gBACItwD,MAAOs9C,GACP/tH,SAAS,EACTvK,MAAO,GAEXqrI,gBAAkBrwD,MAAO,UAE7Br5E,GAAWu6H,GAAUpuH,UAAWkuH,IAC5BwN,gBAAiBvN,GAAkBnuH,UAAU07H,gBAC7CiL,YAAaxY,GAAkBnuH,UAAU2mI,YACzC3vF,MAAO82E,GAAY9tH,UAAUg3C,MAC7B+jF,YAAajN,GAAY9tH,UAAU+6H,YACnCG,gBAAiBpN,GAAY9tH,UAAUk7H,kBAEvC7M,IACAh1H,SAAWmkI,gBAAkB/gI,SAAS,IACtCi/H,gBAAiB,WAAA,GAQTgB,GACAiK,EACAv2E,EACAnjB,EACKl5C,EACDo0I,EACAU,EAOA/J,EACAsJ,EACAz0C,EAtBJvb,EAASn/E,KACT4+E,EAAM5+E,KAAKI,QACXlB,EAAO0/E,EAAI2lD,eAAerlI,KAC1B2kI,EAAYjlD,EAAIilD,SAQpB,KAPkB,SAAdA,IACAA,MAEAJ,EAAUzjI,KAAK8jI,SAAS+L,UACxBnC,EAAcjK,EAAQiK,cACtBv2E,EAASssE,EAAQrgG,IAAI+zB,SACrBnjB,EAAQh0C,KAAK+jI,eAAiB,GAAIv0C,KAAQ7rD,YACrC7oC,EAAI,EAAGA,EAAI+oI,EAAUjsI,OAAQkD,IAC9Bo0I,EAAOrL,EAAU/oI,GACjB80I,GACA7yC,MACI9oB,MAAOi7D,EAAKj7D,MACZ/vC,QAASgrG,EAAKhrG,SAElB84D,QAAU94D,QAASgrG,EAAKhrG,UAExB2hG,EAAO1mD,EAAO8kD,QAAQiL,EAAKliH,KAAMkiH,EAAKjiH,IAAI,GAC1CkiH,EAAO,GAAIlc,IAAK97D,EAAQA,EAAO9lD,EAAIw0H,EAAK7uE,GAAIG,EAAO9lD,EAAIw0H,EAAK/uE,GAAI,EAAG,KACnE4jC,EAAQ,OAERA,EADAx7F,IAAS6yH,GACDoB,GAAaxnH,QAAQ6tH,WAAW2V,EAAMS,GAEtC9yC,GAAKiS,WAAW5vB,EAAO2wD,eAAeX,EAAMzB,GAAckC,GAAWnjE,QAEjFz4B,EAAMlQ,OAAO42D,EAEjB16F,MAAKw6H,aAAaxmF,IAEtB87F,eAAgB,SAAUX,EAAM/V,GAAhB,GASHt+H,GARLi1I,KACAC,KACA74E,GACAg4E,EAAKh4E,OAAOlkC,EACZk8G,EAAKh4E,OAAO9lD,GAEZ4+H,EAAc,GAAIhtC,IAAO9rC,EAAQg4E,EAAK7kB,aACtC4lB,EAAc,GAAIjtC,IAAO9rC,EAAQg4E,EAAK92I,OAC1C,KAASyC,EAAI,EAAGA,EAAIs+H,EAAOxhI,OAAQkD,IAC/Bi1I,EAAYjoI,KAAKmoI,EAAY1/B,QAAQ6oB,EAAOt+H,GAAK,MACjDk1I,EAAYloI,KAAKooI,EAAY3/B,QAAQ6oB,EAAOt+H,GAAK,KAKrD,OAHAi1I,GAAYzvI,UACZyvI,EAAYjoI,KAAKioI,EAAY,IAC7BC,EAAYloI,KAAKkoI,EAAY,IACtBA,EAAY95H,OAAO65H,IAE9B7L,gBAAiB,SAAUT,GAAV,GAULpC,GATJjhI,EAAUJ,KAAKI,QACfmhI,EAAavhI,KAAKmwI,8BAClBzC,EAAcjK,EAAQiK,cACtBv2E,EAASssE,EAAQrgG,IAAI+zB,SACrBwrE,IAQJ,OAPIviI,GAAQmkI,eAAe/gI,UACvBm/H,EAAY3iI,KAAKiuI,gBAAgB92E,EAAQoqE,EAAYmM,EAAattI,EAAQmkI,iBAE1EnkI,EAAQkkI,eAAe9gI,UACnB69H,EAAarhI,KAAKowI,8BACtBtsG,GAAO6+F,EAAW3iI,KAAKiuI,gBAAgB92E,EAAQkqE,EAAYqM,EAAattI,EAAQkkI,kBAE7E3B,GAEXsL,gBAAiB,SAAU92E,EAAQk0D,EAAO+N,EAAQh5H,GAAjC,GAYT6+B,GAIAtX,EACKu9G,EACDmL,EAEItvC,EAOI4D,EACK2rC,EA3BjBx2I,GACAkjG,QACI/jG,MAAOmH,EAAQnH,MACfg7E,MAAO7zE,EAAQ6zE,MACf4qC,SAAUz+G,EAAQy+G,WAGtBnxE,EAAOttC,EAAQstC,IASnB,KARa,SAATA,IACAA,EAAO,GAEPzO,EAAO7+B,EAAQ6+B,KACN,SAATA,IACAA,EAAO,GAEPtX,EAAY3nB,KAAK0iI,kBACZwC,EAASx3F,EAAMw3F,EAAS7Z,EAAMzzH,OAAQstI,GAAUjmG,EAErD,GADIoxG,EAAal5E,EAAO9lD,EAAIg6G,EAAM6Z,GAC9BmL,EAAa,EAKb,GAJItvC,EAAS,GAAIkC,KACb9rC,EAAOlkC,EACPkkC,EAAO9lD,GACRg/H,GACCjwI,EAAQlB,OAAS6yH,GACjBpqG,EAAUmc,OAAO,GAAItiB,IAAQyhF,OAAOlC,EAAQjnG,QACzC,CAEH,IADI6qG,EAAO,GAAI7H,IAAKhjG,GACXw2I,EAAU,EAAGA,EAAUlX,EAAOxhI,OAAQ04I,IAC3C3rC,EAAK1U,OAAO8Q,EAAOwP,QAAQ6oB,EAAOkX,GAAW,KAEjD3rC,GAAKl4B,QACL9kD,EAAUmc,OAAO6gE,GAI7B,MAAOh9E,GAAUhtB,UAErByxI,SAAU,SAAU/jD,GAAV,GAQEpxB,GACAC,EACA6yD,EAIAwmB,EACA/B,EACAgC,EACAC,EAhBJvO,EAAUliI,KAAKkiI,UACfuB,EAAUzjI,KAAK8jI,SAAS+L,UACxBnC,EAAcjK,EAAQiK,cACtBv2E,EAASssE,EAAQrgG,IAAI+zB,SACrB9+D,EAASgwF,EAAM8lB,WAAWh3C,GAC1BC,EAAW/+D,CAcf,OAbI2H,MAAKI,QAAQmkI,eAAerlI,OAAS6yH,IAAO2b,EAAY91I,OAAS,IAC7Dq/D,EAAKoxB,EAAMp1D,EAAIkkC,EAAOlkC,EACtBikC,EAAKmxB,EAAMh3E,EAAI8lD,EAAO9lD,EACtB04G,GAASloC,GAAIjjF,KAAKo7B,MAAMk9B,EAAID,IAAO,KAAO,IAC9Cy2E,EAAY1vH,KAAK,SAAUpb,EAAGC,GAC1B,MAAOmuH,IAAgBpuH,EAAGmnH,GAASiH,GAAgBnuH,EAAGknH,KAEtDwmB,EAAWvf,GAAgB0c,EAAY,GAAIA,EAAY,IAAM,EAC7Dc,EAAQxd,GAAgBjH,EAAO2jB,EAAY,IAC3C8C,EAAQ,GAAKD,EACbE,EAAO,IAAMjC,EAAQgC,EACzBp5E,EAAW/+D,GAAUuG,KAAKunF,IAAI/C,GAAIqtD,IAAS7xI,KAAKunF,IAAI/C,GAAIotD,MAErDxwI,KAAK0wI,WAAW3pI,UAAUqlI,SAASjkI,KAAKnI,KAAM,GAAI8lF,IAAMo8C,EAAQrrE,GAAIqrE,EAAQlrE,GAAKI,MAM5Fi+D,GAAmBR,GAAYn0H,QAC/ByvI,4BAA6B,WACzB,MAAOnwI,MAAKqnI,iBAAiBrnI,KAAKI,QAAQ+uH,YAE9CihB,4BAA6B,WAAA,GACrBhwI,GAAUJ,KAAKI,QACfuwI,EAAgB,CAIpB,OAHIvwI,GAAQmkI,eAAe/gI,UACvBmtI,EAAgBvwI,EAAQ+uH,WAErBnvH,KAAKqnI,iBAAiBjnI,EAAQuvH,UAAWghB,IAEpDD,SAAU,WACN,MAAO7b,OAGfj6H,GAAWy6H,GAAiBtuH,UAAWquH,IACnCE,GAAuBN,GAAgBt0H,QACvCyvI,4BAA6B,WACzB,GAAI1gE,KAIJ,OAHAzvE,MAAK+sI,4BAA4B,SAAUprG;AACvC8tC,EAAU3nE,KAAK65B,IAChB3hC,KAAKI,QAAQmkI,gBACT90D,GAEX2gE,4BAA6B,WACzB,GAAI3gE,KAIJ,OAHAzvE,MAAKitI,4BAA4B,SAAUtrG,GACvC8tC,EAAU3nE,KAAK65B,IAChB3hC,KAAKI,QAAQkkI,gBACT70D,GAEXihE,SAAU,WACN,MAAO1b,OAGfp6H,GAAW06H,GAAqBvuH,UAAWquH,IACvCG,GAAS,KACTC,GAA6B,IAC7BC,GAAiB5+H,GAAM6J,QACvBC,KAAM,SAAUuvF,GACZlwF,KAAKkwF,OAASA,GAElBxxC,QAAS,SAAUkyF,GAAV,GAaDxrD,GACAC,EACAC,EAQIurD,EAKJC,EAAqBC,EAKjBC,EAIAC,EAGJC,EACKvzI,EAOGwzI,EAGAp/B,EAQJq/B,EAMAC,EAhEJlyD,EAASn/E,KACTyoF,EAASmoD,EAAWpqI,MAAM,GAC1BupF,KACAG,EAASlwF,KAAKkwF,OACdt4F,EAAS6wF,EAAO7wF,MAKpB,IAJIA,EAAS,IACToI,KAAKsxI,iBAAiB,EAAG7oD,GACzB7wF,EAAS6wF,EAAO7wF,QAEhBA,EAAS,GAAgB,IAAXA,GAAgB6wF,EAAO,GAAGrsC,OAAOqsC,EAAO,IACtD,MAAOsH,EAMX,KAJI3K,EAAKqD,EAAO,GACZpD,EAAKoD,EAAO,GACZnD,EAAKmD,EAAO,GAChBsH,EAASjoF,KAAK,GAAIo/F,IAAQ9hB,IACnBA,EAAGhpC,OAAOqsC,EAAO7wF,EAAS,KAC7Bs4F,GAAS,EACTzH,EAAO18D,MACPn0B,GAEJ,IAAe,IAAXA,EAIA,MAHIi5I,GAAU7wI,KAAK6wI,QAAQzrD,EAAIC,EAAI8rC,GAAG7/G,IACtCge,GAAKygE,GAAUlC,WAAW7tF,KAAKuxI,kBAAkBV,EAASzrD,EAAIC,EAAI8rC,GAAG7/G,KACrEy+E,EAASjoF,KAAK,GAAIo/F,IAAQ7hB,EAAIrlF,KAAKwxI,mBAAmBX,EAASzrD,EAAIC,EAAI8rC,GAAG7/G,MACnEy+E,CAeX,KAZIG,GACA9K,EAAKqD,EAAO7wF,EAAS,GACrBytF,EAAKoD,EAAO,GACZnD,EAAKmD,EAAO,GACRuoD,EAAgBhxI,KAAKgxI,cAAc5rD,EAAIC,EAAIC,GAC/CwrD,EAAsBE,EAAc,GACpCD,EAAmBC,EAAc,KAE7BC,EAAYjxI,KAAK6wI,QAAQzrD,EAAIC,EAAI8rC,GAAG7/G,IACxCw/H,EAAsB9wI,KAAKuxI,kBAAkBN,EAAW7rD,EAAIC,EAAI8rC,GAAG7/G,KAEnE4/H,EAAMJ,EACDnzI,EAAM,EAAGA,GAAO/F,EAAS,EAAG+F,IACjCwhF,EAAOmyD,iBAAiB3zI,EAAK8qF,GAC7B7wF,EAAS6wF,EAAO7wF,OACZ+F,EAAM,GAAK/F,IACXwtF,EAAKqD,EAAO9qF,GACZ0nF,EAAKoD,EAAO9qF,EAAM,GAClB2nF,EAAKmD,EAAO9qF,EAAM,GACdwzI,EAAkBhyD,EAAO6xD,cAAc5rD,EAAIC,EAAIC,GACnDh2D,GAAKygE,GAAUlC,WAAWqjD,GAC1BA,EAAMC,EAAgB,GAClBp/B,EAAMo/B,EAAgB,GAC1BphD,EAASjoF,KAAK,GAAIo/F,IAAQ7hB,EAAI0sB,IAiBtC,OAdI7hB,IACA9K,EAAKqD,EAAO7wF,EAAS,GACrBytF,EAAKoD,EAAO7wF,EAAS,GACrB0tF,EAAKmD,EAAO,GACR2oD,EAAkBpxI,KAAKgxI,cAAc5rD,EAAIC,EAAIC,GACjDh2D,GAAKygE,GAAUlC,WAAWqjD,GAC1BnhD,EAASjoF,KAAK,GAAIo/F,IAAQ7hB,EAAI+rD,EAAgB,KAC9C9hH,GAAKygE,GAAUlC,WAAWujD,EAAgB,IAC1CrhD,EAASjoF,KAAK,GAAIo/F,IAAQ5hB,EAAIyrD,MAE1BM,EAAYrxI,KAAK6wI,QAAQxrD,EAAIC,EAAI6rC,GAAG7/G,IACxCge,GAAKygE,GAAUlC,WAAWqjD,GAC1BnhD,EAASjoF,KAAK,GAAIo/F,IAAQ5hB,EAAItlF,KAAKwxI,mBAAmBH,EAAWhsD,EAAIC,EAAI6rC,GAAG7/G,OAEzEy+E,GAEXuhD,iBAAkB,SAAU3zI,EAAK8qF,GAC7B,KAAOA,EAAO9qF,EAAM,KAAO8qF,EAAO9qF,GAAKy+C,OAAOqsC,EAAO9qF,EAAM,KAAO8qF,EAAO9qF,EAAM,GAAGy+C,OAAOqsC,EAAO9qF,EAAM,MAClG8qF,EAAOrgF,OAAOzK,EAAM,EAAG,IAG/B8zI,WAAY,SAAUrsD,EAAIC,EAAIC,GAAlB,GASArhF,GACA+yD,EATJy6E,GAAa,CAcjB,OAbIrsD,GAAGnyD,IAAMoyD,EAAGpyD,EACZw+G,GAAa,EACNpsD,EAAGpyD,IAAMqyD,EAAGryD,GACfoyD,EAAGh0E,EAAIi0E,EAAGj0E,GAAK+zE,EAAG/zE,GAAKg0E,EAAGh0E,GAAKi0E,EAAGj0E,EAAIg0E,EAAGh0E,GAAKg0E,EAAGh0E,GAAK+zE,EAAG/zE,KACzDogI,GAAa,IAGbxtI,EAAKjE,KAAK0xI,aAAatsD,EAAIC,GAC3BruB,EAAKh3D,KAAK2xI,kBAAkB1tI,EAAIqhF,EAAGryD,GACjCmyD,EAAG/zE,GAAKg0E,EAAGh0E,GAAKi0E,EAAGj0E,GAAK2lD,GAASquB,EAAGh0E,GAAK+zE,EAAG/zE,GAAKi0E,EAAGj0E,GAAK2lD,IAC3Dy6E,GAAa,IAGdA,GAEXG,OAAQ,SAAUxsD,EAAIC,EAAIC,GAAlB,GACArhF,GAAKjE,KAAK0xI,aAAatsD,EAAIC,GAC3BruB,EAAKh3D,KAAK2xI,kBAAkB1tI,EAAIqhF,EAAGryD,EACvC,OAAOmyD,GAAGnyD,IAAMoyD,EAAGpyD,GAAKoyD,EAAGpyD,IAAMqyD,EAAGryD,GAAKxjB,GAAMunD,EAAI,KAAOvnD,GAAM61E,EAAGj0E,EAAG,IAE1EqgI,aAAc,SAAUrsD,EAAIC,GAAd,GACN1iF,IAAK0iF,EAAGj0E,EAAIg0E,EAAGh0E,IAAMi0E,EAAGryD,EAAIoyD,EAAGpyD,GAC/BpwB,EAAIwiF,EAAGh0E,EAAIzO,EAAIyiF,EAAGpyD,CACtB,QACIpwB,EACAD,IAGRouI,cAAe,SAAU5rD,EAAIC,EAAIC,GAAlB,GAKPurD,GAIIgB,EAeQxyI,EAWZmyI,EAEIM,EAIJP,EAxCAQ,EAAS5gB,GACT6gB,EAAS1gI,GACT2gI,GAAW,EACXC,GAAoB,CA0CxB,OAxCIlyI,MAAK4xI,OAAOxsD,EAAIC,EAAIC,GACpBurD,EAAU7wI,KAAK6wI,QAAQzrD,EAAIC,EAAI8rC,GAAG7/G,KAE9BugI,GACA5+G,EAAGjzB,KAAKmyI,mBAAmB/sD,EAAIC,EAAIC,EAAI6rC,IACvC9/G,EAAGrR,KAAKmyI,mBAAmB/sD,EAAIC,EAAIC,EAAIh0E,KAEvCugI,EAAU5+G,GAAK4+G,EAAUxgI,GACzBw/H,EAAU7wI,KAAK6wI,QAAQzrD,EAAIE,EAAI6rC,GAAG7/G,IAClC2gI,GAAW,IAEPjyI,KAAKyxI,WAAWrsD,EAAIC,EAAIC,KACxBysD,EAASzgI,GACT0gI,EAAS7gB,IAET0gB,EAAUE,GACVlB,EAAU,GAINxxI,EADAimF,EAAG0sD,GAAU5sD,EAAG4sD,IAAW5sD,EAAG4sD,IAAW3sD,EAAG2sD,IAAW5sD,EAAG4sD,GAAU1sD,EAAG0sD,IAAW3sD,EAAG2sD,IAAW5sD,EAAG4sD,GAC5FppD,IAAYtD,EAAG0sD,GAAU5sD,EAAG4sD,KAAY3sD,EAAG0sD,GAAU3sD,EAAG2sD,MAEvDnpD,IAAYtD,EAAGysD,GAAU3sD,EAAG2sD,KAAY1sD,EAAG2sD,GAAU5sD,EAAG4sD,KAEpEnB,EAAUrb,GAA6Bn2H,EACvC6yI,GAAoB,KAI5BV,EAAqBxxI,KAAKwxI,mBAAmBX,EAASzrD,EAAIC,EAAI0sD,EAAQC,GACtEE,IACIJ,EAAYC,EAChBA,EAASC,EACTA,EAASF,GAETP,EAAoBvxI,KAAKuxI,kBAAkBV,EAASxrD,EAAIC,EAAIysD,EAAQC,GACpEC,IACAjyI,KAAKoyI,qBAAqBhtD,EAAIC,EAAImsD,EAAoBX,GACtD7wI,KAAKoyI,qBAAqB/sD,EAAIC,EAAIisD,EAAmBV,KAGrDW,EACAD,IAGRa,qBAAsB,SAAU/sD,EAAIC,EAAI+sD,EAAIxB,GACpCxrD,EAAGh0E,EAAIi0E,EAAGj0E,EACNi0E,EAAGj0E,EAAIghI,EAAGhhI,GACVghI,EAAGp/G,EAAIoyD,EAAGpyD,GAAKqyD,EAAGj0E,EAAIg0E,EAAGh0E,GAAKw/H,EAC9BwB,EAAGhhI,EAAIi0E,EAAGj0E,GACHghI,EAAGhhI,EAAIg0E,EAAGh0E,IACjBghI,EAAGp/G,EAAIqyD,EAAGryD,GAAKqyD,EAAGj0E,EAAIg0E,EAAGh0E,GAAKw/H,EAC9BwB,EAAGhhI,EAAIg0E,EAAGh0E,GAGVghI,EAAGhhI,EAAIi0E,EAAGj0E,GACVghI,EAAGp/G,EAAIoyD,EAAGpyD,GAAKoyD,EAAGh0E,EAAIi0E,EAAGj0E,GAAKw/H,EAC9BwB,EAAGhhI,EAAIi0E,EAAGj0E,GACHg0E,EAAGh0E,EAAIghI,EAAGhhI,IACjBghI,EAAGp/G,EAAIqyD,EAAGryD,GAAKoyD,EAAGh0E,EAAIi0E,EAAGj0E,GAAKw/H,EAC9BwB,EAAGhhI,EAAIg0E,EAAGh0E,IAItBw/H,QAAS,SAAUzrD,EAAIC,EAAI0sD,EAAQC,GAA1B,GAGDnB,GAFA59G,EAAIoyD,EAAG0sD,GAAU3sD,EAAG2sD,GACpB1gI,EAAIg0E,EAAG2sD,GAAU5sD,EAAG4sD,EAOxB,OAJInB,GADM,IAAN59G,EACU,EAEA5hB,EAAI4hB,GAItBk/G,mBAAoB,SAAU/sD,EAAIC,EAAIC,EAAIvnE,GACtC,MAAOunE,GAAGvnE,GAASsnE,EAAGtnE,IAAUsnE,EAAGtnE,GAASqnE,EAAGrnE,IAAUunE,EAAGvnE,GAASsnE,EAAGtnE,IAAUsnE,EAAGtnE,GAASqnE,EAAGrnE,IAErGwzH,kBAAmB,SAAUV,EAASzrD,EAAIG,EAAIwsD,EAAQC,GAAnC,GACXtpD,GAAKtD,EAAG2sD,GACR39B,EAAK7uB,EAAGwsD,GACR36E,GAAYg9C,EAAK1rB,GAAM6sC,EAC3B,OAAOv1H,MAAKqoF,MAAMK,EAAKtxB,EAAUguB,EAAG4sD,GAAU56E,EAAWy5E,EAASkB,EAAQC,IAE9ER,mBAAoB,SAAUX,EAASzrD,EAAIG,EAAIwsD,EAAQC,GAAnC,GACZtpD,GAAKtD,EAAG2sD,GACR39B,EAAK7uB,EAAGwsD,GACR36E,GAAYg9C,EAAK1rB,GAAM6sC,EAC3B,OAAOv1H,MAAKqoF,MAAM+rB,EAAKh9C,EAAUmuB,EAAGysD,GAAU56E,EAAWy5E,EAASkB,EAAQC,IAE9E3pD,MAAO,SAAUiqD,EAAQC,EAAQR,EAAQC,GACrC,GAAI5pD,GAAe,GAAI+hB,IAASrkB,KAGhC,OAFAsC,GAAa2pD,GAAUO,EACvBlqD,EAAa4pD,GAAUO,EAChBnqD,GAEXupD,kBAAmB,SAAU1tI,EAAIgvB,GAAd,GAGNn4B,GAFLlD,EAASqM,EAAGrM,OACZoH,EAAS,CACb,KAASlE,EAAI,EAAGA,EAAIlD,EAAQkD,IACxBkE,GAAUJ,KAAK8nC,IAAIzT,EAAGn4B,GAAKmJ,EAAGnJ,EAElC,OAAOkE,MAMfuiB,GAAQixH,UAAY/e,GACpBv7H,MAAM0C,WAAW1C,MAAMqpB,SACnB6wG,UAAWA,GACXS,SAAUA,GACV9E,cAAeA,EACfjoC,MAAOA,GACPokC,IAAKA,GACL+I,KAAMA,GACNC,OAAQA,GACRC,aAAcA,GACdG,aAAcA,GACdF,aAAcA,GACdC,WAAYA,GACZK,YAAaA,GACbC,aAAcA,GACdnsB,KAAMA,GACNssB,QAASA,GACTC,MAAOA,GACPC,UAAWA,GACXI,KAAMA,GACND,KAAMA,GACNI,aAAcA,GACdI,iBAAkBA,GAClBG,cAAeA,GACfD,YAAaA,GACbG,gBAAiBA,GACjBG,UAAWA,GACXD,kBAAmBA,GACnBG,iBAAkBA,GAClBC,qBAAsBA,GACtBG,eAAgBA,GAChBjL,UAAWA,EACXlwH,SAAUA,EACVgrC,YAAaA,EACbkjF,iBAAkBA,EAClBC,UAAWA,EACX7tH,WAAYA,GACZgpF,cAAeA,EACfslC,WAAYA,EACZE,YAAaA,EACb9lG,OAAQ4tG,GACRnkG,KAAMA,EACNu8F,WAAYA,EACZrmH,QAASA,EACTumH,iBAAkBA,EAClBuJ,iBAAkBA,GAClBhtH,QAASA,EACT7J,WAAYA,GACZ82C,SAAUA,EACV41E,SAAUA,EACVC,SAAUA,EACV71G,IAAKA,EACL02G,gBAAiBA,EACjBsJ,WAAYA,GACZrJ,kBAAmBA,EACnBC,kBAAmBA,EACnBd,WAAYA,EACZhlF,OAAQA,GACR0/C,WAAYA,GACZ3sF,MAAOA,GACP6qF,QAASA,GACTG,IAAKA,GACLtO,cAAeA,GACf9L,YAAaA,GACbob,aAAcA,GACdD,iBAAkBA,GAClBtzD,KAAMA,GACNyzD,WAAYA,GACZx+D,aAAcrsB,MAAMqsB,aACpBu7D,UAAWA,GACXsD,IAAKA,GACL3zE,MAAOA,GACPu0E,aAAcA,GACdT,eAAgBA,GAChB0nC,iBAAkBA,EAClBc,YAAaA,EACbX,SAAUA,EACVyB,SAAUA,EACVC,aAAcA,EACdC,SAAUA,EACVE,WAAYA,EACZI,UAAWA,EACXhtH,SAAUA,EACVusH,UAAWA,EACXW,aAAcA,EACdhC,YAAaA,EACbD,OAAQA,EACR50G,UAAWA,EACXm3G,WAAYA,EACZb,OAAQA,KAEdr2H,OAAOuB,MAAM2sB,SACC,kBAAVpuB,SAAwBA,OAAOgiC,IAAMhiC,OAAS,SAAUiiC,EAAIC,EAAIC,IACrEA,GAAMD,OAEV,SAAUniC,EAAGC,QACVA,OAAO,qBAAsB,2BAA4BD,IAC3D,YACG,SAAUE,GAAV,GACO6qB,GAAUrpB,MAAMqpB,QAChBsxG,EAAWtxG,EAAQsxG,SACnB9hC,EAAO74F,MAAMspB,OACjBD,GAAQkxH,aACJ/xI,OAAQ,SAAU+F,EAAOisI,GACrB,IAAKjsI,EAAM67F,aACP,KAAUx5F,OAAM,mDAEpBrC,GAAMwqF,UAAYjxF,KAAKixF,UACvBxqF,EAAMiqF,YAAc1wF,KAAK0wF,YACzBjqF,EAAMksI,UAAY3yI,KAAK2yI,UAClBD,IACDjsI,EAAM2oF,IAAMpvF,KAAKovF,IACjB3oF,EAAMmsI,aAAe5yI,KAAK4yI,eAGlC3hD,UAAW,SAAU7wF,GACjB,MAAO2wF,GAAKE,UAAUjxF,KAAKsiG,eAAgBliG,IAE/CswF,YAAa,SAAUtwF,GACnB,MAAO2wF,GAAKL,YAAY1wF,KAAKsiG,aAAaliG,GAAUA,IAExDuyI,UAAW,SAAUvyI,GACjB,MAAO2wF,GAAK4hD,UAAU3yI,KAAKsiG,eAAgBliG,IAE/CgvF,IAAK,WACD,GAAI2B,EAAK3B,IAAIiZ,QACT,MAAOtX,GAAK3B,IAAIF,YAAYlvF,KAAKsiG,eAEjC,MAAUx5F,OAAM,8EAGxB8pI,aAAc,WAAA,GAKFjrH,GAKA4zC,EAEAy1B,CAXR,KAAK94F,MAAMC,QAAQozG,OACf,MAAO,KAEX,IAAIxa,EAAKwa,OAAOlD,QAWZ,MAVI1gF,GAAYjxB,EAAE,WAAWuB,KACzBonB,QAAS,OACTpmB,MAAO+G,KAAKjI,QAAQkB,QACpBC,OAAQ8G,KAAKjI,QAAQmB,WACtB49B,SAASv5B,SAASsa,MACjB0jD,EAAU,GAAIw1B,GAAKwa,OAAOlD,QAAQ1gF,EAAU,IAChD4zC,EAAQw1B,KAAK/wF,KAAKsiG,gBACdtR,EAAQz1B,EAAQ2hD,aAAa3Z,YACjChoC,EAAQz1C,UACR6B,EAAUO,SACH8oE,CAEP,MAAUloF,OAAM,oFAI5B+pH,EAASP,YAAYlqG,UACjBrf,OAAQ,SAAUA,GACd,MAAO7Q,OAAM6Q,OAAOjC,MAAM,MAAOiC,GAAQmN,OAAOpa,MAAMiL,UAAUP,MAAM2B,KAAKpN,UAAW,MAE1FwO,SAAUrR,MAAMqR,SAChBmN,UAAWxe,MAAMwe,YAErBm8G,EAASxJ,gBAAgBjhG,UAAW5f,QAAStQ,MAAMuK,WACnD8e,EAAQsxH,QAAUtxH,EAAQukE,MAC1BvkE,EAAQuxH,MAAQvxH,EAAQ2oG,IACxB3oG,EAAQwxH,QAAU,SAAU9qI,GACxB,MAAOsZ,GAAQmoG,gBAAgBzhH,EAAEqY,iBAEvC3pB,OAAOuB,MAAM2sB,SACC,kBAAVpuB,SAAwBA,OAAOgiC,IAAMhiC,OAAS,SAAUiiC,EAAIC,EAAIC,IACrEA,GAAMD,OAEV,SAAUniC,EAAGC,QACVA,OAAO,sBACH,0BACA,qBACDD,IACL,aAYkB,kBAAVC,SAAwBA,OAAOgiC,IAAMhiC,OAAS,SAAUiiC,EAAIC,EAAIC,IACrEA,GAAMD,OAEV,SAAUniC,EAAGC,QACVA,OAAO,mCAAoC,sBAAuBD,IACpE,YACG,WAAA,GAEOw8I,GACAC,EACA1hB,EACA2hB,EACAC,EACAC,EACAC,EACAC,EACAhiB,EACAiR,EAcAgR,EAUAC,EAcAC,EAMAC,EAyBAC,EAOAC,EAOAC,EAsBAC,EAMAC,EAGAC,EAGAC,EAaAC,EAaAC,EAMAC,EAMAC,EAMAC,EAGAC,EAUAC,EAcAC,EAcAC,EAiCApsG,EAGAqsG,EAGAC,CA3PJj+I,QAAOuB,MAAMqpB,QAAU5qB,OAAOuB,MAAMqpB,YAChCyxH,EAAU,IACVC,EAAc,GACd1hB,EAAQ,OACR2hB,EAAO,+BACPC,EAAS,QAAUD,EACnBE,EAAS,QAAUF,EACnBG,EAAS,QAAUH,EACnBI,EAAc,cACdhiB,EAAQ,OACRiR,EAAQ,WACR,OACI/B,MAAQnE,QAAUpjI,MAAO,IACzBy8C,OACImhD,KAAMu8C,EACN1+C,QAAS,GAEbiQ,MACI/sG,OAAQ,GACRqB,MAAO,GAEXuK,SAAS,IAGb+vI,EAAe,WACf,OACIrS,QAAUrqC,KAAMu8C,GAChB7Q,MAAOA,IACPj6F,OACIuuD,KAAMw8C,EACNvwG,OAAQ,KAIhB0wG,EAAa,WACb,OACIpY,WAAayZ,SAAWxY,YACxB13B,MACIzgE,QAAS,EACTjrC,MAAO,GAEX47I,SACI92I,KAAM,EACNyF,SAAS,GAEb0gC,QAAS,KAGbuvG,EAAY,WACZ,OACI5pI,IAAKmpI,EACL98B,QAAS+8B,IAGbS,EAAgB,WAChB,OACIoB,cAAe,GACfC,UAAW,GACX1Y,QACI2Y,YAAa,GACb/7I,MAAO,GAEXg8I,UAAW3jB,EACXznH,IAAK,EACLuxH,WACIiB,QACIn4F,QAAS,EACTjrC,MAAO,GAEXi8I,UAAYj8I,MAAO,GACnBk8I,MAAQl8I,MAAO,GACfm8I,QAAUn8I,MAAO,IAErBk8I,MAAQl8I,MAAO,GACfm8I,QAAUn8I,MAAO,GACjBi9G,QAAS,GACTg/B,UAAYj8I,MAAO,KAGvB06I,EAAe,WACf,OACItX,QAAUpjI,MAAO,GACjBioI,QAAUliC,WAAYs0C,GACtBpvG,QAAS,KAGb0vG,EAAe,WACf,OACI/pI,IAAKmpI,EACL98B,QAAS+8B,EACT7yH,QAAU6zD,MAAO,aAGrB4/D,EAAoB,WACpB,OACIxX,QACI2Y,YAAa,GACb/7I,MAAO,GAEXg8I,UAAW3jB,EACXznH,IAAK,EACLuxH,WACIiB,QACIn4F,QAAS,EACTjrC,MAAO,GAEX0rG,MAAQ1rG,MAAO,IAEnB0rG,MACI1wB,MAAOs9C,EACPt4H,MAAO,GAEXi9G,QAAS,KAGb49B,EAAe,WACf,OACIjqI,IAAKmpI,EACL98B,QAAS+8B,IAGbc,EAAc,WACd,OAASjxG,OAAQ,IAEjBkxG,EAAa,WACb,OAAS/6I,MAAO,IAEhBg7I,EAAa,WACb,OACIpqI,IAAK,EACLuxH,WACIz2B,MACIzgE,QAAS,EACTjrC,MAAO,IAGf0rG,MAAQ1rG,MAAO,GACfi9G,QAAS,KAGbg+B,EAAkB,WAClB,OACIvvC,MACIzgE,QAAS,EACTjrC,MAAO,GAEX47I,SACI92I,KAAM,EACNyF,SAAS,GAEb0gC,QAAS,KAGbiwG,EAAkB,WAClB,OACIU,SAAWrxI,SAAS,GACpBvK,MAAO,IAGXm7I,EAAiB,WACjB,OACIvqI,IAAKmpI,EACL98B,QAAS+8B,IAGboB,EAAoB,WACpB,OACIxqI,IAAKmpI,EACL98B,QAAS+8B,IAGbqB,EAAoB,WACpB,OAASr7I,MAAO,IAEhBs7I,EAAkB,WAClB,OACI1qI,IAAK,GACL86F,MACI1wB,MAAOs9C,EACPt4H,MAAO,GAEXi9G,QAAS+8B,IAGbuB,EAAY,WACZ,OACItT,QACIliC,WAAY,GACZ/qB,MAAO,GACPygB,SACIp1F,IAAK,EACLzG,OAAQ,EACRF,KAAM,EACNC,MAAO,MAKnB67I,EAAe,WACf,OACIvT,QACIliC,WAAY,GACZ/qB,MAAO,GACPygB,SACIp1F,IAAK,EACLzG,OAAQ,EACRF,KAAM,EACNC,MAAO,MAKnB87I,EAAiB,SAAUt0I,GAC3B,OACIoD,SAAS,EACT09H,QAAUrqC,KAAMs8C,GAChBnX,QAAS57H,EAAQk9H,cAAmB/sC,SAAU,QAC9C8kD,KAAM7B,IACN8B,IAAK7B,IACL8B,QAAS7B,IACT8B,OAAQ7B,IACRrzC,OAAQszC,IACR6B,YAAa5B,IACb6B,OAAQ5B,IACR6B,IAAKnB,IACLoB,MAAO7B,IACP8B,OAAQpB,IACRqB,oBAAqBvB,IACrB5vC,KAAMqvC,IACNzR,MAAOA,IACPwT,KAAM9B,IACN+B,UAAW9B,IACX+B,UAAW9B,IACX+B,UAAWhC,IACXiC,UAAWhC,IACXiC,SAAUhC,IACViC,YAAahC,IACbiC,YAAahC,IACbiC,aAAc/C,IACdgD,gBAAiB9C,IACjB+C,eAAgB7C,IAChB8C,aAAc1C,IACd2C,UAAWpC,MAGfjsG,EAAQ,WACR,OAASuuD,KAAMw8C,IAEfsB,EAAS,WACT,OAASzT,QAAUrqC,KAAMu8C,KAEzBwB,EAAY,SAAUx0I,GAItB,MAHgB,UAAZA,IACAA,OAGAmzI,aAAcA,IACdqD,cAAgBrS,gBAAkB/gI,SAAS,IAC3C0X,WACI8sD,MACI9uE,OAAQ,GACR4pC,QAAUxjC,IAAK,MAGvBo1I,eAAgBA,EAAet0I,GAC/BkoC,MAAOA,IACPqsG,OAAQA,MAGhBz8I,MAAM0C,WAAW1C,MAAMqpB,SAAWs1H,eAAgBjC,QAEtC,kBAAVn+I,SAAwBA,OAAOgiC,IAAMhiC,OAAS,SAAUiiC,EAAIC,EAAIC,IACrEA,GAAMD,OAEV,SAAUniC,EAAGC,QACVA,OAAO,6BAA8B,sBAAuBD,IAC9D,WAEE,QAASsgJ,GAAUvxH,GAMf,QAASwxH,GAASh4I,EAAKi4I,GACnBtzH,EAAI3kB,EAAKk4I,EAAWD,EAAS,oBAEjC,QAASC,GAAWD,EAAS33G,GACzB,MAAO63G,GAAK5vH,KAAK,WAAa0vH,GAAS/+I,IAAIonC,GAE/C,QAAS3b,GAAIsjB,EAAMppC,GAIf,IAJJ,GACQuhD,GAAQg4F,EACR1uI,EAAQu+B,EAAK/vC,MAAM,KACnB8H,EAAM0J,EAAMqJ,QACTrJ,EAAM7Q,OAAS,GAClBunD,EAAQA,EAAMpgD,GAAOogD,EAAMpgD,OAC3BA,EAAM0J,EAAMqJ,OAEhBqtC,GAAMpgD,GAAOnB,EApBrB,GAIQu5I,GACAD,CAJJ,QAAK3xH,GAASiH,EACHA,GAEP2qH,GAAUlhB,MAAO/9H,MAAMqpB,QAAQs1H,kBAC/BK,EAAOxgJ,EAAE,m0CAAw+CogC,SAASv5B,SAASsa,MAiBtgD,WACGk/H,EAAS,qCAAsC,8BAC/CA,EAAS,kCAAmC,qBAC5CA,EAAS,gCAAiC,qBAC1CA,EAAS,0CAA2C,qBACpDA,EAAS,0CAA2C,qBACpDA,EAAS,2CAA4C,0BACrDA,EAAS,6CAA8C,sBACvDA,EAAS,sCAAuC,qBAChDA,EAAS,iCAAkC,qBAC3CA,EAAS,6BAA8B,cACvCA,EAAS,0CAA2C,kBACpDA,EAAS,2CAA4C,kBACrDA,EAAS,4BAA6B,qBACtCA,EAAS,yCAA0C,qBACnDA,EAAS,0CAA2C,QACpDA,EAAS,4CAA6C,QACtDA,EAAS,8CAA+C,UACxDA,EAAS,2CAA4C,UACrDA,EAAS,6CAA8C,qBACvDA,EAAS,8CAA+C,qBACxDA,EAAS,uCAAwC,+BACjDA,EAAS,sDAAuD,qBAChEA,EAAS,yCAA0C,qBACnDA,EAAS,yCAA0C,cACnDA,EAAS,oCAAqC,qBAC9CA,EAAS,6CAA8C,0BACvDA,EAAS,+CAAgD,sBACzDA,EAAS,wCAAyC,qBAClDA,EAAS,iDAAkD,qBAC3DA,EAAS,kDAAmD,QAC5DA,EAAS,oDAAqD,QAC9DA,EAAS,sDAAuD,UAChEA,EAAS,mDAAoD,UAC7DA,EAAS,4CAA6C,qBACtDA,EAAS,oBAAqB,qBAC9BrzH,EAAI,sCAAuCuzH,EAAW,qBAAsB,YAC5EF,EAAS,mCAAoC,UAC7CA,EAAS,sCAAuC,mBAChDA,EAAS,qDAAsD,qBAC/DA,EAAS,uDAAwD,mBACjEA,EAAS,2DAA4D,mBACrEA,EAAS,6DAA8D,qBACvEA,EAAS,+CAAgD,qBACzDA,EAAS,6CAA8C,qBACvDA,EAAS,qDAAsD,qBAC/DA,EAAS,mDAAoD,qBAC7DA,EAAS,kCAAmC,qBAC5CA,EAAS,0CAA2C,qBACpDA,EAAS,2CAA4C,qBACrDA,EAAS,0DAA2D,mBACpEA,EAAS,4DAA6D,qBACtEA,EAAS,oDAAqD,wBAEjE,WACG,QAASlgD,GAAKmgD,GACV,MAAOC,GAAWD,EAAS,YAAc,IAAMC,EAAWD,EAAS,cAF1E,GAIOI,GAAcvgD,EAAK,cACnBwgD,EAAYxgD,EAAK,oBACjBygD,EAAYzgD,EAAK,mBACrBnzE,GAAI,iCAAkC4zH,GACtC5zH,EAAI,sCAAuC0zH,GAC3C1zH,EAAI,gCAAiC0zH,GACrC1zH,EAAI,2BAA4B0zH,GAChC1zH,EAAI,mCAAoC4zH,GACxC5zH,EAAI,wCAAyC0zH,GAC7C1zH,EAAI,mBAAoB2zH,MAE3B,WACG,QAASE,GAAUC,GACf,MAAOA,GAAO16I,cAAcwM,WAAW,GAAK,IAAIA,WAAW,GAE/D,QAASmuI,GAAUvoI,GACf,MAAOqoI,GAAUroI,EAAK5W,MAAM,mBAAmB,IALtD,GAOOqjI,GAASjlI,EAAE,sBAAsBonD,UACjC45F,EAAe/b,EAAOziF,OAAO,SAAUsZ,EAAK/zD,GAC5C,GAAIwwE,GAAMwoE,EAAUh5I,EAAGR,UAEvB,OADAu0D,GAAIyc,GAAOv4E,EAAE+H,GAAIxG,IAAI,mBACdu6D,MAEX9uC,GAAI,qBAAsBg0H,MAE9BR,EAAKhvH,SACLsE,EAAQ2qH,EACDA,GA7GX,GAAI3qH,EA+GJt0B,OAAMqpB,QAAQu1H,UAAYA,GACV,kBAAVrgJ,SAAwBA,OAAOgiC,IAAMhiC,OAAS,SAAUiiC,EAAIC,EAAIC,IACrEA,GAAMD,OAEV,SAAUniC,EAAGC,QACVA,OAAO,yBAA0B,mCAAoCD,IACvE,WAo5EE,MAn5EC,UAAUE,GA04EP,QAASihJ,GAAKC,EAAMC,GAChB,MAAOnhJ,GAAEsc,IAAI4kI,EAAM,SAAUllG,EAAMvgC,GAC/B,QACQugC,EACAmlG,EAAK1lI,OA94ExB,GACOja,GAAQvB,OAAOuB,MAAOmpB,EAAKnpB,EAAMqpB,QAAQF,GAAIzmB,EAAa1C,EAAM0C,WAChE22H,EAAQ,OAAQ2hB,EAAO,6BAA8BE,EAAS,QAAUF,EAAM5hB,EAAQ,OACtFulB,EAAiB3+I,EAAMqpB,QAAQs1H,gBAAiBvZ,WAAW,IAC3Dwa,GAAmBp7G,OAASwkG,QAAUrqC,KAAMu8C,KAC5C2E,GACAC,eACIjX,OAAS78F,QAAS,IAClB84D,QAAU/jG,MAAO,IAErBmhD,UACIn5B,QACIg3H,SACIh/I,MAAO,EACPC,OAAQ,KAIpBg/I,YACIl7C,QACI/jG,MAAO,EACP4lH,SAAU,QAGlBs5B,oBACIn7C,QAAU/jG,MAAO,GACjBw7B,WACIwjH,SACIh/I,MAAO,EACPC,OAAQ,IAGhBkhD,UACIg+F,OACI,OACA,aAKZlvH,EAAS7H,EAAG6H,OAAQmvH,EAAgBh3H,EAAGg3H,cAAgB,SAAUC,EAAWl4I,GAArB,GAM/C85C,GALAl7C,IACJA,GAAOi3H,MAAQr7H,KAAei8I,EAAgBz2I,EAAQ61H,OACtDj3H,EAAOu5I,MAAQ39I,KAAek9I,EAAgB13I,EAAQm4I,OACtDv5I,EAAOw5I,QAAU59I,KAAem9I,EAAkB33I,EAAQo4I,SAC1Dx5I,EAAOy5I,QAAU79I,KAAewF,EAAQq4I,SACpCv+F,EAAWl7C,EAAOi3H,MAAMye,eAC5Bx6F,EAASw8F,aAAe97I,KAAes/C,EAASyqD,MAChDzqD,EAASq8F,aAAe37I,KAAes/C,EAASm7F,MAChDn7F,EAASs8F,gBAAkB57I,KAAes/C,EAASq7F,SACnDr7F,EAASg8F,UAAYt7I,KAAes/C,EAAS87F,WAC7C97F,EAASi8F,UAAYv7I,KAAes/C,EAAS+7F,WAC7C/sH,EAAOovH,GAAat5I,EAE5Bq5I,GAAc,SACVpiB,OACI3tF,OAAS2rC,MAAOq9C,GAChBqjB,QACIzT,QAAUjtD,MAAOq9C,GACjBonB,eACIxX,QAAUjtD,MAAO,WACjB4gE,SAAW5gE,MAAO,aAG1BygE,gBACIxT,QAAUjtD,MAAOq9C,GACjBqnB,WAAa1kE,MAAOq9C,GACpBiR,OACI/B,MACIxhC,WAAY,UACZq9B,QAAUpoD,MAAO,YAErBv+B,OAASu+B,MAAOq9C,GAChB3sB,MAAQ1wB,MAAO,YAEnB0hE,KAAO3Z,SAAWzrC,SAAU,eAC5BqlD,OAAS5Z,SAAWzrC,SAAU,eAC9BoU,MAAQkwC,SAAW71C,WAAY,YAC/B45C,SAAW/D,SAAW71C,WAAY,YAClCs3C,aAAezB,SAAW71C,WAAY,YACtC23C,WAAahyC,MAAQ1wB,MAAO,YAC5B6hE,qBAAuBnxC,MAAQ1wB,MAAO,YACtCwhE,aACIR,UAAW,OACXtwC,MAAQ1wB,MAAOq9C,GACf+K,QACI2Y,YAAa,IACb9wG,QAAS,GAEbk3F,WACIiB,QACIpoD,MAAOq9C,EACPptF,QAAS,MAIrB6xG,MAAQpxC,MAAQ1wB,MAAOq9C,KAE3BunB,WAAa75C,WAAY,WACzB04C,cACI,UACA,UACA,UACA,UACA,UACA,WAEJnE,cACI5uC,MAAQ1wB,MAAO,WACfitD,QAAUjtD,MAAOq9C,GACjBiT,gBAAkBtwD,MAAO,WACzBqwD,gBAAkBrwD,MAAO,WACzB3rC,OAAS2rC,MAAOq9C,GAChBwnB,WAAa7kE,MAAO,WACpBsuD,OACI/B,MACIxhC,WAAY,UACZq9B,QAAUpoD,MAAO,YAErBv+B,OAASu+B,MAAOq9C,GAChB3sB,MAAQ1wB,MAAO,cAI3BskE,OACIx/E,SAAWkb,MAAO,WAClBv3C,OACIq8G,sBAAuB,UACvB7X,QAAUjtD,MAAOq9C,GACjB+P,YAAcptD,MAAOq9C,GACrBiQ,YAActtD,MAAOq9C,GACrB3sB,MAAQ1wB,MAAOq9C,KAGvBknB,SACIR,eACIj7C,MAAQ9oB,MAAO,WACf+kE,mBACIj8C,MAAQ9oB,MAAOq9C,GACft0B,QAAU/oB,MAAO,WACjB8sD,OACIhkC,MAAQ9oB,MAAO,WACf+oB,QAAU/oB,MAAO,aAGzB9f,SAAW8f,MAAOq9C,IAEtBl3E,UACIn5B,QACIg3H,SACIl7C,MAAQ9oB,MAAO,WACf+oB,QAAU/oB,MAAOq9C,GACjByP,OACIhkC,MAAQ9oB,MAAOq9C,GACft0B,QAAU/oB,MAAOq9C,MAI7B7zF,QACIw7G,OACIj8C,QAAU/oB,MAAOq9C,GACjBv0B,MAAQ9oB,MAAOq9C,MAI3B4mB,YAAcl7C,QAAU/oB,MAAOq9C,IAC/B6mB,oBACIn7C,QAAU/oB,MAAOq9C,GACjBn9D,SAAW8f,MAAOq9C,GAClB78F,WACIwjH,SACIl7C,MAAQ9oB,MAAO,WACf+oB,QAAU/oB,MAAO,eAKjCwkE,SACIS,SAEQ,UACA,YAGA,UACA,YAGA,UACA,YAGA,UACA,YAGA,UACA,YAGA,UACA,eAKhBb,EAAc,YACVpiB,OACI3tF,OAAS2rC,MAAO,WAChB0gE,QACIzT,QAAUjtD,MAAO,WACjBykE,eACIxX,QAAUjtD,MAAO,WACjB4gE,SAAW5gE,MAAO,aAG1BygE,gBACIxT,QACIjtD,MAAOs9C,EACPvyB,WAAYsyB,EACZptF,QAAS,IAEby0G,WAAa1kE,MAAO,WACpBwhE,aACIR,UAAW,UACXtwC,MAAQ1wB,MAAO,YAEnB0iE,WAAahyC,MAAQ1wB,MAAO,YAC5B6hE,qBAAuBnxC,MAAQ1wB,MAAO,YACtCsuD,OACI/B,MACIxhC,WAAY,cACZq9B,QAAUpoD,MAAO,YAErBv+B,OAASu+B,MAAO,WAChB0wB,MAAQ1wB,MAAO,aAGvByjE,cACI,UACA,UACA,UACA,UACA,UACA,WAEJnE,cACI5uC,MAAQ1wB,MAAO,WACfitD,QAAUjtD,MAAO,WACjBswD,gBAAkBtwD,MAAO,WACzBqwD,gBAAkBrwD,MAAO,WACzB3rC,OAAS2rC,MAAO,WAChB6kE,WAAa7kE,MAAO,WACpBsuD,OACI/B,MACIxhC,WAAY,cACZq9B,QAAUpoD,MAAO,YAErBv+B,OAASu+B,MAAO,WAChB0wB,MAAQ1wB,MAAO,cAI3BskE,OACIx/E,SAAWkb,MAAO,WAClBv3C,OACIq8G,sBAAuB,UACvB7X,QAAUjtD,MAAO,WACjBotD,YAAcptD,MAAO,WACrBstD,YAActtD,MAAO,WACrB0wB,MAAQ1wB,MAAO,aAGvBukE,SACIR,eACIj7C,MAAQ9oB,MAAO,WACf+kE,mBACIj8C,MAAQ9oB,MAAO,WACf+oB,QAAU/oB,MAAOq9C,GACjByP,OACIhkC,MAAQ9oB,MAAOq9C,GACft0B,QAAU/oB,MAAO,aAGzB9f,SAAW8f,MAAO,YAEtB75B,UACIn5B,QACIg3H,SACIl7C,MAAQ9oB,MAAOq9C,GACft0B,QAAU/oB,MAAO,WACjB8sD,OACIhkC,MAAQ9oB,MAAO,WACf+oB,QAAU/oB,MAAO,cAI7Bx2C,QACIw7G,OACIj8C,QAAU/oB,MAAO,WACjB8oB,MAAQ9oB,MAAO,cAI3BikE,YAAcl7C,QAAU/oB,MAAO,YAC/BkkE,oBACIn7C,QAAU/oB,MAAO,WACjB9f,SAAW8f,MAAO,WAClBx/C,WACIwjH,SACIl7C,MAAQ9oB,MAAO,WACf+oB,QAAU/oB,MAAO,eAKjCwkE,SACIS,SAEQ,UACA,YAGA,UACA,YAGA,UACA,YAGA,UACA,YAGA,UACA,YAGA,UACA,eAKhBb,EAAc,gBACVpiB,OACI3tF,OAAS2rC,MAAO,WAChB0gE,QACIzT,QAAUjtD,MAAO,WACjBykE,eACIxX,QAAUjtD,MAAO,WACjB4gE,SAAW5gE,MAAO,aAG1BygE,gBACIxT,QAAUjtD,MAAO,WACjB0kE,WAAa1kE,MAAO,WACpBsuD,OACI/B,MACIxhC,WAAY,cACZq9B,QAAUpoD,MAAO,YAErBv+B,OAASu+B,MAAO,WAChB0wB,MAAQ1wB,MAAO,YAEnB0hE,KAAO3Z,SAAWzrC,SAAU,eAC5BqlD,OAAS5Z,SAAWzrC,SAAU,eAC9BoU,MAAQkwC,SAAW71C,WAAY,YAC/B45C,SAAW/D,SAAW71C,WAAY,YAClCs3C,aAAezB,SAAW71C,WAAY,YACtCq2C,MAAQnxG,QAAS,IACjByyG,WAAahyC,MAAQ1wB,MAAO,YAC5B6hE,qBAAuBnxC,MAAQ1wB,MAAO,YACtCwhE,aACIR,UAAW,UACXtwC,MAAQ1wB,MAAO,WACfooD,QACI2Y,YAAa,IACb9wG,QAAS,GAEbk3F,WACIiB,QACIpoD,MAAO,UACP/vC,QAAS,KAIrB6xG,MAAQpxC,MAAQ1wB,MAAO,aAE3B4kE,WAAa75C,WAAY,WACzB04C,cACI,UACA,UACA,UACA,UACA,UACA,WAEJnE,cACI5uC,MAAQ1wB,MAAO,WACfitD,QAAUjtD,MAAO,WACjBswD,gBAAkBtwD,MAAO,WACzBqwD,gBAAkBrwD,MAAO,WACzB3rC,OAAS2rC,MAAO,WAChB6kE,WAAa7kE,MAAO,WACpBsuD,OACI/B,MACIxhC,WAAY,cACZq9B,QAAUpoD,MAAO,YAErBv+B,OAASu+B,MAAO,WAChB0wB,MAAQ1wB,MAAO,cAI3BskE,OACIx/E,SAAWkb,MAAO,WAClBv3C,OACIq8G,sBAAuB,UACvB7X,QAAUjtD,MAAO,WACjBotD,YAAcptD,MAAO,WACrBstD,YAActtD,MAAO,WACrB0wB,MAAQ1wB,MAAO,aAGvBukE,SACIR,eACIj7C,MAAQ9oB,MAAO,WACf+kE,mBACIj8C,MAAQ9oB,MAAOq9C,GACft0B,QAAU/oB,MAAO,WACjB8sD,OACIhkC,MAAQ9oB,MAAO,WACf+oB,QAAU/oB,MAAOq9C,KAGzBn9D,SAAW8f,MAAOq9C,IAEtBl3E,UACIn5B,QACIg3H,SACIl7C,MAAQ9oB,MAAO,WACf+oB,QAAU/oB,MAAOq9C,GACjByP,OACIhkC,MAAQ9oB,MAAOq9C,GACft0B,QAAU/oB,MAAOq9C,MAI7B7zF,QACIw7G,OACIj8C,QAAU/oB,MAAOq9C,GACjBv0B,MAAQ9oB,MAAOq9C,MAI3B4mB,YAAcl7C,QAAU/oB,MAAOq9C,IAC/B6mB,oBACIn7C,QAAU/oB,MAAOq9C,GACjBn9D,SAAW8f,MAAOq9C,GAClB78F,WACIwjH,SACIl7C,MAAQ9oB,MAAO,WACf+oB,QAAU/oB,MAAOq9C,OAKjCmnB,SACIS,SAEQ,UACA,YAGA,UACA,YAGA,UACA,YAGA,UACA,YAGA,UACA,YAGA,UACA,eAKhBb,EAAc,WACVpiB,OACI3tF,OAAS2rC,MAAO,WAChB0gE,QACIzT,QAAUjtD,MAAO,WACjBykE,eACIxX,QAAUjtD,MAAO,WACjB4gE,SAAW5gE,MAAO,aAG1BygE,gBACIxT,QACIjtD,MAAOs9C,EACPvyB,WAAYsyB,EACZptF,QAAS,IAEby0G,WAAa1kE,MAAO,WACpBwhE,aACIR,UAAW,UACXtwC,MAAQ1wB,MAAO,YAEnB0iE,WAAahyC,MAAQ1wB,MAAO,YAC5B6hE,qBAAuBnxC,MAAQ1wB,MAAO,YACtCsuD,OACI/B,MACIxhC,WAAY,cACZq9B,QAAUpoD,MAAO,YAErBv+B,OAASu+B,MAAO,WAChB0wB,MAAQ1wB,MAAO,aAGvByjE,cACI,UACA,UACA,UACA,UACA,UACA,WAEJnE,cACI5uC,MAAQ1wB,MAAO,WACfitD,QAAUjtD,MAAO,WACjBqwD,gBAAkBrwD,MAAO,WACzBswD,gBAAkBtwD,MAAO,WACzB3rC,OAAS2rC,MAAO,WAChB6kE,WAAa7kE,MAAO,WACpBsuD,OACI/B,MACIxhC,WAAY,cACZq9B,QAAUpoD,MAAO,YAErBv+B,OAASu+B,MAAO,WAChB0wB,MAAQ1wB,MAAO,cAI3BskE,OACIx/E,SAAWkb,MAAO,WAClBv3C,OACIq8G,sBAAuB,UACvB7X,QAAUjtD,MAAO,WACjBotD,YAAcptD,MAAO,WACrBstD,YAActtD,MAAO,WACrB0wB,MAAQ1wB,MAAO,aAGvBukE,SACIR,eACIj7C,MAAQ9oB,MAAO,WACf+kE,mBACIj8C,MAAQ9oB,MAAO,WACf+oB,QAAU/oB,MAAOq9C,GACjByP,OACIhkC,MAAQ9oB,MAAOq9C,GACft0B,QAAU/oB,MAAO,aAGzB9f,SAAW8f,MAAO,YAEtB75B,UACIn5B,QACIg3H,SACIl7C,MAAQ9oB,MAAOq9C,GACft0B,QAAU/oB,MAAO,WACjB8sD,OACIhkC,MAAQ9oB,MAAO,WACf+oB,QAAU/oB,MAAO,cAI7Bx2C,QACIw7G,OACIj8C,QAAU/oB,MAAO,WACjB8oB,MAAQ9oB,MAAO,cAI3BikE,YAAcl7C,QAAU/oB,MAAO,YAC/BkkE,oBACIn7C,QAAU/oB,MAAO,WACjB9f,SAAW8f,MAAO,WAClBx/C,WACIwjH,SACIl7C,MAAQ9oB,MAAOq9C,GACft0B,QAAU/oB,MAAO,eAKjCwkE,SACIS,SAEQ,UACA,YAGA,UACA,YAGA,UACA,YAGA,UACA,YAGA,UACA,YAGA,UACA,eAKhBb,EAAc,UACVpiB,OACI3tF,OAAS2rC,MAAO,WAChB0gE,QACIzT,QAAUjtD,MAAO,WACjBykE,eACIxX,QAAUjtD,MAAO,WACjB4gE,SAAW5gE,MAAO,aAG1BygE,gBACIxT,QACIjtD,MAAO,UACP+qB,WAAY,UACZ96D,QAAS,IAEby0G,WAAa1kE,MAAO,WACpBsuD,OACI/B,MACIxhC,WAAY,cACZq9B,QAAUpoD,MAAO,YAErBv+B,OAASu+B,MAAO,WAChB0wB,MAAQ1wB,MAAO,YAEnB0wB,MAAQkwC,SAAW71C,WAAY,YAC/B45C,SAAW/D,SAAW71C,WAAY,YAClCs3C,aAAezB,SAAW71C,WAAY,YACtC22C,KAAOwD,YAAcllE,MAAO,YAC5B2hE,OAASuD,YAAcllE,MAAO,YAC9B0iE,WAAahyC,MAAQ1wB,MAAO,YAC5B6hE,qBAAuBnxC,MAAQ1wB,MAAO,YACtCwhE,aAAeR,UAAW,YAE9B4D,WAAa75C,WAAY,WACzB04C,cACI,UACA,UACA,UACA,UACA,UACA,WAEJnE,cACI5uC,MAAQ1wB,MAAO,WACfitD,QAAUjtD,MAAO,WACjBswD,gBAAkBtwD,MAAO,WACzBqwD,gBAAkBrwD,MAAO,WACzB3rC,OAAS2rC,MAAO,WAChB6kE,WAAa7kE,MAAO,WACpBsuD,OACI/B,MACIxhC,WAAY,cACZq9B,QAAUpoD,MAAO,YAErBv+B,OAASu+B,MAAO,WAChB0wB,MAAQ1wB,MAAO,cAI3BskE,OACIx/E,SAAWkb,MAAO,WAClBv3C,OACIq8G,sBAAuB,UACvB7X,QAAUjtD,MAAO,WACjBotD,YAAcptD,MAAO,WACrBstD,YAActtD,MAAO,WACrB0wB,MAAQ1wB,MAAO,aAGvBukE,SACIR,eACIj7C,MAAQ9oB,MAAO,WACf+kE,mBACIj8C,MAAQ9oB,MAAO,WACf+oB,QAAU/oB,MAAOq9C,GACjByP,OACIhkC,MAAQ9oB,MAAOq9C,GACft0B,QAAU/oB,MAAO,aAGzB9f,SAAW8f,MAAO,YAEtB75B,UACIn5B,QACIg3H,SACIl7C,MAAQ9oB,MAAOq9C,GACft0B,QAAU/oB,MAAO,WACjB8sD,OACIhkC,MAAQ9oB,MAAO,WACf+oB,QAAU/oB,MAAO,cAI7Bx2C,QACIw7G,OACIj8C,QAAU/oB,MAAO,WACjB8oB,MAAQ9oB,MAAO,cAI3BikE,YAAcl7C,QAAU/oB,MAAO,YAC/BkkE,oBACIn7C,QAAU/oB,MAAO,WACjB9f,SAAW8f,MAAO,WAClBx/C,WACIwjH,SACIl7C,MAAQ9oB,MAAOq9C,GACft0B,QAAU/oB,MAAO,eAKjCwkE,SACIS,SAEQ,UACA,YAGA,UACA,YAGA,UACA,YAGA,UACA,YAGA,UACA,YAGA,UACA,eAKhBb,EAAc,SACVpiB,OACI3tF,OAAS2rC,MAAO,WAChB0gE,QACIzT,QAAUjtD,MAAO,WACjBykE,eACIxX,QAAUjtD,MAAO,WACjB4gE,SAAW5gE,MAAO,aAG1BygE,gBACIxT,QAAUjtD,MAAOs9C,GACjBonB,WAAa1kE,MAAO,WACpBsuD,OACI/B,MACIxhC,WAAY,cACZq9B,QAAUpoD,MAAO,YAErBv+B,OAASu+B,MAAO,WAChB0wB,MAAQ1wB,MAAO,YAEnBwhE,aACIR,UAAW,UACXtwC,MAAQ1wB,MAAO,YAEnB0iE,WAAahyC,MAAQ1wB,MAAO,YAC5B6hE,qBAAuBnxC,MAAQ1wB,MAAO,YACtC+nD,SAAWzrC,SAAU,QACrB8rC,QAAU2Y,YAAa,IAE3B0C,cACI,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,WAEJnE,cACI5uC,MAAQ1wB,MAAO,WACfitD,QAAUjtD,MAAO,WACjBqwD,gBAAkBrwD,MAAO,WACzBswD,gBAAkBtwD,MAAO,WACzB3rC,OAAS2rC,MAAO,WAChB6kE,WAAa7kE,MAAO,WACpBsuD,OACI/B,MACIxhC,WAAY,cACZq9B,QAAUpoD,MAAO,YAErBv+B,OAASu+B,MAAO,WAChB0wB,MAAQ1wB,MAAO,cAI3BskE,OACIx/E,SAAWkb,MAAO,WAClBv3C,OACIq8G,sBAAuB,UACvB7X,QAAUjtD,MAAO,QACjBotD,YAAcptD,MAAO,QACrBstD,YAActtD,MAAO,QACrB0wB,MAAQ1wB,MAAO,UAGvBukE,SACIR,eACIj7C,MAAQ9oB,MAAO,WACf+kE,mBACIj8C,MAAQ9oB,MAAOs9C,GACfv0B,QAAU/oB,MAAOq9C,GACjByP,OACIhkC,MAAQ9oB,MAAOq9C,GACft0B,QAAU/oB,MAAOs9C,KAGzBp9D,SAAW8f,MAAO,SAEtB75B,UACIn5B,QACIg3H,SACIl7C,MAAQ9oB,MAAOq9C,GACft0B,QAAU/oB,MAAO,WACjB8sD,OACIhkC,MAAQ9oB,MAAO,WACf+oB,QAAU/oB,MAAO,cAI7Bx2C,QACIw7G,OACIj8C,QAAU/oB,MAAO,WACjB8oB,MAAQ9oB,MAAO,cAI3BikE,YAAcl7C,QAAU/oB,MAAO,YAC/BkkE,oBACIn7C,QAAU/oB,MAAO,WACjB9f,SAAW8f,MAAO,QAClBx/C,WACIwjH,SACIl7C,MAAQ9oB,MAAOq9C,GACft0B,QAAU/oB,MAAO,eAKjCwkE,SACIS,SAEQ,UACA,YAGA,UACA,YAGA,UACA,YAGA,UACA,YAGA,UACA,YAGA,UACA,YAGA,UACA,YAGA,UACA,YAGA,UACA,YAGA,UACA,eAKhBb,EAAc,cACVpiB,OACI3tF,OAAS2rC,MAAO,WAChB0gE,QACIzT,QAAUjtD,MAAO,WACjBykE,eACIxX,QAAUjtD,MAAO,WACjB4gE,SAAW5gE,MAAO,aAG1BygE,gBACIrY,QAAU2Y,YAAa,GACvB9T,QAAUjtD,MAAO,WACjB0kE,WAAa1kE,MAAO,WACpBsuD,OACI/B,MACIxhC,WAAY,cACZq9B,QAAUpoD,MAAO,YAErBv+B,OAASu+B,MAAO,WAChB0wB,MAAQ1wB,MAAO,YAEnB0wB,MAAQkwC,SAAW71C,WAAY,YAC/Bw2C,QAAUtxG,QAAS,IACnB00G,SAAW/D,SAAW71C,WAAY,YAClCs3C,aAAezB,SAAW71C,WAAY,YACtCy2C,aACIR,UAAW,UACXtwC,MAAQ1wB,MAAO,YAEnB0iE,WAAahyC,MAAQ1wB,MAAO,YAC5B6hE,qBAAuBnxC,MAAQ1wB,MAAO,YACtC+nD,SAAWzrC,SAAU,SAEzBsoD,WAAa75C,WAAY,WACzB04C,cACI,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,WAEJnE,cACI5uC,MAAQ1wB,MAAO,WACfitD,QAAUjtD,MAAO,WACjBqwD,gBAAkBrwD,MAAO,WACzBswD,gBAAkBtwD,MAAO,WACzB3rC,OAAS2rC,MAAO,WAChB6kE,WAAa7kE,MAAO,WACpBsuD,OACI/B,MACIxhC,WAAY,cACZq9B,QAAUpoD,MAAO,YAErBv+B,OAASu+B,MAAO,WAChB0wB,MAAQ1wB,MAAO,cAI3BskE,OACIx/E,SAAWkb,MAAO,WAClBv3C,OACIq8G,sBAAuB,UACvB7X,QAAUjtD,MAAO,WACjBotD,YAAcptD,MAAO,WACrBstD,YAActtD,MAAO,WACrB0wB,MAAQ1wB,MAAO,aAGvBukE,SACIR,eACIj7C,MAAQ9oB,MAAO,WACf+kE,mBACIj8C,MAAQ9oB,MAAOq9C,GACft0B,QAAU/oB,MAAO,WACjB8sD,OACIhkC,MAAQ9oB,MAAO,WACf+oB,QAAU/oB,MAAOq9C,KAGzBn9D,SAAW8f,MAAOq9C,IAEtBl3E,UACIn5B,QACIg3H,SACIl7C,MAAQ9oB,MAAO,WACf+oB,QAAU/oB,MAAO,WACjB8sD,OACIhkC,MAAQ9oB,MAAO,WACf+oB,QAAU/oB,MAAO,cAI7Bx2C,QACIw7G,OACIj8C,QAAU/oB,MAAOq9C,GACjBv0B,MAAQ9oB,MAAOq9C,MAI3B4mB,YAAcl7C,QAAU/oB,MAAO,YAC/BkkE,oBACIn7C,QAAU/oB,MAAOq9C,GACjBn9D,SAAW8f,MAAOq9C,GAClB78F,WACIwjH,SACIl7C,MAAQ9oB,MAAO,WACf+oB,QAAU/oB,MAAOq9C,OAKjCmnB,SACIS,SAEQ,UACA,YAGA,UACA,YAGA,UACA,YAGA,UACA,YAGA,UACA,YAGA,UACA,YAGA,UACA,YAGA,UACA,YAGA,UACA,YAGA,UACA,eAKhBb,EAAc,aACVpiB,OACI3tF,OAAS2rC,MAAO,WAChB0gE,QACIzT,QAAUjtD,MAAO,WACjBykE,eACIxX,QAAUjtD,MAAO,WACjB4gE,SAAW5gE,MAAO,aAG1BygE,gBACIxT,QAAUjtD,MAAO,WACjB0kE,WAAa1kE,MAAO,WACpBsuD,OACI/B,MACIxhC,WAAY,cACZq9B,QAAUpoD,MAAO,YAErBv+B,OAASu+B,MAAO,WAChB0wB,MAAQ1wB,MAAO,YAEnB0hE,KAAO3Z,SAAWzrC,SAAU,eAC5BqlD,OAAS5Z,SAAWzrC,SAAU,eAC9BoU,MAAQkwC,SAAW71C,WAAY,YAC/Bw2C,QAAUtxG,QAAS,IACnB00G,SAAW/D,SAAW71C,WAAY,YAClCs3C,aAAezB,SAAW71C,WAAY,YACtCq2C,MAAQnxG,QAAS,IACjBuxG,aACIR,UAAW,UACXtwC,MAAQ1wB,MAAO,WACfooD,QACI2Y,YAAa,IACb9wG,QAAS,GAEbk3F,WACIiB,QACIpoD,MAAOq9C,EACPptF,QAAS,MAIrByyG,WAAahyC,MAAQ1wB,MAAO,YAC5B6hE,qBAAuBnxC,MAAQ1wB,MAAO,YACtC8hE,MAAQpxC,MAAQ1wB,MAAO,aAE3B4kE,WAAa75C,WAAY,WACzB04C,cACI,UACA,UACA,UACA,UACA,UACA,WAEJnE,cACI5uC,MAAQ1wB,MAAO,WACfotD,YAAcptD,MAAO,WACrBstD,YAActtD,MAAO,WACrBitD,QAAUjtD,MAAO,WACjBswD,gBAAkBtwD,MAAO,WACzBqwD,gBAAkBrwD,MAAO,WACzB3rC,OAAS2rC,MAAO,WAChB6kE,WAAa7kE,MAAO,WACpBsuD,OACI/B,MACIxhC,WAAY,cACZq9B,QAAUpoD,MAAO,YAErBv+B,OAASu+B,MAAO,WAChB0wB,MAAQ1wB,MAAO,cAI3BskE,OACIx/E,SAAWkb,MAAO,WAClBv3C,OACIq8G,sBAAuB,UACvB7X,QAAUjtD,MAAOq9C,GACjB+P,YAAcptD,MAAO,WACrBstD,YAActtD,MAAO,WACrB0wB,MAAQ1wB,MAAO,aAGvBukE,SACIR,eACIj7C,MAAQ9oB,MAAO,WACf+kE,mBACIj8C,MAAQ9oB,MAAOq9C,GACft0B,QAAU/oB,MAAO,WACjB8sD,OACIhkC,MAAQ9oB,MAAO,WACf+oB,QAAU/oB,MAAOq9C,KAGzBn9D,SAAW8f,MAAOq9C,IAEtBl3E,UACIn5B,QACIg3H,SACIl7C,MAAQ9oB,MAAO,WACf+oB,QAAU/oB,MAAOq9C,GACjByP,OACIhkC,MAAQ9oB,MAAOq9C,GACft0B,QAAU/oB,MAAOq9C,MAI7B7zF,QACIw7G,OACIj8C,QAAU/oB,MAAOq9C,GACjBv0B,MAAQ9oB,MAAOq9C,MAI3B4mB,YAAcl7C,QAAU/oB,MAAOq9C,IAC/B6mB,oBACIn7C,QAAU/oB,MAAOq9C,GACjBn9D,SAAW8f,MAAOq9C,GAClB78F,WACIwjH,SACIl7C,MAAQ9oB,MAAO,WACf+oB,QAAU/oB,MAAOq9C,OAKjCmnB,SACIS,SAEQ,UACA,YAGA,UACA,YAGA,UACA,YAGA,UACA,YAGA,UACA,YAGA,UACA,eAKhBb,EAAc,WACVpiB,OACI3tF,OAAS2rC,MAAO,WAChB0gE,QACIzT,QAAUjtD,MAAO,WACjBykE,eACIxX,QAAUjtD,MAAO,WACjB4gE,SAAW5gE,MAAO,aAG1BygE,gBACIxT,QAAUjtD,MAAO,WACjB0kE,WAAa1kE,MAAO,WACpBsuD,OACI/B,MACIxhC,WAAY,cACZq9B,QAAUpoD,MAAO,YAErBv+B,OAASu+B,MAAO,WAChB0wB,MAAQ1wB,MAAO,YAEnB0hE,KAAO3Z,SAAWzrC,SAAU,eAC5BqlD,OAAS5Z,SAAWzrC,SAAU,eAC9BoU,MAAQkwC,SAAW71C,WAAY,YAC/Bw2C,QAAUtxG,QAAS,IACnB00G,SAAW/D,SAAW71C,WAAY,YAClCs3C,aAAezB,SAAW71C,WAAY,YACtCq2C,MAAQnxG,QAAS,IACjBuxG,aACIR,UAAW,UACXtwC,MAAQ1wB,MAAO,WACfooD,QACI2Y,YAAa,IACb9wG,QAAS,GAEbk3F,WACIiB,QACIpoD,MAAO,UACP/vC,QAAS,MAIrByyG,WAAahyC,MAAQ1wB,MAAO,YAC5B6hE,qBAAuBnxC,MAAQ1wB,MAAO;GACtC8hE,MAAQpxC,MAAQ1wB,MAAO,aAE3B4kE,WAAa75C,WAAY,WACzB04C,cACI,UACA,UACA,UACA,UACA,UACA,WAEJnE,cACI5uC,MAAQ1wB,MAAO,WACfotD,YAAcptD,MAAO,WACrBstD,YAActtD,MAAO,WACrBitD,QAAUjtD,MAAO,WACjBswD,gBAAkBtwD,MAAO,WACzBqwD,gBAAkBrwD,MAAO,WACzB3rC,OAAS2rC,MAAO,WAChB6kE,WAAa7kE,MAAO,WACpBsuD,OACI/B,MACIxhC,WAAY,cACZq9B,QAAUpoD,MAAO,YAErBv+B,OAASu+B,MAAO,WAChB0wB,MAAQ1wB,MAAO,cAI3BskE,OACIx/E,SAAWkb,MAAO,WAClBv3C,OACIq8G,sBAAuB,UACvB7X,QAAUjtD,MAAO,WACjBotD,YAAcptD,MAAO,WACrBstD,YAActtD,MAAO,WACrB0wB,MAAQ1wB,MAAO,aAGvBukE,SACIR,eACIj7C,MAAQ9oB,MAAO,WACf+kE,mBACIj8C,MAAQ9oB,MAAO,WACf+oB,QAAU/oB,MAAOq9C,GACjByP,OACIhkC,MAAQ9oB,MAAOq9C,GACft0B,QAAU/oB,MAAO,aAGzB9f,SAAW8f,MAAO,YAEtB75B,UACIn5B,QACIg3H,SACIl7C,MAAQ9oB,MAAOq9C,GACft0B,QAAU/oB,MAAO,WACjB8sD,OACIhkC,MAAQ9oB,MAAO,WACf+oB,QAAU/oB,MAAO,cAI7Bx2C,QACIw7G,OACIj8C,QAAU/oB,MAAO,WACjB8oB,MAAQ9oB,MAAO,cAI3BikE,YAAcl7C,QAAU/oB,MAAO,YAC/BkkE,oBACIn7C,QAAU/oB,MAAO,WACjB9f,SAAW8f,MAAO,WAClBx/C,WACIwjH,SACIl7C,MAAQ9oB,MAAOq9C,GACft0B,QAAU/oB,MAAO,eAKjCwkE,SACIS,SAEQ,UACA,YAGA,UACA,YAGA,UACA,YAGA,UACA,YAGA,UACA,YAGA,UACA,eAKhBb,EAAc,aACVpiB,OACI3tF,OAAS2rC,MAAO,WAChB0gE,QACIzT,QAAUjtD,MAAO,WACjBykE,eACIxX,QAAUjtD,MAAO,WACjB4gE,SAAW5gE,MAAO,aAG1BygE,gBACIxT,QAAUjtD,MAAO,WACjB+nD,SAAWzrC,SAAU,QACrBooD,WAAa1kE,MAAO,WACpBsuD,OACI/B,MACIxhC,WAAY,UACZq9B,QAAUpoD,MAAO,YAErBv+B,OAASu+B,MAAO,WAChB0wB,MAAQ1wB,MAAO,YAEnB0hE,KAAO3Z,SAAWzrC,SAAU,SAC5BqlD,OAAS5Z,SAAWzrC,SAAU,SAC9BoU,MAAQkwC,SAAW71C,WAAY,YAC/Bw2C,QAAUtxG,QAAS,IACnB00G,SAAW/D,SAAW71C,WAAY,YAClCs3C,aAAezB,SAAW71C,WAAY,YACtCq2C,MAAQnxG,QAAS,IACjBuxG,aACIR,UAAW,UACXtwC,MAAQ1wB,MAAO,WACfooD,QACI2Y,YAAa,IACb9wG,QAAS,GAEbk3F,WACIiB,QACIpoD,MAAO,UACP/vC,QAAS,MAIrByyG,WAAahyC,MAAQ1wB,MAAO,YAC5B6hE,qBAAuBnxC,MAAQ1wB,MAAO,YACtC8hE,MAAQpxC,MAAQ1wB,MAAO,aAE3B4kE,WAAa75C,WAAY,WACzB04C,cACI,UACA,UACA,UACA,UACA,UACA,WAEJnE,cACI5uC,MAAQ1wB,MAAO,WACfotD,YAAcptD,MAAO,WACrBstD,YAActtD,MAAO,WACrBitD,QAAUjtD,MAAO,WACjBswD,gBAAkBtwD,MAAO,WACzBqwD,gBAAkBrwD,MAAO,WACzB3rC,OAAS2rC,MAAO,WAChB6kE,WAAa7kE,MAAO,WACpBsuD,OACI/B,MACIxhC,WAAY,UACZq9B,QAAUpoD,MAAO,YAErBv+B,OAASu+B,MAAO,WAChB0wB,MAAQ1wB,MAAO,cAI3BskE,OACIx/E,SAAWkb,MAAO,WAClBv3C,OACIq8G,sBAAuB,UACvB7X,QAAUjtD,MAAO,WACjBotD,YAAcptD,MAAO,WACrBstD,YAActtD,MAAO,WACrB0wB,MAAQ1wB,MAAO,aAGvBukE,SACIR,eACIj7C,MAAQ9oB,MAAO,WACf+kE,mBACIj8C,MAAQ9oB,MAAO,WACf+oB,QAAU/oB,MAAOq9C,GACjByP,OACIhkC,MAAQ9oB,MAAOq9C,GACft0B,QAAU/oB,MAAO,aAGzB9f,SAAW8f,MAAO,YAEtB75B,UACIn5B,QACIg3H,SACIl7C,MAAQ9oB,MAAOq9C,GACft0B,QAAU/oB,MAAO,WACjB8sD,OACIhkC,MAAQ9oB,MAAO,WACf+oB,QAAU/oB,MAAO,cAI7Bx2C,QACIw7G,OACIj8C,QAAU/oB,MAAO,WACjB8oB,MAAQ9oB,MAAO,cAI3BikE,YAAcl7C,QAAU/oB,MAAO,YAC/BkkE,oBACIn7C,QAAU/oB,MAAO,WACjB9f,SAAW8f,MAAO,WAClBx/C,WACIwjH,SACIl7C,MAAQ9oB,MAAOq9C,GACft0B,QAAU/oB,MAAO,YAErB+oB,QAAU/oB,MAAO,cAI7BwkE,SACIS,SAEQ,UACA,YAGA,UACA,YAGA,UACA,YAGA,UACA,YAGA,UACA,YAGA,UACA,eAKhBb,EAAc,QACVpiB,OACI3tF,OAAS2rC,MAAO,WAChB0gE,QACIzT,QAAUjtD,MAAO,WACjBykE,eACIxX,QAAUjtD,MAAO,WACjB4gE,SAAW5gE,MAAO,aAG1BygE,gBACIxT,QAAUjtD,MAAO,WACjB0kE,WAAa1kE,MAAO,WACpBsuD,OACI/B,MACIxhC,WAAY,cACZq9B,QAAUpoD,MAAO,YAErBv+B,OAASu+B,MAAO,WAChB0wB,MAAQ1wB,MAAO,YAEnBwhE,aACIR,UAAW,UACXtwC,MAAQ1wB,MAAO,YAEnBohE,MAAQnxG,QAAS,IACjByyG,WAAahyC,MAAQ1wB,MAAO,YAC5B6hE,qBAAuBnxC,MAAQ1wB,MAAO,YACtC+nD,SAAWzrC,SAAU,QACrB8rC,QAAU2Y,YAAa,IAE3B0C,cACI,UACA,UACA,UACA,UACA,UACA,UACA,WAEJnE,cACI5uC,MAAQ1wB,MAAO,WACfitD,QAAUjtD,MAAO,WACjBqwD,gBAAkBrwD,MAAO,WACzBswD,gBAAkBtwD,MAAO,WACzB3rC,OAAS2rC,MAAO,WAChB6kE,WAAa7kE,MAAO,WACpBsuD,OACI/B,MACIxhC,WAAY,cACZq9B,QAAUpoD,MAAO,YAErBv+B,OAASu+B,MAAO,WAChB0wB,MAAQ1wB,MAAO,cAI3BskE,OACIx/E,SAAWkb,MAAO,WAClBv3C,OACIq8G,sBAAuB,UACvB7X,QAAUjtD,MAAO,WACjBotD,YAAcptD,MAAO,WACrBstD,YAActtD,MAAO,WACrB0wB,MAAQ1wB,MAAO,aAGvBukE,SACIR,eACIj7C,MAAQ9oB,MAAO,WACf+kE,mBACIj8C,MAAQ9oB,MAAO,WACf+oB,QAAU/oB,MAAOq9C,GACjByP,OACIhkC,MAAQ9oB,MAAOq9C,GACft0B,QAAU/oB,MAAO,aAGzB9f,SAAW8f,MAAO,YAEtB75B,UACIn5B,QACIg3H,SACIl7C,MAAQ9oB,MAAOq9C,GACft0B,QAAU/oB,MAAO,WACjB8sD,OACIhkC,MAAQ9oB,MAAO,WACf+oB,QAAU/oB,MAAO,cAI7Bx2C,QACIw7G,OACIj8C,QAAU/oB,MAAO,WACjB8oB,MAAQ9oB,MAAO,cAI3BikE,YAAcl7C,QAAU/oB,MAAO,YAC/BkkE,oBACIn7C,QAAU/oB,MAAO,WACjB9f,SAAW8f,MAAO,WAClBx/C,WACIwjH,SACIl7C,MAAQ9oB,MAAOq9C,GACft0B,QAAU/oB,MAAO,YAErB+oB,QAAU/oB,MAAO,cAI7BwkE,SACIS,SAEQ,UACA,YAGA,UACA,YAGA,UACA,YAGA,UACA,YAGA,UACA,YAGA,UACA,YAGA,UACA,eAKhBb,EAAc,YACVpiB,OACI3tF,OAAS2rC,MAAO,WAChB0gE,QACIzT,QAAUjtD,MAAO,WACjBykE,eACIxX,QAAUjtD,MAAO,WACjB4gE,SAAW5gE,MAAO,aAG1BygE,gBACIxT,QAAUjtD,MAAO,WACjB0kE,WAAa1kE,MAAO,WACpBsuD,OACI/B,MACIxhC,WAAY,cACZq9B,QAAUpoD,MAAO,YAErBv+B,OAASu+B,MAAO,WAChB0wB,MAAQ1wB,MAAO,YAEnBwhE,aACIR,UAAW,UACXtwC,MAAQ1wB,MAAO,YAEnBohE,MAAQnxG,QAAS,IACjByyG,WAAahyC,MAAQ1wB,MAAO,YAC5B6hE,qBAAuBnxC,MAAQ1wB,MAAO,YACtC+nD,SAAWzrC,SAAU,QACrB8rC,QAAU2Y,YAAa,IAE3B0C,cACI,UACA,UACA,UACA,UACA,UACA,WAEJnE,cACI5uC,MAAQ1wB,MAAO,WACfitD,QAAUjtD,MAAO,WACjBqwD,gBAAkBrwD,MAAO,WACzBswD,gBAAkBtwD,MAAO,WACzB3rC,OAAS2rC,MAAO,WAChB6kE,WAAa7kE,MAAO,WACpBsuD,OACI/B,MACIxhC,WAAY,cACZq9B,QAAUpoD,MAAO,YAErBv+B,OAASu+B,MAAO,WAChB0wB,MAAQ1wB,MAAO,cAI3BskE,OACIx/E,SAAWkb,MAAO,WAClBv3C,OACIq8G,sBAAuB,UACvB7X,QAAUjtD,MAAO,WACjBotD,YAAcptD,MAAO,WACrBstD,YAActtD,MAAO,WACrB0wB,MAAQ1wB,MAAO,aAGvBukE,SACIR,eACIj7C,MAAQ9oB,MAAO,WACf+kE,mBACIj8C,MAAQ9oB,MAAO,WACf+oB,QAAU/oB,MAAOq9C,GACjByP,OACIhkC,MAAQ9oB,MAAOq9C,GACft0B,QAAU/oB,MAAO,aAGzB9f,SAAW8f,MAAO,YAEtB75B,UACIn5B,QACIg3H,SACIl7C,MAAQ9oB,MAAOq9C,GACft0B,QAAU/oB,MAAO,WACjB8sD,OACIhkC,MAAQ9oB,MAAO,WACf+oB,QAAU/oB,MAAO,cAI7Bx2C,QACIw7G,OACIj8C,QAAU/oB,MAAO,WACjB8oB,MAAQ9oB,MAAO,cAI3BikE,YAAcl7C,QAAU/oB,MAAO,YAC/BkkE,oBACIn7C,QAAU/oB,MAAO,WACjB9f,SAAW8f,MAAO,WAClBx/C,WACIwjH,SACIl7C,MAAQ9oB,MAAOq9C,GACft0B,QAAU/oB,MAAO,YAErB+oB,QAAU/oB,MAAO,cAI7BwkE,SACIS,SAEQ,UACA,YAGA,UACA,YAGA,UACA,YAGA,UACA,YAGA,UACA,YAGA,UACA,eAKhBb,EAAc,iBACVpiB,OACI3tF,OAAS2rC,MAAO,QAChB0gE,QACIzT,QAAUjtD,MAAO,QACjBykE,eACIxX,QAAUjtD,MAAO,WACjB4gE,SAAW5gE,MAAO,aAG1BygE,gBACIxT,QAAUjtD,MAAO,QACjB0kE,WAAa1kE,MAAO,QACpBsuD,OACI/B,MACIxhC,WAAY,cACZq9B,QAAUpoD,MAAO,YAErBv+B,OAASu+B,MAAO,QAChB0wB,MAAQ1wB,MAAO,YAEnBwhE,aACIR,UAAW,UACXtwC,MAAQ1wB,MAAO,YAEnBohE,MAAQnxG,QAAS,IACjByyG,WAAahyC,MAAQ1wB,MAAO,YAC5B6hE,qBAAuBnxC,MAAQ1wB,MAAO,YACtC+nD,SAAWzrC,SAAU,QACrB8rC,QAAU2Y,YAAa,IAE3B6D,WAAa75C,WAAY,WACzB04C,cACI,UACA,UACA,UACA,UACA,UACA,WAEJnE,cACI5uC,MAAQ1wB,MAAO,WACfitD,QAAUjtD,MAAO,QACjBqwD,gBAAkBrwD,MAAO,WACzBswD,gBAAkBtwD,MAAO,WACzB3rC,OAAS2rC,MAAO,QAChB6kE,WAAa7kE,MAAO,WACpBsuD,OACI/B,MACIxhC,WAAY,cACZq9B,QAAUpoD,MAAO,YAErBv+B,OAASu+B,MAAO,QAChB0wB,MAAQ1wB,MAAO,cAI3BskE,OACIx/E,SAAWkb,MAAO,WAClBv3C,OACIq8G,sBAAuB,UACvB7X,QAAUjtD,MAAO,QACjBotD,YAAcptD,MAAO,QACrBstD,YAActtD,MAAO,QACrB0wB,MAAQ1wB,MAAO,UAGvBukE,SACIR,eACIj7C,MAAQ9oB,MAAO,WACf+kE,mBACIj8C,MAAQ9oB,MAAO,WACf+oB,QAAU/oB,MAAOq9C,GACjByP,OACIhkC,MAAQ9oB,MAAOq9C,GACft0B,QAAU/oB,MAAO,aAGzB9f,SAAW8f,MAAO,SAEtB75B,UACIn5B,QACIg3H,SACIl7C,MAAQ9oB,MAAOq9C,GACft0B,QAAU/oB,MAAO,QACjB8sD,OACIhkC,MAAQ9oB,MAAO,QACf+oB,QAAU/oB,MAAO,WAI7Bx2C,QACIw7G,OACIj8C,QAAU/oB,MAAO,QACjB8oB,MAAQ9oB,MAAO,WAI3BikE,YAAcl7C,QAAU/oB,MAAO,SAC/BkkE,oBACIn7C,QAAU/oB,MAAO,WACjB9f,SAAW8f,MAAO,QAClBx/C,WACIwjH,SACIl7C,MAAQ9oB,MAAOq9C,GACft0B,QAAU/oB,MAAO,SAErB+oB,QAAU/oB,MAAO,WAI7BwkE,SACIS,SAEQ,UACA,YAGA,UACA,YAGA,UACA,YAGA,UACA,YAGA,UACA,YAGA,UACA,eAKf,WAwBG,QAASE,KACL,OACI5Y,MACIxhC,WAAY,UACZq9B,QAAUpoD,MAAO,YAErBv+B,OAASu+B,MAAO,WAChB0wB,MAAQ1wB,MAAOolE,IA/B1B,GACOC,GAAO,UACPC,EAAW,UACXC,EAAiB,UACjBH,EAAO,UACPI,EAAa,UACbC,GACA,UACA,UACA,UACA,UACA,UACA,WAEAC,GACA,UACA,UACA,UACA,UACA,UACA,WAEAC,EAAUF,EAAO,GACjBG,EAAgBvoB,CAWpB+mB,GAAc,SACVpiB,OACI3tF,OAAS2rC,MAAOqlE,GAChB3E,QACIzT,QAAUjtD,MAAOqlE,GACjBZ,eACIxX,QAAUjtD,MAAOslE,GACjB1E,SAAW5gE,MAAOslE,KAG1B7E,gBACIxT,QAAUjtD,MAAOqlE,GACjBX,WAAa1kE,MAAOqlE,GACpB/W,MAAO6W,IACP3D,aACIR,UAAWoE,EACX10C,MAAQ1wB,MAAOulE,IAEnBnE,MAAQnxG,QAAS,IACjByyG,WAAahyC,MAAQ1wB,MAAOolE,IAC5BvD,qBAAuBnxC,MAAQ1wB,MAAOolE,IACtCrd,SAAWzrC,SAAU,QACrB8rC,QAAU2Y,YAAa,IAE3B0C,aAAcgC,EACdnG,cACI5uC,MAAQ1wB,MAAOolE,GACfnY,QAAUjtD,MAAOqlE,GACjBhV,gBAAkBrwD,MAAOwlE,GACzBlV,gBAAkBtwD,MAAOolE,GACzB/wG,OAAS2rC,MAAOqlE,GAChBR,WAAa7kE,MAAOslE,GACpBhX,MAAO6W,MAGfb,OACIx/E,SAAWkb,MAAO2lE,GAClBl9G,OACIq8G,sBAAuBM,EACvBnY,QAAUjtD,MAAOqlE,GACjBjY,YAAcptD,MAAOqlE,GACrB/X,YAActtD,MAAOqlE,GACrB30C,MAAQ1wB,MAAOqlE,KAGvBd,SACIR,eACIj7C,MAAQ9oB,MAAO2lE,GACfZ,mBACIj8C,MAAQ9oB,MAAOqlE,GACft8C,QAAU/oB,MAAO4lE,GACjB9Y,OACIhkC,MAAQ9oB,MAAO4lE,GACf78C,QAAU/oB,MAAOqlE,KAGzBnlF,SAAW8f,MAAOqlE,IAEtBl/F,UACIn5B,QACIg3H,SACIl7C,MAAQ9oB,MAAO4lE,GACf78C,QAAU/oB,MAAOulE,GACjBzY,OACIhkC,MAAQ9oB,MAAOulE,GACfx8C,QAAU/oB,MAAOulE,MAI7B/7G,QACIw7G,OACIj8C,QAAU/oB,MAAOulE,GACjBz8C,MAAQ9oB,MAAOulE,MAI3BtB,YAAcl7C,QAAU/oB,MAAOulE,IAC/BrB,oBACIn7C,QAAU/oB,MAAOulE,GACjBrlF,SAAW8f,MAAOulE,GAClB/kH,WACIwjH,SACIl7C,MAAQ9oB,MAAO4lE,GACf78C,QAAU/oB,MAAOulE,IAErBx8C,QAAU/oB,MAAOulE,MAI7Bf,SAAWS,OAAQvB,EAAK+B,EAAQC,SAGvC,WAwBG,QAASP,KACL,OACI5Y,MACIxhC,WAAY,UACZq9B,QAAUpoD,MAAO,YAErBv+B,OAASu+B,MAAO,WAChB0wB,MAAQ1wB,MAAOolE,IA/B1B,GACOC,GAAO,UACPC,EAAW,UACXC,EAAiB,UACjBH,EAAO,UACPI,EAAa,UACbC,GACA,UACA,UACA,UACA,UACA,UACA,WAEAC,GACA,UACA,UACA,UACA,UACA,UACA,WAEAC,EAAUF,EAAO,GACjBG,EAAgBvoB,CAWpB+mB,GAAc,aACVpiB,OACI3tF,OAAS2rC,MAAOqlE,GAChB3E,QACIzT,QAAUjtD,MAAOqlE,GACjBZ,eACIxX,QAAUjtD,MAAOslE,GACjB1E,SAAW5gE,MAAOslE,KAG1B7E,gBACIxT,QAAUjtD,MAAOqlE,GACjBX,WAAa1kE,MAAOqlE,GACpB/W,MAAO6W,IACP3D,aACIR,UAAWoE,EACX10C,MAAQ1wB,MAAOulE,IAEnBnE,MAAQnxG,QAAS,IACjByyG,WAAahyC,MAAQ1wB,MAAOolE,IAC5BvD,qBAAuBnxC,MAAQ1wB,MAAOolE,IACtCrd,SAAWzrC,SAAU,QACrB8rC,QAAU2Y,YAAa,IAE3B0C,aAAcgC,EACdnG,cACI5uC,MAAQ1wB,MAAOolE,GACfnY,QAAUjtD,MAAOqlE,GACjBhV,gBAAkBrwD,MAAOwlE,GACzBlV,gBAAkBtwD,MAAOolE,GACzB/wG,OAAS2rC,MAAOqlE,GAChBR,WAAa7kE,MAAOslE,GACpBhX,MAAO6W,MAGfb,OACIx/E,SAAWkb,MAAO2lE,GAClBl9G,OACIq8G,sBAAuBM,EACvBnY,QAAUjtD,MAAOqlE,GACjBjY,YAAcptD,MAAOqlE,GACrB/X,YAActtD,MAAOqlE,GACrB30C,MAAQ1wB,MAAOqlE,KAGvBd,SACIR,eACIj7C,MAAQ9oB,MAAO2lE,GACfZ,mBACIj8C,MAAQ9oB,MAAOqlE,GACft8C,QAAU/oB,MAAO4lE,GACjB9Y,OACIhkC,MAAQ9oB,MAAO4lE,GACf78C,QAAU/oB,MAAOqlE,KAGzBnlF,SAAW8f,MAAOqlE,IAEtBl/F,UACIn5B,QACIg3H,SACIl7C,MAAQ9oB,MAAO4lE,GACf78C,QAAU/oB,MAAOulE,GACjBzY,OACIhkC,MAAQ9oB,MAAOulE,GACfx8C,QAAU/oB,MAAOulE,MAI7B/7G,QACIw7G,OACIj8C,QAAU/oB,MAAOulE,GACjBz8C,MAAQ9oB,MAAOulE,MAI3BtB,YAAcl7C,QAAU/oB,MAAOulE,IAC/BrB,oBACIn7C,QAAU/oB,MAAOulE,GACjBrlF,SAAW8f,MAAOulE,GAClB/kH,WACIwjH,SACIl7C,MAAQ9oB,MAAO4lE,GACf78C,QAAU/oB,MAAOulE,IAErBx8C,QAAU/oB,MAAOulE,MAI7Bf,SAAWS,OAAQvB,EAAK+B,EAAQC,SAGvC,WAwBG,QAASP,KACL,OACI5Y,MACIxhC,WAAY,UACZq9B,QAAUpoD,MAAO,YAErBv+B,OAASu+B,MAAO,WAChB0wB,MAAQ1wB,MAAOolE,IA/B1B,GACOC,GAAO,UACPC,EAAW,UACXC,EAAiB,UACjBH,EAAO,UACPI,EAAa,UACbC,GACA,UACA,UACA,UACA,UACA,UACA,WAEAC,GACA,UACA,UACA,UACA,UACA,UACA,WAEAC,EAAUF,EAAO,GACjBG,EAAgBvoB,CAWpB+mB,GAAc,QACVpiB,OACI3tF,OAAS2rC,MAAOqlE,GAChB3E,QACIzT,QAAUjtD,MAAOqlE,GACjBZ,eACIxX,QAAUjtD,MAAOslE,GACjB1E,SAAW5gE,MAAOslE,KAG1B7E,gBACIxT,QAAUjtD,MAAOqlE,GACjBX,WAAa1kE,MAAOqlE,GACpB/W,MAAO6W,IACP3D,aACIR,UAAWoE,EACX10C,MAAQ1wB,MAAOulE,IAEnBnE,MAAQnxG,QAAS,IACjByyG,WAAahyC,MAAQ1wB,MAAOolE,IAC5BvD,qBAAuBnxC,MAAQ1wB,MAAOolE,IACtCrd,SAAWzrC,SAAU,QACrB8rC,QAAU2Y,YAAa,IAE3B0C,aAAcgC,EACdnG,cACI5uC,MAAQ1wB,MAAOolE,GACfnY,QAAUjtD,MAAOqlE,GACjBhV,gBAAkBrwD,MAAOwlE,GACzBlV,gBAAkBtwD,MAAOolE,GACzB/wG,OAAS2rC,MAAOqlE,GAChBR,WAAa7kE,MAAOqlE,GACpB/W,MAAO6W,MAGfb,OACIx/E,SAAWkb,MAAO2lE,GAClBl9G,OACIq8G,sBAAuBM,EACvBnY,QAAUjtD,MAAOqlE,GACjBjY,YAAcptD,MAAOqlE,GACrB/X,YAActtD,MAAOqlE,GACrB30C,MAAQ1wB,MAAOqlE,KAGvBd,SACIR,eACIj7C,MAAQ9oB,MAAO2lE,GACfZ,mBACIj8C,MAAQ9oB,MAAOqlE,GACft8C,QAAU/oB,MAAO4lE,GACjB9Y,OACIhkC,MAAQ9oB,MAAO4lE,GACf78C,QAAU/oB,MAAOqlE,KAGzBnlF,SAAW8f,MAAOqlE,IAEtBl/F,UACIn5B,QACIg3H,SACIl7C,MAAQ9oB,MAAO4lE,GACf78C,QAAU/oB,MAAOulE,GACjBzY,OACIhkC,MAAQ9oB,MAAOulE,GACfx8C,QAAU/oB,MAAOulE,MAI7B/7G,QACIw7G,OACIj8C,QAAU/oB,MAAOulE,GACjBz8C,MAAQ9oB,MAAOulE,MAI3BtB,YAAcl7C,QAAU/oB,MAAOulE,IAC/BrB,oBACIn7C,QAAU/oB,MAAOulE,GACjBrlF,SAAW8f,MAAOulE,GAClB/kH,WACIwjH,SACIl7C,MAAQ9oB,MAAO4lE,GACf78C,QAAU/oB,MAAOulE,IAErBx8C,QAAU/oB,MAAOulE,MAI7Bf,SAAWS,OAAQvB,EAAK+B,EAAQC,SAGvC,WAAA,GACOL,GAAO,UACPD,EAAO,qBACPK,GACA,UACA,UACA,UACA,UACA,UACA,WAEAC,GACA,UACA,UACA,UACA,UACA,UACA,WAEAC,EAAUF,EAAO,EACrBrB,GAAc,cACVpiB,SACAsiB,OACIx/E,SAAWkb,MAAO2lE,GAClBl9G,OACIq8G,sBAAuBM,EACvBnY,QAAUjtD,MAAOqlE,GACjBjY,YAAcptD,MAAOqlE,GACrB/X,YAActtD,MAAOqlE,GACrB30C,MAAQ1wB,MAAOqlE,KAGvBd,WACAC,SAAWS,OAAQvB,EAAK+B,EAAQC,MAEpCzwH,EAAO4wH,KAAO5wH,EAAO,iBAExB,WAAA,GACOowH,GAAO,UACPD,EAAO,qBACPK,GACA,UACA,UACA,UACA,UACA,UACA,WAEAC,GACA,UACA,UACA,UACA,UACA,UACA,WAEAC,EAAUF,EAAO,EACrBrB,GAAc,gBACVpiB,SACAsiB,OACIx/E,SAAWkb,MAAO2lE,GAClBl9G,OACIq8G,sBAAuBM,EACvBnY,QAAUjtD,MAAOqlE,GACjBjY,YAAcptD,MAAOqlE,GACrB/X,YAActtD,MAAOqlE,GACrB30C,MAAQ1wB,MAAOqlE,KAGvBd,WACAC,SAAWS,OAAQvB,EAAK+B,EAAQC,UAW1ChjJ,OAAOuB,MAAM2sB,QACRluB,OAAOuB,OACE,kBAAVzB,SAAwBA,OAAOgiC,IAAMhiC,OAAS,SAAUiiC,EAAIC,EAAIC,IACrEA,GAAMD,OAEV,SAAUniC,EAAGC,QACVA,OAAO,wBACH,qBACA,kCACA,4BACA,yBACDD,IACL,aASkB,kBAAVC,SAAwBA,OAAOgiC,IAAMhiC,OAAS,SAAUiiC,EAAIC,EAAIC,IACrEA,GAAMD,OAEV,SAAUniC,EAAGC,QACVA,OAAO,6BACH,aACA,cACA,gBACA,sBACDD,IACL,YACG,SAAUE,GAgGP,QAASqjJ,GAAa7nI,GAAtB,GAGapX,GACD2/F,EAHJ7iG,EAASsa,EAAOta,OAChB8b,EAAQ,CACZ,KAAS5Y,EAAI,EAAGA,EAAIlD,EAAQkD,IACpB2/F,EAAMvoF,EAAOpX,GACbk4C,EAASynD,IACT/mF,GAGR,OAAOA,GAyEX,QAASsmI,GAASj8H,EAAOk8H,GACrB,GAAY,OAARA,EACA,MAAOA,EAEX,IAAIx2H,GAAMH,GAAOvF,GAAO,EACxB,OAAO0F,GAAIw2H,GA4ef,QAASC,GAAY95I,EAAS4D,EAAS2uC,EAAOwnG,GAA9C,GAOQjgG,GACAs8E,EACA4jB,EAKKl/I,EAEGC,CALZ,IAVc,SAAVw3C,IACAA,MAEW,SAAXwnG,IACAA,GAAS,GAETjgG,EAAWvH,EAAMuH,SAAWvH,EAAMuH,aAClCs8E,EAAQ7jF,EAAM6jF,MAAQ7jF,EAAM6jF,OAAS,EACrC4jB,GAAY,EAChBznG,EAAM0nG,SAAW1nG,EAAM0nG,aACnB7jB,EAAQ8jB,GACR,MAAO,KAEX,KAASp/I,IAAYkF,IACZ6C,GAAQ/H,EAAUy3C,EAAM0nG,WAAaj6I,EAAQ1D,eAAexB,KACzDC,EAAYiF,EAAQlF,GACpBgB,GAAWf,IACXi/I,GAAY,EACPD,IACD/5I,EAAQlF,GAAYqoF,GAAepoF,EAAU6I,GAAUk2C,EAASh/C,MAE7D0tH,GAASztH,KACXg/I,IACDxnG,EAAMuH,SAAWA,EAASh/C,IAE9By3C,EAAM6jF,QACN4jB,EAAYF,EAAY/+I,EAAW6I,EAAS2uC,EAAOwnG,IAAWC,EAC9DznG,EAAM6jF,SAIlB,OAAO4jB,GAEX,QAASG,GAAgB5e,GAAzB,GAGa7gI,GAFL0/I,EAAc7e,EAAO/jI,OACrBgvI,EAAa,CACjB,KAAS9rI,EAAI,EAAGA,EAAI0/I,EAAa1/I,IAC7B8rI,EAAahoI,KAAKlG,IAAIkuI,EAAYjL,EAAO7gI,GAAGU,KAAK5D,OAErD,OAAOgvI,GA07BX,QAAS6T,GAAal0H,GAClB,IAAK,GAAI5oB,GAAM,EAAGA,EAAM4oB,EAAS3uB,OAAQ+F,IACrC,GAAI+jF,GAAQn7D,EAAS5oB,GAAKgmC,QACtB,OAAO,EAsfnB,QAAS+2G,GAAmBt6I,GACxB,GAAI47H,GAAU57H,EAAQ47H,OACtB,OAAOA,IAAWA,EAAQzrC,UAAiC,SAArByrC,EAAQzrC,SAimBlD,QAASoqD,GAAWzoI,GAChB,MAAO6nI,GAAa7nI,KAAYA,EAAOta,OA2f3C,QAASi7D,GAASj1D,GACd,MAAO8jF,IAAQ9jF,IAAoB,OAAVA,EA4oB7B,QAASg9I,GAASx6I,GAAlB,GAEatF,GACD+/I,EACAr/I,EAHJmgI,EAASv7H,EAAQu7H,MACrB,KAAS7gI,EAAI,EAAGA,EAAI6gI,EAAO/jI,OAAQkD,IAC3B+/I,EAAalf,EAAO7gI,GACpBU,EAAOq/I,EAAWr/I,MAClBA,GAASuK,GAAQvK,EAAK,KAAQotH,GAASptH,EAAK,MAC5Cq/I,EAAWr/I,MAAQA,IAsb/B,QAASs/I,KACL,MAAO,OAASC,KA2qBpB,QAASC,GAAahX,GAAtB,GAEQ5gG,GAEStoC,EACDmgJ,EAJRrjJ,EAASosI,EAAKpsI,MAElB,IAAIA,EAAS,EACT,IAASkD,EAAI,EAAGA,EAAIlD,EAAQkD,IACpBmgJ,EAAUjX,EAAKlpI,GAAG0hI,aACjBp5F,EAGDA,EAAItqC,KAAKmiJ,GAFT73G,EAAM63G,EAAQ9+I,OAM1B,OAAOinC,IAAO,GAAI8mF,IAEtB,QAASgxB,GAAWlX,EAAMh8D,GAA1B,GACaltE,GACDuxE,CADR,KAASvxE,EAAI,EAAGA,EAAIkpI,EAAKpsI,OAAQkD,IAE7B,GADIuxE,EAAS23D,EAAKlpI,GACduxE,GAAUA,EAAOrE,OAASA,EAC1B,MAAOqE,GAInB,QAASyW,GAAc7O,GACnB,MAAiB,KAAVA,GAA0B,OAAVA,GAA4B,SAAVA,GAA8B,gBAAVA,IAA4ByN,GAAQzN,GAoHrG,QAASknE,GAASlqG,EAAW7wB,EAAQxiB,GAArC,GAIY6K,GAHJklG,EAAYvtF,EACZrC,EAAQkzB,CACZ,IAAIA,EAAU/yC,QAAQ,QAAW,CAE7B,IADIuK,EAAQwoC,EAAUh6C,MAAM,KACrBwR,EAAM7Q,OAAS,GAClBmmB,EAAQtV,EAAMqJ,QACT4vE,GAAQisB,EAAU5vF,MACnB4vF,EAAU5vF,OAEd4vF,EAAYA,EAAU5vF,EAE1BA,GAAQtV,EAAMqJ,QAElB67F,EAAU5vF,GAASngB,EAwTvB,QAASw9I,GAAmBzf,EAAQl+G,GAApC,GAGa9f,GACD09I,EAHJr8I,KACAs8I,KAAiBplI,OAAOuH,EAC5B,KAAS9f,EAAM,EAAGA,EAAMg+H,EAAO/jI,OAAQ+F,IAC/B09I,EAAgB1f,EAAOh+H,GACvBsF,GAAQo4I,EAAcn8I,KAAMo8I,IAC5Bt8I,EAAO8I,KAAKuzI,EAGpB,OAAOr8I,GAEX,QAASu8I,GAAiB34I,EAAGC,GACzB,MAAID,IAAKC,EACED,EAAE9F,gBAAkB+F,EAAE/F,cAE1B8F,IAAMC,EAEjB,QAAS24I,GAAWhsB,EAAaisB,GAAjC,GACQv8I,GAAOswH,EAAYtwH,KACnBw8I,EAAeD,YAA0Bz/I,KAC7C,QAAQkD,GAAQw8I,GAAgBH,EAAiBr8I,EAAM+yH,IAE3D,QAAS0pB,GAAgBtoI,EAAOtb,GACZ,OAAZA,GACAsb,EAAMvL,KAAK/P,GAGnB,QAAS6jJ,GAAkBvoI,GACvB,MAAwB,KAAjBA,EAAMzb,OAAeyb,EAAM,GAAKA,EAE3C,QAASwoI,GAAa99H,EAAOk8H,EAAKrsB,GAAlC,GAIQ7uH,GACAnB,CAJJ,OAAY,QAARq8I,EACOA,GAEPl7I,EAAM,SAAWgf,EACjBngB,EAAQq8I,EAAIl7I,GACXnB,IACDA,EAAQ8Y,GAAUk3G,EAAatqG,GAAOvF,GAAO,GAAMk8H,IACnDA,EAAIl7I,GAAOnB,GAERA,GAmnBX,QAASk+I,GAAYngB,EAAQloG,EAAMsoH,GAC/B,MAAOhvH,IAAK4uG,EAAQ,SAAU1qH,GAC1B,MAAkB,KAAX8qI,IAAiB9qI,EAAE2lI,cAAgB3lI,EAAE2lI,eAAiBnjH,IAkErE,QAAStvB,KACLnE,KAAKkH,mBAAoB,EAE7B,QAAS80I,GAAU/zI,EAAGg0I,GAAtB,GACQl9I,IAAOk9I,GAAY,IAAIn/I,cACvB6b,EAAQ1Q,EAAE0Q,MACV2hC,EAAiB,SAARv7C,KAAoB4Z,EAAMujI,SAAWvjI,EAAM0d,UAAY1d,EAAMwjI,SAAWxjI,EAAM5Z,EAAM,MACjG,OAAOu7C,GAEX,QAAS8hG,GAAkBC,GAA3B,GAEa1+I,GACD2+I,EAFJ9nG,IACJ,KAAS72C,EAAM,EAAGA,EAAM0+I,EAAWzkJ,OAAQ+F,IACnC2+I,EAAYD,EAAW1+I,GACvB2+I,EAAU7oH,KAAKrzB,QAAQ8O,OACvBslC,EAAO8nG,EAAU7oH,KAAKrzB,QAAQ8O,OAC1B8C,IAAKsqI,EAAUv+F,MAAM/rC,IACrBtZ,IAAK4jJ,EAAUv+F,MAAMrlD,KAIjC,OAAO87C,GAmnBX,QAAS+nG,GAAUt+I,GACf,GAAIlG,GAAUwF,SAASma,cAAc,MAIrC,OAHIzZ,KACAlG,EAAQkG,UAAYA,GAEjBlG,EAEX,QAASykJ,GAAczkJ,GAEnB,IADA,GAAI4T,GAAU5T,EACP4T,IAAY29G,GAAW39G,EAAS,aACnCA,EAAUA,EAAQ6S,UAEtB,OAAO7S,GAuZX,QAAS+e,GAAgBziB,GACrBA,EAAEyiB,kBA4nBN,QAAS+xH,GAAiBn1D,GAA1B,GAIQzoD,GAQAjD,EAXAkmD,EAAUvgE,EAAQ6hE,IAAIkE,GACtBhB,EAAO72E,GAAM7Q,KAAKunF,IAAIrE,GAAUosC,IAChC7nC,EAAS52E,GAAM7Q,KAAKsnF,IAAIpE,GAAUosC,GAiBtC,OAdIrvF,GADAjgC,KAAKC,IAAIynF,GAAQo2D,GACJ1xE,EACNqb,EAAS,EACHjkE,GAEAF,EAIb0Z,EADAh9B,KAAKC,IAAIynF,GAAQq2D,GACN3xE,EACJsb,EAAO,EACHpb,EAEAD,GAGXpsC,WAAYA,EACZjD,SAAUA,GAkElB,QAASghH,GAAejhB,EAAQnsF,EAAQr9B,GAAxC,GAKQ0qI,GAJAr5I,EAAUgsC,EAAOhsC,OACrB,OAAIk+E,IAAQl+E,GACDA,GAEPq5I,EAAkBlhB,EAAOkhB,gBACzBA,EACOA,EAAgB1qI,GAD3B,QAIJ,QAAS2qI,GAAanhB,GAAtB,GAKah+H,GACDg/H,EACA/+H,EANJpC,EAAOmgI,EAAOngI,KACditF,KACAjqC,EAAM,EACN9qC,EAAQ,CACZ,KAAS/V,EAAM,EAAGA,EAAMnC,EAAK5D,OAAQ+F,IAC7Bg/H,EAAYogB,GAAapxI,QAAQqxI,UAAUrhB,EAAQh+H,GACnDC,EAAQ++H,EAAUsgB,YAAYr/I,MAC9BirH,GAASjrH,KACTA,EAAQuE,WAAWvE,IAEnBo1C,EAASp1C,IACT++H,EAAUn5H,QAAUo5I,EAAejhB,EAAQgB,EAAUntF,OAAQ7xC,MAAS,EACtEg/H,EAAU/+H,MAAQgB,KAAKC,IAAIjB,GAC3B6qF,EAAO3gF,KAAK60H,GACRA,EAAUn5H,UACVg7C,GAAOm+E,EAAU/+H,OAEP,IAAVA,GACA8V,KAGJ+0E,EAAO3gF,KAAK,KAGpB,QACIsmC,MAAOoQ,EACPiqC,OAAQA,EACR/0E,MAAOA,GAoXf,QAASo2E,GAAapxD,EAAIC,EAAIgtE,EAAIG,GAAlC,GAGQ9mG,GAEIqa,EAJJ6jI,GAAOp3C,EAAG7yE,EAAI0yE,EAAG1yE,IAAMyF,EAAGrnB,EAAIs0F,EAAGt0F,IAAMy0F,EAAGz0F,EAAIs0F,EAAGt0F,IAAMqnB,EAAGzF,EAAI0yE,EAAG1yE,GACjEkqH,GAAMr3C,EAAGz0F,EAAIs0F,EAAGt0F,IAAMsnB,EAAG1F,EAAIyF,EAAGzF,IAAM6yE,EAAG7yE,EAAI0yE,EAAG1yE,IAAM0F,EAAGtnB,EAAIqnB,EAAGrnB,EAMpE,OAJW,KAAP8rI,IACI9jI,EAAK6jI,EAAMC,EACfn+I,EAAS,GAAI8mF,IAAMptD,EAAGzF,EAAI5Z,GAAMsf,EAAG1F,EAAIyF,EAAGzF,GAAIyF,EAAGrnB,EAAIgI,GAAMsf,EAAGtnB,EAAIqnB,EAAGrnB,KAElErS,EAkVX,QAASo+I,GAAUx6I,EAAGC,GAClB,MAAOD,GAAEhF,MAAMq1B,EAAIpwB,EAAEjF,MAAMq1B,EAk8D/B,QAASoqH,GAAmBj9I,GAA5B,GAEazC,GACD2/I,EAFJC,EAAUC,EACd,KAAS7/I,EAAM,EAAGA,EAAM4/I,EAAQ3lJ,OAAQ+F,IAChC2/I,EAAQC,EAAQ5/I,GAAO,OACvByC,EAAQk9I,KACRl9I,EAAQm9I,EAAQ5/I,GAAO,QAAUyC,EAAQk9I,SAClCl9I,GAAQk9I,IAI3B,QAASG,GAAoBh1D,EAAQv5E,GACjC,GAAIu5E,EACA,IAAK,GAAI9qF,GAAM,EAAGA,EAAM8qF,EAAO7wF,OAAQ+F,IACnC,GAAI8qF,EAAO9qF,GAAKi+H,WAAa1sH,EACzB,OAAQu5E,EAAO9qF,IAK/B,QAAS+/I,GAAkBt9I,EAASu9I,GAGhC,QAASC,GAAepuB,GAAxB,GACQquB,IAAaruB,OAAmBv7C,OAASs/D,EAAat/D,MACtDj1E,EAASpE,MAAekjJ,EAAmBA,EAAkBC,GAAWxK,EAAcA,EAAawK,IACnGp5C,MAAQ1wB,MAAO4pE,GACf3c,QAAUjtD,MAAO4pE,GACjBv1G,OAAS2rC,MAAO4pE,IACjBruB,EAEH,cADOxwH,GAAO++I,GACP/+I,EAXf,GAEQ++I,GAAUxK,EAAcvP,EAWnBrmI,EAZLmgJ,GAAqBH,OAAoBpK,gBAY7C,KAAS51I,EAAM,EAAGA,EAAM6/I,GAAW5lJ,OAAQ+F,IACvCogJ,EAAWP,GAAW7/I,GAAO,OAC7B41I,EAAenzI,EAAQmzI,iBACvBvP,KAAU9tH,OAAO9V,EAAQ29I,IACzB/Z,EAAOA,EAAKhxH,IAAI4qI,GAChBx9I,EAAQ29I,GAAY/Z,EAAKpsI,OAAS,EAAIosI,EAAOA,EAAK,GAG1D,QAASga,GAAoB59I,EAASu9I,GAAtC,GASa7iJ,GACDmjJ,EACAC,EAVJviB,EAASv7H,EAAQu7H,OACjBwiB,EAAexiB,EAAO/jI,OACtB88I,EAAiBt0I,EAAQs0I,eACzB0J,EAAiBxjJ,MAAewF,EAAQs0I,gBACxC2J,EAAsBV,EAAe/iJ,MAAe+iJ,EAAajJ,mBACjE4J,EAAsB1jJ,MAAeyjJ,EAGzC,KAFAE,EAA4BH,GAC5BG,EAA4BD,GACnBxjJ,EAAI,EAAGA,EAAIqjJ,EAAcrjJ,IAC1BmjJ,EAAatiB,EAAO7gI,GAAGoE,MAAQkB,EAAQs0I,eAAex1I,KACtDg/I,EAActjJ,IAAaY,SAAY8iJ,EAAqBD,EAAoBJ,IAAe52B,QAASjnH,EAAQinH,SAAW+2B,EAAgB1J,EAAeuJ,IAC9JtiB,EAAO7gI,GAAG0jJ,UAAYN,EACtBviB,EAAO7gI,GAAKF,MAAesjJ,EAAaviB,EAAO7gI,IAGvD,QAASyjJ,GAA4B7J,SAC1BA,GAAeY,UACfZ,GAAegB,aACfhB,GAAe2B,kBACf3B,GAAe/vC,WACf+vC,GAAegC,mBACfhC,GAAeiB,UACfjB,GAAekB,YACflB,GAAeW,WACfX,GAAe6B,mBACf7B,GAAekE,cACflE,GAAe4B,kBACf5B,GAAec,aACfd,GAAee,kBACff,GAAeqB,WACfrB,GAAea,cACfb,GAAep0C,aACfo0C,GAAe+B,qBACf/B,GAAewB,gBACfxB,GAAeyB,gBACfzB,GAAesB,gBACftB,GAAeuB,gBACfvB,GAAeiC,UAE1B,QAAS0F,GAAWrY,GAApB,GAEalpI,GACD24B,EACAsqH,EAHJvpG,IACJ,KAAS15C,EAAI,EAAGA,EAAIkpI,EAAKpsI,OAAQkD,IACzB24B,EAAOuwG,EAAKlpI,GACZijJ,EAAWtqH,EAAKrzB,QAAQ8O,KACxB6uI,IACAvpG,EAAOupG,GAAYtqH,EAAKsqB,QAGhC,OAAOvJ,GAEX,QAASiqG,GAAU3wB,EAAO54E,GACL,SAAbA,IACAA,EAAW3zB,EAAQurG,aAEvB,KAAK,GAAIhyH,GAAI,EAAGlD,EAASk2H,EAAMl2H,OAAQkD,EAAIlD,EAAQkD,IAC/C,GAAIo6C,EAAS44E,EAAMhzH,GAAIgzH,EAAMhzH,EAAI,IAAM,EAAG,CACtCgzH,EAAM9vG,KAAKk3B,EACX,OAGR,MAAO44E,GAEX,QAAS4wB,GAAYC,EAAUzpG,GAA/B,GAIQ44E,GACAl2H,EACAoH,EACKlE,CAAT,KANiB,SAAbo6C,IACAA,EAAW3zB,EAAQurG,cAEnBgB,EAAQ2wB,EAAUE,EAAUzpG,GAC5Bt9C,EAASk2H,EAAMl2H,OACfoH,EAASpH,EAAS,GAAKk2H,EAAM,OACxBhzH,EAAI,EAAGA,EAAIlD,EAAQkD,IACiB,IAArCo6C,EAAS44E,EAAMhzH,GAAIw0B,GAAKtwB,KACxBA,EAAO8I,KAAKgmH,EAAMhzH,GAG1B,OAAOkE,GAEX,QAAS4/I,GAAUzoG,GAAnB,GAGa0oG,GACD5E,EACA6E,EACKC,EALTC,EAAW7oG,EAAKv+C,OAChBoH,IACJ,KAAS6/I,EAAQ,EAAGA,EAAQG,EAAUH,IAGlC,IAFI5E,EAAM9jG,EAAK0oG,GACXC,EAAW7E,EAAIriJ,OACVmnJ,EAAQ,EAAGA,EAAQD,EAAUC,IAClC//I,EAAO+/I,GAAS//I,EAAO+/I,OACvB//I,EAAO+/I,GAAOj3I,KAAKmyI,EAAI8E,GAG/B,OAAO//I,GAEX,QAASigJ,GAAmBC,EAAiB9+I,GAA7C,GACa2d,GACDohI,EACAC,EAEIC,CAJZ,KAASthI,IAAS3d,GACV++I,EAAa/+I,EAAQ2d,GACrBqhI,EAAgBF,EAAgBnhI,GAChC2jE,GAAQ09D,KACJC,EAA2B,OAAfF,EACZE,IAAc39D,GAAQy9D,UACfD,GAAgBnhI,GACnBshI,SACOj/I,GAAQ2d,IAEZqhI,GAAiBx2B,GAASu2B,IAC7Bv2B,GAASw2B,IACTH,EAAmBG,EAAeD,IAxsVzD,GAEO59H,GACA1qB,EACAm8C,EACAssG,EACA5xC,EACAmc,EACAp6D,EACAub,EACAC,EACAC,EACAhpD,EACAovG,GACAM,GACAtgH,GACA6/G,GACA/uG,GACAmvG,GACAU,GACA/D,GACA6D,GACArwC,GACAp+D,GACAvd,GACAqtH,GACAttC,GACAokC,GACA1B,GACAmB,GACA1mH,GACA/G,GACAqnF,GACAqlC,GACAhuH,GACAioF,GACAumC,GACA0K,GACAR,GACApK,GACAnmC,GACAzzD,GACAwU,GACA+kF,GACAnyG,GACAoyG,GACAyL,GACAlB,GACA5jH,GACAsd,GACA4nG,GACA/wC,GACA0lC,GACA9lC,GACAqvC,GACA7uC,GACA7rF,GACAqpB,GACAs7E,GACAvgE,GACAyrE,GACAxY,GACA/a,GACA01B,GACAo1C,GACA5lH,GACA6lH,GAuBAC,GAkBAC,GA8EA3C,GA+GA4C,GACAC,GACAC,GACAC,GACAC,GA2GAxmJ,GACAymJ,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACA5wI,GACA6wI,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GAaAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACA9jF,GACA+jF,GACAC,GACAC,GACAC,GACAC,GACAC,GACAtrF,GACAurF,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAhyB,GA0EAiyB,GACAC,GAqGAC,GAMAjK,GA2CAkK,GA6bAC,GAuBAC,GAgBAC,GACAC,GACAC,GAiQAC,GA6CAC,GAuDAC,GAuBAC,GAiEAC,GA4BAC,GAuBAC,GA8EAC,GAqEAC,GAOAC,GAOAC,GA2FAC,GAuGAC,GAwBAC,GAoGAC,GACAC,GAiOAC,GA6BAC,GAsBAC,GA4IAC,GAiMAC,GA2GAC,GAkOAC,GA2EAC,GA0FAC,GAUAC,GAiRAC,GA+DAC,GA2GAC,GAEAC,GAiHAC,GAsGAC,GAiDAC,GAmFAC,GAmGAC,GA8DAplF,GA4IAm5E,GAWAkM,GA2sBAC,GAQAC,GA2GAC,GAeAC,GAwDAC,GA4CAC,GAmDAC,GAKAC,GAuDAC,GA8HAC,GA2nBAC,GAgFAC,GAkEAC,GAoKAC,GAwCAC,GAqCAC,GAoGAC,GACAC,GACAC,GACAC,GA2LAC,GA0BAC,GACAC,GAeAC,GA8ZA12E,GAsBA22E,GA8DAC,GA4BAC,GAWAC,GAcAC,GAaAC,GAoCAC,GAgNAC,GAwOAtM,GACAD,GA+CAwM,GAmFAC,GACAC,GAuYAC,GAoBAC,GA4BAC,GACAC,GAgFAC,GAeAC,GACAC,GAyEAC,GAQAC,GAGAC,GAuBAC,GAkBAC,GAwDAC,GAsEAC,GAsBAC,GAIAC,GAKAC,GAsBAC,GASAC,GA4BAC,GAgBAC,GAkCAC,GA2GAC,GAyFAC,GAwOAC,GAsBAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GA0OA7N,GAMA8N,GACAC,GACAC,GACAC,EAtgTJ90J,QAAOuB,MAAMqpB,QAAU5qB,OAAOuB,MAAMqpB,YAChCA,EAAUrpB,MAAMqpB,QAChB1qB,EAAQ0qB,EAAQ1qB,MAChBm8C,EAAWzxB,EAAQyxB,SACnBssG,EAAmB/9H,EAAQ6wG,UAC3B1kB,EAAY4xC,EAAiB5xC,UAC7Bmc,EAAYy1B,EAAiBz1B,UAC7Bp6D,EAAQ6vF,EAAiB7vF,MACzBub,EAASs0E,EAAiBt0E,OAC1BC,EAAMq0E,EAAiBr0E,IACvBC,EAASo0E,EAAiBp0E,OAC1BhpD,EAAOo9H,EAAiBp9H,KACxBovG,GAAQguB,EAAiBhuB,MACzBM,GAAS0tB,EAAiB1tB,OAC1BtgH,GAAIguI,EAAiBhuI,EACrB6/G,GAAImuB,EAAiBnuB,EACrB/uG,GAAQk9H,EAAiBl9H,MACzBmvG,GAAQ+tB,EAAiB/tB,MACzBU,GAAOqtB,EAAiBrtB,KACxB/D,GAAoBoxB,EAAiBpxB,kBACrC6D,GAAMutB,EAAiBvtB,IACvBrwC,GAAUngE,EAAQmgE,QAClBp+D,GAAS/B,EAAQ+B,OACjBvd,GAAUwb,EAAQxb,QAClBqtH,GAAe7xG,EAAQ6xG,aACvBttC,GAAQvkE,EAAQukE,MAChBokC,GAAM3oG,EAAQ2oG,IACd1B,GAAmBjnG,EAAQinG,iBAC3BmB,GAAoBpoG,EAAQooG,kBAC5B1mH,GAAUse,EAAQte,QAClB/G,GAAaqlB,EAAQrlB,WACrBqnF,GAAiBhiE,EAAQgiE,eACzBqlC,GAAWrnG,EAAQqnG,SACnBhuH,GAAa2mB,EAAQ3mB,WACrBioF,GAAethE,EAAQshE,aACvBumC,GAAc7nG,EAAQ6nG,YACtB0K,GAAUvyG,EAAQuyG,QAClBR,GAAe/xG,EAAQ+xG,aACvBpK,GAAa3nG,EAAQ2nG,WACrBnmC,GAAaxhE,EAAQwhE,WACrBzzD,GAAO/N,EAAQ+N,KACfwU,GAASviB,EAAQuiB,OACjB+kF,GAAWtnG,EAAQsnG,SACnBnyG,GAAY6K,EAAQ7K,UACpBoyG,GAAavnG,EAAQunG,WACrByL,GAAehzG,EAAQgzG,aACvBlB,GAAa9xG,EAAQ8xG,WACrB5jH,GAAQ8R,EAAQ9R,MAChBsd,GAAOxL,EAAQwL,KACf4nG,GAAmBpzG,EAAQozG,iBAC3B/wC,GAAgBriE,EAAQqiE,cACxB0lC,GAAa/nG,EAAQ+nG,WACrB9lC,GAAajiE,EAAQiiE,WACrBqvC,GAAWtxG,EAAQsxG,SACnB7uC,GAAeziE,EAAQyiE,aACvB7rF,GAAUD,MAAMC,QAChBqpB,GAAUtpB,MAAMspB,QAChBs7E,GAAOt7E,GAAQs7E,KACfvgE,GAAY/a,GAAQ+a,UACpByrE,GAAmBxmF,GAAQwmF,iBAC3BxY,GAAQhuE,GAAQguE,MAChB/a,GAAQv8E,MAAMu8E,MACd01B,GAAWjyG,MAAMiyG,SACjBo1C,GAAgBp1C,GAASrkB,MACzBnsD,GAAYwwE,GAASxwE,UACrB6lH,GAAY3oJ,EAAM6J,QAClBC,KAAM,SAAU8yB,GACZzzB,KAAK0rJ,MAAQj4H,EACbzzB,KAAKI,QAAUqzB,EAAKrzB,SAExBxC,MAAO,SAAUyqF,GAAV,GACC50D,GAAOzzB,KAAK0rJ,MACZ9tJ,EAAQ61B,EAAKu0G,YAAcv0G,EAAKu0G,YAAY3/C,GAAS50D,EAAK24G,SAAS/jD,EACvE,OAAOzqF,IAEXioI,KAAM,SAAU74G,EAAMC,EAAIk5G,GAItB,MAHc,UAAVA,IACAA,GAAQ,GAELnmI,KAAK0rJ,MAAM7lB,KAAK74G,EAAMC,EAAIk5G,IAErCpoF,MAAO,WACH,MAAO/9C,MAAK0rJ,MAAM3tG,SAEtBwoF,WAAY,WACR,MAAOvmI,MAAK0rJ,MAAMnlB,gBAGtBkZ,GAAgB5oJ,EAAM6J,QACtBC,KAAM,SAAUmjI,GACZ9jI,KAAK2rJ,UAAY7nB,EACjB9jI,KAAKmiG,OAAS2hC,EAAS3hC,OACvBniG,KAAK4rJ,iBAAmB9nB,EAAS+nB,aAcrCnM,IACA1tI,IAAK,SAAUE,GAAV,GAGQpX,GACD8C,EAHJhG,EAASsa,EAAOta,OAChBoa,EAAM07F,CACV,KAAS5yG,EAAI,EAAGA,EAAIlD,EAAQkD,IACpB8C,EAAQsU,EAAOpX,GACfk4C,EAASp1C,KACToU,EAAMpT,KAAKoT,IAAIA,EAAKpU,GAG5B,OAAOoU,KAAQ07F,EAAYx7F,EAAO,GAAKF,GAE3CtZ,IAAK,SAAUwZ,GAAV,GAGQpX,GACD8C,EAHJhG,EAASsa,EAAOta,OAChBc,EAAMmxH,CACV,KAAS/uH,EAAI,EAAGA,EAAIlD,EAAQkD,IACpB8C,EAAQsU,EAAOpX,GACfk4C,EAASp1C,KACTlF,EAAMkG,KAAKlG,IAAIA,EAAKkF,GAG5B,OAAOlF,KAAQmxH,EAAY33G,EAAO,GAAKxZ,GAE3C8lD,IAAK,SAAUtsC,GAAV,GAGQpX,GACD8C,EAHJhG,EAASsa,EAAOta,OAChB4mD,EAAM,CACV,KAAS1jD,EAAI,EAAGA,EAAIlD,EAAQkD,IACpB8C,EAAQsU,EAAOpX,GACfk4C,EAASp1C,KACT4gD,GAAO5gD,EAGf,OAAO4gD,IAEXstG,UAAW,SAAU55I,GACjB,GAAIlT,GAAS,IAIb,OAHI+6I,GAAa7nI,KACblT,EAAS0gJ,GAAWlhG,IAAItsC,IAErBlT,GAEX0U,MAAO,SAAUxB,GAAV,GAGMpX,GACD8C,EAHJhG,EAASsa,EAAOta,OAChB8b,EAAQ,CACZ,KAAS5Y,EAAI,EAAGA,EAAIlD,EAAQkD,IACpB8C,EAAQsU,EAAOpX,GACL,OAAV8C,GAAkB8jF,GAAQ9jF,IAC1B8V,GAGR,OAAOA,IAEXq4I,IAAK,SAAU75I,GAAV,GACGwB,GAAQqmI,EAAa7nI,GACrBlT,EAASkT,EAAO,EAIpB,OAHIwB,GAAQ,IACR1U,EAAS0gJ,GAAWlhG,IAAItsC,GAAUwB,GAE/B1U,GAEX5H,MAAO,SAAU8a,GAAV,GAEMpX,GACD8C,EAFJhG,EAASsa,EAAOta,MACpB,KAASkD,EAAI,EAAGA,EAAIlD,EAAQkD,IAExB,GADI8C,EAAQsU,EAAOpX,GACL,OAAV8C,GAAkB8jF,GAAQ9jF,GAC1B,MAAOA,EAGf,OAAOsU,GAAO,KAUlB6qI,GAAelmJ,EAAM6J,QACrBC,KAAM,WACFX,KAAKgsJ,gBACLhsJ,KAAKisJ,gBACLjsJ,KAAKksJ,cACLlsJ,KAAKmsJ,oBAET/jI,SAAU,SAAUkzH,EAAa2B,EAAamP,GAApC,GAQGtxJ,GACDoE,EARJigF,EAASn/E,IAOb,KANoB,SAAhBi9I,IACAA,GAAextF,IAEC,SAAhB28F,IACAA,MAEKtxJ,EAAI,EAAGA,EAAIwgJ,EAAY1jJ,OAAQkD,IAChCoE,EAAOo8I,EAAYxgJ,GACvBqkF,EAAO6sE,aAAa9sJ,GAAQ+9I,EAC5B99D,EAAO8sE,aAAa/sJ,GAAQktJ,EAC5BjtE,EAAO+sE,WAAWhtJ,GAAQigF,EAAOktE,WAAWpP,EAAa,MACzD99D,EAAOgtE,gBAAgBjtJ,GAAQigF,EAAOktE,WAAWpP,EAAarmJ,SAGtE01J,gBAAiB,SAAU3wB,GACvB,MAAO37H,MAAKi9I,YAAYthB,GAAQzlH,OAAOlW,KAAKosJ,YAAYzwB,KAE5DshB,YAAa,SAAUthB,GACnB,MAAO37H,MAAKgsJ,aAAarwB,EAAOz8H,QAAUuwD,IAE9C28F,YAAa,SAAUzwB,GACnB,MAAO37H,MAAKisJ,aAAatwB,EAAOz8H,QAAUuwD,IAE9CutF,UAAW,SAAUrhB,EAAQ4wB,EAAS75G,GAA3B,GAMHlD,GAAQ5xC,EAMJ4uJ,EAIAC,EACAC,EAhBJlxJ,EAAOmgI,EAAOngI,KACdmhI,EAAYj7C,GAAQhvC,GAAQA,EAAOl3C,EAAK+wJ,GACxCvtJ,GAAWi+I,aAAer/I,MAAO++H,IACjCsgB,EAAcj9I,KAAKi9I,YAAYthB,GAC/BywB,EAAcpsJ,KAAKisJ,aAAatwB,EAAOz8H,KAwB3C,OAtBkB,QAAdy9H,EACA/+H,EAAQoC,KAAKksJ,WAAWvwB,EAAOz8H,MACvBwiF,GAAQi7C,GAET7gI,MAAMiK,QAAQ42H,IACjB6vB,EAAY7vB,EAAUn2H,MAAMy2I,EAAYrlJ,QAC5CgG,EAAQoC,KAAK2sJ,eAAehwB,EAAWsgB,GACvCztG,EAASxvC,KAAK2sJ,eAAeH,EAAWJ,IACZ,gBAAdzvB,KACV8vB,EAAiBzsJ,KAAK4sJ,aAAajxB,EAAQshB,GAC3CyP,EAAiB1sJ,KAAK4sJ,aAAajxB,EAAQywB,GAC/CxuJ,EAAQoC,KAAK6sJ,gBAAgBlwB,EAAWsgB,EAAawP,GACrDj9G,EAASxvC,KAAK6sJ,gBAAgBlwB,EAAWyvB,EAAaM,IATtD9uJ,EAAQoC,KAAKmsJ,gBAAgBxwB,EAAOz8H,MAWpCwiF,GAAQ9jF,KACmB,IAAvBq/I,EAAYrlJ,OACZoH,EAAOi+I,YAAYr/I,MAAQA,EAAMq/I,EAAY,IAE7Cj+I,EAAOi+I,YAAcr/I,GAG7BoB,EAAOwwC,OAASA,MACTxwC,GAEXqtJ,WAAY,SAAU78G,EAAQs9G,GAAlB,GAGChyJ,GACDm2C,EAHJrzC,KACAhG,EAAS43C,EAAO53C,MACpB,KAASkD,EAAI,EAAGA,EAAIlD,EAAQkD,IACpBm2C,EAAYzB,EAAO10C,GACvB8C,EAAMqzC,GAAa67G,CAEvB,OAAOlvJ,IAEX+uJ,eAAgB,SAAUt5I,EAAOm8B,GAAjB,GAGJ53C,GACKkD,EAHT8C,IACJ,IAAI4xC,EAEA,IADI53C,EAASgH,KAAKoT,IAAIw9B,EAAO53C,OAAQyb,EAAMzb,QAClCkD,EAAI,EAAGA,EAAIlD,EAAQkD,IACxB8C,EAAM4xC,EAAO10C,IAAMuY,EAAMvY,EAGjC,OAAO8C,IAEXivJ,gBAAiB,SAAU7zG,EAAQxJ,EAAQu9G,GAA1B,GAITnvJ,GAEIhG,EACKkD,EACDm2C,EACA+7G,CAJZ,IAJkB,SAAdD,IACAA,EAAYv9G,GAEZ5xC,KACA4xC,EAEA,IADI53C,EAAS43C,EAAO53C,OACXkD,EAAI,EAAGA,EAAIlD,EAAQkD,IACpBm2C,EAAYzB,EAAO10C,GACnBkyJ,EAAeD,EAAUjyJ,GAC7B8C,EAAMqzC,GAAa+oG,EAASgT,EAAch0G,EAGlD,OAAOp7C,IAEXgvJ,aAAc,SAAUjxB,EAAQ2wB,GAAlB,GAGF10J,GACKkD,EACDm2C,EACAg8G,EALRL,IACJ,IAAIN,EAEA,IADI10J,EAAS00J,EAAgB10J,OACpBkD,EAAI,EAAGA,EAAIlD,EAAQkD,IACpBm2C,EAAYq7G,EAAgBxxJ,GAC5BmyJ,EAAkBh8G,IAAcwe,EAAQ,QAAUxe,EAAY,QAClE27G,EAAa9kJ,KAAK6zH,EAAOsxB,IAAoBh8G,EAGrD,OAAO27G,MAGf7P,GAAapxI,QAAU,GAAIoxI,IACvB4C,GAAU,SACVC,GAAU,SACVC,GAAe,0BACfC,GAA6B/jJ,OAAO,IAAM6jJ,GAAU,kCACpDG,GAAuBlpJ,EAAM6J,QAC7BC,KAAM,SAAUusJ,EAAYvxB,EAAQ59G,GAChC/d,KAAKmtJ,iBAAiBD,EAAYvxB,EAAQ59G,IAE9CovI,iBAAkB,SAAUD,EAAYvxB,EAAQ59G,GAA9B,GAKN0gC,GACA2uG,EACA3rH,EACA4rH,EASAC,EAhBJ9xJ,EAAOmgI,EAAOngI,KACd+xJ,EAAiBzN,GAAuBzwI,KAAK69I,EAC7CK,IACAvtJ,KAAKwtJ,YAAcxtJ,KAAKytJ,kBAAkB9xB,EAAQ59G,GAC9C0gC,EAAUz+C,KAAK0tJ,WAAWlyJ,GAC1B4xJ,EAAYptJ,KAAK2tJ,qBAAqBnyJ,EAAMijD,GAAS,GACrDhd,EAAW8rH,EAAe,GAAKprJ,WAAWorJ,EAAe,IAAM,EAC/DF,GACA3/B,IAAKjvE,EAAQ7gD,MAAQwvJ,EAAY3rH,EACjCksF,KAAMlvE,EAAQ7gD,MAAQwvJ,EAAY3rH,GAEtCzhC,KAAK4tJ,YAAc,WACf,MAAOP,KAEJH,EAAWhvJ,SAAWgvJ,EAAWhvJ,QAAQyhJ,KAAY,IAC5D3/I,KAAKwtJ,YAAcxtJ,KAAKytJ,kBAAkB9xB,EAAQ59G,GAC9CuvI,EAAgBttJ,KAAK6tJ,iBAAiBryJ,EAAMwE,KAAK0tJ,WAAWlyJ,IAChEwE,KAAK4tJ,YAAc,SAAUhwJ,GACzB,OACI8vH,IAAK9vH,EAAQ0vJ,EACb3/B,KAAM/vH,EAAQ0vJ,MAK9BG,kBAAmB,SAAU9xB,EAAQ59G,GAAlB,GAKXyvI,GAEIr7I,EAKAs6I,EAXJjxJ,EAAOmgI,EAAOngI,KACd63D,EAAS0pF,GAAapxI,QACtBsxI,EAAc5pF,EAAO4pF,YAAYthB,GACjCjpF,EAAOgvC,GAAQlmF,EAAK,IAAMA,EAAK,KAWnC,OATIuK,IAAQ2sC,IACJvgC,EAAQ4L,EAAQk/H,EAAY/+I,QAAQ6f,GAAS,EACjDyvI,EAAclqI,GAAO,IAAMnR,EAAQ,MAC5B6gC,EAASN,GAChB86G,EAAclqI,WACAovB,KAAS4sG,EAAiB1jJ,SACpC6wJ,EAAiBp5F,EAAOu5F,aAAajxB,EAAQshB,GACjDuQ,EAAclqI,GAAOmpI,EAAexP,EAAY/+I,QAAQ6f,MAErDyvI,GAEXM,cAAe,SAAUC,EAAYb,GAAtB,GACPx/B,GAAKC,EAAM/vH,EAcPowJ,CAbR,KAAKtsE,GAAQwrE,GACT,MAAO,KAEX,IAAIltJ,KAAK4tJ,YACL,MAAO5tJ,MAAK4tJ,YAAYG,EAE5B,IAAIhoJ,GAAQmnJ,GACRx/B,EAAMqgC,EAAab,EAAW,GAC9Bv/B,EAAOogC,EAAab,EAAW,OAC5B,IAAIl6G,EAASp1C,EAAQuE,WAAW+qJ,IACnCx/B,EAAMqgC,EAAanwJ,EACnB+vH,EAAOogC,EAAanwJ,MACjB,CAAA,KAAIA,EAAQiiJ,GAAaxwI,KAAK69I,IAKjC,KAAUpkJ,OAAM,2BAA6BokJ,EAJzCc,GAAeD,GAAc5rJ,WAAWvE,EAAM,IAAM,KACxD8vH,EAAMqgC,EAAanvJ,KAAKC,IAAImvJ,GAC5BrgC,EAAOogC,EAAanvJ,KAAKC,IAAImvJ,GAIjC,OACItgC,IAAKA,EACLC,KAAMA,IAGdkgC,iBAAkB,SAAUryJ,EAAMijD,GAC9B,MAAOz+C,MAAK2tJ,qBAAqBnyJ,EAAMijD,GAAS,GAAQ7/C,KAAKy4D,KAAK5Y,EAAQ/qC,QAE9Ei6I,qBAAsB,SAAUnyJ,EAAMijD,EAASwvG,GAAzB,GAKTtwJ,GACDC,EALJuhF,EAASn/E,KACTpI,EAAS4D,EAAK5D,OACdw2C,EAAQ6/G,EAAWxvG,EAAQ/qC,MAAQ,EAAI+qC,EAAQ/qC,MAC/Cw6I,EAAsB,CAC1B,KAASvwJ,EAAM,EAAGA,EAAM/F,EAAQ+F,IACxBC,EAAQuhF,EAAOquE,YAAYhyJ,EAAKmC,IAChCq1C,EAASp1C,KACTswJ,GAAuBtvJ,KAAK8nC,IAAI9oC,EAAQ6gD,EAAQ7gD,MAAO,GAG/D,OAAOgB,MAAKy4D,KAAK62F,EAAsB9/G,IAE3Cs/G,WAAY,SAAUlyJ,GAAV,GAKCmC,GACDC,EALJuhF,EAASn/E,KACTpI,EAAS4D,EAAK5D,OACd4mD,EAAM,EACN9qC,EAAQ,CACZ,KAAS/V,EAAM,EAAGA,EAAM/F,EAAQ+F,IACxBC,EAAQuhF,EAAOquE,YAAYhyJ,EAAKmC,IAChCq1C,EAASp1C,KACT4gD,GAAO5gD,EACP8V,IAGR,QACI9V,MAAO4gD,EAAM9qC,EACbA,MAAOA,MAIfna,GAAUpB,GAAQoB,YAClBymJ,GAA6B,IAC7BC,GAAS,SACTC,GAAQ,QACRC,GAAoB,GACpBC,GAAiB,EACjBC,GAAc9mJ,GAAQgB,KAAO,KAAQ,EACrC+lJ,GAAkB,WAClBC,GAAmB,YACnBC,GAAoB,YACpBC,GAAqB,aACrBC,GAAoB,YACpBC,GAAqB,aACrBC,GAAmB,EACnB5wI,GAAO,OACP6wI,GAAc,cACdC,GAAM,MACNC,GAAS,SACTC,GAAO,OACPC,GAAO,OACPC,GAAM,MACNC,GAAW,UACXC,GAAS,SACTC,GAAS,SACTC,GAAc,cACdC,GAAS,SACTC,GAAQ,QACRC,GAAS,SACTC,GAAuB,sBACvBC,GAAO,OACPC,GAAO,OACPC,GAAM,MACNC,GAAa,YACbC,GAAa,YACbC,GAAgB,eAChBC,GAAa,YACbC,GAAe,cACfC,GAAa,YACbC,GAAY,WACZC,GAAe,cACfC,GAAU,UACVC,GAAe,cACfC,GAAgB,eAChBC,GAAoB,kBACpBC,GAAkB,iBAClBC,GAAgB,eAChBC,GAAY,YACZC,IACA3B,GACAK,GACAK,GACAN,GACAH,GACAsB,GACApB,GACAgB,GACAD,GACAQ,GACAlB,IAEAoB,GAAoB,kBACpBC,GAAoB,kBACpBC,GAAe,cACfC,GAAe,cACfC,GAAkB,gBAClBC,GAAkB,gBAClB9jF,GAAO,OACP+jF,GAAW,UACXC,GAAa,YACbC,GAAa,YACbC,GAAO,OACPC,GAAW,UACXC,GAAe,cACftrF,GAAS,SACTurF,GAAa,YACbC,GAAS,SACTC,GAAe,cACfC,GAAe,cACfC,GAAc,MACdC,GAAW,WACXC,GAAa,YACbC,GAAc,aACdC,GAAc,aACdC,GAAa,4BACbC,GAAmB,IACnBhyB,IACA4tB,2BAA4BA,GAC5BC,OAAQA,GACR6C,kBAAmBA,GACnBC,kBAAmBA,GACnBC,aAAcA,GACdC,aAAcA,GACd/C,MAAOA,GACPC,kBAAmBA,GACnBC,eAAgBA,GAChBC,YAAaA,GACbC,gBAAiBA,GACjBC,iBAAkBA,GAClBC,kBAAmBA,GACnBC,mBAAoBA,GACpBC,kBAAmBA,GACnBC,mBAAoBA,GACpBC,iBAAkBA,GAClBC,YAAaA,GACb7wI,KAAMA,GACN+wI,OAAQA,GACRC,KAAMA,GACN+C,SAAUA,GACVtC,OAAQA,GACRP,IAAKA,GACLI,YAAaA,GACbO,IAAKA,GACLN,OAAQA,GACRN,KAAMA,GACNyB,gBAAiBA,GACjBvB,SAAUA,GACVS,KAAMA,GACNgB,UAAWA,GACXjB,KAAMA,GACNN,OAAQA,GACRsB,cAAeA,GACfH,cAAeA,GACfH,aAAcA,GACdI,kBAAmBA,GACnBL,UAAWA,GACXV,qBAAsBA,GACtBY,QAASA,GACTC,aAAcA,GACdnB,OAAQA,GACRa,WAAYA,GACZE,WAAYA,GACZD,aAAcA,GACdH,WAAYA,GACZD,WAAYA,GACZE,cAAeA,GACf2B,OAAQA,GACRT,gBAAiBA,GACjBC,gBAAiBA,GACjBW,YAAaA,GACbzkF,KAAMA,GACNgkF,WAAYA,GACZD,SAAUA,GACVE,WAAYA,GACZC,KAAMA,GACNC,SAAUA,GACVC,aAAcA,GACdtrF,OAAQA,GACRurF,WAAYA,GACZ5C,IAAKA,GACLU,MAAOA,GACPwC,WAAYA,GACZC,YAAaA,GACbC,YAAaA,GACbC,WAAYA,GACZC,iBAAkBA,GAClBR,aAAcA,GACdC,aAAcA,GACdhB,sBAAuBA,IAEvBwB,GAA0B,EAC1BC,GAAelxB,GAAa1yH,QAC5BC,KAAM,SAAU+sH,EAAKC,EAAMpgC,EAAY0oC,EAAO0F,EAAQv7H,GAClDgzH,GAAanvH,GAAGtD,KAAKwH,KAAKnI,KAAMI,GAChCJ,KAAK0tH,IAAMA,EACX1tH,KAAK2tH,KAAOA,EACZ3tH,KAAKutF,WAAaA,EAClBvtF,KAAKi2H,MAAQA,EACbj2H,KAAK27H,OAASA,GAElBhlB,OAAQ,SAAUqgB,GAAV,GAUA2J,GATAwtB,EAAUnuJ,KAAKI,QAAQ+tJ,QACvB5gE,EAAavtF,KAAKutF,WAClB95D,EAAOzzB,KAAKouJ,UACZC,EAAW56H,EAAKwwG,QAAQjkI,KAAK0tH,IAAK1tH,KAAK2tH,MACvC2gC,EAAYt3B,EAAU7/D,SACtBo3F,EAAYvuJ,KAAKwuJ,aAAax3B,EAAWzpC,GACzCkhE,EAAWlhE,EAAa+gE,EAAUr7H,EAAIq7H,EAAUj9I,EAChDq9I,EAAWD,EAAWF,EACtBI,EAASF,EAAWF,CAEpBhhE,IACAozC,GACI,GAAI76C,IAAMwoE,EAAUr7H,EAAGo7H,EAASv3F,IAChC,GAAIgvB,IAAMwoE,EAAUr7H,EAAGo7H,EAASr3F,KAEhCm3F,GACAxtB,EAAW74H,KAAK,GAAIg+E,IAAM4oE,EAAUL,EAASv3F,IAAK,GAAIgvB,IAAM6oE,EAAQN,EAASv3F,IAAK,GAAIgvB,IAAM4oE,EAAUL,EAASr3F,IAAK,GAAI8uB,IAAM6oE,EAAQN,EAASr3F,KAEnJh3D,KAAKojC,IAAM,GAAI8mF,IAAIwkC,EAAUL,EAASv3F,GAAI63F,EAAQN,EAASr3F,MAE3D2pE,GACI,GAAI76C,IAAMuoE,EAASx3F,GAAIy3F,EAAUj9I,GACjC,GAAIy0E,IAAMuoE,EAASt3F,GAAIu3F,EAAUj9I,IAEjC88I,GACAxtB,EAAW74H,KAAK,GAAIg+E,IAAMuoE,EAASx3F,GAAI63F,GAAW,GAAI5oE,IAAMuoE,EAASx3F,GAAI83F,GAAS,GAAI7oE,IAAMuoE,EAASt3F,GAAI23F,GAAW,GAAI5oE,IAAMuoE,EAASt3F,GAAI43F,IAE/I3uJ,KAAKojC,IAAM,GAAI8mF,IAAImkC,EAASx3F,GAAI63F,EAAUL,EAASt3F,GAAI43F,IAE3D3uJ,KAAK2gI,WAAaA,GAEtB6tB,aAAc,SAAUprH,EAAKmqD,GAAf,GACN7e,GAAU6e,EAAanqD,EAAInqC,QAAUmqC,EAAIlqC,SACzCq1J,EAAY3vJ,KAAKoT,IAAIpT,KAAKpE,MAAMk0E,EAAU,GAAI21E,KAA4BA,EAC9E,OAAOkK,IAEXp0B,aAAc,WAAA,GACNh7C,GAASn/E,KACTI,EAAUJ,KAAKI,QACf+hG,EAAS/hG,EAAQ+hG,MACjBA,GACAniG,KAAKmiG,OAASA,GACVurB,IAAK1tH,KAAK0tH,IACVC,KAAM3tH,KAAK2tH,KACXlvD,KAAMz+D,KAAKojC,IAAI40F,SACf9vH,OAAQlI,KAAK45H,YACbx5H,SACI+tJ,QAAS/tJ,EAAQ+tJ,QACjBl6E,MAAO7zE,EAAQ6zE,MACf0wB,KAAMvkG,EAAQukG,MAElBw1B,aAAc,WACVh7C,EAAOyvE,qBACP,IAAI/tB,GAAgB1hD,EAAOgjB,MAE3B,cADOhjB,GAAOgjB,OACP0+B,KAIf7gI,KAAK4uJ,uBAGbA,oBAAqB,WAAA,GAaRjxJ,GACDgnG,EAbJxlB,EAASn/E,KACT4+E,EAAM5+E,KACNI,EAAUw+E,EAAIx+E,QACdugI,EAAa/hD,EAAI+hD,WACjB0D,GACArnC,QACI/oB,MAAO7zE,EAAQ6zE,MACfh7E,MAAOmH,EAAQukG,KAAK1rG,MACpB4lH,SAAUz+G,EAAQukG,KAAKka,UAI/B,KADAuU,GAAanvH,GAAGk2H,aAAahyH,KAAKnI,MACzBrC,EAAM,EAAGA,EAAMgjI,EAAW/oI,OAAQ+F,GAAO,EAC1CgnG,EAAO,GAAI7H,IAAKunC,GAAaj+F,OAAOu6F,EAAWhjI,GAAKs1B,EAAG0tG,EAAWhjI,GAAK0T,GAAG4+E,OAAO0wC,EAAWhjI,EAAM,GAAGs1B,EAAG0tG,EAAWhjI,EAAM,GAAG0T,GAChIm3G,GAAiB7jB,GACjBxlB,EAAOgjB,OAAOr+D,OAAO6gE,MAIjCglB,GAAkB26B,IACd/3E,WACIrtE,KAAM+gJ,GACNrsH,MAAOosH,IAEXmO,SAAS,EACTxpD,MAAQ1rG,MAAO,GACf0qC,OAAQ,IAER4gH,GAAsBD,GAAa5jJ,QACnC0tJ,QAAS,WACL,GAAI36H,GAAOzzB,KAAKi2H,MAAM44B,gBAAgB7uJ,KAAK27H,OAC3C,OAAOloG,MAGX6mH,GAAmB,EA2CnBkK,GAAmBpxB,GAAa1yH,QAChCC,KAAM,SAAUmjI,EAAU1jI,GACtBgzH,GAAanvH,GAAGtD,KAAKwH,KAAKnI,KAAMI,GAChCJ,KAAK8jI,SAAWA,EAChB9jI,KAAK+5H,aAAe+J,EAAS/J,aAC7B/5H,KAAK42I,aAAe9S,EAASgrB,mBAAmB1uJ,EAAQu7H,OAAO,IAC/D37H,KAAK+uJ,mBACL/uJ,KAAKyoF,UACLzoF,KAAKgvJ,kBACLhvJ,KAAKivJ,gBACLjvJ,KAAKkvJ,iBACLlvJ,KAAKmvJ,eACLnvJ,KAAKuI,UAETA,OAAQ,WACJvI,KAAKovJ,mBAAmBpvJ,KAAKqvJ,SAASjoJ,KAAKpH,QAE/CsvJ,aAAc,SAAU3zB,EAAQ4zB,GAAlB,GAGFr1G,GAFJ95C,EAAUJ,KAAKkvJ,cAAcK,EAKjC,OAJKnvJ,KACG85C,EAAWl6C,KAAKwvJ,YAAYzoJ,UAAUmzC,SAC1Cl6C,KAAKkvJ,cAAcK,GAAYnvJ,EAAUxF,MAAes/C,GAAYte,UAAW57B,KAAKI,QAAQqvJ,YAAc9zB,IAEvGv7H,GAEXsvJ,UAAW,SAAUrnE,GAAV,GAKCmhD,GACAwlB,EACAW,EACAC,EACK90J,EACDyjF,EAEI0N,EACA4jE,CAZhB,KAAKxnE,EACD,MAAO,EAEX,IAAIroF,KAAKI,QAAQ0vJ,cAAgB98G,EAASq1C,EAAMzqF,OAAQ,CAKpD,IAJI4rI,EAAanhD,EAAMmhD,WACnBwlB,EAAiBhvJ,KAAKgvJ,eAAexlB,GACrCmmB,KACAC,EAAc,EACT90J,EAAI,EAAGA,EAAIk0J,EAAep3J,OAAQkD,IAEvC,GADIyjF,EAAQywE,EAAel0J,GAChB,CAGP,GAFImxF,EAAQ5D,EAAMszC,OAAO1vC,MACrB4jE,EAAatxE,EAAMo9C,OAAO1vC,MAC1BA,GAAS4jE,GAAc5jE,EAAMj4C,QAAU67G,EAAW77G,MAClD,QAEAhB,GAASurC,EAAM3gF,SACfgyJ,GAAehxJ,KAAKC,IAAI0/E,EAAM3gF,OAC9B+xJ,EAAY7nJ,KAAKlJ,KAAKC,IAAI0/E,EAAM3gF,SAI5C,GAAIgyJ,EAAc,EACd,MAAOvnE,GAAMzqF,MAAQgyJ,EAG7B,MAAOvnE,GAAMzqF,OAEjBmyJ,UAAW,SAAU1nE,EAAOrtD,GAAjB,GAKHg0H,GAEIU,EACAM,EACAC,EACAC,EACKp1J,EACDyjF,EAIA0N,EACA4jE,EASAM,EAkBRx0B,EACA6L,EACA7W,EA7CAxxC,EAASn/E,IAKb,IAJmB,SAAfg7B,IACAA,EAAa,GAEbg0H,EAAiBhvJ,KAAKgvJ,eAAe3mE,EAAMmhD,YAC3CxpI,KAAKI,QAAQgwJ,UAAW,CAKxB,IAJIV,EAAY1vJ,KAAK0vJ,UAAUrnE,GAC3B2nE,EAAWN,GAAa,EACxBO,EAAYj1H,EACZk1H,GAAe,EACVp1J,EAAI,EAAGA,EAAIk0J,EAAep3J,SAC3B2mF,EAAQywE,EAAel0J,GACvButF,IAAU9J,GAFyBzjF,IAAK,CAO5C,GAFImxF,EAAQ5D,EAAMszC,OAAO1vC,MACrB4jE,EAAatxE,EAAMo9C,OAAO1vC,MAC1BA,GAAS4jE,EAAY,CACrB,SAAW5jE,KAAUqzD,EAAiB9+I,QAAUyrF,IAAU4jE,EACtD,QAEJ,IAAI5jE,EAAMj4C,OAASi4C,EAAMj4C,QAAU67G,EAAW77G,MAC1C,SAGJm8G,EAAahxE,EAAOuwE,UAAUnxE,IAC9B4xE,GAAc,GAAKH,GAAYG,EAAa,IAAMH,KAClDC,GAAaE,EACbT,GAAaS,EACbD,GAAe,EACX/wE,EAAO/+E,QAAQ0vJ,eACfJ,EAAY9wJ,KAAKoT,IAAI09I,EAAW,KAO5C,MAHIQ,KACAD,GAAaj1H,IAGbi1H,EACAP,GAMR,MAHI/zB,GAAStzC,EAAMszC,OACf6L,EAAYxnI,KAAK6uJ,gBAAgBlzB,GACjChL,EAAoB3wH,KAAKqwJ,0BAA0B7oB,IAEnD7W,EACAtoC,EAAMzqF,OAAS+yH,IAGvB2/B,YAAa,SAAUvS,EAAUwS,GAApB,GAIAz1J,GACDk0J,EAIKwB,EACDnoE,EAGQp7D,EAZhBkyD,EAASn/E,KACTgS,EAAM07F,EACNh1G,EAAMmxH,CACV,KAAS/uH,EAAI,EAAGA,EAAIkF,KAAKgvJ,eAAep3J,OAAQkD,IAE5C,GADIk0J,EAAiB7vE,EAAO6vE,eAAel0J,GAI3C,IAAS01J,EAAM,EAAGA,EAAMxB,EAAep3J,OAAQ44J,IACvCnoE,EAAQ2mE,EAAewB,GACvBnoE,IACIA,EAAMszC,OAAO1vC,QAAUskE,GAAaloE,EAAMszC,OAAOloG,OAASsqH,IACtD9wH,EAAKkyD,EAAO4wE,UAAU1nE,EAAO,GAAG,GAChC3G,GAAQz0D,IAAOjjB,SAASijB,KACxBv0B,EAAMkG,KAAKlG,IAAIA,EAAKu0B,GACpBjb,EAAMpT,KAAKoT,IAAIA,EAAKib,KAMxC,QACIjb,IAAKA,EACLtZ,IAAKA,IAGb+3J,iBAAkB,WAAA,GAOD31J,GACD6gI,EACAoiB,EACAh/I,EACA2xJ,EAGIC,EAbZxxE,EAASn/E,KACT4+E,EAAM5+E,KAAKI,QACXgwJ,EAAYxxE,EAAIwxE,UAChBQ,EAAchyE,EAAI+8C,OAClBk1B,IACJ,IAAIT,EACA,IAASt1J,EAAI,EAAGA,EAAI81J,EAAYh5J,OAAQkD,IAChC6gI,EAASi1B,EAAY91J,GACrBijJ,EAAWpiB,EAAOloG,KAClB10B,EAAMg/I,EAAWpiB,EAAO1vC,MACxBykE,EAASG,EAAY9xJ,GACpB2xJ,IACDA,EAASvxE,EAAOmxE,YAAYvS,EAAUpiB,EAAO1vC,OACzC0kE,EAAcxxE,EAAOwxE,YACrBA,IACIA,EAAY7hJ,SAASlX,SACrB84J,EAAO1+I,IAAMpT,KAAKoT,IAAI0+I,EAAO1+I,IAAKuP,EAAQqoG,kBAAkB+mC,EAAY7hJ,UAAUkD,MAElF2+I,EAAYX,SAASp4J,SACrB84J,EAAOh4J,IAAMkG,KAAKlG,IAAIg4J,EAAOh4J,IAAK6oB,EAAQqoG,kBAAkB+mC,EAAYX,UAAUt3J,OAGtFg4J,EAAO1+I,MAAQ07F,GAAagjD,EAAOh4J,MAAQmxH,EAC3CgnC,EAAY9xJ,GAAO2xJ,EAEnBA,EAAS,MAGbA,IACAvxE,EAAO4vE,gBAAgBhR,GAAY2S,IAKnDI,YAAa,SAAUzoE,EAAO7sF,EAAMguI,GAAvB,GAOL6jB,GANAzvJ,EAAQyqF,EAAMzqF,MACd+9H,EAAStzC,EAAMszC,OACf4zB,EAAWlnE,EAAMknE,SACjB5W,EAAYtwD,EAAMjoF,QAAQu4I,UAC1BoY,EAAWv1J,EAAKg0C,OAAO8wG,IACvB0Q,EAAYx1J,EAAKg0C,OAAO+wG,GAExBvtG,GAAS+9G,IAAa/9G,EAASg+G,GAC/B3D,GACI3/B,IAAKqjC,EACLpjC,KAAMqjC,GAEHrY,GAAaj3D,GAAQi3D,EAAU/6I,SACtCoC,KAAKixJ,kBAAoBjxJ,KAAKixJ,sBAC9BjxJ,KAAKixJ,kBAAkB1B,GAAYvvJ,KAAKixJ,kBAAkB1B,IAAa,GAAIxP,IAAqBpH,EAAU/6I,MAAO+9H,EAAQlsE,GACzH49F,EAAartJ,KAAKixJ,kBAAkB1B,GAAUzB,cAAclwJ,EAAO+6I,EAAU/6I,QAE7EyvJ,IACAhlE,EAAMqlC,IAAM2/B,EAAW3/B,IACvBrlC,EAAMslC,KAAO0/B,EAAW1/B,KACxB3tH,KAAKkxJ,iBAAiB7oE,EAAOmhD,KAGrC0nB,iBAAkB,SAAU7oE,EAAOmhD,GAAjB,GAON2nB,GAIA3hH,EAOJ4hH,EAjBA7jE,GAAcvtF,KAAKI,QAAQqvJ,WAC3BrvJ,EAAUioF,EAAMjoF,QAAQu4I,UACxBhd,EAAStzC,EAAMszC,OACfjO,EAAMrlC,EAAMqlC,IACZC,EAAOtlC,EAAMslC,IACb3tH,MAAKI,QAAQgwJ,WACTe,EAAoBnxJ,KAAKmxJ,kBAAkB9oE,EAAOmhD,GACtD9b,EAAMyjC,EAAkBzjC,IACxBC,EAAOwjC,EAAkBxjC,OAErBn+E;AACAg6F,WAAYA,EACZ7N,OAAQA,GAEZ37H,KAAKqxJ,aAAczzJ,MAAO8vH,GAAOl+E,GACjCxvC,KAAKqxJ,aAAczzJ,MAAO+vH,GAAQn+E,IAElC4hH,EAAW,GAAI7M,IAAoB72B,EAAKC,EAAMpgC,EAAYvtF,KAAM27H,EAAQv7H,GAC5EioF,EAAMswD,WAAayY,GACnB/oE,EAAMvkD,OAAOstH,IAEjBD,kBAAmB,SAAU9oE,EAAOmhD,GAAjB,GACXkmB,GAAY1vJ,KAAK+vJ,UAAU1nE,EAAO,GAAG,GAAKA,EAAMzqF,MAChD8vH,EAAMrlC,EAAMqlC,IAAMgiC,EAClB/hC,EAAOtlC,EAAMslC,KAAO+hC,CAWxB,OAVA1vJ,MAAK2wJ,YAAc3wJ,KAAK2wJ,cACpBX,YACAlhJ,aAEA4+G,EAAM,IACN1tH,KAAK2wJ,YAAY7hJ,SAAS06H,GAAc5qI,KAAKoT,IAAIhS,KAAK2wJ,YAAY7hJ,SAAS06H,IAAe,EAAG9b,IAE7FC,EAAO,IACP3tH,KAAK2wJ,YAAYX,SAASxmB,GAAc5qI,KAAKlG,IAAIsH,KAAK2wJ,YAAYX,SAASxmB,IAAe,EAAG7b,KAG7FD,IAAKA,EACLC,KAAMA,IAGd0hC,SAAU,SAAU7zJ,EAAMg0C,GAAhB,GAQFy/G,GAIA5mE,EAXAmhD,EAAah6F,EAAOg6F,WACpB7N,EAASnsF,EAAOmsF,OAChB4zB,EAAW//G,EAAO+/G,SAClBP,EAAiBhvJ,KAAKgvJ,eAAexlB,EACpCwlB,KACDhvJ,KAAKgvJ,eAAexlB,GAAcwlB,MAElCC,EAAejvJ,KAAKivJ,aAAaM,GAChCN,IACDjvJ,KAAKivJ,aAAaM,GAAYN,MAE9B5mE,EAAQroF,KAAKsxJ,YAAY91J,EAAMg0C,GAC/B64C,IACA3xF,EAAEgK,OAAO2nF,EAAO74C,GAChB64C,EAAMkpE,MAAQvxJ,KACdqoF,EAAMmpE,SAAWh2J,EAAKg0C,OAAOgiH,SACxB9vE,GAAQ2G,EAAM5hE,YACf4hE,EAAM5hE,SAAWk1G,EAAOngI,KAAKguI,IAEjCxpI,KAAK8wJ,YAAYzoE,EAAO7sF,EAAMguI,IAElCxpI,KAAKyoF,OAAO3gF,KAAKugF,GACjB4mE,EAAannJ,KAAKugF,GAClB2mE,EAAelnJ,KAAKugF,GACpBroF,KAAKqxJ,YAAY71J,EAAKyhJ,YAAaztG,IAEvCiiH,iBAAkB,SAAUrxJ,EAASxC,EAAOg+H,EAAU4N,EAAY7N,EAAQ4zB,GAAxD,GAoBVD,GAnBA38G,GACAuH,SAAUyhF,EAAO6iB,UACjBnE,UACI,OACA,YACA,UACA,UACA,UACA,WACA,SACA,SACA,sBACA,wBAGJqX,EAAS1xJ,KAAKmvJ,YAAYI,EAe9B,OAdK7tE,IAAQgwE,KACT1xJ,KAAKmvJ,YAAYI,GAAYmC,EAASxX,EAAY95I,KAAauyC,GAAO,IAEtE28G,EAAelvJ,EACfsxJ,IACApC,EAAe10J,MAAe00J,GAC9BpV,EAAYoV,GACR1xJ,MAAOA,EACPg+H,SAAUA,EACVzpH,MAAOq3H,EACP7N,OAAQA,EACRl1G,SAAUk1G,EAAOngI,KAAKguI,IACvB72F,IAEA28G,GAEX+B,YAAa,SAAU71J,EAAMg0C,GAAhB,GACLuuG,GAAWvuG,EAAOmsF,OAAOloG,KACzB71B,EAAQpC,EAAKoC,MACb0+I,EAAYt8I,KAAK+uJ,gBAAgBhR,EACjC/zI,UAASpM,IAAoB,OAAVA,IACnB0+I,EAAYt8I,KAAK+uJ,gBAAgBhR,GAAYzB,IACzCtqI,IAAK07F,EACLh1G,IAAKmxH,GAETyyB,EAAUtqI,IAAMpT,KAAKoT,IAAIsqI,EAAUtqI,IAAKpU,GACxC0+I,EAAU5jJ,IAAMkG,KAAKlG,IAAI4jJ,EAAU5jJ,IAAKkF,KAGhDixJ,gBAAiB,SAAUlzB,GAAV,GACTmI,GAAW9jI,KAAK8jI,SAChBia,EAAWpiB,EAAOloG,KAClBA,EAAOsqH,EAAWja,EAAS6tB,eAAe5T,GAAYja,EAAS0D,SACnE,KAAK/zG,EACD,KAAU3qB,OAAM,yCAA2Ci1I,EAE/D,OAAOtqH,IAEXkjF,OAAQ,SAAUqgB,GAAV,GACA73C,GAASn/E,KACT4xJ,EAAgB5xJ,KAAK4xJ,iBACrBC,EAAc7xJ,KAAKyoF,OACnBmuD,EAAe52I,KAAK42I,aACpB2V,EAAU,CACdvsJ,MAAKovJ,mBAAmB,SAAU5zJ,EAAMg0C,GAAhB,GAUZugH,GACA+B,EAEIC,EAZRvoB,EAAah6F,EAAOg6F,WACpB6R,EAAgB7rG,EAAOmsF,OACvB6L,EAAYroD,EAAO0vE,gBAAgBxT,GACnChzD,EAAQwpE,EAAYtF,KACpByF,EAAeJ,EAAcpoB,EAC5BwoB,KACDJ,EAAcpoB,GAAcwoB,EAAe7yE,EAAO6yE,aAAapb,EAAcpN,EAAYhC,IAEzFn/C,IACI0nE,EAAY5wE,EAAO4wE,UAAU1nE,EAAOm/C,EAAUxsG,cAC9C82H,EAAYtqB,EAAUvD,QAAQ8rB,EAAU,GAAIA,EAAU,IAAK5wE,EAAO/+E,QAAQyjC,MAC1EiuH,GACIC,EAAY5yE,EAAO4yE,UAAUC,EAAcF,GAC/CzpE,EAAM4pE,UAAY9yE,EAAO8yE,UAAU5pE,EAAOm/C,GAC1Cn/C,EAAM6pE,WAAanC,EAAU,GACzB5wE,EAAO/+E,QAAQ0vJ,eACfznE,EAAMrvF,WAAammF,EAAOuwE,UAAUrnE,IAExClJ,EAAOgzE,YAAY9pE,EAAO0pE,IAE1B1pE,EAAM7kF,SAAU,KAI5BxD,KAAKoyJ,iBAAiBR,GACtB5xJ,KAAKojC,IAAM4zF,GAEfi7B,UAAW,SAAU5pE,EAAOm/C,GAAjB,GACH7W,GAAoB3wH,KAAKqwJ,0BAA0B7oB,GACnD5pI,EAAQyqF,EAAMzqF,KAClB,OAAO4pI,GAAUpnI,QAAQE,QAAU1C,EAAQ+yH,EAAoB/yH,GAAS+yH,GAE5E0/B,0BAA2B,SAAU7oB,GAAV,GACnBoP,GAAe52I,KAAK42I,aACpBx2I,EAAUonI,EAAUpnI,QACpBiyJ,KAAoBn8I,OAAO9V,EAAQosI,oBAAsBpsI,EAAQuwH,kBACrE,OAAO0hC,GAAezb,EAAa0b,WAAa,IAAM,GAE1DH,YAAa,SAAU9pE,EAAO0pE,GAC1B1pE,EAAMsuB,OAAOo7C,IAEjBK,iBAAkB,aAElBL,UAAW,SAAUC,EAAcF,GAAxB,GACH1xJ,GAAUJ,KAAKI,QACfqvJ,EAAarvJ,EAAQqvJ,WACrB/rB,EAAQ+rB,EAAaqC,EAAYE,EACjCruB,EAAQ8rB,EAAauC,EAAeF,CACxC,OAAO,IAAI5nC,IAAIwZ,EAAM7sE,GAAI8sE,EAAM7sE,GAAI4sE,EAAM3sE,GAAI4sE,EAAM3sE,KAEvDg7F,aAAc,SAAUpb,EAAcpN,GAClC,MAAOoN,GAAa3S,QAAQuF,IAEhC4lB,mBAAoB,SAAUzuI,GAAV,GAMP4uI,GAGA/lB,EACI+oB,EACDlX,EACAmX,EACA71B,EASH81B,EArBLtzE,EAASn/E,KACT27H,EAAS37H,KAAKI,QAAQu7H,OACtBiL,EAAa5mI,KAAK42I,aAAax2I,QAAQwmI,eACvClzH,EAAQ6mI,EAAgB5e,GACxB6e,EAAc7e,EAAO/jI,MACzB,KAAS23J,EAAW,EAAGA,EAAW/U,EAAa+U,IAC3CpwE,EAAOuzE,oBAAoB/2B,EAAO4zB,GAAW,sBAAuBA,EAAU5uI,EAElF,KAAS6oH,EAAa,EAAGA,EAAa91H,EAAO81H,IACzC,IAAS+oB,EAAa,EAAGA,EAAa/X,EAAa+X,IAC3ClX,EAAgB1f,EAAO42B,GACvBC,EAAkB5rB,EAAW4C,GAC7B7M,EAAYx9C,EAAOwzE,WAAWtX,EAAekX,EAAY/oB,GAC7D7oH,EAASg8G,GACLf,SAAU42B,EACVhpB,WAAYA,EACZ7N,OAAQ0f,EACRkU,SAAUgD,GAItB,KAASE,EAAa,EAAGA,EAAajY,EAAaiY,IAC/CtzE,EAAOuzE,oBAAoB/2B,EAAO82B,GAAa,sBAAuBA,EAAY9xI,IAG1F+xI,oBAAqB,SAAU/2B,EAAQ59G,EAAOwxI,EAAU5uI,GAAnC,GAGT6oH,GACA7M,EAHJi2B,EAAkBj3B,EAAO59G,EACzB60I,KACIppB,EAAaopB,EAAgBppB,WAC7B7M,EAAY38H,KAAK2yJ,WAAWh3B,EAAQ4zB,EAAU/lB,EAAYopB,EAAgBlgH,MAC9E/xB,EAASg8G,GACLf,SAAUg3B,EAAgBh3B,SAC1B4N,WAAYA,EACZ7N,OAAQA,EACR4zB,SAAUA,EACV9oI,SAAUmsI,EAAgBlgH,SAItCigH,WAAY,SAAUh3B,EAAQ4zB,EAAU/lB,EAAY92F,GAAxC,GAIJmgH,GAIAr3J,CAIJ,OAXKwE,MAAK8yJ,aACN9yJ,KAAK8yJ,eAELD,EAAY7yJ,KAAK8yJ,WAAWvD,GAC3BsD,IACDA,EAAY7yJ,KAAK8yJ,WAAWvD,OAE5B/zJ,EAAOq3J,EAAUrpB,GAChBhuI,IACDA,EAAOq3J,EAAUrpB,GAAcuT,GAAapxI,QAAQqxI,UAAUrhB,EAAQ6N,EAAY92F,IAE/El3C,GAEXu3J,iBAAkB,SAAU1qE,EAAOt/E,GAC/B,MAAoB,QAAhBs/E,EAAMzqF,MACC,GAEJoC,KAAK+5H,aAAahxH,OAAO6sH,KAAK7sH,EAAQs/E,EAAMzqF,QAEvDmwJ,WAAY,SAAUvyJ,GAClB,MAAOA,GAAKyhJ,YAAYr/I,SAGhC+rH,GAAkB66B,IACd7oB,UACA8zB,YAAY,EACZW,WAAW,EACXvsH,MAAM,IAEN4gH,IACAzjI,MAAO,SAAUi1G,EAAOhuH,GACpB,MAAOguH,GAAMjuH,QAAQg7I,GAAchjJ,KAAK8gI,UAAU74H,KAEtD84H,MAAO,SAAU9K,EAAOhuH,GACpB,MAAOguH,GAAMjuH,QAAQi7I,GAAcjjJ,KAAK8gI,UAAU74H,KAEtD64H,UAAW,SAAU74H,GACjB,OACIrK,MAAOoC,KAAKpC,MACZ5E,WAAYgH,KAAKhH,WACjBk5J,WAAYlyJ,KAAKkyJ,WACjBt2B,SAAU57H,KAAK47H,SACfD,OAAQ37H,KAAK27H,OACbl1G,SAAUzmB,KAAKymB,SACfo1G,aAAc77H,KAAK67H,aACnBztF,MAAOpuC,KAAKouC,MACZr2C,QAAS8qF,GAAa56E,GACtBqY,cAAerY,EACfogF,MAAOroF,QAIf0kJ,IACAsO,WAAY,WAAA,GACJ5yJ,GAAUJ,KAAKI,QAAQmiI,MACvBntG,EAAOp1B,KAAKwxJ,UAAYpxJ,EAAQs1C,MAAMtgB,IACtCh1B,GAAQoD,WAAY,GAASk+E,GAAQtsD,IAAkB,OAATA,IAC9Cp1B,KAAKsiI,KAAO,GAAI/gH,GAAQ4yG,MACpBv2H,MAAOoC,KAAKpC,MACZw3B,KAAMA,EACN3O,SAAUzmB,KAAKymB,SACfm1G,SAAU57H,KAAK47H,SACfD,OAAQ37H,KAAK27H,QACd37H,KAAKI,QAAQmiI,MAAOviI,KAAKuxJ,MAAMx3B,cAClC/5H,KAAK8jC,OAAO9jC,KAAKsiI,SAIzBqiB,GAAQ,QACRC,GAAQ,QACRC,GAAYzxB,GAAa1yH,QACzBC,KAAM,SAAU/C,EAAOwC,GACnBgzH,GAAanvH,GAAGtD,KAAKwH,KAAKnI,MAC1BA,KAAKpC,MAAQA,EACboC,KAAKI,QAAUA,EACfJ,KAAKiyJ,UAAY1uE,GAAevjF,KAAKI,QAAQ6xJ,WAAW,GACxDjyJ,KAAKizJ,iBAAkB,GAE3B1qJ,OAAQ,WAAA,GAaI2qJ,GACAC,EAbJv0E,EAAM5+E,KAAKI,QACXy0I,EAAUj2D,EAAIi2D,QACd3T,EAAStiD,EAAIsiD,MACblhI,MAAKozJ,YAGTpzJ,KAAKozJ,WAAY,EACbve,EAAQrxI,SAAWqxI,EAAQ92I,OAC3BiC,KAAKshF,OAASthF,KAAKqzJ,eACnBrzJ,KAAK8jC,OAAO9jC,KAAKshF,SAEjB4/C,EAAO19H,UACH0vJ,EAAgB9pC,GAAY8X,GAC5BiyB,EAAYnzJ,KAAKpC,MACjBs1J,EACAC,EAAYD,GACRzsI,SAAUzmB,KAAKymB,SACfm1G,SAAU57H,KAAK47H,SACfh+H,MAAOoC,KAAKpC,MACZ5E,WAAYgH,KAAKhH,WACjBk5J,WAAYlyJ,KAAKkyJ,WACjBv2B,OAAQ37H,KAAK27H,SAEVuF,EAAOn4H,SACdoqJ,EAAYnzJ,KAAKszJ,YAAYpyB,EAAOn4H,SAExC/I,KAAK01C,MAAQ,GAAIo+E,IAAQq/B,EAAWv4J,IAChC2wF,MAAOvgB,EACP2gB,OAAQ3gB,EACRloC,QACInqC,KAAM,EACNC,MAAO,GAEX+qC,OAAQ4/C,GAAe29C,EAAOv9F,OAAQ3jC,KAAK27H,OAAOh4F,SACnDu9F,IACHlhI,KAAK8jC,OAAO9jC,KAAK01C,QAErB11C,KAAKgzJ,aACDhzJ,KAAKoxJ,UACLpxJ,KAAK8jC,OAAO9jC,KAAKoxJ,YAGzBmC,aAAc,WAAA,GACNnzJ,GAAUJ,KAAKI,QAAQy0I,QACvB71C,EAAa5+F,EAAQ4+F,WACrBq9B,EAASzhI,IAAaq5E,MAAOj0E,KAAKi0E,OAAS7zE,EAAQi8H,OAIvD,OAHK36C,IAAQ26C,EAAOpoD,SAChBooD,EAAOpoD,MAAQ,GAAIQ,IAAMuqB,GAAYxf,WAAW2gE,IAAmBpiE,SAEhEs+C,GAEXlC,aAAc,aAEdk5B,aAAc,WAAA,GACNjzJ,GAAUJ,KAAKI,QAAQy0I,QACvBvzD,EAAS,GAAIgyC,KACbp0H,KAAMkB,EAAQlB,KACdjG,MAAOmH,EAAQrC,KACf7E,OAAQkH,EAAQrC,KAChB2lC,SAAUtjC,EAAQsjC,SAClBs7D,WAAY5+F,EAAQ4+F,WACpBq9B,OAAQr8H,KAAKuzJ,eACbrvH,QAAS9jC,EAAQ8jC,QACjBP,OAAQ4/C,GAAenjF,EAAQujC,OAAQ3jC,KAAK27H,OAAOh4F,QACnD4oC,UAAWnsE,EAAQmsE,UACnB41B,OAAQ/hG,EAAQ+hG,SAEhB17E,SAAUzmB,KAAKymB,SACf7oB,MAAOoC,KAAKpC,MACZ+9H,OAAQ37H,KAAK27H,OACbC,SAAU57H,KAAK47H,UAEnB,OAAOt6C,IAEXkyE,UAAW,WAKP,MAJKxzJ,MAAKshF,SACNthF,KAAKshF,OAASthF,KAAKqzJ,eACnBrzJ,KAAKshF,OAAOq1B,OAAO32G,KAAKyzJ,YAErBzzJ,KAAKshF,OAAOl+C,KAEvBuzE,OAAQ,SAAUqgB,GAAV,GAQA08B,GAoBS54J,EAKL64J,EAEIx8F,EAlCRgoB,EAASn/E,KACT4+E,EAAM5+E,KACNI,EAAUw+E,EAAIx+E,QACd6xJ,EAAYrzE,EAAIqzE,UAChBr2H,EAAWx7B,EAAQw7B,QAsBvB,IArBA57B,KAAKuI,SACLvI,KAAKojC,IAAM4zF,EACP08B,EAAW18B,EAAU76H,QACrBy/B,EACIq2H,EACAyB,EAAS58F,IAAM48F,EAASx6J,SAExBw6J,EAAS18F,IAAM08F,EAASx6J,SAGxB+4J,EACAyB,EAAS78F,IAAM68F,EAASz6J,QAExBy6J,EAAS38F,IAAM28F,EAASz6J,QAGhC+G,KAAKyzJ,UAAYC,EACb1zJ,KAAKshF,QACLthF,KAAKshF,OAAOq1B,OAAO+8C,GAEvB1zJ,KAAK4zJ,YAAYF,GACb1zJ,KAAK24I,UACL,IAAS79I,EAAI,EAAGA,EAAIkF,KAAK24I,UAAU/gJ,OAAQkD,IACvCqkF,EAAOw5D,UAAU79I,GAAG67G,OAAO+8C,EAG/B1zJ,MAAKsiI,OACDqxB,EAAgB3zJ,KAAKwzJ,YACnBpzJ,EAAQy0I,QAAQrxI,SAAWpD,EAAQy0I,QAAQ92I,OACzCo5D,EAASw8F,EAAcx8F,SAC3Bw8F,EAAgB,GAAIzpC,IAAI/yD,EAAOlkC,EAAGkkC,EAAO9lD,EAAG8lD,EAAOlkC,EAAGkkC,EAAO9lD,IAEjErR,KAAKsiI,KAAK3rB,OAAOg9C,KAGzBC,YAAa,SAAUxwH,GAAV,GACLw7C,GAAM5+E,KACNI,EAAUw+E,EAAIx+E,QACds1C,EAAQkpC,EAAIlpC,MACZ22B,EAASjsE,EAAQ8gI,OAAOv/F,QACxB+T,KACA22B,EAASA,IAAWs4E,GAAQ15E,EAAMoB,EAClCA,EAASA,IAAWu4E,GAAQ15E,EAASmB,EACrC32B,EAAMihE,OAAOvzE,GACbsS,EAAMtS,IAAIg0F,QAAQp3H,KAAKwzJ,YAAannF,GACpC32B,EAAMihE,OAAOjhE,EAAMtS,OAG3Bi4F,gBAAiB,WAAA,GACTwZ,GAAU70I,KAAKI,QAAQg7H,UAAUyZ,QACjCgf,EAAe7zJ,KAAKuzJ,eAAet/E,MACnC7zE,EAAUJ,KAAKI,QAAQy0I,QACvB92I,EAAOqC,EAAQrC,MAAQqC,EAAQi8H,OAAOpjI,OAAS,IAAM47I,EAAQxY,OAAOpjI,OAAS,GAC7EjB,EAAS,GAAIs7H,KACbp0H,KAAMkB,EAAQlB,KACdjG,MAAO8E,EACP7E,OAAQ6E,EACR2lC,SAAUtjC,EAAQsjC,SAClBs7D,WAAY61C,EAAQ5gE,OAAS4/E,EAC7Bx3B,QACIpoD,MAAO4gE,EAAQxY,OAAOpoD,MACtBh7E,MAAO47I,EAAQxY,OAAOpjI,MACtBirC,QAASq/C,GAAesxD,EAAQxY,OAAOn4F,QAAS,IAEpDA,QAASq/C,GAAesxD,EAAQ3wG,QAAS,IAG7C,OADAlsC,GAAO2+G,OAAO32G,KAAKyzJ,WACZz7J,EAAO4kI,cAElBk3B,gBAAiB,WACb,OAAQ9zJ,KAAKshF,YAAc6gB,QAE/Bu5B,oBAAqB,WAAA,GAEbv5B,GAAQ1jC,EAKJ1gE,EACAg2J,EACA58F,EARJmqB,EAASthF,KAAKshF,MAiBlB,OAfIA,IACA7iB,EAAO6iB,EAAOi7C,WAAWvE,SACzB71B,EAAS7gB,EAAO6gB,SAEZpkG,EAAOiC,KAAKI,QAAQy0I,QAAQ92I,KAC5Bg2J,EAAWh2J,EAAO,EAClBo5D,EAASn3D,KAAKojC,IAAI+zB,SACtBsH,EAAO,GAAI0rC,IAASnf,MAChB7zB,EAAOlkC,EAAI8gI,EACX58F,EAAO9lD,EAAI0iJ,IAEXh2J,EACAA,MAIJqC,QAASJ,KAAKI,QACdq+D,KAAMA,EACN0jC,OAAQA,IAGhB6xD,cAAe,WAAA,GAKH/gI,GACAghI,EACA5iJ,EAAG6iJ,EANPV,EAAYxzJ,KAAKwzJ,YACjBW,EAAUn0J,KAAKuxJ,MAAMvpF,KAAKmsF,UAC1B9rC,GAAe8rC,GAAWA,EAAQx8B,SAAS67B,EAC/C,IAAInrC,EAWA,MAVIp1F,GAAIugI,EAAUz8F,GAAKqpF,GACnB6T,EAAkB/xI,EAElBliB,KAAKiyJ,WACL5gJ,EAAImiJ,EAAU18F,GACdo9F,EAAgBhpF,IAEhB75D,EAAImiJ,EAAUx8F,GACdk9F,EAAgBjpF,IAGhBod,MAAO,GAAIvC,IAAM7yD,EAAG5hB,GACpBk6E,OACI1sD,WAAYo1H,EACZr4H,SAAUs4H,KAK1BZ,YAAa,SAAUvqJ,GACnB,MAAO/I,MAAKuxJ,MAAMwB,iBAAiB/yJ,KAAM+I,IAE7CqrJ,YAAa,SAAUhxH,GACnB,GAAIowH,GAAYxzJ,KAAKwzJ,WACrB,OAAOA,GAAU77B,SAASv0F,MAGlCyhH,GAAU99I,UAAUmzC,UAChBte,UAAU,EACVi5G,SACIrxI,SAAS,EACTw7F,WAAYsyB,GACZvzH,KAAM6iJ,GACN1hJ,KAAM0yH,GACNyK,QAAUpjI,MAAO,GACjBirC,QAAS,GAEbg9F,QACI19H,SAAS,EACTm+B,SAAUgjH,GACV7hH,OAAQomF,GAAW,GACnBx0B,QAASw0B,GAAW,GACpB38C,WACIrtE,KAAM+gJ,GACNrsH,MAAOosH,KAGfzd,OAAS7sF,UACT0lF,WACIyZ,SACIxY,QACIpoD,MAAO,OACPh7E,MAAO,KAInB0/I,WAAah0C,MAAQ1rG,MAAO,KAEhC2B,GAAWiqJ,GAAU99I,UAAW09I,IAChC7pJ,GAAWiqJ,GAAU99I,UAAW29I,IAC5BI,GAAc1xB,GAAa1yH,QAC3BC,KAAM,SAAUggI,EAAYhF,EAAQ4zB,GAChCn8B,GAAanvH,GAAGtD,KAAKwH,KAAKnI,MAC1BA,KAAK2gI,WAAaA,EAClB3gI,KAAK27H,OAASA,EACd37H,KAAKuvJ,SAAWA,GAEpB9mE,OAAQ,SAAU4rE,GAAV,GAGKv5J,GAAOlD,EAFZ+oI,EAAa3gI,KAAK2gI,WAAWzqH,OAAOm+I,OACpC5rE,IACJ,KAAS3tF,EAAI,EAAGlD,EAAS+oI,EAAW/oI,OAAQkD,EAAIlD,EAAQkD,IAChD6lI,EAAW7lI,GAAG0I,WAAY,GAC1BilF,EAAO3gF,KAAK64H,EAAW7lI,GAAG24J,UAAUz7B,SAAS7gE,SAGrD,OAAOsxB,IAEX0xC,aAAc,WAAA,GASNx1B,GARA/lB,EAAM5+E,KACNI,EAAUw+E,EAAIx+E,QACdu7H,EAAS/8C,EAAI+8C,OACb1nD,EAAQ0nD,EAAO1nD,MACf/5B,EAAWyhF,EAAO6iB,SAClBtiJ,IAAW+3E,IAAU/5B,IACrB+5B,EAAQ/5B,EAAS+5B,OAEjB0wB,EAAO7H,GAAKiS,WAAW/uG,KAAKyoF,UAC5BuU,QACI/oB,MAAOA,EACPh7E,MAAO0iI,EAAO1iI,MACdirC,QAASy3F,EAAOz3F,QAChB26E,SAAU8c,EAAO9c,UAErBl7E,OAAQg4F,EAAOh4F,SAEfvjC,EAAQ8vF,QACRyU,EAAKl4B,QAETzsE,KAAKmiG,OAASwC,GAElB2vD,SAAU,SAAUrsJ,EAAGssJ,GACnB,MAAOv0J,MAAKpG,OAAO46J,gBAAgBD,EAAOthI,EAAGshI,EAAOljJ,EAAGrR,KAAKuvJ,aAGpE5lC,GAAkBm7B,IAAe50D,QAAQ,IACrC60D,GAAkBD,GAAYpkJ,QAC9B+nF,OAAQ,SAAU4rE,GACd,GAAI5rE,GAASzoF,KAAKy0J,oBAAoBz0J,KAAK2gI,WAI3C,OAHI0zB,IAAgBA,EAAaz8J,SAC7B6wF,EAASA,EAAOvyE,OAAOlW,KAAKy0J,oBAAoBJ,GAAc/zJ,YAE3DmoF,GAEXgsE,oBAAqB,SAAUhsE,GAAV,GAWR3tF,GACD45J,EACArsE,EACAssE,EACAC,EAdJ3+B,EAAQj2H,KAAKpG,OACbkqI,EAAW7N,EAAM6N,SACjB8S,EAAe9S,EAASgrB,mBAAmB9uJ,KAAK27H,QAChDk5B,EAAgB5+B,EAAM6+B,oBAAoB90J,KAAK27H,UAAYklB,GAC3DvgJ,EAAUs2I,EAAax2I,QAAQE,QAC/Bs7B,EAAWg7G,EAAax2I,QAAQw7B,SAChC3M,EAAM3uB,EAAU,EAAI,EACpBy0J,EAASz0J,EAAU,EAAI,EACvB1I,EAAS6wF,EAAO7wF,OAChBoH,IACJ,KAASlE,EAAI,EAAGA,EAAIlD,EAAQkD,IACpB45J,EAAYjsE,EAAO3tF,EAAI,GACvButF,EAAQI,EAAO3tF,GACf65J,EAAsBD,EAAUlB,YAAYr8F,SAC5Cy9F,EAAkBvsE,EAAMmrE,YAAYr8F,SACpCy/E,EAAax2I,QAAQslI,WACrB1mI,EAAO8I,KAAK,GAAIy3I,IAAcoV,EAAoB1hI,EAAG0hI,EAAoBtjJ,IAErErS,EAAO8I,KADP8zB,EACY,GAAI2jH,IAAcoV,EAAoB1hI,EAAG2hI,EAAgBvjJ,GAEzD,GAAIkuI,IAAcqV,EAAgB3hI,EAAG0hI,EAAoBtjJ,IAEzErS,EAAO8I,KAAK,GAAIy3I,IAAcqV,EAAgB3hI,EAAG2hI,EAAgBvjJ,KAE7DuqB,GACA58B,EAAO8I,KAAK,GAAIy3I,IAAcoV,EAAoB1hI,EAAGyhI,EAAUtxH,IAAI9xB,GAAI2d,KACvEjwB,EAAO8I,KAAK,GAAIy3I,IAAcoV,EAAoB1hI,EAAGyhI,EAAUtxH,IAAI9xB,GAAIyjJ,KACnEF,GACA71J,EAAO8I,KAAK,GAAIy3I,IAAcoV,EAAoB1hI,EAAGo1D,EAAMjlD,IAAI9xB,GAAI2d,KAEvEjwB,EAAO8I,KAAK,GAAIy3I,IAAcqV,EAAgB3hI,EAAGo1D,EAAMjlD,IAAI9xB,GAAI2d,KAC/DjwB,EAAO8I,KAAK,GAAIy3I,IAAcqV,EAAgB3hI,EAAGo1D,EAAMjlD,IAAI9xB,GAAIyjJ,OAE/D/1J,EAAO8I,KAAK,GAAIy3I,IAAcmV,EAAUtxH,IAAI+tF,GAAIliG,GAAM0lI,EAAoBtjJ,IAC1ErS,EAAO8I,KAAK,GAAIy3I,IAAcmV,EAAUtxH,IAAI+tF,GAAI4jC,GAASJ,EAAoBtjJ,IACzEwjJ,GACA71J,EAAO8I,KAAK,GAAIy3I,IAAcl3D,EAAMjlD,IAAI+tF,GAAIliG,GAAM0lI,EAAoBtjJ,IAE1ErS,EAAO8I,KAAK,GAAIy3I,IAAcl3D,EAAMjlD,IAAI+tF,GAAIliG,GAAM2lI,EAAgBvjJ,IAClErS,EAAO8I,KAAK,GAAIy3I,IAAcl3D,EAAMjlD,IAAI+tF,GAAI4jC,GAASH,EAAgBvjJ,IAIjF,OAAOrS,UAGXgmJ,GAAgBF,GAAYpkJ,QAC5By5H,aAAc,WAAA,GAON66B,GACAjlE,EACAklE,EARAt5B,EAAS37H,KAAK27H,OACdzhF,EAAWyhF,EAAO6iB,UAClBvqE,EAAQ0nD,EAAO1nD,KACf/3E,IAAW+3E,IAAU/5B,IACrB+5B,EAAQ/5B,EAAS+5B,OAEjB+gF,EAAiB,GAAIzzI,GAAQk0G,eAAez1H,KAAKI,QAAQ8vF,QACzDH,EAAWilE,EAAet2G,QAAQ1+C,KAAKyoF,UACvCwsE,EAAQ,GAAIn4D,KACZE,QACI/oB,MAAOA,EACPh7E,MAAO0iI,EAAO1iI,MACdirC,QAASy3F,EAAOz3F,QAChB26E,SAAU8c,EAAO9c,UAErBl7E,OAAQg4F,EAAOh4F,SAEnBsxH,EAAMllE,SAASjoF,KAAKhB,MAAMmuJ,EAAMllE,SAAUA,GAC1C/vF,KAAKmiG,OAAS8yD,KAGlBhQ,IACAiQ,eAAgB,WAAA,GAORngD,GAEKw6C,EACDlU,EACA8Z,EACAC,EACAz0B,EACK4rB,EACDlkE,EAdRlJ,EAASn/E,KACT4+E,EAAM5+E,KACNI,EAAUw+E,EAAIx+E,QACd6uJ,EAAerwE,EAAIqwE,aACnBtzB,EAASv7H,EAAQu7H,OACjB6e,EAAcyU,EAAar3J,MAG/B,KADAoI,KAAKq1J,aACI9F,EAAW,EAAGA,EAAW/U,EAAa+U,IAAY,CAKvD,IAJIlU,EAAgB1f,EAAO4zB,GACvB4F,EAAeh2E,EAAOm2E,WAAWrG,EAAaM,IAC9C6F,EAAaD,EAAav9J,OAC1B+oI,KACK4rB,EAAU,EAAGA,EAAU6I,EAAY7I,IACpClkE,EAAQ8sE,EAAa5I,GACrBlkE,EACAs4C,EAAW74H,KAAKugF,GACTlJ,EAAO21E,oBAAoBzZ,KAAmBwF,KACjDlgB,EAAW/oI,OAAS,IACpBm9G,EAAc51B,EAAOo2E,cAAc50B,EAAY0a,EAAekU,EAAUx6C,GACxE51B,EAAOq2E,YAAYzgD,IAEvB4rB,KAGJA,GAAW/oI,OAAS,IACpBm9G,EAAc51B,EAAOo2E,cAAc50B,EAAY0a,EAAekU,EAAUx6C,GACxE51B,EAAOq2E,YAAYzgD,IAG3B/0G,KAAKrF,SAASoN,QAAQjB,MAAM9G,KAAKrF,SAAUqF,KAAKq1J,YAEpDG,YAAa,SAAU5lE,GACnB5vF,KAAKq1J,UAAUvtJ,KAAK8nF,GACpBA,EAAQh2F,OAASoG,MAErBs1J,WAAY,SAAU7sE,GAClB,MAAOA,IAEXqsE,oBAAqB,SAAUn5B,GAAV,GACb85B,GAAgB95B,EAAO85B,cACvBC,GAAcD,GAAiBz1J,KAAKI,QAAQgwJ,SAChD,OAAOsF,GAAa1lJ,GAAOylJ,GAAiB5U,IAEhD2T,gBAAiB,SAAUvhI,EAAG5hB,EAAGk+I,GAAhB,GAIToG,GACK76J,EACDutF,EAEIutE,EACA9kD,EARR1wF,EAAS,GAAI0lE,IAAM7yD,EAAG5hB,GACtBwkJ,EAAY71J,KAAKivJ,aAAaM,GAC9BuG,EAAuBpoD,CAE3B,KAAS5yG,EAAI,EAAGA,EAAI+6J,EAAUj+J,OAAQkD,IAC9ButF,EAAQwtE,EAAU/6J,GAClButF,GAAS3G,GAAQ2G,EAAMzqF,QAA0B,OAAhByqF,EAAMzqF,OAAkByqF,EAAM7kF,WAAY,IACvEoyJ,EAAWvtE,EAAMjlD,IACjB0tE,EAAgB8kD,EAASz+F,SAASg3C,WAAW/tF,GAC7C0wF,EAAgBglD,IAChBH,EAAettE,EACfytE,EAAuBhlD,GAInC,OAAO6kD,KAGXzQ,GAAgB3oH,GAAU77B,QAC1BygC,MAAO,WACHnhC,KAAK+1J,QAAQ/1J,KAAKI,QAAQgjC,IAAIyzB,KAElC53B,KAAM,SAAUgwC,GACZ,GAAI7rC,GAAMpjC,KAAKI,QAAQgjC,GACvBpjC,MAAK+1J,QAAQx0I,EAAQioG,iBAAiBpmF,EAAIyzB,GAAIzzB,EAAI2zB,GAAIkY,KAE1D8mF,QAAS,SAAU9iI,GAAV,GACDl7B,GAAUiI,KAAKjI,QACfg4F,EAAWh4F,EAAQg4F,SACnB8e,EAAW9e,EAAS,GAAG1jB,SACvBge,EAAc0F,EAAS,GAAG1jB,QAC9Bt0E,GAAQg0G,UACR8C,EAASmnD,KAAK/iI,GACdl7B,EAAQi0G,SACR3hB,EAAY2rE,KAAK/iI,MAGzB02F,GAAkBu7B,IAAiB7kJ,SAAU2/I,KAC7Ch4C,GAAiBr8F,QAAQyc,SAAS,OAAQ88H,IAQtCC,IACA9qB,gBAAiB,WAAA,GAGLj3F,GACAw3D,EAHJpzD,EAAOxnC,KAAK25H,SACZnyF,KAASA,EAAKpnC,aAAehI,eAAgB,IACzCgrC,EAAMoE,EAAKpE,IACXw3D,EAAWkC,GAAKkF,SAAS5+D,EAAI40F,UACjCh4H,KAAKmiG,OAAOt+D,KAAK+2D,GACjB56F,KAAKusE,UAAY,GAAI24E,IAActqD,GAAYx3D,IAAKA,IAChDq3G,EAAaz6I,KAAKI,QAAQu7H,SAC1B37H,KAAKi2J,sBAAsBr7D,KAIvCq7D,sBAAuB,SAAUr7D,GAAV,GAEVj9F,GACD0qF,EAFJI,EAASzoF,KAAKk2J,iBAClB,KAASv4J,EAAM,EAAGA,EAAM8qF,EAAO7wF,OAAQ+F,IAC/B0qF,EAAQI,EAAO9qF,GACf0qF,GAASA,EAAM8Z,QAAUzgB,GAAQ2G,EAAM8Z,OAAO/hG,QAAQujC,SACtD0kD,EAAM8Z,OAAOt+D,KAAK+2D,KAK9BwqD,GAAYZ,GAAiB9jJ,QAC7B6H,OAAQ,WACJi8I,GAAiBvgJ,GAAGsE,OAAOJ,KAAKnI,MAChCA,KAAKywJ,mBACLzwJ,KAAKk1J,kBAET1F,UAAW,WACP,MAAO3K,KAEXyM,YAAa,SAAU91J,EAAMg0C,GAAhB,GAcL8/G,GAEAr7E,EAIAoU,EAnBAmhD,EAAah6F,EAAOg6F,WACpB5N,EAAWpsF,EAAOosF,SAClBD,EAASnsF,EAAOmsF,OAChB4zB,EAAW//G,EAAO+/G,SAClBkG,EAAgBz1J,KAAK80J,oBAAoBn5B,GACzC/9H,EAAQpC,EAAKyhJ,YAAYr/I,KAC7B,KAAK8jF,GAAQ9jF,IAAoB,OAAVA,EAAgB,CACnC,GAAI63J,IAAkBzlJ,GAGlB,MAAO,KAFPpS,GAAQ,EAchB,MATI0xJ,GAAetvJ,KAAKsvJ,aAAa3zB,EAAQ4zB,GAC7CD,EAAetvJ,KAAKyxJ,iBAAiBnC,EAAc1xJ,EAAOg+H,EAAU4N,EAAY7N,EAAQ4zB,GACpFt7E,EAAQz4E,EAAKg0C,OAAOykC,OAAS0nD,EAAO1nD,MACpC/3E,GAAWy/H,EAAO1nD,SAClBA,EAAQq7E,EAAar7E,OAErBoU,EAAQ,GAAIw8D,IAAUjnJ,EAAO0xJ,GACjCjnE,EAAMpU,MAAQA,EACdj0E,KAAK8jC,OAAOukD,GACLA,GAEX0nE,UAAW,SAAU1nE,GAAV,GAICmhD,GACAwlB,EACKl0J,EACDyjF,EANRY,EAASn/E,KACT0vJ,EAAY1vJ,KAAK0vJ,UAAUrnE,EAC/B,IAAIroF,KAAKI,QAAQgwJ,UAGb,IAFI5mB,EAAanhD,EAAMmhD,WACnBwlB,EAAiBhvJ,KAAKgvJ,eAAexlB,GAChC1uI,EAAI,EAAGA,EAAIk0J,EAAep3J,SAC3B2mF,EAAQywE,EAAel0J,GACvButF,IAAU9J,GAFyBzjF,IAKvC40J,GAAavwE,EAAOuwE,UAAUnxE,GAC1BY,EAAO/+E,QAAQ0vJ,eACfJ,EAAY9wJ,KAAKoT,IAAI09I,EAAW,GAI5C,QACIA,EACAA,IAGR6F,cAAe,SAAU50B,EAAY0a,EAAekU,GAArC,GAEPC,GADA11J,EAAQuhJ,EAAcvhJ,KAS1B,OAAO,KANH01J,EADA11J,IAAUknJ,GACE+D,GACLjrJ,IAAUinJ,GACLiE,GAEAF,IAEKnkB,EAAY0a,EAAekU,IAEpD2G,gBAAiB,WAAA,GAGJv4J,GAFL8qF,EAASzoF,KAAKyoF,OACdzpF,IACJ,KAASrB,EAAM,EAAGA,EAAM8qF,EAAO7wF,OAAQ+F,IACnCqB,EAAO8I,MAAM2gF,EAAO9qF,QAAY2jF,OAEpC,OAAOtiF,GAAOkX,OAAOlW,KAAKq1J,cAGlCz6J,GAAWwqJ,GAAUr+I,UAAWk+I,GAAgBE,IAC5CE,IACA58D,OAAQ,WAAA,GAcI0tE,GACAC,EAdJngC,EAAQj2H,KAAKpG,OACbkqI,EAAW7N,EAAM6N,SACjB2rB,EAAax5B,EAAM71H,QAAQqvJ,WAC3BjoB,EAAYvR,EAAM44B,gBAAgB7uJ,KAAK27H,QACvC06B,EAAmB7uB,EAAUtF,UAC7B0U,EAAe9S,EAASgrB,mBAAmB9uJ,KAAK27H,QAChD26B,EAAsB1f,EAAa1U,UACnCq0B,EAAcv2J,KAAKu2J,YACnB9tE,EAASzoF,KAAKw2J,YAAYD,GAC1BtnF,EAAMwgF,EAAat+B,GAAI7/G,GACvB3Z,EAAM83J,EAAa6G,EAAoBz/F,GAAKy/F,EAAoBx/F,EAapE,OAZAn/D,GAAMorF,GAAWprF,EAAK0+J,EAAiBpnF,EAAM,GAAIonF,EAAiBpnF,EAAM,KACnEjvE,KAAKu2J,aAAe9tE,EAAO7wF,OAAS,IACjCu+J,EAAa1tE,EAAO,GACpB2tE,EAAY9mI,GAAKm5D,GACjBgnE,GACAhnE,EAAO1gF,QAAQ,GAAIw3I,IAAc5nJ,EAAKw+J,EAAW9kJ,IACjDo3E,EAAO3gF,KAAK,GAAIy3I,IAAc5nJ,EAAKy+J,EAAU/kJ,MAE7Co3E,EAAO1gF,QAAQ,GAAIw3I,IAAc4W,EAAWljI,EAAGt7B,IAC/C8wF,EAAO3gF,KAAK,GAAIy3I,IAAc6W,EAAUnjI,EAAGt7B,MAG5C8wF,GAEX0xC,aAAc,WAAA,GACNwB,GAAS37H,KAAK27H,OACdzhF,EAAWyhF,EAAO6iB,UAClBvqE,EAAQ0nD,EAAO1nD,KACf/3E,IAAW+3E,IAAU/5B,IACrB+5B,EAAQ/5B,EAAS+5B,OAErBj0E,KAAKmiG,OAAS,GAAI3S,KAAQ7rD,OAAQg4F,EAAOh4F,SACzC3jC,KAAKy2J,WAAWxiF,GAChBj0E,KAAK4gI,WAAW3sD,IAEpB2sD,WAAY,SAAU3sD,GAAV,GAOA0wB,GANJg3B,EAAS37H,KAAK27H,OACd0I,EAAczpI,IACdq5E,MAAOA,EACP/vC,QAASy3F,EAAOz3F,SACjBy3F,EAAOh3B,KACN0/B,GAAY7gI,WAAY,GAAS6gI,EAAYprI,MAAQ,IACjD0rG,EAAO7H,GAAKiS,WAAW/uG,KAAKw2J,eAC5Bx5D,QACI/oB,MAAOowD,EAAYpwD,MACnBh7E,MAAOorI,EAAYprI,MACnBirC,QAASmgG,EAAYngG,QACrB26E,SAAUwlB,EAAYxlB,SACtBI,QAAS,UAGjBj/G,KAAKmiG,OAAOr+D,OAAO6gE,KAG3B8xD,WAAY,SAAUxiF,GAAV,GACJ0nD,GAAS37H,KAAK27H,OACd0Z,EAAOv4C,GAAKiS,WAAW/uG,KAAKyoF,UAC5BsU,MACI9oB,MAAOA,EACP/vC,QAASy3F,EAAOz3F,SAEpB84D,OAAQ,MAEZh9F,MAAKmiG,OAAOr+D,OAAOuxG,KAGvBiQ,GAAcR,GAAYpkJ,QAC1BC,KAAM,SAAUggI,EAAY41B,EAAalb,EAAekU,GACpDzK,GAAY7gJ,GAAGtD,KAAKwH,KAAKnI,KAAM2gI,EAAY0a,EAAekU,GAC1DvvJ,KAAKu2J,YAAcA,KAG3B37J,GAAW0qJ,GAAYv+I,UAAWs+I,IAAoBmR,YAAa1R,GAAY/9I,UAAU0hF,SACrF88D,GAAkBR,GAAgBrkJ,QAClCC,KAAM,SAAUggI,EAAY41B,EAAalb,EAAekU,GACpDxK,GAAgB9gJ,GAAGtD,KAAKwH,KAAKnI,KAAM2gI,EAAY0a,EAAekU,GAC9DvvJ,KAAKu2J,YAAcA,KAG3B37J,GAAW2qJ,GAAgBx+I,UAAWs+I,IAAoBmR,YAAazR,GAAgBh+I,UAAU0hF,SAC7F+8D,GAAoBF,GAAY5kJ,QAChCC,KAAM,SAAUggI,EAAY+1B,EAAatG,EAAW/U,EAAekU,GAC/DjK,GAAYrhJ,GAAGtD,KAAKwH,KAAKnI,KAAM2gI,KAAgB0a,EAAekU,GAC9DvvJ,KAAK02J,YAAcA,EACnB12J,KAAKowJ,UAAYA,GAErBuG,eAAgB,WAAA,GAGJ3B,GACAr0B,EAHJ5wC,EAAW/vF,KAAK42J,eAMpB,OALK7mE,KACGilE,EAAiB,GAAIzzI,GAAQk0G,eAAez1H,KAAKI,QAAQ8vF,QACzDywC,EAAamkB,GAAY/9I,UAAU0hF,OAAOtgF,KAAKnI,MACnD+vF,EAAW/vF,KAAK42J,gBAAkB5B,EAAet2G,QAAQiiF,IAEtD5wC,GAEXoqC,aAAc,WAAA,GACNwB,GAAS37H,KAAK27H,OACdzhF,EAAWyhF,EAAO6iB,UAClBvqE,EAAQ0nD,EAAO1nD,KACf/3E,IAAW+3E,IAAU/5B,IACrB+5B,EAAQ/5B,EAAS+5B,OAErBj0E,KAAKmiG,OAAS,GAAI3S,KAAQ7rD,OAAQg4F,EAAOh4F,SACzC3jC,KAAK62J,YACD95D,MACI9oB,MAAOA,EACP/vC,QAASy3F,EAAOz3F,SAEpB84D,OAAQ,OAEZh9F,KAAK82J,cACD95D,OAAQpiG,IACJq5E,MAAOA,EACP/vC,QAASy3F,EAAOz3F,QAChB+6E,QAAS,QACV0c,EAAOh3B,SAGlBkyD,WAAY,SAAU/8J,GAAV,GAKAi9J,GACAC,EAEAC,EACKt5J,EACDiyF,EAIJsnE,EAGJn6D,EAhBA45D,EAAiB32J,KAAK22J,iBACtBQ,EAAeR,EAAenwJ,MAAM,GACpCkwJ,EAAc12J,KAAK02J,WACvB,IAAI12J,KAAKowJ,WAAasG,EAAa,CAK/B,IAJIK,EAAqBL,EAAYC,iBACjCK,EAAa1nI,GAAKynI,GAAoB1qF,SAC1C8qF,EAAarvJ,KAAK,GAAIqiG,IAASjD,QAAQ8vD,EAAYA,EAAY1nI,GAAKqnI,GAAgBtqF,WAChF4qF,KACKt5J,EAAMo5J,EAAmBn/J,OAAS,EAAG+F,GAAO,EAAGA,IAChDiyF,EAAUmnE,EAAmBp5J,GACjCs5J,EAAcnvJ,KAAK,GAAIqiG,IAASjD,QAAQtX,EAAQvjB,SAAUujB,EAAQ/B,aAAc+B,EAAQ5B,aAE5FlqD,IAAOqzH,EAAcF,GACjBC,EAAcC,EAAa,GAAG9qF,SAClC8qF,EAAarvJ,KAAK,GAAIqiG,IAASjD,QAAQgwD,EAAaA,EAAa5nI,GAAK2nI,GAAe5qF,WAErF0wB,EAAO,GAAID,IAAKhjG,GACpBijG,EAAKhN,SAASjoF,KAAKhB,MAAMi2F,EAAKhN,SAAUonE,GACxCn3J,KAAKo3J,UAAUr6D,GACf/8F,KAAKmiG,OAAOr+D,OAAOi5D,IAEvBq6D,UAAW,SAAUC,GAAV,GACHphC,GAAQj2H,KAAKpG,OACb88J,EAAc12J,KAAK02J,YACnB5yB,EAAW7N,EAAM6N,SACjB2rB,EAAax5B,EAAM71H,QAAQqvJ,WAC3BjoB,EAAYvR,EAAM44B,gBAAgB7uJ,KAAK27H,QACvC06B,EAAmB7uB,EAAUtF,UAC7B0U,EAAe9S,EAASgrB,mBAAmB9uJ,KAAK27H,QAChD26B,EAAsB1f,EAAa1U,UACnCjzD,EAAMwgF,EAAat+B,GAAI7/G,GACvBy+E,EAAW/vF,KAAK22J,iBAChBR,EAAapmE,EAAS,GAAG1jB,SACzB+pF,EAAY9mI,GAAKygE,GAAU1jB,SAC3B10E,EAAM83J,EAAa6G,EAAoBz/F,GAAKy/F,EAAoBx/F,EACpEn/D,GAAMorF,GAAWprF,EAAK0+J,EAAiBpnF,EAAM,GAAIonF,EAAiBpnF,EAAM,IAClEgnD,EAAM71H,QAAQgwJ,WAAasG,KAAgB3mE,EAASn4F,OAAS,KAC3D63J,EACA4H,EAASpnE,OAAOt4F,EAAKy+J,EAAU/kJ,GAAG4+E,OAAOt4F,EAAKw+J,EAAW9kJ,GAEzDgmJ,EAASpnE,OAAOmmE,EAAUnjI,EAAGt7B,GAAKs4F,OAAOkmE,EAAWljI,EAAGt7B,KAInEm/J,aAAc,SAAUh9J,GACpB,GAAIA,EAAMkjG,OAAO/jG,MAAQ,EAAG,CACxB,GAAI+jG,GAAS,GAAIF,IAAKhjG,EACtBkjG,GAAOjN,SAASjoF,KAAKhB,MAAMk2F,EAAOjN,SAAU/vF,KAAK22J,kBACjD32J,KAAKmiG,OAAOr+D,OAAOk5D,OAI3ByoD,GAAYL,GAAU1kJ,QACtB60J,cAAe,SAAU50B,EAAY0a,EAAekU,EAAUmH,GAA/C,GAGPH,GAEId,EAaJjG,EAjBAY,EAAYpwJ,KAAKI,QAAQgwJ,UACzBt2J,GAASuhJ,EAAc12C,UAAY7qG,KAavC,OAXIs2J,IAAab,EAAW,GAAKmH,IACzBjB,EAAgBz1J,KAAK80J,oBAAoBzZ,GAEzCkb,EADkB,QAAlBd,EACciB,EAAY/1B,WAEZ3gI,KAAKs3J,gBAAgB32B,EAAY4uB,EAAUz1J,GAEzDA,IAAUknJ,KACVuV,EAAcA,EAAY/vJ,MAAM,GAAGlG,YAGvCxG,IAAUinJ,GACH,GAAIyE,IAAkB7kB,EAAY+1B,EAAatG,EAAW/U,EAAekU,GAQ7E,IAJHC,EADA11J,IAAUknJ,GACEuE,GAEAD,IAEK3kB,EAAY41B,EAAalb,EAAekU,IAEjE54C,OAAQ,SAAUqgB,GAAV,GAGAu/B,GAES54J,EACD45J,EACAxF,EANR5yE,EAASn/E,IAGb,IAFAolJ,GAAUnhJ,GAAG0yG,OAAOxuG,KAAKnI,KAAMg3H,GAC3Bu/B,EAAcv2J,KAAKw3J,aAEnB,IAAS75J,EAAM,EAAGA,EAAM44J,EAAY3+J,OAAQ+F,IACpC45J,EAAahB,EAAY54J,GACzBo0J,EAAY5yE,EAAOy3D,aAAa3S,QAAQszB,EAAW/tB,YACvD+tB,EAAW5gD,OAAOo7C,IAI9BuF,gBAAiB,SAAU32B,EAAY4uB,EAAUz1J,GAAhC,GAST29J,GACAC,EACAnB,EAEK/sB,EACD+iB,EACAoL,EACAtvE,EAcIuvE,EA7BRz4E,EAASn/E,KACTivJ,EAAejvJ,KAAKivJ,aACpB4I,EAAWl3B,EAAW,GAAG6I,WACzB5xI,EAAS+oI,EAAW/oI,MASxB,KARIigK,EAAW,IACXA,EAAW,EACXjgK,KAEA6/J,EAASI,EAAWjgK,EACpB8/J,EAAc13J,KAAKkvJ,cAAc,GAAG4I,oBAAsB,EAAI,EAC9DvB,KACJv2J,KAAKw3J,aAAex3J,KAAKw3J,iBAChBhuB,EAAaquB,EAAUruB,EAAaiuB,EAAQjuB,IAAc,CAC3D+iB,EAAU/iB,EAAakuB,EACvBC,EAAkBpI,EAClBlnE,EAAQ,MACZ,GACIsvE,KACAtvE,EAAQ4mE,EAAa0I,GAAiBpL,SACjCoL,EAAkB,IAAMtvE,EAC7BA,IACIvuF,IAAUknJ,IAAQxX,EAAaquB,IAAa5I,EAAa0I,GAAiBpL,EAAU,IACpFgK,EAAYzuJ,KAAKq3E,EAAO44E,sBAAsBvuB,EAAY+iB,EAASA,EAAU,EAAGoL,IAEpFpB,EAAYzuJ,KAAKugF,GACbvuF,IAAUknJ,IAAQxX,EAAa,EAAIiuB,IAAWxI,EAAa0I,GAAiBpL,EAAU,IACtFgK,EAAYzuJ,KAAKq3E,EAAO44E,sBAAsBvuB,EAAY+iB,EAASA,EAAU,EAAGoL,MAGhFC,EAAgBz4E,EAAO64E,qBAAqBxuB,GAChDrqD,EAAOq4E,aAAa1vJ,KAAK8vJ,GACzBrB,EAAYzuJ,KAAK8vJ,IAGzB,MAAOrB,IAEXwB,sBAAuB,SAAUvuB,EAAY+iB,EAAS0L,EAAWC,GAI7D,IAJmB,GAGf7vE,GAFA4mE,EAAejvJ,KAAKivJ,aACpB98I,EAAQ+lJ,EAEL/lJ,EAAQ,IAAMk2E,GACjBl2E,IACAk2E,EAAQ4mE,EAAa98I,GAAO8lJ,EAQhC,OANK5vE,GAIDA,EAAQ4mE,EAAa98I,GAAOo6I,IAH5BlkE,EAAQroF,KAAKg4J,qBAAqBxuB,GAClCxpI,KAAKw3J,aAAa1vJ,KAAKugF,IAIpBA,GAEX2vE,qBAAsB,SAAUxuB,GAAV,GACdppI,GAAUJ,KAAKsvJ,gBAAiB,GAChCjnE,EAAQ,GAAIw8D,IAAU,EAAGzkJ,EAG7B,OAFAioF,GAAMmhD,WAAaA,EACnBnhD,EAAMszC,UACCtzC,GAEXysE,oBAAqB,SAAUn5B,GAC3B,MAAOA,GAAO85B,eAAiBzlJ,MAGnC01I,GAAwB7uJ,EAAM6J,QAC9BC,KAAM,WACFX,KAAKq8I,eAET9tG,OAAQ,SAAU4pH,GAAV,GAEKpa,GACDqa,EACAr6G,EAHJs+F,EAAar8I,KAAKq8I,UACtB,KAAS0B,IAAYoa,GACbC,EAAaD,EAAgBpa,GAC7BhgG,EAAQs+F,EAAW0B,GACvB1B,EAAW0B,GAAYhgG,EAAQA,IAC3B/rC,IAAK07F,EACLh1G,IAAKmxH,GAET9rE,EAAM/rC,IAAMpT,KAAKoT,IAAI+rC,EAAM/rC,IAAKomJ,EAAWpmJ,KAC3C+rC,EAAMrlD,IAAMkG,KAAKlG,IAAIqlD,EAAMrlD,IAAK0/J,EAAW1/J,MAGnDwoC,MAAO,SAAU68G,GACb/9I,KAAKq8I,WAAW0B,GAAYnnJ,QAEhC+nD,MAAO,SAAUo/F,GACb,MAAO/9I,MAAKq8I,WAAW0B,MAG3B4H,GAAWvyB,GAAa1yH,QACxBC,KAAM,SAAUwzD,EAAS/zD,GACrBgzH,GAAanvH,GAAGtD,KAAKwH,KAAKnI,KAAMI,GAChCJ,KAAKq4J,QAAU,GAAIvkC,IAAQ3/D,EAASn0D,KAAKI,SACzCJ,KAAK8jC,OAAO9jC,KAAKq4J,UAErBl+B,aAAc,WACVn6H,KAAKq4J,QAAQj4J,QAAQs6H,OAAS16H,KAAKI,QAAQs6H,QAE/C/jB,OAAQ,SAAUqgB,GAAV,GACA52H,GAAUJ,KAAKI,QACfw7B,EAAWx7B,EAAQw7B,SACnBq2H,EAAY7xJ,EAAQ6xJ,UACpB78H,EAAOp1B,KAAKrF,SAAS,GACrBskI,EAAc7pG,EAAKh1B,QACnBgjC,EAAMhO,EAAKgO,IACXsxD,EAAUt/D,EAAKh1B,QAAQs0F,QACvB0wC,EAAWpO,CACfiI,GAAY1zC,MAAQ3vD,EAAWovC,EAAS9oD,EACxC+8G,EAAYtzC,OAAS/vD,EAAWqvC,EAAMD,EAClC5qE,EAAQuhC,WAAaqiH,GACjBpoH,GACAqjG,EAAYtzC,OAAS1gB,GAChBgnF,GAAa7uH,EAAIlqC,SAAW89H,EAAU99H,WACvC+lI,EAAYtzC,OAASzgB,IAGzB+zD,EAAY1zC,MAAQ0mE,EAAY7vI,GAAQF,EAErC9hB,EAAQuhC,WAAaqpC,GAC5Bi0D,EAAYtzC,OAAS3gB,EACrBi0D,EAAY1zC,MAAQvgB,GACb5qE,EAAQuhC,WAAasiH,GACxBroH,EACAqjG,EAAYtzC,OAASsmE,EAAY/mF,EAASD,EAE1Cg0D,EAAY1zC,MAAQ0mE,EAAY/vI,EAAOE,GAEpChiB,EAAQuhC,WAAauiH,KACxBtoH,EAEIwpG,EADA6sB,EACW,GAAI/nC,IAAI8M,EAAUngE,GAAImgE,EAAUlgE,GAAK1zB,EAAIlqC,SAAU89H,EAAUjgE,GAAIigE,EAAUlgE,IAE3E,GAAIozD,IAAI8M,EAAUngE,GAAImgE,EAAUhgE,GAAIggE,EAAUjgE,GAAIigE,EAAUhgE,GAAK5zB,EAAIlqC,WAGpF+lI,EAAY1zC,MAAQvgB,EAEhBo6D,EADA6sB,EACW,GAAI/nC,IAAI8M,EAAUjgE,GAAIigE,EAAUlgE,GAAIkgE,EAAUjgE,GAAK3zB,EAAInqC,QAAS+9H,EAAUhgE,IAE1E,GAAIkzD,IAAI8M,EAAUngE,GAAKzzB,EAAInqC,QAAS+9H,EAAUlgE,GAAIkgE,EAAUngE,GAAImgE,EAAUhgE,MAI5F52D,EAAQsjC,WACL9H,EACA84D,EAAQ/7F,KAAO+7F,EAAQ97F,OAASwsI,EAASnsI,QAAUm8B,EAAKonG,WAAWvjI,SAAW,EAE9Ey7F,EAAQp1F,IAAMo1F,EAAQ77F,QAAUusI,EAASlsI,SAAWk8B,EAAKonG,WAAWtjI,UAAY,GAGxFk8B,EAAKuhF,OAAOyuB,IAEhBkzB,eAAgB,SAAUnE,GAAV,GAQJn9B,GAPJp7F,EAAW57B,KAAKI,QAAQw7B,SACxB7d,EAAQ6d,EAAWtqB,GAAI6/G,GACvBliH,EAAQ8O,EAAQ,IAChBpmB,EAAMomB,EAAQ,IACdqX,EAAOp1B,KAAKrF,SAAS,GACrB49J,EAAYv4J,KAAKpG,OAAOwpC,KACxBm1H,EAAUtpJ,GAASklJ,EAAQllJ,IAAUklJ,EAAQx8J,GAAO4gK,EAAU5gK,MAC1Dq/H,EAAY5hG,EAAKmnG,WAAWpgI,QAChC66H,EAAU/nH,GAASrQ,KAAKlG,IAAI6/J,EAAUtpJ,GAAQklJ,EAAQllJ,IACtD+nH,EAAUr/H,GAAOiH,KAAKoT,IAAIumJ,EAAU5gK,GAAMw8J,EAAQx8J,IAClDqI,KAAK22G,OAAOqgB,OAIxBrN,GAAkBg8B,IACdhkH,SAAUuiH,GACVphH,OAAQomF,GAAW,GACnBx0B,QAASw0B,GAAW,GACpBj1C,MAAOs9C,GACPvyB,WAAY,GACZq9B,QACIpjI,MAAO,EACPg7E,MAAO,IAEXg+E,WAAW,EACXr2H,UAAU,EACV2wC,WACIrtE,KAAM+gJ,GACNrsH,MAAOosH,IAEXr8G,OAAQ,IAMRiiH,GAAsB,EACtBC,GAAMzyB,GAAa1yH,QACnBC,KAAM,SAAU/C,EAAOwC,GACnBgzH,GAAanvH,GAAGtD,KAAKwH,KAAKnI,MAC1BA,KAAKI,QAAUA,EACfJ,KAAKi0E,MAAQ7zE,EAAQ6zE,OAASq9C,GAC9BtxH,KAAKiyJ,UAAY1uE,GAAevjF,KAAKI,QAAQ6xJ,WAAW,GACxDjyJ,KAAKpC,MAAQA,GAEjB2K,OAAQ,WACAvI,KAAKozJ,YAGTpzJ,KAAKozJ,WAAY,EACjBpzJ,KAAKw4J,cACLx4J,KAAKgzJ,aACDhzJ,KAAKoxJ,UACLpxJ,KAAK8jC,OAAO9jC,KAAKoxJ,YAGzBoH,YAAa,WAAA,GAIDtF,GACAC,EAJJ/yJ,EAAUJ,KAAKI,QACf8gI,EAAS9gI,EAAQ8gI,MACjBA,GAAO19H,UACH0vJ,EAAgB9pC,GAAY8X,GAG5BiyB,EADAD,EACYA,GACRzsI,SAAUzmB,KAAKymB,SACfm1G,SAAU57H,KAAK47H,SACfh+H,MAAOoC,KAAKpC,MACZ5E,WAAYgH,KAAKhH,WACjBk5J,WAAYlyJ,KAAKkyJ,WACjBr2B,aAAc77H,KAAK67H,aACnBztF,MAAOpuC,KAAKouC,MACZutF,OAAQ37H,KAAK27H,SAGL37H,KAAKszJ,YAAYpyB,EAAOn4H,QAExC/I,KAAK01C,MAAQ,GAAIiwG,IAASwN,EAAWv4J,IAAaghC,SAAUx7B,EAAQw7B,UAAYslG,IAChFlhI,KAAK8jC,OAAO9jC,KAAK01C,SAGzB49G,YAAa,SAAUvqJ,GACnB,MAAO/I,MAAKuxJ,MAAMwB,iBAAiB/yJ,KAAM+I,IAE7C4tG,OAAQ,SAAUqgB,GAAV,GAGAthF,GAUS56C,EAZTqkF,EAASn/E,IAWb,IAVAA,KAAKuI,SACDmtC,EAAQ11C,KAAK01C,MACjB11C,KAAKojC,IAAM4zF,EACPthF,IACAA,EAAMt1C,QAAQ6xJ,UAAYjyJ,KAAKiyJ,UAC/Bv8G,EAAMihE,OAAOqgB,IAEbh3H,KAAKsiI,MACLtiI,KAAKsiI,KAAK3rB,OAAOqgB,GAEjBh3H,KAAK24I,UACL,IAAS79I,EAAI,EAAGA,EAAIkF,KAAK24I,UAAU/gJ,OAAQkD,IACvCqkF,EAAOw5D,UAAU79I,GAAG67G,OAAOqgB,IAIvCmD,aAAc,WAAA,GASEh4B,GARRhjB,EAASn/E,KACT4+E,EAAM5+E,KACNojC,EAAMw7C,EAAIx7C,IACVhjC,EAAUw+E,EAAIx+E,QACdo7H,EAAep7H,EAAQ+hG,MACvBniG,MAAKwD,WAAY,IACjB4vH,GAAanvH,GAAGk2H,aAAahyH,KAAKnI,MAC9Bw7H,GACIr5B,EAASniG,KAAKy4J,WAAaj9B,GAC3BI,SAAU57H,KAAK47H,SACfn1G,SAAUzmB,KAAKymB,SACf7oB,MAAOoC,KAAKpC,MACZsK,OAAQlI,KAAK45H,YACb+B,OAAQ37H,KAAK27H,OACb3iI,WAAYgH,KAAKhH,WACjBk5J,WAAYlyJ,KAAKkyJ,WACjBr2B,aAAc77H,KAAK67H,aACnBztF,MAAOpuC,KAAKouC,MACZqwB,KAAMr7B,EAAI40F,SACVmC,aAAc,WACV,GAAInmF,GAAQ,GAAIw7C,GAEhB,OADArQ,GAAOu5E,WAAW1kH,GACXA,GAEX5zC,QAASA,IAET+hG,GACAniG,KAAKmiG,OAAOr+D,OAAOq+D,IAEhB/+D,EAAInqC,QAAU,GAAKmqC,EAAIlqC,SAAW,GACzC8G,KAAK04J,WAAW14J,KAAKmiG,UAIjCu2D,WAAY,SAAUv2D,GAAV,GAMJn7D,GAYA/tC,EACAC,EACA6E,EASIi+H,EA5BJ57H,EAAUJ,KAAKI,QACfi8H,EAASj8H,EAAQi8H,OACjBs8B,EAAgBj3E,GAAQ26C,EAAOn4F,SAAWm4F,EAAOn4F,QAAU9jC,EAAQ8jC,QACnEu6B,EAAOz+D,KAAKojC,IAAI40F,QACpBv5D,GAAK1gE,KAAK9E,MAAQ2F,KAAK6Q,MAAMgvD,EAAK1gE,KAAK9E,OACnC+tC,EAAOhnC,KAAKy4J,WAAa37D,GAAKkF,SAASvjC,GACvCs+B,MACI9oB,MAAOj0E,KAAKi0E,MACZ/vC,QAAS9jC,EAAQ8jC,SAErB84D,QACI/oB,MAAOj0E,KAAK44J,iBACZ3/J,MAAOojI,EAAOpjI,MACdirC,QAASy0H,EACT95C,SAAUwd,EAAOxd,YAGrB5lH,EAAQ+G,KAAKojC,IAAInqC,QACjBC,EAAS8G,KAAKojC,IAAIlqC,SAClB6E,EAAOqC,EAAQw7B,SAAW3iC,EAAQC,EAClC6E,EAAO6nJ,KACPp9B,GAAiBxhF,IACb/tC,EAAQ,GAAKC,EAAS,KACtB8tC,EAAK5mC,QAAQ48F,OAAO8X,SAAW,UAGvC3S,EAAOr+D,OAAOkD,GACV0zG,EAAmBt6I,KACf47H,EAAUh8H,KAAK87H,sBAAsB90F,GAAQ6xH,UAAW74J,KAAKi0E,OAASr5E,IACtEjD,IAAMyI,EAAQw7B,SAGVhlC,QAFA,EACA,IAELwJ,EAAQ47H,UACX75B,EAAOr+D,OAAOk4F,KAGtBX,gBAAiB,SAAUvhI,GACvB,GAAIshI,GAAYt+B,GAAKkF,SAAShiG,KAAKojC,IAAI40F,SAAUl+H,EACjD,OAAO0uH,IAAiB4S,IAE5B04B,gBAAiB,WACb,MAAO9zJ,MAAKy4J,YAEhB/8B,oBAAqB,WACjB,OACIt7H,QAASJ,KAAKI,QACdq+D,KAAMz+D,KAAKojC,IAAI40F,SACf71B,OAAQniG,KAAKy4J,aAGrBG,eAAgB,WAAA,GACR3kF,GAAQj0E,KAAKi0E,MACbooD,EAASr8H,KAAKI,QAAQi8H,OACtB78C,EAAa68C,EAAO2Y,aAAemL,GACnC2Y,EAAcz8B,EAAOpoD,KAIzB,OAHKyN,IAAQo3E,KACTA,EAAc,GAAIrkF,IAAMR,GAAOuL,WAAWA,GAAYzB,SAEnD+6E,GAEX9E,cAAe,WAAA,GAQP/gI,GAAG5hB,EAUCwlD,EACAE,EAlBJ6nB,EAAM5+E,KACNI,EAAUw+E,EAAIx+E,QACdgjC,EAAMw7C,EAAIx7C,IACV6uH,EAAYrzE,EAAIqzE,UAChBkC,EAAUn0J,KAAKuxJ,MAAMvpF,KAAKmsF,WAAa/wH,EACvC6wH,EAAkB/xI,EAClBgyI,EAAgBjpF,CAgCpB,OA9BI7qE,GAAQw7B,UACR3I,EAAIr0B,KAAKoT,IAAIoxB,EAAI2zB,GAAIo9F,EAAQp9F,IAAMqpF,GAC/B6R,EACA5gJ,EAAIzS,KAAKlG,IAAI0qC,EAAI0zB,GAAIq9F,EAAQr9F,KAE7BzlD,EAAIzS,KAAKoT,IAAIoxB,EAAI4zB,GAAIm9F,EAAQn9F,IAC7Bk9F,EAAgBhpF,KAGhBrU,EAAKj4D,KAAKlG,IAAI0qC,EAAIyzB,GAAIs9F,EAAQt9F,IAC9BE,EAAKn4D,KAAKoT,IAAIoxB,EAAI2zB,GAAIo9F,EAAQp9F,IAC9B32D,EAAQgwJ,WACR8D,EAAgBhpF,EACZ+mF,GACAgC,EAAkB7xI,GAClB6Q,EAAI8jC,GAEJ9jC,EAAI4jC,EAERxlD,EAAIzS,KAAKlG,IAAI0qC,EAAI0zB,GAAIq9F,EAAQr9F,IAAMspF,KAE/B6R,EACAh/H,EAAI8jC,EAAKqpF,IAETntH,EAAI4jC,EAAKupF,GACT6T,EAAkB7xI,IAEtB/Q,EAAIzS,KAAKlG,IAAI0qC,EAAI0zB,GAAIq9F,EAAQr9F,OAIjCuxB,MAAO,GAAIvC,IAAM7yD,EAAG5hB,GACpBk6E,OACI1sD,WAAYo1H,EACZr4H,SAAUs4H,KAItBE,YAAa,SAAUhxH,GACnB,MAAOpjC,MAAKojC,IAAIu0F,SAASv0F,MAGjCxoC,GAAWirJ,GAAI9+I,UAAW09I,IAC1B7pJ,GAAWirJ,GAAI9+I,UAAW29I,IAC1BmB,GAAI9+I,UAAUmzC,UACVmiF,QAAUpjI,MAAO,GACjB2iC,UAAU,EACVogG,SAAWzrC,SAAU,SACrB2wC,QACI19H,SAAS,EACTuF,OAAQ,OAEZm7B,QAAS,EACTq+F,OAAS7sF,WAETowG,GAAgB1yB,GAAa1yH,QAC7Bi2G,OAAQ,SAAUvzE,GAAV,GAWKtoC,GACD44J,EAXJ90E,EAAM5+E,KAAKI,QACXw7B,EAAWgjD,EAAIhjD,SACf/xB,EAAM+0E,EAAI/0E,IACVqsG,EAAUt3B,EAAIs3B,QACdv7G,EAAWqF,KAAKrF,SAChB+Y,EAAQ/Y,EAAS/C,OACjB67B,EAAOmI,EAAWtqB,GAAI6/G,GACtBoe,EAAQ77H,EAAQ7J,EAAMqsG,GAAWxiG,EAAQ,GACzCqlJ,GAAYn9H,EAAWwH,EAAIlqC,SAAWkqC,EAAInqC,SAAWs2I,EACrD5tG,EAAWyB,EAAI3P,EAAO,GAAKslI,GAAYlvJ,EAAM,EACjD,KAAS/O,EAAI,EAAGA,EAAI4Y,EAAO5Y,IACnB44J,GAAY/4J,EAASG,GAAGsoC,KAAOA,GAAKjnC,QACxCu3J,EAASjgI,EAAO,GAAKkO,EACrB+xH,EAASjgI,EAAO,GAAKkO,EAAWo3H,EAChCp+J,EAASG,GAAG67G,OAAO+8C,GACf54J,EAAI4Y,EAAQ,IACZiuB,GAAYo3H,EAAW7iD,GAE3Bv0E,GAAYo3H,KAIxBpvC,GAAkBm8B,IACdlqH,UAAU,EACV/xB,IAAK,EACLqsG,QAAS,IAET6vC,GAAY3yB,GAAa1yH,QACzBi2G,OAAQ,SAAUqgB,GAAV,GAMKl8H,GACD4+H,EAEIg6B,EARRv0E,EAASn/E,KACTg5J,EAAeh5J,KAAKI,QAAQw7B,SAAWu1F,GAAI7/G,GAC3C3W,EAAWqF,KAAKrF,SAChBs/H,EAAgBt/H,EAAS/C,OACzBwrC,EAAMpjC,KAAKojC,IAAM,GAAI8mF,GACzB,KAASpvH,EAAI,EAAGA,EAAIm/H,EAAen/H,IAC3B4+H,EAAe/+H,EAASG,GACxB4+H,EAAal2H,WAAY,IACrBkwJ,EAAWh6B,EAAat2F,IAAIjnC,QAChCu3J,EAASv8B,OAAOH,EAAWgiC,GACjB,IAANl+J,IACAsoC,EAAM+7C,EAAO/7C,IAAMswH,EAASv3J,SAEhCu9H,EAAa/iB,OAAO+8C,GACpBtwH,EAAItqC,KAAK46J,OAKzB/pC,GAAkBo8B,IAAanqH,UAAU,IACrCoqH,GAAWxB,GAAiB9jJ,QAC5B6H,OAAQ,WACJi8I,GAAiBvgJ,GAAGsE,OAAOJ,KAAKnI,MAChCA,KAAKywJ,oBAETjB,UAAW,WACP,MAAO3J,KAEXoT,YAAa,WACT,MAAOnT,KAEXoT,UAAW,WACP,MAAOnT,KAEXuK,YAAa,SAAUvS,EAAUwS,GAC7B,GAAIG,GAASlM,GAAiBvgJ,GAAGqsJ,YAAYnoJ,KAAKnI,KAAM+9I,EAAUwS,EAClE,OAAOG,IAEXY,YAAa,SAAU91J,EAAMg0C,GAAhB,GAkBLykC,GAQAu7E,EACAnnE,EAEA8wE,EAEIF,EASAG,EAvCJ5vB,EAAah6F,EAAOg6F,WACpB5N,EAAWpsF,EAAOosF,SAClBD,EAASnsF,EAAOmsF,OAChB4zB,EAAW//G,EAAO+/G,SAClB3wE,EAAM5+E,KACNI,EAAUw+E,EAAIx+E,QACdzF,EAAWikF,EAAIjkF,SACfy1J,EAAYhwJ,EAAQgwJ,UACpBxyJ,EAAQoC,KAAK+tJ,WAAWvyJ,GACxB8zJ,EAAetvJ,KAAKsvJ,aAAa3zB,EAAQ4zB,GACzCxtB,EAAeutB,EAAapuB,MAkChC,OAjCIkvB,IACIruB,EAAapgG,WAAauiH,KAC1BniB,EAAapgG,SAAWqiH,IAGhCsL,EAAac,UAAYA,EACrBn8E,EAAQz4E,EAAKg0C,OAAOykC,OAAS0nD,EAAO1nD,MACpCr2E,EAAQ,GAAK0xJ,EAAa+J,gBAC1BplF,EAAQq7E,EAAa+J,eAEzB/J,EAAetvJ,KAAKyxJ,iBAAiBnC,EAAc1xJ,EAAOg+H,EAAU4N,EAAY7N,EAAQ4zB,GACpFrzJ,GAAWy/H,EAAO1nD,SAClBA,EAAQq7E,EAAar7E,OAErBu7E,EAAYxvJ,KAAKwvJ,YACjBnnE,EAAQ,GAAImnE,GAAU5xJ,EAAO0xJ,GACjCjnE,EAAMpU,MAAQA,EACVklF,EAAUx+J,EAAS6uI,GAClB2vB,IACGF,EAAcj5J,KAAKi5J,cACvBE,EAAU,GAAIF,IACVr9H,SAAUx7B,EAAQqvJ,WAClB5lJ,IAAKzJ,EAAQyJ,IACbqsG,QAAS91G,EAAQ81G,UAErBl2G,KAAK8jC,OAAOq1H,IAEZ/I,GACIgJ,EAAYp5J,KAAKs5J,aAAa39B,EAAQw9B,GAC1CC,EAAUt1H,OAAOukD,IAEjB8wE,EAAQr1H,OAAOukD,GAEZA,GAEXixE,aAAc,SAAU39B,EAAQw9B,GAAlB,GAINC,GAESt+J,EAULo+J,EAfJjtE,EAAQ0vC,EAAO1vC,MACfstE,EAAattE,EAAQA,EAAMj4C,OAASi4C,EAAQA,EAC5CutE,EAAQL,EAAQx+J,QAEpB,UAAW4+J,KAAeja,EAAiB9+I,QACvC,IAAS1F,EAAI,EAAGA,EAAI0+J,EAAM5hK,OAAQkD,IAC9B,GAAI0+J,EAAM1+J,GAAG2+J,cAAgBF,EAAY,CACrCH,EAAYI,EAAM1+J,EAClB,YAIRs+J,GAAYI,EAAM,EAQtB,OANKJ,KACGF,EAAYl5J,KAAKk5J,YACrBE,EAAY,GAAIF,IAAYt9H,UAAW57B,KAAKI,QAAQqvJ,aACpD2J,EAAUK,YAAcF,EACxBJ,EAAQr1H,OAAOs1H,IAEZA,GAEXpH,aAAc,SAAUpb,EAAcpN,EAAYhC,GAApC,GAKFkyB,GACA7tE,EALJzrF,EAAUJ,KAAKI,QACf4xJ,EAAepb,EAAa3S,QAAQuF,GACpCxuG,EAAawsG,EAAUxsG,YAM3B,OALI56B,GAAQgwJ,YACJsJ,EAAWlyB,EAAUvD,QAAQjpG,EAAYA,GAAY,GACrD6wD,EAAYzrF,EAAQqvJ,WAAat+B,GAAI7/G,GACzC0gJ,EAAanmE,EAAY,GAAKmmE,EAAanmE,EAAY,GAAK6tE,EAAS7tE,EAAY,IAE9EmmE,GAEXI,iBAAkB,SAAUR,GAAV,GAGL92J,GAFLH,EAAWqF,KAAKrF,SAChBgmC,EAAiBhmC,EAAS/C,MAC9B,KAASkD,EAAI,EAAGA,EAAI6lC,EAAgB7lC,IAChCH,EAASG,GAAG67G,OAAOi7C,EAAc92J,KAGzCu/H,gBAAiB,WACbr6H,KAAK25J,uBACLnV,GAAiBvgJ,GAAGo2H,gBAAgBlyH,KAAKnI,MACrCy6I,EAAaz6I,KAAKI,QAAQu7H,SAC1B37H,KAAKi2J,yBAGbA,sBAAuB,WAAA,GAGVt4J,GACD0qF,EACAuxE,EAJJz6E,EAASn/E,KACTyoF,EAASzoF,KAAKyoF,MAClB,KAAS9qF,EAAM,EAAGA,EAAM8qF,EAAO7wF,OAAQ+F,IAC/B0qF,EAAQI,EAAO9qF,GACfi8J,EAAcvxE,EAAM8Z,OACpBy3D,GAAel4E,GAAQk4E,EAAYx5J,QAAQujC,UAC3C0kD,EAAMjoF,QAAQmsE,UAAY4S,EAAO/+E,QAAQmsE,UACzC8b,EAAMgyC,oBAIlBs/B,qBAAsB,WAAA,GAGd52H,GAEIykG,EAJJpnI,EAAUJ,KAAKI,QACfmsE,EAAYnsE,EAAQmsE,aAEpBnsE,GAAQgwJ,WACJ5oB,EAAYxnI,KAAK6uJ,gBAAgBzuJ,EAAQu7H,OAAO,IACpD54F,EAASykG,EAAUvD,QAAQuD,EAAUxsG,eAErC+H,EAAS/iC,KAAK42I,aAAa3S,QAAQ,GAEvC13D,EAAUxpC,OAAS,GAAIw8G,IAAcx8G,EAAO8zB,GAAI9zB,EAAO+zB,IACvDyV,EAAU3wC,UAAYx7B,EAAQqvJ,cAGtC9lC,GAAkBq8B,IAAYz5E,WAAartE,KAAMgiJ,MAC7C+E,GAAc7yB,GAAa1yH,QAC3BC,KAAM,SAAU/C,EAAOwC,GACnBgzH,GAAanvH,GAAGtD,KAAKwH,KAAKnI,KAAMI,GAChCJ,KAAKpC,MAAQA,GAEjB+4G,OAAQ,SAAUvzE,GAAV,GAWAy2H,GACApxE,EAXA7J,EAAM5+E,KACNI,EAAUw+E,EAAIx+E,QACdxC,EAAQghF,EAAIhhF,MACZq4H,EAAQr3C,EAAI2yE,MACZ/pB,EAAYvR,EAAM44B,gBAAgBzuJ,GAClC05J,EAAStyB,EAAUvD,QAAQrmI,EAAM4uE,KAAM5uE,EAAM6uE,OAC7CstF,EAASvyB,EAAUvD,QAAQrmI,EAAM8vH,IAAK9vH,EAAM+vH,KAChDmsC,GAAOjjG,GAAKkjG,EAAOljG,GAAKzzB,EAAIyzB,GAC5BijG,EAAO/iG,GAAKgjG,EAAOhjG,GAAK3zB,EAAI2zB,GAC5B/2D,KAAKg6J,SAAWF,EACZD,EAAME,EAAO5iG,SAASlkC,EACtBw1D,KACJA,EAAO3gF,OAEC+xJ,EACAE,EAAOjjG,KAGP+iG,EACAC,EAAOhjG,MAGf2xB,EAAO3gF,OAEC+xJ,EACAC,EAAO9iG,KAGP6iG,EACAE,EAAO/iG,MAGfh3D,KAAKi6J,MAAQxxE,EACbzoF,KAAKojC,IAAM22H,EAAO59J,QAAQrD,KAAKghK,GAC1B95J,KAAKozJ,YACNpzJ,KAAKozJ,WAAY,EACjBpzJ,KAAKgzJ,cAEThzJ,KAAKk6J,cAETA,WAAY,WACJl6J,KAAKsiI,MACLtiI,KAAKsiI,KAAK3rB,OAAO32G,KAAKojC,MAG9B+2F,aAAc,WACV/G,GAAanvH,GAAGk2H,aAAahyH,KAAKnI,MAClCA,KAAKm6J,YAAcn6J,KAAKo6J,WAAWp6J,KAAKI,SACxCJ,KAAKmiG,OAAOr+D,OAAO9jC,KAAKm6J,aACxBn6J,KAAKq6J,iBAETD,WAAY,SAAUh6J,GAClB,GAAI4zC,GAAQ,GAAIw7C,GAGhB,OAFAxvF,MAAKs6J,WAAWtmH,EAAO5zC,GACvBJ,KAAKu6J,YAAYvmH,EAAO5zC,GACjB4zC,GAEXsmH,WAAY,SAAU3yI,EAAWvnB,GAC7B,GAAIyX,GAAOilF,GAAKkF,SAAShiG,KAAKg6J,SAAShiC,UACnCj7B,MACI9oB,MAAOj0E,KAAKi0E,MACZ/vC,QAAS9jC,EAAQ8jC,SAErB84D,OAAQ,MAER58F,GAAQi8H,OAAOpjI,MAAQ,GACvB4e,EAAKzX,QAAQsjB,IAAI,UACbuwD,MAAOj0E,KAAK44J,iBACZ3/J,MAAOmH,EAAQi8H,OAAOpjI,MACtB4lH,SAAUz+G,EAAQi8H,OAAOxd,SACzB36E,QAASq/C,GAAenjF,EAAQi8H,OAAOn4F,QAAS9jC,EAAQ8jC,WAGhEskF,GAAiB3wG,GACjB8P,EAAUmc,OAAOjsB,GACb6iI,EAAmBt6I,IACnBunB,EAAUmc,OAAO9jC,KAAK87H,sBAAsBjkH,GAAQghJ,UAAW74J,KAAKi0E,OAASr5E,IACzEjD,IAAMyI,EAAQw7B,SAGVhlC,QAFA,EACA,IAELwJ,EAAQ47H,YAGnBu+B,YAAa,SAAU5yI,EAAWvnB,GAC9BJ,KAAKw6J,UAAU7yI,EAAWvnB,EAASJ,KAAKi6J,MAAO75J,EAAQukG,OAE3D61D,UAAW,SAAU7yI,EAAWvnB,EAAS65J,EAAO51B,GAArC,GAIHo2B,GASK3/J,EACD6pG,CAbR,IAAKs1D,EAYL,IATIQ,GACAz9D,QACI/oB,MAAOowD,EAAYpwD,OAASj0E,KAAKi0E,MACjC/vC,QAASq/C,GAAe8gD,EAAYngG,QAAS9jC,EAAQ8jC,SACrDjrC,MAAOorI,EAAYprI,MACnB4lH,SAAUwlB,EAAYxlB,SACtBI,QAAS,SAGRnkH,EAAI,EAAGA,EAAIm/J,EAAMriK,OAAQkD,IAC1B6pG,EAAO7H,GAAKiS,WAAWkrD,EAAMn/J,GAAI2/J,GACrCjyC,GAAiB7jB,GACjBh9E,EAAUmc,OAAO6gE,IAGzBi0D,eAAgB,WAAA,GACRv8B,GAASr8H,KAAKI,QAAQi8H,OACtBy8B,EAAcz8B,EAAOpoD,KAIzB,OAHKyN,IAAQo3E,KACTA,EAAc,GAAIrkF,IAAMz0E,KAAKi0E,OAAOuL,WAAW68C,EAAO2Y,aAAaj3D,SAEhE+6E,GAEXuB,cAAe,WACX,GAAIr+B,GAAUl/B,GAAKkF,SAAShiG,KAAKojC,IAAI40F,UACjCj7B,MACI9oB,MAAOq9C,GACPptF,QAAS,GAEb84D,OAAQ,MAEZh9F,MAAKmiG,OAAOr+D,OAAOk4F,IAEvBX,gBAAiB,WAAA,GAITW,GAHAZ,EAAYp7H,KAAKI,QAAQg7H,UACzBs/B,EAAc16J,KAAKi0E,KAIvB,OAHAj0E,MAAKi0E,MAAQmnD,EAAUnnD,OAASj0E,KAAKi0E,MACjC+nD,EAAUh8H,KAAKo6J,WAAWx/J,MAAeoF,KAAKI,SAAWukG,MAAQ1wB,MAAOj0E,KAAK44J,mBAAsBx9B,IACvGp7H,KAAKi0E,MAAQymF,EACN1+B,GAEX83B,gBAAiB,WACb,MAAO9zJ,MAAKm6J,aAEhBz+B,oBAAqB,WACjB,OACIt7H,QAASJ,KAAKI,QACdq+D,KAAMz+D,KAAKojC,IAAI40F,SACf71B,OAAQniG,KAAKm6J,cAGrBnG,cAAe,WAAA,GACP5wH,GAAMpjC,KAAKojC,IACX+wH,EAAUn0J,KAAKuxJ,MAAMvpF,KAAKmsF,WAAa/wH,CAC3C,QACIilD,MAAO,GAAIvC,IAAM1iD,EAAI2zB,GAAKqpF,GAAgBxhJ,KAAKlG,IAAI0qC,EAAI0zB,GAAIq9F,EAAQr9F,IAAMspF,IACzE70D,OACI1sD,WAAY3c,EACZ0Z,SAAUqvC,KAItBqoF,YAAa,SAAUvqJ,GACnB,MAAO/I,MAAKuxJ,MAAMwB,iBAAiB/yJ,KAAM+I,IAE7CqrJ,YAAa,SAAUhxH,GACnB,MAAOpjC,MAAKojC,IAAIu0F,SAASv0F,MAGjCumF,GAAkBs8B,IACdrqH,UAAU,EACVygG,QAAU2Y,YAAa,IACvBrwC,MAAQ1rG,MAAO,GACf+iI,SAAWzrC,SAAU,SACrB82B,SAAWt+G,OAAQ,0MACnBqyH,WACIl3F,QAAS,EACTm4F,QACIpjI,MAAO,EACPirC,QAAS,GAEbygE,MACI1rG,MAAO,EACPirC,QAAS,IAGjBq+F,OACI/+H,SAAS,EACTkyC,YAGR96C,GAAWqrJ,GAAYl/I,UAAW09I,IAClC7pJ,GAAWqrJ,GAAYl/I,UAAW29I,IAI9BwB,GAAmB1B,GAAiB9jJ,QACpC0xJ,iBAAkB,SAAUR,GAAV,GAGL92J,GAFLH,EAAWqF,KAAKrF,SAChBgmC,EAAiBhmC,EAAS/C,MAC9B,KAASkD,EAAI,EAAGA,EAAI6lC,EAAgB7lC,IAChCH,EAASG,GAAG67G,OAAOi7C,EAAc92J,KAGzCu0J,SAAU,SAAU7zJ,EAAMg0C,GAAhB,GAaF64C,GAOA8wE,EAnBA3vB,EAAah6F,EAAOg6F,WACpB5N,EAAWpsF,EAAOosF,SAClBD,EAASnsF,EAAOmsF,OAChB4zB,EAAW//G,EAAO+/G,SAClB3wE,EAAM5+E,KACNrF,EAAWikF,EAAIjkF,SACfyF,EAAUw+E,EAAIx+E,QACdxC,EAAQpC,EAAKyhJ,YACb0d,EAAa36J,KAAK46J,WAAWh9J,GAC7Bi1D,EAAW8nF,EAAWggB,GACtBl0I,EAAWk1G,EAAOngI,KAAKguI,GACvBwlB,EAAiBhvJ,KAAKgvJ,eAAexlB,EAEpCwlB,KACDhvJ,KAAKgvJ,eAAexlB,GAAcwlB,MAElCn8F,IACAw1B,EAAQroF,KAAKsxJ,YAAY91J,EAAMg0C,IAE/B2pH,EAAUx+J,EAAS6uI,GAClB2vB,IACDA,EAAU,GAAIrT,KACVlqH,SAAUx7B,EAAQqvJ,WAClB5lJ,IAAKzJ,EAAQyJ,IACbqsG,QAAS91G,EAAQ81G,UAErBl2G,KAAK8jC,OAAOq1H,IAEZ9wE,IACAroF,KAAKqxJ,YAAYzzJ,EAAO4xC,GACxB2pH,EAAQr1H,OAAOukD,GACfA,EAAMmhD,WAAaA,EACnBnhD,EAAMuzC,SAAWA,EACjBvzC,EAAMszC,OAASA,EACftzC,EAAMknE,SAAWA,EACjBlnE,EAAMkpE,MAAQvxJ,KACdqoF,EAAM5hE,SAAWA,EACjB4hE,EAAMmpE,SAAWh2J,EAAKg0C,OAAOgiH,UAEjCxxJ,KAAKyoF,OAAO3gF,KAAKugF,GACjB2mE,EAAelnJ,KAAKugF,IAExBmnE,UAAW,WACP,MAAOvJ,KAEXqL,YAAa,SAAU91J,EAAMg0C,GAAhB,GAmBL64C,GAlBAmhD,EAAah6F,EAAOg6F,WACpB5N,EAAWpsF,EAAOosF,SAClBD,EAASnsF,EAAOmsF,OAChB4zB,EAAW//G,EAAO+/G,SAClBC,EAAYxvJ,KAAKwvJ,YACjB5xJ,EAAQpC,EAAKyhJ,YACbqS,EAAe10J,MAAe+gI,GAC9B1nD,EAAQz4E,EAAKg0C,OAAOykC,OAAS0nD,EAAO1nD,KAaxC,OAZAq7E,GAAetvJ,KAAKyxJ,iBAAiBnC,EAAc1xJ,EAAOg+H,EAAU4N,EAAY7N,EAAQ4zB,GACpF5zB,EAAOz8H,OAASoiJ,IACZ1jJ,EAAM4uE,KAAO5uE,EAAM6uE,QACnBwH,EAAQz4E,EAAKg0C,OAAOylG,WAAatZ,EAAOsZ,WAAatZ,EAAO1nD,OAGhE/3E,GAAWy/H,EAAO1nD,SAClBA,EAAQq7E,EAAar7E,OAEzBq7E,EAAa1zH,UAAY57B,KAAKI,QAAQqvJ,WAClCpnE,EAAQ,GAAImnE,GAAU5xJ,EAAO0xJ,GACjCjnE,EAAMpU,MAAQA,EACPoU,GAEXuyE,WAAY,SAAUh9J,GAClB,OACIA,EAAM8vH,IACN9vH,EAAM4uE,KACN5uE,EAAM6uE,MACN7uE,EAAM+vH,OAGd0jC,YAAa,SAAUzzJ,EAAO4xC,GAAjB,GACLuuG,GAAWvuG,EAAOmsF,OAAOloG,KACzBhrB,EAAQzI,KAAK46J,WAAWh9J,GACxB0+I,EAAYt8I,KAAK+uJ,gBAAgBhR,EACrCzB,GAAYt8I,KAAK+uJ,gBAAgBhR,GAAYzB,IACzCtqI,IAAK07F,EACLh1G,IAAKmxH,GAETyyB,EAAYt8I,KAAK+uJ,gBAAgBhR,IAC7B/rI,IAAKpT,KAAKoT,IAAIlL,MAAMlI,KAAM6J,EAAMyN,QAAQomI,EAAUtqI,OAClDtZ,IAAKkG,KAAKlG,IAAIoO,MAAMlI,KAAM6J,EAAMyN,QAAQomI,EAAU5jJ,SAG1Dq6J,iBAAkB,SAAU1qE,EAAOt/E,GAC/B,GAAInL,GAAQyqF,EAAMzqF,KAClB,OAAOoC,MAAK+5H,aAAahxH,OAAO6sH,KAAK7sH,EAAQnL,EAAM4uE,KAAM5uE,EAAM+vH,KAAM/vH,EAAM8vH,IAAK9vH,EAAM6uE,MAAO4b,EAAMuzC,WAEvGs6B,gBAAiB,WACb,MAAOl2J,MAAKyoF,UAGpB7tF,GAAWsrJ,GAAiBn/I,UAAWo+I,IACnCgB,GAAUF,GAAYvlJ,QACtBC,KAAM,SAAU/C,EAAOwC,GACnB6lJ,GAAYhiJ,GAAGtD,KAAKwH,KAAKnI,KAAMpC,EAAOwC,GACtCJ,KAAKgzJ,cAETr8C,OAAQ,SAAUvzE,GAAV,GAMAy3H,GAAaC,EAMbC,EAEIC,EAbJp8E,EAAM5+E,KACNI,EAAUw+E,EAAIx+E,QACdxC,EAAQghF,EAAIhhF,MACZq4H,EAAQr3C,EAAI2yE,MACZ/pB,EAAYvR,EAAM44B,gBAAgBzuJ,EAEtCJ,MAAK86J,QAAUA,EAAUtzB,EAAUvD,QAAQrmI,EAAMq9J,GAAIr9J,EAAMs9J,IAC3Dl7J,KAAKg6J,SAAWc,EAChB96J,KAAKm7J,cAAc/3H,GACnBpjC,KAAK66J,YAAcA,EAAcrzB,EAAUvD,QAAQrmI,EAAM6W,MAAO7W,EAAM4tI,OACtExrI,KAAKo7J,kBAAkBh4H,GACnB23H,EAAavzB,EAAUvD,QAAQrmI,EAAMw3I,QACrCx3I,EAAMu3I,OACF6lB,EAAWxzB,EAAUvD,QAAQrmI,EAAMu3I,MACvCn1I,KAAKq7J,WAAar7J,KAAKs7J,eAAel4H,EAAK43H,IAE/Ch7J,KAAKu7J,cAAgBv7J,KAAKw7J,kBAAkBV,EAASD,GACrD76J,KAAKy7J,aAAez7J,KAAK07J,iBAAiBt4H,EAAK23H,GAC/C/6J,KAAKojC,IAAMy3H,EAAY1+J,QAAQrD,KAAKgiK,GACpC96J,KAAKk6J,cAETiB,cAAe,SAAU/3H,GACrBpjC,KAAK86J,QAAQjkG,GAAKzzB,EAAIyzB,GACtB72D,KAAK86J,QAAQ/jG,GAAK3zB,EAAI2zB,IAE1BqkG,kBAAmB,SAAUh4H,GACzBpjC,KAAK66J,YAAYhkG,GAAKzzB,EAAIyzB,GAC1B72D,KAAK66J,YAAY9jG,GAAK3zB,EAAI2zB,IAE9BukG,eAAgB,SAAUl4H,EAAK43H,GAC3B,SAEY53H,EAAIyzB,GACJmkG,EAASlkG,KAGT1zB,EAAI2zB,GACJikG,EAASlkG,OAIzB0kG,kBAAmB,SAAUV,EAASD,GAClC,GAAIhB,GAAMgB,EAAY1jG,SAASlkC,CAC/B,UAGY4mI,EAAM,EACNgB,EAAY/jG,KAGZ+iG,EAAM,EACNgB,EAAY/jG,KAGZ+iG,EACAgB,EAAY/jG,KAGZ+iG,EACAiB,EAAQhkG,OAKR+iG,EAAM,EACNgB,EAAY7jG,KAGZ6iG,EAAM,EACNgB,EAAY7jG,KAGZ6iG,EACAgB,EAAY7jG,KAGZ6iG,EACAiB,EAAQ9jG,OAKxB0kG,iBAAkB,SAAUt4H,EAAK23H,GAC7B,SAEY33H,EAAIyzB,GACJkkG,EAAWjkG,KAGX1zB,EAAI2zB,GACJgkG,EAAWjkG,OAI3B6kG,eAAgB,SAAUv7J,GAAV,GAOHtF,GACD8gK,EAMAC,EAQAnhE,EArBJvb,EAASn/E,KACTpC,EAAQoC,KAAKpC,MACbk+J,EAAWl+J,EAAMk+J,aACjBC,EAA6C,EAAhCn9J,KAAKC,IAAIjB,EAAMs9J,GAAKt9J,EAAMq9J,IACvC10I,KACAsuH,EAAUz0I,EAAQy0I,WACtB,KAAS/5I,EAAI,EAAGA,EAAIghK,EAASlkK,OAAQkD,IAC7B8gK,EAAeE,EAAShhK,GAExB+5I,EADA+mB,EAAeh+J,EAAMs9J,GAAKa,GAAcH,EAAeh+J,EAAMq9J,GAAKc,EACxD37J,EAAQ07J,SAER17J,EAAQ4zG,SAElB6nD,EAAgBjhK,MAAei6I,EAAQxY,QACtC36C,GAAQm6E,EAAc5nF,SAEnB4nF,EAAc5nF,MADdyN,GAAQvC,EAAOlL,OACOkL,EAAOlL,MAEP,GAAIQ,IAAMogE,EAAQ71C,YAAYxf,WAAW2gE,IAAmBpiE,SAGtF2c,EAAQ,GAAI44B,KACZp0H,KAAM21I,EAAQ31I,KACdjG,MAAO47I,EAAQ92I,KACf7E,OAAQ27I,EAAQ92I,KAChB2lC,SAAUmxG,EAAQnxG,SAClBs7D,WAAY61C,EAAQ71C,WACpBq9B,OAAQw/B,EACR33H,QAAS2wG,EAAQ3wG,UAErBw2D,EAAM98F,MAAQg+J,EACdr1I,EAASze,KAAK4yF,EAGlB,OADA16F,MAAKg8J,eAAez1I,GACbA,GAEXy1I,eAAgB,SAAUF,GAAV,GAIHhhK,GACD8gK,EACApI,EALJr0E,EAASn/E,KACTwnI,EAAYxnI,KAAKuxJ,MAAM1C,gBAAgB7uJ,KAAKI,SAC5C+2D,EAASn3D,KAAKojC,IAAI+zB,QACtB,KAASr8D,EAAI,EAAGA,EAAIghK,EAASlkK,OAAQkD,IAC7B8gK,EAAeE,EAAShhK,GAAG8C,MAC3B41J,EAAYhsB,EAAUvD,QAAQ23B,GAC9Bz8E,EAAO/+E,QAAQw7B,SACf43H,EAAUzoI,KAAKosC,EAAOlkC,GAEtBugI,EAAUzoI,KAAKn0B,OAAWugE,EAAO9lD,GAErC8tE,EAAO/7C,IAAM+7C,EAAO/7C,IAAItqC,KAAK06J,GAC7BsI,EAAShhK,GAAG67G,OAAO68C,IAG3B4G,WAAY,SAAUh6J,GAAV,GAGCtF,GACD/C,EAHJi8C,EAAQiyG,GAAYhiJ,GAAGm2J,WAAWjyJ,KAAKnI,KAAMI,GAC7C07J,EAAW97J,KAAK27J,eAAev7J,EACnC,KAAStF,EAAI,EAAGA,EAAIghK,EAASlkK,OAAQkD,IAC7B/C,EAAU+jK,EAAShhK,GAAG8hI,aACtB7kI,GACAi8C,EAAMlQ,OAAO/rC,EAGrB,OAAOi8C,IAEXumH,YAAa,SAAU5yI,EAAWvnB,GAC9BJ,KAAKw6J,UAAU7yI,EAAWvnB,EAASJ,KAAKu7J,cAAen7J,EAAQ80I,UAC/Dl1I,KAAKw6J,UAAU7yI,EAAWvnB,EAASJ,KAAKy7J,aAAcr7J,EAAQg1I,QAC9Dp1I,KAAKw6J,UAAU7yI,EAAWvnB,EAASJ,KAAKq7J,WAAYj7J,EAAQ+0I,OAEhEyjB,eAAgB,WACZ,MAAI54J,MAAKi0E,MACEj0E,KAAKi0E,MAETgyE,GAAYhiJ,GAAG20J,eAAezwJ,KAAKnI,SAGlD2pH,GAAkBw8B,IACd9pB,QAAU2Y,YAAa,IACvBrwC,MAAQ1rG,MAAO,GACfm8I,QAAUnhE,MAAO,WACjBkhE,MACIl8I,MAAO,EACP4lH,SAAU,OACV5qC,MAAO,WAEX+nD,SAAWzrC,SAAU,SACrB82B,SAAWt+G,OAAQ,oRACnBqyH,WACIl3F,QAAS,EACTm4F,QACIpjI,MAAO,EACPirC,QAAS,GAEbygE,MACI1rG,MAAO,EACPirC,QAAS,IAGjBq+F,OACI/+H,SAAS,EACTkyC,UAEJomH,UACIt4J,SAAS,EACTzF,KAAM6iJ,GACN1hJ,KAAMogJ,EAAiBxtB,MACvB9yB,WAAYsyB,GACZ+K,QACIpjI,MAAO,EACPirC,QAAS,GAEbA,QAAS,GAEb8vE,UACIxwG,SAAS,EACTzF,KAAM6iJ,GACN1hJ,KAAM0yH,GACN5yB,WAAYsyB,GACZ+K,QACIpjI,MAAO,EACPirC,QAAS,GAEbA,QAAS,KAGjBtpC,GAAWurJ,GAAQp/I,UAAW09I,IAC1B2B,GAAkBD,GAAQzlJ,QAC1By6J,cAAe,SAAU/3H,GACrBpjC,KAAK86J,QAAQhkG,GAAK1zB,EAAI0zB,GACtB92D,KAAK86J,QAAQ9jG,GAAK5zB,EAAI4zB,IAE1BokG,kBAAmB,SAAUh4H,GACzBpjC,KAAK66J,YAAY/jG,GAAK1zB,EAAI0zB,GAC1B92D,KAAK66J,YAAY7jG,GAAK5zB,EAAI4zB,IAE9BskG,eAAgB,SAAUl4H,EAAK43H,GAC3B,SAEYA,EAASnkG,GACTzzB,EAAI0zB,KAGJkkG,EAASnkG,GACTzzB,EAAI4zB,OAIpBwkG,kBAAmB,SAAUV,EAASD,GAClC,GAAIhB,GAAMgB,EAAY1jG,SAAS9lD,CAC/B,UAGYwpJ,EAAYhkG,GACZgjG,EAAM,IAGNgB,EAAYhkG,GACZgjG,EAAM,IAGNgB,EAAYhkG,GACZgjG,IAGAiB,EAAQjkG,GACRgjG,MAKAgB,EAAY9jG,GACZ8iG,EAAM,IAGNgB,EAAY9jG,GACZ8iG,EAAM,IAGNgB,EAAY9jG,GACZ8iG,IAGAiB,EAAQ/jG,GACR8iG,MAKhB6B,iBAAkB,SAAUt4H,EAAK23H,GAC7B,SAEYA,EAAWlkG,GACXzzB,EAAI0zB,KAGJikG,EAAWlkG,GACXzzB,EAAI4zB,SAKpBqvF,GAAeH,GAAiBxlJ,QAChC2uJ,SAAU,SAAU7zJ,EAAMg0C,GAAhB,GAaF64C,GAOA8wE,EAnBA3vB,EAAah6F,EAAOg6F,WACpB5N,EAAWpsF,EAAOosF,SAClBD,EAASnsF,EAAOmsF,OAChB4zB,EAAW//G,EAAO+/G,SAClB3wE,EAAM5+E,KACNrF,EAAWikF,EAAIjkF,SACfyF,EAAUw+E,EAAIx+E,QACdxC,EAAQpC,EAAKyhJ,YACb0d,EAAa36J,KAAK46J,WAAWh9J,GAC7Bi1D,EAAW8nF,EAAWggB,GACtBl0I,EAAWk1G,EAAOngI,KAAKguI,GACvBwlB,EAAiBhvJ,KAAKgvJ,eAAexlB,EAEpCwlB,KACDhvJ,KAAKgvJ,eAAexlB,GAAcwlB,MAElCn8F,IACAw1B,EAAQroF,KAAKsxJ,YAAY91J,EAAMg0C,IAE/B2pH,EAAUx+J,EAAS6uI,GAClB2vB,IACDA,EAAU,GAAIrT,KACVlqH,SAAUx7B,EAAQqvJ,WAClB5lJ,IAAKzJ,EAAQyJ,IACbqsG,QAAS91G,EAAQ81G,UAErBl2G,KAAK8jC,OAAOq1H,IAEZ9wE,IACAroF,KAAKqxJ,YAAYzzJ,EAAO4xC,GACxB2pH,EAAQr1H,OAAOukD,GACfA,EAAMmhD,WAAaA,EACnBnhD,EAAMuzC,SAAWA,EACjBvzC,EAAMszC,OAASA,EACftzC,EAAMknE,SAAWA,EACjBlnE,EAAMkpE,MAAQvxJ,KACdqoF,EAAM5hE,SAAWA,GAErBzmB,KAAKyoF,OAAO3gF,KAAKugF,GACjB2mE,EAAelnJ,KAAKugF,IAExBmnE,UAAW,WACP,MAAIxvJ,MAAKI,QAAQqvJ,WACNrJ,GAEJD,IAEXyU,WAAY,SAAUh9J,GAClB,OACIA,EAAM6W,MACN7W,EAAMq9J,GACNr9J,EAAMw3I,OACNx3I,EAAMs9J,GACNt9J,EAAM4tI,QAGd6lB,YAAa,SAAUzzJ,EAAO4xC,GAAjB,GACLuuG,GAAWvuG,EAAOmsF,OAAOloG,KACzB6oH,EAAYt8I,KAAK+uJ,gBAAgBhR,GACjCt1I,EAAQzI,KAAK46J,WAAWh9J,GAAOsY,OAAOlW,KAAKi8J,eAAer+J,EAAMk+J;AAChEp6E,GAAQ9jF,EAAMu3I,QACd1sI,EAAQA,EAAMyN,OAAOtY,EAAMu3I,OAE/BmH,EAAYt8I,KAAK+uJ,gBAAgBhR,GAAYzB,IACzCtqI,IAAK07F,EACLh1G,IAAKmxH,GAETyyB,EAAYt8I,KAAK+uJ,gBAAgBhR,IAC7B/rI,IAAKpT,KAAKoT,IAAIlL,MAAMlI,KAAM6J,EAAMyN,QAAQomI,EAAUtqI,OAClDtZ,IAAKkG,KAAKlG,IAAIoO,MAAMlI,KAAM6J,EAAMyN,QAAQomI,EAAU5jJ,SAG1Dq6J,iBAAkB,SAAU1qE,EAAOt/E,GAC/B,GAAInL,GAAQyqF,EAAMzqF,KAClB,OAAOoC,MAAK+5H,aAAahxH,OAAO6sH,KAAK7sH,EAAQnL,EAAM6W,MAAO7W,EAAMq9J,GAAIr9J,EAAMw3I,OAAQx3I,EAAMs9J,GAAIt9J,EAAM4tI,MAAO5tI,EAAMu3I,KAAM9sD,EAAMuzC,WAE/HqgC,eAAgB,SAAUz1I,GAAV,GAGH1rB,GACD43C,EAHJ96C,GAAU4uB,OAAa5uB,OACvBoH,IACJ,KAASlE,EAAI,EAAGA,EAAIlD,EAAQkD,IACpB43C,EAAOlsB,EAAM1rB,GACb4mF,GAAQhvC,IAAkB,OAATA,GACjB1zC,EAAO8I,KAAK4qC,EAGpB,OAAO1zC,MAGXsnJ,GAAkBhC,GAAa5jJ,QAC/B0tJ,QAAS,WAAA,GACDpqB,GAAOhkI,KAAKi2H,MAAMimC,WAAWl8J,KAAK27H,QAClCloG,EAAOzzB,KAAKutF,WAAay2C,EAAK3yH,EAAI2yH,EAAK/wG,CAC3C,OAAOQ,MAMX8yH,GAAenzB,GAAa1yH,QAC5BC,KAAM,SAAUmjI,EAAU1jI,GACtBgzH,GAAanvH,GAAGtD,KAAKwH,KAAKnI,KAAMI,GAChCJ,KAAK8jI,SAAWA,EAChB9jI,KAAK+5H,aAAe+J,EAAS/J,aAC7B/5H,KAAKm8J,cACLn8J,KAAKuI,UAET4zJ,YAAa,WACTn8J,KAAKo8J,eACLp8J,KAAKq8J,eACLr8J,KAAKyoF,UACLzoF,KAAKivJ,gBACLjvJ,KAAKkvJ,iBACLlvJ,KAAKmvJ,gBAET5mJ,OAAQ,WACJvI,KAAKovJ,mBAAmBpvJ,KAAKqvJ,SAASjoJ,KAAKpH,QAE/C8wJ,YAAa,SAAUzoE,EAAOtqE,EAAOyxB,GAAxB,GAWD69G,GAVJzvJ,EAAQyqF,EAAMzqF,MAAMmgB,GACpBu+I,EAAkBv+I,EAAQ,QAC1Bw+I,EAAWx+I,EAAQ,WACnBy+I,EAAYz+I,EAAQ,YACpBwxI,EAAW//G,EAAO+/G,SAClB5zB,EAASnsF,EAAOmsF,OAChBgd,EAAYtwD,EAAMjoF,QAAQu4I,UAC1BoY,EAAWvhH,EAAO+sH,GAClBvL,EAAYxhH,EAAOgtH,EACnBxpH,GAASp1C,KAELo1C,EAAS+9G,IAAa/9G,EAASg+G,KAC/B3D,GACI3/B,IAAKqjC,EACLpjC,KAAMqjC,IAGVrY,GAAaj3D,GAAQi3D,EAAU2jB,MAC/Bt8J,KAAKixJ,kBAAoBjxJ,KAAKixJ,oBAC1Bh+H,KACA5hB,MAEJrR,KAAKixJ,kBAAkBlzI,GAAOwxI,GAAYvvJ,KAAKixJ,kBAAkBlzI,GAAOwxI,IAAa,GAAIxP,IAAqBpH,EAAU2jB,GAAkB3gC,EAAQ59G,GAClJsvI,EAAartJ,KAAKixJ,kBAAkBlzI,GAAOwxI,GAAUzB,cAAclwJ,EAAO+6I,EAAU2jB,KAEpFjP,GACArtJ,KAAKkxJ,iBAAiB7D,EAAYhlE,EAAOtqE,KAIrDmzI,iBAAkB,SAAU7D,EAAYhlE,EAAOtqE,GAA7B,GAUVqzI,GATA1jC,EAAM2/B,EAAW3/B,IACjBC,EAAO0/B,EAAW1/B,KAClBgO,EAAStzC,EAAMszC,OACfv7H,EAAUioF,EAAMjoF,QAAQu4I,UACxBprD,EAAaxvE,IAAUzM,GACvBohC,IACJ21C,GAAMtqE,EAAQ,OAAS2vG,EACvBrlC,EAAMtqE,EAAQ,QAAU4vG,EACxBtlC,EAAMswD,UAAYtwD,EAAMswD,cACpByY,EAAW,GAAI9K,IAAgB54B,EAAKC,EAAMpgC,EAAYvtF,KAAM27H,EAAQv7H,GACxEioF,EAAMswD,UAAU7wI,KAAKspJ,GACrB/oE,EAAMvkD,OAAOstH,GACb1+G,EAAK30B,GAAS2vG,EACd1tH,KAAKqxJ,YAAY3+G,EAAMipF,GACvBjpF,EAAK30B,GAAS4vG,EACd3tH,KAAKqxJ,YAAY3+G,EAAMipF,IAE3B0zB,SAAU,SAAUzxJ,EAAO4xC,GAAjB,GAWF64C,GAVAp1D,EAAIr1B,EAAMq1B,EACV5hB,EAAIzT,EAAMyT,EACVk+I,EAAW//G,EAAO+/G,SAClB5zB,EAAS37H,KAAKI,QAAQu7H,OAAO4zB,GAC7BkG,EAAgBz1J,KAAK80J,oBAAoBn5B,GACzCszB,EAAejvJ,KAAKivJ,aAAaM,GACjCxB,EAAanwJ,CACXi1D,GAAS5/B,IAAM4/B,EAASxhD,KAC1B08I,EAAa/tJ,KAAKy8J,mBAAmB1O,EAAY0H,IAGjD1H,IACA1lE,EAAQroF,KAAKsxJ,YAAYvD,EAAYv+G,GACjC64C,IACA3xF,EAAEgK,OAAO2nF,EAAO74C,GAChBxvC,KAAK8wJ,YAAYzoE,EAAO8oC,GAAG3hF,GAC3BxvC,KAAK8wJ,YAAYzoE,EAAO/2E,GAAGk+B,IAE/BxvC,KAAKqxJ,YAAYtD,EAAYv+G,EAAOmsF,SAExC37H,KAAKyoF,OAAO3gF,KAAKugF,GACjB4mE,EAAannJ,KAAKugF,IAEtBysE,oBAAqB,SAAUn5B,GAC3B,MAAOA,GAAO85B,eAElBgH,mBAAoB,aAEpBpL,YAAa,SAAUzzJ,EAAO+9H,GAAjB,GACL/N,GAAc5tH,KAAK+5H,aAAajE,KAChC4mC,EAAY/gC,EAAOghC,MACnBC,EAAYjhC,EAAOkhC,MACnB5pI,EAAIr1B,EAAMq1B,EACV5hB,EAAIzT,EAAMyT,EACVyrJ,EAAa98J,KAAKo8J,YAAYM,GAC9BK,EAAa/8J,KAAKq8J,YAAYO,EAC9B/pG,GAAS5/B,KACT6pI,EAAa98J,KAAKo8J,YAAYM,GAAaI,IACvC9qJ,IAAK07F,EACLh1G,IAAKmxH,GAELhB,GAAS51F,KACTA,EAAIvc,GAAUk3G,EAAa36F,IAE/B6pI,EAAW9qJ,IAAMpT,KAAKoT,IAAI8qJ,EAAW9qJ,IAAKihB,GAC1C6pI,EAAWpkK,IAAMkG,KAAKlG,IAAIokK,EAAWpkK,IAAKu6B,IAE1C4/B,EAASxhD,KACT0rJ,EAAa/8J,KAAKq8J,YAAYO,GAAaG,IACvC/qJ,IAAK07F,EACLh1G,IAAKmxH,GAELhB,GAASx3G,KACTA,EAAIqF,GAAUk3G,EAAav8G,IAE/B0rJ,EAAW/qJ,IAAMpT,KAAKoT,IAAI+qJ,EAAW/qJ,IAAKX,GAC1C0rJ,EAAWrkK,IAAMkG,KAAKlG,IAAIqkK,EAAWrkK,IAAK2Y,KAGlDogJ,iBAAkB,SAAUrxJ,EAASxC,EAAO4xC,GAA1B,GAoBV8/G,GAnBA3zB,EAASnsF,EAAOmsF,OAChB4zB,EAAW//G,EAAO+/G,SAClB58G,GACAuH,SAAUyhF,EAAO6iB,UACjBnE,UACI,OACA,UACA,UACA,WACA,SACA,SACA,sBACA,wBAGJqX,EAAS1xJ,KAAKmvJ,YAAYI,EAa9B,OAZK7tE,IAAQgwE,KACT1xJ,KAAKmvJ,YAAYI,GAAYmC,EAASxX,EAAY95I,KAAauyC,GAAO,IAEtE28G,EAAelvJ,EACfsxJ,IACApC,EAAe10J,MAAewF,GAC9B85I,EAAYoV,GACR1xJ,MAAOA,EACP+9H,OAAQA,EACRl1G,SAAU+oB,EAAO/oB,UAClBksB,IAEA28G,GAEXE,UAAW,WACP,MAAO3K,KAEXyK,aAAc,SAAU3zB,EAAQ4zB,GAAlB,GAGFr1G,GAFJ95C,EAAUJ,KAAKkvJ,cAAcK,EASjC,OARKnvJ,KACG85C,EAAWl6C,KAAKwvJ,YAAYzoJ,UAAUmzC,SAC1Cl6C,KAAKkvJ,cAAcK,GAAYnvJ,EAAUxF,MAAes/C,GACpD26F,SAAW3wG,QAASy3F,EAAOz3F,SAC3BmjF,SAAWt+G,OAAQ/I,KAAKI,QAAQinH,QAAQt+G,QACxCm4H,QAAUn4H,OAAQ/I,KAAKI,QAAQ8gI,OAAOn4H,SACvC4yH,IAEAv7H,GAEXkxJ,YAAa,SAAU1zJ,EAAO4xC,GAAjB,GAQL64C,GAPAszC,EAASnsF,EAAOmsF,OAChB2zB,EAAetvJ,KAAKsvJ,aAAa3zB,EAAQnsF,EAAO+/G,UAChDt7E,EAAQzkC,EAAOykC,OAAS0nD,EAAO1nD,KAQnC,OAPAq7E,GAAetvJ,KAAKyxJ,iBAAiBnC,EAAc1xJ,EAAO4xC,GACtDtzC,GAAWy/H,EAAO1nD,SAClBA,EAAQq7E,EAAar7E,OAErBoU,EAAQ,GAAIw8D,IAAUjnJ,EAAO0xJ,GACjCjnE,EAAMpU,MAAQA,EACdj0E,KAAK8jC,OAAOukD,GACLA,GAEX6zE,WAAY,SAAUvgC,GAAV,GACJ+gC,GAAY/gC,EAAOghC,MACnBC,EAAYjhC,EAAOkhC,MACnB/4B,EAAW9jI,KAAK8jI,SAChB64B,EAAQD,EAAY54B,EAASk5B,WAAWN,GAAa54B,EAAS3B,MAC9D06B,EAAQD,EAAY94B,EAASm5B,WAAWL,GAAa94B,EAAS1B,KAClE,KAAKu6B,EACD,KAAU7zJ,OAAM,qCAAuC4zJ,EAE3D,KAAKG,EACD,KAAU/zJ,OAAM,qCAAuC8zJ,EAE3D,QACI3pI,EAAG0pI,EACHtrJ,EAAGwrJ,IAGXlmD,OAAQ,SAAUqgB,GAAV,GACA73C,GAASn/E,KACT6xJ,EAAc7xJ,KAAKyoF,OACnB09C,GAASnmI,KAAKI,QAAQyjC,KACtB0oH,EAAU,CACdvsJ,MAAKovJ,mBAAmB,SAAUxxJ,EAAO4xC,GAAjB,GAORuiH,GANR1pE,EAAQwpE,EAAYtF,KACpB2P,EAAa/8E,EAAO+8E,WAAW1sH,EAAOmsF,QACtC+H,EAAQw4B,EAAWjpI,EAAEgxG,QAAQrmI,EAAMq1B,EAAGr1B,EAAMq1B,EAAGkzG,GAC/CxC,EAAQu4B,EAAW7qJ,EAAE4yH,QAAQrmI,EAAMyT,EAAGzT,EAAMyT,EAAG80H,EAC/C99C,KACIq7C,GAASC,GACLouB,EAAY5yE,EAAO4yE,UAAUruB,EAAOC,GACxCt7C,EAAMsuB,OAAOo7C,IAEb1pE,EAAM7kF,SAAU,KAI5BxD,KAAKojC,IAAM4zF,GAEf+6B,UAAW,SAAUruB,EAAOC,GACxB,MAAO,IAAIzZ,IAAIwZ,EAAM7sE,GAAI8sE,EAAM7sE,GAAI4sE,EAAM3sE,GAAI4sE,EAAM3sE,KAEvDo4F,mBAAoB,SAAUzuI,GAAV,GAKP4uI,GACDlU,EACA6hB,EAIK3Q,EACD11C,EACAj5G,EACA4xC,EAbR2vC,EAASn/E,KACT4+E,EAAM5+E,KACN27H,EAAS/8C,EAAIx+E,QAAQu7H,OACrBszB,EAAerwE,EAAIqwE,YACvB,KAASM,EAAW,EAAGA,EAAW5zB,EAAO/jI,OAAQ23J,IAM7C,IALIlU,EAAgB1f,EAAO4zB,GACvB2N,EAAsBjO,EAAaM,GAClC2N,IACDjO,EAAaM,OAERhD,EAAU,EAAGA,EAAUlR,EAAc7/I,KAAK5D,OAAQ20J,IACnD11C,EAAQ13B,EAAOwzE,WAAWtX,EAAekU,EAAUhD,GACnD3uJ,EAAQi5G,EAAMomC,YACdztG,EAASqnE,EAAMrnE,OACnB7uB,EAAS/iB,EAAOhD,IACZ2xJ,QAASA,EACT5wB,OAAQ0f,EACRkU,SAAUA,EACV9oI,SAAU40H,EAAc7/I,KAAK+wJ,GAC7BgF,MAAOpyE,GACR3vC,KAIfujH,iBAAkB,SAAU1qE,EAAOt/E,GAC/B,GAAInL,GAAQyqF,EAAMzqF,KAClB,OAAOoC,MAAK+5H,aAAahxH,OAAO6sH,KAAK7sH,EAAQnL,EAAMq1B,EAAGr1B,EAAMyT,IAEhE6kJ,gBAAiB,WAAA,GAGJv4J,GAFL8qF,EAASzoF,KAAKyoF,OACdzpF,IACJ,KAASrB,EAAM,EAAGA,EAAM8qF,EAAO7wF,OAAQ+F,IACnCqB,EAAO8I,MAAM2gF,EAAO9qF,QAAY2jF,OAEpC,OAAOtiF,MAGf2qH,GAAkB48B,IACd5qB,UACAtU,SAAWt+G,OAAQ,YACnBm4H,QAAUn4H,OAAQ,YAClB86B,MAAM,IAEVjpC,GAAW2rJ,GAAax/I,UAAWo+I,IAAsBwN,WAAYnO,GAAiBz9I,UAAU4rJ,aAC5FnM,GAAS3B,GAAUnkJ,QACnBC,KAAM,SAAU/C,EAAOwC,GACnBykJ,GAAU5gJ,GAAGtD,KAAKwH,KAAKnI,KAAMpC,EAAOwC,GACpCJ,KAAK47H,SAAWh+H,EAAMg+H,UAE1BP,gBAAiB,WAAA,GACTD,GAAYp7H,KAAKI,QAAQg7H,UACzBiB,EAASjB,EAAUiB,OACnBwY,EAAU70I,KAAKI,QAAQy0I,QACvB19E,EAASn3D,KAAKojC,IAAI+zB,SAClB9+D,GAAUw8I,EAAQ92I,KAAO82I,EAAQxY,OAAOpjI,MAAQojI,EAAOpjI,OAAS,EAChEkkK,EAAiB,GAAI3tE,IACrBx3F,EAAS,GAAIwpB,IAAQyhF,OAAO,GAAIkH,IAASlH,QACzC9rC,EAAOlkC,EACPkkC,EAAO9lD,EAAIhZ,EAAS,EAAIgkI,EAAOpjI,MAAQ,GACxCZ,EAASgkI,EAAOpjI,MAAQ,IACvB+jG,QAAU/oB,MAAO,QACjB8oB,KAAM/8F,KAAKi8H,gBACP1rC,SAAU,eACVtc,MAAO4gE,EAAQ71C,WACfxO,QAEQpxF,OAAQ,EACR60E,MAAO4gE,EAAQ71C,WACf96D,QAAS,KAGT9kC,OAAQ,EACR60E,MAAO4gE,EAAQ71C,WACf96D,QAAS,QAKrB83F,EAAU,GAAIx6G,IAAQyhF,OAAO,GAAIkH,IAASlH,QAC1C9rC,EAAOlkC,EACPkkC,EAAO9lD,GACRhZ,IACC2kG,QACI/oB,MAAOooD,EAAOpoD,OAAS,GAAIQ,IAAMogE,EAAQ71C,YAAYxf,WAAW2gE,IAAmBpiE,QACnF9kF,MAAOojI,EAAOpjI,MACdirC,QAASm4F,EAAOn4F,SAEpB64D,MACI9oB,MAAO4gE,EAAQ71C,WACf96D,QAASk3F,EAAUl3F,UAI3B,OADAi5H,GAAer5H,OAAO9rC,EAAQgkI,GACvBmhC,KAGf3W,GAAOz/I,UAAUmzC,SAAWt/C,MAAe4rJ,GAAOz/I,UAAUmzC,UACxDgnF,QAAUv/F,SAAUqpC,GACpBowD,WACIl3F,QAAS,EACTm4F,QACIpoD,MAAO,OACPh7E,MAAO,EACPirC,QAAS,MAIjBuiH,GAAcF,GAAa7lJ,QAC3By7J,YAAa,WACTn8J,KAAKo9J,SAAWvzC,EAChB08B,GAAatiJ,GAAGk4J,YAAYh0J,KAAKnI,OAErCqvJ,SAAU,SAAUzxJ,EAAO4xC,GACJ,OAAf5xC,EAAMG,OAAkBH,EAAMG,KAAO,GAAKH,EAAMG,KAAO,GAAKyxC,EAAOmsF,OAAO0hC,eAAe75J,UACzFxD,KAAKo9J,SAAWx+J,KAAKlG,IAAIsH,KAAKo9J,SAAUx+J,KAAKC,IAAIjB,EAAMG,OACvDwoJ,GAAatiJ,GAAGorJ,SAASlnJ,KAAKnI,KAAMpC,EAAO4xC,KAE3CxvC,KAAKyoF,OAAO3gF,KAAK,MACjB9H,KAAKivJ,aAAaz/G,EAAO+/G,UAAUznJ,KAAK,QAGhD6uG,OAAQ,SAAUvzE,GACdpjC,KAAKs9J,kBAAkBl6H,GACvBmjH,GAAatiJ,GAAG0yG,OAAOxuG,KAAKnI,KAAMojC,IAEtCosH,UAAW,WACP,MAAOhJ,KAEX8K,YAAa,SAAU1zJ,EAAO4xC,GAAjB,GAaL8/G,GAoBAjnE,EAhCAszC,EAASnsF,EAAOmsF,OAChB4hC,EAAc5hC,EAAOngI,KAAK5D,OAC1Bg8B,EAAQ4b,EAAO+8G,SAAWvM,GAA6Bud,GACvDC,GACA5pI,MAAOA,EACPvzB,SAAU2/I,GAA6BpsH,EACvC10B,KAAMkiJ,IAENntE,EAAQzkC,EAAOykC,OAAS0nD,EAAO1nD,KA2BnC,OA1BIr2E,GAAMG,KAAO,GAAK49H,EAAO0hC,eAAe75J,UACxCywE,EAAQsP,GAAeo4C,EAAO0hC,eAAeppF,MAAOA,IAEpDq7E,EAAe10J,IACfsmI,QACI30D,WACI34C,MAAOA,EACPvzB,SAAU2/I,GAA6BpsH,KAGhD5zB,KAAKsvJ,aAAa3zB,EAAQnsF,EAAO+/G,WAChC1a,SACI31I,KAAM0yH,GACNyK,OAAQV,EAAOU,OACfn4F,QAASy3F,EAAOz3F,QAChBqoC,UAAWixF,KAGnBlO,EAAetvJ,KAAKyxJ,iBAAiBnC,EAAc1xJ,EAAO4xC,GACtDtzC,GAAWy/H,EAAO1nD,SAClBA,EAAQq7E,EAAar7E,OAEzBq7E,EAAaza,QAAQ71C,WAAa/qB,EAC9BoU,EAAQ,GAAIm+D,IAAO5oJ,EAAO0xJ,GAC9BjnE,EAAMpU,MAAQA,EACdj0E,KAAK8jC,OAAOukD,GACLA,GAEXi1E,kBAAmB,SAAUl6H,GAAV,GAKNmsH,GACDlU,EACA4T,EACAwO,EACArxE,EACAsxE,EACAC,EACAC,EACAC,EACAC,EACAC,EACKxR,EACDlkE,EAEIgtD,EACAh9I,EACA2lK,EACAr6H,EArBZw7C,EAASn/E,KACT4+E,EAAM5+E,KACN27H,EAAS/8C,EAAIx+E,QAAQu7H,OACrBjtD,EAAU9vE,KAAKoT,IAAIoxB,EAAInqC,QAASmqC,EAAIlqC,SACxC,KAASq2J,EAAW,EAAGA,EAAW5zB,EAAO/jI,OAAQ23J,IAW7C,IAVIlU,EAAgB1f,EAAO4zB,GACvBN,EAAe9vE,EAAO8vE,aAAaM,GACnCkO,EAAUpiB,EAAcoiB,SAAW7+J,KAAKlG,IAAc,IAAVg2E,EAAgB,IAC5D0d,EAAUivD,EAAcjvD,SAAqB,GAAV1d,EACnCgvF,EAAOD,EAAU,EACjBE,EAAOvxE,EAAU,EACjBwxE,EAAUh/J,KAAKsuF,GAAKwwE,EAAOA,EAC3BG,EAAUj/J,KAAKsuF,GAAKywE,EAAOA,EAC3BG,EAAYD,EAAUD,EACtBG,EAAYD,EAAY3+E,EAAOi+E,SAC1B7Q,EAAU,EAAGA,EAAU0C,EAAar3J,OAAQ20J,IAC7ClkE,EAAQ4mE,EAAa1C,GACrBlkE,IACIgtD,EAAOz2I,KAAKC,IAAIwpF,EAAMzqF,MAAMG,MAAQggK,EACpC1lK,EAASuG,KAAKy4D,MAAMumG,EAAUvoB,GAAQz2I,KAAKsuF,IAC3C8wE,EAAaz6E,GAAe8E,EAAMjoF,QAAQujC,OAAQ,GAClDA,EAASq6H,GAAc,EAAI3lK,EAASslK,GACxC/iK,GAAWytF,EAAMjoF,SACbujC,OAAQA,EACRkxG,SACI92I,KAAe,EAAT1F,EACNsrC,OAAQA,GAEZu9F,QAAUv9F,OAAQA,EAAS,OAM/CovH,iBAAkB,SAAU1qE,EAAOt/E,GAC/B,GAAInL,GAAQyqF,EAAMzqF,KAClB,OAAOoC,MAAK+5H,aAAahxH,OAAO6sH,KAAK7sH,EAAQnL,EAAMq1B,EAAGr1B,EAAMyT,EAAGzT,EAAMG,KAAMsqF,EAAMuzC,WAErFvB,gBAAiB,aAEjBF,aAAc,eAGlBxQ,GAAkB88B,IACdp/B,SAAWt+G,OAAQ,OACnBm4H,QAAUn4H,OAAQ,SAElB29I,GAASpzB,GAAa5yH,WAC1B9F,GAAW8rJ,GAAO3/I,UAAW09I,IACzBkC,GAASvzB,GAAa1yH,QACtBC,KAAM,SAAU/C,EAAOwC,GACnBgzH,GAAanvH,GAAGtD,KAAKwH,KAAKnI,KAAMI,GAChCJ,KAAKiyJ,UAAYjyJ,KAAKI,QAAQ6xJ,UAC9BjyJ,KAAKi0E,MAAQ7zE,EAAQ6zE,OAASq9C,GAC9BtxH,KAAKpC,MAAQA,GAEjB2K,OAAQ,WACJ,GAAInI,GAAUJ,KAAKI,OACdJ,MAAKozJ,YACNpzJ,KAAKozJ,WAAY,EACb1xE,GAAQ1hF,KAAKpC,MAAMwiB,UACnBpgB,KAAKogB,OAAS,GAAIsmI,KACdxnJ,KAAMkB,EAAQggB,OAAOs6E,MACrBsE,WAAY5+F,EAAQggB,OAAO6zD,OAASj0E,KAAKi0E,MACzC/vC,QAAS9jC,EAAQ8jC,QACjBP,OAAQvjC,EAAQujC,OAChB04F,OAAQj8H,EAAQggB,OAAOi8G,OACvB1wC,OAAQ1gB,EACRsgB,MAAOnpE,KAEXpiB,KAAKogB,OAAOxiB,MAAQoC,KAAKpC,MACzBoC,KAAKogB,OAAOqG,SAAWzmB,KAAKymB,SAC5BzmB,KAAKogB,OAAOu7G,OAAS37H,KAAK27H,OAC1B37H,KAAK8jC,OAAO9jC,KAAKogB,SAErBpgB,KAAKgzJ,eAGbr8C,OAAQ,SAAUvzE,GAAV,GAEAw7C,GACAx+E,EACAggB,EACA61G,EACAw5B,EACAjoB,EACAwqB,EACAiM,EACAC,EACAC,EAEIC,CAZRp+J,MAAKuI,SACDq2E,EAAM5+E,KACNI,EAAUw+E,EAAIx+E,QACdggB,EAASw+D,EAAIx+D,OACb61G,EAAQr3C,EAAI2yE,MACZ9B,EAAarvJ,EAAQqvJ,WACrBjoB,EAAYvR,EAAM44B,gBAAgB7uJ,KAAKI,SACvC4xJ,EAAe/7B,EAAM+7B,aAAa/7B,EAAM2gB,aAAcx2I,EAAQopI,WAAYhC,GAC1Ey2B,EAAkBz2B,EAAUvD,QAAQjkI,KAAKpC,MAAMwiB,QAC/C89I,EAAczO,EAAawO,EAAkBjM,EAC7CmM,EAAc1O,EAAauC,EAAeiM,EAC1C79I,IACIg+I,EAAa,GAAIl0C,IAAIg0C,EAAYrnG,GAAIsnG,EAAYrnG,GAAIonG,EAAYnnG,GAAIonG,EAAYnnG,IACrF52C,EAAOhgB,QAAQlH,OAASu2J,EAAa2O,EAAWllK,SAAWkH,EAAQggB,OAAOukF,KAAK1rG,MAC/EmnB,EAAOhgB,QAAQnH,MAAQw2J,EAAarvJ,EAAQggB,OAAOukF,KAAK1rG,MAAQmlK,EAAWnlK,QAC3EmnB,EAAOu2F,OAAOynD,IAEdp+J,KAAKsiI,MACLtiI,KAAKsiI,KAAK3rB,OAAOvzE,GAErBpjC,KAAKojC,IAAMA,GAEf+2F,aAAc,WAAA,GAEN/5H,GACAyX,CAFJu7G,IAAanvH,GAAGk2H,aAAahyH,KAAKnI,MAC9BI,EAAUJ,KAAKI,QACfyX,EAAOilF,GAAKkF,SAAShiG,KAAKojC,IAAI40F,UAC9Bj7B,MACI9oB,MAAOj0E,KAAKi0E,MACZ/vC,QAAS9jC,EAAQ8jC,SAErB84D,OAAQ,OAER58F,EAAQi8H,OAAOpjI,MAAQ,GACvB4e,EAAKzX,QAAQsjB,IAAI,UACbuwD,MAAO7zE,EAAQi8H,OAAOpoD,OAASj0E,KAAKi0E,MACpCh7E,MAAOmH,EAAQi8H,OAAOpjI,MACtB4lH,SAAUz+G,EAAQi8H,OAAOxd,SACzB36E,QAASq/C,GAAenjF,EAAQi8H,OAAOn4F,QAAS9jC,EAAQ8jC,WAGhElkC,KAAKq+J,WAAaxmJ,EAClB2wG,GAAiB3wG,GACjB7X,KAAKmiG,OAAOr+D,OAAOjsB,IAEvBwiH,gBAAiB,WACTr6H,KAAKq+J,aACLr+J,KAAKusE,UAAYhwC,GAAUiS,OAAOxuC,KAAKq+J,WAAYr+J,KAAKI,QAAQmsE,aAGxE8uD,gBAAiB,SAAUvhI,GACvB,MAAOgjG,IAAKkF,SAAShiG,KAAKojC,IAAI40F,SAAUl+H,IAE5Cg6J,gBAAiB,WACb,MAAO9zJ,MAAKq+J,YAEhB3iC,oBAAqB,WACjB,OACIj9D,KAAMz+D,KAAKojC,IAAI40F,SACf71B,OAAQniG,KAAKq+J,WACbj+J,QAASJ,KAAKI,UAGtBkzJ,YAAa,SAAUvqJ,GACnB,MAAO/I,MAAKuxJ,MAAMwB,iBAAiB/yJ,KAAM+I,MAGjD49I,GAAO5/I,UAAUitJ,cAAgBnO,GAAI9+I,UAAUitJ,cAC/CrqC,GAAkBg9B,IACdtqB,QAAUpjI,MAAO,GACjB2iC,UAAU,EACVsI,QAAS,EACT9jB,QACIs6E,MAAO,GACP2hC,QACIpjI,MAAO,EACPg7E,MAAO,SAEX0wB,MAAQ1rG,MAAO,IAEnBouH,SAAWt+G,OAAQ,mCAEvBnO,GAAW+rJ,GAAO5/I,UAAW09I,IAC7B7pJ,GAAW+rJ,GAAO5/I,UAAW29I,IACzBkC,GAAcpC,GAAiB9jJ,QAC/BC,KAAM,SAAUmjI,EAAU1jI,GACtBw6I,EAASx6I,GACTokJ,GAAiBvgJ,GAAGtD,KAAKwH,KAAKnI,KAAM8jI,EAAU1jI,IAElDgyJ,iBAAkB,SAAUR,GAAV,GAGL92J,GAFLH,EAAWqF,KAAKrF,SAChBgmC,EAAiBhmC,EAAS/C,MAC9B,KAASkD,EAAI,EAAGA,EAAI6lC,EAAgB7lC,IAChCH,EAASG,GAAG67G,OAAOi7C,EAAc92J,KAGzCi1J,UAAW,SAAU1nE,GAAV,GACHszC,GAAStzC,EAAMszC,OACf6L,EAAYxnI,KAAK6uJ,gBAAgBlzB,GACjChL,EAAoB3wH,KAAKqwJ,0BAA0B7oB,EACvD,QACI7W,EACAtoC,EAAMzqF,MAAM+N,SAAWglH,IAG/B2gC,YAAa,SAAU91J,EAAMg0C,GAAhB,GAoBL8wD,GAEA64D,EArBA3vB,EAAah6F,EAAOg6F,WACpB5N,EAAWpsF,EAAOosF,SAClBD,EAASnsF,EAAOmsF,OAChB4zB,EAAW//G,EAAO+/G,SAClB3wE,EAAM5+E,KACNI,EAAUw+E,EAAIx+E,QACdzF,EAAWikF,EAAIjkF,SACfiD,EAAQpC,EAAKyhJ,YACbqhB,EAAgB1jK,IAChBghC,UAAWx7B,EAAQqvJ,WACnBzzB,QAASL,EAAOK,QAChBwN,WAAYA,EACZimB,WAAYrvJ,EAAQqvJ,YACrB9zB,GACC1nD,EAAQz4E,EAAKg0C,OAAOykC,OAAS0nD,EAAO1nD,KAiBxC,OAhBAqqF,GAAgBt+J,KAAKyxJ,iBAAiB6M,EAAe1gK,EAAOg+H,EAAU4N,EAAY7N,EAAQ4zB,GACtFrzJ,GAAWy/H,EAAO1nD,SAClBA,EAAQqqF,EAAcrqF,OAEtBqsB,EAAS,GAAIqmD,IAAO/oJ,EAAO0gK,GAC/Bh+D,EAAOrsB,MAAQA,EACXklF,EAAUx+J,EAAS6uI,GAClB2vB,IACDA,EAAU,GAAIrT,KACVlqH,SAAUx7B,EAAQqvJ,WAClB5lJ,IAAKzJ,EAAQyJ,IACbqsG,QAAS91G,EAAQ81G,UAErBl2G,KAAK8jC,OAAOq1H,IAEhBA,EAAQr1H,OAAOw8D,GACRA,GAEX+wD,YAAa,SAAUzzJ,EAAO4xC,GAAjB,GACL7jC,GAAU/N,EAAM+N,QAChByU,EAASxiB,EAAMwiB,OACf29H,EAAWvuG,EAAOmsF,OAAOloG,KACzB6oH,EAAYt8I,KAAK+uJ,gBAAgBhR,EACjCr8D,IAAQ/1E,KAAa8J,MAAM9J,IAAY+1E,GAAQthE,IAAW3K,MAAM2K,MAChEk8H,EAAYt8I,KAAK+uJ,gBAAgBhR,GAAYzB,IACzCtqI,IAAK07F,EACLh1G,IAAKmxH,GAETyyB,EAAUtqI,IAAMpT,KAAKoT,IAAIsqI,EAAUtqI,IAAKrG,EAASyU,GACjDk8H,EAAU5jJ,IAAMkG,KAAKlG,IAAI4jJ,EAAU5jJ,IAAKiT,EAASyU,KAGzD2yI,iBAAkB,SAAU1qE,EAAOt/E,GAC/B,MAAO/I,MAAK+5H,aAAahxH,OAAO6sH,KAAK7sH,EAAQs/E,EAAMzqF,MAAM+N,QAAS08E,EAAMzqF,MAAMwiB,SAElF2tI,WAAY,SAAUvyJ,GAClB,MAAOA,GAAKyhJ,YAAYtxI,SAE5BsmJ,UAAW,SAAU5pE,GACjB,GAAIzqF,GAAQyqF,EAAMzqF,MAAM+N,OACxB,OAAO/N,GAAQ,GAEnBy8H,gBAAiB,WAAA,GAIJ18H,GACD0qF,EAJJlJ,EAASn/E,KACTyoF,EAASzoF,KAAKyoF,MAElB,KADAzoF,KAAK25J,uBACIh8J,EAAM,EAAGA,EAAM8qF,EAAO7wF,OAAQ+F,IAC/B0qF,EAAQI,EAAO9qF,GACnB0qF,EAAMjoF,QAAQmsE,UAAY4S,EAAO/+E,QAAQmsE,UACzC8b,EAAMgyC,qBAIlBusB,GAAY7/I,UAAU4yJ,qBAAuB3T,GAASj/I,UAAU4yJ,qBAChEhwC,GAAkBi9B,IAAer6E,WAAartE,KAAMgiJ,MAWhD2F,GAAchwJ,EAAM6J,QACpBC,KAAM,SAAUo5H,EAAc35H,GAC1BJ,KAAK+5H,aAAeA,EACpB/5H,KAAKI,QAAUxF,MAAeoF,KAAKI,QAASA,IAEhDm+J,SAAU,SAAUn+J,EAASioF,GAAnB,GAIEm2E,GAIJ9pE,EAPAsK,EAAa5+F,EAAQ4+F,WACrBq9B,EAASj8H,EAAQi8H,OAAOpoD,KAO5B,OANIoU,KACIm2E,EAAan2E,EAAMpU,OAASoU,EAAMjoF,QAAQ6zE,MAC9C+qB,EAAazb,GAAeyb,EAAYw/D,GACxCniC,EAAS94C,GAAe84C,EAAQmiC,IAEhC9pE,EAAUw0B,GAAW9oH,EAAQs0F,YAAe,SAE5CwK,gBAAiBF,EACjB85D,YAAaz8B,EACbxlC,KAAMz2F,EAAQy2F,KACd5iB,MAAO7zE,EAAQ6zE,MACf/vC,QAAS9jC,EAAQ8jC,QACjBk4F,YAAatT,GAAW1oH,EAAQi8H,OAAOpjI,OACvC8gH,WAAY+O,GAAWp0B,EAAQp1F,KAC/Bm/J,cAAe31C,GAAWp0B,EAAQ77F,QAClC08F,YAAauzB,GAAWp0B,EAAQ/7F,MAChC68F,aAAcszB,GAAWp0B,EAAQ97F,SAGzCoB,KAAM,SAAUoG,EAASs+J,EAAgBr2E,GACrCjoF,EAAQ2I,OAAS21J,EAAe31J,MAChC,IAAIjP,GAAQkG,KAAKu+J,SAASG,EAAgBr2E,EAC1CjoF,GAAQtG,MAAQA,GACX4nF,GAAQg9E,EAAezqF,QAAU,GAAIQ,IAAM36E,EAAMolG,iBAAiBzf,iBAAmB,MACtFr/E,EAAQnC,UAAY,2BAExB+B,KAAK+5H,aAAanzG,OAAOg9H,GAAcxjJ,IAE3CU,KAAM,WACEd,KAAK+5H,cACL/5H,KAAK+5H,aAAanzG,OAAOi9H,KAGjC/9H,QAAS,iBACE9lB,MAAK+5H,gBAGpBpQ,GAAkBk9B,IACdxqB,QAAUpjI,MAAO,GACjBirC,QAAS,IAET4iH,GAAmBD,GAAYnmJ,QAC/BC,KAAM,SAAUo5H,EAAc+e,EAAW14I,GACrCymJ,GAAY5iJ,GAAGtD,KAAKwH,KAAKnI,KAAM+5H,EAAc35H,GAC7CJ,KAAK84I,UAAYA,EACjB94I,KAAK2+J,cAAgB5kC,EAAahxH,OAClC/I,KAAK4+J,gBAETA,aAAc,WAAA,GAGN1vJ,GAFAukB,EAAOzzB,KAAK84I,UAAUrlH,KACtBqwG,EAAWrwG,EAAKqwG,QAGhB50H,GADA40H,EAAS8S,aACFnjH,EAAKu0G,YAAc,eAAiB,YAEpCv0G,EAAKrzB,QAAQw7B,SAAW,QAAU,QAE7C57B,KAAK+9I,SAAW7uI,GAEpB2vJ,OAAQ,SAAUx2E,GAAV,GACAzJ,GAAM5+E,KACNyzB,EAAOmrD,EAAIk6D,UAAUrlH,KACrBrzB,EAAUw+E,EAAIx+E,QACdxC,EAAQ61B,EAAKrzB,EAAQ0+J,WAAa,cAAgB,YAAYz2E,GAC9D02E,EAAiBnhK,CACjBwC,GAAQ2I,OACRg2J,EAAiB/+J,KAAK2+J,cAAc/oC,KAAKx1H,EAAQ2I,OAAQnL,GAClD61B,EAAKrzB,QAAQlB,OAAS+yH,KAC7B8sC,EAAiB/+J,KAAK2+J,cAAc/oC,KAAKniG,EAAKrzB,QAAQ8gI,OAAO0K,YAAYn4G,EAAKrzB,QAAQ+sH,UAAWvvH,IAErGoC,KAAKhG,MACDquF,MAAOA,EACPhc,OAAQrsE,KAAKg/J,YACblmB,UAAW94I,KAAK84I,UAChBl7I,MAAOmhK,EACPhhB,SAAU/9I,KAAK+9I,SACfuU,UAAWtyJ,KAAK84I,UAAUrlH,KAAK6+H,WAChCtyJ,KAAKI,UAEZU,KAAM,WACFd,KAAK+5H,aAAanzG,OAAOi9H,IACrB/K,UAAW94I,KAAK84I,UAChBiF,SAAU/9I,KAAK+9I,SACfuU,UAAWtyJ,KAAK84I,UAAUrlH,KAAK6+H,aAGvC0M,UAAW,WAAA,GAQH/K,GAAiBC,EAAe7rE,EAPhCzJ,EAAM5+E,KACN84I,EAAYl6D,EAAIk6D,UAChBmmB,EAAcrgF,EAAIx+E,QAClBuhC,EAAWs9H,EAAYt9H,SACvB+yD,EAAUuqE,EAAYvqE,QACtB94D,GAAYk9G,EAAUrlH,KAAKrzB,QAAQw7B,SACnCsmG,EAAU4W,EAAUn0C,KAAKza,MAqB7B,OAnBItuD,IACAq4H,EAAkBjpF,EACdrpC,IAAaupC,GACbgpF,EAAgBjpF,EAChBod,EAAQ65C,EAAQpzB,aAAa/xE,UAAU,EAAG23D,KAE1Cw/D,EAAgBhpF,EAChBmd,EAAQ65C,EAAQtzB,UAAU7xE,UAAU,GAAI23D,MAG5Cw/D,EAAgBlpF,EACZrpC,IAAazf,GACb+xI,EAAkB7xI,GAClBimE,EAAQ65C,EAAQtzB,UAAU7xE,WAAW23D,EAAS,KAE9Cu/D,EAAkB/xI,EAClBmmE,EAAQ65C,EAAQrzB,WAAW9xE,UAAU23D,EAAS,MAIlDrM,MAAOA,EACPkD,OACI1sD,WAAYo1H,EACZr4H,SAAUs4H,OAK1BvqC,GAAkBm9B,IAAoBpyD,QAAS,KAC3CqyD,GAAY3zB,GAAa1yH,QACzBC,KAAM,SAAUo5H,EAActmG,EAAMrzB,GAChCgzH,GAAanvH,GAAGtD,KAAKwH,KAAKnI,KAAMI,GAChCJ,KAAKyzB,KAAOA,EACZzzB,KAAK8+J,WAAarrI,YAAgB8gG,GAClC,IAAImqC,GAAiB1+J,KAAKI,QAAQinH,OAC9Bq3C,GAAel7J,UACfxD,KAAKqnH,QAAU,GAAIy/B,IAAiB/sB,EAAc/5H,KAAMpF,MAAe8jK,GAAkBI,WAAY9+J,KAAK8+J,gBAGlHD,OAAQ,SAAUx2E,GACdroF,KAAKqoF,MAAQA,EACbroF,KAAKk/J,WACLl/J,KAAK2kG,KAAKnhG,SAAQ,GACdxD,KAAKqnH,SACLrnH,KAAKqnH,QAAQw3C,OAAOx2E,IAG5BvnF,KAAM,WACFd,KAAK2kG,KAAKnhG,SAAQ,GACdxD,KAAKqnH,SACLrnH,KAAKqnH,QAAQvmH,QAGrBo+J,SAAU,WAAA,GAQFl0C,GAQQ6a,EAfRjnD,EAAM5+E,KACNyzB,EAAOmrD,EAAInrD,KACX40D,EAAQzJ,EAAIyJ,MACZzsD,EAAWnI,EAAKrzB,QAAQw7B,SACxBwH,EAAMpjC,KAAKm/J,SACXC,EAAMxjI,EAAWtqB,GAAI6/G,GACrBpG,EAAY,GAAIw0B,IAAcn8G,EAAIyzB,GAAIzzB,EAAI0zB,GAG1Ck0D,GADApvF,EACU,GAAI2jH,IAAcn8G,EAAI2zB,GAAI3zB,EAAI0zB,IAE9B,GAAIyoF,IAAcn8G,EAAIyzB,GAAIzzB,EAAI4zB,IAExCqxB,IACIroF,KAAK8+J,YACDj5B,EAAOpyG,EAAKwwG,QAAQxwG,EAAKs0G,mBAAmB1/C,IAChD0iC,EAAUq0C,GAAOp0C,EAAQo0C,GAAOv5B,EAAK1uE,SAASioG,IAE9Cr0C,EAAUq0C,GAAOp0C,EAAQo0C,GAAO/2E,EAAM+2E,IAG9Cp/J,KAAKojC,IAAMA,EACXpjC,KAAK2kG,KAAKv+D,OAAO2kF,GAAW96B,OAAO+6B,IAEvCm0C,OAAQ,WAAA,GAOAE,GACKvkK,EACDwkK,EARJ7rI,EAAOzzB,KAAKyzB,KACZuwG,EAAOvwG,EAAKu0C,KAAKg8D,KACjBpsI,EAASosI,EAAKpsI,OACdgkC,EAAWnI,EAAKrzB,QAAQw7B,SACxBwH,EAAM3P,EAAKyuG,UAAU/lI,QACrBijK,EAAMxjI,EAAWu1F,GAAI7/G,EAEzB,KAASxW,EAAI,EAAGA,EAAIlD,EAAQkD,IACpBwkK,EAAct7B,EAAKlpI,GACnBwkK,EAAYl/J,QAAQw7B,WAAaA,IAC5ByjI,EAGDA,EAAYvmK,KAAKwmK,EAAYp9B,WAF7Bm9B,EAAcC,EAAYp9B,UAAU/lI,QAQhD,OAFAinC,GAAIg8H,EAAM,GAAKC,EAAYD,EAAM,GACjCh8H,EAAIg8H,EAAM,GAAKC,EAAYD,EAAM,GAC1Bh8H,GAEX+2F,aAAc,WACV/G,GAAanvH,GAAGk2H,aAAahyH,KAAKnI,KAClC,IAAII,GAAUJ,KAAKI,OACnBJ,MAAK2kG,KAAO,GAAI7H,KACZE,QACI/oB,MAAO7zE,EAAQ6zE,MACfh7E,MAAOmH,EAAQnH,MACfirC,QAAS9jC,EAAQ8jC,QACjB26E,SAAUz+G,EAAQy+G,UAEtBr7G,SAAS,IAEbxD,KAAKk/J,WACLl/J,KAAKmiG,OAAOr+D,OAAO9jC,KAAK2kG,OAE5B7+E,QAAS,WACD9lB,KAAKqnH,SACLrnH,KAAKqnH,QAAQvhG,UAEjBstG,GAAanvH,GAAG6hB,QAAQ3d,KAAKnI,SAGrC2pH,GAAkBo9B,IACd9yE,MAAOs9C,GACPt4H,MAAO,EACP0qC,UACA0jF,SAAW7jH,SAAS,KAEpBwjJ,GAAiB5zB,GAAa1yH,QAC9BC,KAAM,SAAUP,EAAS4nE,GACrBorD,GAAanvH,GAAGtD,KAAKwH,KAAKnI,KAAMI,GAChCJ,KAAKgoE,KAAOA,GAEhBu3F,WAAY,WAAA,GAGCzkK,GAFLH,EAAWqF,KAAKrF,SAChB/C,EAAS+C,EAAS/C,MACtB,KAASkD,EAAI,EAAGA,EAAIlD,EAAQkD,IACxB,GAAIH,EAASG,GAAGsF,QAAQyjC,QAAS,EAC7B,OAAO,CAGf,QAAO,GAEX27H,SAAU,WACN,MAAOx/J,MAAKgoE,KAAKy3F,aAErBtlC,aAAc,WAAA,GAGFg6B,GACAuL,EACA9kE,CAJR56F,MAAKmiG,OAAS,GAAI3S,KAAQ7rD,OAAQ,IAC9B3jC,KAAKu/J,eACDpL,EAAUn0J,KAAKm0J,QAAUn0J,KAAKw/J,WAC9BE,EAAWvL,EAAQn8B,SACnBp9B,EAAWkC,GAAKkF,SAAS09D,GAC7B1/J,KAAKmiG,OAAOt+D,KAAK+2D,GACjB56F,KAAK2/J,iBAGb/kC,UAAW,WACP,MAAO56H,OAEX2/J,aAAc,WAAA,GAID7kK,GACD2tF,EACA7wF,EACKm6D,EACDs2B,EAEI3yC,EACA4sF,EAVZ1jD,EAAM5+E,KACN4/J,EAAShhF,EAAIjkF,SACbw5J,EAAUv1E,EAAIu1E,OAClB,KAASr5J,EAAI,EAAGA,EAAI8kK,EAAOhoK,OAAQkD,IAG/B,IAFI2tF,EAASm3E,EAAO9kK,GAAG2tF,WACnB7wF,EAAS6wF,EAAO7wF,OACXm6D,EAAI,EAAGA,EAAIn6D,EAAQm6D,IACpBs2B,EAAQI,EAAO12B,GACfs2B,GAASA,EAAM7kF,WAAY,GAAS6kF,EAAM+rE,aAAe/rE,EAAM+rE,YAAYD,KACvEz+G,EAAQ2yC,EAAM3yC,MACd4sF,EAAOj6C,EAAMi6C,KACb5sF,GAASA,EAAMt1C,QAAQoD,UACnBkyC,EAAM4iH,gBACN5iH,EAAM4iH,eAAenE,GAEzBz+G,EAAMt1C,QAAQs6H,QAAS,GAEvB4H,GAAQA,EAAKliI,QAAQoD,UACrB8+H,EAAKliI,QAAQs6H,QAAS,KAM1C50G,QAAS,WACLstG,GAAanvH,GAAG6hB,QAAQ3d,KAAKnI,YACtBA,MAAKpG,UAGpBotJ,GAAejgJ,UAAU+zH,aAAc,EACnCl5D,GAAOyxD,GAAW3yH,QAClBC,KAAM,SAAUP,GACZizH,GAAWpvH,GAAGtD,KAAKwH,KAAKnI,KAAMI,GAC9BJ,KAAK6jB,GAAKi3H,IACV96I,KAAK2hI,cACL3hI,KAAKm0D,QAAU,GAAIi/D,IACnBpzH,KAAK6/J,eAAiB,GAAI7Y,OAAmBhnJ,MAC7CA,KAAK8jC,OAAO9jC,KAAKm0D,SACjBn0D,KAAKgkI,QACLhkI,KAAK4/J,WAETj+B,YAAa,WACT,GAAI9B,GAAe7/H,KAAKI,QAAQkoC,KAC5BsgF,IAASiX,KACTA,EAAejlI,MAAeilI,GAC1Bt0C,MAAOs0C,EAAal+F,SACpBA,SAAUspC,KAGlBjrE,KAAKsoC,MAAQ/mB,EAAQwyG,MAAM4L,WAAWE,EAAc7/H,KAAM4hE,GAAK76D,UAAU3G,QAAQkoC,QAErFw3H,WAAY,SAAUrsI,GAClBzzB,KAAKm0D,QAAQrwB,OAAOrQ,GACpBzzB,KAAKgkI,KAAKl8H,KAAK2rB,GACfA,EAAKu0C,KAAOhoE,MAEhB+/J,YAAa,SAAU9pC,GACfj2H,KAAK6/J,eAAejmK,SAAWoG,KAAKm0D,SACpCn0D,KAAKm0D,QAAQrwB,OAAO9jC,KAAK6/J,gBAE7B7/J,KAAK4/J,OAAO93J,KAAKmuH,GACjBj2H,KAAK6/J,eAAe/7H,OAAOmyF,GAC3BA,EAAMjuD,KAAOhoE,MAEjBg2C,MAAO,WAAA,GAIUl7C,GAGAklK,EANT7gF,EAASn/E,KACT8jI,EAAW9jI,KAAKpG,MACpB,IAAIkqI,EAAU,CACV,IAAShpI,EAAI,EAAGA,EAAIkF,KAAKgkI,KAAKpsI,OAAQkD,IAClCgpI,EAASm8B,WAAW9gF,EAAO6kD,KAAKlpI,GAEpC,KAASklK,EAAM,EAAGA,EAAMhgK,KAAK4/J,OAAOhoK,OAAQooK,IACxCl8B,EAASo8B,YAAY/gF,EAAOygF,OAAOI,IAG3ChgK,KAAKgkI,QACLhkI,KAAK4/J,UACL5/J,KAAKm0D,QAAQruC,UACb9lB,KAAKm0D,QAAQx5D,YACbqF,KAAK6/J,eAAellK,aAExBg8G,OAAQ,SAAUqgB,GACd,GAAI7iE,EACA7kC,IAAKtvB,KAAKrF,YAAcqF,KAAKm0D,UAC7BA,EAAUn0D,KAAKrF,SAASoxB,OAE5BsnG,GAAWpvH,GAAG0yG,OAAOxuG,KAAKnI,KAAMg3H,GAC5B7iE,GACAn0D,KAAKrF,SAASmN,KAAKqsD,GAEnBn0D,KAAKsoC,QACLtoC,KAAKw8H,WAAW1lE,IAAM92D,KAAKsoC,MAAMlF,IAAIlqC,WAG7CwjI,YAAa,WACT,GAAI5iI,GAAQu5H,GAAWpvH,GAAGy4H,YAAYv0H,KAAKnI,KAE3C,OADAlG,GAAM6pC,WACC7pC,GAEXwgI,eAAgB,WACRt6H,KAAKI,QAAQoD,SACbxD,KAAKkkI,mBAGbtJ,UAAW,WACP,MAAO56H,OAEX26H,SAAU,WACN,MAAO36H,OAEXkkI,gBAAiB,WAAA,GAKJppI,GACD24B,EACAmI,EACA+mG,EACK5wE,EAEG0xE,EAVZO,EAAOhkI,KAAKgkI,KACZm8B,EAAUn8B,EAAK9tH,OAAOlW,KAAKpG,OAAOoqI,MAClCo8B,KACAC,IACJ,KAASvlK,EAAI,EAAGA,EAAIkpI,EAAKpsI,OAAQkD,IAI7B,IAHI24B,EAAOuwG,EAAKlpI,GACZ8gC,EAAWnI,EAAKrzB,QAAQw7B,SACxB+mG,EAAY/mG,EAAWwkI,EAAaC,EAC/BtuG,EAAI,EAAGA,EAAIouG,EAAQvoK,OAAQm6D,IACP,IAArB4wE,EAAU/qI,SACN6rI,EAAU08B,EAAQpuG,GAClBn2B,IAAa6nG,EAAQrjI,QAAQw7B,UAC7BkI,GAAO6+F,EAAWlvG,EAAKywG,gBAAgBT,MAM3DjsH,QAAS,WACLxX,KAAKmiG,OAAOjjD,QACZl/C,KAAKm0D,QAAQv6D,OAAS,KACtBoG,KAAKm0D,QAAQ8nE,eAAiBj8H,KAAKi8H,eAAe70H,KAAKpH,MACvDA,KAAKm0D,QAAQ+lE,eACbl6H,KAAKm0D,QAAQv6D,OAASoG,KAClBA,KAAKsoC,OACLtoC,KAAKmiG,OAAOr+D,OAAO9jC,KAAKsoC,MAAM65D,QAElCniG,KAAKmiG,OAAOr+D,OAAO9jC,KAAKm0D,QAAQguC,QAChCniG,KAAKs6H,kBAETmlC,UAAW,WAAA,GAIE9hK,GACD81B,EACA6sI,EACAp+B,EAKAi+B,EACAI,EACK36B,EACD46B,EAEIC,EAhBZz8B,EAAOhkI,KAAKgkI,KACZpsI,EAASosI,EAAKpsI,OACd6nK,EAAY,GAAIv1C,GACpB,KAASvsH,EAAM,EAAGA,EAAM/F,EAAQ+F,IACxB81B,EAAOuwG,EAAKrmI,GACZ2iK,EAAiB7sI,EAAKrzB,QAAQw7B,SAAWtqB,GAAI6/G,GAC7C+Q,EAAUzuG,EAAKyuG,UACnBu9B,EAAUa,EAAiB,GAAKp+B,EAAQo+B,EAAiB,GACzDb,EAAUa,EAAiB,GAAKp+B,EAAQo+B,EAAiB,EAE7D,IAAqB,IAAjBb,EAAU1oG,GAGV,IAFIopG,EAAUngK,KAAKpG,OAAOoqI,KACtBu8B,EAAWJ,EAAQvoK,OACdguI,EAAQ,EAAGA,EAAQ26B,EAAU36B,IAC9B46B,EAASL,EAAQv6B,GAChB46B,EAAOpgK,QAAQw7B,WACZ6kI,EAAYD,EAAOt+B,UACvBu9B,EAAU5oG,GAAK4pG,EAAU5pG,GACzB4oG,EAAU1oG,GAAK0pG,EAAU1pG,GAIrC,OAAO0oG,IAEXtL,QAAS,WACL,MAAOn0J,MAAK6/J,eAAe1L,WAG/BpZ,GAAK,EAITn5E,GAAK76D,UAAU+zH,aAAc,EAC7BnR,GAAkB/nD,IACdj+B,UACAu4F,aAAa,EACb5zF,OAASijD,MAAOrpE,GAChB1e,SAAS,IAETyjJ,GAAe7zB,GAAa1yH,QAC5BC,KAAM,SAAUg7H,EAAQv7H,EAAS25H,GAC7B3G,GAAanvH,GAAGtD,KAAKwH,KAAKnI,KAAMI,GAChCJ,KAAK0gK,WAAW/kC,EAAQv7H,GACxBJ,KAAK27H,OAASA,EACd37H,KAAK2gK,aACL3gK,KAAK4/J,UACL5/J,KAAKI,QAAQu0I,OAAOnuH,SACpBxmB,KAAKgkI,QACLhkI,KAAK4gK,cACL5gK,KAAK+5H,aAAeA,EACpB/5H,KAAK6gK,cACL7gK,KAAKuI,SACLvI,KAAK8gK,oBAETJ,WAAY,aAEZC,WAAY,WAAA,GAEC7lK,GADL6gI,EAAS37H,KAAK27H,MAClB,KAAS7gI,EAAI,EAAGA,EAAI6gI,EAAO/jI,OAAQkD,IAC/B6gI,EAAO7gI,GAAGqX,MAAQrX,GAG1B+lK,YAAa,WAMT,QAASE,GAAS3gK,EAAS85C,GACnB2uE,GAASzoH,EAAQkoC,SACjBloC,EAAQkoC,OAAUlT,KAAMh1B,EAAQkoC,QAEpCloC,EAAQkoC,MAAQ1tC,MAAes/C,EAAS5R,MAAOloC,EAAQkoC,OAVlD,GAYAxtC,GACDsF,EAEA4gK,EAdJ7hF,EAASn/E,KACTk6C,GAAa5R,OAAS2rC,OAAQj0E,KAAKI,QAAQkoC,WAAa2rC,QACxDgtF,KACAC,EAAclhK,KAAKI,QAAQ6gK,UAC3BE,EAAcviK,KAAKlG,IAAIwoK,EAAYtpK,OAAQ,EAO/C,KAASkD,EAAI,EAAGA,EAAIqmK,EAAarmK,IACzBsF,EAAU8gK,EAAYpmK,OAC1BimK,EAAS3gK,EAAS85C,GACd8mH,EAAc,GAAIp/F,IAAKxhE,GAC3B4gK,EAAYI,UAAYtmK,EACxBmmK,EAAMn5J,KAAKk5J,GACX7hF,EAAOr7C,OAAOk9H,EAElBhhK,MAAKihK,MAAQA,GAEjBH,iBAAkB,SAAUG,GAAV,GAKLnmK,GACDktE,EACKjW,EACDt+B,EAEI4tI,EATZliF,EAASn/E,IAIb,KAHc,SAAVihK,IACAA,EAAQjhK,KAAKihK,OAERnmK,EAAI,EAAGA,EAAImmK,EAAMrpK,OAAQkD,IAE9B,IADIktE,EAAOi5F,EAAMnmK,GACRi3D,EAAI,EAAGA,EAAIiW,EAAKg8D,KAAKpsI,OAAQm6D,IAC9Bt+B,EAAOu0C,EAAKg8D,KAAKjyE,GACjBt+B,EAAKrzB,QAAQ04I,WAAarlH,EAAKrzB,QAAQ04I,UAAUt1I,UAC7C69J,EAAmB,GAAIta,IAAU5nE,EAAO46C,aAActmG,EAAMA,EAAKrzB,QAAQ04I,WAC7E35D,EAAOyhF,WAAW94J,KAAKu5J,GACvBr5F,EAAK7T,QAAQrwB,OAAOu9H,KAKpCC,iBAAkB,SAAUt5F,GAAV,GAGLltE,GACIi3D,EAHT6uG,EAAa5gK,KAAK4gK,WAClB58B,EAAOh8D,EAAKg8D,IAChB,KAASlpI,EAAI8lK,EAAWhpK,OAAS,EAAGkD,GAAK,EAAGA,IACxC,IAASi3D,EAAI,EAAGA,EAAIiyE,EAAKpsI,OAAQm6D,IAC7B,GAAI6uG,EAAW9lK,GAAG24B,OAASuwG,EAAKjyE,GAAI,CAChC6uG,EAAWx4J,OAAOtN,EAAG,EACrB,SAKhBymK,eAAgB,WAAA,GAEH5jK,GADLijK,EAAa5gK,KAAK4gK,UACtB,KAASjjK,EAAM,EAAGA,EAAMijK,EAAWhpK,OAAQ+F,IACvCijK,EAAWjjK,GAAKmD,QAGxB0gK,SAAU,SAAUtyJ,GAAV,GAEFuyJ,GACK3mK,EAFLmmK,EAAQjhK,KAAKihK,KAEjB,KAASnmK,EAAI,EAAGA,EAAImmK,EAAMrpK,OAAQkD,IAC9B,GAAImmK,EAAMnmK,GAAGsF,QAAQ8O,OAASA,EAAM,CAChCuyJ,EAAeR,EAAMnmK,EACrB,OAGR,MAAO2mK,IAAgBR,EAAM,IAEjCS,cAAe,SAAUr5E,GAAV,GAEPo5E,GACK3mK,EAFLmmK,EAAQjhK,KAAKihK,KAEjB,KAASnmK,EAAI,EAAGA,EAAImmK,EAAMrpK,OAAQkD,IAC9B,GAAImmK,EAAMnmK,GAAGsoC,IAAI8rE,cAAc7mB,GAAQ,CACnCo5E,EAAeR,EAAMnmK,EACrB,OAGR,MAAO2mK,IAEX3B,WAAY,SAAUrsI,GAClB,GAAIu0C,GAAOhoE,KAAKwhK,SAAS/tI,EAAKrzB,QAAQ4nE,KACtCA,GAAK83F,WAAWrsI,GAChBzzB,KAAKgkI,KAAKl8H,KAAK2rB,GACfA,EAAKqwG,SAAW9jI,MAEpBigK,WAAY,SAAU0B,GAAV,GAGC7mK,GACD24B,EAHJ0rD,EAASn/E,KACT4hK,IACJ,KAAS9mK,EAAI,EAAGA,EAAIkF,KAAKgkI,KAAKpsI,OAAQkD,IAC9B24B,EAAO0rD,EAAO6kD,KAAKlpI,GACnB6mK,IAAiBluI,EACjBmuI,EAAa95J,KAAK2rB,GAElBA,EAAK3N,SAGb9lB,MAAKgkI,KAAO49B,GAEhB7B,YAAa,SAAU9pC,EAAOjuD,GAC1BhoE,KAAK4/J,OAAO93J,KAAKmuH,GACbjuD,EACAA,EAAK+3F,YAAY9pC,GAEjBj2H,KAAK8jC,OAAOmyF,IAGpBiqC,YAAa,SAAU2B,GAAV,GAGA/mK,GACDm7H,EAHJ92C,EAASn/E,KACT8hK,IACJ,KAAShnK,EAAI,EAAGA,EAAIkF,KAAK4/J,OAAOhoK,OAAQkD,IAChCm7H,EAAQ92C,EAAOygF,OAAO9kK,GACtBm7H,IAAU4rC,EACVC,EAAeh6J,KAAKmuH,GAEpBA,EAAMnwG,SAGd9lB,MAAK4/J,OAASkC,GAElBC,YAAa,SAAUpmC,GAAV,GAOA7gI,GACDugJ,EACA2mB,EAIA5sI,EACA89H,EAOAh5G,EACA+5B,EAIAguF,EAA2BC,EAzB/BxuJ,EAAQioH,EAAO/jI,OACf+8I,EAAS30I,KAAKI,QAAQu0I,OACtBzT,EAASyT,EAAOzT,WAChBwX,EAAgB/D,EAAO+D,kBACvBypB,EAAsBzpB,EAAcxX,WACpC1lI,IACJ,KAASV,EAAI,EAAGA,EAAI4Y,EAAO5Y,IACnBugJ,EAAgB1f,EAAO7gI,GACvBknK,EAAgB3mB,EAAc73I,WAAY,EAC1C63I,EAAc+mB,mBAAoB,IAGlChtI,EAAOimH,EAAcnsI,MAAQ,GAC7BgkJ,EAAgB8O,EAAgB54C,GAAY8X,GAAU9X,GAAY+4C,IAAwB/4C,GAAY8X,GACtGgyB,IACA99H,EAAO89H,GACH99H,KAAMA,EACNumG,OAAQ0f,KAGZnhG,EAAWmhG,EAAcmD,UACzBvqE,EAAQonE,EAAcpnE,MACtB/3E,GAAW+3E,IAAU/5B,IACrB+5B,EAAQ/5B,EAAS+5B,OAEjBguF,EAAmB,OAAQC,EAAc,OACzCF,GACAC,KACAC,EAAcjuF,IAEdguF,GACIhuF,MAAOkuF,EAAoBluF,MAC3B4iB,KAAMsrE,EAAoBtrE,MAE9BqrE,EAAcxpB,EAAc7D,QAAQ5gE,OAEpC7+C,GACA55B,EAAKsM,MACDstB,KAAMA,EACN8rG,OAAQ+gC,EACRC,YAAaA,EACbvmC,OAAQ0f,EACRgnB,OAAQL,IAIpBl+H,IAAO6wG,EAAOnuH,MAAOhrB,IAEzB8mK,UAAW,SAAUrB,GAAV,GAGEsB,GACDC,EACKzmB,EACDtoH,EALRgvI,KACAC,IACJ,KAASH,EAAS,EAAGA,EAAStB,EAAMrpK,OAAQ2qK,IAExC,IADIC,EAAWvB,EAAMsB,GAAQv+B,KACpB+X,EAAS,EAAGA,EAASymB,EAAS5qK,OAAQmkJ,IACvCtoH,EAAO+uI,EAASzmB,GAChBtoH,EAAKrzB,QAAQw7B,SACb8mI,EAAM56J,KAAK2rB,GAEXgvI,EAAM36J,KAAK2rB,EAIvB,QACIR,EAAGwvI,EACHpxJ,EAAGqxJ,EACHC,IAAKF,EAAMvsJ,OAAOwsJ,KAG1BE,kBAAmB,WAAA,GAIN9nK,GACDugJ,EACArzE,EALJmX,EAASn/E,KACT27H,EAAS37H,KAAK27H,OACdknC,IACJ,KAAS/nK,EAAI,EAAGA,EAAI6gI,EAAO/jI,OAAQkD,IAC3BugJ,EAAgB1f,EAAO7gI,GACvBktE,EAAOmX,EAAO2jF,eAAeznB,GAC7BwnB,EAAa76F,GACb66F,EAAa76F,GAAMlgE,KAAKuzI,GAExBwnB,EAAa76F,IAASqzE,EAG9B,OAAOwnB,IAEXE,oBAAqB,SAAUpnC,GAAV,GAER7gI,GACDugJ,EAFJr8I,IACJ,KAASlE,EAAI,EAAGA,EAAI6gI,EAAO/jI,OAAQkD,IAC3BugJ,EAAgB1f,EAAO7gI,GACvBugJ,EAAc73I,WAAY,GAC1BxE,EAAO8I,KAAKuzI,EAGpB,OAAOr8I,IAEX23G,OAAQ,SAAUqgB,GAAV,GACA52H,GAAUJ,KAAKI,QAAQ0jI,SACvBm9B,EAAQjhK,KAAKihK,MACbn+H,EAASomF,GAAW9oH,EAAQ0iC,OAChC9iC,MAAKojC,IAAM4zF,EAAU76H,QAAQs7H,MAAM30F,GACnC9iC,KAAKgjK,cACLhjK,KAAKijK,WAAWhC,GAChBjhK,KAAKkjK,aAAajC,IAEtBkC,OAAQ,SAAUlC,GAAV,GAIKnmK,GAQAklK,EAXL7gF,EAASn/E,KACTojK,KAAgBltJ,OAAO+qJ,EAE3B,KADAjhK,KAAK2gK,aACI7lK,EAAI,EAAGA,EAAIsoK,EAAWxrK,OAAQkD,IACnCqkF,EAAOmiF,iBAAiB8B,EAAWtoK,IACnCsoK,EAAWtoK,GAAGk7C,OAMlB,KAJAh2C,KAAKuI,OAAO66J,GACZpjK,KAAKijK,WAAWjjK,KAAKihK,OACrBjhK,KAAKkjK,aAAaE,GAClBpjK,KAAK8gK,iBAAiBsC,GACbpD,EAAM,EAAGA,EAAMoD,EAAWxrK,OAAQooK,IACvCoD,EAAWpD,GAAKxoJ,WAGxBg1H,mBAAoB,SAAU/4G,EAAM4vI,GAAhB,GAKPvoK,GAJLsF,EAAUqzB,EAAKrzB,QACfiyJ,KAAoBn8I,OAAO9V,EAAQosI,oBAAsBpsI,EAAQuwH,mBACjE2yC,EAAcD,EAAazrK,OAASy6J,EAAez6J,OACnD8iD,EAAe23G,EAAe,IAAM,CACxC,KAASv3J,EAAI,EAAGA,EAAIwoK,EAAaxoK,IAC7Bu3J,EAAevqJ,KAAK4yC,EAExB,OAAO23G,IAEXkR,YAAa,SAAU9vI,EAAM+vI,EAAYC,EAAeC,GAA3C,GACL79B,GAAOpyG,EAAKwwG,QAAQw/B,EAAeA,GAAe,GAClDE,EAAWlwI,EAAKrzB,QAAQE,QAAU,EAAI,EACtC89J,EAAaoF,EAAWv/B,QAAQy/B,EAAqBA,GAAqB,GAC1EE,EAAaJ,EAAWpjK,QAAQE,QAAU,EAAI,EAC9C26I,EAAUxnH,EAAK2P,IAAIrG,UAAUqhI,EAAWjtC,GAAIyyC,GAAc/9B,EAAK1U,GAAIwyC,GAAWvF,EAAW9sJ,GAAIsyJ,GAAc/9B,EAAKv0H,GAAIqyJ,GACpHlwI,GAAKu0C,OAASw7F,EAAWx7F,MACzBizE,EAAQl+G,UAAU,EAAGtJ,EAAKu0C,KAAK5kC,IAAI0zB,GAAK0sG,EAAWx7F,KAAK5kC,IAAI0zB,IAEhErjC,EAAKkjF,OAAOskC,IAEhB4oB,UAAW,SAAUpB,EAAOC,GAAjB,GAUE5nK,GACD24B,EACAu0C,EACA87F,EACAtgK,EACA6oE,EACA03F,EAkCC/D,EACDQ,EACAwD,EACAC,EACAC,EACAC,EACAC,EAvDJjlF,EAASn/E,KACTqkK,EAAU5B,EAAM,GAChB6B,EAAU5B,EAAM,GAChB6B,EAAmBvkK,KAAKwsI,mBAAmB63B,EAAS3B,GACpD8B,EAAmBxkK,KAAKwsI,mBAAmB83B,EAAS7B,GACpDgC,KACAC,KACAC,KACAC,IACJ,KAAS9pK,EAAI,EAAGA,EAAI4nK,EAAM9qK,OAAQkD,IAC1B24B,EAAOivI,EAAM5nK,GACbktE,EAAOv0C,EAAKu0C,KACZ87F,EAAS97F,EAAKnkD,GACdrgB,EAAUiwB,EAAKrzB,QAAQoD,WAAY,EACnC6oE,EAAS6uE,EAAWunB,EAAOz6F,IAASq8F,EACpCN,EAAkBQ,EAClBl4F,IAAWg4F,IACXN,EAAkB5kF,EAAOqtD,mBAAmBngE,EAAQq2F,IAExDvjF,EAAOokF,YAAY9vI,EAAM44C,EAAQm4F,EAAiB1pK,GAAIipK,EAAgBjpK,IAClE24B,EAAKrzB,QAAQykK,WAGbp1J,GAAMgkB,EAAKyuG,UAAUrrE,MAAQpnD,GAAM48D,EAAO61D,UAAUrrE,MAChD4tG,EAAYX,IACZrwI,EAAKkjF,OAAOljF,EAAK2P,IAAIg0F,QAAQqtC,EAAYX,GAAQ1gI,IAAKlhB,GAAM6a,WAAWtJ,EAAKrzB,QAAQ0iC,OAAQ,IAE5Ft/B,IACAihK,EAAYX,GAAUrwI,IAG1BhkB,GAAMgkB,EAAKyuG,UAAUnrE,MAAQtnD,GAAM48D,EAAO61D,UAAUnrE,MAC/CtjC,EAAKqxI,YACNrxI,EAAKrzB,QAAQ8gI,OAAO1hG,QAAU/L,EAAKrzB,QAAQ8gI,OAAO1hG,OAClD/L,EAAKqxI,WAAY,GAErB3lF,EAAOokF,YAAY9vI,EAAM44C,EAAQm4F,EAAiB1pK,GAAIipK,EAAgBjpK,IAClE4pK,EAAaZ,IACbrwI,EAAKkjF,OAAOljF,EAAK2P,IAAIg0F,QAAQstC,EAAaZ,GAAQ1gI,IAAKhhB,IAAO2a,UAAUtJ,EAAKrzB,QAAQ0iC,OAAQ,IAE7Ft/B,IACAkhK,EAAaZ,GAAUrwI,IAGrB,IAAN34B,GAAWwpK,EAAQt8F,OAASv0C,EAAKu0C,OACjCv0C,EAAK2jG,QAAQktC,GACb7wI,EAAKkjF,OAAOljF,EAAK2P,MAGzB,KAAS48H,EAAM,EAAGA,EAAMyC,EAAM7qK,OAAQooK,IAC9BQ,EAASiC,EAAMzC,GACfgE,EAASxD,EAAOx4F,KAChBi8F,EAAWD,EAAOngJ,GAClBqgJ,EAAY1D,EAAOpgK,QAAQoD,WAAY,EACvC2gK,EAAWjpB,EAAWwnB,EAAOsB,IAAWM,EACxCF,EAAoBI,EACpBL,IAAaG,IACbF,EAAoBjlF,EAAOqtD,mBAAmB23B,EAAU1B,IAE5DtjF,EAAOokF,YAAY/C,EAAQ2D,EAAUI,EAAiBvE,GAAMoE,EAAkBpE,IAC1EQ,EAAOpgK,QAAQykK,WAGfp1J,GAAM+wJ,EAAOt+B,UAAUprE,MAAQrnD,GAAM00J,EAASjiC,UAAUprE,MACnD0pG,EAAOsE,YACRtE,EAAOpgK,QAAQ8gI,OAAO1hG,QAAUghI,EAAOpgK,QAAQ8gI,OAAO1hG,OACtDghI,EAAOsE,WAAY,GAEvB3lF,EAAOokF,YAAY/C,EAAQ2D,EAAUI,EAAiBvE,GAAMoE,EAAkBpE,IAC1E2E,EAAWV,IACXzD,EAAO7pD,OAAO6pD,EAAOp9H,IAAIg0F,QAAQutC,EAAWV,GAAU7gI,IAAK6nC,GAAKluC,UAAU,GAAIyjI,EAAOpgK,QAAQ0iC,SAE7FohI,IACAS,EAAWV,GAAYzD,IAG3B/wJ,GAAM+wJ,EAAOt+B,UAAUlrE,GAAIsoF,EAAiB71B,mBAAqBh6G,GAAM00J,EAASjiC,UAAUlrE,GAAIsoF,EAAiB71B,mBAC3Gm7C,EAAcX,IACdzD,EAAO7pD,OAAO6pD,EAAOp9H,IAAIg0F,QAAQwtC,EAAcX,GAAU7gI,IAAK8nC,GAAQnuC,UAAU,EAAGyjI,EAAOpgK,QAAQ0iC,SAElGohI,IACAU,EAAcX,GAAYzD,IAGtB,IAARR,IACAQ,EAAOppC,QAAQitC,GACf7D,EAAO7pD,OAAO6pD,EAAOp9H,QAIjC2hI,gBAAiB,SAAU9D,GAAV,GAIJnmK,GACDkmK,EAMKhB,EACDV,EAXRt7B,EAAOhkI,KAAKsiK,UAAUrB,GAAO0B,IAC7B1nB,EAAUD,EAAahX,GACvBghC,EAAY,CAChB,KAASlqK,EAAI,EAAGA,EAAImmK,EAAMrpK,OAAQkD,IAC1BkmK,EAAcC,EAAMnmK,GACpBkmK,EAAYh9B,KAAKpsI,OAAS,IAC1BotK,EAAYpmK,KAAKlG,IAAIssK,EAAW/pB,EAAQhiJ,QAAU+nK,EAAYxkC,WAAWvjI,SAGjF,IAAkB,IAAd+rK,EACA,IAAShF,EAAM,EAAGA,EAAMh8B,EAAKpsI,OAAQooK,IAC7BV,EAAct7B,EAAKg8B,GAClBV,EAAYl/J,QAAQw7B,UACrB0jI,EAAY3oD,OAAO2oD,EAAYl8H,IAAIk0F,OAAO0tC,EAAW,KAKrEC,iBAAkB,SAAUhE,GAAV,GACViE,GACKpqK,EACDkmK,EACAh9B,EACAmhC,EAESpzG,EACDutG,CANhB,KAASxkK,EAAI,EAAGA,EAAImmK,EAAMrpK,OAAQkD,IAI9B,GAHIkmK,EAAcC,EAAMnmK,GACpBkpI,EAAOg9B,EAAYh9B,KACnBmhC,EAAYvmK,KAAKlG,IAAI,EAAGsiJ,EAAahX,GAAM9qI,SAAW8nK,EAAYxkC,WAAWtjI,UAC/D,IAAdisK,EAAiB,CACjB,IAASpzG,EAAI,EAAGA,EAAIiyE,EAAKpsI,OAAQm6D,IACzButG,EAAct7B,EAAKjyE,GACnButG,EAAYl/J,QAAQw7B,UACpB0jI,EAAY3oD,OAAO2oD,EAAYl8H,IAAIk0F,OAAO,EAAG6tC,GAGrDD,IAAW,EAGnB,MAAOA,IAEXE,QAAS,SAAUnE,GAAV,GAGInmK,GACDkmK,EACAwB,EACA6C,EAEIpqB,EACA94E,EAEKpQ,EACDutG,EAKPU,EACDsF,EAjBJthC,EAAOhkI,KAAKsiK,UAAUrB,GAAO0B,IAC7BzgG,EAAU,CACd,KAASpnE,EAAI,EAAGA,EAAImmK,EAAMrpK,OAAQkD,IAI9B,GAHIkmK,EAAcC,EAAMnmK,GACpB0nK,EAAWxB,EAAYh9B,KACvBqhC,EAAUrE,EAAYxkC,WACtBgmC,EAAS5qK,OAAS,EAIlB,IAHIqjJ,EAAUD,EAAawnB,GACvBrgG,EAAUvjE,KAAKlG,IAAI2sK,EAAQvuG,GAAKmkF,EAAQnkF,GAAIuuG,EAAQruG,GAAKikF,EAAQjkF,IACrEkL,EAAUtjE,KAAKlG,IAAIwpE,EAASmjG,EAAQxuG,GAAKokF,EAAQpkF,IACxC9E,EAAI,EAAGA,EAAIywG,EAAS5qK,OAAQm6D,IAC7ButG,EAAckD,EAASzwG,GAC3ButG,EAAY3oD,OAAO2oD,EAAYl8H,IAAIrG,UAAU,EAAGolC,GAI5D,KAAS69F,EAAM,EAAGA,EAAMh8B,EAAKpsI,OAAQooK,IAC7BsF,EAAgBthC,EAAKg8B,GACzBsF,EAAc3uD,OAAO2uD,EAAcliI,IAAIrG,UAAUmlC,EAAS,KAGlE+gG,WAAY,SAAUhC,GAAV,GAGCnmK,GAFLqkF,EAASn/E,KACTgkI,EAAOhkI,KAAKsiK,UAAUrB,EAC1B,KAASnmK,EAAI,EAAGA,EAAImmK,EAAMrpK,OAAQkD,IAC9BqkF,EAAOomF,eAAetE,EAAMnmK,GAE5BkpI,GAAK/wG,EAAEr7B,OAAS,GAAKosI,EAAK3yH,EAAEzZ,OAAS,IACrCoI,KAAK6jK,UAAU7/B,EAAK/wG,EAAG+wG,EAAK3yH,GAC5BrR,KAAK+kK,gBAAgB9D,GACrBjhK,KAAKwlK,qBAAqBxhC,GAC1BhkI,KAAK6jK,UAAU7/B,EAAK/wG,EAAG+wG,EAAK3yH,GACxBrR,KAAK+kK,gBAAgB9D,IACrBjhK,KAAK6jK,UAAU7/B,EAAK/wG,EAAG+wG,EAAK3yH,GAEhCrR,KAAKilK,iBAAiBhE,GACtBjhK,KAAK6jK,UAAU7/B,EAAK/wG,EAAG+wG,EAAK3yH,GACxBrR,KAAKilK,iBAAiBhE,IACtBjhK,KAAK6jK,UAAU7/B,EAAK/wG,EAAG+wG,EAAK3yH,GAEhCrR,KAAKolK,QAAQnE,KAGrBuE,qBAAsB,SAAUC,GAAV,GAKdC,GACK/nK,EACD81B,EAMKmyG,EAZTzmD,EAASn/E,KACT4+E,EAAM5+E,KACNgkI,EAAOplD,EAAIolD,KACXi9B,EAAQriF,EAAIqiF,KAEhB,KAAStjK,EAAM,EAAGA,EAAMqmI,EAAKpsI,OAAQ+F,IAC7B81B,EAAOuwG,EAAKrmI,GACZ81B,EAAKuuG,qBACL0jC,GAAU,EAGlB,IAAIA,EAAS,CACT,IAAS9/B,EAAQ,EAAGA,EAAQq7B,EAAMrpK,OAAQguI,IACtCzmD,EAAOomF,eAAetE,EAAMr7B,GAE5B6/B,GAAYxyI,EAAEr7B,OAAS,GAAK6tK,EAAYp0J,EAAEzZ,OAAS,IACnDoI,KAAK6jK,UAAU4B,EAAYxyI,EAAGwyI,EAAYp0J,GAC1CrR,KAAK+kK,gBAAgB9D,MAIjCsE,eAAgB,SAAUv9F,GAAV,GAICltE,GAHTkpI,EAAOh8D,EAAKg8D,KACZpsI,EAASosI,EAAKpsI,MAClB,IAAIA,EAAS,EACT,IAASkD,EAAI,EAAGA,EAAIlD,EAAQkD,IACxBkpI,EAAKlpI,GAAG67G,OAAO3uC,EAAKw0D,aAIhC0mC,aAAc,SAAUjC,GAAV,GAIDnmK,GACD6qK,EAJJ/F,EAAS5/J,KAAK4/J,OACdlsJ,EAAQksJ,EAAOhoK,OACfwrC,EAAMpjC,KAAKojC,GACf,KAAStoC,EAAI,EAAGA,EAAI4Y,EAAO5Y,IACnB6qK,EAAY/F,EAAO9kK,GAAGktE,KACrB29F,IAAa1iK,GAAQ0iK,EAAW1E,IACjCrB,EAAO9kK,GAAG67G,OAAOvzE,IAI7B4/H,YAAa,WAAA,GASAloK,GACDkmK,EACA9nK,EAMQ0sK,EAOP5F,EACD6F,EAKCC,EACDC,EACAV,EA/BJzmF,EAAM5+E,KACNojC,EAAMw7C,EAAIx7C,IACV69H,EAAQriF,EAAIqiF,MACZE,EAAcF,EAAMrpK,OACpBouK,EAAkB5iI,EAAIlqC,SACtB+sK,EAAiB9E,EACjB+E,EAAkB,EAClB5mK,EAAM8jC,EAAI0zB,EACd,KAASh8D,EAAI,EAAGA,EAAIqmK,EAAarmK,IACzBkmK,EAAcC,EAAMnmK,GACpB5B,EAAS8nK,EAAY5gK,QAAQlH,OACjC8nK,EAAY5gK,QAAQnH,MAAQmqC,EAAInqC,QAC3B+nK,EAAY5gK,QAAQlH,QAGjBA,EAAOgF,SAAWhF,EAAOgF,QAAQ,OAC7B0nK,EAAWvzJ,SAASnZ,EAAQ,IAAM,IACtC8nK,EAAY5gK,QAAQlH,OAAS0sK,EAAWxiI,EAAIlqC,UAEhD8nK,EAAYrqD,OAAOvzE,EAAIjnC,SACvB6pK,GAAmBhF,EAAY5gK,QAAQlH,QAPvCgtK,GAUR,KAASlG,EAAM,EAAGA,EAAMmB,EAAanB,IAC7B6F,EAAgB5E,EAAMjB,GACrB6F,EAAczlK,QAAQlH,SACvB2sK,EAAczlK,QAAQlH,OAAS8sK,EAAkBE,EAGzD,KAASJ,EAAM,EAAGA,EAAM3E,EAAa2E,IAC7BC,EAAgB9E,EAAM6E,GACtBT,EAAUjiI,EAAIjnC,QAAQ4uB,KAAKqY,EAAIyzB,GAAIv3D,GACvCymK,EAAcpvD,OAAO0uD,GACrBY,IACA3mK,GAAOymK,EAAc3lK,QAAQlH,QAGrCitK,cAAe,WAAA,GAGP/iI,GACKtoC,EACDsrK,EACKr0G,EACDs0G,EAEInkC,EARZ8B,EAAOhkI,KAAKgkI,KACZsiC,EAAYtiC,EAAKpsI,MAErB,KAASkD,EAAI,EAAGA,EAAIwrK,EAAWxrK,IAE3B,IADIsrK,EAAQpiC,EAAKlpI,GACRi3D,EAAI,EAAGA,EAAIu0G,EAAWv0G,IACvBs0G,EAAQriC,EAAKjyE,GACbq0G,EAAMhmK,QAAQw7B,WAAayqI,EAAMjmK,QAAQw7B,WACrCsmG,EAAUkkC,EAAMlkC,UAAU/lI,QAAQrD,KAAKutK,EAAMnkC,WAI7C9+F,EAHCA,EAGKA,EAAItqC,KAAKopI,GAFTA,EAOtB,OAAO9+F,IAAOpjC,KAAKojC,KAEvBmjI,YAAa,WAAA,GAGA5oK,GAFLsjK,EAAQjhK,KAAKihK,MACbjjE,IACJ,KAASrgG,EAAM,EAAGA,EAAMsjK,EAAMrpK,OAAQ+F,IAClCqgG,EAAMl2F,KAAKm5J,EAAMtjK,GAAK8hK,YAE1B,OAAOzhE,IAEXwoE,mBAAoB,SAAUC,GAAV,GAEP9oK,GADLqgG,EAAQh+F,KAAKumK,aACjB,KAAS5oK,EAAM,EAAGA,EAAMqgG,EAAMpmG,OAAQ+F,IAClC8oK,EAAU9sH,MAAM7xC,KAAKg1F,GAAKkF,SAAShE,EAAMrgG,GAAKq6H,YAGtD0uC,wBAAyB,SAAUr+E,GAAV,GAEZ1qF,GADLqgG,EAAQh+F,KAAKumK,aACjB,KAAS5oK,EAAM,EAAGA,EAAMqgG,EAAMpmG,OAAQ+F,IAClC,GAAIqgG,EAAMrgG,GAAKuxG,cAAc7mB,GACzB,OAAO,GAInB8xC,aAAc,WAAA,GAEN/5H,GACA8jC,EACA86D,EACAq9B,EAQA1jC,CAZJy6B,IAAanvH,GAAGk2H,aAAahyH,KAAKnI,MAC9BI,EAAUJ,KAAKI,QAAQ0jI,SACvB5/F,EAAU9jC,EAAQ8jC,QAClB86D,EAAa5+F,EAAQ4+F,WACrBq9B,EAASj8H,EAAQi8H,OACN,SAAXA,IACAA,MAEAv5C,EAAckc,KACdA,EAAasyB,GACbptF,EAAU,GAEVy0D,EAAK34F,KAAK6rJ,UAAY,GAAIrqI,IAAQ6lF,WAClCtK,MACI9oB,MAAO+qB,EACP96D,QAASA,GAEb84D,QACI/oB,MAAOooD,EAAOpjI,MAAQojI,EAAOpoD,MAAQ,GACrCh7E,MAAOojI,EAAOpjI,MACd4lH,SAAUwd,EAAOxd,UAErBl7E,YAEJ3jC,KAAKwmK,mBAAmB7tE,GACxB34F,KAAKw6H,aAAa7hC,IAEtBguE,sBAAuB,SAAU7+B,GAAV,GAINhtI,GACDm7H,EAIAxtC,EAES12B,EACDs2B,EAXhBu3E,EAAS5/J,KAAK4/J,OACd5gK,IACJ,IAAsB,OAAlB8oI,EACA,IAAShtI,EAAI,EAAGA,EAAI8kK,EAAOhoK,OAAQkD,IAE/B,GADIm7H,EAAQ2pC,EAAO9kK,GACa,eAA5Bm7H,EAAMjuD,KAAK5nE,QAAQ8O,OAGnBu5E,EAASm3E,EAAO9kK,GAAGk0J,eAAelnB,GAClCr/C,GAAUA,EAAO7wF,QACjB,IAASm6D,EAAI,EAAGA,EAAI02B,EAAO7wF,OAAQm6D,IAC3Bs2B,EAAQI,EAAO12B,GACfs2B,GAAS3G,GAAQ2G,EAAMzqF,QAA0B,OAAhByqF,EAAMzqF,OACvCoB,EAAO8I,KAAKugF,EAMhC,OAAOrpF,IAEX4nK,oBAAqB,SAAUC,GAC3B,MAAO7mK,MAAK8mK,aAAa,SAAUz+E,GAC/B,MAAOA,GAAMszC,OAAOxpH,QAAU00J,KAGtCE,mBAAoB,SAAU73J,GAC1B,MAAOlP,MAAK8mK,aAAa,SAAUz+E,GAC/B,MAAOA,GAAMszC,OAAOzsH,OAASA,KAGrC43J,aAAc,SAAUnmJ,GAAV,GAGD7lB,GACDm7H,EACAxtC,EACK12B,EACDs2B,EANRu3E,EAAS5/J,KAAK4/J,OACd5gK,IACJ,KAASlE,EAAI,EAAGA,EAAI8kK,EAAOhoK,OAAQkD,IAG/B,IAFIm7H,EAAQ2pC,EAAO9kK,GACf2tF,EAASwtC,EAAMxtC,OACV12B,EAAI,EAAGA,EAAI02B,EAAO7wF,OAAQm6D,IAC3Bs2B,EAAQI,EAAO12B,GACfs2B,GAAS1nE,EAAS0nE,IAClBrpF,EAAO8I,KAAKugF,EAIxB,OAAOrpF,IAEXgoK,UAAW,SAAUrmJ,GAAV,GAEE7lB,GACDm7H,EACAxtC,EACK12B,EACDs2B,EALRu3E,EAAS5/J,KAAK4/J,MAClB,KAAS9kK,EAAI,EAAGA,EAAI8kK,EAAOhoK,OAAQkD,IAG/B,IAFIm7H,EAAQ2pC,EAAO9kK,GACf2tF,EAASwtC,EAAMxtC,OACV12B,EAAI,EAAGA,EAAI02B,EAAO7wF,OAAQm6D,IAE/B,GADIs2B,EAAQI,EAAO12B,GACfs2B,GAAS1nE,EAAS0nE,GAClB,MAAOA,IAKvB4+E,YAAa,SAAU5+E,GAAV,GAEAvtF,GACDktE,EAFJi5F,EAAQjhK,KAAKihK,KACjB,KAASnmK,EAAI,EAAGA,EAAImmK,EAAMrpK,OAAQkD,IAE9B,GADIktE,EAAOi5F,EAAMnmK,GACbktE,EAAK5kC,IAAI8rE,cAAc7mB,GACvB,MAAOrgB,MA+BvB2hD,GAAkBs9B,IACdtrB,UACAmI,UAAYhhG,WACZk8D,WAAY,GACZq9B,QACIpoD,MAAOs9C,GACPt4H,MAAO,GAEX07I,QACI+D,eACIxX,QAAUjtD,MAAO,WACjB4gE,SAAW5gE,MAAO,eAI1BizE,IACAnmB,MAAO,SAAU9K,EAAOhuH,GACpBjI,KAAKknK,eAAejxC,EAAOhuH,EAAGk7I,KAElCniI,MAAO,SAAUi1G,EAAOhuH,GACpBjI,KAAKknK,eAAejxC,EAAOhuH,EAAGi7I,MAGlCiE,GAAmBtwJ,EAAM6J,QACzBC,KAAM,SAAUg7H,EAAQtoE,EAAQ8zG,GAA1B,GASOrsK,GACDijB,EACAqpJ,EAVJ9a,EAAkBj5F,EAAOi5F,gBAAgB3wB,GACzCshB,EAAc5pF,EAAO4pF,YAAYthB,GACjCixB,EAAev5F,EAAOu5F,aAAajxB,EAAQ2wB,GAC3C+a,EAAernK,KAAKsnK,iBACpBptH,EAAWitH,EAAkBxoH,MAAMg9E,EAAOz8H,MAC1CqoK,EAAgB5rC,EAAO7oF,WAAaoH,CAGxC,KAFAl6C,KAAKwnK,QAAU7rC,EACf37H,KAAKynK,QAAUp0G,EACNv4D,EAAI,EAAGA,EAAIwxJ,EAAgB10J,OAAQkD,IAAK,CAG7C,GAFIijB,EAAQuuI,EAAgBxxJ,GACxBssK,EAAiB,OACjBx+C,GAAS2+C,GACTH,EAAiBG,EAAcxpJ,OAC5B,CAAA,GAAU,IAANjjB,IAAWmI,GAAQ8a,EAAOk/H,GAGjC,KAFAmqB,GAAiBG,EAIjBH,GACAC,EAAav/J,MACT4/J,cAAe3pJ,EACf7O,KAAM09I,EAAa9xJ,GACnB6+B,UAAWz9B,GAAWkrK,GAAkBA,EAAiB1nB,GAAW0nB,OAKpFO,gBAAiB,SAAUC,EAAW5zH,GAArB,GASL/vC,GAKCnJ,EACDijB,EACA8pJ,EACAjqK,EAhBJuhF,EAASn/E,KACT4+E,EAAM5+E,KACN27H,EAAS/8C,EAAI4oF,QACbH,EAAezoF,EAAI0oF,cACnB9rK,EAAOwE,KAAK8nK,YAAYF,OACxBG,EAAgBvsK,EAAK2qB,UAAU,GAC/BnnB,IAOJ,MANI+oK,GAAkB/0H,EAAS+0H,IAAmBhiK,GAAQgiK,KAClD9jK,EAAK,aAETA,EAAG8C,UAAYghK,EACf/oK,EAAS,GAAIiF,IAERnJ,EAAI,EAAGA,EAAIusK,EAAazvK,OAAQkD,IAAK,CAI1C,GAHIijB,EAAQspJ,EAAavsK,GACrB+sK,EAAY1oF,EAAO6oF,WAAWxsK,EAAK0W,OAAQ6L,EAAM2pJ,eACjD9pK,EAAQmgB,EAAM4b,UAAUkuI,EAAWlsC,EAAQngI,EAAK2qB,UAAW6tB,KACjD,OAAVp2C,IAAkBgrH,GAAShrH,IAAW8jF,GAAQ9jF,EAAMhG,SAAagG,YAAiB5B,OAAO,CACzFgD,EAASpB,CACT,OAEI8jF,GAAQ9jF,IACRu9I,EAASp9H,EAAM7O,KAAMlQ,EAAQpB,GAIzC,MAAOoB,IAEX8oK,YAAa,SAAUr/E,GAAV,GAMA3tF,GACDyxJ,EANJ3tE,EAAM5+E,KACNqzD,EAASurB,EAAI6oF,QACb9rC,EAAS/8C,EAAI4oF,QACbt1J,KACAiU,IACJ,KAASrrB,EAAI,EAAGA,EAAI2tF,EAAO7wF,OAAQkD,IAC3ByxJ,EAAU9jE,EAAO3tF,GACrBoX,EAAOpK,KAAKurD,EAAO2pF,UAAUrhB,EAAQ4wB,IACrCpmI,EAAUre,KAAK6zH,EAAOngI,KAAK+wJ,GAE/B,QACIr6I,OAAQA,EACRiU,UAAWA,IAGnB6hJ,WAAY,SAAUxsK,EAAMuiB,GAAhB,GAGCjjB,GACD43C,EACAuqG,EACAr/I,EALJsU,KACAwB,EAAQlY,EAAK5D,MACjB,KAASkD,EAAI,EAAGA,EAAI4Y,EAAO5Y,IACnB43C,EAAOl3C,EAAKV,GACZmiJ,EAAcvqG,EAAKuqG,YACnBr/I,EAAQ,OAERA,EADA8jF,GAAQu7D,EAAYl/H,IACZk/H,EAAYl/H,GAEZ20B,EAAKlD,OAAOzxB,GAExB7L,EAAOpK,KAAKlK,EAEhB,OAAOsU,MAmBXk1I,GAAoBvwJ,EAAM6J,QAC1BC,KAAM,WACFX,KAAKw+I,cAETp2H,SAAU,SAAUkzH,EAAahpG,GAAvB,GAEGx3C,GADLqkF,EAASn/E,IACb,KAASlF,EAAI,EAAGA,EAAIwgJ,EAAY1jJ,OAAQkD,IACpCqkF,EAAOq/D,UAAUlD,EAAYxgJ,IAAMw3C,GAG3CqM,MAAO,SAAUs/F,GACb,MAAOj+I,MAAKw+I,UAAUP,MAG9BmJ,GAAkBz7I,QAAU,GAAIy7I,IAC5BC,GAAWxB,GAAInlJ,QACf83J,YAAa,WAAA,GACLt3B,GAASlhI,KAAKI,QAAQ8gI,OACtB+mC,EAAcrtK,MAAesmI,EAAQA,EAAOl0G,MAC5Ck7I,EAAYttK,MAAesmI,EAAQA,EAAOj0G,GAC1Cg7I,GAAYzkK,UACZxD,KAAKmoK,UAAYnoK,KAAKooK,aAAaH,GACnCjoK,KAAK8jC,OAAO9jC,KAAKmoK,YAEjBD,EAAU1kK,UACVxD,KAAKqoK,QAAUroK,KAAKooK,aAAaF,GACjCloK,KAAK8jC,OAAO9jC,KAAKqoK,WAGzBD,aAAc,SAAUhoK,GAAV,GAEN+yJ,GADAD,EAAgB9pC,GAAYhpH,EAehC,OAZI+yJ,GADAD,EACYA,GACRzsI,SAAUzmB,KAAKymB,SACfm1G,SAAU57H,KAAK47H,SACfh+H,MAAOoC,KAAKpC,MACZ5E,WAAYgH,KAAKhH,WACjB6iI,aAAc77H,KAAK67H,aACnBztF,MAAOpuC,KAAKouC,MACZutF,OAAQ37H,KAAK27H,SAGL37H,KAAKszJ,YAAYlzJ,EAAQ2I,QAElC,GAAI48I,IAASwN,EAAWv4J,IAAaghC,SAAU57B,KAAKI,QAAQw7B,UAAYx7B,KAEnFu2G,OAAQ,SAAUqgB,GAAV,GAEAp4C,GACAupF,EACAE,EACAzqK,CAJJoC,MAAKuI,SACDq2E,EAAM5+E,KACNmoK,EAAYvpF,EAAIupF,UAChBE,EAAUzpF,EAAIypF,QACdzqK,EAAQghF,EAAIhhF,MAChBoC,KAAKojC,IAAM4zF,EACPmxC,IACAA,EAAU/nK,QAAQ6xJ,UAAYr0J,EAAMovB,KAAOpvB,EAAMqvB,GACjDk7I,EAAUxxD,OAAOqgB,IAEjBqxC,IACAA,EAAQjoK,QAAQ6xJ,UAAYr0J,EAAMqvB,GAAKrvB,EAAMovB,KAC7Cq7I,EAAQ1xD,OAAOqgB,IAEfh3H,KAAKsiI,MACLtiI,KAAKsiI,KAAK3rB,OAAOqgB,MAI7BqwB,GAAStgJ,UAAUmzC,SAAWt/C,MAAeysJ,GAAStgJ,UAAUmzC,UAC5DgnF,QAAUn4H,OAAQ,aAClBs+G,SAAWt+G,OAAQ,SAEnBu+I,GAAgBtB,GAAStlJ,QACzB8uJ,UAAW,WACP,MAAOnI,KAEX0G,WAAY,SAAUvyJ,GAClB,MAAOA,GAAKyhJ,aAEhB8V,iBAAkB,SAAU1qE,EAAOt/E,GAC/B,MAAyB,QAArBs/E,EAAMzqF,MAAMovB,MAAoC,OAAnBq7D,EAAMzqF,MAAMqvB,GAClC,GAEJjtB,KAAK+5H,aAAahxH,OAAO6sH,KAAK7sH,EAAQs/E,EAAMzqF,MAAMovB,KAAMq7D,EAAMzqF,MAAMqvB,KAE/E8iI,UAAW,SAAU1nE,GACjB,MAAKA,IAIDA,EAAMzqF,MAAMovB,KACZq7D,EAAMzqF,MAAMqvB,IAJL,GAOfokI,YAAa,SAAUzzJ,EAAO4xC,GAAjB,GACLuuG,GAAWvuG,EAAOmsF,OAAOloG,KACzBzG,EAAOpvB,EAAMovB,KACbC,EAAKrvB,EAAMqvB,GACXqvH,EAAYt8I,KAAK+uJ,gBAAgBhR,EACvB,QAAVngJ,GAAkBo1C,EAAShmB,IAASgmB,EAAS/lB,KAC7CqvH,EAAYt8I,KAAK+uJ,gBAAgBhR,GAAYzB,IACzCtqI,IAAK07F,EACLh1G,IAAKmxH,GAETyyB,EAAUtqI,IAAMpT,KAAKoT,IAAIsqI,EAAUtqI,IAAKgb,GACxCsvH,EAAU5jJ,IAAMkG,KAAKlG,IAAI4jJ,EAAU5jJ,IAAKs0B,GACxCsvH,EAAUtqI,IAAMpT,KAAKoT,IAAIsqI,EAAUtqI,IAAKib,GACxCqvH,EAAU5jJ,IAAMkG,KAAKlG,IAAI4jJ,EAAU5jJ,IAAKu0B,KAGhDglI,UAAW,SAAU5pE,GACjB,GAAIzqF,GAAQyqF,EAAMzqF,KAClB,OAAOA,GAAMovB,KAAOpvB,EAAMqvB,MAGlCq6H,GAAcvgJ,UAAUuhK,WAAa9jB,GAAiBz9I,UAAUuhK,WAC5D/gB,GAAYtB,GAAYvlJ,QACxBi2G,OAAQ,SAAUvzE,GAAV,GAcAy2H,GAbAj7E,EAAM5+E,KACNI,EAAUw+E,EAAIx+E,QACdxC,EAAQghF,EAAIhhF,MACZq4H,EAAQr3C,EAAI2yE,MACZ/pB,EAAYvR,EAAM44B,gBAAgBzuJ,GAClCmoK,KACAC,KACAC,KACA1O,EAASvyB,EAAUvD,QAAQrmI,EAAM8vH,IAAK9vH,EAAM+vH,MAC5C+6C,EAAQlhC,EAAUvD,QAAQrmI,EAAM4uE,KAAM5uE,EAAM4uE,MAC5Cm8F,EAAQnhC,EAAUvD,QAAQrmI,EAAM6uE,MAAO7uE,EAAM6uE,MACjDi8F,GAAM7xG,GAAK8xG,EAAM9xG,GAAKkjG,EAAOljG,GAAKzzB,EAAIyzB,GACtC6xG,EAAM3xG,GAAK4xG,EAAM5xG,GAAKgjG,EAAOhjG,GAAK3zB,EAAI2zB,GAClC8iG,EAAME,EAAO5iG,SAASlkC,EAC1Bs1I,EAAQzgK,MACJ4gK,EAAM7xG,GACN6xG,EAAM5xG,KAEVyxG,EAAQzgK,MACJ+xJ,EACA6O,EAAM5xG,KAEV0xG,EAAQ1gK,MACJ+xJ,EACA8O,EAAM7xG,KAEV0xG,EAAQ1gK,MACJ6gK,EAAM5xG,GACN4xG,EAAM7xG,KAEV2xG,EAAS3gK,MACL+xJ,EACAE,EAAOjjG,KAEX2xG,EAAS3gK,MACL+xJ,EACAE,EAAO/iG,KAEXh3D,KAAKi6J,OACDsO,EACAC,EACAC,GAEJzoK,KAAKojC,IAAM22H,EAAO59J,QAAQrD,KAAK4vK,EAAMvsK,QAAQrD,KAAK6vK,IAClD3oK,KAAKk6J,cAETI,WAAY,eAGZ9S,GAAYtB,GAAiBxlJ,QAC7B8uJ,UAAW,WACP,MAAOjI,OAGXE,GAAmBr0B,GAAa1yH,QAChCC,KAAM,SAAUqsB,EAAMC,EAAI0uG,GACtBvI,GAAanvH,GAAGtD,KAAKwH,KAAKnI,MAC1BA,KAAKgtB,KAAOA,EACZhtB,KAAKitB,GAAKA,EACVjtB,KAAK27H,OAASA,GAElBgF,WAAY,WAAA,GAOAtvH,GASA4hB,EAfJjG,EAAOhtB,KAAKgtB,KACZ4xD,EAAM5+E,KACN4oK,EAAUhqF,EAAI5xD,KAAKoW,IACnBylI,EAAQjqF,EAAI3xD,GAAGmW,IACfqlD,IAoBJ,OAnBIz7D,GAAKugE,YACDl8E,EAAI2b,EAAKilI,UAAY2W,EAAQ9xG,GAAK8xG,EAAQ5xG,GAC9CyxB,EAAO3gF,MACH8gK,EAAQ/xG,GACRxlD,IAEAw3J,EAAM9xG,GACN1lD,MAGA4hB,EAAIjG,EAAKilI,UAAY2W,EAAQ7xG,GAAK6xG,EAAQ/xG,GAC9C4xB,EAAO3gF,MACHmrB,EACA21I,EAAQ9xG,KAER7jC,EACA41I,EAAM7xG,MAGPyxB,GAEX0xC,aAAc,WAAA,GAENx1B,GACA39D,CAFJosF,IAAanvH,GAAGk2H,aAAahyH,KAAKnI,MAC9B2kG,EAAO3kG,KAAK27H,OAAOh3B,SACnB39D,EAAO81D,GAAKiS,WAAW/uG,KAAK2gI,cAC5B3jC,QACI/oB,MAAO0wB,EAAK1wB,MACZh7E,MAAO0rG,EAAK1rG,MACZirC,QAASygE,EAAKzgE,QACd26E,SAAUla,EAAKka,YAGvB2J,GAAiBxhF,GACjBhnC,KAAKmiG,OAAOr+D,OAAOkD,MAG3B2iF,GAAkB89B,IACdl7E,WACIrtE,KAAM+gJ,GACNrsH,MAAOosH,MAGX0H,GAAiB1B,GAAStlJ,QAC1B6H,OAAQ,WACJy9I,GAAS/hJ,GAAGsE,OAAOJ,KAAKnI,MACxBA,KAAK8oK,kBAET1Z,mBAAoB,SAAUzuI,GAAV,GAKP4uI,GACDlU,EACAjtG,EACAytF,EACK2N,EACDhuI,EACAoC,EACAmrK,EACA/7I,EACAC,EAbR0uG,EAAS37H,KAAKI,QAAQu7H,OACtBiL,EAAa5mI,KAAK42I,aAAax2I,QAAQwmI,eACvCoiC,EAAkBzuB,EAAgB5e,GAClCpuC,GAAcvtF,KAAKI,QAAQqvJ,UAC/B,KAASF,EAAW,EAAGA,EAAW5zB,EAAO/jI,OAAQ23J,IAI7C,IAHIlU,EAAgB1f,EAAO4zB,GACvBnhH,EAAQ,EACRytF,EAAe,EACV2N,EAAa,EAAGA,EAAaw/B,EAAiBx/B,IAC/ChuI,EAAOuhJ,GAAapxI,QAAQqxI,UAAU3B,EAAe7R,GACrD5rI,EAAQpC,EAAKyhJ,YAAYr/I,MACzBmrK,EAAUvtK,EAAKg0C,OAAOu5H,QACtB/7I,EAAOohB,EACPnhB,EAAK,OACL87I,EAC8B,UAA1BA,EAAQjsK,eACRtB,EAAKyhJ,YAAYr/I,MAAQwwC,EACzBphB,EAAO,EACPC,EAAKmhB,IAEL5yC,EAAKyhJ,YAAYr/I,MAAQi+H,EACzB5uG,EAAKD,EAAO6uG,EACZA,EAAe,GAEZ7oF,EAASp1C,KAChBi+H,GAAgBj+H,EAChBwwC,GAASxwC,EACTqvB,EAAKmhB,GAETztB,EAASnlB,GACLogI,SAAUgL,EAAW4C,GACrBA,WAAYA,EACZ7N,OAAQ0f,EACRkU,SAAUA,EACVnhH,MAAOA,EACPytF,aAAcA,EACd7uG,KAAMA,EACNC,GAAIA,EACJsgE,WAAYA,KAK5B8jE,YAAa,SAAUzzJ,EAAO4xC,GAC1Bw2G,GAAS/hJ,GAAGotJ,YAAYlpJ,KAAKnI,MAAQpC,MAAO4xC,EAAOviB,IAAMuiB,IAE7DyiH,UAAW,SAAU5pE,GACjB,MAAOA,GAAMzqF,OAAS,GAE1BmyJ,UAAW,SAAU1nE,GACjB,OACIA,EAAMr7D,KACNq7D,EAAMp7D,KAGd67I,eAAgB,WAAA,GAKHvZ,GACDlU,EACA5yD,EAEIisE,EACKnI,EACDlkE,EAEIuH,EAZhBzQ,EAASn/E,KACT27H,EAAS37H,KAAKI,QAAQu7H,OACtBszB,EAAejvJ,KAAKivJ,aACpBl/D,EAAW/vF,KAAK+vF,WACpB,KAASw/D,EAAW,EAAGA,EAAW5zB,EAAO/jI,OAAQ23J,IAG7C,GAFIlU,EAAgB1f,EAAO4zB,GACvB9mE,EAASwmE,EAAaM,GAGtB,IADImF,EAAY,OACPnI,EAAU,EAAGA,EAAU9jE,EAAO7wF,OAAQ20J,IACvClkE,EAAQI,EAAO8jE,GACflkE,GAASqsE,IACL9kE,EAAU,GAAI63D,IAAiBiN,EAAWrsE,EAAOgzD,GACrDtrD,EAASjoF,KAAK8nF,GACdzQ,EAAOr7C,OAAO8rD,IAElB8kE,EAAYrsE,KAgD5Bs/D,GAAsBV,GAAavmJ,QACnCggK,WAAY,SAAU/kC,GAAV,GAeK7gI,GACDmxF,EAfR9M,EAASn/E,IAIb,IAHAA,KAAKipK,qBACLjpK,KAAK2xJ,kBACL3xJ,KAAKkpK,sBAAwB,GAAIxjB,IAC7B/pB,EAAO/jI,OAAS,EAUhB,IATAoI,KAAKyvJ,WAAaxsJ,GAAQ04H,EAAO,GAAGz8H,MAChCgiJ,GACAG,GACAsB,GACAH,GACAJ,GACAV,GACAe,KAEK3nJ,EAAI,EAAGA,EAAI6gI,EAAO/jI,OAAQkD,IAE/B,GADImxF,EAAQ0vC,EAAO7gI,GAAGmxF,MAClBA,GAAwB,SAAfA,EAAM/sF,KAAiB,CAChCigF,EAAOgqF,UAAW,CAClB,SAKhB5gK,OAAQ,SAAU04J,GACA,SAAVA,IACAA,EAAQjhK,KAAKihK,OAEjBjhK,KAAKopK,mBAAmBnI,GACxBjhK,KAAKqpK,oBAAoBpI,GACzBjhK,KAAKspK,yBAAyBrI,GAC9BjhK,KAAKupK,aAAatI,GAClBjhK,KAAKwpK,gBAAgBvI,IAEzBhB,WAAY,SAAUxsI,GAClB,GAAIsqH,GAAWtqH,EAAKrzB,QAAQ8O,IAC5B+3I,IAAahjJ,GAAGg8J,WAAW93J,KAAKnI,KAAMyzB,GAClCA,YAAgB8gG,UACTv0H,MAAKipK,kBAAkBlrB,IAE9B/9I,KAAKkpK,sBAAsBhoI,MAAM68G,SAC1B/9I,MAAK2xJ,eAAe5T,IAE3BtqH,IAASzzB,KAAK42I,oBACP52I,MAAK42I,aAEZnjH,IAASzzB,KAAKwnI,iBACPxnI,MAAKwnI,WAGpB+hC,aAAc,SAAUtI,GAAV,GAGDnmK,GACDktE,EACAyhG,EAEAC,EAIA/pH,EACKgqH,EAXTxqF,EAASn/E,KACT6iK,EAAe7iK,KAAK4iK,mBACxB,KAAS9nK,EAAI,EAAGA,EAAImmK,EAAMrpK,OAAQkD,IAK9B,GAJIktE,EAAOi5F,EAAMnmK,GACb2uK,EAAa5G,EAAa76F,EAAK5nE,QAAQ8O,MAAQ,eACnDiwE,EAAO4iF,YAAY0H,GACfC,EAAgBvqF,EAAO4jF,oBAAoB0G,GAK/C,IADI9pH,EAASw/B,EAAOyqF,0BAA0BF;AACrCC,EAAU,EAAGA,EAAUhqH,EAAO/nD,OAAQ+xK,IAC3CxqF,EAAO0qF,iBAAiBlqH,EAAOgqH,GAAU3hG,IAIrD6hG,iBAAkB,SAAUluC,EAAQ3zD,GAChChoE,KAAK8pK,gBAAgB1uB,EAAmBzf,GACpCslB,GACAuB,KACAx6E,GACJhoE,KAAK+pK,eAAe3uB,EAAmBzf,GACnC4lB,GACAL,KACAl5E,GACJhoE,KAAKgqK,oBAAoB5uB,EAAmBzf,GACxC0mB,GACAD,KACAp6E,GACJhoE,KAAKiqK,kBAAkB7uB,EAAmBzf,GACtC0lB,GACAqB,KACA16E,GACJhoE,KAAKkqK,uBAAuB9uB,EAAmBzf,EAAQ2lB,IAAct5E,GACrEhoE,KAAKmqK,mBAAmB/uB,EAAmBzf,GACvCwlB,GACAsB,KACAz6E,GACJhoE,KAAKoqK,gBAAgBhvB,EAAmBzf,EAAQimB,IAAO55E,GACvDhoE,KAAKqqK,qBAAqBjvB,EAAmBzf,GACzCinB,GACAlB,KACA15E,GACJhoE,KAAKsqK,gBAAgBlvB,EAAmBzf,GACpCgmB,GACAgB,KACA36E,IAERqhG,oBAAqB,SAAUpI,GAAV,GAIRnmK,GACDugJ,EACAzE,EACA2zB,EACAC,EAPJrrF,EAASn/E,KACT27H,EAAS37H,KAAKyqK,WAAazqK,KAAK27H,OAChC+uC,IACJ,KAAS5vK,EAAI,EAAGA,EAAI6gI,EAAO/jI,OAAQkD,IAC3BugJ,EAAgB1f,EAAO7gI,GACvB87I,EAAez3D,EAAO2vE,mBAAmBzT,GACzCkvB,EAAWprF,EAAOqiF,SAAS5qB,EAAax2I,QAAQ4nE,MAChDwiG,EAAWjvB,EAAiB3E,EAAax2I,QAAQlB,KAAM+yH,KACtDu4C,GAAYnvB,EAAcsvB,gBAAkB1nK,GAAQsnK,EAAUtJ,GAC/D5lB,EAAgBl8D,EAAOyrF,gBAAgBvvB,EAAezE,IAC/C5jG,EAAS4jG,EAAax2I,QAAQ4R,MAAQghC,EAAS4jG,EAAax2I,QAAQ1H,QAC3E2iJ,EAAgBl8D,EAAO0rF,aAAaxvB,EAAezE,IAEvD8zB,EAAgB5iK,KAAKuzI,EAEzBr7I,MAAKyqK,UAAY9uC,EACjB37H,KAAK27H,OAAS+uC,GAElBG,aAAc,SAAUlvC,EAAQib,GAAlB,GAeNyE,GAEIyvB,EACA/jC,EAjBJhpF,EAAQ64F,EAAa1P,oBACrBxB,EAAYkR,EAAax2I,QAAQslI,UACjCqlC,EAAmB9nK,GAAQ04H,EAAOz8H,MAClCyiJ,GACAgB,GACA1B,GACAuB,IA6BJ,OA3BAzkG,GAAM/rC,IAAMghC,EAAS4jG,EAAax2I,QAAQ4R,KAAOpT,KAAKpE,MAAMujD,EAAM/rC,KAAO,EAErE+rC,EAAMrlD,IADNs6C,EAAS4jG,EAAax2I,QAAQ1H,KAClBgtI,EAAY9mI,KAAKpE,MAAMujD,EAAMrlD,KAAO,EAAIkG,KAAKuoD,KAAKpJ,EAAMrlD,KAExDijI,EAAOngI,KAAK5D,OAExByjJ,EAAgBzgJ,MAAe+gI,GAC/BovC,IACID,EAAc/sH,EAAM/rC,IAAM,EAC1B+0H,EAAgB6P,EAAax2I,QAAQ2mI,kBACrC+jC,GAAe,GAAKA,EAAczvB,EAAc7/I,KAAK5D,SACrDyjJ,EAAcyc,qBACVplH,KAAM2oG,EAAc7/I,KAAKsvK,GACzBlvC,SAAUmL,EAAc+jC,GACxBthC,gBAGJzrF,EAAMrlD,IAAM2iJ,EAAc7/I,KAAK5D,SAC/ByjJ,EAAc2vB,qBACVt4H,KAAM2oG,EAAc7/I,KAAKuiD,EAAMrlD,KAC/BkjI,SAAUmL,EAAchpF,EAAMrlD,KAC9B8wI,WAAYzrF,EAAMrlD,IAAMqlD,EAAM/rC,OAI1C4kI,EAAazP,WAAavoI,KAAKlG,IAAIk+I,EAAazP,YAAc,EAAGkU,EAAc7/I,KAAK5D,QACpFyjJ,EAAc7/I,MAAQ6/I,EAAc7/I,UAAYgL,MAAMu3C,EAAM/rC,IAAK+rC,EAAMrlD,KAChE2iJ,GAEXuvB,gBAAiB,SAAUjvC,EAAQib,GAAlB,GAcTzwH,GAIAqkJ,EACAS,EACAjsK,EACAksK,EACAtD,EACAuD,EACAC,EACAC,EACAC,EAAuBC,EAIlBzwK,EACD8gI,EAOI4N,EA6BRgiC,EACAhwK,EACKwkK,EApEL7gF,EAASn/E,KACT+qK,EAAmB9nK,GAAQ04H,EAAOz8H,MAClCyiJ,GACAgB,GACA1B,GACAuB,KAEA5jE,EAAMg4D,EAAax2I,QACnBwmI,EAAahoD,EAAIgoD,WACjBG,EAAgBnoD,EAAImoD,aAoBxB,KAnBsB,SAAlBA,IACAA,EAAgBH,GAEhBzgH,EAAYy4D,EAAIz4D,UACF,SAAdA,IACAA,MAEAqkJ,EAAWjvB,EAAiB3E,EAAax2I,QAAQlB,KAAM+yH,IACvDg5C,EAAmBrwK,MAAe+gI,GAClC38H,EAASpE,MAAe+gI,GACxBuvC,EAAUvvC,EAAOngI,KACjBosK,KACAuD,EAAmBthD,EACnBuhD,EAAmB19D,EACnB29D,EAAQrxB,EAERwwB,IACAa,EAAQxvB,GAEH/gJ,EAAI,EAAGA,EAAIowK,EAAQtzK,OAAQkD,IAC5B8gI,EAAW,OAEXA,EADAD,EAAOgvC,cACIU,EAAM1vC,EAAOgvC,cAAeO,EAAQpwK,GAAIqkF,EAAO46C,aAAajE,MAE5DiR,EAAcjsI,GAEzB4mF,GAAQk6C,KACJ4N,EAAaoN,EAAa9O,cAAclM,GACxC,GAAK4N,GAAcA,EAAa5C,EAAWhvI,QAC3CgwK,EAAUp+B,GAAco+B,EAAUp+B,OAClCo+B,EAAUp+B,GAAY1hI,KAAKhN,IACpBiwK,IACHvhC,EAAa,EACTA,IAAe2hC,EACfG,EAAsB7iF,OAAO3gF,KAAKhN,GAC3B0uI,EAAa2hC,IACpBA,EAAmB3hC,EACnB8hC,GACI1vC,SAAUA,EACVnzC,QAAS3tF,KAGV0uI,GAAc5C,EAAWhvI,SAC5B4xI,IAAe4hC,EACfG,EAAsB9iF,OAAO3gF,KAAKhN,GAC3B0uI,EAAa4hC,IACpBA,EAAmB5hC,EACnB+hC,GACI3vC,SAAUA,EACVnzC,QAAS3tF,OASjC,KAFI0wK,EAAa,GAAIrkB,IAAiB8jB,EAAkBluB,GAAapxI,QAASy7I,GAAkBz7I,SAC5FnQ,EAAOwD,EAAOxD,QACTwkK,EAAM,EAAGA,EAAMp5B,EAAWhvI,OAAQooK,IACvCxkK,EAAKwkK,GAAOwL,EAAW7D,gBAAgBC,EAAU5H,GAAMp5B,EAAWo5B,IAC9D4H,EAAU5H,KACV75I,EAAU65I,GAAOxkK,EAAKwkK,GAkB9B,OAfIsL,IAAyB9vK,EAAK5D,SAC9BoH,EAAO84J,qBACHplH,KAAM84H,EAAW7D,gBAAgB2D,EAAsB7iF,OAAQ6iF,EAAsB1vC,UACrF4N,WAAY2hC,EACZvvC,SAAU0vC,EAAsB1vC,WAGpC2vC,GAAyB/vK,EAAK5D,SAC9BoH,EAAOgsK,qBACHt4H,KAAM84H,EAAW7D,gBAAgB4D,EAAsB9iF,OAAQ8iF,EAAsB3vC,UACrF4N,WAAY4hC,EACZxvC,SAAU2vC,EAAsB3vC,WAGxCgb,EAAax2I,QAAQ+lB,UAAYA,EAC1BnnB,GAEX+gK,YAAa,SAAU9pC,EAAOjuD,GAK1B,IALS,GACL2zD,GAAS1F,EAAM71H,QAAQu7H,OACvBib,EAAe52I,KAAK8uJ,mBAAmBnzB,EAAO,IAC9CiL,EAAagQ,EAAax2I,QAAQwmI,WAClC6kC,EAAkB7sK,KAAKlG,IAAI,EAAG6hJ,EAAgB5e,GAAUiL,EAAWhvI,QAChE6zK,KACH7kC,EAAW9+H,KAAK,GAEpB9H,MAAKkpK,sBAAsB36H,OAAO0nF,EAAM84B,iBACxC9H,GAAahjJ,GAAG87J,YAAY53J,KAAKnI,KAAMi2H,EAAOjuD,IAElD86F,eAAgB,SAAUnnC,GAAV,GACRv7H,GAAUJ,KAAKI,QACf29I,EAAWpiB,EAAOloG,KAClB+7F,KAAiBt5G,OAAO9V,EAAQonI,WAChC/zG,EAAO1G,GAAKyiG,EAAa,SAAU5sH,GACnC,MAAOA,GAAEsM,OAAS6uI,IACnB,GACCkjB,EAAQ7gK,EAAQ6gK,YAChByK,GAAmBzK,EAAM,QAAU/xJ,MAAQ,UAC3Cy8J,GAAYl4I,OAAYu0C,MAAQ0jG,CACpC,OAAOC,IAEX7c,mBAAoB,SAAUnzB,GAAV,GACZoiB,GAAWpiB,EAAOib,aAClBnjH,EAAOsqH,EAAW/9I,KAAKipK,kBAAkBlrB,GAAY/9I,KAAK42I,YAC9D,KAAKnjH,EACD,KAAU3qB,OAAM,4CAA8Ci1I,EAElE,OAAOtqH,IAEXm4I,sBAAuB,SAAUC,EAAa7jG,GAAvB,GACfikB,GAAQ4/E,EAAY5/E,MACpB6jE,EAAe7jE,GAAwB,SAAfA,EAAM/sF,KAC9B2kC,EAAOmkC,EAAK5nE,QAAQyjC,IACxB,QACIusH,UAAWnkE,EACX6jE,aAAcA,EACdjsH,KAAMA,IAGd+lI,0BAA2B,SAAUjuC,GAAV,GAGdh+H,GACDuR,EAMJywC,EACKo8F,EACDtoH,EACAq4I,EAZJC,KACA1rI,IACJ,KAAS1iC,EAAM,EAAGA,EAAMg+H,EAAO/jI,OAAQ+F,IAC/BuR,EAAOysH,EAAOh+H,GAAKi5I,cAAgB,cAClCv2G,EAAO3jC,eAAewS,KACvBmxB,EAAOnxB,IAAQ,EACf68J,EAAajkK,KAAKoH,GAI1B,KADIywC,KACKo8F,EAAS,EAAGA,EAASgwB,EAAan0K,OAAQmkJ,IAC3CtoH,EAAOs4I,EAAahwB,GACpB+vB,EAAahwB,EAAYngB,EAAQloG,EAAMsoH,GACjB,IAAtB+vB,EAAWl0K,QAGf+nD,EAAO73C,KAAKgkK,EAEhB,OAAOnsH,IAEXoqH,eAAgB,SAAUpuC,EAAQ3zD,GAAlB,GAIR6jG,GACAG,CAJkB,KAAlBrwC,EAAO/jI,SAGPi0K,EAAclwC,EAAO,GACrBqwC,EAAW,GAAIhmB,IAAShmJ,KAAMtJ,EAAEgK,QAChCi7H,OAAQA,EACR8zB,WAAYzvJ,KAAKyvJ,WACjB5lJ,IAAKgiK,EAAYhiK,IACjBqsG,QAAS21D,EAAY31D,SACtBl2G,KAAK4rK,sBAAsBC,EAAa7jG,KAC3ChoE,KAAK+/J,YAAYiM,EAAUhkG,KAE/BgiG,oBAAqB,SAAUruC,EAAQ3zD,GAAlB,GAIb6jG,GACAI,CAJkB,KAAlBtwC,EAAO/jI,SAGPi0K,EAAclwC,EAAO,GACrBswC,EAAmB,GAAI3kB,IAActnJ,MACrC27H,OAAQA,EACR8zB,WAAYzvJ,KAAKyvJ,WACjB5lJ,IAAKgiK,EAAYhiK,IACjBqsG,QAAS21D,EAAY31D,UAEzBl2G,KAAK+/J,YAAYkM,EAAkBjkG,KAEvCiiG,kBAAmB,SAAUtuC,EAAQ3zD,GAAlB,GAIX6jG,GACAK,CAJkB,KAAlBvwC,EAAO/jI,SAGPi0K,EAAclwC,EAAO,GACrBuwC,EAAc,GAAItlB,IAAY5mJ,MAC9B27H,OAAQA,EACR8zB,WAAYzvJ,KAAKyvJ,WACjB5lJ,IAAKgiK,EAAYhiK,IACjBqsG,QAAS21D,EAAY31D,QACrBryE,KAAMmkC,EAAK5nE,QAAQyjC,OAEvB7jC,KAAK+/J,YAAYmM,EAAalkG,KAElCsiG,gBAAiB,SAAU3uC,EAAQ3zD,GAAlB,GAIT6jG,GACAM,CAJkB,KAAlBxwC,EAAO/jI,SAGPi0K,EAAclwC,EAAO,GACrBwwC,EAAY,GAAI/mB,IAAUplJ,KAAMtJ,EAAEgK,QAClC+uJ,WAAYzvJ,KAAKyvJ,WACjB9zB,OAAQA,GACT37H,KAAK4rK,sBAAsBC,EAAa7jG,KAC3ChoE,KAAK+/J,YAAYoM,EAAWnkG,KAEhC8hG,gBAAiB,SAAUnuC,EAAQ3zD,GAAlB,GAIT6jG,GACAO,CAJkB,KAAlBzwC,EAAO/jI,SAGPi0K,EAAclwC,EAAO,GACrBywC,EAAY,GAAI3mB,IAAUzlJ,KAAMtJ,EAAEgK,QAClC+uJ,WAAYzvJ,KAAKyvJ,WACjB9zB,OAAQA,GACT37H,KAAK4rK,sBAAsBC,EAAa7jG,KAC3ChoE,KAAK+/J,YAAYqM,EAAWpkG,KAEhCoiG,gBAAiB,SAAUzuC,EAAQ3zD,GAAlB,GAIT6jG,GACA51C,CAJkB,KAAlB0F,EAAO/jI,SAGPi0K,EAAclwC,EAAO,GACrB1F,EAAQ,GAAIuxB,IAAUxnJ,MACtByvJ,WAAYzvJ,KAAKyvJ,WACjB5lJ,IAAKgiK,EAAYhiK,IACjB8xH,OAAQA,EACRzlB,QAAS21D,EAAY31D,QACrBryE,KAAMmkC,EAAK5nE,QAAQyjC,OAEvB7jC,KAAK+/J,YAAY9pC,EAAOjuD,KAE5BkiG,uBAAwB,SAAUvuC,EAAQ3zD,GAAlB,GAIhB6jG,GACA51C,CAJkB,KAAlB0F,EAAO/jI,SAGPi0K,EAAclwC,EAAO,GACrB1F,EAAQ,GAAIiwB,IAAiBlmJ,MAC7ByvJ,WAAYzvJ,KAAKyvJ,WACjB5lJ,IAAKgiK,EAAYhiK,IACjB8xH,OAAQA,EACRzlB,QAAS21D,EAAY31D,QACrBryE,KAAMmkC,EAAK5nE,QAAQyjC,OAEvB7jC,KAAK+/J,YAAY9pC,EAAOjuD,KAE5BmiG,mBAAoB,SAAUxuC,EAAQ3zD,GAAlB,GAIZ6jG,GACA51C,CAJkB,KAAlB0F,EAAO/jI,SAGPi0K,EAAclwC,EAAO,GACrB1F,EAAQ,GAAIowB,IAAarmJ,MACzByvJ,WAAYzvJ,KAAKyvJ,WACjB5lJ,IAAKgiK,EAAYhiK,IACjB8xH,OAAQA,EACRzlB,QAAS21D,EAAY31D,QACrBryE,KAAMmkC,EAAK5nE,QAAQyjC,OAEvB7jC,KAAK+/J,YAAY9pC,EAAOjuD,KAE5BqiG,qBAAsB,SAAU1uC,EAAQ3zD,GAAlB,GAId6jG,GACAQ,CAJkB,KAAlB1wC,EAAO/jI,SAGPi0K,EAAclwC,EAAO,GACrB0wC,EAAiB,GAAI3kB,IAAe1nJ,MACpC27H,OAAQA,EACR8zB,WAAYzvJ,KAAKyvJ,WACjB5lJ,IAAKgiK,EAAYhiK,IACjBqsG,QAAS21D,EAAY31D,UAEzBl2G,KAAK+/J,YAAYsM,EAAgBrkG,KAErCskG,qBAAsB,SAAUC,EAAkBC,GAA5B,GAGTjd,GACDlU,EAEI12C,EAMH4tD,EACDka,EAZJttF,EAASn/E,KACT0sK,EAAiBtxB,EAAmBp7I,KAAK27H,OAAQknB,GACrD,KAAS0M,EAAW,EAAGA,EAAWvvJ,KAAK27H,OAAO/jI,OAAQ23J,IAC9ClU,EAAgBl8D,EAAOw8C,OAAO4zB,GAC9BlU,EAAcn8I,OAASyiJ,IAAQtG,EAAcn8I,OAAS+hJ,KAClDt8C,EAAO02C,EAAc12C,KACrBA,GAAQA,EAAK7qG,QAAUknJ,IACvB0rB,EAAe5kK,KAAKuzI,GAIhC,KAASkX,EAAa,EAAGA,EAAama,EAAe90K,OAAQ26J,IAEzD,GADIka,EAAaC,EAAena,GAAY3b,cAAgB,GACxD61B,IAAeF,IAAqBE,GAAoC,IAAtBD,EAClD,OAAO,GAInBG,eAAgB,SAAUJ,EAAkBC,GAA5B,GAEHjd,GACDkd,EAFJ9wC,EAAS37H,KAAK27H,MAClB,KAAS4zB,EAAW,EAAGA,EAAW5zB,EAAO/jI,OAAQ23J,IAE7C,GADIkd,EAAa9wC,EAAO4zB,GAAU3Y,cAAgB,IAC7C61B,IAAeF,IAAqBE,GAAoC,IAAtBD,IAA4B7wC,EAAO4zB,GAAUob,cAChG,OAAO,GAInBrB,yBAA0B,WAAA,GAEbxuK,GADLkpI,EAAOhkI,KAAKgkI,IAChB,KAASlpI,EAAI,EAAGA,EAAIkpI,EAAKpsI,OAAQkD,IACzBkpI,EAAKlpI,YAAcy5H,KACnByP,EAAKlpI,GAAG4mI,gBAIpB0nC,mBAAoB,SAAUnI,GAAV,GAKPnmK,GACD00H,EACA+6C,EAEIr7J,EACA03H,EAcAgQ,EAiBRg2B,EAxCAztF,EAASn/E,KACTyvJ,EAAazvJ,KAAKyvJ,WAClB70C,KAAiB1kG,OAAOlW,KAAKI,QAAQw2I,cACrC5S,IACJ,KAASlpI,EAAI,EAAGA,EAAI8/G,EAAYhjH,OAAQkD,IAGpC,GAFI00H,EAAc5U,EAAY9/G,GAC1ByvK,EAAWprF,EAAOqiF,SAAShyC,EAAYxnD,MACvC/kE,GAAQsnK,EAAUtJ,GAAQ,CAsB1B,GArBI/xJ,EAAOsgH,EAAYtgH,KACnB03H,EAAapX,EAAYoX,WACV,SAAfA,IACAA,MAEJpX,EAAc50H,IACVghC,SAAU6zH,EACV9+B,kBAAmB8+B,EAAa/hD,EAAY,GAC7C8hB,GACE9tC,GAAQ8tC,EAAYkW,aACrBlW,EAAYkW,UAAYvmD,EAAO+kB,eAE/B/kB,EAAOmtF,qBAAqBp9J,EAAMpU,KAClC00H,EAAYkW,WAAY,GAExBkR,EAAe,OAEfA,EADA4E,EAAWhsB,EAAaoX,EAAW,IACpB,GAAIjS,IAAiBnF,EAAarwC,EAAO46C,cAEzC,GAAIxF,IAAa/E,EAAarwC,EAAO46C,cAEpD7qH,EAAM,CACN,GAAIiwE,EAAO8pF,kBAAkB/5J,GACzB,KAAUpG,OAAM,2BAA6BoG,EAAO,sBAExDiwE,GAAO8pF,kBAAkB/5J,GAAQ0nI,EAErCA,EAAa0b,UAAYx3J,EACzBkpI,EAAKl8H,KAAK8uI,GACVz3D,EAAO2gF,WAAWlpB,GAGtBg2B,EAAc5sK,KAAK42I,cAAgB5S,EAAK,GAC5ChkI,KAAK42I,aAAeg2B,EAChBnd,EACAzvJ,KAAKoiI,MAAQwqC,EAEb5sK,KAAKmiI,MAAQyqC,GAGrB1oE,YAAa,WAAA,GAEAppG,GACDugJ,EAFJ1f,EAAS37H,KAAK27H,MAClB,KAAS7gI,EAAI,EAAGA,EAAI6gI,EAAO/jI,OAAQkD,IAE/B,GADIugJ,EAAgB1f,EAAO7gI,IACtBmI,GAAQo4I,EAAcn8I,MACnB+hJ,GACAuB,KAEJ,OAAO,CAGf,QAAO,GAEXgnB,gBAAiB,SAAUvI,GAAV,GAYJnmK,GACD00H,EACA+6C,EAEIr7J,EACA29J,EAOA9uH,EAKA2yF,EAMAlJ,EAYRolC,EA9CAztF,EAASn/E,KACT8sK,EAAU9sK,KAAKkpK,sBACf6D,EAAeD,EAAQnuH,QACvBi8D,KAAiB1kG,OAAOlW,KAAKI,QAAQonI,WACrCioB,EAAazvJ,KAAKyvJ,WAClBvR,GAAgBtiH,UAAW6zH,GAC3BzrB,IAKJ,KAJIhkI,KAAKmpK,WACLjrB,EAAY7uB,kBAAmB,EAC/B6uB,EAAYhd,QAAWn4H,OAAQ,OAE1BjO,EAAI,EAAGA,EAAI8/G,EAAYhjH,OAAQkD,IAGpC,GAFI00H,EAAc5U,EAAY9/G,GAC1ByvK,EAAWprF,EAAOqiF,SAAShyC,EAAYxnD,MACvC/kE,GAAQsnK,EAAUtJ,GAAQ,CAqB1B,GApBI/xJ,EAAOsgH,EAAYtgH,KACnB29J,EAAmBtxB,EAAiB/rB,EAAYtwH,KAAM4kJ,KACtD9xI,IAAK,GACLtZ,IAAK,IAELsZ,IAAK,EACLtZ,IAAK,GAELqlD,EAAQ+uH,EAAQnuH,MAAMzvC,IAAS69J,GAAgBF,EACzC,IAAN/xK,GAAWijD,GAASgvH,IACpBhvH,EAAM/rC,IAAMpT,KAAKoT,IAAI+rC,EAAM/rC,IAAK+6J,EAAa/6J,KAC7C+rC,EAAMrlD,IAAMkG,KAAKlG,IAAIqlD,EAAMrlD,IAAKq0K,EAAar0K,MAE7Cg4I,EAAW,OAEXA,EADA6K,EAAiB/rB,EAAYtwH,KAAM4kJ,IACxBviI,EAAQyzG,gBAERzzG,EAAQszG,YAEnB2S,EAAY,GAAIkJ,GAAS3yF,EAAM/rC,IAAK+rC,EAAMrlD,IAAKkC,MAAesjJ,EAAa1uB,GAAcrwC,EAAO46C,cAChG7qH,EAAM,CACN,GAAIiwE,EAAOwyE,eAAeziJ,GACtB,KAAUpG,OAAM,wBAA0BoG,EAAO,sBAErDiwE,GAAOwyE,eAAeziJ,GAAQs4H,EAElCA,EAAU8qB,UAAYx3J,EACtBkpI,EAAKl8H,KAAK0/H,GACVroD,EAAO2gF,WAAWt4B,GAGtBolC,EAAc5sK,KAAKwnI,WAAaxD,EAAK,GACzChkI,KAAKwnI,UAAYolC,EACbnd,EACAzvJ,KAAKmiI,MAAQyqC,EAEb5sK,KAAKoiI,MAAQwqC,GAGrB1F,eAAgB,SAAUjxC,EAAOhuH,EAAG+kK,GAApB,GASR7M,GACKrlK,EACD24B,EAVJ8gI,EAASt+B,EAAMg3C,kBAAkBhlK,GACjCogF,EAAQ,GAAIvC,IAAMyuE,EAAOthI,EAAGshI,EAAOljJ,GACnC22D,EAAOhoE,KAAKktK,UAAU7kF,GACtBu+C,KACA10H,IACJ,IAAK81D,EAAL,CAIA,IADIm4F,EAAUn4F,EAAKg8D,KACVlpI,EAAI,EAAGA,EAAIqlK,EAAQvoK,OAAQkD,IAC5B24B,EAAO0sI,EAAQrlK,GACf24B,EAAK24G,SACLuP,EAAgBzpI,EAAQuhB,EAAK24G,SAAS/jD,IAEtCszD,EAAgB/U,EAAYnzG,EAAKu0G,YAAY3/C,GAG3B,KAAtBu+C,EAAWhvI,QACX+jJ,EAAgB/U,EAAY5mI,KAAK42I,aAAa5O,YAAY3/C,IAE1Du+C,EAAWhvI,OAAS,GAAKsa,EAAOta,OAAS,GACzCq+H,EAAMjuH,QAAQglK,GACVj1K,QAAS8qF,GAAa56E,GACtBqY,cAAerY,EACf2zH,SAAUggB,EAAkBhV,GAC5BhpI,MAAOg+I,EAAkB1pI,OAIrCg7J,UAAW,SAAU7kF,GAAV,GAEEvtF,GACDkmK,EAFJC,EAAQjhK,KAAKihK,KACjB,KAASnmK,EAAI,EAAGA,EAAImmK,EAAMrpK,OAAQkD,IAE9B,GADIkmK,EAAcC,EAAMnmK,GACpBkmK,EAAYxkC,WAAWttB,cAAc7mB,GACrC,MAAO24E,IAInBmM,kBAAmB,SAAU15I,EAAMrzB,GAC/B,GAAIgtK,MAAgDl3J,OAAlCud,YAAgB8gG,IAAyBv0H,KAAKI,QAAQw2I,aAA0B52I,KAAKI,QAAQonI,UAC/G5sI,IAAWwyK,EAAY35I,EAAK6+H,WAAYlyJ,MAQhDupH,GAAkBg+B,IACd/Q,cAAgBhQ,eAChBY,eAEJ5sI,GAAW+sJ,GAAoB5gJ,UAAWmgJ,IACtCU,GAAY/wJ,EAAM6J,QAClBC,KAAM,WACFX,KAAKqtK,YAETvnJ,QAAS,WACL9lB,KAAKqtK,YAETrzK,KAAM,SAAUyuF,GAAV,GAIO3tF,GACDutF,EAJJlJ,EAASn/E,KACTstK,KAAiBp3J,OAAOuyE,EAE5B,KADAzoF,KAAKc,OACIhG,EAAI,EAAGA,EAAIwyK,EAAY11K,OAAQkD,IAChCutF,EAAQilF,EAAYxyK,GACpButF,GAASA,EAAMizC,iBAAmBjzC,EAAM8yC,iBACxCh8C,EAAOouF,qBAAqBllF,GAAO,GACnClJ,EAAOkuF,QAAQvlK,KAAKugF,KAIhCklF,qBAAsB,SAAUllF,EAAOruF,GAAjB,GAGV8mI,GAFJ0sC,GAAiBnlF,EAAMjoF,QAAQg7H,eAAiBj7G,MAChDqtJ,IACI1sC,GACAlF,SAAUvzC,EAAMuzC,SAChBD,OAAQtzC,EAAMszC,OACdl1G,SAAU4hE,EAAM5hE,SAChB7oB,MAAOyqF,EAAMzqF,MACbs0J,WAAY7pE,EAAM6pE,WAClB/tJ,eAAgBA,EAChBg+F,OAAQ9Z,EAAMyrE,kBACd95J,KAAMA,GAEVwzK,EAAc1sC,GACTA,EAAU55H,mBACXmhF,EAAMizC,gBAAgBthI,IAG1BquF,EAAMizC,gBAAgBthI,IAG9B8G,KAAM,WAGF,IAHE,GACEq+E,GAASn/E,KACTyoF,EAASzoF,KAAKqtK,QACX5kF,EAAO7wF,QACVunF,EAAOouF,qBAAqB9kF,EAAO18D,OAAO,IAGlD0hJ,cAAe,SAAU11K,GAAV,GAEF+C,GACDutF,EAFJI,EAASzoF,KAAKqtK,OAClB,KAASvyK,EAAI,EAAGA,EAAI2tF,EAAO7wF,OAAQkD,IAE/B,GADIutF,EAAQI,EAAO3tF,GACf/C,IAAYswF,EACZ,OAAO,CAGf,QAAO,KAyBXw/D,GAAWhxJ,EAAM6J,QACjBC,KAAM,SAAUmjI,EAAU1jI,GACtBJ,KAAK8jI,SAAWA,EAChB9jI,KAAKI,QAAUxF,MAAeoF,KAAKI,QAASA,IAEhD6O,MAAO,SAAUhH,GAEb,MADAjI,MAAK0tK,QAAU1xB,EAAU/zI,EAAGjI,KAAKI,QAAQrB,MAG7CgsB,KAAM,SAAU9iB,GACZ,GAAIjI,KAAK0tK,QAAS,CACd,GAAIrxB,GAAar8I,KAAKq8I,WAAar8I,KAAK2tK,SAAS1lK,EAAGkpH,IAAGj7G,OAAOlW,KAAK2tK,SAAS1lK,EAAGqJ,IAC/E,IAAI+qI,EAAWzkJ,OAEX,MADAoI,MAAKq8I,WAAaA,EACXD,EAAkBC,KAIrC1kJ,IAAK,WACD,GAAI0qK,GAASriK,KAAK0tK,OAElB,OADA1tK,MAAK0tK,SAAU,EACRrL,GAEX75B,IAAK,WAAA,GAKY7qI,GACDogD,EALR6gC,EAAM5+E,KACN8jI,EAAWllD,EAAIklD,SACfuY,EAAaz9D,EAAIy9D,UACrB,IAAIA,EAAWzkJ,OAAQ,CACnB,IAAS+F,EAAM,EAAGA,EAAM0+I,EAAWzkJ,OAAQ+F,IACnCogD,EAAQs+F,EAAW1+I,GACvBmmI,EAASqpC,kBAAkBpvH,EAAMtqB,KAAMsqB,EAAMA,MAEjD+lF,GAASq/B,OAAOr/B,EAASm9B,SAGjCn7I,QAAS,iBACE9lB,MAAK8jI,UAEhB6pC,SAAU,SAAU1lK,EAAG05B,GAAb,GAMEqiG,GACKrmI,EACD81B,EAEIsqB,EATZ+lF,EAAW9jI,KAAK8jI,SAChBzwG,GAASprB,EAAE05B,GAAUtO,MACrBu6I,GAAQ5tK,KAAKI,QAAQwtK,MAAQ,IAAI9wK,cACjC+wK,IACJ,IAAc,IAAVx6I,IAAgBu6I,GAAQ,IAAI9wK,gBAAkB6kC,EAE9C,IADIqiG,EAAOF,EAASE,KACXrmI,EAAM,EAAGA,EAAMqmI,EAAKpsI,OAAQ+F,IAC7B81B,EAAOuwG,EAAKrmI,IACZgkC,IAAawvF,KAAM19F,EAAKrzB,QAAQw7B,UAAY+F,IAAarwB,IAAKmiB,EAAKrzB,QAAQw7B,YACvEmiB,EAAQtqB,EAAK+0G,IAAIn1G,GACjB0qB,IACAA,EAAMsoF,YAAa,EACnBwnC,EAAY/lK,MACR2rB,KAAMA,EACNsqB,MAAOA,KAM3B,OAAO8vH,MAGfhmB,GAAS9gJ,UAAU3G,SACfrB,IAAK,OACL6uK,KAAM,QAEN9lB,GAAgBjxJ,EAAM6J,QACtBC,KAAM,SAAUs1H,EAAO71H,GACnBJ,KAAKi2H,MAAQA,EACbj2H,KAAKI,QAAUxF,MAAeoF,KAAKI,QAASA,GAC5CJ,KAAK0X,iBAETA,cAAe,WAAA,GAGPo2J,GAFAC,EAAU/tK,KAAKguK,SAAWzwK,SAASma,cAAc,MACrDq2J,GAAQ9vK,UAAY,YAChB6vK,EAAevwK,SAASma,cAAc,OAC1Co2J,EAAa7vK,UAAY,kBACzB8vK,EAAQj2J,YAAYg2J,IAExBG,cAAe,WACPjuK,KAAKguK,SAASxvJ,YACdxe,KAAKguK,SAASxvJ,WAAWxG,YAAYhY,KAAKguK,WAGlDE,UAAW,SAAU5wK,GACjBsmF,GAAc5jF,KAAKguK,SAAU1wK,IAEjC2R,MAAO,SAAUhH,GAAV,GAEKguH,GACA5tC,EACA8lF,EAEIha,EACA/0J,CANZ,UAAI48I,EAAU/zI,EAAGjI,KAAKI,QAAQrB,OACtBk3H,EAAQj2H,KAAKi2H,MACb5tC,EAAQ4tC,EAAMg3C,kBAAkBhlK,GAChCkmK,EAAWnuK,KAAKouK,UAAYn4C,EAAM01B,UAAUsb,YAAY5+E,GACxD8lF,GAAYA,EAASha,cACjBA,EAAUga,EAASha,UAAUh4J,QAC7BiD,EAASY,KAAK85G,iBAClBq6C,EAAQp3H,UAAU39B,EAAOzG,KAAMyG,EAAOE,KACtCU,KAAKquK,iBAAmBla,EACxB52J,SAASsa,KAAKC,YAAY9X,KAAKguK,UAC/BhuK,KAAKkuK,WACDv1K,KAAMsP,EAAE00D,MAAQ,EAChBr9D,IAAK2I,EAAE20D,MAAQ,EACf3jE,MAAO,EACPC,OAAQ,KAEL,IAKnB4gH,eAAgB,WAAA,GACRygB,GAAev6H,KAAKi2H,MAAMl+H,QAC1B6mF,EAAMgF,GAAc22C,GACpB,cACA,eAEAhlC,EAAc3W,EAAI2W,YAClBwkB,EAAan7B,EAAIm7B,WACjB36G,EAASmiB,EAAQgyD,cAAcgnD,EACnC,QACI5hI,KAAM48F,EAAcn2F,EAAOzG,KAC3B2G,IAAKy6G,EAAa36G,EAAOE,MAGjCyrB,KAAM,SAAU9iB,GACZ,GAAIkmK,GAAWnuK,KAAKouK,SAChBD,IACAnuK,KAAKkuK,UAAUluK,KAAKsuK,mBAAmBrmK,KAG/CtQ,IAAK,SAAUsQ,GAAV,GAGOsmK,GACAC,EAGAv/J,EAIAtX,EAVJw2K,EAAWnuK,KAAKouK,SACpB,IAAID,EAgBA,MAfII,GAAmBvuK,KAAK85G,iBACxB00D,EAAoBxuK,KAAKsuK,mBAAmBrmK,GAChDumK,EAAkB71K,MAAQ41K,EAAiB51K,KAC3C61K,EAAkBlvK,KAAOivK,EAAiBjvK,IACtC2P,GACAgkB,EAAGu7I,EAAkB71K,KACrB0Y,EAAGm9J,EAAkBlvK,KAErB3H,GACAs7B,EAAGu7I,EAAkB71K,KAAO61K,EAAkBv1K,MAC9CoY,EAAGm9J,EAAkBlvK,IAAMkvK,EAAkBt1K,QAEjD8G,KAAKyuK,kBAAkBx/J,EAAOtX,GAC9BqI,KAAKiuK,sBACEjuK,MAAKouK,UACLhyB,EAAkBp8I,KAAKq8I,aAGtC3hJ,KAAM,WAAA,GAGMopI,GACKnmI,EACD2+I,EAJRD,EAAar8I,KAAKq8I,UACtB,IAAIA,GAAcA,EAAWzkJ,OAAQ,CAEjC,IADIksI,EAAW9jI,KAAKi2H,MAAM01B,UACjBhuJ,EAAM,EAAGA,EAAM0+I,EAAWzkJ,OAAQ+F,IACnC2+I,EAAYD,EAAW1+I,GAC3BmmI,EAASqpC,kBAAkB7wB,EAAU7oH,KAAM6oH,EAAUv+F,MAEzD+lF,GAASq/B,OAAOr/B,EAASm9B,SAGjCn7I,QAAS,WACL9lB,KAAKiuK,sBACEjuK,MAAKguK,eACLhuK,MAAKi2H,OAEhBw4C,kBAAmB,SAAUx/J,EAAOtX,GAAjB,GAINgG,GACD81B,EACAmI,EAEImiB,EAPR6vH,GAAQ5tK,KAAKI,QAAQwtK,MAAQ,IAAI9wK,cACjCu/I,KACArY,EAAOhkI,KAAKouK,UAAUpqC,IAC1B,KAASrmI,EAAM,EAAGA,EAAMqmI,EAAKpsI,OAAQ+F,IAC7B81B,EAAOuwG,EAAKrmI,GACZi+B,EAAWnI,EAAKrzB,QAAQw7B,SACtBgyI,IAASz8C,KAAMv1F,GAAegyI,IAASt8J,IAAKsqB,IAC1CmiB,EAAQtqB,EAAKg1G,YAAYx5H,EAAOtX,GAChComD,GACAs+F,EAAWv0I,MACP2rB,KAAMA,EACNsqB,MAAOA,IAKvB/9C,MAAKq8I,WAAaA,GAEtBiyB,mBAAoB,SAAUrmK,GAAV,GACZksJ,GAAUn0J,KAAKquK,iBACfl1G,GACAlmC,EAAGhrB,EAAEgrB,EAAEkmC,cACP9nD,EAAGpJ,EAAEoJ,EAAE8nD,eAEPwD,EAAQ10D,EAAEgrB,EAAEvX,SACZkhD,EAAQ30D,EAAEoJ,EAAEqK,SACZkyJ,GAAQ5tK,KAAKI,QAAQwtK,MAAQ,IAAI9wK,cACjCnE,EAAOiG,KAAKoT,IAAImnD,EAAclmC,EAAG0pC,GACjCr9D,EAAMV,KAAKoT,IAAImnD,EAAc9nD,EAAGurD,GAChC3jE,EAAQ2F,KAAKC,IAAIs6D,EAAclmC,EAAI0pC,GACnCzjE,EAAS0F,KAAKC,IAAIs6D,EAAc9nD,EAAIurD,EAqBxC,OApBIgxG,KAASz8C,KACTx4H,EAAOw7J,EAAQt9F,GACf59D,EAAQk7J,EAAQl7J,SAEhB20K,IAASt8J,KACThS,EAAM60J,EAAQr9F,GACd59D,EAASi7J,EAAQj7J,UAEjByjE,EAAQw3F,EAAQp9F,KAChB99D,EAAQk7J,EAAQp9F,GAAKoC,EAAclmC,GAEnC0pC,EAAQw3F,EAAQt9F,KAChB59D,EAAQkgE,EAAclmC,EAAIkhI,EAAQt9F,IAElC+F,EAAQu3F,EAAQn9F,KAChB99D,EAASi7J,EAAQn9F,GAAKmC,EAAc9nD,GAEpCurD,EAAQu3F,EAAQr9F,KAChB59D,EAASigE,EAAc9nD,EAAI8iJ,EAAQr9F,KAGnCn+D,KAAMiG,KAAKlG,IAAIC,EAAMw7J,EAAQt9F,IAC7Bv3D,IAAKV,KAAKlG,IAAI4G,EAAK60J,EAAQr9F,IAC3B79D,MAAOA,EACPC,OAAQA,MAIpB4uJ,GAAc/gJ,UAAU3G,SACpBrB,IAAK,QACL6uK,KAAM,QAEN7lB,GAAiBlxJ,EAAM6J,QACvBC,KAAM,SAAUs1H,EAAO71H,GACnBJ,KAAKi2H,MAAQA,EACbj2H,KAAKI,QAAUxF,MAAeoF,KAAKI,QAASA,IAEhDsuK,aAAc,SAAUr7I,GAAV,GAID11B,GACD81B,EACAmI,EAEImiB,EAPR6vH,GAAQ5tK,KAAKI,QAAQwtK,MAAQ,IAAI9wK,cACjCu/I,KACArY,EAAOhkI,KAAKi2H,MAAM01B,UAAU3nB,IAChC,KAASrmI,EAAM,EAAGA,EAAMqmI,EAAKpsI,OAAQ+F,IAC7B81B,EAAOuwG,EAAKrmI,GACZi+B,EAAWnI,EAAKrzB,QAAQw7B,SACtBgyI,IAASz8C,KAAMv1F,GAAegyI,IAASt8J,IAAKsqB,IAC1CmiB,EAAQtqB,EAAKy0G,WAAW70G,GACxB0qB,GACAs+F,EAAWv0I,MACP2rB,KAAMA,EACNsqB,MAAOA,IAMvB,OADA/9C,MAAKq8I,WAAaA,EACXD,EAAkBC,IAE7B3hJ,KAAM,WAAA,GAGMopI,GACKnmI,EACD2+I,EAJRD,EAAar8I,KAAKq8I,UACtB,IAAIA,GAAcA,EAAWzkJ,OAAQ,CAEjC,IADIksI,EAAW9jI,KAAKi2H,MAAM01B,UACjBhuJ,EAAM,EAAGA,EAAM0+I,EAAWzkJ,OAAQ+F,IACnC2+I,EAAYD,EAAW1+I,GAC3BmmI,EAASqpC,kBAAkB7wB,EAAU7oH,KAAM6oH,EAAUv+F,MAEzD+lF,GAASq/B,OAAOr/B,EAASm9B,SAGjCn7I,QAAS,iBACE9lB,MAAKi2H,SAGhB+xB,GAAe50B,GAAa1yH,QAC5BC,KAAM,SAAUP,EAAS25H,GACrB3G,GAAanvH,GAAGtD,KAAKwH,KAAKnI,KAAMI,GAChCJ,KAAK+5H,aAAeA,GAExBxxH,OAAQ,WAAA,GAUK5K,GACDgxK,EAVJ/vF,EAAM5+E,KACNrF,EAAWikF,EAAIjkF,SACfyF,EAAUw+E,EAAIx+E,QACdw7B,EAAWx7B,EAAQw7B,QAMvB,KALA57B,KAAKmiG,OAAS,GAAI3gF,IAAQ+zC,OAAO,MAC7B2gD,QAASt6E,EAAW,EAAIx7B,EAAQ81G,QAChCE,YAAax6E,EAAWx7B,EAAQ81G,QAAU,EAC1CC,YAAav6E,EAAW,WAAa,eAEhCj+B,EAAM,EAAGA,EAAMhD,EAAS/C,OAAQ+F,IACjCgxK,EAAah0K,EAASgD,GAC1BgxK,EAAWh4D,OAAO,GAAIuT,KACtBykD,EAAWz0C,gBAGnBvjB,OAAQ,SAAUvzE,GACdpjC,KAAKmiG,OAAO1jC,KAAKr7B,EAAI40F,UACrBh4H,KAAKmiG,OAAOwU,QACZ,IAAIzsB,GAAOlqF,KAAKmiG,OAAOhX,aAEnBnrF,MAAKojC,IADL8mD,EACW3oE,EAAQipG,UAAUtgC,GAElB,GAAIggC,KAGvBgQ,aAAc,WACVl6H,KAAKo6H,aAETD,aAAc,eAGd8tB,GAAa50B,GAAW3yH,QACxBC,KAAM,SAAUP,GACZizH,GAAWpvH,GAAGtD,KAAKwH,KAAKnI,KAAMI,GAC9BJ,KAAK4uK,kBACL5uK,KAAKqzJ,eACLrzJ,KAAKw4J,eAEToW,gBAAiB,WACb5uK,KAAK2nB,UAAY,GAAIpG,GAAQoyG,cACzB/3F,UAAU,EACV9iC,MAAM,EACNyyF,MAAOvgB,IAEXhrE,KAAK8jC,OAAO9jC,KAAK2nB,YAErB0rI,aAAc,WACVrzJ,KAAK2nB,UAAUmc,OAAO,GAAIwvF,IAAatzH,KAAK6uK,mBAEhDA,cAAe,WAAA,GACPzuK,GAAUJ,KAAKI,QACf8hK,EAAc9hK,EAAQ8hK,WAC1B,OAAOtnK,OAAewF,EAAQy0I,SAC1B71C,WAAYkjE,EACZ7lC,QAAUpoD,MAAOiuF,MAGzB1J,YAAa,WAAA,GACLp4J,GAAUJ,KAAKI,QACf2hI,EAAennI,MAAewF,EAAQ8gI,OAC1ClhI,MAAK2nB,UAAUmc,OAAO,GAAIgwF,IAAQ1zH,EAAQg1B,KAAM2sG,KAEpDzH,eAAgB,WAAA,GAER1e,GACAkzD,CAFJz7C,IAAWpvH,GAAGq2H,eAAenyH,KAAKnI,MAC9B47G,EAAS57G,KAAKI,QAAQw7G,WACtBkzD,EAAY9uK,KAAK+uK,aAAejyE,GAAKkF,SAAShiG,KAAK2nB,UAAUyb,IAAI40F,UACjEj7B,MACI9oB,MAAOq9C,GACPptF,QAAS,GAEb84D,OAAQ,KACR4e,OAAQA,EAAO9hH,OAAS8hH,IAE5B57G,KAAKw6H,aAAas0C,IAEtB9tJ,MAAO,SAAUhe,EAAQiF,GACrB,GAAIqgB,GAAOtoB,KAAK8gI,UAAU74H,EACrBjF,GAAOgF,QAAQ86I,GAAmBx6H,IACnCrgB,EAAE9D,kBAGV48H,MAAO,SAAU/9H,EAAQiF,GACrB,GAAIqgB,GAAOtoB,KAAK8gI,UAAU74H,EAK1B,OAJKjF,GAAOgF,QAAQ+6I,GAAmBz6H,KACnCrgB,EAAE9D,iBACFnB,EAAOgsK,iBAAiB1mJ,EAAKu+I,YAAav+I,EAAK2mJ,cAE5C,GAEXjuC,MAAO,SAAUh+H,GACbA,EAAOi+H,qBAEXH,UAAW,SAAU74H,GACjB,GAAI7H,GAAUJ,KAAKI,OACnB,QACIrI,QAAS8qF,GAAa56E,GACtBmtB,KAAMh1B,EAAQg1B,KACdumG,OAAQv7H,EAAQu7H,OAChBkrC,YAAazmK,EAAQu7H,OAAOxpH,MAC5B88J,WAAY7uK,EAAQ6uK,aAG5B/0C,aAAc,WAAA,GACN/6C,GAASn/E,KACTI,EAAUJ,KAAKI,QACfo7H,EAAep7H,EAAQ+hG,MACvBq5B,IACAx7H,KAAKmiG,OAASq5B,GACV6mC,OAAQjiK,EAAQiiK,OAChB1mC,OAAQv7H,EAAQu7H,OAChBzzH,OAAQlI,KAAK45H,YACbq1C,WAAY7uK,EAAQ6uK,WACpB7uK,SACIy0I,QAAS70I,KAAK6uK,gBACd3tC,OAAQ9gI,EAAQ8gI,QAEpB/G,aAAc,WACVh7C,EAAOg7C,eACPh7C,EAAOi8B,iBACPj8B,EAAOm7C,gBACP,IAAIuG,GAAgB1hD,EAAOgjB,MAE3B,cADOhjB,GAAOgjB,OACP0+B,KAGf7gI,KAAKo6H,aAEL/G,GAAWpvH,GAAGi2H,aAAa/xH,KAAKnI,SAIxCkoJ,GAAa,aACbC,GAAU,UACVC,GAAS,SACTC,GAASj1B,GAAa1yH,QACtBC,KAAM,SAAUP,EAAS25H,GACrB3G,GAAanvH,GAAGtD,KAAKwH,KAAKnI,KAAMI,GAChCJ,KAAK+5H,aAAeA,EACf92H,GAAQjD,KAAKI,QAAQuhC,UAClBspC,EACA7oD,GACA8oD,EACAhpD,EACAkmI,OAEJpoJ,KAAKI,QAAQuhC,SAAWvf,IAE5BpiB,KAAK4uK,kBACL5uK,KAAKkvK,eAETN,gBAAiB,WAAA,GACTxuK,GAAUJ,KAAKI,QACfuhC,EAAWvhC,EAAQuhC,SACnBwtI,EAAY/uK,EAAQmrF,MACpBA,EAAQ5pD,EACRgqD,EAAS3gB,CACTrpC,KAAaymH,GACb78D,EAAQrpE,EACDjf,GAAQ0+B,GACXspC,EACAC,KAGAqgB,EADc,UAAd4jF,EACQjtJ,EACa,QAAditJ,EACC/sJ,GAEA4oD,EAEZ2gB,EAAShqD,GACFwtI,IACW,UAAdA,EACAxjF,EAAS1gB,EACY,QAAdkkG,IACPxjF,EAASzgB,IAGjBlrE,KAAK2nB,UAAY,GAAI0rG,KACjBvwF,OAAQ1iC,EAAQ0iC,OAChB4xD,QAASt0F,EAAQs0F,QACjBsK,WAAY5+F,EAAQ4+F,WACpBq9B,OAAQj8H,EAAQi8H,OAChB1wC,OAAQA,EACRJ,MAAOA,EACP5nD,OAAQvjC,EAAQujC,OAChBu4F,aAAa,IAEjBl8H,KAAK8jC,OAAO9jC,KAAK2nB,YAErBunJ,YAAa,WAAA,GAYLx7J,GACK5Y,EACD43C,EAbJqnF,EAAe/5H,KAAK85H,aACpB15H,EAAUJ,KAAKI,QACfw7B,EAAW57B,KAAKutF,aAChB6hF,EAAe,GAAIpnB,KACnBpsH,SAAUA,EACVs6E,QAAS91G,EAAQ81G,SAClB6jB,GACCvzG,EAAQpmB,EAAQomB,KAKpB,KAJIpmB,EAAQE,UACRkmB,EAAQA,EAAMhgB,MAAM,GAAGlG,WAEvBoT,EAAQ8S,EAAM5uB,OACTkD,EAAI,EAAGA,EAAI4Y,EAAO5Y,IACnB43C,EAAOlsB,EAAM1rB,GACjBs0K,EAAatrI,OAAO,GAAImkH,IAAWrtJ,OAC/Bi6I,QAASz0I,EAAQy0I,QACjB3T,OAAQ9gI,EAAQ8gI,QACjB9gI,EAAQsyC,KAAMA,IAErB08H,GAAa7mK,SACbvI,KAAK2nB,UAAUmc,OAAOsrI,IAE1B7hF,WAAY,WAAA,GACJ3O,GAAM5+E,KAAKI,QACX+1G,EAAcv3B,EAAIu3B,YAClBx0E,EAAWi9C,EAAIj9C,SACf/F,EAAW+F,IAAaymH,IAAUjyC,IAAgB+xC,KAAexmE,GAAQy0B,GAAeA,IAAgB+xC,GAAajlJ,GAAQ0+B,GAC7Hzf,EACAE,KAEJ,OAAOwZ,IAEXyzI,SAAU,WACN,MAAOrvK,MAAK2nB,UAAUhtB,SAAS,GAAGA,SAAS/C,OAAS,GAExD++G,OAAQ,SAAUqgB,GAAV,GACA52H,GAAUJ,KAAKI,QACfkvK,EAAYt4C,EAAU76H,OAC1B,OAAK6D,MAAKqvK,gBAINjvK,EAAQuhC,WAAaymH,IACrBpoJ,KAAKuvK,sBAAsBD,GAC3BtvK,KAAKojC,IAAMksI,GAEXtvK,KAAKwvK,gBAAgBF,SAPrBtvK,KAAKojC,IAAMksI,IAUnBE,gBAAiB,SAAUx4C,GAAV,GAuBT5zF,GAtBAw7C,EAAM5+E,KACNI,EAAUw+E,EAAIx+E,QACdunB,EAAYi3D,EAAIj3D,UAChBga,EAAWvhC,EAAQuhC,SACnB1oC,EAAQmH,EAAQnH,MAChBC,EAASkH,EAAQlH,OACjB+1E,EAAMttC,IAAaspC,GAAOtpC,IAAaupC,EAASimD,GAAI7/G,GACpDsqB,EAAW57B,KAAKutF,aAChBkiF,EAAcz4C,EAAU76H,QACxBuzK,EAAe14C,EAAU76H,OACzBwlC,KAAazf,GAAQyf,IAAavf,KAClCstJ,EAAa54G,GAAK24G,EAAY34G,GAAK,GAEnCl7B,GAAY1iC,GACZw2K,EAAa14G,GAAK04G,EAAa54G,GAAK59D,EACpCw2K,EAAankF,MAAMkkF,EAAan+J,GAAGqW,EAAUvnB,QAAQurF,UAC7C/vD,GAAY3iC,IACpBy2K,EAAa34G,GAAK24G,EAAa74G,GAAK59D,EACpCy2K,EAAankF,MAAMkkF,EAAat+C,GAAGxpG,EAAUvnB,QAAQmrF,QAEzD5jE,EAAUgvF,OAAO+4D,GACjBA,EAAe/nJ,EAAUyb,IACrBA,EAAMssI,EAAavzK,SACnBiE,EAAQ8hE,SAAW9hE,EAAQ+hE,WAC3ButG,EAAa3yI,UAAU38B,EAAQ8hE,QAAS9hE,EAAQ+hE,SAChDniE,KAAK2nB,UAAUgvF,OAAO+4D,IAE1BtsI,EAAI6rC,EAAM,GAAK+nD,EAAU/nD,EAAM,GAC/B7rC,EAAI6rC,EAAM,GAAK+nD,EAAU/nD,EAAM,GAC/BjvE,KAAKojC,IAAMA,GAEfmsI,sBAAuB,SAAUv4C,GAAV,GACfp4C,GAAM5+E,KACNI,EAAUw+E,EAAIx+E,QACdunB,EAAYi3D,EAAIj3D,UAChBu6C,EAAU9hE,EAAQ8hE,QAClBC,EAAU/hE,EAAQ+hE,QAClBlpE,EAAQmH,EAAQnH,MAChBC,EAASkH,EAAQlH,OACjB0iC,EAAW57B,KAAKutF,aAChBmiF,EAAe14C,EAAU76H,OACzBy/B,IAAY1iC,EACZw2K,EAAa14G,GAAK04G,EAAa54G,GAAK59D,GAC5B0iC,GAAY3iC,IACpBy2K,EAAa34G,GAAK24G,EAAa74G,GAAK59D,GAExC0uB,EAAUgvF,OAAO+4D,GACjBA,EAAe/nJ,EAAUyb,IACzBzb,EAAUgvF,OAAO,GAAIuT,IAAIhoD,EAASC,EAASD,EAAUwtG,EAAaz2K,QAASkpE,EAAUutG,EAAax2K,YAEtGghI,aAAc,WACNl6H,KAAKqvK,YACLj8C,GAAanvH,GAAGi2H,aAAa/xH,KAAKnI,SAI9C2pH,GAAkB0+B,IACd1mH,SAAUvf,GACVoE,SACA06G,QAAUp+F,QAAUnqC,KAAM,IAC1BupE,QAAS,EACTC,QAAS,EACTr/B,OAAQomF,GAAW,GACnBx0B,QAASw0B,GAAW,GACpBmT,QACIpoD,MAAOs9C,GACPt4H,MAAO,GAEXy5C,MAAQkpE,OAAQusC,IAChBjyC,QAAS,EACTlX,WAAY,GACZr7D,OAAQ,EACRkxG,SACIxY,QAAUpjI,MAAO,GACjBA,MAAO,GACPC,OAAQ,EACRgG,KAAM,OACNqsF,MAAOrpE,EACPypE,OAAQ3gB,KAGZs9E,GAAkBzxJ,EAAM6J,QACxBC,KAAM,WACFX,KAAK2vK,cAETvnJ,SAAU,SAAUlpB,EAAMo8I,GACtBt7I,KAAK2vK,UAAU7nK,MACX5I,KAAMA,EACNo8I,YAAaA,KAGrB9sG,OAAQ,SAAUi8H,EAAWrqK,EAAS25H,GAA9B,GAGA4B,GACKh+H,EACD+iF,EAJJkvF,EAAW5vK,KAAK2vK,UAChBr3K,EAAQs3K,EAAS,EAErB,KAASjyK,EAAM,EAAGA,EAAMiyK,EAASh4K,OAAQ+F,IAGrC,GAFI+iF,EAAQkvF,EAASjyK,GACrBg+H,EAASyf,EAAmBqvB,EAAW/pF,EAAM46D,aACzC3f,EAAO/jI,OAAS,EAAG,CACnBU,EAAQooF,CACR,OAGR,MAAO,IAAIpoF,GAAM4G,KAAKy8H,EAAQv7H,EAAS25H,MAG/CuuB,GAAgB38I,QAAU,GAAI28I,IAC1BC,GAAoB,EACpBC,GAAyB,GAezBC,GAAY5xJ,EAAM6J,QAClBC,KAAM,SAAUs1H,EAAO2gB,EAAcx2I,EAASwrG,GAC1C,GAAI2uB,GAAetE,EAAMl+H,OACzBiI,MAAKI,QAAUxF,MAAeoF,KAAKI,QAASA,GAC5CJ,KAAKi2H,MAAQA,EACbj2H,KAAK4rG,SAAWA,EAChB5rG,KAAKu6H,aAAeA,EACpBv6H,KAAK42I,aAAeA,EACpB52I,KAAK6vK,UAAY7vK,KAAK42I,uBAAwBjiB,IAC9C30H,KAAK8vK,cACD9vK,KAAKI,QAAQoD,UACbxD,KAAK+vK,iBACL/vK,KAAK0jB,IAAI1jB,KAAKgwK,OAAOhwK,KAAKI,QAAQ4sB,MAAOhtB,KAAKgwK,OAAOhwK,KAAKI,QAAQ6sB,KAClEjtB,KAAKwjF,eAGbusF,eAAgB,WAAA,GAURt7I,GAOAw7I,EACAC,EAMAC,EAKAC,EACAC,EA7BAjwK,EAAUJ,KAAKI,QACf/G,EAAU2G,KAAK3G,QAAUkjJ,EAAU,aACvC34D,IAAcvqF,GACViG,IAAKc,EAAQhB,OAAOE,IACpB3G,KAAMyH,EAAQhB,OAAOzG,KACrBM,MAAOmH,EAAQnH,MACfC,OAAQkH,EAAQlH,OAChBqhC,UAAW,QAEX9F,EAAYz0B,KAAKy0B,UAAY8nH,EAAU,eAC3Cv8I,KAAKswK,SAAW/zB,EAAU,UAC1Bv8I,KAAKuwK,UAAYh0B,EAAU,UAC3BljJ,EAAQye,YAAY9X,KAAKswK,UACzBj3K,EAAQye,YAAY9X,KAAKuwK,WACzBl3K,EAAQye,YAAY2c,GACpBA,EAAU3c,YAAYykI,EAAU,mBAC5B0zB,EAAajwK,KAAKiwK,WAAa1zB,EAAU,0BACzC2zB,EAAclwK,KAAKkwK,YAAc3zB,EAAU,2BAC/C0zB,EAAWn4J,YAAYykI,KACvB2zB,EAAYp4J,YAAYykI,KACxB9nH,EAAU3c,YAAYm4J,GACtBx7I,EAAU3c,YAAYo4J,GACtBlwK,KAAKu6H,aAAaziH,YAAYze,GAC1B82K,EAAkBvsF,GAAcnvD,GAChC,kBACA,mBACA,WAEA27I,EAAmBxsF,GAAcqsF,EAAY,UAAU/2K,OACvDm3K,EAAoBzsF,GAAcssF,EAAa,UAAUh3K,OAC7DkH,EAAQq0B,WACJ4nG,QACI1jI,KAAMw3K,EAAgBK,gBACtB53K,MAAOu3K,EAAgBM,mBAG/B7sF,GAAcqsF,GAAc3wK,KAAM6wK,EAAgBj3K,OAASk3K,GAAoB,IAC/ExsF,GAAcssF,GAAe5wK,KAAM6wK,EAAgBj3K,OAASm3K,GAAqB,IACjFh3K,EAAQS,MAAM6d,QAAUte,EAAQS,MAAM6d,SAE1C6rE,WAAY,WACRxjF,KAAK0wK,mBAAqB1wK,KAAKI,QAAQuwK,cAAe,EAAQ3wK,KAAK4wK,YAAYxpK,KAAKpH,MAAQ0qB,CAC5F,IAAI5rB,EACJ0kF,IAAWxjF,KAAK3G,SAAUyF,KAAUA,EAAIqlJ,IAAcnkJ,KAAK0wK,mBAAoB5xK,IAC/EkB,KAAK6wK,WAAah+C,GAASF,iBAAiBnkF,OAAOxuC,KAAK3G,SACpD4V,MAAOjP,KAAKw6D,OAAOpzD,KAAKpH,MACxB+qB,KAAM/qB,KAAKu8D,MAAMn1D,KAAKpH,MACtBrI,IAAKqI,KAAKy8D,KAAKr1D,KAAKpH,MACpB8wK,IAAK9wK,KAAK+wK,KAAK3pK,KAAKpH,MACpBg6D,MAAOh6D,KAAK6/D,OAAOz4D,KAAKpH,MACxB8hE,aAAc9hE,KAAKgxK,cAAc5pK,KAAKpH,MACtCgiE,cAAehiE,KAAKixK,eAAe7pK,KAAKpH,MACxCkxK,WAAYlxK,KAAKmxK,YAAY/pK,KAAKpH,SAG1C8vK,YAAa,WAAA,GAcLj5D,GAIAthB,EACAwkB,EAlBAn7B,EAAM5+E,KACNI,EAAUw+E,EAAIx+E,QACdw2I,EAAeh4D,EAAIg4D,aACnBxzG,EAAMwzG,EAAa5uE,KAAKy3F,YACxB7xC,EAAc5tH,KAAKi2H,MAAM8D,aAAajE,IACtC91H,MAAK6vK,WACLj1K,GAAWwF,GACP4R,IAAK0E,GAAUk3G,EAAaxtH,EAAQ4R,KACpCtZ,IAAKge,GAAUk3G,EAAaxtH,EAAQ1H,KACpCs0B,KAAMtW,GAAUk3G,EAAaxtH,EAAQ4sB,MACrCC,GAAIvW,GAAUk3G,EAAaxtH,EAAQ6sB,MAGvC4pF,EAAQjzB,GAAc5jF,KAAKu6H,cAC3B,cACA,eAEAhlC,EAAcshB,EAAMthB,YACpBwkB,EAAalD,EAAMkD,WACvB/5G,KAAKI,QAAUxF,OACX3B,MAAOmqC,EAAInqC,QACXC,OAAQkqC,EAAIlqC,SAAWsvJ,GACvB9zD,SACI/7F,KAAM48F,EACNj2F,IAAKy6G,GAET36G,QACIzG,KAAMyqC,EAAIyzB,GAAK0+B,EACfj2F,IAAK8jC,EAAI0zB,GAAKijD,GAElB/sF,KAAM5sB,EAAQ4R,IACdib,GAAI7sB,EAAQ1H,KACb0H,IAEP0lB,QAAS,WAOL,GANI9lB,KAAK6wK,aACL7wK,KAAK6wK,WAAW/qJ,gBACT9lB,MAAK6wK,YAEhBjmJ,aAAa5qB,KAAKoxK,YAClBpxK,KAAKqxK,OAAS,KACVrxK,KAAK3G,QAAS,CACd,GAAIyF,EACJklF,IAAahkF,KAAK3G,SAAUyF,KAAUA,EAAIqlJ,IAAcnkJ,KAAK0wK,mBAAoB5xK,IACjFkB,KAAKu6H,aAAaviH,YAAYhY,KAAK3G,WAG3Ci4K,gBAAiB,SAAUvzH,GACvB,OACItqB,KAAMzzB,KAAK42I,aAAax2I,QACxB4sB,KAAMhtB,KAAKuxK,OAAOxzH,EAAM/wB,MACxBC,GAAIjtB,KAAKuxK,OAAOxzH,EAAM9wB,MAG9ButC,OAAQ,SAAUvyD,GAAV,GAeAqgB,GAdAloB,EAAUJ,KAAKI,QACfggB,EAASyiE,GAAa56E,IACtBjI,KAAKqxK,QAAWjxJ,IAGpBpgB,KAAKi2H,MAAMgL,oBACXjhI,KAAKqxK,QACDG,WAAYh1B,EAAcp8H,IAAWA,EACrC+4C,cAAelxD,EAAEgrB,EAAIhrB,EAAEgrB,EAAEvX,SAAW,EACpCqiC,OACI/wB,KAAMhtB,KAAKgwK,OAAO5vK,EAAQ4sB,MAC1BC,GAAIjtB,KAAKgwK,OAAO5vK,EAAQ6sB,MAG5B3E,EAAOtoB,KAAKsxK,iBACZtkJ,KAAMhtB,KAAKgwK,OAAO5vK,EAAQ4sB,MAC1BC,GAAIjtB,KAAKgwK,OAAO5vK,EAAQ6sB,MAExBjtB,KAAKgI,QAAQy7I,GAAcn7H,KAC3BtoB,KAAKqxK,OAAS,QAGtBxxG,OAAQ,SAAU53D,GACd,GAAIujB,EAEAA,GADAxrB,KAAKqxK,OACIrxK,KAAKqxK,OAAOG,WAEZh1B,EAAc35D,GAAa56E,IAEpCujB,GACAjK,EAAQjnB,SAASkxB,EAAQ,oBAGjC+wC,MAAO,SAAUt0D,GAAV,GAIC22E,GACAjsC,EACAvyC,EACAovH,EACAzxE,EACA39B,EACA9f,EACA0sB,EACAC,EACAjb,EACAtZ,EACA26B,EACAo+I,EAIAtmC,EACAzuG,EACAt9B,EAIA6wK,EACAC,CA1BClwK,MAAKqxK,SAGNzyF,EAAM5+E,KACN2yC,EAAQisC,EAAIyyF,OACZjxK,EAAUw+E,EAAIx+E,QACdovH,EAAc5wC,EAAIg4D,aAAax2I,QAC/B29C,EAAQpL,EAAMoL,MACd39B,EAASuyB,EAAM6+H,WACflxK,EAAUkvH,EAAYlvH,QACtB0sB,EAAOhtB,KAAKgwK,OAAO5vK,EAAQ4sB,MAC3BC,EAAKjtB,KAAKgwK,OAAO5vK,EAAQ6sB,IACzBjb,EAAMhS,KAAKgwK,OAAO5vK,EAAQ4R,KAC1BtZ,EAAMsH,KAAKgwK,OAAO5vK,EAAQ1H,KAC1B26B,EAAQsf,EAAMwmB,cAAgBlxD,EAAEgrB,EAAEvX,SAClC+1J,GACAzkJ,KAAM+wB,EAAM/wB,KACZC,GAAI8wB,EAAM9wB,IAEVk+G,EAAOptF,EAAM9wB,GAAK8wB,EAAM/wB,KACxB0P,EAAQknD,GAAc5jF,KAAK3G,QAAS,SAASJ,OAASu2H,EAAYoX,WAAWhvI,OAAS,GACtFwH,EAASR,KAAK6Q,MAAM4jB,EAAQqJ,IAAUp8B,KAAe,GACpD8f,IAGD6vJ,EAAa3mD,GAAWlpG,EAAQ,iBAChC8vJ,EAAc5mD,GAAWlpG,EAAQ,kBACjCkpG,GAAWlpG,EAAQ,+BACnB29B,EAAM/wB,KAAOpuB,KAAKoT,IAAIpT,KAAKlG,IAAIsZ,EAAKgb,EAAO5tB,GAAS1G,EAAMyyI,GAC1DptF,EAAM9wB,GAAKruB,KAAKoT,IAAI+rC,EAAM/wB,KAAOm+G,EAAMzyI,IAChCu3K,IAAe3vK,GAAW4vK,GAAe5vK,GAChDy9C,EAAM/wB,KAAOpuB,KAAKoT,IAAIpT,KAAKlG,IAAIsZ,EAAKgb,EAAO5tB,GAAS1G,EAAM,GAC1DqlD,EAAM9wB,GAAKruB,KAAKlG,IAAIqlD,EAAM/wB,KAAO,EAAG+wB,EAAM9wB,MACnCgjJ,GAAc3vK,GAAW4vK,IAAgB5vK,KAChDy9C,EAAM9wB,GAAKruB,KAAKoT,IAAIpT,KAAKlG,IAAIsZ,EAAM,EAAGib,EAAK7tB,GAAS1G,GACpDqlD,EAAM/wB,KAAOpuB,KAAKoT,IAAI+rC,EAAM9wB,GAAK,EAAG8wB,EAAM/wB,OAE1C+wB,EAAM/wB,OAASykJ,EAASzkJ,MAAQ+wB,EAAM9wB,KAAOwkJ,EAASxkJ,KACtDjtB,KAAK+qB,KAAKgzB,EAAM/wB,KAAM+wB,EAAM9wB,IAC5BjtB,KAAKgI,QAAQmwD,GAAQn4D,KAAKsxK,gBAAgBvzH,QAGlD0e,KAAM,WAAA,GAEM+0G,GAIAzzH,CALJ/9C,MAAKqxK,SACDG,EAAaxxK,KAAKqxK,OAAOG,WACzBA,GACAjwJ,EAAQ+jB,YAAYksI,EAAY,mBAEhCzzH,EAAQ/9C,KAAKqxK,OAAOtzH,MACxB/9C,KAAK0jB,IAAIq6B,EAAM/wB,KAAM+wB,EAAM9wB,IAC3BjtB,KAAKgI,QAAQ07I,GAAY1jJ,KAAKsxK,gBAAgBvzH,UACvC/9C,MAAKqxK,SAGpBN,KAAM,SAAU9oK,GAAV,GACE22E,GAAM5+E,KACNI,EAAUw+E,EAAIx+E,QACdw2I,EAAeh4D,EAAIg4D,aACnB2d,EAASv0J,KAAKi2H,MAAMg3C,kBAAkBhlK,GACtCuhI,EAAaoN,EAAa7O,mBAAmB,GAAIjiD,IAAMyuE,EAAOthI,EAAG2jH,EAAaxzG,IAAI0zB,KAClF9pC,EAAOhtB,KAAKgwK,OAAO5vK,EAAQ4sB,MAC3BC,EAAKjtB,KAAKgwK,OAAO5vK,EAAQ6sB,IACzBjb,EAAMhS,KAAKgwK,OAAO5vK,EAAQ4R,KAC1BtZ,EAAMsH,KAAKgwK,OAAO5vK,EAAQ1H,KAC1ByyI,EAAOl+G,EAAKD,EACZ6sI,EAAM7sI,EAAOm+G,EAAO,EACpBptF,KACA2zH,EAA+B,IAAlBzpK,EAAE0Q,MAAM2jD,MACrBl9D,EAASR,KAAK6Q,MAAMoqJ,EAAMrwB,EAC1BxpI,MAAKqxK,QAAUK,IAGnB1xK,KAAKi2H,MAAMgL,oBACN2V,EAAax2I,QAAQslI,WACtBtmI,IAEJ2+C,EAAM/wB,KAAOpuB,KAAKoT,IAAIpT,KAAKlG,IAAIsZ,EAAKgb,EAAO5tB,GAAS1G,EAAMyyI,GAC1DptF,EAAM9wB,GAAKruB,KAAKoT,IAAI+rC,EAAM/wB,KAAOm+G,EAAMzyI,GACvCsH,KAAKw6D,OAAOvyD,GACRjI,KAAKqxK,SACLrxK,KAAKqxK,OAAOtzH,MAAQA,EACpB/9C,KAAKgI,QAAQmwD,GAAQn4D,KAAKsxK,gBAAgBvzH,IAC1C/9C,KAAKy8D,UAGbm0G,YAAa,SAAU3oK,GAAV,GAKD81C,GAJJohC,EAASn/E,KACTqzB,EAAQ9R,EAAQmoG,gBAAgBzhH,EACpCjI,MAAKw6D,QAASp6C,OAAQpgB,KAAKy0B,YACvBz0B,KAAKqxK,SACDtzH,EAAQ/9C,KAAKqxK,OAAOtzH,MACxB91C,EAAE9D,iBACF8D,EAAEyiB,kBACE9rB,KAAKC,IAAIw0B,GAAS,IAClBA,GAASk1H,IAETvoJ,KAAKI,QAAQuwK,WAAWrwK,UACxB+yB,OAEArzB,KAAKgvG,OAAO37E,IACZrzB,KAAKgI,QAAQmwD,IACT1kC,KAAMzzB,KAAK42I,aAAax2I,QACxBizB,MAAOA,EACP/S,cAAerY,EACf+kB,KAAMhtB,KAAKuxK,OAAOxzH,EAAM/wB,MACxBC,GAAIjtB,KAAKuxK,OAAOxzH,EAAM9wB,MAG1BjtB,KAAKoxK,YACLxmJ,aAAa5qB,KAAKoxK,YAEtBpxK,KAAKoxK,WAAa1nJ,WAAW,WACzBy1D,EAAO1iB,QACR2nF,MAGX4sB,cAAe,SAAU/oK,GAAV,GAQPqgB,GAPAloB,EAAUJ,KAAKI,OACnBJ,MAAKqxK,QACDtzH,OACI/wB,KAAMhtB,KAAKgwK,OAAO5vK,EAAQ4sB,MAC1BC,GAAIjtB,KAAKgwK,OAAO5vK,EAAQ6sB,MAG5B3E,EAAOtoB,KAAKsxK,gBAAgBtxK,KAAKqxK,OAAOtzH,OACxC/9C,KAAKgI,QAAQy7I,GAAcn7H,GAC3BtoB,KAAKqxK,OAAS,KAEdppK,EAAE9D,kBAGVgtK,YAAa,WACLnxK,KAAKqxK,SACLrxK,KAAKgI,QAAQ07I,GAAY1jJ,KAAKsxK,gBAAgBtxK,KAAKqxK,OAAOtzH,cACnD/9C,MAAKqxK,SAGpBJ,eAAgB,SAAUhpK,GAAV,GACR22E,GAAM5+E,KACNi2H,EAAQr3C,EAAIq3C,MACZtjF,EAAQisC,EAAIyyF,OACZjxK,EAAUw+E,EAAIx+E,QACdw2I,EAAeh4D,EAAIg4D,aACnB74F,EAAQpL,EAAMoL,MACdqnC,EAAK6wC,EAAM07C,oBAAoB1pK,EAAEoY,QAAQ,GAAG4S,EAAEvX,UAAUuX,EACxDoyD,EAAK4wC,EAAM07C,oBAAoB1pK,EAAEoY,QAAQ,GAAG4S,EAAEvX,UAAUuX,EACxDt6B,EAAOiG,KAAKoT,IAAIozE,EAAIC,GACpBzsF,EAAQgG,KAAKlG,IAAI0sF,EAAIC,EACzBp9E,GAAE9D,iBACF45C,EAAM/wB,KAAO4pH,EAAa7O,mBAAmB,GAAIjiD,IAAMntF,KAAUyH,EAAQ4R,IACzE+rC,EAAM9wB,GAAK2pH,EAAa7O,mBAAmB,GAAIjiD,IAAMltF,KAAWwH,EAAQ1H,IACxEsH,KAAK+qB,KAAKgzB,EAAM/wB,KAAM+wB,EAAM9wB,IAC5BjtB,KAAKgI,QAAQmwD,GAAQn4D,KAAKsxK,gBAAgBvzH,KAE9CiyH,OAAQ,SAAUpyK,GACd,GAAIuU,GAAQvU,CAIZ,OAHIA,aAAiB5B,QACjBmW,EAAQnS,KAAK42I,aAAa9O,cAAclqI,IAErCuU,GAEXo/J,OAAQ,SAAUp/J,GAAV,GACAy0H,GAAa5mI,KAAK42I,aAAax2I,QAAQwmI,WACvChpI,EAAQuU,CAQZ,OAPInS,MAAK6vK,YAEDjyK,EADAuU,EAAQy0H,EAAWhvI,OAAS,EACpBoI,KAAKI,QAAQ1H,IAEbkuI,EAAWhoI,KAAKuoD,KAAKh1C,KAG9BvU,GAEXg0K,MAAO,SAAUh0K,GAAV,GACCg5I,GAAe52I,KAAK42I,aACpBzkI,EAAQnS,KAAKgwK,OAAOpyK,EACxB,OAAOg5I,GAAa3S,QAAQ9xH,EAAOA,GAAO,IAE9C4Y,KAAM,SAAUiC,EAAMC,GAAhB,GAcE4kJ,GAEAz6G,EAfAh3D,EAAUJ,KAAKI,QACfE,EAAUN,KAAK42I,aAAax2I,QAAQE,QACpClB,EAASgB,EAAQhB,OACjBs1F,EAAUt0F,EAAQs0F,QAClB2nC,EAASj8H,EAAQq0B,UAAU4nG,OAC3B1jI,EAAO2H,EAAU2sB,EAAKD,EACtBp0B,EAAQ0H,EAAU0sB,EAAOC,EACzB/Q,EAAO,KAAO5b,EAAU,EAAI,GAC5B8iC,EAAMpjC,KAAK4xK,MAAMj5K,GACjBm5K,EAAgBriK,GAAM2zB,EAAIlnB,GAAQ9c,EAAOzG,KAAO+7F,EAAQ/7F,KAC5DirF,IAAc5jF,KAAKswK,UAAYr3K,MAAO64K,IACtCluF,GAAc5jF,KAAKy0B,WAAa97B,KAAMm5K,IACtC1uI,EAAMpjC,KAAK4xK,MAAMh5K,GACbi5K,EAAiBpiK,GAAMrP,EAAQnH,OAASmqC,EAAIlnB,GAAQ9c,EAAOzG,KAAO+7F,EAAQ/7F,OAC9EirF,GAAc5jF,KAAKuwK,WAAat3K,MAAO44K,IACnCz6G,EAAWh3D,EAAQnH,MAAQ44K,EAC3Bz6G,IAAah3D,EAAQnH,QACrBm+D,GAAYilE,EAAOzjI,OAEvBgrF,GAAc5jF,KAAKuwK,WAAa53K,KAAMy+D,IACtCwsB,GAAc5jF,KAAKy0B,WAAax7B,MAAO2F,KAAKlG,IAAI0H,EAAQnH,OAAS64K,EAAgBD,GAAkBx1C,EAAOzjI,MAAO,MAErH8qB,IAAK,SAAUsJ,EAAMC,GAAhB,GACG7sB,GAAUJ,KAAKI,QACf4R,EAAMhS,KAAKgwK,OAAO5vK,EAAQ4R,KAC1BtZ,EAAMsH,KAAKgwK,OAAO5vK,EAAQ1H,KAC1Bg3I,EAAY3sD,GAAW/iF,KAAKgwK,OAAOhjJ,GAAOhb,EAAKtZ,GAC/C42I,EAAUvsD,GAAW/iF,KAAKgwK,OAAO/iJ,GAAKyiH,EAAY,EAAGh3I,EACrD0H,GAAQoD,SACRxD,KAAK+qB,KAAK2kH,EAAWJ,GAEzBlvI,EAAQ4sB,KAAOhtB,KAAKuxK,OAAO7hC,GAC3BtvI,EAAQ6sB,GAAKjtB,KAAKuxK,OAAOjiC,IAE7BtgC,OAAQ,SAAU37E,GAAV,GACAjzB,GAAUJ,KAAKI,QACf4R,EAAMhS,KAAKgwK,OAAO5vK,EAAQ4R,KAC1BtZ,EAAMsH,KAAKgwK,OAAO5vK,EAAQ1H,KAC1Bq5K,EAAO3xK,EAAQuwK,WAAWj2K,KAC1BsyB,EAAOhtB,KAAKgwK,OAAO5vK,EAAQ4sB,MAC3BC,EAAKjtB,KAAKgwK,OAAO5vK,EAAQ6sB,IACzB8wB,GACA/wB,KAAMA,EACNC,GAAIA,GAEJwkJ,EAAW72K,MAAemjD,EAU9B,IATI/9C,KAAKqxK,SACLtzH,EAAQ/9C,KAAKqxK,OAAOtzH,OAEpBg0H,IAAS3vJ,KACT27B,EAAM/wB,KAAO+1D,GAAWA,GAAW/1D,EAAOqG,EAAO,EAAGpG,EAAK,GAAIjb,EAAKtZ,IAElEq5K,IAAS7vJ,IACT67B,EAAM9wB,GAAK81D,GAAWA,GAAW91D,EAAKoG,EAAO0qB,EAAM/wB,KAAO,EAAGt0B,GAAMsZ,EAAKtZ,IAExEqlD,EAAM/wB,OAASykJ,EAASzkJ,MAAQ+wB,EAAM9wB,KAAOwkJ,EAASxkJ,GAEtD,MADAjtB,MAAK0jB,IAAIq6B,EAAM/wB,KAAM+wB,EAAM9wB,KACpB,GAGfjlB,QAAS,SAAUkH,EAAMoZ,GACrB,OAAQtoB,KAAK4rG,UAAY5rG,KAAKi2H,OAAOjuH,QAAQkH,EAAMoZ,MAM3DqhG,GAAkB8+B,IACdjlJ,SAAS,EACTmtK,YAAcj2K,KAAM,QACpBsX,IAAK63G,EACLnxH,IAAKg1G,IAEL37B,GAAU80E,GAAYnmJ,QACtB1G,KAAM,SAAUquF,GAAV,GAIEjoF,GACAisE,GAJCgc,IAAUA,EAAM2rE,eAAiBh0J,KAAKmiH,UAAYniH,KAAKmiH,WAAa95B,IAGrEjoF,EAAUxF,MAAeoF,KAAKI,QAASioF,EAAMjoF,QAAQinH,SACrDh7C,EAASgc,EAAM2rE,gBACf3nF,GACArsE,KAAKmiH,SAAW95B,EAChBw+D,GAAY5iJ,GAAGjK,KAAKmO,KAAKnI,MACrBqoF,MAAOA,EACPhc,OAAQA,GACTjsE,EAASioF,IAEZroF,KAAKc,SAGbA,KAAM,iBACKd,MAAKmiH,SACZ0kC,GAAY5iJ,GAAGnD,KAAKqH,KAAKnI,SAG7B0oJ,GAAgB7B,GAAYnmJ,QAC5BC,KAAM,SAAUmjI,EAAU1jI,GACtBymJ,GAAY5iJ,GAAGtD,KAAKwH,KAAKnI,KAAM8jI,EAAS/J,aAAc35H,GACtDJ,KAAK8jI,SAAWA,EAChB9jI,KAAK2+J,cAAgB76B,EAAS/J,aAAahxH,QAE/C81J,OAAQ,SAAUp2E,EAAQ8rE,GAAlB,GAOIlsE,GACAw9C,EACAx5D,EARJ2lG,EAAgBjlJ,GAAK07D,EAAQ,SAAUJ,GAAV,GACzBg/B,GAAUh/B,EAAMszC,OAAOtU,QACvBgzB,EAAWhzB,GAAWA,EAAQ7jH,WAAY,CAC9C,QAAQ62I,GAER23B,GAAcp6K,OAAS,IACnBywF,EAAQ2pF,EAAc,GACtBnsC,EAAO7lI,KAAK8jI,SAAS8S,aAAa3S,QAAQ57C,EAAMmhD,YAChDn9D,EAASkoF,EAASv0J,KAAKiyK,YAAY1d,EAAQ1uB,GAAQ7lI,KAAKkyK,eAAe7pF,EAAOw9C,GAClF7lI,KAAKhG,MACDqyE,OAAQA,EACR86C,QAAQ,EACR1+B,OAAQA,EACRmzC,SAAUvzC,EAAMuzC,SAChBu2C,aAAcnyK,KAAK2+J,cAAc/oC,KAAK51H,KAAKI,QAAQgyK,eAAgB/pF,EAAMuzC,UACzED,OAAQ37H,KAAK8jI,SAASnI,QACvB37H,KAAKI,WAGhB6xK,YAAa,SAAU5pF,EAAOw9C,GAAjB,GACLpyG,GAAOzzB,KAAK8jI,SAAS8S,aACrBrrD,GACA1sD,WAAY,OACZjD,SAAU,SAKd,OAHKnI,GAAKrzB,QAAQw7B,WACdysD,EAAMp1D,EAAI4yG,EAAK1uE,SAASlkC,IAGxBo1D,MAAOA,EACPkD,MAAOA,IAGf2mF,eAAgB,SAAU7pF,EAAOw9C,GAAjB,GASRwsC,GARAjvI,EAAMilD,EAAMkpE,MAAMvpF,KAAKy3F,YACvB7jI,EAAW57B,KAAK8jI,SAAS8S,aAAax2I,QAAQw7B,SAC9Cu7B,EAAS/zB,EAAI+zB,SACbm7G,EAAazsC,EAAK1uE,SAClBo0B,GACA1sD,WAAY,SACZjD,SAAU,SAQd,OAJIy2I,GADAz2I,EACc,GAAIkqD,IAAM3uB,EAAOlkC,EAAGq/I,EAAWjhK,GAE/B,GAAIy0E,IAAMwsF,EAAWr/I,EAAGkkC,EAAO9lD,IAG7Cg3E,MAAOgqF,EACP9mF,MAAOA,MAInBo+B,GAAkB++B,IAAiB0pB,eAAgB,UAC/CzpB,GAAoBpsH,GAAU77B,QAC9BygC,MAAO,WAAA,GAOK1N,GACA8+I,EAPJ3zF,EAAM5+E,KACNjI,EAAU6mF,EAAI7mF,QACdqI,EAAUw+E,EAAIx+E,QACd8pF,EAAOnyF,EAAQmyF,MACfA,IACAlqF,KAAK+iC,OAAS3iC,EAAQ2iC,OAClBtP,EAAOrzB,EAAQw7B,SAAWtqB,GAAI6/G,GAC9BohD,EAAYvyK,KAAKuyK,UAAY,GAAIhzB,IAAc,EAAG,GACtDgzB,EAAU9+I,GAAQ4sH,GAClBtoJ,EAAQ4hC,UAAUA,KAAY+C,MAAM61I,EAAUt/I,EAAGs/I,EAAUlhK,KAE3DrR,KAAKu4G,SAGbt5E,KAAM,SAAUgwC,GAAV,GACE8+B,GAASxsF,EAAQioG,iBAAiBxpH,KAAKuyK,UAAUt/I,EAAG,EAAGg8C,GACvD++B,EAASzsF,EAAQioG,iBAAiBxpH,KAAKuyK,UAAUlhK,EAAG,EAAG49D,EAC3DjvE,MAAKjI,QAAQ4hC,UAAUA,KAAY+C,MAAMqxE,EAAQC,EAAQhuG,KAAK+iC,UAElEw1E,MAAO,WACHh8E,GAAUt4B,GAAGs0G,MAAMpwG,KAAKnI,MACxBA,KAAKjI,QAAQ4hC,UAAU,SAG/BgwF,GAAkBg/B,IAAqBtoJ,SAAU2/I,KACjDh4C,GAAiBr8F,QAAQyc,SAAS84H,GAAKyH,IACnCC,GAAkBrsH,GAAU77B,QAC5BygC,MAAO,WACH,GAAIg2B,GAASn3D,KAAKm3D,OAASn3D,KAAKjI,QAAQmyF,OAAO/yB,QAC/Cn3D,MAAKjI,QAAQ4hC,UAAUA,KAAY+C,MAAM2jH,GAAaA,GAAalpF,KAEvEl4B,KAAM,SAAUgwC,GACZjvE,KAAKjI,QAAQ4hC,UAAUA,KAAY+C,MAAMuyC,EAAKA,EAAKjvE,KAAKm3D,YAGhEwyD,GAAkBi/B,IAAmBvwC,OAAQ,mBAC7CrQ,GAAiBr8F,QAAQyc,SAASg5H,GAAQwH,IACtCC,GAAkBtsH,GAAU77B,QAC5BygC,MAAO,WACHnhC,KAAKwyK,OAASxyK,KAAKjI,QAAQmsC,UAC3BlkC,KAAKjI,QAAQmsC,QAAQ,IAEzBjF,KAAM,SAAUgwC,GACZjvE,KAAKjI,QAAQmsC,QAAQ+qC,EAAMjvE,KAAKwyK,WAGxC7oD,GAAkBk/B,IACdxoJ,SAAU,IACVg4G,OAAQ,WAEZrQ,GAAiBr8F,QAAQyc,SAAS63H,GAAQ4I,IACtCC,GAAevsH,GAAU77B,QACzBygC,MAAO,WACHnhC,KAAKjI,QAAQ4hC,UAAUA,KAAY+C,MAAM2jH,GAAaA,GAAargJ,KAAKI,QAAQ+2D,UAEpFl4B,KAAM,SAAUgwC,GACZjvE,KAAKjI,QAAQ4hC,UAAUA,KAAY+C,MAAMuyC,EAAKA,EAAKjvE,KAAKI,QAAQ+2D,YAGxEwyD,GAAkBm/B,IACdzwC,OAAQ,iBACRh4G,SAAU2/I,KAEdh4C,GAAiBr8F,QAAQyc,SAASy5H,GAAKiH,IACnCC,GAAmBxC,GAAa7lJ,QAChC6H,OAAQ,WACJg+I,GAAatiJ,GAAGsE,OAAOJ,KAAKnI,MAC5BA,KAAKk1J,kBAETK,cAAe,SAAU50B,EAAY0a,EAAekU,GAArC,GAEPC,GADA11J,EAAQuhJ,EAAcvhJ,KAO1B,OAAO,KAJH01J,EADA11J,IAAUinJ,GACEiE,GAEAF,IAEKnkB,EAAY0a,EAAekU,IAEpD2G,gBAAiB,WACb,GAAIztE,GAAS89D,GAAatiJ,GAAGiyJ,gBAAgB/tJ,KAAKnI,KAClD,OAAOyoF,GAAOvyE,OAAOlW,KAAKq1J,YAE9BoH,mBAAoB,SAAU7+J,EAAO63J,GACjC,GAAIA,IAAkBzlJ,GAAM,CACxB,GAAIyiK,IACAx/I,EAAGr1B,EAAMq1B,EACT5hB,EAAGzT,EAAMyT,EAQb,OANKwhD,GAAS4/G,EAAax/I,KACvBw/I,EAAax/I,EAAI,GAEhB4/B,EAAS4/G,EAAaphK,KACvBohK,EAAaphK,EAAI,GAEdohK,MAInB73K,GAAWmuJ,GAAiBhiJ,UAAWk+I,IACnC+D,GAAa/B,GAAavmJ,QAC1BggK,WAAY,WACR1gK,KAAKg9J,cACLh9J,KAAKi9J,cACLj9J,KAAK0yK,kBAAoB,GAAIhtB,IAC7B1lJ,KAAK2yK,kBAAoB,GAAIjtB,KAEjCn9I,OAAQ,SAAU04J,GAAV,GAKA4B,GACK/nK,EACDktE,EACAyhG,EAEAmJ,EATJzzF,EAASn/E,IAKb,KAJc,SAAVihK,IACAA,EAAQjhK,KAAKihK,OAEb4B,EAAe7iK,KAAK4iK,oBACf9nK,EAAI,EAAGA,EAAImmK,EAAMrpK,OAAQkD,IAC1BktE,EAAOi5F,EAAMnmK,GACb2uK,EAAa5G,EAAa76F,EAAK5nE,QAAQ8O,MAAQ,eACnDiwE,EAAO4iF,YAAY0H,GACfmJ,EAAiBzzF,EAAO4jF,oBAAoB0G,GAC3CmJ,IAGLzzF,EAAO0zF,mBAAmBz3B,EAAmBw3B,EAAgBtwB,IAAUt6E,GACvEmX,EAAO2zF,uBAAuB13B,EAAmBw3B,EAAgBrwB,IAAev6E,GAChFmX,EAAO4zF,kBAAkB33B,EAAmBw3B,EAAgBxxB,IAASp5E,GAEzEhoE,MAAKgzK,WAAW/R,IAEpBlB,YAAa,SAAU9pC,EAAOjuD,GAC1BhoE,KAAK0yK,kBAAkBnkI,OAAO0nF,EAAMmmC,aACpCp8J,KAAK2yK,kBAAkBpkI,OAAO0nF,EAAMomC,aACpCpV,GAAahjJ,GAAG87J,YAAY53J,KAAKnI,KAAMi2H,EAAOjuD,IAElDi4F,WAAY,SAAUxsI,GAClB,GAAIsqH,GAAWtqH,EAAKrzB,QAAQ8O,IAC5B+3I,IAAahjJ,GAAGg8J,WAAW93J,KAAKnI,KAAMyzB,GAClCA,EAAKrzB,QAAQw7B,UACb57B,KAAK2yK,kBAAkBzxI,MAAM68G,SACtB/9I,MAAKi9J,WAAWlf,KAEvB/9I,KAAK0yK,kBAAkBxxI,MAAM68G,SACtB/9I,MAAKg9J,WAAWjf,IAEvBtqH,IAASzzB,KAAKmiI,aACPniI,MAAKmiI,MAEZ1uG,IAASzzB,KAAKoiI,aACPpiI,MAAKoiI,OAGpB0gC,eAAgB,SAAUnnC,GAAV,GACRv7H,GAAUJ,KAAKI,QACfs8J,EAAY/gC,EAAOghC,MACnBsW,KAAkB/8J,OAAO9V,EAAQu8J,OACjCA,EAAQ5vI,GAAKkmJ,EAAc,SAAUrwK,GACrC,MAAOA,GAAEsM,OAASwtJ,IACnB,GACCE,EAAYjhC,EAAOkhC,MACnBqW,KAAkBh9J,OAAO9V,EAAQy8J,OACjCA,EAAQ9vI,GAAKmmJ,EAAc,SAAUtwK,GACrC,MAAOA,GAAEsM,OAAS0tJ,IACnB,GACCqE,EAAQ7gK,EAAQ6gK,YAChByK,EAAkBzK,EAAM,GAAG/xJ,MAAQ,UACnCy8J,GAAYhP,OAAa30F,OAAS60F,OAAa70F,MAAQ0jG,CAC3D,OAAOC,IAEXkH,mBAAoB,SAAUl3C,EAAQ3zD,GAC9B2zD,EAAO/jI,OAAS,GAChBoI,KAAK+/J,YAAY,GAAIxZ,IAAavmJ,MAC9B27H,OAAQA,EACR93F,KAAMmkC,EAAK5nE,QAAQyjC,OACnBmkC,IAGZ8qG,uBAAwB,SAAUn3C,EAAQ3zD,GAClC2zD,EAAO/jI,OAAS,GAChBoI,KAAK+/J,YAAY,GAAIhX,IAAiB/oJ,MAClC27H,OAAQA,EACR93F,KAAMmkC,EAAK5nE,QAAQyjC,OACnBmkC,IAGZ+qG,kBAAmB,SAAUp3C,EAAQ3zD,GAC7B2zD,EAAO/jI,OAAS,GAChBoI,KAAK+/J,YAAY,GAAItZ,IAAYzmJ,MAC7B27H,OAAQA,EACR93F,KAAMmkC,EAAK5nE,QAAQyjC,OACnBmkC,IAGZmrG,aAAc,SAAU/yK,EAASw7B,EAAU02H,GAA7B,GAoBD/C,GACDlU,EACA+3B,EAEIC,EASRC,EACKx4K,EAML41I,EAQAj9G,EA/CAsqH,EAAW39I,EAAQ8O,KACnBqkK,EAAY33I,EAAW57B,KAAKi9J,WAAaj9J,KAAKg9J,WAC9C8P,EAAUlxI,EAAW57B,KAAK2yK,kBAAoB3yK,KAAK0yK,kBACnDljD,EAAc50H,MAAewF,GAAWw7B,SAAUA,IAClD43I,EAAQj4B,EAAiB/rB,EAAYtwH,KAAM4kJ,IAC3CipB,EAAeD,EAAQnuH,QACvBkuH,EAAmB2G,GACnBxhK,IAAK,GACLtZ,IAAK,IAELsZ,IAAK,EACLtZ,IAAK,GAELqlD,EAAQ+uH,EAAQnuH,MAAMo/F,IAAagvB,GAAgBF,EACnD4G,GACAjkD,EAAYx9G,IACZw9G,EAAY92H,KAEZijI,EAAS37H,KAAK27H,MAClB,KAAS4zB,EAAW,EAAGA,EAAW5zB,EAAO/jI,OAAQ23J,IAG7C,GAFIlU,EAAgB1f,EAAO4zB,GACvB6jB,EAAiB/3B,EAAcz/G,EAAW,QAAU,SACpDw3I,IAAmB5jD,EAAYtgH,MAAsB,IAAdojJ,IAAoB8gB,EAAgB,CACvEC,EAAkBt2B,GAAapxI,QAAQqxI,UAAU3B,EAAe,GAAG4B,YACvEw2B,EAAY3rK,KAAKurK,EAAgBz3I,EAAW,IAAM,KAClD,OAQR,IALkB,IAAd02H,GAAmBya,IACnBhvH,EAAM/rC,IAAMpT,KAAKoT,IAAI+rC,EAAM/rC,IAAK+6J,EAAa/6J,KAC7C+rC,EAAMrlD,IAAMkG,KAAKlG,IAAIqlD,EAAMrlD,IAAKq0K,EAAar0K,MAGxCoC,EAAI,EAAGA,EAAI24K,EAAY77K,OAAQkD,IACpC,GAAI24K,EAAY34K,YAAckB,MAAM,CAChCs3K,GAAe,CACf,OAaR,GARI5iC,EADA6K,EAAiB/rB,EAAYtwH,KAAM+yH,MAAUzC,EAAYtwH,MAAQo0K,EACtD/xJ,EAAQuzG,cACZ0+C,EACIjyJ,EAAQyzG,gBAERzzG,EAAQszG,YAEnBphG,EAAO,GAAIi9G,GAAS3yF,EAAM/rC,IAAK+rC,EAAMrlD,IAAK82H,EAAaxvH,KAAK+5H,cAChEtmG,EAAK6+H,UAAYA,EACbvU,EAAU,CACV,GAAIw1B,EAAUx1B,GACV,KAAUj1I,QAAO8yB,EAAW,IAAM,KAAO,mBAAqBmiH,EAAW,sBAE7Ew1B,GAAUx1B,GAAYtqH,EAG1B,MADAzzB,MAAK8/J,WAAWrsI,GACTA,GAEXu/I,WAAY,SAAU/R,GAAV,GAOCtjK,GACD4sK,EAKC3kC,EACD8tC,EAbJv0F,EAASn/E,KACTI,EAAUJ,KAAKI,QACfuzK,KAAkBz9J,OAAO9V,EAAQu8J,OACjC8F,KACAmR,KAAkB19J,OAAO9V,EAAQy8J,OACjC6F,IACJ,KAAS/kK,EAAM,EAAGA,EAAMg2K,EAAa/7K,OAAQ+F,IACrC4sK,EAAWprF,EAAOqiF,SAASmS,EAAah2K,GAAKqqE,MAC7C/kE,GAAQsnK,EAAUtJ,IAClBwB,EAAM36J,KAAKq3E,EAAOg0F,aAAaQ,EAAah2K,IAAM,EAAOA,GAGjE,KAASioI,EAAQ,EAAGA,EAAQguC,EAAah8K,OAAQguI,IACzC8tC,EAAav0F,EAAOqiF,SAASoS,EAAahuC,GAAO59D,MACjD/kE,GAAQywK,EAAYzS,IACpByB,EAAM56J,KAAKq3E,EAAOg0F,aAAaS,EAAahuC,IAAQ,EAAMA,GAGlE5lI,MAAKmiI,MAAQniI,KAAKmiI,OAASsgC,EAAM,GACjCziK,KAAKoiI,MAAQpiI,KAAKoiI,OAASsgC,EAAM,IAErCwE,eAAgB,SAAUjxC,EAAOhuH,EAAG+kK,GAApB,GAOHlyK,GACD24B,EACAvhB,EACA8vB,EATJuyH,EAASt+B,EAAMg3C,kBAAkBhlK,GACjCogF,EAAQ,GAAIvC,IAAMyuE,EAAOthI,EAAGshI,EAAOljJ,GACnC8uJ,EAAUngK,KAAKgkI,KACfpsI,EAASuoK,EAAQvoK,OACjBi8K,KACAC,IACJ,KAASh5K,EAAI,EAAGA,EAAIlD,EAAQkD,IACpB24B,EAAO0sI,EAAQrlK,GACfoX,EAASuhB,EAAKrzB,QAAQw7B,SAAWk4I,EAAUD,EAC3C7xI,EAAevO,EAAK24G,SAAS/jD,GACZ,OAAjBrmD,GACA9vB,EAAOpK,KAAKk6B,EAGhB6xI,GAAQj8K,OAAS,GAAKk8K,EAAQl8K,OAAS,GACvCq+H,EAAMjuH,QAAQglK,GACVj1K,QAAS8qF,GAAa56E,GACtBqY,cAAerY,EACfgrB,EAAG2oH,EAAkBi4B,GACrBxiK,EAAGuqI,EAAkBk4B,MAIjC3G,kBAAmB,SAAU15I,EAAMrzB,GAAhB,GACXw7B,GAAWnI,EAAKrzB,QAAQw7B,SACxBooG,EAAOhkI,KAAKsiK,UAAUtiK,KAAKihK,OAC3B9uJ,GAASypB,EAAWooG,EAAK3yH,EAAI2yH,EAAK/wG,GAAG/0B,QAAQu1B,GAC7C+7F,KAAiBt5G,OAAO0lB,EAAW57B,KAAKI,QAAQy8J,MAAQ78J,KAAKI,QAAQu8J,OAAOxqJ,EAChFvX,IAAW40H,EAAapvH,MAGhCupH,GAAkBq/B,IACd2T,SACAE,WAEJjiK,GAAWouJ,GAAWjiJ,UAAWmgJ,IAC7B+B,GAAa71B,GAAa1yH,QAC1BC,KAAM,SAAU/C,EAAO66H,EAAQr4H,GAC3BgzH,GAAanvH,GAAGtD,KAAKwH,KAAKnI,KAAMI,GAChCJ,KAAKpC,MAAQA,EACboC,KAAKy4H,OAASA,GAElBlwH,OAAQ,WAAA,GAQA2qJ,GAeY6gB,EAWJC,EAjCR9yC,EAASlhI,KAAKI,QAAQ8gI,OACtBnH,EAAe/5H,KAAKuxJ,MAAMx3B,aAC1Bo5B,EAAYnzJ,KAAKpC,KACjBoC,MAAKozJ,WAAapzJ,KAAKwD,WAAY,IAGvCxD,KAAKozJ,WAAY,EACbF,EAAgB9pC,GAAY8X,GAC5BgyB,EACAC,EAAYD,GACRzsI,SAAUzmB,KAAKymB,SACfm1G,SAAU57H,KAAK47H,SACfh+H,MAAOoC,KAAKpC,MACZ+9H,OAAQ37H,KAAK27H,OACb3iI,WAAYgH,KAAKhH,aAEdkoI,EAAOn4H,SACdoqJ,EAAYp5B,EAAahxH,OAAO6sH,KAAKsL,EAAOn4H,OAAQoqJ,IAEpDjyB,EAAO19H,UAAY2vJ,GAA2B,IAAdA,KAC5BjyB,EAAOv/F,WAAaqpC,GAAUk2D,EAAOv/F,WAAaqiH,IAC7C9iB,EAAOjtD,QACJ8/F,EAAkB,GAAIt/F,IAAMz0E,KAAKI,QAAQ6zE,OAAOwL,iBAEhDyhD,EAAOjtD,MADP8/F,EAAkB,IACHxiD,GAEAD,IAGlB4P,EAAOliC,aACRkiC,EAAOliC,WAAah/F,KAAKI,QAAQ6zE,SAGjC+/F,EAAcj6C,EAAaod,MAAMzC,eAAexT,OACpDA,EAAOjtD,MAAQitD,EAAOjtD,OAAS+/F,EAAY//F,MAC3CitD,EAAOliC,WAAakiC,EAAOliC,YAAcg1E,EAAYh1E,YAEzDh/F,KAAK01C,MAAQ,GAAIo+E,IAAQq/B,EAAWv4J,MAAesmI,GAC/C31C,MAAOvgB,EACP2gB,OAAQ,GACRpf,WACIrtE,KAAM+gJ,GACNrsH,MAAO5zB,KAAKi0K,mBAGpBj0K,KAAK8jC,OAAO9jC,KAAK01C,UAGzBihE,OAAQ,SAAUqgB,GACdh3H,KAAKuI,SACLvI,KAAKojC,IAAM4zF,EACXh3H,KAAK4zJ,eAETA,YAAa,WAAA,GAQDsgB,GACAC,EACAC,EAUIv9G,EAnBR+nB,EAAM5+E,KACNq0K,EAAgBz1F,EAAIx+E,QAAQ8gI,OAC5BxrF,EAAQkpC,EAAIlpC,MACZ+iF,EAASz4H,KAAKy4H,OAAOt8H,QACrBm4K,EAAiBD,EAAcj9G,SAC/BkwB,EAAQmxC,EAAON,QACfziF,KACIw+H,EAAcx+H,EAAMtS,IAAIlqC,SACxBi7K,EAAaz+H,EAAMtS,IAAInqC,QAEvBo7K,EAAc1yI,WAAaqpC,GAC3BytD,EAAOpgI,OAASuG,KAAKC,KAAK45H,EAAOpgI,OAAS67K,GAAe,GAAKA,EAC9DE,EAAK37C,EAAOpwC,MAAMf,GAClB5xC,EAAMihE,OAAO,GAAIuT,IAAIkqD,EAAGnhJ,EAAGmhJ,EAAG/iK,EAAI6iK,EAAc,EAAGE,EAAGnhJ,EAAGmhJ,EAAG/iK,KACrDgjK,EAAc1yI,WAAaqiH,IAClCvrB,EAAOpgI,OAASogI,EAAOpgI,OAAS67K,EAAc,EAC9CE,EAAK37C,EAAOpwC,MAAMf,GAClB5xC,EAAMihE,OAAO,GAAIuT,IAAIkqD,EAAGnhJ,EAAGmhJ,EAAG/iK,EAAI6iK,EAAc,EAAGE,EAAGnhJ,EAAGmhJ,EAAG/iK,MAG5D+iK,EAAK37C,EAAOt8H,QAAQ6yG,OAAOslE,GAAgBjsF,MAAMf,GAC7C8sF,EAAGnhJ,GAAKwlG,EAAOthE,OAAOlkC,GACtB4jC,EAAKu9G,EAAGnhJ,EAAIkhJ,EACZz+H,EAAMygE,YAAc/zF,KAEpBy0C,EAAKu9G,EAAGnhJ,EAAIkhJ,EACZz+H,EAAMygE,YAAcj0F,GAExBwzB,EAAMihE,OAAO,GAAIuT,IAAIrzD,EAAIu9G,EAAG/iK,EAAI6iK,EAAaE,EAAGnhJ,EAAGmhJ,EAAG/iK,OAIlE8oH,aAAc,WAAA,GAQE/yC,GACA+a,EARRhjB,EAASn/E,KACT4+E,EAAM5+E,KACNy4H,EAAS75C,EAAI65C,OACbr4H,EAAUw+E,EAAIx+E,OAClBgzH,IAAanvH,GAAGk2H,aAAahyH,KAAKnI,MAC9BA,KAAKpC,QACDwC,EAAQ+hG,QACJ/a,GAAcqxC,EAAOrxC,WAAa,KAAO,IACzC+a,EAAS/hG,EAAQ+hG,QACjBy5B,SAAU57H,KAAK47H,SACfn1G,SAAUzmB,KAAKymB,SACf7oB,MAAOoC,KAAKpC,MACZ+9H,OAAQ37H,KAAK27H,OACb3iI,WAAYgH,KAAKhH,WACjBm+D,OAAQ,GAAIooF,IAAc9mB,EAAOthE,OAAOlkC,EAAGwlG,EAAOthE,OAAO9lD,GACzDhZ,OAAQogI,EAAOpgI,OACfiyH,YAAamO,EAAOnO,YACpBljC,WAAYA,EACZG,SAAUH,EAAaqxC,EAAOnxC,MAC9BlnF,QAASA,EACT8H,OAAQlI,KAAK45H,YACbO,aAAc,WACV,GAAInmF,GAAQ,GAAIw7C,GAEhB,OADArQ,GAAOo1F,oBAAoBvgI;AACpBA,KAGXmuD,GACAniG,KAAKmiG,OAAOr+D,OAAOq+D,IAGvBniG,KAAKu0K,oBAAoBv0K,KAAKmiG,UAI1CoyE,oBAAqB,SAAUvgI,GAAV,GACb4qC,GAAM5+E,KACNy4H,EAAS75C,EAAI65C,OACbr4H,EAAUw+E,EAAIx+E,QACdo0K,EAAgBp0K,EAAQi8H,WACxBA,EAASm4C,EAAcv7K,MAAQ,GAC/B+jG,QACI/oB,MAAOugG,EAAcvgG,MACrBh7E,MAAOu7K,EAAcv7K,MACrBirC,QAASswI,EAActwI,QACvB26E,SAAU21D,EAAc31D,cAG5B5qC,EAAQ7zE,EAAQ6zE,MAChB8oB,GACA9oB,MAAOA,EACP/vC,QAAS9jC,EAAQ8jC,SAEjBi+D,EAASniG,KAAKu1J,cAAc98B,EAAQ79H,IACpCmiG,KAAMA,EACNC,QAAU94D,QAAS9jC,EAAQ8jC,SAC3BP,OAAQvjC,EAAQujC,QACjB04F,GACHroF,GAAMlQ,OAAOq+D,GACTu4C,EAAmBt6I,IACnB4zC,EAAMlQ,OAAO9jC,KAAK87H,sBAAsB35B,GACpC02D,UAAW5kF,EACXmkC,aAAcrb,GACfniG,IACCu8D,QACIshE,EAAOthE,OAAOlkC,EACdwlG,EAAOthE,OAAO9lD,GAElBi5G,YAAamO,EAAOnO,YACpBjyH,OAAQogI,EAAOpgI,OACf6pG,WAAW,GACZ9hG,EAAQ47H,YAGnBu5B,cAAe,SAAU98B,EAAQr4H,GAC7B,MAAIA,GAAQq0K,cACD,GAAIjzJ,IAAQyhF,OAAO,GAAIkH,IAASlH,OAAO,GAAIs8C,IAAc9mB,EAAOthE,OAAOlkC,EAAGwlG,EAAOthE,OAAO9lD,GAAIonH,EAAOpgI,QAAS+H,GAEhHmhB,EAAQ4xG,aAAaxnH,QAAQ6tH,WAAWf,EAAQr4H,IAE3Di6H,gBAAiB,WAAA,GACTz7C,GAAM5+E,KACNI,EAAUw+E,EAAIx+E,QACd+2D,EAASynB,EAAI65C,OAAOthE,MACxBv8D,IAAWwF,GACPmsE,WACIpV,QACIA,EAAOlkC,EACPkkC,EAAO9lD,GAEXuiB,MAAO5zB,KAAKi0K,kBAGpB7gD,GAAanvH,GAAGo2H,gBAAgBlyH,KAAKnI,OAEzCq7H,gBAAiB,SAAUj7H,GAAV,GACTg7H,GAAYp7H,KAAKI,QAAQg7H,cACzBiB,EAASjB,EAAUiB,UACvB,OAAOr8H,MAAKu1J,cAAcv1J,KAAKy4H,OAAQ79H,MAAewF,GAClD28F,MACI9oB,MAAOmnD,EAAUnnD,MACjB/vC,QAASk3F,EAAUl3F,SAEvB84D,QACI94D,QAASm4F,EAAOn4F,QAChBjrC,MAAOojI,EAAOpjI,MACdg7E,MAAOooD,EAAOpoD,WAI1B6/E,gBAAiB,WACb,MAAO9zJ,MAAKmiG,OAAOxnG,SAAS,IAEhC+gI,oBAAqB,WACjB,GAAIjD,GAASz4H,KAAKy4H,MAClB,QACIr4H,QAASJ,KAAKI,QACd/H,OAAQogI,EAAOpgI,OACfiyH,YAAamO,EAAOnO,YACpBnzD,OAAQ,GAAIooF,IAAc9mB,EAAOthE,OAAOlkC,EAAGwlG,EAAOthE,OAAO9lD,GACzD+1E,WAAYqxC,EAAOrxC,WACnBG,SAAUkxC,EAAOnxC,MAAQmxC,EAAOrxC,WAChC+a,OAAQniG,KAAKmiG,SAGrB6xD,cAAe,WAAA,GACPv7B,GAASz4H,KAAKy4H,OAAOt8H,QAAQ6yG,OAAOoxC,IACpC1nB,EAAWD,EAAON,SAClBQ,EAAWF,EAAOpwC,MAAMqwC,EAC5B,QACIrwC,MAAOswC,EACPptC,MAAOkxD,EAAiB/jB,EAAW,OAG3C46B,YAAa,SAAUvqJ,GACnB,MAAO/I,MAAKuxJ,MAAMwB,iBAAiB/yJ,KAAM+I,MAG7C4zI,GAASltI,GAAM8R,EAAQ6hE,IAAI,IAAK8qC,IAChCwuB,GAASjtI,GAAM8R,EAAQ6hE,IAAI,IAAK8qC,IA0BpCvE,GAAkBs/B,IACdh1E,MAAOq9C,GACP0K,SAAWzrC,SAAU,gBACrB8rC,QAAUpjI,MAAO,IACjBioI,QACI19H,SAAS,EACT4zD,SAAU,GACVy/B,KAAMyoD,EAAiBh4C,aACvBxkE,OAAQomF,GAAW,IACnB39B,MAAOqmC,GACPjuF,OAAQ,EACRhC,SAAUuiH,IAEd33E,WAAartE,KAAM2iJ,IACnBzmB,WACI53H,SAAS,EACT64H,QAAUpjI,MAAO,IAErBuK,SAAS,IAEb5I,GAAWquJ,GAAWliJ,UAAW09I,IAC7ByE,IACAwrB,iBAAkB,SAAU92K,EAAOyqF,EAAOjoF,GAAxB,GAMNu0K,GACAzhB,EACA99H,EAUA6sI,EAAkBC,EAjBtB0S,EAAgB50K,KAAKI,QAAQu0I,WAC7B0/B,EAAgBO,EAAc1zC,WAC9BwX,EAAgBk8B,EAAcl8B,kBAC9BypB,EAAsBzpB,EAAcxX,UACpC9gI,IAAWA,EAAQgiK,mBAAoB,IACnCuS,EAAev0K,EAAQoD,WAAY,EACnC0vJ,EAAgByhB,EAAevrD,GAAYirD,GAAiBjrD,GAAY+4C,IAAwB/4C,GAAYirD,GAC5Gj/I,EAAOh1B,EAAQw7H,UAAY,GAC3Bs3B,IACA99H,EAAO89H,GACH99H,KAAMA,EACNumG,OAAQv7H,EAAQu7H,OAChBl1G,SAAUrmB,EAAQqmB,SAClBztB,WAAYoH,EAAQpH,WACpB4E,MAAOA,KAIX+2K,GACA1S,KACAC,EAAc75E,EAAMpU,QAEpBguF,GACIhuF,MAAOkuF,EAAoBluF,MAC3B4iB,KAAMsrE,EAAoBtrE,MAE9BqrE,GAAexpB,EAAc7D,aAAe5gE,OAE5C7+C,GACAp1B,KAAK60K,YAAY/sK,MACbmnK,WAAY7uK,EAAQ+R,MACpBijB,KAAMA,EACNumG,OAAQv7H,EAAQu7H,OAChBumC,YAAaA,EACbhhC,OAAQ+gC,OA+CxB9Y,GAAwB,GACxBC,GAAWh2B,GAAa1yH,QACxBC,KAAM,SAAUmjI,EAAU1jI,GACtBgzH,GAAanvH,GAAGtD,KAAKwH,KAAKnI,KAAMI,GAChCJ,KAAK8jI,SAAWA,EAChB9jI,KAAK+5H,aAAe+J,EAAS/J,aAC7B/5H,KAAKyoF,UACLzoF,KAAK60K,eACL70K,KAAKuI,UAETA,OAAQ,WACJvI,KAAKovJ,mBAAmBpvJ,KAAKqvJ,SAASjoJ,KAAKpH,QAE/CovJ,mBAAoB,SAAUzuI,GAAV,GAQZm0J,GACAn5C,EACA6e,EACK+U,EACDlU,EACA7/I,EACAq7G,EACAzoE,EACAq6C,EACA/0E,EACAqhK,EACAC,EAIAnjE,EAWK/2G,EACD6hI,EAIAntF,EACA5xC,EACA4F,EACA8jF,EACA2tF,EA1CR91F,EAASn/E,KACT4+E,EAAM5+E,KACNI,EAAUw+E,EAAIx+E,QACds3I,EAAe94D,EAAIklD,SAAS1jI,QAAQs3I,YAOxC,KANqB,SAAjBA,IACAA,MAEAo9B,EAAcp9B,EAAa9/I,OAC3B+jI,EAASv7H,EAAQu7H,OACjB6e,EAAc7e,EAAO/jI,OAChB23J,EAAW,EAAGA,EAAW/U,EAAa+U,IAuB3C,IAtBIlU,EAAgB1f,EAAO4zB,GACvB/zJ,EAAO6/I,EAAc7/I,KACrBq7G,EAAQimC,EAAazB,GACrBjtG,EAAQyoE,EAAMzoE,MACdq6C,EAASouB,EAAMpuB,OACf/0E,EAAQmjG,EAAMnjG,MACdqhK,EAAgB,IAAM3mI,EACtB4mI,EAAgB,OACfhrK,SAAS+qK,KACVC,EAAgB,IAAMthK,GAEtBm+F,EAAe,OAEfA,EADAnwB,GAAQ25D,EAAcj0D,YACPi0D,EAAcj0D,WAEdhnF,EAAQgnF,WAEvBmoE,IAAa/U,EAAc,GACvBa,EAAcna,OAAOv/F,WAAauiH,KAClC7I,EAAcna,OAAOv/F,SAAWqpC,GAG/BlwE,EAAI,EAAGA,EAAI2tF,EAAO7wF,OAAQkD,IAC3B6hI,EAAYl0C,EAAO3tF,GAClB6hI,IAGDntF,EAASmtF,EAAUntF,OACnB5xC,EAAQ++H,EAAU/+H,MAClB4F,EAAUm5H,EAAUn5H,QACpB8jF,EAAkB,IAAV1pF,EAAco3K,GAAiBp3K,EAAQm3K,EAAgB,EAC/DE,EAA0B,IAAhBz5K,EAAK5D,UAAwB43C,EAAOylI,QAC7C/4K,GAAWm/I,EAAcpnE,SAC1BonE,EAAcpnE,MAAQzkC,EAAOykC,OAASyjE,EAAa58I,EAAIg6K,IAE3Dn0J,EAASg8G,EAAUsgB,YAAYr/I,MAAO,GAAI2jB,GAAQ0xG,KAAK,KAAM,EAAG,EAAGphB,EAAcvqB,IAC7EiqE,MAAOpyE,EACPy8C,SAAUpsF,EAAOosF,UAAY,GAC7BzpH,MAAOrX,EACP6gI,OAAQ0f,EACRkU,SAAUA,EACV9oI,SAAUjrB,EAAKV,GACf9B,WAAsB,IAAVo1C,EAAcxwC,EAAQwwC,EAAQ,EAC1C6mI,QAASA,EACT7S,gBAAiB5yH,EAAO4yH,gBACxB5+J,QAASA,EACTmgC,OAAQ62G,EAAc+U,EACtB0kB,eAAgB90F,EAAO80F,eAAen5K,EAAGy0J,EAAU/U,KAEnDh3I,KAAY,IACZquG,GAAgBvqB,KAKhC4tF,mBAAoB,SAAU90K,EAASxC,EAAO4xC,GAC1C,GAAImsF,GAASnsF,EAAOmsF,MACpBue,GAAY95I,GACRxC,MAAOA,EACP+9H,OAAQA,EACRl1G,SAAU+oB,EAAO/oB,SACjBm1G,SAAUpsF,EAAOosF,SACjB5iI,WAAYw2C,EAAOx2C,aAEnBkhD,SAAUyhF,EAAO6iB,UACjBnE,UACI,OACA,UACA,WACA,SACA,aAIZgV,SAAU,SAAUzxJ,EAAO66H,EAAQjpF,GAAzB,GAOFogD,GANAulF,EAAiBv6K,MAAe40C,EAAOmsF,QAAUxpH,MAAOq9B,EAAOr9B,OACnEnS,MAAKk1K,mBAAmBC,EAAgBv3K,EAAO4xC,GAC/CxvC,KAAK00K,iBAAiB92K,EAAOu3K,EAAgB3lI,GACzCA,EAAOhsC,WAAY,IAGnBosF,EAAU,GAAIq5D,IAAWrrJ,EAAO66H,EAAQ08C,GAC5Cz+K,EAAEgK,OAAOkvF,EAASpgD,GAClBxvC,KAAK8jC,OAAO8rD,GACZ5vF,KAAKyoF,OAAO3gF,KAAK8nF,KAErB+mB,OAAQ,SAAUqgB,GAAV,GAQAtjH,GACA0vB,EACA/3B,EACA+pK,EACAC,EACAC,EACAC,EACAC,EACA91C,EACA8a,EACAi7B,EACAC,EACAhhF,EAGAr8F,EACA8+D,EACKr8D,EACD80F,EACA6oC,EACAouC,EAII8O,EAQJjgI,EAvCJkpC,EAAM5+E,KACNI,EAAUw+E,EAAIx+E,QACdqoF,EAAS7J,EAAI6J,OACbmtF,EAAgBh3F,EAAIg3F,aAqBxB,KApBsB,SAAlBA,IACAA,MAEAliK,EAAQ+0E,EAAO7wF,OACfwrC,EAAM4zF,EAAU76H,QAChBkP,EAAQ,EACR+pK,EAAWx2K,KAAKoT,IAAIoxB,EAAInqC,QAASmqC,EAAIlqC,UACrCm8K,EAAeD,EAAW,EAC1BE,EAAiBF,EAAsB,IAAXA,EAC5BG,EAAS,GAAIrrD,IAAI9mF,EAAIyzB,GAAIzzB,EAAI0zB,GAAI1zB,EAAIyzB,GAAKu+G,EAAUhyI,EAAI0zB,GAAKs+G,GAC7DI,EAAeD,EAAOp+G,SACtBuoE,EAAYt8F,EAAI+zB,SAChBqjF,EAAcp6I,EAAQu7H,OAAO/jI,OAC7B69K,KACAC,KACAhhF,EAAUnR,GAAenjF,EAAQs0F,QAAS4gF,GAC9C5gF,EAAUA,EAAU2gF,EAAehqK,EAAQgqK,EAAehqK,EAAQqpF,EAClE6gF,EAAOx4I,UAAU2iG,EAAUzsG,EAAIuiJ,EAAaviJ,EAAGysG,EAAUruH,EAAImkK,EAAankK,GACtEhZ,EAASg9K,EAAe3gF,EACxBv9B,EAAS,GAAI2uB,IAAMztF,EAASk9K,EAAO1+G,GAAK69B,EAASr8F,EAASk9K,EAAOz+G,GAAK49B,GACjE55F,EAAI,EAAGA,EAAI4Y,EAAO5Y,IACnB80F,EAAUnH,EAAO3tF,GACjB29H,EAAS7oC,EAAQ6oC,OACjBouC,EAAcj3E,EAAQ2/D,SAC1B92B,EAAOpgI,OAASA,EAChBogI,EAAOthE,OAASA,EACZy+G,EAAch+K,SACV+9K,EAAeC,EAAc/O,GACjCpuC,EAAOnO,YAAcqrD,EAAarrD,YAClCmO,EAAOpgI,OAASs9K,EAAat9K,QAE7BwuK,IAAgBrsB,EAAc,GAAK5qD,EAAQqlF,UAC3Cx8C,EAAOthE,OAASshE,EAAOt8H,QAAQk0G,UAA0B,IAAhBooB,EAAOpgI,QAAegwF,MAAMowC,EAAON,WAEhFvoC,EAAQ+mB,OAAO4+D,GACX7/H,EAAQk6C,EAAQl6C,MAChBA,GACIA,EAAMt1C,QAAQuhC,WAAauiH,IACvB2iB,IAAgBrsB,EAAc,IAC1B9kG,EAAMygE,cAAgB/zF,GACtBszJ,EAAgB5tK,KAAK4tC,GAErB+/H,EAAe3tK,KAAK4tC,GAMpC+/H,GAAe79K,OAAS,IACxB69K,EAAez3J,KAAKhe,KAAK61K,iBAAgB,IACzC71K,KAAK81K,iBAAiBL,IAEtBC,EAAgB99K,OAAS,IACzB89K,EAAgB13J,KAAKhe,KAAK61K,iBAAgB,IAC1C71K,KAAK+1K,kBAAkBL,IAE3B11K,KAAKojC,IAAMmyI,GAEfO,iBAAkB,SAAU50C,GACxB,GAAI80C,GAAYh2K,KAAKi2K,sBAAsB/0C,EAC3ClhI,MAAKk2K,iBAAiBF,EAAW90C,IAErC60C,kBAAmB,SAAU70C,GACzB,GAAI80C,GAAYh2K,KAAKi2K,sBAAsB/0C,EAC3ClhI,MAAKk2K,iBAAiBF,EAAW90C,IAErC+0C,sBAAuB,SAAU/0C,GAAV,GASVpmI,GACDq7K,EATJvmF,EAAUtgE,GAAKtvB,KAAKyoF,QACpBgwC,EAAS7oC,EAAQ6oC,OACjB/kH,EAAQwtH,EAAOtpI,OAAS,EACxBw+K,EAAK39C,EAAOpgI,OAASu3F,EAAQxvF,QAAQ8gI,OAAO9pE,SAC5C4+G,KACAK,EAAWn1C,EAAO,GAAG99F,IACrBg0B,EAAW3nD,GAAM4mK,EAASv/G,IAAM2hE,EAAOthE,OAAO9lD,EAAI+kK,EAAKC,EAASn9K,SAAWm9K,EAASn9K,SAAW,GAEnG,KADA88K,EAAUluK,KAAKsvD,GACNt8D,EAAI,EAAGA,EAAI4Y,EAAO5Y,IACnBq7K,EAAYj1C,EAAOpmI,EAAI,GAAGsoC,IAC9BizI,EAAWn1C,EAAOpmI,GAAGsoC,IACrBg0B,EAAW3nD,GAAM0mK,EAAUr/G,GAAKu/G,EAASr/G,IACzCg/G,EAAUluK,KAAKsvD,EAInB,OAFAA,GAAW3nD,GAAMgpH,EAAOthE,OAAO9lD,EAAI+kK,EAAKl1C,EAAOxtH,GAAO0vB,IAAI4zB,GAAKkqE,EAAOxtH,GAAO0vB,IAAIlqC,SAAW,GAC5F88K,EAAUluK,KAAKsvD,GACR4+G,GAEXE,iBAAkB,SAAUF,EAAW90C,GAArB,GAGVvoI,GAAMC,EAAO09K,EACRx7K,EAHLqkF,EAASn/E,KACT0T,EAAQsiK,EAAUp+K,MAEtB,KAASkD,EAAI,EAAGA,EAAI4Y,EAAO5Y,IAGvB,IAFAw7K,GAAaN,EAAUl7K,GACvBnC,EAAOC,EAAQkC,EACRw7K,EAAY,IAAM39K,GAAQ,GAAKC,EAAQ8a,IAC1C4iK,EAAYn3F,EAAOo3F,cAAcP,EAAWl7K,IAAKnC,EAAM29K,GACvDA,EAAYn3F,EAAOo3F,cAAcP,EAAWl7K,IAAKlC,EAAO09K,EAGhEt2K,MAAKyuI,aAAaunC,EAAW90C,IAEjCq1C,cAAe,SAAUP,EAAW3pG,EAAQ1qC,EAAU60I,GAAvC,GAGH5hF,GAFJ51F,EAASw3K,CAOb,OANIR,GAAUr0I,GAAY,IAClBizD,EAAYh2F,KAAKoT,IAAIgkK,EAAUr0I,GAAW3iC,GAC9CA,GAAU41F,EACVohF,EAAUr0I,IAAaizD,EACvBohF,EAAU3pG,IAAWuoB,GAElB51F,GAEXyvI,aAAc,SAAUunC,EAAW90C,GAArB,GAQNu1C,GAEK37K,EACD46C,EACAtS,EAXJ+7C,EAASn/E,KACT4vF,EAAUtgE,GAAKtvB,KAAKyoF,QACpBgwC,EAAS7oC,EAAQ6oC,OACjBsJ,EAAenyC,EAAQxvF,QAAQ8gI,OAC/BY,EAAcZ,EAAOtpI,OACrB8+K,EAAgB30C,EAAa3qE,SAC7Bu/G,EAAOl+C,EAAOthE,OAAO9lD,GAAKonH,EAAOpgI,OAASq+K,GAAiBx1C,EAAO,GAAG99F,IAAIlqC,QAG7E,KADA88K,EAAU,IAAM,EACPl7K,EAAI,EAAGA,EAAIgnI,EAAahnI,IACzB46C,EAAQwrF,EAAOpmI,GACfsoC,EAAMsS,EAAMtS,IAChBuzI,GAAQX,EAAUl7K,GAClB27K,EAAOt3F,EAAOy3F,YAAYxzI,EAAI2zB,GAAI0hE,EAAOt8H,QAAQ6yG,OAAO0nE,GAAgBC,EAAMA,EAAOvzI,EAAIlqC,SAAUw8C,EAAMygE,cAAgB/zF,IACrHszB,EAAMygE,cAAgB/zF,IAClB2/G,EAAax2C,QAAUqmC,KACvB6kD,EAAOh+C,EAAOpgI,OAASogI,EAAOthE,OAAOlkC,EAAIyjJ,GAE7ChhI,EAAMihE,OAAO,GAAIuT,IAAIusD,EAAOrzI,EAAInqC,QAAS09K,EAAMF,EAAME,MAEjD50C,EAAax2C,QAAUqmC,KACvB6kD,EAAOh+C,EAAOthE,OAAOlkC,EAAIwlG,EAAOpgI,OAASq+K,GAE7ChhI,EAAMihE,OAAO,GAAIuT,IAAIusD,EAAOrzI,EAAInqC,QAAS09K,EAAMF,EAAME,KAEzDA,GAAQvzI,EAAIlqC,UAGpBihI,aAAc,WAAA,GASDr/H,GACD80F,EACA6oC,EACA/iF,EACA4xC,EACAuvF,EAEIC,EAWI1zI,EACAivI,EACApjK,EACAkpH,EACA4+C,EAAap/K,EAAcq/K,EA9BvC73F,EAASn/E,KACT4+E,EAAM5+E,KACNm5I,EAAav6D,EAAIx+E,QAAQ+4I,WACzB1wD,EAAS7J,EAAI6J,OACb/0E,EAAQ+0E,EAAO7wF,OACfyT,EAAQ,CAGZ,KAFA+nH,GAAanvH,GAAGk2H,aAAahyH,KAAKnI,MAClCA,KAAKi3K,mBACIn8K,EAAI,EAAGA,EAAI4Y,EAAO5Y,IACnB80F,EAAUnH,EAAO3tF,GACjB29H,EAAS7oC,EAAQ6oC,OACjB/iF,EAAQk6C,EAAQl6C,MAChB4xC,EAAQmxC,EAAON,SACf0+C,GAAmBjnF,EAAQxvF,QAAQ+4I,gBAAkBllE,OAASklE,EAAWllE,MACzEv+B,IACIohI,EAAgB,GAAIh6E,KACpBE,QACI/oB,MAAO4iG,EACP59K,MAAOkgJ,EAAWlgJ,OAEtBszE,WACIrtE,KAAM+gJ,GACNrsH,MAAOg8D,EAAQqkF,kBAGnBv+H,EAAMt1C,QAAQuhC,WAAauiH,KACvB9gH,EAAMsS,EAAMtS,IACZivI,EAAc55C,EAAOthE,OACrBloD,EAAQwpH,EAAOpwC,MAAMf,GACrB6wC,EAAS,GAAIryC,IAAM1iD,EAAIyzB,GAAIzzB,EAAI+zB,SAAS9lD,GACxC0lK,EAAK,OAAQp/K,EAAM,OAAQq/K,EAAW,OAC1C/nK,EAAQwpH,EAAOt8H,QAAQ6yG,OAAOmqC,EAAWzkD,SAASrM,MAAMf,GACxDwvF,EAAc1wI,OAAOn3B,EAAMgkB,EAAGhkB,EAAMoC,GAChCqkC,EAAMygE,cAAgB/zF,IACtBzqB,EAAM,GAAImuF,IAAM1iD,EAAIyzB,GAAKsiF,EAAWzkD,QAAStxD,EAAI+zB,SAAS9lD,GAC1D2lK,EAAWltF,EAAauoF,EAAapjK,EAAOkpH,EAAQxgI,GACpDwgI,EAAS,GAAIryC,IAAMnuF,EAAIs7B,EAAI5nB,EAAO1T,EAAI0Z,GACtC2lK,EAAWA,GAAY7+C,EACvB6+C,EAAS/jJ,EAAIr0B,KAAKoT,IAAIglK,EAAS/jJ,EAAGklG,EAAOllG,GACrCksD,EAAO+3F,cAAcF,EAAUv+C,EAAOthE,OAAQshE,EAAOpgI,OAASgT,IAAU2rK,EAAS/jJ,EAAIwlG,EAAOthE,OAAOlkC,GACnG8jJ,EAAKt+C,EAAOthE,OAAOlkC,EAAIwlG,EAAOpgI,OAASgT,EACnCukF,EAAQxvF,QAAQ8gI,OAAO31C,QAAUg2D,GAC7Bw1B,EAAK5+C,EAAOllG,EACZ6jJ,EAAc7mF,OAAO8mF,EAAI9nK,EAAMoC,GAE/BylK,EAAc7mF,OAAOhhF,EAAMgkB,EAAY,EAAR5nB,EAAW4D,EAAMoC,GAGpDylK,EAAc7mF,OAAO8mF,EAAI9nK,EAAMoC,GAEnCylK,EAAc7mF,OAAOkoC,EAAOllG,EAAGt7B,EAAI0Z,KAEnC2lK,EAAS3lK,EAAI1Z,EAAI0Z,EACjBylK,EAAc7mF,OAAO+mF,EAAS/jJ,EAAG+jJ,EAAS3lK,MAG9C1Z,EAAM,GAAImuF,IAAM1iD,EAAI2zB,GAAKoiF,EAAWzkD,QAAStxD,EAAI+zB,SAAS9lD,GAC1D2lK,EAAWltF,EAAauoF,EAAapjK,EAAOkpH,EAAQxgI,GACpDwgI,EAAS,GAAIryC,IAAMnuF,EAAIs7B,EAAI5nB,EAAO1T,EAAI0Z,GACtC2lK,EAAWA,GAAY7+C,EACvB6+C,EAAS/jJ,EAAIr0B,KAAKlG,IAAIs+K,EAAS/jJ,EAAGklG,EAAOllG,GACrCksD,EAAO+3F,cAAcF,EAAUv+C,EAAOthE,OAAQshE,EAAOpgI,OAASgT,IAAU2rK,EAAS/jJ,EAAIwlG,EAAOthE,OAAOlkC,GACnG8jJ,EAAKt+C,EAAOthE,OAAOlkC,EAAIwlG,EAAOpgI,OAASgT,EACnCukF,EAAQxvF,QAAQ8gI,OAAO31C,QAAUg2D,GAC7Bw1B,EAAK5+C,EAAOllG,EACZ6jJ,EAAc7mF,OAAO8mF,EAAI9nK,EAAMoC,GAE/BylK,EAAc7mF,OAAOhhF,EAAMgkB,EAAY,EAAR5nB,EAAW4D,EAAMoC,GAGpDylK,EAAc7mF,OAAO8mF,EAAI9nK,EAAMoC,GAEnCylK,EAAc7mF,OAAOkoC,EAAOllG,EAAGt7B,EAAI0Z,KAEnC2lK,EAAS3lK,EAAI1Z,EAAI0Z,EACjBylK,EAAc7mF,OAAO+mF,EAAS/jJ,EAAG+jJ,EAAS3lK,KAGlDylK,EAAc7mF,OAAOt4F,EAAIs7B,EAAGt7B,EAAI0Z,GAChC8tE,EAAO83F,gBAAgBnvK,KAAKgvK,GAC5B33F,EAAOgjB,OAAOr+D,OAAOgzI,MAKrCjB,gBAAiB,SAAUv1K,GACvB,GAAI62K,GAAe72K,KAAe,CAClC,OAAO,UAAUsC,EAAGC,GAAb,GACCzL,IAASwL,EAAEhJ,OAAO6+H,OAAON,SAAW,KAAO,IAC3C52C,GAAU1+E,EAAEjJ,OAAO6+H,OAAON,SAAW,KAAO,GAChD,QAAQ/gI,EAAQmqF,GAAU41F,IAGlCP,YAAa,SAAUQ,EAAW3+C,EAAQ3hE,EAAIE,EAAIz8B,GAArC,GACLliC,GAASogI,EAAOpgI,OAChBg/K,EAAgB5+C,EAAOthE,OACvB6uB,EAAKqxF,EAAcpkJ,EACnBgzD,EAAKoxF,EAAchmK,EACnBH,EAAItS,KAAKoT,IAAIpT,KAAKC,IAAIonF,EAAKnvB,GAAKl4D,KAAKC,IAAIonF,EAAKjvB,GAClD,OAAI9lD,GAAI7Y,EACG++K,EAEJpxF,EAAKpnF,KAAKy4D,KAAKh/D,EAASA,EAAS6Y,EAAIA,IAAMqpB,EAAY,OAElE28I,cAAe,SAAU7uF,EAAOlxB,EAAQ9+D,GACpC,MAAOuG,MAAK8nC,IAAIywB,EAAOlkC,EAAIo1D,EAAMp1D,EAAG,GAAKr0B,KAAK8nC,IAAIywB,EAAO9lD,EAAIg3E,EAAMh3E,EAAG,GAAKzS,KAAK8nC,IAAIruC,EAAQ,IAEhG06J,iBAAkB,SAAU1qE,EAAOt/E,GAC/B,MAAO/I,MAAK+5H,aAAahxH,OAAO6sH,KAAK7sH,EAAQs/E,EAAMzqF,QAEvDq2K,eAAgB,SAAUnsC,GACtB,MAAOA,GAAgBqhB,MAa/Bx/B,GAAkBy/B,IACdhiE,WAAY,GACZ+xD,YACIlgJ,MAAO,EACPg7E,MAAO,UACPygB,QAAS,GAEbgkD,eACI7D,WACA3T,aAGRtmI,GAAWwuJ,GAASriJ,UAAWmiJ,IAC3BG,GAAcpC,GAAavmJ,QAC3B6H,OAAQ,WACJvI,KAAKs3K,eAAet3K,KAAK27H,SAE7B27C,eAAgB,SAAU37C,GAAV,GACRkwC,GAAclwC,EAAO,GACrB47C,EAAW,GAAInuB,IAASppJ,MACxB27H,OAAQA,EACRjnC,QAASm3E,EAAYn3E,QACrBtN,WAAYykF,EAAYzkF,WACxB+xD,WAAY0yB,EAAY1yB,WACxBxE,OAAQ30I,KAAKI,QAAQu0I,QAEzB30I,MAAK+/J,YAAYwX,IAErBxX,YAAa,SAAU9pC,EAAOjuD,GAC1Bi/E,GAAahjJ,GAAG87J,YAAY53J,KAAKnI,KAAMi2H,EAAOjuD,GAC9ClkC,GAAO9jC,KAAKI,QAAQu0I,OAAOnuH,MAAOyvG,EAAM4+C,gBAG5CvrB,GAAeL,GAAWvoJ,QAC1BkzJ,YAAa,WAAA,GAODsgB,GAGIE,EATRx1F,EAAM5+E,KACNq0K,EAAgBz1F,EAAIx+E,QAAQ8gI,OAC5BxrF,EAAQkpC,EAAIlpC,MACZ+iF,EAASz4H,KAAKy4H,OAAOt8H,QACrBmrF,EAAQmxC,EAAON,QACfziF,KACIw+H,EAAcx+H,EAAMtS,IAAIlqC,SACxBm7K,EAAc1yI,WAAaqpC,GAC3BytD,EAAOpgI,SAAWogI,EAAOpgI,OAASogI,EAAOnO,aAAe,EACpD8pD,EAAK37C,EAAOpwC,MAAMf,GACtB5xC,EAAMihE,OAAO,GAAIuT,IAAIkqD,EAAGnhJ,EAAGmhJ,EAAG/iK,EAAI6iK,EAAc,EAAGE,EAAGnhJ,EAAGmhJ,EAAG/iK,KAE5D43I,GAAWhlJ,GAAG2vJ,YAAYzrJ,KAAKnI,QAI3Cu1J,cAAe,SAAU98B,EAAQr4H,GAC7B,MAAOmhB,GAAQ4xG,aAAaxnH,QAAQ6tH,WAAWf,EAAQr4H,MAG/DupH,GAAkB2/B,IACdttB,SAAWzrC,SAAU,gBACrB2wC,QAAUv/F,SAAUqpC,GACpBuB,WAAartE,KAAM2iJ,MAEvBjnJ,GAAW0uJ,GAAaviJ,UAAW09I,IAC/B8E,GAA0B,GAC1BC,GAAaJ,GAAS1oJ,QACtB2uJ,SAAU,SAAUzxJ,EAAO66H,EAAQjpF,GAAzB,GAOFogD,GANAulF,EAAiBv6K,MAAe40C,EAAOmsF,QAAUxpH,MAAOq9B,EAAOr9B,OACnEnS,MAAKk1K,mBAAmBC,EAAgBv3K,EAAO4xC,GAC/CxvC,KAAK00K,iBAAiB92K,EAAOu3K,EAAgB3lI,GACxC5xC,GAAS4xC,EAAOhsC,WAAY,IAG7BosF,EAAU,GAAI05D,IAAa1rJ,EAAO66H,EAAQ08C,GAC9Cz+K,EAAEgK,OAAOkvF,EAASpgD,GAClBxvC,KAAK8jC,OAAO8rD,GACZ5vF,KAAKyoF,OAAO3gF,KAAK8nF,KAErB+mB,OAAQ,SAAUqgB,GAAV,GAYAwgD,GACAC,EACAC,EACK58K,EACDugJ,EAiBA51H,EAIJ6kG,EACAxnF,EACA/kC,EAAM1F,EAED2nK,EACD2X,EAzCJx4F,EAASn/E,KACTI,EAAUJ,KAAKI,QACfgjC,EAAM4zF,EAAU76H,QAChBkP,EAAQ,EACR+pK,EAAWx2K,KAAKoT,IAAIoxB,EAAInqC,QAASmqC,EAAIlqC,UACrCm8K,EAAeD,EAAW,EAC1BE,EAAiBF,EAAsB,IAAXA,EAC5Bz5C,EAASv7H,EAAQu7H,OACjB6e,EAAc7e,EAAO/jI,OACrB88F,EAAUnR,GAAenjF,EAAQs0F,QAAS4gF,EAK9C,KAJA5gF,EAAUA,EAAU2gF,EAAehqK,EAAQgqK,EAAehqK,EAAQqpF,EAC9D8iF,EAAYnC,EAAe3gF,EAC3B+iF,EAAoB,EAEf38K,EAAI,EAAGA,EAAI0/I,EAAa1/I,IACzBugJ,EAAgB1f,EAAO7gI,GACjB,IAANA,GACI4mF,GAAQ25D,EAAcq8B,YACtBA,EAAWr8B,EAAcq8B,SACzBF,GAAan8B,EAAcq8B,UAG/Bh2F,GAAQ25D,EAAct9I,MACtBy5K,GAAan8B,EAAct9I,KAE3B05K,IAEA/1F,GAAQ25D,EAAcv4G,SAAWhoC,IAAM0/I,EAAc,IACrDg9B,GAAan8B,EAAcv4G,OAYnC,KATK4+C,GAAQg2F,KACLjyJ,GAAe4vJ,EAAe3gF,IAAY8lD,EAAc,KAC5Dk9B,EAAyB,IAAdjyJ,EACX+xJ,GAAaE,GAEbptD,EAAcotD,EACd50I,EAAS,EAEb9iC,KAAK41K,iBACI5V,EAAM,EAAGA,EAAMxlB,EAAawlB,IAC7B2X,EAAkBh8C,EAAOqkC,GAC7BjiK,EAAOwlF,GAAeo0F,EAAgB55K,KAAMy5K,EAAYC,GACxDntD,GAAexnF,EACfzqC,EAASiyH,EAAcvsH,EACvBohF,EAAOy2F,cAAc9tK,MACjBwiH,YAAaA,EACbjyH,OAAQA,IAEZyqC,EAAS60I,EAAgB70I,QAAU,EACnCwnF,EAAcjyH,CAElB+wJ,IAASnlJ,GAAG0yG,OAAOxuG,KAAKnI,KAAMg3H,IAElCi9C,eAAgB,SAAUnsC,EAAe++B,EAAarsB,GAClD,MAAO1S,GAAgByhB,GAA0BvJ,IAA8B6mB,EAAc,IAAMrsB,EAAc,MAGzH7wB,GAAkB6/B,IACdpiE,WAAY,GACZ+xD,YACIlgJ,MAAO,EACPg7E,MAAO,UACPygB,QAAS,KAGb+0D,GAAgBJ,GAAY3oJ,QAC5B6H,OAAQ,WACJvI,KAAK43K,iBAAiB53K,KAAK27H,SAE/Bi8C,iBAAkB,SAAUj8C,GAAV,GACVkwC,GAAclwC,EAAO,GACrBk8C,EAAa,GAAIruB,IAAWxpJ,MAC5B27H,OAAQA,EACRjnC,QAASm3E,EAAYn3E,QACrBykD,WAAY0yB,EAAY1yB,WACxBxE,OAAQ30I,KAAKI,QAAQu0I,QAEzB30I,MAAK+/J,YAAY8X,MAGrBnuB,GAAkB,IAClBC,GAAoB1C,GAAavmJ,QACjCggK,WAAY,WACR1gK,KAAKkpK,sBAAwB,GAAIxjB,KAErCn9I,OAAQ,WACJvI,KAAK+hK,YAAY/hK,KAAK27H,QACtB37H,KAAK83K,kBACL93K,KAAKupK,eACLvpK,KAAK+3K,mBAETlU,UAAW,WAAA,GACHpwI,GAAOzzB,KAAKwnI,UACZzpF,EAAQtqB,EAAKsqB,QACb0lH,EAAgBhwI,EAAKrzB,QAAQE,QAAUy9C,EAAMrlD,IAAMqlD,EAAM/rC,IACzD6zH,EAAOpyG,EAAKwwG,QAAQw/B,GACpBtsG,EAASn3D,KAAK6vI,UAAU5L,QAAQ,GAAG9sE,OACnC8jF,EAAUxnH,EAAK2P,IAAIrG,UAAUo6B,EAAOlkC,EAAI4yG,EAAKhvE,GAAIM,EAAO9lD,EAAIw0H,EAAK/uE,GACrErjC,GAAKkjF,OAAOskC,IAEhB88B,gBAAiB,WAAA,GAOTrnC,GAAUsnC,EAcVj6H,EAKAypF,EAzBAslC,EAAU9sK,KAAKkpK,sBACf6D,EAAeD,EAAQnuH,QACvB6wE,EAAcxvH,KAAKi4K,kBACnB5oD,kBAAkB,EAClB1rF,WAGA6rF,GAAYtwH,OAAS4kJ,IACrBpT,EAAWnvH,EAAQ+zG,qBACnB0iD,GACIhmK,IAAK,GACLtZ,IAAK,KAGTg4I,EAAWnvH,EAAQ8zG,iBACnB2iD,GACIhmK,IAAK,EACLtZ,IAAK,IAGTqlD,EAAQ+uH,EAAQnuH,MAAMzvC,OAAS69J,GAAgBiL,EAC/Cj6H,GAASgvH,IACThvH,EAAM/rC,IAAMpT,KAAKoT,IAAI+rC,EAAM/rC,IAAK+6J,EAAa/6J,KAC7C+rC,EAAMrlD,IAAMkG,KAAKlG,IAAIqlD,EAAMrlD,IAAKq0K,EAAar0K,MAE7C8uI,EAAY,GAAIkJ,GAAS3yF,EAAM/rC,IAAK+rC,EAAMrlD,IAAK82H,EAAaxvH,KAAK+5H,cACrE/5H,KAAKwnI,UAAYA,EACjBxnI,KAAK8/J,WAAWt4B,IAEpBy7B,WAAY,WAAA,GAYJiV,GAGAC,EAdAv5F,EAAM5+E,KACNI,EAAUw+E,EAAIx+E,QAAQ0jI,SACtB0D,EAAY5oD,EAAI4oD,UAChBqI,EAAYjxD,EAAIixD,UAChBzsG,EAAMw7C,EAAIx7C,IACVkyI,EAAiB12K,KAAKoT,IAAIoxB,EAAInqC,QAASmqC,EAAIlqC,UAAYwwJ,GACvDh1D,EAAUw0B,GAAW9oH,EAAQs0F,YAAe4gF,GAC5C/4C,EAAan5F,EAAIjnC,QAAQs7H,MAAM/iC,GAC/BumD,EAAU1e,EAAWpgI,OACzB8+I,GAAQjkF,GAAKikF,EAAQnkF,GAAKl4D,KAAKoT,IAAIipI,EAAQhiJ,QAASgiJ,EAAQ/hJ,UAC5D+hJ,EAAQ1vD,MAAMgxC,EAAYjrH,GAAG05D,GACzBktG,EAAej9B,EAAQ9+I,QAAQm7H,OAAO,EAAG2jB,EAAQ/hJ,SAAW,GAChE22I,EAAUl5B,OAAOskC,GACjBzT,EAAU7wB,OAAOuhE,GACbC,EAAa3wC,EAAUtF,UAAUhpI,SAAWsuI,EAAUpkG,IAAIlqC,SAC9DsuI,EAAU7wB,OAAO6wB,EAAUpkG,IAAIq0F,OAAQn4H,IAAK64K,KAC5Cn4K,KAAKi7I,QAAUA,EACfj7I,KAAK6jK,UAAU5oB,IAEnBkrB,cAAe,WACX,MAAOnmK,MAAKojC,OAGhBwmH,GAAoBrD,GAAa7lJ,QACjCqxJ,UAAW,SAAUruB,EAAOC,GAAjB,GACHy0C,GAAc10C,EAAMvsE,OAAO9lD,EAAIsyH,EAAM7sE,GACrC+uE,EAAO//C,GAAMixC,SAAS2M,EAAMvsE,OAAQusE,EAAMt8C,WAAYgxF,EAC1D,OAAO,IAAIluD,IAAI2b,EAAK5yG,EAAG4yG,EAAKx0H,EAAGw0H,EAAK5yG,EAAG4yG,EAAKx0H,MAGpDs4G,GAAkBigC,IAAqB/lH,MAAM,IACzCgmH,GAAiBd,GAAiBroJ,WACtCmpJ,GAAe9iJ,UAAUgrJ,UAAYnI,GAAkB7iJ,UAAUgrJ,UACjEpoC,GAAkBkgC,IAAkBhmH,MAAM,IACtCimH,GAAyBtE,GAAkB9kJ,QAC3C02J,UAAW,SAAUC,GACjB,GAAIlgG,GAASn3D,KAAKq4K,kBAClBhhB,GAASpnE,OAAO94B,EAAOlkC,EAAGkkC,EAAO9lD,IAErCgnK,iBAAkB,WAAA,GACVxoC,GAAY7vI,KAAKpG,OAAOkqI,SAAS+L,UACjC14E,EAAS04E,EAAUzsG,IAAI+zB,QAC3B,OAAOA,IAEXw/F,eAAgB,WAAA,GAGJx/F,GACA69F,EACAr0B,EAJJ5wC,EAAW/vF,KAAK42J,eASpB,OARK7mE,KACG54B,EAASn3D,KAAKq4K,mBACdrjB,EAAiB,GAAIzzI,GAAQk0G,iBAAe,IAC5CkL,EAAamkB,GAAY/9I,UAAU0hF,OAAOtgF,KAAKnI,MACnD2gI,EAAW74H,KAAKqvD,GAChB44B,EAAW/vF,KAAK42J,gBAAkB5B,EAAet2G,QAAQiiF,GACzD5wC,EAAShkE,OAENgkE,KAGXg6D,GAAmBzE,GAAY5kJ,QAC/B+nF,OAAQ,WAAA,GACA7J,GAAM5+E,KACN6vI,EAAYjxD,EAAIhlF,OAAOkqI,SAAS+L,UAChC0mB,EAAc33E,EAAI23E,YAClBp/F,EAAS04E,EAAUzsG,IAAI+zB,SACvBsxB,EAASq8D,GAAY/9I,UAAU0hF,OAAOtgF,KAAKnI,KAAMu2J,EASrD,OARA9tE,GAAO1gF,SACHovD,EAAOlkC,EACPkkC,EAAO9lD,IAEXo3E,EAAO3gF,MACHqvD,EAAOlkC,EACPkkC,EAAO9lD,IAEJo3E,KAGXuhE,GAAiBH,GAAenpJ,QAChC60J,cAAe,SAAU50B,EAAY0a,EAAekU,GAArC,GAEP3/D,GADA91F,GAASuhJ,EAAc12C,UAAY7qG,KAOvC,OAJI81F,GADA91F,IAAUinJ,GACA,GAAI+I,IAAuBnpB,EAAY,OAAM,GAAO0a,EAAekU,GAEnE,GAAIxF,IAAiBppB,KAAgB0a,EAAekU,IAItEkN,mBAAoB,SAAU7+J,EAAO63J,GACjC,GAAIgd,EAUJ,OATI5/G,GAASj1D,EAAMq1B,IAAMwiI,IAAkB5U,KACvC4xB,GACIx/I,EAAGr1B,EAAMq1B,EACT5hB,EAAGzT,EAAMyT,GAETokJ,IAAkBzlJ,KAClByiK,EAAaphK,EAAI,IAGlBohK,GAEX3d,oBAAqB,SAAUn5B,GAC3B,MAAOA,GAAO85B,eAAiBzlJ,IAEnCsoK,qBAAsB,WAAA,GAGT36K,GAFLwhF,EAASn/E,KACT27H,EAAS37H,KAAKI,QAAQu7H,MAC1B,KAASh+H,EAAM,EAAGA,EAAMg+H,EAAO/jI,OAAQ+F,IACnC,GAAIwhF,EAAO21E,oBAAoBn5B,EAAOh+H,MAAUmjJ,GAC5C,OAAO,GAInBwU,WAAY,SAAU7sE,GAAV,GAIK9qF,GACD0qF,EAEIzqF,EANZuhF,EAASn/E,IAEb,IADAyoF,EAAOzqE,KAAKo/H,GACRp9I,KAAKs4K,uBACL,IAAS36K,EAAM,EAAGA,EAAM8qF,EAAO7wF,OAAQ+F,IAC/B0qF,EAAQI,EAAO9qF,GACf0qF,IACIzqF,EAAQyqF,EAAMzqF,MACbi1D,EAASj1D,EAAMyT,IAAM8tE,EAAO21E,oBAAoBzsE,EAAMszC,UAAYmlB,UAC5Dr4D,GAAO9qF,GAK9B,OAAO8qF,MAMXwhE,GAAgBN,GAAkBjpJ,QAClCo3K,gBAAiB,WACb,GAAIjoC,GAAY,GAAItuH,GAAQ4zG,UAAUn1H,KAAKI,QAAQu8J,MAAO38J,KAAK+5H,aAC/D/5H,MAAK6vI,UAAYA,EACjB7vI,KAAKmiI,MAAQ0N,EACb7vI,KAAK8/J,WAAWjwB,IAEpBooC,iBAAkB,SAAU/9H,GACxB,MAAOt/C,IAAWs/C,GACdqqF,gBAAkBrlI,KAAM6yH,IACxBuS,gBAAkBplI,KAAM6yH,KACzB/xH,KAAKI,QAAQy8J,QAEpBkb,gBAAiB,WACbpuB,GAAkB1lJ,GAAG8zK,gBAAgB5vK,KAAKnI,MAC1CA,KAAKoiI,MAAQpiI,KAAKwnI,WAEtBu4B,YAAa,SAAU9pC,EAAOjuD,GAC1BhoE,KAAKkpK,sBAAsB36H,OAAO0nF,EAAMomC,aACxCpV,GAAalgJ,UAAUg5J,YAAY53J,KAAKnI,KAAMi2H,EAAOjuD,IAEzDuhG,aAAc,WAAA,GACN5tC,GAAS37H,KAAK+iK,oBAAoB/iK,KAAK27H,QACvC3zD,EAAOhoE,KAAKihK,MAAM,EACtBjhK,MAAKsqK,gBAAgBlvB,EAAmBzf,GAASomB,KAAc/5E,GAC/DhoE,KAAK6yK,mBAAmBz3B,EAAmBzf,GAASqmB,KAAiBh6E,GACrEhoE,KAAK8pK,gBAAgB1uB,EAAmBzf,GAASmmB,KAAc95E,IAEnEsiG,gBAAiB,SAAU3uC,EAAQ3zD,GAC/B,GAAsB,IAAlB2zD,EAAO/jI,OAAX,CAGA,GAAIu0K,GAAY,GAAItiB,IAAe7pJ,MAAQ27H,OAAQA,GACnD37H,MAAK+/J,YAAYoM,EAAWnkG,KAEhC6qG,mBAAoB,SAAUl3C,EAAQ3zD,GAClC,GAAsB,IAAlB2zD,EAAO/jI,OAAX,CAGA,GAAI2gL,GAAe,GAAI3uB,IAAkB5pJ,MAAQ27H,OAAQA,GACzD37H,MAAK+/J,YAAYwY,EAAcvwG,KAEnC8hG,gBAAiB,SAAUnuC,EAAQ3zD,GAC/B,GAAsB,IAAlB2zD,EAAO/jI,OAAX,CAGA,GAAIw0K,GAAY,GAAIpiB,IAAehqJ,MAAQ27H,OAAQA,GACnD37H,MAAK+/J,YAAYqM,EAAWpkG,KAEhCk/F,eAAgB,SAAUjxC,EAAOhuH,EAAG+kK,GAApB,GACRzY,GAASt+B,EAAMg3C,kBAAkBhlK,GACjCogF,EAAQ,GAAIvC,IAAMyuE,EAAOthI,EAAGshI,EAAOljJ,GACnCihI,EAAStyI,KAAKmiI,MAAMiK,SAAS/jD,GAC7BkqD,EAASvyI,KAAKoiI,MAAMgK,SAAS/jD,EAClB,QAAXiqD,GAA8B,OAAXC,GACnBtc,EAAMjuH,QAAQglK,GACVj1K,QAAS8qF,GAAa56E,GACtBgrB,EAAGq/G,EACHjhI,EAAGkhI,KAIfuuB,iBAAkB,eAGtBn3C,GAAkBsgC,IACd0S,SACAE,WAEJjiK,GAAWqvJ,GAAcljJ,UAAWmgJ,IAChCgD,GAAiB9E,GAAU1kJ,QAC3BqxJ,UAAW,SAAUC,EAAcF,GAAxB,GACHsmB,GAAcpmB,EAAa76F,OAAO9lD,EAAIygJ,EAAUh7F,GAChD+uE,EAAO//C,GAAMixC,SAASi7B,EAAa76F,OAAQ66F,EAAa75B,SAAUigD,EACtE,OAAO,IAAIluD,IAAI2b,EAAK5yG,EAAG4yG,EAAKx0H,EAAGw0H,EAAK5yG,EAAG4yG,EAAKx0H,IAEhDkkJ,cAAe,SAAU50B,EAAY0a,EAAekU,GAArC,GAEPC,GAMA5/D,EAPA91F,EAAQuhJ,EAAcvhJ,KAW1B,OARI01J,GADA11J,IAAUinJ,GACEiE,GAEAF,GAEZl1D,EAAU,GAAI4/D,GAAU7uB,EAAY0a,EAAekU,GACnD5uB,EAAW/oI,SAAWyjJ,EAAc7/I,KAAK5D,SACzCg4F,EAAQxvF,QAAQ8vF,QAAS,GAEtBN,KAGf+5B,GAAkBugC,IAAkBrmH,MAAM,IACtCsmH,GAAyB3E,GAAkB9kJ,QAC3C02J,UAAW,eAGXhN,GAAmB9E,GAAY5kJ,QAC/B+nF,OAAQ,WACJ,MAAOq8D,IAAY/9I,UAAU0hF,OAAOtgF,KAAKnI,KAAMA,KAAKu2J,gBAGxDlM,GAAiBH,GAAexpJ,QAChC60J,cAAe,SAAU50B,EAAY0a,EAAekU,EAAUmH,GAA/C,GAGP9mE,GAKI2mE,EAPJnG,EAAYpwJ,KAAKI,QAAQgwJ,UACzBt2J,GAASuhJ,EAAc12C,UAAY7qG,KAavC,OAXIA,KAAUinJ,IACVnxD,EAAU,GAAIu6D,IAAuBxpB,EAAY+1B,EAAatG,EAAW/U,EAAekU,GACxF3/D,EAAQxvF,QAAQ8vF,QAAS,IAGrBkgE,GAAab,EAAW,GAAKmH,IAC7BH,EAAcG,EAAY/1B,WAAWn6H,MAAM,GAAGlG,WAElDqgI,EAAW74H,KAAK64H,EAAW,IAC3B/wC,EAAU,GAAIw6D,IAAiBzpB,EAAY41B,EAAalb,EAAekU,IAEpE3/D,GAEXklE,oBAAqB,SAAUn5B,GAC3B,MAAOA,GAAO85B,eAAiBzlJ,MAGnCs6I,GAAehB,GAAa5oJ,QAC5BC,KAAM,SAAU/C,EAAOwC,GACnBkpJ,GAAarlJ,GAAGtD,KAAKwH,KAAKnI,KAAMpC,EAAO,KAAMwC,MAGrDupH,GAAkB2gC,IACdtuB,SAAWzrC,SAAU,QACrB2wC,QAAU9pE,SAAU,MAEpBmzF,GAAqBn3B,GAAa1yH,QAClCi2G,OAAQ,SAAU8hB,GAAV,GAUK39H,GACD09K,EAVJ55F,EAAM5+E,KACNI,EAAUw+E,EAAIx+E,QACdzF,EAAWikF,EAAIjkF,SACfkP,EAAMzJ,EAAQyJ,IACdqsG,EAAU91G,EAAQ81G,QAClBxiG,EAAQ/Y,EAAS/C,OACjB23I,EAAQ77H,EAAQ7J,EAAMqsG,GAAWxiG,EAAQ,GACzC+7H,EAAYhX,EAAOnxC,MAAQioD,EAC3BjoD,EAAQmxC,EAAOrxC,WAAaqoD,GAAa5lI,EAAM,EACnD,KAAS/O,EAAI,EAAGA,EAAI4Y,EAAO5Y,IACnB09K,EAAa//C,EAAOt8H,QACxBq8K,EAAWpxF,WAAaE,EACxBkxF,EAAWlxF,MAAQmoD,EACf90I,EAASG,GAAG29H,SACZ+/C,EAAWngL,OAASsC,EAASG,GAAG29H,OAAOpgI,QAE3CsC,EAASG,GAAG67G,OAAO6hE,GACnB79K,EAASG,GAAG29H,OAAS+/C,EACrBlxF,GAASmoD,EAAYA,EAAYv5B,KAI7CyT,GAAkB4gC,IACd1gJ,IAAK,EACLqsG,QAAS,IAETs0C,GAAmBp3B,GAAa1yH,QAChCi2G,OAAQ,SAAU8hB,GAAV,GAQK39H,GACD29K,EARJ75F,EAAM5+E,KACNM,EAAUs+E,EAAIx+E,QAAQE,QACtB3F,EAAWikF,EAAIjkF,SACfs/H,EAAgBt/H,EAAS/C,OACzBR,EAAQkJ,EAAU25H,EAAgB,EAAI,EACtCh7F,EAAO3+B,KAAe,CAE1B,KADAN,KAAKojC,IAAM,GAAI8mF,IACNpvH,EAAI1D,EAAO0D,GAAK,GAAKA,EAAIm/H,EAAen/H,GAAKmkC,EAC9Cw5I,EAAc99K,EAASG,GAAG29H,OAC9BggD,EAAYrxF,WAAaqxC,EAAOrxC,WAChCqxF,EAAYnxF,MAAQmxC,EAAOnxC,SAInCmjE,GAAgBzE,GAAStlJ,QACzB8uJ,UAAW,WACP,MAAOlF,KAEX2O,YAAa,WACT,MAAO1O,KAEX2O,UAAW,WACP,MAAO1O,KAEXwH,aAAc,SAAUpb,EAAcpN,GAClC,MAAOoN,GAAa3S,QAAQuF,IAEhCuoB,UAAW,SAAUC,EAAcF,GAAxB,GACHjsB,GAAOmsB,EAAa71J,QACpBkV,EAAI2gJ,EAAa76F,OAAO9lD,CAG5B,OAFAw0H,GAAKxtI,OAASgZ,EAAIygJ,EAAUh7F,GAC5B+uE,EAAKvb,YAAcj5G,EAAIygJ,EAAU96F,GAC1B6uE,GAEXssB,YAAa,SAAU9pE,EAAO0pE,GAC1B1pE,EAAMowC,OAASs5B,EACf1pE,EAAMsuB,UAEV0jB,gBAAiB,WACbr6H,KAAKI,QAAQmsE,UAAUpV,OAASn3D,KAAKojC,IAAI40F,SAAS7gE,SAClD6uF,GAAS/hJ,GAAGo2H,gBAAgBlyH,KAAKnI,SAGzCyqJ,GAAc1jJ,UAAU4vG,OAAS6tC,GAAiBz9I,UAAU4vG,OAC5DgT,GAAkB8gC,IACd5mH,MAAM,EACN0oC,WAAartE,KAAM,SAEnBwrJ,GAAgBf,GAAkBjpJ,QAClCo3K,gBAAiB,WACb,GAAIlhC,GAAe,GAAIr1H,GAAQ2zG,kBAAkBl1H,KAAKI,QAAQw2I,aAAc52I,KAAK+5H,aACjF/5H,MAAK6vI,UAAY+G,EACjB52I,KAAK42I,aAAeA,EACpB52I,KAAK8/J,WAAWlpB,GAChB52I,KAAKqpK,sBACLrpK,KAAKspK,4BAET2O,iBAAkB,SAAU/9H,GAaxB,MAZIl6C,MAAK04K,eACL99K,GAAWs/C,GACPqqF,gBAAkBrlI,KAAM6yH,IACxBuS,gBAAkBplI,KAAM6yH,MAG5B/xH,KAAK24K,eACL/9K,GAAWs/C,GACPm1E,kBAAkB,EAClB6R,QAAUn4H,OAAQ,QAGnBnO,GAAWs/C,EAAUl6C,KAAKI,QAAQonI,YAE7C6hC,oBAAqB,WACjB1hB,GAAoB5gJ,UAAUsiK,oBAAoBlhK,KAAKnI,KAAMA,KAAKihK,QAEtEqI,yBAA0B,WACtB3hB,GAAoB5gJ,UAAUuiK,yBAAyBnhK,KAAKnI,KAAMA,KAAKihK,QAE3E4J,aAAc,SAAUxvB,GACpB,MAAOA,IAEXkuB,aAAc,WAAA,GACN5tC,GAAS37H,KAAK+iK,oBAAoB/iK,KAAK27H,QACvC3zD,EAAOhoE,KAAKihK,MAAM,EACtBjhK,MAAK8pK,gBAAgB1uB,EAAmBzf,GAASsmB,KAAcj6E,GAC/DhoE,KAAKsqK,gBAAgBlvB,EAAmBzf,GAASwmB,KAAcn6E,GAC/DhoE,KAAK+pK,eAAe3uB,EAAmBzf,GAASumB,KAAgBl6E,IAEpE4wG,aAAc,SAAUj9C,GAAV,GAIFi3C,GACA3mF,EAJJ7rF,GAAYu7H,OAAQA,GACpBkwC,EAAclwC,EAAO,EAUzB,OATIkwC,KACI+G,EAAiB5yK,KAAK+iK,oBAAoBpnC,GAC1C1vC,EAAQ4/E,EAAY5/E,MACxB7rF,EAAQgwJ,UAAYnkE,GAAS2mF,EAAeh7K,OAAS,EACrDwI,EAAQ0vJ,aAAe7jE,GAAwB,SAAfA,EAAM/sF,MAAmB0zK,EAAeh7K,OAAS,EAC7EwI,EAAQ0vJ,eACR9vJ,KAAK24K,eAAgB,IAGtBv4K,GAEX0pK,gBAAiB,SAAUnuC,EAAQ3zD,GAC/B,GAAsB,IAAlB2zD,EAAO/jI,OAAX,CAGA,GAAIw0K,GAAY,GAAI/hB,IAAerqJ,KAAMA,KAAK44K,aAAaj9C,GAC3D37H,MAAK+/J,YAAYqM,EAAWpkG,KAEhCsiG,gBAAiB,SAAU3uC,EAAQ3zD,GAC/B,GAAsB,IAAlB2zD,EAAO/jI,OAAX,CAGA,GAAIu0K,GAAY,GAAIjiB,IAAelqJ,KAAMA,KAAK44K,aAAaj9C,GAC3D37H,MAAK+/J,YAAYoM,EAAWnkG,KAEhC+hG,eAAgB,SAAUpuC,EAAQ3zD,GAAlB,GAIR6jG,GACAzrK,EAGA4rK,CAPkB,KAAlBrwC,EAAO/jI,SAGPi0K,EAAclwC,EAAO,GACrBv7H,EAAUJ,KAAK44K,aAAaj9C,GAChCv7H,EAAQyJ,IAAMgiK,EAAYhiK,IAC1BzJ,EAAQ81G,QAAU21D,EAAY31D,QAC1B81D,EAAW,GAAIvhB,IAAczqJ,KAAMI,GACvCJ,KAAK+/J,YAAYiM,EAAUhkG,GAC3BhoE,KAAK04K,eAAgB,IAEzB5pB,mBAAoB,WAChB,MAAO9uJ,MAAK42I,cAEhBswB,eAAgB,SAAUjxC,EAAOhuH,EAAG+kK,GAApB,GACRzY,GAASt+B,EAAMg3C,kBAAkBhlK,GACjCogF,EAAQ,GAAIvC,IAAMyuE,EAAOthI,EAAGshI,EAAOljJ,GACnCuqH,EAAW57H,KAAK42I,aAAa5O,YAAY3/C,GACzCzqF,EAAQoC,KAAKwnI,UAAU4E,SAAS/jD,EACnB,QAAbuzC,GAA+B,OAAVh+H,GACrBq4H,EAAMjuH,QAAQglK,GACVj1K,QAAS8qF,GAAa56E,GACtB2zH,SAAUA,EACVh+H,MAAOA,KAInBkjK,iBAAkB,eAGtBlmK,GAAW8vJ,GAAc3jJ,UAAWmgJ,IAChC6Y,YAAapY,GAAoB5gJ,UAAUg5J,YAC3C6K,gBAAiBjjB,GAAoB5gJ,UAAU6jK,kBAEnDjhD,GAAkB+gC,IACd9T,cAAgBhQ,eAChBY,eAEAmjB,GAAgBv3B,GAAa1yH,QAC7BC,KAAM,SAAU/C,EAAOwC,EAAS+0K,GAC5B/hD,GAAanvH,GAAGtD,KAAKwH,KAAKnI,KAAMI,GAChCJ,KAAKpC,MAAQA,EACboC,KAAKI,QAAQ+R,MAAQgjK,EAAehjK,OAExCwkG,OAAQ,SAAUkiE,GAAV,GACApwF,GAASzoF,KAAKyoF,OACd/yC,EAAQ11C,KAAKrF,SAAS,EAC1BqF,MAAKojC,IAAM,GAAI8mF,IAAIzhC,EAAO,GAAGx1D,EAAGw1D,EAAO,GAAGp3E,EAAGo3E,EAAO,GAAGx1D,EAAGw1D,EAAO,GAAGp3E,GAChEqkC,GACAA,EAAMihE,OAAO,GAAIuT,IAAI2uD,EAAShiH,GAAI4xB,EAAO,GAAGp3E,EAAGwnK,EAAS9hH,GAAI0xB,EAAO,GAAGp3E,KAG9E8oH,aAAc,WAAA,GAGNh4B,GAFAhjB,EAASn/E,KACTI,EAAUJ,KAAKI,OAEnBgzH,IAAanvH,GAAGk2H,aAAahyH,KAAKnI,MAE9BmiG,EADA/hG,EAAQ+hG,OACC/hG,EAAQ+hG,QACby5B,SAAU57H,KAAK47H,SACfn1G,SAAUzmB,KAAKymB,SACf7oB,MAAOoC,KAAKpC,MACZ+9H,OAAQ37H,KAAK27H,OACb3iI,WAAYgH,KAAKhH,WACjByvF,OAAQzoF,KAAKyoF,OACbroF,QAASA,EACT8H,OAAQlI,KAAK45H,YACbO,aAAc,WACV,MAAOh7C,GAAO25F,gBAIb94K,KAAK84K,aAEd32E,GACAniG,KAAKmiG,OAAOr+D,OAAOq+D,IAG3B22E,WAAY,WAAA,GACJ14K,GAAUJ,KAAKI,QACfi8H,EAASj8H,EAAQi8H,OACjBr1F,EAAO81D,GAAKiS,WAAW/uG,KAAKyoF,QAC5BsU,MACI9oB,MAAO7zE,EAAQ6zE,MACf/vC,QAAS9jC,EAAQ8jC,SAErB84D,QACI/oB,MAAOooD,EAAOpoD,MACd/vC,QAASm4F,EAAOn4F,QAChBjrC,MAAOojI,EAAOpjI,SAEnBwzE,OACH,OAAOzlC,IAEXq0F,gBAAiB,SAAUvhI,GACvB,MAAOgjG,IAAKiS,WAAW/uG,KAAKyoF,OAAQ3uF,IAExCg6J,gBAAiB,WACb,MAAO9zJ,MAAKmiG,OAAOxnG,SAAS,IAEhC+gI,oBAAqB,WACjB,GAAI10F,GAAO81D,GAAKiS,WAAW/uG,KAAKyoF,QAAQhc,OACxC,QACIrsE,QAASJ,KAAKI,QACd4mC,KAAMA,IAGdgtH,cAAe,WACX,GAAI5wH,GAAMpjC,KAAKojC,GACf,QACIilD,MAAO,GAAIvC,IAAM1iD,EAAI+zB,SAASlkC,EAAGmQ,EAAI0zB,IACrCy0B,OACI1sD,WAAY,SACZjD,SAAU,SAItB03H,YAAa,SAAUvqJ,GACnB,GAAIs/E,GAAQroF,IACZ,OAAOqoF,GAAMkpE,MAAMwB,iBAAiB1qE,EAAOt/E,MAGnD4gH,GAAkBghC,IACd12E,MAAOq9C,GACP+K,QAAUpjI,MAAO,KAErB2B,GAAW+vJ,GAAc5jJ,UAAW09I,IAChCmG,GAAcx3B,GAAa1yH,QAC3BC,KAAM,SAAUmjI,EAAU1jI,GACtBgzH,GAAanvH,GAAGtD,KAAKwH,KAAKnI,KAAMI,GAChCJ,KAAK8jI,SAAWA,EAChB9jI,KAAKyoF,UACLzoF,KAAKkhI,UACLlhI,KAAK60K,eACL70K,KAAKuI,UAETwqJ,iBAAkB,SAAU1qE,EAAOt/E,GAC/B,MAAO/I,MAAK+5H,aAAahxH,OAAO6sH,KAAK7sH,EAAQs/E,EAAMzqF,QAEvD2K,OAAQ,WAAA,GAQAozH,GACAngI,EAIAq7G,EACAzoE,EACAq6C,EACK3tF,EACD6hI,EAIAntF,EAWA5xC,EACAgyF,EACAl6C,EAjCJypC,EAASn/E,KACT4+E,EAAM5+E,KACNI,EAAUw+E,EAAIx+E,QACds3I,EAAe94D,EAAIklD,SAAS1jI,QAAQs3I,YAMxC,IALqB,SAAjBA,IACAA,MAEA/b,EAASv7H,EAAQu7H,OAAO,GACxBngI,EAAOmgI,EAAOngI,KAOlB,IAHIq7G,EAAQimC,EAAanhB,GACrBvtF,EAAQyoE,EAAMzoE,MACdq6C,EAASouB,EAAMpuB,OACV3tF,EAAI,EAAGA,EAAI2tF,EAAO7wF,OAAQkD,IAC3B6hI,EAAYl0C,EAAO3tF,GAClB6hI,IAGDntF,EAASmtF,EAAUntF,OAClBtzC,GAAWy/H,EAAO1nD,SACnB0nD,EAAO1nD,MAAQzkC,EAAOykC,OAASyjE,EAAa58I,EAAI48I,EAAa9/I,SAEjE43C,EAAS50C,IACLuX,MAAOrX,EACPy2J,MAAOpyE,EACPw8C,OAAQA,EACRl1G,SAAUjrB,EAAKV,GACf9B,WAAY2jI,EAAU/+H,MAAQwwC,GAC/BoB,GAAUhsC,QAASm5H,EAAUn5H,UAC5B5F,EAAQ++H,EAAUsgB,YAAYr/I,MAC9BgyF,EAAUzQ,EAAOo2E,cAAc33J,EAAO4xC,GACtCkG,EAAQypC,EAAOq5E,YAAY56J,EAAO4xC,GAClCogD,GAAWl6C,GACXk6C,EAAQ9rD,OAAO4R,KAI3Bw/H,mBAAoB,SAAU90K,EAASxC,EAAO4xC,GAC1C,GAAImsF,GAASnsF,EAAOmsF,MACpBue,GAAY95I,GACRxC,MAAOA,EACP+9H,OAAQA,EACRl1G,SAAU+oB,EAAO/oB,SACjBtU,MAAOq9B,EAAOr9B,QAEd+nC,SAAUyhF,EAAO6iB,UACjBnE,UACI,OACA,UACA,WACA,SACA,aAIZkb,cAAe,SAAU33J,EAAO4xC,GAAjB,GAKHogD,GAJJs/D,EAAgBt0J,MAAe40C,EAAOmsF,OAG1C,IAFA37H,KAAKk1K,mBAAmBhmB,EAAetxJ,EAAO4xC,GAC9CxvC,KAAK00K,iBAAiB92K,EAAOsxJ,EAAe1/G,GACxCA,EAAOhsC,WAAY,EAKnB,MAJIosF,GAAU,GAAI+6D,IAAc/sJ,EAAOsxJ,EAAe1/G,GACtD94C,EAAEgK,OAAOkvF,EAASpgD,GAClBxvC,KAAK8jC,OAAO8rD,GACZ5vF,KAAKyoF,OAAO3gF,KAAK8nF,GACVA,GAGf4oE,YAAa,SAAU56J,EAAO4xC,GAAjB,GAMD0jH,GAaI6gB,EAWJ1b,EA7BJ18B,EAASnsF,EAAOmsF,OAChBl1G,EAAW+oB,EAAO/oB,SAClBy6G,EAAStmI,MAAeoF,KAAKI,QAAQ8gI,OAAQvF,EAAOuF,QACpD9rG,EAAOx3B,CACX,IAAIsjI,EAAO19H,QA2BP,MA1BI0vJ,GAAgB9pC,GAAY8X,GAC5BgyB,EACA99H,EAAO89H,GACHzsI,SAAUA,EACV7oB,MAAOA,EACP5E,WAAYw2C,EAAOx2C,WACnB4iI,SAAUpsF,EAAOosF,SACjBD,OAAQA,IAELuF,EAAOn4H,SACdqsB,EAAOp1B,KAAK8jI,SAAS/J,aAAahxH,OAAO6sH,KAAKsL,EAAOn4H,OAAQqsB,IAE5D8rG,EAAOjtD,QACJ8/F,EAAkB,GAAIt/F,IAAMknD,EAAO1nD,OAAOwL,iBAE1CyhD,EAAOjtD,MADP8/F,EAAkB,IACHxiD,GAEAD,GAEd4P,EAAOliC,aACRkiC,EAAOliC,WAAa28B,EAAO1nD,QAGnCj0E,KAAKk1K,mBAAmBh0C,EAAQtjI,EAAO4xC,GACnC6oH,EAAU,GAAIvkC,IAAQ1+F,EAAMx6B,IAAa+wF,OAAQu1C,EAAOv/F,UAAYu/F,IACxElhI,KAAKkhI,OAAOp5H,KAAKuwJ,GACVA,GAGf0gB,aAAc,WAAA,GAMDj+K,GACD46C,EACA61C,EAEItyF,EATRioI,EAASlhI,KAAKkhI,OACdxsC,GACA/7F,KAAM,EACNC,MAAO,EAEX,KAASkC,EAAI,EAAGA,EAAIomI,EAAOtpI,OAAQkD,IAC3B46C,EAAQwrF,EAAOpmI,GACfywF,EAAQ71C,EAAMt1C,QAAQmrF,MACtBA,IAAUvgB,IACN/xE,EAAQioI,EAAOpmI,GAAGsoC,IAAInqC,QACtBsyF,IAAUrpE,EACVwyE,EAAQ/7F,KAAOiG,KAAKlG,IAAIg8F,EAAQ/7F,KAAMM,GAEtCy7F,EAAQ97F,MAAQgG,KAAKlG,IAAIg8F,EAAQ97F,MAAOK,GAIpD,OAAOy7F,IAEXskF,mBAAoB,SAAU51I,EAAKnqC,EAAOggL,GAAtB,GAOPt7K,GAKLu7K,EACAC,EACAC,EACKxzC,EACD5sI,EACAqgL,EACAC,EACA7wF,EACAvvF,EACAkG,EApBJw/E,EAAM5+E,KACNI,EAAUw+E,EAAIx+E,QACd2vF,EAAWnR,EAAI6J,OACf/0E,EAAQq8E,EAASn4F,OACjB2hL,EAAexpF,EAAS,GACxBypF,EAAaD,CACjB,KAAS57K,EAAM,EAAGA,EAAMoyF,EAASn4F,OAAQ+F,IACjCoyF,EAASpyF,GAAK3E,WAAawgL,EAAWxgL,aACtCwgL,EAAazpF,EAASpyF,GAM9B,KAHIu7K,EAAgBK,EAAavgL,WAAawgL,EAAWxgL,WAAaC,EAClEkgL,GAAkBlgL,EAAQigL,GAAiB,EAC3CE,EAAiB,EACZxzC,EAAQ,EAAGA,EAAQlyH,EAAOkyH,IAC3B5sI,EAAa+2F,EAAS61C,GAAO5sI,WAC7BqgL,EAActpF,EAAS61C,EAAQ,GAC/B0zC,EAAiBD,EAAcA,EAAYrgL,WAAaA,EACxDyvF,EAASsH,EAAS61C,GAAOn9C,UACzBvvF,EAASkH,EAAQq5K,cAAgBR,EAAcjgL,EAAaigL,EAAcvlK,EAC1EtU,EAAS,OAITA,EAHCpG,GAGSC,EAAQigL,GAAiBI,EAAiBtgL,IAAe,EAF1DsgL,EAAiB,EAAIrgL,EAAQ,EAI1CmG,EAAS2jF,GAAW3jF,EAAQ,EAAGnG,GAC/BwvF,EAAO3gF,KAAK,GAAIy3I,IAAcn8G,EAAIyzB,GAAKsiH,EAAgB/1I,EAAI0zB,GAAKsiH,IAChE3wF,EAAO3gF,KAAK,GAAIy3I,IAAcn8G,EAAIyzB,GAAK59D,EAAQkgL,EAAgB/1I,EAAI0zB,GAAKsiH,IACxE3wF,EAAO3gF,KAAK,GAAIy3I,IAAcn8G,EAAIyzB,GAAK59D,EAAQmG,EAAQgkC,EAAI0zB,GAAK59D,EAASkgL,IACzE3wF,EAAO3gF,KAAK,GAAIy3I,IAAcn8G,EAAIyzB,GAAKz3D,EAAQgkC,EAAI0zB,GAAK59D,EAASkgL,IACjED,EAAiB/5K,EACjBg6K,GAAkBlgL,EAASkH,EAAQs5K,eACnCR,EAAgBn2F,GAAW9pF,EAAQ,EAAImG,EAAQ,EAAGnG,IAG1D0gL,oBAAqB,SAAUv2I,EAAKnqC,EAAOggL,GAAtB,GAWRt7K,GACD8qF,EACAzvF,EACAoG,EACAlG,EAdJ0lF,EAAM5+E,KACNI,EAAUw+E,EAAIx+E,QACd2vF,EAAWnR,EAAI6J,OACf/0E,EAAQq8E,EAASn4F,OACjBgiL,EAAkBx5K,EAAQy5K,WAAa,EACvCA,EAAYD,EAAkBx5K,EAAQy5K,UAAY5gL,EAAQA,EAC1DkgL,EAAiBS,EAAkB,GAAK3gL,EAAQA,EAAQmH,EAAQy5K,WAAa,EAC7EC,EAAeF,EAAkB3gL,EAAQA,EAAyB,EAAjBkgL,EACjDY,GAAeD,EAAeD,GAAa,EAC3CT,EAAiB,CACrB,KAASz7K,EAAM,EAAGA,EAAM+V,EAAO/V,IACvB8qF,EAASsH,EAASpyF,GAAK8qF,UACvBzvF,EAAa+2F,EAASpyF,GAAK3E,WAC3BoG,EAASgB,EAAQq5K,cAAgBM,EAAc/gL,EAAa+gL,EAAcrmK,EAC1Exa,EAASkH,EAAQq5K,cAAgBR,EAAcjgL,EAAaigL,EAAcvlK,EAC9E+0E,EAAO3gF,KAAK,GAAIy3I,IAAcn8G,EAAIyzB,GAAKsiH,EAAgB/1I,EAAI0zB,GAAKsiH,IAChE3wF,EAAO3gF,KAAK,GAAIy3I,IAAcn8G,EAAIyzB,GAAK59D,EAAQkgL,EAAgB/1I,EAAI0zB,GAAKsiH,IACxE3wF,EAAO3gF,KAAK,GAAIy3I,IAAcn8G,EAAIyzB,GAAK59D,EAAQkgL,EAAiB/5K,EAAQgkC,EAAI0zB,GAAK59D,EAASkgL,IAC1F3wF,EAAO3gF,KAAK,GAAIy3I,IAAcn8G,EAAIyzB,GAAKsiH,EAAiB/5K,EAAQgkC,EAAI0zB,GAAK59D,EAASkgL,IAClFD,GAAkB/5K,EAClBg6K,GAAkBlgL,EAASkH,EAAQs5K,gBAG3C/iE,OAAQ,SAAUkiE,GAAV,GAMAz4K,GACAgjC,EACA61I,EACAhgL,EAMK0E,EAdL8qF,EAASzoF,KAAKyoF,OACd/0E,EAAQ+0E,EAAO7wF,MACnB,IAAK8b,EAYL,IATItT,EAAUJ,KAAKI,QACfgjC,EAAMy1I,EAAS18K,QAAQs7H,MAAMz3H,KAAK+4K,gBAClCE,EAAc71I,EAAIlqC,SAAWkH,EAAQs5K,gBAAkBhmK,EAAQ,GAC/Dza,EAAQmqC,EAAInqC,QACZmH,EAAQ45K,aACRh6K,KAAKg5K,mBAAmB51I,EAAKnqC,EAAOggL,GAEpCj5K,KAAK25K,oBAAoBv2I,EAAKnqC,EAAOggL,GAEhCt7K,EAAM,EAAGA,EAAM+V,EAAO/V,IAC3B8qF,EAAO9qF,GAAKg5G,OAAOkiE,MAI/BlvD,GAAkBihC,IACdivB,UAAW,GACX5gL,MAAO,IACP+gL,cAAc,EACdP,eAAe,EACfC,eAAgB,EAChBx4C,QACI19H,SAAS,EACT+nF,MAAOvgB,EACPrpC,SAAUqpC,EACVrnC,OAAQ,KAGhB/oC,GAAWgwJ,GAAY7jJ,UAAWmiJ,IAC9B2B,GAAiB5D,GAAavmJ,QAC9B6H,OAAQ,WACJvI,KAAKi6K,kBAAkBj6K,KAAK27H,SAEhCs+C,kBAAmB,SAAUt+C,GAAV,GACXkwC,GAAclwC,EAAO,GACrBu+C,EAAc,GAAItvB,IAAY5qJ,MAC9B27H,OAAQA,EACRgZ,OAAQ30I,KAAKI,QAAQu0I,OACrBklC,UAAWhO,EAAYgO,UACvBJ,cAAe5N,EAAY4N,cAC3BO,aAAcnO,EAAYmO,aAC1BN,eAAgB7N,EAAY6N,eAC5Bt+C,UAAWywC,EAAYzwC,WAE3Bp7H,MAAK+/J,YAAYma,IAErBna,YAAa,SAAU9pC,EAAOjuD,GAC1Bi/E,GAAahjJ,GAAG87J,YAAY53J,KAAKnI,KAAMi2H,EAAOjuD,GAC9ClkC,GAAO9jC,KAAKI,QAAQu0I,OAAOnuH,MAAOyvG,EAAM4+C,gBAG5C/pB,GAAQ,QACRC,GAAQ,QACRC,GAAO,OACPC,GAAM,MACNC,GAAM,MACNC,GAAY,WACZC,GAAgB,UAChBC,GAAK,KACT/C,GAAgB38I,QAAQyc,SAASu/H,IAC7BzG,GACAK,GACAI,GACAgB,GACA1B,GACAuB,GACAlB,GACAM,GACAP,GACAqB,GACAvB,GACAsB,GACAJ,GACAD,GACAQ,GACAlB,KAEJ4G,GAAgB38I,QAAQyc,SAAS4gI,IAC7B1G,GACAC,GACAnB,KAEJkH,GAAgB38I,QAAQyc,SAASihI,IAAcxH,KAC/CyG,GAAgB38I,QAAQyc,SAASqhI,IAAgBjI,KACjD8G,GAAgB38I,QAAQyc,SAASyiI,IAAiBpJ,KAClD6G,GAAgB38I,QAAQyc,SAAS6hI,IAC7BnI,GACAC,GACAC,KAEJsG,GAAgB38I,QAAQyc,SAASsiI,IAC7BzI,GACAC,GACAC,KAEJpF,GAAapxI,QAAQyc,UACjB84H,GACAK,GACAI,GACAgB,GACA1B,GACAuB,KACA/yF,IACAs0F,GACA+G,GACAK,GACA7K,GACAC,KAEJxD,GAAapxI,QAAQyc,UACjBi6H,GACAD,KAEA4I,GACAK,KAEAtH,GACA+G,GACAK,KAEJpO,GAAapxI,QAAQyc,UACjBw6H,GACAlB,KACAjyF,IACAs0F,GACA+G,GACAK,GACAC,KAEJrO,GAAapxI,QAAQyc,UACjB05H,GACAC,GACAC,KAEA7wB,GACA7/G,KACAw5I,KACJ/N,GAAapxI,QAAQyc,UACjB65H,GACAC,GACAC,KACA1yF,IAASq7F,KACb/N,GAAapxI,QAAQyc,UAAUq5H,KAAUhyF,IACrCs0F,GACA+G,GACA,kBACA,YAEJ1D,GAAkBz7I,QAAQyc,UACtB84H,GACAK,GACAI,GACAgB,GACA1B,GACAuB,GACAI,GACAlB,KAEA9jJ,MAAOqtJ,GACPh3E,MAAO82E,GACPyG,SAAUzG,GACVovB,SAAUjvB,GACVkvB,UAAWnvB,KAEf7D,GAAkBz7I,QAAQyc,UACtBi6H,GACAD,KAEAp1H,KAAMk+H,GACNj+H,GAAIg+H,GACJh3E,MAAO82E,GACPyG,SAAUzG,KAEd3D,GAAkBz7I,QAAQyc,UACtB65H,GACAC,GACAC,KAEAvkJ,MAAOqtJ,GACPh3E,MAAO82E,KAEXhO,GAAapxI,QAAQyc,UACjBk6H,GACAC,GACAnB,KAEAjwB,GACA7/G,KAEAw5I,GACAK,GACA3K,GACAC,GACAC,GACAC,KAEJ5D,GAAapxI,QAAQyc,UAAUg5H,KAC3BjwB,GACA7/G,GACA,SAEAw5I,GACA/G,GACAoH,KAEJpO,GAAapxI,QAAQyc,UACjBk5H,GACAM,KAEA,OACA,OACA,MACA,UAEAmC,GACA+G,GACA,YACAK,KAEJ/D,GAAkBz7I,QAAQyc,UACtBk5H,GACAM,KAEAp1E,KAAMy+E,GACNt9B,KAAMs9B,GACNv9B,IAAKw9B,GACLz+E,MAAOw+E,GACPh3E,MAAO82E,GACP9V,UAAW8V,GACXyG,SAAUzG,KAEdhO,GAAapxI,QAAQyc,UACjB+4H,GACAsB,KAEA,QACA,KACA,SACA,KACA,QACA,OACA,aAEAsB,GACA+G,GACAK,KAEJ/D,GAAkBz7I,QAAQyc,UACtB+4H,GACAsB,KAEAhuI,MAAOw2I,GACPgQ,GAAIhQ,GACJ7V,OAAQ6V,GACRiQ,GAAIjQ,GACJzf,MAAOyf,GACP9V,KAAM8V,GACN6Q,SAAU/Q,GACV92E,MAAO82E,GACPyG,SAAUzG,KAEdhO,GAAapxI,QAAQyc,UACjBi5H,GACAqB,KAEA,UACA,WAEAqB,GACA+G,GACA,kBACAK,KAEJ/D,GAAkBz7I,QAAQyc,UACtBi5H,GACAqB,KAEA/2I,QAASs/I,GACT7qI,OAAQ6qI,GACRh3E,MAAO82E,GACPyG,SAAUzG,KAEdhO,GAAapxI,QAAQyc,UACjBy5H,GACAL,KACA/xF,IACAs0F,GACA+G,GACA,UACA,kBACA,YAEAtN,IACAuG,GACAt0F,EACA0hE,GACA7/G,IAEAg6I,GAAY,YACZC,GAAc,cACdC,GAAkB,GAClBC,GAAQ50J,EAAM6J,QACdC,KAAM,SAAU5I,EAAS03H,EAAakuB,EAAc35I,GAA9C,GAUE5D,GATA++E,EAASn/E,IACG,UAAZgE,IACAA,MAEJhE,KAAKwrG,aACLxrG,KAAK0rG,YAAY1nG,EAAQ4nG,UACzB5rG,KAAK+5H,aAAe,GAAIlH,IAASJ,aAAazyH,KAAMgE,GACpDhE,KAAK+5H,aAAaod,MAAQwG,EAC1B39I,KAAKq6K,aAAatiL,GACdqI,EAAUxF,MAAeoF,KAAKI,QAASqvH,GAC3CzvH,KAAKs6K,iBAAmB1/K,MAAewF,GACvCJ,KAAKu6K,OAAS58B,EACd39I,KAAKw6K,WAAWp6K,EAASu9I,GACzB39I,KAAKy6K,eACLz6K,KAAK06K,gBACL16K,KAAK26K,iBACLp5J,EAAQyxG,WAAW4D,aAAanH,EAAa,WACpCtwC,EAAOh/B,aACRg/B,EAAOn3E,QAAQ,QACfm3E,EAAOy7F,UACPz7F,EAAO07F,oBAInBR,aAAc,SAAUtiL,GAGpB,IAFAiI,KAAK86K,iBAAiB/iL,GACtBA,EAAQ+B,MAAM6nC,SAAW,WAClB5pC,EAAQq4C,YACXr4C,EAAQigB,YAAYjgB,EAAQq4C,WAEhCpwC,MAAKjI,QAAUA,GAEnB+iL,iBAAkB,SAAU/iL,GACxBwpB,EAAQjnB,SAASvC,EAAS,YAE9ByiL,WAAY,SAAUp6K,EAASu9I,GAAnB,GAGC7iJ,GAFLigL,KACAp/C,EAASv7H,EAAQu7H,UACrB,KAAS7gI,EAAI,EAAGA,EAAI6gI,EAAO/jI,OAAQkD,IAC/BigL,EAAajzK,KAAKpR,EAAEgK,UAAWi7H,EAAO7gI,IAE1CsF,GAAQu7H,OAASo/C,EACjB19B,EAAmBj9I,GACnBJ,KAAKkwH,cAAc9vH,EAASu9I,GACC,OAAzBv9I,EAAQs3I,oBACDt3I,GAAQs3I,aAEnB13I,KAAKI,QAAUxF,MAAe+iJ,EAAcv9I,GAC5CJ,KAAKg7K,qBAETx1J,QAAS,WACL,OACIvsB,MAAO+G,KAAKjI,QAAQggB,YACpB7e,OAAQ8G,KAAKjI,QAAQ4uB,eAG7B1F,OAAQ,SAAUsE,GAAV,GACAxnB,GAAOiC,KAAKwlB,UACZC,EAAczlB,KAAK0lB,OACnBH,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/B4nB,QAAS,WACL3lB,KAAKi7K,wBAET9X,OAAQ,SAAUwI,GAAV,GAII7nC,GACA97D,CAJRhoE,MAAKkwH,cAAclwH,KAAKI,SACxBJ,KAAKg7K,oBACDrP,GACI7nC,EAAW9jI,KAAKk7K,OAAOvvB,UACvB3jF,EAAO87D,EAAS09B,SAASmK,GAC7B7nC,EAASq/B,OAAOn7F,IAEhBhoE,KAAK46K,WAGbxsB,QAAS,SAAUl/I,GAAV,GAEIvR,GADLqmI,EAAOhkI,KAAK2rJ,UAAU3nB,IAC1B,KAASrmI,EAAM,EAAGA,EAAMqmI,EAAKpsI,OAAQ+F,IACjC,GAAIqmI,EAAKrmI,GAAKyC,QAAQ8O,OAASA,EAC3B,MAAO,IAAIswI,IAAUxb,EAAKrmI,KAItCw9K,eAAgB,SAAUjsK,GACtB,MAAOlP,MAAKouJ,QAAQl/I,IAExB40H,SAAU,WACN,MAAO,IAAI2b,IAAcz/I,KAAK2rJ,YAElCrwB,gBAAiB,SAAUthI,EAAM6J,GAAhB,GAGT4kF,GAII2yF,EAAYC,EANhBv3C,EAAW9jI,KAAK2rJ,UAChBkgB,GAAe/nC,EAAS2mC,WAAa3mC,EAASnI,YAAc,EAE5Dz/H,IAAW2H,GACX4kF,EAASq7C,EAASgjC,aAAajjK,IAG3B+kH,GAAS/kH,IACTu3K,EAAav3K,EAAO83H,OACpB0/C,EAAex3K,EAAO+3H,UAEtBw/C,EAAaC,EAAex3K,EAG5B4kF,EADAojF,EAAY3sK,OAASsiJ,GACZ/D,EAAoB3Z,EAASijC,mBAAmBqU,GAAaC,GAC/DxP,EAAY3sK,OAAS2iJ,IAAOgqB,EAAY3sK,OAASuiJ,GAC/ChE,GAAqB3Z,EAAS87B,OAAO,QAAUn3E,OAAQ4yF,GAEvDv3C,EAASijC,mBAAmBqU,IAGzC3yF,GACAzoF,KAAKs7K,sBAAsBthL,EAAMyuF,IAGzC6yF,sBAAuB,SAAUthL,EAAMyuF,GAAhB,GAEV9qF,GADLy9H,EAAYp7H,KAAKy7H,UACrB,KAAS99H,EAAM,EAAGA,EAAM8qF,EAAO7wF,OAAQ+F,IACnCy9H,EAAUmyC,qBAAqB9kF,EAAO9qF,GAAM3D,IAGpDquH,YAAa,SAAUxkH,GAAV,GAKLwkF,GAAOy/C,EAWCr/C,EAfR0+B,EAASnnH,KAAKu7K,iBACd38F,EAAM5+E,KACNqnH,EAAUzoC,EAAIwpC,SACd0b,EAAWllD,EAAI+sE,SAEfzvJ,IAAW2H,IACXwkF,EAAQy7C,EAASkjC,UAAUnjK,GACvBwkF,GAAS8+B,IACT2gB,EAAgBz/C,EAAMmhD,aAEnBriB,GAAUzlC,GAAQ79E,KACzBikI,EAAgBhE,EAAS8S,aAAa9O,cAAcjkI,IAEpDsjH,EACI2gB,GAAiB,IACbr/C,EAASzoF,KAAK2rJ,UAAUgb,sBAAsB7+B,GAClDzgB,EAAQw3C,OAAOp2E,IAEZJ,GACPg/B,EAAQrtH,KAAKquF,IAGrB8/B,YAAa,WACTnoH,KAAKooH,SAAStnH,QAElB25K,aAAc,WAAA,GACNl/G,GAAUv7D,KAAKu7D,QACfziE,EAAOkH,KAAKw7K,eACZ3iC,EAAY74I,KAAKI,QAAQy4I,SACzBA,GAAU5/I,OACVsoB,EAAQkmD,YAAY3uE,GAAQG,MAAO4/I,EAAU5/I,QAE7C4/I,EAAU3/I,QACVqoB,EAAQkmD,YAAY3uE,GAAQI,OAAQ2/I,EAAU3/I,SAE7CqiE,GAAWA,EAAQn7D,QAAQlB,OAASc,KAAKI,QAAQq7K,UAMlDz7K,KAAKu7D,QAAQrc,QACbl/C,KAAKu7D,QAAQt6C,WANTs6C,GACAA,EAAQz1C,UAEZ9lB,KAAKu7D,QAAU/5C,GAAQ6mF,QAAQ75D,OAAO11C,GAAQoG,KAAMc,KAAKI,QAAQq7K,aAMzED,aAAc,WACV,MAAOx7K,MAAKjI,SAEhB6iL,QAAS,WACL,GAAI1rI,GAAQlvC,KAAK07K,WACjB17K,MAAK27K,eACL37K,KAAKk7K,OAAShsI,EACdlvC,KAAK2rJ,UAAYz8G,EAAMy8G,UACvBz8G,EAAMgrF,eACFl6H,KAAKI,QAAQhI,eAAgB,GAC7B82C,EAAMumE,SAAS,SAAU19G,GACjBA,EAAQw0E,WACRx0E,EAAQw0E,UAAUprC,UAI9BnhC,KAAKy6K,eACLz6K,KAAKu7D,QAAQw1B,KAAK7hD,EAAMizD,QACpBniG,KAAKI,QAAQhI,eAAgB,GAC7B82C,EAAMumE,SAAS,SAAU19G,GACjBA,EAAQw0E,WACRx0E,EAAQw0E,UAAUnqC,SAI9BpiC,KAAKooH,SAAWpoH,KAAK47K,iBACrB57K,KAAKy7H,WAAa,GAAImsB,IACtB5nJ,KAAK67K,kBACL77K,KAAK87K,kBACL97K,KAAK+7K,uBACL/7K,KAAKg8K,wBACLh8K,KAAKgI,QAAQ27I,IACR3jJ,KAAKi8K,WACNj8K,KAAKk8K,oBAGb55E,aAAc,SAAUliG,GAAV,GACN+hG,GAEI02C,EACAsjC,EAEAjtI,CAQR,OAZI9uC,KAAYA,EAAQnH,OAASmH,EAAQlH,SACjC2/I,EAAY74I,KAAKI,QAAQy4I,UACzBsjC,EAAoBn8K,KAAKs6K,iBAAiBzhC,UAC9Cj+I,GAAWi+I,EAAWz4I,GAClB8uC,EAAQlvC,KAAK07K,YACjB7iC,EAAU5/I,MAAQkjL,EAAkBljL,MACpC4/I,EAAU3/I,OAASijL,EAAkBjjL,OACrCg2C,EAAMgrF,eACN/3B,EAASjzD,EAAMizD,QAEfA,EAASniG,KAAKu7D,QAAQ+mC,eAEnBH,GAEXo5E,eAAgB,WACZ,MAAOv7K,MAAK2rJ,oBAAqBhE,KAAuB3nJ,KAAKI,QAAQinH,QAAQF,QAEjF20D,gBAAiB,WACb,GAAI17K,GAAUJ,KAAKI,OACfA,GAAQg8K,YAAa,IACrBp8K,KAAKq8K,UAAY,GAAIx0B,IAAS7nJ,KAAK2rJ,UAAWvrJ,EAAQg8K,YAG9DL,qBAAsB,WAAA,GACdO,GAAWt8K,KAAKI,QAAQk8K,SACxB7nJ,GAAa6nJ,OAAgB7nJ,SAC7B6nJ,MAAa,GAAS7nJ,KAAc,IACpCz0B,KAAKu8K,eAAiB,GAAIz0B,IAAc9nJ,KAAMy0B,KAGtDunJ,sBAAuB,WAAA,GACfM,GAAWt8K,KAAKI,QAAQk8K,SACxB3L,GAAc2L,OAAgB3L,UAC9B2L,MAAa,GAAS3L,KAAe,IACrC3wK,KAAKw8K,gBAAkB,GAAIz0B,IAAe/nJ,KAAM2wK,KAGxDiL,eAAgB,WAAA,GAGRv0D,GAFAzoC,EAAM5+E,KACN0+J,EAAiB9/E,EAAIx+E,QAAQinH,OAOjC,OAJIA,GADArnH,KAAKu7K,iBACKv7K,KAAKy8K,qBAAqB/d,GAE1B,GAAI3sF,IAAQ/xE,KAAK+5H,aAAc2kC,IAIjD+d,qBAAsB,SAAUr8K,GAC5B,MAAO,IAAIsoJ,IAAc1oJ,KAAK2rJ,UAAWvrJ,IAE7C8vH,cAAe,SAAU9vH,EAASu9I,GAC9BD,EAAkBt9I,EAASu9I,GAC3BK,EAAoB59I,EAASu9I,IAEjCq9B,kBAAmB,WAAA,GAINlgL,GACDugJ,EACAqhC,EACAxiI,EANJ95C,EAAUJ,KAAKI,QACfu7H,EAASv7H,EAAQu7H,OACjBud,EAAS94I,EAAQs3I,gBACrB,KAAS58I,EAAI,EAAGA,EAAI6gI,EAAO/jI,OAAQkD,IAC3BugJ,EAAgB1f,EAAO7gI,GACvB4hL,EAAcxjC,EAAOp+I,EAAIo+I,EAAOthJ,QAChCsiD,EAAWmhG,EAAcmD,UAC7BnD,EAAcpnE,MAAQonE,EAAcpnE,OAASyoG,EACzCxiI,IACAA,EAAS+5B,MAAQ/5B,EAAS+5B,OAASyoG,IAI/ChB,UAAW,WAAA,GACHt7K,GAAUJ,KAAKI,QACf0jI,EAAW9jI,KAAK28K,kBAChBztI,EAAQ,GAAI3tB,GAAQmyG,YAAY1zH,KAAK48K,gBASzC,OARA1tI,GAAM+mF,MAAQj2H,KACdkvC,EAAMy8G,UAAY7nB,EAClBviH,EAAQwyG,MAAM4L,WAAWv/H,EAAQkoC,MAAO4G,GACpC9uC,EAAQu0I,OAAOnxI,SACf0rC,EAAMpL,OAAO,GAAIukH,IAAOvkB,EAAS1jI,QAAQu0I,OAAQ30I,KAAK+5H,eAE1D7qF,EAAMpL,OAAOggG,GACb50F,EAAMynE,SACCznE,GAEX0tI,cAAe,WAAA,GACPh+F,GAAM5+E,KACNI,EAAUw+E,EAAIx+E,QACdrI,EAAU6mF,EAAI7mF,QACdgG,EAAOwjB,EAAQkmD,YAAY1vE,EAE/B,OADAiI,MAAK0lB,MAAQ,KACN9qB,IACH3B,MAAO2F,KAAKpE,MAAMuD,EAAK9E,QAAUqmJ,EAAiBluB,cAClDl4H,OAAQ0F,KAAKpE,MAAMuD,EAAK7E,SAAWomJ,EAAiBjuB,eACpDj5H,YAAagI,EAAQhI,aACtBgI,EAAQy4I,YAEf8jC,gBAAiB,SAAUE,GAAV,GACTz8K,GAAUJ,KAAKI,QACf0jI,EAAWwkB,GAAgB38I,QAAQ6iC,OAAOquI,KAAkBz8K,EAAQu7H,OAAQv7H,EAASJ,KAAK+5H,aAC9F,OAAO+J,IAEXg5C,cAAe,WACX,MAAO98K,MAAK+8K,aAAe/8K,KAAK+8K,YAAYnlL,QAEhDikL,gBAAiB,WAAA,GAKJ/gL,GACD24B,EACArzB,EAEI4R,EACAtZ,EAYA+7B,EArBR0qD,EAASn/E,KACT4+E,EAAM5+E,KACNgkI,EAAOplD,EAAI+sE,UAAU3nB,KACrBg5C,EAAah9K,KAAK+8K,cACtB,KAASjiL,EAAI,EAAGA,EAAIkpI,EAAKpsI,OAAQkD,IACzB24B,EAAOuwG,EAAKlpI,GACZsF,EAAUqzB,EAAKrzB,QACfqzB,YAAgB8gG,KAAgBn0H,EAAQ00B,SAAW10B,EAAQw7B,WACvD5pB,EAAM,EACNtZ,EAAM0H,EAAQwmI,WAAWhvI,OAAS,EAClC67B,YAAgBkhG,MAChB3iH,EAAM5R,EAAQwmI,WAAW50H,GACzBtZ,EAAM0H,EAAQwmI,WAAWluI,IAExB0H,EAAQslI,YACLjyG,YAAgBkhG,IAChBj8H,EAAM6oB,EAAQwqG,YAAYrzH,EAAK,EAAG0H,EAAQ+sH,SAAU/sH,EAAQqvB,cAE5D/2B,KAGJ+7B,EAAY,GAAIg0H,IAAUtpE,EAAQ1rD,EAAM74B,IACxCoX,IAAKA,EACLtZ,IAAKA,GACN0H,EAAQ00B,SACXkoJ,EAAWl1K,KAAK2sB,KAI5BwoJ,aAAc,SAAUh1K,GACpB,MAAOjI,MAAKgI,QAAQy7I,GAAcx7I,IAEtCo0D,QAAS,SAAUp0D,GACf,MAAOjI,MAAKgI,QAAQmwD,GAAQlwD,IAEhCi1K,WAAY,SAAUj1K,GAClB,MAAOjI,MAAKgI,QAAQ07I,GAAYz7I,IAEpCyyK,cAAe,WACX16K,KAAKm9K,cAAgBn9K,KAAK08D,OAAOt1D,KAAKpH,MACtCA,KAAK0wK,mBAAqB1wK,KAAK4wK,YAAYxpK,KAAKpH,MAChDA,KAAKo9K,0BAA4Bp9K,KAAKq9K,WAAWj2K,KAAKpH,MACtDA,KAAKs9K,0BAA4Bt9K,KAAKu9K,UAAUn2K,KAAKpH,MACrDA,KAAKq5G,WAAanhH,MAAMy7B,SAAS3zB,KAAKq5G,WAAWjyG,KAAKpH,MAAOwrJ,KAEjE9/C,YAAa,SAAUE,GACfA,GACA5rG,KAAKwrG,UAAU1jG,KAAK8jG,IAG5BD,eAAgB,SAAUC,GACtB,GAAIz5F,GAAQnS,KAAKwrG,UAAUttG,QAAQ0tG,EAC/Bz5F,IAAS,GACTnS,KAAKwrG,UAAUpjG,OAAO+J,EAAO,IAGrCkkH,iBAAkB,SAAU1uH,GAAV,GAELhK,GADL6tG,EAAYxrG,KAAKwrG,SACrB,KAAS7tG,EAAM,EAAGA,EAAM6tG,EAAU5zG,OAAQ+F,IACtC,GAAI6tG,EAAU7tG,GAAK04H,iBAAiB1uH,GAChC,OAAO,GAInBK,QAAS,SAAUkH,EAAMoZ,GAAhB,GAQDkjF,GACApnG,EACKzG,CAAT,KATa,SAAT2qB,IACAA,MAEApZ,IAAS00I,KACTt7H,EAAK+jD,OAAOgc,MAAQroF,KAAKw9K,uBAAuBl1J,EAAK+jD,OAAOgc,QAEhE//D,EAAKpgB,OAASlI,KACVwrG,EAAYxrG,KAAKwrG,UACjBpnG,GAAqB,EAChBzG,EAAM,EAAGA,EAAM6tG,EAAU5zG,OAAQ+F,IAClC6tG,EAAU7tG,GAAKqK,QAAQkH,EAAMoZ,KAC7BlkB,GAAqB,EAG7B,OAAOA,IAEXy2K,cAAe,WAAA,GAMP/7K,GAGI2+K,EARJ7+F,EAAM5+E,KACNjI,EAAU6mF,EAAI7mF,QACdwjE,EAAUqjB,EAAIrjB,OAClBA,GAAQn0D,KAAK,aAAcpH,KAAKo9K,2BAChC7hH,EAAQn0D,KAAK,aAAcpH,KAAKs9K,2BAEhC95F,GAAWzrF,GAAU+G,KAAUA,EAAIysJ,IAAevrJ,KAAKm9K,cAAer+K,EAAIqlJ,IAAcnkJ,KAAK0wK,mBAAoB5xK,IAC7GkB,KAAK09K,0BAELl6F,GAAWzrF,GAAU0lL,KAAYA,EAAMnyB,IAAatrJ,KAAKq5G,WAAYokE,IAEzEz9K,KAAK29K,UAAY9qD,GAASF,iBAAiBnkF,OAAOxuC,KAAKjI,SACnDkX,MAAOjP,KAAKw6D,OAAOpzD,KAAKpH,MACxB+qB,KAAM/qB,KAAKu8D,MAAMn1D,KAAKpH,MACtBrI,IAAKqI,KAAKy8D,KAAKr1D,KAAKpH,MACpB8wK,IAAK9wK,KAAK+wK,KAAK3pK,KAAKpH,MACpB8hE,aAAc9hE,KAAKgxK,cAAc5pK,KAAKpH,MACtCgiE,cAAehiE,KAAKixK,eAAe7pK,KAAKpH,MACxCkxK,WAAYlxK,KAAKmxK,YAAY/pK,KAAKpH,SAG1Ck8K,iBAAkB,WACVl8K,KAAK29K,WAAa39K,KAAK29K,UAAU3yJ,QACjChrB,KAAK29K,UAAU3yJ,UAGvBgmJ,cAAe,SAAU/oK,GACjBjI,KAAKw8K,kBAAoBx8K,KAAK49K,eAAe31K,KAC7CjI,KAAK69K,iBAAmB51K,EAAEmvD,SAC1Bp3D,KAAKihI,oBACLjhI,KAAKu7D,QAAQu1B,oBAGrBqgF,YAAa,SAAUlpK,GACfjI,KAAK89K,WAAa99K,KAAK49K,eAAe31K,KAClCjI,KAAKu7D,SACLv7D,KAAKu7D,QAAQs+C,iBAEjB75G,KAAK89K,UAAW,EAChB99K,KAAKgI,QAAQw7I,SAGrBytB,eAAgB,SAAUhpK,GAAV,GAIJ81K,GACAz7G,EAIIh6C,EASIksB,EAjBZwpI,EAAiBh+K,KAAKw8K,eACtBwB,KAAmBh+K,KAAK49K,eAAe31K,KACvCA,EAAE9D,iBACE45K,EAA0B/9K,KAAK69K,iBAC/Bv7G,GAAcr6D,EAAEmvD,SAAW2mH,EAA0B,EACrDn/K,KAAKC,IAAIyjE,IAAe,KACxBA,EAAa1jE,KAAK6Q,MAAmB,GAAb6yD,GACxBtiE,KAAK69K,iBAAmB51K,EAAEmvD,SACtB9uC,GACA+K,MAAOivC,EACP+5E,WAAYA,EAAWr8I,KAAK2rJ,UAAU3nB,MACtC1jH,cAAerY,IAEfjI,KAAK89K,UAAa99K,KAAKgI,QAAQs7I,GAAYh7H,KACtCtoB,KAAK89K,WACN99K,KAAK89K,UAAW,GAEhBtpI,EAASlsB,EAAK+zH,WAAa2hC,EAAetP,aAAapsG,GACvD9tB,IAAWx0C,KAAKgI,QAAQu7I,GAAMj7H,IAC9B01J,EAAetjL,WAMnC6iL,UAAW,SAAUt1K,GACjB,GAAIA,EAAElQ,QAAS,CACX,GAAIA,GAAUiI,KAAKi+K,qBAAqBh2K,EAAElQ,QAASkQ;AAC/ClQ,GAAWA,EAAQipI,OACnBjpI,EAAQipI,MAAMhhI,KAAMiI,EAAEqY,iBAIlCk6C,OAAQ,SAAUvyD,GACd,GAAIssJ,GAASv0J,KAAKitK,kBAAkBhlK,IAChCjI,KAAK49K,eAAe31K,IAAOjI,KAAK2rJ,UAAU+a,wBAAwBnS,KAGlEv0J,KAAKq2H,kBACDgtB,GACAhkF,GACA+jF,MAEJpjJ,KAAKk+K,iBAAiBj2K,EAAGssJ,EAAQlR,IAEjCrjJ,KAAKq8K,WAAar8K,KAAKq8K,UAAUptK,MAAMhH,KACvCjI,KAAKu7D,QAAQu1B,kBACb9wF,KAAKihI,oBACLjhI,KAAKm+K,gBAAiB,GAEtBn+K,KAAKu8K,gBACDv8K,KAAKu8K,eAAettK,MAAMhH,IAC1BjI,KAAKgI,QAAQs7I,IACTjH,WAAYA,EAAWr8I,KAAK2rJ,UAAU3nB,MACtC1jH,cAAerY,MAK/Bs0D,MAAO,SAAUt0D,GAAV,GAQKusC,GAQA4pI,EACAp6C,EACKlpI,EACDwkK,EACAvhB,EAEItqH,EACAJ,EAtBZurD,EAAM5+E,KACN2yC,EAAQisC,EAAIq9F,UACZG,EAAWx9F,EAAIy9F,SACnB,KAAIr8K,KAAK49K,eAAe31K,GAAxB,CAGA,GAAIm0K,EACI5nI,EAAS4nI,EAASrxJ,KAAK9iB,GACvBusC,IAAWx0C,KAAKgI,QAAQq3D,IACpBg9E,WAAY7nG,EACZl0B,cAAerY,KAEnBm0K,EAAS5zC,UAEV,IAAI71F,EAAO,CAGd,IAFIyrI,KACAp6C,EAAOrxF,EAAMqxF,KACRlpI,EAAI,EAAGA,EAAIkpI,EAAKpsI,OAAQkD,IACzBwkK,EAAct7B,EAAKlpI,GACnBijJ,EAAWuhB,EAAYl/J,QAAQ8O,KAC/B6uI,IACItqH,EAAO6rI,EAAYl/J,QAAQw7B,SAAW3zB,EAAEoJ,EAAIpJ,EAAEgrB,EAC9CI,EAAQI,EAAK0lC,cAAgB1lC,EAAK/X,SACxB,IAAV2X,IACA+qJ,EAAS9e,EAAYl/J,QAAQ8O,MAAQowJ,EAAYr3B,eAAe50G,IAI5Esf,GAAM0pG,WAAa+hC,EACnBp+K,KAAKgI,QAAQq3D,IACTg9E,WAAY+hC,EACZ99J,cAAerY,IAGnBjI,KAAKu8K,gBACLv8K,KAAKu8K,eAAexxJ,KAAK9iB,KAGjCw0D,KAAM,SAAUx0D,GAAV,GAIEm0K,GAYI5nI,CAfJx0C,MAAK49K,eAAe31K,KAGpBm0K,EAAWp8K,KAAKq8K,UAChBD,GAAYA,EAASzkL,IAAIsQ,IACzBjI,KAAKu7D,QAAQs+C,iBACb75G,KAAKgI,QAAQo7I,IACT/G,WAAYA,EAAWr8I,KAAK2rJ,UAAU3nB,MACtC1jH,cAAerY,IAEnBjI,KAAKm+K,gBAAiB,GAEtBn+K,KAAKq+K,eAAep2K,EAAGm7I,IAEvBpjJ,KAAKu8K,iBACD/nI,EAASx0C,KAAKu8K,eAAe5kL,IAAIsQ,GACjCusC,IAAWx0C,KAAKgI,QAAQu7I,IACpBlH,WAAY7nG,EACZl0B,cAAerY,MAEnBjI,KAAKu8K,eAAe7hL,OACpBsF,KAAKgI,QAAQw7I,IACTnH,WAAY7nG,EACZl0B,cAAerY,QAK/B21K,eAAgB,WACZ,MAAO59K,MAAK88K,iBAEhBlM,YAAa,SAAU3oK,GAAV,GASDqgB,GA4BAqqB,EAEI2rI,EAMAC,EAEAv6C,EACAxvF,EACK15C,EACDwkK,EACAvhB,EAlDZ5+D,EAASn/E,KACTqzB,EAAQ9R,EAAQmoG,gBAAgBzhH,GAChC+1K,EAAiBh+K,KAAKw8K,gBACtBjoB,EAASv0J,KAAKitK,kBAAkBhlK,EACpC,IAAKjI,KAAK2rJ,UAAU+a,wBAAwBnS,GAG5C,GAAIypB,EACI11J,GACA+K,MAAOA,EACPgpH,WAAYA,EAAWr8I,KAAK2rJ,UAAU3nB,MACtC1jH,cAAerY,IAEfjI,KAAK89K,UAAa99K,KAAKgI,QAAQs7I,GAAYh7H,KAC3CrgB,EAAE9D,iBACGnE,KAAK89K,WACN99K,KAAKihI,oBACLjhI,KAAKu7D,QAAQu1B,kBACb9wF,KAAK89K,UAAW,GAEhB99K,KAAKoxK,YACLxmJ,aAAa5qB,KAAKoxK,YAEtB9oJ,EAAK+zH,WAAa2hC,EAAetP,aAAar7I,GAC1C/K,EAAK+zH,aAAer8I,KAAKgI,QAAQu7I,GAAMj7H,IACvC01J,EAAetjL,OAEnBsF,KAAKoxK,WAAa1nJ,WAAW,WACzBy1D,EAAOn3E,QAAQw7I,GAAUl7H,GACzB62D,EAAO2+F,UAAW,EACd3+F,EAAO5jB,SACP4jB,EAAO5jB,QAAQs+C,kBAEpBuqC,SAUP,IAPIzxG,EAAQ3yC,KAAKi8K,UACZtpI,IACG2rI,EAAYt+K,KAAKk+K,iBAAiBj2K,EAAGssJ,EAAQjR,IAC5Cg7B,IACD3rI,EAAQ3yC,KAAKi8K,YAGjBtpI,EAAO,CAKP,IAJI4rI,EAAa5rI,EAAM4rI,YAAclrJ,EACrCsf,EAAM4rI,WAAaA,EAAalrJ,EAC5B2wG,EAAOhkI,KAAKi8K,UAAUj4C,KACtBxvF,KACK15C,EAAI,EAAGA,EAAIkpI,EAAKpsI,OAAQkD,IACzBwkK,EAAct7B,EAAKlpI,GACnBijJ,EAAWuhB,EAAYl/J,QAAQ8O,KAC/B6uI,IACAvpG,EAAOupG,GAAYuhB,EAAYh3B,YAAYi2C,GAGnDv+K,MAAKgI,QAAQu7I,IACTlwH,MAAOA,EACPgpH,WAAY7nG,EACZl0B,cAAerY,IAEfjI,KAAKoxK,YACLxmJ,aAAa5qB,KAAKoxK,YAEtBpxK,KAAKoxK,WAAa1nJ,WAAW,WACzBy1D,EAAOk/F,eAAep2K,EAAGu7I,KAC1BY,MAIf85B,iBAAkB,SAAUj2K,EAAGssJ,EAAQiqB,GAArB,GAOVhqI,GACA8pI,EAPAx6C,EAAW9jI,KAAKk7K,OAAOvvB,UACvB3jF,EAAO87D,EAAS49B,cAAcnN,GAC9BvwB,EAAOF,EAASE,KAAKx9H,MAAM,EAC1BwhE,KAGDxzB,EAAS6nG,EAAWrY,GACpBs6C,EAAYt+K,KAAKgI,QAAQw2K,GACzBniC,WAAY7nG,EACZl0B,cAAerY,IAEfq2K,EACAt+K,KAAKk8K,oBAELl8K,KAAKm+K,gBAAiB,EACtBn+K,KAAKihI,oBACLjhI,KAAKi8K,WACD5/B,WAAY7nG,EACZwzB,KAAMA,EACNg8D,KAAMA,MAIlBq6C,eAAgB,SAAUp2K,EAAGu2K,GACrBx+K,KAAKi8K,YACLj8K,KAAKgI,QAAQw2K,GACTniC,WAAYr8I,KAAKi8K,UAAU5/B,WAC3B/7H,cAAerY,IAEnBjI,KAAKm+K,gBAAiB,EACtBn+K,KAAKi8K,UAAY,OAGzBwC,iBAAkB,SAAUx2K,EAAG3P,GAC3B,GAAIP,GAAUiI,KAAKu7D,QAAQ12D,YAAYoD,EACvC,IAAIlQ,EACA,MAAOiI,MAAKi+K,qBAAqBlmL,EAASkQ,EAAG3P,IAGrD2lL,qBAAsB,SAAUlmL,EAASkQ,EAAG3P,GAGxC,IAHkB,GAEdiiI,GADA5uH,EAAU5T,EAEP4T,IAAY4uH,GACfA,EAAe5uH,EAAQ4uH,aACvB5uH,EAAUA,EAAQ/R,MAEtB,IAAI2gI,EAOA,MANIA,GAAa+5B,WACb/5B,EAAeA,EAAa+5B,SAASrsJ,EAAGjI,KAAKitK,kBAAkBhlK,KAE/D3P,IACAiiI,EAAeA,EAAatiH,QAAQ3f,IAEjCiiI,GAGf0yC,kBAAmB,SAAUhlK,GACzB,GAAIg6D,GAAc1gD,EAAQqhE,iBAAiB36E,EAC3C,OAAOjI,MAAK2xK,oBAAoB1vG,EAAYhvC,EAAGgvC,EAAY5wD,IAE/DqtK,gBAAiB,WAAA,GAEL9/F,GAIA2W,EACAwkB,CAMR,OAZK/5G,MAAK2+K,WACF//F,EAAMgF,GAAc5jF,KAAKjI,SACzB,cACA,eAEAw9F,EAAc3W,EAAI2W,YAClBwkB,EAAan7B,EAAIm7B,WACrB/5G,KAAK2+K,UACDr/K,IAAKy6G,EACLphH,KAAM48F,IAGPv1F,KAAK2+K,UAEhBnB,uBAAwB,SAAUn1F,GAAV,GAChBqM,GAAU10F,KAAK0+K,kBACft/K,EAASmiB,EAAQgyD,cAAcvzE,KAAKjI,QACxC,QACIY,KAAM8W,GAAM44E,EAAMp1D,EAAIyhE,EAAQ/7F,KAAOyG,EAAOzG,MAC5C2G,IAAKmQ,GAAM44E,EAAMh3E,EAAIqjF,EAAQp1F,IAAMF,EAAOE,OAGlDqyK,oBAAqB,SAAUlxJ,EAASC,GAAnB,GACb3oB,GAAUiI,KAAKjI,QACfqH,EAASmiB,EAAQgyD,cAAcx7E,GAC/B28F,EAAU10F,KAAK0+K,iBACnB,OAAO,IAAI54F,IAAMrlE,EAAUrhB,EAAOzG,KAAO+7F,EAAQ/7F,KAAM+nB,EAAUthB,EAAOE,IAAMo1F,EAAQp1F,MAE1FyxK,KAAM,SAAU9oK,GAAV,GACEk3E,GAASn/E,KACT4+K,EAAiB5+K,KAAKu7D,QAAQ12D,YAAYoD,GAC1ClQ,EAAUiI,KAAKi+K,qBAAqBW,EAAgB32K,EACpDjI,MAAK6+K,eAAiB9mL,EACtBiI,KAAK8+K,gBAAgB/mL,EAASkQ,IAEzBjI,KAAK++K,YAAYH,EAAgB32K,IAClCjI,KAAKihI,oBAETjhI,KAAK8+K,gBAAgB/mL,EAASkQ,IAElCjI,KAAKg/K,aAAc,EACnBt1J,WAAW,WACPy1D,EAAO6/F,aAAc,GACtB,IAEPtiH,OAAQ,SAAUz0D,GACd,GAAIlQ,GAAUiI,KAAKy+K,iBAAiBx2K,EACpCjI,MAAK8+K,gBAAgB/mL,EAASkQ,IAElC62K,gBAAiB,SAAU/mL,EAASkQ,GAGhC,IAHa,GACTk3E,GAASn/E,KACT2L,EAAU5T,EACP4T,GACCA,EAAQqV,OACRrV,EAAQqV,MAAMm+D,EAAQl3E,GAE1B0D,EAAUA,EAAQ/R,QAG1BmlL,YAAa,SAAUhnL,EAASkQ,GAAnB,GAQLogF,GAKIq2E,EAZJnkC,EAAev6H,KAAKi+K,qBAAqBlmL,EAASkQ,GAClD22E,EAAM5+E,KACNqnH,EAAUzoC,EAAIwpC,SACdgT,EAAYx8C,EAAI68C,UACpB,SAAIz7H,KAAKm+K,iBAAmB/iD,GAAaA,EAAUqyC,cAAclzC,IAAiBv6H,KAAKu7K,oBAGnFlzF,EAAQroF,KAAKi+K,qBAAqBlmL,EAASkQ,EAAG,SAAUlQ,GACxD,MAAOA,GAAQgpI,SAAWhpI,YAAmBkvJ,OAE7C5+D,IAAUA,EAAM04C,MAAM/gI,KAAMiI,IAC5BjI,KAAK6+K,aAAex2F,EAChBq2E,EAAiB9jK,MAAe8jK,EAAgBr2E,EAAMjoF,QAAQinH,SAC9Dq3C,EAAel7J,SACf6jH,EAAQrtH,KAAKquF,GAEjB+yC,EAAUphI,KAAKquF,GACRA,GAPX,SAUJg1F,WAAY,SAAUp1K,GAAV,GAIAnJ,GAHJupF,EAAQroF,KAAK++K,YAAY92K,EAAElQ,QAASkQ,EAAEqY,cACtC+nE,IAASA,EAAM4qE,kBACfjzJ,KAAKi/K,uBAAyBj/K,KAAKi/K,wBAA0Bj/K,KAAKk/K,mBAAmB93K,KAAKpH,MAE1FwjF,GAAWjmF,UAAWuB,KAAUA,EAAIwsJ,IAAatrJ,KAAKi/K,uBAAwBngL,MAGtFogL,mBAAoB,SAAUj3K,GAAV,GASJk3K,GAIIzgB,EAQR5/J,EApBJ8/E,EAAM5+E,KACNI,EAAUw+E,EAAIx+E,QACdinH,EAAUzoC,EAAIwpC,SACdgT,EAAYx8C,EAAI68C,WAChBpzC,EAAQzJ,EAAIigG,aACZtqB,EAASv0J,KAAKitK,kBAAkBhlK,EAChCjI,MAAK2rJ,UAAUvoH,IAAI8rE,cAAcqlD,GAC7BlsE,GAASA,EAAM4qE,iBAAmB5qE,EAAMszC,QAAUtzC,EAAMzuF,OAAO46J,kBAC3D2qB,EAAc92F,EAAMzuF,OAAO46J,gBAAgBD,EAAOthI,EAAGshI,EAAOljJ,EAAGg3E,EAAMknE,UACrE4vB,GAAeA,IAAgB92F,IAC/B82F,EAAYp+C,MAAM/gI,KAAMiI,GACxBjI,KAAK6+K,aAAeM,EAChBzgB,EAAiB9jK,MAAewF,EAAQinH,QAASh/B,EAAMjoF,QAAQinH,SAC/Dq3C,EAAel7J,SACf6jH,EAAQrtH,KAAKmlL,GAEjB/jD,EAAUphI,KAAKmlL,MAKvBn7F,GAAazmF,UAAWuB,KAAUA,EAAIwsJ,IAAatrJ,KAAKi/K,uBAAwBngL,IAChFkB,KAAKihI,sBAGb5nB,WAAY,SAAUpxG,GAClB,GAAIssJ,GAASv0J,KAAKitK,kBAAkBhlK,EACpCjI,MAAKo/K,iBAAiB7qB,GAClBv0J,KAAK2rJ,UAAU5qB,OACf/gI,KAAK2rJ,UAAU5qB,MAAM/gI,KAAMiI,GAE3BjI,KAAKu7K,kBACLv7K,KAAKq/K,oBAAoB9qB,EAAQtsJ,IAGzCm3K,iBAAkB,SAAU7qB,GAAV,GAELz5J,GACD6Q,EAFJi1J,EAAa5gK,KAAK2rJ,UAAUiV,UAChC,KAAS9lK,EAAI,EAAGA,EAAI8lK,EAAWhpK,OAAQkD,IAC/B6Q,EAAUi1J,EAAW9lK,GACrB6Q,EAAQy3B,IAAI8rE,cAAcqlD,GAC1B5oJ,EAAQkzJ,OAAOtK,GAEf5oJ,EAAQ7K,QAIpBu+K,oBAAqB,SAAU9qB,EAAQtsJ,GAAlB,GAQTkK,GAEIs2E,EACA62F,EAGAC,EAbR3gG,EAAM5+E,KACN0+J,EAAiB9/E,EAAIx+E,QAAQinH,QAC7Byc,EAAWllD,EAAI+sE,UACf/U,EAAeh4D,EAAI+sE,UAAU/U,aAC7BvvB,EAAUzoC,EAAIwpC,SACdgT,EAAYx8C,EAAI68C,UAChBqI,GAAS1gG,IAAI8rE,cAAcqlD,KACvBpiJ,EAAQykI,EAAa7O,mBAAmBwsB,GACxCpiJ,IAAUnS,KAAKw/K,qBACX/2F,EAASq7C,EAAS6iC,sBAAsBx0J,GACxCmtK,EAAY72F,EAAOz1E,IAAI,SAAUq1E,GACjC,MAAOA,GAAMy4C,UAAU74H,KAEvBs3K,EAAYD,EAAU,OAC1BC,EAAUvwB,eAAiBswB,EACvB72F,EAAO7wF,OAAS,IAAMoI,KAAKgI,QAAQi7I,GAAcs8B,IAC7C7gB,EAAel7J,SACf6jH,EAAQw3C,OAAOp2E,EAAQ8rE,GAE3Bn5B,EAAUphI,KAAKyuF,IAEf4+B,EAAQvmH,OAEZd,KAAKw/K,mBAAqBrtK,KAItCstK,aAAc,WAAA,GACN7gG,GAAM5+E,KACN8jI,EAAWllD,EAAI+sE,UACftkC,EAAUzoC,EAAIwpC,SACdgT,EAAYx8C,EAAI68C,UACpBz7H,MAAKq5G,WAAWruF,SAChB84G,EAASy9B,iBACTnmC,EAAUt6H,OACVumH,EAAQvmH,aACDd,MAAKw/K,oBAEhBv+C,kBAAmB,WAAA,GACXriD,GAAM5+E,KACNqnH,EAAUzoC,EAAIwpC,SACdgT,EAAYx8C,EAAI68C,UACpBz7H,MAAK6+K,aAAe,KAChBx3D,GACAA,EAAQvmH,OAERs6H,GACAA,EAAUt6H,QAGlB4+K,aAAc,WACV1/K,KAAK46K,WAET+E,oBAAqB,WACb3/K,KAAK4/K,iBACLz2I,cAAcnpC,KAAK4/K,gBACnB5/K,KAAK4/K,eAAiB,OAG9BjF,eAAgB,WAAA,GAIH5+B,GACDtoH,EAJJ0rD,EAASn/E,KACTI,EAAUJ,KAAKI,QACfw6G,KAAiB1kG,OAAO9V,EAAQw2I,aACpC,KAASmF,EAAS,EAAGA,EAASnhC,EAAYhjH,OAAQmkJ,IAC1CtoH,EAAOmnF,EAAYmhC,GACnBtoH,EAAKg7B,YAAa,GAClB0wB,EAAO0gG,2BAA2BpsJ,EAAMsoH,IAIpD8jC,2BAA4B,SAAUpsJ,EAAMsoH,GAAhB,GAMpByuB,GACKjb,EACDt+I,EACA6uK,EACAtkL,EACAukL,EAGI1U,EACK2U,EACDC,EACArkD,EAmBR58H,EAnCJmgF,EAASn/E,KACT27H,EAAS37H,KAAKI,QAAQu7H,OACtBwiB,EAAexiB,EAAO/jI,OACtBsoL,KACA15J,IAEJ,KAAS+oI,EAAW,EAAGA,EAAWpR,EAAcoR,IAK5C,GAJIt+I,EAAI0qH,EAAO4zB,GACXuwB,EAAS7uK,EAAE2lI,eAAiBnjH,EAAKvkB,OAAS+B,EAAE2lI,cAA2B,IAAXmF,EAC5DvgJ,EAAOyV,EAAEzV,KACTukL,EAAavkL,EAAK5D,OAClBqZ,EAAE05J,eAAiBmV,GAAUC,EAAa,EAG1C,IAFAvV,EAAWhvB,EAAW/nH,EAAMumH,EAAS/oI,EAAE05J,cAAenvK,EAAK,KACvD6vK,EAAQb,EAAW3uB,EAAe7B,EAC7BgmC,EAAS,EAAGA,EAASD,EAAYC,IAClCC,EAAUzkL,EAAKwkL,GACfpkD,EAAWyvC,EAAMp6J,EAAE05J,cAAesV,EAAS9gG,EAAO46C,aAAajE,OAC/D00C,GAAa0V,EAAiBtkD,KAC9Bp1G,EAAM1e,MACF8zH,EACAqkD,IAECzV,IACD0V,EAAiBtkD,IAAY,GAM7Cp1G,GAAM5uB,OAAS,IACX4yK,IACAhkJ,EAAQk4H,EAAYl4H,EAAO,SAAU5jB,EAAGC,GACpC,MAAO0e,GAAQurG,aAAalqH,EAAE,GAAIC,EAAE,OAGxC7D,EAAS4/I,EAAUp4H,GACvBiN,EAAKmzG,WAAa5nI,EAAO,KAGjCmhL,YAAa,SAAUxkD,GAAV,GAGA7gI,GACDijB,EAHJk/H,EAAcF,GAAapxI,QAAQsxI,YAAYthB,GAC/C38H,GAAS,CACb,KAASlE,EAAI,EAAGA,EAAImiJ,EAAYrlJ,OAAQkD,IAOpC,GANIijB,EAAQk/H,EAAYniJ,GACpBijB,IAAU0xC,EACV1xC,EAAQ,QAERA,GAAgB,SAEf2jE,GAAQi6C,EAAO59G,IAAS,CACzB/e,GAAS,CACT,OAGR,MAAOA,IAEXi8K,qBAAsB,WAAA,GAEdmF,GADAhgL,EAAUJ,KAAKI,OAEfA,GAAQhI,cACRgI,EAAQhI,aAAc,EACtBgoL,GAAmB,GAEvBpgL,KAAK46K,UACDwF,IACAhgL,EAAQhI,aAAc,IAG9B42K,iBAAkB,SAAUnI,EAAaoI,GAAvB,GAKVzoJ,GAJAo4D,EAAM5+E,KACN8jI,EAAWllD,EAAI+sE,UACfvwB,EAAYx8C,EAAI68C,WAChB4f,GAAiBvX,EAAS2mC,WAAa3mC,EAASnI,QAAQkrC,EAOxDrgJ,GALAvjB,GAAQo4I,EAAcn8I,MAClB2iJ,GACAL,GACAC,KAEI3d,EAASkjC,UAAU,SAAU3+E,GACjC,MAAOA,GAAMszC,OAAOxpH,QAAU00J,GAAex+E,EAAMl2E,QAAU88J,IAGzDnrC,EAAS8iC,oBAAoBC,GAEzCzrC,EAAUphI,KAAKwsB,IAEnBk3J,uBAAwB,WACpB,MAAO19K,MAAK2rJ,UAAUiV,WAAWhpK,QAAUoI,KAAKooH,UAAYpoH,KAAKu7K,kBAAoBv7K,KAAKq2H,kBAAkB8sB,MAEhHk9B,uBAAwB,WAAA,GAChBvhL,GAGI2+K,CAFRz5F,IAAahkF,KAAKjI,SAAU+G,KAAUA,EAAIwsJ,IAAatrJ,KAAKq5G,WAAYv6G,IACpEkB,KAAK09K,0BAELl6F,GAAWxjF,KAAKjI,SAAU0lL,KAAYA,EAAMnyB,IAAatrJ,KAAKq5G,WAAYokE,KAGlF6C,aAAc,SAAUlgL,EAAS+2I,GAC7B8H,EAAmBj/I,KAAKs6K,iBAAkBl6K,GAC1CJ,KAAKs6K,iBAAmB1/K,GAAWoF,KAAKs6K,iBAAkBl6K,GAC1DJ,KAAKI,QAAUxF,MAAeoF,KAAKs6K,kBAC/BnjC,IACAn3I,KAAKu6K,OAASpjC,EACdn3I,KAAK+5H,aAAaod,MAAQA,GAE9Bn3I,KAAKw6K,WAAWx6K,KAAKI,QAASJ,KAAKu6K,SAEvCl1J,WAAY,SAAUjlB,EAAS+2I,GAC3Bn3I,KAAKsgL,aAAalgL,EAAS+2I,GAC3Bn3I,KAAK26K,iBACL36K,KAAKmjK,SACLnjK,KAAKqgL,0BAETv6J,QAAS,WAAA,GAEDhnB,GAMA2+K,CAPJz9K,MAAKmgD,YAAa,EAElB6jC,GAAahkF,KAAKjI,SAAU+G,KAAUA,EAAIysJ,IAAevrJ,KAAKm9K,cAAer+K,EAAIqlJ,IAAcnkJ,KAAK0wK,mBAAoB5xK,EAAIwsJ,IAAatrJ,KAAKq5G,WAAYv6G,IACtJkB,KAAK29K,YACL39K,KAAK29K,UAAU73J,gBACR9lB,MAAK29K,WAGhB35F,GAAazmF,UAAWkgL,KAAYA,EAAMnyB,IAAatrJ,KAAKi/K,uBAAwBxB,IACpFz9K,KAAK27K,eACD37K,KAAKu7D,UACLv7D,KAAKu7D,QAAQz1C,UACb9lB,KAAKu7D,QAAU,MAEnBv7D,KAAK2/K,uBAEThE,aAAc,WAAA,GACN/8F,GAAM5+E,KACNkvC,EAAQ0vC,EAAIs8F,OACZ8B,EAAap+F,EAAIm+F,WAKrB,IAJI7tI,IACAA,EAAMppB,UACN9lB,KAAKk7K,OAAS,MAEd8B,EACA,KAAOA,EAAWplL,OAAS,GACvBolL,EAAWlrK,QAAQgU,SAG3B9lB,MAAKihI,oBACDjhI,KAAKooH,UACLpoH,KAAKooH,SAAStiG,UAEd9lB,KAAKy7H,YACLz7H,KAAKy7H,WAAW31G,UAEhB9lB,KAAKu8K,iBACLv8K,KAAKu8K,eAAez2J,gBACb9lB,MAAKu8K,gBAEZv8K,KAAKq8K,YACLr8K,KAAKq8K,UAAUv2J,gBACR9lB,MAAKq8K,WAEZr8K,KAAKw8K,kBACLx8K,KAAKw8K,gBAAgB12J,gBACd9lB,MAAKw8K,oBAyJxB7yD,GAAkB8hC,IACdgwB,SAAU,GACV5iC,aACAlE,QACInxI,SAAS,EACT09H,WAEJ0V,gBACAlC,gBACIx1I,KAAMqiJ,GACN/lJ,QACA4/H,WAAa53H,SAAS,GACtB09H,UACAm8B,gBAAkB75J,SAAS,IAE/Bm4H,UACA+b,aAAc,KACdrwB,SAAW7jH,SAAS,GACpBpL,aAAa,EACbovI,aACA1D,YACAx7F,SACAq0H,SACAE,SACAoE,WACAmb,UAAU,EACVE,UAAU,IAEdpkL,MAAM0C,WAAW1C,MAAMqpB,SACnB6wG,UAAWA,GACXstB,WAAYA,GACZ+F,UAAWA,GACXH,YAAaA,GACbI,sBAAuBA,GACvBG,IAAKA,GACLG,SAAUA,GACVL,SAAUA,GACVU,aAAcA,GACdF,QAASA,GACTM,YAAaA,GACbE,OAAQA,GACRC,YAAaA,GACbV,iBAAkBA,GAClBD,YAAaA,GACbzB,iBAAkBA,GAClBD,oBAAqBA,GACrBoD,oBAAqBA,GACrB8D,MAAOA,GACPzE,eAAgBA,GAChB9B,cAAeA,GACfY,cAAeA,GACfiB,UAAWA,GACXD,iBAAkBA,GAClBM,kBAAmBA,GACnBoC,WAAYA,GACZC,cAAeA,GACfH,aAAcA,GACdhF,aAAcA,GACdvE,qBAAsBA,GACtB6H,UAAWA,GACXc,cAAeA,GACfL,OAAQA,GACRJ,WAAYA,GACZD,aAAcA,GACd5C,UAAWA,GACXP,UAAWA,GACXC,YAAaA,GACbljF,KAAMA,GACNknF,aAAcA,GACdM,SAAUA,GACVF,cAAeA,GACfG,YAAaA,GACbJ,WAAYA,GACZhC,aAAcA,GACdC,oBAAqBA,GACrBoB,gBAAiBA,GACjB7D,iBAAkBA,GAClB4C,SAAUA,GACVC,cAAeA,GACff,aAAcA,GACdD,gBAAiBA,GACjByC,iBAAkBA,GAClBN,UAAWA,GACXtB,iBAAkBA,GAClBpK,aAAcA,GACdiI,cAAeA,GACfQ,kBAAmBA,GACnBO,UAAWA,GACXh0E,QAASA,GACTy1E,UAAWA,GACXD,UAAWA,GACXG,eAAgBA,GAChBD,iBAAkBA,GAClBuB,WAAYA,GACZjB,eAAgBA,GAChBD,cAAeA,GACfD,SAAUA,GACVrI,UAAWA,GACXC,cAAeA,GACfhF,aAAcA,EACdkB,gBAAiBhB,EACjBA,WAAYA,EACZJ,gBAAiBA,EACjBR,aAAcA,EACdwB,iBAAkBA,EAClBrB,YAAaA,EACbkB,mBAAoBA,EACpBS,aAAcA,EACd7B,SAAUA,EACVU,mBAAoBA,EACpB7nF,SAAUA,EACV2oF,WAAYA,EACZoB,eAAgBA,EAChBhB,kBAAmBA,KAEzBjlJ,OAAOuB,MAAM2sB,SACC,kBAAVpuB,SAAwBA,OAAOgiC,IAAMhiC,OAAS,SAAUiiC,EAAIC,EAAIC,IACrEA,GAAMD,OAEV,SAAUniC,EAAGC,QACVA,OAAO,uBACH,4BACA,aACA,qBACA,uBACA,gBACA,oBACDD,IACL,WAm9BE,MAl9BC,UAAUE,EAAGE,GAufV,QAAS2pL,GAAkBrxK,GACvBu8I,EAAMxnJ,GAAGiL,GAAQ,WACb,GAAIjO,GAAWjB,KAAKwnH,SACpB,IAAIvmH,EACA,MAAOA,GAASiO,GAAMpI,MAAM7F,EAAUlG,YAOlD,QAAS+gJ,GAAYngB,EAAQngI,GACzB,GAAiBglL,GAAyD7W,EAAmC8W,EAAzGzhL,KAA2B0hL,EAAiB/kD,EAAOglD,kBAA4BZ,EAAavkL,EAAK5D,MACrG,IAAmB,IAAfmoL,EAGA,MAFAU,GAAc7lL,KAAe+gI,GAC7B8kD,EAAYre,iBAAkB,GACtBqe,EAaZ,KAXI/+F,EAAQg/F,IACRxoL,EAAMqsB,aAAa,4HACfm8J,IACAF,EAAe/9K,EAASi+K,MAG5BF,EAAe/9K,EAASk5H,EAAOzsH,MAAQ,IACP,IAA5BsxK,EAAa33K,aACb23K,EAAe/9K,EAASi/E,EAAQi6C,EAAOzsH,MAAQ,qCAAuC,sBAGzFy6J,EAAU,EAAGA,EAAUoW,EAAYpW,IACpC8W,EAAc7lL,KAAe+gI,GACxBzjI,EAAMgE,WAAWukL,EAAYxsG,SAC9BwsG,EAAYxsG,MAAQr9E,GAExB6pL,EAAYG,SAAWjX,EACvB8W,EAAYI,YAAcrlL,EAAKmuK,GAAS/rK,MACxCoB,EAAO8I,KAAK24K,GACRD,IACAC,EAAYvxK,KAAOsxK,GACf7kD,OAAQ8kD,EACRzsI,MAAOx4C,EAAKmuK,KAIxB,OAAO3qK,GAniBd,GA+DO8hL,GASAr1B,EAiaAs1B,EAsBKpjL,EA2CLqjL,EAoCAC,EACAlvG,EAyNA+0E,EAiCAo6B,EAqBAC,EA71BAp1G,EAAK,cACL7zE,EAAQvB,OAAOuB,MACfrB,EAAQqB,EAAMrB,MACd2C,EAAatB,EAAMuB,YACnBC,EAAcxB,EAAMyB,aACpB4nB,EAAUrpB,EAAMqpB,QAChB6wG,EAAY7wG,EAAQ6wG,UACpBgvD,EAAa7/J,EAAQkqI,MACrB1O,EAAex7H,EAAQw7H,aACvB/3I,EAAS9M,EAAMmpB,GAAGrc,OAClBtJ,EAAaxD,EAAMsD,KAAKE,WACxBd,EAAa1C,EAAM0C,WACnB8mF,EAAUngE,EAAQmgE,QAClBs4D,EAAWz4H,EAAQy4H,SACnBjnB,EAAmBxxG,EAAQwxG,iBAC3B9vH,EAAUse,EAAQte,QAClB4vH,EAAWtxG,EAAQsxG,SACnB7sH,EAAQtP,EAAEsP,MACVD,EAAUrP,EAAEqP,QACZrF,EAAShK,EAAEgK,OACX+B,EAAWvK,EAAMuK,SACjB4+K,EAAgB,aAAet1G,EAC/BylD,EAAmBY,EAAUZ,iBAC7BsxB,EAAoB1wB,EAAU0wB,kBAC9BC,EAAoB3wB,EAAU2wB,kBAC9BC,EAAe5wB,EAAU4wB,aACzBC,EAAe7wB,EAAU6wB,aACzBC,EAAkB9wB,EAAU8wB,gBAC5BC,EAAkB/wB,EAAU+wB,gBAC5B9jF,EAAO+yD,EAAU/yD,KACjB+jF,EAAWhxB,EAAUgxB,SACrBC,EAAajxB,EAAUixB,WACvBC,EAAalxB,EAAUkxB,WACvBC,EAAOnxB,EAAUmxB,KACjBC,EAAWpxB,EAAUoxB,SACrBC,EAAerxB,EAAUqxB,aACzBtrF,EAASi6D,EAAUj6D,OACnBurF,EAAatxB,EAAUsxB,WACvBC,EAASvxB,EAAUuxB,OACnBlyB,EAAaW,EAAUX,WACvBC,GAAaU,EAAUV,WACvB/pF,GAAS,SACT25I,GAAY,YACZC,GAAQ,QACR9xH,GAAQ2iE,EAAU3iE,MAClBoyF,GAAMzvB,EAAUyvB,IAChBL,GAAQpvB,EAAUovB,MAClBC,GAASrvB,EAAUqvB,OACnBp9I,GAAanM,EAAMmM,WACnBm9K,GAA6B,IAC7BC,GAAqB,IACrBC,GAAkB,0BAClBC,GAAuB,wBA0c3B,KAzcA9uD,EAASF,iBAAiBvqG,UACtBomB,OAAQ,SAAUz2C,EAAS2P,GACvB,MAAO,IAAIxP,GAAMoiE,WAAWviE,EAAS6C,GACjC4gE,QAAQ,EACRN,YAAY,EACZG,SAAS,GACV3zD,OAGPo5K,EAAwB/tD,EAAiBryH,QACzCw1H,YACI7N,YAAa,eACbF,YAAa,eACby5D,gBAAiB,qBACjBr5K,OAAQ,YACR5H,KAAM,aAGV8qJ,EAAQzmJ,EAAOtE,QACfC,KAAM,SAAU5I,EAAS03H,GACrB,GAAI7qG,EACJ1sB,GAAM4tB,QAAQ/tB,GACdiN,EAAOf,GAAGtD,KAAKwH,KAAKnI,KAAMjI,GACtB03H,IACA7qG,EAAa6qG,EAAY7qG,iBAClB6qG,GAAY7qG,YAEvB5kB,KAAKI,QAAUxF,KAAeoF,KAAKI,QAASqvH,GAC5CzvH,KAAK3G,QAAU2G,KAAKjI,QACpBiI,KAAK66K,gBACDprD,IACAA,EAAY7qG,WAAaA,GAE7B5kB,KAAK6hL,kBAAoB,GAAIb,GAC7BhhL,KAAKoH,KAAKpH,KAAK0H,OAAQ1H,KAAKI,SAC5BJ,KAAK8hL,gBAAgBryD,GACrBv3H,EAAM0uB,OAAO5mB,KAAMuhB,EAAQF,KAE/B3Z,QACI45K,GACAt+B,EACAC,EACAzxB,EACAsxB,EACAC,EACAG,EACAC,EACAE,EACAhkF,EACA+jF,EACAE,EACAC,EACAC,EACAC,EACAtrF,EACAurF,EACAjyB,EACAC,GACAiyB,GAEJvjJ,SACI8O,KAAM,QACNusK,SAAU,GACVtkC,MAAO,UACP5D,gBACAsF,aACAlE,UACAiC,gBACAnoF,UAAU,EACVimF,kBACA/Y,UACA+b,aAAc,KACdrwB,WACAjvH,aAAa,EACbovI,aACA1D,YACAx7F,SACAq0H,SACAE,SACAoE,WACAmb,UAAU,EACVE,UAAU,GAEd91J,MAAO,WACH,MAAO9vB,MAEX8gB,QAAS,WAAA,GACDy+G,GAAQj2H,KACRiB,EAAWg1H,EAAMzO,SACrBvmH,GAASivH,cAAc+F,EAAM71H,SAC7Ba,EAAS+5K,oBACT/kD,EAAM8rD,cACN9rD,EAAM+rD,kBACN/rD,EAAMjuH,QAAQs5K,IACdrrD,EAAM2kD,WAEVp1J,QAAS,WACL,MAAOttB,GAAM0tB,WAAW5lB,KAAKjI,UAEjCorK,OAAQ,SAAUwI,GACd3rK,KAAK0lB,MAAQ,KACb1lB,KAAKwnH,UAAU27C,OAAOwI,IAE1BtmJ,WAAY,SAAUjlB,GAClB,GAAI61H,GAAQj2H,KAAM4kB,EAAaxkB,EAAQwkB,iBAChCxkB,GAAQwkB,WACf5f,EAAOf,GAAGqhB,WAAWnd,KAAK8tH,EAAO71H,GACjCJ,KAAKwnH,UAAU84D,aAAalgL,EAASJ,KAAKiiL,iBAAiB7hL,IAC3DJ,KAAKI,QAAUJ,KAAKwnH,UAAUpnH,QAC9BJ,KAAKooH,SAAS/iG,WAAWrlB,KAAKI,QAAQinH,SACtCrnH,KAAKkiL,cAAgB,KACjBt9J,GACAqxG,EAAMksD,cAAcv9J,GAEpBqxG,EAAMmsD,eACNnsD,EAAMosD,kBAENpsD,EAAM+rD,kBACN/rD,EAAMktC,UAEVltC,EAAMzO,UAAU64D,0BAEpB8B,cAAe,SAAUv9J,GACrB,GAAIqxG,GAAQj2H,IACZi2H,GAAMrxG,WAAW/c,OAAO8/B,GAAQsuF,EAAMqsD,oBACtCrsD,EAAMrxG,WAAaA,EAAalpB,EAAW8yC,OAAO5pB,GAClDqxG,EAAMmsD,gBAAiB,EACvBnsD,EAAMssD,UAAW,EACjB39J,EAAWxd,KAAKugC,GAAQsuF,EAAMqsD,oBAC1BrsD,EAAM71H,QAAQquD,UACd7pC,EAAWkiC,SAGnBhhC,QAAS,WACL,GAAImwG,GAAQj2H,KAAM4kB,EAAaqxG,EAAMrxG,UACrCqxG,GAAMl+H,QAAQ6xB,IAAImiD,GACdnnD,GACAA,EAAW/c,OAAO8/B,GAAQsuF,EAAMqsD,oBAEhCrsD,EAAMzO,YACNyO,EAAMzO,UAAU1hG,gBACT9lB,MAAKwnH,WAEZxnH,KAAKooH,WACLpoH,KAAKooH,SAAStiG,gBACP9lB,MAAKooH,UAEhBpoH,KAAKwiL,4BACLx9K,EAAOf,GAAG6hB,QAAQ3d,KAAK8tH,IAE3BwsD,eAAgB,SAAUvzK,GAAV,GAEHvR,GADLsjK,EAAQjhK,KAAK2rJ,UAAUsV,KAC3B,KAAStjK,EAAM,EAAGA,EAAMsjK,EAAMrpK,OAAQ+F,IAClC,GAAIsjK,EAAMtjK,GAAKyC,QAAQ8O,OAASA,EAC5B,MAAO,IAAIgyK,GAAUlhL,KAAMihK,EAAMtjK,KAI7C+kL,gBAAiB,SAAU/kL,GACvB,GAAIsjK,GAAQjhK,KAAK2rJ,UAAUsV,KAC3B,IAAIA,EAAMtjK,GACN,MAAO,IAAIujL,GAAUlhL,KAAMihK,EAAMtjK,KAGzCglL,WAAY,SAAUhiK,GAAV,GAGChjB,GAFLmmI,EAAW9jI,KAAK2rJ,UAChBhwB,EAASmI,EAAS2mC,WAAa3mC,EAASnI,MAC5C,KAASh+H,EAAM,EAAGA,EAAMg+H,EAAO/jI,OAAQ+F,IACnC,GAAIgjB,EAASg7G,EAAOh+H,IAChB,MAAO,IAAIwjL,GAAYnhL,KAAM27H,EAAOh+H,KAIhDilL,iBAAkB,SAAU1zK,GACxB,MAAOlP,MAAK6iL,eAAgB3zK,KAAMA,KAEtC4zK,kBAAmB,SAAU3wK,GACzB,MAAOnS,MAAK6iL,eAAgB1wK,MAAOA,KAEvC0wK,cAAe,SAAUziL,GACrB,GAAI8uJ,GAAgBlvJ,KAAK+iL,eAAe3iL,EACxC,IAAI8uJ,EACA,MAAO,IAAIiyB,GAAYnhL,KAAMkvJ,IAGrC6zB,eAAgB,SAAU3iL,GAAV,GAGR8uJ,GAISvxJ,EANTmmI,EAAW9jI,KAAK2rJ,UAChBhwB,EAASmI,EAAS2mC,WAAa3mC,EAASnI,MAE5C,IAAIj6C,EAAQthF,EAAQ+R,OAChB+8I,EAAgBvzB,EAAOv7H,EAAQ+R,WAC5B,IAAIuvE,EAAQthF,EAAQ8O,MACvB,IAASvR,EAAM,EAAGA,EAAMg+H,EAAO/jI,OAAQ+F,IACnC,GAAIg+H,EAAOh+H,GAAKuR,OAAS9O,EAAQ8O,KAAM,CACnCggJ,EAAgBvzB,EAAOh+H,EACvB,OAIZ,MAAOuxJ,IAEX2rB,cAAe,WACX76K,KAAKjI,QAAQ2N,GAAG27K,EAAer7K,EAAMhG,KAAKsyE,YAAatyE,QAE3DsyE,YAAa,SAAUrqE,GAAV,GACLhH,GAAWjB,KAAKwnH,UAChBH,EAAUrnH,KAAKooH,SACfhoG,EAASnY,EAAE0jB,aACTvL,IAAU1pB,EAAE0pB,GAAQnI,QAAQovG,EAAQtvH,SAASH,SAAWqJ,GAAaA,EAAS+9K,aAChF/9K,EAASw+K,gBAGjBwC,iBAAkB,SAAUxyD,GAAV,GAMNvmG,GACAiuH,EANJmB,GAAa7oB,OAAmB0nB,KACpC,OAAkB,SAAdmB,GAAsC,eAAdA,GAA4C,iBAAdA,EAC/C/2H,EAAQu1H,YAAY7gB,MAE3Bv0C,EAAQ42D,IACJpvH,EAAS3H,EAAQF,GAAG6H,WACpBiuH,EAAQjuH,EAAOovH,IAAcpvH,EAAOovH,EAAUx7I,mBAC3Cq6I,EAAMlhB,WAHjB,GAMJ+sD,WAAY,WACRhjL,KAAKijL,aAAajjL,KAAKI,QAASJ,KAAKiiL,iBAAiBjiL,KAAKI,UAC3DJ,KAAKI,QAAUJ,KAAKwnH,UAAUpnH,SAElC6iL,aAAc,SAAU7iL,EAASu9I,GAC7B39I,KAAKwnH,UAAY,GAAI45D,GAAWphL,KAAKjI,QAAQ,GAAIqI,EAASu9I,GACtD/xC,SAAU,GAAIk1E,GAAsB9gL,MACpCkI,OAAQlI,QAGhBkjL,QAAS,SAAUj7K,GACfjI,KAAKwnH,UAAYv/G,EAAEC,QAEvB45K,gBAAiB,SAAUryD,GACvB,GAAIwG,GAAQj2H,KAAM4kB,GAAc6qG,OAAmB7qG,UACnDqxG,GAAMqsD,mBAAqBt8K,EAAMiwH,EAAMosD,eAAgBpsD,GACvDA,EAAMrxG,WAAalpB,EAAW8yC,OAAO5pB,GAAYxd,KAAK,SAAU6uH,EAAMqsD,oBACtErsD,EAAM+rD,kBACFp9J,IACAqxG,EAAMmsD,gBAAiB,GAE3BpiL,KAAKgjL,aACLhjL,KAAKmjL,eACDv+J,GACIqxG,EAAM71H,QAAQquD,UACdwnE,EAAMrxG,WAAWkiC,SAI7B07H,0BAA2B,WAAA,GAGVzjL,GAFTqkL,EAAWpjL,KAAKqjL,kBACpB,IAAID,EACA,IAASrkL,IAAOqkL,GACZA,EAASrkL,GAAK+mB,SAGtB9lB,MAAKqjL,uBAETC,qBAAsB,SAAUp0K,EAAMiD,GAAhB,GACdixK,GAAWpjL,KAAKqjL,mBAAqBrjL,KAAKqjL,uBAC1CtkL,EAAMmQ,EAAOiD,EACbk1G,EAAU+7D,EAASrkL,EAIvB,OAHKsoH,KACDA,EAAU+7D,EAASrkL,GAAO,GAAI+nJ,GAAiB9mJ,KAAKjI,UAEjDsvH,GAEXk8D,aAAc,SAAUt7K,GACpB,GAAIA,EAAE6wI,UAAW,CACb,GAAIzxB,GAAUrnH,KAAKsjL,qBAAqBr7K,EAAE81I,SAAU91I,EAAEqqJ,UACtDjrC,GAAQrtH,KAAKiO,OACNjI,MAAKooH,UACZpoH,KAAKooH,SAASpuH,KAAKiO,IAG3Bu7K,aAAc,SAAUv7K,GACpB,GAAIA,EAAE6wI,UAAW,CACb,GAAIzxB,GAAUrnH,KAAKsjL,qBAAqBr7K,EAAE81I,SAAU91I,EAAEqqJ,UACtDjrC,GAAQvmH,WACDd,MAAKooH,UACZpoH,KAAKooH,SAAStnH,KAAKmH,IAG3Bw7K,UAAW,SAAUx7K,GACjBjI,KAAKwiL,4BACLxiL,KAAK0jL,aAAaz7K,EAAEC,QACflI,KAAKoiL,iBAAkBpiL,KAAKuiL,UAAaviL,KAAKI,QAAQquD,UACvDzuD,KAAKgI,QAAQ27I,IAGrB+/B,aAAc,SAAUziL,GACpBjB,KAAKI,QAAUa,EAASb,QACxBJ,KAAKs6K,iBAAmBr5K,EAASq5K,iBACjCt6K,KAAKu7D,QAAUt6D,EAASs6D,QACxBv7D,KAAK2rJ,UAAY1qJ,EAAS0qJ,UAC1B3rJ,KAAKk7K,OAASj6K,EAASi6K,OACvBl7K,KAAKy7H,WAAax6H,EAASw6H,WAC3Bz7H,KAAK+8K,YAAc97K,EAAS87K,YAC5B/8K,KAAKq8K,UAAYp7K,EAASo7K,UAC1Br8K,KAAKu8K,eAAiBt7K,EAASs7K,eAC/Bv8K,KAAKw8K,gBAAkBv7K,EAASu7K,iBAEpCnmD,iBAAkB,SAAU5pH,GAAV,GAEL9O,GADL+J,EAAS1H,KAAKmH,OAClB,KAASxJ,EAAM,EAAGA,EAAM8O,EAAM7U,OAAQ+F,IAClC,GAAI+jF,EAAQh6E,EAAO+E,EAAM9O,KACrB,OAAO,GAInBwlL,aAAc,WACVnjL,KAAKooH,SAAWpoH,KAAK47K,iBACrB57K,KAAKooH,SAAShhH,KAAKm6K,GAAOv7K,EAAMhG,KAAK2jL,cAAe3jL,QAExD4jL,mBAAoB,SAAU37K,GACrBjI,KAAKgI,QAAQ86I,EAAmB76I,IACjCjI,KAAK6jL,iBAAiB57K,EAAE4+J,YAAa5+J,EAAEgnK,aAG/C4U,iBAAkB,SAAUhd,EAAaoI,GAAvB,GAONpyB,GACAr5I,EAPJyyH,EAAQj2H,KAAKwnH,UAAWsc,EAAW7N,EAAM01B,UAAWtQ,GAAiBvX,EAAS2mC,WAAa3mC,EAASnI,QAAQkrC,EAC5GnwK,GAAEuM,QAAQo4I,EAAcn8I,MACpB2iJ,GACAL,GACAC,MACE,GACF5E,EAAkBxB,EAAcwB,gBAAkBxB,EAAcwB,oBAChEr5I,EAAUq5I,EAAgBoyB,GAC9BpyB,EAAgBoyB,KAAcvtF,EAAQl+E,KAAYA,IAElD63I,EAAc73I,SAAW63I,EAAc73I,QACvCxD,KAAK6hL,kBAAkB3pJ,KAAKmjH,IAEhCplB,EAAMglD,wBAEVW,eAAgB,WACZ,MAAO,IAAI7pG,GAAQ/xE,KAAKjI,QAASiI,KAAKI,QAAQinH,UAElDs8D,cAAe,WACX,GAAI1tD,GAAQj2H,KAAKwnH,UAAWsc,EAAW7N,EAAM01B,UAAWvwB,EAAYnF,EAAMwF,UAC1EqI,GAASy9B,iBACTnmC,EAAUt6H,QAEdgjL,UAAW,SAAU77K,GACjB,GAA2FsnJ,GAAgMlU,EAAe0oC,EAAtS9tD,EAAQj2H,KAAMI,EAAU61H,EAAM71H,QAASu7H,EAAS1F,EAAMisD,eAAiB9hL,EAAQu7H,OAAkBwiB,EAAexiB,EAAO/jI,OAAQ4D,EAAOy6H,EAAMrxG,WAAW+D,OAAQq7J,GAAW/tD,EAAMrxG,WAAWovB,aAAep8C,OAAS,EAAG8yK,KAAsBuZ,EAAmBjkL,KAAK6hL,iBACxQ,KAAKtyB,EAAW,EAAGA,EAAWpR,EAAcoR,IACxClU,EAAgB1f,EAAO4zB,GACnBt5B,EAAMkqD,YAAY9kC,IAAkB2oC,GACpCD,EAAgBjoC,EAAYT,EAAe7/I,GAC3CkvK,EAAkBA,EAAgBx0J,OAAO6tK,GACzCE,EAAiBC,aAAaH,EAAe97K,KAE7CozI,EAAgB36I,KAAW26I,GAC3BqvB,EAAgB5iK,KAAKuzI,GACrB4oC,EAAiBE,aAAa9oC,EAAepzI,GAGrDguH,GAAMisD,cAAgBvmD,EACtBv7H,EAAQu7H,OAAS+uC,EACjB1qK,KAAKwnH,UAAUwzD,oBACf/kD,EAAM8rD,cACN9rD,EAAM+rD,kBACNhiL,KAAKuiL,UAAW,GAEpBF,eAAgB,SAAUp6K,GACtBjI,KAAK8jL,UAAU77K,GACfjI,KAAKgI,QAAQs5K,IACbthL,KAAK46K,WAETmH,YAAa,WACT,GAAiFxyB,GAAwClU,EAAesuB,EAASya,EAA7InuD,EAAQj2H,KAAMxE,EAAOy6H,EAAMrxG,WAAW+D,OAAQgzG,EAAS1F,EAAM71H,QAAQu7H,OAAkBwiB,EAAexiB,EAAO/jI,MACjH,KAAK23J,EAAW,EAAGA,EAAWpR,EAAcoR,IACxClU,EAAgB1f,EAAO4zB,GACnBt5B,EAAMkqD,YAAY9kC,KAClBsuB,EAAUtuB,EAAculC,SACxBwD,EAAa1iG,EAAQioF,IAAYnuK,EAAKmuK,QAAgBnjJ,MAAQhrB,EAC1D6/I,EAAc5sF,YAAa,IAC3B4sF,EAAc7/I,KAAO4oL,KAKrCpC,gBAAiB,WACb,GAA8MjmC,GAAQtoH,EAAlNwiG,EAAQj2H,KAAMxE,EAAOy6H,EAAMrxG,WAAW+D,WAAcq7J,GAAW/tD,EAAMrxG,WAAWovB,aAAep8C,OAAS,EAAGysL,EAAiB7oL,EAAM4E,EAAU61H,EAAM71H,QAASw6G,KAAiB1kG,OAAO9V,EAAQw2I,aAM/L,KALIotC,GACIxoL,EAAK5D,SACLysL,EAAiB7oL,EAAK,GAAGgrB,OAG5Bu1H,EAAS,EAAGA,EAASnhC,EAAYhjH,OAAQmkJ,IAC1CtoH,EAAOmnF,EAAYmhC,GACftoH,EAAKg7B,YAAa,GAClBwnE,EAAMquD,kBAAkB7wJ,EAAM4wJ,EAAgBtoC,IAI1DuoC,kBAAmB,SAAU7wJ,EAAMj4B,EAAMugJ,GACrC,GAAiCvS,GAAY5N,EAAUqe,EAAnDvmI,GAASlY,OAAY5D,MACzB,IAAI67B,EAAK1V,MAEL,IADA0V,EAAKmzG,cACA4C,EAAa,EAAGA,EAAa91H,EAAO81H,IACrCyQ,EAAMz+I,EAAKguI,GACX5N,EAAWoe,EAASvmH,EAAK1V,MAAOk8H,GACb,IAAfzQ,GACA/1G,EAAKmzG,YAAchL,GACnBnoG,EAAKtN,WAAa8zH,KAElBxmH,EAAKmzG,WAAW9+H,KAAK8zH,GACrBnoG,EAAKtN,UAAUre,KAAKmyI,QAGrBj6I,MAAKwnH,WACZxnH,KAAKwnH,UAAUq4D,2BAA2BpsJ,EAAMsoH,IAGxDokC,YAAa,SAAUxkD,GACnB,GAA2E59G,GAAOjjB,EAA9EmiJ,EAAcF,EAAapxI,QAAQsxI,YAAYthB,GAAS38H,GAAS,CACrE,KAAKlE,EAAI,EAAGA,EAAImiJ,EAAYrlJ,OAAQkD,IAOhC,GANAijB,EAAQk/H,EAAYniJ,GAChBijB,IAAU0xC,GACV1xC,EAAQ,QAERA,GAAgB,SAEf2jE,EAAQi6C,EAAO59G,IAAS,CACzB/e,GAAS,CACT,OAGR,MAAOA,MAGX+hL,GACA,UACA,iBACA,WACA,kBACA,cACA,cACA,eACA,UACA,UACA,uBACA,mBACA,qBAUKpjL,EAAM,EAAGA,EAAMojL,EAAanpL,OAAQ+F,IACzC4iL,EAAkBQ,EAAapjL,GAqCnC4jB,GAAQkxH,YAAY/xI,OAAO+qJ,EAAMxnJ,IAC7B/L,EAAMqsL,UACNrsL,EAAMqsL,SAAS7jL,OAAO+qJ,EAAMxnJ,IAEhCsd,EAAQF,GAAG8G,OAAOsjI,GACdu1B,EAAwBnqL,EAAM6J,QAC9BC,KAAM,WACFX,KAAK2/C,UACL3/C,KAAKmS,UAET+xK,aAAc,SAAUvoD,EAAQ1zH,GAC5B,GAAIA,GAAKA,EAAE0uB,OACP,IAAK,GAAIh5B,GAAM,EAAGA,EAAMg+H,EAAO/jI,OAAQ+F,IAC/BqC,KAAK2/C,OAAOg8E,EAAOh+H,GAAKkjL,gBAAiB,IACzCllD,EAAOh+H,GAAK6F,SAAU,OAI9BxD,MAAK2/C,WAGbwkI,aAAc,SAAUxoD,EAAQ1zH,GACxBA,GAAKA,EAAE0uB,OACH32B,KAAKmS,MAAMwpH,EAAOxpH,UAAW,IAC7BwpH,EAAOn4H,SAAU,GAGrBxD,KAAKmS,UAGb+lB,KAAM,SAAUyjG,GACPA,IAGDj6C,EAAQi6C,EAAOklD,aACf7gL,KAAK2/C,OAAOg8E,EAAOklD,aAAellD,EAAOn4H,QAEzCxD,KAAKmS,MAAMwpH,EAAOxpH,OAASwpH,EAAOn4H,YAI1Cy9K,EAAO/oL,EAAMiyG,SACbp4B,EAAU1tE,GAAW3D,QACrBC,KAAM,SAAU45H,EAAcn6H,GAAxB,GAeEokL,GAdAn9D,EAAUrnH,IACdqE,IAAWJ,GAAGtD,KAAKwH,KAAKk/G,GACxBrnH,KAAKqlB,WAAWjlB,GAChBinH,EAAQkT,aAAeA,EACvBlT,EAAQ5kH,SAAWsvE,EAAQtvE,SACtB4kH,EAAQ5kH,WACT4kH,EAAQ5kH,SAAWsvE,EAAQtvE,SAAWvK,EAAMuK,SAAS,6OACjD6F,cAAc,EACdD,UAAW,OAGnBg/G,EAAQtvH,QAAUrB,EAAE2wH,EAAQ5kH,SAAS4kH,EAAQjnH,UAC7CinH,EAAQt8F,KAAO/kB,EAAMqhH,EAAQt8F,KAAMs8F,GACnCA,EAAQ/0C,YAActsE,EAAMqhH,EAAQ/0C,YAAa+0C,GAC7Cm9D,EAAyBtsL,EAAM6Q,OAAO,mCAAwC7Q,EAAMgL,KAAK,SAC7FmkH,EAAQo9D,gBAAkBlqD,EAAatiH,QAAQusK,GAAwBhpL,KAAK,wBAEhFsqB,QAAS,WACL9lB,KAAK0kL,oBACD1kL,KAAKjI,UACLiI,KAAKjI,QAAQ6xB,IAAIy3J,GAAen5J,SAChCloB,KAAKjI,QAAU,OAGvBstB,WAAY,SAAUjlB,GAClBJ,KAAKI,QAAUxF,KAAeoF,KAAKI,QAASA,IAEhDA,SACI8jC,QAAS,EACTqoC,WAAalsE,SAAUmhL,IACvBmD,eAAgB,qaAChBvS,eAAgB,SAEpBrnJ,KAAM,WACF,GAA0E3rB,GAAtEioH,EAAUrnH,KAAMI,EAAUinH,EAAQjnH,QAASrI,EAAUsvH,EAAQtvH,OAC5DsvH,GAAQh7C,QAAWg7C,EAAQtvH,UAGhCqH,EAASioH,EAAQ/J,UACZ+J,EAAQ7jH,SACTzL,EAAQE,KACJqH,IAAKF,EAAOE,IACZ3G,KAAMyG,EAAOzG,OAGrB0uH,EAAQ7jH,SAAU,EAClB6jH,EAAQu9D,eAAernL,SAASsa,MAChC9f,EAAQ+nB,MAAK,GAAM,GAAM9lB,OAAOgH,SAC5BrI,KAAMyG,EAAOzG,KACb2G,IAAKF,EAAOE,KACbc,EAAQmsE,UAAUlsE,YAEzBqkL,kBAAmB,WACX1kL,KAAK6kL,cACLj6J,aAAa5qB,KAAK6kL,aAClB7kL,KAAK6kL,YAAc,OAG3B7lB,UAAW,SAAUjhK,GAAV,GACHsuE,GAASrsE,KAAKqsE,OACdgc,EAAQhc,EAAOgc,MACfkD,EAAQlf,EAAOkf,MACft4D,EAAIo1D,EAAM1vF,KACV0Y,EAAIg3E,EAAM/oF,GAWd,OAVyB,WAArBisF,EAAM1sD,WACN5L,GAAKl1B,EAAK9E,MAAQ,EACU,UAArBsyF,EAAM1sD,aACb5L,GAAKl1B,EAAK9E,OAES,WAAnBsyF,EAAM3vD,SACNvqB,GAAKtT,EAAK7E,OAAS,EACO,WAAnBqyF,EAAM3vD,WACbvqB,GAAKtT,EAAK7E,SAGV+5B,EAAGA,EACH5hB,EAAGA,IAGXisG,QAAS,WAAA,GAMG3jF,GAIA0uD,EATJg/B,EAAUrnH,KAAMjC,EAAOspH,EAAQO,WAAYv7C,EAASg7C,EAAQ23C,UAAUjhK,GAAOuB,EAAM+sE,EAAOh7D,EAAG1Y,EAAO0zE,EAAOp5C,EAAGrW,EAAY1kB,EAAMC,QAAQykB,YAAaowD,EAAWt2E,EAAEC,QAASgJ,EAAYhJ,OAAO8I,aAAelC,SAASmC,gBAAgBC,WAAa,EAAGvB,EAAazH,OAAOiJ,aAAerC,SAASmC,gBAAgBtB,YAAc,EAAGioC,GAAWrmC,KAAKykL,qBAAuBp+I,OAa9W,OAZKA,IAA6B,IAAlBA,EAAQ3J,OAIhB/C,EAAYsnJ,EAAKtnJ,YAAY+C,MAAM2J,EAAQ3J,MAAO2J,EAAQ3J,OAC1D2J,EAAQpT,EACRoT,EAAQh1B,IAERg3E,EAAQ,GAAI44F,GAAKn7F,MAAMntF,EAAM2G,GAAKq6B,UAAUA,GAChDhhC,EAAO0vF,EAAMp1D,EACb3zB,EAAM+oF,EAAMh3E,IATZ/R,GAAO+nH,EAAQh5C,KAAK/uE,EAAMK,EAAW5B,EAAK7E,OAAQQ,EAAYszE,GAAYpwD,GAC1EjkB,GAAQ0uH,EAAQh5C,KAAK11E,EAAOyF,EAAYL,EAAK9E,MAAOO,EAAWwzE,GAAYpwD,KAW3Etd,IAAKA,EACL3G,KAAMA,IAGdqB,KAAM,SAAUiO,GACZjI,KAAKqsE,OAASpkE,EAAEokE,OAChBrsE,KAAKjI,QAAQE,IAAIgQ,EAAEnO,OACnBkG,KAAKjI,QAAQqJ,YAAYsgL,KAAmBz5K,EAAEhK,WAC9C+B,KAAKjI,QAAQqJ,YAAYugL,KAAwB15K,EAAEk/G,OACnD,IAAIhzD,GAAUlsD,EAAEk/G,OAASnnH,KAAK8kL,eAAe78K,GAAKjI,KAAK+kL,cAAc98K,EAAEogF,MACvEroF,MAAKjI,QAAQ2K,KAAKyxD,GAClBn0D,KAAK0kL,oBACL1kL,KAAK6kL,YAAcn7J,WAAW1pB,KAAK+qB,KAAM02J,KAE7C3gL,KAAM,WACF,GAAIumH,GAAUrnH,IACd4qB,cAAay8F,EAAQw9D,aACrBx9D,EAAQ29D,eACJ39D,EAAQ7jH,UACR6jH,EAAQh/B,MAAQ,KAChBg/B,EAAQ7jH,SAAU,EAClB6jH,EAAQl1G,MAAQ,OAGxB2yK,eAAgB,SAAU78K,GAAV,GAaRxF,GACA0xD,EAbAs0B,EAASxgF,EAAEwgF,OACXw8F,EAAa1jK,EAAQwL,KAAK07D,EAAQ,SAAUJ,GAC5C,MAAO3G,GAAQ2G,EAAMszC,OAAOzsH,QAC7BtX,OACCstL,EAAcj9K,EAAE0zH,OAAO/jI,OAAS,EAChCutL,EAAU,CAiBd,OAhBIF,IACAE,IAEAD,GACAC,IAEA1iL,EAAWvK,EAAMuK,SAASzC,KAAKI,QAAQukL,gBACvCxwH,EAAU1xD,GACVgmF,OAAQA,EACRmzC,SAAU3zH,EAAE2zH,SACZu2C,aAAclqK,EAAEkqK,aAChBh+G,QAASn0D,KAAK+kL,cACdG,YAAaA,EACbD,WAAYA,EACZE,QAASA,KAIjBv9D,SAAU,WACN5nH,KAAK4kL,gBACL,IAAI7mL,IACA9E,MAAOO,EAAWwG,KAAKjI,SACvBmB,OAAQQ,EAAYsG,KAAKjI,SAE7B,OAAOgG,IAEX6mL,eAAgB,WACR5kL,KAAKjI,SACLiI,KAAKjI,QAAQ++B,SAASv5B,SAASsa,MAAMnS,GAAG27K,EAAerhL,KAAKsyE,cAGpEA,YAAa,SAAUrqE,GAAV,GACLmY,GAASnY,EAAE0jB,cACXsqG,EAAQj2H,KAAKu6H,aAAa,EAC1Bn6G,IAAUA,IAAW61G,IAAUv/H,EAAEoM,SAASmzH,EAAO71G,KACjDpgB,KAAKgI,QAAQu5K,IACbvhL,KAAKc,SAGbkkL,aAAc,WAAA,GACN39D,GAAUrnH,KACVjI,EAAUiI,KAAKjI,OACfA,IACAA,EAAQqtL,SACJC,OAAQ,WACCh+D,EAAQ7jH,SACTzL,EAAQ6xB,IAAIy3J,GAAen5J,aAM/C68J,cAAe,SAAU18F,GACrB,GAAsFl0B,GAASmxH,EAA3Fj+D,EAAUrnH,KAAMI,EAAUxF,KAAeysH,EAAQjnH,QAASioF,EAAMjoF,QAAQinH,QAwB5E,OAvBI3lC,GAAQ2G,EAAMzqF,SACdu2D,EAAUk0B,GAAAA,EAAMzqF,OAEhBwC,EAAQqC,UACR6iL,EAAkB7iL,EAASrC,EAAQqC,UACnC0xD,EAAUmxH,GACN1nL,MAAOyqF,EAAMzqF,MACbg+H,SAAUvzC,EAAMuzC,SAChBD,OAAQtzC,EAAMszC,OACdl1G,SAAU4hE,EAAM5hE,SAChBztB,WAAYqvF,EAAMrvF,WAClB6iI,aAAcxzC,EAAMwzC,aACpBztF,MAAOi6C,EAAMj6C,MACbs/E,IAAKrlC,EAAMqlC,IACXC,KAAMtlC,EAAMslC,KACZ43D,KAAMl9F,EAAMk9F,KACZC,MAAOn9F,EAAMm9F,MACbC,KAAMp9F,EAAMo9F,KACZC,MAAOr9F,EAAMq9F,SAEVtlL,EAAQ2I,SACforD,EAAUk0B,EAAMirE,YAAYlzJ,EAAQ2I,SAEjCorD,GAEXka,KAAM,SAAUjvE,EAAQrB,EAAMuwE,GAC1B,GAAIC,GAAS,CAOb,OANInvE,GAASrB,EAAOuwE,IAChBC,EAASD,GAAgBlvE,EAASrB,IAElCqB,EAAS,IACTmvE,GAAUnvE,GAEPmvE,KAGXu4E,EAAmB/0E,EAAQrxE,QAC3BC,KAAM,SAAU45H,EAAcn6H,GAC1B2xE,EAAQ9tE,GAAGtD,KAAKwH,KAAKnI,KAAMu6H,EAAcn6H,GACzCJ,KAAKjI,QAAQuC,SAAS,8BAE1BN,KAAM,SAAUiO,GACZ,GAAIlQ,GAAUiI,KAAKjI,OACfA,KACAiI,KAAKqsE,OAASpkE,EAAEokE,OAChBrsE,KAAKjI,QAAQE,IAAIgQ,EAAEnO,OACnBkG,KAAKjI,QAAQ2K,KAAK1C,KAAKm0D,QAAQlsD,IAC/BjI,KAAK+qB,SAGbA,KAAM,WACF,GAAIs8F,GAAUrnH,KAAMjI,EAAUsvH,EAAQtvH,QAASqH,EAASioH,EAAQ/J,SAChE+J,GAAQu9D,iBACR7sL,EAAQE,KACJqH,IAAKF,EAAOE,IACZ3G,KAAMyG,EAAOzG,OACdqB,QAEPm6D,QAAS,SAAUlsD,GACf,GAAIksD,GAAUlsD,EAAErK,MAAOwC,EAAU6H,EAAE6wI,UAAU14I,QAAQinH,OAIrD,OAHIjnH,GAAQqC,WACR0xD,EAAU1xD,EAASrC,EAAQqC,WAAY7E,MAAOu2D,KAE3CA,GAEXrzD,KAAM,WACFd,KAAKjI,QAAQ+I,UAGjBogL,EAAYrqL,EAAM6J,QAClBC,KAAM,SAAUs1H,EAAOjuD,GACnBhoE,KAAK2lL,OAAS1vD,EACdj2H,KAAK4lL,MAAQ59G,EACbhoE,KAAKmiG,OAASn6B,EAAKm6B,OACnBniG,KAAK6lL,aAAe79G,EAAK63F,eAAe19D,OACxCniG,KAAKkP,KAAO84D,EAAK5nE,QAAQ8O,MAE7BysH,OAAQ,WAAA,GAMSh+H,GALTs4H,EAAQj2H,KAAK2lL,OACb9iB,EAAe5sC,EAAM01B,UAAUiX,oBAC/BjnC,EAASknC,EAAa7iK,KAAKkP,MAAQ,WACnClQ,IACJ,IAAI28H,EACA,IAASh+H,EAAM,EAAGA,EAAMg+H,EAAO/jI,OAAQ+F,IACnCqB,EAAO8I,KAAK,GAAIq5K,GAAYlrD,EAAO0F,EAAOh+H,IAGlD,OAAOqB,MAGXmiL,EAActqL,EAAM6J,QACpBC,KAAM,SAAUs1H,EAAO71H,GACnBJ,KAAK2lL,OAAS1vD,EACdj2H,KAAK8lL,SAAW1lL,GAEpBqoF,OAAQ,SAAU5kF,GAAV,GAGI83H,GACAmI,EAHJr7C,EAASzoF,KAAKqtK,OASlB,OARK5kF,KACGkzC,EAAS37H,KAAK+iL,iBACdj/C,EAAW9jI,KAAK2lL,OAAOh6B,UAC3B3rJ,KAAKqtK,QAAU5kF,EAASq7C,EAAS8iC,oBAAoBjrC,EAAOxpH,QAE5Dja,EAAMgE,WAAW2H,KACjB4kF,EAASzoF,KAAK+lL,cAAct9F,EAAQ5kF,IAEjC4kF,GAEXjtF,KAAM,SAAUA,GAAV,GAGMy6H,GACA6N,EAGIrwG,EACArzB,EAPRu7H,EAAS37H,KAAK+iL,gBAalB,OAZIvnL,KACIy6H,EAAQj2H,KAAK2lL,OACb7hD,EAAW7N,EAAM01B,UACrBhwB,EAAOngI,KAAOA,EACVmgI,EAAOgvC,gBACHl3I,EAAOqwG,EAASgrB,mBAAmBnzB,GACnCv7H,KAAa8V,OAAO+/G,EAAM71H,QAAQw2I,cACtC3gB,EAAMzO,UAAUq4D,2BAA2Bz/K,EAAQqzB,EAAK6+H,WAAY7+H,EAAK6+H,YAE7Er8B,EAAMglD,uBACNj7K,KAAKgmL,gBAEFrqD,EAAOngI,MAElBwrK,UAAW,SAAUnjK,GAAV,GAEElG,GADL8qF,EAASzoF,KAAKyoF,QAClB,KAAS9qF,EAAM,EAAGA,EAAM8qF,EAAO7wF,OAAQ+F,IACnC,GAAIkG,EAAO4kF,EAAO9qF,IACd,MAAO8qF,GAAO9qF,IAI1B29H,gBAAiB,SAAUthI,EAAMusB,GAIzBA,EAHCA,EAEMruB,EAAMgE,WAAWqqB,GACbvmB,KAAKyoF,OAAOliE,GAEZxgB,EAAQwgB,GAAYA,GAAYA,GAJhCvmB,KAAKyoF,SAMpBzoF,KAAK2lL,OAAOn+D,UAAU8zD,sBAAsBthL,EAAMusB,IAEtD0/J,iBAAkB,SAAUziL,EAASK,GAAnB,GAaFrI,GACKmC,EAbbs4H,EAAQj2H,KAAK2lL,OACbz2B,EAAgBlvJ,KAAK+iL,iBACrBmD,EAAYhuL,EAAMgE,WAAW2H,EACjC,IAAKqiL,EAID,GAAIjjL,EAAQisJ,EAAchwJ,MAClB2iJ,GACAL,GACAC,KAGJ,IADIjmJ,EAAOwE,KAAKmmL,YAAYtiL,GACnBlG,EAAM,EAAGA,EAAMnC,EAAK5D,OAAQ+F,IACjCnC,EAAKmC,GAAK6F,QAAUA,MAGxB0rJ,GAAc1rJ,QAAU,SAAUhI,GAC9B,OAAOqI,EAAOrI,EAAKirB,WAAYjjB,OAdvC0rJ,GAAc1rJ,QAAUA,EACxByyH,EAAM4rD,kBAAkB3pJ,KAAKg3H,EAiBjCj5B,GAAMglD,uBACNj7K,KAAKgmL,gBAETG,YAAa,SAAUtiL,GAAV,GAIAlG,GAHLnC,EAAOwE,KAAK+iL,iBAAiBvnL,KAC7B5D,EAAS4D,EAAK5D,OACdoH,IACJ,KAASrB,EAAM,EAAGA,EAAM/F,EAAQ+F,IACxBkG,EAAOrI,EAAKmC,KACZqB,EAAO8I,KAAKtM,EAAKmC,GAGzB,OAAOqB,IAEX+mL,cAAe,SAAUt9F,EAAQ5kF,GAAlB,GAGFlG,GAFLqB,KACApH,EAAS6wF,EAAO7wF,MACpB,KAAS+F,EAAM,EAAGA,EAAM/F,EAAQ+F,IACxBkG,EAAO4kF,EAAO9qF,KACdqB,EAAO8I,KAAK2gF,EAAO9qF,GAG3B,OAAOqB,IAEX+jL,eAAgB,WACZ,GAAIpnD,GAAS37H,KAAKwnK,OAIlB,OAHK7rC,KACDA,EAAS37H,KAAKwnK,QAAUxnK,KAAK2lL,OAAO5C,eAAe/iL,KAAK8lL,WAErDnqD,GAEXqqD,aAAc,iBACHhmL,MAAKqtK,cACLrtK,MAAKwnK,WAGpBjmJ,EAAQwwD,QAAUA,EAClBxwD,EAAQulI,iBAAmBA,EAC3BvlI,EAAQu/J,sBAAwBA,EAChCv/J,EAAQ2/J,UAAYA,EACpB3/J,EAAQ4/J,YAAcA,GACxBxqL,OAAOuB,MAAM2sB,QACRluB,OAAOuB,OACE,kBAAVzB,SAAwBA,OAAOgiC,IAAMhiC,OAAS,SAAUiiC,EAAIC,EAAIC,IACrEA,GAAMD,OAEV,SAAUniC,EAAGC,QACVA,OAAO,uBACH,4BACA,uBACDD,IACL,aAoBkB,kBAAVC,SAAwBA,OAAOgiC,IAAMhiC,OAAS,SAAUiiC,EAAIC,EAAIC,IACrEA,GAAMD,OAEV,SAAUniC,EAAGC,QACVA,OAAO,uBACH,qBACA,gBACA,wBACDD,IACL,WA09CE,MA/8CC,UAAUE,EAAGE,GAi4CV,QAASwvL,GAAY1wI,EAAOt1C,GAA5B,GACQglI,GAAW1vF,EAAMtS,IACjBi1H,EAAU3iH,EAAM/6C,SAAS,GAAGyoC,IAC5Bi5F,EAASj8H,EAAQi8H,WACjBr9B,EAAa5+F,EAAQ4+F,YAAc,GACnCz4E,EAAW,GAAIipE,GACUn2F,EACnByjG,EAAKkF,SAAS,GAAIhX,IACxBo6C,EAASvuE,GACTuuE,EAAStuE,KAETsuE,EAASnsI,QACTmsI,EAASlsI,YACP8jG,YACF5nE,EAAO,GAAIoyE,GAAK9xD,EAAMtgB,KAAM,GAAI0wD,GAAMuyE,EAAQxhG,GAAIwhG,EAAQvhG,KAC1D+/B,KAAMz2F,EAAQy2F,KACdkG,MAAQ9oB,MAAO7zE,EAAQ6zE,SAVboyG,EAYEC,EAAKlxJ,EAAK80D,OAAO/tF,QAASiE,EAAQs0F,SAZ9C6xF,EAaOzpF,EAAKkF,SAASqkF,GACrBrpF,QACI/oB,MAAOooD,EAAOpjI,MAAQojI,EAAOpoD,MAAQ,GACrCh7E,MAAOojI,EAAOpjI,MACd4lH,SAAUwd,EAAOxd,SACjB/J,SAAU,QACVmK,QAAS,SAEbliB,MAAQ9oB,MAAO+qB,IAKnB,OAHAz4E,GAASud,OAAOzqC,GAChBktB,EAASud,OAAOyiJ,GAChBhgK,EAASud,OAAO1O,GACT7O,EAEX,QAASigK,GAASzoI,EAAO/rC,EAAKtZ,GAA9B,GACQs0B,GAAO00D,EAAQ3jC,EAAM/wB,MAAQ+wB,EAAM/wB,KAAO68F,EAC1C58F,EAAKy0D,EAAQ3jC,EAAM9wB,IAAM8wB,EAAM9wB,GAAKygF,CAGxC,OAFA3vD,GAAM/wB,KAAOv0B,EAAKC,IAAID,EAAKuZ,IAAIib,EAAID,GAAOhb,GAC1C+rC,EAAM9wB,GAAKx0B,EAAKuZ,IAAIvZ,EAAKC,IAAIu0B,EAAID,GAAOt0B,GACjCqlD,EAEX,QAASuoI,GAAKp8F,EAAMtsF,GAApB,GACQmlC,GAASmnD,EAAKqF,YACdxxF,EAAOmsF,EAAK1kE,UACZ0wF,EAAUgT,EAAWtrH,EASzB,OARAssF,GAAKykB,WACD5rE,EAAO9P,EAAIijF,EAAQv9G,KACnBoqC,EAAO1xB,EAAI6kG,EAAQ52G,MAEvB4qF,EAAKrkE,SACD9nB,EAAK9E,OAASi9G,EAAQv9G,KAAOu9G,EAAQt9G,OACrCmF,EAAK7E,QAAUg9G,EAAQ52G,IAAM42G,EAAQr9G,UAElCqxF,EAEX,QAASu8F,GAAOv8F,EAAMtsF,GAClB,GAAIs4G,GAAUgT,EAAWtrH,EAKzB,OAJAs4G,GAAQv9G,MAAQu9G,EAAQv9G,KACxBu9G,EAAQ52G,KAAO42G,EAAQ52G,IACvB42G,EAAQt9G,OAASs9G,EAAQt9G,MACzBs9G,EAAQr9G,QAAUq9G,EAAQr9G,OACnBytL,EAAKp8F,EAAMgsB,GA97CzB,GAq0COwwE,GA+BAC,EAn2CAluL,EAAOmG,KAAM1G,EAAQvB,OAAOuB,MAAO8M,EAAS9M,EAAMmpB,GAAGrc,OAAQpK,EAAa1C,EAAM0C,WAAY2mB,EAAUrpB,EAAMqpB,QAASwsG,EAAgBxsG,EAAQwsG,cAAeqF,EAAe7xG,EAAQ6xG,aAAcyB,EAActzG,EAAQszG,YAAaT,EAAO7yG,EAAQ6yG,KAAM0e,EAAQvxH,EAAQuxH,MAAOj8I,EAAQqB,EAAMrB,MAAO6qF,EAAUngE,EAAQmgE,QAAS1uC,EAAWzxB,EAAQyxB,SAAUw2E,EAAmBjoG,EAAQioG,iBAAkBN,EAAa3nG,EAAQ2nG,WAAYz5G,EAAQ8R,EAAQ9R,MAAOm3K,EAAMrlK,EAAQ4oF,SAAUpZ,EAAOxvE,EAAQC,QAASskE,EAAQ8gG,EAAI9gG,MAAO0J,EAAQuB,EAAKvB,MAAOsN,EAAO/L,EAAK+L,KAAM9R,EAAO47F,EAAI57F,KAAMwc,EAAOzW,EAAKyW,KACxkBq/E,EAAgB,IAAKC,EAAe,IAAKC,EAAQ,QAASC,EAAgB,eAAgBC,EAAc,aAAc11D,EAAQ,OAAQ21D,EAAW,IAAMz9D,EAAkBloG,EAAQkoG,gBAAiB/b,EAAYziG,OAAOyiG,UAAWmc,GAAa5+G,OAAOyiG,UAAW2jB,EAAiB,IAAK81D,EAAqB,GAAK/1D,EAAgB,IAAKg2D,EAAoB,GAAIC,EAAqB,GAAIC,EAAiB,EAAGC,EAAS9uL,EAAKy0F,GAAK,IAAKs6F,EAAuB,IAAKx1D,EAAS,SAAUuB,EAAS,SAAUk0D,EAAS,SAAU91D,EAAU,UAAW+1D,EAAiB,gBAAiBv2D,GAAI,IAAK7/G,GAAI,IAC1jBq2K,GAAU9wL,EAAM6J,QAChBC,KAAM,SAAU+7B,EAAOt8B,GAAjB,GACE24D,GAAU/4D,KACV4nL,EAAelrJ,EAAMt8B,OACzBgzH,GAAanvH,GAAGtD,KAAKwH,KAAK4wD,EAAS34D,GACnCA,EAAU24D,EAAQ34D,QAClBA,EAAQ28F,KAAO38F,EAAQ6zE,MACvBlb,EAAQr8B,MAAQA,EAEZt8B,EAAQxC,MADR8jF,EAAQthF,EAAQxC,OACAnF,EAAKuZ,IAAIvZ,EAAKC,IAAI0H,EAAQxC,MAAOgqL,EAAa51K,KAAM41K,EAAalvL,KAEjEkvL,EAAa51K,KAGrC5R,SAAW6zE,MAAOs9C,GAClB3zH,MAAO,SAAUs0D,GAAV,GACCtrD,GAAO5G,KACPI,EAAUwG,EAAKxG,QACfxC,EAAQwC,EAAQxC,MAChBgqL,EAAehhL,EAAK81B,MAAMt8B,OAC9B,OAAyB,KAArBrF,UAAUnD,OACHgG,GAEXwC,EAAQynL,UAAYznL,EAAQynL,YAAcjxL,EAAYwJ,EAAQxC,MAAQgqL,EAAa51K,IACnF5R,EAAQxC,MAAQnF,EAAKuZ,IAAIvZ,EAAKC,IAAIw5D,EAAU01H,EAAa51K,KAAM41K,EAAalvL,KACxEkO,EAAK2f,UACL3f,EAAKkhL,UAHT1nL,MAOJ2nL,GAAgBJ,GAAQjnL,QACxBN,SACIs6F,MAAO+sF,EACPO,KAAOjqL,KAAMmpL,GACb9zG,OACIn6E,MAAO,GACPC,OAAQ,IAEZqzE,WACIrtE,KAAMwoL,EACNrnL,SAAUwmL,IAGlBx2E,UAAW,SAAUh4G,GACjB,GAAIuO,GAAO5G,IACP3H,KACAuO,EAAK2f,SAAS24B,QACdt4C,EAAK2B,OAAO3B,EAAKhN,OAAQgN,EAAKuwD,OAAQ9+D,KAG9C4vL,SAAU,SAAU3gG,GAChBtnF,KAAKumB,SAASoT,UAAUitJ,EAAIjtJ,YAAY8D,OAAO6pD,EAAOtnF,KAAKm3D,UAE/D2wH,QAAS,WAAA,GACDlhL,GAAO5G,KACP08B,EAAQ91B,EAAK81B,MACbt8B,EAAUwG,EAAKxG,QACf8nL,EAAWxrJ,EAAM+yG,UAAUrvI,EAAQynL,WACnCM,EAAWzrJ,EAAM+yG,UAAUrvI,EAAQxC,MACnCwC,GAAQmsE,UAAUn0E,eAAgB,EAClCwO,EAAKqhL,SAASE,GAEd,GAAIC,IAAuBxhL,EAAK2f,SAAU3rB,EAAWwF,EAAQmsE,WACzD27G,SAAUA,EACVC,SAAUA,KACV/lJ,QAGZ75B,OAAQ,WAAA,GACA3B,GAAO5G,KACP08B,EAAQ91B,EAAK81B,MACby6B,EAASz6B,EAAMs4E,IAAI79C,OACnB/2D,EAAUwG,EAAKxG,QACfmmB,EAAW,GAAIipE,EAenB,OAdIpvF,GAAQmsE,aAAc,GACtB3xE,EAAWwF,EAAQmsE,WACf6a,WAAY,EACZjwB,OAAQA,EACR72D,QAASo8B,EAAMt8B,QAAQE,UAG3BF,EAAQs6F,QAAU+sF,EAClBlhK,EAASud,OAAOl9B,EAAKyhL,gBAAiBzhL,EAAK0hL,cAE3C/hK,EAASud,OAAOl9B,EAAK2hL,gBAEzB3hL,EAAK2f,SAAWA,EAChB3f,EAAKqhL,SAASV,GACPhhK,GAEXowF,OAAQ,SAAU3B,GAAV,GACApuG,GAAO5G,KACPm3D,EAASvwD,EAAKuwD,OAAS69C,EAAI79C,OAC3B9+D,EAASuO,EAAKvO,OAAS28G,EAAIwzE,aAC3BC,EAAU7hL,EAAK6hL,QAAU7pL,KAAK6Q,MAAMpX,EAASuO,EAAKxG,QAAQ4nL,IAAIjqL,KAClE6I,GAAKsjF,KAAOc,EAAK+jB,WAAW,GAAIjpB,GAAM3uB,EAAOlkC,EAAIw1J,EAAStxH,EAAO9lD,EAAIo3K,GAAU,GAAI3iG,GAAM3uB,EAAOlkC,EAAIw1J,EAAStxH,EAAO9lD,EAAIo3K,KAE5HJ,cAAe,WAAA,GACPzhL,GAAO5G,KACPI,EAAUwG,EAAKxG,QACfghI,EAAgBx6H,EAAK81B,MAAMt8B,QAAQihI,WAAWtjI,KAC9Co5D,EAASvwD,EAAKuwD,OACduxH,EAActoL,EAAQ6zE,MACtB00G,EAAa,GAAI7rF,IACjBC,MAAQ9oB,MAAOy0G,GACf1rF,QACI/oB,MAAOy0G,EACPzvL,MAAOkuL,IAIf,OADAwB,GAAWviJ,OAAO+wB,EAAOlkC,EAAIrsB,EAAKvO,OAAS+oI,EAAejqE,EAAO9lD,GAAG4+E,OAAO94B,EAAOlkC,EAAGkkC,EAAO9lD,EAAIzK,EAAK6hL,QAAU,GAAGx4F,OAAO94B,EAAOlkC,EAAGkkC,EAAO9lD,EAAIzK,EAAK6hL,QAAU,GAAGh8G,QACzJk8G,GAEXL,WAAY,WAAA,GACJ1hL,GAAO5G,KACPI,EAAUwG,EAAKxG,QACfwoL,EAAWxoL,EAAQ4nL,IAAI/zG,OAAS7zE,EAAQ6zE,MACxC8sB,EAAS,GAAI6lF,GAAI3jF,OAAOr8F,EAAKuwD,OAAQvwD,EAAK6hL,SAC1CT,EAAM,GAAIj3F,GAAKkS,OAAOlC,GACtBhE,MAAQ9oB,MAAO20G,GACf5rF,QAAU/oB,MAAO20G,IAErB,OAAOZ,MAGXa,GAAch0D,EAAYn0H,QAC1BC,KAAM,SAAUP,GACZ,GAAIs8B,GAAQ18B,IACZ08B,GAAMt8B,QAAUxF,KAAe8hC,EAAMt8B,QAASA,GAC9Cs8B,EAAMt8B,QAAQ+uH,UAAYzyF,EAAMt8B,QAAQ+uH,WAAapB,EAAcrxF,EAAMt8B,QAAQ4R,IAAK0qB,EAAMt8B,QAAQ1H,KACpGgkC,EAAMt8B,QAAQuvH,UAAYjzF,EAAMt8B,QAAQuvH,WAAajzF,EAAMt8B,QAAQ+uH,UAAY,GAC/EiF,EAAKnwH,GAAGtD,KAAKwH,KAAKu0B,EAAOA,EAAMt8B,UAEnCA,SACI4R,IAAK,EACLtZ,IAAK,IACL6oI,YACIxjI,KAAM,GACNwtF,MAAOymC,EACP/9C,MAAOs9C,EACPt4H,MAAOkuL,EACP3jL,SAAS,GAEb69H,YACItjI,KAAM,GACNwtF,MAAOymC,EACP/9C,MAAOs9C,EACPt4H,MAAOkuL,EACP3jL,SAAS,GAEb4jF,eACAG,SAAU,IACV25C,QACIv/F,SAAUqwF,EACVt9B,QAAS,IAGjBnsF,OAAQ,SAAU4uD,EAAQ9+D,GAAlB,GACAuO,GAAO5G,KACPg1G,EAAMpuG,EAAKkiL,UAAU3xH,EAAQ9+D,EACjCuO,GAAKsjF,KAAO8qB,EAAI9qB,OAChBtjF,EAAKmiL,cAAgBniL,EAAKoiL,eAC1BpiL,EAAKykH,MAAQzkH,EAAKqiL,cAClBriL,EAAK4tC,OAAS5tC,EAAKsiL,gBAEvBvyE,OAAQ,SAAUzsB,GAAV,GACAtjF,GAAO5G,KACPm3D,EAAS+yB,EAAK/yB,SACd9+D,EAASI,EAAKuZ,IAAIk4E,EAAKhxF,SAAUgxF,EAAKjxF,SAAW,CACrD,OAAI2N,GAAKsjF,OAAStzF,EAMPgQ,EAAK2B,OAAO4uD,EAAQ9+D,IAL3BuO,EAAKsjF,KAAOtjF,EAAKouG,IAAI9qB,OACrBtjF,EAAKvO,OAAOuO,EAAKouG,IAAIwzE,cACrB5hL,EAAKuiL,mBACLviL,EAAKoiL,eAHLpiL,IAQR6oI,UAAW,SAAU7xI,GAAV,GAOHoB,GANAoB,EAAUJ,KAAKI,QACfgnF,EAAahnF,EAAQgnF,WACrB9mF,EAAUF,EAAQE,QAClBgnF,EAAQlnF,EAAQmnF,SAAWH,EAC3Bp1E,EAAM5R,EAAQ4R,IACdtZ,EAAM0H,EAAQ1H,GAOlB,OAJIsG,GADAsB,EACSF,EAAQmnF,UAAY3pF,EAAQoU,IAAQtZ,EAAMsZ,GAAOs1E,GAEhD1pF,EAAQoU,IAAQtZ,EAAMsZ,GAAOs1E,EAAQF,EAE5CpoF,EAASwoL,GAEpBwB,aAAc,WAAA,GAcNjoE,GAAWC,EAAYooE,EACvB9hG,EAAO5xC,EAAO0+H,EAAIt5K,EAAGkrF,EAAIC,EAAIojG,EAE7BC,EAAKnkD,EAAUokD,EAAcC,EAhB7B5iL,EAAO5G,KACPI,EAAUwG,EAAKxG,QACf+gI,EAAgB/gI,EAAQmhI,WAAWxjI,KACnCi3G,EAAMpuG,EAAKouG,IAAI74G,QACf9D,EAAS28G,EAAIwzE,aACbiB,EAAa7iL,EAAK6iL,WAAWz0E,EAAK50G,EAAQ+uH,WAC1C+R,EAASt6H,EAAKs6H,OACdxtH,EAAQwtH,EAAOtpI,OACfy8K,EAAgBj0K,EAAQ8gI,OACxBxsC,EAAU2/E,EAAc3/E,QACxBg1F,EAAyB,IAATrxL,EAChBiuI,EAAYlmI,EAAQkmI,UAAYlmI,EAAQkmI,WAAsB,GAATjuI,EACrDm8C,EAASp0C,EAAQo0C,WAGjBm1I,EAAc,GAAIn6F,EActB,KAZI5oF,EAAKxG,QAAQspL,gBAAkB9yL,EAC/B8yL,EAAgB9iL,EAAKxG,QAAQspL,cAE7B9iL,EAAKxG,QAAQspL,cAAgBA,EAE7BrV,EAAc1yI,WAAaqwF,IAC3B35H,GAAU8oI,EACN3sF,EAAO58C,QAAUgP,EAAKmiL,gBAAkBnyL,IACxCyB,GAAUiuI,EAAYojD,GAE1B10E,EAAI40E,WAAWvxL,GAAQwxL,WAAWxxL,IAEjCyC,EAAI,EAAGA,EAAI4Y,EAAO5Y,IACnB46C,EAAQwrF,EAAOpmI,GACfimH,EAAYrrE,EAAMtS,IAAInqC,QAAU,EAChC+nH,EAAatrE,EAAMtS,IAAIlqC,SAAW,EAClCouF,EAAQmiG,EAAW3uL,GACnBsuL,GAAc9hG,EAAQkgG,GAAwBD,EAC9C8B,EAAWhV,EAAc1yI,WAAaqwF,EACtCoiD,EAAKp/D,EAAIzE,QAAQjpB,GACjBtB,EAAKouF,EAAGnhJ,EAAIx6B,EAAKytF,IAAIkjG,IAAeroE,EAAYrsB,IAAY20F,EAAW,MACvEpjG,EAAKmuF,EAAG/iK,EAAI5Y,EAAK0tF,IAAIijG,IAAepoE,EAAatsB,IAAY20F,EAAW,MACxE3zI,EAAMihE,OAAO,GAAIp1F,GAAQuxH,MAAM9sD,EAAK+6B,EAAW96B,EAAK+6B,EAAYh7B,EAAK+6B,EAAW96B,EAAK+6B;AACrFmkB,EAAW,GAAIr/C,GAAMpwC,EAAMtS,IAAIyzB,GAAInhB,EAAMtS,IAAI0zB,IACzClwD,EAAKmiL,gBAAkBnyL,GACvB0yL,EAAMlD,EAAY1wI,EAAOt1C,EAAQ8gI,QACjCyoD,EAAY7lJ,OAAOwlJ,KAEnBA,EAAM1iL,EAAKmiL,cAAcpuL,SAASG,GAClCyuL,EAAeD,EAAIp/F,OAAOnnD,OAC1BymJ,EAAiBF,EAAI3vJ,aAAeitJ,EAAIjtJ,YACxC6vJ,EAAezsJ,UAAUooG,EAASlyG,EAAIs2J,EAAat2J,EAAGkyG,EAAS9zH,EAAIk4K,EAAal4K,GAChFi4K,EAAI3vJ,UAAU6vJ,IAElB5iL,EAAKsjF,KAAOc,EAAKC,MAAMrkF,EAAKsjF,KAAMo/F,EAAIp/F,OAE1C,OAAOy/F,IAEXR,iBAAkB,WAAA,GAKVW,GAAa1xD,EAOJt9H,EAXT8L,EAAO5G,KACPw0C,EAAS5tC,EAAK4tC,OAAO75C,SACrB2rI,EAAY1/H,EAAKxG,QAAQkmI,UACzBojD,EAAgB9iL,EAAKxG,QAAQspL,aAEjC,IAAIl1I,EAAO58C,OAAS,EAAG,CAMnB,IALAkyL,EAAcljL,EAAKmjL,iBACfnjL,EAAKxG,QAAQ8gI,OAAOv/F,WAAaqwF,IACjC83D,GAAexjD,EAAYojD,GAE/BtxD,EAAY0xD,EAAcxjD,EAAY,EAC7BxrI,EAAI,EAAGA,EAAI05C,EAAO58C,OAAQkD,IAC/B05C,EAAO15C,GAAGu2G,UAAUu4E,WAAWxxD,GAAWyxD,WAAWzxD,EAEzDxxH,GAAKsjF,KAAOc,EAAKC,MAAMrkF,EAAKsjF,KAAMtjF,EAAK4tC,OAAO01C,UAGtDg/F,aAAc,WAAA,GAINl8J,GAAMC,EAMN2iE,EAASk6F,EAAaE,EAAWlvL,EATjC8L,EAAO5G,KACPg1G,EAAMpuG,EAAKouG,IACXh2G,EAAS,GAAIwwF,GAEbO,EAAWnpF,EAAKqjL,gBAChBC,EAAgBn6F,EAASn4F,OACzB0I,EAAUsG,EAAKxG,QAAQE,QACvBgmI,EAAY1/H,EAAKxG,QAAQkmI,UACzBojD,EAAgB9iL,EAAKxG,QAAQspL,aAEjC,IAAIQ,EAGA,IAFAJ,EAAcljL,EAAKmjL,iBACnBnjL,EAAKvO,OAAOuO,EAAKvO,SAAWiuI,EAAYojD,GACnC5uL,EAAI,EAAGA,EAAIovL,EAAepvL,IAC3B80F,EAAUG,EAASj1F,GACnBkyB,EAAOpmB,EAAK6oI,UAAU7/C,EAAQtvF,EAAU,KAAO,SAC/C2sB,EAAKrmB,EAAK6oI,UAAU7/C,EAAStvF,EAAiB,OAAP,OACnC2sB,EAAKD,IAAS,IACdg9J,EAAY,GAAIpD,GAAIx/E,IAAI4N,EAAI79C,QACxBywB,QAASkiG,EAAcxjD,EAAY,EACnCz+C,QAASiiG,EAAcxjD,EAAY,EACnCl/C,WAAYp6D,EACZu6D,SAAUt6D,IAEdjuB,EAAO8kC,OAAO,GAAIitD,GAAKqW,IAAI4iF,GACvBhtF,QACI/jG,MAAOqtI,EACPryD,MAAO2b,EAAQ3b,MACf/vC,QAAS0rD,EAAQ1rD,YAMrC,OAAOllC,IAEXirL,cAAe,WAaX,QAASE,GAAan9J,EAAMC,EAAIgnD,EAAO/vC,GACnC,OACIlX,KAAMA,EACNC,GAAIA,EACJgnD,MAAOA,EACP/vC,QAASA,GAlBN,GAKP6Z,GACAmsI,EAGAt6F,EAGA90F,EAAGi3D,EAXHwmF,EAAQv4I,KACRI,EAAUm4I,EAAMn4I,QAChBo0C,EAASp0C,EAAQo0C,WACjB9gC,EAAQ8gC,EAAO58C,OAGfi8J,EAAezzJ,EAAQ24I,sBACvBhpD,KAEA/9E,EAAM5R,EAAQ4R,IACdtZ,EAAM0H,EAAQ1H,GAUlB,IAAIgb,EAEA,IADAq8E,EAASjoF,KAAKqiL,EAAan4K,EAAKtZ,EAAKm7J,IAChC/4J,EAAI,EAAGA,EAAI4Y,EAAO5Y,IAGnB,IAFAijD,EAAQyoI,EAAShyI,EAAO15C,GAAIkX,EAAKtZ,GACjCwxL,EAAgBn6F,EAASn4F,OACpBm6D,EAAI,EAAGA,EAAIm4H,EAAen4H,IAE3B,GADA69B,EAAUG,EAASh+B,GACf69B,EAAQ5iE,MAAQ+wB,EAAM/wB,MAAQ+wB,EAAM/wB,MAAQ4iE,EAAQ3iE,GAAI,CACxD8iE,EAASjoF,KAAKqiL,EAAapsI,EAAM/wB,KAAM+wB,EAAM9wB,GAAI8wB,EAAMk2B,MAAOl2B,EAAM7Z,UAChE0rD,EAAQ5iE,MAAQ+wB,EAAM9wB,IAAM8wB,EAAM9wB,IAAM2iE,EAAQ3iE,IAChD8iE,EAASjoF,KAAKqiL,EAAapsI,EAAM9wB,GAAI2iE,EAAQ3iE,GAAI4mI,EAAc91G,EAAM7Z,UAEzE0rD,EAAQ3iE,GAAK8wB,EAAM/wB,IACnB,OAKhB,MAAO+iE,IAEXg6F,eAAgB,WAAA,GAOR3rG,GANAx3E,EAAO5G,KACPI,EAAUwG,EAAKxG,QACf+gI,EAAgB/gI,EAAQmhI,WAAWxjI,KACnCuoI,EAAYlmI,EAAQkmI,UACpBojD,EAAgBtpL,EAAQspL,cACxB10E,EAAMpuG,EAAKouG,GAOf,OAJI52B,GADAh+E,EAAQ8gI,OAAOv/F,WAAagwF,EACxB3c,EAAIwzE,aAAernD,EAAgBuoD,EAAgBpjD,EAEnDtxB,EAAIwzE,aAAeliD,GAI/BwiD,UAAW,SAAU3xH,EAAQ9+D,GAAlB,GACHuO,GAAO5G,KACPI,EAAUwG,EAAKxG,QACf40G,EAAMpuG,EAAKouG,IAAM,GAAI4xE,GAAIx/E,IAAIjwC,GAC7BywB,QAASvvF,EACTwvF,QAASxvF,EACT+uF,WAAYhnF,EAAQgnF,WAAaogG,EACjCjgG,SAAUnnF,EAAQmnF,SAAWigG,GAEjC,OAAOxyE,IAEXi0E,YAAa,WAUT,QAASmB,GAAUp1E,EAAKy0E,EAAY13F,EAAM24B,GACtC,GAAyE5vH,GAAGuvL,EAAWC,EAAnFj/D,EAAQ,GAAI77B,GAASr4B,EAAS69C,EAAI79C,OAAQ9+D,EAAS28G,EAAIwzE,aAAqChlL,EAAUknH,EAAYlnH,OACtH,IAAIA,EACA,IAAK1I,EAAI,EAAGA,EAAI2uL,EAAW7xL,OAAQkD,IAC/BuvL,EAAYr1E,EAAIzE,QAAQk5E,EAAW3uL,IACnCwvL,EAAU,GAAIxkG,GAAM3uB,EAAOlkC,EAAI56B,EAASqyH,EAAY3sH,KAAMo5D,EAAO9lD,GAAGosB,OAAOgsJ,EAAW3uL,GAAIq8D,GAC1Fk0D,EAAMvnF,OAAO,GAAIg5D,IACbE,QACI/oB,MAAOy2C,EAAYz2C,MACnBh7E,MAAOyxH,EAAYzxH,SAExBmtC,OAAOikJ,GAAWp6F,OAAOq6F,GAGpC,OAAOj/D,GAxBF,GACLzkH,GAAO5G,KACPg1G,EAAMpuG,EAAKouG,IACX50G,EAAUwG,EAAKxG,QACfmqL,EAAiBnqL,EAAQ8gI,OAAOv/F,SAChC6oJ,EAAW,GAAIh7F,GACf2xC,EAAgB/gI,EAAQmhI,WAAWxjI,KACnCqjI,EAAgBhhI,EAAQihI,WAAWtjI,KACnC0sL,EAAUz1E,EAAI74G,QACd9D,EAASoyL,EAAQjC,YA2BrB,OAVA5hL,GAAK8jL,gBAAkB9jL,EAAK6iL,WAAWz0E,EAAK50G,EAAQ+uH,WACpDvoH,EAAK26H,WAAa6oD,EAAUK,EAAS7jL,EAAK8jL,gBAAiBtqL,EAAQ+uH,UAAW/uH,EAAQmhI,YACtFipD,EAAS1mJ,OAAOl9B,EAAK26H,YACrB36H,EAAK+jL,gBAAkBxpD,EAAgBC,EACnCmpD,IAAmB54D,GACnB84D,EAAQb,WAAWvxL,EAAS8oI,EAAgBC,GAAeyoD,WAAWxxL,EAAS8oI,EAAgBC,GAEnGx6H,EAAKgkL,gBAAkBhkL,EAAKikL,oBAAoBjkL,EAAK6iL,WAAWz0E,EAAK50G,EAAQuvH,YAC7E/oH,EAAKy6H,WAAa+oD,EAAUK,EAAS7jL,EAAKgkL,gBAAiBxqL,EAAQuvH,UAAWvvH,EAAQihI,WAAYjhI,EAAQ+uH,WAC1Gq7D,EAAS1mJ,OAAOl9B,EAAKy6H,YACdmpD,GAEXK,oBAAqB,SAAUzxD,GAAV,GAIRt+H,GAHL8L,EAAO5G,KACPI,EAAUwG,EAAKxG,QACfstC,EAAOttC,EAAQ+uH,UAAY/uH,EAAQuvH,SACvC,KAAS70H,EAAIs+H,EAAOxhI,OAAS,EAAGkD,GAAK,EAAGA,IAChCA,EAAI4yC,IAAS,GACb0rF,EAAOhxH,OAAOtN,EAAG,EAGzB,OAAOs+H,IAEXqwD,WAAY,SAAUt6C,EAAMnD,GAAhB,GAUJlxI,GATA4hC,EAAQ18B,KACRI,EAAUs8B,EAAMt8B,QAChBE,EAAUF,EAAQE,QAClBy9C,EAAQ39C,EAAQ1H,IAAM0H,EAAQ4R,IAC9Bs1E,EAAQ6nD,EAAK5nD,SAAW4nD,EAAK/nD,WAC7BnY,EAAMkgE,EAAK/nD,WACX0jG,EAAY/sI,EAAQiuF,EACpB/sG,EAAOqoD,EAAQwjG,EACfr7G,IAMJ,KAJInvE,IACA2uE,GAAOqY,EACProD,GAAQA,GAEPnkC,EAAI,EAAGA,EAAIgwL,EAAWhwL,IACvB20E,EAAU3nE,KAAK2H,EAAMw/D,EAAKw6C,IAC1Bx6C,GAAOhwC,CAKX,OAHIxvB,GAAMw/D,IAAQkgE,EAAK5nD,UACnB9X,EAAU3nE,KAAKmnE,GAEZQ,GAEXp3E,OAAQ,SAAUA,GACd,GAAIuO,GAAO5G,IACX,OAAI3H,IACAuO,EAAKouG,IAAI40E,WAAWvxL,GAAQwxL,WAAWxxL,GACvCuO,EAAKmkL,gBAAgBnkL,EAAK26H,WAAW5mI,SAAUiM,EAAK8jL,iBACpD9jL,EAAKmkL,gBAAgBnkL,EAAKy6H,WAAW1mI,SAAUiM,EAAKgkL,iBAAiB,GAFrEhkL,GAIOA,EAAKouG,IAAIwzE,cAGxBuC,gBAAiB,SAAU1/D,EAAOo+D,EAAYuB,GAA7B,GASJlwL,GACDmwL,EACAl7F,EACAm7F,EACAC,EAZJvkL,EAAO5G,KACPs+E,EAAO0sG,EAAQpkL,EAAK+jL,iBAAmB,EAAI,EAC3CF,EAAU7jL,EAAKouG,IACf38G,EAASoyL,EAAQjC,YAKrB,KAJIwC,GAASpkL,EAAKxG,QAAQ8gI,OAAOv/F,WAAagwF,GAAoB,IAATrzC,IACrDmsG,EAAU7jL,EAAKouG,IAAI74G,QACnBsuL,EAAQb,WAAWvxL,EAASimF,GAAMurG,WAAWxxL,EAASimF,IAEjDxjF,EAAI,EAAGA,EAAIuwH,EAAMzzH,OAAQkD,IAC1BmwL,EAAWR,EAAQl6E,QAAQk5E,EAAW3uL,IACtCi1F,EAAWs7B,EAAMvwH,GAAGi1F,SACpBm7F,EAAQD,EAASh4J,EAAI88D,EAAS,GAAG1jB,SAASp5C,EAC1Ck4J,EAAQF,EAAS55K,EAAI0+E,EAAS,GAAG1jB,SAASh7D,EAC9Cg6G,EAAMvwH,GAAG6+B,WAAU,GAAIitJ,GAAIpiG,gBAAiBznD,UAAUmuJ,EAAOC,OAIrEC,GAAQpmL,EAAOtE,QACfC,KAAM,SAAU5I,EAAS03H,GAAnB,GAEErvH,GACAu9I,EACArF,EAEAnB,EAYSr8I,EAjBTy9I,EAAQv4I,KAIRkpB,EAAS3H,EAAQF,GAAG6H,UAYxB,IAVAhxB,EAAM4tB,QAAQ/tB,GACdrB,EAAEqB,GAASi+C,QACXhxC,EAAOf,GAAGtD,KAAKwH,KAAKowI,EAAOxgJ,GAC3BwgJ,EAAMl/I,QAAUk/I,EAAMxgJ,QACtBwgJ,EAAM+hC,iBAAmB1/K,KAAe60H,GACxCrvH,EAAUxF,KAAe29I,EAAMn4I,QAASqvH,GACxC6oB,EAAYl4I,EAAQ+2I,MACpBA,EAAQjuH,EAAOovH,IAAcpvH,EAAOovH,EAAUx7I,eAC9C6gJ,EAAerF,GAAanB,EAAQA,EAAMoB,SAC1CA,EAAMn4I,QAAUxF,KAAe+iJ,EAAcv9I,GACzC1J,EAAEqP,QAAQ3F,EAAQ24D,SAClB,IAASj+D,EAAI,EAAGA,EAAIsF,EAAQ24D,QAAQnhE,OAAQkD,IACxCy9I,EAAMn4I,QAAQ24D,QAAQj+D,GAAKF,KAAe+iJ,EAAa5kF,QAAS34D,EAAQ24D,QAAQj+D,GAGxFy9I,GAAMxgJ,QAAQuC,SAAS,WACvBi+I,EAAMh9E,QAAUg9E,EAAM8yC,iBACtB9yC,EAAM4qB,UAEV/iK,SACI0jI,YACAqT,MAAO,UACPskC,SAAU,GACV1iH,WACAr8B,SACA4uJ,cAEJxlK,QAAS,WACL9lB,KAAKu7D,QAAQz1C,UACb9gB,EAAOf,GAAG6hB,QAAQ3d,KAAKnI,OAE3BpC,MAAO,SAAUA,GAAV,GACCgJ,GAAO5G,KACP+4D,EAAUnyD,EAAKrH,SAAS,EAC5B,OAAyB,KAArBxE,UAAUnD,OACHmhE,EAAQn7D,SAEnBm7D,EAAQn7D,MAAMA,GACdgJ,EAAK2kL,iBAAiB3tL,GADtBm7D,IAGJyyH,MAAO,WACH,GAAIjwH,GAAUv7D,KAAKu7D,OACnBA,GAAQrc,QACRqc,EAAQw1B,KAAK/wF,KAAKyrL,WAEtBnpF,aAAc,WACV,MAAOtiG,MAAKyrL,UAEhBC,UAAW,SAAUx5K,GAAV,GAIHpX,GAHA8L,EAAO5G,KACPT,EAAWqH,EAAKrH,SAChBmsL,IAEJ,IAAyB,IAArB3wL,UAAUnD,OAAc,CACxB,IAAKkD,EAAI,EAAGA,EAAIyE,EAAS3H,OAAQkD,IAC7B4wL,EAAU5jL,KAAKvI,EAASzE,GAAG8C,QAE/B,OAAO8tL,GAEX,GAAIh1L,EAAEqP,QAAQmM,GACV,IAAKpX,EAAI,EAAGA,EAAIoX,EAAOta,OAAQkD,IACvBk4C,EAAS9gC,EAAOpX,KAChByE,EAASzE,GAAG8C,MAAMsU,EAAOpX,GAIrC8L,GAAK2kL,iBAAiBr5K,IAE1Bq5K,iBAAkB,SAAUr5K,GAAV,GAGLpX,GAFLyE,KAAc2W,OAAOlW,KAAKI,QAAQ24D,QAEtC,KADA7mD,KAAYgE,OAAOhE,GACVpX,EAAI,EAAGA,EAAIoX,EAAOta,OAAQkD,IAC/ByE,EAASzE,GAAG8C,MAAQsU,EAAOpX,IAGnC6qB,QAAS,WAAA,GAGD7qB,GAFA8L,EAAO5G,KACPkR,EAAItK,EAAKxG,QAAQhI,WAGrB,KADAwO,EAAKxG,QAAQhI,aAAc,EACtB0C,EAAI,EAAGA,EAAI8L,EAAKrH,SAAS3H,OAAQkD,IAClC8L,EAAKrH,SAASzE,GAAGsF,QAAQmsE,UAAUn0E,aAAc,CAIrD,KAFAwO,EAAKu8J,SACLv8J,EAAKxG,QAAQhI,YAAc8Y,EACtBpW,EAAI,EAAGA,EAAI8L,EAAKrH,SAAS3H,OAAQkD,IAClC8L,EAAKrH,SAASzE,GAAGsF,QAAQmsE,UAAUn0E,YAAc8Y,GAGzDiyJ,OAAQ,WAAA,GAUAj5E,GATAtjF,EAAO5G,KACPjC,EAAOnD,EAAWgM,EAAK+kL,WAAY/kL,EAAKxG,QAAQkrL,WAChDjyL,EAAU,GAAI2xF,IACd,EACA,IAEAjtF,EAAK9E,MACL8E,EAAK7E,QAGT0N,GAAK20D,QAAQrc,QACbt4C,EAAK0kL,UAAY1kL,EAAKglL,mBACtBhlL,EAAK20D,QAAQxjE,QAAQE,KACjBgB,MAAO8E,EAAK9E,MACZC,OAAQ6E,EAAK7E,SAEjB0N,EAAKilL,eACL3hG,EAAOu8F,EAAOptL,EAAQ6wF,OAAQtjF,EAAKklL,kBACnCllL,EAAK+vG,OAAOzsB,IAEhB0hG,iBAAkB,WAAA,GAgBVN,GAfA1kL,EAAO5G,KACPI,EAAUwG,EAAKxG,QAAQkrL,UACvBvtL,EAAO6I,EAAK20D,QAAQx9D,OACpBs+H,EAASj8H,EAAQi8H,WACjB0vD,EAAe,GAAI/gG,IACnB,EACA,IAEAjtF,EAAK9E,MACL8E,EAAK7E,QAgBT,OAdA0N,GAAKklL,iBAAmB1rL,EAAQ0iC,QAAUwkJ,EACtCjrD,EAAOpjI,MAAQ,IACf8yL,EAAetF,EAAOsF,EAAc1vD,EAAOpjI,QAE3CqyL,EAAYxuF,EAAKkF,SAAS+pF,GAC1B/uF,QACI/oB,MAAOooD,EAAOpjI,MAAQojI,EAAOpoD,MAAQ,GACrCh7E,MAAOojI,EAAOpjI,MACd4lH,SAAUwd,EAAOxd,SACjB/J,SAAU,QACVmK,QAAS,SAEbliB,MAAQ9oB,MAAO7zE,EAAQ4+F,eAI/BqsF,eAAgB,WAAA,GAKRvyL,GAJA8N,EAAO5G,KACPI,EAAUwG,EAAKxG,QACfrC,EAAO6I,EAAK+kL,UAMhB,OALA5tL,GAAOqC,EAAQkrL,UAAY1wL,EAAWmD,EAAMqC,EAAQkrL,WAAavtL,EAC7DjF,EAAOpC,EAAE,eAAeogC,SAASlwB,EAAK7O,SAASE,KAC/CgB,MAAO8E,EAAK9E,MACZC,OAAQ6E,EAAK7E,SAEV,GAAI63F,GAAKsX,QAAQ75D,OAAO11C,GAAQoG,KAAMkB,EAAQq7K,YAEzDj2J,QAAS,WACL,MAAOxlB,MAAK2rL,YAEhBA,SAAU,WAAA,GACF/kL,GAAO5G,KACPjI,EAAU6O,EAAK7O,QACfkB,EAAQlB,EAAQkB,QAChBC,EAASnB,EAAQmB,QAOrB,OANKD,KACDA,EAAQm4H,GAEPl4H,IACDA,EAASm4H,IAGTp4H,MAAOA,EACPC,OAAQA,MAIhB8yL,GAAcZ,GAAM1qL,QACpBC,KAAM,SAAU5I,EAASqI,GACrB,GAAI6rL,GAAcjsL,IAClBorL,IAAMnnL,GAAGtD,KAAKwH,KAAK8jL,EAAal0L,EAASqI,GACzClI,EAAM0uB,OAAOqlK,EAAa1qK,EAAQF,KAEtCjhB,SACI8O,KAAM,cACN9W,aAAa,EACbkzL,WAAatsF,WAAY,KAE7B2X,OAAQ,SAAUzsB,GAAV,GAKKpvF,GAJL8L,EAAO5G,KACPT,EAAWqH,EAAKrH,QAGpB,KAFAqH,EAAK81B,MAAMi6E,OAAOzsB,GAClBtjF,EAAKslL,iBAAmBtlL,EAAK81B,MAAMwtD,KAC1BpvF,EAAI,EAAGA,EAAIyE,EAAS3H,OAAQkD,IACjCyE,EAASzE,GAAG67G,OAAO/vG,EAAK81B,MAAMs4E,KAC9BpuG,EAAKslL,iBAAmBlhG,EAAKC,MAAMrkF,EAAKslL,iBAAkB3sL,EAASzE,GAAGovF,KAE1EtjF,GAAKkgC,SAASojD,GACdtjF,EAAKulL,WAAWjiG,GAChBtjF,EAAKwlL,aAAaxlL,EAAK0kL,UAAW/rL,EAAUqH,EAAK81B,OACjD91B,EAAK4kL,SAETY,aAAc,SAAUd,EAAW/rL,EAAUm9B,GAA/B,GAEN/wB,GAIK7Q,EALLmgI,EAAU,GAAIzrC,EAKlB,KAHAyrC,EAAQn3F,OAAOwnJ,GACfrwD,EAAQn3F,OAAOpH,EAAM2uF,OACrB4P,EAAQn3F,OAAOpH,EAAM8X,QACZ15C,EAAI,EAAGA,EAAIyE,EAAS3H,OAAQkD,IACjC6Q,EAAUpM,EAASzE,GACnB6Q,EAAQpD,SACR0yH,EAAQn3F,OAAOn4B,EAAQ4a,UACvB5a,EAAQ/N,MAAM+N,EAAQvL,QAAQxC,MAElCq9H,GAAQn3F,OAAOpH,EAAMqsJ,eACrB/oL,KAAKyrL,SAAWxwD,GAEpBn0F,SAAU,SAAUojD,GAWhB,IAXM,GAQFu/C,GAAS4iD,EAAS5hD,EAASovB,EAAKyyB,EAPhC1lL,EAAO5G,KACP08B,EAAQ91B,EAAK81B,MACbs4E,EAAMt4E,EAAMs4E,IACZu3E,EAAc3lL,EAAKslL,iBACnBjtJ,EAAOxmC,EAAKoG,IAAI+H,EAAK4lL,QAAQD,EAAariG,IAC1Cl4E,EAAMvC,EAAMwvB,EAAMwqF,GAClB/wH,EAAM+W,GAAOwvB,EAAMwqF,GAEnBgjE,EAAY,EACZ3xL,EAAI,MACDA,IAAM,OACT2xL,EAAYH,IAAY7hD,EAAUgiD,EAAY,EAAI,EAC9CA,EAAY,IAGZz6K,GAAO6nJ,IACPpwB,EAAU7iI,EAAK8lL,WAAW16K,EAAKk4E,EAAM8qB,GACjC,GAAKy0B,GAAWA,GAAW,IAI/B/wI,GAAOmhK,IACPpvB,EAAU7jI,EAAK8lL,WAAWh0L,EAAKwxF,EAAM8qB,GACjC,GAAKy1B,GAAWA,GAAW,KAK/BovB,EADApwB,EAAU,GAAKgB,EAAU,EACb,EAANz4H,EACCy3H,EAAU,GAAKgB,EAAU,EACpB,EAAN/xI,EAEA+W,GAAOuC,EAAMtZ,GAAO,GAAK,EAAG+wH,GAEtC4iE,EAAUzlL,EAAK8lL,WAAW7yB,EAAK3vE,EAAM8qB,GACjC,GAAKq3E,GAAWA,GAAW,KAG/BC,EAAU7hD,EACN4hD,EAAU,GACV3zL,EAAMmhK,EACNpvB,EAAU4hD,IAEVr6K,EAAM6nJ,EACNpwB,EAAU4iD,IAItBK,WAAY,SAAUztJ,EAAMirD,EAAM8qB,GAAtB,GAUCl6G,GATL8L,EAAO5G,KACP08B,EAAQ91B,EAAK81B,MACbn9B,EAAWqH,EAAKrH,SAChBlH,EAAS28G,EAAIwzE,YAMjB,KALAxzE,EAAMA,EAAI74G,QACV64G,EAAI40E,WAAWvxL,EAAS4mC,GAAM4qJ,WAAWxxL,EAAS4mC,GAClDvC,EAAMs4E,IAAMA,EACZt4E,EAAMi6E,OAAOzsB,GACbtjF,EAAK+lL,SAAWjwJ,EAAMwtD,KACbpvF,EAAI,EAAGA,EAAIyE,EAAS3H,OAAQkD,IACjCyE,EAASzE,GAAG67G,OAAO3B,GACnBpuG,EAAK+lL,SAAW3hG,EAAKC,MAAMrkF,EAAK+lL,SAAUptL,EAASzE,GAAGovF,KAE1D,OAAOtjF,GAAK4lL,QAAQ5lL,EAAK+lL,SAAUziG,IAEvCsiG,QAAS,SAAUI,EAASxpJ,GACxB,MAAO3qC,GAAKuZ,IAAIoxB,EAAInqC,QAAU2zL,EAAQ3zL,QAASmqC,EAAIlqC,SAAW0zL,EAAQ1zL,WAE1EizL,WAAY,SAAUjiG,GAAV,GAWCpvF,GAVL8L,EAAO5G,KACP6sL,EAAgBjmL,EAAK+lL,SAASx1H,SAC9BuoE,EAAYx1C,EAAK/yB,SACjB21H,EAAWD,EAAc55J,EAAIysG,EAAUzsG,EACvC85J,EAAWF,EAAcx7K,EAAIquH,EAAUruH,EACvCqrB,EAAQ91B,EAAK81B,MACbn9B,EAAWqH,EAAKrH,QAIpB,KAHAm9B,EAAMs4E,IAAI79C,OAAOlkC,GAAK65J,EACtBpwJ,EAAMs4E,IAAI79C,OAAO9lD,GAAK07K,EACtBrwJ,EAAMi6E,OAAOzsB,GACJpvF,EAAI,EAAGA,EAAIyE,EAAS3H,OAAQkD,IACjCyE,EAASzE,GAAG67G,OAAOj6E,EAAMs4E,KACzBpuG,EAAK+lL,SAAW3hG,EAAKC,MAAMvuD,EAAMwtD,KAAM3qF,EAASzE,GAAGovF,OAG3D2hG,aAAc,WAAA,GAKNlgL,GAGK7Q,EAPL8L,EAAO5G,KACPI,EAAUwG,EAAKxG,QACfb,EAAWa,EAAQ24D,QACnBr8B,EAAQ91B,EAAK81B,MAAQ,GAAImsJ,IAAYzoL,EAAQs8B,MAIjD,KAFA91B,EAAKrH,YACLA,EAAW7I,EAAEqP,QAAQxG,GAAYA,GAAYA,GACpCzE,EAAI,EAAGA,EAAIyE,EAAS3H,OAAQkD,IACjC6Q,EAAU,GAAIo8K,IAAcrrJ,EAAO9hC,KAAe2E,EAASzE,IAAMyxE,WAAan0E,YAAagI,EAAQhI,gBACnGwO,EAAKrH,SAASuI,KAAK6D,MAI3BqhL,GAAc5B,GAAM1qL,QACpBC,KAAM,SAAU5I,EAASqI,GACrB,GAAI6sL,GAAcjtL,IAClBorL,IAAMnnL,GAAGtD,KAAKwH,KAAK8kL,EAAal1L,EAASqI,GACzClI,EAAM0uB,OAAOqmK,EAAa1rK,EAAQF,KAEtCjhB,SACI8O,KAAM,cACN9W,aAAa,EACbkzL,WAAatsF,WAAY,IACzBtiE,OAASd,UAAU,IAEvB+6E,OAAQ,SAAUzsB,GAAV,GAOKpvF,GANL8L,EAAO5G,KACPT,EAAWqH,EAAKrH,SAChB2tL,EAAQhjG,EAAKnnD,OAAO9P,EACpBk6J,EAAQjjG,EAAKnnD,OAAO1xB,EACpB+7K,EAAS,GAAI7rK,GAAQuxH,MAAMo6C,EAAOC,EAAOD,EAAQhjG,EAAKjxF,QAASk0L,EAAQjjG,EAAKhxF,SAEhF,KADA0N,EAAK81B,MAAMi6E,OAAOy2E,GACTtyL,EAAI,EAAGA,EAAIyE,EAAS3H,OAAQkD,IACjCyE,EAASzE,GAAG67G,QAEhB/vG,GAAKsjF,KAAOtjF,EAAKymL,QAAQD,GACzBxmL,EAAK0mL,iBACL1mL,EAAK2mL,kBACL3mL,EAAKwlL,eACLxlL,EAAK4kL,SAETY,aAAc,WAAA,GAKNzgL,GAGK7Q,EAPL8L,EAAO5G,KACPi7H,EAAU,GAAIzrC,GACdg+F,EAAgB5mL,EAAK81B,MAAMn0B,SAC3BhJ,EAAWqH,EAAKrH,QAIpB,KAFA07H,EAAQn3F,OAAOl9B,EAAK0kL,WACpBrwD,EAAQn3F,OAAO0pJ,GACN1yL,EAAI,EAAGA,EAAIyE,EAAS3H,OAAQkD,IACjC6Q,EAAUpM,EAASzE,GACnBmgI,EAAQn3F,OAAOn4B,EAAQpD,UACvBoD,EAAQ/N,MAAM+N,EAAQvL,QAAQxC,MAElCgJ,GAAK6kL,SAAWxwD,GAEpB4wD,aAAc,WAAA,GAKNlgL,GAAS8hL,EAGJ3yL,EAPL8L,EAAO5G,KACPI,EAAUwG,EAAKxG,QACfb,EAAWa,EAAQ24D,QACnBr8B,EAAQ91B,EAAK81B,MAAQ,GAAIgxJ,IAAYttL,EAAQs8B,MAIjD,KAFA91B,EAAKrH,YACLA,EAAW7I,EAAEqP,QAAQxG,GAAYA,GAAYA,GACpCzE,EAAI,EAAGA,EAAIyE,EAAS3H,OAAQkD,IACjC2yL,EAAiB7yL,KAAe2E,EAASzE,IAAMyxE,WAAan0E,YAAagI,EAAQhI,eAE7EuT,EADA8hL,EAAe/yF,QAAUqsF,EACf,GAAI4G,IAAmBjxJ,EAAO+wJ,GAE9B,GAAIG,IAAiBlxJ,EAAO+wJ,GAE1C7mL,EAAKrH,SAASuI,KAAK6D,IAG3BggL,SAAU,WAAA,GACFpzC,GAAQv4I,KACRjI,EAAUwgJ,EAAMxgJ,QAChBkB,EAAQlB,EAAQkB,QAChBC,EAASnB,EAAQmB,SACjB0iC,EAAW28G,EAAMn4I,QAAQs8B,MAAMd,QAOnC,OANK3iC,KACDA,EAAQ2iC,EAAWwrJ,EAAoBh2D,GAEtCl4H,IACDA,EAAS0iC,EAAWy1F,EAAiBg2D,IAGrCpuL,MAAOA,EACPC,OAAQA,IAGhBm0L,QAAS,SAAUjqJ,GAAV,GAMDrlC,GACKjD,EANL8L,EAAO5G,KACP08B,EAAQ91B,EAAK81B,MACbn9B,EAAWqH,EAAKrH,SAChBmgI,EAAYt8F,EAAI+zB,SAChBo1H,EAAchtL,EAAS,GAAG6jC,IAAIjnC,QAAQrD,KAAK4jC,EAAM0G,IAErD,KAAStoC,EAAI,EAAGA,EAAIyE,EAAS3H,OAAQkD,IACjCyxL,EAAYzzL,KAAKyG,EAASzE,GAAGsoC,IAAIjnC,QASrC,OAPIugC,GAAMt8B,QAAQw7B,UACd79B,EAAOwuL,EAAYtzL,QAAU,EAC7BszL,EAAc,GAAIz5C,GAAMpT,EAAUzsG,EAAIl1B,EAAMqlC,EAAI0zB,GAAI4oE,EAAUzsG,EAAIl1B,EAAMqlC,EAAI4zB,MAE5Ej5D,EAAOwuL,EAAYrzL,SAAW,EAC9BqzL,EAAc,GAAIz5C,GAAM1vG,EAAIyzB,GAAI6oE,EAAUruH,EAAItT,EAAMqlC,EAAI2zB,GAAI2oE,EAAUruH,EAAItT,IAEvEwuL,GAEXe,eAAgB,WAAA,GAORhvG,GAAMxjF,EANN8L,EAAO5G,KACP08B,EAAQ91B,EAAK81B,MACbn9B,EAAWqH,EAAKrH,SAChBsuL,EAAWnxJ,EAAM0G,IACjBA,EAAM7jC,EAAS,GAAG6jC,IAAIjnC,QAAQrD,KAAK4jC,EAAM0G,KACzCmpJ,EAAc3lL,EAAKsjF,IAEvB,KAAKpvF,EAAI,EAAGA,EAAIyE,EAAS3H,OAAQkD,IAC7BsoC,EAAItqC,KAAKyG,EAASzE,GAAGsoC,IAAIjnC,QAS7B,KAPIugC,EAAMt8B,QAAQw7B,UACd0iD,EAAOiuG,EAAYp1H,SAASlkC,EAAImQ,EAAI+zB,SAASlkC,EAC7CyJ,EAAMi6E,OAAO,GAAIm8B,GAAM+6C,EAASh3H,GAAKynB,EAAMiuG,EAAYz1H,GAAI+2H,EAAS92H,GAAKunB,EAAMiuG,EAAYv1H,OAE3FsnB,EAAOiuG,EAAYp1H,SAAS9lD,EAAI+xB,EAAI+zB,SAAS9lD,EAC7CqrB,EAAMi6E,OAAO,GAAIm8B,GAAMy5C,EAAY11H,GAAIg3H,EAAS/2H,GAAKwnB,EAAMiuG,EAAYx1H,GAAI82H,EAAS72H,GAAKsnB,KAExFxjF,EAAI,EAAGA,EAAIyE,EAAS3H,OAAQkD,IAC7ByE,EAASzE,GAAG67G,OAAO/vG,EAAKsjF,OAGhCqjG,gBAAiB,WAAA,GAOTzyL,GANA8L,EAAO5G,KACP08B,EAAQ91B,EAAK81B,MACbn9B,EAAWqH,EAAKrH,SAChBsuL,EAAWnxJ,EAAM0G,IAAIjnC,QACrB8yE,EAAMvyC,EAAMt8B,QAAQw7B,SAAW,IAAM,IACrCkyJ,EAAavuL,EAAS,GAAG6jC,GAE7B,KAAKtoC,EAAI,EAAGA,EAAIyE,EAAS3H,OAAQkD,IAC7BgzL,EAAWh1L,KAAKyG,EAASzE,GAAGsoC,IAAIjnC,QAKpC,KAHA0xL,EAAS5+G,EAAM,IAAMx2E,EAAKC,IAAIm1L,EAAS5+G,EAAM,GAAK6+G,EAAW7+G,EAAM,GAAI,GACvE4+G,EAAS5+G,EAAM,IAAMx2E,EAAKC,IAAIo1L,EAAW7+G,EAAM,GAAK4+G,EAAS5+G,EAAM,GAAI,GACvEvyC,EAAMi6E,OAAOk3E,GACR/yL,EAAI,EAAGA,EAAIyE,EAAS3H,OAAQkD,IAC7ByE,EAASzE,GAAG67G,OAAO/vG,EAAKsjF,SAIhCwjG,GAAc74D,EAAYn0H,QAC1BC,KAAM,SAAUP,GACZ,GAAIs8B,GAAQ18B,IACZ08B,GAAMt8B,QAAUxF,KAAe8hC,EAAMt8B,QAASA,GAC9Cs8B,EAAMt8B,QAAUxF,KAAe8hC,EAAMt8B,SAAW8gI,QAAU1hG,OAAQ9C,EAAMt8B,QAAQo/B,UAChF9C,EAAMt8B,QAAQ+uH,UAAYzyF,EAAMt8B,QAAQ+uH,WAAapB,EAAcrxF,EAAMt8B,QAAQ4R,IAAK0qB,EAAMt8B,QAAQ1H,KACpG07H,EAAKnwH,GAAGtD,KAAKwH,KAAKu0B,EAAOA,EAAMt8B,SAC/Bs8B,EAAMt8B,QAAQuvH,UAAYjzF,EAAMt8B,QAAQuvH,WAAajzF,EAAMt8B,QAAQ+uH,UAAY,IAEnF/uH,SACI4R,IAAK,EACLtZ,IAAK,GACL6oI,YACIxjI,KAAM,GACNwtF,MAAOymC,EACP/9C,MAAOs9C,EACPt4H,MAAOkuL,EACP3jL,SAAS,GAEb69H,YACItjI,KAAM,GACNwtF,MAAOymC,EACP/9C,MAAOs9C,EACPt4H,MAAOkuL,EACP3jL,SAAS,GAEbmhG,MAAQ1rG,MAAOkuL,GACfjmD,QACIv/F,SAAUqwF,EACVt9B,QAAS,GAEbl1D,QAAQ,EACR4jG,aAAa,GAEjB76H,OAAQ,WAAA,GACA3B,GAAO5G,KACPumB,EAAW3f,EAAK2f,SAAW,GAAIipE,GAC/B0xC,EAASt6H,EAAKoiL,eACd+E,EAAYnnL,EAAKonL,aACjBC,EAAarnL,EAAKqiL,cAClBz0I,EAAS5tC,EAAKsiL,cAElB,OADA3iK,GAASud,OAAOiqJ,EAAW7sD,EAAQ+sD,EAAYz5I,GACxCjuB,GAEX2iK,aAAc,WAAA,GAWNnrI,GAAO8nF,EAAMnC,EAAOC,EAAO7oI,EAV3B8L,EAAO5G,KACPI,EAAUwG,EAAKxG,QACf4R,EAAM5R,EAAQ4R,IACdtZ,EAAM0H,EAAQ1H,IACd87C,EAASp0C,EAAQo0C,WACjB5Y,EAAWx7B,EAAQw7B,SACnB4D,EAASp/B,EAAQ8gI,OAAO1hG,OACxBjZ,EAAW,GAAIipE,GACf97E,EAAQ8gC,EAAO58C,OACf0uI,EAAYlmI,EAAQkmI,WAAalmI,EAAQihI,WAAWtjI,KAAO,CAE/D,IAAI2V,EACA,IAAK5Y,EAAI,EAAGA,EAAI4Y,EAAO5Y,IACnBijD,EAAQyoI,EAAShyI,EAAO15C,GAAIkX,EAAKtZ,GACjCmtI,EAAOj/H,EAAKq9H,QAAQlmF,EAAM/wB,KAAM+wB,EAAM9wB,IACtCy2G,EAAQ9nG,EAAWh1B,EAAKs7H,UAAY2D,EACpClC,EAAQ/nG,EAAWiqG,EAAOj/H,EAAKs7H,UAC3BtmG,EACA8nG,EAAM7sE,IAAMyvE,GAAa9mG,KAAc,GAEvCmkG,EAAM3sE,IAAMsvE,GAAa9mG,KAAc,GAE3CjZ,EAASud,OAAOg5D,EAAKkF,SAAS,GAAIhX,IAC9B04C,EAAM7sE,GACN8sE,EAAM7sE,KAEN4sE,EAAM3sE,GAAK2sE,EAAM7sE,GACjB8sE,EAAM3sE,GAAK2sE,EAAM7sE,MAEjBimC,MACI9oB,MAAOl2B,EAAMk2B,MACb/vC,QAAS6Z,EAAM7Z,SAEnB84D,YAIZ,OAAOz2E,IAEXyiK,aAAc,WAAA,GAKDluL,GAJL8L,EAAO5G,KACPI,EAAUwG,EAAKxG,QACf8gI,EAASt6H,EAAKs6H,OACd36G,EAAW,GAAIipE,EACnB,KAAS10F,EAAI,EAAGA,EAAIomI,EAAOtpI,OAAQkD,IAC/ByrB,EAASud,OAAOsiJ,EAAYllD,EAAOpmI,GAAIsF,EAAQ8gI,QAEnD,OAAO36G,IAEXynK,WAAY,WAAA,GAKJE,GAJAtnL,EAAO5G,KACPI,EAAUwG,EAAKxG,QACfukG,EAAOvkG,EAAQukG,KACfu9B,EAAUt7H,EAAKs7H,UAEf37G,EAAW,GAAIipE,EAYnB,OAXImV,GAAK1rG,MAAQ,GAAK0rG,EAAKnhG,UACvB0qL,EAAW,GAAIpxF,IACXE,QACI/oB,MAAO0wB,EAAK1wB,MACZ4qC,SAAUla,EAAKka,SACf5lH,MAAO0rG,EAAK1rG,SAGpBi1L,EAAS9nJ,OAAO87F,EAAQrrE,GAAIqrE,EAAQprE,IAAIm5B,OAAOiyC,EAAQnrE,GAAImrE,EAAQlrE,IACnEzwC,EAASud,OAAOoqJ,IAEb3nK,GAEX0iK,YAAa,WAWT,QAAS1gL,GAAOw6H,EAAerY,GAC3B,GAAI5vH,GAAG4Y,EAAQqvH,EAAcnrI,MAC7B,IAAI8yH,EAAYlnH,QACZ,IAAK1I,EAAI4vH,EAAYh9E,KAAM5yC,EAAI4Y,EAAO5Y,GAAK4vH,EAAYzrF,KAC/CnkC,EAAI4vH,EAAYsY,WAAa,IAGjCC,EAAgBtY,MAAQnrF,EAAS0iG,EAAQnrE,GAAKmrE,EAAQnrE,GAAK2zD,EAAY3sH,KACvEklI,EAAgBrY,MAAQprF,EAAS0iG,EAAQprE,GAAK4zD,EAAY3sH,KAAOmkI,EAAQprE,GACzEmsE,EAAgBthG,SAAWohG,EAAcjoI,GACzCuwH,EAAMvnF,OAAOl9B,EAAKunL,eAAelrD,EAAiBvY,KArBrD,GACL9jH,GAAO5G,KACPqrH,EAAQ,GAAI77B,GACZpvF,EAAUwG,EAAKxG,QACf8hI,EAAUt7H,EAAKs7H,UACf1iG,EAASp/B,EAAQ8gI,OAAO1hG,OACxB2vF,EAAY/uH,EAAQmhI,WAAW/9H,QAAUpD,EAAQ+uH,UAAY,EAC7D8T,GACAG,YAAahjI,EAAQgjI,YACrBxnG,SAAUx7B,EAAQw7B,SAkBtB,OAFArzB,GAAO3B,EAAKs8H,wBAAyB9iI,EAAQmhI,YAC7Ch5H,EAAO3B,EAAKu8H,wBAAyBvoI,MAAiBooI,SAAU7T,EAAY/uH,EAAQuvH,WAAavvH,EAAQihI,aAClGhW,GAEX8iE,eAAgB,SAAU/tL,EAASsqH,GAAnB,GAIRz7G,GAAOtX,EAAKy2L,EAHZzjE,EAAQvqH,EAAQuqH,MAChBC,EAAQxqH,EAAQwqH,MAChBjpF,EAAWvhC,EAAQuhC,QAevB,OAbIvhC,GAAQw7B,UACR3sB,EAAQ,GAAI62E,GAAM6kC,EAAOhpF,GACzBhqC,EAAM,GAAImuF,GAAM6kC,EAAQD,EAAY3sH,KAAM4jC,KAE1C1yB,EAAQ,GAAI62E,GAAMnkD,EAAUipF,GAC5BjzH,EAAM,GAAImuF,GAAMnkD,EAAUipF,EAAQF,EAAY3sH,OAElDqwL,EAAW,GAAItxF,IACXE,QACI/oB,MAAOy2C,EAAYz2C,MACnBh7E,MAAOyxH,EAAYzxH,SAExBmtC,OAAOn3B,GAAOghF,OAAOt4F,MAI5B02L,GAAgB1G,GAAQjnL,QACxBC,KAAM,SAAU+7B,EAAOt8B,GACnB,GAAI24D,GAAU/4D,IACd2nL,IAAQ1jL,GAAGtD,KAAKwH,KAAK4wD,EAASr8B,EAAOt8B,GACrC24D,EAAQ34D,QAAUxF,GAAa0zL,OAAS9qL,QAASk+E,EAAQthF,EAAQkuL,SAAYv1H,EAAQ34D,UAEzFA,SACIs6F,MAAOusF,EACPqH,OAASjyD,QAAUpjI,MAAO,IAC1Bg7E,MAAOs9C,EACP8K,QAAUpjI,MAAO,GACjBirC,QAAS,EACTpB,OAAQomF,EAAW,GACnB38C,WAAartE,KAAM+nL,GACnBzjL,SAAS,GAEbmzG,OAAQ,WAAA,GAWAm3E,GAAYS,EAAiBC,EAV7Bz1H,EAAU/4D,KACVI,EAAU24D,EAAQ34D,QAClBs8B,EAAQq8B,EAAQr8B,MAChBqxJ,EAAYrxJ,EAAMwlG,UAClBusD,EAAYruL,EAAQkuL,MAAMvwL,MAAQqC,EAAQrC,KAC1C2wL,EAAkBtuL,EAAQrC,KAAO,EACjCyhC,EAAS9C,EAAMt8B,QAAQo/B,OACvBsD,EAASomF,EAAW9oH,EAAQ0iC,QAC5BlH,EAAWc,EAAMt8B,QAAQw7B,SACzBvwB,EAAQuwB,EAAWkH,EAAOtD,EAAS,OAAS,SAAWsD,EAAOtD,EAAS,SAAW,MAEtFn0B,GAAQm0B,GAAUn0B,EAAQA,EACtBuwB,GACA4yJ,EAAW,GAAI17C,GAAMi7C,EAAUl3H,GAAKxrD,EAAO0iL,EAAUj3H,GAAIi3H,EAAUl3H,GAAKxrD,EAAO0iL,EAAU/2H,IACrFx3B,EACAgvJ,EAAS33H,IAAM43H,EAEfD,EAASz3H,IAAM03H,EAEfruL,EAAQs6F,QAAUusF,IAClBsH,EAAkB,GAAIz7C,GAAMi7C,EAAUh3H,GAAK1rD,EAAO0iL,EAAUj3H,GAAK43H,EAAiBX,EAAUh3H,GAAK1rD,EAAO0iL,EAAU/2H,GAAK03H,GACvHZ,EAAaS,KAGjBC,EAAW,GAAI17C,GAAMi7C,EAAUl3H,GAAIk3H,EAAUj3H,GAAKzrD,EAAO0iL,EAAUh3H,GAAIg3H,EAAUj3H,GAAKzrD,GAClFm0B,EACAgvJ,EAASx3H,IAAMy3H,EAEfD,EAAS13H,IAAM23H,EAEfruL,EAAQs6F,QAAUusF,IAClBsH,EAAkB,GAAIz7C,GAAMi7C,EAAUl3H,GAAK63H,EAAiBX,EAAUj3H,GAAKzrD,EAAO0iL,EAAUh3H,GAAK23H,EAAiBX,EAAUj3H,GAAKzrD,GACjIyiL,EAAaS,IAGrBx1H,EAAQy1H,SAAWA,EACnBz1H,EAAQw1H,gBAAkBA,EAC1Bx1H,EAAQ31B,IAAM0qJ,GAAcU,EAASryL,QAAQ3E,IAAI4I,EAAQi8H,OAAOpjI,QAEpE01L,kBAAmB,WACf,GAAIvuL,GAAUJ,KAAKI,OACnB,QACI28F,MACI9oB,MAAO7zE,EAAQ6zE,MACf/vC,QAAS9jC,EAAQ8jC,SAErB84D,OAAQtb,EAAQthF,EAAQi8H,SACpBpoD,MAAO7zE,EAAQi8H,OAAOpjI,MAAQmH,EAAQi8H,OAAOpoD,OAAS7zE,EAAQ6zE,MAAQ,GACtEh7E,MAAOmH,EAAQi8H,OAAOpjI,MACtB4lH,SAAUz+G,EAAQi8H,OAAOxd,SACzB36E,QAAS9jC,EAAQ8jC,SACjB,OAGZ0qJ,QAAS,WAAA,GACD71H,GAAU/4D,KACVI,EAAU24D,EAAQ34D,QAClBs8B,EAAQq8B,EAAQr8B,MAChB8C,EAAS9C,EAAMt8B,QAAQo/B,OACvBsD,EAASomF,EAAW9oH,EAAQ0iC,QAC5BlH,EAAWc,EAAMt8B,QAAQw7B,SACzBvwB,EAAQuwB,EAAWkH,EAAOtD,EAAS,OAAS,SAAWsD,EAAOtD,EAAS,SAAW,MACtF,OAAOn0B,MAGXsiL,GAAqBU,GAAc3tL,QACnCC,KAAM,SAAU+7B,EAAOt8B,GACnBiuL,GAAcpqL,GAAGtD,KAAKwH,KAAKnI,KAAM08B,EAAOt8B,GACpCJ,KAAKI,QAAQrC,OAASnH,IACtBoJ,KAAKI,QAAQrC,KAA4C,GAArCiC,KAAK08B,MAAMt8B,QAAQmhI,WAAWxjI,OAG1D8wL,aAAc,WAAA,GASN5/G,GAAKyrB,EARL9zF,EAAO5G,KACPI,EAAUwG,EAAKxG,QACfs8B,EAAQ91B,EAAK81B,MACb3+B,EAAOqC,EAAQrC,KACf69B,EAAWc,EAAMt8B,QAAQw7B,SACzBm4H,EAAWh2J,EAAO,EAClBsB,EAAOq9B,EAAMt8B,QAAQo/B,UAAc,EACnCl/B,EAAUo8B,EAAMt8B,QAAQE,OAiB5B,OAfIs7B,IACAqzC,EAAM3uE,EAAU,KAAO,KACvBo6F,GACI,GAAI5U,GAAM,EAAG,EAAIiuE,GACjB,GAAIjuE,GAAM,EAAIzmF,EAAOtB,EAAM,GAC3B,GAAI+nF,GAAM,EAAG,EAAIiuE,MAGrB9kF,EAAM3uE,EAAU,KAAO,KACvBo6F,GACI,GAAI5U,GAAM,EAAIiuE,EAAU,GACxB,GAAIjuE,GAAM,EAAG,EAAIzmF,EAAOtB,GACxB,GAAI+nF,GAAM,EAAIiuE,EAAU,KAGzBr5D,GAEXotF,QAAS,WAAA,GACDlhL,GAAO5G,KACP08B,EAAQ91B,EAAK81B,MACbt8B,EAAUwG,EAAKxG,QACfmsE,EAAY,GAAIm6G,GAA4B9/K,EAAK2f,SAAU3rB,EAAWwF,EAAQmsE,WAC9E3wC,SAAUc,EAAMt8B,QAAQw7B,SACxB4D,OAAQ9C,EAAMt8B,QAAQo/B,OACtBsD,OAAQl8B,EAAKgoL,QAAQxuL,EAAQ0iC,QAC7B9V,KAAM0P,EAAMunG,QAAQ7jI,EAAQynL,WAC5B56J,GAAIyP,EAAMunG,QAAQ7jI,EAAQxC,SAE1BwC,GAAQmsE,UAAUn0E,eAAgB,IAClCm0E,EAAUnsE,QAAQC,SAAW,GAEjCksE,EAAUprC,QACVorC,EAAUnqC,QAEd75B,OAAQ,WAAA,GAYAs9H,GAXAj/H,EAAO5G,KACPI,EAAUwG,EAAKxG,QACfmmB,EAAW,GAAIipE,GACf9yD,EAAQ91B,EAAK81B,MACboyJ,EAAiBloL,EAAK+nL,oBACtBj0F,EAAQ9zF,EAAKioL,aAAazuL,EAAQxC,MAStC,OARAwC,GAAQmsE,UAAUrtE,KAAO8nL,EACzBzgK,EAAW,GAAIu2E,IACXE,OAAQ8xF,EAAe9xF,OACvBD,KAAM+xF,EAAe/xF,OACtB32D,OAAOs0D,EAAM,IAAIzK,OAAOyK,EAAM,IAAIzK,OAAOyK,EAAM,IAAIjuB,QAClDo5D,EAAOnpG,EAAMunG,QAAQ7jI,EAAQxC,OACjC2oB,EAASoT,UAAUitJ,EAAIjtJ,YAAYoD,UAAU8oG,EAAKhvE,GAAIgvE,EAAK/uE,KAC3DlwD,EAAK2f,SAAWA,EACTA,KAGXqnK,GAAmBS,GAAc3tL,QACjCC,KAAM,SAAU+7B,EAAOt8B,GACnBiuL,GAAcpqL,GAAGtD,KAAKwH,KAAKnI,KAAM08B,EAAOt8B,GACpCJ,KAAKI,QAAQrC,OAASnH,IACtBoJ,KAAKI,QAAQrC,KAA4C,GAArCiC,KAAK08B,MAAMt8B,QAAQmhI,WAAWxjI,OAG1D8wL,aAAc,SAAUjxL,GAAV,GAgBN0nF,GAUAC,EACAkvB,EA1BA7tG,EAAO5G,KACPI,EAAUwG,EAAKxG,QACfs8B,EAAQ91B,EAAK81B,MACbd,EAAWc,EAAMt8B,QAAQw7B,SACzB4D,EAAS9C,EAAMt8B,QAAQo/B,OACvBvQ,EAAMuQ,GAAU5D,KAAgB,EAChC79B,EAAOqC,EAAQrC,KAAOkxB,EACtB8/J,EAAUryJ,EAAMunG,QAAQvnG,EAAMt8B,QAAQ4R,KACtC6zH,EAAOnpG,EAAMunG,QAAQrmI,GACrB61B,EAAOmI,EAAWtqB,GAAI6/G,GACtB69D,EAAWpzJ,EAAWu1F,GAAI7/G,GAC1BwxB,EAASl8B,EAAKgoL,UAAY3/J,EAC1Bo2D,EAAK,GAAIS,EAsBb,OArBAT,GAAG5xD,GAAQs7J,EAAQt7J,EAAO,KAC1B4xD,EAAG2pG,GAAYD,EAAQC,EAAW,KAC9B1pG,EAAK,GAAIQ,GACbR,EAAG7xD,GAAQoyG,EAAKpyG,EAAO,KACvB6xD,EAAG0pG,GAAYnpD,EAAKmpD,EAAW,KAC3BpzJ,GACAypD,EAAGtoD,UAAU+F,EAAQ,GACrBwiD,EAAGvoD,UAAU+F,EAAQ,KAErBuiD,EAAGtoD,UAAU,EAAG+F,GAChBwiD,EAAGvoD,UAAU,EAAG+F,IAEhByiD,EAAKD,EAAGnpF,QACRs4G,EAAKpvB,EAAGlpF,QACRy/B,GACA2pD,EAAGxoD,UAAUh/B,EAAM,GACnB02G,EAAG13E,UAAUh/B,EAAM,KAEnBwnF,EAAGxoD,UAAU,EAAGh/B,GAChB02G,EAAG13E,UAAU,EAAGh/B,KAGhBsnF,EACAC,EACAC,EACAkvB,IAGRqzE,QAAS,WAAA,GAQDv7G,GAPA3lE,EAAO5G,KACP08B,EAAQ91B,EAAK81B,MACbt8B,EAAUwG,EAAKxG,QACfs6F,EAAQ9zF,EAAKioL,aAAazuL,EAAQxC,OAClCqxL,EAAcroL,EAAK2f,SAAS5rB,SAAS,GACrCu0L,EAAWtoL,EAAKioL,aAAazuL,EAAQynL,UACzCoH,GAAY7oJ,OAAOs0D,EAAM,IAAIzK,OAAOyK,EAAM,IAAIzK,OAAOyK,EAAM,IAAIzK,OAAOyK,EAAM,IAAIjuB,QAC5EF,EAAY,GAAIo6G,GAA0BsI,EAAar0L,EAAWwF,EAAQmsE,WAC1EjsE,QAASo8B,EAAMt8B,QAAQE,QACvBs7B,SAAUc,EAAMt8B,QAAQw7B,SACxBuzJ,WACID,EAAS,GACTA,EAAS,IAEbE,WACI10F,EAAM,GACNA,EAAM,OAGVt6F,EAAQmsE,UAAUn0E,eAAgB,IAClCm0E,EAAUnsE,QAAQC,SAAW,GAEjCksE,EAAUprC,QACVorC,EAAUnqC,QAEd75B,OAAQ,WAAA,GACA3B,GAAO5G,KACPg0C,EAAQ,GAAIw7C,GACZs/F,EAAiBloL,EAAK+nL,oBACtB51H,EAAU,GAAI+jC,IACdE,OAAQ8xF,EAAe9xF,OACvBD,KAAM+xF,EAAe/xF,MAIzB,OAFA/oD,GAAMlQ,OAAOi1B,GACbnyD,EAAK2f,SAAWytB,EACTA,KAGXo0I,GAAyBr3F,EAAKx0D,UAAU77B,QACxCC,KAAM,SAAU5I,EAASqI,GACrB2wF,EAAKx0D,UAAUt4B,GAAGtD,KAAKwH,KAAKnI,KAAMjI,EAASqI,GAC3CA,EAAUJ,KAAKI,QACfA,EAAQC,SAAW5H,EAAKC,IAAID,EAAKoG,IAAIuB,EAAQ+nL,SAAW/nL,EAAQ8nL,UAAY9nL,EAAQC,SAAW,IAAM,IAEzGD,SACIi4G,OAAQkb,EACRlzH,SAAUwmL,GAEd5nJ,KAAM,SAAUgwC,GAAV,GACEogH,GAAOrvL,KACPI,EAAUivL,EAAKjvL,QACfknF,EAAQkiC,EAAiBppH,EAAQ8nL,SAAU9nL,EAAQ+nL,SAAUl5G,EACjEogH,GAAKt3L,QAAQ4hC,UAAUitJ,EAAIjtJ,YAAY8D,OAAO6pD,EAAOlnF,EAAQ+2D,WAGrE45B,GAAKiX,iBAAiBr8F,QAAQyc,SAASs/J,EAAgBU,IACnD1B,EAA8B31F,EAAKx0D,UAAU77B,QAC7CN,SACIi4G,OAAQkb,EACRlzH,SAAUymL,GAEd3lJ,MAAO,WAAA,GAaCoxI,GACA+c,EAbAlvL,EAAUJ,KAAKI,QACf0iC,EAAS1iC,EAAQ0iC,OACjB9V,EAAO5sB,EAAQ4sB,KACfC,EAAK7sB,EAAQ6sB,GACbwG,EAAOrzB,EAAQw7B,SAAW,KAAO,IACjCx7B,GAAQo/B,QAAUp/B,EAAQw7B,UAC1B5O,EAAKyG,IAASqP,EACd7V,EAAGwG,IAASqP,IAEZ9V,EAAKyG,IAASqP,EACd7V,EAAGwG,IAASqP,GAEZyvI,EAAYvyK,KAAKuyK,UAAY,GAAIzsF,GAAM94D,EAAK6pC,GAAI7pC,EAAK8pC,IACrDw4H,EAAUtvL,KAAKsvL,QAAU,GAAIxpG,GAAM74D,EAAG4pC,GAAI5pC,EAAG6pC,IACxB,IAArB12D,EAAQC,WACRD,EAAQC,SAAW5H,EAAKC,IAAI65K,EAAUpkE,WAAWmhF,GAAWlvL,EAAQC,SAAW,IAAM,KAG7F4+B,KAAM,SAAUgwC,GAAV,GACEsgH,GAAa/lE,EAAiBxpH,KAAKuyK,UAAUt/I,EAAGjzB,KAAKsvL,QAAQr8J,EAAGg8C,GAChEugH,EAAahmE,EAAiBxpH,KAAKuyK,UAAUlhK,EAAGrR,KAAKsvL,QAAQj+K,EAAG49D,EACpEjvE,MAAKjI,QAAQ4hC,UAAUitJ,EAAIjtJ,YAAYoD,UAAUwyJ,EAAYC,OAGrEz+F,EAAKiX,iBAAiBr8F,QAAQyc,SAAS4+J,EAAeN,GAClDC,EAA4B51F,EAAKx0D,UAAU77B,QAC3CN,SACIi4G,OAAQkb,EACRk8D,MAAO3I,GAEX3lJ,MAAO,WAAA,GACC/gC,GAAUJ,KAAKI,QACfgvL,EAAYhvL,EAAQgvL,UACpBD,EAAY/uL,EAAQ+uL,UACpB17J,EAAOzzB,KAAKyzB,KAAOrzB,EAAQw7B,SAAWtqB,GAAI6/G,GAC1ClkG,EAAKjtB,KAAKitB,GAAKmiK,EAAU,GAAG37J,GAC5BzG,EAAOhtB,KAAKgtB,KAAOmiK,EAAU,GAAG17J,EACX,KAArBrzB,EAAQC,WACRD,EAAQC,SAAW5H,EAAKC,IAAID,EAAKoG,IAAIouB,EAAKD,GAAQ5sB,EAAQqvL,MAAQ,IAAM,IAE5EzvL,KAAK05C,KAAK1sB,IAEdiS,KAAM,SAAUgwC,GACZ,GAAIrxE,GAAQ4rH,EAAiBxpH,KAAKgtB,KAAMhtB,KAAKitB,GAAIgiD,EACjDjvE,MAAK05C,KAAK97C,IAEd87C,KAAM,SAAU97C,GAAV,GACE2lB,GAAS,MAAQvjB,KAAKyzB,KAAKv2B,cAC3BurF,EAASzoF,KAAKI,QAAQgvL,SAC1B3mG,GAAO,GAAGllE,GAAQ3lB,GAClB6qF,EAAO,GAAGllE,GAAQ3lB,MAG1BmzF,EAAKiX,iBAAiBr8F,QAAQyc,SAAS6+J,EAAaN,GAgEpDplK,EAAQF,GAAG8G,OAAO6jK,IAClBzqK,EAAQF,GAAG8G,OAAO6kK,IAClBzrK,EAAQkxH,YAAY/xI,OAAO0qL,GAAMnnL,IACjCrJ,EAAW2mB,GACP6pK,MAAOA,GACPrD,cAAeA,GACfsG,cAAeA,GACfV,mBAAoBA,GACpBC,iBAAkBA,GAClBF,YAAaA,GACb7E,YAAaA,GACbmE,YAAaA,GACbhB,YAAaA,MAEnBr1L,OAAOuB,MAAM2sB,QACRluB,OAAOuB,OACE,kBAAVzB,SAAwBA,OAAOgiC,IAAMhiC,OAAS,SAAUiiC,EAAIC,EAAIC,IACrEA,GAAMD,OAEV,SAAUniC,EAAGC,QACVA,OAAO,yBACH,qBACA,iBACDD,IACL,WAylEE,MAjlEC,UAAUE,EAAGE,GAEV,QAAS84L,GAAQ9xL,EAAOuU,EAAOuB,GAC3B,MAAO9V,GAAMrG,UAAU4a,EAAOA,EAAQuB,GAH7C,GAutBOi8K,GAaAC,EAiEAC,EAkcAC,EAsOAC,EAwcAC,EAp5DA93L,EAAQvB,OAAOuB,MAAO8M,EAAS9M,EAAMmpB,GAAGrc,OAAQtE,EAAShK,EAAEgK,OAAQ9F,EAAa1C,EAAM0C,WAAYqI,EAAUvM,EAAEuM,QAAS6rC,EAAgBp4C,EAAEo4C,cAAeiiD,EAAO74F,EAAMspB,QAASy/J,EAAO/oL,EAAMiyG,SAAUx2B,EAAOz7E,EAAMspB,QAAQmyD,KAAM+N,EAAU/N,EAAK+N,QAASngE,EAAUrpB,EAAMqpB,QAASuxH,EAAQvxH,EAAQuxH,MAAOhf,EAAUvyG,EAAQuyG,QAAS1C,EAAgB,IAAKC,EAAiB,IAAK4+D,EAA2B,GAAIC,EAAc,QAASC,EAAoB,eAAgBC,EAAgC,iDAIxeC,EAAWn4L,EAAMrB,MAAM6J,QACvBC,KAAM,SAAUP,GACZJ,KAAKqlB,WAAWjlB,IAEpBilB,WAAY,SAAUjlB,GAClB,GAAIwG,GAAO5G,IACX4G,GAAKxG,QAAUM,KAAWkG,EAAKxG,QAASA,GACxCwG,EAAK0pL,gBAAkB1pL,EAAKxG,QAAQmwL,aAAe,EAAI3pL,EAAKxG,QAAQkwL,gBAAkB,GAE1FhxE,OAAQ,SAAU1hH,EAAO3E,EAAOC,GAC5B,GAAI0N,GAAO5G,IAYX,OAXI0hF,GAAQ9jF,KACRA,GAAS,IAEbgJ,EAAK4pL,UAAU5yL,EAAO3E,EAAOC,GACzB0N,EAAKxG,QAAQmwL,cACb3pL,EAAK2pL,eAET3pL,EAAK6pL,UACD7pL,EAAKxG,QAAQmwL,cACb3pL,EAAK2pL,gBAGLpjE,SAAUvmH,EAAKumH,SACfv+G,QAAShI,EAAKgI,UAGtBxO,SACIkwL,gBAAiBL,EACjBM,cAAc,EACdG,aAAa,GAEjBF,UAAW,aAEXD,aAAc,WACVvwL,KAAK4O,QAAQ9G,KAAK9H,KAAKI,QAAQkwL,iBAAmBL,IAEtDQ,QAAS,aAETE,sBAAuB,SAAUC,GAC7B,KAAU9nL,OAAM5Q,EAAM6Q,OAAOqnL,EAA+BQ,EAAW5wL,KAAKkP,UAGhF2hL,KACAC,EAAaT,EAAS3vL,QACtBqwL,kBAAmB,GACnBN,QAAS,WAAA,GAGI9yL,GAFLiJ,EAAO5G,KAAMpC,EAAQgJ,EAAKhJ,KAE9B,KADAgJ,EAAKoqL,WACIrzL,EAAM,EAAGA,EAAMC,EAAMhG,OAAQ+F,IAClCiJ,EAAKqqL,aAAarzL,EAAMvG,OAAOsG,GAE/BiJ,GAAKxG,QAAQswL,aACb9pL,EAAKsqL,eAETtqL,EAAKoxG,UACLpxG,EAAKuqL,iBAETF,aAAc,SAAUL,GACpB,GAAIhqL,GAAO5G,KAAMoxL,EAAWxqL,EAAKyqL,aAAaT,EACzCQ,IACDxqL,EAAK+pL,sBAAsBC,GAE/BhqL,EAAK0qL,QAAQF,IAEjBE,QAAS,eAGTC,GACAN,aAAc,SAAUL,GACpB,GAAIhqL,GAAO5G,IACP4G,GAAKyqL,aAAaT,GAClBhqL,EAAK0qL,QAAQ1qL,EAAKyqL,aAAaT,IACxBA,EAAUtnL,WAAW,GAAK,IACjC1C,EAAK+pL,sBAAsBC,GAE3BhqL,EAAK4qL,YAAYZ,EAAUtnL,WAAW,KAG9CkoL,YAAa,SAAUztF,GAAV,GACQ53F,GACRrR,EAEQi3D,EAHbnrD,EAAO5G,IACX,KAASlF,EAAI,EAAGA,EAAI8L,EAAK6qL,iBAAiB75L,OAAQkD,IAC9C,GAAIqR,EAAWvF,EAAK6qL,iBAAiB32L,GAAGqN,KAAKvB,EAAMm9F,GAAO,CACtD,IAAShyC,EAAI,EAAGA,EAAI5lD,EAASvU,OAAQm6D,IACjCnrD,EAAK0qL,QAAQnlL,EAAS4lD,GAG1B,OADAnrD,GAAKm5K,YAAc5zK,EAASvU,OAAS,EACrC,IAIZ65L,kBACI,SAAU1tF,GACN,GAAI,IAAMA,GAAQA,GAAQ,IAAK,CAC3B,GAAIn9F,GAAO5G,IACX,QACI4G,EAAKyqL,aAAazqL,EAAK8qL,gBAAgB,IACvC9qL,EAAKyqL,aAAapnL,OAAOg4E,aAAa8hB,EAAO,QAIzD,SAAUA,GACN,GAAI,IAAMA,GAAQA,GAAQ,GAAI,CAC1B,GAAIn9F,GAAO5G,IACX,QACI4G,EAAKyqL,aAAazqL,EAAK8qL,gBAAgB,IACvC9qL,EAAKyqL,aAAapnL,OAAOg4E,aAAa8hB,EAAO,QAIzD,SAAUA,GACN,GAAI,GAAKA,GAAQA,GAAQ,GAAI,CACzB,GAAIn9F,GAAO5G,IACX,QACI4G,EAAKyqL,aAAazqL,EAAK8qL,gBAAgB,IACvC9qL,EAAKyqL,aAAapnL,OAAOg4E,aAAa8hB,EAAO,QAIzD,SAAUA,GAAV,GACqB/kG,GAAQ2yL,EASZ72L,EATT8L,EAAO5G,IACX,IAAK4G,EAAKgrL,kBAAkB7tF,GAQxB,IADA/kG,KACSlE,EAAI,EAAGA,EAAI8L,EAAKgrL,kBAAkB7tF,GAAMnsG,OAAQkD,IACrDkE,EAAO8I,KAAKlB,EAAKyqL,aAAazqL,EAAK8qL,gBAAgB,KACnD1yL,EAAO8I,KAAKlB,EAAKyqL,aAAazqL,EAAKgrL,kBAAkB7tF,GAAMjpG,SAT/D62L,GAAwC,EAAxB/yL,KAAKpE,MAAMupG,EAAO,KAAWA,EAAO,IAAM,GAAK,GAC/D/kG,GACI4H,EAAKyqL,aAAazqL,EAAK8qL,gBAAgB,IACvC9qL,EAAKyqL,aAAapnL,OAAOg4E,aAAa0vG,IAS9C,OAAO3yL,KAGf4yL,mBACIC,GAAM,KACNC,IAAO,KACPC,IAAO,KACPC,KACI,IACA,IACA,IACA,MAGRC,uBACIC,GAAM,GACN1lF,GAAM,GACN2lF,GAAM,GACNC,GAAM,IAEVf,cACIgB,KAAK,EACL9gL,KAAK,EACL7a,GAAK,EACL47L,KAAK,GAETZ,iBACI,SACA,SACA,SACA,UAGRb,GAAU0B,OAASzB,EAAWpwL,QAC1BwO,KAAM,UACNsjL,YAAa,GACbC,SAAU,IACVC,SAAU,EACVC,SAAU,EACVC,eAAgB,IAChBpC,UAAW,SAAU5yL,EAAO3E,EAAOC,GAC/B,GAAI0N,GAAO5G,IACX4G,GAAK3N,MAAQA,EACb2N,EAAK1N,OAASA,EACd0N,EAAKhJ,MAAQA,EACbgJ,EAAKm5K,WAAaniL,EAAMhG,OACxBgP,EAAKgI,WACLhI,EAAKisL,cAAgB,IAEzB1B,cAAe,WAAA,GACMhkE,GAQTioD,EARJxuK,EAAO5G,KAAgB8yL,EAAclsL,EAAKmqL,kBAAmBnhE,EAAQhpH,EAAK8rL,SAAUD,EAAW7rL,EAAK6rL,SAAUM,EAAYn0L,KAAKlG,IAAI,IAAOkO,EAAK3N,MAAO,GAC1J,IAAI2N,EAAK1N,OAAS65L,EACd,KAAUjqL,OAAM,sDAAwDlC,EAAKhJ,MAAQ,QAAUm1L,EAEnG,OAAQ5lE,EAAWvmH,EAAKosL,YAAYpjE,IAAUkjE,GAAeljE,EAAQ6iE,GACjE7iE,EAAQztH,YAAYytH,EAAQ,IAAK79G,QAAQ,GAE7C,IAAIo7G,EAAW2lE,EAEX,KADI1d,GAAWx2K,KAAKuoD,KAAKvgD,EAAKqsL,aAAaR,GAAYK,GAC7ChqL,MAAM,oDAAsDlC,EAAKhJ,MAAQ,QAAUw3K,EAEjGxuK,GAAKgpH,MAAQA,EACbhpH,EAAKumH,SAAWA,EAChBvmH,EAAKisL,cAAgBjsL,EAAKisL,cAAct7L,UAAU,EAAGqP,EAAKisL,cAAcj7L,OAAS,GACjFgP,EAAKgI,QAAUhI,EAAKgI,QAAQsH,OAAOtP,EAAKisL,cAAc17L,QAAQ,SAAUy4H,GAAO34H,MAAM2P,EAAKgsL,kBAE9FI,YAAa,SAAUpjE,GACnB,MAAO5vH,MAAK/G,MAAQ+G,KAAKizL,aAAarjE,IAE1CqjE,aAAc,SAAUrjE,GACpB,GAAIhpH,GAAO5G,KAAMkzL,EAAkB,GAAKtjE,EAAQ,EAChD,OAAOhpH,GAAK0pL,gBAAkB4C,GAAmBtsL,EAAKm5K,WAAa,GAAKn5K,EAAK+rL,UAAY/rL,EAAKm5K,WAAa,IAE/GiR,SAAU,WACN,GAAIpqL,GAAO5G,IACX4G,GAAKusL,WAAWvsL,EAAKyqL,aAAaj5H,MAAMxpD,SACxChI,EAAKwsL,mBAET9B,QAAS,SAAUV,GACf5wL,KAAKmzL,WAAWvC,EAAUhiL,SAC1B5O,KAAKozL,mBAETp7E,QAAS,WACLh4G,KAAKmzL,WAAWnzL,KAAKqxL,aAAaj5H,MAAMxpD,UAE5CukL,WAAY,SAAUvkL,GAClB,IAAK,GAAI9T,GAAI,EAAGA,EAAI8T,EAAQhX,OAAQkD,IAChCkF,KAAK6yL,eAAiB7yL,KAAKqzL,gBAAgBzkL,EAAQvX,OAAOyD,KAGlEs4L,gBAAiB,WACb,GAAIxsL,GAAO5G,IACX4G,GAAKisL,eAAiBjsL,EAAK+rL,SAAW/rL,EAAKgsL,gBAE/CS,iBACIxwL,EAAK,KACLywL,EAAK,KACLC,EAAK,SACLC,EAAK,UAETnC,cACIQ,GACIjjL,QAAW,YACXhR,MAAS,GAEbquG,GACIr9F,QAAW,YACXhR,MAAS,GAEb2Y,GACI3H,QAAW,YACXhR,MAAS,GAEb4Y,GACI5H,QAAW,YACXhR,MAAS,GAEb6Y,GACI7H,QAAW,YACXhR,MAAS,GAEb8uG,GACI99F,QAAW,YACXhR,MAAS,GAEbivG,GACIj+F,QAAW,YACXhR,MAAS,GAEbovG,GACIp+F,QAAW,YACXhR,MAAS,GAEbuvG,GACIv+F,QAAW,YACXhR,MAAS,GAEb0vG,GACI1+F,QAAW,YACXhR,MAAS,GAEb61L,GACI7kL,QAAW,YACXhR,MAAS,IAEb21L,GACI3kL,QAAW,YACXhR,MAAS,IAEb81L,GACI9kL,QAAW,YACXhR,MAAS,IAEbgT,GACIhC,QAAW,YACXhR,MAAS,IAEb+1L,GACI/kL,QAAW,YACXhR,MAAS,IAEbiT,GACIjC,QAAW,YACXhR,MAAS,IAEbkT,GACIlC,QAAW,YACXhR,MAAS,IAEbg2L,GACIhlL,QAAW,YACXhR,MAAS,IAEbi2L,GACIjlL,QAAW,YACXhR,MAAS,IAEbk2L,GACIllL,QAAW,YACXhR,MAAS,IAEbm2L,GACInlL,QAAW,YACXhR,MAAS,IAEbo2L,GACIplL,QAAW,YACXhR,MAAS,IAEboT,GACIpC,QAAW,YACXhR,MAAS,IAEbq2L,GACIrlL,QAAW,YACXhR,MAAS,IAEbs2L,GACItlL,QAAW,YACXhR,MAAS,IAEbu2L,GACIvlL,QAAW,YACXhR,MAAS,IAEborF,GACIp6E,QAAW,YACXhR,MAAS,IAEbw2L,GACIxlL,QAAW,YACXhR,MAAS,IAEby2L,GACIzlL,QAAW,YACXhR,MAAS,IAEbuT,GACIvC,QAAW,YACXhR,MAAS,IAEb02L,GACI1lL,QAAW,YACXhR,MAAS,IAEb22L,GACI3lL,QAAW,YACXhR,MAAS,IAEb41L,GACI5kL,QAAW,YACXhR,MAAS,IAEbuzH,GACIviH,QAAW,YACXhR,MAAS,IAEb0T,GACI1C,QAAW,YACXhR,MAAS,IAEb42L,GACI5lL,QAAW,YACXhR,MAAS,IAEb62L,KACI7lL,QAAW,YACXhR,MAAS,IAEb2S,KACI3B,QAAW,YACXhR,MAAS,IAEb82L,KACI9lL,QAAW,YACXhR,MAAS,IAEblH,GACIkY,QAAW,YACXhR,MAAS,IAEb2T,KACI3C,QAAW,YACXhR,MAAS,IAEby0L,KACIzjL,QAAW,YACXhR,MAAS,IAEb00L,KACI1jL,QAAW,YACXhR,MAAS,IAEbw6D,OAASxpD,QAAS,cAEtBxO,SAAWswL,aAAa,KAE5BG,EAAU8D,eAAiB9D,EAAU0B,OAAO7xL,OAAO9F,KAAe22L,GAC9DriL,KAAM,mBACNmiL,cACIuD,QACIhmL,QAAW,YACXhR,MAAS,IAEbi3L,QACIjmL,QAAW,YACXhR,MAAS,IAEbk3L,QACIlmL,QAAW,YACXhR,MAAS,IAEbm3L,QACInmL,QAAW,YACXhR,MAAS,QAIrBizL,EAAUmE,OAASlE,EAAWpwL,QAC1BwO,KAAM,UACN+lL,eAAgB,GAChBC,eAAgB,GAChB1C,YAAa,GACbhC,UAAW,SAAU5yL,EAAO3E,EAAOC,GAC/B,GAAI0N,GAAO5G,IACX4G,GAAKhJ,MAAQA,EACbgJ,EAAK3N,MAAQA,EACb2N,EAAK1N,OAASA,EACd0N,EAAKgI,WACLhI,EAAKsL,UACLtL,EAAKm5K,WAAaniL,EAAMhG,QAE5Bu5L,cAAe,WACX,GAAIvqL,GAAO5G,KAAM+yL,EAAYn0L,KAAKlG,IAAI,IAAOkO,EAAK3N,MAAO,GACzD,IAAI2N,EAAK1N,OAAS65L,EACd,KAAUjqL,OAAM,sBAGpB,IADAlC,EAAKuuL,cACDvuL,EAAKumH,SAAWvmH,EAAKmqL,kBACrB,KAAUjoL,OAAM,uBAGxBqsL,YAAa,WACT,GAAIvuL,GAAO5G,KAAMo1L,EAAiB,CAClCxuL,GAAKumH,SAAWvmH,EAAK3N,OAAS,GAAK2N,EAAKm5K,WAAa,EAAIqV,GAAkBxuL,EAAK0pL,gBAAkB,IAEtGU,SAAU,WACN,GAAIpiL,GAAU5O,KAAKqxL,aAAaj5H,MAAMxpD,OACtC5O,MAAKmzL,WAAWvkL,IAEpBopG,QAAS,WACL,GAAIpxG,GAAO5G,IACX4G,GAAKoqL,WACLpqL,EAAKgI,QAAQ9G,KAAKlB,EAAKyqL,aAAagE,kBAExC/D,QAAS,SAAUF,GACfpxL,KAAKmzL,WAAW/B,EAASxiL,SACzB5O,KAAKkS,OAAOpK,KAAKspL,EAASxzL,QAE9BszL,aAAc,WAAA,GAC6CE,GAE9Ct2L,EAFL8L,EAAO5G,KAAMs1L,EAAc1uL,EAAK2uL,iBAEpC,KADA3uL,EAAK4uL,SAAWF,EAAYp+L,KAAK,IACxB4D,EAAI,EAAGA,EAAIw6L,EAAY19L,OAAQkD,IACpCs2L,EAAWxqL,EAAKyqL,aAAazqL,EAAK6uL,sBAAsBH,EAAYx6L,KACpE8L,EAAKusL,WAAW/B,EAASxiL,UAGjC2mL,gBAAiB,WACb,GAA+EG,GAAQC,EAAQh4L,EAA3FiJ,EAAO5G,KAAMkS,EAAStL,EAAKsL,OAAQta,EAASsa,EAAOta,OAAQg+L,EAAa,CAC5E,KAAKj4L,EAAM/F,EAAS,EAAG+F,GAAO,EAAGA,IAC7Bi4L,GAAchvL,EAAKivL,cAAc3jL,EAAOvU,GAAM/F,EAAS+F,EAAKiJ,EAAKquL,eAIrE,KAFAS,EAASE,EAAahvL,EAAK4rL,YAC3BoD,EAAahvL,EAAKivL,cAAcH,EAAQ,EAAG9uL,EAAKsuL,gBAC3Cv3L,EAAM/F,EAAS,EAAG+F,GAAO,EAAGA,IAC7Bi4L,GAAchvL,EAAKivL,cAAc3jL,EAAOvU,GAAM/F,EAAS+F,EAAM,EAAGiJ,EAAKsuL,eAGzE,OADAS,GAASC,EAAahvL,EAAK4rL,aAEvBkD,EACAC,IAGRF,sBAAuB,SAAU73L,GAC7B,IAAK,GAAIgzL,KAAa5wL,MAAKqxL,aACvB,GAAIrxL,KAAKqxL,aAAaT,GAAWhzL,QAAUA,EACvC,MAAOgzL,IAInBiF,cAAe,SAAUj4L,EAAOuU,EAAOi8B,GACnC,OAAQj8B,EAAQi8B,GAASA,GAASxwC,GAEtCu1L,WAAY,SAAUvkL,GAAV,GACJhR,GACK9C,CAAT,KAASA,EAAI,EAAGA,EAAI8T,EAAQhX,OAAQkD,IAChC8C,EAAQyU,SAASzD,EAAQvX,OAAOyD,GAAI,IACpCkF,KAAK4O,QAAQ9G,KAAKlK,IAG1ByzL,cACIQ,GACIjjL,QAAW,SACXhR,MAAS,GAEbquG,GACIr9F,QAAW,SACXhR,MAAS,GAEb2Y,GACI3H,QAAW,SACXhR,MAAS,GAEb4Y,GACI5H,QAAW,SACXhR,MAAS,GAEb6Y,GACI7H,QAAW,SACXhR,MAAS,GAEb8uG,GACI99F,QAAW,SACXhR,MAAS,GAEbivG,GACIj+F,QAAW,SACXhR,MAAS,GAEbovG,GACIp+F,QAAW,SACXhR,MAAS,GAEbuvG,GACIv+F,QAAW,SACXhR,MAAS,GAEb0vG,GACI1+F,QAAW,SACXhR,MAAS,GAEb61L,GACI7kL,QAAW,SACXhR,MAAS,IAEb21L,GACI3kL,QAAW,SACXhR,MAAS,IAEb81L,GACI9kL,QAAW,SACXhR,MAAS,IAEbgT,GACIhC,QAAW,SACXhR,MAAS,IAEb+1L,GACI/kL,QAAW,SACXhR,MAAS,IAEbiT,GACIjC,QAAW,SACXhR,MAAS,IAEbkT,GACIlC,QAAW,SACXhR,MAAS,IAEbg2L,GACIhlL,QAAW,SACXhR,MAAS,IAEbi2L,GACIjlL,QAAW,SACXhR,MAAS,IAEbk2L,GACIllL,QAAW,SACXhR,MAAS,IAEbm2L,GACInlL,QAAW,SACXhR,MAAS,IAEbo2L,GACIplL,QAAW,SACXhR,MAAS,IAEboT,GACIpC,QAAW,SACXhR,MAAS,IAEbq2L,GACIrlL,QAAW,SACXhR,MAAS,IAEbs2L,GACItlL,QAAW,SACXhR,MAAS,IAEbu2L,GACIvlL,QAAW,SACXhR,MAAS,IAEborF,GACIp6E,QAAW,SACXhR,MAAS,IAEbw2L,GACIxlL,QAAW,SACXhR,MAAS,IAEby2L,GACIzlL,QAAW,SACXhR,MAAS,IAEbuT,GACIvC,QAAW,SACXhR,MAAS,IAEb02L,GACI1lL,QAAW,SACXhR,MAAS,IAEb22L,GACI3lL,QAAW,SACXhR,MAAS,IAEb41L,GACI5kL,QAAW,SACXhR,MAAS,IAEbuzH,GACIviH,QAAW,SACXhR,MAAS,IAEb0T,GACI1C,QAAW,SACXhR,MAAS,IAEb42L,GACI5lL,QAAW,SACXhR,MAAS,IAEb62L,KACI7lL,QAAW,SACXhR,MAAS,IAEb2S,KACI3B,QAAW,SACXhR,MAAS,IAEb82L,KACI9lL,QAAW,SACXhR,MAAS,IAEblH,GACIkY,QAAW,SACXhR,MAAS,IAEb2T,KACI3C,QAAW,SACXhR,MAAS,IAEby0L,KACIzjL,QAAW,SACXhR,MAAS,IAEb00L,KACI1jL,QAAW,SACXhR,MAAS,IAEbg3L,QACIhmL,QAAW,SACXhR,MAAS,IAEbi3L,QACIjmL,QAAW,SACXhR,MAAS,IAEbk3L,QACIlmL,QAAW,SACXhR,MAAS,IAEbm3L,QACInmL,QAAW,SACXhR,MAAS,IAEbw6D,OAASxpD,QAAW,UACpBymL,gBAAiB,OAGzBxE,EAAUiF,eAAiBjF,EAAUmE,OAAOt0L,OAAO9F,KAAe22L,GAC9DriL,KAAM,mBACNgiL,aAAc,WAAA,GAC6CtzL,GAE9C9C,EAFL8L,EAAO5G,KAAMs1L,EAAc1uL,EAAK2uL,iBAEpC,KADA3uL,EAAK4uL,SAAWF,EAAYp+L,KAAK,IACxB4D,EAAI,EAAGA,EAAIw6L,EAAY19L,OAAQkD,IACpC8C,EAAQ03L,EAAYx6L,GAChB8L,EAAKqrL,sBAAsBr0L,GAC3BgJ,EAAK4qL,YAAY5qL,EAAKqrL,sBAAsBr0L,IAE5CgJ,EAAKusL,WAAWvsL,EAAKyqL,aAAazqL,EAAK6uL,sBAAsB73L,IAAQgR,aAKjF+gL,EAAWz3L,EAAMrB,MAAM6J,QACvBC,KAAM,SAAUo1L,GACZ/1L,KAAK+1L,SAAWA,GAEpB/E,SAAU,aAEVj3L,GAAI,aAEJgxB,KAAM,aAENtM,UAAW,eAGXmxK,EAAaD,EAASjvL,QACtBs1L,KAAM,OACNr1L,KAAM,SAAUo1L,EAAUE,GACtB,GAAIrvL,GAAO5G,IACX4G,GAAKmvL,SAAWA,EAChBnvL,EAAKqvL,OAASA,EACdrvL,EAAKsvL,WAAWD,IAEpBjF,SAAU,WACNhxL,KAAK+1L,SAAS5C,WAAWnzL,KAAKo4D,QAElCr+D,GAAI,SAAU6D,EAAOuU,GACjB,GAAI4xF,GAAOnmG,EAAM0L,WAAW6I,EAC5B,OAAOnS,MAAKm2L,OAAOpyF,IAEvBh5E,KAAM,SAAUqrK,GAEZ,IADA,GAAIxvL,GAAO5G,KAAMrC,EAAM,GACfiJ,EAAKyvL,OAAO14L,GAAKwK,KAAKvB,EAAMwvL,IAAkBz4L,EAAMiJ,EAAKyvL,OAAOz+L,QACpE+F,KAGR8gB,UAAW,SAAU23K,GAAV,GACuFryF,GAEtFuyF,EAFJ1vL,EAAO5G,KAAMi2L,EAASrvL,EAAKqvL,OAAQr4L,EAAQw4L,EAAcx4L,MAAO24L,EAAY34L,EAAMhG,MAOtF,KANIqL,EAAQ,IAAKgzL,IAAW,IACpBK,EAAc14L,EAAM0W,OAAO8hL,EAAcjkL,OAAO7Z,MAAM,WACtDg+L,IACAC,EAAY34L,EAAMM,QAAQo4L,EAAY,GAAIF,EAAcjkL,UAGxD4xF,EAAOqyF,EAAcx4L,MAAM0L,WAAW8sL,EAAcjkL,SAAW,GAAKvL,EAAKuvL,OAAOpyF,IAASqyF,EAAcjkL,MAAQokL,GACnH3vL,EAAKmvL,SAAS5C,WAAWvsL,EAAKwlI,SAASroC,IACvCqyF,EAAcjkL,SAGtB+jL,WAAY,SAAUD,GAClB,GAAIrvL,GAAO5G,IACX4G,GAAKyvL,UACDpzL,EAAQ2D,EAAKovL,KAAMC,IAAW,GAC9BrvL,EAAKyvL,OAAOvuL,KAAKlB,EAAK4vL,UAEtBvzL,EAAQ2D,EAAKyvB,SAAU4/J,IAAW,GAClCrvL,EAAKyvL,OAAOvuL,KAAKlB,EAAK6vL,aAE1B7vL,EAAKyvL,OAAOvuL,KAAKlB,EAAK8vL,aAE1BF,SAAU,SAAUJ,GAChB,GAAIA,EAAcO,IAEd,MADAP,GAAcO,KAAM,EACbP,EAAcQ,eAAiB52L,KAAKjB,KAGnD03L,YAAa,SAAUL,GACnB,GAAIxvL,GAAO5G,IACX,IAAIo2L,EAAcQ,eAAiBhwL,EAAKyvB,WAAa+/J,EAAcjkL,MAAQ,GAAKikL,EAAcx4L,MAAMhG,QAAUgP,EAAKmvL,SAASnvL,EAAKyvB,UAAUt8B,GAAGq8L,EAAcx4L,MAAOw4L,EAAcjkL,MAAQ,IAGrL,MAFAvL,GAAKmvL,SAAS5C,WAAWvsL,EAAKiwL,OAC9BT,EAAc1jI,SAAU,GACjB,GAGfgkI,WAAY,WAER,MADA12L,MAAK+1L,SAAS5C,WAAWnzL,KAAKq4D,OACvB,GAEXw+H,MAAO,KAEPhH,KACJA,EAAU4D,EAAI7D,EAAWlvL,QACrB3B,IAAK,IACLs3B,SAAU,IACV8/J,OAAQ,SAAUpyF,GACd,MAAO,IAAKA,GAAQA,EAAO,IAE/BqoC,SAAU,SAAUroC,GAChB,MAAIA,GAAO,GACAA,EAAO,GAEXA,EAAO,IAElB1rC,KAAM,IACND,MAAO,MAEXy3H,EAAU0D,EAAI3D,EAAWlvL,QACrB3B,IAAK,IACLs3B,SAAU,IACV8/J,OAAQ,SAAUpyF,GACd,MAAO,KAAMA,GAAQA,EAAO,KAEhCqoC,SAAU,SAAUroC,GAChB,MAAOA,GAAO,IAElB1rC,KAAM,IACND,MAAO,MAEXy3H,EAAU6D,EAAI/D,EAASjvL,QACnB3B,IAAK,IACLiyL,SAAU,WACNhxL,KAAK+1L,SAAS5C,WAAWnzL,KAAKo4D,QAElCr+D,GAAI,SAAU6D,EAAOuU,GACjB,GAAI2kL,GAAQpH,EAAQ9xL,EAAOuU,EAAO,EAClC,QAAQA,EAAQ,GAAKvU,EAAMhG,QAA0B,GAAhBgG,EAAMhG,SAAgBs4L,EAAYh2L,KAAK48L,IAEhF/rK,KAAM,WACF/qB,KAAK+1L,SAAS5C,WAAWnzL,KAAKq4D,OAElC55C,UAAW,SAAU23K,GAEjB,IADA,GAAIryF,IACIA,EAAO2rF,EAAQ0G,EAAcx4L,MAAOw4L,EAAcjkL,MAAO,KAAO+9K,EAAYh2L,KAAK6pG,IAAwB,GAAfA,EAAKnsG,QACnGoI,KAAK+1L,SAAS5C,WAAW9gL,SAAS0xF,EAAM,KACxCqyF,EAAcjkL,OAAS,GAG/Bi6H,SAAU,SAAUroC,GAChB,MAAOA,IAEX1rC,KAAM,GACND,MAAO,MAEXy3H,EAAUmG,KAAOrG,EAASjvL,QACtB3B,IAAK,OACLg4L,iBACI,IACA,KAEJp2L,KAAM,SAAUo1L,EAAUE,GACtBj2L,KAAK+1L,SAAWA,EAChB/1L,KAAKg3L,eAAef,IAExBjF,SAAU,SAAUoF,GAChB,GAAIryF,GAAOqyF,EAAcx4L,MAAM0L,WAAW,GAAK,IAAK2tL,EAAWj3L,KAAKk3L,aAAanzF,EACjF/jG,MAAK+1L,SAASkB,GAAUjG,YAE5Bj3L,GAAI,SAAU6D,EAAOuU,GACjB,GAAI4xF,GAAOnmG,EAAM0L,WAAW6I,EAC5B,OAAOnS,MAAKm2L,OAAOpyF,IAEvBoyF,OAAQ,SAAUpyF,GACd,MAAO,MAAOA,GAAQA,EAAO,KAEjCtlF,UAAW,SAAU23K,GAAV,GAICryF,GAHJn9F,EAAO5G,KAAMi3L,EAAWrwL,EAAKuwL,cAAcf,GAAgBL,EAAWnvL,EAAKmvL,SAAUn+L,EAASq/L,EAASr5L,MAAMhG,MAEjH,IADAw+L,EAAcjkL,OAASva,EACnBA,EAAS,EAET,KAAOq/L,EAAS9kL,MAAQva,EAAQq/L,EAAS9kL,QACrC4xF,EAAOkzF,EAASr5L,MAAM0L,WAAW2tL,EAAS9kL,OAC1C8kL,EAAStkJ,MAAQ/rC,EAAKswL,aAAanzF,GAC/BkzF,EAASL,eAAiBK,EAAStkJ,QACnCskJ,EAASL,cAAgBK,EAAStkJ,MAClCojJ,EAASkB,EAAStkJ,OAAO5nB,KAAKksK,IAElClB,EAAS5C,WAAW4C,EAASkB,EAAStkJ,OAAO0lB,MAC7C09H,EAAS5C,WAAW4C,EAASkB,EAAStkJ,OAAOy5F,SAASroC,QAGtDkzF,GAAStkJ,OAASskJ,EAASL,eAC3Bb,EAASkB,EAAStkJ,OAAO5nB,KAAKksK,GAElCrwL,EAAKwwL,WAAWH,GAChBlB,EAASsB,SAASJ,EAAUrwL,EAAK0wL,WAC7BlB,EAAcjkL,MAAQikL,EAAcx4L,MAAMhG,QAC1CgP,EAAKwwL,WAAWH,EAGxBb,GAAcO,KAAM,EACpBP,EAAczjJ,MAAQskJ,EAAStkJ,OAEnCykJ,WAAY,SAAUH,GAClB,GAAIrwL,GAAO5G,IACX4G,GAAKmvL,SAAS5C,WAAWvsL,EAAKmvL,SAASkB,EAAStkJ,OAAO0lB,MACvDzxD,EAAKmvL,SAAS5C,WAAWvsL,EAAKmvL,SAASkB,EAAStkJ,OAAO0lB,OAE3D8+H,cAAe,SAAUf,GACrB,GAAIxvL,GAAO5G,KAAMi3L,GACTr5L,MAAOgJ,EAAK2wL,QAAQnB,EAAcx4L,MAAOw4L,EAAcjkL,OACvDA,MAAO,EAIf,OAFA8kL,GAAStkJ,MAAQ/rC,EAAKswL,aAAaD,EAASr5L,MAAM0L,WAAW,IAC7D2tL,EAASL,cAAgBR,EAAcQ,eAAiBhwL,EAAK7H,IAAMk4L,EAAStkJ,MAAQyjJ,EAAcQ,cAC3FK,GAEXD,eAAgB,SAAUf,GAAV,GAGHn7L,GAFL8L,EAAO5G,IAEX,KADA4G,EAAK0wL,aACIx8L,EAAI,EAAGA,EAAIm7L,EAAOr+L,OAAQkD,IAC3BmI,EAAQgzL,EAAOn7L,GAAI8L,EAAKmwL,kBAAoB,GAC5CnwL,EAAK0wL,UAAUxvL,KAAKmuL,EAAOn7L,KAIvCo8L,aAAc,SAAUnzF,GAAV,GAEDjpG,GADL8L,EAAO5G,IACX,KAASlF,EAAI,EAAGA,EAAI8L,EAAK0wL,UAAU1/L,OAAQkD,IACvC,GAAI8L,EAAKmvL,SAASnvL,EAAK0wL,UAAUx8L,IAAIq7L,OAAOpyF,GACxC,MAAOn9F,GAAK0wL,UAAUx8L,IAIlCy8L,QAAS,SAAU35L,EAAOuU,GAEtB,IADA,GAAI4xF,GAAM/kG,EAAS,IACX+kG,EAAOnmG,EAAM0L,WAAW6I,OAAanS,KAAKm2L,OAAOpyF,IACrD/kG,GAAUiL,OAAOg4E,aAAa8hB,EAAO,IAEzC,OAAO/kG,MAGf6wL,EAAU2H,KAAO7H,EAASjvL,QACtB3B,IAAK,OACL04L,WAAY,IACZV,iBACI,IACA,KAEJW,QAAS,IACTC,MAAO,IACPh3L,KAAM,SAAUo1L,EAAUE,GACtBj2L,KAAK+1L,SAAWA,EAChB/1L,KAAKi2L,OAASA,GAElBjF,SAAU,WACNhxL,KAAK+1L,SAAS/1L,KAAKy3L,YAAYzG,YAEnCj3L,GAAI,WACA,MAAOkJ,GAAQjD,KAAKjB,IAAKiB,KAAKi2L,SAAW,GAE7Cx3K,UAAW,SAAU23K,GACjB,GAAyOzqL,GAASisL,EAAWC,EAAzPjxL,EAAO5G,KAAM+1L,EAAWnvL,EAAKmvL,SAAUn4L,EAAQw4L,EAAcx4L,MAAMzG,QAAQ,MAAO,IAAK2gM,EAAsB/7L,OAAO,IAAM6K,EAAK8wL,QAAU9wL,EAAK+wL,MAAQ,IAAK,KAAMxlL,EAAQikL,EAAcjkL,MAAO8kL,GAAatkJ,MAAO/rC,EAAK6wL,WAE3N,KADA1B,EAAS5C,WAAWvsL,EAAKwxD,SACZ,CAIT,GAHA6+H,EAAS9kL,MAAQ,EACjB0lL,EAAkBj6L,EAAMvG,OAAO8a,KAAWvL,EAAK8wL,QAAU,EAAI,EAC7D/rL,EAAUksL,EAAkB,EAAIjxL,EAAKmxL,eAAen6L,EAAOuU,GAASvL,EAAKoxL,YAAYp6L,EAAOuU,GACxFxG,EAAQu3E,GAAGtrF,OACXggM,EAAYzlL,EAAQ0lL,EAAkBlsL,EAAQkY,GAAGjsB,OAAS+T,EAAQu3E,GAAGtrF,WAGrE,IADAggM,EAAYh6L,EAAMM,QAAQ0I,EAAK8wL,QAASvlL,EAAQ,GAC5CylL,EAAY,EAAG,CACf,GAAIzlL,EAAQxG,EAAQu3E,GAAGxqF,IAAMiT,EAAQkY,GAAGjsB,OAASigM,EAAkBj6L,EAAMhG,OACrE,KAAUkR,OAAM,4DAEpB8uL,GAAYh6L,EAAMhG,OAM1B,GAHAq/L,EAASr5L,MAAQA,EAAMrG,UAAU4a,EAAOylL,GAAWzgM,QAAQ2gM,EAAiB,IAC5ElxL,EAAKqxL,SAAStsL,EAASsrL,EAASr5L,OAChCm4L,EAASsB,SAASJ,EAAUrwL,EAAKmwL,iBAC7Ba,GAAah6L,EAAMhG,OACnB,KAEJua,GAAQylL,EACJX,EAAStkJ,OAAS/rC,EAAK6wL,aACvB1B,EAASnvL,EAAK6wL,YAAY1sK,KAAKksK,GAC/BA,EAAStkJ,MAAQ/rC,EAAK6wL,YAErB9rL,EAAQu3E,GAAGtrF,QACZm+L,EAAS5C,WAAWvsL,EAAKwxD,OAGjCg+H,EAAcjkL,MAAQikL,EAAcx4L,MAAMhG,QAE9CqgM,SAAU,SAAUtsL,EAAS/N,GACzB,GAAImmG,GAAOnmG,EAAM0W,OAAO3I,EAAQkY,GAAGjsB,QAASsrF,EAAKv3E,EAAQu3E,EACzD,KAAKA,EAAGhkF,OAASgxL,EAAYh2L,KAAK6pG,GAC9B,KAAUj7F,OAAM,0BAA4B6C,EAAQkY,GAAK,0DAE7D,IAAe,gBAAXq/D,EAAGhkF,OAA2BixL,EAAkBj2L,KAAK6pG,GACrD,KAAUj7F,OAAM,0BAA4B6C,EAAQkY,GAAK,oEAE7D,IAAIq/D,EAAGtrF,QAAUsrF,EAAGtrF,SAAWmsG,EAAKnsG,OAChC,KAAUkR,OAAM,0BAA4B6C,EAAQkY,GAAK,YAAcq/D,EAAGtrF,OAAS,oBAEvF,IAAIsrF,EAAGlxE,KAAOkxE,EAAGlxE,IAAM+xF,EAAKnsG,OACxB,KAAUkR,OAAM,0BAA4B6C,EAAQkY,GAAK,qBAAuBq/D,EAAGlxE,IAAM,oBAE7F,IAAIkxE,EAAGxqF,KAAOwqF,EAAGxqF,IAAMqrG,EAAKnsG,OACxB,KAAUkR,OAAM,0BAA4B6C,EAAQkY,GAAK,oBAAsBq/D,EAAGxqF,IAAM,sBAGhGs/L,YAAa,SAAUp6L,EAAOuU,GAAjB,GACQ0R,GAAIq/D,EACZpoF,EADL8L,EAAO5G,IACX,KAASlF,EAAI,EAAGA,GAAK,EAAGA,IAGpB,GAFA+oB,EAAK6rK,EAAQ9xL,EAAOuU,EAAOrX,GAC3BooF,EAAKt8E,EAAKsxL,MAAMr0K,IAAOjd,EAAKsxL,MAAMr0K,EAAGtsB,UAAU,EAAGssB,EAAGjsB,OAAS,IAE1D,OACIisB,GAAIA,EACJq/D,GAAIA,EAIhBt8E,GAAKuxL,mBAAmBt0K,IAE5Bs0K,mBAAoB,SAAUt0K,GAC1B,KAAU/a,OAAM5Q,EAAM6Q,OAAO,mDAAsD8a,IAEvFk0K,eAAgB,SAAUn6L,EAAOuU,GAC7B,GAAIvL,GAAO5G,KAAMiP,EAAQrR,EAAMM,QAAQ0I,EAAK8wL,QAASvlL,GAAQxa,EAAMiG,EAAMM,QAAQ0I,EAAK+wL,MAAO1oL,GAAQ4U,EAAKjmB,EAAMrG,UAAU0X,EAAQ,EAAGtX,GAAMurF,EAAKt8E,EAAKsxL,MAAMr0K,IAAOjd,EAAKsxL,MAAMr0K,EAAGvP,OAAOuP,EAAGjsB,OAAS,GAInM,OAHKsrF,IACDt8E,EAAKuxL,mBAAmBt0K,IAGxBq/D,GAAIA,EACJr/D,GAAIA,IAGZq0K,MAAO,SAAUr0K,GAAV,GAKM/oB,GAIG05C,EACKud,EATbmxB,EAAKljF,KAAKo4L,uBAAwBC,EAAWn1G,EAAGm1G,QACpD,IAAIn1G,EAAGr/D,GACH,MAAOq/D,GAAGr/D,EAEd,KAAS/oB,EAAI,EAAGA,EAAIu9L,EAASzgM,OAAQkD,IAAK,CACtC,GAAIu9L,EAASv9L,GAAGw9L,KAAOr1L,EAAQ4gB,EAAIw0K,EAASv9L,GAAGw9L,MAAQ,EACnD,MAAOD,GAASv9L,GAAGoE,IAChB,IAAIm5L,EAASv9L,GAAG05C,OAEnB,IADIA,EAAS6jJ,EAASv9L,GAAG05C,OAChBud,EAAI,EAAGA,EAAIvd,EAAO58C,OAAQm6D,IAC/B,GAAIvd,EAAOud,GAAG,IAAMluC,GAAMA,GAAM2wB,EAAOud,GAAG,GACtC,MAAOsmI,GAASv9L,GAAGoE,OAMvCk5L,wBACIG,IACI7/L,IAAK,GACLwG,KAAM,gBAEVs5L,KAAS5gM,OAAQ,IACjB6gM,MACI//L,IAAK,EACLwG,KAAM;AAEVw5L,KACIhgM,IAAK,EACLwG,KAAM,gBAEVy5L,MACIjgM,IAAK,GACLwG,KAAM,gBAEV05L,KACI5mL,IAAK,EACLtZ,IAAK,GACLwG,KAAM,gBAEV25L,MACI7mL,IAAK,EACLtZ,IAAK,GACLwG,KAAM,gBAEV45L,KACI9mL,IAAK,GACLtZ,IAAK,GACLwG,KAAM,gBAEV65L,MACI/mL,IAAK,GACLtZ,IAAK,GACLwG,KAAM,gBAEVm5L,WAEQC,KACI,KACA,KACA,OACA,QAEJ9jJ,SAEQ,GACA,KAGA,IACA,MAGA,IACA,MAGA,IACA,MAGRt1C,MAAQtH,OAAQ,KAGhB0gM,KACI,MACA,MACA,MACA,MACA,MACA,MACA,MACA,OACA,OACA,OACA,QAEJ9jJ,cACAt1C,MACIxG,IAAK,GACLwG,KAAM,kBAIVo5L,KAAM,QACN9jJ,SACQ,IACA,MAERt1C,MAAQtH,OAAQ,MAGhB0gM,KACI,KACA,KACA,MACA,MACA,QAEJp5L,MACIxG,IAAK,GACLwG,KAAM,kBAIVo5L,KACI,KACA,OACA,OACA,QAEJp5L,MAAQtH,OAAQ,MAGhB0gM,KACI,KACA,KACA,QAEJp5L,MAAQtH,OAAQ,MAGhB0gM,KAAM,OACN9jJ,SACQ,IACA,MAERt1C,MAAQtH,OAAQ,KAGhB0gM,KACI,KACA,QAEJp5L,MAAQtH,OAAQ,KAGhB0gM,KACI,KACA,MAEJp5L,MACIxG,IAAK,EACLwG,KAAM,kBAIVo5L,KACI,MACA,OAEJp5L,MACIxG,IAAK,GACLwG,KAAM,kBAIVo5L,KACI,MACA,OAEJp5L,MACI8S,IAAK,EACLtZ,IAAK,GACLwG,KAAM,kBAIVo5L,KACI,MACA,OAEJp5L,MACI8S,IAAK,EACLtZ,IAAK,GACLwG,KAAM,kBAIVo5L,KACI,OACA,QAEJp5L,MAAQtH,OAAQ,OAI5BwgE,MAAO,MAEP03H,EAAcO,EAAS3vL,QACvBC,KAAM,SAAUP,GACZiwL,EAASpsL,GAAGtD,KAAKwH,KAAKnI,KAAMI,GAC5BJ,KAAKg5L,eAETA,YAAa,WAAA,GAEAl+L,GADL8L,EAAO5G,IACX,KAASlF,EAAI,EAAGA,EAAI8L,EAAKqvL,OAAOr+L,OAAQkD,IACpC8L,EAAKA,EAAKqvL,OAAOn7L,IAAM,GAAI+0L,GAAUjpL,EAAKqvL,OAAOn7L,IAAI8L,EAAMA,EAAKqvL,SAGxEzF,UAAW,SAAU5yL,EAAO3E,EAAOC,GAC/B,GAAI0N,GAAO5G,IACX4G,GAAKgI,WACLhI,EAAKhJ,MAAQA,EACbgJ,EAAK3N,MAAQA,EACb2N,EAAK1N,OAASA,EACd0N,EAAKqyL,SAAW,EAChBryL,EAAK0pH,WAAa,EAClB1pH,EAAKuL,MAAQ,EACbvL,EAAK+6B,SAAW,GAEpB8uJ,QAAS,WACL,GAAI7pL,GAAO5G,KAAMo2L,GACTx4L,MAAOgJ,EAAKhJ,MACZuU,MAAO,EACPwgC,MAAO,GAEW,KAAtB/rC,EAAKhJ,MAAMhG,SAGfw+L,EAAczjJ,MAAQyjJ,EAAcQ,cAAgBhwL,EAAKsyL,aAAa9C,EAAexvL,EAAKqvL,QAC1FrvL,EAAKoqL,SAASoF,GACdxvL,EAAKywL,SAASjB,EAAexvL,EAAKqvL,QAClCrvL,EAAK8pL,cACL9pL,EAAKoxG,UACLpxG,EAAKuuL,gBAETkC,SAAU,SAAUjB,EAAeH,GAE/B,IAFM,GAYM7xJ,GAXRx9B,EAAO5G,OACE,CAET,GADA4G,EAAKwvL,EAAczjJ,OAAOl0B,UAAU23K,GAChCA,EAAcjkL,OAASikL,EAAcx4L,MAAMhG,OAC3C,KAECw+L,GAAc1jI,SAKXtuB,EAAOgyJ,EAAczjJ,MACzByjJ,EAAczjJ,MAAQyjJ,EAAcQ,cACpCR,EAAcQ,cAAgBxyJ,EAC9BgyJ,EAAc1jI,SAAU,IAPxB0jI,EAAcQ,cAAgBR,EAAczjJ,MAC5CyjJ,EAAczjJ,MAAQ/rC,EAAKsyL,aAAa9C,EAAeH,GACvDrvL,EAAKwvL,EAAczjJ,OAAO5nB,KAAKqrK,MAS3CpF,SAAU,SAAUoF,GAChBp2L,KAAKo2L,EAAczjJ,OAAOq+I,SAASoF,GACnCp2L,KAAK2hC,SAAW,GAEpB+uJ,YAAa,WACT,GAAI9pL,GAAO5G,IACX4G,GAAK4uL,SAAW5uL,EAAKqyL,SAAW,IAChCryL,EAAKusL,WAAWvsL,EAAK4uL,WAEzBx9E,QAAS,WACLh4G,KAAKmzL,WAAWnzL,KAAKm5L,OAEzBhE,YAAa,WACT,GAAIvuL,GAAO5G,IACX4G,GAAKumH,SAAWvmH,EAAK3N,OAAS2N,EAAK0pH,WAAa1pH,EAAK0pL,kBAEzD6C,WAAY,SAAUpvF,GAAV,GACuDnmG,GACtD9C,EADL8L,EAAO5G,KAAM4O,EAAUhI,GAAAA,EAAKyqL,aAAattF,EAC7C,KAASjpG,EAAI,EAAGA,EAAI8T,EAAQhX,OAAQkD,IAChC8C,EAAQyU,SAASzD,EAAQvX,OAAOyD,GAAI,IACpC8L,EAAKgI,QAAQ9G,KAAKlK,GAClBgJ,EAAK0pH,YAAc1yH,CAEvBgJ,GAAKqyL,UAAYl1F,EAAOn9F,EAAK+6B,YAEjCu3J,aAAc,SAAU9C,EAAeH,GACnC,IAAK,GAAIn7L,GAAI,EAAGA,EAAIm7L,EAAOr+L,OAAQkD,IAC/B,GAAIkF,KAAKi2L,EAAOn7L,IAAIf,GAAGq8L,EAAcx4L,MAAOw4L,EAAcjkL,OACtD,MAAO8jL,GAAOn7L,EAGtBkF,MAAK2wL,sBAAsByF,EAAcx4L,MAAMvG,OAAO++L,EAAcjkL,SAExEk/K,cACI,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,SAEJ8H,KAAM,MAEVtI,EAAUuI,SAAWtJ,EAAYpvL,QAC7BwO,KAAM,aACN+mL,QAAS,OAEbpF,EAAUwI,SAAWvJ,EAAYpvL,QAC7BwO,KAAM,aACN+mL,QAAS,OAEbpF,EAAUyI,SAAWxJ,EAAYpvL,QAC7BwO,KAAM,aACN+mL,QAAS,OAEbpF,EAAU0I,QAAUzJ,EAAYpvL,QAC5BwO,KAAM,WACN+mL,QACI,IACA,IACA,IACA,UAGRpF,EAAU,WAAaf,EAAYpvL,QAC/BwO,KAAM,eACN+mL,QACI,OACA,IACA,OAGJlG,EAAUM,EAAS3vL,QACnB8vL,UAAW,SAAU5yL,EAAO3E,GACxB,GAAI2N,GAAO5G,IACX4G,GAAKgI,WACLhI,EAAKhJ,MAAQA,EACbgJ,EAAKwuL,eAAiB,EACtBxuL,EAAK3N,MAAQA,GAEjBk8L,YAAa,WACT,GAA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","file":"kendo.dataviz.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.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.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.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.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.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.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.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.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('drawing/util', ['kendo.core'], f);\n}(function () {\n (function ($) {\n function createPromise() {\n return $.Deferred();\n }\n function promiseAll(promises) {\n return $.when.apply($, promises);\n }\n kendo.drawing.util = kendo.drawing.util || {};\n kendo.deepExtend(kendo.drawing.util, {\n createPromise: createPromise,\n promiseAll: promiseAll\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.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('util/text-metrics', ['kendo.core'], f);\n}(function () {\n (function ($) {\n window.kendo.util = window.kendo.util || {};\n var LRUCache = kendo.Class.extend({\n init: function (size) {\n this._size = size;\n this._length = 0;\n this._map = {};\n },\n put: function (key, value) {\n var map = this._map;\n var entry = {\n key: key,\n value: value\n };\n map[key] = entry;\n if (!this._head) {\n this._head = this._tail = entry;\n } else {\n this._tail.newer = entry;\n entry.older = this._tail;\n this._tail = entry;\n }\n if (this._length >= this._size) {\n map[this._head.key] = null;\n this._head = this._head.newer;\n this._head.older = null;\n } else {\n this._length++;\n }\n },\n get: function (key) {\n var entry = this._map[key];\n if (entry) {\n if (entry === this._head && entry !== this._tail) {\n this._head = entry.newer;\n this._head.older = null;\n }\n if (entry !== this._tail) {\n if (entry.older) {\n entry.older.newer = entry.newer;\n entry.newer.older = entry.older;\n }\n entry.older = this._tail;\n entry.newer = null;\n this._tail.newer = entry;\n this._tail = entry;\n }\n return entry.value;\n }\n }\n });\n function objectKey(object) {\n var parts = [];\n for (var key in object) {\n parts.push(key + object[key]);\n }\n return parts.sort().join('');\n }\n function hashKey(str) {\n var hash = 2166136261;\n for (var i = 0; i < str.length; ++i) {\n hash += (hash << 1) + (hash << 4) + (hash << 7) + (hash << 8) + (hash << 24);\n hash ^= str.charCodeAt(i);\n }\n return hash >>> 0;\n }\n function zeroSize() {\n return {\n width: 0,\n height: 0,\n baseline: 0\n };\n }\n var DEFAULT_OPTIONS = { baselineMarkerSize: 1 };\n var defaultMeasureBox;\n if (typeof document !== 'undefined') {\n defaultMeasureBox = document.createElement('div');\n defaultMeasureBox.style.cssText = 'position: absolute !important; top: -4000px !important; width: auto !important; height: auto !important;' + 'padding: 0 !important; margin: 0 !important; border: 0 !important;' + 'line-height: normal !important; visibility: hidden !important; white-space: nowrap!important;';\n }\n var TextMetrics = kendo.Class.extend({\n init: function (options) {\n this._cache = new LRUCache(1000);\n this.options = $.extend({}, DEFAULT_OPTIONS, options);\n },\n measure: function (text, style, box) {\n if (!text) {\n return zeroSize();\n }\n var styleKey = objectKey(style);\n var cacheKey = hashKey(text + styleKey);\n var cachedResult = this._cache.get(cacheKey);\n if (cachedResult) {\n return cachedResult;\n }\n var size = zeroSize();\n var measureBox = box || defaultMeasureBox;\n var baselineMarker = this._baselineMarker().cloneNode(false);\n for (var key in style) {\n var value = style[key];\n if (typeof value !== 'undefined') {\n measureBox.style[key] = value;\n }\n }\n measureBox.textContent = text;\n measureBox.appendChild(baselineMarker);\n document.body.appendChild(measureBox);\n if (String(text).length) {\n size.width = measureBox.offsetWidth - this.options.baselineMarkerSize;\n size.height = measureBox.offsetHeight;\n size.baseline = baselineMarker.offsetTop + this.options.baselineMarkerSize;\n }\n if (size.width > 0 && size.height > 0) {\n this._cache.put(cacheKey, size);\n }\n measureBox.parentNode.removeChild(measureBox);\n return size;\n },\n _baselineMarker: function () {\n var marker = document.createElement('div');\n marker.style.cssText = 'display: inline-block; vertical-align: baseline;width: ' + this.options.baselineMarkerSize + 'px; height: ' + this.options.baselineMarkerSize + 'px;overflow: hidden;';\n return marker;\n }\n });\n TextMetrics.current = new TextMetrics();\n function measureText(text, style, measureBox) {\n return TextMetrics.current.measure(text, style, measureBox);\n }\n kendo.deepExtend(kendo.util, {\n LRUCache: LRUCache,\n TextMetrics: TextMetrics,\n measureText: measureText,\n objectKey: objectKey,\n hashKey: hashKey\n });\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('drawing/kendo-drawing', [\n 'drawing/util',\n 'kendo.color',\n 'util/text-metrics'\n ], f);\n}(function () {\n (function ($) {\n window.kendo = window.kendo || {};\n var kendoDrawing = kendo.drawing;\n var kendoDrawingUtil = kendoDrawing.util;\n var Class = kendo.Class;\n var kendoUtil = kendo.util;\n var support = kendo.support;\n var createPromise = kendoDrawingUtil.createPromise;\n var promiseAll = kendoDrawingUtil.promiseAll;\n var ObserversMixin = {\n extend: function (proto) {\n var this$1 = this;\n for (var method in this) {\n if (method !== 'extend') {\n proto[method] = this$1[method];\n }\n }\n },\n observers: function () {\n this._observers = this._observers || [];\n return this._observers;\n },\n addObserver: function (element) {\n if (!this._observers) {\n this._observers = [element];\n } else {\n this._observers.push(element);\n }\n return this;\n },\n removeObserver: function (element) {\n var observers = this.observers();\n var index = observers.indexOf(element);\n if (index !== -1) {\n observers.splice(index, 1);\n }\n return this;\n },\n trigger: function (methodName, event) {\n var observers = this._observers;\n if (observers && !this._suspended) {\n for (var idx = 0; idx < observers.length; idx++) {\n var observer = observers[idx];\n if (observer[methodName]) {\n observer[methodName](event);\n }\n }\n }\n return this;\n },\n optionsChange: function (e) {\n if (e === void 0) {\n e = {};\n }\n e.element = this;\n this.trigger('optionsChange', e);\n },\n geometryChange: function () {\n this.trigger('geometryChange', { element: this });\n },\n suspend: function () {\n this._suspended = (this._suspended || 0) + 1;\n return this;\n },\n resume: function () {\n this._suspended = Math.max((this._suspended || 0) - 1, 0);\n return this;\n },\n _observerField: function (field, value) {\n if (this[field]) {\n this[field].removeObserver(this);\n }\n this[field] = value;\n value.addObserver(this);\n }\n };\n function append(first, second) {\n first.push.apply(first, second);\n return first;\n }\n var literals = {\n 1: 'i',\n 10: 'x',\n 100: 'c',\n 2: 'ii',\n 20: 'xx',\n 200: 'cc',\n 3: 'iii',\n 30: 'xxx',\n 300: 'ccc',\n 4: 'iv',\n 40: 'xl',\n 400: 'cd',\n 5: 'v',\n 50: 'l',\n 500: 'd',\n 6: 'vi',\n 60: 'lx',\n 600: 'dc',\n 7: 'vii',\n 70: 'lxx',\n 700: 'dcc',\n 8: 'viii',\n 80: 'lxxx',\n 800: 'dccc',\n 9: 'ix',\n 90: 'xc',\n 900: 'cm',\n 1000: 'm'\n };\n function arabicToRoman(n) {\n var values = [\n 1000,\n 900,\n 800,\n 700,\n 600,\n 500,\n 400,\n 300,\n 200,\n 100,\n 90,\n 80,\n 70,\n 60,\n 50,\n 40,\n 30,\n 20,\n 10,\n 9,\n 8,\n 7,\n 6,\n 5,\n 4,\n 3,\n 2,\n 1\n ];\n var roman = '';\n while (n > 0) {\n if (n < values[0]) {\n values.shift();\n } else {\n roman += literals[values[0]];\n n -= values[0];\n }\n }\n return roman;\n }\n var UNDEFINED = 'undefined';\n function defined(value) {\n return typeof value !== UNDEFINED;\n }\n var defId = 1;\n function definitionId() {\n return 'kdef' + defId++;\n }\n var DEG_TO_RAD = Math.PI / 180;\n var MAX_NUM = Number.MAX_VALUE;\n var MIN_NUM = -Number.MAX_VALUE;\n function deg(radians) {\n return radians / DEG_TO_RAD;\n }\n var KEY_STR = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\n var fromCharCode = String.fromCharCode;\n function encodeUTF8(input) {\n var output = '';\n for (var i = 0; i < input.length; i++) {\n var c = input.charCodeAt(i);\n if (c < 128) {\n output += fromCharCode(c);\n } else if (c < 2048) {\n output += fromCharCode(192 | c >>> 6);\n output += fromCharCode(128 | c & 63);\n } else if (c < 65536) {\n output += fromCharCode(224 | c >>> 12);\n output += fromCharCode(128 | c >>> 6 & 63);\n output += fromCharCode(128 | c & 63);\n }\n }\n return output;\n }\n function encodeBase64(input) {\n var output = '';\n var i = 0;\n var utfInput = encodeUTF8(input);\n while (i < utfInput.length) {\n var chr1 = utfInput.charCodeAt(i++);\n var chr2 = utfInput.charCodeAt(i++);\n var chr3 = utfInput.charCodeAt(i++);\n var enc1 = chr1 >> 2;\n var enc2 = (chr1 & 3) << 4 | chr2 >> 4;\n var enc3 = (chr2 & 15) << 2 | chr3 >> 6;\n var enc4 = chr3 & 63;\n if (isNaN(chr2)) {\n enc3 = enc4 = 64;\n } else if (isNaN(chr3)) {\n enc4 = 64;\n }\n output = output + KEY_STR.charAt(enc1) + KEY_STR.charAt(enc2) + KEY_STR.charAt(enc3) + KEY_STR.charAt(enc4);\n }\n return output;\n }\n function eventCoordinates(e) {\n if (defined((e.x || {}).location)) {\n return {\n x: e.x.location,\n y: e.y.location\n };\n }\n return {\n x: e.pageX || e.clientX || 0,\n y: e.pageY || e.clientY || 0\n };\n }\n function eventElement(e) {\n if (e === void 0) {\n e = {};\n }\n return e.touch ? e.touch.initialTouch : e.target;\n }\n function isTransparent(color) {\n return color === '' || color === null || color === 'none' || color === 'transparent' || !defined(color);\n }\n function last(array) {\n if (array) {\n return array[array.length - 1];\n }\n }\n function limitValue(value, min, max) {\n return Math.max(Math.min(value, max), min);\n }\n function mergeSort(a, cmp) {\n if (a.length < 2) {\n return a.slice();\n }\n function merge(a, b) {\n var r = [], ai = 0, bi = 0, i = 0;\n while (ai < a.length && bi < b.length) {\n if (cmp(a[ai], b[bi]) <= 0) {\n r[i++] = a[ai++];\n } else {\n r[i++] = b[bi++];\n }\n }\n if (ai < a.length) {\n r.push.apply(r, a.slice(ai));\n }\n if (bi < b.length) {\n r.push.apply(r, b.slice(bi));\n }\n return r;\n }\n return function sort(a) {\n if (a.length <= 1) {\n return a;\n }\n var m = Math.floor(a.length / 2);\n var left = a.slice(0, m);\n var right = a.slice(m);\n left = sort(left);\n right = sort(right);\n return merge(left, right);\n }(a);\n }\n function rad(degrees) {\n return degrees * DEG_TO_RAD;\n }\n function pow(p) {\n if (p) {\n return Math.pow(10, p);\n }\n return 1;\n }\n function round(value, precision) {\n var power = pow(precision);\n return Math.round(value * power) / power;\n }\n function valueOrDefault(value, defaultValue) {\n return defined(value) ? value : defaultValue;\n }\n function bindEvents(element, events) {\n for (var eventName in events) {\n var eventNames = eventName.trim().split(' ');\n for (var idx = 0; idx < eventNames.length; idx++) {\n element.addEventListener(eventNames[idx], events[eventName], false);\n }\n }\n }\n function elementOffset(element) {\n var box = element.getBoundingClientRect();\n var documentElement = document.documentElement;\n return {\n top: box.top + (window.pageYOffset || documentElement.scrollTop) - (documentElement.clientTop || 0),\n left: box.left + (window.pageXOffset || documentElement.scrollLeft) - (documentElement.clientLeft || 0)\n };\n }\n function elementStyles(element, styles) {\n var result = {};\n var style = window.getComputedStyle(element);\n var stylesArray = Array.isArray(styles) ? styles : [styles];\n for (var idx = 0; idx < stylesArray.length; idx++) {\n var field = stylesArray[idx];\n result[field] = style[field];\n }\n return result;\n }\n function getPixels(value) {\n if (isNaN(value)) {\n return value;\n }\n return value + 'px';\n }\n function elementSize(element, size) {\n if (size) {\n var width = size.width;\n var height = size.height;\n if (defined(width)) {\n element.style.width = getPixels(width);\n }\n if (defined(height)) {\n element.style.height = getPixels(height);\n }\n } else {\n var size$1 = elementStyles(element, [\n 'width',\n 'height'\n ]);\n return {\n width: parseInt(size$1.width, 10),\n height: parseInt(size$1.height, 10)\n };\n }\n }\n function unbindEvents(element, events) {\n if (events === void 0) {\n events = {};\n }\n for (var name in events) {\n var eventNames = name.trim().split(' ');\n for (var idx = 0; idx < eventNames.length; idx++) {\n element.removeEventListener(eventNames[idx], events[name], false);\n }\n }\n }\n var util = {\n append: append,\n arabicToRoman: arabicToRoman,\n createPromise: createPromise,\n defined: defined,\n definitionId: definitionId,\n deg: deg,\n encodeBase64: encodeBase64,\n eventCoordinates: eventCoordinates,\n eventElement: eventElement,\n isTransparent: isTransparent,\n last: last,\n limitValue: limitValue,\n mergeSort: mergeSort,\n promiseAll: promiseAll,\n rad: rad,\n round: round,\n valueOrDefault: valueOrDefault,\n bindEvents: bindEvents,\n elementOffset: elementOffset,\n elementSize: elementSize,\n elementStyles: elementStyles,\n unbindEvents: unbindEvents,\n DEG_TO_RAD: DEG_TO_RAD,\n MAX_NUM: MAX_NUM,\n MIN_NUM: MIN_NUM\n };\n var toString = {}.toString;\n var OptionsStore = Class.extend({\n init: function (options, prefix) {\n var this$1 = this;\n if (prefix === void 0) {\n prefix = '';\n }\n this.prefix = prefix;\n for (var field in options) {\n var member = options[field];\n member = this$1._wrap(member, field);\n this$1[field] = member;\n }\n },\n get: function (field) {\n var parts = field.split('.');\n var result = this;\n while (parts.length && result) {\n var part = parts.shift();\n result = result[part];\n }\n return result;\n },\n set: function (field, value) {\n var current = this.get(field);\n if (current !== value) {\n this._set(field, this._wrap(value, field));\n this.optionsChange({\n field: this.prefix + field,\n value: value\n });\n }\n },\n _set: function (field, value) {\n var this$1 = this;\n var composite = field.indexOf('.') >= 0;\n var parentObj = this;\n var fieldName = field;\n if (composite) {\n var parts = fieldName.split('.');\n var prefix = this.prefix;\n while (parts.length > 1) {\n fieldName = parts.shift();\n prefix += fieldName + '.';\n var obj = parentObj[fieldName];\n if (!obj) {\n obj = new OptionsStore({}, prefix);\n obj.addObserver(this$1);\n parentObj[fieldName] = obj;\n }\n parentObj = obj;\n }\n fieldName = parts[0];\n }\n parentObj._clear(fieldName);\n parentObj[fieldName] = value;\n },\n _clear: function (field) {\n var current = this[field];\n if (current && current.removeObserver) {\n current.removeObserver(this);\n }\n },\n _wrap: function (object, field) {\n var type = toString.call(object);\n var wrapped = object;\n if (wrapped !== null && defined(wrapped) && type === '[object Object]') {\n if (!(object instanceof OptionsStore) && !(object instanceof Class)) {\n wrapped = new OptionsStore(wrapped, this.prefix + field + '.');\n }\n wrapped.addObserver(this);\n }\n return wrapped;\n }\n });\n ObserversMixin.extend(OptionsStore.prototype);\n function setAccessor(field) {\n return function (value) {\n if (this[field] !== value) {\n this[field] = value;\n this.geometryChange();\n }\n return this;\n };\n }\n function getAccessor(field) {\n return function () {\n return this[field];\n };\n }\n function defineAccessors(fn, fields) {\n for (var i = 0; i < fields.length; i++) {\n var name = fields[i];\n var capitalized = name.charAt(0).toUpperCase() + name.substring(1, name.length);\n fn['set' + capitalized] = setAccessor(name);\n fn['get' + capitalized] = getAccessor(name);\n }\n }\n var Matrix = Class.extend({\n init: function (a, b, c, d, e, f) {\n if (a === void 0) {\n a = 0;\n }\n if (b === void 0) {\n b = 0;\n }\n if (c === void 0) {\n c = 0;\n }\n if (d === void 0) {\n d = 0;\n }\n if (e === void 0) {\n e = 0;\n }\n if (f === void 0) {\n f = 0;\n }\n this.a = a;\n this.b = b;\n this.c = c;\n this.d = d;\n this.e = e;\n this.f = f;\n },\n multiplyCopy: function (matrix) {\n return new Matrix(this.a * matrix.a + this.c * matrix.b, this.b * matrix.a + this.d * matrix.b, this.a * matrix.c + this.c * matrix.d, this.b * matrix.c + this.d * matrix.d, this.a * matrix.e + this.c * matrix.f + this.e, this.b * matrix.e + this.d * matrix.f + this.f);\n },\n invert: function () {\n var ref = this;\n var a = ref.a;\n var b = ref.b;\n var d = ref.c;\n var e = ref.d;\n var g = ref.e;\n var h = ref.f;\n var det = a * e - b * d;\n if (det === 0) {\n return null;\n }\n return new Matrix(e / det, -b / det, -d / det, a / det, (d * h - e * g) / det, (b * g - a * h) / det);\n },\n clone: function () {\n return new Matrix(this.a, this.b, this.c, this.d, this.e, this.f);\n },\n equals: function (other) {\n if (!other) {\n return false;\n }\n return this.a === other.a && this.b === other.b && this.c === other.c && this.d === other.d && this.e === other.e && this.f === other.f;\n },\n round: function (precision) {\n this.a = round(this.a, precision);\n this.b = round(this.b, precision);\n this.c = round(this.c, precision);\n this.d = round(this.d, precision);\n this.e = round(this.e, precision);\n this.f = round(this.f, precision);\n return this;\n },\n toArray: function (precision) {\n var result = [\n this.a,\n this.b,\n this.c,\n this.d,\n this.e,\n this.f\n ];\n if (defined(precision)) {\n for (var i = 0; i < result.length; i++) {\n result[i] = round(result[i], precision);\n }\n }\n return result;\n },\n toString: function (precision, separator) {\n if (separator === void 0) {\n separator = ',';\n }\n return this.toArray(precision).join(separator);\n }\n });\n Matrix.translate = function (x, y) {\n return new Matrix(1, 0, 0, 1, x, y);\n };\n Matrix.unit = function () {\n return new Matrix(1, 0, 0, 1, 0, 0);\n };\n Matrix.rotate = function (angle, x, y) {\n var matrix = new Matrix();\n matrix.a = Math.cos(rad(angle));\n matrix.b = Math.sin(rad(angle));\n matrix.c = -matrix.b;\n matrix.d = matrix.a;\n matrix.e = x - x * matrix.a + y * matrix.b || 0;\n matrix.f = y - y * matrix.a - x * matrix.b || 0;\n return matrix;\n };\n Matrix.scale = function (scaleX, scaleY) {\n return new Matrix(scaleX, 0, 0, scaleY, 0, 0);\n };\n Matrix.IDENTITY = Matrix.unit();\n function toMatrix(transformation) {\n if (transformation && typeof transformation.matrix === 'function') {\n return transformation.matrix();\n }\n return transformation;\n }\n var Point = Class.extend({\n init: function (x, y) {\n this.x = x || 0;\n this.y = y || 0;\n },\n equals: function (other) {\n return other && other.x === this.x && other.y === this.y;\n },\n clone: function () {\n return new Point(this.x, this.y);\n },\n rotate: function (angle, origin) {\n var originPoint = Point.create(origin) || Point.ZERO;\n return this.transform(Matrix.rotate(angle, originPoint.x, originPoint.y));\n },\n translate: function (x, y) {\n this.x += x;\n this.y += y;\n this.geometryChange();\n return this;\n },\n translateWith: function (point) {\n return this.translate(point.x, point.y);\n },\n move: function (x, y) {\n this.x = this.y = 0;\n return this.translate(x, y);\n },\n scale: function (scaleX, scaleY) {\n if (scaleY === void 0) {\n scaleY = scaleX;\n }\n this.x *= scaleX;\n this.y *= scaleY;\n this.geometryChange();\n return this;\n },\n scaleCopy: function (scaleX, scaleY) {\n return this.clone().scale(scaleX, scaleY);\n },\n transform: function (transformation) {\n var matrix = toMatrix(transformation);\n var ref = this;\n var x = ref.x;\n var y = ref.y;\n this.x = matrix.a * x + matrix.c * y + matrix.e;\n this.y = matrix.b * x + matrix.d * y + matrix.f;\n this.geometryChange();\n return this;\n },\n transformCopy: function (transformation) {\n var point = this.clone();\n if (transformation) {\n point.transform(transformation);\n }\n return point;\n },\n distanceTo: function (point) {\n var dx = this.x - point.x;\n var dy = this.y - point.y;\n return Math.sqrt(dx * dx + dy * dy);\n },\n round: function (digits) {\n this.x = round(this.x, digits);\n this.y = round(this.y, digits);\n this.geometryChange();\n return this;\n },\n toArray: function (digits) {\n var doRound = defined(digits);\n var x = doRound ? round(this.x, digits) : this.x;\n var y = doRound ? round(this.y, digits) : this.y;\n return [\n x,\n y\n ];\n },\n toString: function (digits, separator) {\n if (separator === void 0) {\n separator = ' ';\n }\n var ref = this;\n var x = ref.x;\n var y = ref.y;\n if (defined(digits)) {\n x = round(x, digits);\n y = round(y, digits);\n }\n return x + separator + y;\n }\n });\n Point.create = function (arg0, arg1) {\n if (defined(arg0)) {\n if (arg0 instanceof Point) {\n return arg0;\n } else if (arguments.length === 1 && arg0.length === 2) {\n return new Point(arg0[0], arg0[1]);\n }\n return new Point(arg0, arg1);\n }\n };\n Point.min = function () {\n var arguments$1 = arguments;\n var minX = MAX_NUM;\n var minY = MAX_NUM;\n for (var i = 0; i < arguments.length; i++) {\n var point = arguments$1[i];\n minX = Math.min(point.x, minX);\n minY = Math.min(point.y, minY);\n }\n return new Point(minX, minY);\n };\n Point.max = function () {\n var arguments$1 = arguments;\n var maxX = MIN_NUM;\n var maxY = MIN_NUM;\n for (var i = 0; i < arguments.length; i++) {\n var point = arguments$1[i];\n maxX = Math.max(point.x, maxX);\n maxY = Math.max(point.y, maxY);\n }\n return new Point(maxX, maxY);\n };\n Point.minPoint = function () {\n return new Point(MIN_NUM, MIN_NUM);\n };\n Point.maxPoint = function () {\n return new Point(MAX_NUM, MAX_NUM);\n };\n if (Object.defineProperties) {\n Object.defineProperties(Point, {\n ZERO: {\n get: function () {\n return new Point(0, 0);\n }\n }\n });\n }\n defineAccessors(Point.prototype, [\n 'x',\n 'y'\n ]);\n ObserversMixin.extend(Point.prototype);\n var Size = Class.extend({\n init: function (width, height) {\n this.width = width || 0;\n this.height = height || 0;\n },\n equals: function (other) {\n return other && other.width === this.width && other.height === this.height;\n },\n clone: function () {\n return new Size(this.width, this.height);\n },\n toArray: function (digits) {\n var doRound = defined(digits);\n var width = doRound ? round(this.width, digits) : this.width;\n var height = doRound ? round(this.height, digits) : this.height;\n return [\n width,\n height\n ];\n }\n });\n Size.create = function (arg0, arg1) {\n if (defined(arg0)) {\n if (arg0 instanceof Size) {\n return arg0;\n } else if (arguments.length === 1 && arg0.length === 2) {\n return new Size(arg0[0], arg0[1]);\n }\n return new Size(arg0, arg1);\n }\n };\n if (Object.defineProperties) {\n Object.defineProperties(Size, {\n ZERO: {\n get: function () {\n return new Size(0, 0);\n }\n }\n });\n }\n defineAccessors(Size.prototype, [\n 'width',\n 'height'\n ]);\n ObserversMixin.extend(Size.prototype);\n var Rect = Class.extend({\n init: function (origin, size) {\n if (origin === void 0) {\n origin = new Point();\n }\n if (size === void 0) {\n size = new Size();\n }\n this.setOrigin(origin);\n this.setSize(size);\n },\n clone: function () {\n return new Rect(this.origin.clone(), this.size.clone());\n },\n equals: function (other) {\n return other && other.origin.equals(this.origin) && other.size.equals(this.size);\n },\n setOrigin: function (value) {\n this._observerField('origin', Point.create(value));\n this.geometryChange();\n return this;\n },\n getOrigin: function () {\n return this.origin;\n },\n setSize: function (value) {\n this._observerField('size', Size.create(value));\n this.geometryChange();\n return this;\n },\n getSize: function () {\n return this.size;\n },\n width: function () {\n return this.size.width;\n },\n height: function () {\n return this.size.height;\n },\n topLeft: function () {\n return this.origin.clone();\n },\n bottomRight: function () {\n return this.origin.clone().translate(this.width(), this.height());\n },\n topRight: function () {\n return this.origin.clone().translate(this.width(), 0);\n },\n bottomLeft: function () {\n return this.origin.clone().translate(0, this.height());\n },\n center: function () {\n return this.origin.clone().translate(this.width() / 2, this.height() / 2);\n },\n bbox: function (matrix) {\n var tl = this.topLeft().transformCopy(matrix);\n var tr = this.topRight().transformCopy(matrix);\n var br = this.bottomRight().transformCopy(matrix);\n var bl = this.bottomLeft().transformCopy(matrix);\n return Rect.fromPoints(tl, tr, br, bl);\n },\n transformCopy: function (m) {\n return Rect.fromPoints(this.topLeft().transform(m), this.bottomRight().transform(m));\n },\n expand: function (x, y) {\n if (y === void 0) {\n y = x;\n }\n this.size.width += 2 * x;\n this.size.height += 2 * y;\n this.origin.translate(-x, -y);\n return this;\n },\n expandCopy: function (x, y) {\n return this.clone().expand(x, y);\n },\n containsPoint: function (point) {\n var origin = this.origin;\n var bottomRight = this.bottomRight();\n return !(point.x < origin.x || point.y < origin.y || bottomRight.x < point.x || bottomRight.y < point.y);\n },\n _isOnPath: function (point, width) {\n var rectOuter = this.expandCopy(width, width);\n var rectInner = this.expandCopy(-width, -width);\n return rectOuter.containsPoint(point) && !rectInner.containsPoint(point);\n }\n });\n Rect.fromPoints = function () {\n var topLeft = Point.min.apply(null, arguments);\n var bottomRight = Point.max.apply(null, arguments);\n var size = new Size(bottomRight.x - topLeft.x, bottomRight.y - topLeft.y);\n return new Rect(topLeft, size);\n };\n Rect.union = function (a, b) {\n return Rect.fromPoints(Point.min(a.topLeft(), b.topLeft()), Point.max(a.bottomRight(), b.bottomRight()));\n };\n Rect.intersect = function (a, b) {\n var rect1 = {\n left: a.topLeft().x,\n top: a.topLeft().y,\n right: a.bottomRight().x,\n bottom: a.bottomRight().y\n };\n var rect2 = {\n left: b.topLeft().x,\n top: b.topLeft().y,\n right: b.bottomRight().x,\n bottom: b.bottomRight().y\n };\n if (rect1.left <= rect2.right && rect2.left <= rect1.right && rect1.top <= rect2.bottom && rect2.top <= rect1.bottom) {\n return Rect.fromPoints(new Point(Math.max(rect1.left, rect2.left), Math.max(rect1.top, rect2.top)), new Point(Math.min(rect1.right, rect2.right), Math.min(rect1.bottom, rect2.bottom)));\n }\n };\n ObserversMixin.extend(Rect.prototype);\n var Transformation = Class.extend({\n init: function (matrix) {\n if (matrix === void 0) {\n matrix = Matrix.unit();\n }\n this._matrix = matrix;\n },\n clone: function () {\n return new Transformation(this._matrix.clone());\n },\n equals: function (other) {\n return other && other._matrix.equals(this._matrix);\n },\n translate: function (x, y) {\n this._matrix = this._matrix.multiplyCopy(Matrix.translate(x, y));\n this._optionsChange();\n return this;\n },\n scale: function (scaleX, scaleY, origin) {\n if (scaleY === void 0) {\n scaleY = scaleX;\n }\n if (origin === void 0) {\n origin = null;\n }\n var originPoint = origin;\n if (originPoint) {\n originPoint = Point.create(originPoint);\n this._matrix = this._matrix.multiplyCopy(Matrix.translate(originPoint.x, originPoint.y));\n }\n this._matrix = this._matrix.multiplyCopy(Matrix.scale(scaleX, scaleY));\n if (originPoint) {\n this._matrix = this._matrix.multiplyCopy(Matrix.translate(-originPoint.x, -originPoint.y));\n }\n this._optionsChange();\n return this;\n },\n rotate: function (angle, origin) {\n var originPoint = Point.create(origin) || Point.ZERO;\n this._matrix = this._matrix.multiplyCopy(Matrix.rotate(angle, originPoint.x, originPoint.y));\n this._optionsChange();\n return this;\n },\n multiply: function (transformation) {\n var matrix = toMatrix(transformation);\n this._matrix = this._matrix.multiplyCopy(matrix);\n this._optionsChange();\n return this;\n },\n matrix: function (value) {\n if (value) {\n this._matrix = value;\n this._optionsChange();\n return this;\n }\n return this._matrix;\n },\n _optionsChange: function () {\n this.optionsChange({\n field: 'transform',\n value: this\n });\n }\n });\n ObserversMixin.extend(Transformation.prototype);\n function transform(matrix) {\n if (matrix === null) {\n return null;\n }\n if (matrix instanceof Transformation) {\n return matrix;\n }\n return new Transformation(matrix);\n }\n var Element$1 = Class.extend({\n init: function (options) {\n this._initOptions(options);\n },\n _initOptions: function (options) {\n if (options === void 0) {\n options = {};\n }\n var clip = options.clip;\n var transform$$1 = options.transform;\n if (transform$$1) {\n options.transform = transform(transform$$1);\n }\n if (clip && !clip.id) {\n clip.id = definitionId();\n }\n this.options = new OptionsStore(options);\n this.options.addObserver(this);\n },\n transform: function (value) {\n if (defined(value)) {\n this.options.set('transform', transform(value));\n } else {\n return this.options.get('transform');\n }\n },\n parentTransform: function () {\n var element = this;\n var parentMatrix;\n while (element.parent) {\n element = element.parent;\n var transformation = element.transform();\n if (transformation) {\n parentMatrix = transformation.matrix().multiplyCopy(parentMatrix || Matrix.unit());\n }\n }\n if (parentMatrix) {\n return transform(parentMatrix);\n }\n },\n currentTransform: function (parentTransform) {\n if (parentTransform === void 0) {\n parentTransform = this.parentTransform();\n }\n var elementTransform = this.transform();\n var elementMatrix = toMatrix(elementTransform);\n var parentMatrix = toMatrix(parentTransform);\n var combinedMatrix;\n if (elementMatrix && parentMatrix) {\n combinedMatrix = parentMatrix.multiplyCopy(elementMatrix);\n } else {\n combinedMatrix = elementMatrix || parentMatrix;\n }\n if (combinedMatrix) {\n return transform(combinedMatrix);\n }\n },\n visible: function (value) {\n if (defined(value)) {\n this.options.set('visible', value);\n return this;\n }\n return this.options.get('visible') !== false;\n },\n clip: function (value) {\n var options = this.options;\n if (defined(value)) {\n if (value && !value.id) {\n value.id = definitionId();\n }\n options.set('clip', value);\n return this;\n }\n return options.get('clip');\n },\n opacity: function (value) {\n if (defined(value)) {\n this.options.set('opacity', value);\n return this;\n }\n return valueOrDefault(this.options.get('opacity'), 1);\n },\n clippedBBox: function (transformation) {\n var bbox = this._clippedBBox(transformation);\n if (bbox) {\n var clip = this.clip();\n return clip ? Rect.intersect(bbox, clip.bbox(transformation)) : bbox;\n }\n },\n containsPoint: function (point, parentTransform) {\n if (this.visible()) {\n var transform$$1 = this.currentTransform(parentTransform);\n var transformedPoint = point;\n if (transform$$1) {\n transformedPoint = point.transformCopy(transform$$1.matrix().invert());\n }\n return this._hasFill() && this._containsPoint(transformedPoint) || this._isOnPath && this._hasStroke() && this._isOnPath(transformedPoint);\n }\n return false;\n },\n _hasFill: function () {\n var fill = this.options.fill;\n return fill && !isTransparent(fill.color);\n },\n _hasStroke: function () {\n var stroke = this.options.stroke;\n return stroke && stroke.width > 0 && !isTransparent(stroke.color);\n },\n _clippedBBox: function (transformation) {\n return this.bbox(transformation);\n }\n });\n Element$1.prototype.nodeType = 'Element';\n ObserversMixin.extend(Element$1.prototype);\n function ellipseExtremeAngles(center, rx, ry, matrix) {\n var extremeX = 0;\n var extremeY = 0;\n if (matrix) {\n extremeX = Math.atan2(matrix.c * ry, matrix.a * rx);\n if (matrix.b !== 0) {\n extremeY = Math.atan2(matrix.d * ry, matrix.b * rx);\n }\n }\n return {\n x: extremeX,\n y: extremeY\n };\n }\n var PI_DIV_2 = Math.PI / 2;\n var Circle$2 = Class.extend({\n init: function (center, radius) {\n if (center === void 0) {\n center = new Point();\n }\n if (radius === void 0) {\n radius = 0;\n }\n this.setCenter(center);\n this.setRadius(radius);\n },\n setCenter: function (value) {\n this._observerField('center', Point.create(value));\n this.geometryChange();\n return this;\n },\n getCenter: function () {\n return this.center;\n },\n equals: function (other) {\n return other && other.center.equals(this.center) && other.radius === this.radius;\n },\n clone: function () {\n return new Circle$2(this.center.clone(), this.radius);\n },\n pointAt: function (angle) {\n return this._pointAt(rad(angle));\n },\n bbox: function (matrix) {\n var this$1 = this;\n var extremeAngles = ellipseExtremeAngles(this.center, this.radius, this.radius, matrix);\n var minPoint = Point.maxPoint();\n var maxPoint = Point.minPoint();\n for (var i = 0; i < 4; i++) {\n var currentPointX = this$1._pointAt(extremeAngles.x + i * PI_DIV_2).transformCopy(matrix);\n var currentPointY = this$1._pointAt(extremeAngles.y + i * PI_DIV_2).transformCopy(matrix);\n var currentPoint = new Point(currentPointX.x, currentPointY.y);\n minPoint = Point.min(minPoint, currentPoint);\n maxPoint = Point.max(maxPoint, currentPoint);\n }\n return Rect.fromPoints(minPoint, maxPoint);\n },\n _pointAt: function (angle) {\n var ref = this;\n var center = ref.center;\n var radius = ref.radius;\n return new Point(center.x + radius * Math.cos(angle), center.y + radius * Math.sin(angle));\n },\n containsPoint: function (point) {\n var ref = this;\n var center = ref.center;\n var radius = ref.radius;\n var inCircle = Math.pow(point.x - center.x, 2) + Math.pow(point.y - center.y, 2) <= Math.pow(radius, 2);\n return inCircle;\n },\n _isOnPath: function (point, width) {\n var ref = this;\n var center = ref.center;\n var radius = ref.radius;\n var pointDistance = center.distanceTo(point);\n return radius - width <= pointDistance && pointDistance <= radius + width;\n }\n });\n defineAccessors(Circle$2.prototype, ['radius']);\n ObserversMixin.extend(Circle$2.prototype);\n var GRADIENT = 'Gradient';\n var Paintable = {\n extend: function (proto) {\n proto.fill = this.fill;\n proto.stroke = this.stroke;\n },\n fill: function (color, opacity) {\n var options = this.options;\n if (defined(color)) {\n if (color && color.nodeType !== GRADIENT) {\n var newFill = { color: color };\n if (defined(opacity)) {\n newFill.opacity = opacity;\n }\n options.set('fill', newFill);\n } else {\n options.set('fill', color);\n }\n return this;\n }\n return options.get('fill');\n },\n stroke: function (color, width, opacity) {\n if (defined(color)) {\n this.options.set('stroke.color', color);\n if (defined(width)) {\n this.options.set('stroke.width', width);\n }\n if (defined(opacity)) {\n this.options.set('stroke.opacity', opacity);\n }\n return this;\n }\n return this.options.get('stroke');\n }\n };\n var IDENTITY_MATRIX_HASH = Matrix.IDENTITY.toString();\n var Measurable = {\n extend: function (proto) {\n proto.bbox = this.bbox;\n proto.geometryChange = this.geometryChange;\n },\n bbox: function (transformation) {\n var combinedMatrix = toMatrix(this.currentTransform(transformation));\n var matrixHash = combinedMatrix ? combinedMatrix.toString() : IDENTITY_MATRIX_HASH;\n var bbox;\n if (this._bboxCache && this._matrixHash === matrixHash) {\n bbox = this._bboxCache.clone();\n } else {\n bbox = this._bbox(combinedMatrix);\n this._bboxCache = bbox ? bbox.clone() : null;\n this._matrixHash = matrixHash;\n }\n var strokeWidth = this.options.get('stroke.width');\n if (strokeWidth && bbox) {\n bbox.expand(strokeWidth / 2);\n }\n return bbox;\n },\n geometryChange: function () {\n delete this._bboxCache;\n this.trigger('geometryChange', { element: this });\n }\n };\n function geometryAccessor(name) {\n var fieldName = '_' + name;\n return function (value) {\n if (defined(value)) {\n this._observerField(fieldName, value);\n this.geometryChange();\n return this;\n }\n return this[fieldName];\n };\n }\n function defineGeometryAccessors(fn, names) {\n for (var i = 0; i < names.length; i++) {\n fn[names[i]] = geometryAccessor(names[i]);\n }\n }\n var DEFAULT_STROKE = '#000';\n var Circle = Element$1.extend({\n init: function (geometry, options) {\n if (geometry === void 0) {\n geometry = new Circle$2();\n }\n if (options === void 0) {\n options = {};\n }\n Element$1.fn.init.call(this, options);\n this.geometry(geometry);\n if (!defined(this.options.stroke)) {\n this.stroke(DEFAULT_STROKE);\n }\n },\n rawBBox: function () {\n return this._geometry.bbox();\n },\n _bbox: function (matrix) {\n return this._geometry.bbox(matrix);\n },\n _containsPoint: function (point) {\n return this.geometry().containsPoint(point);\n },\n _isOnPath: function (point) {\n return this.geometry()._isOnPath(point, this.options.stroke.width / 2);\n }\n });\n Circle.prototype.nodeType = 'Circle';\n Paintable.extend(Circle.prototype);\n Measurable.extend(Circle.prototype);\n defineGeometryAccessors(Circle.prototype, ['geometry']);\n var PRECISION = 10;\n function close(a, b, tolerance) {\n if (tolerance === void 0) {\n tolerance = PRECISION;\n }\n return round(Math.abs(a - b), tolerance) === 0;\n }\n function closeOrLess(a, b, tolerance) {\n return a < b || close(a, b, tolerance);\n }\n function lineIntersection(p0, p1, p2, p3) {\n var s1x = p1.x - p0.x;\n var s2x = p3.x - p2.x;\n var s1y = p1.y - p0.y;\n var s2y = p3.y - p2.y;\n var nx = p0.x - p2.x;\n var ny = p0.y - p2.y;\n var d = s1x * s2y - s2x * s1y;\n var s = (s1x * ny - s1y * nx) / d;\n var t = (s2x * ny - s2y * nx) / d;\n if (s >= 0 && s <= 1 && t >= 0 && t <= 1) {\n return new Point(p0.x + t * s1x, p0.y + t * s1y);\n }\n }\n var MAX_INTERVAL = 45;\n var pow$1 = Math.pow;\n var Arc$2 = Class.extend({\n init: function (center, options) {\n if (center === void 0) {\n center = new Point();\n }\n if (options === void 0) {\n options = {};\n }\n this.setCenter(center);\n this.radiusX = options.radiusX;\n this.radiusY = options.radiusY || options.radiusX;\n this.startAngle = options.startAngle;\n this.endAngle = options.endAngle;\n this.anticlockwise = options.anticlockwise || false;\n this.xRotation = options.xRotation;\n },\n clone: function () {\n return new Arc$2(this.center, {\n radiusX: this.radiusX,\n radiusY: this.radiusY,\n startAngle: this.startAngle,\n endAngle: this.endAngle,\n anticlockwise: this.anticlockwise\n });\n },\n setCenter: function (value) {\n this._observerField('center', Point.create(value));\n this.geometryChange();\n return this;\n },\n getCenter: function () {\n return this.center;\n },\n pointAt: function (angle) {\n var center = this.center;\n var radian = rad(angle);\n return new Point(center.x + this.radiusX * Math.cos(radian), center.y + this.radiusY * Math.sin(radian));\n },\n curvePoints: function () {\n var this$1 = this;\n var startAngle = this.startAngle;\n var dir = this.anticlockwise ? -1 : 1;\n var curvePoints = [this.pointAt(startAngle)];\n var interval = this._arcInterval();\n var intervalAngle = interval.endAngle - interval.startAngle;\n var subIntervalsCount = Math.ceil(intervalAngle / MAX_INTERVAL);\n var subIntervalAngle = intervalAngle / subIntervalsCount;\n var currentAngle = startAngle;\n var transformation;\n if (this.xRotation) {\n transformation = transform().rotate(this.xRotation, this.center);\n }\n for (var i = 1; i <= subIntervalsCount; i++) {\n var nextAngle = currentAngle + dir * subIntervalAngle;\n var points = this$1._intervalCurvePoints(currentAngle, nextAngle, transformation);\n curvePoints.push(points.cp1, points.cp2, points.p2);\n currentAngle = nextAngle;\n }\n return curvePoints;\n },\n bbox: function (matrix) {\n var this$1 = this;\n var interval = this._arcInterval();\n var startAngle = interval.startAngle;\n var endAngle = interval.endAngle;\n var extremeAngles = ellipseExtremeAngles(this.center, this.radiusX, this.radiusY, matrix);\n var extremeX = deg(extremeAngles.x);\n var extremeY = deg(extremeAngles.y);\n var endPoint = this.pointAt(endAngle).transformCopy(matrix);\n var currentAngleX = bboxStartAngle(extremeX, startAngle);\n var currentAngleY = bboxStartAngle(extremeY, startAngle);\n var currentPoint = this.pointAt(startAngle).transformCopy(matrix);\n var minPoint = Point.min(currentPoint, endPoint);\n var maxPoint = Point.max(currentPoint, endPoint);\n while (currentAngleX < endAngle || currentAngleY < endAngle) {\n var currentPointX = void 0;\n if (currentAngleX < endAngle) {\n currentPointX = this$1.pointAt(currentAngleX).transformCopy(matrix);\n currentAngleX += 90;\n }\n var currentPointY = void 0;\n if (currentAngleY < endAngle) {\n currentPointY = this$1.pointAt(currentAngleY).transformCopy(matrix);\n currentAngleY += 90;\n }\n currentPoint = new Point(currentPointX.x, currentPointY.y);\n minPoint = Point.min(minPoint, currentPoint);\n maxPoint = Point.max(maxPoint, currentPoint);\n }\n return Rect.fromPoints(minPoint, maxPoint);\n },\n _arcInterval: function () {\n var ref = this;\n var startAngle = ref.startAngle;\n var endAngle = ref.endAngle;\n var anticlockwise = ref.anticlockwise;\n if (anticlockwise) {\n var oldStart = startAngle;\n startAngle = endAngle;\n endAngle = oldStart;\n }\n if (startAngle > endAngle || anticlockwise && startAngle === endAngle) {\n endAngle += 360;\n }\n return {\n startAngle: startAngle,\n endAngle: endAngle\n };\n },\n _intervalCurvePoints: function (startAngle, endAngle, transformation) {\n var p1 = this.pointAt(startAngle);\n var p2 = this.pointAt(endAngle);\n var p1Derivative = this._derivativeAt(startAngle);\n var p2Derivative = this._derivativeAt(endAngle);\n var t = (rad(endAngle) - rad(startAngle)) / 3;\n var cp1 = new Point(p1.x + t * p1Derivative.x, p1.y + t * p1Derivative.y);\n var cp2 = new Point(p2.x - t * p2Derivative.x, p2.y - t * p2Derivative.y);\n if (transformation) {\n p1.transform(transformation);\n p2.transform(transformation);\n cp1.transform(transformation);\n cp2.transform(transformation);\n }\n return {\n p1: p1,\n cp1: cp1,\n cp2: cp2,\n p2: p2\n };\n },\n _derivativeAt: function (angle) {\n var radian = rad(angle);\n return new Point(-this.radiusX * Math.sin(radian), this.radiusY * Math.cos(radian));\n },\n containsPoint: function (point) {\n var interval = this._arcInterval();\n var intervalAngle = interval.endAngle - interval.startAngle;\n var ref = this;\n var center = ref.center;\n var radiusX = ref.radiusX;\n var radiusY = ref.radiusY;\n var distance = center.distanceTo(point);\n var angleRad = Math.atan2(point.y - center.y, point.x - center.x);\n var pointRadius = radiusX * radiusY / Math.sqrt(pow$1(radiusX, 2) * pow$1(Math.sin(angleRad), 2) + pow$1(radiusY, 2) * pow$1(Math.cos(angleRad), 2));\n var startPoint = this.pointAt(this.startAngle).round(PRECISION);\n var endPoint = this.pointAt(this.endAngle).round(PRECISION);\n var intersection = lineIntersection(center, point.round(PRECISION), startPoint, endPoint);\n var containsPoint;\n if (intervalAngle < 180) {\n containsPoint = intersection && closeOrLess(center.distanceTo(intersection), distance) && closeOrLess(distance, pointRadius);\n } else {\n var angle = calculateAngle(center.x, center.y, radiusX, radiusY, point.x, point.y);\n if (angle !== 360) {\n angle = (360 + angle) % 360;\n }\n var inAngleRange = interval.startAngle <= angle && angle <= interval.endAngle;\n containsPoint = inAngleRange && closeOrLess(distance, pointRadius) || !inAngleRange && (!intersection || intersection.equals(point));\n }\n return containsPoint;\n },\n _isOnPath: function (point, width) {\n var interval = this._arcInterval();\n var center = this.center;\n var angle = calculateAngle(center.x, center.y, this.radiusX, this.radiusY, point.x, point.y);\n if (angle !== 360) {\n angle = (360 + angle) % 360;\n }\n var inAngleRange = interval.startAngle <= angle && angle <= interval.endAngle;\n return inAngleRange && this.pointAt(angle).distanceTo(point) <= width;\n }\n });\n Arc$2.fromPoints = function (start, end, rx, ry, largeArc, swipe, rotation) {\n var arcParameters = normalizeArcParameters({\n x1: start.x,\n y1: start.y,\n x2: end.x,\n y2: end.y,\n rx: rx,\n ry: ry,\n largeArc: largeArc,\n swipe: swipe,\n rotation: rotation\n });\n return new Arc$2(arcParameters.center, {\n startAngle: arcParameters.startAngle,\n endAngle: arcParameters.endAngle,\n radiusX: arcParameters.radiusX,\n radiusY: arcParameters.radiusY,\n xRotation: arcParameters.xRotation,\n anticlockwise: swipe === 0\n });\n };\n defineAccessors(Arc$2.prototype, [\n 'radiusX',\n 'radiusY',\n 'startAngle',\n 'endAngle',\n 'anticlockwise'\n ]);\n ObserversMixin.extend(Arc$2.prototype);\n function calculateAngle(cx, cy, rx, ry, x, y) {\n var cos = round((x - cx) / rx, 3);\n var sin = round((y - cy) / ry, 3);\n return round(deg(Math.atan2(sin, cos)));\n }\n function normalizeArcParameters(parameters) {\n var x1 = parameters.x1;\n var y1 = parameters.y1;\n var x2 = parameters.x2;\n var y2 = parameters.y2;\n var rx = parameters.rx;\n var ry = parameters.ry;\n var largeArc = parameters.largeArc;\n var swipe = parameters.swipe;\n var rotation = parameters.rotation;\n if (rotation === void 0) {\n rotation = 0;\n }\n var radians = rad(rotation);\n var cosine = Math.cos(radians);\n var sine = Math.sin(radians);\n var xT = cosine * (x1 - x2) / 2 + sine * (y1 - y2) / 2;\n var yT = -sine * (x1 - x2) / 2 + cosine * (y1 - y2) / 2;\n var sign = largeArc !== swipe ? 1 : -1;\n var xt2 = Math.pow(xT, 2);\n var yt2 = Math.pow(yT, 2);\n var rx2 = Math.pow(rx, 2);\n var ry2 = Math.pow(ry, 2);\n var delta = xt2 / rx2 + yt2 / ry2;\n if (delta > 1) {\n delta = Math.sqrt(xt2 / rx2 + yt2 / ry2);\n rx = delta * rx;\n rx2 = Math.pow(rx, 2);\n ry = delta * ry;\n ry2 = Math.pow(ry, 2);\n }\n var constT = sign * Math.sqrt((rx2 * ry2 - rx2 * yt2 - ry2 * xt2) / (rx2 * yt2 + ry2 * xt2));\n if (isNaN(constT)) {\n constT = 0;\n }\n var cxT = constT * (rx * yT) / ry;\n var cyT = -constT * (ry * xT) / rx;\n var cx = cosine * cxT - sine * cyT + (x1 + x2) / 2;\n var cy = sine * cxT + cosine * cyT + (y1 + y2) / 2;\n var uX = (xT - cxT) / rx;\n var uY = (yT - cyT) / ry;\n var vX = -(xT + cxT) / rx;\n var vY = -(yT + cyT) / ry;\n var startAngle = (uY >= 0 ? 1 : -1) * deg(Math.acos(uX / Math.sqrt(uX * uX + uY * uY)));\n var angleCosine = round((uX * vX + uY * vY) / (Math.sqrt(uX * uX + uY * uY) * Math.sqrt(vX * vX + vY * vY)), 10);\n var angle = (uX * vY - uY * vX >= 0 ? 1 : -1) * deg(Math.acos(angleCosine));\n if (!swipe && angle > 0) {\n angle -= 360;\n }\n if (swipe && angle < 0) {\n angle += 360;\n }\n var endAngle = startAngle + angle;\n var signEndAngle = endAngle >= 0 ? 1 : -1;\n endAngle = Math.abs(endAngle) % 360 * signEndAngle;\n return {\n center: new Point(cx, cy),\n startAngle: startAngle,\n endAngle: endAngle,\n radiusX: rx,\n radiusY: ry,\n xRotation: rotation\n };\n }\n function bboxStartAngle(angle, start) {\n var startAngle = angle;\n while (startAngle < start) {\n startAngle += 90;\n }\n return startAngle;\n }\n var push = [].push;\n var pop = [].pop;\n var splice = [].splice;\n var shift = [].shift;\n var slice = [].slice;\n var unshift = [].unshift;\n var ElementsArray = Class.extend({\n init: function (array) {\n if (array === void 0) {\n array = [];\n }\n this.length = 0;\n this._splice(0, array.length, array);\n },\n elements: function (value) {\n if (value) {\n this._splice(0, this.length, value);\n this._change();\n return this;\n }\n return this.slice(0);\n },\n push: function () {\n var elements = arguments;\n var result = push.apply(this, elements);\n this._add(elements);\n return result;\n },\n slice: function () {\n return slice.call(this);\n },\n pop: function () {\n var length = this.length;\n var result = pop.apply(this);\n if (length) {\n this._remove([result]);\n }\n return result;\n },\n splice: function (index, howMany) {\n var elements = slice.call(arguments, 2);\n var result = this._splice(index, howMany, elements);\n this._change();\n return result;\n },\n shift: function () {\n var length = this.length;\n var result = shift.apply(this);\n if (length) {\n this._remove([result]);\n }\n return result;\n },\n unshift: function () {\n var elements = arguments;\n var result = unshift.apply(this, elements);\n this._add(elements);\n return result;\n },\n indexOf: function (element) {\n var this$1 = this;\n var length = this.length;\n for (var idx = 0; idx < length; idx++) {\n if (this$1[idx] === element) {\n return idx;\n }\n }\n return -1;\n },\n _splice: function (index, howMany, elements) {\n var result = splice.apply(this, [\n index,\n howMany\n ].concat(elements));\n this._clearObserver(result);\n this._setObserver(elements);\n return result;\n },\n _add: function (elements) {\n this._setObserver(elements);\n this._change();\n },\n _remove: function (elements) {\n this._clearObserver(elements);\n this._change();\n },\n _setObserver: function (elements) {\n var this$1 = this;\n for (var idx = 0; idx < elements.length; idx++) {\n elements[idx].addObserver(this$1);\n }\n },\n _clearObserver: function (elements) {\n var this$1 = this;\n for (var idx = 0; idx < elements.length; idx++) {\n elements[idx].removeObserver(this$1);\n }\n },\n _change: function () {\n }\n });\n ObserversMixin.extend(ElementsArray.prototype);\n var GeometryElementsArray = ElementsArray.extend({\n _change: function () {\n this.geometryChange();\n }\n });\n function pointAccessor(name) {\n var fieldName = '_' + name;\n return function (value) {\n if (defined(value)) {\n this._observerField(fieldName, Point.create(value));\n this.geometryChange();\n return this;\n }\n return this[fieldName];\n };\n }\n function definePointAccessors(fn, names) {\n for (var i = 0; i < names.length; i++) {\n fn[names[i]] = pointAccessor(names[i]);\n }\n }\n function isOutOfEndPoint(endPoint, controlPoint, point) {\n var angle = deg(Math.atan2(controlPoint.y - endPoint.y, controlPoint.x - endPoint.x));\n var rotatedPoint = point.transformCopy(transform().rotate(-angle, endPoint));\n return rotatedPoint.x < endPoint.x;\n }\n function calculateCurveAt(t, field, points) {\n var t1 = 1 - t;\n return Math.pow(t1, 3) * points[0][field] + 3 * Math.pow(t1, 2) * t * points[1][field] + 3 * Math.pow(t, 2) * t1 * points[2][field] + Math.pow(t, 3) * points[3][field];\n }\n function toCubicPolynomial(points, field) {\n return [\n -points[0][field] + 3 * points[1][field] - 3 * points[2][field] + points[3][field],\n 3 * (points[0][field] - 2 * points[1][field] + points[2][field]),\n 3 * (-points[0][field] + points[1][field]),\n points[0][field]\n ];\n }\n var ComplexNumber = Class.extend({\n init: function (real, img) {\n if (real === void 0) {\n real = 0;\n }\n if (img === void 0) {\n img = 0;\n }\n this.real = real;\n this.img = img;\n },\n add: function (cNumber) {\n return new ComplexNumber(round(this.real + cNumber.real, PRECISION), round(this.img + cNumber.img, PRECISION));\n },\n addConstant: function (value) {\n return new ComplexNumber(this.real + value, this.img);\n },\n negate: function () {\n return new ComplexNumber(-this.real, -this.img);\n },\n multiply: function (cNumber) {\n return new ComplexNumber(this.real * cNumber.real - this.img * cNumber.img, this.real * cNumber.img + this.img * cNumber.real);\n },\n multiplyConstant: function (value) {\n return new ComplexNumber(this.real * value, this.img * value);\n },\n nthRoot: function (n) {\n var rad$$1 = Math.atan2(this.img, this.real);\n var r = Math.sqrt(Math.pow(this.img, 2) + Math.pow(this.real, 2));\n var nthR = Math.pow(r, 1 / n);\n return new ComplexNumber(nthR * Math.cos(rad$$1 / n), nthR * Math.sin(rad$$1 / n));\n },\n equals: function (cNumber) {\n return this.real === cNumber.real && this.img === cNumber.img;\n },\n isReal: function () {\n return this.img === 0;\n }\n });\n function numberSign(x) {\n return x < 0 ? -1 : 1;\n }\n function solveQuadraticEquation(a, b, c) {\n var squareRoot = Math.sqrt(Math.pow(b, 2) - 4 * a * c);\n return [\n (-b + squareRoot) / (2 * a),\n (-b - squareRoot) / (2 * a)\n ];\n }\n function solveCubicEquation(a, b, c, d) {\n if (a === 0) {\n return solveQuadraticEquation(b, c, d);\n }\n var p = (3 * a * c - Math.pow(b, 2)) / (3 * Math.pow(a, 2));\n var q = (2 * Math.pow(b, 3) - 9 * a * b * c + 27 * Math.pow(a, 2) * d) / (27 * Math.pow(a, 3));\n var Q = Math.pow(p / 3, 3) + Math.pow(q / 2, 2);\n var i = new ComplexNumber(0, 1);\n var b3a = -b / (3 * a);\n var x1, x2, y1, y2, y3, z1, z2;\n if (Q < 0) {\n x1 = new ComplexNumber(-q / 2, Math.sqrt(-Q)).nthRoot(3);\n x2 = new ComplexNumber(-q / 2, -Math.sqrt(-Q)).nthRoot(3);\n } else {\n x1 = -q / 2 + Math.sqrt(Q);\n x1 = new ComplexNumber(numberSign(x1) * Math.pow(Math.abs(x1), 1 / 3));\n x2 = -q / 2 - Math.sqrt(Q);\n x2 = new ComplexNumber(numberSign(x2) * Math.pow(Math.abs(x2), 1 / 3));\n }\n y1 = x1.add(x2);\n z1 = x1.add(x2).multiplyConstant(-1 / 2);\n z2 = x1.add(x2.negate()).multiplyConstant(Math.sqrt(3) / 2);\n y2 = z1.add(i.multiply(z2));\n y3 = z1.add(i.negate().multiply(z2));\n var result = [];\n if (y1.isReal()) {\n result.push(round(y1.real + b3a, PRECISION));\n }\n if (y2.isReal()) {\n result.push(round(y2.real + b3a, PRECISION));\n }\n if (y3.isReal()) {\n result.push(round(y3.real + b3a, PRECISION));\n }\n return result;\n }\n function hasRootsInRange(points, point, field, rootField, range) {\n var polynomial = toCubicPolynomial(points, rootField);\n var roots = solveCubicEquation(polynomial[0], polynomial[1], polynomial[2], polynomial[3] - point[rootField]);\n var intersection;\n for (var idx = 0; idx < roots.length; idx++) {\n if (0 <= roots[idx] && roots[idx] <= 1) {\n intersection = calculateCurveAt(roots[idx], field, points);\n if (Math.abs(intersection - point[field]) <= range) {\n return true;\n }\n }\n }\n }\n function curveIntersectionsCount(points, point, bbox) {\n var polynomial = toCubicPolynomial(points, 'x');\n var roots = solveCubicEquation(polynomial[0], polynomial[1], polynomial[2], polynomial[3] - point.x);\n var rayIntersection, intersectsRay;\n var count = 0;\n for (var i = 0; i < roots.length; i++) {\n rayIntersection = calculateCurveAt(roots[i], 'y', points);\n intersectsRay = close(rayIntersection, point.y) || rayIntersection > point.y;\n if (intersectsRay && ((roots[i] === 0 || roots[i] === 1) && bbox.bottomRight().x > point.x || 0 < roots[i] && roots[i] < 1)) {\n count++;\n }\n }\n return count;\n }\n function lineIntersectionsCount(a, b, point) {\n var intersects;\n if (a.x !== b.x) {\n var minX = Math.min(a.x, b.x);\n var maxX = Math.max(a.x, b.x);\n var minY = Math.min(a.y, b.y);\n var maxY = Math.max(a.y, b.y);\n var inRange = minX <= point.x && point.x < maxX;\n if (minY === maxY) {\n intersects = point.y <= minY && inRange;\n } else {\n intersects = inRange && (maxY - minY) * ((a.x - b.x) * (a.y - b.y) > 0 ? point.x - minX : maxX - point.x) / (maxX - minX) + minY - point.y >= 0;\n }\n }\n return intersects ? 1 : 0;\n }\n var Segment = Class.extend({\n init: function (anchor, controlIn, controlOut) {\n this.anchor(anchor || new Point());\n this.controlIn(controlIn);\n this.controlOut(controlOut);\n },\n bboxTo: function (toSegment, matrix) {\n var segmentAnchor = this.anchor().transformCopy(matrix);\n var toSegmentAnchor = toSegment.anchor().transformCopy(matrix);\n var rect;\n if (this.controlOut() && toSegment.controlIn()) {\n rect = this._curveBoundingBox(segmentAnchor, this.controlOut().transformCopy(matrix), toSegment.controlIn().transformCopy(matrix), toSegmentAnchor);\n } else {\n rect = this._lineBoundingBox(segmentAnchor, toSegmentAnchor);\n }\n return rect;\n },\n _lineBoundingBox: function (p1, p2) {\n return Rect.fromPoints(p1, p2);\n },\n _curveBoundingBox: function (p1, cp1, cp2, p2) {\n var points = [\n p1,\n cp1,\n cp2,\n p2\n ];\n var extremesX = this._curveExtremesFor(points, 'x');\n var extremesY = this._curveExtremesFor(points, 'y');\n var xLimits = arrayLimits([\n extremesX.min,\n extremesX.max,\n p1.x,\n p2.x\n ]);\n var yLimits = arrayLimits([\n extremesY.min,\n extremesY.max,\n p1.y,\n p2.y\n ]);\n return Rect.fromPoints(new Point(xLimits.min, yLimits.min), new Point(xLimits.max, yLimits.max));\n },\n _curveExtremesFor: function (points, field) {\n var extremes = this._curveExtremes(points[0][field], points[1][field], points[2][field], points[3][field]);\n return {\n min: calculateCurveAt(extremes.min, field, points),\n max: calculateCurveAt(extremes.max, field, points)\n };\n },\n _curveExtremes: function (x1, x2, x3, x4) {\n var a = x1 - 3 * x2 + 3 * x3 - x4;\n var b = -2 * (x1 - 2 * x2 + x3);\n var c = x1 - x2;\n var sqrt = Math.sqrt(b * b - 4 * a * c);\n var t1 = 0;\n var t2 = 1;\n if (a === 0) {\n if (b !== 0) {\n t1 = t2 = -c / b;\n }\n } else if (!isNaN(sqrt)) {\n t1 = (-b + sqrt) / (2 * a);\n t2 = (-b - sqrt) / (2 * a);\n }\n var min = Math.max(Math.min(t1, t2), 0);\n if (min < 0 || min > 1) {\n min = 0;\n }\n var max = Math.min(Math.max(t1, t2), 1);\n if (max > 1 || max < 0) {\n max = 1;\n }\n return {\n min: min,\n max: max\n };\n },\n _intersectionsTo: function (segment, point) {\n var intersectionsCount;\n if (this.controlOut() && segment.controlIn()) {\n intersectionsCount = curveIntersectionsCount([\n this.anchor(),\n this.controlOut(),\n segment.controlIn(),\n segment.anchor()\n ], point, this.bboxTo(segment));\n } else {\n intersectionsCount = lineIntersectionsCount(this.anchor(), segment.anchor(), point);\n }\n return intersectionsCount;\n },\n _isOnCurveTo: function (segment, point, width, endSegment) {\n var bbox = this.bboxTo(segment).expand(width, width);\n if (bbox.containsPoint(point)) {\n var p1 = this.anchor();\n var p2 = this.controlOut();\n var p3 = segment.controlIn();\n var p4 = segment.anchor();\n if (endSegment === 'start' && p1.distanceTo(point) <= width) {\n return !isOutOfEndPoint(p1, p2, point);\n } else if (endSegment === 'end' && p4.distanceTo(point) <= width) {\n return !isOutOfEndPoint(p4, p3, point);\n }\n var points = [\n p1,\n p2,\n p3,\n p4\n ];\n if (hasRootsInRange(points, point, 'x', 'y', width) || hasRootsInRange(points, point, 'y', 'x', width)) {\n return true;\n }\n var rotation = transform().rotate(45, point);\n var rotatedPoints = [\n p1.transformCopy(rotation),\n p2.transformCopy(rotation),\n p3.transformCopy(rotation),\n p4.transformCopy(rotation)\n ];\n return hasRootsInRange(rotatedPoints, point, 'x', 'y', width) || hasRootsInRange(rotatedPoints, point, 'y', 'x', width);\n }\n },\n _isOnLineTo: function (segment, point, width) {\n var p1 = this.anchor();\n var p2 = segment.anchor();\n var angle = deg(Math.atan2(p2.y - p1.y, p2.x - p1.x));\n var rect = new Rect([\n p1.x,\n p1.y - width / 2\n ], [\n p1.distanceTo(p2),\n width\n ]);\n return rect.containsPoint(point.transformCopy(transform().rotate(-angle, p1)));\n },\n _isOnPathTo: function (segment, point, width, endSegment) {\n var isOnPath;\n if (this.controlOut() && segment.controlIn()) {\n isOnPath = this._isOnCurveTo(segment, point, width / 2, endSegment);\n } else {\n isOnPath = this._isOnLineTo(segment, point, width);\n }\n return isOnPath;\n }\n });\n definePointAccessors(Segment.prototype, [\n 'anchor',\n 'controlIn',\n 'controlOut'\n ]);\n ObserversMixin.extend(Segment.prototype);\n function arrayLimits(arr) {\n var length = arr.length;\n var min = MAX_NUM;\n var max = MIN_NUM;\n for (var i = 0; i < length; i++) {\n max = Math.max(max, arr[i]);\n min = Math.min(min, arr[i]);\n }\n return {\n min: min,\n max: max\n };\n }\n var Path = Element$1.extend({\n init: function (options) {\n Element$1.fn.init.call(this, options);\n this.segments = new GeometryElementsArray();\n this.segments.addObserver(this);\n if (!defined(this.options.stroke)) {\n this.stroke('#000');\n if (!defined(this.options.stroke.lineJoin)) {\n this.options.set('stroke.lineJoin', 'miter');\n }\n }\n },\n moveTo: function (x, y) {\n this.suspend();\n this.segments.elements([]);\n this.resume();\n this.lineTo(x, y);\n return this;\n },\n lineTo: function (x, y) {\n var point = defined(y) ? new Point(x, y) : x;\n var segment = new Segment(point);\n this.segments.push(segment);\n return this;\n },\n curveTo: function (controlOut, controlIn, point) {\n if (this.segments.length > 0) {\n var lastSegment = last(this.segments);\n var segment = new Segment(point, controlIn);\n this.suspend();\n lastSegment.controlOut(controlOut);\n this.resume();\n this.segments.push(segment);\n }\n return this;\n },\n arc: function (startAngle, endAngle, radiusX, radiusY, anticlockwise) {\n if (this.segments.length > 0) {\n var lastSegment = last(this.segments);\n var anchor = lastSegment.anchor();\n var start = rad(startAngle);\n var center = new Point(anchor.x - radiusX * Math.cos(start), anchor.y - radiusY * Math.sin(start));\n var arc = new Arc$2(center, {\n startAngle: startAngle,\n endAngle: endAngle,\n radiusX: radiusX,\n radiusY: radiusY,\n anticlockwise: anticlockwise\n });\n this._addArcSegments(arc);\n }\n return this;\n },\n arcTo: function (end, rx, ry, largeArc, swipe, rotation) {\n if (this.segments.length > 0) {\n var lastSegment = last(this.segments);\n var anchor = lastSegment.anchor();\n var arc = Arc$2.fromPoints(anchor, end, rx, ry, largeArc, swipe, rotation);\n this._addArcSegments(arc);\n }\n return this;\n },\n _addArcSegments: function (arc) {\n var this$1 = this;\n this.suspend();\n var curvePoints = arc.curvePoints();\n for (var i = 1; i < curvePoints.length; i += 3) {\n this$1.curveTo(curvePoints[i], curvePoints[i + 1], curvePoints[i + 2]);\n }\n this.resume();\n this.geometryChange();\n },\n close: function () {\n this.options.closed = true;\n this.geometryChange();\n return this;\n },\n rawBBox: function () {\n return this._bbox();\n },\n _containsPoint: function (point) {\n var segments = this.segments;\n var length = segments.length;\n var intersectionsCount = 0;\n var previous, current;\n for (var idx = 1; idx < length; idx++) {\n previous = segments[idx - 1];\n current = segments[idx];\n intersectionsCount += previous._intersectionsTo(current, point);\n }\n if (this.options.closed || !segments[0].anchor().equals(segments[length - 1].anchor())) {\n intersectionsCount += lineIntersectionsCount(segments[0].anchor(), segments[length - 1].anchor(), point);\n }\n return intersectionsCount % 2 !== 0;\n },\n _isOnPath: function (point, width) {\n var segments = this.segments;\n var length = segments.length;\n var pathWidth = width || this.options.stroke.width;\n if (length > 1) {\n if (segments[0]._isOnPathTo(segments[1], point, pathWidth, 'start')) {\n return true;\n }\n for (var idx = 2; idx <= length - 2; idx++) {\n if (segments[idx - 1]._isOnPathTo(segments[idx], point, pathWidth)) {\n return true;\n }\n }\n if (segments[length - 2]._isOnPathTo(segments[length - 1], point, pathWidth, 'end')) {\n return true;\n }\n }\n return false;\n },\n _bbox: function (matrix) {\n var segments = this.segments;\n var length = segments.length;\n var boundingBox;\n if (length === 1) {\n var anchor = segments[0].anchor().transformCopy(matrix);\n boundingBox = new Rect(anchor, Size.ZERO);\n } else if (length > 0) {\n for (var i = 1; i < length; i++) {\n var segmentBox = segments[i - 1].bboxTo(segments[i], matrix);\n if (boundingBox) {\n boundingBox = Rect.union(boundingBox, segmentBox);\n } else {\n boundingBox = segmentBox;\n }\n }\n }\n return boundingBox;\n }\n });\n Path.fromRect = function (rect, options) {\n return new Path(options).moveTo(rect.topLeft()).lineTo(rect.topRight()).lineTo(rect.bottomRight()).lineTo(rect.bottomLeft()).close();\n };\n Path.fromPoints = function (points, options) {\n if (points) {\n var path = new Path(options);\n for (var i = 0; i < points.length; i++) {\n var point = Point.create(points[i]);\n if (point) {\n if (i === 0) {\n path.moveTo(point);\n } else {\n path.lineTo(point);\n }\n }\n }\n return path;\n }\n };\n Path.fromArc = function (arc, options) {\n var path = new Path(options);\n var startAngle = arc.startAngle;\n var start = arc.pointAt(startAngle);\n path.moveTo(start.x, start.y);\n path.arc(startAngle, arc.endAngle, arc.radiusX, arc.radiusY, arc.anticlockwise);\n return path;\n };\n Path.prototype.nodeType = 'Path';\n Paintable.extend(Path.prototype);\n Measurable.extend(Path.prototype);\n var DEFAULT_STROKE$1 = '#000';\n var Arc = Element$1.extend({\n init: function (geometry, options) {\n if (geometry === void 0) {\n geometry = new Arc$2();\n }\n if (options === void 0) {\n options = {};\n }\n Element$1.fn.init.call(this, options);\n this.geometry(geometry);\n if (!defined(this.options.stroke)) {\n this.stroke(DEFAULT_STROKE$1);\n }\n },\n _bbox: function (matrix) {\n return this._geometry.bbox(matrix);\n },\n rawBBox: function () {\n return this.geometry().bbox();\n },\n toPath: function () {\n var path = new Path();\n var curvePoints = this.geometry().curvePoints();\n if (curvePoints.length > 0) {\n path.moveTo(curvePoints[0].x, curvePoints[0].y);\n for (var i = 1; i < curvePoints.length; i += 3) {\n path.curveTo(curvePoints[i], curvePoints[i + 1], curvePoints[i + 2]);\n }\n }\n return path;\n },\n _containsPoint: function (point) {\n return this.geometry().containsPoint(point);\n },\n _isOnPath: function (point) {\n return this.geometry()._isOnPath(point, this.options.stroke.width / 2);\n }\n });\n Arc.prototype.nodeType = 'Arc';\n Paintable.extend(Arc.prototype);\n Measurable.extend(Arc.prototype);\n defineGeometryAccessors(Arc.prototype, ['geometry']);\n function elementsBoundingBox(elements, applyTransform, transformation) {\n var boundingBox;\n for (var i = 0; i < elements.length; i++) {\n var element = elements[i];\n if (element.visible()) {\n var elementBoundingBox = applyTransform ? element.bbox(transformation) : element.rawBBox();\n if (elementBoundingBox) {\n if (boundingBox) {\n boundingBox = Rect.union(boundingBox, elementBoundingBox);\n } else {\n boundingBox = elementBoundingBox;\n }\n }\n }\n }\n return boundingBox;\n }\n function elementsClippedBoundingBox(elements, transformation) {\n var boundingBox;\n for (var i = 0; i < elements.length; i++) {\n var element = elements[i];\n if (element.visible()) {\n var elementBoundingBox = element.clippedBBox(transformation);\n if (elementBoundingBox) {\n if (boundingBox) {\n boundingBox = Rect.union(boundingBox, elementBoundingBox);\n } else {\n boundingBox = elementBoundingBox;\n }\n }\n }\n }\n return boundingBox;\n }\n var MultiPath = Element$1.extend({\n init: function (options) {\n Element$1.fn.init.call(this, options);\n this.paths = new GeometryElementsArray();\n this.paths.addObserver(this);\n if (!defined(this.options.stroke)) {\n this.stroke('#000');\n }\n },\n moveTo: function (x, y) {\n var path = new Path();\n path.moveTo(x, y);\n this.paths.push(path);\n return this;\n },\n lineTo: function (x, y) {\n if (this.paths.length > 0) {\n last(this.paths).lineTo(x, y);\n }\n return this;\n },\n curveTo: function (controlOut, controlIn, point) {\n if (this.paths.length > 0) {\n last(this.paths).curveTo(controlOut, controlIn, point);\n }\n return this;\n },\n arc: function (startAngle, endAngle, radiusX, radiusY, anticlockwise) {\n if (this.paths.length > 0) {\n last(this.paths).arc(startAngle, endAngle, radiusX, radiusY, anticlockwise);\n }\n return this;\n },\n arcTo: function (end, rx, ry, largeArc, swipe, rotation) {\n if (this.paths.length > 0) {\n last(this.paths).arcTo(end, rx, ry, largeArc, swipe, rotation);\n }\n return this;\n },\n close: function () {\n if (this.paths.length > 0) {\n last(this.paths).close();\n }\n return this;\n },\n _bbox: function (matrix) {\n return elementsBoundingBox(this.paths, true, matrix);\n },\n rawBBox: function () {\n return elementsBoundingBox(this.paths, false);\n },\n _containsPoint: function (point) {\n var paths = this.paths;\n for (var idx = 0; idx < paths.length; idx++) {\n if (paths[idx]._containsPoint(point)) {\n return true;\n }\n }\n return false;\n },\n _isOnPath: function (point) {\n var paths = this.paths;\n var width = this.options.stroke.width;\n for (var idx = 0; idx < paths.length; idx++) {\n if (paths[idx]._isOnPath(point, width)) {\n return true;\n }\n }\n return false;\n },\n _clippedBBox: function (transformation) {\n return elementsClippedBoundingBox(this.paths, this.currentTransform(transformation));\n }\n });\n MultiPath.prototype.nodeType = 'MultiPath';\n Paintable.extend(MultiPath.prototype);\n Measurable.extend(MultiPath.prototype);\n var DEFAULT_FONT = '12px sans-serif';\n var DEFAULT_FILL = '#000';\n var Text = Element$1.extend({\n init: function (content, position, options) {\n if (position === void 0) {\n position = new Point();\n }\n if (options === void 0) {\n options = {};\n }\n Element$1.fn.init.call(this, options);\n this.content(content);\n this.position(position);\n if (!this.options.font) {\n this.options.font = DEFAULT_FONT;\n }\n if (!defined(this.options.fill)) {\n this.fill(DEFAULT_FILL);\n }\n },\n content: function (value) {\n if (defined(value)) {\n this.options.set('content', value);\n return this;\n }\n return this.options.get('content');\n },\n measure: function () {\n var metrics = kendoUtil.measureText(this.content(), { font: this.options.get('font') });\n return metrics;\n },\n rect: function () {\n var size = this.measure();\n var pos = this.position().clone();\n return new Rect(pos, [\n size.width,\n size.height\n ]);\n },\n bbox: function (transformation) {\n var combinedMatrix = toMatrix(this.currentTransform(transformation));\n return this.rect().bbox(combinedMatrix);\n },\n rawBBox: function () {\n return this.rect().bbox();\n },\n _containsPoint: function (point) {\n return this.rect().containsPoint(point);\n }\n });\n Text.prototype.nodeType = 'Text';\n Paintable.extend(Text.prototype);\n definePointAccessors(Text.prototype, ['position']);\n var Image$1 = Element$1.extend({\n init: function (src, rect, options) {\n if (rect === void 0) {\n rect = new Rect();\n }\n if (options === void 0) {\n options = {};\n }\n Element$1.fn.init.call(this, options);\n this.src(src);\n this.rect(rect);\n },\n src: function (value) {\n if (defined(value)) {\n this.options.set('src', value);\n return this;\n }\n return this.options.get('src');\n },\n bbox: function (transformation) {\n var combinedMatrix = toMatrix(this.currentTransform(transformation));\n return this._rect.bbox(combinedMatrix);\n },\n rawBBox: function () {\n return this._rect.bbox();\n },\n _containsPoint: function (point) {\n return this._rect.containsPoint(point);\n },\n _hasFill: function () {\n return this.src();\n }\n });\n Image$1.prototype.nodeType = 'Image';\n defineGeometryAccessors(Image$1.prototype, ['rect']);\n var Traversable = {\n extend: function (proto, childrenField) {\n proto.traverse = function (callback) {\n var children = this[childrenField];\n for (var i = 0; i < children.length; i++) {\n var child = children[i];\n if (child.traverse) {\n child.traverse(callback);\n } else {\n callback(child);\n }\n }\n return this;\n };\n }\n };\n var Group = Element$1.extend({\n init: function (options) {\n Element$1.fn.init.call(this, options);\n this.children = [];\n },\n childrenChange: function (action, items, index) {\n this.trigger('childrenChange', {\n action: action,\n items: items,\n index: index\n });\n },\n append: function () {\n append(this.children, arguments);\n this._reparent(arguments, this);\n this.childrenChange('add', arguments);\n return this;\n },\n insert: function (index, element) {\n this.children.splice(index, 0, element);\n element.parent = this;\n this.childrenChange('add', [element], index);\n return this;\n },\n insertAt: function (element, index) {\n return this.insert(index, element);\n },\n remove: function (element) {\n var index = this.children.indexOf(element);\n if (index >= 0) {\n this.children.splice(index, 1);\n element.parent = null;\n this.childrenChange('remove', [element], index);\n }\n return this;\n },\n removeAt: function (index) {\n if (0 <= index && index < this.children.length) {\n var element = this.children[index];\n this.children.splice(index, 1);\n element.parent = null;\n this.childrenChange('remove', [element], index);\n }\n return this;\n },\n clear: function () {\n var items = this.children;\n this.children = [];\n this._reparent(items, null);\n this.childrenChange('remove', items, 0);\n return this;\n },\n bbox: function (transformation) {\n return elementsBoundingBox(this.children, true, this.currentTransform(transformation));\n },\n rawBBox: function () {\n return elementsBoundingBox(this.children, false);\n },\n _clippedBBox: function (transformation) {\n return elementsClippedBoundingBox(this.children, this.currentTransform(transformation));\n },\n currentTransform: function (transformation) {\n return Element$1.prototype.currentTransform.call(this, transformation) || null;\n },\n containsPoint: function (point, parentTransform) {\n if (this.visible()) {\n var children = this.children;\n var transform = this.currentTransform(parentTransform);\n for (var idx = 0; idx < children.length; idx++) {\n if (children[idx].containsPoint(point, transform)) {\n return true;\n }\n }\n }\n return false;\n },\n _reparent: function (elements, newParent) {\n var this$1 = this;\n for (var i = 0; i < elements.length; i++) {\n var child = elements[i];\n var parent = child.parent;\n if (parent && parent !== this$1 && parent.remove) {\n parent.remove(child);\n }\n child.parent = newParent;\n }\n }\n });\n Group.prototype.nodeType = 'Group';\n Traversable.extend(Group.prototype, 'children');\n function translateToPoint(point, bbox, element) {\n var transofrm = element.transform() || transform();\n var matrix = transofrm.matrix();\n matrix.e += point.x - bbox.origin.x;\n matrix.f += point.y - bbox.origin.y;\n transofrm.matrix(matrix);\n element.transform(transofrm);\n }\n function alignStart(size, rect, align, axis, sizeField) {\n var start;\n if (align === 'start') {\n start = rect.origin[axis];\n } else if (align === 'end') {\n start = rect.origin[axis] + rect.size[sizeField] - size;\n } else {\n start = rect.origin[axis] + (rect.size[sizeField] - size) / 2;\n }\n return start;\n }\n var DEFAULT_OPTIONS = {\n alignContent: 'start',\n justifyContent: 'start',\n alignItems: 'start',\n spacing: 0,\n orientation: 'horizontal',\n lineSpacing: 0,\n wrap: true\n };\n var Layout = Group.extend({\n init: function (rect, options) {\n Group.fn.init.call(this, $.extend({}, DEFAULT_OPTIONS, options));\n this._rect = rect;\n this._fieldMap = {};\n },\n rect: function (value) {\n if (value) {\n this._rect = value;\n return this;\n }\n return this._rect;\n },\n _initMap: function () {\n var options = this.options;\n var fieldMap = this._fieldMap;\n if (options.orientation === 'horizontal') {\n fieldMap.sizeField = 'width';\n fieldMap.groupsSizeField = 'height';\n fieldMap.groupAxis = 'x';\n fieldMap.groupsAxis = 'y';\n } else {\n fieldMap.sizeField = 'height';\n fieldMap.groupsSizeField = 'width';\n fieldMap.groupAxis = 'y';\n fieldMap.groupsAxis = 'x';\n }\n },\n reflow: function () {\n if (!this._rect || this.children.length === 0) {\n return;\n }\n this._initMap();\n if (this.options.transform) {\n this.transform(null);\n }\n var options = this.options;\n var rect = this._rect;\n var ref = this._initGroups();\n var groups = ref.groups;\n var groupsSize = ref.groupsSize;\n var ref$1 = this._fieldMap;\n var sizeField = ref$1.sizeField;\n var groupsSizeField = ref$1.groupsSizeField;\n var groupAxis = ref$1.groupAxis;\n var groupsAxis = ref$1.groupsAxis;\n var groupOrigin = new Point();\n var elementOrigin = new Point();\n var size = new Size();\n var groupStart = alignStart(groupsSize, rect, options.alignContent, groupsAxis, groupsSizeField);\n var elementStart, bbox, element, group, groupBox;\n for (var groupIdx = 0; groupIdx < groups.length; groupIdx++) {\n group = groups[groupIdx];\n groupOrigin[groupAxis] = elementStart = alignStart(group.size, rect, options.justifyContent, groupAxis, sizeField);\n groupOrigin[groupsAxis] = groupStart;\n size[sizeField] = group.size;\n size[groupsSizeField] = group.lineSize;\n groupBox = new Rect(groupOrigin, size);\n for (var idx = 0; idx < group.bboxes.length; idx++) {\n element = group.elements[idx];\n bbox = group.bboxes[idx];\n elementOrigin[groupAxis] = elementStart;\n elementOrigin[groupsAxis] = alignStart(bbox.size[groupsSizeField], groupBox, options.alignItems, groupsAxis, groupsSizeField);\n translateToPoint(elementOrigin, bbox, element);\n elementStart += bbox.size[sizeField] + options.spacing;\n }\n groupStart += group.lineSize + options.lineSpacing;\n }\n if (!options.wrap && group.size > rect.size[sizeField]) {\n var scale = rect.size[sizeField] / groupBox.size[sizeField];\n var scaledStart = groupBox.topLeft().scale(scale, scale);\n var scaledSize = groupBox.size[groupsSizeField] * scale;\n var newStart = alignStart(scaledSize, rect, options.alignContent, groupsAxis, groupsSizeField);\n var transform$$1 = transform();\n if (groupAxis === 'x') {\n transform$$1.translate(rect.origin.x - scaledStart.x, newStart - scaledStart.y);\n } else {\n transform$$1.translate(newStart - scaledStart.x, rect.origin.y - scaledStart.y);\n }\n transform$$1.scale(scale, scale);\n this.transform(transform$$1);\n }\n },\n _initGroups: function () {\n var this$1 = this;\n var ref = this;\n var options = ref.options;\n var children = ref.children;\n var lineSpacing = options.lineSpacing;\n var wrap = options.wrap;\n var spacing = options.spacing;\n var sizeField = this._fieldMap.sizeField;\n var group = this._newGroup();\n var groups = [];\n var addGroup = function () {\n groups.push(group);\n groupsSize += group.lineSize + lineSpacing;\n };\n var groupsSize = -lineSpacing;\n for (var idx = 0; idx < children.length; idx++) {\n var element = children[idx];\n var bbox = children[idx].clippedBBox();\n if (element.visible() && bbox) {\n if (wrap && group.size + bbox.size[sizeField] + spacing > this$1._rect.size[sizeField]) {\n if (group.bboxes.length === 0) {\n this$1._addToGroup(group, bbox, element);\n addGroup();\n group = this$1._newGroup();\n } else {\n addGroup();\n group = this$1._newGroup();\n this$1._addToGroup(group, bbox, element);\n }\n } else {\n this$1._addToGroup(group, bbox, element);\n }\n }\n }\n if (group.bboxes.length) {\n addGroup();\n }\n return {\n groups: groups,\n groupsSize: groupsSize\n };\n },\n _addToGroup: function (group, bbox, element) {\n group.size += bbox.size[this._fieldMap.sizeField] + this.options.spacing;\n group.lineSize = Math.max(bbox.size[this._fieldMap.groupsSizeField], group.lineSize);\n group.bboxes.push(bbox);\n group.elements.push(element);\n },\n _newGroup: function () {\n return {\n lineSize: 0,\n size: -this.options.spacing,\n bboxes: [],\n elements: []\n };\n }\n });\n var Rect$2 = Element$1.extend({\n init: function (geometry, options) {\n if (geometry === void 0) {\n geometry = new Rect();\n }\n if (options === void 0) {\n options = {};\n }\n Element$1.fn.init.call(this, options);\n this.geometry(geometry);\n if (!defined(this.options.stroke)) {\n this.stroke('#000');\n }\n },\n _bbox: function (matrix) {\n return this._geometry.bbox(matrix);\n },\n rawBBox: function () {\n return this._geometry.bbox();\n },\n _containsPoint: function (point) {\n return this._geometry.containsPoint(point);\n },\n _isOnPath: function (point) {\n return this.geometry()._isOnPath(point, this.options.stroke.width / 2);\n }\n });\n Rect$2.prototype.nodeType = 'Rect';\n Paintable.extend(Rect$2.prototype);\n Measurable.extend(Rect$2.prototype);\n defineGeometryAccessors(Rect$2.prototype, ['geometry']);\n function alignElements(elements, rect, alignment, axis, sizeField) {\n for (var idx = 0; idx < elements.length; idx++) {\n var bbox = elements[idx].clippedBBox();\n if (bbox) {\n var point = bbox.origin.clone();\n point[axis] = alignStart(bbox.size[sizeField], rect, alignment || 'start', axis, sizeField);\n translateToPoint(point, bbox, elements[idx]);\n }\n }\n }\n function align(elements, rect, alignment) {\n alignElements(elements, rect, alignment, 'x', 'width');\n }\n function vAlign(elements, rect, alignment) {\n alignElements(elements, rect, alignment, 'y', 'height');\n }\n function stackElements(elements, stackAxis, otherAxis, sizeField) {\n if (elements.length > 1) {\n var origin = new Point();\n var previousBBox = elements[0].bbox;\n for (var idx = 1; idx < elements.length; idx++) {\n var element = elements[idx].element;\n var bbox = elements[idx].bbox;\n origin[stackAxis] = previousBBox.origin[stackAxis] + previousBBox.size[sizeField];\n origin[otherAxis] = bbox.origin[otherAxis];\n translateToPoint(origin, bbox, element);\n bbox.origin[stackAxis] = origin[stackAxis];\n previousBBox = bbox;\n }\n }\n }\n function createStackElements(elements) {\n var stackElements = [];\n for (var idx = 0; idx < elements.length; idx++) {\n var element = elements[idx];\n var bbox = element.clippedBBox();\n if (bbox) {\n stackElements.push({\n element: element,\n bbox: bbox\n });\n }\n }\n return stackElements;\n }\n function stack(elements) {\n stackElements(createStackElements(elements), 'x', 'y', 'width');\n }\n function vStack(elements) {\n stackElements(createStackElements(elements), 'y', 'x', 'height');\n }\n function getStacks(elements, rect, sizeField) {\n var maxSize = rect.size[sizeField];\n var stacks = [];\n var stack = [];\n var stackSize = 0;\n var element, bbox;\n var addElementToStack = function () {\n stack.push({\n element: element,\n bbox: bbox\n });\n };\n for (var idx = 0; idx < elements.length; idx++) {\n element = elements[idx];\n bbox = element.clippedBBox();\n if (bbox) {\n var size = bbox.size[sizeField];\n if (stackSize + size > maxSize) {\n if (stack.length) {\n stacks.push(stack);\n stack = [];\n addElementToStack();\n stackSize = size;\n } else {\n addElementToStack();\n stacks.push(stack);\n stack = [];\n stackSize = 0;\n }\n } else {\n addElementToStack();\n stackSize += size;\n }\n }\n }\n if (stack.length) {\n stacks.push(stack);\n }\n return stacks;\n }\n function wrapElements(elements, rect, axis, otherAxis, sizeField) {\n var stacks = getStacks(elements, rect, sizeField);\n var origin = rect.origin.clone();\n var result = [];\n for (var idx = 0; idx < stacks.length; idx++) {\n var stack = stacks[idx];\n var startElement = stack[0];\n origin[otherAxis] = startElement.bbox.origin[otherAxis];\n translateToPoint(origin, startElement.bbox, startElement.element);\n startElement.bbox.origin[axis] = origin[axis];\n stackElements(stack, axis, otherAxis, sizeField);\n result.push([]);\n for (var elementIdx = 0; elementIdx < stack.length; elementIdx++) {\n result[idx].push(stack[elementIdx].element);\n }\n }\n return result;\n }\n function wrap(elements, rect) {\n return wrapElements(elements, rect, 'x', 'y', 'width');\n }\n function vWrap(elements, rect) {\n return wrapElements(elements, rect, 'y', 'x', 'height');\n }\n function fit(element, rect) {\n var bbox = element.clippedBBox();\n if (bbox) {\n var elementSize = bbox.size;\n var rectSize = rect.size;\n if (rectSize.width < elementSize.width || rectSize.height < elementSize.height) {\n var scale = Math.min(rectSize.width / elementSize.width, rectSize.height / elementSize.height);\n var transform$$1 = element.transform() || transform();\n transform$$1.scale(scale, scale);\n element.transform(transform$$1);\n }\n }\n }\n var StopsArray = ElementsArray.extend({\n _change: function () {\n this.optionsChange({ field: 'stops' });\n }\n });\n function optionsAccessor(name) {\n return function (value) {\n if (defined(value)) {\n this.options.set(name, value);\n return this;\n }\n return this.options.get(name);\n };\n }\n function defineOptionsAccessors(fn, names) {\n for (var i = 0; i < names.length; i++) {\n fn[names[i]] = optionsAccessor(names[i]);\n }\n }\n var GradientStop = Class.extend({\n init: function (offset, color, opacity) {\n this.options = new OptionsStore({\n offset: offset,\n color: color,\n opacity: defined(opacity) ? opacity : 1\n });\n this.options.addObserver(this);\n }\n });\n GradientStop.create = function (arg) {\n if (defined(arg)) {\n var stop;\n if (arg instanceof GradientStop) {\n stop = arg;\n } else if (arg.length > 1) {\n stop = new GradientStop(arg[0], arg[1], arg[2]);\n } else {\n stop = new GradientStop(arg.offset, arg.color, arg.opacity);\n }\n return stop;\n }\n };\n defineOptionsAccessors(GradientStop.prototype, [\n 'offset',\n 'color',\n 'opacity'\n ]);\n ObserversMixin.extend(GradientStop.prototype);\n var Gradient = Class.extend({\n init: function (options) {\n if (options === void 0) {\n options = {};\n }\n this.stops = new StopsArray(this._createStops(options.stops));\n this.stops.addObserver(this);\n this._userSpace = options.userSpace;\n this.id = definitionId();\n },\n userSpace: function (value) {\n if (defined(value)) {\n this._userSpace = value;\n this.optionsChange();\n return this;\n }\n return this._userSpace;\n },\n _createStops: function (stops) {\n if (stops === void 0) {\n stops = [];\n }\n var result = [];\n for (var idx = 0; idx < stops.length; idx++) {\n result.push(GradientStop.create(stops[idx]));\n }\n return result;\n },\n addStop: function (offset, color, opacity) {\n this.stops.push(new GradientStop(offset, color, opacity));\n },\n removeStop: function (stop) {\n var index = this.stops.indexOf(stop);\n if (index >= 0) {\n this.stops.splice(index, 1);\n }\n }\n });\n Gradient.prototype.nodeType = 'Gradient';\n ObserversMixin.extend(Gradient.prototype);\n $.extend(Gradient.prototype, {\n optionsChange: function (e) {\n this.trigger('optionsChange', {\n field: 'gradient' + (e ? '.' + e.field : ''),\n value: this\n });\n },\n geometryChange: function () {\n this.optionsChange();\n }\n });\n var LinearGradient = Gradient.extend({\n init: function (options) {\n if (options === void 0) {\n options = {};\n }\n Gradient.fn.init.call(this, options);\n this.start(options.start || new Point());\n this.end(options.end || new Point(1, 0));\n }\n });\n definePointAccessors(LinearGradient.prototype, [\n 'start',\n 'end'\n ]);\n var RadialGradient = Gradient.extend({\n init: function (options) {\n if (options === void 0) {\n options = {};\n }\n Gradient.fn.init.call(this, options);\n this.center(options.center || new Point());\n this._radius = defined(options.radius) ? options.radius : 1;\n this._fallbackFill = options.fallbackFill;\n },\n radius: function (value) {\n if (defined(value)) {\n this._radius = value;\n this.geometryChange();\n return this;\n }\n return this._radius;\n },\n fallbackFill: function (value) {\n if (defined(value)) {\n this._fallbackFill = value;\n this.optionsChange();\n return this;\n }\n return this._fallbackFill;\n }\n });\n definePointAccessors(RadialGradient.prototype, ['center']);\n function swing(position) {\n return 0.5 - Math.cos(position * Math.PI) / 2;\n }\n function linear(position) {\n return position;\n }\n function easeOutElastic(position, time, start, diff) {\n var s = 1.70158, p = 0, a = diff;\n if (position === 0) {\n return start;\n }\n if (position === 1) {\n return start + diff;\n }\n if (!p) {\n p = 0.5;\n }\n if (a < Math.abs(diff)) {\n a = diff;\n s = p / 4;\n } else {\n s = p / (2 * Math.PI) * Math.asin(diff / a);\n }\n return a * Math.pow(2, -10 * position) * Math.sin((Number(position) - s) * (1.1 * Math.PI) / p) + diff + start;\n }\n var easingFunctions = {\n swing: swing,\n linear: linear,\n easeOutElastic: easeOutElastic\n };\n var now = Date.now || function () {\n return new Date().getTime();\n };\n var Animation = Class.extend({\n init: function (element, options) {\n this.options = $.extend({}, this.options, options);\n this.element = element;\n },\n setup: function () {\n },\n step: function () {\n },\n play: function () {\n var this$1 = this;\n var options = this.options;\n var duration = options.duration;\n var delay = options.delay;\n if (delay === void 0) {\n delay = 0;\n }\n var easing = easingFunctions[options.easing];\n var start = now() + delay;\n var finish = start + duration;\n if (duration === 0) {\n this.step(1);\n this.abort();\n } else {\n setTimeout(function () {\n var loop = function () {\n if (this$1._stopped) {\n return;\n }\n var wallTime = now();\n var time = limitValue(wallTime - start, 0, duration);\n var position = time / duration;\n var easingPosition = easing(position, time, 0, 1, duration);\n this$1.step(easingPosition);\n if (wallTime < finish) {\n kendo.animationFrame(loop);\n } else {\n this$1.abort();\n }\n };\n loop();\n }, delay);\n }\n },\n abort: function () {\n this._stopped = true;\n },\n destroy: function () {\n this.abort();\n }\n });\n Animation.prototype.options = {\n duration: 500,\n easing: 'swing'\n };\n var AnimationFactory = Class.extend({\n init: function () {\n this._items = [];\n },\n register: function (name, type) {\n this._items.push({\n name: name,\n type: type\n });\n },\n create: function (element, options) {\n var items = this._items;\n var match;\n if (options && options.type) {\n var type = options.type.toLowerCase();\n for (var i = 0; i < items.length; i++) {\n if (items[i].name.toLowerCase() === type) {\n match = items[i];\n break;\n }\n }\n }\n if (match) {\n return new match.type(element, options);\n }\n }\n });\n AnimationFactory.current = new AnimationFactory();\n Animation.create = function (type, element, options) {\n return AnimationFactory.current.create(type, element, options);\n };\n var ShapeMap = {\n l: function (path, options) {\n var parameters = options.parameters;\n var position = options.position;\n for (var i = 0; i < parameters.length; i += 2) {\n var point = new Point(parameters[i], parameters[i + 1]);\n if (options.isRelative) {\n point.translateWith(position);\n }\n path.lineTo(point.x, point.y);\n position.x = point.x;\n position.y = point.y;\n }\n },\n c: function (path, options) {\n var parameters = options.parameters;\n var position = options.position;\n for (var i = 0; i < parameters.length; i += 6) {\n var controlOut = new Point(parameters[i], parameters[i + 1]);\n var controlIn = new Point(parameters[i + 2], parameters[i + 3]);\n var point = new Point(parameters[i + 4], parameters[i + 5]);\n if (options.isRelative) {\n controlIn.translateWith(position);\n controlOut.translateWith(position);\n point.translateWith(position);\n }\n path.curveTo(controlOut, controlIn, point);\n position.x = point.x;\n position.y = point.y;\n }\n },\n v: function (path, options) {\n var value = options.isRelative ? 0 : options.position.x;\n toLineParamaters(options.parameters, true, value);\n this.l(path, options);\n },\n h: function (path, options) {\n var value = options.isRelative ? 0 : options.position.y;\n toLineParamaters(options.parameters, false, value);\n this.l(path, options);\n },\n a: function (path, options) {\n var parameters = options.parameters;\n var position = options.position;\n for (var i = 0; i < parameters.length; i += 7) {\n var radiusX = parameters[i];\n var radiusY = parameters[i + 1];\n var rotation = parameters[i + 2];\n var largeArc = parameters[i + 3];\n var swipe = parameters[i + 4];\n var endPoint = new Point(parameters[i + 5], parameters[i + 6]);\n if (options.isRelative) {\n endPoint.translateWith(position);\n }\n if (position.x !== endPoint.x || position.y !== endPoint.y) {\n path.arcTo(endPoint, radiusX, radiusY, largeArc, swipe, rotation);\n position.x = endPoint.x;\n position.y = endPoint.y;\n }\n }\n },\n s: function (path, options) {\n var parameters = options.parameters;\n var position = options.position;\n var previousCommand = options.previousCommand;\n var lastControlIn;\n if (previousCommand === 's' || previousCommand === 'c') {\n lastControlIn = last(last(path.paths).segments).controlIn();\n }\n for (var i = 0; i < parameters.length; i += 4) {\n var controlIn = new Point(parameters[i], parameters[i + 1]);\n var endPoint = new Point(parameters[i + 2], parameters[i + 3]);\n var controlOut = void 0;\n if (options.isRelative) {\n controlIn.translateWith(position);\n endPoint.translateWith(position);\n }\n if (lastControlIn) {\n controlOut = reflectionPoint(lastControlIn, position);\n } else {\n controlOut = position.clone();\n }\n lastControlIn = controlIn;\n path.curveTo(controlOut, controlIn, endPoint);\n position.x = endPoint.x;\n position.y = endPoint.y;\n }\n },\n q: function (path, options) {\n var parameters = options.parameters;\n var position = options.position;\n for (var i = 0; i < parameters.length; i += 4) {\n var controlPoint = new Point(parameters[i], parameters[i + 1]);\n var endPoint = new Point(parameters[i + 2], parameters[i + 3]);\n if (options.isRelative) {\n controlPoint.translateWith(position);\n endPoint.translateWith(position);\n }\n var cubicControlPoints = quadraticToCubicControlPoints(position, controlPoint, endPoint);\n path.curveTo(cubicControlPoints.controlOut, cubicControlPoints.controlIn, endPoint);\n position.x = endPoint.x;\n position.y = endPoint.y;\n }\n },\n t: function (path, options) {\n var parameters = options.parameters;\n var position = options.position;\n var previousCommand = options.previousCommand;\n var controlPoint;\n if (previousCommand === 'q' || previousCommand === 't') {\n var lastSegment = last(last(path.paths).segments);\n controlPoint = lastSegment.controlIn().clone().translateWith(position.scaleCopy(-1 / 3)).scale(3 / 2);\n }\n for (var i = 0; i < parameters.length; i += 2) {\n var endPoint = new Point(parameters[i], parameters[i + 1]);\n if (options.isRelative) {\n endPoint.translateWith(position);\n }\n if (controlPoint) {\n controlPoint = reflectionPoint(controlPoint, position);\n } else {\n controlPoint = position.clone();\n }\n var cubicControlPoints = quadraticToCubicControlPoints(position, controlPoint, endPoint);\n path.curveTo(cubicControlPoints.controlOut, cubicControlPoints.controlIn, endPoint);\n position.x = endPoint.x;\n position.y = endPoint.y;\n }\n }\n };\n function toLineParamaters(parameters, isVertical, value) {\n var insertPosition = isVertical ? 0 : 1;\n for (var i = 0; i < parameters.length; i += 2) {\n parameters.splice(i + insertPosition, 0, value);\n }\n }\n function reflectionPoint(point, center) {\n if (point && center) {\n return center.scaleCopy(2).translate(-point.x, -point.y);\n }\n }\n var third = 1 / 3;\n function quadraticToCubicControlPoints(position, controlPoint, endPoint) {\n var scaledPoint = controlPoint.clone().scale(2 / 3);\n return {\n controlOut: scaledPoint.clone().translateWith(position.scaleCopy(third)),\n controlIn: scaledPoint.translateWith(endPoint.scaleCopy(third))\n };\n }\n var SEGMENT_REGEX = /([a-df-z]{1})([^a-df-z]*)(z)?/gi;\n var SPLIT_REGEX = /[,\\s]?([+\\-]?(?:\\d*\\.\\d+|\\d+)(?:[eE][+\\-]?\\d+)?)/g;\n var MOVE = 'm';\n var CLOSE = 'z';\n function parseParameters(str) {\n var parameters = [];\n str.replace(SPLIT_REGEX, function (match, number) {\n parameters.push(parseFloat(number));\n });\n return parameters;\n }\n var PathParser = Class.extend({\n parse: function (str, options) {\n var multiPath = new MultiPath(options);\n var position = new Point();\n var previousCommand;\n str.replace(SEGMENT_REGEX, function (match, element, params, closePath) {\n var command = element.toLowerCase();\n var isRelative = command === element;\n var parameters = parseParameters(params.trim());\n if (command === MOVE) {\n if (isRelative) {\n position.x += parameters[0];\n position.y += parameters[1];\n } else {\n position.x = parameters[0];\n position.y = parameters[1];\n }\n multiPath.moveTo(position.x, position.y);\n if (parameters.length > 2) {\n command = 'l';\n parameters.splice(0, 2);\n }\n }\n if (ShapeMap[command]) {\n ShapeMap[command](multiPath, {\n parameters: parameters,\n position: position,\n isRelative: isRelative,\n previousCommand: previousCommand\n });\n if (closePath && closePath.toLowerCase() === CLOSE) {\n multiPath.close();\n }\n } else if (command !== MOVE) {\n throw new Error('Error while parsing SVG path. Unsupported command: ' + command);\n }\n previousCommand = command;\n });\n return multiPath;\n }\n });\n PathParser.current = new PathParser();\n Path.parse = function (str, options) {\n return PathParser.current.parse(str, options);\n };\n var SurfaceFactory = Class.extend({\n init: function () {\n this._items = [];\n },\n register: function (name, type, order) {\n var items = this._items;\n var first = items[0];\n var entry = {\n name: name,\n type: type,\n order: order\n };\n if (!first || order < first.order) {\n items.unshift(entry);\n } else {\n items.push(entry);\n }\n },\n create: function (element, options) {\n var items = this._items;\n var match = items[0];\n if (options && options.type) {\n var preferred = options.type.toLowerCase();\n for (var i = 0; i < items.length; i++) {\n if (items[i].name === preferred) {\n match = items[i];\n break;\n }\n }\n }\n if (match) {\n return new match.type(element, options);\n }\n kendo.logToConsole('Warning: Unable to create Kendo UI Drawing Surface. Possible causes:\\n' + '- The browser does not support SVG and Canvas. User agent: ' + navigator.userAgent);\n }\n });\n SurfaceFactory.current = new SurfaceFactory();\n var events = [\n 'click',\n 'mouseenter',\n 'mouseleave',\n 'mousemove',\n 'resize',\n 'tooltipOpen',\n 'tooltipClose'\n ];\n var Surface = kendo.Observable.extend({\n init: function (element, options) {\n kendo.Observable.fn.init.call(this);\n this.options = $.extend({}, options);\n this.element = element;\n this._click = this._handler('click');\n this._mouseenter = this._handler('mouseenter');\n this._mouseleave = this._handler('mouseleave');\n this._mousemove = this._handler('mousemove');\n this._visual = new Group();\n elementSize(element, this.options);\n this.bind(events, this.options);\n this._enableTracking();\n },\n draw: function (element) {\n this._visual.children.push(element);\n },\n clear: function () {\n this._visual.children = [];\n },\n destroy: function () {\n this._visual = null;\n this.unbind();\n },\n eventTarget: function (e) {\n var this$1 = this;\n var domNode = eventElement(e);\n var node;\n while (!node && domNode) {\n node = domNode._kendoNode;\n if (domNode === this$1.element) {\n break;\n }\n domNode = domNode.parentElement;\n }\n if (node) {\n return node.srcElement;\n }\n },\n exportVisual: function () {\n return this._visual;\n },\n getSize: function () {\n return elementSize(this.element);\n },\n currentSize: function (size) {\n if (size) {\n this._size = size;\n } else {\n return this._size;\n }\n },\n setSize: function (size) {\n elementSize(this.element, size);\n this.currentSize(size);\n this._resize();\n },\n resize: function (force) {\n var size = this.getSize();\n var currentSize = this.currentSize();\n if (force || (size.width > 0 || size.height > 0) && (!currentSize || size.width !== currentSize.width || size.height !== currentSize.height)) {\n this.currentSize(size);\n this._resize(size, force);\n this.trigger('resize', size);\n }\n },\n size: function (value) {\n if (!value) {\n return this.getSize();\n }\n this.setSize(value);\n },\n suspendTracking: function () {\n this._suspendedTracking = true;\n },\n resumeTracking: function () {\n this._suspendedTracking = false;\n },\n _enableTracking: function () {\n },\n _resize: function () {\n },\n _handler: function (eventName) {\n var this$1 = this;\n return function (e) {\n var node = this$1.eventTarget(e);\n if (node && !this$1._suspendedTracking) {\n this$1.trigger(eventName, {\n element: node,\n originalEvent: e,\n type: eventName\n });\n }\n };\n },\n _elementOffset: function () {\n var element = this.element;\n var ref = elementStyles(element, [\n 'paddingLeft',\n 'paddingTop'\n ]);\n var paddingLeft = ref.paddingLeft;\n var paddingTop = ref.paddingTop;\n var ref$1 = elementOffset(element);\n var left = ref$1.left;\n var top = ref$1.top;\n return {\n left: left + parseInt(paddingLeft, 10),\n top: top + parseInt(paddingTop, 10)\n };\n },\n _surfacePoint: function (e) {\n var offset = this._elementOffset();\n var coord = eventCoordinates(e);\n var x = coord.x - offset.left;\n var y = coord.y - offset.top;\n return new Point(x, y);\n }\n });\n Surface.create = function (element, options) {\n return SurfaceFactory.current.create(element, options);\n };\n Surface.support = {};\n var BaseNode = Class.extend({\n init: function (srcElement) {\n this.childNodes = [];\n this.parent = null;\n if (srcElement) {\n this.srcElement = srcElement;\n this.observe();\n }\n },\n destroy: function () {\n var this$1 = this;\n if (this.srcElement) {\n this.srcElement.removeObserver(this);\n }\n var children = this.childNodes;\n for (var i = 0; i < children.length; i++) {\n this$1.childNodes[i].destroy();\n }\n this.parent = null;\n },\n load: function () {\n },\n observe: function () {\n if (this.srcElement) {\n this.srcElement.addObserver(this);\n }\n },\n append: function (node) {\n this.childNodes.push(node);\n node.parent = this;\n },\n insertAt: function (node, pos) {\n this.childNodes.splice(pos, 0, node);\n node.parent = this;\n },\n remove: function (index, count) {\n var this$1 = this;\n var end = index + count;\n for (var i = index; i < end; i++) {\n this$1.childNodes[i].removeSelf();\n }\n this.childNodes.splice(index, count);\n },\n removeSelf: function () {\n this.clear();\n this.destroy();\n },\n clear: function () {\n this.remove(0, this.childNodes.length);\n },\n invalidate: function () {\n if (this.parent) {\n this.parent.invalidate();\n }\n },\n geometryChange: function () {\n this.invalidate();\n },\n optionsChange: function () {\n this.invalidate();\n },\n childrenChange: function (e) {\n if (e.action === 'add') {\n this.load(e.items, e.index);\n } else if (e.action === 'remove') {\n this.remove(e.index, e.items.length);\n }\n this.invalidate();\n }\n });\n function renderAttr(name, value) {\n return defined(value) && value !== null ? ' ' + name + '=\\'' + value + '\\' ' : '';\n }\n function renderAllAttr(attrs) {\n var output = '';\n for (var i = 0; i < attrs.length; i++) {\n output += renderAttr(attrs[i][0], attrs[i][1]);\n }\n return output;\n }\n function renderStyle(attrs) {\n var output = '';\n for (var i = 0; i < attrs.length; i++) {\n var value = attrs[i][1];\n if (defined(value)) {\n output += attrs[i][0] + ':' + value + ';';\n }\n }\n if (output !== '') {\n return output;\n }\n }\n var NODE_MAP = {};\n var SVG_NS = 'http://www.w3.org/2000/svg';\n var NONE = 'none';\n var renderSVG = function (container, svg) {\n container.innerHTML = svg;\n };\n if (typeof document !== 'undefined') {\n var testFragment = '';\n var testContainer = document.createElement('div');\n var hasParser = typeof DOMParser !== 'undefined';\n testContainer.innerHTML = testFragment;\n if (hasParser && testContainer.firstChild.namespaceURI !== SVG_NS) {\n renderSVG = function (container, svg) {\n var parser = new DOMParser();\n var chartDoc = parser.parseFromString(svg, 'text/xml');\n var importedDoc = document.adoptNode(chartDoc.documentElement);\n container.innerHTML = '';\n container.appendChild(importedDoc);\n };\n }\n }\n var renderSVG$1 = renderSVG;\n var TRANSFORM = 'transform';\n var DefinitionMap = {\n clip: 'clip-path',\n fill: 'fill'\n };\n function isDefinition(type, value) {\n return type === 'clip' || type === 'fill' && (!value || value.nodeType === 'Gradient');\n }\n function baseUrl() {\n var base = document.getElementsByTagName('base')[0];\n var href = document.location.href;\n var hashIndex = href.indexOf('#');\n var url = '';\n if (base && !support.browser.msie) {\n if (hashIndex !== -1) {\n href = href.substring(0, hashIndex);\n }\n url = href;\n }\n return url;\n }\n function refUrl(id, skipBaseHref) {\n var base = skipBaseHref ? '' : baseUrl();\n return 'url(' + base + '#' + id + ')';\n }\n var Node = BaseNode.extend({\n init: function (srcElement, options) {\n BaseNode.fn.init.call(this, srcElement);\n this.definitions = {};\n this.options = options;\n },\n destroy: function () {\n if (this.element) {\n this.element._kendoNode = null;\n this.element = null;\n }\n this.clearDefinitions();\n BaseNode.fn.destroy.call(this);\n },\n load: function (elements, pos) {\n var this$1 = this;\n for (var i = 0; i < elements.length; i++) {\n var srcElement = elements[i];\n var children = srcElement.children;\n var childNode = new NODE_MAP[srcElement.nodeType](srcElement, this$1.options);\n if (defined(pos)) {\n this$1.insertAt(childNode, pos);\n } else {\n this$1.append(childNode);\n }\n childNode.createDefinitions();\n if (children && children.length > 0) {\n childNode.load(children);\n }\n var element = this$1.element;\n if (element) {\n childNode.attachTo(element, pos);\n }\n }\n },\n root: function () {\n var root = this;\n while (root.parent) {\n root = root.parent;\n }\n return root;\n },\n attachTo: function (domElement, pos) {\n var container = document.createElement('div');\n renderSVG$1(container, '' + this.render() + '');\n var element = container.firstChild.firstChild;\n if (element) {\n if (defined(pos)) {\n domElement.insertBefore(element, domElement.childNodes[pos] || null);\n } else {\n domElement.appendChild(element);\n }\n this.setElement(element);\n }\n },\n setElement: function (element) {\n if (this.element) {\n this.element._kendoNode = null;\n }\n this.element = element;\n this.element._kendoNode = this;\n var nodes = this.childNodes;\n for (var i = 0; i < nodes.length; i++) {\n var childElement = element.childNodes[i];\n nodes[i].setElement(childElement);\n }\n },\n clear: function () {\n this.clearDefinitions();\n if (this.element) {\n this.element.innerHTML = '';\n }\n var children = this.childNodes;\n for (var i = 0; i < children.length; i++) {\n children[i].destroy();\n }\n this.childNodes = [];\n },\n removeSelf: function () {\n if (this.element) {\n var parentNode = this.element.parentNode;\n if (parentNode) {\n parentNode.removeChild(this.element);\n }\n this.element = null;\n }\n BaseNode.fn.removeSelf.call(this);\n },\n template: function () {\n return this.renderChildren();\n },\n render: function () {\n return this.template();\n },\n renderChildren: function () {\n var nodes = this.childNodes;\n var output = '';\n for (var i = 0; i < nodes.length; i++) {\n output += nodes[i].render();\n }\n return output;\n },\n optionsChange: function (e) {\n var field = e.field;\n var value = e.value;\n if (field === 'visible') {\n this.css('display', value ? '' : NONE);\n } else if (DefinitionMap[field] && isDefinition(field, value)) {\n this.updateDefinition(field, value);\n } else if (field === 'opacity') {\n this.attr('opacity', value);\n } else if (field === 'cursor') {\n this.css('cursor', value);\n }\n BaseNode.fn.optionsChange.call(this, e);\n },\n attr: function (name, value) {\n if (this.element) {\n this.element.setAttribute(name, value);\n }\n },\n allAttr: function (attrs) {\n var this$1 = this;\n for (var i = 0; i < attrs.length; i++) {\n this$1.attr(attrs[i][0], attrs[i][1]);\n }\n },\n css: function (name, value) {\n if (this.element) {\n this.element.style[name] = value;\n }\n },\n allCss: function (styles) {\n var this$1 = this;\n for (var i = 0; i < styles.length; i++) {\n this$1.css(styles[i][0], styles[i][1]);\n }\n },\n removeAttr: function (name) {\n if (this.element) {\n this.element.removeAttribute(name);\n }\n },\n mapTransform: function (transform) {\n var attrs = [];\n if (transform) {\n attrs.push([\n TRANSFORM,\n 'matrix(' + transform.matrix().toString(6) + ')'\n ]);\n }\n return attrs;\n },\n renderTransform: function () {\n return renderAllAttr(this.mapTransform(this.srcElement.transform()));\n },\n transformChange: function (value) {\n if (value) {\n this.allAttr(this.mapTransform(value));\n } else {\n this.removeAttr(TRANSFORM);\n }\n },\n mapStyle: function () {\n var options = this.srcElement.options;\n var style = [[\n 'cursor',\n options.cursor\n ]];\n if (options.visible === false) {\n style.push([\n 'display',\n NONE\n ]);\n }\n return style;\n },\n renderStyle: function () {\n return renderAttr('style', renderStyle(this.mapStyle(true)));\n },\n renderOpacity: function () {\n return renderAttr('opacity', this.srcElement.options.opacity);\n },\n createDefinitions: function () {\n var srcElement = this.srcElement;\n var definitions = this.definitions;\n if (srcElement) {\n var options = srcElement.options;\n var hasDefinitions;\n for (var field in DefinitionMap) {\n var definition = options.get(field);\n if (definition && isDefinition(field, definition)) {\n definitions[field] = definition;\n hasDefinitions = true;\n }\n }\n if (hasDefinitions) {\n this.definitionChange({\n action: 'add',\n definitions: definitions\n });\n }\n }\n },\n definitionChange: function (e) {\n if (this.parent) {\n this.parent.definitionChange(e);\n }\n },\n updateDefinition: function (type, value) {\n var definitions = this.definitions;\n var current = definitions[type];\n var attr = DefinitionMap[type];\n var definition = {};\n if (current) {\n definition[type] = current;\n this.definitionChange({\n action: 'remove',\n definitions: definition\n });\n delete definitions[type];\n }\n if (!value) {\n if (current) {\n this.removeAttr(attr);\n }\n } else {\n definition[type] = value;\n this.definitionChange({\n action: 'add',\n definitions: definition\n });\n definitions[type] = value;\n this.attr(attr, this.refUrl(value.id));\n }\n },\n clearDefinitions: function () {\n var definitions = this.definitions;\n this.definitionChange({\n action: 'remove',\n definitions: definitions\n });\n this.definitions = {};\n },\n renderDefinitions: function () {\n return renderAllAttr(this.mapDefinitions());\n },\n mapDefinitions: function () {\n var this$1 = this;\n var definitions = this.definitions;\n var attrs = [];\n for (var field in definitions) {\n attrs.push([\n DefinitionMap[field],\n this$1.refUrl(definitions[field].id)\n ]);\n }\n return attrs;\n },\n refUrl: function (id) {\n var skipBaseHref = (this.options || {}).skipBaseHref;\n return refUrl(id, skipBaseHref);\n }\n });\n var GradientStopNode = Node.extend({\n template: function () {\n return '';\n },\n renderOffset: function () {\n return renderAttr('offset', this.srcElement.offset());\n },\n mapStyle: function () {\n var srcElement = this.srcElement;\n return [\n [\n 'stop-color',\n srcElement.color()\n ],\n [\n 'stop-opacity',\n srcElement.opacity()\n ]\n ];\n },\n optionsChange: function (e) {\n if (e.field === 'offset') {\n this.attr(e.field, e.value);\n } else if (e.field === 'color' || e.field === 'opacity') {\n this.css('stop-' + e.field, e.value);\n }\n }\n });\n var GradientNode = Node.extend({\n init: function (srcElement) {\n Node.fn.init.call(this, srcElement);\n this.id = srcElement.id;\n this.loadStops();\n },\n loadStops: function () {\n var this$1 = this;\n var stops = this.srcElement.stops;\n var element = this.element;\n for (var idx = 0; idx < stops.length; idx++) {\n var stopNode = new GradientStopNode(stops[idx]);\n this$1.append(stopNode);\n if (element) {\n stopNode.attachTo(element);\n }\n }\n },\n optionsChange: function (e) {\n if (e.field === 'gradient.stops') {\n BaseNode.prototype.clear.call(this);\n this.loadStops();\n } else if (e.field === 'gradient') {\n this.allAttr(this.mapCoordinates());\n }\n },\n renderCoordinates: function () {\n return renderAllAttr(this.mapCoordinates());\n },\n mapSpace: function () {\n return [\n 'gradientUnits',\n this.srcElement.userSpace() ? 'userSpaceOnUse' : 'objectBoundingBox'\n ];\n }\n });\n var LinearGradientNode = GradientNode.extend({\n template: function () {\n return '' + this.renderChildren() + '';\n },\n mapCoordinates: function () {\n var srcElement = this.srcElement;\n var start = srcElement.start();\n var end = srcElement.end();\n var attrs = [\n [\n 'x1',\n start.x\n ],\n [\n 'y1',\n start.y\n ],\n [\n 'x2',\n end.x\n ],\n [\n 'y2',\n end.y\n ],\n this.mapSpace()\n ];\n return attrs;\n }\n });\n var RadialGradientNode = GradientNode.extend({\n template: function () {\n return '' + this.renderChildren() + '';\n },\n mapCoordinates: function () {\n var srcElement = this.srcElement;\n var center = srcElement.center();\n var radius = srcElement.radius();\n var attrs = [\n [\n 'cx',\n center.x\n ],\n [\n 'cy',\n center.y\n ],\n [\n 'r',\n radius\n ],\n this.mapSpace()\n ];\n return attrs;\n }\n });\n var ClipNode = Node.extend({\n init: function (srcElement) {\n Node.fn.init.call(this);\n this.srcElement = srcElement;\n this.id = srcElement.id;\n this.load([srcElement]);\n },\n template: function () {\n return '' + this.renderChildren() + '';\n }\n });\n var DefinitionNode = Node.extend({\n init: function () {\n Node.fn.init.call(this);\n this.definitionMap = {};\n },\n attachTo: function (domElement) {\n this.element = domElement;\n },\n template: function () {\n return '' + this.renderChildren() + '';\n },\n definitionChange: function (e) {\n var definitions = e.definitions;\n var action = e.action;\n if (action === 'add') {\n this.addDefinitions(definitions);\n } else if (action === 'remove') {\n this.removeDefinitions(definitions);\n }\n },\n createDefinition: function (type, item) {\n var nodeType;\n if (type === 'clip') {\n nodeType = ClipNode;\n } else if (type === 'fill') {\n if (item instanceof LinearGradient) {\n nodeType = LinearGradientNode;\n } else if (item instanceof RadialGradient) {\n nodeType = RadialGradientNode;\n }\n }\n return new nodeType(item);\n },\n addDefinitions: function (definitions) {\n var this$1 = this;\n for (var field in definitions) {\n this$1.addDefinition(field, definitions[field]);\n }\n },\n addDefinition: function (type, srcElement) {\n var ref = this;\n var element = ref.element;\n var definitionMap = ref.definitionMap;\n var id = srcElement.id;\n var mapItem = definitionMap[id];\n if (!mapItem) {\n var node = this.createDefinition(type, srcElement);\n definitionMap[id] = {\n element: node,\n count: 1\n };\n this.append(node);\n if (element) {\n node.attachTo(this.element);\n }\n } else {\n mapItem.count++;\n }\n },\n removeDefinitions: function (definitions) {\n var this$1 = this;\n for (var field in definitions) {\n this$1.removeDefinition(definitions[field]);\n }\n },\n removeDefinition: function (srcElement) {\n var definitionMap = this.definitionMap;\n var id = srcElement.id;\n var mapItem = definitionMap[id];\n if (mapItem) {\n mapItem.count--;\n if (mapItem.count === 0) {\n this.remove(this.childNodes.indexOf(mapItem.element), 1);\n delete definitionMap[id];\n }\n }\n }\n });\n var RootNode = Node.extend({\n init: function (options) {\n Node.fn.init.call(this);\n this.options = options;\n this.defs = new DefinitionNode();\n },\n attachTo: function (domElement) {\n this.element = domElement;\n this.defs.attachTo(domElement.firstElementChild);\n },\n clear: function () {\n BaseNode.prototype.clear.call(this);\n },\n template: function () {\n return this.defs.render() + this.renderChildren();\n },\n definitionChange: function (e) {\n this.defs.definitionChange(e);\n }\n });\n var RTL = 'rtl';\n function alignToScreen(element) {\n var ctm;\n try {\n ctm = element.getScreenCTM ? element.getScreenCTM() : null;\n } catch (e) {\n }\n if (ctm) {\n var left = -ctm.e % 1;\n var top = -ctm.f % 1;\n var style = element.style;\n if (left !== 0 || top !== 0) {\n style.left = left + 'px';\n style.top = top + 'px';\n }\n }\n }\n var Surface$1 = Surface.extend({\n init: function (element, options) {\n Surface.fn.init.call(this, element, options);\n this._root = new RootNode($.extend({ rtl: elementStyles(element, 'direction').direction === RTL }, this.options));\n renderSVG$1(this.element, this._template());\n this._rootElement = this.element.firstElementChild;\n alignToScreen(this._rootElement);\n this._root.attachTo(this._rootElement);\n bindEvents(this.element, {\n click: this._click,\n mouseover: this._mouseenter,\n mouseout: this._mouseleave,\n mousemove: this._mousemove\n });\n this.resize();\n },\n destroy: function () {\n if (this._root) {\n this._root.destroy();\n this._root = null;\n this._rootElement = null;\n unbindEvents(this.element, {\n click: this._click,\n mouseover: this._mouseenter,\n mouseout: this._mouseleave,\n mousemove: this._mousemove\n });\n }\n Surface.fn.destroy.call(this);\n },\n translate: function (offset) {\n var viewBox = Math.round(offset.x) + ' ' + Math.round(offset.y) + ' ' + this._size.width + ' ' + this._size.height;\n this._offset = offset;\n this._rootElement.setAttribute('viewBox', viewBox);\n },\n draw: function (element) {\n Surface.fn.draw.call(this, element);\n this._root.load([element]);\n },\n clear: function () {\n Surface.fn.clear.call(this);\n this._root.clear();\n },\n svg: function () {\n return '' + this._template();\n },\n exportVisual: function () {\n var ref = this;\n var visual = ref._visual;\n var offset = ref._offset;\n if (offset) {\n var wrap = new Group();\n wrap.children.push(visual);\n wrap.transform(transform().translate(-offset.x, -offset.y));\n visual = wrap;\n }\n return visual;\n },\n _resize: function () {\n if (this._offset) {\n this.translate(this._offset);\n }\n },\n _template: function () {\n return '' + this._root.render() + '';\n }\n });\n Surface$1.prototype.type = 'svg';\n if (typeof document !== 'undefined' && document.implementation.hasFeature('http://www.w3.org/TR/SVG11/feature#BasicStructure', '1.1')) {\n Surface.support.svg = true;\n SurfaceFactory.current.register('svg', Surface$1, 10);\n }\n var GroupNode = Node.extend({\n template: function () {\n return '' + this.renderChildren() + '';\n },\n optionsChange: function (e) {\n if (e.field === 'transform') {\n this.transformChange(e.value);\n }\n Node.fn.optionsChange.call(this, e);\n }\n });\n NODE_MAP.Group = GroupNode;\n var DASH_ARRAYS = {\n dot: [\n 1.5,\n 3.5\n ],\n dash: [\n 4,\n 3.5\n ],\n longdash: [\n 8,\n 3.5\n ],\n dashdot: [\n 3.5,\n 3.5,\n 1.5,\n 3.5\n ],\n longdashdot: [\n 8,\n 3.5,\n 1.5,\n 3.5\n ],\n longdashdotdot: [\n 8,\n 3.5,\n 1.5,\n 3.5,\n 1.5,\n 3.5\n ]\n };\n var SOLID = 'solid';\n var BUTT = 'butt';\n var ATTRIBUTE_MAP = {\n 'fill.opacity': 'fill-opacity',\n 'stroke.color': 'stroke',\n 'stroke.width': 'stroke-width',\n 'stroke.opacity': 'stroke-opacity'\n };\n var SPACE = ' ';\n var PathNode = Node.extend({\n geometryChange: function () {\n this.attr('d', this.renderData());\n this.invalidate();\n },\n optionsChange: function (e) {\n switch (e.field) {\n case 'fill':\n if (e.value) {\n this.allAttr(this.mapFill(e.value));\n } else {\n this.removeAttr('fill');\n }\n break;\n case 'fill.color':\n this.allAttr(this.mapFill({ color: e.value }));\n break;\n case 'stroke':\n if (e.value) {\n this.allAttr(this.mapStroke(e.value));\n } else {\n this.removeAttr('stroke');\n }\n break;\n case 'transform':\n this.transformChange(e.value);\n break;\n default:\n var name = ATTRIBUTE_MAP[e.field];\n if (name) {\n this.attr(name, e.value);\n }\n break;\n }\n Node.fn.optionsChange.call(this, e);\n },\n content: function () {\n if (this.element) {\n this.element.textContent = this.srcElement.content();\n }\n },\n renderData: function () {\n return this.printPath(this.srcElement);\n },\n printPath: function (path) {\n var this$1 = this;\n var segments = path.segments;\n var length = segments.length;\n if (length > 0) {\n var parts = [];\n var output, currentType;\n for (var i = 1; i < length; i++) {\n var segmentType = this$1.segmentType(segments[i - 1], segments[i]);\n if (segmentType !== currentType) {\n currentType = segmentType;\n parts.push(segmentType);\n }\n if (segmentType === 'L') {\n parts.push(this$1.printPoints(segments[i].anchor()));\n } else {\n parts.push(this$1.printPoints(segments[i - 1].controlOut(), segments[i].controlIn(), segments[i].anchor()));\n }\n }\n output = 'M' + this.printPoints(segments[0].anchor()) + SPACE + parts.join(SPACE);\n if (path.options.closed) {\n output += 'Z';\n }\n return output;\n }\n },\n printPoints: function () {\n var points = arguments;\n var length = points.length;\n var result = [];\n for (var i = 0; i < length; i++) {\n result.push(points[i].toString(3));\n }\n return result.join(' ');\n },\n segmentType: function (segmentStart, segmentEnd) {\n return segmentStart.controlOut() && segmentEnd.controlIn() ? 'C' : 'L';\n },\n mapStroke: function (stroke) {\n var attrs = [];\n if (stroke && !isTransparent(stroke.color)) {\n attrs.push([\n 'stroke',\n stroke.color\n ]);\n attrs.push([\n 'stroke-width',\n stroke.width\n ]);\n attrs.push([\n 'stroke-linecap',\n this.renderLinecap(stroke)\n ]);\n attrs.push([\n 'stroke-linejoin',\n stroke.lineJoin\n ]);\n if (defined(stroke.opacity)) {\n attrs.push([\n 'stroke-opacity',\n stroke.opacity\n ]);\n }\n if (defined(stroke.dashType)) {\n attrs.push([\n 'stroke-dasharray',\n this.renderDashType(stroke)\n ]);\n }\n } else {\n attrs.push([\n 'stroke',\n NONE\n ]);\n }\n return attrs;\n },\n renderStroke: function () {\n return renderAllAttr(this.mapStroke(this.srcElement.options.stroke));\n },\n renderDashType: function (stroke) {\n var dashType = stroke.dashType;\n var width = stroke.width;\n if (width === void 0) {\n width = 1;\n }\n if (dashType && dashType !== SOLID) {\n var dashArray = DASH_ARRAYS[dashType.toLowerCase()];\n var result = [];\n for (var i = 0; i < dashArray.length; i++) {\n result.push(dashArray[i] * width);\n }\n return result.join(' ');\n }\n },\n renderLinecap: function (stroke) {\n var dashType = stroke.dashType;\n var lineCap = stroke.lineCap;\n return dashType && dashType !== 'solid' ? BUTT : lineCap;\n },\n mapFill: function (fill) {\n var attrs = [];\n if (!(fill && fill.nodeType === 'Gradient')) {\n if (fill && !isTransparent(fill.color)) {\n attrs.push([\n 'fill',\n fill.color\n ]);\n if (defined(fill.opacity)) {\n attrs.push([\n 'fill-opacity',\n fill.opacity\n ]);\n }\n } else {\n attrs.push([\n 'fill',\n NONE\n ]);\n }\n }\n return attrs;\n },\n renderFill: function () {\n return renderAllAttr(this.mapFill(this.srcElement.options.fill));\n },\n template: function () {\n return '';\n }\n });\n NODE_MAP.Path = PathNode;\n var ArcNode = PathNode.extend({\n renderData: function () {\n return this.printPath(this.srcElement.toPath());\n }\n });\n NODE_MAP.Arc = ArcNode;\n var CircleNode = PathNode.extend({\n geometryChange: function () {\n var center = this.center();\n this.attr('cx', center.x);\n this.attr('cy', center.y);\n this.attr('r', this.radius());\n this.invalidate();\n },\n center: function () {\n return this.srcElement.geometry().center;\n },\n radius: function () {\n return this.srcElement.geometry().radius;\n },\n template: function () {\n return '';\n }\n });\n NODE_MAP.Circle = CircleNode;\n var RectNode = PathNode.extend({\n geometryChange: function () {\n var geometry = this.srcElement.geometry();\n this.attr('x', geometry.origin.x);\n this.attr('y', geometry.origin.y);\n this.attr('width', geometry.size.width);\n this.attr('height', geometry.size.height);\n this.invalidate();\n },\n size: function () {\n return this.srcElement.geometry().size;\n },\n origin: function () {\n return this.srcElement.geometry().origin;\n },\n template: function () {\n return '';\n }\n });\n NODE_MAP.Rect = RectNode;\n var ImageNode = PathNode.extend({\n geometryChange: function () {\n this.allAttr(this.mapPosition());\n this.invalidate();\n },\n optionsChange: function (e) {\n if (e.field === 'src') {\n this.allAttr(this.mapSource());\n }\n PathNode.fn.optionsChange.call(this, e);\n },\n mapPosition: function () {\n var rect = this.srcElement.rect();\n var tl = rect.topLeft();\n return [\n [\n 'x',\n tl.x\n ],\n [\n 'y',\n tl.y\n ],\n [\n 'width',\n rect.width() + 'px'\n ],\n [\n 'height',\n rect.height() + 'px'\n ]\n ];\n },\n renderPosition: function () {\n return renderAllAttr(this.mapPosition());\n },\n mapSource: function (encode) {\n var src = this.srcElement.src();\n if (encode) {\n src = kendo.htmlEncode(src);\n }\n return [[\n 'xlink:href',\n src\n ]];\n },\n renderSource: function () {\n return renderAllAttr(this.mapSource(true));\n },\n template: function () {\n return '' + '';\n }\n });\n NODE_MAP.Image = ImageNode;\n function decodeEntities(text) {\n if (!text || !text.indexOf || text.indexOf('&') < 0) {\n return text;\n }\n var element = decodeEntities._element;\n element.innerHTML = text;\n return element.textContent || element.innerText;\n }\n if (typeof document !== 'undefined') {\n decodeEntities._element = document.createElement('span');\n }\n var TextNode = PathNode.extend({\n geometryChange: function () {\n var pos = this.pos();\n this.attr('x', pos.x);\n this.attr('y', pos.y);\n this.invalidate();\n },\n optionsChange: function (e) {\n if (e.field === 'font') {\n this.attr('style', renderStyle(this.mapStyle()));\n this.geometryChange();\n } else if (e.field === 'content') {\n PathNode.fn.content.call(this, this.srcElement.content());\n }\n PathNode.fn.optionsChange.call(this, e);\n },\n mapStyle: function (encode) {\n var style = PathNode.fn.mapStyle.call(this, encode);\n var font = this.srcElement.options.font;\n if (encode) {\n font = kendo.htmlEncode(font);\n }\n style.push([\n 'font',\n font\n ]);\n return style;\n },\n pos: function () {\n var pos = this.srcElement.position();\n var size = this.srcElement.measure();\n return pos.clone().setY(pos.y + size.baseline);\n },\n renderContent: function () {\n var content = this.srcElement.content();\n content = decodeEntities(content);\n content = kendo.htmlEncode(content);\n return content;\n },\n renderTextAnchor: function () {\n var anchor;\n if ((this.options || {}).rtl) {\n anchor = 'end';\n }\n return renderAttr('text-anchor', anchor);\n },\n template: function () {\n return '' + this.renderContent() + '';\n }\n });\n NODE_MAP.Text = TextNode;\n var MultiPathNode = PathNode.extend({\n renderData: function () {\n var this$1 = this;\n var paths = this.srcElement.paths;\n if (paths.length > 0) {\n var result = [];\n for (var i = 0; i < paths.length; i++) {\n result.push(this$1.printPath(paths[i]));\n }\n return result.join(' ');\n }\n }\n });\n NODE_MAP.MultiPath = MultiPathNode;\n var geometry = {\n Circle: Circle$2,\n Arc: Arc$2,\n Rect: Rect,\n Point: Point,\n Segment: Segment,\n Matrix: Matrix,\n Size: Size,\n toMatrix: toMatrix,\n Transformation: Transformation,\n transform: transform\n };\n function exportGroup(group) {\n var root = new RootNode({ skipBaseHref: true });\n var bbox = group.clippedBBox();\n var rootGroup = group;\n if (bbox) {\n var origin = bbox.getOrigin();\n var exportRoot = new Group();\n exportRoot.transform(transform().translate(-origin.x, -origin.y));\n exportRoot.children.push(group);\n rootGroup = exportRoot;\n }\n root.load([rootGroup]);\n var svg = '' + root.render() + '';\n root.destroy();\n return svg;\n }\n var svg = {\n Surface: Surface$1,\n RootNode: RootNode,\n Node: Node,\n GroupNode: GroupNode,\n ArcNode: ArcNode,\n CircleNode: CircleNode,\n RectNode: RectNode,\n ImageNode: ImageNode,\n TextNode: TextNode,\n PathNode: PathNode,\n MultiPathNode: MultiPathNode,\n DefinitionNode: DefinitionNode,\n ClipNode: ClipNode,\n GradientStopNode: GradientStopNode,\n LinearGradientNode: LinearGradientNode,\n RadialGradientNode: RadialGradientNode,\n exportGroup: exportGroup\n };\n var NODE_MAP$2 = {};\n function renderPath(ctx, path) {\n var segments = path.segments;\n if (segments.length === 0) {\n return;\n }\n var segment = segments[0];\n var anchor = segment.anchor();\n ctx.moveTo(anchor.x, anchor.y);\n for (var i = 1; i < segments.length; i++) {\n segment = segments[i];\n anchor = segment.anchor();\n var prevSeg = segments[i - 1];\n var prevOut = prevSeg.controlOut();\n var controlIn = segment.controlIn();\n if (prevOut && controlIn) {\n ctx.bezierCurveTo(prevOut.x, prevOut.y, controlIn.x, controlIn.y, anchor.x, anchor.y);\n } else {\n ctx.lineTo(anchor.x, anchor.y);\n }\n }\n if (path.options.closed) {\n ctx.closePath();\n }\n }\n var Node$2 = BaseNode.extend({\n init: function (srcElement) {\n BaseNode.fn.init.call(this, srcElement);\n if (srcElement) {\n this.initClip();\n }\n },\n initClip: function () {\n var clip = this.srcElement.clip();\n if (clip) {\n this.clip = clip;\n clip.addObserver(this);\n }\n },\n clear: function () {\n if (this.srcElement) {\n this.srcElement.removeObserver(this);\n }\n this.clearClip();\n BaseNode.fn.clear.call(this);\n },\n clearClip: function () {\n if (this.clip) {\n this.clip.removeObserver(this);\n delete this.clip;\n }\n },\n setClip: function (ctx) {\n if (this.clip) {\n ctx.beginPath();\n renderPath(ctx, this.clip);\n ctx.clip();\n }\n },\n optionsChange: function (e) {\n if (e.field === 'clip') {\n this.clearClip();\n this.initClip();\n }\n BaseNode.fn.optionsChange.call(this, e);\n },\n setTransform: function (ctx) {\n if (this.srcElement) {\n var transform = this.srcElement.transform();\n if (transform) {\n ctx.transform.apply(ctx, transform.matrix().toArray(6));\n }\n }\n },\n loadElements: function (elements, pos, cors) {\n var this$1 = this;\n for (var i = 0; i < elements.length; i++) {\n var srcElement = elements[i];\n var children = srcElement.children;\n var childNode = new NODE_MAP$2[srcElement.nodeType](srcElement, cors);\n if (children && children.length > 0) {\n childNode.load(children, pos, cors);\n }\n if (defined(pos)) {\n this$1.insertAt(childNode, pos);\n } else {\n this$1.append(childNode);\n }\n }\n },\n load: function (elements, pos, cors) {\n this.loadElements(elements, pos, cors);\n this.invalidate();\n },\n setOpacity: function (ctx) {\n if (this.srcElement) {\n var opacity = this.srcElement.opacity();\n if (defined(opacity)) {\n this.globalAlpha(ctx, opacity);\n }\n }\n },\n globalAlpha: function (ctx, value) {\n var opactity = value;\n if (opactity && ctx.globalAlpha) {\n opactity *= ctx.globalAlpha;\n }\n ctx.globalAlpha = opactity;\n },\n visible: function () {\n var src = this.srcElement;\n return !src || src && src.options.visible !== false;\n }\n });\n var GroupNode$2 = Node$2.extend({\n renderTo: function (ctx) {\n if (!this.visible()) {\n return;\n }\n ctx.save();\n this.setTransform(ctx);\n this.setClip(ctx);\n this.setOpacity(ctx);\n var childNodes = this.childNodes;\n for (var i = 0; i < childNodes.length; i++) {\n var child = childNodes[i];\n if (child.visible()) {\n child.renderTo(ctx);\n }\n }\n ctx.restore();\n }\n });\n Traversable.extend(GroupNode$2.prototype, 'childNodes');\n NODE_MAP$2.Group = GroupNode$2;\n var FRAME_DELAY = 1000 / 60;\n var RootNode$2 = GroupNode$2.extend({\n init: function (canvas) {\n GroupNode$2.fn.init.call(this);\n this.canvas = canvas;\n this.ctx = canvas.getContext('2d');\n var invalidateHandler = this._invalidate.bind(this);\n this.invalidate = kendo.throttle(function () {\n kendo.animationFrame(invalidateHandler);\n }, FRAME_DELAY);\n },\n destroy: function () {\n GroupNode$2.fn.destroy.call(this);\n this.canvas = null;\n this.ctx = null;\n },\n load: function (elements, pos, cors) {\n this.loadElements(elements, pos, cors);\n this._invalidate();\n },\n _invalidate: function () {\n if (!this.ctx) {\n return;\n }\n this.ctx.clearRect(0, 0, this.canvas.width, this.canvas.height);\n this.renderTo(this.ctx);\n }\n });\n Traversable.extend(RootNode$2.prototype, 'childNodes');\n var QuadRoot = Class.extend({\n init: function () {\n this.shapes = [];\n },\n _add: function (shape, bbox) {\n this.shapes.push({\n bbox: bbox,\n shape: shape\n });\n shape._quadNode = this;\n },\n pointShapes: function (point) {\n var shapes = this.shapes;\n var length = shapes.length;\n var result = [];\n for (var idx = 0; idx < length; idx++) {\n if (shapes[idx].bbox.containsPoint(point)) {\n result.push(shapes[idx].shape);\n }\n }\n return result;\n },\n insert: function (shape, bbox) {\n this._add(shape, bbox);\n },\n remove: function (shape) {\n var shapes = this.shapes;\n var length = shapes.length;\n for (var idx = 0; idx < length; idx++) {\n if (shapes[idx].shape === shape) {\n shapes.splice(idx, 1);\n break;\n }\n }\n }\n });\n var QuadNode = QuadRoot.extend({\n init: function (rect) {\n QuadRoot.fn.init.call(this);\n this.children = [];\n this.rect = rect;\n },\n inBounds: function (rect) {\n var nodeRect = this.rect;\n var nodeBottomRight = nodeRect.bottomRight();\n var bottomRight = rect.bottomRight();\n var inBounds = nodeRect.origin.x <= rect.origin.x && nodeRect.origin.y <= rect.origin.y && bottomRight.x <= nodeBottomRight.x && bottomRight.y <= nodeBottomRight.y;\n return inBounds;\n },\n pointShapes: function (point) {\n var children = this.children;\n var length = children.length;\n var result = QuadRoot.fn.pointShapes.call(this, point);\n for (var idx = 0; idx < length; idx++) {\n append(result, children[idx].pointShapes(point));\n }\n return result;\n },\n insert: function (shape, bbox) {\n var children = this.children;\n var inserted = false;\n if (this.inBounds(bbox)) {\n if (this.shapes.length < 4) {\n this._add(shape, bbox);\n } else {\n if (!children.length) {\n this._initChildren();\n }\n for (var idx = 0; idx < children.length; idx++) {\n if (children[idx].insert(shape, bbox)) {\n inserted = true;\n break;\n }\n }\n if (!inserted) {\n this._add(shape, bbox);\n }\n }\n inserted = true;\n }\n return inserted;\n },\n _initChildren: function () {\n var ref = this;\n var rect = ref.rect;\n var children = ref.children;\n var center = rect.center();\n var halfWidth = rect.width() / 2;\n var halfHeight = rect.height() / 2;\n children.push(new QuadNode(new Rect([\n rect.origin.x,\n rect.origin.y\n ], [\n halfWidth,\n halfHeight\n ])), new QuadNode(new Rect([\n center.x,\n rect.origin.y\n ], [\n halfWidth,\n halfHeight\n ])), new QuadNode(new Rect([\n rect.origin.x,\n center.y\n ], [\n halfWidth,\n halfHeight\n ])), new QuadNode(new Rect([\n center.x,\n center.y\n ], [\n halfWidth,\n halfHeight\n ])));\n }\n });\n var ROOT_SIZE = 3000;\n var LEVEL_STEP = 10000;\n var MAX_LEVEL = 75;\n var ShapesQuadTree = Class.extend({\n init: function () {\n this.initRoots();\n },\n initRoots: function () {\n this.rootMap = {};\n this.root = new QuadRoot();\n this.rootElements = [];\n },\n clear: function () {\n var this$1 = this;\n var rootElements = this.rootElements;\n for (var idx = 0; idx < rootElements.length; idx++) {\n this$1.remove(rootElements[idx]);\n }\n this.initRoots();\n },\n pointShape: function (point) {\n var sectorRoot = (this.rootMap[Math.floor(point.x / ROOT_SIZE)] || {})[Math.floor(point.y / ROOT_SIZE)];\n var result = this.root.pointShapes(point);\n if (sectorRoot) {\n result = result.concat(sectorRoot.pointShapes(point));\n }\n this.assignZindex(result);\n result.sort(zIndexComparer);\n for (var idx = 0; idx < result.length; idx++) {\n if (result[idx].containsPoint(point)) {\n return result[idx];\n }\n }\n },\n assignZindex: function (elements) {\n var this$1 = this;\n for (var idx = 0; idx < elements.length; idx++) {\n var element = elements[idx];\n var zIndex = 0;\n var levelWeight = Math.pow(LEVEL_STEP, MAX_LEVEL);\n var parents = [];\n while (element) {\n parents.push(element);\n element = element.parent;\n }\n while (parents.length) {\n element = parents.pop();\n zIndex += ((element.parent ? element.parent.children : this$1.rootElements).indexOf(element) + 1) * levelWeight;\n levelWeight /= LEVEL_STEP;\n }\n elements[idx]._zIndex = zIndex;\n }\n },\n optionsChange: function (e) {\n if (e.field === 'transform' || e.field === 'stroke.width') {\n this.bboxChange(e.element);\n }\n },\n geometryChange: function (e) {\n this.bboxChange(e.element);\n },\n bboxChange: function (element) {\n var this$1 = this;\n if (element.nodeType === 'Group') {\n for (var idx = 0; idx < element.children.length; idx++) {\n this$1.bboxChange(element.children[idx]);\n }\n } else {\n if (element._quadNode) {\n element._quadNode.remove(element);\n }\n this._insertShape(element);\n }\n },\n add: function (elements) {\n var elementsArray = Array.isArray(elements) ? elements.slice(0) : [elements];\n append(this.rootElements, elementsArray);\n this._insert(elementsArray);\n },\n childrenChange: function (e) {\n var this$1 = this;\n if (e.action === 'remove') {\n for (var idx = 0; idx < e.items.length; idx++) {\n this$1.remove(e.items[idx]);\n }\n } else {\n this._insert(Array.prototype.slice.call(e.items, 0));\n }\n },\n _insert: function (elements) {\n var this$1 = this;\n var element;\n while (elements.length > 0) {\n element = elements.pop();\n element.addObserver(this$1);\n if (element.nodeType === 'Group') {\n append(elements, element.children);\n } else {\n this$1._insertShape(element);\n }\n }\n },\n _insertShape: function (shape) {\n var bbox = shape.bbox();\n if (bbox) {\n var sectors = this.getSectors(bbox);\n var x = sectors[0][0];\n var y = sectors[1][0];\n if (this.inRoot(sectors)) {\n this.root.insert(shape, bbox);\n } else {\n var rootMap = this.rootMap;\n if (!rootMap[x]) {\n rootMap[x] = {};\n }\n if (!rootMap[x][y]) {\n rootMap[x][y] = new QuadNode(new Rect([\n x * ROOT_SIZE,\n y * ROOT_SIZE\n ], [\n ROOT_SIZE,\n ROOT_SIZE\n ]));\n }\n rootMap[x][y].insert(shape, bbox);\n }\n }\n },\n remove: function (element) {\n var this$1 = this;\n element.removeObserver(this);\n if (element.nodeType === 'Group') {\n var children = element.children;\n for (var idx = 0; idx < children.length; idx++) {\n this$1.remove(children[idx]);\n }\n } else if (element._quadNode) {\n element._quadNode.remove(element);\n delete element._quadNode;\n }\n },\n inRoot: function (sectors) {\n return sectors[0].length > 1 || sectors[1].length > 1;\n },\n getSectors: function (rect) {\n var bottomRight = rect.bottomRight();\n var bottomX = Math.floor(bottomRight.x / ROOT_SIZE);\n var bottomY = Math.floor(bottomRight.y / ROOT_SIZE);\n var sectors = [\n [],\n []\n ];\n for (var x = Math.floor(rect.origin.x / ROOT_SIZE); x <= bottomX; x++) {\n sectors[0].push(x);\n }\n for (var y = Math.floor(rect.origin.y / ROOT_SIZE); y <= bottomY; y++) {\n sectors[1].push(y);\n }\n return sectors;\n }\n });\n function zIndexComparer(x1, x2) {\n if (x1._zIndex < x2._zIndex) {\n return 1;\n }\n if (x1._zIndex > x2._zIndex) {\n return -1;\n }\n return 0;\n }\n var SurfaceCursor = Class.extend({\n init: function (surface) {\n surface.bind('mouseenter', this._mouseenter.bind(this));\n surface.bind('mouseleave', this._mouseleave.bind(this));\n this.element = surface.element;\n },\n clear: function () {\n this._resetCursor();\n },\n destroy: function () {\n this._resetCursor();\n delete this.element;\n },\n _mouseenter: function (e) {\n var cursor = this._shapeCursor(e);\n if (!cursor) {\n this._resetCursor();\n } else {\n if (!this._current) {\n this._defaultCursor = this._getCursor();\n }\n this._setCursor(cursor);\n }\n },\n _mouseleave: function () {\n this._resetCursor();\n },\n _shapeCursor: function (e) {\n var shape = e.element;\n while (shape && !defined(shape.options.cursor)) {\n shape = shape.parent;\n }\n if (shape) {\n return shape.options.cursor;\n }\n },\n _getCursor: function () {\n if (this.element) {\n return this.element.style.cursor;\n }\n },\n _setCursor: function (cursor) {\n if (this.element) {\n this.element.style.cursor = cursor;\n this._current = cursor;\n }\n },\n _resetCursor: function () {\n if (this._current) {\n this._setCursor(this._defaultCursor || '');\n delete this._current;\n }\n }\n });\n var Surface$3 = Surface.extend({\n init: function (element, options) {\n Surface.fn.init.call(this, element, options);\n this.element.innerHTML = this._template(this);\n var canvas = this.element.firstElementChild;\n var size = elementSize(element);\n canvas.width = size.width;\n canvas.height = size.height;\n this._rootElement = canvas;\n this._root = new RootNode$2(canvas);\n this._mouseTrackHandler = this._trackMouse.bind(this);\n bindEvents(this.element, {\n click: this._mouseTrackHandler,\n mousemove: this._mouseTrackHandler\n });\n },\n destroy: function () {\n Surface.fn.destroy.call(this);\n if (this._root) {\n this._root.destroy();\n this._root = null;\n }\n if (this._searchTree) {\n this._searchTree.clear();\n delete this._searchTree;\n }\n if (this._cursor) {\n this._cursor.destroy();\n delete this._cursor;\n }\n unbindEvents(this.element, {\n click: this._mouseTrackHandler,\n mousemove: this._mouseTrackHandler\n });\n },\n draw: function (element) {\n Surface.fn.draw.call(this, element);\n this._root.load([element], undefined, this.options.cors);\n if (this._searchTree) {\n this._searchTree.add([element]);\n }\n },\n clear: function () {\n Surface.fn.clear.call(this);\n this._root.clear();\n if (this._searchTree) {\n this._searchTree.clear();\n }\n if (this._cursor) {\n this._cursor.clear();\n }\n },\n eventTarget: function (e) {\n if (this._searchTree) {\n var point = this._surfacePoint(e);\n var shape = this._searchTree.pointShape(point);\n return shape;\n }\n },\n image: function () {\n var ref = this;\n var root = ref._root;\n var rootElement = ref._rootElement;\n var loadingStates = [];\n root.traverse(function (childNode) {\n if (childNode.loading) {\n loadingStates.push(childNode.loading);\n }\n });\n var promise = createPromise();\n var resolveDataURL = function () {\n root._invalidate();\n try {\n var data = rootElement.toDataURL();\n promise.resolve(data);\n } catch (e) {\n promise.reject(e);\n }\n };\n promiseAll(loadingStates).then(resolveDataURL, resolveDataURL);\n return promise;\n },\n suspendTracking: function () {\n Surface.fn.suspendTracking.call(this);\n if (this._searchTree) {\n this._searchTree.clear();\n delete this._searchTree;\n }\n },\n resumeTracking: function () {\n Surface.fn.resumeTracking.call(this);\n if (!this._searchTree) {\n this._searchTree = new ShapesQuadTree();\n var childNodes = this._root.childNodes;\n var rootElements = [];\n for (var idx = 0; idx < childNodes.length; idx++) {\n rootElements.push(childNodes[idx].srcElement);\n }\n this._searchTree.add(rootElements);\n }\n },\n _resize: function () {\n this._rootElement.width = this._size.width;\n this._rootElement.height = this._size.height;\n this._root.invalidate();\n },\n _template: function () {\n return '';\n },\n _enableTracking: function () {\n this._searchTree = new ShapesQuadTree();\n this._cursor = new SurfaceCursor(this);\n Surface.fn._enableTracking.call(this);\n },\n _trackMouse: function (e) {\n if (this._suspendedTracking) {\n return;\n }\n var shape = this.eventTarget(e);\n if (e.type !== 'click') {\n var currentShape = this._currentShape;\n if (currentShape && currentShape !== shape) {\n this.trigger('mouseleave', {\n element: currentShape,\n originalEvent: e,\n type: 'mouseleave'\n });\n }\n if (shape && currentShape !== shape) {\n this.trigger('mouseenter', {\n element: shape,\n originalEvent: e,\n type: 'mouseenter'\n });\n }\n this.trigger('mousemove', {\n element: shape,\n originalEvent: e,\n type: 'mousemove'\n });\n this._currentShape = shape;\n } else if (shape) {\n this.trigger('click', {\n element: shape,\n originalEvent: e,\n type: 'click'\n });\n }\n }\n });\n Surface$3.prototype.type = 'canvas';\n if (typeof document !== 'undefined' && document.createElement('canvas').getContext) {\n Surface.support.canvas = true;\n SurfaceFactory.current.register('canvas', Surface$3, 20);\n }\n function addGradientStops(gradient, stops) {\n for (var idx = 0; idx < stops.length; idx++) {\n var stop = stops[idx];\n var color = kendo.parseColor(stop.color());\n color.a *= stop.opacity();\n gradient.addColorStop(stop.offset(), color.toCssRgba());\n }\n }\n var PathNode$2 = Node$2.extend({\n renderTo: function (ctx) {\n ctx.save();\n this.setTransform(ctx);\n this.setClip(ctx);\n this.setOpacity(ctx);\n ctx.beginPath();\n this.renderPoints(ctx, this.srcElement);\n this.setLineDash(ctx);\n this.setLineCap(ctx);\n this.setLineJoin(ctx);\n this.setFill(ctx);\n this.setStroke(ctx);\n ctx.restore();\n },\n setFill: function (ctx) {\n var fill = this.srcElement.options.fill;\n var hasFill = false;\n if (fill) {\n if (fill.nodeType === 'Gradient') {\n this.setGradientFill(ctx, fill);\n hasFill = true;\n } else if (!isTransparent(fill.color)) {\n ctx.fillStyle = fill.color;\n ctx.save();\n this.globalAlpha(ctx, fill.opacity);\n ctx.fill();\n ctx.restore();\n hasFill = true;\n }\n }\n return hasFill;\n },\n setGradientFill: function (ctx, fill) {\n var bbox = this.srcElement.rawBBox();\n var gradient;\n if (fill instanceof LinearGradient) {\n var start = fill.start();\n var end = fill.end();\n gradient = ctx.createLinearGradient(start.x, start.y, end.x, end.y);\n } else if (fill instanceof RadialGradient) {\n var center = fill.center();\n gradient = ctx.createRadialGradient(center.x, center.y, 0, center.x, center.y, fill.radius());\n }\n addGradientStops(gradient, fill.stops);\n ctx.save();\n if (!fill.userSpace()) {\n ctx.transform(bbox.width(), 0, 0, bbox.height(), bbox.origin.x, bbox.origin.y);\n }\n ctx.fillStyle = gradient;\n ctx.fill();\n ctx.restore();\n },\n setStroke: function (ctx) {\n var stroke = this.srcElement.options.stroke;\n if (stroke && !isTransparent(stroke.color) && stroke.width > 0) {\n ctx.strokeStyle = stroke.color;\n ctx.lineWidth = valueOrDefault(stroke.width, 1);\n ctx.save();\n this.globalAlpha(ctx, stroke.opacity);\n ctx.stroke();\n ctx.restore();\n return true;\n }\n },\n dashType: function () {\n var stroke = this.srcElement.options.stroke;\n if (stroke && stroke.dashType) {\n return stroke.dashType.toLowerCase();\n }\n },\n setLineDash: function (ctx) {\n var dashType = this.dashType();\n if (dashType && dashType !== SOLID) {\n var dashArray = DASH_ARRAYS[dashType];\n if (ctx.setLineDash) {\n ctx.setLineDash(dashArray);\n } else {\n ctx.mozDash = dashArray;\n ctx.webkitLineDash = dashArray;\n }\n }\n },\n setLineCap: function (ctx) {\n var dashType = this.dashType();\n var stroke = this.srcElement.options.stroke;\n if (dashType && dashType !== SOLID) {\n ctx.lineCap = BUTT;\n } else if (stroke && stroke.lineCap) {\n ctx.lineCap = stroke.lineCap;\n }\n },\n setLineJoin: function (ctx) {\n var stroke = this.srcElement.options.stroke;\n if (stroke && stroke.lineJoin) {\n ctx.lineJoin = stroke.lineJoin;\n }\n },\n renderPoints: function (ctx, path) {\n renderPath(ctx, path);\n }\n });\n NODE_MAP$2.Path = PathNode$2;\n var ArcNode$2 = PathNode$2.extend({\n renderPoints: function (ctx) {\n var path = this.srcElement.toPath();\n renderPath(ctx, path);\n }\n });\n NODE_MAP$2.Arc = ArcNode$2;\n var CircleNode$2 = PathNode$2.extend({\n renderPoints: function (ctx) {\n var ref = this.srcElement.geometry();\n var center = ref.center;\n var radius = ref.radius;\n ctx.arc(center.x, center.y, radius, 0, Math.PI * 2);\n }\n });\n NODE_MAP$2.Circle = CircleNode$2;\n var RectNode$2 = PathNode$2.extend({\n renderPoints: function (ctx) {\n var ref = this.srcElement.geometry();\n var origin = ref.origin;\n var size = ref.size;\n ctx.rect(origin.x, origin.y, size.width, size.height);\n }\n });\n NODE_MAP$2.Rect = RectNode$2;\n var ImageNode$2 = PathNode$2.extend({\n init: function (srcElement, cors) {\n PathNode$2.fn.init.call(this, srcElement);\n this.onLoad = this.onLoad.bind(this);\n this.onError = this.onError.bind(this);\n this.loading = createPromise();\n var img = this.img = new Image();\n if (cors && !/^data:/i.test(srcElement.src())) {\n img.crossOrigin = cors;\n }\n img.src = srcElement.src();\n if (img.complete) {\n this.onLoad();\n } else {\n img.onload = this.onLoad;\n img.onerror = this.onError;\n }\n },\n renderTo: function (ctx) {\n if (this.loading.state() === 'resolved') {\n ctx.save();\n this.setTransform(ctx);\n this.setClip(ctx);\n this.drawImage(ctx);\n ctx.restore();\n }\n },\n optionsChange: function (e) {\n if (e.field === 'src') {\n this.loading = createPromise();\n this.img.src = this.srcElement.src();\n } else {\n PathNode$2.fn.optionsChange.call(this, e);\n }\n },\n onLoad: function () {\n this.loading.resolve();\n this.invalidate();\n },\n onError: function () {\n this.loading.reject(new Error('Unable to load image \\'' + this.img.src + '\\'. Check for connectivity and verify CORS headers.'));\n },\n drawImage: function (ctx) {\n var rect = this.srcElement.rect();\n var topLeft = rect.topLeft();\n ctx.drawImage(this.img, topLeft.x, topLeft.y, rect.width(), rect.height());\n }\n });\n NODE_MAP$2.Image = ImageNode$2;\n var TextNode$2 = PathNode$2.extend({\n renderTo: function (ctx) {\n var text = this.srcElement;\n var pos = text.position();\n var size = text.measure();\n ctx.save();\n this.setTransform(ctx);\n this.setClip(ctx);\n this.setOpacity(ctx);\n ctx.beginPath();\n ctx.font = text.options.font;\n ctx.textAlign = 'left';\n if (this.setFill(ctx)) {\n ctx.fillText(text.content(), pos.x, pos.y + size.baseline);\n }\n if (this.setStroke(ctx)) {\n this.setLineDash(ctx);\n ctx.strokeText(text.content(), pos.x, pos.y + size.baseline);\n }\n ctx.restore();\n }\n });\n NODE_MAP$2.Text = TextNode$2;\n var MultiPathNode$2 = PathNode$2.extend({\n renderPoints: function (ctx) {\n var paths = this.srcElement.paths;\n for (var i = 0; i < paths.length; i++) {\n renderPath(ctx, paths[i]);\n }\n }\n });\n NODE_MAP$2.MultiPath = MultiPathNode$2;\n var canvas = {\n Surface: Surface$3,\n RootNode: RootNode$2,\n Node: Node$2,\n GroupNode: GroupNode$2,\n ArcNode: ArcNode$2,\n CircleNode: CircleNode$2,\n RectNode: RectNode$2,\n ImageNode: ImageNode$2,\n TextNode: TextNode$2,\n PathNode: PathNode$2,\n MultiPathNode: MultiPathNode$2\n };\n function exportImage(group, options) {\n var defaults = {\n width: '800px',\n height: '600px',\n cors: 'Anonymous'\n };\n var exportRoot = group;\n var bbox = group.clippedBBox();\n if (bbox) {\n var origin = bbox.getOrigin();\n exportRoot = new Group();\n exportRoot.transform(transform().translate(-origin.x, -origin.y));\n exportRoot.children.push(group);\n var size = bbox.getSize();\n defaults.width = size.width + 'px';\n defaults.height = size.height + 'px';\n }\n var surfaceOptions = $.extend(defaults, options);\n var container = document.createElement('div');\n var style = container.style;\n style.display = 'none';\n style.width = surfaceOptions.width;\n style.height = surfaceOptions.height;\n document.body.appendChild(container);\n var surface = new Surface$3(container, surfaceOptions);\n surface.suspendTracking();\n surface.draw(exportRoot);\n var promise = surface.image();\n var destroy = function () {\n surface.destroy();\n document.body.removeChild(container);\n };\n promise.then(destroy, destroy);\n return promise;\n }\n function exportSVG(group, options) {\n var svg = exportGroup(group);\n if (!options || !options.raw) {\n svg = 'data:image/svg+xml;base64,' + encodeBase64(svg);\n }\n return createPromise().resolve(svg);\n }\n var browser = support.browser;\n function slice$1(thing) {\n return Array.prototype.slice.call(thing);\n }\n var KENDO_PSEUDO_ELEMENT = 'KENDO-PSEUDO-ELEMENT';\n var IMAGE_CACHE = {};\n var nodeInfo = {};\n nodeInfo._root = nodeInfo;\n var TextRect = Text.extend({\n init: function (str, rect, options) {\n Text.fn.init.call(this, str, rect.getOrigin(), options);\n this._pdfRect = rect;\n },\n rect: function () {\n return this._pdfRect;\n },\n rawBBox: function () {\n return this._pdfRect;\n }\n });\n function addClass(el, cls) {\n if (el.classList) {\n el.classList.add(cls);\n } else {\n el.className += ' ' + cls;\n }\n }\n function removeClass(el, cls) {\n if (el.classList) {\n el.classList.remove(cls);\n } else {\n el.className = el.className.split(/\\s+/).reduce(function (a, word) {\n if (word != cls) {\n a.push(word);\n }\n return a;\n }, []).join(' ');\n }\n }\n function setCSS(el, styles) {\n Object.keys(styles).forEach(function (key) {\n el.style[key] = styles[key];\n });\n }\n var matches = typeof Element !== 'undefined' && Element.prototype && function (p) {\n if (p.matches) {\n return function (el, selector) {\n return el.matches(selector);\n };\n }\n if (p.webkitMatchesSelector) {\n return function (el, selector) {\n return el.webkitMatchesSelector(selector);\n };\n }\n if (p.mozMatchesSelector) {\n return function (el, selector) {\n return el.mozMatchesSelector(selector);\n };\n }\n if (p.msMatchesSelector) {\n return function (el, selector) {\n return el.msMatchesSelector(selector);\n };\n }\n return function (s) {\n return [].indexOf.call(document.querySelectorAll(s), this) !== -1;\n };\n }(Element.prototype);\n function closest(el, selector) {\n if (el.closest) {\n return el.closest(selector);\n }\n while (el && !/^\\[object (?:HTML)?Document\\]$/.test(String(el))) {\n if (matches(el, selector)) {\n return el;\n }\n el = el.parentNode;\n }\n }\n var cloneNodes = function ($) {\n if ($) {\n return function cloneNodes(el) {\n var clone = el.cloneNode(false);\n if (el.nodeType == 1) {\n var $el = $(el), $clone = $(clone), i;\n var data = $el.data();\n for (i in data) {\n $clone.data(i, data[i]);\n }\n if (/^canvas$/i.test(el.tagName)) {\n clone.getContext('2d').drawImage(el, 0, 0);\n } else if (/^(?:input|select|textarea|option)$/i.test(el.tagName)) {\n clone.removeAttribute('id');\n clone.removeAttribute('name');\n clone.value = el.value;\n clone.checked = el.checked;\n clone.selected = el.selected;\n }\n for (i = el.firstChild; i; i = i.nextSibling) {\n clone.appendChild(cloneNodes(i));\n }\n }\n return clone;\n };\n } else {\n return function cloneNodes(el) {\n var clone = el.cloneNode(true);\n var canvases = el.querySelectorAll('canvas');\n if (canvases.length) {\n slice$1(clone.querySelectorAll('canvas')).forEach(function (canvas$$1, i) {\n canvas$$1.getContext('2d').drawImage(canvases[i], 0, 0);\n });\n }\n var orig = el.querySelectorAll('input, select, textarea, option');\n slice$1(clone.querySelectorAll('input, select, textarea, option')).forEach(function (el, i) {\n el.removeAttribute('id');\n el.removeAttribute('name');\n el.value = orig[i].value;\n el.checked = orig[i].checked;\n el.selected = orig[i].selected;\n });\n return clone;\n };\n }\n }(typeof window !== 'undefined' && window.kendo && window.kendo.jQuery);\n function getXY(thing) {\n if (typeof thing == 'number') {\n return {\n x: thing,\n y: thing\n };\n }\n if (Array.isArray(thing)) {\n return {\n x: thing[0],\n y: thing[1]\n };\n }\n return {\n x: thing.x,\n y: thing.y\n };\n }\n function drawDOM(element, options) {\n if (!options) {\n options = {};\n }\n var promise = createPromise();\n if (!element) {\n return promise.reject('No element to export');\n }\n if (typeof window.getComputedStyle != 'function') {\n throw new Error('window.getComputedStyle is missing. You are using an unsupported browser, or running in IE8 compatibility mode. Drawing HTML is supported in Chrome, Firefox, Safari and IE9+.');\n }\n kendo.pdf.defineFont(getFontFaces(element.ownerDocument));\n var scale = getXY(options.scale || 1);\n function doOne(element) {\n var group = new Group();\n var pos = element.getBoundingClientRect();\n setTransform(group, [\n scale.x,\n 0,\n 0,\n scale.y,\n -pos.left * scale.x,\n -pos.top * scale.y\n ]);\n nodeInfo._clipbox = false;\n nodeInfo._matrix = Matrix.unit();\n nodeInfo._stackingContext = {\n element: element,\n group: group\n };\n if (options.avoidLinks === true) {\n nodeInfo._avoidLinks = 'a';\n } else {\n nodeInfo._avoidLinks = options.avoidLinks;\n }\n addClass(element, 'k-pdf-export');\n renderElement(element, group);\n removeClass(element, 'k-pdf-export');\n return group;\n }\n cacheImages(element, function () {\n var forceBreak = options && options.forcePageBreak;\n var hasPaperSize = options && options.paperSize && options.paperSize != 'auto';\n var paperOptions = kendo.pdf.getPaperOptions(function (key, def) {\n if (key == 'paperSize') {\n return hasPaperSize ? options[key] : 'A4';\n }\n return key in options ? options[key] : def;\n });\n var pageWidth = hasPaperSize && paperOptions.paperSize[0];\n var pageHeight = hasPaperSize && paperOptions.paperSize[1];\n var margin = options.margin && paperOptions.margin;\n var hasMargin = Boolean(margin);\n if (forceBreak || pageHeight) {\n if (!margin) {\n margin = {\n left: 0,\n top: 0,\n right: 0,\n bottom: 0\n };\n }\n if (pageWidth) {\n pageWidth /= scale.x;\n }\n if (pageHeight) {\n pageHeight /= scale.y;\n }\n margin.left /= scale.x;\n margin.right /= scale.x;\n margin.top /= scale.y;\n margin.bottom /= scale.y;\n var group = new Group({\n pdf: {\n multiPage: true,\n paperSize: hasPaperSize ? paperOptions.paperSize : 'auto',\n _ignoreMargin: hasMargin\n }\n });\n handlePageBreaks(function (x) {\n if (options.progress) {\n var canceled = false, pageNum = 0;\n (function next() {\n if (pageNum < x.pages.length) {\n var page = doOne(x.pages[pageNum]);\n group.append(page);\n options.progress({\n page: page,\n pageNum: ++pageNum,\n totalPages: x.pages.length,\n cancel: function () {\n canceled = true;\n }\n });\n if (!canceled) {\n setTimeout(next);\n } else {\n x.container.parentNode.removeChild(x.container);\n }\n } else {\n x.container.parentNode.removeChild(x.container);\n promise.resolve(group);\n }\n }());\n } else {\n x.pages.forEach(function (page) {\n group.append(doOne(page));\n });\n x.container.parentNode.removeChild(x.container);\n promise.resolve(group);\n }\n }, element, forceBreak, pageWidth ? pageWidth - margin.left - margin.right : null, pageHeight ? pageHeight - margin.top - margin.bottom : null, margin, options);\n } else {\n promise.resolve(doOne(element));\n }\n });\n function makeTemplate(template$$1) {\n if (template$$1 != null) {\n if (typeof template$$1 == 'string') {\n template$$1 = kendo.template(template$$1.replace(/^\\s+|\\s+$/g, ''));\n }\n if (typeof template$$1 == 'function') {\n return function (data) {\n var el = template$$1(data);\n if (el && typeof el == 'string') {\n var div = document.createElement('div');\n div.innerHTML = el;\n el = div.firstElementChild;\n }\n return el;\n };\n }\n return function () {\n return template$$1.cloneNode(true);\n };\n }\n }\n function handlePageBreaks(callback, element, forceBreak, pageWidth, pageHeight, margin, options) {\n var template$$1 = makeTemplate(options.template);\n var doc = element.ownerDocument;\n var pages = [];\n var copy = options._destructive ? element : cloneNodes(element);\n var container = doc.createElement('KENDO-PDF-DOCUMENT');\n var adjust = 0;\n slice$1(copy.querySelectorAll('tfoot')).forEach(function (tfoot) {\n tfoot.parentNode.appendChild(tfoot);\n });\n slice$1(copy.querySelectorAll('ol')).forEach(function (ol) {\n slice$1(ol.children).forEach(function (li, index) {\n li.setAttribute('kendo-split-index', index);\n });\n });\n setCSS(container, {\n display: 'block',\n position: 'absolute',\n boxSizing: 'content-box',\n left: '-10000px',\n top: '-10000px'\n });\n if (pageWidth) {\n setCSS(container, {\n width: pageWidth + 'px',\n paddingLeft: margin.left + 'px',\n paddingRight: margin.right + 'px'\n });\n setCSS(copy, { overflow: 'hidden' });\n }\n element.parentNode.insertBefore(container, element);\n container.appendChild(copy);\n if (options.beforePageBreak) {\n setTimeout(function () {\n options.beforePageBreak(container, doPageBreak);\n }, 15);\n } else {\n setTimeout(doPageBreak, 15);\n }\n function doPageBreak() {\n if (forceBreak != '-' || pageHeight) {\n splitElement(copy);\n }\n var page = makePage();\n copy.parentNode.insertBefore(page, copy);\n page.appendChild(copy);\n if (template$$1) {\n var count = pages.length;\n pages.forEach(function (page, i) {\n var el = template$$1({\n element: page,\n pageNum: i + 1,\n totalPages: pages.length\n });\n if (el) {\n page.appendChild(el);\n cacheImages(el, function () {\n if (--count === 0) {\n next();\n }\n });\n }\n });\n } else {\n next();\n }\n function next() {\n whenImagesAreActuallyLoaded(pages, function () {\n callback({\n pages: pages,\n container: container\n });\n });\n }\n }\n function keepTogether(el) {\n if (options.keepTogether && matches(el, options.keepTogether) && el.offsetHeight <= pageHeight - adjust) {\n return true;\n }\n var tag = el.tagName;\n if (/^h[1-6]$/i.test(tag) && el.offsetHeight >= pageHeight - adjust) {\n return false;\n }\n return el.getAttribute('data-kendo-chart') || /^(?:img|tr|thead|th|tfoot|iframe|svg|object|canvas|input|textarea|select|video|h[1-6])/i.test(el.tagName);\n }\n function splitElement(element) {\n if (element.tagName == 'TABLE') {\n setCSS(element, { tableLayout: 'fixed' });\n }\n var style = getComputedStyle(element);\n var bottomPadding = parseFloat(getPropertyValue(style, 'padding-bottom'));\n var bottomBorder = parseFloat(getPropertyValue(style, 'border-bottom-width'));\n var saveAdjust = adjust;\n adjust += bottomPadding + bottomBorder;\n var isFirst = true;\n for (var el = element.firstChild; el; el = el.nextSibling) {\n if (el.nodeType == 1) {\n isFirst = false;\n if (matches(el, forceBreak)) {\n breakAtElement(el);\n continue;\n }\n if (!pageHeight) {\n splitElement(el);\n continue;\n }\n if (!/^(?:static|relative)$/.test(getPropertyValue(getComputedStyle(el), 'position'))) {\n continue;\n }\n var fall = fallsOnMargin(el);\n if (fall == 1) {\n breakAtElement(el);\n } else if (fall) {\n if (keepTogether(el)) {\n breakAtElement(el);\n } else {\n splitElement(el);\n }\n } else {\n splitElement(el);\n }\n } else if (el.nodeType == 3 && pageHeight) {\n splitText(el, isFirst);\n isFirst = false;\n }\n }\n adjust = saveAdjust;\n }\n function firstInParent(el) {\n var p = el.parentNode, first = p.firstChild;\n if (el === first) {\n return true;\n }\n if (el === p.children[0]) {\n if (first.nodeType == 7 || first.nodeType == 8) {\n return true;\n }\n if (first.nodeType == 3) {\n return !/\\S/.test(first.data);\n }\n }\n return false;\n }\n function breakAtElement(el) {\n if (el.nodeType == 1 && el !== copy && firstInParent(el)) {\n return breakAtElement(el.parentNode);\n }\n var table, colgroup, thead, grid, gridHead;\n table = closest(el, 'table');\n colgroup = table && table.querySelector('colgroup');\n if (options.repeatHeaders) {\n thead = table && table.querySelector('thead');\n grid = closest(el, '.k-grid.k-widget');\n if (grid && grid.querySelector('.k-auto-scrollable')) {\n gridHead = grid.querySelector('.k-grid-header');\n }\n }\n var page = makePage();\n var range = doc.createRange();\n range.setStartBefore(copy);\n range.setEndBefore(el);\n page.appendChild(range.extractContents());\n copy.parentNode.insertBefore(page, copy);\n preventBulletOnListItem(el.parentNode);\n if (table) {\n table = closest(el, 'table');\n if (options.repeatHeaders && thead) {\n table.insertBefore(thead.cloneNode(true), table.firstChild);\n }\n if (colgroup) {\n table.insertBefore(colgroup.cloneNode(true), table.firstChild);\n }\n }\n if (options.repeatHeaders && gridHead) {\n grid = closest(el, '.k-grid.k-widget');\n grid.insertBefore(gridHead.cloneNode(true), grid.firstChild);\n }\n }\n function makePage() {\n var page = doc.createElement('KENDO-PDF-PAGE');\n setCSS(page, {\n display: 'block',\n boxSizing: 'content-box',\n width: pageWidth ? pageWidth + 'px' : 'auto',\n padding: margin.top + 'px ' + margin.right + 'px ' + margin.bottom + 'px ' + margin.left + 'px',\n position: 'relative',\n height: pageHeight ? pageHeight + 'px' : 'auto',\n overflow: pageHeight || pageWidth ? 'hidden' : 'visible',\n clear: 'both'\n });\n if (options && options.pageClassName) {\n page.className = options.pageClassName;\n }\n pages.push(page);\n return page;\n }\n function fallsOnMargin(thing) {\n var box = thing.getBoundingClientRect();\n if (box.width === 0 || box.height === 0) {\n return 0;\n }\n var top = copy.getBoundingClientRect().top;\n var available = pageHeight - adjust;\n return box.height > available ? 3 : box.top - top > available ? 1 : box.bottom - top > available ? 2 : 0;\n }\n function splitText(node, isFirst) {\n if (!/\\S/.test(node.data)) {\n return;\n }\n var len = node.data.length;\n var range = doc.createRange();\n range.selectNodeContents(node);\n var fall = fallsOnMargin(range);\n if (!fall) {\n return;\n }\n var nextnode = node;\n if (fall == 1) {\n if (isFirst) {\n breakAtElement(node.parentNode);\n } else {\n breakAtElement(node);\n }\n } else {\n (function findEOP(min, pos, max) {\n range.setEnd(node, pos);\n if (min == pos || pos == max) {\n return pos;\n }\n if (fallsOnMargin(range)) {\n return findEOP(min, min + pos >> 1, pos);\n } else {\n return findEOP(pos, pos + max >> 1, max);\n }\n }(0, len >> 1, len));\n if (!/\\S/.test(range.toString()) && isFirst) {\n breakAtElement(node.parentNode);\n } else {\n nextnode = node.splitText(range.endOffset);\n var page = makePage();\n range.setStartBefore(copy);\n page.appendChild(range.extractContents());\n copy.parentNode.insertBefore(page, copy);\n preventBulletOnListItem(nextnode.parentNode);\n }\n }\n splitText(nextnode);\n }\n function preventBulletOnListItem(el) {\n var li = closest(el, 'li');\n if (li) {\n li.setAttribute('kendo-no-bullet', '1');\n preventBulletOnListItem(li.parentNode);\n }\n }\n }\n return promise;\n }\n drawDOM.getFontFaces = getFontFaces;\n drawDOM.drawText = function (element) {\n var group = new Group();\n nodeInfo._clipbox = false;\n nodeInfo._matrix = Matrix.unit();\n nodeInfo._stackingContext = {\n element: element,\n group: group\n };\n pushNodeInfo(element, getComputedStyle(element), group);\n if (element.firstChild.nodeType == 3) {\n renderText(element, element.firstChild, group);\n } else {\n _renderElement(element, group);\n }\n popNodeInfo();\n return group;\n };\n var parseBackgroundImage = function () {\n var tok_linear_gradient = /^((-webkit-|-moz-|-o-|-ms-)?linear-gradient\\s*)\\(/;\n var tok_percent = /^([-0-9.]+%)/;\n var tok_length = /^([-0-9.]+px)/;\n var tok_keyword = /^(left|right|top|bottom|to|center)\\W/;\n var tok_angle = /^([-0-9.]+(deg|grad|rad|turn))/;\n var tok_whitespace = /^(\\s+)/;\n var tok_popen = /^(\\()/;\n var tok_pclose = /^(\\))/;\n var tok_comma = /^(,)/;\n var tok_url = /^(url)\\(/;\n var tok_content = /^(.*?)\\)/;\n var cache1 = {}, cache2 = {};\n function parse(input) {\n var orig = input;\n if (hasOwnProperty(cache1, orig)) {\n return cache1[orig];\n }\n function skip_ws() {\n var m = tok_whitespace.exec(input);\n if (m) {\n input = input.substr(m[1].length);\n }\n }\n function read(token) {\n skip_ws();\n var m = token.exec(input);\n if (m) {\n input = input.substr(m[1].length);\n return m[1];\n }\n }\n function read_stop() {\n var color = kendo.parseColor(input, true);\n var length, percent;\n if (color) {\n var match = /^#[0-9a-f]+/i.exec(input) || /^rgba?\\(.*?\\)/i.exec(input) || /^..*?\\b/.exec(input);\n input = input.substr(match[0].length);\n color = color.toRGB();\n if (!(length = read(tok_length))) {\n percent = read(tok_percent);\n }\n return {\n color: color,\n length: length,\n percent: percent\n };\n }\n }\n function read_linear_gradient(propName) {\n var angle;\n var to1, to2;\n var stops = [];\n var reverse = false;\n if (read(tok_popen)) {\n angle = read(tok_angle);\n if (angle) {\n angle = parseAngle(angle);\n read(tok_comma);\n } else {\n to1 = read(tok_keyword);\n if (to1 == 'to') {\n to1 = read(tok_keyword);\n } else if (to1 && /^-/.test(propName)) {\n reverse = true;\n }\n to2 = read(tok_keyword);\n read(tok_comma);\n }\n if (/-moz-/.test(propName) && angle == null && to1 == null) {\n var x = read(tok_percent), y = read(tok_percent);\n reverse = true;\n if (x == '0%') {\n to1 = 'left';\n } else if (x == '100%') {\n to1 = 'right';\n }\n if (y == '0%') {\n to2 = 'top';\n } else if (y == '100%') {\n to2 = 'bottom';\n }\n read(tok_comma);\n }\n while (input && !read(tok_pclose)) {\n var stop = read_stop();\n if (!stop) {\n break;\n }\n stops.push(stop);\n read(tok_comma);\n }\n return {\n type: 'linear',\n angle: angle,\n to: to1 && to2 ? to1 + ' ' + to2 : to1 ? to1 : to2 ? to2 : null,\n stops: stops,\n reverse: reverse\n };\n }\n }\n function read_url() {\n if (read(tok_popen)) {\n var url = read(tok_content);\n url = url.replace(/^['\"]+|[\"']+$/g, '');\n read(tok_pclose);\n return {\n type: 'url',\n url: url\n };\n }\n }\n var tok;\n if (tok = read(tok_linear_gradient)) {\n tok = read_linear_gradient(tok);\n } else if (tok = read(tok_url)) {\n tok = read_url();\n }\n return cache1[orig] = tok || { type: 'none' };\n }\n return function (input) {\n if (hasOwnProperty(cache2, input)) {\n return cache2[input];\n }\n return cache2[input] = splitProperty(input).map(parse);\n };\n }();\n var splitProperty = function () {\n var cache = {};\n return function (input, separator) {\n if (!separator) {\n separator = /^\\s*,\\s*/;\n }\n var cacheKey = input + separator;\n if (hasOwnProperty(cache, cacheKey)) {\n return cache[cacheKey];\n }\n var ret = [];\n var last$$1 = 0, pos = 0;\n var in_paren = 0;\n var in_string = false;\n var m;\n function looking_at(rx) {\n return m = rx.exec(input.substr(pos));\n }\n function trim(str) {\n return str.replace(/^\\s+|\\s+$/g, '');\n }\n while (pos < input.length) {\n if (!in_string && looking_at(/^[\\(\\[\\{]/)) {\n in_paren++;\n pos++;\n } else if (!in_string && looking_at(/^[\\)\\]\\}]/)) {\n in_paren--;\n pos++;\n } else if (!in_string && looking_at(/^[\\\"\\']/)) {\n in_string = m[0];\n pos++;\n } else if (in_string == '\\'' && looking_at(/^\\\\\\'/)) {\n pos += 2;\n } else if (in_string == '\"' && looking_at(/^\\\\\\\"/)) {\n pos += 2;\n } else if (in_string == '\\'' && looking_at(/^\\'/)) {\n in_string = false;\n pos++;\n } else if (in_string == '\"' && looking_at(/^\\\"/)) {\n in_string = false;\n pos++;\n } else if (looking_at(separator)) {\n if (!in_string && !in_paren && pos > last$$1) {\n ret.push(trim(input.substring(last$$1, pos)));\n last$$1 = pos + m[0].length;\n }\n pos += m[0].length;\n } else {\n pos++;\n }\n }\n if (last$$1 < pos) {\n ret.push(trim(input.substring(last$$1, pos)));\n }\n return cache[cacheKey] = ret;\n };\n }();\n var getFontURL = function (cache) {\n return function (el) {\n var url = cache[el];\n if (!url) {\n var m;\n if (m = /url\\((['\"]?)([^'\")]*?)\\1\\)\\s+format\\((['\"]?)truetype\\3\\)/.exec(el)) {\n url = cache[el] = m[2];\n } else if (m = /url\\((['\"]?)([^'\")]*?\\.ttf)\\1\\)/.exec(el)) {\n url = cache[el] = m[2];\n }\n }\n return url;\n };\n }(Object.create ? Object.create(null) : {});\n var getFontHeight = function (cache) {\n return function (font) {\n var height = cache[font];\n if (height == null) {\n height = cache[font] = kendoUtil.measureText('Mapq', { font: font }).height;\n }\n return height;\n };\n }(Object.create ? Object.create(null) : {});\n function getFontFaces(doc) {\n if (doc == null) {\n doc = document;\n }\n var result = {};\n for (var i = 0; i < doc.styleSheets.length; ++i) {\n doStylesheet(doc.styleSheets[i]);\n }\n return result;\n function doStylesheet(ss) {\n if (ss) {\n var rules = null;\n try {\n rules = ss.cssRules;\n } catch (ex) {\n }\n if (rules) {\n addRules(ss, rules);\n }\n }\n }\n function findFonts(rule) {\n var src = getPropertyValue(rule.style, 'src');\n if (src) {\n return splitProperty(src).reduce(function (a, el) {\n var font = getFontURL(el);\n if (font) {\n a.push(font);\n }\n return a;\n }, []);\n } else {\n var font = getFontURL(rule.cssText);\n return font ? [font] : [];\n }\n }\n function addRules(styleSheet, rules) {\n for (var i = 0; i < rules.length; ++i) {\n var r = rules[i];\n switch (r.type) {\n case 3:\n doStylesheet(r.styleSheet);\n break;\n case 5:\n var style = r.style;\n var family = splitProperty(getPropertyValue(style, 'font-family'));\n var bold = /^([56789]00|bold)$/i.test(getPropertyValue(style, 'font-weight'));\n var italic = 'italic' == getPropertyValue(style, 'font-style');\n var src = findFonts(r);\n if (src.length > 0) {\n addRule(styleSheet, family, bold, italic, src[0]);\n }\n }\n }\n }\n function addRule(styleSheet, names, bold, italic, url) {\n if (!/^data:/i.test(url)) {\n if (!(/^[^\\/:]+:\\/\\//.test(url) || /^\\//.test(url))) {\n url = String(styleSheet.href).replace(/[^\\/]*$/, '') + url;\n }\n }\n names.forEach(function (name) {\n name = name.replace(/^(['\"]?)(.*?)\\1$/, '$2');\n if (bold) {\n name += '|bold';\n }\n if (italic) {\n name += '|italic';\n }\n result[name] = url;\n });\n }\n }\n function hasOwnProperty(obj, key) {\n return Object.prototype.hasOwnProperty.call(obj, key);\n }\n function getCounter(name) {\n name = '_counter_' + name;\n return nodeInfo[name];\n }\n function getAllCounters(name) {\n var values = [], p = nodeInfo;\n name = '_counter_' + name;\n while (p) {\n if (hasOwnProperty(p, name)) {\n values.push(p[name]);\n }\n p = Object.getPrototypeOf(p);\n }\n return values.reverse();\n }\n function incCounter(name, inc) {\n var p = nodeInfo;\n name = '_counter_' + name;\n while (p && !hasOwnProperty(p, name)) {\n p = Object.getPrototypeOf(p);\n }\n if (!p) {\n p = nodeInfo._root;\n }\n p[name] = (p[name] || 0) + (inc == null ? 1 : inc);\n }\n function resetCounter(name, val) {\n name = '_counter_' + name;\n nodeInfo[name] = val == null ? 0 : val;\n }\n function doCounters(a, f, def) {\n for (var i = 0; i < a.length;) {\n var name = a[i++];\n var val = parseFloat(a[i]);\n if (isNaN(val)) {\n f(name, def);\n } else {\n f(name, val);\n ++i;\n }\n }\n }\n function updateCounters(style) {\n var counterReset = getPropertyValue(style, 'counter-reset');\n if (counterReset) {\n doCounters(splitProperty(counterReset, /^\\s+/), resetCounter, 0);\n }\n var counterIncrement = getPropertyValue(style, 'counter-increment');\n if (counterIncrement) {\n doCounters(splitProperty(counterIncrement, /^\\s+/), incCounter, 1);\n }\n }\n function parseColor$1(str, css) {\n var color = kendo.parseColor(str, true);\n if (color) {\n color = color.toRGB();\n if (css) {\n color = color.toCssRgba();\n } else if (color.a === 0) {\n color = null;\n }\n }\n return color;\n }\n function whenImagesAreActuallyLoaded(elements, callback) {\n var pending = 0;\n elements.forEach(function (el) {\n var images = el.querySelectorAll('img');\n for (var i = 0; i < images.length; ++i) {\n var img = images[i];\n if (!img.complete) {\n pending++;\n img.onload = img.onerror = next;\n }\n }\n });\n if (!pending) {\n next();\n }\n function next() {\n if (--pending <= 0) {\n callback();\n }\n }\n }\n function cacheImages(element, callback) {\n var urls = [];\n function add(url) {\n if (!IMAGE_CACHE[url]) {\n IMAGE_CACHE[url] = true;\n urls.push(url);\n }\n }\n (function dive(element) {\n if (/^img$/i.test(element.tagName)) {\n add(element.src);\n }\n parseBackgroundImage(getPropertyValue(getComputedStyle(element), 'background-image')).forEach(function (bg) {\n if (bg.type == 'url') {\n add(bg.url);\n }\n });\n if (element.children) {\n slice$1(element.children).forEach(dive);\n }\n }(element));\n var count = urls.length;\n function next() {\n if (--count <= 0) {\n callback();\n }\n }\n if (count === 0) {\n next();\n }\n urls.forEach(function (url) {\n var img = IMAGE_CACHE[url] = new window.Image();\n if (!/^data:/i.test(url)) {\n img.crossOrigin = 'Anonymous';\n }\n img.src = url;\n if (img.complete) {\n next();\n } else {\n img.onload = next;\n img.onerror = function () {\n IMAGE_CACHE[url] = null;\n next();\n };\n }\n });\n }\n function alphaNumeral(n) {\n var result = '';\n do {\n var r = n % 26;\n result = String.fromCharCode(97 + r) + result;\n n = Math.floor(n / 26);\n } while (n > 0);\n return result;\n }\n function pushNodeInfo(element, style, group) {\n nodeInfo = Object.create(nodeInfo);\n nodeInfo[element.tagName.toLowerCase()] = {\n element: element,\n style: style\n };\n var decoration = getPropertyValue(style, 'text-decoration');\n if (decoration && decoration != 'none') {\n var color = getPropertyValue(style, 'color');\n decoration.split(/\\s+/g).forEach(function (name) {\n if (!nodeInfo[name]) {\n nodeInfo[name] = color;\n }\n });\n }\n if (createsStackingContext(style)) {\n nodeInfo._stackingContext = {\n element: element,\n group: group\n };\n }\n }\n function popNodeInfo() {\n nodeInfo = Object.getPrototypeOf(nodeInfo);\n }\n function updateClipbox(path) {\n if (nodeInfo._clipbox != null) {\n var box = path.bbox(nodeInfo._matrix);\n if (nodeInfo._clipbox) {\n nodeInfo._clipbox = Rect.intersect(nodeInfo._clipbox, box);\n } else {\n nodeInfo._clipbox = box;\n }\n }\n }\n function emptyClipbox() {\n var cb = nodeInfo._clipbox;\n if (cb == null) {\n return true;\n }\n if (cb) {\n return cb.width() === 0 || cb.height() === 0;\n }\n }\n function createsStackingContext(style) {\n function prop(name) {\n return getPropertyValue(style, name);\n }\n if (prop('transform') != 'none' || prop('position') != 'static' || prop('z-index') != 'auto' || prop('opacity') < 1) {\n return true;\n }\n }\n function getComputedStyle(element, pseudoElt) {\n return window.getComputedStyle(element, pseudoElt || null);\n }\n function getPropertyValue(style, prop, defa) {\n var val = style.getPropertyValue(prop);\n if (val == null || val === '') {\n if (browser.webkit) {\n val = style.getPropertyValue('-webkit-' + prop);\n } else if (browser.mozilla) {\n val = style.getPropertyValue('-moz-' + prop);\n } else if (browser.opera) {\n val = style.getPropertyValue('-o-' + prop);\n } else if (browser.msie) {\n val = style.getPropertyValue('-ms-' + prop);\n }\n }\n if (arguments.length > 2 && (val == null || val === '')) {\n return defa;\n } else {\n return val;\n }\n }\n function pleaseSetPropertyValue(style, prop, value, important) {\n style.setProperty(prop, value, important);\n if (browser.webkit) {\n style.setProperty('-webkit-' + prop, value, important);\n } else if (browser.mozilla) {\n style.setProperty('-moz-' + prop, value, important);\n } else if (browser.opera) {\n style.setProperty('-o-' + prop, value, important);\n } else if (browser.msie) {\n style.setProperty('-ms-' + prop, value, important);\n prop = 'ms' + prop.replace(/(^|-)([a-z])/g, function (s, p1, p2) {\n return p1 + p2.toUpperCase();\n });\n style[prop] = value;\n }\n }\n function getBorder(style, side) {\n side = 'border-' + side;\n return {\n width: parseFloat(getPropertyValue(style, side + '-width')),\n style: getPropertyValue(style, side + '-style'),\n color: parseColor$1(getPropertyValue(style, side + '-color'), true)\n };\n }\n function saveStyle(element, func) {\n var prev = element.style.cssText;\n var result = func();\n element.style.cssText = prev;\n return result;\n }\n function getBorderRadius(style, side) {\n var r = getPropertyValue(style, 'border-' + side + '-radius').split(/\\s+/g).map(parseFloat);\n if (r.length == 1) {\n r.push(r[0]);\n }\n return sanitizeRadius({\n x: r[0],\n y: r[1]\n });\n }\n function getContentBox(element) {\n var box = element.getBoundingClientRect();\n box = innerBox(box, 'border-*-width', element);\n box = innerBox(box, 'padding-*', element);\n return box;\n }\n function innerBox(box, prop, element) {\n var style, wt, wr, wb, wl;\n if (typeof prop == 'string') {\n style = getComputedStyle(element);\n wt = parseFloat(getPropertyValue(style, prop.replace('*', 'top')));\n wr = parseFloat(getPropertyValue(style, prop.replace('*', 'right')));\n wb = parseFloat(getPropertyValue(style, prop.replace('*', 'bottom')));\n wl = parseFloat(getPropertyValue(style, prop.replace('*', 'left')));\n } else if (typeof prop == 'number') {\n wt = wr = wb = wl = prop;\n }\n return {\n top: box.top + wt,\n right: box.right - wr,\n bottom: box.bottom - wb,\n left: box.left + wl,\n width: box.right - box.left - wr - wl,\n height: box.bottom - box.top - wb - wt\n };\n }\n function getTransform(style) {\n var transform$$1 = getPropertyValue(style, 'transform');\n if (transform$$1 == 'none') {\n return null;\n }\n var matrix = /^\\s*matrix\\(\\s*(.*?)\\s*\\)\\s*$/.exec(transform$$1);\n if (matrix) {\n var origin = getPropertyValue(style, 'transform-origin');\n matrix = matrix[1].split(/\\s*,\\s*/g).map(parseFloat);\n origin = origin.split(/\\s+/g).map(parseFloat);\n return {\n matrix: matrix,\n origin: origin\n };\n }\n }\n function radiansToDegrees(radians) {\n return 180 * radians / Math.PI % 360;\n }\n function parseAngle(angle) {\n var num = parseFloat(angle);\n if (/grad$/.test(angle)) {\n return Math.PI * num / 200;\n } else if (/rad$/.test(angle)) {\n return num;\n } else if (/turn$/.test(angle)) {\n return Math.PI * num * 2;\n } else if (/deg$/.test(angle)) {\n return Math.PI * num / 180;\n }\n }\n function setTransform(shape, m) {\n m = new Matrix(m[0], m[1], m[2], m[3], m[4], m[5]);\n shape.transform(m);\n return m;\n }\n function setClipping(shape, clipPath) {\n shape.clip(clipPath);\n }\n function addArcToPath(path, x, y, options) {\n var points = new Arc$2([\n x,\n y\n ], options).curvePoints(), i = 1;\n while (i < points.length) {\n path.curveTo(points[i++], points[i++], points[i++]);\n }\n }\n function sanitizeRadius(r) {\n if (r.x <= 0 || r.y <= 0) {\n r.x = r.y = 0;\n }\n return r;\n }\n function adjustBorderRadiusForBox(box, rTL, rTR, rBR, rBL) {\n var tl_x = Math.max(0, rTL.x), tl_y = Math.max(0, rTL.y);\n var tr_x = Math.max(0, rTR.x), tr_y = Math.max(0, rTR.y);\n var br_x = Math.max(0, rBR.x), br_y = Math.max(0, rBR.y);\n var bl_x = Math.max(0, rBL.x), bl_y = Math.max(0, rBL.y);\n var f = Math.min(box.width / (tl_x + tr_x), box.height / (tr_y + br_y), box.width / (br_x + bl_x), box.height / (bl_y + tl_y));\n if (f < 1) {\n tl_x *= f;\n tl_y *= f;\n tr_x *= f;\n tr_y *= f;\n br_x *= f;\n br_y *= f;\n bl_x *= f;\n bl_y *= f;\n }\n return {\n tl: {\n x: tl_x,\n y: tl_y\n },\n tr: {\n x: tr_x,\n y: tr_y\n },\n br: {\n x: br_x,\n y: br_y\n },\n bl: {\n x: bl_x,\n y: bl_y\n }\n };\n }\n function elementRoundBox(element, box, type) {\n var style = getComputedStyle(element);\n var rTL = getBorderRadius(style, 'top-left');\n var rTR = getBorderRadius(style, 'top-right');\n var rBL = getBorderRadius(style, 'bottom-left');\n var rBR = getBorderRadius(style, 'bottom-right');\n if (type == 'padding' || type == 'content') {\n var bt = getBorder(style, 'top');\n var br = getBorder(style, 'right');\n var bb = getBorder(style, 'bottom');\n var bl = getBorder(style, 'left');\n rTL.x -= bl.width;\n rTL.y -= bt.width;\n rTR.x -= br.width;\n rTR.y -= bt.width;\n rBR.x -= br.width;\n rBR.y -= bb.width;\n rBL.x -= bl.width;\n rBL.y -= bb.width;\n if (type == 'content') {\n var pt = parseFloat(getPropertyValue(style, 'padding-top'));\n var pr = parseFloat(getPropertyValue(style, 'padding-right'));\n var pb = parseFloat(getPropertyValue(style, 'padding-bottom'));\n var pl = parseFloat(getPropertyValue(style, 'padding-left'));\n rTL.x -= pl;\n rTL.y -= pt;\n rTR.x -= pr;\n rTR.y -= pt;\n rBR.x -= pr;\n rBR.y -= pb;\n rBL.x -= pl;\n rBL.y -= pb;\n }\n }\n if (typeof type == 'number') {\n rTL.x -= type;\n rTL.y -= type;\n rTR.x -= type;\n rTR.y -= type;\n rBR.x -= type;\n rBR.y -= type;\n rBL.x -= type;\n rBL.y -= type;\n }\n return roundBox(box, rTL, rTR, rBR, rBL);\n }\n function roundBox(box, rTL0, rTR0, rBR0, rBL0) {\n var tmp = adjustBorderRadiusForBox(box, rTL0, rTR0, rBR0, rBL0);\n var rTL = tmp.tl;\n var rTR = tmp.tr;\n var rBR = tmp.br;\n var rBL = tmp.bl;\n var path = new Path({\n fill: null,\n stroke: null\n });\n path.moveTo(box.left, box.top + rTL.y);\n if (rTL.x) {\n addArcToPath(path, box.left + rTL.x, box.top + rTL.y, {\n startAngle: -180,\n endAngle: -90,\n radiusX: rTL.x,\n radiusY: rTL.y\n });\n }\n path.lineTo(box.right - rTR.x, box.top);\n if (rTR.x) {\n addArcToPath(path, box.right - rTR.x, box.top + rTR.y, {\n startAngle: -90,\n endAngle: 0,\n radiusX: rTR.x,\n radiusY: rTR.y\n });\n }\n path.lineTo(box.right, box.bottom - rBR.y);\n if (rBR.x) {\n addArcToPath(path, box.right - rBR.x, box.bottom - rBR.y, {\n startAngle: 0,\n endAngle: 90,\n radiusX: rBR.x,\n radiusY: rBR.y\n });\n }\n path.lineTo(box.left + rBL.x, box.bottom);\n if (rBL.x) {\n addArcToPath(path, box.left + rBL.x, box.bottom - rBL.y, {\n startAngle: 90,\n endAngle: 180,\n radiusX: rBL.x,\n radiusY: rBL.y\n });\n }\n return path.close();\n }\n function formatCounter(val, style) {\n var str = String(parseFloat(val));\n switch (style) {\n case 'decimal-leading-zero':\n if (str.length < 2) {\n str = '0' + str;\n }\n return str;\n case 'lower-roman':\n return arabicToRoman(val).toLowerCase();\n case 'upper-roman':\n return arabicToRoman(val).toUpperCase();\n case 'lower-latin':\n case 'lower-alpha':\n return alphaNumeral(val - 1);\n case 'upper-latin':\n case 'upper-alpha':\n return alphaNumeral(val - 1).toUpperCase();\n default:\n return str;\n }\n }\n function evalPseudoElementContent(element, content) {\n function displayCounter(name, style, separator) {\n if (!separator) {\n return formatCounter(getCounter(name) || 0, style);\n }\n separator = separator.replace(/^\\s*([\"'])(.*)\\1\\s*$/, '$2');\n return getAllCounters(name).map(function (val) {\n return formatCounter(val, style);\n }).join(separator);\n }\n var a = splitProperty(content, /^\\s+/);\n var result = [], m;\n a.forEach(function (el) {\n var tmp;\n if (m = /^\\s*([\"'])(.*)\\1\\s*$/.exec(el)) {\n result.push(m[2].replace(/\\\\([0-9a-f]{4})/gi, function (s, p) {\n return String.fromCharCode(parseInt(p, 16));\n }));\n } else if (m = /^\\s*counter\\((.*?)\\)\\s*$/.exec(el)) {\n tmp = splitProperty(m[1]);\n result.push(displayCounter(tmp[0], tmp[1]));\n } else if (m = /^\\s*counters\\((.*?)\\)\\s*$/.exec(el)) {\n tmp = splitProperty(m[1]);\n result.push(displayCounter(tmp[0], tmp[2], tmp[1]));\n } else if (m = /^\\s*attr\\((.*?)\\)\\s*$/.exec(el)) {\n result.push(element.getAttribute(m[1]) || '');\n } else {\n result.push(el);\n }\n });\n return result.join('');\n }\n function getCssText(style) {\n if (style.cssText) {\n return style.cssText;\n }\n var result = [];\n for (var i = 0; i < style.length; ++i) {\n result.push(style[i] + ': ' + getPropertyValue(style, style[i]));\n }\n return result.join(';\\n');\n }\n function _renderWithPseudoElements(element, group) {\n if (element.tagName == KENDO_PSEUDO_ELEMENT) {\n _renderElement(element, group);\n return;\n }\n var fake = [];\n function pseudo(kind, place) {\n var style = getComputedStyle(element, kind);\n updateCounters(style);\n if (style.content && style.content != 'normal' && style.content != 'none' && style.width != '0px') {\n var psel = element.ownerDocument.createElement(KENDO_PSEUDO_ELEMENT);\n psel.style.cssText = getCssText(style);\n psel.textContent = evalPseudoElementContent(element, style.content);\n element.insertBefore(psel, place);\n fake.push(psel);\n }\n }\n pseudo(':before', element.firstChild);\n pseudo(':after', null);\n var saveClass = element.className;\n element.className += ' kendo-pdf-hide-pseudo-elements';\n _renderElement(element, group);\n element.className = saveClass;\n fake.forEach(function (el) {\n element.removeChild(el);\n });\n }\n function _renderElement(element, group) {\n var style = getComputedStyle(element);\n var top = getBorder(style, 'top');\n var right = getBorder(style, 'right');\n var bottom = getBorder(style, 'bottom');\n var left = getBorder(style, 'left');\n var rTL0 = getBorderRadius(style, 'top-left');\n var rTR0 = getBorderRadius(style, 'top-right');\n var rBL0 = getBorderRadius(style, 'bottom-left');\n var rBR0 = getBorderRadius(style, 'bottom-right');\n var dir = getPropertyValue(style, 'direction');\n var backgroundColor = getPropertyValue(style, 'background-color');\n backgroundColor = parseColor$1(backgroundColor);\n var backgroundImage = parseBackgroundImage(getPropertyValue(style, 'background-image'));\n var backgroundRepeat = splitProperty(getPropertyValue(style, 'background-repeat'));\n var backgroundPosition = splitProperty(getPropertyValue(style, 'background-position'));\n var backgroundOrigin = splitProperty(getPropertyValue(style, 'background-origin'));\n var backgroundSize = splitProperty(getPropertyValue(style, 'background-size'));\n if (browser.msie && browser.version < 10) {\n backgroundPosition = splitProperty(element.currentStyle.backgroundPosition);\n }\n var innerbox = innerBox(element.getBoundingClientRect(), 'border-*-width', element);\n (function () {\n var clip = getPropertyValue(style, 'clip');\n var m = /^\\s*rect\\((.*)\\)\\s*$/.exec(clip);\n if (m) {\n var a = m[1].split(/[ ,]+/g);\n var top = a[0] == 'auto' ? innerbox.top : parseFloat(a[0]) + innerbox.top;\n var right = a[1] == 'auto' ? innerbox.right : parseFloat(a[1]) + innerbox.left;\n var bottom = a[2] == 'auto' ? innerbox.bottom : parseFloat(a[2]) + innerbox.top;\n var left = a[3] == 'auto' ? innerbox.left : parseFloat(a[3]) + innerbox.left;\n var tmp = new Group();\n var clipPath = new Path().moveTo(left, top).lineTo(right, top).lineTo(right, bottom).lineTo(left, bottom).close();\n setClipping(tmp, clipPath);\n group.append(tmp);\n group = tmp;\n updateClipbox(clipPath);\n }\n }());\n var boxes, i, cells;\n var display = getPropertyValue(style, 'display');\n if (display == 'table-row') {\n boxes = [];\n for (i = 0, cells = element.children; i < cells.length; ++i) {\n boxes.push(cells[i].getBoundingClientRect());\n }\n } else {\n boxes = element.getClientRects();\n if (boxes.length == 1) {\n boxes = [element.getBoundingClientRect()];\n }\n }\n boxes = adjustBoxes(boxes);\n for (i = 0; i < boxes.length; ++i) {\n drawOneBox(boxes[i], i === 0, i == boxes.length - 1);\n }\n if (boxes.length > 0 && display == 'list-item' && !element.getAttribute('kendo-no-bullet')) {\n drawBullet(boxes[0]);\n }\n (function () {\n function clipit() {\n var clipPath = elementRoundBox(element, innerbox, 'padding');\n var tmp = new Group();\n setClipping(tmp, clipPath);\n group.append(tmp);\n group = tmp;\n updateClipbox(clipPath);\n }\n if (isFormField(element)) {\n clipit();\n } else if (/^(hidden|auto|scroll)/.test(getPropertyValue(style, 'overflow'))) {\n clipit();\n } else if (/^(hidden|auto|scroll)/.test(getPropertyValue(style, 'overflow-x'))) {\n clipit();\n } else if (/^(hidden|auto|scroll)/.test(getPropertyValue(style, 'overflow-y'))) {\n clipit();\n }\n }());\n if (!maybeRenderWidget(element, group)) {\n renderContents(element, group);\n }\n return group;\n function adjustBoxes(boxes) {\n if (/^td$/i.test(element.tagName)) {\n var table = nodeInfo.table;\n if (table && getPropertyValue(table.style, 'border-collapse') == 'collapse') {\n var tableBorderLeft = getBorder(table.style, 'left').width;\n var tableBorderTop = getBorder(table.style, 'top').width;\n if (tableBorderLeft === 0 && tableBorderTop === 0) {\n return boxes;\n }\n var tableBox = table.element.getBoundingClientRect();\n var firstCell = table.element.rows[0].cells[0];\n var firstCellBox = firstCell.getBoundingClientRect();\n if (firstCellBox.top == tableBox.top || firstCellBox.left == tableBox.left) {\n return slice$1(boxes).map(function (box) {\n return {\n left: box.left + tableBorderLeft,\n top: box.top + tableBorderTop,\n right: box.right + tableBorderLeft,\n bottom: box.bottom + tableBorderTop,\n height: box.height,\n width: box.width\n };\n });\n }\n }\n }\n return boxes;\n }\n function drawEdge(color, len, Wtop, Wleft, Wright, rl, rr, transform$$1) {\n if (Wtop <= 0) {\n return;\n }\n var path, edge = new Group();\n setTransform(edge, transform$$1);\n group.append(edge);\n sanitizeRadius(rl);\n sanitizeRadius(rr);\n path = new Path({\n fill: { color: color },\n stroke: null\n });\n edge.append(path);\n path.moveTo(rl.x ? Math.max(rl.x, Wleft) : 0, 0).lineTo(len - (rr.x ? Math.max(rr.x, Wright) : 0), 0).lineTo(len - Math.max(rr.x, Wright), Wtop).lineTo(Math.max(rl.x, Wleft), Wtop).close();\n if (rl.x) {\n drawRoundCorner(Wleft, rl, [\n -1,\n 0,\n 0,\n 1,\n rl.x,\n 0\n ]);\n }\n if (rr.x) {\n drawRoundCorner(Wright, rr, [\n 1,\n 0,\n 0,\n 1,\n len - rr.x,\n 0\n ]);\n }\n function drawRoundCorner(Wright, r, transform$$1) {\n var angle = Math.PI / 2 * Wright / (Wright + Wtop);\n var ri = {\n x: r.x - Wright,\n y: r.y - Wtop\n };\n var path = new Path({\n fill: { color: color },\n stroke: null\n }).moveTo(0, 0);\n setTransform(path, transform$$1);\n addArcToPath(path, 0, r.y, {\n startAngle: -90,\n endAngle: -radiansToDegrees(angle),\n radiusX: r.x,\n radiusY: r.y\n });\n if (ri.x > 0 && ri.y > 0) {\n path.lineTo(ri.x * Math.cos(angle), r.y - ri.y * Math.sin(angle));\n addArcToPath(path, 0, r.y, {\n startAngle: -radiansToDegrees(angle),\n endAngle: -90,\n radiusX: ri.x,\n radiusY: ri.y,\n anticlockwise: true\n });\n } else if (ri.x > 0) {\n path.lineTo(ri.x, Wtop).lineTo(0, Wtop);\n } else {\n path.lineTo(ri.x, Wtop).lineTo(ri.x, 0);\n }\n edge.append(path.close());\n }\n }\n function drawBackground(box) {\n var background = new Group();\n setClipping(background, roundBox(box, rTL0, rTR0, rBR0, rBL0));\n group.append(background);\n if (element.tagName == 'A' && element.href && !/^#?$/.test(element.getAttribute('href'))) {\n if (!nodeInfo._avoidLinks || !matches(element, nodeInfo._avoidLinks)) {\n background._pdfLink = {\n url: element.href,\n top: box.top,\n right: box.right,\n bottom: box.bottom,\n left: box.left\n };\n }\n }\n if (backgroundColor) {\n var path = new Path({\n fill: { color: backgroundColor.toCssRgba() },\n stroke: null\n });\n path.moveTo(box.left, box.top).lineTo(box.right, box.top).lineTo(box.right, box.bottom).lineTo(box.left, box.bottom).close();\n background.append(path);\n }\n for (var i = backgroundImage.length; --i >= 0;) {\n drawOneBackground(background, box, backgroundImage[i], backgroundRepeat[i % backgroundRepeat.length], backgroundPosition[i % backgroundPosition.length], backgroundOrigin[i % backgroundOrigin.length], backgroundSize[i % backgroundSize.length]);\n }\n }\n function drawOneBackground(group, box, background, backgroundRepeat, backgroundPosition, backgroundOrigin, backgroundSize) {\n if (!background || background == 'none') {\n return;\n }\n if (background.type == 'url') {\n if (/^url\\(\\\"data:image\\/svg/i.test(background.url)) {\n return;\n }\n var img = IMAGE_CACHE[background.url];\n if (img && img.width > 0 && img.height > 0) {\n drawBackgroundImage(group, box, img.width, img.height, function (group, rect) {\n group.append(new Image$1(background.url, rect));\n });\n }\n } else if (background.type == 'linear') {\n drawBackgroundImage(group, box, box.width, box.height, gradientRenderer(background));\n } else {\n return;\n }\n function drawBackgroundImage(group, box, img_width, img_height, renderBG) {\n var aspect_ratio = img_width / img_height, f;\n var orgBox = box;\n if (backgroundOrigin == 'content-box') {\n orgBox = innerBox(orgBox, 'border-*-width', element);\n orgBox = innerBox(orgBox, 'padding-*', element);\n } else if (backgroundOrigin == 'padding-box') {\n orgBox = innerBox(orgBox, 'border-*-width', element);\n }\n if (!/^\\s*auto(\\s+auto)?\\s*$/.test(backgroundSize)) {\n if (backgroundSize == 'contain') {\n f = Math.min(orgBox.width / img_width, orgBox.height / img_height);\n img_width *= f;\n img_height *= f;\n } else if (backgroundSize == 'cover') {\n f = Math.max(orgBox.width / img_width, orgBox.height / img_height);\n img_width *= f;\n img_height *= f;\n } else {\n var size = backgroundSize.split(/\\s+/g);\n if (/%$/.test(size[0])) {\n img_width = orgBox.width * parseFloat(size[0]) / 100;\n } else {\n img_width = parseFloat(size[0]);\n }\n if (size.length == 1 || size[1] == 'auto') {\n img_height = img_width / aspect_ratio;\n } else if (/%$/.test(size[1])) {\n img_height = orgBox.height * parseFloat(size[1]) / 100;\n } else {\n img_height = parseFloat(size[1]);\n }\n }\n }\n var pos = String(backgroundPosition);\n switch (pos) {\n case 'bottom':\n pos = '50% 100%';\n break;\n case 'top':\n pos = '50% 0';\n break;\n case 'left':\n pos = '0 50%';\n break;\n case 'right':\n pos = '100% 50%';\n break;\n case 'center':\n pos = '50% 50%';\n break;\n }\n pos = pos.split(/\\s+/);\n if (pos.length == 1) {\n pos[1] = '50%';\n }\n if (/%$/.test(pos[0])) {\n pos[0] = parseFloat(pos[0]) / 100 * (orgBox.width - img_width);\n } else {\n pos[0] = parseFloat(pos[0]);\n }\n if (/%$/.test(pos[1])) {\n pos[1] = parseFloat(pos[1]) / 100 * (orgBox.height - img_height);\n } else {\n pos[1] = parseFloat(pos[1]);\n }\n var rect = new Rect([\n orgBox.left + pos[0],\n orgBox.top + pos[1]\n ], [\n img_width,\n img_height\n ]);\n function rewX() {\n while (rect.origin.x > box.left) {\n rect.origin.x -= img_width;\n }\n }\n function rewY() {\n while (rect.origin.y > box.top) {\n rect.origin.y -= img_height;\n }\n }\n function repeatX() {\n while (rect.origin.x < box.right) {\n renderBG(group, rect.clone());\n rect.origin.x += img_width;\n }\n }\n if (backgroundRepeat == 'no-repeat') {\n renderBG(group, rect);\n } else if (backgroundRepeat == 'repeat-x') {\n rewX();\n repeatX();\n } else if (backgroundRepeat == 'repeat-y') {\n rewY();\n while (rect.origin.y < box.bottom) {\n renderBG(group, rect.clone());\n rect.origin.y += img_height;\n }\n } else if (backgroundRepeat == 'repeat') {\n rewX();\n rewY();\n var origin = rect.origin.clone();\n while (rect.origin.y < box.bottom) {\n rect.origin.x = origin.x;\n repeatX();\n rect.origin.y += img_height;\n }\n }\n }\n }\n function drawBullet() {\n var listStyleType = getPropertyValue(style, 'list-style-type');\n if (listStyleType == 'none') {\n return;\n }\n var listStylePosition = getPropertyValue(style, 'list-style-position');\n function _drawBullet(f) {\n saveStyle(element, function () {\n element.style.position = 'relative';\n var bullet = element.ownerDocument.createElement(KENDO_PSEUDO_ELEMENT);\n bullet.style.position = 'absolute';\n bullet.style.boxSizing = 'border-box';\n if (listStylePosition == 'outside') {\n bullet.style.width = '6em';\n bullet.style.left = '-6.8em';\n bullet.style.textAlign = 'right';\n } else {\n bullet.style.left = '0px';\n }\n f(bullet);\n element.insertBefore(bullet, element.firstChild);\n renderElement(bullet, group);\n element.removeChild(bullet);\n });\n }\n function elementIndex(f) {\n var a = element.parentNode.children;\n var k = element.getAttribute('kendo-split-index');\n if (k != null) {\n return f(k | 0, a.length);\n }\n for (var i = 0; i < a.length; ++i) {\n if (a[i] === element) {\n return f(i, a.length);\n }\n }\n }\n switch (listStyleType) {\n case 'circle':\n case 'disc':\n case 'square':\n _drawBullet(function (bullet) {\n bullet.style.fontSize = '60%';\n bullet.style.lineHeight = '200%';\n bullet.style.paddingRight = '0.5em';\n bullet.style.fontFamily = 'DejaVu Serif';\n bullet.innerHTML = {\n 'disc': '\\u25CF',\n 'circle': '\\u25EF',\n 'square': '\\u25A0'\n }[listStyleType];\n });\n break;\n case 'decimal':\n case 'decimal-leading-zero':\n _drawBullet(function (bullet) {\n elementIndex(function (idx) {\n ++idx;\n if (listStyleType == 'decimal-leading-zero' && idx < 10) {\n idx = '0' + idx;\n }\n bullet.innerHTML = idx + '.';\n });\n });\n break;\n case 'lower-roman':\n case 'upper-roman':\n _drawBullet(function (bullet) {\n elementIndex(function (idx) {\n idx = arabicToRoman(idx + 1);\n if (listStyleType == 'upper-roman') {\n idx = idx.toUpperCase();\n }\n bullet.innerHTML = idx + '.';\n });\n });\n break;\n case 'lower-latin':\n case 'lower-alpha':\n case 'upper-latin':\n case 'upper-alpha':\n _drawBullet(function (bullet) {\n elementIndex(function (idx) {\n idx = alphaNumeral(idx);\n if (/^upper/i.test(listStyleType)) {\n idx = idx.toUpperCase();\n }\n bullet.innerHTML = idx + '.';\n });\n });\n break;\n }\n }\n function drawOneBox(box, isFirst, isLast) {\n if (box.width === 0 || box.height === 0) {\n return;\n }\n drawBackground(box);\n var shouldDrawLeft = left.width > 0 && (isFirst && dir == 'ltr' || isLast && dir == 'rtl');\n var shouldDrawRight = right.width > 0 && (isLast && dir == 'ltr' || isFirst && dir == 'rtl');\n if (top.width === 0 && left.width === 0 && right.width === 0 && bottom.width === 0) {\n return;\n }\n if (top.color == right.color && top.color == bottom.color && top.color == left.color) {\n if (top.width == right.width && top.width == bottom.width && top.width == left.width) {\n if (shouldDrawLeft && shouldDrawRight) {\n box = innerBox(box, top.width / 2);\n var path = elementRoundBox(element, box, top.width / 2);\n path.options.stroke = {\n color: top.color,\n width: top.width\n };\n group.append(path);\n return;\n }\n }\n }\n if (rTL0.x === 0 && rTR0.x === 0 && rBR0.x === 0 && rBL0.x === 0) {\n if (top.width < 2 && left.width < 2 && right.width < 2 && bottom.width < 2) {\n if (top.width > 0) {\n group.append(new Path({\n stroke: {\n width: top.width,\n color: top.color\n }\n }).moveTo(box.left, box.top + top.width / 2).lineTo(box.right, box.top + top.width / 2));\n }\n if (bottom.width > 0) {\n group.append(new Path({\n stroke: {\n width: bottom.width,\n color: bottom.color\n }\n }).moveTo(box.left, box.bottom - bottom.width / 2).lineTo(box.right, box.bottom - bottom.width / 2));\n }\n if (shouldDrawLeft) {\n group.append(new Path({\n stroke: {\n width: left.width,\n color: left.color\n }\n }).moveTo(box.left + left.width / 2, box.top).lineTo(box.left + left.width / 2, box.bottom));\n }\n if (shouldDrawRight) {\n group.append(new Path({\n stroke: {\n width: right.width,\n color: right.color\n }\n }).moveTo(box.right - right.width / 2, box.top).lineTo(box.right - right.width / 2, box.bottom));\n }\n return;\n }\n }\n var tmp = adjustBorderRadiusForBox(box, rTL0, rTR0, rBR0, rBL0);\n var rTL = tmp.tl;\n var rTR = tmp.tr;\n var rBR = tmp.br;\n var rBL = tmp.bl;\n drawEdge(top.color, box.width, top.width, left.width, right.width, rTL, rTR, [\n 1,\n 0,\n 0,\n 1,\n box.left,\n box.top\n ]);\n drawEdge(bottom.color, box.width, bottom.width, right.width, left.width, rBR, rBL, [\n -1,\n 0,\n 0,\n -1,\n box.right,\n box.bottom\n ]);\n function inv(p) {\n return {\n x: p.y,\n y: p.x\n };\n }\n drawEdge(left.color, box.height, left.width, bottom.width, top.width, inv(rBL), inv(rTL), [\n 0,\n -1,\n 1,\n 0,\n box.left,\n box.bottom\n ]);\n drawEdge(right.color, box.height, right.width, top.width, bottom.width, inv(rTR), inv(rBR), [\n 0,\n 1,\n -1,\n 0,\n box.right,\n box.top\n ]);\n }\n }\n function gradientRenderer(gradient) {\n return function (group, rect) {\n var width = rect.width(), height = rect.height();\n switch (gradient.type) {\n case 'linear':\n var angle = gradient.angle != null ? gradient.angle : Math.PI;\n switch (gradient.to) {\n case 'top':\n angle = 0;\n break;\n case 'left':\n angle = -Math.PI / 2;\n break;\n case 'bottom':\n angle = Math.PI;\n break;\n case 'right':\n angle = Math.PI / 2;\n break;\n case 'top left':\n case 'left top':\n angle = -Math.atan2(height, width);\n break;\n case 'top right':\n case 'right top':\n angle = Math.atan2(height, width);\n break;\n case 'bottom left':\n case 'left bottom':\n angle = Math.PI + Math.atan2(height, width);\n break;\n case 'bottom right':\n case 'right bottom':\n angle = Math.PI - Math.atan2(height, width);\n break;\n }\n if (gradient.reverse) {\n angle -= Math.PI;\n }\n angle %= 2 * Math.PI;\n if (angle < 0) {\n angle += 2 * Math.PI;\n }\n var pxlen = Math.abs(width * Math.sin(angle)) + Math.abs(height * Math.cos(angle));\n var scaledAngle = Math.atan(width * Math.tan(angle) / height);\n var sin = Math.sin(scaledAngle), cos = Math.cos(scaledAngle);\n var len = Math.abs(sin) + Math.abs(cos);\n var x = len / 2 * sin;\n var y = len / 2 * cos;\n if (angle > Math.PI / 2 && angle <= 3 * Math.PI / 2) {\n x = -x;\n y = -y;\n }\n var implicit = [], right = 0;\n var stops = gradient.stops.map(function (s, i) {\n var offset = s.percent;\n if (offset) {\n offset = parseFloat(offset) / 100;\n } else if (s.length) {\n offset = parseFloat(s.length) / pxlen;\n } else if (i === 0) {\n offset = 0;\n } else if (i == gradient.stops.length - 1) {\n offset = 1;\n }\n var stop = {\n color: s.color.toCssRgba(),\n offset: offset\n };\n if (offset != null) {\n right = offset;\n implicit.forEach(function (s, i) {\n var stop = s.stop;\n stop.offset = s.left + (right - s.left) * (i + 1) / (implicit.length + 1);\n });\n implicit = [];\n } else {\n implicit.push({\n left: right,\n stop: stop\n });\n }\n return stop;\n });\n var start = [\n 0.5 - x,\n 0.5 + y\n ];\n var end = [\n 0.5 + x,\n 0.5 - y\n ];\n group.append(Path.fromRect(rect).stroke(null).fill(new LinearGradient({\n start: start,\n end: end,\n stops: stops,\n userSpace: false\n })));\n break;\n case 'radial':\n if (window.console && window.console.log) {\n window.console.log('Radial gradients are not yet supported in HTML renderer');\n }\n break;\n }\n };\n }\n function maybeRenderWidget(element, group) {\n if (window.kendo && window.kendo.jQuery && element.getAttribute(window.kendo.attr('role'))) {\n var widget = window.kendo.widgetInstance(window.kendo.jQuery(element));\n if (widget && (widget.exportDOMVisual || widget.exportVisual)) {\n var visual;\n if (widget.exportDOMVisual) {\n visual = widget.exportDOMVisual();\n } else {\n visual = widget.exportVisual();\n }\n if (!visual) {\n return false;\n }\n var wrap$$1 = new Group();\n wrap$$1.children.push(visual);\n var bbox = element.getBoundingClientRect();\n wrap$$1.transform(transform().translate(bbox.left, bbox.top));\n group.append(wrap$$1);\n return true;\n }\n }\n }\n function renderImage(element, url, group) {\n var box = getContentBox(element);\n var rect = new Rect([\n box.left,\n box.top\n ], [\n box.width,\n box.height\n ]);\n var image = new Image$1(url, rect);\n setClipping(image, elementRoundBox(element, box, 'content'));\n group.append(image);\n }\n function zIndexSort(a, b) {\n var sa = getComputedStyle(a);\n var sb = getComputedStyle(b);\n var za = parseFloat(getPropertyValue(sa, 'z-index'));\n var zb = parseFloat(getPropertyValue(sb, 'z-index'));\n var pa = getPropertyValue(sa, 'position');\n var pb = getPropertyValue(sb, 'position');\n if (isNaN(za) && isNaN(zb)) {\n if (/static|absolute/.test(pa) && /static|absolute/.test(pb)) {\n return 0;\n }\n if (pa == 'static') {\n return -1;\n }\n if (pb == 'static') {\n return 1;\n }\n return 0;\n }\n if (isNaN(za)) {\n return zb === 0 ? 0 : zb > 0 ? -1 : 1;\n }\n if (isNaN(zb)) {\n return za === 0 ? 0 : za > 0 ? 1 : -1;\n }\n return parseFloat(za) - parseFloat(zb);\n }\n function isFormField(element) {\n return /^(?:textarea|select|input)$/i.test(element.tagName);\n }\n function getSelectedOption(element) {\n if (element.selectedOptions && element.selectedOptions.length > 0) {\n return element.selectedOptions[0];\n }\n return element.options[element.selectedIndex];\n }\n function renderCheckbox(element, group) {\n var style = getComputedStyle(element);\n var color = getPropertyValue(style, 'color');\n var box = element.getBoundingClientRect();\n if (element.type == 'checkbox') {\n group.append(Path.fromRect(new Rect([\n box.left + 1,\n box.top + 1\n ], [\n box.width - 2,\n box.height - 2\n ])).stroke(color, 1));\n if (element.checked) {\n group.append(new Path().stroke(color, 1.2).moveTo(box.left + 0.22 * box.width, box.top + 0.55 * box.height).lineTo(box.left + 0.45 * box.width, box.top + 0.75 * box.height).lineTo(box.left + 0.78 * box.width, box.top + 0.22 * box.width));\n }\n } else {\n group.append(new Circle(new Circle$2([\n (box.left + box.right) / 2,\n (box.top + box.bottom) / 2\n ], Math.min(box.width - 2, box.height - 2) / 2)).stroke(color, 1));\n if (element.checked) {\n group.append(new Circle(new Circle$2([\n (box.left + box.right) / 2,\n (box.top + box.bottom) / 2\n ], Math.min(box.width - 8, box.height - 8) / 2)).fill(color).stroke(null));\n }\n }\n }\n function renderFormField(element, group) {\n var tag = element.tagName.toLowerCase();\n if (tag == 'input' && (element.type == 'checkbox' || element.type == 'radio')) {\n return renderCheckbox(element, group);\n }\n var p = element.parentNode;\n var doc = element.ownerDocument;\n var el = doc.createElement(KENDO_PSEUDO_ELEMENT);\n var option;\n el.style.cssText = getCssText(getComputedStyle(element));\n if (tag == 'input') {\n el.style.whiteSpace = 'pre';\n }\n if (tag == 'select' || tag == 'textarea') {\n el.style.overflow = 'auto';\n }\n if (tag == 'select') {\n if (element.multiple) {\n for (var i = 0; i < element.options.length; ++i) {\n option = doc.createElement(KENDO_PSEUDO_ELEMENT);\n option.style.cssText = getCssText(getComputedStyle(element.options[i]));\n option.style.display = 'block';\n option.textContent = element.options[i].textContent;\n el.appendChild(option);\n }\n } else {\n option = getSelectedOption(element);\n if (option) {\n el.textContent = option.textContent;\n }\n }\n } else {\n el.textContent = element.value;\n }\n p.insertBefore(el, element);\n el.scrollLeft = element.scrollLeft;\n el.scrollTop = element.scrollTop;\n element.style.display = 'none';\n renderContents(el, group);\n element.style.display = '';\n p.removeChild(el);\n }\n function renderContents(element, group) {\n if (nodeInfo._stackingContext.element === element) {\n nodeInfo._stackingContext.group = group;\n }\n switch (element.tagName.toLowerCase()) {\n case 'img':\n renderImage(element, element.src, group);\n break;\n case 'canvas':\n try {\n renderImage(element, element.toDataURL('image/png'), group);\n } catch (ex) {\n }\n break;\n case 'textarea':\n case 'input':\n case 'select':\n renderFormField(element, group);\n break;\n default:\n var children = [], floats = [], positioned = [];\n for (var i = element.firstChild; i; i = i.nextSibling) {\n switch (i.nodeType) {\n case 3:\n if (/\\S/.test(i.data)) {\n renderText(element, i, group);\n }\n break;\n case 1:\n var style = getComputedStyle(i);\n var floating = getPropertyValue(style, 'float');\n var position = getPropertyValue(style, 'position');\n if (position != 'static') {\n positioned.push(i);\n } else if (floating != 'none') {\n floats.push(i);\n } else {\n children.push(i);\n }\n break;\n }\n }\n mergeSort(children, zIndexSort).forEach(function (el) {\n renderElement(el, group);\n });\n mergeSort(floats, zIndexSort).forEach(function (el) {\n renderElement(el, group);\n });\n mergeSort(positioned, zIndexSort).forEach(function (el) {\n renderElement(el, group);\n });\n }\n }\n function renderText(element, node, group) {\n if (emptyClipbox()) {\n return;\n }\n var style = getComputedStyle(element);\n if (parseFloat(getPropertyValue(style, 'text-indent')) < -500) {\n return;\n }\n var text = node.data;\n var start = 0;\n var end = text.search(/\\S\\s*$/) + 1;\n if (!end) {\n return;\n }\n var fontSize = getPropertyValue(style, 'font-size');\n var lineHeight = getPropertyValue(style, 'line-height');\n var font = [\n getPropertyValue(style, 'font-style'),\n getPropertyValue(style, 'font-variant'),\n getPropertyValue(style, 'font-weight'),\n fontSize,\n getPropertyValue(style, 'font-family')\n ].join(' ');\n fontSize = parseFloat(fontSize);\n lineHeight = parseFloat(lineHeight);\n if (fontSize === 0) {\n return;\n }\n var color = getPropertyValue(style, 'color');\n var range = element.ownerDocument.createRange();\n var align$$1 = getPropertyValue(style, 'text-align');\n var isJustified = align$$1 == 'justify';\n var columnCount = getPropertyValue(style, 'column-count', 1);\n var whiteSpace = getPropertyValue(style, 'white-space');\n var textOverflow, saveTextOverflow;\n if (browser.msie) {\n textOverflow = style.textOverflow;\n if (textOverflow == 'ellipsis') {\n saveTextOverflow = element.style.textOverflow;\n element.style.textOverflow = 'clip';\n }\n }\n var estimateLineLength = element.getBoundingClientRect().width / fontSize * 5;\n if (estimateLineLength === 0) {\n estimateLineLength = 500;\n }\n var prevLineBottom = null;\n var underline = nodeInfo['underline'];\n var lineThrough = nodeInfo['line-through'];\n var overline = nodeInfo['overline'];\n var hasDecoration = underline || lineThrough || overline;\n while (!doChunk()) {\n }\n if (browser.msie && textOverflow == 'ellipsis') {\n element.style.textOverflow = saveTextOverflow;\n }\n if (hasDecoration) {\n range.selectNode(node);\n slice$1(range.getClientRects()).forEach(decorate);\n }\n return;\n function actuallyGetRangeBoundingRect(range) {\n if (browser.msie || browser.chrome) {\n var rectangles = range.getClientRects(), box = {\n top: Infinity,\n right: -Infinity,\n bottom: -Infinity,\n left: Infinity\n };\n for (var i = 0; i < rectangles.length; ++i) {\n var b = rectangles[i];\n if (b.width <= 1 || b.bottom === prevLineBottom) {\n continue;\n }\n box.left = Math.min(b.left, box.left);\n box.top = Math.min(b.top, box.top);\n box.right = Math.max(b.right, box.right);\n box.bottom = Math.max(b.bottom, box.bottom);\n }\n box.width = box.right - box.left;\n box.height = box.bottom - box.top;\n return box;\n }\n return range.getBoundingClientRect();\n }\n function doChunk() {\n var origStart = start;\n var box, pos = text.substr(start).search(/\\S/);\n start += pos;\n if (pos < 0 || start >= end) {\n return true;\n }\n range.setStart(node, start);\n range.setEnd(node, start + 1);\n box = actuallyGetRangeBoundingRect(range);\n var found = false;\n if (isJustified || columnCount > 1) {\n pos = text.substr(start).search(/\\s/);\n if (pos >= 0) {\n range.setEnd(node, start + pos);\n var r = actuallyGetRangeBoundingRect(range);\n if (r.bottom == box.bottom) {\n box = r;\n found = true;\n start += pos;\n }\n }\n }\n if (!found) {\n pos = function findEOL(min, eol, max) {\n range.setEnd(node, eol);\n var r = actuallyGetRangeBoundingRect(range);\n if (r.bottom != box.bottom && min < eol) {\n return findEOL(min, min + eol >> 1, eol);\n } else if (r.right != box.right) {\n box = r;\n if (eol < max) {\n return findEOL(eol, eol + max >> 1, max);\n } else {\n return eol;\n }\n } else {\n return eol;\n }\n }(start, Math.min(end, start + estimateLineLength), end);\n if (pos == start) {\n return true;\n }\n start = pos;\n pos = range.toString().search(/\\s+$/);\n if (pos === 0) {\n return false;\n }\n if (pos > 0) {\n range.setEnd(node, range.startOffset + pos);\n box = actuallyGetRangeBoundingRect(range);\n }\n }\n if (browser.msie) {\n box = range.getClientRects()[0];\n }\n var str = range.toString();\n if (!/^(?:pre|pre-wrap)$/i.test(whiteSpace)) {\n str = str.replace(/\\s+/g, ' ');\n } else if (/\\t/.test(str)) {\n var cc = 0;\n for (pos = origStart; pos < range.startOffset; ++pos) {\n var code = text.charCodeAt(pos);\n if (code == 9) {\n cc += 8 - cc % 8;\n } else if (code == 10 || code == 13) {\n cc = 0;\n } else {\n cc++;\n }\n }\n while ((pos = str.search('\\t')) >= 0) {\n var indent = ' '.substr(0, 8 - (cc + pos) % 8);\n str = str.substr(0, pos) + indent + str.substr(pos + 1);\n }\n }\n if (!found) {\n prevLineBottom = box.bottom;\n }\n drawText(str, box);\n }\n function drawText(str, box) {\n if (browser.msie && !isNaN(lineHeight)) {\n var height = getFontHeight(font);\n var top = (box.top + box.bottom - height) / 2;\n box = {\n top: top,\n right: box.right,\n bottom: top + height,\n left: box.left,\n height: height,\n width: box.right - box.left\n };\n }\n var text = new TextRect(str, new Rect([\n box.left,\n box.top\n ], [\n box.width,\n box.height\n ]), {\n font: font,\n fill: { color: color }\n });\n group.append(text);\n }\n function decorate(box) {\n line(underline, box.bottom);\n line(lineThrough, box.bottom - box.height / 2.7);\n line(overline, box.top);\n function line(color, ypos) {\n if (color) {\n var width = fontSize / 12;\n var path = new Path({\n stroke: {\n width: width,\n color: color\n }\n });\n ypos -= width;\n path.moveTo(box.left, ypos).lineTo(box.right, ypos);\n group.append(path);\n }\n }\n }\n }\n function groupInStackingContext(element, group, zIndex) {\n var main;\n if (zIndex != 'auto') {\n main = nodeInfo._stackingContext.group;\n zIndex = parseFloat(zIndex);\n } else {\n main = group;\n zIndex = 0;\n }\n var a = main.children;\n for (var i = 0; i < a.length; ++i) {\n if (a[i]._dom_zIndex != null && a[i]._dom_zIndex > zIndex) {\n break;\n }\n }\n var tmp = new Group();\n main.insert(i, tmp);\n tmp._dom_zIndex = zIndex;\n if (main !== group) {\n if (nodeInfo._clipbox) {\n var m = nodeInfo._matrix.invert();\n var r = nodeInfo._clipbox.transformCopy(m);\n setClipping(tmp, Path.fromRect(r));\n }\n }\n return tmp;\n }\n function renderElement(element, container) {\n var style = getComputedStyle(element);\n updateCounters(style);\n if (/^(style|script|link|meta|iframe|svg|col|colgroup)$/i.test(element.tagName)) {\n return;\n }\n if (nodeInfo._clipbox == null) {\n return;\n }\n var opacity = parseFloat(getPropertyValue(style, 'opacity'));\n var visibility = getPropertyValue(style, 'visibility');\n var display = getPropertyValue(style, 'display');\n if (opacity === 0 || visibility == 'hidden' || display == 'none') {\n return;\n }\n var tr = getTransform(style);\n var group;\n var zIndex = getPropertyValue(style, 'z-index');\n if ((tr || opacity < 1) && zIndex == 'auto') {\n zIndex = 0;\n }\n group = groupInStackingContext(element, container, zIndex);\n if (opacity < 1) {\n group.opacity(opacity * group.opacity());\n }\n pushNodeInfo(element, style, group);\n if (!tr) {\n _renderWithPseudoElements(element, group);\n } else {\n saveStyle(element, function () {\n pleaseSetPropertyValue(element.style, 'transform', 'none', 'important');\n pleaseSetPropertyValue(element.style, 'transition', 'none', 'important');\n if (getPropertyValue(style, 'position') == 'static') {\n pleaseSetPropertyValue(element.style, 'position', 'relative', 'important');\n }\n var bbox = element.getBoundingClientRect();\n var x = bbox.left + tr.origin[0];\n var y = bbox.top + tr.origin[1];\n var m = [\n 1,\n 0,\n 0,\n 1,\n -x,\n -y\n ];\n m = mmul(m, tr.matrix);\n m = mmul(m, [\n 1,\n 0,\n 0,\n 1,\n x,\n y\n ]);\n m = setTransform(group, m);\n nodeInfo._matrix = nodeInfo._matrix.multiplyCopy(m);\n _renderWithPseudoElements(element, group);\n });\n }\n popNodeInfo();\n }\n function mmul(a, b) {\n var a1 = a[0], b1 = a[1], c1 = a[2], d1 = a[3], e1 = a[4], f1 = a[5];\n var a2 = b[0], b2 = b[1], c2 = b[2], d2 = b[3], e2 = b[4], f2 = b[5];\n return [\n a1 * a2 + b1 * c2,\n a1 * b2 + b1 * d2,\n c1 * a2 + d1 * c2,\n c1 * b2 + d1 * d2,\n e1 * a2 + f1 * c2 + e2,\n e1 * b2 + f1 * d2 + f2\n ];\n }\n var drawing = {\n svg: svg,\n canvas: canvas,\n util: util,\n PathParser: PathParser,\n Surface: Surface,\n BaseNode: BaseNode,\n SurfaceFactory: SurfaceFactory,\n OptionsStore: OptionsStore,\n exportImage: exportImage,\n exportSVG: exportSVG,\n QuadNode: QuadNode,\n ShapesQuadTree: ShapesQuadTree,\n ObserversMixin: ObserversMixin,\n Element: Element$1,\n Circle: Circle,\n Arc: Arc,\n Path: Path,\n MultiPath: MultiPath,\n Text: Text,\n Image: Image$1,\n Group: Group,\n Layout: Layout,\n Rect: Rect$2,\n align: align,\n vAlign: vAlign,\n stack: stack,\n vStack: vStack,\n wrap: wrap,\n vWrap: vWrap,\n fit: fit,\n LinearGradient: LinearGradient,\n RadialGradient: RadialGradient,\n GradientStop: GradientStop,\n Gradient: Gradient,\n Animation: Animation,\n AnimationFactory: AnimationFactory,\n drawDOM: drawDOM\n };\n kendo.deepExtend(kendo, {\n drawing: drawing,\n geometry: geometry\n });\n kendo.drawing.Segment = kendo.geometry.Segment;\n kendo.dataviz.drawing = kendo.drawing;\n kendo.dataviz.geometry = kendo.geometry;\n kendo.drawing.util.measureText = kendo.util.measureText;\n kendo.drawing.util.objectKey = kendo.util.objectKey;\n kendo.drawing.Color = kendo.Color;\n kendo.util.encodeBase64 = kendo.drawing.util.encodeBase64;\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('drawing/surface-tooltip', [\n 'kendo.popup',\n 'drawing/kendo-drawing'\n ], f);\n}(function () {\n (function ($) {\n var NS = '.kendo';\n var kendo = window.kendo;\n var deepExtend = kendo.deepExtend;\n var utils = kendo.drawing.util;\n var defined = utils.defined;\n var limitValue = utils.limitValue;\n var eventCoordinates = utils.eventCoordinates;\n var outerWidth = kendo._outerWidth;\n var outerHeight = kendo._outerHeight;\n var proxy = $.proxy;\n var TOOLTIP_TEMPLATE = '
    ' + '
    ' + '
    ';\n var TOOLTIP_CLOSE_TEMPLATE = '';\n var SurfaceTooltip = kendo.Class.extend({\n init: function (surface, options) {\n this.element = $(TOOLTIP_TEMPLATE);\n this.content = this.element.children('.k-tooltip-content');\n options = options || {};\n this.options = deepExtend({}, this.options, this._tooltipOptions(options));\n this.popupOptions = {\n appendTo: options.appendTo,\n animation: options.animation,\n copyAnchorStyles: false,\n collision: 'fit fit'\n };\n this._openPopupHandler = $.proxy(this._openPopup, this);\n this.surface = surface;\n this._bindEvents();\n },\n options: {\n position: 'top',\n showOn: 'mouseenter',\n offset: 7,\n autoHide: true,\n hideDelay: 0,\n showAfter: 100\n },\n _bindEvents: function () {\n this._showHandler = proxy(this._showEvent, this);\n this._surfaceLeaveHandler = proxy(this._surfaceLeave, this);\n this._mouseleaveHandler = proxy(this._mouseleave, this);\n this._mousemoveHandler = proxy(this._mousemove, this);\n this.surface.bind('click', this._showHandler);\n this.surface.bind('mouseenter', this._showHandler);\n this.surface.bind('mouseleave', this._mouseleaveHandler);\n this.surface.bind('mousemove', this._mousemoveHandler);\n this.surface.element.on('mouseleave' + NS, this._surfaceLeaveHandler);\n this.element.on('click' + NS, '.k-tooltip-button', proxy(this._hideClick, this));\n },\n getPopup: function () {\n if (!this.popup) {\n this.popup = new kendo.ui.Popup(this.element, this.popupOptions);\n }\n return this.popup;\n },\n destroy: function () {\n var popup = this.popup;\n this.surface.unbind('click', this._showHandler);\n this.surface.unbind('mouseenter', this._showHandler);\n this.surface.unbind('mouseleave', this._mouseleaveHandler);\n this.surface.unbind('mousemove', this._mousemoveHandler);\n this.surface.element.off('mouseleave' + NS, this._surfaceLeaveHandler);\n this.element.off('click' + NS);\n if (popup) {\n popup.destroy();\n delete this.popup;\n }\n delete this.popupOptions;\n clearTimeout(this._timeout);\n delete this.element;\n delete this.content;\n delete this.surface;\n },\n _tooltipOptions: function (options) {\n options = options || {};\n return {\n position: options.position,\n showOn: options.showOn,\n offset: options.offset,\n autoHide: options.autoHide,\n width: options.width,\n height: options.height,\n content: options.content,\n shared: options.shared,\n hideDelay: options.hideDelay,\n showAfter: options.showAfter\n };\n },\n _tooltipShape: function (shape) {\n while (shape && !shape.options.tooltip) {\n shape = shape.parent;\n }\n return shape;\n },\n _updateContent: function (target, shape, options) {\n var content = options.content;\n if (kendo.isFunction(content)) {\n content = content({\n element: shape,\n target: target\n });\n }\n if (content) {\n this.content.html(content);\n return true;\n }\n },\n _position: function (shape, options, elementSize, event) {\n var position = options.position;\n var tooltipOffset = options.offset || 0;\n var surface = this.surface;\n var offset = surface._instance._elementOffset();\n var size = surface.getSize();\n var surfaceOffset = surface._instance._offset;\n var bbox = shape.bbox();\n var width = elementSize.width;\n var height = elementSize.height;\n var left = 0, top = 0;\n bbox.origin.translate(offset.left, offset.top);\n if (surfaceOffset) {\n bbox.origin.translate(-surfaceOffset.x, -surfaceOffset.y);\n }\n if (position == 'cursor' && event) {\n var coord = eventCoordinates(event);\n left = coord.x - width / 2;\n top = coord.y - height - tooltipOffset;\n } else if (position == 'left') {\n left = bbox.origin.x - width - tooltipOffset;\n top = bbox.center().y - height / 2;\n } else if (position == 'right') {\n left = bbox.bottomRight().x + tooltipOffset;\n top = bbox.center().y - height / 2;\n } else if (position == 'bottom') {\n left = bbox.center().x - width / 2;\n top = bbox.bottomRight().y + tooltipOffset;\n } else {\n left = bbox.center().x - width / 2;\n top = bbox.origin.y - height - tooltipOffset;\n }\n return {\n left: limitValue(left, offset.left, offset.left + size.width),\n top: limitValue(top, offset.top, offset.top + size.height)\n };\n },\n show: function (shape, options) {\n this._show(shape, shape, deepExtend({}, this.options, this._tooltipOptions(shape.options.tooltip), options));\n },\n hide: function () {\n var popup = this.popup;\n var current = this._current;\n delete this._current;\n clearTimeout(this._showTimeout);\n if (popup && popup.visible() && current && !this.surface.trigger('tooltipClose', {\n element: current.shape,\n target: current.target,\n popup: popup\n })) {\n popup.close();\n }\n },\n _hideClick: function (e) {\n e.preventDefault();\n this.hide();\n },\n _show: function (target, shape, options, event, delay) {\n var current = this._current;\n clearTimeout(this._timeout);\n if (current && (current.shape === shape && options.shared || current.target === target)) {\n return;\n }\n clearTimeout(this._showTimeout);\n var popup = this.getPopup();\n if (!this.surface.trigger('tooltipOpen', {\n element: shape,\n target: target,\n popup: popup\n }) && this._updateContent(target, shape, options)) {\n this._autoHide(options);\n var elementSize = this._measure(options);\n if (popup.visible()) {\n popup.close(true);\n }\n this._current = {\n options: options,\n elementSize: elementSize,\n shape: shape,\n target: target,\n position: this._position(options.shared ? shape : target, options, elementSize, event)\n };\n if (delay) {\n this._showTimeout = setTimeout(this._openPopupHandler, options.showAfter || 0);\n } else {\n this._openPopup();\n }\n }\n },\n _openPopup: function () {\n var current = this._current;\n var position = current.position;\n this.getPopup().open(position.left, position.top);\n },\n _autoHide: function (options) {\n if (options.autoHide && this._closeButton) {\n this.element.removeClass('k-tooltip-closable');\n this._closeButton.remove();\n delete this._closeButton;\n }\n if (!options.autoHide && !this._closeButton) {\n this.element.addClass('k-tooltip-closable');\n this._closeButton = $(TOOLTIP_CLOSE_TEMPLATE).prependTo(this.element);\n }\n },\n _showEvent: function (e) {\n var shape = this._tooltipShape(e.element);\n if (shape) {\n var options = deepExtend({}, this.options, this._tooltipOptions(shape.options.tooltip));\n if (options && options.showOn == e.type) {\n this._show(e.element, shape, options, e.originalEvent, true);\n }\n }\n },\n _measure: function (options) {\n var popup = this.getPopup();\n var width, height;\n this.element.css({\n width: 'auto',\n height: 'auto'\n });\n var visible = popup.visible();\n if (!visible) {\n popup.wrapper.show();\n }\n this.element.css({\n width: defined(options.width) ? options.width : 'auto',\n height: defined(options.height) ? options.height : 'auto'\n });\n width = outerWidth(this.element);\n height = outerHeight(this.element);\n if (!visible) {\n popup.wrapper.hide();\n }\n return {\n width: width,\n height: height\n };\n },\n _mouseleave: function (e) {\n if (this.popup && !this._popupRelatedTarget(e.originalEvent)) {\n var tooltip = this;\n var current = tooltip._current;\n if (current && current.options.autoHide) {\n tooltip._timeout = setTimeout(function () {\n clearTimeout(tooltip._showTimeout);\n tooltip.hide();\n }, current.options.hideDelay || 0);\n }\n }\n },\n _mousemove: function (e) {\n var current = this._current;\n if (current && e.element) {\n var options = current.options;\n if (options.position == 'cursor') {\n var position = this._position(e.element, options, current.elementSize, e.originalEvent);\n current.position = position;\n this.getPopup().wrapper.css({\n left: position.left,\n top: position.top\n });\n }\n }\n },\n _surfaceLeave: function (e) {\n if (this.popup && !this._popupRelatedTarget(e)) {\n clearTimeout(this._showTimeout);\n this.hide();\n }\n },\n _popupRelatedTarget: function (e) {\n return e.relatedTarget && $(e.relatedTarget).closest(this.popup.wrapper).length;\n }\n });\n kendo.drawing.SurfaceTooltip = SurfaceTooltip;\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('drawing/surface', [\n 'drawing/kendo-drawing',\n 'drawing/surface-tooltip'\n ], f);\n}(function () {\n (function ($) {\n var kendo = window.kendo;\n var draw = kendo.drawing;\n var DrawingSurface = draw.Surface;\n var Widget = kendo.ui.Widget;\n var deepExtend = kendo.deepExtend;\n var proxy = $.proxy;\n kendo.support.svg = DrawingSurface.support.svg;\n kendo.support.canvas = DrawingSurface.support.canvas;\n var Surface = Widget.extend({\n init: function (element, options) {\n this.options = deepExtend({}, this.options, options);\n Widget.fn.init.call(this, element, this.options);\n this._instance = DrawingSurface.create(this.element[0], options);\n if (this._instance.translate) {\n this.translate = translate;\n }\n this._triggerInstanceHandler = proxy(this._triggerInstanceEvent, this);\n this._bindHandler('click');\n this._bindHandler('mouseenter');\n this._bindHandler('mouseleave');\n this._bindHandler('mousemove');\n this._enableTracking();\n },\n options: {\n name: 'Surface',\n tooltip: {}\n },\n events: [\n 'click',\n 'mouseenter',\n 'mouseleave',\n 'mousemove',\n 'resize',\n 'tooltipOpen',\n 'tooltipClose'\n ],\n _triggerInstanceEvent: function (e) {\n this.trigger(e.type, e);\n },\n _bindHandler: function (event) {\n this._instance.bind(event, this._triggerInstanceHandler);\n },\n draw: function (element) {\n this._instance.draw(element);\n },\n clear: function () {\n if (this._instance) {\n this._instance.clear();\n }\n this.hideTooltip();\n },\n destroy: function () {\n if (this._instance) {\n this._instance.destroy();\n delete this._instance;\n }\n if (this._tooltip) {\n this._tooltip.destroy();\n delete this._tooltip;\n }\n Widget.fn.destroy.call(this);\n },\n exportVisual: function () {\n return this._instance.exportVisual();\n },\n eventTarget: function (e) {\n return this._instance.eventTarget(e);\n },\n showTooltip: function (shape, options) {\n if (this._tooltip) {\n this._tooltip.show(shape, options);\n }\n },\n hideTooltip: function () {\n if (this._tooltip) {\n this._tooltip.hide();\n }\n },\n suspendTracking: function () {\n this._instance.suspendTracking();\n this.hideTooltip();\n },\n resumeTracking: function () {\n this._instance.resumeTracking();\n },\n getSize: function () {\n return {\n width: this.element.width(),\n height: this.element.height()\n };\n },\n setSize: function (size) {\n this.element.css({\n width: size.width,\n height: size.height\n });\n this._size = size;\n this._instance.currentSize(size);\n this._resize();\n },\n _resize: function () {\n this._instance.currentSize(this._size);\n this._instance._resize();\n },\n _enableTracking: function () {\n if (kendo.ui.Popup) {\n this._tooltip = new draw.SurfaceTooltip(this, this.options.tooltip || {});\n }\n }\n });\n kendo.ui.plugin(Surface);\n Surface.create = function (element, options) {\n return new Surface(element, options);\n };\n kendo.drawing.Surface = Surface;\n function translate(offset) {\n this._instance.translate(offset);\n }\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('drawing/html', ['drawing/kendo-drawing'], f);\n}(function () {\n (function ($) {\n var kendo = window.kendo;\n var drawing = kendo.drawing;\n var drawDOM = drawing.drawDOM;\n drawing.drawDOM = function (element, options) {\n return drawDOM($(element)[0], options);\n };\n drawing.drawDOM.drawText = drawDOM.drawText;\n drawing.drawDOM.getFontFaces = drawDOM.getFontFaces;\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.drawing', [\n 'drawing/util',\n 'drawing/kendo-drawing',\n 'drawing/surface-tooltip',\n 'drawing/surface',\n 'drawing/html'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'drawing',\n name: 'Drawing API',\n category: 'framework',\n description: 'The Kendo UI low-level drawing API',\n depends: [\n 'core',\n 'color',\n 'popup'\n ]\n };\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('dataviz/core/kendo-core', [\n 'kendo.core',\n 'kendo.drawing'\n ], f);\n}(function () {\n (function ($) {\n window.kendo.dataviz = window.kendo.dataviz || {};\n var drawing = kendo.drawing;\n var util = drawing.util;\n var Path = drawing.Path;\n var Group = drawing.Group;\n var Class = kendo.Class;\n var geometry = kendo.geometry;\n var Rect = geometry.Rect;\n var Circle = geometry.Circle;\n var geometryTransform = geometry.transform;\n var Segment = geometry.Segment;\n var dataviz = kendo.dataviz;\n var deepExtend = kendo.deepExtend;\n var isFunction = kendo.isFunction;\n var __common_getter_js = kendo.getter;\n var X = 'x';\n var Y = 'y';\n var TOP = 'top';\n var BOTTOM = 'bottom';\n var LEFT = 'left';\n var RIGHT = 'right';\n var CENTER = 'center';\n var WIDTH = 'width';\n var HEIGHT = 'height';\n var COORD_PRECISION = 3;\n var MAX_VALUE = Number.MAX_VALUE;\n var MIN_VALUE = -Number.MAX_VALUE;\n var DEFAULT_WIDTH = 600;\n var DEFAULT_HEIGHT = 400;\n var WHITE = '#fff';\n var BLACK = '#000';\n var DEFAULT_FONT = '12px sans-serif';\n var DEFAULT_PRECISION = 10;\n var AXIS_LABEL_CLICK = 'axisLabelClick';\n var NOTE_CLICK = 'noteClick';\n var NOTE_HOVER = 'noteHover';\n var OUTSIDE = 'outside';\n var NONE = 'none';\n var CIRCLE = 'circle';\n var TRIANGLE = 'triangle';\n var CROSS = 'cross';\n var ARC = 'arc';\n var INSIDE = 'inside';\n var VALUE = 'value';\n var STRING = 'string';\n var OBJECT = 'object';\n var DATE = 'date';\n var FORMAT_REGEX = /\\{\\d+:?/;\n var HIGHLIGHT_ZINDEX = 100;\n var constants = {\n X: X,\n Y: Y,\n WIDTH: WIDTH,\n HEIGHT: HEIGHT,\n DEFAULT_HEIGHT: DEFAULT_HEIGHT,\n DEFAULT_WIDTH: DEFAULT_WIDTH,\n TOP: TOP,\n LEFT: LEFT,\n BOTTOM: BOTTOM,\n RIGHT: RIGHT,\n CENTER: CENTER,\n COORD_PRECISION: COORD_PRECISION,\n DEFAULT_PRECISION: DEFAULT_PRECISION,\n CIRCLE: CIRCLE,\n TRIANGLE: TRIANGLE,\n CROSS: CROSS,\n MAX_VALUE: MAX_VALUE,\n MIN_VALUE: MIN_VALUE,\n WHITE: WHITE,\n BLACK: BLACK,\n DEFAULT_FONT: DEFAULT_FONT,\n AXIS_LABEL_CLICK: AXIS_LABEL_CLICK,\n OUTSIDE: OUTSIDE,\n INSIDE: INSIDE,\n NONE: NONE,\n NOTE_CLICK: NOTE_CLICK,\n NOTE_HOVER: NOTE_HOVER,\n VALUE: VALUE,\n STRING: STRING,\n OBJECT: OBJECT,\n DATE: DATE,\n ARC: ARC,\n FORMAT_REGEX: FORMAT_REGEX,\n HIGHLIGHT_ZINDEX: HIGHLIGHT_ZINDEX\n };\n function isArray(value) {\n return Array.isArray(value);\n }\n function addClass(element, classes) {\n var classArray = isArray(classes) ? classes : [classes];\n for (var idx = 0; idx < classArray.length; idx++) {\n var className = classArray[idx];\n if (element.className.indexOf(className) === -1) {\n element.className += ' ' + className;\n }\n }\n }\n var SPACE_REGEX = /\\s+/g;\n function removeClass(element, className) {\n if (element && element.className) {\n element.className = element.className.replace(className, '').replace(SPACE_REGEX, ' ');\n }\n }\n function alignPathToPixel(path) {\n var offset = 0.5;\n if (path.options.stroke && kendo.drawing.util.defined(path.options.stroke.width)) {\n if (path.options.stroke.width % 2 === 0) {\n offset = 0;\n }\n }\n for (var i = 0; i < path.segments.length; i++) {\n path.segments[i].anchor().round(0).translate(offset, offset);\n }\n return path;\n }\n function clockwise(angle1, angle2) {\n return -angle1.x * angle2.y + angle1.y * angle2.x < 0;\n }\n function isObject(value) {\n return typeof value === 'object';\n }\n function isString(value) {\n return typeof value === STRING;\n }\n function isNumber(value) {\n return typeof value === 'number' && !isNaN(value);\n }\n function styleValue(value) {\n if (isNumber(value)) {\n return value + 'px';\n }\n return value;\n }\n var SIZE_STYLES_REGEX = /width|height|top|left|bottom|right/i;\n function isSizeField(field) {\n return SIZE_STYLES_REGEX.test(field);\n }\n function elementStyles(element, styles) {\n var stylesArray = isString(styles) ? [styles] : styles;\n if (isArray(stylesArray)) {\n var result = {};\n var style = window.getComputedStyle(element);\n for (var idx = 0; idx < stylesArray.length; idx++) {\n var field = stylesArray[idx];\n result[field] = isSizeField(field) ? parseFloat(style[field]) : style[field];\n }\n return result;\n } else if (isObject(styles)) {\n for (var field$1 in styles) {\n element.style[field$1] = styleValue(styles[field$1]);\n }\n }\n }\n function getSpacing(value, defaultSpacing) {\n if (defaultSpacing === void 0) {\n defaultSpacing = 0;\n }\n var spacing = {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0\n };\n if (typeof value === 'number') {\n spacing[TOP] = spacing[RIGHT] = spacing[BOTTOM] = spacing[LEFT] = value;\n } else {\n spacing[TOP] = value[TOP] || defaultSpacing;\n spacing[RIGHT] = value[RIGHT] || defaultSpacing;\n spacing[BOTTOM] = value[BOTTOM] || defaultSpacing;\n spacing[LEFT] = value[LEFT] || defaultSpacing;\n }\n return spacing;\n }\n var defaultImplementation = {\n format: function (format, value) {\n return value;\n },\n toString: function (value) {\n return value;\n },\n parseDate: function (value) {\n return new Date(value);\n }\n };\n var current = defaultImplementation;\n var IntlService = Class.extend({});\n IntlService.register = function (userImplementation) {\n current = userImplementation;\n };\n if (Object.defineProperties) {\n Object.defineProperties(IntlService, {\n implementation: {\n get: function () {\n return current;\n }\n }\n });\n }\n var FORMAT_REPLACE_REGEX = /\\{(\\d+)(:[^\\}]+)?\\}/g;\n var FormatService = Class.extend({\n init: function (intlService) {\n this._intlService = intlService;\n },\n auto: function (formatString) {\n var values = [], len = arguments.length - 1;\n while (len-- > 0)\n values[len] = arguments[len + 1];\n var intl = this.intlService;\n if (isString(formatString) && formatString.match(FORMAT_REGEX)) {\n return intl.format.apply(intl, [formatString].concat(values));\n }\n return intl.toString(values[0], formatString);\n },\n localeAuto: function (formatString, values, locale) {\n var intl = this.intlService;\n var result;\n if (isString(formatString) && formatString.match(FORMAT_REGEX)) {\n result = formatString.replace(FORMAT_REPLACE_REGEX, function (match, index, placeholderFormat) {\n var value = values[parseInt(index, 10)];\n return intl.toString(value, placeholderFormat ? placeholderFormat.substring(1) : '', locale);\n });\n } else {\n result = intl.toString(values[0], formatString, locale);\n }\n return result;\n }\n });\n if (Object.defineProperties) {\n Object.defineProperties(FormatService.fn, {\n intlService: {\n get: function () {\n return this._intlService || IntlService.implementation;\n }\n }\n });\n }\n var ChartService = Class.extend({\n init: function (chart, context) {\n if (context === void 0) {\n context = {};\n }\n this._intlService = context.intlService;\n this.sender = context.sender || chart;\n this.format = new FormatService(context.intlService);\n this.chart = chart;\n this.rtl = context.rtl;\n },\n notify: function (name, args) {\n this.chart.trigger(name, args);\n }\n });\n if (Object.defineProperties) {\n Object.defineProperties(ChartService.fn, {\n intl: {\n get: function () {\n return this._intlService || IntlService.implementation;\n }\n }\n });\n }\n var current$1;\n var DomEventsBuilder = Class.extend({});\n DomEventsBuilder.register = function (userImplementation) {\n current$1 = userImplementation;\n };\n DomEventsBuilder.create = function (element, events) {\n if (current$1) {\n return current$1.create(element, events);\n }\n };\n var current$2 = {\n compile: function (template) {\n return template;\n }\n };\n var TemplateService = Class.extend({});\n TemplateService.register = function (userImplementation) {\n current$2 = userImplementation;\n };\n TemplateService.compile = function (template) {\n return current$2.compile(template);\n };\n var services = {\n ChartService: ChartService,\n DomEventsBuilder: DomEventsBuilder,\n FormatService: FormatService,\n IntlService: IntlService,\n TemplateService: TemplateService\n };\n function getTemplate(options) {\n if (options === void 0) {\n options = {};\n }\n var template;\n if (options.template) {\n options.template = template = TemplateService.compile(options.template);\n } else if (isFunction(options.content)) {\n template = options.content;\n }\n return template;\n }\n function grep(array, callback) {\n var length = array.length;\n var result = [];\n for (var idx = 0; idx < length; idx++) {\n if (callback(array[idx])) {\n result.push(array[idx]);\n }\n }\n return result;\n }\n function hasClasses(element, classNames) {\n if (element.className) {\n var names = classNames.split(' ');\n for (var idx = 0; idx < names.length; idx++) {\n if (element.className.indexOf(names[idx]) !== -1) {\n return true;\n }\n }\n }\n }\n function inArray(value, array) {\n if (array) {\n return array.indexOf(value) !== -1;\n }\n }\n function interpolateValue(start, end, progress) {\n return kendo.drawing.util.round(start + (end - start) * progress, COORD_PRECISION);\n }\n var TRIGGER = 'trigger';\n var InstanceObserver = Class.extend({\n init: function (observer, handlers) {\n this.observer = observer;\n this.handlerMap = deepExtend({}, this.handlerMap, handlers);\n },\n trigger: function (name, args) {\n var ref = this;\n var observer = ref.observer;\n var handlerMap = ref.handlerMap;\n var isDefaultPrevented;\n if (handlerMap[name]) {\n isDefaultPrevented = this.callObserver(handlerMap[name], args);\n } else if (observer[TRIGGER]) {\n isDefaultPrevented = this.callObserver(TRIGGER, name, args);\n }\n return isDefaultPrevented;\n },\n callObserver: function (fnName) {\n var args = [], len = arguments.length - 1;\n while (len-- > 0)\n args[len] = arguments[len + 1];\n return this.observer[fnName].apply(this.observer, args);\n },\n requiresHandlers: function (names) {\n var this$1 = this;\n if (this.observer.requiresHandlers) {\n return this.observer.requiresHandlers(names);\n }\n for (var idx = 0; idx < names.length; idx++) {\n if (this$1.handlerMap[names[idx]]) {\n return true;\n }\n }\n }\n });\n function map(array, callback) {\n var length = array.length;\n var result = [];\n for (var idx = 0; idx < length; idx++) {\n var value = callback(array[idx]);\n if (kendo.drawing.util.defined(value)) {\n result.push(value);\n }\n }\n return result;\n }\n function mousewheelDelta(e) {\n var delta = 0;\n if (e.wheelDelta) {\n delta = -e.wheelDelta / 120;\n delta = delta > 0 ? Math.ceil(delta) : Math.floor(delta);\n }\n if (e.detail) {\n delta = kendo.drawing.util.round(e.detail / 3);\n }\n return delta;\n }\n var ref = kendo.drawing.util;\n var append = ref.append;\n var bindEvents = ref.bindEvents;\n var defined = ref.defined;\n var deg = ref.deg;\n var elementOffset = ref.elementOffset;\n var elementSize = ref.elementSize;\n var eventElement = ref.eventElement;\n var eventCoordinates = ref.eventCoordinates;\n var last = ref.last;\n var limitValue = ref.limitValue;\n var objectKey = ref.objectKey;\n var rad = ref.rad;\n var round = ref.round;\n var unbindEvents = ref.unbindEvents;\n var valueOrDefault = ref.valueOrDefault;\n var FontLoader = Class.extend({});\n FontLoader.fetchFonts = function (options, fonts, state) {\n if (state === void 0) {\n state = { depth: 0 };\n }\n var MAX_DEPTH = 5;\n if (!options || state.depth > MAX_DEPTH || !document.fonts) {\n return;\n }\n Object.keys(options).forEach(function (key) {\n var value = options[key];\n if (key === 'dataSource' || key[0] === '$' || !value) {\n return;\n }\n if (key === 'font') {\n fonts.push(value);\n } else if (typeof value === 'object') {\n state.depth++;\n FontLoader.fetchFonts(value, fonts, state);\n state.depth--;\n }\n });\n };\n FontLoader.loadFonts = function (fonts, callback) {\n var promises = [];\n if (fonts.length > 0 && document.fonts) {\n try {\n promises = fonts.map(function (font) {\n return document.fonts.load(font);\n });\n } catch (e) {\n kendo.logToConsole(e);\n }\n Promise.all(promises).then(callback, callback);\n } else {\n callback();\n }\n };\n FontLoader.preloadFonts = function (options, callback) {\n var fonts = [];\n FontLoader.fetchFonts(options, fonts);\n FontLoader.loadFonts(fonts, callback);\n };\n function setDefaultOptions(type, options) {\n var proto = type.prototype;\n if (proto.options) {\n proto.options = deepExtend({}, proto.options, options);\n } else {\n proto.options = options;\n }\n }\n function sparseArrayLimits(arr) {\n var min = MAX_VALUE;\n var max = MIN_VALUE;\n for (var idx = 0, length = arr.length; idx < length; idx++) {\n var value = arr[idx];\n if (value !== null && isFinite(value)) {\n min = Math.min(min, value);\n max = Math.max(max, value);\n }\n }\n return {\n min: min === MAX_VALUE ? undefined : min,\n max: max === MIN_VALUE ? undefined : max\n };\n }\n var Point = Class.extend({\n init: function (x, y) {\n this.x = x || 0;\n this.y = y || 0;\n },\n clone: function () {\n return new Point(this.x, this.y);\n },\n equals: function (point) {\n return point && this.x === point.x && this.y === point.y;\n },\n rotate: function (center, degrees) {\n var theta = rad(degrees);\n var cosT = Math.cos(theta);\n var sinT = Math.sin(theta);\n var cx = center.x;\n var cy = center.y;\n var ref = this;\n var x = ref.x;\n var y = ref.y;\n this.x = round(cx + (x - cx) * cosT + (y - cy) * sinT, COORD_PRECISION);\n this.y = round(cy + (y - cy) * cosT - (x - cx) * sinT, COORD_PRECISION);\n return this;\n },\n multiply: function (a) {\n this.x *= a;\n this.y *= a;\n return this;\n },\n distanceTo: function (point) {\n var dx = this.x - point.x;\n var dy = this.y - point.y;\n return Math.sqrt(dx * dx + dy * dy);\n }\n });\n Point.onCircle = function (center, angle, radius) {\n var radians = rad(angle);\n return new Point(center.x - radius * Math.cos(radians), center.y - radius * Math.sin(radians));\n };\n var Box = Class.extend({\n init: function (x1, y1, x2, y2) {\n this.x1 = x1 || 0;\n this.y1 = y1 || 0;\n this.x2 = x2 || 0;\n this.y2 = y2 || 0;\n },\n width: function () {\n return this.x2 - this.x1;\n },\n height: function () {\n return this.y2 - this.y1;\n },\n translate: function (dx, dy) {\n this.x1 += dx;\n this.x2 += dx;\n this.y1 += dy;\n this.y2 += dy;\n return this;\n },\n move: function (x, y) {\n var height = this.height();\n var width = this.width();\n if (defined(x)) {\n this.x1 = x;\n this.x2 = this.x1 + width;\n }\n if (defined(y)) {\n this.y1 = y;\n this.y2 = this.y1 + height;\n }\n return this;\n },\n wrap: function (targetBox) {\n this.x1 = Math.min(this.x1, targetBox.x1);\n this.y1 = Math.min(this.y1, targetBox.y1);\n this.x2 = Math.max(this.x2, targetBox.x2);\n this.y2 = Math.max(this.y2, targetBox.y2);\n return this;\n },\n wrapPoint: function (point) {\n var arrayPoint = isArray(point);\n var x = arrayPoint ? point[0] : point.x;\n var y = arrayPoint ? point[1] : point.y;\n this.wrap(new Box(x, y, x, y));\n return this;\n },\n snapTo: function (targetBox, axis) {\n if (axis === X || !axis) {\n this.x1 = targetBox.x1;\n this.x2 = targetBox.x2;\n }\n if (axis === Y || !axis) {\n this.y1 = targetBox.y1;\n this.y2 = targetBox.y2;\n }\n return this;\n },\n alignTo: function (targetBox, anchor) {\n var height = this.height();\n var width = this.width();\n var axis = anchor === TOP || anchor === BOTTOM ? Y : X;\n var offset = axis === Y ? height : width;\n if (anchor === CENTER) {\n var targetCenter = targetBox.center();\n var center = this.center();\n this.x1 += targetCenter.x - center.x;\n this.y1 += targetCenter.y - center.y;\n } else if (anchor === TOP || anchor === LEFT) {\n this[axis + 1] = targetBox[axis + 1] - offset;\n } else {\n this[axis + 1] = targetBox[axis + 2];\n }\n this.x2 = this.x1 + width;\n this.y2 = this.y1 + height;\n return this;\n },\n shrink: function (dw, dh) {\n this.x2 -= dw;\n this.y2 -= dh;\n return this;\n },\n expand: function (dw, dh) {\n this.shrink(-dw, -dh);\n return this;\n },\n pad: function (padding) {\n var spacing = getSpacing(padding);\n this.x1 -= spacing.left;\n this.x2 += spacing.right;\n this.y1 -= spacing.top;\n this.y2 += spacing.bottom;\n return this;\n },\n unpad: function (padding) {\n var spacing = getSpacing(padding);\n spacing.left = -spacing.left;\n spacing.top = -spacing.top;\n spacing.right = -spacing.right;\n spacing.bottom = -spacing.bottom;\n return this.pad(spacing);\n },\n clone: function () {\n return new Box(this.x1, this.y1, this.x2, this.y2);\n },\n center: function () {\n return new Point(this.x1 + this.width() / 2, this.y1 + this.height() / 2);\n },\n containsPoint: function (point) {\n return point.x >= this.x1 && point.x <= this.x2 && point.y >= this.y1 && point.y <= this.y2;\n },\n points: function () {\n return [\n new Point(this.x1, this.y1),\n new Point(this.x2, this.y1),\n new Point(this.x2, this.y2),\n new Point(this.x1, this.y2)\n ];\n },\n getHash: function () {\n return [\n this.x1,\n this.y1,\n this.x2,\n this.y2\n ].join(',');\n },\n overlaps: function (box) {\n return !(box.y2 < this.y1 || this.y2 < box.y1 || box.x2 < this.x1 || this.x2 < box.x1);\n },\n rotate: function (rotation) {\n var width = this.width();\n var height = this.height();\n var ref = this.center();\n var cx = ref.x;\n var cy = ref.y;\n var r1 = rotatePoint(0, 0, cx, cy, rotation);\n var r2 = rotatePoint(width, 0, cx, cy, rotation);\n var r3 = rotatePoint(width, height, cx, cy, rotation);\n var r4 = rotatePoint(0, height, cx, cy, rotation);\n width = Math.max(r1.x, r2.x, r3.x, r4.x) - Math.min(r1.x, r2.x, r3.x, r4.x);\n height = Math.max(r1.y, r2.y, r3.y, r4.y) - Math.min(r1.y, r2.y, r3.y, r4.y);\n this.x2 = this.x1 + width;\n this.y2 = this.y1 + height;\n return this;\n },\n toRect: function () {\n return new Rect([\n this.x1,\n this.y1\n ], [\n this.width(),\n this.height()\n ]);\n },\n hasSize: function () {\n return this.width() !== 0 && this.height() !== 0;\n },\n align: function (targetBox, axis, alignment) {\n var c1 = axis + 1;\n var c2 = axis + 2;\n var sizeFunc = axis === X ? WIDTH : HEIGHT;\n var size = this[sizeFunc]();\n if (inArray(alignment, [\n LEFT,\n TOP\n ])) {\n this[c1] = targetBox[c1];\n this[c2] = this[c1] + size;\n } else if (inArray(alignment, [\n RIGHT,\n BOTTOM\n ])) {\n this[c2] = targetBox[c2];\n this[c1] = this[c2] - size;\n } else if (alignment === CENTER) {\n this[c1] = targetBox[c1] + (targetBox[sizeFunc]() - size) / 2;\n this[c2] = this[c1] + size;\n }\n }\n });\n function rotatePoint(x, y, cx, cy, angle) {\n var theta = rad(angle);\n return new Point(cx + (x - cx) * Math.cos(theta) + (y - cy) * Math.sin(theta), cy - (x - cx) * Math.sin(theta) + (y - cy) * Math.cos(theta));\n }\n var Ring = Class.extend({\n init: function (center, innerRadius, radius, startAngle, angle) {\n this.center = center;\n this.innerRadius = innerRadius;\n this.radius = radius;\n this.startAngle = startAngle;\n this.angle = angle;\n },\n clone: function () {\n return new Ring(this.center, this.innerRadius, this.radius, this.startAngle, this.angle);\n },\n middle: function () {\n return this.startAngle + this.angle / 2;\n },\n setRadius: function (newRadius, innerRadius) {\n if (innerRadius) {\n this.innerRadius = newRadius;\n } else {\n this.radius = newRadius;\n }\n return this;\n },\n point: function (angle, innerRadius) {\n var radianAngle = rad(angle);\n var ax = Math.cos(radianAngle);\n var ay = Math.sin(radianAngle);\n var radius = innerRadius ? this.innerRadius : this.radius;\n var x = round(this.center.x - ax * radius, COORD_PRECISION);\n var y = round(this.center.y - ay * radius, COORD_PRECISION);\n return new Point(x, y);\n },\n adjacentBox: function (distance, width, height) {\n var sector = this.clone().expand(distance);\n var midAndle = sector.middle();\n var midPoint = sector.point(midAndle);\n var hw = width / 2;\n var hh = height / 2;\n var sa = Math.sin(rad(midAndle));\n var ca = Math.cos(rad(midAndle));\n var x = midPoint.x - hw;\n var y = midPoint.y - hh;\n if (Math.abs(sa) < 0.9) {\n x += hw * -ca / Math.abs(ca);\n }\n if (Math.abs(ca) < 0.9) {\n y += hh * -sa / Math.abs(sa);\n }\n return new Box(x, y, x + width, y + height);\n },\n containsPoint: function (p) {\n var center = this.center;\n var innerRadius = this.innerRadius;\n var radius = this.radius;\n var startAngle = this.startAngle;\n var endAngle = this.startAngle + this.angle;\n var dx = p.x - center.x;\n var dy = p.y - center.y;\n var vector = new Point(dx, dy);\n var startPoint = this.point(startAngle);\n var startVector = new Point(startPoint.x - center.x, startPoint.y - center.y);\n var endPoint = this.point(endAngle);\n var endVector = new Point(endPoint.x - center.x, endPoint.y - center.y);\n var dist = round(dx * dx + dy * dy, COORD_PRECISION);\n return (startVector.equals(vector) || clockwise(startVector, vector)) && !clockwise(endVector, vector) && dist >= innerRadius * innerRadius && dist <= radius * radius;\n },\n getBBox: function () {\n var this$1 = this;\n var box = new Box(MAX_VALUE, MAX_VALUE, MIN_VALUE, MIN_VALUE);\n var startAngle = round(this.startAngle % 360);\n var endAngle = round((startAngle + this.angle) % 360);\n var innerRadius = this.innerRadius;\n var allAngles = [\n 0,\n 90,\n 180,\n 270,\n startAngle,\n endAngle\n ].sort(numericComparer);\n var startAngleIndex = allAngles.indexOf(startAngle);\n var endAngleIndex = allAngles.indexOf(endAngle);\n var angles;\n if (startAngle === endAngle) {\n angles = allAngles;\n } else {\n if (startAngleIndex < endAngleIndex) {\n angles = allAngles.slice(startAngleIndex, endAngleIndex + 1);\n } else {\n angles = [].concat(allAngles.slice(0, endAngleIndex + 1), allAngles.slice(startAngleIndex, allAngles.length));\n }\n }\n for (var i = 0; i < angles.length; i++) {\n var point = this$1.point(angles[i]);\n box.wrapPoint(point);\n box.wrapPoint(point, innerRadius);\n }\n if (!innerRadius) {\n box.wrapPoint(this.center);\n }\n return box;\n },\n expand: function (value) {\n this.radius += value;\n return this;\n }\n });\n function numericComparer(a, b) {\n return a - b;\n }\n var Sector = Ring.extend({\n init: function (center, radius, startAngle, angle) {\n Ring.fn.init.call(this, center, 0, radius, startAngle, angle);\n },\n expand: function (value) {\n return Ring.fn.expand.call(this, value);\n },\n clone: function () {\n return new Sector(this.center, this.radius, this.startAngle, this.angle);\n },\n setRadius: function (newRadius) {\n this.radius = newRadius;\n return this;\n }\n });\n var ShapeBuilder = Class.extend({\n createRing: function (sector, options) {\n var startAngle = sector.startAngle + 180;\n var endAngle = sector.angle + startAngle;\n var center = new geometry.Point(sector.center.x, sector.center.y);\n var radius = Math.max(sector.radius, 0);\n var innerRadius = Math.max(sector.innerRadius, 0);\n var arc = new geometry.Arc(center, {\n startAngle: startAngle,\n endAngle: endAngle,\n radiusX: radius,\n radiusY: radius\n });\n var path = Path.fromArc(arc, options).close();\n if (innerRadius) {\n arc.radiusX = arc.radiusY = innerRadius;\n var innerEnd = arc.pointAt(endAngle);\n path.lineTo(innerEnd.x, innerEnd.y);\n path.arc(endAngle, startAngle, innerRadius, innerRadius, true);\n } else {\n path.lineTo(center.x, center.y);\n }\n return path;\n }\n });\n ShapeBuilder.current = new ShapeBuilder();\n var ChartElement = Class.extend({\n init: function (options) {\n this.children = [];\n this.options = deepExtend({}, this.options, options);\n },\n reflow: function (targetBox) {\n var children = this.children;\n var box;\n for (var i = 0; i < children.length; i++) {\n var currentChild = children[i];\n currentChild.reflow(targetBox);\n box = box ? box.wrap(currentChild.box) : currentChild.box.clone();\n }\n this.box = box || targetBox;\n },\n destroy: function () {\n var children = this.children;\n if (this.animation) {\n this.animation.destroy();\n }\n for (var i = 0; i < children.length; i++) {\n children[i].destroy();\n }\n },\n getRoot: function () {\n var parent = this.parent;\n return parent ? parent.getRoot() : null;\n },\n getSender: function () {\n var service = this.getService();\n if (service) {\n return service.sender;\n }\n },\n getService: function () {\n var element = this;\n while (element) {\n if (element.chartService) {\n return element.chartService;\n }\n element = element.parent;\n }\n },\n translateChildren: function (dx, dy) {\n var children = this.children;\n var childrenCount = children.length;\n for (var i = 0; i < childrenCount; i++) {\n children[i].box.translate(dx, dy);\n }\n },\n append: function () {\n var arguments$1 = arguments;\n var this$1 = this;\n for (var i = 0; i < arguments.length; i++) {\n var item = arguments$1[i];\n this$1.children.push(item);\n item.parent = this$1;\n }\n },\n renderVisual: function () {\n if (this.options.visible === false) {\n return;\n }\n this.createVisual();\n this.addVisual();\n this.renderChildren();\n this.createAnimation();\n this.renderComplete();\n },\n addVisual: function () {\n if (this.visual) {\n this.visual.chartElement = this;\n if (this.parent) {\n this.parent.appendVisual(this.visual);\n }\n }\n },\n renderChildren: function () {\n var children = this.children;\n var length = children.length;\n for (var i = 0; i < length; i++) {\n children[i].renderVisual();\n }\n },\n createVisual: function () {\n this.visual = new Group({\n zIndex: this.options.zIndex,\n visible: valueOrDefault(this.options.visible, true)\n });\n },\n createAnimation: function () {\n if (this.visual) {\n this.animation = drawing.Animation.create(this.visual, this.options.animation);\n }\n },\n appendVisual: function (childVisual) {\n if (!childVisual.chartElement) {\n childVisual.chartElement = this;\n }\n if (childVisual.options.noclip) {\n this.clipRoot().visual.append(childVisual);\n } else if (defined(childVisual.options.zIndex)) {\n this.stackRoot().stackVisual(childVisual);\n } else if (this.isStackRoot) {\n this.stackVisual(childVisual);\n } else if (this.visual) {\n this.visual.append(childVisual);\n } else {\n this.parent.appendVisual(childVisual);\n }\n },\n clipRoot: function () {\n if (this.parent) {\n return this.parent.clipRoot();\n }\n return this;\n },\n stackRoot: function () {\n if (this.parent) {\n return this.parent.stackRoot();\n }\n return this;\n },\n stackVisual: function (childVisual) {\n var zIndex = childVisual.options.zIndex || 0;\n var visuals = this.visual.children;\n var length = visuals.length;\n var pos;\n for (pos = 0; pos < length; pos++) {\n var sibling = visuals[pos];\n var here = valueOrDefault(sibling.options.zIndex, 0);\n if (here > zIndex) {\n break;\n }\n }\n this.visual.insert(pos, childVisual);\n },\n traverse: function (callback) {\n var children = this.children;\n var length = children.length;\n for (var i = 0; i < length; i++) {\n var child = children[i];\n callback(child);\n if (child.traverse) {\n child.traverse(callback);\n }\n }\n },\n closest: function (match) {\n var element = this;\n var matched = false;\n while (element && !matched) {\n matched = match(element);\n if (!matched) {\n element = element.parent;\n }\n }\n if (matched) {\n return element;\n }\n },\n renderComplete: function () {\n },\n hasHighlight: function () {\n var options = (this.options || {}).highlight;\n return !(!this.createHighlight || options && options.visible === false);\n },\n toggleHighlight: function (show) {\n var this$1 = this;\n var options = (this.options || {}).highlight || {};\n var customVisual = options.visual;\n var highlight = this._highlight;\n if (!highlight) {\n var highlightOptions = {\n fill: {\n color: WHITE,\n opacity: 0.2\n },\n stroke: {\n color: WHITE,\n width: 1,\n opacity: 0.2\n }\n };\n if (customVisual) {\n highlight = this._highlight = customVisual($.extend(this.highlightVisualArgs(), {\n createVisual: function () {\n return this$1.createHighlight(highlightOptions);\n },\n sender: this.getSender(),\n series: this.series,\n dataItem: this.dataItem,\n category: this.category,\n value: this.value,\n percentage: this.percentage,\n runningTotal: this.runningTotal,\n total: this.total\n }));\n if (!highlight) {\n return;\n }\n } else {\n highlight = this._highlight = this.createHighlight(highlightOptions);\n }\n if (!defined(highlight.options.zIndex)) {\n highlight.options.zIndex = valueOrDefault(options.zIndex, HIGHLIGHT_ZINDEX);\n }\n this.appendVisual(highlight);\n }\n highlight.visible(show);\n },\n createGradientOverlay: function (element, options, gradientOptions) {\n var overlay = new Path($.extend({\n stroke: { color: 'none' },\n fill: this.createGradient(gradientOptions),\n closed: element.options.closed\n }, options));\n overlay.segments.elements(element.segments.elements());\n return overlay;\n },\n createGradient: function (options) {\n if (this.parent) {\n return this.parent.createGradient(options);\n }\n }\n });\n ChartElement.prototype.options = {};\n var BoxElement = ChartElement.extend({\n init: function (options) {\n ChartElement.fn.init.call(this, options);\n this.options.margin = getSpacing(this.options.margin);\n this.options.padding = getSpacing(this.options.padding);\n },\n reflow: function (targetBox) {\n var this$1 = this;\n var options = this.options;\n var width = options.width;\n var height = options.height;\n var shrinkToFit = options.shrinkToFit;\n var hasSetSize = width && height;\n var margin = options.margin;\n var padding = options.padding;\n var borderWidth = options.border.width;\n var box;\n var reflowPaddingBox = function () {\n this$1.align(targetBox, X, options.align);\n this$1.align(targetBox, Y, options.vAlign);\n this$1.paddingBox = box.clone().unpad(margin).unpad(borderWidth);\n };\n var contentBox = targetBox.clone();\n if (hasSetSize) {\n contentBox.x2 = contentBox.x1 + width;\n contentBox.y2 = contentBox.y1 + height;\n }\n if (shrinkToFit) {\n contentBox.unpad(margin).unpad(borderWidth).unpad(padding);\n }\n ChartElement.fn.reflow.call(this, contentBox);\n if (hasSetSize) {\n box = this.box = new Box(0, 0, width, height);\n } else {\n box = this.box;\n }\n if (shrinkToFit && hasSetSize) {\n reflowPaddingBox();\n contentBox = this.contentBox = this.paddingBox.clone().unpad(padding);\n } else {\n contentBox = this.contentBox = box.clone();\n box.pad(padding).pad(borderWidth).pad(margin);\n reflowPaddingBox();\n }\n this.translateChildren(box.x1 - contentBox.x1 + margin.left + borderWidth + padding.left, box.y1 - contentBox.y1 + margin.top + borderWidth + padding.top);\n var children = this.children;\n for (var i = 0; i < children.length; i++) {\n var item = children[i];\n item.reflow(item.box);\n }\n },\n align: function (targetBox, axis, alignment) {\n this.box.align(targetBox, axis, alignment);\n },\n hasBox: function () {\n var options = this.options;\n return options.border.width || options.background;\n },\n createVisual: function () {\n ChartElement.fn.createVisual.call(this);\n var options = this.options;\n if (options.visible && this.hasBox()) {\n this.visual.append(Path.fromRect(this.paddingBox.toRect(), this.visualStyle()));\n }\n },\n visualStyle: function () {\n var options = this.options;\n var border = options.border || {};\n return {\n stroke: {\n width: border.width,\n color: border.color,\n opacity: valueOrDefault(border.opacity, options.opacity),\n dashType: border.dashType\n },\n fill: {\n color: options.background,\n opacity: options.opacity\n },\n cursor: options.cursor\n };\n }\n });\n setDefaultOptions(BoxElement, {\n align: LEFT,\n vAlign: TOP,\n margin: {},\n padding: {},\n border: {\n color: BLACK,\n width: 0\n },\n background: '',\n shrinkToFit: false,\n width: 0,\n height: 0,\n visible: true\n });\n var ShapeElement = BoxElement.extend({\n init: function (options, pointData) {\n BoxElement.fn.init.call(this, options);\n this.pointData = pointData;\n },\n getElement: function () {\n var ref = this;\n var options = ref.options;\n var box = ref.paddingBox;\n var type = options.type;\n var rotation = options.rotation;\n var center = box.center();\n var halfWidth = box.width() / 2;\n if (!options.visible || !this.hasBox()) {\n return null;\n }\n var style = this.visualStyle();\n var element;\n if (type === CIRCLE) {\n element = new drawing.Circle(new Circle([\n round(box.x1 + halfWidth, COORD_PRECISION),\n round(box.y1 + box.height() / 2, COORD_PRECISION)\n ], halfWidth), style);\n } else if (type === TRIANGLE) {\n element = Path.fromPoints([\n [\n box.x1 + halfWidth,\n box.y1\n ],\n [\n box.x1,\n box.y2\n ],\n [\n box.x2,\n box.y2\n ]\n ], style).close();\n } else if (type === CROSS) {\n element = new drawing.MultiPath(style);\n element.moveTo(box.x1, box.y1).lineTo(box.x2, box.y2);\n element.moveTo(box.x1, box.y2).lineTo(box.x2, box.y1);\n } else {\n element = Path.fromRect(box.toRect(), style);\n }\n if (rotation) {\n element.transform(geometryTransform().rotate(-rotation, [\n center.x,\n center.y\n ]));\n }\n element.options.zIndex = options.zIndex;\n return element;\n },\n createElement: function () {\n var this$1 = this;\n var customVisual = this.options.visual;\n var pointData = this.pointData || {};\n var visual;\n if (customVisual) {\n visual = customVisual({\n value: pointData.value,\n dataItem: pointData.dataItem,\n sender: this.getSender(),\n series: pointData.series,\n category: pointData.category,\n rect: this.paddingBox.toRect(),\n options: this.visualOptions(),\n createVisual: function () {\n return this$1.getElement();\n }\n });\n } else {\n visual = this.getElement();\n }\n return visual;\n },\n visualOptions: function () {\n var options = this.options;\n return {\n background: options.background,\n border: options.border,\n margin: options.margin,\n padding: options.padding,\n type: options.type,\n size: options.width,\n visible: options.visible\n };\n },\n createVisual: function () {\n this.visual = this.createElement();\n }\n });\n setDefaultOptions(ShapeElement, {\n type: CIRCLE,\n align: CENTER,\n vAlign: CENTER\n });\n var LINEAR = 'linear';\n var RADIAL = 'radial';\n var GRADIENTS = {\n glass: {\n type: LINEAR,\n rotation: 0,\n stops: [\n {\n offset: 0,\n color: WHITE,\n opacity: 0\n },\n {\n offset: 0.25,\n color: WHITE,\n opacity: 0.3\n },\n {\n offset: 1,\n color: WHITE,\n opacity: 0\n }\n ]\n },\n sharpBevel: {\n type: RADIAL,\n stops: [\n {\n offset: 0,\n color: WHITE,\n opacity: 0.55\n },\n {\n offset: 0.65,\n color: WHITE,\n opacity: 0\n },\n {\n offset: 0.95,\n color: WHITE,\n opacity: 0.25\n }\n ]\n },\n roundedBevel: {\n type: RADIAL,\n stops: [\n {\n offset: 0.33,\n color: WHITE,\n opacity: 0.06\n },\n {\n offset: 0.83,\n color: WHITE,\n opacity: 0.2\n },\n {\n offset: 0.95,\n color: WHITE,\n opacity: 0\n }\n ]\n },\n roundedGlass: {\n type: RADIAL,\n supportVML: false,\n stops: [\n {\n offset: 0,\n color: WHITE,\n opacity: 0\n },\n {\n offset: 0.5,\n color: WHITE,\n opacity: 0.3\n },\n {\n offset: 0.99,\n color: WHITE,\n opacity: 0\n }\n ]\n },\n sharpGlass: {\n type: RADIAL,\n supportVML: false,\n stops: [\n {\n offset: 0,\n color: WHITE,\n opacity: 0.2\n },\n {\n offset: 0.15,\n color: WHITE,\n opacity: 0.15\n },\n {\n offset: 0.17,\n color: WHITE,\n opacity: 0.35\n },\n {\n offset: 0.85,\n color: WHITE,\n opacity: 0.05\n },\n {\n offset: 0.87,\n color: WHITE,\n opacity: 0.15\n },\n {\n offset: 0.99,\n color: WHITE,\n opacity: 0\n }\n ]\n },\n bubbleShadow: {\n type: RADIAL,\n center: [\n 0.5,\n 0.5\n ],\n radius: 0.5\n }\n };\n function boxDiff(r, s) {\n if (r.x1 === s.x1 && r.y1 === s.y1 && r.x2 === s.x2 && r.y2 === s.y2) {\n return s;\n }\n var a = Math.min(r.x1, s.x1);\n var b = Math.max(r.x1, s.x1);\n var c = Math.min(r.x2, s.x2);\n var d = Math.max(r.x2, s.x2);\n var e = Math.min(r.y1, s.y1);\n var f = Math.max(r.y1, s.y1);\n var g = Math.min(r.y2, s.y2);\n var h = Math.max(r.y2, s.y2);\n var boxes = [];\n boxes[0] = new Box(b, e, c, f);\n boxes[1] = new Box(a, f, b, g);\n boxes[2] = new Box(c, f, d, g);\n boxes[3] = new Box(b, g, c, h);\n if (r.x1 === a && r.y1 === e || s.x1 === a && s.y1 === e) {\n boxes[4] = new Box(a, e, b, f);\n boxes[5] = new Box(c, g, d, h);\n } else {\n boxes[4] = new Box(c, e, d, f);\n boxes[5] = new Box(a, g, b, h);\n }\n return grep(boxes, function (box) {\n return box.height() > 0 && box.width() > 0;\n })[0];\n }\n var RootElement = ChartElement.extend({\n init: function (options) {\n ChartElement.fn.init.call(this, options);\n var rootOptions = this.options;\n rootOptions.width = parseInt(rootOptions.width, 10);\n rootOptions.height = parseInt(rootOptions.height, 10);\n this.gradients = {};\n },\n reflow: function () {\n var ref = this;\n var options = ref.options;\n var children = ref.children;\n var currentBox = new Box(0, 0, options.width, options.height);\n this.box = currentBox.unpad(options.margin);\n for (var i = 0; i < children.length; i++) {\n children[i].reflow(currentBox);\n currentBox = boxDiff(currentBox, children[i].box) || new Box();\n }\n },\n createVisual: function () {\n this.visual = new Group();\n this.createBackground();\n },\n createBackground: function () {\n var options = this.options;\n var border = options.border || {};\n var box = this.box.clone().pad(options.margin).unpad(border.width);\n var background = Path.fromRect(box.toRect(), {\n stroke: {\n color: border.width ? border.color : '',\n width: border.width,\n dashType: border.dashType\n },\n fill: {\n color: options.background,\n opacity: options.opacity\n },\n zIndex: -10\n });\n this.visual.append(background);\n },\n getRoot: function () {\n return this;\n },\n createGradient: function (options) {\n var gradients = this.gradients;\n var hashCode = objectKey(options);\n var gradient = GRADIENTS[options.gradient];\n var drawingGradient;\n if (gradients[hashCode]) {\n drawingGradient = gradients[hashCode];\n } else {\n var gradientOptions = $.extend({}, gradient, options);\n if (gradient.type === 'linear') {\n drawingGradient = new drawing.LinearGradient(gradientOptions);\n } else {\n if (options.innerRadius) {\n gradientOptions.stops = innerRadialStops(gradientOptions);\n }\n drawingGradient = new drawing.RadialGradient(gradientOptions);\n drawingGradient.supportVML = gradient.supportVML !== false;\n }\n gradients[hashCode] = drawingGradient;\n }\n return drawingGradient;\n }\n });\n setDefaultOptions(RootElement, {\n width: DEFAULT_WIDTH,\n height: DEFAULT_HEIGHT,\n background: WHITE,\n border: {\n color: BLACK,\n width: 0\n },\n margin: getSpacing(5),\n zIndex: -2\n });\n function innerRadialStops(options) {\n var stops = options.stops;\n var usedSpace = options.innerRadius / options.radius * 100;\n var length = stops.length;\n var currentStops = [];\n for (var i = 0; i < length; i++) {\n var currentStop = $.extend({}, stops[i]);\n currentStop.offset = (currentStop.offset * (100 - usedSpace) + usedSpace) / 100;\n currentStops.push(currentStop);\n }\n return currentStops;\n }\n var FloatElement = ChartElement.extend({\n init: function (options) {\n ChartElement.fn.init.call(this, options);\n this._initDirection();\n },\n _initDirection: function () {\n var options = this.options;\n if (options.vertical) {\n this.groupAxis = X;\n this.elementAxis = Y;\n this.groupSizeField = WIDTH;\n this.elementSizeField = HEIGHT;\n this.groupSpacing = options.spacing;\n this.elementSpacing = options.vSpacing;\n } else {\n this.groupAxis = Y;\n this.elementAxis = X;\n this.groupSizeField = HEIGHT;\n this.elementSizeField = WIDTH;\n this.groupSpacing = options.vSpacing;\n this.elementSpacing = options.spacing;\n }\n },\n reflow: function (targetBox) {\n this.box = targetBox.clone();\n this.reflowChildren();\n },\n reflowChildren: function () {\n var this$1 = this;\n var ref = this;\n var box = ref.box;\n var elementAxis = ref.elementAxis;\n var groupAxis = ref.groupAxis;\n var elementSizeField = ref.elementSizeField;\n var groupSizeField = ref.groupSizeField;\n var ref$1 = this.groupOptions();\n var groups = ref$1.groups;\n var groupsSize = ref$1.groupsSize;\n var maxGroupElementsSize = ref$1.maxGroupElementsSize;\n var groupsCount = groups.length;\n var groupsStart = box[groupAxis + 1] + this.alignStart(groupsSize, box[groupSizeField]());\n if (groupsCount) {\n var groupStart = groupsStart;\n for (var groupIdx = 0; groupIdx < groupsCount; groupIdx++) {\n var group = groups[groupIdx];\n var groupElements = group.groupElements;\n var elementStart = box[elementAxis + 1];\n var groupElementsCount = groupElements.length;\n for (var idx = 0; idx < groupElementsCount; idx++) {\n var element = groupElements[idx];\n var elementSize$$1 = this$1.elementSize(element);\n var groupElementStart = groupStart + this$1.alignStart(elementSize$$1[groupSizeField], group.groupSize);\n var elementBox = new Box();\n elementBox[groupAxis + 1] = groupElementStart;\n elementBox[groupAxis + 2] = groupElementStart + elementSize$$1[groupSizeField];\n elementBox[elementAxis + 1] = elementStart;\n elementBox[elementAxis + 2] = elementStart + elementSize$$1[elementSizeField];\n element.reflow(elementBox);\n elementStart += elementSize$$1[elementSizeField] + this$1.elementSpacing;\n }\n groupStart += group.groupSize + this$1.groupSpacing;\n }\n box[groupAxis + 1] = groupsStart;\n box[groupAxis + 2] = groupsStart + groupsSize;\n box[elementAxis + 2] = box[elementAxis + 1] + maxGroupElementsSize;\n }\n },\n alignStart: function (size, maxSize) {\n var start = 0;\n var align = this.options.align;\n if (align === RIGHT || align === BOTTOM) {\n start = maxSize - size;\n } else if (align === CENTER) {\n start = (maxSize - size) / 2;\n }\n return start;\n },\n groupOptions: function () {\n var this$1 = this;\n var ref = this;\n var box = ref.box;\n var children = ref.children;\n var elementSizeField = ref.elementSizeField;\n var groupSizeField = ref.groupSizeField;\n var elementSpacing = ref.elementSpacing;\n var groupSpacing = ref.groupSpacing;\n var maxSize = round(box[elementSizeField]());\n var childrenCount = children.length;\n var groups = [];\n var groupSize = 0;\n var groupElementsSize = 0;\n var groupsSize = 0;\n var maxGroupElementsSize = 0;\n var groupElements = [];\n for (var idx = 0; idx < childrenCount; idx++) {\n var element = children[idx];\n if (!element.box) {\n element.reflow(box);\n }\n var elementSize$$1 = this$1.elementSize(element);\n if (this$1.options.wrap && round(groupElementsSize + elementSpacing + elementSize$$1[elementSizeField]) > maxSize) {\n groups.push({\n groupElements: groupElements,\n groupSize: groupSize,\n groupElementsSize: groupElementsSize\n });\n maxGroupElementsSize = Math.max(maxGroupElementsSize, groupElementsSize);\n groupsSize += groupSpacing + groupSize;\n groupSize = 0;\n groupElementsSize = 0;\n groupElements = [];\n }\n groupSize = Math.max(groupSize, elementSize$$1[groupSizeField]);\n if (groupElementsSize > 0) {\n groupElementsSize += elementSpacing;\n }\n groupElementsSize += elementSize$$1[elementSizeField];\n groupElements.push(element);\n }\n groups.push({\n groupElements: groupElements,\n groupSize: groupSize,\n groupElementsSize: groupElementsSize\n });\n maxGroupElementsSize = Math.max(maxGroupElementsSize, groupElementsSize);\n groupsSize += groupSize;\n return {\n groups: groups,\n groupsSize: groupsSize,\n maxGroupElementsSize: maxGroupElementsSize\n };\n },\n elementSize: function (element) {\n return {\n width: element.box.width(),\n height: element.box.height()\n };\n },\n createVisual: function () {\n }\n });\n setDefaultOptions(FloatElement, {\n vertical: true,\n wrap: true,\n vSpacing: 0,\n spacing: 0\n });\n var DrawingText = drawing.Text;\n var Text = ChartElement.extend({\n init: function (content, options) {\n ChartElement.fn.init.call(this, options);\n this.content = content;\n this.reflow(new Box());\n },\n reflow: function (targetBox) {\n var options = this.options;\n var size = options.size = util.measureText(this.content, { font: options.font });\n this.baseline = size.baseline;\n this.box = new Box(targetBox.x1, targetBox.y1, targetBox.x1 + size.width, targetBox.y1 + size.height);\n },\n createVisual: function () {\n var ref = this.options;\n var font = ref.font;\n var color = ref.color;\n var opacity = ref.opacity;\n var cursor = ref.cursor;\n this.visual = new DrawingText(this.content, this.box.toRect().topLeft(), {\n font: font,\n fill: {\n color: color,\n opacity: opacity\n },\n cursor: cursor\n });\n }\n });\n setDefaultOptions(Text, {\n font: DEFAULT_FONT,\n color: BLACK\n });\n function rectToBox(rect) {\n var origin = rect.origin;\n var bottomRight = rect.bottomRight();\n return new Box(origin.x, origin.y, bottomRight.x, bottomRight.y);\n }\n var ROWS_SPLIT_REGEX = /\\n|\\\\n/m;\n var TextBox = BoxElement.extend({\n init: function (content, options) {\n BoxElement.fn.init.call(this, options);\n this.content = content;\n this._initContainer();\n if (this.options._autoReflow !== false) {\n this.reflow(new Box());\n }\n },\n _initContainer: function () {\n var options = this.options;\n var rows = String(this.content).split(ROWS_SPLIT_REGEX);\n var floatElement = new FloatElement({\n vertical: true,\n align: options.align,\n wrap: false\n });\n var textOptions = deepExtend({}, options, {\n opacity: 1,\n animation: null\n });\n this.container = floatElement;\n this.append(floatElement);\n for (var rowIdx = 0; rowIdx < rows.length; rowIdx++) {\n var text = new Text(rows[rowIdx].trim(), textOptions);\n floatElement.append(text);\n }\n },\n reflow: function (targetBox) {\n var options = this.options;\n var visualFn = options.visual;\n this.container.options.align = options.align;\n if (visualFn && !this._boxReflow) {\n var visualBox = targetBox;\n if (!visualBox.hasSize()) {\n this._boxReflow = true;\n this.reflow(visualBox);\n this._boxReflow = false;\n visualBox = this.box;\n }\n var visual = this.visual = visualFn(this.visualContext(visualBox));\n if (visual) {\n visualBox = rectToBox(visual.clippedBBox() || new Rect());\n visual.options.zIndex = options.zIndex;\n visual.options.noclip = options.noclip;\n }\n this.box = this.contentBox = this.paddingBox = visualBox;\n } else {\n BoxElement.fn.reflow.call(this, targetBox);\n if (options.rotation) {\n var margin = getSpacing(options.margin);\n var box = this.box.unpad(margin);\n this.targetBox = targetBox;\n this.normalBox = box.clone();\n box = this.rotate();\n box.translate(margin.left - margin.right, margin.top - margin.bottom);\n this.rotatedBox = box.clone();\n box.pad(margin);\n }\n }\n },\n createVisual: function () {\n var options = this.options;\n if (!options.visible) {\n return;\n }\n this.visual = new Group({\n transform: this.rotationTransform(),\n zIndex: options.zIndex,\n noclip: options.noclip\n });\n if (this.hasBox()) {\n var box = Path.fromRect(this.paddingBox.toRect(), this.visualStyle());\n this.visual.append(box);\n }\n },\n renderVisual: function () {\n if (this.options.visual) {\n this.addVisual();\n this.createAnimation();\n } else {\n BoxElement.fn.renderVisual.call(this);\n }\n },\n visualOptions: function () {\n var options = this.options;\n return {\n background: options.background,\n border: options.border,\n color: options.color,\n font: options.font,\n margin: options.margin,\n padding: options.padding,\n visible: options.visible\n };\n },\n visualContext: function (targetBox) {\n var this$1 = this;\n return {\n text: this.content,\n rect: targetBox.toRect(),\n sender: this.getSender(),\n options: this.visualOptions(),\n createVisual: function () {\n this$1._boxReflow = true;\n this$1.reflow(targetBox);\n this$1._boxReflow = false;\n return this$1.getDefaultVisual();\n }\n };\n },\n getDefaultVisual: function () {\n this.createVisual();\n this.renderChildren();\n var visual = this.visual;\n delete this.visual;\n return visual;\n },\n rotate: function () {\n var options = this.options;\n this.box.rotate(options.rotation);\n this.align(this.targetBox, X, options.align);\n this.align(this.targetBox, Y, options.vAlign);\n return this.box;\n },\n rotationTransform: function () {\n var rotation = this.options.rotation;\n if (!rotation) {\n return null;\n }\n var ref = this.normalBox.center();\n var cx = ref.x;\n var cy = ref.y;\n var boxCenter = this.rotatedBox.center();\n return geometryTransform().translate(boxCenter.x - cx, boxCenter.y - cy).rotate(rotation, [\n cx,\n cy\n ]);\n }\n });\n var Title = ChartElement.extend({\n init: function (options) {\n ChartElement.fn.init.call(this, options);\n this.append(new TextBox(this.options.text, $.extend({}, this.options, { vAlign: this.options.position })));\n },\n reflow: function (targetBox) {\n ChartElement.fn.reflow.call(this, targetBox);\n this.box.snapTo(targetBox, X);\n }\n });\n Title.buildTitle = function (options, parent, defaultOptions) {\n var titleOptions = options;\n if (typeof options === 'string') {\n titleOptions = { text: options };\n }\n titleOptions = $.extend({ visible: true }, defaultOptions, titleOptions);\n var title;\n if (titleOptions && titleOptions.visible && titleOptions.text) {\n title = new Title(titleOptions);\n parent.append(title);\n }\n return title;\n };\n setDefaultOptions(Title, {\n color: BLACK,\n position: TOP,\n align: CENTER,\n margin: getSpacing(5),\n padding: getSpacing(5)\n });\n var AxisLabel = TextBox.extend({\n init: function (value, text, index, dataItem, options) {\n TextBox.fn.init.call(this, text, options);\n this.text = text;\n this.value = value;\n this.index = index;\n this.dataItem = dataItem;\n this.reflow(new Box());\n },\n visualContext: function (targetBox) {\n var context = TextBox.fn.visualContext.call(this, targetBox);\n context.value = this.value;\n context.dataItem = this.dataItem;\n context.format = this.options.format;\n context.culture = this.options.culture;\n return context;\n },\n click: function (widget, e) {\n widget.trigger(AXIS_LABEL_CLICK, {\n element: eventElement(e),\n value: this.value,\n text: this.text,\n index: this.index,\n dataItem: this.dataItem,\n axis: this.parent.options\n });\n },\n rotate: function () {\n if (this.options.alignRotation !== CENTER) {\n var box = this.normalBox.toRect();\n var transform = this.rotationTransform();\n this.box = rectToBox(box.bbox(transform.matrix()));\n } else {\n TextBox.fn.rotate.call(this);\n }\n return this.box;\n },\n rotationTransform: function () {\n var options = this.options;\n var rotation = options.rotation;\n if (!rotation) {\n return null;\n }\n if (options.alignRotation === CENTER) {\n return TextBox.fn.rotationTransform.call(this);\n }\n var rotationMatrix = geometryTransform().rotate(rotation).matrix();\n var box = this.normalBox.toRect();\n var rect = this.targetBox.toRect();\n var rotationOrigin = options.rotationOrigin || TOP;\n var alignAxis = rotationOrigin === TOP || rotationOrigin === BOTTOM ? X : Y;\n var distanceAxis = rotationOrigin === TOP || rotationOrigin === BOTTOM ? Y : X;\n var axisAnchor = rotationOrigin === TOP || rotationOrigin === LEFT ? rect.origin : rect.bottomRight();\n var topLeft = box.topLeft().transformCopy(rotationMatrix);\n var topRight = box.topRight().transformCopy(rotationMatrix);\n var bottomRight = box.bottomRight().transformCopy(rotationMatrix);\n var bottomLeft = box.bottomLeft().transformCopy(rotationMatrix);\n var rotatedBox = Rect.fromPoints(topLeft, topRight, bottomRight, bottomLeft);\n var translate = {};\n translate[distanceAxis] = rect.origin[distanceAxis] - rotatedBox.origin[distanceAxis];\n var distanceLeft = Math.abs(topLeft[distanceAxis] + translate[distanceAxis] - axisAnchor[distanceAxis]);\n var distanceRight = Math.abs(topRight[distanceAxis] + translate[distanceAxis] - axisAnchor[distanceAxis]);\n var alignStart, alignEnd;\n if (round(distanceLeft, DEFAULT_PRECISION) === round(distanceRight, DEFAULT_PRECISION)) {\n alignStart = topLeft;\n alignEnd = topRight;\n } else if (distanceRight < distanceLeft) {\n alignStart = topRight;\n alignEnd = bottomRight;\n } else {\n alignStart = topLeft;\n alignEnd = bottomLeft;\n }\n var alignCenter = alignStart[alignAxis] + (alignEnd[alignAxis] - alignStart[alignAxis]) / 2;\n translate[alignAxis] = rect.center()[alignAxis] - alignCenter;\n return geometryTransform().translate(translate.x, translate.y).rotate(rotation);\n }\n });\n setDefaultOptions(AxisLabel, { _autoReflow: false });\n var DEFAULT_ICON_SIZE = 7;\n var DEFAULT_LABEL_COLOR = '#fff';\n var Note = BoxElement.extend({\n init: function (fields, options, chartService) {\n BoxElement.fn.init.call(this, options);\n this.fields = fields;\n this.chartService = chartService;\n this.render();\n },\n hide: function () {\n this.options.visible = false;\n },\n show: function () {\n this.options.visible = true;\n },\n render: function () {\n var options = this.options;\n if (options.visible) {\n var label = options.label;\n var icon = options.icon;\n var box = new Box();\n var size = icon.size;\n var text = this.fields.text;\n var width, height;\n if (defined(label) && label.visible) {\n var noteTemplate = getTemplate(label);\n if (noteTemplate) {\n text = noteTemplate(this.fields);\n } else if (label.format) {\n text = this.chartService.format.auto(label.format, text);\n }\n if (!label.color) {\n label.color = label.position === INSIDE ? DEFAULT_LABEL_COLOR : icon.background;\n }\n this.label = new TextBox(text, deepExtend({}, label));\n if (label.position === INSIDE && !defined(size)) {\n if (icon.type === CIRCLE) {\n size = Math.max(this.label.box.width(), this.label.box.height());\n } else {\n width = this.label.box.width();\n height = this.label.box.height();\n }\n box.wrap(this.label.box);\n }\n }\n icon.width = width || size || DEFAULT_ICON_SIZE;\n icon.height = height || size || DEFAULT_ICON_SIZE;\n var marker = new ShapeElement(deepExtend({}, icon));\n this.marker = marker;\n this.append(marker);\n if (this.label) {\n this.append(this.label);\n }\n marker.reflow(new Box());\n this.wrapperBox = box.wrap(marker.box);\n }\n },\n reflow: function (targetBox) {\n var ref = this;\n var options = ref.options;\n var label = ref.label;\n var marker = ref.marker;\n var wrapperBox = ref.wrapperBox;\n var center = targetBox.center();\n var length = options.line.length;\n var position = options.position;\n if (options.visible) {\n var lineStart, box, contentBox;\n if (inArray(position, [\n LEFT,\n RIGHT\n ])) {\n if (position === LEFT) {\n contentBox = wrapperBox.alignTo(targetBox, position).translate(-length, targetBox.center().y - wrapperBox.center().y);\n if (options.line.visible) {\n lineStart = [\n targetBox.x1,\n center.y\n ];\n this.linePoints = [\n lineStart,\n [\n contentBox.x2,\n center.y\n ]\n ];\n box = contentBox.clone().wrapPoint(lineStart);\n }\n } else {\n contentBox = wrapperBox.alignTo(targetBox, position).translate(length, targetBox.center().y - wrapperBox.center().y);\n if (options.line.visible) {\n lineStart = [\n targetBox.x2,\n center.y\n ];\n this.linePoints = [\n lineStart,\n [\n contentBox.x1,\n center.y\n ]\n ];\n box = contentBox.clone().wrapPoint(lineStart);\n }\n }\n } else {\n if (position === BOTTOM) {\n contentBox = wrapperBox.alignTo(targetBox, position).translate(targetBox.center().x - wrapperBox.center().x, length);\n if (options.line.visible) {\n lineStart = [\n center.x,\n targetBox.y2\n ];\n this.linePoints = [\n lineStart,\n [\n center.x,\n contentBox.y1\n ]\n ];\n box = contentBox.clone().wrapPoint(lineStart);\n }\n } else {\n contentBox = wrapperBox.alignTo(targetBox, position).translate(targetBox.center().x - wrapperBox.center().x, -length);\n if (options.line.visible) {\n lineStart = [\n center.x,\n targetBox.y1\n ];\n this.linePoints = [\n lineStart,\n [\n center.x,\n contentBox.y2\n ]\n ];\n box = contentBox.clone().wrapPoint(lineStart);\n }\n }\n }\n if (marker) {\n marker.reflow(contentBox);\n }\n if (label) {\n label.reflow(contentBox);\n if (marker) {\n if (options.label.position === OUTSIDE) {\n label.box.alignTo(marker.box, position);\n }\n label.reflow(label.box);\n }\n }\n this.contentBox = contentBox;\n this.targetBox = targetBox;\n this.box = box || contentBox;\n }\n },\n createVisual: function () {\n BoxElement.fn.createVisual.call(this);\n this.visual.options.noclip = this.options.noclip;\n if (this.options.visible) {\n this.createLine();\n }\n },\n renderVisual: function () {\n var this$1 = this;\n var options = this.options;\n var customVisual = options.visual;\n if (options.visible && customVisual) {\n this.visual = customVisual($.extend(this.fields, {\n sender: this.getSender(),\n rect: this.targetBox.toRect(),\n options: {\n background: options.background,\n border: options.background,\n icon: options.icon,\n label: options.label,\n line: options.line,\n position: options.position,\n visible: options.visible\n },\n createVisual: function () {\n this$1.createVisual();\n this$1.renderChildren();\n var defaultVisual = this$1.visual;\n delete this$1.visual;\n return defaultVisual;\n }\n }));\n this.addVisual();\n } else {\n BoxElement.fn.renderVisual.call(this);\n }\n },\n createLine: function () {\n var options = this.options.line;\n if (this.linePoints) {\n var path = Path.fromPoints(this.linePoints, {\n stroke: {\n color: options.color,\n width: options.width,\n dashType: options.dashType\n }\n });\n alignPathToPixel(path);\n this.visual.append(path);\n }\n },\n click: function (widget, e) {\n var args = this.eventArgs(e);\n if (!widget.trigger(NOTE_CLICK, args)) {\n e.preventDefault();\n }\n },\n hover: function (widget, e) {\n var args = this.eventArgs(e);\n if (!widget.trigger(NOTE_HOVER, args)) {\n e.preventDefault();\n }\n },\n leave: function (widget) {\n widget._unsetActivePoint();\n },\n eventArgs: function (e) {\n var options = this.options;\n return $.extend(this.fields, {\n element: eventElement(e),\n text: defined(options.label) ? options.label.text : '',\n visual: this.visual\n });\n }\n });\n setDefaultOptions(Note, {\n icon: {\n visible: true,\n type: CIRCLE\n },\n label: {\n position: INSIDE,\n visible: true,\n align: CENTER,\n vAlign: CENTER\n },\n line: { visible: true },\n visible: true,\n position: TOP,\n zIndex: 2\n });\n function createAxisTick(options, tickOptions) {\n var tickX = options.tickX;\n var tickY = options.tickY;\n var position = options.position;\n var tick = new Path({\n stroke: {\n width: tickOptions.width,\n color: tickOptions.color\n }\n });\n if (options.vertical) {\n tick.moveTo(tickX, position).lineTo(tickX + tickOptions.size, position);\n } else {\n tick.moveTo(position, tickY).lineTo(position, tickY + tickOptions.size);\n }\n alignPathToPixel(tick);\n return tick;\n }\n function createAxisGridLine(options, gridLine) {\n var lineStart = options.lineStart;\n var lineEnd = options.lineEnd;\n var position = options.position;\n var line = new Path({\n stroke: {\n width: gridLine.width,\n color: gridLine.color,\n dashType: gridLine.dashType\n }\n });\n if (options.vertical) {\n line.moveTo(lineStart, position).lineTo(lineEnd, position);\n } else {\n line.moveTo(position, lineStart).lineTo(position, lineEnd);\n }\n alignPathToPixel(line);\n return line;\n }\n var Axis = ChartElement.extend({\n init: function (options, chartService) {\n if (chartService === void 0) {\n chartService = new ChartService();\n }\n ChartElement.fn.init.call(this, options);\n this.chartService = chartService;\n if (!this.options.visible) {\n this.options = deepExtend({}, this.options, {\n labels: { visible: false },\n line: { visible: false },\n margin: 0,\n majorTickSize: 0,\n minorTickSize: 0\n });\n }\n this.options.minorTicks = deepExtend({}, {\n color: this.options.line.color,\n width: this.options.line.width,\n visible: this.options.minorTickType !== NONE\n }, this.options.minorTicks, {\n size: this.options.minorTickSize,\n align: this.options.minorTickType\n });\n this.options.majorTicks = deepExtend({}, {\n color: this.options.line.color,\n width: this.options.line.width,\n visible: this.options.majorTickType !== NONE\n }, this.options.majorTicks, {\n size: this.options.majorTickSize,\n align: this.options.majorTickType\n });\n if (!this.options._deferLabels) {\n this.createLabels();\n }\n this.createTitle();\n this.createNotes();\n },\n labelsRange: function () {\n return {\n min: this.options.labels.skip,\n max: this.labelsCount()\n };\n },\n createLabels: function () {\n var this$1 = this;\n var options = this.options;\n var align = options.vertical ? RIGHT : CENTER;\n var labelOptions = deepExtend({}, options.labels, {\n align: align,\n zIndex: options.zIndex\n });\n var step = Math.max(1, labelOptions.step);\n this.children = grep(this.children, function (child) {\n return !(child instanceof AxisLabel);\n });\n this.labels = [];\n if (labelOptions.visible) {\n var range = this.labelsRange();\n var rotation = labelOptions.rotation;\n if (isObject(rotation)) {\n labelOptions.alignRotation = rotation.align;\n labelOptions.rotation = rotation.angle;\n }\n if (labelOptions.rotation === 'auto') {\n labelOptions.rotation = 0;\n options.autoRotateLabels = true;\n }\n for (var idx = range.min; idx < range.max; idx += step) {\n var label = this$1.createAxisLabel(idx, labelOptions);\n if (label) {\n this$1.append(label);\n this$1.labels.push(label);\n }\n }\n }\n },\n lineBox: function () {\n var ref = this;\n var options = ref.options;\n var box = ref.box;\n var vertical = options.vertical;\n var mirror = options.labels.mirror;\n var axisX = mirror ? box.x1 : box.x2;\n var axisY = mirror ? box.y2 : box.y1;\n var lineWidth = options.line.width || 0;\n return vertical ? new Box(axisX, box.y1, axisX, box.y2 - lineWidth) : new Box(box.x1, axisY, box.x2 - lineWidth, axisY);\n },\n createTitle: function () {\n var options = this.options;\n var titleOptions = deepExtend({\n rotation: options.vertical ? -90 : 0,\n text: '',\n zIndex: 1,\n visualSize: true\n }, options.title);\n if (titleOptions.visible && titleOptions.text) {\n var title = new TextBox(titleOptions.text, titleOptions);\n this.append(title);\n this.title = title;\n }\n },\n createNotes: function () {\n var this$1 = this;\n var options = this.options;\n var notes = options.notes;\n var items = notes.data || [];\n this.notes = [];\n for (var i = 0; i < items.length; i++) {\n var item = deepExtend({}, notes, items[i]);\n item.value = this$1.parseNoteValue(item.value);\n var note = new Note({\n value: item.value,\n text: item.label.text,\n dataItem: item\n }, item, this$1.chartService);\n if (note.options.visible) {\n if (defined(note.options.position)) {\n if (options.vertical && !inArray(note.options.position, [\n LEFT,\n RIGHT\n ])) {\n note.options.position = options.reverse ? LEFT : RIGHT;\n } else if (!options.vertical && !inArray(note.options.position, [\n TOP,\n BOTTOM\n ])) {\n note.options.position = options.reverse ? BOTTOM : TOP;\n }\n } else {\n if (options.vertical) {\n note.options.position = options.reverse ? LEFT : RIGHT;\n } else {\n note.options.position = options.reverse ? BOTTOM : TOP;\n }\n }\n this$1.append(note);\n this$1.notes.push(note);\n }\n }\n },\n parseNoteValue: function (value) {\n return value;\n },\n renderVisual: function () {\n ChartElement.fn.renderVisual.call(this);\n this.createPlotBands();\n },\n createVisual: function () {\n ChartElement.fn.createVisual.call(this);\n this.createBackground();\n this.createLine();\n },\n gridLinesVisual: function () {\n var gridLines = this._gridLines;\n if (!gridLines) {\n gridLines = this._gridLines = new Group({ zIndex: -2 });\n this.appendVisual(this._gridLines);\n }\n return gridLines;\n },\n createTicks: function (lineGroup) {\n var options = this.options;\n var lineBox = this.lineBox();\n var mirror = options.labels.mirror;\n var majorUnit = options.majorTicks.visible ? options.majorUnit : 0;\n var tickLineOptions = { vertical: options.vertical };\n function render(tickPositions, tickOptions, skipUnit) {\n var count = tickPositions.length;\n var step = Math.max(1, tickOptions.step);\n if (tickOptions.visible) {\n for (var i = tickOptions.skip; i < count; i += step) {\n if (defined(skipUnit) && i % skipUnit === 0) {\n continue;\n }\n tickLineOptions.tickX = mirror ? lineBox.x2 : lineBox.x2 - tickOptions.size;\n tickLineOptions.tickY = mirror ? lineBox.y1 - tickOptions.size : lineBox.y1;\n tickLineOptions.position = tickPositions[i];\n lineGroup.append(createAxisTick(tickLineOptions, tickOptions));\n }\n }\n }\n render(this.getMajorTickPositions(), options.majorTicks);\n render(this.getMinorTickPositions(), options.minorTicks, majorUnit / options.minorUnit);\n },\n createLine: function () {\n var options = this.options;\n var line = options.line;\n var lineBox = this.lineBox();\n if (line.width > 0 && line.visible) {\n var path = new Path({\n stroke: {\n width: line.width,\n color: line.color,\n dashType: line.dashType\n }\n });\n path.moveTo(lineBox.x1, lineBox.y1).lineTo(lineBox.x2, lineBox.y2);\n if (options._alignLines) {\n alignPathToPixel(path);\n }\n var group = this._lineGroup = new Group();\n group.append(path);\n this.visual.append(group);\n this.createTicks(group);\n }\n },\n getActualTickSize: function () {\n var options = this.options;\n var tickSize = 0;\n if (options.majorTicks.visible && options.minorTicks.visible) {\n tickSize = Math.max(options.majorTicks.size, options.minorTicks.size);\n } else if (options.majorTicks.visible) {\n tickSize = options.majorTicks.size;\n } else if (options.minorTicks.visible) {\n tickSize = options.minorTicks.size;\n }\n return tickSize;\n },\n createBackground: function () {\n var ref = this;\n var options = ref.options;\n var box = ref.box;\n var background = options.background;\n if (background) {\n this._backgroundPath = Path.fromRect(box.toRect(), {\n fill: { color: background },\n stroke: null\n });\n this.visual.append(this._backgroundPath);\n }\n },\n createPlotBands: function () {\n var this$1 = this;\n var options = this.options;\n var plotBands = options.plotBands || [];\n var vertical = options.vertical;\n var plotArea = this.plotArea;\n if (plotBands.length === 0) {\n return;\n }\n var group = this._plotbandGroup = new Group({ zIndex: -1 });\n var altAxis = grep(this.pane.axes, function (axis) {\n return axis.options.vertical !== this$1.options.vertical;\n })[0];\n for (var idx = 0; idx < plotBands.length; idx++) {\n var item = plotBands[idx];\n var slotX = void 0, slotY = void 0;\n if (vertical) {\n slotX = (altAxis || plotArea.axisX).lineBox();\n slotY = this$1.getSlot(item.from, item.to, true);\n } else {\n slotX = this$1.getSlot(item.from, item.to, true);\n slotY = (altAxis || plotArea.axisY).lineBox();\n }\n if (slotX.width() !== 0 && slotY.height() !== 0) {\n var bandRect = new Rect([\n slotX.x1,\n slotY.y1\n ], [\n slotX.width(),\n slotY.height()\n ]);\n var path = Path.fromRect(bandRect, {\n fill: {\n color: item.color,\n opacity: item.opacity\n },\n stroke: null\n });\n group.append(path);\n }\n }\n this.appendVisual(group);\n },\n createGridLines: function (altAxis) {\n var options = this.options;\n var minorGridLines = options.minorGridLines;\n var majorGridLines = options.majorGridLines;\n var minorUnit = options.minorUnit;\n var vertical = options.vertical;\n var axisLineVisible = altAxis.options.line.visible;\n var majorUnit = majorGridLines.visible ? options.majorUnit : 0;\n var lineBox = altAxis.lineBox();\n var linePos = lineBox[vertical ? 'y1' : 'x1'];\n var lineOptions = {\n lineStart: lineBox[vertical ? 'x1' : 'y1'],\n lineEnd: lineBox[vertical ? 'x2' : 'y2'],\n vertical: vertical\n };\n var majorTicks = [];\n var container = this.gridLinesVisual();\n function render(tickPositions, gridLine, skipUnit) {\n var count = tickPositions.length;\n var step = Math.max(1, gridLine.step);\n if (gridLine.visible) {\n for (var i = gridLine.skip; i < count; i += step) {\n var pos = round(tickPositions[i]);\n if (!inArray(pos, majorTicks)) {\n if (i % skipUnit !== 0 && (!axisLineVisible || linePos !== pos)) {\n lineOptions.position = pos;\n container.append(createAxisGridLine(lineOptions, gridLine));\n majorTicks.push(pos);\n }\n }\n }\n }\n }\n render(this.getMajorTickPositions(), majorGridLines);\n render(this.getMinorTickPositions(), minorGridLines, majorUnit / minorUnit);\n return container.children;\n },\n reflow: function (box) {\n var ref = this;\n var options = ref.options;\n var labels = ref.labels;\n var title = ref.title;\n var vertical = options.vertical;\n var count = labels.length;\n var sizeFn = vertical ? WIDTH : HEIGHT;\n var titleSize = title ? title.box[sizeFn]() : 0;\n var space = this.getActualTickSize() + options.margin + titleSize;\n var rootBox = (this.getRoot() || {}).box || box;\n var boxSize = rootBox[sizeFn]();\n var maxLabelSize = 0;\n for (var i = 0; i < count; i++) {\n var labelSize = labels[i].box[sizeFn]();\n if (labelSize + space <= boxSize) {\n maxLabelSize = Math.max(maxLabelSize, labelSize);\n }\n }\n if (vertical) {\n this.box = new Box(box.x1, box.y1, box.x1 + maxLabelSize + space, box.y2);\n } else {\n this.box = new Box(box.x1, box.y1, box.x2, box.y1 + maxLabelSize + space);\n }\n this.arrangeTitle();\n this.arrangeLabels();\n this.arrangeNotes();\n },\n getLabelsTickPositions: function () {\n return this.getMajorTickPositions();\n },\n labelTickIndex: function (label) {\n return label.index;\n },\n arrangeLabels: function () {\n var this$1 = this;\n var ref = this;\n var options = ref.options;\n var labels = ref.labels;\n var labelsBetweenTicks = !options.justified;\n var vertical = options.vertical;\n var lineBox = this.lineBox();\n var mirror = options.labels.mirror;\n var tickPositions = this.getLabelsTickPositions();\n var labelOffset = this.getActualTickSize() + options.margin;\n for (var idx = 0; idx < labels.length; idx++) {\n var label = labels[idx];\n var tickIx = this$1.labelTickIndex(label);\n var labelSize = vertical ? label.box.height() : label.box.width();\n var labelPos = tickPositions[tickIx] - labelSize / 2;\n var labelBox = void 0, firstTickPosition = void 0, nextTickPosition = void 0;\n if (vertical) {\n if (labelsBetweenTicks) {\n firstTickPosition = tickPositions[tickIx];\n nextTickPosition = tickPositions[tickIx + 1];\n var middle = firstTickPosition + (nextTickPosition - firstTickPosition) / 2;\n labelPos = middle - labelSize / 2;\n }\n var labelX = lineBox.x2;\n if (mirror) {\n labelX += labelOffset;\n label.options.rotationOrigin = LEFT;\n } else {\n labelX -= labelOffset + label.box.width();\n label.options.rotationOrigin = RIGHT;\n }\n labelBox = label.box.move(labelX, labelPos);\n } else {\n if (labelsBetweenTicks) {\n firstTickPosition = tickPositions[tickIx];\n nextTickPosition = tickPositions[tickIx + 1];\n } else {\n firstTickPosition = labelPos;\n nextTickPosition = labelPos + labelSize;\n }\n var labelY = lineBox.y1;\n if (mirror) {\n labelY -= labelOffset + label.box.height();\n label.options.rotationOrigin = BOTTOM;\n } else {\n labelY += labelOffset;\n label.options.rotationOrigin = TOP;\n }\n labelBox = new Box(firstTickPosition, labelY, nextTickPosition, labelY + label.box.height());\n }\n label.reflow(labelBox);\n }\n },\n autoRotateLabels: function () {\n if (this.options.autoRotateLabels && !this.options.vertical) {\n var tickPositions = this.getMajorTickPositions();\n var labels = this.labels;\n var angle;\n for (var idx = 0; idx < labels.length; idx++) {\n var width = tickPositions[idx + 1] - tickPositions[idx];\n var labelBox = labels[idx].box;\n if (labelBox.width() > width) {\n if (labelBox.height() > width) {\n angle = -90;\n break;\n }\n angle = -45;\n }\n }\n if (angle) {\n for (var idx$1 = 0; idx$1 < labels.length; idx$1++) {\n labels[idx$1].options.rotation = angle;\n labels[idx$1].reflow(new Box());\n }\n return true;\n }\n }\n },\n arrangeTitle: function () {\n var ref = this;\n var options = ref.options;\n var title = ref.title;\n var mirror = options.labels.mirror;\n var vertical = options.vertical;\n if (title) {\n if (vertical) {\n title.options.align = mirror ? RIGHT : LEFT;\n title.options.vAlign = title.options.position;\n } else {\n title.options.align = title.options.position;\n title.options.vAlign = mirror ? TOP : BOTTOM;\n }\n title.reflow(this.box);\n }\n },\n arrangeNotes: function () {\n var this$1 = this;\n for (var idx = 0; idx < this.notes.length; idx++) {\n var item = this$1.notes[idx];\n var value = item.options.value;\n var slot = void 0;\n if (defined(value)) {\n if (this$1.shouldRenderNote(value)) {\n item.show();\n } else {\n item.hide();\n }\n slot = this$1.noteSlot(value);\n } else {\n item.hide();\n }\n item.reflow(slot || this$1.lineBox());\n }\n },\n noteSlot: function (value) {\n return this.getSlot(value);\n },\n alignTo: function (secondAxis) {\n var lineBox = secondAxis.lineBox();\n var vertical = this.options.vertical;\n var pos = vertical ? Y : X;\n this.box.snapTo(lineBox, pos);\n if (vertical) {\n this.box.shrink(0, this.lineBox().height() - lineBox.height());\n } else {\n this.box.shrink(this.lineBox().width() - lineBox.width(), 0);\n }\n this.box[pos + 1] -= this.lineBox()[pos + 1] - lineBox[pos + 1];\n this.box[pos + 2] -= this.lineBox()[pos + 2] - lineBox[pos + 2];\n },\n axisLabelText: function (value, dataItem, options) {\n var tmpl = getTemplate(options);\n var text = value;\n if (tmpl) {\n text = tmpl({\n value: value,\n dataItem: dataItem,\n format: options.format,\n culture: options.culture\n });\n } else if (options.format) {\n text = this.chartService.format.localeAuto(options.format, [value], options.culture);\n }\n return text;\n },\n slot: function (from, to, limit) {\n var slot = this.getSlot(from, to, limit);\n if (slot) {\n return slot.toRect();\n }\n },\n contentBox: function () {\n var box = this.box.clone();\n var labels = this.labels;\n if (labels.length) {\n if (labels[0].options.visible) {\n box.wrap(labels[0].box);\n }\n var lastLabel = labels[labels.length - 1];\n if (lastLabel.options.visible) {\n box.wrap(lastLabel.box);\n }\n }\n return box;\n },\n limitRange: function (from, to, min, max, offset) {\n var options = this.options;\n if (from < min && offset < 0 && (!defined(options.min) || options.min <= min) || max < to && offset > 0 && (!defined(options.max) || max <= options.max)) {\n return null;\n }\n if (to < min && offset > 0 || max < from && offset < 0) {\n return {\n min: from,\n max: to\n };\n }\n var rangeSize = to - from;\n var minValue = from;\n var maxValue = to;\n if (from < min) {\n minValue = limitValue(from, min, max);\n maxValue = limitValue(from + rangeSize, min + rangeSize, max);\n } else if (to > max) {\n maxValue = limitValue(to, min, max);\n minValue = limitValue(to - rangeSize, min, max - rangeSize);\n }\n return {\n min: minValue,\n max: maxValue\n };\n },\n valueRange: function () {\n return {\n min: this.seriesMin,\n max: this.seriesMax\n };\n }\n });\n setDefaultOptions(Axis, {\n labels: {\n visible: true,\n rotation: 0,\n mirror: false,\n step: 1,\n skip: 0\n },\n line: {\n width: 1,\n color: BLACK,\n visible: true\n },\n title: {\n visible: true,\n position: CENTER\n },\n majorTicks: {\n align: OUTSIDE,\n size: 4,\n skip: 0,\n step: 1\n },\n minorTicks: {\n align: OUTSIDE,\n size: 3,\n skip: 0,\n step: 1\n },\n axisCrossingValue: 0,\n majorTickType: OUTSIDE,\n minorTickType: NONE,\n majorGridLines: {\n skip: 0,\n step: 1\n },\n minorGridLines: {\n visible: false,\n width: 1,\n color: BLACK,\n skip: 0,\n step: 1\n },\n margin: 5,\n visible: true,\n reverse: false,\n justified: true,\n notes: { label: { text: '' } },\n _alignLines: true,\n _deferLabels: false\n });\n var MILLISECONDS = 'milliseconds';\n var SECONDS = 'seconds';\n var MINUTES = 'minutes';\n var HOURS = 'hours';\n var DAYS = 'days';\n var WEEKS = 'weeks';\n var MONTHS = 'months';\n var YEARS = 'years';\n var TIME_PER_MILLISECOND = 1;\n var TIME_PER_SECOND = 1000;\n var TIME_PER_MINUTE = 60 * TIME_PER_SECOND;\n var TIME_PER_HOUR = 60 * TIME_PER_MINUTE;\n var TIME_PER_DAY = 24 * TIME_PER_HOUR;\n var TIME_PER_WEEK = 7 * TIME_PER_DAY;\n var TIME_PER_MONTH = 31 * TIME_PER_DAY;\n var TIME_PER_YEAR = 365 * TIME_PER_DAY;\n var TIME_PER_UNIT = {\n 'years': TIME_PER_YEAR,\n 'months': TIME_PER_MONTH,\n 'weeks': TIME_PER_WEEK,\n 'days': TIME_PER_DAY,\n 'hours': TIME_PER_HOUR,\n 'minutes': TIME_PER_MINUTE,\n 'seconds': TIME_PER_SECOND,\n 'milliseconds': TIME_PER_MILLISECOND\n };\n function absoluteDateDiff(a, b) {\n var diff = a.getTime() - b;\n var offsetDiff = a.getTimezoneOffset() - b.getTimezoneOffset();\n return diff - offsetDiff * TIME_PER_MINUTE;\n }\n function addTicks(date, ticks) {\n return new Date(date.getTime() + ticks);\n }\n function toDate(value) {\n var result;\n if (value instanceof Date) {\n result = value;\n } else if (value) {\n result = new Date(value);\n }\n return result;\n }\n function startOfWeek(date, weekStartDay) {\n if (weekStartDay === void 0) {\n weekStartDay = 0;\n }\n var daysToSubtract = 0;\n var day = date.getDay();\n if (!isNaN(day)) {\n while (day !== weekStartDay) {\n if (day === 0) {\n day = 6;\n } else {\n day--;\n }\n daysToSubtract++;\n }\n }\n return addTicks(date, -daysToSubtract * TIME_PER_DAY);\n }\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 addHours(date, hours) {\n var roundedDate = new Date(date);\n roundedDate.setMinutes(0, 0, 0);\n var tzDiff = (date.getTimezoneOffset() - roundedDate.getTimezoneOffset()) * TIME_PER_MINUTE;\n return addTicks(roundedDate, tzDiff + hours * TIME_PER_HOUR);\n }\n function addDuration(dateValue, value, unit, weekStartDay) {\n var result = dateValue;\n if (dateValue) {\n var date = toDate(dateValue);\n var hours = date.getHours();\n if (unit === YEARS) {\n result = new Date(date.getFullYear() + value, 0, 1);\n adjustDST(result, 0);\n } else if (unit === MONTHS) {\n result = new Date(date.getFullYear(), date.getMonth() + value, 1);\n adjustDST(result, hours);\n } else if (unit === WEEKS) {\n result = addDuration(startOfWeek(date, weekStartDay), value * 7, DAYS);\n adjustDST(result, hours);\n } else if (unit === DAYS) {\n result = new Date(date.getFullYear(), date.getMonth(), date.getDate() + value);\n adjustDST(result, hours);\n } else if (unit === HOURS) {\n result = addHours(date, value);\n } else if (unit === MINUTES) {\n result = addTicks(date, value * TIME_PER_MINUTE);\n if (result.getSeconds() > 0) {\n result.setSeconds(0);\n }\n } else if (unit === SECONDS) {\n result = addTicks(date, value * TIME_PER_SECOND);\n } else if (unit === MILLISECONDS) {\n result = addTicks(date, value);\n }\n if (unit !== MILLISECONDS && result.getMilliseconds() > 0) {\n result.setMilliseconds(0);\n }\n }\n return result;\n }\n function floorDate(date, unit, weekStartDay) {\n return addDuration(toDate(date), 0, unit, weekStartDay);\n }\n function ceilDate(dateValue, unit, weekStartDay) {\n var date = toDate(dateValue);\n if (date && floorDate(date, unit, weekStartDay).getTime() === date.getTime()) {\n return date;\n }\n return addDuration(date, 1, unit, weekStartDay);\n }\n function dateComparer(a, b) {\n if (a && b) {\n return a.getTime() - b.getTime();\n }\n return -1;\n }\n function dateDiff(a, b) {\n return a.getTime() - b;\n }\n function toTime(value) {\n if (isArray(value)) {\n var result = [];\n for (var idx = 0; idx < value.length; idx++) {\n result.push(toTime(value[idx]));\n }\n return result;\n } else if (value) {\n return toDate(value).getTime();\n }\n }\n function dateEquals(a, b) {\n if (a && b) {\n return toTime(a) === toTime(b);\n }\n return a === b;\n }\n function timeIndex(date, start, baseUnit) {\n return absoluteDateDiff(date, start) / TIME_PER_UNIT[baseUnit];\n }\n function dateIndex(value, start, baseUnit, baseUnitStep) {\n var date = toDate(value);\n var startDate = toDate(start);\n var index;\n if (baseUnit === MONTHS) {\n index = date.getMonth() - startDate.getMonth() + (date.getFullYear() - startDate.getFullYear()) * 12 + timeIndex(date, new Date(date.getFullYear(), date.getMonth()), DAYS) / new Date(date.getFullYear(), date.getMonth() + 1, 0).getDate();\n } else if (baseUnit === YEARS) {\n index = date.getFullYear() - startDate.getFullYear() + dateIndex(date, new Date(date.getFullYear(), 0), MONTHS, 1) / 12;\n } else if (baseUnit === DAYS || baseUnit === WEEKS) {\n index = timeIndex(date, startDate, baseUnit);\n } else {\n index = dateDiff(date, start) / TIME_PER_UNIT[baseUnit];\n }\n return index / baseUnitStep;\n }\n function duration(a, b, unit) {\n var diff;\n if (unit === YEARS) {\n diff = b.getFullYear() - a.getFullYear();\n } else if (unit === MONTHS) {\n diff = duration(a, b, YEARS) * 12 + b.getMonth() - a.getMonth();\n } else if (unit === DAYS) {\n diff = Math.floor(dateDiff(b, a) / TIME_PER_DAY);\n } else {\n diff = Math.floor(dateDiff(b, a) / TIME_PER_UNIT[unit]);\n }\n return diff;\n }\n function lteDateIndex(date, sortedDates) {\n var low = 0;\n var high = sortedDates.length - 1;\n var index;\n while (low <= high) {\n index = Math.floor((low + high) / 2);\n var currentDate = sortedDates[index];\n if (currentDate < date) {\n low = index + 1;\n continue;\n }\n if (currentDate > date) {\n high = index - 1;\n continue;\n }\n while (dateEquals(sortedDates[index - 1], date)) {\n index--;\n }\n return index;\n }\n if (sortedDates[index] <= date) {\n return index;\n }\n return index - 1;\n }\n function parseDate(intlService, date) {\n var result;\n if (isString(date)) {\n result = intlService.parseDate(date) || toDate(date);\n } else {\n result = toDate(date);\n }\n return result;\n }\n function parseDates(intlService, dates) {\n if (isArray(dates)) {\n var result = [];\n for (var idx = 0; idx < dates.length; idx++) {\n result.push(parseDate(intlService, dates[idx]));\n }\n return result;\n }\n return parseDate(intlService, dates);\n }\n var MIN_CATEGORY_POINTS_RANGE = 0.01;\n function indexOf(value, arr) {\n if (value instanceof Date) {\n var length = arr.length;\n for (var idx = 0; idx < length; idx++) {\n if (dateEquals(arr[idx], value)) {\n return idx;\n }\n }\n return -1;\n }\n return arr.indexOf(value);\n }\n var CategoryAxis = Axis.extend({\n init: function (options, chartService) {\n Axis.fn.init.call(this, options, chartService);\n this._ticks = {};\n this._initCategories(this.options);\n },\n _initCategories: function (options) {\n var categories = (options.categories || []).slice(0);\n var definedMin = defined(options.min);\n var definedMax = defined(options.max);\n options.categories = categories;\n if ((definedMin || definedMax) && categories.length) {\n options.srcCategories = options.categories;\n var min = definedMin ? Math.floor(options.min) : 0;\n var max;\n if (definedMax) {\n max = options.justified ? Math.floor(options.max) + 1 : Math.ceil(options.max);\n } else {\n max = categories.length;\n }\n options.categories = options.categories.slice(min, max);\n }\n },\n rangeIndices: function () {\n var options = this.options;\n var length = options.categories.length || 1;\n var min = isNumber(options.min) ? options.min % 1 : 0;\n var max;\n if (isNumber(options.max) && options.max % 1 !== 0 && options.max < this.totalRange().max) {\n max = length - (1 - options.max % 1);\n } else {\n max = length - (options.justified ? 1 : 0);\n }\n return {\n min: min,\n max: max\n };\n },\n totalRangeIndices: function (limit) {\n var options = this.options;\n var min = isNumber(options.min) ? options.min : 0;\n var max;\n if (isNumber(options.max)) {\n max = options.max;\n } else if (isNumber(options.min)) {\n max = min + options.categories.length;\n } else {\n max = (options.srcCategories || options.categories).length - (options.justified ? 1 : 0) || 1;\n }\n if (limit) {\n var totalRange = this.totalRange();\n min = limitValue(min, 0, totalRange.max);\n max = limitValue(max, 0, totalRange.max);\n }\n return {\n min: min,\n max: max\n };\n },\n range: function () {\n var options = this.options;\n return {\n min: isNumber(options.min) ? options.min : 0,\n max: isNumber(options.max) ? options.max : options.categories.length\n };\n },\n totalRange: function () {\n var options = this.options;\n return {\n min: 0,\n max: Math.max(this._seriesMax || 0, (options.srcCategories || options.categories).length) - (options.justified ? 1 : 0)\n };\n },\n getScale: function () {\n var ref = this.rangeIndices();\n var min = ref.min;\n var max = ref.max;\n var lineBox = this.lineBox();\n var size = this.options.vertical ? lineBox.height() : lineBox.width();\n var scale = size / (max - min || 1);\n return scale * (this.options.reverse ? -1 : 1);\n },\n getTickPositions: function (stepSize) {\n var ref = this.options;\n var vertical = ref.vertical;\n var reverse = ref.reverse;\n var ref$1 = this.rangeIndices();\n var min = ref$1.min;\n var max = ref$1.max;\n var lineBox = this.lineBox();\n var scale = this.getScale();\n var pos = lineBox[(vertical ? Y : X) + (reverse ? 2 : 1)];\n var positions = [];\n var current = min % 1 !== 0 ? Math.floor(min / 1) + stepSize : min;\n while (current <= max) {\n positions.push(pos + round(scale * (current - min), COORD_PRECISION));\n current += stepSize;\n }\n return positions;\n },\n getLabelsTickPositions: function () {\n var tickPositions = this.getMajorTickPositions().slice(0);\n var range = this.rangeIndices();\n var scale = this.getScale();\n var box = this.lineBox();\n var options = this.options;\n var axis = options.vertical ? Y : X;\n var start = options.reverse ? 2 : 1;\n var end = options.reverse ? 1 : 2;\n if (range.min % 1 !== 0) {\n tickPositions.unshift(box[axis + start] - scale * (range.min % 1));\n }\n if (range.max % 1 !== 0) {\n tickPositions.push(box[axis + end] + scale * (1 - range.max % 1));\n }\n return tickPositions;\n },\n labelTickIndex: function (label) {\n var range = this.rangeIndices();\n var index = label.index;\n if (range.min > 0) {\n index = index - Math.floor(range.min);\n }\n return index;\n },\n arrangeLabels: function () {\n Axis.fn.arrangeLabels.call(this);\n this.hideOutOfRangeLabels();\n },\n hideOutOfRangeLabels: function () {\n var ref = this;\n var box = ref.box;\n var labels = ref.labels;\n if (labels.length) {\n var valueAxis = this.options.vertical ? Y : X;\n var start = box[valueAxis + 1];\n var end = box[valueAxis + 2];\n var firstLabel = labels[0];\n var lastLabel = last(labels);\n if (firstLabel.box[valueAxis + 1] > end || firstLabel.box[valueAxis + 2] < start) {\n firstLabel.options.visible = false;\n }\n if (lastLabel.box[valueAxis + 1] > end || lastLabel.box[valueAxis + 2] < start) {\n lastLabel.options.visible = false;\n }\n }\n },\n getMajorTickPositions: function () {\n return this.getTicks().majorTicks;\n },\n getMinorTickPositions: function () {\n return this.getTicks().minorTicks;\n },\n getTicks: function () {\n var ref = this.options;\n var reverse = ref.reverse;\n var justified = ref.justified;\n var cache = this._ticks;\n var range = this.rangeIndices();\n var lineBox = this.lineBox();\n var hash = lineBox.getHash() + range.min + ',' + range.max + reverse + justified;\n if (cache._hash !== hash) {\n cache._hash = hash;\n cache.majorTicks = this.getTickPositions(1);\n cache.minorTicks = this.getTickPositions(0.5);\n }\n return cache;\n },\n getSlot: function (from, to, limit) {\n var ref = this;\n var options = ref.options;\n var reverse = options.reverse;\n var justified = options.justified;\n var vertical = options.vertical;\n var ref$1 = this.rangeIndices();\n var min = ref$1.min;\n var valueAxis = vertical ? Y : X;\n var lineBox = this.lineBox();\n var scale = this.getScale();\n var lineStart = lineBox[valueAxis + (reverse ? 2 : 1)];\n var slotBox = lineBox.clone();\n var singleSlot = !defined(to);\n var start = valueOrDefault(from, 0);\n var end = valueOrDefault(to, start);\n end = Math.max(end - 1, start);\n end = Math.max(start, end);\n var p1 = lineStart + (start - min) * scale;\n var p2 = lineStart + (end + 1 - min) * scale;\n if (singleSlot && justified) {\n p2 = p1;\n }\n if (limit) {\n p1 = limitValue(p1, lineBox[valueAxis + 1], lineBox[valueAxis + 2]);\n p2 = limitValue(p2, lineBox[valueAxis + 1], lineBox[valueAxis + 2]);\n }\n slotBox[valueAxis + 1] = reverse ? p2 : p1;\n slotBox[valueAxis + 2] = reverse ? p1 : p2;\n return slotBox;\n },\n slot: function (from, to, limit) {\n var start = from;\n var end = to;\n if (typeof start === 'string') {\n start = this.categoryIndex(start);\n }\n if (typeof end === 'string') {\n end = this.categoryIndex(end);\n }\n return Axis.fn.slot.call(this, start, end, limit);\n },\n pointCategoryIndex: function (point) {\n var ref = this.options;\n var reverse = ref.reverse;\n var justified = ref.justified;\n var vertical = ref.vertical;\n var valueAxis = vertical ? Y : X;\n var lineBox = this.lineBox();\n var range = this.rangeIndices();\n var startValue = reverse ? range.max : range.min;\n var scale = this.getScale();\n var lineStart = lineBox[valueAxis + 1];\n var lineEnd = lineBox[valueAxis + 2];\n var pos = point[valueAxis];\n if (pos < lineStart || pos > lineEnd) {\n return null;\n }\n var value = startValue + (pos - lineStart) / scale;\n var diff = value % 1;\n if (justified) {\n value = Math.round(value);\n } else if (diff === 0 && value > 0) {\n value--;\n }\n return Math.floor(value);\n },\n getCategory: function (point) {\n var index = this.pointCategoryIndex(point);\n if (index === null) {\n return null;\n }\n return this.options.categories[index];\n },\n categoryIndex: function (value) {\n var options = this.options;\n var index = indexOf(value, options.srcCategories || options.categories);\n return index - Math.floor(options.min || 0);\n },\n translateRange: function (delta) {\n var options = this.options;\n var lineBox = this.lineBox();\n var size = options.vertical ? lineBox.height() : lineBox.width();\n var range = options.categories.length;\n var scale = size / range;\n var offset = round(delta / scale, DEFAULT_PRECISION);\n return {\n min: offset,\n max: range + offset\n };\n },\n zoomRange: function (rate) {\n var rangeIndices = this.totalRangeIndices();\n var ref = this.totalRange();\n var totalMin = ref.min;\n var totalMax = ref.max;\n var min = limitValue(rangeIndices.min + rate, totalMin, totalMax);\n var max = limitValue(rangeIndices.max - rate, totalMin, totalMax);\n if (max - min > 0) {\n return {\n min: min,\n max: max\n };\n }\n },\n scaleRange: function (scale) {\n var range = this.options.categories.length;\n var delta = scale * range;\n return {\n min: -delta,\n max: range + delta\n };\n },\n labelsCount: function () {\n var labelsRange = this.labelsRange();\n return labelsRange.max - labelsRange.min;\n },\n labelsRange: function () {\n var options = this.options;\n var justified = options.justified;\n var labelOptions = options.labels;\n var ref = this.totalRangeIndices(true);\n var min = ref.min;\n var max = ref.max;\n var start = Math.floor(min);\n if (!justified) {\n min = Math.floor(min);\n max = Math.ceil(max);\n } else {\n min = Math.ceil(min);\n max = Math.floor(max);\n }\n var skip;\n if (min > labelOptions.skip) {\n skip = labelOptions.skip + labelOptions.step * Math.ceil((min - labelOptions.skip) / labelOptions.step);\n } else {\n skip = labelOptions.skip;\n }\n return {\n min: skip - start,\n max: (options.categories.length ? max + (justified ? 1 : 0) : 0) - start\n };\n },\n createAxisLabel: function (index, labelOptions) {\n var options = this.options;\n var dataItem = options.dataItems ? options.dataItems[index] : null;\n var category = valueOrDefault(options.categories[index], '');\n var text = this.axisLabelText(category, dataItem, labelOptions);\n return new AxisLabel(category, text, index, dataItem, labelOptions);\n },\n shouldRenderNote: function (value) {\n var range = this.totalRangeIndices();\n return Math.floor(range.min) <= value && value <= Math.ceil(range.max);\n },\n noteSlot: function (value) {\n var options = this.options;\n var index = value - Math.floor(options.min || 0);\n return this.getSlot(index);\n },\n arrangeNotes: function () {\n Axis.fn.arrangeNotes.call(this);\n this.hideOutOfRangeNotes();\n },\n hideOutOfRangeNotes: function () {\n var ref = this;\n var notes = ref.notes;\n var box = ref.box;\n if (notes && notes.length) {\n var valueAxis = this.options.vertical ? Y : X;\n var start = box[valueAxis + 1];\n var end = box[valueAxis + 2];\n for (var idx = 0; idx < notes.length; idx++) {\n var note = notes[idx];\n if (note.box && (end < note.box[valueAxis + 1] || note.box[valueAxis + 2] < start)) {\n note.hide();\n }\n }\n }\n },\n pan: function (delta) {\n var range = this.totalRangeIndices(true);\n var scale = this.getScale();\n var offset = round(delta / scale, DEFAULT_PRECISION);\n var totalRange = this.totalRange();\n var min = range.min + offset;\n var max = range.max + offset;\n return this.limitRange(min, max, 0, totalRange.max, offset);\n },\n pointsRange: function (start, end) {\n var ref = this.options;\n var reverse = ref.reverse;\n var vertical = ref.vertical;\n var valueAxis = vertical ? Y : X;\n var lineBox = this.lineBox();\n var range = this.totalRangeIndices(true);\n var scale = this.getScale();\n var lineStart = lineBox[valueAxis + (reverse ? 2 : 1)];\n var diffStart = start[valueAxis] - lineStart;\n var diffEnd = end[valueAxis] - lineStart;\n var min = range.min + diffStart / scale;\n var max = range.min + diffEnd / scale;\n var rangeMin = Math.min(min, max);\n var rangeMax = Math.max(min, max);\n if (rangeMax - rangeMin >= MIN_CATEGORY_POINTS_RANGE) {\n return {\n min: rangeMin,\n max: rangeMax\n };\n }\n },\n valueRange: function () {\n return this.range();\n }\n });\n setDefaultOptions(CategoryAxis, {\n type: 'category',\n categories: [],\n vertical: false,\n majorGridLines: {\n visible: false,\n width: 1,\n color: BLACK\n },\n labels: { zIndex: 1 },\n justified: false,\n _deferLabels: true\n });\n var COORDINATE_LIMIT = 300000;\n var DateLabelFormats = {\n milliseconds: 'HH:mm:ss.fff',\n seconds: 'HH:mm:ss',\n minutes: 'HH:mm',\n hours: 'HH:mm',\n days: 'M/d',\n weeks: 'M/d',\n months: 'MMM \\'yy',\n years: 'yyyy'\n };\n var ZERO_THRESHOLD = 0.2;\n var AUTO = 'auto';\n var BASE_UNITS = [\n MILLISECONDS,\n SECONDS,\n MINUTES,\n HOURS,\n DAYS,\n WEEKS,\n MONTHS,\n YEARS\n ];\n var FIT = 'fit';\n var DateCategoryAxis = CategoryAxis.extend({\n init: function (axisOptions, chartService) {\n CategoryAxis.fn.init.call(this, axisOptions, chartService);\n var intlService = chartService.intl;\n var options = this.options;\n options = deepExtend({ roundToBaseUnit: true }, options, {\n categories: parseDates(intlService, options.categories),\n min: parseDate(intlService, options.min),\n max: parseDate(intlService, options.max)\n });\n options.userSetBaseUnit = options.userSetBaseUnit || options.baseUnit;\n options.userSetBaseUnitStep = options.userSetBaseUnitStep || options.baseUnitStep;\n if (options.categories && options.categories.length > 0) {\n var baseUnit = (options.baseUnit || '').toLowerCase();\n var useDefault = baseUnit !== FIT && !inArray(baseUnit, BASE_UNITS);\n if (useDefault) {\n options.baseUnit = this.defaultBaseUnit(options);\n }\n if (baseUnit === FIT || options.baseUnitStep === AUTO) {\n this.autoBaseUnit(options);\n }\n this._groupsStart = addDuration(options.categories[0], 0, options.baseUnit, options.weekStartDay);\n this.groupCategories(options);\n } else {\n options.baseUnit = options.baseUnit || DAYS;\n }\n this.options = options;\n },\n _initCategories: function () {\n },\n shouldRenderNote: function (value) {\n var range = this.range();\n var categories = this.options.categories || [];\n return dateComparer(value, range.min) >= 0 && dateComparer(value, range.max) <= 0 && categories.length;\n },\n parseNoteValue: function (value) {\n return parseDate(this.chartService.intl, value);\n },\n noteSlot: function (value) {\n return this.getSlot(value);\n },\n translateRange: function (delta) {\n var options = this.options;\n var baseUnit = options.baseUnit;\n var weekStartDay = options.weekStartDay;\n var vertical = options.vertical;\n var lineBox = this.lineBox();\n var size = vertical ? lineBox.height() : lineBox.width();\n var range = this.range();\n var scale = size / (range.max - range.min);\n var offset = round(delta / scale, DEFAULT_PRECISION);\n if (range.min && range.max) {\n var from = addTicks(options.min || range.min, offset);\n var to = addTicks(options.max || range.max, offset);\n range = {\n min: addDuration(from, 0, baseUnit, weekStartDay),\n max: addDuration(to, 0, baseUnit, weekStartDay)\n };\n }\n return range;\n },\n scaleRange: function (delta) {\n var rounds = Math.abs(delta);\n var result = this.range();\n var from = result.min;\n var to = result.max;\n if (from && to) {\n while (rounds--) {\n var range = dateDiff(from, to);\n var step = Math.round(range * 0.1);\n if (delta < 0) {\n from = addTicks(from, step);\n to = addTicks(to, -step);\n } else {\n from = addTicks(from, -step);\n to = addTicks(to, step);\n }\n }\n result = {\n min: from,\n max: to\n };\n }\n return result;\n },\n defaultBaseUnit: function (options) {\n var categories = options.categories;\n var count = defined(categories) ? categories.length : 0;\n var minDiff = MAX_VALUE;\n var lastCategory, unit;\n for (var categoryIx = 0; categoryIx < count; categoryIx++) {\n var category = categories[categoryIx];\n if (category && lastCategory) {\n var diff = absoluteDateDiff(category, lastCategory);\n if (diff > 0) {\n minDiff = Math.min(minDiff, diff);\n if (minDiff >= TIME_PER_YEAR) {\n unit = YEARS;\n } else if (minDiff >= TIME_PER_MONTH - TIME_PER_DAY * 3) {\n unit = MONTHS;\n } else if (minDiff >= TIME_PER_WEEK) {\n unit = WEEKS;\n } else if (minDiff >= TIME_PER_DAY) {\n unit = DAYS;\n } else if (minDiff >= TIME_PER_HOUR) {\n unit = HOURS;\n } else if (minDiff >= TIME_PER_MINUTE) {\n unit = MINUTES;\n } else {\n unit = SECONDS;\n }\n }\n }\n lastCategory = category;\n }\n return unit || DAYS;\n },\n _categoryRange: function (categories) {\n var range = categories._range;\n if (!range) {\n range = categories._range = sparseArrayLimits(categories);\n }\n return range;\n },\n totalRange: function () {\n return {\n min: 0,\n max: this.options.categories.length\n };\n },\n rangeIndices: function () {\n var options = this.options;\n var categories = options.categories;\n var baseUnit = options.baseUnit;\n var baseUnitStep = options.baseUnitStep || 1;\n var categoryLimits = this.categoriesRange();\n var min = toDate(options.min || categoryLimits.min);\n var max = toDate(options.max || categoryLimits.max);\n var minIdx = 0, maxIdx = 0;\n if (categories.length) {\n minIdx = dateIndex(min, categories[0], baseUnit, baseUnitStep);\n maxIdx = dateIndex(max, categories[0], baseUnit, baseUnitStep);\n if (options.roundToBaseUnit) {\n minIdx = Math.floor(minIdx);\n maxIdx = options.justified ? Math.floor(maxIdx) : Math.ceil(maxIdx);\n }\n }\n return {\n min: minIdx,\n max: maxIdx\n };\n },\n labelsRange: function () {\n var options = this.options;\n var labelOptions = options.labels;\n var range = this.rangeIndices();\n var min = Math.floor(range.min);\n var max = Math.ceil(range.max);\n return {\n min: min + labelOptions.skip,\n max: options.categories.length ? max + (options.justified ? 1 : 0) : 0\n };\n },\n categoriesRange: function () {\n var options = this.options;\n var range = this._categoryRange(options.srcCategories || options.categories);\n var max = toDate(range.max);\n if (!options.justified && dateEquals(max, this._roundToTotalStep(max, options, false))) {\n max = this._roundToTotalStep(max, options, true, true);\n }\n return {\n min: toDate(range.min),\n max: max\n };\n },\n currentRange: function () {\n var options = this.options;\n var round$$1 = options.roundToBaseUnit !== false;\n var totalRange = this.categoriesRange();\n var min = options.min;\n var max = options.max;\n if (!min) {\n min = round$$1 ? this._roundToTotalStep(totalRange.min, options, false) : totalRange.min;\n }\n if (!max) {\n max = round$$1 ? this._roundToTotalStep(totalRange.max, options, !options.justified) : totalRange.max;\n }\n return {\n min: min,\n max: max\n };\n },\n datesRange: function () {\n var range = this._categoryRange(this.options.srcCategories || this.options.categories);\n return {\n min: toDate(range.min),\n max: toDate(range.max)\n };\n },\n pan: function (delta) {\n var options = this.options;\n var lineBox = this.lineBox();\n var size = options.vertical ? lineBox.height() : lineBox.width();\n var ref = this.currentRange();\n var min = ref.min;\n var max = ref.max;\n var totalLimits = this.totalLimits();\n var scale = size / (max - min);\n var offset = round(delta / scale, DEFAULT_PRECISION);\n var from = addTicks(min, offset);\n var to = addTicks(max, offset);\n var panRange = this.limitRange(toTime(from), toTime(to), toTime(totalLimits.min), toTime(totalLimits.max), offset);\n if (panRange) {\n panRange.min = toDate(panRange.min);\n panRange.max = toDate(panRange.max);\n panRange.baseUnit = options.baseUnit;\n panRange.baseUnitStep = options.baseUnitStep || 1;\n panRange.userSetBaseUnit = options.userSetBaseUnit;\n panRange.userSetBaseUnitStep = options.userSetBaseUnitStep;\n return panRange;\n }\n },\n pointsRange: function (start, end) {\n var pointsRange = CategoryAxis.fn.pointsRange.call(this, start, end);\n var datesRange = this.currentRange();\n var indicesRange = this.rangeIndices();\n var scale = dateDiff(datesRange.max, datesRange.min) / (indicesRange.max - indicesRange.min);\n var options = this.options;\n var min = addTicks(datesRange.min, pointsRange.min * scale);\n var max = addTicks(datesRange.min, pointsRange.max * scale);\n return {\n min: min,\n max: max,\n baseUnit: options.userSetBaseUnit,\n baseUnitStep: options.userSetBaseUnitStep\n };\n },\n zoomRange: function (delta) {\n var options = this.options;\n var totalLimits = this.totalLimits();\n var weekStartDay = options.weekStartDay;\n var baseUnit = options.baseUnit;\n var baseUnitStep = options.baseUnitStep || 1;\n var ref = this.currentRange();\n var rangeMin = ref.min;\n var rangeMax = ref.max;\n var min = addDuration(rangeMin, delta * baseUnitStep, baseUnit, weekStartDay);\n var max = addDuration(rangeMax, -delta * baseUnitStep, baseUnit, weekStartDay);\n if (options.userSetBaseUnit === FIT) {\n var autoBaseUnitSteps = options.autoBaseUnitSteps;\n var maxDateGroups = options.maxDateGroups;\n var maxDiff = last(autoBaseUnitSteps[baseUnit]) * maxDateGroups * TIME_PER_UNIT[baseUnit];\n var rangeDiff = dateDiff(rangeMax, rangeMin);\n var diff = dateDiff(max, min);\n var baseUnitIndex = BASE_UNITS.indexOf(baseUnit);\n var autoBaseUnitStep, ticks;\n if (diff < TIME_PER_UNIT[baseUnit] && baseUnit !== MILLISECONDS) {\n baseUnit = BASE_UNITS[baseUnitIndex - 1];\n autoBaseUnitStep = last(autoBaseUnitSteps[baseUnit]);\n ticks = (rangeDiff - (maxDateGroups - 1) * autoBaseUnitStep * TIME_PER_UNIT[baseUnit]) / 2;\n min = addTicks(rangeMin, ticks);\n max = addTicks(rangeMax, -ticks);\n } else if (diff > maxDiff && baseUnit !== YEARS) {\n var stepIndex = 0;\n do {\n baseUnitIndex++;\n baseUnit = BASE_UNITS[baseUnitIndex];\n stepIndex = 0;\n ticks = 2 * TIME_PER_UNIT[baseUnit];\n do {\n autoBaseUnitStep = autoBaseUnitSteps[baseUnit][stepIndex];\n stepIndex++;\n } while (stepIndex < autoBaseUnitSteps[baseUnit].length && ticks * autoBaseUnitStep < rangeDiff);\n } while (baseUnit !== YEARS && ticks * autoBaseUnitStep < rangeDiff);\n ticks = (ticks * autoBaseUnitStep - rangeDiff) / 2;\n if (ticks > 0) {\n min = addTicks(rangeMin, -ticks);\n max = addTicks(rangeMax, ticks);\n min = addTicks(min, limitValue(max, totalLimits.min, totalLimits.max) - max);\n max = addTicks(max, limitValue(min, totalLimits.min, totalLimits.max) - min);\n }\n }\n }\n min = toDate(limitValue(min, totalLimits.min, totalLimits.max));\n max = toDate(limitValue(max, totalLimits.min, totalLimits.max));\n if (min && max && dateDiff(max, min) > 0) {\n return {\n min: min,\n max: max,\n baseUnit: options.userSetBaseUnit,\n baseUnitStep: options.userSetBaseUnitStep\n };\n }\n },\n totalLimits: function () {\n var options = this.options;\n var datesRange = this.datesRange();\n var min = this._roundToTotalStep(toDate(datesRange.min), options, false);\n var max = datesRange.max;\n if (!options.justified) {\n max = this._roundToTotalStep(max, options, true, dateEquals(max, this._roundToTotalStep(max, options, false)));\n }\n return {\n min: min,\n max: max\n };\n },\n range: function (rangeOptions) {\n var options = rangeOptions || this.options;\n var categories = options.categories;\n var autoUnit = options.baseUnit === FIT;\n var baseUnit = autoUnit ? BASE_UNITS[0] : options.baseUnit;\n var baseUnitStep = options.baseUnitStep || 1;\n var stepOptions = {\n baseUnit: baseUnit,\n baseUnitStep: baseUnitStep,\n weekStartDay: options.weekStartDay\n };\n var categoryLimits = this._categoryRange(categories);\n var min = toDate(options.min || categoryLimits.min);\n var max = toDate(options.max || categoryLimits.max);\n return {\n min: this._roundToTotalStep(min, stepOptions, false),\n max: this._roundToTotalStep(max, stepOptions, true, true)\n };\n },\n autoBaseUnit: function (options) {\n var categoryLimits = this._categoryRange(options.categories);\n var span = toDate(options.max || categoryLimits.max) - toDate(options.min || categoryLimits.min);\n var maxDateGroups = options.maxDateGroups || this.options.maxDateGroups;\n var autoUnit = options.baseUnit === FIT;\n var autoUnitIx = 0;\n var baseUnit = autoUnit ? BASE_UNITS[autoUnitIx++] : options.baseUnit;\n var units = span / TIME_PER_UNIT[baseUnit];\n var totalUnits = units;\n var autoBaseUnitSteps = deepExtend({}, this.options.autoBaseUnitSteps, options.autoBaseUnitSteps);\n var unitSteps, step, nextStep;\n while (!step || units >= maxDateGroups) {\n unitSteps = unitSteps || autoBaseUnitSteps[baseUnit].slice(0);\n nextStep = unitSteps.shift();\n if (nextStep) {\n step = nextStep;\n units = totalUnits / step;\n } else if (baseUnit === last(BASE_UNITS)) {\n step = Math.ceil(totalUnits / maxDateGroups);\n break;\n } else if (autoUnit) {\n baseUnit = BASE_UNITS[autoUnitIx++] || last(BASE_UNITS);\n totalUnits = span / TIME_PER_UNIT[baseUnit];\n unitSteps = null;\n } else {\n if (units > maxDateGroups) {\n step = Math.ceil(totalUnits / maxDateGroups);\n }\n break;\n }\n }\n options.baseUnitStep = step;\n options.baseUnit = baseUnit;\n },\n groupCategories: function (options) {\n var categories = options.categories;\n var baseUnit = options.baseUnit;\n var baseUnitStep = options.baseUnitStep || 1;\n var maxCategory = toDate(sparseArrayLimits(categories).max);\n var ref = this.range(options);\n var min = ref.min;\n var max = ref.max;\n var groups = [];\n var nextDate;\n for (var date = min; date < max; date = nextDate) {\n groups.push(date);\n nextDate = addDuration(date, baseUnitStep, baseUnit, options.weekStartDay);\n if (nextDate > maxCategory && !options.max) {\n break;\n }\n }\n options.srcCategories = categories;\n options.categories = groups;\n },\n _roundToTotalStep: function (value, axisOptions, upper, roundToNext) {\n var options = axisOptions || this.options;\n var baseUnit = options.baseUnit;\n var baseUnitStep = options.baseUnitStep || 1;\n var start = this._groupsStart;\n if (start) {\n var step = dateIndex(value, start, baseUnit, baseUnitStep);\n var roundedStep = upper ? Math.ceil(step) : Math.floor(step);\n if (roundToNext) {\n roundedStep++;\n }\n return addDuration(start, roundedStep * baseUnitStep, baseUnit, options.weekStartDay);\n }\n return addDuration(value, upper ? baseUnitStep : 0, baseUnit, options.weekStartDay);\n },\n createAxisLabel: function (index, labelOptions) {\n var options = this.options;\n var dataItem = options.dataItems ? options.dataItems[index] : null;\n var date = options.categories[index];\n var baseUnit = options.baseUnit;\n var unitFormat = labelOptions.dateFormats[baseUnit];\n var visible = true;\n if (options.justified) {\n var roundedDate = floorDate(date, baseUnit, options.weekStartDay);\n visible = dateEquals(roundedDate, date);\n } else if (!options.roundToBaseUnit) {\n visible = !dateEquals(this.range().max, date);\n }\n if (visible) {\n labelOptions.format = labelOptions.format || unitFormat;\n var text = this.axisLabelText(date, dataItem, labelOptions);\n if (text) {\n return new AxisLabel(date, text, index, dataItem, labelOptions);\n }\n }\n },\n categoryIndex: function (value) {\n var options = this.options;\n var categories = options.categories;\n var index = -1;\n if (categories.length) {\n index = Math.floor(dateIndex(toDate(value), categories[0], options.baseUnit, options.baseUnitStep || 1));\n }\n return index;\n },\n getSlot: function (a, b, limit) {\n var start = a;\n var end = b;\n if (typeof start === OBJECT) {\n start = this.categoryIndex(start);\n }\n if (typeof end === OBJECT) {\n end = this.categoryIndex(end);\n }\n return CategoryAxis.fn.getSlot.call(this, start, end, limit);\n },\n valueRange: function () {\n var options = this.options;\n var range = this._categoryRange(options.srcCategories || options.categories);\n return {\n min: toDate(range.min),\n max: toDate(range.max)\n };\n }\n });\n setDefaultOptions(DateCategoryAxis, {\n type: DATE,\n labels: { dateFormats: DateLabelFormats },\n autoBaseUnitSteps: {\n milliseconds: [\n 1,\n 10,\n 100\n ],\n seconds: [\n 1,\n 2,\n 5,\n 15,\n 30\n ],\n minutes: [\n 1,\n 2,\n 5,\n 15,\n 30\n ],\n hours: [\n 1,\n 2,\n 3\n ],\n days: [\n 1,\n 2,\n 3\n ],\n weeks: [\n 1,\n 2\n ],\n months: [\n 1,\n 2,\n 3,\n 6\n ],\n years: [\n 1,\n 2,\n 3,\n 5,\n 10,\n 25,\n 50\n ]\n },\n maxDateGroups: 10\n });\n function autoMajorUnit(min, max) {\n var diff = round(max - min, DEFAULT_PRECISION - 1);\n if (diff === 0) {\n if (max === 0) {\n return 0.1;\n }\n diff = Math.abs(max);\n }\n var scale = Math.pow(10, Math.floor(Math.log(diff) / Math.log(10)));\n var relativeValue = round(diff / scale, DEFAULT_PRECISION);\n var scaleMultiplier = 1;\n if (relativeValue < 1.904762) {\n scaleMultiplier = 0.2;\n } else if (relativeValue < 4.761904) {\n scaleMultiplier = 0.5;\n } else if (relativeValue < 9.523809) {\n scaleMultiplier = 1;\n } else {\n scaleMultiplier = 2;\n }\n return round(scale * scaleMultiplier, DEFAULT_PRECISION);\n }\n function autoAxisMin(min, max, narrow) {\n if (!min && !max) {\n return 0;\n }\n var axisMin;\n if (min >= 0 && max >= 0) {\n var minValue = min === max ? 0 : min;\n var diff = (max - minValue) / max;\n if (narrow === false || !narrow && diff > ZERO_THRESHOLD) {\n return 0;\n }\n axisMin = Math.max(0, minValue - (max - minValue) / 2);\n } else {\n axisMin = min;\n }\n return axisMin;\n }\n function autoAxisMax(min, max, narrow) {\n if (!min && !max) {\n return 1;\n }\n var axisMax;\n if (min <= 0 && max <= 0) {\n var maxValue = min === max ? 0 : max;\n var diff = Math.abs((maxValue - min) / maxValue);\n if (narrow === false || !narrow && diff > ZERO_THRESHOLD) {\n return 0;\n }\n axisMax = Math.min(0, maxValue - (min - maxValue) / 2);\n } else {\n axisMax = max;\n }\n return axisMax;\n }\n function floor(value, step) {\n return round(Math.floor(value / step) * step, DEFAULT_PRECISION);\n }\n function ceil(value, step) {\n return round(Math.ceil(value / step) * step, DEFAULT_PRECISION);\n }\n function limitCoordinate(value) {\n return Math.max(Math.min(value, COORDINATE_LIMIT), -COORDINATE_LIMIT);\n }\n var MIN_VALUE_RANGE = Math.pow(10, -DEFAULT_PRECISION + 1);\n var NumericAxis = Axis.extend({\n init: function (seriesMin, seriesMax, options, chartService) {\n var autoOptions = autoAxisOptions(seriesMin, seriesMax, options);\n var totalOptions = totalAxisOptions(autoOptions, options);\n Axis.fn.init.call(this, axisOptions(autoOptions, options), chartService);\n this.totalMin = totalOptions.min;\n this.totalMax = totalOptions.max;\n this.totalMajorUnit = totalOptions.majorUnit;\n this.seriesMin = seriesMin;\n this.seriesMax = seriesMax;\n },\n startValue: function () {\n return 0;\n },\n range: function () {\n var options = this.options;\n return {\n min: options.min,\n max: options.max\n };\n },\n getDivisions: function (stepValue) {\n if (stepValue === 0) {\n return 1;\n }\n var options = this.options;\n var range = options.max - options.min;\n return Math.floor(round(range / stepValue, COORD_PRECISION)) + 1;\n },\n getTickPositions: function (unit, skipUnit) {\n var options = this.options;\n var vertical = options.vertical;\n var reverse = options.reverse;\n var lineBox = this.lineBox();\n var lineSize = vertical ? lineBox.height() : lineBox.width();\n var range = options.max - options.min;\n var scale = lineSize / range;\n var step = unit * scale;\n var divisions = this.getDivisions(unit);\n var dir = (vertical ? -1 : 1) * (reverse ? -1 : 1);\n var startEdge = dir === 1 ? 1 : 2;\n var positions = [];\n var pos = lineBox[(vertical ? Y : X) + startEdge];\n var skipStep = 0;\n if (skipUnit) {\n skipStep = skipUnit / unit;\n }\n for (var idx = 0; idx < divisions; idx++) {\n if (idx % skipStep !== 0) {\n positions.push(round(pos, COORD_PRECISION));\n }\n pos = pos + step * dir;\n }\n return positions;\n },\n getMajorTickPositions: function () {\n return this.getTickPositions(this.options.majorUnit);\n },\n getMinorTickPositions: function () {\n return this.getTickPositions(this.options.minorUnit);\n },\n getSlot: function (a, b, limit) {\n if (limit === void 0) {\n limit = false;\n }\n var options = this.options;\n var vertical = options.vertical;\n var reverse = options.reverse;\n var valueAxis = vertical ? Y : X;\n var lineBox = this.lineBox();\n var lineStart = lineBox[valueAxis + (reverse ? 2 : 1)];\n var lineSize = vertical ? lineBox.height() : lineBox.width();\n var dir = reverse ? -1 : 1;\n var step = dir * (lineSize / (options.max - options.min));\n var slotBox = new Box(lineBox.x1, lineBox.y1, lineBox.x1, lineBox.y1);\n var start = a;\n var end = b;\n if (!defined(start)) {\n start = end || 0;\n }\n if (!defined(end)) {\n end = start || 0;\n }\n if (limit) {\n start = Math.max(Math.min(start, options.max), options.min);\n end = Math.max(Math.min(end, options.max), options.min);\n }\n var p1, p2;\n if (vertical) {\n p1 = options.max - Math.max(start, end);\n p2 = options.max - Math.min(start, end);\n } else {\n p1 = Math.min(start, end) - options.min;\n p2 = Math.max(start, end) - options.min;\n }\n slotBox[valueAxis + 1] = limitCoordinate(lineStart + step * (reverse ? p2 : p1));\n slotBox[valueAxis + 2] = limitCoordinate(lineStart + step * (reverse ? p1 : p2));\n return slotBox;\n },\n getValue: function (point) {\n var options = this.options;\n var vertical = options.vertical;\n var reverse = options.reverse;\n var max = Number(options.max);\n var min = Number(options.min);\n var valueAxis = vertical ? Y : X;\n var lineBox = this.lineBox();\n var lineStart = lineBox[valueAxis + (reverse ? 2 : 1)];\n var lineSize = vertical ? lineBox.height() : lineBox.width();\n var dir = reverse ? -1 : 1;\n var offset = dir * (point[valueAxis] - lineStart);\n var step = (max - min) / lineSize;\n var valueOffset = offset * step;\n if (offset < 0 || offset > lineSize) {\n return null;\n }\n var value = vertical ? max - valueOffset : min + valueOffset;\n return round(value, DEFAULT_PRECISION);\n },\n translateRange: function (delta) {\n var options = this.options;\n var vertical = options.vertical;\n var reverse = options.reverse;\n var max = options.max;\n var min = options.min;\n var lineBox = this.lineBox();\n var size = vertical ? lineBox.height() : lineBox.width();\n var range = max - min;\n var scale = size / range;\n var offset = round(delta / scale, DEFAULT_PRECISION);\n if ((vertical || reverse) && !(vertical && reverse)) {\n offset = -offset;\n }\n return {\n min: min + offset,\n max: max + offset\n };\n },\n scaleRange: function (delta) {\n var options = this.options;\n var offset = -delta * options.majorUnit;\n return {\n min: options.min - offset,\n max: options.max + offset\n };\n },\n labelsCount: function () {\n return this.getDivisions(this.options.majorUnit);\n },\n createAxisLabel: function (index, labelOptions) {\n var options = this.options;\n var value = round(options.min + index * options.majorUnit, DEFAULT_PRECISION);\n var text = this.axisLabelText(value, null, labelOptions);\n return new AxisLabel(value, text, index, null, labelOptions);\n },\n shouldRenderNote: function (value) {\n var range = this.range();\n return range.min <= value && value <= range.max;\n },\n pan: function (delta) {\n var range = this.translateRange(delta);\n return this.limitRange(range.min, range.max, this.totalMin, this.totalMax);\n },\n pointsRange: function (start, end) {\n var startValue = this.getValue(start);\n var endValue = this.getValue(end);\n var min = Math.min(startValue, endValue);\n var max = Math.max(startValue, endValue);\n if (this.isValidRange(min, max)) {\n return {\n min: min,\n max: max\n };\n }\n },\n zoomRange: function (delta) {\n var ref = this;\n var totalMin = ref.totalMin;\n var totalMax = ref.totalMax;\n var newRange = this.scaleRange(delta);\n var min = limitValue(newRange.min, totalMin, totalMax);\n var max = limitValue(newRange.max, totalMin, totalMax);\n if (this.isValidRange(min, max)) {\n return {\n min: min,\n max: max\n };\n }\n },\n isValidRange: function (min, max) {\n return max - min > MIN_VALUE_RANGE;\n }\n });\n function autoAxisOptions(seriesMin, seriesMax, options) {\n var narrowRange = options.narrowRange;\n var autoMin = autoAxisMin(seriesMin, seriesMax, narrowRange);\n var autoMax = autoAxisMax(seriesMin, seriesMax, narrowRange);\n var majorUnit = autoMajorUnit(autoMin, autoMax);\n var autoOptions = { majorUnit: majorUnit };\n if (options.roundToMajorUnit !== false) {\n if (autoMin < 0 && remainderClose(autoMin, majorUnit, 1 / 3)) {\n autoMin -= majorUnit;\n }\n if (autoMax > 0 && remainderClose(autoMax, majorUnit, 1 / 3)) {\n autoMax += majorUnit;\n }\n }\n autoOptions.min = floor(autoMin, majorUnit);\n autoOptions.max = ceil(autoMax, majorUnit);\n return autoOptions;\n }\n function totalAxisOptions(autoOptions, options) {\n return {\n min: defined(options.min) ? Math.min(autoOptions.min, options.min) : autoOptions.min,\n max: defined(options.max) ? Math.max(autoOptions.max, options.max) : autoOptions.max,\n majorUnit: autoOptions.majorUnit\n };\n }\n function axisOptions(autoOptions, userOptions) {\n var options = userOptions;\n if (userOptions) {\n var userSetLimits = defined(userOptions.min) || defined(userOptions.max);\n if (userSetLimits) {\n if (userOptions.min === userOptions.max) {\n if (userOptions.min > 0) {\n userOptions.min = 0;\n } else {\n userOptions.max = 1;\n }\n }\n }\n if (userOptions.majorUnit) {\n autoOptions.min = floor(autoOptions.min, userOptions.majorUnit);\n autoOptions.max = ceil(autoOptions.max, userOptions.majorUnit);\n } else if (userSetLimits) {\n options = deepExtend(autoOptions, userOptions);\n autoOptions.majorUnit = autoMajorUnit(options.min, options.max);\n }\n }\n autoOptions.minorUnit = (options.majorUnit || autoOptions.majorUnit) / 5;\n return deepExtend(autoOptions, options);\n }\n function remainderClose(value, divisor, ratio) {\n var remainder = round(Math.abs(value % divisor), DEFAULT_PRECISION);\n var threshold = divisor * (1 - ratio);\n return remainder === 0 || remainder > threshold;\n }\n setDefaultOptions(NumericAxis, {\n type: 'numeric',\n min: 0,\n max: 1,\n vertical: true,\n majorGridLines: {\n visible: true,\n width: 1,\n color: BLACK\n },\n labels: { format: '#.####################' },\n zIndex: 1\n });\n var DateValueAxis = Axis.extend({\n init: function (seriesMin, seriesMax, axisOptions, chartService) {\n var min = toDate(seriesMin);\n var max = toDate(seriesMax);\n var intlService = chartService.intl;\n var options = axisOptions || {};\n options = deepExtend(options || {}, {\n min: parseDate(intlService, options.min),\n max: parseDate(intlService, options.max),\n axisCrossingValue: parseDates(intlService, options.axisCrossingValues || options.axisCrossingValue)\n });\n options = applyDefaults(min, max, options);\n Axis.fn.init.call(this, options, chartService);\n this.seriesMin = min;\n this.seriesMax = max;\n this.totalMin = toTime(floorDate(toTime(min) - 1, options.baseUnit));\n this.totalMax = toTime(ceilDate(toTime(max) + 1, options.baseUnit));\n },\n range: function () {\n var options = this.options;\n return {\n min: options.min,\n max: options.max\n };\n },\n getDivisions: function (stepValue) {\n var options = this.options;\n return Math.floor(duration(options.min, options.max, options.baseUnit) / stepValue + 1);\n },\n getTickPositions: function (step) {\n var options = this.options;\n var vertical = options.vertical;\n var lineBox = this.lineBox();\n var dir = (vertical ? -1 : 1) * (options.reverse ? -1 : 1);\n var startEdge = dir === 1 ? 1 : 2;\n var start = lineBox[(vertical ? Y : X) + startEdge];\n var divisions = this.getDivisions(step);\n var timeRange = dateDiff(options.max, options.min);\n var lineSize = vertical ? lineBox.height() : lineBox.width();\n var scale = lineSize / timeRange;\n var positions = [start];\n for (var i = 1; i < divisions; i++) {\n var date = addDuration(options.min, i * step, options.baseUnit);\n var pos = start + dateDiff(date, options.min) * scale * dir;\n positions.push(round(pos, COORD_PRECISION));\n }\n return positions;\n },\n getMajorTickPositions: function () {\n return this.getTickPositions(this.options.majorUnit);\n },\n getMinorTickPositions: function () {\n return this.getTickPositions(this.options.minorUnit);\n },\n getSlot: function (a, b, limit) {\n return NumericAxis.prototype.getSlot.call(this, toDate(a), toDate(b), limit);\n },\n getValue: function (point) {\n var value = NumericAxis.prototype.getValue.call(this, point);\n return value !== null ? toDate(value) : null;\n },\n labelsCount: function () {\n return this.getDivisions(this.options.majorUnit);\n },\n createAxisLabel: function (index, labelOptions) {\n var options = this.options;\n var offset = index * options.majorUnit;\n var date = options.min;\n if (offset > 0) {\n date = addDuration(date, offset, options.baseUnit);\n }\n var unitFormat = labelOptions.dateFormats[options.baseUnit];\n labelOptions.format = labelOptions.format || unitFormat;\n var text = this.axisLabelText(date, null, labelOptions);\n return new AxisLabel(date, text, index, null, labelOptions);\n },\n translateRange: function (delta, exact) {\n var options = this.options;\n var baseUnit = options.baseUnit;\n var weekStartDay = options.weekStartDay;\n var lineBox = this.lineBox();\n var size = options.vertical ? lineBox.height() : lineBox.width();\n var range = this.range();\n var scale = size / dateDiff(range.max, range.min);\n var offset = round(delta / scale, DEFAULT_PRECISION);\n var from = addTicks(options.min, offset);\n var to = addTicks(options.max, offset);\n if (!exact) {\n from = addDuration(from, 0, baseUnit, weekStartDay);\n to = addDuration(to, 0, baseUnit, weekStartDay);\n }\n return {\n min: from,\n max: to\n };\n },\n scaleRange: function (delta) {\n var ref = this.options;\n var from = ref.min;\n var to = ref.max;\n var rounds = Math.abs(delta);\n while (rounds--) {\n var range = dateDiff(from, to);\n var step = Math.round(range * 0.1);\n if (delta < 0) {\n from = addTicks(from, step);\n to = addTicks(to, -step);\n } else {\n from = addTicks(from, -step);\n to = addTicks(to, step);\n }\n }\n return {\n min: from,\n max: to\n };\n },\n shouldRenderNote: function (value) {\n var range = this.range();\n return dateComparer(value, range.min) >= 0 && dateComparer(value, range.max) <= 0;\n },\n pan: function (delta) {\n var range = this.translateRange(delta, true);\n var limittedRange = this.limitRange(toTime(range.min), toTime(range.max), this.totalMin, this.totalMax);\n if (limittedRange) {\n return {\n min: toDate(limittedRange.min),\n max: toDate(limittedRange.max)\n };\n }\n },\n pointsRange: function (start, end) {\n var startValue = this.getValue(start);\n var endValue = this.getValue(end);\n var min = Math.min(startValue, endValue);\n var max = Math.max(startValue, endValue);\n return {\n min: toDate(min),\n max: toDate(max)\n };\n },\n zoomRange: function (delta) {\n var range = this.scaleRange(delta);\n var min = toDate(limitValue(toTime(range.min), this.totalMin, this.totalMax));\n var max = toDate(limitValue(toTime(range.max), this.totalMin, this.totalMax));\n return {\n min: min,\n max: max\n };\n }\n });\n function timeUnits(delta) {\n var unit = HOURS;\n if (delta >= TIME_PER_YEAR) {\n unit = YEARS;\n } else if (delta >= TIME_PER_MONTH) {\n unit = MONTHS;\n } else if (delta >= TIME_PER_WEEK) {\n unit = WEEKS;\n } else if (delta >= TIME_PER_DAY) {\n unit = DAYS;\n }\n return unit;\n }\n function applyDefaults(seriesMin, seriesMax, options) {\n var min = options.min || seriesMin;\n var max = options.max || seriesMax;\n var baseUnit = options.baseUnit || (max && min ? timeUnits(absoluteDateDiff(max, min)) : HOURS);\n var baseUnitTime = TIME_PER_UNIT[baseUnit];\n var autoMin = floorDate(toTime(min) - 1, baseUnit) || toDate(max);\n var autoMax = ceilDate(toTime(max) + 1, baseUnit);\n var userMajorUnit = options.majorUnit ? options.majorUnit : undefined;\n var majorUnit = userMajorUnit || ceil(autoMajorUnit(autoMin.getTime(), autoMax.getTime()), baseUnitTime) / baseUnitTime;\n var actualUnits = duration(autoMin, autoMax, baseUnit);\n var totalUnits = ceil(actualUnits, majorUnit);\n var unitsToAdd = totalUnits - actualUnits;\n var head = Math.floor(unitsToAdd / 2);\n var tail = unitsToAdd - head;\n if (!options.baseUnit) {\n delete options.baseUnit;\n }\n options.baseUnit = options.baseUnit || baseUnit;\n options.min = options.min || addDuration(autoMin, -head, baseUnit);\n options.max = options.max || addDuration(autoMax, tail, baseUnit);\n options.minorUnit = options.minorUnit || majorUnit / 5;\n options.majorUnit = majorUnit;\n return options;\n }\n setDefaultOptions(DateValueAxis, {\n type: DATE,\n majorGridLines: {\n visible: true,\n width: 1,\n color: BLACK\n },\n labels: { dateFormats: DateLabelFormats }\n });\n var DEFAULT_MAJOR_UNIT = 10;\n var LogarithmicAxis = Axis.extend({\n init: function (seriesMin, seriesMax, options, chartService) {\n var axisOptions = deepExtend({\n majorUnit: DEFAULT_MAJOR_UNIT,\n min: seriesMin,\n max: seriesMax\n }, options);\n var base = axisOptions.majorUnit;\n var autoMax = autoAxisMax$1(seriesMax, base);\n var autoMin = autoAxisMin$1(seriesMin, seriesMax, axisOptions);\n var range = initRange(autoMin, autoMax, axisOptions, options);\n axisOptions.max = range.max;\n axisOptions.min = range.min;\n axisOptions.minorUnit = options.minorUnit || round(base - 1, DEFAULT_PRECISION);\n Axis.fn.init.call(this, axisOptions, chartService);\n this.totalMin = defined(options.min) ? Math.min(autoMin, options.min) : autoMin;\n this.totalMax = defined(options.max) ? Math.max(autoMax, options.max) : autoMax;\n this.logMin = round(log(range.min, base), DEFAULT_PRECISION);\n this.logMax = round(log(range.max, base), DEFAULT_PRECISION);\n this.seriesMin = seriesMin;\n this.seriesMax = seriesMax;\n this.createLabels();\n },\n startValue: function () {\n return this.options.min;\n },\n getSlot: function (a, b, limit) {\n var ref = this;\n var options = ref.options;\n var logMin = ref.logMin;\n var logMax = ref.logMax;\n var reverse = options.reverse;\n var vertical = options.vertical;\n var base = options.majorUnit;\n var valueAxis = vertical ? Y : X;\n var lineBox = this.lineBox();\n var lineStart = lineBox[valueAxis + (reverse ? 2 : 1)];\n var lineSize = vertical ? lineBox.height() : lineBox.width();\n var dir = reverse ? -1 : 1;\n var step = dir * (lineSize / (logMax - logMin));\n var slotBox = new Box(lineBox.x1, lineBox.y1, lineBox.x1, lineBox.y1);\n var start = a;\n var end = b;\n if (!defined(start)) {\n start = end || 1;\n }\n if (!defined(end)) {\n end = start || 1;\n }\n if (start <= 0 || end <= 0) {\n return null;\n }\n if (limit) {\n start = Math.max(Math.min(start, options.max), options.min);\n end = Math.max(Math.min(end, options.max), options.min);\n }\n start = log(start, base);\n end = log(end, base);\n var p1, p2;\n if (vertical) {\n p1 = logMax - Math.max(start, end);\n p2 = logMax - Math.min(start, end);\n } else {\n p1 = Math.min(start, end) - logMin;\n p2 = Math.max(start, end) - logMin;\n }\n slotBox[valueAxis + 1] = limitCoordinate(lineStart + step * (reverse ? p2 : p1));\n slotBox[valueAxis + 2] = limitCoordinate(lineStart + step * (reverse ? p1 : p2));\n return slotBox;\n },\n getValue: function (point) {\n var ref = this;\n var options = ref.options;\n var logMin = ref.logMin;\n var logMax = ref.logMax;\n var reverse = options.reverse;\n var vertical = options.vertical;\n var base = options.majorUnit;\n var lineBox = this.lineBox();\n var dir = vertical === reverse ? 1 : -1;\n var startEdge = dir === 1 ? 1 : 2;\n var lineSize = vertical ? lineBox.height() : lineBox.width();\n var step = (logMax - logMin) / lineSize;\n var valueAxis = vertical ? Y : X;\n var lineStart = lineBox[valueAxis + startEdge];\n var offset = dir * (point[valueAxis] - lineStart);\n var valueOffset = offset * step;\n if (offset < 0 || offset > lineSize) {\n return null;\n }\n var value = logMin + valueOffset;\n return round(Math.pow(base, value), DEFAULT_PRECISION);\n },\n range: function () {\n var options = this.options;\n return {\n min: options.min,\n max: options.max\n };\n },\n scaleRange: function (delta) {\n var base = this.options.majorUnit;\n var offset = -delta;\n return {\n min: Math.pow(base, this.logMin - offset),\n max: Math.pow(base, this.logMax + offset)\n };\n },\n translateRange: function (delta) {\n var ref = this;\n var options = ref.options;\n var logMin = ref.logMin;\n var logMax = ref.logMax;\n var reverse = options.reverse;\n var vertical = options.vertical;\n var base = options.majorUnit;\n var lineBox = this.lineBox();\n var size = vertical ? lineBox.height() : lineBox.width();\n var scale = size / (logMax - logMin);\n var offset = round(delta / scale, DEFAULT_PRECISION);\n if ((vertical || reverse) && !(vertical && reverse)) {\n offset = -offset;\n }\n return {\n min: Math.pow(base, logMin + offset),\n max: Math.pow(base, logMax + offset)\n };\n },\n labelsCount: function () {\n var floorMax = Math.floor(this.logMax);\n var count = Math.floor(floorMax - this.logMin) + 1;\n return count;\n },\n getMajorTickPositions: function () {\n var ticks = [];\n this.traverseMajorTicksPositions(function (position) {\n ticks.push(position);\n }, {\n step: 1,\n skip: 0\n });\n return ticks;\n },\n createTicks: function (lineGroup) {\n var options = this.options;\n var majorTicks = options.majorTicks;\n var minorTicks = options.minorTicks;\n var vertical = options.vertical;\n var mirror = options.labels.mirror;\n var lineBox = this.lineBox();\n var ticks = [];\n var tickLineOptions = { vertical: vertical };\n function render(tickPosition, tickOptions) {\n tickLineOptions.tickX = mirror ? lineBox.x2 : lineBox.x2 - tickOptions.size;\n tickLineOptions.tickY = mirror ? lineBox.y1 - tickOptions.size : lineBox.y1;\n tickLineOptions.position = tickPosition;\n lineGroup.append(createAxisTick(tickLineOptions, tickOptions));\n }\n if (majorTicks.visible) {\n this.traverseMajorTicksPositions(render, majorTicks);\n }\n if (minorTicks.visible) {\n this.traverseMinorTicksPositions(render, minorTicks);\n }\n return ticks;\n },\n createGridLines: function (altAxis) {\n var options = this.options;\n var minorGridLines = options.minorGridLines;\n var majorGridLines = options.majorGridLines;\n var vertical = options.vertical;\n var lineBox = altAxis.lineBox();\n var lineOptions = {\n lineStart: lineBox[vertical ? 'x1' : 'y1'],\n lineEnd: lineBox[vertical ? 'x2' : 'y2'],\n vertical: vertical\n };\n var majorTicks = [];\n var container = this.gridLinesVisual();\n function render(tickPosition, gridLine) {\n if (!inArray(tickPosition, majorTicks)) {\n lineOptions.position = tickPosition;\n container.append(createAxisGridLine(lineOptions, gridLine));\n majorTicks.push(tickPosition);\n }\n }\n if (majorGridLines.visible) {\n this.traverseMajorTicksPositions(render, majorGridLines);\n }\n if (minorGridLines.visible) {\n this.traverseMinorTicksPositions(render, minorGridLines);\n }\n return container.children;\n },\n traverseMajorTicksPositions: function (callback, tickOptions) {\n var ref = this._lineOptions();\n var lineStart = ref.lineStart;\n var step = ref.step;\n var ref$1 = this;\n var logMin = ref$1.logMin;\n var logMax = ref$1.logMax;\n for (var power = Math.ceil(logMin) + tickOptions.skip; power <= logMax; power += tickOptions.step) {\n var position = round(lineStart + step * (power - logMin), DEFAULT_PRECISION);\n callback(position, tickOptions);\n }\n },\n traverseMinorTicksPositions: function (callback, tickOptions) {\n var this$1 = this;\n var ref = this.options;\n var min = ref.min;\n var max = ref.max;\n var minorUnit = ref.minorUnit;\n var base = ref.majorUnit;\n var ref$1 = this._lineOptions();\n var lineStart = ref$1.lineStart;\n var step = ref$1.step;\n var ref$2 = this;\n var logMin = ref$2.logMin;\n var logMax = ref$2.logMax;\n var start = Math.floor(logMin);\n for (var power = start; power < logMax; power++) {\n var minorOptions = this$1._minorIntervalOptions(power);\n for (var idx = tickOptions.skip; idx < minorUnit; idx += tickOptions.step) {\n var value = minorOptions.value + idx * minorOptions.minorStep;\n if (value > max) {\n break;\n }\n if (value >= min) {\n var position = round(lineStart + step * (log(value, base) - logMin), DEFAULT_PRECISION);\n callback(position, tickOptions);\n }\n }\n }\n },\n createAxisLabel: function (index, labelOptions) {\n var power = Math.ceil(this.logMin + index);\n var value = Math.pow(this.options.majorUnit, power);\n var text = this.axisLabelText(value, null, labelOptions);\n return new AxisLabel(value, text, index, null, labelOptions);\n },\n shouldRenderNote: function (value) {\n var range = this.range();\n return range.min <= value && value <= range.max;\n },\n pan: function (delta) {\n var range = this.translateRange(delta);\n return this.limitRange(range.min, range.max, this.totalMin, this.totalMax, -delta);\n },\n pointsRange: function (start, end) {\n var startValue = this.getValue(start);\n var endValue = this.getValue(end);\n var min = Math.min(startValue, endValue);\n var max = Math.max(startValue, endValue);\n return {\n min: min,\n max: max\n };\n },\n zoomRange: function (delta) {\n var ref = this;\n var options = ref.options;\n var totalMin = ref.totalMin;\n var totalMax = ref.totalMax;\n var newRange = this.scaleRange(delta);\n var min = limitValue(newRange.min, totalMin, totalMax);\n var max = limitValue(newRange.max, totalMin, totalMax);\n var base = options.majorUnit;\n var acceptOptionsRange = max > min && options.min && options.max && round(log(options.max, base) - log(options.min, base), DEFAULT_PRECISION) < 1;\n var acceptNewRange = !(options.min === totalMin && options.max === totalMax) && round(log(max, base) - log(min, base), DEFAULT_PRECISION) >= 1;\n if (acceptOptionsRange || acceptNewRange) {\n return {\n min: min,\n max: max\n };\n }\n },\n _minorIntervalOptions: function (power) {\n var ref = this.options;\n var minorUnit = ref.minorUnit;\n var base = ref.majorUnit;\n var value = Math.pow(base, power);\n var nextValue = Math.pow(base, power + 1);\n var difference = nextValue - value;\n var minorStep = difference / minorUnit;\n return {\n value: value,\n minorStep: minorStep\n };\n },\n _lineOptions: function () {\n var ref = this.options;\n var reverse = ref.reverse;\n var vertical = ref.vertical;\n var valueAxis = vertical ? Y : X;\n var lineBox = this.lineBox();\n var dir = vertical === reverse ? 1 : -1;\n var startEdge = dir === 1 ? 1 : 2;\n var lineSize = vertical ? lineBox.height() : lineBox.width();\n var step = dir * (lineSize / (this.logMax - this.logMin));\n var lineStart = lineBox[valueAxis + startEdge];\n return {\n step: step,\n lineStart: lineStart,\n lineBox: lineBox\n };\n }\n });\n function initRange(autoMin, autoMax, axisOptions, options) {\n var min = axisOptions.min;\n var max = axisOptions.max;\n if (defined(axisOptions.axisCrossingValue) && axisOptions.axisCrossingValue <= 0) {\n throwNegativeValuesError();\n }\n if (!defined(options.max)) {\n max = autoMax;\n } else if (options.max <= 0) {\n throwNegativeValuesError();\n }\n if (!defined(options.min)) {\n min = autoMin;\n } else if (options.min <= 0) {\n throwNegativeValuesError();\n }\n return {\n min: min,\n max: max\n };\n }\n function autoAxisMin$1(min, max, options) {\n var base = options.majorUnit;\n var autoMin = min;\n if (min <= 0) {\n autoMin = max <= 1 ? Math.pow(base, -2) : 1;\n } else if (!options.narrowRange) {\n autoMin = Math.pow(base, Math.floor(log(min, base)));\n }\n return autoMin;\n }\n function autoAxisMax$1(max, base) {\n var logMaxRemainder = round(log(max, base), DEFAULT_PRECISION) % 1;\n var autoMax;\n if (max <= 0) {\n autoMax = base;\n } else if (logMaxRemainder !== 0 && (logMaxRemainder < 0.3 || logMaxRemainder > 0.9)) {\n autoMax = Math.pow(base, log(max, base) + 0.2);\n } else {\n autoMax = Math.pow(base, Math.ceil(log(max, base)));\n }\n return autoMax;\n }\n function throwNegativeValuesError() {\n throw new Error('Non positive values cannot be used for a logarithmic axis');\n }\n function log(y, x) {\n return Math.log(y) / Math.log(x);\n }\n setDefaultOptions(LogarithmicAxis, {\n type: 'log',\n majorUnit: DEFAULT_MAJOR_UNIT,\n minorUnit: 1,\n axisCrossingValue: 1,\n vertical: true,\n majorGridLines: {\n visible: true,\n width: 1,\n color: BLACK\n },\n zIndex: 1,\n _deferLabels: true\n });\n var GridLinesMixin = {\n createGridLines: function (altAxis) {\n var options = this.options;\n var radius = Math.abs(this.box.center().y - altAxis.lineBox().y1);\n var gridLines = [];\n var skipMajor = false;\n var majorAngles, minorAngles;\n if (options.majorGridLines.visible) {\n majorAngles = this.majorGridLineAngles(altAxis);\n skipMajor = true;\n gridLines = this.renderMajorGridLines(majorAngles, radius, options.majorGridLines);\n }\n if (options.minorGridLines.visible) {\n minorAngles = this.minorGridLineAngles(altAxis, skipMajor);\n append(gridLines, this.renderMinorGridLines(minorAngles, radius, options.minorGridLines, altAxis, skipMajor));\n }\n return gridLines;\n },\n renderMajorGridLines: function (angles, radius, options) {\n return this.renderGridLines(angles, radius, options);\n },\n renderMinorGridLines: function (angles, radius, options, altAxis, skipMajor) {\n var radiusCallback = this.radiusCallback && this.radiusCallback(radius, altAxis, skipMajor);\n return this.renderGridLines(angles, radius, options, radiusCallback);\n },\n renderGridLines: function (angles, radius, options, radiusCallback) {\n var style = {\n stroke: {\n width: options.width,\n color: options.color,\n dashType: options.dashType\n }\n };\n var center = this.box.center();\n var circle = new Circle([\n center.x,\n center.y\n ], radius);\n var container = this.gridLinesVisual();\n for (var i = 0; i < angles.length; i++) {\n var line = new Path(style);\n if (radiusCallback) {\n circle.radius = radiusCallback(angles[i]);\n }\n line.moveTo(circle.center).lineTo(circle.pointAt(angles[i] + 180));\n container.append(line);\n }\n return container.children;\n },\n gridLineAngles: function (altAxis, size, skip, step, skipAngles) {\n var this$1 = this;\n var divs = this.intervals(size, skip, step, skipAngles);\n var options = altAxis.options;\n var altAxisVisible = options.visible && (options.line || {}).visible !== false;\n return map(divs, function (d) {\n var alpha = this$1.intervalAngle(d);\n if (!altAxisVisible || alpha !== 90) {\n return alpha;\n }\n });\n }\n };\n var RadarCategoryAxis = CategoryAxis.extend({\n range: function () {\n return {\n min: 0,\n max: this.options.categories.length\n };\n },\n reflow: function (box) {\n this.box = box;\n this.reflowLabels();\n },\n lineBox: function () {\n return this.box;\n },\n reflowLabels: function () {\n var this$1 = this;\n var ref = this;\n var labels = ref.labels;\n var labelOptions = ref.options.labels;\n var skip = labelOptions.skip || 0;\n var step = labelOptions.step || 1;\n var measureBox = new Box();\n for (var i = 0; i < labels.length; i++) {\n labels[i].reflow(measureBox);\n var labelBox = labels[i].box;\n labels[i].reflow(this$1.getSlot(skip + i * step).adjacentBox(0, labelBox.width(), labelBox.height()));\n }\n },\n intervals: function (size, skipOption, stepOption, skipAngles) {\n if (skipAngles === void 0) {\n skipAngles = false;\n }\n var options = this.options;\n var categories = options.categories.length;\n var divCount = categories / size || 1;\n var divAngle = 360 / divCount;\n var skip = skipOption || 0;\n var step = stepOption || 1;\n var divs = [];\n var angle = 0;\n for (var i = skip; i < divCount; i += step) {\n if (options.reverse) {\n angle = 360 - i * divAngle;\n } else {\n angle = i * divAngle;\n }\n angle = round(angle, COORD_PRECISION) % 360;\n if (!(skipAngles && inArray(angle, skipAngles))) {\n divs.push(angle);\n }\n }\n return divs;\n },\n majorIntervals: function () {\n return this.intervals(1);\n },\n minorIntervals: function () {\n return this.intervals(0.5);\n },\n intervalAngle: function (interval) {\n return (360 + interval + this.options.startAngle) % 360;\n },\n majorAngles: function () {\n var this$1 = this;\n return map(this.majorIntervals(), function (interval) {\n return this$1.intervalAngle(interval);\n });\n },\n createLine: function () {\n return [];\n },\n majorGridLineAngles: function (altAxis) {\n var majorGridLines = this.options.majorGridLines;\n return this.gridLineAngles(altAxis, 1, majorGridLines.skip, majorGridLines.step);\n },\n minorGridLineAngles: function (altAxis, skipMajor) {\n var ref = this.options;\n var minorGridLines = ref.minorGridLines;\n var majorGridLines = ref.majorGridLines;\n var majorGridLineAngles = skipMajor ? this.intervals(1, majorGridLines.skip, majorGridLines.step) : null;\n return this.gridLineAngles(altAxis, 0.5, minorGridLines.skip, minorGridLines.step, majorGridLineAngles);\n },\n radiusCallback: function (radius, altAxis, skipMajor) {\n if (altAxis.options.type !== ARC) {\n var minorAngle = rad(360 / (this.options.categories.length * 2));\n var minorRadius = Math.cos(minorAngle) * radius;\n var majorAngles = this.majorAngles();\n var radiusCallback = function (angle) {\n if (!skipMajor && inArray(angle, majorAngles)) {\n return radius;\n }\n return minorRadius;\n };\n return radiusCallback;\n }\n },\n createPlotBands: function () {\n var this$1 = this;\n var plotBands = this.options.plotBands || [];\n var group = this._plotbandGroup = new Group({ zIndex: -1 });\n for (var i = 0; i < plotBands.length; i++) {\n var band = plotBands[i];\n var slot = this$1.plotBandSlot(band);\n var singleSlot = this$1.getSlot(band.from);\n var head = band.from - Math.floor(band.from);\n slot.startAngle += head * singleSlot.angle;\n var tail = Math.ceil(band.to) - band.to;\n slot.angle -= (tail + head) * singleSlot.angle;\n var ring = ShapeBuilder.current.createRing(slot, {\n fill: {\n color: band.color,\n opacity: band.opacity\n },\n stroke: { opacity: band.opacity }\n });\n group.append(ring);\n }\n this.appendVisual(group);\n },\n plotBandSlot: function (band) {\n return this.getSlot(band.from, band.to - 1);\n },\n getSlot: function (from, to) {\n var options = this.options;\n var justified = options.justified;\n var box = this.box;\n var divs = this.majorAngles();\n var totalDivs = divs.length;\n var slotAngle = 360 / totalDivs;\n var fromValue = from;\n if (options.reverse && !justified) {\n fromValue = (fromValue + 1) % totalDivs;\n }\n fromValue = limitValue(Math.floor(fromValue), 0, totalDivs - 1);\n var slotStart = divs[fromValue];\n if (justified) {\n slotStart = slotStart - slotAngle / 2;\n if (slotStart < 0) {\n slotStart += 360;\n }\n }\n var toValue = limitValue(Math.ceil(to || fromValue), fromValue, totalDivs - 1);\n var slots = toValue - fromValue + 1;\n var angle = slotAngle * slots;\n return new Ring(box.center(), 0, box.height() / 2, slotStart, angle);\n },\n slot: function (from, to) {\n var slot = this.getSlot(from, to);\n var startAngle = slot.startAngle + 180;\n var endAngle = startAngle + slot.angle;\n return new geometry.Arc([\n slot.center.x,\n slot.center.y\n ], {\n startAngle: startAngle,\n endAngle: endAngle,\n radiusX: slot.radius,\n radiusY: slot.radius\n });\n },\n pointCategoryIndex: function (point) {\n var this$1 = this;\n var length = this.options.categories.length;\n var index = null;\n for (var i = 0; i < length; i++) {\n var slot = this$1.getSlot(i);\n if (slot.containsPoint(point)) {\n index = i;\n break;\n }\n }\n return index;\n }\n });\n setDefaultOptions(RadarCategoryAxis, {\n startAngle: 90,\n labels: { margin: getSpacing(10) },\n majorGridLines: { visible: true },\n justified: true\n });\n deepExtend(RadarCategoryAxis.prototype, GridLinesMixin);\n var PolarAxis = Axis.extend({\n init: function (options, chartService) {\n Axis.fn.init.call(this, options, chartService);\n var instanceOptions = this.options;\n instanceOptions.minorUnit = instanceOptions.minorUnit || instanceOptions.majorUnit / 2;\n },\n getDivisions: function (stepValue) {\n return NumericAxis.prototype.getDivisions.call(this, stepValue) - 1;\n },\n reflow: function (box) {\n this.box = box;\n this.reflowLabels();\n },\n reflowLabels: function () {\n var this$1 = this;\n var ref = this;\n var options = ref.options;\n var labels = ref.labels;\n var labelOptions = ref.options.labels;\n var skip = labelOptions.skip || 0;\n var step = labelOptions.step || 1;\n var measureBox = new Box();\n var divs = this.intervals(options.majorUnit, skip, step);\n for (var i = 0; i < labels.length; i++) {\n labels[i].reflow(measureBox);\n var labelBox = labels[i].box;\n labels[i].reflow(this$1.getSlot(divs[i]).adjacentBox(0, labelBox.width(), labelBox.height()));\n }\n },\n lineBox: function () {\n return this.box;\n },\n intervals: function (size, skipOption, stepOption, skipAngles) {\n if (skipAngles === void 0) {\n skipAngles = false;\n }\n var min = this.options.min;\n var divisions = this.getDivisions(size);\n var divs = [];\n var skip = skipOption || 0;\n var step = stepOption || 1;\n for (var i = skip; i < divisions; i += step) {\n var current = (360 + min + i * size) % 360;\n if (!(skipAngles && inArray(current, skipAngles))) {\n divs.push(current);\n }\n }\n return divs;\n },\n majorIntervals: function () {\n return this.intervals(this.options.majorUnit);\n },\n minorIntervals: function () {\n return this.intervals(this.options.minorUnit);\n },\n intervalAngle: function (i) {\n return (540 - i - this.options.startAngle) % 360;\n },\n createLine: function () {\n return [];\n },\n majorGridLineAngles: function (altAxis) {\n var majorGridLines = this.options.majorGridLines;\n return this.gridLineAngles(altAxis, this.options.majorUnit, majorGridLines.skip, majorGridLines.step);\n },\n minorGridLineAngles: function (altAxis, skipMajor) {\n var options = this.options;\n var minorGridLines = options.minorGridLines;\n var majorGridLines = options.majorGridLines;\n var majorGridLineAngles = skipMajor ? this.intervals(options.majorUnit, majorGridLines.skip, majorGridLines.step) : null;\n return this.gridLineAngles(altAxis, options.minorUnit, minorGridLines.skip, minorGridLines.step, majorGridLineAngles);\n },\n plotBandSlot: function (band) {\n return this.getSlot(band.from, band.to);\n },\n getSlot: function (a, b) {\n var ref = this;\n var options = ref.options;\n var box = ref.box;\n var startAngle = options.startAngle;\n var start = limitValue(a, options.min, options.max);\n var end = limitValue(b || start, start, options.max);\n if (options.reverse) {\n start *= -1;\n end *= -1;\n }\n start = (540 - start - startAngle) % 360;\n end = (540 - end - startAngle) % 360;\n if (end < start) {\n var tmp = start;\n start = end;\n end = tmp;\n }\n return new Ring(box.center(), 0, box.height() / 2, start, end - start);\n },\n slot: function (from, to) {\n if (to === void 0) {\n to = from;\n }\n var options = this.options;\n var start = 360 - options.startAngle;\n var slot = this.getSlot(from, to);\n var min = Math.min(from, to);\n var max = Math.max(from, to);\n var startAngle, endAngle;\n if (options.reverse) {\n startAngle = min;\n endAngle = max;\n } else {\n startAngle = 360 - max;\n endAngle = 360 - min;\n }\n startAngle = (startAngle + start) % 360;\n endAngle = (endAngle + start) % 360;\n return new geometry.Arc([\n slot.center.x,\n slot.center.y\n ], {\n startAngle: startAngle,\n endAngle: endAngle,\n radiusX: slot.radius,\n radiusY: slot.radius\n });\n },\n getValue: function (point) {\n var options = this.options;\n var center = this.box.center();\n var dx = point.x - center.x;\n var dy = point.y - center.y;\n var theta = Math.round(deg(Math.atan2(dy, dx)));\n var start = options.startAngle;\n if (!options.reverse) {\n theta *= -1;\n start *= -1;\n }\n return (theta + start + 360) % 360;\n },\n valueRange: function () {\n return {\n min: 0,\n max: Math.PI * 2\n };\n }\n });\n setDefaultOptions(PolarAxis, {\n type: 'polar',\n startAngle: 0,\n reverse: false,\n majorUnit: 60,\n min: 0,\n max: 360,\n labels: { margin: getSpacing(10) },\n majorGridLines: {\n color: BLACK,\n visible: true,\n width: 1\n },\n minorGridLines: { color: '#aaa' }\n });\n deepExtend(PolarAxis.prototype, GridLinesMixin, {\n createPlotBands: RadarCategoryAxis.prototype.createPlotBands,\n majorAngles: RadarCategoryAxis.prototype.majorAngles,\n range: NumericAxis.prototype.range,\n labelsCount: NumericAxis.prototype.labelsCount,\n createAxisLabel: NumericAxis.prototype.createAxisLabel\n });\n var RadarNumericAxisMixin = {\n options: { majorGridLines: { visible: true } },\n createPlotBands: function () {\n var this$1 = this;\n var ref = this.options;\n var type = ref.majorGridLines.type;\n var plotBands = ref.plotBands;\n if (plotBands === void 0) {\n plotBands = [];\n }\n var altAxis = this.plotArea.polarAxis;\n var majorAngles = altAxis.majorAngles();\n var center = altAxis.box.center();\n var group = this._plotbandGroup = new Group({ zIndex: -1 });\n for (var i = 0; i < plotBands.length; i++) {\n var band = plotBands[i];\n var bandStyle = {\n fill: {\n color: band.color,\n opacity: band.opacity\n },\n stroke: { opacity: band.opacity }\n };\n var slot = this$1.getSlot(band.from, band.to, true);\n var ring = new Ring(center, center.y - slot.y2, center.y - slot.y1, 0, 360);\n var shape = void 0;\n if (type === ARC) {\n shape = ShapeBuilder.current.createRing(ring, bandStyle);\n } else {\n shape = Path.fromPoints(this$1.plotBandPoints(ring, majorAngles), bandStyle).close();\n }\n group.append(shape);\n }\n this.appendVisual(group);\n },\n plotBandPoints: function (ring, angles) {\n var innerPoints = [];\n var outerPoints = [];\n var center = [\n ring.center.x,\n ring.center.y\n ];\n var innerCircle = new Circle(center, ring.innerRadius);\n var outerCircle = new Circle(center, ring.radius);\n for (var i = 0; i < angles.length; i++) {\n innerPoints.push(innerCircle.pointAt(angles[i] + 180));\n outerPoints.push(outerCircle.pointAt(angles[i] + 180));\n }\n innerPoints.reverse();\n innerPoints.push(innerPoints[0]);\n outerPoints.push(outerPoints[0]);\n return outerPoints.concat(innerPoints);\n },\n createGridLines: function (altAxis) {\n var options = this.options;\n var majorTicks = this.radarMajorGridLinePositions();\n var majorAngles = altAxis.majorAngles();\n var center = altAxis.box.center();\n var gridLines = [];\n if (options.majorGridLines.visible) {\n gridLines = this.renderGridLines(center, majorTicks, majorAngles, options.majorGridLines);\n }\n if (options.minorGridLines.visible) {\n var minorTicks = this.radarMinorGridLinePositions();\n append(gridLines, this.renderGridLines(center, minorTicks, majorAngles, options.minorGridLines));\n }\n return gridLines;\n },\n renderGridLines: function (center, ticks, angles, options) {\n var style = {\n stroke: {\n width: options.width,\n color: options.color,\n dashType: options.dashType\n }\n };\n var skip = options.skip;\n if (skip === void 0) {\n skip = 0;\n }\n var step = options.step;\n if (step === void 0) {\n step = 0;\n }\n var container = this.gridLinesVisual();\n for (var tickIx = skip; tickIx < ticks.length; tickIx += step) {\n var tickRadius = center.y - ticks[tickIx];\n if (tickRadius > 0) {\n var circle = new Circle([\n center.x,\n center.y\n ], tickRadius);\n if (options.type === ARC) {\n container.append(new drawing.Circle(circle, style));\n } else {\n var line = new Path(style);\n for (var angleIx = 0; angleIx < angles.length; angleIx++) {\n line.lineTo(circle.pointAt(angles[angleIx] + 180));\n }\n line.close();\n container.append(line);\n }\n }\n }\n return container.children;\n },\n getValue: function (point) {\n var lineBox = this.lineBox();\n var altAxis = this.plotArea.polarAxis;\n var majorAngles = altAxis.majorAngles();\n var center = altAxis.box.center();\n var radius = point.distanceTo(center);\n var distance = radius;\n if (this.options.majorGridLines.type !== ARC && majorAngles.length > 1) {\n var dx = point.x - center.x;\n var dy = point.y - center.y;\n var theta = (deg(Math.atan2(dy, dx)) + 540) % 360;\n majorAngles.sort(function (a, b) {\n return angularDistance(a, theta) - angularDistance(b, theta);\n });\n var midAngle = angularDistance(majorAngles[0], majorAngles[1]) / 2;\n var alpha = angularDistance(theta, majorAngles[0]);\n var gamma = 90 - midAngle;\n var beta = 180 - alpha - gamma;\n distance = radius * (Math.sin(rad(beta)) / Math.sin(rad(gamma)));\n }\n return this.axisType().prototype.getValue.call(this, new Point(lineBox.x1, lineBox.y2 - distance));\n }\n };\n function angularDistance(a, b) {\n return 180 - Math.abs(Math.abs(a - b) - 180);\n }\n var RadarNumericAxis = NumericAxis.extend({\n radarMajorGridLinePositions: function () {\n return this.getTickPositions(this.options.majorUnit);\n },\n radarMinorGridLinePositions: function () {\n var options = this.options;\n var minorSkipStep = 0;\n if (options.majorGridLines.visible) {\n minorSkipStep = options.majorUnit;\n }\n return this.getTickPositions(options.minorUnit, minorSkipStep);\n },\n axisType: function () {\n return NumericAxis;\n }\n });\n deepExtend(RadarNumericAxis.prototype, RadarNumericAxisMixin);\n var RadarLogarithmicAxis = LogarithmicAxis.extend({\n radarMajorGridLinePositions: function () {\n var positions = [];\n this.traverseMajorTicksPositions(function (position) {\n positions.push(position);\n }, this.options.majorGridLines);\n return positions;\n },\n radarMinorGridLinePositions: function () {\n var positions = [];\n this.traverseMinorTicksPositions(function (position) {\n positions.push(position);\n }, this.options.minorGridLines);\n return positions;\n },\n axisType: function () {\n return LogarithmicAxis;\n }\n });\n deepExtend(RadarLogarithmicAxis.prototype, RadarNumericAxisMixin);\n var WEIGHT = 0.333;\n var EXTREMUM_ALLOWED_DEVIATION = 0.01;\n var CurveProcessor = Class.extend({\n init: function (closed) {\n this.closed = closed;\n },\n process: function (dataPoints) {\n var this$1 = this;\n var points = dataPoints.slice(0);\n var segments = [];\n var closed = this.closed;\n var length = points.length;\n if (length > 2) {\n this.removeDuplicates(0, points);\n length = points.length;\n }\n if (length < 2 || length === 2 && points[0].equals(points[1])) {\n return segments;\n }\n var p0 = points[0];\n var p1 = points[1];\n var p2 = points[2];\n segments.push(new Segment(p0));\n while (p0.equals(points[length - 1])) {\n closed = true;\n points.pop();\n length--;\n }\n if (length === 2) {\n var tangent = this.tangent(p0, p1, X, Y);\n last(segments).controlOut(this.firstControlPoint(tangent, p0, p1, X, Y));\n segments.push(new Segment(p1, this.secondControlPoint(tangent, p0, p1, X, Y)));\n return segments;\n }\n var initialControlPoint, lastControlPoint;\n if (closed) {\n p0 = points[length - 1];\n p1 = points[0];\n p2 = points[1];\n var controlPoints = this.controlPoints(p0, p1, p2);\n initialControlPoint = controlPoints[1];\n lastControlPoint = controlPoints[0];\n } else {\n var tangent$1 = this.tangent(p0, p1, X, Y);\n initialControlPoint = this.firstControlPoint(tangent$1, p0, p1, X, Y);\n }\n var cp0 = initialControlPoint;\n for (var idx = 0; idx <= length - 3; idx++) {\n this$1.removeDuplicates(idx, points);\n length = points.length;\n if (idx + 3 <= length) {\n p0 = points[idx];\n p1 = points[idx + 1];\n p2 = points[idx + 2];\n var controlPoints$1 = this$1.controlPoints(p0, p1, p2);\n last(segments).controlOut(cp0);\n cp0 = controlPoints$1[1];\n var cp1 = controlPoints$1[0];\n segments.push(new Segment(p1, cp1));\n }\n }\n if (closed) {\n p0 = points[length - 2];\n p1 = points[length - 1];\n p2 = points[0];\n var controlPoints$2 = this.controlPoints(p0, p1, p2);\n last(segments).controlOut(cp0);\n segments.push(new Segment(p1, controlPoints$2[0]));\n last(segments).controlOut(controlPoints$2[1]);\n segments.push(new Segment(p2, lastControlPoint));\n } else {\n var tangent$2 = this.tangent(p1, p2, X, Y);\n last(segments).controlOut(cp0);\n segments.push(new Segment(p2, this.secondControlPoint(tangent$2, p1, p2, X, Y)));\n }\n return segments;\n },\n removeDuplicates: function (idx, points) {\n while (points[idx + 1] && (points[idx].equals(points[idx + 1]) || points[idx + 1].equals(points[idx + 2]))) {\n points.splice(idx + 1, 1);\n }\n },\n invertAxis: function (p0, p1, p2) {\n var invertAxis = false;\n if (p0.x === p1.x) {\n invertAxis = true;\n } else if (p1.x === p2.x) {\n if (p1.y < p2.y && p0.y <= p1.y || p2.y < p1.y && p1.y <= p0.y) {\n invertAxis = true;\n }\n } else {\n var fn = this.lineFunction(p0, p1);\n var y2 = this.calculateFunction(fn, p2.x);\n if (!(p0.y <= p1.y && p2.y <= y2) && !(p1.y <= p0.y && p2.y >= y2)) {\n invertAxis = true;\n }\n }\n return invertAxis;\n },\n isLine: function (p0, p1, p2) {\n var fn = this.lineFunction(p0, p1);\n var y2 = this.calculateFunction(fn, p2.x);\n return p0.x === p1.x && p1.x === p2.x || round(y2, 1) === round(p2.y, 1);\n },\n lineFunction: function (p1, p2) {\n var a = (p2.y - p1.y) / (p2.x - p1.x);\n var b = p1.y - a * p1.x;\n return [\n b,\n a\n ];\n },\n controlPoints: function (p0, p1, p2) {\n var xField = X;\n var yField = Y;\n var restrict = false;\n var switchOrientation = false;\n var tangent;\n if (this.isLine(p0, p1, p2)) {\n tangent = this.tangent(p0, p1, X, Y);\n } else {\n var monotonic = {\n x: this.isMonotonicByField(p0, p1, p2, X),\n y: this.isMonotonicByField(p0, p1, p2, Y)\n };\n if (monotonic.x && monotonic.y) {\n tangent = this.tangent(p0, p2, X, Y);\n restrict = true;\n } else {\n if (this.invertAxis(p0, p1, p2)) {\n xField = Y;\n yField = X;\n }\n if (monotonic[xField]) {\n tangent = 0;\n } else {\n var sign;\n if (p2[yField] < p0[yField] && p0[yField] <= p1[yField] || p0[yField] < p2[yField] && p1[yField] <= p0[yField]) {\n sign = numberSign((p2[yField] - p0[yField]) * (p1[xField] - p0[xField]));\n } else {\n sign = -numberSign((p2[xField] - p0[xField]) * (p1[yField] - p0[yField]));\n }\n tangent = EXTREMUM_ALLOWED_DEVIATION * sign;\n switchOrientation = true;\n }\n }\n }\n var secondControlPoint = this.secondControlPoint(tangent, p0, p1, xField, yField);\n if (switchOrientation) {\n var oldXField = xField;\n xField = yField;\n yField = oldXField;\n }\n var firstControlPoint = this.firstControlPoint(tangent, p1, p2, xField, yField);\n if (restrict) {\n this.restrictControlPoint(p0, p1, secondControlPoint, tangent);\n this.restrictControlPoint(p1, p2, firstControlPoint, tangent);\n }\n return [\n secondControlPoint,\n firstControlPoint\n ];\n },\n restrictControlPoint: function (p1, p2, cp, tangent) {\n if (p1.y < p2.y) {\n if (p2.y < cp.y) {\n cp.x = p1.x + (p2.y - p1.y) / tangent;\n cp.y = p2.y;\n } else if (cp.y < p1.y) {\n cp.x = p2.x - (p2.y - p1.y) / tangent;\n cp.y = p1.y;\n }\n } else {\n if (cp.y < p2.y) {\n cp.x = p1.x - (p1.y - p2.y) / tangent;\n cp.y = p2.y;\n } else if (p1.y < cp.y) {\n cp.x = p2.x + (p1.y - p2.y) / tangent;\n cp.y = p1.y;\n }\n }\n },\n tangent: function (p0, p1, xField, yField) {\n var x = p1[xField] - p0[xField];\n var y = p1[yField] - p0[yField];\n var tangent;\n if (x === 0) {\n tangent = 0;\n } else {\n tangent = y / x;\n }\n return tangent;\n },\n isMonotonicByField: function (p0, p1, p2, field) {\n return p2[field] > p1[field] && p1[field] > p0[field] || p2[field] < p1[field] && p1[field] < p0[field];\n },\n firstControlPoint: function (tangent, p0, p3, xField, yField) {\n var t1 = p0[xField];\n var t2 = p3[xField];\n var distance = (t2 - t1) * WEIGHT;\n return this.point(t1 + distance, p0[yField] + distance * tangent, xField, yField);\n },\n secondControlPoint: function (tangent, p0, p3, xField, yField) {\n var t1 = p0[xField];\n var t2 = p3[xField];\n var distance = (t2 - t1) * WEIGHT;\n return this.point(t2 - distance, p3[yField] - distance * tangent, xField, yField);\n },\n point: function (xValue, yValue, xField, yField) {\n var controlPoint = new geometry.Point();\n controlPoint[xField] = xValue;\n controlPoint[yField] = yValue;\n return controlPoint;\n },\n calculateFunction: function (fn, x) {\n var length = fn.length;\n var result = 0;\n for (var i = 0; i < length; i++) {\n result += Math.pow(x, i) * fn[i];\n }\n return result;\n }\n });\n function numberSign(value) {\n return value <= 0 ? -1 : 1;\n }\n dataviz.Gradients = GRADIENTS;\n kendo.deepExtend(kendo.dataviz, {\n constants: constants,\n services: services,\n autoMajorUnit: autoMajorUnit,\n Point: Point,\n Box: Box,\n Ring: Ring,\n Sector: Sector,\n ShapeBuilder: ShapeBuilder,\n ShapeElement: ShapeElement,\n ChartElement: ChartElement,\n BoxElement: BoxElement,\n RootElement: RootElement,\n FloatElement: FloatElement,\n Text: Text,\n TextBox: TextBox,\n Title: Title,\n AxisLabel: AxisLabel,\n Axis: Axis,\n Note: Note,\n CategoryAxis: CategoryAxis,\n DateCategoryAxis: DateCategoryAxis,\n DateValueAxis: DateValueAxis,\n NumericAxis: NumericAxis,\n LogarithmicAxis: LogarithmicAxis,\n PolarAxis: PolarAxis,\n RadarCategoryAxis: RadarCategoryAxis,\n RadarNumericAxis: RadarNumericAxis,\n RadarLogarithmicAxis: RadarLogarithmicAxis,\n CurveProcessor: CurveProcessor,\n rectToBox: rectToBox,\n addClass: addClass,\n removeClass: removeClass,\n alignPathToPixel: alignPathToPixel,\n clockwise: clockwise,\n deepExtend: deepExtend,\n elementStyles: elementStyles,\n getSpacing: getSpacing,\n getTemplate: getTemplate,\n getter: __common_getter_js,\n grep: grep,\n hasClasses: hasClasses,\n inArray: inArray,\n interpolateValue: interpolateValue,\n InstanceObserver: InstanceObserver,\n isArray: isArray,\n isFunction: isFunction,\n isNumber: isNumber,\n isObject: isObject,\n isString: isString,\n map: map,\n mousewheelDelta: mousewheelDelta,\n FontLoader: FontLoader,\n setDefaultOptions: setDefaultOptions,\n sparseArrayLimits: sparseArrayLimits,\n styleValue: styleValue,\n append: append,\n bindEvents: bindEvents,\n Class: Class,\n defined: defined,\n deg: deg,\n elementOffset: elementOffset,\n elementSize: elementSize,\n eventElement: eventElement,\n eventCoordinates: eventCoordinates,\n last: last,\n limitValue: limitValue,\n logToConsole: kendo.logToConsole,\n objectKey: objectKey,\n rad: rad,\n round: round,\n unbindEvents: unbindEvents,\n valueOrDefault: valueOrDefault,\n absoluteDateDiff: absoluteDateDiff,\n addDuration: addDuration,\n addTicks: addTicks,\n ceilDate: ceilDate,\n dateComparer: dateComparer,\n dateDiff: dateDiff,\n dateEquals: dateEquals,\n dateIndex: dateIndex,\n duration: duration,\n floorDate: floorDate,\n lteDateIndex: lteDateIndex,\n startOfWeek: startOfWeek,\n toDate: toDate,\n parseDate: parseDate,\n parseDates: parseDates,\n toTime: toTime\n });\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('dataviz/core/core', ['dataviz/core/kendo-core'], f);\n}(function () {\n (function ($) {\n var dataviz = kendo.dataviz;\n var services = dataviz.services;\n var draw = kendo.drawing;\n dataviz.ExportMixin = {\n extend: function (proto, skipLegacy) {\n if (!proto.exportVisual) {\n throw new Error('Mixin target has no exportVisual method defined.');\n }\n proto.exportSVG = this.exportSVG;\n proto.exportImage = this.exportImage;\n proto.exportPDF = this.exportPDF;\n if (!skipLegacy) {\n proto.svg = this.svg;\n proto.imageDataURL = this.imageDataURL;\n }\n },\n exportSVG: function (options) {\n return draw.exportSVG(this.exportVisual(), options);\n },\n exportImage: function (options) {\n return draw.exportImage(this.exportVisual(options), options);\n },\n exportPDF: function (options) {\n return draw.exportPDF(this.exportVisual(), options);\n },\n svg: function () {\n if (draw.svg.Surface) {\n return draw.svg.exportGroup(this.exportVisual());\n } else {\n throw new Error('SVG Export failed. Unable to export instantiate kendo.drawing.svg.Surface');\n }\n },\n imageDataURL: function () {\n if (!kendo.support.canvas) {\n return null;\n }\n if (draw.canvas.Surface) {\n var container = $('
    ').css({\n display: 'none',\n width: this.element.width(),\n height: this.element.height()\n }).appendTo(document.body);\n var surface = new draw.canvas.Surface(container[0]);\n surface.draw(this.exportVisual());\n var image = surface._rootElement.toDataURL();\n surface.destroy();\n container.remove();\n return image;\n } else {\n throw new Error('Image Export failed. Unable to export instantiate kendo.drawing.canvas.Surface');\n }\n }\n };\n services.IntlService.register({\n format: function (format) {\n return kendo.format.apply(null, [format].concat(Array.prototype.slice.call(arguments, 1)));\n },\n toString: kendo.toString,\n parseDate: kendo.parseDate\n });\n services.TemplateService.register({ compile: kendo.template });\n dataviz.Point2D = dataviz.Point;\n dataviz.Box2D = dataviz.Box;\n dataviz.mwDelta = function (e) {\n return dataviz.mousewheelDelta(e.originalEvent);\n };\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.dataviz.core', [\n 'dataviz/core/kendo-core',\n 'dataviz/core/core'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'dataviz.core',\n name: 'Core',\n description: 'The DataViz core functions',\n category: 'dataviz',\n depends: [\n 'core',\n 'drawing'\n ],\n hidden: true\n };\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('dataviz/themes/chart-base-theme', ['kendo.dataviz.core'], f);\n}(function () {\n (function () {\n window.kendo.dataviz = window.kendo.dataviz || {};\n var BAR_GAP = 1.5;\n var BAR_SPACING = 0.4;\n var BLACK = '#000';\n var SANS = 'Arial, Helvetica, sans-serif';\n var SANS11 = '11px ' + SANS;\n var SANS12 = '12px ' + SANS;\n var SANS16 = '16px ' + SANS;\n var TRANSPARENT = 'transparent';\n var WHITE = '#fff';\n var notes = function () {\n return {\n icon: { border: { width: 1 } },\n label: {\n font: SANS12,\n padding: 3\n },\n line: {\n length: 10,\n width: 2\n },\n visible: true\n };\n };\n var axisDefaults = function () {\n return {\n labels: { font: SANS12 },\n notes: notes(),\n title: {\n font: SANS16,\n margin: 5\n }\n };\n };\n var areaSeries = function () {\n return {\n highlight: { markers: { border: {} } },\n line: {\n opacity: 1,\n width: 0\n },\n markers: {\n size: 6,\n visible: false\n },\n opacity: 0.4\n };\n };\n var barSeries = function () {\n return {\n gap: BAR_GAP,\n spacing: BAR_SPACING\n };\n };\n var boxPlotSeries = function () {\n return {\n outliersField: '',\n meanField: '',\n border: {\n _brightness: 0.8,\n width: 1\n },\n downColor: WHITE,\n gap: 1,\n highlight: {\n border: {\n opacity: 1,\n width: 2\n },\n whiskers: { width: 3 },\n mean: { width: 2 },\n median: { width: 2 }\n },\n mean: { width: 2 },\n median: { width: 2 },\n spacing: 0.3,\n whiskers: { width: 2 }\n };\n };\n var bubbleSeries = function () {\n return {\n border: { width: 0 },\n labels: { background: TRANSPARENT },\n opacity: 0.6\n };\n };\n var bulletSeries = function () {\n return {\n gap: BAR_GAP,\n spacing: BAR_SPACING,\n target: { color: '#ff0000' }\n };\n };\n var candlestickSeries = function () {\n return {\n border: {\n _brightness: 0.8,\n width: 1\n },\n downColor: WHITE,\n gap: 1,\n highlight: {\n border: {\n opacity: 1,\n width: 2\n },\n line: { width: 2 }\n },\n line: {\n color: BLACK,\n width: 1\n },\n spacing: 0.3\n };\n };\n var columnSeries = function () {\n return {\n gap: BAR_GAP,\n spacing: BAR_SPACING\n };\n };\n var donutSeries = function () {\n return { margin: 1 };\n };\n var lineSeries = function () {\n return { width: 2 };\n };\n var ohlcSeries = function () {\n return {\n gap: 1,\n highlight: {\n line: {\n opacity: 1,\n width: 3\n }\n },\n line: { width: 1 },\n spacing: 0.3\n };\n };\n var radarAreaSeries = function () {\n return {\n line: {\n opacity: 1,\n width: 0\n },\n markers: {\n size: 6,\n visible: false\n },\n opacity: 0.5\n };\n };\n var radarLineSeries = function () {\n return {\n markers: { visible: false },\n width: 2\n };\n };\n var rangeBarSeries = function () {\n return {\n gap: BAR_GAP,\n spacing: BAR_SPACING\n };\n };\n var rangeColumnSeries = function () {\n return {\n gap: BAR_GAP,\n spacing: BAR_SPACING\n };\n };\n var scatterLineSeries = function () {\n return { width: 1 };\n };\n var waterfallSeries = function () {\n return {\n gap: 0.5,\n line: {\n color: BLACK,\n width: 1\n },\n spacing: BAR_SPACING\n };\n };\n var pieSeries = function () {\n return {\n labels: {\n background: '',\n color: '',\n padding: {\n top: 5,\n bottom: 5,\n left: 7,\n right: 7\n }\n }\n };\n };\n var funnelSeries = function () {\n return {\n labels: {\n background: '',\n color: '',\n padding: {\n top: 5,\n bottom: 5,\n left: 7,\n right: 7\n }\n }\n };\n };\n var seriesDefaults = function (options) {\n return {\n visible: true,\n labels: { font: SANS11 },\n overlay: options.gradients ? {} : { gradient: 'none' },\n area: areaSeries(),\n bar: barSeries(),\n boxPlot: boxPlotSeries(),\n bubble: bubbleSeries(),\n bullet: bulletSeries(),\n candlestick: candlestickSeries(),\n column: columnSeries(),\n pie: pieSeries(),\n donut: donutSeries(),\n funnel: funnelSeries(),\n horizontalWaterfall: waterfallSeries(),\n line: lineSeries(),\n notes: notes(),\n ohlc: ohlcSeries(),\n radarArea: radarAreaSeries(),\n radarLine: radarLineSeries(),\n polarArea: radarAreaSeries(),\n polarLine: radarLineSeries(),\n rangeBar: rangeBarSeries(),\n rangeColumn: rangeColumnSeries(),\n scatterLine: scatterLineSeries(),\n verticalArea: areaSeries(),\n verticalBoxPlot: boxPlotSeries(),\n verticalBullet: bulletSeries(),\n verticalLine: lineSeries(),\n waterfall: waterfallSeries()\n };\n };\n var title = function () {\n return { font: SANS16 };\n };\n var legend = function () {\n return { labels: { font: SANS12 } };\n };\n var baseTheme = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n axisDefaults: axisDefaults(),\n categoryAxis: { majorGridLines: { visible: true } },\n navigator: {\n pane: {\n height: 90,\n margin: { top: 10 }\n }\n },\n seriesDefaults: seriesDefaults(options),\n title: title(),\n legend: legend()\n };\n };\n kendo.deepExtend(kendo.dataviz, { chartBaseTheme: baseTheme });\n }());\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('dataviz/themes/auto-theme', ['kendo.dataviz.core'], f);\n}(function () {\n var cache;\n function autoTheme(force) {\n if (!force && cache) {\n return cache;\n }\n var theme = { chart: kendo.dataviz.chartBaseTheme() };\n var hook = $('
    ' + '
    ' + '
    ' + '
    ' + '
    ' + '
    ' + '
    ' + '
    ' + '
    ' + '
    ' + '
    ' + '
    ' + '
    ' + '
    ' + '
    ' + '
    ' + '
    ' + '
    ' + '
    ' + '
    ' + '
    ' + '
    ' + '
    ' + '
    ' + '
    ' + '
    ' + '
    ' + '
    ' + '
    ' + '
    ' + '
    ' + '
    ' + '
    ' + '
    ').appendTo(document.body);\n function mapColor(key, varName) {\n set(key, queryStyle(varName, 'backgroundColor'));\n }\n function queryStyle(varName, prop) {\n return hook.find('.k-var--' + varName).css(prop);\n }\n function set(path, value) {\n var store = theme;\n var parts = path.split('.');\n var key = parts.shift();\n while (parts.length > 0) {\n store = store[key] = store[key] || {};\n key = parts.shift();\n }\n store[key] = value;\n }\n (function setColors() {\n mapColor('chart.axisDefaults.crosshair.color', 'chart-crosshair-background');\n mapColor('chart.axisDefaults.labels.color', 'normal-text-color');\n mapColor('chart.axisDefaults.line.color', 'chart-major-lines');\n mapColor('chart.axisDefaults.majorGridLines.color', 'chart-major-lines');\n mapColor('chart.axisDefaults.minorGridLines.color', 'chart-minor-lines');\n mapColor('chart.axisDefaults.notes.icon.background', 'chart-notes-background');\n mapColor('chart.axisDefaults.notes.icon.border.color', 'chart-notes-border');\n mapColor('chart.axisDefaults.notes.line.color', 'chart-notes-lines');\n mapColor('chart.axisDefaults.title.color', 'normal-text-color');\n mapColor('chart.chartArea.background', 'background');\n mapColor('chart.legend.inactiveItems.labels.color', 'chart-inactive');\n mapColor('chart.legend.inactiveItems.markers.color', 'chart-inactive');\n mapColor('chart.legend.labels.color', 'normal-text-color');\n mapColor('chart.seriesDefaults.boxPlot.downColor', 'chart-major-lines');\n mapColor('chart.seriesDefaults.boxPlot.mean.color', 'base');\n mapColor('chart.seriesDefaults.boxPlot.median.color', 'base');\n mapColor('chart.seriesDefaults.boxPlot.whiskers.color', 'accent');\n mapColor('chart.seriesDefaults.bullet.target.color', 'accent');\n mapColor('chart.seriesDefaults.candlestick.downColor', 'normal-text-color');\n mapColor('chart.seriesDefaults.candlestick.line.color', 'normal-text-color');\n mapColor('chart.seriesDefaults.errorBars.color', 'chart-error-bars-background');\n mapColor('chart.seriesDefaults.horizontalWaterfall.line.color', 'chart-major-lines');\n mapColor('chart.seriesDefaults.icon.border.color', 'chart-major-lines');\n mapColor('chart.seriesDefaults.labels.background', 'background');\n mapColor('chart.seriesDefaults.labels.color', 'normal-text-color');\n mapColor('chart.seriesDefaults.notes.icon.background', 'chart-notes-background');\n mapColor('chart.seriesDefaults.notes.icon.border.color', 'chart-notes-border');\n mapColor('chart.seriesDefaults.notes.line.color', 'chart-notes-lines');\n mapColor('chart.seriesDefaults.verticalBoxPlot.downColor', 'chart-major-lines');\n mapColor('chart.seriesDefaults.verticalBoxPlot.mean.color', 'base');\n mapColor('chart.seriesDefaults.verticalBoxPlot.median.color', 'base');\n mapColor('chart.seriesDefaults.verticalBoxPlot.whiskers.color', 'accent');\n mapColor('chart.seriesDefaults.verticalBullet.target.color', 'accent');\n mapColor('chart.seriesDefaults.waterfall.line.color', 'chart-major-lines');\n mapColor('chart.title.color', 'normal-text-color');\n set('chart.seriesDefaults.labels.opacity', queryStyle('chart-area-opacity', 'opacity'));\n mapColor('diagram.shapeDefaults.fill.color', 'accent');\n mapColor('diagram.shapeDefaults.content.color', 'accent-contrast');\n mapColor('diagram.shapeDefaults.connectorDefaults.fill.color', 'normal-text-color');\n mapColor('diagram.shapeDefaults.connectorDefaults.stroke.color', 'accent-contrast');\n mapColor('diagram.shapeDefaults.connectorDefaults.hover.fill.color', 'accent-contrast');\n mapColor('diagram.shapeDefaults.connectorDefaults.hover.stroke.color', 'normal-text-color');\n mapColor('diagram.editable.resize.handles.stroke.color', 'normal-text-color');\n mapColor('diagram.editable.resize.handles.fill.color', 'normal-background');\n mapColor('diagram.editable.resize.handles.hover.stroke.color', 'normal-text-color');\n mapColor('diagram.editable.resize.handles.hover.fill.color', 'normal-text-color');\n mapColor('diagram.selectable.stroke.color', 'normal-text-color');\n mapColor('diagram.connectionDefaults.stroke.color', 'normal-text-color');\n mapColor('diagram.connectionDefaults.content.color', 'normal-text-color');\n mapColor('diagram.connectionDefaults.selection.handles.fill.color', 'accent-contrast');\n mapColor('diagram.connectionDefaults.selection.handles.stroke.color', 'normal-text-color');\n mapColor('diagram.connectionDefaults.selection.stroke.color', 'normal-text-color');\n }());\n (function setFonts() {\n function font(varName) {\n return queryStyle(varName, 'fontSize') + ' ' + queryStyle(varName, 'fontFamily');\n }\n var defaultFont = font('chart-font');\n var titleFont = font('chart-title-font');\n var labelFont = font('chart-label-font');\n set('chart.axisDefaults.labels.font', labelFont);\n set('chart.axisDefaults.notes.label.font', defaultFont);\n set('chart.axisDefaults.title.font', defaultFont);\n set('chart.legend.labels.font', defaultFont);\n set('chart.seriesDefaults.labels.font', labelFont);\n set('chart.seriesDefaults.notes.label.font', defaultFont);\n set('chart.title.font', titleFont);\n }());\n (function setSeriesColors() {\n function letterPos(letter) {\n return letter.toLowerCase().charCodeAt(0) - 'a'.charCodeAt(0);\n }\n function seriesPos(name) {\n return letterPos(name.match(/series-([a-z])$/)[1]);\n }\n var series = $('.k-var--series div').toArray();\n var seriesColors = series.reduce(function (arr, el) {\n var pos = seriesPos(el.className);\n arr[pos] = $(el).css('backgroundColor');\n return arr;\n }, []);\n set('chart.seriesColors', seriesColors);\n }());\n hook.remove();\n cache = theme;\n return theme;\n }\n kendo.dataviz.autoTheme = autoTheme;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('dataviz/themes/themes', ['dataviz/themes/chart-base-theme'], f);\n}(function () {\n (function ($) {\n var kendo = window.kendo, ui = kendo.dataviz.ui, deepExtend = kendo.deepExtend;\n var BLACK = '#000', SANS = 'Arial,Helvetica,sans-serif', SANS12 = '12px ' + SANS, WHITE = '#fff';\n var chartBaseTheme = kendo.dataviz.chartBaseTheme({ gradients: true });\n var gaugeBaseTheme = { scale: { labels: { font: SANS12 } } };\n var diagramBaseTheme = {\n shapeDefaults: {\n hover: { opacity: 0.2 },\n stroke: { width: 0 }\n },\n editable: {\n resize: {\n handles: {\n width: 7,\n height: 7\n }\n }\n },\n selectable: {\n stroke: {\n width: 1,\n dashType: 'dot'\n }\n },\n connectionDefaults: {\n stroke: { width: 2 },\n selection: {\n handles: {\n width: 8,\n height: 8\n }\n },\n editable: {\n tools: [\n 'edit',\n 'delete'\n ]\n }\n }\n };\n var themes = ui.themes, registerTheme = ui.registerTheme = function (themeName, options) {\n var result = {};\n result.chart = deepExtend({}, chartBaseTheme, options.chart);\n result.gauge = deepExtend({}, gaugeBaseTheme, options.gauge);\n result.diagram = deepExtend({}, diagramBaseTheme, options.diagram);\n result.treeMap = deepExtend({}, options.treeMap);\n var defaults = result.chart.seriesDefaults;\n defaults.verticalLine = deepExtend({}, defaults.line);\n defaults.verticalArea = deepExtend({}, defaults.area);\n defaults.verticalBoxPlot = deepExtend({}, defaults.boxPlot);\n defaults.polarArea = deepExtend({}, defaults.radarArea);\n defaults.polarLine = deepExtend({}, defaults.radarLine);\n themes[themeName] = result;\n };\n registerTheme('black', {\n chart: {\n title: { color: WHITE },\n legend: {\n labels: { color: WHITE },\n inactiveItems: {\n labels: { color: '#919191' },\n markers: { color: '#919191' }\n }\n },\n seriesDefaults: {\n labels: { color: WHITE },\n errorBars: { color: WHITE },\n notes: {\n icon: {\n background: '#3b3b3b',\n border: { color: '#8e8e8e' }\n },\n label: { color: WHITE },\n line: { color: '#8e8e8e' }\n },\n pie: { overlay: { gradient: 'sharpBevel' } },\n donut: { overlay: { gradient: 'sharpGlass' } },\n line: { markers: { background: '#3d3d3d' } },\n scatter: { markers: { background: '#3d3d3d' } },\n scatterLine: { markers: { background: '#3d3d3d' } },\n waterfall: { line: { color: '#8e8e8e' } },\n horizontalWaterfall: { line: { color: '#8e8e8e' } },\n candlestick: {\n downColor: '#555',\n line: { color: WHITE },\n border: {\n _brightness: 1.5,\n opacity: 1\n },\n highlight: {\n border: {\n color: WHITE,\n opacity: 0.2\n }\n }\n },\n ohlc: { line: { color: WHITE } }\n },\n chartArea: { background: '#3d3d3d' },\n seriesColors: [\n '#0081da',\n '#3aafff',\n '#99c900',\n '#ffeb3d',\n '#b20753',\n '#ff4195'\n ],\n axisDefaults: {\n line: { color: '#8e8e8e' },\n labels: { color: WHITE },\n majorGridLines: { color: '#545454' },\n minorGridLines: { color: '#454545' },\n title: { color: WHITE },\n crosshair: { color: '#8e8e8e' },\n notes: {\n icon: {\n background: '#3b3b3b',\n border: { color: '#8e8e8e' }\n },\n label: { color: WHITE },\n line: { color: '#8e8e8e' }\n }\n }\n },\n gauge: {\n pointer: { color: '#0070e4' },\n scale: {\n rangePlaceholderColor: '#1d1d1d',\n labels: { color: WHITE },\n minorTicks: { color: WHITE },\n majorTicks: { color: WHITE },\n line: { color: WHITE }\n }\n },\n diagram: {\n shapeDefaults: {\n fill: { color: '#0066cc' },\n connectorDefaults: {\n fill: { color: WHITE },\n stroke: { color: '#384049' },\n hover: {\n fill: { color: '#3d3d3d' },\n stroke: { color: '#efefef' }\n }\n },\n content: { color: WHITE }\n },\n editable: {\n resize: {\n handles: {\n fill: { color: '#3d3d3d' },\n stroke: { color: WHITE },\n hover: {\n fill: { color: WHITE },\n stroke: { color: WHITE }\n }\n }\n },\n rotate: {\n thumb: {\n stroke: { color: WHITE },\n fill: { color: WHITE }\n }\n }\n },\n selectable: { stroke: { color: WHITE } },\n connectionDefaults: {\n stroke: { color: WHITE },\n content: { color: WHITE },\n selection: {\n handles: {\n fill: { color: '#3d3d3d' },\n stroke: { color: '#efefef' }\n }\n }\n }\n },\n treeMap: {\n colors: [\n [\n '#0081da',\n '#314b5c'\n ],\n [\n '#3aafff',\n '#3c5464'\n ],\n [\n '#99c900',\n '#4f5931'\n ],\n [\n '#ffeb3d',\n '#64603d'\n ],\n [\n '#b20753',\n '#543241'\n ],\n [\n '#ff4195',\n '#643e4f'\n ]\n ]\n }\n });\n registerTheme('blueopal', {\n chart: {\n title: { color: '#293135' },\n legend: {\n labels: { color: '#293135' },\n inactiveItems: {\n labels: { color: '#27A5BA' },\n markers: { color: '#27A5BA' }\n }\n },\n seriesDefaults: {\n labels: {\n color: BLACK,\n background: WHITE,\n opacity: 0.5\n },\n errorBars: { color: '#293135' },\n candlestick: {\n downColor: '#c4d0d5',\n line: { color: '#9aabb2' }\n },\n waterfall: { line: { color: '#9aabb2' } },\n horizontalWaterfall: { line: { color: '#9aabb2' } },\n notes: {\n icon: {\n background: 'transparent',\n border: { color: '#9aabb2' }\n },\n label: { color: '#293135' },\n line: { color: '#9aabb2' }\n }\n },\n seriesColors: [\n '#0069a5',\n '#0098ee',\n '#7bd2f6',\n '#ffb800',\n '#ff8517',\n '#e34a00'\n ],\n axisDefaults: {\n line: { color: '#9aabb2' },\n labels: { color: '#293135' },\n majorGridLines: { color: '#c4d0d5' },\n minorGridLines: { color: '#edf1f2' },\n title: { color: '#293135' },\n crosshair: { color: '#9aabb2' },\n notes: {\n icon: {\n background: 'transparent',\n border: { color: '#9aabb2' }\n },\n label: { color: '#293135' },\n line: { color: '#9aabb2' }\n }\n }\n },\n gauge: {\n pointer: { color: '#005c83' },\n scale: {\n rangePlaceholderColor: '#daecf4',\n labels: { color: '#293135' },\n minorTicks: { color: '#293135' },\n majorTicks: { color: '#293135' },\n line: { color: '#293135' }\n }\n },\n diagram: {\n shapeDefaults: {\n fill: { color: '#7ec6e3' },\n connectorDefaults: {\n fill: { color: '#003f59' },\n stroke: { color: WHITE },\n hover: {\n fill: { color: WHITE },\n stroke: { color: '#003f59' }\n }\n },\n content: { color: '#293135' }\n },\n editable: {\n resize: {\n handles: {\n fill: { color: WHITE },\n stroke: { color: '#003f59' },\n hover: {\n fill: { color: '#003f59' },\n stroke: { color: '#003f59' }\n }\n }\n },\n rotate: {\n thumb: {\n stroke: { color: '#003f59' },\n fill: { color: '#003f59' }\n }\n }\n },\n selectable: { stroke: { color: '#003f59' } },\n connectionDefaults: {\n stroke: { color: '#003f59' },\n content: { color: '#293135' },\n selection: {\n handles: {\n fill: { color: '#3d3d3d' },\n stroke: { color: '#efefef' }\n }\n }\n }\n },\n treeMap: {\n colors: [\n [\n '#0069a5',\n '#bad7e7'\n ],\n [\n '#0098ee',\n '#b9e0f5'\n ],\n [\n '#7bd2f6',\n '#ceeaf6'\n ],\n [\n '#ffb800',\n '#e6e3c4'\n ],\n [\n '#ff8517',\n '#e4d8c8'\n ],\n [\n '#e34a00',\n '#ddccc2'\n ]\n ]\n }\n });\n registerTheme('highcontrast', {\n chart: {\n title: { color: '#ffffff' },\n legend: {\n labels: { color: '#ffffff' },\n inactiveItems: {\n labels: { color: '#66465B' },\n markers: { color: '#66465B' }\n }\n },\n seriesDefaults: {\n labels: { color: '#ffffff' },\n errorBars: { color: '#ffffff' },\n notes: {\n icon: {\n background: 'transparent',\n border: { color: '#ffffff' }\n },\n label: { color: '#ffffff' },\n line: { color: '#ffffff' }\n },\n pie: { overlay: { gradient: 'sharpGlass' } },\n donut: { overlay: { gradient: 'sharpGlass' } },\n line: { markers: { background: '#2c232b' } },\n scatter: { markers: { background: '#2c232b' } },\n scatterLine: { markers: { background: '#2c232b' } },\n area: { opacity: 0.5 },\n waterfall: { line: { color: '#ffffff' } },\n horizontalWaterfall: { line: { color: '#ffffff' } },\n candlestick: {\n downColor: '#664e62',\n line: { color: '#ffffff' },\n border: {\n _brightness: 1.5,\n opacity: 1\n },\n highlight: {\n border: {\n color: '#ffffff',\n opacity: 1\n }\n }\n },\n ohlc: { line: { color: '#ffffff' } }\n },\n chartArea: { background: '#2c232b' },\n seriesColors: [\n '#a7008f',\n '#ffb800',\n '#3aafff',\n '#99c900',\n '#b20753',\n '#ff4195'\n ],\n axisDefaults: {\n line: { color: '#ffffff' },\n labels: { color: '#ffffff' },\n majorGridLines: { color: '#664e62' },\n minorGridLines: { color: '#4f394b' },\n title: { color: '#ffffff' },\n crosshair: { color: '#ffffff' },\n notes: {\n icon: {\n background: 'transparent',\n border: { color: '#ffffff' }\n },\n label: { color: '#ffffff' },\n line: { color: '#ffffff' }\n }\n }\n },\n gauge: {\n pointer: { color: '#a7008f' },\n scale: {\n rangePlaceholderColor: '#2c232b',\n labels: { color: '#ffffff' },\n minorTicks: { color: '#2c232b' },\n majorTicks: { color: '#664e62' },\n line: { color: '#ffffff' }\n }\n },\n diagram: {\n shapeDefaults: {\n fill: { color: '#a7018f' },\n connectorDefaults: {\n fill: { color: WHITE },\n stroke: { color: '#2c232b' },\n hover: {\n fill: { color: '#2c232b' },\n stroke: { color: WHITE }\n }\n },\n content: { color: WHITE }\n },\n editable: {\n resize: {\n handles: {\n fill: { color: '#2c232b' },\n stroke: { color: WHITE },\n hover: {\n fill: { color: WHITE },\n stroke: { color: WHITE }\n }\n }\n },\n rotate: {\n thumb: {\n stroke: { color: WHITE },\n fill: { color: WHITE }\n }\n }\n },\n selectable: { stroke: { color: WHITE } },\n connectionDefaults: {\n stroke: { color: WHITE },\n content: { color: WHITE },\n selection: {\n handles: {\n fill: { color: '#2c232b' },\n stroke: { color: WHITE }\n }\n }\n }\n },\n treeMap: {\n colors: [\n [\n '#a7008f',\n '#451c3f'\n ],\n [\n '#ffb800',\n '#564122'\n ],\n [\n '#3aafff',\n '#2f3f55'\n ],\n [\n '#99c900',\n '#424422'\n ],\n [\n '#b20753',\n '#471d33'\n ],\n [\n '#ff4195',\n '#562940'\n ]\n ]\n }\n });\n registerTheme('default', {\n chart: {\n title: { color: '#8e8e8e' },\n legend: {\n labels: { color: '#232323' },\n inactiveItems: {\n labels: { color: '#919191' },\n markers: { color: '#919191' }\n }\n },\n seriesDefaults: {\n labels: {\n color: BLACK,\n background: WHITE,\n opacity: 0.5\n },\n errorBars: { color: '#232323' },\n candlestick: {\n downColor: '#dedede',\n line: { color: '#8d8d8d' }\n },\n waterfall: { line: { color: '#8e8e8e' } },\n horizontalWaterfall: { line: { color: '#8e8e8e' } },\n notes: {\n icon: {\n background: 'transparent',\n border: { color: '#8e8e8e' }\n },\n label: { color: '#232323' },\n line: { color: '#8e8e8e' }\n }\n },\n seriesColors: [\n '#ff6800',\n '#a0a700',\n '#ff8d00',\n '#678900',\n '#ffb53c',\n '#396000'\n ],\n axisDefaults: {\n line: { color: '#8e8e8e' },\n labels: { color: '#232323' },\n minorGridLines: { color: '#f0f0f0' },\n majorGridLines: { color: '#dfdfdf' },\n title: { color: '#232323' },\n crosshair: { color: '#8e8e8e' },\n notes: {\n icon: {\n background: 'transparent',\n border: { color: '#8e8e8e' }\n },\n label: { color: '#232323' },\n line: { color: '#8e8e8e' }\n }\n }\n },\n gauge: {\n pointer: { color: '#ea7001' },\n scale: {\n rangePlaceholderColor: '#dedede',\n labels: { color: '#2e2e2e' },\n minorTicks: { color: '#2e2e2e' },\n majorTicks: { color: '#2e2e2e' },\n line: { color: '#2e2e2e' }\n }\n },\n diagram: {\n shapeDefaults: {\n fill: { color: '#e15613' },\n connectorDefaults: {\n fill: { color: '#282828' },\n stroke: { color: WHITE },\n hover: {\n fill: { color: WHITE },\n stroke: { color: '#282828' }\n }\n },\n content: { color: '#2e2e2e' }\n },\n editable: {\n resize: {\n handles: {\n fill: { color: WHITE },\n stroke: { color: '#282828' },\n hover: {\n fill: { color: '#282828' },\n stroke: { color: '#282828' }\n }\n }\n },\n rotate: {\n thumb: {\n stroke: { color: '#282828' },\n fill: { color: '#282828' }\n }\n }\n },\n selectable: { stroke: { color: '#a7018f' } },\n connectionDefaults: {\n stroke: { color: '#282828' },\n content: { color: '#2e2e2e' },\n selection: {\n handles: {\n fill: { color: WHITE },\n stroke: { color: '#282828' }\n }\n }\n }\n },\n treeMap: {\n colors: [\n [\n '#ff6800',\n '#edcfba'\n ],\n [\n '#a0a700',\n '#dadcba'\n ],\n [\n '#ff8d00',\n '#edd7ba'\n ],\n [\n '#678900',\n '#cfd6ba'\n ],\n [\n '#ffb53c',\n '#eddfc6'\n ],\n [\n '#396000',\n '#c6ceba'\n ]\n ]\n }\n });\n registerTheme('silver', {\n chart: {\n title: { color: '#4e5968' },\n legend: {\n labels: { color: '#4e5968' },\n inactiveItems: {\n labels: { color: '#B1BCC8' },\n markers: { color: '#B1BCC8' }\n }\n },\n seriesDefaults: {\n labels: {\n color: '#293135',\n background: '#eaeaec',\n opacity: 0.5\n },\n errorBars: { color: '#4e5968' },\n notes: {\n icon: {\n background: 'transparent',\n border: { color: '#4e5968' }\n },\n label: { color: '#4e5968' },\n line: { color: '#4e5968' }\n },\n line: { markers: { background: '#eaeaec' } },\n scatter: { markers: { background: '#eaeaec' } },\n scatterLine: { markers: { background: '#eaeaec' } },\n pie: { connectors: { color: '#A6B1C0' } },\n donut: { connectors: { color: '#A6B1C0' } },\n waterfall: { line: { color: '#a6b1c0' } },\n horizontalWaterfall: { line: { color: '#a6b1c0' } },\n candlestick: { downColor: '#a6afbe' }\n },\n chartArea: { background: '#eaeaec' },\n seriesColors: [\n '#007bc3',\n '#76b800',\n '#ffae00',\n '#ef4c00',\n '#a419b7',\n '#430B62'\n ],\n axisDefaults: {\n line: { color: '#a6b1c0' },\n labels: { color: '#4e5968' },\n majorGridLines: { color: '#dcdcdf' },\n minorGridLines: { color: '#eeeeef' },\n title: { color: '#4e5968' },\n crosshair: { color: '#a6b1c0' },\n notes: {\n icon: {\n background: 'transparent',\n border: { color: '#4e5968' }\n },\n label: { color: '#4e5968' },\n line: { color: '#4e5968' }\n }\n }\n },\n gauge: {\n pointer: { color: '#0879c0' },\n scale: {\n rangePlaceholderColor: '#f3f3f4',\n labels: { color: '#515967' },\n minorTicks: { color: '#515967' },\n majorTicks: { color: '#515967' },\n line: { color: '#515967' }\n }\n },\n diagram: {\n shapeDefaults: {\n fill: { color: '#1c82c2' },\n connectorDefaults: {\n fill: { color: '#515967' },\n stroke: { color: WHITE },\n hover: {\n fill: { color: WHITE },\n stroke: { color: '#282828' }\n }\n },\n content: { color: '#515967' }\n },\n editable: {\n resize: {\n handles: {\n fill: { color: WHITE },\n stroke: { color: '#515967' },\n hover: {\n fill: { color: '#515967' },\n stroke: { color: '#515967' }\n }\n }\n },\n rotate: {\n thumb: {\n stroke: { color: '#515967' },\n fill: { color: '#515967' }\n }\n }\n },\n selectable: { stroke: { color: '#515967' } },\n connectionDefaults: {\n stroke: { color: '#515967' },\n content: { color: '#515967' },\n selection: {\n handles: {\n fill: { color: WHITE },\n stroke: { color: '#515967' }\n }\n }\n }\n },\n treeMap: {\n colors: [\n [\n '#007bc3',\n '#c2dbea'\n ],\n [\n '#76b800',\n '#dae7c3'\n ],\n [\n '#ffae00',\n '#f5e5c3'\n ],\n [\n '#ef4c00',\n '#f2d2c3'\n ],\n [\n '#a419b7',\n '#e3c7e8'\n ],\n [\n '#430b62',\n '#d0c5d7'\n ]\n ]\n }\n });\n registerTheme('metro', {\n chart: {\n title: { color: '#777777' },\n legend: {\n labels: { color: '#777777' },\n inactiveItems: {\n labels: { color: '#CBCBCB' },\n markers: { color: '#CBCBCB' }\n }\n },\n seriesDefaults: {\n labels: { color: BLACK },\n errorBars: { color: '#777777' },\n notes: {\n icon: {\n background: 'transparent',\n border: { color: '#777777' }\n },\n label: { color: '#777777' },\n line: { color: '#777777' }\n },\n candlestick: {\n downColor: '#c7c7c7',\n line: { color: '#787878' }\n },\n waterfall: { line: { color: '#c7c7c7' } },\n horizontalWaterfall: { line: { color: '#c7c7c7' } },\n overlay: { gradient: 'none' },\n border: { _brightness: 1 }\n },\n seriesColors: [\n '#8ebc00',\n '#309b46',\n '#25a0da',\n '#ff6900',\n '#e61e26',\n '#d8e404',\n '#16aba9',\n '#7e51a1',\n '#313131',\n '#ed1691'\n ],\n axisDefaults: {\n line: { color: '#c7c7c7' },\n labels: { color: '#777777' },\n minorGridLines: { color: '#c7c7c7' },\n majorGridLines: { color: '#c7c7c7' },\n title: { color: '#777777' },\n crosshair: { color: '#c7c7c7' },\n notes: {\n icon: {\n background: 'transparent',\n border: { color: '#777777' }\n },\n label: { color: '#777777' },\n line: { color: '#777777' }\n }\n }\n },\n gauge: {\n pointer: { color: '#8ebc00' },\n scale: {\n rangePlaceholderColor: '#e6e6e6',\n labels: { color: '#777' },\n minorTicks: { color: '#777' },\n majorTicks: { color: '#777' },\n line: { color: '#777' }\n }\n },\n diagram: {\n shapeDefaults: {\n fill: { color: '#8ebc00' },\n connectorDefaults: {\n fill: { color: BLACK },\n stroke: { color: WHITE },\n hover: {\n fill: { color: WHITE },\n stroke: { color: BLACK }\n }\n },\n content: { color: '#777' }\n },\n editable: {\n resize: {\n handles: {\n fill: { color: WHITE },\n stroke: { color: '#787878' },\n hover: {\n fill: { color: '#787878' },\n stroke: { color: '#787878' }\n }\n }\n },\n rotate: {\n thumb: {\n stroke: { color: '#787878' },\n fill: { color: '#787878' }\n }\n }\n },\n selectable: { stroke: { color: '#515967' } },\n connectionDefaults: {\n stroke: { color: '#787878' },\n content: { color: '#777' },\n selection: {\n handles: {\n fill: { color: WHITE },\n stroke: { color: '#787878' }\n }\n }\n }\n },\n treeMap: {\n colors: [\n [\n '#8ebc00',\n '#e8f2cc'\n ],\n [\n '#309b46',\n '#d6ebda'\n ],\n [\n '#25a0da',\n '#d3ecf8'\n ],\n [\n '#ff6900',\n '#ffe1cc'\n ],\n [\n '#e61e26',\n '#fad2d4'\n ],\n [\n '#d8e404',\n '#f7facd'\n ],\n [\n '#16aba9',\n '#d0eeee'\n ],\n [\n '#7e51a1',\n '#e5dcec'\n ],\n [\n '#313131',\n '#d6d6d6'\n ],\n [\n '#ed1691',\n '#fbd0e9'\n ]\n ]\n }\n });\n registerTheme('metroblack', {\n chart: {\n title: { color: '#ffffff' },\n legend: {\n labels: { color: '#ffffff' },\n inactiveItems: {\n labels: { color: '#797979' },\n markers: { color: '#797979' }\n }\n },\n seriesDefaults: {\n border: { _brightness: 1 },\n labels: { color: '#ffffff' },\n errorBars: { color: '#ffffff' },\n notes: {\n icon: {\n background: 'transparent',\n border: { color: '#cecece' }\n },\n label: { color: '#ffffff' },\n line: { color: '#cecece' }\n },\n line: { markers: { background: '#0e0e0e' } },\n bubble: { opacity: 0.6 },\n scatter: { markers: { background: '#0e0e0e' } },\n scatterLine: { markers: { background: '#0e0e0e' } },\n candlestick: {\n downColor: '#828282',\n line: { color: '#ffffff' }\n },\n waterfall: { line: { color: '#cecece' } },\n horizontalWaterfall: { line: { color: '#cecece' } },\n overlay: { gradient: 'none' }\n },\n chartArea: { background: '#0e0e0e' },\n seriesColors: [\n '#00aba9',\n '#309b46',\n '#8ebc00',\n '#ff6900',\n '#e61e26',\n '#d8e404',\n '#25a0da',\n '#7e51a1',\n '#313131',\n '#ed1691'\n ],\n axisDefaults: {\n line: { color: '#cecece' },\n labels: { color: '#ffffff' },\n minorGridLines: { color: '#2d2d2d' },\n majorGridLines: { color: '#333333' },\n title: { color: '#ffffff' },\n crosshair: { color: '#cecece' },\n notes: {\n icon: {\n background: 'transparent',\n border: { color: '#cecece' }\n },\n label: { color: '#ffffff' },\n line: { color: '#cecece' }\n }\n }\n },\n gauge: {\n pointer: { color: '#00aba9' },\n scale: {\n rangePlaceholderColor: '#2d2d2d',\n labels: { color: '#ffffff' },\n minorTicks: { color: '#333333' },\n majorTicks: { color: '#cecece' },\n line: { color: '#cecece' }\n }\n },\n diagram: {\n shapeDefaults: {\n fill: { color: '#00aba9' },\n connectorDefaults: {\n fill: { color: WHITE },\n stroke: { color: '#0e0e0e' },\n hover: {\n fill: { color: '#0e0e0e' },\n stroke: { color: WHITE }\n }\n },\n content: { color: WHITE }\n },\n editable: {\n resize: {\n handles: {\n fill: { color: '#0e0e0e' },\n stroke: { color: '#787878' },\n hover: {\n fill: { color: '#787878' },\n stroke: { color: '#787878' }\n }\n }\n },\n rotate: {\n thumb: {\n stroke: { color: WHITE },\n fill: { color: WHITE }\n }\n }\n },\n selectable: { stroke: { color: '#787878' } },\n connectionDefaults: {\n stroke: { color: WHITE },\n content: { color: WHITE },\n selection: {\n handles: {\n fill: { color: '#0e0e0e' },\n stroke: { color: WHITE }\n }\n }\n }\n },\n treeMap: {\n colors: [\n [\n '#00aba9',\n '#0b2d2d'\n ],\n [\n '#309b46',\n '#152a19'\n ],\n [\n '#8ebc00',\n '#28310b'\n ],\n [\n '#ff6900',\n '#3e200b'\n ],\n [\n '#e61e26',\n '#391113'\n ],\n [\n '#d8e404',\n '#36390c'\n ],\n [\n '#25a0da',\n '#132b37'\n ],\n [\n '#7e51a1',\n '#241b2b'\n ],\n [\n '#313131',\n '#151515'\n ],\n [\n '#ed1691',\n '#3b1028'\n ]\n ]\n }\n });\n registerTheme('moonlight', {\n chart: {\n title: { color: '#ffffff' },\n legend: {\n labels: { color: '#ffffff' },\n inactiveItems: {\n labels: { color: '#A1A7AB' },\n markers: { color: '#A1A7AB' }\n }\n },\n seriesDefaults: {\n labels: { color: '#ffffff' },\n errorBars: { color: '#ffffff' },\n notes: {\n icon: {\n background: 'transparent',\n border: { color: '#8c909e' }\n },\n label: { color: '#ffffff' },\n line: { color: '#8c909e' }\n },\n pie: { overlay: { gradient: 'sharpBevel' } },\n donut: { overlay: { gradient: 'sharpGlass' } },\n line: { markers: { background: '#212a33' } },\n bubble: { opacity: 0.6 },\n scatter: { markers: { background: '#212a33' } },\n scatterLine: { markers: { background: '#212a33' } },\n area: { opacity: 0.3 },\n candlestick: {\n downColor: '#757d87',\n line: { color: '#ea9d06' },\n border: {\n _brightness: 1.5,\n opacity: 1\n },\n highlight: {\n border: {\n color: WHITE,\n opacity: 0.2\n }\n }\n },\n waterfall: { line: { color: '#8c909e' } },\n horizontalWaterfall: { line: { color: '#8c909e' } },\n ohlc: { line: { color: '#ea9d06' } }\n },\n chartArea: { background: '#212a33' },\n seriesColors: [\n '#ffca08',\n '#ff710f',\n '#ed2e24',\n '#ff9f03',\n '#e13c02',\n '#a00201'\n ],\n axisDefaults: {\n line: { color: '#8c909e' },\n minorTicks: { color: '#8c909e' },\n majorTicks: { color: '#8c909e' },\n labels: { color: '#ffffff' },\n majorGridLines: { color: '#3e424d' },\n minorGridLines: { color: '#2f3640' },\n title: { color: '#ffffff' },\n crosshair: { color: '#8c909e' },\n notes: {\n icon: {\n background: 'transparent',\n border: { color: '#8c909e' }\n },\n label: { color: '#ffffff' },\n line: { color: '#8c909e' }\n }\n }\n },\n gauge: {\n pointer: { color: '#f4af03' },\n scale: {\n rangePlaceholderColor: '#2f3640',\n labels: { color: WHITE },\n minorTicks: { color: '#8c909e' },\n majorTicks: { color: '#8c909e' },\n line: { color: '#8c909e' }\n }\n },\n diagram: {\n shapeDefaults: {\n fill: { color: '#f3ae03' },\n connectorDefaults: {\n fill: { color: WHITE },\n stroke: { color: '#414550' },\n hover: {\n fill: { color: '#414550' },\n stroke: { color: WHITE }\n }\n },\n content: { color: WHITE }\n },\n editable: {\n resize: {\n handles: {\n fill: { color: '#414550' },\n stroke: { color: WHITE },\n hover: {\n fill: { color: WHITE },\n stroke: { color: WHITE }\n }\n }\n },\n rotate: {\n thumb: {\n stroke: { color: WHITE },\n fill: { color: WHITE }\n }\n }\n },\n selectable: { stroke: { color: WHITE } },\n connectionDefaults: {\n stroke: { color: WHITE },\n content: { color: WHITE },\n selection: {\n handles: {\n fill: { color: '#414550' },\n stroke: { color: WHITE }\n }\n }\n }\n },\n treeMap: {\n colors: [\n [\n '#ffca08',\n '#4e4b2b'\n ],\n [\n '#ff710f',\n '#4e392d'\n ],\n [\n '#ed2e24',\n '#4b2c31'\n ],\n [\n '#ff9f03',\n '#4e422a'\n ],\n [\n '#e13c02',\n '#482e2a'\n ],\n [\n '#a00201',\n '#3b232a'\n ]\n ]\n }\n });\n registerTheme('uniform', {\n chart: {\n title: { color: '#686868' },\n legend: {\n labels: { color: '#686868' },\n inactiveItems: {\n labels: { color: '#B6B6B6' },\n markers: { color: '#B6B6B6' }\n }\n },\n seriesDefaults: {\n labels: { color: '#686868' },\n errorBars: { color: '#686868' },\n notes: {\n icon: {\n background: 'transparent',\n border: { color: '#9e9e9e' }\n },\n label: { color: '#686868' },\n line: { color: '#9e9e9e' }\n },\n pie: { overlay: { gradient: 'sharpBevel' } },\n donut: { overlay: { gradient: 'sharpGlass' } },\n line: { markers: { background: '#ffffff' } },\n bubble: { opacity: 0.6 },\n scatter: { markers: { background: '#ffffff' } },\n scatterLine: { markers: { background: '#ffffff' } },\n area: { opacity: 0.3 },\n candlestick: {\n downColor: '#cccccc',\n line: { color: '#cccccc' },\n border: {\n _brightness: 1.5,\n opacity: 1\n },\n highlight: {\n border: {\n color: '#cccccc',\n opacity: 0.2\n }\n }\n },\n waterfall: { line: { color: '#9e9e9e' } },\n horizontalWaterfall: { line: { color: '#9e9e9e' } },\n ohlc: { line: { color: '#cccccc' } }\n },\n chartArea: { background: '#ffffff' },\n seriesColors: [\n '#527aa3',\n '#6f91b3',\n '#8ca7c2',\n '#a8bdd1',\n '#c5d3e0',\n '#e2e9f0'\n ],\n axisDefaults: {\n line: { color: '#9e9e9e' },\n minorTicks: { color: '#aaaaaa' },\n majorTicks: { color: '#888888' },\n labels: { color: '#686868' },\n majorGridLines: { color: '#dadada' },\n minorGridLines: { color: '#e7e7e7' },\n title: { color: '#686868' },\n crosshair: { color: '#9e9e9e' },\n notes: {\n icon: {\n background: 'transparent',\n border: { color: '#9e9e9e' }\n },\n label: { color: '#686868' },\n line: { color: '#9e9e9e' }\n }\n }\n },\n gauge: {\n pointer: { color: '#527aa3' },\n scale: {\n rangePlaceholderColor: '#e7e7e7',\n labels: { color: '#686868' },\n minorTicks: { color: '#aaaaaa' },\n majorTicks: { color: '#888888' },\n line: { color: '#9e9e9e' }\n }\n },\n diagram: {\n shapeDefaults: {\n fill: { color: '#d1d1d1' },\n connectorDefaults: {\n fill: { color: '#686868' },\n stroke: { color: WHITE },\n hover: {\n fill: { color: WHITE },\n stroke: { color: '#686868' }\n }\n },\n content: { color: '#686868' }\n },\n editable: {\n resize: {\n handles: {\n fill: { color: WHITE },\n stroke: { color: '#686868' },\n hover: {\n fill: { color: '#686868' },\n stroke: { color: '#686868' }\n }\n }\n },\n rotate: {\n thumb: {\n stroke: { color: '#686868' },\n fill: { color: '#686868' }\n }\n }\n },\n selectable: { stroke: { color: '#686868' } },\n connectionDefaults: {\n stroke: { color: '#686868' },\n content: { color: '#686868' },\n selection: {\n handles: {\n fill: { color: WHITE },\n stroke: { color: '#686868' }\n }\n }\n }\n },\n treeMap: {\n colors: [\n [\n '#527aa3',\n '#d0d8e1'\n ],\n [\n '#6f91b3',\n '#d6dde4'\n ],\n [\n '#8ca7c2',\n '#dce1e7'\n ],\n [\n '#a8bdd1',\n '#e2e6ea'\n ],\n [\n '#c5d3e0',\n '#e7eaed'\n ],\n [\n '#e2e9f0',\n '#edeff0'\n ]\n ]\n }\n });\n registerTheme('bootstrap', {\n chart: {\n title: { color: '#333333' },\n legend: {\n labels: { color: '#333333' },\n inactiveItems: {\n labels: { color: '#999999' },\n markers: { color: '#9A9A9A' }\n }\n },\n seriesDefaults: {\n labels: { color: '#333333' },\n overlay: { gradient: 'none' },\n errorBars: { color: '#343434' },\n notes: {\n icon: {\n background: '#000000',\n border: { color: '#000000' }\n },\n label: { color: '#333333' },\n line: { color: '#000000' }\n },\n pie: { overlay: { gradient: 'none' } },\n donut: { overlay: { gradient: 'none' } },\n line: { markers: { background: '#ffffff' } },\n bubble: { opacity: 0.6 },\n scatter: { markers: { background: '#ffffff' } },\n scatterLine: { markers: { background: '#ffffff' } },\n area: { opacity: 0.8 },\n candlestick: {\n downColor: '#d0d0d0',\n line: { color: '#333333' },\n border: {\n _brightness: 1.5,\n opacity: 1\n },\n highlight: {\n border: {\n color: '#b8b8b8',\n opacity: 0.2\n }\n }\n },\n waterfall: { line: { color: '#cccccc' } },\n horizontalWaterfall: { line: { color: '#cccccc' } },\n ohlc: { line: { color: '#333333' } }\n },\n chartArea: { background: '#ffffff' },\n seriesColors: [\n '#428bca',\n '#5bc0de',\n '#5cb85c',\n '#f2b661',\n '#e67d4a',\n '#da3b36'\n ],\n axisDefaults: {\n line: { color: '#cccccc' },\n minorTicks: { color: '#ebebeb' },\n majorTicks: { color: '#cccccc' },\n labels: { color: '#333333' },\n majorGridLines: { color: '#cccccc' },\n minorGridLines: { color: '#ebebeb' },\n title: { color: '#333333' },\n crosshair: { color: '#000000' },\n notes: {\n icon: {\n background: '#000000',\n border: { color: '#000000' }\n },\n label: { color: '#ffffff' },\n line: { color: '#000000' }\n }\n }\n },\n gauge: {\n pointer: { color: '#428bca' },\n scale: {\n rangePlaceholderColor: '#cccccc',\n labels: { color: '#333333' },\n minorTicks: { color: '#ebebeb' },\n majorTicks: { color: '#cccccc' },\n line: { color: '#cccccc' }\n }\n },\n diagram: {\n shapeDefaults: {\n fill: { color: '#428bca' },\n connectorDefaults: {\n fill: { color: '#333333' },\n stroke: { color: WHITE },\n hover: {\n fill: { color: WHITE },\n stroke: { color: '#333333' }\n }\n },\n content: { color: '#333333' }\n },\n editable: {\n resize: {\n handles: {\n fill: { color: WHITE },\n stroke: { color: '#333333' },\n hover: {\n fill: { color: '#333333' },\n stroke: { color: '#333333' }\n }\n }\n },\n rotate: {\n thumb: {\n stroke: { color: '#333333' },\n fill: { color: '#333333' }\n }\n }\n },\n selectable: { stroke: { color: '#333333' } },\n connectionDefaults: {\n stroke: { color: '#c4c4c4' },\n content: { color: '#333333' },\n selection: {\n handles: {\n fill: { color: WHITE },\n stroke: { color: '#333333' }\n },\n stroke: { color: '#333333' }\n }\n }\n },\n treeMap: {\n colors: [\n [\n '#428bca',\n '#d1e0ec'\n ],\n [\n '#5bc0de',\n '#d6eaf0'\n ],\n [\n '#5cb85c',\n '#d6e9d6'\n ],\n [\n '#5cb85c',\n '#f4e8d7'\n ],\n [\n '#e67d4a',\n '#f2ddd3'\n ],\n [\n '#da3b36',\n '#f0d0cf'\n ]\n ]\n }\n });\n registerTheme('flat', {\n chart: {\n title: { color: '#4c5356' },\n legend: {\n labels: { color: '#4c5356' },\n inactiveItems: {\n labels: { color: '#CBCBCB' },\n markers: { color: '#CBCBCB' }\n }\n },\n seriesDefaults: {\n labels: { color: '#4c5356' },\n errorBars: { color: '#4c5356' },\n notes: {\n icon: {\n background: 'transparent',\n border: { color: '#cdcdcd' }\n },\n label: { color: '#4c5356' },\n line: { color: '#cdcdcd' }\n },\n candlestick: {\n downColor: '#c7c7c7',\n line: { color: '#787878' }\n },\n area: { opacity: 0.9 },\n waterfall: { line: { color: '#cdcdcd' } },\n horizontalWaterfall: { line: { color: '#cdcdcd' } },\n overlay: { gradient: 'none' },\n border: { _brightness: 1 }\n },\n seriesColors: [\n '#10c4b2',\n '#ff7663',\n '#ffb74f',\n '#a2df53',\n '#1c9ec4',\n '#ff63a5',\n '#1cc47b'\n ],\n axisDefaults: {\n line: { color: '#cdcdcd' },\n labels: { color: '#4c5356' },\n minorGridLines: { color: '#cdcdcd' },\n majorGridLines: { color: '#cdcdcd' },\n title: { color: '#4c5356' },\n crosshair: { color: '#cdcdcd' },\n notes: {\n icon: {\n background: 'transparent',\n border: { color: '#cdcdcd' }\n },\n label: { color: '#4c5356' },\n line: { color: '#cdcdcd' }\n }\n }\n },\n gauge: {\n pointer: { color: '#10c4b2' },\n scale: {\n rangePlaceholderColor: '#cdcdcd',\n labels: { color: '#4c5356' },\n minorTicks: { color: '#4c5356' },\n majorTicks: { color: '#4c5356' },\n line: { color: '#4c5356' }\n }\n },\n diagram: {\n shapeDefaults: {\n fill: { color: '#10c4b2' },\n connectorDefaults: {\n fill: { color: '#363940' },\n stroke: { color: WHITE },\n hover: {\n fill: { color: WHITE },\n stroke: { color: '#363940' }\n }\n },\n content: { color: '#4c5356' }\n },\n editable: {\n resize: {\n handles: {\n fill: { color: WHITE },\n stroke: { color: '#363940' },\n hover: {\n fill: { color: '#363940' },\n stroke: { color: '#363940' }\n }\n }\n },\n rotate: {\n thumb: {\n stroke: { color: '#363940' },\n fill: { color: '#363940' }\n }\n }\n },\n selectable: { stroke: { color: '#363940' } },\n connectionDefaults: {\n stroke: { color: '#cdcdcd' },\n content: { color: '#4c5356' },\n selection: {\n handles: {\n fill: { color: WHITE },\n stroke: { color: '#363940' }\n },\n stroke: { color: '#363940' }\n }\n }\n },\n treeMap: {\n colors: [\n [\n '#10c4b2',\n '#cff3f0'\n ],\n [\n '#ff7663',\n '#ffe4e0'\n ],\n [\n '#ffb74f',\n '#fff1dc'\n ],\n [\n '#a2df53',\n '#ecf9dd'\n ],\n [\n '#1c9ec4',\n '#d2ecf3'\n ],\n [\n '#ff63a5',\n '#ffe0ed'\n ],\n [\n '#1cc47b',\n '#d2f3e5'\n ]\n ]\n }\n });\n registerTheme('material', {\n chart: {\n title: { color: '#444444' },\n legend: {\n labels: { color: '#444444' },\n inactiveItems: {\n labels: { color: '#CBCBCB' },\n markers: { color: '#CBCBCB' }\n }\n },\n seriesDefaults: {\n labels: { color: '#444444' },\n errorBars: { color: '#444444' },\n notes: {\n icon: {\n background: 'transparent',\n border: { color: '#e5e5e5' }\n },\n label: { color: '#444444' },\n line: { color: '#e5e5e5' }\n },\n candlestick: {\n downColor: '#c7c7c7',\n line: { color: '#787878' }\n },\n area: { opacity: 0.9 },\n waterfall: { line: { color: '#e5e5e5' } },\n horizontalWaterfall: { line: { color: '#e5e5e5' } },\n overlay: { gradient: 'none' },\n border: { _brightness: 1 }\n },\n seriesColors: [\n '#3f51b5',\n '#03a9f4',\n '#4caf50',\n '#f9ce1d',\n '#ff9800',\n '#ff5722'\n ],\n axisDefaults: {\n line: { color: '#e5e5e5' },\n labels: { color: '#444444' },\n minorGridLines: { color: '#e5e5e5' },\n majorGridLines: { color: '#e5e5e5' },\n title: { color: '#444444' },\n crosshair: { color: '#7f7f7f' },\n notes: {\n icon: {\n background: 'transparent',\n border: { color: '#e5e5e5' }\n },\n label: { color: '#444444' },\n line: { color: '#e5e5e5' }\n }\n }\n },\n gauge: {\n pointer: { color: '#3f51b5' },\n scale: {\n rangePlaceholderColor: '#e5e5e5',\n labels: { color: '#444444' },\n minorTicks: { color: '#444444' },\n majorTicks: { color: '#444444' },\n line: { color: '#444444' }\n }\n },\n diagram: {\n shapeDefaults: {\n fill: { color: '#3f51b5' },\n connectorDefaults: {\n fill: { color: '#7f7f7f' },\n stroke: { color: WHITE },\n hover: {\n fill: { color: WHITE },\n stroke: { color: '#7f7f7f' }\n }\n },\n content: { color: '#444444' }\n },\n editable: {\n resize: {\n handles: {\n fill: { color: WHITE },\n stroke: { color: '#444444' },\n hover: {\n fill: { color: '#444444' },\n stroke: { color: '#444444' }\n }\n }\n },\n rotate: {\n thumb: {\n stroke: { color: '#444444' },\n fill: { color: '#444444' }\n }\n }\n },\n selectable: { stroke: { color: '#444444' } },\n connectionDefaults: {\n stroke: { color: '#7f7f7f' },\n content: { color: '#444444' },\n selection: {\n handles: {\n fill: { color: WHITE },\n stroke: { color: '#444444' }\n },\n stroke: { color: '#444444' }\n }\n }\n },\n treeMap: {\n colors: [\n [\n '#3f51b5',\n '#cff3f0'\n ],\n [\n '#03a9f4',\n '#e5f6fe'\n ],\n [\n '#4caf50',\n '#edf7ed'\n ],\n [\n '#f9ce1d',\n '#fefae8'\n ],\n [\n '#ff9800',\n '#fff4e5'\n ],\n [\n '#ff5722',\n '#ffeee8'\n ]\n ]\n }\n });\n registerTheme('materialblack', {\n chart: {\n title: { color: '#fff' },\n legend: {\n labels: { color: '#fff' },\n inactiveItems: {\n labels: { color: '#CBCBCB' },\n markers: { color: '#CBCBCB' }\n }\n },\n seriesDefaults: {\n labels: { color: '#fff' },\n errorBars: { color: '#fff' },\n notes: {\n icon: {\n background: 'transparent',\n border: { color: '#e5e5e5' }\n },\n label: { color: '#fff' },\n line: { color: '#e5e5e5' }\n },\n candlestick: {\n downColor: '#c7c7c7',\n line: { color: '#787878' }\n },\n area: { opacity: 0.9 },\n waterfall: { line: { color: '#4d4d4d' } },\n horizontalWaterfall: { line: { color: '#4d4d4d' } },\n overlay: { gradient: 'none' },\n border: { _brightness: 1 }\n },\n chartArea: { background: '#1c1c1c' },\n seriesColors: [\n '#3f51b5',\n '#03a9f4',\n '#4caf50',\n '#f9ce1d',\n '#ff9800',\n '#ff5722'\n ],\n axisDefaults: {\n line: { color: '#4d4d4d' },\n labels: { color: '#fff' },\n minorGridLines: { color: '#4d4d4d' },\n majorGridLines: { color: '#4d4d4d' },\n title: { color: '#fff' },\n crosshair: { color: '#7f7f7f' },\n notes: {\n icon: {\n background: 'transparent',\n border: { color: '#4d4d4d' }\n },\n label: { color: '#fff' },\n line: { color: '#4d4d4d' }\n }\n }\n },\n gauge: {\n pointer: { color: '#3f51b5' },\n scale: {\n rangePlaceholderColor: '#4d4d4d',\n labels: { color: '#fff' },\n minorTicks: { color: '#fff' },\n majorTicks: { color: '#fff' },\n line: { color: '#fff' }\n }\n },\n diagram: {\n shapeDefaults: {\n fill: { color: '#3f51b5' },\n connectorDefaults: {\n fill: { color: '#7f7f7f' },\n stroke: { color: WHITE },\n hover: {\n fill: { color: WHITE },\n stroke: { color: '#7f7f7f' }\n }\n },\n content: { color: '#fff' }\n },\n editable: {\n resize: {\n handles: {\n fill: { color: WHITE },\n stroke: { color: '#fff' },\n hover: {\n fill: { color: '#fff' },\n stroke: { color: '#fff' }\n }\n }\n },\n rotate: {\n thumb: {\n stroke: { color: '#fff' },\n fill: { color: '#fff' }\n }\n }\n },\n selectable: { stroke: { color: '#fff' } },\n connectionDefaults: {\n stroke: { color: '#7f7f7f' },\n content: { color: '#fff' },\n selection: {\n handles: {\n fill: { color: WHITE },\n stroke: { color: '#fff' }\n },\n stroke: { color: '#fff' }\n }\n }\n },\n treeMap: {\n colors: [\n [\n '#3f51b5',\n '#cff3f0'\n ],\n [\n '#03a9f4',\n '#e5f6fe'\n ],\n [\n '#4caf50',\n '#edf7ed'\n ],\n [\n '#f9ce1d',\n '#fefae8'\n ],\n [\n '#ff9800',\n '#fff4e5'\n ],\n [\n '#ff5722',\n '#ffeee8'\n ]\n ]\n }\n });\n (function () {\n var TEXT = '#333333';\n var INACTIVE = '#7f7f7f';\n var INACTIVE_SHAPE = '#bdbdbd';\n var AXIS = '#c8c8c8';\n var AXIS_MINOR = '#dddddd';\n var SERIES = [\n '#008fd3',\n '#99d101',\n '#f39b02',\n '#f05662',\n '#c03c53',\n '#acacac'\n ];\n var SERIES_LIGHT = [\n '#cbe8f5',\n '#eaf5cb',\n '#fceacc',\n '#fbdcdf',\n '#f2d7dc',\n '#eeeeee'\n ];\n var PRIMARY = SERIES[0];\n var DIAGRAM_HOVER = WHITE;\n function noteStyle() {\n return {\n icon: {\n background: '#007cc0',\n border: { color: '#007cc0' }\n },\n label: { color: '#ffffff' },\n line: { color: AXIS }\n };\n }\n registerTheme('fiori', {\n chart: {\n title: { color: TEXT },\n legend: {\n labels: { color: TEXT },\n inactiveItems: {\n labels: { color: INACTIVE },\n markers: { color: INACTIVE }\n }\n },\n seriesDefaults: {\n labels: { color: TEXT },\n errorBars: { color: TEXT },\n notes: noteStyle(),\n candlestick: {\n downColor: AXIS,\n line: { color: INACTIVE_SHAPE }\n },\n area: { opacity: 0.8 },\n waterfall: { line: { color: AXIS } },\n horizontalWaterfall: { line: { color: AXIS } },\n overlay: { gradient: 'none' },\n border: { _brightness: 1 }\n },\n seriesColors: SERIES,\n axisDefaults: {\n line: { color: AXIS },\n labels: { color: TEXT },\n minorGridLines: { color: AXIS_MINOR },\n majorGridLines: { color: AXIS },\n title: { color: TEXT },\n crosshair: { color: INACTIVE },\n notes: noteStyle()\n }\n },\n gauge: {\n pointer: { color: PRIMARY },\n scale: {\n rangePlaceholderColor: AXIS,\n labels: { color: TEXT },\n minorTicks: { color: TEXT },\n majorTicks: { color: TEXT },\n line: { color: TEXT }\n }\n },\n diagram: {\n shapeDefaults: {\n fill: { color: PRIMARY },\n connectorDefaults: {\n fill: { color: TEXT },\n stroke: { color: DIAGRAM_HOVER },\n hover: {\n fill: { color: DIAGRAM_HOVER },\n stroke: { color: TEXT }\n }\n },\n content: { color: TEXT }\n },\n editable: {\n resize: {\n handles: {\n fill: { color: DIAGRAM_HOVER },\n stroke: { color: INACTIVE_SHAPE },\n hover: {\n fill: { color: INACTIVE_SHAPE },\n stroke: { color: INACTIVE_SHAPE }\n }\n }\n },\n rotate: {\n thumb: {\n stroke: { color: INACTIVE_SHAPE },\n fill: { color: INACTIVE_SHAPE }\n }\n }\n },\n selectable: { stroke: { color: INACTIVE_SHAPE } },\n connectionDefaults: {\n stroke: { color: INACTIVE_SHAPE },\n content: { color: INACTIVE_SHAPE },\n selection: {\n handles: {\n fill: { color: DIAGRAM_HOVER },\n stroke: { color: INACTIVE_SHAPE }\n },\n stroke: { color: INACTIVE_SHAPE }\n }\n }\n },\n treeMap: { colors: fuse(SERIES, SERIES_LIGHT) }\n });\n }());\n (function () {\n var TEXT = '#4e4e4e';\n var INACTIVE = '#7f7f7f';\n var INACTIVE_SHAPE = '#bdbdbd';\n var AXIS = '#c8c8c8';\n var AXIS_MINOR = '#e5e5e5';\n var SERIES = [\n '#0072c6',\n '#5db2ff',\n '#008a17',\n '#82ba00',\n '#ff8f32',\n '#ac193d'\n ];\n var SERIES_LIGHT = [\n '#cbe2f3',\n '#deeffe',\n '#cbe7d0',\n '#e5f0cb',\n '#fee8d5',\n '#eed0d7'\n ];\n var PRIMARY = SERIES[0];\n var DIAGRAM_HOVER = WHITE;\n function noteStyle() {\n return {\n icon: {\n background: '#00b0ff',\n border: { color: '#00b0ff' }\n },\n label: { color: '#ffffff' },\n line: { color: AXIS }\n };\n }\n registerTheme('office365', {\n chart: {\n title: { color: TEXT },\n legend: {\n labels: { color: TEXT },\n inactiveItems: {\n labels: { color: INACTIVE },\n markers: { color: INACTIVE }\n }\n },\n seriesDefaults: {\n labels: { color: TEXT },\n errorBars: { color: TEXT },\n notes: noteStyle(),\n candlestick: {\n downColor: AXIS,\n line: { color: INACTIVE_SHAPE }\n },\n area: { opacity: 0.8 },\n waterfall: { line: { color: AXIS } },\n horizontalWaterfall: { line: { color: AXIS } },\n overlay: { gradient: 'none' },\n border: { _brightness: 1 }\n },\n seriesColors: SERIES,\n axisDefaults: {\n line: { color: AXIS },\n labels: { color: TEXT },\n minorGridLines: { color: AXIS_MINOR },\n majorGridLines: { color: AXIS },\n title: { color: TEXT },\n crosshair: { color: INACTIVE },\n notes: noteStyle()\n }\n },\n gauge: {\n pointer: { color: PRIMARY },\n scale: {\n rangePlaceholderColor: AXIS,\n labels: { color: TEXT },\n minorTicks: { color: TEXT },\n majorTicks: { color: TEXT },\n line: { color: TEXT }\n }\n },\n diagram: {\n shapeDefaults: {\n fill: { color: PRIMARY },\n connectorDefaults: {\n fill: { color: TEXT },\n stroke: { color: DIAGRAM_HOVER },\n hover: {\n fill: { color: DIAGRAM_HOVER },\n stroke: { color: TEXT }\n }\n },\n content: { color: TEXT }\n },\n editable: {\n resize: {\n handles: {\n fill: { color: DIAGRAM_HOVER },\n stroke: { color: INACTIVE_SHAPE },\n hover: {\n fill: { color: INACTIVE_SHAPE },\n stroke: { color: INACTIVE_SHAPE }\n }\n }\n },\n rotate: {\n thumb: {\n stroke: { color: INACTIVE_SHAPE },\n fill: { color: INACTIVE_SHAPE }\n }\n }\n },\n selectable: { stroke: { color: INACTIVE_SHAPE } },\n connectionDefaults: {\n stroke: { color: INACTIVE_SHAPE },\n content: { color: INACTIVE_SHAPE },\n selection: {\n handles: {\n fill: { color: DIAGRAM_HOVER },\n stroke: { color: INACTIVE_SHAPE }\n },\n stroke: { color: INACTIVE_SHAPE }\n }\n }\n },\n treeMap: { colors: fuse(SERIES, SERIES_LIGHT) }\n });\n }());\n (function () {\n var TEXT = '#32364c';\n var INACTIVE = '#7f7f7f';\n var INACTIVE_SHAPE = '#bdbdbd';\n var AXIS = '#dfe0e1';\n var AXIS_MINOR = '#dfe0e1';\n var SERIES = [\n '#ff4350',\n '#ff9ea5',\n '#00acc1',\n '#80deea',\n '#ffbf46',\n '#ffd78c'\n ];\n var SERIES_LIGHT = [\n '#ffd9dc',\n '#ffeced',\n '#cceef3',\n '#e6f8fb',\n '#fff2da',\n '#fff7e8'\n ];\n var PRIMARY = SERIES[0];\n var DIAGRAM_HOVER = WHITE;\n function noteStyle() {\n return {\n icon: {\n background: '#007cc0',\n border: { color: '#007cc0' }\n },\n label: { color: '#ffffff' },\n line: { color: AXIS }\n };\n }\n registerTheme('nova', {\n chart: {\n title: { color: TEXT },\n legend: {\n labels: { color: TEXT },\n inactiveItems: {\n labels: { color: INACTIVE },\n markers: { color: INACTIVE }\n }\n },\n seriesDefaults: {\n labels: { color: TEXT },\n errorBars: { color: TEXT },\n notes: noteStyle(),\n candlestick: {\n downColor: AXIS,\n line: { color: INACTIVE_SHAPE }\n },\n area: { opacity: 0.8 },\n waterfall: { line: { color: AXIS } },\n horizontalWaterfall: { line: { color: AXIS } },\n overlay: { gradient: 'none' },\n border: { _brightness: 1 }\n },\n seriesColors: SERIES,\n axisDefaults: {\n line: { color: AXIS },\n labels: { color: TEXT },\n minorGridLines: { color: AXIS_MINOR },\n majorGridLines: { color: AXIS },\n title: { color: TEXT },\n crosshair: { color: TEXT },\n notes: noteStyle()\n }\n },\n gauge: {\n pointer: { color: PRIMARY },\n scale: {\n rangePlaceholderColor: AXIS,\n labels: { color: TEXT },\n minorTicks: { color: TEXT },\n majorTicks: { color: TEXT },\n line: { color: TEXT }\n }\n },\n diagram: {\n shapeDefaults: {\n fill: { color: PRIMARY },\n connectorDefaults: {\n fill: { color: TEXT },\n stroke: { color: DIAGRAM_HOVER },\n hover: {\n fill: { color: DIAGRAM_HOVER },\n stroke: { color: TEXT }\n }\n },\n content: { color: TEXT }\n },\n editable: {\n resize: {\n handles: {\n fill: { color: DIAGRAM_HOVER },\n stroke: { color: INACTIVE_SHAPE },\n hover: {\n fill: { color: INACTIVE_SHAPE },\n stroke: { color: INACTIVE_SHAPE }\n }\n }\n },\n rotate: {\n thumb: {\n stroke: { color: INACTIVE_SHAPE },\n fill: { color: INACTIVE_SHAPE }\n }\n }\n },\n selectable: { stroke: { color: INACTIVE_SHAPE } },\n connectionDefaults: {\n stroke: { color: INACTIVE_SHAPE },\n content: { color: INACTIVE_SHAPE },\n selection: {\n handles: {\n fill: { color: DIAGRAM_HOVER },\n stroke: { color: INACTIVE_SHAPE }\n },\n stroke: { color: INACTIVE_SHAPE }\n }\n }\n },\n treeMap: { colors: fuse(SERIES, SERIES_LIGHT) }\n });\n }());\n (function () {\n var TEXT = '#656565';\n var AXIS = 'rgba(0, 0, 0, .04)';\n var SERIES = [\n '#ff6358',\n '#ffd246',\n '#78d237',\n '#28b4c8',\n '#2d73f5',\n '#aa46be'\n ];\n var SERIES_LIGHT = [\n '#ffd9dc',\n '#ffeced',\n '#cceef3',\n '#e6f8fb',\n '#fff2da',\n '#fff7e8'\n ];\n var PRIMARY = SERIES[0];\n registerTheme('default-v2', {\n chart: {},\n gauge: {\n pointer: { color: PRIMARY },\n scale: {\n rangePlaceholderColor: AXIS,\n labels: { color: TEXT },\n minorTicks: { color: TEXT },\n majorTicks: { color: TEXT },\n line: { color: TEXT }\n }\n },\n diagram: {},\n treeMap: { colors: fuse(SERIES, SERIES_LIGHT) }\n });\n themes.sass = themes['default-v2'];\n }());\n (function () {\n var TEXT = '#292b2c';\n var AXIS = 'rgba(0, 0, 0, .04)';\n var SERIES = [\n '#0275d8',\n '#5bc0de',\n '#5cb85c',\n '#f0ad4e',\n '#e67d4a',\n '#d9534f'\n ];\n var SERIES_LIGHT = [\n '#ffd9dc',\n '#ffeced',\n '#cceef3',\n '#e6f8fb',\n '#fff2da',\n '#fff7e8'\n ];\n var PRIMARY = SERIES[0];\n registerTheme('bootstrap-v4', {\n chart: {},\n gauge: {\n pointer: { color: PRIMARY },\n scale: {\n rangePlaceholderColor: AXIS,\n labels: { color: TEXT },\n minorTicks: { color: TEXT },\n majorTicks: { color: TEXT },\n line: { color: TEXT }\n }\n },\n diagram: {},\n treeMap: { colors: fuse(SERIES, SERIES_LIGHT) }\n });\n }());\n function fuse(arr1, arr2) {\n return $.map(arr1, function (item, index) {\n return [[\n item,\n arr2[index]\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.dataviz.themes', [\n 'kendo.dataviz.core',\n 'dataviz/themes/chart-base-theme',\n 'dataviz/themes/auto-theme',\n 'dataviz/themes/themes'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'dataviz.themes',\n name: 'Themes',\n description: 'Built-in themes for the DataViz widgets',\n category: 'dataviz',\n depends: ['dataviz.core'],\n hidden: true\n };\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('dataviz/chart/kendo-chart', [\n 'kendo.core',\n 'kendo.color',\n 'kendo.drawing',\n 'kendo.dataviz.core'\n ], f);\n}(function () {\n (function ($) {\n window.kendo.dataviz = window.kendo.dataviz || {};\n var dataviz = kendo.dataviz;\n var Class = dataviz.Class;\n var isNumber = dataviz.isNumber;\n var datavizConstants = dataviz.constants;\n var MAX_VALUE = datavizConstants.MAX_VALUE;\n var MIN_VALUE = datavizConstants.MIN_VALUE;\n var VALUE = datavizConstants.VALUE;\n var CENTER = datavizConstants.CENTER;\n var TOP = datavizConstants.TOP;\n var BOTTOM = datavizConstants.BOTTOM;\n var LEFT = datavizConstants.LEFT;\n var WHITE = datavizConstants.WHITE;\n var CIRCLE = datavizConstants.CIRCLE;\n var Y = datavizConstants.Y;\n var X = datavizConstants.X;\n var RIGHT = datavizConstants.RIGHT;\n var BLACK = datavizConstants.BLACK;\n var DATE = datavizConstants.DATE;\n var DEFAULT_PRECISION = datavizConstants.DEFAULT_PRECISION;\n var ARC = datavizConstants.ARC;\n var defined = dataviz.defined;\n var getter = dataviz.getter;\n var isArray = dataviz.isArray;\n var ChartElement = dataviz.ChartElement;\n var Point = dataviz.Point;\n var Box = dataviz.Box;\n var alignPathToPixel = dataviz.alignPathToPixel;\n var setDefaultOptions = dataviz.setDefaultOptions;\n var inArray = dataviz.inArray;\n var isFunction = dataviz.isFunction;\n var valueOrDefault = dataviz.valueOrDefault;\n var isObject = dataviz.isObject;\n var deepExtend = dataviz.deepExtend;\n var eventElement = dataviz.eventElement;\n var getTemplate = dataviz.getTemplate;\n var TextBox = dataviz.TextBox;\n var ShapeElement = dataviz.ShapeElement;\n var getSpacing = dataviz.getSpacing;\n var limitValue = dataviz.limitValue;\n var last = dataviz.last;\n var append = dataviz.append;\n var isString = dataviz.isString;\n var parseDate = dataviz.parseDate;\n var styleValue = dataviz.styleValue;\n var CategoryAxis = dataviz.CategoryAxis;\n var BoxElement = dataviz.BoxElement;\n var round = dataviz.round;\n var grep = dataviz.grep;\n var DateCategoryAxis = dataviz.DateCategoryAxis;\n var elementStyles = dataviz.elementStyles;\n var hasClasses = dataviz.hasClasses;\n var bindEvents = dataviz.bindEvents;\n var services = dataviz.services;\n var unbindEvents = dataviz.unbindEvents;\n var support = kendo.support;\n var drawing = kendo.drawing;\n var Path = drawing.Path;\n var Animation = drawing.Animation;\n var AnimationFactory = drawing.AnimationFactory;\n var Group = drawing.Group;\n var Color = kendo.Color;\n var geometry = kendo.geometry;\n var GeometryPoint = geometry.Point;\n var transform = geometry.transform;\n var ChartAxis = Class.extend({\n init: function (axis) {\n this._axis = axis;\n this.options = axis.options;\n },\n value: function (point) {\n var axis = this._axis;\n var value = axis.getCategory ? axis.getCategory(point) : axis.getValue(point);\n return value;\n },\n slot: function (from, to, limit) {\n if (limit === void 0) {\n limit = true;\n }\n return this._axis.slot(from, to, limit);\n },\n range: function () {\n return this._axis.range();\n },\n valueRange: function () {\n return this._axis.valueRange();\n }\n });\n var ChartPlotArea = Class.extend({\n init: function (plotArea) {\n this._plotArea = plotArea;\n this.visual = plotArea.visual;\n this.backgroundVisual = plotArea._bgVisual;\n }\n });\n function countNumbers(values) {\n var length = values.length;\n var count = 0;\n for (var i = 0; i < length; i++) {\n var num = values[i];\n if (isNumber(num)) {\n count++;\n }\n }\n return count;\n }\n var Aggregates = {\n min: function (values) {\n var length = values.length;\n var min = MAX_VALUE;\n for (var i = 0; i < length; i++) {\n var value = values[i];\n if (isNumber(value)) {\n min = Math.min(min, value);\n }\n }\n return min === MAX_VALUE ? values[0] : min;\n },\n max: function (values) {\n var length = values.length;\n var max = MIN_VALUE;\n for (var i = 0; i < length; i++) {\n var value = values[i];\n if (isNumber(value)) {\n max = Math.max(max, value);\n }\n }\n return max === MIN_VALUE ? values[0] : max;\n },\n sum: function (values) {\n var length = values.length;\n var sum = 0;\n for (var i = 0; i < length; i++) {\n var value = values[i];\n if (isNumber(value)) {\n sum += value;\n }\n }\n return sum;\n },\n sumOrNull: function (values) {\n var result = null;\n if (countNumbers(values)) {\n result = Aggregates.sum(values);\n }\n return result;\n },\n count: function (values) {\n var length = values.length;\n var count = 0;\n for (var i = 0; i < length; i++) {\n var value = values[i];\n if (value !== null && defined(value)) {\n count++;\n }\n }\n return count;\n },\n avg: function (values) {\n var count = countNumbers(values);\n var result = values[0];\n if (count > 0) {\n result = Aggregates.sum(values) / count;\n }\n return result;\n },\n first: function (values) {\n var length = values.length;\n for (var i = 0; i < length; i++) {\n var value = values[i];\n if (value !== null && defined(value)) {\n return value;\n }\n }\n return values[0];\n }\n };\n function getField(field, row) {\n if (row === null) {\n return row;\n }\n var get = getter(field, true);\n return get(row);\n }\n var SeriesBinder = Class.extend({\n init: function () {\n this._valueFields = {};\n this._otherFields = {};\n this._nullValue = {};\n this._undefinedValue = {};\n },\n register: function (seriesTypes, valueFields, otherFields) {\n var this$1 = this;\n if (valueFields === void 0) {\n valueFields = [VALUE];\n }\n if (otherFields === void 0) {\n otherFields = {};\n }\n for (var i = 0; i < seriesTypes.length; i++) {\n var type = seriesTypes[i];\n this$1._valueFields[type] = valueFields;\n this$1._otherFields[type] = otherFields;\n this$1._nullValue[type] = this$1._makeValue(valueFields, null);\n this$1._undefinedValue[type] = this$1._makeValue(valueFields, undefined);\n }\n },\n canonicalFields: function (series) {\n return this.valueFields(series).concat(this.otherFields(series));\n },\n valueFields: function (series) {\n return this._valueFields[series.type] || [VALUE];\n },\n otherFields: function (series) {\n return this._otherFields[series.type] || [VALUE];\n },\n bindPoint: function (series, pointIx, item) {\n var data = series.data;\n var pointData = defined(item) ? item : data[pointIx];\n var result = { valueFields: { value: pointData } };\n var valueFields = this.valueFields(series);\n var otherFields = this._otherFields[series.type];\n var fields, value;\n if (pointData === null) {\n value = this._nullValue[series.type];\n } else if (!defined(pointData)) {\n value = this._undefinedValue[series.type];\n } else if (Array.isArray(pointData)) {\n var fieldData = pointData.slice(valueFields.length);\n value = this._bindFromArray(pointData, valueFields);\n fields = this._bindFromArray(fieldData, otherFields);\n } else if (typeof pointData === 'object') {\n var srcValueFields = this.sourceFields(series, valueFields);\n var srcPointFields = this.sourceFields(series, otherFields);\n value = this._bindFromObject(pointData, valueFields, srcValueFields);\n fields = this._bindFromObject(pointData, otherFields, srcPointFields);\n }\n if (defined(value)) {\n if (valueFields.length === 1) {\n result.valueFields.value = value[valueFields[0]];\n } else {\n result.valueFields = value;\n }\n }\n result.fields = fields || {};\n return result;\n },\n _makeValue: function (fields, initialValue) {\n var value = {};\n var length = fields.length;\n for (var i = 0; i < length; i++) {\n var fieldName = fields[i];\n value[fieldName] = initialValue;\n }\n return value;\n },\n _bindFromArray: function (array, fields) {\n var value = {};\n if (fields) {\n var length = Math.min(fields.length, array.length);\n for (var i = 0; i < length; i++) {\n value[fields[i]] = array[i];\n }\n }\n return value;\n },\n _bindFromObject: function (object, fields, srcFields) {\n if (srcFields === void 0) {\n srcFields = fields;\n }\n var value = {};\n if (fields) {\n var length = fields.length;\n for (var i = 0; i < length; i++) {\n var fieldName = fields[i];\n var srcFieldName = srcFields[i];\n value[fieldName] = getField(srcFieldName, object);\n }\n }\n return value;\n },\n sourceFields: function (series, canonicalFields) {\n var sourceFields = [];\n if (canonicalFields) {\n var length = canonicalFields.length;\n for (var i = 0; i < length; i++) {\n var fieldName = canonicalFields[i];\n var sourceFieldName = fieldName === VALUE ? 'field' : fieldName + 'Field';\n sourceFields.push(series[sourceFieldName] || fieldName);\n }\n }\n return sourceFields;\n }\n });\n SeriesBinder.current = new SeriesBinder();\n var STD_ERR = 'stderr';\n var STD_DEV = 'stddev';\n var percentRegex = /percent(?:\\w*)\\((\\d+)\\)/;\n var standardDeviationRegex = new RegExp('^' + STD_DEV + '(?:\\\\((\\\\d+(?:\\\\.\\\\d+)?)\\\\))?$');\n var ErrorRangeCalculator = Class.extend({\n init: function (errorValue, series, field) {\n this.initGlobalRanges(errorValue, series, field);\n },\n initGlobalRanges: function (errorValue, series, field) {\n var data = series.data;\n var deviationMatch = standardDeviationRegex.exec(errorValue);\n if (deviationMatch) {\n this.valueGetter = this.createValueGetter(series, field);\n var average = this.getAverage(data);\n var deviation = this.getStandardDeviation(data, average, false);\n var multiple = deviationMatch[1] ? parseFloat(deviationMatch[1]) : 1;\n var errorRange = {\n low: average.value - deviation * multiple,\n high: average.value + deviation * multiple\n };\n this.globalRange = function () {\n return errorRange;\n };\n } else if (errorValue.indexOf && errorValue.indexOf(STD_ERR) >= 0) {\n this.valueGetter = this.createValueGetter(series, field);\n var standardError = this.getStandardError(data, this.getAverage(data));\n this.globalRange = function (value) {\n return {\n low: value - standardError,\n high: value + standardError\n };\n };\n }\n },\n createValueGetter: function (series, field) {\n var data = series.data;\n var binder = SeriesBinder.current;\n var valueFields = binder.valueFields(series);\n var item = defined(data[0]) ? data[0] : {};\n var valueGetter;\n if (isArray(item)) {\n var index = field ? valueFields.indexOf(field) : 0;\n valueGetter = getter('[' + index + ']');\n } else if (isNumber(item)) {\n valueGetter = getter();\n } else if (typeof item === datavizConstants.OBJECT) {\n var srcValueFields = binder.sourceFields(series, valueFields);\n valueGetter = getter(srcValueFields[valueFields.indexOf(field)]);\n }\n return valueGetter;\n },\n getErrorRange: function (pointValue, errorValue) {\n var low, high, value;\n if (!defined(errorValue)) {\n return null;\n }\n if (this.globalRange) {\n return this.globalRange(pointValue);\n }\n if (isArray(errorValue)) {\n low = pointValue - errorValue[0];\n high = pointValue + errorValue[1];\n } else if (isNumber(value = parseFloat(errorValue))) {\n low = pointValue - value;\n high = pointValue + value;\n } else if (value = percentRegex.exec(errorValue)) {\n var percentValue = pointValue * (parseFloat(value[1]) / 100);\n low = pointValue - Math.abs(percentValue);\n high = pointValue + Math.abs(percentValue);\n } else {\n throw new Error('Invalid ErrorBar value: ' + errorValue);\n }\n return {\n low: low,\n high: high\n };\n },\n getStandardError: function (data, average) {\n return this.getStandardDeviation(data, average, true) / Math.sqrt(average.count);\n },\n getStandardDeviation: function (data, average, isSample) {\n var this$1 = this;\n var length = data.length;\n var total = isSample ? average.count - 1 : average.count;\n var squareDifferenceSum = 0;\n for (var idx = 0; idx < length; idx++) {\n var value = this$1.valueGetter(data[idx]);\n if (isNumber(value)) {\n squareDifferenceSum += Math.pow(value - average.value, 2);\n }\n }\n return Math.sqrt(squareDifferenceSum / total);\n },\n getAverage: function (data) {\n var this$1 = this;\n var length = data.length;\n var sum = 0;\n var count = 0;\n for (var idx = 0; idx < length; idx++) {\n var value = this$1.valueGetter(data[idx]);\n if (isNumber(value)) {\n sum += value;\n count++;\n }\n }\n return {\n value: sum / count,\n count: count\n };\n }\n });\n var browser = support.browser || {};\n var INITIAL_ANIMATION_DURATION = 600;\n var FADEIN = 'fadeIn';\n var GLASS = 'glass';\n var BORDER_BRIGHTNESS = 0.8;\n var TOOLTIP_OFFSET = 5;\n var START_SCALE = browser.msie ? 0.001 : 0;\n var ERROR_LOW_FIELD = 'errorLow';\n var ERROR_HIGH_FIELD = 'errorHigh';\n var X_ERROR_LOW_FIELD = 'xErrorLow';\n var X_ERROR_HIGH_FIELD = 'xErrorHigh';\n var Y_ERROR_LOW_FIELD = 'yErrorLow';\n var Y_ERROR_HIGH_FIELD = 'yErrorHigh';\n var LINE_MARKER_SIZE = 8;\n var ZERO = 'zero';\n var INTERPOLATE = 'interpolate';\n var GAP = 'gap';\n var SMOOTH = 'smooth';\n var STEP = 'step';\n var AREA = 'area';\n var BAR = 'bar';\n var BOX_PLOT = 'boxPlot';\n var BUBBLE = 'bubble';\n var BULLET = 'bullet';\n var CANDLESTICK = 'candlestick';\n var COLUMN = 'column';\n var DONUT = 'donut';\n var FUNNEL = 'funnel';\n var HORIZONTAL_WATERFALL = 'horizontalWaterfall';\n var LINE = 'line';\n var OHLC = 'ohlc';\n var PIE = 'pie';\n var POLAR_AREA = 'polarArea';\n var POLAR_LINE = 'polarLine';\n var POLAR_SCATTER = 'polarScatter';\n var RADAR_AREA = 'radarArea';\n var RADAR_COLUMN = 'radarColumn';\n var RADAR_LINE = 'radarLine';\n var RANGE_BAR = 'rangeBar';\n var RANGE_COLUMN = 'rangeColumn';\n var SCATTER = 'scatter';\n var SCATTER_LINE = 'scatterLine';\n var VERTICAL_AREA = 'verticalArea';\n var VERTICAL_BOX_PLOT = 'verticalBoxPlot';\n var VERTICAL_BULLET = 'verticalBullet';\n var VERTICAL_LINE = 'verticalLine';\n var WATERFALL = 'waterfall';\n var EQUALLY_SPACED_SERIES = [\n BAR,\n COLUMN,\n OHLC,\n CANDLESTICK,\n BOX_PLOT,\n VERTICAL_BOX_PLOT,\n BULLET,\n RANGE_COLUMN,\n RANGE_BAR,\n WATERFALL,\n HORIZONTAL_WATERFALL\n ];\n var LEGEND_ITEM_CLICK = 'legendItemClick';\n var LEGEND_ITEM_HOVER = 'legendItemHover';\n var SERIES_CLICK = 'seriesClick';\n var SERIES_HOVER = 'seriesHover';\n var PLOT_AREA_CLICK = 'plotAreaClick';\n var PLOT_AREA_HOVER = 'plotAreaHover';\n var DRAG = 'drag';\n var DRAG_END = 'dragEnd';\n var DRAG_START = 'dragStart';\n var ZOOM_START = 'zoomStart';\n var ZOOM = 'zoom';\n var ZOOM_END = 'zoomEnd';\n var SELECT_START = 'selectStart';\n var SELECT = 'select';\n var SELECT_END = 'selectEnd';\n var RENDER = 'render';\n var SHOW_TOOLTIP = 'showTooltip';\n var HIDE_TOOLTIP = 'hideTooltip';\n var LOGARITHMIC = 'log';\n var CATEGORY = 'category';\n var INSIDE_END = 'insideEnd';\n var INSIDE_BASE = 'insideBase';\n var OUTSIDE_END = 'outsideEnd';\n var MOUSEWHEEL = 'DOMMouseScroll mousewheel';\n var MOUSEWHEEL_DELAY = 150;\n var constants = {\n INITIAL_ANIMATION_DURATION: INITIAL_ANIMATION_DURATION,\n FADEIN: FADEIN,\n LEGEND_ITEM_CLICK: LEGEND_ITEM_CLICK,\n LEGEND_ITEM_HOVER: LEGEND_ITEM_HOVER,\n SERIES_CLICK: SERIES_CLICK,\n SERIES_HOVER: SERIES_HOVER,\n GLASS: GLASS,\n BORDER_BRIGHTNESS: BORDER_BRIGHTNESS,\n TOOLTIP_OFFSET: TOOLTIP_OFFSET,\n START_SCALE: START_SCALE,\n ERROR_LOW_FIELD: ERROR_LOW_FIELD,\n ERROR_HIGH_FIELD: ERROR_HIGH_FIELD,\n X_ERROR_LOW_FIELD: X_ERROR_LOW_FIELD,\n X_ERROR_HIGH_FIELD: X_ERROR_HIGH_FIELD,\n Y_ERROR_LOW_FIELD: Y_ERROR_LOW_FIELD,\n Y_ERROR_HIGH_FIELD: Y_ERROR_HIGH_FIELD,\n LINE_MARKER_SIZE: LINE_MARKER_SIZE,\n INTERPOLATE: INTERPOLATE,\n ZERO: ZERO,\n SMOOTH: SMOOTH,\n STEP: STEP,\n CATEGORY: CATEGORY,\n FUNNEL: FUNNEL,\n BAR: BAR,\n CANDLESTICK: CANDLESTICK,\n PIE: PIE,\n COLUMN: COLUMN,\n AREA: AREA,\n VERTICAL_BULLET: VERTICAL_BULLET,\n BOX_PLOT: BOX_PLOT,\n OHLC: OHLC,\n WATERFALL: WATERFALL,\n LINE: LINE,\n BULLET: BULLET,\n VERTICAL_LINE: VERTICAL_LINE,\n VERTICAL_AREA: VERTICAL_AREA,\n RANGE_COLUMN: RANGE_COLUMN,\n VERTICAL_BOX_PLOT: VERTICAL_BOX_PLOT,\n RANGE_BAR: RANGE_BAR,\n HORIZONTAL_WATERFALL: HORIZONTAL_WATERFALL,\n SCATTER: SCATTER,\n SCATTER_LINE: SCATTER_LINE,\n BUBBLE: BUBBLE,\n RADAR_AREA: RADAR_AREA,\n RADAR_LINE: RADAR_LINE,\n RADAR_COLUMN: RADAR_COLUMN,\n POLAR_LINE: POLAR_LINE,\n POLAR_AREA: POLAR_AREA,\n POLAR_SCATTER: POLAR_SCATTER,\n RENDER: RENDER,\n PLOT_AREA_CLICK: PLOT_AREA_CLICK,\n PLOT_AREA_HOVER: PLOT_AREA_HOVER,\n LOGARITHMIC: LOGARITHMIC,\n DRAG: DRAG,\n DRAG_START: DRAG_START,\n DRAG_END: DRAG_END,\n ZOOM_START: ZOOM_START,\n ZOOM: ZOOM,\n ZOOM_END: ZOOM_END,\n SELECT_START: SELECT_START,\n SELECT: SELECT,\n SELECT_END: SELECT_END,\n GAP: GAP,\n DONUT: DONUT,\n INSIDE_END: INSIDE_END,\n INSIDE_BASE: INSIDE_BASE,\n OUTSIDE_END: OUTSIDE_END,\n MOUSEWHEEL: MOUSEWHEEL,\n MOUSEWHEEL_DELAY: MOUSEWHEEL_DELAY,\n SHOW_TOOLTIP: SHOW_TOOLTIP,\n HIDE_TOOLTIP: HIDE_TOOLTIP,\n EQUALLY_SPACED_SERIES: EQUALLY_SPACED_SERIES\n };\n var DEFAULT_ERROR_BAR_WIDTH = 4;\n var ErrorBarBase = ChartElement.extend({\n init: function (low, high, isVertical, chart, series, options) {\n ChartElement.fn.init.call(this, options);\n this.low = low;\n this.high = high;\n this.isVertical = isVertical;\n this.chart = chart;\n this.series = series;\n },\n reflow: function (targetBox) {\n var endCaps = this.options.endCaps;\n var isVertical = this.isVertical;\n var axis = this.getAxis();\n var valueBox = axis.getSlot(this.low, this.high);\n var centerBox = targetBox.center();\n var capsWidth = this.getCapsWidth(targetBox, isVertical);\n var capValue = isVertical ? centerBox.x : centerBox.y;\n var capStart = capValue - capsWidth;\n var capEnd = capValue + capsWidth;\n var linePoints;\n if (isVertical) {\n linePoints = [\n new Point(centerBox.x, valueBox.y1),\n new Point(centerBox.x, valueBox.y2)\n ];\n if (endCaps) {\n linePoints.push(new Point(capStart, valueBox.y1), new Point(capEnd, valueBox.y1), new Point(capStart, valueBox.y2), new Point(capEnd, valueBox.y2));\n }\n this.box = new Box(capStart, valueBox.y1, capEnd, valueBox.y2);\n } else {\n linePoints = [\n new Point(valueBox.x1, centerBox.y),\n new Point(valueBox.x2, centerBox.y)\n ];\n if (endCaps) {\n linePoints.push(new Point(valueBox.x1, capStart), new Point(valueBox.x1, capEnd), new Point(valueBox.x2, capStart), new Point(valueBox.x2, capEnd));\n }\n this.box = new Box(valueBox.x1, capStart, valueBox.x2, capEnd);\n }\n this.linePoints = linePoints;\n },\n getCapsWidth: function (box, isVertical) {\n var boxSize = isVertical ? box.width() : box.height();\n var capsWidth = Math.min(Math.floor(boxSize / 2), DEFAULT_ERROR_BAR_WIDTH) || DEFAULT_ERROR_BAR_WIDTH;\n return capsWidth;\n },\n createVisual: function () {\n var this$1 = this;\n var options = this.options;\n var visual = options.visual;\n if (visual) {\n this.visual = visual({\n low: this.low,\n high: this.high,\n rect: this.box.toRect(),\n sender: this.getSender(),\n options: {\n endCaps: options.endCaps,\n color: options.color,\n line: options.line\n },\n createVisual: function () {\n this$1.createDefaultVisual();\n var defaultVisual = this$1.visual;\n delete this$1.visual;\n return defaultVisual;\n }\n });\n } else {\n this.createDefaultVisual();\n }\n },\n createDefaultVisual: function () {\n var this$1 = this;\n var ref = this;\n var options = ref.options;\n var linePoints = ref.linePoints;\n var lineOptions = {\n stroke: {\n color: options.color,\n width: options.line.width,\n dashType: options.line.dashType\n }\n };\n ChartElement.fn.createVisual.call(this);\n for (var idx = 0; idx < linePoints.length; idx += 2) {\n var line = new Path(lineOptions).moveTo(linePoints[idx].x, linePoints[idx].y).lineTo(linePoints[idx + 1].x, linePoints[idx + 1].y);\n alignPathToPixel(line);\n this$1.visual.append(line);\n }\n }\n });\n setDefaultOptions(ErrorBarBase, {\n animation: {\n type: FADEIN,\n delay: INITIAL_ANIMATION_DURATION\n },\n endCaps: true,\n line: { width: 2 },\n zIndex: 1\n });\n var CategoricalErrorBar = ErrorBarBase.extend({\n getAxis: function () {\n var axis = this.chart.seriesValueAxis(this.series);\n return axis;\n }\n });\n var MAX_EXPAND_DEPTH = 5;\n function evalOptions(options, context, state, dryRun) {\n if (state === void 0) {\n state = {};\n }\n if (dryRun === void 0) {\n dryRun = false;\n }\n var defaults = state.defaults = state.defaults || {};\n var depth = state.depth = state.depth || 0;\n var needsEval = false;\n state.excluded = state.excluded || [];\n if (depth > MAX_EXPAND_DEPTH) {\n return null;\n }\n for (var property in options) {\n if (!inArray(property, state.excluded) && options.hasOwnProperty(property)) {\n var propValue = options[property];\n if (isFunction(propValue)) {\n needsEval = true;\n if (!dryRun) {\n options[property] = valueOrDefault(propValue(context), defaults[property]);\n }\n } else if (isObject(propValue)) {\n if (!dryRun) {\n state.defaults = defaults[property];\n }\n state.depth++;\n needsEval = evalOptions(propValue, context, state, dryRun) || needsEval;\n state.depth--;\n }\n }\n }\n return needsEval;\n }\n function categoriesCount(series) {\n var seriesCount = series.length;\n var categories = 0;\n for (var i = 0; i < seriesCount; i++) {\n categories = Math.max(categories, series[i].data.length);\n }\n return categories;\n }\n var CategoricalChart = ChartElement.extend({\n init: function (plotArea, options) {\n ChartElement.fn.init.call(this, options);\n this.plotArea = plotArea;\n this.chartService = plotArea.chartService;\n this.categoryAxis = plotArea.seriesCategoryAxis(options.series[0]);\n this.valueAxisRanges = {};\n this.points = [];\n this.categoryPoints = [];\n this.seriesPoints = [];\n this.seriesOptions = [];\n this._evalSeries = [];\n this.render();\n },\n render: function () {\n this.traverseDataPoints(this.addValue.bind(this));\n },\n pointOptions: function (series, seriesIx) {\n var options = this.seriesOptions[seriesIx];\n if (!options) {\n var defaults = this.pointType().prototype.defaults;\n this.seriesOptions[seriesIx] = options = deepExtend({}, defaults, { vertical: !this.options.invertAxes }, series);\n }\n return options;\n },\n plotValue: function (point) {\n if (!point) {\n return 0;\n }\n if (this.options.isStacked100 && isNumber(point.value)) {\n var categoryIx = point.categoryIx;\n var categoryPoints = this.categoryPoints[categoryIx];\n var otherValues = [];\n var categorySum = 0;\n for (var i = 0; i < categoryPoints.length; i++) {\n var other = categoryPoints[i];\n if (other) {\n var stack = point.series.stack;\n var otherStack = other.series.stack;\n if (stack && otherStack && stack.group !== otherStack.group) {\n continue;\n }\n if (isNumber(other.value)) {\n categorySum += Math.abs(other.value);\n otherValues.push(Math.abs(other.value));\n }\n }\n }\n if (categorySum > 0) {\n return point.value / categorySum;\n }\n }\n return point.value;\n },\n plotRange: function (point, startValue) {\n var this$1 = this;\n if (startValue === void 0) {\n startValue = 0;\n }\n var categoryPoints = this.categoryPoints[point.categoryIx];\n if (this.options.isStacked) {\n var plotValue = this.plotValue(point);\n var positive = plotValue >= 0;\n var prevValue = startValue;\n var isStackedBar = false;\n for (var i = 0; i < categoryPoints.length; i++) {\n var other = categoryPoints[i];\n if (point === other) {\n break;\n }\n var stack = point.series.stack;\n var otherStack = other.series.stack;\n if (stack && otherStack) {\n if (typeof stack === datavizConstants.STRING && stack !== otherStack) {\n continue;\n }\n if (stack.group && stack.group !== otherStack.group) {\n continue;\n }\n }\n var otherValue = this$1.plotValue(other);\n if (otherValue >= 0 && positive || otherValue < 0 && !positive) {\n prevValue += otherValue;\n plotValue += otherValue;\n isStackedBar = true;\n if (this$1.options.isStacked100) {\n plotValue = Math.min(plotValue, 1);\n }\n }\n }\n if (isStackedBar) {\n prevValue -= startValue;\n }\n return [\n prevValue,\n plotValue\n ];\n }\n var series = point.series;\n var valueAxis = this.seriesValueAxis(series);\n var axisCrossingValue = this.categoryAxisCrossingValue(valueAxis);\n return [\n axisCrossingValue,\n point.value || axisCrossingValue\n ];\n },\n stackLimits: function (axisName, stackName) {\n var this$1 = this;\n var min = MAX_VALUE;\n var max = MIN_VALUE;\n for (var i = 0; i < this.categoryPoints.length; i++) {\n var categoryPoints = this$1.categoryPoints[i];\n if (!categoryPoints) {\n continue;\n }\n for (var pIx = 0; pIx < categoryPoints.length; pIx++) {\n var point = categoryPoints[pIx];\n if (point) {\n if (point.series.stack === stackName || point.series.axis === axisName) {\n var to = this$1.plotRange(point, 0)[1];\n if (defined(to) && isFinite(to)) {\n max = Math.max(max, to);\n min = Math.min(min, to);\n }\n }\n }\n }\n }\n return {\n min: min,\n max: max\n };\n },\n updateStackRange: function () {\n var this$1 = this;\n var ref = this.options;\n var isStacked = ref.isStacked;\n var chartSeries = ref.series;\n var limitsCache = {};\n if (isStacked) {\n for (var i = 0; i < chartSeries.length; i++) {\n var series = chartSeries[i];\n var axisName = series.axis;\n var key = axisName + series.stack;\n var limits = limitsCache[key];\n if (!limits) {\n limits = this$1.stackLimits(axisName, series.stack);\n var errorTotals = this$1.errorTotals;\n if (errorTotals) {\n if (errorTotals.negative.length) {\n limits.min = Math.min(limits.min, dataviz.sparseArrayLimits(errorTotals.negative).min);\n }\n if (errorTotals.positive.length) {\n limits.max = Math.max(limits.max, dataviz.sparseArrayLimits(errorTotals.positive).max);\n }\n }\n if (limits.min !== MAX_VALUE || limits.max !== MIN_VALUE) {\n limitsCache[key] = limits;\n } else {\n limits = null;\n }\n }\n if (limits) {\n this$1.valueAxisRanges[axisName] = limits;\n }\n }\n }\n },\n addErrorBar: function (point, data, categoryIx) {\n var value = point.value;\n var series = point.series;\n var seriesIx = point.seriesIx;\n var errorBars = point.options.errorBars;\n var lowValue = data.fields[ERROR_LOW_FIELD];\n var highValue = data.fields[ERROR_HIGH_FIELD];\n var errorRange;\n if (isNumber(lowValue) && isNumber(highValue)) {\n errorRange = {\n low: lowValue,\n high: highValue\n };\n } else if (errorBars && defined(errorBars.value)) {\n this.seriesErrorRanges = this.seriesErrorRanges || [];\n this.seriesErrorRanges[seriesIx] = this.seriesErrorRanges[seriesIx] || new ErrorRangeCalculator(errorBars.value, series, VALUE);\n errorRange = this.seriesErrorRanges[seriesIx].getErrorRange(value, errorBars.value);\n }\n if (errorRange) {\n point.low = errorRange.low;\n point.high = errorRange.high;\n this.addPointErrorBar(point, categoryIx);\n }\n },\n addPointErrorBar: function (point, categoryIx) {\n var isVertical = !this.options.invertAxes;\n var options = point.options.errorBars;\n var series = point.series;\n var low = point.low;\n var high = point.high;\n if (this.options.isStacked) {\n var stackedErrorRange = this.stackedErrorRange(point, categoryIx);\n low = stackedErrorRange.low;\n high = stackedErrorRange.high;\n } else {\n var fields = {\n categoryIx: categoryIx,\n series: series\n };\n this.updateRange({ value: low }, fields);\n this.updateRange({ value: high }, fields);\n }\n var errorBar = new CategoricalErrorBar(low, high, isVertical, this, series, options);\n point.errorBars = [errorBar];\n point.append(errorBar);\n },\n stackedErrorRange: function (point, categoryIx) {\n var plotValue = this.plotRange(point, 0)[1] - point.value;\n var low = point.low + plotValue;\n var high = point.high + plotValue;\n this.errorTotals = this.errorTotals || {\n positive: [],\n negative: []\n };\n if (low < 0) {\n this.errorTotals.negative[categoryIx] = Math.min(this.errorTotals.negative[categoryIx] || 0, low);\n }\n if (high > 0) {\n this.errorTotals.positive[categoryIx] = Math.max(this.errorTotals.positive[categoryIx] || 0, high);\n }\n return {\n low: low,\n high: high\n };\n },\n addValue: function (data, fields) {\n var categoryIx = fields.categoryIx;\n var series = fields.series;\n var seriesIx = fields.seriesIx;\n var categoryPoints = this.categoryPoints[categoryIx];\n if (!categoryPoints) {\n this.categoryPoints[categoryIx] = categoryPoints = [];\n }\n var seriesPoints = this.seriesPoints[seriesIx];\n if (!seriesPoints) {\n this.seriesPoints[seriesIx] = seriesPoints = [];\n }\n var point = this.createPoint(data, fields);\n if (point) {\n $.extend(point, fields);\n point.owner = this;\n point.noteText = data.fields.noteText;\n if (!defined(point.dataItem)) {\n point.dataItem = series.data[categoryIx];\n }\n this.addErrorBar(point, data, categoryIx);\n }\n this.points.push(point);\n seriesPoints.push(point);\n categoryPoints.push(point);\n this.updateRange(data.valueFields, fields);\n },\n evalPointOptions: function (options, value, category, categoryIx, series, seriesIx) {\n var state = {\n defaults: series._defaults,\n excluded: [\n 'data',\n 'aggregate',\n '_events',\n 'tooltip',\n 'content',\n 'template',\n 'visual',\n 'toggle',\n '_outOfRangeMinPoint',\n '_outOfRangeMaxPoint'\n ]\n };\n var doEval = this._evalSeries[seriesIx];\n if (!defined(doEval)) {\n this._evalSeries[seriesIx] = doEval = evalOptions(options, {}, state, true);\n }\n var pointOptions = options;\n if (doEval) {\n pointOptions = deepExtend({}, pointOptions);\n evalOptions(pointOptions, {\n value: value,\n category: category,\n index: categoryIx,\n series: series,\n dataItem: series.data[categoryIx]\n }, state);\n }\n return pointOptions;\n },\n updateRange: function (data, fields) {\n var axisName = fields.series.axis;\n var value = data.value;\n var axisRange = this.valueAxisRanges[axisName];\n if (isFinite(value) && value !== null) {\n axisRange = this.valueAxisRanges[axisName] = axisRange || {\n min: MAX_VALUE,\n max: MIN_VALUE\n };\n axisRange.min = Math.min(axisRange.min, value);\n axisRange.max = Math.max(axisRange.max, value);\n }\n },\n seriesValueAxis: function (series) {\n var plotArea = this.plotArea;\n var axisName = series.axis;\n var axis = axisName ? plotArea.namedValueAxes[axisName] : plotArea.valueAxis;\n if (!axis) {\n throw new Error('Unable to locate value axis with name ' + axisName);\n }\n return axis;\n },\n reflow: function (targetBox) {\n var this$1 = this;\n var categorySlots = this.categorySlots = [];\n var chartPoints = this.points;\n var categoryAxis = this.categoryAxis;\n var pointIx = 0;\n this.traverseDataPoints(function (data, fields) {\n var categoryIx = fields.categoryIx;\n var currentSeries = fields.series;\n var valueAxis = this$1.seriesValueAxis(currentSeries);\n var point = chartPoints[pointIx++];\n var categorySlot = categorySlots[categoryIx];\n if (!categorySlot) {\n categorySlots[categoryIx] = categorySlot = this$1.categorySlot(categoryAxis, categoryIx, valueAxis);\n }\n if (point) {\n var plotRange = this$1.plotRange(point, valueAxis.startValue());\n var valueSlot = valueAxis.getSlot(plotRange[0], plotRange[1], !this$1.options.clip);\n if (valueSlot) {\n var pointSlot = this$1.pointSlot(categorySlot, valueSlot);\n point.aboveAxis = this$1.aboveAxis(point, valueAxis);\n point.stackValue = plotRange[1];\n if (this$1.options.isStacked100) {\n point.percentage = this$1.plotValue(point);\n }\n this$1.reflowPoint(point, pointSlot);\n } else {\n point.visible = false;\n }\n }\n });\n this.reflowCategories(categorySlots);\n this.box = targetBox;\n },\n aboveAxis: function (point, valueAxis) {\n var axisCrossingValue = this.categoryAxisCrossingValue(valueAxis);\n var value = point.value;\n return valueAxis.options.reverse ? value < axisCrossingValue : value >= axisCrossingValue;\n },\n categoryAxisCrossingValue: function (valueAxis) {\n var categoryAxis = this.categoryAxis;\n var options = valueAxis.options;\n var crossingValues = [].concat(options.axisCrossingValues || options.axisCrossingValue);\n return crossingValues[categoryAxis.axisIndex || 0] || 0;\n },\n reflowPoint: function (point, pointSlot) {\n point.reflow(pointSlot);\n },\n reflowCategories: function () {\n },\n pointSlot: function (categorySlot, valueSlot) {\n var options = this.options;\n var invertAxes = options.invertAxes;\n var slotX = invertAxes ? valueSlot : categorySlot;\n var slotY = invertAxes ? categorySlot : valueSlot;\n return new Box(slotX.x1, slotY.y1, slotX.x2, slotY.y2);\n },\n categorySlot: function (categoryAxis, categoryIx) {\n return categoryAxis.getSlot(categoryIx);\n },\n traverseDataPoints: function (callback) {\n var this$1 = this;\n var series = this.options.series;\n var categories = this.categoryAxis.options.categories || [];\n var count = categoriesCount(series);\n var seriesCount = series.length;\n for (var seriesIx = 0; seriesIx < seriesCount; seriesIx++) {\n this$1._outOfRangeCallback(series[seriesIx], '_outOfRangeMinPoint', seriesIx, callback);\n }\n for (var categoryIx = 0; categoryIx < count; categoryIx++) {\n for (var seriesIx$1 = 0; seriesIx$1 < seriesCount; seriesIx$1++) {\n var currentSeries = series[seriesIx$1];\n var currentCategory = categories[categoryIx];\n var pointData = this$1._bindPoint(currentSeries, seriesIx$1, categoryIx);\n callback(pointData, {\n category: currentCategory,\n categoryIx: categoryIx,\n series: currentSeries,\n seriesIx: seriesIx$1\n });\n }\n }\n for (var seriesIx$2 = 0; seriesIx$2 < seriesCount; seriesIx$2++) {\n this$1._outOfRangeCallback(series[seriesIx$2], '_outOfRangeMaxPoint', seriesIx$2, callback);\n }\n },\n _outOfRangeCallback: function (series, field, seriesIx, callback) {\n var outOfRangePoint = series[field];\n if (outOfRangePoint) {\n var categoryIx = outOfRangePoint.categoryIx;\n var pointData = this._bindPoint(series, seriesIx, categoryIx, outOfRangePoint.item);\n callback(pointData, {\n category: outOfRangePoint.category,\n categoryIx: categoryIx,\n series: series,\n seriesIx: seriesIx,\n dataItem: outOfRangePoint.item\n });\n }\n },\n _bindPoint: function (series, seriesIx, categoryIx, item) {\n if (!this._bindCache) {\n this._bindCache = [];\n }\n var bindCache = this._bindCache[seriesIx];\n if (!bindCache) {\n bindCache = this._bindCache[seriesIx] = [];\n }\n var data = bindCache[categoryIx];\n if (!data) {\n data = bindCache[categoryIx] = SeriesBinder.current.bindPoint(series, categoryIx, item);\n }\n return data;\n },\n formatPointValue: function (point, format) {\n if (point.value === null) {\n return '';\n }\n return this.chartService.format.auto(format, point.value);\n },\n pointValue: function (data) {\n return data.valueFields.value;\n }\n });\n setDefaultOptions(CategoricalChart, {\n series: [],\n invertAxes: false,\n isStacked: false,\n clip: true\n });\n var PointEventsMixin = {\n click: function (chart, e) {\n return chart.trigger(SERIES_CLICK, this.eventArgs(e));\n },\n hover: function (chart, e) {\n return chart.trigger(SERIES_HOVER, this.eventArgs(e));\n },\n eventArgs: function (e) {\n return {\n value: this.value,\n percentage: this.percentage,\n stackValue: this.stackValue,\n category: this.category,\n series: this.series,\n dataItem: this.dataItem,\n runningTotal: this.runningTotal,\n total: this.total,\n element: eventElement(e),\n originalEvent: e,\n point: this\n };\n }\n };\n var NoteMixin = {\n createNote: function () {\n var options = this.options.notes;\n var text = this.noteText || options.label.text;\n if (options.visible !== false && defined(text) && text !== null) {\n this.note = new dataviz.Note({\n value: this.value,\n text: text,\n dataItem: this.dataItem,\n category: this.category,\n series: this.series\n }, this.options.notes, this.owner.chartService);\n this.append(this.note);\n }\n }\n };\n var ABOVE = 'above';\n var BELOW = 'below';\n var LinePoint = ChartElement.extend({\n init: function (value, options) {\n ChartElement.fn.init.call(this);\n this.value = value;\n this.options = options;\n this.aboveAxis = valueOrDefault(this.options.aboveAxis, true);\n this.tooltipTracking = true;\n },\n render: function () {\n var ref = this.options;\n var markers = ref.markers;\n var labels = ref.labels;\n if (this._rendered) {\n return;\n }\n this._rendered = true;\n if (markers.visible && markers.size) {\n this.marker = this.createMarker();\n this.append(this.marker);\n }\n if (labels.visible) {\n var labelTemplate = getTemplate(labels);\n var labelText = this.value;\n if (labelTemplate) {\n labelText = labelTemplate({\n dataItem: this.dataItem,\n category: this.category,\n value: this.value,\n percentage: this.percentage,\n stackValue: this.stackValue,\n series: this.series\n });\n } else if (labels.format) {\n labelText = this.formatValue(labels.format);\n }\n this.label = new TextBox(labelText, deepExtend({\n align: CENTER,\n vAlign: CENTER,\n margin: {\n left: 5,\n right: 5\n },\n zIndex: valueOrDefault(labels.zIndex, this.series.zIndex)\n }, labels));\n this.append(this.label);\n }\n this.createNote();\n if (this.errorBar) {\n this.append(this.errorBar);\n }\n },\n markerBorder: function () {\n var options = this.options.markers;\n var background = options.background;\n var border = deepExtend({ color: this.color }, options.border);\n if (!defined(border.color)) {\n border.color = new Color(background).brightness(BORDER_BRIGHTNESS).toHex();\n }\n return border;\n },\n createVisual: function () {\n },\n createMarker: function () {\n var options = this.options.markers;\n var marker = new ShapeElement({\n type: options.type,\n width: options.size,\n height: options.size,\n rotation: options.rotation,\n background: options.background,\n border: this.markerBorder(),\n opacity: options.opacity,\n zIndex: valueOrDefault(options.zIndex, this.series.zIndex),\n animation: options.animation,\n visual: options.visual\n }, {\n dataItem: this.dataItem,\n value: this.value,\n series: this.series,\n category: this.category\n });\n return marker;\n },\n markerBox: function () {\n if (!this.marker) {\n this.marker = this.createMarker();\n this.marker.reflow(this._childBox);\n }\n return this.marker.box;\n },\n reflow: function (targetBox) {\n var this$1 = this;\n var ref = this;\n var options = ref.options;\n var aboveAxis = ref.aboveAxis;\n var vertical = options.vertical;\n this.render();\n this.box = targetBox;\n var childBox = targetBox.clone();\n if (vertical) {\n if (aboveAxis) {\n childBox.y1 -= childBox.height();\n } else {\n childBox.y2 += childBox.height();\n }\n } else {\n if (aboveAxis) {\n childBox.x1 += childBox.width();\n } else {\n childBox.x2 -= childBox.width();\n }\n }\n this._childBox = childBox;\n if (this.marker) {\n this.marker.reflow(childBox);\n }\n this.reflowLabel(childBox);\n if (this.errorBars) {\n for (var i = 0; i < this.errorBars.length; i++) {\n this$1.errorBars[i].reflow(childBox);\n }\n }\n if (this.note) {\n var noteTargetBox = this.markerBox();\n if (!(options.markers.visible && options.markers.size)) {\n var center = noteTargetBox.center();\n noteTargetBox = new Box(center.x, center.y, center.x, center.y);\n }\n this.note.reflow(noteTargetBox);\n }\n },\n reflowLabel: function (box) {\n var ref = this;\n var options = ref.options;\n var label = ref.label;\n var anchor = options.labels.position;\n if (label) {\n anchor = anchor === ABOVE ? TOP : anchor;\n anchor = anchor === BELOW ? BOTTOM : anchor;\n label.reflow(box);\n label.box.alignTo(this.markerBox(), anchor);\n label.reflow(label.box);\n }\n },\n createHighlight: function () {\n var markers = this.options.highlight.markers;\n var defaultColor = this.markerBorder().color;\n var options = this.options.markers;\n var size = options.size + (options.border.width || 0) + (markers.border.width || 0);\n var shadow = new ShapeElement({\n type: options.type,\n width: size,\n height: size,\n rotation: options.rotation,\n background: markers.color || defaultColor,\n border: {\n color: markers.border.color,\n width: markers.border.width,\n opacity: valueOrDefault(markers.border.opacity, 1)\n },\n opacity: valueOrDefault(markers.opacity, 1)\n });\n shadow.reflow(this._childBox);\n return shadow.getElement();\n },\n highlightVisual: function () {\n return (this.marker || {}).visual;\n },\n highlightVisualArgs: function () {\n var marker = this.marker;\n var visual, rect;\n if (marker) {\n rect = marker.paddingBox.toRect();\n visual = marker.visual;\n } else {\n var size = this.options.markers.size;\n var halfSize = size / 2;\n var center = this.box.center();\n rect = new geometry.Rect([\n center.x - halfSize,\n center.y - halfSize\n ], [\n size,\n size\n ]);\n }\n return {\n options: this.options,\n rect: rect,\n visual: visual\n };\n },\n tooltipAnchor: function () {\n var markerBox = this.markerBox();\n var clipBox = this.owner.pane.clipBox();\n var showTooltip = !clipBox || clipBox.overlaps(markerBox);\n if (showTooltip) {\n var x = markerBox.x2 + TOOLTIP_OFFSET;\n var horizontalAlign = LEFT;\n var y, verticalAlign;\n if (this.aboveAxis) {\n y = markerBox.y1;\n verticalAlign = BOTTOM;\n } else {\n y = markerBox.y2;\n verticalAlign = TOP;\n }\n return {\n point: new Point(x, y),\n align: {\n horizontal: horizontalAlign,\n vertical: verticalAlign\n }\n };\n }\n },\n formatValue: function (format) {\n return this.owner.formatPointValue(this, format);\n },\n overlapsBox: function (box) {\n var markerBox = this.markerBox();\n return markerBox.overlaps(box);\n }\n });\n LinePoint.prototype.defaults = {\n vertical: true,\n markers: {\n visible: true,\n background: WHITE,\n size: LINE_MARKER_SIZE,\n type: CIRCLE,\n border: { width: 2 },\n opacity: 1\n },\n labels: {\n visible: false,\n position: ABOVE,\n margin: getSpacing(3),\n padding: getSpacing(4),\n animation: {\n type: FADEIN,\n delay: INITIAL_ANIMATION_DURATION\n }\n },\n notes: { label: {} },\n highlight: {\n markers: {\n border: {\n color: '#fff',\n width: 2\n }\n }\n },\n errorBars: { line: { width: 1 } }\n };\n deepExtend(LinePoint.prototype, PointEventsMixin);\n deepExtend(LinePoint.prototype, NoteMixin);\n var LineSegment = ChartElement.extend({\n init: function (linePoints, series, seriesIx) {\n ChartElement.fn.init.call(this);\n this.linePoints = linePoints;\n this.series = series;\n this.seriesIx = seriesIx;\n },\n points: function (visualPoints) {\n var linePoints = this.linePoints.concat(visualPoints || []);\n var points = [];\n for (var i = 0, length = linePoints.length; i < length; i++) {\n if (linePoints[i].visible !== false) {\n points.push(linePoints[i]._childBox.toRect().center());\n }\n }\n return points;\n },\n createVisual: function () {\n var ref = this;\n var options = ref.options;\n var series = ref.series;\n var color = series.color;\n var defaults = series._defaults;\n if (isFunction(color) && defaults) {\n color = defaults.color;\n }\n var line = Path.fromPoints(this.points(), {\n stroke: {\n color: color,\n width: series.width,\n opacity: series.opacity,\n dashType: series.dashType\n },\n zIndex: series.zIndex\n });\n if (options.closed) {\n line.close();\n }\n this.visual = line;\n },\n aliasFor: function (e, coords) {\n return this.parent.getNearestPoint(coords.x, coords.y, this.seriesIx);\n }\n });\n setDefaultOptions(LineSegment, { closed: false });\n var StepLineSegment = LineSegment.extend({\n points: function (visualPoints) {\n var points = this.calculateStepPoints(this.linePoints);\n if (visualPoints && visualPoints.length) {\n points = points.concat(this.calculateStepPoints(visualPoints).reverse());\n }\n return points;\n },\n calculateStepPoints: function (points) {\n var chart = this.parent;\n var plotArea = chart.plotArea;\n var categoryAxis = plotArea.seriesCategoryAxis(this.series);\n var isInterpolate = chart.seriesMissingValues(this.series) === INTERPOLATE;\n var reverse = categoryAxis.options.reverse;\n var vertical = categoryAxis.options.vertical;\n var dir = reverse ? 2 : 1;\n var revDir = reverse ? 1 : 2;\n var length = points.length;\n var result = [];\n for (var i = 1; i < length; i++) {\n var prevPoint = points[i - 1];\n var point = points[i];\n var prevMarkerBoxCenter = prevPoint.markerBox().center();\n var markerBoxCenter = point.markerBox().center();\n if (categoryAxis.options.justified) {\n result.push(new GeometryPoint(prevMarkerBoxCenter.x, prevMarkerBoxCenter.y));\n if (vertical) {\n result.push(new GeometryPoint(prevMarkerBoxCenter.x, markerBoxCenter.y));\n } else {\n result.push(new GeometryPoint(markerBoxCenter.x, prevMarkerBoxCenter.y));\n }\n result.push(new GeometryPoint(markerBoxCenter.x, markerBoxCenter.y));\n } else {\n if (vertical) {\n result.push(new GeometryPoint(prevMarkerBoxCenter.x, prevPoint.box[Y + dir]));\n result.push(new GeometryPoint(prevMarkerBoxCenter.x, prevPoint.box[Y + revDir]));\n if (isInterpolate) {\n result.push(new GeometryPoint(prevMarkerBoxCenter.x, point.box[Y + dir]));\n }\n result.push(new GeometryPoint(markerBoxCenter.x, point.box[Y + dir]));\n result.push(new GeometryPoint(markerBoxCenter.x, point.box[Y + revDir]));\n } else {\n result.push(new GeometryPoint(prevPoint.box[X + dir], prevMarkerBoxCenter.y));\n result.push(new GeometryPoint(prevPoint.box[X + revDir], prevMarkerBoxCenter.y));\n if (isInterpolate) {\n result.push(new GeometryPoint(point.box[X + dir], prevMarkerBoxCenter.y));\n }\n result.push(new GeometryPoint(point.box[X + dir], markerBoxCenter.y));\n result.push(new GeometryPoint(point.box[X + revDir], markerBoxCenter.y));\n }\n }\n }\n return result || [];\n }\n });\n var SplineSegment = LineSegment.extend({\n createVisual: function () {\n var series = this.series;\n var defaults = series._defaults;\n var color = series.color;\n if (isFunction(color) && defaults) {\n color = defaults.color;\n }\n var curveProcessor = new dataviz.CurveProcessor(this.options.closed);\n var segments = curveProcessor.process(this.points());\n var curve = new Path({\n stroke: {\n color: color,\n width: series.width,\n opacity: series.opacity,\n dashType: series.dashType\n },\n zIndex: series.zIndex\n });\n curve.segments.push.apply(curve.segments, segments);\n this.visual = curve;\n }\n });\n var LineChartMixin = {\n renderSegments: function () {\n var this$1 = this;\n var ref = this;\n var options = ref.options;\n var seriesPoints = ref.seriesPoints;\n var series = options.series;\n var seriesCount = seriesPoints.length;\n var lastSegment;\n this._segments = [];\n for (var seriesIx = 0; seriesIx < seriesCount; seriesIx++) {\n var currentSeries = series[seriesIx];\n var sortedPoints = this$1.sortPoints(seriesPoints[seriesIx]);\n var pointCount = sortedPoints.length;\n var linePoints = [];\n for (var pointIx = 0; pointIx < pointCount; pointIx++) {\n var point = sortedPoints[pointIx];\n if (point) {\n linePoints.push(point);\n } else if (this$1.seriesMissingValues(currentSeries) !== INTERPOLATE) {\n if (linePoints.length > 1) {\n lastSegment = this$1.createSegment(linePoints, currentSeries, seriesIx, lastSegment);\n this$1._addSegment(lastSegment);\n }\n linePoints = [];\n }\n }\n if (linePoints.length > 1) {\n lastSegment = this$1.createSegment(linePoints, currentSeries, seriesIx, lastSegment);\n this$1._addSegment(lastSegment);\n }\n }\n this.children.unshift.apply(this.children, this._segments);\n },\n _addSegment: function (segment) {\n this._segments.push(segment);\n segment.parent = this;\n },\n sortPoints: function (points) {\n return points;\n },\n seriesMissingValues: function (series) {\n var missingValues = series.missingValues;\n var assumeZero = !missingValues && this.options.isStacked;\n return assumeZero ? ZERO : missingValues || INTERPOLATE;\n },\n getNearestPoint: function (x, y, seriesIx) {\n var target = new Point(x, y);\n var allPoints = this.seriesPoints[seriesIx];\n var nearestPointDistance = MAX_VALUE;\n var nearestPoint;\n for (var i = 0; i < allPoints.length; i++) {\n var point = allPoints[i];\n if (point && defined(point.value) && point.value !== null && point.visible !== false) {\n var pointBox = point.box;\n var pointDistance = pointBox.center().distanceTo(target);\n if (pointDistance < nearestPointDistance) {\n nearestPoint = point;\n nearestPointDistance = pointDistance;\n }\n }\n }\n return nearestPoint;\n }\n };\n var ClipAnimation = Animation.extend({\n setup: function () {\n this._setEnd(this.options.box.x1);\n },\n step: function (pos) {\n var box = this.options.box;\n this._setEnd(dataviz.interpolateValue(box.x1, box.x2, pos));\n },\n _setEnd: function (x) {\n var element = this.element;\n var segments = element.segments;\n var topRight = segments[1].anchor();\n var bottomRight = segments[2].anchor();\n element.suspend();\n topRight.setX(x);\n element.resume();\n bottomRight.setX(x);\n }\n });\n setDefaultOptions(ClipAnimation, { duration: INITIAL_ANIMATION_DURATION });\n AnimationFactory.current.register('clip', ClipAnimation);\n function anyHasZIndex(elements) {\n for (var idx = 0; idx < elements.length; idx++) {\n if (defined(elements[idx].zIndex)) {\n return true;\n }\n }\n }\n var ClipAnimationMixin = {\n createAnimation: function () {\n var root = this.getRoot();\n if (root && (root.options || {}).transitions !== false) {\n var box = root.box;\n var clipPath = Path.fromRect(box.toRect());\n this.visual.clip(clipPath);\n this.animation = new ClipAnimation(clipPath, { box: box });\n if (anyHasZIndex(this.options.series)) {\n this._setChildrenAnimation(clipPath);\n }\n }\n },\n _setChildrenAnimation: function (clipPath) {\n var points = this.animationPoints();\n for (var idx = 0; idx < points.length; idx++) {\n var point = points[idx];\n if (point && point.visual && defined(point.visual.options.zIndex)) {\n point.visual.clip(clipPath);\n }\n }\n }\n };\n var LineChart = CategoricalChart.extend({\n render: function () {\n CategoricalChart.fn.render.call(this);\n this.updateStackRange();\n this.renderSegments();\n },\n pointType: function () {\n return LinePoint;\n },\n createPoint: function (data, fields) {\n var categoryIx = fields.categoryIx;\n var category = fields.category;\n var series = fields.series;\n var seriesIx = fields.seriesIx;\n var missingValues = this.seriesMissingValues(series);\n var value = data.valueFields.value;\n if (!defined(value) || value === null) {\n if (missingValues === ZERO) {\n value = 0;\n } else {\n return null;\n }\n }\n var pointOptions = this.pointOptions(series, seriesIx);\n pointOptions = this.evalPointOptions(pointOptions, value, category, categoryIx, series, seriesIx);\n var color = data.fields.color || series.color;\n if (isFunction(series.color)) {\n color = pointOptions.color;\n }\n var point = new LinePoint(value, pointOptions);\n point.color = color;\n this.append(point);\n return point;\n },\n plotRange: function (point) {\n var this$1 = this;\n var plotValue = this.plotValue(point);\n if (this.options.isStacked) {\n var categoryIx = point.categoryIx;\n var categoryPoints = this.categoryPoints[categoryIx];\n for (var i = 0; i < categoryPoints.length; i++) {\n var other = categoryPoints[i];\n if (point === other) {\n break;\n }\n plotValue += this$1.plotValue(other);\n if (this$1.options.isStacked100) {\n plotValue = Math.min(plotValue, 1);\n }\n }\n }\n return [\n plotValue,\n plotValue\n ];\n },\n createSegment: function (linePoints, currentSeries, seriesIx) {\n var style = currentSeries.style;\n var pointType;\n if (style === STEP) {\n pointType = StepLineSegment;\n } else if (style === SMOOTH) {\n pointType = SplineSegment;\n } else {\n pointType = LineSegment;\n }\n return new pointType(linePoints, currentSeries, seriesIx);\n },\n animationPoints: function () {\n var points = this.points;\n var result = [];\n for (var idx = 0; idx < points.length; idx++) {\n result.push((points[idx] || {}).marker);\n }\n return result.concat(this._segments);\n }\n });\n deepExtend(LineChart.prototype, LineChartMixin, ClipAnimationMixin);\n var AreaSegmentMixin = {\n points: function () {\n var chart = this.parent;\n var plotArea = chart.plotArea;\n var invertAxes = chart.options.invertAxes;\n var valueAxis = chart.seriesValueAxis(this.series);\n var valueAxisLineBox = valueAxis.lineBox();\n var categoryAxis = plotArea.seriesCategoryAxis(this.series);\n var categoryAxisLineBox = categoryAxis.lineBox();\n var stackPoints = this.stackPoints;\n var points = this._linePoints(stackPoints);\n var pos = invertAxes ? X : Y;\n var end = invertAxes ? categoryAxisLineBox.x1 : categoryAxisLineBox.y1;\n end = limitValue(end, valueAxisLineBox[pos + 1], valueAxisLineBox[pos + 2]);\n if (!this.stackPoints && points.length > 1) {\n var firstPoint = points[0];\n var lastPoint = last(points);\n if (invertAxes) {\n points.unshift(new GeometryPoint(end, firstPoint.y));\n points.push(new GeometryPoint(end, lastPoint.y));\n } else {\n points.unshift(new GeometryPoint(firstPoint.x, end));\n points.push(new GeometryPoint(lastPoint.x, end));\n }\n }\n return points;\n },\n createVisual: function () {\n var series = this.series;\n var defaults = series._defaults;\n var color = series.color;\n if (isFunction(color) && defaults) {\n color = defaults.color;\n }\n this.visual = new Group({ zIndex: series.zIndex });\n this.createArea(color);\n this.createLine(color);\n },\n createLine: function (color) {\n var series = this.series;\n var lineOptions = deepExtend({\n color: color,\n opacity: series.opacity\n }, series.line);\n if (lineOptions.visible !== false && lineOptions.width > 0) {\n var line = Path.fromPoints(this._linePoints(), {\n stroke: {\n color: lineOptions.color,\n width: lineOptions.width,\n opacity: lineOptions.opacity,\n dashType: lineOptions.dashType,\n lineCap: 'butt'\n }\n });\n this.visual.append(line);\n }\n },\n createArea: function (color) {\n var series = this.series;\n var area = Path.fromPoints(this.points(), {\n fill: {\n color: color,\n opacity: series.opacity\n },\n stroke: null\n });\n this.visual.append(area);\n }\n };\n var AreaSegment = LineSegment.extend({\n init: function (linePoints, stackPoints, currentSeries, seriesIx) {\n LineSegment.fn.init.call(this, linePoints, currentSeries, seriesIx);\n this.stackPoints = stackPoints;\n }\n });\n deepExtend(AreaSegment.prototype, AreaSegmentMixin, { _linePoints: LineSegment.prototype.points });\n var StepAreaSegment = StepLineSegment.extend({\n init: function (linePoints, stackPoints, currentSeries, seriesIx) {\n StepLineSegment.fn.init.call(this, linePoints, currentSeries, seriesIx);\n this.stackPoints = stackPoints;\n }\n });\n deepExtend(StepAreaSegment.prototype, AreaSegmentMixin, { _linePoints: StepLineSegment.prototype.points });\n var SplineAreaSegment = AreaSegment.extend({\n init: function (linePoints, prevSegment, isStacked, currentSeries, seriesIx) {\n AreaSegment.fn.init.call(this, linePoints, [], currentSeries, seriesIx);\n this.prevSegment = prevSegment;\n this.isStacked = isStacked;\n },\n strokeSegments: function () {\n var segments = this._strokeSegments;\n if (!segments) {\n var curveProcessor = new dataviz.CurveProcessor(this.options.closed);\n var linePoints = LineSegment.prototype.points.call(this);\n segments = this._strokeSegments = curveProcessor.process(linePoints);\n }\n return segments;\n },\n createVisual: function () {\n var series = this.series;\n var defaults = series._defaults;\n var color = series.color;\n if (isFunction(color) && defaults) {\n color = defaults.color;\n }\n this.visual = new Group({ zIndex: series.zIndex });\n this.createFill({\n fill: {\n color: color,\n opacity: series.opacity\n },\n stroke: null\n });\n this.createStroke({\n stroke: deepExtend({\n color: color,\n opacity: series.opacity,\n lineCap: 'butt'\n }, series.line)\n });\n },\n createFill: function (style) {\n var strokeSegments = this.strokeSegments();\n var fillSegments = strokeSegments.slice(0);\n var prevSegment = this.prevSegment;\n if (this.isStacked && prevSegment) {\n var prevStrokeSegments = prevSegment.strokeSegments();\n var prevAnchor = last(prevStrokeSegments).anchor();\n fillSegments.push(new geometry.Segment(prevAnchor, prevAnchor, last(strokeSegments).anchor()));\n var stackSegments = [];\n for (var idx = prevStrokeSegments.length - 1; idx >= 0; idx--) {\n var segment = prevStrokeSegments[idx];\n stackSegments.push(new geometry.Segment(segment.anchor(), segment.controlOut(), segment.controlIn()));\n }\n append(fillSegments, stackSegments);\n var firstAnchor = fillSegments[0].anchor();\n fillSegments.push(new geometry.Segment(firstAnchor, firstAnchor, last(stackSegments).anchor()));\n }\n var fill = new Path(style);\n fill.segments.push.apply(fill.segments, fillSegments);\n this.closeFill(fill);\n this.visual.append(fill);\n },\n closeFill: function (fillPath) {\n var chart = this.parent;\n var prevSegment = this.prevSegment;\n var plotArea = chart.plotArea;\n var invertAxes = chart.options.invertAxes;\n var valueAxis = chart.seriesValueAxis(this.series);\n var valueAxisLineBox = valueAxis.lineBox();\n var categoryAxis = plotArea.seriesCategoryAxis(this.series);\n var categoryAxisLineBox = categoryAxis.lineBox();\n var pos = invertAxes ? X : Y;\n var segments = this.strokeSegments();\n var firstPoint = segments[0].anchor();\n var lastPoint = last(segments).anchor();\n var end = invertAxes ? categoryAxisLineBox.x1 : categoryAxisLineBox.y1;\n end = limitValue(end, valueAxisLineBox[pos + 1], valueAxisLineBox[pos + 2]);\n if (!(chart.options.isStacked && prevSegment) && segments.length > 1) {\n if (invertAxes) {\n fillPath.lineTo(end, lastPoint.y).lineTo(end, firstPoint.y);\n } else {\n fillPath.lineTo(lastPoint.x, end).lineTo(firstPoint.x, end);\n }\n }\n },\n createStroke: function (style) {\n if (style.stroke.width > 0) {\n var stroke = new Path(style);\n stroke.segments.push.apply(stroke.segments, this.strokeSegments());\n this.visual.append(stroke);\n }\n }\n });\n var AreaChart = LineChart.extend({\n createSegment: function (linePoints, currentSeries, seriesIx, prevSegment) {\n var isStacked = this.options.isStacked;\n var style = (currentSeries.line || {}).style;\n var stackPoints;\n if (isStacked && seriesIx > 0 && prevSegment) {\n var missingValues = this.seriesMissingValues(currentSeries);\n if (missingValues !== 'gap') {\n stackPoints = prevSegment.linePoints;\n } else {\n stackPoints = this._gapStackPoints(linePoints, seriesIx, style);\n }\n if (style !== STEP) {\n stackPoints = stackPoints.slice(0).reverse();\n }\n }\n if (style === SMOOTH) {\n return new SplineAreaSegment(linePoints, prevSegment, isStacked, currentSeries, seriesIx);\n }\n var pointType;\n if (style === STEP) {\n pointType = StepAreaSegment;\n } else {\n pointType = AreaSegment;\n }\n return new pointType(linePoints, stackPoints, currentSeries, seriesIx);\n },\n reflow: function (targetBox) {\n var this$1 = this;\n LineChart.fn.reflow.call(this, targetBox);\n var stackPoints = this._stackPoints;\n if (stackPoints) {\n for (var idx = 0; idx < stackPoints.length; idx++) {\n var stackPoint = stackPoints[idx];\n var pointSlot = this$1.categoryAxis.getSlot(stackPoint.categoryIx);\n stackPoint.reflow(pointSlot);\n }\n }\n },\n _gapStackPoints: function (linePoints, seriesIx, style) {\n var this$1 = this;\n var seriesPoints = this.seriesPoints;\n var startIdx = linePoints[0].categoryIx;\n var length = linePoints.length;\n if (startIdx < 0) {\n startIdx = 0;\n length--;\n }\n var endIdx = startIdx + length;\n var pointOffset = this.seriesOptions[0]._outOfRangeMinPoint ? 1 : 0;\n var stackPoints = [];\n this._stackPoints = this._stackPoints || [];\n for (var categoryIx = startIdx; categoryIx < endIdx; categoryIx++) {\n var pointIx = categoryIx + pointOffset;\n var currentSeriesIx = seriesIx;\n var point = void 0;\n do {\n currentSeriesIx--;\n point = seriesPoints[currentSeriesIx][pointIx];\n } while (currentSeriesIx > 0 && !point);\n if (point) {\n if (style !== STEP && categoryIx > startIdx && !seriesPoints[currentSeriesIx][pointIx - 1]) {\n stackPoints.push(this$1._previousSegmentPoint(categoryIx, pointIx, pointIx - 1, currentSeriesIx));\n }\n stackPoints.push(point);\n if (style !== STEP && categoryIx + 1 < endIdx && !seriesPoints[currentSeriesIx][pointIx + 1]) {\n stackPoints.push(this$1._previousSegmentPoint(categoryIx, pointIx, pointIx + 1, currentSeriesIx));\n }\n } else {\n var gapStackPoint = this$1._createGapStackPoint(categoryIx);\n this$1._stackPoints.push(gapStackPoint);\n stackPoints.push(gapStackPoint);\n }\n }\n return stackPoints;\n },\n _previousSegmentPoint: function (categoryIx, pointIx, segmentIx, seriesIdx) {\n var seriesPoints = this.seriesPoints;\n var index = seriesIdx;\n var point;\n while (index > 0 && !point) {\n index--;\n point = seriesPoints[index][segmentIx];\n }\n if (!point) {\n point = this._createGapStackPoint(categoryIx);\n this._stackPoints.push(point);\n } else {\n point = seriesPoints[index][pointIx];\n }\n return point;\n },\n _createGapStackPoint: function (categoryIx) {\n var options = this.pointOptions({}, 0);\n var point = new LinePoint(0, options);\n point.categoryIx = categoryIx;\n point.series = {};\n return point;\n },\n seriesMissingValues: function (series) {\n return series.missingValues || ZERO;\n }\n });\n var AxisGroupRangeTracker = Class.extend({\n init: function () {\n this.axisRanges = {};\n },\n update: function (chartAxisRanges) {\n var axisRanges = this.axisRanges;\n for (var axisName in chartAxisRanges) {\n var chartRange = chartAxisRanges[axisName];\n var range = axisRanges[axisName];\n axisRanges[axisName] = range = range || {\n min: MAX_VALUE,\n max: MIN_VALUE\n };\n range.min = Math.min(range.min, chartRange.min);\n range.max = Math.max(range.max, chartRange.max);\n }\n },\n reset: function (axisName) {\n this.axisRanges[axisName] = undefined;\n },\n query: function (axisName) {\n return this.axisRanges[axisName];\n }\n });\n var BarLabel = ChartElement.extend({\n init: function (content, options) {\n ChartElement.fn.init.call(this, options);\n this.textBox = new TextBox(content, this.options);\n this.append(this.textBox);\n },\n createVisual: function () {\n this.textBox.options.noclip = this.options.noclip;\n },\n reflow: function (targetBox) {\n var options = this.options;\n var vertical = options.vertical;\n var aboveAxis = options.aboveAxis;\n var text = this.children[0];\n var textOptions = text.options;\n var box = text.box;\n var padding = text.options.padding;\n var labelBox = targetBox;\n textOptions.align = vertical ? CENTER : LEFT;\n textOptions.vAlign = vertical ? TOP : CENTER;\n if (options.position === INSIDE_END) {\n if (vertical) {\n textOptions.vAlign = TOP;\n if (!aboveAxis && box.height() < targetBox.height()) {\n textOptions.vAlign = BOTTOM;\n }\n } else {\n textOptions.align = aboveAxis ? RIGHT : LEFT;\n }\n } else if (options.position === CENTER) {\n textOptions.vAlign = CENTER;\n textOptions.align = CENTER;\n } else if (options.position === INSIDE_BASE) {\n if (vertical) {\n textOptions.vAlign = aboveAxis ? BOTTOM : TOP;\n } else {\n textOptions.align = aboveAxis ? LEFT : RIGHT;\n }\n } else if (options.position === OUTSIDE_END) {\n if (vertical) {\n if (aboveAxis) {\n labelBox = new Box(targetBox.x1, targetBox.y1 - box.height(), targetBox.x2, targetBox.y1);\n } else {\n labelBox = new Box(targetBox.x1, targetBox.y2, targetBox.x2, targetBox.y2 + box.height());\n }\n } else {\n textOptions.align = CENTER;\n if (aboveAxis) {\n labelBox = new Box(targetBox.x2, targetBox.y1, targetBox.x2 + box.width(), targetBox.y2);\n } else {\n labelBox = new Box(targetBox.x1 - box.width(), targetBox.y1, targetBox.x1, targetBox.y2);\n }\n }\n }\n if (!options.rotation) {\n if (vertical) {\n padding.left = padding.right = (labelBox.width() - text.contentBox.width()) / 2;\n } else {\n padding.top = padding.bottom = (labelBox.height() - text.contentBox.height()) / 2;\n }\n }\n text.reflow(labelBox);\n },\n alignToClipBox: function (clipBox) {\n var vertical = this.options.vertical;\n var field = vertical ? Y : X;\n var start = field + '1';\n var end = field + '2';\n var text = this.children[0];\n var parentBox = this.parent.box;\n if (parentBox[start] < clipBox[start] || clipBox[end] < parentBox[end]) {\n var targetBox = text.paddingBox.clone();\n targetBox[start] = Math.max(parentBox[start], clipBox[start]);\n targetBox[end] = Math.min(parentBox[end], clipBox[end]);\n this.reflow(targetBox);\n }\n }\n });\n setDefaultOptions(BarLabel, {\n position: OUTSIDE_END,\n margin: getSpacing(3),\n padding: getSpacing(4),\n color: BLACK,\n background: '',\n border: {\n width: 1,\n color: ''\n },\n aboveAxis: true,\n vertical: false,\n animation: {\n type: FADEIN,\n delay: INITIAL_ANIMATION_DURATION\n },\n zIndex: 2\n });\n function hasGradientOverlay(options) {\n var overlay = options.overlay;\n return overlay && overlay.gradient && overlay.gradient !== 'none';\n }\n var BAR_ALIGN_MIN_WIDTH = 6;\n var Bar = ChartElement.extend({\n init: function (value, options) {\n ChartElement.fn.init.call(this);\n this.options = options;\n this.color = options.color || WHITE;\n this.aboveAxis = valueOrDefault(this.options.aboveAxis, true);\n this.value = value;\n },\n render: function () {\n if (this._rendered) {\n return;\n }\n this._rendered = true;\n this.createLabel();\n this.createNote();\n if (this.errorBar) {\n this.append(this.errorBar);\n }\n },\n createLabel: function () {\n var options = this.options;\n var labels = options.labels;\n if (labels.visible) {\n var labelTemplate = getTemplate(labels);\n var labelText;\n if (labelTemplate) {\n labelText = labelTemplate({\n dataItem: this.dataItem,\n category: this.category,\n value: this.value,\n percentage: this.percentage,\n stackValue: this.stackValue,\n runningTotal: this.runningTotal,\n total: this.total,\n series: this.series\n });\n } else {\n labelText = this.formatValue(labels.format);\n }\n this.label = new BarLabel(labelText, deepExtend({ vertical: options.vertical }, labels));\n this.append(this.label);\n }\n },\n formatValue: function (format) {\n return this.owner.formatPointValue(this, format);\n },\n reflow: function (targetBox) {\n var this$1 = this;\n this.render();\n var label = this.label;\n this.box = targetBox;\n if (label) {\n label.options.aboveAxis = this.aboveAxis;\n label.reflow(targetBox);\n }\n if (this.note) {\n this.note.reflow(targetBox);\n }\n if (this.errorBars) {\n for (var i = 0; i < this.errorBars.length; i++) {\n this$1.errorBars[i].reflow(targetBox);\n }\n }\n },\n createVisual: function () {\n var this$1 = this;\n var ref = this;\n var box = ref.box;\n var options = ref.options;\n var customVisual = options.visual;\n if (this.visible !== false) {\n ChartElement.fn.createVisual.call(this);\n if (customVisual) {\n var visual = this.rectVisual = customVisual({\n category: this.category,\n dataItem: this.dataItem,\n value: this.value,\n sender: this.getSender(),\n series: this.series,\n percentage: this.percentage,\n stackValue: this.stackValue,\n runningTotal: this.runningTotal,\n total: this.total,\n rect: box.toRect(),\n createVisual: function () {\n var group = new Group();\n this$1.createRect(group);\n return group;\n },\n options: options\n });\n if (visual) {\n this.visual.append(visual);\n }\n } else if (box.width() > 0 && box.height() > 0) {\n this.createRect(this.visual);\n }\n }\n },\n createRect: function (visual) {\n var options = this.options;\n var border = options.border;\n var strokeOpacity = defined(border.opacity) ? border.opacity : options.opacity;\n var rect = this.box.toRect();\n rect.size.width = Math.round(rect.size.width);\n var path = this.rectVisual = Path.fromRect(rect, {\n fill: {\n color: this.color,\n opacity: options.opacity\n },\n stroke: {\n color: this.getBorderColor(),\n width: border.width,\n opacity: strokeOpacity,\n dashType: border.dashType\n }\n });\n var width = this.box.width();\n var height = this.box.height();\n var size = options.vertical ? width : height;\n if (size > BAR_ALIGN_MIN_WIDTH) {\n alignPathToPixel(path);\n if (width < 1 || height < 1) {\n path.options.stroke.lineJoin = 'round';\n }\n }\n visual.append(path);\n if (hasGradientOverlay(options)) {\n var overlay = this.createGradientOverlay(path, { baseColor: this.color }, deepExtend({\n end: !options.vertical ? [\n 0,\n 1\n ] : undefined\n }, options.overlay));\n visual.append(overlay);\n }\n },\n createHighlight: function (style) {\n var highlight = Path.fromRect(this.box.toRect(), style);\n return alignPathToPixel(highlight);\n },\n highlightVisual: function () {\n return this.rectVisual;\n },\n highlightVisualArgs: function () {\n return {\n options: this.options,\n rect: this.box.toRect(),\n visual: this.rectVisual\n };\n },\n getBorderColor: function () {\n var color = this.color;\n var border = this.options.border;\n var brightness = border._brightness || BORDER_BRIGHTNESS;\n var borderColor = border.color;\n if (!defined(borderColor)) {\n borderColor = new Color(color).brightness(brightness).toHex();\n }\n return borderColor;\n },\n tooltipAnchor: function () {\n var ref = this;\n var options = ref.options;\n var box = ref.box;\n var aboveAxis = ref.aboveAxis;\n var clipBox = this.owner.pane.clipBox() || box;\n var horizontalAlign = LEFT;\n var verticalAlign = TOP;\n var x, y;\n if (options.vertical) {\n x = Math.min(box.x2, clipBox.x2) + TOOLTIP_OFFSET;\n if (aboveAxis) {\n y = Math.max(box.y1, clipBox.y1);\n } else {\n y = Math.min(box.y2, clipBox.y2);\n verticalAlign = BOTTOM;\n }\n } else {\n var x1 = Math.max(box.x1, clipBox.x1);\n var x2 = Math.min(box.x2, clipBox.x2);\n if (options.isStacked) {\n verticalAlign = BOTTOM;\n if (aboveAxis) {\n horizontalAlign = RIGHT;\n x = x2;\n } else {\n x = x1;\n }\n y = Math.max(box.y1, clipBox.y1) - TOOLTIP_OFFSET;\n } else {\n if (aboveAxis) {\n x = x2 + TOOLTIP_OFFSET;\n } else {\n x = x1 - TOOLTIP_OFFSET;\n horizontalAlign = RIGHT;\n }\n y = Math.max(box.y1, clipBox.y1);\n }\n }\n return {\n point: new Point(x, y),\n align: {\n horizontal: horizontalAlign,\n vertical: verticalAlign\n }\n };\n },\n overlapsBox: function (box) {\n return this.box.overlaps(box);\n }\n });\n deepExtend(Bar.prototype, PointEventsMixin);\n deepExtend(Bar.prototype, NoteMixin);\n Bar.prototype.defaults = {\n border: { width: 1 },\n vertical: true,\n overlay: { gradient: 'glass' },\n labels: {\n visible: false,\n format: '{0}'\n },\n opacity: 1,\n notes: { label: {} }\n };\n var ClusterLayout = ChartElement.extend({\n reflow: function (box) {\n var ref = this.options;\n var vertical = ref.vertical;\n var gap = ref.gap;\n var spacing = ref.spacing;\n var children = this.children;\n var count = children.length;\n var axis = vertical ? Y : X;\n var slots = count + gap + spacing * (count - 1);\n var slotSize = (vertical ? box.height() : box.width()) / slots;\n var position = box[axis + 1] + slotSize * (gap / 2);\n for (var i = 0; i < count; i++) {\n var childBox = (children[i].box || box).clone();\n childBox[axis + 1] = position;\n childBox[axis + 2] = position + slotSize;\n children[i].reflow(childBox);\n if (i < count - 1) {\n position += slotSize * spacing;\n }\n position += slotSize;\n }\n }\n });\n setDefaultOptions(ClusterLayout, {\n vertical: false,\n gap: 0,\n spacing: 0\n });\n var StackWrap = ChartElement.extend({\n reflow: function (targetBox) {\n var this$1 = this;\n var positionAxis = this.options.vertical ? X : Y;\n var children = this.children;\n var childrenCount = children.length;\n var box = this.box = new Box();\n for (var i = 0; i < childrenCount; i++) {\n var currentChild = children[i];\n if (currentChild.visible !== false) {\n var childBox = currentChild.box.clone();\n childBox.snapTo(targetBox, positionAxis);\n if (i === 0) {\n box = this$1.box = childBox.clone();\n }\n currentChild.reflow(childBox);\n box.wrap(childBox);\n }\n }\n }\n });\n setDefaultOptions(StackWrap, { vertical: true });\n var BarChart = CategoricalChart.extend({\n render: function () {\n CategoricalChart.fn.render.call(this);\n this.updateStackRange();\n },\n pointType: function () {\n return Bar;\n },\n clusterType: function () {\n return ClusterLayout;\n },\n stackType: function () {\n return StackWrap;\n },\n stackLimits: function (axisName, stackName) {\n var limits = CategoricalChart.fn.stackLimits.call(this, axisName, stackName);\n return limits;\n },\n createPoint: function (data, fields) {\n var categoryIx = fields.categoryIx;\n var category = fields.category;\n var series = fields.series;\n var seriesIx = fields.seriesIx;\n var ref = this;\n var options = ref.options;\n var children = ref.children;\n var isStacked = options.isStacked;\n var value = this.pointValue(data);\n var pointOptions = this.pointOptions(series, seriesIx);\n var labelOptions = pointOptions.labels;\n if (isStacked) {\n if (labelOptions.position === OUTSIDE_END) {\n labelOptions.position = INSIDE_END;\n }\n }\n pointOptions.isStacked = isStacked;\n var color = data.fields.color || series.color;\n if (value < 0 && pointOptions.negativeColor) {\n color = pointOptions.negativeColor;\n }\n pointOptions = this.evalPointOptions(pointOptions, value, category, categoryIx, series, seriesIx);\n if (isFunction(series.color)) {\n color = pointOptions.color;\n }\n var pointType = this.pointType();\n var point = new pointType(value, pointOptions);\n point.color = color;\n var cluster = children[categoryIx];\n if (!cluster) {\n var clusterType = this.clusterType();\n cluster = new clusterType({\n vertical: options.invertAxes,\n gap: options.gap,\n spacing: options.spacing\n });\n this.append(cluster);\n }\n if (isStacked) {\n var stackWrap = this.getStackWrap(series, cluster);\n stackWrap.append(point);\n } else {\n cluster.append(point);\n }\n return point;\n },\n getStackWrap: function (series, cluster) {\n var stack = series.stack;\n var stackGroup = stack ? stack.group || stack : stack;\n var wraps = cluster.children;\n var stackWrap;\n if (typeof stackGroup === datavizConstants.STRING) {\n for (var i = 0; i < wraps.length; i++) {\n if (wraps[i]._stackGroup === stackGroup) {\n stackWrap = wraps[i];\n break;\n }\n }\n } else {\n stackWrap = wraps[0];\n }\n if (!stackWrap) {\n var stackType = this.stackType();\n stackWrap = new stackType({ vertical: !this.options.invertAxes });\n stackWrap._stackGroup = stackGroup;\n cluster.append(stackWrap);\n }\n return stackWrap;\n },\n categorySlot: function (categoryAxis, categoryIx, valueAxis) {\n var options = this.options;\n var categorySlot = categoryAxis.getSlot(categoryIx);\n var startValue = valueAxis.startValue();\n if (options.isStacked) {\n var zeroSlot = valueAxis.getSlot(startValue, startValue, true);\n var stackAxis = options.invertAxes ? X : Y;\n categorySlot[stackAxis + 1] = categorySlot[stackAxis + 2] = zeroSlot[stackAxis + 1];\n }\n return categorySlot;\n },\n reflowCategories: function (categorySlots) {\n var children = this.children;\n var childrenLength = children.length;\n for (var i = 0; i < childrenLength; i++) {\n children[i].reflow(categorySlots[i]);\n }\n },\n createAnimation: function () {\n this._setAnimationOptions();\n CategoricalChart.fn.createAnimation.call(this);\n if (anyHasZIndex(this.options.series)) {\n this._setChildrenAnimation();\n }\n },\n _setChildrenAnimation: function () {\n var this$1 = this;\n var points = this.points;\n for (var idx = 0; idx < points.length; idx++) {\n var point = points[idx];\n var pointVisual = point.visual;\n if (pointVisual && defined(pointVisual.options.zIndex)) {\n point.options.animation = this$1.options.animation;\n point.createAnimation();\n }\n }\n },\n _setAnimationOptions: function () {\n var options = this.options;\n var animation = options.animation || {};\n var origin;\n if (options.isStacked) {\n var valueAxis = this.seriesValueAxis(options.series[0]);\n origin = valueAxis.getSlot(valueAxis.startValue());\n } else {\n origin = this.categoryAxis.getSlot(0);\n }\n animation.origin = new GeometryPoint(origin.x1, origin.y1);\n animation.vertical = !options.invertAxes;\n }\n });\n setDefaultOptions(BarChart, { animation: { type: BAR } });\n var Candlestick = ChartElement.extend({\n init: function (value, options) {\n ChartElement.fn.init.call(this, options);\n this.value = value;\n },\n reflow: function (box) {\n var ref = this;\n var options = ref.options;\n var value = ref.value;\n var chart = ref.owner;\n var valueAxis = chart.seriesValueAxis(options);\n var ocSlot = valueAxis.getSlot(value.open, value.close);\n var lhSlot = valueAxis.getSlot(value.low, value.high);\n ocSlot.x1 = lhSlot.x1 = box.x1;\n ocSlot.x2 = lhSlot.x2 = box.x2;\n this.realBody = ocSlot;\n var mid = lhSlot.center().x;\n var points = [];\n points.push([\n [\n mid,\n lhSlot.y1\n ],\n [\n mid,\n ocSlot.y1\n ]\n ]);\n points.push([\n [\n mid,\n ocSlot.y2\n ],\n [\n mid,\n lhSlot.y2\n ]\n ]);\n this.lines = points;\n this.box = lhSlot.clone().wrap(ocSlot);\n if (!this._rendered) {\n this._rendered = true;\n this.createNote();\n }\n this.reflowNote();\n },\n reflowNote: function () {\n if (this.note) {\n this.note.reflow(this.box);\n }\n },\n createVisual: function () {\n ChartElement.fn.createVisual.call(this);\n this._mainVisual = this.mainVisual(this.options);\n this.visual.append(this._mainVisual);\n this.createOverlay();\n },\n mainVisual: function (options) {\n var group = new Group();\n this.createBody(group, options);\n this.createLines(group, options);\n return group;\n },\n createBody: function (container, options) {\n var body = Path.fromRect(this.realBody.toRect(), {\n fill: {\n color: this.color,\n opacity: options.opacity\n },\n stroke: null\n });\n if (options.border.width > 0) {\n body.options.set('stroke', {\n color: this.getBorderColor(),\n width: options.border.width,\n dashType: options.border.dashType,\n opacity: valueOrDefault(options.border.opacity, options.opacity)\n });\n }\n alignPathToPixel(body);\n container.append(body);\n if (hasGradientOverlay(options)) {\n container.append(this.createGradientOverlay(body, { baseColor: this.color }, deepExtend({\n end: !options.vertical ? [\n 0,\n 1\n ] : undefined\n }, options.overlay)));\n }\n },\n createLines: function (container, options) {\n this.drawLines(container, options, this.lines, options.line);\n },\n drawLines: function (container, options, lines, lineOptions) {\n if (!lines) {\n return;\n }\n var lineStyle = {\n stroke: {\n color: lineOptions.color || this.color,\n opacity: valueOrDefault(lineOptions.opacity, options.opacity),\n width: lineOptions.width,\n dashType: lineOptions.dashType,\n lineCap: 'butt'\n }\n };\n for (var i = 0; i < lines.length; i++) {\n var line = Path.fromPoints(lines[i], lineStyle);\n alignPathToPixel(line);\n container.append(line);\n }\n },\n getBorderColor: function () {\n var border = this.options.border;\n var borderColor = border.color;\n if (!defined(borderColor)) {\n borderColor = new Color(this.color).brightness(border._brightness).toHex();\n }\n return borderColor;\n },\n createOverlay: function () {\n var overlay = Path.fromRect(this.box.toRect(), {\n fill: {\n color: WHITE,\n opacity: 0\n },\n stroke: null\n });\n this.visual.append(overlay);\n },\n createHighlight: function () {\n var highlight = this.options.highlight;\n var normalColor = this.color;\n this.color = highlight.color || this.color;\n var overlay = this.mainVisual(deepExtend({}, this.options, { line: { color: this.getBorderColor() } }, highlight));\n this.color = normalColor;\n return overlay;\n },\n highlightVisual: function () {\n return this._mainVisual;\n },\n highlightVisualArgs: function () {\n return {\n options: this.options,\n rect: this.box.toRect(),\n visual: this._mainVisual\n };\n },\n tooltipAnchor: function () {\n var box = this.box;\n var clipBox = this.owner.pane.clipBox() || box;\n return {\n point: new Point(box.x2 + TOOLTIP_OFFSET, Math.max(box.y1, clipBox.y1) + TOOLTIP_OFFSET),\n align: {\n horizontal: LEFT,\n vertical: TOP\n }\n };\n },\n formatValue: function (format) {\n return this.owner.formatPointValue(this, format);\n },\n overlapsBox: function (box) {\n return this.box.overlaps(box);\n }\n });\n setDefaultOptions(Candlestick, {\n vertical: true,\n border: { _brightness: 0.8 },\n line: { width: 2 },\n overlay: { gradient: 'glass' },\n tooltip: { format: '' + '' + '' + '' + '' + '' + '
    {4:d}
    Open:{0:C}
    High:{1:C}
    Low:{2:C}
    Close:{3:C}
    ' },\n highlight: {\n opacity: 1,\n border: {\n width: 1,\n opacity: 1\n },\n line: {\n width: 1,\n opacity: 1\n }\n },\n notes: {\n visible: true,\n label: {}\n }\n });\n deepExtend(Candlestick.prototype, PointEventsMixin);\n deepExtend(Candlestick.prototype, NoteMixin);\n function areNumbers(values) {\n return countNumbers(values) === values.length;\n }\n var CandlestickChart = CategoricalChart.extend({\n reflowCategories: function (categorySlots) {\n var children = this.children;\n var childrenLength = children.length;\n for (var i = 0; i < childrenLength; i++) {\n children[i].reflow(categorySlots[i]);\n }\n },\n addValue: function (data, fields) {\n var categoryIx = fields.categoryIx;\n var category = fields.category;\n var series = fields.series;\n var seriesIx = fields.seriesIx;\n var ref = this;\n var children = ref.children;\n var options = ref.options;\n var value = data.valueFields;\n var valueParts = this.splitValue(value);\n var hasValue = areNumbers(valueParts);\n var dataItem = series.data[categoryIx];\n var categoryPoints = this.categoryPoints[categoryIx];\n var point;\n if (!categoryPoints) {\n this.categoryPoints[categoryIx] = categoryPoints = [];\n }\n if (hasValue) {\n point = this.createPoint(data, fields);\n }\n var cluster = children[categoryIx];\n if (!cluster) {\n cluster = new ClusterLayout({\n vertical: options.invertAxes,\n gap: options.gap,\n spacing: options.spacing\n });\n this.append(cluster);\n }\n if (point) {\n this.updateRange(value, fields);\n cluster.append(point);\n point.categoryIx = categoryIx;\n point.category = category;\n point.series = series;\n point.seriesIx = seriesIx;\n point.owner = this;\n point.dataItem = dataItem;\n point.noteText = data.fields.noteText;\n }\n this.points.push(point);\n categoryPoints.push(point);\n },\n pointType: function () {\n return Candlestick;\n },\n createPoint: function (data, fields) {\n var categoryIx = fields.categoryIx;\n var category = fields.category;\n var series = fields.series;\n var seriesIx = fields.seriesIx;\n var pointType = this.pointType();\n var value = data.valueFields;\n var pointOptions = deepExtend({}, series);\n var color = data.fields.color || series.color;\n pointOptions = this.evalPointOptions(pointOptions, value, category, categoryIx, series, seriesIx);\n if (series.type === CANDLESTICK) {\n if (value.open > value.close) {\n color = data.fields.downColor || series.downColor || series.color;\n }\n }\n if (isFunction(series.color)) {\n color = pointOptions.color;\n }\n pointOptions.vertical = !this.options.invertAxes;\n var point = new pointType(value, pointOptions);\n point.color = color;\n return point;\n },\n splitValue: function (value) {\n return [\n value.low,\n value.open,\n value.close,\n value.high\n ];\n },\n updateRange: function (value, fields) {\n var axisName = fields.series.axis;\n var parts = this.splitValue(value);\n var axisRange = this.valueAxisRanges[axisName];\n axisRange = this.valueAxisRanges[axisName] = axisRange || {\n min: MAX_VALUE,\n max: MIN_VALUE\n };\n axisRange = this.valueAxisRanges[axisName] = {\n min: Math.min.apply(Math, parts.concat([axisRange.min])),\n max: Math.max.apply(Math, parts.concat([axisRange.max]))\n };\n },\n formatPointValue: function (point, format) {\n var value = point.value;\n return this.chartService.format.auto(format, value.open, value.high, value.low, value.close, point.category);\n },\n animationPoints: function () {\n return this.points;\n }\n });\n deepExtend(CandlestickChart.prototype, ClipAnimationMixin);\n var BoxPlot = Candlestick.extend({\n init: function (value, options) {\n Candlestick.fn.init.call(this, value, options);\n this.createNote();\n },\n reflow: function (box) {\n var ref = this;\n var options = ref.options;\n var value = ref.value;\n var chart = ref.owner;\n var valueAxis = chart.seriesValueAxis(options);\n var whiskerSlot, boxSlot;\n this.boxSlot = boxSlot = valueAxis.getSlot(value.q1, value.q3);\n this.realBody = boxSlot;\n this.reflowBoxSlot(box);\n this.whiskerSlot = whiskerSlot = valueAxis.getSlot(value.lower, value.upper);\n this.reflowWhiskerSlot(box);\n var medianSlot = valueAxis.getSlot(value.median);\n if (value.mean) {\n var meanSlot = valueAxis.getSlot(value.mean);\n this.meanPoints = this.calcMeanPoints(box, meanSlot);\n }\n this.whiskerPoints = this.calcWhiskerPoints(boxSlot, whiskerSlot);\n this.medianPoints = this.calcMedianPoints(box, medianSlot);\n this.box = whiskerSlot.clone().wrap(boxSlot);\n this.reflowNote();\n },\n reflowBoxSlot: function (box) {\n this.boxSlot.x1 = box.x1;\n this.boxSlot.x2 = box.x2;\n },\n reflowWhiskerSlot: function (box) {\n this.whiskerSlot.x1 = box.x1;\n this.whiskerSlot.x2 = box.x2;\n },\n calcMeanPoints: function (box, meanSlot) {\n return [[\n [\n box.x1,\n meanSlot.y1\n ],\n [\n box.x2,\n meanSlot.y1\n ]\n ]];\n },\n calcWhiskerPoints: function (boxSlot, whiskerSlot) {\n var mid = whiskerSlot.center().x;\n return [\n [\n [\n mid - 5,\n whiskerSlot.y1\n ],\n [\n mid + 5,\n whiskerSlot.y1\n ],\n [\n mid,\n whiskerSlot.y1\n ],\n [\n mid,\n boxSlot.y1\n ]\n ],\n [\n [\n mid - 5,\n whiskerSlot.y2\n ],\n [\n mid + 5,\n whiskerSlot.y2\n ],\n [\n mid,\n whiskerSlot.y2\n ],\n [\n mid,\n boxSlot.y2\n ]\n ]\n ];\n },\n calcMedianPoints: function (box, medianSlot) {\n return [[\n [\n box.x1,\n medianSlot.y1\n ],\n [\n box.x2,\n medianSlot.y1\n ]\n ]];\n },\n renderOutliers: function (options) {\n var this$1 = this;\n var value = this.value;\n var outliers = value.outliers || [];\n var outerFence = Math.abs(value.q3 - value.q1) * 3;\n var elements = [];\n var markers = options.markers || {};\n for (var i = 0; i < outliers.length; i++) {\n var outlierValue = outliers[i];\n if (outlierValue < value.q3 + outerFence && outlierValue > value.q1 - outerFence) {\n markers = options.outliers;\n } else {\n markers = options.extremes;\n }\n var markersBorder = deepExtend({}, markers.border);\n if (!defined(markersBorder.color)) {\n if (defined(this$1.color)) {\n markersBorder.color = this$1.color;\n } else {\n markersBorder.color = new Color(markers.background).brightness(BORDER_BRIGHTNESS).toHex();\n }\n }\n var shape = new ShapeElement({\n type: markers.type,\n width: markers.size,\n height: markers.size,\n rotation: markers.rotation,\n background: markers.background,\n border: markersBorder,\n opacity: markers.opacity\n });\n shape.value = outlierValue;\n elements.push(shape);\n }\n this.reflowOutliers(elements);\n return elements;\n },\n reflowOutliers: function (outliers) {\n var this$1 = this;\n var valueAxis = this.owner.seriesValueAxis(this.options);\n var center = this.box.center();\n for (var i = 0; i < outliers.length; i++) {\n var outlierValue = outliers[i].value;\n var markerBox = valueAxis.getSlot(outlierValue);\n if (this$1.options.vertical) {\n markerBox.move(center.x);\n } else {\n markerBox.move(undefined, center.y);\n }\n this$1.box = this$1.box.wrap(markerBox);\n outliers[i].reflow(markerBox);\n }\n },\n mainVisual: function (options) {\n var group = Candlestick.fn.mainVisual.call(this, options);\n var outliers = this.renderOutliers(options);\n for (var i = 0; i < outliers.length; i++) {\n var element = outliers[i].getElement();\n if (element) {\n group.append(element);\n }\n }\n return group;\n },\n createLines: function (container, options) {\n this.drawLines(container, options, this.whiskerPoints, options.whiskers);\n this.drawLines(container, options, this.medianPoints, options.median);\n this.drawLines(container, options, this.meanPoints, options.mean);\n },\n getBorderColor: function () {\n if (this.color) {\n return this.color;\n }\n return Candlestick.fn.getBorderColor.call(this);\n }\n });\n setDefaultOptions(BoxPlot, {\n border: { _brightness: 0.8 },\n line: { width: 2 },\n median: { color: '#f6f6f6' },\n mean: {\n width: 2,\n dashType: 'dash',\n color: '#f6f6f6'\n },\n overlay: { gradient: 'glass' },\n tooltip: { format: '' + '' + '' + '' + '' + '' + '' + '' + '
    {6:d}
    Lower:{0:C}
    Q1:{1:C}
    Median:{2:C}
    Mean:{5:C}
    Q3:{3:C}
    Upper:{4:C}
    ' },\n highlight: {\n opacity: 1,\n border: {\n width: 1,\n opacity: 1\n },\n line: {\n width: 1,\n opacity: 1\n }\n },\n notes: {\n visible: true,\n label: {}\n },\n outliers: {\n visible: true,\n size: LINE_MARKER_SIZE,\n type: datavizConstants.CROSS,\n background: WHITE,\n border: {\n width: 2,\n opacity: 1\n },\n opacity: 0\n },\n extremes: {\n visible: true,\n size: LINE_MARKER_SIZE,\n type: CIRCLE,\n background: WHITE,\n border: {\n width: 2,\n opacity: 1\n },\n opacity: 0\n }\n });\n deepExtend(BoxPlot.prototype, PointEventsMixin);\n var VerticalBoxPlot = BoxPlot.extend({\n reflowBoxSlot: function (box) {\n this.boxSlot.y1 = box.y1;\n this.boxSlot.y2 = box.y2;\n },\n reflowWhiskerSlot: function (box) {\n this.whiskerSlot.y1 = box.y1;\n this.whiskerSlot.y2 = box.y2;\n },\n calcMeanPoints: function (box, meanSlot) {\n return [[\n [\n meanSlot.x1,\n box.y1\n ],\n [\n meanSlot.x1,\n box.y2\n ]\n ]];\n },\n calcWhiskerPoints: function (boxSlot, whiskerSlot) {\n var mid = whiskerSlot.center().y;\n return [\n [\n [\n whiskerSlot.x1,\n mid - 5\n ],\n [\n whiskerSlot.x1,\n mid + 5\n ],\n [\n whiskerSlot.x1,\n mid\n ],\n [\n boxSlot.x1,\n mid\n ]\n ],\n [\n [\n whiskerSlot.x2,\n mid - 5\n ],\n [\n whiskerSlot.x2,\n mid + 5\n ],\n [\n whiskerSlot.x2,\n mid\n ],\n [\n boxSlot.x2,\n mid\n ]\n ]\n ];\n },\n calcMedianPoints: function (box, medianSlot) {\n return [[\n [\n medianSlot.x1,\n box.y1\n ],\n [\n medianSlot.x1,\n box.y2\n ]\n ]];\n }\n });\n var BoxPlotChart = CandlestickChart.extend({\n addValue: function (data, fields) {\n var categoryIx = fields.categoryIx;\n var category = fields.category;\n var series = fields.series;\n var seriesIx = fields.seriesIx;\n var ref = this;\n var children = ref.children;\n var options = ref.options;\n var value = data.valueFields;\n var valueParts = this.splitValue(value);\n var hasValue = areNumbers(valueParts);\n var dataItem = series.data[categoryIx];\n var categoryPoints = this.categoryPoints[categoryIx];\n var point;\n if (!categoryPoints) {\n this.categoryPoints[categoryIx] = categoryPoints = [];\n }\n if (hasValue) {\n point = this.createPoint(data, fields);\n }\n var cluster = children[categoryIx];\n if (!cluster) {\n cluster = new ClusterLayout({\n vertical: options.invertAxes,\n gap: options.gap,\n spacing: options.spacing\n });\n this.append(cluster);\n }\n if (point) {\n this.updateRange(value, fields);\n cluster.append(point);\n point.categoryIx = categoryIx;\n point.category = category;\n point.series = series;\n point.seriesIx = seriesIx;\n point.owner = this;\n point.dataItem = dataItem;\n }\n this.points.push(point);\n categoryPoints.push(point);\n },\n pointType: function () {\n if (this.options.invertAxes) {\n return VerticalBoxPlot;\n }\n return BoxPlot;\n },\n splitValue: function (value) {\n return [\n value.lower,\n value.q1,\n value.median,\n value.q3,\n value.upper\n ];\n },\n updateRange: function (value, fields) {\n var axisName = fields.series.axis;\n var axisRange = this.valueAxisRanges[axisName];\n var parts = this.splitValue(value).concat(this.filterOutliers(value.outliers));\n if (defined(value.mean)) {\n parts = parts.concat(value.mean);\n }\n axisRange = this.valueAxisRanges[axisName] = axisRange || {\n min: MAX_VALUE,\n max: MIN_VALUE\n };\n axisRange = this.valueAxisRanges[axisName] = {\n min: Math.min.apply(Math, parts.concat([axisRange.min])),\n max: Math.max.apply(Math, parts.concat([axisRange.max]))\n };\n },\n formatPointValue: function (point, format) {\n var value = point.value;\n return this.chartService.format.auto(format, value.lower, value.q1, value.median, value.q3, value.upper, value.mean, point.category);\n },\n filterOutliers: function (items) {\n var length = (items || []).length;\n var result = [];\n for (var i = 0; i < length; i++) {\n var item = items[i];\n if (defined(item) && item !== null) {\n result.push(item);\n }\n }\n return result;\n }\n });\n var ScatterErrorBar = ErrorBarBase.extend({\n getAxis: function () {\n var axes = this.chart.seriesAxes(this.series);\n var axis = this.isVertical ? axes.y : axes.x;\n return axis;\n }\n });\n function hasValue(value) {\n return defined(value) && value !== null;\n }\n var ScatterChart = ChartElement.extend({\n init: function (plotArea, options) {\n ChartElement.fn.init.call(this, options);\n this.plotArea = plotArea;\n this.chartService = plotArea.chartService;\n this._initFields();\n this.render();\n },\n _initFields: function () {\n this.xAxisRanges = {};\n this.yAxisRanges = {};\n this.points = [];\n this.seriesPoints = [];\n this.seriesOptions = [];\n this._evalSeries = [];\n },\n render: function () {\n this.traverseDataPoints(this.addValue.bind(this));\n },\n addErrorBar: function (point, field, fields) {\n var value = point.value[field];\n var valueErrorField = field + 'Value';\n var lowField = field + 'ErrorLow';\n var highField = field + 'ErrorHigh';\n var seriesIx = fields.seriesIx;\n var series = fields.series;\n var errorBars = point.options.errorBars;\n var lowValue = fields[lowField];\n var highValue = fields[highField];\n if (isNumber(value)) {\n var errorRange;\n if (isNumber(lowValue) && isNumber(highValue)) {\n errorRange = {\n low: lowValue,\n high: highValue\n };\n }\n if (errorBars && defined(errorBars[valueErrorField])) {\n this.seriesErrorRanges = this.seriesErrorRanges || {\n x: [],\n y: []\n };\n this.seriesErrorRanges[field][seriesIx] = this.seriesErrorRanges[field][seriesIx] || new ErrorRangeCalculator(errorBars[valueErrorField], series, field);\n errorRange = this.seriesErrorRanges[field][seriesIx].getErrorRange(value, errorBars[valueErrorField]);\n }\n if (errorRange) {\n this.addPointErrorBar(errorRange, point, field);\n }\n }\n },\n addPointErrorBar: function (errorRange, point, field) {\n var low = errorRange.low;\n var high = errorRange.high;\n var series = point.series;\n var options = point.options.errorBars;\n var isVertical = field === Y;\n var item = {};\n point[field + 'Low'] = low;\n point[field + 'High'] = high;\n point.errorBars = point.errorBars || [];\n var errorBar = new ScatterErrorBar(low, high, isVertical, this, series, options);\n point.errorBars.push(errorBar);\n point.append(errorBar);\n item[field] = low;\n this.updateRange(item, series);\n item[field] = high;\n this.updateRange(item, series);\n },\n addValue: function (value, fields) {\n var x = value.x;\n var y = value.y;\n var seriesIx = fields.seriesIx;\n var series = this.options.series[seriesIx];\n var missingValues = this.seriesMissingValues(series);\n var seriesPoints = this.seriesPoints[seriesIx];\n var pointValue = value;\n if (!(hasValue(x) && hasValue(y))) {\n pointValue = this.createMissingValue(pointValue, missingValues);\n }\n var point;\n if (pointValue) {\n point = this.createPoint(pointValue, fields);\n if (point) {\n $.extend(point, fields);\n this.addErrorBar(point, X, fields);\n this.addErrorBar(point, Y, fields);\n }\n this.updateRange(pointValue, fields.series);\n }\n this.points.push(point);\n seriesPoints.push(point);\n },\n seriesMissingValues: function (series) {\n return series.missingValues;\n },\n createMissingValue: function () {\n },\n updateRange: function (value, series) {\n var intlService = this.chartService.intl;\n var xAxisName = series.xAxis;\n var yAxisName = series.yAxis;\n var x = value.x;\n var y = value.y;\n var xAxisRange = this.xAxisRanges[xAxisName];\n var yAxisRange = this.yAxisRanges[yAxisName];\n if (hasValue(x)) {\n xAxisRange = this.xAxisRanges[xAxisName] = xAxisRange || {\n min: MAX_VALUE,\n max: MIN_VALUE\n };\n if (isString(x)) {\n x = parseDate(intlService, x);\n }\n xAxisRange.min = Math.min(xAxisRange.min, x);\n xAxisRange.max = Math.max(xAxisRange.max, x);\n }\n if (hasValue(y)) {\n yAxisRange = this.yAxisRanges[yAxisName] = yAxisRange || {\n min: MAX_VALUE,\n max: MIN_VALUE\n };\n if (isString(y)) {\n y = parseDate(intlService, y);\n }\n yAxisRange.min = Math.min(yAxisRange.min, y);\n yAxisRange.max = Math.max(yAxisRange.max, y);\n }\n },\n evalPointOptions: function (options, value, fields) {\n var series = fields.series;\n var seriesIx = fields.seriesIx;\n var state = {\n defaults: series._defaults,\n excluded: [\n 'data',\n 'tooltip',\n 'content',\n 'template',\n 'visual',\n 'toggle',\n '_outOfRangeMinPoint',\n '_outOfRangeMaxPoint'\n ]\n };\n var doEval = this._evalSeries[seriesIx];\n if (!defined(doEval)) {\n this._evalSeries[seriesIx] = doEval = evalOptions(options, {}, state, true);\n }\n var pointOptions = options;\n if (doEval) {\n pointOptions = deepExtend({}, options);\n evalOptions(pointOptions, {\n value: value,\n series: series,\n dataItem: fields.dataItem\n }, state);\n }\n return pointOptions;\n },\n pointType: function () {\n return LinePoint;\n },\n pointOptions: function (series, seriesIx) {\n var options = this.seriesOptions[seriesIx];\n if (!options) {\n var defaults = this.pointType().prototype.defaults;\n this.seriesOptions[seriesIx] = options = deepExtend({}, defaults, {\n markers: { opacity: series.opacity },\n tooltip: { format: this.options.tooltip.format },\n labels: { format: this.options.labels.format }\n }, series);\n }\n return options;\n },\n createPoint: function (value, fields) {\n var series = fields.series;\n var pointOptions = this.pointOptions(series, fields.seriesIx);\n var color = fields.color || series.color;\n pointOptions = this.evalPointOptions(pointOptions, value, fields);\n if (isFunction(series.color)) {\n color = pointOptions.color;\n }\n var point = new LinePoint(value, pointOptions);\n point.color = color;\n this.append(point);\n return point;\n },\n seriesAxes: function (series) {\n var xAxisName = series.xAxis;\n var yAxisName = series.yAxis;\n var plotArea = this.plotArea;\n var xAxis = xAxisName ? plotArea.namedXAxes[xAxisName] : plotArea.axisX;\n var yAxis = yAxisName ? plotArea.namedYAxes[yAxisName] : plotArea.axisY;\n if (!xAxis) {\n throw new Error('Unable to locate X axis with name ' + xAxisName);\n }\n if (!yAxis) {\n throw new Error('Unable to locate Y axis with name ' + yAxisName);\n }\n return {\n x: xAxis,\n y: yAxis\n };\n },\n reflow: function (targetBox) {\n var this$1 = this;\n var chartPoints = this.points;\n var limit = !this.options.clip;\n var pointIx = 0;\n this.traverseDataPoints(function (value, fields) {\n var point = chartPoints[pointIx++];\n var seriesAxes = this$1.seriesAxes(fields.series);\n var slotX = seriesAxes.x.getSlot(value.x, value.x, limit);\n var slotY = seriesAxes.y.getSlot(value.y, value.y, limit);\n if (point) {\n if (slotX && slotY) {\n var pointSlot = this$1.pointSlot(slotX, slotY);\n point.reflow(pointSlot);\n } else {\n point.visible = false;\n }\n }\n });\n this.box = targetBox;\n },\n pointSlot: function (slotX, slotY) {\n return new Box(slotX.x1, slotY.y1, slotX.x2, slotY.y2);\n },\n traverseDataPoints: function (callback) {\n var this$1 = this;\n var ref = this;\n var series = ref.options.series;\n var seriesPoints = ref.seriesPoints;\n for (var seriesIx = 0; seriesIx < series.length; seriesIx++) {\n var currentSeries = series[seriesIx];\n var currentSeriesPoints = seriesPoints[seriesIx];\n if (!currentSeriesPoints) {\n seriesPoints[seriesIx] = [];\n }\n for (var pointIx = 0; pointIx < currentSeries.data.length; pointIx++) {\n var ref$1 = this$1._bindPoint(currentSeries, seriesIx, pointIx);\n var value = ref$1.valueFields;\n var fields = ref$1.fields;\n callback(value, deepExtend({\n pointIx: pointIx,\n series: currentSeries,\n seriesIx: seriesIx,\n dataItem: currentSeries.data[pointIx],\n owner: this$1\n }, fields));\n }\n }\n },\n formatPointValue: function (point, format) {\n var value = point.value;\n return this.chartService.format.auto(format, value.x, value.y);\n },\n animationPoints: function () {\n var points = this.points;\n var result = [];\n for (var idx = 0; idx < points.length; idx++) {\n result.push((points[idx] || {}).marker);\n }\n return result;\n }\n });\n setDefaultOptions(ScatterChart, {\n series: [],\n tooltip: { format: '{0}, {1}' },\n labels: { format: '{0}, {1}' },\n clip: true\n });\n deepExtend(ScatterChart.prototype, ClipAnimationMixin, { _bindPoint: CategoricalChart.prototype._bindPoint });\n var Bubble = LinePoint.extend({\n init: function (value, options) {\n LinePoint.fn.init.call(this, value, options);\n this.category = value.category;\n },\n createHighlight: function () {\n var highlight = this.options.highlight;\n var border = highlight.border;\n var markers = this.options.markers;\n var center = this.box.center();\n var radius = (markers.size + markers.border.width + border.width) / 2;\n var highlightGroup = new Group();\n var shadow = new drawing.Circle(new geometry.Circle([\n center.x,\n center.y + radius / 5 + border.width / 2\n ], radius + border.width / 2), {\n stroke: { color: 'none' },\n fill: this.createGradient({\n gradient: 'bubbleShadow',\n color: markers.background,\n stops: [\n {\n offset: 0,\n color: markers.background,\n opacity: 0.3\n },\n {\n offset: 1,\n color: markers.background,\n opacity: 0\n }\n ]\n })\n });\n var overlay = new drawing.Circle(new geometry.Circle([\n center.x,\n center.y\n ], radius), {\n stroke: {\n color: border.color || new Color(markers.background).brightness(BORDER_BRIGHTNESS).toHex(),\n width: border.width,\n opacity: border.opacity\n },\n fill: {\n color: markers.background,\n opacity: highlight.opacity\n }\n });\n highlightGroup.append(shadow, overlay);\n return highlightGroup;\n }\n });\n Bubble.prototype.defaults = deepExtend({}, Bubble.prototype.defaults, {\n labels: { position: CENTER },\n highlight: {\n opacity: 1,\n border: {\n color: '#fff',\n width: 2,\n opacity: 1\n }\n }\n });\n var BubbleChart = ScatterChart.extend({\n _initFields: function () {\n this._maxSize = MIN_VALUE;\n ScatterChart.fn._initFields.call(this);\n },\n addValue: function (value, fields) {\n if (value.size !== null && (value.size > 0 || value.size < 0 && fields.series.negativeValues.visible)) {\n this._maxSize = Math.max(this._maxSize, Math.abs(value.size));\n ScatterChart.fn.addValue.call(this, value, fields);\n } else {\n this.points.push(null);\n this.seriesPoints[fields.seriesIx].push(null);\n }\n },\n reflow: function (box) {\n this.updateBubblesSize(box);\n ScatterChart.fn.reflow.call(this, box);\n },\n pointType: function () {\n return Bubble;\n },\n createPoint: function (value, fields) {\n var series = fields.series;\n var pointsCount = series.data.length;\n var delay = fields.pointIx * (INITIAL_ANIMATION_DURATION / pointsCount);\n var animationOptions = {\n delay: delay,\n duration: INITIAL_ANIMATION_DURATION - delay,\n type: BUBBLE\n };\n var color = fields.color || series.color;\n if (value.size < 0 && series.negativeValues.visible) {\n color = valueOrDefault(series.negativeValues.color, color);\n }\n var pointOptions = deepExtend({\n labels: {\n animation: {\n delay: delay,\n duration: INITIAL_ANIMATION_DURATION - delay\n }\n }\n }, this.pointOptions(series, fields.seriesIx), {\n markers: {\n type: CIRCLE,\n border: series.border,\n opacity: series.opacity,\n animation: animationOptions\n }\n });\n pointOptions = this.evalPointOptions(pointOptions, value, fields);\n if (isFunction(series.color)) {\n color = pointOptions.color;\n }\n pointOptions.markers.background = color;\n var point = new Bubble(value, pointOptions);\n point.color = color;\n this.append(point);\n return point;\n },\n updateBubblesSize: function (box) {\n var this$1 = this;\n var ref = this;\n var series = ref.options.series;\n var boxSize = Math.min(box.width(), box.height());\n for (var seriesIx = 0; seriesIx < series.length; seriesIx++) {\n var currentSeries = series[seriesIx];\n var seriesPoints = this$1.seriesPoints[seriesIx];\n var minSize = currentSeries.minSize || Math.max(boxSize * 0.02, 10);\n var maxSize = currentSeries.maxSize || boxSize * 0.2;\n var minR = minSize / 2;\n var maxR = maxSize / 2;\n var minArea = Math.PI * minR * minR;\n var maxArea = Math.PI * maxR * maxR;\n var areaRange = maxArea - minArea;\n var areaRatio = areaRange / this$1._maxSize;\n for (var pointIx = 0; pointIx < seriesPoints.length; pointIx++) {\n var point = seriesPoints[pointIx];\n if (point) {\n var area = Math.abs(point.value.size) * areaRatio;\n var radius = Math.sqrt((minArea + area) / Math.PI);\n var baseZIndex = valueOrDefault(point.options.zIndex, 0);\n var zIndex = baseZIndex + (1 - radius / maxR);\n deepExtend(point.options, {\n zIndex: zIndex,\n markers: {\n size: radius * 2,\n zIndex: zIndex\n },\n labels: { zIndex: zIndex + 1 }\n });\n }\n }\n }\n },\n formatPointValue: function (point, format) {\n var value = point.value;\n return this.chartService.format.auto(format, value.x, value.y, value.size, point.category);\n },\n createAnimation: function () {\n },\n createVisual: function () {\n }\n });\n setDefaultOptions(BubbleChart, {\n tooltip: { format: '{3}' },\n labels: { format: '{3}' }\n });\n var Target = ShapeElement.extend({});\n deepExtend(Target.prototype, PointEventsMixin);\n var Bullet = ChartElement.extend({\n init: function (value, options) {\n ChartElement.fn.init.call(this, options);\n this.aboveAxis = this.options.aboveAxis;\n this.color = options.color || WHITE;\n this.value = value;\n },\n render: function () {\n var options = this.options;\n if (!this._rendered) {\n this._rendered = true;\n if (defined(this.value.target)) {\n this.target = new Target({\n type: options.target.shape,\n background: options.target.color || this.color,\n opacity: options.opacity,\n zIndex: options.zIndex,\n border: options.target.border,\n vAlign: TOP,\n align: RIGHT\n });\n this.target.value = this.value;\n this.target.dataItem = this.dataItem;\n this.target.series = this.series;\n this.append(this.target);\n }\n this.createNote();\n }\n },\n reflow: function (box) {\n this.render();\n var ref = this;\n var options = ref.options;\n var target = ref.target;\n var chart = ref.owner;\n var invertAxes = options.invertAxes;\n var valueAxis = chart.seriesValueAxis(this.options);\n var categorySlot = chart.categorySlot(chart.categoryAxis, options.categoryIx, valueAxis);\n var targetValueSlot = valueAxis.getSlot(this.value.target);\n var targetSlotX = invertAxes ? targetValueSlot : categorySlot;\n var targetSlotY = invertAxes ? categorySlot : targetValueSlot;\n if (target) {\n var targetSlot = new Box(targetSlotX.x1, targetSlotY.y1, targetSlotX.x2, targetSlotY.y2);\n target.options.height = invertAxes ? targetSlot.height() : options.target.line.width;\n target.options.width = invertAxes ? options.target.line.width : targetSlot.width();\n target.reflow(targetSlot);\n }\n if (this.note) {\n this.note.reflow(box);\n }\n this.box = box;\n },\n createVisual: function () {\n ChartElement.fn.createVisual.call(this);\n var options = this.options;\n var body = Path.fromRect(this.box.toRect(), {\n fill: {\n color: this.color,\n opacity: options.opacity\n },\n stroke: null\n });\n if (options.border.width > 0) {\n body.options.set('stroke', {\n color: options.border.color || this.color,\n width: options.border.width,\n dashType: options.border.dashType,\n opacity: valueOrDefault(options.border.opacity, options.opacity)\n });\n }\n this.bodyVisual = body;\n alignPathToPixel(body);\n this.visual.append(body);\n },\n createAnimation: function () {\n if (this.bodyVisual) {\n this.animation = Animation.create(this.bodyVisual, this.options.animation);\n }\n },\n createHighlight: function (style) {\n return Path.fromRect(this.box.toRect(), style);\n },\n highlightVisual: function () {\n return this.bodyVisual;\n },\n highlightVisualArgs: function () {\n return {\n rect: this.box.toRect(),\n visual: this.bodyVisual,\n options: this.options\n };\n },\n formatValue: function (format) {\n return this.owner.formatPointValue(this, format);\n }\n });\n Bullet.prototype.tooltipAnchor = Bar.prototype.tooltipAnchor;\n setDefaultOptions(Bullet, {\n border: { width: 1 },\n vertical: false,\n opacity: 1,\n target: {\n shape: '',\n border: {\n width: 0,\n color: 'green'\n },\n line: { width: 2 }\n },\n tooltip: { format: 'Current: {0}
    Target: {1}' }\n });\n deepExtend(Bullet.prototype, PointEventsMixin);\n deepExtend(Bullet.prototype, NoteMixin);\n var BulletChart = CategoricalChart.extend({\n init: function (plotArea, options) {\n wrapData(options);\n CategoricalChart.fn.init.call(this, plotArea, options);\n },\n reflowCategories: function (categorySlots) {\n var children = this.children;\n var childrenLength = children.length;\n for (var i = 0; i < childrenLength; i++) {\n children[i].reflow(categorySlots[i]);\n }\n },\n plotRange: function (point) {\n var series = point.series;\n var valueAxis = this.seriesValueAxis(series);\n var axisCrossingValue = this.categoryAxisCrossingValue(valueAxis);\n return [\n axisCrossingValue,\n point.value.current || axisCrossingValue\n ];\n },\n createPoint: function (data, fields) {\n var categoryIx = fields.categoryIx;\n var category = fields.category;\n var series = fields.series;\n var seriesIx = fields.seriesIx;\n var ref = this;\n var options = ref.options;\n var children = ref.children;\n var value = data.valueFields;\n var bulletOptions = deepExtend({\n vertical: !options.invertAxes,\n overlay: series.overlay,\n categoryIx: categoryIx,\n invertAxes: options.invertAxes\n }, series);\n var color = data.fields.color || series.color;\n bulletOptions = this.evalPointOptions(bulletOptions, value, category, categoryIx, series, seriesIx);\n if (isFunction(series.color)) {\n color = bulletOptions.color;\n }\n var bullet = new Bullet(value, bulletOptions);\n bullet.color = color;\n var cluster = children[categoryIx];\n if (!cluster) {\n cluster = new ClusterLayout({\n vertical: options.invertAxes,\n gap: options.gap,\n spacing: options.spacing\n });\n this.append(cluster);\n }\n cluster.append(bullet);\n return bullet;\n },\n updateRange: function (value, fields) {\n var current = value.current;\n var target = value.target;\n var axisName = fields.series.axis;\n var axisRange = this.valueAxisRanges[axisName];\n if (defined(current) && !isNaN(current) && defined(target && !isNaN(target))) {\n axisRange = this.valueAxisRanges[axisName] = axisRange || {\n min: MAX_VALUE,\n max: MIN_VALUE\n };\n axisRange.min = Math.min(axisRange.min, current, target);\n axisRange.max = Math.max(axisRange.max, current, target);\n }\n },\n formatPointValue: function (point, format) {\n return this.chartService.format.auto(format, point.value.current, point.value.target);\n },\n pointValue: function (data) {\n return data.valueFields.current;\n },\n aboveAxis: function (point) {\n var value = point.value.current;\n return value > 0;\n },\n createAnimation: function () {\n var this$1 = this;\n var points = this.points;\n this._setAnimationOptions();\n for (var idx = 0; idx < points.length; idx++) {\n var point = points[idx];\n point.options.animation = this$1.options.animation;\n point.createAnimation();\n }\n }\n });\n BulletChart.prototype._setAnimationOptions = BarChart.prototype._setAnimationOptions;\n setDefaultOptions(BulletChart, { animation: { type: BAR } });\n function wrapData(options) {\n var series = options.series;\n for (var i = 0; i < series.length; i++) {\n var seriesItem = series[i];\n var data = seriesItem.data;\n if (data && !isArray(data[0]) && !isObject(data[0])) {\n seriesItem.data = [data];\n }\n }\n }\n var BaseTooltip = Class.extend({\n init: function (chartService, options) {\n this.chartService = chartService;\n this.options = deepExtend({}, this.options, options);\n },\n getStyle: function (options, point) {\n var background = options.background;\n var border = options.border.color;\n if (point) {\n var pointColor = point.color || point.options.color;\n background = valueOrDefault(background, pointColor);\n border = valueOrDefault(border, pointColor);\n }\n var padding = getSpacing(options.padding || {}, 'auto');\n return {\n backgroundColor: background,\n borderColor: border,\n font: options.font,\n color: options.color,\n opacity: options.opacity,\n borderWidth: styleValue(options.border.width),\n paddingTop: styleValue(padding.top),\n paddingBottom: styleValue(padding.bottom),\n paddingLeft: styleValue(padding.left),\n paddingRight: styleValue(padding.right)\n };\n },\n show: function (options, tooltipOptions, point) {\n options.format = tooltipOptions.format;\n var style = this.getStyle(tooltipOptions, point);\n options.style = style;\n if (!defined(tooltipOptions.color) && new Color(style.backgroundColor).percBrightness() > 180) {\n options.className = 'k-chart-tooltip-inverse';\n }\n this.chartService.notify(SHOW_TOOLTIP, options);\n },\n hide: function () {\n if (this.chartService) {\n this.chartService.notify(HIDE_TOOLTIP);\n }\n },\n destroy: function () {\n delete this.chartService;\n }\n });\n setDefaultOptions(BaseTooltip, {\n border: { width: 1 },\n opacity: 1\n });\n var CrosshairTooltip = BaseTooltip.extend({\n init: function (chartService, crosshair, options) {\n BaseTooltip.fn.init.call(this, chartService, options);\n this.crosshair = crosshair;\n this.formatService = chartService.format;\n this.initAxisName();\n },\n initAxisName: function () {\n var axis = this.crosshair.axis;\n var plotArea = axis.plotArea;\n var name;\n if (plotArea.categoryAxis) {\n name = axis.getCategory ? 'categoryAxis' : 'valueAxis';\n } else {\n name = axis.options.vertical ? 'yAxis' : 'xAxis';\n }\n this.axisName = name;\n },\n showAt: function (point) {\n var ref = this;\n var axis = ref.crosshair.axis;\n var options = ref.options;\n var value = axis[options.stickyMode ? 'getCategory' : 'getValue'](point);\n var formattedValue = value;\n if (options.format) {\n formattedValue = this.formatService.auto(options.format, value);\n } else if (axis.options.type === DATE) {\n formattedValue = this.formatService.auto(axis.options.labels.dateFormats[axis.options.baseUnit], value);\n }\n this.show({\n point: point,\n anchor: this.getAnchor(),\n crosshair: this.crosshair,\n value: formattedValue,\n axisName: this.axisName,\n axisIndex: this.crosshair.axis.axisIndex\n }, this.options);\n },\n hide: function () {\n this.chartService.notify(HIDE_TOOLTIP, {\n crosshair: this.crosshair,\n axisName: this.axisName,\n axisIndex: this.crosshair.axis.axisIndex\n });\n },\n getAnchor: function () {\n var ref = this;\n var crosshair = ref.crosshair;\n var ref_options = ref.options;\n var position = ref_options.position;\n var padding = ref_options.padding;\n var vertical = !crosshair.axis.options.vertical;\n var lineBox = crosshair.line.bbox();\n var horizontalAlign, verticalAlign, point;\n if (vertical) {\n horizontalAlign = CENTER;\n if (position === BOTTOM) {\n verticalAlign = TOP;\n point = lineBox.bottomLeft().translate(0, padding);\n } else {\n verticalAlign = BOTTOM;\n point = lineBox.topLeft().translate(0, -padding);\n }\n } else {\n verticalAlign = CENTER;\n if (position === LEFT) {\n horizontalAlign = RIGHT;\n point = lineBox.topLeft().translate(-padding, 0);\n } else {\n horizontalAlign = LEFT;\n point = lineBox.topRight().translate(padding, 0);\n }\n }\n return {\n point: point,\n align: {\n horizontal: horizontalAlign,\n vertical: verticalAlign\n }\n };\n }\n });\n setDefaultOptions(CrosshairTooltip, { padding: 10 });\n var Crosshair = ChartElement.extend({\n init: function (chartService, axis, options) {\n ChartElement.fn.init.call(this, options);\n this.axis = axis;\n this.stickyMode = axis instanceof CategoryAxis;\n var tooltipOptions = this.options.tooltip;\n if (tooltipOptions.visible) {\n this.tooltip = new CrosshairTooltip(chartService, this, deepExtend({}, tooltipOptions, { stickyMode: this.stickyMode }));\n }\n },\n showAt: function (point) {\n this.point = point;\n this.moveLine();\n this.line.visible(true);\n if (this.tooltip) {\n this.tooltip.showAt(point);\n }\n },\n hide: function () {\n this.line.visible(false);\n if (this.tooltip) {\n this.tooltip.hide();\n }\n },\n moveLine: function () {\n var ref = this;\n var axis = ref.axis;\n var point = ref.point;\n var vertical = axis.options.vertical;\n var box = this.getBox();\n var dim = vertical ? Y : X;\n var lineStart = new GeometryPoint(box.x1, box.y1);\n var lineEnd;\n if (vertical) {\n lineEnd = new GeometryPoint(box.x2, box.y1);\n } else {\n lineEnd = new GeometryPoint(box.x1, box.y2);\n }\n if (point) {\n if (this.stickyMode) {\n var slot = axis.getSlot(axis.pointCategoryIndex(point));\n lineStart[dim] = lineEnd[dim] = slot.center()[dim];\n } else {\n lineStart[dim] = lineEnd[dim] = point[dim];\n }\n }\n this.box = box;\n this.line.moveTo(lineStart).lineTo(lineEnd);\n },\n getBox: function () {\n var axis = this.axis;\n var axes = axis.pane.axes;\n var length = axes.length;\n var vertical = axis.options.vertical;\n var box = axis.lineBox().clone();\n var dim = vertical ? X : Y;\n var axisLineBox;\n for (var i = 0; i < length; i++) {\n var currentAxis = axes[i];\n if (currentAxis.options.vertical !== vertical) {\n if (!axisLineBox) {\n axisLineBox = currentAxis.lineBox().clone();\n } else {\n axisLineBox.wrap(currentAxis.lineBox());\n }\n }\n }\n box[dim + 1] = axisLineBox[dim + 1];\n box[dim + 2] = axisLineBox[dim + 2];\n return box;\n },\n createVisual: function () {\n ChartElement.fn.createVisual.call(this);\n var options = this.options;\n this.line = new Path({\n stroke: {\n color: options.color,\n width: options.width,\n opacity: options.opacity,\n dashType: options.dashType\n },\n visible: false\n });\n this.moveLine();\n this.visual.append(this.line);\n },\n destroy: function () {\n if (this.tooltip) {\n this.tooltip.destroy();\n }\n ChartElement.fn.destroy.call(this);\n }\n });\n setDefaultOptions(Crosshair, {\n color: BLACK,\n width: 2,\n zIndex: -1,\n tooltip: { visible: false }\n });\n var ChartContainer = ChartElement.extend({\n init: function (options, pane) {\n ChartElement.fn.init.call(this, options);\n this.pane = pane;\n },\n shouldClip: function () {\n var children = this.children;\n var length = children.length;\n for (var i = 0; i < length; i++) {\n if (children[i].options.clip === true) {\n return true;\n }\n }\n return false;\n },\n _clipBox: function () {\n return this.pane.chartsBox();\n },\n createVisual: function () {\n this.visual = new Group({ zIndex: 0 });\n if (this.shouldClip()) {\n var clipBox = this.clipBox = this._clipBox();\n var clipRect = clipBox.toRect();\n var clipPath = Path.fromRect(clipRect);\n this.visual.clip(clipPath);\n this.unclipLabels();\n }\n },\n stackRoot: function () {\n return this;\n },\n unclipLabels: function () {\n var ref = this;\n var charts = ref.children;\n var clipBox = ref.clipBox;\n for (var i = 0; i < charts.length; i++) {\n var points = charts[i].points || {};\n var length = points.length;\n for (var j = 0; j < length; j++) {\n var point = points[j];\n if (point && point.visible !== false && point.overlapsBox && point.overlapsBox(clipBox)) {\n var label = point.label;\n var note = point.note;\n if (label && label.options.visible) {\n if (label.alignToClipBox) {\n label.alignToClipBox(clipBox);\n }\n label.options.noclip = true;\n }\n if (note && note.options.visible) {\n note.options.noclip = true;\n }\n }\n }\n }\n },\n destroy: function () {\n ChartElement.fn.destroy.call(this);\n delete this.parent;\n }\n });\n ChartContainer.prototype.isStackRoot = true;\n var Pane = BoxElement.extend({\n init: function (options) {\n BoxElement.fn.init.call(this, options);\n this.id = paneID();\n this.createTitle();\n this.content = new ChartElement();\n this.chartContainer = new ChartContainer({}, this);\n this.append(this.content);\n this.axes = [];\n this.charts = [];\n },\n createTitle: function () {\n var titleOptions = this.options.title;\n if (isObject(titleOptions)) {\n titleOptions = deepExtend({}, titleOptions, {\n align: titleOptions.position,\n position: TOP\n });\n }\n this.title = dataviz.Title.buildTitle(titleOptions, this, Pane.prototype.options.title);\n },\n appendAxis: function (axis) {\n this.content.append(axis);\n this.axes.push(axis);\n axis.pane = this;\n },\n appendChart: function (chart) {\n if (this.chartContainer.parent !== this.content) {\n this.content.append(this.chartContainer);\n }\n this.charts.push(chart);\n this.chartContainer.append(chart);\n chart.pane = this;\n },\n empty: function () {\n var this$1 = this;\n var plotArea = this.parent;\n if (plotArea) {\n for (var i = 0; i < this.axes.length; i++) {\n plotArea.removeAxis(this$1.axes[i]);\n }\n for (var i$1 = 0; i$1 < this.charts.length; i$1++) {\n plotArea.removeChart(this$1.charts[i$1]);\n }\n }\n this.axes = [];\n this.charts = [];\n this.content.destroy();\n this.content.children = [];\n this.chartContainer.children = [];\n },\n reflow: function (targetBox) {\n var content;\n if (last(this.children) === this.content) {\n content = this.children.pop();\n }\n BoxElement.fn.reflow.call(this, targetBox);\n if (content) {\n this.children.push(content);\n }\n if (this.title) {\n this.contentBox.y1 += this.title.box.height();\n }\n },\n visualStyle: function () {\n var style = BoxElement.fn.visualStyle.call(this);\n style.zIndex = -10;\n return style;\n },\n renderComplete: function () {\n if (this.options.visible) {\n this.createGridLines();\n }\n },\n stackRoot: function () {\n return this;\n },\n clipRoot: function () {\n return this;\n },\n createGridLines: function () {\n var axes = this.axes;\n var allAxes = axes.concat(this.parent.axes);\n var vGridLines = [];\n var hGridLines = [];\n for (var i = 0; i < axes.length; i++) {\n var axis = axes[i];\n var vertical = axis.options.vertical;\n var gridLines = vertical ? vGridLines : hGridLines;\n for (var j = 0; j < allAxes.length; j++) {\n if (gridLines.length === 0) {\n var altAxis = allAxes[j];\n if (vertical !== altAxis.options.vertical) {\n append(gridLines, axis.createGridLines(altAxis));\n }\n }\n }\n }\n },\n refresh: function () {\n this.visual.clear();\n this.content.parent = null;\n this.content.createGradient = this.createGradient.bind(this);\n this.content.renderVisual();\n this.content.parent = this;\n if (this.title) {\n this.visual.append(this.title.visual);\n }\n this.visual.append(this.content.visual);\n this.renderComplete();\n },\n chartsBox: function () {\n var axes = this.axes;\n var length = axes.length;\n var chartsBox = new Box();\n for (var idx = 0; idx < length; idx++) {\n var axis = axes[idx];\n var axisValueField = axis.options.vertical ? Y : X;\n var lineBox = axis.lineBox();\n chartsBox[axisValueField + 1] = lineBox[axisValueField + 1];\n chartsBox[axisValueField + 2] = lineBox[axisValueField + 2];\n }\n if (chartsBox.x2 === 0) {\n var allAxes = this.parent.axes;\n var length$1 = allAxes.length;\n for (var idx$1 = 0; idx$1 < length$1; idx$1++) {\n var axis$1 = allAxes[idx$1];\n if (!axis$1.options.vertical) {\n var lineBox$1 = axis$1.lineBox();\n chartsBox.x1 = lineBox$1.x1;\n chartsBox.x2 = lineBox$1.x2;\n }\n }\n }\n return chartsBox;\n },\n clipBox: function () {\n return this.chartContainer.clipBox;\n }\n });\n var ID = 1;\n function paneID() {\n return 'pane' + ID++;\n }\n Pane.prototype.isStackRoot = true;\n setDefaultOptions(Pane, {\n zIndex: -1,\n shrinkToFit: true,\n title: { align: LEFT },\n visible: true\n });\n var PlotAreaBase = ChartElement.extend({\n init: function (series, options, chartService) {\n ChartElement.fn.init.call(this, options);\n this.initFields(series, options);\n this.series = series;\n this.initSeries();\n this.charts = [];\n this.options.legend.items = [];\n this.axes = [];\n this.crosshairs = [];\n this.chartService = chartService;\n this.createPanes();\n this.render();\n this.createCrosshairs();\n },\n initFields: function () {\n },\n initSeries: function () {\n var series = this.series;\n for (var i = 0; i < series.length; i++) {\n series[i].index = i;\n }\n },\n createPanes: function () {\n var this$1 = this;\n var defaults = { title: { color: (this.options.title || {}).color } };\n var panes = [];\n var paneOptions = this.options.panes || [];\n var panesLength = Math.max(paneOptions.length, 1);\n function setTitle(options, defaults) {\n if (isString(options.title)) {\n options.title = { text: options.title };\n }\n options.title = deepExtend({}, defaults.title, options.title);\n }\n for (var i = 0; i < panesLength; i++) {\n var options = paneOptions[i] || {};\n setTitle(options, defaults);\n var currentPane = new Pane(options);\n currentPane.paneIndex = i;\n panes.push(currentPane);\n this$1.append(currentPane);\n }\n this.panes = panes;\n },\n createCrosshairs: function (panes) {\n var this$1 = this;\n if (panes === void 0) {\n panes = this.panes;\n }\n for (var i = 0; i < panes.length; i++) {\n var pane = panes[i];\n for (var j = 0; j < pane.axes.length; j++) {\n var axis = pane.axes[j];\n if (axis.options.crosshair && axis.options.crosshair.visible) {\n var currentCrosshair = new Crosshair(this$1.chartService, axis, axis.options.crosshair);\n this$1.crosshairs.push(currentCrosshair);\n pane.content.append(currentCrosshair);\n }\n }\n }\n },\n removeCrosshairs: function (pane) {\n var crosshairs = this.crosshairs;\n var axes = pane.axes;\n for (var i = crosshairs.length - 1; i >= 0; i--) {\n for (var j = 0; j < axes.length; j++) {\n if (crosshairs[i].axis === axes[j]) {\n crosshairs.splice(i, 1);\n break;\n }\n }\n }\n },\n hideCrosshairs: function () {\n var crosshairs = this.crosshairs;\n for (var idx = 0; idx < crosshairs.length; idx++) {\n crosshairs[idx].hide();\n }\n },\n findPane: function (name) {\n var panes = this.panes;\n var matchingPane;\n for (var i = 0; i < panes.length; i++) {\n if (panes[i].options.name === name) {\n matchingPane = panes[i];\n break;\n }\n }\n return matchingPane || panes[0];\n },\n findPointPane: function (point) {\n var panes = this.panes;\n var matchingPane;\n for (var i = 0; i < panes.length; i++) {\n if (panes[i].box.containsPoint(point)) {\n matchingPane = panes[i];\n break;\n }\n }\n return matchingPane;\n },\n appendAxis: function (axis) {\n var pane = this.findPane(axis.options.pane);\n pane.appendAxis(axis);\n this.axes.push(axis);\n axis.plotArea = this;\n },\n removeAxis: function (axisToRemove) {\n var this$1 = this;\n var filteredAxes = [];\n for (var i = 0; i < this.axes.length; i++) {\n var axis = this$1.axes[i];\n if (axisToRemove !== axis) {\n filteredAxes.push(axis);\n } else {\n axis.destroy();\n }\n }\n this.axes = filteredAxes;\n },\n appendChart: function (chart, pane) {\n this.charts.push(chart);\n if (pane) {\n pane.appendChart(chart);\n } else {\n this.append(chart);\n }\n },\n removeChart: function (chartToRemove) {\n var this$1 = this;\n var filteredCharts = [];\n for (var i = 0; i < this.charts.length; i++) {\n var chart = this$1.charts[i];\n if (chart !== chartToRemove) {\n filteredCharts.push(chart);\n } else {\n chart.destroy();\n }\n }\n this.charts = filteredCharts;\n },\n addToLegend: function (series) {\n var count = series.length;\n var legend = this.options.legend;\n var labels = legend.labels || {};\n var inactiveItems = legend.inactiveItems || {};\n var inactiveItemsLabels = inactiveItems.labels || {};\n var data = [];\n for (var i = 0; i < count; i++) {\n var currentSeries = series[i];\n var seriesVisible = currentSeries.visible !== false;\n if (currentSeries.visibleInLegend === false) {\n continue;\n }\n var text = currentSeries.name || '';\n var labelTemplate = seriesVisible ? getTemplate(labels) : getTemplate(inactiveItemsLabels) || getTemplate(labels);\n if (labelTemplate) {\n text = labelTemplate({\n text: text,\n series: currentSeries\n });\n }\n var defaults = currentSeries._defaults;\n var color = currentSeries.color;\n if (isFunction(color) && defaults) {\n color = defaults.color;\n }\n var itemLabelOptions = void 0, markerColor = void 0;\n if (seriesVisible) {\n itemLabelOptions = {};\n markerColor = color;\n } else {\n itemLabelOptions = {\n color: inactiveItemsLabels.color,\n font: inactiveItemsLabels.font\n };\n markerColor = inactiveItems.markers.color;\n }\n if (text) {\n data.push({\n text: text,\n labels: itemLabelOptions,\n markerColor: markerColor,\n series: currentSeries,\n active: seriesVisible\n });\n }\n }\n append(legend.items, data);\n },\n groupAxes: function (panes) {\n var xAxes = [];\n var yAxes = [];\n for (var paneIx = 0; paneIx < panes.length; paneIx++) {\n var paneAxes = panes[paneIx].axes;\n for (var axisIx = 0; axisIx < paneAxes.length; axisIx++) {\n var axis = paneAxes[axisIx];\n if (axis.options.vertical) {\n yAxes.push(axis);\n } else {\n xAxes.push(axis);\n }\n }\n }\n return {\n x: xAxes,\n y: yAxes,\n any: xAxes.concat(yAxes)\n };\n },\n groupSeriesByPane: function () {\n var this$1 = this;\n var series = this.series;\n var seriesByPane = {};\n for (var i = 0; i < series.length; i++) {\n var currentSeries = series[i];\n var pane = this$1.seriesPaneName(currentSeries);\n if (seriesByPane[pane]) {\n seriesByPane[pane].push(currentSeries);\n } else {\n seriesByPane[pane] = [currentSeries];\n }\n }\n return seriesByPane;\n },\n filterVisibleSeries: function (series) {\n var result = [];\n for (var i = 0; i < series.length; i++) {\n var currentSeries = series[i];\n if (currentSeries.visible !== false) {\n result.push(currentSeries);\n }\n }\n return result;\n },\n reflow: function (targetBox) {\n var options = this.options.plotArea;\n var panes = this.panes;\n var margin = getSpacing(options.margin);\n this.box = targetBox.clone().unpad(margin);\n this.reflowPanes();\n this.reflowAxes(panes);\n this.reflowCharts(panes);\n },\n redraw: function (panes) {\n var this$1 = this;\n var panesArray = [].concat(panes);\n this.initSeries();\n for (var i = 0; i < panesArray.length; i++) {\n this$1.removeCrosshairs(panesArray[i]);\n panesArray[i].empty();\n }\n this.render(panesArray);\n this.reflowAxes(this.panes);\n this.reflowCharts(panesArray);\n this.createCrosshairs(panesArray);\n for (var i$1 = 0; i$1 < panesArray.length; i$1++) {\n panesArray[i$1].refresh();\n }\n },\n axisCrossingValues: function (axis, crossingAxes) {\n var options = axis.options;\n var crossingValues = [].concat(options.axisCrossingValues || options.axisCrossingValue);\n var valuesToAdd = crossingAxes.length - crossingValues.length;\n var defaultValue = crossingValues[0] || 0;\n for (var i = 0; i < valuesToAdd; i++) {\n crossingValues.push(defaultValue);\n }\n return crossingValues;\n },\n alignAxisTo: function (axis, targetAxis, crossingValue, targetCrossingValue) {\n var slot = axis.getSlot(crossingValue, crossingValue, true);\n var slotEdge = axis.options.reverse ? 2 : 1;\n var targetSlot = targetAxis.getSlot(targetCrossingValue, targetCrossingValue, true);\n var targetEdge = targetAxis.options.reverse ? 2 : 1;\n var axisBox = axis.box.translate(targetSlot[X + targetEdge] - slot[X + slotEdge], targetSlot[Y + targetEdge] - slot[Y + slotEdge]);\n if (axis.pane !== targetAxis.pane) {\n axisBox.translate(0, axis.pane.box.y1 - targetAxis.pane.box.y1);\n }\n axis.reflow(axisBox);\n },\n alignAxes: function (xAxes, yAxes) {\n var this$1 = this;\n var xAnchor = xAxes[0];\n var yAnchor = yAxes[0];\n var xAnchorCrossings = this.axisCrossingValues(xAnchor, yAxes);\n var yAnchorCrossings = this.axisCrossingValues(yAnchor, xAxes);\n var leftAnchors = {};\n var rightAnchors = {};\n var topAnchors = {};\n var bottomAnchors = {};\n for (var i = 0; i < yAxes.length; i++) {\n var axis = yAxes[i];\n var pane = axis.pane;\n var paneId = pane.id;\n var visible = axis.options.visible !== false;\n var anchor = paneAnchor(xAxes, pane) || xAnchor;\n var anchorCrossings = xAnchorCrossings;\n if (anchor !== xAnchor) {\n anchorCrossings = this$1.axisCrossingValues(anchor, yAxes);\n }\n this$1.alignAxisTo(axis, anchor, yAnchorCrossings[i], anchorCrossings[i]);\n if (axis.options._overlap) {\n continue;\n }\n if (round(axis.lineBox().x1) === round(anchor.lineBox().x1)) {\n if (leftAnchors[paneId]) {\n axis.reflow(axis.box.alignTo(leftAnchors[paneId].box, LEFT).translate(-axis.options.margin, 0));\n }\n if (visible) {\n leftAnchors[paneId] = axis;\n }\n }\n if (round(axis.lineBox().x2) === round(anchor.lineBox().x2)) {\n if (!axis._mirrored) {\n axis.options.labels.mirror = !axis.options.labels.mirror;\n axis._mirrored = true;\n }\n this$1.alignAxisTo(axis, anchor, yAnchorCrossings[i], anchorCrossings[i]);\n if (rightAnchors[paneId]) {\n axis.reflow(axis.box.alignTo(rightAnchors[paneId].box, RIGHT).translate(axis.options.margin, 0));\n }\n if (visible) {\n rightAnchors[paneId] = axis;\n }\n }\n if (i !== 0 && yAnchor.pane === axis.pane) {\n axis.alignTo(yAnchor);\n axis.reflow(axis.box);\n }\n }\n for (var i$1 = 0; i$1 < xAxes.length; i$1++) {\n var axis$1 = xAxes[i$1];\n var pane$1 = axis$1.pane;\n var paneId$1 = pane$1.id;\n var visible$1 = axis$1.options.visible !== false;\n var anchor$1 = paneAnchor(yAxes, pane$1) || yAnchor;\n var anchorCrossings$1 = yAnchorCrossings;\n if (anchor$1 !== yAnchor) {\n anchorCrossings$1 = this$1.axisCrossingValues(anchor$1, xAxes);\n }\n this$1.alignAxisTo(axis$1, anchor$1, xAnchorCrossings[i$1], anchorCrossings$1[i$1]);\n if (axis$1.options._overlap) {\n continue;\n }\n if (round(axis$1.lineBox().y1) === round(anchor$1.lineBox().y1)) {\n if (!axis$1._mirrored) {\n axis$1.options.labels.mirror = !axis$1.options.labels.mirror;\n axis$1._mirrored = true;\n }\n this$1.alignAxisTo(axis$1, anchor$1, xAnchorCrossings[i$1], anchorCrossings$1[i$1]);\n if (topAnchors[paneId$1]) {\n axis$1.reflow(axis$1.box.alignTo(topAnchors[paneId$1].box, TOP).translate(0, -axis$1.options.margin));\n }\n if (visible$1) {\n topAnchors[paneId$1] = axis$1;\n }\n }\n if (round(axis$1.lineBox().y2, datavizConstants.COORD_PRECISION) === round(anchor$1.lineBox().y2, datavizConstants.COORD_PRECISION)) {\n if (bottomAnchors[paneId$1]) {\n axis$1.reflow(axis$1.box.alignTo(bottomAnchors[paneId$1].box, BOTTOM).translate(0, axis$1.options.margin));\n }\n if (visible$1) {\n bottomAnchors[paneId$1] = axis$1;\n }\n }\n if (i$1 !== 0) {\n axis$1.alignTo(xAnchor);\n axis$1.reflow(axis$1.box);\n }\n }\n },\n shrinkAxisWidth: function (panes) {\n var axes = this.groupAxes(panes).any;\n var axisBox = axisGroupBox(axes);\n var overflowX = 0;\n for (var i = 0; i < panes.length; i++) {\n var currentPane = panes[i];\n if (currentPane.axes.length > 0) {\n overflowX = Math.max(overflowX, axisBox.width() - currentPane.contentBox.width());\n }\n }\n if (overflowX !== 0) {\n for (var i$1 = 0; i$1 < axes.length; i$1++) {\n var currentAxis = axes[i$1];\n if (!currentAxis.options.vertical) {\n currentAxis.reflow(currentAxis.box.shrink(overflowX, 0));\n }\n }\n }\n },\n shrinkAxisHeight: function (panes) {\n var shrinked;\n for (var i = 0; i < panes.length; i++) {\n var currentPane = panes[i];\n var axes = currentPane.axes;\n var overflowY = Math.max(0, axisGroupBox(axes).height() - currentPane.contentBox.height());\n if (overflowY !== 0) {\n for (var j = 0; j < axes.length; j++) {\n var currentAxis = axes[j];\n if (currentAxis.options.vertical) {\n currentAxis.reflow(currentAxis.box.shrink(0, overflowY));\n }\n }\n shrinked = true;\n }\n }\n return shrinked;\n },\n fitAxes: function (panes) {\n var axes = this.groupAxes(panes).any;\n var offsetX = 0;\n for (var i = 0; i < panes.length; i++) {\n var currentPane = panes[i];\n var paneAxes = currentPane.axes;\n var paneBox = currentPane.contentBox;\n if (paneAxes.length > 0) {\n var axisBox = axisGroupBox(paneAxes);\n var offsetY = Math.max(paneBox.y1 - axisBox.y1, paneBox.y2 - axisBox.y2);\n offsetX = Math.max(offsetX, paneBox.x1 - axisBox.x1);\n for (var j = 0; j < paneAxes.length; j++) {\n var currentAxis = paneAxes[j];\n currentAxis.reflow(currentAxis.box.translate(0, offsetY));\n }\n }\n }\n for (var i$1 = 0; i$1 < axes.length; i$1++) {\n var currentAxis$1 = axes[i$1];\n currentAxis$1.reflow(currentAxis$1.box.translate(offsetX, 0));\n }\n },\n reflowAxes: function (panes) {\n var this$1 = this;\n var axes = this.groupAxes(panes);\n for (var i = 0; i < panes.length; i++) {\n this$1.reflowPaneAxes(panes[i]);\n }\n if (axes.x.length > 0 && axes.y.length > 0) {\n this.alignAxes(axes.x, axes.y);\n this.shrinkAxisWidth(panes);\n this.autoRotateAxisLabels(axes);\n this.alignAxes(axes.x, axes.y);\n if (this.shrinkAxisWidth(panes)) {\n this.alignAxes(axes.x, axes.y);\n }\n this.shrinkAxisHeight(panes);\n this.alignAxes(axes.x, axes.y);\n if (this.shrinkAxisHeight(panes)) {\n this.alignAxes(axes.x, axes.y);\n }\n this.fitAxes(panes);\n }\n },\n autoRotateAxisLabels: function (groupedAxes) {\n var this$1 = this;\n var ref = this;\n var axes = ref.axes;\n var panes = ref.panes;\n var rotated;\n for (var idx = 0; idx < axes.length; idx++) {\n var axis = axes[idx];\n if (axis.autoRotateLabels()) {\n rotated = true;\n }\n }\n if (rotated) {\n for (var idx$1 = 0; idx$1 < panes.length; idx$1++) {\n this$1.reflowPaneAxes(panes[idx$1]);\n }\n if (groupedAxes.x.length > 0 && groupedAxes.y.length > 0) {\n this.alignAxes(groupedAxes.x, groupedAxes.y);\n this.shrinkAxisWidth(panes);\n }\n }\n },\n reflowPaneAxes: function (pane) {\n var axes = pane.axes;\n var length = axes.length;\n if (length > 0) {\n for (var i = 0; i < length; i++) {\n axes[i].reflow(pane.contentBox);\n }\n }\n },\n reflowCharts: function (panes) {\n var charts = this.charts;\n var count = charts.length;\n var box = this.box;\n for (var i = 0; i < count; i++) {\n var chartPane = charts[i].pane;\n if (!chartPane || inArray(chartPane, panes)) {\n charts[i].reflow(box);\n }\n }\n },\n reflowPanes: function () {\n var ref = this;\n var box = ref.box;\n var panes = ref.panes;\n var panesLength = panes.length;\n var remainingHeight = box.height();\n var remainingPanes = panesLength;\n var autoHeightPanes = 0;\n var top = box.y1;\n for (var i = 0; i < panesLength; i++) {\n var currentPane = panes[i];\n var height = currentPane.options.height;\n currentPane.options.width = box.width();\n if (!currentPane.options.height) {\n autoHeightPanes++;\n } else {\n if (height.indexOf && height.indexOf('%')) {\n var percents = parseInt(height, 10) / 100;\n currentPane.options.height = percents * box.height();\n }\n currentPane.reflow(box.clone());\n remainingHeight -= currentPane.options.height;\n }\n }\n for (var i$1 = 0; i$1 < panesLength; i$1++) {\n var currentPane$1 = panes[i$1];\n if (!currentPane$1.options.height) {\n currentPane$1.options.height = remainingHeight / autoHeightPanes;\n }\n }\n for (var i$2 = 0; i$2 < panesLength; i$2++) {\n var currentPane$2 = panes[i$2];\n var paneBox = box.clone().move(box.x1, top);\n currentPane$2.reflow(paneBox);\n remainingPanes--;\n top += currentPane$2.options.height;\n }\n },\n backgroundBox: function () {\n var axes = this.axes;\n var axesCount = axes.length;\n var box;\n for (var i = 0; i < axesCount; i++) {\n var axisA = axes[i];\n for (var j = 0; j < axesCount; j++) {\n var axisB = axes[j];\n if (axisA.options.vertical !== axisB.options.vertical) {\n var lineBox = axisA.lineBox().clone().wrap(axisB.lineBox());\n if (!box) {\n box = lineBox;\n } else {\n box = box.wrap(lineBox);\n }\n }\n }\n }\n return box || this.box;\n },\n chartsBoxes: function () {\n var panes = this.panes;\n var boxes = [];\n for (var idx = 0; idx < panes.length; idx++) {\n boxes.push(panes[idx].chartsBox());\n }\n return boxes;\n },\n addBackgroundPaths: function (multipath) {\n var boxes = this.chartsBoxes();\n for (var idx = 0; idx < boxes.length; idx++) {\n multipath.paths.push(Path.fromRect(boxes[idx].toRect()));\n }\n },\n backgroundContainsPoint: function (point) {\n var boxes = this.chartsBoxes();\n for (var idx = 0; idx < boxes.length; idx++) {\n if (boxes[idx].containsPoint(point)) {\n return true;\n }\n }\n },\n createVisual: function () {\n ChartElement.fn.createVisual.call(this);\n var options = this.options.plotArea;\n var opacity = options.opacity;\n var background = options.background;\n var border = options.border;\n if (border === void 0) {\n border = {};\n }\n if (isTransparent(background)) {\n background = WHITE;\n opacity = 0;\n }\n var bg = this._bgVisual = new drawing.MultiPath({\n fill: {\n color: background,\n opacity: opacity\n },\n stroke: {\n color: border.width ? border.color : '',\n width: border.width,\n dashType: border.dashType\n },\n zIndex: -1\n });\n this.addBackgroundPaths(bg);\n this.appendVisual(bg);\n },\n pointsByCategoryIndex: function (categoryIndex) {\n var charts = this.charts;\n var result = [];\n if (categoryIndex !== null) {\n for (var i = 0; i < charts.length; i++) {\n var chart = charts[i];\n if (chart.pane.options.name === '_navigator') {\n continue;\n }\n var points = charts[i].categoryPoints[categoryIndex];\n if (points && points.length) {\n for (var j = 0; j < points.length; j++) {\n var point = points[j];\n if (point && defined(point.value) && point.value !== null) {\n result.push(point);\n }\n }\n }\n }\n }\n return result;\n },\n pointsBySeriesIndex: function (seriesIndex) {\n return this.filterPoints(function (point) {\n return point.series.index === seriesIndex;\n });\n },\n pointsBySeriesName: function (name) {\n return this.filterPoints(function (point) {\n return point.series.name === name;\n });\n },\n filterPoints: function (callback) {\n var charts = this.charts;\n var result = [];\n for (var i = 0; i < charts.length; i++) {\n var chart = charts[i];\n var points = chart.points;\n for (var j = 0; j < points.length; j++) {\n var point = points[j];\n if (point && callback(point)) {\n result.push(point);\n }\n }\n }\n return result;\n },\n findPoint: function (callback) {\n var charts = this.charts;\n for (var i = 0; i < charts.length; i++) {\n var chart = charts[i];\n var points = chart.points;\n for (var j = 0; j < points.length; j++) {\n var point = points[j];\n if (point && callback(point)) {\n return point;\n }\n }\n }\n },\n paneByPoint: function (point) {\n var panes = this.panes;\n for (var i = 0; i < panes.length; i++) {\n var pane = panes[i];\n if (pane.box.containsPoint(point)) {\n return pane;\n }\n }\n }\n });\n function axisGroupBox(axes) {\n var length = axes.length;\n var box;\n if (length > 0) {\n for (var i = 0; i < length; i++) {\n var axisBox = axes[i].contentBox();\n if (!box) {\n box = axisBox.clone();\n } else {\n box.wrap(axisBox);\n }\n }\n }\n return box || new Box();\n }\n function paneAnchor(axes, pane) {\n for (var i = 0; i < axes.length; i++) {\n var anchor = axes[i];\n if (anchor && anchor.pane === pane) {\n return anchor;\n }\n }\n }\n function isTransparent(color) {\n return color === '' || color === null || color === 'none' || color === 'transparent' || !defined(color);\n }\n setDefaultOptions(PlotAreaBase, {\n series: [],\n plotArea: { margin: {} },\n background: '',\n border: {\n color: BLACK,\n width: 0\n },\n legend: {\n inactiveItems: {\n labels: { color: '#919191' },\n markers: { color: '#919191' }\n }\n }\n });\n var PlotAreaEventsMixin = {\n hover: function (chart, e) {\n this._dispatchEvent(chart, e, PLOT_AREA_HOVER);\n },\n click: function (chart, e) {\n this._dispatchEvent(chart, e, PLOT_AREA_CLICK);\n }\n };\n var SeriesAggregator = Class.extend({\n init: function (series, binder, defaultAggregates) {\n var canonicalFields = binder.canonicalFields(series);\n var valueFields = binder.valueFields(series);\n var sourceFields = binder.sourceFields(series, canonicalFields);\n var seriesFields = this._seriesFields = [];\n var defaults = defaultAggregates.query(series.type);\n var rootAggregate = series.aggregate || defaults;\n this._series = series;\n this._binder = binder;\n for (var i = 0; i < canonicalFields.length; i++) {\n var field = canonicalFields[i];\n var fieldAggregate = void 0;\n if (isObject(rootAggregate)) {\n fieldAggregate = rootAggregate[field];\n } else if (i === 0 || inArray(field, valueFields)) {\n fieldAggregate = rootAggregate;\n } else {\n break;\n }\n if (fieldAggregate) {\n seriesFields.push({\n canonicalName: field,\n name: sourceFields[i],\n transform: isFunction(fieldAggregate) ? fieldAggregate : Aggregates[fieldAggregate]\n });\n }\n }\n },\n aggregatePoints: function (srcPoints, group) {\n var this$1 = this;\n var ref = this;\n var series = ref._series;\n var seriesFields = ref._seriesFields;\n var data = this._bindPoints(srcPoints || []);\n var firstDataItem = data.dataItems[0];\n var result = {};\n if (firstDataItem && !isNumber(firstDataItem) && !isArray(firstDataItem)) {\n var fn = function () {\n };\n fn.prototype = firstDataItem;\n result = new fn();\n }\n for (var i = 0; i < seriesFields.length; i++) {\n var field = seriesFields[i];\n var srcValues = this$1._bindField(data.values, field.canonicalName);\n var value = field.transform(srcValues, series, data.dataItems, group);\n if (value !== null && isObject(value) && !defined(value.length) && !(value instanceof Date)) {\n result = value;\n break;\n } else {\n if (defined(value)) {\n setValue(field.name, result, value);\n }\n }\n }\n return result;\n },\n _bindPoints: function (points) {\n var ref = this;\n var binder = ref._binder;\n var series = ref._series;\n var values = [];\n var dataItems = [];\n for (var i = 0; i < points.length; i++) {\n var pointIx = points[i];\n values.push(binder.bindPoint(series, pointIx));\n dataItems.push(series.data[pointIx]);\n }\n return {\n values: values,\n dataItems: dataItems\n };\n },\n _bindField: function (data, field) {\n var values = [];\n var count = data.length;\n for (var i = 0; i < count; i++) {\n var item = data[i];\n var valueFields = item.valueFields;\n var value = void 0;\n if (defined(valueFields[field])) {\n value = valueFields[field];\n } else {\n value = item.fields[field];\n }\n values.push(value);\n }\n return values;\n }\n });\n function setValue(fieldName, target, value) {\n var parentObj = target;\n var field = fieldName;\n if (fieldName.indexOf('.') > -1) {\n var parts = fieldName.split('.');\n while (parts.length > 1) {\n field = parts.shift();\n if (!defined(parentObj[field])) {\n parentObj[field] = {};\n }\n parentObj = parentObj[field];\n }\n field = parts.shift();\n }\n parentObj[field] = value;\n }\n var DefaultAggregates = Class.extend({\n init: function () {\n this._defaults = {};\n },\n register: function (seriesTypes, aggregates) {\n var this$1 = this;\n for (var i = 0; i < seriesTypes.length; i++) {\n this$1._defaults[seriesTypes[i]] = aggregates;\n }\n },\n query: function (seriesType) {\n return this._defaults[seriesType];\n }\n });\n DefaultAggregates.current = new DefaultAggregates();\n var RangeBar = Bar.extend({\n createLabel: function () {\n var labels = this.options.labels;\n var fromOptions = deepExtend({}, labels, labels.from);\n var toOptions = deepExtend({}, labels, labels.to);\n if (fromOptions.visible) {\n this.labelFrom = this._createLabel(fromOptions);\n this.append(this.labelFrom);\n }\n if (toOptions.visible) {\n this.labelTo = this._createLabel(toOptions);\n this.append(this.labelTo);\n }\n },\n _createLabel: function (options) {\n var labelTemplate = getTemplate(options);\n var labelText;\n if (labelTemplate) {\n labelText = labelTemplate({\n dataItem: this.dataItem,\n category: this.category,\n value: this.value,\n percentage: this.percentage,\n runningTotal: this.runningTotal,\n total: this.total,\n series: this.series\n });\n } else {\n labelText = this.formatValue(options.format);\n }\n return new BarLabel(labelText, deepExtend({ vertical: this.options.vertical }, options));\n },\n reflow: function (targetBox) {\n this.render();\n var ref = this;\n var labelFrom = ref.labelFrom;\n var labelTo = ref.labelTo;\n var value = ref.value;\n this.box = targetBox;\n if (labelFrom) {\n labelFrom.options.aboveAxis = value.from > value.to;\n labelFrom.reflow(targetBox);\n }\n if (labelTo) {\n labelTo.options.aboveAxis = value.to > value.from;\n labelTo.reflow(targetBox);\n }\n if (this.note) {\n this.note.reflow(targetBox);\n }\n }\n });\n RangeBar.prototype.defaults = deepExtend({}, RangeBar.prototype.defaults, {\n labels: { format: '{0} - {1}' },\n tooltip: { format: '{1}' }\n });\n var RangeBarChart = BarChart.extend({\n pointType: function () {\n return RangeBar;\n },\n pointValue: function (data) {\n return data.valueFields;\n },\n formatPointValue: function (point, format) {\n if (point.value.from === null && point.value.to === null) {\n return '';\n }\n return this.chartService.format.auto(format, point.value.from, point.value.to);\n },\n plotRange: function (point) {\n if (!point) {\n return 0;\n }\n return [\n point.value.from,\n point.value.to\n ];\n },\n updateRange: function (value, fields) {\n var axisName = fields.series.axis;\n var from = value.from;\n var to = value.to;\n var axisRange = this.valueAxisRanges[axisName];\n if (value !== null && isNumber(from) && isNumber(to)) {\n axisRange = this.valueAxisRanges[axisName] = axisRange || {\n min: MAX_VALUE,\n max: MIN_VALUE\n };\n axisRange.min = Math.min(axisRange.min, from);\n axisRange.max = Math.max(axisRange.max, from);\n axisRange.min = Math.min(axisRange.min, to);\n axisRange.max = Math.max(axisRange.max, to);\n }\n },\n aboveAxis: function (point) {\n var value = point.value;\n return value.from < value.to;\n }\n });\n RangeBarChart.prototype.plotLimits = CategoricalChart.prototype.plotLimits;\n var OHLCPoint = Candlestick.extend({\n reflow: function (box) {\n var ref = this;\n var options = ref.options;\n var value = ref.value;\n var chart = ref.owner;\n var valueAxis = chart.seriesValueAxis(options);\n var oPoints = [];\n var cPoints = [];\n var lhPoints = [];\n var lhSlot = valueAxis.getSlot(value.low, value.high);\n var oSlot = valueAxis.getSlot(value.open, value.open);\n var cSlot = valueAxis.getSlot(value.close, value.close);\n oSlot.x1 = cSlot.x1 = lhSlot.x1 = box.x1;\n oSlot.x2 = cSlot.x2 = lhSlot.x2 = box.x2;\n var mid = lhSlot.center().x;\n oPoints.push([\n oSlot.x1,\n oSlot.y1\n ]);\n oPoints.push([\n mid,\n oSlot.y1\n ]);\n cPoints.push([\n mid,\n cSlot.y1\n ]);\n cPoints.push([\n cSlot.x2,\n cSlot.y1\n ]);\n lhPoints.push([\n mid,\n lhSlot.y1\n ]);\n lhPoints.push([\n mid,\n lhSlot.y2\n ]);\n this.lines = [\n oPoints,\n cPoints,\n lhPoints\n ];\n this.box = lhSlot.clone().wrap(oSlot.clone().wrap(cSlot));\n this.reflowNote();\n },\n createBody: function () {\n }\n });\n var OHLCChart = CandlestickChart.extend({\n pointType: function () {\n return OHLCPoint;\n }\n });\n var WaterfallSegment = ChartElement.extend({\n init: function (from, to, series) {\n ChartElement.fn.init.call(this);\n this.from = from;\n this.to = to;\n this.series = series;\n },\n linePoints: function () {\n var from = this.from;\n var ref = this;\n var fromBox = ref.from.box;\n var toBox = ref.to.box;\n var points = [];\n if (from.isVertical) {\n var y = from.aboveAxis ? fromBox.y1 : fromBox.y2;\n points.push([\n fromBox.x1,\n y\n ], [\n toBox.x2,\n y\n ]);\n } else {\n var x = from.aboveAxis ? fromBox.x2 : fromBox.x1;\n points.push([\n x,\n fromBox.y1\n ], [\n x,\n toBox.y2\n ]);\n }\n return points;\n },\n createVisual: function () {\n ChartElement.fn.createVisual.call(this);\n var line = this.series.line || {};\n var path = Path.fromPoints(this.linePoints(), {\n stroke: {\n color: line.color,\n width: line.width,\n opacity: line.opacity,\n dashType: line.dashType\n }\n });\n alignPathToPixel(path);\n this.visual.append(path);\n }\n });\n setDefaultOptions(WaterfallSegment, {\n animation: {\n type: FADEIN,\n delay: INITIAL_ANIMATION_DURATION\n }\n });\n var WaterfallChart = BarChart.extend({\n render: function () {\n BarChart.fn.render.call(this);\n this.createSegments();\n },\n traverseDataPoints: function (callback) {\n var series = this.options.series;\n var categories = this.categoryAxis.options.categories || [];\n var totalCategories = categoriesCount(series);\n var isVertical = !this.options.invertAxes;\n for (var seriesIx = 0; seriesIx < series.length; seriesIx++) {\n var currentSeries = series[seriesIx];\n var total = 0;\n var runningTotal = 0;\n for (var categoryIx = 0; categoryIx < totalCategories; categoryIx++) {\n var data = SeriesBinder.current.bindPoint(currentSeries, categoryIx);\n var value = data.valueFields.value;\n var summary = data.fields.summary;\n var from = total;\n var to = void 0;\n if (summary) {\n if (summary.toLowerCase() === 'total') {\n data.valueFields.value = total;\n from = 0;\n to = total;\n } else {\n data.valueFields.value = runningTotal;\n to = from - runningTotal;\n runningTotal = 0;\n }\n } else if (isNumber(value)) {\n runningTotal += value;\n total += value;\n to = total;\n }\n callback(data, {\n category: categories[categoryIx],\n categoryIx: categoryIx,\n series: currentSeries,\n seriesIx: seriesIx,\n total: total,\n runningTotal: runningTotal,\n from: from,\n to: to,\n isVertical: isVertical\n });\n }\n }\n },\n updateRange: function (value, fields) {\n BarChart.fn.updateRange.call(this, { value: fields.to }, fields);\n },\n aboveAxis: function (point) {\n return point.value >= 0;\n },\n plotRange: function (point) {\n return [\n point.from,\n point.to\n ];\n },\n createSegments: function () {\n var this$1 = this;\n var series = this.options.series;\n var seriesPoints = this.seriesPoints;\n var segments = this.segments = [];\n for (var seriesIx = 0; seriesIx < series.length; seriesIx++) {\n var currentSeries = series[seriesIx];\n var points = seriesPoints[seriesIx];\n if (points) {\n var prevPoint = void 0;\n for (var pointIx = 0; pointIx < points.length; pointIx++) {\n var point = points[pointIx];\n if (point && prevPoint) {\n var segment = new WaterfallSegment(prevPoint, point, currentSeries);\n segments.push(segment);\n this$1.append(segment);\n }\n prevPoint = point;\n }\n }\n }\n }\n });\n function filterSeriesByType(series, types) {\n var result = [];\n var seriesTypes = [].concat(types);\n for (var idx = 0; idx < series.length; idx++) {\n var currentSeries = series[idx];\n if (inArray(currentSeries.type, seriesTypes)) {\n result.push(currentSeries);\n }\n }\n return result;\n }\n function equalsIgnoreCase(a, b) {\n if (a && b) {\n return a.toLowerCase() === b.toLowerCase();\n }\n return a === b;\n }\n function isDateAxis(axisOptions, sampleCategory) {\n var type = axisOptions.type;\n var dateCategory = sampleCategory instanceof Date;\n return !type && dateCategory || equalsIgnoreCase(type, DATE);\n }\n function appendIfNotNull(array, element) {\n if (element !== null) {\n array.push(element);\n }\n }\n function singleItemOrArray(array) {\n return array.length === 1 ? array[0] : array;\n }\n function getDateField(field, row, intlService) {\n if (row === null) {\n return row;\n }\n var key = '_date_' + field;\n var value = row[key];\n if (!value) {\n value = parseDate(intlService, getter(field, true)(row));\n row[key] = value;\n }\n return value;\n }\n var CategoricalPlotArea = PlotAreaBase.extend({\n initFields: function (series) {\n var this$1 = this;\n this.namedCategoryAxes = {};\n this.namedValueAxes = {};\n this.valueAxisRangeTracker = new AxisGroupRangeTracker();\n if (series.length > 0) {\n this.invertAxes = inArray(series[0].type, [\n BAR,\n BULLET,\n VERTICAL_LINE,\n VERTICAL_AREA,\n RANGE_BAR,\n HORIZONTAL_WATERFALL,\n VERTICAL_BOX_PLOT\n ]);\n for (var i = 0; i < series.length; i++) {\n var stack = series[i].stack;\n if (stack && stack.type === '100%') {\n this$1.stack100 = true;\n break;\n }\n }\n }\n },\n render: function (panes) {\n if (panes === void 0) {\n panes = this.panes;\n }\n this.createCategoryAxes(panes);\n this.aggregateCategories(panes);\n this.createCategoryAxesLabels(panes);\n this.createCharts(panes);\n this.createValueAxes(panes);\n },\n removeAxis: function (axis) {\n var axisName = axis.options.name;\n PlotAreaBase.fn.removeAxis.call(this, axis);\n if (axis instanceof CategoryAxis) {\n delete this.namedCategoryAxes[axisName];\n } else {\n this.valueAxisRangeTracker.reset(axisName);\n delete this.namedValueAxes[axisName];\n }\n if (axis === this.categoryAxis) {\n delete this.categoryAxis;\n }\n if (axis === this.valueAxis) {\n delete this.valueAxis;\n }\n },\n createCharts: function (panes) {\n var this$1 = this;\n var seriesByPane = this.groupSeriesByPane();\n for (var i = 0; i < panes.length; i++) {\n var pane = panes[i];\n var paneSeries = seriesByPane[pane.options.name || 'default'] || [];\n this$1.addToLegend(paneSeries);\n var visibleSeries = this$1.filterVisibleSeries(paneSeries);\n if (!visibleSeries) {\n continue;\n }\n var groups = this$1.groupSeriesByCategoryAxis(visibleSeries);\n for (var groupIx = 0; groupIx < groups.length; groupIx++) {\n this$1.createChartGroup(groups[groupIx], pane);\n }\n }\n },\n createChartGroup: function (series, pane) {\n this.createAreaChart(filterSeriesByType(series, [\n AREA,\n VERTICAL_AREA\n ]), pane);\n this.createBarChart(filterSeriesByType(series, [\n COLUMN,\n BAR\n ]), pane);\n this.createRangeBarChart(filterSeriesByType(series, [\n RANGE_COLUMN,\n RANGE_BAR\n ]), pane);\n this.createBulletChart(filterSeriesByType(series, [\n BULLET,\n VERTICAL_BULLET\n ]), pane);\n this.createCandlestickChart(filterSeriesByType(series, CANDLESTICK), pane);\n this.createBoxPlotChart(filterSeriesByType(series, [\n BOX_PLOT,\n VERTICAL_BOX_PLOT\n ]), pane);\n this.createOHLCChart(filterSeriesByType(series, OHLC), pane);\n this.createWaterfallChart(filterSeriesByType(series, [\n WATERFALL,\n HORIZONTAL_WATERFALL\n ]), pane);\n this.createLineChart(filterSeriesByType(series, [\n LINE,\n VERTICAL_LINE\n ]), pane);\n },\n aggregateCategories: function (panes) {\n var this$1 = this;\n var series = this.srcSeries || this.series;\n var processedSeries = [];\n for (var i = 0; i < series.length; i++) {\n var currentSeries = series[i];\n var categoryAxis = this$1.seriesCategoryAxis(currentSeries);\n var axisPane = this$1.findPane(categoryAxis.options.pane);\n var dateAxis = equalsIgnoreCase(categoryAxis.options.type, DATE);\n if ((dateAxis || currentSeries.categoryField) && inArray(axisPane, panes)) {\n currentSeries = this$1.aggregateSeries(currentSeries, categoryAxis);\n } else if (isNumber(categoryAxis.options.min) || isNumber(categoryAxis.options.max)) {\n currentSeries = this$1.filterSeries(currentSeries, categoryAxis);\n }\n processedSeries.push(currentSeries);\n }\n this.srcSeries = series;\n this.series = processedSeries;\n },\n filterSeries: function (series, categoryAxis) {\n var range = categoryAxis.totalRangeIndices();\n var justified = categoryAxis.options.justified;\n var outOfRangePoints = inArray(series.type, [\n LINE,\n VERTICAL_LINE,\n AREA,\n VERTICAL_AREA\n ]);\n range.min = isNumber(categoryAxis.options.min) ? Math.floor(range.min) : 0;\n if (isNumber(categoryAxis.options.max)) {\n range.max = justified ? Math.floor(range.max) + 1 : Math.ceil(range.max);\n } else {\n range.max = series.data.length;\n }\n var currentSeries = deepExtend({}, series);\n if (outOfRangePoints) {\n var minCategory = range.min - 1;\n var srcCategories = categoryAxis.options.srcCategories || [];\n if (minCategory >= 0 && minCategory < currentSeries.data.length) {\n currentSeries._outOfRangeMinPoint = {\n item: currentSeries.data[minCategory],\n category: srcCategories[minCategory],\n categoryIx: -1\n };\n }\n if (range.max < currentSeries.data.length) {\n currentSeries._outOfRangeMaxPoint = {\n item: currentSeries.data[range.max],\n category: srcCategories[range.max],\n categoryIx: range.max - range.min\n };\n }\n }\n categoryAxis._seriesMax = Math.max(categoryAxis._seriesMax || 0, currentSeries.data.length);\n currentSeries.data = (currentSeries.data || []).slice(range.min, range.max);\n return currentSeries;\n },\n aggregateSeries: function (series, categoryAxis) {\n var this$1 = this;\n var outOfRangePoints = inArray(series.type, [\n LINE,\n VERTICAL_LINE,\n AREA,\n VERTICAL_AREA\n ]);\n var ref = categoryAxis.options;\n var categories = ref.categories;\n var srcCategories = ref.srcCategories;\n if (srcCategories === void 0) {\n srcCategories = categories;\n }\n var dataItems = ref.dataItems;\n if (dataItems === void 0) {\n dataItems = [];\n }\n var dateAxis = equalsIgnoreCase(categoryAxis.options.type, DATE);\n var aggregatorSeries = deepExtend({}, series);\n var result = deepExtend({}, series);\n var srcData = series.data;\n var srcPoints = [];\n var outOfRangeMinIdx = MIN_VALUE;\n var outOfRangeMaxIdx = MAX_VALUE;\n var getFn = getField;\n var outOfRangeMinCategory, outOfRangeMaxCategory;\n if (dateAxis) {\n getFn = getDateField;\n }\n for (var i = 0; i < srcData.length; i++) {\n var category = void 0;\n if (series.categoryField) {\n category = getFn(series.categoryField, srcData[i], this$1.chartService.intl);\n } else {\n category = srcCategories[i];\n }\n if (defined(category)) {\n var categoryIx = categoryAxis.categoryIndex(category);\n if (0 <= categoryIx && categoryIx < categories.length) {\n srcPoints[categoryIx] = srcPoints[categoryIx] || [];\n srcPoints[categoryIx].push(i);\n } else if (outOfRangePoints) {\n if (categoryIx < 0) {\n if (categoryIx === outOfRangeMinIdx) {\n outOfRangeMinCategory.points.push(i);\n } else if (categoryIx > outOfRangeMinIdx) {\n outOfRangeMinIdx = categoryIx;\n outOfRangeMinCategory = {\n category: category,\n points: [i]\n };\n }\n } else if (categoryIx >= categories.length) {\n if (categoryIx === outOfRangeMaxIdx) {\n outOfRangeMaxCategory.points.push(i);\n } else if (categoryIx < outOfRangeMaxIdx) {\n outOfRangeMaxIdx = categoryIx;\n outOfRangeMaxCategory = {\n category: category,\n points: [i]\n };\n }\n }\n }\n }\n }\n var aggregator = new SeriesAggregator(aggregatorSeries, SeriesBinder.current, DefaultAggregates.current);\n var data = result.data = [];\n for (var i$1 = 0; i$1 < categories.length; i$1++) {\n data[i$1] = aggregator.aggregatePoints(srcPoints[i$1], categories[i$1]);\n if (srcPoints[i$1]) {\n dataItems[i$1] = data[i$1];\n }\n }\n if (outOfRangeMinCategory && data.length) {\n result._outOfRangeMinPoint = {\n item: aggregator.aggregatePoints(outOfRangeMinCategory.points, outOfRangeMinCategory.category),\n categoryIx: outOfRangeMinIdx,\n category: outOfRangeMinCategory.category\n };\n }\n if (outOfRangeMaxCategory && data.length) {\n result._outOfRangeMaxPoint = {\n item: aggregator.aggregatePoints(outOfRangeMaxCategory.points, outOfRangeMaxCategory.category),\n categoryIx: outOfRangeMaxIdx,\n category: outOfRangeMaxCategory.category\n };\n }\n categoryAxis.options.dataItems = dataItems;\n return result;\n },\n appendChart: function (chart, pane) {\n var series = chart.options.series;\n var categoryAxis = this.seriesCategoryAxis(series[0]);\n var categories = categoryAxis.options.categories;\n var categoriesToAdd = Math.max(0, categoriesCount(series) - categories.length);\n while (categoriesToAdd--) {\n categories.push('');\n }\n this.valueAxisRangeTracker.update(chart.valueAxisRanges);\n PlotAreaBase.fn.appendChart.call(this, chart, pane);\n },\n seriesPaneName: function (series) {\n var options = this.options;\n var axisName = series.axis;\n var axisOptions = [].concat(options.valueAxis);\n var axis = grep(axisOptions, function (a) {\n return a.name === axisName;\n })[0];\n var panes = options.panes || [{}];\n var defaultPaneName = (panes[0] || {}).name || 'default';\n var paneName = (axis || {}).pane || defaultPaneName;\n return paneName;\n },\n seriesCategoryAxis: function (series) {\n var axisName = series.categoryAxis;\n var axis = axisName ? this.namedCategoryAxes[axisName] : this.categoryAxis;\n if (!axis) {\n throw new Error('Unable to locate category axis with name ' + axisName);\n }\n return axis;\n },\n stackableChartOptions: function (firstSeries, pane) {\n var stack = firstSeries.stack;\n var isStacked100 = stack && stack.type === '100%';\n var clip = pane.options.clip;\n return {\n isStacked: stack,\n isStacked100: isStacked100,\n clip: clip\n };\n },\n groupSeriesByCategoryAxis: function (series) {\n var categoryAxes = [];\n var unique = {};\n for (var idx = 0; idx < series.length; idx++) {\n var name = series[idx].categoryAxis || '$$default$$';\n if (!unique.hasOwnProperty(name)) {\n unique[name] = true;\n categoryAxes.push(name);\n }\n }\n var groups = [];\n for (var axisIx = 0; axisIx < categoryAxes.length; axisIx++) {\n var axis = categoryAxes[axisIx];\n var axisSeries = groupSeries(series, axis, axisIx);\n if (axisSeries.length === 0) {\n continue;\n }\n groups.push(axisSeries);\n }\n return groups;\n },\n createBarChart: function (series, pane) {\n if (series.length === 0) {\n return;\n }\n var firstSeries = series[0];\n var barChart = new BarChart(this, $.extend({\n series: series,\n invertAxes: this.invertAxes,\n gap: firstSeries.gap,\n spacing: firstSeries.spacing\n }, this.stackableChartOptions(firstSeries, pane)));\n this.appendChart(barChart, pane);\n },\n createRangeBarChart: function (series, pane) {\n if (series.length === 0) {\n return;\n }\n var firstSeries = series[0];\n var rangeColumnChart = new RangeBarChart(this, {\n series: series,\n invertAxes: this.invertAxes,\n gap: firstSeries.gap,\n spacing: firstSeries.spacing\n });\n this.appendChart(rangeColumnChart, pane);\n },\n createBulletChart: function (series, pane) {\n if (series.length === 0) {\n return;\n }\n var firstSeries = series[0];\n var bulletChart = new BulletChart(this, {\n series: series,\n invertAxes: this.invertAxes,\n gap: firstSeries.gap,\n spacing: firstSeries.spacing,\n clip: pane.options.clip\n });\n this.appendChart(bulletChart, pane);\n },\n createLineChart: function (series, pane) {\n if (series.length === 0) {\n return;\n }\n var firstSeries = series[0];\n var lineChart = new LineChart(this, $.extend({\n invertAxes: this.invertAxes,\n series: series\n }, this.stackableChartOptions(firstSeries, pane)));\n this.appendChart(lineChart, pane);\n },\n createAreaChart: function (series, pane) {\n if (series.length === 0) {\n return;\n }\n var firstSeries = series[0];\n var areaChart = new AreaChart(this, $.extend({\n invertAxes: this.invertAxes,\n series: series\n }, this.stackableChartOptions(firstSeries, pane)));\n this.appendChart(areaChart, pane);\n },\n createOHLCChart: function (series, pane) {\n if (series.length === 0) {\n return;\n }\n var firstSeries = series[0];\n var chart = new OHLCChart(this, {\n invertAxes: this.invertAxes,\n gap: firstSeries.gap,\n series: series,\n spacing: firstSeries.spacing,\n clip: pane.options.clip\n });\n this.appendChart(chart, pane);\n },\n createCandlestickChart: function (series, pane) {\n if (series.length === 0) {\n return;\n }\n var firstSeries = series[0];\n var chart = new CandlestickChart(this, {\n invertAxes: this.invertAxes,\n gap: firstSeries.gap,\n series: series,\n spacing: firstSeries.spacing,\n clip: pane.options.clip\n });\n this.appendChart(chart, pane);\n },\n createBoxPlotChart: function (series, pane) {\n if (series.length === 0) {\n return;\n }\n var firstSeries = series[0];\n var chart = new BoxPlotChart(this, {\n invertAxes: this.invertAxes,\n gap: firstSeries.gap,\n series: series,\n spacing: firstSeries.spacing,\n clip: pane.options.clip\n });\n this.appendChart(chart, pane);\n },\n createWaterfallChart: function (series, pane) {\n if (series.length === 0) {\n return;\n }\n var firstSeries = series[0];\n var waterfallChart = new WaterfallChart(this, {\n series: series,\n invertAxes: this.invertAxes,\n gap: firstSeries.gap,\n spacing: firstSeries.spacing\n });\n this.appendChart(waterfallChart, pane);\n },\n axisRequiresRounding: function (categoryAxisName, categoryAxisIndex) {\n var this$1 = this;\n var centeredSeries = filterSeriesByType(this.series, EQUALLY_SPACED_SERIES);\n for (var seriesIx = 0; seriesIx < this.series.length; seriesIx++) {\n var currentSeries = this$1.series[seriesIx];\n if (currentSeries.type === LINE || currentSeries.type === AREA) {\n var line = currentSeries.line;\n if (line && line.style === STEP) {\n centeredSeries.push(currentSeries);\n }\n }\n }\n for (var seriesIx$1 = 0; seriesIx$1 < centeredSeries.length; seriesIx$1++) {\n var seriesAxis = centeredSeries[seriesIx$1].categoryAxis || '';\n if (seriesAxis === categoryAxisName || !seriesAxis && categoryAxisIndex === 0) {\n return true;\n }\n }\n },\n aggregatedAxis: function (categoryAxisName, categoryAxisIndex) {\n var series = this.series;\n for (var seriesIx = 0; seriesIx < series.length; seriesIx++) {\n var seriesAxis = series[seriesIx].categoryAxis || '';\n if ((seriesAxis === categoryAxisName || !seriesAxis && categoryAxisIndex === 0) && series[seriesIx].categoryField) {\n return true;\n }\n }\n },\n createCategoryAxesLabels: function () {\n var axes = this.axes;\n for (var i = 0; i < axes.length; i++) {\n if (axes[i] instanceof CategoryAxis) {\n axes[i].createLabels();\n }\n }\n },\n createCategoryAxes: function (panes) {\n var this$1 = this;\n var invertAxes = this.invertAxes;\n var definitions = [].concat(this.options.categoryAxis);\n var axes = [];\n for (var i = 0; i < definitions.length; i++) {\n var axisOptions = definitions[i];\n var axisPane = this$1.findPane(axisOptions.pane);\n if (inArray(axisPane, panes)) {\n var name = axisOptions.name;\n var categories = axisOptions.categories;\n if (categories === void 0) {\n categories = [];\n }\n axisOptions = deepExtend({\n vertical: invertAxes,\n axisCrossingValue: invertAxes ? MAX_VALUE : 0\n }, axisOptions);\n if (!defined(axisOptions.justified)) {\n axisOptions.justified = this$1.isJustified();\n }\n if (this$1.axisRequiresRounding(name, i)) {\n axisOptions.justified = false;\n }\n var categoryAxis = void 0;\n if (isDateAxis(axisOptions, categories[0])) {\n categoryAxis = new DateCategoryAxis(axisOptions, this$1.chartService);\n } else {\n categoryAxis = new CategoryAxis(axisOptions, this$1.chartService);\n }\n if (name) {\n if (this$1.namedCategoryAxes[name]) {\n throw new Error('Category axis with name ' + name + ' is already defined');\n }\n this$1.namedCategoryAxes[name] = categoryAxis;\n }\n categoryAxis.axisIndex = i;\n axes.push(categoryAxis);\n this$1.appendAxis(categoryAxis);\n }\n }\n var primaryAxis = this.categoryAxis || axes[0];\n this.categoryAxis = primaryAxis;\n if (invertAxes) {\n this.axisY = primaryAxis;\n } else {\n this.axisX = primaryAxis;\n }\n },\n isJustified: function () {\n var series = this.series;\n for (var i = 0; i < series.length; i++) {\n var currentSeries = series[i];\n if (!inArray(currentSeries.type, [\n AREA,\n VERTICAL_AREA\n ])) {\n return false;\n }\n }\n return true;\n },\n createValueAxes: function (panes) {\n var this$1 = this;\n var tracker = this.valueAxisRangeTracker;\n var defaultRange = tracker.query();\n var definitions = [].concat(this.options.valueAxis);\n var invertAxes = this.invertAxes;\n var baseOptions = { vertical: !invertAxes };\n var axes = [];\n if (this.stack100) {\n baseOptions.roundToMajorUnit = false;\n baseOptions.labels = { format: 'P0' };\n }\n for (var i = 0; i < definitions.length; i++) {\n var axisOptions = definitions[i];\n var axisPane = this$1.findPane(axisOptions.pane);\n if (inArray(axisPane, panes)) {\n var name = axisOptions.name;\n var defaultAxisRange = equalsIgnoreCase(axisOptions.type, LOGARITHMIC) ? {\n min: 0.1,\n max: 1\n } : {\n min: 0,\n max: 1\n };\n var range = tracker.query(name) || defaultRange || defaultAxisRange;\n if (i === 0 && range && defaultRange) {\n range.min = Math.min(range.min, defaultRange.min);\n range.max = Math.max(range.max, defaultRange.max);\n }\n var axisType = void 0;\n if (equalsIgnoreCase(axisOptions.type, LOGARITHMIC)) {\n axisType = dataviz.LogarithmicAxis;\n } else {\n axisType = dataviz.NumericAxis;\n }\n var valueAxis = new axisType(range.min, range.max, deepExtend({}, baseOptions, axisOptions), this$1.chartService);\n if (name) {\n if (this$1.namedValueAxes[name]) {\n throw new Error('Value axis with name ' + name + ' is already defined');\n }\n this$1.namedValueAxes[name] = valueAxis;\n }\n valueAxis.axisIndex = i;\n axes.push(valueAxis);\n this$1.appendAxis(valueAxis);\n }\n }\n var primaryAxis = this.valueAxis || axes[0];\n this.valueAxis = primaryAxis;\n if (invertAxes) {\n this.axisX = primaryAxis;\n } else {\n this.axisY = primaryAxis;\n }\n },\n _dispatchEvent: function (chart, e, eventType) {\n var coords = chart._eventCoordinates(e);\n var point = new Point(coords.x, coords.y);\n var pane = this.pointPane(point);\n var categories = [];\n var values = [];\n if (!pane) {\n return;\n }\n var allAxes = pane.axes;\n for (var i = 0; i < allAxes.length; i++) {\n var axis = allAxes[i];\n if (axis.getValue) {\n appendIfNotNull(values, axis.getValue(point));\n } else {\n appendIfNotNull(categories, axis.getCategory(point));\n }\n }\n if (categories.length === 0) {\n appendIfNotNull(categories, this.categoryAxis.getCategory(point));\n }\n if (categories.length > 0 && values.length > 0) {\n chart.trigger(eventType, {\n element: eventElement(e),\n originalEvent: e,\n category: singleItemOrArray(categories),\n value: singleItemOrArray(values)\n });\n }\n },\n pointPane: function (point) {\n var panes = this.panes;\n for (var i = 0; i < panes.length; i++) {\n var currentPane = panes[i];\n if (currentPane.contentBox.containsPoint(point)) {\n return currentPane;\n }\n }\n },\n updateAxisOptions: function (axis, options) {\n var axesOptions = axis instanceof CategoryAxis ? [].concat(this.options.categoryAxis) : [].concat(this.options.valueAxis);\n deepExtend(axesOptions[axis.axisIndex], options);\n }\n });\n function groupSeries(series, axis, axisIx) {\n return grep(series, function (s) {\n return axisIx === 0 && !s.categoryAxis || s.categoryAxis === axis;\n });\n }\n setDefaultOptions(CategoricalPlotArea, {\n categoryAxis: { categories: [] },\n valueAxis: {}\n });\n deepExtend(CategoricalPlotArea.prototype, PlotAreaEventsMixin);\n var Highlight = Class.extend({\n init: function () {\n this._points = [];\n },\n destroy: function () {\n this._points = [];\n },\n show: function (points) {\n var this$1 = this;\n var arrayPoints = [].concat(points);\n this.hide();\n for (var i = 0; i < arrayPoints.length; i++) {\n var point = arrayPoints[i];\n if (point && point.toggleHighlight && point.hasHighlight()) {\n this$1.togglePointHighlight(point, true);\n this$1._points.push(point);\n }\n }\n },\n togglePointHighlight: function (point, show) {\n var toggleHandler = (point.options.highlight || {}).toggle;\n if (toggleHandler) {\n var eventArgs = {\n category: point.category,\n series: point.series,\n dataItem: point.dataItem,\n value: point.value,\n stackValue: point.stackValue,\n preventDefault: preventDefault,\n visual: point.highlightVisual(),\n show: show\n };\n toggleHandler(eventArgs);\n if (!eventArgs._defaultPrevented) {\n point.toggleHighlight(show);\n }\n } else {\n point.toggleHighlight(show);\n }\n },\n hide: function () {\n var this$1 = this;\n var points = this._points;\n while (points.length) {\n this$1.togglePointHighlight(points.pop(), false);\n }\n },\n isHighlighted: function (element) {\n var points = this._points;\n for (var i = 0; i < points.length; i++) {\n var point = points[i];\n if (element === point) {\n return true;\n }\n }\n return false;\n }\n });\n function preventDefault() {\n this._defaultPrevented = true;\n }\n function acceptKey(e, mouseKey) {\n var key = (mouseKey || '').toLowerCase();\n var event = e.event;\n var accept = key === 'none' && !(event.ctrlKey || event.shiftKey || event.altKey) || event[key + 'Key'];\n return accept;\n }\n function toChartAxisRanges(axisRanges) {\n var ranges = {};\n for (var idx = 0; idx < axisRanges.length; idx++) {\n var axisRange = axisRanges[idx];\n if (axisRange.axis.options.name) {\n ranges[axisRange.axis.options.name] = {\n min: axisRange.range.min,\n max: axisRange.range.max\n };\n }\n }\n return ranges;\n }\n var Pannable = Class.extend({\n init: function (plotArea, options) {\n this.plotArea = plotArea;\n this.options = deepExtend({}, this.options, options);\n },\n start: function (e) {\n this._active = acceptKey(e, this.options.key);\n return this._active;\n },\n move: function (e) {\n if (this._active) {\n var axisRanges = this.axisRanges = this._panAxes(e, X).concat(this._panAxes(e, Y));\n if (axisRanges.length) {\n this.axisRanges = axisRanges;\n return toChartAxisRanges(axisRanges);\n }\n }\n },\n end: function () {\n var active = this._active;\n this._active = false;\n return active;\n },\n pan: function () {\n var ref = this;\n var plotArea = ref.plotArea;\n var axisRanges = ref.axisRanges;\n if (axisRanges.length) {\n for (var idx = 0; idx < axisRanges.length; idx++) {\n var range = axisRanges[idx];\n plotArea.updateAxisOptions(range.axis, range.range);\n }\n plotArea.redraw(plotArea.panes);\n }\n },\n destroy: function () {\n delete this.plotArea;\n },\n _panAxes: function (e, position) {\n var plotArea = this.plotArea;\n var delta = -e[position].delta;\n var lock = (this.options.lock || '').toLowerCase();\n var updatedAxes = [];\n if (delta !== 0 && (lock || '').toLowerCase() !== position) {\n var axes = plotArea.axes;\n for (var idx = 0; idx < axes.length; idx++) {\n var axis = axes[idx];\n if (position === X && !axis.options.vertical || position === Y && axis.options.vertical) {\n var range = axis.pan(delta);\n if (range) {\n range.limitRange = true;\n updatedAxes.push({\n axis: axis,\n range: range\n });\n }\n }\n }\n }\n return updatedAxes;\n }\n });\n Pannable.prototype.options = {\n key: 'none',\n lock: 'none'\n };\n var ZoomSelection = Class.extend({\n init: function (chart, options) {\n this.chart = chart;\n this.options = deepExtend({}, this.options, options);\n this.createElement();\n },\n createElement: function () {\n var marquee = this._marquee = document.createElement('div');\n marquee.className = 'k-marquee';\n var marqueeColor = document.createElement('div');\n marqueeColor.className = 'k-marquee-color';\n marquee.appendChild(marqueeColor);\n },\n removeElement: function () {\n if (this._marquee.parentNode) {\n this._marquee.parentNode.removeChild(this._marquee);\n }\n },\n setStyles: function (styles) {\n elementStyles(this._marquee, styles);\n },\n start: function (e) {\n if (acceptKey(e, this.options.key)) {\n var chart = this.chart;\n var point = chart._eventCoordinates(e);\n var zoomPane = this._zoomPane = chart._plotArea.paneByPoint(point);\n if (zoomPane && zoomPane.clipBox()) {\n var clipBox = zoomPane.clipBox().clone();\n var offset = this._elementOffset();\n clipBox.translate(offset.left, offset.top);\n this._zoomPaneClipBox = clipBox;\n document.body.appendChild(this._marquee);\n this.setStyles({\n left: e.pageX + 1,\n top: e.pageY + 1,\n width: 0,\n height: 0\n });\n return true;\n }\n }\n return false;\n },\n _elementOffset: function () {\n var chartElement = this.chart.element;\n var ref = elementStyles(chartElement, [\n 'paddingLeft',\n 'paddingTop'\n ]);\n var paddingLeft = ref.paddingLeft;\n var paddingTop = ref.paddingTop;\n var offset = dataviz.elementOffset(chartElement);\n return {\n left: paddingLeft + offset.left,\n top: paddingTop + offset.top\n };\n },\n move: function (e) {\n var zoomPane = this._zoomPane;\n if (zoomPane) {\n this.setStyles(this._selectionPosition(e));\n }\n },\n end: function (e) {\n var zoomPane = this._zoomPane;\n if (zoomPane) {\n var elementOffset$$1 = this._elementOffset();\n var selectionPosition = this._selectionPosition(e);\n selectionPosition.left -= elementOffset$$1.left;\n selectionPosition.top -= elementOffset$$1.top;\n var start = {\n x: selectionPosition.left,\n y: selectionPosition.top\n };\n var end = {\n x: selectionPosition.left + selectionPosition.width,\n y: selectionPosition.top + selectionPosition.height\n };\n this._updateAxisRanges(start, end);\n this.removeElement();\n delete this._zoomPane;\n return toChartAxisRanges(this.axisRanges);\n }\n },\n zoom: function () {\n var axisRanges = this.axisRanges;\n if (axisRanges && axisRanges.length) {\n var plotArea = this.chart._plotArea;\n for (var idx = 0; idx < axisRanges.length; idx++) {\n var axisRange = axisRanges[idx];\n plotArea.updateAxisOptions(axisRange.axis, axisRange.range);\n }\n plotArea.redraw(plotArea.panes);\n }\n },\n destroy: function () {\n this.removeElement();\n delete this._marquee;\n delete this.chart;\n },\n _updateAxisRanges: function (start, end) {\n var lock = (this.options.lock || '').toLowerCase();\n var axisRanges = [];\n var axes = this._zoomPane.axes;\n for (var idx = 0; idx < axes.length; idx++) {\n var axis = axes[idx];\n var vertical = axis.options.vertical;\n if (!(lock === X && !vertical) && !(lock === Y && vertical)) {\n var range = axis.pointsRange(start, end);\n if (range) {\n axisRanges.push({\n axis: axis,\n range: range\n });\n }\n }\n }\n this.axisRanges = axisRanges;\n },\n _selectionPosition: function (e) {\n var clipBox = this._zoomPaneClipBox;\n var startLocation = {\n x: e.x.startLocation,\n y: e.y.startLocation\n };\n var pageX = e.x.location;\n var pageY = e.y.location;\n var lock = (this.options.lock || '').toLowerCase();\n var left = Math.min(startLocation.x, pageX);\n var top = Math.min(startLocation.y, pageY);\n var width = Math.abs(startLocation.x - pageX);\n var height = Math.abs(startLocation.y - pageY);\n if (lock === X) {\n left = clipBox.x1;\n width = clipBox.width();\n }\n if (lock === Y) {\n top = clipBox.y1;\n height = clipBox.height();\n }\n if (pageX > clipBox.x2) {\n width = clipBox.x2 - startLocation.x;\n }\n if (pageX < clipBox.x1) {\n width = startLocation.x - clipBox.x1;\n }\n if (pageY > clipBox.y2) {\n height = clipBox.y2 - startLocation.y;\n }\n if (pageY < clipBox.y1) {\n height = startLocation.y - clipBox.y1;\n }\n return {\n left: Math.max(left, clipBox.x1),\n top: Math.max(top, clipBox.y1),\n width: width,\n height: height\n };\n }\n });\n ZoomSelection.prototype.options = {\n key: 'shift',\n lock: 'none'\n };\n var MousewheelZoom = Class.extend({\n init: function (chart, options) {\n this.chart = chart;\n this.options = deepExtend({}, this.options, options);\n },\n updateRanges: function (delta) {\n var lock = (this.options.lock || '').toLowerCase();\n var axisRanges = [];\n var axes = this.chart._plotArea.axes;\n for (var idx = 0; idx < axes.length; idx++) {\n var axis = axes[idx];\n var vertical = axis.options.vertical;\n if (!(lock === X && !vertical) && !(lock === Y && vertical)) {\n var range = axis.zoomRange(-delta);\n if (range) {\n axisRanges.push({\n axis: axis,\n range: range\n });\n }\n }\n }\n this.axisRanges = axisRanges;\n return toChartAxisRanges(axisRanges);\n },\n zoom: function () {\n var axisRanges = this.axisRanges;\n if (axisRanges && axisRanges.length) {\n var plotArea = this.chart._plotArea;\n for (var idx = 0; idx < axisRanges.length; idx++) {\n var axisRange = axisRanges[idx];\n plotArea.updateAxisOptions(axisRange.axis, axisRange.range);\n }\n plotArea.redraw(plotArea.panes);\n }\n },\n destroy: function () {\n delete this.chart;\n }\n });\n var LegendLayout = ChartElement.extend({\n init: function (options, chartService) {\n ChartElement.fn.init.call(this, options);\n this.chartService = chartService;\n },\n render: function () {\n var ref = this;\n var children = ref.children;\n var options = ref.options;\n var vertical = options.vertical;\n this.visual = new drawing.Layout(null, {\n spacing: vertical ? 0 : options.spacing,\n lineSpacing: vertical ? options.spacing : 0,\n orientation: vertical ? 'vertical' : 'horizontal'\n });\n for (var idx = 0; idx < children.length; idx++) {\n var legendItem = children[idx];\n legendItem.reflow(new Box());\n legendItem.renderVisual();\n }\n },\n reflow: function (box) {\n this.visual.rect(box.toRect());\n this.visual.reflow();\n var bbox = this.visual.clippedBBox();\n if (bbox) {\n this.box = dataviz.rectToBox(bbox);\n } else {\n this.box = new Box();\n }\n },\n renderVisual: function () {\n this.addVisual();\n },\n createVisual: function () {\n }\n });\n var LegendItem = BoxElement.extend({\n init: function (options) {\n BoxElement.fn.init.call(this, options);\n this.createContainer();\n this.createMarker();\n this.createLabel();\n },\n createContainer: function () {\n this.container = new dataviz.FloatElement({\n vertical: false,\n wrap: false,\n align: CENTER\n });\n this.append(this.container);\n },\n createMarker: function () {\n this.container.append(new ShapeElement(this.markerOptions()));\n },\n markerOptions: function () {\n var options = this.options;\n var markerColor = options.markerColor;\n return deepExtend({}, options.markers, {\n background: markerColor,\n border: { color: markerColor }\n });\n },\n createLabel: function () {\n var options = this.options;\n var labelOptions = deepExtend({}, options.labels);\n this.container.append(new TextBox(options.text, labelOptions));\n },\n renderComplete: function () {\n BoxElement.fn.renderComplete.call(this);\n var cursor = this.options.cursor || {};\n var eventSink = this._itemOverlay = Path.fromRect(this.container.box.toRect(), {\n fill: {\n color: WHITE,\n opacity: 0\n },\n stroke: null,\n cursor: cursor.style || cursor\n });\n this.appendVisual(eventSink);\n },\n click: function (widget, e) {\n var args = this.eventArgs(e);\n if (!widget.trigger(LEGEND_ITEM_CLICK, args)) {\n e.preventDefault();\n }\n },\n hover: function (widget, e) {\n var args = this.eventArgs(e);\n if (!widget.trigger(LEGEND_ITEM_HOVER, args)) {\n e.preventDefault();\n widget._legendItemHover(args.seriesIndex, args.pointIndex);\n }\n return true;\n },\n leave: function (widget) {\n widget._unsetActivePoint();\n },\n eventArgs: function (e) {\n var options = this.options;\n return {\n element: eventElement(e),\n text: options.text,\n series: options.series,\n seriesIndex: options.series.index,\n pointIndex: options.pointIndex\n };\n },\n renderVisual: function () {\n var this$1 = this;\n var options = this.options;\n var customVisual = options.visual;\n if (customVisual) {\n this.visual = customVisual({\n active: options.active,\n series: options.series,\n sender: this.getSender(),\n pointIndex: options.pointIndex,\n options: {\n markers: this.markerOptions(),\n labels: options.labels\n },\n createVisual: function () {\n this$1.createVisual();\n this$1.renderChildren();\n this$1.renderComplete();\n var defaultVisual = this$1.visual;\n delete this$1.visual;\n return defaultVisual;\n }\n });\n this.addVisual();\n } else {\n BoxElement.fn.renderVisual.call(this);\n }\n }\n });\n var HORIZONTAL = 'horizontal';\n var POINTER = 'pointer';\n var CUSTOM = 'custom';\n var Legend = ChartElement.extend({\n init: function (options, chartService) {\n ChartElement.fn.init.call(this, options);\n this.chartService = chartService;\n if (!inArray(this.options.position, [\n TOP,\n RIGHT,\n BOTTOM,\n LEFT,\n CUSTOM\n ])) {\n this.options.position = RIGHT;\n }\n this.createContainer();\n this.createItems();\n },\n createContainer: function () {\n var options = this.options;\n var position = options.position;\n var userAlign = options.align;\n var align = position;\n var vAlign = CENTER;\n if (position === CUSTOM) {\n align = LEFT;\n } else if (inArray(position, [\n TOP,\n BOTTOM\n ])) {\n if (userAlign === 'start') {\n align = LEFT;\n } else if (userAlign === 'end') {\n align = RIGHT;\n } else {\n align = CENTER;\n }\n vAlign = position;\n } else if (userAlign) {\n if (userAlign === 'start') {\n vAlign = TOP;\n } else if (userAlign === 'end') {\n vAlign = BOTTOM;\n }\n }\n this.container = new BoxElement({\n margin: options.margin,\n padding: options.padding,\n background: options.background,\n border: options.border,\n vAlign: vAlign,\n align: align,\n zIndex: options.zIndex,\n shrinkToFit: true\n });\n this.append(this.container);\n },\n createItems: function () {\n var chartService = this.getService();\n var options = this.options;\n var vertical = this.isVertical();\n var innerElement = new LegendLayout({\n vertical: vertical,\n spacing: options.spacing\n }, chartService);\n var items = options.items;\n if (options.reverse) {\n items = items.slice(0).reverse();\n }\n var count = items.length;\n for (var i = 0; i < count; i++) {\n var item = items[i];\n innerElement.append(new LegendItem(deepExtend({}, {\n markers: options.markers,\n labels: options.labels\n }, options.item, item)));\n }\n innerElement.render();\n this.container.append(innerElement);\n },\n isVertical: function () {\n var ref = this.options;\n var orientation = ref.orientation;\n var position = ref.position;\n var vertical = position === CUSTOM && orientation !== HORIZONTAL || (defined(orientation) ? orientation !== HORIZONTAL : inArray(position, [\n LEFT,\n RIGHT\n ]));\n return vertical;\n },\n hasItems: function () {\n return this.container.children[0].children.length > 0;\n },\n reflow: function (targetBox) {\n var options = this.options;\n var legendBox = targetBox.clone();\n if (!this.hasItems()) {\n this.box = legendBox;\n return;\n }\n if (options.position === CUSTOM) {\n this.containerCustomReflow(legendBox);\n this.box = legendBox;\n } else {\n this.containerReflow(legendBox);\n }\n },\n containerReflow: function (targetBox) {\n var ref = this;\n var options = ref.options;\n var container = ref.container;\n var position = options.position;\n var width = options.width;\n var height = options.height;\n var pos = position === TOP || position === BOTTOM ? X : Y;\n var vertical = this.isVertical();\n var alignTarget = targetBox.clone();\n var containerBox = targetBox.clone();\n if (position === LEFT || position === RIGHT) {\n containerBox.y1 = alignTarget.y1 = 0;\n }\n if (vertical && height) {\n containerBox.y2 = containerBox.y1 + height;\n containerBox.align(alignTarget, Y, container.options.vAlign);\n } else if (!vertical && width) {\n containerBox.x2 = containerBox.x1 + width;\n containerBox.align(alignTarget, X, container.options.align);\n }\n container.reflow(containerBox);\n containerBox = container.box;\n var box = containerBox.clone();\n if (options.offsetX || options.offsetY) {\n containerBox.translate(options.offsetX, options.offsetY);\n this.container.reflow(containerBox);\n }\n box[pos + 1] = targetBox[pos + 1];\n box[pos + 2] = targetBox[pos + 2];\n this.box = box;\n },\n containerCustomReflow: function (targetBox) {\n var ref = this;\n var options = ref.options;\n var container = ref.container;\n var offsetX = options.offsetX;\n var offsetY = options.offsetY;\n var width = options.width;\n var height = options.height;\n var vertical = this.isVertical();\n var containerBox = targetBox.clone();\n if (vertical && height) {\n containerBox.y2 = containerBox.y1 + height;\n } else if (!vertical && width) {\n containerBox.x2 = containerBox.x1 + width;\n }\n container.reflow(containerBox);\n containerBox = container.box;\n container.reflow(new Box(offsetX, offsetY, offsetX + containerBox.width(), offsetY + containerBox.height()));\n },\n renderVisual: function () {\n if (this.hasItems()) {\n ChartElement.fn.renderVisual.call(this);\n }\n }\n });\n setDefaultOptions(Legend, {\n position: RIGHT,\n items: [],\n labels: { margin: { left: 6 } },\n offsetX: 0,\n offsetY: 0,\n margin: getSpacing(5),\n padding: getSpacing(5),\n border: {\n color: BLACK,\n width: 0\n },\n item: { cursor: POINTER },\n spacing: 6,\n background: '',\n zIndex: 1,\n markers: {\n border: { width: 0 },\n width: 15,\n height: 3,\n type: 'rect',\n align: LEFT,\n vAlign: CENTER\n }\n });\n var PlotAreaFactory = Class.extend({\n init: function () {\n this._registry = [];\n },\n register: function (type, seriesTypes) {\n this._registry.push({\n type: type,\n seriesTypes: seriesTypes\n });\n },\n create: function (srcSeries, options, chartService) {\n var registry = this._registry;\n var match = registry[0];\n var series;\n for (var idx = 0; idx < registry.length; idx++) {\n var entry = registry[idx];\n series = filterSeriesByType(srcSeries, entry.seriesTypes);\n if (series.length > 0) {\n match = entry;\n break;\n }\n }\n return new match.type(series, options, chartService);\n }\n });\n PlotAreaFactory.current = new PlotAreaFactory();\n var ZOOM_ACCELERATION = 3;\n var SELECTOR_HEIGHT_ADJUST = 0.1;\n function createDiv(className) {\n var element = document.createElement('div');\n if (className) {\n element.className = className;\n }\n return element;\n }\n function closestHandle(element) {\n var current = element;\n while (current && !hasClasses(current, 'k-handle')) {\n current = current.parentNode;\n }\n return current;\n }\n var Selection = Class.extend({\n init: function (chart, categoryAxis, options, observer) {\n var chartElement = chart.element;\n this.options = deepExtend({}, this.options, options);\n this.chart = chart;\n this.observer = observer;\n this.chartElement = chartElement;\n this.categoryAxis = categoryAxis;\n this._dateAxis = this.categoryAxis instanceof DateCategoryAxis;\n this.initOptions();\n if (this.options.visible) {\n this.createElements();\n this.set(this._index(this.options.from), this._index(this.options.to));\n this.bindEvents();\n }\n },\n createElements: function () {\n var options = this.options;\n var wrapper = this.wrapper = createDiv('k-selector');\n elementStyles(wrapper, {\n top: options.offset.top,\n left: options.offset.left,\n width: options.width,\n height: options.height,\n direction: 'ltr'\n });\n var selection = this.selection = createDiv('k-selection');\n this.leftMask = createDiv('k-mask');\n this.rightMask = createDiv('k-mask');\n wrapper.appendChild(this.leftMask);\n wrapper.appendChild(this.rightMask);\n wrapper.appendChild(selection);\n selection.appendChild(createDiv('k-selection-bg'));\n var leftHandle = this.leftHandle = createDiv('k-handle k-left-handle');\n var rightHandle = this.rightHandle = createDiv('k-handle k-right-handle');\n leftHandle.appendChild(createDiv());\n rightHandle.appendChild(createDiv());\n selection.appendChild(leftHandle);\n selection.appendChild(rightHandle);\n this.chartElement.appendChild(wrapper);\n var selectionStyles = elementStyles(selection, [\n 'borderLeftWidth',\n 'borderRightWidth',\n 'height'\n ]);\n var leftHandleHeight = elementStyles(leftHandle, 'height').height;\n var rightHandleHeight = elementStyles(rightHandle, 'height').height;\n options.selection = {\n border: {\n left: selectionStyles.borderLeftWidth,\n right: selectionStyles.borderRightWidth\n }\n };\n elementStyles(leftHandle, { top: (selectionStyles.height - leftHandleHeight) / 2 });\n elementStyles(rightHandle, { top: (selectionStyles.height - rightHandleHeight) / 2 });\n wrapper.style.cssText = wrapper.style.cssText;\n },\n bindEvents: function () {\n this._mousewheelHandler = this.options.mousewheel !== false ? this._mousewheel.bind(this) : stopPropagation;\n var obj;\n bindEvents(this.wrapper, (obj = {}, obj[MOUSEWHEEL] = this._mousewheelHandler, obj));\n this._domEvents = services.DomEventsBuilder.create(this.wrapper, {\n start: this._start.bind(this),\n move: this._move.bind(this),\n end: this._end.bind(this),\n tap: this._tap.bind(this),\n press: this._press.bind(this),\n gesturestart: this._gesturestart.bind(this),\n gesturechange: this._gesturechange.bind(this),\n gestureend: this._gestureend.bind(this)\n });\n },\n initOptions: function () {\n var ref = this;\n var options = ref.options;\n var categoryAxis = ref.categoryAxis;\n var box = categoryAxis.pane.chartsBox();\n var intlService = this.chart.chartService.intl;\n if (this._dateAxis) {\n deepExtend(options, {\n min: parseDate(intlService, options.min),\n max: parseDate(intlService, options.max),\n from: parseDate(intlService, options.from),\n to: parseDate(intlService, options.to)\n });\n }\n var ref$1 = elementStyles(this.chartElement, [\n 'paddingLeft',\n 'paddingTop'\n ]);\n var paddingLeft = ref$1.paddingLeft;\n var paddingTop = ref$1.paddingTop;\n this.options = deepExtend({}, {\n width: box.width(),\n height: box.height() + SELECTOR_HEIGHT_ADJUST,\n padding: {\n left: paddingLeft,\n top: paddingTop\n },\n offset: {\n left: box.x1 + paddingLeft,\n top: box.y1 + paddingTop\n },\n from: options.min,\n to: options.max\n }, options);\n },\n destroy: function () {\n if (this._domEvents) {\n this._domEvents.destroy();\n delete this._domEvents;\n }\n clearTimeout(this._mwTimeout);\n this._state = null;\n if (this.wrapper) {\n var obj;\n unbindEvents(this.wrapper, (obj = {}, obj[MOUSEWHEEL] = this._mousewheelHandler, obj));\n this.chartElement.removeChild(this.wrapper);\n }\n },\n _rangeEventArgs: function (range) {\n return {\n axis: this.categoryAxis.options,\n from: this._value(range.from),\n to: this._value(range.to)\n };\n },\n _start: function (e) {\n var options = this.options;\n var target = eventElement(e);\n if (this._state || !target) {\n return;\n }\n this.chart._unsetActivePoint();\n this._state = {\n moveTarget: closestHandle(target) || target,\n startLocation: e.x ? e.x.location : 0,\n range: {\n from: this._index(options.from),\n to: this._index(options.to)\n }\n };\n var args = this._rangeEventArgs({\n from: this._index(options.from),\n to: this._index(options.to)\n });\n if (this.trigger(SELECT_START, args)) {\n this._state = null;\n }\n },\n _press: function (e) {\n var handle;\n if (this._state) {\n handle = this._state.moveTarget;\n } else {\n handle = closestHandle(eventElement(e));\n }\n if (handle) {\n dataviz.addClass(handle, 'k-handle-active');\n }\n },\n _move: function (e) {\n if (!this._state) {\n return;\n }\n var ref = this;\n var state = ref._state;\n var options = ref.options;\n var axisOptions = ref.categoryAxis.options;\n var range = state.range;\n var target = state.moveTarget;\n var reverse = axisOptions.reverse;\n var from = this._index(options.from);\n var to = this._index(options.to);\n var min = this._index(options.min);\n var max = this._index(options.max);\n var delta = state.startLocation - e.x.location;\n var oldRange = {\n from: range.from,\n to: range.to\n };\n var span = range.to - range.from;\n var scale = elementStyles(this.wrapper, 'width').width / (axisOptions.categories.length - 1);\n var offset = Math.round(delta / scale) * (reverse ? -1 : 1);\n if (!target) {\n return;\n }\n var leftHandle = hasClasses(target, 'k-left-handle');\n var rightHandle = hasClasses(target, 'k-right-handle');\n if (hasClasses(target, 'k-selection k-selection-bg')) {\n range.from = Math.min(Math.max(min, from - offset), max - span);\n range.to = Math.min(range.from + span, max);\n } else if (leftHandle && !reverse || rightHandle && reverse) {\n range.from = Math.min(Math.max(min, from - offset), max - 1);\n range.to = Math.max(range.from + 1, range.to);\n } else if (leftHandle && reverse || rightHandle && !reverse) {\n range.to = Math.min(Math.max(min + 1, to - offset), max);\n range.from = Math.min(range.to - 1, range.from);\n }\n if (range.from !== oldRange.from || range.to !== oldRange.to) {\n this.move(range.from, range.to);\n this.trigger(SELECT, this._rangeEventArgs(range));\n }\n },\n _end: function () {\n if (this._state) {\n var moveTarget = this._state.moveTarget;\n if (moveTarget) {\n dataviz.removeClass(moveTarget, 'k-handle-active');\n }\n var range = this._state.range;\n this.set(range.from, range.to);\n this.trigger(SELECT_END, this._rangeEventArgs(range));\n delete this._state;\n }\n },\n _tap: function (e) {\n var ref = this;\n var options = ref.options;\n var categoryAxis = ref.categoryAxis;\n var coords = this.chart._eventCoordinates(e);\n var categoryIx = categoryAxis.pointCategoryIndex(new Point(coords.x, categoryAxis.box.y1));\n var from = this._index(options.from);\n var to = this._index(options.to);\n var min = this._index(options.min);\n var max = this._index(options.max);\n var span = to - from;\n var mid = from + span / 2;\n var range = {};\n var rightClick = e.event.which === 3;\n var offset = Math.round(mid - categoryIx);\n if (this._state || rightClick) {\n return;\n }\n this.chart._unsetActivePoint();\n if (!categoryAxis.options.justified) {\n offset--;\n }\n range.from = Math.min(Math.max(min, from - offset), max - span);\n range.to = Math.min(range.from + span, max);\n this._start(e);\n if (this._state) {\n this._state.range = range;\n this.trigger(SELECT, this._rangeEventArgs(range));\n this._end();\n }\n },\n _mousewheel: function (e) {\n var this$1 = this;\n var delta = dataviz.mousewheelDelta(e);\n this._start({ target: this.selection });\n if (this._state) {\n var range = this._state.range;\n e.preventDefault();\n e.stopPropagation();\n if (Math.abs(delta) > 1) {\n delta *= ZOOM_ACCELERATION;\n }\n if (this.options.mousewheel.reverse) {\n delta *= -1;\n }\n if (this.expand(delta)) {\n this.trigger(SELECT, {\n axis: this.categoryAxis.options,\n delta: delta,\n originalEvent: e,\n from: this._value(range.from),\n to: this._value(range.to)\n });\n }\n if (this._mwTimeout) {\n clearTimeout(this._mwTimeout);\n }\n this._mwTimeout = setTimeout(function () {\n this$1._end();\n }, MOUSEWHEEL_DELAY);\n }\n },\n _gesturestart: function (e) {\n var options = this.options;\n this._state = {\n range: {\n from: this._index(options.from),\n to: this._index(options.to)\n }\n };\n var args = this._rangeEventArgs(this._state.range);\n if (this.trigger(SELECT_START, args)) {\n this._state = null;\n } else {\n e.preventDefault();\n }\n },\n _gestureend: function () {\n if (this._state) {\n this.trigger(SELECT_END, this._rangeEventArgs(this._state.range));\n delete this._state;\n }\n },\n _gesturechange: function (e) {\n var ref = this;\n var chart = ref.chart;\n var state = ref._state;\n var options = ref.options;\n var categoryAxis = ref.categoryAxis;\n var range = state.range;\n var p0 = chart._toModelCoordinates(e.touches[0].x.location).x;\n var p1 = chart._toModelCoordinates(e.touches[1].x.location).x;\n var left = Math.min(p0, p1);\n var right = Math.max(p0, p1);\n e.preventDefault();\n range.from = categoryAxis.pointCategoryIndex(new Point(left)) || options.min;\n range.to = categoryAxis.pointCategoryIndex(new Point(right)) || options.max;\n this.move(range.from, range.to);\n this.trigger(SELECT, this._rangeEventArgs(range));\n },\n _index: function (value) {\n var index = value;\n if (value instanceof Date) {\n index = this.categoryAxis.categoryIndex(value);\n }\n return index;\n },\n _value: function (index) {\n var categories = this.categoryAxis.options.categories;\n var value = index;\n if (this._dateAxis) {\n if (index > categories.length - 1) {\n value = this.options.max;\n } else {\n value = categories[Math.ceil(index)];\n }\n }\n return value;\n },\n _slot: function (value) {\n var categoryAxis = this.categoryAxis;\n var index = this._index(value);\n return categoryAxis.getSlot(index, index, true);\n },\n move: function (from, to) {\n var options = this.options;\n var reverse = this.categoryAxis.options.reverse;\n var offset = options.offset;\n var padding = options.padding;\n var border = options.selection.border;\n var left = reverse ? to : from;\n var right = reverse ? from : to;\n var edge = 'x' + (reverse ? 2 : 1);\n var box = this._slot(left);\n var leftMaskWidth = round(box[edge] - offset.left + padding.left);\n elementStyles(this.leftMask, { width: leftMaskWidth });\n elementStyles(this.selection, { left: leftMaskWidth });\n box = this._slot(right);\n var rightMaskWidth = round(options.width - (box[edge] - offset.left + padding.left));\n elementStyles(this.rightMask, { width: rightMaskWidth });\n var distance = options.width - rightMaskWidth;\n if (distance !== options.width) {\n distance += border.right;\n }\n elementStyles(this.rightMask, { left: distance });\n elementStyles(this.selection, { width: Math.max(options.width - (leftMaskWidth + rightMaskWidth) - border.right, 0) });\n },\n set: function (from, to) {\n var options = this.options;\n var min = this._index(options.min);\n var max = this._index(options.max);\n var fromValue = limitValue(this._index(from), min, max);\n var toValue = limitValue(this._index(to), fromValue + 1, max);\n if (options.visible) {\n this.move(fromValue, toValue);\n }\n options.from = this._value(fromValue);\n options.to = this._value(toValue);\n },\n expand: function (delta) {\n var options = this.options;\n var min = this._index(options.min);\n var max = this._index(options.max);\n var zDir = options.mousewheel.zoom;\n var from = this._index(options.from);\n var to = this._index(options.to);\n var range = {\n from: from,\n to: to\n };\n var oldRange = deepExtend({}, range);\n if (this._state) {\n range = this._state.range;\n }\n if (zDir !== RIGHT) {\n range.from = limitValue(limitValue(from - delta, 0, to - 1), min, max);\n }\n if (zDir !== LEFT) {\n range.to = limitValue(limitValue(to + delta, range.from + 1, max), min, max);\n }\n if (range.from !== oldRange.from || range.to !== oldRange.to) {\n this.set(range.from, range.to);\n return true;\n }\n },\n trigger: function (name, args) {\n return (this.observer || this.chart).trigger(name, args);\n }\n });\n function stopPropagation(e) {\n e.stopPropagation();\n }\n setDefaultOptions(Selection, {\n visible: true,\n mousewheel: { zoom: 'both' },\n min: MIN_VALUE,\n max: MAX_VALUE\n });\n var Tooltip = BaseTooltip.extend({\n show: function (point) {\n if (!point || !point.tooltipAnchor || this._current && this._current === point) {\n return;\n }\n var options = deepExtend({}, this.options, point.options.tooltip);\n var anchor = point.tooltipAnchor();\n if (anchor) {\n this._current = point;\n BaseTooltip.fn.show.call(this, {\n point: point,\n anchor: anchor\n }, options, point);\n } else {\n this.hide();\n }\n },\n hide: function () {\n delete this._current;\n BaseTooltip.fn.hide.call(this);\n }\n });\n var SharedTooltip = BaseTooltip.extend({\n init: function (plotArea, options) {\n BaseTooltip.fn.init.call(this, plotArea.chartService, options);\n this.plotArea = plotArea;\n this.formatService = plotArea.chartService.format;\n },\n showAt: function (points, coords) {\n var tooltipPoints = grep(points, function (point) {\n var tooltip = point.series.tooltip;\n var excluded = tooltip && tooltip.visible === false;\n return !excluded;\n });\n if (tooltipPoints.length > 0) {\n var point = tooltipPoints[0];\n var slot = this.plotArea.categoryAxis.getSlot(point.categoryIx);\n var anchor = coords ? this._slotAnchor(coords, slot) : this._defaultAnchor(point, slot);\n this.show({\n anchor: anchor,\n shared: true,\n points: points,\n category: point.category,\n categoryText: this.formatService.auto(this.options.categoryFormat, point.category),\n series: this.plotArea.series\n }, this.options);\n }\n },\n _slotAnchor: function (point, slot) {\n var axis = this.plotArea.categoryAxis;\n var align = {\n horizontal: 'left',\n vertical: 'center'\n };\n if (!axis.options.vertical) {\n point.x = slot.center().x;\n }\n return {\n point: point,\n align: align\n };\n },\n _defaultAnchor: function (point, slot) {\n var box = point.owner.pane.chartsBox();\n var vertical = this.plotArea.categoryAxis.options.vertical;\n var center = box.center();\n var slotCenter = slot.center();\n var align = {\n horizontal: 'center',\n vertical: 'center'\n };\n var centerPoint;\n if (vertical) {\n centerPoint = new Point(center.x, slotCenter.y);\n } else {\n centerPoint = new Point(slotCenter.x, center.y);\n }\n return {\n point: centerPoint,\n align: align\n };\n }\n });\n setDefaultOptions(SharedTooltip, { categoryFormat: '{0:d}' });\n var BarChartAnimation = Animation.extend({\n setup: function () {\n var ref = this;\n var element = ref.element;\n var options = ref.options;\n var bbox = element.bbox();\n if (bbox) {\n this.origin = options.origin;\n var axis = options.vertical ? Y : X;\n var fromScale = this.fromScale = new GeometryPoint(1, 1);\n fromScale[axis] = START_SCALE;\n element.transform(transform().scale(fromScale.x, fromScale.y));\n } else {\n this.abort();\n }\n },\n step: function (pos) {\n var scaleX = dataviz.interpolateValue(this.fromScale.x, 1, pos);\n var scaleY = dataviz.interpolateValue(this.fromScale.y, 1, pos);\n this.element.transform(transform().scale(scaleX, scaleY, this.origin));\n },\n abort: function () {\n Animation.fn.abort.call(this);\n this.element.transform(null);\n }\n });\n setDefaultOptions(BarChartAnimation, { duration: INITIAL_ANIMATION_DURATION });\n AnimationFactory.current.register(BAR, BarChartAnimation);\n var BubbleAnimation = Animation.extend({\n setup: function () {\n var center = this.center = this.element.bbox().center();\n this.element.transform(transform().scale(START_SCALE, START_SCALE, center));\n },\n step: function (pos) {\n this.element.transform(transform().scale(pos, pos, this.center));\n }\n });\n setDefaultOptions(BubbleAnimation, { easing: 'easeOutElastic' });\n AnimationFactory.current.register(BUBBLE, BubbleAnimation);\n var FadeInAnimation = Animation.extend({\n setup: function () {\n this.fadeTo = this.element.opacity();\n this.element.opacity(0);\n },\n step: function (pos) {\n this.element.opacity(pos * this.fadeTo);\n }\n });\n setDefaultOptions(FadeInAnimation, {\n duration: 200,\n easing: 'linear'\n });\n AnimationFactory.current.register(FADEIN, FadeInAnimation);\n var PieAnimation = Animation.extend({\n setup: function () {\n this.element.transform(transform().scale(START_SCALE, START_SCALE, this.options.center));\n },\n step: function (pos) {\n this.element.transform(transform().scale(pos, pos, this.options.center));\n }\n });\n setDefaultOptions(PieAnimation, {\n easing: 'easeOutElastic',\n duration: INITIAL_ANIMATION_DURATION\n });\n AnimationFactory.current.register(PIE, PieAnimation);\n var ScatterLineChart = ScatterChart.extend({\n render: function () {\n ScatterChart.fn.render.call(this);\n this.renderSegments();\n },\n createSegment: function (linePoints, currentSeries, seriesIx) {\n var style = currentSeries.style;\n var pointType;\n if (style === SMOOTH) {\n pointType = SplineSegment;\n } else {\n pointType = LineSegment;\n }\n return new pointType(linePoints, currentSeries, seriesIx);\n },\n animationPoints: function () {\n var points = ScatterChart.fn.animationPoints.call(this);\n return points.concat(this._segments);\n },\n createMissingValue: function (value, missingValues) {\n if (missingValues === ZERO) {\n var missingValue = {\n x: value.x,\n y: value.y\n };\n if (!hasValue(missingValue.x)) {\n missingValue.x = 0;\n }\n if (!hasValue(missingValue.y)) {\n missingValue.y = 0;\n }\n return missingValue;\n }\n }\n });\n deepExtend(ScatterLineChart.prototype, LineChartMixin);\n var XYPlotArea = PlotAreaBase.extend({\n initFields: function () {\n this.namedXAxes = {};\n this.namedYAxes = {};\n this.xAxisRangeTracker = new AxisGroupRangeTracker();\n this.yAxisRangeTracker = new AxisGroupRangeTracker();\n },\n render: function (panes) {\n var this$1 = this;\n if (panes === void 0) {\n panes = this.panes;\n }\n var seriesByPane = this.groupSeriesByPane();\n for (var i = 0; i < panes.length; i++) {\n var pane = panes[i];\n var paneSeries = seriesByPane[pane.options.name || 'default'] || [];\n this$1.addToLegend(paneSeries);\n var filteredSeries = this$1.filterVisibleSeries(paneSeries);\n if (!filteredSeries) {\n continue;\n }\n this$1.createScatterChart(filterSeriesByType(filteredSeries, SCATTER), pane);\n this$1.createScatterLineChart(filterSeriesByType(filteredSeries, SCATTER_LINE), pane);\n this$1.createBubbleChart(filterSeriesByType(filteredSeries, BUBBLE), pane);\n }\n this.createAxes(panes);\n },\n appendChart: function (chart, pane) {\n this.xAxisRangeTracker.update(chart.xAxisRanges);\n this.yAxisRangeTracker.update(chart.yAxisRanges);\n PlotAreaBase.fn.appendChart.call(this, chart, pane);\n },\n removeAxis: function (axis) {\n var axisName = axis.options.name;\n PlotAreaBase.fn.removeAxis.call(this, axis);\n if (axis.options.vertical) {\n this.yAxisRangeTracker.reset(axisName);\n delete this.namedYAxes[axisName];\n } else {\n this.xAxisRangeTracker.reset(axisName);\n delete this.namedXAxes[axisName];\n }\n if (axis === this.axisX) {\n delete this.axisX;\n }\n if (axis === this.axisY) {\n delete this.axisY;\n }\n },\n seriesPaneName: function (series) {\n var options = this.options;\n var xAxisName = series.xAxis;\n var xAxisOptions = [].concat(options.xAxis);\n var xAxis = grep(xAxisOptions, function (a) {\n return a.name === xAxisName;\n })[0];\n var yAxisName = series.yAxis;\n var yAxisOptions = [].concat(options.yAxis);\n var yAxis = grep(yAxisOptions, function (a) {\n return a.name === yAxisName;\n })[0];\n var panes = options.panes || [{}];\n var defaultPaneName = panes[0].name || 'default';\n var paneName = (xAxis || {}).pane || (yAxis || {}).pane || defaultPaneName;\n return paneName;\n },\n createScatterChart: function (series, pane) {\n if (series.length > 0) {\n this.appendChart(new ScatterChart(this, {\n series: series,\n clip: pane.options.clip\n }), pane);\n }\n },\n createScatterLineChart: function (series, pane) {\n if (series.length > 0) {\n this.appendChart(new ScatterLineChart(this, {\n series: series,\n clip: pane.options.clip\n }), pane);\n }\n },\n createBubbleChart: function (series, pane) {\n if (series.length > 0) {\n this.appendChart(new BubbleChart(this, {\n series: series,\n clip: pane.options.clip\n }), pane);\n }\n },\n createXYAxis: function (options, vertical, axisIndex) {\n var axisName = options.name;\n var namedAxes = vertical ? this.namedYAxes : this.namedXAxes;\n var tracker = vertical ? this.yAxisRangeTracker : this.xAxisRangeTracker;\n var axisOptions = deepExtend({}, options, { vertical: vertical });\n var isLog = equalsIgnoreCase(axisOptions.type, LOGARITHMIC);\n var defaultRange = tracker.query();\n var defaultAxisRange = isLog ? {\n min: 0.1,\n max: 1\n } : {\n min: 0,\n max: 1\n };\n var range = tracker.query(axisName) || defaultRange || defaultAxisRange;\n var typeSamples = [\n axisOptions.min,\n axisOptions.max\n ];\n var series = this.series;\n for (var seriesIx = 0; seriesIx < series.length; seriesIx++) {\n var currentSeries = series[seriesIx];\n var seriesAxisName = currentSeries[vertical ? 'yAxis' : 'xAxis'];\n if (seriesAxisName === axisOptions.name || axisIndex === 0 && !seriesAxisName) {\n var firstPointValue = SeriesBinder.current.bindPoint(currentSeries, 0).valueFields;\n typeSamples.push(firstPointValue[vertical ? 'y' : 'x']);\n break;\n }\n }\n if (axisIndex === 0 && defaultRange) {\n range.min = Math.min(range.min, defaultRange.min);\n range.max = Math.max(range.max, defaultRange.max);\n }\n var inferredDate;\n for (var i = 0; i < typeSamples.length; i++) {\n if (typeSamples[i] instanceof Date) {\n inferredDate = true;\n break;\n }\n }\n var axisType;\n if (equalsIgnoreCase(axisOptions.type, DATE) || !axisOptions.type && inferredDate) {\n axisType = dataviz.DateValueAxis;\n } else if (isLog) {\n axisType = dataviz.LogarithmicAxis;\n } else {\n axisType = dataviz.NumericAxis;\n }\n var axis = new axisType(range.min, range.max, axisOptions, this.chartService);\n axis.axisIndex = axisIndex;\n if (axisName) {\n if (namedAxes[axisName]) {\n throw new Error((vertical ? 'Y' : 'X') + ' axis with name ' + axisName + ' is already defined');\n }\n namedAxes[axisName] = axis;\n }\n this.appendAxis(axis);\n return axis;\n },\n createAxes: function (panes) {\n var this$1 = this;\n var options = this.options;\n var xAxesOptions = [].concat(options.xAxis);\n var xAxes = [];\n var yAxesOptions = [].concat(options.yAxis);\n var yAxes = [];\n for (var idx = 0; idx < xAxesOptions.length; idx++) {\n var axisPane = this$1.findPane(xAxesOptions[idx].pane);\n if (inArray(axisPane, panes)) {\n xAxes.push(this$1.createXYAxis(xAxesOptions[idx], false, idx));\n }\n }\n for (var idx$1 = 0; idx$1 < yAxesOptions.length; idx$1++) {\n var axisPane$1 = this$1.findPane(yAxesOptions[idx$1].pane);\n if (inArray(axisPane$1, panes)) {\n yAxes.push(this$1.createXYAxis(yAxesOptions[idx$1], true, idx$1));\n }\n }\n this.axisX = this.axisX || xAxes[0];\n this.axisY = this.axisY || yAxes[0];\n },\n _dispatchEvent: function (chart, e, eventType) {\n var coords = chart._eventCoordinates(e);\n var point = new Point(coords.x, coords.y);\n var allAxes = this.axes;\n var length = allAxes.length;\n var xValues = [];\n var yValues = [];\n for (var i = 0; i < length; i++) {\n var axis = allAxes[i];\n var values = axis.options.vertical ? yValues : xValues;\n var currentValue = axis.getValue(point);\n if (currentValue !== null) {\n values.push(currentValue);\n }\n }\n if (xValues.length > 0 && yValues.length > 0) {\n chart.trigger(eventType, {\n element: eventElement(e),\n originalEvent: e,\n x: singleItemOrArray(xValues),\n y: singleItemOrArray(yValues)\n });\n }\n },\n updateAxisOptions: function (axis, options) {\n var vertical = axis.options.vertical;\n var axes = this.groupAxes(this.panes);\n var index = (vertical ? axes.y : axes.x).indexOf(axis);\n var axisOptions = [].concat(vertical ? this.options.yAxis : this.options.xAxis)[index];\n deepExtend(axisOptions, options);\n }\n });\n setDefaultOptions(XYPlotArea, {\n xAxis: {},\n yAxis: {}\n });\n deepExtend(XYPlotArea.prototype, PlotAreaEventsMixin);\n var PieSegment = ChartElement.extend({\n init: function (value, sector, options) {\n ChartElement.fn.init.call(this, options);\n this.value = value;\n this.sector = sector;\n },\n render: function () {\n var labels = this.options.labels;\n var chartService = this.owner.chartService;\n var labelText = this.value;\n if (this._rendered || this.visible === false) {\n return;\n }\n this._rendered = true;\n var labelTemplate = getTemplate(labels);\n if (labelTemplate) {\n labelText = labelTemplate({\n dataItem: this.dataItem,\n category: this.category,\n value: this.value,\n series: this.series,\n percentage: this.percentage\n });\n } else if (labels.format) {\n labelText = chartService.format.auto(labels.format, labelText);\n }\n if (labels.visible && (labelText || labelText === 0)) {\n if (labels.position === CENTER || labels.position === INSIDE_END) {\n if (!labels.color) {\n var brightnessValue = new Color(this.options.color).percBrightness();\n if (brightnessValue > 180) {\n labels.color = BLACK;\n } else {\n labels.color = WHITE;\n }\n }\n if (!labels.background) {\n labels.background = this.options.color;\n }\n } else {\n var themeLabels = chartService.theme.seriesDefaults.labels;\n labels.color = labels.color || themeLabels.color;\n labels.background = labels.background || themeLabels.background;\n }\n this.label = new TextBox(labelText, deepExtend({}, labels, {\n align: CENTER,\n vAlign: '',\n animation: {\n type: FADEIN,\n delay: this.animationDelay\n }\n }));\n this.append(this.label);\n }\n },\n reflow: function (targetBox) {\n this.render();\n this.box = targetBox;\n this.reflowLabel();\n },\n reflowLabel: function () {\n var ref = this;\n var labelsOptions = ref.options.labels;\n var label = ref.label;\n var sector = this.sector.clone();\n var labelsDistance = labelsOptions.distance;\n var angle = sector.middle();\n if (label) {\n var labelHeight = label.box.height();\n var labelWidth = label.box.width();\n var lp;\n if (labelsOptions.position === CENTER) {\n sector.radius = Math.abs((sector.radius - labelHeight) / 2) + labelHeight;\n lp = sector.point(angle);\n label.reflow(new Box(lp.x, lp.y - labelHeight / 2, lp.x, lp.y));\n } else if (labelsOptions.position === INSIDE_END) {\n sector.radius = sector.radius - labelHeight / 2;\n lp = sector.point(angle);\n label.reflow(new Box(lp.x, lp.y - labelHeight / 2, lp.x, lp.y));\n } else {\n var x1;\n lp = sector.clone().expand(labelsDistance).point(angle);\n if (lp.x >= sector.center.x) {\n x1 = lp.x + labelWidth;\n label.orientation = RIGHT;\n } else {\n x1 = lp.x - labelWidth;\n label.orientation = LEFT;\n }\n label.reflow(new Box(x1, lp.y - labelHeight, lp.x, lp.y));\n }\n }\n },\n createVisual: function () {\n var this$1 = this;\n var ref = this;\n var sector = ref.sector;\n var options = ref.options;\n ChartElement.fn.createVisual.call(this);\n if (this.value) {\n if (options.visual) {\n var startAngle = (sector.startAngle + 180) % 360;\n var visual = options.visual({\n category: this.category,\n dataItem: this.dataItem,\n value: this.value,\n series: this.series,\n percentage: this.percentage,\n center: new GeometryPoint(sector.center.x, sector.center.y),\n radius: sector.radius,\n innerRadius: sector.innerRadius,\n startAngle: startAngle,\n endAngle: startAngle + sector.angle,\n options: options,\n sender: this.getSender(),\n createVisual: function () {\n var group = new Group();\n this$1.createSegmentVisual(group);\n return group;\n }\n });\n if (visual) {\n this.visual.append(visual);\n }\n } else {\n this.createSegmentVisual(this.visual);\n }\n }\n },\n createSegmentVisual: function (group) {\n var ref = this;\n var sector = ref.sector;\n var options = ref.options;\n var borderOptions = options.border || {};\n var border = borderOptions.width > 0 ? {\n stroke: {\n color: borderOptions.color,\n width: borderOptions.width,\n opacity: borderOptions.opacity,\n dashType: borderOptions.dashType\n }\n } : {};\n var color = options.color;\n var fill = {\n color: color,\n opacity: options.opacity\n };\n var visual = this.createSegment(sector, deepExtend({\n fill: fill,\n stroke: { opacity: options.opacity },\n zIndex: options.zIndex\n }, border));\n group.append(visual);\n if (hasGradientOverlay(options)) {\n group.append(this.createGradientOverlay(visual, {\n baseColor: color,\n fallbackFill: fill\n }, deepExtend({\n center: [\n sector.center.x,\n sector.center.y\n ],\n innerRadius: sector.innerRadius,\n radius: sector.radius,\n userSpace: true\n }, options.overlay)));\n }\n },\n createSegment: function (sector, options) {\n if (options.singleSegment) {\n return new drawing.Circle(new geometry.Circle(new GeometryPoint(sector.center.x, sector.center.y), sector.radius), options);\n }\n return dataviz.ShapeBuilder.current.createRing(sector, options);\n },\n createAnimation: function () {\n var ref = this;\n var options = ref.options;\n var center = ref.sector.center;\n deepExtend(options, {\n animation: {\n center: [\n center.x,\n center.y\n ],\n delay: this.animationDelay\n }\n });\n ChartElement.fn.createAnimation.call(this);\n },\n createHighlight: function (options) {\n var highlight = this.options.highlight || {};\n var border = highlight.border || {};\n return this.createSegment(this.sector, deepExtend({}, options, {\n fill: {\n color: highlight.color,\n opacity: highlight.opacity\n },\n stroke: {\n opacity: border.opacity,\n width: border.width,\n color: border.color\n }\n }));\n },\n highlightVisual: function () {\n return this.visual.children[0];\n },\n highlightVisualArgs: function () {\n var sector = this.sector;\n return {\n options: this.options,\n radius: sector.radius,\n innerRadius: sector.innerRadius,\n center: new GeometryPoint(sector.center.x, sector.center.y),\n startAngle: sector.startAngle,\n endAngle: sector.angle + sector.startAngle,\n visual: this.visual\n };\n },\n tooltipAnchor: function () {\n var sector = this.sector.clone().expand(TOOLTIP_OFFSET);\n var midAndle = sector.middle();\n var midPoint = sector.point(midAndle);\n return {\n point: midPoint,\n align: tooltipAlignment(midAndle + 180)\n };\n },\n formatValue: function (format) {\n return this.owner.formatPointValue(this, format);\n }\n });\n var RAD_30 = round(dataviz.rad(30), DEFAULT_PRECISION);\n var RAD_60 = round(dataviz.rad(60), DEFAULT_PRECISION);\n function tooltipAlignment(angle) {\n var radians = dataviz.rad(angle);\n var sine = round(Math.sin(radians), DEFAULT_PRECISION);\n var cosine = round(Math.cos(radians), DEFAULT_PRECISION);\n var horizontal;\n if (Math.abs(sine) > RAD_60) {\n horizontal = CENTER;\n } else if (cosine < 0) {\n horizontal = RIGHT;\n } else {\n horizontal = LEFT;\n }\n var vertical;\n if (Math.abs(sine) < RAD_30) {\n vertical = CENTER;\n } else if (sine < 0) {\n vertical = BOTTOM;\n } else {\n vertical = TOP;\n }\n return {\n horizontal: horizontal,\n vertical: vertical\n };\n }\n setDefaultOptions(PieSegment, {\n color: WHITE,\n overlay: { gradient: 'roundedBevel' },\n border: { width: 0.5 },\n labels: {\n visible: false,\n distance: 35,\n font: datavizConstants.DEFAULT_FONT,\n margin: getSpacing(0.5),\n align: CIRCLE,\n zIndex: 1,\n position: OUTSIDE_END\n },\n animation: { type: PIE },\n highlight: {\n visible: true,\n border: { width: 1 }\n },\n visible: true\n });\n deepExtend(PieSegment.prototype, PointEventsMixin);\n var PieChartMixin = {\n createLegendItem: function (value, point, options) {\n var legendOptions = this.options.legend || {};\n var labelsOptions = legendOptions.labels || {};\n var inactiveItems = legendOptions.inactiveItems || {};\n var inactiveItemsLabels = inactiveItems.labels || {};\n if (options && options.visibleInLegend !== false) {\n var pointVisible = options.visible !== false;\n var labelTemplate = pointVisible ? getTemplate(labelsOptions) : getTemplate(inactiveItemsLabels) || getTemplate(labelsOptions);\n var text = options.category || '';\n if (labelTemplate) {\n text = labelTemplate({\n text: text,\n series: options.series,\n dataItem: options.dataItem,\n percentage: options.percentage,\n value: value\n });\n }\n var itemLabelOptions, markerColor;\n if (pointVisible) {\n itemLabelOptions = {};\n markerColor = point.color;\n } else {\n itemLabelOptions = {\n color: inactiveItemsLabels.color,\n font: inactiveItemsLabels.font\n };\n markerColor = (inactiveItems.markers || {}).color;\n }\n if (text) {\n this.legendItems.push({\n pointIndex: options.index,\n text: text,\n series: options.series,\n markerColor: markerColor,\n labels: itemLabelOptions\n });\n }\n }\n }\n };\n function segmentVisible(series, fields, index) {\n var visible = fields.visible;\n if (defined(visible)) {\n return visible;\n }\n var pointVisibility = series.pointVisibility;\n if (pointVisibility) {\n return pointVisibility[index];\n }\n }\n function bindSegments(series) {\n var data = series.data;\n var points = [];\n var sum = 0;\n var count = 0;\n for (var idx = 0; idx < data.length; idx++) {\n var pointData = SeriesBinder.current.bindPoint(series, idx);\n var value = pointData.valueFields.value;\n if (isString(value)) {\n value = parseFloat(value);\n }\n if (isNumber(value)) {\n pointData.visible = segmentVisible(series, pointData.fields, idx) !== false;\n pointData.value = Math.abs(value);\n points.push(pointData);\n if (pointData.visible) {\n sum += pointData.value;\n }\n if (value !== 0) {\n count++;\n }\n } else {\n points.push(null);\n }\n }\n return {\n total: sum,\n points: points,\n count: count\n };\n }\n var PIE_SECTOR_ANIM_DELAY = 70;\n var PieChart = ChartElement.extend({\n init: function (plotArea, options) {\n ChartElement.fn.init.call(this, options);\n this.plotArea = plotArea;\n this.chartService = plotArea.chartService;\n this.points = [];\n this.legendItems = [];\n this.render();\n },\n render: function () {\n this.traverseDataPoints(this.addValue.bind(this));\n },\n traverseDataPoints: function (callback) {\n var this$1 = this;\n var ref = this;\n var options = ref.options;\n var seriesColors = ref.plotArea.options.seriesColors;\n if (seriesColors === void 0) {\n seriesColors = [];\n }\n var colorsCount = seriesColors.length;\n var series = options.series;\n var seriesCount = series.length;\n for (var seriesIx = 0; seriesIx < seriesCount; seriesIx++) {\n var currentSeries = series[seriesIx];\n var data = currentSeries.data;\n var ref$1 = bindSegments(currentSeries);\n var total = ref$1.total;\n var points = ref$1.points;\n var count = ref$1.count;\n var anglePerValue = 360 / total;\n var constantAngle = void 0;\n if (!isFinite(anglePerValue)) {\n constantAngle = 360 / count;\n }\n var currentAngle = void 0;\n if (defined(currentSeries.startAngle)) {\n currentAngle = currentSeries.startAngle;\n } else {\n currentAngle = options.startAngle;\n }\n if (seriesIx !== seriesCount - 1) {\n if (currentSeries.labels.position === OUTSIDE_END) {\n currentSeries.labels.position = CENTER;\n }\n }\n for (var i = 0; i < points.length; i++) {\n var pointData = points[i];\n if (!pointData) {\n continue;\n }\n var fields = pointData.fields;\n var value = pointData.value;\n var visible = pointData.visible;\n var angle = value !== 0 ? constantAngle || value * anglePerValue : 0;\n var explode = data.length !== 1 && Boolean(fields.explode);\n if (!isFunction(currentSeries.color)) {\n currentSeries.color = fields.color || seriesColors[i % colorsCount];\n }\n callback(pointData.valueFields.value, new dataviz.Ring(null, 0, 0, currentAngle, angle), {\n owner: this$1,\n category: fields.category || '',\n index: i,\n series: currentSeries,\n seriesIx: seriesIx,\n dataItem: data[i],\n percentage: total !== 0 ? value / total : 0,\n explode: explode,\n visibleInLegend: fields.visibleInLegend,\n visible: visible,\n zIndex: seriesCount - seriesIx,\n animationDelay: this$1.animationDelay(i, seriesIx, seriesCount)\n });\n if (visible !== false) {\n currentAngle += angle;\n }\n }\n }\n },\n evalSegmentOptions: function (options, value, fields) {\n var series = fields.series;\n evalOptions(options, {\n value: value,\n series: series,\n dataItem: fields.dataItem,\n category: fields.category,\n percentage: fields.percentage\n }, {\n defaults: series._defaults,\n excluded: [\n 'data',\n 'content',\n 'template',\n 'visual',\n 'toggle'\n ]\n });\n },\n addValue: function (value, sector, fields) {\n var segmentOptions = deepExtend({}, fields.series, { index: fields.index });\n this.evalSegmentOptions(segmentOptions, value, fields);\n this.createLegendItem(value, segmentOptions, fields);\n if (fields.visible === false) {\n return;\n }\n var segment = new PieSegment(value, sector, segmentOptions);\n $.extend(segment, fields);\n this.append(segment);\n this.points.push(segment);\n },\n reflow: function (targetBox) {\n var ref = this;\n var options = ref.options;\n var points = ref.points;\n var seriesConfigs = ref.seriesConfigs;\n if (seriesConfigs === void 0) {\n seriesConfigs = [];\n }\n var count = points.length;\n var box = targetBox.clone();\n var space = 5;\n var minWidth = Math.min(box.width(), box.height());\n var halfMinWidth = minWidth / 2;\n var defaultPadding = minWidth - minWidth * 0.85;\n var newBox = new Box(box.x1, box.y1, box.x1 + minWidth, box.y1 + minWidth);\n var newBoxCenter = newBox.center();\n var boxCenter = box.center();\n var seriesCount = options.series.length;\n var leftSideLabels = [];\n var rightSideLabels = [];\n var padding = valueOrDefault(options.padding, defaultPadding);\n padding = padding > halfMinWidth - space ? halfMinWidth - space : padding;\n newBox.translate(boxCenter.x - newBoxCenter.x, boxCenter.y - newBoxCenter.y);\n var radius = halfMinWidth - padding;\n var center = new Point(radius + newBox.x1 + padding, radius + newBox.y1 + padding);\n for (var i = 0; i < count; i++) {\n var segment = points[i];\n var sector = segment.sector;\n var seriesIndex = segment.seriesIx;\n sector.radius = radius;\n sector.center = center;\n if (seriesConfigs.length) {\n var seriesConfig = seriesConfigs[seriesIndex];\n sector.innerRadius = seriesConfig.innerRadius;\n sector.radius = seriesConfig.radius;\n }\n if (seriesIndex === seriesCount - 1 && segment.explode) {\n sector.center = sector.clone().setRadius(sector.radius * 0.15).point(sector.middle());\n }\n segment.reflow(newBox);\n var label = segment.label;\n if (label) {\n if (label.options.position === OUTSIDE_END) {\n if (seriesIndex === seriesCount - 1) {\n if (label.orientation === RIGHT) {\n rightSideLabels.push(label);\n } else {\n leftSideLabels.push(label);\n }\n }\n }\n }\n }\n if (leftSideLabels.length > 0) {\n leftSideLabels.sort(this.labelComparator(true));\n this.leftLabelsReflow(leftSideLabels);\n }\n if (rightSideLabels.length > 0) {\n rightSideLabels.sort(this.labelComparator(false));\n this.rightLabelsReflow(rightSideLabels);\n }\n this.box = newBox;\n },\n leftLabelsReflow: function (labels) {\n var distances = this.distanceBetweenLabels(labels);\n this.distributeLabels(distances, labels);\n },\n rightLabelsReflow: function (labels) {\n var distances = this.distanceBetweenLabels(labels);\n this.distributeLabels(distances, labels);\n },\n distanceBetweenLabels: function (labels) {\n var segment = last(this.points);\n var sector = segment.sector;\n var count = labels.length - 1;\n var lr = sector.radius + segment.options.labels.distance;\n var distances = [];\n var firstBox = labels[0].box;\n var distance = round(firstBox.y1 - (sector.center.y - lr - firstBox.height() - firstBox.height() / 2));\n distances.push(distance);\n for (var i = 0; i < count; i++) {\n var secondBox = labels[i + 1].box;\n firstBox = labels[i].box;\n distance = round(secondBox.y1 - firstBox.y2);\n distances.push(distance);\n }\n distance = round(sector.center.y + lr - labels[count].box.y2 - labels[count].box.height() / 2);\n distances.push(distance);\n return distances;\n },\n distributeLabels: function (distances, labels) {\n var this$1 = this;\n var count = distances.length;\n var left, right, remaining;\n for (var i = 0; i < count; i++) {\n remaining = -distances[i];\n left = right = i;\n while (remaining > 0 && (left >= 0 || right < count)) {\n remaining = this$1._takeDistance(distances, i, --left, remaining);\n remaining = this$1._takeDistance(distances, i, ++right, remaining);\n }\n }\n this.reflowLabels(distances, labels);\n },\n _takeDistance: function (distances, anchor, position, amount) {\n var result = amount;\n if (distances[position] > 0) {\n var available = Math.min(distances[position], result);\n result -= available;\n distances[position] -= available;\n distances[anchor] += available;\n }\n return result;\n },\n reflowLabels: function (distances, labels) {\n var this$1 = this;\n var segment = last(this.points);\n var sector = segment.sector;\n var labelOptions = segment.options.labels;\n var labelsCount = labels.length;\n var labelDistance = labelOptions.distance;\n var boxY = sector.center.y - (sector.radius + labelDistance) - labels[0].box.height();\n var boxX;\n distances[0] += 2;\n for (var i = 0; i < labelsCount; i++) {\n var label = labels[i];\n var box = label.box;\n boxY += distances[i];\n boxX = this$1.hAlignLabel(box.x2, sector.clone().expand(labelDistance), boxY, boxY + box.height(), label.orientation === RIGHT);\n if (label.orientation === RIGHT) {\n if (labelOptions.align !== CIRCLE) {\n boxX = sector.radius + sector.center.x + labelDistance;\n }\n label.reflow(new Box(boxX + box.width(), boxY, boxX, boxY));\n } else {\n if (labelOptions.align !== CIRCLE) {\n boxX = sector.center.x - sector.radius - labelDistance;\n }\n label.reflow(new Box(boxX - box.width(), boxY, boxX, boxY));\n }\n boxY += box.height();\n }\n },\n createVisual: function () {\n var this$1 = this;\n var ref = this;\n var connectors = ref.options.connectors;\n var points = ref.points;\n var count = points.length;\n var space = 4;\n ChartElement.fn.createVisual.call(this);\n this._connectorLines = [];\n for (var i = 0; i < count; i++) {\n var segment = points[i];\n var sector = segment.sector;\n var label = segment.label;\n var angle = sector.middle();\n var connectorsColor = (segment.options.connectors || {}).color || connectors.color;\n if (label) {\n var connectorLine = new Path({\n stroke: {\n color: connectorsColor,\n width: connectors.width\n },\n animation: {\n type: FADEIN,\n delay: segment.animationDelay\n }\n });\n if (label.options.position === OUTSIDE_END) {\n var box = label.box;\n var centerPoint = sector.center;\n var start = sector.point(angle);\n var middle = new Point(box.x1, box.center().y);\n var sr = void 0, end = void 0, crossing = void 0;\n start = sector.clone().expand(connectors.padding).point(angle);\n connectorLine.moveTo(start.x, start.y);\n if (label.orientation === RIGHT) {\n end = new Point(box.x1 - connectors.padding, box.center().y);\n crossing = intersection(centerPoint, start, middle, end);\n middle = new Point(end.x - space, end.y);\n crossing = crossing || middle;\n crossing.x = Math.min(crossing.x, middle.x);\n if (this$1.pointInCircle(crossing, sector.center, sector.radius + space) || crossing.x < sector.center.x) {\n sr = sector.center.x + sector.radius + space;\n if (segment.options.labels.align !== COLUMN) {\n if (sr < middle.x) {\n connectorLine.lineTo(sr, start.y);\n } else {\n connectorLine.lineTo(start.x + space * 2, start.y);\n }\n } else {\n connectorLine.lineTo(sr, start.y);\n }\n connectorLine.lineTo(middle.x, end.y);\n } else {\n crossing.y = end.y;\n connectorLine.lineTo(crossing.x, crossing.y);\n }\n } else {\n end = new Point(box.x2 + connectors.padding, box.center().y);\n crossing = intersection(centerPoint, start, middle, end);\n middle = new Point(end.x + space, end.y);\n crossing = crossing || middle;\n crossing.x = Math.max(crossing.x, middle.x);\n if (this$1.pointInCircle(crossing, sector.center, sector.radius + space) || crossing.x > sector.center.x) {\n sr = sector.center.x - sector.radius - space;\n if (segment.options.labels.align !== COLUMN) {\n if (sr > middle.x) {\n connectorLine.lineTo(sr, start.y);\n } else {\n connectorLine.lineTo(start.x - space * 2, start.y);\n }\n } else {\n connectorLine.lineTo(sr, start.y);\n }\n connectorLine.lineTo(middle.x, end.y);\n } else {\n crossing.y = end.y;\n connectorLine.lineTo(crossing.x, crossing.y);\n }\n }\n connectorLine.lineTo(end.x, end.y);\n this$1._connectorLines.push(connectorLine);\n this$1.visual.append(connectorLine);\n }\n }\n }\n },\n labelComparator: function (reverse) {\n var reverseValue = reverse ? -1 : 1;\n return function (a, b) {\n var first = (a.parent.sector.middle() + 270) % 360;\n var second = (b.parent.sector.middle() + 270) % 360;\n return (first - second) * reverseValue;\n };\n },\n hAlignLabel: function (originalX, sector, y1, y2, direction) {\n var radius = sector.radius;\n var sector_center = sector.center;\n var cx = sector_center.x;\n var cy = sector_center.y;\n var t = Math.min(Math.abs(cy - y1), Math.abs(cy - y2));\n if (t > radius) {\n return originalX;\n }\n return cx + Math.sqrt(radius * radius - t * t) * (direction ? 1 : -1);\n },\n pointInCircle: function (point, center, radius) {\n return Math.pow(center.x - point.x, 2) + Math.pow(center.y - point.y, 2) < Math.pow(radius, 2);\n },\n formatPointValue: function (point, format) {\n return this.chartService.format.auto(format, point.value);\n },\n animationDelay: function (categoryIndex) {\n return categoryIndex * PIE_SECTOR_ANIM_DELAY;\n }\n });\n function intersection(a1, a2, b1, b2) {\n var uat = (b2.x - b1.x) * (a1.y - b1.y) - (b2.y - b1.y) * (a1.x - b1.x);\n var ub = (b2.y - b1.y) * (a2.x - a1.x) - (b2.x - b1.x) * (a2.y - a1.y);\n var result;\n if (ub !== 0) {\n var ua = uat / ub;\n result = new Point(a1.x + ua * (a2.x - a1.x), a1.y + ua * (a2.y - a1.y));\n }\n return result;\n }\n setDefaultOptions(PieChart, {\n startAngle: 90,\n connectors: {\n width: 2,\n color: '#939393',\n padding: 8\n },\n inactiveItems: {\n markers: {},\n labels: {}\n }\n });\n deepExtend(PieChart.prototype, PieChartMixin);\n var PiePlotArea = PlotAreaBase.extend({\n render: function () {\n this.createPieChart(this.series);\n },\n createPieChart: function (series) {\n var firstSeries = series[0];\n var pieChart = new PieChart(this, {\n series: series,\n padding: firstSeries.padding,\n startAngle: firstSeries.startAngle,\n connectors: firstSeries.connectors,\n legend: this.options.legend\n });\n this.appendChart(pieChart);\n },\n appendChart: function (chart, pane) {\n PlotAreaBase.fn.appendChart.call(this, chart, pane);\n append(this.options.legend.items, chart.legendItems);\n }\n });\n var DonutSegment = PieSegment.extend({\n reflowLabel: function () {\n var ref = this;\n var labelsOptions = ref.options.labels;\n var label = ref.label;\n var sector = this.sector.clone();\n var angle = sector.middle();\n if (label) {\n var labelHeight = label.box.height();\n if (labelsOptions.position === CENTER) {\n sector.radius -= (sector.radius - sector.innerRadius) / 2;\n var lp = sector.point(angle);\n label.reflow(new Box(lp.x, lp.y - labelHeight / 2, lp.x, lp.y));\n } else {\n PieSegment.fn.reflowLabel.call(this);\n }\n }\n },\n createSegment: function (sector, options) {\n return dataviz.ShapeBuilder.current.createRing(sector, options);\n }\n });\n setDefaultOptions(DonutSegment, {\n overlay: { gradient: 'roundedGlass' },\n labels: { position: CENTER },\n animation: { type: PIE }\n });\n deepExtend(DonutSegment.prototype, PointEventsMixin);\n var DONUT_SECTOR_ANIM_DELAY = 50;\n var DonutChart = PieChart.extend({\n addValue: function (value, sector, fields) {\n var segmentOptions = deepExtend({}, fields.series, { index: fields.index });\n this.evalSegmentOptions(segmentOptions, value, fields);\n this.createLegendItem(value, segmentOptions, fields);\n if (!value || fields.visible === false) {\n return;\n }\n var segment = new DonutSegment(value, sector, segmentOptions);\n $.extend(segment, fields);\n this.append(segment);\n this.points.push(segment);\n },\n reflow: function (targetBox) {\n var this$1 = this;\n var options = this.options;\n var box = targetBox.clone();\n var space = 5;\n var minWidth = Math.min(box.width(), box.height());\n var halfMinWidth = minWidth / 2;\n var defaultPadding = minWidth - minWidth * 0.85;\n var series = options.series;\n var seriesCount = series.length;\n var padding = valueOrDefault(options.padding, defaultPadding);\n padding = padding > halfMinWidth - space ? halfMinWidth - space : padding;\n var totalSize = halfMinWidth - padding;\n var seriesWithoutSize = 0;\n var holeSize;\n for (var i = 0; i < seriesCount; i++) {\n var currentSeries = series[i];\n if (i === 0) {\n if (defined(currentSeries.holeSize)) {\n holeSize = currentSeries.holeSize;\n totalSize -= currentSeries.holeSize;\n }\n }\n if (defined(currentSeries.size)) {\n totalSize -= currentSeries.size;\n } else {\n seriesWithoutSize++;\n }\n if (defined(currentSeries.margin) && i !== seriesCount - 1) {\n totalSize -= currentSeries.margin;\n }\n }\n if (!defined(holeSize)) {\n var currentSize = (halfMinWidth - padding) / (seriesCount + 0.75);\n holeSize = currentSize * 0.75;\n totalSize -= holeSize;\n }\n var innerRadius = holeSize;\n var margin = 0;\n var size, radius;\n this.seriesConfigs = [];\n for (var i$1 = 0; i$1 < seriesCount; i$1++) {\n var currentSeries$1 = series[i$1];\n size = valueOrDefault(currentSeries$1.size, totalSize / seriesWithoutSize);\n innerRadius += margin;\n radius = innerRadius + size;\n this$1.seriesConfigs.push({\n innerRadius: innerRadius,\n radius: radius\n });\n margin = currentSeries$1.margin || 0;\n innerRadius = radius;\n }\n PieChart.fn.reflow.call(this, targetBox);\n },\n animationDelay: function (categoryIndex, seriesIndex, seriesCount) {\n return categoryIndex * DONUT_SECTOR_ANIM_DELAY + INITIAL_ANIMATION_DURATION * (seriesIndex + 1) / (seriesCount + 1);\n }\n });\n setDefaultOptions(DonutChart, {\n startAngle: 90,\n connectors: {\n width: 2,\n color: '#939393',\n padding: 8\n }\n });\n var DonutPlotArea = PiePlotArea.extend({\n render: function () {\n this.createDonutChart(this.series);\n },\n createDonutChart: function (series) {\n var firstSeries = series[0];\n var donutChart = new DonutChart(this, {\n series: series,\n padding: firstSeries.padding,\n connectors: firstSeries.connectors,\n legend: this.options.legend\n });\n this.appendChart(donutChart);\n }\n });\n var DEFAULT_PADDING = 0.15;\n var PolarPlotAreaBase = PlotAreaBase.extend({\n initFields: function () {\n this.valueAxisRangeTracker = new AxisGroupRangeTracker();\n },\n render: function () {\n this.addToLegend(this.series);\n this.createPolarAxis();\n this.createCharts();\n this.createValueAxis();\n },\n alignAxes: function () {\n var axis = this.valueAxis;\n var range = axis.range();\n var crossingValue = axis.options.reverse ? range.max : range.min;\n var slot = axis.getSlot(crossingValue);\n var center = this.polarAxis.getSlot(0).center;\n var axisBox = axis.box.translate(center.x - slot.x1, center.y - slot.y1);\n axis.reflow(axisBox);\n },\n createValueAxis: function () {\n var tracker = this.valueAxisRangeTracker;\n var defaultRange = tracker.query();\n var axisOptions = this.valueAxisOptions({\n roundToMajorUnit: false,\n zIndex: -1\n });\n var axisType, axisDefaultRange;\n if (axisOptions.type === LOGARITHMIC) {\n axisType = dataviz.RadarLogarithmicAxis;\n axisDefaultRange = {\n min: 0.1,\n max: 1\n };\n } else {\n axisType = dataviz.RadarNumericAxis;\n axisDefaultRange = {\n min: 0,\n max: 1\n };\n }\n var range = tracker.query(name) || defaultRange || axisDefaultRange;\n if (range && defaultRange) {\n range.min = Math.min(range.min, defaultRange.min);\n range.max = Math.max(range.max, defaultRange.max);\n }\n var valueAxis = new axisType(range.min, range.max, axisOptions, this.chartService);\n this.valueAxis = valueAxis;\n this.appendAxis(valueAxis);\n },\n reflowAxes: function () {\n var ref = this;\n var options = ref.options.plotArea;\n var valueAxis = ref.valueAxis;\n var polarAxis = ref.polarAxis;\n var box = ref.box;\n var defaultPadding = Math.min(box.width(), box.height()) * DEFAULT_PADDING;\n var padding = getSpacing(options.padding || {}, defaultPadding);\n var paddingBox = box.clone().unpad(padding);\n var axisBox = paddingBox.clone();\n axisBox.y2 = axisBox.y1 + Math.min(axisBox.width(), axisBox.height());\n axisBox.align(paddingBox, Y, CENTER);\n var valueAxisBox = axisBox.clone().shrink(0, axisBox.height() / 2);\n polarAxis.reflow(axisBox);\n valueAxis.reflow(valueAxisBox);\n var heightDiff = valueAxis.lineBox().height() - valueAxis.box.height();\n valueAxis.reflow(valueAxis.box.unpad({ top: heightDiff }));\n this.axisBox = axisBox;\n this.alignAxes(axisBox);\n },\n backgroundBox: function () {\n return this.box;\n }\n });\n var PolarScatterChart = ScatterChart.extend({\n pointSlot: function (slotX, slotY) {\n var valueRadius = slotX.center.y - slotY.y1;\n var slot = Point.onCircle(slotX.center, slotX.startAngle, valueRadius);\n return new Box(slot.x, slot.y, slot.x, slot.y);\n }\n });\n setDefaultOptions(PolarScatterChart, { clip: false });\n var PolarLineChart = ScatterLineChart.extend({});\n PolarLineChart.prototype.pointSlot = PolarScatterChart.prototype.pointSlot;\n setDefaultOptions(PolarLineChart, { clip: false });\n var SplinePolarAreaSegment = SplineAreaSegment.extend({\n closeFill: function (fillPath) {\n var center = this._polarAxisCenter();\n fillPath.lineTo(center.x, center.y);\n },\n _polarAxisCenter: function () {\n var polarAxis = this.parent.plotArea.polarAxis;\n var center = polarAxis.box.center();\n return center;\n },\n strokeSegments: function () {\n var segments = this._strokeSegments;\n if (!segments) {\n var center = this._polarAxisCenter();\n var curveProcessor = new dataviz.CurveProcessor(false);\n var linePoints = LineSegment.prototype.points.call(this);\n linePoints.push(center);\n segments = this._strokeSegments = curveProcessor.process(linePoints);\n segments.pop();\n }\n return segments;\n }\n });\n var PolarAreaSegment = AreaSegment.extend({\n points: function () {\n var ref = this;\n var polarAxis = ref.parent.plotArea.polarAxis;\n var stackPoints = ref.stackPoints;\n var center = polarAxis.box.center();\n var points = LineSegment.prototype.points.call(this, stackPoints);\n points.unshift([\n center.x,\n center.y\n ]);\n points.push([\n center.x,\n center.y\n ]);\n return points;\n }\n });\n var PolarAreaChart = PolarLineChart.extend({\n createSegment: function (linePoints, currentSeries, seriesIx) {\n var style = (currentSeries.line || {}).style;\n var segment;\n if (style === SMOOTH) {\n segment = new SplinePolarAreaSegment(linePoints, null, false, currentSeries, seriesIx);\n } else {\n segment = new PolarAreaSegment(linePoints, [], currentSeries, seriesIx);\n }\n return segment;\n },\n createMissingValue: function (value, missingValues) {\n var missingValue;\n if (hasValue(value.x) && missingValues !== INTERPOLATE) {\n missingValue = {\n x: value.x,\n y: value.y\n };\n if (missingValues === ZERO) {\n missingValue.y = 0;\n }\n }\n return missingValue;\n },\n seriesMissingValues: function (series) {\n return series.missingValues || ZERO;\n },\n _hasMissingValuesGap: function () {\n var this$1 = this;\n var series = this.options.series;\n for (var idx = 0; idx < series.length; idx++) {\n if (this$1.seriesMissingValues(series[idx]) === GAP) {\n return true;\n }\n }\n },\n sortPoints: function (points) {\n var this$1 = this;\n points.sort(xComparer);\n if (this._hasMissingValuesGap()) {\n for (var idx = 0; idx < points.length; idx++) {\n var point = points[idx];\n if (point) {\n var value = point.value;\n if (!hasValue(value.y) && this$1.seriesMissingValues(point.series) === GAP) {\n delete points[idx];\n }\n }\n }\n }\n return points;\n }\n });\n function xComparer(a, b) {\n return a.value.x - b.value.x;\n }\n var PolarPlotArea = PolarPlotAreaBase.extend({\n createPolarAxis: function () {\n var polarAxis = new dataviz.PolarAxis(this.options.xAxis, this.chartService);\n this.polarAxis = polarAxis;\n this.axisX = polarAxis;\n this.appendAxis(polarAxis);\n },\n valueAxisOptions: function (defaults) {\n return deepExtend(defaults, {\n majorGridLines: { type: ARC },\n minorGridLines: { type: ARC }\n }, this.options.yAxis);\n },\n createValueAxis: function () {\n PolarPlotAreaBase.fn.createValueAxis.call(this);\n this.axisY = this.valueAxis;\n },\n appendChart: function (chart, pane) {\n this.valueAxisRangeTracker.update(chart.yAxisRanges);\n PlotAreaBase.prototype.appendChart.call(this, chart, pane);\n },\n createCharts: function () {\n var series = this.filterVisibleSeries(this.series);\n var pane = this.panes[0];\n this.createLineChart(filterSeriesByType(series, [POLAR_LINE]), pane);\n this.createScatterChart(filterSeriesByType(series, [POLAR_SCATTER]), pane);\n this.createAreaChart(filterSeriesByType(series, [POLAR_AREA]), pane);\n },\n createLineChart: function (series, pane) {\n if (series.length === 0) {\n return;\n }\n var lineChart = new PolarLineChart(this, { series: series });\n this.appendChart(lineChart, pane);\n },\n createScatterChart: function (series, pane) {\n if (series.length === 0) {\n return;\n }\n var scatterChart = new PolarScatterChart(this, { series: series });\n this.appendChart(scatterChart, pane);\n },\n createAreaChart: function (series, pane) {\n if (series.length === 0) {\n return;\n }\n var areaChart = new PolarAreaChart(this, { series: series });\n this.appendChart(areaChart, pane);\n },\n _dispatchEvent: function (chart, e, eventType) {\n var coords = chart._eventCoordinates(e);\n var point = new Point(coords.x, coords.y);\n var xValue = this.axisX.getValue(point);\n var yValue = this.axisY.getValue(point);\n if (xValue !== null && yValue !== null) {\n chart.trigger(eventType, {\n element: eventElement(e),\n x: xValue,\n y: yValue\n });\n }\n },\n createCrosshairs: function () {\n }\n });\n setDefaultOptions(PolarPlotArea, {\n xAxis: {},\n yAxis: {}\n });\n deepExtend(PolarPlotArea.prototype, PlotAreaEventsMixin);\n var RadarLineChart = LineChart.extend({\n pointSlot: function (categorySlot, valueSlot) {\n var valueRadius = categorySlot.center.y - valueSlot.y1;\n var slot = Point.onCircle(categorySlot.center, categorySlot.middle(), valueRadius);\n return new Box(slot.x, slot.y, slot.x, slot.y);\n },\n createSegment: function (linePoints, currentSeries, seriesIx) {\n var style = currentSeries.style;\n var pointType;\n if (style === SMOOTH) {\n pointType = SplineSegment;\n } else {\n pointType = LineSegment;\n }\n var segment = new pointType(linePoints, currentSeries, seriesIx);\n if (linePoints.length === currentSeries.data.length) {\n segment.options.closed = true;\n }\n return segment;\n }\n });\n setDefaultOptions(RadarLineChart, { clip: false });\n var SplineRadarAreaSegment = SplineAreaSegment.extend({\n closeFill: function () {\n }\n });\n var RadarAreaSegment = AreaSegment.extend({\n points: function () {\n return LineSegment.prototype.points.call(this, this.stackPoints);\n }\n });\n var RadarAreaChart = RadarLineChart.extend({\n createSegment: function (linePoints, currentSeries, seriesIx, prevSegment) {\n var isStacked = this.options.isStacked;\n var style = (currentSeries.line || {}).style;\n var segment;\n if (style === SMOOTH) {\n segment = new SplineRadarAreaSegment(linePoints, prevSegment, isStacked, currentSeries, seriesIx);\n segment.options.closed = true;\n } else {\n var stackPoints;\n if (isStacked && seriesIx > 0 && prevSegment) {\n stackPoints = prevSegment.linePoints.slice(0).reverse();\n }\n linePoints.push(linePoints[0]);\n segment = new RadarAreaSegment(linePoints, stackPoints, currentSeries, seriesIx);\n }\n return segment;\n },\n seriesMissingValues: function (series) {\n return series.missingValues || ZERO;\n }\n });\n var RadarSegment = DonutSegment.extend({\n init: function (value, options) {\n DonutSegment.fn.init.call(this, value, null, options);\n }\n });\n setDefaultOptions(RadarSegment, {\n overlay: { gradient: 'none' },\n labels: { distance: 10 }\n });\n var RadarClusterLayout = ChartElement.extend({\n reflow: function (sector) {\n var ref = this;\n var options = ref.options;\n var children = ref.children;\n var gap = options.gap;\n var spacing = options.spacing;\n var count = children.length;\n var slots = count + gap + spacing * (count - 1);\n var slotAngle = sector.angle / slots;\n var angle = sector.startAngle + slotAngle * (gap / 2);\n for (var i = 0; i < count; i++) {\n var slotSector = sector.clone();\n slotSector.startAngle = angle;\n slotSector.angle = slotAngle;\n if (children[i].sector) {\n slotSector.radius = children[i].sector.radius;\n }\n children[i].reflow(slotSector);\n children[i].sector = slotSector;\n angle += slotAngle + slotAngle * spacing;\n }\n }\n });\n setDefaultOptions(RadarClusterLayout, {\n gap: 1,\n spacing: 0\n });\n var RadarStackLayout = ChartElement.extend({\n reflow: function (sector) {\n var ref = this;\n var reverse = ref.options.reverse;\n var children = ref.children;\n var childrenCount = children.length;\n var first = reverse ? childrenCount - 1 : 0;\n var step = reverse ? -1 : 1;\n this.box = new Box();\n for (var i = first; i >= 0 && i < childrenCount; i += step) {\n var childSector = children[i].sector;\n childSector.startAngle = sector.startAngle;\n childSector.angle = sector.angle;\n }\n }\n });\n var RadarBarChart = BarChart.extend({\n pointType: function () {\n return RadarSegment;\n },\n clusterType: function () {\n return RadarClusterLayout;\n },\n stackType: function () {\n return RadarStackLayout;\n },\n categorySlot: function (categoryAxis, categoryIx) {\n return categoryAxis.getSlot(categoryIx);\n },\n pointSlot: function (categorySlot, valueSlot) {\n var slot = categorySlot.clone();\n var y = categorySlot.center.y;\n slot.radius = y - valueSlot.y1;\n slot.innerRadius = y - valueSlot.y2;\n return slot;\n },\n reflowPoint: function (point, pointSlot) {\n point.sector = pointSlot;\n point.reflow();\n },\n createAnimation: function () {\n this.options.animation.center = this.box.toRect().center();\n BarChart.fn.createAnimation.call(this);\n }\n });\n RadarBarChart.prototype.reflow = CategoricalChart.prototype.reflow;\n setDefaultOptions(RadarBarChart, {\n clip: false,\n animation: { type: 'pie' }\n });\n var RadarPlotArea = PolarPlotAreaBase.extend({\n createPolarAxis: function () {\n var categoryAxis = new dataviz.RadarCategoryAxis(this.options.categoryAxis, this.chartService);\n this.polarAxis = categoryAxis;\n this.categoryAxis = categoryAxis;\n this.appendAxis(categoryAxis);\n this.aggregateCategories();\n this.createCategoryAxesLabels();\n },\n valueAxisOptions: function (defaults) {\n if (this._hasBarCharts) {\n deepExtend(defaults, {\n majorGridLines: { type: ARC },\n minorGridLines: { type: ARC }\n });\n }\n if (this._isStacked100) {\n deepExtend(defaults, {\n roundToMajorUnit: false,\n labels: { format: 'P0' }\n });\n }\n return deepExtend(defaults, this.options.valueAxis);\n },\n aggregateCategories: function () {\n CategoricalPlotArea.prototype.aggregateCategories.call(this, this.panes);\n },\n createCategoryAxesLabels: function () {\n CategoricalPlotArea.prototype.createCategoryAxesLabels.call(this, this.panes);\n },\n filterSeries: function (currentSeries) {\n return currentSeries;\n },\n createCharts: function () {\n var series = this.filterVisibleSeries(this.series);\n var pane = this.panes[0];\n this.createAreaChart(filterSeriesByType(series, [RADAR_AREA]), pane);\n this.createLineChart(filterSeriesByType(series, [RADAR_LINE]), pane);\n this.createBarChart(filterSeriesByType(series, [RADAR_COLUMN]), pane);\n },\n chartOptions: function (series) {\n var options = { series: series };\n var firstSeries = series[0];\n if (firstSeries) {\n var filteredSeries = this.filterVisibleSeries(series);\n var stack = firstSeries.stack;\n options.isStacked = stack && filteredSeries.length > 1;\n options.isStacked100 = stack && stack.type === '100%' && filteredSeries.length > 1;\n if (options.isStacked100) {\n this._isStacked100 = true;\n }\n }\n return options;\n },\n createAreaChart: function (series, pane) {\n if (series.length === 0) {\n return;\n }\n var areaChart = new RadarAreaChart(this, this.chartOptions(series));\n this.appendChart(areaChart, pane);\n },\n createLineChart: function (series, pane) {\n if (series.length === 0) {\n return;\n }\n var lineChart = new RadarLineChart(this, this.chartOptions(series));\n this.appendChart(lineChart, pane);\n },\n createBarChart: function (series, pane) {\n if (series.length === 0) {\n return;\n }\n var firstSeries = series[0];\n var options = this.chartOptions(series);\n options.gap = firstSeries.gap;\n options.spacing = firstSeries.spacing;\n var barChart = new RadarBarChart(this, options);\n this.appendChart(barChart, pane);\n this._hasBarCharts = true;\n },\n seriesCategoryAxis: function () {\n return this.categoryAxis;\n },\n _dispatchEvent: function (chart, e, eventType) {\n var coords = chart._eventCoordinates(e);\n var point = new Point(coords.x, coords.y);\n var category = this.categoryAxis.getCategory(point);\n var value = this.valueAxis.getValue(point);\n if (category !== null && value !== null) {\n chart.trigger(eventType, {\n element: eventElement(e),\n category: category,\n value: value\n });\n }\n },\n createCrosshairs: function () {\n }\n });\n deepExtend(RadarPlotArea.prototype, PlotAreaEventsMixin, {\n appendChart: CategoricalPlotArea.prototype.appendChart,\n aggregateSeries: CategoricalPlotArea.prototype.aggregateSeries\n });\n setDefaultOptions(RadarPlotArea, {\n categoryAxis: { categories: [] },\n valueAxis: {}\n });\n var FunnelSegment = ChartElement.extend({\n init: function (value, options, segmentOptions) {\n ChartElement.fn.init.call(this, options);\n this.value = value;\n this.options.index = segmentOptions.index;\n },\n reflow: function (chartBox) {\n var points = this.points;\n var label = this.children[0];\n this.box = new Box(points[0].x, points[0].y, points[1].x, points[2].y);\n if (label) {\n label.reflow(new Box(chartBox.x1, points[0].y, chartBox.x2, points[2].y));\n }\n },\n createVisual: function () {\n var this$1 = this;\n var options = this.options;\n var visual;\n ChartElement.fn.createVisual.call(this);\n if (options.visual) {\n visual = options.visual({\n category: this.category,\n dataItem: this.dataItem,\n value: this.value,\n series: this.series,\n percentage: this.percentage,\n points: this.points,\n options: options,\n sender: this.getSender(),\n createVisual: function () {\n return this$1.createPath();\n }\n });\n } else {\n visual = this.createPath();\n }\n if (visual) {\n this.visual.append(visual);\n }\n },\n createPath: function () {\n var options = this.options;\n var border = options.border;\n var path = Path.fromPoints(this.points, {\n fill: {\n color: options.color,\n opacity: options.opacity\n },\n stroke: {\n color: border.color,\n opacity: border.opacity,\n width: border.width\n }\n }).close();\n return path;\n },\n createHighlight: function (style) {\n return Path.fromPoints(this.points, style);\n },\n highlightVisual: function () {\n return this.visual.children[0];\n },\n highlightVisualArgs: function () {\n var path = Path.fromPoints(this.points).close();\n return {\n options: this.options,\n path: path\n };\n },\n tooltipAnchor: function () {\n var box = this.box;\n return {\n point: new Point(box.center().x, box.y1),\n align: {\n horizontal: 'center',\n vertical: 'top'\n }\n };\n },\n formatValue: function (format) {\n var point = this;\n return point.owner.formatPointValue(point, format);\n }\n });\n setDefaultOptions(FunnelSegment, {\n color: WHITE,\n border: { width: 1 }\n });\n deepExtend(FunnelSegment.prototype, PointEventsMixin);\n var FunnelChart = ChartElement.extend({\n init: function (plotArea, options) {\n ChartElement.fn.init.call(this, options);\n this.plotArea = plotArea;\n this.points = [];\n this.labels = [];\n this.legendItems = [];\n this.render();\n },\n formatPointValue: function (point, format) {\n return this.chartService.format.auto(format, point.value);\n },\n render: function () {\n var this$1 = this;\n var ref = this;\n var options = ref.options;\n var seriesColors = ref.plotArea.options.seriesColors;\n if (seriesColors === void 0) {\n seriesColors = [];\n }\n var series = options.series[0];\n var data = series.data;\n if (!data) {\n return;\n }\n var ref$1 = bindSegments(series);\n var total = ref$1.total;\n var points = ref$1.points;\n for (var i = 0; i < points.length; i++) {\n var pointData = points[i];\n if (!pointData) {\n continue;\n }\n var fields = pointData.fields;\n if (!isFunction(series.color)) {\n series.color = fields.color || seriesColors[i % seriesColors.length];\n }\n fields = deepExtend({\n index: i,\n owner: this$1,\n series: series,\n dataItem: data[i],\n percentage: pointData.value / total\n }, fields, { visible: pointData.visible });\n var value = pointData.valueFields.value;\n var segment = this$1.createSegment(value, fields);\n var label = this$1.createLabel(value, fields);\n if (segment && label) {\n segment.append(label);\n }\n }\n },\n evalSegmentOptions: function (options, value, fields) {\n var series = fields.series;\n evalOptions(options, {\n value: value,\n series: series,\n dataItem: fields.dataItem,\n index: fields.index\n }, {\n defaults: series._defaults,\n excluded: [\n 'data',\n 'content',\n 'template',\n 'toggle',\n 'visual'\n ]\n });\n },\n createSegment: function (value, fields) {\n var seriesOptions = deepExtend({}, fields.series);\n this.evalSegmentOptions(seriesOptions, value, fields);\n this.createLegendItem(value, seriesOptions, fields);\n if (fields.visible !== false) {\n var segment = new FunnelSegment(value, seriesOptions, fields);\n $.extend(segment, fields);\n this.append(segment);\n this.points.push(segment);\n return segment;\n }\n },\n createLabel: function (value, fields) {\n var series = fields.series;\n var dataItem = fields.dataItem;\n var labels = deepExtend({}, this.options.labels, series.labels);\n var text = value;\n if (labels.visible) {\n var labelTemplate = getTemplate(labels);\n if (labelTemplate) {\n text = labelTemplate({\n dataItem: dataItem,\n value: value,\n percentage: fields.percentage,\n category: fields.category,\n series: series\n });\n } else if (labels.format) {\n text = this.plotArea.chartService.format.auto(labels.format, text);\n }\n if (!labels.color) {\n var brightnessValue = new Color(series.color).percBrightness();\n if (brightnessValue > 180) {\n labels.color = BLACK;\n } else {\n labels.color = WHITE;\n }\n if (!labels.background) {\n labels.background = series.color;\n }\n }\n this.evalSegmentOptions(labels, value, fields);\n var textBox = new TextBox(text, deepExtend({ vAlign: labels.position }, labels));\n this.labels.push(textBox);\n return textBox;\n }\n },\n labelPadding: function () {\n var labels = this.labels;\n var padding = {\n left: 0,\n right: 0\n };\n for (var i = 0; i < labels.length; i++) {\n var label = labels[i];\n var align = label.options.align;\n if (align !== CENTER) {\n var width = labels[i].box.width();\n if (align === LEFT) {\n padding.left = Math.max(padding.left, width);\n } else {\n padding.right = Math.max(padding.right, width);\n }\n }\n }\n return padding;\n },\n dynamicSlopeReflow: function (box, width, totalHeight) {\n var ref = this;\n var options = ref.options;\n var segments = ref.points;\n var count = segments.length;\n var firstSegment = segments[0];\n var maxSegment = firstSegment;\n for (var idx = 0; idx < segments.length; idx++) {\n if (segments[idx].percentage > maxSegment.percentage) {\n maxSegment = segments[idx];\n }\n }\n var lastUpperSide = firstSegment.percentage / maxSegment.percentage * width;\n var previousOffset = (width - lastUpperSide) / 2;\n var previousHeight = 0;\n for (var idx$1 = 0; idx$1 < count; idx$1++) {\n var percentage = segments[idx$1].percentage;\n var nextSegment = segments[idx$1 + 1];\n var nextPercentage = nextSegment ? nextSegment.percentage : percentage;\n var points = segments[idx$1].points = [];\n var height = options.dynamicHeight ? totalHeight * percentage : totalHeight / count;\n var offset = void 0;\n if (!percentage) {\n offset = nextPercentage ? 0 : width / 2;\n } else {\n offset = (width - lastUpperSide * (nextPercentage / percentage)) / 2;\n }\n offset = limitValue(offset, 0, width);\n points.push(new GeometryPoint(box.x1 + previousOffset, box.y1 + previousHeight));\n points.push(new GeometryPoint(box.x1 + width - previousOffset, box.y1 + previousHeight));\n points.push(new GeometryPoint(box.x1 + width - offset, box.y1 + height + previousHeight));\n points.push(new GeometryPoint(box.x1 + offset, box.y1 + height + previousHeight));\n previousOffset = offset;\n previousHeight += height + options.segmentSpacing;\n lastUpperSide = limitValue(width - 2 * offset, 0, width);\n }\n },\n constantSlopeReflow: function (box, width, totalHeight) {\n var ref = this;\n var options = ref.options;\n var segments = ref.points;\n var count = segments.length;\n var decreasingWidth = options.neckRatio <= 1;\n var neckRatio = decreasingWidth ? options.neckRatio * width : width;\n var previousOffset = decreasingWidth ? 0 : (width - width / options.neckRatio) / 2;\n var topMostWidth = decreasingWidth ? width : width - previousOffset * 2;\n var finalNarrow = (topMostWidth - neckRatio) / 2;\n var previousHeight = 0;\n for (var idx = 0; idx < count; idx++) {\n var points = segments[idx].points = [];\n var percentage = segments[idx].percentage;\n var offset = options.dynamicHeight ? finalNarrow * percentage : finalNarrow / count;\n var height = options.dynamicHeight ? totalHeight * percentage : totalHeight / count;\n points.push(new GeometryPoint(box.x1 + previousOffset, box.y1 + previousHeight));\n points.push(new GeometryPoint(box.x1 + width - previousOffset, box.y1 + previousHeight));\n points.push(new GeometryPoint(box.x1 + width - previousOffset - offset, box.y1 + height + previousHeight));\n points.push(new GeometryPoint(box.x1 + previousOffset + offset, box.y1 + height + previousHeight));\n previousOffset += offset;\n previousHeight += height + options.segmentSpacing;\n }\n },\n reflow: function (chartBox) {\n var points = this.points;\n var count = points.length;\n if (!count) {\n return;\n }\n var options = this.options;\n var box = chartBox.clone().unpad(this.labelPadding());\n var totalHeight = box.height() - options.segmentSpacing * (count - 1);\n var width = box.width();\n if (options.dynamicSlope) {\n this.dynamicSlopeReflow(box, width, totalHeight);\n } else {\n this.constantSlopeReflow(box, width, totalHeight);\n }\n for (var idx = 0; idx < count; idx++) {\n points[idx].reflow(chartBox);\n }\n }\n });\n setDefaultOptions(FunnelChart, {\n neckRatio: 0.3,\n width: 300,\n dynamicSlope: false,\n dynamicHeight: true,\n segmentSpacing: 0,\n labels: {\n visible: false,\n align: CENTER,\n position: CENTER,\n zIndex: 1\n }\n });\n deepExtend(FunnelChart.prototype, PieChartMixin);\n var FunnelPlotArea = PlotAreaBase.extend({\n render: function () {\n this.createFunnelChart(this.series);\n },\n createFunnelChart: function (series) {\n var firstSeries = series[0];\n var funnelChart = new FunnelChart(this, {\n series: series,\n legend: this.options.legend,\n neckRatio: firstSeries.neckRatio,\n dynamicHeight: firstSeries.dynamicHeight,\n dynamicSlope: firstSeries.dynamicSlope,\n segmentSpacing: firstSeries.segmentSpacing,\n highlight: firstSeries.highlight\n });\n this.appendChart(funnelChart);\n },\n appendChart: function (chart, pane) {\n PlotAreaBase.fn.appendChart.call(this, chart, pane);\n append(this.options.legend.items, chart.legendItems);\n }\n });\n var COLOR = 'color';\n var FIRST = 'first';\n var FROM = 'from';\n var MAX = 'max';\n var MIN = 'min';\n var NOTE_TEXT = 'noteText';\n var SUMMARY_FIELD = 'summary';\n var TO = 'to';\n PlotAreaFactory.current.register(CategoricalPlotArea, [\n BAR,\n COLUMN,\n LINE,\n VERTICAL_LINE,\n AREA,\n VERTICAL_AREA,\n CANDLESTICK,\n OHLC,\n BULLET,\n VERTICAL_BULLET,\n BOX_PLOT,\n VERTICAL_BOX_PLOT,\n RANGE_COLUMN,\n RANGE_BAR,\n WATERFALL,\n HORIZONTAL_WATERFALL\n ]);\n PlotAreaFactory.current.register(XYPlotArea, [\n SCATTER,\n SCATTER_LINE,\n BUBBLE\n ]);\n PlotAreaFactory.current.register(PiePlotArea, [PIE]);\n PlotAreaFactory.current.register(DonutPlotArea, [DONUT]);\n PlotAreaFactory.current.register(FunnelPlotArea, [FUNNEL]);\n PlotAreaFactory.current.register(PolarPlotArea, [\n POLAR_AREA,\n POLAR_LINE,\n POLAR_SCATTER\n ]);\n PlotAreaFactory.current.register(RadarPlotArea, [\n RADAR_AREA,\n RADAR_COLUMN,\n RADAR_LINE\n ]);\n SeriesBinder.current.register([\n BAR,\n COLUMN,\n LINE,\n VERTICAL_LINE,\n AREA,\n VERTICAL_AREA\n ], [VALUE], [\n CATEGORY,\n COLOR,\n NOTE_TEXT,\n ERROR_LOW_FIELD,\n ERROR_HIGH_FIELD\n ]);\n SeriesBinder.current.register([\n RANGE_COLUMN,\n RANGE_BAR\n ], [\n FROM,\n TO\n ], [\n CATEGORY,\n COLOR,\n NOTE_TEXT\n ]);\n SeriesBinder.current.register([\n WATERFALL,\n HORIZONTAL_WATERFALL\n ], [VALUE], [\n CATEGORY,\n COLOR,\n NOTE_TEXT,\n SUMMARY_FIELD\n ]);\n SeriesBinder.current.register([\n POLAR_AREA,\n POLAR_LINE,\n POLAR_SCATTER\n ], [\n X,\n Y\n ], [COLOR]);\n SeriesBinder.current.register([\n RADAR_AREA,\n RADAR_COLUMN,\n RADAR_LINE\n ], [VALUE], [COLOR]);\n SeriesBinder.current.register([FUNNEL], [VALUE], [\n CATEGORY,\n COLOR,\n 'visibleInLegend',\n 'visible'\n ]);\n DefaultAggregates.current.register([\n BAR,\n COLUMN,\n LINE,\n VERTICAL_LINE,\n AREA,\n VERTICAL_AREA,\n WATERFALL,\n HORIZONTAL_WATERFALL\n ], {\n value: MAX,\n color: FIRST,\n noteText: FIRST,\n errorLow: MIN,\n errorHigh: MAX\n });\n DefaultAggregates.current.register([\n RANGE_COLUMN,\n RANGE_BAR\n ], {\n from: MIN,\n to: MAX,\n color: FIRST,\n noteText: FIRST\n });\n DefaultAggregates.current.register([\n RADAR_AREA,\n RADAR_COLUMN,\n RADAR_LINE\n ], {\n value: MAX,\n color: FIRST\n });\n SeriesBinder.current.register([\n SCATTER,\n SCATTER_LINE,\n BUBBLE\n ], [\n X,\n Y\n ], [\n COLOR,\n NOTE_TEXT,\n X_ERROR_LOW_FIELD,\n X_ERROR_HIGH_FIELD,\n Y_ERROR_LOW_FIELD,\n Y_ERROR_HIGH_FIELD\n ]);\n SeriesBinder.current.register([BUBBLE], [\n X,\n Y,\n 'size'\n ], [\n COLOR,\n CATEGORY,\n NOTE_TEXT\n ]);\n SeriesBinder.current.register([\n CANDLESTICK,\n OHLC\n ], [\n 'open',\n 'high',\n 'low',\n 'close'\n ], [\n CATEGORY,\n COLOR,\n 'downColor',\n NOTE_TEXT\n ]);\n DefaultAggregates.current.register([\n CANDLESTICK,\n OHLC\n ], {\n open: MAX,\n high: MAX,\n low: MIN,\n close: MAX,\n color: FIRST,\n downColor: FIRST,\n noteText: FIRST\n });\n SeriesBinder.current.register([\n BOX_PLOT,\n VERTICAL_BOX_PLOT\n ], [\n 'lower',\n 'q1',\n 'median',\n 'q3',\n 'upper',\n 'mean',\n 'outliers'\n ], [\n CATEGORY,\n COLOR,\n NOTE_TEXT\n ]);\n DefaultAggregates.current.register([\n BOX_PLOT,\n VERTICAL_BOX_PLOT\n ], {\n lower: MAX,\n q1: MAX,\n median: MAX,\n q3: MAX,\n upper: MAX,\n mean: MAX,\n outliers: FIRST,\n color: FIRST,\n noteText: FIRST\n });\n SeriesBinder.current.register([\n BULLET,\n VERTICAL_BULLET\n ], [\n 'current',\n 'target'\n ], [\n CATEGORY,\n COLOR,\n 'visibleInLegend',\n NOTE_TEXT\n ]);\n DefaultAggregates.current.register([\n BULLET,\n VERTICAL_BULLET\n ], {\n current: MAX,\n target: MAX,\n color: FIRST,\n noteText: FIRST\n });\n SeriesBinder.current.register([\n PIE,\n DONUT\n ], [VALUE], [\n CATEGORY,\n COLOR,\n 'explode',\n 'visibleInLegend',\n 'visible'\n ]);\n var AXIS_NAMES = [\n CATEGORY,\n VALUE,\n X,\n Y\n ];\n var MOUSEMOVE = 'mousemove';\n var CONTEXTMENU = 'contextmenu';\n var MOUSEMOVE_DELAY = 20;\n var Chart = Class.extend({\n init: function (element, userOptions, themeOptions, context) {\n var this$1 = this;\n if (context === void 0) {\n context = {};\n }\n this.observers = [];\n this.addObserver(context.observer);\n this.chartService = new services.ChartService(this, context);\n this.chartService.theme = themeOptions;\n this._initElement(element);\n var options = deepExtend({}, this.options, userOptions);\n this._originalOptions = deepExtend({}, options);\n this._theme = themeOptions;\n this._initTheme(options, themeOptions);\n this._initSurface();\n this._initHandlers();\n this.bindCategories();\n dataviz.FontLoader.preloadFonts(userOptions, function () {\n if (!this$1._destroyed) {\n this$1.trigger('init');\n this$1._redraw();\n this$1._attachEvents();\n }\n });\n },\n _initElement: function (element) {\n this._setElementClass(element);\n element.style.position = 'relative';\n while (element.firstChild) {\n element.removeChild(element.firstChild);\n }\n this.element = element;\n },\n _setElementClass: function (element) {\n dataviz.addClass(element, 'k-chart');\n },\n _initTheme: function (options, themeOptions) {\n var seriesCopies = [];\n var series = options.series || [];\n for (var i = 0; i < series.length; i++) {\n seriesCopies.push($.extend({}, series[i]));\n }\n options.series = seriesCopies;\n resolveAxisAliases(options);\n this.applyDefaults(options, themeOptions);\n if (options.seriesColors === null) {\n delete options.seriesColors;\n }\n this.options = deepExtend({}, themeOptions, options);\n this.applySeriesColors();\n },\n getSize: function () {\n return {\n width: this.element.offsetWidth,\n height: this.element.offsetHeight\n };\n },\n resize: function (force) {\n var size = this.getSize();\n var 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 _resize: function () {\n this._noTransitionsRedraw();\n },\n redraw: function (paneName) {\n this.applyDefaults(this.options);\n this.applySeriesColors();\n if (paneName) {\n var plotArea = this._model._plotArea;\n var pane = plotArea.findPane(paneName);\n plotArea.redraw(pane);\n } else {\n this._redraw();\n }\n },\n getAxis: function (name) {\n var axes = this._plotArea.axes;\n for (var idx = 0; idx < axes.length; idx++) {\n if (axes[idx].options.name === name) {\n return new ChartAxis(axes[idx]);\n }\n }\n },\n findAxisByName: function (name) {\n return this.getAxis(name);\n },\n plotArea: function () {\n return new ChartPlotArea(this._plotArea);\n },\n toggleHighlight: function (show, filter) {\n var plotArea = this._plotArea;\n var firstSeries = (plotArea.srcSeries || plotArea.series || [])[0];\n var points;\n if (isFunction(filter)) {\n points = plotArea.filterPoints(filter);\n } else {\n var seriesName, categoryName;\n if (isObject(filter)) {\n seriesName = filter.series;\n categoryName = filter.category;\n } else {\n seriesName = categoryName = filter;\n }\n if (firstSeries.type === DONUT) {\n points = pointByCategoryName(plotArea.pointsBySeriesName(seriesName), categoryName);\n } else if (firstSeries.type === PIE || firstSeries.type === FUNNEL) {\n points = pointByCategoryName((plotArea.charts[0] || {}).points, categoryName);\n } else {\n points = plotArea.pointsBySeriesName(seriesName);\n }\n }\n if (points) {\n this.togglePointsHighlight(show, points);\n }\n },\n togglePointsHighlight: function (show, points) {\n var highlight = this._highlight;\n for (var idx = 0; idx < points.length; idx++) {\n highlight.togglePointHighlight(points[idx], show);\n }\n },\n showTooltip: function (filter) {\n var shared = this._sharedTooltip();\n var ref = this;\n var tooltip = ref._tooltip;\n var plotArea = ref._plotArea;\n var point, categoryIndex;\n if (isFunction(filter)) {\n point = plotArea.findPoint(filter);\n if (point && shared) {\n categoryIndex = point.categoryIx;\n }\n } else if (shared && defined(filter)) {\n categoryIndex = plotArea.categoryAxis.categoryIndex(filter);\n }\n if (shared) {\n if (categoryIndex >= 0) {\n var points = this._plotArea.pointsByCategoryIndex(categoryIndex);\n tooltip.showAt(points);\n }\n } else if (point) {\n tooltip.show(point);\n }\n },\n hideTooltip: function () {\n this._tooltip.hide();\n },\n _initSurface: function () {\n var surface = this.surface;\n var wrap = this._surfaceWrap();\n var chartArea = this.options.chartArea;\n if (chartArea.width) {\n dataviz.elementSize(wrap, { width: chartArea.width });\n }\n if (chartArea.height) {\n dataviz.elementSize(wrap, { height: chartArea.height });\n }\n if (!surface || surface.options.type !== this.options.renderAs) {\n if (surface) {\n surface.destroy();\n }\n this.surface = drawing.Surface.create(wrap, { type: this.options.renderAs });\n } else {\n this.surface.clear();\n this.surface.resize();\n }\n },\n _surfaceWrap: function () {\n return this.element;\n },\n _redraw: function () {\n var model = this._getModel();\n this._destroyView();\n this._model = model;\n this._plotArea = model._plotArea;\n model.renderVisual();\n if (this.options.transitions !== false) {\n model.traverse(function (element) {\n if (element.animation) {\n element.animation.setup();\n }\n });\n }\n this._initSurface();\n this.surface.draw(model.visual);\n if (this.options.transitions !== false) {\n model.traverse(function (element) {\n if (element.animation) {\n element.animation.play();\n }\n });\n }\n this._tooltip = this._createTooltip();\n this._highlight = new Highlight();\n this._setupSelection();\n this._createPannable();\n this._createZoomSelection();\n this._createMousewheelZoom();\n this.trigger(RENDER);\n if (!this._navState) {\n this._cancelDomEvents();\n }\n },\n exportVisual: function (options) {\n var visual;\n if (options && (options.width || options.height)) {\n var chartArea = this.options.chartArea;\n var originalChartArea = this._originalOptions.chartArea;\n deepExtend(chartArea, options);\n var model = this._getModel();\n chartArea.width = originalChartArea.width;\n chartArea.height = originalChartArea.height;\n model.renderVisual();\n visual = model.visual;\n } else {\n visual = this.surface.exportVisual();\n }\n return visual;\n },\n _sharedTooltip: function () {\n return this._plotArea instanceof CategoricalPlotArea && this.options.tooltip.shared;\n },\n _createPannable: function () {\n var options = this.options;\n if (options.pannable !== false) {\n this._pannable = new Pannable(this._plotArea, options.pannable);\n }\n },\n _createZoomSelection: function () {\n var zoomable = this.options.zoomable;\n var selection = (zoomable || {}).selection;\n if (zoomable !== false && selection !== false) {\n this._zoomSelection = new ZoomSelection(this, selection);\n }\n },\n _createMousewheelZoom: function () {\n var zoomable = this.options.zoomable;\n var mousewheel = (zoomable || {}).mousewheel;\n if (zoomable !== false && mousewheel !== false) {\n this._mousewheelZoom = new MousewheelZoom(this, mousewheel);\n }\n },\n _createTooltip: function () {\n var ref = this;\n var tooltipOptions = ref.options.tooltip;\n var tooltip;\n if (this._sharedTooltip()) {\n tooltip = this._createSharedTooltip(tooltipOptions);\n } else {\n tooltip = new Tooltip(this.chartService, tooltipOptions);\n }\n return tooltip;\n },\n _createSharedTooltip: function (options) {\n return new SharedTooltip(this._plotArea, options);\n },\n applyDefaults: function (options, themeOptions) {\n applyAxisDefaults(options, themeOptions);\n applySeriesDefaults(options, themeOptions);\n },\n applySeriesColors: function () {\n var options = this.options;\n var series = options.series;\n var colors = options.seriesColors || [];\n for (var i = 0; i < series.length; i++) {\n var currentSeries = series[i];\n var seriesColor = colors[i % colors.length];\n var defaults = currentSeries._defaults;\n currentSeries.color = currentSeries.color || seriesColor;\n if (defaults) {\n defaults.color = defaults.color || seriesColor;\n }\n }\n },\n _getModel: function () {\n var options = this.options;\n var plotArea = this._createPlotArea();\n var model = new dataviz.RootElement(this._modelOptions());\n model.chart = this;\n model._plotArea = plotArea;\n dataviz.Title.buildTitle(options.title, model);\n if (options.legend.visible) {\n model.append(new Legend(plotArea.options.legend, this.chartService));\n }\n model.append(plotArea);\n model.reflow();\n return model;\n },\n _modelOptions: function () {\n var ref = this;\n var options = ref.options;\n var element = ref.element;\n var size = dataviz.elementSize(element);\n this._size = null;\n return deepExtend({\n width: Math.floor(size.width) || datavizConstants.DEFAULT_WIDTH,\n height: Math.floor(size.height) || datavizConstants.DEFAULT_HEIGHT,\n transitions: options.transitions\n }, options.chartArea);\n },\n _createPlotArea: function (skipSeries) {\n var options = this.options;\n var plotArea = PlotAreaFactory.current.create(skipSeries ? [] : options.series, options, this.chartService);\n return plotArea;\n },\n _hasSelection: function () {\n return this._selections && this._selections.length;\n },\n _setupSelection: function () {\n var this$1 = this;\n var ref = this;\n var axes = ref._plotArea.axes;\n var selections = this._selections = [];\n for (var i = 0; i < axes.length; i++) {\n var axis = axes[i];\n var options = axis.options;\n if (axis instanceof CategoryAxis && options.select && !options.vertical) {\n var min = 0;\n var max = options.categories.length - 1;\n if (axis instanceof DateCategoryAxis) {\n min = options.categories[min];\n max = options.categories[max];\n }\n if (!options.justified) {\n if (axis instanceof DateCategoryAxis) {\n max = dataviz.addDuration(max, 1, options.baseUnit, options.weekStartDay);\n } else {\n max++;\n }\n }\n var selection = new Selection(this$1, axis, deepExtend({\n min: min,\n max: max\n }, options.select));\n selections.push(selection);\n }\n }\n },\n _selectStart: function (e) {\n return this.trigger(SELECT_START, e);\n },\n _select: function (e) {\n return this.trigger(SELECT, e);\n },\n _selectEnd: function (e) {\n return this.trigger(SELECT_END, e);\n },\n _initHandlers: function () {\n this._clickHandler = this._click.bind(this);\n this._mousewheelHandler = this._mousewheel.bind(this);\n this._surfaceMouseenterHandler = this._mouseover.bind(this);\n this._surfaceMouseleaveHandler = this._mouseout.bind(this);\n this._mousemove = kendo.throttle(this._mousemove.bind(this), MOUSEMOVE_DELAY);\n },\n addObserver: function (observer) {\n if (observer) {\n this.observers.push(observer);\n }\n },\n removeObserver: function (observer) {\n var index = this.observers.indexOf(observer);\n if (index >= 0) {\n this.observers.splice(index, 1);\n }\n },\n requiresHandlers: function (eventNames) {\n var observers = this.observers;\n for (var idx = 0; idx < observers.length; idx++) {\n if (observers[idx].requiresHandlers(eventNames)) {\n return true;\n }\n }\n },\n trigger: function (name, args) {\n if (args === void 0) {\n args = {};\n }\n if (name === SHOW_TOOLTIP) {\n args.anchor.point = this._toDocumentCoordinates(args.anchor.point);\n }\n args.sender = this;\n var observers = this.observers;\n var isDefaultPrevented = false;\n for (var idx = 0; idx < observers.length; idx++) {\n if (observers[idx].trigger(name, args)) {\n isDefaultPrevented = true;\n }\n }\n return isDefaultPrevented;\n },\n _attachEvents: function () {\n var ref = this;\n var element = ref.element;\n var surface = ref.surface;\n surface.bind('mouseenter', this._surfaceMouseenterHandler);\n surface.bind('mouseleave', this._surfaceMouseleaveHandler);\n var obj;\n bindEvents(element, (obj = {}, obj[CONTEXTMENU] = this._clickHandler, obj[MOUSEWHEEL] = this._mousewheelHandler, obj));\n if (this._shouldAttachMouseMove()) {\n var obj$1;\n bindEvents(element, (obj$1 = {}, obj$1[MOUSEMOVE] = this._mousemove, obj$1));\n }\n this.domEvents = services.DomEventsBuilder.create(this.element, {\n start: this._start.bind(this),\n move: this._move.bind(this),\n end: this._end.bind(this),\n tap: this._tap.bind(this),\n gesturestart: this._gesturestart.bind(this),\n gesturechange: this._gesturechange.bind(this),\n gestureend: this._gestureend.bind(this)\n });\n },\n _cancelDomEvents: function () {\n if (this.domEvents && this.domEvents.cancel) {\n this.domEvents.cancel();\n }\n },\n _gesturestart: function (e) {\n if (this._mousewheelZoom && !this._stopDragEvent(e)) {\n this._gestureDistance = e.distance;\n this._unsetActivePoint();\n this.surface.suspendTracking();\n }\n },\n _gestureend: function (e) {\n if (this._zooming && !this._stopDragEvent(e)) {\n if (this.surface) {\n this.surface.resumeTracking();\n }\n this._zooming = false;\n this.trigger(ZOOM_END, {});\n }\n },\n _gesturechange: function (e) {\n var mousewheelZoom = this._mousewheelZoom;\n if (mousewheelZoom && !this._stopDragEvent(e)) {\n e.preventDefault();\n var previousGestureDistance = this._gestureDistance;\n var scaleDelta = -e.distance / previousGestureDistance + 1;\n if (Math.abs(scaleDelta) >= 0.1) {\n scaleDelta = Math.round(scaleDelta * 10);\n this._gestureDistance = e.distance;\n var args = {\n delta: scaleDelta,\n axisRanges: axisRanges(this._plotArea.axes),\n originalEvent: e\n };\n if (this._zooming || !this.trigger(ZOOM_START, args)) {\n if (!this._zooming) {\n this._zooming = true;\n }\n var ranges = args.axisRanges = mousewheelZoom.updateRanges(scaleDelta);\n if (ranges && !this.trigger(ZOOM, args)) {\n mousewheelZoom.zoom();\n }\n }\n }\n }\n },\n _mouseout: function (e) {\n if (e.element) {\n var element = this._drawingChartElement(e.element, e);\n if (element && element.leave) {\n element.leave(this, e.originalEvent);\n }\n }\n },\n _start: function (e) {\n var coords = this._eventCoordinates(e);\n if (this._stopDragEvent(e) || !this._plotArea.backgroundContainsPoint(coords)) {\n return;\n }\n if (this.requiresHandlers([\n DRAG_START,\n DRAG,\n DRAG_END\n ])) {\n this._startNavigation(e, coords, DRAG_START);\n }\n if (this._pannable && this._pannable.start(e)) {\n this.surface.suspendTracking();\n this._unsetActivePoint();\n this._suppressHover = true;\n }\n if (this._zoomSelection) {\n if (this._zoomSelection.start(e)) {\n this.trigger(ZOOM_START, {\n axisRanges: axisRanges(this._plotArea.axes),\n originalEvent: e\n });\n }\n }\n },\n _move: function (e) {\n var ref = this;\n var state = ref._navState;\n var pannable = ref._pannable;\n if (this._stopDragEvent(e)) {\n return;\n }\n if (pannable) {\n var ranges = pannable.move(e);\n if (ranges && !this.trigger(DRAG, {\n axisRanges: ranges,\n originalEvent: e\n })) {\n pannable.pan();\n }\n } else if (state) {\n var ranges$1 = {};\n var axes = state.axes;\n for (var i = 0; i < axes.length; i++) {\n var currentAxis = axes[i];\n var axisName = currentAxis.options.name;\n if (axisName) {\n var axis = currentAxis.options.vertical ? e.y : e.x;\n var delta = axis.startLocation - axis.location;\n if (delta !== 0) {\n ranges$1[currentAxis.options.name] = currentAxis.translateRange(delta);\n }\n }\n }\n state.axisRanges = ranges$1;\n this.trigger(DRAG, {\n axisRanges: ranges$1,\n originalEvent: e\n });\n }\n if (this._zoomSelection) {\n this._zoomSelection.move(e);\n }\n },\n _end: function (e) {\n if (this._stopDragEvent(e)) {\n return;\n }\n var pannable = this._pannable;\n if (pannable && pannable.end(e)) {\n this.surface.resumeTracking();\n this.trigger(DRAG_END, {\n axisRanges: axisRanges(this._plotArea.axes),\n originalEvent: e\n });\n this._suppressHover = false;\n } else {\n this._endNavigation(e, DRAG_END);\n }\n if (this._zoomSelection) {\n var ranges = this._zoomSelection.end(e);\n if (ranges && !this.trigger(ZOOM, {\n axisRanges: ranges,\n originalEvent: e\n })) {\n this._zoomSelection.zoom();\n this.trigger(ZOOM_END, {\n axisRanges: ranges,\n originalEvent: e\n });\n }\n }\n },\n _stopDragEvent: function () {\n return this._hasSelection();\n },\n _mousewheel: function (e) {\n var this$1 = this;\n var delta = dataviz.mousewheelDelta(e);\n var mousewheelZoom = this._mousewheelZoom;\n var coords = this._eventCoordinates(e);\n if (!this._plotArea.backgroundContainsPoint(coords)) {\n return;\n }\n if (mousewheelZoom) {\n var args = {\n delta: delta,\n axisRanges: axisRanges(this._plotArea.axes),\n originalEvent: e\n };\n if (this._zooming || !this.trigger(ZOOM_START, args)) {\n e.preventDefault();\n if (!this._zooming) {\n this._unsetActivePoint();\n this.surface.suspendTracking();\n this._zooming = true;\n }\n if (this._mwTimeout) {\n clearTimeout(this._mwTimeout);\n }\n args.axisRanges = mousewheelZoom.updateRanges(delta);\n if (args.axisRanges && !this.trigger(ZOOM, args)) {\n mousewheelZoom.zoom();\n }\n this._mwTimeout = setTimeout(function () {\n this$1.trigger(ZOOM_END, args);\n this$1._zooming = false;\n if (this$1.surface) {\n this$1.surface.resumeTracking();\n }\n }, MOUSEWHEEL_DELAY);\n }\n } else {\n var state = this._navState;\n if (!state) {\n var prevented = this._startNavigation(e, coords, ZOOM_START);\n if (!prevented) {\n state = this._navState;\n }\n }\n if (state) {\n var totalDelta = state.totalDelta || delta;\n state.totalDelta = totalDelta + delta;\n var axes = this._navState.axes;\n var ranges = {};\n for (var i = 0; i < axes.length; i++) {\n var currentAxis = axes[i];\n var axisName = currentAxis.options.name;\n if (axisName) {\n ranges[axisName] = currentAxis.scaleRange(-totalDelta);\n }\n }\n this.trigger(ZOOM, {\n delta: delta,\n axisRanges: ranges,\n originalEvent: e\n });\n if (this._mwTimeout) {\n clearTimeout(this._mwTimeout);\n }\n this._mwTimeout = setTimeout(function () {\n this$1._endNavigation(e, ZOOM_END);\n }, MOUSEWHEEL_DELAY);\n }\n }\n },\n _startNavigation: function (e, coords, chartEvent) {\n var plotArea = this._model._plotArea;\n var pane = plotArea.findPointPane(coords);\n var axes = plotArea.axes.slice(0);\n if (!pane) {\n return;\n }\n var ranges = axisRanges(axes);\n var prevented = this.trigger(chartEvent, {\n axisRanges: ranges,\n originalEvent: e\n });\n if (prevented) {\n this._cancelDomEvents();\n } else {\n this._suppressHover = true;\n this._unsetActivePoint();\n this._navState = {\n axisRanges: ranges,\n pane: pane,\n axes: axes\n };\n }\n },\n _endNavigation: function (e, chartEvent) {\n if (this._navState) {\n this.trigger(chartEvent, {\n axisRanges: this._navState.axisRanges,\n originalEvent: e\n });\n this._suppressHover = false;\n this._navState = null;\n }\n },\n _getChartElement: function (e, match) {\n var element = this.surface.eventTarget(e);\n if (element) {\n return this._drawingChartElement(element, e, match);\n }\n },\n _drawingChartElement: function (element, e, match) {\n var current = element;\n var chartElement;\n while (current && !chartElement) {\n chartElement = current.chartElement;\n current = current.parent;\n }\n if (chartElement) {\n if (chartElement.aliasFor) {\n chartElement = chartElement.aliasFor(e, this._eventCoordinates(e));\n }\n if (match) {\n chartElement = chartElement.closest(match);\n }\n return chartElement;\n }\n },\n _eventCoordinates: function (e) {\n var coordinates = dataviz.eventCoordinates(e);\n return this._toModelCoordinates(coordinates.x, coordinates.y);\n },\n _elementPadding: function () {\n if (!this._padding) {\n var ref = elementStyles(this.element, [\n 'paddingLeft',\n 'paddingTop'\n ]);\n var paddingLeft = ref.paddingLeft;\n var paddingTop = ref.paddingTop;\n this._padding = {\n top: paddingTop,\n left: paddingLeft\n };\n }\n return this._padding;\n },\n _toDocumentCoordinates: function (point) {\n var padding = this._elementPadding();\n var offset = dataviz.elementOffset(this.element);\n return {\n left: round(point.x + padding.left + offset.left),\n top: round(point.y + padding.top + offset.top)\n };\n },\n _toModelCoordinates: function (clientX, clientY) {\n var element = this.element;\n var offset = dataviz.elementOffset(element);\n var padding = this._elementPadding();\n return new Point(clientX - offset.left - padding.left, clientY - offset.top - padding.top);\n },\n _tap: function (e) {\n var this$1 = this;\n var drawingElement = this.surface.eventTarget(e);\n var element = this._drawingChartElement(drawingElement, e);\n if (this._activePoint === element) {\n this._propagateClick(element, e);\n } else {\n if (!this._startHover(drawingElement, e)) {\n this._unsetActivePoint();\n }\n this._propagateClick(element, e);\n }\n this.handlingTap = true;\n setTimeout(function () {\n this$1.handlingTap = false;\n }, 0);\n },\n _click: function (e) {\n var element = this._getChartElement(e);\n this._propagateClick(element, e);\n },\n _propagateClick: function (element, e) {\n var this$1 = this;\n var current = element;\n while (current) {\n if (current.click) {\n current.click(this$1, e);\n }\n current = current.parent;\n }\n },\n _startHover: function (element, e) {\n var chartElement = this._drawingChartElement(element, e);\n var ref = this;\n var tooltip = ref._tooltip;\n var highlight = ref._highlight;\n if (this._suppressHover || !highlight || highlight.isHighlighted(chartElement) || this._sharedTooltip()) {\n return false;\n }\n var point = this._drawingChartElement(element, e, function (element) {\n return element.hover && !(element instanceof PlotAreaBase);\n });\n if (point && !point.hover(this, e)) {\n this._activePoint = point;\n var tooltipOptions = deepExtend({}, tooltipOptions, point.options.tooltip);\n if (tooltipOptions.visible) {\n tooltip.show(point);\n }\n highlight.show(point);\n return point;\n }\n },\n _mouseover: function (e) {\n var point = this._startHover(e.element, e.originalEvent);\n if (point && point.tooltipTracking) {\n this._mouseMoveTrackHandler = this._mouseMoveTrackHandler || this._mouseMoveTracking.bind(this);\n var obj;\n bindEvents(document, (obj = {}, obj[MOUSEMOVE] = this._mouseMoveTrackHandler, obj));\n }\n },\n _mouseMoveTracking: function (e) {\n var ref = this;\n var options = ref.options;\n var tooltip = ref._tooltip;\n var highlight = ref._highlight;\n var point = ref._activePoint;\n var coords = this._eventCoordinates(e);\n if (this._plotArea.box.containsPoint(coords)) {\n if (point && point.tooltipTracking && point.series && point.parent.getNearestPoint) {\n var seriesPoint = point.parent.getNearestPoint(coords.x, coords.y, point.seriesIx);\n if (seriesPoint && seriesPoint !== point) {\n seriesPoint.hover(this, e);\n this._activePoint = seriesPoint;\n var tooltipOptions = deepExtend({}, options.tooltip, point.options.tooltip);\n if (tooltipOptions.visible) {\n tooltip.show(seriesPoint);\n }\n highlight.show(seriesPoint);\n }\n }\n } else {\n var obj;\n unbindEvents(document, (obj = {}, obj[MOUSEMOVE] = this._mouseMoveTrackHandler, obj));\n this._unsetActivePoint();\n }\n },\n _mousemove: function (e) {\n var coords = this._eventCoordinates(e);\n this._trackCrosshairs(coords);\n if (this._plotArea.hover) {\n this._plotArea.hover(this, e);\n }\n if (this._sharedTooltip()) {\n this._trackSharedTooltip(coords, e);\n }\n },\n _trackCrosshairs: function (coords) {\n var crosshairs = this._plotArea.crosshairs;\n for (var i = 0; i < crosshairs.length; i++) {\n var current = crosshairs[i];\n if (current.box.containsPoint(coords)) {\n current.showAt(coords);\n } else {\n current.hide();\n }\n }\n },\n _trackSharedTooltip: function (coords, e) {\n var ref = this;\n var tooltipOptions = ref.options.tooltip;\n var plotArea = ref._plotArea;\n var categoryAxis = ref._plotArea.categoryAxis;\n var tooltip = ref._tooltip;\n var highlight = ref._highlight;\n if (plotArea.box.containsPoint(coords)) {\n var index = categoryAxis.pointCategoryIndex(coords);\n if (index !== this._tooltipCategoryIx) {\n var points = plotArea.pointsByCategoryIndex(index);\n var pointArgs = points.map(function (point) {\n return point.eventArgs(e);\n });\n var hoverArgs = pointArgs[0] || {};\n hoverArgs.categoryPoints = pointArgs;\n if (points.length > 0 && !this.trigger(SERIES_HOVER, hoverArgs)) {\n if (tooltipOptions.visible) {\n tooltip.showAt(points, coords);\n }\n highlight.show(points);\n } else {\n tooltip.hide();\n }\n this._tooltipCategoryIx = index;\n }\n }\n },\n hideElements: function () {\n var ref = this;\n var plotArea = ref._plotArea;\n var tooltip = ref._tooltip;\n var highlight = ref._highlight;\n this._mousemove.cancel();\n plotArea.hideCrosshairs();\n highlight.hide();\n tooltip.hide();\n delete this._tooltipCategoryIx;\n },\n _unsetActivePoint: function () {\n var ref = this;\n var tooltip = ref._tooltip;\n var highlight = ref._highlight;\n this._activePoint = null;\n if (tooltip) {\n tooltip.hide();\n }\n if (highlight) {\n highlight.hide();\n }\n },\n _deferRedraw: function () {\n this._redraw();\n },\n _clearRedrawTimeout: function () {\n if (this._redrawTimeout) {\n clearInterval(this._redrawTimeout);\n this._redrawTimeout = null;\n }\n },\n bindCategories: function () {\n var this$1 = this;\n var options = this.options;\n var definitions = [].concat(options.categoryAxis);\n for (var axisIx = 0; axisIx < definitions.length; axisIx++) {\n var axis = definitions[axisIx];\n if (axis.autoBind !== false) {\n this$1.bindCategoryAxisFromSeries(axis, axisIx);\n }\n }\n },\n bindCategoryAxisFromSeries: function (axis, axisIx) {\n var this$1 = this;\n var series = this.options.series;\n var seriesLength = series.length;\n var uniqueCategories = {};\n var items = [];\n var dateAxis;\n for (var seriesIx = 0; seriesIx < seriesLength; seriesIx++) {\n var s = series[seriesIx];\n var onAxis = s.categoryAxis === axis.name || !s.categoryAxis && axisIx === 0;\n var data = s.data;\n var dataLength = data.length;\n if (s.categoryField && onAxis && dataLength > 0) {\n dateAxis = isDateAxis(axis, getField(s.categoryField, data[0]));\n var getFn = dateAxis ? getDateField : getField;\n for (var dataIx = 0; dataIx < dataLength; dataIx++) {\n var dataRow = data[dataIx];\n var category = getFn(s.categoryField, dataRow, this$1.chartService.intl);\n if (dateAxis || !uniqueCategories[category]) {\n items.push([\n category,\n dataRow\n ]);\n if (!dateAxis) {\n uniqueCategories[category] = true;\n }\n }\n }\n }\n }\n if (items.length > 0) {\n if (dateAxis) {\n items = uniqueDates(items, function (a, b) {\n return dataviz.dateComparer(a[0], b[0]);\n });\n }\n var result = transpose(items);\n axis.categories = result[0];\n }\n },\n _isBindable: function (series) {\n var valueFields = SeriesBinder.current.valueFields(series);\n var result = true;\n for (var i = 0; i < valueFields.length; i++) {\n var field = valueFields[i];\n if (field === VALUE) {\n field = 'field';\n } else {\n field = field + 'Field';\n }\n if (!defined(series[field])) {\n result = false;\n break;\n }\n }\n return result;\n },\n _noTransitionsRedraw: function () {\n var options = this.options;\n var transitionsState;\n if (options.transitions) {\n options.transitions = false;\n transitionsState = true;\n }\n this._redraw();\n if (transitionsState) {\n options.transitions = true;\n }\n },\n _legendItemHover: function (seriesIndex, pointIndex) {\n var ref = this;\n var plotArea = ref._plotArea;\n var highlight = ref._highlight;\n var currentSeries = (plotArea.srcSeries || plotArea.series)[seriesIndex];\n var items;\n if (inArray(currentSeries.type, [\n PIE,\n DONUT,\n FUNNEL\n ])) {\n items = plotArea.findPoint(function (point) {\n return point.series.index === seriesIndex && point.index === pointIndex;\n });\n } else {\n items = plotArea.pointsBySeriesIndex(seriesIndex);\n }\n highlight.show(items);\n },\n _shouldAttachMouseMove: function () {\n return this._plotArea.crosshairs.length || this._tooltip && this._sharedTooltip() || this.requiresHandlers([PLOT_AREA_HOVER]);\n },\n updateMouseMoveHandler: function () {\n var obj;\n unbindEvents(this.element, (obj = {}, obj[MOUSEMOVE] = this._mousemove, obj));\n if (this._shouldAttachMouseMove()) {\n var obj$1;\n bindEvents(this.element, (obj$1 = {}, obj$1[MOUSEMOVE] = this._mousemove, obj$1));\n }\n },\n applyOptions: function (options, theme) {\n clearMissingValues(this._originalOptions, options);\n this._originalOptions = deepExtend(this._originalOptions, options);\n this.options = deepExtend({}, this._originalOptions);\n if (theme) {\n this._theme = theme;\n this.chartService.theme = theme;\n }\n this._initTheme(this.options, this._theme);\n },\n setOptions: function (options, theme) {\n this.applyOptions(options, theme);\n this.bindCategories();\n this.redraw();\n this.updateMouseMoveHandler();\n },\n destroy: function () {\n this._destroyed = true;\n var obj;\n unbindEvents(this.element, (obj = {}, obj[CONTEXTMENU] = this._clickHandler, obj[MOUSEWHEEL] = this._mousewheelHandler, obj[MOUSEMOVE] = this._mousemove, obj));\n if (this.domEvents) {\n this.domEvents.destroy();\n delete this.domEvents;\n }\n var obj$1;\n unbindEvents(document, (obj$1 = {}, obj$1[MOUSEMOVE] = this._mouseMoveTrackHandler, obj$1));\n this._destroyView();\n if (this.surface) {\n this.surface.destroy();\n this.surface = null;\n }\n this._clearRedrawTimeout();\n },\n _destroyView: function () {\n var ref = this;\n var model = ref._model;\n var selections = ref._selections;\n if (model) {\n model.destroy();\n this._model = null;\n }\n if (selections) {\n while (selections.length > 0) {\n selections.shift().destroy();\n }\n }\n this._unsetActivePoint();\n if (this._tooltip) {\n this._tooltip.destroy();\n }\n if (this._highlight) {\n this._highlight.destroy();\n }\n if (this._zoomSelection) {\n this._zoomSelection.destroy();\n delete this._zoomSelection;\n }\n if (this._pannable) {\n this._pannable.destroy();\n delete this._pannable;\n }\n if (this._mousewheelZoom) {\n this._mousewheelZoom.destroy();\n delete this._mousewheelZoom;\n }\n }\n });\n function resolveAxisAliases(options) {\n var aliases = AXIS_NAMES;\n for (var idx = 0; idx < aliases.length; idx++) {\n var alias = aliases[idx] + 'Axes';\n if (options[alias]) {\n options[aliases[idx] + 'Axis'] = options[alias];\n delete options[alias];\n }\n }\n }\n function pointByCategoryName(points, name) {\n if (points) {\n for (var idx = 0; idx < points.length; idx++) {\n if (points[idx].category === name) {\n return [points[idx]];\n }\n }\n }\n }\n function applyAxisDefaults(options, themeOptions) {\n var themeAxisDefaults = (themeOptions || {}).axisDefaults || {};\n var axisName, axisDefaults, axes;\n function mapAxisOptions(axisOptions) {\n var axisColor = (axisOptions || {}).color || axisDefaults.color;\n var result = deepExtend({}, themeAxisDefaults, themeAxisDefaults[axisName], axisDefaults, axisDefaults[axisName], {\n line: { color: axisColor },\n labels: { color: axisColor },\n title: { color: axisColor }\n }, axisOptions);\n delete result[axisName];\n return result;\n }\n for (var idx = 0; idx < AXIS_NAMES.length; idx++) {\n axisName = AXIS_NAMES[idx] + 'Axis';\n axisDefaults = options.axisDefaults || {};\n axes = [].concat(options[axisName]);\n axes = axes.map(mapAxisOptions);\n options[axisName] = axes.length > 1 ? axes : axes[0];\n }\n }\n function applySeriesDefaults(options, themeOptions) {\n var series = options.series;\n var seriesLength = series.length;\n var seriesDefaults = options.seriesDefaults;\n var commonDefaults = deepExtend({}, options.seriesDefaults);\n var themeSeriesDefaults = themeOptions ? deepExtend({}, themeOptions.seriesDefaults) : {};\n var commonThemeDefaults = deepExtend({}, themeSeriesDefaults);\n cleanupNestedSeriesDefaults(commonDefaults);\n cleanupNestedSeriesDefaults(commonThemeDefaults);\n for (var i = 0; i < seriesLength; i++) {\n var seriesType = series[i].type || options.seriesDefaults.type;\n var baseOptions = deepExtend({ data: [] }, commonThemeDefaults, themeSeriesDefaults[seriesType], { tooltip: options.tooltip }, commonDefaults, seriesDefaults[seriesType]);\n series[i]._defaults = baseOptions;\n series[i] = deepExtend({}, baseOptions, series[i]);\n }\n }\n function cleanupNestedSeriesDefaults(seriesDefaults) {\n delete seriesDefaults.bar;\n delete seriesDefaults.column;\n delete seriesDefaults.rangeColumn;\n delete seriesDefaults.line;\n delete seriesDefaults.verticalLine;\n delete seriesDefaults.pie;\n delete seriesDefaults.donut;\n delete seriesDefaults.area;\n delete seriesDefaults.verticalArea;\n delete seriesDefaults.scatter;\n delete seriesDefaults.scatterLine;\n delete seriesDefaults.bubble;\n delete seriesDefaults.candlestick;\n delete seriesDefaults.ohlc;\n delete seriesDefaults.boxPlot;\n delete seriesDefaults.bullet;\n delete seriesDefaults.verticalBullet;\n delete seriesDefaults.polarArea;\n delete seriesDefaults.polarLine;\n delete seriesDefaults.radarArea;\n delete seriesDefaults.radarLine;\n delete seriesDefaults.waterfall;\n }\n function axisRanges(axes) {\n var ranges = {};\n for (var i = 0; i < axes.length; i++) {\n var axis = axes[i];\n var axisName = axis.options.name;\n if (axisName) {\n ranges[axisName] = axis.range();\n }\n }\n return ranges;\n }\n function sortDates(dates, comparer) {\n if (comparer === void 0) {\n comparer = dataviz.dateComparer;\n }\n for (var i = 1, length = dates.length; i < length; i++) {\n if (comparer(dates[i], dates[i - 1]) < 0) {\n dates.sort(comparer);\n break;\n }\n }\n return dates;\n }\n function uniqueDates(srcDates, comparer) {\n if (comparer === void 0) {\n comparer = dataviz.dateComparer;\n }\n var dates = sortDates(srcDates, comparer);\n var length = dates.length;\n var result = length > 0 ? [dates[0]] : [];\n for (var i = 1; i < length; i++) {\n if (comparer(dates[i], last(result)) !== 0) {\n result.push(dates[i]);\n }\n }\n return result;\n }\n function transpose(rows) {\n var rowCount = rows.length;\n var result = [];\n for (var rowIx = 0; rowIx < rowCount; rowIx++) {\n var row = rows[rowIx];\n var colCount = row.length;\n for (var colIx = 0; colIx < colCount; colIx++) {\n result[colIx] = result[colIx] || [];\n result[colIx].push(row[colIx]);\n }\n }\n return result;\n }\n function clearMissingValues(originalOptions, options) {\n for (var field in options) {\n var fieldValue = options[field];\n var originalValue = originalOptions[field];\n if (defined(originalValue)) {\n var nullValue = fieldValue === null;\n if (nullValue || !defined(fieldValue)) {\n delete originalOptions[field];\n if (nullValue) {\n delete options[field];\n }\n } else if (originalValue && isObject(fieldValue)) {\n if (isObject(originalValue)) {\n clearMissingValues(originalValue, fieldValue);\n }\n }\n }\n }\n }\n setDefaultOptions(Chart, {\n renderAs: '',\n chartArea: {},\n legend: {\n visible: true,\n labels: {}\n },\n categoryAxis: {},\n seriesDefaults: {\n type: COLUMN,\n data: [],\n highlight: { visible: true },\n labels: {},\n negativeValues: { visible: false }\n },\n series: [],\n seriesColors: null,\n tooltip: { visible: false },\n transitions: true,\n valueAxis: {},\n plotArea: {},\n title: {},\n xAxis: {},\n yAxis: {},\n panes: [{}],\n pannable: false,\n zoomable: false\n });\n kendo.deepExtend(kendo.dataviz, {\n constants: constants,\n Aggregates: Aggregates,\n AreaChart: AreaChart,\n AreaSegment: AreaSegment,\n AxisGroupRangeTracker: AxisGroupRangeTracker,\n Bar: Bar,\n BarChart: BarChart,\n BarLabel: BarLabel,\n BoxPlotChart: BoxPlotChart,\n BoxPlot: BoxPlot,\n BubbleChart: BubbleChart,\n Bullet: Bullet,\n BulletChart: BulletChart,\n CandlestickChart: CandlestickChart,\n Candlestick: Candlestick,\n CategoricalChart: CategoricalChart,\n CategoricalErrorBar: CategoricalErrorBar,\n CategoricalPlotArea: CategoricalPlotArea,\n Chart: Chart,\n ChartContainer: ChartContainer,\n ClipAnimation: ClipAnimation,\n ClusterLayout: ClusterLayout,\n Crosshair: Crosshair,\n CrosshairTooltip: CrosshairTooltip,\n DefaultAggregates: DefaultAggregates,\n DonutChart: DonutChart,\n DonutPlotArea: DonutPlotArea,\n DonutSegment: DonutSegment,\n ErrorBarBase: ErrorBarBase,\n ErrorRangeCalculator: ErrorRangeCalculator,\n Highlight: Highlight,\n SharedTooltip: SharedTooltip,\n Legend: Legend,\n LegendItem: LegendItem,\n LegendLayout: LegendLayout,\n LineChart: LineChart,\n LinePoint: LinePoint,\n LineSegment: LineSegment,\n Pane: Pane,\n PieAnimation: PieAnimation,\n PieChart: PieChart,\n PieChartMixin: PieChartMixin,\n PiePlotArea: PiePlotArea,\n PieSegment: PieSegment,\n PlotAreaBase: PlotAreaBase,\n PlotAreaEventsMixin: PlotAreaEventsMixin,\n PlotAreaFactory: PlotAreaFactory,\n PointEventsMixin: PointEventsMixin,\n RangeBar: RangeBar,\n RangeBarChart: RangeBarChart,\n ScatterChart: ScatterChart,\n ScatterErrorBar: ScatterErrorBar,\n ScatterLineChart: ScatterLineChart,\n Selection: Selection,\n SeriesAggregator: SeriesAggregator,\n SeriesBinder: SeriesBinder,\n SplineSegment: SplineSegment,\n SplineAreaSegment: SplineAreaSegment,\n StackWrap: StackWrap,\n Tooltip: Tooltip,\n OHLCChart: OHLCChart,\n OHLCPoint: OHLCPoint,\n WaterfallChart: WaterfallChart,\n WaterfallSegment: WaterfallSegment,\n XYPlotArea: XYPlotArea,\n MousewheelZoom: MousewheelZoom,\n ZoomSelection: ZoomSelection,\n Pannable: Pannable,\n ChartAxis: ChartAxis,\n ChartPlotArea: ChartPlotArea,\n anyHasZIndex: anyHasZIndex,\n appendIfNotNull: areNumbers,\n areNumbers: areNumbers,\n categoriesCount: categoriesCount,\n countNumbers: countNumbers,\n equalsIgnoreCase: equalsIgnoreCase,\n evalOptions: evalOptions,\n filterSeriesByType: filterSeriesByType,\n getDateField: getDateField,\n getField: getField,\n hasGradientOverlay: hasGradientOverlay,\n hasValue: hasValue,\n isDateAxis: isDateAxis,\n segmentVisible: segmentVisible,\n singleItemOrArray: singleItemOrArray\n });\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('dataviz/chart/chart', [\n 'dataviz/chart/kendo-chart',\n 'kendo.data',\n 'kendo.dataviz.core',\n 'kendo.dataviz.themes',\n 'kendo.drawing',\n 'kendo.userevents'\n ], f);\n}(function () {\n (function ($, undefined) {\n var NS = '.kendoChart';\n var kendo = window.kendo;\n var Class = kendo.Class;\n var outerWidth = kendo._outerWidth;\n var outerHeight = kendo._outerHeight;\n var dataviz = kendo.dataviz;\n var constants = dataviz.constants;\n var KendoChart = dataviz.Chart;\n var SeriesBinder = dataviz.SeriesBinder;\n var Widget = kendo.ui.Widget;\n var DataSource = kendo.data.DataSource;\n var deepExtend = kendo.deepExtend;\n var defined = dataviz.defined;\n var getField = dataviz.getField;\n var InstanceObserver = dataviz.InstanceObserver;\n var inArray = dataviz.inArray;\n var services = dataviz.services;\n var proxy = $.proxy;\n var isArray = $.isArray;\n var extend = $.extend;\n var template = kendo.template;\n var MOUSELEAVE_NS = 'mouseleave' + NS;\n var AXIS_LABEL_CLICK = constants.AXIS_LABEL_CLICK;\n var LEGEND_ITEM_CLICK = constants.LEGEND_ITEM_CLICK;\n var LEGEND_ITEM_HOVER = constants.LEGEND_ITEM_HOVER;\n var SERIES_CLICK = constants.SERIES_CLICK;\n var SERIES_HOVER = constants.SERIES_HOVER;\n var PLOT_AREA_CLICK = constants.PLOT_AREA_CLICK;\n var PLOT_AREA_HOVER = constants.PLOT_AREA_HOVER;\n var DRAG = constants.DRAG;\n var DRAG_END = constants.DRAG_END;\n var DRAG_START = constants.DRAG_START;\n var ZOOM_START = constants.ZOOM_START;\n var ZOOM = constants.ZOOM;\n var ZOOM_END = constants.ZOOM_END;\n var SELECT_START = constants.SELECT_START;\n var SELECT = constants.SELECT;\n var SELECT_END = constants.SELECT_END;\n var RENDER = constants.RENDER;\n var NOTE_CLICK = constants.NOTE_CLICK;\n var NOTE_HOVER = constants.NOTE_HOVER;\n var CHANGE = 'change';\n var DATABOUND = 'dataBound';\n var LEAVE = 'leave';\n var VALUE = constants.VALUE;\n var PIE = constants.PIE;\n var DONUT = constants.DONUT;\n var FUNNEL = constants.FUNNEL;\n var Observable = kendo.Observable;\n var TOOLTIP_ANIMATION_DURATION = 150;\n var TOOLTIP_SHOW_DELAY = 100;\n var TOOLTIP_INVERSE = 'k-chart-tooltip-inverse';\n var SHARED_TOOLTIP_CLASS = 'k-chart-shared-tooltip';\n services.DomEventsBuilder.register({\n create: function (element, events) {\n return new kendo.UserEvents(element, deepExtend({\n global: true,\n multiTouch: true,\n fastTap: true\n }, events));\n }\n });\n var ChartInstanceObserver = InstanceObserver.extend({\n handlerMap: {\n showTooltip: '_showTooltip',\n hideTooltip: '_hideTooltip',\n legendItemClick: '_onLegendItemClick',\n render: '_onRender',\n init: '_onInit'\n }\n });\n var Chart = Widget.extend({\n init: function (element, userOptions) {\n var dataSource;\n kendo.destroy(element);\n Widget.fn.init.call(this, element);\n if (userOptions) {\n dataSource = userOptions.dataSource;\n delete userOptions.dataSource;\n }\n this.options = deepExtend({}, this.options, userOptions);\n this.wrapper = this.element;\n this._attachEvents();\n if (userOptions) {\n userOptions.dataSource = dataSource;\n }\n this._seriesVisibility = new SeriesVisibilityState();\n this.bind(this.events, this.options);\n this._initDataSource(userOptions);\n kendo.notify(this, dataviz.ui);\n },\n events: [\n DATABOUND,\n SERIES_CLICK,\n SERIES_HOVER,\n AXIS_LABEL_CLICK,\n LEGEND_ITEM_CLICK,\n LEGEND_ITEM_HOVER,\n PLOT_AREA_CLICK,\n PLOT_AREA_HOVER,\n DRAG_START,\n DRAG,\n DRAG_END,\n ZOOM_START,\n ZOOM,\n ZOOM_END,\n SELECT_START,\n SELECT,\n SELECT_END,\n NOTE_CLICK,\n NOTE_HOVER,\n RENDER\n ],\n options: {\n name: 'Chart',\n renderAs: '',\n theme: 'default',\n axisDefaults: {},\n chartArea: {},\n legend: {},\n categoryAxis: {},\n autoBind: true,\n seriesDefaults: {},\n series: [],\n seriesColors: null,\n tooltip: {},\n transitions: true,\n valueAxis: {},\n plotArea: {},\n title: {},\n xAxis: {},\n yAxis: {},\n panes: [{}],\n pannable: false,\n zoomable: false\n },\n items: function () {\n return $();\n },\n refresh: function () {\n var chart = this;\n var instance = chart._instance;\n instance.applyDefaults(chart.options);\n instance.applySeriesColors();\n chart._bindSeries();\n chart._bindCategories();\n chart.trigger(DATABOUND);\n chart._redraw();\n },\n getSize: function () {\n return kendo.dimensions(this.element);\n },\n redraw: function (paneName) {\n this._size = null;\n this._instance.redraw(paneName);\n },\n setOptions: function (options) {\n var chart = this, dataSource = options.dataSource;\n delete options.dataSource;\n Widget.fn._setEvents.call(chart, options);\n this._instance.applyOptions(options, this._getThemeOptions(options));\n this.options = this._instance.options;\n this._tooltip.setOptions(this.options.tooltip);\n this._sourceSeries = null;\n if (dataSource) {\n chart.setDataSource(dataSource);\n }\n if (chart._hasDataSource) {\n chart._onDataChanged();\n } else {\n chart._bindCategories();\n chart.redraw();\n }\n chart._instance.updateMouseMoveHandler();\n },\n setDataSource: function (dataSource) {\n var chart = this;\n chart.dataSource.unbind(CHANGE, chart._dataChangeHandler);\n chart.dataSource = dataSource = DataSource.create(dataSource);\n chart._hasDataSource = true;\n chart._hasData = false;\n dataSource.bind(CHANGE, chart._dataChangeHandler);\n if (chart.options.autoBind) {\n dataSource.fetch();\n }\n },\n destroy: function () {\n var chart = this, dataSource = chart.dataSource;\n chart.element.off(NS);\n if (dataSource) {\n dataSource.unbind(CHANGE, chart._dataChangeHandler);\n }\n if (chart._instance) {\n chart._instance.destroy();\n delete this._instance;\n }\n if (this._tooltip) {\n this._tooltip.destroy();\n delete this._tooltip;\n }\n this._destroyCrosshairTooltips();\n Widget.fn.destroy.call(chart);\n },\n findPaneByName: function (name) {\n var panes = this._plotArea.panes;\n for (var idx = 0; idx < panes.length; idx++) {\n if (panes[idx].options.name === name) {\n return new ChartPane(this, panes[idx]);\n }\n }\n },\n findPaneByIndex: function (idx) {\n var panes = this._plotArea.panes;\n if (panes[idx]) {\n return new ChartPane(this, panes[idx]);\n }\n },\n findSeries: function (callback) {\n var plotArea = this._plotArea;\n var series = plotArea.srcSeries || plotArea.series;\n for (var idx = 0; idx < series.length; idx++) {\n if (callback(series[idx])) {\n return new ChartSeries(this, series[idx]);\n }\n }\n },\n findSeriesByName: function (name) {\n return this._createSeries({ name: name });\n },\n findSeriesByIndex: function (index) {\n return this._createSeries({ index: index });\n },\n _createSeries: function (options) {\n var seriesOptions = this._seriesOptions(options);\n if (seriesOptions) {\n return new ChartSeries(this, seriesOptions);\n }\n },\n _seriesOptions: function (options) {\n var plotArea = this._plotArea;\n var series = plotArea.srcSeries || plotArea.series;\n var seriesOptions;\n if (defined(options.index)) {\n seriesOptions = series[options.index];\n } else if (defined(options.name)) {\n for (var idx = 0; idx < series.length; idx++) {\n if (series[idx].name === options.name) {\n seriesOptions = series[idx];\n break;\n }\n }\n }\n return seriesOptions;\n },\n _attachEvents: function () {\n this.element.on(MOUSELEAVE_NS, proxy(this._mouseleave, this));\n },\n _mouseleave: function (e) {\n var instance = this._instance;\n var tooltip = this._tooltip;\n var target = e.relatedTarget;\n if (!(target && $(target).closest(tooltip.element).length) && instance && !instance.handlingTap) {\n instance.hideElements();\n }\n },\n _getThemeOptions: function (userOptions) {\n var themeName = (userOptions || {}).theme;\n if (themeName === 'sass' || themeName === 'default-v2' || themeName === 'bootstrap-v4') {\n return dataviz.autoTheme().chart;\n }\n if (defined(themeName)) {\n var themes = dataviz.ui.themes || {};\n var theme = themes[themeName] || themes[themeName.toLowerCase()] || {};\n return theme.chart || {};\n }\n },\n _initChart: function () {\n this._createChart(this.options, this._getThemeOptions(this.options));\n this.options = this._instance.options;\n },\n _createChart: function (options, themeOptions) {\n this._instance = new KendoChart(this.element[0], options, themeOptions, {\n observer: new ChartInstanceObserver(this),\n sender: this\n });\n },\n _onInit: function (e) {\n this._instance = e.sender;\n },\n _initDataSource: function (userOptions) {\n var chart = this, dataSource = (userOptions || {}).dataSource;\n chart._dataChangeHandler = proxy(chart._onDataChanged, chart);\n chart.dataSource = DataSource.create(dataSource).bind('change', chart._dataChangeHandler);\n chart._bindCategories();\n if (dataSource) {\n chart._hasDataSource = true;\n }\n this._initChart();\n this._initTooltip();\n if (dataSource) {\n if (chart.options.autoBind) {\n chart.dataSource.fetch();\n }\n }\n },\n _destroyCrosshairTooltips: function () {\n var tooltips = this._crosshairTooltips;\n if (tooltips) {\n for (var key in tooltips) {\n tooltips[key].destroy();\n }\n }\n this._crosshairTooltips = {};\n },\n _getCrosshairTooltip: function (name, index) {\n var tooltips = this._crosshairTooltips = this._crosshairTooltips || {};\n var key = name + index;\n var tooltip = tooltips[key];\n if (!tooltip) {\n tooltip = tooltips[key] = new CrosshairTooltip(this.element);\n }\n return tooltip;\n },\n _showTooltip: function (e) {\n if (e.crosshair) {\n var tooltip = this._getCrosshairTooltip(e.axisName, e.axisIndex);\n tooltip.show(e);\n } else if (this._tooltip) {\n this._tooltip.show(e);\n }\n },\n _hideTooltip: function (e) {\n if (e.crosshair) {\n var tooltip = this._getCrosshairTooltip(e.axisName, e.axisIndex);\n tooltip.hide();\n } else if (this._tooltip) {\n this._tooltip.hide(e);\n }\n },\n _onRender: function (e) {\n this._destroyCrosshairTooltips();\n this._copyMembers(e.sender);\n if (!this._hasDataSource || this._hasData || !this.options.autoBind) {\n this.trigger(RENDER);\n }\n },\n _copyMembers: function (instance) {\n this.options = instance.options;\n this._originalOptions = instance._originalOptions;\n this.surface = instance.surface;\n this._plotArea = instance._plotArea;\n this._model = instance._model;\n this._highlight = instance._highlight;\n this._selections = instance._selections;\n this._pannable = instance._pannable;\n this._zoomSelection = instance._zoomSelection;\n this._mousewheelZoom = instance._mousewheelZoom;\n },\n requiresHandlers: function (names) {\n var events = this._events;\n for (var idx = 0; idx < names.length; idx++) {\n if (defined(events[names[idx]])) {\n return true;\n }\n }\n },\n _initTooltip: function () {\n this._tooltip = this._createTooltip();\n this._tooltip.bind(LEAVE, proxy(this._tooltipleave, this));\n },\n _onLegendItemClick: function (e) {\n if (!this.trigger(LEGEND_ITEM_CLICK, e)) {\n this._legendItemClick(e.seriesIndex, e.pointIndex);\n }\n },\n _legendItemClick: function (seriesIndex, pointIndex) {\n var chart = this._instance, plotArea = chart._plotArea, currentSeries = (plotArea.srcSeries || plotArea.series)[seriesIndex];\n if ($.inArray(currentSeries.type, [\n PIE,\n DONUT,\n FUNNEL\n ]) >= 0) {\n var pointVisibility = currentSeries.pointVisibility = currentSeries.pointVisibility || {};\n var visible = pointVisibility[pointIndex];\n pointVisibility[pointIndex] = defined(visible) ? !visible : false;\n } else {\n currentSeries.visible = !currentSeries.visible;\n this._seriesVisibility.save(currentSeries);\n }\n chart._noTransitionsRedraw();\n },\n _createTooltip: function () {\n return new Tooltip(this.element, this.options.tooltip);\n },\n _tooltipleave: function () {\n var chart = this._instance, plotArea = chart._plotArea, highlight = chart._highlight;\n plotArea.hideCrosshairs();\n highlight.hide();\n },\n _bindData: function (e) {\n var chart = this, options = chart.options, series = chart._sourceSeries || options.series, seriesIx, seriesLength = series.length, data = chart.dataSource.view(), grouped = (chart.dataSource.group() || []).length > 0, processedSeries = [], seriesVisibility = this._seriesVisibility, currentSeries, groupedSeries;\n for (seriesIx = 0; seriesIx < seriesLength; seriesIx++) {\n currentSeries = series[seriesIx];\n if (chart._isBindable(currentSeries) && grouped) {\n groupedSeries = groupSeries(currentSeries, data);\n processedSeries = processedSeries.concat(groupedSeries);\n seriesVisibility.applyByGroup(groupedSeries, e);\n } else {\n currentSeries = extend({}, currentSeries);\n processedSeries.push(currentSeries);\n seriesVisibility.applyByIndex(currentSeries, e);\n }\n }\n chart._sourceSeries = series;\n options.series = processedSeries;\n this._instance.applySeriesColors();\n chart._bindSeries();\n chart._bindCategories();\n this._hasData = true;\n },\n _onDataChanged: function (e) {\n this._bindData(e);\n this.trigger(DATABOUND);\n this._redraw();\n },\n _bindSeries: function () {\n var chart = this, data = chart.dataSource.view(), series = chart.options.series, seriesIx, seriesLength = series.length, currentSeries, groupIx, seriesData;\n for (seriesIx = 0; seriesIx < seriesLength; seriesIx++) {\n currentSeries = series[seriesIx];\n if (chart._isBindable(currentSeries)) {\n groupIx = currentSeries._groupIx;\n seriesData = defined(groupIx) ? (data[groupIx] || {}).items : data;\n if (currentSeries.autoBind !== false) {\n currentSeries.data = seriesData;\n }\n }\n }\n },\n _bindCategories: function () {\n var chart = this, data = chart.dataSource.view() || [], grouped = (chart.dataSource.group() || []).length > 0, categoriesData = data, options = chart.options, definitions = [].concat(options.categoryAxis), axisIx, axis;\n if (grouped) {\n if (data.length) {\n categoriesData = data[0].items;\n }\n }\n for (axisIx = 0; axisIx < definitions.length; axisIx++) {\n axis = definitions[axisIx];\n if (axis.autoBind !== false) {\n chart._bindCategoryAxis(axis, categoriesData, axisIx);\n }\n }\n },\n _bindCategoryAxis: function (axis, data, axisIx) {\n var count = (data || []).length, categoryIx, category, row;\n if (axis.field) {\n axis.categories = [];\n for (categoryIx = 0; categoryIx < count; categoryIx++) {\n row = data[categoryIx];\n category = getField(axis.field, row);\n if (categoryIx === 0) {\n axis.categories = [category];\n axis.dataItems = [row];\n } else {\n axis.categories.push(category);\n axis.dataItems.push(row);\n }\n }\n } else if (this._instance) {\n this._instance.bindCategoryAxisFromSeries(axis, axisIx);\n }\n },\n _isBindable: function (series) {\n var valueFields = SeriesBinder.current.valueFields(series), result = true, field, i;\n for (i = 0; i < valueFields.length; i++) {\n field = valueFields[i];\n if (field === VALUE) {\n field = 'field';\n } else {\n field = field + 'Field';\n }\n if (!defined(series[field])) {\n result = false;\n break;\n }\n }\n return result;\n }\n });\n var proxyMembers = [\n 'getAxis',\n 'findAxisByName',\n 'plotArea',\n 'toggleHighlight',\n 'showTooltip',\n 'hideTooltip',\n 'exportVisual',\n '_resize',\n '_redraw',\n '_noTransitionsRedraw',\n '_legendItemHover',\n '_eventCoordinates'\n ];\n function createProxyMember(name) {\n Chart.fn[name] = function () {\n var instance = this._instance;\n if (instance) {\n return instance[name].apply(instance, arguments);\n }\n };\n }\n for (var idx = 0; idx < proxyMembers.length; idx++) {\n createProxyMember(proxyMembers[idx]);\n }\n function groupSeries(series, data) {\n var result = [], nameTemplate, legacyTemplate = series.groupNameTemplate, groupIx, dataLength = data.length, seriesClone;\n if (dataLength === 0) {\n seriesClone = deepExtend({}, series);\n seriesClone.visibleInLegend = false;\n return [seriesClone];\n }\n if (defined(legacyTemplate)) {\n kendo.logToConsole('\\'groupNameTemplate\\' is obsolete and will be removed in future versions. ' + 'Specify the group name template as \\'series.name\\'');\n if (legacyTemplate) {\n nameTemplate = template(legacyTemplate);\n }\n } else {\n nameTemplate = template(series.name || '');\n if (nameTemplate._slotCount === 0) {\n nameTemplate = template(defined(series.name) ? '#= group.value #: #= series.name #' : '#= group.value #');\n }\n }\n for (groupIx = 0; groupIx < dataLength; groupIx++) {\n seriesClone = deepExtend({}, series);\n if (!kendo.isFunction(seriesClone.color)) {\n seriesClone.color = undefined;\n }\n seriesClone._groupIx = groupIx;\n seriesClone._groupValue = data[groupIx].value;\n result.push(seriesClone);\n if (nameTemplate) {\n seriesClone.name = nameTemplate({\n series: seriesClone,\n group: data[groupIx]\n });\n }\n }\n return result;\n }\n dataviz.ExportMixin.extend(Chart.fn);\n if (kendo.PDFMixin) {\n kendo.PDFMixin.extend(Chart.fn);\n }\n dataviz.ui.plugin(Chart);\n var SeriesVisibilityState = Class.extend({\n init: function () {\n this.groups = {};\n this.index = {};\n },\n applyByGroup: function (series, e) {\n if (e && e.action) {\n for (var idx = 0; idx < series.length; idx++) {\n if (this.groups[series[idx]._groupValue] === false) {\n series[idx].visible = false;\n }\n }\n } else {\n this.groups = {};\n }\n },\n applyByIndex: function (series, e) {\n if (e && e.action) {\n if (this.index[series.index] === false) {\n series.visible = false;\n }\n } else {\n this.index = {};\n }\n },\n save: function (series) {\n if (!series) {\n return;\n }\n if (defined(series._groupValue)) {\n this.groups[series._groupValue] = series.visible;\n } else {\n this.index[series.index] = series.visible;\n }\n }\n });\n var geom = kendo.geometry;\n var Tooltip = Observable.extend({\n init: function (chartElement, options) {\n var tooltip = this;\n Observable.fn.init.call(tooltip);\n this.setOptions(options);\n tooltip.chartElement = chartElement;\n tooltip.template = Tooltip.template;\n if (!tooltip.template) {\n tooltip.template = Tooltip.template = kendo.template('
    ' + '
    ', {\n useWithBlock: false,\n paramName: 'd'\n });\n }\n tooltip.element = $(tooltip.template(tooltip.options));\n tooltip.move = proxy(tooltip.move, tooltip);\n tooltip._mouseleave = proxy(tooltip._mouseleave, tooltip);\n var mobileScrollerSelector = kendo.format('[{0}=\\'content\\'],[{0}=\\'scroller\\']', kendo.attr('role'));\n tooltip._mobileScroller = chartElement.closest(mobileScrollerSelector).data('kendoMobileScroller');\n },\n destroy: function () {\n this._clearShowTimeout();\n if (this.element) {\n this.element.off(MOUSELEAVE_NS).remove();\n this.element = null;\n }\n },\n setOptions: function (options) {\n this.options = deepExtend({}, this.options, options);\n },\n options: {\n opacity: 1,\n animation: { duration: TOOLTIP_ANIMATION_DURATION },\n sharedTemplate: '' + '' + '# for(var i = 0; i < points.length; i++) { #' + '# var point = points[i]; #' + '' + '# if(colorMarker) { # ' + '' + '# } #' + '# if(nameColumn) { # ' + '' + '# } #' + '' + '' + '# } #' + '
    #= categoryText #
    #if (point.series.name) {# #: point.series.name #: #} else {#   #}##= content(point) #
    ',\n categoryFormat: '{0:d}'\n },\n move: function () {\n var tooltip = this, options = tooltip.options, element = tooltip.element, offset;\n if (!tooltip.anchor || !tooltip.element) {\n return;\n }\n offset = tooltip._offset();\n if (!tooltip.visible) {\n element.css({\n top: offset.top,\n left: offset.left\n });\n }\n tooltip.visible = true;\n tooltip._ensureElement(document.body);\n element.stop(true, true).show().animate({\n left: offset.left,\n top: offset.top\n }, options.animation.duration);\n },\n _clearShowTimeout: function () {\n if (this.showTimeout) {\n clearTimeout(this.showTimeout);\n this.showTimeout = null;\n }\n },\n getAnchor: function (size) {\n var anchor = this.anchor;\n var point = anchor.point;\n var align = anchor.align;\n var x = point.left;\n var y = point.top;\n if (align.horizontal === 'center') {\n x -= size.width / 2;\n } else if (align.horizontal === 'right') {\n x -= size.width;\n }\n if (align.vertical === 'center') {\n y -= size.height / 2;\n } else if (align.vertical === 'bottom') {\n y -= size.height;\n }\n return {\n x: x,\n y: y\n };\n },\n _offset: function () {\n var tooltip = this, size = tooltip._measure(), anchor = tooltip.getAnchor(size), top = anchor.y, left = anchor.x, zoomLevel = kendo.support.zoomLevel(), viewport = $(window), scrollTop = window.pageYOffset || document.documentElement.scrollTop || 0, scrollLeft = window.pageXOffset || document.documentElement.scrollLeft || 0, movable = (this._mobileScroller || {}).movable;\n if (!movable || movable.scale === 1) {\n top += tooltip._fit(top - scrollTop, size.height, outerHeight(viewport) / zoomLevel);\n left += tooltip._fit(left - scrollLeft, size.width, outerWidth(viewport) / zoomLevel);\n } else {\n var transform = geom.transform().scale(movable.scale, movable.scale, [\n movable.x,\n movable.y\n ]);\n var point = new geom.Point(left, top).transform(transform);\n left = point.x;\n top = point.y;\n }\n return {\n top: top,\n left: left\n };\n },\n show: function (e) {\n this.anchor = e.anchor;\n this.element.css(e.style);\n this.element.toggleClass(TOOLTIP_INVERSE, !!e.className);\n this.element.toggleClass(SHARED_TOOLTIP_CLASS, !!e.shared);\n var content = e.shared ? this._sharedContent(e) : this._pointContent(e.point);\n this.element.html(content);\n this._clearShowTimeout();\n this.showTimeout = setTimeout(this.move, TOOLTIP_SHOW_DELAY);\n },\n hide: function () {\n var tooltip = this;\n clearTimeout(tooltip.showTimeout);\n tooltip._hideElement();\n if (tooltip.visible) {\n tooltip.point = null;\n tooltip.visible = false;\n tooltip.index = null;\n }\n },\n _sharedContent: function (e) {\n var points = e.points;\n var nameColumn = dataviz.grep(points, function (point) {\n return defined(point.series.name);\n }).length;\n var colorMarker = e.series.length > 1;\n var colspan = 1;\n if (nameColumn) {\n colspan++;\n }\n if (colorMarker) {\n colspan++;\n }\n var template = kendo.template(this.options.sharedTemplate);\n var content = template({\n points: points,\n category: e.category,\n categoryText: e.categoryText,\n content: this._pointContent,\n colorMarker: colorMarker,\n nameColumn: nameColumn,\n colspan: colspan\n });\n return content;\n },\n _measure: function () {\n this._ensureElement();\n var size = {\n width: outerWidth(this.element),\n height: outerHeight(this.element)\n };\n return size;\n },\n _ensureElement: function () {\n if (this.element) {\n this.element.appendTo(document.body).on(MOUSELEAVE_NS, this._mouseleave);\n }\n },\n _mouseleave: function (e) {\n var target = e.relatedTarget;\n var chart = this.chartElement[0];\n if (target && target !== chart && !$.contains(chart, target)) {\n this.trigger(LEAVE);\n this.hide();\n }\n },\n _hideElement: function () {\n var tooltip = this;\n var element = this.element;\n if (element) {\n element.fadeOut({\n always: function () {\n if (!tooltip.visible) {\n element.off(MOUSELEAVE_NS).remove();\n }\n }\n });\n }\n },\n _pointContent: function (point) {\n var tooltip = this, options = deepExtend({}, tooltip.options, point.options.tooltip), content, tooltipTemplate;\n if (defined(point.value)) {\n content = point.value.toString();\n }\n if (options.template) {\n tooltipTemplate = template(options.template);\n content = tooltipTemplate({\n value: point.value,\n category: point.category,\n series: point.series,\n dataItem: point.dataItem,\n percentage: point.percentage,\n runningTotal: point.runningTotal,\n total: point.total,\n low: point.low,\n high: point.high,\n xLow: point.xLow,\n xHigh: point.xHigh,\n yLow: point.yLow,\n yHigh: point.yHigh\n });\n } else if (options.format) {\n content = point.formatValue(options.format);\n }\n return content;\n },\n _fit: function (offset, size, viewPortSize) {\n var output = 0;\n if (offset + size > viewPortSize) {\n output = viewPortSize - (offset + size);\n }\n if (offset < 0) {\n output = -offset;\n }\n return output;\n }\n });\n var CrosshairTooltip = Tooltip.extend({\n init: function (chartElement, options) {\n Tooltip.fn.init.call(this, chartElement, options);\n this.element.addClass('k-chart-crosshair-tooltip');\n },\n show: function (e) {\n var element = this.element;\n if (element) {\n this.anchor = e.anchor;\n this.element.css(e.style);\n this.element.html(this.content(e));\n this.move();\n }\n },\n move: function () {\n var tooltip = this, element = tooltip.element, offset = tooltip._offset();\n tooltip._ensureElement();\n element.css({\n top: offset.top,\n left: offset.left\n }).show();\n },\n content: function (e) {\n var content = e.value, options = e.crosshair.options.tooltip;\n if (options.template) {\n content = template(options.template)({ value: content });\n }\n return content;\n },\n hide: function () {\n this.element.hide();\n }\n });\n var ChartPane = Class.extend({\n init: function (chart, pane) {\n this._chart = chart;\n this._pane = pane;\n this.visual = pane.visual;\n this.chartsVisual = pane.chartContainer.visual;\n this.name = pane.options.name;\n },\n series: function () {\n var chart = this._chart;\n var seriesByPane = chart._plotArea.groupSeriesByPane();\n var series = seriesByPane[this.name || 'default'];\n var result = [];\n if (series) {\n for (var idx = 0; idx < series.length; idx++) {\n result.push(new ChartSeries(chart, series[idx]));\n }\n }\n return result;\n }\n });\n var ChartSeries = Class.extend({\n init: function (chart, options) {\n this._chart = chart;\n this._options = options;\n },\n points: function (filter) {\n var points = this._points;\n if (!points) {\n var series = this._seriesOptions();\n var plotArea = this._chart._plotArea;\n this._points = points = plotArea.pointsBySeriesIndex(series.index);\n }\n if (kendo.isFunction(filter)) {\n points = this._filterPoints(points, filter);\n }\n return points;\n },\n data: function (data) {\n var series = this._seriesOptions();\n if (data) {\n var chart = this._chart;\n var plotArea = chart._plotArea;\n series.data = data;\n if (series.categoryField) {\n var axis = plotArea.seriesCategoryAxis(series);\n var options = [].concat(chart.options.categoryAxis);\n chart._instance.bindCategoryAxisFromSeries(options[axis.axisIndex], axis.axisIndex);\n }\n chart._noTransitionsRedraw();\n this._clearFields();\n }\n return series.data;\n },\n findPoint: function (filter) {\n var points = this.points();\n for (var idx = 0; idx < points.length; idx++) {\n if (filter(points[idx])) {\n return points[idx];\n }\n }\n },\n toggleHighlight: function (show, elements) {\n if (!elements) {\n elements = this.points();\n } else if (kendo.isFunction(elements)) {\n elements = this.points(elements);\n } else {\n elements = isArray(elements) ? elements : [elements];\n }\n this._chart._instance.togglePointsHighlight(show, elements);\n },\n toggleVisibility: function (visible, filter) {\n var chart = this._chart;\n var seriesOptions = this._seriesOptions();\n var hasFilter = kendo.isFunction(filter);\n if (!hasFilter) {\n seriesOptions.visible = visible;\n chart._seriesVisibility.save(seriesOptions);\n } else {\n if (inArray(seriesOptions.type, [\n PIE,\n DONUT,\n FUNNEL\n ])) {\n var data = this._filterData(filter);\n for (var idx = 0; idx < data.length; idx++) {\n data[idx].visible = visible;\n }\n } else {\n seriesOptions.visible = function (data) {\n return filter(data.dataItem) ? visible : true;\n };\n }\n }\n chart._noTransitionsRedraw();\n this._clearFields();\n },\n _filterData: function (filter) {\n var data = this._seriesOptions().data;\n var length = data.length;\n var result = [];\n for (var idx = 0; idx < length; idx++) {\n if (filter(data[idx])) {\n result.push(data[idx]);\n }\n }\n return result;\n },\n _filterPoints: function (points, filter) {\n var result = [];\n var length = points.length;\n for (var idx = 0; idx < length; idx++) {\n if (filter(points[idx])) {\n result.push(points[idx]);\n }\n }\n return result;\n },\n _seriesOptions: function () {\n var series = this._series;\n if (!series) {\n series = this._series = this._chart._seriesOptions(this._options);\n }\n return series;\n },\n _clearFields: function () {\n delete this._points;\n delete this._series;\n }\n });\n dataviz.Tooltip = Tooltip;\n dataviz.CrosshairTooltip = CrosshairTooltip;\n dataviz.ChartInstanceObserver = ChartInstanceObserver;\n dataviz.ChartPane = ChartPane;\n dataviz.ChartSeries = ChartSeries;\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.dataviz.chart', [\n 'dataviz/chart/kendo-chart',\n 'dataviz/chart/chart'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'dataviz.chart',\n name: 'Chart',\n category: 'dataviz',\n description: 'The Chart widget uses modern browser technologies to render high-quality data visualizations in the browser.',\n depends: [\n 'data',\n 'userevents',\n 'drawing',\n 'dataviz.core',\n 'dataviz.themes'\n ],\n features: [{\n id: 'dataviz.chart-pdf-export',\n name: 'PDF export',\n description: 'Export Chart as PDF',\n depends: ['pdf']\n }]\n };\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.dataviz.gauge', [\n 'kendo.dataviz.core',\n 'kendo.drawing',\n 'kendo.dataviz.themes'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'dataviz.gauge',\n name: 'Gauge',\n category: 'dataviz',\n description: 'Radial and Linear gauges.',\n depends: [\n 'dataviz.core',\n 'dataviz.themes'\n ]\n };\n (function ($, undefined) {\n var math = Math, kendo = window.kendo, Widget = kendo.ui.Widget, deepExtend = kendo.deepExtend, dataviz = kendo.dataviz, autoMajorUnit = dataviz.autoMajorUnit, ChartElement = dataviz.ChartElement, NumericAxis = dataviz.NumericAxis, Axis = dataviz.Axis, Box2D = dataviz.Box2D, Class = kendo.Class, defined = dataviz.defined, isNumber = dataviz.isNumber, interpolateValue = dataviz.interpolateValue, getSpacing = dataviz.getSpacing, round = dataviz.round, geo = dataviz.geometry, draw = dataviz.drawing, Point = geo.Point, Group = draw.Group, Path = draw.Path, Rect = geo.Rect, Text = draw.Text;\n var ANGULAR_SPEED = 150, LINEAR_SPEED = 250, ARROW = 'arrow', ARROW_POINTER = 'arrowPointer', BAR_POINTER = 'barPointer', BLACK = '#000', CAP_SIZE = 0.05, COORD_PRECISION = dataviz.COORD_PRECISION, MAX_VALUE = Number.MAX_VALUE, MIN_VALUE = -Number.MAX_VALUE, DEFAULT_HEIGHT = 200, DEFAULT_LINE_WIDTH = 0.5, DEFAULT_WIDTH = 200, DEFAULT_MIN_WIDTH = 60, DEFAULT_MIN_HEIGHT = 60, DEFAULT_MARGIN = 5, DEGREE = math.PI / 180, GEO_ARC_ADJUST_ANGLE = 180, INSIDE = 'inside', LINEAR = 'linear', NEEDLE = 'needle', OUTSIDE = 'outside', RADIAL_POINTER = 'radialPointer', X = 'x', Y = 'y';\n var Pointer = Class.extend({\n init: function (scale, options) {\n var pointer = this;\n var scaleOptions = scale.options;\n ChartElement.fn.init.call(pointer, options);\n options = pointer.options;\n options.fill = options.color;\n pointer.scale = scale;\n if (defined(options.value)) {\n options.value = math.min(math.max(options.value, scaleOptions.min), scaleOptions.max);\n } else {\n options.value = scaleOptions.min;\n }\n },\n options: { color: BLACK },\n value: function (newValue) {\n var that = this;\n var options = that.options;\n var value = options.value;\n var scaleOptions = that.scale.options;\n if (arguments.length === 0) {\n return value;\n }\n options._oldValue = options._oldValue !== undefined ? options.value : scaleOptions.min;\n options.value = math.min(math.max(newValue, scaleOptions.min), scaleOptions.max);\n if (that.elements) {\n that.repaint();\n }\n }\n });\n var RadialPointer = Pointer.extend({\n options: {\n shape: NEEDLE,\n cap: { size: CAP_SIZE },\n arrow: {\n width: 16,\n height: 14\n },\n animation: {\n type: RADIAL_POINTER,\n duration: ANGULAR_SPEED\n }\n },\n setRadius: function (radius) {\n var that = this;\n if (radius) {\n that.elements.clear();\n that.render(that.parent, that.center, radius);\n }\n },\n setAngle: function (angle) {\n this.elements.transform(geo.transform().rotate(angle, this.center));\n },\n repaint: function () {\n var that = this;\n var scale = that.scale;\n var options = that.options;\n var oldAngle = scale.slotAngle(options._oldValue);\n var newAngle = scale.slotAngle(options.value);\n if (options.animation.transitions === false) {\n that.setAngle(newAngle);\n } else {\n new RadialPointerAnimation(that.elements, deepExtend(options.animation, {\n oldAngle: oldAngle,\n newAngle: newAngle\n })).play();\n }\n },\n render: function () {\n var that = this;\n var scale = that.scale;\n var center = scale.arc.center;\n var options = that.options;\n var elements = new Group();\n if (options.animation !== false) {\n deepExtend(options.animation, {\n startAngle: 0,\n center: center,\n reverse: scale.options.reverse\n });\n }\n if (options.shape === NEEDLE) {\n elements.append(that._renderNeedle(), that._renderCap());\n } else {\n elements.append(that._renderArrow());\n }\n that.elements = elements;\n that.setAngle(DEGREE);\n return elements;\n },\n reflow: function (arc) {\n var that = this;\n var center = that.center = arc.center;\n var radius = that.radius = arc.getRadiusX();\n var capSize = that.capSize = Math.round(radius * that.options.cap.size);\n that.bbox = Rect.fromPoints(new Point(center.x - capSize, center.y - capSize), new Point(center.x + capSize, center.y + capSize));\n },\n _renderNeedle: function () {\n var that = this;\n var options = that.options;\n var minorTickSize = that.scale.options.minorTicks.size;\n var center = that.center;\n var needleColor = options.color;\n var needlePath = new Path({\n fill: { color: needleColor },\n stroke: {\n color: needleColor,\n width: DEFAULT_LINE_WIDTH\n }\n });\n needlePath.moveTo(center.x + that.radius - minorTickSize, center.y).lineTo(center.x, center.y - that.capSize / 2).lineTo(center.x, center.y + that.capSize / 2).close();\n return needlePath;\n },\n _renderCap: function () {\n var that = this;\n var options = that.options;\n var capColor = options.cap.color || options.color;\n var circle = new geo.Circle(that.center, that.capSize);\n var cap = new draw.Circle(circle, {\n fill: { color: capColor },\n stroke: { color: capColor }\n });\n return cap;\n }\n });\n var RadialScale = NumericAxis.extend({\n init: function (options) {\n var scale = this;\n scale.options = deepExtend({}, scale.options, options);\n scale.options.majorUnit = scale.options.majorUnit || autoMajorUnit(scale.options.min, scale.options.max);\n scale.options.minorUnit = scale.options.minorUnit || scale.options.majorUnit / 10;\n Axis.fn.init.call(scale, scale.options);\n },\n options: {\n min: 0,\n max: 100,\n majorTicks: {\n size: 15,\n align: INSIDE,\n color: BLACK,\n width: DEFAULT_LINE_WIDTH,\n visible: true\n },\n minorTicks: {\n size: 10,\n align: INSIDE,\n color: BLACK,\n width: DEFAULT_LINE_WIDTH,\n visible: true\n },\n startAngle: -30,\n endAngle: 210,\n labels: {\n position: INSIDE,\n padding: 2\n }\n },\n render: function (center, radius) {\n var that = this;\n var arc = that.renderArc(center, radius);\n that.bbox = arc.bbox();\n that.labelElements = that.renderLabels();\n that.ticks = that.renderTicks();\n that.ranges = that.renderRanges();\n },\n reflow: function (bbox) {\n var that = this;\n var center = bbox.center();\n var radius = math.min(bbox.height(), bbox.width()) / 2;\n if (that.bbox !== undefined) {\n that.bbox = that.arc.bbox();\n that.radius(that.arc.getRadiusX());\n that.repositionRanges();\n that.renderLabels();\n } else {\n return that.render(center, radius);\n }\n },\n slotAngle: function (value) {\n var options = this.options;\n var startAngle = options.startAngle;\n var reverse = options.reverse;\n var angle = options.endAngle - startAngle;\n var min = options.min;\n var max = options.max;\n var result;\n if (reverse) {\n result = options.endAngle - (value - min) / (max - min) * angle;\n } else {\n result = (value - min) / (max - min) * angle + startAngle;\n }\n return result + GEO_ARC_ADJUST_ANGLE;\n },\n renderLabels: function () {\n var that = this;\n var options = that.options;\n var majorTickSize = options.majorTicks.size;\n var arc = that.arc.clone();\n var radius = arc.getRadiusX();\n var tickAngles = that.tickAngles(arc, options.majorUnit);\n var labels = that.labels;\n var count = labels.length;\n var labelsOptions = options.labels;\n var padding = labelsOptions.padding;\n var rangeDistance = radius * 0.05;\n var rangeSize = options.rangeSize = options.rangeSize || radius * 0.1;\n var ranges = options.ranges || [];\n var halfWidth, halfHeight, labelAngle;\n var angle, label, lp, i, cx, cy, isInside;\n var labelsGroup = new Group();\n var lbl, labelPos, prevLabelPos, labelTransform;\n if (that.options.rangeDistance !== undefined) {\n rangeDistance = that.options.rangeDistance;\n } else {\n that.options.rangeDistance = rangeDistance;\n }\n if (labelsOptions.position === INSIDE) {\n radius -= majorTickSize;\n if (ranges.length && that.labelElements === undefined) {\n radius -= rangeSize + rangeDistance;\n }\n arc.setRadiusX(radius).setRadiusY(radius);\n }\n for (i = 0; i < count; i++) {\n label = labels[i];\n halfWidth = label.box.width() / 2;\n halfHeight = label.box.height() / 2;\n angle = tickAngles[i];\n labelAngle = (angle - GEO_ARC_ADJUST_ANGLE) * DEGREE;\n isInside = labelsOptions.position === INSIDE;\n lp = arc.pointAt(angle);\n cx = lp.x + math.cos(labelAngle) * (halfWidth + padding) * (isInside ? 1 : -1);\n cy = lp.y + math.sin(labelAngle) * (halfHeight + padding) * (isInside ? 1 : -1);\n label.reflow(new dataviz.Box2D(cx - halfWidth, cy - halfHeight, cx + halfWidth, cy + halfHeight));\n labelPos = new Point(label.box.x1, label.box.y1);\n if (that.labelElements === undefined) {\n lbl = _buildLabel(label, options.labels);\n labelsGroup.append(lbl);\n } else {\n lbl = that.labelElements.children[i];\n prevLabelPos = lbl.bbox().origin;\n labelTransform = lbl.transform() || geo.transform();\n labelTransform.translate(labelPos.x - prevLabelPos.x, labelPos.y - prevLabelPos.y);\n lbl.transform(labelTransform);\n }\n that.bbox = Rect.union(that.bbox, lbl.bbox());\n }\n return labelsGroup;\n },\n repositionRanges: function () {\n var that = this;\n var ranges = that.ranges.children;\n var rangeSize = that.options.rangeSize;\n var rangeDistance = that.options.rangeDistance;\n var rangeRadius, newRadius;\n if (ranges.length > 0) {\n rangeRadius = that.getRangeRadius();\n if (that.options.labels.position === INSIDE) {\n rangeRadius += rangeSize + rangeDistance;\n }\n newRadius = rangeRadius + rangeSize / 2;\n for (var i = 0; i < ranges.length; i++) {\n ranges[i]._geometry.setRadiusX(newRadius).setRadiusY(newRadius);\n }\n that.bbox = Rect.union(that.bbox, that.ranges.bbox());\n }\n },\n renderRanges: function () {\n var that = this;\n var arc = that.arc;\n var result = new Group();\n var from, to;\n var segments = that.rangeSegments();\n var segmentsCount = segments.length;\n var reverse = that.options.reverse;\n var rangeSize = that.options.rangeSize;\n var rangeDistance = that.options.rangeDistance;\n var segment, rangeRadius, rangeGeom, i;\n if (segmentsCount) {\n rangeRadius = that.getRangeRadius();\n that.radius(that.radius() - rangeSize - rangeDistance);\n for (i = 0; i < segmentsCount; i++) {\n segment = segments[i];\n from = that.slotAngle(segment[reverse ? 'to' : 'from']);\n to = that.slotAngle(segment[!reverse ? 'to' : 'from']);\n if (to - from !== 0) {\n rangeGeom = new geo.Arc(arc.center, {\n radiusX: rangeRadius + rangeSize / 2,\n radiusY: rangeRadius + rangeSize / 2,\n startAngle: from,\n endAngle: to\n });\n result.append(new draw.Arc(rangeGeom, {\n stroke: {\n width: rangeSize,\n color: segment.color,\n opacity: segment.opacity\n }\n }));\n }\n }\n }\n return result;\n },\n rangeSegments: function () {\n var gauge = this;\n var options = gauge.options;\n var ranges = options.ranges || [];\n var count = ranges.length;\n var range;\n var segmentsCount;\n var defaultColor = options.rangePlaceholderColor;\n var segments = [];\n var segment;\n var min = options.min;\n var max = options.max;\n var i, j;\n function rangeSegment(from, to, color, opacity) {\n return {\n from: from,\n to: to,\n color: color,\n opacity: opacity\n };\n }\n if (count) {\n segments.push(rangeSegment(min, max, defaultColor));\n for (i = 0; i < count; i++) {\n range = getRange(ranges[i], min, max);\n segmentsCount = segments.length;\n for (j = 0; j < segmentsCount; j++) {\n segment = segments[j];\n if (segment.from <= range.from && range.from <= segment.to) {\n segments.push(rangeSegment(range.from, range.to, range.color, range.opacity));\n if (segment.from <= range.to && range.to <= segment.to) {\n segments.push(rangeSegment(range.to, segment.to, defaultColor, range.opacity));\n }\n segment.to = range.from;\n break;\n }\n }\n }\n }\n return segments;\n },\n getRangeRadius: function () {\n var that = this;\n var options = that.options;\n var majorTickSize = options.majorTicks.size;\n var rangeSize = options.rangeSize;\n var rangeDistance = options.rangeDistance;\n var arc = that.arc;\n var r;\n if (options.labels.position === OUTSIDE) {\n r = arc.getRadiusX() - majorTickSize - rangeDistance - rangeSize;\n } else {\n r = arc.getRadiusX() - rangeSize;\n }\n return r;\n },\n renderArc: function (center, radius) {\n var that = this;\n var options = that.options;\n var arc = that.arc = new geo.Arc(center, {\n radiusX: radius,\n radiusY: radius,\n startAngle: options.startAngle + GEO_ARC_ADJUST_ANGLE,\n endAngle: options.endAngle + GEO_ARC_ADJUST_ANGLE\n });\n return arc;\n },\n renderTicks: function () {\n var that = this;\n var arc = that.arc;\n var options = that.options;\n var labelsPosition = options.labels.position;\n var allTicks = new Group();\n var majorTickSize = options.majorTicks.size;\n var minorTickSize = options.minorTicks.size;\n var tickArc = arc.clone();\n var radius = tickArc.getRadiusX();\n function drawTicks(arc, tickAngles, unit, tickOptions) {\n var ticks = new Group(), center = arc.center, radius = arc.getRadiusX(), i, tickStart, tickEnd, visible = tickOptions.visible;\n if (visible) {\n for (i = 0; i < tickAngles.length; i++) {\n tickStart = arc.pointAt(tickAngles[i]);\n tickEnd = new Point(center.x + radius - tickOptions.size, center.y).rotate(tickAngles[i], center);\n ticks.append(new Path({\n stroke: {\n color: tickOptions.color,\n width: tickOptions.width\n }\n }).moveTo(tickStart).lineTo(tickEnd));\n }\n }\n return ticks;\n }\n that.majorTickAngles = that.tickAngles(arc, options.majorUnit);\n that.majorTicks = drawTicks(tickArc, that.majorTickAngles, options.majorUnit, options.majorTicks);\n allTicks.append(that.majorTicks);\n that._tickDifference = majorTickSize - minorTickSize;\n if (labelsPosition === OUTSIDE) {\n tickArc.setRadiusX(radius - majorTickSize + minorTickSize).setRadiusY(radius - majorTickSize + minorTickSize);\n }\n that.minorTickAngles = that.normalizeTickAngles(that.tickAngles(arc, options.minorUnit));\n that.minorTicks = drawTicks(tickArc, that.minorTickAngles, options.minorUnit, options.minorTicks, options.majorUnit);\n allTicks.append(that.minorTicks);\n return allTicks;\n },\n normalizeTickAngles: function (angles) {\n var that = this;\n var options = that.options;\n var skip = options.majorUnit / options.minorUnit;\n for (var i = angles.length - 1; i >= 0; i--) {\n if (i % skip === 0) {\n angles.splice(i, 1);\n }\n }\n return angles;\n },\n tickAngles: function (ring, stepValue) {\n var scale = this;\n var options = scale.options;\n var reverse = options.reverse;\n var range = options.max - options.min;\n var angle = ring.endAngle - ring.startAngle;\n var pos = ring.startAngle;\n var tickCount = range / stepValue;\n var step = angle / tickCount;\n var positions = [];\n var i;\n if (reverse) {\n pos += angle;\n step = -step;\n }\n for (i = 0; i < tickCount; i++) {\n positions.push(round(pos, COORD_PRECISION));\n pos += step;\n }\n if (round(pos) <= ring.endAngle) {\n positions.push(pos);\n }\n return positions;\n },\n radius: function (radius) {\n var that = this;\n if (radius) {\n that.arc.setRadiusX(radius).setRadiusY(radius);\n that.repositionTicks(that.majorTicks.children, that.majorTickAngles);\n that.repositionTicks(that.minorTicks.children, that.minorTickAngles, true);\n } else {\n return that.arc.getRadiusX();\n }\n },\n repositionTicks: function (ticks, tickAngles, minor) {\n var that = this;\n var diff = minor ? that._tickDifference || 0 : 0;\n var tickArc = that.arc;\n var radius = tickArc.getRadiusX();\n if (minor && that.options.labels.position === OUTSIDE && diff !== 0) {\n tickArc = that.arc.clone();\n tickArc.setRadiusX(radius - diff).setRadiusY(radius - diff);\n }\n for (var i = 0; i < ticks.length; i++) {\n var newPoint = tickArc.pointAt(tickAngles[i]);\n var segments = ticks[i].segments;\n var xDiff = newPoint.x - segments[0].anchor().x;\n var yDiff = newPoint.y - segments[0].anchor().y;\n ticks[i].transform(new geo.Transformation().translate(xDiff, yDiff));\n }\n }\n });\n var Gauge = Widget.extend({\n init: function (element, userOptions) {\n var gauge = this;\n var options;\n var themeOptions;\n var themeName;\n var themes = dataviz.ui.themes || {};\n var theme;\n kendo.destroy(element);\n $(element).empty();\n Widget.fn.init.call(gauge, element);\n gauge.wrapper = gauge.element;\n gauge._originalOptions = deepExtend({}, userOptions);\n options = deepExtend({}, gauge.options, userOptions);\n themeName = options.theme;\n theme = themes[themeName] || themes[themeName.toLowerCase()];\n themeOptions = themeName && theme ? theme.gauge : {};\n gauge.options = deepExtend({}, themeOptions, options);\n if ($.isArray(options.pointer)) {\n for (var i = 0; i < options.pointer.length; i++) {\n gauge.options.pointer[i] = deepExtend({}, themeOptions.pointer, options.pointer[i]);\n }\n }\n gauge.element.addClass('k-gauge');\n gauge.surface = gauge._createSurface();\n gauge.redraw();\n },\n options: {\n plotArea: {},\n theme: 'default',\n renderAs: '',\n pointer: {},\n scale: {},\n gaugeArea: {}\n },\n destroy: function () {\n this.surface.destroy();\n Widget.fn.destroy.call(this);\n },\n value: function (value) {\n var that = this;\n var pointer = that.pointers[0];\n if (arguments.length === 0) {\n return pointer.value();\n }\n pointer.value(value);\n that._setValueOptions(value);\n },\n _draw: function () {\n var surface = this.surface;\n surface.clear();\n surface.draw(this._visuals);\n },\n exportVisual: function () {\n return this._visuals;\n },\n allValues: function (values) {\n var that = this;\n var pointers = that.pointers;\n var allValues = [];\n var i;\n if (arguments.length === 0) {\n for (i = 0; i < pointers.length; i++) {\n allValues.push(pointers[i].value());\n }\n return allValues;\n }\n if ($.isArray(values)) {\n for (i = 0; i < values.length; i++) {\n if (isNumber(values[i])) {\n pointers[i].value(values[i]);\n }\n }\n }\n that._setValueOptions(values);\n },\n _setValueOptions: function (values) {\n var pointers = [].concat(this.options.pointer);\n values = [].concat(values);\n for (var i = 0; i < values.length; i++) {\n pointers[i].value = values[i];\n }\n },\n _resize: function () {\n var that = this;\n var t = that.options.transitions;\n var i;\n that.options.transitions = false;\n for (i = 0; i < that.pointers.length; i++) {\n that.pointers[i].options.animation.transitions = false;\n }\n that.redraw();\n that.options.transitions = t;\n for (i = 0; i < that.pointers.length; i++) {\n that.pointers[i].options.animation.transitions = t;\n }\n },\n redraw: function () {\n var that = this;\n var size = deepExtend(that._getSize(), that.options.gaugeArea);\n var wrapper = new Rect([\n 0,\n 0\n ], [\n size.width,\n size.height\n ]);\n var bbox;\n that.surface.clear();\n that.gaugeArea = that._createGaugeArea();\n that.surface.element.css({\n width: size.width,\n height: size.height\n });\n that._createModel();\n bbox = _unpad(wrapper.bbox(), that._gaugeAreaMargin);\n that.reflow(bbox);\n },\n _createGaugeArea: function () {\n var that = this;\n var options = that.options.gaugeArea;\n var size = that.surface.size();\n var border = options.border || {};\n var areaGeometry = new Rect([\n 0,\n 0\n ], [\n size.width,\n size.height\n ]);\n that._gaugeAreaMargin = options.margin || DEFAULT_MARGIN;\n if (border.width > 0) {\n areaGeometry = _unpad(areaGeometry, border.width);\n }\n var gaugeArea = Path.fromRect(areaGeometry, {\n stroke: {\n color: border.width ? border.color : '',\n width: border.width,\n dashType: border.dashType,\n lineJoin: 'round',\n lineCap: 'round'\n },\n fill: { color: options.background }\n });\n return gaugeArea;\n },\n _createSurface: function () {\n var that = this;\n var options = that.options;\n var size = that._getSize();\n size = options.gaugeArea ? deepExtend(size, options.gaugeArea) : size;\n var wrap = $('
    ').appendTo(that.element).css({\n width: size.width,\n height: size.height\n });\n return new draw.Surface.create(wrap, { type: options.renderAs });\n },\n getSize: function () {\n return this._getSize();\n },\n _getSize: function () {\n var that = this;\n var element = that.element;\n var width = element.width();\n var height = element.height();\n if (!width) {\n width = DEFAULT_WIDTH;\n }\n if (!height) {\n height = DEFAULT_HEIGHT;\n }\n return {\n width: width,\n height: height\n };\n }\n });\n var RadialGauge = Gauge.extend({\n init: function (element, options) {\n var radialGauge = this;\n Gauge.fn.init.call(radialGauge, element, options);\n kendo.notify(radialGauge, dataviz.ui);\n },\n options: {\n name: 'RadialGauge',\n transitions: true,\n gaugeArea: { background: '' }\n },\n reflow: function (bbox) {\n var that = this;\n var pointers = that.pointers;\n that.scale.reflow(bbox);\n that._initialPlotArea = that.scale.bbox;\n for (var i = 0; i < pointers.length; i++) {\n pointers[i].reflow(that.scale.arc);\n that._initialPlotArea = Rect.union(that._initialPlotArea, pointers[i].bbox);\n }\n that.fitScale(bbox);\n that.alignScale(bbox);\n that._buildVisual(that.gaugeArea, pointers, that.scale);\n that._draw();\n },\n _buildVisual: function (gaugeArea, pointers, scale) {\n var visuals = new Group();\n var current;\n visuals.append(gaugeArea);\n visuals.append(scale.ticks);\n visuals.append(scale.ranges);\n for (var i = 0; i < pointers.length; i++) {\n current = pointers[i];\n current.render();\n visuals.append(current.elements);\n current.value(current.options.value);\n }\n visuals.append(scale.labelElements);\n this._visuals = visuals;\n },\n fitScale: function (bbox) {\n var that = this;\n var scale = that.scale;\n var arc = scale.arc;\n var plotAreaBox = that._initialPlotArea;\n var step = math.abs(that.getDiff(plotAreaBox, bbox));\n var min = round(step, COORD_PRECISION);\n var max = round(-step, COORD_PRECISION);\n var minDiff, midDiff, maxDiff, mid, oldDiff;\n var staleFlag = 0;\n var i = 0;\n while (i++ < 100) {\n staleFlag = oldDiff === maxDiff ? staleFlag + 1 : 0;\n if (staleFlag > 5) {\n break;\n }\n if (min != mid) {\n minDiff = that.getPlotBox(min, bbox, arc);\n if (0 <= minDiff && minDiff <= 2) {\n break;\n }\n }\n if (max != mid) {\n maxDiff = that.getPlotBox(max, bbox, arc);\n if (0 <= maxDiff && maxDiff <= 2) {\n break;\n }\n }\n if (minDiff > 0 && maxDiff > 0) {\n mid = min * 2;\n } else if (minDiff < 0 && maxDiff < 0) {\n mid = max * 2;\n } else {\n mid = round((min + max) / 2 || 1, COORD_PRECISION);\n }\n midDiff = that.getPlotBox(mid, bbox, arc);\n if (0 <= midDiff && midDiff <= 2) {\n break;\n }\n oldDiff = maxDiff;\n if (midDiff > 0) {\n max = mid;\n maxDiff = midDiff;\n } else {\n min = mid;\n minDiff = midDiff;\n }\n }\n },\n getPlotBox: function (step, bbox, arc) {\n var that = this;\n var scale = that.scale;\n var pointers = that.pointers;\n var radius = arc.getRadiusX();\n arc = arc.clone();\n arc.setRadiusX(radius + step).setRadiusY(radius + step);\n scale.arc = arc;\n scale.reflow(bbox);\n that.plotBbox = scale.bbox;\n for (var i = 0; i < pointers.length; i++) {\n pointers[i].reflow(arc);\n that.plotBbox = Rect.union(that.plotBbox, pointers[i].bbox);\n }\n return that.getDiff(that.plotBbox, bbox);\n },\n getDiff: function (plotBox, box) {\n return math.min(box.width() - plotBox.width(), box.height() - plotBox.height());\n },\n alignScale: function (bbox) {\n var that = this;\n var plotBoxCenter = that.plotBbox.center();\n var boxCenter = bbox.center();\n var paddingX = plotBoxCenter.x - boxCenter.x;\n var paddingY = plotBoxCenter.y - boxCenter.y;\n var scale = that.scale;\n var pointers = that.pointers;\n scale.arc.center.x -= paddingX;\n scale.arc.center.y -= paddingY;\n scale.reflow(bbox);\n for (var i = 0; i < pointers.length; i++) {\n pointers[i].reflow(scale.arc);\n that.plotBbox = Rect.union(scale.bbox, pointers[i].bbox);\n }\n },\n _createModel: function () {\n var that = this;\n var options = that.options;\n var pointers = options.pointer;\n var scale = that.scale = new RadialScale(options.scale);\n var current;\n that.pointers = [];\n pointers = $.isArray(pointers) ? pointers : [pointers];\n for (var i = 0; i < pointers.length; i++) {\n current = new RadialPointer(scale, deepExtend({}, pointers[i], { animation: { transitions: options.transitions } }));\n that.pointers.push(current);\n }\n }\n });\n var LinearGauge = Gauge.extend({\n init: function (element, options) {\n var linearGauge = this;\n Gauge.fn.init.call(linearGauge, element, options);\n kendo.notify(linearGauge, dataviz.ui);\n },\n options: {\n name: 'LinearGauge',\n transitions: true,\n gaugeArea: { background: '' },\n scale: { vertical: true }\n },\n reflow: function (bbox) {\n var that = this;\n var pointers = that.pointers;\n var bboxX = bbox.origin.x;\n var bboxY = bbox.origin.y;\n var bbox2D = new dataviz.Box2D(bboxX, bboxY, bboxX + bbox.width(), bboxY + bbox.height());\n that.scale.reflow(bbox2D);\n for (var i = 0; i < pointers.length; i++) {\n pointers[i].reflow();\n }\n that.bbox = that._getBox(bbox2D);\n that._alignElements();\n that._shrinkElements();\n that._buildVisual();\n that._draw();\n },\n _buildVisual: function () {\n var that = this;\n var visuals = new Group();\n var scaleElements = that.scale.render();\n var pointers = that.pointers;\n var current;\n visuals.append(that.gaugeArea);\n visuals.append(scaleElements);\n for (var i = 0; i < pointers.length; i++) {\n current = pointers[i];\n visuals.append(current.render());\n current.value(current.options.value);\n }\n that._visuals = visuals;\n },\n _createModel: function () {\n var that = this;\n var options = that.options;\n var pointers = options.pointer;\n var scale = that.scale = new LinearScale(options.scale);\n var current, currentOptions;\n that.pointers = [];\n pointers = $.isArray(pointers) ? pointers : [pointers];\n for (var i = 0; i < pointers.length; i++) {\n currentOptions = deepExtend({}, pointers[i], { animation: { transitions: options.transitions } });\n if (currentOptions.shape === ARROW) {\n current = new ArrowLinearPointer(scale, currentOptions);\n } else {\n current = new BarLinearPointer(scale, currentOptions);\n }\n that.pointers.push(current);\n }\n },\n _getSize: function () {\n var gauge = this;\n var element = gauge.element;\n var width = element.width();\n var height = element.height();\n var vertical = gauge.options.scale.vertical;\n if (!width) {\n width = vertical ? DEFAULT_MIN_WIDTH : DEFAULT_WIDTH;\n }\n if (!height) {\n height = vertical ? DEFAULT_HEIGHT : DEFAULT_MIN_HEIGHT;\n }\n return {\n width: width,\n height: height\n };\n },\n _getBox: function (box) {\n var that = this;\n var scale = that.scale;\n var pointers = that.pointers;\n var boxCenter = box.center();\n var plotAreaBox = pointers[0].box.clone().wrap(scale.box);\n var size;\n for (var i = 0; i < pointers.length; i++) {\n plotAreaBox.wrap(pointers[i].box.clone());\n }\n if (scale.options.vertical) {\n size = plotAreaBox.width() / 2;\n plotAreaBox = new Box2D(boxCenter.x - size, box.y1, boxCenter.x + size, box.y2);\n } else {\n size = plotAreaBox.height() / 2;\n plotAreaBox = new Box2D(box.x1, boxCenter.y - size, box.x2, boxCenter.y + size);\n }\n return plotAreaBox;\n },\n _alignElements: function () {\n var that = this;\n var scale = that.scale;\n var pointers = that.pointers;\n var scaleBox = scale.box;\n var box = pointers[0].box.clone().wrap(scale.box);\n var plotAreaBox = that.bbox;\n var diff, i;\n for (i = 0; i < pointers.length; i++) {\n box.wrap(pointers[i].box.clone());\n }\n if (scale.options.vertical) {\n diff = plotAreaBox.center().x - box.center().x;\n scale.reflow(new Box2D(scaleBox.x1 + diff, plotAreaBox.y1, scaleBox.x2 + diff, plotAreaBox.y2));\n } else {\n diff = plotAreaBox.center().y - box.center().y;\n scale.reflow(new Box2D(plotAreaBox.x1, scaleBox.y1 + diff, plotAreaBox.x2, scaleBox.y2 + diff));\n }\n for (i = 0; i < pointers.length; i++) {\n pointers[i].reflow(that.bbox);\n }\n },\n _shrinkElements: function () {\n var that = this;\n var scale = that.scale;\n var pointers = that.pointers;\n var scaleBox = scale.box.clone();\n var pos = scale.options.vertical ? 'y' : 'x';\n var pointerBox = pointers[0].box;\n var i;\n for (i = 0; i < pointers.length; i++) {\n pointerBox.wrap(pointers[i].box.clone());\n }\n scaleBox[pos + 1] += math.max(scaleBox[pos + 1] - pointerBox[pos + 1], 0);\n scaleBox[pos + 2] -= math.max(pointerBox[pos + 2] - scaleBox[pos + 2], 0);\n scale.reflow(scaleBox);\n for (i = 0; i < pointers.length; i++) {\n pointers[i].reflow(that.bbox);\n }\n }\n });\n var LinearScale = NumericAxis.extend({\n init: function (options) {\n var scale = this;\n scale.options = deepExtend({}, scale.options, options);\n scale.options = deepExtend({}, scale.options, { labels: { mirror: scale.options.mirror } });\n scale.options.majorUnit = scale.options.majorUnit || autoMajorUnit(scale.options.min, scale.options.max);\n Axis.fn.init.call(scale, scale.options);\n scale.options.minorUnit = scale.options.minorUnit || scale.options.majorUnit / 10;\n },\n options: {\n min: 0,\n max: 50,\n majorTicks: {\n size: 15,\n align: INSIDE,\n color: BLACK,\n width: DEFAULT_LINE_WIDTH,\n visible: true\n },\n minorTicks: {\n size: 10,\n align: INSIDE,\n color: BLACK,\n width: DEFAULT_LINE_WIDTH,\n visible: true\n },\n line: { width: DEFAULT_LINE_WIDTH },\n labels: {\n position: INSIDE,\n padding: 2\n },\n mirror: false,\n _alignLines: false\n },\n render: function () {\n var that = this;\n var elements = that.elements = new Group();\n var labels = that.renderLabels();\n var scaleLine = that.renderLine();\n var scaleTicks = that.renderTicks();\n var ranges = that.renderRanges();\n elements.append(scaleLine, labels, scaleTicks, ranges);\n return elements;\n },\n renderRanges: function () {\n var that = this;\n var options = that.options;\n var min = options.min;\n var max = options.max;\n var ranges = options.ranges || [];\n var vertical = options.vertical;\n var mirror = options.labels.mirror;\n var elements = new Group();\n var count = ranges.length;\n var rangeSize = options.rangeSize || options.minorTicks.size / 2;\n var range, slot, slotX, slotY, i;\n if (count) {\n for (i = 0; i < count; i++) {\n range = getRange(ranges[i], min, max);\n slot = that.getSlot(range.from, range.to);\n slotX = vertical ? that.lineBox() : slot;\n slotY = vertical ? slot : that.lineBox();\n if (vertical) {\n slotX.x1 -= rangeSize * (mirror ? -1 : 1);\n } else {\n slotY.y2 += rangeSize * (mirror ? -1 : 1);\n }\n elements.append(Path.fromRect(new Rect([\n slotX.x1,\n slotY.y1\n ], [\n slotX.x2 - slotX.x1,\n slotY.y2 - slotY.y1\n ]), {\n fill: {\n color: range.color,\n opacity: range.opacity\n },\n stroke: {}\n }));\n }\n }\n return elements;\n },\n renderLabels: function () {\n var that = this;\n var options = that.options;\n var labels = that.labels;\n var elements = new Group();\n for (var i = 0; i < labels.length; i++) {\n elements.append(_buildLabel(labels[i], options.labels));\n }\n return elements;\n },\n renderLine: function () {\n var that = this;\n var options = that.options;\n var line = options.line;\n var lineBox = that.lineBox();\n var linePath;\n var elements = new Group();\n if (line.width > 0 && line.visible) {\n linePath = new Path({\n stroke: {\n color: line.color,\n dashType: line.dashType,\n width: line.width\n }\n });\n linePath.moveTo(lineBox.x1, lineBox.y1).lineTo(lineBox.x2, lineBox.y2);\n elements.append(linePath);\n }\n return elements;\n },\n renderTicks: function () {\n var that = this;\n var ticks = new Group();\n var options = that.options;\n var lineBox = that.lineBox();\n var mirror = options.labels.mirror;\n var majorUnit = options.majorTicks.visible ? options.majorUnit : 0;\n var tickLineOptions = {\n _alignLines: options._alignLines,\n vertical: options.vertical\n };\n function render(tickPositions, tickOptions) {\n var i, count = tickPositions.length;\n if (tickOptions.visible) {\n for (i = tickOptions.skip; i < count; i += tickOptions.step) {\n if (i % tickOptions.skipUnit === 0) {\n continue;\n }\n tickLineOptions.tickX = mirror ? lineBox.x2 : lineBox.x2 - tickOptions.size;\n tickLineOptions.tickY = mirror ? lineBox.y1 - tickOptions.size : lineBox.y1;\n tickLineOptions.position = tickPositions[i];\n ticks.append(that.renderAxisTick(tickLineOptions, tickOptions));\n }\n }\n }\n render(that.getMajorTickPositions(), options.majorTicks);\n render(that.getMinorTickPositions(), deepExtend({}, { skipUnit: majorUnit / options.minorUnit }, options.minorTicks));\n return ticks;\n },\n renderAxisTick: function (options, tickOptions) {\n var tickX = options.tickX;\n var tickY = options.tickY;\n var position = options.position;\n var start, end, tickPath;\n if (options.vertical) {\n start = new Point(tickX, position);\n end = new Point(tickX + tickOptions.size, position);\n } else {\n start = new Point(position, tickY);\n end = new Point(position, tickY + tickOptions.size);\n }\n tickPath = new Path({\n stroke: {\n color: tickOptions.color,\n width: tickOptions.width\n }\n }).moveTo(start).lineTo(end);\n return tickPath;\n }\n });\n var LinearPointer = Pointer.extend({\n init: function (scale, options) {\n var pointer = this;\n Pointer.fn.init.call(pointer, scale, options);\n pointer.options = deepExtend({ track: { visible: defined(options.track) } }, pointer.options);\n },\n options: {\n shape: BAR_POINTER,\n track: { border: { width: 1 } },\n color: BLACK,\n border: { width: 1 },\n opacity: 1,\n margin: getSpacing(3),\n animation: { type: BAR_POINTER },\n visible: true\n },\n reflow: function () {\n var pointer = this;\n var options = pointer.options;\n var scale = pointer.scale;\n var scaleLine = scale.lineBox();\n var trackSize = options.track.size || options.size;\n var pointerHalfSize = options.size / 2;\n var mirror = scale.options.mirror;\n var margin = getSpacing(options.margin);\n var vertical = scale.options.vertical;\n var space = vertical ? margin[mirror ? 'left' : 'right'] : margin[mirror ? 'bottom' : 'top'];\n var pointerBox, pointerRangeBox, trackBox;\n space = mirror ? -space : space;\n if (vertical) {\n trackBox = new Box2D(scaleLine.x1 + space, scaleLine.y1, scaleLine.x1 + space, scaleLine.y2);\n if (mirror) {\n trackBox.x1 -= trackSize;\n } else {\n trackBox.x2 += trackSize;\n }\n if (options.shape !== BAR_POINTER) {\n pointerRangeBox = new Box2D(scaleLine.x2 + space, scaleLine.y1 - pointerHalfSize, scaleLine.x2 + space, scaleLine.y2 + pointerHalfSize);\n pointerBox = pointerRangeBox;\n }\n } else {\n trackBox = new Box2D(scaleLine.x1, scaleLine.y1 - space, scaleLine.x2, scaleLine.y1 - space);\n if (mirror) {\n trackBox.y2 += trackSize;\n } else {\n trackBox.y1 -= trackSize;\n }\n if (options.shape !== BAR_POINTER) {\n pointerRangeBox = new Box2D(scaleLine.x1 - pointerHalfSize, scaleLine.y1 - space, scaleLine.x2 + pointerHalfSize, scaleLine.y1 - space);\n pointerBox = pointerRangeBox;\n }\n }\n pointer.trackBox = trackBox;\n pointer.pointerRangeBox = pointerRangeBox;\n pointer.box = pointerBox || trackBox.clone().pad(options.border.width);\n },\n getElementOptions: function () {\n var options = this.options;\n return {\n fill: {\n color: options.color,\n opacity: options.opacity\n },\n stroke: defined(options.border) ? {\n color: options.border.width ? options.border.color || options.color : '',\n width: options.border.width,\n dashType: options.border.dashType,\n opacity: options.opacity\n } : null\n };\n },\n _margin: function () {\n var pointer = this;\n var options = pointer.options;\n var scale = pointer.scale;\n var mirror = scale.options.mirror;\n var margin = getSpacing(options.margin);\n var vertical = scale.options.vertical;\n var space = vertical ? margin[mirror ? 'left' : 'right'] : margin[mirror ? 'bottom' : 'top'];\n return space;\n }\n });\n var ArrowLinearPointer = LinearPointer.extend({\n init: function (scale, options) {\n LinearPointer.fn.init.call(this, scale, options);\n if (this.options.size === undefined) {\n this.options.size = this.scale.options.majorTicks.size * 0.6;\n }\n },\n pointerShape: function () {\n var that = this;\n var options = that.options;\n var scale = that.scale;\n var size = options.size;\n var vertical = scale.options.vertical;\n var halfSize = size / 2;\n var sign = scale.options.mirror ? -1 : 1;\n var reverse = scale.options.reverse;\n var pos, shape;\n if (vertical) {\n pos = reverse ? 'y2' : 'y1';\n shape = [\n new Point(0, 0 - halfSize),\n new Point(0 - sign * size, 0),\n new Point(0, 0 + halfSize)\n ];\n } else {\n pos = reverse ? 'x1' : 'x2';\n shape = [\n new Point(0 - halfSize, 0),\n new Point(0, 0 + sign * size),\n new Point(0 + halfSize, 0)\n ];\n }\n return shape;\n },\n repaint: function () {\n var that = this;\n var scale = that.scale;\n var options = that.options;\n var animation = new ArrowLinearPointerAnimation(that.elements, deepExtend(options.animation, {\n vertical: scale.options.vertical,\n mirror: scale.options.mirror,\n margin: that._margin(options.margin),\n from: scale.getSlot(options._oldValue),\n to: scale.getSlot(options.value)\n }));\n if (options.animation.transitions === false) {\n animation.options.duration = 0;\n }\n animation.setup();\n animation.play();\n },\n render: function () {\n var that = this;\n var options = that.options;\n var elements = new Group();\n var scale = that.scale;\n var elementOptions = that.getElementOptions();\n var shape = that.pointerShape(options.value);\n options.animation.type = ARROW_POINTER;\n elements = new Path({\n stroke: elementOptions.stroke,\n fill: elementOptions.fill\n }).moveTo(shape[0]).lineTo(shape[1]).lineTo(shape[2]).close();\n var slot = scale.getSlot(options.value);\n elements.transform(geo.transform().translate(slot.x1, slot.y1));\n that.elements = elements;\n return elements;\n }\n });\n var BarLinearPointer = LinearPointer.extend({\n init: function (scale, options) {\n LinearPointer.fn.init.call(this, scale, options);\n if (this.options.size === undefined) {\n this.options.size = this.scale.options.majorTicks.size * 0.3;\n }\n },\n pointerShape: function (value) {\n var that = this;\n var options = that.options;\n var scale = that.scale;\n var vertical = scale.options.vertical;\n var mirror = scale.options.mirror;\n var dir = mirror == vertical ? -1 : 1;\n var size = options.size * dir;\n var minSlot = scale.getSlot(scale.options.min);\n var slot = scale.getSlot(value);\n var axis = vertical ? Y : X;\n var sizeAxis = vertical ? X : Y;\n var margin = that._margin() * dir;\n var p1 = new Point();\n p1[axis] = minSlot[axis + '1'];\n p1[sizeAxis] = minSlot[sizeAxis + '1'];\n var p2 = new Point();\n p2[axis] = slot[axis + '1'];\n p2[sizeAxis] = slot[sizeAxis + '1'];\n if (vertical) {\n p1.translate(margin, 0);\n p2.translate(margin, 0);\n } else {\n p1.translate(0, margin);\n p2.translate(0, margin);\n }\n var p3 = p2.clone();\n var p4 = p1.clone();\n if (vertical) {\n p3.translate(size, 0);\n p4.translate(size, 0);\n } else {\n p3.translate(0, size);\n p4.translate(0, size);\n }\n return [\n p1,\n p2,\n p3,\n p4\n ];\n },\n repaint: function () {\n var that = this;\n var scale = that.scale;\n var options = that.options;\n var shape = that.pointerShape(options.value);\n var pointerPath = that.elements.children[0];\n var oldShape = that.pointerShape(options._oldValue);\n pointerPath.moveTo(shape[0]).lineTo(shape[1]).lineTo(shape[2]).lineTo(shape[3]).close();\n var animation = new BarLinearPointerAnimation(pointerPath, deepExtend(options.animation, {\n reverse: scale.options.reverse,\n vertical: scale.options.vertical,\n oldPoints: [\n oldShape[1],\n oldShape[2]\n ],\n newPoints: [\n shape[1],\n shape[2]\n ]\n }));\n if (options.animation.transitions === false) {\n animation.options.duration = 0;\n }\n animation.setup();\n animation.play();\n },\n render: function () {\n var that = this;\n var group = new Group();\n var elementOptions = that.getElementOptions();\n var pointer = new Path({\n stroke: elementOptions.stroke,\n fill: elementOptions.fill\n });\n group.append(pointer);\n that.elements = group;\n return group;\n }\n });\n var RadialPointerAnimation = draw.Animation.extend({\n init: function (element, options) {\n draw.Animation.fn.init.call(this, element, options);\n options = this.options;\n options.duration = math.max(math.abs(options.newAngle - options.oldAngle) / options.duration * 1000, 1);\n },\n options: {\n easing: LINEAR,\n duration: ANGULAR_SPEED\n },\n step: function (pos) {\n var anim = this;\n var options = anim.options;\n var angle = interpolateValue(options.oldAngle, options.newAngle, pos);\n anim.element.transform(geo.transform().rotate(angle, options.center));\n }\n });\n draw.AnimationFactory.current.register(RADIAL_POINTER, RadialPointerAnimation);\n var ArrowLinearPointerAnimation = draw.Animation.extend({\n options: {\n easing: LINEAR,\n duration: LINEAR_SPEED\n },\n setup: function () {\n var options = this.options;\n var margin = options.margin;\n var from = options.from;\n var to = options.to;\n var axis = options.vertical ? 'x1' : 'y1';\n if (options.mirror == options.vertical) {\n from[axis] -= margin;\n to[axis] -= margin;\n } else {\n from[axis] += margin;\n to[axis] += margin;\n }\n var fromScale = this.fromScale = new Point(from.x1, from.y1);\n var toScale = this.toScale = new Point(to.x1, to.y1);\n if (options.duration !== 0) {\n options.duration = math.max(fromScale.distanceTo(toScale) / options.duration * 1000, 1);\n }\n },\n step: function (pos) {\n var translateX = interpolateValue(this.fromScale.x, this.toScale.x, pos);\n var translateY = interpolateValue(this.fromScale.y, this.toScale.y, pos);\n this.element.transform(geo.transform().translate(translateX, translateY));\n }\n });\n draw.AnimationFactory.current.register(ARROW_POINTER, ArrowLinearPointerAnimation);\n var BarLinearPointerAnimation = draw.Animation.extend({\n options: {\n easing: LINEAR,\n speed: LINEAR_SPEED\n },\n setup: function () {\n var options = this.options;\n var newPoints = options.newPoints;\n var oldPoints = options.oldPoints;\n var axis = this.axis = options.vertical ? Y : X;\n var to = this.to = newPoints[0][axis];\n var from = this.from = oldPoints[0][axis];\n if (options.duration !== 0) {\n options.duration = math.max(math.abs(to - from) / options.speed * 1000, 1);\n }\n this._set(from);\n },\n step: function (pos) {\n var value = interpolateValue(this.from, this.to, pos);\n this._set(value);\n },\n _set: function (value) {\n var setter = 'set' + this.axis.toUpperCase();\n var points = this.options.newPoints;\n points[0][setter](value);\n points[1][setter](value);\n }\n });\n draw.AnimationFactory.current.register(BAR_POINTER, BarLinearPointerAnimation);\n function _buildLabel(label, options) {\n var labelBox = label.box;\n var textBox = label.children[0].box;\n var border = options.border || {};\n var background = options.background || '';\n var elements = new Group();\n var styleBox, styleGeometry, wrapper;\n wrapper = Path.fromRect(new Rect([\n labelBox.x1,\n labelBox.y1\n ], [\n labelBox.width(),\n labelBox.height()\n ]), { stroke: {} });\n var text = new Text(label.text, new Point(textBox.x1, textBox.y1), {\n font: options.font,\n fill: { color: options.color }\n });\n styleGeometry = _pad(text.bbox().clone(), options.padding);\n styleBox = Path.fromRect(styleGeometry, {\n stroke: {\n color: border.width ? border.color : '',\n width: border.width,\n dashType: border.dashType,\n lineJoin: 'round',\n lineCap: 'round'\n },\n fill: { color: background }\n });\n elements.append(wrapper);\n elements.append(styleBox);\n elements.append(text);\n return elements;\n }\n function getRange(range, min, max) {\n var from = defined(range.from) ? range.from : MIN_VALUE;\n var to = defined(range.to) ? range.to : MAX_VALUE;\n range.from = math.max(math.min(to, from), min);\n range.to = math.min(math.max(to, from), max);\n return range;\n }\n function _pad(bbox, value) {\n var origin = bbox.getOrigin();\n var size = bbox.getSize();\n var spacing = getSpacing(value);\n bbox.setOrigin([\n origin.x - spacing.left,\n origin.y - spacing.top\n ]);\n bbox.setSize([\n size.width + (spacing.left + spacing.right),\n size.height + (spacing.top + spacing.bottom)\n ]);\n return bbox;\n }\n function _unpad(bbox, value) {\n var spacing = getSpacing(value);\n spacing.left = -spacing.left;\n spacing.top = -spacing.top;\n spacing.right = -spacing.right;\n spacing.bottom = -spacing.bottom;\n return _pad(bbox, spacing);\n }\n dataviz.ui.plugin(RadialGauge);\n dataviz.ui.plugin(LinearGauge);\n dataviz.ExportMixin.extend(Gauge.fn);\n deepExtend(dataviz, {\n Gauge: Gauge,\n RadialPointer: RadialPointer,\n LinearPointer: LinearPointer,\n ArrowLinearPointer: ArrowLinearPointer,\n BarLinearPointer: BarLinearPointer,\n LinearScale: LinearScale,\n RadialScale: RadialScale,\n LinearGauge: LinearGauge,\n RadialGauge: RadialGauge\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.dataviz.barcode', [\n 'kendo.dataviz.core',\n 'kendo.drawing'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'dataviz.barcode',\n name: 'Barcode',\n category: 'dataviz',\n description: 'Barcode widget',\n depends: ['dataviz.core']\n };\n (function ($, undefined) {\n var kendo = window.kendo, Widget = kendo.ui.Widget, extend = $.extend, deepExtend = kendo.deepExtend, inArray = $.inArray, isPlainObject = $.isPlainObject, draw = kendo.drawing, geom = kendo.geometry, util = kendo.drawing.util, defined = util.defined, dataviz = kendo.dataviz, Box2D = dataviz.Box2D, TextBox = dataviz.TextBox, DEFAULT_WIDTH = 300, DEFAULT_HEIGHT = 100, DEFAULT_QUIETZONE_LENGTH = 10, numberRegex = /^\\d+$/, alphanumericRegex = /^[a-z0-9]+$/i, InvalidCharacterErrorTemplate = 'Character \\'{0}\\' is not valid for symbology {1}';\n function getNext(value, index, count) {\n return value.substring(index, index + count);\n }\n var Encoding = kendo.Class.extend({\n init: function (options) {\n this.setOptions(options);\n },\n setOptions: function (options) {\n var that = this;\n that.options = extend({}, that.options, options);\n that.quietZoneLength = that.options.addQuietZone ? 2 * that.options.quietZoneLength : 0;\n },\n encode: function (value, width, height) {\n var that = this;\n if (defined(value)) {\n value += '';\n }\n that.initValue(value, width, height);\n if (that.options.addQuietZone) {\n that.addQuietZone();\n }\n that.addData();\n if (that.options.addQuietZone) {\n that.addQuietZone();\n }\n return {\n baseUnit: that.baseUnit,\n pattern: that.pattern\n };\n },\n options: {\n quietZoneLength: DEFAULT_QUIETZONE_LENGTH,\n addQuietZone: true,\n addCheckSum: true\n },\n initValue: function () {\n },\n addQuietZone: function () {\n this.pattern.push(this.options.quietZoneLength || DEFAULT_QUIETZONE_LENGTH);\n },\n addData: function () {\n },\n invalidCharacterError: function (character) {\n throw new Error(kendo.format(InvalidCharacterErrorTemplate, character, this.name));\n }\n });\n var encodings = {};\n var code39Base = Encoding.extend({\n minBaseUnitLength: 0.7,\n addData: function () {\n var that = this, value = that.value;\n that.addStart();\n for (var idx = 0; idx < value.length; idx++) {\n that.addCharacter(value.charAt(idx));\n }\n if (that.options.addCheckSum) {\n that.pushCheckSum();\n }\n that.addStop();\n that.prepareValues();\n },\n addCharacter: function (character) {\n var that = this, charData = that.characterMap[character];\n if (!charData) {\n that.invalidCharacterError(character);\n }\n that.addBase(charData);\n },\n addBase: function () {\n }\n });\n var code39ExtendedBase = {\n addCharacter: function (character) {\n var that = this;\n if (that.characterMap[character]) {\n that.addBase(that.characterMap[character]);\n } else if (character.charCodeAt(0) > 127) {\n that.invalidCharacterError(character);\n } else {\n that.addExtended(character.charCodeAt(0));\n }\n },\n addExtended: function (code) {\n var that = this, patterns;\n for (var i = 0; i < that.extendedMappings.length; i++) {\n if (patterns = that.extendedMappings[i].call(that, code)) {\n for (var j = 0; j < patterns.length; j++) {\n that.addBase(patterns[j]);\n }\n that.dataLength += patterns.length - 1;\n return;\n }\n }\n },\n extendedMappings: [\n function (code) {\n if (97 <= code && code <= 122) {\n var that = this;\n return [\n that.characterMap[that.shiftCharacters[0]],\n that.characterMap[String.fromCharCode(code - 32)]\n ];\n }\n },\n function (code) {\n if (33 <= code && code <= 58) {\n var that = this;\n return [\n that.characterMap[that.shiftCharacters[1]],\n that.characterMap[String.fromCharCode(code + 32)]\n ];\n }\n },\n function (code) {\n if (1 <= code && code <= 26) {\n var that = this;\n return [\n that.characterMap[that.shiftCharacters[2]],\n that.characterMap[String.fromCharCode(code + 64)]\n ];\n }\n },\n function (code) {\n var that = this, result, dataCharacter;\n if (!that.specialAsciiCodes[code]) {\n dataCharacter = Math.floor(code / 32) * 6 + (code - 27) % 32 + 64;\n result = [\n that.characterMap[that.shiftCharacters[3]],\n that.characterMap[String.fromCharCode(dataCharacter)]\n ];\n } else {\n result = [];\n for (var i = 0; i < that.specialAsciiCodes[code].length; i++) {\n result.push(that.characterMap[that.shiftCharacters[3]]);\n result.push(that.characterMap[that.specialAsciiCodes[code][i]]);\n }\n }\n return result;\n }\n ],\n specialAsciiCodes: {\n '0': ['U'],\n '64': ['V'],\n '96': ['W'],\n '127': [\n 'T',\n 'X',\n 'Y',\n 'Z'\n ]\n },\n shiftValuesAsciiCodes: {\n '39': 36,\n '40': 47,\n '41': 43,\n '42': 37\n },\n characterMap: {\n '+': false,\n '/': false,\n '$': false,\n '%': false\n },\n shiftCharacters: [\n 'SHIFT0',\n 'SHIFT1',\n 'SHIFT2',\n 'SHIFT3'\n ]\n };\n encodings.code39 = code39Base.extend({\n name: 'Code 39',\n checkSumMod: 43,\n minRatio: 2.5,\n maxRatio: 3,\n gapWidth: 1,\n splitCharacter: '|',\n initValue: function (value, width, height) {\n var that = this;\n that.width = width;\n that.height = height;\n that.value = value;\n that.dataLength = value.length;\n that.pattern = [];\n that.patternString = '';\n },\n prepareValues: function () {\n var that = this, baseUnit, minBaseUnit = that.minBaseUnitLength, ratio = that.maxRatio, minRatio = that.minRatio, minHeight = Math.max(0.15 * that.width, 24);\n if (that.height < minHeight) {\n throw new Error('Insufficient Height. The minimum height for value: ' + that.value + ' is: ' + minHeight);\n }\n while ((baseUnit = that.getBaseUnit(ratio)) < minBaseUnit && ratio > minRatio) {\n ratio = parseFloat((ratio - 0.1).toFixed(1));\n }\n if (baseUnit < minBaseUnit) {\n var minWidth = Math.ceil(that.getBaseWidth(minRatio) * minBaseUnit);\n throw new Error('Insufficient width. The minimum width for value: ' + that.value + ' is: ' + minWidth);\n }\n that.ratio = ratio;\n that.baseUnit = baseUnit;\n that.patternString = that.patternString.substring(0, that.patternString.length - 1);\n that.pattern = that.pattern.concat(that.patternString.replace(/ratio/g, ratio).split(that.splitCharacter));\n },\n getBaseUnit: function (ratio) {\n return this.width / this.getBaseWidth(ratio);\n },\n getBaseWidth: function (ratio) {\n var that = this, characterLength = 3 * (ratio + 2);\n return that.quietZoneLength + characterLength * (that.dataLength + 2) + that.gapWidth * (that.dataLength + 1);\n },\n addStart: function () {\n var that = this;\n that.addPattern(that.characterMap.START.pattern);\n that.addCharacterGap();\n },\n addBase: function (character) {\n this.addPattern(character.pattern);\n this.addCharacterGap();\n },\n addStop: function () {\n this.addPattern(this.characterMap.START.pattern);\n },\n addPattern: function (pattern) {\n for (var i = 0; i < pattern.length; i++) {\n this.patternString += this.patternMappings[pattern.charAt(i)];\n }\n },\n addCharacterGap: function () {\n var that = this;\n that.patternString += that.gapWidth + that.splitCharacter;\n },\n patternMappings: {\n 'b': '1|',\n 'w': '1|',\n 'B': 'ratio|',\n 'W': 'ratio|'\n },\n characterMap: {\n '0': {\n 'pattern': 'bwbWBwBwb',\n 'value': 0\n },\n '1': {\n 'pattern': 'BwbWbwbwB',\n 'value': 1\n },\n '2': {\n 'pattern': 'bwBWbwbwB',\n 'value': 2\n },\n '3': {\n 'pattern': 'BwBWbwbwb',\n 'value': 3\n },\n '4': {\n 'pattern': 'bwbWBwbwB',\n 'value': 4\n },\n '5': {\n 'pattern': 'BwbWBwbwb',\n 'value': 5\n },\n '6': {\n 'pattern': 'bwBWBwbwb',\n 'value': 6\n },\n '7': {\n 'pattern': 'bwbWbwBwB',\n 'value': 7\n },\n '8': {\n 'pattern': 'BwbWbwBwb',\n 'value': 8\n },\n '9': {\n 'pattern': 'bwBWbwBwb',\n 'value': 9\n },\n 'A': {\n 'pattern': 'BwbwbWbwB',\n 'value': 10\n },\n 'B': {\n 'pattern': 'bwBwbWbwB',\n 'value': 11\n },\n 'C': {\n 'pattern': 'BwBwbWbwb',\n 'value': 12\n },\n 'D': {\n 'pattern': 'bwbwBWbwB',\n 'value': 13\n },\n 'E': {\n 'pattern': 'BwbwBWbwb',\n 'value': 14\n },\n 'F': {\n 'pattern': 'bwBwBWbwb',\n 'value': 15\n },\n 'G': {\n 'pattern': 'bwbwbWBwB',\n 'value': 16\n },\n 'H': {\n 'pattern': 'BwbwbWBwb',\n 'value': 17\n },\n 'I': {\n 'pattern': 'bwBwbWBwb',\n 'value': 18\n },\n 'J': {\n 'pattern': 'bwbwBWBwb',\n 'value': 19\n },\n 'K': {\n 'pattern': 'BwbwbwbWB',\n 'value': 20\n },\n 'L': {\n 'pattern': 'bwBwbwbWB',\n 'value': 21\n },\n 'M': {\n 'pattern': 'BwBwbwbWb',\n 'value': 22\n },\n 'N': {\n 'pattern': 'bwbwBwbWB',\n 'value': 23\n },\n 'O': {\n 'pattern': 'BwbwBwbWb',\n 'value': 24\n },\n 'P': {\n 'pattern': 'bwBwBwbWb',\n 'value': 25\n },\n 'Q': {\n 'pattern': 'bwbwbwBWB',\n 'value': 26\n },\n 'R': {\n 'pattern': 'BwbwbwBWb',\n 'value': 27\n },\n 'S': {\n 'pattern': 'bwBwbwBWb',\n 'value': 28\n },\n 'T': {\n 'pattern': 'bwbwBwBWb',\n 'value': 29\n },\n 'U': {\n 'pattern': 'BWbwbwbwB',\n 'value': 30\n },\n 'V': {\n 'pattern': 'bWBwbwbwB',\n 'value': 31\n },\n 'W': {\n 'pattern': 'BWBwbwbwb',\n 'value': 32\n },\n 'X': {\n 'pattern': 'bWbwBwbwB',\n 'value': 33\n },\n 'Y': {\n 'pattern': 'BWbwBwbwb',\n 'value': 34\n },\n 'Z': {\n 'pattern': 'bWBwBwbwb',\n 'value': 35\n },\n '-': {\n 'pattern': 'bWbwbwBwB',\n 'value': 36\n },\n '.': {\n 'pattern': 'BWbwbwBwb',\n 'value': 37\n },\n ' ': {\n 'pattern': 'bWBwbwBwb',\n 'value': 38\n },\n '$': {\n 'pattern': 'bWbWbWbwb',\n 'value': 39\n },\n '/': {\n 'pattern': 'bWbWbwbWb',\n 'value': 40\n },\n '+': {\n 'pattern': 'bWbwbWbWb',\n 'value': 41\n },\n '%': {\n 'pattern': 'bwbWbWbWb',\n 'value': 42\n },\n START: { pattern: 'bWbwBwBwb' }\n },\n options: { addCheckSum: false }\n });\n encodings.code39extended = encodings.code39.extend(deepExtend({}, code39ExtendedBase, {\n name: 'Code 39 extended',\n characterMap: {\n SHIFT0: {\n 'pattern': 'bWbwbWbWb',\n 'value': 41\n },\n SHIFT1: {\n 'pattern': 'bWbWbwbWb',\n 'value': 40\n },\n SHIFT2: {\n 'pattern': 'bWbWbWbwb',\n 'value': 39\n },\n SHIFT3: {\n 'pattern': 'bwbWbWbWb',\n 'value': 42\n }\n }\n }));\n encodings.code93 = code39Base.extend({\n name: 'Code 93',\n cCheckSumTotal: 20,\n kCheckSumTotal: 15,\n checkSumMod: 47,\n initValue: function (value, width, height) {\n var that = this;\n that.value = value;\n that.width = width;\n that.height = height;\n that.pattern = [];\n that.values = [];\n that.dataLength = value.length;\n },\n prepareValues: function () {\n var that = this, minHeight = Math.max(0.15 * that.width, 24);\n if (that.height < minHeight) {\n throw new Error('Insufficient Height');\n }\n that.setBaseUnit();\n if (that.baseUnit < that.minBaseUnitLength) {\n throw new Error('Insufficient Width');\n }\n },\n setBaseUnit: function () {\n var that = this, checkSumLength = 2;\n that.baseUnit = that.width / (9 * (that.dataLength + 2 + checkSumLength) + that.quietZoneLength + 1);\n },\n addStart: function () {\n var pattern = this.characterMap.START.pattern;\n this.addPattern(pattern);\n },\n addStop: function () {\n var that = this;\n that.addStart();\n that.pattern.push(that.characterMap.TERMINATION_BAR);\n },\n addBase: function (charData) {\n this.addPattern(charData.pattern);\n this.values.push(charData.value);\n },\n pushCheckSum: function () {\n var that = this, checkValues = that._getCheckValues(), charData;\n that.checksum = checkValues.join('');\n for (var i = 0; i < checkValues.length; i++) {\n charData = that.characterMap[that._findCharacterByValue(checkValues[i])];\n that.addPattern(charData.pattern);\n }\n },\n _getCheckValues: function () {\n var that = this, values = that.values, length = values.length, wightedSum = 0, cValue, kValue, idx;\n for (idx = length - 1; idx >= 0; idx--) {\n wightedSum += that.weightedValue(values[idx], length - idx, that.cCheckSumTotal);\n }\n cValue = wightedSum % that.checkSumMod;\n wightedSum = that.weightedValue(cValue, 1, that.kCheckSumTotal);\n for (idx = length - 1; idx >= 0; idx--) {\n wightedSum += that.weightedValue(values[idx], length - idx + 1, that.kCheckSumTotal);\n }\n kValue = wightedSum % that.checkSumMod;\n return [\n cValue,\n kValue\n ];\n },\n _findCharacterByValue: function (value) {\n for (var character in this.characterMap) {\n if (this.characterMap[character].value === value) {\n return character;\n }\n }\n },\n weightedValue: function (value, index, total) {\n return (index % total || total) * value;\n },\n addPattern: function (pattern) {\n var value;\n for (var i = 0; i < pattern.length; i++) {\n value = parseInt(pattern.charAt(i), 10);\n this.pattern.push(value);\n }\n },\n characterMap: {\n '0': {\n 'pattern': '131112',\n 'value': 0\n },\n '1': {\n 'pattern': '111213',\n 'value': 1\n },\n '2': {\n 'pattern': '111312',\n 'value': 2\n },\n '3': {\n 'pattern': '111411',\n 'value': 3\n },\n '4': {\n 'pattern': '121113',\n 'value': 4\n },\n '5': {\n 'pattern': '121212',\n 'value': 5\n },\n '6': {\n 'pattern': '121311',\n 'value': 6\n },\n '7': {\n 'pattern': '111114',\n 'value': 7\n },\n '8': {\n 'pattern': '131211',\n 'value': 8\n },\n '9': {\n 'pattern': '141111',\n 'value': 9\n },\n 'A': {\n 'pattern': '211113',\n 'value': 10\n },\n 'B': {\n 'pattern': '211212',\n 'value': 11\n },\n 'C': {\n 'pattern': '211311',\n 'value': 12\n },\n 'D': {\n 'pattern': '221112',\n 'value': 13\n },\n 'E': {\n 'pattern': '221211',\n 'value': 14\n },\n 'F': {\n 'pattern': '231111',\n 'value': 15\n },\n 'G': {\n 'pattern': '112113',\n 'value': 16\n },\n 'H': {\n 'pattern': '112212',\n 'value': 17\n },\n 'I': {\n 'pattern': '112311',\n 'value': 18\n },\n 'J': {\n 'pattern': '122112',\n 'value': 19\n },\n 'K': {\n 'pattern': '132111',\n 'value': 20\n },\n 'L': {\n 'pattern': '111123',\n 'value': 21\n },\n 'M': {\n 'pattern': '111222',\n 'value': 22\n },\n 'N': {\n 'pattern': '111321',\n 'value': 23\n },\n 'O': {\n 'pattern': '121122',\n 'value': 24\n },\n 'P': {\n 'pattern': '131121',\n 'value': 25\n },\n 'Q': {\n 'pattern': '212112',\n 'value': 26\n },\n 'R': {\n 'pattern': '212211',\n 'value': 27\n },\n 'S': {\n 'pattern': '211122',\n 'value': 28\n },\n 'T': {\n 'pattern': '211221',\n 'value': 29\n },\n 'U': {\n 'pattern': '221121',\n 'value': 30\n },\n 'V': {\n 'pattern': '222111',\n 'value': 31\n },\n 'W': {\n 'pattern': '112122',\n 'value': 32\n },\n 'X': {\n 'pattern': '112221',\n 'value': 33\n },\n 'Y': {\n 'pattern': '122121',\n 'value': 34\n },\n 'Z': {\n 'pattern': '123111',\n 'value': 35\n },\n '-': {\n 'pattern': '121131',\n 'value': 36\n },\n '.': {\n 'pattern': '311112',\n 'value': 37\n },\n ' ': {\n 'pattern': '311211',\n 'value': 38\n },\n '$': {\n 'pattern': '321111',\n 'value': 39\n },\n '/': {\n 'pattern': '112131',\n 'value': 40\n },\n '+': {\n 'pattern': '113121',\n 'value': 41\n },\n '%': {\n 'pattern': '211131',\n 'value': 42\n },\n SHIFT0: {\n 'pattern': '122211',\n 'value': 46\n },\n SHIFT1: {\n 'pattern': '311121',\n 'value': 45\n },\n SHIFT2: {\n 'pattern': '121221',\n 'value': 43\n },\n SHIFT3: {\n 'pattern': '312111',\n 'value': 44\n },\n START: { 'pattern': '111141' },\n TERMINATION_BAR: '1'\n }\n });\n encodings.code93extended = encodings.code93.extend(deepExtend({}, code39ExtendedBase, {\n name: 'Code 93 extended',\n pushCheckSum: function () {\n var that = this, checkValues = that._getCheckValues(), value;\n that.checksum = checkValues.join('');\n for (var i = 0; i < checkValues.length; i++) {\n value = checkValues[i];\n if (that.shiftValuesAsciiCodes[value]) {\n that.addExtended(that.shiftValuesAsciiCodes[value]);\n } else {\n that.addPattern(that.characterMap[that._findCharacterByValue(value)].pattern);\n }\n }\n }\n }));\n var state128 = kendo.Class.extend({\n init: function (encoding) {\n this.encoding = encoding;\n },\n addStart: function () {\n },\n is: function () {\n },\n move: function () {\n },\n pushState: function () {\n }\n });\n var state128AB = state128.extend({\n FNC4: 'FNC4',\n init: function (encoding, states) {\n var that = this;\n that.encoding = encoding;\n that.states = states;\n that._initMoves(states);\n },\n addStart: function () {\n this.encoding.addPattern(this.START);\n },\n is: function (value, index) {\n var code = value.charCodeAt(index);\n return this.isCode(code);\n },\n move: function (encodingState) {\n var that = this, idx = 0;\n while (!that._moves[idx].call(that, encodingState) && idx < that._moves.length) {\n idx++;\n }\n },\n pushState: function (encodingState) {\n var that = this, states = that.states, value = encodingState.value, maxLength = value.length, code;\n if (inArray('C', states) >= 0) {\n var numberMatch = value.substr(encodingState.index).match(/\\d{4,}/g);\n if (numberMatch) {\n maxLength = value.indexOf(numberMatch[0], encodingState.index);\n }\n }\n while ((code = encodingState.value.charCodeAt(encodingState.index)) >= 0 && that.isCode(code) && encodingState.index < maxLength) {\n that.encoding.addPattern(that.getValue(code));\n encodingState.index++;\n }\n },\n _initMoves: function (states) {\n var that = this;\n that._moves = [];\n if (inArray(that.FNC4, states) >= 0) {\n that._moves.push(that._moveFNC);\n }\n if (inArray(that.shiftKey, states) >= 0) {\n that._moves.push(that._shiftState);\n }\n that._moves.push(that._moveState);\n },\n _moveFNC: function (encodingState) {\n if (encodingState.fnc) {\n encodingState.fnc = false;\n return encodingState.previousState == this.key;\n }\n },\n _shiftState: function (encodingState) {\n var that = this;\n if (encodingState.previousState == that.shiftKey && (encodingState.index + 1 >= encodingState.value.length || that.encoding[that.shiftKey].is(encodingState.value, encodingState.index + 1))) {\n that.encoding.addPattern(that.SHIFT);\n encodingState.shifted = true;\n return true;\n }\n },\n _moveState: function () {\n this.encoding.addPattern(this.MOVE);\n return true;\n },\n SHIFT: 98\n });\n var states128 = {};\n states128.A = state128AB.extend({\n key: 'A',\n shiftKey: 'B',\n isCode: function (code) {\n return 0 <= code && code < 96;\n },\n getValue: function (code) {\n if (code < 32) {\n return code + 64;\n }\n return code - 32;\n },\n MOVE: 101,\n START: 103\n });\n states128.B = state128AB.extend({\n key: 'B',\n shiftKey: 'A',\n isCode: function (code) {\n return 32 <= code && code < 128;\n },\n getValue: function (code) {\n return code - 32;\n },\n MOVE: 100,\n START: 104\n });\n states128.C = state128.extend({\n key: 'C',\n addStart: function () {\n this.encoding.addPattern(this.START);\n },\n is: function (value, index) {\n var next4 = getNext(value, index, 4);\n return (index + 4 <= value.length || value.length == 2) && numberRegex.test(next4);\n },\n move: function () {\n this.encoding.addPattern(this.MOVE);\n },\n pushState: function (encodingState) {\n var code;\n while ((code = getNext(encodingState.value, encodingState.index, 2)) && numberRegex.test(code) && code.length == 2) {\n this.encoding.addPattern(parseInt(code, 10));\n encodingState.index += 2;\n }\n },\n getValue: function (code) {\n return code;\n },\n MOVE: 99,\n START: 105\n });\n states128.FNC4 = state128.extend({\n key: 'FNC4',\n dependentStates: [\n 'A',\n 'B'\n ],\n init: function (encoding, states) {\n this.encoding = encoding;\n this._initSubStates(states);\n },\n addStart: function (encodingState) {\n var code = encodingState.value.charCodeAt(0) - 128, subState = this._getSubState(code);\n this.encoding[subState].addStart();\n },\n is: function (value, index) {\n var code = value.charCodeAt(index);\n return this.isCode(code);\n },\n isCode: function (code) {\n return 128 <= code && code < 256;\n },\n pushState: function (encodingState) {\n var that = this, subState = that._initSubState(encodingState), encoding = that.encoding, length = subState.value.length;\n encodingState.index += length;\n if (length < 3) {\n var code;\n for (; subState.index < length; subState.index++) {\n code = subState.value.charCodeAt(subState.index);\n subState.state = that._getSubState(code);\n if (subState.previousState != subState.state) {\n subState.previousState = subState.state;\n encoding[subState.state].move(subState);\n }\n encoding.addPattern(encoding[subState.state].MOVE);\n encoding.addPattern(encoding[subState.state].getValue(code));\n }\n } else {\n if (subState.state != subState.previousState) {\n encoding[subState.state].move(subState);\n }\n that._pushStart(subState);\n encoding.pushData(subState, that.subStates);\n if (encodingState.index < encodingState.value.length) {\n that._pushStart(subState);\n }\n }\n encodingState.fnc = true;\n encodingState.state = subState.state;\n },\n _pushStart: function (subState) {\n var that = this;\n that.encoding.addPattern(that.encoding[subState.state].MOVE);\n that.encoding.addPattern(that.encoding[subState.state].MOVE);\n },\n _initSubState: function (encodingState) {\n var that = this, subState = {\n value: that._getAll(encodingState.value, encodingState.index),\n index: 0\n };\n subState.state = that._getSubState(subState.value.charCodeAt(0));\n subState.previousState = encodingState.previousState == that.key ? subState.state : encodingState.previousState;\n return subState;\n },\n _initSubStates: function (states) {\n var that = this;\n that.subStates = [];\n for (var i = 0; i < states.length; i++) {\n if (inArray(states[i], that.dependentStates) >= 0) {\n that.subStates.push(states[i]);\n }\n }\n },\n _getSubState: function (code) {\n var that = this;\n for (var i = 0; i < that.subStates.length; i++) {\n if (that.encoding[that.subStates[i]].isCode(code)) {\n return that.subStates[i];\n }\n }\n },\n _getAll: function (value, index) {\n var code, result = '';\n while ((code = value.charCodeAt(index++)) && this.isCode(code)) {\n result += String.fromCharCode(code - 128);\n }\n return result;\n }\n });\n states128.FNC1 = state128.extend({\n key: 'FNC1',\n startState: 'C',\n dependentStates: [\n 'C',\n 'B'\n ],\n startAI: '(',\n endAI: ')',\n init: function (encoding, states) {\n this.encoding = encoding;\n this.states = states;\n },\n addStart: function () {\n this.encoding[this.startState].addStart();\n },\n is: function () {\n return inArray(this.key, this.states) >= 0;\n },\n pushState: function (encodingState) {\n var that = this, encoding = that.encoding, value = encodingState.value.replace(/\\s/g, ''), regexSeparators = new RegExp('[' + that.startAI + that.endAI + ']', 'g'), index = encodingState.index, subState = { state: that.startState }, current, nextStart, separatorLength;\n encoding.addPattern(that.START);\n while (true) {\n subState.index = 0;\n separatorLength = value.charAt(index) === that.startAI ? 2 : 0;\n current = separatorLength > 0 ? that.getBySeparator(value, index) : that.getByLength(value, index);\n if (current.ai.length) {\n nextStart = index + separatorLength + current.id.length + current.ai.length;\n } else {\n nextStart = value.indexOf(that.startAI, index + 1);\n if (nextStart < 0) {\n if (index + current.ai.max + current.id.length + separatorLength < value.length) {\n throw new Error('Separators are required after variable length identifiers');\n }\n nextStart = value.length;\n }\n }\n subState.value = value.substring(index, nextStart).replace(regexSeparators, '');\n that.validate(current, subState.value);\n encoding.pushData(subState, that.dependentStates);\n if (nextStart >= value.length) {\n break;\n }\n index = nextStart;\n if (subState.state != that.startState) {\n encoding[that.startState].move(subState);\n subState.state = that.startState;\n }\n if (!current.ai.length) {\n encoding.addPattern(that.START);\n }\n }\n encodingState.index = encodingState.value.length;\n },\n validate: function (current, value) {\n var code = value.substr(current.id.length), ai = current.ai;\n if (!ai.type && !numberRegex.test(code)) {\n throw new Error('Application identifier ' + current.id + ' is numeric only but contains non numeric character(s).');\n }\n if (ai.type == 'alphanumeric' && !alphanumericRegex.test(code)) {\n throw new Error('Application identifier ' + current.id + ' is alphanumeric only but contains non alphanumeric character(s).');\n }\n if (ai.length && ai.length !== code.length) {\n throw new Error('Application identifier ' + current.id + ' must be ' + ai.length + ' characters long.');\n }\n if (ai.min && ai.min > code.length) {\n throw new Error('Application identifier ' + current.id + ' must be at least ' + ai.min + ' characters long.');\n }\n if (ai.max && ai.max < code.length) {\n throw new Error('Application identifier ' + current.id + ' must be at most ' + ai.max + ' characters long.');\n }\n },\n getByLength: function (value, index) {\n var that = this, id, ai;\n for (var i = 2; i <= 4; i++) {\n id = getNext(value, index, i);\n ai = that.getAI(id) || that.getAI(id.substring(0, id.length - 1));\n if (ai) {\n return {\n id: id,\n ai: ai\n };\n }\n }\n that.unsupportedAIError(id);\n },\n unsupportedAIError: function (id) {\n throw new Error(kendo.format('\\'{0}\\' is not a supported Application Identifier'), id);\n },\n getBySeparator: function (value, index) {\n var that = this, start = value.indexOf(that.startAI, index), end = value.indexOf(that.endAI, start), id = value.substring(start + 1, end), ai = that.getAI(id) || that.getAI(id.substr(id.length - 1));\n if (!ai) {\n that.unsupportedAIError(id);\n }\n return {\n ai: ai,\n id: id\n };\n },\n getAI: function (id) {\n var ai = this.applicationIdentifiers, multiKey = ai.multiKey;\n if (ai[id]) {\n return ai[id];\n }\n for (var i = 0; i < multiKey.length; i++) {\n if (multiKey[i].ids && inArray(id, multiKey[i].ids) >= 0) {\n return multiKey[i].type;\n } else if (multiKey[i].ranges) {\n var ranges = multiKey[i].ranges;\n for (var j = 0; j < ranges.length; j++) {\n if (ranges[j][0] <= id && id <= ranges[j][1]) {\n return multiKey[i].type;\n }\n }\n }\n }\n },\n applicationIdentifiers: {\n '22': {\n max: 29,\n type: 'alphanumeric'\n },\n '402': { length: 17 },\n '7004': {\n max: 4,\n type: 'alphanumeric'\n },\n '242': {\n max: 6,\n type: 'alphanumeric'\n },\n '8020': {\n max: 25,\n type: 'alphanumeric'\n },\n '703': {\n min: 3,\n max: 30,\n type: 'alphanumeric'\n },\n '8008': {\n min: 8,\n max: 12,\n type: 'alphanumeric'\n },\n '253': {\n min: 13,\n max: 17,\n type: 'alphanumeric'\n },\n '8003': {\n min: 14,\n max: 30,\n type: 'alphanumeric'\n },\n multiKey: [\n {\n ids: [\n '15',\n '17',\n '8005',\n '8100'\n ],\n ranges: [\n [\n 11,\n 13\n ],\n [\n 310,\n 316\n ],\n [\n 320,\n 336\n ],\n [\n 340,\n 369\n ]\n ],\n type: { length: 6 }\n },\n {\n ids: [\n '240',\n '241',\n '250',\n '251',\n '400',\n '401',\n '403',\n '7002',\n '8004',\n '8007',\n '8110'\n ],\n ranges: [[90 - 99]],\n type: {\n max: 30,\n type: 'alphanumeric'\n }\n },\n {\n ids: ['7001'],\n ranges: [[\n 410,\n 414\n ]],\n type: { length: 13 }\n },\n {\n ids: [\n '10',\n '21',\n '254',\n '420',\n '8002'\n ],\n type: {\n max: 20,\n type: 'alphanumeric'\n }\n },\n {\n ids: [\n '00',\n '8006',\n '8017',\n '8018'\n ],\n type: { length: 18 }\n },\n {\n ids: [\n '01',\n '02',\n '8001'\n ],\n type: { length: 14 }\n },\n {\n ids: ['422'],\n ranges: [[\n 424,\n 426\n ]],\n type: { length: 3 }\n },\n {\n ids: [\n '20',\n '8102'\n ],\n type: { length: 2 }\n },\n {\n ids: [\n '30',\n '37'\n ],\n type: {\n max: 8,\n type: 'alphanumeric'\n }\n },\n {\n ids: [\n '390',\n '392'\n ],\n type: {\n max: 15,\n type: 'alphanumeric'\n }\n },\n {\n ids: [\n '421',\n '423'\n ],\n type: {\n min: 3,\n max: 15,\n type: 'alphanumeric'\n }\n },\n {\n ids: [\n '391',\n '393'\n ],\n type: {\n min: 3,\n max: 18,\n type: 'alphanumeric'\n }\n },\n {\n ids: [\n '7003',\n '8101'\n ],\n type: { length: 10 }\n }\n ]\n },\n START: 102\n });\n var code128Base = Encoding.extend({\n init: function (options) {\n Encoding.fn.init.call(this, options);\n this._initStates();\n },\n _initStates: function () {\n var that = this;\n for (var i = 0; i < that.states.length; i++) {\n that[that.states[i]] = new states128[that.states[i]](that, that.states);\n }\n },\n initValue: function (value, width, height) {\n var that = this;\n that.pattern = [];\n that.value = value;\n that.width = width;\n that.height = height;\n that.checkSum = 0;\n that.totalUnits = 0;\n that.index = 0;\n that.position = 1;\n },\n addData: function () {\n var that = this, encodingState = {\n value: that.value,\n index: 0,\n state: ''\n };\n if (that.value.length === 0) {\n return;\n }\n encodingState.state = encodingState.previousState = that.getNextState(encodingState, that.states);\n that.addStart(encodingState);\n that.pushData(encodingState, that.states);\n that.addCheckSum();\n that.addStop();\n that.setBaseUnit();\n },\n pushData: function (encodingState, states) {\n var that = this;\n while (true) {\n that[encodingState.state].pushState(encodingState);\n if (encodingState.index >= encodingState.value.length) {\n break;\n }\n if (!encodingState.shifted) {\n encodingState.previousState = encodingState.state;\n encodingState.state = that.getNextState(encodingState, states);\n that[encodingState.state].move(encodingState);\n } else {\n var temp = encodingState.state;\n encodingState.state = encodingState.previousState;\n encodingState.previousState = temp;\n encodingState.shifted = false;\n }\n }\n },\n addStart: function (encodingState) {\n this[encodingState.state].addStart(encodingState);\n this.position = 1;\n },\n addCheckSum: function () {\n var that = this;\n that.checksum = that.checkSum % 103;\n that.addPattern(that.checksum);\n },\n addStop: function () {\n this.addPattern(this.STOP);\n },\n setBaseUnit: function () {\n var that = this;\n that.baseUnit = that.width / (that.totalUnits + that.quietZoneLength);\n },\n addPattern: function (code) {\n var that = this, pattern = that.characterMap[code].toString(), value;\n for (var i = 0; i < pattern.length; i++) {\n value = parseInt(pattern.charAt(i), 10);\n that.pattern.push(value);\n that.totalUnits += value;\n }\n that.checkSum += code * that.position++;\n },\n getNextState: function (encodingState, states) {\n for (var i = 0; i < states.length; i++) {\n if (this[states[i]].is(encodingState.value, encodingState.index)) {\n return states[i];\n }\n }\n this.invalidCharacterError(encodingState.value.charAt(encodingState.index));\n },\n characterMap: [\n 212222,\n 222122,\n 222221,\n 121223,\n 121322,\n 131222,\n 122213,\n 122312,\n 132212,\n 221213,\n 221312,\n 231212,\n 112232,\n 122132,\n 122231,\n 113222,\n 123122,\n 123221,\n 223211,\n 221132,\n 221231,\n 213212,\n 223112,\n 312131,\n 311222,\n 321122,\n 321221,\n 312212,\n 322112,\n 322211,\n 212123,\n 212321,\n 232121,\n 111323,\n 131123,\n 131321,\n 112313,\n 132113,\n 132311,\n 211313,\n 231113,\n 231311,\n 112133,\n 112331,\n 132131,\n 113123,\n 113321,\n 133121,\n 313121,\n 211331,\n 231131,\n 213113,\n 213311,\n 213131,\n 311123,\n 311321,\n 331121,\n 312113,\n 312311,\n 332111,\n 314111,\n 221411,\n 431111,\n 111224,\n 111422,\n 121124,\n 121421,\n 141122,\n 141221,\n 112214,\n 112412,\n 122114,\n 122411,\n 142112,\n 142211,\n 241211,\n 221114,\n 413111,\n 241112,\n 134111,\n 111242,\n 121142,\n 121241,\n 114212,\n 124112,\n 124211,\n 411212,\n 421112,\n 421211,\n 212141,\n 214121,\n 412121,\n 111143,\n 111341,\n 131141,\n 114113,\n 114311,\n 411113,\n 411311,\n 113141,\n 114131,\n 311141,\n 411131,\n 211412,\n 211214,\n 211232,\n 2331112\n ],\n STOP: 106\n });\n encodings.code128a = code128Base.extend({\n name: 'Code 128 A',\n states: ['A']\n });\n encodings.code128b = code128Base.extend({\n name: 'Code 128 B',\n states: ['B']\n });\n encodings.code128c = code128Base.extend({\n name: 'Code 128 C',\n states: ['C']\n });\n encodings.code128 = code128Base.extend({\n name: 'Code 128',\n states: [\n 'C',\n 'B',\n 'A',\n 'FNC4'\n ]\n });\n encodings['gs1-128'] = code128Base.extend({\n name: 'Code GS1-128',\n states: [\n 'FNC1',\n 'C',\n 'B'\n ]\n });\n var msiBase = Encoding.extend({\n initValue: function (value, width) {\n var that = this;\n that.pattern = [];\n that.value = value;\n that.checkSumLength = 0;\n that.width = width;\n },\n setBaseUnit: function () {\n var that = this, startStopLength = 7;\n that.baseUnit = that.width / (12 * (that.value.length + that.checkSumLength) + that.quietZoneLength + startStopLength);\n },\n addData: function () {\n var that = this, value = that.value;\n that.addPattern(that.START);\n for (var i = 0; i < value.length; i++) {\n that.addCharacter(value.charAt(i));\n }\n if (that.options.addCheckSum) {\n that.addCheckSum();\n }\n that.addPattern(that.STOP);\n that.setBaseUnit();\n },\n addCharacter: function (character) {\n var that = this, pattern = that.characterMap[character];\n if (!pattern) {\n that.invalidCharacterError(character);\n }\n that.addPattern(pattern);\n },\n addPattern: function (pattern) {\n for (var i = 0; i < pattern.length; i++) {\n this.pattern.push(parseInt(pattern.charAt(i), 10));\n }\n },\n addCheckSum: function () {\n var that = this, checkSumFunction = that.checkSums[that.checkSumType], checkValues;\n checkValues = checkSumFunction.call(that.checkSums, that.value);\n that.checksum = checkValues.join('');\n for (var i = 0; i < checkValues.length; i++) {\n that.checkSumLength++;\n that.addPattern(that.characterMap[checkValues[i]]);\n }\n },\n checkSums: {\n Modulo10: function (value) {\n var checkValues = [\n 0,\n ''\n ], odd = value.length % 2, idx, evenSum, oddSum;\n for (idx = 0; idx < value.length; idx++) {\n checkValues[(idx + odd) % 2] += parseInt(value.charAt(idx), 10);\n }\n oddSum = checkValues[0];\n evenSum = (checkValues[1] * 2).toString();\n for (idx = 0; idx < evenSum.length; idx++) {\n oddSum += parseInt(evenSum.charAt(idx), 10);\n }\n return [(10 - oddSum % 10) % 10];\n },\n Modulo11: function (value) {\n var weightedSum = 0, mod = 11, length = value.length, weight, checkValue;\n for (var i = 0; i < length; i++) {\n weight = ((length - i) % 6 || 6) + 1;\n weightedSum += weight * value.charAt(i);\n }\n checkValue = (mod - weightedSum % mod) % mod;\n if (checkValue != 10) {\n return [checkValue];\n }\n return [\n 1,\n 0\n ];\n },\n Modulo11Modulo10: function (value) {\n var checkValues = this.Modulo11(value), mod11Value;\n mod11Value = value + checkValues[0];\n return checkValues.concat(this.Modulo10(mod11Value));\n },\n Modulo10Modulo10: function (value) {\n var checkValues = this.Modulo10(value), mod10Value;\n mod10Value = value + checkValues[0];\n return checkValues.concat(this.Modulo10(mod10Value));\n }\n },\n characterMap: [\n '12121212',\n '12121221',\n '12122112',\n '12122121',\n '12211212',\n '12211221',\n '12212112',\n '12212121',\n '21121212',\n '21121221'\n ],\n START: '21',\n STOP: '121',\n checkSumType: ''\n });\n encodings.msimod10 = msiBase.extend({\n name: 'MSI Modulo10',\n checkSumType: 'Modulo10'\n });\n encodings.msimod11 = msiBase.extend({\n name: 'MSI Modulo11',\n checkSumType: 'Modulo11'\n });\n encodings.msimod1110 = msiBase.extend({\n name: 'MSI Modulo11 Modulo10',\n checkSumType: 'Modulo11Modulo10'\n });\n encodings.msimod1010 = msiBase.extend({\n name: 'MSI Modulo10 Modulo10',\n checkSumType: 'Modulo10Modulo10'\n });\n encodings.code11 = Encoding.extend({\n name: 'Code 11',\n cCheckSumTotal: 10,\n kCheckSumTotal: 9,\n kCheckSumMinLength: 10,\n checkSumMod: 11,\n DASH_VALUE: 10,\n DASH: '-',\n START: '112211',\n STOP: '11221',\n initValue: function (value, width) {\n var that = this;\n that.pattern = [];\n that.value = value;\n that.width = width;\n that.totalUnits = 0;\n },\n addData: function () {\n var that = this;\n var value = that.value;\n that.addPattern(that.START);\n for (var i = 0; i < value.length; i++) {\n that.addCharacter(value.charAt(i));\n }\n if (that.options.addCheckSum) {\n that.addCheckSum();\n }\n that.addPattern(that.STOP);\n that.setBaseUnit();\n },\n setBaseUnit: function () {\n var that = this;\n that.baseUnit = that.width / (that.totalUnits + that.quietZoneLength);\n },\n addCheckSum: function () {\n var that = this, value = that.value, length = value.length, cValue;\n cValue = that.getWeightedSum(value, length, that.cCheckSumTotal) % that.checkSumMod;\n that.checksum = cValue + '';\n that.addPattern(that.characterMap[cValue]);\n length++;\n if (length >= that.kCheckSumMinLength) {\n var kValue = (cValue + that.getWeightedSum(value, length, that.kCheckSumTotal)) % that.checkSumMod;\n that.checksum += kValue;\n that.addPattern(that.characterMap[kValue]);\n }\n },\n getWeightedSum: function (value, length, total) {\n var weightedSum = 0;\n for (var i = 0; i < value.length; i++) {\n weightedSum += this.weightedValue(this.getValue(value.charAt(i)), length, i, total);\n }\n return weightedSum;\n },\n weightedValue: function (value, length, index, total) {\n var weight = (length - index) % total || total;\n return weight * value;\n },\n getValue: function (character) {\n var that = this;\n if (!isNaN(character)) {\n return parseInt(character, 10);\n } else if (character !== that.DASH) {\n that.invalidCharacterError(character);\n }\n return that.DASH_VALUE;\n },\n addCharacter: function (character) {\n var that = this, value = that.getValue(character), pattern = that.characterMap[value];\n that.addPattern(pattern);\n },\n addPattern: function (pattern) {\n var value;\n for (var i = 0; i < pattern.length; i++) {\n value = parseInt(pattern.charAt(i), 10);\n this.pattern.push(value);\n this.totalUnits += value;\n }\n },\n characterMap: [\n '111121',\n '211121',\n '121121',\n '221111',\n '112121',\n '212111',\n '122111',\n '111221',\n '211211',\n '211111',\n '112111'\n ],\n options: { addCheckSum: true }\n });\n encodings.postnet = Encoding.extend({\n name: 'Postnet',\n START: '2',\n VALID_CODE_LENGTHS: [\n 5,\n 9,\n 11\n ],\n DIGIT_SEPARATOR: '-',\n initValue: function (value, width, height) {\n var that = this;\n that.height = height;\n that.width = width;\n that.baseHeight = height / 2;\n that.value = value.replace(new RegExp(that.DIGIT_SEPARATOR, 'g'), '');\n that.pattern = [];\n that.validate(that.value);\n that.checkSum = 0;\n that.setBaseUnit();\n },\n addData: function () {\n var that = this, value = that.value;\n that.addPattern(that.START);\n for (var i = 0; i < value.length; i++) {\n that.addCharacter(value.charAt(i));\n }\n if (that.options.addCheckSum) {\n that.addCheckSum();\n }\n that.addPattern(that.START);\n that.pattern.pop();\n },\n addCharacter: function (character) {\n var that = this, pattern = that.characterMap[character];\n that.checkSum += parseInt(character, 10);\n that.addPattern(pattern);\n },\n addCheckSum: function () {\n var that = this;\n that.checksum = (10 - that.checkSum % 10) % 10;\n that.addCharacter(that.checksum);\n },\n setBaseUnit: function () {\n var that = this, startStopLength = 3;\n that.baseUnit = that.width / ((that.value.length + 1) * 10 + startStopLength + that.quietZoneLength);\n },\n validate: function (value) {\n var that = this;\n if (!numberRegex.test(value)) {\n that.invalidCharacterError(value.match(/[^0-9]/)[0]);\n }\n if (inArray(value.length, that.VALID_CODE_LENGTHS) < 0) {\n throw new Error('Invalid value length. Valid lengths for the Postnet symbology are ' + that.VALID_CODE_LENGTHS.join(','));\n }\n },\n addPattern: function (pattern) {\n var that = this, y1;\n for (var i = 0; i < pattern.length; i++) {\n y1 = that.height - that.baseHeight * pattern.charAt(i);\n that.pattern.push({\n width: 1,\n y1: y1,\n y2: that.height\n });\n that.pattern.push(1);\n }\n },\n characterMap: [\n '22111',\n '11122',\n '11212',\n '11221',\n '12112',\n '12121',\n '12211',\n '21112',\n '21121',\n '21211'\n ]\n });\n encodings.ean13 = Encoding.extend({\n initValue: function (value, width, height) {\n value += '';\n if (value.length != 12 || /\\D/.test(value)) {\n throw new Error('The value of the \"EAN13\" encoding should be 12 symbols');\n }\n var that = this;\n that.pattern = [];\n that.options.height = height;\n that.baseUnit = width / (95 + that.quietZoneLength);\n that.value = value;\n that.checksum = that.calculateChecksum();\n that.leftKey = value[0];\n that.leftPart = value.substr(1, 6);\n that.rightPart = value.substr(7) + that.checksum;\n },\n addData: function () {\n var that = this;\n that.addPieces(that.characterMap.start);\n that.addSide(that.leftPart, that.leftKey);\n that.addPieces(that.characterMap.middle);\n that.addSide(that.rightPart);\n that.addPieces(that.characterMap.start);\n },\n addSide: function (leftPart, key) {\n var that = this;\n for (var i = 0; i < leftPart.length; i++) {\n if (key && parseInt(that.keyTable[key].charAt(i), 10)) {\n that.addPieces(Array.prototype.slice.call(that.characterMap.digits[leftPart.charAt(i)]).reverse(), true);\n } else {\n that.addPieces(that.characterMap.digits[leftPart.charAt(i)], true);\n }\n }\n },\n addPieces: function (arrToAdd, limitedHeight) {\n var that = this;\n for (var i = 0; i < arrToAdd.length; i++) {\n if (limitedHeight) {\n that.pattern.push({\n y1: 0,\n y2: that.options.height * 0.95,\n width: arrToAdd[i]\n });\n } else {\n that.pattern.push(arrToAdd[i]);\n }\n }\n },\n calculateChecksum: function () {\n var odd = 0, even = 0, value = this.value.split('').reverse().join('');\n for (var i = 0; i < value.length; i++) {\n if (i % 2) {\n even += parseInt(value.charAt(i), 10);\n } else {\n odd += parseInt(value.charAt(i), 10);\n }\n }\n var checksum = (10 - (3 * odd + even) % 10) % 10;\n return checksum;\n },\n keyTable: [\n '000000',\n '001011',\n '001101',\n '001110',\n '010011',\n '011001',\n '011100',\n '010101',\n '010110',\n '011010'\n ],\n characterMap: {\n digits: [\n [\n 3,\n 2,\n 1,\n 1\n ],\n [\n 2,\n 2,\n 2,\n 1\n ],\n [\n 2,\n 1,\n 2,\n 2\n ],\n [\n 1,\n 4,\n 1,\n 1\n ],\n [\n 1,\n 1,\n 3,\n 2\n ],\n [\n 1,\n 2,\n 3,\n 1\n ],\n [\n 1,\n 1,\n 1,\n 4\n ],\n [\n 1,\n 3,\n 1,\n 2\n ],\n [\n 1,\n 2,\n 1,\n 3\n ],\n [\n 3,\n 1,\n 1,\n 2\n ]\n ],\n start: [\n 1,\n 1,\n 1\n ],\n middle: [\n 1,\n 1,\n 1,\n 1,\n 1\n ]\n }\n });\n encodings.ean8 = encodings.ean13.extend({\n initValue: function (value, width, height) {\n var that = this;\n if (value.length != 7 || /\\D/.test(value)) {\n throw new Error('Invalid value provided');\n }\n that.value = value;\n that.options.height = height;\n that.checksum = that.calculateChecksum(that.value);\n that.leftPart = that.value.substr(0, 4);\n that.rightPart = that.value.substr(4) + that.checksum;\n that.pattern = [];\n that.baseUnit = width / (67 + that.quietZoneLength);\n }\n });\n var Barcode = Widget.extend({\n init: function (element, options) {\n var that = this;\n Widget.fn.init.call(that, element, options);\n that.element = $(element);\n that.wrapper = that.element;\n that.element.addClass('k-barcode').css('display', 'block');\n that.surfaceWrap = $('
    ').css('position', 'relative').appendTo(this.element);\n that.surface = draw.Surface.create(that.surfaceWrap, { type: that.options.renderAs });\n that.setOptions(options);\n },\n setOptions: function (options) {\n var that = this;\n that.type = (options.type || that.options.type).toLowerCase();\n if (that.type == 'upca') {\n that.type = 'ean13';\n options.value = '0' + options.value;\n }\n if (that.type == 'upce') {\n that.type = 'ean8';\n options.value = '0' + options.value;\n }\n if (!encodings[that.type]) {\n throw new Error('Encoding ' + that.type + 'is not supported.');\n }\n that.encoding = new encodings[that.type]();\n that.options = extend(true, that.options, options);\n if (!defined(options.value)) {\n return;\n }\n that.redraw();\n },\n redraw: function () {\n var size = this._getSize();\n this.surface.clear();\n this.surface.setSize({\n width: size.width,\n height: size.height\n });\n this.createVisual();\n this.surface.draw(this.visual);\n },\n getSize: function () {\n return kendo.dimensions(this.element);\n },\n _resize: function () {\n this.redraw();\n },\n createVisual: function () {\n this.visual = this._render();\n },\n _render: function () {\n var that = this, options = that.options, value = options.value, textOptions = options.text, textMargin = dataviz.getSpacing(textOptions.margin), size = that._getSize(), border = options.border || {}, encoding = that.encoding, contentBox = new Box2D(0, 0, size.width, size.height).unpad(border.width).unpad(options.padding), barHeight = contentBox.height(), result, textToDisplay, textHeight;\n var visual = new draw.Group();\n that.contentBox = contentBox;\n visual.append(that._getBackground(size));\n if (textOptions.visible) {\n textHeight = draw.util.measureText(value, { font: textOptions.font }).height;\n barHeight -= textHeight + textMargin.top + textMargin.bottom;\n }\n result = encoding.encode(value, contentBox.width(), barHeight);\n if (textOptions.visible) {\n textToDisplay = value;\n if (options.checksum && defined(encoding.checksum)) {\n textToDisplay += ' ' + encoding.checksum;\n }\n visual.append(that._getText(textToDisplay));\n }\n that.barHeight = barHeight;\n this._bandsGroup = this._getBands(result.pattern, result.baseUnit);\n visual.append(this._bandsGroup);\n return visual;\n },\n exportVisual: function () {\n return this._render();\n },\n _getSize: function () {\n var that = this, element = that.element, size = new geom.Size(DEFAULT_WIDTH, DEFAULT_HEIGHT);\n if (element.width() > 0) {\n size.width = element.width();\n }\n if (element.height() > 0) {\n size.height = element.height();\n }\n if (that.options.width) {\n size.width = that.options.width;\n }\n if (that.options.height) {\n size.height = that.options.height;\n }\n return size;\n },\n value: function (value) {\n var that = this;\n if (!defined(value)) {\n return that.options.value;\n }\n that.options.value = value + '';\n that.redraw();\n },\n _getBands: function (pattern, baseUnit) {\n var that = this, contentBox = that.contentBox, position = contentBox.x1, step, item;\n var group = new draw.Group();\n for (var i = 0; i < pattern.length; i++) {\n item = isPlainObject(pattern[i]) ? pattern[i] : {\n width: pattern[i],\n y1: 0,\n y2: that.barHeight\n };\n step = item.width * baseUnit;\n if (i % 2) {\n var rect = geom.Rect.fromPoints(new geom.Point(position, item.y1 + contentBox.y1), new geom.Point(position + step, item.y2 + contentBox.y1));\n var path = draw.Path.fromRect(rect, {\n fill: { color: that.options.color },\n stroke: null\n });\n group.append(path);\n }\n position += step;\n }\n return group;\n },\n _getBackground: function (size) {\n var that = this, options = that.options, border = options.border || {};\n var box = new Box2D(0, 0, size.width, size.height).unpad(border.width / 2);\n var path = draw.Path.fromRect(box.toRect(), {\n fill: { color: options.background },\n stroke: {\n color: border.width ? border.color : '',\n width: border.width,\n dashType: border.dashType\n }\n });\n return path;\n },\n _getText: function (value) {\n var that = this, textOptions = that.options.text, text = that._textbox = new TextBox(value, {\n font: textOptions.font,\n color: textOptions.color,\n align: 'center',\n vAlign: 'bottom',\n margin: textOptions.margin\n });\n text.reflow(that.contentBox);\n text.renderVisual();\n return text.visual;\n },\n options: {\n name: 'Barcode',\n renderAs: 'svg',\n value: '',\n type: 'code39',\n checksum: false,\n width: 0,\n height: 0,\n color: 'black',\n background: 'white',\n text: {\n visible: true,\n font: '16px Consolas, Monaco, Sans Mono, monospace, sans-serif',\n color: 'black',\n margin: {\n top: 0,\n bottom: 0,\n left: 0,\n right: 0\n }\n },\n border: {\n width: 0,\n dashType: 'solid',\n color: 'black'\n },\n padding: {\n top: 0,\n bottom: 0,\n left: 0,\n right: 0\n }\n }\n });\n dataviz.ExportMixin.extend(Barcode.fn);\n dataviz.ui.plugin(Barcode);\n kendo.deepExtend(dataviz, {\n encodings: encodings,\n Encoding: Encoding\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.dataviz.qrcode', [\n 'kendo.dataviz.core',\n 'kendo.drawing'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'dataviz.qrcode',\n name: 'QRCode',\n category: 'dataviz',\n description: 'QRCode widget.',\n depends: [\n 'dataviz.core',\n 'drawing'\n ]\n };\n (function ($, undefined) {\n var kendo = window.kendo, extend = $.extend, draw = kendo.drawing, dataviz = kendo.dataviz, Widget = kendo.ui.Widget, Box2D = dataviz.Box2D, terminator = '0000', NUMERIC = 'numeric', ALPHA_NUMERIC = 'alphanumeric', BYTE = 'byte', powersOfTwo = { '1': 0 }, powersOfTwoResult = { '0': 1 }, generatorPolynomials = [\n [\n 1,\n 0\n ],\n [\n 1,\n 25,\n 0\n ]\n ], irregularAlignmentPatternsStartDistance = {\n 15: 20,\n 16: 20,\n 18: 24,\n 19: 24,\n 22: 20,\n 24: 22,\n 26: 24,\n 28: 20,\n 30: 20,\n 31: 24,\n 32: 28,\n 33: 24,\n 36: 18,\n 37: 22,\n 39: 20,\n 40: 24\n }, versionsCodewordsInformation = [\n {\n L: {\n groups: [[\n 1,\n 19\n ]],\n totalDataCodewords: 19,\n errorCodewordsPerBlock: 7\n },\n M: {\n groups: [[\n 1,\n 16\n ]],\n totalDataCodewords: 16,\n errorCodewordsPerBlock: 10\n },\n Q: {\n groups: [[\n 1,\n 13\n ]],\n totalDataCodewords: 13,\n errorCodewordsPerBlock: 13\n },\n H: {\n groups: [[\n 1,\n 9\n ]],\n totalDataCodewords: 9,\n errorCodewordsPerBlock: 17\n }\n },\n {\n L: {\n groups: [[\n 1,\n 34\n ]],\n totalDataCodewords: 34,\n errorCodewordsPerBlock: 10\n },\n M: {\n groups: [[\n 1,\n 28\n ]],\n totalDataCodewords: 28,\n errorCodewordsPerBlock: 16\n },\n Q: {\n groups: [[\n 1,\n 22\n ]],\n totalDataCodewords: 22,\n errorCodewordsPerBlock: 22\n },\n H: {\n groups: [[\n 1,\n 16\n ]],\n totalDataCodewords: 16,\n errorCodewordsPerBlock: 28\n }\n },\n {\n L: {\n groups: [[\n 1,\n 55\n ]],\n totalDataCodewords: 55,\n errorCodewordsPerBlock: 15\n },\n M: {\n groups: [[\n 1,\n 44\n ]],\n totalDataCodewords: 44,\n errorCodewordsPerBlock: 26\n },\n Q: {\n groups: [[\n 2,\n 17\n ]],\n totalDataCodewords: 34,\n errorCodewordsPerBlock: 18\n },\n H: {\n groups: [[\n 2,\n 13\n ]],\n totalDataCodewords: 26,\n errorCodewordsPerBlock: 22\n }\n },\n {\n L: {\n groups: [[\n 1,\n 80\n ]],\n totalDataCodewords: 80,\n errorCodewordsPerBlock: 20\n },\n M: {\n groups: [[\n 2,\n 32\n ]],\n totalDataCodewords: 64,\n errorCodewordsPerBlock: 18\n },\n Q: {\n groups: [[\n 2,\n 24\n ]],\n totalDataCodewords: 48,\n errorCodewordsPerBlock: 26\n },\n H: {\n groups: [[\n 4,\n 9\n ]],\n totalDataCodewords: 36,\n errorCodewordsPerBlock: 16\n }\n },\n {\n L: {\n groups: [[\n 1,\n 108\n ]],\n totalDataCodewords: 108,\n errorCodewordsPerBlock: 26\n },\n M: {\n groups: [[\n 2,\n 43\n ]],\n totalDataCodewords: 86,\n errorCodewordsPerBlock: 24\n },\n Q: {\n groups: [\n [\n 2,\n 15\n ],\n [\n 2,\n 16\n ]\n ],\n totalDataCodewords: 62,\n errorCodewordsPerBlock: 18\n },\n H: {\n groups: [\n [\n 2,\n 11\n ],\n [\n 2,\n 12\n ]\n ],\n totalDataCodewords: 46,\n errorCodewordsPerBlock: 22\n }\n },\n {\n L: {\n groups: [[\n 2,\n 68\n ]],\n totalDataCodewords: 136,\n errorCodewordsPerBlock: 18\n },\n M: {\n groups: [[\n 4,\n 27\n ]],\n totalDataCodewords: 108,\n errorCodewordsPerBlock: 16\n },\n Q: {\n groups: [[\n 4,\n 19\n ]],\n totalDataCodewords: 76,\n errorCodewordsPerBlock: 24\n },\n H: {\n groups: [[\n 4,\n 15\n ]],\n totalDataCodewords: 60,\n errorCodewordsPerBlock: 28\n }\n },\n {\n L: {\n groups: [[\n 2,\n 78\n ]],\n totalDataCodewords: 156,\n errorCodewordsPerBlock: 20\n },\n M: {\n groups: [[\n 4,\n 31\n ]],\n totalDataCodewords: 124,\n errorCodewordsPerBlock: 18\n },\n Q: {\n groups: [\n [\n 2,\n 14\n ],\n [\n 4,\n 15\n ]\n ],\n totalDataCodewords: 88,\n errorCodewordsPerBlock: 18\n },\n H: {\n groups: [\n [\n 4,\n 13\n ],\n [\n 1,\n 14\n ]\n ],\n totalDataCodewords: 66,\n errorCodewordsPerBlock: 26\n }\n },\n {\n L: {\n groups: [[\n 2,\n 97\n ]],\n totalDataCodewords: 194,\n errorCodewordsPerBlock: 24\n },\n M: {\n groups: [\n [\n 2,\n 38\n ],\n [\n 2,\n 39\n ]\n ],\n totalDataCodewords: 154,\n errorCodewordsPerBlock: 22\n },\n Q: {\n groups: [\n [\n 4,\n 18\n ],\n [\n 2,\n 19\n ]\n ],\n totalDataCodewords: 110,\n errorCodewordsPerBlock: 22\n },\n H: {\n groups: [\n [\n 4,\n 14\n ],\n [\n 2,\n 15\n ]\n ],\n totalDataCodewords: 86,\n errorCodewordsPerBlock: 26\n }\n },\n {\n L: {\n groups: [[\n 2,\n 116\n ]],\n totalDataCodewords: 232,\n errorCodewordsPerBlock: 30\n },\n M: {\n groups: [\n [\n 3,\n 36\n ],\n [\n 2,\n 37\n ]\n ],\n totalDataCodewords: 182,\n errorCodewordsPerBlock: 22\n },\n Q: {\n groups: [\n [\n 4,\n 16\n ],\n [\n 4,\n 17\n ]\n ],\n totalDataCodewords: 132,\n errorCodewordsPerBlock: 20\n },\n H: {\n groups: [\n [\n 4,\n 12\n ],\n [\n 4,\n 13\n ]\n ],\n totalDataCodewords: 100,\n errorCodewordsPerBlock: 24\n }\n },\n {\n L: {\n groups: [\n [\n 2,\n 68\n ],\n [\n 2,\n 69\n ]\n ],\n totalDataCodewords: 274,\n errorCodewordsPerBlock: 18\n },\n M: {\n groups: [\n [\n 4,\n 43\n ],\n [\n 1,\n 44\n ]\n ],\n totalDataCodewords: 216,\n errorCodewordsPerBlock: 26\n },\n Q: {\n groups: [\n [\n 6,\n 19\n ],\n [\n 2,\n 20\n ]\n ],\n totalDataCodewords: 154,\n errorCodewordsPerBlock: 24\n },\n H: {\n groups: [\n [\n 6,\n 15\n ],\n [\n 2,\n 16\n ]\n ],\n totalDataCodewords: 122,\n errorCodewordsPerBlock: 28\n }\n },\n {\n L: {\n groups: [[\n 4,\n 81\n ]],\n totalDataCodewords: 324,\n errorCodewordsPerBlock: 20\n },\n M: {\n groups: [\n [\n 1,\n 50\n ],\n [\n 4,\n 51\n ]\n ],\n totalDataCodewords: 254,\n errorCodewordsPerBlock: 30\n },\n Q: {\n groups: [\n [\n 4,\n 22\n ],\n [\n 4,\n 23\n ]\n ],\n totalDataCodewords: 180,\n errorCodewordsPerBlock: 28\n },\n H: {\n groups: [\n [\n 3,\n 12\n ],\n [\n 8,\n 13\n ]\n ],\n totalDataCodewords: 140,\n errorCodewordsPerBlock: 24\n }\n },\n {\n L: {\n groups: [\n [\n 2,\n 92\n ],\n [\n 2,\n 93\n ]\n ],\n totalDataCodewords: 370,\n errorCodewordsPerBlock: 24\n },\n M: {\n groups: [\n [\n 6,\n 36\n ],\n [\n 2,\n 37\n ]\n ],\n totalDataCodewords: 290,\n errorCodewordsPerBlock: 22\n },\n Q: {\n groups: [\n [\n 4,\n 20\n ],\n [\n 6,\n 21\n ]\n ],\n totalDataCodewords: 206,\n errorCodewordsPerBlock: 26\n },\n H: {\n groups: [\n [\n 7,\n 14\n ],\n [\n 4,\n 15\n ]\n ],\n totalDataCodewords: 158,\n errorCodewordsPerBlock: 28\n }\n },\n {\n L: {\n groups: [[\n 4,\n 107\n ]],\n totalDataCodewords: 428,\n errorCodewordsPerBlock: 26\n },\n M: {\n groups: [\n [\n 8,\n 37\n ],\n [\n 1,\n 38\n ]\n ],\n totalDataCodewords: 334,\n errorCodewordsPerBlock: 22\n },\n Q: {\n groups: [\n [\n 8,\n 20\n ],\n [\n 4,\n 21\n ]\n ],\n totalDataCodewords: 244,\n errorCodewordsPerBlock: 24\n },\n H: {\n groups: [\n [\n 12,\n 11\n ],\n [\n 4,\n 12\n ]\n ],\n totalDataCodewords: 180,\n errorCodewordsPerBlock: 22\n }\n },\n {\n L: {\n groups: [\n [\n 3,\n 115\n ],\n [\n 1,\n 116\n ]\n ],\n totalDataCodewords: 461,\n errorCodewordsPerBlock: 30\n },\n M: {\n groups: [\n [\n 4,\n 40\n ],\n [\n 5,\n 41\n ]\n ],\n totalDataCodewords: 365,\n errorCodewordsPerBlock: 24\n },\n Q: {\n groups: [\n [\n 11,\n 16\n ],\n [\n 5,\n 17\n ]\n ],\n totalDataCodewords: 261,\n errorCodewordsPerBlock: 20\n },\n H: {\n groups: [\n [\n 11,\n 12\n ],\n [\n 5,\n 13\n ]\n ],\n totalDataCodewords: 197,\n errorCodewordsPerBlock: 24\n }\n },\n {\n L: {\n groups: [\n [\n 5,\n 87\n ],\n [\n 1,\n 88\n ]\n ],\n totalDataCodewords: 523,\n errorCodewordsPerBlock: 22\n },\n M: {\n groups: [\n [\n 5,\n 41\n ],\n [\n 5,\n 42\n ]\n ],\n totalDataCodewords: 415,\n errorCodewordsPerBlock: 24\n },\n Q: {\n groups: [\n [\n 5,\n 24\n ],\n [\n 7,\n 25\n ]\n ],\n totalDataCodewords: 295,\n errorCodewordsPerBlock: 30\n },\n H: {\n groups: [\n [\n 11,\n 12\n ],\n [\n 7,\n 13\n ]\n ],\n totalDataCodewords: 223,\n errorCodewordsPerBlock: 24\n }\n },\n {\n L: {\n groups: [\n [\n 5,\n 98\n ],\n [\n 1,\n 99\n ]\n ],\n totalDataCodewords: 589,\n errorCodewordsPerBlock: 24\n },\n M: {\n groups: [\n [\n 7,\n 45\n ],\n [\n 3,\n 46\n ]\n ],\n totalDataCodewords: 453,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [\n 15,\n 19\n ],\n [\n 2,\n 20\n ]\n ],\n totalDataCodewords: 325,\n errorCodewordsPerBlock: 24\n },\n H: {\n groups: [\n [\n 3,\n 15\n ],\n [\n 13,\n 16\n ]\n ],\n totalDataCodewords: 253,\n errorCodewordsPerBlock: 30\n }\n },\n {\n L: {\n groups: [\n [\n 1,\n 107\n ],\n [\n 5,\n 108\n ]\n ],\n totalDataCodewords: 647,\n errorCodewordsPerBlock: 28\n },\n M: {\n groups: [\n [\n 10,\n 46\n ],\n [\n 1,\n 47\n ]\n ],\n totalDataCodewords: 507,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [\n 1,\n 22\n ],\n [\n 15,\n 23\n ]\n ],\n totalDataCodewords: 367,\n errorCodewordsPerBlock: 28\n },\n H: {\n groups: [\n [\n 2,\n 14\n ],\n [\n 17,\n 15\n ]\n ],\n totalDataCodewords: 283,\n errorCodewordsPerBlock: 28\n }\n },\n {\n L: {\n groups: [\n [\n 5,\n 120\n ],\n [\n 1,\n 121\n ]\n ],\n totalDataCodewords: 721,\n errorCodewordsPerBlock: 30\n },\n M: {\n groups: [\n [\n 9,\n 43\n ],\n [\n 4,\n 44\n ]\n ],\n totalDataCodewords: 563,\n errorCodewordsPerBlock: 26\n },\n Q: {\n groups: [\n [\n 17,\n 22\n ],\n [\n 1,\n 23\n ]\n ],\n totalDataCodewords: 397,\n errorCodewordsPerBlock: 28\n },\n H: {\n groups: [\n [\n 2,\n 14\n ],\n [\n 19,\n 15\n ]\n ],\n totalDataCodewords: 313,\n errorCodewordsPerBlock: 28\n }\n },\n {\n L: {\n groups: [\n [\n 3,\n 113\n ],\n [\n 4,\n 114\n ]\n ],\n totalDataCodewords: 795,\n errorCodewordsPerBlock: 28\n },\n M: {\n groups: [\n [\n 3,\n 44\n ],\n [\n 11,\n 45\n ]\n ],\n totalDataCodewords: 627,\n errorCodewordsPerBlock: 26\n },\n Q: {\n groups: [\n [\n 17,\n 21\n ],\n [\n 4,\n 22\n ]\n ],\n totalDataCodewords: 445,\n errorCodewordsPerBlock: 26\n },\n H: {\n groups: [\n [\n 9,\n 13\n ],\n [\n 16,\n 14\n ]\n ],\n totalDataCodewords: 341,\n errorCodewordsPerBlock: 26\n }\n },\n {\n L: {\n groups: [\n [\n 3,\n 107\n ],\n [\n 5,\n 108\n ]\n ],\n totalDataCodewords: 861,\n errorCodewordsPerBlock: 28\n },\n M: {\n groups: [\n [\n 3,\n 41\n ],\n [\n 13,\n 42\n ]\n ],\n totalDataCodewords: 669,\n errorCodewordsPerBlock: 26\n },\n Q: {\n groups: [\n [\n 15,\n 24\n ],\n [\n 5,\n 25\n ]\n ],\n totalDataCodewords: 485,\n errorCodewordsPerBlock: 30\n },\n H: {\n groups: [\n [\n 15,\n 15\n ],\n [\n 10,\n 16\n ]\n ],\n totalDataCodewords: 385,\n errorCodewordsPerBlock: 28\n }\n },\n {\n L: {\n groups: [\n [\n 4,\n 116\n ],\n [\n 4,\n 117\n ]\n ],\n totalDataCodewords: 932,\n errorCodewordsPerBlock: 28\n },\n M: {\n groups: [[\n 17,\n 42\n ]],\n totalDataCodewords: 714,\n errorCodewordsPerBlock: 26\n },\n Q: {\n groups: [\n [\n 17,\n 22\n ],\n [\n 6,\n 23\n ]\n ],\n totalDataCodewords: 512,\n errorCodewordsPerBlock: 28\n },\n H: {\n groups: [\n [\n 19,\n 16\n ],\n [\n 6,\n 17\n ]\n ],\n totalDataCodewords: 406,\n errorCodewordsPerBlock: 30\n }\n },\n {\n L: {\n groups: [\n [\n 2,\n 111\n ],\n [\n 7,\n 112\n ]\n ],\n totalDataCodewords: 1006,\n errorCodewordsPerBlock: 28\n },\n M: {\n groups: [[\n 17,\n 46\n ]],\n totalDataCodewords: 782,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [\n 7,\n 24\n ],\n [\n 16,\n 25\n ]\n ],\n totalDataCodewords: 568,\n errorCodewordsPerBlock: 30\n },\n H: {\n groups: [[\n 34,\n 13\n ]],\n totalDataCodewords: 442,\n errorCodewordsPerBlock: 24\n }\n },\n {\n L: {\n groups: [\n [\n 4,\n 121\n ],\n [\n 5,\n 122\n ]\n ],\n totalDataCodewords: 1094,\n errorCodewordsPerBlock: 30\n },\n M: {\n groups: [\n [\n 4,\n 47\n ],\n [\n 14,\n 48\n ]\n ],\n totalDataCodewords: 860,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [\n 11,\n 24\n ],\n [\n 14,\n 25\n ]\n ],\n totalDataCodewords: 614,\n errorCodewordsPerBlock: 30\n },\n H: {\n groups: [\n [\n 16,\n 15\n ],\n [\n 14,\n 16\n ]\n ],\n totalDataCodewords: 464,\n errorCodewordsPerBlock: 30\n }\n },\n {\n L: {\n groups: [\n [\n 6,\n 117\n ],\n [\n 4,\n 118\n ]\n ],\n totalDataCodewords: 1174,\n errorCodewordsPerBlock: 30\n },\n M: {\n groups: [\n [\n 6,\n 45\n ],\n [\n 14,\n 46\n ]\n ],\n totalDataCodewords: 914,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [\n 11,\n 24\n ],\n [\n 16,\n 25\n ]\n ],\n totalDataCodewords: 664,\n errorCodewordsPerBlock: 30\n },\n H: {\n groups: [\n [\n 30,\n 16\n ],\n [\n 2,\n 17\n ]\n ],\n totalDataCodewords: 514,\n errorCodewordsPerBlock: 30\n }\n },\n {\n L: {\n groups: [\n [\n 8,\n 106\n ],\n [\n 4,\n 107\n ]\n ],\n totalDataCodewords: 1276,\n errorCodewordsPerBlock: 26\n },\n M: {\n groups: [\n [\n 8,\n 47\n ],\n [\n 13,\n 48\n ]\n ],\n totalDataCodewords: 1000,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [\n 7,\n 24\n ],\n [\n 22,\n 25\n ]\n ],\n totalDataCodewords: 718,\n errorCodewordsPerBlock: 30\n },\n H: {\n groups: [\n [\n 22,\n 15\n ],\n [\n 13,\n 16\n ]\n ],\n totalDataCodewords: 538,\n errorCodewordsPerBlock: 30\n }\n },\n {\n L: {\n groups: [\n [\n 10,\n 114\n ],\n [\n 2,\n 115\n ]\n ],\n totalDataCodewords: 1370,\n errorCodewordsPerBlock: 28\n },\n M: {\n groups: [\n [\n 19,\n 46\n ],\n [\n 4,\n 47\n ]\n ],\n totalDataCodewords: 1062,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [\n 28,\n 22\n ],\n [\n 6,\n 23\n ]\n ],\n totalDataCodewords: 754,\n errorCodewordsPerBlock: 28\n },\n H: {\n groups: [\n [\n 33,\n 16\n ],\n [\n 4,\n 17\n ]\n ],\n totalDataCodewords: 596,\n errorCodewordsPerBlock: 30\n }\n },\n {\n L: {\n groups: [\n [\n 8,\n 122\n ],\n [\n 4,\n 123\n ]\n ],\n totalDataCodewords: 1468,\n errorCodewordsPerBlock: 30\n },\n M: {\n groups: [\n [\n 22,\n 45\n ],\n [\n 3,\n 46\n ]\n ],\n totalDataCodewords: 1128,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [\n 8,\n 23\n ],\n [\n 26,\n 24\n ]\n ],\n totalDataCodewords: 808,\n errorCodewordsPerBlock: 30\n },\n H: {\n groups: [\n [\n 12,\n 15\n ],\n [\n 28,\n 16\n ]\n ],\n totalDataCodewords: 628,\n errorCodewordsPerBlock: 30\n }\n },\n {\n L: {\n groups: [\n [\n 3,\n 117\n ],\n [\n 10,\n 118\n ]\n ],\n totalDataCodewords: 1531,\n errorCodewordsPerBlock: 30\n },\n M: {\n groups: [\n [\n 3,\n 45\n ],\n [\n 23,\n 46\n ]\n ],\n totalDataCodewords: 1193,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [\n 4,\n 24\n ],\n [\n 31,\n 25\n ]\n ],\n totalDataCodewords: 871,\n errorCodewordsPerBlock: 30\n },\n H: {\n groups: [\n [\n 11,\n 15\n ],\n [\n 31,\n 16\n ]\n ],\n totalDataCodewords: 661,\n errorCodewordsPerBlock: 30\n }\n },\n {\n L: {\n groups: [\n [\n 7,\n 116\n ],\n [\n 7,\n 117\n ]\n ],\n totalDataCodewords: 1631,\n errorCodewordsPerBlock: 30\n },\n M: {\n groups: [\n [\n 21,\n 45\n ],\n [\n 7,\n 46\n ]\n ],\n totalDataCodewords: 1267,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [\n 1,\n 23\n ],\n [\n 37,\n 24\n ]\n ],\n totalDataCodewords: 911,\n errorCodewordsPerBlock: 30\n },\n H: {\n groups: [\n [\n 19,\n 15\n ],\n [\n 26,\n 16\n ]\n ],\n totalDataCodewords: 701,\n errorCodewordsPerBlock: 30\n }\n },\n {\n L: {\n groups: [\n [\n 5,\n 115\n ],\n [\n 10,\n 116\n ]\n ],\n totalDataCodewords: 1735,\n errorCodewordsPerBlock: 30\n },\n M: {\n groups: [\n [\n 19,\n 47\n ],\n [\n 10,\n 48\n ]\n ],\n totalDataCodewords: 1373,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [\n 15,\n 24\n ],\n [\n 25,\n 25\n ]\n ],\n totalDataCodewords: 985,\n errorCodewordsPerBlock: 30\n },\n H: {\n groups: [\n [\n 23,\n 15\n ],\n [\n 25,\n 16\n ]\n ],\n totalDataCodewords: 745,\n errorCodewordsPerBlock: 30\n }\n },\n {\n L: {\n groups: [\n [\n 13,\n 115\n ],\n [\n 3,\n 116\n ]\n ],\n totalDataCodewords: 1843,\n errorCodewordsPerBlock: 30\n },\n M: {\n groups: [\n [\n 2,\n 46\n ],\n [\n 29,\n 47\n ]\n ],\n totalDataCodewords: 1455,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [\n 42,\n 24\n ],\n [\n 1,\n 25\n ]\n ],\n totalDataCodewords: 1033,\n errorCodewordsPerBlock: 30\n },\n H: {\n groups: [\n [\n 23,\n 15\n ],\n [\n 28,\n 16\n ]\n ],\n totalDataCodewords: 793,\n errorCodewordsPerBlock: 30\n }\n },\n {\n L: {\n groups: [[\n 17,\n 115\n ]],\n totalDataCodewords: 1955,\n errorCodewordsPerBlock: 30\n },\n M: {\n groups: [\n [\n 10,\n 46\n ],\n [\n 23,\n 47\n ]\n ],\n totalDataCodewords: 1541,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [\n 10,\n 24\n ],\n [\n 35,\n 25\n ]\n ],\n totalDataCodewords: 1115,\n errorCodewordsPerBlock: 30\n },\n H: {\n groups: [\n [\n 19,\n 15\n ],\n [\n 35,\n 16\n ]\n ],\n totalDataCodewords: 845,\n errorCodewordsPerBlock: 30\n }\n },\n {\n L: {\n groups: [\n [\n 17,\n 115\n ],\n [\n 1,\n 116\n ]\n ],\n totalDataCodewords: 2071,\n errorCodewordsPerBlock: 30\n },\n M: {\n groups: [\n [\n 14,\n 46\n ],\n [\n 21,\n 47\n ]\n ],\n totalDataCodewords: 1631,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [\n 29,\n 24\n ],\n [\n 19,\n 25\n ]\n ],\n totalDataCodewords: 1171,\n errorCodewordsPerBlock: 30\n },\n H: {\n groups: [\n [\n 11,\n 15\n ],\n [\n 46,\n 16\n ]\n ],\n totalDataCodewords: 901,\n errorCodewordsPerBlock: 30\n }\n },\n {\n L: {\n groups: [\n [\n 13,\n 115\n ],\n [\n 6,\n 116\n ]\n ],\n totalDataCodewords: 2191,\n errorCodewordsPerBlock: 30\n },\n M: {\n groups: [\n [\n 14,\n 46\n ],\n [\n 23,\n 47\n ]\n ],\n totalDataCodewords: 1725,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [\n 44,\n 24\n ],\n [\n 7,\n 25\n ]\n ],\n totalDataCodewords: 1231,\n errorCodewordsPerBlock: 30\n },\n H: {\n groups: [\n [\n 59,\n 16\n ],\n [\n 1,\n 17\n ]\n ],\n totalDataCodewords: 961,\n errorCodewordsPerBlock: 30\n }\n },\n {\n L: {\n groups: [\n [\n 12,\n 121\n ],\n [\n 7,\n 122\n ]\n ],\n totalDataCodewords: 2306,\n errorCodewordsPerBlock: 30\n },\n M: {\n groups: [\n [\n 12,\n 47\n ],\n [\n 26,\n 48\n ]\n ],\n totalDataCodewords: 1812,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [\n 39,\n 24\n ],\n [\n 14,\n 25\n ]\n ],\n totalDataCodewords: 1286,\n errorCodewordsPerBlock: 30\n },\n H: {\n groups: [\n [\n 22,\n 15\n ],\n [\n 41,\n 16\n ]\n ],\n totalDataCodewords: 986,\n errorCodewordsPerBlock: 30\n }\n },\n {\n L: {\n groups: [\n [\n 6,\n 121\n ],\n [\n 14,\n 122\n ]\n ],\n totalDataCodewords: 2434,\n errorCodewordsPerBlock: 30\n },\n M: {\n groups: [\n [\n 6,\n 47\n ],\n [\n 34,\n 48\n ]\n ],\n totalDataCodewords: 1914,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [\n 46,\n 24\n ],\n [\n 10,\n 25\n ]\n ],\n totalDataCodewords: 1354,\n errorCodewordsPerBlock: 30\n },\n H: {\n groups: [\n [\n 2,\n 15\n ],\n [\n 64,\n 16\n ]\n ],\n totalDataCodewords: 1054,\n errorCodewordsPerBlock: 30\n }\n },\n {\n L: {\n groups: [\n [\n 17,\n 122\n ],\n [\n 4,\n 123\n ]\n ],\n totalDataCodewords: 2566,\n errorCodewordsPerBlock: 30\n },\n M: {\n groups: [\n [\n 29,\n 46\n ],\n [\n 14,\n 47\n ]\n ],\n totalDataCodewords: 1992,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [\n 49,\n 24\n ],\n [\n 10,\n 25\n ]\n ],\n totalDataCodewords: 1426,\n errorCodewordsPerBlock: 30\n },\n H: {\n groups: [\n [\n 24,\n 15\n ],\n [\n 46,\n 16\n ]\n ],\n totalDataCodewords: 1096,\n errorCodewordsPerBlock: 30\n }\n },\n {\n L: {\n groups: [\n [\n 4,\n 122\n ],\n [\n 18,\n 123\n ]\n ],\n totalDataCodewords: 2702,\n errorCodewordsPerBlock: 30\n },\n M: {\n groups: [\n [\n 13,\n 46\n ],\n [\n 32,\n 47\n ]\n ],\n totalDataCodewords: 2102,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [\n 48,\n 24\n ],\n [\n 14,\n 25\n ]\n ],\n totalDataCodewords: 1502,\n errorCodewordsPerBlock: 30\n },\n H: {\n groups: [\n [\n 42,\n 15\n ],\n [\n 32,\n 16\n ]\n ],\n totalDataCodewords: 1142,\n errorCodewordsPerBlock: 30\n }\n },\n {\n L: {\n groups: [\n [\n 20,\n 117\n ],\n [\n 4,\n 118\n ]\n ],\n totalDataCodewords: 2812,\n errorCodewordsPerBlock: 30\n },\n M: {\n groups: [\n [\n 40,\n 47\n ],\n [\n 7,\n 48\n ]\n ],\n totalDataCodewords: 2216,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [\n 43,\n 24\n ],\n [\n 22,\n 25\n ]\n ],\n totalDataCodewords: 1582,\n errorCodewordsPerBlock: 30\n },\n H: {\n groups: [\n [\n 10,\n 15\n ],\n [\n 67,\n 16\n ]\n ],\n totalDataCodewords: 1222,\n errorCodewordsPerBlock: 30\n }\n },\n {\n L: {\n groups: [\n [\n 19,\n 118\n ],\n [\n 6,\n 119\n ]\n ],\n totalDataCodewords: 2956,\n errorCodewordsPerBlock: 30\n },\n M: {\n groups: [\n [\n 18,\n 47\n ],\n [\n 31,\n 48\n ]\n ],\n totalDataCodewords: 2334,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [\n 34,\n 24\n ],\n [\n 34,\n 25\n ]\n ],\n totalDataCodewords: 1666,\n errorCodewordsPerBlock: 30\n },\n H: {\n groups: [\n [\n 20,\n 15\n ],\n [\n 61,\n 16\n ]\n ],\n totalDataCodewords: 1276,\n errorCodewordsPerBlock: 30\n }\n }\n ], finderPattern = [\n 1,\n 0,\n 1,\n 1,\n 1\n ], alignmentPattern = [\n 1,\n 0,\n 1\n ], errorCorrectionPatterns = {\n L: '01',\n M: '00',\n Q: '11',\n H: '10'\n }, formatMaskPattern = '101010000010010', formatGeneratorPolynomial = '10100110111', versionGeneratorPolynomial = '1111100100101', paddingCodewords = [\n '11101100',\n '00010001'\n ], finderPatternValue = 93, maskPatternConditions = [\n function (row, column) {\n return (row + column) % 2 === 0;\n },\n function (row) {\n return row % 2 === 0;\n },\n function (row, column) {\n return column % 3 === 0;\n },\n function (row, column) {\n return (row + column) % 3 === 0;\n },\n function (row, column) {\n return (Math.floor(row / 2) + Math.floor(column / 3)) % 2 === 0;\n },\n function (row, column) {\n return row * column % 2 + row * column % 3 === 0;\n },\n function (row, column) {\n return (row * column % 2 + row * column % 3) % 2 === 0;\n },\n function (row, column) {\n return ((row + column) % 2 + row * column % 3) % 2 === 0;\n }\n ], numberRegex = /^\\d+/, alphaPattern = 'A-Z0-9 $%*+./:-', alphaExclusiveSet = 'A-Z $%*+./:-', alphaRegex = new RegExp('^[' + alphaExclusiveSet + ']+'), alphaNumericRegex = new RegExp('^[' + alphaPattern + ']+'), byteRegex = new RegExp('^[^' + alphaPattern + ']+'), initMinNumericBeforeAlpha = 8, initMinNumericBeforeByte = 5, initMinAlphaBeforeByte = 8, minNumericBeforeAlpha = 17, minNumericBeforeByte = 9, minAlphaBeforeByte = 16, round = Math.round;\n function toDecimal(value) {\n return parseInt(value, 2);\n }\n function toBitsString(value, length) {\n var result = Number(value).toString(2);\n if (result.length < length) {\n result = new Array(length - result.length + 1).join(0) + result;\n }\n return result;\n }\n function splitInto(str, n) {\n var result = [], idx = 0;\n while (idx < str.length) {\n result.push(str.substring(idx, idx + n));\n idx += n;\n }\n return result;\n }\n var QRDataMode = kendo.Class.extend({\n getVersionIndex: function (version) {\n if (version < 10) {\n return 0;\n } else if (version > 26) {\n return 2;\n }\n return 1;\n },\n getBitsCharacterCount: function (version) {\n var mode = this;\n return mode.bitsInCharacterCount[mode.getVersionIndex(version || 40)];\n },\n getModeCountString: function (length, version) {\n var mode = this;\n return mode.modeIndicator + toBitsString(length, mode.getBitsCharacterCount(version));\n },\n encode: function () {\n },\n getStringBitsLength: function () {\n },\n getValue: function () {\n },\n modeIndicator: '',\n bitsInCharacterCount: []\n });\n var modes = {};\n modes[NUMERIC] = QRDataMode.extend({\n bitsInCharacterCount: [\n 10,\n 12,\n 14\n ],\n modeIndicator: '0001',\n getValue: function (character) {\n return parseInt(character, 10);\n },\n encode: function (str, version) {\n var mode = this, parts = splitInto(str, 3), result = mode.getModeCountString(str.length, version);\n for (var i = 0; i < parts.length - 1; i++) {\n result += toBitsString(parts[i], 10);\n }\n return result + toBitsString(parts[i], 1 + 3 * parts[i].length);\n },\n getStringBitsLength: function (inputLength, version) {\n var mod3 = inputLength % 3;\n return 4 + this.getBitsCharacterCount(version) + 10 * Math.floor(inputLength / 3) + 3 * mod3 + (mod3 === 0 ? 0 : 1);\n }\n });\n modes[ALPHA_NUMERIC] = QRDataMode.extend({\n characters: {\n '0': 0,\n '1': 1,\n '2': 2,\n '3': 3,\n '4': 4,\n '5': 5,\n '6': 6,\n '7': 7,\n '8': 8,\n '9': 9,\n 'A': 10,\n 'B': 11,\n 'C': 12,\n 'D': 13,\n 'E': 14,\n 'F': 15,\n 'G': 16,\n 'H': 17,\n 'I': 18,\n 'J': 19,\n 'K': 20,\n 'L': 21,\n 'M': 22,\n 'N': 23,\n 'O': 24,\n 'P': 25,\n 'Q': 26,\n 'R': 27,\n 'S': 28,\n 'T': 29,\n 'U': 30,\n 'V': 31,\n 'W': 32,\n 'X': 33,\n 'Y': 34,\n 'Z': 35,\n ' ': 36,\n '$': 37,\n '%': 38,\n '*': 39,\n '+': 40,\n '-': 41,\n '.': 42,\n '/': 43,\n ':': 44\n },\n bitsInCharacterCount: [\n 9,\n 11,\n 13\n ],\n modeIndicator: '0010',\n getValue: function (character) {\n return this.characters[character];\n },\n encode: function (str, version) {\n var mode = this, parts = splitInto(str, 2), result = mode.getModeCountString(str.length, version), value;\n for (var i = 0; i < parts.length - 1; i++) {\n value = 45 * mode.getValue(parts[i].charAt(0)) + mode.getValue(parts[i].charAt(1));\n result += toBitsString(value, 11);\n }\n value = parts[i].length == 2 ? 45 * mode.getValue(parts[i].charAt(0)) + mode.getValue(parts[i].charAt(1)) : mode.getValue(parts[i].charAt(0));\n return result + toBitsString(value, 1 + 5 * parts[i].length);\n },\n getStringBitsLength: function (inputLength, version) {\n return 4 + this.getBitsCharacterCount(version) + 11 * Math.floor(inputLength / 2) + 6 * (inputLength % 2);\n }\n });\n modes[BYTE] = QRDataMode.extend({\n bitsInCharacterCount: [\n 8,\n 16,\n 16\n ],\n modeIndicator: '0100',\n getValue: function (character) {\n var code = character.charCodeAt(0);\n if (code <= 127 || 160 <= code && code <= 255) {\n return code;\n } else {\n throw new Error('Unsupported character: ' + character);\n }\n },\n encode: function (str, version) {\n var mode = this, result = mode.getModeCountString(str.length, version);\n for (var i = 0; i < str.length; i++) {\n result += toBitsString(mode.getValue(str.charAt(i)), 8);\n }\n return result;\n },\n getStringBitsLength: function (inputLength, version) {\n return 4 + this.getBitsCharacterCount(version) + 8 * inputLength;\n }\n });\n var modeInstances = {};\n for (var mode in modes) {\n modeInstances[mode] = new modes[mode]();\n }\n var FreeCellVisitor = function (matrix) {\n var that = this, row = matrix.length - 1, column = matrix.length - 1, startColumn = column, dir = -1, c = 0;\n that.move = function () {\n row += dir * c;\n c ^= 1;\n column = startColumn - c;\n };\n that.getNextCell = function () {\n while (matrix[row][column] !== undefined) {\n that.move();\n if (row < 0 || row >= matrix.length) {\n dir = -dir;\n startColumn -= startColumn != 8 ? 2 : 3;\n column = startColumn;\n row = dir < 0 ? matrix.length - 1 : 0;\n }\n }\n return {\n row: row,\n column: column\n };\n };\n that.getNextRemainderCell = function () {\n that.move();\n if (matrix[row][column] === undefined) {\n return {\n row: row,\n column: column\n };\n }\n };\n };\n function fillFunctionCell(matrices, bit, x, y) {\n for (var i = 0; i < matrices.length; i++) {\n matrices[i][x][y] = bit;\n }\n }\n function fillDataCell(matrices, bit, x, y) {\n for (var i = 0; i < maskPatternConditions.length; i++) {\n matrices[i][x][y] = maskPatternConditions[i](x, y) ? bit ^ 1 : parseInt(bit, 10);\n }\n }\n var fillData = function (matrices, blocks) {\n var cellVisitor = new FreeCellVisitor(matrices[0]), block, codewordIdx, cell;\n for (var blockIdx = 0; blockIdx < blocks.length; blockIdx++) {\n block = blocks[blockIdx];\n codewordIdx = 0;\n while (block.length > 0) {\n for (var i = 0; i < block.length; i++) {\n for (var j = 0; j < 8; j++) {\n cell = cellVisitor.getNextCell();\n fillDataCell(matrices, block[i][codewordIdx].charAt(j), cell.row, cell.column);\n }\n }\n codewordIdx++;\n while (block[0] && codewordIdx == block[0].length) {\n block.splice(0, 1);\n }\n }\n }\n while (cell = cellVisitor.getNextRemainderCell()) {\n fillDataCell(matrices, 0, cell.row, cell.column);\n }\n };\n var padDataString = function (dataString, totalDataCodewords) {\n var dataBitsCount = totalDataCodewords * 8, terminatorIndex = 0, paddingCodewordIndex = 0;\n while (dataString.length < dataBitsCount && terminatorIndex < terminator.length) {\n dataString += terminator.charAt(terminatorIndex++);\n }\n if (dataString.length % 8 !== 0) {\n dataString += new Array(9 - dataString.length % 8).join('0');\n }\n while (dataString.length < dataBitsCount) {\n dataString += paddingCodewords[paddingCodewordIndex];\n paddingCodewordIndex ^= 1;\n }\n return dataString;\n };\n function generatePowersOfTwo() {\n var result;\n for (var power = 1; power < 255; power++) {\n result = powersOfTwoResult[power - 1] * 2;\n if (result > 255) {\n result = result ^ 285;\n }\n powersOfTwoResult[power] = result;\n powersOfTwo[result] = power;\n }\n result = powersOfTwoResult[power - 1] * 2 ^ 285;\n powersOfTwoResult[power] = result;\n powersOfTwoResult[-1] = 0;\n }\n var xorPolynomials = function (x, y) {\n var result = [], idx = x.length - 2;\n for (var i = idx; i >= 0; i--) {\n result[i] = x[i] ^ y[i];\n }\n return result;\n };\n var multiplyPolynomials = function (x, y) {\n var result = [];\n for (var i = 0; i < x.length; i++) {\n for (var j = 0; j < y.length; j++) {\n if (result[i + j] === undefined) {\n result[i + j] = (x[i] + (y[j] >= 0 ? y[j] : 0)) % 255;\n } else {\n result[i + j] = powersOfTwo[powersOfTwoResult[result[i + j]] ^ powersOfTwoResult[(x[i] + y[j]) % 255]];\n }\n }\n }\n return result;\n };\n function generateGeneratorPolynomials() {\n var maxErrorCorrectionCodeWordsCount = 68;\n for (var idx = 2; idx <= maxErrorCorrectionCodeWordsCount; idx++) {\n var firstPolynomial = generatorPolynomials[idx - 1], secondPolynomial = [\n idx,\n 0\n ];\n generatorPolynomials[idx] = multiplyPolynomials(firstPolynomial, secondPolynomial);\n }\n }\n generatePowersOfTwo();\n generateGeneratorPolynomials();\n function multiplyByConstant(polynomial, power) {\n var result = [], idx = polynomial.length - 1;\n do {\n result[idx] = powersOfTwoResult[(polynomial[idx] + power) % 255];\n idx--;\n } while (polynomial[idx] !== undefined);\n return result;\n }\n var generateErrorCodewords = function (data, errorCodewordsCount) {\n var generator = generatorPolynomials[errorCodewordsCount - 1], result = new Array(errorCodewordsCount).concat(data), generatorPolynomial = new Array(result.length - generator.length).concat(generator), steps = data.length, errorCodewords = [], divisor, idx;\n for (idx = 0; idx < steps; idx++) {\n divisor = multiplyByConstant(generatorPolynomial, powersOfTwo[result[result.length - 1]]);\n generatorPolynomial.splice(0, 1);\n result = xorPolynomials(divisor, result);\n }\n for (idx = result.length - 1; idx >= 0; idx--) {\n errorCodewords[errorCodewordsCount - 1 - idx] = toBitsString(result[idx], 8);\n }\n return errorCodewords;\n };\n var getBlocks = function (dataStream, versionCodewordsInformation) {\n var codewordStart = 0, dataBlocks = [], errorBlocks = [], dataBlock, versionGroups = versionCodewordsInformation.groups, blockCodewordsCount, groupBlocksCount, messagePolynomial, codeword;\n for (var groupIdx = 0; groupIdx < versionGroups.length; groupIdx++) {\n groupBlocksCount = versionGroups[groupIdx][0];\n for (var blockIdx = 0; blockIdx < groupBlocksCount; blockIdx++) {\n blockCodewordsCount = versionGroups[groupIdx][1];\n dataBlock = [];\n messagePolynomial = [];\n for (var codewordIdx = 1; codewordIdx <= blockCodewordsCount; codewordIdx++) {\n codeword = dataStream.substring(codewordStart, codewordStart + 8);\n dataBlock.push(codeword);\n messagePolynomial[blockCodewordsCount - codewordIdx] = toDecimal(codeword);\n codewordStart += 8;\n }\n dataBlocks.push(dataBlock);\n errorBlocks.push(generateErrorCodewords(messagePolynomial, versionCodewordsInformation.errorCodewordsPerBlock));\n }\n }\n return [\n dataBlocks,\n errorBlocks\n ];\n };\n var chooseMode = function (str, minNumericBeforeAlpha, minNumericBeforeByte, minAlphaBeforeByte, previousMode) {\n var numeric = numberRegex.exec(str), numericMatch = numeric ? numeric[0] : '', alpha = alphaRegex.exec(str), alphaMatch = alpha ? alpha[0] : '', alphaNumeric = alphaNumericRegex.exec(str), alphaNumericMatch = alphaNumeric ? alphaNumeric[0] : '', mode, modeString;\n if (numericMatch && (numericMatch.length >= minNumericBeforeAlpha || str.length == numericMatch.length || numericMatch.length >= minNumericBeforeByte && !alphaNumericRegex.test(str.charAt(numericMatch.length)))) {\n mode = NUMERIC;\n modeString = numericMatch;\n } else if (alphaNumericMatch && (str.length == alphaNumericMatch.length || alphaNumericMatch.length >= minAlphaBeforeByte || previousMode == ALPHA_NUMERIC)) {\n mode = ALPHA_NUMERIC;\n modeString = numericMatch || alphaMatch;\n } else {\n mode = BYTE;\n if (alphaNumericMatch) {\n modeString = alphaNumericMatch + byteRegex.exec(str.substring(alphaNumericMatch.length))[0];\n } else {\n modeString = byteRegex.exec(str)[0];\n }\n }\n return {\n mode: mode,\n modeString: modeString\n };\n };\n var getModes = function (str) {\n var modes = [], previousMode, idx = 0;\n modes.push(chooseMode(str, initMinNumericBeforeAlpha, initMinNumericBeforeByte, initMinAlphaBeforeByte, previousMode));\n previousMode = modes[0].mode;\n str = str.substr(modes[0].modeString.length);\n while (str.length > 0) {\n var nextMode = chooseMode(str, minNumericBeforeAlpha, minNumericBeforeByte, minAlphaBeforeByte, previousMode);\n if (nextMode.mode != previousMode) {\n previousMode = nextMode.mode;\n modes.push(nextMode);\n idx++;\n } else {\n modes[idx].modeString += nextMode.modeString;\n }\n str = str.substr(nextMode.modeString.length);\n }\n return modes;\n };\n var getDataCodewordsCount = function (modes) {\n var length = 0, mode;\n for (var i = 0; i < modes.length; i++) {\n mode = modeInstances[modes[i].mode];\n length += mode.getStringBitsLength(modes[i].modeString.length);\n }\n return Math.ceil(length / 8);\n };\n var getVersion = function (dataCodewordsCount, errorCorrectionLevel) {\n var x = 0, y = versionsCodewordsInformation.length - 1, version = Math.floor(versionsCodewordsInformation.length / 2);\n do {\n if (dataCodewordsCount < versionsCodewordsInformation[version][errorCorrectionLevel].totalDataCodewords) {\n y = version;\n } else {\n x = version;\n }\n version = x + Math.floor((y - x) / 2);\n } while (y - x > 1);\n if (dataCodewordsCount <= versionsCodewordsInformation[x][errorCorrectionLevel].totalDataCodewords) {\n return version + 1;\n }\n return y + 1;\n };\n var getDataString = function (modes, version) {\n var dataString = '', mode;\n for (var i = 0; i < modes.length; i++) {\n mode = modeInstances[modes[i].mode];\n dataString += mode.encode(modes[i].modeString, version);\n }\n return dataString;\n };\n var encodeFormatInformation = function (format) {\n var formatNumber = toDecimal(format), encodedString, result = '';\n if (formatNumber === 0) {\n return '101010000010010';\n } else {\n encodedString = encodeBCH(toDecimal(format), formatGeneratorPolynomial, 15);\n }\n for (var i = 0; i < encodedString.length; i++) {\n result += encodedString.charAt(i) ^ formatMaskPattern.charAt(i);\n }\n return result;\n };\n var encodeBCH = function (value, generatorPolynomial, codeLength) {\n var generatorNumber = toDecimal(generatorPolynomial), polynomialLength = generatorPolynomial.length - 1, valueNumber = value << polynomialLength, length = codeLength - polynomialLength, valueString = toBitsString(value, length), result = dividePolynomials(valueNumber, generatorNumber);\n result = valueString + toBitsString(result, polynomialLength);\n return result;\n };\n var dividePolynomials = function (numberX, numberY) {\n var yLength = numberY.toString(2).length, xLength = numberX.toString(2).length;\n do {\n numberX ^= numberY << xLength - yLength;\n xLength = numberX.toString(2).length;\n } while (xLength >= yLength);\n return numberX;\n };\n function getNumberAt(str, idx) {\n return parseInt(str.charAt(idx), 10);\n }\n var initMatrices = function (version) {\n var matrices = [], modules = 17 + 4 * version;\n for (var i = 0; i < maskPatternConditions.length; i++) {\n matrices[i] = new Array(modules);\n for (var j = 0; j < modules; j++) {\n matrices[i][j] = new Array(modules);\n }\n }\n return matrices;\n };\n var addFormatInformation = function (matrices, formatString) {\n var matrix = matrices[0], x, y, idx = 0, length = formatString.length;\n for (x = 0, y = 8; x <= 8; x++) {\n if (x !== 6) {\n fillFunctionCell(matrices, getNumberAt(formatString, length - 1 - idx++), x, y);\n }\n }\n for (x = 8, y = 7; y >= 0; y--) {\n if (y !== 6) {\n fillFunctionCell(matrices, getNumberAt(formatString, length - 1 - idx++), x, y);\n }\n }\n idx = 0;\n for (y = matrix.length - 1, x = 8; y >= matrix.length - 8; y--) {\n fillFunctionCell(matrices, getNumberAt(formatString, length - 1 - idx++), x, y);\n }\n fillFunctionCell(matrices, 1, matrix.length - 8, 8);\n for (x = matrix.length - 7, y = 8; x < matrix.length; x++) {\n fillFunctionCell(matrices, getNumberAt(formatString, length - 1 - idx++), x, y);\n }\n };\n var encodeVersionInformation = function (version) {\n return encodeBCH(version, versionGeneratorPolynomial, 18);\n };\n var addVersionInformation = function (matrices, dataString) {\n var matrix = matrices[0], modules = matrix.length, x1 = 0, y1 = modules - 11, x2 = modules - 11, y2 = 0, quotient, mod, value;\n for (var idx = 0; idx < dataString.length; idx++) {\n quotient = Math.floor(idx / 3);\n mod = idx % 3;\n value = getNumberAt(dataString, dataString.length - idx - 1);\n fillFunctionCell(matrices, value, x1 + quotient, y1 + mod);\n fillFunctionCell(matrices, value, x2 + mod, y2 + quotient);\n }\n };\n var addCentricPattern = function (matrices, pattern, x, y) {\n var size = pattern.length + 2, length = pattern.length + 1, value;\n for (var i = 0; i < pattern.length; i++) {\n for (var j = i; j < size - i; j++) {\n value = pattern[i];\n fillFunctionCell(matrices, value, x + j, y + i);\n fillFunctionCell(matrices, value, x + i, y + j);\n fillFunctionCell(matrices, value, x + length - j, y + length - i);\n fillFunctionCell(matrices, value, x + length - i, y + length - j);\n }\n }\n };\n var addFinderSeparator = function (matrices, direction, x, y) {\n var nextX = x, nextY = y, matrix = matrices[0];\n do {\n fillFunctionCell(matrices, 0, nextX, y);\n fillFunctionCell(matrices, 0, x, nextY);\n nextX += direction[0];\n nextY += direction[1];\n } while (nextX >= 0 && nextX < matrix.length);\n };\n var addFinderPatterns = function (matrices) {\n var modules = matrices[0].length;\n addCentricPattern(matrices, finderPattern, 0, 0);\n addFinderSeparator(matrices, [\n -1,\n -1\n ], 7, 7);\n addCentricPattern(matrices, finderPattern, modules - 7, 0);\n addFinderSeparator(matrices, [\n 1,\n -1\n ], modules - 8, 7);\n addCentricPattern(matrices, finderPattern, 0, modules - 7);\n addFinderSeparator(matrices, [\n -1,\n 1\n ], 7, modules - 8);\n };\n var addAlignmentPatterns = function (matrices, version) {\n if (version < 2) {\n return;\n }\n var matrix = matrices[0], modules = matrix.length, pointsCount = Math.floor(version / 7), points = [6], startDistance, distance, idx = 0;\n if (startDistance = irregularAlignmentPatternsStartDistance[version]) {\n distance = (modules - 13 - startDistance) / pointsCount;\n } else {\n startDistance = distance = (modules - 13) / (pointsCount + 1);\n }\n points.push(points[idx++] + startDistance);\n while (points[idx] + distance < modules) {\n points.push(points[idx++] + distance);\n }\n for (var i = 0; i < points.length; i++) {\n for (var j = 0; j < points.length; j++) {\n if (matrix[points[i]][points[j]] === undefined) {\n addCentricPattern(matrices, alignmentPattern, points[i] - 2, points[j] - 2);\n }\n }\n }\n };\n var addTimingFunctions = function (matrices) {\n var row = 6, column = 6, value = 1, modules = matrices[0].length;\n for (var i = 8; i < modules - 8; i++) {\n fillFunctionCell(matrices, value, row, i);\n fillFunctionCell(matrices, value, i, column);\n value ^= 1;\n }\n };\n var scoreMaskMatrixes = function (matrices) {\n var scores = [], previousBits = [], darkModules = [], patterns = [], adjacentSameBits = [], matrix, i, row = 0, column = 1, modules = matrices[0].length;\n for (i = 0; i < matrices.length; i++) {\n scores[i] = 0;\n darkModules[i] = 0;\n adjacentSameBits[i] = [\n 0,\n 0\n ];\n patterns[i] = [\n 0,\n 0\n ];\n previousBits[i] = [];\n }\n for (i = 0; i < modules; i++) {\n for (var j = 0; j < modules; j++) {\n for (var k = 0; k < matrices.length; k++) {\n matrix = matrices[k];\n darkModules[k] += parseInt(matrix[i][j], 10);\n if (previousBits[k][row] === matrix[i][j] && i + 1 < modules && j - 1 >= 0 && matrix[i + 1][j] == previousBits[k][row] && matrix[i + 1][j - 1] == previousBits[k][row]) {\n scores[k] += 3;\n }\n scoreFinderPatternOccurance(k, patterns, scores, row, matrix[i][j]);\n scoreFinderPatternOccurance(k, patterns, scores, column, matrix[j][i]);\n scoreAdjacentSameBits(k, scores, previousBits, matrix[i][j], adjacentSameBits, row);\n scoreAdjacentSameBits(k, scores, previousBits, matrix[j][i], adjacentSameBits, column);\n }\n }\n }\n var total = modules * modules, minIdx, min = Number.MAX_VALUE;\n for (i = 0; i < scores.length; i++) {\n scores[i] += calculateDarkModulesRatioScore(darkModules[i], total);\n if (scores[i] < min) {\n min = scores[i];\n minIdx = i;\n }\n }\n return minIdx;\n };\n function scoreFinderPatternOccurance(idx, patterns, scores, rowColumn, bit) {\n patterns[idx][rowColumn] = (patterns[idx][rowColumn] << 1 ^ bit) % 128;\n if (patterns[idx][rowColumn] == finderPatternValue) {\n scores[idx] += 40;\n }\n }\n function scoreAdjacentSameBits(idx, scores, previousBits, bit, adjacentBits, rowColumn) {\n if (previousBits[idx][rowColumn] == bit) {\n adjacentBits[idx][rowColumn]++;\n } else {\n previousBits[idx][rowColumn] = bit;\n if (adjacentBits[idx][rowColumn] >= 5) {\n scores[idx] += 3 + adjacentBits[idx][rowColumn] - 5;\n }\n adjacentBits[idx][rowColumn] = 1;\n }\n }\n function calculateDarkModulesRatioScore(darkModules, total) {\n var percent = Math.floor(darkModules / total * 100), mod5 = percent % 5, previous = Math.abs(percent - mod5 - 50), next = Math.abs(percent + 5 - mod5 - 50), score = 10 * Math.min(previous / 5, next / 5);\n return score;\n }\n var EncodingResult = function (dataString, version) {\n this.dataString = dataString;\n this.version = version;\n };\n var IsoEncoder = function () {\n this.getEncodingResult = function (inputString, errorCorrectionLevel) {\n var modes = getModes(inputString), dataCodewordsCount = getDataCodewordsCount(modes), version = getVersion(dataCodewordsCount, errorCorrectionLevel), dataString = getDataString(modes, version);\n return new EncodingResult(dataString, version);\n };\n };\n var UTF8Encoder = function () {\n this.mode = modeInstances[this.encodingMode];\n };\n UTF8Encoder.fn = UTF8Encoder.prototype = {\n encodingMode: BYTE,\n utfBOM: '111011111011101110111111',\n initialModeCountStringLength: 20,\n getEncodingResult: function (inputString, errorCorrectionLevel) {\n var that = this, data = that.encode(inputString), dataCodewordsCount = that.getDataCodewordsCount(data), version = getVersion(dataCodewordsCount, errorCorrectionLevel), dataString = that.mode.getModeCountString(data.length / 8, version) + data;\n return new EncodingResult(dataString, version);\n },\n getDataCodewordsCount: function (data) {\n var that = this, dataLength = data.length, dataCodewordsCount = Math.ceil((that.initialModeCountStringLength + dataLength) / 8);\n return dataCodewordsCount;\n },\n encode: function (str) {\n var that = this, result = that.utfBOM;\n for (var i = 0; i < str.length; i++) {\n result += that.encodeCharacter(str.charCodeAt(i));\n }\n return result;\n },\n encodeCharacter: function (code) {\n var bytesCount = this.getBytesCount(code), bc = bytesCount - 1, result = '';\n if (bytesCount == 1) {\n result = toBitsString(code, 8);\n } else {\n var significantOnes = 8 - bytesCount;\n for (var i = 0; i < bc; i++) {\n result = toBitsString(code >> i * 6 & 63 | 128, 8) + result;\n }\n result = (code >> bc * 6 | 255 >> significantOnes << significantOnes).toString(2) + result;\n }\n return result;\n },\n getBytesCount: function (code) {\n var ranges = this.ranges;\n for (var i = 0; i < ranges.length; i++) {\n if (code < ranges[i]) {\n return i + 1;\n }\n }\n },\n ranges: [\n 128,\n 2048,\n 65536,\n 2097152,\n 67108864\n ]\n };\n var QRCodeDataEncoder = function (encoding) {\n if (encoding && encoding.toLowerCase().indexOf('utf_8') >= 0) {\n return new UTF8Encoder();\n } else {\n return new IsoEncoder();\n }\n };\n var encodeData = function (inputString, errorCorrectionLevel, encoding) {\n var encoder = new QRCodeDataEncoder(encoding), encodingResult = encoder.getEncodingResult(inputString, errorCorrectionLevel), version = encodingResult.version, versionInformation = versionsCodewordsInformation[version - 1][errorCorrectionLevel], dataString = padDataString(encodingResult.dataString, versionInformation.totalDataCodewords), blocks = getBlocks(dataString, versionInformation), matrices = initMatrices(version);\n addFinderPatterns(matrices);\n addAlignmentPatterns(matrices, version);\n addTimingFunctions(matrices);\n if (version >= 7) {\n addVersionInformation(matrices, toBitsString(0, 18));\n }\n addFormatInformation(matrices, toBitsString(0, 15));\n fillData(matrices, blocks);\n var minIdx = scoreMaskMatrixes(matrices), optimalMatrix = matrices[minIdx];\n if (version >= 7) {\n addVersionInformation([optimalMatrix], encodeVersionInformation(version));\n }\n var formatString = errorCorrectionPatterns[errorCorrectionLevel] + toBitsString(minIdx, 3);\n addFormatInformation([optimalMatrix], encodeFormatInformation(formatString));\n return optimalMatrix;\n };\n var QRCodeDefaults = {\n DEFAULT_SIZE: 200,\n QUIET_ZONE_LENGTH: 4,\n DEFAULT_ERROR_CORRECTION_LEVEL: 'L',\n DEFAULT_BACKGROUND: '#fff',\n DEFAULT_DARK_MODULE_COLOR: '#000',\n MIN_BASE_UNIT_SIZE: 1\n };\n var QRCode = Widget.extend({\n init: function (element, options) {\n var that = this;\n Widget.fn.init.call(that, element, options);\n that.element = $(element);\n that.wrapper = that.element;\n that.element.addClass('k-qrcode');\n that.surfaceWrap = $('
    ').css('position', 'relative').appendTo(this.element);\n that.surface = draw.Surface.create(that.surfaceWrap, { type: that.options.renderAs });\n that.setOptions(options);\n },\n redraw: function () {\n var size = this._getSize();\n this.surfaceWrap.css({\n width: size,\n height: size\n });\n this.surface.clear();\n this.createVisual();\n this.surface.draw(this.visual);\n },\n getSize: function () {\n return kendo.dimensions(this.element);\n },\n _resize: function () {\n this.redraw();\n },\n createVisual: function () {\n this.visual = this._render();\n },\n exportVisual: function () {\n return this._render();\n },\n _render: function () {\n var that = this, value = that._value, baseUnit, border = that.options.border || {}, padding = that.options.padding || 0, borderWidth = border.width || 0, quietZoneSize, matrix, size, dataSize, contentSize;\n border.width = borderWidth;\n var visual = new draw.Group();\n if (value) {\n matrix = encodeData(value, that.options.errorCorrection, that.options.encoding);\n size = that._getSize();\n contentSize = size - 2 * (borderWidth + padding);\n baseUnit = that._calculateBaseUnit(contentSize, matrix.length);\n dataSize = matrix.length * baseUnit;\n quietZoneSize = borderWidth + padding + (contentSize - dataSize) / 2;\n visual.append(that._renderBackground(size, border));\n visual.append(that._renderMatrix(matrix, baseUnit, quietZoneSize));\n }\n return visual;\n },\n _getSize: function () {\n var that = this, size;\n if (that.options.size) {\n size = parseInt(that.options.size, 10);\n } else {\n var element = that.element, min = Math.min(element.width(), element.height());\n if (min > 0) {\n size = min;\n } else {\n size = QRCodeDefaults.DEFAULT_SIZE;\n }\n }\n return size;\n },\n _calculateBaseUnit: function (size, matrixSize) {\n var baseUnit = Math.floor(size / matrixSize);\n if (baseUnit < QRCodeDefaults.MIN_BASE_UNIT_SIZE) {\n throw new Error('Insufficient size.');\n }\n if (baseUnit * matrixSize >= size && baseUnit - 1 >= QRCodeDefaults.MIN_BASE_UNIT_SIZE) {\n baseUnit--;\n }\n return baseUnit;\n },\n _renderMatrix: function (matrix, baseUnit, quietZoneSize) {\n var path = new draw.MultiPath({\n fill: { color: this.options.color },\n stroke: null\n });\n for (var row = 0; row < matrix.length; row++) {\n var y = quietZoneSize + row * baseUnit;\n var column = 0;\n while (column < matrix.length) {\n while (matrix[row][column] === 0 && column < matrix.length) {\n column++;\n }\n if (column < matrix.length) {\n var x = column;\n while (matrix[row][column] == 1) {\n column++;\n }\n var x1 = round(quietZoneSize + x * baseUnit);\n var y1 = round(y);\n var x2 = round(quietZoneSize + column * baseUnit);\n var y2 = round(y + baseUnit);\n path.moveTo(x1, y1).lineTo(x1, y2).lineTo(x2, y2).lineTo(x2, y1).close();\n }\n }\n }\n return path;\n },\n _renderBackground: function (size, border) {\n var box = new Box2D(0, 0, size, size).unpad(border.width / 2);\n return draw.Path.fromRect(box.toRect(), {\n fill: { color: this.options.background },\n stroke: {\n color: border.color,\n width: border.width\n }\n });\n },\n setOptions: function (options) {\n var that = this;\n options = options || {};\n that.options = extend(that.options, options);\n if (options.value !== undefined) {\n that._value = that.options.value + '';\n }\n that.redraw();\n },\n value: function (value) {\n var that = this;\n if (value === undefined) {\n return that._value;\n }\n that._value = value + '';\n that.redraw();\n },\n options: {\n name: 'QRCode',\n renderAs: 'svg',\n encoding: 'ISO_8859_1',\n value: '',\n errorCorrection: QRCodeDefaults.DEFAULT_ERROR_CORRECTION_LEVEL,\n background: QRCodeDefaults.DEFAULT_BACKGROUND,\n color: QRCodeDefaults.DEFAULT_DARK_MODULE_COLOR,\n size: '',\n padding: 0,\n border: {\n color: '',\n width: 0\n }\n }\n });\n dataviz.ExportMixin.extend(QRCode.fn);\n dataviz.ui.plugin(QRCode);\n kendo.deepExtend(dataviz, {\n QRCode: QRCode,\n QRCodeDefaults: QRCodeDefaults,\n QRCodeFunctions: {\n FreeCellVisitor: FreeCellVisitor,\n fillData: fillData,\n padDataString: padDataString,\n generateErrorCodewords: generateErrorCodewords,\n xorPolynomials: xorPolynomials,\n getBlocks: getBlocks,\n multiplyPolynomials: multiplyPolynomials,\n chooseMode: chooseMode,\n getModes: getModes,\n getDataCodewordsCount: getDataCodewordsCount,\n getVersion: getVersion,\n getDataString: getDataString,\n encodeFormatInformation: encodeFormatInformation,\n encodeBCH: encodeBCH,\n dividePolynomials: dividePolynomials,\n initMatrices: initMatrices,\n addFormatInformation: addFormatInformation,\n encodeVersionInformation: encodeVersionInformation,\n addVersionInformation: addVersionInformation,\n addCentricPattern: addCentricPattern,\n addFinderSeparator: addFinderSeparator,\n addFinderPatterns: addFinderPatterns,\n addAlignmentPatterns: addAlignmentPatterns,\n addTimingFunctions: addTimingFunctions,\n scoreMaskMatrixes: scoreMaskMatrixes,\n encodeData: encodeData,\n UTF8Encoder: UTF8Encoder\n },\n QRCodeFields: {\n modes: modeInstances,\n powersOfTwo: powersOfTwo,\n powersOfTwoResult: powersOfTwoResult,\n generatorPolynomials: generatorPolynomials\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('dataviz/stock/kendo-stock-chart', ['kendo.dataviz.chart'], f);\n}(function () {\n (function () {\n window.kendo.dataviz = window.kendo.dataviz || {};\n var dataviz = kendo.dataviz;\n var elementStyles = dataviz.elementStyles;\n var deepExtend = dataviz.deepExtend;\n var toTime = dataviz.toTime;\n var datavizConstants = dataviz.constants;\n var Chart = dataviz.Chart;\n var drawing = kendo.drawing;\n var FadeOutAnimation = drawing.Animation.extend({\n setup: function () {\n this._initialOpacity = parseFloat(elementStyles(this.element, 'opacity').opacity);\n },\n step: function (pos) {\n elementStyles(this.element, { opacity: String(dataviz.interpolateValue(this._initialOpacity, 0, pos)) });\n },\n abort: function () {\n drawing.Animation.fn.abort.call(this);\n elementStyles(this.element, {\n display: 'none',\n opacity: String(this._initialOpacity)\n });\n },\n cancel: function () {\n drawing.Animation.fn.abort.call(this);\n elementStyles(this.element, { opacity: String(this._initialOpacity) });\n }\n });\n function createDiv(className, style) {\n var div = document.createElement('div');\n div.className = className;\n if (style) {\n div.style.cssText = style;\n }\n return div;\n }\n var NavigatorHint = dataviz.Class.extend({\n init: function (container, chartService, options) {\n this.options = deepExtend({}, this.options, options);\n this.container = container;\n this.chartService = chartService;\n var padding = elementStyles(container, [\n 'paddingLeft',\n 'paddingTop'\n ]);\n this.chartPadding = {\n top: padding.paddingTop,\n left: padding.paddingLeft\n };\n this.createElements();\n container.appendChild(this.element);\n },\n createElements: function () {\n var element = this.element = createDiv('k-navigator-hint', 'display: none; position: absolute; top: 1px; left: 1px;');\n var tooltip = this.tooltip = createDiv('k-tooltip k-chart-tooltip');\n var scroll = this.scroll = createDiv('k-scroll');\n tooltip.innerHTML = ' ';\n element.appendChild(tooltip);\n element.appendChild(scroll);\n },\n show: function (from, to, bbox) {\n var ref = this;\n var element = ref.element;\n var options = ref.options;\n var scroll = ref.scroll;\n var tooltip = ref.tooltip;\n var middle = dataviz.toDate(toTime(from) + toTime(to - from) / 2);\n var scrollWidth = bbox.width() * 0.4;\n var minPos = bbox.center().x - scrollWidth;\n var maxPos = bbox.center().x;\n var posRange = maxPos - minPos;\n var range = options.max - options.min;\n var scale = posRange / range;\n var offset = middle - options.min;\n var text = this.chartService.intl.format(options.format, from, to);\n var template = dataviz.getTemplate(options);\n this.clearHideTimeout();\n if (!this._visible) {\n elementStyles(element, {\n visibility: 'hidden',\n display: 'block'\n });\n this._visible = true;\n }\n if (template) {\n text = template({\n from: from,\n to: to\n });\n }\n tooltip.innerHTML = text;\n elementStyles(tooltip, {\n left: bbox.center().x - tooltip.offsetWidth / 2,\n top: bbox.y1\n });\n var tooltipStyle = elementStyles(tooltip, [\n 'marginTop',\n 'borderTopWidth',\n 'height'\n ]);\n elementStyles(scroll, {\n width: scrollWidth,\n left: minPos + offset * scale,\n top: bbox.y1 + tooltipStyle.marginTop + tooltipStyle.borderTopWidth + tooltipStyle.height / 2\n });\n elementStyles(element, { visibility: 'visible' });\n },\n clearHideTimeout: function () {\n if (this._hideTimeout) {\n clearTimeout(this._hideTimeout);\n }\n if (this._hideAnimation) {\n this._hideAnimation.cancel();\n }\n },\n hide: function () {\n var this$1 = this;\n this.clearHideTimeout();\n this._hideTimeout = setTimeout(function () {\n this$1._visible = false;\n this$1._hideAnimation = new FadeOutAnimation(this$1.element);\n this$1._hideAnimation.setup();\n this$1._hideAnimation.play();\n }, this.options.hideDelay);\n },\n destroy: function () {\n this.clearHideTimeout();\n if (this.container) {\n this.container.removeChild(this.element);\n }\n delete this.container;\n delete this.chartService;\n delete this.element;\n delete this.tooltip;\n delete this.scroll;\n }\n });\n dataviz.setDefaultOptions(NavigatorHint, {\n format: '{0:d} - {1:d}',\n hideDelay: 500\n });\n var NAVIGATOR_PANE = '_navigator';\n var NAVIGATOR_AXIS = NAVIGATOR_PANE;\n var constants = {\n NAVIGATOR_AXIS: NAVIGATOR_AXIS,\n NAVIGATOR_PANE: NAVIGATOR_PANE\n };\n var ZOOM_ACCELERATION = 3;\n var Navigator = dataviz.Class.extend({\n init: function (chart) {\n this.chart = chart;\n var options = this.options = deepExtend({}, this.options, chart.options.navigator);\n var select = options.select;\n if (select) {\n select.from = this.parseDate(select.from);\n select.to = this.parseDate(select.to);\n }\n if (!dataviz.defined(options.hint.visible)) {\n options.hint.visible = options.visible;\n }\n var obj;\n this.chartObserver = new dataviz.InstanceObserver(this, (obj = {}, obj[datavizConstants.DRAG] = '_drag', obj[datavizConstants.DRAG_END] = '_dragEnd', obj[datavizConstants.ZOOM] = '_zoom', obj[datavizConstants.ZOOM_END] = '_zoomEnd', obj));\n chart.addObserver(this.chartObserver);\n },\n parseDate: function (value) {\n return dataviz.parseDate(this.chart.chartService.intl, value);\n },\n destroy: function () {\n if (this.chart) {\n this.chart.removeObserver(this.chartObserver);\n delete this.chart;\n }\n if (this.selection) {\n this.selection.destroy();\n delete this.selection;\n }\n if (this.hint) {\n this.hint.destroy();\n delete this.hint;\n }\n },\n redraw: function () {\n this._redrawSelf();\n this.initSelection();\n },\n initSelection: function () {\n var ref = this;\n var chart = ref.chart;\n var options = ref.options;\n var axis = this.mainAxis();\n var ref$1 = axis.range();\n var min = ref$1.min;\n var max = ref$1.max;\n var ref$2 = options.select;\n var from = ref$2.from;\n var to = ref$2.to;\n var mousewheel = ref$2.mousewheel;\n var axisClone = clone(axis);\n var groups = axis.options.categories;\n var selection = this.selection;\n if (groups.length === 0) {\n return;\n }\n if (selection) {\n selection.destroy();\n }\n axisClone.box = axis.box;\n selection = this.selection = new dataviz.Selection(chart, axisClone, {\n min: min,\n max: max,\n from: from || min,\n to: to || max,\n mousewheel: dataviz.valueOrDefault(mousewheel, { zoom: 'left' }),\n visible: options.visible\n }, new dataviz.InstanceObserver(this, {\n selectStart: '_selectStart',\n select: '_select',\n selectEnd: '_selectEnd'\n }));\n if (this.hint) {\n this.hint.destroy();\n }\n if (options.hint.visible) {\n this.hint = new NavigatorHint(chart.element, chart.chartService, {\n min: min,\n max: max,\n template: dataviz.getTemplate(options.hint),\n format: options.hint.format\n });\n }\n },\n setRange: function () {\n var plotArea = this.chart._createPlotArea(true);\n var axis = plotArea.namedCategoryAxes[NAVIGATOR_AXIS];\n var ref = axis.range();\n var min = ref.min;\n var max = ref.max;\n var select = this.options.select || {};\n var from = select.from || min;\n if (from < min) {\n from = min;\n }\n var to = select.to || max;\n if (to > max) {\n to = max;\n }\n this.options.select = deepExtend({}, select, {\n from: from,\n to: to\n });\n this.filterAxes();\n },\n _redrawSelf: function (silent) {\n var plotArea = this.chart._plotArea;\n if (plotArea) {\n plotArea.redraw(dataviz.last(plotArea.panes), silent);\n }\n },\n redrawSlaves: function () {\n var chart = this.chart;\n var plotArea = chart._plotArea;\n var slavePanes = plotArea.panes.slice(0, -1);\n plotArea.srcSeries = chart.options.series;\n plotArea.options.categoryAxis = chart.options.categoryAxis;\n plotArea.redraw(slavePanes);\n },\n _drag: function (e) {\n var ref = this;\n var chart = ref.chart;\n var selection = ref.selection;\n var coords = chart._eventCoordinates(e.originalEvent);\n var navigatorAxis = this.mainAxis();\n var naviRange = navigatorAxis.datesRange();\n var inNavigator = navigatorAxis.pane.box.containsPoint(coords);\n var axis = chart._plotArea.categoryAxis;\n var range = e.axisRanges[axis.options.name];\n var select = this.options.select;\n var duration;\n if (!range || inNavigator || !selection) {\n return;\n }\n if (select.from && select.to) {\n duration = toTime(select.to) - toTime(select.from);\n } else {\n duration = toTime(selection.options.to) - toTime(selection.options.from);\n }\n var from = dataviz.toDate(dataviz.limitValue(toTime(range.min), naviRange.min, toTime(naviRange.max) - duration));\n var to = dataviz.toDate(dataviz.limitValue(toTime(from) + duration, toTime(naviRange.min) + duration, naviRange.max));\n this.options.select = {\n from: from,\n to: to\n };\n if (this.options.liveDrag) {\n this.filterAxes();\n this.redrawSlaves();\n }\n selection.set(from, to);\n this.showHint(from, to);\n },\n _dragEnd: function () {\n this.filterAxes();\n this.filter();\n this.redrawSlaves();\n if (this.hint) {\n this.hint.hide();\n }\n },\n readSelection: function () {\n var ref = this;\n var ref_selection_options = ref.selection.options;\n var from = ref_selection_options.from;\n var to = ref_selection_options.to;\n var select = ref.options.select;\n select.from = from;\n select.to = to;\n },\n filterAxes: function () {\n var ref = this;\n var select = ref.options.select;\n if (select === void 0) {\n select = {};\n }\n var chart = ref.chart;\n var allAxes = chart.options.categoryAxis;\n var from = select.from;\n var to = select.to;\n for (var idx = 0; idx < allAxes.length; idx++) {\n var axis = allAxes[idx];\n if (axis.pane !== NAVIGATOR_PANE) {\n axis.min = from;\n axis.max = to;\n }\n }\n },\n filter: function () {\n var ref = this;\n var chart = ref.chart;\n var select = ref.options.select;\n if (chart.requiresHandlers(['navigatorFilter'])) {\n var axisOptions = new dataviz.DateCategoryAxis(deepExtend({ baseUnit: 'fit' }, chart.options.categoryAxis[0], {\n categories: [\n select.from,\n select.to\n ]\n }), chart.chartService).options;\n this.chart.trigger('navigatorFilter', {\n from: dataviz.addDuration(axisOptions.min, -axisOptions.baseUnitStep, axisOptions.baseUnit),\n to: dataviz.addDuration(axisOptions.max, axisOptions.baseUnitStep, axisOptions.baseUnit)\n });\n }\n },\n _zoom: function (e) {\n var ref = this;\n var axis = ref.chart._plotArea.categoryAxis;\n var selection = ref.selection;\n var ref_options = ref.options;\n var select = ref_options.select;\n var liveDrag = ref_options.liveDrag;\n var categories = this.mainAxis().options.categories;\n var delta = e.delta;\n if (!selection) {\n return;\n }\n var fromIx = dataviz.lteDateIndex(selection.options.from, categories);\n var toIx = dataviz.lteDateIndex(selection.options.to, categories);\n e.originalEvent.preventDefault();\n if (Math.abs(delta) > 1) {\n delta *= ZOOM_ACCELERATION;\n }\n if (toIx - fromIx > 1) {\n selection.expand(delta);\n this.readSelection();\n } else {\n axis.options.min = select.from;\n select.from = axis.scaleRange(-e.delta).min;\n }\n if (liveDrag) {\n this.filterAxes();\n this.redrawSlaves();\n }\n selection.set(select.from, select.to);\n this.showHint(this.options.select.from, this.options.select.to);\n },\n _zoomEnd: function (e) {\n this._dragEnd(e);\n },\n showHint: function (from, to) {\n var plotArea = this.chart._plotArea;\n if (this.hint) {\n this.hint.show(from, to, plotArea.backgroundBox());\n }\n },\n _selectStart: function (e) {\n return this.chart._selectStart(e);\n },\n _select: function (e) {\n this.showHint(e.from, e.to);\n return this.chart._select(e);\n },\n _selectEnd: function (e) {\n if (this.hint) {\n this.hint.hide();\n }\n this.readSelection();\n this.filterAxes();\n this.filter();\n this.redrawSlaves();\n return this.chart._selectEnd(e);\n },\n mainAxis: function () {\n var plotArea = this.chart._plotArea;\n if (plotArea) {\n return plotArea.namedCategoryAxes[NAVIGATOR_AXIS];\n }\n },\n select: function (from, to) {\n var select = this.options.select;\n if (from && to) {\n select.from = this.parseDate(from);\n select.to = this.parseDate(to);\n this.filterAxes();\n this.filter();\n this.redrawSlaves();\n this.selection.set(from, to);\n }\n return {\n from: select.from,\n to: select.to\n };\n }\n });\n Navigator.setup = function (options, themeOptions) {\n if (options === void 0) {\n options = {};\n }\n if (themeOptions === void 0) {\n themeOptions = {};\n }\n if (options.__navi) {\n return;\n }\n options.__navi = true;\n var naviOptions = deepExtend({}, themeOptions.navigator, options.navigator);\n var panes = options.panes = [].concat(options.panes);\n var paneOptions = deepExtend({}, naviOptions.pane, { name: NAVIGATOR_PANE });\n if (!naviOptions.visible) {\n paneOptions.visible = false;\n paneOptions.height = 0.1;\n }\n panes.push(paneOptions);\n Navigator.attachAxes(options, naviOptions);\n Navigator.attachSeries(options, naviOptions, themeOptions);\n };\n Navigator.attachAxes = function (options, naviOptions) {\n var series = naviOptions.series || [];\n var categoryAxes = options.categoryAxis = [].concat(options.categoryAxis);\n var valueAxes = options.valueAxis = [].concat(options.valueAxis);\n var equallySpacedSeries = dataviz.filterSeriesByType(series, datavizConstants.EQUALLY_SPACED_SERIES);\n var justifyAxis = equallySpacedSeries.length === 0;\n var base = deepExtend({\n type: 'date',\n pane: NAVIGATOR_PANE,\n roundToBaseUnit: !justifyAxis,\n justified: justifyAxis,\n _collapse: false,\n majorTicks: { visible: true },\n tooltip: { visible: false },\n labels: { step: 1 },\n autoBind: naviOptions.autoBindElements,\n autoBaseUnitSteps: {\n minutes: [1],\n hours: [\n 1,\n 2\n ],\n days: [\n 1,\n 2\n ],\n weeks: [],\n months: [1],\n years: [1]\n }\n });\n var user = naviOptions.categoryAxis;\n categoryAxes.push(deepExtend({}, base, { maxDateGroups: 200 }, user, {\n name: NAVIGATOR_AXIS,\n title: null,\n baseUnit: 'fit',\n baseUnitStep: 'auto',\n labels: { visible: false },\n majorTicks: { visible: false }\n }), deepExtend({}, base, user, {\n name: NAVIGATOR_AXIS + '_labels',\n maxDateGroups: 20,\n baseUnitStep: 'auto',\n plotBands: [],\n autoBaseUnitSteps: { minutes: [] },\n _overlap: true\n }), deepExtend({}, base, user, {\n name: NAVIGATOR_AXIS + '_ticks',\n maxDateGroups: 200,\n majorTicks: { width: 0.5 },\n plotBands: [],\n title: null,\n labels: {\n visible: false,\n mirror: true\n },\n _overlap: true\n }));\n valueAxes.push(deepExtend({\n name: NAVIGATOR_AXIS,\n pane: NAVIGATOR_PANE,\n majorGridLines: { visible: false },\n visible: false\n }, naviOptions.valueAxis));\n };\n Navigator.attachSeries = function (options, naviOptions, themeOptions) {\n var series = options.series = options.series || [];\n var navigatorSeries = [].concat(naviOptions.series || []);\n var seriesColors = themeOptions.seriesColors;\n var defaults = naviOptions.seriesDefaults;\n for (var idx = 0; idx < navigatorSeries.length; idx++) {\n series.push(deepExtend({\n color: seriesColors[idx % seriesColors.length],\n categoryField: naviOptions.dateField,\n visibleInLegend: false,\n tooltip: { visible: false }\n }, defaults, navigatorSeries[idx], {\n axis: NAVIGATOR_AXIS,\n categoryAxis: NAVIGATOR_AXIS,\n autoBind: naviOptions.autoBindElements\n }));\n }\n };\n function ClonedObject() {\n }\n function clone(obj) {\n ClonedObject.prototype = obj;\n return new ClonedObject();\n }\n var AUTO_CATEGORY_WIDTH = 28;\n var StockChart = Chart.extend({\n applyDefaults: function (options, themeOptions) {\n var width = dataviz.elementSize(this.element).width || datavizConstants.DEFAULT_WIDTH;\n var theme = themeOptions;\n var stockDefaults = {\n seriesDefaults: { categoryField: options.dateField },\n axisDefaults: {\n categoryAxis: {\n name: 'default',\n majorGridLines: { visible: false },\n labels: { step: 2 },\n majorTicks: { visible: false },\n maxDateGroups: Math.floor(width / AUTO_CATEGORY_WIDTH)\n }\n }\n };\n if (theme) {\n theme = deepExtend({}, theme, stockDefaults);\n }\n Navigator.setup(options, theme);\n Chart.fn.applyDefaults.call(this, options, theme);\n },\n _setElementClass: function (element) {\n dataviz.addClass(element, 'k-chart k-stockchart');\n },\n setOptions: function (options) {\n this.destroyNavigator();\n Chart.fn.setOptions.call(this, options);\n },\n _resize: function () {\n var transitions = this.options.transitions;\n this.options.transitions = false;\n this._fullRedraw();\n this.options.transitions = transitions;\n },\n _redraw: function () {\n var navigator = this.navigator;\n if (!this._dirty() && navigator && navigator.options.partialRedraw) {\n navigator.redrawSlaves();\n } else {\n this._fullRedraw();\n }\n },\n _dirty: function () {\n var options = this.options;\n var series = [].concat(options.series, options.navigator.series);\n var seriesCount = dataviz.grep(series, function (s) {\n return s && s.visible;\n }).length;\n var dirty = this._seriesCount !== seriesCount;\n this._seriesCount = seriesCount;\n return dirty;\n },\n _fullRedraw: function () {\n var navigator = this.navigator;\n if (!navigator) {\n navigator = this.navigator = new Navigator(this);\n this.trigger('navigatorCreated', { navigator: navigator });\n }\n navigator.setRange();\n Chart.fn._redraw.call(this);\n navigator.initSelection();\n },\n _trackSharedTooltip: function (coords) {\n var plotArea = this._plotArea;\n var pane = plotArea.paneByPoint(coords);\n if (pane && pane.options.name === NAVIGATOR_PANE) {\n this._unsetActivePoint();\n } else {\n Chart.fn._trackSharedTooltip.call(this, coords);\n }\n },\n bindCategories: function () {\n Chart.fn.bindCategories.call(this);\n this.copyNavigatorCategories();\n },\n copyNavigatorCategories: function () {\n var definitions = [].concat(this.options.categoryAxis);\n var categories;\n for (var axisIx = 0; axisIx < definitions.length; axisIx++) {\n var axis = definitions[axisIx];\n if (axis.name === NAVIGATOR_AXIS) {\n categories = axis.categories;\n } else if (categories && axis.pane === NAVIGATOR_PANE) {\n axis.categories = categories;\n }\n }\n },\n destroyNavigator: function () {\n if (this.navigator) {\n this.navigator.destroy();\n this.navigator = null;\n }\n },\n destroy: function () {\n this.destroyNavigator();\n Chart.fn.destroy.call(this);\n },\n _stopDragEvent: function (e) {\n var coords = this._eventCoordinates(e);\n var pane = this._plotArea.paneByPoint(coords);\n return Chart.fn._stopDragEvent.call(this, e) || pane && pane.options.name === NAVIGATOR_PANE;\n }\n });\n dataviz.setDefaultOptions(StockChart, {\n dateField: 'date',\n axisDefaults: {\n categoryAxis: {\n type: 'date',\n baseUnit: 'fit',\n justified: true\n },\n valueAxis: {\n narrowRange: true,\n labels: { format: 'C' }\n }\n },\n navigator: {\n select: {},\n seriesDefaults: {\n markers: { visible: false },\n tooltip: { visible: true },\n line: { width: 2 }\n },\n hint: {},\n visible: true\n },\n tooltip: { visible: true },\n legend: { visible: false }\n });\n kendo.deepExtend(kendo.dataviz, {\n constants: constants,\n Navigator: Navigator,\n NavigatorHint: NavigatorHint,\n StockChart: StockChart\n });\n }());\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('dataviz/stock/stock-chart', ['dataviz/stock/kendo-stock-chart'], f);\n}(function () {\n (function ($) {\n var kendo = window.kendo;\n var dataviz = kendo.dataviz;\n var ChartInstanceObserver = dataviz.ChartInstanceObserver;\n var Chart = dataviz.ui.Chart;\n var KendoStockChart = dataviz.StockChart;\n var constants = dataviz.constants;\n var NAVIGATOR_AXIS = constants.NAVIGATOR_AXIS;\n var NAVIGATOR_PANE = constants.NAVIGATOR_PANE;\n var deepExtend = kendo.deepExtend;\n var defined = dataviz.defined;\n var proxy = $.proxy;\n var CHANGE = 'change';\n var StockInstanceObserver = ChartInstanceObserver.extend({\n handlerMap: {\n navigatorFilter: '_onNavigatorFilter',\n navigatorCreated: '_onNavigatorCreated'\n }\n });\n var StockChart = Chart.extend({\n options: {\n name: 'StockChart',\n dateField: 'date',\n axisDefaults: {\n categoryAxis: {\n type: 'date',\n baseUnit: 'fit',\n justified: true\n },\n valueAxis: {\n narrowRange: true,\n labels: { format: 'C' }\n }\n },\n navigator: {\n select: {},\n seriesDefaults: {\n markers: { visible: false },\n tooltip: {\n visible: true,\n template: '#= kendo.toString(category, \\'d\\') #'\n },\n line: { width: 2 }\n },\n hint: {},\n visible: true\n },\n tooltip: { visible: true },\n legend: { visible: false }\n },\n _createChart: function (options, themeOptions) {\n this._initNavigatorOptions(options);\n this._instance = new KendoStockChart(this.element[0], options, themeOptions, {\n observer: new StockInstanceObserver(this),\n sender: this\n });\n },\n _initNavigatorOptions: function (options) {\n var navigatorOptions = options.navigator || {};\n var support = kendo.support;\n var isTouch = support.touch;\n var isFirefox = support.browser.mozilla;\n deepExtend(navigatorOptions, {\n autoBindElements: !navigatorOptions.dataSource,\n partialRedraw: navigatorOptions.dataSource,\n liveDrag: !isTouch && !isFirefox\n });\n },\n _initDataSource: function (userOptions) {\n var options = userOptions || {}, dataSource = options.dataSource, hasServerFiltering = dataSource && dataSource.serverFiltering, mainAxis = [].concat(options.categoryAxis)[0], naviOptions = options.navigator || {}, select = naviOptions.select, hasSelect = select && select.from && select.to;\n if (hasServerFiltering && hasSelect) {\n var filter = [].concat(dataSource.filter || []);\n var from = kendo.parseDate(select.from);\n var to = kendo.parseDate(select.to);\n var dummyAxis = new dataviz.DateCategoryAxis(deepExtend({ baseUnit: 'fit' }, mainAxis, {\n categories: [\n from,\n to\n ]\n }), kendo);\n dataSource.filter = buildFilter(dummyAxis.range().min, to).concat(filter);\n }\n Chart.fn._initDataSource.call(this, userOptions);\n },\n _onNavigatorCreated: function (e) {\n this._instance = e.sender;\n this.options = e.sender.options;\n this._navigator = this.navigator = e.navigator;\n this._initNavigatorDataSource();\n },\n _initNavigatorDataSource: function () {\n var navigatorOptions = this.options.navigator;\n var autoBind = navigatorOptions.autoBind;\n var dsOptions = navigatorOptions.dataSource;\n if (dsOptions) {\n this._navigatorDataChangedHandler = this._navigatorDataChangedHandler || proxy(this._onNavigatorDataChanged, this);\n this._navigatorDataSource = kendo.data.DataSource.create(dsOptions).bind(CHANGE, this._navigatorDataChangedHandler);\n if (!defined(autoBind)) {\n autoBind = this.options.autoBind;\n }\n if (autoBind) {\n this._navigatorDataSource.fetch();\n }\n }\n },\n _onNavigatorDataChanged: function () {\n var chart = this, instance = chart._instance, series = chart.options.series, seriesIx, seriesLength = series.length, categoryAxes = chart.options.categoryAxis, axisIx, axesLength = categoryAxes.length, data = chart._navigatorDataSource.view(), currentSeries, currentAxis, naviCategories;\n for (seriesIx = 0; seriesIx < seriesLength; seriesIx++) {\n currentSeries = series[seriesIx];\n if (currentSeries.axis == NAVIGATOR_AXIS && chart._isBindable(currentSeries)) {\n currentSeries.data = data;\n }\n }\n for (axisIx = 0; axisIx < axesLength; axisIx++) {\n currentAxis = categoryAxes[axisIx];\n if (currentAxis.pane == NAVIGATOR_PANE) {\n if (currentAxis.name == NAVIGATOR_AXIS) {\n chart._bindCategoryAxis(currentAxis, data, axisIx);\n naviCategories = currentAxis.categories;\n } else {\n currentAxis.categories = naviCategories;\n }\n }\n }\n if (instance._model) {\n var navigator = this.navigator;\n navigator.redraw();\n navigator.setRange();\n if (!chart.options.dataSource || chart.options.dataSource && chart._dataBound) {\n navigator.redrawSlaves();\n }\n }\n },\n _bindCategories: function () {\n Chart.fn._bindCategories.call(this);\n if (this._instance) {\n this._instance.copyNavigatorCategories();\n }\n },\n _onDataChanged: function () {\n Chart.fn._onDataChanged.call(this);\n this._dataBound = true;\n },\n setOptions: function (options) {\n this._removeNavigatorDataSource();\n this._initNavigatorOptions(options);\n this._instance.destroyNavigator();\n Chart.fn.setOptions.call(this, options);\n },\n _onNavigatorFilter: function (e) {\n this.dataSource.filter(buildFilter(e.from, e.to));\n },\n requiresHandlers: function (names) {\n if (dataviz.inArray('navigatorFilter', names)) {\n var dataSource = this.dataSource;\n var hasServerFiltering = dataSource && dataSource.options.serverFiltering;\n return hasServerFiltering && this.options.navigator.dataSource;\n }\n return Chart.fn.requiresHandlers.call(this, names);\n },\n _removeNavigatorDataSource: function () {\n var navigatorDataSource = this._navigatorDataSource;\n if (navigatorDataSource) {\n navigatorDataSource.unbind(CHANGE, this._navigatorDataChangedHandler);\n delete this._navigatorDataSource;\n }\n },\n destroy: function () {\n Chart.fn.destroy.call(this);\n this._removeNavigatorDataSource();\n }\n });\n dataviz.ui.plugin(StockChart);\n function buildFilter(from, to) {\n return [\n {\n field: 'Date',\n operator: 'gte',\n value: from\n },\n {\n field: 'Date',\n operator: 'lt',\n value: to\n }\n ];\n }\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.dataviz.stock', [\n 'dataviz/stock/kendo-stock-chart',\n 'dataviz/stock/stock-chart'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'dataviz.stockchart',\n name: 'StockChart',\n category: 'dataviz',\n description: 'StockChart widget and associated financial series.',\n depends: ['dataviz.chart']\n };\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('dataviz/sparkline/kendo-sparkline', ['kendo.dataviz.chart'], f);\n}(function () {\n (function () {\n window.kendo.dataviz = window.kendo.dataviz || {};\n var dataviz = kendo.dataviz;\n var constants = dataviz.constants;\n var Chart = dataviz.Chart;\n var elementSize = dataviz.elementSize;\n var deepExtend = dataviz.deepExtend;\n var TOP_OFFSET = -2;\n var SharedTooltip$1 = dataviz.SharedTooltip.extend({\n _slotAnchor: function (coords, slot) {\n var axis = this.plotArea.categoryAxis;\n var vertical = axis.options.vertical;\n var align = vertical ? {\n horizontal: 'left',\n vertical: 'center'\n } : {\n horizontal: 'center',\n vertical: 'bottom'\n };\n var point;\n if (vertical) {\n point = new dataviz.Point(this.plotArea.box.x2, slot.center().y);\n } else {\n point = new dataviz.Point(slot.center().x, TOP_OFFSET);\n }\n return {\n point: point,\n align: align\n };\n },\n _defaultAnchor: function (point, slot) {\n return this._slotAnchor({}, slot);\n }\n });\n var DEAULT_BAR_WIDTH = 150;\n var DEAULT_BULLET_WIDTH = 150;\n var NO_CROSSHAIR = [\n constants.BAR,\n constants.BULLET\n ];\n function hide(children) {\n var state = [];\n for (var idx = 0; idx < children.length; idx++) {\n var child = children[idx];\n state[idx] = child.style.display;\n child.style.display = 'none';\n }\n return state;\n }\n function show(children, state) {\n for (var idx = 0; idx < children.length; idx++) {\n children[idx].style.display = state[idx];\n }\n }\n function wrapNumber(value) {\n return dataviz.isNumber(value) ? [value] : value;\n }\n var Sparkline = Chart.extend({\n _setElementClass: function (element) {\n dataviz.addClass(element, 'k-sparkline');\n },\n _initElement: function (element) {\n Chart.fn._initElement.call(this, element);\n this._initialWidth = Math.floor(elementSize(element).width);\n },\n _resize: function () {\n var element = this.element;\n var state = hide(element.childNodes);\n this._initialWidth = Math.floor(elementSize(element).width);\n show(element.childNodes, state);\n Chart.fn._resize.call(this);\n },\n _modelOptions: function () {\n var chartOptions = this.options;\n var stage = this._surfaceWrap();\n var displayState = hide(stage.childNodes);\n var space = document.createElement('span');\n space.innerHTML = ' ';\n stage.appendChild(space);\n var options = deepExtend({\n width: this._autoWidth,\n height: elementSize(stage).height,\n transitions: chartOptions.transitions\n }, chartOptions.chartArea, {\n inline: true,\n align: false\n });\n elementSize(stage, {\n width: options.width,\n height: options.height\n });\n stage.removeChild(space);\n show(stage.childNodes, displayState);\n this.surface.resize();\n return options;\n },\n _surfaceWrap: function () {\n if (!this.stage) {\n var stage = this.stage = document.createElement('span');\n this.element.appendChild(stage);\n }\n return this.stage;\n },\n _createPlotArea: function (skipSeries) {\n var plotArea = Chart.fn._createPlotArea.call(this, skipSeries);\n this._autoWidth = this._initialWidth || this._calculateWidth(plotArea);\n return plotArea;\n },\n _calculateWidth: function (plotArea) {\n var options = this.options;\n var margin = dataviz.getSpacing(options.chartArea.margin);\n var charts = plotArea.charts;\n var stage = this._surfaceWrap();\n var total = 0;\n for (var i = 0; i < charts.length; i++) {\n var currentChart = charts[i];\n var firstSeries = (currentChart.options.series || [])[0];\n if (!firstSeries) {\n continue;\n }\n if (firstSeries.type === constants.BAR) {\n return DEAULT_BAR_WIDTH;\n }\n if (firstSeries.type === constants.BULLET) {\n return DEAULT_BULLET_WIDTH;\n }\n if (firstSeries.type === constants.PIE) {\n return elementSize(stage).height;\n }\n var categoryAxis = currentChart.categoryAxis;\n if (categoryAxis) {\n var pointsCount = categoryAxis.options.categories.length * (!currentChart.options.isStacked && dataviz.inArray(firstSeries.type, [\n constants.COLUMN,\n constants.VERTICAL_BULLET\n ]) ? currentChart.seriesOptions.length : 1);\n total = Math.max(total, pointsCount);\n }\n }\n var size = total * options.pointWidth;\n if (size > 0) {\n size += margin.left + margin.right;\n }\n return size;\n },\n _createSharedTooltip: function (options) {\n return new SharedTooltip$1(this._plotArea, options);\n }\n });\n Sparkline.normalizeOptions = function (userOptions) {\n var options = wrapNumber(userOptions);\n if (dataviz.isArray(options)) {\n options = { seriesDefaults: { data: options } };\n } else {\n options = deepExtend({}, options);\n }\n if (!options.series) {\n options.series = [{ data: wrapNumber(options.data) }];\n }\n deepExtend(options, { seriesDefaults: { type: options.type } });\n if (dataviz.inArray(options.series[0].type, NO_CROSSHAIR) || dataviz.inArray(options.seriesDefaults.type, NO_CROSSHAIR)) {\n options = deepExtend({}, { categoryAxis: { crosshair: { visible: false } } }, options);\n }\n return options;\n };\n dataviz.setDefaultOptions(Sparkline, {\n chartArea: { margin: 2 },\n axisDefaults: {\n visible: false,\n majorGridLines: { visible: false },\n valueAxis: { narrowRange: true }\n },\n seriesDefaults: {\n type: 'line',\n area: { line: { width: 0.5 } },\n bar: { stack: true },\n padding: 2,\n width: 0.5,\n overlay: { gradient: null },\n highlight: { visible: false },\n border: { width: 0 },\n markers: {\n size: 2,\n visible: false\n }\n },\n tooltip: {\n visible: true,\n shared: true\n },\n categoryAxis: {\n crosshair: {\n visible: true,\n tooltip: { visible: false }\n }\n },\n legend: { visible: false },\n transitions: false,\n pointWidth: 5,\n panes: [{ clip: false }]\n });\n kendo.deepExtend(kendo.dataviz, { Sparkline: Sparkline });\n }());\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('dataviz/sparkline/sparkline', ['dataviz/sparkline/kendo-sparkline'], f);\n}(function () {\n (function () {\n var dataviz = kendo.dataviz;\n var Chart = dataviz.ui.Chart;\n var KendoSparkline = dataviz.Sparkline;\n var ChartInstanceObserver = dataviz.ChartInstanceObserver;\n var Sparkline = Chart.extend({\n init: function (element, userOptions) {\n var options = userOptions;\n if (options instanceof kendo.data.ObservableArray) {\n options = { seriesDefaults: { data: options } };\n }\n Chart.fn.init.call(this, element, KendoSparkline.normalizeOptions(options));\n },\n _createChart: function (options, themeOptions) {\n this._instance = new KendoSparkline(this.element[0], options, themeOptions, {\n observer: new ChartInstanceObserver(this),\n sender: this\n });\n },\n _createTooltip: function () {\n return new SparklineTooltip(this.element, this.options.tooltip);\n },\n options: {\n name: 'Sparkline',\n chartArea: { margin: 2 },\n axisDefaults: {\n visible: false,\n majorGridLines: { visible: false },\n valueAxis: { narrowRange: true }\n },\n seriesDefaults: {\n type: 'line',\n area: { line: { width: 0.5 } },\n bar: { stack: true },\n padding: 2,\n width: 0.5,\n overlay: { gradient: null },\n highlight: { visible: false },\n border: { width: 0 },\n markers: {\n size: 2,\n visible: false\n }\n },\n tooltip: {\n visible: true,\n shared: true\n },\n categoryAxis: {\n crosshair: {\n visible: true,\n tooltip: { visible: false }\n }\n },\n legend: { visible: false },\n transitions: false,\n pointWidth: 5,\n panes: [{ clip: false }]\n }\n });\n dataviz.ui.plugin(Sparkline);\n var SparklineTooltip = dataviz.Tooltip.extend({\n options: { animation: { duration: 0 } },\n _hideElement: function () {\n if (this.element) {\n this.element.hide().remove();\n }\n }\n });\n dataviz.SparklineTooltip = SparklineTooltip;\n }());\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.dataviz.sparkline', [\n 'dataviz/sparkline/kendo-sparkline',\n 'dataviz/sparkline/sparkline'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'dataviz.sparkline',\n name: 'Sparkline',\n category: 'dataviz',\n description: 'Sparkline widgets.',\n depends: ['dataviz.chart']\n };\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('util/main', ['kendo.core'], f);\n}(function () {\n (function () {\n var kendo = window.kendo, deepExtend = kendo.deepExtend;\n function sqr(value) {\n return value * value;\n }\n var now = Date.now;\n if (!now) {\n now = function () {\n return new Date().getTime();\n };\n }\n function renderSize(size) {\n if (typeof size !== 'string') {\n size += 'px';\n }\n return size;\n }\n function renderPos(pos) {\n var result = [];\n if (pos) {\n var parts = kendo.toHyphens(pos).split('-');\n for (var i = 0; i < parts.length; i++) {\n result.push('k-pos-' + parts[i]);\n }\n }\n return result.join(' ');\n }\n function arabicToRoman(n) {\n var literals = {\n 1: 'i',\n 10: 'x',\n 100: 'c',\n 2: 'ii',\n 20: 'xx',\n 200: 'cc',\n 3: 'iii',\n 30: 'xxx',\n 300: 'ccc',\n 4: 'iv',\n 40: 'xl',\n 400: 'cd',\n 5: 'v',\n 50: 'l',\n 500: 'd',\n 6: 'vi',\n 60: 'lx',\n 600: 'dc',\n 7: 'vii',\n 70: 'lxx',\n 700: 'dcc',\n 8: 'viii',\n 80: 'lxxx',\n 800: 'dccc',\n 9: 'ix',\n 90: 'xc',\n 900: 'cm',\n 1000: 'm'\n };\n var values = [\n 1000,\n 900,\n 800,\n 700,\n 600,\n 500,\n 400,\n 300,\n 200,\n 100,\n 90,\n 80,\n 70,\n 60,\n 50,\n 40,\n 30,\n 20,\n 10,\n 9,\n 8,\n 7,\n 6,\n 5,\n 4,\n 3,\n 2,\n 1\n ];\n var roman = '';\n while (n > 0) {\n if (n < values[0]) {\n values.shift();\n } else {\n roman += literals[values[0]];\n n -= values[0];\n }\n }\n return roman;\n }\n function romanToArabic(r) {\n r = r.toLowerCase();\n var digits = {\n i: 1,\n v: 5,\n x: 10,\n l: 50,\n c: 100,\n d: 500,\n m: 1000\n };\n var value = 0, prev = 0;\n for (var i = 0; i < r.length; ++i) {\n var v = digits[r.charAt(i)];\n if (!v) {\n return null;\n }\n value += v;\n if (v > prev) {\n value -= 2 * prev;\n }\n prev = v;\n }\n return value;\n }\n function memoize(f) {\n var cache = Object.create(null);\n return function () {\n var id = '';\n for (var i = arguments.length; --i >= 0;) {\n id += ':' + arguments[i];\n }\n return id in cache ? cache[id] : cache[id] = f.apply(this, arguments);\n };\n }\n function isUnicodeLetter(ch) {\n return RX_UNICODE_LETTER.test(ch);\n }\n deepExtend(kendo, {\n util: {\n now: now,\n renderPos: renderPos,\n renderSize: renderSize,\n sqr: sqr,\n romanToArabic: romanToArabic,\n arabicToRoman: arabicToRoman,\n memoize: memoize,\n isUnicodeLetter: isUnicodeLetter\n }\n });\n var RX_UNICODE_LETTER = new RegExp('[\\\\u0041-\\\\u005A\\\\u0061-\\\\u007A\\\\u00AA\\\\u00B5\\\\u00BA\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02C1\\\\u02C6-\\\\u02D1\\\\u02E0-\\\\u02E4\\\\u02EC\\\\u02EE\\\\u0370-\\\\u0374\\\\u0376\\\\u0377\\\\u037A-\\\\u037D\\\\u037F\\\\u0386\\\\u0388-\\\\u038A\\\\u038C\\\\u038E-\\\\u03A1\\\\u03A3-\\\\u03F5\\\\u03F7-\\\\u0481\\\\u048A-\\\\u052F\\\\u0531-\\\\u0556\\\\u0559\\\\u0561-\\\\u0587\\\\u05D0-\\\\u05EA\\\\u05F0-\\\\u05F2\\\\u0620-\\\\u064A\\\\u066E\\\\u066F\\\\u0671-\\\\u06D3\\\\u06D5\\\\u06E5\\\\u06E6\\\\u06EE\\\\u06EF\\\\u06FA-\\\\u06FC\\\\u06FF\\\\u0710\\\\u0712-\\\\u072F\\\\u074D-\\\\u07A5\\\\u07B1\\\\u07CA-\\\\u07EA\\\\u07F4\\\\u07F5\\\\u07FA\\\\u0800-\\\\u0815\\\\u081A\\\\u0824\\\\u0828\\\\u0840-\\\\u0858\\\\u08A0-\\\\u08B2\\\\u0904-\\\\u0939\\\\u093D\\\\u0950\\\\u0958-\\\\u0961\\\\u0971-\\\\u0980\\\\u0985-\\\\u098C\\\\u098F\\\\u0990\\\\u0993-\\\\u09A8\\\\u09AA-\\\\u09B0\\\\u09B2\\\\u09B6-\\\\u09B9\\\\u09BD\\\\u09CE\\\\u09DC\\\\u09DD\\\\u09DF-\\\\u09E1\\\\u09F0\\\\u09F1\\\\u0A05-\\\\u0A0A\\\\u0A0F\\\\u0A10\\\\u0A13-\\\\u0A28\\\\u0A2A-\\\\u0A30\\\\u0A32\\\\u0A33\\\\u0A35\\\\u0A36\\\\u0A38\\\\u0A39\\\\u0A59-\\\\u0A5C\\\\u0A5E\\\\u0A72-\\\\u0A74\\\\u0A85-\\\\u0A8D\\\\u0A8F-\\\\u0A91\\\\u0A93-\\\\u0AA8\\\\u0AAA-\\\\u0AB0\\\\u0AB2\\\\u0AB3\\\\u0AB5-\\\\u0AB9\\\\u0ABD\\\\u0AD0\\\\u0AE0\\\\u0AE1\\\\u0B05-\\\\u0B0C\\\\u0B0F\\\\u0B10\\\\u0B13-\\\\u0B28\\\\u0B2A-\\\\u0B30\\\\u0B32\\\\u0B33\\\\u0B35-\\\\u0B39\\\\u0B3D\\\\u0B5C\\\\u0B5D\\\\u0B5F-\\\\u0B61\\\\u0B71\\\\u0B83\\\\u0B85-\\\\u0B8A\\\\u0B8E-\\\\u0B90\\\\u0B92-\\\\u0B95\\\\u0B99\\\\u0B9A\\\\u0B9C\\\\u0B9E\\\\u0B9F\\\\u0BA3\\\\u0BA4\\\\u0BA8-\\\\u0BAA\\\\u0BAE-\\\\u0BB9\\\\u0BD0\\\\u0C05-\\\\u0C0C\\\\u0C0E-\\\\u0C10\\\\u0C12-\\\\u0C28\\\\u0C2A-\\\\u0C39\\\\u0C3D\\\\u0C58\\\\u0C59\\\\u0C60\\\\u0C61\\\\u0C85-\\\\u0C8C\\\\u0C8E-\\\\u0C90\\\\u0C92-\\\\u0CA8\\\\u0CAA-\\\\u0CB3\\\\u0CB5-\\\\u0CB9\\\\u0CBD\\\\u0CDE\\\\u0CE0\\\\u0CE1\\\\u0CF1\\\\u0CF2\\\\u0D05-\\\\u0D0C\\\\u0D0E-\\\\u0D10\\\\u0D12-\\\\u0D3A\\\\u0D3D\\\\u0D4E\\\\u0D60\\\\u0D61\\\\u0D7A-\\\\u0D7F\\\\u0D85-\\\\u0D96\\\\u0D9A-\\\\u0DB1\\\\u0DB3-\\\\u0DBB\\\\u0DBD\\\\u0DC0-\\\\u0DC6\\\\u0E01-\\\\u0E30\\\\u0E32\\\\u0E33\\\\u0E40-\\\\u0E46\\\\u0E81\\\\u0E82\\\\u0E84\\\\u0E87\\\\u0E88\\\\u0E8A\\\\u0E8D\\\\u0E94-\\\\u0E97\\\\u0E99-\\\\u0E9F\\\\u0EA1-\\\\u0EA3\\\\u0EA5\\\\u0EA7\\\\u0EAA\\\\u0EAB\\\\u0EAD-\\\\u0EB0\\\\u0EB2\\\\u0EB3\\\\u0EBD\\\\u0EC0-\\\\u0EC4\\\\u0EC6\\\\u0EDC-\\\\u0EDF\\\\u0F00\\\\u0F40-\\\\u0F47\\\\u0F49-\\\\u0F6C\\\\u0F88-\\\\u0F8C\\\\u1000-\\\\u102A\\\\u103F\\\\u1050-\\\\u1055\\\\u105A-\\\\u105D\\\\u1061\\\\u1065\\\\u1066\\\\u106E-\\\\u1070\\\\u1075-\\\\u1081\\\\u108E\\\\u10A0-\\\\u10C5\\\\u10C7\\\\u10CD\\\\u10D0-\\\\u10FA\\\\u10FC-\\\\u1248\\\\u124A-\\\\u124D\\\\u1250-\\\\u1256\\\\u1258\\\\u125A-\\\\u125D\\\\u1260-\\\\u1288\\\\u128A-\\\\u128D\\\\u1290-\\\\u12B0\\\\u12B2-\\\\u12B5\\\\u12B8-\\\\u12BE\\\\u12C0\\\\u12C2-\\\\u12C5\\\\u12C8-\\\\u12D6\\\\u12D8-\\\\u1310\\\\u1312-\\\\u1315\\\\u1318-\\\\u135A\\\\u1380-\\\\u138F\\\\u13A0-\\\\u13F4\\\\u1401-\\\\u166C\\\\u166F-\\\\u167F\\\\u1681-\\\\u169A\\\\u16A0-\\\\u16EA\\\\u16EE-\\\\u16F8\\\\u1700-\\\\u170C\\\\u170E-\\\\u1711\\\\u1720-\\\\u1731\\\\u1740-\\\\u1751\\\\u1760-\\\\u176C\\\\u176E-\\\\u1770\\\\u1780-\\\\u17B3\\\\u17D7\\\\u17DC\\\\u1820-\\\\u1877\\\\u1880-\\\\u18A8\\\\u18AA\\\\u18B0-\\\\u18F5\\\\u1900-\\\\u191E\\\\u1950-\\\\u196D\\\\u1970-\\\\u1974\\\\u1980-\\\\u19AB\\\\u19C1-\\\\u19C7\\\\u1A00-\\\\u1A16\\\\u1A20-\\\\u1A54\\\\u1AA7\\\\u1B05-\\\\u1B33\\\\u1B45-\\\\u1B4B\\\\u1B83-\\\\u1BA0\\\\u1BAE\\\\u1BAF\\\\u1BBA-\\\\u1BE5\\\\u1C00-\\\\u1C23\\\\u1C4D-\\\\u1C4F\\\\u1C5A-\\\\u1C7D\\\\u1CE9-\\\\u1CEC\\\\u1CEE-\\\\u1CF1\\\\u1CF5\\\\u1CF6\\\\u1D00-\\\\u1DBF\\\\u1E00-\\\\u1F15\\\\u1F18-\\\\u1F1D\\\\u1F20-\\\\u1F45\\\\u1F48-\\\\u1F4D\\\\u1F50-\\\\u1F57\\\\u1F59\\\\u1F5B\\\\u1F5D\\\\u1F5F-\\\\u1F7D\\\\u1F80-\\\\u1FB4\\\\u1FB6-\\\\u1FBC\\\\u1FBE\\\\u1FC2-\\\\u1FC4\\\\u1FC6-\\\\u1FCC\\\\u1FD0-\\\\u1FD3\\\\u1FD6-\\\\u1FDB\\\\u1FE0-\\\\u1FEC\\\\u1FF2-\\\\u1FF4\\\\u1FF6-\\\\u1FFC\\\\u2071\\\\u207F\\\\u2090-\\\\u209C\\\\u2102\\\\u2107\\\\u210A-\\\\u2113\\\\u2115\\\\u2119-\\\\u211D\\\\u2124\\\\u2126\\\\u2128\\\\u212A-\\\\u212D\\\\u212F-\\\\u2139\\\\u213C-\\\\u213F\\\\u2145-\\\\u2149\\\\u214E\\\\u2160-\\\\u2188\\\\u2C00-\\\\u2C2E\\\\u2C30-\\\\u2C5E\\\\u2C60-\\\\u2CE4\\\\u2CEB-\\\\u2CEE\\\\u2CF2\\\\u2CF3\\\\u2D00-\\\\u2D25\\\\u2D27\\\\u2D2D\\\\u2D30-\\\\u2D67\\\\u2D6F\\\\u2D80-\\\\u2D96\\\\u2DA0-\\\\u2DA6\\\\u2DA8-\\\\u2DAE\\\\u2DB0-\\\\u2DB6\\\\u2DB8-\\\\u2DBE\\\\u2DC0-\\\\u2DC6\\\\u2DC8-\\\\u2DCE\\\\u2DD0-\\\\u2DD6\\\\u2DD8-\\\\u2DDE\\\\u2E2F\\\\u3005-\\\\u3007\\\\u3021-\\\\u3029\\\\u3031-\\\\u3035\\\\u3038-\\\\u303C\\\\u3041-\\\\u3096\\\\u309D-\\\\u309F\\\\u30A1-\\\\u30FA\\\\u30FC-\\\\u30FF\\\\u3105-\\\\u312D\\\\u3131-\\\\u318E\\\\u31A0-\\\\u31BA\\\\u31F0-\\\\u31FF\\\\u3400-\\\\u4DB5\\\\u4E00-\\\\u9FCC\\\\uA000-\\\\uA48C\\\\uA4D0-\\\\uA4FD\\\\uA500-\\\\uA60C\\\\uA610-\\\\uA61F\\\\uA62A\\\\uA62B\\\\uA640-\\\\uA66E\\\\uA67F-\\\\uA69D\\\\uA6A0-\\\\uA6EF\\\\uA717-\\\\uA71F\\\\uA722-\\\\uA788\\\\uA78B-\\\\uA78E\\\\uA790-\\\\uA7AD\\\\uA7B0\\\\uA7B1\\\\uA7F7-\\\\uA801\\\\uA803-\\\\uA805\\\\uA807-\\\\uA80A\\\\uA80C-\\\\uA822\\\\uA840-\\\\uA873\\\\uA882-\\\\uA8B3\\\\uA8F2-\\\\uA8F7\\\\uA8FB\\\\uA90A-\\\\uA925\\\\uA930-\\\\uA946\\\\uA960-\\\\uA97C\\\\uA984-\\\\uA9B2\\\\uA9CF\\\\uA9E0-\\\\uA9E4\\\\uA9E6-\\\\uA9EF\\\\uA9FA-\\\\uA9FE\\\\uAA00-\\\\uAA28\\\\uAA40-\\\\uAA42\\\\uAA44-\\\\uAA4B\\\\uAA60-\\\\uAA76\\\\uAA7A\\\\uAA7E-\\\\uAAAF\\\\uAAB1\\\\uAAB5\\\\uAAB6\\\\uAAB9-\\\\uAABD\\\\uAAC0\\\\uAAC2\\\\uAADB-\\\\uAADD\\\\uAAE0-\\\\uAAEA\\\\uAAF2-\\\\uAAF4\\\\uAB01-\\\\uAB06\\\\uAB09-\\\\uAB0E\\\\uAB11-\\\\uAB16\\\\uAB20-\\\\uAB26\\\\uAB28-\\\\uAB2E\\\\uAB30-\\\\uAB5A\\\\uAB5C-\\\\uAB5F\\\\uAB64\\\\uAB65\\\\uABC0-\\\\uABE2\\\\uAC00-\\\\uD7A3\\\\uD7B0-\\\\uD7C6\\\\uD7CB-\\\\uD7FB\\\\uF900-\\\\uFA6D\\\\uFA70-\\\\uFAD9\\\\uFB00-\\\\uFB06\\\\uFB13-\\\\uFB17\\\\uFB1D\\\\uFB1F-\\\\uFB28\\\\uFB2A-\\\\uFB36\\\\uFB38-\\\\uFB3C\\\\uFB3E\\\\uFB40\\\\uFB41\\\\uFB43\\\\uFB44\\\\uFB46-\\\\uFBB1\\\\uFBD3-\\\\uFD3D\\\\uFD50-\\\\uFD8F\\\\uFD92-\\\\uFDC7\\\\uFDF0-\\\\uFDFB\\\\uFE70-\\\\uFE74\\\\uFE76-\\\\uFEFC\\\\uFF21-\\\\uFF3A\\\\uFF41-\\\\uFF5A\\\\uFF66-\\\\uFFBE\\\\uFFC2-\\\\uFFC7\\\\uFFCA-\\\\uFFCF\\\\uFFD2-\\\\uFFD7\\\\uFFDA-\\\\uFFDC]');\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('dataviz/map/location', [\n 'kendo.drawing',\n 'util/main'\n ], f);\n}(function () {\n (function ($, undefined) {\n var math = Math, abs = math.abs, atan = math.atan, atan2 = math.atan2, cos = math.cos, max = math.max, min = math.min, sin = math.sin, tan = math.tan, kendo = window.kendo, Class = kendo.Class, dataviz = kendo.dataviz, deepExtend = kendo.deepExtend, util = kendo.drawing.util, defined = util.defined, deg = util.deg, rad = util.rad, round = util.round, valueOrDefault = util.valueOrDefault, sqr = kendo.util.sqr;\n var Location = Class.extend({\n init: function (lat, lng) {\n if (arguments.length === 1) {\n this.lat = lat[0];\n this.lng = lat[1];\n } else {\n this.lat = lat;\n this.lng = lng;\n }\n },\n DISTANCE_ITERATIONS: 100,\n DISTANCE_CONVERGENCE: 1e-12,\n DISTANCE_PRECISION: 2,\n FORMAT: '{0:N6},{1:N6}',\n toArray: function () {\n return [\n this.lat,\n this.lng\n ];\n },\n equals: function (loc) {\n return loc && loc.lat === this.lat && loc.lng === this.lng;\n },\n clone: function () {\n return new Location(this.lat, this.lng);\n },\n round: function (precision) {\n this.lng = round(this.lng, precision);\n this.lat = round(this.lat, precision);\n return this;\n },\n wrap: function () {\n this.lng = this.lng % 180;\n this.lat = this.lat % 90;\n return this;\n },\n distanceTo: function (dest, datum) {\n return this.greatCircleTo(dest, datum).distance;\n },\n destination: function (distance, bearing, datum) {\n bearing = rad(bearing);\n datum = datum || dataviz.map.datums.WGS84;\n var fromLat = rad(this.lat);\n var fromLng = rad(this.lng);\n var dToR = distance / kendo.dataviz.map.datums.WGS84.a;\n var lat = math.asin(sin(fromLat) * cos(dToR) + cos(fromLat) * sin(dToR) * cos(bearing));\n var lng = fromLng + atan2(sin(bearing) * sin(dToR) * cos(fromLat), cos(dToR) - sin(fromLat) * sin(lat));\n return new Location(deg(lat), deg(lng));\n },\n greatCircleTo: function (dest, datum) {\n dest = Location.create(dest);\n datum = datum || dataviz.map.datums.WGS84;\n if (!dest || this.clone().round(8).equals(dest.clone().round(8))) {\n return {\n distance: 0,\n azimuthFrom: 0,\n azimuthTo: 0\n };\n }\n var a = datum.a;\n var b = datum.b;\n var f = datum.f;\n var L = rad(dest.lng - this.lng);\n var U1 = atan((1 - f) * tan(rad(this.lat)));\n var sinU1 = sin(U1);\n var cosU1 = cos(U1);\n var U2 = atan((1 - f) * tan(rad(dest.lat)));\n var sinU2 = sin(U2);\n var cosU2 = cos(U2);\n var lambda = L;\n var prevLambda;\n var i = this.DISTANCE_ITERATIONS;\n var converged = false;\n var sinLambda;\n var cosLambda;\n var sino;\n var cosA2;\n var coso;\n var cos2om;\n var sigma;\n while (!converged && i-- > 0) {\n sinLambda = sin(lambda);\n cosLambda = cos(lambda);\n sino = math.sqrt(sqr(cosU2 * sinLambda) + sqr(cosU1 * sinU2 - sinU1 * cosU2 * cosLambda));\n coso = sinU1 * sinU2 + cosU1 * cosU2 * cosLambda;\n sigma = atan2(sino, coso);\n var sinA = cosU1 * cosU2 * sinLambda / sino;\n cosA2 = 1 - sqr(sinA);\n cos2om = 0;\n if (cosA2 !== 0) {\n cos2om = coso - 2 * sinU1 * sinU2 / cosA2;\n }\n prevLambda = lambda;\n var C = f / 16 * cosA2 * (4 + f * (4 - 3 * cosA2));\n lambda = L + (1 - C) * f * sinA * (sigma + C * sino * (cos2om + C * coso * (-1 + 2 * sqr(cos2om))));\n converged = abs(lambda - prevLambda) <= this.DISTANCE_CONVERGENCE;\n }\n var u2 = cosA2 * (sqr(a) - sqr(b)) / sqr(b);\n var A = 1 + u2 / 16384 * (4096 + u2 * (-768 + u2 * (320 - 175 * u2)));\n var B = u2 / 1024 * (256 + u2 * (-128 + u2 * (74 - 47 * u2)));\n var deltao = B * sino * (cos2om + B / 4 * (coso * (-1 + 2 * sqr(cos2om)) - B / 6 * cos2om * (-3 + 4 * sqr(sino)) * (-3 + 4 * sqr(cos2om))));\n var azimuthFrom = atan2(cosU2 * sinLambda, cosU1 * sinU2 - sinU1 * cosU2 * cosLambda);\n var azimuthTo = atan2(cosU1 * sinLambda, -sinU1 * cosU2 + cosU1 * sinU2 * cosLambda);\n return {\n distance: round(b * A * (sigma - deltao), this.DISTANCE_PRECISION),\n azimuthFrom: deg(azimuthFrom),\n azimuthTo: deg(azimuthTo)\n };\n }\n });\n Location.fn.toString = function () {\n return kendo.format(this.FORMAT, this.lat, this.lng);\n };\n Location.fromLngLat = function (ll) {\n return new Location(ll[1], ll[0]);\n };\n Location.fromLatLng = function (ll) {\n return new Location(ll[0], ll[1]);\n };\n Location.create = function (a, b) {\n if (defined(a)) {\n if (a instanceof Location) {\n return a.clone();\n } else if (arguments.length === 1 && a.length === 2) {\n return Location.fromLatLng(a);\n } else {\n return new Location(a, b);\n }\n }\n };\n var Extent = Class.extend({\n init: function (nw, se) {\n nw = Location.create(nw);\n se = Location.create(se);\n if (nw.lng + 180 > se.lng + 180 && nw.lat + 90 < se.lat + 90) {\n this.se = nw;\n this.nw = se;\n } else {\n this.se = se;\n this.nw = nw;\n }\n },\n contains: function (loc) {\n var nw = this.nw, se = this.se, lng = valueOrDefault(loc.lng, loc[1]), lat = valueOrDefault(loc.lat, loc[0]);\n return loc && lng + 180 >= nw.lng + 180 && lng + 180 <= se.lng + 180 && lat + 90 >= se.lat + 90 && lat + 90 <= nw.lat + 90;\n },\n center: function () {\n var nw = this.nw;\n var se = this.se;\n var lng = nw.lng + (se.lng - nw.lng) / 2;\n var lat = nw.lat + (se.lat - nw.lat) / 2;\n return new Location(lat, lng);\n },\n containsAny: function (locs) {\n var result = false;\n for (var i = 0; i < locs.length; i++) {\n result = result || this.contains(locs[i]);\n }\n return result;\n },\n include: function (loc) {\n var nw = this.nw, se = this.se, lng = valueOrDefault(loc.lng, loc[1]), lat = valueOrDefault(loc.lat, loc[0]);\n nw.lng = min(nw.lng, lng);\n nw.lat = max(nw.lat, lat);\n se.lng = max(se.lng, lng);\n se.lat = min(se.lat, lat);\n },\n includeAll: function (locs) {\n for (var i = 0; i < locs.length; i++) {\n this.include(locs[i]);\n }\n },\n edges: function () {\n var nw = this.nw, se = this.se;\n return {\n nw: this.nw,\n ne: new Location(nw.lat, se.lng),\n se: this.se,\n sw: new Location(se.lat, nw.lng)\n };\n },\n toArray: function () {\n var nw = this.nw, se = this.se;\n return [\n nw,\n new Location(nw.lat, se.lng),\n se,\n new Location(se.lat, nw.lng)\n ];\n },\n overlaps: function (extent) {\n return this.containsAny(extent.toArray()) || extent.containsAny(this.toArray());\n }\n });\n Extent.World = new Extent([\n 90,\n -180\n ], [\n -90,\n 180\n ]);\n Extent.create = function (a, b) {\n if (a instanceof Extent) {\n return a;\n } else if (a && b) {\n return new Extent(a, b);\n } else if (a && a.length === 4 && !b) {\n return new Extent([\n a[0],\n a[1]\n ], [\n a[2],\n a[3]\n ]);\n }\n };\n deepExtend(dataviz, {\n map: {\n Extent: Extent,\n Location: Location\n }\n });\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('dataviz/map/attribution', ['kendo.drawing'], f);\n}(function () {\n (function () {\n var kendo = window.kendo, Widget = kendo.ui.Widget, template = kendo.template, util = kendo.drawing.util, valueOrDefault = util.valueOrDefault, defined = util.defined;\n var Attribution = Widget.extend({\n init: function (element, options) {\n Widget.fn.init.call(this, element, options);\n this._initOptions(options);\n this.items = [];\n this.element.addClass('k-widget k-attribution');\n },\n options: {\n name: 'Attribution',\n separator: ' | ',\n itemTemplate: '#= text #'\n },\n filter: function (extent, zoom) {\n this._extent = extent;\n this._zoom = zoom;\n this._render();\n },\n add: function (item) {\n if (defined(item)) {\n if (typeof item === 'string') {\n item = { text: item };\n }\n this.items.push(item);\n this._render();\n }\n },\n remove: function (text) {\n var result = [];\n for (var i = 0; i < this.items.length; i++) {\n var item = this.items[i];\n if (item.text !== text) {\n result.push(item);\n }\n }\n this.items = result;\n this._render();\n },\n clear: function () {\n this.items = [];\n this.element.empty();\n },\n _render: function () {\n var result = [];\n var itemTemplate = template(this.options.itemTemplate);\n for (var i = 0; i < this.items.length; i++) {\n var item = this.items[i];\n var text = this._itemText(item);\n if (text !== '') {\n result.push(itemTemplate({ text: text }));\n }\n }\n if (result.length > 0) {\n this.element.empty().append(result.join(this.options.separator)).show();\n } else {\n this.element.hide();\n }\n },\n _itemText: function (item) {\n var text = '';\n var inZoomLevel = this._inZoomLevel(item.minZoom, item.maxZoom);\n var inArea = this._inArea(item.extent);\n if (inZoomLevel && inArea) {\n text += item.text;\n }\n return text;\n },\n _inZoomLevel: function (min, max) {\n var result = true;\n min = valueOrDefault(min, -Number.MAX_VALUE);\n max = valueOrDefault(max, Number.MAX_VALUE);\n result = this._zoom > min && this._zoom < max;\n return result;\n },\n _inArea: function (area) {\n var result = true;\n if (area) {\n result = area.contains(this._extent);\n }\n return result;\n }\n });\n kendo.dataviz.ui.plugin(Attribution);\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('dataviz/map/navigator', ['kendo.core'], f);\n}(function () {\n (function ($) {\n var kendo = window.kendo;\n var Widget = kendo.ui.Widget;\n var keys = kendo.keys;\n var proxy = $.proxy;\n var NS = '.kendoNavigator';\n function button(dir) {\n return kendo.format('', dir);\n }\n var BUTTONS = button('up') + button('right') + button('down') + button('left');\n var Navigator = Widget.extend({\n init: function (element, options) {\n Widget.fn.init.call(this, element, options);\n this._initOptions(options);\n this.element.addClass('k-widget k-header k-shadow k-navigator').append(BUTTONS).on('click' + NS, '.k-button', proxy(this, '_click'));\n var parentElement = this.element.parent().closest('[' + kendo.attr('role') + ']');\n this._keyroot = parentElement.length > 0 ? parentElement : this.element;\n this._tabindex(this._keyroot);\n this._keydown = proxy(this._keydown, this);\n this._keyroot.on('keydown', this._keydown);\n },\n options: {\n name: 'Navigator',\n panStep: 1\n },\n events: ['pan'],\n dispose: function () {\n this._keyroot.off('keydown', this._keydown);\n },\n _pan: function (x, y) {\n var panStep = this.options.panStep;\n this.trigger('pan', {\n x: x * panStep,\n y: y * panStep\n });\n },\n _click: function (e) {\n var x = 0;\n var y = 0;\n var button = $(e.currentTarget);\n if (button.is('.k-navigator-up')) {\n y = 1;\n } else if (button.is('.k-navigator-down')) {\n y = -1;\n } else if (button.is('.k-navigator-right')) {\n x = 1;\n } else if (button.is('.k-navigator-left')) {\n x = -1;\n }\n this._pan(x, y);\n e.preventDefault();\n },\n _keydown: function (e) {\n switch (e.which) {\n case keys.UP:\n this._pan(0, 1);\n e.preventDefault();\n break;\n case keys.DOWN:\n this._pan(0, -1);\n e.preventDefault();\n break;\n case keys.RIGHT:\n this._pan(1, 0);\n e.preventDefault();\n break;\n case keys.LEFT:\n this._pan(-1, 0);\n e.preventDefault();\n break;\n }\n }\n });\n kendo.dataviz.ui.plugin(Navigator);\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('dataviz/map/zoom', ['kendo.core'], f);\n}(function () {\n (function ($) {\n var kendo = window.kendo;\n var Widget = kendo.ui.Widget;\n var keys = kendo.keys;\n var proxy = $.proxy;\n function button(dir, iconClass) {\n return kendo.format('', dir, iconClass);\n }\n var NS = '.kendoZoomControl';\n var BUTTONS = button('in', 'k-i-plus') + button('out', 'k-i-minus');\n var PLUS = 187;\n var MINUS = 189;\n var FF_PLUS = 61;\n var FF_MINUS = 173;\n var ZoomControl = Widget.extend({\n init: function (element, options) {\n Widget.fn.init.call(this, element, options);\n this._initOptions(options);\n this.element.addClass('k-widget k-zoom-control k-button-wrap k-buttons-horizontal k-button-group k-group-horizontal').append(BUTTONS).on('click' + NS, '.k-button', proxy(this, '_click'));\n var parentElement = this.element.parent().closest('[' + kendo.attr('role') + ']');\n this._keyroot = parentElement.length > 0 ? parentElement : this.element;\n this._tabindex(this._keyroot);\n this._keydown = proxy(this._keydown, this);\n this._keyroot.on('keydown', this._keydown);\n },\n options: {\n name: 'ZoomControl',\n zoomStep: 1\n },\n events: ['change'],\n _change: function (dir) {\n var zoomStep = this.options.zoomStep;\n this.trigger('change', { delta: dir * zoomStep });\n },\n _click: function (e) {\n var button = $(e.currentTarget);\n var dir = 1;\n if (button.is('.k-zoom-out')) {\n dir = -1;\n }\n this._change(dir);\n e.preventDefault();\n },\n _keydown: function (e) {\n switch (e.which) {\n case keys.NUMPAD_PLUS:\n case PLUS:\n case FF_PLUS:\n this._change(1);\n break;\n case keys.NUMPAD_MINUS:\n case MINUS:\n case FF_MINUS:\n this._change(-1);\n break;\n }\n }\n });\n kendo.dataviz.ui.plugin(ZoomControl);\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('dataviz/map/crs', [\n 'dataviz/map/location',\n 'kendo.drawing'\n ], f);\n}(function () {\n (function ($, undefined) {\n var math = Math, atan = math.atan, exp = math.exp, pow = math.pow, sin = math.sin, log = math.log, tan = math.tan, kendo = window.kendo, Class = kendo.Class, dataviz = kendo.dataviz, deepExtend = kendo.deepExtend, g = kendo.geometry, Point = g.Point, map = dataviz.map, Location = map.Location, util = kendo.drawing.util, rad = util.rad, deg = util.deg, limit = util.limitValue;\n var PI = math.PI, PI_DIV_2 = PI / 2, PI_DIV_4 = PI / 4, DEG_TO_RAD = PI / 180;\n var WGS84 = {\n a: 6378137,\n b: 6356752.314245179,\n f: 0.0033528106647474805,\n e: 0.08181919084262149\n };\n var Mercator = Class.extend({\n init: function (options) {\n this._initOptions(options);\n },\n MAX_LNG: 180,\n MAX_LAT: 85.0840590501,\n INVERSE_ITERATIONS: 15,\n INVERSE_CONVERGENCE: 1e-12,\n options: {\n centralMeridian: 0,\n datum: WGS84\n },\n forward: function (loc, clamp) {\n var proj = this, options = proj.options, datum = options.datum, r = datum.a, lng0 = options.centralMeridian, lat = limit(loc.lat, -proj.MAX_LAT, proj.MAX_LAT), lng = clamp ? limit(loc.lng, -proj.MAX_LNG, proj.MAX_LNG) : loc.lng, x = rad(lng - lng0) * r, y = proj._projectLat(lat);\n return new Point(x, y);\n },\n _projectLat: function (lat) {\n var datum = this.options.datum, ecc = datum.e, r = datum.a, y = rad(lat), ts = tan(PI_DIV_4 + y / 2), con = ecc * sin(y), p = pow((1 - con) / (1 + con), ecc / 2);\n return r * log(ts * p);\n },\n inverse: function (point, clamp) {\n var proj = this, options = proj.options, datum = options.datum, r = datum.a, lng0 = options.centralMeridian, lng = point.x / (DEG_TO_RAD * r) + lng0, lat = limit(proj._inverseY(point.y), -proj.MAX_LAT, proj.MAX_LAT);\n if (clamp) {\n lng = limit(lng, -proj.MAX_LNG, proj.MAX_LNG);\n }\n return new Location(lat, lng);\n },\n _inverseY: function (y) {\n var proj = this, datum = proj.options.datum, r = datum.a, ecc = datum.e, ecch = ecc / 2, ts = exp(-y / r), phi = PI_DIV_2 - 2 * atan(ts), i;\n for (i = 0; i <= proj.INVERSE_ITERATIONS; i++) {\n var con = ecc * sin(phi), p = pow((1 - con) / (1 + con), ecch), dphi = PI_DIV_2 - 2 * atan(ts * p) - phi;\n phi += dphi;\n if (math.abs(dphi) <= proj.INVERSE_CONVERGENCE) {\n break;\n }\n }\n return deg(phi);\n }\n });\n var SphericalMercator = Mercator.extend({\n MAX_LAT: 85.0511287798,\n _projectLat: function (lat) {\n var r = this.options.datum.a, y = rad(lat), ts = tan(PI_DIV_4 + y / 2);\n return r * log(ts);\n },\n _inverseY: function (y) {\n var r = this.options.datum.a, ts = exp(-y / r);\n return deg(PI_DIV_2 - 2 * atan(ts));\n }\n });\n var Equirectangular = Class.extend({\n forward: function (loc) {\n return new Point(loc.lng, loc.lat);\n },\n inverse: function (point) {\n return new Location(point.y, point.x);\n }\n });\n var EPSG3857 = Class.extend({\n init: function () {\n var crs = this, proj = crs._proj = new SphericalMercator();\n var c = this.c = 2 * PI * proj.options.datum.a;\n this._tm = g.transform().translate(0.5, 0.5).scale(1 / c, -1 / c);\n this._itm = g.transform().scale(c, -c).translate(-0.5, -0.5);\n },\n toPoint: function (loc, scale, clamp) {\n var point = this._proj.forward(loc, clamp);\n return point.transform(this._tm).scale(scale || 1);\n },\n toLocation: function (point, scale, clamp) {\n point = point.clone().scale(1 / (scale || 1)).transform(this._itm);\n return this._proj.inverse(point, clamp);\n }\n });\n var EPSG3395 = Class.extend({\n init: function () {\n this._proj = new Mercator();\n },\n toPoint: function (loc) {\n return this._proj.forward(loc);\n },\n toLocation: function (point) {\n return this._proj.inverse(point);\n }\n });\n var EPSG4326 = Class.extend({\n init: function () {\n this._proj = new Equirectangular();\n },\n toPoint: function (loc) {\n return this._proj.forward(loc);\n },\n toLocation: function (point) {\n return this._proj.inverse(point);\n }\n });\n deepExtend(dataviz, {\n map: {\n crs: {\n EPSG3395: EPSG3395,\n EPSG3857: EPSG3857,\n EPSG4326: EPSG4326\n },\n datums: { WGS84: WGS84 },\n projections: {\n Equirectangular: Equirectangular,\n Mercator: Mercator,\n SphericalMercator: SphericalMercator\n }\n }\n });\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('dataviz/map/layers/base', [\n 'kendo.core',\n 'dataviz/map/location'\n ], f);\n}(function () {\n (function ($, undefined) {\n var proxy = $.proxy, kendo = window.kendo, Class = kendo.Class, dataviz = kendo.dataviz, deepExtend = kendo.deepExtend, Extent = dataviz.map.Extent, util = kendo.drawing.util, defined = util.defined;\n var Layer = Class.extend({\n init: function (map, options) {\n this._initOptions(options);\n this.map = map;\n this.element = $('
    ').css({\n 'zIndex': this.options.zIndex,\n 'opacity': this.options.opacity\n }).appendTo(map.scrollElement);\n this._beforeReset = proxy(this._beforeReset, this);\n this._reset = proxy(this._reset, this);\n this._resize = proxy(this._resize, this);\n this._panEnd = proxy(this._panEnd, this);\n this._activate();\n this._updateAttribution();\n },\n destroy: function () {\n this._deactivate();\n },\n show: function () {\n this.reset();\n this._activate();\n this._applyExtent(true);\n },\n hide: function () {\n this._deactivate();\n this._setVisibility(false);\n },\n reset: function () {\n this._beforeReset();\n this._reset();\n },\n _reset: function () {\n this._applyExtent();\n },\n _beforeReset: $.noop,\n _resize: $.noop,\n _panEnd: function () {\n this._applyExtent();\n },\n _applyExtent: function () {\n var options = this.options;\n var zoom = this.map.zoom();\n var matchMinZoom = !defined(options.minZoom) || zoom >= options.minZoom;\n var matchMaxZoom = !defined(options.maxZoom) || zoom <= options.maxZoom;\n var extent = Extent.create(options.extent);\n var inside = !extent || extent.overlaps(this.map.extent());\n this._setVisibility(matchMinZoom && matchMaxZoom && inside);\n },\n _setVisibility: function (visible) {\n this.element.css('display', visible ? '' : 'none');\n },\n _activate: function () {\n var map = this.map;\n map.bind('beforeReset', this._beforeReset);\n map.bind('reset', this._reset);\n map.bind('resize', this._resize);\n map.bind('panEnd', this._panEnd);\n },\n _deactivate: function () {\n var map = this.map;\n map.unbind('beforeReset', this._beforeReset);\n map.unbind('reset', this._reset);\n map.unbind('resize', this._resize);\n map.unbind('panEnd', this._panEnd);\n },\n _updateAttribution: function () {\n var attr = this.map.attribution;\n if (attr) {\n attr.add(this.options.attribution);\n }\n }\n });\n deepExtend(dataviz, { map: { layers: { Layer: Layer } } });\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('dataviz/map/layers/shape', [\n 'dataviz/map/layers/base',\n 'dataviz/map/location'\n ], f);\n}(function () {\n (function ($, undefined) {\n var proxy = $.proxy, kendo = window.kendo, Class = kendo.Class, DataSource = kendo.data.DataSource, dataviz = kendo.dataviz, deepExtend = kendo.deepExtend, g = kendo.geometry, d = kendo.drawing, Group = d.Group, last = d.util.last, defined = d.util.defined, map = dataviz.map, Location = map.Location, Layer = map.layers.Layer;\n var ShapeLayer = Layer.extend({\n init: function (map, options) {\n this._pan = proxy(this._pan, this);\n Layer.fn.init.call(this, map, options);\n this.surface = d.Surface.create(this.element, {\n width: map.scrollElement.width(),\n height: map.scrollElement.height()\n });\n this._initRoot();\n this.movable = new kendo.ui.Movable(this.surface.element);\n this._markers = [];\n this._click = this._handler('shapeClick');\n this.surface.bind('click', this._click);\n this._mouseenter = this._handler('shapeMouseEnter');\n this.surface.bind('mouseenter', this._mouseenter);\n this._mouseleave = this._handler('shapeMouseLeave');\n this.surface.bind('mouseleave', this._mouseleave);\n this._initDataSource();\n },\n options: { autoBind: true },\n destroy: function () {\n Layer.fn.destroy.call(this);\n this.surface.destroy();\n this.dataSource.unbind('change', this._dataChange);\n },\n setDataSource: function (dataSource) {\n if (this.dataSource) {\n this.dataSource.unbind('change', this._dataChange);\n }\n this.dataSource = kendo.data.DataSource.create(dataSource);\n this.dataSource.bind('change', this._dataChange);\n if (this.options.autoBind) {\n this.dataSource.fetch();\n }\n },\n _reset: function () {\n Layer.fn._reset.call(this);\n this._translateSurface();\n if (this._data) {\n this._load(this._data);\n }\n },\n _initRoot: function () {\n this._root = new Group();\n this.surface.draw(this._root);\n },\n _beforeReset: function () {\n this.surface.clear();\n this._initRoot();\n },\n _resize: function () {\n this.surface.size(this.map.size());\n },\n _initDataSource: function () {\n var dsOptions = this.options.dataSource;\n this._dataChange = proxy(this._dataChange, this);\n this.dataSource = DataSource.create(dsOptions).bind('change', this._dataChange);\n if (dsOptions && this.options.autoBind) {\n this.dataSource.fetch();\n }\n },\n _dataChange: function (e) {\n this._data = e.sender.view();\n this._load(this._data);\n },\n _load: function (data) {\n this._clearMarkers();\n if (!this._loader) {\n this._loader = new GeoJSONLoader(this.map, this.options.style, this);\n }\n var container = new Group();\n for (var i = 0; i < data.length; i++) {\n var shape = this._loader.parse(data[i]);\n if (shape) {\n container.append(shape);\n }\n }\n this._root.clear();\n this._root.append(container);\n },\n shapeCreated: function (shape) {\n var cancelled = false;\n if (shape instanceof d.Circle) {\n cancelled = defined(this._createMarker(shape));\n }\n if (!cancelled) {\n var args = {\n layer: this,\n shape: shape\n };\n cancelled = this.map.trigger('shapeCreated', args);\n }\n return cancelled;\n },\n featureCreated: function (e) {\n e.layer = this;\n this.map.trigger('shapeFeatureCreated', e);\n },\n _createMarker: function (shape) {\n var marker = this.map.markers.bind({ location: shape.location }, shape.dataItem);\n if (marker) {\n this._markers.push(marker);\n }\n return marker;\n },\n _clearMarkers: function () {\n for (var i = 0; i < this._markers.length; i++) {\n this.map.markers.remove(this._markers[i]);\n }\n this._markers = [];\n },\n _pan: function () {\n if (!this._panning) {\n this._panning = true;\n this.surface.suspendTracking();\n }\n },\n _panEnd: function (e) {\n Layer.fn._panEnd.call(this, e);\n this._translateSurface();\n this.surface.resumeTracking();\n this._panning = false;\n },\n _translateSurface: function () {\n var map = this.map;\n var nw = map.locationToView(map.extent().nw);\n if (this.surface.translate) {\n this.surface.translate(nw);\n this.movable.moveTo({\n x: nw.x,\n y: nw.y\n });\n }\n },\n _handler: function (event) {\n var layer = this;\n return function (e) {\n if (e.element) {\n var args = {\n layer: layer,\n shape: e.element,\n originalEvent: e.originalEvent\n };\n layer.map.trigger(event, args);\n }\n };\n },\n _activate: function () {\n Layer.fn._activate.call(this);\n this.map.bind('pan', this._pan);\n },\n _deactivate: function () {\n Layer.fn._deactivate.call(this);\n this.map.unbind('pan', this._pan);\n }\n });\n var GeoJSONLoader = Class.extend({\n init: function (locator, defaultStyle, observer) {\n this.observer = observer;\n this.locator = locator;\n this.style = defaultStyle;\n },\n parse: function (item) {\n var root = new Group();\n var unwrap = true;\n if (item.type === 'Feature') {\n unwrap = false;\n this._loadGeometryTo(root, item.geometry, item);\n this._featureCreated(root, item);\n } else {\n this._loadGeometryTo(root, item, item);\n }\n if (unwrap && root.children.length < 2) {\n root = root.children[0];\n }\n return root;\n },\n _shapeCreated: function (shape) {\n var cancelled = false;\n if (this.observer && this.observer.shapeCreated) {\n cancelled = this.observer.shapeCreated(shape);\n }\n return cancelled;\n },\n _featureCreated: function (group, dataItem) {\n if (this.observer && this.observer.featureCreated) {\n this.observer.featureCreated({\n group: group,\n dataItem: dataItem,\n properties: dataItem.properties\n });\n }\n },\n _loadGeometryTo: function (container, geometry, dataItem) {\n var coords = geometry.coordinates;\n var i;\n var path;\n switch (geometry.type) {\n case 'LineString':\n path = this._loadPolygon(container, [coords], dataItem);\n this._setLineFill(path);\n break;\n case 'MultiLineString':\n for (i = 0; i < coords.length; i++) {\n path = this._loadPolygon(container, [coords[i]], dataItem);\n this._setLineFill(path);\n }\n break;\n case 'Polygon':\n this._loadPolygon(container, coords, dataItem);\n break;\n case 'MultiPolygon':\n for (i = 0; i < coords.length; i++) {\n this._loadPolygon(container, coords[i], dataItem);\n }\n break;\n case 'Point':\n this._loadPoint(container, coords, dataItem);\n break;\n case 'MultiPoint':\n for (i = 0; i < coords.length; i++) {\n this._loadPoint(container, coords[i], dataItem);\n }\n break;\n }\n },\n _setLineFill: function (path) {\n var segments = path.segments;\n if (segments.length < 4 || !segments[0].anchor().equals(last(segments).anchor())) {\n path.options.fill = null;\n }\n },\n _loadShape: function (container, shape) {\n if (!this._shapeCreated(shape)) {\n container.append(shape);\n }\n return shape;\n },\n _loadPolygon: function (container, rings, dataItem) {\n var shape = this._buildPolygon(rings);\n shape.dataItem = dataItem;\n return this._loadShape(container, shape);\n },\n _buildPolygon: function (rings) {\n var type = rings.length > 1 ? d.MultiPath : d.Path;\n var path = new type(this.style);\n for (var i = 0; i < rings.length; i++) {\n for (var j = 0; j < rings[i].length; j++) {\n var point = this.locator.locationToView(Location.fromLngLat(rings[i][j]));\n if (j === 0) {\n path.moveTo(point.x, point.y);\n } else {\n path.lineTo(point.x, point.y);\n }\n }\n }\n return path;\n },\n _loadPoint: function (container, coords, dataItem) {\n var location = Location.fromLngLat(coords);\n var point = this.locator.locationToView(location);\n var circle = new g.Circle(point, 10);\n var shape = new d.Circle(circle, this.style);\n shape.dataItem = dataItem;\n shape.location = location;\n return this._loadShape(container, shape);\n }\n });\n deepExtend(kendo.data, {\n schemas: {\n geojson: {\n type: 'json',\n data: function (data) {\n if (data.type === 'FeatureCollection') {\n return data.features;\n }\n if (data.type === 'GeometryCollection') {\n return data.geometries;\n }\n return data;\n }\n }\n },\n transports: { geojson: { read: { dataType: 'json' } } }\n });\n deepExtend(dataviz, {\n map: {\n layers: {\n shape: ShapeLayer,\n ShapeLayer: ShapeLayer\n },\n GeoJSONLoader: GeoJSONLoader\n }\n });\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('dataviz/map/layers/bubble', ['dataviz/map/layers/shape'], f);\n}(function () {\n (function ($, undefined) {\n var kendo = window.kendo, getter = kendo.getter, dataviz = kendo.dataviz, deepExtend = kendo.deepExtend, g = kendo.geometry, d = kendo.drawing, util = d.util, defined = util.defined, map = dataviz.map, Location = map.Location, ShapeLayer = map.layers.ShapeLayer;\n var BubbleLayer = ShapeLayer.extend({\n options: {\n autoBind: true,\n locationField: 'location',\n valueField: 'value',\n minSize: 0,\n maxSize: 100,\n scale: 'sqrt',\n symbol: 'circle'\n },\n _load: function (data) {\n this.surface.clear();\n if (data.length === 0) {\n return;\n }\n var opt = this.options;\n var getValue = getter(opt.valueField);\n data = data.slice(0);\n data.sort(function (a, b) {\n return getValue(b) - getValue(a);\n });\n var scaleType = this._scaleType();\n var scale;\n for (var i = 0; i < data.length; i++) {\n var dataItem = data[i];\n var location = getter(opt.locationField)(dataItem);\n var value = getter(opt.valueField)(dataItem);\n if (defined(location) && defined(value)) {\n if (!scale) {\n scale = new scaleType([\n 0,\n value\n ], [\n opt.minSize,\n opt.maxSize\n ]);\n }\n location = Location.create(location);\n var center = this.map.locationToView(location);\n var size = scale.map(value);\n var symbol = this._createSymbol({\n center: center,\n size: size,\n style: opt.style,\n dataItem: dataItem,\n location: location\n });\n symbol.dataItem = dataItem;\n symbol.location = location;\n symbol.value = value;\n this._drawSymbol(symbol);\n }\n }\n },\n _scaleType: function () {\n var scale = this.options.scale;\n if (kendo.isFunction(scale)) {\n return scale;\n }\n return dataviz.map.scales[scale];\n },\n _createSymbol: function (args) {\n var symbol = this.options.symbol;\n if (!kendo.isFunction(symbol)) {\n symbol = dataviz.map.symbols[symbol];\n }\n return symbol(args);\n },\n _drawSymbol: function (shape) {\n var args = {\n layer: this,\n shape: shape\n };\n var cancelled = this.map.trigger('shapeCreated', args);\n if (!cancelled) {\n this.surface.draw(shape);\n }\n }\n });\n var SqrtScale = kendo.Class.extend({\n init: function (domain, range) {\n this._domain = domain;\n this._range = range;\n var domainRange = Math.sqrt(domain[1]) - Math.sqrt(domain[0]);\n var outputRange = range[1] - range[0];\n this._ratio = outputRange / domainRange;\n },\n map: function (value) {\n var rel = (Math.sqrt(value) - Math.sqrt(this._domain[0])) * this._ratio;\n return this._range[0] + rel;\n }\n });\n var Symbols = {\n circle: function (args) {\n var geo = new g.Circle(args.center, args.size / 2);\n return new d.Circle(geo, args.style);\n },\n square: function (args) {\n var path = new d.Path(args.style);\n var halfSize = args.size / 2;\n var center = args.center;\n path.moveTo(center.x - halfSize, center.y - halfSize).lineTo(center.x + halfSize, center.y - halfSize).lineTo(center.x + halfSize, center.y + halfSize).lineTo(center.x - halfSize, center.y + halfSize).close();\n return path;\n }\n };\n deepExtend(dataviz, {\n map: {\n layers: {\n bubble: BubbleLayer,\n BubbleLayer: BubbleLayer\n },\n scales: { sqrt: SqrtScale },\n symbols: Symbols\n }\n });\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('dataviz/map/layers/tile', [\n 'dataviz/map/layers/base',\n 'dataviz/map/location'\n ], f);\n}(function () {\n (function ($, undefined) {\n var math = Math, proxy = $.proxy, kendo = window.kendo, Class = kendo.Class, template = kendo.template, dataviz = kendo.dataviz, deepExtend = kendo.deepExtend, g = kendo.geometry, Point = g.Point, Layer = dataviz.map.layers.Layer, util = kendo.util, renderSize = util.renderSize, drawingUtil = kendo.drawing.util, round = drawingUtil.round, limit = drawingUtil.limitValue;\n var TileLayer = Layer.extend({\n init: function (map, options) {\n Layer.fn.init.call(this, map, options);\n if (typeof this.options.subdomains === 'string') {\n this.options.subdomains = this.options.subdomains.split('');\n }\n var viewType = this._viewType();\n this._view = new viewType(this.element, this.options);\n },\n destroy: function () {\n Layer.fn.destroy.call(this);\n this._view.destroy();\n this._view = null;\n },\n _beforeReset: function () {\n var map = this.map;\n var origin = map.locationToLayer(map.extent().nw).round();\n this._view.viewOrigin(origin);\n },\n _reset: function () {\n Layer.fn._reset.call(this);\n this._updateView();\n this._view.reset();\n },\n _viewType: function () {\n return TileView;\n },\n _activate: function () {\n Layer.fn._activate.call(this);\n if (!kendo.support.mobileOS) {\n if (!this._pan) {\n this._pan = kendo.throttle(proxy(this._render, this), 100);\n }\n this.map.bind('pan', this._pan);\n }\n },\n _deactivate: function () {\n Layer.fn._deactivate.call(this);\n if (this._pan) {\n this.map.unbind('pan', this._pan);\n }\n },\n _updateView: function () {\n var view = this._view, map = this.map, extent = map.extent(), extentToPoint = {\n nw: map.locationToLayer(extent.nw).round(),\n se: map.locationToLayer(extent.se).round()\n };\n view.center(map.locationToLayer(map.center()));\n view.extent(extentToPoint);\n view.zoom(map.zoom());\n },\n _resize: function () {\n this._render();\n },\n _panEnd: function (e) {\n Layer.fn._panEnd.call(this, e);\n this._render();\n },\n _render: function () {\n this._updateView();\n this._view.render();\n }\n });\n var TileView = Class.extend({\n init: function (element, options) {\n this.element = element;\n this._initOptions(options);\n this.pool = new TilePool();\n },\n options: {\n tileSize: 256,\n subdomains: [\n 'a',\n 'b',\n 'c'\n ],\n urlTemplate: ''\n },\n center: function (center) {\n this._center = center;\n },\n extent: function (extent) {\n this._extent = extent;\n },\n viewOrigin: function (origin) {\n this._viewOrigin = origin;\n },\n zoom: function (zoom) {\n this._zoom = zoom;\n },\n pointToTileIndex: function (point) {\n return new Point(math.floor(point.x / this.options.tileSize), math.floor(point.y / this.options.tileSize));\n },\n tileCount: function () {\n var size = this.size(), firstTileIndex = this.pointToTileIndex(this._extent.nw), nw = this._extent.nw, point = this.indexToPoint(firstTileIndex).translate(-nw.x, -nw.y);\n return {\n x: math.ceil((math.abs(point.x) + size.width) / this.options.tileSize),\n y: math.ceil((math.abs(point.y) + size.height) / this.options.tileSize)\n };\n },\n size: function () {\n var nw = this._extent.nw, se = this._extent.se, diff = se.clone().translate(-nw.x, -nw.y);\n return {\n width: diff.x,\n height: diff.y\n };\n },\n indexToPoint: function (index) {\n var x = index.x, y = index.y;\n return new Point(x * this.options.tileSize, y * this.options.tileSize);\n },\n subdomainText: function () {\n var subdomains = this.options.subdomains;\n return subdomains[this.subdomainIndex++ % subdomains.length];\n },\n destroy: function () {\n this.element.empty();\n this.pool.empty();\n },\n reset: function () {\n this.pool.reset();\n this.subdomainIndex = 0;\n this.render();\n },\n render: function () {\n var size = this.tileCount(), firstTileIndex = this.pointToTileIndex(this._extent.nw), tile, x, y;\n for (x = 0; x < size.x; x++) {\n for (y = 0; y < size.y; y++) {\n tile = this.createTile({\n x: firstTileIndex.x + x,\n y: firstTileIndex.y + y\n });\n if (!tile.visible) {\n tile.show();\n }\n }\n }\n },\n createTile: function (currentIndex) {\n var options = this.tileOptions(currentIndex);\n var tile = this.pool.get(this._center, options);\n if (tile.element.parent().length === 0) {\n this.element.append(tile.element);\n }\n return tile;\n },\n tileOptions: function (currentIndex) {\n var index = this.wrapIndex(currentIndex), point = this.indexToPoint(currentIndex), origin = this._viewOrigin, offset = point.clone().translate(-origin.x, -origin.y);\n return {\n index: index,\n currentIndex: currentIndex,\n point: point,\n offset: roundPoint(offset),\n zoom: this._zoom,\n size: this.options.tileSize,\n subdomain: this.subdomainText(),\n urlTemplate: this.options.urlTemplate,\n errorUrlTemplate: this.options.errorUrlTemplate\n };\n },\n wrapIndex: function (index) {\n var boundary = math.pow(2, this._zoom);\n return {\n x: this.wrapValue(index.x, boundary),\n y: limit(index.y, 0, boundary - 1)\n };\n },\n wrapValue: function (value, boundary) {\n var remainder = math.abs(value) % boundary;\n if (value >= 0) {\n value = remainder;\n } else {\n value = boundary - (remainder === 0 ? boundary : remainder);\n }\n return value;\n }\n });\n var ImageTile = Class.extend({\n init: function (id, options) {\n this.id = id;\n this.visible = true;\n this._initOptions(options);\n this.createElement();\n this.show();\n },\n options: {\n urlTemplate: '',\n errorUrlTemplate: ''\n },\n createElement: function () {\n this.element = $('\\'\\'').css({\n width: this.options.size,\n height: this.options.size\n }).on('error', proxy(function (e) {\n if (this.errorUrl()) {\n e.target.setAttribute('src', this.errorUrl());\n } else {\n e.target.removeAttribute('src');\n }\n }, this));\n },\n show: function () {\n var element = this.element[0];\n element.style.top = renderSize(this.options.offset.y);\n element.style.left = renderSize(this.options.offset.x);\n var url = this.url();\n if (url) {\n element.setAttribute('src', url);\n }\n element.style.visibility = 'visible';\n this.visible = true;\n },\n hide: function () {\n this.element[0].style.visibility = 'hidden';\n this.visible = false;\n },\n url: function () {\n var urlResult = template(this.options.urlTemplate);\n return urlResult(this.urlOptions());\n },\n errorUrl: function () {\n var urlResult = template(this.options.errorUrlTemplate);\n return urlResult(this.urlOptions());\n },\n urlOptions: function () {\n var options = this.options;\n return {\n zoom: options.zoom,\n subdomain: options.subdomain,\n z: options.zoom,\n x: options.index.x,\n y: options.index.y,\n s: options.subdomain,\n quadkey: options.quadkey,\n q: options.quadkey,\n culture: options.culture,\n c: options.culture\n };\n },\n destroy: function () {\n if (this.element) {\n this.element.remove();\n this.element = null;\n }\n }\n });\n var TilePool = Class.extend({\n init: function () {\n this._items = [];\n },\n options: { maxSize: 100 },\n get: function (center, options) {\n if (this._items.length >= this.options.maxSize) {\n this._remove(center);\n }\n return this._create(options);\n },\n empty: function () {\n var items = this._items;\n for (var i = 0; i < items.length; i++) {\n items[i].destroy();\n }\n this._items = [];\n },\n reset: function () {\n var items = this._items;\n for (var i = 0; i < items.length; i++) {\n items[i].hide();\n }\n },\n _create: function (options) {\n var items = this._items;\n var tile;\n var id = util.hashKey(options.point.toString() + options.offset.toString() + options.zoom + options.urlTemplate);\n for (var i = 0; i < items.length; i++) {\n if (items[i].id === id) {\n tile = items[i];\n break;\n }\n }\n if (tile) {\n tile.show();\n } else {\n tile = new ImageTile(id, options);\n this._items.push(tile);\n }\n return tile;\n },\n _remove: function (center) {\n var items = this._items;\n var maxDist = -1;\n var index = -1;\n for (var i = 0; i < items.length; i++) {\n var dist = items[i].options.point.distanceTo(center);\n if (dist > maxDist && !items[i].visible) {\n index = i;\n maxDist = dist;\n }\n }\n if (index !== -1) {\n items[index].destroy();\n items.splice(index, 1);\n }\n }\n });\n function roundPoint(point) {\n return new Point(round(point.x), round(point.y));\n }\n deepExtend(dataviz, {\n map: {\n layers: {\n tile: TileLayer,\n TileLayer: TileLayer,\n ImageTile: ImageTile,\n TilePool: TilePool,\n TileView: TileView\n }\n }\n });\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('dataviz/map/layers/bing', ['dataviz/map/layers/tile'], f);\n}(function () {\n (function ($, undefined) {\n var kendo = window.kendo, dataviz = kendo.dataviz, deepExtend = kendo.deepExtend, defined = kendo.drawing.util.defined, Extent = dataviz.map.Extent, Location = dataviz.map.Location, TileLayer = dataviz.map.layers.TileLayer, TileView = dataviz.map.layers.TileView;\n var BingLayer = TileLayer.extend({\n init: function (map, options) {\n this.options.baseUrl = this._scheme() + '://dev.virtualearth.net/REST/v1/Imagery/Metadata/';\n TileLayer.fn.init.call(this, map, options);\n this._onMetadata = $.proxy(this._onMetadata, this);\n this._fetchMetadata();\n },\n options: { imagerySet: 'road' },\n _fetchMetadata: function () {\n var options = this.options;\n if (!options.key) {\n throw new Error('Bing tile layer: API key is required');\n }\n $.ajax({\n url: options.baseUrl + options.imagerySet,\n data: {\n output: 'json',\n include: 'ImageryProviders',\n key: options.key,\n uriScheme: this._scheme()\n },\n type: 'get',\n dataType: 'jsonp',\n jsonp: 'jsonp',\n success: this._onMetadata\n });\n },\n _scheme: function (proto) {\n proto = proto || window.location.protocol;\n return proto.replace(':', '') === 'https' ? 'https' : 'http';\n },\n _onMetadata: function (data) {\n if (data && data.resourceSets.length) {\n var resource = this.resource = data.resourceSets[0].resources[0];\n deepExtend(this._view.options, {\n urlTemplate: resource.imageUrl.replace('{subdomain}', '#= subdomain #').replace('{quadkey}', '#= quadkey #').replace('{culture}', '#= culture #'),\n subdomains: resource.imageUrlSubdomains\n });\n var options = this.options;\n if (!defined(options.minZoom)) {\n options.minZoom = resource.zoomMin;\n }\n if (!defined(options.maxZoom)) {\n options.maxZoom = resource.zoomMax;\n }\n this._addAttribution();\n if (this.element.css('display') !== 'none') {\n this._reset();\n }\n }\n },\n _viewType: function () {\n return BingView;\n },\n _addAttribution: function () {\n var attr = this.map.attribution;\n if (attr) {\n var items = this.resource.imageryProviders;\n if (items) {\n for (var i = 0; i < items.length; i++) {\n var item = items[i];\n for (var y = 0; y < item.coverageAreas.length; y++) {\n var area = item.coverageAreas[y];\n attr.add({\n text: item.attribution,\n minZoom: area.zoomMin,\n maxZoom: area.zoomMax,\n extent: new Extent(new Location(area.bbox[2], area.bbox[1]), new Location(area.bbox[0], area.bbox[3]))\n });\n }\n }\n }\n }\n },\n imagerySet: function (value) {\n if (value) {\n this.options.imagerySet = value;\n this.map.attribution.clear();\n this._fetchMetadata();\n } else {\n return this.options.imagerySet;\n }\n }\n });\n var BingView = TileView.extend({\n options: { culture: 'en-US' },\n tileOptions: function (currentIndex) {\n var options = TileView.fn.tileOptions.call(this, currentIndex);\n options.culture = this.options.culture;\n options.quadkey = this.tileQuadKey(this.wrapIndex(currentIndex));\n return options;\n },\n tileQuadKey: function (index) {\n var quadKey = '', digit, mask, i;\n for (i = this._zoom; i > 0; i--) {\n digit = 0;\n mask = 1 << i - 1;\n if ((index.x & mask) !== 0) {\n digit++;\n }\n if ((index.y & mask) !== 0) {\n digit += 2;\n }\n quadKey += digit;\n }\n return quadKey;\n }\n });\n deepExtend(dataviz, {\n map: {\n layers: {\n bing: BingLayer,\n BingLayer: BingLayer,\n BingView: BingView\n }\n }\n });\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('dataviz/map/layers/marker', [\n 'dataviz/map/layers/base',\n 'dataviz/map/location',\n 'kendo.data',\n 'kendo.tooltip'\n ], f);\n}(function () {\n (function ($, undefined) {\n var doc = document, math = Math, indexOf = $.inArray, proxy = $.proxy, kendo = window.kendo, Class = kendo.Class, DataSource = kendo.data.DataSource, Tooltip = kendo.ui.Tooltip, dataviz = kendo.dataviz, deepExtend = kendo.deepExtend, map = dataviz.map, Location = map.Location, Layer = map.layers.Layer;\n var MarkerLayer = Layer.extend({\n init: function (map, options) {\n Layer.fn.init.call(this, map, options);\n this._markerClick = proxy(this._markerClick, this);\n this.element.on('click', '.k-marker', this._markerClick);\n this.items = [];\n this._initDataSource();\n },\n destroy: function () {\n Layer.fn.destroy.call(this);\n this.element.off('click', '.k-marker', this._markerClick);\n this.dataSource.unbind('change', this._dataChange);\n this.clear();\n },\n options: {\n zIndex: 1000,\n autoBind: true,\n dataSource: {},\n locationField: 'location',\n titleField: 'title'\n },\n add: function (arg) {\n if ($.isArray(arg)) {\n for (var i = 0; i < arg.length; i++) {\n this._addOne(arg[i]);\n }\n } else {\n return this._addOne(arg);\n }\n },\n remove: function (marker) {\n marker.destroy();\n var index = indexOf(marker, this.items);\n if (index > -1) {\n this.items.splice(index, 1);\n }\n },\n clear: function () {\n for (var i = 0; i < this.items.length; i++) {\n this.items[i].destroy();\n }\n this.items = [];\n },\n update: function (marker) {\n var loc = marker.location();\n if (loc) {\n marker.showAt(this.map.locationToView(loc));\n var args = {\n marker: marker,\n layer: this\n };\n this.map.trigger('markerActivate', args);\n }\n },\n _reset: function () {\n Layer.fn._reset.call(this);\n var items = this.items;\n for (var i = 0; i < items.length; i++) {\n this.update(items[i]);\n }\n },\n bind: function (options, dataItem) {\n var marker = map.Marker.create(options, this.options);\n marker.dataItem = dataItem;\n var args = {\n marker: marker,\n layer: this\n };\n var cancelled = this.map.trigger('markerCreated', args);\n if (!cancelled) {\n this.add(marker);\n return marker;\n }\n },\n setDataSource: function (dataSource) {\n if (this.dataSource) {\n this.dataSource.unbind('change', this._dataChange);\n }\n this.dataSource = kendo.data.DataSource.create(dataSource);\n this.dataSource.bind('change', this._dataChange);\n if (this.options.autoBind) {\n this.dataSource.fetch();\n }\n },\n _addOne: function (arg) {\n var marker = Marker.create(arg, this.options);\n marker.addTo(this);\n return marker;\n },\n _initDataSource: function () {\n var dsOptions = this.options.dataSource;\n this._dataChange = proxy(this._dataChange, this);\n this.dataSource = DataSource.create(dsOptions).bind('change', this._dataChange);\n if (dsOptions && this.options.autoBind) {\n this.dataSource.fetch();\n }\n },\n _dataChange: function (e) {\n this._load(e.sender.view());\n },\n _load: function (data) {\n this._data = data;\n this.clear();\n var getLocation = kendo.getter(this.options.locationField);\n var getTitle = kendo.getter(this.options.titleField);\n for (var i = 0; i < data.length; i++) {\n var dataItem = data[i];\n this.bind({\n location: getLocation(dataItem),\n title: getTitle(dataItem)\n }, dataItem);\n }\n },\n _markerClick: function (e) {\n var args = {\n marker: $(e.target).data('kendoMarker'),\n layer: this\n };\n this.map.trigger('markerClick', args);\n }\n });\n var Marker = Class.extend({\n init: function (options) {\n this.options = options || {};\n },\n addTo: function (parent) {\n this.layer = parent.markers || parent;\n this.layer.items.push(this);\n this.layer.update(this);\n },\n location: function (value) {\n if (value) {\n this.options.location = Location.create(value).toArray();\n if (this.layer) {\n this.layer.update(this);\n }\n return this;\n } else {\n return Location.create(this.options.location);\n }\n },\n showAt: function (point) {\n this.render();\n this.element.css({\n left: math.round(point.x),\n top: math.round(point.y)\n });\n if (this.tooltip && this.tooltip.popup) {\n this.tooltip.popup._position();\n }\n },\n hide: function () {\n if (this.element) {\n this.element.remove();\n this.element = null;\n }\n if (this.tooltip) {\n this.tooltip.destroy();\n this.tooltip = null;\n }\n },\n destroy: function () {\n this.layer = null;\n this.hide();\n },\n render: function () {\n if (!this.element) {\n var options = this.options;\n var layer = this.layer;\n this.element = $(doc.createElement('span')).addClass('k-marker k-icon k-i-marker-' + kendo.toHyphens(options.shape || 'pin')).attr('title', options.title).attr(options.attributes || {}).data('kendoMarker', this).css('zIndex', options.zIndex);\n if (layer) {\n layer.element.append(this.element);\n }\n this.renderTooltip();\n }\n },\n renderTooltip: function () {\n var marker = this;\n var title = marker.options.title;\n var options = marker.options.tooltip || {};\n if (options && Tooltip) {\n var template = options.template;\n if (template) {\n var contentTemplate = kendo.template(template);\n options.content = function (e) {\n e.location = marker.location();\n e.marker = marker;\n return contentTemplate(e);\n };\n }\n if (title || options.content || options.contentUrl) {\n this.tooltip = new Tooltip(this.element, options);\n this.tooltip.marker = this;\n }\n }\n }\n });\n Marker.create = function (arg, defaults) {\n if (arg instanceof Marker) {\n return arg;\n }\n return new Marker(deepExtend({}, defaults, arg));\n };\n deepExtend(dataviz, {\n map: {\n layers: {\n marker: MarkerLayer,\n MarkerLayer: MarkerLayer\n },\n Marker: Marker\n }\n });\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('dataviz/map/main', [\n 'dataviz/map/crs',\n 'dataviz/map/location'\n ], f);\n}(function () {\n (function ($, undefined) {\n var doc = document, math = Math, min = math.min, pow = math.pow, proxy = $.proxy, kendo = window.kendo, Widget = kendo.ui.Widget, deepExtend = kendo.deepExtend, dataviz = kendo.dataviz, ui = dataviz.ui, g = kendo.geometry, Point = g.Point, map = dataviz.map, Extent = map.Extent, Location = map.Location, EPSG3857 = map.crs.EPSG3857, util = kendo.util, renderPos = util.renderPos, drawingUtil = kendo.drawing.util, defined = drawingUtil.defined, limit = drawingUtil.limitValue, valueOrDefault = drawingUtil.valueOrDefault;\n var CSS_PREFIX = 'k-', FRICTION = 0.9, FRICTION_MOBILE = 0.93, MOUSEWHEEL = 'DOMMouseScroll mousewheel', VELOCITY_MULTIPLIER = 5;\n var Map = Widget.extend({\n init: function (element, options) {\n kendo.destroy(element);\n Widget.fn.init.call(this, element);\n this._initOptions(options);\n this.bind(this.events, options);\n this.crs = new EPSG3857();\n this.element.addClass(CSS_PREFIX + this.options.name.toLowerCase()).css('position', 'relative').empty().append(doc.createElement('div'));\n this._viewOrigin = this._getOrigin();\n this._initScroller();\n this._initMarkers();\n this._initControls();\n this._initLayers();\n this._reset();\n this._mousewheel = proxy(this._mousewheel, this);\n this.element.bind('click', proxy(this._click, this));\n this.element.bind(MOUSEWHEEL, this._mousewheel);\n },\n options: {\n name: 'Map',\n controls: {\n attribution: true,\n navigator: { panStep: 100 },\n zoom: true\n },\n layers: [],\n layerDefaults: {\n shape: {\n style: {\n fill: { color: '#fff' },\n stroke: {\n color: '#aaa',\n width: 0.5\n }\n }\n },\n bubble: {\n style: {\n fill: {\n color: '#fff',\n opacity: 0.5\n },\n stroke: {\n color: '#aaa',\n width: 0.5\n }\n }\n },\n marker: {\n shape: 'pinTarget',\n tooltip: { position: 'top' }\n }\n },\n center: [\n 0,\n 0\n ],\n zoom: 3,\n minSize: 256,\n minZoom: 1,\n maxZoom: 19,\n markers: [],\n markerDefaults: {\n shape: 'pinTarget',\n tooltip: { position: 'top' }\n },\n wraparound: true\n },\n events: [\n 'beforeReset',\n 'click',\n 'markerActivate',\n 'markerClick',\n 'markerCreated',\n 'pan',\n 'panEnd',\n 'reset',\n 'shapeClick',\n 'shapeCreated',\n 'shapeFeatureCreated',\n 'shapeMouseEnter',\n 'shapeMouseLeave',\n 'zoomEnd',\n 'zoomStart'\n ],\n destroy: function () {\n this.scroller.destroy();\n if (this.navigator) {\n this.navigator.destroy();\n }\n if (this.attribution) {\n this.attribution.destroy();\n }\n if (this.zoomControl) {\n this.zoomControl.destroy();\n }\n this.markers.destroy();\n for (var i = 0; i < this.layers.length; i++) {\n this.layers[i].destroy();\n }\n Widget.fn.destroy.call(this);\n },\n zoom: function (level) {\n var options = this.options;\n if (defined(level)) {\n level = math.round(limit(level, options.minZoom, options.maxZoom));\n if (options.zoom !== level) {\n options.zoom = level;\n this._reset();\n }\n return this;\n } else {\n return options.zoom;\n }\n },\n center: function (center) {\n if (center) {\n this.options.center = Location.create(center).toArray();\n this._reset();\n return this;\n } else {\n return Location.create(this.options.center);\n }\n },\n extent: function (extent) {\n if (extent) {\n this._setExtent(extent);\n return this;\n } else {\n return this._getExtent();\n }\n },\n setOptions: function (options) {\n Widget.fn.setOptions.call(this, options);\n this._reset();\n },\n locationToLayer: function (location, zoom) {\n var clamp = !this.options.wraparound;\n location = Location.create(location);\n return this.crs.toPoint(location, this._layerSize(zoom), clamp);\n },\n layerToLocation: function (point, zoom) {\n var clamp = !this.options.wraparound;\n point = Point.create(point);\n return this.crs.toLocation(point, this._layerSize(zoom), clamp);\n },\n locationToView: function (location) {\n location = Location.create(location);\n var origin = this.locationToLayer(this._viewOrigin);\n var point = this.locationToLayer(location);\n return point.translateWith(origin.scale(-1));\n },\n viewToLocation: function (point, zoom) {\n var origin = this.locationToLayer(this._getOrigin(), zoom);\n point = Point.create(point);\n point = point.clone().translateWith(origin);\n return this.layerToLocation(point, zoom);\n },\n eventOffset: function (e) {\n var offset = this.element.offset();\n var event = e.originalEvent || e;\n var x = valueOrDefault(event.pageX, event.clientX) - offset.left;\n var y = valueOrDefault(event.pageY, event.clientY) - offset.top;\n return new g.Point(x, y);\n },\n eventToView: function (e) {\n var cursor = this.eventOffset(e);\n return this.locationToView(this.viewToLocation(cursor));\n },\n eventToLayer: function (e) {\n return this.locationToLayer(this.eventToLocation(e));\n },\n eventToLocation: function (e) {\n var cursor = this.eventOffset(e);\n return this.viewToLocation(cursor);\n },\n viewSize: function () {\n var element = this.element;\n var scale = this._layerSize();\n var width = element.width();\n if (!this.options.wraparound) {\n width = min(scale, width);\n }\n return {\n width: width,\n height: min(scale, element.height())\n };\n },\n exportVisual: function () {\n this._reset();\n return false;\n },\n _setOrigin: function (origin, zoom) {\n var size = this.viewSize(), topLeft;\n origin = this._origin = Location.create(origin);\n topLeft = this.locationToLayer(origin, zoom);\n topLeft.x += size.width / 2;\n topLeft.y += size.height / 2;\n this.options.center = this.layerToLocation(topLeft, zoom).toArray();\n return this;\n },\n _getOrigin: function (invalidate) {\n var size = this.viewSize(), topLeft;\n if (invalidate || !this._origin) {\n topLeft = this.locationToLayer(this.center());\n topLeft.x -= size.width / 2;\n topLeft.y -= size.height / 2;\n this._origin = this.layerToLocation(topLeft);\n }\n return this._origin;\n },\n _setExtent: function (extent) {\n var raw = Extent.create(extent);\n var se = raw.se.clone();\n if (this.options.wraparound && se.lng < 0 && extent.nw.lng > 0) {\n se.lng = 180 + (180 + se.lng);\n }\n extent = new Extent(raw.nw, se);\n this.center(extent.center());\n var width = this.element.width();\n var height = this.element.height();\n for (var zoom = this.options.maxZoom; zoom >= this.options.minZoom; zoom--) {\n var topLeft = this.locationToLayer(extent.nw, zoom);\n var bottomRight = this.locationToLayer(extent.se, zoom);\n var layerWidth = math.abs(bottomRight.x - topLeft.x);\n var layerHeight = math.abs(bottomRight.y - topLeft.y);\n if (layerWidth <= width && layerHeight <= height) {\n break;\n }\n }\n this.zoom(zoom);\n },\n _getExtent: function () {\n var nw = this._getOrigin();\n var bottomRight = this.locationToLayer(nw);\n var size = this.viewSize();\n bottomRight.x += size.width;\n bottomRight.y += size.height;\n var se = this.layerToLocation(bottomRight);\n return new Extent(nw, se);\n },\n _zoomAround: function (pivot, level) {\n this._setOrigin(this.layerToLocation(pivot, level), level);\n this.zoom(level);\n },\n _initControls: function () {\n var controls = this.options.controls;\n if (ui.Attribution && controls.attribution) {\n this._createAttribution(controls.attribution);\n }\n if (!kendo.support.mobileOS) {\n if (ui.Navigator && controls.navigator) {\n this._createNavigator(controls.navigator);\n }\n if (ui.ZoomControl && controls.zoom) {\n this._createZoomControl(controls.zoom);\n }\n }\n },\n _createControlElement: function (options, defaultPos) {\n var pos = options.position || defaultPos;\n var posSelector = '.' + renderPos(pos).replace(' ', '.');\n var wrap = $('.k-map-controls' + posSelector, this.element);\n if (wrap.length === 0) {\n wrap = $('
    ').addClass('k-map-controls ' + renderPos(pos)).appendTo(this.element);\n }\n return $('
    ').appendTo(wrap);\n },\n _createAttribution: function (options) {\n var element = this._createControlElement(options, 'bottomRight');\n this.attribution = new ui.Attribution(element, options);\n },\n _createNavigator: function (options) {\n var element = this._createControlElement(options, 'topLeft');\n var navigator = this.navigator = new ui.Navigator(element, options);\n this._navigatorPan = proxy(this._navigatorPan, this);\n navigator.bind('pan', this._navigatorPan);\n this._navigatorCenter = proxy(this._navigatorCenter, this);\n navigator.bind('center', this._navigatorCenter);\n },\n _navigatorPan: function (e) {\n var map = this;\n var scroller = map.scroller;\n var x = scroller.scrollLeft + e.x;\n var y = scroller.scrollTop - e.y;\n var bounds = this._virtualSize;\n var height = this.element.height();\n var width = this.element.width();\n x = limit(x, bounds.x.min, bounds.x.max - width);\n y = limit(y, bounds.y.min, bounds.y.max - height);\n map.scroller.one('scroll', function (e) {\n map._scrollEnd(e);\n });\n map.scroller.scrollTo(-x, -y);\n },\n _navigatorCenter: function () {\n this.center(this.options.center);\n },\n _createZoomControl: function (options) {\n var element = this._createControlElement(options, 'topLeft');\n var zoomControl = this.zoomControl = new ui.ZoomControl(element, options);\n this._zoomControlChange = proxy(this._zoomControlChange, this);\n zoomControl.bind('change', this._zoomControlChange);\n },\n _zoomControlChange: function (e) {\n if (!this.trigger('zoomStart', { originalEvent: e })) {\n this.zoom(this.zoom() + e.delta);\n this.trigger('zoomEnd', { originalEvent: e });\n }\n },\n _initScroller: function () {\n var friction = kendo.support.mobileOS ? FRICTION_MOBILE : FRICTION;\n var zoomable = this.options.zoomable !== false;\n var scroller = this.scroller = new kendo.mobile.ui.Scroller(this.element.children(0), {\n friction: friction,\n velocityMultiplier: VELOCITY_MULTIPLIER,\n zoom: zoomable,\n mousewheelScrolling: false\n });\n scroller.bind('scroll', proxy(this._scroll, this));\n scroller.bind('scrollEnd', proxy(this._scrollEnd, this));\n scroller.userEvents.bind('gesturestart', proxy(this._scaleStart, this));\n scroller.userEvents.bind('gestureend', proxy(this._scale, this));\n this.scrollElement = scroller.scrollElement;\n },\n _initLayers: function () {\n var defs = this.options.layers, layers = this.layers = [];\n for (var i = 0; i < defs.length; i++) {\n var options = defs[i];\n var type = options.type || 'shape';\n var defaults = this.options.layerDefaults[type];\n var impl = dataviz.map.layers[type];\n layers.push(new impl(this, deepExtend({}, defaults, options)));\n }\n },\n _initMarkers: function () {\n this.markers = new map.layers.MarkerLayer(this, this.options.markerDefaults);\n this.markers.add(this.options.markers);\n },\n _scroll: function (e) {\n var origin = this.locationToLayer(this._viewOrigin).round();\n var movable = e.sender.movable;\n var offset = new g.Point(movable.x, movable.y).scale(-1).scale(1 / movable.scale);\n origin.x += offset.x;\n origin.y += offset.y;\n this._scrollOffset = offset;\n this._setOrigin(this.layerToLocation(origin));\n this.trigger('pan', {\n originalEvent: e,\n origin: this._getOrigin(),\n center: this.center()\n });\n },\n _scrollEnd: function (e) {\n if (!this._scrollOffset || !this._panComplete()) {\n return;\n }\n this._scrollOffset = null;\n this._panEndTS = new Date();\n this.trigger('panEnd', {\n originalEvent: e,\n origin: this._getOrigin(),\n center: this.center()\n });\n },\n _panComplete: function () {\n return new Date() - (this._panEndTS || 0) > 50;\n },\n _scaleStart: function (e) {\n if (this.trigger('zoomStart', { originalEvent: e })) {\n var touch = e.touches[1];\n if (touch) {\n touch.cancel();\n }\n }\n },\n _scale: function (e) {\n var scale = this.scroller.movable.scale;\n var zoom = this._scaleToZoom(scale);\n var gestureCenter = new g.Point(e.center.x, e.center.y);\n var centerLocation = this.viewToLocation(gestureCenter, zoom);\n var centerPoint = this.locationToLayer(centerLocation, zoom);\n var originPoint = centerPoint.translate(-gestureCenter.x, -gestureCenter.y);\n this._zoomAround(originPoint, zoom);\n this.trigger('zoomEnd', { originalEvent: e });\n },\n _scaleToZoom: function (scaleDelta) {\n var scale = this._layerSize() * scaleDelta;\n var tiles = scale / this.options.minSize;\n var zoom = math.log(tiles) / math.log(2);\n return math.round(zoom);\n },\n _reset: function () {\n if (this.attribution) {\n this.attribution.filter(this.center(), this.zoom());\n }\n this._viewOrigin = this._getOrigin(true);\n this._resetScroller();\n this.trigger('beforeReset');\n this.trigger('reset');\n },\n _resetScroller: function () {\n var scroller = this.scroller;\n var x = scroller.dimensions.x;\n var y = scroller.dimensions.y;\n var scale = this._layerSize();\n var nw = this.extent().nw;\n var topLeft = this.locationToLayer(nw).round();\n scroller.movable.round = true;\n scroller.reset();\n scroller.userEvents.cancel();\n var zoom = this.zoom();\n scroller.dimensions.forcedMinScale = pow(2, this.options.minZoom - zoom);\n scroller.dimensions.maxScale = pow(2, this.options.maxZoom - zoom);\n var xBounds = {\n min: -topLeft.x,\n max: scale - topLeft.x\n };\n var yBounds = {\n min: -topLeft.y,\n max: scale - topLeft.y\n };\n if (this.options.wraparound) {\n xBounds.max = 20 * scale;\n xBounds.min = -xBounds.max;\n }\n if (this.options.pannable === false) {\n var viewSize = this.viewSize();\n xBounds.min = yBounds.min = 0;\n xBounds.max = viewSize.width;\n yBounds.max = viewSize.height;\n }\n x.makeVirtual();\n y.makeVirtual();\n x.virtualSize(xBounds.min, xBounds.max);\n y.virtualSize(yBounds.min, yBounds.max);\n this._virtualSize = {\n x: xBounds,\n y: yBounds\n };\n },\n _renderLayers: function () {\n var defs = this.options.layers, layers = this.layers = [], scrollWrap = this.scrollWrap;\n scrollWrap.empty();\n for (var i = 0; i < defs.length; i++) {\n var options = defs[i];\n var type = options.type || 'shape';\n var defaults = this.options.layerDefaults[type];\n var impl = dataviz.map.layers[type];\n layers.push(new impl(this, deepExtend({}, defaults, options)));\n }\n },\n _layerSize: function (zoom) {\n zoom = valueOrDefault(zoom, this.options.zoom);\n return this.options.minSize * pow(2, zoom);\n },\n _click: function (e) {\n if (!this._panComplete()) {\n return;\n }\n var cursor = this.eventOffset(e);\n this.trigger('click', {\n originalEvent: e,\n location: this.viewToLocation(cursor)\n });\n },\n _mousewheel: function (e) {\n e.preventDefault();\n var delta = dataviz.mwDelta(e) > 0 ? -1 : 1;\n var options = this.options;\n var fromZoom = this.zoom();\n var toZoom = limit(fromZoom + delta, options.minZoom, options.maxZoom);\n if (options.zoomable !== false && toZoom !== fromZoom) {\n if (!this.trigger('zoomStart', { originalEvent: e })) {\n var cursor = this.eventOffset(e);\n var location = this.viewToLocation(cursor);\n var postZoom = this.locationToLayer(location, toZoom);\n var origin = postZoom.translate(-cursor.x, -cursor.y);\n this._zoomAround(origin, toZoom);\n this.trigger('zoomEnd', { originalEvent: e });\n }\n }\n }\n });\n dataviz.ui.plugin(Map);\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.dataviz.map', [\n 'kendo.data',\n 'kendo.userevents',\n 'kendo.tooltip',\n 'kendo.mobile.scroller',\n 'kendo.draganddrop',\n 'kendo.dataviz.core',\n 'dataviz/map/location',\n 'dataviz/map/attribution',\n 'dataviz/map/navigator',\n 'dataviz/map/zoom',\n 'dataviz/map/crs',\n 'dataviz/map/layers/base',\n 'dataviz/map/layers/shape',\n 'dataviz/map/layers/bubble',\n 'dataviz/map/layers/tile',\n 'dataviz/map/layers/bing',\n 'dataviz/map/layers/marker',\n 'dataviz/map/main'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'dataviz.map',\n name: 'Map',\n category: 'dataviz',\n description: 'The Kendo DataViz Map displays spatial data',\n depends: [\n 'data',\n 'userevents',\n 'tooltip',\n 'dataviz.core',\n 'drawing',\n 'mobile.scroller'\n ]\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('dataviz/diagram/utils', ['kendo.core'], f);\n}(function () {\n (function ($, undefined) {\n var kendo = window.kendo, diagram = kendo.dataviz.diagram = {}, deepExtend = kendo.deepExtend, isArray = $.isArray, EPSILON = 0.000001;\n var Utils = {};\n deepExtend(Utils, {\n isNearZero: function (num) {\n return Math.abs(num) < EPSILON;\n },\n isDefined: function (obj) {\n return typeof obj !== 'undefined';\n },\n isUndefined: function (obj) {\n return typeof obj === 'undefined' || obj === null;\n },\n isObject: function (obj) {\n return obj === Object(obj);\n },\n has: function (obj, key) {\n return Object.hasOwnProperty.call(obj, key);\n },\n isString: function (obj) {\n return Object.prototype.toString.call(obj) == '[object String]';\n },\n isBoolean: function (obj) {\n return Object.prototype.toString.call(obj) == '[object Boolean]';\n },\n isType: function (obj, type) {\n return Object.prototype.toString.call(obj) == '[object ' + type + ']';\n },\n isNumber: function (obj) {\n return !isNaN(parseFloat(obj)) && isFinite(obj);\n },\n isEmpty: function (obj) {\n if (obj === null) {\n return true;\n }\n if (isArray(obj) || Utils.isString(obj)) {\n return obj.length === 0;\n }\n for (var key in obj) {\n if (Utils.has(obj, key)) {\n return false;\n }\n }\n return true;\n },\n simpleExtend: function (destination, source) {\n if (!Utils.isObject(source)) {\n return;\n }\n for (var name in source) {\n destination[name] = source[name];\n }\n },\n initArray: function createIdArray(size, value) {\n var array = [];\n for (var i = 0; i < size; ++i) {\n array[i] = value;\n }\n return array;\n },\n serializePoints: function (points) {\n var res = [];\n for (var i = 0; i < points.length; i++) {\n var p = points[i];\n res.push(p.x + ';' + p.y);\n }\n return res.join(';');\n },\n deserializePoints: function (s) {\n var v = s.split(';'), points = [];\n if (v.length % 2 !== 0) {\n throw 'Not an array of points.';\n }\n for (var i = 0; i < v.length; i += 2) {\n points.push(new diagram.Point(parseInt(v[i], 10), parseInt(v[i + 1], 10)));\n }\n return points;\n },\n randomInteger: function (lower, upper) {\n return parseInt(Math.floor(Math.random() * upper) + lower, 10);\n },\n DFT: function (el, func) {\n func(el);\n if (el.childNodes) {\n for (var i = 0; i < el.childNodes.length; i++) {\n var item = el.childNodes[i];\n this.DFT(item, func);\n }\n }\n },\n getMatrixAngle: function (m) {\n if (m === null || m.d === 0) {\n return 0;\n }\n return Math.atan2(m.b, m.d) * 180 / Math.PI;\n },\n getMatrixScaling: function (m) {\n var sX = Math.sqrt(m.a * m.a + m.c * m.c);\n var sY = Math.sqrt(m.b * m.b + m.d * m.d);\n return [\n sX,\n sY\n ];\n }\n });\n function Range(start, stop, step) {\n if (typeof start == 'undefined' || typeof stop == 'undefined') {\n return [];\n }\n if (step && Utils.sign(stop - start) != Utils.sign(step)) {\n throw 'The sign of the increment should allow to reach the stop-value.';\n }\n step = step || 1;\n start = start || 0;\n stop = stop || start;\n if ((stop - start) / step === Infinity) {\n throw 'Infinite range defined.';\n }\n var range = [], i = -1, j;\n function rangeIntegerScale(x) {\n var k = 1;\n while (x * k % 1) {\n k *= 10;\n }\n return k;\n }\n var k = rangeIntegerScale(Math.abs(step));\n start *= k;\n stop *= k;\n step *= k;\n if (start > stop && step > 0) {\n step = -step;\n }\n if (step < 0) {\n while ((j = start + step * ++i) >= stop) {\n range.push(j / k);\n }\n } else {\n while ((j = start + step * ++i) <= stop) {\n range.push(j / k);\n }\n }\n return range;\n }\n function findRadian(start, end) {\n if (start == end) {\n return 0;\n }\n var sngXComp = end.x - start.x, sngYComp = start.y - end.y, atan = Math.atan(sngXComp / sngYComp);\n if (sngYComp >= 0) {\n return sngXComp < 0 ? atan + 2 * Math.PI : atan;\n }\n return atan + Math.PI;\n }\n Utils.sign = function (number) {\n return number ? number < 0 ? -1 : 1 : 0;\n };\n Utils.findAngle = function (center, end) {\n return findRadian(center, end) * 180 / Math.PI;\n };\n Utils.forEach = function (arr, iterator, thisRef) {\n for (var i = 0; i < arr.length; i++) {\n iterator.call(thisRef, arr[i], i, arr);\n }\n };\n Utils.any = function (arr, predicate) {\n for (var i = 0; i < arr.length; ++i) {\n if (predicate(arr[i])) {\n return arr[i];\n }\n }\n return null;\n };\n Utils.remove = function (arr, what) {\n var ax;\n while ((ax = Utils.indexOf(arr, what)) !== -1) {\n arr.splice(ax, 1);\n }\n return arr;\n };\n Utils.contains = function (arr, obj) {\n return Utils.indexOf(arr, obj) !== -1;\n };\n Utils.indexOf = function (arr, what) {\n return $.inArray(what, arr);\n };\n Utils.fold = function (list, iterator, acc, context) {\n var initial = arguments.length > 2;\n for (var i = 0; i < list.length; i++) {\n var value = list[i];\n if (!initial) {\n acc = value;\n initial = true;\n } else {\n acc = iterator.call(context, acc, value, i, list);\n }\n }\n if (!initial) {\n throw 'Reduce of empty array with no initial value';\n }\n return acc;\n };\n Utils.find = function (arr, iterator, context) {\n var result;\n Utils.any(arr, function (value, index, list) {\n if (iterator.call(context, value, index, list)) {\n result = value;\n return true;\n }\n return false;\n });\n return result;\n };\n Utils.first = function (arr, constraint, context) {\n if (arr.length === 0) {\n return null;\n }\n if (Utils.isUndefined(constraint)) {\n return arr[0];\n }\n return Utils.find(arr, constraint, context);\n };\n Utils.insert = function (arr, element, position) {\n arr.splice(position, 0, element);\n return arr;\n };\n Utils.all = function (arr, iterator, context) {\n var result = true;\n var value;\n for (var i = 0; i < arr.length; i++) {\n value = arr[i];\n result = result && iterator.call(context, value, i, arr);\n if (!result) {\n break;\n }\n }\n return result;\n };\n Utils.clear = function (arr) {\n arr.splice(0, arr.length);\n };\n Utils.bisort = function (a, b, sortfunc) {\n if (Utils.isUndefined(a)) {\n throw 'First array is not specified.';\n }\n if (Utils.isUndefined(b)) {\n throw 'Second array is not specified.';\n }\n if (a.length != b.length) {\n throw 'The two arrays should have equal length';\n }\n var all = [], i;\n for (i = 0; i < a.length; i++) {\n all.push({\n 'x': a[i],\n 'y': b[i]\n });\n }\n if (Utils.isUndefined(sortfunc)) {\n all.sort(function (m, n) {\n return m.x - n.x;\n });\n } else {\n all.sort(function (m, n) {\n return sortfunc(m.x, n.x);\n });\n }\n Utils.clear(a);\n Utils.clear(b);\n for (i = 0; i < all.length; i++) {\n a.push(all[i].x);\n b.push(all[i].y);\n }\n };\n Utils.addRange = function (arr, range) {\n arr.push.apply(arr, range);\n };\n var Easing = {\n easeInOut: function (pos) {\n return -Math.cos(pos * Math.PI) / 2 + 0.5;\n }\n };\n var Ticker = kendo.Class.extend({\n init: function () {\n this.adapters = [];\n this.target = 0;\n this.tick = 0;\n this.interval = 20;\n this.duration = 800;\n this.lastTime = null;\n this.handlers = [];\n var _this = this;\n this.transition = Easing.easeInOut;\n this.timerDelegate = function () {\n _this.onTimerEvent();\n };\n },\n addAdapter: function (a) {\n this.adapters.push(a);\n },\n onComplete: function (handler) {\n this.handlers.push(handler);\n },\n removeHandler: function (handler) {\n this.handlers = $.grep(this.handlers, function (h) {\n return h !== handler;\n });\n },\n trigger: function () {\n var _this = this;\n if (this.handlers) {\n Utils.forEach(this.handlers, function (h) {\n return h.call(_this.caller !== null ? _this.caller : _this);\n });\n }\n },\n onStep: function () {\n },\n seekTo: function (to) {\n this.seekFromTo(this.tick, to);\n },\n seekFromTo: function (from, to) {\n this.target = Math.max(0, Math.min(1, to));\n this.tick = Math.max(0, Math.min(1, from));\n this.lastTime = new Date().getTime();\n if (!this.intervalId) {\n this.intervalId = window.setInterval(this.timerDelegate, this.interval);\n }\n },\n stop: function () {\n if (this.intervalId) {\n window.clearInterval(this.intervalId);\n this.intervalId = null;\n this.trigger();\n }\n },\n play: function (origin) {\n if (this.adapters.length === 0) {\n return;\n }\n if (origin !== null) {\n this.caller = origin;\n }\n this.initState();\n this.seekFromTo(0, 1);\n },\n reverse: function () {\n this.seekFromTo(1, 0);\n },\n initState: function () {\n if (this.adapters.length === 0) {\n return;\n }\n for (var i = 0; i < this.adapters.length; i++) {\n this.adapters[i].initState();\n }\n },\n propagate: function () {\n var value = this.transition(this.tick);\n for (var i = 0; i < this.adapters.length; i++) {\n this.adapters[i].update(value);\n }\n },\n onTimerEvent: function () {\n var now = new Date().getTime();\n var timePassed = now - this.lastTime;\n this.lastTime = now;\n var movement = timePassed / this.duration * (this.tick < this.target ? 1 : -1);\n if (Math.abs(movement) >= Math.abs(this.tick - this.target)) {\n this.tick = this.target;\n } else {\n this.tick += movement;\n }\n try {\n this.propagate();\n } finally {\n this.onStep.call(this);\n if (this.target == this.tick) {\n this.stop();\n }\n }\n }\n });\n kendo.deepExtend(diagram, {\n init: function (element) {\n kendo.init(element, diagram.ui);\n },\n Utils: Utils,\n Range: Range,\n Ticker: Ticker\n });\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('dataviz/diagram/math', [\n 'dataviz/diagram/utils',\n 'kendo.dataviz.core'\n ], f);\n}(function () {\n (function ($, undefined) {\n var kendo = window.kendo, diagram = kendo.dataviz.diagram, Class = kendo.Class, deepExtend = kendo.deepExtend, dataviz = kendo.dataviz, Utils = diagram.Utils, Point = dataviz.Point2D, isFunction = kendo.isFunction, contains = Utils.contains, map = $.map;\n var HITTESTAREA = 3, EPSILON = 0.000001;\n deepExtend(Point.fn, {\n plus: function (p) {\n return new Point(this.x + p.x, this.y + p.y);\n },\n minus: function (p) {\n return new Point(this.x - p.x, this.y - p.y);\n },\n offset: function (value) {\n return new Point(this.x - value, this.y - value);\n },\n times: function (s) {\n return new Point(this.x * s, this.y * s);\n },\n normalize: function () {\n if (this.length() === 0) {\n return new Point();\n }\n return this.times(1 / this.length());\n },\n length: function () {\n return Math.sqrt(this.x * this.x + this.y * this.y);\n },\n toString: function () {\n return '(' + this.x + ',' + this.y + ')';\n },\n lengthSquared: function () {\n return this.x * this.x + this.y * this.y;\n },\n middleOf: function MiddleOf(p, q) {\n return new Point(q.x - p.x, q.y - p.y).times(0.5).plus(p);\n },\n toPolar: function (useDegrees) {\n var factor = 1;\n if (useDegrees) {\n factor = 180 / Math.PI;\n }\n var a = Math.atan2(Math.abs(this.y), Math.abs(this.x));\n var halfpi = Math.PI / 2;\n var len = this.length();\n if (this.x === 0) {\n if (this.y === 0) {\n return new Polar(0, 0);\n }\n if (this.y > 0) {\n return new Polar(len, factor * halfpi);\n }\n if (this.y < 0) {\n return new Polar(len, factor * 3 * halfpi);\n }\n } else if (this.x > 0) {\n if (this.y === 0) {\n return new Polar(len, 0);\n }\n if (this.y > 0) {\n return new Polar(len, factor * a);\n }\n if (this.y < 0) {\n return new Polar(len, factor * (4 * halfpi - a));\n }\n } else {\n if (this.y === 0) {\n return new Polar(len, 2 * halfpi);\n }\n if (this.y > 0) {\n return new Polar(len, factor * (2 * halfpi - a));\n }\n if (this.y < 0) {\n return new Polar(len, factor * (2 * halfpi + a));\n }\n }\n },\n isOnLine: function (from, to) {\n if (from.x > to.x) {\n var temp = to;\n to = from;\n from = temp;\n }\n var r1 = new Rect(from.x, from.y).inflate(HITTESTAREA, HITTESTAREA), r2 = new Rect(to.x, to.y).inflate(HITTESTAREA, HITTESTAREA), o1, u1;\n if (r1.union(r2).contains(this)) {\n if (from.x === to.x || from.y === to.y) {\n return true;\n } else if (from.y < to.y) {\n o1 = r1.x + (r2.x - r1.x) * (this.y - (r1.y + r1.height)) / (r2.y + r2.height - (r1.y + r1.height));\n u1 = r1.x + r1.width + (r2.x + r2.width - (r1.x + r1.width)) * (this.y - r1.y) / (r2.y - r1.y);\n } else {\n o1 = r1.x + (r2.x - r1.x) * (this.y - r1.y) / (r2.y - r1.y);\n u1 = r1.x + r1.width + (r2.x + r2.width - (r1.x + r1.width)) * (this.y - (r1.y + r1.height)) / (r2.y + r2.height - (r1.y + r1.height));\n }\n return this.x > o1 && this.x < u1;\n }\n return false;\n }\n });\n deepExtend(Point, {\n parse: function (str) {\n var tempStr = str.slice(1, str.length - 1), xy = tempStr.split(','), x = parseInt(xy[0], 10), y = parseInt(xy[1], 10);\n if (!isNaN(x) && !isNaN(y)) {\n return new Point(x, y);\n }\n }\n });\n var PathDefiner = Class.extend({\n init: function (p, left, right) {\n this.point = p;\n this.left = left;\n this.right = right;\n }\n });\n var Rect = Class.extend({\n init: function (x, y, width, height) {\n this.x = x || 0;\n this.y = y || 0;\n this.width = width || 0;\n this.height = height || 0;\n },\n contains: function (point) {\n return point.x >= this.x && point.x <= this.x + this.width && point.y >= this.y && point.y <= this.y + this.height;\n },\n inflate: function (dx, dy) {\n if (dy === undefined) {\n dy = dx;\n }\n this.x -= dx;\n this.y -= dy;\n this.width += 2 * dx + 1;\n this.height += 2 * dy + 1;\n return this;\n },\n offset: function (dx, dy) {\n var x = dx, y = dy;\n if (dx instanceof Point) {\n x = dx.x;\n y = dx.y;\n }\n this.x += x;\n this.y += y;\n return this;\n },\n union: function (r) {\n var x1 = Math.min(this.x, r.x);\n var y1 = Math.min(this.y, r.y);\n var x2 = Math.max(this.x + this.width, r.x + r.width);\n var y2 = Math.max(this.y + this.height, r.y + r.height);\n return new Rect(x1, y1, x2 - x1, y2 - y1);\n },\n center: function () {\n return new Point(this.x + this.width / 2, this.y + this.height / 2);\n },\n top: function () {\n return new Point(this.x + this.width / 2, this.y);\n },\n right: function () {\n return new Point(this.x + this.width, this.y + this.height / 2);\n },\n bottom: function () {\n return new Point(this.x + this.width / 2, this.y + this.height);\n },\n left: function () {\n return new Point(this.x, this.y + this.height / 2);\n },\n topLeft: function () {\n return new Point(this.x, this.y);\n },\n topRight: function () {\n return new Point(this.x + this.width, this.y);\n },\n bottomLeft: function () {\n return new Point(this.x, this.y + this.height);\n },\n bottomRight: function () {\n return new Point(this.x + this.width, this.y + this.height);\n },\n clone: function () {\n return new Rect(this.x, this.y, this.width, this.height);\n },\n isEmpty: function () {\n return !this.width && !this.height;\n },\n equals: function (rect) {\n return this.x === rect.x && this.y === rect.y && this.width === rect.width && this.height === rect.height;\n },\n rotatedBounds: function (angle) {\n var rect = this.clone(), points = this.rotatedPoints(angle), tl = points[0], tr = points[1], br = points[2], bl = points[3];\n rect.x = Math.min(br.x, tl.x, tr.x, bl.x);\n rect.y = Math.min(br.y, tl.y, tr.y, bl.y);\n rect.width = Math.max(br.x, tl.x, tr.x, bl.x) - rect.x;\n rect.height = Math.max(br.y, tl.y, tr.y, bl.y) - rect.y;\n return rect;\n },\n rotatedPoints: function (angle) {\n var rect = this, c = rect.center(), br = rect.bottomRight().rotate(c, 360 - angle), tl = rect.topLeft().rotate(c, 360 - angle), tr = rect.topRight().rotate(c, 360 - angle), bl = rect.bottomLeft().rotate(c, 360 - angle);\n return [\n tl,\n tr,\n br,\n bl\n ];\n },\n toString: function (delimiter) {\n delimiter = delimiter || ' ';\n return this.x + delimiter + this.y + delimiter + this.width + delimiter + this.height;\n },\n scale: function (scaleX, scaleY, staicPoint, adornerCenter, angle) {\n var tl = this.topLeft();\n var thisCenter = this.center();\n tl.rotate(thisCenter, 360 - angle).rotate(adornerCenter, angle);\n var delta = staicPoint.minus(tl);\n var scaled = new Point(delta.x * scaleX, delta.y * scaleY);\n var position = delta.minus(scaled);\n tl = tl.plus(position);\n tl.rotate(adornerCenter, 360 - angle).rotate(thisCenter, angle);\n this.x = tl.x;\n this.y = tl.y;\n this.width *= scaleX;\n this.height *= scaleY;\n },\n zoom: function (zoom) {\n this.x *= zoom;\n this.y *= zoom;\n this.width *= zoom;\n this.height *= zoom;\n return this;\n },\n overlaps: function (rect) {\n var bottomRight = this.bottomRight();\n var rectBottomRight = rect.bottomRight();\n var overlaps = !(bottomRight.x < rect.x || bottomRight.y < rect.y || rectBottomRight.x < this.x || rectBottomRight.y < this.y);\n return overlaps;\n }\n });\n var Size = Class.extend({\n init: function (width, height) {\n this.width = width;\n this.height = height;\n }\n });\n Size.prototype.Empty = new Size(0, 0);\n Rect.toRect = function (rect) {\n if (!(rect instanceof Rect)) {\n rect = new Rect(rect.x, rect.y, rect.width, rect.height);\n }\n return rect;\n };\n Rect.empty = function () {\n return new Rect(0, 0, 0, 0);\n };\n Rect.fromPoints = function (p, q) {\n if (isNaN(p.x) || isNaN(p.y) || isNaN(q.x) || isNaN(q.y)) {\n throw 'Some values are NaN.';\n }\n return new Rect(Math.min(p.x, q.x), Math.min(p.y, q.y), Math.abs(p.x - q.x), Math.abs(p.y - q.y));\n };\n function isNearZero(num) {\n return Math.abs(num) < EPSILON;\n }\n function intersectLine(start1, end1, start2, end2, isSegment) {\n var tangensdiff = (end1.x - start1.x) * (end2.y - start2.y) - (end1.y - start1.y) * (end2.x - start2.x);\n if (isNearZero(tangensdiff)) {\n return;\n }\n var num1 = (start1.y - start2.y) * (end2.x - start2.x) - (start1.x - start2.x) * (end2.y - start2.y);\n var num2 = (start1.y - start2.y) * (end1.x - start1.x) - (start1.x - start2.x) * (end1.y - start1.y);\n var r = num1 / tangensdiff;\n var s = num2 / tangensdiff;\n if (isSegment && (r < 0 || r > 1 || s < 0 || s > 1)) {\n return;\n }\n return new Point(start1.x + r * (end1.x - start1.x), start1.y + r * (end1.y - start1.y));\n }\n var Intersect = {\n lines: function (start1, end1, start2, end2) {\n return intersectLine(start1, end1, start2, end2);\n },\n segments: function (start1, end1, start2, end2) {\n return intersectLine(start1, end1, start2, end2, true);\n },\n rectWithLine: function (rect, start, end) {\n return Intersect.segments(start, end, rect.topLeft(), rect.topRight()) || Intersect.segments(start, end, rect.topRight(), rect.bottomRight()) || Intersect.segments(start, end, rect.bottomLeft(), rect.bottomRight()) || Intersect.segments(start, end, rect.topLeft(), rect.bottomLeft());\n },\n rects: function (rect1, rect2, angle) {\n var tl = rect2.topLeft(), tr = rect2.topRight(), bl = rect2.bottomLeft(), br = rect2.bottomRight();\n var center = rect2.center();\n if (angle) {\n tl = tl.rotate(center, angle);\n tr = tr.rotate(center, angle);\n bl = bl.rotate(center, angle);\n br = br.rotate(center, angle);\n }\n var intersect = rect1.contains(tl) || rect1.contains(tr) || rect1.contains(bl) || rect1.contains(br) || Intersect.rectWithLine(rect1, tl, tr) || Intersect.rectWithLine(rect1, tl, bl) || Intersect.rectWithLine(rect1, tr, br) || Intersect.rectWithLine(rect1, bl, br);\n if (!intersect) {\n tl = rect1.topLeft();\n tr = rect1.topRight();\n bl = rect1.bottomLeft();\n br = rect1.bottomRight();\n if (angle) {\n var reverseAngle = 360 - angle;\n tl = tl.rotate(center, reverseAngle);\n tr = tr.rotate(center, reverseAngle);\n bl = bl.rotate(center, reverseAngle);\n br = br.rotate(center, reverseAngle);\n }\n intersect = rect2.contains(tl) || rect2.contains(tr) || rect2.contains(bl) || rect2.contains(br);\n }\n return intersect;\n }\n };\n var RectAlign = Class.extend({\n init: function (container) {\n this.container = Rect.toRect(container);\n },\n align: function (content, alignment) {\n var alignValues = alignment.toLowerCase().split(' ');\n for (var i = 0; i < alignValues.length; i++) {\n content = this._singleAlign(content, alignValues[i]);\n }\n return content;\n },\n _singleAlign: function (content, alignment) {\n if (isFunction(this[alignment])) {\n return this[alignment](content);\n } else {\n return content;\n }\n },\n left: function (content) {\n return this._align(content, this._left);\n },\n center: function (content) {\n return this._align(content, this._center);\n },\n right: function (content) {\n return this._align(content, this._right);\n },\n stretch: function (content) {\n return this._align(content, this._stretch);\n },\n top: function (content) {\n return this._align(content, this._top);\n },\n middle: function (content) {\n return this._align(content, this._middle);\n },\n bottom: function (content) {\n return this._align(content, this._bottom);\n },\n _left: function (container, content) {\n content.x = container.x;\n },\n _center: function (container, content) {\n content.x = (container.width - content.width) / 2 || 0;\n },\n _right: function (container, content) {\n content.x = container.width - content.width;\n },\n _top: function (container, content) {\n content.y = container.y;\n },\n _middle: function (container, content) {\n content.y = (container.height - content.height) / 2 || 0;\n },\n _bottom: function (container, content) {\n content.y = container.height - content.height;\n },\n _stretch: function (container, content) {\n content.x = 0;\n content.y = 0;\n content.height = container.height;\n content.width = container.width;\n },\n _align: function (content, alignCalc) {\n content = Rect.toRect(content);\n alignCalc(this.container, content);\n return content;\n }\n });\n var Polar = Class.extend({\n init: function (r, a) {\n this.r = r;\n this.angle = a;\n }\n });\n var Matrix = Class.extend({\n init: function (a, b, c, d, e, f) {\n this.a = a || 0;\n this.b = b || 0;\n this.c = c || 0;\n this.d = d || 0;\n this.e = e || 0;\n this.f = f || 0;\n },\n plus: function (m) {\n this.a += m.a;\n this.b += m.b;\n this.c += m.c;\n this.d += m.d;\n this.e += m.e;\n this.f += m.f;\n },\n minus: function (m) {\n this.a -= m.a;\n this.b -= m.b;\n this.c -= m.c;\n this.d -= m.d;\n this.e -= m.e;\n this.f -= m.f;\n },\n times: function (m) {\n return new Matrix(this.a * m.a + this.c * m.b, this.b * m.a + this.d * m.b, this.a * m.c + this.c * m.d, this.b * m.c + this.d * m.d, this.a * m.e + this.c * m.f + this.e, this.b * m.e + this.d * m.f + this.f);\n },\n apply: function (p) {\n return new Point(this.a * p.x + this.c * p.y + this.e, this.b * p.x + this.d * p.y + this.f);\n },\n applyRect: function (r) {\n return Rect.fromPoints(this.apply(r.topLeft()), this.apply(r.bottomRight()));\n },\n toString: function () {\n return 'matrix(' + this.a + ' ' + this.b + ' ' + this.c + ' ' + this.d + ' ' + this.e + ' ' + this.f + ')';\n }\n });\n deepExtend(Matrix, {\n fromSVGMatrix: function (vm) {\n var m = new Matrix();\n m.a = vm.a;\n m.b = vm.b;\n m.c = vm.c;\n m.d = vm.d;\n m.e = vm.e;\n m.f = vm.f;\n return m;\n },\n fromMatrixVector: function (v) {\n var m = new Matrix();\n m.a = v.a;\n m.b = v.b;\n m.c = v.c;\n m.d = v.d;\n m.e = v.e;\n m.f = v.f;\n return m;\n },\n fromList: function (v) {\n if (v.length !== 6) {\n throw 'The given list should consist of six elements.';\n }\n var m = new Matrix();\n m.a = v[0];\n m.b = v[1];\n m.c = v[2];\n m.d = v[3];\n m.e = v[4];\n m.f = v[5];\n return m;\n },\n translation: function (x, y) {\n var m = new Matrix();\n m.a = 1;\n m.b = 0;\n m.c = 0;\n m.d = 1;\n m.e = x;\n m.f = y;\n return m;\n },\n unit: function () {\n return new Matrix(1, 0, 0, 1, 0, 0);\n },\n rotation: function (angle, x, y) {\n var m = new Matrix();\n m.a = Math.cos(angle * Math.PI / 180);\n m.b = Math.sin(angle * Math.PI / 180);\n m.c = -m.b;\n m.d = m.a;\n m.e = x - x * m.a + y * m.b || 0;\n m.f = y - y * m.a - x * m.b || 0;\n return m;\n },\n scaling: function (scaleX, scaleY) {\n var m = new Matrix();\n m.a = scaleX;\n m.b = 0;\n m.c = 0;\n m.d = scaleY;\n m.e = 0;\n m.f = 0;\n return m;\n },\n parse: function (v) {\n var parts, nums;\n if (v) {\n v = v.trim();\n if (v.slice(0, 6).toLowerCase() === 'matrix') {\n nums = v.slice(7, v.length - 1).trim();\n parts = nums.split(',');\n if (parts.length === 6) {\n return Matrix.fromList(map(parts, function (p) {\n return parseFloat(p);\n }));\n }\n parts = nums.split(' ');\n if (parts.length === 6) {\n return Matrix.fromList(map(parts, function (p) {\n return parseFloat(p);\n }));\n }\n }\n if (v.slice(0, 1) === '(' && v.slice(v.length - 1) === ')') {\n v = v.substr(1, v.length - 1);\n }\n if (v.indexOf(',') > 0) {\n parts = v.split(',');\n if (parts.length === 6) {\n return Matrix.fromList(map(parts, function (p) {\n return parseFloat(p);\n }));\n }\n }\n if (v.indexOf(' ') > 0) {\n parts = v.split(' ');\n if (parts.length === 6) {\n return Matrix.fromList(map(parts, function (p) {\n return parseFloat(p);\n }));\n }\n }\n }\n return parts;\n }\n });\n var MatrixVector = Class.extend({\n init: function (a, b, c, d, e, f) {\n this.a = a || 0;\n this.b = b || 0;\n this.c = c || 0;\n this.d = d || 0;\n this.e = e || 0;\n this.f = f || 0;\n },\n fromMatrix: function FromMatrix(m) {\n var v = new MatrixVector();\n v.a = m.a;\n v.b = m.b;\n v.c = m.c;\n v.d = m.d;\n v.e = m.e;\n v.f = m.f;\n return v;\n }\n });\n function normalVariable(mean, deviation) {\n var x, y, r;\n do {\n x = Math.random() * 2 - 1;\n y = Math.random() * 2 - 1;\n r = x * x + y * y;\n } while (!r || r > 1);\n return mean + deviation * x * Math.sqrt(-2 * Math.log(r) / r);\n }\n function randomId(length) {\n if (Utils.isUndefined(length)) {\n length = 10;\n }\n var result = '';\n var chars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';\n for (var i = length; i > 0; --i) {\n result += chars.charAt(Math.round(Math.random() * (chars.length - 1)));\n }\n return result;\n }\n var Geometry = {\n _distanceToLineSquared: function (p, a, b) {\n function d2(pt1, pt2) {\n return (pt1.x - pt2.x) * (pt1.x - pt2.x) + (pt1.y - pt2.y) * (pt1.y - pt2.y);\n }\n if (a === b) {\n return d2(p, a);\n }\n var vx = b.x - a.x, vy = b.y - a.y, dot = (p.x - a.x) * vx + (p.y - a.y) * vy;\n if (dot < 0) {\n return d2(a, p);\n }\n dot = (b.x - p.x) * vx + (b.y - p.y) * vy;\n if (dot < 0) {\n return d2(b, p);\n }\n dot = (b.x - p.x) * vy - (b.y - p.y) * vx;\n return dot * dot / (vx * vx + vy * vy);\n },\n distanceToLine: function (p, a, b) {\n return Math.sqrt(this._distanceToLineSquared(p, a, b));\n },\n distanceToPolyline: function (p, points) {\n var minimum = Number.MAX_VALUE;\n if (Utils.isUndefined(points) || points.length === 0) {\n return Number.MAX_VALUE;\n }\n for (var s = 0; s < points.length - 1; s++) {\n var p1 = points[s];\n var p2 = points[s + 1];\n var d = this._distanceToLineSquared(p, p1, p2);\n if (d < minimum) {\n minimum = d;\n }\n }\n return Math.sqrt(minimum);\n }\n };\n var HashTable = kendo.Class.extend({\n init: function () {\n this._buckets = [];\n this.length = 0;\n },\n add: function (key, value) {\n var obj = this._createGetBucket(key);\n if (Utils.isDefined(value)) {\n obj.value = value;\n }\n return obj;\n },\n get: function (key) {\n if (this._bucketExists(key)) {\n return this._createGetBucket(key);\n }\n return null;\n },\n set: function (key, value) {\n this.add(key, value);\n },\n containsKey: function (key) {\n return this._bucketExists(key);\n },\n remove: function (key) {\n if (this._bucketExists(key)) {\n var hashId = this._hash(key);\n delete this._buckets[hashId];\n this.length--;\n return key;\n }\n },\n forEach: function (func) {\n var hashes = this._hashes();\n for (var i = 0, len = hashes.length; i < len; i++) {\n var hash = hashes[i];\n var bucket = this._buckets[hash];\n if (Utils.isUndefined(bucket)) {\n continue;\n }\n func(bucket);\n }\n },\n clone: function () {\n var ht = new HashTable();\n var hashes = this._hashes();\n for (var i = 0, len = hashes.length; i < len; i++) {\n var hash = hashes[i];\n var bucket = this._buckets[hash];\n if (Utils.isUndefined(bucket)) {\n continue;\n }\n ht.add(bucket.key, bucket.value);\n }\n return ht;\n },\n _hashes: function () {\n var hashes = [];\n for (var hash in this._buckets) {\n if (this._buckets.hasOwnProperty(hash)) {\n hashes.push(hash);\n }\n }\n return hashes;\n },\n _bucketExists: function (key) {\n var hashId = this._hash(key);\n return Utils.isDefined(this._buckets[hashId]);\n },\n _createGetBucket: function (key) {\n var hashId = this._hash(key);\n var bucket = this._buckets[hashId];\n if (Utils.isUndefined(bucket)) {\n bucket = { key: key };\n this._buckets[hashId] = bucket;\n this.length++;\n }\n return bucket;\n },\n _hash: function (key) {\n if (Utils.isNumber(key)) {\n return key;\n }\n if (Utils.isString(key)) {\n return this._hashString(key);\n }\n if (Utils.isObject(key)) {\n return this._objectHashId(key);\n }\n throw 'Unsupported key type.';\n },\n _hashString: function (s) {\n var result = 0;\n if (s.length === 0) {\n return result;\n }\n for (var i = 0; i < s.length; i++) {\n var ch = s.charCodeAt(i);\n result = result * 32 - result + ch;\n }\n return result;\n },\n _objectHashId: function (key) {\n var id = key._hashId;\n if (Utils.isUndefined(id)) {\n id = randomId();\n key._hashId = id;\n }\n return id;\n }\n });\n var Dictionary = kendo.Observable.extend({\n init: function (dictionary) {\n var that = this;\n kendo.Observable.fn.init.call(that);\n this._hashTable = new HashTable();\n this.length = 0;\n if (Utils.isDefined(dictionary)) {\n if ($.isArray(dictionary)) {\n for (var i = 0; i < dictionary.length; i++) {\n this.add(dictionary[i]);\n }\n } else {\n dictionary.forEach(function (k, v) {\n this.add(k, v);\n }, this);\n }\n }\n },\n add: function (key, value) {\n var entry = this._hashTable.get(key);\n if (!entry) {\n entry = this._hashTable.add(key);\n this.length++;\n this.trigger('changed');\n }\n entry.value = value;\n },\n set: function (key, value) {\n this.add(key, value);\n },\n get: function (key) {\n var entry = this._hashTable.get(key);\n if (entry) {\n return entry.value;\n }\n throw new Error('Cannot find key ' + key);\n },\n containsKey: function (key) {\n return this._hashTable.containsKey(key);\n },\n remove: function (key) {\n if (this.containsKey(key)) {\n this.trigger('changed');\n this.length--;\n return this._hashTable.remove(key);\n }\n },\n forEach: function (func, thisRef) {\n this._hashTable.forEach(function (entry) {\n func.call(thisRef, entry.key, entry.value);\n });\n },\n forEachValue: function (func, thisRef) {\n this._hashTable.forEach(function (entry) {\n func.call(thisRef, entry.value);\n });\n },\n forEachKey: function (func, thisRef) {\n this._hashTable.forEach(function (entry) {\n func.call(thisRef, entry.key);\n });\n },\n keys: function () {\n var keys = [];\n this.forEachKey(function (key) {\n keys.push(key);\n });\n return keys;\n }\n });\n var Queue = kendo.Class.extend({\n init: function () {\n this._tail = null;\n this._head = null;\n this.length = 0;\n },\n enqueue: function (value) {\n var entry = {\n value: value,\n next: null\n };\n if (!this._head) {\n this._head = entry;\n this._tail = this._head;\n } else {\n this._tail.next = entry;\n this._tail = this._tail.next;\n }\n this.length++;\n },\n dequeue: function () {\n if (this.length < 1) {\n throw new Error('The queue is empty.');\n }\n var value = this._head.value;\n this._head = this._head.next;\n this.length--;\n return value;\n },\n contains: function (item) {\n var current = this._head;\n while (current) {\n if (current.value === item) {\n return true;\n }\n current = current.next;\n }\n return false;\n }\n });\n var Set = kendo.Observable.extend({\n init: function (resource) {\n var that = this;\n kendo.Observable.fn.init.call(that);\n this._hashTable = new HashTable();\n this.length = 0;\n if (Utils.isDefined(resource)) {\n if (resource instanceof HashTable) {\n resource.forEach(function (d) {\n this.add(d);\n });\n } else if (resource instanceof Dictionary) {\n resource.forEach(function (k, v) {\n this.add({\n key: k,\n value: v\n });\n }, this);\n }\n }\n },\n contains: function (item) {\n return this._hashTable.containsKey(item);\n },\n add: function (item) {\n var entry = this._hashTable.get(item);\n if (!entry) {\n this._hashTable.add(item, item);\n this.length++;\n this.trigger('changed');\n }\n },\n get: function (item) {\n if (this.contains(item)) {\n return this._hashTable.get(item).value;\n } else {\n return null;\n }\n },\n hash: function (item) {\n return this._hashTable._hash(item);\n },\n remove: function (item) {\n if (this.contains(item)) {\n this._hashTable.remove(item);\n this.length--;\n this.trigger('changed');\n }\n },\n forEach: function (func, context) {\n this._hashTable.forEach(function (kv) {\n func(kv.value);\n }, context);\n },\n toArray: function () {\n var r = [];\n this.forEach(function (d) {\n r.push(d);\n });\n return r;\n }\n });\n var Node = kendo.Class.extend({\n init: function (id, shape) {\n this.links = [];\n this.outgoing = [];\n this.incoming = [];\n this.weight = 1;\n if (Utils.isDefined(id)) {\n this.id = id;\n } else {\n this.id = randomId();\n }\n if (Utils.isDefined(shape)) {\n this.associatedShape = shape;\n var b = shape.bounds();\n this.width = b.width;\n this.height = b.height;\n this.x = b.x;\n this.y = b.y;\n } else {\n this.associatedShape = null;\n }\n this.data = null;\n this.type = 'Node';\n this.shortForm = 'Node \\'' + this.id + '\\'';\n this.isVirtual = false;\n },\n isIsolated: function () {\n return Utils.isEmpty(this.links);\n },\n bounds: function (r) {\n if (!Utils.isDefined(r)) {\n return new diagram.Rect(this.x, this.y, this.width, this.height);\n }\n this.x = r.x;\n this.y = r.y;\n this.width = r.width;\n this.height = r.height;\n },\n isLinkedTo: function (node) {\n var that = this;\n return Utils.any(that.links, function (link) {\n return link.getComplement(that) === node;\n });\n },\n getChildren: function () {\n if (this.outgoing.length === 0) {\n return [];\n }\n var children = [];\n for (var i = 0, len = this.outgoing.length; i < len; i++) {\n var link = this.outgoing[i];\n children.push(link.getComplement(this));\n }\n return children;\n },\n getParents: function () {\n if (this.incoming.length === 0) {\n return [];\n }\n var parents = [];\n for (var i = 0, len = this.incoming.length; i < len; i++) {\n var link = this.incoming[i];\n parents.push(link.getComplement(this));\n }\n return parents;\n },\n clone: function () {\n var copy = new Node();\n if (Utils.isDefined(this.weight)) {\n copy.weight = this.weight;\n }\n if (Utils.isDefined(this.balance)) {\n copy.balance = this.balance;\n }\n if (Utils.isDefined(this.owner)) {\n copy.owner = this.owner;\n }\n copy.associatedShape = this.associatedShape;\n copy.x = this.x;\n copy.y = this.y;\n copy.width = this.width;\n copy.height = this.height;\n return copy;\n },\n adjacentTo: function (node) {\n return this.isLinkedTo(node) !== null;\n },\n removeLink: function (link) {\n if (link.source === this) {\n Utils.remove(this.links, link);\n Utils.remove(this.outgoing, link);\n link.source = null;\n }\n if (link.target === this) {\n Utils.remove(this.links, link);\n Utils.remove(this.incoming, link);\n link.target = null;\n }\n },\n hasLinkTo: function (node) {\n return Utils.any(this.outgoing, function (link) {\n return link.target === node;\n });\n },\n degree: function () {\n return this.links.length;\n },\n incidentWith: function (link) {\n return contains(this.links, link);\n },\n getLinksWith: function (node) {\n return Utils.all(this.links, function (link) {\n return link.getComplement(this) === node;\n }, this);\n },\n getNeighbors: function () {\n var neighbors = [];\n Utils.forEach(this.incoming, function (e) {\n neighbors.push(e.getComplement(this));\n }, this);\n Utils.forEach(this.outgoing, function (e) {\n neighbors.push(e.getComplement(this));\n }, this);\n return neighbors;\n }\n });\n var Link = kendo.Class.extend({\n init: function (source, target, id, connection) {\n if (Utils.isUndefined(source)) {\n throw 'The source of the new link is not set.';\n }\n if (Utils.isUndefined(target)) {\n throw 'The target of the new link is not set.';\n }\n var sourceFound, targetFound;\n if (Utils.isString(source)) {\n sourceFound = new Node(source);\n } else {\n sourceFound = source;\n }\n if (Utils.isString(target)) {\n targetFound = new Node(target);\n } else {\n targetFound = target;\n }\n this.source = sourceFound;\n this.target = targetFound;\n this.source.links.push(this);\n this.target.links.push(this);\n this.source.outgoing.push(this);\n this.target.incoming.push(this);\n if (Utils.isDefined(id)) {\n this.id = id;\n } else {\n this.id = randomId();\n }\n if (Utils.isDefined(connection)) {\n this.associatedConnection = connection;\n } else {\n this.associatedConnection = null;\n }\n this.type = 'Link';\n this.shortForm = 'Link \\'' + this.source.id + '->' + this.target.id + '\\'';\n },\n getComplement: function (node) {\n if (this.source !== node && this.target !== node) {\n throw 'The given node is not incident with this link.';\n }\n return this.source === node ? this.target : this.source;\n },\n getCommonNode: function (link) {\n if (this.source === link.source || this.source === link.target) {\n return this.source;\n }\n if (this.target === link.source || this.target === link.target) {\n return this.target;\n }\n return null;\n },\n isBridging: function (v1, v2) {\n return this.source === v1 && this.target === v2 || this.source === v2 && this.target === v1;\n },\n getNodes: function () {\n return [\n this.source,\n this.target\n ];\n },\n incidentWith: function (node) {\n return this.source === node || this.target === node;\n },\n adjacentTo: function (link) {\n return contains(this.source.links, link) || contains(this.target.links, link);\n },\n changeSource: function (node) {\n Utils.remove(this.source.links, this);\n Utils.remove(this.source.outgoing, this);\n node.links.push(this);\n node.outgoing.push(this);\n this.source = node;\n },\n changeTarget: function (node) {\n Utils.remove(this.target.links, this);\n Utils.remove(this.target.incoming, this);\n node.links.push(this);\n node.incoming.push(this);\n this.target = node;\n },\n changesNodes: function (v, w) {\n if (this.source === v) {\n this.changeSource(w);\n } else if (this.target === v) {\n this.changeTarget(w);\n }\n },\n reverse: function () {\n var oldSource = this.source;\n var oldTarget = this.target;\n this.source = oldTarget;\n Utils.remove(oldSource.outgoing, this);\n this.source.outgoing.push(this);\n this.target = oldSource;\n Utils.remove(oldTarget.incoming, this);\n this.target.incoming.push(this);\n return this;\n },\n directTo: function (target) {\n if (this.source !== target && this.target !== target) {\n throw 'The given node is not incident with this link.';\n }\n if (this.target !== target) {\n this.reverse();\n }\n },\n createReverseEdge: function () {\n var r = this.clone();\n r.reverse();\n r.reversed = true;\n return r;\n },\n clone: function () {\n var clone = new Link(this.source, this.target);\n return clone;\n }\n });\n var Graph = kendo.Class.extend({\n init: function (idOrDiagram) {\n this.links = [];\n this.nodes = [];\n this._nodeMap = new Dictionary();\n this.diagram = null;\n this._root = null;\n if (Utils.isDefined(idOrDiagram)) {\n if (Utils.isString(idOrDiagram)) {\n this.id = idOrDiagram;\n } else {\n this.diagram = idOrDiagram;\n this.id = idOrDiagram.id;\n }\n } else {\n this.id = randomId();\n }\n this.bounds = new Rect();\n this._hasCachedRelationships = false;\n this.type = 'Graph';\n },\n cacheRelationships: function (forceRebuild) {\n if (Utils.isUndefined(forceRebuild)) {\n forceRebuild = false;\n }\n if (this._hasCachedRelationships && !forceRebuild) {\n return;\n }\n for (var i = 0, len = this.nodes.length; i < len; i++) {\n var node = this.nodes[i];\n node.children = this.getChildren(node);\n node.parents = this.getParents(node);\n }\n this._hasCachedRelationships = true;\n },\n assignLevels: function (startNode, offset, visited) {\n if (!startNode) {\n throw 'Start node not specified.';\n }\n if (Utils.isUndefined(offset)) {\n offset = 0;\n }\n this.cacheRelationships();\n if (Utils.isUndefined(visited)) {\n visited = new Dictionary();\n Utils.forEach(this.nodes, function (n) {\n visited.add(n, false);\n });\n }\n visited.set(startNode, true);\n startNode.level = offset;\n var children = startNode.children;\n for (var i = 0, len = children.length; i < len; i++) {\n var child = children[i];\n if (!child || visited.get(child)) {\n continue;\n }\n this.assignLevels(child, offset + 1, visited);\n }\n },\n root: function (value) {\n if (Utils.isUndefined(value)) {\n if (!this._root) {\n var found = Utils.first(this.nodes, function (n) {\n return n.incoming.length === 0;\n });\n if (found) {\n return found;\n }\n return Utils.first(this.nodes);\n } else {\n return this._root;\n }\n } else {\n this._root = value;\n }\n },\n getConnectedComponents: function () {\n this.componentIndex = 0;\n this.setItemIndices();\n var componentId = Utils.initArray(this.nodes.length, -1);\n for (var v = 0; v < this.nodes.length; v++) {\n if (componentId[v] === -1) {\n this._collectConnectedNodes(componentId, v);\n this.componentIndex++;\n }\n }\n var components = [], i;\n for (i = 0; i < this.componentIndex; ++i) {\n components[i] = new Graph();\n }\n for (i = 0; i < componentId.length; ++i) {\n var graph = components[componentId[i]];\n graph.addNodeAndOutgoings(this.nodes[i]);\n }\n components.sort(function (a, b) {\n return b.nodes.length - a.nodes.length;\n });\n return components;\n },\n _collectConnectedNodes: function (setIds, nodeIndex) {\n setIds[nodeIndex] = this.componentIndex;\n var node = this.nodes[nodeIndex];\n Utils.forEach(node.links, function (link) {\n var next = link.getComplement(node);\n var nextId = next.index;\n if (setIds[nextId] === -1) {\n this._collectConnectedNodes(setIds, nextId);\n }\n }, this);\n },\n calcBounds: function () {\n if (this.isEmpty()) {\n this.bounds = new Rect();\n return this.bounds;\n }\n var b = null;\n for (var i = 0, len = this.nodes.length; i < len; i++) {\n var node = this.nodes[i];\n if (!b) {\n b = node.bounds();\n } else {\n b = b.union(node.bounds());\n }\n }\n this.bounds = b;\n return this.bounds;\n },\n getSpanningTree: function (root) {\n var tree = new Graph();\n var map = new Dictionary(), source, target;\n tree.root = root.clone();\n tree.root.level = 0;\n tree.root.id = root.id;\n map.add(root, tree.root);\n root.level = 0;\n var visited = [];\n var remaining = [];\n tree._addNode(tree.root);\n visited.push(root);\n remaining.push(root);\n var levelCount = 1;\n while (remaining.length > 0) {\n var next = remaining.pop();\n for (var ni = 0; ni < next.links.length; ni++) {\n var link = next.links[ni];\n var cn = link.getComplement(next);\n if (contains(visited, cn)) {\n continue;\n }\n cn.level = next.level + 1;\n if (levelCount < cn.level + 1) {\n levelCount = cn.level + 1;\n }\n if (!contains(remaining, cn)) {\n remaining.push(cn);\n }\n if (!contains(visited, cn)) {\n visited.push(cn);\n }\n if (map.containsKey(next)) {\n source = map.get(next);\n } else {\n source = next.clone();\n source.level = next.level;\n source.id = next.id;\n map.add(next, source);\n }\n if (map.containsKey(cn)) {\n target = map.get(cn);\n } else {\n target = cn.clone();\n target.level = cn.level;\n target.id = cn.id;\n map.add(cn, target);\n }\n var newLink = new Link(source, target);\n tree.addLink(newLink);\n }\n }\n var treeLevels = [];\n for (var i = 0; i < levelCount; i++) {\n treeLevels.push([]);\n }\n Utils.forEach(tree.nodes, function (node) {\n treeLevels[node.level].push(node);\n });\n tree.treeLevels = treeLevels;\n tree.cacheRelationships();\n return tree;\n },\n takeRandomNode: function (excludedNodes, incidenceLessThan) {\n if (Utils.isUndefined(excludedNodes)) {\n excludedNodes = [];\n }\n if (Utils.isUndefined(incidenceLessThan)) {\n incidenceLessThan = 4;\n }\n if (this.nodes.length === 0) {\n return null;\n }\n if (this.nodes.length === 1) {\n return contains(excludedNodes, this.nodes[0]) ? null : this.nodes[0];\n }\n var pool = $.grep(this.nodes, function (node) {\n return !contains(excludedNodes, node) && node.degree() <= incidenceLessThan;\n });\n if (Utils.isEmpty(pool)) {\n return null;\n }\n return pool[Utils.randomInteger(0, pool.length)];\n },\n isEmpty: function () {\n return Utils.isEmpty(this.nodes);\n },\n isHealthy: function () {\n return Utils.all(this.links, function (link) {\n return contains(this.nodes, link.source) && contains(this.nodes, link.target);\n }, this);\n },\n getParents: function (n) {\n if (!this.hasNode(n)) {\n throw 'The given node is not part of this graph.';\n }\n return n.getParents();\n },\n getChildren: function (n) {\n if (!this.hasNode(n)) {\n throw 'The given node is not part of this graph.';\n }\n return n.getChildren();\n },\n addLink: function (sourceOrLink, target, owner) {\n if (Utils.isUndefined(sourceOrLink)) {\n throw 'The source of the link is not defined.';\n }\n if (Utils.isUndefined(target)) {\n if (Utils.isDefined(sourceOrLink.type) && sourceOrLink.type === 'Link') {\n this.addExistingLink(sourceOrLink);\n return;\n } else {\n throw 'The target of the link is not defined.';\n }\n }\n var foundSource = this.getNode(sourceOrLink);\n if (Utils.isUndefined(foundSource)) {\n foundSource = this.addNode(sourceOrLink);\n }\n var foundTarget = this.getNode(target);\n if (Utils.isUndefined(foundTarget)) {\n foundTarget = this.addNode(target);\n }\n var newLink = new Link(foundSource, foundTarget);\n if (Utils.isDefined(owner)) {\n newLink.owner = owner;\n }\n this.links.push(newLink);\n return newLink;\n },\n removeAllLinks: function () {\n while (this.links.length > 0) {\n var link = this.links[0];\n this.removeLink(link);\n }\n },\n addExistingLink: function (link) {\n if (this.hasLink(link)) {\n return;\n }\n this.links.push(link);\n if (this.hasNode(link.source.id)) {\n var s = this.getNode(link.source.id);\n link.changeSource(s);\n } else {\n this.addNode(link.source);\n }\n if (this.hasNode(link.target.id)) {\n var t = this.getNode(link.target.id);\n link.changeTarget(t);\n } else {\n this.addNode(link.target);\n }\n },\n hasLink: function (linkOrId) {\n if (Utils.isString(linkOrId)) {\n return Utils.any(this.links, function (link) {\n return link.id === linkOrId;\n });\n }\n if (linkOrId.type === 'Link') {\n return contains(this.links, linkOrId);\n }\n throw 'The given object is neither an identifier nor a Link.';\n },\n getNode: function (nodeOrId) {\n var id = nodeOrId.id || nodeOrId;\n if (this._nodeMap.containsKey(id)) {\n return this._nodeMap.get(id);\n }\n },\n hasNode: function (nodeOrId) {\n var id = nodeOrId.id || nodeOrId;\n return this._nodeMap.containsKey(id);\n },\n _addNode: function (node) {\n this.nodes.push(node);\n this._nodeMap.add(node.id, node);\n },\n _removeNode: function (node) {\n Utils.remove(this.nodes, node);\n this._nodeMap.remove(node.id);\n },\n removeNode: function (nodeOrId) {\n var n = nodeOrId;\n if (Utils.isString(nodeOrId)) {\n n = this.getNode(nodeOrId);\n }\n if (Utils.isDefined(n)) {\n var links = n.links;\n n.links = [];\n for (var i = 0, len = links.length; i < len; i++) {\n var link = links[i];\n this.removeLink(link);\n }\n this._removeNode(n);\n } else {\n throw 'The identifier should be a Node or the Id (string) of a node.';\n }\n },\n areConnected: function (n1, n2) {\n return Utils.any(this.links, function (link) {\n return link.source == n1 && link.target == n2 || link.source == n2 && link.target == n1;\n });\n },\n removeLink: function (link) {\n Utils.remove(this.links, link);\n Utils.remove(link.source.outgoing, link);\n Utils.remove(link.source.links, link);\n Utils.remove(link.target.incoming, link);\n Utils.remove(link.target.links, link);\n },\n addNode: function (nodeOrId, layoutRect, owner) {\n var newNode = null;\n if (!Utils.isDefined(nodeOrId)) {\n throw 'No Node or identifier for a new Node is given.';\n }\n if (Utils.isString(nodeOrId)) {\n if (this.hasNode(nodeOrId)) {\n return this.getNode(nodeOrId);\n }\n newNode = new Node(nodeOrId);\n } else {\n if (this.hasNode(nodeOrId)) {\n return this.getNode(nodeOrId);\n }\n newNode = nodeOrId;\n }\n if (Utils.isDefined(layoutRect)) {\n newNode.bounds(layoutRect);\n }\n if (Utils.isDefined(owner)) {\n newNode.owner = owner;\n }\n this._addNode(newNode);\n return newNode;\n },\n addNodeAndOutgoings: function (node) {\n if (!this.hasNode(node)) {\n this._addNode(node);\n }\n var newLinks = node.outgoing;\n node.outgoing = [];\n Utils.forEach(newLinks, function (link) {\n this.addExistingLink(link);\n }, this);\n },\n setItemIndices: function () {\n var i;\n for (i = 0; i < this.nodes.length; ++i) {\n this.nodes[i].index = i;\n }\n for (i = 0; i < this.links.length; ++i) {\n this.links[i].index = i;\n }\n },\n clone: function (saveMapping) {\n var copy = new Graph();\n var save = Utils.isDefined(saveMapping) && saveMapping === true;\n if (save) {\n copy.nodeMap = new Dictionary();\n copy.linkMap = new Dictionary();\n }\n var map = new Dictionary();\n Utils.forEach(this.nodes, function (nOriginal) {\n var nCopy = nOriginal.clone();\n map.set(nOriginal, nCopy);\n copy._addNode(nCopy);\n if (save) {\n copy.nodeMap.set(nCopy, nOriginal);\n }\n });\n Utils.forEach(this.links, function (linkOriginal) {\n if (map.containsKey(linkOriginal.source) && map.containsKey(linkOriginal.target)) {\n var linkCopy = copy.addLink(map.get(linkOriginal.source), map.get(linkOriginal.target));\n if (save) {\n copy.linkMap.set(linkCopy, linkOriginal);\n }\n }\n });\n return copy;\n },\n linearize: function (addIds) {\n return Graph.Utils.linearize(this, addIds);\n },\n depthFirstTraversal: function (startNode, action) {\n if (Utils.isUndefined(startNode)) {\n throw 'You need to supply a starting node.';\n }\n if (Utils.isUndefined(action)) {\n throw 'You need to supply an action.';\n }\n if (!this.hasNode(startNode)) {\n throw 'The given start-node is not part of this graph';\n }\n var foundNode = this.getNode(startNode);\n var visited = [];\n this._dftIterator(foundNode, action, visited);\n },\n _dftIterator: function (node, action, visited) {\n action(node);\n visited.push(node);\n var children = node.getChildren();\n for (var i = 0, len = children.length; i < len; i++) {\n var child = children[i];\n if (contains(visited, child)) {\n continue;\n }\n this._dftIterator(child, action, visited);\n }\n },\n breadthFirstTraversal: function (startNode, action) {\n if (Utils.isUndefined(startNode)) {\n throw 'You need to supply a starting node.';\n }\n if (Utils.isUndefined(action)) {\n throw 'You need to supply an action.';\n }\n if (!this.hasNode(startNode)) {\n throw 'The given start-node is not part of this graph';\n }\n var foundNode = this.getNode(startNode);\n var queue = new Queue();\n var visited = [];\n queue.enqueue(foundNode);\n while (queue.length > 0) {\n var node = queue.dequeue();\n action(node);\n visited.push(node);\n var children = node.getChildren();\n for (var i = 0, len = children.length; i < len; i++) {\n var child = children[i];\n if (contains(visited, child) || contains(queue, child)) {\n continue;\n }\n queue.enqueue(child);\n }\n }\n },\n _stronglyConnectedComponents: function (excludeSingleItems, node, indices, lowLinks, connected, stack, index) {\n indices.add(node, index);\n lowLinks.add(node, index);\n index++;\n stack.push(node);\n var children = node.getChildren(), next;\n for (var i = 0, len = children.length; i < len; i++) {\n next = children[i];\n if (!indices.containsKey(next)) {\n this._stronglyConnectedComponents(excludeSingleItems, next, indices, lowLinks, connected, stack, index);\n lowLinks.add(node, Math.min(lowLinks.get(node), lowLinks.get(next)));\n } else if (contains(stack, next)) {\n lowLinks.add(node, Math.min(lowLinks.get(node), indices.get(next)));\n }\n }\n if (lowLinks.get(node) === indices.get(node)) {\n var component = [];\n do {\n next = stack.pop();\n component.push(next);\n } while (next !== node);\n if (!excludeSingleItems || component.length > 1) {\n connected.push(component);\n }\n }\n },\n findCycles: function (excludeSingleItems) {\n if (Utils.isUndefined(excludeSingleItems)) {\n excludeSingleItems = true;\n }\n var indices = new Dictionary();\n var lowLinks = new Dictionary();\n var connected = [];\n var stack = [];\n for (var i = 0, len = this.nodes.length; i < len; i++) {\n var node = this.nodes[i];\n if (indices.containsKey(node)) {\n continue;\n }\n this._stronglyConnectedComponents(excludeSingleItems, node, indices, lowLinks, connected, stack, 0);\n }\n return connected;\n },\n isAcyclic: function () {\n return Utils.isEmpty(this.findCycles());\n },\n isSubGraph: function (other) {\n var otherArray = other.linearize();\n var thisArray = this.linearize();\n return Utils.all(otherArray, function (s) {\n return contains(thisArray, s);\n });\n },\n makeAcyclic: function () {\n if (this.isEmpty() || this.nodes.length <= 1 || this.links.length <= 1) {\n return [];\n }\n if (this.nodes.length == 2) {\n var result = [];\n if (this.links.length > 1) {\n var oneLink = this.links[0];\n var oneNode = oneLink.source;\n for (var i = 0, len = this.links.length; i < len; i++) {\n var link = this.links[i];\n if (link.source == oneNode) {\n continue;\n }\n var rev = link.reverse();\n result.push(rev);\n }\n }\n return result;\n }\n var copy = this.clone(true);\n var N = this.nodes.length;\n var intensityCatalog = new Dictionary();\n var flowIntensity = function (node) {\n if (node.outgoing.length === 0) {\n return 2 - N;\n } else if (node.incoming.length === 0) {\n return N - 2;\n } else {\n return node.outgoing.length - node.incoming.length;\n }\n };\n var catalogEqualIntensity = function (node, intensityCatalog) {\n var intensity = flowIntensity(node, N);\n if (!intensityCatalog.containsKey(intensity)) {\n intensityCatalog.set(intensity, []);\n }\n intensityCatalog.get(intensity).push(node);\n };\n Utils.forEach(copy.nodes, function (v) {\n catalogEqualIntensity(v, intensityCatalog);\n });\n var sourceStack = [];\n var targetStack = [];\n while (copy.nodes.length > 0) {\n var source, target, intensity;\n if (intensityCatalog.containsKey(2 - N)) {\n var targets = intensityCatalog.get(2 - N);\n while (targets.length > 0) {\n target = targets.pop();\n for (var li = 0; li < target.links.length; li++) {\n var targetLink = target.links[li];\n source = targetLink.getComplement(target);\n intensity = flowIntensity(source, N);\n Utils.remove(intensityCatalog.get(intensity), source);\n source.removeLink(targetLink);\n catalogEqualIntensity(source, intensityCatalog);\n }\n copy._removeNode(target);\n targetStack.unshift(target);\n }\n }\n if (intensityCatalog.containsKey(N - 2)) {\n var sources = intensityCatalog.get(N - 2);\n while (sources.length > 0) {\n source = sources.pop();\n for (var si = 0; si < source.links.length; si++) {\n var sourceLink = source.links[si];\n target = sourceLink.getComplement(source);\n intensity = flowIntensity(target, N);\n Utils.remove(intensityCatalog.get(intensity), target);\n target.removeLink(sourceLink);\n catalogEqualIntensity(target, intensityCatalog);\n }\n sourceStack.push(source);\n copy._removeNode(source);\n }\n }\n if (copy.nodes.length > 0) {\n for (var k = N - 3; k > 2 - N; k--) {\n if (intensityCatalog.containsKey(k) && intensityCatalog.get(k).length > 0) {\n var maxdiff = intensityCatalog.get(k);\n var v = maxdiff.pop();\n for (var ri = 0; ri < v.links.length; ri++) {\n var ril = v.links[ri];\n var u = ril.getComplement(v);\n intensity = flowIntensity(u, N);\n Utils.remove(intensityCatalog.get(intensity), u);\n u.removeLink(ril);\n catalogEqualIntensity(u, intensityCatalog);\n }\n sourceStack.push(v);\n copy._removeNode(v);\n break;\n }\n }\n }\n }\n sourceStack = sourceStack.concat(targetStack);\n var vertexOrder = new Dictionary();\n for (var kk = 0; kk < this.nodes.length; kk++) {\n vertexOrder.set(copy.nodeMap.get(sourceStack[kk]), kk);\n }\n var reversedEdges = [];\n Utils.forEach(this.links, function (link) {\n if (vertexOrder.get(link.source) > vertexOrder.get(link.target)) {\n link.reverse();\n reversedEdges.push(link);\n }\n });\n return reversedEdges;\n }\n });\n Graph.Predefined = {\n EightGraph: function () {\n return Graph.Utils.parse([\n '1->2',\n '2->3',\n '3->4',\n '4->1',\n '3->5',\n '5->6',\n '6->7',\n '7->3'\n ]);\n },\n Mindmap: function () {\n return Graph.Utils.parse([\n '0->1',\n '0->2',\n '0->3',\n '0->4',\n '0->5',\n '1->6',\n '1->7',\n '7->8',\n '2->9',\n '9->10',\n '9->11',\n '3->12',\n '12->13',\n '13->14',\n '4->15',\n '4->16',\n '15->17',\n '15->18',\n '18->19',\n '18->20',\n '14->21',\n '14->22',\n '5->23',\n '23->24',\n '23->25',\n '6->26'\n ]);\n },\n ThreeGraph: function () {\n return Graph.Utils.parse([\n '1->2',\n '2->3',\n '3->1'\n ]);\n },\n BinaryTree: function (levels) {\n if (Utils.isUndefined(levels)) {\n levels = 5;\n }\n return Graph.Utils.createBalancedTree(levels, 2);\n },\n Linear: function (length) {\n if (Utils.isUndefined(length)) {\n length = 10;\n }\n return Graph.Utils.createBalancedTree(length, 1);\n },\n Tree: function (levels, siblingsCount) {\n return Graph.Utils.createBalancedTree(levels, siblingsCount);\n },\n Forest: function (levels, siblingsCount, trees) {\n return Graph.Utils.createBalancedForest(levels, siblingsCount, trees);\n },\n Workflow: function () {\n return Graph.Utils.parse([\n '0->1',\n '1->2',\n '2->3',\n '1->4',\n '4->3',\n '3->5',\n '5->6',\n '6->3',\n '6->7',\n '5->4'\n ]);\n },\n Grid: function (n, m) {\n var g = new diagram.Graph();\n if (n <= 0 && m <= 0) {\n return g;\n }\n for (var i = 0; i < n + 1; i++) {\n var previous = null;\n for (var j = 0; j < m + 1; j++) {\n var node = new Node(i.toString() + '.' + j.toString());\n g.addNode(node);\n if (previous) {\n g.addLink(previous, node);\n }\n if (i > 0) {\n var left = g.getNode((i - 1).toString() + '.' + j.toString());\n g.addLink(left, node);\n }\n previous = node;\n }\n }\n return g;\n }\n };\n Graph.Utils = {\n parse: function (graphString) {\n var previousLink, graph = new diagram.Graph(), parts = graphString.slice();\n for (var i = 0, len = parts.length; i < len; i++) {\n var part = parts[i];\n if (Utils.isString(part)) {\n if (part.indexOf('->') < 0) {\n throw 'The link should be specified as \\'a->b\\'.';\n }\n var p = part.split('->');\n if (p.length != 2) {\n throw 'The link should be specified as \\'a->b\\'.';\n }\n previousLink = new Link(p[0], p[1]);\n graph.addLink(previousLink);\n }\n if (Utils.isObject(part)) {\n if (!previousLink) {\n throw 'Specification found before Link definition.';\n }\n kendo.deepExtend(previousLink, part);\n }\n }\n return graph;\n },\n linearize: function (graph, addIds) {\n if (Utils.isUndefined(graph)) {\n throw 'Expected an instance of a Graph object in slot one.';\n }\n if (Utils.isUndefined(addIds)) {\n addIds = false;\n }\n var lin = [];\n for (var i = 0, len = graph.links.length; i < len; i++) {\n var link = graph.links[i];\n lin.push(link.source.id + '->' + link.target.id);\n if (addIds) {\n lin.push({ id: link.id });\n }\n }\n return lin;\n },\n _addShape: function (kendoDiagram, p, id, shapeDefaults) {\n if (Utils.isUndefined(p)) {\n p = new diagram.Point(0, 0);\n }\n if (Utils.isUndefined(id)) {\n id = randomId();\n }\n shapeDefaults = kendo.deepExtend({\n width: 20,\n height: 20,\n id: id,\n radius: 10,\n fill: '#778899',\n data: 'circle',\n undoable: false,\n x: p.x,\n y: p.y\n }, shapeDefaults);\n return kendoDiagram.addShape(shapeDefaults);\n },\n _addConnection: function (diagram, from, to, options) {\n return diagram.connect(from, to, options);\n },\n createDiagramFromGraph: function (diagram, graph, doLayout, randomSize) {\n if (Utils.isUndefined(diagram)) {\n throw 'The diagram surface is undefined.';\n }\n if (Utils.isUndefined(graph)) {\n throw 'No graph specification defined.';\n }\n if (Utils.isUndefined(doLayout)) {\n doLayout = true;\n }\n if (Utils.isUndefined(randomSize)) {\n randomSize = false;\n }\n var width = diagram.element.clientWidth || 200;\n var height = diagram.element.clientHeight || 200;\n var map = [], node, shape;\n for (var i = 0, len = graph.nodes.length; i < len; i++) {\n node = graph.nodes[i];\n var p = node.position;\n if (Utils.isUndefined(p)) {\n if (Utils.isDefined(node.x) && Utils.isDefined(node.y)) {\n p = new Point(node.x, node.y);\n } else {\n p = new Point(Utils.randomInteger(10, width - 20), Utils.randomInteger(10, height - 20));\n }\n }\n var opt = {};\n if (node.id === '0') {\n } else if (randomSize) {\n kendo.deepExtend(opt, {\n width: Math.random() * 150 + 20,\n height: Math.random() * 80 + 50,\n data: 'rectangle',\n fill: { color: '#778899' }\n });\n }\n shape = this._addShape(diagram, p, node.id, opt);\n var bounds = shape.bounds();\n if (Utils.isDefined(bounds)) {\n node.x = bounds.x;\n node.y = bounds.y;\n node.width = bounds.width;\n node.height = bounds.height;\n }\n map[node.id] = shape;\n }\n for (var gli = 0; gli < graph.links.length; gli++) {\n var link = graph.links[gli];\n var sourceShape = map[link.source.id];\n if (Utils.isUndefined(sourceShape)) {\n continue;\n }\n var targetShape = map[link.target.id];\n if (Utils.isUndefined(targetShape)) {\n continue;\n }\n this._addConnection(diagram, sourceShape, targetShape, { id: link.id });\n }\n if (doLayout) {\n var l = new diagram.SpringLayout(diagram);\n l.layoutGraph(graph, { limitToView: false });\n for (var shi = 0; shi < graph.nodes.length; shi++) {\n node = graph.nodes[shi];\n shape = map[node.id];\n shape.bounds(new Rect(node.x, node.y, node.width, node.height));\n }\n }\n },\n createBalancedTree: function (levels, siblingsCount) {\n if (Utils.isUndefined(levels)) {\n levels = 3;\n }\n if (Utils.isUndefined(siblingsCount)) {\n siblingsCount = 3;\n }\n var g = new diagram.Graph(), counter = -1, lastAdded = [], news;\n if (levels <= 0 || siblingsCount <= 0) {\n return g;\n }\n var root = new Node((++counter).toString());\n g.addNode(root);\n g.root = root;\n lastAdded.push(root);\n for (var i = 0; i < levels; i++) {\n news = [];\n for (var j = 0; j < lastAdded.length; j++) {\n var parent = lastAdded[j];\n for (var k = 0; k < siblingsCount; k++) {\n var item = new Node((++counter).toString());\n g.addLink(parent, item);\n news.push(item);\n }\n }\n lastAdded = news;\n }\n return g;\n },\n createBalancedForest: function (levels, siblingsCount, treeCount) {\n if (Utils.isUndefined(levels)) {\n levels = 3;\n }\n if (Utils.isUndefined(siblingsCount)) {\n siblingsCount = 3;\n }\n if (Utils.isUndefined(treeCount)) {\n treeCount = 5;\n }\n var g = new diagram.Graph(), counter = -1, lastAdded = [], news;\n if (levels <= 0 || siblingsCount <= 0 || treeCount <= 0) {\n return g;\n }\n for (var t = 0; t < treeCount; t++) {\n var root = new Node((++counter).toString());\n g.addNode(root);\n lastAdded = [root];\n for (var i = 0; i < levels; i++) {\n news = [];\n for (var j = 0; j < lastAdded.length; j++) {\n var parent = lastAdded[j];\n for (var k = 0; k < siblingsCount; k++) {\n var item = new Node((++counter).toString());\n g.addLink(parent, item);\n news.push(item);\n }\n }\n lastAdded = news;\n }\n }\n return g;\n },\n createRandomConnectedGraph: function (nodeCount, maxIncidence, isTree) {\n if (Utils.isUndefined(nodeCount)) {\n nodeCount = 40;\n }\n if (Utils.isUndefined(maxIncidence)) {\n maxIncidence = 4;\n }\n if (Utils.isUndefined(isTree)) {\n isTree = false;\n }\n var g = new diagram.Graph(), counter = -1;\n if (nodeCount <= 0) {\n return g;\n }\n var root = new Node((++counter).toString());\n g.addNode(root);\n if (nodeCount === 1) {\n return g;\n }\n if (nodeCount > 1) {\n for (var i = 1; i < nodeCount; i++) {\n var poolNode = g.takeRandomNode([], maxIncidence);\n if (!poolNode) {\n break;\n }\n var newNode = g.addNode(i.toString());\n g.addLink(poolNode, newNode);\n }\n if (!isTree && nodeCount > 1) {\n var randomAdditions = Utils.randomInteger(1, nodeCount);\n for (var ri = 0; ri < randomAdditions; ri++) {\n var n1 = g.takeRandomNode([], maxIncidence);\n var n2 = g.takeRandomNode([], maxIncidence);\n if (n1 && n2 && !g.areConnected(n1, n2)) {\n g.addLink(n1, n2);\n }\n }\n }\n return g;\n }\n },\n randomDiagram: function (diagram, shapeCount, maxIncidence, isTree, randomSize) {\n var g = kendo.dataviz.diagram.Graph.Utils.createRandomConnectedGraph(shapeCount, maxIncidence, isTree);\n Graph.Utils.createDiagramFromGraph(diagram, g, false, randomSize);\n }\n };\n kendo.deepExtend(diagram, {\n init: function (element) {\n kendo.init(element, diagram.ui);\n },\n Point: Point,\n Intersect: Intersect,\n Geometry: Geometry,\n Rect: Rect,\n Size: Size,\n RectAlign: RectAlign,\n Matrix: Matrix,\n MatrixVector: MatrixVector,\n normalVariable: normalVariable,\n randomId: randomId,\n Dictionary: Dictionary,\n HashTable: HashTable,\n Queue: Queue,\n Set: Set,\n Node: Node,\n Link: Link,\n Graph: Graph,\n PathDefiner: PathDefiner\n });\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('dataviz/diagram/svg', [\n 'kendo.drawing',\n 'dataviz/diagram/math'\n ], f);\n}(function () {\n (function ($, undefined) {\n var kendo = window.kendo, diagram = kendo.dataviz.diagram, Class = kendo.Class, deepExtend = kendo.deepExtend, Point = diagram.Point, Rect = diagram.Rect, Matrix = diagram.Matrix, Utils = diagram.Utils, isNumber = Utils.isNumber, isString = Utils.isString, MatrixVector = diagram.MatrixVector, g = kendo.geometry, d = kendo.drawing, defined = d.util.defined, inArray = $.inArray;\n var TRANSPARENT = 'transparent', Markers = {\n none: 'none',\n arrowStart: 'ArrowStart',\n filledCircle: 'FilledCircle',\n arrowEnd: 'ArrowEnd'\n }, FULL_CIRCLE_ANGLE = 360, START = 'start', END = 'end', WIDTH = 'width', HEIGHT = 'height', X = 'x', Y = 'y';\n diagram.Markers = Markers;\n function diffNumericOptions(options, fields) {\n var elementOptions = this.options;\n var hasChanges = false;\n var value, field;\n for (var i = 0; i < fields.length; i++) {\n field = fields[i];\n value = options[field];\n if (isNumber(value) && elementOptions[field] !== value) {\n elementOptions[field] = value;\n hasChanges = true;\n }\n }\n return hasChanges;\n }\n var Scale = Class.extend({\n init: function (x, y) {\n this.x = x;\n this.y = y;\n },\n toMatrix: function () {\n return Matrix.scaling(this.x, this.y);\n },\n toString: function () {\n return kendo.format('scale({0},{1})', this.x, this.y);\n },\n invert: function () {\n return new Scale(1 / this.x, 1 / this.y);\n }\n });\n var Translation = Class.extend({\n init: function (x, y) {\n this.x = x;\n this.y = y;\n },\n toMatrixVector: function () {\n return new MatrixVector(0, 0, 0, 0, this.x, this.y);\n },\n toMatrix: function () {\n return Matrix.translation(this.x, this.y);\n },\n toString: function () {\n return kendo.format('translate({0},{1})', this.x, this.y);\n },\n plus: function (delta) {\n this.x += delta.x;\n this.y += delta.y;\n },\n times: function (factor) {\n this.x *= factor;\n this.y *= factor;\n },\n length: function () {\n return Math.sqrt(this.x * this.x + this.y * this.y);\n },\n normalize: function () {\n if (this.Length === 0) {\n return;\n }\n this.times(1 / this.length());\n },\n invert: function () {\n return new Translation(-this.x, -this.y);\n }\n });\n var Rotation = Class.extend({\n init: function (angle, x, y) {\n this.x = x || 0;\n this.y = y || 0;\n this.angle = angle;\n },\n toString: function () {\n if (this.x && this.y) {\n return kendo.format('rotate({0},{1},{2})', this.angle, this.x, this.y);\n } else {\n return kendo.format('rotate({0})', this.angle);\n }\n },\n toMatrix: function () {\n return Matrix.rotation(this.angle, this.x, this.y);\n },\n center: function () {\n return new Point(this.x, this.y);\n },\n invert: function () {\n return new Rotation(FULL_CIRCLE_ANGLE - this.angle, this.x, this.y);\n }\n });\n Rotation.ZERO = new Rotation(0);\n Rotation.create = function (rotation) {\n return new Rotation(rotation.angle, rotation.x, rotation.y);\n };\n Rotation.parse = function (str) {\n var values = str.slice(1, str.length - 1).split(','), angle = values[0], x = values[1], y = values[2];\n var rotation = new Rotation(angle, x, y);\n return rotation;\n };\n var CompositeTransform = Class.extend({\n init: function (x, y, scaleX, scaleY, angle, center) {\n this.translate = new Translation(x, y);\n if (scaleX !== undefined && scaleY !== undefined) {\n this.scale = new Scale(scaleX, scaleY);\n }\n if (angle !== undefined) {\n this.rotate = center ? new Rotation(angle, center.x, center.y) : new Rotation(angle);\n }\n },\n toString: function () {\n var toString = function (transform) {\n return transform ? transform.toString() : '';\n };\n return toString(this.translate) + toString(this.rotate) + toString(this.scale);\n },\n render: function (visual) {\n visual._transform = this;\n visual._renderTransform();\n },\n toMatrix: function () {\n var m = Matrix.unit();\n if (this.translate) {\n m = m.times(this.translate.toMatrix());\n }\n if (this.rotate) {\n m = m.times(this.rotate.toMatrix());\n }\n if (this.scale) {\n m = m.times(this.scale.toMatrix());\n }\n return m;\n },\n invert: function () {\n var rotate = this.rotate ? this.rotate.invert() : undefined, rotateMatrix = rotate ? rotate.toMatrix() : Matrix.unit(), scale = this.scale ? this.scale.invert() : undefined, scaleMatrix = scale ? scale.toMatrix() : Matrix.unit();\n var translatePoint = new Point(-this.translate.x, -this.translate.y);\n translatePoint = rotateMatrix.times(scaleMatrix).apply(translatePoint);\n var translate = new Translation(translatePoint.x, translatePoint.y);\n var transform = new CompositeTransform();\n transform.translate = translate;\n transform.rotate = rotate;\n transform.scale = scale;\n return transform;\n }\n });\n var AutoSizeableMixin = {\n _setScale: function () {\n var options = this.options;\n var originWidth = this._originWidth;\n var originHeight = this._originHeight;\n var scaleX = options.width / originWidth;\n var scaleY = options.height / originHeight;\n if (!isNumber(scaleX)) {\n scaleX = 1;\n }\n if (!isNumber(scaleY)) {\n scaleY = 1;\n }\n this._transform.scale = new Scale(scaleX, scaleY);\n },\n _setTranslate: function () {\n var options = this.options;\n var x = options.x || 0;\n var y = options.y || 0;\n this._transform.translate = new Translation(x, y);\n },\n _initSize: function () {\n var options = this.options;\n var transform = false;\n if (options.autoSize !== false && (defined(options.width) || defined(options.height))) {\n this._measure(true);\n this._setScale();\n transform = true;\n }\n if (defined(options.x) || defined(options.y)) {\n this._setTranslate();\n transform = true;\n }\n if (transform) {\n this._renderTransform();\n }\n },\n _updateSize: function (options) {\n var update = false;\n if (this.options.autoSize !== false && this._diffNumericOptions(options, [\n WIDTH,\n HEIGHT\n ])) {\n update = true;\n this._measure(true);\n this._setScale();\n }\n if (this._diffNumericOptions(options, [\n X,\n Y\n ])) {\n update = true;\n this._setTranslate();\n }\n if (update) {\n this._renderTransform();\n }\n return update;\n }\n };\n var Element = Class.extend({\n init: function (options) {\n var element = this;\n element.options = deepExtend({}, element.options, options);\n element.id = element.options.id;\n element._originSize = Rect.empty();\n element._transform = new CompositeTransform();\n },\n visible: function (value) {\n return this.drawingContainer().visible(value);\n },\n redraw: function (options) {\n if (options && options.id) {\n this.id = options.id;\n }\n },\n position: function (x, y) {\n var options = this.options;\n if (!defined(x)) {\n return new Point(options.x, options.y);\n }\n if (defined(y)) {\n options.x = x;\n options.y = y;\n } else if (x instanceof Point) {\n options.x = x.x;\n options.y = x.y;\n }\n this._transform.translate = new Translation(options.x, options.y);\n this._renderTransform();\n },\n rotate: function (angle, center) {\n if (defined(angle)) {\n this._transform.rotate = new Rotation(angle, center.x, center.y);\n this._renderTransform();\n }\n return this._transform.rotate || Rotation.ZERO;\n },\n drawingContainer: function () {\n return this.drawingElement;\n },\n _renderTransform: function () {\n var matrix = this._transform.toMatrix();\n this.drawingContainer().transform(new g.Matrix(matrix.a, matrix.b, matrix.c, matrix.d, matrix.e, matrix.f));\n },\n _hover: function () {\n },\n _diffNumericOptions: diffNumericOptions,\n _measure: function (force) {\n var rect;\n if (!this._measured || force) {\n var box = this._boundingBox() || new g.Rect();\n var startPoint = box.topLeft();\n rect = new Rect(startPoint.x, startPoint.y, box.width(), box.height());\n this._originSize = rect;\n this._originWidth = rect.width;\n this._originHeight = rect.height;\n this._measured = true;\n } else {\n rect = this._originSize;\n }\n return rect;\n },\n _boundingBox: function () {\n return this.drawingElement.rawBBox();\n }\n });\n var VisualBase = Element.extend({\n init: function (options) {\n Element.fn.init.call(this, options);\n options = this.options;\n options.fill = normalizeDrawingOptions(options.fill);\n options.stroke = normalizeDrawingOptions(options.stroke);\n },\n options: {\n stroke: {\n color: 'gray',\n width: 1\n },\n fill: { color: TRANSPARENT }\n },\n fill: function (color, opacity) {\n this._fill({\n color: getColor(color),\n opacity: opacity\n });\n },\n stroke: function (color, width, opacity) {\n this._stroke({\n color: getColor(color),\n width: width,\n opacity: opacity\n });\n },\n redraw: function (options) {\n if (options) {\n var stroke = options.stroke;\n var fill = options.fill;\n if (stroke) {\n this._stroke(normalizeDrawingOptions(stroke));\n }\n if (fill) {\n this._fill(normalizeDrawingOptions(fill));\n }\n Element.fn.redraw.call(this, options);\n }\n },\n _hover: function (show) {\n var drawingElement = this.drawingElement;\n var options = this.options;\n var hover = options.hover;\n if (hover && hover.fill) {\n var fill = show ? normalizeDrawingOptions(hover.fill) : options.fill;\n drawingElement.fill(fill.color, fill.opacity);\n }\n },\n _stroke: function (strokeOptions) {\n var options = this.options;\n deepExtend(options, { stroke: strokeOptions });\n strokeOptions = options.stroke;\n var stroke = null;\n if (strokeOptions.width > 0) {\n stroke = {\n color: strokeOptions.color,\n width: strokeOptions.width,\n opacity: strokeOptions.opacity,\n dashType: strokeOptions.dashType\n };\n }\n this.drawingElement.options.set('stroke', stroke);\n },\n _fill: function (fillOptions) {\n var options = this.options;\n deepExtend(options, { fill: fillOptions || {} });\n var fill = options.fill;\n if (fill.gradient) {\n var gradient = fill.gradient;\n var GradientClass = gradient.type === 'radial' ? d.RadialGradient : d.LinearGradient;\n this.drawingElement.fill(new GradientClass(gradient));\n } else {\n this.drawingElement.fill(fill.color, fill.opacity);\n }\n }\n });\n var TextBlock = VisualBase.extend({\n init: function (options) {\n options = this._textColor(options);\n VisualBase.fn.init.call(this, options);\n this._font();\n this._initText();\n this._initSize();\n },\n options: {\n fontSize: 15,\n fontFamily: 'sans-serif',\n stroke: { width: 0 },\n fill: { color: 'black' },\n autoSize: true\n },\n _initText: function () {\n var options = this.options;\n this.drawingElement = new d.Text(defined(options.text) ? options.text : '', new g.Point(), { font: options.font });\n this._fill();\n this._stroke();\n },\n _textColor: function (options) {\n if (options && options.color) {\n options = deepExtend({}, options, { fill: { color: options.color } });\n }\n return options;\n },\n _font: function () {\n var options = this.options;\n if (options.fontFamily && defined(options.fontSize)) {\n var fontOptions = [];\n if (options.fontStyle) {\n fontOptions.push(options.fontStyle);\n }\n if (options.fontWeight) {\n fontOptions.push(options.fontWeight);\n }\n fontOptions.push(options.fontSize + (isNumber(options.fontSize) ? 'px' : ''));\n fontOptions.push(options.fontFamily);\n options.font = fontOptions.join(' ');\n } else {\n delete options.font;\n }\n },\n content: function (text) {\n return this.drawingElement.content(text);\n },\n redraw: function (options) {\n if (options) {\n var sizeChanged = false;\n var textOptions = this.options;\n options = this._textColor(options);\n VisualBase.fn.redraw.call(this, options);\n if (options.fontFamily || defined(options.fontSize) || options.fontStyle || options.fontWeight) {\n deepExtend(textOptions, {\n fontFamily: options.fontFamily,\n fontSize: options.fontSize,\n fontStyle: options.fontStyle,\n fontWeight: options.fontWeight\n });\n this._font();\n this.drawingElement.options.set('font', textOptions.font);\n sizeChanged = true;\n }\n if (options.text) {\n this.content(options.text);\n sizeChanged = true;\n }\n if (!this._updateSize(options) && sizeChanged) {\n this._initSize();\n }\n }\n }\n });\n deepExtend(TextBlock.fn, AutoSizeableMixin);\n var Rectangle = VisualBase.extend({\n init: function (options) {\n VisualBase.fn.init.call(this, options);\n this._initPath();\n this._setPosition();\n },\n _setPosition: function () {\n var options = this.options;\n var x = options.x;\n var y = options.y;\n if (defined(x) || defined(y)) {\n this.position(x || 0, y || 0);\n }\n },\n redraw: function (options) {\n if (options) {\n VisualBase.fn.redraw.call(this, options);\n if (this._diffNumericOptions(options, [\n WIDTH,\n HEIGHT\n ])) {\n this._drawPath();\n }\n if (this._diffNumericOptions(options, [\n X,\n Y\n ])) {\n this._setPosition();\n }\n }\n },\n _initPath: function () {\n var options = this.options;\n this.drawingElement = new d.Path({\n stroke: options.stroke,\n closed: true\n });\n this._fill();\n this._drawPath();\n },\n _drawPath: function () {\n var drawingElement = this.drawingElement;\n var sizeOptions = sizeOptionsOrDefault(this.options);\n var width = sizeOptions.width;\n var height = sizeOptions.height;\n drawingElement.segments.elements([\n createSegment(0, 0),\n createSegment(width, 0),\n createSegment(width, height),\n createSegment(0, height)\n ]);\n }\n });\n var MarkerBase = VisualBase.extend({\n init: function (options) {\n VisualBase.fn.init.call(this, options);\n var anchor = this.options.anchor;\n this.anchor = new g.Point(anchor.x, anchor.y);\n this.createElement();\n },\n options: {\n stroke: {\n color: TRANSPARENT,\n width: 0\n },\n fill: { color: 'black' }\n },\n _transformToPath: function (point, path) {\n var transform = path.transform();\n if (point && transform) {\n point = point.transformCopy(transform);\n }\n return point;\n },\n redraw: function (options) {\n if (options) {\n if (options.position) {\n this.options.position = options.position;\n }\n VisualBase.fn.redraw.call(this, options);\n }\n }\n });\n var CircleMarker = MarkerBase.extend({\n options: {\n radius: 4,\n anchor: {\n x: 0,\n y: 0\n }\n },\n createElement: function () {\n var options = this.options;\n this.drawingElement = new d.Circle(new g.Circle(this.anchor, options.radius), {\n fill: options.fill,\n stroke: options.stroke\n });\n },\n positionMarker: function (path) {\n var options = this.options;\n var position = options.position;\n var segments = path.segments;\n var targetSegment;\n var point;\n if (position == START) {\n targetSegment = segments[0];\n } else {\n targetSegment = segments[segments.length - 1];\n }\n if (targetSegment) {\n point = this._transformToPath(targetSegment.anchor(), path);\n this.drawingElement.transform(g.transform().translate(point.x, point.y));\n }\n }\n });\n var ArrowMarker = MarkerBase.extend({\n options: {\n path: 'M 0 0 L 10 5 L 0 10 L 3 5 z',\n anchor: {\n x: 10,\n y: 5\n }\n },\n createElement: function () {\n var options = this.options;\n this.drawingElement = d.Path.parse(options.path, {\n fill: options.fill,\n stroke: options.stroke\n });\n },\n positionMarker: function (path) {\n var points = this._linePoints(path);\n var start = points.start;\n var end = points.end;\n var transform = g.transform();\n if (start) {\n transform.rotate(lineAngle(start, end), end);\n }\n if (end) {\n var anchor = this.anchor;\n var translate = end.clone().translate(-anchor.x, -anchor.y);\n transform.translate(translate.x, translate.y);\n }\n this.drawingElement.transform(transform);\n },\n _linePoints: function (path) {\n var options = this.options;\n var segments = path.segments;\n var startPoint, endPoint, targetSegment;\n if (options.position == START) {\n targetSegment = segments[0];\n if (targetSegment) {\n endPoint = targetSegment.anchor();\n startPoint = targetSegment.controlOut();\n var nextSegment = segments[1];\n if (!startPoint && nextSegment) {\n startPoint = nextSegment.anchor();\n }\n }\n } else {\n targetSegment = segments[segments.length - 1];\n if (targetSegment) {\n endPoint = targetSegment.anchor();\n startPoint = targetSegment.controlIn();\n var prevSegment = segments[segments.length - 2];\n if (!startPoint && prevSegment) {\n startPoint = prevSegment.anchor();\n }\n }\n }\n if (endPoint) {\n return {\n start: this._transformToPath(startPoint, path),\n end: this._transformToPath(endPoint, path)\n };\n }\n }\n });\n var MarkerPathMixin = {\n _getPath: function (position) {\n var path = this.drawingElement;\n if (path instanceof d.MultiPath) {\n if (position == START) {\n path = path.paths[0];\n } else {\n path = path.paths[path.paths.length - 1];\n }\n }\n if (path && path.segments.length) {\n return path;\n }\n },\n _normalizeMarkerOptions: function (options) {\n var startCap = options.startCap;\n var endCap = options.endCap;\n if (isString(startCap)) {\n options.startCap = { type: startCap };\n }\n if (isString(endCap)) {\n options.endCap = { type: endCap };\n }\n },\n _removeMarker: function (position) {\n var marker = this._markers[position];\n if (marker) {\n this.drawingContainer().remove(marker.drawingElement);\n delete this._markers[position];\n }\n },\n _createMarkers: function () {\n var options = this.options;\n this._normalizeMarkerOptions(options);\n this._markers = {};\n this._markers[START] = this._createMarker(options.startCap, START);\n this._markers[END] = this._createMarker(options.endCap, END);\n },\n _createMarker: function (options, position) {\n var type = (options || {}).type;\n var path = this._getPath(position);\n var markerType, marker;\n if (!path) {\n this._removeMarker(position);\n return;\n }\n if (type == Markers.filledCircle) {\n markerType = CircleMarker;\n } else if (type == Markers.arrowStart || type == Markers.arrowEnd) {\n markerType = ArrowMarker;\n } else {\n this._removeMarker(position);\n }\n if (markerType) {\n marker = new markerType(deepExtend({}, options, { position: position }));\n marker.positionMarker(path);\n this.drawingContainer().append(marker.drawingElement);\n return marker;\n }\n },\n _positionMarker: function (position) {\n var marker = this._markers[position];\n if (marker) {\n var path = this._getPath(position);\n if (path) {\n marker.positionMarker(path);\n } else {\n this._removeMarker(position);\n }\n }\n },\n _capMap: {\n start: 'startCap',\n end: 'endCap'\n },\n _redrawMarker: function (pathChange, position, options) {\n this._normalizeMarkerOptions(options);\n var pathOptions = this.options;\n var cap = this._capMap[position];\n var pathCapType = (pathOptions[cap] || {}).type;\n var optionsCap = options[cap];\n var created = false;\n if (optionsCap) {\n pathOptions[cap] = deepExtend({}, pathOptions[cap], optionsCap);\n if (optionsCap.type && pathCapType != optionsCap.type) {\n this._removeMarker(position);\n this._markers[position] = this._createMarker(pathOptions[cap], position);\n created = true;\n } else if (this._markers[position]) {\n this._markers[position].redraw(optionsCap);\n }\n } else if (pathChange && !this._markers[position] && pathOptions[cap]) {\n this._markers[position] = this._createMarker(pathOptions[cap], position);\n created = true;\n }\n return created;\n },\n _redrawMarkers: function (pathChange, options) {\n if (!this._redrawMarker(pathChange, START, options) && pathChange) {\n this._positionMarker(START);\n }\n if (!this._redrawMarker(pathChange, END, options) && pathChange) {\n this._positionMarker(END);\n }\n }\n };\n var Path = VisualBase.extend({\n init: function (options) {\n VisualBase.fn.init.call(this, options);\n this.container = new d.Group();\n this._createElements();\n this._initSize();\n },\n options: { autoSize: true },\n drawingContainer: function () {\n return this.container;\n },\n data: function (value) {\n var options = this.options;\n if (value) {\n if (options.data != value) {\n options.data = value;\n this._setData(value);\n this._initSize();\n this._redrawMarkers(true, {});\n }\n } else {\n return options.data;\n }\n },\n redraw: function (options) {\n if (options) {\n VisualBase.fn.redraw.call(this, options);\n var pathOptions = this.options;\n var data = options.data;\n if (defined(data) && pathOptions.data != data) {\n pathOptions.data = data;\n this._setData(data);\n if (!this._updateSize(options)) {\n this._initSize();\n }\n this._redrawMarkers(true, options);\n } else {\n this._updateSize(options);\n this._redrawMarkers(false, options);\n }\n }\n },\n _createElements: function () {\n var options = this.options;\n this.drawingElement = d.Path.parse(options.data || '', { stroke: options.stroke });\n this._fill();\n this.container.append(this.drawingElement);\n this._createMarkers();\n },\n _setData: function (data) {\n var drawingElement = this.drawingElement;\n var multipath = d.Path.parse(data || '');\n var paths = multipath.paths.slice(0);\n multipath.paths.elements([]);\n drawingElement.paths.elements(paths);\n }\n });\n deepExtend(Path.fn, AutoSizeableMixin);\n deepExtend(Path.fn, MarkerPathMixin);\n var Line = VisualBase.extend({\n init: function (options) {\n VisualBase.fn.init.call(this, options);\n this.container = new d.Group();\n this._initPath();\n this._createMarkers();\n },\n drawingContainer: function () {\n return this.container;\n },\n redraw: function (options) {\n if (options) {\n options = options || {};\n var from = options.from;\n var to = options.to;\n if (from) {\n this.options.from = from;\n }\n if (to) {\n this.options.to = to;\n }\n if (from || to) {\n this._drawPath();\n this._redrawMarkers(true, options);\n } else {\n this._redrawMarkers(false, options);\n }\n VisualBase.fn.redraw.call(this, options);\n }\n },\n _initPath: function () {\n var options = this.options;\n var drawingElement = this.drawingElement = new d.Path({ stroke: options.stroke });\n this._fill();\n this._drawPath();\n this.container.append(drawingElement);\n },\n _drawPath: function () {\n var options = this.options;\n var drawingElement = this.drawingElement;\n var from = options.from || new Point();\n var to = options.to || new Point();\n drawingElement.segments.elements([\n createSegment(from.x, from.y),\n createSegment(to.x, to.y)\n ]);\n }\n });\n deepExtend(Line.fn, MarkerPathMixin);\n var Polyline = VisualBase.extend({\n init: function (options) {\n VisualBase.fn.init.call(this, options);\n this.container = new d.Group();\n this._initPath();\n this._createMarkers();\n },\n drawingContainer: function () {\n return this.container;\n },\n points: function (points) {\n var options = this.options;\n if (points) {\n options.points = points;\n this._updatePath();\n } else {\n return options.points;\n }\n },\n redraw: function (options) {\n if (options) {\n var points = options.points;\n VisualBase.fn.redraw.call(this, options);\n if (points && this._pointsDiffer(points)) {\n this.points(points);\n this._redrawMarkers(true, options);\n } else {\n this._redrawMarkers(false, options);\n }\n }\n },\n _initPath: function () {\n var options = this.options;\n this.drawingElement = new d.Path({ stroke: options.stroke });\n this._fill();\n this.container.append(this.drawingElement);\n if (options.points) {\n this._updatePath();\n }\n },\n _pointsDiffer: function (points) {\n var currentPoints = this.options.points;\n var differ = currentPoints.length !== points.length;\n if (!differ) {\n for (var i = 0; i < points.length; i++) {\n if (currentPoints[i].x !== points[i].x || currentPoints[i].y !== points[i].y) {\n differ = true;\n break;\n }\n }\n }\n return differ;\n },\n _updatePath: function () {\n var drawingElement = this.drawingElement;\n var options = this.options;\n var points = options.points;\n var segments = [];\n var point;\n for (var i = 0; i < points.length; i++) {\n point = points[i];\n segments.push(createSegment(point.x, point.y));\n }\n drawingElement.segments.elements(segments);\n },\n options: { points: [] }\n });\n deepExtend(Polyline.fn, MarkerPathMixin);\n var Image = Element.extend({\n init: function (options) {\n Element.fn.init.call(this, options);\n this._initImage();\n },\n redraw: function (options) {\n if (options) {\n if (options.source) {\n this.drawingElement.src(options.source);\n }\n if (this._diffNumericOptions(options, [\n WIDTH,\n HEIGHT,\n X,\n Y\n ])) {\n this.drawingElement.rect(this._rect());\n }\n Element.fn.redraw.call(this, options);\n }\n },\n _initImage: function () {\n var options = this.options;\n var rect = this._rect();\n this.drawingElement = new d.Image(options.source, rect, {});\n },\n _rect: function () {\n var sizeOptions = sizeOptionsOrDefault(this.options);\n var origin = new g.Point(sizeOptions.x, sizeOptions.y);\n var size = new g.Size(sizeOptions.width, sizeOptions.height);\n return new g.Rect(origin, size);\n }\n });\n var Group = Element.extend({\n init: function (options) {\n this.children = [];\n Element.fn.init.call(this, options);\n this.drawingElement = new d.Group();\n this._initSize();\n },\n options: { autoSize: false },\n append: function (visual) {\n this.drawingElement.append(visual.drawingContainer());\n this.children.push(visual);\n this._childrenChange = true;\n },\n remove: function (visual) {\n if (this._remove(visual)) {\n this._childrenChange = true;\n }\n },\n _remove: function (visual) {\n var index = inArray(visual, this.children);\n if (index >= 0) {\n this.drawingElement.removeAt(index);\n this.children.splice(index, 1);\n return true;\n }\n },\n clear: function () {\n this.drawingElement.clear();\n this.children = [];\n this._childrenChange = true;\n },\n toFront: function (visuals) {\n var visual;\n for (var i = 0; i < visuals.length; i++) {\n visual = visuals[i];\n if (this._remove(visual)) {\n this.append(visual);\n }\n }\n },\n toBack: function (visuals) {\n this._reorderChildren(visuals, 0);\n },\n toIndex: function (visuals, indices) {\n this._reorderChildren(visuals, indices);\n },\n _reorderChildren: function (visuals, indices) {\n var group = this.drawingElement;\n var drawingChildren = group.children.slice(0);\n var children = this.children;\n var fixedPosition = isNumber(indices);\n var i, index, toIndex, drawingElement, visual;\n for (i = 0; i < visuals.length; i++) {\n visual = visuals[i];\n drawingElement = visual.drawingContainer();\n index = inArray(visual, children);\n if (index >= 0) {\n drawingChildren.splice(index, 1);\n children.splice(index, 1);\n toIndex = fixedPosition ? indices : indices[i];\n drawingChildren.splice(toIndex, 0, drawingElement);\n children.splice(toIndex, 0, visual);\n }\n }\n group.clear();\n group.append.apply(group, drawingChildren);\n },\n redraw: function (options) {\n if (options) {\n if (this._childrenChange) {\n this._childrenChange = false;\n if (!this._updateSize(options)) {\n this._initSize();\n }\n } else {\n this._updateSize(options);\n }\n Element.fn.redraw.call(this, options);\n }\n },\n _boundingBox: function () {\n var children = this.children;\n var boundingBox;\n var visual, childBoundingBox;\n for (var i = 0; i < children.length; i++) {\n visual = children[i];\n if (visual.visible() && visual._includeInBBox !== false) {\n childBoundingBox = visual.drawingContainer().clippedBBox(null);\n if (childBoundingBox) {\n if (boundingBox) {\n boundingBox = g.Rect.union(boundingBox, childBoundingBox);\n } else {\n boundingBox = childBoundingBox;\n }\n }\n }\n }\n return boundingBox;\n }\n });\n deepExtend(Group.fn, AutoSizeableMixin);\n var Layout = Group.extend({\n init: function (rect, options) {\n this.children = [];\n Element.fn.init.call(this, options);\n this.drawingElement = new d.Layout(toDrawingRect(rect), options);\n this._initSize();\n },\n rect: function (rect) {\n if (rect) {\n this.drawingElement.rect(toDrawingRect(rect));\n } else {\n var drawingRect = this.drawingElement.rect();\n if (drawingRect) {\n return new Rect(drawingRect.origin.x, drawingRect.origin.y, drawingRect.size.width, drawingRect.size.height);\n }\n }\n },\n reflow: function () {\n this.drawingElement.reflow();\n },\n redraw: function (options) {\n kendo.deepExtend(this.drawingElement.options, options);\n Group.fn.redraw.call(this, options);\n }\n });\n var Circle = VisualBase.extend({\n init: function (options) {\n VisualBase.fn.init.call(this, options);\n this._initCircle();\n this._initSize();\n },\n redraw: function (options) {\n if (options) {\n var circleOptions = this.options;\n if (options.center) {\n deepExtend(circleOptions, { center: options.center });\n this._center.move(circleOptions.center.x, circleOptions.center.y);\n }\n if (this._diffNumericOptions(options, ['radius'])) {\n this._circle.setRadius(circleOptions.radius);\n }\n this._updateSize(options);\n VisualBase.fn.redraw.call(this, options);\n }\n },\n _initCircle: function () {\n var options = this.options;\n var width = options.width;\n var height = options.height;\n var radius = options.radius;\n if (!defined(radius)) {\n if (!defined(width)) {\n width = height;\n }\n if (!defined(height)) {\n height = width;\n }\n options.radius = radius = Math.min(width, height) / 2;\n }\n var center = options.center || {\n x: radius,\n y: radius\n };\n this._center = new g.Point(center.x, center.y);\n this._circle = new g.Circle(this._center, radius);\n this.drawingElement = new d.Circle(this._circle, { stroke: options.stroke });\n this._fill();\n }\n });\n deepExtend(Circle.fn, AutoSizeableMixin);\n var Canvas = Class.extend({\n init: function (element, options) {\n options = options || {};\n this.element = element;\n this.surface = d.Surface.create(element, options);\n if (kendo.isFunction(this.surface.translate)) {\n this.translate = this._translate;\n }\n this.drawingElement = new d.Group();\n this._viewBox = new Rect(0, 0, options.width, options.height);\n this.size(this._viewBox);\n },\n bounds: function () {\n var box = this.drawingElement.clippedBBox();\n return new Rect(0, 0, box.width(), box.height());\n },\n size: function (size) {\n var viewBox = this._viewBox;\n if (defined(size)) {\n viewBox.width = size.width;\n viewBox.height = size.height;\n this.surface.setSize(size);\n }\n return {\n width: viewBox.width,\n height: viewBox.height\n };\n },\n _translate: function (x, y) {\n var viewBox = this._viewBox;\n if (defined(x) && defined(y)) {\n viewBox.x = x;\n viewBox.y = y;\n this.surface.translate({\n x: x,\n y: y\n });\n }\n return {\n x: viewBox.x,\n y: viewBox.y\n };\n },\n draw: function () {\n this.surface.draw(this.drawingElement);\n },\n append: function (visual) {\n this.drawingElement.append(visual.drawingContainer());\n return this;\n },\n remove: function (visual) {\n this.drawingElement.remove(visual.drawingContainer());\n },\n insertBefore: function () {\n },\n clear: function () {\n this.drawingElement.clear();\n },\n destroy: function (clearHtml) {\n this.surface.destroy();\n if (clearHtml) {\n $(this.element).remove();\n }\n }\n });\n function sizeOptionsOrDefault(options) {\n return {\n x: options.x || 0,\n y: options.y || 0,\n width: options.width || 0,\n height: options.height || 0\n };\n }\n function normalizeDrawingOptions(options) {\n if (options) {\n var drawingOptions = options;\n if (isString(drawingOptions)) {\n drawingOptions = { color: drawingOptions };\n }\n if (drawingOptions.color) {\n drawingOptions.color = getColor(drawingOptions.color);\n }\n return drawingOptions;\n }\n }\n function getColor(value) {\n var color;\n if (value != TRANSPARENT) {\n color = new d.Color(value).toHex();\n } else {\n color = value;\n }\n return color;\n }\n function lineAngle(p1, p2) {\n var xDiff = p2.x - p1.x;\n var yDiff = p2.y - p1.y;\n var angle = d.util.deg(Math.atan2(yDiff, xDiff));\n return angle;\n }\n function createSegment(x, y) {\n return new d.Segment(new g.Point(x, y));\n }\n function toDrawingRect(rect) {\n if (rect) {\n return new g.Rect([\n rect.x,\n rect.y\n ], [\n rect.width,\n rect.height\n ]);\n }\n }\n kendo.deepExtend(diagram, {\n init: function (element) {\n kendo.init(element, diagram.ui);\n },\n diffNumericOptions: diffNumericOptions,\n Element: Element,\n Scale: Scale,\n Translation: Translation,\n Rotation: Rotation,\n Circle: Circle,\n Group: Group,\n Rectangle: Rectangle,\n Canvas: Canvas,\n Path: Path,\n Layout: Layout,\n Line: Line,\n MarkerBase: MarkerBase,\n ArrowMarker: ArrowMarker,\n CircleMarker: CircleMarker,\n Polyline: Polyline,\n CompositeTransform: CompositeTransform,\n TextBlock: TextBlock,\n Image: Image,\n VisualBase: VisualBase\n });\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('dataviz/diagram/services', [\n 'kendo.drawing',\n 'dataviz/diagram/svg'\n ], f);\n}(function () {\n (function ($, undefined) {\n var kendo = window.kendo, dataviz = kendo.dataviz, diagram = dataviz.diagram, Class = kendo.Class, Group = diagram.Group, Rect = diagram.Rect, Rectangle = diagram.Rectangle, Utils = diagram.Utils, isUndefined = Utils.isUndefined, Point = diagram.Point, Circle = diagram.Circle, Ticker = diagram.Ticker, deepExtend = kendo.deepExtend, Movable = kendo.ui.Movable, browser = kendo.support.browser, util = kendo.drawing.util, defined = util.defined, inArray = $.inArray, proxy = $.proxy;\n var Cursors = {\n arrow: 'default',\n grip: 'pointer',\n cross: 'pointer',\n add: 'pointer',\n move: 'move',\n select: 'pointer',\n south: 's-resize',\n east: 'e-resize',\n west: 'w-resize',\n north: 'n-resize',\n rowresize: 'row-resize',\n colresize: 'col-resize'\n }, HIT_TEST_DISTANCE = 10, AUTO = 'Auto', TOP = 'Top', RIGHT = 'Right', LEFT = 'Left', BOTTOM = 'Bottom', DEFAULT_SNAP_SIZE = 10, DEFAULT_SNAP_ANGLE = 10, DRAG_START = 'dragStart', DRAG = 'drag', DRAG_END = 'dragEnd', ITEMROTATE = 'itemRotate', ITEMBOUNDSCHANGE = 'itemBoundsChange', MIN_SNAP_SIZE = 5, MIN_SNAP_ANGLE = 5, MOUSE_ENTER = 'mouseEnter', MOUSE_LEAVE = 'mouseLeave', ZOOM_START = 'zoomStart', ZOOM_END = 'zoomEnd', SCROLL_MIN = -20000, SCROLL_MAX = 20000, FRICTION = 0.9, FRICTION_MOBILE = 0.93, VELOCITY_MULTIPLIER = 5, TRANSPARENT = 'transparent', PAN = 'pan', ROTATED = 'rotated', SOURCE = 'source', TARGET = 'target', HANDLE_NAMES = {\n '-1': SOURCE,\n '1': TARGET\n };\n diagram.Cursors = Cursors;\n var PositionAdapter = kendo.Class.extend({\n init: function (layoutState) {\n this.layoutState = layoutState;\n this.diagram = layoutState.diagram;\n },\n initState: function () {\n this.froms = [];\n this.tos = [];\n this.subjects = [];\n function pusher(id, bounds) {\n var shape = this.diagram.getShapeById(id);\n if (shape) {\n this.subjects.push(shape);\n this.froms.push(shape.bounds().topLeft());\n this.tos.push(bounds.topLeft());\n }\n }\n this.layoutState.nodeMap.forEach(pusher, this);\n },\n update: function (tick) {\n if (this.subjects.length <= 0) {\n return;\n }\n for (var i = 0; i < this.subjects.length; i++) {\n this.subjects[i].position(new Point(this.froms[i].x + (this.tos[i].x - this.froms[i].x) * tick, this.froms[i].y + (this.tos[i].y - this.froms[i].y) * tick));\n }\n }\n });\n var LayoutUndoUnit = Class.extend({\n init: function (initialState, finalState, animate) {\n if (isUndefined(animate)) {\n this.animate = false;\n } else {\n this.animate = animate;\n }\n this._initialState = initialState;\n this._finalState = finalState;\n this.title = 'Diagram layout';\n },\n undo: function () {\n this.setState(this._initialState);\n },\n redo: function () {\n this.setState(this._finalState);\n },\n setState: function (state) {\n var diagram = state.diagram;\n if (this.animate) {\n state.linkMap.forEach(function (id, points) {\n var conn = diagram.getShapeById(id);\n conn.visible(false);\n if (conn) {\n conn.points(points);\n }\n });\n var ticker = new Ticker();\n ticker.addAdapter(new PositionAdapter(state));\n ticker.onComplete(function () {\n state.linkMap.forEach(function (id) {\n var conn = diagram.getShapeById(id);\n conn.visible(true);\n });\n });\n ticker.play();\n } else {\n state.nodeMap.forEach(function (id, bounds) {\n var shape = diagram.getShapeById(id);\n if (shape) {\n shape.position(bounds.topLeft());\n }\n });\n state.linkMap.forEach(function (id, points) {\n var conn = diagram.getShapeById(id);\n if (conn) {\n conn.points(points);\n }\n });\n }\n }\n });\n var CompositeUnit = Class.extend({\n init: function (unit) {\n this.units = [];\n this.title = 'Composite unit';\n if (unit !== undefined) {\n this.units.push(unit);\n }\n },\n add: function (undoUnit) {\n this.units.push(undoUnit);\n },\n undo: function () {\n for (var i = 0; i < this.units.length; i++) {\n this.units[i].undo();\n }\n },\n redo: function () {\n for (var i = 0; i < this.units.length; i++) {\n this.units[i].redo();\n }\n }\n });\n var ConnectionEditUnit = Class.extend({\n init: function (item, redoSource, redoTarget) {\n this.item = item;\n this._redoSource = redoSource;\n this._redoTarget = redoTarget;\n if (defined(redoSource)) {\n this._undoSource = item.source();\n }\n if (defined(redoTarget)) {\n this._undoTarget = item.target();\n }\n this.title = 'Connection Editing';\n },\n undo: function () {\n if (this._undoSource !== undefined) {\n this.item._updateConnector(this._undoSource, 'source');\n }\n if (this._undoTarget !== undefined) {\n this.item._updateConnector(this._undoTarget, 'target');\n }\n this.item.updateModel();\n },\n redo: function () {\n if (this._redoSource !== undefined) {\n this.item._updateConnector(this._redoSource, 'source');\n }\n if (this._redoTarget !== undefined) {\n this.item._updateConnector(this._redoTarget, 'target');\n }\n this.item.updateModel();\n }\n });\n var ConnectionEditUndoUnit = Class.extend({\n init: function (item, undoSource, undoTarget) {\n this.item = item;\n this._undoSource = undoSource;\n this._undoTarget = undoTarget;\n this._redoSource = item.source();\n this._redoTarget = item.target();\n this.title = 'Connection Editing';\n },\n undo: function () {\n this.item._updateConnector(this._undoSource, 'source');\n this.item._updateConnector(this._undoTarget, 'target');\n this.item.updateModel();\n },\n redo: function () {\n this.item._updateConnector(this._redoSource, 'source');\n this.item._updateConnector(this._redoTarget, 'target');\n this.item.updateModel();\n }\n });\n var DeleteConnectionUnit = Class.extend({\n init: function (connection) {\n this.connection = connection;\n this.diagram = connection.diagram;\n this.targetConnector = connection.targetConnector;\n this.title = 'Delete connection';\n },\n undo: function () {\n this.diagram._addConnection(this.connection, false);\n },\n redo: function () {\n this.diagram.remove(this.connection, false);\n }\n });\n var DeleteShapeUnit = Class.extend({\n init: function (shape) {\n this.shape = shape;\n this.diagram = shape.diagram;\n this.title = 'Deletion';\n },\n undo: function () {\n this.diagram._addShape(this.shape, false);\n this.shape.select(false);\n },\n redo: function () {\n this.shape.select(false);\n this.diagram.remove(this.shape, false);\n }\n });\n var TransformUnit = Class.extend({\n init: function (shapes, undoStates, adorner) {\n this.shapes = shapes;\n this.undoStates = undoStates;\n this.title = 'Transformation';\n this.redoStates = [];\n this.adorner = adorner;\n for (var i = 0; i < this.shapes.length; i++) {\n var shape = this.shapes[i];\n this.redoStates.push(shape.bounds());\n }\n },\n undo: function () {\n for (var i = 0; i < this.shapes.length; i++) {\n var shape = this.shapes[i];\n shape.bounds(this.undoStates[i]);\n if (shape.hasOwnProperty('layout')) {\n shape.layout(shape, this.redoStates[i], this.undoStates[i]);\n }\n shape.updateModel();\n }\n if (this.adorner) {\n this.adorner.refreshBounds();\n this.adorner.refresh();\n }\n },\n redo: function () {\n for (var i = 0; i < this.shapes.length; i++) {\n var shape = this.shapes[i];\n shape.bounds(this.redoStates[i]);\n if (shape.hasOwnProperty('layout')) {\n shape.layout(shape, this.undoStates[i], this.redoStates[i]);\n }\n shape.updateModel();\n }\n if (this.adorner) {\n this.adorner.refreshBounds();\n this.adorner.refresh();\n }\n }\n });\n var AddConnectionUnit = Class.extend({\n init: function (connection, diagram) {\n this.connection = connection;\n this.diagram = diagram;\n this.title = 'New connection';\n },\n undo: function () {\n this.diagram.remove(this.connection, false);\n },\n redo: function () {\n this.diagram._addConnection(this.connection, false);\n }\n });\n var AddShapeUnit = Class.extend({\n init: function (shape, diagram) {\n this.shape = shape;\n this.diagram = diagram;\n this.title = 'New shape';\n },\n undo: function () {\n this.diagram.deselect();\n this.diagram.remove(this.shape, false);\n },\n redo: function () {\n this.diagram._addShape(this.shape, false);\n }\n });\n var PanUndoUnit = Class.extend({\n init: function (initialPosition, finalPosition, diagram) {\n this.initial = initialPosition;\n this.finalPos = finalPosition;\n this.diagram = diagram;\n this.title = 'Pan Unit';\n },\n undo: function () {\n this.diagram.pan(this.initial);\n },\n redo: function () {\n this.diagram.pan(this.finalPos);\n }\n });\n var RotateUnit = Class.extend({\n init: function (adorner, shapes, undoRotates) {\n this.shapes = shapes;\n this.undoRotates = undoRotates;\n this.title = 'Rotation';\n this.redoRotates = [];\n this.redoAngle = adorner._angle;\n this.adorner = adorner;\n this.center = adorner._innerBounds.center();\n for (var i = 0; i < this.shapes.length; i++) {\n var shape = this.shapes[i];\n this.redoRotates.push(shape.rotate().angle);\n }\n },\n undo: function () {\n var i, shape;\n for (i = 0; i < this.shapes.length; i++) {\n shape = this.shapes[i];\n shape.rotate(this.undoRotates[i], this.center, false);\n if (shape.hasOwnProperty('layout')) {\n shape.layout(shape);\n }\n shape.updateModel();\n }\n if (this.adorner) {\n this.adorner._initialize();\n this.adorner.refresh();\n }\n },\n redo: function () {\n var i, shape;\n for (i = 0; i < this.shapes.length; i++) {\n shape = this.shapes[i];\n shape.rotate(this.redoRotates[i], this.center, false);\n if (shape.hasOwnProperty('layout')) {\n shape.layout(shape);\n }\n shape.updateModel();\n }\n if (this.adorner) {\n this.adorner._initialize();\n this.adorner.refresh();\n }\n }\n });\n var ToFrontUnit = Class.extend({\n init: function (diagram, items, initialIndices) {\n this.diagram = diagram;\n this.indices = initialIndices;\n this.items = items;\n this.title = 'Rotate Unit';\n },\n undo: function () {\n this.diagram._toIndex(this.items, this.indices);\n },\n redo: function () {\n this.diagram.toFront(this.items, false);\n }\n });\n var ToBackUnit = Class.extend({\n init: function (diagram, items, initialIndices) {\n this.diagram = diagram;\n this.indices = initialIndices;\n this.items = items;\n this.title = 'Rotate Unit';\n },\n undo: function () {\n this.diagram._toIndex(this.items, this.indices);\n },\n redo: function () {\n this.diagram.toBack(this.items, false);\n }\n });\n var UndoRedoService = kendo.Observable.extend({\n init: function (options) {\n kendo.Observable.fn.init.call(this, options);\n this.bind(this.events, options);\n this.stack = [];\n this.index = 0;\n this.capacity = 100;\n },\n events: [\n 'undone',\n 'redone'\n ],\n begin: function () {\n this.composite = new CompositeUnit();\n },\n cancel: function () {\n this.composite = undefined;\n },\n commit: function (execute) {\n if (this.composite.units.length > 0) {\n this._restart(this.composite, execute);\n }\n this.composite = undefined;\n },\n addCompositeItem: function (undoUnit) {\n if (this.composite) {\n this.composite.add(undoUnit);\n } else {\n this.add(undoUnit);\n }\n },\n add: function (undoUnit, execute) {\n this._restart(undoUnit, execute);\n },\n pop: function () {\n if (this.index > 0) {\n this.stack.pop();\n this.index--;\n }\n },\n count: function () {\n return this.stack.length;\n },\n undo: function () {\n if (this.index > 0) {\n this.index--;\n this.stack[this.index].undo();\n this.trigger('undone');\n }\n },\n redo: function () {\n if (this.stack.length > 0 && this.index < this.stack.length) {\n this.stack[this.index].redo();\n this.index++;\n this.trigger('redone');\n }\n },\n _restart: function (composite, execute) {\n this.stack.splice(this.index, this.stack.length - this.index);\n this.stack.push(composite);\n if (execute !== false) {\n this.redo();\n } else {\n this.index++;\n }\n if (this.stack.length > this.capacity) {\n this.stack.splice(0, this.stack.length - this.capacity);\n this.index = this.capacity;\n }\n },\n clear: function () {\n this.stack = [];\n this.index = 0;\n }\n });\n var EmptyTool = Class.extend({\n init: function (toolService) {\n this.toolService = toolService;\n },\n start: function () {\n },\n move: function () {\n },\n end: function () {\n },\n tryActivate: function () {\n return false;\n },\n getCursor: function () {\n return Cursors.arrow;\n }\n });\n var ScrollerTool = EmptyTool.extend({\n init: function (toolService) {\n var tool = this;\n var friction = kendo.support.mobileOS ? FRICTION_MOBILE : FRICTION;\n EmptyTool.fn.init.call(tool, toolService);\n var diagram = tool.toolService.diagram, canvas = diagram.canvas;\n var scroller = diagram.scroller = tool.scroller = $(diagram.scrollable).kendoMobileScroller({\n friction: friction,\n velocityMultiplier: VELOCITY_MULTIPLIER,\n mousewheelScrolling: false,\n zoom: false,\n scroll: proxy(tool._move, tool)\n }).data('kendoMobileScroller');\n if (canvas.translate) {\n tool.movableCanvas = new Movable(canvas.element);\n }\n var virtualScroll = function (dimension, min, max) {\n dimension.makeVirtual();\n dimension.virtualSize(min || SCROLL_MIN, max || SCROLL_MAX);\n };\n virtualScroll(scroller.dimensions.x);\n virtualScroll(scroller.dimensions.y);\n scroller.disable();\n },\n tryActivate: function (p, meta) {\n var toolService = this.toolService;\n var options = toolService.diagram.options.pannable;\n var enabled = meta.ctrlKey;\n if (defined(options.key)) {\n if (!options.key || options.key == 'none') {\n enabled = noMeta(meta) && !defined(toolService.hoveredItem);\n } else {\n enabled = meta[options.key + 'Key'];\n }\n }\n return options !== false && enabled && !defined(toolService.hoveredAdorner) && !defined(toolService._hoveredConnector);\n },\n start: function () {\n this.scroller.enable();\n },\n move: function () {\n },\n _move: function (args) {\n var tool = this, diagram = tool.toolService.diagram, canvas = diagram.canvas, scrollPos = new Point(args.scrollLeft, args.scrollTop);\n if (canvas.translate) {\n diagram._storePan(scrollPos.times(-1));\n tool.movableCanvas.moveTo(scrollPos);\n canvas.translate(scrollPos.x, scrollPos.y);\n } else {\n scrollPos = scrollPos.plus(diagram._pan.times(-1));\n }\n diagram.trigger(PAN, { pan: scrollPos });\n },\n end: function () {\n this.scroller.disable();\n },\n getCursor: function () {\n return Cursors.move;\n }\n });\n var PointerTool = Class.extend({\n init: function (toolService) {\n this.toolService = toolService;\n },\n tryActivate: function () {\n return true;\n },\n start: function (p, meta) {\n var toolService = this.toolService, diagram = toolService.diagram, hoveredItem = toolService.hoveredItem;\n if (hoveredItem) {\n toolService.selectSingle(hoveredItem, meta);\n if (hoveredItem.adorner) {\n this.adorner = hoveredItem.adorner;\n this.handle = this.adorner._hitTest(p);\n }\n }\n if (!this.handle) {\n this.handle = diagram._resizingAdorner._hitTest(p);\n if (this.handle) {\n this.adorner = diagram._resizingAdorner;\n }\n }\n if (this.adorner) {\n if (!this.adorner.isDragHandle(this.handle) || !diagram.trigger(DRAG_START, {\n shapes: this.adorner.shapes,\n connections: []\n })) {\n this.adorner.start(p);\n } else {\n toolService.startPoint = p;\n toolService.end(p);\n }\n }\n },\n move: function (p) {\n if (this.adorner) {\n this.adorner.move(this.handle, p);\n if (this.adorner.isDragHandle(this.handle)) {\n this.toolService.diagram.trigger(DRAG, {\n shapes: this.adorner.shapes,\n connections: []\n });\n }\n }\n },\n end: function () {\n var diagram = this.toolService.diagram, adorner = this.adorner, unit;\n if (adorner) {\n if (!adorner.isDragHandle(this.handle) || !diagram.trigger(DRAG_END, {\n shapes: adorner.shapes,\n connections: []\n })) {\n unit = adorner.stop();\n if (unit) {\n diagram.undoRedoService.add(unit, false);\n }\n } else {\n adorner.cancel();\n }\n }\n this.adorner = undefined;\n this.handle = undefined;\n },\n getCursor: function (p) {\n return this.toolService.hoveredItem ? this.toolService.hoveredItem._getCursor(p) : Cursors.arrow;\n }\n });\n var SelectionTool = Class.extend({\n init: function (toolService) {\n this.toolService = toolService;\n },\n tryActivate: function (p, meta) {\n var toolService = this.toolService;\n var selectable = toolService.diagram.options.selectable;\n var enabled = selectable && selectable.multiple !== false;\n if (enabled) {\n if (selectable.key && selectable.key != 'none') {\n enabled = meta[selectable.key + 'Key'];\n } else {\n enabled = noMeta(meta);\n }\n }\n return enabled && !defined(toolService.hoveredItem) && !defined(toolService.hoveredAdorner);\n },\n start: function (p) {\n var diagram = this.toolService.diagram;\n diagram.deselect();\n diagram.selector.start(p);\n },\n move: function (p) {\n var diagram = this.toolService.diagram;\n diagram.selector.move(p);\n },\n end: function (p, meta) {\n var diagram = this.toolService.diagram, hoveredItem = this.toolService.hoveredItem;\n var rect = diagram.selector.bounds();\n if ((!hoveredItem || !hoveredItem.isSelected) && !meta.ctrlKey) {\n diagram.deselect();\n }\n if (!rect.isEmpty()) {\n diagram.selectArea(rect);\n }\n diagram.selector.end();\n },\n getCursor: function () {\n return Cursors.arrow;\n }\n });\n var ConnectionTool = Class.extend({\n init: function (toolService) {\n this.toolService = toolService;\n this.type = 'ConnectionTool';\n },\n tryActivate: function () {\n return this.toolService._hoveredConnector;\n },\n start: function (p, meta) {\n var toolService = this.toolService, diagram = toolService.diagram, connector = toolService._hoveredConnector, connection = diagram._createConnection({}, connector._c, p);\n if (canDrag(connection) && !diagram.trigger(DRAG_START, {\n shapes: [],\n connections: [connection],\n connectionHandle: TARGET\n }) && diagram._addConnection(connection)) {\n toolService._connectionManipulation(connection, connector._c.shape, true);\n toolService._removeHover();\n toolService.selectSingle(toolService.activeConnection, meta);\n if (meta.type == 'touchmove') {\n diagram._cachedTouchTarget = connector.visual;\n }\n } else {\n connection.source(null);\n toolService.end(p);\n }\n },\n move: function (p) {\n var toolService = this.toolService;\n var connection = toolService.activeConnection;\n connection.target(p);\n toolService.diagram.trigger(DRAG, {\n shapes: [],\n connections: [connection],\n connectionHandle: TARGET\n });\n return true;\n },\n end: function (p) {\n var toolService = this.toolService, d = toolService.diagram, connection = toolService.activeConnection, hoveredItem = toolService.hoveredItem, connector = toolService._hoveredConnector, target, cachedTouchTarget = d._cachedTouchTarget;\n if (!connection) {\n return;\n }\n if (connector && connector._c != connection.sourceConnector) {\n target = connector._c;\n } else if (hoveredItem && hoveredItem instanceof diagram.Shape) {\n target = hoveredItem.getConnector(AUTO) || hoveredItem.getConnector(p);\n } else {\n target = p;\n }\n connection.target(target);\n if (!d.trigger(DRAG_END, {\n shapes: [],\n connections: [connection],\n connectionHandle: TARGET\n })) {\n connection.updateModel();\n d._syncConnectionChanges();\n } else {\n d.remove(connection, false);\n d.undoRedoService.pop();\n }\n toolService._connectionManipulation();\n if (cachedTouchTarget) {\n d._connectorsAdorner.visual.remove(cachedTouchTarget);\n d._cachedTouchTarget = null;\n }\n },\n getCursor: function () {\n return Cursors.arrow;\n }\n });\n var ConnectionEditTool = Class.extend({\n init: function (toolService) {\n this.toolService = toolService;\n this.type = 'ConnectionTool';\n },\n tryActivate: function (p, meta) {\n var toolService = this.toolService, diagram = toolService.diagram, selectable = diagram.options.selectable, item = toolService.hoveredItem, isActive = selectable !== false && item && item.path && !(item.isSelected && meta.ctrlKey);\n if (isActive) {\n this._c = item;\n }\n return isActive;\n },\n start: function (p, meta) {\n var toolService = this.toolService;\n var connection = this._c;\n toolService.selectSingle(connection, meta);\n var adorner = connection.adorner;\n var handle, name;\n if (adorner) {\n handle = adorner._hitTest(p);\n name = HANDLE_NAMES[handle];\n }\n if (canDrag(connection) && adorner && !toolService.diagram.trigger(DRAG_START, {\n shapes: [],\n connections: [connection],\n connectionHandle: name\n })) {\n this.handle = handle;\n this.handleName = name;\n adorner.start(p);\n } else {\n toolService.startPoint = p;\n toolService.end(p);\n }\n },\n move: function (p) {\n var adorner = this._c.adorner;\n if (canDrag(this._c) && adorner) {\n adorner.move(this.handle, p);\n this.toolService.diagram.trigger(DRAG, {\n shapes: [],\n connections: [this._c],\n connectionHandle: this.handleName\n });\n return true;\n }\n },\n end: function (p) {\n var connection = this._c;\n var adorner = connection.adorner;\n var toolService = this.toolService;\n var diagram = toolService.diagram;\n if (adorner) {\n if (canDrag(connection)) {\n var unit = adorner.stop(p);\n if (!diagram.trigger(DRAG_END, {\n shapes: [],\n connections: [connection],\n connectionHandle: this.handleName\n })) {\n diagram.undoRedoService.add(unit, false);\n connection.updateModel();\n diagram._syncConnectionChanges();\n } else {\n unit.undo();\n }\n }\n }\n },\n getCursor: function () {\n return Cursors.move;\n }\n });\n function testKey(key, str) {\n return str.charCodeAt(0) == key || str.toUpperCase().charCodeAt(0) == key;\n }\n var ToolService = Class.extend({\n init: function (diagram) {\n this.diagram = diagram;\n this.tools = [\n new ScrollerTool(this),\n new ConnectionEditTool(this),\n new ConnectionTool(this),\n new SelectionTool(this),\n new PointerTool(this)\n ];\n this.activeTool = undefined;\n },\n start: function (p, meta) {\n meta = deepExtend({}, meta);\n if (this.activeTool) {\n this.activeTool.end(p, meta);\n }\n this._updateHoveredItem(p);\n this._activateTool(p, meta);\n this.activeTool.start(p, meta);\n this._updateCursor(p);\n this.diagram.focus();\n this.diagram.canvas.surface.suspendTracking();\n this.startPoint = p;\n return true;\n },\n move: function (p, meta) {\n meta = deepExtend({}, meta);\n var updateHovered = true;\n if (this.activeTool) {\n updateHovered = this.activeTool.move(p, meta);\n }\n if (updateHovered) {\n this._updateHoveredItem(p);\n }\n this._updateCursor(p);\n return true;\n },\n end: function (p, meta) {\n meta = deepExtend({}, meta);\n if (this.activeTool) {\n this.activeTool.end(p, meta);\n }\n this.diagram.canvas.surface.resumeTracking();\n this.activeTool = undefined;\n this._updateCursor(p);\n return true;\n },\n keyDown: function (key, meta) {\n var diagram = this.diagram;\n meta = deepExtend({\n ctrlKey: false,\n metaKey: false,\n altKey: false\n }, meta);\n if ((meta.ctrlKey || meta.metaKey) && !meta.altKey) {\n if (testKey(key, 'a')) {\n diagram.selectAll();\n diagram._destroyToolBar();\n return true;\n } else if (testKey(key, 'z')) {\n diagram.undo();\n diagram._destroyToolBar();\n return true;\n } else if (testKey(key, 'y')) {\n diagram.redo();\n diagram._destroyToolBar();\n return true;\n } else if (testKey(key, 'c')) {\n diagram.copy();\n diagram._destroyToolBar();\n } else if (testKey(key, 'x')) {\n diagram.cut();\n diagram._destroyToolBar();\n } else if (testKey(key, 'v')) {\n diagram.paste();\n diagram._destroyToolBar();\n } else if (testKey(key, 'l')) {\n diagram.layout();\n diagram._destroyToolBar();\n } else if (testKey(key, 'd')) {\n diagram._destroyToolBar();\n diagram.copy();\n diagram.paste();\n }\n } else if (key === 46 || key === 8) {\n var toRemove = this.diagram._triggerRemove(diagram.select());\n if (toRemove.length) {\n this.diagram.remove(toRemove, true);\n this.diagram._syncChanges();\n this.diagram._destroyToolBar();\n }\n return true;\n } else if (key === 27) {\n this._discardNewConnection();\n diagram.deselect();\n diagram._destroyToolBar();\n return true;\n }\n },\n wheel: function (p, meta) {\n var diagram = this.diagram, delta = meta.delta, z = diagram.zoom(), options = diagram.options, zoomRate = options.zoomRate, zoomOptions = {\n point: p,\n meta: meta,\n zoom: z\n };\n if (diagram.trigger(ZOOM_START, zoomOptions)) {\n return;\n }\n if (delta < 0) {\n z += zoomRate;\n } else {\n z -= zoomRate;\n }\n z = kendo.dataviz.round(Math.max(options.zoomMin, Math.min(options.zoomMax, z)), 2);\n zoomOptions.zoom = z;\n diagram.zoom(z, zoomOptions);\n diagram.trigger(ZOOM_END, zoomOptions);\n return true;\n },\n setTool: function (tool, index) {\n tool.toolService = this;\n this.tools[index] = tool;\n },\n selectSingle: function (item, meta) {\n var diagram = this.diagram;\n var selectable = diagram.options.selectable;\n if (selectable && !item.isSelected && item.options.selectable !== false) {\n var addToSelection = meta.ctrlKey && selectable.multiple !== false;\n diagram.select(item, { addToSelection: addToSelection });\n }\n },\n _discardNewConnection: function () {\n if (this.newConnection) {\n this.diagram.remove(this.newConnection);\n this.newConnection = undefined;\n }\n },\n _activateTool: function (p, meta) {\n for (var i = 0; i < this.tools.length; i++) {\n var tool = this.tools[i];\n if (tool.tryActivate(p, meta)) {\n this.activeTool = tool;\n break;\n }\n }\n },\n _updateCursor: function (p) {\n var element = this.diagram.element;\n var cursor = this.activeTool ? this.activeTool.getCursor(p) : this.hoveredAdorner ? this.hoveredAdorner._getCursor(p) : this.hoveredItem ? this.hoveredItem._getCursor(p) : Cursors.arrow;\n element.css({ cursor: cursor });\n if (browser.msie && browser.version == 7) {\n element[0].style.cssText = element[0].style.cssText;\n }\n },\n _connectionManipulation: function (connection, disabledShape, isNew) {\n this.activeConnection = connection;\n this.disabledShape = disabledShape;\n if (isNew) {\n this.newConnection = this.activeConnection;\n } else {\n this.newConnection = undefined;\n }\n },\n _updateHoveredItem: function (p) {\n var hit = this._hitTest(p);\n var diagram = this.diagram;\n if (hit != this.hoveredItem && (!this.disabledShape || hit != this.disabledShape)) {\n if (this.hoveredItem) {\n diagram.trigger(MOUSE_LEAVE, { item: this.hoveredItem });\n this.hoveredItem._hover(false);\n }\n if (hit && hit.options.enable) {\n diagram.trigger(MOUSE_ENTER, { item: hit });\n this.hoveredItem = hit;\n this.hoveredItem._hover(true);\n } else {\n this.hoveredItem = undefined;\n }\n }\n },\n _removeHover: function () {\n if (this.hoveredItem) {\n this.hoveredItem._hover(false);\n this.hoveredItem = undefined;\n }\n },\n _hitTest: function (point) {\n var hit, d = this.diagram, item, i;\n if (this._hoveredConnector) {\n this._hoveredConnector._hover(false);\n this._hoveredConnector = undefined;\n }\n if (d._connectorsAdorner._visible) {\n hit = d._connectorsAdorner._hitTest(point);\n if (hit) {\n return hit;\n }\n }\n hit = this.diagram._resizingAdorner._hitTest(point);\n if (hit) {\n this.hoveredAdorner = d._resizingAdorner;\n if (hit.x !== 0 || hit.y !== 0) {\n return;\n }\n hit = undefined;\n } else {\n this.hoveredAdorner = undefined;\n }\n if (!this.activeTool || this.activeTool.type !== 'ConnectionTool') {\n var selectedConnections = [];\n for (i = 0; i < d._selectedItems.length; i++) {\n item = d._selectedItems[i];\n if (item instanceof diagram.Connection) {\n selectedConnections.push(item);\n }\n }\n hit = this._hitTestItems(selectedConnections, point);\n }\n return hit || this._hitTestElements(point);\n },\n _hitTestElements: function (point) {\n var diagram = this.diagram;\n var shapeHit = this._hitTestItems(diagram.shapes, point);\n var connectionHit = this._hitTestItems(diagram.connections, point);\n var hit;\n if ((!this.activeTool || this.activeTool.type != 'ConnectionTool') && shapeHit && connectionHit && !hitTestShapeConnectors(shapeHit, point)) {\n var mainLayer = diagram.mainLayer;\n var shapeIdx = inArray(shapeHit.visual, mainLayer.children);\n var connectionIdx = inArray(connectionHit.visual, mainLayer.children);\n hit = shapeIdx > connectionIdx ? shapeHit : connectionHit;\n }\n return hit || shapeHit || connectionHit;\n },\n _hitTestItems: function (array, point) {\n var i, item, hit;\n for (i = array.length - 1; i >= 0; i--) {\n item = array[i];\n hit = item._hitTest(point);\n if (hit) {\n return hit;\n }\n }\n }\n });\n var ConnectionRouterBase = kendo.Class.extend({\n init: function () {\n }\n });\n var LinearConnectionRouter = ConnectionRouterBase.extend({\n init: function (connection) {\n var that = this;\n ConnectionRouterBase.fn.init.call(that);\n this.connection = connection;\n },\n hitTest: function (p) {\n var rec = this.getBounds().inflate(HIT_TEST_DISTANCE);\n if (!rec.contains(p)) {\n return false;\n }\n return diagram.Geometry.distanceToPolyline(p, this.connection.allPoints()) < HIT_TEST_DISTANCE;\n },\n getBounds: function () {\n var points = this.connection.allPoints(), s = points[0], e = points[points.length - 1], right = Math.max(s.x, e.x), left = Math.min(s.x, e.x), top = Math.min(s.y, e.y), bottom = Math.max(s.y, e.y);\n for (var i = 1; i < points.length - 1; ++i) {\n right = Math.max(right, points[i].x);\n left = Math.min(left, points[i].x);\n top = Math.min(top, points[i].y);\n bottom = Math.max(bottom, points[i].y);\n }\n return new Rect(left, top, right - left, bottom - top);\n }\n });\n var PolylineRouter = LinearConnectionRouter.extend({\n init: function (connection) {\n var that = this;\n LinearConnectionRouter.fn.init.call(that);\n this.connection = connection;\n },\n route: function () {\n }\n });\n var CascadingRouter = LinearConnectionRouter.extend({\n SAME_SIDE_DISTANCE_RATIO: 5,\n init: function (connection) {\n var that = this;\n LinearConnectionRouter.fn.init.call(that);\n this.connection = connection;\n },\n routePoints: function (start, end, sourceConnector, targetConnector) {\n var result;\n if (sourceConnector && targetConnector) {\n result = this._connectorPoints(start, end, sourceConnector, targetConnector);\n } else {\n result = this._floatingPoints(start, end, sourceConnector);\n }\n return result;\n },\n route: function () {\n var sourceConnector = this.connection._resolvedSourceConnector;\n var targetConnector = this.connection._resolvedTargetConnector;\n var start = this.connection.sourcePoint();\n var end = this.connection.targetPoint();\n var points = this.routePoints(start, end, sourceConnector, targetConnector);\n this.connection.points(points);\n },\n _connectorSides: [\n {\n name: 'Top',\n axis: 'y',\n boundsPoint: 'topLeft',\n secondarySign: 1\n },\n {\n name: 'Left',\n axis: 'x',\n boundsPoint: 'topLeft',\n secondarySign: 1\n },\n {\n name: 'Bottom',\n axis: 'y',\n boundsPoint: 'bottomRight',\n secondarySign: -1\n },\n {\n name: 'Right',\n axis: 'x',\n boundsPoint: 'bottomRight',\n secondarySign: -1\n }\n ],\n _connectorSide: function (connector, targetPoint) {\n var position = connector.position();\n var shapeBounds = connector.shape.bounds(ROTATED);\n var bounds = {\n topLeft: shapeBounds.topLeft(),\n bottomRight: shapeBounds.bottomRight()\n };\n var sides = this._connectorSides;\n var min = util.MAX_NUM;\n var sideDistance;\n var minSide;\n var axis;\n var side;\n for (var idx = 0; idx < sides.length; idx++) {\n side = sides[idx];\n axis = side.axis;\n sideDistance = Math.round(Math.abs(position[axis] - bounds[side.boundsPoint][axis]));\n if (sideDistance < min) {\n min = sideDistance;\n minSide = side;\n } else if (sideDistance === min && (position[axis] - targetPoint[axis]) * side.secondarySign > (position[minSide.axis] - targetPoint[minSide.axis]) * minSide.secondarySign) {\n minSide = side;\n }\n }\n return minSide.name;\n },\n _sameSideDistance: function (connector) {\n var bounds = connector.shape.bounds(ROTATED);\n return Math.min(bounds.width, bounds.height) / this.SAME_SIDE_DISTANCE_RATIO;\n },\n _connectorPoints: function (start, end, sourceConnector, targetConnector) {\n var sourceConnectorSide = this._connectorSide(sourceConnector, end);\n var targetConnectorSide = this._connectorSide(targetConnector, start);\n var deltaX = end.x - start.x;\n var deltaY = end.y - start.y;\n var sameSideDistance = this._sameSideDistance(sourceConnector);\n var result = [];\n var pointX, pointY;\n if (sourceConnectorSide === TOP || sourceConnectorSide == BOTTOM) {\n if (targetConnectorSide == TOP || targetConnectorSide == BOTTOM) {\n if (sourceConnectorSide == targetConnectorSide) {\n if (sourceConnectorSide == TOP) {\n pointY = Math.min(start.y, end.y) - sameSideDistance;\n } else {\n pointY = Math.max(start.y, end.y) + sameSideDistance;\n }\n result = [\n new Point(start.x, pointY),\n new Point(end.x, pointY)\n ];\n } else {\n result = [\n new Point(start.x, start.y + deltaY / 2),\n new Point(end.x, start.y + deltaY / 2)\n ];\n }\n } else {\n result = [new Point(start.x, end.y)];\n }\n } else {\n if (targetConnectorSide == LEFT || targetConnectorSide == RIGHT) {\n if (sourceConnectorSide == targetConnectorSide) {\n if (sourceConnectorSide == LEFT) {\n pointX = Math.min(start.x, end.x) - sameSideDistance;\n } else {\n pointX = Math.max(start.x, end.x) + sameSideDistance;\n }\n result = [\n new Point(pointX, start.y),\n new Point(pointX, end.y)\n ];\n } else {\n result = [\n new Point(start.x + deltaX / 2, start.y),\n new Point(start.x + deltaX / 2, start.y + deltaY)\n ];\n }\n } else {\n result = [new Point(end.x, start.y)];\n }\n }\n return result;\n },\n _floatingPoints: function (start, end, sourceConnector) {\n var sourceConnectorSide = sourceConnector ? this._connectorSide(sourceConnector, end) : null;\n var cascadeStartHorizontal = this._startHorizontal(start, end, sourceConnectorSide);\n var points = [\n start,\n start,\n end,\n end\n ];\n var deltaX = end.x - start.x;\n var deltaY = end.y - start.y;\n var length = points.length;\n var shiftX;\n var shiftY;\n for (var idx = 1; idx < length - 1; ++idx) {\n if (cascadeStartHorizontal) {\n if (idx % 2 !== 0) {\n shiftX = deltaX / (length / 2);\n shiftY = 0;\n } else {\n shiftX = 0;\n shiftY = deltaY / ((length - 1) / 2);\n }\n } else {\n if (idx % 2 !== 0) {\n shiftX = 0;\n shiftY = deltaY / (length / 2);\n } else {\n shiftX = deltaX / ((length - 1) / 2);\n shiftY = 0;\n }\n }\n points[idx] = new Point(points[idx - 1].x + shiftX, points[idx - 1].y + shiftY);\n }\n idx--;\n if (cascadeStartHorizontal && idx % 2 !== 0 || !cascadeStartHorizontal && idx % 2 === 0) {\n points[length - 2] = new Point(points[length - 1].x, points[length - 2].y);\n } else {\n points[length - 2] = new Point(points[length - 2].x, points[length - 1].y);\n }\n return [\n points[1],\n points[2]\n ];\n },\n _startHorizontal: function (start, end, sourceSide) {\n var horizontal;\n if (sourceSide !== null && (sourceSide === RIGHT || sourceSide === LEFT)) {\n horizontal = true;\n } else {\n horizontal = Math.abs(start.x - end.x) > Math.abs(start.y - end.y);\n }\n return horizontal;\n }\n });\n var AdornerBase = Class.extend({\n init: function (diagram, options) {\n var that = this;\n that.diagram = diagram;\n that.options = deepExtend({}, that.options, options);\n that.visual = new Group();\n that.diagram._adorners.push(that);\n },\n refresh: function () {\n }\n });\n var ConnectionEditAdorner = AdornerBase.extend({\n init: function (connection, options) {\n var that = this, diagram;\n that.connection = connection;\n diagram = that.connection.diagram;\n that._ts = diagram.toolService;\n AdornerBase.fn.init.call(that, diagram, options);\n var sp = that.connection.sourcePoint();\n var tp = that.connection.targetPoint();\n that.spVisual = new Circle(deepExtend(that.options.handles, { center: sp }));\n that.epVisual = new Circle(deepExtend(that.options.handles, { center: tp }));\n that.visual.append(that.spVisual);\n that.visual.append(that.epVisual);\n },\n options: { handles: {} },\n _getCursor: function () {\n return Cursors.move;\n },\n start: function (p) {\n this.handle = this._hitTest(p);\n this.startPoint = p;\n this._initialSource = this.connection.source();\n this._initialTarget = this.connection.target();\n switch (this.handle) {\n case -1:\n if (this.connection.targetConnector) {\n this._ts._connectionManipulation(this.connection, this.connection.targetConnector.shape);\n }\n break;\n case 1:\n if (this.connection.sourceConnector) {\n this._ts._connectionManipulation(this.connection, this.connection.sourceConnector.shape);\n }\n break;\n }\n },\n move: function (handle, p) {\n switch (handle) {\n case -1:\n this.connection.source(p);\n break;\n case 1:\n this.connection.target(p);\n break;\n default:\n var delta = p.minus(this.startPoint);\n this.startPoint = p;\n if (!this.connection.sourceConnector) {\n this.connection.source(this.connection.sourcePoint().plus(delta));\n }\n if (!this.connection.targetConnector) {\n this.connection.target(this.connection.targetPoint().plus(delta));\n }\n break;\n }\n this.refresh();\n return true;\n },\n stop: function (p) {\n var ts = this.diagram.toolService, item = ts.hoveredItem, target;\n if (ts._hoveredConnector) {\n target = ts._hoveredConnector._c;\n } else if (item && item instanceof diagram.Shape) {\n target = item.getConnector(AUTO) || item.getConnector(p);\n } else {\n target = p;\n }\n if (this.handle === -1) {\n this.connection.source(target);\n } else if (this.handle === 1) {\n this.connection.target(target);\n }\n this.handle = undefined;\n this._ts._connectionManipulation();\n return new ConnectionEditUndoUnit(this.connection, this._initialSource, this._initialTarget);\n },\n _hitTest: function (point) {\n var sourcePoint = this.connection.sourcePoint();\n var targetPoint = this.connection.targetPoint();\n var radiusX = this.options.handles.width / 2 + HIT_TEST_DISTANCE;\n var radiusY = this.options.handles.height / 2 + HIT_TEST_DISTANCE;\n var sourcePointDistance = sourcePoint.distanceTo(point);\n var targetPointDistance = targetPoint.distanceTo(point);\n var sourceHandle = new Rect(sourcePoint.x, sourcePoint.y).inflate(radiusX, radiusY).contains(point);\n var targetHandle = new Rect(targetPoint.x, targetPoint.y).inflate(radiusX, radiusY).contains(point);\n var handle = 0;\n if (sourceHandle && (!targetHandle || sourcePointDistance < targetPointDistance)) {\n handle = -1;\n } else if (targetHandle && (!sourceHandle || targetPointDistance < sourcePointDistance)) {\n handle = 1;\n }\n return handle;\n },\n refresh: function () {\n this.spVisual.redraw({ center: this.diagram.modelToLayer(this.connection.sourcePoint()) });\n this.epVisual.redraw({ center: this.diagram.modelToLayer(this.connection.targetPoint()) });\n }\n });\n var ConnectorsAdorner = AdornerBase.extend({\n init: function (diagram, options) {\n var that = this;\n AdornerBase.fn.init.call(that, diagram, options);\n that._refreshHandler = function (e) {\n if (e.item == that.shape) {\n that.refresh();\n }\n };\n },\n show: function (shape) {\n var that = this, len, i, ctr;\n that._visible = true;\n that.shape = shape;\n that.diagram.bind(ITEMBOUNDSCHANGE, that._refreshHandler);\n len = shape.connectors.length;\n that.connectors = [];\n that._clearVisual();\n for (i = 0; i < len; i++) {\n ctr = new ConnectorVisual(shape.connectors[i]);\n that.connectors.push(ctr);\n that.visual.append(ctr.visual);\n }\n that.visual.visible(true);\n that.refresh();\n },\n _clearVisual: function () {\n var that = this;\n if (that.diagram._cachedTouchTarget) {\n that._keepCachedTouchTarget();\n } else {\n that.visual.clear();\n }\n },\n _keepCachedTouchTarget: function () {\n var that = this, visualChildren = that.visual.children;\n var childrenCount = visualChildren.length;\n var index = inArray(that.diagram._cachedTouchTarget, visualChildren);\n for (var i = childrenCount - 1; i >= 0; i--) {\n if (i == index) {\n continue;\n }\n that.visual.remove(visualChildren[i]);\n }\n },\n destroy: function () {\n var that = this;\n that.diagram.unbind(ITEMBOUNDSCHANGE, that._refreshHandler);\n that.shape = undefined;\n that._visible = undefined;\n that.visual.visible(false);\n },\n _hitTest: function (p) {\n var ctr, i;\n for (i = 0; i < this.connectors.length; i++) {\n ctr = this.connectors[i];\n if (ctr._hitTest(p)) {\n ctr._hover(true);\n this.diagram.toolService._hoveredConnector = ctr;\n break;\n }\n }\n },\n refresh: function () {\n if (this.shape) {\n var bounds = this.shape.bounds();\n bounds = this.diagram.modelToLayer(bounds);\n this.visual.position(bounds.topLeft());\n $.each(this.connectors, function () {\n this.refresh();\n });\n }\n }\n });\n function hitToOppositeSide(hit, bounds) {\n var result;\n if (hit.x == -1 && hit.y == -1) {\n result = bounds.bottomRight();\n } else if (hit.x == 1 && hit.y == 1) {\n result = bounds.topLeft();\n } else if (hit.x == -1 && hit.y == 1) {\n result = bounds.topRight();\n } else if (hit.x == 1 && hit.y == -1) {\n result = bounds.bottomLeft();\n } else if (hit.x === 0 && hit.y == -1) {\n result = bounds.bottom();\n } else if (hit.x === 0 && hit.y == 1) {\n result = bounds.top();\n } else if (hit.x == 1 && hit.y === 0) {\n result = bounds.left();\n } else if (hit.x == -1 && hit.y === 0) {\n result = bounds.right();\n }\n return result;\n }\n var ResizingAdorner = AdornerBase.extend({\n init: function (diagram, options) {\n var that = this;\n AdornerBase.fn.init.call(that, diagram, options);\n that._manipulating = false;\n that.map = [];\n that.shapes = [];\n that._initSelection();\n that._createHandles();\n that.redraw();\n that.diagram.bind('select', function (e) {\n that._initialize(e.selected);\n });\n that._refreshHandler = function () {\n if (!that._internalChange) {\n that.refreshBounds();\n that.refresh();\n }\n };\n that._rotatedHandler = function () {\n if (that.shapes.length == 1) {\n that._angle = that.shapes[0].rotate().angle;\n }\n that._refreshHandler();\n };\n that.diagram.bind(ITEMBOUNDSCHANGE, that._refreshHandler).bind(ITEMROTATE, that._rotatedHandler);\n that.refreshBounds();\n that.refresh();\n },\n options: {\n handles: {\n fill: { color: '#fff' },\n stroke: { color: '#282828' },\n height: 7,\n width: 7,\n hover: {\n fill: { color: '#282828' },\n stroke: { color: '#282828' }\n }\n },\n selectable: {\n stroke: {\n color: '#778899',\n width: 1,\n dashType: 'dash'\n },\n fill: { color: TRANSPARENT }\n },\n offset: 10\n },\n _initSelection: function () {\n var that = this;\n var diagram = that.diagram;\n var selectable = diagram.options.selectable;\n var options = deepExtend({}, that.options.selectable, selectable);\n that.rect = new Rectangle(options);\n that.visual.append(that.rect);\n },\n _resizable: function () {\n return this.options.editable && this.options.editable.resize !== false;\n },\n _handleOptions: function () {\n return (this.options.editable.resize || {}).handles || this.options.handles;\n },\n _createHandles: function () {\n var handles, item, y, x;\n if (this._resizable()) {\n handles = this._handleOptions();\n for (x = -1; x <= 1; x++) {\n for (y = -1; y <= 1; y++) {\n if (x !== 0 || y !== 0) {\n item = new Rectangle(handles);\n item.drawingElement._hover = proxy(this._hover, this);\n this.map.push({\n x: x,\n y: y,\n visual: item\n });\n this.visual.append(item);\n }\n }\n }\n }\n },\n bounds: function (value) {\n if (value) {\n this._innerBounds = value.clone();\n this._bounds = this.diagram.modelToLayer(value).inflate(this.options.offset, this.options.offset);\n } else {\n return this._bounds;\n }\n },\n _hitTest: function (p) {\n var tp = this.diagram.modelToLayer(p), i, hit, handleBounds, handlesCount = this.map.length, handle;\n if (this._angle) {\n tp = tp.clone().rotate(this._bounds.center(), this._angle);\n }\n if (this._resizable()) {\n for (i = 0; i < handlesCount; i++) {\n handle = this.map[i];\n hit = new Point(handle.x, handle.y);\n handleBounds = this._getHandleBounds(hit);\n handleBounds.offset(this._bounds.x, this._bounds.y);\n if (handleBounds.contains(tp)) {\n return hit;\n }\n }\n }\n if (this._bounds.contains(tp)) {\n return new Point(0, 0);\n }\n },\n _getHandleBounds: function (p) {\n if (this._resizable()) {\n var handles = this._handleOptions(), w = handles.width, h = handles.height, r = new Rect(0, 0, w, h);\n if (p.x < 0) {\n r.x = -w / 2;\n } else if (p.x === 0) {\n r.x = Math.floor(this._bounds.width / 2) - w / 2;\n } else if (p.x > 0) {\n r.x = this._bounds.width + 1 - w / 2;\n }\n if (p.y < 0) {\n r.y = -h / 2;\n } else if (p.y === 0) {\n r.y = Math.floor(this._bounds.height / 2) - h / 2;\n } else if (p.y > 0) {\n r.y = this._bounds.height + 1 - h / 2;\n }\n return r;\n }\n },\n _getCursor: function (point) {\n var hit = this._hitTest(point);\n if (hit && hit.x >= -1 && hit.x <= 1 && hit.y >= -1 && hit.y <= 1 && this._resizable()) {\n var angle = this._angle;\n if (angle) {\n angle = 360 - angle;\n hit.rotate(new Point(0, 0), angle);\n hit = new Point(Math.round(hit.x), Math.round(hit.y));\n }\n if (hit.x == -1 && hit.y == -1) {\n return 'nw-resize';\n }\n if (hit.x == 1 && hit.y == 1) {\n return 'se-resize';\n }\n if (hit.x == -1 && hit.y == 1) {\n return 'sw-resize';\n }\n if (hit.x == 1 && hit.y == -1) {\n return 'ne-resize';\n }\n if (hit.x === 0 && hit.y == -1) {\n return 'n-resize';\n }\n if (hit.x === 0 && hit.y == 1) {\n return 's-resize';\n }\n if (hit.x == 1 && hit.y === 0) {\n return 'e-resize';\n }\n if (hit.x == -1 && hit.y === 0) {\n return 'w-resize';\n }\n }\n return this._manipulating ? Cursors.move : Cursors.select;\n },\n _initialize: function () {\n var that = this, i, item, items = that.diagram.select();\n that.shapes = [];\n for (i = 0; i < items.length; i++) {\n item = items[i];\n if (item instanceof diagram.Shape) {\n that.shapes.push(item);\n item._rotationOffset = new Point();\n }\n }\n that._angle = that.shapes.length == 1 ? that.shapes[0].rotate().angle : 0;\n that._startAngle = that._angle;\n that._rotates();\n that._positions();\n that.refreshBounds();\n that.refresh();\n that.redraw();\n },\n _rotates: function () {\n var that = this, i, shape;\n that.initialRotates = [];\n for (i = 0; i < that.shapes.length; i++) {\n shape = that.shapes[i];\n that.initialRotates.push(shape.rotate().angle);\n }\n },\n _positions: function () {\n var that = this, i, shape;\n that.initialStates = [];\n for (i = 0; i < that.shapes.length; i++) {\n shape = that.shapes[i];\n that.initialStates.push(shape.bounds());\n }\n },\n _hover: function (value, element) {\n if (this._resizable()) {\n var handleOptions = this._handleOptions(), hover = handleOptions.hover, stroke = handleOptions.stroke, fill = handleOptions.fill;\n if (value && Utils.isDefined(hover.stroke)) {\n stroke = deepExtend({}, stroke, hover.stroke);\n }\n if (value && Utils.isDefined(hover.fill)) {\n fill = hover.fill;\n }\n element.stroke(stroke.color, stroke.width, stroke.opacity);\n element.fill(fill.color, fill.opacity);\n }\n },\n start: function (p) {\n this._sp = p;\n this._cp = p;\n this._lp = p;\n this._manipulating = true;\n this._internalChange = true;\n this.shapeStates = [];\n for (var i = 0; i < this.shapes.length; i++) {\n var shape = this.shapes[i];\n this.shapeStates.push(shape.bounds());\n }\n },\n redraw: function () {\n var i, handle, visibleHandles = this._resizable();\n for (i = 0; i < this.map.length; i++) {\n handle = this.map[i];\n handle.visual.visible(visibleHandles);\n }\n },\n angle: function (value) {\n if (defined(value)) {\n this._angle = value;\n }\n return this._angle;\n },\n rotate: function () {\n var center = this._innerBounds.center();\n var currentAngle = this.angle();\n this._internalChange = true;\n for (var i = 0; i < this.shapes.length; i++) {\n var shape = this.shapes[i];\n currentAngle = (currentAngle + this.initialRotates[i] - this._startAngle) % 360;\n shape.rotate(currentAngle, center);\n }\n this.refresh();\n },\n move: function (handle, p) {\n var delta, dragging, dtl = new Point(), dbr = new Point(), bounds, center, shape, i, angle, newBounds, changed = 0, staticPoint, scaleX, scaleY;\n if (handle.y === -2 && handle.x === -1) {\n center = this._innerBounds.center();\n this._angle = this._truncateAngle(Utils.findAngle(center, p));\n for (i = 0; i < this.shapes.length; i++) {\n shape = this.shapes[i];\n angle = (this._angle + this.initialRotates[i] - this._startAngle) % 360;\n shape.rotate(angle, center);\n if (shape.hasOwnProperty('layout')) {\n shape.layout(shape);\n }\n this._rotating = true;\n }\n this.refresh();\n } else {\n if (this.shouldSnap()) {\n var thr = this._truncateDistance(p.minus(this._lp));\n if (thr.x === 0 && thr.y === 0) {\n this._cp = p;\n return;\n }\n delta = thr;\n this._lp = new Point(this._lp.x + thr.x, this._lp.y + thr.y);\n } else {\n delta = p.minus(this._cp);\n }\n if (this.isDragHandle(handle)) {\n dbr = dtl = delta;\n dragging = true;\n } else {\n if (this._angle) {\n delta.rotate(new Point(0, 0), this._angle);\n }\n if (handle.x == -1) {\n dtl.x = delta.x;\n } else if (handle.x == 1) {\n dbr.x = delta.x;\n }\n if (handle.y == -1) {\n dtl.y = delta.y;\n } else if (handle.y == 1) {\n dbr.y = delta.y;\n }\n }\n if (!dragging) {\n staticPoint = hitToOppositeSide(handle, this._innerBounds);\n scaleX = (this._innerBounds.width + delta.x * handle.x) / this._innerBounds.width;\n scaleY = (this._innerBounds.height + delta.y * handle.y) / this._innerBounds.height;\n }\n for (i = 0; i < this.shapes.length; i++) {\n shape = this.shapes[i];\n bounds = shape.bounds();\n if (dragging) {\n if (!canDrag(shape)) {\n continue;\n }\n newBounds = this._displaceBounds(bounds, dtl, dbr, dragging);\n } else {\n newBounds = bounds.clone();\n newBounds.scale(scaleX, scaleY, staticPoint, this._innerBounds.center(), shape.rotate().angle);\n var newCenter = newBounds.center();\n newCenter.rotate(bounds.center(), -this._angle);\n newBounds = new Rect(newCenter.x - newBounds.width / 2, newCenter.y - newBounds.height / 2, newBounds.width, newBounds.height);\n }\n if (newBounds.width >= shape.options.minWidth && newBounds.height >= shape.options.minHeight) {\n var oldBounds = bounds;\n shape.bounds(newBounds);\n if (shape.hasOwnProperty('layout')) {\n shape.layout(shape, oldBounds, newBounds);\n }\n if (oldBounds.width !== newBounds.width || oldBounds.height !== newBounds.height) {\n shape.rotate(shape.rotate().angle);\n }\n changed += 1;\n }\n }\n if (changed) {\n if (changed == i) {\n newBounds = this._displaceBounds(this._innerBounds, dtl, dbr, dragging);\n this.bounds(newBounds);\n } else {\n this.refreshBounds();\n }\n this.refresh();\n }\n this._positions();\n }\n this._cp = p;\n },\n isDragHandle: function (handle) {\n return handle.x === 0 && handle.y === 0;\n },\n cancel: function () {\n var shapes = this.shapes;\n var states = this.shapeStates;\n for (var idx = 0; idx < shapes.length; idx++) {\n shapes[idx].bounds(states[idx]);\n }\n this.refreshBounds();\n this.refresh();\n this._manipulating = undefined;\n this._internalChange = undefined;\n this._rotating = undefined;\n },\n _truncatePositionToGuides: function (bounds) {\n if (this.diagram.ruler) {\n return this.diagram.ruler.truncatePositionToGuides(bounds);\n }\n return bounds;\n },\n _truncateSizeToGuides: function (bounds) {\n if (this.diagram.ruler) {\n return this.diagram.ruler.truncateSizeToGuides(bounds);\n }\n return bounds;\n },\n _truncateAngle: function (a) {\n var snap = this.snapOptions();\n var snapAngle = Math.max(snap.angle || DEFAULT_SNAP_ANGLE, MIN_SNAP_ANGLE);\n return snap ? Math.floor(a % 360 / snapAngle) * snapAngle : a % 360;\n },\n _truncateDistance: function (d) {\n if (d instanceof diagram.Point) {\n return new diagram.Point(this._truncateDistance(d.x), this._truncateDistance(d.y));\n } else {\n var snap = this.snapOptions() || {};\n var snapSize = Math.max(snap.size || DEFAULT_SNAP_SIZE, MIN_SNAP_SIZE);\n return snap ? Math.floor(d / snapSize) * snapSize : d;\n }\n },\n snapOptions: function () {\n var editable = this.diagram.options.editable;\n var snap = ((editable || {}).drag || {}).snap || {};\n return snap;\n },\n shouldSnap: function () {\n var editable = this.diagram.options.editable;\n var drag = (editable || {}).drag;\n var snap = (drag || {}).snap;\n return editable !== false && drag !== false && snap !== false;\n },\n _displaceBounds: function (bounds, dtl, dbr, dragging) {\n var tl = bounds.topLeft().plus(dtl), br = bounds.bottomRight().plus(dbr), newBounds = Rect.fromPoints(tl, br), newCenter;\n if (!dragging) {\n newCenter = newBounds.center();\n newCenter.rotate(bounds.center(), -this._angle);\n newBounds = new Rect(newCenter.x - newBounds.width / 2, newCenter.y - newBounds.height / 2, newBounds.width, newBounds.height);\n }\n return newBounds;\n },\n stop: function () {\n var unit, i, shape;\n if (this._cp != this._sp) {\n if (this._rotating) {\n unit = new RotateUnit(this, this.shapes, this.initialRotates);\n this._rotating = false;\n } else if (this._diffStates()) {\n if (this.diagram.ruler) {\n for (i = 0; i < this.shapes.length; i++) {\n shape = this.shapes[i];\n var bounds = shape.bounds();\n bounds = this._truncateSizeToGuides(this._truncatePositionToGuides(bounds));\n shape.bounds(bounds);\n this.refreshBounds();\n this.refresh();\n }\n }\n for (i = 0; i < this.shapes.length; i++) {\n shape = this.shapes[i];\n shape.updateModel();\n }\n unit = new TransformUnit(this.shapes, this.shapeStates, this);\n this.diagram._syncShapeChanges();\n }\n }\n this._manipulating = undefined;\n this._internalChange = undefined;\n this._rotating = undefined;\n return unit;\n },\n _diffStates: function () {\n var shapes = this.shapes;\n var states = this.shapeStates;\n for (var idx = 0; idx < shapes.length; idx++) {\n if (!shapes[idx].bounds().equals(states[idx])) {\n return true;\n }\n }\n return false;\n },\n refreshBounds: function () {\n var bounds = this.shapes.length == 1 ? this.shapes[0].bounds().clone() : this.diagram.boundingBox(this.shapes, true);\n this.bounds(bounds);\n },\n refresh: function () {\n var that = this, b, bounds;\n if (this.shapes.length > 0) {\n bounds = this.bounds();\n this.visual.visible(true);\n this.visual.position(bounds.topLeft());\n $.each(this.map, function () {\n b = that._getHandleBounds(new Point(this.x, this.y));\n this.visual.position(b.topLeft());\n });\n this.visual.position(bounds.topLeft());\n var center = new Point(bounds.width / 2, bounds.height / 2);\n this.visual.rotate(this._angle, center);\n this.rect.redraw({\n width: bounds.width,\n height: bounds.height\n });\n if (this.rotationThumb) {\n var thumb = this.options.editable.rotate.thumb;\n this._rotationThumbBounds = new Rect(bounds.center().x, bounds.y + thumb.y, 0, 0).inflate(thumb.width);\n this.rotationThumb.redraw({ x: bounds.width / 2 - thumb.width / 2 });\n }\n } else {\n this.visual.visible(false);\n }\n }\n });\n var Selector = Class.extend({\n init: function (diagram) {\n var selectable = diagram.options.selectable;\n this.options = deepExtend({}, this.options, selectable);\n this.visual = new Rectangle(this.options);\n this.diagram = diagram;\n },\n options: {\n stroke: {\n color: '#778899',\n width: 1,\n dashType: 'dash'\n },\n fill: { color: TRANSPARENT }\n },\n start: function (p) {\n this._sp = this._ep = p;\n this.refresh();\n this.diagram._adorn(this, true);\n },\n end: function () {\n this._sp = this._ep = undefined;\n this.diagram._adorn(this, false);\n },\n bounds: function (value) {\n if (value) {\n this._bounds = value;\n }\n return this._bounds;\n },\n move: function (p) {\n this._ep = p;\n this.refresh();\n },\n refresh: function () {\n if (this._sp) {\n var visualBounds = Rect.fromPoints(this.diagram.modelToLayer(this._sp), this.diagram.modelToLayer(this._ep));\n this.bounds(Rect.fromPoints(this._sp, this._ep));\n this.visual.position(visualBounds.topLeft());\n this.visual.redraw({\n height: visualBounds.height + 1,\n width: visualBounds.width + 1\n });\n }\n }\n });\n var ConnectorVisual = Class.extend({\n init: function (connector) {\n this.options = deepExtend({}, connector.options);\n this._c = connector;\n this.visual = new Circle(this.options);\n this.refresh();\n },\n _hover: function (value) {\n var options = this.options, hover = options.hover, stroke = options.stroke, fill = options.fill;\n if (value && Utils.isDefined(hover.stroke)) {\n stroke = deepExtend({}, stroke, hover.stroke);\n }\n if (value && Utils.isDefined(hover.fill)) {\n fill = hover.fill;\n }\n this.visual.redraw({\n stroke: stroke,\n fill: fill\n });\n },\n refresh: function () {\n var p = this._c.shape.diagram.modelToView(this._c.position()), relative = p.minus(this._c.shape.bounds('transformed').topLeft()), value = new Rect(p.x, p.y, 0, 0);\n value.inflate(this.options.width / 2, this.options.height / 2);\n this._visualBounds = value;\n this.visual.redraw({ center: new Point(relative.x, relative.y) });\n },\n _hitTest: function (p) {\n var tp = this._c.shape.diagram.modelToView(p);\n return this._visualBounds.contains(tp);\n }\n });\n function canDrag(element) {\n var editable = element.options.editable;\n return editable && editable.drag !== false;\n }\n function hitTestShapeConnectors(shape, point) {\n var connector, position, rect;\n for (var idx = 0; idx < shape.connectors.length; idx++) {\n connector = shape.connectors[idx];\n position = connector.position();\n rect = new Rect(position.x, position.y);\n rect.inflate(HIT_TEST_DISTANCE, HIT_TEST_DISTANCE);\n if (rect.contains(point)) {\n return connector;\n }\n }\n }\n function noMeta(meta) {\n return meta.ctrlKey === false && meta.altKey === false && meta.shiftKey === false;\n }\n deepExtend(diagram, {\n CompositeUnit: CompositeUnit,\n TransformUnit: TransformUnit,\n PanUndoUnit: PanUndoUnit,\n AddShapeUnit: AddShapeUnit,\n AddConnectionUnit: AddConnectionUnit,\n DeleteShapeUnit: DeleteShapeUnit,\n DeleteConnectionUnit: DeleteConnectionUnit,\n ConnectionEditAdorner: ConnectionEditAdorner,\n ConnectionTool: ConnectionTool,\n ConnectorVisual: ConnectorVisual,\n UndoRedoService: UndoRedoService,\n ResizingAdorner: ResizingAdorner,\n Selector: Selector,\n ToolService: ToolService,\n ConnectorsAdorner: ConnectorsAdorner,\n LayoutUndoUnit: LayoutUndoUnit,\n ConnectionEditUnit: ConnectionEditUnit,\n ToFrontUnit: ToFrontUnit,\n ToBackUnit: ToBackUnit,\n ConnectionRouterBase: ConnectionRouterBase,\n PolylineRouter: PolylineRouter,\n CascadingRouter: CascadingRouter,\n SelectionTool: SelectionTool,\n ScrollerTool: ScrollerTool,\n PointerTool: PointerTool,\n ConnectionEditTool: ConnectionEditTool,\n RotateUnit: RotateUnit\n });\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('dataviz/diagram/layout', ['dataviz/diagram/math'], f);\n}(function () {\n (function ($, undefined) {\n var kendo = window.kendo, diagram = kendo.dataviz.diagram, Graph = diagram.Graph, Node = diagram.Node, Link = diagram.Link, deepExtend = kendo.deepExtend, Size = diagram.Size, Rect = diagram.Rect, Dictionary = diagram.Dictionary, Set = diagram.Set, HyperTree = diagram.Graph, Utils = diagram.Utils, Point = diagram.Point, EPSILON = 0.000001, DEG_TO_RAD = Math.PI / 180, contains = Utils.contains, grep = $.grep;\n var LayoutBase = kendo.Class.extend({\n defaultOptions: {\n type: 'Tree',\n subtype: 'Down',\n roots: null,\n animate: false,\n limitToView: false,\n friction: 0.9,\n nodeDistance: 50,\n iterations: 300,\n horizontalSeparation: 90,\n verticalSeparation: 50,\n underneathVerticalTopOffset: 15,\n underneathHorizontalOffset: 15,\n underneathVerticalSeparation: 15,\n grid: {\n width: 1500,\n offsetX: 50,\n offsetY: 50,\n componentSpacingX: 20,\n componentSpacingY: 20\n },\n layerSeparation: 50,\n layeredIterations: 2,\n startRadialAngle: 0,\n endRadialAngle: 360,\n radialSeparation: 150,\n radialFirstLevelSeparation: 200,\n keepComponentsInOneRadialLayout: false,\n ignoreContainers: true,\n layoutContainerChildren: false,\n ignoreInvisible: true,\n animateTransitions: false\n },\n init: function () {\n },\n gridLayoutComponents: function (components) {\n if (!components) {\n throw 'No components supplied.';\n }\n Utils.forEach(components, function (c) {\n c.calcBounds();\n });\n components.sort(function (a, b) {\n return b.bounds.width - a.bounds.width;\n });\n var maxWidth = this.options.grid.width, offsetX = this.options.grid.componentSpacingX, offsetY = this.options.grid.componentSpacingY, height = 0, startX = this.options.grid.offsetX, startY = this.options.grid.offsetY, x = startX, y = startY, i, resultLinkSet = [], resultNodeSet = [];\n while (components.length > 0) {\n if (x >= maxWidth) {\n x = startX;\n y += height + offsetY;\n height = 0;\n }\n var component = components.pop();\n this.moveToOffset(component, new Point(x, y));\n for (i = 0; i < component.nodes.length; i++) {\n resultNodeSet.push(component.nodes[i]);\n }\n for (i = 0; i < component.links.length; i++) {\n resultLinkSet.push(component.links[i]);\n }\n var boundingRect = component.bounds;\n var currentHeight = boundingRect.height;\n if (currentHeight <= 0 || isNaN(currentHeight)) {\n currentHeight = 0;\n }\n var currentWidth = boundingRect.width;\n if (currentWidth <= 0 || isNaN(currentWidth)) {\n currentWidth = 0;\n }\n if (currentHeight >= height) {\n height = currentHeight;\n }\n x += currentWidth + offsetX;\n }\n return {\n nodes: resultNodeSet,\n links: resultLinkSet\n };\n },\n moveToOffset: function (component, p) {\n var i, j, bounds = component.bounds, deltax = p.x - bounds.x, deltay = p.y - bounds.y;\n for (i = 0; i < component.nodes.length; i++) {\n var node = component.nodes[i];\n var nodeBounds = node.bounds();\n if (nodeBounds.width === 0 && nodeBounds.height === 0 && nodeBounds.x === 0 && nodeBounds.y === 0) {\n nodeBounds = new Rect(0, 0, 0, 0);\n }\n nodeBounds.x += deltax;\n nodeBounds.y += deltay;\n node.bounds(nodeBounds);\n }\n for (i = 0; i < component.links.length; i++) {\n var link = component.links[i];\n if (link.points) {\n var newpoints = [];\n var points = link.points;\n for (j = 0; j < points.length; j++) {\n var pt = points[j];\n pt.x += deltax;\n pt.y += deltay;\n newpoints.push(pt);\n }\n link.points = newpoints;\n }\n }\n this.currentHorizontalOffset += bounds.width + this.options.grid.offsetX;\n return new Point(deltax, deltay);\n },\n transferOptions: function (options) {\n this.options = kendo.deepExtend({}, this.defaultOptions);\n if (Utils.isUndefined(options)) {\n return;\n }\n this.options = kendo.deepExtend(this.options, options || {});\n }\n });\n var DiagramToHyperTreeAdapter = kendo.Class.extend({\n init: function (diagram) {\n this.nodeMap = new Dictionary();\n this.shapeMap = new Dictionary();\n this.nodes = [];\n this.edges = [];\n this.edgeMap = new Dictionary();\n this.finalNodes = [];\n this.finalLinks = [];\n this.ignoredConnections = [];\n this.ignoredShapes = [];\n this.hyperMap = new Dictionary();\n this.hyperTree = new Graph();\n this.finalGraph = null;\n this.diagram = diagram;\n },\n convert: function (options) {\n if (Utils.isUndefined(this.diagram)) {\n throw 'No diagram to convert.';\n }\n this.options = kendo.deepExtend({\n ignoreInvisible: true,\n ignoreContainers: true,\n layoutContainerChildren: false\n }, options || {});\n this.clear();\n this._renormalizeShapes();\n this._renormalizeConnections();\n this.finalNodes = new Dictionary(this.nodes);\n this.finalLinks = new Dictionary(this.edges);\n this.finalGraph = new Graph();\n this.finalNodes.forEach(function (n) {\n this.finalGraph.addNode(n);\n }, this);\n this.finalLinks.forEach(function (l) {\n this.finalGraph.addExistingLink(l);\n }, this);\n return this.finalGraph;\n },\n mapConnection: function (connection) {\n return this.edgeMap.get(connection.id);\n },\n mapShape: function (shape) {\n return this.nodeMap.get(shape.id);\n },\n getEdge: function (a, b) {\n return Utils.first(a.links, function (link) {\n return link.getComplement(a) === b;\n });\n },\n clear: function () {\n this.finalGraph = null;\n this.hyperTree = !this.options.ignoreContainers && this.options.layoutContainerChildren ? new HyperTree() : null;\n this.hyperMap = !this.options.ignoreContainers && this.options.layoutContainerChildren ? new Dictionary() : null;\n this.nodeMap = new Dictionary();\n this.shapeMap = new Dictionary();\n this.nodes = [];\n this.edges = [];\n this.edgeMap = new Dictionary();\n this.ignoredConnections = [];\n this.ignoredShapes = [];\n this.finalNodes = [];\n this.finalLinks = [];\n },\n listToRoot: function (containerGraph) {\n var list = [];\n var s = containerGraph.container;\n if (!s) {\n return list;\n }\n list.push(s);\n while (s.parentContainer) {\n s = s.parentContainer;\n list.push(s);\n }\n list.reverse();\n return list;\n },\n firstNonIgnorableContainer: function (shape) {\n if (shape.isContainer && !this._isIgnorableItem(shape)) {\n return shape;\n }\n return !shape.parentContainer ? null : this.firstNonIgnorableContainer(shape.parentContainer);\n },\n isContainerConnection: function (a, b) {\n if (a.isContainer && this.isDescendantOf(a, b)) {\n return true;\n }\n return b.isContainer && this.isDescendantOf(b, a);\n },\n isDescendantOf: function (scope, a) {\n if (!scope.isContainer) {\n throw 'Expecting a container.';\n }\n if (scope === a) {\n return false;\n }\n if (contains(scope.children, a)) {\n return true;\n }\n var containers = [];\n for (var i = 0, len = scope.children.length; i < len; i++) {\n var c = scope.children[i];\n if (c.isContainer && this.isDescendantOf(c, a)) {\n containers.push(c);\n }\n }\n return containers.length > 0;\n },\n isIgnorableItem: function (shape) {\n if (this.options.ignoreInvisible) {\n if (shape.isCollapsed && this._isVisible(shape)) {\n return false;\n }\n if (!shape.isCollapsed && this._isVisible(shape)) {\n return false;\n }\n return true;\n } else {\n return shape.isCollapsed && !this._isTop(shape);\n }\n },\n isShapeMapped: function (shape) {\n return shape.isCollapsed && !this._isVisible(shape) && !this._isTop(shape);\n },\n leastCommonAncestor: function (a, b) {\n if (!a) {\n throw 'Parameter should not be null.';\n }\n if (!b) {\n throw 'Parameter should not be null.';\n }\n if (!this.hyperTree) {\n throw 'No hypertree available.';\n }\n var al = this.listToRoot(a);\n var bl = this.listToRoot(b);\n var found = null;\n if (Utils.isEmpty(al) || Utils.isEmpty(bl)) {\n return this.hyperTree.root.data;\n }\n var xa = al[0];\n var xb = bl[0];\n var i = 0;\n while (xa === xb) {\n found = al[i];\n i++;\n if (i >= al.length || i >= bl.length) {\n break;\n }\n xa = al[i];\n xb = bl[i];\n }\n if (!found) {\n return this.hyperTree.root.data;\n } else {\n return grep(this.hyperTree.nodes, function (n) {\n return n.data.container === found;\n });\n }\n },\n _isTop: function (item) {\n return !item.parentContainer;\n },\n _isVisible: function (shape) {\n if (!shape.visible()) {\n return false;\n }\n return !shape.parentContainer ? shape.visible() : this._isVisible(shape.parentContainer);\n },\n _isCollapsed: function (shape) {\n if (shape.isContainer && shape.isCollapsed) {\n return true;\n }\n return shape.parentContainer && this._isCollapsed(shape.parentContainer);\n },\n _renormalizeShapes: function () {\n if (this.options.ignoreContainers) {\n for (var i = 0, len = this.diagram.shapes.length; i < len; i++) {\n var shape = this.diagram.shapes[i];\n if (this.options.ignoreInvisible && !this._isVisible(shape) || shape.isContainer) {\n this.ignoredShapes.push(shape);\n continue;\n }\n var node = new Node(shape.id, shape);\n node.isVirtual = false;\n this.nodeMap.add(shape.id, node);\n this.nodes.push(node);\n }\n } else {\n throw 'Containers are not supported yet, but stay tuned.';\n }\n },\n _renormalizeConnections: function () {\n if (this.diagram.connections.length === 0) {\n return;\n }\n for (var i = 0, len = this.diagram.connections.length; i < len; i++) {\n var conn = this.diagram.connections[i];\n if (this.isIgnorableItem(conn)) {\n this.ignoredConnections.push(conn);\n continue;\n }\n var source = !conn.sourceConnector ? null : conn.sourceConnector.shape;\n var sink = !conn.targetConnector ? null : conn.targetConnector.shape;\n if (!source || !sink) {\n this.ignoredConnections.push(conn);\n continue;\n }\n if (contains(this.ignoredShapes, source) && !this.shapeMap.containsKey(source)) {\n this.ignoredConnections.push(conn);\n continue;\n }\n if (contains(this.ignoredShapes, sink) && !this.shapeMap.containsKey(sink)) {\n this.ignoredConnections.push(conn);\n continue;\n }\n if (this.shapeMap.containsKey(source)) {\n source = this.shapeMap[source];\n }\n if (this.shapeMap.containsKey(sink)) {\n sink = this.shapeMap[sink];\n }\n var sourceNode = this.mapShape(source);\n var sinkNode = this.mapShape(sink);\n if (sourceNode === sinkNode || this.areConnectedAlready(sourceNode, sinkNode)) {\n this.ignoredConnections.push(conn);\n continue;\n }\n if (sourceNode === null || sinkNode === null) {\n throw 'A shape was not mapped to a node.';\n }\n if (this.options.ignoreContainers) {\n if (sourceNode.isVirtual || sinkNode.isVirtual) {\n this.ignoredConnections.push(conn);\n continue;\n }\n var newEdge = new Link(sourceNode, sinkNode, conn.id, conn);\n this.edgeMap.add(conn.id, newEdge);\n this.edges.push(newEdge);\n } else {\n throw 'Containers are not supported yet, but stay tuned.';\n }\n }\n },\n areConnectedAlready: function (n, m) {\n return Utils.any(this.edges, function (l) {\n return l.source === n && l.target === m || l.source === m && l.target === n;\n });\n }\n });\n var SpringLayout = LayoutBase.extend({\n init: function (diagram) {\n var that = this;\n LayoutBase.fn.init.call(that);\n if (Utils.isUndefined(diagram)) {\n throw 'Diagram is not specified.';\n }\n this.diagram = diagram;\n },\n layout: function (options) {\n this.transferOptions(options);\n var adapter = new DiagramToHyperTreeAdapter(this.diagram);\n var graph = adapter.convert(options);\n if (graph.isEmpty()) {\n return;\n }\n var components = graph.getConnectedComponents();\n if (Utils.isEmpty(components)) {\n return;\n }\n for (var i = 0; i < components.length; i++) {\n var component = components[i];\n this.layoutGraph(component, options);\n }\n var finalNodeSet = this.gridLayoutComponents(components);\n return new diagram.LayoutState(this.diagram, finalNodeSet);\n },\n layoutGraph: function (graph, options) {\n if (Utils.isDefined(options)) {\n this.transferOptions(options);\n }\n this.graph = graph;\n var initialTemperature = this.options.nodeDistance * 9;\n this.temperature = initialTemperature;\n var guessBounds = this._expectedBounds();\n this.width = guessBounds.width;\n this.height = guessBounds.height;\n for (var step = 0; step < this.options.iterations; step++) {\n this.refineStage = step >= this.options.iterations * 5 / 6;\n this.tick();\n this.temperature = this.refineStage ? initialTemperature / 30 : initialTemperature * (1 - step / (2 * this.options.iterations));\n }\n },\n tick: function () {\n var i;\n for (i = 0; i < this.graph.nodes.length; i++) {\n this._repulsion(this.graph.nodes[i]);\n }\n for (i = 0; i < this.graph.links.length; i++) {\n this._attraction(this.graph.links[i]);\n }\n for (i = 0; i < this.graph.nodes.length; i++) {\n var node = this.graph.nodes[i];\n var offset = Math.sqrt(node.dx * node.dx + node.dy * node.dy);\n if (offset === 0) {\n return;\n }\n node.x += Math.min(offset, this.temperature) * node.dx / offset;\n node.y += Math.min(offset, this.temperature) * node.dy / offset;\n if (this.options.limitToView) {\n node.x = Math.min(this.width, Math.max(node.width / 2, node.x));\n node.y = Math.min(this.height, Math.max(node.height / 2, node.y));\n }\n }\n },\n _shake: function (node) {\n var rho = Math.random() * this.options.nodeDistance / 4;\n var alpha = Math.random() * 2 * Math.PI;\n node.x += rho * Math.cos(alpha);\n node.y -= rho * Math.sin(alpha);\n },\n _InverseSquareForce: function (d, n, m) {\n var force;\n if (!this.refineStage) {\n force = Math.pow(d, 2) / Math.pow(this.options.nodeDistance, 2);\n } else {\n var deltax = n.x - m.x;\n var deltay = n.y - m.y;\n var wn = n.width / 2;\n var hn = n.height / 2;\n var wm = m.width / 2;\n var hm = m.height / 2;\n force = Math.pow(deltax, 2) / Math.pow(wn + wm + this.options.nodeDistance, 2) + Math.pow(deltay, 2) / Math.pow(hn + hm + this.options.nodeDistance, 2);\n }\n return force * 4 / 3;\n },\n _SquareForce: function (d, n, m) {\n return 1 / this._InverseSquareForce(d, n, m);\n },\n _repulsion: function (n) {\n n.dx = 0;\n n.dy = 0;\n Utils.forEach(this.graph.nodes, function (m) {\n if (m === n) {\n return;\n }\n while (n.x === m.x && n.y === m.y) {\n this._shake(m);\n }\n var vx = n.x - m.x;\n var vy = n.y - m.y;\n var distance = Math.sqrt(vx * vx + vy * vy);\n var r = this._SquareForce(distance, n, m) * 2;\n n.dx += vx / distance * r;\n n.dy += vy / distance * r;\n }, this);\n },\n _attraction: function (link) {\n var t = link.target;\n var s = link.source;\n if (s === t) {\n return;\n }\n while (s.x === t.x && s.y === t.y) {\n this._shake(t);\n }\n var vx = s.x - t.x;\n var vy = s.y - t.y;\n var distance = Math.sqrt(vx * vx + vy * vy);\n var a = this._InverseSquareForce(distance, s, t) * 5;\n var dx = vx / distance * a;\n var dy = vy / distance * a;\n t.dx += dx;\n t.dy += dy;\n s.dx -= dx;\n s.dy -= dy;\n },\n _expectedBounds: function () {\n var size, N = this.graph.nodes.length, ratio = 1.5, multiplier = 4;\n if (N === 0) {\n return size;\n }\n size = Utils.fold(this.graph.nodes, function (s, node) {\n var area = node.width * node.height;\n if (area > 0) {\n s += Math.sqrt(area);\n return s;\n }\n return 0;\n }, 0, this);\n var av = size / N;\n var squareSize = av * Math.ceil(Math.sqrt(N));\n var width = squareSize * Math.sqrt(ratio);\n var height = squareSize / Math.sqrt(ratio);\n return {\n width: width * multiplier,\n height: height * multiplier\n };\n }\n });\n var TreeLayoutProcessor = kendo.Class.extend({\n init: function (options) {\n this.center = null;\n this.options = options;\n },\n layout: function (treeGraph, root) {\n this.graph = treeGraph;\n if (!this.graph.nodes || this.graph.nodes.length === 0) {\n return;\n }\n if (!contains(this.graph.nodes, root)) {\n throw 'The given root is not in the graph.';\n }\n this.center = root;\n this.graph.cacheRelationships();\n this.layoutSwitch();\n },\n layoutLeft: function (left) {\n this.setChildrenDirection(this.center, 'Left', false);\n this.setChildrenLayout(this.center, 'Default', false);\n var h = 0, w = 0, y, i, node;\n for (i = 0; i < left.length; i++) {\n node = left[i];\n node.TreeDirection = 'Left';\n var s = this.measure(node, Size.Empty);\n w = Math.max(w, s.Width);\n h += s.height + this.options.verticalSeparation;\n }\n h -= this.options.verticalSeparation;\n var x = this.center.x - this.options.horizontalSeparation;\n y = this.center.y + (this.center.height - h) / 2;\n for (i = 0; i < left.length; i++) {\n node = left[i];\n var p = new Point(x - node.Size.width, y);\n this.arrange(node, p);\n y += node.Size.height + this.options.verticalSeparation;\n }\n },\n layoutRight: function (right) {\n this.setChildrenDirection(this.center, 'Right', false);\n this.setChildrenLayout(this.center, 'Default', false);\n var h = 0, w = 0, y, i, node;\n for (i = 0; i < right.length; i++) {\n node = right[i];\n node.TreeDirection = 'Right';\n var s = this.measure(node, Size.Empty);\n w = Math.max(w, s.Width);\n h += s.height + this.options.verticalSeparation;\n }\n h -= this.options.verticalSeparation;\n var x = this.center.x + this.options.horizontalSeparation + this.center.width;\n y = this.center.y + (this.center.height - h) / 2;\n for (i = 0; i < right.length; i++) {\n node = right[i];\n var p = new Point(x, y);\n this.arrange(node, p);\n y += node.Size.height + this.options.verticalSeparation;\n }\n },\n layoutUp: function (up) {\n this.setChildrenDirection(this.center, 'Up', false);\n this.setChildrenLayout(this.center, 'Default', false);\n var w = 0, y, node, i;\n for (i = 0; i < up.length; i++) {\n node = up[i];\n node.TreeDirection = 'Up';\n var s = this.measure(node, Size.Empty);\n w += s.width + this.options.horizontalSeparation;\n }\n w -= this.options.horizontalSeparation;\n var x = this.center.x + this.center.width / 2 - w / 2;\n for (i = 0; i < up.length; i++) {\n node = up[i];\n y = this.center.y - this.options.verticalSeparation - node.Size.height;\n var p = new Point(x, y);\n this.arrange(node, p);\n x += node.Size.width + this.options.horizontalSeparation;\n }\n },\n layoutDown: function (down) {\n var node, i;\n this.setChildrenDirection(this.center, 'Down', false);\n this.setChildrenLayout(this.center, 'Default', false);\n var w = 0, y;\n for (i = 0; i < down.length; i++) {\n node = down[i];\n node.treeDirection = 'Down';\n var s = this.measure(node, Size.Empty);\n w += s.width + this.options.horizontalSeparation;\n }\n w -= this.options.horizontalSeparation;\n var x = this.center.x + this.center.width / 2 - w / 2;\n y = this.center.y + this.options.verticalSeparation + this.center.height;\n for (i = 0; i < down.length; i++) {\n node = down[i];\n var p = new Point(x, y);\n this.arrange(node, p);\n x += node.Size.width + this.options.horizontalSeparation;\n }\n },\n layoutRadialTree: function () {\n this.setChildrenDirection(this.center, 'Radial', false);\n this.setChildrenLayout(this.center, 'Default', false);\n this.previousRoot = null;\n var startAngle = this.options.startRadialAngle * DEG_TO_RAD;\n var endAngle = this.options.endRadialAngle * DEG_TO_RAD;\n if (endAngle <= startAngle) {\n throw 'Final angle should not be less than the start angle.';\n }\n this.maxDepth = 0;\n this.origin = new Point(this.center.x, this.center.y);\n this.calculateAngularWidth(this.center, 0);\n if (this.maxDepth > 0) {\n this.radialLayout(this.center, this.options.radialFirstLevelSeparation, startAngle, endAngle);\n }\n this.center.Angle = endAngle - startAngle;\n },\n tipOverTree: function (down, startFromLevel) {\n if (Utils.isUndefined(startFromLevel)) {\n startFromLevel = 0;\n }\n this.setChildrenDirection(this.center, 'Down', false);\n this.setChildrenLayout(this.center, 'Default', false);\n this.setChildrenLayout(this.center, 'Underneath', false, startFromLevel);\n var w = 0, y, node, i;\n for (i = 0; i < down.length; i++) {\n node = down[i];\n node.TreeDirection = 'Down';\n var s = this.measure(node, Size.Empty);\n w += s.width + this.options.horizontalSeparation;\n }\n w -= this.options.horizontalSeparation;\n w -= down[down.length - 1].width;\n w += down[down.length - 1].associatedShape.bounds().width;\n var x = this.center.x + this.center.width / 2 - w / 2;\n y = this.center.y + this.options.verticalSeparation + this.center.height;\n for (i = 0; i < down.length; i++) {\n node = down[i];\n var p = new Point(x, y);\n this.arrange(node, p);\n x += node.Size.width + this.options.horizontalSeparation;\n }\n },\n calculateAngularWidth: function (n, d) {\n if (d > this.maxDepth) {\n this.maxDepth = d;\n }\n var aw = 0, w = 1000, h = 1000, diameter = d === 0 ? 0 : Math.sqrt(w * w + h * h) / d;\n if (n.children.length > 0) {\n for (var i = 0, len = n.children.length; i < len; i++) {\n var child = n.children[i];\n aw += this.calculateAngularWidth(child, d + 1);\n }\n aw = Math.max(diameter, aw);\n } else {\n aw = diameter;\n }\n n.sectorAngle = aw;\n return aw;\n },\n sortChildren: function (n) {\n var basevalue = 0, i;\n if (n.parents.length > 1) {\n throw 'Node is not part of a tree.';\n }\n var p = n.parents[0];\n if (p) {\n var pl = new Point(p.x, p.y);\n var nl = new Point(n.x, n.y);\n basevalue = this.normalizeAngle(Math.atan2(pl.y - nl.y, pl.x - nl.x));\n }\n var count = n.children.length;\n if (count === 0) {\n return null;\n }\n var angle = [];\n var idx = [];\n for (i = 0; i < count; ++i) {\n var c = n.children[i];\n var l = new Point(c.x, c.y);\n idx[i] = i;\n angle[i] = this.normalizeAngle(-basevalue + Math.atan2(l.y - l.y, l.x - l.x));\n }\n Utils.bisort(angle, idx);\n var col = [];\n var children = n.children;\n for (i = 0; i < count; ++i) {\n col.push(children[idx[i]]);\n }\n return col;\n },\n normalizeAngle: function (angle) {\n while (angle > Math.PI * 2) {\n angle -= 2 * Math.PI;\n }\n while (angle < 0) {\n angle += Math.PI * 2;\n }\n return angle;\n },\n radialLayout: function (node, radius, startAngle, endAngle) {\n var deltaTheta = endAngle - startAngle;\n var deltaThetaHalf = deltaTheta / 2;\n var parentSector = node.sectorAngle;\n var fraction = 0;\n var sorted = this.sortChildren(node);\n for (var i = 0, len = sorted.length; i < len; i++) {\n var childNode = sorted[i];\n var cp = childNode;\n var childAngleFraction = cp.sectorAngle / parentSector;\n if (childNode.children.length > 0) {\n this.radialLayout(childNode, radius + this.options.radialSeparation, startAngle + fraction * deltaTheta, startAngle + (fraction + childAngleFraction) * deltaTheta);\n }\n this.setPolarLocation(childNode, radius, startAngle + fraction * deltaTheta + childAngleFraction * deltaThetaHalf);\n cp.angle = childAngleFraction * deltaTheta;\n fraction += childAngleFraction;\n }\n },\n setPolarLocation: function (node, radius, angle) {\n node.x = this.origin.x + radius * Math.cos(angle);\n node.y = this.origin.y + radius * Math.sin(angle);\n node.BoundingRectangle = new Rect(node.x, node.y, node.width, node.height);\n },\n setChildrenDirection: function (node, direction, includeStart) {\n var rootDirection = node.treeDirection;\n this.graph.depthFirstTraversal(node, function (n) {\n n.treeDirection = direction;\n });\n if (!includeStart) {\n node.treeDirection = rootDirection;\n }\n },\n setChildrenLayout: function (node, layout, includeStart, startFromLevel) {\n if (Utils.isUndefined(startFromLevel)) {\n startFromLevel = 0;\n }\n var rootLayout = node.childrenLayout;\n if (startFromLevel > 0) {\n this.graph.assignLevels(node);\n this.graph.depthFirstTraversal(node, function (s) {\n if (s.level >= startFromLevel + 1) {\n s.childrenLayout = layout;\n }\n });\n } else {\n this.graph.depthFirstTraversal(node, function (s) {\n s.childrenLayout = layout;\n });\n if (!includeStart) {\n node.childrenLayout = rootLayout;\n }\n }\n },\n measure: function (node, givenSize) {\n var w = 0, h = 0, s;\n var result = new Size(0, 0);\n if (!node) {\n throw '';\n }\n var b = node.associatedShape.bounds();\n var shapeWidth = b.width;\n var shapeHeight = b.height;\n if (node.parents.length !== 1) {\n throw 'Node not in a spanning tree.';\n }\n var parent = node.parents[0];\n if (node.treeDirection === 'Undefined') {\n node.treeDirection = parent.treeDirection;\n }\n if (Utils.isEmpty(node.children)) {\n result = new Size(Math.abs(shapeWidth) < EPSILON ? 50 : shapeWidth, Math.abs(shapeHeight) < EPSILON ? 25 : shapeHeight);\n } else if (node.children.length === 1) {\n switch (node.treeDirection) {\n case 'Radial':\n s = this.measure(node.children[0], givenSize);\n w = shapeWidth + this.options.radialSeparation * Math.cos(node.AngleToParent) + s.width;\n h = shapeHeight + Math.abs(this.options.radialSeparation * Math.sin(node.AngleToParent)) + s.height;\n break;\n case 'Left':\n case 'Right':\n switch (node.childrenLayout) {\n case 'TopAlignedWithParent':\n break;\n case 'BottomAlignedWithParent':\n break;\n case 'Underneath':\n s = this.measure(node.children[0], givenSize);\n w = shapeWidth + s.width + this.options.underneathHorizontalOffset;\n h = shapeHeight + this.options.underneathVerticalTopOffset + s.height;\n break;\n case 'Default':\n s = this.measure(node.children[0], givenSize);\n w = shapeWidth + this.options.horizontalSeparation + s.width;\n h = Math.max(shapeHeight, s.height);\n break;\n default:\n throw 'Unhandled TreeDirection in the Radial layout measuring.';\n }\n break;\n case 'Up':\n case 'Down':\n switch (node.childrenLayout) {\n case 'TopAlignedWithParent':\n case 'BottomAlignedWithParent':\n break;\n case 'Underneath':\n s = this.measure(node.children[0], givenSize);\n w = Math.max(shapeWidth, s.width + this.options.underneathHorizontalOffset);\n h = shapeHeight + this.options.underneathVerticalTopOffset + s.height;\n break;\n case 'Default':\n s = this.measure(node.children[0], givenSize);\n h = shapeHeight + this.options.verticalSeparation + s.height;\n w = Math.max(shapeWidth, s.width);\n break;\n default:\n throw 'Unhandled TreeDirection in the Down layout measuring.';\n }\n break;\n default:\n throw 'Unhandled TreeDirection in the layout measuring.';\n }\n result = new Size(w, h);\n } else {\n var i, childNode;\n switch (node.treeDirection) {\n case 'Left':\n case 'Right':\n switch (node.childrenLayout) {\n case 'TopAlignedWithParent':\n case 'BottomAlignedWithParent':\n break;\n case 'Underneath':\n w = shapeWidth;\n h = shapeHeight + this.options.underneathVerticalTopOffset;\n for (i = 0; i < node.children.length; i++) {\n childNode = node.children[i];\n s = this.measure(childNode, givenSize);\n w = Math.max(w, s.width + this.options.underneathHorizontalOffset);\n h += s.height + this.options.underneathVerticalSeparation;\n }\n h -= this.options.underneathVerticalSeparation;\n break;\n case 'Default':\n w = shapeWidth;\n h = 0;\n for (i = 0; i < node.children.length; i++) {\n childNode = node.children[i];\n s = this.measure(childNode, givenSize);\n w = Math.max(w, shapeWidth + this.options.horizontalSeparation + s.width);\n h += s.height + this.options.verticalSeparation;\n }\n h -= this.options.verticalSeparation;\n break;\n default:\n throw 'Unhandled TreeDirection in the Right layout measuring.';\n }\n break;\n case 'Up':\n case 'Down':\n switch (node.childrenLayout) {\n case 'TopAlignedWithParent':\n case 'BottomAlignedWithParent':\n break;\n case 'Underneath':\n w = shapeWidth;\n h = shapeHeight + this.options.underneathVerticalTopOffset;\n for (i = 0; i < node.children.length; i++) {\n childNode = node.children[i];\n s = this.measure(childNode, givenSize);\n w = Math.max(w, s.width + this.options.underneathHorizontalOffset);\n h += s.height + this.options.underneathVerticalSeparation;\n }\n h -= this.options.underneathVerticalSeparation;\n break;\n case 'Default':\n w = 0;\n h = 0;\n for (i = 0; i < node.children.length; i++) {\n childNode = node.children[i];\n s = this.measure(childNode, givenSize);\n w += s.width + this.options.horizontalSeparation;\n h = Math.max(h, s.height + this.options.verticalSeparation + shapeHeight);\n }\n w -= this.options.horizontalSeparation;\n break;\n default:\n throw 'Unhandled TreeDirection in the Down layout measuring.';\n }\n break;\n default:\n throw 'Unhandled TreeDirection in the layout measuring.';\n }\n result = new Size(w, h);\n }\n node.SectorAngle = Math.sqrt(w * w / 4 + h * h / 4);\n node.Size = result;\n return result;\n },\n arrange: function (n, p) {\n var i, pp, child, node, childrenwidth, b = n.associatedShape.bounds();\n var shapeWidth = b.width;\n var shapeHeight = b.height;\n if (Utils.isEmpty(n.children)) {\n n.x = p.x;\n n.y = p.y;\n n.BoundingRectangle = new Rect(p.x, p.y, shapeWidth, shapeHeight);\n } else {\n var x, y;\n var selfLocation;\n switch (n.treeDirection) {\n case 'Left':\n switch (n.childrenLayout) {\n case 'TopAlignedWithParent':\n case 'BottomAlignedWithParent':\n break;\n case 'Underneath':\n selfLocation = p;\n n.x = selfLocation.x;\n n.y = selfLocation.y;\n n.BoundingRectangle = new Rect(n.x, n.y, n.width, n.height);\n y = p.y + shapeHeight + this.options.underneathVerticalTopOffset;\n for (i = 0; i < node.children.length; i++) {\n node = node.children[i];\n x = selfLocation.x - node.associatedShape.width - this.options.underneathHorizontalOffset;\n pp = new Point(x, y);\n this.arrange(node, pp);\n y += node.Size.height + this.options.underneathVerticalSeparation;\n }\n break;\n case 'Default':\n selfLocation = new Point(p.x + n.Size.width - shapeWidth, p.y + (n.Size.height - shapeHeight) / 2);\n n.x = selfLocation.x;\n n.y = selfLocation.y;\n n.BoundingRectangle = new Rect(n.x, n.y, n.width, n.height);\n x = selfLocation.x - this.options.horizontalSeparation;\n y = p.y;\n for (i = 0; i < n.children.length; i++) {\n node = n.children[i];\n pp = new Point(x - node.Size.width, y);\n this.arrange(node, pp);\n y += node.Size.height + this.options.verticalSeparation;\n }\n break;\n default:\n throw 'Unsupported TreeDirection';\n }\n break;\n case 'Right':\n switch (n.childrenLayout) {\n case 'TopAlignedWithParent':\n case 'BottomAlignedWithParent':\n break;\n case 'Underneath':\n selfLocation = p;\n n.x = selfLocation.x;\n n.y = selfLocation.y;\n n.BoundingRectangle = new Rect(n.x, n.y, n.width, n.height);\n x = p.x + shapeWidth + this.options.underneathHorizontalOffset;\n y = p.y + shapeHeight + this.options.underneathVerticalTopOffset;\n for (i = 0; i < n.children.length; i++) {\n node = n.children[i];\n pp = new Point(x, y);\n this.arrange(node, pp);\n y += node.Size.height + this.options.underneathVerticalSeparation;\n }\n break;\n case 'Default':\n selfLocation = new Point(p.x, p.y + (n.Size.height - shapeHeight) / 2);\n n.x = selfLocation.x;\n n.y = selfLocation.y;\n n.BoundingRectangle = new Rect(n.x, n.y, n.width, n.height);\n x = p.x + shapeWidth + this.options.horizontalSeparation;\n y = p.y;\n for (i = 0; i < n.children.length; i++) {\n node = n.children[i];\n pp = new Point(x, y);\n this.arrange(node, pp);\n y += node.Size.height + this.options.verticalSeparation;\n }\n break;\n default:\n throw 'Unsupported TreeDirection';\n }\n break;\n case 'Up':\n selfLocation = new Point(p.x + (n.Size.width - shapeWidth) / 2, p.y + n.Size.height - shapeHeight);\n n.x = selfLocation.x;\n n.y = selfLocation.y;\n n.BoundingRectangle = new Rect(n.x, n.y, n.width, n.height);\n if (Math.abs(selfLocation.x - p.x) < EPSILON) {\n childrenwidth = 0;\n for (i = 0; i < n.children.length; i++) {\n child = n.children[i];\n childrenwidth += child.Size.width + this.options.horizontalSeparation;\n }\n childrenwidth -= this.options.horizontalSeparation;\n x = p.x + (shapeWidth - childrenwidth) / 2;\n } else {\n x = p.x;\n }\n for (i = 0; i < n.children.length; i++) {\n node = n.children[i];\n y = selfLocation.y - this.options.verticalSeparation - node.Size.height;\n pp = new Point(x, y);\n this.arrange(node, pp);\n x += node.Size.width + this.options.horizontalSeparation;\n }\n break;\n case 'Down':\n switch (n.childrenLayout) {\n case 'TopAlignedWithParent':\n case 'BottomAlignedWithParent':\n break;\n case 'Underneath':\n selfLocation = p;\n n.x = selfLocation.x;\n n.y = selfLocation.y;\n n.BoundingRectangle = new Rect(n.x, n.y, n.width, n.height);\n x = p.x + this.options.underneathHorizontalOffset;\n y = p.y + shapeHeight + this.options.underneathVerticalTopOffset;\n for (i = 0; i < n.children.length; i++) {\n node = n.children[i];\n pp = new Point(x, y);\n this.arrange(node, pp);\n y += node.Size.height + this.options.underneathVerticalSeparation;\n }\n break;\n case 'Default':\n selfLocation = new Point(p.x + (n.Size.width - shapeWidth) / 2, p.y);\n n.x = selfLocation.x;\n n.y = selfLocation.y;\n n.BoundingRectangle = new Rect(n.x, n.y, n.width, n.height);\n if (Math.abs(selfLocation.x - p.x) < EPSILON) {\n childrenwidth = 0;\n for (i = 0; i < n.children.length; i++) {\n child = n.children[i];\n childrenwidth += child.Size.width + this.options.horizontalSeparation;\n }\n childrenwidth -= this.options.horizontalSeparation;\n x = p.x + (shapeWidth - childrenwidth) / 2;\n } else {\n x = p.x;\n }\n for (i = 0; i < n.children.length; i++) {\n node = n.children[i];\n y = selfLocation.y + this.options.verticalSeparation + shapeHeight;\n pp = new Point(x, y);\n this.arrange(node, pp);\n x += node.Size.width + this.options.horizontalSeparation;\n }\n break;\n default:\n throw 'Unsupported TreeDirection';\n }\n break;\n case 'None':\n break;\n default:\n throw 'Unsupported TreeDirection';\n }\n }\n },\n layoutSwitch: function () {\n if (!this.center) {\n return;\n }\n if (Utils.isEmpty(this.center.children)) {\n return;\n }\n var type = this.options.subtype;\n if (Utils.isUndefined(type)) {\n type = 'Down';\n }\n var single, male, female, leftcount;\n var children = this.center.children;\n switch (type.toLowerCase()) {\n case 'radial':\n case 'radialtree':\n this.layoutRadialTree();\n break;\n case 'mindmaphorizontal':\n case 'mindmap':\n single = this.center.children;\n if (this.center.children.length === 1) {\n this.layoutRight(single);\n } else {\n leftcount = children.length / 2;\n male = grep(this.center.children, function (n) {\n return Utils.indexOf(children, n) < leftcount;\n });\n female = grep(this.center.children, function (n) {\n return Utils.indexOf(children, n) >= leftcount;\n });\n this.layoutLeft(male);\n this.layoutRight(female);\n }\n break;\n case 'mindmapvertical':\n single = this.center.children;\n if (this.center.children.length === 1) {\n this.layoutDown(single);\n } else {\n leftcount = children.length / 2;\n male = grep(this.center.children, function (n) {\n return Utils.indexOf(children, n) < leftcount;\n });\n female = grep(this.center.children, function (n) {\n return Utils.indexOf(children, n) >= leftcount;\n });\n this.layoutUp(male);\n this.layoutDown(female);\n }\n break;\n case 'right':\n this.layoutRight(this.center.children);\n break;\n case 'left':\n this.layoutLeft(this.center.children);\n break;\n case 'up':\n case 'bottom':\n this.layoutUp(this.center.children);\n break;\n case 'down':\n case 'top':\n this.layoutDown(this.center.children);\n break;\n case 'tipover':\n case 'tipovertree':\n if (this.options.tipOverTreeStartLevel < 0) {\n throw 'The tip-over level should be a positive integer.';\n }\n this.tipOverTree(this.center.children, this.options.tipOverTreeStartLevel);\n break;\n case 'undefined':\n case 'none':\n break;\n }\n }\n });\n var TreeLayout = LayoutBase.extend({\n init: function (diagram) {\n var that = this;\n LayoutBase.fn.init.call(that);\n if (Utils.isUndefined(diagram)) {\n throw 'No diagram specified.';\n }\n this.diagram = diagram;\n },\n layout: function (options) {\n this.transferOptions(options);\n var adapter = new DiagramToHyperTreeAdapter(this.diagram);\n this.graph = adapter.convert();\n var finalNodeSet = this.layoutComponents();\n return new diagram.LayoutState(this.diagram, finalNodeSet);\n },\n layoutComponents: function () {\n if (this.graph.isEmpty()) {\n return;\n }\n var components = this.graph.getConnectedComponents();\n if (Utils.isEmpty(components)) {\n return;\n }\n var layout = new TreeLayoutProcessor(this.options);\n var trees = [];\n for (var i = 0; i < components.length; i++) {\n var component = components[i];\n var treeGraph = this.getTree(component);\n if (!treeGraph) {\n throw 'Failed to find a spanning tree for the component.';\n }\n var root = treeGraph.root;\n var tree = treeGraph.tree;\n layout.layout(tree, root);\n trees.push(tree);\n }\n return this.gridLayoutComponents(trees);\n },\n getTree: function (graph) {\n var root = null;\n if (this.options.roots && this.options.roots.length > 0) {\n for (var i = 0, len = graph.nodes.length; i < len; i++) {\n var node = graph.nodes[i];\n for (var j = 0; j < this.options.roots.length; j++) {\n var givenRootShape = this.options.roots[j];\n if (givenRootShape === node.associatedShape) {\n root = node;\n break;\n }\n }\n }\n }\n if (!root) {\n root = graph.root();\n if (!root) {\n throw 'Unable to find a root for the tree.';\n }\n }\n return this.getTreeForRoot(graph, root);\n },\n getTreeForRoot: function (graph, root) {\n var tree = graph.getSpanningTree(root);\n if (Utils.isUndefined(tree) || tree.isEmpty()) {\n return null;\n }\n return {\n tree: tree,\n root: tree.root\n };\n }\n });\n var LayeredLayout = LayoutBase.extend({\n init: function (diagram) {\n var that = this;\n LayoutBase.fn.init.call(that);\n if (Utils.isUndefined(diagram)) {\n throw 'Diagram is not specified.';\n }\n this.diagram = diagram;\n },\n layout: function (options) {\n this.transferOptions(options);\n var adapter = new DiagramToHyperTreeAdapter(this.diagram);\n var graph = adapter.convert(options);\n if (graph.isEmpty()) {\n return;\n }\n var components = graph.getConnectedComponents();\n if (Utils.isEmpty(components)) {\n return;\n }\n for (var i = 0; i < components.length; i++) {\n var component = components[i];\n this.layoutGraph(component, options);\n }\n var finalNodeSet = this.gridLayoutComponents(components);\n return new diagram.LayoutState(this.diagram, finalNodeSet);\n },\n _initRuntimeProperties: function () {\n for (var k = 0; k < this.graph.nodes.length; k++) {\n var node = this.graph.nodes[k];\n node.layer = -1;\n node.downstreamLinkCount = 0;\n node.upstreamLinkCount = 0;\n node.isVirtual = false;\n node.uBaryCenter = 0;\n node.dBaryCenter = 0;\n node.upstreamPriority = 0;\n node.downstreamPriority = 0;\n node.gridPosition = 0;\n }\n },\n _prepare: function (graph) {\n var current = [], i, l, link;\n var layerMap = new Dictionary();\n var layerCount = 0;\n var targetLayer, next, target;\n Utils.forEach(graph.nodes, function (node) {\n if (node.incoming.length === 0) {\n layerMap.set(node, 0);\n current.push(node);\n }\n });\n while (current.length > 0) {\n next = current.shift();\n for (i = 0; i < next.outgoing.length; i++) {\n link = next.outgoing[i];\n target = link.target;\n if (layerMap.containsKey(target)) {\n targetLayer = Math.max(layerMap.get(next) + 1, layerMap.get(target));\n } else {\n targetLayer = layerMap.get(next) + 1;\n }\n layerMap.set(target, targetLayer);\n if (targetLayer > layerCount) {\n layerCount = targetLayer;\n }\n if (!contains(current, target)) {\n current.push(target);\n }\n }\n }\n var sortedNodes = layerMap.keys();\n sortedNodes.sort(function (o1, o2) {\n var o1layer = layerMap.get(o1);\n var o2layer = layerMap.get(o2);\n return Utils.sign(o2layer - o1layer);\n });\n for (var n = 0; n < sortedNodes.length; ++n) {\n var node = sortedNodes[n];\n var minLayer = Number.MAX_VALUE;\n if (node.outgoing.length === 0) {\n continue;\n }\n for (l = 0; l < node.outgoing.length; ++l) {\n link = node.outgoing[l];\n minLayer = Math.min(minLayer, layerMap.get(link.target));\n }\n if (minLayer > 1) {\n layerMap.set(node, minLayer - 1);\n }\n }\n this.layers = [];\n var layer;\n for (i = 0; i < layerCount + 1; i++) {\n layer = [];\n layer.linksTo = {};\n this.layers.push(layer);\n }\n layerMap.forEach(function (node, layer) {\n node.layer = layer;\n this.layers[layer].push(node);\n }, this);\n for (l = 0; l < this.layers.length; l++) {\n layer = this.layers[l];\n for (i = 0; i < layer.length; i++) {\n layer[i].gridPosition = i;\n }\n }\n },\n layoutGraph: function (graph, options) {\n if (Utils.isUndefined(graph)) {\n throw 'No graph given or graph analysis of the diagram failed.';\n }\n if (Utils.isDefined(options)) {\n this.transferOptions(options);\n }\n this.graph = graph;\n graph.setItemIndices();\n var reversedEdges = graph.makeAcyclic();\n this._initRuntimeProperties();\n this._prepare(graph, options);\n this._dummify();\n this._optimizeCrossings();\n this._swapPairs();\n this.arrangeNodes();\n this._moveThingsAround();\n this._dedummify();\n Utils.forEach(reversedEdges, function (e) {\n if (e.points) {\n e.points.reverse();\n }\n });\n },\n setMinDist: function (m, n, minDist) {\n var l = m.layer;\n var i = m.layerIndex;\n this.minDistances[l][i] = minDist;\n },\n getMinDist: function (m, n) {\n var dist = 0, i1 = m.layerIndex, i2 = n.layerIndex, l = m.layer, min = Math.min(i1, i2), max = Math.max(i1, i2);\n for (var k = min; k < max; ++k) {\n dist += this.minDistances[l][k];\n }\n return dist;\n },\n placeLeftToRight: function (leftClasses) {\n var leftPos = new Dictionary(), n, node;\n for (var c = 0; c < this.layers.length; ++c) {\n var classNodes = leftClasses[c];\n if (!classNodes) {\n continue;\n }\n for (n = 0; n < classNodes.length; n++) {\n node = classNodes[n];\n if (!leftPos.containsKey(node)) {\n this.placeLeft(node, leftPos, c);\n }\n }\n var d = Number.POSITIVE_INFINITY;\n for (n = 0; n < classNodes.length; n++) {\n node = classNodes[n];\n var rightSibling = this.rightSibling(node);\n if (rightSibling && this.nodeLeftClass.get(rightSibling) !== c) {\n d = Math.min(d, leftPos.get(rightSibling) - leftPos.get(node) - this.getMinDist(node, rightSibling));\n }\n }\n if (d === Number.POSITIVE_INFINITY) {\n var D = [];\n for (n = 0; n < classNodes.length; n++) {\n node = classNodes[n];\n var neighbors = [];\n Utils.addRange(neighbors, this.upNodes.get(node));\n Utils.addRange(neighbors, this.downNodes.get(node));\n for (var e = 0; e < neighbors.length; e++) {\n var neighbor = neighbors[e];\n if (this.nodeLeftClass.get(neighbor) < c) {\n D.push(leftPos.get(neighbor) - leftPos.get(node));\n }\n }\n }\n D.sort();\n if (D.length === 0) {\n d = 0;\n } else if (D.length % 2 === 1) {\n d = D[this.intDiv(D.length, 2)];\n } else {\n d = (D[this.intDiv(D.length, 2) - 1] + D[this.intDiv(D.length, 2)]) / 2;\n }\n }\n for (n = 0; n < classNodes.length; n++) {\n node = classNodes[n];\n leftPos.set(node, leftPos.get(node) + d);\n }\n }\n return leftPos;\n },\n placeRightToLeft: function (rightClasses) {\n var rightPos = new Dictionary(), n, node;\n for (var c = 0; c < this.layers.length; ++c) {\n var classNodes = rightClasses[c];\n if (!classNodes) {\n continue;\n }\n for (n = 0; n < classNodes.length; n++) {\n node = classNodes[n];\n if (!rightPos.containsKey(node)) {\n this.placeRight(node, rightPos, c);\n }\n }\n var d = Number.NEGATIVE_INFINITY;\n for (n = 0; n < classNodes.length; n++) {\n node = classNodes[n];\n var leftSibling = this.leftSibling(node);\n if (leftSibling && this.nodeRightClass.get(leftSibling) !== c) {\n d = Math.max(d, rightPos.get(leftSibling) - rightPos.get(node) + this.getMinDist(leftSibling, node));\n }\n }\n if (d === Number.NEGATIVE_INFINITY) {\n var D = [];\n for (n = 0; n < classNodes.length; n++) {\n node = classNodes[n];\n var neighbors = [];\n Utils.addRange(neighbors, this.upNodes.get(node));\n Utils.addRange(neighbors, this.downNodes.get(node));\n for (var e = 0; e < neighbors.length; e++) {\n var neighbor = neighbors[e];\n if (this.nodeRightClass.get(neighbor) < c) {\n D.push(rightPos.get(node) - rightPos.get(neighbor));\n }\n }\n }\n D.sort();\n if (D.length === 0) {\n d = 0;\n } else if (D.length % 2 === 1) {\n d = D[this.intDiv(D.length, 2)];\n } else {\n d = (D[this.intDiv(D.length, 2) - 1] + D[this.intDiv(D.length, 2)]) / 2;\n }\n }\n for (n = 0; n < classNodes.length; n++) {\n node = classNodes[n];\n rightPos.set(node, rightPos.get(node) + d);\n }\n }\n return rightPos;\n },\n _getLeftWing: function () {\n var leftWing = { value: null };\n var result = this.computeClasses(leftWing, 1);\n this.nodeLeftClass = leftWing.value;\n return result;\n },\n _getRightWing: function () {\n var rightWing = { value: null };\n var result = this.computeClasses(rightWing, -1);\n this.nodeRightClass = rightWing.value;\n return result;\n },\n computeClasses: function (wingPair, d) {\n var currentWing = 0, wing = wingPair.value = new Dictionary();\n for (var l = 0; l < this.layers.length; ++l) {\n currentWing = l;\n var layer = this.layers[l];\n for (var n = d === 1 ? 0 : layer.length - 1; 0 <= n && n < layer.length; n += d) {\n var node = layer[n];\n if (!wing.containsKey(node)) {\n wing.set(node, currentWing);\n if (node.isVirtual) {\n var ndsinl = this._nodesInLink(node);\n for (var kk = 0; kk < ndsinl.length; kk++) {\n var vnode = ndsinl[kk];\n wing.set(vnode, currentWing);\n }\n }\n } else {\n currentWing = wing.get(node);\n }\n }\n }\n var wings = [];\n for (var i = 0; i < this.layers.length; i++) {\n wings.push(null);\n }\n wing.forEach(function (node, classIndex) {\n if (wings[classIndex] === null) {\n wings[classIndex] = [];\n }\n wings[classIndex].push(node);\n });\n return wings;\n },\n _isVerticalLayout: function () {\n return this.options.subtype.toLowerCase() === 'up' || this.options.subtype.toLowerCase() === 'down' || this.options.subtype.toLowerCase() === 'vertical';\n },\n _isHorizontalLayout: function () {\n return this.options.subtype.toLowerCase() === 'right' || this.options.subtype.toLowerCase() === 'left' || this.options.subtype.toLowerCase() === 'horizontal';\n },\n _isIncreasingLayout: function () {\n return this.options.subtype.toLowerCase() === 'right' || this.options.subtype.toLowerCase() === 'down';\n },\n _moveThingsAround: function () {\n var i, l, node, layer, n, w;\n for (l = 0; l < this.layers.length; ++l) {\n layer = this.layers[l];\n layer.sort(this._gridPositionComparer);\n }\n this.minDistances = [];\n for (l = 0; l < this.layers.length; ++l) {\n layer = this.layers[l];\n this.minDistances[l] = [];\n for (n = 0; n < layer.length; ++n) {\n node = layer[n];\n node.layerIndex = n;\n this.minDistances[l][n] = this.options.nodeDistance;\n if (n < layer.length - 1) {\n if (this._isVerticalLayout()) {\n this.minDistances[l][n] += (node.width + layer[n + 1].width) / 2;\n } else {\n this.minDistances[l][n] += (node.height + layer[n + 1].height) / 2;\n }\n }\n }\n }\n this.downNodes = new Dictionary();\n this.upNodes = new Dictionary();\n Utils.forEach(this.graph.nodes, function (node) {\n this.downNodes.set(node, []);\n this.upNodes.set(node, []);\n }, this);\n Utils.forEach(this.graph.links, function (link) {\n var origin = link.source;\n var dest = link.target;\n var down = null, up = null;\n if (origin.layer > dest.layer) {\n down = link.source;\n up = link.target;\n } else {\n up = link.source;\n down = link.target;\n }\n this.downNodes.get(up).push(down);\n this.upNodes.get(down).push(up);\n }, this);\n this.downNodes.forEachValue(function (list) {\n list.sort(this._gridPositionComparer);\n }, this);\n this.upNodes.forEachValue(function (list) {\n list.sort(this._gridPositionComparer);\n }, this);\n for (l = 0; l < this.layers.length - 1; ++l) {\n layer = this.layers[l];\n for (w = 0; w < layer.length - 1; w++) {\n var currentNode = layer[w];\n if (!currentNode.isVirtual) {\n continue;\n }\n var currDown = this.downNodes.get(currentNode)[0];\n if (!currDown.isVirtual) {\n continue;\n }\n for (n = w + 1; n < layer.length; ++n) {\n node = layer[n];\n if (!node.isVirtual) {\n continue;\n }\n var downNode = this.downNodes.get(node)[0];\n if (!downNode.isVirtual) {\n continue;\n }\n if (currDown.gridPosition > downNode.gridPosition) {\n var pos = currDown.gridPosition;\n currDown.gridPosition = downNode.gridPosition;\n downNode.gridPosition = pos;\n var i1 = currDown.layerIndex;\n var i2 = downNode.layerIndex;\n this.layers[l + 1][i1] = downNode;\n this.layers[l + 1][i2] = currDown;\n currDown.layerIndex = i2;\n downNode.layerIndex = i1;\n }\n }\n }\n }\n var leftClasses = this._getLeftWing();\n var rightClasses = this._getRightWing();\n var leftPos = this.placeLeftToRight(leftClasses);\n var rightPos = this.placeRightToLeft(rightClasses);\n var x = new Dictionary();\n Utils.forEach(this.graph.nodes, function (node) {\n x.set(node, (leftPos.get(node) + rightPos.get(node)) / 2);\n });\n var order = new Dictionary();\n var placed = new Dictionary();\n for (l = 0; l < this.layers.length; ++l) {\n layer = this.layers[l];\n var sequenceStart = -1, sequenceEnd = -1;\n for (n = 0; n < layer.length; ++n) {\n node = layer[n];\n order.set(node, 0);\n placed.set(node, false);\n if (node.isVirtual) {\n if (sequenceStart === -1) {\n sequenceStart = n;\n } else if (sequenceStart === n - 1) {\n sequenceStart = n;\n } else {\n sequenceEnd = n;\n order.set(layer[sequenceStart], 0);\n if (x.get(node) - x.get(layer[sequenceStart]) === this.getMinDist(layer[sequenceStart], node)) {\n placed.set(layer[sequenceStart], true);\n } else {\n placed.set(layer[sequenceStart], false);\n }\n sequenceStart = n;\n }\n }\n }\n }\n var directions = [\n 1,\n -1\n ];\n Utils.forEach(directions, function (d) {\n var start = d === 1 ? 0 : this.layers.length - 1;\n for (var l = start; 0 <= l && l < this.layers.length; l += d) {\n var layer = this.layers[l];\n var virtualStartIndex = this._firstVirtualNode(layer);\n var virtualStart = null;\n var sequence = null;\n if (virtualStartIndex !== -1) {\n virtualStart = layer[virtualStartIndex];\n sequence = [];\n for (i = 0; i < virtualStartIndex; i++) {\n sequence.push(layer[i]);\n }\n } else {\n virtualStart = null;\n sequence = layer;\n }\n if (sequence.length > 0) {\n this._sequencer(x, null, virtualStart, d, sequence);\n for (i = 0; i < sequence.length - 1; ++i) {\n this.setMinDist(sequence[i], sequence[i + 1], x.get(sequence[i + 1]) - x.get(sequence[i]));\n }\n if (virtualStart) {\n this.setMinDist(sequence[sequence.length - 1], virtualStart, x.get(virtualStart) - x.get(sequence[sequence.length - 1]));\n }\n }\n while (virtualStart) {\n var virtualEnd = this.nextVirtualNode(layer, virtualStart);\n if (!virtualEnd) {\n virtualStartIndex = virtualStart.layerIndex;\n sequence = [];\n for (i = virtualStartIndex + 1; i < layer.length; i++) {\n sequence.push(layer[i]);\n }\n if (sequence.length > 0) {\n this._sequencer(x, virtualStart, null, d, sequence);\n for (i = 0; i < sequence.length - 1; ++i) {\n this.setMinDist(sequence[i], sequence[i + 1], x.get(sequence[i + 1]) - x.get(sequence[i]));\n }\n this.setMinDist(virtualStart, sequence[0], x.get(sequence[0]) - x.get(virtualStart));\n }\n } else if (order.get(virtualStart) === d) {\n virtualStartIndex = virtualStart.layerIndex;\n var virtualEndIndex = virtualEnd.layerIndex;\n sequence = [];\n for (i = virtualStartIndex + 1; i < virtualEndIndex; i++) {\n sequence.push(layer[i]);\n }\n if (sequence.length > 0) {\n this._sequencer(x, virtualStart, virtualEnd, d, sequence);\n }\n placed.set(virtualStart, true);\n }\n virtualStart = virtualEnd;\n }\n this.adjustDirections(l, d, order, placed);\n }\n }, this);\n var fromLayerIndex = this._isIncreasingLayout() ? 0 : this.layers.length - 1;\n var reachedFinalLayerIndex = function (k, ctx) {\n if (ctx._isIncreasingLayout()) {\n return k < ctx.layers.length;\n } else {\n return k >= 0;\n }\n };\n var layerIncrement = this._isIncreasingLayout() ? +1 : -1, offset = 0;\n function maximumHeight(layer, ctx) {\n var height = Number.MIN_VALUE;\n for (var n = 0; n < layer.length; ++n) {\n var node = layer[n];\n if (ctx._isVerticalLayout()) {\n height = Math.max(height, node.height);\n } else {\n height = Math.max(height, node.width);\n }\n }\n return height;\n }\n for (i = fromLayerIndex; reachedFinalLayerIndex(i, this); i += layerIncrement) {\n layer = this.layers[i];\n var height = maximumHeight(layer, this);\n for (n = 0; n < layer.length; ++n) {\n node = layer[n];\n if (this._isVerticalLayout()) {\n node.x = x.get(node);\n node.y = offset + height / 2;\n } else {\n node.x = offset + height / 2;\n node.y = x.get(node);\n }\n }\n offset += this.options.layerSeparation + height;\n }\n },\n adjustDirections: function (l, d, order, placed) {\n if (l + d < 0 || l + d >= this.layers.length) {\n return;\n }\n var prevBridge = null, prevBridgeTarget = null;\n var layer = this.layers[l + d];\n for (var n = 0; n < layer.length; ++n) {\n var nextBridge = layer[n];\n if (nextBridge.isVirtual) {\n var nextBridgeTarget = this.getNeighborOnLayer(nextBridge, l);\n if (nextBridgeTarget.isVirtual) {\n if (prevBridge) {\n var p = placed.get(prevBridgeTarget);\n var clayer = this.layers[l];\n var i1 = prevBridgeTarget.layerIndex;\n var i2 = nextBridgeTarget.layerIndex;\n for (var i = i1 + 1; i < i2; ++i) {\n if (clayer[i].isVirtual) {\n p = p && placed.get(clayer[i]);\n }\n }\n if (p) {\n order.set(prevBridge, d);\n var j1 = prevBridge.layerIndex;\n var j2 = nextBridge.layerIndex;\n for (var j = j1 + 1; j < j2; ++j) {\n if (layer[j].isVirtual) {\n order.set(layer[j], d);\n }\n }\n }\n }\n prevBridge = nextBridge;\n prevBridgeTarget = nextBridgeTarget;\n }\n }\n }\n },\n getNeighborOnLayer: function (node, l) {\n var neighbor = this.upNodes.get(node)[0];\n if (neighbor.layer === l) {\n return neighbor;\n }\n neighbor = this.downNodes.get(node)[0];\n if (neighbor.layer === l) {\n return neighbor;\n }\n return null;\n },\n _sequencer: function (x, virtualStart, virtualEnd, dir, sequence) {\n if (sequence.length === 1) {\n this._sequenceSingle(x, virtualStart, virtualEnd, dir, sequence[0]);\n }\n if (sequence.length > 1) {\n var r = sequence.length, t = this.intDiv(r, 2);\n this._sequencer(x, virtualStart, virtualEnd, dir, sequence.slice(0, t));\n this._sequencer(x, virtualStart, virtualEnd, dir, sequence.slice(t));\n this.combineSequences(x, virtualStart, virtualEnd, dir, sequence);\n }\n },\n _sequenceSingle: function (x, virtualStart, virtualEnd, dir, node) {\n var neighbors = dir === -1 ? this.downNodes.get(node) : this.upNodes.get(node);\n var n = neighbors.length;\n if (n !== 0) {\n if (n % 2 === 1) {\n x.set(node, x.get(neighbors[this.intDiv(n, 2)]));\n } else {\n x.set(node, (x.get(neighbors[this.intDiv(n, 2) - 1]) + x.get(neighbors[this.intDiv(n, 2)])) / 2);\n }\n if (virtualStart) {\n x.set(node, Math.max(x.get(node), x.get(virtualStart) + this.getMinDist(virtualStart, node)));\n }\n if (virtualEnd) {\n x.set(node, Math.min(x.get(node), x.get(virtualEnd) - this.getMinDist(node, virtualEnd)));\n }\n }\n },\n combineSequences: function (x, virtualStart, virtualEnd, dir, sequence) {\n var r = sequence.length, t = this.intDiv(r, 2);\n var leftHeap = [], i, c, n, neighbors, neighbor, pair;\n for (i = 0; i < t; ++i) {\n c = 0;\n neighbors = dir === -1 ? this.downNodes.get(sequence[i]) : this.upNodes.get(sequence[i]);\n for (n = 0; n < neighbors.length; ++n) {\n neighbor = neighbors[n];\n if (x.get(neighbor) >= x.get(sequence[i])) {\n c++;\n } else {\n c--;\n leftHeap.push({\n k: x.get(neighbor) + this.getMinDist(sequence[i], sequence[t - 1]),\n v: 2\n });\n }\n }\n leftHeap.push({\n k: x.get(sequence[i]) + this.getMinDist(sequence[i], sequence[t - 1]),\n v: c\n });\n }\n if (virtualStart) {\n leftHeap.push({\n k: x.get(virtualStart) + this.getMinDist(virtualStart, sequence[t - 1]),\n v: Number.MAX_VALUE\n });\n }\n leftHeap.sort(this._positionDescendingComparer);\n var rightHeap = [];\n for (i = t; i < r; ++i) {\n c = 0;\n neighbors = dir === -1 ? this.downNodes.get(sequence[i]) : this.upNodes.get(sequence[i]);\n for (n = 0; n < neighbors.length; ++n) {\n neighbor = neighbors[n];\n if (x.get(neighbor) <= x.get(sequence[i])) {\n c++;\n } else {\n c--;\n rightHeap.push({\n k: x.get(neighbor) - this.getMinDist(sequence[i], sequence[t]),\n v: 2\n });\n }\n }\n rightHeap.push({\n k: x.get(sequence[i]) - this.getMinDist(sequence[i], sequence[t]),\n v: c\n });\n }\n if (virtualEnd) {\n rightHeap.push({\n k: x.get(virtualEnd) - this.getMinDist(virtualEnd, sequence[t]),\n v: Number.MAX_VALUE\n });\n }\n rightHeap.sort(this._positionAscendingComparer);\n var leftRes = 0, rightRes = 0;\n var m = this.getMinDist(sequence[t - 1], sequence[t]);\n while (x.get(sequence[t]) - x.get(sequence[t - 1]) < m) {\n if (leftRes < rightRes) {\n if (leftHeap.length === 0) {\n x.set(sequence[t - 1], x.get(sequence[t]) - m);\n break;\n } else {\n pair = leftHeap.shift();\n leftRes = leftRes + pair.v;\n x.set(sequence[t - 1], pair.k);\n x.set(sequence[t - 1], Math.max(x.get(sequence[t - 1]), x.get(sequence[t]) - m));\n }\n } else {\n if (rightHeap.length === 0) {\n x.set(sequence[t], x.get(sequence[t - 1]) + m);\n break;\n } else {\n pair = rightHeap.shift();\n rightRes = rightRes + pair.v;\n x.set(sequence[t], pair.k);\n x.set(sequence[t], Math.min(x.get(sequence[t]), x.get(sequence[t - 1]) + m));\n }\n }\n }\n for (i = t - 2; i >= 0; i--) {\n x.set(sequence[i], Math.min(x.get(sequence[i]), x.get(sequence[t - 1]) - this.getMinDist(sequence[i], sequence[t - 1])));\n }\n for (i = t + 1; i < r; i++) {\n x.set(sequence[i], Math.max(x.get(sequence[i]), x.get(sequence[t]) + this.getMinDist(sequence[i], sequence[t])));\n }\n },\n placeLeft: function (node, leftPos, leftClass) {\n var pos = Number.NEGATIVE_INFINITY;\n Utils.forEach(this._getComposite(node), function (v) {\n var leftSibling = this.leftSibling(v);\n if (leftSibling && this.nodeLeftClass.get(leftSibling) === this.nodeLeftClass.get(v)) {\n if (!leftPos.containsKey(leftSibling)) {\n this.placeLeft(leftSibling, leftPos, leftClass);\n }\n pos = Math.max(pos, leftPos.get(leftSibling) + this.getMinDist(leftSibling, v));\n }\n }, this);\n if (pos === Number.NEGATIVE_INFINITY) {\n pos = 0;\n }\n Utils.forEach(this._getComposite(node), function (v) {\n leftPos.set(v, pos);\n });\n },\n placeRight: function (node, rightPos, rightClass) {\n var pos = Number.POSITIVE_INFINITY;\n Utils.forEach(this._getComposite(node), function (v) {\n var rightSibling = this.rightSibling(v);\n if (rightSibling && this.nodeRightClass.get(rightSibling) === this.nodeRightClass.get(v)) {\n if (!rightPos.containsKey(rightSibling)) {\n this.placeRight(rightSibling, rightPos, rightClass);\n }\n pos = Math.min(pos, rightPos.get(rightSibling) - this.getMinDist(v, rightSibling));\n }\n }, this);\n if (pos === Number.POSITIVE_INFINITY) {\n pos = 0;\n }\n Utils.forEach(this._getComposite(node), function (v) {\n rightPos.set(v, pos);\n });\n },\n leftSibling: function (node) {\n var layer = this.layers[node.layer], layerIndex = node.layerIndex;\n return layerIndex === 0 ? null : layer[layerIndex - 1];\n },\n rightSibling: function (node) {\n var layer = this.layers[node.layer];\n var layerIndex = node.layerIndex;\n return layerIndex === layer.length - 1 ? null : layer[layerIndex + 1];\n },\n _getComposite: function (node) {\n return node.isVirtual ? this._nodesInLink(node) : [node];\n },\n arrangeNodes: function () {\n var i, l, ni, layer, node;\n for (l = 0; l < this.layers.length; l++) {\n layer = this.layers[l];\n for (ni = 0; ni < layer.length; ni++) {\n node = layer[ni];\n node.upstreamPriority = node.upstreamLinkCount;\n node.downstreamPriority = node.downstreamLinkCount;\n }\n }\n var maxLayoutIterations = 2;\n for (var it = 0; it < maxLayoutIterations; it++) {\n for (i = this.layers.length - 1; i >= 1; i--) {\n this.layoutLayer(false, i);\n }\n for (i = 0; i < this.layers.length - 1; i++) {\n this.layoutLayer(true, i);\n }\n }\n var gridPos = Number.MAX_VALUE;\n for (l = 0; l < this.layers.length; l++) {\n layer = this.layers[l];\n for (ni = 0; ni < layer.length; ni++) {\n node = layer[ni];\n gridPos = Math.min(gridPos, node.gridPosition);\n }\n }\n if (gridPos < 0) {\n for (l = 0; l < this.layers.length; l++) {\n layer = this.layers[l];\n for (ni = 0; ni < layer.length; ni++) {\n node = layer[ni];\n node.gridPosition = node.gridPosition - gridPos;\n }\n }\n }\n },\n layoutLayer: function (down, layer) {\n var iconsidered;\n var considered;\n if (down) {\n considered = this.layers[iconsidered = layer + 1];\n } else {\n considered = this.layers[iconsidered = layer - 1];\n }\n var sorted = [];\n for (var n = 0; n < considered.length; n++) {\n sorted.push(considered[n]);\n }\n sorted.sort(function (n1, n2) {\n var n1Priority = (n1.upstreamPriority + n1.downstreamPriority) / 2;\n var n2Priority = (n2.upstreamPriority + n2.downstreamPriority) / 2;\n if (Math.abs(n1Priority - n2Priority) < 0.0001) {\n return 0;\n }\n if (n1Priority < n2Priority) {\n return 1;\n }\n return -1;\n });\n Utils.forEach(sorted, function (node) {\n var nodeGridPos = node.gridPosition;\n var nodeBaryCenter = this.calcBaryCenter(node);\n var nodePriority = (node.upstreamPriority + node.downstreamPriority) / 2;\n if (Math.abs(nodeGridPos - nodeBaryCenter) < 0.0001) {\n return;\n }\n if (Math.abs(nodeGridPos - nodeBaryCenter) < 0.25 + 0.0001) {\n return;\n }\n if (nodeGridPos < nodeBaryCenter) {\n while (nodeGridPos < nodeBaryCenter) {\n if (!this.moveRight(node, considered, nodePriority)) {\n break;\n }\n nodeGridPos = node.gridPosition;\n }\n } else {\n while (nodeGridPos > nodeBaryCenter) {\n if (!this.moveLeft(node, considered, nodePriority)) {\n break;\n }\n nodeGridPos = node.gridPosition;\n }\n }\n }, this);\n if (iconsidered > 0) {\n this.calcDownData(iconsidered - 1);\n }\n if (iconsidered < this.layers.length - 1) {\n this.calcUpData(iconsidered + 1);\n }\n },\n moveRight: function (node, layer, priority) {\n var index = Utils.indexOf(layer, node);\n if (index === layer.length - 1) {\n node.gridPosition = node.gridPosition + 0.5;\n return true;\n }\n var rightNode = layer[index + 1];\n var rightNodePriority = (rightNode.upstreamPriority + rightNode.downstreamPriority) / 2;\n if (rightNode.gridPosition > node.gridPosition + 1) {\n node.gridPosition = node.gridPosition + 0.5;\n return true;\n }\n if (rightNodePriority > priority || Math.abs(rightNodePriority - priority) < 0.0001) {\n return false;\n }\n if (this.moveRight(rightNode, layer, priority)) {\n node.gridPosition = node.gridPosition + 0.5;\n return true;\n }\n return false;\n },\n moveLeft: function (node, layer, priority) {\n var index = Utils.indexOf(layer, node);\n if (index === 0) {\n node.gridPosition = node.gridPosition - 0.5;\n return true;\n }\n var leftNode = layer[index - 1];\n var leftNodePriority = (leftNode.upstreamPriority + leftNode.downstreamPriority) / 2;\n if (leftNode.gridPosition < node.gridPosition - 1) {\n node.gridPosition = node.gridPosition - 0.5;\n return true;\n }\n if (leftNodePriority > priority || Math.abs(leftNodePriority - priority) < 0.0001) {\n return false;\n }\n if (this.moveLeft(leftNode, layer, priority)) {\n node.gridPosition = node.gridPosition - 0.5;\n return true;\n }\n return false;\n },\n mapVirtualNode: function (node, link) {\n this.nodeToLinkMap.set(node, link);\n if (!this.linkToNodeMap.containsKey(link)) {\n this.linkToNodeMap.set(link, []);\n }\n this.linkToNodeMap.get(link).push(node);\n },\n _nodesInLink: function (node) {\n return this.linkToNodeMap.get(this.nodeToLinkMap.get(node));\n },\n _dummify: function () {\n this.linkToNodeMap = new Dictionary();\n this.nodeToLinkMap = new Dictionary();\n var layer, pos, newNode, node, r, newLink, i, l, links = this.graph.links.slice(0);\n var layers = this.layers;\n var addLinkBetweenLayers = function (upLayer, downLayer, link) {\n layers[upLayer].linksTo[downLayer] = layers[upLayer].linksTo[downLayer] || [];\n layers[upLayer].linksTo[downLayer].push(link);\n };\n for (l = 0; l < links.length; l++) {\n var link = links[l];\n var o = link.source;\n var d = link.target;\n var oLayer = o.layer;\n var dLayer = d.layer;\n var oPos = o.gridPosition;\n var dPos = d.gridPosition;\n var step = (dPos - oPos) / Math.abs(dLayer - oLayer);\n var p = o;\n if (oLayer - dLayer > 1) {\n for (i = oLayer - 1; i > dLayer; i--) {\n newNode = new Node();\n newNode.x = o.x;\n newNode.y = o.y;\n newNode.width = o.width / 100;\n newNode.height = o.height / 100;\n layer = layers[i];\n pos = (i - dLayer) * step + oPos;\n if (pos > layer.length) {\n pos = layer.length;\n }\n if (oPos >= layers[oLayer].length - 1 && dPos >= layers[dLayer].length - 1) {\n pos = layer.length;\n } else if (oPos === 0 && dPos === 0) {\n pos = 0;\n }\n newNode.layer = i;\n newNode.uBaryCenter = 0;\n newNode.dBaryCenter = 0;\n newNode.upstreamLinkCount = 0;\n newNode.downstreamLinkCount = 0;\n newNode.gridPosition = pos;\n newNode.isVirtual = true;\n Utils.insert(layer, newNode, pos);\n for (r = pos + 1; r < layer.length; r++) {\n node = layer[r];\n node.gridPosition = node.gridPosition + 1;\n }\n newLink = new Link(p, newNode);\n newLink.depthOfDumminess = 0;\n addLinkBetweenLayers(i - 1, i, newLink);\n p = newNode;\n this.graph._addNode(newNode);\n this.graph.addLink(newLink);\n newNode.index = this.graph.nodes.length - 1;\n this.mapVirtualNode(newNode, link);\n }\n addLinkBetweenLayers(dLayer - 1, dLayer, newLink);\n link.changeSource(p);\n link.depthOfDumminess = oLayer - dLayer - 1;\n } else if (oLayer - dLayer < -1) {\n for (i = oLayer + 1; i < dLayer; i++) {\n newNode = new Node();\n newNode.x = o.x;\n newNode.y = o.y;\n newNode.width = o.width / 100;\n newNode.height = o.height / 100;\n layer = layers[i];\n pos = (i - oLayer) * step + oPos;\n if (pos > layer.length) {\n pos = layer.length;\n }\n if (oPos >= layers[oLayer].length - 1 && dPos >= layers[dLayer].length - 1) {\n pos = layer.length;\n } else if (oPos === 0 && dPos === 0) {\n pos = 0;\n }\n newNode.layer = i;\n newNode.uBaryCenter = 0;\n newNode.dBaryCenter = 0;\n newNode.upstreamLinkCount = 0;\n newNode.downstreamLinkCount = 0;\n newNode.gridPosition = pos;\n newNode.isVirtual = true;\n pos &= pos;\n Utils.insert(layer, newNode, pos);\n for (r = pos + 1; r < layer.length; r++) {\n node = layer[r];\n node.gridPosition = node.gridPosition + 1;\n }\n newLink = new Link(p, newNode);\n newLink.depthOfDumminess = 0;\n addLinkBetweenLayers(i - 1, i, newLink);\n p = newNode;\n this.graph._addNode(newNode);\n this.graph.addLink(newLink);\n newNode.index = this.graph.nodes.length - 1;\n this.mapVirtualNode(newNode, link);\n }\n addLinkBetweenLayers(dLayer - 1, dLayer, link);\n link.changeSource(p);\n link.depthOfDumminess = dLayer - oLayer - 1;\n } else {\n addLinkBetweenLayers(oLayer, dLayer, link);\n }\n }\n },\n _dedummify: function () {\n var dedum = true;\n while (dedum) {\n dedum = false;\n for (var l = 0; l < this.graph.links.length; l++) {\n var link = this.graph.links[l];\n if (!link.depthOfDumminess) {\n continue;\n }\n var points = [];\n points.unshift({\n x: link.target.x,\n y: link.target.y\n });\n points.unshift({\n x: link.source.x,\n y: link.source.y\n });\n var temp = link;\n var depthOfDumminess = link.depthOfDumminess;\n for (var d = 0; d < depthOfDumminess; d++) {\n var node = temp.source;\n var prevLink = node.incoming[0];\n points.unshift({\n x: prevLink.source.x,\n y: prevLink.source.y\n });\n temp = prevLink;\n }\n link.changeSource(temp.source);\n link.depthOfDumminess = 0;\n if (points.length > 2) {\n points.splice(0, 1);\n points.splice(points.length - 1);\n link.points = points;\n } else {\n link.points = [];\n }\n dedum = true;\n break;\n }\n }\n },\n _optimizeCrossings: function () {\n var moves = -1, i;\n var maxIterations = 3;\n var iter = 0;\n while (moves !== 0) {\n if (iter++ > maxIterations) {\n break;\n }\n moves = 0;\n for (i = this.layers.length - 1; i >= 1; i--) {\n moves += this.optimizeLayerCrossings(false, i);\n }\n for (i = 0; i < this.layers.length - 1; i++) {\n moves += this.optimizeLayerCrossings(true, i);\n }\n }\n },\n calcUpData: function (layer) {\n if (layer === 0) {\n return;\n }\n var considered = this.layers[layer], i, l, link;\n var upLayer = new Set();\n var temp = this.layers[layer - 1];\n for (i = 0; i < temp.length; i++) {\n upLayer.add(temp[i]);\n }\n for (i = 0; i < considered.length; i++) {\n var node = considered[i];\n var sum = 0;\n var total = 0;\n for (l = 0; l < node.incoming.length; l++) {\n link = node.incoming[l];\n if (upLayer.contains(link.source)) {\n total++;\n sum += link.source.gridPosition;\n }\n }\n for (l = 0; l < node.outgoing.length; l++) {\n link = node.outgoing[l];\n if (upLayer.contains(link.target)) {\n total++;\n sum += link.target.gridPosition;\n }\n }\n if (total > 0) {\n node.uBaryCenter = sum / total;\n node.upstreamLinkCount = total;\n } else {\n node.uBaryCenter = i;\n node.upstreamLinkCount = 0;\n }\n }\n },\n calcDownData: function (layer) {\n if (layer === this.layers.length - 1) {\n return;\n }\n var considered = this.layers[layer], i, l, link;\n var downLayer = new Set();\n var temp = this.layers[layer + 1];\n for (i = 0; i < temp.length; i++) {\n downLayer.add(temp[i]);\n }\n for (i = 0; i < considered.length; i++) {\n var node = considered[i];\n var sum = 0;\n var total = 0;\n for (l = 0; l < node.incoming.length; l++) {\n link = node.incoming[l];\n if (downLayer.contains(link.source)) {\n total++;\n sum += link.source.gridPosition;\n }\n }\n for (l = 0; l < node.outgoing.length; l++) {\n link = node.outgoing[l];\n if (downLayer.contains(link.target)) {\n total++;\n sum += link.target.gridPosition;\n }\n }\n if (total > 0) {\n node.dBaryCenter = sum / total;\n node.downstreamLinkCount = total;\n } else {\n node.dBaryCenter = i;\n node.downstreamLinkCount = 0;\n }\n }\n },\n optimizeLayerCrossings: function (down, layer) {\n var iconsidered;\n var considered;\n if (down) {\n considered = this.layers[iconsidered = layer + 1];\n } else {\n considered = this.layers[iconsidered = layer - 1];\n }\n var presorted = considered.slice(0);\n if (down) {\n this.calcUpData(iconsidered);\n } else {\n this.calcDownData(iconsidered);\n }\n var that = this;\n considered.sort(function (n1, n2) {\n var n1BaryCenter = that.calcBaryCenter(n1), n2BaryCenter = that.calcBaryCenter(n2);\n if (Math.abs(n1BaryCenter - n2BaryCenter) < 0.0001) {\n if (n1.degree() === n2.degree()) {\n return that.compareByIndex(n1, n2);\n } else if (n1.degree() < n2.degree()) {\n return 1;\n }\n return -1;\n }\n var compareValue = (n2BaryCenter - n1BaryCenter) * 1000;\n if (compareValue > 0) {\n return -1;\n } else if (compareValue < 0) {\n return 1;\n }\n return that.compareByIndex(n1, n2);\n });\n var i, moves = 0;\n for (i = 0; i < considered.length; i++) {\n if (considered[i] !== presorted[i]) {\n moves++;\n }\n }\n if (moves > 0) {\n var inode = 0;\n for (i = 0; i < considered.length; i++) {\n var node = considered[i];\n node.gridPosition = inode++;\n }\n }\n return moves;\n },\n _swapPairs: function () {\n var maxIterations = this.options.layeredIterations;\n var iter = 0;\n while (true) {\n if (iter++ > maxIterations) {\n break;\n }\n var downwards = iter % 4 <= 1;\n var secondPass = iter % 4 === 1;\n for (var l = downwards ? 0 : this.layers.length - 1; downwards ? l <= this.layers.length - 1 : l >= 0; l += downwards ? 1 : -1) {\n var layer = this.layers[l];\n var hasSwapped = false;\n var calcCrossings = true;\n var memCrossings = 0;\n for (var n = 0; n < layer.length - 1; n++) {\n var up = 0;\n var down = 0;\n var crossBefore = 0;\n if (calcCrossings) {\n if (l !== 0) {\n up = this.countLinksCrossingBetweenTwoLayers(l - 1, l);\n }\n if (l !== this.layers.length - 1) {\n down = this.countLinksCrossingBetweenTwoLayers(l, l + 1);\n }\n if (downwards) {\n up *= 2;\n } else {\n down *= 2;\n }\n crossBefore = up + down;\n } else {\n crossBefore = memCrossings;\n }\n if (crossBefore === 0) {\n continue;\n }\n var node1 = layer[n];\n var node2 = layer[n + 1];\n var node1GridPos = node1.gridPosition;\n var node2GridPos = node2.gridPosition;\n layer[n] = node2;\n layer[n + 1] = node1;\n node1.gridPosition = node2GridPos;\n node2.gridPosition = node1GridPos;\n up = 0;\n if (l !== 0) {\n up = this.countLinksCrossingBetweenTwoLayers(l - 1, l);\n }\n down = 0;\n if (l !== this.layers.length - 1) {\n down = this.countLinksCrossingBetweenTwoLayers(l, l + 1);\n }\n if (downwards) {\n up *= 2;\n } else {\n down *= 2;\n }\n var crossAfter = up + down;\n var revert = false;\n if (secondPass) {\n revert = crossAfter >= crossBefore;\n } else {\n revert = crossAfter > crossBefore;\n }\n if (revert) {\n node1 = layer[n];\n node2 = layer[n + 1];\n node1GridPos = node1.gridPosition;\n node2GridPos = node2.gridPosition;\n layer[n] = node2;\n layer[n + 1] = node1;\n node1.gridPosition = node2GridPos;\n node2.gridPosition = node1GridPos;\n memCrossings = crossBefore;\n calcCrossings = false;\n } else {\n hasSwapped = true;\n calcCrossings = true;\n }\n }\n if (hasSwapped) {\n if (l !== this.layers.length - 1) {\n this.calcUpData(l + 1);\n }\n if (l !== 0) {\n this.calcDownData(l - 1);\n }\n }\n }\n }\n },\n countLinksCrossingBetweenTwoLayers: function (ulayer, dlayer) {\n var links = this.layers[ulayer].linksTo[dlayer];\n var link1, link2, n11, n12, n21, n22, l1, l2;\n var crossings = 0;\n var length = links.length;\n for (l1 = 0; l1 < length; l1++) {\n link1 = links[l1];\n for (l2 = l1 + 1; l2 < length; l2++) {\n link2 = links[l2];\n if (link1.target.layer === dlayer) {\n n11 = link1.source;\n n12 = link1.target;\n } else {\n n11 = link1.target;\n n12 = link1.source;\n }\n if (link2.target.layer === dlayer) {\n n21 = link2.source;\n n22 = link2.target;\n } else {\n n21 = link2.target;\n n22 = link2.source;\n }\n var n11gp = n11.gridPosition;\n var n12gp = n12.gridPosition;\n var n21gp = n21.gridPosition;\n var n22gp = n22.gridPosition;\n if ((n11gp - n21gp) * (n12gp - n22gp) < 0) {\n crossings++;\n }\n }\n }\n return crossings;\n },\n calcBaryCenter: function (node) {\n var upstreamLinkCount = node.upstreamLinkCount;\n var downstreamLinkCount = node.downstreamLinkCount;\n var uBaryCenter = node.uBaryCenter;\n var dBaryCenter = node.dBaryCenter;\n if (upstreamLinkCount > 0 && downstreamLinkCount > 0) {\n return (uBaryCenter + dBaryCenter) / 2;\n }\n if (upstreamLinkCount > 0) {\n return uBaryCenter;\n }\n if (downstreamLinkCount > 0) {\n return dBaryCenter;\n }\n return 0;\n },\n _gridPositionComparer: function (x, y) {\n if (x.gridPosition < y.gridPosition) {\n return -1;\n }\n if (x.gridPosition > y.gridPosition) {\n return 1;\n }\n return 0;\n },\n _positionAscendingComparer: function (x, y) {\n return x.k < y.k ? -1 : x.k > y.k ? 1 : 0;\n },\n _positionDescendingComparer: function (x, y) {\n return x.k < y.k ? 1 : x.k > y.k ? -1 : 0;\n },\n _firstVirtualNode: function (layer) {\n for (var c = 0; c < layer.length; c++) {\n if (layer[c].isVirtual) {\n return c;\n }\n }\n return -1;\n },\n compareByIndex: function (o1, o2) {\n var i1 = o1.index;\n var i2 = o2.index;\n if (i1 < i2) {\n return 1;\n }\n if (i1 > i2) {\n return -1;\n }\n return 0;\n },\n intDiv: function (numerator, denominator) {\n return (numerator - numerator % denominator) / denominator;\n },\n nextVirtualNode: function (layer, node) {\n var nodeIndex = node.layerIndex;\n for (var i = nodeIndex + 1; i < layer.length; ++i) {\n if (layer[i].isVirtual) {\n return layer[i];\n }\n }\n return null;\n }\n });\n var LayoutState = kendo.Class.extend({\n init: function (diagram, graphOrNodes) {\n if (Utils.isUndefined(diagram)) {\n throw 'No diagram given';\n }\n this.diagram = diagram;\n this.nodeMap = new Dictionary();\n this.linkMap = new Dictionary();\n this.capture(graphOrNodes ? graphOrNodes : diagram);\n },\n capture: function (diagramOrGraphOrNodes) {\n var node, nodes, shape, i, conn, link, links;\n if (diagramOrGraphOrNodes instanceof diagram.Graph) {\n for (i = 0; i < diagramOrGraphOrNodes.nodes.length; i++) {\n node = diagramOrGraphOrNodes.nodes[i];\n shape = node.associatedShape;\n this.nodeMap.set(shape.visual.id, new Rect(node.x, node.y, node.width, node.height));\n }\n for (i = 0; i < diagramOrGraphOrNodes.links.length; i++) {\n link = diagramOrGraphOrNodes.links[i];\n conn = link.associatedConnection;\n this.linkMap.set(conn.visual.id, link.points());\n }\n } else if (diagramOrGraphOrNodes instanceof Array) {\n nodes = diagramOrGraphOrNodes;\n for (i = 0; i < nodes.length; i++) {\n node = nodes[i];\n shape = node.associatedShape;\n if (shape) {\n this.nodeMap.set(shape.visual.id, new Rect(node.x, node.y, node.width, node.height));\n }\n }\n } else if (diagramOrGraphOrNodes.hasOwnProperty('links') && diagramOrGraphOrNodes.hasOwnProperty('nodes')) {\n nodes = diagramOrGraphOrNodes.nodes;\n links = diagramOrGraphOrNodes.links;\n for (i = 0; i < nodes.length; i++) {\n node = nodes[i];\n shape = node.associatedShape;\n if (shape) {\n this.nodeMap.set(shape.visual.id, new Rect(node.x, node.y, node.width, node.height));\n }\n }\n for (i = 0; i < links.length; i++) {\n link = links[i];\n conn = link.associatedConnection;\n if (conn) {\n this.linkMap.set(conn.visual.id, link.points);\n }\n }\n } else {\n var shapes = this.diagram.shapes;\n var connections = this.diagram.connections;\n for (i = 0; i < shapes.length; i++) {\n shape = shapes[i];\n this.nodeMap.set(shape.visual.id, shape.bounds());\n }\n for (i = 0; i < connections.length; i++) {\n conn = connections[i];\n this.linkMap.set(conn.visual.id, conn.points());\n }\n }\n }\n });\n deepExtend(diagram, {\n init: function (element) {\n kendo.init(element, diagram.ui);\n },\n SpringLayout: SpringLayout,\n TreeLayout: TreeLayout,\n GraphAdapter: DiagramToHyperTreeAdapter,\n LayeredLayout: LayeredLayout,\n LayoutBase: LayoutBase,\n LayoutState: LayoutState\n });\n }(window.kendo.jQuery));\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.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.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.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.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.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 $('').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('dataviz/diagram/dom', [\n 'kendo.data',\n 'kendo.draganddrop',\n 'kendo.toolbar',\n 'kendo.editable',\n 'kendo.window',\n 'kendo.dropdownlist',\n 'kendo.dataviz.core',\n 'kendo.dataviz.themes',\n 'dataviz/diagram/svg',\n 'dataviz/diagram/services',\n 'dataviz/diagram/layout'\n ], f);\n}(function () {\n (function ($, undefined) {\n var dataviz = kendo.dataviz, draw = kendo.drawing, geom = kendo.geometry, diagram = dataviz.diagram, Widget = kendo.ui.Widget, Class = kendo.Class, proxy = $.proxy, deepExtend = kendo.deepExtend, outerWidth = kendo._outerWidth, outerHeight = kendo._outerHeight, extend = $.extend, HierarchicalDataSource = kendo.data.HierarchicalDataSource, Canvas = diagram.Canvas, Group = diagram.Group, Rectangle = diagram.Rectangle, Circle = diagram.Circle, CompositeTransform = diagram.CompositeTransform, Rect = diagram.Rect, Path = diagram.Path, DeleteShapeUnit = diagram.DeleteShapeUnit, DeleteConnectionUnit = diagram.DeleteConnectionUnit, TextBlock = diagram.TextBlock, Image = diagram.Image, Point = diagram.Point, Intersect = diagram.Intersect, ConnectionEditAdorner = diagram.ConnectionEditAdorner, UndoRedoService = diagram.UndoRedoService, ToolService = diagram.ToolService, Selector = diagram.Selector, ResizingAdorner = diagram.ResizingAdorner, ConnectorsAdorner = diagram.ConnectorsAdorner, Cursors = diagram.Cursors, Utils = diagram.Utils, Observable = kendo.Observable, ToBackUnit = diagram.ToBackUnit, ToFrontUnit = diagram.ToFrontUnit, PolylineRouter = diagram.PolylineRouter, CascadingRouter = diagram.CascadingRouter, isUndefined = Utils.isUndefined, isDefined = Utils.isDefined, defined = draw.util.defined, isArray = $.isArray, isFunction = kendo.isFunction, isString = Utils.isString, isPlainObject = $.isPlainObject, math = Math;\n var SASS_THEMES = [\n 'sass',\n 'default-v2',\n 'bootstrap-v4'\n ];\n var NS = '.kendoDiagram', CASCADING = 'cascading', ITEMBOUNDSCHANGE = 'itemBoundsChange', CHANGE = 'change', CLICK = 'click', DRAG = 'drag', DRAG_END = 'dragEnd', DRAG_START = 'dragStart', MOUSE_ENTER = 'mouseEnter', MOUSE_LEAVE = 'mouseLeave', ERROR = 'error', AUTO = 'Auto', TOP = 'Top', RIGHT = 'Right', LEFT = 'Left', BOTTOM = 'Bottom', MAXINT = 9007199254740992, SELECT = 'select', ITEMROTATE = 'itemRotate', PAN = 'pan', ZOOM_START = 'zoomStart', ZOOM_END = 'zoomEnd', NONE = 'none', DEFAULT_CANVAS_WIDTH = 600, DEFAULT_CANVAS_HEIGHT = 600, DEFAULT_SHAPE_TYPE = 'rectangle', DEFAULT_SHAPE_WIDTH = 100, DEFAULT_SHAPE_HEIGHT = 100, DEFAULT_SHAPE_MINWIDTH = 20, DEFAULT_SHAPE_MINHEIGHT = 20, DEFAULT_SHAPE_POSITION = 0, DEFAULT_CONNECTION_BACKGROUND = 'Yellow', MAX_VALUE = Number.MAX_VALUE, MIN_VALUE = -Number.MAX_VALUE, ABSOLUTE = 'absolute', TRANSFORMED = 'transformed', ROTATED = 'rotated', TRANSPARENT = 'transparent', WIDTH = 'width', HEIGHT = 'height', X = 'x', Y = 'y', MOUSEWHEEL_NS = 'DOMMouseScroll' + NS + ' mousewheel' + NS, MOBILE_ZOOM_RATE = 0.05, MOBILE_PAN_DISTANCE = 5, BUTTON_TEMPLATE = '#=text#', CONNECTION_CONTENT_OFFSET = 5;\n diagram.DefaultConnectors = [\n { name: TOP },\n { name: BOTTOM },\n { name: LEFT },\n { name: RIGHT },\n {\n name: AUTO,\n position: function (shape) {\n return shape.getPosition('center');\n }\n }\n ];\n var defaultButtons = {\n cancel: {\n text: 'Cancel',\n imageClass: 'k-i-cancel',\n className: 'k-diagram-cancel',\n iconClass: 'k-icon'\n },\n update: {\n text: 'Update',\n imageClass: 'k-i-checkmark',\n className: 'k-diagram-update',\n iconClass: 'k-icon'\n }\n };\n diagram.shapeDefaults = function (extra) {\n var defaults = {\n type: DEFAULT_SHAPE_TYPE,\n path: '',\n autoSize: true,\n visual: null,\n x: DEFAULT_SHAPE_POSITION,\n y: DEFAULT_SHAPE_POSITION,\n minWidth: DEFAULT_SHAPE_MINWIDTH,\n minHeight: DEFAULT_SHAPE_MINHEIGHT,\n width: DEFAULT_SHAPE_WIDTH,\n height: DEFAULT_SHAPE_HEIGHT,\n hover: {},\n editable: {\n connect: true,\n tools: []\n },\n connectors: diagram.DefaultConnectors,\n rotation: { angle: 0 }\n };\n Utils.simpleExtend(defaults, extra);\n return defaults;\n };\n function mwDelta(e) {\n var origEvent = e.originalEvent, delta = 0;\n if (origEvent.wheelDelta) {\n delta = -origEvent.wheelDelta / 40;\n delta = delta > 0 ? math.ceil(delta) : math.floor(delta);\n } else if (origEvent.detail) {\n delta = origEvent.detail;\n }\n return delta;\n }\n function isAutoConnector(connector) {\n return connector.options.name.toLowerCase() === AUTO.toLowerCase();\n }\n function closestConnector(point, connectors) {\n var minimumDistance = MAXINT, resCtr, connector;\n for (var i = 0; i < connectors.length; i++) {\n connector = connectors[i];\n if (!isAutoConnector(connector)) {\n var dist = point.distanceTo(connector.position());\n if (dist < minimumDistance) {\n minimumDistance = dist;\n resCtr = connector;\n }\n }\n }\n return resCtr;\n }\n function indicesOfItems(group, visuals) {\n var i, indices = [], visual;\n var children = group.drawingContainer().children;\n var length = children.length;\n for (i = 0; i < visuals.length; i++) {\n visual = visuals[i];\n for (var j = 0; j < length; j++) {\n if (children[j] == visual.drawingContainer()) {\n indices.push(j);\n break;\n }\n }\n }\n return indices;\n }\n var DiagramElement = Observable.extend({\n init: function (options) {\n var that = this;\n that.dataItem = (options || {}).dataItem;\n Observable.fn.init.call(that);\n that.options = deepExtend({ id: diagram.randomId() }, that.options, options);\n that.isSelected = false;\n that.visual = new Group({\n id: that.options.id,\n autoSize: that.options.autoSize\n });\n that.id = that.options.id;\n that._template();\n },\n options: {\n hover: {},\n cursor: Cursors.grip,\n content: { align: 'center middle' },\n selectable: true,\n serializable: true,\n enable: true\n },\n _getCursor: function (point) {\n if (this.adorner) {\n return this.adorner._getCursor(point);\n }\n return this.options.cursor;\n },\n visible: function (value) {\n if (isUndefined(value)) {\n return this.visual.visible();\n } else {\n this.visual.visible(value);\n }\n },\n bounds: function () {\n },\n refresh: function () {\n this.visual.redraw();\n },\n position: function (point) {\n this.options.x = point.x;\n this.options.y = point.y;\n this.visual.position(point);\n },\n toString: function () {\n return this.options.id;\n },\n serialize: function () {\n var json = deepExtend({}, { options: this.options });\n if (this.dataItem) {\n json.dataItem = this.dataItem.toString();\n }\n return json;\n },\n _content: function (content) {\n if (content !== undefined) {\n var options = this.options;\n if (diagram.Utils.isString(content)) {\n options.content.text = content;\n } else {\n deepExtend(options.content, content);\n }\n var contentOptions = options.content;\n var contentVisual = this._contentVisual;\n if (!contentVisual) {\n this._createContentVisual(contentOptions);\n } else {\n this._updateContentVisual(contentOptions);\n }\n }\n return this.options.content.text;\n },\n _createContentVisual: function (options) {\n if (options.text) {\n this._contentVisual = new TextBlock(options);\n this._contentVisual._includeInBBox = false;\n this.visual.append(this._contentVisual);\n }\n },\n _updateContentVisual: function (options) {\n this._contentVisual.redraw(options);\n },\n _hitTest: function (point) {\n var bounds = this.bounds();\n return this.visible() && bounds.contains(point) && this.options.enable;\n },\n _template: function () {\n var that = this;\n if (that.options.content.template) {\n var data = that.dataItem || {}, elementTemplate = kendo.template(that.options.content.template, { paramName: 'dataItem' });\n that.options.content.text = elementTemplate(data);\n }\n },\n _canSelect: function () {\n return this.options.selectable !== false;\n },\n toJSON: function () {\n return { id: this.options.id };\n }\n });\n var Connector = Class.extend({\n init: function (shape, options) {\n this.options = deepExtend({}, this.options, options);\n this.connections = [];\n this.shape = shape;\n },\n options: {\n width: 7,\n height: 7,\n fill: { color: DEFAULT_CONNECTION_BACKGROUND },\n hover: {}\n },\n position: function () {\n if (this.options.position) {\n return this.options.position(this.shape);\n } else {\n return this.shape.getPosition(this.options.name);\n }\n },\n toJSON: function () {\n return {\n shapeId: this.shape.toString(),\n connector: this.options.name\n };\n }\n });\n Connector.parse = function (diagram, str) {\n var tempStr = str.split(':'), id = tempStr[0], name = tempStr[1] || AUTO;\n for (var i = 0; i < diagram.shapes.length; i++) {\n var shape = diagram.shapes[i];\n if (shape.options.id == id) {\n return shape.getConnector(name.trim());\n }\n }\n };\n var Shape = DiagramElement.extend({\n init: function (options, diagram) {\n var that = this;\n DiagramElement.fn.init.call(that, options);\n this.diagram = diagram;\n this.updateOptionsFromModel();\n options = that.options;\n that.connectors = [];\n that.type = options.type;\n that.createShapeVisual();\n that.updateBounds();\n that.content(that.content());\n that._createConnectors();\n },\n options: diagram.shapeDefaults(),\n _setOptionsFromModel: function (model) {\n var modelOptions = filterShapeDataItem(model || this.dataItem);\n this.options = deepExtend({}, this.options, modelOptions);\n this.redrawVisual();\n },\n updateOptionsFromModel: function (model, field) {\n if (this.diagram && this.diagram._isEditable) {\n var modelOptions = filterShapeDataItem(model || this.dataItem);\n if (model && field) {\n if (!dataviz.inArray(field, [\n 'x',\n 'y',\n 'width',\n 'height'\n ])) {\n if (this.options.visual) {\n this._redrawVisual();\n } else if (modelOptions.type) {\n this.options = deepExtend({}, this.options, modelOptions);\n this._redrawVisual();\n }\n if (this.options.content) {\n this._template();\n this.content(this.options.content);\n }\n } else {\n var bounds = this.bounds();\n bounds[field] = model[field];\n this.bounds(bounds);\n }\n } else {\n this.options = deepExtend({}, this.options, modelOptions);\n }\n }\n },\n _redrawVisual: function () {\n this.visual.clear();\n this._contentVisual = null;\n this.options.dataItem = this.dataItem;\n this.createShapeVisual();\n this.updateBounds();\n },\n redrawVisual: function () {\n this._redrawVisual();\n if (this.options.content) {\n this._template();\n this.content(this.options.content);\n }\n },\n updateModel: function (syncChanges) {\n var diagram = this.diagram;\n if (diagram && diagram._isEditable) {\n var bounds = this._bounds;\n var model = this.dataItem;\n if (model) {\n diagram._suspendModelRefresh();\n if (defined(model.x) && bounds.x !== model.x) {\n model.set('x', bounds.x);\n }\n if (defined(model.y) && bounds.y !== model.y) {\n model.set('y', bounds.y);\n }\n if (defined(model.width) && bounds.width !== model.width) {\n model.set('width', bounds.width);\n }\n if (defined(model.height) && bounds.height !== model.height) {\n model.set('height', bounds.height);\n }\n this.dataItem = model;\n diagram._resumeModelRefresh();\n if (syncChanges) {\n diagram._syncShapeChanges();\n }\n }\n }\n },\n updateBounds: function () {\n var bounds = this.visual._measure(true);\n var options = this.options;\n this.bounds(new Rect(options.x, options.y, bounds.width, bounds.height));\n this._rotate();\n this._alignContent();\n },\n content: function (content) {\n var result = this._content(content);\n this._alignContent();\n return result;\n },\n _alignContent: function () {\n var contentOptions = this.options.content || {};\n var contentVisual = this._contentVisual;\n if (contentVisual && contentOptions.align) {\n var containerRect = this.visual._measure();\n var aligner = new diagram.RectAlign(containerRect);\n var contentBounds = contentVisual.drawingElement.bbox(null);\n var contentRect = new Rect(0, 0, contentBounds.width(), contentBounds.height());\n var alignedBounds = aligner.align(contentRect, contentOptions.align);\n contentVisual.position(alignedBounds.topLeft());\n }\n },\n _createConnectors: function () {\n var options = this.options, length = options.connectors.length, connectorDefaults = options.connectorDefaults, connector, i;\n for (i = 0; i < length; i++) {\n connector = new Connector(this, deepExtend({}, connectorDefaults, options.connectors[i]));\n this.connectors.push(connector);\n }\n },\n bounds: function (value) {\n var bounds;\n if (value) {\n if (isString(value)) {\n switch (value) {\n case TRANSFORMED:\n bounds = this._transformedBounds();\n break;\n case ABSOLUTE:\n bounds = this._transformedBounds();\n var pan = this.diagram._pan;\n bounds.x += pan.x;\n bounds.y += pan.y;\n break;\n case ROTATED:\n bounds = this._rotatedBounds();\n break;\n default:\n bounds = this._bounds;\n }\n } else {\n this._setBounds(value);\n this._triggerBoundsChange();\n if (!(this.diagram && this.diagram._layouting)) {\n this.refreshConnections();\n }\n }\n } else {\n bounds = this._bounds;\n }\n return bounds;\n },\n _setBounds: function (rect) {\n var options = this.options;\n var topLeft = rect.topLeft();\n var x = options.x = topLeft.x;\n var y = options.y = topLeft.y;\n var width = options.width = math.max(rect.width, options.minWidth);\n var height = options.height = math.max(rect.height, options.minHeight);\n this._bounds = new Rect(x, y, width, height);\n this.visual.redraw({\n x: x,\n y: y,\n width: width,\n height: height\n });\n },\n position: function (point) {\n if (point) {\n this.bounds(new Rect(point.x, point.y, this._bounds.width, this._bounds.height));\n } else {\n return this._bounds.topLeft();\n }\n },\n clone: function () {\n var json = this.serialize();\n json.options.id = diagram.randomId();\n if (this.diagram && this.diagram._isEditable && defined(this.dataItem)) {\n json.options.dataItem = cloneDataItem(this.dataItem);\n }\n return new Shape(json.options);\n },\n select: function (value) {\n var diagram = this.diagram, selected, deselected;\n if (isUndefined(value)) {\n value = true;\n }\n if (this._canSelect()) {\n if (this.isSelected != value) {\n selected = [];\n deselected = [];\n this.isSelected = value;\n if (this.isSelected) {\n diagram._selectedItems.push(this);\n selected.push(this);\n } else {\n Utils.remove(diagram._selectedItems, this);\n deselected.push(this);\n }\n if (!diagram._internalSelection) {\n diagram._selectionChanged(selected, deselected);\n }\n return true;\n }\n }\n },\n rotate: function (angle, center, undoable) {\n var rotate = this.visual.rotate();\n if (angle !== undefined) {\n if (undoable !== false && this.diagram && this.diagram.undoRedoService && angle !== rotate.angle) {\n this.diagram.undoRedoService.add(new diagram.RotateUnit(this.diagram._resizingAdorner, [this], [rotate.angle]), false);\n }\n var b = this.bounds(), sc = new Point(b.width / 2, b.height / 2), deltaAngle, newPosition;\n if (center) {\n deltaAngle = angle - rotate.angle;\n newPosition = b.center().rotate(center, 360 - deltaAngle).minus(sc);\n this._rotationOffset = this._rotationOffset.plus(newPosition.minus(b.topLeft()));\n this.position(newPosition);\n }\n this.visual.rotate(angle, sc);\n this.options.rotation.angle = angle;\n if (this.diagram && this.diagram._connectorsAdorner) {\n this.diagram._connectorsAdorner.refresh();\n }\n this.refreshConnections();\n if (this.diagram) {\n this.diagram.trigger(ITEMROTATE, { item: this });\n }\n }\n return rotate;\n },\n connections: function (type) {\n var result = [], i, j, con, cons, ctr;\n for (i = 0; i < this.connectors.length; i++) {\n ctr = this.connectors[i];\n cons = ctr.connections;\n for (j = 0, cons; j < cons.length; j++) {\n con = cons[j];\n if (type == 'out') {\n var source = con.source();\n if (source.shape && source.shape == this) {\n result.push(con);\n }\n } else if (type == 'in') {\n var target = con.target();\n if (target.shape && target.shape == this) {\n result.push(con);\n }\n } else {\n result.push(con);\n }\n }\n }\n return result;\n },\n refreshConnections: function () {\n $.each(this.connections(), function () {\n this.refresh();\n });\n },\n getConnector: function (nameOrPoint) {\n var i, ctr;\n if (isString(nameOrPoint)) {\n nameOrPoint = nameOrPoint.toLocaleLowerCase();\n for (i = 0; i < this.connectors.length; i++) {\n ctr = this.connectors[i];\n if (ctr.options.name.toLocaleLowerCase() == nameOrPoint) {\n return ctr;\n }\n }\n } else if (nameOrPoint instanceof Point) {\n return closestConnector(nameOrPoint, this.connectors);\n } else {\n return this.connectors.length ? this.connectors[0] : null;\n }\n },\n getPosition: function (side) {\n var b = this.bounds(), fnName = side.charAt(0).toLowerCase() + side.slice(1);\n if (isFunction(b[fnName])) {\n return this._transformPoint(b[fnName]());\n }\n return b.center();\n },\n redraw: function (options) {\n if (options) {\n var shapeOptions = this.options;\n var boundsChange;\n this.shapeVisual.redraw(this._visualOptions(options));\n if (this._diffNumericOptions(options, [\n WIDTH,\n HEIGHT,\n X,\n Y\n ])) {\n this.bounds(new Rect(shapeOptions.x, shapeOptions.y, shapeOptions.width, shapeOptions.height));\n boundsChange = true;\n }\n if (options.connectors) {\n shapeOptions.connectors = options.connectors;\n this._updateConnectors();\n }\n shapeOptions = deepExtend(shapeOptions, options);\n if (options.rotation || boundsChange) {\n this._rotate();\n }\n if (shapeOptions.content) {\n this.content(shapeOptions.content);\n }\n }\n },\n _updateConnectors: function () {\n var connections = this.connections();\n this.connectors = [];\n this._createConnectors();\n var connection;\n var source;\n var target;\n for (var idx = 0; idx < connections.length; idx++) {\n connection = connections[idx];\n source = connection.source();\n target = connection.target();\n if (source.shape && source.shape === this) {\n connection.source(this.getConnector(source.options.name) || null);\n } else if (target.shape && target.shape === this) {\n connection.target(this.getConnector(target.options.name) || null);\n }\n connection.updateModel();\n }\n },\n _diffNumericOptions: diagram.diffNumericOptions,\n _visualOptions: function (options) {\n return {\n data: options.path,\n source: options.source,\n hover: options.hover,\n fill: options.fill,\n stroke: options.stroke\n };\n },\n _triggerBoundsChange: function () {\n if (this.diagram) {\n this.diagram.trigger(ITEMBOUNDSCHANGE, {\n item: this,\n bounds: this._bounds.clone()\n });\n }\n },\n _transformPoint: function (point) {\n var rotate = this.rotate(), bounds = this.bounds(), tl = bounds.topLeft();\n if (rotate.angle) {\n point.rotate(rotate.center().plus(tl), 360 - rotate.angle);\n }\n return point;\n },\n _transformedBounds: function () {\n var bounds = this.bounds(), tl = bounds.topLeft(), br = bounds.bottomRight();\n return Rect.fromPoints(this.diagram.modelToView(tl), this.diagram.modelToView(br));\n },\n _rotatedBounds: function () {\n var bounds = this.bounds().rotatedBounds(this.rotate().angle), tl = bounds.topLeft(), br = bounds.bottomRight();\n return Rect.fromPoints(tl, br);\n },\n _rotate: function () {\n var rotation = this.options.rotation;\n if (rotation && rotation.angle) {\n this.rotate(rotation.angle);\n }\n this._rotationOffset = new Point();\n },\n _hover: function (value) {\n var options = this.options, hover = options.hover, stroke = options.stroke, fill = options.fill;\n if (value && isDefined(hover.stroke)) {\n stroke = deepExtend({}, stroke, hover.stroke);\n }\n if (value && isDefined(hover.fill)) {\n fill = hover.fill;\n }\n this.shapeVisual.redraw({\n stroke: stroke,\n fill: fill\n });\n if (options.editable && options.editable.connect) {\n this.diagram._showConnectors(this, value);\n }\n },\n _hitTest: function (value) {\n if (this.visible()) {\n var bounds = this.bounds(), rotatedPoint, angle = this.rotate().angle;\n if (value.isEmpty && !value.isEmpty()) {\n return Intersect.rects(value, bounds, angle ? angle : 0);\n } else {\n rotatedPoint = value.clone().rotate(bounds.center(), angle);\n if (bounds.contains(rotatedPoint)) {\n return this;\n }\n }\n }\n },\n toJSON: function () {\n return { shapeId: this.options.id };\n },\n createShapeVisual: function () {\n var options = this.options;\n var visualOptions = this._visualOptions(options);\n var visualTemplate = options.visual;\n var type = (options.type + '').toLocaleLowerCase();\n var shapeVisual;\n visualOptions.width = options.width;\n visualOptions.height = options.height;\n if (isFunction(visualTemplate)) {\n shapeVisual = visualTemplate.call(this, options);\n } else if (visualOptions.data) {\n shapeVisual = new Path(visualOptions);\n translateToOrigin(shapeVisual);\n } else if (type == 'rectangle') {\n shapeVisual = new Rectangle(visualOptions);\n } else if (type == 'circle') {\n shapeVisual = new Circle(visualOptions);\n } else if (type == 'text') {\n shapeVisual = new TextBlock(visualOptions);\n } else if (type == 'image') {\n shapeVisual = new Image(visualOptions);\n } else {\n shapeVisual = new Path(visualOptions);\n }\n this.shapeVisual = shapeVisual;\n this.visual.append(this.shapeVisual);\n }\n });\n var Connection = DiagramElement.extend({\n init: function (from, to, options) {\n var that = this;\n DiagramElement.fn.init.call(that, options);\n this.updateOptionsFromModel();\n this._initRouter();\n that.path = new diagram.Polyline(that.options);\n that.path.fill(TRANSPARENT);\n that.visual.append(that.path);\n that._sourcePoint = that._targetPoint = new Point();\n that._setSource(from);\n that._setTarget(to);\n that.content(that.options.content);\n that.definers = [];\n if (defined(options) && options.points) {\n that.points(options.points);\n }\n },\n options: {\n hover: { stroke: {} },\n startCap: NONE,\n endCap: NONE,\n points: [],\n selectable: true,\n fromConnector: AUTO,\n toConnector: AUTO\n },\n _setOptionsFromModel: function (model) {\n this.updateOptionsFromModel(model || this.dataItem);\n },\n updateOptionsFromModel: function (model) {\n if (this.diagram && this.diagram._isEditable) {\n var dataMap = this.diagram._dataMap;\n var options = filterConnectionDataItem(model || this.dataItem);\n if (model) {\n if (defined(options.from)) {\n var from = dataMap[options.from];\n if (from && defined(options.fromConnector)) {\n from = from.getConnector(options.fromConnector);\n }\n this.source(from);\n } else if (defined(options.fromX) && defined(options.fromY)) {\n this.source(new Point(options.fromX, options.fromY));\n }\n if (defined(options.to)) {\n var to = dataMap[options.to];\n if (to && defined(options.toConnector)) {\n to = to.getConnector(options.toConnector);\n }\n this.target(to);\n } else if (defined(options.toX) && defined(options.toY)) {\n this.target(new Point(options.toX, options.toY));\n }\n if (defined(options.type) && this.type() !== options.type) {\n this.points([]);\n this.type(options.type);\n }\n this.dataItem = model;\n this._template();\n this.redraw(this.options);\n } else {\n this.options = deepExtend({}, options, this.options);\n }\n }\n },\n updateModel: function (syncChanges) {\n if (this.diagram && this.diagram._isEditable) {\n if (this.diagram.connectionsDataSource) {\n var model = this.diagram.connectionsDataSource.getByUid(this.dataItem.uid);\n if (model) {\n this.diagram._suspendModelRefresh();\n if (defined(this.options.fromX) && this.options.fromX !== null) {\n clearField('from', model);\n clearField('fromConnector', model);\n model.set('fromX', this.options.fromX);\n model.set('fromY', this.options.fromY);\n } else {\n model.set('from', this.options.from);\n if (defined(model.fromConnector)) {\n model.set('fromConnector', this.sourceConnector ? this.sourceConnector.options.name : null);\n }\n clearField('fromX', model);\n clearField('fromY', model);\n }\n if (defined(this.options.toX) && this.options.toX !== null) {\n clearField('to', model);\n clearField('toConnector', model);\n model.set('toX', this.options.toX);\n model.set('toY', this.options.toY);\n } else {\n model.set('to', this.options.to);\n if (defined(model.toConnector)) {\n model.set('toConnector', this.targetConnector ? this.targetConnector.options.name : null);\n }\n clearField('toX', model);\n clearField('toY', model);\n }\n if (defined(this.options.type) && defined(model.type)) {\n model.set('type', this.options.type);\n }\n this.dataItem = model;\n this.diagram._resumeModelRefresh();\n if (syncChanges) {\n this.diagram._syncConnectionChanges();\n }\n }\n }\n }\n },\n sourcePoint: function () {\n return this._resolvedSourceConnector ? this._resolvedSourceConnector.position() : this._sourcePoint;\n },\n _setSource: function (source) {\n var shapeSource = source instanceof Shape;\n var defaultConnector = this.options.fromConnector || AUTO;\n var dataItem;\n if (shapeSource && !source.getConnector(defaultConnector)) {\n return;\n }\n if (source !== undefined) {\n this.from = source;\n }\n this._removeFromSourceConnector();\n if (source === null) {\n if (this.sourceConnector) {\n this._sourcePoint = (this._resolvedSourceConnector || this.sourceConnector).position();\n this._clearSourceConnector();\n this._setFromOptions(null, this._sourcePoint);\n }\n } else if (source instanceof Connector) {\n dataItem = source.shape.dataItem;\n if (dataItem) {\n this._setFromOptions(dataItem.id);\n }\n this.sourceConnector = source;\n this.sourceConnector.connections.push(this);\n } else if (source instanceof Point) {\n this._setFromOptions(null, source);\n this._sourcePoint = source;\n if (this.sourceConnector) {\n this._clearSourceConnector();\n }\n } else if (shapeSource) {\n dataItem = source.dataItem;\n if (dataItem) {\n this._setFromOptions(dataItem.id);\n }\n this.sourceConnector = source.getConnector(defaultConnector);\n this.sourceConnector.connections.push(this);\n }\n },\n source: function (source, undoable) {\n if (isDefined(source)) {\n if (undoable && this.diagram) {\n this.diagram.undoRedoService.addCompositeItem(new diagram.ConnectionEditUnit(this, source));\n }\n this._setSource(source);\n this.refresh();\n }\n return this.sourceConnector ? this.sourceConnector : this._sourcePoint;\n },\n _setFromOptions: function (from, fromPoint) {\n this.options.from = from;\n if (fromPoint) {\n this.options.fromX = fromPoint.x;\n this.options.fromY = fromPoint.y;\n } else {\n this.options.fromX = null;\n this.options.fromY = null;\n }\n },\n sourceDefiner: function (value) {\n if (value) {\n if (value instanceof diagram.PathDefiner) {\n value.left = null;\n this._sourceDefiner = value;\n this.source(value.point);\n } else {\n throw 'The sourceDefiner needs to be a PathDefiner.';\n }\n } else {\n if (!this._sourceDefiner) {\n this._sourceDefiner = new diagram.PathDefiner(this.sourcePoint(), null, null);\n }\n return this._sourceDefiner;\n }\n },\n targetPoint: function () {\n return this._resolvedTargetConnector ? this._resolvedTargetConnector.position() : this._targetPoint;\n },\n _setTarget: function (target) {\n var shapeTarget = target instanceof Shape;\n var defaultConnector = this.options.toConnector || AUTO;\n var dataItem;\n if (shapeTarget && !target.getConnector(defaultConnector)) {\n return;\n }\n if (target !== undefined) {\n this.to = target;\n }\n this._removeFromTargetConnector();\n if (target === null) {\n if (this.targetConnector) {\n this._targetPoint = (this._resolvedTargetConnector || this.targetConnector).position();\n this._clearTargetConnector();\n this._setToOptions(null, this._targetPoint);\n }\n } else if (target instanceof Connector) {\n dataItem = target.shape.dataItem;\n if (dataItem) {\n this._setToOptions(dataItem.id);\n }\n this.targetConnector = target;\n this.targetConnector.connections.push(this);\n } else if (target instanceof Point) {\n this._setToOptions(null, target);\n this._targetPoint = target;\n if (this.targetConnector) {\n this._clearTargetConnector();\n }\n } else if (shapeTarget) {\n dataItem = target.dataItem;\n if (dataItem) {\n this._setToOptions(dataItem.id);\n }\n this.targetConnector = target.getConnector(defaultConnector);\n this.targetConnector.connections.push(this);\n }\n },\n target: function (target, undoable) {\n if (isDefined(target)) {\n if (undoable && this.diagram) {\n this.diagram.undoRedoService.addCompositeItem(new diagram.ConnectionEditUnit(this, undefined, target));\n }\n this._setTarget(target);\n this.refresh();\n }\n return this.targetConnector ? this.targetConnector : this._targetPoint;\n },\n _setToOptions: function (to, toPoint) {\n this.options.to = to;\n if (toPoint) {\n this.options.toX = toPoint.x;\n this.options.toY = toPoint.y;\n } else {\n this.options.toX = null;\n this.options.toY = null;\n }\n },\n targetDefiner: function (value) {\n if (value) {\n if (value instanceof diagram.PathDefiner) {\n value.right = null;\n this._targetDefiner = value;\n this.target(value.point);\n } else {\n throw 'The sourceDefiner needs to be a PathDefiner.';\n }\n } else {\n if (!this._targetDefiner) {\n this._targetDefiner = new diagram.PathDefiner(this.targetPoint(), null, null);\n }\n return this._targetDefiner;\n }\n },\n _updateConnectors: function () {\n this._updateConnector(this.source(), 'source');\n this._updateConnector(this.target(), 'target');\n },\n _updateConnector: function (instance, name) {\n var that = this;\n var diagram = that.diagram;\n if (instance instanceof Connector && !diagram.getShapeById(instance.shape.id)) {\n var dataItem = instance.shape.dataItem;\n var connectorName = instance.options.name;\n var setNewTarget = function () {\n var shape = diagram._dataMap[dataItem.id];\n instance = shape.getConnector(connectorName);\n that[name](instance, false);\n that.updateModel();\n };\n if (diagram._dataMap[dataItem.id]) {\n setNewTarget();\n } else {\n var inactiveItem = diagram._inactiveShapeItems.getByUid(dataItem.uid);\n if (inactiveItem) {\n diagram._deferredConnectionUpdates.push(inactiveItem.onActivate(setNewTarget));\n }\n }\n } else {\n that[name](instance, false);\n }\n },\n content: function (content) {\n var result = this._content(content);\n if (defined(content)) {\n this._alignContent();\n }\n return result;\n },\n _createContentVisual: function (options) {\n var visual;\n if (isFunction(options.visual)) {\n visual = options.visual.call(this, options);\n } else if (options.text) {\n visual = new TextBlock(options);\n }\n if (visual) {\n this._contentVisual = visual;\n visual._includeInBBox = false;\n this.visual.append(visual);\n }\n return visual;\n },\n _updateContentVisual: function (options) {\n if (isFunction(options.visual)) {\n this.visual.remove(this._contentVisual);\n this._createContentVisual(options);\n } else {\n this._contentVisual.redraw(options);\n }\n },\n _alignContent: function () {\n if (this._contentVisual) {\n var offset = CONNECTION_CONTENT_OFFSET;\n var points = this.allPoints();\n var endIdx = math.floor(points.length / 2);\n var startIdx = endIdx - 1;\n while (startIdx > 0 && points[startIdx].equals(points[endIdx])) {\n startIdx--;\n endIdx++;\n }\n var endPoint = points[endIdx];\n var startPoint = points[startIdx];\n var boundingBox = this._contentVisual._measure();\n var width = boundingBox.width;\n var height = boundingBox.height;\n var alignToPath = points.length % 2 === 0;\n var distance = startPoint.distanceTo(endPoint);\n if (alignToPath && points.length > 2 && distance > 0 && (startPoint.y === endPoint.y && distance < width || startPoint.x === endPoint.x && distance < height)) {\n alignToPath = false;\n offset = 0;\n }\n var point;\n if (alignToPath) {\n var angle = draw.util.deg(math.atan2(endPoint.y - startPoint.y, endPoint.x - startPoint.x));\n point = new Point((endPoint.x - startPoint.x) / 2 + startPoint.x, (endPoint.y - startPoint.y) / 2 + startPoint.y);\n if (math.abs(angle) === 90) {\n point.x += offset;\n point.y -= height / 2;\n } else if (angle % 180 === 0) {\n point.x -= width / 2;\n point.y -= height + offset;\n } else if (angle < -90 || 0 < angle && angle < 90) {\n point.y -= height;\n } else if (angle < 0 || angle > 90) {\n point.x -= width;\n point.y -= height;\n }\n } else {\n var midIdx = math.floor(points.length / 2);\n point = points[midIdx].clone();\n startPoint = points[midIdx - 1];\n endPoint = points[midIdx + 1];\n var offsetX = startPoint.x <= point.x && endPoint.x <= point.x ? offset : -boundingBox.width - offset;\n var offsetY = startPoint.y <= point.y && endPoint.y <= point.y ? offset : -boundingBox.height - offset;\n point.x += offsetX;\n point.y += offsetY;\n }\n this._contentVisual.position(point);\n }\n },\n select: function (value) {\n var diagram = this.diagram, selected, deselected;\n if (this._canSelect()) {\n if (this.isSelected !== value) {\n this.isSelected = value;\n selected = [];\n deselected = [];\n if (this.isSelected) {\n this.adorner = new ConnectionEditAdorner(this, this.options.selection);\n diagram._adorn(this.adorner, true);\n diagram._selectedItems.push(this);\n selected.push(this);\n } else {\n if (this.adorner) {\n diagram._adorn(this.adorner, false);\n Utils.remove(diagram._selectedItems, this);\n this.adorner = undefined;\n deselected.push(this);\n }\n }\n if (this.adorner) {\n this.adorner.refresh();\n }\n if (!diagram._internalSelection) {\n diagram._selectionChanged(selected, deselected);\n }\n return true;\n }\n }\n },\n bounds: function (value) {\n if (value && !isString(value)) {\n this._bounds = value;\n } else {\n return this._bounds;\n }\n },\n type: function (value) {\n var options = this.options;\n if (value) {\n if (value !== options.type) {\n options.type = value;\n this._initRouter();\n this.refresh();\n }\n } else {\n return options.type;\n }\n },\n _initRouter: function () {\n var type = (this.options.type || '').toLowerCase();\n if (type == CASCADING) {\n this._router = new CascadingRouter(this);\n } else {\n this._router = new PolylineRouter(this);\n }\n },\n points: function (value) {\n if (value) {\n this.definers = [];\n for (var i = 0; i < value.length; i++) {\n var definition = value[i];\n if (definition instanceof diagram.Point) {\n this.definers.push(new diagram.PathDefiner(definition));\n } else if (definition.hasOwnProperty('x') && definition.hasOwnProperty('y')) {\n this.definers.push(new diagram.PathDefiner(new Point(definition.x, definition.y)));\n } else {\n throw 'A Connection point needs to be a Point or an object with x and y properties.';\n }\n }\n } else {\n var pts = [];\n if (isDefined(this.definers)) {\n for (var k = 0; k < this.definers.length; k++) {\n pts.push(this.definers[k].point);\n }\n }\n return pts;\n }\n },\n allPoints: function () {\n var pts = [this.sourcePoint()];\n if (this.definers) {\n for (var k = 0; k < this.definers.length; k++) {\n pts.push(this.definers[k].point);\n }\n }\n pts.push(this.targetPoint());\n return pts;\n },\n refresh: function () {\n this._resolveConnectors();\n this._refreshPath();\n this._alignContent();\n if (this.adorner) {\n this.adorner.refresh();\n }\n },\n _resolveConnectors: function () {\n var connection = this, sourcePoint, targetPoint, sourceConnectors, targetConnectors, source = connection.source(), target = connection.target();\n if (source instanceof Point) {\n sourcePoint = source;\n } else if (source instanceof Connector) {\n if (isAutoConnector(source)) {\n sourceConnectors = source.shape.connectors;\n } else {\n sourceConnectors = [source];\n }\n }\n if (target instanceof Point) {\n targetPoint = target;\n } else if (target instanceof Connector) {\n if (isAutoConnector(target)) {\n targetConnectors = target.shape.connectors;\n } else {\n targetConnectors = [target];\n }\n }\n if (sourcePoint) {\n if (targetConnectors) {\n connection._resolvedTargetConnector = closestConnector(sourcePoint, targetConnectors);\n }\n } else if (sourceConnectors) {\n if (targetPoint) {\n connection._resolvedSourceConnector = closestConnector(targetPoint, sourceConnectors);\n } else if (targetConnectors) {\n this._resolveAutoConnectors(sourceConnectors, targetConnectors);\n }\n }\n },\n _resolveAutoConnectors: function (sourceConnectors, targetConnectors) {\n var minNonConflict = MAXINT;\n var minDist = MAXINT;\n var minNonConflictSource, minNonConflictTarget;\n var sourcePoint, targetPoint;\n var minSource, minTarget;\n var sourceConnector, targetConnector;\n var sourceIdx, targetIdx;\n var dist;\n for (sourceIdx = 0; sourceIdx < sourceConnectors.length; sourceIdx++) {\n sourceConnector = sourceConnectors[sourceIdx];\n if (!isAutoConnector(sourceConnector)) {\n sourcePoint = sourceConnector.position();\n for (targetIdx = 0; targetIdx < targetConnectors.length; targetIdx++) {\n targetConnector = targetConnectors[targetIdx];\n if (!isAutoConnector(targetConnector)) {\n targetPoint = targetConnector.position();\n dist = math.round(sourcePoint.distanceTo(targetPoint));\n if (dist < minNonConflict && this.diagram && this._testRoutePoints(sourcePoint, targetPoint, sourceConnector, targetConnector)) {\n minNonConflict = dist;\n minNonConflictSource = sourceConnector;\n minNonConflictTarget = targetConnector;\n }\n if (dist < minDist) {\n minSource = sourceConnector;\n minTarget = targetConnector;\n minDist = dist;\n }\n }\n }\n }\n }\n if (minNonConflictSource) {\n minSource = minNonConflictSource;\n minTarget = minNonConflictTarget;\n }\n this._resolvedSourceConnector = minSource;\n this._resolvedTargetConnector = minTarget;\n },\n _testRoutePoints: function (sourcePoint, targetPoint, sourceConnector, targetConnector) {\n var router = this._router;\n var passRoute = true;\n if (router instanceof CascadingRouter) {\n var points = router.routePoints(sourcePoint, targetPoint, sourceConnector, targetConnector), start, end, rect, exclude;\n exclude = this._getRouteExclude(sourcePoint, targetPoint, sourceConnector.shape, targetConnector.shape);\n points.unshift(sourcePoint);\n points.push(targetPoint);\n for (var idx = 1; idx < points.length; idx++) {\n start = points[idx - 1];\n end = points[idx];\n rect = new Rect(math.min(start.x, end.x), math.min(start.y, end.y), math.abs(start.x - end.x), math.abs(start.y - end.y));\n if (rect.width > 0) {\n rect.x++;\n rect.width -= 2;\n }\n if (rect.height > 0) {\n rect.y++;\n rect.height -= 2;\n }\n if (!rect.isEmpty() && this.diagram._shapesQuadTree.hitTestRect(rect, exclude)) {\n passRoute = false;\n break;\n }\n }\n }\n return passRoute;\n },\n _getRouteExclude: function (sourcePoint, targetPoint, sourceShape, targetShape) {\n var exclude = [];\n if (this._isPointInsideShape(sourcePoint, sourceShape)) {\n exclude.push(sourceShape);\n }\n if (this._isPointInsideShape(targetPoint, targetShape)) {\n exclude.push(targetShape);\n }\n return exclude;\n },\n _isPointInsideShape: function (point, shape) {\n var bounds = shape.bounds(), rotatedPoint, angle = shape.rotate().angle, pointX, pointY, boundsX = bounds.x, boundsY = bounds.y;\n rotatedPoint = point.clone().rotate(bounds.center(), angle);\n pointX = rotatedPoint.x;\n pointY = rotatedPoint.y;\n return pointX > boundsX && pointX < boundsX + bounds.width && pointY > boundsY && pointY < boundsY + bounds.height;\n },\n redraw: function (options) {\n if (options) {\n this.options = deepExtend({}, this.options, options);\n var points = this.options.points;\n if (defined(points) && points.length > 0) {\n this.points(points);\n this._refreshPath();\n }\n if (options && options.content || options.text) {\n this.content(options.content);\n }\n this.path.redraw({\n fill: options.fill,\n stroke: options.stroke,\n startCap: options.startCap,\n endCap: options.endCap\n });\n }\n },\n clone: function () {\n var json = this.serialize();\n if (this.diagram && this.diagram._isEditable && defined(this.dataItem)) {\n json.options.dataItem = cloneDataItem(this.dataItem);\n }\n return new Connection(this.from, this.to, json.options);\n },\n serialize: function () {\n var from = this.from.toJSON ? this.from.toJSON : this.from.toString(), to = this.to.toJSON ? this.to.toJSON : this.to.toString();\n var json = deepExtend({}, {\n options: this.options,\n from: from,\n to: to\n });\n if (defined(this.dataItem)) {\n json.dataItem = this.dataItem.toString();\n }\n json.options.points = this.points();\n return json;\n },\n _hitTest: function (value) {\n if (this.visible()) {\n var p = new Point(value.x, value.y), from = this.sourcePoint(), to = this.targetPoint();\n if (value.isEmpty && !value.isEmpty() && value.contains(from) && value.contains(to)) {\n return this;\n }\n if (this._router.hitTest(p)) {\n return this;\n }\n }\n },\n _hover: function (value) {\n var color = (this.options.stroke || {}).color;\n if (value && isDefined(this.options.hover.stroke.color)) {\n color = this.options.hover.stroke.color;\n }\n this.path.redraw({ stroke: { color: color } });\n },\n _refreshPath: function () {\n if (!defined(this.path)) {\n return;\n }\n this._drawPath();\n this.bounds(this._router.getBounds());\n },\n _drawPath: function () {\n if (this._router) {\n this._router.route();\n }\n var source = this.sourcePoint();\n var target = this.targetPoint();\n var points = this.points();\n this.path.redraw({ points: [source].concat(points, [target]) });\n },\n _clearSourceConnector: function () {\n this.sourceConnector = undefined;\n this._resolvedSourceConnector = undefined;\n },\n _clearTargetConnector: function () {\n this.targetConnector = undefined;\n this._resolvedTargetConnector = undefined;\n },\n _removeFromSourceConnector: function () {\n if (this.sourceConnector) {\n Utils.remove(this.sourceConnector.connections, this);\n }\n },\n _removeFromTargetConnector: function () {\n if (this.targetConnector) {\n Utils.remove(this.targetConnector.connections, this);\n }\n },\n toJSON: function () {\n var connection = this;\n var from, to, point;\n if (connection.from && connection.from.toJSON) {\n from = connection.from.toJSON();\n } else {\n point = connection._sourcePoint;\n from = {\n x: point.x,\n y: point.y\n };\n }\n if (connection.to && connection.to.toJSON) {\n to = connection.to.toJSON();\n } else {\n point = connection._targetPoint;\n to = {\n x: point.x,\n y: point.y\n };\n }\n return {\n from: from,\n to: to\n };\n }\n });\n var Diagram = Widget.extend({\n init: function (element, userOptions) {\n var that = this;\n kendo.destroy(element);\n Widget.fn.init.call(that, element, userOptions);\n that._initTheme();\n that._initElements();\n that._extendLayoutOptions(that.options);\n that._initDefaults(userOptions);\n that._interactionDefaults();\n that._initCanvas();\n that.mainLayer = new Group({ id: 'main-layer' });\n that.canvas.append(that.mainLayer);\n that._shapesQuadTree = new ShapesQuadTree(that);\n that._pan = new Point();\n that._adorners = [];\n that.adornerLayer = new Group({ id: 'adorner-layer' });\n that.canvas.append(that.adornerLayer);\n that._createHandlers();\n that._initialize();\n that._resizingAdorner = new ResizingAdorner(that, { editable: that.options.editable });\n that._connectorsAdorner = new ConnectorsAdorner(that);\n that._adorn(that._resizingAdorner, true);\n that._adorn(that._connectorsAdorner, true);\n that.selector = new Selector(that);\n that._clipboard = [];\n that.pauseMouseHandlers = false;\n that._fetchFreshData();\n that._createGlobalToolBar();\n that._createOptionElements();\n that.zoom(that.options.zoom);\n that.canvas.draw();\n },\n options: {\n name: 'Diagram',\n theme: 'default',\n layout: '',\n zoomRate: 0.1,\n zoom: 1,\n zoomMin: 0,\n zoomMax: 2,\n dataSource: {},\n draggable: true,\n template: '',\n autoBind: true,\n editable: {\n rotate: {},\n resize: {},\n text: true,\n tools: [],\n drag: {\n snap: {\n size: 10,\n angle: 10\n }\n },\n remove: true\n },\n pannable: {},\n selectable: { key: 'none' },\n tooltip: {\n enabled: true,\n format: '{0}'\n },\n copy: {\n enabled: true,\n offsetX: 20,\n offsetY: 20\n },\n shapeDefaults: diagram.shapeDefaults({ undoable: true }),\n connectionDefaults: {\n editable: { tools: [] },\n type: CASCADING\n },\n shapes: [],\n connections: []\n },\n events: [\n ZOOM_END,\n ZOOM_START,\n PAN,\n SELECT,\n ITEMROTATE,\n ITEMBOUNDSCHANGE,\n CHANGE,\n CLICK,\n MOUSE_ENTER,\n MOUSE_LEAVE,\n 'toolBarClick',\n 'save',\n 'cancel',\n 'edit',\n 'remove',\n 'add',\n 'dataBound',\n DRAG_START,\n DRAG,\n DRAG_END\n ],\n items: function () {\n return $();\n },\n _createGlobalToolBar: function () {\n var editable = this.options.editable;\n if (editable) {\n var tools = editable.tools;\n if (this._isEditable && tools !== false && (!tools || tools.length === 0)) {\n tools = [\n 'createShape',\n 'undo',\n 'redo',\n 'rotateClockwise',\n 'rotateAnticlockwise'\n ];\n }\n if (tools && tools.length) {\n this.toolBar = new DiagramToolBar(this, {\n tools: tools || {},\n click: proxy(this._toolBarClick, this),\n modal: false\n });\n this.toolBar.element.css({ textAlign: 'left' });\n this.element.prepend(this.toolBar.element);\n this._resize();\n }\n }\n },\n createShape: function () {\n if (this.editor && this.editor.end() || !this.editor) {\n var dataSource = this.dataSource;\n var view = dataSource.view() || [];\n var index = view.length;\n var model = createModel(dataSource, {});\n var shape = this._createShape(model, {});\n if (!this.trigger('add', { shape: shape })) {\n dataSource.insert(index, model);\n var inactiveItem = this._inactiveShapeItems.getByUid(model.uid);\n inactiveItem.element = shape;\n this.edit(shape);\n }\n }\n },\n _createShape: function (dataItem, options) {\n options = deepExtend({}, this.options.shapeDefaults, options);\n options.dataItem = dataItem;\n var shape = new Shape(options, this);\n return shape;\n },\n createConnection: function () {\n if (this.editor && this.editor.end() || !this.editor) {\n var connectionsDataSource = this.connectionsDataSource;\n var view = connectionsDataSource.view() || [];\n var index = view.length;\n var model = createModel(connectionsDataSource, {});\n var connection = this._createConnection(model);\n if (!this.trigger('add', { connection: connection })) {\n this._connectionsDataMap[model.uid] = connection;\n connectionsDataSource.insert(index, model);\n this.addConnection(connection, false);\n this.edit(connection);\n }\n }\n },\n _createConnection: function (dataItem, source, target) {\n var options = deepExtend({}, this.options.connectionDefaults);\n options.dataItem = dataItem;\n var connection = new Connection(source || new Point(), target || new Point(), options);\n return connection;\n },\n editModel: function (dataItem, editorType) {\n this.cancelEdit();\n var editors, template;\n var editable = this.options.editable;\n if (editorType == 'shape') {\n editors = editable.shapeEditors;\n template = editable.shapeTemplate;\n } else if (editorType == 'connection') {\n var connectionSelectorHandler = proxy(connectionSelector, this);\n editors = deepExtend({}, {\n from: connectionSelectorHandler,\n to: connectionSelectorHandler\n }, editable.connectionEditors);\n template = editable.connectionTemplate;\n } else {\n return;\n }\n this.editor = new PopupEditor(this.element, {\n update: proxy(this._update, this),\n cancel: proxy(this._cancel, this),\n model: dataItem,\n type: editorType,\n target: this,\n editors: editors,\n template: template\n });\n this.trigger('edit', this._editArgs());\n },\n edit: function (item) {\n if (item.dataItem) {\n var editorType = item instanceof Shape ? 'shape' : 'connection';\n this.editModel(item.dataItem, editorType);\n }\n },\n cancelEdit: function () {\n if (this.editor) {\n this._getEditDataSource().cancelChanges(this.editor.model);\n this._destroyEditor();\n }\n },\n saveEdit: function () {\n if (this.editor && this.editor.end() && !this.trigger('save', this._editArgs())) {\n this._getEditDataSource().sync();\n }\n },\n _update: function () {\n if (this.editor && this.editor.end() && !this.trigger('save', this._editArgs())) {\n this._getEditDataSource().sync();\n this._destroyEditor();\n }\n },\n _cancel: function () {\n if (this.editor && !this.trigger('cancel', this._editArgs())) {\n var model = this.editor.model;\n this._getEditDataSource().cancelChanges(model);\n var element = this._connectionsDataMap[model.uid] || this._dataMap[model.id];\n if (element) {\n element._setOptionsFromModel(model);\n }\n this._destroyEditor();\n }\n },\n _getEditDataSource: function () {\n return this.editor.options.type === 'shape' ? this.dataSource : this.connectionsDataSource;\n },\n _editArgs: function () {\n var result = { container: this.editor.wrapper };\n result[this.editor.options.type] = this.editor.model;\n return result;\n },\n _destroyEditor: function () {\n if (this.editor) {\n this.editor.close();\n this.editor = null;\n }\n },\n _initElements: function () {\n this.wrapper = this.element.empty().css('position', 'relative').attr('tabindex', 0).addClass('k-widget k-diagram');\n this.scrollable = $('
        ').appendTo(this.element);\n },\n _initDefaults: function (userOptions) {\n var options = this.options;\n var editable = options.editable;\n var shapeDefaults = options.shapeDefaults;\n var connectionDefaults = options.connectionDefaults;\n var userShapeDefaults = (userOptions || {}).shapeDefaults;\n if (editable === false) {\n shapeDefaults.editable = false;\n connectionDefaults.editable = false;\n } else {\n copyDefaultOptions(editable, shapeDefaults.editable, [\n 'drag',\n 'remove',\n 'connect'\n ]);\n copyDefaultOptions(editable, connectionDefaults.editable, [\n 'drag',\n 'remove'\n ]);\n }\n if (userShapeDefaults && userShapeDefaults.connectors) {\n options.shapeDefaults.connectors = userShapeDefaults.connectors;\n }\n },\n _interactionDefaults: function () {\n var options = this.options;\n var selectable = options.selectable;\n var pannable = options.pannable;\n var mobile = kendo.support.mobileOS;\n if (selectable && !defined(selectable.multiple)) {\n options.selectable = deepExtend({ multiple: mobile ? false : true }, options.selectable);\n }\n if (pannable && !defined(pannable.key)) {\n options.pannable = deepExtend({ key: mobile ? 'none' : 'ctrl' }, options.pannable);\n }\n },\n _initCanvas: function () {\n var canvasContainer = $('
        ').appendTo(this.scrollable)[0];\n var viewPort = this.viewport();\n this.canvas = new Canvas(canvasContainer, {\n width: viewPort.width || DEFAULT_CANVAS_WIDTH,\n height: viewPort.height || DEFAULT_CANVAS_HEIGHT\n });\n },\n _createHandlers: function () {\n var that = this;\n var element = that.element;\n element.on(MOUSEWHEEL_NS, proxy(that._wheel, that)).on('keydown' + NS, proxy(that._keydown, that));\n that._userEvents = new kendo.UserEvents(this.scrollable, {\n multiTouch: true,\n fastTap: true,\n tap: proxy(that._tap, that),\n start: proxy(that._dragStart, that),\n move: proxy(that._drag, that),\n end: proxy(that._dragEnd, that),\n gesturestart: proxy(that._gestureStart, that),\n gesturechange: proxy(that._gestureChange, that),\n gestureend: proxy(that._gestureEnd, that)\n });\n that.toolService = new ToolService(that);\n this.scrollable.on('mouseover' + NS, proxy(that._mouseover, that)).on('mouseout' + NS, proxy(that._mouseout, that)).on('mousemove' + NS, proxy(that._mouseMove, that)).on('mousedown' + NS, proxy(that._mouseDown, that)).on('mouseup' + NS, proxy(that._mouseUp, that));\n this._syncHandler = proxy(that._syncChanges, that);\n that._resizeHandler = proxy(that.resize, that, false);\n kendo.onResize(that._resizeHandler);\n this.bind(ZOOM_START, proxy(that._destroyToolBar, that));\n this.bind(PAN, proxy(that._destroyToolBar, that));\n },\n _dragStart: function (e) {\n this._pauseMouseHandlers = true;\n var point = this._eventPositions(e, true);\n var event = e.event;\n if (this.toolService.start(point, this._meta(event))) {\n this._destroyToolBar();\n event.preventDefault();\n }\n },\n _drag: function (e) {\n var p = this._eventPositions(e);\n var event = e.event;\n if (this.toolService.move(p, this._meta(event))) {\n event.preventDefault();\n }\n },\n _dragEnd: function (e) {\n this._pauseMouseHandlers = false;\n var p = this._eventPositions(e);\n var event = e.event;\n if (this.toolService.end(p, this._meta(event))) {\n this._createToolBar();\n event.preventDefault();\n }\n },\n _mouseMove: function (e) {\n if (!this._pauseMouseHandlers) {\n var p = this._eventPositions(e);\n this.toolService._updateHoveredItem(p);\n this.toolService._updateCursor(p);\n }\n },\n _mouseDown: function () {\n this._pauseMouseHandlers = true;\n },\n _mouseUp: function () {\n this._pauseMouseHandlers = false;\n },\n _tap: function (e) {\n var toolService = this.toolService;\n var selectable = this.options.selectable;\n var point = this._eventPositions(e);\n var focused = this.focus();\n toolService._updateHoveredItem(point);\n if (toolService.hoveredItem) {\n var item = toolService.hoveredItem;\n this.trigger('click', {\n item: item,\n point: point\n });\n if (selectable && item.options.selectable !== false) {\n var multiple = selectable.multiple !== false;\n var ctrlPressed = kendo.support.mobileOS || this._meta(e.event).ctrlKey;\n if (item.isSelected) {\n if (ctrlPressed) {\n this._destroyToolBar();\n item.select(false);\n } else {\n this._createToolBar(focused);\n }\n } else {\n this._destroyToolBar();\n this.select(item, { addToSelection: multiple && ctrlPressed });\n this._createToolBar(focused);\n }\n }\n } else if (selectable) {\n this._destroyToolBar();\n this.deselect();\n }\n },\n _keydown: function (e) {\n if (this.toolService.keyDown(e.keyCode, this._meta(e))) {\n e.preventDefault();\n }\n },\n _wheel: function (e) {\n var delta = mwDelta(e), p = this._eventPositions(e), meta = deepExtend(this._meta(e), { delta: delta });\n if (this.toolService.wheel(p, meta)) {\n e.preventDefault();\n }\n },\n _meta: function (e) {\n return {\n ctrlKey: e.ctrlKey,\n metaKey: e.metaKey,\n altKey: e.altKey,\n shiftKey: e.shiftKey,\n type: e.type\n };\n },\n _eventPositions: function (e, start) {\n var point;\n if (e.touch) {\n var field = start ? 'startLocation' : 'location';\n point = new Point(e.x[field], e.y[field]);\n } else {\n var event = e.originalEvent;\n point = new Point(event.pageX, event.pageY);\n }\n return this.documentToModel(point);\n },\n _gestureStart: function (e) {\n this._destroyToolBar();\n this.scroller.disable();\n var initialCenter = this.documentToModel(new Point(e.center.x, e.center.y));\n var eventArgs = {\n point: initialCenter,\n zoom: this.zoom()\n };\n if (this.trigger(ZOOM_START, eventArgs)) {\n return;\n }\n this._gesture = e;\n this._initialCenter = initialCenter;\n },\n _gestureChange: function (e) {\n var previousGesture = this._gesture;\n var initialCenter = this._initialCenter;\n var center = this.documentToView(new Point(e.center.x, e.center.y));\n var scaleDelta = e.distance / previousGesture.distance;\n var zoom = this._zoom;\n var updateZoom = false;\n if (math.abs(scaleDelta - 1) >= MOBILE_ZOOM_RATE) {\n this._zoom = zoom = this._getValidZoom(zoom * scaleDelta);\n this.options.zoom = zoom;\n this._gesture = e;\n updateZoom = true;\n }\n var zoomedPoint = initialCenter.times(zoom);\n var pan = center.minus(zoomedPoint);\n if (updateZoom || this._pan.distanceTo(pan) >= MOBILE_PAN_DISTANCE) {\n this._panTransform(pan);\n this._updateAdorners();\n }\n e.preventDefault();\n },\n _gestureEnd: function () {\n if (this.options.pannable !== false) {\n this.scroller.enable();\n }\n this.trigger(ZOOM_END, {\n point: this._initialCenter,\n zoom: this.zoom()\n });\n },\n _resize: function () {\n var viewport = this.viewport();\n if (this.canvas) {\n this.canvas.size(viewport);\n }\n if (this.scrollable && this.toolBar) {\n this.scrollable.height(viewport.height);\n }\n },\n _mouseover: function (e) {\n var node = e.target._kendoNode;\n if (node && node.srcElement._hover) {\n node.srcElement._hover(true, node.srcElement);\n }\n },\n _mouseout: function (e) {\n var node = e.target._kendoNode;\n if (node && node.srcElement._hover) {\n node.srcElement._hover(false, node.srcElement);\n }\n },\n _initTheme: function () {\n var that = this;\n var themeName = ((that.options || {}).theme || '').toLowerCase();\n var themes = dataviz.ui.themes || {};\n var themeOptions;\n if (SASS_THEMES.indexOf(themeName) != -1) {\n themeOptions = dataviz.autoTheme().diagram;\n } else {\n themeOptions = (themes[themeName] || {}).diagram;\n }\n that.options = deepExtend({}, themeOptions, that.options);\n if (that.options.editable === true) {\n deepExtend(that.options, { editable: (themeOptions || {}).editable });\n }\n },\n _createOptionElements: function () {\n var options = this.options;\n var shapesLength = options.shapes.length;\n if (shapesLength) {\n this._createShapes();\n }\n if (options.connections.length) {\n this._createConnections();\n }\n if (shapesLength && options.layout) {\n this.layout(options.layout);\n }\n },\n _createShapes: function () {\n var that = this, options = that.options, shapes = options.shapes, shape, i;\n for (i = 0; i < shapes.length; i++) {\n shape = shapes[i];\n that.addShape(shape);\n }\n },\n _createConnections: function () {\n var diagram = this, options = diagram.options, defaults = options.connectionDefaults, connections = options.connections, conn, source, target, i;\n for (i = 0; i < connections.length; i++) {\n conn = connections[i];\n source = diagram._findConnectionTarget(conn.from);\n target = diagram._findConnectionTarget(conn.to);\n diagram.connect(source, target, deepExtend({}, defaults, conn));\n }\n },\n _findConnectionTarget: function (options) {\n options = options || {};\n var diagram = this;\n var shapeId = isString(options) ? options : options.shapeId || options.id;\n var target;\n if (shapeId) {\n target = diagram.getShapeById(shapeId);\n if (options.connector) {\n target = target.getConnector(options.connector);\n }\n } else {\n target = new Point(options.x || 0, options.y || 0);\n }\n return target;\n },\n destroy: function () {\n var that = this;\n Widget.fn.destroy.call(that);\n if (this._userEvents) {\n this._userEvents.destroy();\n }\n kendo.unbindResize(that._resizeHandler);\n that.clear();\n that.element.off(NS);\n that.scroller.wrapper.off(NS);\n that.canvas.destroy(true);\n that.canvas = undefined;\n that._destroyEditor();\n that.destroyScroller();\n that._destroyGlobalToolBar();\n that._destroyToolBar();\n },\n destroyScroller: function () {\n var scroller = this.scroller;\n if (!scroller) {\n return;\n }\n scroller.destroy();\n scroller.element.remove();\n this.scroller = null;\n },\n save: function () {\n var json = {\n shapes: [],\n connections: []\n };\n var i, connection, shape;\n for (i = 0; i < this.shapes.length; i++) {\n shape = this.shapes[i];\n if (shape.options.serializable) {\n json.shapes.push(shape.options);\n }\n }\n for (i = 0; i < this.connections.length; i++) {\n connection = this.connections[i];\n json.connections.push(deepExtend({}, connection.options, connection.toJSON()));\n }\n return json;\n },\n focus: function () {\n if (!this.element.is(kendo._activeElement())) {\n var element = this.element, scrollContainer = element[0], containers = [], offsets = [], documentElement = document.documentElement, i;\n do {\n scrollContainer = scrollContainer.parentNode;\n if (scrollContainer.scrollHeight > scrollContainer.clientHeight) {\n containers.push(scrollContainer);\n offsets.push(scrollContainer.scrollTop);\n }\n } while (scrollContainer != documentElement);\n element.focus();\n for (i = 0; i < containers.length; i++) {\n containers[i].scrollTop = offsets[i];\n }\n return true;\n }\n },\n load: function (options) {\n this.clear();\n this.setOptions(options);\n this._createShapes();\n this._createConnections();\n },\n setOptions: function (options) {\n deepExtend(this.options, options);\n },\n clear: function () {\n var that = this;\n that.select(false);\n that.mainLayer.clear();\n that._shapesQuadTree.clear();\n that._initialize();\n },\n connect: function (source, target, options) {\n var connection;\n if (this.connectionsDataSource && this._isEditable) {\n var dataItem = this.connectionsDataSource.add({});\n connection = this._connectionsDataMap[dataItem.uid];\n connection.source(source);\n connection.target(target);\n connection.redraw(options);\n connection.updateModel();\n } else {\n connection = new Connection(source, target, deepExtend({}, this.options.connectionDefaults, options));\n this.addConnection(connection);\n }\n return connection;\n },\n connected: function (source, target) {\n for (var i = 0; i < this.connections.length; i++) {\n var c = this.connections[i];\n if (c.from == source && c.to == target) {\n return true;\n }\n }\n return false;\n },\n addConnection: function (connection, undoable) {\n if (undoable !== false) {\n this.undoRedoService.add(new diagram.AddConnectionUnit(connection, this), false);\n }\n connection.diagram = this;\n connection._setOptionsFromModel();\n connection.refresh();\n this.mainLayer.append(connection.visual);\n this.connections.push(connection);\n this.trigger(CHANGE, {\n added: [connection],\n removed: []\n });\n return connection;\n },\n _addConnection: function (connection, undoable) {\n var connectionsDataSource = this.connectionsDataSource;\n var dataItem;\n if (connectionsDataSource && this._isEditable) {\n dataItem = createModel(connectionsDataSource, cloneDataItem(connection.dataItem));\n connection.dataItem = dataItem;\n connection.updateModel();\n if (!this.trigger('add', { connection: connection })) {\n this._connectionsDataMap[dataItem.uid] = connection;\n connectionsDataSource.add(dataItem);\n this.addConnection(connection, undoable);\n connection._updateConnectors();\n return connection;\n }\n } else if (!this.trigger('add', { connection: connection })) {\n this.addConnection(connection, undoable);\n connection._updateConnectors();\n return connection;\n }\n },\n addShape: function (item, undoable) {\n var shape, shapeDefaults = this.options.shapeDefaults;\n if (item instanceof Shape) {\n shape = item;\n } else if (!(item instanceof kendo.Class)) {\n shapeDefaults = deepExtend({}, shapeDefaults, item || {});\n shape = new Shape(shapeDefaults, this);\n } else {\n return;\n }\n if (undoable !== false) {\n this.undoRedoService.add(new diagram.AddShapeUnit(shape, this), false);\n }\n this.shapes.push(shape);\n if (shape.diagram !== this) {\n this._shapesQuadTree.insert(shape);\n shape.diagram = this;\n }\n this.mainLayer.append(shape.visual);\n this.trigger(CHANGE, {\n added: [shape],\n removed: []\n });\n return shape;\n },\n _addShape: function (shape, undoable) {\n var that = this;\n var dataSource = that.dataSource;\n var dataItem;\n if (dataSource && this._isEditable) {\n dataItem = createModel(dataSource, cloneDataItem(shape.dataItem));\n shape.dataItem = dataItem;\n shape.updateModel();\n if (!this.trigger('add', { shape: shape })) {\n this.dataSource.add(dataItem);\n var inactiveItem = this._inactiveShapeItems.getByUid(dataItem.uid);\n inactiveItem.element = shape;\n inactiveItem.undoable = undoable;\n return shape;\n }\n } else if (!this.trigger('add', { shape: shape })) {\n return this.addShape(shape, undoable);\n }\n },\n remove: function (items, undoable) {\n items = isArray(items) ? items.slice(0) : [items];\n var elements = splitDiagramElements(items);\n var shapes = elements.shapes;\n var connections = elements.connections;\n var i;\n if (!defined(undoable)) {\n undoable = true;\n }\n if (undoable) {\n this.undoRedoService.begin();\n }\n this._suspendModelRefresh();\n for (i = shapes.length - 1; i >= 0; i--) {\n this._removeItem(shapes[i], undoable, connections);\n }\n for (i = connections.length - 1; i >= 0; i--) {\n this._removeItem(connections[i], undoable);\n }\n this._resumeModelRefresh();\n if (undoable) {\n this.undoRedoService.commit(false);\n }\n this.trigger(CHANGE, {\n added: [],\n removed: items\n });\n },\n _removeShapeDataItem: function (item) {\n if (this._isEditable) {\n this.dataSource.remove(item.dataItem);\n delete this._dataMap[item.dataItem.id];\n }\n },\n _removeConnectionDataItem: function (item) {\n if (this._isEditable) {\n this.connectionsDataSource.remove(item.dataItem);\n delete this._connectionsDataMap[item.dataItem.uid];\n }\n },\n _triggerRemove: function (items) {\n var toRemove = [];\n var item, args, editable;\n for (var idx = 0; idx < items.length; idx++) {\n item = items[idx];\n editable = item.options.editable;\n if (item instanceof Shape) {\n args = { shape: item };\n } else {\n args = { connection: item };\n }\n if (editable && editable.remove !== false && !this.trigger('remove', args)) {\n toRemove.push(item);\n }\n }\n return toRemove;\n },\n undo: function () {\n this.undoRedoService.undo();\n },\n redo: function () {\n this.undoRedoService.redo();\n },\n select: function (item, options) {\n if (isDefined(item)) {\n options = deepExtend({ addToSelection: false }, options);\n var addToSelection = options.addToSelection, items = [], selected = [], i, element;\n if (!addToSelection) {\n this.deselect();\n }\n this._internalSelection = true;\n if (item instanceof Array) {\n items = item;\n } else if (item instanceof DiagramElement) {\n items = [item];\n }\n for (i = 0; i < items.length; i++) {\n element = items[i];\n if (element.select(true)) {\n selected.push(element);\n }\n }\n this._selectionChanged(selected, []);\n this._internalSelection = false;\n } else {\n return this._selectedItems;\n }\n },\n selectAll: function () {\n this.select(this.shapes.concat(this.connections));\n },\n selectArea: function (rect) {\n var i, items, item;\n this._internalSelection = true;\n var selected = [];\n if (rect instanceof Rect) {\n items = this.shapes.concat(this.connections);\n for (i = 0; i < items.length; i++) {\n item = items[i];\n if ((!rect || item._hitTest(rect)) && item.options.enable) {\n if (item.select(true)) {\n selected.push(item);\n }\n }\n }\n }\n this._selectionChanged(selected, []);\n this._internalSelection = false;\n },\n deselect: function (item) {\n this._internalSelection = true;\n var deselected = [], items = [], element, i;\n if (item instanceof Array) {\n items = item;\n } else if (item instanceof DiagramElement) {\n items.push(item);\n } else if (!isDefined(item)) {\n items = this._selectedItems.slice(0);\n }\n for (i = 0; i < items.length; i++) {\n element = items[i];\n if (element.select(false)) {\n deselected.push(element);\n }\n }\n this._selectionChanged([], deselected);\n this._internalSelection = false;\n },\n toFront: function (items, undoable) {\n if (!items) {\n items = this._selectedItems.slice();\n }\n var result = this._getDiagramItems(items), indices;\n if (!defined(undoable) || undoable) {\n indices = indicesOfItems(this.mainLayer, result.visuals);\n var unit = new ToFrontUnit(this, items, indices);\n this.undoRedoService.add(unit);\n } else {\n this.mainLayer.toFront(result.visuals);\n this._fixOrdering(result, true);\n }\n },\n toBack: function (items, undoable) {\n if (!items) {\n items = this._selectedItems.slice();\n }\n var result = this._getDiagramItems(items), indices;\n if (!defined(undoable) || undoable) {\n indices = indicesOfItems(this.mainLayer, result.visuals);\n var unit = new ToBackUnit(this, items, indices);\n this.undoRedoService.add(unit);\n } else {\n this.mainLayer.toBack(result.visuals);\n this._fixOrdering(result, false);\n }\n },\n bringIntoView: function (item, options) {\n var viewport = this.viewport();\n var aligner = new diagram.RectAlign(viewport);\n var current, rect, original, newPan;\n if (viewport.width === 0 || viewport.height === 0) {\n return;\n }\n options = deepExtend({\n animate: false,\n align: 'center middle'\n }, options);\n if (options.align == 'none') {\n options.align = 'center middle';\n }\n if (item instanceof DiagramElement) {\n rect = item.bounds(TRANSFORMED);\n } else if (isArray(item)) {\n rect = this.boundingBox(item);\n } else if (item instanceof Rect) {\n rect = item.clone();\n }\n original = rect.clone();\n rect.zoom(this._zoom);\n if (rect.width > viewport.width || rect.height > viewport.height) {\n this._zoom = this._getValidZoom(math.min(viewport.width / original.width, viewport.height / original.height));\n rect = original.clone().zoom(this._zoom);\n }\n this._zoomMainLayer();\n current = rect.clone();\n aligner.align(rect, options.align);\n newPan = rect.topLeft().minus(current.topLeft());\n this.pan(newPan.times(-1), options.animate);\n },\n alignShapes: function (direction) {\n if (isUndefined(direction)) {\n direction = 'Left';\n }\n var items = this.select(), val, item, i;\n if (items.length === 0) {\n return;\n }\n switch (direction.toLowerCase()) {\n case 'left':\n case 'top':\n val = MAX_VALUE;\n break;\n case 'right':\n case 'bottom':\n val = MIN_VALUE;\n break;\n }\n for (i = 0; i < items.length; i++) {\n item = items[i];\n if (item instanceof Shape) {\n switch (direction.toLowerCase()) {\n case 'left':\n val = math.min(val, item.options.x);\n break;\n case 'top':\n val = math.min(val, item.options.y);\n break;\n case 'right':\n val = math.max(val, item.options.x);\n break;\n case 'bottom':\n val = math.max(val, item.options.y);\n break;\n }\n }\n }\n var undoStates = [];\n var shapes = [];\n for (i = 0; i < items.length; i++) {\n item = items[i];\n if (item instanceof Shape) {\n shapes.push(item);\n undoStates.push(item.bounds());\n switch (direction.toLowerCase()) {\n case 'left':\n case 'right':\n item.position(new Point(val, item.options.y));\n break;\n case 'top':\n case 'bottom':\n item.position(new Point(item.options.x, val));\n break;\n }\n }\n }\n var unit = new diagram.TransformUnit(shapes, undoStates);\n this.undoRedoService.add(unit, false);\n },\n zoom: function (zoom, options) {\n if (zoom) {\n var staticPoint = options ? options.point : new diagram.Point(0, 0);\n zoom = this._zoom = this._getValidZoom(zoom);\n if (!isUndefined(staticPoint)) {\n staticPoint = new diagram.Point(math.round(staticPoint.x), math.round(staticPoint.y));\n var zoomedPoint = staticPoint.times(zoom);\n var viewportVector = this.modelToView(staticPoint);\n var raw = viewportVector.minus(zoomedPoint);\n this._storePan(new diagram.Point(math.round(raw.x), math.round(raw.y)));\n }\n if (options) {\n options.zoom = zoom;\n }\n this._panTransform();\n this.canvas.surface.hideTooltip();\n this._updateAdorners();\n }\n return this._zoom;\n },\n _getPan: function (pan) {\n var canvas = this.canvas;\n if (!canvas.translate) {\n pan = pan.plus(this._pan);\n }\n return pan;\n },\n pan: function (pan, animate) {\n if (pan instanceof Point) {\n var that = this;\n var scroller = that.scroller;\n pan = that._getPan(pan);\n pan = pan.times(-1);\n if (animate) {\n scroller.animatedScrollTo(pan.x, pan.y, function () {\n that._updateAdorners();\n });\n } else {\n scroller.scrollTo(pan.x, pan.y);\n that._updateAdorners();\n }\n } else {\n return this._pan.times(-1);\n }\n },\n viewport: function () {\n var element = this.element;\n var width = element.width();\n var height = element.height();\n if (this.toolBar) {\n height -= outerHeight(this.toolBar.element);\n }\n return new Rect(0, 0, width, height);\n },\n copy: function () {\n if (this.options.copy.enabled) {\n this._clipboard = [];\n this._copyOffset = 1;\n for (var i = 0; i < this._selectedItems.length; i++) {\n var item = this._selectedItems[i];\n this._clipboard.push(item);\n }\n }\n },\n cut: function () {\n if (this.options.copy.enabled) {\n this._clipboard = [];\n this._copyOffset = 0;\n for (var i = 0; i < this._selectedItems.length; i++) {\n var item = this._selectedItems[i];\n this._clipboard.push(item);\n }\n this.remove(this._clipboard, true);\n }\n },\n paste: function () {\n if (this._clipboard.length > 0) {\n var item, copied, i;\n var mapping = {};\n var elements = splitDiagramElements(this._clipboard);\n var connections = elements.connections;\n var shapes = elements.shapes;\n var offset = {\n x: this._copyOffset * this.options.copy.offsetX,\n y: this._copyOffset * this.options.copy.offsetY\n };\n this.deselect();\n for (i = 0; i < shapes.length; i++) {\n item = shapes[i];\n copied = item.clone();\n mapping[item.id] = copied;\n copied.position(new Point(item.options.x + offset.x, item.options.y + offset.y));\n copied.diagram = this;\n copied = this._addShape(copied);\n if (copied) {\n copied.select();\n }\n }\n for (i = 0; i < connections.length; i++) {\n item = connections[i];\n copied = this._addConnection(item.clone());\n if (copied) {\n this._updateCopiedConnection(copied, item, 'source', mapping, offset);\n this._updateCopiedConnection(copied, item, 'target', mapping, offset);\n copied.select(true);\n copied.updateModel();\n }\n }\n this._syncChanges();\n this._copyOffset += 1;\n }\n },\n _updateCopiedConnection: function (connection, sourceConnection, connectorName, mapping, offset) {\n var onActivate, inactiveItem, targetShape;\n var target = sourceConnection[connectorName]();\n var diagram = this;\n if (target instanceof Connector && mapping[target.shape.id]) {\n targetShape = mapping[target.shape.id];\n if (diagram.getShapeById(targetShape.id)) {\n connection[connectorName](targetShape.getConnector(target.options.name));\n } else {\n inactiveItem = diagram._inactiveShapeItems.getByUid(targetShape.dataItem.uid);\n if (inactiveItem) {\n onActivate = function (item) {\n targetShape = diagram._dataMap[item.id];\n connection[connectorName](targetShape.getConnector(target.options.name));\n connection.updateModel();\n };\n diagram._deferredConnectionUpdates.push(inactiveItem.onActivate(onActivate));\n }\n }\n } else {\n connection[connectorName](new Point(sourceConnection[connectorName + 'Point']().x + offset.x, sourceConnection[connectorName + 'Point']().y + offset.y));\n }\n },\n boundingBox: function (items, origin) {\n var rect = Rect.empty(), temp, di = isDefined(items) ? this._getDiagramItems(items) : { shapes: this.shapes };\n if (di.shapes.length > 0) {\n var item = di.shapes[0];\n rect = item.bounds(ROTATED);\n for (var i = 1; i < di.shapes.length; i++) {\n item = di.shapes[i];\n temp = item.bounds(ROTATED);\n if (origin === true) {\n temp.x -= item._rotationOffset.x;\n temp.y -= item._rotationOffset.y;\n }\n rect = rect.union(temp);\n }\n }\n return rect;\n },\n _containerOffset: function () {\n var containerOffset = this.element.offset();\n if (this.toolBar) {\n containerOffset.top += outerHeight(this.toolBar.element);\n }\n return containerOffset;\n },\n documentToView: function (point) {\n var containerOffset = this._containerOffset();\n return new Point(point.x - containerOffset.left, point.y - containerOffset.top);\n },\n viewToDocument: function (point) {\n var containerOffset = this._containerOffset();\n return new Point(point.x + containerOffset.left, point.y + containerOffset.top);\n },\n viewToModel: function (point) {\n return this._transformWithMatrix(point, this._matrixInvert);\n },\n modelToView: function (point) {\n return this._transformWithMatrix(point, this._matrix);\n },\n modelToLayer: function (point) {\n return this._transformWithMatrix(point, this._layerMatrix);\n },\n layerToModel: function (point) {\n return this._transformWithMatrix(point, this._layerMatrixInvert);\n },\n documentToModel: function (point) {\n var viewPoint = this.documentToView(point);\n if (!this.canvas.translate) {\n viewPoint.x = viewPoint.x + this.scroller.scrollLeft;\n viewPoint.y = viewPoint.y + this.scroller.scrollTop;\n }\n return this.viewToModel(viewPoint);\n },\n modelToDocument: function (point) {\n return this.viewToDocument(this.modelToView(point));\n },\n _transformWithMatrix: function (point, matrix) {\n var result = point;\n if (point instanceof Point) {\n if (matrix) {\n result = matrix.apply(point);\n }\n } else {\n var tl = this._transformWithMatrix(point.topLeft(), matrix), br = this._transformWithMatrix(point.bottomRight(), matrix);\n result = Rect.fromPoints(tl, br);\n }\n return result;\n },\n setDataSource: function (dataSource) {\n this.options.dataSource = dataSource;\n this._dataSource();\n if (this.options.autoBind) {\n this.dataSource.fetch();\n }\n },\n setConnectionsDataSource: function (dataSource) {\n this.options.connectionsDataSource = dataSource;\n this._connectionDataSource();\n if (this.options.autoBind) {\n this.connectionsDataSource.fetch();\n }\n },\n layout: function (options) {\n this._layouting = true;\n var type;\n if (isUndefined(options)) {\n options = this.options.layout;\n }\n if (isUndefined(options) || isUndefined(options.type)) {\n type = 'Tree';\n } else {\n type = options.type;\n }\n var l;\n switch (type.toLowerCase()) {\n case 'tree':\n l = new diagram.TreeLayout(this);\n break;\n case 'layered':\n l = new diagram.LayeredLayout(this);\n break;\n case 'forcedirected':\n case 'force':\n case 'spring':\n case 'springembedder':\n l = new diagram.SpringLayout(this);\n break;\n default:\n throw 'Layout algorithm \\'' + type + '\\' is not supported.';\n }\n var initialState = new diagram.LayoutState(this);\n var finalState = l.layout(options);\n if (finalState) {\n var unit = new diagram.LayoutUndoUnit(initialState, finalState, options ? options.animate : null);\n this.undoRedoService.add(unit);\n }\n this._layouting = false;\n this._redrawConnections();\n },\n getShapeById: function (id) {\n var found;\n found = Utils.first(this.shapes, function (s) {\n return s.visual.id === id;\n });\n if (found) {\n return found;\n }\n found = Utils.first(this.connections, function (c) {\n return c.visual.id === id;\n });\n return found;\n },\n getShapeByModelId: function (id) {\n var shape;\n if (this._isEditable) {\n shape = this._dataMap[id];\n } else {\n shape = Utils.first(this.shapes, function (shape) {\n return (shape.dataItem || {}).id === id;\n });\n }\n return shape;\n },\n getShapeByModelUid: function (uid) {\n var shape;\n if (this._isEditable) {\n shape = Utils.first(this.shapes, function (shape) {\n return (shape.dataItem || {}).uid === uid;\n });\n } else {\n shape = this._dataMap[uid];\n }\n return shape;\n },\n getConnectionByModelId: function (id) {\n var connection;\n if (this.connectionsDataSource) {\n connection = Utils.first(this.connections, function (connection) {\n return (connection.dataItem || {}).id === id;\n });\n }\n return connection;\n },\n getConnectionByModelUid: function (uid) {\n var connection;\n if (this.connectionsDataSource) {\n connection = this._connectionsDataMap[uid];\n }\n return connection;\n },\n _extendLayoutOptions: function (options) {\n if (options.layout) {\n options.layout = deepExtend({}, diagram.LayoutBase.fn.defaultOptions || {}, options.layout);\n }\n },\n _selectionChanged: function (selected, deselected) {\n if (selected.length || deselected.length) {\n this.trigger(SELECT, {\n selected: selected,\n deselected: deselected\n });\n }\n },\n _getValidZoom: function (zoom) {\n return math.min(math.max(zoom, this.options.zoomMin), this.options.zoomMax);\n },\n _panTransform: function (pos) {\n var diagram = this, pan = pos || diagram._pan;\n if (diagram.canvas.translate) {\n diagram.scroller.scrollTo(pan.x, pan.y);\n diagram._zoomMainLayer();\n } else {\n diagram._storePan(pan);\n diagram._transformMainLayer();\n }\n },\n _finishPan: function () {\n this.trigger(PAN, {\n total: this._pan,\n delta: Number.NaN\n });\n },\n _storePan: function (pan) {\n this._pan = pan;\n this._storeViewMatrix();\n },\n _zoomMainLayer: function () {\n var zoom = this._zoom;\n var transform = new CompositeTransform(0, 0, zoom, zoom);\n transform.render(this.mainLayer);\n this._storeLayerMatrix(transform);\n this._storeViewMatrix();\n },\n _transformMainLayer: function () {\n var pan = this._pan, zoom = this._zoom;\n var transform = new CompositeTransform(pan.x, pan.y, zoom, zoom);\n transform.render(this.mainLayer);\n this._storeLayerMatrix(transform);\n this._storeViewMatrix();\n },\n _storeLayerMatrix: function (canvasTransform) {\n this._layerMatrix = canvasTransform.toMatrix();\n this._layerMatrixInvert = canvasTransform.invert().toMatrix();\n },\n _storeViewMatrix: function () {\n var pan = this._pan, zoom = this._zoom;\n var transform = new CompositeTransform(pan.x, pan.y, zoom, zoom);\n this._matrix = transform.toMatrix();\n this._matrixInvert = transform.invert().toMatrix();\n },\n _toIndex: function (items, indices) {\n var result = this._getDiagramItems(items);\n this.mainLayer.toIndex(result.visuals, indices);\n this._fixOrdering(result, false);\n },\n _fixOrdering: function (result, toFront) {\n var shapePos = toFront ? this.shapes.length - 1 : 0, conPos = toFront ? this.connections.length - 1 : 0, i, item;\n for (i = 0; i < result.shapes.length; i++) {\n item = result.shapes[i];\n Utils.remove(this.shapes, item);\n Utils.insert(this.shapes, item, shapePos);\n }\n for (i = 0; i < result.cons.length; i++) {\n item = result.cons[i];\n Utils.remove(this.connections, item);\n Utils.insert(this.connections, item, conPos);\n }\n },\n _getDiagramItems: function (items) {\n var i, result = {}, args = items;\n result.visuals = [];\n result.shapes = [];\n result.cons = [];\n if (!items) {\n args = this._selectedItems.slice();\n } else if (!isArray(items)) {\n args = [items];\n }\n for (i = 0; i < args.length; i++) {\n var item = args[i];\n if (item instanceof Shape) {\n result.shapes.push(item);\n result.visuals.push(item.visual);\n } else if (item instanceof Connection) {\n result.cons.push(item);\n result.visuals.push(item.visual);\n }\n }\n return result;\n },\n _removeItem: function (item, undoable, removedConnections) {\n item.select(false);\n if (item instanceof Shape) {\n this._removeShapeDataItem(item);\n this._removeShape(item, undoable, removedConnections);\n } else if (item instanceof Connection) {\n this._removeConnectionDataItem(item);\n this._removeConnection(item, undoable);\n }\n this.mainLayer.remove(item.visual);\n },\n _removeShape: function (shape, undoable, removedConnections) {\n var i, connection, connector, sources = [], targets = [];\n this.toolService._removeHover();\n if (undoable) {\n this.undoRedoService.addCompositeItem(new DeleteShapeUnit(shape));\n }\n Utils.remove(this.shapes, shape);\n this._shapesQuadTree.remove(shape);\n for (i = 0; i < shape.connectors.length; i++) {\n connector = shape.connectors[i];\n for (var j = 0; j < connector.connections.length; j++) {\n connection = connector.connections[j];\n if (!removedConnections || !dataviz.inArray(connection, removedConnections)) {\n if (connection.sourceConnector == connector) {\n sources.push(connection);\n } else if (connection.targetConnector == connector) {\n targets.push(connection);\n }\n }\n }\n }\n for (i = 0; i < sources.length; i++) {\n sources[i].source(null, undoable);\n sources[i].updateModel();\n }\n for (i = 0; i < targets.length; i++) {\n targets[i].target(null, undoable);\n targets[i].updateModel();\n }\n },\n _removeConnection: function (connection, undoable) {\n if (connection.sourceConnector) {\n Utils.remove(connection.sourceConnector.connections, connection);\n }\n if (connection.targetConnector) {\n Utils.remove(connection.targetConnector.connections, connection);\n }\n if (undoable) {\n this.undoRedoService.addCompositeItem(new DeleteConnectionUnit(connection));\n }\n Utils.remove(this.connections, connection);\n },\n _removeDataItems: function (items, recursive) {\n var item, children, shape, idx;\n items = isArray(items) ? items : [items];\n while (items.length) {\n item = items.shift();\n shape = this._dataMap[item.uid];\n if (shape) {\n this._removeShapeConnections(shape);\n this._removeItem(shape, false);\n delete this._dataMap[item.uid];\n if (recursive && item.hasChildren && item.loaded()) {\n children = item.children.data();\n for (idx = 0; idx < children.length; idx++) {\n items.push(children[idx]);\n }\n }\n }\n }\n },\n _removeShapeConnections: function (shape) {\n var connections = shape.connections();\n var idx;\n if (connections) {\n for (idx = 0; idx < connections.length; idx++) {\n this._removeItem(connections[idx], false);\n }\n }\n },\n _addDataItem: function (dataItem, undoable) {\n if (!defined(dataItem)) {\n return;\n }\n var shape = this._dataMap[dataItem.id];\n if (shape) {\n return shape;\n }\n var options = deepExtend({}, this.options.shapeDefaults);\n options.dataItem = dataItem;\n shape = new Shape(options, this);\n this.addShape(shape, undoable !== false);\n this._dataMap[dataItem.id] = shape;\n return shape;\n },\n _addDataItemByUid: function (dataItem) {\n if (!defined(dataItem)) {\n return;\n }\n var shape = this._dataMap[dataItem.uid];\n if (shape) {\n return shape;\n }\n var options = deepExtend({}, this.options.shapeDefaults);\n options.dataItem = dataItem;\n shape = new Shape(options, this);\n this.addShape(shape);\n this._dataMap[dataItem.uid] = shape;\n return shape;\n },\n _addDataItems: function (items, parent) {\n var item, idx, shape, parentShape, connection;\n for (idx = 0; idx < items.length; idx++) {\n item = items[idx];\n shape = this._addDataItemByUid(item);\n parentShape = this._addDataItemByUid(parent);\n if (parentShape && !this.connected(parentShape, shape)) {\n connection = this.connect(parentShape, shape);\n }\n }\n },\n _refreshSource: function (e) {\n var that = this, node = e.node, action = e.action, items = e.items, options = that.options, idx, dataBound;\n if (e.field) {\n for (idx = 0; idx < items.length; idx++) {\n if (this._dataMap[items[idx].uid]) {\n this._dataMap[items[idx].uid].redrawVisual();\n }\n }\n return;\n }\n if (action == 'remove') {\n this._removeDataItems(e.items, true);\n } else {\n if ((!action || action === 'itemloaded') && !this._bindingRoots) {\n this._bindingRoots = true;\n dataBound = true;\n }\n if (!action && !node) {\n that.clear();\n }\n this._addDataItems(items, node);\n for (idx = 0; idx < items.length; idx++) {\n items[idx].load();\n }\n }\n if (options.layout && (dataBound || action == 'remove' || action == 'add')) {\n that.layout(options.layout);\n }\n if (dataBound) {\n this.trigger('dataBound');\n this._bindingRoots = false;\n }\n },\n _addItem: function (item) {\n if (item instanceof Shape) {\n this.addShape(item);\n } else if (item instanceof Connection) {\n this.addConnection(item);\n }\n },\n _createToolBar: function (preventClosing) {\n var diagram = this.toolService.diagram;\n if (!this.singleToolBar && diagram.select().length === 1) {\n var element = diagram.select()[0];\n if (element && element.options.editable !== false) {\n var editable = element.options.editable;\n var tools = editable.tools;\n if (this._isEditable && tools.length === 0) {\n if (element instanceof Shape) {\n tools = [\n 'edit',\n 'rotateClockwise',\n 'rotateAnticlockwise'\n ];\n } else if (element instanceof Connection) {\n tools = ['edit'];\n }\n if (editable && editable.remove !== false) {\n tools.push('delete');\n }\n }\n if (tools && tools.length) {\n var padding = 20;\n var point;\n this.singleToolBar = new DiagramToolBar(diagram, {\n tools: tools,\n click: proxy(this._toolBarClick, this),\n modal: true\n });\n var popupWidth = outerWidth(this.singleToolBar._popup.element);\n var popupHeight = outerHeight(this.singleToolBar._popup.element);\n if (element instanceof Shape) {\n var shapeBounds = this.modelToView(element.bounds(ROTATED));\n point = new Point(shapeBounds.x, shapeBounds.y).minus(new Point((popupWidth - shapeBounds.width) / 2, popupHeight + padding));\n } else if (element instanceof Connection) {\n var connectionBounds = this.modelToView(element.bounds());\n point = new Point(connectionBounds.x, connectionBounds.y).minus(new Point((popupWidth - connectionBounds.width - 20) / 2, popupHeight + padding));\n }\n if (point) {\n if (!this.canvas.translate) {\n point = point.minus(new Point(this.scroller.scrollLeft, this.scroller.scrollTop));\n }\n point = this.viewToDocument(point);\n point = new Point(math.max(point.x, 0), math.max(point.y, 0));\n this.singleToolBar.showAt(point);\n if (preventClosing) {\n this.singleToolBar._popup.one('close', preventDefault);\n }\n } else {\n this._destroyToolBar();\n }\n }\n }\n }\n },\n _toolBarClick: function (e) {\n this.trigger('toolBarClick', e);\n this._destroyToolBar();\n },\n _normalizePointZoom: function (point) {\n return point.times(1 / this.zoom());\n },\n _initialize: function () {\n this.shapes = [];\n this._selectedItems = [];\n this.connections = [];\n this._dataMap = {};\n this._connectionsDataMap = {};\n this._inactiveShapeItems = new InactiveItemsCollection();\n this._deferredConnectionUpdates = [];\n this.undoRedoService = new UndoRedoService({\n undone: this._syncHandler,\n redone: this._syncHandler\n });\n this.id = diagram.randomId();\n },\n _fetchFreshData: function () {\n var that = this;\n that._dataSource();\n if (that._isEditable) {\n that._connectionDataSource();\n }\n if (that.options.autoBind) {\n if (that._isEditable) {\n this._loadingShapes = true;\n this._loadingConnections = true;\n that.dataSource.fetch();\n that.connectionsDataSource.fetch();\n } else {\n that.dataSource.fetch();\n }\n }\n },\n _dataSource: function () {\n if (defined(this.options.connectionsDataSource)) {\n this._isEditable = true;\n var dsOptions = this.options.dataSource || {};\n var ds = isArray(dsOptions) ? { data: dsOptions } : dsOptions;\n if (this.dataSource && this._shapesRefreshHandler) {\n this.dataSource.unbind('change', this._shapesRefreshHandler).unbind('requestStart', this._shapesRequestStartHandler).unbind('error', this._shapesErrorHandler);\n } else {\n this._shapesRefreshHandler = proxy(this._refreshShapes, this);\n this._shapesRequestStartHandler = proxy(this._shapesRequestStart, this);\n this._shapesErrorHandler = proxy(this._error, this);\n }\n this.dataSource = kendo.data.DataSource.create(ds).bind('change', this._shapesRefreshHandler).bind('requestStart', this._shapesRequestStartHandler).bind('error', this._shapesErrorHandler);\n } else {\n this._treeDataSource();\n this._isEditable = false;\n }\n },\n _connectionDataSource: function () {\n var dsOptions = this.options.connectionsDataSource;\n if (dsOptions) {\n var ds = isArray(dsOptions) ? { data: dsOptions } : dsOptions;\n if (this.connectionsDataSource && this._connectionsRefreshHandler) {\n this.connectionsDataSource.unbind('change', this._connectionsRefreshHandler).unbind('requestStart', this._connectionsRequestStartHandler).unbind('error', this._connectionsErrorHandler);\n } else {\n this._connectionsRefreshHandler = proxy(this._refreshConnections, this);\n this._connectionsRequestStartHandler = proxy(this._connectionsRequestStart, this);\n this._connectionsErrorHandler = proxy(this._connectionsError, this);\n }\n this.connectionsDataSource = kendo.data.DataSource.create(ds).bind('change', this._connectionsRefreshHandler).bind('requestStart', this._connectionsRequestStartHandler).bind('error', this._connectionsErrorHandler);\n }\n },\n _shapesRequestStart: function (e) {\n if (e.type == 'read') {\n this._loadingShapes = true;\n }\n },\n _connectionsRequestStart: function (e) {\n if (e.type == 'read') {\n this._loadingConnections = true;\n }\n },\n _error: function () {\n this._loadingShapes = false;\n },\n _connectionsError: function () {\n this._loadingConnections = false;\n },\n _refreshShapes: function (e) {\n if (e.action === 'remove') {\n if (this._shouldRefresh()) {\n this._removeShapes(e.items);\n }\n } else if (e.action === 'itemchange') {\n if (this._shouldRefresh()) {\n this._updateShapes(e.items, e.field);\n }\n } else if (e.action === 'add') {\n this._inactiveShapeItems.add(e.items);\n } else if (e.action === 'sync') {\n this._syncShapes(e.items);\n } else {\n this.refresh();\n }\n },\n _shouldRefresh: function () {\n return !this._suspended;\n },\n _suspendModelRefresh: function () {\n this._suspended = (this._suspended || 0) + 1;\n },\n _resumeModelRefresh: function () {\n this._suspended = math.max((this._suspended || 0) - 1, 0);\n },\n refresh: function () {\n this._loadingShapes = false;\n if (!this._loadingConnections) {\n this._rebindShapesAndConnections();\n }\n },\n _rebindShapesAndConnections: function () {\n this.clear();\n this._addShapes(this.dataSource.view());\n if (this.connectionsDataSource) {\n this._addConnections(this.connectionsDataSource.view(), false);\n }\n if (this.options.layout) {\n this.layout(this.options.layout);\n } else {\n this._redrawConnections();\n }\n this.trigger('dataBound');\n },\n refreshConnections: function () {\n this._loadingConnections = false;\n if (!this._loadingShapes) {\n this._rebindShapesAndConnections();\n }\n },\n _redrawConnections: function () {\n var connections = this.connections;\n for (var idx = 0; idx < connections.length; idx++) {\n connections[idx].refresh();\n }\n },\n _removeShapes: function (items) {\n var dataMap = this._dataMap;\n var item, i;\n for (i = 0; i < items.length; i++) {\n item = items[i];\n if (dataMap[item.id]) {\n this.remove(dataMap[item.id], false);\n dataMap[item.id] = null;\n }\n }\n },\n _syncShapes: function () {\n var diagram = this;\n var inactiveItems = diagram._inactiveShapeItems;\n inactiveItems.forEach(function (inactiveItem) {\n var dataItem = inactiveItem.dataItem;\n var shape = inactiveItem.element;\n if (!dataItem.isNew()) {\n if (shape) {\n shape._setOptionsFromModel();\n diagram.addShape(shape, inactiveItem.undoable);\n diagram._dataMap[dataItem.id] = shape;\n } else {\n diagram._addDataItem(dataItem);\n }\n inactiveItem.activate();\n inactiveItems.remove(dataItem);\n }\n });\n },\n _updateShapes: function (items, field) {\n for (var i = 0; i < items.length; i++) {\n var dataItem = items[i];\n var shape = this._dataMap[dataItem.id];\n if (shape) {\n shape.updateOptionsFromModel(dataItem, field);\n }\n }\n },\n _addShapes: function (dataItems) {\n for (var i = 0; i < dataItems.length; i++) {\n this._addDataItem(dataItems[i], false);\n }\n },\n _refreshConnections: function (e) {\n if (e.action === 'remove') {\n if (this._shouldRefresh()) {\n this._removeConnections(e.items);\n }\n } else if (e.action === 'add') {\n this._addConnections(e.items);\n } else if (e.action === 'sync') {\n } else if (e.action === 'itemchange') {\n if (this._shouldRefresh()) {\n this._updateConnections(e.items);\n }\n } else {\n this.refreshConnections();\n }\n },\n _removeConnections: function (items) {\n for (var i = 0; i < items.length; i++) {\n this.remove(this._connectionsDataMap[items[i].uid], false);\n this._connectionsDataMap[items[i].uid] = null;\n }\n },\n _updateConnections: function (items) {\n for (var i = 0; i < items.length; i++) {\n var dataItem = items[i];\n var connection = this._connectionsDataMap[dataItem.uid];\n connection.updateOptionsFromModel(dataItem);\n }\n },\n _addConnections: function (connections, undoable) {\n var length = connections.length;\n for (var i = 0; i < length; i++) {\n var dataItem = connections[i];\n this._addConnectionDataItem(dataItem, undoable);\n }\n },\n _addConnectionDataItem: function (dataItem, undoable) {\n if (!this._connectionsDataMap[dataItem.uid]) {\n var from = this._validateConnector(dataItem.from);\n if (!defined(from) || from === null) {\n from = new Point(dataItem.fromX, dataItem.fromY);\n }\n var to = this._validateConnector(dataItem.to);\n if (!defined(to) || to === null) {\n to = new Point(dataItem.toX, dataItem.toY);\n }\n if (defined(from) && defined(to)) {\n var options = deepExtend({}, this.options.connectionDefaults);\n options.dataItem = dataItem;\n var connection = new Connection(from, to, options);\n this._connectionsDataMap[dataItem.uid] = connection;\n this.addConnection(connection, undoable);\n }\n }\n },\n _validateConnector: function (value) {\n var connector;\n if (defined(value) && value !== null) {\n connector = this._dataMap[value];\n }\n return connector;\n },\n _treeDataSource: function () {\n var that = this, options = that.options, dataSource = options.dataSource;\n dataSource = isArray(dataSource) ? { data: dataSource } : dataSource;\n if (dataSource instanceof kendo.data.DataSource && !(dataSource instanceof kendo.data.HierarchicalDataSource)) {\n throw new Error('Incorrect DataSource type. If a single dataSource instance is set to the diagram then it should be a HierarchicalDataSource. You should set only the options instead of an instance or a HierarchicalDataSource instance or supply connectionsDataSource as well.');\n }\n if (!dataSource.fields) {\n dataSource.fields = [\n { field: 'text' },\n { field: 'url' },\n { field: 'spriteCssClass' },\n { field: 'imageUrl' }\n ];\n }\n if (that.dataSource && that._refreshHandler) {\n that._unbindDataSource();\n }\n that._refreshHandler = proxy(that._refreshSource, that);\n that._errorHandler = proxy(that._error, that);\n that.dataSource = HierarchicalDataSource.create(dataSource).bind(CHANGE, that._refreshHandler).bind(ERROR, that._errorHandler);\n },\n _unbindDataSource: function () {\n var that = this;\n that.dataSource.unbind(CHANGE, that._refreshHandler).unbind(ERROR, that._errorHandler);\n },\n _adorn: function (adorner, isActive) {\n if (isActive !== undefined && adorner) {\n if (isActive) {\n this._adorners.push(adorner);\n this.adornerLayer.append(adorner.visual);\n } else {\n Utils.remove(this._adorners, adorner);\n this.adornerLayer.remove(adorner.visual);\n }\n }\n },\n _showConnectors: function (shape, value) {\n if (value) {\n this._connectorsAdorner.show(shape);\n } else {\n this._connectorsAdorner.destroy();\n }\n },\n _updateAdorners: function () {\n var adorners = this._adorners;\n for (var i = 0; i < adorners.length; i++) {\n var adorner = adorners[i];\n if (adorner.refreshBounds) {\n adorner.refreshBounds();\n }\n adorner.refresh();\n }\n },\n _refresh: function () {\n for (var i = 0; i < this.connections.length; i++) {\n this.connections[i].refresh();\n }\n },\n _destroyToolBar: function () {\n if (this.singleToolBar) {\n this.singleToolBar.hide();\n this.singleToolBar.destroy();\n this.singleToolBar = null;\n }\n },\n _destroyGlobalToolBar: function () {\n if (this.toolBar) {\n this.toolBar.hide();\n this.toolBar.destroy();\n this.toolBar = null;\n }\n },\n exportDOMVisual: function () {\n var viewBox = this.canvas._viewBox;\n var scrollOffset = geom.transform().translate(-viewBox.x, -viewBox.y);\n var viewRect = new geom.Rect([\n 0,\n 0\n ], [\n viewBox.width,\n viewBox.height\n ]);\n var clipPath = draw.Path.fromRect(viewRect);\n var wrap = new draw.Group({ transform: scrollOffset });\n var clipWrap = new draw.Group({ clip: clipPath });\n var root = this.canvas.drawingElement.children[0];\n clipWrap.append(wrap);\n wrap.children.push(root);\n return clipWrap;\n },\n exportVisual: function () {\n var scale = geom.transform().scale(1 / this._zoom);\n var wrap = new draw.Group({ transform: scale });\n var root = this.mainLayer.drawingElement;\n wrap.children.push(root);\n return wrap;\n },\n _syncChanges: function () {\n this._syncShapeChanges();\n this._syncConnectionChanges();\n },\n _syncShapeChanges: function () {\n if (this.dataSource && this._isEditable) {\n this.dataSource.sync();\n }\n },\n _syncConnectionChanges: function () {\n var that = this;\n if (that.connectionsDataSource && that._isEditable) {\n $.when.apply($, that._deferredConnectionUpdates).then(function () {\n that.connectionsDataSource.sync();\n });\n that.deferredConnectionUpdates = [];\n }\n }\n });\n dataviz.ExportMixin.extend(Diagram.fn, true);\n if (kendo.PDFMixin) {\n kendo.PDFMixin.extend(Diagram.fn);\n }\n function filterShapeDataItem(dataItem) {\n var result = {};\n dataItem = dataItem || {};\n if (defined(dataItem.text) && dataItem.text !== null) {\n result.text = dataItem.text;\n }\n if (defined(dataItem.x) && dataItem.x !== null) {\n result.x = dataItem.x;\n }\n if (defined(dataItem.y) && dataItem.y !== null) {\n result.y = dataItem.y;\n }\n if (defined(dataItem.width) && dataItem.width !== null) {\n result.width = dataItem.width;\n }\n if (defined(dataItem.height) && dataItem.height !== null) {\n result.height = dataItem.height;\n }\n if (defined(dataItem.type) && dataItem.type !== null) {\n result.type = dataItem.type;\n }\n return result;\n }\n function filterConnectionDataItem(dataItem) {\n var result = {};\n dataItem = dataItem || {};\n if (defined(dataItem.text) && dataItem.text !== null) {\n result.content = dataItem.text;\n }\n if (defined(dataItem.type) && dataItem.type !== null) {\n result.type = dataItem.type;\n }\n if (defined(dataItem.from) && dataItem.from !== null) {\n result.from = dataItem.from;\n }\n if (defined(dataItem.fromConnector) && dataItem.fromConnector !== null) {\n result.fromConnector = dataItem.fromConnector;\n }\n if (defined(dataItem.fromX) && dataItem.fromX !== null) {\n result.fromX = dataItem.fromX;\n }\n if (defined(dataItem.fromY) && dataItem.fromY !== null) {\n result.fromY = dataItem.fromY;\n }\n if (defined(dataItem.to) && dataItem.to !== null) {\n result.to = dataItem.to;\n }\n if (defined(dataItem.toConnector) && dataItem.toConnector !== null) {\n result.toConnector = dataItem.toConnector;\n }\n if (defined(dataItem.toX) && dataItem.toX !== null) {\n result.toX = dataItem.toX;\n }\n if (defined(dataItem.toY) && dataItem.toY !== null) {\n result.toY = dataItem.toY;\n }\n return result;\n }\n var DiagramToolBar = kendo.Observable.extend({\n init: function (diagram, options) {\n kendo.Observable.fn.init.call(this);\n this.diagram = diagram;\n this.options = deepExtend({}, this.options, options);\n this._tools = [];\n this.createToolBar();\n this.createTools();\n this.appendTools();\n if (this.options.modal) {\n this.createPopup();\n }\n this.bind(this.events, options);\n },\n events: ['click'],\n createPopup: function () {\n this.container = $('
        ').append(this.element);\n this._popup = this.container.kendoPopup({}).getKendoPopup();\n },\n appendTools: function () {\n for (var i = 0; i < this._tools.length; i++) {\n var tool = this._tools[i];\n if (tool.buttons && tool.buttons.length || !defined(tool.buttons)) {\n this._toolBar.add(tool);\n }\n }\n },\n createToolBar: function () {\n this.element = $('
        ');\n this._toolBar = this.element.kendoToolBar({\n click: proxy(this.click, this),\n resizable: false\n }).getKendoToolBar();\n this.element.css('border', 'none');\n },\n createTools: function () {\n for (var i = 0; i < this.options.tools.length; i++) {\n this.createTool(this.options.tools[i]);\n }\n },\n createTool: function (tool) {\n if (!isPlainObject(tool)) {\n tool = { name: tool };\n }\n var toolName = tool.name + 'Tool';\n if (this[toolName]) {\n this[toolName](tool);\n } else {\n this._tools.push(deepExtend({}, tool, { attributes: this._setAttributes({ action: tool.name }) }));\n }\n },\n showAt: function (point) {\n if (this._popup) {\n this._popup.open(point.x, point.y);\n }\n },\n hide: function () {\n if (this._popup) {\n this._popup.close();\n }\n },\n newGroup: function () {\n return {\n type: 'buttonGroup',\n buttons: []\n };\n },\n editTool: function () {\n this._tools.push({\n icon: 'edit',\n showText: 'overflow',\n type: 'button',\n text: 'Edit',\n attributes: this._setAttributes({ action: 'edit' })\n });\n },\n deleteTool: function () {\n this._tools.push({\n icon: 'close',\n showText: 'overflow',\n type: 'button',\n text: 'Delete',\n attributes: this._setAttributes({ action: 'delete' })\n });\n },\n rotateAnticlockwiseTool: function (options) {\n this._appendGroup('rotate');\n this._rotateGroup.buttons.push({\n icon: 'rotate-left',\n showText: 'overflow',\n text: 'RotateAnticlockwise',\n group: 'rotate',\n attributes: this._setAttributes({\n action: 'rotateAnticlockwise',\n step: options.step\n })\n });\n },\n rotateClockwiseTool: function (options) {\n this._appendGroup('rotate');\n this._rotateGroup.buttons.push({\n icon: 'rotate-right',\n attributes: this._setAttributes({\n action: 'rotateClockwise',\n step: options.step\n }),\n showText: 'overflow',\n text: 'RotateClockwise',\n group: 'rotate'\n });\n },\n createShapeTool: function () {\n this._appendGroup('create');\n this._createGroup.buttons.push({\n icon: 'shape',\n showText: 'overflow',\n text: 'CreateShape',\n group: 'create',\n attributes: this._setAttributes({ action: 'createShape' })\n });\n },\n createConnectionTool: function () {\n this._appendGroup('create');\n this._createGroup.buttons.push({\n icon: 'connector',\n showText: 'overflow',\n text: 'CreateConnection',\n group: 'create',\n attributes: this._setAttributes({ action: 'createConnection' })\n });\n },\n undoTool: function () {\n this._appendGroup('history');\n this._historyGroup.buttons.push({\n icon: 'undo',\n showText: 'overflow',\n text: 'Undo',\n group: 'history',\n attributes: this._setAttributes({ action: 'undo' })\n });\n },\n redoTool: function () {\n this._appendGroup('history');\n this._historyGroup.buttons.push({\n icon: 'redo',\n showText: 'overflow',\n text: 'Redo',\n group: 'history',\n attributes: this._setAttributes({ action: 'redo' })\n });\n },\n _appendGroup: function (name) {\n var prop = '_' + name + 'Group';\n if (!this[prop]) {\n this[prop] = this.newGroup();\n this._tools.push(this[prop]);\n }\n },\n _setAttributes: function (attributes) {\n var attr = {};\n if (attributes.action) {\n attr[kendo.attr('action')] = attributes.action;\n }\n if (attributes.step) {\n attr[kendo.attr('step')] = attributes.step;\n }\n return attr;\n },\n _getAttributes: function (element) {\n var attr = {};\n var action = element.attr(kendo.attr('action'));\n if (action) {\n attr.action = action;\n }\n var step = element.attr(kendo.attr('step'));\n if (step) {\n attr.step = step;\n }\n return attr;\n },\n click: function (e) {\n var attributes = this._getAttributes($(e.target));\n var action = attributes.action;\n if (action && this[action]) {\n this[action](attributes);\n }\n this.trigger('click', this.eventData(action, e.target));\n },\n eventData: function (action, target) {\n var elements = this.selectedElements(), length = elements.length, shapes = [], connections = [], element;\n for (var idx = 0; idx < length; idx++) {\n element = elements[idx];\n if (element instanceof Shape) {\n shapes.push(element);\n } else {\n connections.push(element);\n }\n }\n return {\n shapes: shapes,\n connections: connections,\n action: action,\n target: target\n };\n },\n 'delete': function () {\n var diagram = this.diagram;\n var toRemove = diagram._triggerRemove(this.selectedElements());\n if (toRemove.length) {\n this.diagram.remove(toRemove, true);\n this.diagram._syncChanges();\n }\n },\n edit: function () {\n var selectedElemens = this.selectedElements();\n if (selectedElemens.length === 1) {\n this.diagram.edit(selectedElemens[0]);\n }\n },\n rotateClockwise: function (options) {\n var angle = parseFloat(options.step || 90);\n this._rotate(angle);\n },\n rotateAnticlockwise: function (options) {\n var angle = parseFloat(options.step || 90);\n this._rotate(-angle);\n },\n _rotate: function (angle) {\n var adorner = this.diagram._resizingAdorner;\n adorner.angle(adorner.angle() + angle);\n adorner.rotate();\n },\n selectedElements: function () {\n return this.diagram.select();\n },\n createShape: function () {\n this.diagram.createShape();\n },\n createConnection: function () {\n this.diagram.createConnection();\n },\n undo: function () {\n this.diagram.undo();\n },\n redo: function () {\n this.diagram.redo();\n },\n destroy: function () {\n this.diagram = null;\n this.element = null;\n this.options = null;\n if (this._toolBar) {\n this._toolBar.destroy();\n }\n if (this._popup) {\n this._popup.destroy();\n }\n }\n });\n var Editor = kendo.Observable.extend({\n init: function (element, options) {\n kendo.Observable.fn.init.call(this);\n this.options = extend(true, {}, this.options, options);\n this.element = element;\n this.model = this.options.model;\n this.fields = this._getFields();\n this._initContainer();\n this.createEditable();\n },\n options: { editors: {} },\n _initContainer: function () {\n this.wrapper = this.element;\n },\n createEditable: function () {\n var options = this.options;\n this.editable = new kendo.ui.Editable(this.wrapper, {\n fields: this.fields,\n target: options.target,\n clearContainer: false,\n model: this.model\n });\n },\n _isEditable: function (field) {\n return this.model.editable && this.model.editable(field);\n },\n _getFields: function () {\n var fields = [];\n var modelFields = this.model.fields;\n for (var field in modelFields) {\n var result = {};\n if (this._isEditable(field)) {\n var editor = this.options.editors[field];\n if (editor) {\n result.editor = editor;\n }\n result.field = field;\n fields.push(result);\n }\n }\n return fields;\n },\n end: function () {\n return this.editable.end();\n },\n destroy: function () {\n this.editable.destroy();\n this.editable.element.find('[' + kendo.attr('container-for') + ']').empty();\n this.model = this.wrapper = this.element = this.columns = this.editable = null;\n }\n });\n var PopupEditor = Editor.extend({\n init: function (element, options) {\n Editor.fn.init.call(this, element, options);\n this.bind(this.events, this.options);\n this.open();\n },\n events: [\n 'update',\n 'cancel'\n ],\n options: {\n window: {\n modal: true,\n resizable: false,\n draggable: true,\n title: 'Edit',\n visible: false\n }\n },\n _initContainer: function () {\n var that = this;\n this.wrapper = $('
        ').attr(kendo.attr('uid'), this.model.uid);\n var formContent = '';\n if (this.options.template) {\n formContent += this._renderTemplate();\n this.fields = [];\n } else {\n formContent += this._renderFields();\n }\n formContent += this._renderButtons();\n this.wrapper.append($('
        ').append(formContent));\n this.window = new kendo.ui.Window(this.wrapper.appendTo(this.element), this.options.window);\n this.window.bind('close', function (e) {\n if (e.userTriggered) {\n e.sender.element.focus();\n that._cancelClick(e);\n }\n });\n this._attachButtonEvents();\n },\n _renderTemplate: function () {\n var template = this.options.template;\n if (typeof template === 'string') {\n template = window.unescape(template);\n }\n template = kendo.template(template)(this.model);\n return template;\n },\n _renderFields: function () {\n var form = '';\n for (var i = 0; i < this.fields.length; i++) {\n var field = this.fields[i];\n form += '
        ';\n if (this._isEditable(field.field)) {\n form += '
        ';\n }\n }\n return form;\n },\n _renderButtons: function () {\n var form = '
        ';\n form += this._createButton('update');\n form += this._createButton('cancel');\n form += '
        ';\n return form;\n },\n _createButton: function (name) {\n return kendo.template(BUTTON_TEMPLATE)(defaultButtons[name]);\n },\n _attachButtonEvents: function () {\n this._cancelClickHandler = proxy(this._cancelClick, this);\n this.window.element.on(CLICK + NS, 'a.k-diagram-cancel', this._cancelClickHandler);\n this._updateClickHandler = proxy(this._updateClick, this);\n this.window.element.on(CLICK + NS, 'a.k-diagram-update', this._updateClickHandler);\n },\n _updateClick: function (e) {\n e.preventDefault();\n this.trigger('update');\n },\n _cancelClick: function (e) {\n e.preventDefault();\n this.trigger('cancel');\n },\n open: function () {\n this.window.center().open();\n },\n close: function () {\n this.window.bind('deactivate', proxy(this.destroy, this)).close();\n },\n destroy: function () {\n this.window.close().destroy();\n this.window.element.off(CLICK + NS, 'a.k-diagram-cancel', this._cancelClickHandler);\n this.window.element.off(CLICK + NS, 'a.k-diagram-update', this._updateClickHandler);\n this._cancelClickHandler = null;\n this._editUpdateClickHandler = null;\n this.window = null;\n Editor.fn.destroy.call(this);\n }\n });\n function connectionSelector(container, options) {\n var model = this.dataSource.reader.model;\n if (model) {\n var textField = model.fn.fields.text ? 'text' : model.idField;\n $('').appendTo(container).kendoDropDownList({\n dataValueField: model.idField,\n dataTextField: textField,\n dataSource: this.dataSource.data().toJSON(),\n optionLabel: ' ',\n valuePrimitive: true\n });\n }\n }\n function InactiveItem(dataItem) {\n this.dataItem = dataItem;\n this.callbacks = [];\n }\n InactiveItem.fn = InactiveItem.prototype = {\n onActivate: function (callback) {\n var deffered = $.Deferred();\n this.callbacks.push({\n callback: callback,\n deferred: deffered\n });\n return deffered;\n },\n activate: function () {\n var callbacks = this.callbacks;\n var item;\n for (var idx = 0; idx < callbacks.length; idx++) {\n item = this.callbacks[idx];\n item.callback(this.dataItem);\n item.deferred.resolve();\n }\n this.callbacks = [];\n }\n };\n function InactiveItemsCollection() {\n this.items = {};\n }\n InactiveItemsCollection.fn = InactiveItemsCollection.prototype = {\n add: function (items) {\n for (var idx = 0; idx < items.length; idx++) {\n this.items[items[idx].uid] = new InactiveItem(items[idx]);\n }\n },\n forEach: function (callback) {\n for (var uid in this.items) {\n callback(this.items[uid]);\n }\n },\n getByUid: function (uid) {\n return this.items[uid];\n },\n remove: function (item) {\n delete this.items[item.uid];\n }\n };\n var QuadRoot = Class.extend({\n init: function () {\n this.shapes = [];\n },\n _add: function (shape, bounds) {\n this.shapes.push({\n bounds: bounds,\n shape: shape\n });\n shape._quadNode = this;\n },\n insert: function (shape, bounds) {\n this._add(shape, bounds);\n },\n remove: function (shape) {\n var shapes = this.shapes;\n var length = shapes.length;\n for (var idx = 0; idx < length; idx++) {\n if (shapes[idx].shape === shape) {\n shapes.splice(idx, 1);\n break;\n }\n }\n },\n hitTestRect: function (rect, exclude) {\n var shapes = this.shapes;\n var length = shapes.length;\n for (var i = 0; i < length; i++) {\n if (this._testRect(shapes[i].shape, rect) && !dataviz.inArray(shapes[i].shape, exclude)) {\n return true;\n }\n }\n },\n _testRect: function (shape, rect) {\n var angle = shape.rotate().angle;\n var bounds = shape.bounds();\n var hit;\n if (!angle) {\n hit = bounds.overlaps(rect);\n } else {\n hit = Intersect.rects(rect, bounds, -angle);\n }\n return hit;\n }\n });\n var QuadNode = QuadRoot.extend({\n init: function (rect) {\n QuadRoot.fn.init.call(this);\n this.children = [];\n this.rect = rect;\n },\n inBounds: function (rect) {\n var nodeRect = this.rect;\n var nodeBottomRight = nodeRect.bottomRight();\n var bottomRight = rect.bottomRight();\n var inBounds = nodeRect.x <= rect.x && nodeRect.y <= rect.y && bottomRight.x <= nodeBottomRight.x && bottomRight.y <= nodeBottomRight.y;\n return inBounds;\n },\n overlapsBounds: function (rect) {\n return this.rect.overlaps(rect);\n },\n insert: function (shape, bounds) {\n var inserted = false;\n var children = this.children;\n var length = children.length;\n if (this.inBounds(bounds)) {\n if (!length && this.shapes.length < 4) {\n this._add(shape, bounds);\n } else {\n if (!length) {\n this._initChildren();\n }\n for (var idx = 0; idx < children.length; idx++) {\n if (children[idx].insert(shape, bounds)) {\n inserted = true;\n break;\n }\n }\n if (!inserted) {\n this._add(shape, bounds);\n }\n }\n inserted = true;\n }\n return inserted;\n },\n _initChildren: function () {\n var rect = this.rect, children = this.children, shapes = this.shapes, center = rect.center(), halfWidth = rect.width / 2, halfHeight = rect.height / 2, childIdx, shapeIdx;\n children.push(new QuadNode(new Rect(rect.x, rect.y, halfWidth, halfHeight)), new QuadNode(new Rect(center.x, rect.y, halfWidth, halfHeight)), new QuadNode(new Rect(rect.x, center.y, halfWidth, halfHeight)), new QuadNode(new Rect(center.x, center.y, halfWidth, halfHeight)));\n for (shapeIdx = shapes.length - 1; shapeIdx >= 0; shapeIdx--) {\n for (childIdx = 0; childIdx < children.length; childIdx++) {\n if (children[childIdx].insert(shapes[shapeIdx].shape, shapes[shapeIdx].bounds)) {\n shapes.splice(shapeIdx, 1);\n break;\n }\n }\n }\n },\n hitTestRect: function (rect, exclude) {\n var idx;\n var children = this.children;\n var length = children.length;\n var hit = false;\n if (this.overlapsBounds(rect)) {\n if (QuadRoot.fn.hitTestRect.call(this, rect, exclude)) {\n hit = true;\n } else {\n for (idx = 0; idx < length; idx++) {\n if (children[idx].hitTestRect(rect, exclude)) {\n hit = true;\n break;\n }\n }\n }\n }\n return hit;\n }\n });\n var ShapesQuadTree = Class.extend({\n ROOT_SIZE: 1000,\n init: function (diagram) {\n var boundsChangeHandler = proxy(this._boundsChange, this);\n diagram.bind(ITEMBOUNDSCHANGE, boundsChangeHandler);\n diagram.bind(ITEMROTATE, boundsChangeHandler);\n this.initRoots();\n },\n initRoots: function () {\n this.rootMap = {};\n this.root = new QuadRoot();\n },\n clear: function () {\n this.initRoots();\n },\n _boundsChange: function (e) {\n if (e.item._quadNode) {\n e.item._quadNode.remove(e.item);\n }\n this.insert(e.item);\n },\n insert: function (shape) {\n var bounds = shape.bounds(ROTATED);\n var rootSize = this.ROOT_SIZE;\n var sectors = this.getSectors(bounds);\n var x = sectors[0][0];\n var y = sectors[1][0];\n if (this.inRoot(sectors)) {\n this.root.insert(shape, bounds);\n } else {\n if (!this.rootMap[x]) {\n this.rootMap[x] = {};\n }\n if (!this.rootMap[x][y]) {\n this.rootMap[x][y] = new QuadNode(new Rect(x * rootSize, y * rootSize, rootSize, rootSize));\n }\n this.rootMap[x][y].insert(shape, bounds);\n }\n },\n remove: function (shape) {\n if (shape._quadNode) {\n shape._quadNode.remove(shape);\n }\n },\n inRoot: function (sectors) {\n return sectors[0].length > 1 || sectors[1].length > 1;\n },\n getSectors: function (rect) {\n var rootSize = this.ROOT_SIZE;\n var bottomRight = rect.bottomRight();\n var bottomX = math.floor(bottomRight.x / rootSize);\n var bottomY = math.floor(bottomRight.y / rootSize);\n var sectors = [\n [],\n []\n ];\n for (var x = math.floor(rect.x / rootSize); x <= bottomX; x++) {\n sectors[0].push(x);\n }\n for (var y = math.floor(rect.y / rootSize); y <= bottomY; y++) {\n sectors[1].push(y);\n }\n return sectors;\n },\n hitTestRect: function (rect, exclude) {\n var sectors = this.getSectors(rect);\n var xIdx, yIdx, x, y;\n var root;\n if (this.root.hitTestRect(rect, exclude)) {\n return true;\n }\n for (xIdx = 0; xIdx < sectors[0].length; xIdx++) {\n x = sectors[0][xIdx];\n for (yIdx = 0; yIdx < sectors[1].length; yIdx++) {\n y = sectors[1][yIdx];\n root = (this.rootMap[x] || {})[y];\n if (root && root.hitTestRect(rect, exclude)) {\n return true;\n }\n }\n }\n return false;\n }\n });\n function cloneDataItem(dataItem) {\n var result = dataItem;\n if (dataItem instanceof kendo.data.Model) {\n result = dataItem.toJSON();\n result[dataItem.idField] = dataItem._defaultId;\n }\n return result;\n }\n function splitDiagramElements(elements) {\n var connections = [];\n var shapes = [];\n var element, idx;\n for (idx = 0; idx < elements.length; idx++) {\n element = elements[idx];\n if (element instanceof Shape) {\n shapes.push(element);\n } else {\n connections.push(element);\n }\n }\n return {\n shapes: shapes,\n connections: connections\n };\n }\n function createModel(dataSource, model) {\n if (dataSource.reader.model) {\n return new dataSource.reader.model(model);\n }\n return new kendo.data.ObservableObject(model);\n }\n function clearField(field, model) {\n if (defined(model[field])) {\n model.set(field, null);\n }\n }\n function copyDefaultOptions(mainOptions, elementOptions, fields) {\n var field;\n for (var idx = 0; idx < fields.length; idx++) {\n field = fields[idx];\n if (elementOptions && !defined(elementOptions[field])) {\n elementOptions[field] = mainOptions[field];\n }\n }\n }\n function translateToOrigin(visual) {\n var bbox = visual.drawingContainer().clippedBBox(null);\n if (bbox.origin.x !== 0 || bbox.origin.y !== 0) {\n visual.position(-bbox.origin.x, -bbox.origin.y);\n }\n }\n function preventDefault(e) {\n e.preventDefault();\n }\n dataviz.ui.plugin(Diagram);\n deepExtend(diagram, {\n Shape: Shape,\n Connection: Connection,\n Connector: Connector,\n DiagramToolBar: DiagramToolBar,\n QuadNode: QuadNode,\n QuadRoot: QuadRoot,\n ShapesQuadTree: ShapesQuadTree,\n PopupEditor: PopupEditor\n });\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.dataviz.diagram', [\n 'kendo.data',\n 'kendo.draganddrop',\n 'kendo.userevents',\n 'kendo.mobile.scroller',\n 'kendo.drawing',\n 'dataviz/diagram/utils',\n 'dataviz/diagram/math',\n 'dataviz/diagram/svg',\n 'dataviz/diagram/services',\n 'dataviz/diagram/layout',\n 'dataviz/diagram/dom'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'dataviz.diagram',\n name: 'Diagram',\n category: 'dataviz',\n description: 'The Kendo DataViz Diagram ',\n depends: [\n 'data',\n 'userevents',\n 'mobile.scroller',\n 'draganddrop',\n 'drawing',\n 'dataviz.core',\n 'dataviz.themes',\n 'toolbar'\n ],\n features: [\n {\n id: 'dataviz.diagram-pdf-export',\n name: 'PDF export',\n description: 'Export Diagram as PDF',\n depends: ['pdf']\n },\n {\n id: 'dataviz.diagram-editing',\n name: 'Editing',\n description: 'Support for model editing',\n depends: [\n 'editable',\n 'window',\n 'dropdownlist'\n ]\n }\n ]\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.dataviz.treemap', [\n 'kendo.data',\n 'kendo.userevents',\n 'kendo.dataviz.themes'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'dataviz.treeMap',\n name: 'TreeMap',\n category: 'dataviz',\n description: 'The Kendo DataViz TreeMap',\n depends: [\n 'data',\n 'userevents',\n 'dataviz.themes'\n ]\n };\n (function ($, undefined) {\n var math = Math, proxy = $.proxy, isArray = $.isArray, kendo = window.kendo, outerHeight = kendo._outerHeight, outerWidth = kendo._outerWidth, Class = kendo.Class, Widget = kendo.ui.Widget, template = kendo.template, deepExtend = kendo.deepExtend, HierarchicalDataSource = kendo.data.HierarchicalDataSource, getter = kendo.getter, dataviz = kendo.dataviz;\n var NS = '.kendoTreeMap', CHANGE = 'change', DATA_BOUND = 'dataBound', ITEM_CREATED = 'itemCreated', MAX_VALUE = Number.MAX_VALUE, MOUSEOVER_NS = 'mouseover' + NS, MOUSELEAVE_NS = 'mouseleave' + NS, UNDEFINED = 'undefined';\n var TreeMap = Widget.extend({\n init: function (element, options) {\n kendo.destroy(element);\n $(element).empty();\n Widget.fn.init.call(this, element, options);\n this.wrapper = this.element;\n this._initTheme(this.options);\n this.element.addClass('k-widget k-treemap');\n this._setLayout();\n this._originalOptions = deepExtend({}, this.options);\n this._initDataSource();\n this._attachEvents();\n kendo.notify(this, dataviz.ui);\n },\n options: {\n name: 'TreeMap',\n theme: 'default',\n autoBind: true,\n textField: 'text',\n valueField: 'value',\n colorField: 'color'\n },\n events: [\n DATA_BOUND,\n ITEM_CREATED\n ],\n _initTheme: function (options) {\n var that = this, themes = dataviz.ui.themes || {}, themeName = ((options || {}).theme || '').toLowerCase(), themeOptions = (themes[themeName] || {}).treeMap;\n that.options = deepExtend({}, themeOptions, options);\n },\n _attachEvents: function () {\n this.element.on(MOUSEOVER_NS, proxy(this._mouseover, this)).on(MOUSELEAVE_NS, proxy(this._mouseleave, this));\n this._resizeHandler = proxy(this.resize, this, false);\n kendo.onResize(this._resizeHandler);\n },\n _setLayout: function () {\n if (this.options.type === 'horizontal') {\n this._layout = new SliceAndDice(false);\n this._view = new SliceAndDiceView(this, this.options);\n } else if (this.options.type === 'vertical') {\n this._layout = new SliceAndDice(true);\n this._view = new SliceAndDiceView(this, this.options);\n } else {\n this._layout = new Squarified();\n this._view = new SquarifiedView(this, this.options);\n }\n },\n _initDataSource: function () {\n var that = this, options = that.options, dataSource = options.dataSource;\n that._dataChangeHandler = proxy(that._onDataChange, that);\n that.dataSource = HierarchicalDataSource.create(dataSource).bind(CHANGE, that._dataChangeHandler);\n if (dataSource) {\n if (that.options.autoBind) {\n that.dataSource.fetch();\n }\n }\n },\n setDataSource: function (dataSource) {\n var that = this;\n that.dataSource.unbind(CHANGE, that._dataChangeHandler);\n that.dataSource = dataSource.bind(CHANGE, that._dataChangeHandler);\n if (dataSource) {\n if (that.options.autoBind) {\n that.dataSource.fetch();\n }\n }\n },\n _onDataChange: function (e) {\n var node = e.node;\n var items = e.items;\n var options = this.options;\n var item, i;\n if (!node) {\n this._cleanItems();\n this.element.empty();\n item = this._wrapItem(items[0]);\n this._layout.createRoot(item, outerWidth(this.element), outerHeight(this.element), this.options.type === 'vertical');\n this._view.createRoot(item);\n this._root = item;\n this._colorIdx = 0;\n } else {\n if (items.length) {\n var root = this._getByUid(node.uid);\n root.children = [];\n items = new kendo.data.Query(items)._sortForGrouping(options.valueField, 'desc');\n for (i = 0; i < items.length; i++) {\n item = items[i];\n root.children.push(this._wrapItem(item));\n }\n var htmlSize = this._view.htmlSize(root);\n this._layout.compute(root.children, root.coord, htmlSize);\n this._setColors(root.children);\n this._view.render(root);\n }\n }\n for (i = 0; i < items.length; i++) {\n items[i].load();\n }\n if (node) {\n this.trigger(DATA_BOUND, { node: node });\n }\n },\n _cleanItems: function () {\n var that = this;\n that.angular('cleanup', function () {\n return { elements: that.element.find('.k-leaf div,.k-treemap-title,.k-treemap-title-vertical') };\n });\n },\n _setColors: function (items) {\n var colors = this.options.colors;\n var colorIdx = this._colorIdx;\n var color = colors[colorIdx % colors.length];\n var colorRange, item;\n if (isArray(color)) {\n colorRange = colorsByLength(color[0], color[1], items.length);\n }\n var leafNodes = false;\n for (var i = 0; i < items.length; i++) {\n item = items[i];\n if (!defined(item.color)) {\n if (colorRange) {\n item.color = colorRange[i];\n } else {\n item.color = color;\n }\n }\n if (!item.dataItem.hasChildren) {\n leafNodes = true;\n }\n }\n if (leafNodes) {\n this._colorIdx++;\n }\n },\n _contentSize: function (root) {\n this.view.renderHeight(root);\n },\n _wrapItem: function (item) {\n var wrap = {};\n if (defined(this.options.valueField)) {\n wrap.value = getField(this.options.valueField, item);\n }\n if (defined(this.options.colorField)) {\n wrap.color = getField(this.options.colorField, item);\n }\n if (defined(this.options.textField)) {\n wrap.text = getField(this.options.textField, item);\n }\n wrap.level = item.level();\n wrap.dataItem = item;\n return wrap;\n },\n _getByUid: function (uid) {\n var items = [this._root];\n var item;\n while (items.length) {\n item = items.pop();\n if (item.dataItem.uid === uid) {\n return item;\n }\n if (item.children) {\n items = items.concat(item.children);\n }\n }\n },\n dataItem: function (node) {\n var uid = $(node).attr(kendo.attr('uid')), dataSource = this.dataSource;\n return dataSource && dataSource.getByUid(uid);\n },\n findByUid: function (uid) {\n return this.element.find('.k-treemap-tile[' + kendo.attr('uid') + '=\\'' + uid + '\\']');\n },\n _mouseover: function (e) {\n var target = $(e.target);\n if (target.hasClass('k-leaf')) {\n this._removeActiveState();\n target.removeClass('k-state-hover').addClass('k-state-hover');\n }\n },\n _removeActiveState: function () {\n this.element.find('.k-state-hover').removeClass('k-state-hover');\n },\n _mouseleave: function () {\n this._removeActiveState();\n },\n destroy: function () {\n Widget.fn.destroy.call(this);\n this.element.off(NS);\n if (this.dataSource) {\n this.dataSource.unbind(CHANGE, this._dataChangeHandler);\n }\n this._root = null;\n kendo.unbindResize(this._resizeHandler);\n kendo.destroy(this.element);\n },\n items: function () {\n return $();\n },\n getSize: function () {\n return kendo.dimensions(this.element);\n },\n _resize: function () {\n var root = this._root;\n if (root) {\n var element = this.element;\n var rootElement = element.children();\n root.coord.width = outerWidth(element);\n root.coord.height = outerHeight(element);\n rootElement.css({\n width: root.coord.width,\n height: root.coord.height\n });\n this._resizeItems(root, rootElement);\n }\n },\n _resizeItems: function (root, element) {\n if (root.children && root.children.length) {\n var elements = element.children('.k-treemap-wrap').children();\n var child, childElement;\n this._layout.compute(root.children, root.coord, { text: this._view.titleSize(root, element) });\n for (var idx = 0; idx < root.children.length; idx++) {\n child = root.children[idx];\n childElement = elements.filter('[' + kendo.attr('uid') + '=\\'' + child.dataItem.uid + '\\']');\n this._view.setItemSize(child, childElement);\n this._resizeItems(child, childElement);\n }\n }\n },\n setOptions: function (options) {\n var dataSource = options.dataSource;\n options.dataSource = undefined;\n this._originalOptions = deepExtend(this._originalOptions, options);\n this.options = deepExtend({}, this._originalOptions);\n this._setLayout();\n this._initTheme(this.options);\n Widget.fn._setEvents.call(this, options);\n if (dataSource) {\n this.setDataSource(HierarchicalDataSource.create(dataSource));\n }\n if (this.options.autoBind) {\n this.dataSource.fetch();\n }\n }\n });\n var Squarified = Class.extend({\n createRoot: function (root, width, height) {\n root.coord = {\n width: width,\n height: height,\n top: 0,\n left: 0\n };\n },\n leaf: function (tree) {\n return !tree.children;\n },\n layoutChildren: function (items, coord) {\n var parentArea = coord.width * coord.height;\n var totalArea = 0, itemsArea = [], i;\n for (i = 0; i < items.length; i++) {\n itemsArea[i] = parseFloat(items[i].value);\n totalArea += itemsArea[i];\n }\n for (i = 0; i < itemsArea.length; i++) {\n items[i].area = parentArea * itemsArea[i] / totalArea;\n }\n var minimumSideValue = this.layoutHorizontal() ? coord.height : coord.width;\n var firstElement = [items[0]];\n var tail = items.slice(1);\n this.squarify(tail, firstElement, minimumSideValue, coord);\n },\n squarify: function (tail, initElement, width, coord) {\n this.computeDim(tail, initElement, width, coord);\n },\n computeDim: function (tail, initElement, width, coord) {\n if (tail.length + initElement.length == 1) {\n var element = tail.length == 1 ? tail : initElement;\n this.layoutLast(element, width, coord);\n return;\n }\n if (tail.length >= 2 && initElement.length === 0) {\n initElement = [tail[0]];\n tail = tail.slice(1);\n }\n if (tail.length === 0) {\n if (initElement.length > 0) {\n this.layoutRow(initElement, width, coord);\n }\n return;\n }\n var firstElement = tail[0];\n if (this.worstAspectRatio(initElement, width) >= this.worstAspectRatio([firstElement].concat(initElement), width)) {\n this.computeDim(tail.slice(1), initElement.concat([firstElement]), width, coord);\n } else {\n var newCoords = this.layoutRow(initElement, width, coord);\n this.computeDim(tail, [], newCoords.dim, newCoords);\n }\n },\n layoutLast: function (items, w, coord) {\n items[0].coord = coord;\n },\n layoutRow: function (items, width, coord) {\n if (this.layoutHorizontal()) {\n return this.layoutV(items, width, coord);\n } else {\n return this.layoutH(items, width, coord);\n }\n },\n orientation: 'h',\n layoutVertical: function () {\n return this.orientation === 'v';\n },\n layoutHorizontal: function () {\n return this.orientation === 'h';\n },\n layoutChange: function () {\n this.orientation = this.layoutVertical() ? 'h' : 'v';\n },\n worstAspectRatio: function (items, width) {\n if (!items || items.length === 0) {\n return MAX_VALUE;\n }\n var areaSum = 0, maxArea = 0, minArea = MAX_VALUE;\n for (var i = 0; i < items.length; i++) {\n var area = items[i].area;\n areaSum += area;\n minArea = minArea < area ? minArea : area;\n maxArea = maxArea > area ? maxArea : area;\n }\n return math.max(width * width * maxArea / (areaSum * areaSum), areaSum * areaSum / (width * width * minArea));\n },\n compute: function (children, rootCoord, htmlSize) {\n if (!(rootCoord.width >= rootCoord.height && this.layoutHorizontal())) {\n this.layoutChange();\n }\n if (children && children.length > 0) {\n var newRootCoord = {\n width: rootCoord.width,\n height: rootCoord.height - htmlSize.text,\n top: 0,\n left: 0\n };\n this.layoutChildren(children, newRootCoord);\n }\n },\n layoutV: function (items, width, coord) {\n var totalArea = this._totalArea(items), top = 0;\n width = round(totalArea / width);\n for (var i = 0; i < items.length; i++) {\n var height = round(items[i].area / width);\n items[i].coord = {\n height: height,\n width: width,\n top: coord.top + top,\n left: coord.left\n };\n top += height;\n }\n var ans = {\n height: coord.height,\n width: coord.width - width,\n top: coord.top,\n left: coord.left + width\n };\n ans.dim = math.min(ans.width, ans.height);\n if (ans.dim != ans.height) {\n this.layoutChange();\n }\n return ans;\n },\n layoutH: function (items, width, coord) {\n var totalArea = this._totalArea(items);\n var height = round(totalArea / width), top = coord.top, left = 0;\n for (var i = 0; i < items.length; i++) {\n items[i].coord = {\n height: height,\n width: round(items[i].area / height),\n top: top,\n left: coord.left + left\n };\n left += items[i].coord.width;\n }\n var ans = {\n height: coord.height - height,\n width: coord.width,\n top: coord.top + height,\n left: coord.left\n };\n ans.dim = math.min(ans.width, ans.height);\n if (ans.dim != ans.width) {\n this.layoutChange();\n }\n return ans;\n },\n _totalArea: function (items) {\n var total = 0;\n for (var i = 0; i < items.length; i++) {\n total += items[i].area;\n }\n return total;\n }\n });\n var SquarifiedView = Class.extend({\n init: function (treeMap, options) {\n this.options = deepExtend({}, this.options, options);\n this.treeMap = treeMap;\n this.element = $(treeMap.element);\n this.offset = 0;\n },\n titleSize: function (item, element) {\n var text = element.children('.k-treemap-title');\n return text.height();\n },\n htmlSize: function (root) {\n var rootElement = this._getByUid(root.dataItem.uid);\n var htmlSize = { text: 0 };\n if (root.children) {\n this._clean(rootElement);\n var text = this._getText(root);\n if (text) {\n var title = this._createTitle(root);\n rootElement.append(title);\n this._compile(title, root.dataItem);\n htmlSize.text = title.height();\n }\n rootElement.append(this._createWrap());\n this.offset = (outerWidth(rootElement) - rootElement.innerWidth()) / 2;\n }\n return htmlSize;\n },\n _compile: function (element, dataItem) {\n this.treeMap.angular('compile', function () {\n return {\n elements: element,\n data: [{ dataItem: dataItem }]\n };\n });\n },\n _getByUid: function (uid) {\n return this.element.find('.k-treemap-tile[' + kendo.attr('uid') + '=\\'' + uid + '\\']');\n },\n render: function (root) {\n var rootElement = this._getByUid(root.dataItem.uid);\n var children = root.children;\n if (children) {\n var rootWrap = rootElement.find('.k-treemap-wrap');\n for (var i = 0; i < children.length; i++) {\n var leaf = children[i];\n var htmlElement = this._createLeaf(leaf);\n rootWrap.append(htmlElement);\n this._compile(htmlElement.children(), leaf.dataItem);\n this.treeMap.trigger(ITEM_CREATED, { element: htmlElement });\n }\n }\n },\n createRoot: function (root) {\n var htmlElement = this._createLeaf(root);\n this.element.append(htmlElement);\n this._compile(htmlElement.children(), root.dataItem);\n this.treeMap.trigger(ITEM_CREATED, { element: htmlElement });\n },\n _clean: function (root) {\n this.treeMap.angular('cleanup', function () {\n return { elements: root.children(':not(.k-treemap-wrap)') };\n });\n root.css('background-color', '');\n root.removeClass('k-leaf');\n root.removeClass('k-inverse');\n root.empty();\n },\n _createLeaf: function (item) {\n return this._createTile(item).css('background-color', item.color).addClass('k-leaf').toggleClass('k-inverse', this._tileColorBrightness(item) > 180).append($('
        ').html(this._getText(item)));\n },\n _createTile: function (item) {\n var tile = $('
        ');\n this.setItemSize(item, tile);\n if (defined(item.dataItem) && defined(item.dataItem.uid)) {\n tile.attr(kendo.attr('uid'), item.dataItem.uid);\n }\n return tile;\n },\n _itemCoordinates: function (item) {\n var coordinates = {\n width: item.coord.width,\n height: item.coord.height,\n left: item.coord.left,\n top: item.coord.top\n };\n if (coordinates.left && this.offset) {\n coordinates.width += this.offset * 2;\n } else {\n coordinates.width += this.offset;\n }\n if (coordinates.top) {\n coordinates.height += this.offset * 2;\n } else {\n coordinates.height += this.offset;\n }\n return coordinates;\n },\n setItemSize: function (item, element) {\n var coordinates = this._itemCoordinates(item);\n element.css({\n width: coordinates.width,\n height: coordinates.height,\n left: coordinates.left,\n top: coordinates.top\n });\n },\n _getText: function (item) {\n var text = item.text;\n if (this.options.template) {\n text = this._renderTemplate(item);\n }\n return text;\n },\n _renderTemplate: function (item) {\n var titleTemplate = template(this.options.template);\n return titleTemplate({\n dataItem: item.dataItem,\n text: item.text\n });\n },\n _createTitle: function (item) {\n return $('
        ').append($('
        ').html(this._getText(item)));\n },\n _createWrap: function () {\n return $('
        ');\n },\n _tileColorBrightness: function (item) {\n return colorBrightness(item.color);\n }\n });\n var SliceAndDice = Class.extend({\n createRoot: function (root, width, height, vertical) {\n root.coord = {\n width: width,\n height: height,\n top: 0,\n left: 0\n };\n root.vertical = vertical;\n },\n init: function (vertical) {\n this.vertical = vertical;\n this.quotient = vertical ? 1 : 0;\n },\n compute: function (children, rootCoord, htmlSize) {\n if (children.length > 0) {\n var width = rootCoord.width;\n var height = rootCoord.height;\n if (this.vertical) {\n height -= htmlSize.text;\n } else {\n width -= htmlSize.text;\n }\n var newRootCoord = {\n width: width,\n height: height,\n top: 0,\n left: 0\n };\n this.layoutChildren(children, newRootCoord);\n }\n },\n layoutChildren: function (items, coord) {\n var parentArea = coord.width * coord.height;\n var totalArea = 0;\n var itemsArea = [];\n var i;\n for (i = 0; i < items.length; i++) {\n var item = items[i];\n itemsArea[i] = parseFloat(items[i].value);\n totalArea += itemsArea[i];\n item.vertical = this.vertical;\n }\n for (i = 0; i < itemsArea.length; i++) {\n items[i].area = parentArea * itemsArea[i] / totalArea;\n }\n this.sliceAndDice(items, coord);\n },\n sliceAndDice: function (items, coord) {\n var totalArea = this._totalArea(items);\n if (items[0].level % 2 === this.quotient) {\n this.layoutHorizontal(items, coord, totalArea);\n } else {\n this.layoutVertical(items, coord, totalArea);\n }\n },\n layoutHorizontal: function (items, coord, totalArea) {\n var left = 0;\n for (var i = 0; i < items.length; i++) {\n var item = items[i];\n var width = item.area / (totalArea / coord.width);\n item.coord = {\n height: coord.height,\n width: width,\n top: coord.top,\n left: coord.left + left\n };\n left += width;\n }\n },\n layoutVertical: function (items, coord, totalArea) {\n var top = 0;\n for (var i = 0; i < items.length; i++) {\n var item = items[i];\n var height = item.area / (totalArea / coord.height);\n item.coord = {\n height: height,\n width: coord.width,\n top: coord.top + top,\n left: coord.left\n };\n top += height;\n }\n },\n _totalArea: function (items) {\n var total = 0;\n for (var i = 0; i < items.length; i++) {\n total += items[i].area;\n }\n return total;\n }\n });\n var SliceAndDiceView = SquarifiedView.extend({\n htmlSize: function (root) {\n var rootElement = this._getByUid(root.dataItem.uid);\n var htmlSize = {\n text: 0,\n offset: 0\n };\n if (root.children) {\n this._clean(rootElement);\n var text = this._getText(root);\n if (text) {\n var title = this._createTitle(root);\n rootElement.append(title);\n this._compile(title, root.dataItem);\n if (root.vertical) {\n htmlSize.text = title.height();\n } else {\n htmlSize.text = title.width();\n }\n }\n rootElement.append(this._createWrap());\n this.offset = (outerWidth(rootElement) - rootElement.innerWidth()) / 2;\n }\n return htmlSize;\n },\n titleSize: function (item, element) {\n var size;\n if (item.vertical) {\n size = element.children('.k-treemap-title').height();\n } else {\n size = element.children('.k-treemap-title-vertical').width();\n }\n return size;\n },\n _createTitle: function (item) {\n var title;\n if (item.vertical) {\n title = $('
        ');\n } else {\n title = $('
        ');\n }\n return title.append($('
        ').html(this._getText(item)));\n }\n });\n function getField(field, row) {\n if (row === null) {\n return row;\n }\n var get = getter(field, true);\n return get(row);\n }\n function defined(value) {\n return typeof value !== UNDEFINED;\n }\n function colorsByLength(min, max, length) {\n var minRGBtoDecimal = rgbToDecimal(min);\n var maxRGBtoDecimal = rgbToDecimal(max);\n var isDarker = colorBrightness(min) - colorBrightness(max) < 0;\n var colors = [];\n colors.push(min);\n for (var i = 0; i < length; i++) {\n var rgbColor = {\n r: colorByIndex(minRGBtoDecimal.r, maxRGBtoDecimal.r, i, length, isDarker),\n g: colorByIndex(minRGBtoDecimal.g, maxRGBtoDecimal.g, i, length, isDarker),\n b: colorByIndex(minRGBtoDecimal.b, maxRGBtoDecimal.b, i, length, isDarker)\n };\n colors.push(buildColorFromRGB(rgbColor));\n }\n colors.push(max);\n return colors;\n }\n function colorByIndex(min, max, index, length, isDarker) {\n var minColor = math.min(math.abs(min), math.abs(max));\n var maxColor = math.max(math.abs(min), math.abs(max));\n var step = (maxColor - minColor) / (length + 1);\n var currentStep = step * (index + 1);\n var color;\n if (isDarker) {\n color = minColor + currentStep;\n } else {\n color = maxColor - currentStep;\n }\n return color;\n }\n function buildColorFromRGB(color) {\n return '#' + decimalToRgb(color.r) + decimalToRgb(color.g) + decimalToRgb(color.b);\n }\n function rgbToDecimal(color) {\n color = color.replace('#', '');\n var rgbColor = colorToRGB(color);\n return {\n r: rgbToHex(rgbColor.r),\n g: rgbToHex(rgbColor.g),\n b: rgbToHex(rgbColor.b)\n };\n }\n function decimalToRgb(number) {\n var result = math.round(number).toString(16).toUpperCase();\n if (result.length === 1) {\n result = '0' + result;\n }\n return result;\n }\n function colorToRGB(color) {\n var colorLength = color.length;\n var rgbColor = {};\n if (colorLength === 3) {\n rgbColor.r = color[0];\n rgbColor.g = color[1];\n rgbColor.b = color[2];\n } else {\n rgbColor.r = color.substring(0, 2);\n rgbColor.g = color.substring(2, 4);\n rgbColor.b = color.substring(4, 6);\n }\n return rgbColor;\n }\n function rgbToHex(rgb) {\n return parseInt(rgb.toString(16), 16);\n }\n function colorBrightness(color) {\n var brightness = 0;\n if (color) {\n color = rgbToDecimal(color);\n brightness = math.sqrt(0.241 * color.r * color.r + 0.691 * color.g * color.g + 0.068 * color.b * color.b);\n }\n return brightness;\n }\n function round(value) {\n var power = math.pow(10, 4);\n return math.round(value * power) / power;\n }\n dataviz.ui.plugin(TreeMap);\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.dataviz', [\n 'kendo.core',\n 'kendo.fx',\n 'kendo.router',\n 'kendo.view',\n 'kendo.data.odata',\n 'kendo.data.xml',\n 'kendo.data',\n 'kendo.data.signalr',\n 'kendo.binder',\n 'kendo.userevents',\n 'kendo.draganddrop',\n 'kendo.mobile.scroller',\n 'kendo.popup',\n 'kendo.tooltip',\n 'kendo.drawing',\n 'kendo.dataviz.core',\n 'kendo.dataviz.themes',\n 'kendo.dataviz.chart',\n 'kendo.dataviz.gauge',\n 'kendo.dataviz.barcode',\n 'kendo.dataviz.qrcode',\n 'kendo.dataviz.stock',\n 'kendo.dataviz.sparkline',\n 'kendo.dataviz.map',\n 'kendo.dataviz.diagram',\n 'kendo.dataviz.treemap',\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}));"]}